diff --git a/.github/PULL_REQUEST_TEMPLATE b/.github/PULL_REQUEST_TEMPLATE index ee56fb313..d08b6fa43 100644 --- a/.github/PULL_REQUEST_TEMPLATE +++ b/.github/PULL_REQUEST_TEMPLATE @@ -1,5 +1,5 @@ + +- [Contributions](#contributions) +- [Resources](#resources) + - [Audio](#audio) + - [Text](#text) + - [Video](#video) + - [Learning Resources](#learning-resources) + + + +## Contributions + +If you would like to contribute to this list, please submit a PR and add `/sig contributor-experience` and `/assign @petermbenjamin`. + +The criteria for contributions are simple: + +- The resource must be related to Kubernetes. +- The resource must be free. +- Avoid undifferentiated search links (e.g. `https://example.com/search?q=kubernetes`), unless you can ensure the most relevant results (e.g. `https://example.com/search?q=kubernetes&category=technology`) + +## Resources + +### Audio + +- [PodCTL](https://twitter.com/PodCTL) +- [Kubernetes Podcast](https://kubernetespodcast.com) +- [The New Stack Podcasts](https://thenewstack.io/podcasts/) + +### Text + +- [Awesome Kubernetes](https://github.com/ramitsurana/awesome-kubernetes) +- [CNCF Blog](https://www.cncf.io/newsroom/blog/) +- [Dev.To](https://dev.to/t/kubernetes) +- [Heptio Blog](https://blog.heptio.com) +- [KubeTips](http://kubetips.com) +- [KubeWeekly](https://twitter.com/kubeweekly) +- [Kubedex](https://kubedex.com/category/blog/) +- [Kubernetes Blog](https://kubernetes.io/blog/) +- [Kubernetes Enhancements Repo](https://github.com/kubernetes/enhancements) +- [Kubernetes Forum](https://discuss.kubernetes.io) +- [Last Week in Kubernetes Development](http://lwkd.info) +- [Medium](https://medium.com/tag/kubernetes) +- [Reddit](https://www.reddit.com/r/kubernetes) +- [The New Stack: CI/CD With Kubernetes](https://thenewstack.io/ebooks/kubernetes/ci-cd-with-kubernetes/) +- [The New Stack: Kubernetes Deployment & Security Patterns](https://thenewstack.io/ebooks/kubernetes/kubernetes-deployment-and-security-patterns/) +- [The New Stack: Kubernetes Solutions Directory](https://thenewstack.io/ebooks/kubernetes/kubernetes-solutions-directory/) +- [The New Stack: State of Kubernetes Ecosystem](https://thenewstack.io/ebooks/kubernetes/state-of-kubernetes-ecosystem/) +- [The New Stack: Use-Cases for Kubernetes](https://thenewstack.io/ebooks/use-cases/use-cases-for-kubernetes/) +- [Weaveworks Blog](https://www.weave.works/blog/category/kubernetes/) + +### Video + +- [BrightTALK Webinars](https://www.brighttalk.com/search/?q=kubernetes) +- [Ceph YouTube Channel](https://www.youtube.com/channel/UCno-Fry25FJ7B4RycCxOtfw) +- [CNCF YouTube Channel](https://www.youtube.com/channel/UCvqbFHwN-nwalWPjPUKpvTA) +- [Heptio YouTube Channel](https://www.youtube.com/channel/UCjQU5ZI2mHswy7OOsii_URg) +- [Joe Hobot YouTube Channel](https://www.youtube.com/channel/UCdxEoi9hB617EDLEf8NWzkA) +- [Kubernetes YouTube Channel](https://www.youtube.com/channel/UCZ2bu0qutTOM0tHYa_jkIwg) +- [Lachlan Evenson YouTube Channel](https://www.youtube.com/channel/UCC5NsnXM2lE6kKfJKdQgsRQ) +- [Rancher YouTube Channel](https://www.youtube.com/channel/UCh5Xtp82q8wjijP8npkVTBA) +- [Rook YouTube Channel](https://www.youtube.com/channel/UCa7kFUSGO4NNSJV8MJVlJAA) +- [Tigera YouTube Channel](https://www.youtube.com/channel/UC8uN3yhpeBeerGNwDiQbcgw) +- [Weaveworks YouTube Channel](https://www.youtube.com/channel/UCmIz9ew1lA3-XDy5FqY-mrA/featured) + +### Learning Resources + +- [edx Courses](https://www.edx.org/course?search_query=kubernetes) +- [Katacoda Interactive Tutorials](https://www.katacoda.com) +- [Udacity Course](https://www.udacity.com/course/scalable-microservices-with-kubernetes--ud615) +- [Udemy Courses](https://www.udemy.com/courses/search/?courseLabel=&sort=relevance&q=kubernetes&price=price-free) diff --git a/communication/slack-guidelines.md b/communication/slack-guidelines.md index 23634339c..f19cd13e0 100644 --- a/communication/slack-guidelines.md +++ b/communication/slack-guidelines.md @@ -1,6 +1,6 @@ # SLACK GUIDELINES -Slack is the main communication platform for Kubernetes outside of our mailing lists. It’s important that conversation stays on topic in each channel, and that everyone abides by the Code of Conduct. We have over 30,000 members who should all expect to have a positive experience. +Slack is the main communication platform for Kubernetes outside of our mailing lists. It’s important that conversation stays on topic in each channel, and that everyone abides by the Code of Conduct. We have over 50,000 members who should all expect to have a positive experience. Chat is searchable and public. Do not make comments that you would not say on a video recording or in another public space. Please be courteous to others. @@ -10,12 +10,8 @@ Chat is searchable and public. Do not make comments that you would not say on a Kubernetes adheres to Cloud Native Compute Foundation's [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) throughout the project, and includes all communication mediums. ## ADMINS -(by Slack ID and timezone) -* caniszczyk - CT -* idvoretskyi - CET -* jdumars - ET -* jorge - CT -* paris - PT + +- Check the [centralized list of administrators](./moderators.md) for contact information. Slack Admins should make sure to mention this in the “What I do” section of their Slack profile, as well as for which time zone. @@ -37,7 +33,7 @@ Please reach out to the #slack-admins group with your request to create a new ch Channels are dedicated to [SIGs, WGs](/sig-list.md), sub-projects, community topics, and related Kubernetes programs/projects. Channels are not: * company specific; cloud providers are ok with product names as the channel. Discourse will be about Kubernetes-related topics and not proprietary information of the provider. -* private unless there is an exception: code of conduct matters, mentoring, security/vulnerabilities, or steering committee. +* private unless there is an exception: code of conduct matters, mentoring, security/vulnerabilities, github management, or steering committee. Typical naming conventions: #kubernetes-foo #sig-foo #meetup-foo #location-users #projectname @@ -51,11 +47,13 @@ Join the #slack-admins channel or contact one of the admins in the closest timez What if you have a problem with an admin? Send a DM to another listed Admin and describe the situation OR -If it’s a code of conduct issue, please send an email to steering-private@kubernetes.io and describe the situation +If it’s a code of conduct issue, please send an email to conduct@kubernetes.io and describe the situation ## BOTS, TOKENS, WEBHOOKS, OH MY -Bots, tokens, and webhooks are reviewed on a case-by-case basis with most requests being rejected due to security, privacy, and usability concerns.. Bots and the like tend to make a lot of noise in channels. Our Slack instance has over 30,000 people and we want everyone to have a great experience. Please join #Slack-admins and have a discussion about your request before requesting the access. GitHub workflow alerts into certain channels and requests from CNCF are typically OK. +Bots, tokens, and webhooks are reviewed on a case-by-case basis with most requests being rejected due to security, privacy, and usability concerns. Bots and the like tend to make a lot of noise in channels. Our Slack instance has over 50,000 people and we want everyone to have a great experience. Please join #slack-admins and have a discussion about your request before requesting the access. + +Typically OK: GitHub, CNCF requests, and tools/platforms that we use to contribute to Kubernetes ## ADMIN MODERATION @@ -78,8 +76,15 @@ For reasons listed below, admins may inactivate individual Slack accounts. Due t In the case that certain channels have rules or guidelines, they will be listed in the purpose or pinned docs of that channel. #kubernetes-dev = questions and discourse around upstream contributions and development to kubernetes -#kubernetes-careers = job openings for positions working with/on/around Kubernetes. Postings should include contact details. +#kubernetes-careers = job openings for positions working with/on/around Kubernetes. Post the job once and pin it. Pins expire after 30 days. Postings must include: +- A link to the posting or job description +- The business name that will employ the Kubernetes hire +- The location of the role or if remote is OK ## DM (Direct Message) Conversations Please do not engage in proprietary company specific conversations in the Kubernetes Slack instance. This is meant for conversations around related Kubernetes open source topics and community. Proprietary conversations should occur in your company Slack and/or communication platforms. As with all communication, please be mindful of appropriateness, professionalism, and applicability to the Kubernetes community. + + +Note: +We archive the entire workgroup's slack data in zip files when we have time. [The latest archive is from June 2016-November 2018.](https://drive.google.com/drive/folders/1idJkWcDuSfs8nFUm-1BgvzZxCqPMpDCb?usp=sharing) diff --git a/communication/zoom-guidelines.md b/communication/zoom-guidelines.md new file mode 100644 index 000000000..a98d6a825 --- /dev/null +++ b/communication/zoom-guidelines.md @@ -0,0 +1,114 @@ +# Zoom Guidelines + +Zoom is the main video communication platform for Kubernetes. +It is used for running the [community meeting](/events/community-meeting.md), [SIG/WG meetings](/sig-list.md), [Office Hours](/events/office-hours.md), [Meet Our Contributors](/mentoring/meet-our-contributors.md) and many other Kubernetes online events. +Since the Zoom meetings are open to the general public, a Zoom host or cohost has to moderate a meeting in all senses of the word from starting and stopping the meeting to acting on code of conduct issues. + +These guidelines are meant as a tool to help Kubernetes members manage their Zoom resources. +Check the main [moderation](./moderation.md) page for more information on other tools and general moderation guidelines. + +## Current State + +Zoom licenses are managed by the [CNCF Service Desk](https://github.com/cncf/servicedesk) through the Zoom Admins listed below. At the time of this update, we have 41 paid pro user licenses with 38 accounted for. + +## Code of Conduct + +Kubernetes adheres to Cloud Native Compute Foundation's [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) throughout the project, and includes all communication mediums. + +## Obtaining a Zoom License + +Each SIG should have a paid Zoom account that all leads/chairs/necessary trusted owners have access to through their k-sig-foo-leads@googlegroups.com account +See the [SIG Creation procedure](/sig-governance.md#sig-creation-procedure) document on how to set up an initial account. + +## Setting Up Your Meeting and Moderation + +Do not share your zoom link on social media. + +Moderation will not be available if you are not following this list: + +- [latest version](https://zoom.us/download) +- logged in as the leads of that meeting OR have the host key. (Example: you need to use the leads account for sig arch if you are running that meeting or have their meeting key with join before host enabled) +- using a meeting that was set up through the "Meeting" tab in the zoom account and NOT the personal meeting ID + +After the meeting has started: + +- Assign a cohost to help with moderation. It should never be your notetaker unless it's a very small group. +- Turn off screen sharing for everyone and indicate only host. If you have others that need to share their screen, the host can enable that on the fly. (via the ^ next to Share Screen) + +If you're dealing with a troll or bad actor: + +- You can put an attendee on hold. The participant will be put into a 'waiting room' and not have ability to chat or discuss written or verbally until the host undoes the hold. +- Remove the participant. Please be cautious when testing or using this feature, as it is permanent. They will never be able to come back into that meeting ID on that device. Do not joke around with this feature; it's better to use the hold first and then remove. +- After an action has been taken, use the 'lock meeting' feature so that no others come into the meeting and you can resume. If that fails, end the call immediately. Contact Zoom Admins after the meeting to report. + +You can find these actions when clicking on the 'more' or '...' options after scrolling over the participants name/information. + +It is required that a host be comfortable with how to use these moderation tools and the zoom settings in general. Make sure whoever is running your meeting is equipped with the right knowledge and skills. + +### Other Related Documentation + +Zoom has documentation on how to use their moderation tools: + +- https://support.zoom.us/hc/en-us/articles/201362603-Host-Controls-in-a-Meeting + +We created an extensive [best practices doc](https://docs.google.com/document/d/1fudC_diqhN2TdclGKnQ4Omu4mwom83kYbZ5uzVRI07w/edit?usp=sharing) with screenshots. Those who belong to kubernetes-sig-leads@ have access. + +## Meeting Archive Videos + +If a violation has been addressed by a host and it has been recorded by Zoom, the video should be edited before being posted on the [Kubernetes channel](https://www.youtube.com/c/kubernetescommunity). + +Contact [SIG Contributor Experience](/sig-contributor-experience) if you need help to edit a video before posting it to the public. + +Chairs and TLs are responsible for posting all update meetings to their playlist on YouTube. [Please follow this guideline for more details.](K8sYoutubeCollaboration.md) + +## Zoom Admins + +Check the [centralized list of administrators](./moderators.md) for contact information. + +### Escalating and/Reporting a Problem + +Issues that cannot be handle via normal moderation with the Zoom Admins above and there has been a clear code of conduct violation, please escalate to the Kubernetes Code of Conduct Committee at conduct@kubernetes.io. + +## Screen sharing guidelines and recommendations + +Zoom has a documentation on how to use their screen sharing feature: + +- https://support.zoom.us/hc/en-us/articles/201362153-How-Do-I-Share-My-Screen- + +Recommendations: + +- Turn off notification to prevent any interference. +- Close all sensitive documents and unrelated programs before sharing the screen eg. Emails. +- Test your presentation before hand to make sure everything goes smoothly. +- Keep your desktop clean. Make sure there is no offensive or/and distracting background. + +## Audio/Video Quality Recommendations + +While video conferencing has been a real boon to productivity there are still [lots of things that can go wrong](https://www.youtube.com/watch?v=JMOOG7rWTPg) during a conference video call. + +There are some things that are just plain out of your control, but there are some things that you can control. +Here are some tips if you're just getting into remote meetings. +Keep in mind that sometimes things just break and sometimes it's just plain bad luck, so these aren't hard rules, more of a set of loose guidelines on how to tip the odds in your favor. + +### Recommended Hardware to Have + +- A dedicated microphone - This is the number one upgrade you can do. Sound is one of those things that can immediately change the quality of your call. If you plan on being here for the long haul something like a [Blue Yeti](https://www.bluedesigns.com/products/yeti/) will work great due to the simplicity of using USB audio and having a hardware mute button. Consider a [pop filter](https://en.wikipedia.org/wiki/Pop_filter) as well if necessary. +- A Video Camera - A bad image can be worked around if the audio is good. Certain models have noise cancelling dual-microphones, which are a great backup for a dedicated microphone or if you are travelling. +- A decent set of headphones - Personal preference, these cut down on the audio feedback when in larger meetings. + +What about an integrated headset and microphone? This totally depends on the type. We recommend testing it with a friend or asking around for recommendations for which models work best. + +### Hardware we don't recommend + +- Earbuds. Generally speaking they are not ideal, and while they might sound fine to you when 50 people are on a call the ambient noise adds up. Some people join with earbuds and it sounds excellent, some people join and it sounds terrible. Practicing with someone ahead of time can help you determine how well your earbuds work. + +### Pro-tips + +- [Join on muted audio and video](https://support.zoom.us/hc/en-us/articles/203024649-Video-Or-Microphone-Off-By-Attendee) in order to prevent noise to those already in a call. +- If you don't have anything to say at that moment, MUTE. This is a common problem, you can help out a teammate by mentioning it on Zoom chat or asking them to mute on the call itself. Hopefully the meeting co-host can help mute before this is too disruptive. Don't feel bad if this happens to you, it's a common occurrence. +- Try to find a quiet meeting place to join from; some coworking spaces and coffee shops have a ton of ambient noise that won't be obvious to you but will be to other people in the meeting. When presenting to large groups consider delegating to another person who is in a quieter environment. +- Using your computer's built in microphone and speakers might work in a pinch, but in general won't work as well as a dedicated headset/microphone. +- Consider using visual signals to agree to points so that you don't have to mute/unmute often during a call. This can be an especially useful technique when people are asking for lazy consensus. A simple thumbs up can go a long ways! +- It is common for people to step on each other when there's an audio delay, and both parties are trying to communicate something, so don't sweat it, just remember to try and pause before speaking, or consider raising your hand (if your video is on) to help the host determine who should speak first. + +Thanks for making Kubernetes meetings work great! diff --git a/community-membership.md b/community-membership.md index 3d7bb9d8e..91467b99b 100644 --- a/community-membership.md +++ b/community-membership.md @@ -2,8 +2,9 @@ **Note:** This document is in progress -This doc outlines the various responsibilities of contributor roles in Kubernetes. The Kubernetes -project is subdivided into subprojects under SIGs. Responsibilities for most roles is scoped to these subprojects. +This doc outlines the various responsibilities of contributor roles in +Kubernetes. The Kubernetes project is subdivided into subprojects under SIGs. +Responsibilities for most roles are scoped to these subprojects. | Role | Responsibilities | Requirements | Defined by | | -----| ---------------- | ------------ | -------| @@ -14,21 +15,24 @@ project is subdivided into subprojects under SIGs. Responsibilities for most ro ## New contributors -[New contributors] should be welcomed to the community by existing members, helped with PR workflow, and directed to -relevant documentation and communication channels. +[New contributors] should be welcomed to the community by existing members, +helped with PR workflow, and directed to relevant documentation and +communication channels. ## Established community members -Established community members are expected to demonstrate their adherence to the principles in this -document, familiarity with project organization, roles, policies, procedures, conventions, etc., -and technical and/or writing ability. Role-specific expectations, responsibilities, and requirements -are enumerated below. +Established community members are expected to demonstrate their adherence to the +principles in this document, familiarity with project organization, roles, +policies, procedures, conventions, etc., and technical and/or writing ability. +Role-specific expectations, responsibilities, and requirements are enumerated +below. ## Member -Members are continuously active contributors in the community. They can have issues and PRs assigned to them, -participate in SIGs through GitHub teams, and pre-submit tests are automatically run for their PRs. -Members are expected to remain active contributors to the community. +Members are continuously active contributors in the community. They can have +issues and PRs assigned to them, participate in SIGs through GitHub teams, and +pre-submit tests are automatically run for their PRs. Members are expected to +remain active contributors to the community. **Defined by:** Member of the Kubernetes GitHub organization @@ -41,6 +45,7 @@ Members are expected to remain active contributors to the community. - Contributing to SIG, subproject, or community discussions (e.g. meetings, Slack, email discussion forums, Stack Overflow) - Subscribed to [kubernetes-dev@googlegroups.com] +- Have read the [contributor guide] - Actively contributing to 1 or more subprojects. - Sponsored by 2 reviewers. **Note the following requirements for sponsors**: - Sponsors must have close interactions with the prospective member - e.g. code/design/proposal review, coordinating @@ -48,39 +53,24 @@ Members are expected to remain active contributors to the community. - Sponsors must be reviewers or approvers in at least 1 OWNERS file (in any repo in the Kubernetes GitHub organization) - Sponsors must be from multiple member companies to demonstrate integration across community. -- Send an email to *kubernetes-membership@googlegroups.com* with: - - CC: your sponsors on the message - - Subject: `REQUEST: New membership for ` - - Body: Confirm that you have joined kubernetes-dev@googlegroups.com (e.g. `I have joined - kubernetes-dev@googlegroups.com`) - - Body: GitHub handles of sponsors - - Body: List of contributions (PRs authored / reviewed, Issues responded to, etc) +- **[Open an issue][membership request] against the kubernetes/org repo** + - Ensure your sponsors are @mentioned on the issue + - Complete every item on the checklist ([preview the current version of the template][membership template]) + - Make sure that the list of contributions included is representative of your work on the project. - Have your sponsoring reviewers reply confirmation of sponsorship: `+1` -- Wait for response to the message -- Have read the [developer guide] +- Once your sponsors have responded, your request will be reviewed by the [Kubernetes GitHub Admin team], in accordance with their [SLO]. Any missing information will be requested. -Example message: +### Kubernetes Ecosystem -``` -To: kubernetes-membership@googlegroups.com -CC: , -Subject: REQUEST: New membership for -Body: - -I have joined kubernetes-dev@googlegroups.com. - -Sponsors: -- / -- / - -List of contributions: -- -- -- -- -- - -``` +There are related [Kubernetes GitHub organizations], such as [kubernetes-sigs]. +We are currently working on automation that would transfer membership in the +Kubernetes organization to any related orgs automatically, but such is not the +case currently. If you are a Kubernetes org member, you are implicitly eligible +for membership in related orgs, and can request membership when it becomes +relevant, by [opening an issue][membership request] against the kubernetes/org +repo, as above. However, if you are a member of any of the related +[Kubernetes GitHub organizations] but not of the [Kubernetes org], +you will need explicit sponsorship for your membership request. ### Responsibilities and privileges @@ -95,24 +85,28 @@ List of contributions: - Tests can be run against their PRs automatically. No `/ok-to-test` needed. - Members can do `/ok-to-test` for PRs that have a `needs-ok-to-test` label, and use commands like `/close` to close PRs as well. -**Note:** members who frequently contribute code are expected to proactively perform code reviews and work towards -becoming a primary *reviewer* for the subproject that they are active in. +**Note:** members who frequently contribute code are expected to proactively +perform code reviews and work towards becoming a primary *reviewer* for the +subproject that they are active in. ## Reviewer -Reviewers are able to review code for quality and correctness on some part of a subproject. -They are knowledgeable about both the codebase and software engineering principles. +Reviewers are able to review code for quality and correctness on some part of a +subproject. They are knowledgeable about both the codebase and software +engineering principles. -**Defined by:** *reviewers* entry in an OWNERS file in a repo owned by the Kubernetes project. +**Defined by:** *reviewers* entry in an OWNERS file in a repo owned by the +Kubernetes project. Reviewer status is scoped to a part of the codebase. -**Note:** Acceptance of code contributions requires at least one approver in addition to the assigned reviewers. +**Note:** Acceptance of code contributions requires at least one approver in +addition to the assigned reviewers. ### Requirements -The following apply to the part of codebase for which one would be a reviewer in an [OWNERS] file -(for repos using the bot). +The following apply to the part of codebase for which one would be a reviewer in +an [OWNERS] file (for repos using the bot). - member for at least 3 months - Primary reviewer for at least 5 PRs to the codebase @@ -125,8 +119,8 @@ The following apply to the part of codebase for which one would be a reviewer in ### Responsibilities and privileges -The following apply to the part of codebase for which one would be a reviewer in an [OWNERS] file -(for repos using the bot). +The following apply to the part of codebase for which one would be a reviewer in +an [OWNERS] file (for repos using the bot). - Tests are automatically run for PullRequests from members of the Kubernetes GitHub organization - Code reviewer status may be a precondition to accepting large code contributions @@ -141,19 +135,21 @@ The following apply to the part of codebase for which one would be a reviewer in ## Approver -Code approvers are able to both review and approve code contributions. While code review is focused on -code quality and correctness, approval is focused on holistic acceptance of a contribution including: -backwards / forwards compatibility, adhering to API and flag conventions, subtle performance and correctness issues, -interactions with other parts of the system, etc. +Code approvers are able to both review and approve code contributions. While +code review is focused on code quality and correctness, approval is focused on +holistic acceptance of a contribution including: backwards / forwards +compatibility, adhering to API and flag conventions, subtle performance and +correctness issues, interactions with other parts of the system, etc. -**Defined by:** *approvers* entry in an OWNERS file in a repo owned by the Kubernetes project. +**Defined by:** *approvers* entry in an OWNERS file in a repo owned by the +Kubernetes project. Approver status is scoped to a part of the codebase. ### Requirements -The following apply to the part of codebase for which one would be an approver in an [OWNERS] file -(for repos using the bot). +The following apply to the part of codebase for which one would be an approver +in an [OWNERS] file (for repos using the bot). - Reviewer of the codebase for at least 3 months - Primary reviewer for at least 10 substantial PRs to the codebase @@ -164,8 +160,8 @@ The following apply to the part of codebase for which one would be an approver i ### Responsibilities and privileges -The following apply to the part of codebase for which one would be an approver in an [OWNERS] file -(for repos using the bot). +The following apply to the part of codebase for which one would be an approver +in an [OWNERS] file (for repos using the bot). - Approver status may be a precondition to accepting large code contributions - Demonstrate sound technical judgement @@ -178,21 +174,24 @@ The following apply to the part of codebase for which one would be an approver i ## Subproject Owner -**Note:** This is a generalized high-level description of the role, and the specifics of the subproject owner role's -responsibilities and related processes *MUST* be defined for individual SIGs or subprojects. +**Note:** This is a generalized high-level description of the role, and the +specifics of the subproject owner role's responsibilities and related +processes *MUST* be defined for individual SIGs or subprojects. -Subproject Owners are the technical authority for a subproject in the Kubernetes project. They *MUST* have demonstrated -both good judgement and responsibility towards the health of that subproject. Subproject Owners *MUST* set technical -direction and make or approve design decisions for their subproject - either directly or through delegation -of these responsibilities. +Subproject Owners are the technical authority for a subproject in the Kubernetes +project. They *MUST* have demonstrated both good judgement and responsibility +towards the health of that subproject. Subproject Owners *MUST* set technical +direction and make or approve design decisions for their subproject - either +directly or through delegation of these responsibilities. **Defined by:** *owners* entry in subproject [OWNERS] files as defined by [sigs.yaml] *subproject.owners* ### Requirements -The process for becoming an subproject Owner should be defined in the SIG charter of the SIG owning -the subproject. Unlike the roles outlined above, the Owners of a subproject are typically limited -to a relatively small group of decision makers and updated as fits the needs of the subproject. +The process for becoming an subproject Owner should be defined in the SIG +charter of the SIG owning the subproject. Unlike the roles outlined above, the +Owners of a subproject are typically limited to a relatively small group of +decision makers and updated as fits the needs of the subproject. The following apply to the subproject for which one would be an owner. @@ -222,13 +221,20 @@ The following apply to the subproject for which one would be an owner. **Status:** Removed -The Maintainer role has been removed and replaced with a greater focus on [owner](#owner)s. +The Maintainer role has been removed and replaced with a greater focus on [OWNERS]. -[code reviews]: contributors/devel/collab.md -[community expectations]: contributors/guide/community-expectations.md -[developer guide]: contributors/devel/README.md -[two-factor authentication]: https://help.github.com/articles/about-two-factor-authentication +[code reviews]: /contributors/devel/collab.md +[community expectations]: /contributors/guide/community-expectations.md +[contributor guide]: /contributors/guide/README.md +[Kubernetes GitHub Admin team]: /github-management/README.md#github-administration-team +[Kubernetes GitHub organizations]: /github-management#actively-used-github-organizations +[Kubernetes org]: https://github.com/kubernetes [kubernetes-dev@googlegroups.com]: https://groups.google.com/forum/#!forum/kubernetes-dev -[sigs.yaml]: sigs.yaml -[New contributors]: https://github.com/kubernetes/community/blob/master/CONTRIBUTING.md -[OWNERS]: contributors/guide/owners.md +[kubernetes-sigs]: https://github.com/kubernetes-sigs +[membership request]: https://github.com/kubernetes/org/issues/new?template=membership.md&title=REQUEST%3A%20New%20membership%20for%20%3Cyour-GH-handle%3E +[membership template]: https://git.k8s.io/org/.github/ISSUE_TEMPLATE/membership.md +[New contributors]: /CONTRIBUTING.md +[OWNERS]: /contributors/guide/owners.md +[sigs.yaml]: /sigs.yaml +[SLO]: /github-management/org-owners-guide.md#slos +[two-factor authentication]: https://help.github.com/articles/about-two-factor-authentication diff --git a/contributors/design-proposals/README.md b/contributors/design-proposals/README.md index dbdfb6c96..404464f71 100644 --- a/contributors/design-proposals/README.md +++ b/contributors/design-proposals/README.md @@ -8,4 +8,4 @@ Note that a number of these documents are historical and may be out of date or u TODO: Add the current status to each document and clearly indicate which are up to date. -TODO: Document the [proposal process](../devel/faster_reviews.md#1-dont-build-a-cathedral-in-one-pr). +TODO: Document the [proposal process](../guide/pull-requests.md#best-practices-for-faster-reviews). diff --git a/contributors/design-proposals/api-machinery/aggregated-api-servers.md b/contributors/design-proposals/api-machinery/aggregated-api-servers.md index c5f8ca1a0..d436c6b96 100644 --- a/contributors/design-proposals/api-machinery/aggregated-api-servers.md +++ b/contributors/design-proposals/api-machinery/aggregated-api-servers.md @@ -31,7 +31,7 @@ aggregated servers. * Developers should be able to write their own API server and cluster admins should be able to add them to their cluster, exposing new APIs at runtime. All of this should not require any change to the core kubernetes API server. -* These new APIs should be seamless extension of the core kubernetes APIs (ex: +* These new APIs should be seamless extensions of the core kubernetes APIs (ex: they should be operated upon via kubectl). ## Non Goals diff --git a/contributors/design-proposals/api-machinery/api-chunking.md b/contributors/design-proposals/api-machinery/api-chunking.md index 0a099fd3c..a04c9ba43 100644 --- a/contributors/design-proposals/api-machinery/api-chunking.md +++ b/contributors/design-proposals/api-machinery/api-chunking.md @@ -89,7 +89,7 @@ Implementations that cannot offer consistent ranging (returning a set of results #### etcd3 -For etcd3 the continue token would contain a resource version (the snapshot that we are reading that is consistent across the entire LIST) and the start key for the next set of results. Upon receiving a valid continue token the apiserver would instruct etcd3 to retrieve the set of results at a given resource version, beginning at the provided start key, limited by the maximum number of requests provided by the continue token (or optionally, by a different limit specified by the client). If more results remain after reading up to the limit, the storage should calculate a continue token that would begin at the next possible key, and the continue token set on the returned list. +For etcd3 the continue token would contain a resource version (the snapshot that we are reading that is consistent across the entire LIST) and the start key for the next set of results. Upon receiving a valid continue token the apiserver would instruct etcd3 to retrieve the set of results at a given resource version, beginning at the provided start key, limited by the maximum number of requests provided by the continue token (or optionally, by a different limit specified by the client). If more results remain after reading up to the limit, the storage should calculate a continue token that would begin at the next possible key, and the continue token set on the returned list. The storage layer in the apiserver must apply consistency checking to the provided continue token to ensure that malicious users cannot trick the server into serving results outside of its range. The storage layer must perform defensive checking on the provided value, check for path traversal attacks, and have stable versioning for the continue token. diff --git a/contributors/design-proposals/api-machinery/auditing.md b/contributors/design-proposals/api-machinery/auditing.md index b4def584d..2770f56d7 100644 --- a/contributors/design-proposals/api-machinery/auditing.md +++ b/contributors/design-proposals/api-machinery/auditing.md @@ -35,7 +35,7 @@ while ## Constraints and Assumptions -* it is not the goal to implement all output formats one can imagine. The main goal is to be extensible with a clear golang interface. Implementations of e.g. CADF must be possible, but won't be discussed here. +* it is not the goal to implement all output formats one can imagine. The main goal is to be extensible with a clear golang interface. Implementations of e.g. CADF must be possible, but won't be discussed here. * dynamic loading of backends for new output formats are out of scope. ## Use Cases @@ -243,7 +243,7 @@ type PolicyRule struct { // An empty list implies every user. Users []string // The user groups this rule applies to. If a user is considered matching - // if the are a member of any of these groups + // if they are a member of any of these groups // An empty list implies every user group. UserGroups []string diff --git a/contributors/design-proposals/api-machinery/customresource-conversion-webhook.md b/contributors/design-proposals/api-machinery/customresource-conversion-webhook.md new file mode 100644 index 000000000..2b4aeb25e --- /dev/null +++ b/contributors/design-proposals/api-machinery/customresource-conversion-webhook.md @@ -0,0 +1,889 @@ +# CRD Conversion Webhook + +Status: Approved + +Version: Alpha + +Implementation Owner: @mbohlool + +Authors: @mbohlool, @erictune + +Thanks: @dbsmith, @deads2k, @sttts, @liggit, @enisoc + +### Summary + +This document proposes a detailed plan for adding support for version-conversion of Kubernetes resources defined via Custom Resource Definitions (CRD). The API Server is extended to call out to a webhook at appropriate parts of the handler stack for CRDs. + +No new resources are added; the [CRD resource](https://github.com/kubernetes/kubernetes/blob/34383aa0a49ab916d74ea897cebc79ce0acfc9dd/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/types.go#L187) is extended to include conversion information as well as multiple schema definitions, one for each apiVersion that is to be served. + + +## Definitions + +**Webhook Resource**: a Kubernetes resource (or portion of a resource) that informs the API Server that it should call out to a Webhook Host for certain operations. + +**Webhook Host**: a process / binary which accepts HTTP connections, intended to be called by the Kubernetes API Server as part of a Webhook. + +**Webhook**: In Kubernetes, refers to the idea of having the API server make an HTTP request to another service at a point in its request processing stack. Examples are [Authentication webhooks](https://kubernetes.io/docs/reference/access-authn-authz/webhook/) and [Admission Webhooks](https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/). Usually refers to the system of Webhook Host and Webhook Resource together, but occasionally used to mean just Host or just Resource. + +**Conversion Webhook**: Webhook that can convert an object from one version to another. + +**Custom Resource**: In the context of this document, it refers to resources defined as Custom Resource Definition (in contrast with extension API server’s resources). + +**CRD Package**: CRD definition, plus associated controller deployment, RBAC roles, etc, which is released by a developer who uses CRDs to create new APIs. + + +## Motivation + +Version conversion is, in our experience, the most requested improvement to CRDs. Prospective CRD users want to be certain they can evolve their API before they start down the path of developing a CRD + controller. + + +## Requirements + +* As an existing author of a CRD, I can update my API's schema, without breaking existing clients. To that end, I can write a CRD(s) that supports one kind with two (or more) versions. Users of this API can access an object via either version (v1 or v2), and are accessing the same underlying storage (assuming that I have properly defined how to convert between v1 and v2.) + +* As a prospective user of CRDs, I don't know what schema changes I may need in the future, but I want to know that they will be possible before I chose CRDs (over EAS, or over a non-Kubernetes API). + +* As an author of a CRD Package, my users can upgrade to a new version of my package, and can downgrade to a prior version of my package (assuming that they follow proper upgrade and downgrade procedures; these should not require direct etcd access.) + +* As a user, I should be able to request CR in any supported version defined by CRD and get an object has been properly converted to the requested version (assuming the CRD Package Author has properly defined how to convert). + +* As an author of a CRD that does not use validation, I can still have different versions which undergo conversion. + +* As a user, when I request an object, and webhook-conversion fails, I get an error message that helps me understand the problem. + +* As an API machinery code maintainer, this change should not make the API machinery code harder to maintain + +* As a cluster owner, when I upgrade to the version of Kubernetes that supports CRD multiple versions, but I don't use the new feature, my existing CRDs work fine. I can roll back to the previous version without any special action. + + +## Summary of Changes + +1. A CRD object now represents a group/kind with one or more versions. + +2. The CRD API (CustomResourceDefinitionSpec) is extended as follows: + + 1. It has a place to register 1 webhook. + + 2. it holds multiple "versions". + + 3. Some fields which were part of the .spec are now per-version; namely Schema, Subresources, and AdditionalPrinterColumns. + +3. A Webhook Host is used to do conversion for a CRD. + + 4. CRD authors will need to write a Webhook Host that accepts any version and returns any version. + + 5. Toolkits like kube-builder and operator-sdk are expected to provide flows to assist users to generate Webhook Hosts. + + +## Detailed Design + + +### CRD API Changes + +The CustomResourceDefinitionSpec is extended to have a new section where webhooks are defined: + +```golang +// CustomResourceDefinitionSpec describes how a user wants their resource to appear +type CustomResourceDefinitionSpec struct { + Group string + Version string + Names CustomResourceDefinitionNames + Scope ResourceScope + // Optional, can only be provided if per-version schema is not provided. + Validation *CustomResourceValidation + // Optional, can only be provided if per-version subresource is not provided. + Subresources *CustomResourceSubresources + Versions []CustomResourceDefinitionVersion + // Optional, can only be provided if per-version additionalPrinterColumns is not provided. + AdditionalPrinterColumns []CustomResourceColumnDefinition + + Conversion *CustomResourceConversion +} + +type CustomResourceDefinitionVersion struct { + Name string + Served Boolean + Storage Boolean + // Optional, can only be provided if top level validation is not provided. + Schema *JSONSchemaProp + // Optional, can only be provided if top level subresource is not provided. + Subresources *CustomResourceSubresources + // Optional, can only be provided if top level additionalPrinterColumns is not provided. + AdditionalPrinterColumns []CustomResourceColumnDefinition +} + +Type CustomResourceConversion struct { + // Conversion strategy, either "nop” or "webhook”. If webhook is set, Webhook field is required. + Strategy string + + // Additional information for external conversion if strategy is set to external + // +optional + Webhook *CustomResourceConversionWebhook +} + +type CustomResourceConversionWebhook { + // ClientConfig defines how to communicate with the webhook. This is the same config used for validating/mutating webhooks. + ClientConfig WebhookClientConfig +} +``` + +### Top level fields to Per-Version fields + +In *CRD v1beta1* (apiextensions.k8s.io/v1beta1) there are per-version schema, additionalPrinterColumns or subresources (called X in this section) defined and these validation rules will be applied to them: + +* Either top level X or per-version X can be set, but not both. This rule applies to individual X’s not the whole set. E.g. top level schema can be set while per-version subresources are set. +* per-version X cannot be the same. E.g. if all per-version schema are the same, the CRD object will be rejected with an error message asking the user to use the top level schema. + +in *CRD v1* (apiextensions.k8s.io/v1), there will be only version list with no top level X. The second validation guarantees a clean moving to v1. These are conversion rules: + +*v1beta1->v1:* + +* If top level X is set in v1beta1, then it will be copied to all versions in v1. +* If per-version X are set in v1beta1, then they will be used for per-version X in v1. + +*v1->v1beta1:* + +* If all per-version X are the same in v1, they will be copied to top level X in v1beta1 +* Otherwise, they will be used as per-version X in v1beta1 + +#### Alternative approaches considered + +First a defaulting approach is considered which per-version fields would be defaulted to top level fields. but that breaks backward incompatible change; Quoting from API [guidelines](https://github.com/kubernetes/community/blob/master/contributors/devel/api_changes.md#backward-compatibility-gotchas): + +> A single feature/property cannot be represented using multiple spec fields in the same API version simultaneously + +Hence the defaulting either implicit or explicit has the potential to break backward compatibility as we have two sets of fields representing the same feature. + +There are other solution considered that does not involved defaulting: + +* Field Discriminator: Use `Spec.Conversion.Strategy` as discriminator to decide which set of fields to use. This approach would work but the proposed solution is keeping the mutual excusivity in a broader sense and is preferred. +* Per-version override: If a per-version X is specified, use it otherwise use the top level X if provided. While with careful validation and feature gating, this solution is also backward compatible, the overriding behaviour need to be kept in CRD v1 and that looks too complicated and not clean to keep for a v1 API. + +Refer to [this document](http://bit.ly/k8s-crd-per-version-defaulting) for more details and discussions on those solutions. + +### Support Level + +The feature will be alpha in the first implementation and will have a feature gate that is defaulted to false. The roll-back story with a feature gate is much more clear. if we have the features as alpha in kubernetes release Y (>X where the feature is missing) and we make it beta in kubernetes release Z, it is not safe to use the feature and downgrade from Y to X but the feature is alpha in Y which is fine. It is safe to downgrade from Z to Y (given that we enable the feature gate in Y) and that is desirable as the feature is beta in Z. +On downgrading from a Z to Y, stored CRDs can have per-version fields set. While the feature gate can be off on Y (alpha cluster), it is dangerous to disable per-version Schema Validation or Status subresources as it makes the status field mutable and validation on CRs will be disabled. Thus the feature gate in Y only protects adding per-version fields not the actual behaviour. Thus if the feature gate is off in Y: + +* Per-version X cannot be set on CRD create (per-version fields are auto-cleared). +* Per-version X can only be set/changed on CRD update *if* the existing CRD object already has per-version X set. + +This way even if we downgrade from Z to Y, per-version validations and subresources will be honored. This will not be the case for webhook conversion itself. The feature gate will also protect the implementation of webhook conversion and alpha cluster with disabled feature gate will return error for CRDs with webhook conversion (that are created with a future version of the cluster). + +### Rollback + +Users that need to rollback to version X (but may currently be running version Y > X) of apiserver should not use CRD Webhook Conversion if X is not a version that supports these features. If a user were to create a CRD that uses CRD Webhook Conversion and then rolls back to version X that does not support conversion then the following would happen: + +1. The stored custom resources in etcd will not be deleted. + +2. Any clients that try to get the custom resources will get a 500 (internal server error). this is distinguishable from a deleted object for get and the list operation will also fail. That means the CRD is not served at all and Clients that try to garbage collect related resources to missing CRs should be aware of this. + +3. Any client (e.g. controller) that tries to list the resource (in preparation for watching it) will get a 500 (this is distinguishable from an empty list or a 404). + +4. If the user rolls forward again, then custom resources will be served again. + +If a user does not use the webhook feature but uses the versioned schema, additionalPrinterColumns, and/or subresources and rollback to a version that does not support them per-version, any value set per-version will be ignored and only values in top level spec.* will be honor. + +Please note that any of the fields added in this design that is not supported in previous kubernetes releases can be removed on an update operation (e.g. status update). The kubernetes release where defined the types but gate them with an alpha feature gate, however, can keep these fields but ignore there value. + +### Webhook Request/Response + +The Conversion request and response would be similar to [Admission webhooks](https://github.com/kubernetes/kubernetes/blob/951962512b9cfe15b25e9c715a5f33f088854f97/staging/src/k8s.io/api/admission/v1beta1/types.go#L29). The AdmissionReview seems to be redundant but used by other Webhook APIs and added here for consistency. + +```golang +// ConversionReview describes a conversion request/response. +type ConversionReview struct { + metav1.TypeMeta + // Request describes the attributes for the conversion request. + // +optional + Request *ConversionRequest + // Response describes the attributes for the conversion response. + // +optional + Response *ConversionResponse +} + +type ConversionRequest struct { + // UID is an identifier for the individual request/response. Useful for logging. + UID types.UID + // The version to convert given object to. E.g. "stable.example.com/v1" + APIVersion string + // Object is the CRD object to be converted. + Object runtime.RawExtension +} + +type ConversionResponse struct { + // UID is an identifier for the individual request/response. + // This should be copied over from the corresponding ConversionRequest. + UID types.UID + // ConvertedObject is the converted version of request.Object. + ConvertedObject runtime.RawExtension +} +``` + +If the conversion is failed, the webhook should fail the HTTP request with a proper error code and message that will be used to create a status error for the original API caller. + + +### Monitorability + +There should be prometheus variables to show: + +* CRD conversion latency + * Overall + * By webhook name + * By request (sum of all conversions in a request) + * By CRD +* Conversion Failures count + * Overall + * By webhook name + * By CRD +* Timeout failures count + * Overall + * By webhook name + * By CRD + +Adding a webhook dynamically adds a key to a map-valued prometheus metric. Webhook host process authors should consider how to make their webhook host monitorable: while eventually we hope to offer a set of best practices around this, for the initial release we won’t have requirements here. + + +### Error Messages + +When a conversion webhook fails, e.g. for the GET operation, then the error message from the apiserver to its client should reflect that conversion failed and include additional information to help debug the problem. The error message and HTTP error code returned by the webhook should be included in the error message API server returns to the user. For example: + +```bash +$ kubectl get mykind somename +error on server: conversion from stored version v1 to requested version v2 for somename: "408 request timeout" while calling service "mywebhookhost.somens.cluster.local:443" +``` + + +For operations that need more than one conversion (e.g. LIST), no partial result will be returned. Instead the whole operation will fail the same way with detailed error messages. To help debugging these kind of operations, the UID of the first failing conversion will also be included in the error message. + + +### Caching + +No new caching is planned as part of this work, but the API Server may in the future cache webhook POST responses. + +Most API operations are reads. The most common kind of read is a watch. All watched objects are cached in memory. For CRDs, the cache +is per-version. That is the result of having one [REST store object](https://github.com/kubernetes/kubernetes/blob/3cb771a8662ae7d1f79580e0ea9861fd6ab4ecc0/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource/etcd.go#L72) per-version which +was an arbitrary design choice but would be required for better caching with webhook conversion. In this model, each GVK is cached, regardless of whether some GVKs share storage. Thus, watches do not cause conversion. So, conversion webhooks will not add overhead to the watch path. Watch cache is per api server and eventually consistent. + +Non-watch reads are also cached (if requested resourceVersion is 0 which is true for generated informers by default, but not for calls like `kubectl get ...`, namespace cleanup, etc). The cached objects are converted and per-version (TODO: fact check). So, conversion webhooks will not add overhead here too. + +If in the future this proves to be a performance problem, we might need to add caching later. The Authorization and Authentication webhooks already use a simple scheme with APIserver-side caching and a single TTL for expiration. This has worked fine, so we can repeat this process. It does not require Webhook hosts to be aware of the caching. + + +## Examples + + +### Example of Writing Conversion Webhook + +Data model for v1: + +|data model for v1| +|-----------------| +```yaml +properties: + spec: + properties: + cronSpec: + type: string + image: + type: string +``` + +|data model for v2| +|-----------------| +```yaml +properties: + spec: + properties: + min: + type: string + hour: + type: string + dayOfMonth: + type: string + month: + type: string + dayOfWeek: + type: string + image: + type: string +``` + + +Both schemas can hold the same data (assuming the string format for V1 was a valid format). + +|crontab_conversion.go| +|---------------------| + +```golang +import .../types/v1 +import .../types/v2 + +// Actual conversion methods + +func convertCronV1toV2(cronV1 *v1.Crontab) (*v2.Crontab, error) { + items := strings.Split(cronV1.spec.cronSpec, " ") + if len(items) != 5 { + return nil, fmt.Errorf("invalid spec string, needs five parts: %s", cronV1.spec.cronSpec) + } + return &v2.Crontab{ + ObjectMeta: cronV1.ObjectMeta, + TypeMeta: metav1.TypeMeta{ + APIVersion: "stable.example.com/v2", + Kind: cronV1.Kind, + }, + spec: v2.CrontabSpec{ + image: cronV1.spec.image, + min: items[0], + hour: items[1], + dayOfMonth: items[2], + month: items[3], + dayOfWeek: items[4], + }, + }, nil + +} + +func convertCronV2toV1(cronV2 *v2.Crontab) (*v1.Crontab, error) { + cronspec := cronV2.spec.min + " " + cronspec += cronV2.spec.hour + " " + cronspec += cronV2.spec.dayOfMonth + " " + cronspec += cronV2.spec.month + " " + cronspec += cronV2.spec.dayOfWeek + return &v1.Crontab{ + ObjectMeta: cronV2.ObjectMeta, + TypeMeta: metav1.TypeMeta{ + APIVersion: "stable.example.com/v1", + Kind: cronV2.Kind, + }, + spec: v1.CrontabSpec{ + image: cronV2.spec.image, + cronSpec: cronspec, + }, + }, nil +} + +// The rest of the file can go into an auto generated framework + +func serveCronTabConversion(w http.ResponseWriter, r *http.Request) { + request, err := readConversionRequest(r) + if err != nil { + reportError(w, err) + } + response := ConversionResponse{} + response.UID = request.UID + converted, err := convert(request.Object, request.APIVersion) + if err != nil { + reportError(w, err) + } + response.ConvertedObject = *converted + writeConversionResponse(w, response) +} + +func convert(in runtime.RawExtension, version string) (*runtime.RawExtension, error) { + inApiVersion, err := extractAPIVersion(in) + if err != nil { + return nil, err + } + switch inApiVersion { + case "stable.example.com/v1": + var cronV1 v1Crontab + if err := json.Unmarshal(in.Raw, &cronV1); err != nil { + return nil, err + } + switch version { + case "stable.example.com/v1": + // This should not happened as API server will not call the webhook in this case + return &in, nil + case "stable.example.com/v2": + cronV2, err := convertCronV1toV2(&cronV1) + if err != nil { + return nil, err + } + raw, err := json.Marshal(cronV2) + if err != nil { + return nil, err + } + return &runtime.RawExtension{Raw: raw}, nil + } + case "stable.example.com/v2": + var cronV2 v2Crontab + if err := json.Unmarshal(in.Raw, &cronV2); err != nil { + return nil, err + } + switch version { + case "stable.example.com/v2": + // This should not happened as API server will not call the webhook in this case + return &in, nil + case "stable.example.com/v1": + cronV1, err := convertCronV2toV1(&cronV2) + if err != nil { + return nil, err + } + raw, err := json.Marshal(cronV1) + if err != nil { + return nil, err + } + return &runtime.RawExtension{Raw: raw}, nil + } + default: + return nil, fmt.Errorf("invalid conversion fromVersion requested: %s", inApiVersion) + } + return nil, fmt.Errorf("invalid conversion toVersion requested: %s", version) +} + +func extractAPIVersion(in runtime.RawExtension) (string, error) { + object := unstructured.Unstructured{} + if err := object.UnmarshalJSON(in.Raw); err != nil { + return "", err + } + return object.GetAPIVersion(), nil +} +``` + +Note: not all code is shown for running a web server. + +Note: some of this is boilerplate that we expect tools like Kubebuilder will handle for the user. + +Also some appropriate tests, most importantly round trip test: + +|crontab_conversion_test.go| +|-| + +```golang +func TestRoundTripFromV1ToV2(t *testing.T) { + testObj := v1.Crontab{ + ObjectMeta: metav1.ObjectMeta{ + Name: "my-new-cron-object", + }, + TypeMeta: metav1.TypeMeta{ + APIVersion: "stable.example.com/v1", + Kind: "CronTab", + }, + spec: v1.CrontabSpec{ + image: "my-awesome-cron-image", + cronSpec: "* * * * */5", + }, + } + testRoundTripFromV1(t, testObj) +} + +func testRoundTripFromV1(t *testing.T, v1Object v1.CronTab) { + v2Object, err := convertCronV1toV2(v1Object) + if err != nil { + t.Fatalf("failed to convert v1 crontab to v2: %v", err) + } + v1Object2, err := convertCronV2toV1(v2Object) + if err != nil { + t.Fatalf("failed to convert v2 crontab to v1: %v", err) + } + if !reflect.DeepEqual(v1Object, v1Object2) { + t.Errorf("round tripping failed for v1 crontab. v1Object: %v, v2Object: %v, v1ObjectConverted: %v", + v1Object, v2Object, v1Object2) + } +} +``` + +## Example of Updating CRD from one to two versions + +This example uses some files from previous section. + +**Step 1**: Start from a CRD with only one version + +|crd1.yaml| +|-| + +```yaml +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: crontabs.stable.example.com +spec: + group: stable.example.com + versions: + - name: v1 + served: true + storage: true + schema: + properties: + spec: + properties: + cronSpec: + type: string + image: + type: string + scope: Namespaced + names: + plural: crontabs + singular: crontab + kind: CronTab + shortNames: + - ct +``` + +And create it: + +```bash +Kubectl create -f crd1.yaml +``` + +(If you have an existing CRD installed prior to the version of Kubernetes that supports the "versions" field, then you may need to move version field to a single item in the list of versions or just try to touch the CRD after upgrading to the new Kubernetes version which will result in the versions list being defaulted to a single item equal to the top level spec values) + +**Step 2**: Create a CR within that one version: + +|cr1.yaml| +|-| +```yaml + +apiVersion: "stable.example.com/v1" +kind: CronTab +metadata: + name: my-new-cron-object +spec: + cronSpec: "* * * * */5" + image: my-awesome-cron-image +``` + +And create it: + +```bash +Kubectl create -f cr1.yaml +``` + +**Step 3**: Decide to introduce a new version of the API. + +**Step 3a**: Write a new OpenAPI data model for the new version (see previous section). Use of a data model is not required, but it is recommended. + +**Step 3b**: Write conversion webhook and deploy it as a service named `crontab_conversion` + +See the "crontab_conversion.go" file in the previous section. + +**Step 3c**: Update the CRD to add the second version. + +Do this by adding a new item to the "versions" list, containing the new data model: + +|crd2.yaml| +|-| +```yaml + +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: crontabs.stable.example.com +spec: + group: stable.example.com + versions: + - name: v1 + served: true + storage: false + schema: + properties: + spec: + properties: + cronSpec: + type: string + image: + type: string + - name: v2 + served: true + storage: true + schema: + properties: + spec: + properties: + min: + type: string + hour: + type: string + dayOfMonth: + type: string + month: + type: string + dayOfWeek: + type: string + image: + type: string + scope: Namespaced + names: + plural: crontabs + singular: crontab + kind: CronTab + shortNames: + - ct + conversion: + strategy: external + webhook: + client_config: + namespace: crontab + service: crontab_conversion + Path: /crontab_convert +``` + +And apply it: + +```bash +Kubectl apply -f crd2.yaml +``` + +**Step 4**: add a new CR in v2: + +|cr2.yaml| +|-| +```yaml + +apiVersion: "stable.example.com/v2" +kind: CronTab +metadata: + name: my-second-cron-object +spec: + min: "*" + hour: "*" + day_of_month: "*" + dayOfWeek: "*/5" + month: "*" + image: my-awesome-cron-image +``` + +And create it: + +```bash +Kubectl create -f cr2.yaml +``` + +**Step 5**: storage now has two custom resources in two different versions. To downgrade to previous CRD, one can apply crd1.yaml but that will fail as the status.storedVersions has both v1 and v2 and those cannot be removed from the spec.versions list. To downgrade, first create a crd2-b.yaml file that sets v1 as storage version and apply it, then follow "*Upgrade existing objects to a new stored version*“ in [this document](https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definition-versioning/). After all CRs in the storage has v1 version, you can apply crd1.yaml. + +**Step 5 alternative**: create a crd1-b.yaml that has v2 but not served. + +|crd1-b.yaml| +|-| +```yaml + +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: crontabs.stable.example.com +spec: + group: stable.example.com + versions: + - name: v1 + served: true + storage: true + schema: + properties: + spec: + properties: + cronSpec: + type: string + image: + type: string + - name: v2 + served: false + storage: false + scope: Namespaced + names: + plural: crontabs + singular: crontab + kind: CronTab + shortNames: + - ct + conversion: + strategy: external + webhook: + client_config: + namespace: crontab + service: crontab_conversion + Path: /crontab_convert +``` + +## Alternatives Considered + +Other than webhook conversion, a declarative conversion also considered and discussed. The main operator that being discussed was Rename/Move. This section explains why Webhooks are chosen over declarative conversion. This does not mean the declarative approach will not be supported by the webhook would be first conversion method kubernetes supports. + +### Webhooks vs Declarative + +The table below compares webhook vs declarative in details. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
WebhookDeclarative
1. LimitatisonsThere is no limitation on the type of conversion CRD author can do.Very limited set of conversions will be provided.
2. User ComplexityHarder to implement and the author needs to run an http server. This can be made simpler using tools such as kube-builder.Easy to use as they are in yaml configuration file.
3. Design ComplexityBecause the API server calls into an external webhook, there is no need to design a specific conversions.Designing of declarative conversions can be tricky, especially if they are changing the value of fields. Challenges are: Meeting the round-trip-ability requirement, arguing the usefulness of the operator and keeping it simple enough for a declarative system.
4. PerformanceSeveral calls to webhook for one operation (e.g. Apply) might hit performance issues. A monitoring metric helps measure this for later improvements that can be done through batch conversion.Implemented in API Server directly thus there is no performance concerns.
5. User mistakesUsers have freedom to implement any kind of conversion which may not conform with our API convention (e.g. round-tripability. If the conversion is not revertible, old clients may fail and downgrade will also be at risk).Keeping the conversion operators sane and sound would not be user’s problem. For things like rename/move there is already a design that keeps round-tripp-ability but that could be tricky for other operations.
6. PopularityBecause of the freedom in conversion of webhooks, they probably would be more popularLimited set of declarative operators make it a safer but less popular choice at least in the early stages of CRD development
7. CRD Development CyclesFit well into the story of CRD development of starting with blob store CRDs, then add Schema, then Add webhook conversions for the freedom of conversion the move as much possible to declarative for safer production.Comes after Webhooks in the development cycles of CRDs
+ + +Webhook conversion has less limitation for the authors of APIs using CRD which is desirable especially in the early stages of development. Although there is a chance of user mistakes and also it may look more complex to implement a webhook, those can be relieved using sets of good tools/libraries such as kube-builder. Overall, Webhook conversion is the clear winner here. Declarative approach may be considered at a later stage as an alternative but need to be carefully designed. + + +### Caching + +* use HTTP caching conventions with Cache-Control, Etags, and a unique URL for each different request). This requires more complexity for the webhook author. This change could be considered as part of an update to all 5 or so kinds of webhooks, but not justified for just this one kind of webhook. + +* The CRD object could have a "conversionWebhookVersion" field which the user can increment/change when upgrading/downgrading the webhook to force invalidation of cached objects. + + +## Advice to Users + +* A proper webhook host implementation should accept every supported version as input and as output version. + +* It should also be able to round trip between versions. E.g. converting an object from v1 to v2 and back to v1 should yield the same object. + +* Consider testing your conversion webhook with a fuzz tester that generates random valid objects. + +* The webhook should always give the same response with the same request that allows API server to potentially cache the responses in future (modulo bug fixes; when an update is pushed that fixes a bug in the conversion operation it might not take effect for a few minutes. + +* If you need to add a new field, just add it. You don't need new schema to add a field. + +* Webhook Hosts should be side-effect free. + +* Webhook Hosts should not expect to see every conversion operation. Some may be cached in the future. + +* Toolkits like KubeBuilder and OperatorKit may assist users in using this new feature by: + + * having a place in their file hierarchy to define multiple schemas for the same kind. + + * having a place in their code templates to define a conversion function. + + * generating a full Webhook Host from a conversion function. + + * helping users create tests by writing directories containing sample yamls of an object in various versions. + + * using fuzzing to generate random valid objects and checking if they convert. + +## Test and Documentation Plan + +* Test the upgrade/rollback scenario below. + +* Test conversion, refer to the test case section. + +* Document CRD conversion and best practices for webhook conversion + +* Document to CRD users how to upgrade and downgrade (changing storage version dance, and changes to CRD stored tags). + +### Upgrade/Rollback Scenarios + +Scenario 1: Upgrading an Operator to have more versions. + +* Detect if the cluster version supports webhook conversion + + * Helm chart can require e.g. v1.12 of a Kubernetes API Server. + +Scenario 2: Rolling back to a previous version of API Server that does not support CRD Conversions + +* I have a cluster + + * I use apiserver v1.11.x, which supports multiple no-conversion-versions of a CRD + +* I start to use CRDs + + * I install helm chart "Foo-Operator", which installs a CRD for resource Foo, with 1 version called v1beta1. + + * This uses the old "version" and " + + * I create some Foo resources. + +* I upgrade apiserver to v1.12.x + + * version-conversion now supported. + +* I upgrade the Foo-Operator chart. + + * This changes the CRD to have two versions, v1beta1 and v1beta2. + + * It installs a Webhook Host to convert them. + + * Assume: v1beta1 is still the storage version. + +* I start using multiple versions, so that the CRs are now stored in a mix of versions. + +* I downgrade kube-apiserver + + * Emergency happens, I need to downgrade to v1.11.x. Conversion won't be possible anymore. + + * Downgrade + + * Any call needs conversion should fail at this stage (we need to patch 1.11 for this, see issue [#65790](https://github.com/kubernetes/kubernetes/issues/65790) + +### Test Cases + +* Updating existing CRD to use multiple versions with conversion + + * Define a CRD with one version. + + * Create stored CRs. + + * Update the CRD object to add another (non-storage) version with a conversion webhook + + * Existing CRs are not harmed + + * Can get existing CRs via new api, conversion webhook should be called + + * Can create new CRs with new api, conversion webhook should be called + + * Access new CRs with new api, conversion webhook should not be called + + * Access new CRs with old api, conversion webhook should be called + +## Development Plan + +Google able to staff development, test, review, and documentation. Help welcome, too, esp. Reviewing. + +Not in scope for this work: + +* Including CRDs to aggregated OpenAPI spec (fka swagger.json). + +* Apply for CRDs + +* Make CRDs powerful enough to convert any or all core types to CRDs (in line with that goal, but this is just a step towards it). + +### Work items + +* Add APIs for conversion webhooks in CustomResourceDefinition type. + +* Support multi-version (used to be called validation) Schema + +* Support multi-version subresources and AdditionalPrintColumns + +* Add a Webhook converter call as a CRD converter (refactor conversion code as needed) + +* Ensure able to monitor latency from webhooks. See Monitorability section + +* Add Upgrade/Downgrade tests + +* Add public documentation diff --git a/contributors/design-proposals/api-machinery/customresources-versioning.md b/contributors/design-proposals/api-machinery/customresources-versioning.md new file mode 100644 index 000000000..6c6d4391e --- /dev/null +++ b/contributors/design-proposals/api-machinery/customresources-versioning.md @@ -0,0 +1,100 @@ +CRD Versioning +============= + +The objective of this design document is to provide a machinery for Custom Resource Definition authors to define different resource version and a conversion mechanism between them. + +# **Background** + +Custom Resource Definitions ([CRDs](https://kubernetes.io/docs/concepts/api-extension/custom-resources/)) are a popular mechanism for extending Kubernetes, due to their ease of use compared with the main alternative of building an Aggregated API Server. They are, however, lacking a very important feature that all other kubernetes objects support: Versioning. Today, each CR can only have one version and there is no clear way for authors to advance their resources to a newer version other than creating a completely new CRD and converting everything manually in sync with their client software. + +This document proposes a mechanism to support multiple CRD versions. A few alternatives are also explored in [this document](https://docs.google.com/document/d/1Ucf7JwyHpy7QlgHIN2Rst_q6yT0eeN9euzUV6kte6aY). + +**Goals:** + +* Support versioning on API level + +* Support conversion mechanism between versions + +* Support ability to change storage version + +* Support Validation/OpenAPI schema for all versions: All versions should have a schema. This schema can be provided by user or derived from a single schema. + +**Non-Goals:** + +* Support cohabitation (i.e. no group/kind move) + +# **Proposed Design** + +The basis of the design is a system that supports versioning and no conversion. The APIs here, is designed in a way that can be extended with conversions later. + +The summary is to support a list of versions that will include current version. One of these versions can be flagged as the storage version and all versions ever marked as storage version will be listed in a stored_version field in the Status object to enable authors to plan a migration for their stored objects. + +The current `Version` field is planned to be deprecated in a later release and will be used to pre-populate the `Versions` field (The `Versions` field will be defaulted to a single version, constructed from top level `Version` field). The `Version` field will be also mutable to give a way to the authors to remove it from the list. + +```golang +// CustomResourceDefinitionSpec describes how a user wants their resource to appear +type CustomResourceDefinitionSpec struct { + // Group is the group this resource belongs in + Group string + // Version is the version this resource belongs in + // must be always the first item in Versions field if provided. + Version string + // Names are the names used to describe this custom resource + Names CustomResourceDefinitionNames + // Scope indicates whether this resource is cluster or namespace scoped. Default is namespaced + Scope ResourceScope + // Validation describes the validation methods for CustomResources + Validation *CustomResourceValidation + + // *************** + // ** New Field ** + // *************** + // Versions is the list of all supported versions for this resource. + // Validation: All versions must use the same validation schema for now. i.e., top + // level Validation field is applied to all of these versions. + // Order: The order of these versions is used to determine the order in discovery API + // (preferred version first). + // The versions in this list may not be removed if they are in + // CustomResourceDefinitionStatus.StoredVersions list. + Versions []CustomResourceDefinitionVersion +} + +// *************** +// ** New Type ** +// *************** +type CustomResourceDefinitionVersion { + // Name is the version name, e.g. "v1", “v2beta1”, etc. + Name string + // Served is a flag enabling/disabling this version from being served via REST APIs + Served Boolean + // Storage flags the release as a storage version. There must be exactly one version + // flagged as Storage. + Storage Boolean +} +``` + +The Status object will have a list of potential stored versions. This data is necessary to do a storage migration in future (the author can choose to do the migration themselves but there is [a plan](https://docs.google.com/document/d/1eoS1K40HLMl4zUyw5pnC05dEF3mzFLp5TPEEt4PFvsM/edit) to solve the problem of migration, potentially for both standard and custom types). + +```golang +// CustomResourceDefinitionStatus indicates the state of the CustomResourceDefinition +type CustomResourceDefinitionStatus struct { + ... + + // StoredVersions are all versions ever marked as storage in spec. Tracking these + // versions allow a migration path for stored version in etcd. The field is mutable + // so the migration controller can first make sure a version is certified (i.e. all + // stored objects is that version) then remove the rest of the versions from this list. + // None of the versions in this list can be removed from the spec.Versions field. + StoredVersions []string +} +``` + +# **Validation** + +Basic validations needed for the `version` field are: + +* `Spec.Version` field exists in `Spec.Versions` field. +* The version defined in `Spec.Version` field should point to a `Served` Version in `Spec.Versions` list except when we do not serve any version (i.e. all versions in `Spec.Versions` field are disabled by `Served` set to `False`). This is for backward compatibility. An old controller expect that version to be served but only the whole CRD is served. CRD Registration controller should unregister a CRD with no serving version. +* None of the `Status.StoredVersion` can be removed from `Spec.Versions` list. +* Only one of the versions in `spec.Versions` can flag as `Storage` version. + diff --git a/contributors/design-proposals/api-machinery/metadata-policy.md b/contributors/design-proposals/api-machinery/metadata-policy.md index 9d07186f2..b9a78e36c 100644 --- a/contributors/design-proposals/api-machinery/metadata-policy.md +++ b/contributors/design-proposals/api-machinery/metadata-policy.md @@ -20,7 +20,7 @@ admission controller that uses code, rather than configuration, to map the resource requests and limits of a pod to QoS, and attaches the corresponding annotation.) -We anticipate a number of other uses for `MetadataPolicy`, such as defaulting +We anticipate a number of other uses for `MetadataPolicy`, such as defaulting for labels and annotations, prohibiting/requiring particular labels or annotations, or choosing a scheduling policy within a scheduler. We do not discuss them in this doc. diff --git a/contributors/design-proposals/apps/controller_history.md b/contributors/design-proposals/apps/controller_history.md index af58fad23..2e1213ad3 100644 --- a/contributors/design-proposals/apps/controller_history.md +++ b/contributors/design-proposals/apps/controller_history.md @@ -267,7 +267,7 @@ ControllerRevisions, this approach is reasonable. - A revision is considered to be live while any generated Object labeled with its `.Name` is live. - This method has the benefit of providing visibility, via the label, to - users with respect to the historical provenance of a generated Object. + users with respect to the historical provenance of a generated Object. - The primary drawback is the lack of support for using garbage collection to ensure that only non-live version snapshots are collected. 1. Controllers may also use the `OwnerReferences` field of the @@ -390,7 +390,7 @@ the following command. ### Rollback -For future work, `kubeclt rollout undo` can be implemented in the general case +For future work, `kubectl rollout undo` can be implemented in the general case as an extension of the [above](#viewing-history ). ```bash diff --git a/contributors/design-proposals/apps/daemonset-update.md b/contributors/design-proposals/apps/daemonset-update.md index aea7e2445..f4ce1256b 100644 --- a/contributors/design-proposals/apps/daemonset-update.md +++ b/contributors/design-proposals/apps/daemonset-update.md @@ -42,7 +42,7 @@ Here are some potential requirements that haven't been covered by this proposal: - Uptime is critical for each pod of a DaemonSet during an upgrade (e.g. the time from a DaemonSet pods being killed to recreated and healthy should be < 5s) - Each DaemonSet pod can still fit on the node after being updated -- Some DaemonSets require the node to be drained before the DeamonSet's pod on it +- Some DaemonSets require the node to be drained before the DaemonSet's pod on it is updated (e.g. logging daemons) - DaemonSet's pods are implicitly given higher priority than non-daemons - DaemonSets can only be operated by admins (i.e. people who manage nodes) diff --git a/contributors/design-proposals/apps/deploy.md b/contributors/design-proposals/apps/deploy.md index 0165dd9db..1030a9a60 100644 --- a/contributors/design-proposals/apps/deploy.md +++ b/contributors/design-proposals/apps/deploy.md @@ -10,11 +10,17 @@ - [Example](#example) - [Support in Deployment](#support-in-deployment) - [Deployment Status](#deployment-status) - - [Deployment Version](#deployment-version) + - [Deployment Revision](#deployment-revision) - [Pause Deployments](#pause-deployments) - - [Perm-failed Deployments](#perm-failed-deployments) + - [Failed Deployments](#failed-deployments) +# Deployment rolling update design proposal + +**Author**: @janetkuo + +**Status**: implemented + # Deploy through CLI ## Motivation @@ -33,10 +39,10 @@ So, instead, this document proposes another way to support easier deployment man The followings are operations we need to support for the users to easily managing deployments: - **Create**: To create deployments. -- **Rollback**: To restore to an earlier version of deployment. +- **Rollback**: To restore to an earlier revision of deployment. - **Watch the status**: To watch for the status update of deployments. - **Pause/resume**: To pause a deployment mid-way, and to resume it. (A use case is to support canary deployment.) -- **Version information**: To record and show version information that's meaningful to users. This can be useful for rollback. +- **Revision information**: To record and show revision information that's meaningful to users. This can be useful for rollback. ## Related `kubectl` Commands @@ -51,12 +57,11 @@ Users may use `kubectl scale` or `kubectl autoscale` to scale up and down Deploy ### `kubectl rollout` `kubectl rollout` supports both Deployment and DaemonSet. It has the following subcommands: -- `kubectl rollout undo` works like rollback; it allows the users to rollback to a previous version of deployment. +- `kubectl rollout undo` works like rollback; it allows the users to rollback to a previous revision of deployment. - `kubectl rollout pause` allows the users to pause a deployment. See [pause deployments](#pause-deployments). - `kubectl rollout resume` allows the users to resume a paused deployment. - `kubectl rollout status` shows the status of a deployment. -- `kubectl rollout history` shows meaningful version information of all previous deployments. See [development version](#deployment-version). -- `kubectl rollout retry` retries a failed deployment. See [perm-failed deployments](#perm-failed-deployments). +- `kubectl rollout history` shows meaningful revision information of all previous deployments. See [development revision](#deployment-revision). ### `kubectl set` @@ -88,7 +93,7 @@ $ kubectl run nginx --image=nginx --replicas=2 --generator=deployment/v1beta1 $ kubectl rollout status deployment/nginx # Update the Deployment -$ kubectl set image deployment/nginx --container=nginx --image=nginx: +$ kubectl set image deployment/nginx --container=nginx --image=nginx: # Pause the Deployment $ kubectl rollout pause deployment/nginx @@ -96,11 +101,11 @@ $ kubectl rollout pause deployment/nginx # Resume the Deployment $ kubectl rollout resume deployment/nginx -# Check the change history (deployment versions) +# Check the change history (deployment revisions) $ kubectl rollout history deployment/nginx -# Rollback to a previous version. -$ kubectl rollout undo deployment/nginx --to-version= +# Rollback to a previous revision. +$ kubectl rollout undo deployment/nginx --to-revision= ``` ## Support in Deployment @@ -108,33 +113,39 @@ $ kubectl rollout undo deployment/nginx --to-version= ### Deployment Status Deployment status should summarize information about Pods, which includes: -- The number of pods of each version. +- The number of pods of each revision. - The number of ready/not ready pods. See issue [#17164](https://github.com/kubernetes/kubernetes/issues/17164). -### Deployment Version +### Deployment Revision -We store previous deployment version information in annotations `rollout.kubectl.kubernetes.io/change-source` and `rollout.kubectl.kubernetes.io/version` of replication controllers of the deployment, to support rolling back changes as well as for the users to view previous changes with `kubectl rollout history`. -- `rollout.kubectl.kubernetes.io/change-source`, which is optional, records the kubectl command of the last mutation made to this rollout. Users may use `--record` in `kubectl` to record current command in this annotation. -- `rollout.kubectl.kubernetes.io/version` records a version number to distinguish the change sequence of a deployment's -replication controllers. A deployment obtains the largest version number from its replication controllers and increments the number by 1 upon update or creation of the deployment, and updates the version annotation of its new replication controller. +We store previous deployment revision information in annotations `kubernetes.io/change-cause` and `deployment.kubernetes.io/revision` of ReplicaSets of the Deployment, to support rolling back changes as well as for the users to view previous changes with `kubectl rollout history`. +- `kubernetes.io/change-cause`, which is optional, records the kubectl command of the last mutation made to this rollout. Users may use `--record` in `kubectl` to record current command in this annotation. +- `deployment.kubernetes.io/revision` records a revision number to distinguish the change sequence of a Deployment's +ReplicaSets. A Deployment obtains the largest revision number from its ReplicaSets and increments the number by 1 upon update or creation of the Deployment, and updates the revision annotation of its new ReplicaSet. -When the users perform a rollback, i.e. `kubectl rollout undo`, the deployment first looks at its existing replication controllers, regardless of their number of replicas. Then it finds the one with annotation `rollout.kubectl.kubernetes.io/version` that either contains the specified rollback version number or contains the second largest version number among all the replication controllers (current new replication controller should obtain the largest version number) if the user didn't specify any version number (the user wants to rollback to the last change). Lastly, it -starts scaling up that replication controller it's rolling back to, and scaling down the current ones, and then update the version counter and the rollout annotations accordingly. +When the users perform a rollback, i.e. `kubectl rollout undo`, the Deployment first looks at its existing ReplicaSets, regardless of their number of replicas. Then it finds the one with annotation `deployment.kubernetes.io/revision` that either contains the specified rollback revision number or contains the second largest revision number among all the ReplicaSets (current new ReplicaSet should obtain the largest revision number) if the user didn't specify any revision number (the user wants to rollback to the last change). Lastly, it +starts scaling up that ReplicaSet it's rolling back to, and scaling down the current ones, and then update the revision counter and the rollout annotations accordingly. -Note that a deployment's replication controllers use PodTemplate hashes (i.e. the hash of `.spec.template`) to distinguish from each others. When doing rollout or rollback, a deployment reuses existing replication controller if it has the same PodTemplate, and its `rollout.kubectl.kubernetes.io/change-source` and `rollout.kubectl.kubernetes.io/version` annotations will be updated by the new rollout. At this point, the earlier state of this replication controller is lost in history. For example, if we had 3 replication controllers in -deployment history, and then we do a rollout with the same PodTemplate as version 1, then version 1 is lost and becomes version 4 after the rollout. +Note that ReplicaSets are distinguished by PodTemplate (i.e. `.spec.template`). When doing a rollout or rollback, a Deployment reuses existing ReplicaSet if it has the same PodTemplate, and its `kubernetes.io/change-cause` and `deployment.kubernetes.io/revision` annotations will be updated by the new rollout. All previous of revisions of this ReplicaSet will be kept in the annotation `deployment.kubernetes.io/revision-history`. For example, if we had 3 ReplicaSets in +Deployment history, and then we do a rollout with the same PodTemplate as revision 1, then revision 1 is lost and becomes revision 4 after the rollout, and the ReplicaSet that once represented revision 1 will then have an annotation `deployment.kubernetes.io/revision-history=1`. -To make deployment versions more meaningful and readable for the users, we can add more annotations in the future. For example, we can add the following flags to `kubectl` for the users to describe and record their current rollout: +To make Deployment revisions more meaningful and readable for users, we can add more annotations in the future. For example, we can add the following flags to `kubectl` for the users to describe and record their current rollout: - `--description`: adds `description` annotation to an object when it's created to describe the object. - `--note`: adds `note` annotation to an object when it's updated to record the change. - `--commit`: adds `commit` annotation to an object with the commit id. ### Pause Deployments -Users sometimes need to temporarily disable a deployment. See issue [#14516](https://github.com/kubernetes/kubernetes/issues/14516). +Users sometimes need to temporarily disable a Deployment. See issue [#14516](https://github.com/kubernetes/kubernetes/issues/14516). -### Perm-failed Deployments +For more details, see [pausing and resuming a +Deployment](https://kubernetes.io/docs/user-guide/deployments/#pausing-and-resuming-a-deployment). -The deployment could be marked as "permanently failed" for a given spec hash so that the system won't continue thrashing on a doomed deployment. The users can retry a failed deployment with `kubectl rollout retry`. See issue [#14519](https://github.com/kubernetes/kubernetes/issues/14519). +### Failed Deployments + +The Deployment could be marked as "failed" when it gets stuck trying to deploy +its newest ReplicaSet without completing within the given deadline (specified +with `.spec.progressDeadlineSeconds`), see document about +[failed Deployment](https://kubernetes.io/docs/user-guide/deployments/#failed-deployment). diff --git a/contributors/design-proposals/apps/deployment.md b/contributors/design-proposals/apps/deployment.md index 16c35dfe2..3f7571445 100644 --- a/contributors/design-proposals/apps/deployment.md +++ b/contributors/design-proposals/apps/deployment.md @@ -143,7 +143,7 @@ For each creation or update for a Deployment, it will: is the one that the new RS uses and collisionCount is a counter in the DeploymentStatus that increments every time a [hash collision](#hashing-collisions) happens (hash collisions should be rare with fnv). - - If the RSs and pods dont already have this label and selector: + - If the RSs and pods don't already have this label and selector: - We will first add this to RS.PodTemplateSpec.Metadata.Labels for all RSs to ensure that all new pods that they create will have this label. - Then we will add this label to their existing pods @@ -197,7 +197,7 @@ For example, consider the following case: Users can pause/cancel a rollout by doing a non-cascading deletion of the Deployment before it is complete. Recreating the same Deployment will resume it. For example, consider the following case: -- User creats a Deployment to perform a rolling-update for 10 pods from image:v1 to +- User creates a Deployment to perform a rolling-update for 10 pods from image:v1 to image:v2. - User then deletes the Deployment while the old and new RSs are at 5 replicas each. User will end up with 2 RSs with 5 replicas each. diff --git a/contributors/design-proposals/apps/selector-generation.md b/contributors/design-proposals/apps/selector-generation.md index e0b3bf228..2f3a6b492 100644 --- a/contributors/design-proposals/apps/selector-generation.md +++ b/contributors/design-proposals/apps/selector-generation.md @@ -61,7 +61,7 @@ think about it. about uniqueness, just labeling for user's own reasons. - Defaulting logic sets `job.spec.selector` to `matchLabels["controller-uid"]="$UIDOFJOB"` -- Defaulting logic appends 2 labels to the `.spec.template.metadata.labels`. +- Defaulting logic appends 2 labels to the `.spec.template.metadata.labels`. - The first label is controller-uid=$UIDOFJOB. - The second label is "job-name=$NAMEOFJOB". diff --git a/contributors/design-proposals/apps/statefulset-update.md b/contributors/design-proposals/apps/statefulset-update.md index 27d3000f1..06fd291e8 100644 --- a/contributors/design-proposals/apps/statefulset-update.md +++ b/contributors/design-proposals/apps/statefulset-update.md @@ -304,7 +304,7 @@ as follows. should be consistent with the version indicated by `Status.UpdateRevision`. 1. If the Pod does not meet either of the prior two conditions, and if ordinal is in the sequence `[0, .Spec.UpdateStrategy.Partition.Ordinal)`, - it should be consistent with the version indicated by + it should be consistent with the version indicated by `Status.CurrentRevision`. 1. Otherwise, the Pod should be consistent with the version indicated by `Status.UpdateRevision`. @@ -446,7 +446,7 @@ object if any of the following conditions are true. 1. `.Status.UpdateReplicas` is negative or greater than `.Status.Replicas`. ## Kubectl -Kubectl will use the `rollout` command to control and provide the status of +Kubectl will use the `rollout` command to control and provide the status of StatefulSet updates. - `kubectl rollout status statefulset `: displays the status @@ -648,7 +648,7 @@ spec: ### Phased Roll Outs Users can create a canary using `kubectl apply`. The only difference between a [canary](#canaries) and a phased roll out is that the - `.Spec.UpdateStrategy.Partition.Ordinal` is set to a value less than + `.Spec.UpdateStrategy.Partition.Ordinal` is set to a value less than `.Spec.Replicas-1`. ```yaml @@ -747,7 +747,7 @@ kubectl rollout undo statefulset web ### Rolling Forward Rolling back is usually the safest, and often the fastest, strategy to mitigate deployment failure, but rolling forward is sometimes the only practical solution -for stateful applications (e.g. A users has a minor configuration error but has +for stateful applications (e.g. A user has a minor configuration error but has already modified the storage format for the application). Users can use sequential `kubectl apply`'s to update the StatefulSet's current [target state](#target-state). The StatefulSet's `.Spec.GenerationPartition` @@ -810,7 +810,7 @@ intermittent compaction as a form of garbage collection. Applications that use log structured merge trees with size tiered compaction (e.g Cassandra) or append only B(+/*) Trees (e.g Couchbase) can temporarily double their storage requirement during compaction. If there is insufficient space for compaction -to progress, these applications will either fail or degrade until +to progress, these applications will either fail or degrade until additional capacity is added. While, if the user is using AWS EBS or GCE PD, there are valid manual workarounds to expand the size of a PD, it would be useful to automate the resize via updates to the StatefulSet's diff --git a/contributors/design-proposals/architecture/architecture.md b/contributors/design-proposals/architecture/architecture.md index 0dc4ec40b..ff46f81fc 100644 --- a/contributors/design-proposals/architecture/architecture.md +++ b/contributors/design-proposals/architecture/architecture.md @@ -65,7 +65,7 @@ The project is committed to the following (aspirational) [design ideals](princip approach is key to the system’s self-healing and autonomic capabilities. * _Advance the state of the art_. While Kubernetes intends to support non-cloud-native applications, it also aspires to advance the cloud-native and DevOps state of the art, such as - in the [participation of applications in their own management](http://blog.kubernetes.io/2016/09/cloud-native-application-interfaces.html). + in the [participation of applications in their own management](https://kubernetes.io/blog/2016/09/cloud-native-application-interfaces/). However, in doing so, we strive not to force applications to lock themselves into Kubernetes APIs, which is, for example, why we prefer configuration over convention in the [downward API](https://kubernetes.io/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information/#the-downward-api). @@ -221,7 +221,7 @@ Kubelet does not link in the base container runtime. Instead, we're defining a underlying runtime and facilitate pluggability of that layer. This decoupling is needed in order to maintain clear component boundaries, facilitate testing, and facilitate pluggability. Runtimes supported today, either upstream or by forks, include at least docker (for Linux and Windows), -[rkt](https://kubernetes.io/docs/getting-started-guides/rkt/), +[rkt](https://github.com/rkt/rkt), [cri-o](https://github.com/kubernetes-incubator/cri-o), and [frakti](https://github.com/kubernetes/frakti). #### Kube Proxy diff --git a/contributors/design-proposals/architecture/declarative-application-management.md b/contributors/design-proposals/architecture/declarative-application-management.md new file mode 100644 index 000000000..a5fbdf24c --- /dev/null +++ b/contributors/design-proposals/architecture/declarative-application-management.md @@ -0,0 +1,395 @@ +# Declarative application management in Kubernetes + +> This article was authored by Brian Grant (bgrant0607) on 8/2/2017. The original Google Doc can be found here: [https://goo.gl/T66ZcD](https://goo.gl/T66ZcD) + +Most users will deploy a combination of applications they build themselves, also known as **_bespoke_** applications, and **common off-the-shelf (COTS)** components. Bespoke applications are typically stateless application servers, whereas COTS components are typically infrastructure (and frequently stateful) systems, such as databases, key-value stores, caches, and messaging systems. + +In the case of the latter, users sometimes have the choice of using hosted SaaS products that are entirely managed by the service provider and are therefore opaque, also known as **_blackbox_** *services*. However, they often run open-source components themselves, and must configure, deploy, scale, secure, monitor, update, and otherwise manage the lifecycles of these **_whitebox_** *COTS applications*. + +This document proposes a unified method of managing both bespoke and off-the-shelf applications declaratively using the same tools and application operator workflow, while leveraging developer-friendly CLIs and UIs, streamlining common tasks, and avoiding common pitfalls. The approach is based on observations of several dozen configuration projects and hundreds of configured applications within Google and in the Kubernetes ecosystem, as well as quantitative analysis of Borg configurations and work on the Kubernetes [system architecture](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/architecture.md), [API](https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md), and command-line tool ([kubectl](https://github.com/kubernetes/community/wiki/Roadmap:-kubectl)). + +The central idea is that a toolbox of composable configuration tools should manipulate configuration data in the form of declarative API resource specifications, which serve as a [declarative data model](https://docs.google.com/document/d/1RmHXdLhNbyOWPW_AtnnowaRfGejw-qlKQIuLKQWlwzs/edit#), not express configuration as code or some other representation that is restrictive, non-standard, and/or difficult to manipulate. + +## Declarative configuration + +Why the heavy emphasis on configuration in Kubernetes? Kubernetes supports declarative control by specifying users’ desired intent. The intent is carried out by asynchronous control loops, which interact through the Kubernetes API. This declarative approach is critical to the system’s self-healing, autonomic capabilities, and application updates. This approach is in contrast to manual imperative operations or flowchart-like orchestration. + +This is aligned with the industry trend towards [immutable infrastructure](http://thenewstack.io/a-brief-look-at-immutable-infrastructure-and-why-it-is-such-a-quest/), which facilitates predictability, reversibility, repeatability, scalability, and availability. Repeatability is even more critical for containers than for VMs, because containers typically have lifetimes that are measured in days, hours, even minutes. Production container images are typically built from configurable/scripted processes and have parameters overridden by configuration rather than modifying them interactively. + +What form should this configuration take in Kubernetes? The requirements are as follows: + +* Perhaps somewhat obviously, it should support **bulk** management operations: creation, deletion, and updates. + +* As stated above, it should be **universal**, usable for both bespoke and off-the-shelf applications, for most major workload categories, including stateless and stateful, and for both development and production environments. It also needs to be applicable to use cases outside application definition, such as policy configuration and component configuration. + +* It should **expose** the full power of Kubernetes (all CRUD APIs, API fields, API versions, and extensions), be **consistent** with concepts and properties presented by other tools, and should **teach** Kubernetes concepts and API, while providing a **bridge** for application developers that prefer imperative control or that need wizards and other tools to provide an onramp for beginners. + +* It should feel **native** to Kubernetes. There is a place for tools that work across multiple platforms but which are native to another platform and for tools that are designed to work across multiple platforms but are native to none, but such non-native solutions would increase complexity for Kubernetes users by not taking full advantage of Kubernetes-specific mechanisms and conventions. + +* It should **integrate** with key user tools and workflows, such as continuous deployment pipelines and application-level configuration formats, and **compose** with built-in and third-party API-based automation, such as [admission control](https://kubernetes.io/docs/admin/admission-controllers/), autoscaling, and [Operators](https://coreos.com/operators). In order to do this, it needs to support **separation of concerns** by supporting multiple distinct configuration sources and preserving declarative intent while allowing automatically set attributes. + +* In particular, it should be straightforward (but not required) to manage declarative intent under **version control**, which is [standard industry best practice](http://martinfowler.com/bliki/InfrastructureAsCode.html) and what Google does internally. Version control facilitates reproducibility, reversibility, and an audit trail. Unlike generated build artifacts, configuration is primary human-authored, or at least it is desirable to be human-readable, and it is typically changed with a human in the loop, as opposed to fully automated processes, such as autoscaling. Version control enables the use of familiar tools and processes for change control, review, and conflict resolution. + +* Users need the ability to **customize** off-the-shelf configurations and to instantiate multiple **variants**, without crossing the [line into the ecosystem](https://docs.google.com/presentation/d/1oPZ4rznkBe86O4rPwD2CWgqgMuaSXguIBHIE7Y0TKVc/edit#slide=id.g21b1f16809_5_86) of [configuration domain-specific languages, platform as a service, functions as a service](https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/#what-kubernetes-is-not), and so on, though users should be able to [layer such tools/systems on top](https://kubernetes.io/blog/2017/02/caas-the-foundation-for-next-gen-paas/) of the mechanism, should they choose to do so. + +* We need to develop clear **conventions**, **examples**, and mechanisms that foster **structure**, to help users understand how to combine Kubernetes’s flexible mechanisms in an effective manner. + +## Configuration customization and variant generation + +The requirement that drives the most complexity in typical configuration solutions is the need to be able to customize configurations of off-the-shelf components and/or to instantiate multiple variants. + +Deploying an application generally requires customization of multiple categories of configuration: + +* Frequently customized + + * Context: namespaces, [names, labels](https://github.com/kubernetes/kubernetes/issues/1698), inter-component references, identity + + * Image: repository/registry (source), tag (image stream/channel), digest (specific image) + + * Application configuration, overriding default values in images: command/args, env, app config files, static data + + * Resource parameters: replicas, cpu, memory, volume sources + + * Consumed services: coordinates, credentials, and client configuration + +* Less frequently customized + + * Management parameters: probe intervals, rollout constraints, utilization targets + +* Customized per environment + + * Environmental adapters: lifecycle hooks, helper sidecars for configuration, monitoring, logging, network/auth proxies, etc + + * Infrastructure mapping: scheduling constraints, tolerations + + * Security and other operational policies: RBAC, pod security policy, network policy, image provenance requirements + +* Rarely customized + + * Application topology, which makes up the basic structure of the application: new/replaced components + +In order to make an application configuration reusable, users need to be able to customize each of those categories of configuration. There are multiple approaches that could be used: + +* Fork: simple to understand; supports arbitrary changes and updates via rebasing, but hard to automate in a repeatable fashion to maintain multiple variants + +* Overlay / patch: supports composition and useful for standard transformations, such as setting organizational defaults or injecting environment-specific configuration, but can be fragile with respect to changes in the base configuration + +* Composition: useful for orthogonal concerns + + * Pull: Kubernetes provides APIs for distribution of application secrets (Secret) and configuration data (ConfigMap), and there is a [proposal open](http://issues.k8s.io/831) to support application data as well + + * the resource identity is fixed, by the object reference, but the contents are decoupled + + * the explicit reference makes it harder to consume a continuously updated stream of such resources, and harder to generate multiple variants + + * can give the PodSpec author some degree of control over the consumption of the data, such as environment variable names and volume paths (though service accounts are at conventional locations rather than configured ones) + + * Push: facilitates separation of concerns and late binding + + * can be explicit, such as with kubectl set or HorizontalPodAutoscaler + + * can be implicit, such as with LimitRange, PodSecurityPolicy, PodPreset, initializers + + * good for attaching policies to selected resources within a scope (namespace and/or label selector) + +* Transformation: useful for common cases (e.g., names and labels) + +* Generation: useful for static decisions, like "if this is a Java app…", which can be integrated into the declarative specification + +* Automation: useful for dynamic adaptation, such as horizontal and vertical auto-scaling, improves ease of use and aids encapsulation (by not exposing those details), and can mitigate phase-ordering problems + +* Parameterization: natural for small numbers of choices the user needs to make, but there are many pitfalls, discussed below + +Rather than relying upon a single approach, we should combine these techniques such that disadvantages are mitigated. + +Tools used to customize configuration [within Google](http://queue.acm.org/detail.cfm?id=2898444) have included: + +* Many bespoke domain-specific configuration languages ([DSLs](http://flabbergast.org)) + +* Python-based configuration DSLs (e.g., [Skylark](https://github.com/google/skylark)) + +* Transliterate configuration DSLs into structured data models/APIs, layered over and under existing DSLs in order to provide a form that is more amenable to automatic manipulation + +* Configuration overlay systems, override mechanisms, and template inheritance + +* Configuration generators, manipulation CLIs, IDEs, and wizards + +* Runtime config databases and spreadsheets + +* Several workflow/push/reconciliation engines + +* Autoscaling and resource-planning tools + +Note that forking/branching generally isn’t viable in Google’s monorepo. + +Despite many projects over the years, some of which have been very widely used, the problem is still considered to be not solved satisfactorily. Our experiences with these tools have informed this proposal, however, as well as the design of Kubernetes itself. + +A non-exhaustive list of tools built by the Kubernetes community (see [spreadsheet](https://docs.google.com/spreadsheets/d/1FCgqz1Ci7_VCz_wdh8vBitZ3giBtac_H8SBw4uxnrsE/edit#gid=0) for up-to-date list), in no particular order, follows: + +* [Helm](https://github.com/kubernetes/helm) +* [OC new-app](https://docs.openshift.com/online/dev_guide/application_lifecycle/new_app.html) +* [Kompose](https://github.com/kubernetes-incubator/kompose) +* [Spread](https://github.com/redspread/spread) +* [Draft](https://github.com/Azure/draft) +* [Ksonnet](https://github.com/ksonnet/ksonnet-lib)/[Kubecfg](https://github.com/ksonnet/kubecfg) +* [Databricks Jsonnet](https://databricks.com/blog/2017/06/26/declarative-infrastructure-jsonnet-templating-language.html) +* [Kapitan](https://github.com/deepmind/kapitan) +* [Konfd](https://github.com/kelseyhightower/konfd) +* [Templates](https://docs.openshift.com/online/dev_guide/templates.html)/[Ktmpl](https://github.com/InQuicker/ktmpl) +* [Fabric8 client](https://github.com/fabric8io/kubernetes-client) +* [Kubegen](https://github.com/errordeveloper/kubegen) +* [kenv](https://github.com/thisendout/kenv) +* [Ansible](https://docs.ansible.com/ansible/kubernetes_module.html) +* [Puppet](https://forge.puppet.com/garethr/kubernetes/readme) +* [KPM](https://github.com/coreos/kpm) +* [Nulecule](https://github.com/projectatomic/nulecule) +* [Kedge](https://github.com/kedgeproject/kedge) ([OpenCompose](https://github.com/redhat-developer/opencompose) is deprecated) +* [Chartify](https://github.com/appscode/chartify) +* [Podex](https://github.com/kubernetes/contrib/tree/master/podex) +* [k8sec](https://github.com/dtan4/k8sec) +* [kb80r](https://github.com/UKHomeOffice/kb8or) +* [k8s-kotlin-dsl](https://github.com/fkorotkov/k8s-kotlin-dsl) +* [KY](https://github.com/stellaservice/ky) +* [Kploy](https://github.com/kubernauts/kploy) +* [Kdeploy](https://github.com/flexiant/kdeploy) +* [Kubernetes-deploy](https://github.com/Shopify/kubernetes-deploy) +* [Generator-kubegen](https://www.sesispla.net/blog/language/en/2017/07/introducing-generator-kubegen-a-kubernetes-configuration-file-booster-tool/) +* [K8comp](https://github.com/cststack/k8comp) +* [Kontemplate](https://github.com/tazjin/kontemplate) +* [Kexpand](https://github.com/kopeio/kexpand) +* [Forge](https://github.com/datawire/forge/) +* [Psykube](https://github.com/CommercialTribe/psykube) +* [Koki](http://koki.io) +* [Deploymentizer](https://github.com/InVisionApp/kit-deploymentizer) +* [generator-kubegen](https://github.com/sesispla/generator-kubegen) +* [Broadway](https://github.com/namely/broadway) +* [Srvexpand](https://github.com/kubernetes/kubernetes/pull/1980/files) +* [Rok8s-scripts](https://github.com/reactiveops/rok8s-scripts) +* [ERB-Hiera](https://roobert.github.io/2017/08/16/Kubernetes-Manifest-Templating-with-ERB-and-Hiera/) +* [k8s-icl](https://github.com/archipaorg/k8s-icl) +* [sed](https://stackoverflow.com/questions/42618087/how-to-parameterize-image-version-when-passing-yaml-for-container-creation) +* [envsubst](https://github.com/fabric8io/envsubst) +* [Jinja](https://github.com/tensorflow/ecosystem/tree/master/kubernetes) +* [spiff](https://github.com/cloudfoundry-incubator/spiff) + +Additionally, a number of continuous deployment systems use their own formats and/or schemas. + +The number of tools is a signal of demand for a customization solution, as well as lack of awareness of and/or dissatisfaction with existing tools. [Many prefer](https://news.ycombinator.com/item?id=15029086) to use the simplest tool that meets their needs. Most of these tools support customization via simple parameter substitution or a more complex configuration domain-specific language, while not adequately supporting the other customization strategies. The pitfalls of parameterization and domain-specific languages are discussed below. + +### Parameterization pitfalls + +After simply forking (or just cut&paste), parameterization is the most commonly used customization approach. We have [previously discussed](https://github.com/kubernetes/kubernetes/issues/11492) requirements for parameterization mechanisms, such as explicit declaration of parameters for easy discovery, documentation, and validation (e.g., for [form generation](https://github.com/kubernetes/kubernetes/issues/6487)). It should also be straightforward to provide multiple sets of parameter values in support of variants and to manage them under version control, though many tools do not facilitate that. + +Some existing template examples: + +* [Openshift templates](https://github.com/openshift/library/tree/master/official) ([MariaDB example](https://github.com/luciddreamz/library/blob/master/official/mariadb/templates/mariadb-persistent.json)) +* [Helm charts](https://github.com/kubernetes/charts/) ([Jenkins example](https://github.com/kubernetes/charts/blob/master/stable/jenkins/templates/jenkins-master-deployment.yaml)) +* not Kubernetes, but a [Kafka Mesosphere Universe example](https://github.com/mesosphere/universe/blob/version-3.x/repo/packages/C/confluent-kafka/5/marathon.json.mustache) + +Parameterization solutions are easy to implement and to use at small scale, but parameterized templates tend to become complex and difficult to maintain. Syntax-oblivious macro substitution (e.g., sed, jinja, envsubst) can be fragile, and parameter substitution sites generally have to be identified manually, which is tedious and error-prone, especially for the most common use cases, such as resource name prefixing. + +Additionally, performing all customization via template parameters erodes template encapsulation. Some prior configuration-language design efforts made encapsulation a non-goal due to the widespread desire of users to override arbitrary parts of configurations. If used by enough people, someone will want to override each value in a template. Parameterizing every value in a template creates an alternative API schema that contains an out-of-date subset of the full API, and when [every value is a parameter](https://github.com/kubernetes/charts/blob/e002378c13e91bef4a3b0ba718c191ec791ce3f9/stable/artifactory/templates/artifactory-deployment.yaml), a template combined with its parameters is considerably less readable than the expanded result, and less friendly to data-manipulation scripts and tools. + +### Pitfalls of configuration domain-specific languages (DSLs) + +Since parameterization and file imports are common features of most configuration domain-specific languages (DSLs), they inherit the pitfalls of parameterization. The complex custom syntax (and/or libraries) of more sophisticated languages also tends to be more opaque, hiding information such as application topology from humans. Users generally need to understand the input language, transformations applied, and output generated, which is more complex for users to learn. Furthermore, custom-built languages [typically lack good tools](http://mikehadlow.blogspot.com/2012/05/configuration-complexity-clock.html) for refactoring, validation, testing, debugging, etc., and hard-coded translations are hard to maintain and keep up to date. And such syntax typically isn’t friendly to tools, for example [hiding information](https://github.com/kubernetes/kubernetes/issues/13241#issuecomment-233731291) about parameters and source dependencies, and is hostile to composition with other tools, configuration sources, configuration languages, runtime automation, and so on. The configuration source must be modified in order to customize additional properties or to add additional resources, which fosters closed, monolithic, fat configuration ecosystems and obstructs separation of concerns. This is especially true of tools and libraries that don’t facilitate post-processing of their output between pre-processing the DSL and actuation of the resulting API resources. + +Additionally, the more powerful languages make it easy for users to shoot themselves in their feet. For instance, it can be easy to mix computation and data. Among other problems, embedded code renders the configuration unparsable by other tools (e.g., extraction, injection, manipulation, validation, diff, interpretation, reconciliation, conversion) and clients. Such languages also make it easy to reduce boilerplate, which can be useful, but when taken to the extreme, impairs readability and maintainability. Nested/inherited templates are seductive, for those languages that enable them, but very hard to make reusable and maintainable in practice. Finally, it can be tempting to use these capabilities for many purposes, such as changing defaults or introducing new abstractions, but this can create different and surprising behavior compared to direct API usage through CLIs, libraries, UIs, etc., and create accidental pseudo-APIs rather than intentional, actual APIs. If common needs can only be addressed using the configuration language, then the configuration transformer must be invoked by most clients, as opposed to using the API directly, which is contrary to the design of Kubernetes as an API-centric system. + +Such languages are powerful and can perform complex transformations, but we found that to be a [mixed blessing within Google](http://research.google.com/pubs/pub44843.html). For instance, there have been many cases where users needed to generate configuration, manipulate configuration, backport altered API field settings into templates, integrate some kind of dynamic automation with declarative configuration, and so on. All of these scenarios were painful to implement with DSL templates in the way. Templates also created new abstractions, changed API default values, and diverged from the API in other ways that disoriented new users. + +A few DSLs are in use in the Kubernetes community, including Go templates (used by Helm, discussed more below), [fluent DSLs](https://github.com/fabric8io/kubernetes-client), and [jsonnet](http://jsonnet.org/), which was inspired by [Google’s Borg configuration language](https://research.google.com/pubs/pub43438.html) ([more on its root language, GCL](http://alexandria.tue.nl/extra1/afstversl/wsk-i/bokharouss2008.pdf)). [Ksonnet-lib](https://github.com/ksonnet/ksonnet-lib) is a community project aimed at building Kubernetes-specific jsonnet libraries. Unfortunately, the examples (e.g., [nginx](https://github.com/ksonnet/ksonnet-lib/blob/master/examples/readme/hello-nginx.jsonnet)) appear more complex than the raw Kubernetes API YAML, so while it may provide more expressive power, it is less approachable. Databricks looks like [the biggest success case](https://databricks.com/blog/2017/06/26/declarative-infrastructure-jsonnet-templating-language.html) with jsonnet to date, and uses an approach that is admittedly more readable than ksonnet-lib, as is [Kubecfg](https://github.com/ksonnet/kubecfg). However, they all encourage users to author and manipulate configuration code written in a DSL rather than configuration data written in a familiar and easily manipulated format, and are unnecessarily complex for most use cases. + +Helm is discussed below, with package management. + +In case it’s not clear from the above, I do not consider configuration schemas expressed using common data formats such as JSON and YAML (sans use of substitution syntax) to be configuration DSLs. + +## Configuration using REST API resource specifications + +Given the pitfalls of parameterization and configuration DSLs, as mentioned at the beginning of this document, configuration tooling should manipulate configuration **data**, not convert configuration to code nor other marked-up syntax, and, in the case of Kubernetes, this data should primarily contain specifications of the **literal Kubernetes API resources** required to deploy the application in the manner desired by the user. The Kubernetes API and CLI (kubectl) were designed to support this model, and our documentation and examples use this approach. + +[Kubernetes’s API](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/architecture.md#cluster-control-plane-aka-master) provides IaaS-like container-centric primitives such as Pods, Services, and Ingress, and also lifecycle controllers to support orchestration (self-healing, scaling, updates, termination) of common types of workloads, such as ReplicaSet (simple fungible/stateless app manager), Deployment (orchestrates updates of stateless apps), Job (batch), CronJob (cron), DaemonSet (cluster services), StatefulSet (stateful apps), and [custom third-party controllers/operators](https://coreos.com/blog/introducing-operators.html). The workload controllers, such as Deployment, support declarative upgrades using production-grade strategies such as rolling update, so that the client doesn’t need to perform complex orchestration in the common case. (And we’re moving [proven kubectl features to controllers](https://github.com/kubernetes/kubernetes/issues/12143), generally.) We also deliberately decoupled service naming/discovery and load balancing from application implementation in order to maximize deployment flexibility, which should be preserved by the configuration mechanism. + +[Kubectl apply](https://github.com/kubernetes/kubernetes/issues/15894) [was designed](https://github.com/kubernetes/kubernetes/issues/1702) ([original proposal](https://github.com/kubernetes/kubernetes/issues/1178)) to support declarative updates without clobbering operationally and/or automatically set desired state. Properties not explicitly specified by the user are free to be changed by automated and other out-of-band mechanisms. Apply is implemented as a 3-way merge of the user’s previous configuration, the new configuration, and the live state. + +We [chose this simple approach of using literal API resource specifications](https://github.com/kubernetes/kubernetes/pull/1007/files) for the following reasons: + +* KISS: It was simple and natural, given that we designed the API to support CRUD on declarative primitives, and Kubernetes uses the API representation in all scenarios where API resources need to be serialized (e.g., in persistent cluster storage). +* It didn’t require users to learn multiple different schemas, the API and another configuration format. We believe many/most production users will eventually want to use the API, and knowledge of the API transfers to other clients and tools. It doesn’t obfuscate the API, which is relatively easy to read. +* It automatically stays up to date with the API, automatically supports all Kubernetes resources, versions, extensions, etc., and can be automatically converted to new API versions. +* It could share mechanisms with other clients (e.g., Swagger/OpenAPI, which is used for schema validation), which are now supported in several languages: Go, Python, Java, … +* Declarative configuration is only one interface to the system. There are also CLIs (e.g., kubectl), UIs (e.g., dashboard), mobile apps, chat bots, controllers, admission controllers, Operators, deployment pipelines, etc. Those clients will (and should) target the API. The user will need to interact with the system in terms of the API in these other scenarios. +* The API serves as a well defined intermediate representation, pre- and post-creation, with a documented deprecation policy. Tools, libraries, controllers, UI wizards, etc. can be built on top, leaving room for exploration and innovation within the community. Example API-based transformations include: + * Overlay application: kubectl patch + * Generic resource tooling: kubectl label, kubectl annotate + * Common-case tooling: kubectl set image, kubectl set resources + * Dynamic pod transformations: LimitRange, PodSecurityPolicy, PodPreset + * Admission controllers and initializers + * API-based controllers, higher-level APIs, and controllers driven by custom resources + * Automation: horizontal and [vertical pod autoscaling](https://github.com/kubernetes/community/pull/338) +* It is inherently composable: just add more resource manifests, in the same file or another file. No embedded imports required. + +Of course, there are downsides to the approach: + +* Users need to learn some API schema details, though we believe operators will want to learn them, anyway. +* The API schema does contain a fair bit of boilerplate, though it could be auto-generated and generally increases clarity. +* The API introduces a significant number of concepts, though they exist for good reasons. +* The API has no direct representation of common generation steps (e.g., generation of ConfigMap or Secret resources from source data), though these can be described in a declarative format using API conventions, as we do with component configuration in Kubernetes. +* It is harder to fix warts in the API than to paper over them. Fixing "bugs" may break compatibility (e.g., as with changing the default imagePullPolicy). However, the API is versioned, so it is not impossible, and fixing the API benefits all clients, tools, UIs, etc. +* JSON is cumbersome and some users find YAML to be error-prone to write. It would also be nice to support a less error-prone data syntax than YAML, such as [Relaxed JSON](https://github.com/phadej/relaxed-json), [HJson](https://hjson.org/), [HCL](https://github.com/hashicorp/hcl), [StrictYAML](https://github.com/crdoconnor/strictyaml/blob/master/FAQ.rst), or [YAML2](https://github.com/yaml/YAML2/wiki/Goals). However, one major disadvantage would be the lack of library support in multiple languages. HCL also wouldn’t directly map to our API schema due to our avoidance of maps. Perhaps there are there YAML conventions that could result in less error-prone specifications. + +## What needs to be improved? + +While the basic mechanisms for this approach are in place, a number of common use cases could be made easier. Most user complaints are around discovering what features exist (especially annotations), documentation of and examples using those features, generating/finding skeleton resource specifications (including boilerplate and commonly needed features), formatting and validation of resource specifications, and determining appropriate cpu and memory resource requests and limits. Specific user scenarios are discussed below. + +### Bespoke application deployment + +Deployment of bespoke applications involves multiple steps: + +1. Build the container image +2. Generate and/or modify Kubernetes API resource specifications to use the new image +3. Reconcile those resources with a Kubernetes cluster + +Step 1, building the image, is out of scope for Kubernetes. Step 3 is covered by kubectl apply. Some tools in the ecosystem, such as [Draft](https://github.com/Azure/draft), combine the 3 steps. + +Kubectl contains ["generator" commands](https://github.com/kubernetes/community/blob/master/contributors/devel/kubectl-conventions.md#generators), such as [kubectl run](https://kubernetes.io/docs/user-guide/kubectl/v1.7/#run), expose, various create commands, to create commonly needed Kubernetes resource configurations. However, they also don’t help users understand current best practices and conventions, such as proper label and annotation usage. This is partly a matter of updating them and partly one of making the generated resources suitable for consumption by new users. Options supporting declarative output, such as dry run, local, export, etc., don’t currently produce clean, readable, reusable resource specifications ([example](https://blog.heptio.com/using-kubectl-to-jumpstart-a-yaml-file-heptioprotip-6f5b8a63a3ea))**.** We should clean them up. + +Openshift provides a tool, [oc new-app](https://docs.openshift.com/enterprise/3.1/dev_guide/new_app.html), that can pull source-code templates, [detect](https://github.com/kubernetes/kubernetes/issues/14801)[ application types](https://github.com/kubernetes/kubernetes/issues/14801) and create Kubernetes resources for applications from source and from container images. [podex](https://github.com/kubernetes/contrib/tree/master/podex) was built to extract basic information from an image to facilitate creation of default Kubernetes resources, but hasn’t been kept up to date. Similar resource generation tools would be useful for getting started, and even just [validating that the image really exists](https://github.com/kubernetes/kubernetes/issues/12428) would reduce user error. + +For updating the image in an existing deployment, kubectl set image works both on the live state and locally. However, we should [make the image optional](https://github.com/kubernetes/kubernetes/pull/47246) in controllers so that the image could be updated independently of kubectl apply, if desired. And, we need to [automate image tag-to-digest translation](https://github.com/kubernetes/kubernetes/issues/33664) ([original issue](https://github.com/kubernetes/kubernetes/issues/1697)), which is the approach we’d expect users to use in production, as opposed to just immediately re-pulling the new image and restarting all existing containers simultaneously. We should keep the original tag in an imageStream annotation, which could eventually become a field. + +### Continuous deployment + +In addition to PaaSes, such as [Openshift](https://blog.openshift.com/openshift-3-3-pipelines-deep-dive/) and [Deis Workflow](https://github.com/deis/workflow), numerous continuous deployment systems have been integrated with Kubernetes, such as [Google Container Builder](https://github.com/GoogleCloudPlatform/cloud-builders/tree/master/kubectl), [Jenkins](https://github.com/GoogleCloudPlatform/continuous-deployment-on-kubernetes), [Gitlab](https://about.gitlab.com/2016/11/14/idea-to-production/), [Wercker](http://www.wercker.com/integrations/kubernetes), [Drone](https://open.blogs.nytimes.com/2017/01/12/continuous-deployment-to-google-cloud-platform-with-drone/), [Kit](https://invisionapp.github.io/kit/), [Bitbucket Pipelines](https://confluence.atlassian.com/bitbucket/deploy-to-kubernetes-892623297.html), [Codeship](https://blog.codeship.com/continuous-deployment-of-docker-apps-to-kubernetes/), [Shippable](https://www.shippable.com/kubernetes.html), [SemaphoreCI](https://semaphoreci.com/community/tutorials/continuous-deployment-with-google-container-engine-and-kubernetes), [Appscode](https://appscode.com/products/cloud-deployment/), [Kontinuous](https://github.com/AcalephStorage/kontinuous), [ContinuousPipe](https://continuouspipe.io/), [CodeFresh](https://docs.codefresh.io/docs/kubernetes#section-deploy-to-kubernetes), [CloudMunch](https://www.cloudmunch.com/continuous-delivery-for-kubernetes/), [Distelli](https://www.distelli.com/kubernetes/), [AppLariat](https://www.applariat.com/ci-cd-applariat-travis-gke-kubernetes/), [Weave Flux](https://github.com/weaveworks/flux), and [Argo](https://argoproj.github.io/argo-site/#/). Developers usually favor simplicity, whereas operators have more requirements, such as multi-stage deployment pipelines, deployment environment management (e.g., staging and production), and canary analysis. In either case, users need to be able to deploy both updated images and configuration updates, ideally using the same workflow. [Weave Flux](https://github.com/weaveworks/flux) and [Kube-applier](https://blog.box.com/blog/introducing-kube-applier-declarative-configuration-for-kubernetes/) support unified continuous deployment of this style. In other CD systems a unified flow may be achievable by making the image deployment step perform a local kubectl set image (or equivalent) and commit the change to the configuration, and then use another build/deployment trigger on the configuration repository to invoke kubectl apply --prune. + +### Migrating from Docker Compose + +Some developers like Docker’s Compose format as a simplified all-in-one configuration schema, or are at least already familiar with it. Kubernetes supports the format using the [Kompose tool](https://github.com/kubernetes/kompose), which provides an easy migration path for these developers by translating the format to Kubernetes resource specifications. + +The Compose format, even with extensions (e.g., replica counts, pod groupings, controller types), is inherently much more limited in expressivity than Kubernetes-native resource specifications, so users would not want to use it forever in production. But it provides a useful onramp, without introducing [yet another schema](https://github.com/kubernetes/kubernetes/pull/1980#issuecomment-60457567) to the community. We could potentially increase usage by including it in a [client-tool release bundle](https://github.com/kubernetes/release/issues/3). + +### Reconciliation of multiple resources and multiple files + +Most applications require multiple Kubernetes resources. Although kubectl supports multiple resources in a single file, most users store the resource specifications using one resource per file, for a number of reasons: + +* It was the approach used by all of our early application-stack examples +* It provides more control by making it easier to specify which resources to operate on +* It’s inherently composable -- just add more files + +The control issue should be addressed by adding support to select resources to mutate by label selector, name, and resource types, which has been planned from the beginning but hasn’t yet been fully implemented. However, we should also [expand and improve kubectl’s support for input from multiple files](https://github.com/kubernetes/kubernetes/issues/24649). + +### Declarative updates + +Kubectl apply (and strategic merge patch, upon which apply is built) has a [number of bugs and shortcomings](https://github.com/kubernetes/kubernetes/issues/35234), which we are fixing, since it is the underpinning of many things (declarative configuration, add-on management, controller diffs). Eventually we need [true API support](https://github.com/kubernetes/kubernetes/issues/17333) for apply so that clients can simply PUT their resource manifests and it can be used as the fundamental primitive for declarative updates for all clients. One of the trickier issues we should address with apply is how to handle [controller selector changes](https://github.com/kubernetes/kubernetes/issues/26202). We are likely to forbid changes for now, as we do with resource name changes. + +Kubectl should also operate on resources in an intelligent order when presented with multiple resources. While we’ve tried to avoid creation-order dependencies, they do exist in a few places, such as with namespaces, custom resource definitions, and ownerReferences. + +### ConfigMap and Secret updates + +We need a declarative syntax for regenerating [Secrets](https://github.com/kubernetes/kubernetes/issues/24744) and [ConfigMaps](https://github.com/kubernetes/kubernetes/issues/30337) from their source files that could be used with apply, and provide easier ways to [roll out new ConfigMaps and garbage collect unneeded ones](https://github.com/kubernetes/kubernetes/issues/22368). This could be embedded in a manifest file, which we need for "package" metadata (see [Addon manager proposal](https://docs.google.com/document/d/1Laov9RCOPIexxTMACG6Ffkko9sFMrrZ2ClWEecjYYVg/edit) and [Helm chart.yaml](https://github.com/kubernetes/helm/blob/master/docs/charts.md)). There also needs to be an easier way to [generate names of the new resources](https://github.com/kubernetes/kubernetes/pull/49961) and to update references to ConfigMaps and Secrets, such as in env and volumes. This could be done via new kubectl set commands, but users primarily need the “stream” update model, as with images. + +### Determining success/failure + +The declarative, [asynchronous control-loop-based approach](https://docs.google.com/presentation/d/1oPZ4rznkBe86O4rPwD2CWgqgMuaSXguIBHIE7Y0TKVc/edit#slide=id.g21b1f16809_3_155) makes it more challenging for the user to determine whether the change they made succeeded or failed, or the system is still converging towards the new desired state. Enough status information needs to be reported such that progress and problems are visible to controllers watching the status, and the status needs to be reported in a consistent enough way that a [general-purpose mechanism](https://github.com/kubernetes/kubernetes/issues/34363) can be built that works for arbitrary API types following Kubernetes API conventions. [Third-party attempts](https://github.com/Mirantis/k8s-AppController#dependencies) to monitor the status generally are not implemented correctly, since Kubernetes’s extensible API model requires exposing distributed-system effects to clients. This complexity can be seen all over our [end-to-end tests](https://github.com/kubernetes/kubernetes/blob/master/test/utils/deployment.go#L74), which have been made robust over many thousands of executions. Definitely authors of individual application configurations should not be forced to figure out how to implement such checks, as they currently do in Helm charts (--wait, test). + +### Configuration customization + +The strategy for customization involves the following main approaches: + +1. Fork or simply copy the resource specifications, and then locally modify them, imperatively, declaratively, or manually, in order to reuse off-the-shelf configuration. To facilitate these modifications, we should: + * Automate common customizations, especially [name prefixing and label injection](https://github.com/kubernetes/kubernetes/issues/1698) (including selectors, pod template labels, and object references), which would address the most common substitutions in existing templates + * Fix rough edges for local mutation via kubectl get --export and [kubectl set](https://github.com/kubernetes/kubernetes/issues/21648) ([--dry-run](https://github.com/kubernetes/kubernetes/issues/11488), --local, -o yaml), and enable kubectl to directly update files on disk + * Build fork/branch management tooling for common workflows, such as branch creation, cherrypicking (e.g., to copy configuration changes from a staging to production branch), rebasing, etc., perhaps as a plugin to kubectl. + * Build/improve structural diff, conflict detection, validation (e.g., [kubeval](https://github.com/garethr/kubeval), [ConfigMap element properties](https://github.com/kubernetes/kubernetes/issues/4210)), and comprehension tools +2. Resource overlays, for instantiating multiple variants. Kubectl patch already works locally using strategic merge patch, so the overlays have the same structure as the base resources. The main feature needed to facilitate that is automatic pairing of overlays with the resources they should patch. + +Fork provides one-time customization, which is the most common case. Overlay patches provide deploy-time customization. These techniques can be combined with dynamic customization (PodPreset, other admission controllers, third-party controllers, etc.) and run-time customization (initContainers and entrypoint.sh scripts inside containers). + +Benefits of these approaches: + +* Easier for app developers and operators to build initial configurations (no special template syntax) +* Compatible with existing project tooling and conventions, and easy to read since it doesn’t obfuscate the API and doesn’t force users to learn a new way to configure their applications +* Supports best practices +* Handles cases the [original configuration author didn’t envision](http://blog.shippable.com/the-new-devops-matrix-from-hell) +* Handles cases where original author changes things that break existing users +* Supports composition by adding resources: secrets, configmaps, autoscaling +* Supports injection of operational concerns, such as node affinity/anti-affinity and tolerations +* Supports selection among alternatives, and multiple simultaneous versions +* Supports canaries and multi-cluster deployment +* Usable for [add-on management](https://github.com/kubernetes/kubernetes/issues/23233), by avoiding [obstacles that Helm has](https://github.com/kubernetes/kubernetes/issues/23233#issuecomment-285524825), and should eliminate the need for the EnsureExists behavior + +#### What about parameterization? + +An area where more investigation is needed is explicit inline parameter substitution, which, while overused and should be rendered unnecessary by the capabilities described above, is [frequently requested](https://stackoverflow.com/questions/44832085/passing-variables-to-args-field-in-a-yaml-file-kubernetes) and has been reinvented many times by the community. + +A [simple parameterization approach derived from Openshift’s design](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/templates.md) was approved because it was constrained in functionality and solved other problems (e.g., instantiation of resource variants by other controllers, [project templates in Openshift](https://github.com/openshift/training/blob/master/content/default-project-template.yaml)). That proposal explains some of the reasoning behind the design tradeoffs, as well as the [use cases](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/templates.md#use-cases). Work started, but was abandoned, though there is an independent [client-based implementation](https://github.com/InQuicker/ktmpl). However, the Template resource wrapped the resource specifications in another object, which is suboptimal, since transformations would then need to be able to deal with standalone resources, Lists of resources, and Templates, or would need to be applied post-instantiation, and it couldn’t be represented using multiple files, as users prefer. + +What is more problematic is that our client libraries, schema validators, yaml/json parsers/decoders, initializers, and protobuf encodings all require that all specified fields have valid values, so parameters cannot currently be left in non-string (e.g., int, bool) fields in actual resources. Additionally, the API server requires at least complete/final resource names to be specified, and strategic merge also requires all merge keys to be specified. Therefore, some amount of pre-instantiation (though not necessarily client-side) transformation is necessary to create valid resources, and we may want to explicitly store the output, or the fields should just contain the default values initially. Parameterized fields could be automatically converted to patches to produce valid resources. Such a transformation could be made reversible, unlike traditional substitution approaches, since the patches could be preserved (e.g., using annotations). The Template API supported the declaration of parameter names, display names, descriptions, default values, required/optional, and types (string, int, bool, base64), and both string and raw json substitutions. If we were to update that specification, we could use the same mechanism for both parameter validation and ConfigMap validation, so that the same mechanism could be used for env substitution and substitution of values of other fields. As mentioned in the [env validation issue](https://github.com/kubernetes/kubernetes/issues/4210#issuecomment-305555589), we should consider a subset of [JSON schema](http://json-schema.org/example1.html), which we’ll probably use for CRD. The only [unsupported attribute](https://tools.ietf.org/html/draft-wright-json-schema-validation-00) appears to be the display name, which is non-critical. [Base64 could be represented using media](http://json-schema.org/latest/json-schema-hypermedia.html#rfc.section.5.3.2). That could be useful as a common parameter schema to facilitate parameter discovery and documentation that is independent of the substitution syntax and mechanism ([example from Deployment Manager](https://github.com/GoogleCloudPlatform/deploymentmanager-samples/blob/master/templates/replicated_service.py.schema)). + +Without parameters how would we support a click-to-deploy experience? People who are kicking the tires, have undemanding use cases, are learning, etc. are unlikely to know what customization they want to perform initially, if they even need any. The main information users need to provide is the name prefix they want to apply. Otherwise, choosing among a few alternatives would suit their needs better than parameters. The overlay approach should support that pretty well. Beyond that, I suggest kicking users over to a Kubernetes-specific configuration wizard or schema-aware IDE, and/or support a fork workflow. + +The other application-definition [use cases mentioned in the Template proposal](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/templates.md#use-cases) are achievable without parameterization, as well. + +#### What about application configuration generation? + +A number of legacy applications have configuration mechanisms that couple application options and information about the deployment environment. In such cases, a ConfigMap containing the configuration data is not sufficient, since the runtime information (e.g., identities, secrets, service addresses) must be incorporated. There are a [number of tools used for this purpose outside Kubernetes](https://github.com/kubernetes/kubernetes/issues/2068). However, in Kubernetes, they would have to be run as Pod initContainers, sidecar containers, or container [entrypoint.sh init scripts](https://github.com/kubernetes/kubernetes/issues/30716). As this is only a need of some legacy applications, we should not complicate Kubernetes itself to solve it. Instead, we should be prepared to recommend a third-party tool, or provide one, and ensure the downward API provides the information it would need. + +#### What about [package management](https://medium.com/@sdboyer/so-you-want-to-write-a-package-manager-4ae9c17d9527) and Helm? + +[Helm](https://github.com/kubernetes/helm/blob/master/docs/chart_repository.md), [KPM](https://github.com/coreos/kpm), [App Registry](https://github.com/app-registry), [Kubepack](https://kubepack.com/), and [DCOS](https://docs.mesosphere.com/1.7/usage/managing-services/) (for Mesos) bundle whitebox off-the-shelf application configurations into **_packages_**. However, unlike traditional artifact repositories, which store and serve generated build artifacts, configurations are primarily human-authored. As mentioned above, it is industry best practice to manage such configurations using version control systems, and Helm package repositories are backed by source code repositories. (Example: [MariaDB](https://github.com/kubernetes/charts/tree/master/stable/mariadb).) + +Advantages of packages: + +1. Package formats add structure to raw Kubernetes primitives, which are deliberately flexible and freeform + * Starter resource specifications that illustrate API schema and best practices + * Labels for application topology (e.g., app, role, tier, track, env) -- similar to the goals of [Label Schema](http://label-schema.org/rc1/) + * File organization and manifest (list of files), to make it easier for users to navigate larger collections of application specifications, to reduce the need for tooling to search for information, and to facilitate segregation of resources from other artifacts (e.g., container sources) + * Application metadata: name, authors, description, icon, version, source(s), etc. + * Application lifecycle operations: build, test, debug, up, upgrade, down, etc. +1. [Package registries/repositories](https://github.com/app-registry/spec) facilitate [discovery](https://youtu.be/zGJsXyzE5A8?t=1159) of off-the-shelf applications and of their dependencies + * Scattered source repos are hard to find + * Ideally it would be possible to map the format type to a container containing the tool that understands the format. + +Helm is probably the most-used configuration tool other than kubectl, many [application charts](https://github.com/kubernetes/charts) have been developed (as with the [Openshift template library](https://github.com/openshift/library)), and there is an ecosystem growing around it (e.g., [chartify](https://github.com/appscode/chartify), [helmfile](https://github.com/roboll/helmfile), [landscaper](https://github.com/Eneco/landscaper), [draughtsman](https://github.com/giantswarm/draughtsman), [chartmuseum](https://github.com/chartmuseum/chartmuseum)). Helm’s users like the familiar analogy to package management and the structure that it provides. However, while Helm is useful and is the most comprehensive tool, it isn’t suitable for all use cases, such as [add-on management](https://github.com/kubernetes/kubernetes/issues/23233). The biggest obstacle is that its [non-Kubernetes-compatible API](https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/#what-kubernetes-is-not)[ and DSL syntax push it out of Kubernetes proper into the Kubernetes ecosystem](https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/#what-kubernetes-is-not). And, as much as Helm is targeting only Kubernetes, it takes little advantage of that. Additionally, scenarios we’d like to support better include chart authoring (prefer simpler syntax and more straightforward management under version control), operational customization (e.g., via scripting, [forking](https://github.com/kubernetes/helm/issues/2554), or patching/injection), deployment pipelines (e.g., [canaries](https://groups.google.com/forum/#!topic/kubernetes-sig-apps/ouqXYXdsPYw)), multi-cluster / [multi-environment](https://groups.google.com/d/msg/kubernetes-users/GPaGOGxCDD8/NbNL-NPhCAAJ) deployment, and multi-tenancy. + +Helm provides functionality covering several areas: + +* Package conventions: metadata (e.g., name, version, descriptions, icons; Openshift has [something similar](https://github.com/luciddreamz/library/blob/master/official/java/templates/openjdk18-web-basic-s2i.json#L10)), labels, file organization +* Package bundling, unbundling, and hosting +* Package discovery: search and browse +* [Dependency management](https://github.com/kubernetes/helm/blob/master/docs/charts.md#chart-dependencies) +* Application lifecycle management framework: build, install, uninstall, upgrade, test, etc. + * a non-container-centric example of that would be [ElasticBox](https://www.ctl.io/knowledge-base/cloud-application-manager/automating-deployments/start-stop-and-upgrade-boxes/) +* Kubernetes drivers for creation, update, deletion, etc. +* Template expansion / schema transformation +* (It’s currently lacking a formal parameter schema.) + +It's useful for Helm to provide an integrated framework, but the independent functions could be decoupled, and re-bundled into multiple separate tools: + +* Package management -- search, browse, bundle, push, and pull of off-the-shelf application packages and their dependencies. +* Application lifecycle management -- install, delete, upgrade, rollback -- and pre- and post- hooks for each of those lifecycle transitions, and success/failure tests. +* Configuration customization via parameter substitution, aka template expansion, aka rendering. + +That would enable the package-like structure and conventions to be used with raw declarative management via kubectl or other tool that linked in its [business logic](https://github.com/kubernetes/kubernetes/issues/7311), for the lifecycle management to be used without the template expansion, and the template expansion to be used in declarative workflows without the lifecycle management. Support for both client-only and server-side operation and migration from grpc to Kubernetes API extension mechanisms would further expand the addressable use cases. + +([Newer proposal, presented at the Helm Summit](https://docs.google.com/presentation/d/10dp4hKciccincnH6pAFf7t31s82iNvtt_mwhlUbeCDw/edit#slide=id.p).) + +#### What about the service broker? + +The [Open Service Broker API](https://openservicebrokerapi.org/) provides a standardized way to provision and bind to blackbox services. It enables late binding of clients to service providers and enables usage of higher-level application services (e.g., caches, databases, messaging systems, object stores) portably, mitigating lock-in and facilitating hybrid and multi-cloud usage of these services, extending the portability of cloud-native applications running on Kubernetes. The service broker is not intended to be a solution for whitebox applications that require any level of management by the user. That degree of abstraction/encapsulation requires full automation, essentially creating a software appliance (cf. [autonomic computing](https://en.wikipedia.org/wiki/Autonomic_computing)): autoscaling, auto-repair, auto-update, automatic monitoring / logging / alerting integration, etc. Operators, initializers, autoscalers, and other automation may eventually achieve this, and we need to for [cluster add-ons](https://github.com/kubernetes/kubernetes/issues/23233) and other [self-hosted components](https://github.com/kubernetes/kubernetes/issues/246), but the typical off-the-shelf application template doesn’t achieve that. + +#### What about configurations with high cyclomatic complexity or massive numbers of variants? + +Consider more automation, such as autoscaling, self-configuration, etc. to reduce the amount of explicit configuration necessary. One could also write a program in some widely used conventional programming language to generate the resource specifications. It’s more likely to have IDE support, test frameworks, documentation generators, etc. than a DSL. Better yet, create composable transformations, applying [the Unix Philosophy](https://en.wikipedia.org/wiki/Unix_philosophy#Eric_Raymond.E2.80.99s_17_Unix_Rules). In any case, don’t look for a silver bullet to solve all configuration-related problems. Decouple solutions instead. + +#### What about providing an intentionally restrictive simplified, tailored developer experience to streamline a specific use case, environment, workflow, etc.? + +This is essentially a [DIY PaaS](https://kubernetes.io/blog/2017/02/caas-the-foundation-for-next-gen-paas/). Write a configuration generator, either client-side or using CRDs ([example](https://github.com/pearsontechnology/environment-operator/blob/dev/User_Guide.md)). The effort involved to document the format, validate it, test it, etc. is similar to building a new API, but I could imagine someone eventually building a SDK to make that easier. + +#### What about more sophisticated deployment orchestration? + +Deployment pipelines, [canary deployments](https://groups.google.com/forum/#!topic/kubernetes-sig-apps/ouqXYXdsPYw), [blue-green deployments](https://groups.google.com/forum/#!topic/kubernetes-sig-apps/mwIq9bpwNCA), dependency-based orchestration, event-driven orchestrations, and [workflow-driven orchestration](https://github.com/kubernetes/kubernetes/issues/1704) should be able to use the building blocks discussed in this document. [AppController](https://github.com/Mirantis/k8s-AppController) and [Smith](https://github.com/atlassian/smith) are examples of tools built by the community. + +#### What about UI wizards, IDE integration, application frameworks, etc.? + +Representing configuration using the literal API types should facilitate programmatic manipulation of the configuration via user-friendly tools, such as UI wizards (e.g., [dashboard](https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/#deploying-containerized-applications), [Yipee.io](https://yipee.io/), and many CD tools, such as [Distelli](https://www.distelli.com/docs/k8s/add-container-to-a-project/)) and IDEs (e.g., [VSCode](https://www.youtube.com/watch?v=QfqS9OSVWGs), [IntelliJ](https://github.com/tinselspoon/intellij-kubernetes)), as well as configuration generation and manipulation by application frameworks (e.g., [Spring Cloud](https://github.com/fabric8io/spring-cloud-kubernetes)). diff --git a/contributors/design-proposals/architecture/images/apiserver.png b/contributors/design-proposals/architecture/images/apiserver.png new file mode 100644 index 000000000..2936ca9d1 Binary files /dev/null and b/contributors/design-proposals/architecture/images/apiserver.png differ diff --git a/contributors/design-proposals/architecture/resource-management.md b/contributors/design-proposals/architecture/resource-management.md new file mode 100644 index 000000000..5b6d66b8d --- /dev/null +++ b/contributors/design-proposals/architecture/resource-management.md @@ -0,0 +1,128 @@ +# Kubernetes Resource Management + +> This article was authored by Brian Grant (bgrant0607) on 2/20/2018. The original Google Doc can be found [here](https://docs.google.com/document/d/1RmHXdLhNbyOWPW_AtnnowaRfGejw-qlKQIuLKQWlwzs/edit#). + +Kubernetes is not just API-driven, but is *API-centric*. + +At the center of the Kubernetes control plane is the [apiserver](https://kubernetes.io/docs/admin/kube-apiserver/), which implements common functionality for all of the system’s APIs. Both user clients and components implementing the business logic of Kubernetes, called controllers, interact with the same APIs. The APIs are REST-like, supporting primarily CRUD operations on (mostly) persistent resources. All persistent cluster state is stored in one or more instances of the [etcd](https://github.com/coreos/etcd) key-value store. + +![apiserver](./images/apiserver.png) + +With the growth in functionality over the past four years, the number of built-in APIs grown by more than an order of magnitude. Moreover, Kubernetes now supports multiple API extension mechanisms that are not only used to add new functionality to Kubernetes itself, but provide frameworks for constructing an ecosystem of components, such as [Operators](https://coreos.com/operators/), for managing applications, platforms, infrastructure, and other things beyond the scope of Kubernetes itself. In addition to providing an overview of the common behaviors of built-in Kubernetes API resources, this document attempts to explain the assumptions, expectations, principles, conventions, and goals of the **Kubernetes Resource Model** so as to foster consistency and interoperability within that ecosystem as the uses of its API mechanisms and patterns expand. Any API using the same mechanisms and patterns will automatically work with any libraries and tools (e.g., CLIs, UIs, configuration, deployment, workflow) that have already integrated support for the model, which means that integrating support for N APIs implemented using the model in M tools is merely O(M) work rather than O(NM) work. + +## Declarative control + +In Kubernetes, declarative abstractions are primary, rather than layered on top of the system. The Kubernetes control plane is analogous to cloud-provider declarative resource-management systems (NOTE: Kubernetes also doesn’t bake-in templating, for reasons discussed in the last section.), but presents higher-level (e.g., containerized workloads and services), portable abstractions. Imperative operations and flowchart-like workflow orchestration can be built on top of its declarative model, however. + +Kubernetes supports declarative control by recording user intent as the desired state in its API resources. This enables a single API schema for each resource to serve as a declarative data model, as both a source and a target for automated components (e.g., autoscalers), and even as an intermediate representation for resource transformations prior to instantiation. + +The intent is carried out by asynchronous [controllers](https://github.com/kubernetes/community/blob/master/contributors/devel/controllers.md), which interact through the Kubernetes API. Controllers don’t access the state store, etcd, directly, and don’t communicate via private direct APIs. Kubernetes itself does expose some features similar to key-value stores such as etcd and [Zookeeper](https://zookeeper.apache.org/), however, in order to facilitate centralized [state and configuration management and distribution](https://sysgears.com/articles/managing-configuration-of-distributed-system-with-apache-zookeeper/) to decentralized components. + +Controllers continuously strive to make the observed state match the desired state, and report back their status to the apiserver asynchronously. All of the state, desired and observed, is made visible through the API to users and to other controllers. The API resources serve as coordination points, common intermediate representation, and shared state. + +Controllers are level-based (as described [here](http://gengnosis.blogspot.com/2007/01/level-triggered-and-edge-triggered.html) and [here](https://hackernoon.com/level-triggering-and-reconciliation-in-kubernetes-1f17fe30333d)) to maximize fault tolerance, which enables the system to operate correctly just given the desired state and the observed state, regardless of how many intermediate state updates may have been missed. However, they can achieve the benefits of an edge-triggered implementation by monitoring changes to relevant resources via a notification-style watch API, which minimizes reaction latency and redundant work. This facilitates efficient decentralized and decoupled coordination in a more resilient manner than message buses. (NOTE: Polling is simple, and messaging is simple, but neither is ideal. There should be a CAP-like theorem about simultaneously achieving low latency, resilience, and simplicity -- pick any 2. Challenges with using "reliable" messaging for events/updates include bootstrapping consumers, events lost during bus outages, consumers not keeping up, bounding queue state, and delivery to unspecified numbers of consumers.) + +## Additional resource model properties + +The Kubernetes control-plane design is intended to make the system resilient and extensible, supporting both declarative configuration and automation, while providing a consistent experience to users and clients. In order to add functionality conforming to these objectives, it should be as easy as defining a new resource type and adding a new controller. + +The Kubernetes resource model is designed to reinforce these objectives through its core assumptions (e.g., lack of exclusive control and multiple actors), principles (e.g., transparency and loose coupling), and goals (e.g., composability and extensibility): + +* There are few direct inter-component APIs, and no hidden internal resource-oriented APIs. All APIs are visible and available (subject to authorization policy). The distinction between being part of the system and being built on top of the system is deliberately blurred. In order to handle more complex use cases, there's no glass to break. One can just access lower-level APIs in a fully transparent manner, or add new APIs, as necessary. + +* Kubernetes operates in a distributed environment, and the control-plane itself may be sharded and distributed (e.g., as in the case of aggregated APIs). Desired state is updated immediately but actuated asynchronously and eventually. Kubernetes does not support atomic transactions across multiple resources and (especially) resource types, pessimistic locking, other durations where declarative intent cannot be updated (e.g., unavailability while busy), discrete synchronous long-running operations, nor synchronous success preconditions based on the results of actuation (e.g., failing to write a new image tag to a PodSpec when the image cannot be pulled). The Kubernetes API also does not provide strong ordering or consistency across multiple resources, and does not enforce referential integrity. Providing stronger semantics would compromise the resilience, extensibility, and observability of the system, while providing less benefit than one might expect, especially given other assumptions, such as the lack of exclusive control and multiple actors. Resources could be modified or deleted immediately after being created. Failures could occur immediately after success, or even prior to apparent success, if not adequately monitored. Caching and concurrency generally obfuscate event ordering. Workflows often involve external, non-transactional resources, such as git repositories and cloud resources. Therefore, graceful tolerance of out-of-order events and problems that could be self-healed automatically is expected. As an example, if a resource can't properly function due to a nonexistent dependent resource, that should be reported as the reason the resource isn't fully functional in the resource's status field. + +* Typically each resource specifies a single desired state. However, for safety reasons, changes to that state may not be fully realized immediately. Since progressive transitions (e.g., rolling updates, traffic shifting, data migrations) are dependent on the underlying mechanisms being controlled, they must be implemented for each resource type, as needed. If multiple versions of some desired state need to coexist simultaneously (e.g., previous and next versions), they each need to be represented explicitly in the system. The convention is to generate a separate resource for each version, each with a content-derived generated name. Comprehensive version control is the responsibility of other systems (e.g., git). + +* The reported observed state is truth. Controllers are expected to reconcile observed and desired state and repair discrepancies, and Kubernetes avoids maintaining opaque, internal persistent state. Resource status must be reconstructable by observation. + +* The current status is represented using as many properties as necessary, rather than being modeled by state machines with explicit, enumerated states. Such state machines are not extensible (states can neither be added nor removed), and they encourage inference of implicit properties from the states rather than representing the properties explicitly. + +* Resources are not assumed to have single, exclusive "owners". They may be read and written by multiple parties and/or components, often, but not always, responsible for orthogonal concerns (not unlike [aspects](https://en.wikipedia.org/wiki/Aspect-oriented_programming)). Controllers cannot assume their decisions will not be overridden or rejected, must continually verify assumptions, and should gracefully adapt to external events and/or actors. Example: we allow users to kill pods under control of a controller; it just replaces them. + +* Object references are usually represented using predictable, client-provided names, to facilitate loose coupling, declarative references, disaster recovery, deletion and re-creation (e.g., to change immutable properties or to transition between incompatible APIs), and more. They are also represented as tuples (of name, namespace, API version, and resource type, or subsets of those) rather than URLs in order to facilitate inference of reference components from context. + +## API topology and conventions + +The [API](https://kubernetes.io/docs/reference/api-concepts/) URL structure is of the following form: + +

+ /prefix/group/version/namespaces/namespace/resourcetype/name +

+ +The API is divided into [**groups**](https://kubernetes.io/docs/concepts/overview/kubernetes-api/#api-groups) of related **resource types** that co-evolve together, in API [**version**s](https://kubernetes.io/docs/concepts/overview/kubernetes-api/#api-versioning). A client may interact with a resource in any supported version for that group and type. + +Instances of a given resource type are usually (NOTE: There are a small number of non-namespaced resources, also, which have global scope within a particular API service.) grouped by user-created [**namespaces**](https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/), which scope [**names**](https://kubernetes.io/docs/concepts/overview/working-with-objects/names/), references, and some policies. + +All resources contain common **metadata**, including the information contained within the URL path, to enable content-based path discovery. Because the resources are uniform and self-describing, they may be operated on generically and in bulk. The metadata also include user-provided key-value metadata in the form of [**labels**](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/) and [**annotations**](https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/). Labels are used for filtering and grouping by identifying attributes, and annotations are generally used by extensions for configuration and checkpointing. + +Most resources also contain the [desired state ](https://kubernetes.io/docs/concepts/overview/working-with-objects/kubernetes-objects/#object-spec-and-status)[(**spec**)](https://kubernetes.io/docs/concepts/overview/working-with-objects/kubernetes-objects/#object-spec-and-status)[ and observed state ](https://kubernetes.io/docs/concepts/overview/working-with-objects/kubernetes-objects/#object-spec-and-status)[(**status**)](https://kubernetes.io/docs/concepts/overview/working-with-objects/kubernetes-objects/#object-spec-and-status). Status is written using the /status subresource (appended to the standard resource path (NOTE: Note that subresources don’t follow the collection-name/collection-item convention. They are singletons.)), using the same API schema, in order to enable distinct authorization policies for users and controllers. + +A few other subresources (e.g., `/scale`), with their own API types, similarly enable distinct authorization policies for controllers, and also polymorphism, since the same subresource type may be implemented for multiple parent resource types. Where distinct authorization policies are not required, polymorphism may be achieved simply by convention, using patch, akin to duck typing. + +Supported data formats include YAML, JSON, and protocol buffers. + +Example resource: + +```yaml +apiVersion: v1 +kind: Pod +metadata: + namespace: default + name: explorer + labels: + category: demo + annotations: + commit: 483ac937f496b2f36a8ff34c3b3ba84f70ac5782 +spec: + containers: + - name: explorer + image: gcr.io/google_containers/explorer:1.1.3 + args: ["-port=8080"] + ports: + - containerPort: 8080 + protocol: TCP +status: +``` + +API groups may be exposed as a unified API surface while being served by distinct [servers](https://kubernetes.io/docs/tasks/access-kubernetes-api/setup-extension-api-server/) using [**aggregation**](https://kubernetes.io/docs/concepts/api-extension/apiserver-aggregation/), which is particularly useful for APIs with special storage needs. However, Kubernetes also supports [**custom resources**](https://kubernetes.io/docs/concepts/api-extension/custom-resources/) (CRDs), which enables users to define new types that fit the standard API conventions without needing to build and run another server. CRDs can be used to make systems declaratively and dynamically configurable in a Kubernetes-compatible manner, without needing another storage system. + +Each API server supports a custom [discovery API](https://github.com/kubernetes/client-go/blob/master/discovery/discovery_client.go) to enable clients to discover available API groups, versions, and types, and also [OpenAPI](https://kubernetes.io/blog/2016/12/kubernetes-supports-openapi/), which can be used to extract documentation and validation information about the resource types. + +See the [Kubernetes API conventions](https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md ) for more details. + +## Resource semantics and lifecycle + +Each API resource undergoes [a common sequence of behaviors](https://kubernetes.io/docs/admin/accessing-the-api/) upon each operation. For a mutation, these behaviors include: + +1. [Authentication](https://kubernetes.io/docs/admin/authentication/) +2. [Authorization](https://kubernetes.io/docs/admin/authorization/): [Built-in](https://kubernetes.io/docs/admin/authorization/rbac/) and/or [administrator-defined](https://kubernetes.io/docs/admin/authorization/webhook/) identity-based policies +3. [Defaulting](https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md#defaulting): API-version-specific default values are made explicit and persisted +4. Conversion: The apiserver converts between the client-requested [API version](https://kubernetes.io/docs/concepts/overview/kubernetes-api/#API-versioning) and the version it uses to store each resource type in etcd +5. [Admission control](https://kubernetes.io/docs/admin/admission-controllers/): [Built-in](https://kubernetes.io/docs/admin/admission-controllers/) and/or [administrator-defined](https://kubernetes.io/docs/admin/extensible-admission-controllers/) resource-type-specific policies +6. [Validation](https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md#validation): Resource field values are validated. Other than the presence of required fields, the API resource schema is not currently validated, but optional validation may be added in the future +7. Idempotence: Resources are accessed via immutable client-provided, declarative-friendly names +8. [Optimistic concurrency](https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md#concurrency-control-and-consistency): Writes may specify a precondition that the **resourceVersion** last reported for a resource has not changed +9. [Audit logging](https://kubernetes.io/docs/tasks/debug-application-cluster/audit/): Records the sequence of changes to each resource by all actors + +Additional behaviors are supported upon deletion: + +* Graceful termination: Some resources support delayed deletion, which is indicated by **deletionTimestamp** and **deletionGracePeriodSeconds** being set upon deletion + +* Finalization: A **finalizer** is block on deletion placed by an external controller, and needs to be removed before the resource deletion can complete + +* [Garbage collection](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/garbage-collection.md): A resource may specify **ownerReferences**, in which case the resource will be deleted once all of the referenced resources have been deleted + +And get: + +* List: All resources of a particular type within a particular namespace may be requested; [response chunking](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/api-chunking.md) is supported + +* [Label selection](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#list-and-watch-filtering): Lists may be filtered by their label keys and values + +* Watch: A client may subscribe to changes to listed resources using the resourceVersion returned with the list results + +## Declarative configuration + +Kubernetes API resource specifications are designed for humans to directly author and read as declarative configuration data, as well as to enable composable configuration tools and automated systems to manipulate them programmatically. We chose this simple approach of using literal API resource specifications for configuration, rather than other representations, because it was natural, given that we designed the API to support CRUD on declarative primitives. The API schema must already well defined, documented, and supported. With this approach, there’s no other representation to keep up to date with new resources and versions, or to require users to learn. [Declarative configuration](https://goo.gl/T66ZcD) is only one client use case; there are also CLIs (e.g., kubectl), UIs, deployment pipelines, etc. The user will need to interact with the system in terms of the API in these other scenarios, and knowledge of the API transfers to other clients and tools. Additionally, configuration, macro/substitution, and templating languages are generally more difficult to manipulate programmatically than pure data, and involve complexity/expressiveness tradeoffs that prevent one solution being ideal for all use cases. Such languages/tools could be layered over the native API schemas, if desired, but they should not assume exclusive control over all API fields, because doing so obstructs automation and creates undesirable coupling with the configuration ecosystem. + +The Kubernetes Resource Model encourages separation of concerns by supporting multiple distinct configuration sources and preserving declarative intent while allowing automatically set attributes. Properties not explicitly declaratively managed by the user are free to be changed by other clients, enabling the desired state to be cooperatively determined by both users and systems. This is achieved by an operation, called [**Apply**](https://docs.google.com/document/d/1q1UGAIfmOkLSxKhVg7mKknplq3OTDWAIQGWMJandHzg/edit#heading=h.xgjl2srtytjt) ("make it so"), that performs a 3-way merge of the previous configuration, the new configuration, and the live state. A 2-way merge operation, called [strategic merge patch](https://github.com/kubernetes/community/blob/master/contributors/devel/strategic-merge-patch.md), enables patches to be expressed using the same schemas as the resources themselves. Such patches can be used to perform automated updates without custom mutation operations, common updates (e.g., container image updates), combinations of configurations of orthogonal concerns, and configuration customization, such as for overriding properties of variants. diff --git a/contributors/design-proposals/auth/bound-service-account-tokens.md b/contributors/design-proposals/auth/bound-service-account-tokens.md new file mode 100644 index 000000000..c9c6064d5 --- /dev/null +++ b/contributors/design-proposals/auth/bound-service-account-tokens.md @@ -0,0 +1,239 @@ +# Bound Service Account Tokens + +Author: @mikedanese + +# Objective + +This document describes an API that would allow workloads running on Kubernetes +to request JSON Web Tokens that are audience, time and eventually key bound. + +# Background + +Kubernetes already provisions JWTs to workloads. This functionality is on by +default and thus widely deployed. The current workload JWT system has serious +issues: + +1. Security: JWTs are not audience bound. Any recipient of a JWT can masquerade + as the presenter to anyone else. +1. Security: The current model of storing the service account token in a Secret + and delivering it to nodes results in a broad attack surface for the + Kubernetes control plane when powerful components are run - giving a service + account a permission means that any component that can see that service + account's secrets is at least as powerful as the component. +1. Security: JWTs are not time bound. A JWT compromised via 1 or 2, is valid + for as long as the service account exists. This may be mitigated with + service account signing key rotation but is not supported by client-go and + not automated by the control plane and thus is not widely deployed. +1. Scalability: JWTs require a Kubernetes secret per service account. + +# Proposal + +Infrastructure to support on demand token requests will be implemented in the +core apiserver. Once this API exists, a client of the apiserver will request an +attenuated token for its own use. The API will enforce required attenuations, +e.g. audience and time binding. + +## Token attenuations + +### Audience binding + +Tokens issued from this API will be audience bound. Audience of requested tokens +will be bound by the `aud` claim. The `aud` claim is an array of strings +(usually URLs) that correspond to the intended audience of the token. A +recipient of a token is responsible for verifying that it identifies as one of +the values in the audience claim, and should otherwise reject the token. The +TokenReview API will support this validation. + +### Time binding + +Tokens issued from this API will be time bound. Time validity of these tokens +will be claimed in the following fields: + +* `exp`: expiration time +* `nbf`: not before +* `iat`: issued at + +A recipient of a token should verify that the token is valid at the time that +the token is presented, and should otherwise reject the token. The TokenReview +API will support this validation. + +Cluster administrators will be able to configure the maximum validity duration +for expiring tokens. During the migration off of the old service account tokens, +clients of this API may request tokens that are valid for many years. These +tokens will be drop in replacements for the current service account tokens. + +### Object binding + +Tokens issued from this API may be bound to a Kubernetes object in the same +namespace as the service account. The name, group, version, kind and uid of the +object will be embedded as claims in the issued token. A token bound to an +object will only be valid for as long as that object exists. + +Only a subset of object kinds will support object binding. Initially the only +kinds that will be supported are: + +* v1/Pod +* v1/Secret + +The TokenRequest API will validate this binding. + +## API Changes + +### Add `tokenrequests.authentication.k8s.io` + +We will add an imperative API (a la TokenReview) to the +`authentication.k8s.io` API group: + +```golang +type TokenRequest struct { + Spec TokenRequestSpec + Status TokenRequestStatus +} + +type TokenRequestSpec struct { + // Audiences are the intendend audiences of the token. A token issued + // for multiple audiences may be used to authenticate against any of + // the audiences listed. This implies a high degree of trust between + // the target audiences. + Audiences []string + + // ValidityDuration is the requested duration of validity of the request. The + // token issuer may return a token with a different validity duration so a + // client needs to check the 'expiration' field in a response. + ValidityDuration metav1.Duration + + // BoundObjectRef is a reference to an object that the token will be bound to. + // The token will only be valid for as long as the bound object exists. + BoundObjectRef *BoundObjectReference +} + +type BoundObjectReference struct { + // Kind of the referent. Valid kinds are 'Pod' and 'Secret'. + Kind string + // API version of the referent. + APIVersion string + + // Name of the referent. + Name string + // UID of the referent. + UID types.UID +} + +type TokenRequestStatus struct { + // Token is the token data + Token string + + // Expiration is the time of expiration of the returned token. Empty means the + // token does not expire. + Expiration metav1.Time +} + +``` + +This API will be exposed as a subresource under a serviceaccount object. A +requestor for a token for a specific service account will `POST` a +`TokenRequest` to the `/token` subresource of that serviceaccount object. + +### Modify `tokenreviews.authentication.k8s.io` + +The TokenReview API will be extended to support passing an additional audience +field which the service account authenticator will validate. + +```golang +type TokenReviewSpec struct { + // Token is the opaque bearer token. + Token string + // Audiences is the identifier that the client identifies as. + Audiences []string +} +``` + +### Example Flow + +``` +> POST /apis/v1/namespaces/default/serviceaccounts/default/token +> { +> "kind": "TokenRequest", +> "apiVersion": "authentication.k8s.io/v1", +> "spec": { +> "audience": [ +> "https://kubernetes.default.svc" +> ], +> "validityDuration": "99999h", +> "boundObjectRef": { +> "kind": "Pod", +> "apiVersion": "v1", +> "name": "pod-foo-346acf" +> } +> } +> } +{ + "kind": "TokenRequest", + "apiVersion": "authentication.k8s.io/v1", + "spec": { + "audience": [ + "https://kubernetes.default.svc" + ], + "validityDuration": "99999h", + "boundObjectRef": { + "kind": "Pod", + "apiVersion": "v1", + "name": "pod-foo-346acf" + } + }, + "status": { + "token": + "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJz[payload omitted].EkN-[signature omitted]", + "expiration": "Jan 24 16:36:00 PST 3018" + } +} +``` + +The token payload will be: + +``` +{ + "iss": "https://example.com/some/path", + "sub": "system:serviceaccount:default:default, + "aud": [ + "https://kubernetes.default.svc" + ], + "exp": 24412841114, + "iat": 1516841043, + "nbf": 1516841043, + "kubernetes.io": { + "serviceAccountUID": "c0c98eab-0168-11e8-92e5-42010af00002", + "boundObjectRef": { + "kind": "Pod", + "apiVersion": "v1", + "uid": "a4bb8aa4-0168-11e8-92e5-42010af00002", + "name": "pod-foo-346acf" + } + } +} +``` + +## Service Account Authenticator Modification + +The service account token authenticator will be extended to support validation +of time and audience binding claims. + +## ACLs for TokenRequest + +The NodeAuthorizer will allow the kubelet to use its credentials to request a +service account token on behalf of pods running on that node. The +NodeRestriction admission controller will require that these tokens are pod +bound. + +## Footnotes + +* New apiserver flags: + * --service-account-issuer: Identifier of the issuer. + * --service-account-signing-key: Path to issuer private key used for signing. + * --service-account-api-audience: Identifier of the API. Used to validate + tokens authenticating to the Kubernetes API. +* The Kubernetes apiserver will identify itself as `kubernetes.default.svc` + which is the DNS name of the Kubernetes apiserver. When no audience is + requested, the audience is defaulted to an array + containing only this identifier. + diff --git a/contributors/design-proposals/auth/no-new-privs.md b/contributors/design-proposals/auth/no-new-privs.md index b467c35d4..5c96c9d15 100644 --- a/contributors/design-proposals/auth/no-new-privs.md +++ b/contributors/design-proposals/auth/no-new-privs.md @@ -49,7 +49,7 @@ while creating containers, for example `docker run --security-opt=no_new_privs busybox`. Docker provides via their Go api an object named `ContainerCreateConfig` to -configure container creation parameters. In this object, there is a string +configure container creation parameters. In this object, there is a string array `HostConfig.SecurityOpt` to specify the security options. Client can utilize this field to specify the arguments for security options while creating new containers. diff --git a/contributors/design-proposals/auth/proc-mount-type.md b/contributors/design-proposals/auth/proc-mount-type.md new file mode 100644 index 000000000..073fc23e0 --- /dev/null +++ b/contributors/design-proposals/auth/proc-mount-type.md @@ -0,0 +1,93 @@ +# ProcMount/ProcMountType Option + +## Background + +Currently the way docker and most other container runtimes work is by masking +and setting as read-only certain paths in `/proc`. This is to prevent data +from being exposed into a container that should not be. However, there are +certain use-cases where it is necessary to turn this off. + +## Motivation + +For end-users who would like to run unprivileged containers using user namespaces +_nested inside_ CRI containers, we need an option to have a `ProcMount`. That is, +we need an option to designate explicitly turn off masking and setting +read-only of paths so that we can +mount `/proc` in the nested container as an unprivileged user. + +Please see the following filed issues for more information: +- [opencontainers/runc#1658](https://github.com/opencontainers/runc/issues/1658#issuecomment-373122073) +- [moby/moby#36597](https://github.com/moby/moby/issues/36597) +- [moby/moby#36644](https://github.com/moby/moby/pull/36644) + +Please also see the [use case for building images securely in kubernetes](https://github.com/jessfraz/blog/blob/master/content/post/building-container-images-securely-on-kubernetes.md). + +Unmasking the paths in `/proc` option really only makes sense for when a user +is nesting +unprivileged containers with user namespaces as it will allow more information +than is necessary to the program running in the container spawned by +kubernetes. + +The main use case for this option is to run +[genuinetools/img](https://github.com/genuinetools/img) inside a kubernetes +container. That program then launches sub-containers that take advantage of +user namespaces and re-mask /proc and set /proc as read-only. So therefore +there is no concern with having an unmasked proc open in the top level container. + +It should be noted that this is different that the host /proc. It is still +a newly mounted /proc just the container runtimes will not mask the paths. + +Since the only use case for this option is to run unprivileged nested +containers, +this option should only be allowed or used if the user in the container is not `root`. +This can be easily enforced with `MustRunAs`. +Since the user inside is still unprivileged, +doing things to `/proc` would be off limits regardless, since linux user +support already prevents this. + +## Existing SecurityContext objects + +Kubernetes defines `SecurityContext` for `Container` and `PodSecurityContext` +for `PodSpec`. `SecurityContext` objects define the related security options +for Kubernetes containers, e.g. selinux options. + +To support "ProcMount" options in Kubernetes, it is proposed to make +the following changes: + +## Changes of SecurityContext objects + +Add a new `string` type field named `ProcMountType` will hold the viable +options for `procMount` to the `SecurityContext` +definition. + +By default,`procMount` is `default`, aka the same behavior as today and the +paths are masked. + +This will look like the following in the spec: + +```go +type ProcMountType string + +const ( + // DefaultProcMount uses the container runtime default ProcType. Most + // container runtimes mask certain paths in /proc to avoid accidental security + // exposure of special devices or information. + DefaultProcMount ProcMountType = "Default" + + // UnmaskedProcMount bypasses the default masking behavior of the container + // runtime and ensures the newly created /proc the container stays in tact with + // no modifications. + UnmaskedProcMount ProcMountType = "Unmasked" +) + +procMount *ProcMountType +``` + +This requires changes to the CRI runtime integrations so that +kubelet will add the specific `unmasked` or `whatever_it_is_named` option. + +## Pod Security Policy changes + +A new `[]ProcMountType{}` field named `allowedProcMounts` will be added to the Pod +Security Policy as well to gate the allowed ProcMountTypes a user is allowed to +set. This field will default to `[]ProcMountType{ DefaultProcMount }`. diff --git a/contributors/design-proposals/auth/security_context.md b/contributors/design-proposals/auth/security_context.md index d7a3e458f..360f50465 100644 --- a/contributors/design-proposals/auth/security_context.md +++ b/contributors/design-proposals/auth/security_context.md @@ -42,7 +42,7 @@ containers. In order to support external integration with shared storage, processes running in a Kubernetes cluster should be able to be uniquely identified by their Unix -UID, such that a chain of ownership can be established. Processes in pods will +UID, such that a chain of ownership can be established. Processes in pods will need to have consistent UID/GID/SELinux category labels in order to access shared disks. diff --git a/contributors/design-proposals/autoscaling/hpa-v2.md b/contributors/design-proposals/autoscaling/hpa-v2.md index fba4364c9..e01fa2996 100644 --- a/contributors/design-proposals/autoscaling/hpa-v2.md +++ b/contributors/design-proposals/autoscaling/hpa-v2.md @@ -211,6 +211,8 @@ the ReplicationController being autoscaled. ```yaml kind: HorizontalPodAutoscaler apiVersion: autoscaling/v2alpha1 +metadata: + name: WebFrontend spec: scaleTargetRef: kind: ReplicationController diff --git a/contributors/design-proposals/autoscaling/vertical-pod-autoscaler.md b/contributors/design-proposals/autoscaling/vertical-pod-autoscaler.md index 13d235f83..cbeda24d8 100644 --- a/contributors/design-proposals/autoscaling/vertical-pod-autoscaler.md +++ b/contributors/design-proposals/autoscaling/vertical-pod-autoscaler.md @@ -81,8 +81,7 @@ on historical utilization. It is designed to only kick in on Pod creation. VPA is intended to supersede this feature. #### In-place updates #### -In-place Pod updates ([#5774] -(https://github.com/kubernetes/kubernetes/issues/5774)) is a planned feature to +In-place Pod updates ([#5774](https://github.com/kubernetes/kubernetes/issues/5774)) is a planned feature to allow changing resources (request/limit) of existing containers without killing them, assuming sufficient free resources available on the node. Vertical Pod Autoscaler will greatly benefit from this ability, however it is not considered a blocker for the MVP. @@ -190,7 +189,7 @@ Design ### API ### We introduce a new type of API object `VerticalPodAutoscaler`, which -consists of the Target, that is a [label selector](https://kubernetes.io/docs/api-reference/v1.5/#labelselector-unversioned) +consists of the Target, that is a [label selector](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors) for matching Pods and two policy sections: the update policy and the resources policy. Additionally it holds the most recent recommendation computed by VPA. @@ -558,7 +557,7 @@ VPA controls the request (memory and CPU) of containers. In MVP it always sets the limit to infinity. It is not yet clear whether there is a use-case for VPA setting the limit. -The request is calculated based on analysis of the current and revious runs of +The request is calculated based on analysis of the current and previous runs of the container and other containers with similar properties (name, image, command, args). The recommendation model (MVP) assumes that the memory and CPU consumption are diff --git a/contributors/design-proposals/cli/preserve-order-in-strategic-merge-patch.md b/contributors/design-proposals/cli/preserve-order-in-strategic-merge-patch.md index 5e9644a6b..7f6c67d71 100644 --- a/contributors/design-proposals/cli/preserve-order-in-strategic-merge-patch.md +++ b/contributors/design-proposals/cli/preserve-order-in-strategic-merge-patch.md @@ -7,7 +7,7 @@ Author: @mengqiy Background of the Strategic Merge Patch is covered [here](../devel/strategic-merge-patch.md). The Kubernetes API may apply semantic meaning to the ordering of items within a list, -however the strategic merge patch does not keeping the ordering of elements. +however the strategic merge patch does not keep the ordering of elements. Ordering has semantic meaning for Environment variables, as later environment variables may reference earlier environment variables, but not the other way around. @@ -30,7 +30,7 @@ Add to the current patch, a directive ($setElementOrder) containing a list of el either the patch merge key, or for primitives the value. When applying the patch, the server ensures that the relative ordering of elements matches the directive. -The server will reject the patch if it doesn't satisfy the following 2 requirement. +The server will reject the patch if it doesn't satisfy the following 2 requirements. - the relative order of any two items in the `$setElementOrder` list matches that in the patch list if they present. - the items in the patch list must be a subset or the same as the `$setElementOrder` list if the directive presents. @@ -45,7 +45,7 @@ The relative order of two items are determined by the following order: If the relative order of the live config in the server is different from the order of the parallel list, the user's patch will always override the order in the server. -Here is an simple example of the patch format: +Here is a simple example of the patch format: Suppose we have a type called list. The patch will look like below. The order from the parallel list ($setElementOrder/list) will be respected. @@ -60,7 +60,7 @@ list: - C ``` -All the items in the server's live list but not in the parallel list will be come before the parallel list. +All the items in the server's live list but not in the parallel list will come before the parallel list. The relative order between these appended items are kept. The patched list will look like: @@ -114,7 +114,7 @@ list: ### `$setElementOrder` may contain elements not present in the patch list The $setElementOrder value may contain elements that are not present in the patch -but present in the list to be merge to reorder the elements as part of the merge. +but present in the list to be merged to reorder the elements as part of the merge. Example where A & B have not changed: @@ -481,15 +481,15 @@ we send a whole list from user's config. It is NOT backward compatible in terms of list of primitives. When patching a list of maps: -- An old client sends a old patch to a new server, the server just merges the change and no reordering. +- An old client sends an old patch to a new server, the server just merges the change and no reordering. The server behaves the same as before. -- An new client sends a new patch to an old server, the server doesn't understand the new directive. +- A new client sends a new patch to an old server, the server doesn't understand the new directive. So it just simply does the merge. When patching a list of primitives: -- An old client sends a old patch to a new server, the server will reorder the patch list which is sublist of user's. +- An old client sends an old patch to a new server, the server will reorder the patch list which is sublist of user's. The server has the WRONG behavior. -- An new client sends a new patch to an old server, the server will deduplicate after merging. +- A new client sends a new patch to an old server, the server will deduplicate after merging. The server behaves the same as before. ## Example diff --git a/contributors/design-proposals/cluster-lifecycle/local-cluster-ux.md b/contributors/design-proposals/cluster-lifecycle/local-cluster-ux.md index 8dac84bd9..2933bce91 100644 --- a/contributors/design-proposals/cluster-lifecycle/local-cluster-ux.md +++ b/contributors/design-proposals/cluster-lifecycle/local-cluster-ux.md @@ -5,7 +5,7 @@ The current local cluster experience is sub-par and often not functional. There are several options to setup a local cluster (docker, vagrant, linux processes, etc) and we do not test any of them continuously. Here are some highlighted issues: - Docker based solution breaks with docker upgrades, does not support DNS, and many kubelet features are not functional yet inside a container. -- Vagrant based solution are too heavy and have mostly failed on OS X. +- Vagrant based solution are too heavy and have mostly failed on macOS. - Local linux cluster is poorly documented and is undiscoverable. From an end user perspective, they want to run a kubernetes cluster. They care less about *how* a cluster is setup locally and more about what they can do with a functional cluster. @@ -15,7 +15,7 @@ From an end user perspective, they want to run a kubernetes cluster. They care l From a high level the goal is to make it easy for a new user to run a Kubernetes cluster and play with curated examples that require least amount of knowledge about Kubernetes. These examples will only use kubectl and only a subset of Kubernetes features that are available will be exposed. -- Works across multiple OSes - OS X, Linux and Windows primarily. +- Works across multiple OSes - macOS, Linux and Windows primarily. - Single command setup and teardown UX. - Unified UX across OSes - Minimal dependencies on third party software. @@ -68,7 +68,7 @@ This is only a part of the overall local cluster solution. The kube-up.sh script included in Kubernetes release supports a few Vagrant based local cluster deployments. kube-up.sh is not user friendly. -It typically takes a long time for the cluster to be set up using vagrant and often times is unsuccessful on OS X. +It typically takes a long time for the cluster to be set up using vagrant and often times is unsuccessful on macOS. The [Core OS single machine guide](https://coreos.com/kubernetes/docs/latest/kubernetes-on-vagrant-single.html) uses Vagrant as well and it just works. Since we are targeting a single command install/teardown experience, vagrant needs to be an implementation detail and not be exposed to our users. @@ -90,8 +90,8 @@ For running and managing the kubernetes components themselves, we can re-use [S Localkube is a self-contained go binary that includes all the master components including DNS and runs them using multiple go threads. Each Kubernetes release will include a localkube binary that has been tested exhaustively. -To support Windows and OS X, minikube will use [libmachine](https://github.com/docker/machine/tree/master/libmachine) internally to create and destroy virtual machines. -Minikube will be shipped with an hypervisor (virtualbox) in the case of OS X. +To support Windows and macOS, minikube will use [libmachine](https://github.com/docker/machine/tree/master/libmachine) internally to create and destroy virtual machines. +Minikube will be shipped with an hypervisor (virtualbox) in the case of macOS. Minikube will include a base image that will be well tested. In the case of Linux, since the cluster can be run locally, we ideally want to avoid setting up a VM. @@ -105,7 +105,7 @@ Alternatives to docker for running the localkube core includes using [rkt](https To summarize the pipeline is as follows: -##### OS X / Windows +##### macOS / Windows minikube -> libmachine -> virtualbox/hyper V -> linux VM -> localkube @@ -126,7 +126,7 @@ minikube -> docker -> localkube ##### Cons - Not designed to be wrapped, may be unstable -- Might make configuring networking difficult on OS X and Windows +- Might make configuring networking difficult on macOS and Windows - Versioning and updates will be challenging. We can mitigate some of this with testing at HEAD, but we'll - inevitably hit situations where it's infeasible to work with multiple versions of docker. - There are lots of different ways to install docker, networking might be challenging if we try to support many paths. diff --git a/contributors/design-proposals/instrumentation/external-metrics-api.md b/contributors/design-proposals/instrumentation/external-metrics-api.md new file mode 100644 index 000000000..3467f6aa9 --- /dev/null +++ b/contributors/design-proposals/instrumentation/external-metrics-api.md @@ -0,0 +1,87 @@ +# **External Metrics API** + +# Overview + +[HPA v2 API extension proposal](https://github.com/kubernetes/community/blob/hpa_external/contributors/design-proposals/autoscaling/hpa-external-metrics.md) introduces new External metric type for autoscaling based on metrics coming from outside of Kubernetes cluster. This document proposes a new External Metrics API that will be used by HPA controller to get those metrics. + +This API performs a similar role to and is based on existing [Custom Metrics API](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/instrumentation/custom-metrics-api.md). Unless explicitly specified otherwise all sections related to semantics, implementation and design decisions in [Custom Metrics API design](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/instrumentation/custom-metrics-api.md) apply to External Metrics API as well. It is generally expected that a Custom Metrics Adapter will provide both Custom Metrics API and External Metrics API, however, this is not a requirement and both APIs can be implemented and used separately. + + +# API + +The API will consist of a single path: + + +``` +/apis/external.metrics.k8s.io/v1beta1/namespaces//?labelSelector= +``` + +Similar to endpoints in Custom Metrics API it would only support GET requests. + +The query would return the `ExternalMetricValueList` type described below: + +```go +// a list of values for a given metric for some set labels +type ExternalMetricValueList struct { +       metav1.TypeMeta `json:",inline"` +       metav1.ListMeta `json:"metadata,omitempty"` + +    // value of the metric matching a given set of labels +       Items []ExternalMetricValue `json:"items"` +} + +// a metric value for external metric +type ExternalMetricValue struct { +    metav1.TypeMeta`json:",inline"` + + // the name of the metric + MetricName string `json:"metricName"` + + // label set identifying the value within metric + MetricLabels map[string]string `json:"metricLabels"` + +    // indicates the time at which the metrics were produced +    Timestamp unversioned.Time `json:"timestamp"` + +    // indicates the window ([Timestamp-Window, Timestamp]) from +    // which these metrics were calculated, when returning rate +    // metrics calculated from cumulative metrics (or zero for +    // non-calculated instantaneous metrics). +    WindowSeconds *int64 `json:"window,omitempty"` + +    // the value of the metric +    Value resource.Quantity +} +``` + +# Semantics + +## Namespaces + +Kubernetes namespaces don't have a natural 1-1 mapping to metrics coming from outside of Kubernetes. It is up to adapter implementing the API to decide which metric is available in which namespace. In particular a single metric may be available through many different namespaces. + +## Metric Values + +A request for a given metric may return multiple values if MetricSelector matches multiple time series. Each value should include a complete set of labels, which is sufficient to uniquely identify a timeseries. + +A single value should always be returned if MetricSelector specifies a single value for every label defined for a given metric. + +## Metric names + +Custom Metrics API [doesn't allow using certain characters in metric names](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/instrumentation/custom-metrics-api.md#metric-names). The reason for that is a technical limitation in GO libraries. This list of forbidden characters includes slash (`/`). This is problematic as many systems use slashes in their metric naming convention. + +Rather than expect metric adapters to come up with their custom ways of handling that this document proposes introducing `\|` as a custom escape sequence for slash. HPA controller will automatically replace any slashes in MetricName field for External metric with this escape sequence. + +Otherwise the allowed metric names are the same as in Custom Metrics API. + +## Access Control + +Access can be controlled with per-metric granularity, same as in Custom Metrics API. The API has been designed to allow adapters to implement more granular access control if required. Possible future extension of API supporting label level access control is described in [ExternalMetricsPolicy](#externalmetricspolicy) section. + +# Future considerations + +## ExternalMetricsPolicy + +If a more granular access control turns out to be a common requirement an ExternalMetricPolicy object could be added to API. This object could be defined at cluster level, per namespace or per user and would consist of a list of rules. Each rule would consist of a mandatory regexp and either a label selector or a 'deny' statement. For each metric the rules would be applied top to bottom, with the first matching rule being used. A query that hit a deny rule or specified a selector that is not a subset of selector specified by policy would be rejected with 403 error. + +Additionally an admission controller could be used to check the policy when creating HPA object. diff --git a/contributors/design-proposals/instrumentation/metrics-server.md b/contributors/design-proposals/instrumentation/metrics-server.md index 9b7a8f0b8..163b2385b 100644 --- a/contributors/design-proposals/instrumentation/metrics-server.md +++ b/contributors/design-proposals/instrumentation/metrics-server.md @@ -78,7 +78,7 @@ horizontally, though it’s rather complicated and is out of the scope of this d Metrics server will be Kubernetes addon, create by kube-up script and managed by [addon-manager](https://git.k8s.io/kubernetes/cluster/addons/addon-manager). -Since there is a number of dependent components, it will be marked as a critical addon. +Since there are a number of dependent components, it will be marked as a critical addon. In the future when the priority/preemption feature is introduced we will migrate to use this proper mechanism for marking it as a high-priority, system component. diff --git a/contributors/design-proposals/multi-platform.md b/contributors/design-proposals/multi-platform.md index 279d14cdb..32258ab90 100644 --- a/contributors/design-proposals/multi-platform.md +++ b/contributors/design-proposals/multi-platform.md @@ -209,7 +209,7 @@ Go 1.5 introduced many changes. To name a few that are relevant to Kubernetes: - The garbage collector became more efficient (but also [confused our latency test](https://github.com/golang/go/issues/14396)). - `linux/arm64` and `linux/ppc64le` were added as new ports. - The `GO15VENDOREXPERIMENT` was started. We switched from `Godeps/_workspace` to the native `vendor/` in [this PR](https://github.com/kubernetes/kubernetes/pull/24242). - - It's not required to pre-build the whole standard library `std` when cross-compliling. [Details](#prebuilding-the-standard-library-std) + - It's not required to pre-build the whole standard library `std` when cross-compiling. [Details](#prebuilding-the-standard-library-std) - Builds are approximately twice as slow as earlier. That affects the CI. [Details](#releasing) - The native Go DNS resolver will suffice in the most situations. This makes static linking much easier. diff --git a/contributors/design-proposals/multicluster/federated-replicasets.md b/contributors/design-proposals/multicluster/federated-replicasets.md index 9ed57bc73..f6c5b1cbd 100644 --- a/contributors/design-proposals/multicluster/federated-replicasets.md +++ b/contributors/design-proposals/multicluster/federated-replicasets.md @@ -286,7 +286,7 @@ enumerated the key idea elements: + [E1] Master rejects LRS creation (for known or unknown reason). In this case another attempt to create a LRS should be attempted in 1m or so. This action can be tied with - [[I5]](#heading=h.ififs95k9rng). Until the the LRS is created + [[I5]](#heading=h.ififs95k9rng). Until the LRS is created the situation is the same as [E5]. If this happens multiple times all due replicas should be moved elsewhere and later moved back once the LRS is created. @@ -348,7 +348,7 @@ to that LRS along with their current status and status change timestamp. + [I6] If a cluster is removed from the federation then the situation is equal to multiple [E4]. It is assumed that if a connection with a cluster is lost completely then the cluster is removed from the - the cluster list (or marked accordingly) so + cluster list (or marked accordingly) so [[E6]](#heading=h.in6ove1c1s8f) and [[E7]](#heading=h.37bnbvwjxeda) don't need to be handled. @@ -383,7 +383,7 @@ To calculate the (re)scheduling moves for a given FRS: 1. For each cluster FRSC calculates the number of replicas that are placed (not necessary up and running) in the cluster and the number of replicas that failed to be scheduled. Cluster capacity is the difference between the -the placed and failed to be scheduled. +placed and failed to be scheduled. 2. Order all clusters by their weight and hash of the name so that every time we process the same replica-set we process the clusters in the same order. diff --git a/contributors/design-proposals/multicluster/multicluster-reserved-namespaces.md b/contributors/design-proposals/multicluster/multicluster-reserved-namespaces.md new file mode 100644 index 000000000..0f664cb2a --- /dev/null +++ b/contributors/design-proposals/multicluster/multicluster-reserved-namespaces.md @@ -0,0 +1,51 @@ +# Multicluster reserved namespaces + +@perotinus + +06/06/2018 + +## Background + +sig-multicluster has identified the need for a canonical set of namespaces that +can be used for supporting multicluster applications and use cases. Initially, +an [issue](https://github.com/kubernetes/cluster-registry/issues/221) was filed +in the cluster-registry repository describing the need for a namespace that +would be used for public, global cluster records. This topic was further +discussed at the +[SIG meeting on June 5, 2018](https://www.youtube.com/watch?v=j6tHK8_mWz8&t=3012) +and in a +[thread](https://groups.google.com/forum/#!topic/kubernetes-sig-multicluster/8u-li_ZJpDI) +on the SIG mailing list. + +## Reserved namespaces + +We determined that there is currently a strong case for two reserved namespaces +for multicluster use: + +- `kube-multicluster-public`: a global, public namespace for storing cluster + registry Cluster objects. If there are other custom resources that + correspond with the global, public Cluster objects, they can also be stored + here. For example, a custom resource that contains cloud-provider-specific + metadata about a cluster. Tools built against the cluster registry can + expect to find the canonical set of Cluster objects in this namespace[1]. + +- `kube-multicluster-system`: an administrator-accessible namespace that + contains components, such as multicluster controllers and their + dependencies, that are not meant to be seen by most users directly. + +The definition of these namespaces is not intended to be exhaustive: in the +future, there may be reason to define more multicluster namespaces, and +potentially conventions for namespaces that are replicated between clusters (for +example, to support a global cluster list that is replicated to all clusters +that are contained in the list). + +## Conventions for reserved namespaces + +By convention, resources in these namespaces are local to the clusters in which +they exist and will not be replicated to other clusters. In other words, these +namespaces are private to the clusters they are in, and multicluster operations +must not replicate them or their resources into other clusters. + +[1] Tools are by no means compelled to look in this namespace for clusters, and +can choose to reference Cluster objects from other namespaces as is suitable to +their design and environment. diff --git a/contributors/design-proposals/network/support_traffic_shaping_for_kubelet_cni.md b/contributors/design-proposals/network/support_traffic_shaping_for_kubelet_cni.md new file mode 100644 index 000000000..659bbf534 --- /dev/null +++ b/contributors/design-proposals/network/support_traffic_shaping_for_kubelet_cni.md @@ -0,0 +1,89 @@ +# Support traffic shaping for CNI network plugin + +Version: Alpha + +Authors: @m1093782566 + +## Motivation and background + +Currently the kubenet code supports applying basic traffic shaping during pod setup. This will happen if bandwidth-related annotations have been added to the pod's metadata, for example: + +```json +{ + "kind": "Pod", + "metadata": { + "name": "iperf-slow", + "annotations": { + "kubernetes.io/ingress-bandwidth": "10M", + "kubernetes.io/egress-bandwidth": "10M" + } + } +} +``` + +Our current implementation uses the `linux tc` to add an download(ingress) and upload(egress) rate limiter using 1 root `qdisc`, 2 `class `(one for ingress and one for egress) and 2 `filter`(one for ingress and one for egress attached to the ingress and egress classes respectively). + +Kubelet CNI code doesn't support it yet, though CNI has already added a [traffic sharping plugin](https://github.com/containernetworking/plugins/tree/master/plugins/meta/bandwidth). We can replicate the behavior we have today in kubenet for kubelet CNI network plugin if we feel this is an important feature. + +## Goal + +Support traffic shaping for CNI network plugin in Kubernetes. + +## Non-goal + +CNI plugins to implement this sort of traffic shaping guarantee. + +## Proposal + +If kubelet starts up with `network-plugin = cni` and user enabled traffic shaping via the network plugin configuration, it would then populate the `runtimeConfig` section of the config when calling the `bandwidth` plugin. + +Traffic shaping in Kubelet CNI network plugin can work with ptp and bridge network plugins. + +### Pod Setup + +When we create a pod with bandwidth configuration in its metadata, for example, + +```json +{ + "kind": "Pod", + "metadata": { + "name": "iperf-slow", + "annotations": { + "kubernetes.io/ingress-bandwidth": "10M", + "kubernetes.io/egress-bandwidth": "10M" + } + } +} +``` + +Kubelet would firstly parse the ingress and egress bandwidth values and transform them to Kbps because both `ingressRate` and `egressRate` in cni bandwidth plugin are in Kbps. A user would add something like this to their CNI config list if they want to enable traffic shaping via the plugin: + +```json +{ + "type": "bandwidth", + "capabilities": {"trafficShaping": true} +} +``` + +Kubelet would then populate the `runtimeConfig` section of the config when calling the `bandwidth` plugin: + +```json +{ + "type": "bandwidth", + "runtimeConfig": { + "trafficShaping": { + "ingressRate": "X", + "egressRate": "Y" + } + } +} +``` + +### Pod Teardown + +When we delete a pod, kubelet will build the runtime config for calling cni plugin `DelNetwork/DelNetworkList` API, which will remove this pod's bandwidth configuration. + +## Next step + +* Support ingress and egress burst bandwidth in Pod. +* Graduate annotations to Pod Spec. diff --git a/contributors/design-proposals/node/accelerator-monitoring.md b/contributors/design-proposals/node/accelerator-monitoring.md index 984ce6563..5c247c196 100644 --- a/contributors/design-proposals/node/accelerator-monitoring.md +++ b/contributors/design-proposals/node/accelerator-monitoring.md @@ -53,7 +53,7 @@ type AcceleratorStats struct { // ID of the accelerator. device minor number? Or UUID? ID string `json:"id"` - // Total acclerator memory. + // Total accelerator memory. // unit: bytes MemoryTotal uint64 `json:"memory_total"` @@ -75,7 +75,7 @@ From the summary API, they will flow to heapster and stackdriver. ## Caveats - As mentioned before, this would add a requirement that cAdvisor and kubelet are dynamically linked. -- We would need to make sure that kubelet is able to access the nvml libraries. Some existing container based nvidia driver installers install drivers in a special directory. We would need to make sure that that directory is in kubelet’s `LD_LIBRARY_PATH`. +- We would need to make sure that kubelet is able to access the nvml libraries. Some existing container based nvidia driver installers install drivers in a special directory. We would need to make sure that directory is in kubelet’s `LD_LIBRARY_PATH`. ## Testing Plan - Adding unit tests and e2e tests to cAdvisor for this code. diff --git a/contributors/design-proposals/node/cri-windows.md b/contributors/design-proposals/node/cri-windows.md index e1a7f1fa6..0192f6c48 100644 --- a/contributors/design-proposals/node/cri-windows.md +++ b/contributors/design-proposals/node/cri-windows.md @@ -20,7 +20,7 @@ On the Windows platform, processes may be assigned to a job object, which can ha [#547](https://github.com/kubernetes/features/issues/547) ## Motivation -The goal is to start filling the gap of platform support in CRI, specifically for Windows platform. For example, currrently in dockershim Windows containers are scheduled using the default resource constraints and does not respect the resource requests and limits specified in POD. With this proposal, Windows containers will be able to leverage POD spec and CRI to allocate compute resource and respect restriction. +The goal is to start filling the gap of platform support in CRI, specifically for Windows platform. For example, currently in dockershim Windows containers are scheduled using the default resource constraints and does not respect the resource requests and limits specified in POD. With this proposal, Windows containers will be able to leverage POD spec and CRI to allocate compute resource and respect restriction. ## Proposed design @@ -85,7 +85,7 @@ The implementation will mainly be in two parts: In both parts, we need to implement: * Fork code for Windows from Linux. -* Convert from Resources.Requests and Resources.Limits to Windows configuration in CRI, and convert from Windows configration in CRI to container configuration. +* Convert from Resources.Requests and Resources.Limits to Windows configuration in CRI, and convert from Windows configuration in CRI to container configuration. To implement resource controls for Windows containers, refer to [this MSDN documentation](https://docs.microsoft.com/en-us/virtualization/windowscontainers/manage-containers/resource-controls) and [Docker's conversion to OCI spec](https://github.com/moby/moby/blob/master/daemon/oci_windows.go). diff --git a/contributors/design-proposals/node/kubelet-cri-logging.md b/contributors/design-proposals/node/kubelet-cri-logging.md index a19ff3f5b..3ece02a39 100644 --- a/contributors/design-proposals/node/kubelet-cri-logging.md +++ b/contributors/design-proposals/node/kubelet-cri-logging.md @@ -133,7 +133,7 @@ PodSandboxConfig.LogDirectory: /var/log/pods// ContainerConfig.LogPath: _.log ``` -Because kubelet determines where the logs are stores and can access them +Because kubelet determines where the logs are stored and can access them directly, this meets requirement (1). As for requirement (2), the log collector can easily extract basic pod metadata (e.g., pod UID, container name) from the paths, and watch the directly for any changes. In the future, we can @@ -142,14 +142,25 @@ extend this by maintaining a metadata file in the pod directory. **Log format** The runtime should decorate each log entry with a RFC 3339Nano timestamp -prefix, the stream type (i.e., "stdout" or "stderr"), and ends with a newline. +prefix, the stream type (i.e., "stdout" or "stderr"), the tags of the log +entry, the log content that ends with a newline. +The `tags` fields can support multiple tags, delimited by `:`. Currently, only +one tag is defined in CRI to support multi-line log entries: partial or full. +Partial (`P`) is used when a log entry is split into multiple lines by the +runtime, and the entry has not ended yet. Full (`F`) indicates that the log +entry is completed -- it is either a single-line entry, or this is the last +line of the multiple-line entry. + +For example, ``` -2016-10-06T00:17:09.669794202Z stdout The content of the log entry 1 -2016-10-06T00:17:10.113242941Z stderr The content of the log entry 2 +2016-10-06T00:17:09.669794202Z stdout F The content of the log entry 1 +2016-10-06T00:17:09.669794202Z stdout P First line of log entry 2 +2016-10-06T00:17:09.669794202Z stdout P Second line of the log entry 2 +2016-10-06T00:17:10.113242941Z stderr F Last line of the log entry 2 ``` -With the knowledge, kubelet can parses the logs and serve them for `kubectl +With the knowledge, kubelet can parse the logs and serve them for `kubectl logs` requests. This meets requirement (3). Note that the format is defined deliberately simple to provide only information necessary to serve the requests. We do not intend for kubelet to host various logging plugins. It is also worth @@ -165,7 +176,7 @@ to rotate the logs periodically, similar to today's implementation. We do not rule out the possibility of letting kubelet or a per-node daemon (`DaemonSet`) to take up the responsibility, or even declare rotation policy in the kubernetes API as part of the `PodSpec`, but it is beyond the scope of -the this proposal. +this proposal. **What about non-supported log formats?** diff --git a/contributors/design-proposals/node/node-allocatable.md b/contributors/design-proposals/node/node-allocatable.md index 4fe22c374..07f52b74b 100644 --- a/contributors/design-proposals/node/node-allocatable.md +++ b/contributors/design-proposals/node/node-allocatable.md @@ -249,7 +249,7 @@ Users are expected to specify `KubeReserved` and `SystemReserved` based on their Resource requirements for Kubelet and the runtime is typically proportional to the number of pods running on a node. Once a user identified the maximum pod density for each of their nodes, they will be able to compute `KubeReserved` using [this performance dashboard](http://node-perf-dash.k8s.io/#/builds). -[This blog post](http://blog.kubernetes.io/2016/11/visualize-kubelet-performance-with-node-dashboard.html) explains how the dashboard has to be interpreted. +[This blog post](https://kubernetes.io/blog/2016/11/visualize-kubelet-performance-with-node-dashboard/) explains how the dashboard has to be interpreted. Note that this dashboard provides usage metrics for docker runtime only as of now. Support for evictions based on Allocatable will be introduced in this phase. diff --git a/contributors/design-proposals/node/node-usernamespace-remapping.md b/contributors/design-proposals/node/node-usernamespace-remapping.md new file mode 100644 index 000000000..37f228364 --- /dev/null +++ b/contributors/design-proposals/node/node-usernamespace-remapping.md @@ -0,0 +1,209 @@ +# Support Node-Level User Namespaces Remapping + +- [Summary](#summary) +- [Motivation](#motivation) +- [Goals](#goals) +- [Non-Goals](#non-goals) +- [Use Stories](#user-stories) +- [Proposal](#proposal) +- [Future Work](#future-work) +- [Risks and Mitigations](risks-and-mitigations) +- [Graduation Criteria](graduation-criteria) +- [Alternatives](alternatives) + + +_Authors:_ + +* Mrunal Patel <mpatel@redhat.com> +* Jan Pazdziora <jpazdziora@redhat.com> +* Vikas Choudhary <vichoudh@redhat.com> + +## Summary +Container security consists of many different kernel features that work together to make containers secure. User namespaces is one such feature that enables interesting possibilities for containers by allowing them to be root inside the container while not being root on the host. This gives more capabilities to the containers while protecting the host from the container being root and adds one more layer to container security. +In this proposal we discuss: +- use-cases/user-stories that benefit from this enhancement +- implementation design and scope for alpha release +- long-term roadmap to fully support this feature beyond alpha + +## Motivation +From user_namespaces(7): +> User namespaces isolate security-related identifiers and attributes, in particular, user IDs and group IDs, the root directory, keys, and capabilities. A process's user and group IDs can be different inside and outside a user namespace. In particular, a process can have a normal unprivileged user ID outside a user namespace while at the same time having a user ID of 0 inside the namespace; in other words, the process has full privileges for operations inside the user namespace, but is unprivileged for operations outside the namespace. + +In order to run Pods with software which expects to run as root or with elevated privileges while still containing the processes and protecting both the Nodes and other Pods, Linux kernel mechanism of user namespaces can be used make the processes in the Pods view their environment as having the privileges, while on the host (Node) level these processes appear as without privileges or with privileges only affecting processes in the same Pods + +The purpose of using user namespaces in Kubernetes is to let the processes in Pods think they run as one uid set when in fact they run as different “real” uids on the Nodes. + +In this text, most everything said about uids can also be applied to gids. + +## Goals +Enable user namespace support in a kubernetes cluster so that workloads that work today also work with user namespaces enabled at runtime. Furthermore, make workloads that require root/privileged user inside the container, safer for the node using the additional security of user namespaces. Containers will run in a user namespace different from user-namespace of the underlying host. + +## Non-Goals +- Non-goal is to support pod/container level user namespace isolation. There can be images using different users but on the node, pods/containers running with these images will share common user namespace remapping configuration. In other words, all containers on a node share a common user-namespace range. +- Remote volumes support eg. NFS + +## User Stories +- As a cluster admin, I want to protect the node from the rogue container process(es) running inside pod containers with root privileges. If such a process is able to break out into the node, it could be a security issue. +- As a cluster admin, I want to support all the images irrespective of what user/group that image is using. +- As a cluster admin, I want to allow some pods to disable user namespaces if they require elevated privileges. + +## Proposal +Proposal is to support user-namespaces for the pod containers. This can be done at two levels: +- Node-level : This proposal explains this part in detail. +- Namespace-Level/Pod-level: Plan is to target this in future due to missing support in the low level system components such as runtimes and kernel. More on this in the `Future Work` section. + +Node-level user-namespace support means that, if feature is enabled, all pods on a node will share a common user-namespace, common UID(and GID) range (which is a subset of node’s total UIDs(and GIDs)). This common user-namespace is runtime’s default user-namespace range which is remapped to containers’ UIDs(and GID), starting with the first UID as container’s â€root’. +In general Linux convention, UID(or GID) mapping consists of three parts: +1. Host (U/G)ID: First (U/G)ID of the range on the host that is being remapped to the (U/G)IDs in the container user-namespace +2. Container (U/G)ID: First (U/G)ID of the range in the container namespace and this is mapped to the first (U/G)ID on the host(mentioned in previous point). +3. Count/Size: Total number of consecutive mapping between host and container user-namespaces, starting from the first one (including) mentioned above. + +As an example, `host_id 1000, container_id 0, size 10` +In this case, 1000 to 1009 on host will be mapped to 0 to 9 inside the container. + +User-namespace support should be enabled only when container runtime on the node supports user-namespace remapping and is enabled in its configuration. To enable user-namespaces, feature-gate flag will need to be passed to Kubelet like this `--feature-gates=”NodeUserNamespace=true”` + +A new CRI API, `GetRuntimeConfigInfo` will be added. Kubelet will use this API: +- To verify if user-namespace remapping is enabled at runtime. If found disabled, kubelet will fail to start +- To determine the default user-namespace range at the runtime, starting UID of which is mapped to the UID '0' of the container. + +### Volume Permissions +Kubelet will change the file permissions, i.e chown, at `/var/lib/kubelet/pods` prior to any container start to get file permissions updated according to remapped UID and GID. +This proposal will work only for local volumes and not with remote volumes such as NFS. + +### How to disable `NodeUserNamespace` for a specific pod +This can be done in two ways: +- **Alpha:** Implicitly using host namespace for the pod containers +This support is already present (currently it seems broken, will be fixed) in Kubernetes as an experimental functionality, which can be enabled using `feature-gates=”ExperimentalHostUserNamespaceDefaulting=true”`. +If Pod-Security-Policy is configured to allow the following to be requested by a pod, host user-namespace will be enabled for the container: + - host namespaces (pid, ipc, net) + - non-namespaced capabilities (mknod, sys_time, sys_module) + - the pod contains a privileged container or using host path volumes. + - https://github.com/kubernetes/kubernetes/commit/d0d78f478ce0fb9d5e121db3b7c6993b482af82c#diff-a53fa76e941e0bdaee26dcbc435ad2ffR437 introduced via https://github.com/kubernetes/kubernetes/commit/d0d78f478ce0fb9d5e121db3b7c6993b482af82c. + +- **Beta:** Explicit API to request host user-namespace in pod spec + This is being targeted under Beta graduation plans. + +### CRI API Changes +Proposed CRI API changes: + +```golang +// Runtime service defines the public APIs for remote container runtimes +service RuntimeService { + // Version returns the runtime name, runtime version, and runtime API version. + rpc Version(VersionRequest) returns (VersionResponse) {} + ……. + ……. + // GetRuntimeConfigInfo returns the configuration details of the runtime. + rpc GetRuntimeConfigInfo(GetRuntimeConfigInfoRequest) returns (GetRuntimeConfigInfoResponse) {} +} +// LinuxIDMapping represents a single user namespace mapping in Linux. +message LinuxIDMapping { + // container_id is the starting id for the mapping inside the container. + uint32 container_id = 1; + // host_id is the starting id for the mapping on the host. + uint32 host_id = 2; + // size is the length of the mapping. + uint32 size = 3; +} + +message LinuxUserNamespaceConfig { + // is_enabled, if true indicates that user-namespaces are supported and enabled in the container runtime + bool is_enabled = 1; + // uid_mappings is an array of user id mappings. + repeated LinuxIDMapping uid_mappings = 1; + // gid_mappings is an array of group id mappings. + repeated LinuxIDMapping gid_mappings = 2; +} +message GetRuntimeConfig { + LinuxUserNamespaceConfig user_namespace_config = 1; +} + +message GetRuntimeConfigInfoRequest {} + +message GetRuntimeConfigInfoResponse { + GetRuntimeConfig runtime_config = 1 +} + +... + +// NamespaceOption provides options for Linux namespaces. +message NamespaceOption { + // Network namespace for this container/sandbox. + // Note: There is currently no way to set CONTAINER scoped network in the Kubernetes API. + // Namespaces currently set by the kubelet: POD, NODE + NamespaceMode network = 1; + // PID namespace for this container/sandbox. + // Note: The CRI default is POD, but the v1.PodSpec default is CONTAINER. + // The kubelet's runtime manager will set this to CONTAINER explicitly for v1 pods. + // Namespaces currently set by the kubelet: POD, CONTAINER, NODE + NamespaceMode pid = 2; + // IPC namespace for this container/sandbox. + // Note: There is currently no way to set CONTAINER scoped IPC in the Kubernetes API. + // Namespaces currently set by the kubelet: POD, NODE + NamespaceMode ipc = 3; + // User namespace for this container/sandbox. + // Note: There is currently no way to set CONTAINER scoped user namespace in the Kubernetes API. + // The container runtime should ignore this if user namespace is NOT enabled. + // POD is the default value. Kubelet will set it to NODE when trying to use host user-namespace + // Namespaces currently set by the kubelet: POD, NODE + NamespaceMode user = 4; +} + +``` + +### Runtime Support +- Docker: Here is the [user-namespace documentation](https://docs.docker.com/engine/security/userns-remap/) and this is the [implementation PR](https://github.com/moby/moby/pull/12648) + - Concerns: +Docker API does not provide user-namespace mapping. Therefore to handle `GetRuntimeConfigInfo` API, changes will be done in `dockershim` to read system files, `/etc/subuid` and `/etc/subgid`, for figuring out default user-namespace mapping. `/info` api will be used to figure out if user-namespace is enabled and `Docker Root Dir` will be used to figure out host uid mapped to the uid `0` in container. eg. `Docker Root Dir: /var/lib/docker/2131616.2131616` this shows host uid `2131616` will be mapped to uid `0` +- CRI-O: https://github.com/kubernetes-incubator/cri-o/pull/1519 +- Containerd: https://github.com/containerd/containerd/blob/129167132c5e0dbd1b031badae201a432d1bd681/container_opts_unix.go#L149 + +### Implementation Roadmap +#### Phase 1: Support in Kubelet, Alpha, [Target: Kubernetes v1.11] +- Add feature gate `NodeUserNamespace`, disabled by default +- Add new CRI API, `GetRuntimeConfigInfo()` +- Add logic in Kubelet to handle pod creation which includes parsing GetRuntimeConfigInfo response and changing file-permissions in /var/lib/kubelet with learned userns mapping. +- Add changes in dockershim to implement GetRuntimeConfigInfo() for docker runtime +- Add changes in CRI-O to implement userns support and GetRuntimeConfigInfo() support +- Unit test cases +- e2e tests + +#### Phase 2: Beta Support [Target: Kubernetes v1.12] +- PSP integration +- To grow ExperimentalHostUserNamespaceDefaulting from experimental feature gate to a Kubelet flag +- API changes to allow pod able to request HostUserNamespace in pod spec +- e2e tests + +### References +- Default host user namespace via experimental flag + - https://github.com/kubernetes/kubernetes/pull/31169 +- Enable userns support for containers launched by kubelet + - https://github.com/kubernetes/features/issues/127 +- Track Linux User Namespaces in the Pod Security Policy + - https://github.com/kubernetes/kubernetes/issues/59152 +- Add support for experimental-userns-remap-root-uid and experimental-userns-remap-root-gid options to match the remapping used by the container runtime. + - https://github.com/kubernetes/kubernetes/pull/55707 +- rkt User Namespaces Background + - https://coreos.com/rkt/docs/latest/devel/user-namespaces.html + +## Future Work +### Namespace-Level/Pod-Level user-namespace support +There is no runtime today which supports creating containers with a specified user namespace configuration. For example here is the discussion related to this support in Docker https://github.com/moby/moby/issues/28593 +Once user-namespace feature in the runtimes has evolved to support container’s request for a specific user-namespace mapping(UID and GID range), we can extend current Node-Level user-namespace support in Kubernetes to support Namespace-level isolation(or if desired even pod-level isolation) by dividing and allocating learned mapping from runtime among Kubernetes namespaces (or pods, if desired). From end-user UI perspective, we don't expect any change in the UI related to user namespaces support. +### Remote Volumes +Remote Volumes support should be investigated and should be targeted in future once support is there at lower infra layers. + + +## Risks and Mitigations +The main risk with this change stems from the fact that processes in Pods will run with different “real” uids than they used to, while expecting the original uids to make operations on the Nodes or consistently access shared persistent storage. +- This can be mitigated by turning the feature on gradually, per-Pod or per Kubernetes namespace. +- For the Kubernetes' cluster Pods (that provide the Kubernetes functionality), testing of their behaviour and ability to run in user namespaced setups is crucial. + +## Graduation Criteria +- PSP integration +- API changes to allow pod able to request host user namespace using for example, `HostUserNamespace: True`, in pod spec +- e2e tests + +## Alternatives +User Namespace mappings can be passed explicitly through kubelet flags similar to https://github.com/kubernetes/kubernetes/pull/55707 but we do not prefer this option because this is very much prone to mis-configuration. diff --git a/contributors/design-proposals/node/plugin-watcher.md b/contributors/design-proposals/node/plugin-watcher.md new file mode 100644 index 000000000..eb8f4be1d --- /dev/null +++ b/contributors/design-proposals/node/plugin-watcher.md @@ -0,0 +1,169 @@ + +# Plugin Watcher Utility + +## Background + +Portability and extendability are the major goals of Kubernetes from its beginning and we have seen more plugin mechanisms developed on Kubernetes to further improve them. Moving in this direction, Kubelet is starting to support pluggable [device exporting](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/resource-management/device-plugin.md) and [CSI volume plugins](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/storage/container-storage-interface.md). We are seeing the need for a common Kubelet plugin discovery model that can be used by different types of node-level plugins, such as device plugins, CSI, and CNI, to establish communication channels with Kubelet. This document lists two possible approaches of implementing this common Kubelet plugin discovery model. We are hoping to discuss these proposals with the OSS community to gather consensus on which model we would like to take forward. + + +## General Requirements + +The primary goal of the Kubelet plugin discovery model is to provide a common mechanism for users to dynamically deploy vendor specific plugins that make different types of devices, or storage system, or network components available on a Kubernetes node. + +Here are the general requirements to consider when designing this system: + +* Security/authentication requirements +* Underlying communication channel to use: stay with gRPC v.s. flexibility to support multiple communication protocol +* How to detect API version mismatching +* Ping-pong plugin registration +* Failure recovery or upgrade story upon kubelet restart and/or plugin restart +* How to prevent single misbehaving plugin from flooding kubelet +* How to de-registration +* Need to support some existing protocol that is not bound to K8s, like CSI + +## Proposed Models + +#### Model 1: plugin registers with Kubelet through grpc (currently used in device plugin) + +* Currently requires plugin to run with privilege and communicate to kubelet through unix socket under a canonical directory, but has flexibility to support different communication channels or authentication methods. +* API version mismatch is detected during registration. +* Currently always take newest plugin upon re-registration. Can implement some policy to reject plugin re-registration if a plugin re-registers too frequently. Can terminate the communication channel if a plugin sends too many updates to Kubelet. +* In the current implementation, kubelet removes all of the device plugin unix sockets. Device plugins are expected to watch for such event and re-register with the new kubelet instance. The solution is a bit ad-hoc. There is also a temporary period that we can't schedule new pods requiring device plugin resource on the node after kubelet restart, till the corresponding device plugin re-registers. This temporary period can be avoided if we also checkpoints device plugin socket information on Kubelet side. Pods previously scheduled can continue with device plugin allocation information already recorded in a checkpoint file. Checkpointing plugin socket information is easier to be added in DevicePlugins that already maintains a checkpoint file for other purposes. This however could be a new requirement for other plugin systems like CSI. + +![image](https://user-images.githubusercontent.com/11936386/42627970-3bf055a4-85ec-11e8-93cb-f4f393b2bd76.png) + +#### Model 2: Kubelet watches new plugins under a canonical path through inotify (Preferred one and current implementation) + +* Plugin can export a registration rpc for API version checking or further authentication. Kubelet doesn't need to export a rpc service. +* We will take gRPC as the single supported communication channel. +* Can take the newest plugin from the latest inotify creation. May require socket name to follow certain naming convention (e.g., resourceName.timestamp) to detect ping-pong plugin registration, and ignore socket creations from a plugin if it creates too many sockets during a short period of time. We can even require that the resource name embedded in the socket path to be part of the identification process, e.g., a plugin at `/var/lib/kubelet/plugins/resourceName.timestamp` must identify itself as resourceName or it will be rejected. +* Easy to avoid temporary plugin unavailability after kubelet restart. Kubelet just needs to scan through the special directory. It can remove plugin sockets that fail to respond, and always take the last live socket when multiple registrations happen with the same plugin name. This simplifies device plugin implementation because they don't need to detect Kubelet restarts and re-register. +* A plugin should remove its socket upon termination to avoid leaving dead sockets in the canonical path, although this is not strictly required. +* CSI needs flexibility to not only bound to Kubernetes. With probe model, may need to add an interface for K8s to get plugin information. +* We can introduce special plugin pod for which we automatically setup its environment to communicate with kubelet. Even if Kubelet runs in a container, it is easy to config the communication path between plugin and Kubelet. +![image](https://user-images.githubusercontent.com/11936386/42628430-be3ab5bc-85ed-11e8-93ac-173511fdd39a.png) + +**More Implementation Details on Model 2:** + +* Kubelet will have a new module, PluginWatcher, which will probe a canonical path recursively +* On detecting a socket creation, Watcher will try to get plugin identity details using a gRPC client on the discovered socket and the RPCs of a newly introduced `Identity` service. +* Plugins must implement `Identity` service RPCs for initial communication with Watcher. + +**Identity Service Primitives:** +```golang + +// PluginInfo is the message sent from a plugin to the Kubelet pluginwatcher for plugin registration +message PluginInfo { + // Type of the Plugin. CSIPlugin or DevicePlugin + string type = 1; + // Plugin name that uniquely identifies the plugin for the given plugin type. + // For DevicePlugin, this is the resource name that the plugin manages and + // should follow the extended resource name convention. + // For CSI, this is the CSI driver registrar name. + string name = 2; + // Optional endpoint location. If found set by Kubelet component, + // Kubelet component will use this endpoint for specific requests. + // This allows the plugin to register using one endpoint and possibly use + // a different socket for control operations. CSI uses this model to delegate + // its registration external from the plugin. + string endpoint = 3; + // Plugin service API versions the plugin supports. + // For DevicePlugin, this maps to the deviceplugin API versions the + // plugin supports at the given socket. + // The Kubelet component communicating with the plugin should be able + // to choose any preferred version from this list, or returns an error + // if none of the listed versions is supported. + repeated string supported_versions = 4; +} + +// RegistrationStatus is the message sent from Kubelet pluginwatcher to the plugin for notification on registration status +message RegistrationStatus { + // True if plugin gets registered successfully at Kubelet + bool plugin_registered = 1; + // Error message in case plugin fails to register, empty string otherwise + string error = 2; +} + +// RegistrationStatusResponse is sent by plugin to kubelet in response to RegistrationStatus RPC +message RegistrationStatusResponse { +} + +// InfoRequest is the empty request message from Kubelet +message InfoRequest { +} + +// Registration is the service advertised by the Plugins. +service Registration { + rpc GetInfo(InfoRequest) returns (PluginInfo) {} + rpc NotifyRegistrationStatus(RegistrationStatus) returns (RegistrationStatusResponse) {} +} +``` + +**PluginWatcher primitives:** +```golang +// Watcher is the plugin watcher +type Watcher struct { + path string + handlers map[string]RegisterCallbackFn + stopCh chan interface{} + fs utilfs.Filesystem + fsWatcher *fsnotify.Watcher + wg sync.WaitGroup + mutex sync.Mutex +} + +// RegisterCbkFn is the type of the callback function that handlers will provide +type RegisterCallbackFn func(pluginName string, endpoint string, versions []string, socketPath string) (chan bool, error) + +// AddHandler registers a callback to be invoked for a particular type of plugin +func (w *Watcher) AddHandler(pluginType string, handlerCbkFn RegisterCbkFn) { + w.handlers[handlerType] = handlerCbkFn +} + +// Start watches for the creation of plugin sockets at the path +func (w *Watcher) Start() error { + +// Probes on the canonical path for socket creations in a forever loop + +// For any new socket creation, invokes `Info()` at plugins Identity service +resp, err := client.Info(context.Background(), &watcherapi.Empty{}) + +// Keeps the connection open and passes plugin's identity details, along with socket path to the handler using callback function registered by handler. Handler callback is selected based on the Type of the plugin, for example device plugin or CSI plugin +// Handler Callback is supposed to authenticate the plugin details and if all correct, register the Plugin at the kubelet subsystem. + +if handlerCbkFn, ok := w.handlers[resp.Type]; ok { + err = handlerCbkFn(resp, event.Name) +... +} + +// After Callback returns, PluginWatcher notifies back status to the plugin + +client.NotifyRegistrationStatus(ctx, ®isterapi.RegistrationStatus{ +... +}) + +``` + + +**How any Kubelet sub-module can use PluginWatcher:** + + + +* There must be a callback function defined in the sub-module of the signature: + +```golang +type RegisterCallbackFn func(pluginName string, endpoint string, versions []string, socketPath string) (chan bool, error) +``` +* Just after sub-module start, this callback should be registered with the PluginWatcher, eg: +```golang +kl.pluginWatcher.AddHandler(pluginwatcherapi.DevicePlugin, kl.containerManager.GetPluginRegistrationHandlerCbkFunc()) +``` + +**Open issues (Points from the meeting notes for the record):** +* Discuss with security team if this is a viable approach (and if cert auth can be added on top for added security). +* Plugin author should be able to write yaml once, so the plugin dir should not be hard coded. 3 options: + * Downward API param for plugin directory that will be used as hostpath src + * A new volume plugin that can be used by plugin to drop a socket + * Have plugins call kubelet -- link local interface + * Bigger change -- kubelet doesn't do this + * Path of most resistance diff --git a/contributors/design-proposals/node/pod-resource-management.md b/contributors/design-proposals/node/pod-resource-management.md index 91f076894..9efa3e426 100644 --- a/contributors/design-proposals/node/pod-resource-management.md +++ b/contributors/design-proposals/node/pod-resource-management.md @@ -228,7 +228,7 @@ of a compressible resource that was requested by a pod in a higher QoS tier. The `kubelet` will support a flag `experimental-qos-reserved` that takes a set of percentages per incompressible resource that controls how the QoS cgroup sandbox attempts to reserve resources for its tier. It attempts -to reserve requested resources to exclude pods from lower OoS classes from +to reserve requested resources to exclude pods from lower QoS classes from using resources requested by higher QoS classes. The flag will accept values in a range from 0-100%, where a value of `0%` instructs the `kubelet` to attempt no reservation, and a value of `100%` will instruct the `kubelet` to attempt to @@ -564,10 +564,10 @@ Pod3 and Pod4 are both classified as Burstable and are hence nested under the Burstable cgroup. ``` -/ROOT/burstable/cpu.shares = 30m +/ROOT/burstable/cpu.shares = 130m /ROOT/burstable/memory.limit_in_bytes = Allocatable - 5Gi /ROOT/burstable/Pod3/cpu.quota = 150m -/ROOT/burstable/Pod3/cpu.shares = 20m +/ROOT/burstable/Pod3/cpu.shares = 120m /ROOT/burstable/Pod3/memory.limit_in_bytes = 3Gi /ROOT/burstable/Pod4/cpu.quota = 20m /ROOT/burstable/Pod4/cpu.shares = 10m diff --git a/contributors/design-proposals/node/resource-qos.md b/contributors/design-proposals/node/resource-qos.md index 238a9daca..82ddef09e 100644 --- a/contributors/design-proposals/node/resource-qos.md +++ b/contributors/design-proposals/node/resource-qos.md @@ -95,7 +95,7 @@ When `limits` are not specified, they default to the node capacity. Examples: -Container `bar` has not resources specified. +Container `bar` has no resources specified. ```yaml containers: diff --git a/contributors/design-proposals/node/seccomp.md b/contributors/design-proposals/node/seccomp.md index f3e5ec67f..c2150b314 100644 --- a/contributors/design-proposals/node/seccomp.md +++ b/contributors/design-proposals/node/seccomp.md @@ -28,6 +28,7 @@ This design should: * be container-runtime agnostic * allow use of custom profiles * facilitate containerized applications that link directly to libseccomp +* enable a default seccomp profile for containers ## Use Cases @@ -40,6 +41,8 @@ This design should: unmediated by Kubernetes 4. As a user, I want to be able to use a custom seccomp profile and use it with my containers +5. As a user and administrator I want kubernetes to apply a sane default + seccomp profile to containers unless I otherwise specify. ### Use Case: Administrator access control @@ -47,7 +50,7 @@ Controlling access to seccomp profiles is a cluster administrator concern. It should be possible for an administrator to control which users have access to which profiles. -The [pod security policy](https://github.com/kubernetes/kubernetes/pull/7893) +The [Pod Security Policy](https://github.com/kubernetes/kubernetes/pull/7893) API extension governs the ability of users to make requests that affect pod and container security contexts. The proposed design should deal with required changes to control access to new functionality. @@ -101,9 +104,7 @@ implement a sandbox for user-provided code, such as ## Community Work -### Container runtime support for seccomp - -#### Docker / opencontainers +### Docker / OCI Docker supports the open container initiative's API for seccomp, which is very close to the libseccomp API. It allows full @@ -112,14 +113,21 @@ specification of seccomp filters, with arguments, operators, and actions. Docker allows the specification of a single seccomp filter. There are community requests for: -Issues: - * [docker/22109](https://github.com/docker/docker/issues/22109): composable seccomp filters * [docker/21105](https://github.com/docker/docker/issues/22105): custom seccomp filters for builds -#### rkt / appcontainers +Implementation details: + +* [docker/17989](https://github.com/moby/moby/pull/17989): initial + implementation +* [docker/18780](https://github.com/moby/moby/pull/18780): default blacklist + profile +* [docker/18979](https://github.com/moby/moby/pull/18979): default whitelist + profile + +### rkt / appcontainers The `rkt` runtime delegates to systemd for seccomp support; there is an open issue to add support once `appc` supports it. The `appc` project has an open @@ -133,16 +141,11 @@ Issues: * [appc/529](https://github.com/appc/spec/issues/529) * [rkt/1614](https://github.com/coreos/rkt/issues/1614) -#### HyperContainer +### HyperContainer [HyperContainer](https://hypercontainer.io) does not support seccomp. -### Other platforms and seccomp-like capabilities - -FreeBSD has a seccomp/capability-like facility called -[Capsicum](https://www.freebsd.org/cgi/man.cgi?query=capsicum&sektion=4). - -#### lxd +### lxd [`lxd`](http://www.ubuntu.com/cloud/lxd) constrains containers using a default profile. @@ -150,6 +153,11 @@ Issues: * [lxd/1084](https://github.com/lxc/lxd/issues/1084): add knobs for seccomp +### Other platforms and seccomp-like capabilities + +FreeBSD has a seccomp/capability-like facility called +[Capsicum](https://www.freebsd.org/cgi/man.cgi?query=capsicum&sektion=4). + ## Proposed Design ### Seccomp API Resource? @@ -168,8 +176,6 @@ Instead of implementing a new API resource, we propose that pods be able to reference seccomp profiles by name. Since this is an alpha feature, we will use annotations instead of extending the API with new fields. -### API changes? - In the alpha version of this feature we will use annotations to store the names of seccomp profiles. The keys will be: @@ -191,7 +197,8 @@ profiles to be opaque to kubernetes for now. The following format is scoped as follows: -1. `docker/default` - the default profile for the container runtime +1. `runtime/default` - the default profile for the container runtime, can be + overwritten by the following two. 2. `unconfined` - unconfined profile, ie, no seccomp sandboxing 3. `localhost/` - the profile installed to the node's local seccomp profile root diff --git a/contributors/design-proposals/node/secret-configmap-downwardapi-file-mode.md b/contributors/design-proposals/node/secret-configmap-downwardapi-file-mode.md index 85ee9ccce..cdfe1e1c6 100644 --- a/contributors/design-proposals/node/secret-configmap-downwardapi-file-mode.md +++ b/contributors/design-proposals/node/secret-configmap-downwardapi-file-mode.md @@ -169,7 +169,7 @@ Adding it there allows the user to change the mode bits of every file in the object, so it achieves the goal, while having the option to have a default and not specify all files in the object. -The are two downside: +There are two downsides: * The files are symlinks pointint to the real file, and the realfile permissions are only set. The symlink has the classic symlink permissions. diff --git a/contributors/design-proposals/node/troubleshoot-running-pods.md b/contributors/design-proposals/node/troubleshoot-running-pods.md index 72c1cb773..3fcc02231 100644 --- a/contributors/design-proposals/node/troubleshoot-running-pods.md +++ b/contributors/design-proposals/node/troubleshoot-running-pods.md @@ -1,6 +1,6 @@ # Troubleshoot Running Pods -* Status: Pending +* Status: Implementing * Version: Alpha * Implementation Owner: @verb @@ -16,9 +16,9 @@ Many developers of native Kubernetes applications wish to treat Kubernetes as an execution platform for custom binaries produced by a build system. These users can forgo the scripted OS install of traditional Dockerfiles and instead `COPY` the output of their build system into a container image built `FROM scratch` or -a [distroless container -image](https://github.com/GoogleCloudPlatform/distroless). This confers several -advantages: +a +[distroless container image](https://github.com/GoogleCloudPlatform/distroless). +This confers several advantages: 1. **Minimal images** lower operational burden and reduce attack vectors. 1. **Immutable images** improve correctness and reliability. @@ -45,26 +45,25 @@ A solution to troubleshoot arbitrary container images MUST: * fetch troubleshooting utilities at debug time rather than at the time of pod creation * be compatible with admission controllers and audit logging -* allow discovery of debugging status +* allow discovery of current debugging status * support arbitrary runtimes via the CRI (possibly with reduced feature set) * require no administrative access to the node * have an excellent user experience (i.e. should be a feature of the platform rather than config-time trickery) -* have no *inherent* side effects to the running container image +* have no _inherent_ side effects to the running container image +* v1.Container must be available for inspection by admission controllers ## Feature Summary Any new debugging functionality will require training users. We can ease the transition by building on an existing usage pattern. We will create a new command, `kubectl debug`, which parallels an existing command, `kubectl exec`. -Whereas `kubectl exec` runs a *process* in a *container*, `kubectl debug` will -be similar but run a *container* in a *pod*. +Whereas `kubectl exec` runs a _process_ in a _container_, `kubectl debug` will +be similar but run a _container_ in a _pod_. -A container created by `kubectl debug` is a *Debug Container*. Just like a -process run by `kubectl exec`, a Debug Container is not part of the pod spec and -has no resource stored in the API. Unlike `kubectl exec`, a Debug Container -*does* have status that is reported in `v1.PodStatus` and displayed by `kubectl -describe pod`. +A container created by `kubectl debug` is a _Debug Container_. Unlike `kubectl +exec`, Debug Containers have status that is reported in `PodStatus` and +displayed by `kubectl describe pod`. For example, the following command would attach to a newly created container in a pod: @@ -82,22 +81,16 @@ kubectl debug target-pod This creates an interactive shell in a pod which can examine and signal other processes in the pod. It has access to the same network and IPC as processes in -the pod. It can access the filesystem of other processes by `/proc/$PID/root`. -As is already the case with regular containers, Debug Containers can enter -arbitrary namespaces of another container via `nsenter` when run with -`CAP_SYS_ADMIN`. +the pod. When [process namespace sharing](https://features.k8s.io/495) is +enabled, it can access the filesystem of other processes by `/proc/$PID/root`. +Debug Containers can enter arbitrary namespaces of another visible container via +`nsenter` when run with `CAP_SYS_ADMIN`. -*Please see the User Stories section for additional examples and Alternatives -Considered for the considerable list of other solutions we considered.* +_Please see the User Stories section for additional examples and Alternatives +Considered for the considerable list of other solutions we considered._ ## Implementation Details -The implementation of `kubectl debug` closely mirrors the implementation of -`kubectl exec`, with most of the complexity implemented in the `kubelet`. How -functionality like this best fits into Kubernetes API has been contentious. In -order to make progress, we will start with the smallest possible API change, -extending `/exec` to support Debug Containers, and iterate. - From the perspective of the user, there's a new command, `kubectl debug`, that creates a Debug Container and attaches to its console. We believe a new command will be less confusing for users than overloading `kubectl exec` with a new @@ -106,192 +99,154 @@ subsequently be used to reattach and is reported by `kubectl describe`. ### Kubernetes API Changes -#### Chosen Solution: "exec++" +This will be implemented in the Core API to avoid new dependencies in the +kubelet. The user-level concept of a _Debug Container_ implemented with the +API-level concept of an _Ephemeral Container_. The API doesn't require an +Ephemeral Container to be used as a Debug Container. It's intended as a general +purpose construct for running a short-lived process in a pod. -We will extend `v1.Pod`'s `/exec` subresource to support "executing" container -images. The current `/exec` endpoint must implement `GET` to support streaming -for all clients. We don't want to encode a (potentially large) `v1.Container` as -an HTTP parameter, so we must extend `v1.PodExecOptions` with the specific -fields required for creating a Debug Container: +#### Pod Changes + +Ephemeral Containers are represented in `PodSpec` and `PodStatus`: ``` -// PodExecOptions is the query options to a Pod's remote exec call -type PodExecOptions struct { - ... - // EphemeralContainerName is the name of an ephemeral container in which the - // command ought to be run. Either both EphemeralContainerName and - // EphemeralContainerImage fields must be set, or neither. - EphemeralContainerName *string `json:"ephemeralContainerName,omitempty" ...` - - // EphemeralContainerImage is the image of an ephemeral container in which the command - // ought to be run. Either both EphemeralContainerName and EphemeralContainerImage - // fields must be set, or neither. - EphemeralContainerImage *string `json:"ephemeralContainerImage,omitempty" ...` +type PodSpec struct { + ... + // List of user-initiated ephemeral containers to run in this pod. + // This field is alpha-level and is only honored by servers that enable the EphemeralContainers feature. + // +optional + EphemeralContainers []EphemeralContainer `json:"ephemeralContainers,omitempty" protobuf:"bytes,29,opt,name=ephemeralContainers"` } -``` -After creating the Debug Container, the kubelet will upgrade the connection to -streaming and perform an attach to the container's console. If disconnected, the -Debug Container can be reattached using the pod's `/attach` endpoint with -`EphemeralContainerName`. - -Debug Containers cannot be removed via the API and instead the process must -terminate. While not ideal, this parallels existing behavior of `kubectl exec`. -To kill a Debug Container one would `attach` and exit the process interactively -or create a new Debug Container to send a signal with `kill(1)` to the original -process. - -#### Alternative 1: Debug Subresource - -Rather than extending an existing subresource, we could create a new, -non-streaming `debug` subresource. We would create a new API Object: - -``` -// DebugContainer describes a container to attach to a running pod for troubleshooting. -type DebugContainer struct { - metav1.TypeMeta - metav1.ObjectMeta - - // Name is the name of the Debug Container. Its presence will cause - // exec to create a Debug Container rather than performing a runtime exec. - Name string `json:"name,omitempty" ...` - - // Image is an optional container image name that will be used to for the Debug - // Container in the specified Pod with Command as ENTRYPOINT. If omitted a - // default image will be used. - Image string `json:"image,omitempty" ...` -} -``` - -The pod would gain a new `/debug` subresource that allows the following: - -1. A `POST` of a `PodDebugContainer` to - `/api/v1/namespaces/$NS/pods/$POD_NAME/debug/$NAME` to create Debug - Container named `$NAME` running in pod `$POD_NAME`. -1. A `DELETE` of `/api/v1/namespaces/$NS/pods/$POD_NAME/debug/$NAME` will stop - the Debug Container `$NAME` in pod `$POD_NAME`. - -Once created, a client would attach to the console of a debug container using -the existing attach endpoint, `/api/v1/namespaces/$NS/pods/$POD_NAME/attach`. - -However, this pattern does not resemble any other current usage of the API, so -we prefer to start with exec++ and reevaluate if we discover a compelling -reason. - -#### Alternative 2: Declarative Configuration - -Using subresources is an imperative style API where the client instructs the -kubelet to perform an action, but in general Kubernetes prefers declarative APIs -where the client declares a state for Kubernetes to enact. - -We could implement this in a declarative manner by creating a new -`EphemeralContainer` type: - -``` -type EphemeralContainer struct { - metav1.TypeMeta - metav1.ObjectMeta - - Spec EphemeralContainerSpec - Status v1.ContainerStatus -} -``` - -`EphemeralContainerSpec` is similar to `v1.Container`, but contains only fields -relevant to Debug Containers: - -``` -type EphemeralContainerSpec struct { - // Target is the pod in which to run the EphemeralContainer - // Required. - Target v1.ObjectReference - - Name string - Image String - Command []string - Args []string - ImagePullPolicy PullPolicy - SecurityContext *SecurityContext -} -``` - -A new controller in the kubelet would watch for EphemeralContainers and -create/delete debug containers. `EphemeralContainer.Status` would be updated by -the kubelet at the same time it updates `ContainerStatus` for regular and init -containers. Clients would create a new `EphemeralContainer` object, wait for it -to be started and then attach using the pod's attach subresource and the name of -the `EphemeralContainer`. - -Debugging is inherently imperative, however, rather than a state for Kubernetes -to enforce. Once a Debug Container is started it should not be automatically -restarted, for example. This solution imposes additionally complexity and -dependencies on the kubelet, but it's not yet clear if the complexity is -justified. - -### Debug Container Status - -The status of a Debug Container is reported in a new field in `v1.PodStatus`: - -``` type PodStatus struct { - ... - EphemeralContainerStatuses []v1.ContainerStatus + ... + // Status for any Ephemeral Containers that running in this pod. + // This field is alpha-level and is only honored by servers that enable the EphemeralContainers feature. + // +optional + EphemeralContainerStatuses []ContainerStatus `json:"ephemeralContainerStatuses,omitempty" protobuf:"bytes,12,rep,name=ephemeralContainerStatuses"` } ``` -This status is only populated for Debug Containers, but there's interest in -tracking status for traditional exec in a similar manner. +`EphemeralContainerStatuses` resembles the existing `ContainerStatuses` and +`InitContainerStatuses`, but `EphemeralContainers` introduces a new type: -Note that `Command` and `Args` would have to be tracked in the status object -because there is no spec for Debug Containers or exec. These must either be made -available by the runtime or tracked by the kubelet. For Debug Containers this -could be stored as runtime labels, but the kubelet currently has no method of -storing state across restarts for exec. Solving this problem for exec is out of -scope for Debug Containers, but we will look for a solution as we implement this -feature. +``` +// An EphemeralContainer is a container which runs temporarily in a pod for human-initiated actions +// such as troubleshooting. This is an alpha feature enabled by the EphemeralContainers feature flag. +type EphemeralContainer struct { + // Spec describes the Ephemeral Container to be created. + Spec Container `json:"spec,omitempty" protobuf:"bytes,1,opt,name=spec"` -`EphemeralContainerStatuses` is populated by the kubelet in the same way as -regular and init container statuses. This is sent to the API server and -displayed by `kubectl describe pod`. + // If set, the name of the container from PodSpec that this ephemeral container targets. + // The ephemeral container will be run in the namespaces (IPC, PID, etc) of this container. + // If not set then the ephemeral container is run in whatever namespaces are shared + // for the pod. + // +optional + TargetContainerName string `json:"targetContainerName,omitempty" protobuf:"bytes,2,opt,name=targetContainerName"` +} +``` + +Much of the utility of Ephemeral Containers comes from the ability to run a +container within the PID namespace of another container. `TargetContainerName` +allows targeting a container that doesn't share its PID namespace with the rest +of the pod. We must modify the CRI to enable this functionality (see below). + +##### Alternative Considered: Omitting TargetContainerName + +It would be simpler for the API, kubelet and kubectl if `EphemeralContainers` +was a `[]Container`, but as isolated PID namespaces will be the default for some +time, being able to target a container will provide a better user experience. + +#### Updates + +Most fields of `Pod.Spec` are immutable once created. There is a short whitelist +of fields which may be updated, and we could extend this to include +`EphemeralContainers`. The ability to add new containers is a large change for +Pod, however, and we'd like to begin conservatively by enforcing the following +best practices: + +1. Ephemeral Containers lack guarantees for resources or execution, and they + will never be automatically restarted. To avoid pods that depend on + Ephemeral Containers, we allow their addition only in pod updates and + disallow them during pod create. +1. Some fields of `v1.Container` imply a fundamental role in a pod. We will + disallow the following fields in Ephemeral Containers: `resources`, `ports`, + `livenessProbe`, `readinessProbe`, and `lifecycle.` +1. Cluster administrators may want to restrict access to Ephemeral Containers + independent of other pod updates. + +To enforce these restrictions and new permissions, we will introduce a new Pod +subresource, `/ephemeralcontainers`. `EphemeralContainers` can only be modified +via this subresource. `EphemeralContainerStatuses` is updated with everything +else in `Pod.Status` via `/status`. + +To create a new Ephemeral Container, one appends a new `EphemeralContainer` with +the desired `v1.Container` as `Spec` in `Pod.Spec.EphemeralContainers` and +`PUT`s the pod to `/ephemeralcontainers`. + +The subresources `attach`, `exec`, `log`, and `portforward` are available for +Ephemeral Containers and will be forwarded by the apiserver. This means `kubectl +attach`, `kubelet exec`, `kubectl log`, and `kubectl port-forward` will work for +Ephemeral Containers. + +Once the pod is updated, the kubelet worker watching this pod will launch the +Ephemeral Container and update its status. The client is expected to watch for +the creation of the container status and then attach to the console of a debug +container using the existing attach endpoint, +`/api/v1/namespaces/$NS/pods/$POD_NAME/attach`. Note that any output of the new +container occurring between its creation and attach will not be replayed, but it +can be viewed using `kubectl log`. + +##### Alternative Considered: Standard Pod Updates + +It would simplify initial implementation if we updated the pod spec via the +normal means, and switched to a new update subresource if required at a future +date. It's easier to begin with a too-restrictive policy than a too-permissive +one on which users come to rely, and we expect to be able to remove the +`/ephemeralcontainers` subresource prior to exiting alpha should it prove +unnecessary. + +### Container Runtime Interface (CRI) changes + +The CRI requires no changes for basic functionality, but it will need to be +updated to support container namespace targeting, as described in the +[Shared PID Namespace Proposal](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/node/pod-pid-namespace.md#targeting-a-specific-containers-namespace). ### Creating Debug Containers -1. `kubectl` invokes the exec API as described in the preceding section. -1. The API server checks for name collisions with existing containers, performs - admission control and proxies the connection to the kubelet's - `/exec/$NS/$POD_NAME/$CONTAINER_NAME` endpoint. -1. The kubelet instructs the Runtime Manager to create a Debug Container. -1. The runtime manager uses the existing `startContainer()` method to create a - container in an existing pod. `startContainer()` has one modification for - Debug Containers: it creates a new runtime label (e.g. a docker label) that - identifies this container as a Debug Container. -1. After creating the container, the kubelet schedules an asynchronous update - of `PodStatus`. The update publishes the debug container status to the API - server at which point the Debug Container becomes visible via `kubectl - describe pod`. -1. The kubelet will upgrade the connection to streaming and attach to the - container's console. +To create a debug container, kubectl will take the following steps: -Rather than performing the implicit attach the kubelet could return success to -the client and require the client to perform an explicit attach, but the -implicit attach maintains consistent semantics across `/exec` rather than -varying behavior based on parameters. - -The apiserver detects container name collisions with both containers in the pod -spec and other running Debug Containers by checking -`EphemeralContainerStatuses`. In a race to create two Debug Containers with the -same name, the API server will pass both requests and the kubelet must return an -error to all but one request. +1. `kubectl` constructs an `EphemeralContainer` based on command line arguments + and appends it to `Pod.Spec.EphemeralContainers`. It `PUT`s the modified pod + to the pod's `/ephemeralcontainers`. +1. The apiserver discards changes other than additions to + `Pod.Spec.EphemeralContainers` and validates the pod update. + 1. Pod validation fails if container spec contains fields disallowed for + Ephemeral Containers or the same name as a container in the spec or + `EphemeralContainers`. + 1. API resource versioning resolves update races. +1. The kubelet's pod watcher notices the update and triggers a `syncPod()`. + During the sync, the kubelet calls `kuberuntime.StartEphemeralContainer()` + for any new Ephemeral Container. + 1. `StartEphemeralContainer()` uses the existing `startContainer()` to + start the Ephemeral Container. + 1. After initial creation, future invocations of `syncPod()` will publish + its ContainerStatus but otherwise ignore the Ephemeral Container. It + will exist for the life of the pod sandbox or it exits. In no event will + it be restarted. +1. `syncPod()` finishes a regular sync, publishing an updated PodStatus (which + includes the new `EphemeralContainer`) by its normal, existing means. +1. The client performs an attach to the debug container's console. There are no limits on the number of Debug Containers that can be created in a pod, but exceeding a pod's resource allocation may cause the pod to be evicted. ### Restarting and Reattaching Debug Containers -Debug Containers will never be restarted automatically. It is possible to -replace a Debug Container that has exited by re-using a Debug Container name. It -is an error to attempt to replace a Debug Container that is still running, which -is detected by both the API server and the kubelet. +Debug Containers will not be restarted. + +We want to be more user friendly by allowing re-use of the name of an exited +debug container, but this will be left for a future improvement. One can reattach to a Debug Container using `kubectl attach`. When supported by a runtime, multiple clients can attach to a single debug container and share the @@ -299,50 +254,25 @@ terminal. This is supported by Docker. ### Killing Debug Containers -Debug containers will not be killed automatically until the pod (specifically, -the pod sandbox) is destroyed. Debug Containers will stop when their command -exits, such as exiting a shell. Unlike `kubectl exec`, processes in Debug -Containers will not receive an EOF if their connection is interrupted. +Debug containers will not be killed automatically unless the pod is destroyed. +Debug Containers will stop when their command exits, such as exiting a shell. +Unlike `kubectl exec`, processes in Debug Containers will not receive an EOF if +their connection is interrupted. -### Container Lifecycle Changes - -Implementing debug requires no changes to the Container Runtime Interface as -it's the same operation as creating a regular container. The following changes -are necessary in the kubelet: - -1. `SyncPod()` must not kill any Debug Container even though it is not part of - the pod spec. -1. As an exception to the above, `SyncPod()` will kill Debug Containers when - the pod sandbox changes since a lone Debug Container in an abandoned sandbox - is not useful. Debug Containers are not automatically started in the new - sandbox. -1. `convertStatusToAPIStatus()` must sort Debug Containers status into - `EphemeralContainerStatuses` similar to as it does for - `InitContainerStatuses` -1. The kubelet must preserve `ContainerStatus` on debug containers for - reporting. -1. Debug Containers must be excluded from calculation of pod phase and - condition - -It's worth noting some things that do not change: - -1. `KillPod()` already operates on all running containers returned by the - runtime. -1. Containers created prior to this feature being enabled will have a - `containerType` of `""`. Since this does not match `"EPHEMERAL"` the special - handling of Debug Containers is backwards compatible. +A future improvement to Ephemeral Containers could allow killing Debug +Containers when they're removed the `EphemeralContainers`, but it's not clear +that we want to allow this. Removing an Ephemeral Container spec makes it +unavailable for future authorization decisions (e.g. whether to authorize exec +in a pod that had a privileged Ephemeral Container). ### Security Considerations Debug Containers have no additional privileges above what is available to any `v1.Container`. It's the equivalent of configuring an shell container in a pod -spec but created on demand. +spec except that it is created on demand. -Admission plugins that guard `/exec` must be updated for the new parameters. In -particular, they should enforce the same container image policy on the `Image` -parameter as is enforced for regular containers. During the alpha phase we will -additionally support a container image whitelist as a kubelet flag to allow -cluster administrators to easily constraint debug container images. +Admission plugins must be updated to guard `/ephemeralcontainers`. They should +apply the same container image and security policy as for regular containers. ### Additional Consideration @@ -352,116 +282,33 @@ cluster administrators to easily constraint debug container images. troubleshooting causes a pod to exceed its resource limit it may be evicted. 1. There's an output stream race inherent to creating then attaching a container which causes output generated between the start and attach to go - to the log rather than the client. This is not specific to Debug Containers - and exists because Kubernetes has no mechanism to attach a container prior - to starting it. This larger issue will not be addressed by Debug Containers, - but Debug Containers would benefit from future improvements or work arounds. -1. We do not want to describe Debug Containers using `v1.Container`. This is to - reinforce that Debug Containers are not general purpose containers by - limiting their configurability. Debug Containers should not be used to build - services. -1. Debug Containers are of limited usefulness without a shared PID namespace. - If a pod is configured with isolated PID namespaces, the Debug Container - will join the PID namespace of the target container. Debug Containers will - not be available with runtimes that do not implement PID namespace sharing - in some form. + to the log rather than the client. This is not specific to Ephemeral + Containers and exists because Kubernetes has no mechanism to attach a + container prior to starting it. This larger issue will not be addressed by + Ephemeral Containers, but Ephemeral Containers would benefit from future + improvements or work arounds. +1. Ephemeral Containers should not be used to build services, which we've + attempted to reflect in the API. ## Implementation Plan -### Alpha Release +### 1.12: Initial Alpha Release -#### Goals and Non-Goals for Alpha Release - -We're targeting an alpha release in Kubernetes 1.9 that includes the following +We're targeting an alpha release in Kubernetes 1.12 that includes the following basic functionality: -* Support in the kubelet for creating debug containers in a running pod -* A `kubectl debug` command to initiate a debug container -* `kubectl describe pod` will list status of debug containers running in a pod +1. Approval for basic core API changes to Pod +1. Basic support in the kubelet for creating Ephemeral Containers + +Functionality out of scope for 1.12: + +* Killing running Ephemeral Containers by removing them from the Pod Spec. +* Updating `pod.Spec.EphemeralContainers` when containers are garbage + collected. +* `kubectl` commands for creating Ephemeral Containers Functionality will be hidden behind an alpha feature flag and disabled by -default. The following are explicitly out of scope for the 1.9 alpha release: - -* Exited Debug Containers will be garbage collected as regular containers and - may disappear from the list of Debug Container Statuses. -* Security Context for the Debug Container is not configurable. It will always - be run with `CAP_SYS_PTRACE` and `CAP_SYS_ADMIN`. -* Image pull policy for the Debug Container is not configurable. It will - always be run with `PullAlways`. - -#### kubelet Implementation - -Debug Containers are implemented in the kubelet's generic runtime manager. -Performing this operation with a legacy (non-CRI) runtime will result in a not -implemented error. Implementation in the kubelet will be split into the -following steps: - -##### Step 1: Container Type - -The first step is to add a feature gate to ensure all changes are off by -default. This will be added in the `pkg/features` `DefaultFeatureGate`. - -The runtime manager stores metadata about containers in the runtime via labels -(e.g. docker labels). These labels are used to populate the fields of -`kubecontainer.ContainerStatus`. Since the runtime manager needs to handle Debug -Containers differently in a few situations, we must add a new piece of metadata -to distinguish Debug Containers from regular containers. - -`startContainer()` will be updated to write a new label -`io.kubernetes.container.type` to the runtime. Existing containers will be -started with a type of `REGULAR` or `INIT`. When added in a subsequent step, -Debug Containers will start with the type `EPHEMERAL`. - -##### Step 2: Creation and Handling of Debug Containers - -This step adds methods for creating debug containers, but doesn't yet modify the -kubelet API. Since the runtime manager discards runtime (e.g. docker) labels -after populating `kubecontainer.ContainerStatus`, the label value will be stored -in a the new field `ContainerStatus.Type` so it can be used by `SyncPod()`. - -The kubelet gains a `RunDebugContainer()` method which accepts a `v1.Container` -and passes it on to the Runtime Manager's `RunDebugContainer()` if implemented. -Currently only the Generic Runtime Manager (i.e. the CRI) implements the -`DebugContainerRunner` interface. - -The Generic Runtime Manager's `RunDebugContainer()` calls `startContainer()` to -create the Debug Container. Additionally, `SyncPod()` is modified to skip Debug -Containers unless the sandbox is restarted. - -##### Step 3: kubelet API changes - -The kubelet exposes the new functionality in its existing `/exec/` endpoint. -`ServeExec()` constructs a `v1.Container` based on `PodExecOptions`, calls -`RunDebugContainer()`, and performs the attach. - -##### Step 4: Reporting EphemeralContainerStatus - -The last major change to the kubelet is to populate -v1.`PodStatus.EphemeralContainerStatuses` based on the -`kubecontainer.ContainerStatus` for the Debug Container. - -#### Kubernetes API Changes - -There are two changes to be made to the Kubernetes, which will be made -independently: - -1. `v1.PodExecOptions` must be extended with new fields. -1. `v1.PodStatus` gains a new field to hold Debug Container statuses. - -In all cases, new fields will be prepended with `Alpha` for the duration of this -feature's alpha status. - -#### kubectl changes - -In anticipation of this change, [#46151](https://pr.k8s.io/46151) added a -`kubectl alpha` command to contain alpha features. We will add `kubectl alpha -debug` to invoke Debug Containers. `kubectl` does not use feature gates, so -`kubectl alpha debug` will be visible by default in `kubectl` 1.9 and return an -error when used on a cluster with the feature disabled. - -`kubectl describe pod` will report the contents of `EphemeralContainerStatuses` -when not empty as it means the feature is enabled. The field will be hidden when -empty. +default. ## Appendices @@ -592,10 +439,10 @@ container image distribution mechanisms to fetch images when the debug command is run. **Respect admission restrictions.** Requests from kubectl are proxied through -the apiserver and so are available to existing [admission -controllers](https://kubernetes.io/docs/admin/admission-controllers/). Plugins -already exist to intercept `exec` and `attach` calls, but extending this to -support `debug` has not yet been scoped. +the apiserver and so are available to existing +[admission controllers](https://kubernetes.io/docs/admin/admission-controllers/). +Plugins already exist to intercept `exec` and `attach` calls, but extending this +to support `debug` has not yet been scoped. **Allow introspection of pod state using existing tools**. The list of `EphemeralContainerStatuses` is never truncated. If a debug container has run in @@ -629,26 +476,146 @@ active debug container. ### Appendix 3: Alternatives Considered -#### Mutable Pod Spec +#### Container Spec in PodStatus -Rather than adding an operation to have Kubernetes attach a pod we could instead -make the pod spec mutable so the client can generate an update adding a -container. `SyncPod()` has no issues adding the container to the pod at that -point, but an immutable pod spec has been a basic assumption in Kubernetes thus -far and changing it carries risk. It's preferable to keep the pod spec immutable -as a best practice. +Originally there was a desire to keep the pod spec immutable, so we explored +modifying only the pod status. An `EphemeralContainer` would contain a Spec, a +Status and a Target: -#### Ephemeral container +``` +// EphemeralContainer describes a container to attach to a running pod for troubleshooting. +type EphemeralContainer struct { + metav1.TypeMeta `json:",inline"` -An earlier version of this proposal suggested running an ephemeral container in -the pod namespaces. The container would not be added to the pod spec and would -exist only as long as the process it ran. This has the advantage of behaving -similarly to the current kubectl exec, but it is opaque and likely violates -design assumptions. We could add constructs to track and report on both -traditional exec process and exec containers, but this would probably be more -work than adding to the pod spec. Both are generally useful, and neither -precludes the other in the future, so we chose mutating the pod spec for -expedience. + // Spec describes the Ephemeral Container to be created. + Spec *Container `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` + + // Most recently observed status of the container. + // This data may not be up to date. + // Populated by the system. + // Read-only. + // +optional + Status *ContainerStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` + + // If set, the name of the container from PodSpec that this ephemeral container targets. + // If not set then the ephemeral container is run in whatever namespaces are shared + // for the pod. + TargetContainerName string `json:"targetContainerName,omitempty" protobuf:"bytes,4,opt,name=targetContainerName"` +} +``` + +Ephemeral Containers for a pod would be listed in the pod's status: + +``` +type PodStatus struct { + ... + // List of user-initiated ephemeral containers that have been run in this pod. + // +optional + EphemeralContainers []EphemeralContainer `json:"ephemeralContainers,omitempty" protobuf:"bytes,11,rep,name=ephemeralContainers"` + +} +``` + +To create a new Ephemeral Container, one would append a new `EphemeralContainer` +with the desired `v1.Container` as `Spec` in `Pod.Status` and updates the `Pod` +in the API. Users cannot normally modify the pod status, so we'd create a new +subresource `/ephemeralcontainers` that allows an update of solely +`EphemeralContainers` and enforces append-only semantics. + +Since we have a requirement to describe the Ephemeral Container with a +`v1.Container`, this lead to a "spec in status" that seemed to violate API best +practices. It was confusing, and it required added complexity in the kubelet to +persist and publish user intent, which is rightfully the job of the apiserver. + +#### Extend the Existing Exec API ("exec++") + +A simpler change is to extend `v1.Pod`'s `/exec` subresource to support +"executing" container images. The current `/exec` endpoint must implement `GET` +to support streaming for all clients. We don't want to encode a (potentially +large) `v1.Container` into a query string, so we must extend `v1.PodExecOptions` +with the specific fields required for creating a Debug Container: + +``` +// PodExecOptions is the query options to a Pod's remote exec call +type PodExecOptions struct { + ... + // EphemeralContainerName is the name of an ephemeral container in which the + // command ought to be run. Either both EphemeralContainerName and + // EphemeralContainerImage fields must be set, or neither. + EphemeralContainerName *string `json:"ephemeralContainerName,omitempty" ...` + + // EphemeralContainerImage is the image of an ephemeral container in which the command + // ought to be run. Either both EphemeralContainerName and EphemeralContainerImage + // fields must be set, or neither. + EphemeralContainerImage *string `json:"ephemeralContainerImage,omitempty" ...` +} +``` + +After creating the Ephemeral Container, the kubelet would upgrade the connection +to streaming and perform an attach to the container's console. If disconnected, +the Ephemeral Container could be reattached using the pod's `/attach` endpoint +with `EphemeralContainerName`. + +Ephemeral Containers could not be removed via the API and instead the process +must terminate. While not ideal, this parallels existing behavior of `kubectl +exec`. To kill an Ephemeral Container one would `attach` and exit the process +interactively or create a new Ephemeral Container to send a signal with +`kill(1)` to the original process. + +Since the user cannot specify the `v1.Container`, this approach sacrifices a +great deal of flexibility. This solution still requires the kubelet to publish a +`Container` spec in the `PodStatus` that can be examined for future admission +decisions and so retains many of the downsides of the Container Spec in +PodStatus approach. + +#### Ephemeral Container Controller + +Kubernetes prefers declarative APIs where the client declares a state for +Kubernetes to enact. We could implement this in a declarative manner by creating +a new `EphemeralContainer` type: + +``` +type EphemeralContainer struct { + metav1.TypeMeta + metav1.ObjectMeta + + Spec v1.Container + Status v1.ContainerStatus +} +``` + +A new controller in the kubelet would watch for EphemeralContainers and +create/delete debug containers. `EphemeralContainer.Status` would be updated by +the kubelet at the same time it updates `ContainerStatus` for regular and init +containers. Clients would create a new `EphemeralContainer` object, wait for it +to be started and then attach using the pod's attach subresource and the name of +the `EphemeralContainer`. + +A new controller is a significant amount of complexity to add to the kubelet, +especially considering that the kubelet is already watching for changes to pods. +The kubelet would have to be modified to create containers in a pod from +multiple config sources. SIG Node strongly prefers to minimize kubelet +complexity. + +#### Mutable Pod Spec Containers + +Rather than adding to the pod API, we could instead make the pod spec mutable so +the client can generate an update adding a container. `SyncPod()` has no issues +adding the container to the pod at that point, but an immutable pod spec has +been a basic assumption and best practice in Kubernetes. Changing this +assumption complicates the requirements of the kubelet state machine. Since the +kubelet was not written with this in mind, we should expect such a change would +create bugs we cannot predict. + +#### Image Exec + +An earlier version of this proposal suggested simply adding `Image` parameter to +the exec API. This would run an ephemeral container in the pod namespaces +without adding it to the pod spec or status. This container would exist only as +long as the process it ran. This parallels the current kubectl exec, including +its lack of transparency. We could add constructs to track and report on both +traditional exec process and exec containers. In the end this failed to meet our +transparency requirements. #### Attaching Container Type Volume @@ -669,9 +636,8 @@ this simplifies the solution by working within the existing constraints of If Kubernetes supported the concept of an "inactive" container, we could configure it as part of a pod and activate it at debug time. In order to avoid coupling the debug tool versions with those of the running containers, we would -need to ensure the debug image was pulled at debug time. The container could -then be run with a TTY and attached using kubectl. We would need to figure out a -solution that allows access the filesystem of other containers. +want to ensure the debug image was pulled at debug time. The container could +then be run with a TTY and attached using kubectl. The downside of this approach is that it requires prior configuration. In addition to requiring prior consideration, it would increase boilerplate config. @@ -681,14 +647,14 @@ than a feature of the platform. #### Implicit Empty Volume Kubernetes could implicitly create an EmptyDir volume for every pod which would -then be available as target for either the kubelet or a sidecar to extract a +then be available as a target for either the kubelet or a sidecar to extract a package of binaries. Users would have to be responsible for hosting a package build and distribution infrastructure or rely on a public one. The complexity of this solution makes it undesirable. -#### Standalone Pod in Shared Namespace +#### Standalone Pod in Shared Namespace ("Debug Pod") Rather than inserting a new container into a pod namespace, Kubernetes could instead support creating a new pod with container namespaces shared with @@ -698,21 +664,21 @@ useful, the containers in this "Debug Pod" should be run inside the namespaces (network, pid, etc) of the target pod but remain in a separate resource group (e.g. cgroup for container-based runtimes). -This would be a rather fundamental change to pod, which is currently treated as -an atomic unit. The Container Runtime Interface has no provisions for sharing +This would be a rather large change for pod, which is currently treated as an +atomic unit. The Container Runtime Interface has no provisions for sharing outside of a pod sandbox and would need a refactor. This could be a complicated change for non-container runtimes (e.g. hypervisor runtimes) which have more rigid boundaries between pods. -Effectively, Debug Pod must be implemented by the runtimes while Debug -Containers are implemented by the kubelet. Minimizing change to the Kubernetes -API is not worth the increased complexity for the kubelet and runtimes. +This is pushing the complexity of the solution from the kubelet to the runtimes. +Minimizing change to the Kubernetes API is not worth the increased complexity +for the kubelet and runtimes. It could also be possible to implement a Debug Pod as a privileged pod that runs in the host namespace and interacts with the runtime directly to run a new container in the appropriate namespace. This solution would be runtime-specific -and effectively pushes the complexity of debugging to the user. Additionally, -requiring node-level access to debug a pod does not meet our requirements. +and pushes the complexity of debugging to the user. Additionally, requiring +node-level access to debug a pod does not meet our requirements. #### Exec from Node @@ -729,8 +695,7 @@ coupling it with container images. * [Pod Troubleshooting Tracking Issue](https://issues.k8s.io/27140) * [CRI Tracking Issue](https://issues.k8s.io/28789) * [CRI: expose optional runtime features](https://issues.k8s.io/32803) -* [Resource QoS in - Kubernetes](resource-qos.md) +* [Resource QoS in Kubernetes](resource-qos.md) * Related Features * [#1615](https://issues.k8s.io/1615) - Shared PID Namespace across containers in a pod diff --git a/contributors/design-proposals/scheduling/images/scheduling-framework-extensions.png b/contributors/design-proposals/scheduling/images/scheduling-framework-extensions.png new file mode 100644 index 000000000..25f504710 Binary files /dev/null and b/contributors/design-proposals/scheduling/images/scheduling-framework-extensions.png differ diff --git a/contributors/design-proposals/scheduling/images/scheduling-framework-threads.png b/contributors/design-proposals/scheduling/images/scheduling-framework-threads.png new file mode 100644 index 000000000..ae9e1965d Binary files /dev/null and b/contributors/design-proposals/scheduling/images/scheduling-framework-threads.png differ diff --git a/contributors/design-proposals/scheduling/pod-priority-resourcequota.md b/contributors/design-proposals/scheduling/pod-priority-resourcequota.md index 019a50d76..a638a8253 100644 --- a/contributors/design-proposals/scheduling/pod-priority-resourcequota.md +++ b/contributors/design-proposals/scheduling/pod-priority-resourcequota.md @@ -48,13 +48,15 @@ Thus, we decide to reuse the existing `Scopes` of `ResourceQuotaSpec` to provide ## Overview -This design doc introduces how to define a group of priority class scopes for the quota to match with and explains how quota enforcement logic is changed to apply the quota to pods with the given priority classes. +This design doc introduces how to define a priority class scope and scope selectors for the quota to match with and explains how quota enforcement logic is changed to apply the quota to pods with the given priority classes. ## Detailed Design ### Changes in ResourceQuota ResourceQuotaSpec contains an array of filters, `Scopes`, that if mentioned, must match each object tracked by a ResourceQuota. + +A new field `scopeSelector` will be introduced. ```go // ResourceQuotaSpec defines the desired hard limits to enforce for Quota type ResourceQuotaSpec struct { @@ -64,22 +66,56 @@ type ResourceQuotaSpec struct { // If not specified, the quota matches all objects. // +optional Scopes []ResourceQuotaScope + // ScopeSelector is also a collection of filters like Scopes that must match each object tracked by a quota + // but expressed using ScopeSelectorOperator in combination with possible values. + // +optional + ScopeSelector *ScopeSelector } + +// A scope selector represents the AND of the selectors represented +// by the scoped-resource selector terms. +type ScopeSelector struct { + // A list of scope selector requirements by scope of the resources. + // +optional + MatchExpressions []ScopedResourceSelectorRequirement +} + +// A scoped-resource selector requirement is a selector that contains values, a scope name, and an operator +// that relates the scope name and values. +type ScopedResourceSelectorRequirement struct { + // The name of the scope that the selector applies to. + ScopeName ResourceQuotaScope + // Represents a scope's relationship to a set of values. + // Valid operators are In, NotIn, Exists, DoesNotExist. + Operator ScopeSelectorOperator + // An array of string values. If the operator is In or NotIn, + // the values array must be non-empty. If the operator is Exists or DoesNotExist, + // the values array must be empty. + // This array is replaced during a strategic merge patch. + // +optional + Values []string +} + +// A scope selector operator is the set of operators that can be used in +// a scope selector requirement. +type ScopeSelectorOperator string + +const ( + ScopeSelectorOpIn ScopeSelectorOperator = "In" + ScopeSelectorOpNotIn ScopeSelectorOperator = "NotIn" + ScopeSelectorOpExists ScopeSelectorOperator = "Exists" + ScopeSelectorOpDoesNotExist ScopeSelectorOperator = "DoesNotExist" +) ``` -Four new `ResourceQuotaScope` will be defined for matching pods based on priority class names. +A new `ResourceQuotaScope` will be defined for matching pods based on priority class names. + ```go // A ResourceQuotaScope defines a filter that must match each object tracked by a quota type ResourceQuotaScope string const ( ... - ResourceQuotaScopePriorityClassNameExists ResourceQuotaScope = "PriorityClassNameExists" - // Match all pod objects that do not have any priority class mentioned - ResourceQuotaScopePriorityClassNameNotExists ResourceQuotaScope = "PriorityClassNameNotExists" - // Match all pod objects that have priority class from the set - ResourceQuotaScopePriorityClassNameIn ResourceQuotaScope = "PriorityClassNameIn" - // Match all pod objects that do not have priority class from the set - ResourceQuotaScopePriorityClassNameNotIn ResourceQuotaScope = "PriorityClassNameNotIn" + ResourceQuotaScopePriorityClass ResourceQuotaScope = "PriorityClass" ) ``` @@ -99,17 +135,15 @@ type Configuration struct { // its consumption. type LimitedResource struct { ... - - // MatchScopes is a collection of filters based on priority classes. - // If the object in the intercepted request matches these rules, - // quota system will ensure that corresponding quota MUST have - // priority based Scopes matching the object in request. - // - // If MatchScopes has matched on an object, request for the resource will be denied - // if there is no quota with matching Scopes. In this case, matching priority class based Scopes - // will be an additional requirement for any quota to qualified as covering quota. + // For each intercepted request, the quota system will figure out if the input object + // satisfies a scope which is present in this listing, then + // quota system will ensure that there is a covering quota. In the + // absence of a covering quota, the quota system will deny the request. + // For example, if an administrator wants to globally enforce that + // a quota must exist to create a pod with "cluster-services" priorityclass + // the list would include "scopeName=PriorityClass, Operator=In, Value=cluster-services" // +optional - MatchScopes []string `json:"matchScopes,omitempty"` + MatchScopes []v1.ScopedResourceSelectorRequirement `json:"matchScopes,omitempty"` } ``` @@ -141,24 +175,42 @@ kind: AdmissionConfiguration plugins: - name: "ResourceQuota" configuration: - apiVersion: resourcequota.admission.k8s.io/v1alpha1 - kind: Configuration - limitedResources: - - resource: pods - matchScopes: - - "ResourceQuotaScopePriorityClassNameIn:cluster-services" + apiVersion: resourcequota.admission.k8s.io/v1alpha1 + kind: Configuration + limitedResources: + - resource: pods + matchScopes: + - scopeName: PriorityClass + operator: In + values: ["cluster-services"] ``` 2. Admin will then create a corresponding resource quota object in `kube-system` namespace: - `$ kubectl create quota critical --hard=count/pods=10 --scopes=ResourceQuotaScopePriorityClassNameIn:cluster-services -n kube-system` +```shell +$ cat ./quota.yml +- apiVersion: v1 + kind: ResourceQuota + metadata: + name: pods-cluster-services + spec: + hard: + pods: "10" + scopeSelector: + matchExpressions: + - operator : In + scopeName: PriorityClass + values: ["cluster-services"] + +$ kubectl create -f ./quota.yml -n kube-system` +``` In this case, a pod creation will be allowed if: 1. Pod has no priority class and created in any namespace. -2. Pod has priority class other than `cluster-service` and created in any namespace. -3. Pod has priority class `cluster-service` and created in `kube-system` namespace, and passed resource quota check. +2. Pod has priority class other than `cluster-services` and created in any namespace. +3. Pod has priority class `cluster-services` and created in `kube-system` namespace, and passed resource quota check. -Pod creation will be rejected if pod has priority class `cluster-service` and created in namespace other than `kube-system` +Pod creation will be rejected if pod has priority class `cluster-services` and created in namespace other than `kube-system` #### Sample User Story 2 @@ -172,15 +224,31 @@ kind: AdmissionConfiguration plugins: - name: "ResourceQuota" configuration: - apiVersion: resourcequota.admission.k8s.io/v1alpha1 - kind: Configuration - limitedResources: - - resource: pods - matchScopes: - - "ResourceQuotaScopePriorityClassNameExists" + apiVersion: resourcequota.admission.k8s.io/v1alpha1 + kind: Configuration + limitedResources: + - resource: pods + matchScopes: + - operator : Exists + scopeName: PriorityClass ``` 2. Create resource quota to match all pods where there is priority set - `$ kubectl create quota example --hard=count/pods=10 --scopes=ResourceQuotaScopePriorityClassNameExists` +```shell +$ cat ./quota.yml +- apiVersion: v1 + kind: ResourceQuota + metadata: + name: pods-cluster-services + spec: + hard: + pods: "10" + scopeSelector: + matchExpressions: + - operator : In + scopeName: PriorityClass + values: ["cluster-services"] +$ kubectl create -f ./quota.yml -n kube-system` +``` diff --git a/contributors/design-proposals/scheduling/rescheduling.md b/contributors/design-proposals/scheduling/rescheduling.md index db9609346..fa06cdc4a 100644 --- a/contributors/design-proposals/scheduling/rescheduling.md +++ b/contributors/design-proposals/scheduling/rescheduling.md @@ -28,7 +28,7 @@ implied. However, describing the process as "moving" the pod is approximately ac and easier to understand, so we will use this terminology in the document. We use the term "rescheduling" to describe any action the system takes to move an -already-running pod. The decision may be made and executed by any component; we wil +already-running pod. The decision may be made and executed by any component; we will introduce the concept of a "rescheduler" component later, but it is not the only component that can do rescheduling. @@ -177,7 +177,7 @@ topic that is outside the scope of this document. For example, resource fragment RequiredDuringScheduling node and pod affinity and anti-affinity means that even if the sum of the quotas at the top priority level is less than or equal to the total aggregate capacity of the cluster, some pods at the top priority level might still go pending. In -general, priority provdes a *probabilistic* guarantees of pod schedulability in the face +general, priority provides a *probabilistic* guarantees of pod schedulability in the face of overcommitment, by allowing prioritization of which pods should be allowed to run pods when demand for cluster resources exceeds supply. diff --git a/contributors/design-proposals/scheduling/schedule-DS-pod-by-scheduler.md b/contributors/design-proposals/scheduling/schedule-DS-pod-by-scheduler.md index c0c7dffa1..c7038eacb 100644 --- a/contributors/design-proposals/scheduling/schedule-DS-pod-by-scheduler.md +++ b/contributors/design-proposals/scheduling/schedule-DS-pod-by-scheduler.md @@ -45,22 +45,21 @@ This option is to leverage NodeAffinity feature to avoid introducing scheduler 1. DS controller filter nodes by nodeSelector, but does NOT check against scheduler’s predicates (e.g. PodFitHostResources) 2. For each node, DS controller creates a Pod for it with the following NodeAffinity + ```yaml + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - nodeSelectorTerms: + matchExpressions: + - key: kubernetes.io/hostname + operator: in + values: + - dest_hostname + ``` 3. When sync Pods, DS controller will map nodes and pods by this NodeAffinity to check whether Pods are started for nodes 4. In scheduler, DaemonSet Pods will stay pending if scheduling predicates fail. To avoid this, an appropriate priority must be set to all critical DaemonSet Pods. Scheduler will preempt other pods to ensure critical pods were scheduled even when the cluster is under resource pressure. -```yaml -nodeAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - - nodeSelectorTerms: - matchExpressions: - - key: kubernetes.io/hostname - operator: in - values: - - dest_hostname -``` - ## Reference * [DaemonsetController can't feel it when node has more resources, e.g. other Pod exits](https://github.com/kubernetes/kubernetes/issues/46935) diff --git a/contributors/design-proposals/scheduling/scheduler-equivalence-class.md b/contributors/design-proposals/scheduling/scheduler-equivalence-class.md index fdc2e8d34..808de966e 100644 --- a/contributors/design-proposals/scheduling/scheduler-equivalence-class.md +++ b/contributors/design-proposals/scheduling/scheduler-equivalence-class.md @@ -190,7 +190,7 @@ Please note with the change of predicates in subsequent development, this doc wi - **Invalid predicates:** - - `MaxPDVolumeCountPredicate` (only if the added/deleted PVC as a binded volume so it drops to the PV change case, otherwise it should not affect scheduler). + - `MaxPDVolumeCountPredicate` (only if the added/deleted PVC as a bound volume so it drops to the PV change case, otherwise it should not affect scheduler). - **Scope:** - All nodes (we don't know which node this PV will be attached to). @@ -229,14 +229,14 @@ Please note with the change of predicates in subsequent development, this doc wi - **Invalid predicates:** - `GeneralPredicates`. This invalidate should be done during `scheduler.assume(...)` because binding can be asynchronous. So we just optimistically invalidate predicate cached result there, and if later this pod failed to bind, the following pods will go through normal predicate functions and nothing breaks. - - No `MatchInterPodAffinity`: the scheduler will make sure newly binded pod will not break the existing inter pod affinity. So we does not need to invalidate MatchInterPodAffinity when pod added. But when a pod is deleted, existing inter pod affinity may become invalid. (e.g. this pod was preferred by some else, or vice versa). + - No `MatchInterPodAffinity`: the scheduler will make sure newly bound pod will not break the existing inter pod affinity. So we do not need to invalidate MatchInterPodAffinity when pod added. But when a pod is deleted, existing inter pod affinity may become invalid. (e.g. this pod was preferred by some else, or vice versa). - NOTE: assumptions above **will not** stand when we implemented features like `RequiredDuringSchedulingRequiredDuringExecution`. - No `NoDiskConflict`: the newly scheduled pod fits to existing pods on this node, it will also fits to equivalence class of existing pods. - **Scope:** - - The node which the pod was binded with. + - The node where the pod is bound. @@ -252,7 +252,7 @@ Please note with the change of predicates in subsequent development, this doc wi - `MatchInterPodAffinity` if the pod's labels are updated. - **Scope:** - - The node which the pod was binded with + - The node where the pod is bound. @@ -270,7 +270,7 @@ Please note with the change of predicates in subsequent development, this doc wi - `NoDiskConflict` if the pod has special volume like `RBD`, `ISCSI`, `GCEPersistentDisk` etc. - **Scope:** - - The node which the pod was binded with. + - The node where the pod is bound. ### 3.5 Node diff --git a/contributors/design-proposals/scheduling/scheduling-framework.md b/contributors/design-proposals/scheduling/scheduling-framework.md new file mode 100644 index 000000000..39ff7db2f --- /dev/null +++ b/contributors/design-proposals/scheduling/scheduling-framework.md @@ -0,0 +1,436 @@ + +Status: Draft +Created: 2018-04-09 / Last updated: 2018-08-15 +Author: bsalamat +Contributors: misterikkit + +--- + +# +- [SUMMARY ](#summary-) +- [OBJECTIVE](#objective) + - [Terminology](#terminology) +- [BACKGROUND](#background) +- [OVERVIEW](#overview) + - [Non-goals](#non-goals) +- [DETAILED DESIGN](#detailed-design) + - [Bare bones of scheduling](#bare-bones-of-scheduling) + - [Communication and statefulness of plugins](#communication-and-statefulness-of-plugins) + - [Plugin registration](#plugin-registration) + - [Extension points](#extension-points) + - [Scheduling queue sort](#scheduling-queue-sort) + - [Pre-filter](#pre-filter) + - [Filter](#filter) + - [Post-filter](#post-filter) + - [Scoring](#scoring) + - [Post-scoring/pre-reservation](#post-scoringpre-reservation) + - [Reserve](#reserve) + - [Permit](#permit) + - [Approving a Pod binding](#approving-a-pod-binding) + - [Reject](#reject) + - [Pre-Bind](#pre-bind) + - [Bind](#bind) + - [Post Bind](#post-bind) +- [USE-CASES](#use-cases) + - [Dynamic binding of cluster-level resources](#dynamic-binding-of-cluster-level-resources) + - [Gang Scheduling](#gang-scheduling) +- [OUT OF PROCESS PLUGINS](#out-of-process-plugins) +- [CONFIGURING THE SCHEDULING FRAMEWORK](#configuring-the-scheduling-framework) +- [BACKWARD COMPATIBILITY WITH SCHEDULER v1](#backward-compatibility-with-scheduler-v1) +- [DEVELOPMENT PLAN](#development-plan) +- [TESTING PLAN](#testing-plan) +- [WORK ESTIMATES ](#work-estimates) + +# SUMMARY + +This document describes the Kubernetes Scheduling Framework. The scheduling +framework implements only basic functionality, but exposes many extension points +for plugins to expand its functionality. The plan is that this framework (with +its plugins) will eventually replace the current Kubernetes scheduler. + +# OBJECTIVE + +- make scheduler more extendable. +- Make scheduler core simpler by moving some of its features to plugins. +- Propose extension points in the framework. +- Propose a mechanism to receive plugin results and continue or abort based + on the received results. +- Propose a mechanism to handle errors and communicate it with plugins. + +## Terminology + +Scheduler v1, current scheduler: refer to existing scheduler of Kubernetes. +Scheduler v2, scheduling framework: refer to the new scheduler proposed in this +doc. + +# BACKGROUND + +Many features are being added to the Kubernetes default scheduler. They keep +making the code larger and logic more complex. A more complex scheduler is +harder to maintain, its bugs are harder to find and fix, and those users running +a custom scheduler have a hard time catching up and integrating new changes. +The current Kubernetes scheduler provides +[webhooks to extend](./scheduler_extender.md) +its functionality. However, these are limited in a few ways: + +1. The number of extension points are limited: "Filter" extenders are called + after default predicate functions. "Prioritize" extenders are called after + default priority functions. "Preempt" extenders are called after running + default preemption mechanism. "Bind" verb of the extenders are used to bind + a Pod. Only one of the extenders can be a binding extender, and that + extender performs binding instead of the scheduler. Extenders cannot be + invoked at other points, for example, they cannot be called before running + predicate functions. +1. Every call to the extenders involves marshaling and unmarshalling JSON. + Calling a webhook (HTTP request) is also slower than calling native functions. +1. It is hard to inform an extender that scheduler has aborted scheduling of + a Pod. For example, if an extender provisions a cluster resource and + scheduler contacts the extender and asks it to provision an instance of the + resource for the Pod being scheduled and then scheduler faces errors + scheduling the Pod and decides to abort the scheduling, it will be hard to + communicate the error with the extender and ask it to undo the provisioning + of the resource. +1. Since current extenders run as a separate process, they cannot use + scheduler's cache. They must either build their own cache from the API + server or process only the information they receive from the default scheduler. + +The above limitations hinder building high performance and versatile scheduler +extensions. We would ideally like to have an extension mechanism that is fast +enough to allow keeping a bare minimum logic in the scheduler core and convert +many of the existing features of default scheduler, such as predicate and +priority functions and preemption into plugins. Such plugins will be compiled +with the scheduler. We would also like to provide an extension mechanism that do +not need recompilation of scheduler. The expected performance of such plugins is +lower than in-process plugins. Such out-of-process plugins should be used in +cases where quick invocation of the plugin is not a constraint. + +# OVERVIEW + +Scheduler v2 allows both built-in and out-of-process extenders. This new +architecture is a scheduling framework that exposes several extension points +during a scheduling cycle. Scheduler plugins can register to run at one or more +extension points. + +#### Non-goals + +- We will keep Kubernetes API backward compatibility, but keeping scheduler + v1 backward compatibility is a non-goal. Particularly, scheduling policy + config and v1 extenders won't work in this new framework. +- Solve all the scheduler v1 limitations, although we would like to ensure + that the new framework allows us to address known limitations in the future. +- Provide implementation details of plugins and call-back functions, such as + all of their arguments and return values. + +# DETAILED DESIGN + +## Bare bones of scheduling + +Pods that are not assigned to any node go to a scheduling queue and sorted by +order specified by plugins (described [here](#scheduling-queue-sort)). The +scheduling framework picks the head of the queue and starts a **scheduling +cycle** to schedule the pod. At the end of the cycle scheduler determines +whether the pod is schedulable or not. If the pod is not schedulable, its status +is updated and goes back to the scheduling queue. If the pod is schedulable (one +or more nodes are found that can run the Pod), the scoring process is started. +The scoring process finds the best node to run the Pod. Once the best node is +picked, the scheduler updates its cache and then a bind go routine is started to +bind the pod. +The above process is the same as what Kubernetes scheduler v1 does. Some of the +essential features of scheduler v1, such as leader election, will also be +transferred to the scheduling framework. +In the rest of this section we describe how various plugins are used to enrich +this basic workflow. This document focuses on in-process plugins. +Out-of-process plugins are discussed later in a separate doc. + +## Communication and statefulness of plugins + +The scheduling framework provides a library that plugins can use to pass +information to other plugins. This library keeps a map from keys of type string +to opaque pointers of type interface{}. A write operation takes a key and a +pointer and stores the opaque pointer in the map with the given key. Other +plugins can provide the key and receive the opaque pointer. Multiple plugins can +share the state or communicate via this mechanism. +The saved state is preserved only during a single scheduling cycle. At the end +of a scheduling cycle, this map is destructed. So, plugins cannot keep shared +state across multiple scheduling cycle. They can, however, update the scheduler +cache via the provided interface of the cache. The cache interface allows +limited state preservation across multiple scheduling cycle. +It is worth noting that plugins are assumed to be **trusted**. Scheduler does +not prevent one plugin from accessing or modifying another plugin's state. + +## Plugin registration + +Plugin registration is done by providing an extension point and a function that +should be called at that extension point. This step will be something like: + +```go +register("pre-filter", plugin.foo) +``` + +The details of the function signature will be provided later. + +## Extension points + +The following picture shows the scheduling cycle of a Pod and the extension +points that the scheduling framework exposes. In this picture "Filter" is +equivalent to "Predicate" in scheduler v1 and "Scoring" is equivalent to +"Priority function". Plugins are go functions. They are registered to be called +at one of these extension points. They are called by the framework in the same +order they are registered for each extension point. +In the following sections we describe each extension point in the same order +they are called in a schedule cycle. + +![image](images/scheduling-framework-extensions.png) + +### Scheduling queue sort + +These plugins indicate how Pods should be sorted in the scheduling queue. A +plugin registered at this point only returns greater, smaller, or equal to +indicate an ordering between two Pods. In other words, a plugin at this +extension point returns the answer to "less(pod1, pod2)". Multiple plugins may +be registered at this point. Plugins registered at this point are called in +order and the invocation continues as long as plugins return "equal". Once a +plugin returns "greater" or "smaller" the invocation of these plugins are +stopped. + +### Pre-filter + +These plugins are generally useful to check certain conditions that the cluster +or the Pod must meet. These are also useful to perform pre-processing on the pod +and store some information about the pod that can be used by other plugins. +The pod pointer is passed as an argument to these plugins. If any of these +plugins return an error, the scheduling cycle is aborted. +These plugins are called serially in the same order registered. + +### Filter + +Filter plugins filter out nodes that cannot run the Pod. Scheduler runs these +plugins per node in the same order that they are registered, but scheduler may +run these filter function for multiple nodes in parallel. So, these plugins must +use synchronization when they modify state. +Scheduler stops running the remaining filter functions for a node once one of +these filters fails for the node. + +### Post-filter + +The Pod and the set of nodes that can run the Pod are passed to these plugins. +They are called whether Pod is schedulable or not (whether the set of nodes is +empty or non-empty). +If any of these plugins return an error or if the Pod is determined +unschedulable, the scheduling cycle is aborted. +These plugins are called serially. + +### Scoring + +These plugins are similar to priority function in scheduler v1. They are +utilized to rank nodes that have passed the filtering stage. Similar to Filter +plugins, these are called per node serially in the same order registered, but +scheduler may run them for multiple nodes in parallel. +Each one of these functions return a score for the given node. The score is +multiplied by the weight of the function and aggregated with the result of other +scoring functions to yield a total score for the node. +These functions can never block scheduling. In case of an error they should +return zero for the Node being ranked. + +### Post-scoring/pre-reservation + +After all scoring plugins are invoked and the score of nodes are determined, the +framework picks the best node with the highest score and then it calls +post-scoring plugins. The Pod and the chosen Node are passed to these plugins. +These plugins have one more chance to check any conditions about the assignment +of the Pod to this Node and reject the node if needed. + +![image](images/scheduling-framework-threads.png) + +### Reserve + +At this point scheduler updates its cache by "reserving" a Node (partially or +fully) for the Pod. In scheduler v1 this stage is called "assume". +At this point, only the scheduler cache is updated to +reflect that the Node is (partially) reserved for the Pod. The scheduling +framework calls plugins registered at this extension points so that they get a +chance to perform cache updates or other accounting activities. These plugins +do not return any value (except errors). + +The actual assignment of the Node to the Pod happens during the "Bind" phase. +That is when the API server updates the Pod object with the Node information. + +### Permit + +Permit plugins run in a separate go routine (in parallel). Each plugin can return +one of the three possible values: 1) "permit", 2) "deny", or 3) "wait". If all +plugins registered at this extension point return "permit", the pod is sent to +the next step for binding. If any of the plugins returns "deny", the pod is +rejected and sent back to the scheduling queue. If any of the plugins returns +"wait", the Pod is kept in reserved state until it is explicitly approved for +binding. A plugin that returns "wait" must return a "timeout" as well. If the +timeout expires, the pod is rejected and goes back to the scheduling queue. + +#### Approving a Pod binding + +While any plugin can receive the list of reserved Pod from the cache and approve +them, we expect only the "Permit" plugins to approve binding of reserved Pods +that are in "waiting" state. Once a Pod is approved, it is sent to the Bind +stage. + +### Reject + +Plugins called at "Permit" may perform some operations that should be undone if +the Pod reservation fails. The "Reject" extension point allows such clean-up +operations to happen. Plugins registered at this point are called if the +reservation of the Pod is cancelled. The reservation is cancelled if any of the +"Permit" plugins returns "reject" or if a Pod reservation, which is in "wait" +state, times out. + +### Pre-Bind + +When a Pod is approved for binding it reaches to this stage. These plugins run +before the actual binding of the Pod to a Node happens. The binding starts only +if all of these plugins return true. If any returns false, the Pod is rejected +and sent back to the scheduling queue. These plugins run in a separate go +routine. The same go routine runs "Bind" after these plugins when all of them +return true. + +### Bind + +Once all pre-bind plugins return true, the Bind plugins are executed. Multiple +plugins may be registered at this extension point. Each plugin may return true +or false (or an error). If a plugin returns false, the next plugin will be +called until a plugin returns true. Once a true is returned **the remaining +plugins are skipped**. If any of the plugins returns an error or all of them +return false, the Pod is rejected and sent back to the scheduling queue. + +### Post Bind + +The Post Bind plugins can be useful for housekeeping after a pod is scheduled. +These plugins do not return any value and are not expected to influence the +scheduling decision made in the scheduling cycle. + +### Informer Events + +The scheduling framework, similar to Scheduler v1, will have informers that let +the framework keep its copy of the state of the cluster up-to-date. The +informers generate events, such as "PodAdd", "PodUpdate", "PodDelete", etc. The +framework allows plugins to register their own handlers for any of these events. +The handlers allow plugins with internal state or caches to keep their state +updated. + +# USE-CASES + +In this section we provide a couple of examples on how the scheduling framework +can be used to solve common scheduling scenarios. + +### Dynamic binding of cluster-level resources + +Cluster level resources are resources which are not immediately available on +nodes at the time of scheduling Pods. Scheduler needs to ensure that such +cluster level resources are bound to a chosen Node before it can schedule a Pod +that requires such resources to the Node. We refer to this type of binding of +resources to Nodes at the time of scheduling Pods as dynamic resource binding. +Dynamic resource binding has proven to be a challenge in Scheduler v1, because +Scheduler v1 is not flexible enough to support various types of plugins at +different phases of scheduling. As a result, binding of storage volumes is +integrated in the scheduler code and some non-trivial changes are done to the +scheduler extender to support dynamic binding of network GPUs. +The scheduling framework allows such dynamic bindings in a cleaner way. The main +thread of scheduling framework process a pending Pod that requests a network +resource and finds a node for the Pod and reserves the Pod. A dynamic resource +binder plugin installed at "Pre-Bind" stage is invoked (in a separate thread). +It analyzes the Pod and when detects that the Pod needs dynamic binding of the +resource, the plugin tries to attach the cluster resource to the chosen node and +then returns true so that the Pod can be bound. If the resource attachment +fails, it returns false and the Pod will be retried. +When there are multiple of such network resources, each one of them installs one +"pre-bind" plugin. Each plugin looks at the Pod and if the Pod is not requesting +the resource that they are interested in, they simply return "true" for the +pod. + +### Gang Scheduling + +Gang scheduling allows a certain number of Pods to be scheduled simultaneously. +If all the members of the gang cannot be scheduled at the same time, none of +them should be scheduled. Gang scheduling may have various other features as +well, but in this context we are interested in simultaneous scheduling of Pods. +Gang scheduling in the scheduling framework can be done with an "Permit" plugin. +The main scheduling thread processes pods one by one and reserves nodes for +them. The gang scheduling plugin at the Permit stage is invoked for each pod. +When it finds that the pod belongs to a gang, it checks the properties of the +gang. If there are not enough members of the gang which are scheduled or in +"wait" state, the plugin returns "wait". When the number reaches the desired +value, all the Pods in wait state are approved and sent for binding. + +# OUT OF PROCESS PLUGINS + +Out of process plugins (OOPP) are called via JSON over an HTTP interface. In +other words, the scheduler will support webhooks at most (maybe all) of the +extension points. Data sent to an OOPP must be marshalled to JSON and data +received must be unmarshalled. So, calling an OOPP is significantly slower than +in-process plugins. +We do not plan to build OOPPs in the first version of the scheduling framework. +So, more details on them is to be determined. + + +# DEVELOPMENT PLAN + +Earlier, we wanted to develop the scheduling framework as an independent project +from scheduler V1. However, that would need much engineering resources. +It would also be more difficult to roll out a new and not fully-backward +compatible scheduler in Kubernetes where tens of thousands of users depend on +the behavior of the scheduler. +After revisiting the ideas and challenges, we changed our plan and have decided +to build some of the ideas of the scheduling framework into Scheduler V1 to make +it more extendable. + +As the first step, we would like to build: + 1. [Pre-bind](#pre-bind) and [Reserve](#reserve) plugin points. These will + help us move our existing cluster resource binding code, such as persistent + volume binding, to plugins. + 1. We will also build + [the plugin communication mechanism](#communication-and-statefulness-of-plugins). + This will allow us to build more sophisticated plugins that would require + communication and also help us clean up existing scheduler's code by removing + existing transient cache data. + +More features of the framework can be added to the Scheduler in the future based +on the requirements. + + +# CONFIGURING THE SCHEDULING FRAMEWORK + +TBD + +# BACKWARD COMPATIBILITY WITH SCHEDULER v1 + +We will build a new set of plugins for scheduler v2 to ensure that the existing +behavior of scheduler v1 in placing Pods on nodes is preserved. This includes +building plugins that replicate default predicate and priority functions of +scheduler v1 and its binding mechanism, but scheduler extenders built for +scheduler v1 won't be compatible with scheduler v2. Also, predicate and priority +functions which are not enabled by default (such as service affinity) are not +guaranteed to exist in scheduler v2. + +# DEVELOPMENT PLAN + +We will develop the scheduling framework as an incubator project in SIG +scheduling. It will be built in a separate code-base independently from +scheduler v1, but we will probably use a lot of code from scheduler v1. + +# TESTING PLAN + +We will add unit-tests as we build functionalities of the scheduling framework. +The scheduling framework should eventually be able to pass integration and e2e +tests of scheduler v1, excluding those tests that involve scheduler extensions. +The e2e and integration tests may need to be modified slightly as the +initialization and configuration of the scheduling framework will be different +than scheduler v1. + +# WORK ESTIMATES + +We expect to see an early version of the scheduling framework in two release +cycles (end of 2018). If things go well, we will start offering it as an +alternative to the scheduler v1 by the end of Q1 2019 and start the deprecation +of scheduler v1. We will make it the default scheduler of Kubernetes in Q2 2019, +but we will keep the option of using scheduler v1 for at least two more release +cycles. + + diff --git a/contributors/design-proposals/scheduling/taint-node-by-condition.md b/contributors/design-proposals/scheduling/taint-node-by-condition.md index 550e9cd9a..2e352d4f4 100644 --- a/contributors/design-proposals/scheduling/taint-node-by-condition.md +++ b/contributors/design-proposals/scheduling/taint-node-by-condition.md @@ -19,8 +19,8 @@ In addition to this, with taint-based-eviction, the Node Controller already tain | ------------------ | ------------------ | ------------ | -------- | |Ready |True | - | | | |False | NoExecute | node.kubernetes.io/not-ready | -| |Unknown | NoExecute | node.kubernetes.io/unreachable | -|OutOfDisk |True | NoSchedule | node.kubernetes.io/out-of-disk | +| |Unknown | NoExecute | node.kubernetes.io/unreachable | +|OutOfDisk |True | NoSchedule | node.kubernetes.io/out-of-disk | | |False | - | | | |Unknown | - | | |MemoryPressure |True | NoSchedule | node.kubernetes.io/memory-pressure | @@ -32,6 +32,9 @@ In addition to this, with taint-based-eviction, the Node Controller already tain |NetworkUnavailable |True | NoSchedule | node.kubernetes.io/network-unavailable | | |False | - | | | |Unknown | - | | +|PIDPressure |True | NoSchedule | node.kubernetes.io/pid-pressure | +| |False | - | | +| |Unknown | - | | For example, if a CNI network is not detected on the node (e.g. a network is unavailable), the Node Controller will taint the node with `node.kubernetes.io/network-unavailable=:NoSchedule`. This will then allow users to add a toleration to their `PodSpec`, ensuring that the pod can be scheduled to this node if necessary. If the kubelet did not update the node’s status after a grace period, the Node Controller will only taint the node with `node.kubernetes.io/unreachable`; it will not taint the node with any unknown condition. diff --git a/contributors/design-proposals/scheduling/taint-toleration-dedicated.md b/contributors/design-proposals/scheduling/taint-toleration-dedicated.md index e451f3952..dc7a64835 100644 --- a/contributors/design-proposals/scheduling/taint-toleration-dedicated.md +++ b/contributors/design-proposals/scheduling/taint-toleration-dedicated.md @@ -87,7 +87,7 @@ allowed to use that new dedicated node group. ```go // The node this Taint is attached to has the effect "effect" on -// any pod that that does not tolerate the Taint. +// any pod that does not tolerate the Taint. type Taint struct { Key string `json:"key" patchStrategy:"merge" patchMergeKey:"key"` Value string `json:"value,omitempty"` diff --git a/contributors/design-proposals/storage/attacher-detacher-refactor-for-local-storage.md b/contributors/design-proposals/storage/attacher-detacher-refactor-for-local-storage.md new file mode 100644 index 000000000..0833aa0a3 --- /dev/null +++ b/contributors/design-proposals/storage/attacher-detacher-refactor-for-local-storage.md @@ -0,0 +1,281 @@ +--- + +title: Attacher/Detacher refactor for local storage + +authors: +- "@NickrenREN" + +owning-sig: sig-storage + +participating-sigs: + - nil + +reviewers: + - "@msau42" + - "@jsafrane" + +approvers: + - "@jsafrane" + - "@msau42" + - "@saad-ali" + +editor: TBD + +creation-date: 2018-07-30 + +last-updated: 2018-07-30 + +status: provisional + +--- + +## Table of Contents + * [Table of Contents](#table-of-contents) +* [Summary](#summary) +* [Motivation](#motivation) + * [Goals](#goals) + * [Non-Goals](#non-goals) +* [Proposal](#proposal) +* [Implementation](#implementation) + * [Volume plugin interface change](#volume-plugin-interface-change) + * [MountVolume/UnmountDevice generation function change](#MountVolume/UnmountDevice-generation-function-change) + * [Volume plugin change](#volume-plugin-change) +* [Future](#future) + +## Summary + +Today, the workflow for a volume to be used by pod is: + +- attach a remote volume to the node instance (if it is attachable) +- wait for the volume to be attached (if it is attachable) +- mount the device to a global path (if it is attachable) +- mount the global path to a pod directory + +It is ok for remote block storage plugins which have a remote attach api,such as `GCE PD`, `AWS EBS` +and remote fs storage plugins such as `NFS`, and `Cephfs`. + +But it is not so good for plugins which need local attach such as `fc`, `iscsi` and `RBD`. + +It is not so good for local storage neither which is not attachable but needs `MountDevice` + + +## Motivation + +### Goals + + Update Attacher/Detacher interfaces for local storage + +### Non-Goals + + Update `fc`, `iscsi` and `RBD` implementation according to the new interfaces + +## Proposal + +Here we propose to only update the Attacher/Detacher interfaces for local storage. +We may expand it in future to `iscsi`, `RBD` and `fc`, if we figure out how to prevent multiple local attach without implementing attacher interface. + +## Implementation + +### Volume plugin interface change + +We can create a new interface `DeviceMounter`, move `GetDeviceMountPath` and `MountDevice` from `Attacher`to it. + +We can put `DeviceMounter` in `Attacher` which means any one who implements the `Attacher` interface must implement `DeviceMounter`. + +``` +// Attacher can attach a volume to a node. +type Attacher interface { + DeviceMounter + + // Attaches the volume specified by the given spec to the node with the given Name. + // On success, returns the device path where the device was attached on the + // node. + Attach(spec *Spec, nodeName types.NodeName) (string, error) + + // VolumesAreAttached checks whether the list of volumes still attached to the specified + // node. It returns a map which maps from the volume spec to the checking result. + // If an error is occurred during checking, the error will be returned + VolumesAreAttached(specs []*Spec, nodeName types.NodeName) (map[*Spec]bool, error) + + // WaitForAttach blocks until the device is attached to this + // node. If it successfully attaches, the path to the device + // is returned. Otherwise, if the device does not attach after + // the given timeout period, an error will be returned. + WaitForAttach(spec *Spec, devicePath string, pod *v1.Pod, timeout time.Duration) (string, error) +} + +// DeviceMounter can mount a block volume to a global path. +type DeviceMounter interface { + // GetDeviceMountPath returns a path where the device should + // be mounted after it is attached. This is a global mount + // point which should be bind mounted for individual volumes. + GetDeviceMountPath(spec *Spec) (string, error) + + // MountDevice mounts the disk to a global path which + // individual pods can then bind mount + // Note that devicePath can be empty if the volume plugin does not implement any of Attach and WaitForAttach methods. + MountDevice(spec *Spec, devicePath string, deviceMountPath string) error +} + +``` + +Note: we also need to make sure that if our plugin implements the `DeviceMounter` interface, +then executing mount operation from multiple pods referencing the same volume in parallel should be avoided, +even if it does not implement the `Attacher` interface. + +Since `NestedPendingOperations` can achieve this by setting the same volumeName and same or empty podName in one operation, +we just need to add another check in `MountVolume`: check if the volume is DeviceMountable. + +We also need to create another new interface `DeviceUmounter`, and move `UnmountDevice` to it. +``` +// Detacher can detach a volume from a node. +type Detacher interface { + DeviceUnmounter + + // Detach the given volume from the node with the given Name. + // volumeName is name of the volume as returned from plugin's + // GetVolumeName(). + Detach(volumeName string, nodeName types.NodeName) error +} + +// DeviceUnmounter can unmount a block volume from the global path. +type DeviceUnmounter interface { + // UnmountDevice unmounts the global mount of the disk. This + // should only be called once all bind mounts have been + // unmounted. + UnmountDevice(deviceMountPath string) error +} +``` +Accordingly, we need to create a new interface `DeviceMountableVolumePlugin` and move `GetDeviceMountRefs` to it. +``` +// AttachableVolumePlugin is an extended interface of VolumePlugin and is used for volumes that require attachment +// to a node before mounting. +type AttachableVolumePlugin interface { + DeviceMountableVolumePlugin + NewAttacher() (Attacher, error) + NewDetacher() (Detacher, error) +} + +// DeviceMountableVolumePlugin is an extended interface of VolumePlugin and is used +// for volumes that requires mount device to a node before binding to volume to pod. +type DeviceMountableVolumePlugin interface { + VolumePlugin + NewDeviceMounter() (DeviceMounter, error) + NewDeviceUmounter() (DeviceUmounter, error) + GetDeviceMountRefs(deviceMountPath string) ([]string, error) +} +``` + +### MountVolume/UnmountDevice generation function change + +Currently we will check if the volume plugin is attachable in `GenerateMountVolumeFunc`, if it is, we need to call `WaitForAttach` ,`GetDeviceMountPath` and `MountDevice` first, and then set up the volume. + +After the refactor, we can split that into three sections: check if volume is attachable, check if it is deviceMountable and set up the volume. +``` +devicePath := volumeToMount.DevicePath +if volumeAttacher != nil { + devicePath, err = volumeAttacher.WaitForAttach( + volumeToMount.VolumeSpec, devicePath, volumeToMount.Pod, waitForAttachTimeout) + if err != nil { + // On failure, return error. Caller will log and retry. + return volumeToMount.GenerateError("MountVolume.WaitForAttach failed", err) + } + // Write the attached device path back to volumeToMount, which can be used for MountDevice. + volumeToMount.DevicePath = devicePath +} + +if volumeDeviceMounter != nil { + deviceMountPath, err := + volumeDeviceMounter.GetDeviceMountPath(volumeToMount.VolumeSpec) + if err != nil { + // On failure, return error. Caller will log and retry. + return volumeToMount.GenerateError("MountVolume.GetDeviceMountPath failed", err) + } + deviceMountPath, err := volumeDeviceMounter.MountDevice(volumeToMount.VolumeSpec, devicePath, deviceMountPath) + if err != nil { + // On failure, return error. Caller will log and retry. + return volumeToMount.GenerateError("MountVolume.MountDevice failed", err) + } + + glog.Infof(volumeToMount.GenerateMsgDetailed("MountVolume.MountDevice succeeded", fmt.Sprintf("device mount path %q", deviceMountPath))) + + // Update actual state of world to reflect volume is globally mounted + markDeviceMountedErr := actualStateOfWorld.MarkDeviceAsMounted( + volumeToMount.VolumeName) + if markDeviceMountedErr != nil { + // On failure, return error. Caller will log and retry. + return volumeToMount.GenerateError("MountVolume.MarkDeviceAsMounted failed", markDeviceMountedErr) + } +} +``` +Note that since local storage plugin will not implement the Attacher interface, we can get the device path directly from `spec.PersistentVolume.Spec.Local.Path` when we run `MountDevice` + +The device unmounting operation will be executed in `GenerateUnmountDeviceFunc`, we can update the device unmounting generation function as below: +``` +// Get DeviceMounter plugin +deviceMountableVolumePlugin, err := + og.volumePluginMgr.FindDeviceMountablePluginByName(deviceToDetach.PluginName) +if err != nil || deviceMountableVolumePlugin == nil { + return volumetypes.GeneratedOperations{}, deviceToDetach.GenerateErrorDetailed("UnmountDevice.FindDeviceMountablePluginByName failed", err) +} + +volumeDeviceUmounter, err := deviceMountablePlugin.NewDeviceUmounter() +if err != nil { + return volumetypes.GeneratedOperations{}, deviceToDetach.GenerateErrorDetailed("UnmountDevice.NewDeviceUmounter failed", err) +} + +volumeDeviceMounter, err := deviceMountableVolumePlugin.NewDeviceMounter() +if err != nil { + return volumetypes.GeneratedOperations{}, deviceToDetach.GenerateErrorDetailed("UnmountDevice.NewDeviceMounter failed", err) +} + +unmountDeviceFunc := func() (error, error) { + deviceMountPath, err := + volumeDeviceMounter.GetDeviceMountPath(deviceToDetach.VolumeSpec) + if err != nil { + // On failure, return error. Caller will log and retry. + return deviceToDetach.GenerateError("GetDeviceMountPath failed", err) + } + refs, err := deviceMountablePlugin.GetDeviceMountRefs(deviceMountPath) + + if err != nil || mount.HasMountRefs(deviceMountPath, refs) { + if err == nil { + err = fmt.Errorf("The device mount path %q is still mounted by other references %v", deviceMountPath, refs) + } + return deviceToDetach.GenerateError("GetDeviceMountRefs check failed", err) + } + // Execute unmount + unmountDeviceErr := volumeDeviceUmounter.UnmountDevice(deviceMountPath) + if unmountDeviceErr != nil { + // On failure, return error. Caller will log and retry. + return deviceToDetach.GenerateError("UnmountDevice failed", unmountDeviceErr) + } + // Before logging that UnmountDevice succeeded and moving on, + // use mounter.PathIsDevice to check if the path is a device, + // if so use mounter.DeviceOpened to check if the device is in use anywhere + // else on the system. Retry if it returns true. + deviceOpened, deviceOpenedErr := isDeviceOpened(deviceToDetach, mounter) + if deviceOpenedErr != nil { + return nil, deviceOpenedErr + } + // The device is still in use elsewhere. Caller will log and retry. + if deviceOpened { + return deviceToDetach.GenerateError( + "UnmountDevice failed", + fmt.Errorf("the device is in use when it was no longer expected to be in use")) + } + + ... + + return nil, nil + } + +``` + +### Volume plugin change + +We need to olny implement the DeviceMounter/DeviceUnmounter interface for local storage since it is not attachable. +And we can keep `fc`,`iscsi` and `RBD` unchanged at the first stage. + +## Future +Update `iscsi`, `RBD` and `fc` volume plugins accordingly, if we figure out how to prevent multiple local attach without implementing attacher interface. diff --git a/contributors/design-proposals/storage/container-storage-interface-skip-attach.md b/contributors/design-proposals/storage/container-storage-interface-skip-attach.md new file mode 100644 index 000000000..6e956e92a --- /dev/null +++ b/contributors/design-proposals/storage/container-storage-interface-skip-attach.md @@ -0,0 +1,80 @@ +# Skip attach for non-attachable CSI volumes + +Author: @jsafrane + +## Goal +* Non-attachable CSI volumes should not require external attacher and `VolumeAttachment` instance creation. This will speed up pod startup. + +## Motivation +Currently, CSI requires admin to start external CSI attacher for **all** CSI drivers, including those that don't implement attach/detach operation (such as NFS or all ephemeral Secrets-like volumes). Kubernetes Attach/Detach controller always creates `VolumeAttachment` objects for them and always waits until they're reported as "attached" by external CSI attacher. + +We want to skip creation of `VolumeAttachment` objects in A/D controller for CSI volumes that don't require 3rd party attach/detach. + +## Dependencies +In order to skip both A/D controller attaching a volume and kubelet waiting for the attachment, both of them need to know if a particular CSI driver is attachable or not. In this document we expect that proposal #2514 is implemented and both A/D controller and kubelet has informer on `CSIDriver` so they can check if a volume is attachable easily. + +## Design +### CSI volume plugin +* Rework [`Init`](https://github.com/kubernetes/kubernetes/blob/43f805b7bdda7a5b491d34611f85c249a63d7f97/pkg/volume/csi/csi_plugin.go#L58) to get or create informer to cache CSIDriver instances. + * Depending on where the API for CSIDriver ends up, we may: + * Rework VolumeHost to either provide the informer. This leaks CSI implementation details to A/D controller and kubelet + * Or the CSI volume plugin can create and run CSIDriver informer by itself. No other component in controller-manager or kubelet needs the informer right now, so a non-shared informer is viable option. Depending on when the API for CSIDriver ends up, `VolumeHost` may need to be extended to provide client interface to the API and kubelet and A/D controller may need to be updated to create the interface (somewhere in `cmd/`, where RESTConfig is still available to create new clients ) and pass it to their `VolumeHost` implementations. +* Rework `Attach`, `Detach`, `VolumesAreAttached` and `WaitForAttach` to check for `CSIDriver` instance using the informer. + * If CSIDriver for the driver exists and it's attachable, perform usual logic. + * If CSIDriver for the driver exists and it's not attachable, return success immediately (basically NOOP). A/D controller will still mark the volume as attached in `Node.Status.VolumesAttached`. + * If CSIDriver for the driver does not exist, perform usual logic (i.e. treat the volume as attachable). + * This keeps the behavior the same as in old Kubernetes version without CSIDriver object. + * This also happens when CSIDriver informer has not been quick enough. It is suggested that CSIDriver instance is created **before** any pod that uses corresponding CSI driver can run. + * In case that CSIDriver informer (or user) is too slow, CSI volume plugin `Attach()` will create `VolumeAttachment` instance and wait for (non-existing) external attacher to fulfill it. The CSI plugin shall recover when `CSIDriver` instance is created and skip attach. Any `VolumeAttachment` instance created here will be deleted on `Detach()`, see the next bullet. +* In addition to the above, `Detach()` removes `VolumeAttachment` instance even if the volume is not attachable. This deletes `VolumeAttachment` instances created by old A/D controller or before `CSIDriver` instance was created. + + +### Authorization +* A/D controller and kubelet must be allowed to list+watch CSIDriver instances. Updating RBAC rules should be enough. + +## API +No API changes. + +## Upgrade +This chapter covers: +* Upgrade from old Kubernetes that has `CSISkipAttach` disabled to new Kubernetes with `CSISkipAttach` enabled. +* Update from Kubernetes that has `CSISkipAttach` disabled to the same Kubernetes with `CSISkipAttach` enabled. +* Creation of CSIDriver instance with non-attachable CSI driver. + +In all cases listed above, an "attachable" CSI driver becomes non-attachable. Upgrade does not affect attachable CSI drivers, both "old" and "new" Kubernetes processes them in the same way. + +For non-attachable volumes, if the volume was attached by "old" Kubernetes (or "new" Kubernetes before CSIDriver instance was created), it has `VolumeAttachment` instance. It will be deleted by `Detach()`, as it deletes `VolumeAttachment` instance also for non-attachable volumes. + +## Downgrade +This chapter covers: +* Downgrade from new Kubernetes that has `CSISkipAttach` enabled to old Kubernetes with `CSISkipAttach disabled. +* Update from Kubernetes that has `CSISkipAttach` feature enabled to the same Kubernetes with `CSISkipAttach` disabled. +* Deletion of CSIDriver instance with non-attachable CSI driver. + +In all cases listed above, a non-attachable CSI driver becomes "attachable" (i.e. requires external attacher). Downgrade does not affect attachable CSI drivers, both "old" and "new" Kubernetes processes them in the same way. + +For non-attachable volumes, if the volume was mounted by "new" Kubernetes, it has no VolumeAttachment instance. "Old" A/D controller does not know about it. However, it will periodically call plugin's `VolumesAreAttached()` that checks for `VolumeAttachment` presence. Volumes without `VolumeAttachment` will be reported as not attached and A/D controller will call `Attach()` on these. Since "old" Kubernetes required an external attacher even for non-attachable CSI drivers, the external attacher will pick the `VolumeAttachment` instances and fulfil them in the usual way. + + +## Performance considerations + +* Flow suggested in this proposal adds new `CSIDriver` informer both to A/D controller and kubelet. We don't expect any high amount of instances of `CSIDriver` nor any high frequency of updates. `CSIDriver` should have negligible impact on performance. + +* A/D controller will not create `VolumeAttachment` instances for non-attachable volumes. Etcd load will be reduced. + +* On the other hand, all CSI volumes still must go though A/D controller. A/D controller **must** process every CSI volume and kubelet **must** wait until A/D controller marks a volume as attached, even if A/D controller basically does nothing. All CSI volumes must be added to `Node.Status.VolumesInUse` and `Node.Status.VolumesAttached`. This does not introduce any new API calls, all this is already implemented, however this proposal won't reduce `Node.Status` update frequency in any way. + * If *all* volumes move to CSI eventually, pod startup will be slower than when using in-tree volume plugins that don't go through A/D controller and `Node.Status` will grow in size. + +## Implementation + +Expected timeline: +* Alpha: 1.12 (behind feature gate `CSISkipAttach`) +* Beta: 1.13 (enabled by default) +* GA: 1.14 + +## Alternatives considered +A/D controller and kubelet can be easily extended to check if a given volume is attachable. This would make mounting of non-attachable volumes easier, as kubelet would not need to wait for A/D controller to mark the volume as attached. However, there would be issues when upgrading or downgrading Kubernetes (or marking CSIDriver as attachable or non-attachable, which has basically the same handling). +* On upgrade (i.e. a previously attachable CSI volume becomes non-attachable, e.g. when user creates CSIDriver instance while corresponding CSI driver is already running), A/D controller could discover that an attached volume is not attachable any longer. A/D controller could clean up `Node.Status.VolumesAttached`, but since A/D controller does not know anything about `VolumeAttachment`, we would either need to introduce a new volume plugin call to clean it up in CSI volume plugin, or something else would need to clean it. +* On downgrade (i.e. a previously non-attachable CSI volume becomes attachable, e.g. when user deletes CSIDriver instance or downgrades to old Kubernetes without this feature), kubelet must discover that already mounted volume has changed from non-attachable to attachable and put it into `Node.Status.VolumesInUse`. This would race with A/D controller detaching the volume when a pod was deleted at the same time a CSIDriver instance was made attachable. + +Passing all volumes through A/D controller saves us from these difficulties and even races. diff --git a/contributors/design-proposals/storage/container-storage-interface.md b/contributors/design-proposals/storage/container-storage-interface.md index 1522539a3..9a1b3d5e6 100644 --- a/contributors/design-proposals/storage/container-storage-interface.md +++ b/contributors/design-proposals/storage/container-storage-interface.md @@ -89,17 +89,60 @@ CSI volume drivers should create a socket at the following path on the node mach `Sanitized CSIDriverName` is CSI driver name that does not contain dangerous character and can be used as annotation name. It can follow the same pattern that we use for [volume plugins](https://git.k8s.io/kubernetes/pkg/util/strings/escape.go#L27). Too long or too ugly driver names can be rejected, i.e. all components described in this document will report an error and won't talk to this CSI driver. Exact sanitization method is implementation detail (SHA in the worst case). -Upon initialization of the external “CSI volume driver”, some external component must call the CSI method `GetNodeId` to get the mapping from Kubernetes Node names to CSI driver NodeID. It must then add the CSI driver NodeID to the `csi.volume.kubernetes.io/nodeid` annotation on the Kubernetes Node API object. The key of the annotation must be `csi.volume.kubernetes.io/nodeid`. The value of the annotation is a JSON blob, containing key/value pairs for each CSI driver. +Upon initialization of the external “CSI volume driver”, kubelet must call the CSI method `NodeGetInfo` to get the mapping from Kubernetes Node names to CSI driver NodeID and the associated `accessible_topology`. It must: -For example: -``` -csi.volume.kubernetes.io/nodeid: "{ \"driver1\": \"name1\", \"driver2\": \"name2\" } -``` + * Create/update a `CSINodeInfo` object instance for the node with the NodeID and topology keys from `accessible_topology`. + * This will enable the component that will issue `ControllerPublishVolume` calls to use the `CSINodeInfo` as a mapping from cluster node ID to storage node ID. + * This will enable the component that will issue `CreateVolume` to reconstruct `accessible_topology` and provision a volume that is accesible from specific node. + * Each driver must completely overwrite its previous version of NodeID and topology keys, if they exist. + * If the `NodeGetInfo` call fails, kubelet must delete any previous NodeID and topology keys for this driver. + * When kubelet plugin unregistration mechanism is implemented, delete NodeID and topology keys when a driver is unregistered. -This will enable the component that will issue `ControllerPublishVolume` calls to use the annotation as a mapping from cluster node ID to storage node ID. + * Update Node API object with the CSI driver NodeID as the `csi.volume.kubernetes.io/nodeid` annotation. The value of the annotation is a JSON blob, containing key/value pairs for each CSI driver. For example: + ``` + csi.volume.kubernetes.io/nodeid: "{ \"driver1\": \"name1\", \"driver2\": \"name2\" } + ``` + + *This annotation is deprecated and will be removed according to deprecation policy (1 year after deprecation). TODO mark deprecation date.* + * If the `NodeGetInfo` call fails, kubelet must delete any previous NodeID for this driver. + * When kubelet plugin unregistration mechanism is implemented, delete NodeID and topology keys when a driver is unregistered. + + * Create/update Node API object with `accessible_topology` as labels. + There are no hard restrictions on the label format, but for the format to be used by the recommended setup, please refer to [Topology Representation in Node Objects](#topology-representation-in-node-objects). To enable easy deployment of an external containerized CSI volume driver, the Kubernetes team will provide a sidecar "Kubernetes CSI Helper" container that can manage the unix domain socket registration and NodeId initialization. This is detailed in the “Suggested Mechanism for Deploying CSI Drivers on Kubernetes” section below. +The new API object called `CSINodeInfo` will be defined as follows: + +```go +// CSINodeInfo holds information about status of all CSI drivers installed on a node. +type CSINodeInfo struct { + metav1.TypeMeta + // ObjectMeta.Name must be node name. + metav1.ObjectMeta + + // List of CSI drivers running on the node and their properties. + CSIDrivers []CSIDriverInfo +} + +// Information about one CSI driver installed on a node. +type CSIDriverInfo struct { + // CSI driver name. + Name string + + // ID of the node from the driver point of view. + NodeID string + + // Topology keys reported by the driver on the node. + TopologyKeys []string +} +``` + +A new object type `CSINodeInfo` is chosen instead of `Node.Status` field because Node is already big enough and there are issues with its size. `CSINodeInfo` is CRD installed by TODO (jsafrane) on cluster startup and defined in `kubernetes/kubernetes/pkg/apis/storage-csi/v1alpha1/types.go`, so k8s.io/client-go and k8s.io/api are generated automatically. All users of `CSINodeInfo` will tolerate if the CRD is not installed and retry anything they need to do with it with exponential backoff and proper error reporting. Especially kubelet is able to serve its usual duties when the CRD is missing. + +Each node must have zero or one `CSINodeInfo` instance. This is ensured by `CSINodeInfo.Name == Node.Name`. TODO: how to validate this? Each `CSINodeInfo` is "owned" by corresponding Node for garbage collection. + + #### Master to CSI Driver Communication Because CSI volume driver code is considered untrusted, it might not be allowed to run on the master. Therefore, the Kube controller manager (responsible for create, delete, attach, and detach) can not communicate via a Unix Domain Socket with the “CSI volume driver” container. Instead, the Kube controller manager will communicate with the external “CSI volume driver” through the Kubernetes API. @@ -116,7 +159,27 @@ Provisioning and deletion operations are handled using the existing [external pr In short, to dynamically provision a new CSI volume, a cluster admin would create a `StorageClass` with the provisioner corresponding to the name of the external provisioner handling provisioning requests on behalf of the CSI volume driver. -To provision a new CSI volume, an end user would create a `PersistentVolumeClaim` object referencing this `StorageClass`. The external provisioner will react to the creation of the PVC and issue the `CreateVolume` call against the CSI volume driver to provision the volume. The `CreateVolume` name will be auto-generated as it is for other dynamically provisioned volumes. The `CreateVolume` capacity will be taken from the `PersistentVolumeClaim` object. The `CreateVolume` parameters will be passed through from the `StorageClass` parameters (opaque to Kubernetes). Once the operation completes successfully, the external provisioner creates a `PersistentVolume` object to represent the volume using the information returned in the `CreateVolume` response. The `PersistentVolume` object is bound to the `PersistentVolumeClaim` and available for use. +To provision a new CSI volume, an end user would create a `PersistentVolumeClaim` object referencing this `StorageClass`. The external provisioner will react to the creation of the PVC and issue the `CreateVolume` call against the CSI volume driver to provision the volume. The `CreateVolume` name will be auto-generated as it is for other dynamically provisioned volumes. The `CreateVolume` capacity will be taken from the `PersistentVolumeClaim` object. The `CreateVolume` parameters will be passed through from the `StorageClass` parameters (opaque to Kubernetes). + +If the `PersistentVolumeClaim` has the `volume.alpha.kubernetes.io/selected-node` annotation set (only added if delayed volume binding is enabled in the `StorageClass`), the provisioner will get relevant topology keys from the corresponding `CSINodeInfo` instance and the topology values from `Node` labels and use them to generate preferred topology in the `CreateVolume()` request. If the annotation is unset, preferred topology will not be specified (unless the PVC follows StatefulSet naming format, discussed later in this section). `AllowedTopologies` from the `StorageClass` is passed through as requisite topology. If `AllowedTopologies` is unspecified, the provisioner will pass in a set of aggregated topology values across the whole cluster as requisite topology. + +To perform this topology aggregation, the external provisioner will cache all existing Node objects. In order to prevent a compromised node from affecting the provisioning process, it will pick a single node as the source of truth for keys, instead of relying on keys stored in `CSINodeInfo` for each node object. For PVCs to be provisioned with late binding, the selected node is the source of truth; otherwise a random node is picked. The provisioner will then iterate through all cached nodes that contain a node ID from the driver, aggregating labels using those keys. Note that if topology keys are different across the cluster, only a subset of nodes matching the topology keys of the chosen node will be considered for provisioning. + +To generate preferred topology, the external provisioner will generate N segments for preferred topology in the `CreateVolume()` call, where N is the size of requisite topology. Multiple segments are included to support volumes that are available across multiple topological segments. The topology segment from the selected node will always be the first in preferred topology. All other segments are some reordering of remaining requisite topologies such that given a requisite topology (or any arbitrary reordering of it) and a selected node, the set of preferred topology is guaranteed to always be the same. + +If immediate volume binding mode is set and the PVC follows StatefulSet naming format, then the provisioner will choose, as the first segment in preferred topology, a segment from requisite topology based on the PVC name that ensures an even spread of topology across the StatefulSet's volumes. The logic will be similar to the name hashing logic inside the GCE Persistent Disk provisioner. Other segments in preferred topology are ordered the same way as described above. This feature will be flag-gated in the external provisioner provided as part of the recommended deployment method. + +Once the operation completes successfully, the external provisioner creates a `PersistentVolume` object to represent the volume using the information returned in the `CreateVolume` response. The topology of the returned volume is translated to the `PersistentVolume` `NodeAffinity` field. The `PersistentVolume` object is then bound to the `PersistentVolumeClaim` and available for use. + +The format of topology key/value pairs is defined by the user and must match among the following locations: +* `Node` topology labels +* `PersistentVolume` `NodeAffinity` field +* `StorageClass` `AllowedTopologies` field +When a `StorageClass` has delayed volume binding enabled, the scheduler uses the topology information of a `Node` in the following ways: + 1. During dynamic provisioning, the scheduler selects a candidate node for the provisioner by comparing each `Node`'s topology with the `AllowedTopologies` in the `StorageClass`. + 1. During volume binding and pod scheduling, the scheduler selects a candidate node for the pod by comparing `Node` topology with `VolumeNodeAffinity` in `PersistentVolume`s. + +A more detailed description can be found in the [topology-aware volume scheduling design doc](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/storage/volume-topology-scheduling.md). See [Topology Representation in Node Objects](#topology-representation-in-node-objects) for the format used by the recommended deployment approach. To delete a CSI volume, an end user would delete the corresponding `PersistentVolumeClaim` object. The external provisioner will react to the deletion of the PVC and based on its reclamation policy it will issue the `DeleteVolume` call against the CSI volume driver commands to delete the volume. It will then delete the `PersistentVolume` object. @@ -131,13 +194,14 @@ Once the following conditions are true, the external-attacher should call `Contr 1. A new `VolumeAttachment` Kubernetes API objects is created by Kubernetes attach/detach controller. 2. The `VolumeAttachment.Spec.Attacher` value in that object corresponds to the name of the external attacher. 3. The `VolumeAttachment.Status.Attached` value is not yet set to true. -4. A Kubernetes Node API object exists with the name matching `VolumeAttachment.Spec.NodeName` and that object contains a `csi.volume.kubernetes.io/nodeid` annotation. This annotation contains a JSON blob, a list of key/value pairs, where one of they keys corresponds with the CSI volume driver name, and the value is the NodeID for that driver. This NodeId mapping can be retrieved and used in the `ControllerPublishVolume` calls. +4. * Either a Kubernetes Node API object exists with the name matching `VolumeAttachment.Spec.NodeName` and that object contains a `csi.volume.kubernetes.io/nodeid` annotation. This annotation contains a JSON blob, a list of key/value pairs, where one of they keys corresponds with the CSI volume driver name, and the value is the NodeID for that driver. This NodeId mapping can be retrieved and used in the `ControllerPublishVolume` calls. + * Or a `CSINodeInfo` API object exists with the name matching `VolumeAttachment.Spec.NodeName` and the object contains `CSIDriverInfo` for the CSI volume driver. The `CSIDriverInfo` contains NodeID for `ControllerPublishVolume` call. 5. The `VolumeAttachment.Metadata.DeletionTimestamp` is not set. Before starting the `ControllerPublishVolume` operation, the external-attacher should add these finalizers to these Kubernetes API objects: * To the `VolumeAttachment` so that when the object is deleted, the external-attacher has an opportunity to detach the volume first. External attacher removes this finalizer once the volume is fully detached from the node. -* To the `PersistentVolume` referenced by `VolumeAttachment` so the the PV cannot be deleted while the volume is attached. External attacher needs information from the PV to perform detach operation. The attacher will remove the finalizer once all `VolumeAttachment` objects that refer to the PV are deleted, i.e. the volume is detached from all nodes. +* To the `PersistentVolume` referenced by `VolumeAttachment` so the PV cannot be deleted while the volume is attached. External attacher needs information from the PV to perform detach operation. The attacher will remove the finalizer once all `VolumeAttachment` objects that refer to the PV are deleted, i.e. the volume is detached from all nodes. If the operation completes successfully, the external-attacher will: @@ -314,7 +378,7 @@ The attach/detach controller,running as part of the kube-controller-manager bina When the controller decides to attach a CSI volume, it will call the in-tree CSI volume plugin’s attach method. The in-tree CSI volume plugin’s attach method will do the following: 1. Create a new `VolumeAttachment` object (defined in the “Communication Channels” section) to attach the volume. - * The name of the of the `VolumeAttachment` object will be `pv-`. + * The name of the `VolumeAttachment` object will be `pv-`. * `pv-` prefix is used to allow using other scheme(s) for inline volumes in the future, with their own prefix. * SHA256 hash is to reduce length of `PVName` plus `NodeName` string, each of which could be max allowed name length (hexadecimal representation of SHA256 is 64 characters). * `PVName` is `PV.name` of the attached PersistentVolume. @@ -387,6 +451,127 @@ To deploy a containerized third-party CSI volume driver, it is recommended that Alternatively, deployment could be simplified by having all components (including external-provisioner and external-attacher) in the same pod (DaemonSet). Doing so, however, would consume more resources, and require a leader election protocol (likely https://git.k8s.io/contrib/election) in the `external-provisioner` and `external-attacher` components. +#### Topology Representation in Node Objects +Topology information will be represented as labels. + +Requirements: +* Must adhere to the [label format](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#syntax-and-character-set). +* Must support different drivers on the same node. +* The format of each key/value pair must match those in `PersistentVolume` and `StorageClass` objects, as described in the [Provisioning and Deleting](#provisioning-and-deleting) section. + +Proposal: `"com.example.topology/rack": "rack1"` +The list of topology keys known to the driver is stored separately in the `CSINodeInfo` object. + +Justifications: +* No strange separators needed, comparing to the alternative. Cleaner format. +* The same topology key could be used across different components (different storage plugin, network plugin, etc.) +* Once NodeRestriction is moved to the newer model (see [here](https://github.com/kubernetes/community/pull/911) for context), for each new label prefix introduced in a new driver, the cluster admin has to configure NodeRestrictions to allow the driver to update labels with the prefix. Cluster installations could include certain prefixes for pre-installed drivers by default. This is less convenient compared to the alternative, which can allow editing of all CSI drivers by default using the “csi.kubernetes.io” prefix, but often times cluster admins have to whitelist those prefixes anyway (for example â€cloud.google.com’) + +Considerations: +* Upon driver deletion/upgrade/downgrade, stale labels will be left untouched. It’s difficult for the driver to decide whether other components outside CSI rely on this label. +* During driver installation/upgrade/downgrade, controller deployment must be brought down before node deployment, and node deployment must be deployed before the controller deployment, because provisioning relies on up-to-date node information. One possible issue is if only topology values change while keys remain the same, and if AllowedTopologies is not specified, requisite topology will contain both old and new topology values, and CSI driver may fail the CreateVolume() call. Given that CSI driver should be backward compatible, this is more of an issue when a node rolling upgrade happens before the controller update. It's not an issue if keys are changed as well since requisite and preferred topology generation handles it appropriately. +* During driver installation/upgrade/downgrade, if a version of the controller (either old or new) is running while there is an ongoing rolling upgrade with the node deployment, and the new version of the CSI driver reports different topology information, nodes in the cluster may have different versions of topology information. However, this doesn't pose an issue. If AllowedTopologies is specified, a subset of nodes matching the version of topology information in AllowedTopologies will be used as provisioning candidate. If AllowedTopologies is not specified, a single node is used as the source of truth for keys +* Topology keys inside `CSINodeInfo` must reflect the topology keys from drivers currently installed on the node. If no driver is installed, the collection must be empty. However, due to the possible race condition between kubelet (the writer) and the external provisioner (the reader), the provisioner must gracefully handle the case where `CSINodeInfo` is not up-to-date. In the current design, the provisioner will erroneously provision a volume on a node where it's inaccessible. + +Alternative: +1. `"csi.kubernetes.io/topology.example.com_rack": "rack1"` + +#### Topology Representation in PersistentVolume Objects +There exists multiple ways to represent a single topology as NodeAffinity. For example, suppose a `CreateVolumeResponse` contains the following accessible topology: + +```yaml +- zone: "a" + rack: "1" +- zone: "b" + rack: "1" +- zone: "b" + rack: "2" +``` + +There are at least 3 ways to represent this in NodeAffinity (excluding `nodeAffinity`, `required`, and `nodeSelectorTerms` for simplicity): + +Form 1 - `values` contain exactly 1 element. +```yaml +- matchExpressions: + - key: zone + operator: In + values: + - "a" + - key: rack + operator: In + values: + - "1" +- matchExpressions: + - key: zone + operator: In + values: + - "b" + - key: rack + operator: In + values: + - "1" +- matchExpressions: + - key: zone + operator: In + values: + - "b" + - key: rack + operator: In + values: + - "2" +``` + +Form 2 - Reduced by `rack`. +```yaml +- matchExpressions: + - key: zone + operator: In + values: + - "a" + - "b" + - key: rack + operator: In + values: + - "1" +- matchExpressions: + - key: zone + operator: In + values: + - "b" + - key: rack + operator: In + values: + - "2" +``` +Form 3 - Reduced by `zone`. +```yaml +- matchExpressions: + - key: zone + operator: In + values: + - "a" + - key: rack + operator: In + values: + - "1" +- matchExpressions: + - key: zone + operator: In + values: + - "b" + - key: rack + operator: In + values: + - "1" + - "2" +``` +The provisioner will always choose Form 1, i.e. all `values` will have at most 1 element. Reduction logic could be added in future versions to arbitrarily choose a valid and simpler form like Forms 2 & 3. + +#### Upgrade & Downgrade Considerations +When drivers are uninstalled, topology information stored in Node labels remain untouched. The recommended label format allows multiple sources (such as CSI, networking resources, etc.) to share the same label key, so it's nontrivial to accurately determine whether a label is still used. + +In order to upgrade drivers using the recommended driver deployment mechanism, the user is recommended to tear down the StatefulSet (controller components) before the DaemonSet (node components), and deploy the DaemonSet before the StatefulSet. There may be design improvements to eliminate this constraint, but it will be evaluated at a later iteration. + ### Example Walkthrough #### Provisioning Volumes @@ -402,7 +587,7 @@ Alternatively, deployment could be simplified by having all components (includin #### Deleting Volumes 1. A user deletes a `PersistentVolumeClaim` object bound to a CSI volume. -2. The external-provisioner for the CSI driver sees the the `PersistentVolumeClaim` was deleted and triggers the retention policy: +2. The external-provisioner for the CSI driver sees the `PersistentVolumeClaim` was deleted and triggers the retention policy: 1. If the retention policy is `delete` 1. The external-provisioner triggers volume deletion by issuing a `DeleteVolume` call against the CSI volume plugin container. 2. Once the volume is successfully deleted, the external-provisioner deletes the corresponding `PersistentVolume` object. diff --git a/contributors/design-proposals/storage/csi-migration.md b/contributors/design-proposals/storage/csi-migration.md new file mode 100644 index 000000000..1d8016737 --- /dev/null +++ b/contributors/design-proposals/storage/csi-migration.md @@ -0,0 +1,340 @@ +# In-tree Storage Plugin to CSI Migration Design Doc + +Authors: @davidz627, @jsafrane + +This document presents a detailed design for migrating in-tree storage plugins +to CSI. This will be an opt-in feature turned on at cluster creation time that +will redirect in-tree plugin operations to a corresponding CSI Driver. + +## Background and Motivations + +The Kubernetes volume plugins are currently in-tree meaning all logic and +handling for each plugin lives in the Kubernetes codebase itself. With the +Container Storage Interface (CSI) the goal is to move those plugins out-of-tree. +CSI defines a standard interface for communication between the Container +Orchestrator (CO), Kubernetes in our case, and the storage plugins. + +As the CSI Spec moves towards GA and more storage plugins are being created and +becoming production ready, we will want to migrate our in-tree plugin logic to +use CSI plugins instead. This is motivated by the fact that we are currently +supporting two versions of each plugin (one in-tree and one CSI), and that we +want to eventually transition all storage users to CSI. + +In order to do this we need to migrate the internals of the in-tree plugins to +call out to CSI Plugins because we will be unable to deprecate the current +internal plugin API’s due to Kubernetes API deprecation policies. This will +lower cost of development as we only have to maintain one version of each +plugin, as well as ease the transition to CSI when we are able to deprecate the +internal APIs. + + +## Goals + +* Compile all requirements for a successful transition of the in-tree plugins to + CSI + * As little code as possible remains in the Kubernetes Repo + * In-tree plugin API is untouched, user Pods and PVs continue working after + upgrades + * Minimize user visible changes +* Design a robust mechanism for redirecting in-tree plugin usage to appropriate + CSI drivers, while supporting seamless upgrade and downgrade between new + Kubernetes version that uses CSI drivers for in-tree volume plugins to an old + Kubernetes version that uses old-fashioned volume plugins without CSI. +* Design framework for migration that allows for easy interface extension by + in-tree plugin authors to “migrate” their plugins. + * Migration must be modular so that each plugin can have migration turned on + and off separately + +## Non-Goals +* Design a mechanism for deploying CSI drivers on all systems so that users can + use the current storage system the same way they do today without having to do + extra set up. +* Implementing CSI Drivers for existing plugins +* Define set of volume plugins that should be migrated to CSI + +## Implementation Schedule + +Alpha [1.14] +* Off by default +* Proof of concept migration of at least 2 storage plugins [AWS, GCE] +* Framework for plugin migration built for Dynamic provisioning, pre-provisioned + volumes, and in-tree volumes + +Beta [Target 1.15] +* On by default +* Migrate all of the cloud provider plugins* + +GA [TBD] +* Feature on by default, per-plugin toggle on for relevant cloud provider by + default +* CSI Drivers for migrated plugins available on related cloud provider cluster + by default + +## Feature Gating +We will have an alpha feature gate for the whole feature that can turn the CSI +migration on or off, when off all code paths should revert/stay with the in-tree +plugins. We will also have individual flags for each driver so that admins can +toggle them on or off. + +The feature gate can exist at the interception points in the OperationGenerator +for Attach and Mount, as well as in the PV Controller for Provisioning. + +We will also have one feature flag for each driver’s migration so that each +driver migration can be turned on and off individually. + +The new feature gates for alpha are: +``` +// Enables the in-tree storage to CSI Plugin migration feature. +CSIMigration utilfeature.Feature = "CSIMigration" + +// Enables the GCE PD in-tree driver to GCE CSI Driver migration feature. +CSIMigrationGCE utilfeature.Feature = "CSIMigrationGCE" + +// Enables the AWS in-tree driver to AWS CSI Driver migration feature. +CSIMigrationAWS utilfeature.Feature = "CSIMigrationAWS" +``` + +## Translation Layer +The main mechanism we will use to migrate plugins is redirecting in-tree +operation calls to the CSI Driver instead of the in-tree driver, the external +components will pick up these in-tree PV's and use a translation library to +translate to CSI Source. + +Pros: +* Keeps old API objects as they are +* Facilitates gradual roll-over to CSI + +Cons: +* Somewhat complicated and error prone. +* Bespoke translation logic for each in-tree plugin + +### Dynamically Provisioned Volumes + +#### Kubernetes Changes +Dynamically Provisioned volumes will continue to be provisioned with the in-tree +`PersistentVolumeSource`. The CSI external-provisioner to pick up the +in-tree PVC's when migration is turned on and provision using the CSI Drivers; +it will then use the imported translation library to return with a PV that contains an equivalent of the original +in-tree PV. The PV will then go through all the same steps outlined below in the +"Non-Dynamic Provisioned Volumes" for the rest of the volume lifecycle. + +#### Leader Election +There will have to be some mechanism to switch between in-tree and external +provisioner when the migration feature is turned on/off. The two should be +compatible as they both will create the same volume and PV based on the same +PVC, as well as both be able to delete the same PV/PVCs. The in-tree provisioner +will have logic added so that it will stand down and mark the PV as "migrated" +with an annotation when the migration is turned on and the external provisioner +will take care of the PV when it sees the annotation. + + +### Translation Library + +In order to make this on-the-fly translation work we will develop a separate +translation library. This library will have to be able to translate from in-tree +PV Source to the equivalent CSI Source. This library can then be imported by +both Kubernetes and the external CSI Components to translate Volume Sources when +necessary. The cost of doing this translation will be very low as it will be an +imported library and part of whatever binary needs the translation (no extra +API or RPC calls). + +#### Library Interface +``` +type CSITranslator interface { + // TranslateToCSI takes a volume.Spec and will translate it to a + // CSIPersistentVolumeSource if the translation logic for that + // specific in-tree volume spec has been implemented + TranslateToCSI(spec volume.Spec) (CSIPersistentVolumeSource, error) + + // TranslateToIntree takes a CSIPersistentVolumeSource and will translate + // it to a volume.Spec for the specific in-tree volume specified by + //`inTreePlugin`, if that translation logic has been implemented + TranslateToInTree(source CSIPersistentVolumeSource, inTreePlugin string) (volume.Spec, error) + + // IsMigrated returns true if the plugin has migration logic + // false if it does not + IsMigrated(inTreePlugin string) bool +} +``` + +#### Library Versioning +Since the library will be imported by various components it is imperative that +all components import a version of the library that supports in-tree driver x +before the migration feature flag for x is turned on. If not, the TranslateToCSI +function will return an error when the translation is attempted. + + +### Pre-Provisioned Volumes (and volumes provisioned before migration) +In the OperationGenerator at the start of each volume operation call we will +check to see whether the plugin has been migrated. + +For Controller calls, we will call the CSI calls instead of the in-tree calls. +The OperationGenerator can do the translation of the PV Source before handing it +to the CSI calls, therefore the CSI in-tree plugin will only have to deal with +what it sees as a CSI Volume. Special care must be taken that `volumeHandle` is +unique and also deterministic so that we can always find the correct volume. +We also foresee that future controller calls such as resize and snapshot will use a similar mechanism. All these external components +will also need to be updated to accept PV's of any source type when it is given +and use the translation library to translate the in-tree PV Source into a CSI +Source when necessary. + +For Node calls, the VolumeToMount object will contain the in-tree PV Source, +this can then be translated by the translation library when needed and +information can be fed to the CSI components when necessary. + +Then the rest of the code in the Operation Generator can execute as normal with +the CSI Plugin and the annotation in the requisite locations. + +Caveat: For ALL detach calls of plugins that MAY have already been migrated we +have to attempt to DELETE the VolumeAttachment object that would have been +created if that plugin was migrated. This is because Attach after migration +creates a VolumeAttachment object, and if for some reason we are doing a detach +with the in-tree plugin, the VolumeAttachment object becomes orphaned. + + +### In-Line Volumes +In-line controller calls are a special case because there is no PV. In this case +we will add the CSI Source JSON to the VolumeToAttach object and in Attach we +will put the Source in a new field in the VolumeAttachment object +VolumeAttachment.Spec.Source.VolumeAttachmentSource.InlineVolumeSource. The CSI Attacher will have to +be modified to also check this location for a source before checking the PV +itself. + +We need to be careful with naming VolumeAttachments for in-line volumes. The +name needs to be unique and A/D controller must be able to find the right +VolumeAttachment when a pod is deleted (i.e. using only info in Node.Status). +CSI driver in kubelet must be able to find the VolumeAttachment too to get +AttachmentMetadata for NodeStage/NodePublish. + +In downgrade scenario where the migration is then turned off we will have to +remove these floating VolumeAttachment objects, the same issue is outlined above +in the Non-Dynamic Provisioned Volumes section. + +For more details on this see the PR that specs out CSI Inline Volumes in more detail: +https://github.com/kubernetes/community/pull/2273. Basically we will just translate +the in-tree inline volumes into the format specified/implemented in the +container-storage-interface-inline-volumes proposal. + +## Interactions with PV-PVC Protection Finalizers +PV-PVC Protection finalizers prevent deletion of a PV when it is bound to a PVC, +and prevent deletion of a PVC when it is in use by a pod. + +There is no known issue with interaction here. The finalizers will still work in +the same ways as we are not removing/adding PV’s or PVC’s in out of the ordinary +ways. + +## Dealing with CSI Driver Failures +Plugin should fail if the CSI Driver is down and migration is turned on. When +the driver recovers we should be able to resume gracefully. + +We will also create a playbook entry for how to turn off the CSI Driver +migration gracefully, how to tell when the CSI Driver is broken or non-existent, +and how to redeploy a CSI Driver in a cluster. + + +## Upgrade/Downgrade, Migrate/Un-migrate +### Kubelet Node Annotation +When the Kubelet starts, it will check whether the feature gate is +enabled and if so will annotate its node with `csi.attach.kubernetes.io/gce-pd` +for example to communicate to the A/D Controller that it supports migration of +the gce-pd to CSI. The A/D Controller will have to choose on a per-node basis +whether to use the CSI or the in-tree plugin for attach based on 3 criterea: +1. Feature gate +2. Plugin Migratable (Implements MigratablePlugin interface) +3. Node to Attach to has requisite Annotation + +Note: All 3 criteria must be satisfied for A/D controller to Attach/Detach with +CSI instead of in-tree plugin. For example if a Kubelet has feature on and marks +the annotation, but the A/D Controller does not have the feature gate flipped, +we consider this user error and will throw some errors. + +This can cause a race between the A/D Controller and the Kubelet annotating, if +a volume is attached before the Kubelet completes annotation the A/D controller +could attach using in-tree plugin instead of CSI while the Kubelet is expecting +a CSI Attach. The same issue exists on downgrade if the Annotation is not +removed before a volume is attached. An additional consideration is that we +cannot have the Kubelet downgraded to a version that does not have the +Annotation removal code. + +### Node Drain Requirement +We require node's to be drained whenever the Kubelet is Upgrade/Downgraded or +Migrated/Unmigrated to ensure that the entire volume lifecycle is maintained +inside one code branch (CSI or In-tree). This simplifies upgrade/downgrade +significantly and reduces chance of error and races. + +### Upgrade/Downgrade Migrate/Unmigrate Scenarios +For upgrade, starting from a non-migrated cluster you must turn on migration for +A/D Controller first, then drain your node before turning on migration for the +Kubelet. The workflow is as follows: +1. A/D Controller and Kubelet are both not migrated +2. A/D Controller restarted and migrated (flags flipped) +3. A/D Controller continues to use in-tree code for this node b/c node + annotation doesn't exist +4. Node drained and made unschedulable. All volumes unmounted/detached with in-tree code +5. Kubelet restarted and migrated (flags flipped) +6. Kubelet annotates node to tell A/D controller this node has been migrated +7. Kubelet is made schedulable +8. Both A/D Controller & Kubelet Migrated, node is in "fresh" state so all new + volumes lifecycle is CSI + +For downgrade, starting from a fully migrated cluster you must drain your node +first, then turn off migration for your Kubelet, then turn off migration for the +A/D Controller. The workflow is as follows: +1. A/D Controller and Kubelet are both migrated +2. Kubelet drained and made unschedulable, all volumes unmounted/detached with CSI code +3. Kubelet restarted and un-migrated (flags flipped) +4. Kubelet removes node annotation to tell A/D Controller this node is not + migrated. In case kubelet does not have annotation removal code, admin must + remove the annotation manually. +5. Kubelet is made schedulable. +5. At this point all volumes going onto the node would be using in-tree code for + both A/D Controller(b/c of annotation) and Kublet +6. Restart and un-migrate A/D Controller + +With these workflows a volume attached with CSI will be handled by CSI code for +its entire lifecycle, and a volume attached with in-tree code will be handled by +in-tree code for its entire lifecycle. + +## Cloud Provider Requirements +There is a push to remove CloudProvider code from kubernetes. + +There will not be any general auto-deployment mechanism for ALL CSI drivers +covered in this document so the timeline to remove CloudProvider code using this +design is undetermined: For example: At some point GKE could auto-deploy the GCE +PD CSI driver and have migration for that turned on by default, however it may +not deploy any other drivers by default. And at this point we can only remove +the code for the GCE In-tree plugin (this would still break anyone doing their +own deployments while using GCE unless they install the GCE PD CSI Driver). + +We could have auto-deploy depending on what cloud provider kubernetes is running +on. But AFAIK there is no standard mechanism to guarantee this on all Cloud +Providers. + +For example the requirements for just the GCE Cloud Provider code for storage +with minimal disruption to users would be: +* In-tree to CSI Plugin migration goes GA +* GCE PD CSI Driver deployed on GCE/GKE by default (resource requirements of + driver need to be determined) +* GCE PD CSI Migration turned on by default +* Remove in-tree plugin code and cloud provider code + +And at this point users doing their own deployment and not installing the GCE PD +CSI driver encounter an error. + +## Testing +### Standard +Good news is that all “normal functionality” can be tested by simply bringing up +a cluster with “migrated” drivers and running the existing e2e tests for that +driver. We will create CI jobs that run in this configuration for each new +volume plugin + +### Migration/Non-migration (Upgrade/Downgrade) +Write tests were in a normal workflow of attach/mount/unmount/detach, we have +any one of these operations actually happen with the old volume plugin, not the +CSI one This makes sure that the workflow is resiliant to rollback at any point +in time. + +### Version Skew +Master/Node can have up to 2 version skw. Master must always be equal or higher +version than the node. It should be covered by the tests in +Migration/Non-migration section. diff --git a/contributors/design-proposals/storage/csi-snapshot.md b/contributors/design-proposals/storage/csi-snapshot.md new file mode 100644 index 000000000..beb46d58a --- /dev/null +++ b/contributors/design-proposals/storage/csi-snapshot.md @@ -0,0 +1,376 @@ +Kubernetes CSI Snapshot Proposal +================================ + +**Authors:** [Jing Xu](https://github.com/jingxu97), [Xing Yang](https://github.com/xing-yang), [Tomas Smetana](https://github.com/tsmetana), [Huamin Chen ](https://github.com/rootfs) + +## Background + +Many storage systems (GCE PD, Amazon EBS, etc.) provide the ability to create "snapshots" of persistent volumes to protect against data loss. Snapshots can be used in place of a traditional backup system to back up and restore primary and critical data. Snapshots allow for quick data backup (for example, it takes a fraction of a second to create a GCE PD snapshot) and offer fast recovery time objectives (RTOs) and recovery point objectives (RPOs). Snapshots can also be used for data replication, distribution and migration. + +As the initial effort to support snapshot in Kubernetes, volume snapshotting has been released as a prototype in Kubernetes 1.8. An external controller and provisioner (i.e. two separate binaries) have been added in the [external storage repo](https://github.com/kubernetes-incubator/external-storage/tree/master/snapshot). The prototype currently supports GCE PD, AWS EBS, OpenStack Cinder, GlusterFS, and Kubernetes hostPath volumes. Volume snapshots APIs are using [CRD](https://kubernetes.io/docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions/). + +To continue that effort, this design is proposed to add the snapshot support for CSI Volume Drivers. Because the overall trend in Kubernetes is to keep the core APIs as small as possible and use CRD for everything else, this proposal adds CRD definitions to represent snapshots, and an external snapshot controller to handle volume snapshotting. Out-of-tree external provisioner can be upgraded to support creating volume from snapshot. In this design, only CSI volume drivers will be supported. The CSI snapshot spec is proposed [here](https://github.com/container-storage-interface/spec/pull/224). + + +## Objectives + +For the first version of snapshotting support in Kubernetes, only on-demand snapshots for CSI Volume Drivers will be supported. + + +### Goals + +* Goal 1: Expose standardized snapshotting operations to create, list, and delete snapshots in Kubernetes REST API. +Currently the APIs will be implemented with CRD (CustomResourceDefinitions). + +* Goal 2: Implement CSI volume snapshot support. +An external snapshot controller will be deployed with other external components (e.g., external-attacher, external-provisioner) for each CSI Volume Driver. + +* Goal 3: Provide a convenient way of creating new and restoring existing volumes from snapshots. + + +### Non-Goals + +The following are non-goals for the current phase, but will be considered at a later phase. + +* Goal 4: Offer application-consistent snapshots by providing pre/post snapshot hooks to freeze/unfreeze applications and/or unmount/mount file system. + +* Goal 5: Provide higher-level management, such as backing up and restoring a pod and statefulSet, and creating a consistent group of snapshots. + + +## Design Details + +In this proposal, volume snapshots are considered as another type of storage resources managed by Kubernetes. Therefore the snapshot API and controller follow the design pattern of existing volume management. There are three APIs, VolumeSnapshot and VolumeSnapshotContent, and VolumeSnapshotClass which are similar to the structure of PersistentVolumeClaim and PersistentVolume, and storageClass. The external snapshot controller functions similar to the in-tree PV controller. With the snapshots APIs, we also propose to add a new data source struct in PersistentVolumeClaim (PVC) API in order to support restore snapshots to volumes. The following section explains in more details about the APIs and the controller design. + + +### Snapshot API Design + +The API design of VolumeSnapshot and VolumeSnapshotContent is modeled after PersistentVolumeClaim and PersistentVolume. In the first version, the VolumeSnapshot lifecycle is completely independent of its volumes source (PVC). When PVC/PV is deleted, the corresponding VolumeSnapshot and VolumeSnapshotContents objects will continue to exist. However, for some volume plugins, snapshots have a dependency on their volumes. In a future version, we plan to have a complete lifecycle management which can better handle the relationship between snapshots and their volumes. (e.g., a finalizer to prevent deleting volumes while there are snapshots depending on them). + +#### The `VolumeSnapshot` Object + +```GO + +// +genclient +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// VolumeSnapshot is a user's request for taking a snapshot. Upon successful creation of the actual +// snapshot by the volume provider it is bound to the corresponding VolumeSnapshotContent. +// Only the VolumeSnapshot object is accessible to the user in the namespace. +type VolumeSnapshot struct { + metav1.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Spec defines the desired characteristics of a snapshot requested by a user. + Spec VolumeSnapshotSpec `json:"spec" protobuf:"bytes,2,opt,name=spec"` + + // Status represents the latest observed state of the snapshot + // +optional + Status VolumeSnapshotStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// VolumeSnapshotList is a list of VolumeSnapshot objects +type VolumeSnapshotList struct { + metav1.TypeMeta `json:",inline"` + // +optional + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is the list of VolumeSnapshots + Items []VolumeSnapshot `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// VolumeSnapshotSpec describes the common attributes of a volume snapshot +type VolumeSnapshotSpec struct { + // Source has the information about where the snapshot is created from. + // In Alpha version, only PersistentVolumeClaim is supported as the source. + // If not specified, user can create VolumeSnapshotContent and bind it with VolumeSnapshot manually. + // +optional + Source *TypedLocalObjectReference `json:"source" protobuf:"bytes,1,opt,name=source"` + + // SnapshotContentName binds the VolumeSnapshot object with the VolumeSnapshotContent + // +optional + SnapshotContentName string `json:"snapshotContentName" protobuf:"bytes,2,opt,name=snapshotContentName"` + + // Name of the VolumeSnapshotClass used by the VolumeSnapshot. If not specified, a default snapshot class will + // be used if it is available. + // +optional + VolumeSnapshotClassName *string `json:"snapshotClassName" protobuf:"bytes,3,opt,name=snapshotClassName"` +} + +// VolumeSnapshotStatus is the status of the VolumeSnapshot +type VolumeSnapshotStatus struct { + // CreationTime is the time the snapshot was successfully created. If it is set, + // it means the snapshot was created; Otherwise the snapshot was not created. + // +optional + CreationTime *metav1.Time `json:"creationTime" protobuf:"bytes,1,opt,name=creationTime"` + + // When restoring volume from the snapshot, the volume size should be equal or + // larger than the Restoresize if it is specified. If RestoreSize is set to nil, it means + // that the storage plugin does not have this information available. + // +optional + RestoreSize *resource.Quantity `json:"restoreSize" protobuf:"bytes,2,opt,name=restoreSize"` + + // Ready is set to true only if the snapshot is ready to use (e.g., finish uploading if + // there is an uploading phase) and also VolumeSnapshot and its VolumeSnapshotContent + // bind correctly with each other. If any of the above condition is not true, Ready is + // set to false + // +optional + Ready bool `json:"ready" protobuf:"varint,3,opt,name=ready"` + + // The last error encountered during create snapshot operation, if any. + // This field must only be set by the entity completing the create snapshot + // operation, i.e. the external-snapshotter. + // +optional + Error *storage.VolumeError +} + +``` + +Note that if an error occurs before the snapshot is cut, `Error` will be set and none of `CreatedAt`/`AvailableAt` will be set. If an error occurs after the snapshot is cut but before it is available, `Error` will be set and `CreatedAt` should still be set, but `AvailableAt` will not be set. If an error occurs after the snapshot is available, `Error` will be set and `CreatedAt` should still be set, but `AvailableAt` will no longer be set. + +#### The `VolumeSnapshotContent` Object + +```GO + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// VolumeSnapshotContent represents the actual snapshot object +type VolumeSnapshotContent struct { + metav1.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Spec defines a specification of a volume snapshot + Spec VolumeSnapshotContentSpec `json:"spec" protobuf:"bytes,2,opt,name=spec"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// VolumeSnapshotContentList is a list of VolumeSnapshotContent objects +type VolumeSnapshotContentList struct { + metav1.TypeMeta `json:",inline"` + // +optional + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is the list of VolumeSnapshotContents + Items []VolumeSnapshotContent `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// VolumeSnapshotContentSpec is the spec of the volume snapshot content +type VolumeSnapshotContentSpec struct { + // Source represents the location and type of the volume snapshot + VolumeSnapshotSource `json:",inline" protobuf:"bytes,1,opt,name=volumeSnapshotSource"` + + // VolumeSnapshotRef is part of bi-directional binding between VolumeSnapshot + // and VolumeSnapshotContent. It becomes non-nil when bound. + // +optional + VolumeSnapshotRef *core_v1.ObjectReference `json:"volumeSnapshotRef" protobuf:"bytes,2,opt,name=volumeSnapshotRef"` + + // PersistentVolumeRef represents the PersistentVolume that the snapshot has been + // taken from. It becomes non-nil when VolumeSnapshot and VolumeSnapshotContent are bound. + // +optional + PersistentVolumeRef *core_v1.ObjectReference `json:"persistentVolumeRef" protobuf:"bytes,3,opt,name=persistentVolumeRef"` + // Name of the VolumeSnapshotClass used by the VolumeSnapshotContent. If not specified, a default snapshot class will + // be used if it is available. + // +optional + VolumeSnapshotClassName *string `json:"snapshotClassName" protobuf:"bytes,4,opt,name=snapshotClassName"` +} + +// VolumeSnapshotSource represents the actual location and type of the snapshot. Only one of its members may be specified. +type VolumeSnapshotSource struct { + // CSI (Container Storage Interface) represents storage that handled by an external CSI Volume Driver (Alpha feature). + // +optional + CSI *CSIVolumeSnapshotSource `json:"csiVolumeSnapshotSource,omitempty"` +} + +// Represents the source from CSI volume snapshot +type CSIVolumeSnapshotSource struct { + // Driver is the name of the driver to use for this snapshot. + // Required. + Driver string `json:"driver"` + + // SnapshotHandle is the unique snapshot id returned by the CSI volume + // plugin’s CreateSnapshot to refer to the snapshot on all subsequent calls. + // Required. + SnapshotHandle string `json:"snapshotHandle"` + + // Timestamp when the point-in-time snapshot is taken on the storage + // system. This timestamp will be generated by the CSI volume driver after + // the snapshot is cut. The format of this field should be a Unix nanoseconds + // time encoded as an int64. On Unix, the command `date +%s%N` returns + // the current time in nanoseconds since 1970-01-01 00:00:00 UTC. + CreationTime *int64 `json:"creationTime,omitempty" protobuf:"varint,3,opt,name=creationTime"` + + // When restoring volume from the snapshot, the volume size should be equal or + // larger than the Restoresize if it is specified. If RestoreSize is set to nil, it means + // that the storage plugin does not have this information available. + // +optional + RestoreSize *resource.Quantity `json:"restoreSize" protobuf:"bytes,2,opt,name=restoreSize"` +} + +``` + +#### The `VolumeSnapshotClass` Object + +A new VolumeSnapshotClass API object will be added instead of reusing the existing StorageClass, in order to avoid mixing parameters between snapshots and volumes. Each CSI Volume Driver can have its own default VolumeSnapshotClass. If VolumeSnapshotClass is not provided, a default will be used. It allows to add new parameters for snapshots. + +``` + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// VolumeSnapshotClass describes the parameters used by storage system when +// provisioning VolumeSnapshots from PVCs. +// The name of a VolumeSnapshotClass object is significant, and is how users can request a particular class. +type VolumeSnapshotClass struct { + metav1.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Snapshotter is the driver expected to handle this VolumeSnapshotClass. + Snapshotter string `json:"snapshotter" protobuf:"bytes,2,opt,name=snapshotter"` + + // Parameters holds parameters for the snapshotter. + // These values are opaque to the system and are passed directly + // to the snapshotter. + // +optional + Parameters map[string]string `json:"parameters,omitempty" protobuf:"bytes,3,rep,name=parameters"` +} + + +``` +### Volume API Changes + +With Snapshot API available, users could provision volumes from snapshot and data will be pre-populated to the volumes. Also considering clone and other possible storage operations, there could be many different types of sources used for populating the data to the volumes. In this proposal, we add a general "DataSource" which could be used to represent different types of data sources. + +#### The `DataSource` Object in PVC + +Add a new `DataSource` field into PVC to represent the source of the data which is populated to the provisioned volume. External-provisioner will check `DataSource` field and try to provision volume from the sources. In the first version, only VolumeSnapshot is the supported `Type` for data source object reference. Other types will be added in a future version. If unsupported `Type` is used, the PV Controller SHALL fail the operation. Please see more details in [here](https://github.com/kubernetes/community/pull/2495) + +Possible `DataSource` types may include the following: + + * VolumeSnapshot: restore snapshot to a new volume + * PersistentVolumeClaim: clone volume which is represented by PVC + +``` +type PersistentVolumeClaimSpec struct { + // If specified when creating, volume will be prepopulated with data from the DataSource. + // +optional + DataSource *TypedLocalObjectReference `json:"dataSource" protobuf:"bytes,2,opt,name=dataSource"` +} + +``` + +Add a TypedLocalObjectReference in core API. + +``` + +// TypedLocalObjectReference contains enough information to let you locate the referenced object inside the same namespace. +type TypedLocalObjectReference struct { + // Name of the object reference. + Name string + // Kind indicates the type of the object reference. + Kind string +} + +``` + +### Snapshot Controller Design +As the figure below shows, the CSI snapshot controller architecture consists of an external snapshotter which talks to out-of-tree CSI Volume Driver over socket (/run/csi/socket by default, configurable by -csi-address). External snapshotter is part of Kubernetes implementation of [Container Storage Interface (CSI)](https://github.com/container-storage-interface/spec). It is an external controller that monitors `VolumeSnapshot` and `VolumeSnapshotContent` objects and creates/deletes snapshot. +![CSI Snapshot Diagram](csi-snapshot_diagram.png?raw=true "CSI Snapshot Diagram") + +* External snapshotter uses ControllerGetCapabilities to find out if CSI driver supports CREATE_DELETE_SNAPSHOT calls. It degrades to trivial mode if not. + +* External snapshotter is responsible for creating/deleting snapshots and binding snapshot and SnapshotContent objects. It follows [controller](https://github.com/kubernetes/community/blob/master/contributors/devel/controllers.md) pattern and uses informers to watch for `VolumeSnapshot` and `VolumeSnapshotContent` create/update/delete events. It filters out `VolumeSnapshot` instances with `Snapshotter==` and processes these events in workqueues with exponential backoff. + +* For dynamically created snapshot, it should have a VolumeSnapshotClass associated with it. User can explicitly specify a VolumeSnapshotClass in the VolumeSnapshot API object. If user does not specify a VolumeSnapshotClass, a default VolumeSnapshotClass created by the admin will be used. This is similar to how a default StorageClass created by the admin will be used for the provisioning of a PersistentVolumeClaim. + +* For statically binding snapshot, user/admin must specify bi-pointers correctly for both VolumeSnapshot and VolumeSnapshotContent, so that the controller knows how to bind them. Otherwise, if VolumeSnapshot points to a non-exist VolumeSnapshotContent, or VolumeSnapshotContent does not point back to the VolumeSnapshot, the Error status will be set for VolumeSnapshot + +* External snapshotter is running in the sidecar along with external-attacher and external-provisioner for each CSI Volume Driver. + +* In current design, when the storage system fails to create snapshot, retry will not be performed in the controller. This is because users may not want to retry when taking consistent snapshots or scheduled snapshots when the timing of the snapshot creation is important. In a future version, a maxRetries flag or retry termination timestamp will be added to allow users to control whether retries are needed. + + +#### Changes in CSI External Provisioner + +`DataSource` is available in `PersistentVolumeClaim` to represent the source of the data which is prepopulated to the provisioned volume. The operation of the provisioning of a volume from a snapshot data source will be handled by the out-of-tree CSI External Provisioner. The in-tree PV Controller will handle the binding of the PV and PVC once they are ready. + + +#### CSI Volume Driver Snapshot Support + +The out-of-tree CSI Volume Driver creates a snapshot on the backend storage system or cloud provider, and calls CreateSnapshot through CSI ControllerServer and returns CreateSnapshotResponse. The out-of-tree CSI Volume Driver needs to implement the following functions: + +* CreateSnapshot, DeleteSnapshot, and create volume from snapshot if it supports CREATE_DELETE_SNAPSHOT. +* ListSnapshots if it supports LIST_SNAPSHOTS. + +ListSnapshots can be an expensive operation because it will try to list all snapshots on the storage system. For a storage system that takes nightly periodic snapshots, the total number of snapshots on the system can be huge. Kubernetes should try to avoid this call if possible. Instead, calling ListSnapshots with a specific snapshot_id as filtering to query the status of the snapshot will be more desirable and efficient. + +CreateSnapshot is a synchronous function and it must be blocking until the snapshot is cut. For cloud providers that support the uploading of a snapshot as part of creating snapshot operation, CreateSnapshot function must also be blocking until the snapshot is cut and after that it shall return an operation pending gRPC error code until the uploading process is complete. + +Refer to [Container Storage Interface (CSI)](https://github.com/container-storage-interface/spec) for detailed instructions on how CSI Volume Driver shall implement snapshot functions. + + +## Transition to the New Snapshot Support + +### Existing Implementation in External Storage Repo + +For the snapshot implementation in [external storage repo](https://github.com/kubernetes-incubator/external-storage/tree/master/snapshot), an external snapshot controller and an external provisioner need to be deployed. + +* The old implementation does not support CSI volume drivers. +* VolumeSnapshotClass concept does not exist in the old design. +* To restore a volume from the snapshot, however, user needs to create a new StorageClass that is different from the original one for the PVC. + +Here is an example yaml file to create a snapshot in the old design: + +```GO + +apiVersion: volumesnapshot.external-storage.k8s.io/v1 +kind: VolumeSnapshot +metadata: + name: hostpath-test-snapshot +spec: + persistentVolumeClaimName: pvc-test-hostpath + +``` + +### New Snapshot Design for CSI + +For the new snapshot model, a sidecar "Kubernetes to CSI" proxy container called "external-snapshotter" needs to be deployed in addition to the sidecar container for the external provisioner. This deployment model is shown in the CSI Snapshot Diagram in the CSI External Snapshot Controller section. + +* The new design supports CSI volume drivers. +* To create a snapshot for CSI, a VolumeSnapshotClass can be created and specified in the spec of VolumeSnapshot. +* To restore a volume from the snapshot, users could use the same StorageClass that is used for the original PVC. + +Here is an example to create a VolumeSnapshotClass and to create a snapshot in the new design: + +```GO + +apiVersion: snapshot.storage.k8s.io/v1alpha1 +kind: VolumeSnapshotClass +metadata: + name: csi-hostpath-snapclass +snapshotter: csi-hostpath +--- +apiVersion:snapshot.storage.k8s.io/v1alpha1 +kind: VolumeSnapshot +metadata: + name: snapshot-demo +spec: + snapshotClassName: csi-hostpath-snapclass + source: + name: hpvc + kind: PersistentVolumeClaim + +``` diff --git a/contributors/design-proposals/storage/csi-snapshot_diagram.png b/contributors/design-proposals/storage/csi-snapshot_diagram.png new file mode 100644 index 000000000..e040126e1 Binary files /dev/null and b/contributors/design-proposals/storage/csi-snapshot_diagram.png differ diff --git a/contributors/design-proposals/storage/data-source.md b/contributors/design-proposals/storage/data-source.md new file mode 100644 index 000000000..1cd56caaa --- /dev/null +++ b/contributors/design-proposals/storage/data-source.md @@ -0,0 +1,121 @@ +# Add DataSource for Volume Operations + +Note: this proposal is part of [Volume Snapshot](https://github.com/kubernetes/community/pull/2335) feature design, and also relevant to recently proposed [Volume Clone](https://github.com/kubernetes/community/pull/2533) feature. + +## Goal +Currently in Kubernetes, volume plugin only supports to provision an empty volume. With the new storage features (including [Volume Snapshot](https://github.com/kubernetes/community/pull/2335) and [volume clone](https://github.com/kubernetes/community/pull/2533)) being proposed, there is a need to support data population for volume provisioning. For example, volume can be created from a snapshot source, or volume could be cloned from another volume source. Depending on the sources for creating the volume, there are two scenarios +1. Volume provisioner can recognize the source and be able to create the volume from the source directly (e.g., restore snapshot to a volume or clone volume). +2. Volume provisioner does not recognize the volume source, and create an empty volume. Another external component (data populator) could watch the volume creation and implement the logic to populate/import the data to the volume provisioned. Only after data is populated to the volume, the PVC is ready for use. + +There could be many different types of sources used for populating the data to the volumes. In this proposal, we propose to add a generic "DataSource" field to PersistentVolumeClaimSpec to represent different types of data sources. + +## Design +### API Change +A new DataSource field is proposed to be added to PVC to represent the source of the data which is pre-populated to the provisioned volume. For DataSource field, we propose to define a new type “TypedLocalObjectReference”. It is similar to “LocalObjectReference” type with additional Kind field in order to support multiple data source types. In the alpha version, this data source is restricted in the same namespace of the PVC. The following are the APIs we propose to add. + +``` + +type PersistentVolumeClaimSpec struct { + // If specified, volume will be pre-populated with data from the specified data source. + // +optional + DataSource *TypedLocalObjectReference `json:"dataSource" protobuf:"bytes,2,opt,name=dataSource"` +} + +// TypedLocalObjectReference contains enough information to let you locate the referenced object inside the same namespace. +type TypedLocalObjectReference struct { + // Name of the object reference. + Name string + // Kind indicates the type of the object reference. + Kind string + // APIGroup is the group for the resource being referenced + APIGroup string +} + +``` +### Design Details +In the first alpha version, we only support data source from Snapshot. So the expected Kind in DataSource has to be "VolumeSnapshot". In this case, provisioner should provision volume and populate data in one step. There is no need for external data populator yet. + +For other types of data sources that require external data populator, volume creation and data population are two separate steps. Only when data is ready, PVC/PV can be marked as ready (Bound) so that users can start to use them. We are working on a separate proposal to address this using similar idea from ["Pod Ready++"](https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md). + +Note: In order to use this data source feature, user/admin needs to update to the new external provisioner which can recognize snapshot data source. Otherwise, data source will be ignored and an empty volume will be created + +## Use cases +* Use snapshot to backup data: Alice wants to take a snapshot of her Mongo database, and accidentally delete her tables, she wants to restore her volumes from the snapshot. +To create a snapshot for a volume (represented by PVC), use the snapshot.yaml + +``` +apiVersion: snapshot.storage.k8s.io/v1alpha1 +kind: VolumeSnapshot +metadata: + name: snapshot-pd-1 + namespace: mynamespace +spec: + source: + kind: PersistentVolumeClaim + name: podpvc + snapshotClassName: snapshot-class + + ``` + After snapshot is ready, create a new volume from the snapshot + +``` +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: snapshot-pvc + Namespace: mynamespace +spec: + accessModes: + - ReadWriteOnce + storageClassName: csi-gce-pd + dataSource: + kind: VolumeSnapshot + name: snapshot-pd-1 + resources: + requests: + storage: 6Gi +``` + +* Clone volume: Bob want to copy the data from one volume to another by cloning the volume. + +``` +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: clone-pvc + Namespace: mynamespace +spec: + accessModes: + - ReadWriteOnce + storageClassName: csi-gce-pd + dataSource: + kind: PersistentVolumeClaim + name: pvc-1 + resources: + requests: + storage: 10Gi +``` + +* Import data from Github repo: Alice want to import data from a github repo to her volume. The github repo is represented by a PVC (gitrepo-1). Compare with the user case 2 is that the data source should be the same kind of volume as the provisioned volume for cloning. + +``` +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: clone-pvc + Namespace: mynamespace +spec: + accessModes: + - ReadWriteOnce + storageClassName: csi-gce-pd + dataSource: + kind: PersistentVolumeClaim + name: gitrepo-1 + resources: + requests: + storage: 100Gi +``` + + + + diff --git a/contributors/design-proposals/storage/grow-flexvolume-size.md b/contributors/design-proposals/storage/grow-flexvolume-size.md new file mode 100644 index 000000000..01cffba84 --- /dev/null +++ b/contributors/design-proposals/storage/grow-flexvolume-size.md @@ -0,0 +1,170 @@ +# Proposal for Growing FlexVolume Size + +**Authors:** [xingzhou](https://github.com/xingzhou) + +## Goals + +Since PVC resizing is introduced in Kubernetes v1.8, several volume plugins have already supported this feature, e.g. GlusterFS, AWS EBS. In this proposal, we are proposing to support FlexVolume expansion. So when user uses FlexVolume and corresponding volume driver to connect to his/her backend storage system, he/she can expand the PV size by updating PVC in Kubernetes. + +## Non Goals + +* We only consider expanding FlexVolume size in this proposal. Decreasing size of FlexVolume will be designed in the future. +* In this proposal, user can only expand the FlexVolume size manually by updating PVC. Auto-expansion of FlexVolume based on specific meterings is not considered. +* The proposal only contains the changes made in FlexVolume, volume driver changes which should be made by user are not included. + +## Implementation Designs + +### Prerequisites + +* Kubernetes should be at least v1.8. +* Enable resizing by setting feature gate `ExpandPersistentVolumeGate` to `true`. +* Enable `PersistentVolumeClaimResize` admission plugin(optional). +* Follow the UI of PV resizing, including: + * Only dynamic provisioning supports volume resizing + * Set StorageClass attribute `allowVolumeExpansion` to `true` + +### Admission Control Changes + +Whether or not a specific volume plugin supports volume expansion is validated and checked in PV resize admission plugin. In general, we can list FlexVolume as the ones that support volume expansion and leave the actual expansion capability check to the underneath volume driver when PV resize controller calls the `ExpandVolumeDevice` method of FlexVolume. + +In PV resize admission plugin, add the following check to `checkVolumePlugin` method: +``` +// checkVolumePlugin checks whether the volume plugin supports resize +func (pvcr *persistentVolumeClaimResize) checkVolumePlugin(pv *api.PersistentVolume) bool { + ... + if pv.Spec.FlexVolume != nil { + return true + } + ... +} +``` + +### FlexVolume Plugin Changes + +FlexVolume relies on underneath volume driver to implement various volume functions, e.g. attach/detach. As a result, volume driver will decide whether volume can be expanded or not. + +By default, we assume all kinds of flex volume drivers support resizing. If they do not, flex volume plugin can detect this during resizing call to flex volume driver and always throw out error to stop the resizing process. So as a result, to implement resizing feature in flex volume plugin, the plugin itself must implement the following `ExpandableVolumePlugin` interfaces: + +#### ExpandVolumeDevice + +Volume resizing controller invokes this method while receiving a valid PVC resizing request. FlexVolume plugin calls the underneath volume driver’s corresponding `expandvolume` method with three parameters, including new size of volume(number in bytes), old size of volume(number in bytes) and volume spec, to expand PV. Once the expansion is done, volume driver should return the new size(number in bytes) of the volume to FlexVolume. + +A sample implementation of `ExpandVolumeDevice` method is like: +``` +func (plugin *flexVolumePlugin) ExpandVolumeDevice(spec *volume.Spec, newSize resource.Quantity, oldSize resource.Quantity) (resource.Quantity, error) { + const timeout = 10*time.Minute + + call := plugin.NewDriverCallWithTimeout(expandVolumeCmd, timeout) + call.Append(newSize.Value()) + call.Append(oldSize.Value()) + call.AppendSpec(spec, plugin.host, nil) + + // If the volume driver does not support resizing, Flex Volume Plugin can throw out error here + // to stop expand controller's resizing process. + ds, err := call.Run() + if err != nil { + return resource.NewQuantity(0, resource.BinarySI), err + } + + return resource.NewQuantity(ds.ActualVolumeSize, resource.BinarySI), nil +} +``` + +Add a new field in type `DriverStatus` named `ActualVolumeSize` to identify the new expanded size of the volume returned by underneath volume driver: +``` +// DriverStatus represents the return value of the driver callout. +type DriverStatus struct { + ... + ActualVolumeSize int64 `json:"volumeNewSize,omitempty"` +} +``` + +#### RequiresFSResize + +`RequiresFSResize` is a method to implement `ExpandableVolumePlugin` interface. The return value of this method identifies whether or not a file system resize is required once physical volume get expanded. If the return value is `true`, PV resize controller will consider the volume resize operation is done and then update the PV object’s capacity in K8s directly; If the return value is `false`, PV resize controller will leave kubelet to do the file system resize, and kubelet on worker node will call `ExpandFS` method of FlexVolume to finish the file system resize step(at present, only offline FS resize is supportted, online resize support is under community discussion [here](https://github.com/kubernetes/community/pull/1535)). + +The return value of `RequiresFSResize` is collected from underneath volume driver when FlexVolume invokes `init` method of volume driver. The sample code of `RequiresFSResize` in FlexVolume looks like: +``` +func (plugin *flexVolumePlugin) RequiresFSResize() bool { + return plugin.capabilities.RequiresFSResize +} +``` + +And as a result, the FlexVolume type `DriverCapability` can be redefined as: +``` +type DriverCapabilities struct { + Attach bool `json:"attach"` + RequiresFSResize bool `json:"requiresFSResize"` + SELinuxRelabel bool `json:"selinuxRelabel"` +} + +func defaultCapabilities() *DriverCapabilities { + return &DriverCapabilities{ + Attach: true, + RequiresFSResize: true, //By default, we require file system resize which will be done by kubelet + SELinuxRelabel: true, + } +} +``` + +#### ExpandFS + +`ExpandFS` is another method to implement `ExpandableVolumePlugin` interface. This method allows volume plugin itself instead of kubelet to resize the file system. If volume plugin returns `true` for `RequiresFSResize`, PV resize controller will leave FS resize to kubelet on worker node. Kubelet then will call FlexVolume `ExpandFS` to resize file system once physical volume expansion is done. + +As `ExpandFS` is called on worker node, volume driver can also take this chance to do physical volume resize together with file system resize as well. Also, current code only supports offline FS resize, online resize support is under dicsussion [here](https://github.com/kubernetes/community/pull/1535). Once online resize is implemented, we can also leverage online resize for FlexVolume by `ExpandFS` method. + +Note that `ExpandFS` is a new API for `ExpandableVolumeDriver`, the community ticket can be found [here](https://github.com/kubernetes/kubernetes/issues/58786). + +`ExpandFS` will call underneath volume driver `expandfs` method to finish FS resize. The sample code looks like: +``` +func (plugin *flexVolumePlugin) ExpandFS(spec *volume.Spec, newSize resource.Quantity, oldSize resource.Quantity) error { + const timeout = 10*time.Minute + + call := plugin.NewDriverCallWithTimeout(expandFSCmd, timeout) + call.Append(newSize.Value()) + call.Append(oldSize.Value()) + call.AppendSpec(spec, plugin.host, nil) + + _, err := call.Run() + + return err +} +``` + +For more design and details on how kubelet resizes volume file system, please refer to volume resizing proposal at: +https://github.com/kubernetes/community/blob/master/contributors/design-proposals/storage/grow-volume-size.md + + +Based on the above design, the resizing process for flex volume can be summarized as: +* If flex volume driver does not support resizing, driver shall not implement `expandvolume` method and flex volume plugin will throw out error to stop the expand volume controller's resizing process. +* If flex volume driver supports resizing, it shall implement `expandvolume` method and at least, the volume driver shall be installed on master node. +* If flex volume driver supports resizing and does not need file system resizing, it shall set "requiresFSResize" capability to `false`. Otherwise kubelet on worker node will call `ExpandFS` to resize the file system. +* If flex volume driver supports resizing and requires file system resizing(`RequiresFSResize` returns `true`), after the physical volume resizing is done, `ExpandFS` will be called from kubelet on worker node. +* If flex volume driver supports resizing and requires to resize the physical volume from worker node, the driver shall be installed on both master node and worker node. The driver on master node can do a non-op process for `ExpandVolumeDevice` and returns success message. For `RequiresFSResize`, driver on master node must return `true`. This process gives drivers on worker nodes a chance to make `physical volume resize` and `file system resize` together through `ExpandFS` call from kubelet. This scenario is useful for some local storage resizing cases. + +### Volume Driver Changes + +Volume driver needs to implement two new interfaces: `expandvolume` and `expandfs` to support volume resizing. + +For `expandvolume`, it takes three parameters: new size of volume(number in bytes), old size of volume(number in bytes) and volume spec json string. `expandvolume` expands the physical backend volume size and return the new size(number in bytes) of volume. + +For those volume plugins who need file system resize after physical volume is expanded, the `expandfs` method can take the FS resize work. If volume driver set the `requiresFSResize` capability to true, this method will be called from kubelet on worker node. Volume driver can do the file system resize (or physical volume resize together with file system resize) inside this method + +In addition, those volume drivers who support resizing but do not require fils system resizing shall set `requiresFSResize` capability to `false`: +``` +if [ "$op" = "init" ]; then + log '{"status": "Success", "capabilities": {“requiresFSResize”: false}}' + exit 0 +fi +``` + +### UI + +Expand FlexVolume size follows the same process as expanding other volume plugins, like GlusterFS. User creates and binds PVC and PV first. Then by using `kubectl edit pvc xxx` command, user can update the new size of PVC. + +## References + +* [Proposal for Growing Persistent Volume Size](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/storage/grow-volume-size.md) +* [PR for Volume Resizing Controller](https://github.com/kubernetes/kubernetes/commit/cd2a68473a5a5966fa79f455415cb3269a3f7462) +* [Online FS resize support](https://github.com/kubernetes/community/pull/1535) +* [Add “ExpandFS” method to “ExpandableVolumePlugin” interface](https://github.com/kubernetes/kubernetes/issues/58786) diff --git a/contributors/design-proposals/storage/grow-volume-size.md b/contributors/design-proposals/storage/grow-volume-size.md index 4fb53292f..a968d91c6 100644 --- a/contributors/design-proposals/storage/grow-volume-size.md +++ b/contributors/design-proposals/storage/grow-volume-size.md @@ -198,7 +198,7 @@ we have considered following options: Cons: * I don't know if there is a pattern that exists in kube today for shipping shell scripts that are called out from code in Kubernetes. Flex is - different because, none of the flex scripts are shipped with Kuberntes. + different because, none of the flex scripts are shipped with Kubernetes. 3. Ship resizing tools in a container. diff --git a/contributors/design-proposals/storage/pv-to-rbd-mapping.md b/contributors/design-proposals/storage/pv-to-rbd-mapping.md new file mode 100644 index 000000000..8071cbbe5 --- /dev/null +++ b/contributors/design-proposals/storage/pv-to-rbd-mapping.md @@ -0,0 +1,128 @@ +# RBD Volume to PV Mapping + +Authors: krmayankk@ + +### Problem + +The RBD Dynamic Provisioner currently generates rbd volume names which are random. +The current implementation generates a UUID and the rbd image name becomes +image := fmt.Sprintf("kubernetes-dynamic-pvc-%s", uuid.NewUUID()). This RBD image +name is stored in the PV. The PV also has a reference to the PVC to which it binds. +The problem with this approach is that if there is a catastrophic etcd data loss +and all PV's are gone, there is no way to recover the mapping from RBD to PVC. The +RBD volumes for the customer still exist, but we have no way to tell which rbd +volumes belong to which customer. + +## Goal +We want to store some information about the PVC in RBD image name/metadata, so that +in catastrophic situations, we can derive the PVC name from rbd image name/metadata +and allow customer the following options: +- Backup RBD volume data for specific customers and hand them their copy before deleting + the RBD volume. Without knowing from rbd image name/metadata, which customers they + belong to we cannot hand those customers their data. +- Create PV with the given RBD name and pre-bind it to the desired PVC so that customer + can get its data back. + +## Non Goals +This proposal doesnt attempt to undermine the importance of etcd backups to restore +data in catastrophic situations. This is one additional line of defense in case our +backups are not working. + +## Motivation + +We recently had an etcd data loss which resulted in loss of this rbd to pv mapping +and there was no way to restore customer data. This proposal aims to store pvc name +as metadata in the RBD image so that in catastrophic scenarios, the mapping can be +restored by just looking at the RBD's. + +## Current Implementation + +```go +func (r *rbdVolumeProvisioner) Provision() (*v1.PersistentVolume, error) { +... + + // create random image name + image := fmt.Sprintf("kubernetes-dynamic-pvc-%s", uuid.NewUUID()) + r.rbdMounter.Image = image +``` +## Finalized Proposal +Use `rbd image-meta set` command to store additional metadata in the RBD image about the PVC which owns +the RBD image. + +`rbd image-meta set --pool hdd kubernetes-dynamic-pvc-fabd715f-0d24-11e8-91fa-1418774b3e9d pvcname ` +`rbd image-meta set --pool hdd kubernetes-dynamic-pvc-fabd715f-0d24-11e8-91fa-1418774b3e9d pvcnamespace ` + +### Pros +- Simple to implement +- Does not cause regression in RBD image names, which remains same as earlier. +- The metadata information is not immediately visible to RBD admins + +### Cons +- NA + +Since this Proposal does not change the RBD image name and is able to store additional metadata about +the PVC to which it belongs, this is preferred over other two proposals. Also it does a better job +of hiding the PVC name in the metadata rather than making it more obvious in the RBD image name. The +metadata can only be seen by admins with appropriate permissions to run the rbd image-meta command. In +addition, this Proposal , doesnt impose any limitations on the length of metadata that can be stored +and hence can accommodate any pvc names and namespaces which are stored as arbitrary key value pairs. +It also leaves room for storing any other metadata about the PVC. + + +### Upgrade/Downgrade Behavior + +#### Upgrading from a K8s version without this metadata to a version with this metadata +The metadata for image is populated on CreateImage. After an upgrade, existing RBD Images will not have that +metadata set. When the next AttachDisk happens, we can check if the metadata is not set, set it. Cluster +administrators could also run a one time script to set this manually. For all newly created RBD images, +the rbd image metadata will be set properly. + +#### Downgrade from a K8s version with this metadata to a version without this metadata +After a downgrade, all existing RBD images will have the metadata set. New RBD images created after the +downgrade will not have this metadata. + +## Proposal 1 + +Make the RBD Image name as base64 encoded PVC name(namespace+name) + +```go +import b64 "encoding/base64" +... + + +func (r *rbdVolumeProvisioner) Provision() (*v1.PersistentVolume, error) { +... + + // Create a base64 encoding of the PVC Namespace and Name + rbdImageName := b64.StdEncoding.EncodeToString([]byte(r.options.PVC.Name+"/"+r.options.PVC.Namespace)) + + // Append the base64 encoding to the string `kubernetes-dynamic-pvc-` + rbdImageName = fmt.Sprintf("kubernetes-dynamic-pvc-%s", rbdImageName) + r.rbdMounter.Image = rbdImageName + +``` + +### Pros +- Simple scheme which encodes the fully qualified PVC name in the RBD image name + +### Cons +- Causes regression since RBD image names will change from one version of K8s to another. +- Some older versions of librbd/krbd start having issues with names longer than 95 characters. + + +## Proposal 2 + +Make the RBD Image name as the stringified PVC namespace plus PVC name. + +### Pros +- Simple to implement. + +### Cons +- Causes regression since RBD image names will change from one version of K8s to another. +- This exposes the customer name directly to Ceph Admins. Earlier it was hidden as base64 encoding + + +## Misc +- Document how Pre-Binding of PV to PVC works in dynamic provisioning +- Document/Test if there are other issues with restoring PVC/PV after a + etcd backup is restored diff --git a/contributors/design-proposals/storage/svcacct-token-volume-source.md b/contributors/design-proposals/storage/svcacct-token-volume-source.md new file mode 100644 index 000000000..3069e6776 --- /dev/null +++ b/contributors/design-proposals/storage/svcacct-token-volume-source.md @@ -0,0 +1,148 @@ +# Service Account Token Volumes + +Authors: + @smarterclayton + @liggitt + @mikedanese + +## Summary + +Kubernetes is able to provide pods with unique identity tokens that can prove +the caller is a particular pod to a Kubernetes API server. These tokens are +injected into pods as secrets. This proposal proposes a new mechanism of +distribution with support for [improved service account tokens][better-tokens] +and explores how to migrate from the existing mechanism backwards compatibly. + +## Motivation + +Many workloads running on Kubernetes need to prove to external parties who they +are in order to participate in a larger application environment. This identity +must be attested to by the orchestration system in a way that allows a third +party to trust that an arbitrary container on the cluster is who it says it is. +In addition, infrastructure running on top of Kubernetes needs a simple +mechanism to communicate with the Kubernetes APIs and to provide more complex +tooling. Finally, a significant set of security challenges are associated with +storing service account tokens as secrets in Kubernetes and limiting the methods +whereby malicious parties can get access to these tokens will reduce the risk of +platform compromise. + +As a platform, Kubernetes should evolve to allow identity management systems to +provide more powerful workload identity without breaking existing use cases, and +provide a simple out of the box workload identity that is sufficient to cover +the requirements of bootstrapping low-level infrastructure running on +Kubernetes. We expect that other systems to cover the more advanced scenarios, +and see this effort as necessary glue to allow more powerful systems to succeed. + +With this feature, we hope to provide a backwards compatible replacement for +service account tokens that strengthens the security and improves the +scalability of the platform. + +## Proposal + +Kubernetes should implement a ServiceAccountToken volume projection that +maintains a service account token requested by the node from the TokenRequest +API. + +### Token Volume Projection + +A new volume projection will be implemented with an API that closely matches the +TokenRequest API. + +```go +type ProjectedVolumeSource struct { + Sources []VolumeProjection + DefaultMode *int32 +} + +type VolumeProjection struct { + Secret *SecretProjection + DownwardAPI *DownwardAPIProjection + ConfigMap *ConfigMapProjection + ServiceAccountToken *ServiceAccountTokenProjection +} + +// ServiceAccountTokenProjection represents a projected service account token +// volume. This projection can be used to insert a service account token into +// the pods runtime filesystem for use against APIs (Kubernetes API Server or +// otherwise). +type ServiceAccountTokenProjection struct { + // Audience is the intended audience of the token. A recipient of a token + // must identify itself with an identifier specified in the audience of the + // token, and otherwise should reject the token. The audience defaults to the + // identifier of the apiserver. + Audience string + // ExpirationSeconds is the requested duration of validity of the service + // account token. As the token approaches expiration, the kubelet volume + // plugin will proactively rotate the service account token. The kubelet will + // start trying to rotate the token if the token is older than 80 percent of + // its time to live or if the token is older than 24 hours.Defaults to 1 hour + // and must be at least 10 minutes. + ExpirationSeconds int64 + // Path is the relative path of the file to project the token into. + Path string +} +``` + +A volume plugin implemented in the kubelet will project a service account token +sourced from the TokenRequest API into volumes created from +ProjectedVolumeSources. As the token approaches expiration, the kubelet volume +plugin will proactively rotate the service account token. The kubelet will start +trying to rotate the token if the token is older than 80 percent of its time to +live or if the token is older than 24 hours. + +To replace the current service account token secrets, we also need to inject the +clusters CA certificate bundle. Initially we will deploy to data in a configmap +per-namespace and reference it using a ConfigMapProjection. + +A projected volume source that is equivalent to the current service account +secret: + +```yaml +sources: +- serviceAccountToken: + expirationSeconds: 3153600000 # 100 years + path: token +- configMap: + name: kube-cacrt + items: + - key: ca.crt + path: ca.crt +- downwardAPI: + items: + - path: namespace + fieldRef: metadata.namespace +``` + + +This fixes one scalability issue with the current service account token +deployment model where secret GETs are a large portion of overall apiserver +traffic. + +A projected volume source that requests a token for vault and Istio CA: + +```yaml +sources: +- serviceAccountToken: + path: vault-token + audience: vault +- serviceAccountToken: + path: istio-token + audience: ca.istio.io +``` + +### Alternatives + +1. Instead of implementing a service account token volume projection, we could + implement all injection as a flex volume or CSI plugin. + 1. Both flex volume and CSI are alpha and are unlikely to graduate soon. + 1. Virtual kubelets (like Fargate or ACS) may not be able to run flex + volumes. + 1. Service account tokens are a fundamental part of our API. +1. Remove service accounts and service account tokens completely from core, use + an alternate mechanism that sits outside the platform. + 1. Other core features need service account integration, leading to all + users needing to install this extension. + 1. Complicates installation for the majority of users. + + +[better-tokens]: https://github.com/kubernetes/community/blob/master/contributors/design-proposals/auth/bound-service-account-tokens.md diff --git a/contributors/design-proposals/storage/volume-provisioning.md b/contributors/design-proposals/storage/volume-provisioning.md index c953fdffb..316ec4f0f 100644 --- a/contributors/design-proposals/storage/volume-provisioning.md +++ b/contributors/design-proposals/storage/volume-provisioning.md @@ -86,7 +86,7 @@ We propose that: ### Controller workflow for provisioning volumes -0. Kubernetes administator can configure name of a default StorageClass. This +0. Kubernetes administrator can configure name of a default StorageClass. This StorageClass instance is then used when user requests a dynamically provisioned volume, but does not specify a StorageClass. In other words, `claim.Spec.Class == ""` diff --git a/contributors/design-proposals/storage/volume-snapshotting.md b/contributors/design-proposals/storage/volume-snapshotting.md index eeb71b44d..df0aa1a7e 100644 --- a/contributors/design-proposals/storage/volume-snapshotting.md +++ b/contributors/design-proposals/storage/volume-snapshotting.md @@ -196,7 +196,7 @@ Open questions: * Do we call them snapshots or backups? - * From the SIG email: "The snapshot should not be suggested to be a backup in any documentation, because in practice is is necessary, but not sufficient, when conducting a backup of a stateful application." + * From the SIG email: "The snapshot should not be suggested to be a backup in any documentation, because in practice is necessary, but not sufficient, when conducting a backup of a stateful application." * At what minimum granularity should snapshots be allowed? diff --git a/contributors/design-proposals/storage/volume-topology-scheduling.md b/contributors/design-proposals/storage/volume-topology-scheduling.md index 2603e225a..230398c79 100644 --- a/contributors/design-proposals/storage/volume-topology-scheduling.md +++ b/contributors/design-proposals/storage/volume-topology-scheduling.md @@ -1,24 +1,36 @@ # Volume Topology-aware Scheduling -Authors: @msau42 +Authors: @msau42, @lichuqiang This document presents a detailed design for making the default Kubernetes scheduler aware of volume topology constraints, and making the PersistentVolumeClaim (PVC) binding aware of scheduling decisions. +## Definitions +* Topology: Rules to describe accessibility of an object with respect to + location in a cluster. +* Domain: A grouping of locations within a cluster. For example, 'node1', + 'rack10', 'zone5'. +* Topology Key: A description of a general class of domains. For example, + 'node', 'rack', 'zone'. +* Hierarchical domain: Domain that can be fully encompassed in a larger domain. + For example, the 'zone1' domain can be fully encompassed in the 'region1' + domain. +* Failover domain: A domain that a workload intends to run in at a later time. ## Goals -* Allow a Pod to request one or more topology-constrained Persistent -Volumes (PV) that are compatible with the Pod's other scheduling -constraints, such as resource requirements and affinity/anti-affinity -policies. -* Support arbitrary PV topology constraints (i.e. node, -rack, zone, foo, bar). -* Support topology constraints for statically created PVs and dynamically -provisioned PVs. +* Allow topology to be specified for both pre-provisioned and dynamic + provisioned PersistentVolumes so that the Kubernetes scheduler can correctly + place a Pod using such a volume to an appropriate node. +* Support arbitrary PV topology domains (i.e. node, rack, zone, foo, bar) + without encoding each as first class objects in the Kubernetes API. +* Allow the Kubernetes scheduler to influence where a volume is provisioned or + which pre-provisioned volume to bind to based on scheduling constraints on the + Pod requesting a volume, such as Pod resource requirements and + affinity/anti-affinity policies. * No scheduling latency performance regression for Pods that do not use -topology-constrained PVs. - + PVs with topology. +* Allow administrators to restrict allowed topologies per StorageClass. ## Non Goals * Fitting a pod after the initial PVC binding has been completed. @@ -36,13 +48,34 @@ operator to schedule them together. Another alternative is to merge the two pods into one. * For two+ pods non-simultaneously sharing a PVC, this scenario could be handled by pod priorities and preemption. +* Provisioning multi-domain volumes where all the domains will be able to run + the workload. For example, provisioning a multi-zonal volume and making sure + the pod can run in all zones. + * Scheduler cannot make decisions based off of future resource requirements, + especially if those resources can fluctuate over time. For applications that + use such multi-domain storage, the best practice is to either: + * Configure cluster autoscaling with enough resources to accommodate + failing over the workload to any of the other failover domains. + * Manually configure and overprovision the failover domains to + accommodate the resource requirements of the workload. +* Scheduler supporting volume topologies that are independent of the node's + topologies. + * The Kubernetes scheduler only handles topologies with respect to the + workload and the nodes it runs on. If a storage system is deployed on an + independent topology, it will be up to provisioner to correctly spread the + volumes for a workload. This could be facilitated as a separate feature + by: + * Passing the Pod's OwnerRef to the provisioner, and the provisioner + spreading volumes for Pods with the same OwnerRef + * Adding Volume Anti-Affinity policies, and passing those to the + provisioner. ## Problem Volumes can have topology constraints that restrict the set of nodes that the volume can be accessed on. For example, a GCE PD can only be accessed from a single zone, and a local disk can only be accessed from a single node. In the -future, there could be other topology constraints, such as rack or region. +future, there could be other topology domains, such as rack or region. A pod that uses such a volume must be scheduled to a node that fits within the volume’s topology constraints. In addition, a pod can have further constraints @@ -70,16 +103,21 @@ binding happens without considering if multiple PVCs are related, it is very lik for the two PVCs to be bound to local disks on different nodes, making the pod unschedulable. * For multizone clusters and deployments requesting multiple dynamically provisioned -zonal PVs, each PVC Is provisioned independently, and is likely to provision each PV -In different zones, making the pod unschedulable. +zonal PVs, each PVC is provisioned independently, and is likely to provision each PV +in different zones, making the pod unschedulable. To solve the issue of initial volume binding and provisioning causing an impossible pod placement, volume binding and provisioning should be more tightly coupled with pod scheduling. -## New Volume Topology Specification -To specify a volume's topology constraints in Kubernetes, the PersistentVolume +## Volume Topology Specification +First, volumes need a way to express topology constraints against nodes. Today, it +is done for zonal volumes by having explicit logic to process zone labels on the +PersistentVolume. However, this is not easily extendable for volumes with other +topology keys. + +Instead, to support a generic specification, the PersistentVolume object will be extended with a new NodeAffinity field that specifies the constraints. It will closely mirror the existing NodeAffinity type used by Pods, but we will use a new type so that we will not be bound by existing and @@ -107,18 +145,27 @@ weights, but will not be included in the initial implementation. The advantages of this NodeAffinity field vs the existing method of using zone labels on the PV are: -* We don't need to expose first-class labels for every topology domain. -* Implementation does not need to be updated every time a new topology domain +* We don't need to expose first-class labels for every topology key. +* Implementation does not need to be updated every time a new topology key is added to the cluster. * NodeSelector is able to express more complex topology with ANDs and ORs. +* NodeAffinity aligns with how topology is represented with other Kubernetes + resources. Some downsides include: * You can have a proliferation of Node labels if you are running many different kinds of volume plugins, each with their own topology labeling scheme. +* The NodeSelector is more expressive than what most storage providers will + need. Most storage providers only need a single topology key with + one or more domains. Non-hierarchical domains may present implementation + challenges, and it will be difficult to express all the functionality + of a NodeSelector in a non-Kubernetes specification like CSI. ### Example PVs with NodeAffinity #### Local Volume +In this example, the volume can only be accessed from nodes that have the +label key `kubernetes.io/hostname` and label value `node-1`. ``` apiVersion: v1 kind: PersistentVolume @@ -141,6 +188,9 @@ spec: ``` #### Zonal Volume +In this example, the volume can only be accessed from nodes that have the +label key `failure-domain.beta.kubernetes.io/zone` and label value +`us-central1-a`. ``` apiVersion: v1 kind: PersistentVolume @@ -164,6 +214,9 @@ spec: ``` #### Multi-Zonal Volume +In this example, the volume can only be accessed from nodes that have the +label key `failure-domain.beta.kubernetes.io/zone` and label value +`us-central1-a` OR `us-central1-b`. ``` apiVersion: v1 kind: PersistentVolume @@ -187,19 +240,154 @@ spec: - us-central1-b ``` -### Default Specification -Existing admission controllers and dynamic provisioners for zonal volumes -will be updated to specify PV NodeAffinity in addition to the existing zone -and region labels. This will handle newly created PV objects. +#### Multi Label Volume +In this example, the volume needs two labels to uniquely identify the topology. +``` +apiVersion: v1 +kind: PersistentVolume +metadata: + Name: rack-volume-1 +spec: + capacity: + storage: 100Gi + storageClassName: my-class + csi: + driver: my-rack-storage-driver + volumeHandle: my-vol + volumeAttributes: + foo: bar + nodeAffinity: + required: + nodeSelectorTerms: + - matchExpressions: + - key: failure-domain.beta.kubernetes.io/zone + operator: In + values: + - us-central1-a + - key: foo.io/rack + operator: In + values: + - rack1 +``` -Existing PV objects will have to be upgraded to use the new NodeAffinity field. -This does not have to occur instantaneously, and can be updated within the -deprecation period. +### Zonal PV Upgrade and Downgrade +Upgrading of zonal PVs to use the new PV.NodeAffinity API can be phased in as +follows: -TODO: This can be done through one of the following methods: -- Manual updates/scripts -- cluster/update-storage-objects.sh? -- A new PV update controller +1. Update PV label admission controllers to specify the new PV.NodeAffinity. New + PVs created will automatically use the new PV.NodeAffinity. Existing PVs are + not updated yet, so on a downgrade, existing PVs are unaffected. New PVCs + should be deleted and recreated if there were problems with this feature. +2. Once PV.NodeAffinity is GA, deprecate the VolumeZoneChecker scheduler + predicate. Add a zonal PV upgrade controller to convert existing PVs. At this + point, if there are issues with this feature, then on a downgrade, the + VolumeScheduling feature would also need to be disabled. +3. After deprecation period, remove VolumeZoneChecker predicate and PV upgrade + controller. + +The zonal PV upgrade controller will convert existing PVs leveraging the +existing zonal scheduling logic using labels to PV.NodeAffinity. It will keep +the existing labels for backwards compatibility. + +For example, this zonal volume: +``` +apiVersion: v1 +kind: PersistentVolume +metadata: + name: zonal-volume-1 + labels: + failure-domain.beta.kubernetes.io/zone: us-central1-a + failure-domain.beta.kubernetes.io/region: us-central1 +spec: + capacity: + storage: 100Gi + storageClassName: my-class + gcePersistentDisk: + diskName: my-disk + fsType: ext4 +``` + +will be converted to: +``` +apiVersion: v1 +kind: PersistentVolume +metadata: + name: zonal-volume-1 + labels: + failure-domain.beta.kubernetes.io/zone: us-central1-a + failure-domain.beta.kubernetes.io/region: us-central1 +spec: + capacity: + storage: 100Gi + storageClassName: my-class + gcePersistentDisk: + diskName: my-disk + fsType: ext4 + nodeAffinity: + required: + nodeSelectorTerms: + - matchExpressions: + - key: failure-domain.beta.kubernetes.io/zone + operator: In + values: + - us-central1-a + - key: failure-domain.beta.kubernetes.io/region + operator: In + values: + - us-central1 +``` + +### Multi-Zonal PV Upgrade +The zone label for multi-zonal volumes need to be specially parsed. + +For example, this multi-zonal volume: +``` +apiVersion: v1 +kind: PersistentVolume +metadata: + name: multi-zonal-volume-1 + labels: + failure-domain.beta.kubernetes.io/zone: us-central1-a__us-central1-b + failure-domain.beta.kubernetes.io/region: us-central1 +spec: + capacity: + storage: 100Gi + storageClassName: my-class + gcePersistentDisk: + diskName: my-disk + fsType: ext4 +``` + +will be converted to: +``` +apiVersion: v1 +kind: PersistentVolume +metadata: + name: zonal-volume-1 + labels: + failure-domain.beta.kubernetes.io/zone: us-central1-a__us-central1-b + failure-domain.beta.kubernetes.io/region: us-central1 +spec: + capacity: + storage: 100Gi + storageClassName: my-class + gcePersistentDisk: + diskName: my-disk + fsType: ext4 + nodeAffinity: + required: + nodeSelectorTerms: + - matchExpressions: + - key: failure-domain.beta.kubernetes.io/zone + operator: In + values: + - us-central1-a + - us-central1-b + - key: failure-domain.beta.kubernetes.io/region + operator: In + values: + - us-central1 +``` ### Bound PVC Enforcement For PVCs that are already bound to a PV with NodeAffinity, enforcement is @@ -225,90 +413,368 @@ Both binding decisions of: will be considered by the scheduler, so that all of a Pod's scheduling constraints can be evaluated at once. -The rest of this document describes the detailed design for implementing this -new volume binding behavior. +The detailed design for implementing this new volume binding behavior will be +described later in the scheduler integration section. +## Delayed Volume Binding +Today, volume binding occurs immediately once a PersistentVolumeClaim is +created. In order for volume binding to take into account all of a pod's other scheduling +constraints, volume binding must be delayed until a Pod is being scheduled. -## New Volume Binding Design -The design can be broken up into a few areas: -* User-facing API to invoke new behavior -* Integrating PV binding with pod scheduling -* Binding multiple PVCs as a single transaction -* Recovery from kubelet rejection of pod -* Making dynamic provisioning topology-aware - -For the alpha phase, only the user-facing API and PV binding and scheduler -integration are necessary. The remaining areas can be handled in beta and GA -phases. - -### User-facing API -In alpha, this feature is controlled by a feature gate, VolumeScheduling, and -must be configured in the kube-scheduler and kube-controller-manager. - -A new StorageClass field will be added to control the volume binding behavior. +A new StorageClass field `BindingMode` will be added to control the volume +binding behavior. ``` type StorageClass struct { ... - VolumeBindingMode *VolumeBindingMode + BindingMode *BindingMode } -type VolumeBindingMode string +type BindingMode string const ( - VolumeBindingImmediate VolumeBindingMode = "Immediate" - VolumeBindingWaitForFirstConsumer VolumeBindingMode = "WaitForFirstConsumer" + BindingImmediate BindingMode = "Immediate" + BindingWaitForFirstConsumer BindingMode = "WaitForFirstConsumer" ) ``` -`VolumeBindingImmediate` is the default and current binding method. +`BindingImmediate` is the default and current binding method. -This approach allows us to introduce the new binding behavior gradually and to -be able to maintain backwards compatibility without deprecation of previous -behavior. However, it has a few downsides: +This approach allows us to: +* Introduce the new binding behavior gradually. +* Maintain backwards compatibility without deprecation of previous + behavior. Any automation that waits for PVCs to be bound before scheduling Pods + will not break. +* Support scenarios where volume provisioning for globally-accessible volume + types could take a long time, where volume provisioning is a planned + event well in advance of workload deployment. + +However, it has a few downsides: * StorageClass will be required to get the new binding behavior, even if dynamic -provisioning is not used (in the case of local storage). -* We have to maintain two different paths for volume binding. + provisioning is not used (in the case of local storage). +* We have to maintain two different code paths for volume binding. * We will be depending on the storage admin to correctly configure the -StorageClasses for the volume types that need the new binding behavior. + StorageClasses for the volume types that need the new binding behavior. * User experience can be confusing because PVCs could have different binding -behavior depending on the StorageClass configuration. We will mitigate this by -adding a new PVC event to indicate if binding will follow the new behavior. + behavior depending on the StorageClass configuration. We will mitigate this by + adding a new PVC event to indicate if binding will follow the new behavior. -### Integrating binding with scheduling -For the alpha phase, the focus is on static provisioning of PVs to support -persistent local storage. +## Dynamic Provisioning with Topology +To make dynamic provisioning aware of pod scheduling decisions, delayed volume +binding must also be enabled. The scheduler will pass its selected node to the +dynamic provisioner, and the provisioner will create a volume in the topology +domain that the selected node is part of. The domain depends on the volume +plugin. Zonal volume plugins will create the volume in the zone where the +selected node is in. The local volume plugin will create the volume on the +selected node. + +### End to End Zonal Example +This is an example of the most common use case for provisioning zonal volumes. +For this use case, the user's specs are unchanged. Only one change +to the StorageClass is needed to enable delayed volume binding. + +1. Admin sets up StorageClass, setting up delayed volume binding. +``` +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: standard +provisioner: kubernetes.io/gce-pd +bindingMode: WaitForFirstConsumer +parameters: + type: pd-standard +``` +2. Admin launches provisioner. For in-tree plugins, nothing needs to be done. +3. User creates PVC. Nothing changes in the spec, although now the PVC won't be + immediately bound. +``` +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: my-pvc +spec: + storageClassName: standard + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 100Gi +``` +4. User creates Pod. Nothing changes in the spec. +``` +apiVersion: v1 +kind: Pod +metadata: + name: my-pod +spec: + containers: + ... + volumes: + - name: my-vol + persistentVolumeClaim: + claimName: my-pvc +``` +5. Scheduler picks a node that can satisfy the Pod and + [passes it](#pv-controller-changes) to the provisioner. +6. Provisioner dynamically provisions a PV that can be accessed from + that node. +``` +apiVersion: v1 +kind: PersistentVolume +metadata: + Name: volume-1 +spec: + capacity: + storage: 100Gi + storageClassName: standard + gcePersistentDisk: + diskName: my-disk + fsType: ext4 + nodeAffinity: + required: + nodeSelectorTerms: + - matchExpressions: + - key: failure-domain.beta.kubernetes.io/zone + operator: In + values: + - us-central1-a +``` +7. Pod gets scheduled to the node. + + +### Restricting Topology +For the common use case, volumes will be provisioned in whatever topology domain +the scheduler has decided is best to run the workload. Users may impose further +restrictions by setting label/node selectors, and pod affinity/anti-affinity +policies on their Pods. All those policies will be taken into account when +dynamically provisioning a volume. + +While less common, administrators may want to further restrict what topology +domains are available to a StorageClass. To support these administrator +policies, an AllowedTopologies field can also be specified in the +StorageClass to restrict the topology domains for dynamic provisioning. +This is not expected to be a common use case, and there are some caveats, +described below. + +``` +type StorageClass struct { + ... + + // Restrict the node topologies where volumes can be dynamically provisioned. + // Each volume plugin defines its own supported topology specifications. + // Each entry in AllowedTopologies is ORed. + AllowedTopologies []TopologySelector +} + +type TopologySelector struct { + // Topology must meet all of the TopologySelectorLabelRequirements + // These requirements are ANDed. + MatchLabelExpressions []TopologySelectorLabelRequirement +} + +// Topology requirement expressed as Node labels. +type TopologySelectorLabelRequirement struct{ + // Topology label key + Key string + // Topology must match at least one of the label Values for the given label Key. + // Each entry in Values is ORed. + Values []string +} +``` + +A nil value means there are no topology restrictions. A scheduler predicate +will evaluate a non-nil value when considering dynamic provisioning for a node. + +The AllowedTopologies will also be provided to provisioners as a new field, detailed in +the provisioner section. Provisioners can use the allowed topology information +in the following scenarios: +* StorageClass is using the default immediate binding mode. This is the + legacy topology-unaware behavior. In this scenario, the volume could be + provisioned in a domain that cannot run the Pod since it doesn't take any + scheduler input. +* For volumes that span multiple domains, the AllowedTopologies can restrict those + additional domains. However, special care must be taken to avoid specifying + conflicting topology constraints in the Pod. For example, the administrator could + restrict a multi-zonal volume to zones 'zone1' and 'zone2', but the Pod could have + constraints that restrict it to 'zone1' and 'zone3'. If 'zone1' + fails, the Pod cannot be scheduled to the intended failover zone. + +Note that if delayed binding is enabled and the volume spans only a single domain, +then the AllowedTopologies can be ignored by the provisioner because the +scheduler would have already taken it into account when it selects the node. + +Kubernetes will leave validation and enforcement of the AllowedTopologies content up +to the provisioner. + +Support in the GCE PD and AWS EBS provisioners for the existing `zone` and `zones` +parameters will be deprecated. CSI in-tree migration will handle translation of +`zone` and `zones` parameters to CSI topology. + +Admins must already create a new StorageClass with delayed volume binding to use +this feature, so the documentation can encourage use of the AllowedTopologies +instead of existing zone parameters. A plugin-specific admission controller +can also validate that both zone and AllowedTopologies are not specified, +although the CSI plugin should still be robust to handle this configuration +error. + +##### Alternatives +A new restricted TopologySelector is used here instead of reusing +VolumeNodeAffinity because the provisioning operation requires +allowed topologies to be explicitly enumerated, while NodeAffinity and +NodeSelectors allow for non-explicit expressions of topology values (i.e., +operators NotIn, Exists, DoesNotExist, Gt, Lt). It would be difficult for +provisioners to evaluate all the expressions without having to enumerate all the +Nodes in the cluster. + +Another alternative is to have a list of allowed PV topologies, where each PV +topology is exactly the same as a single PV topology. This expression can become +very verbose for volume types that have multi-dimensional topologies or multiple +selections. As an example, for a multi-zonal volume that needs to select +two zones, if an administrator wants to restrict the selection to 4 zones, then +all 6 combinations need to be explicitly enumerated. + +Another alternative is to expand ResourceQuota to support topology constraints. +However, ResourceQuota is currently only evaluated during admission, and not +scheduling. + +#### Zonal Example +This example restricts the volumes provisioned to zones us-central1-a and +us-central1-b. +``` +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: zonal-class +provisioner: kubernetes.io/gce-pd +parameters: + type: pd-standard +allowedTopologies: +- matchLabelExpressions: + - key: failure-domain.beta.kubernetes.io/zone + values: + - us-central1-a + - us-central1-b +``` + +#### Multi-Zonal Example +This example restricts the volume's primary and failover zones +to us-central1-a, us-central1-b and us-central1-c. The regional PD +provisioner will pick two out of the three zones to provision in. +``` +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: multi-zonal-class +provisioner: kubernetes.io/gce-pd +parameters: + type: pd-standard + replication-type: regional-pd +allowedTopologies: +- matchLabelExpressions: + - key: failure-domain.beta.kubernetes.io/zone + values: + - us-central1-a + - us-central1-b + - us-central1-c +``` + +Topologies that are incompatible with the storage provider parameters +will be enforced by the provisioner. For example, dynamic provisioning +of regional PDs will fail if provisioning is restricted to fewer than +two zones in all regions. This configuration will cause provisioning to fail: +``` +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: multi-zonal-class +provisioner: kubernetes.io/gce-pd +parameters: + type: pd-standard + replication-type: regional-pd +allowedTopologies: +- matchLabelExpressions: + - key: failure-domain.beta.kubernetes.io/zone + values: + - us-central1-a +``` + +#### Multi Label Example +This example restricts the volume's topology to nodes that +have the following labels: + +* "zone: us-central1-a" and "rack: rack1" or, +* "zone: us-central1-b" and "rack: rack1" or, +* "zone: us-central1-b" and "rack: rack2" + +``` +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: something-fancy +provisioner: rack-based-provisioner +parameters: +allowedTopologies: +- matchLabelExpressions: + - key: zone + values: + - us-central1-a + - key: rack + values: + - rack1 +- matchLabelExpressions: + - key: zone + values: + - us-central1-b + - key: rack + values: + - rack1 + - rack2 +``` + + +## Feature Gates +All functionality is controlled by the VolumeScheduling feature gate, +and must be configured in the +kube-scheduler, kube-controller-manager, and all kubelets. + +## Integrating volume binding with pod scheduling For the new volume binding mode, the proposed new workflow is: -1. Admin statically creates PVs and/or StorageClasses. +1. Admin pre-provisions PVs and/or StorageClasses. 2. User creates unbound PVC and there are no prebound PVs for it. 3. **NEW:** PVC binding and provisioning is delayed until a pod is created that references it. 4. User creates a pod that uses the PVC. 5. Pod starts to get processed by the scheduler. -6. **NEW:** A new predicate function, called MatchUnboundPVCs, will look at all of -a Pod’s unbound PVCs, and try to find matching PVs for that node based on the -PV topology. If there are no matching PVs, then it checks if dynamic -provisioning is possible for that node. -7. **NEW:** The scheduler continues to evaluate priorities. A new priority -function, called PrioritizeUnboundPVCs, will get the PV matches per PVC per +6. Scheduler processes predicates. +7. **NEW:** A new predicate function, called CheckVolumeBinding, will process +both bound and unbound PVCs of the Pod. It will validate the VolumeNodeAffinity +for bound PVCs. For unbound PVCs, it will try to find matching PVs for that node +based on the PV NodeAffinity. If there are no matching PVs, then it checks if +dynamic provisioning is possible for that node based on StorageClass +AllowedTopologies. +8. The scheduler continues to evaluate priority functions +9. **NEW:** A new priority +function, called PrioritizeVolumes, will get the PV matches per PVC per node, and compute a priority score based on various factors. -8. **NEW:** After evaluating all the existing predicates and priorities, the -scheduler will pick a node, and call a new assume function, AssumePVCs, -passing in the Node. The assume function will check if any binding or +10. After evaluating all the predicates and priorities, the +scheduler will pick a node. +11. **NEW:** A new assume function, AssumePodVolumes, is called by the scheduler. +The assume function will check if any binding or provisioning operations need to be done. If so, it will update the PV cache to -mark the PVs with the chosen PVCs. -9. **NEW:** If PVC binding or provisioning is required, we do NOT AssumePod. -Instead, a new bind function, BindPVCs, will be called asynchronously, passing +mark the PVs with the chosen PVCs and queue the Pod for volume binding. +12. AssumePod is done by the scheduler. +13. **NEW:** If PVC binding or provisioning is required, a new bind function, +BindPodVolumes, will be called asynchronously, passing in the selected node. The bind function will prebind the PV to the PVC, or -trigger dynamic provisioning. Then, it always sends the Pod through the -scheduler again for reasons explained later. -10. When a Pod makes a successful scheduler pass once all PVCs are bound, the -scheduler assumes and binds the Pod to a Node. -11. Kubelet starts the Pod. +trigger dynamic provisioning. Then, it waits for the binding or provisioning +operation to complete. +14. In the same async thread, scheduler binds the Pod to a Node. +15. Kubelet starts the Pod. This diagram depicts the new additions to the default scheduler: + ![alt text](volume-topology-scheduling.png) This new workflow will have the scheduler handle unbound PVCs by choosing PVs @@ -328,15 +794,18 @@ avoid these error conditions are to: * Separate out volumes that the user prebinds from the volumes that are available for the system to choose from by StorageClass. -#### PV Controller Changes +### PV Controller Changes When the feature gate is enabled, the PV controller needs to skip binding unbound PVCs with VolumBindingWaitForFirstConsumer and no prebound PVs to let it come through the scheduler path. Dynamic provisioning will also be skipped if -VolumBindingWaitForFirstConsumer is set. The scheduler will signal to +VolumBindingWaitForFirstConsumer is set. The scheduler will signal to the PV controller to start dynamic provisioning by setting the -`annStorageProvisioner` annotation in the PVC. +`annSelectedNode` annotation in the PVC. If provisioning fails, the PV +controller can signal back to the scheduler to retry dynamic provisioning by +removing the `annSelectedNode` annotation. For external provisioners, the +external provisioner needs to remove the annotation. No other state machine changes are required. The PV controller continues to handle the remaining scenarios without any change. @@ -344,14 +813,39 @@ handle the remaining scenarios without any change. The methods to find matching PVs for a claim and prebind PVs need to be refactored for use by the new scheduler functions. -#### Scheduler Changes +### Dynamic Provisioning interface changes +The dynamic provisioning interfaces will be updated to pass in: +* selectedNode, when late binding is enabled on the StorageClass +* allowedTopologies, when it is set in the StorageClass -##### Predicate +If selectedNode is set, the provisioner should get its appropriate topology +labels from the Node object, and provision a volume based on those topology +values. In the common use case for a volume supporting a single topology domain, +if nodeName is set, then allowedTopologies can be ignored by the provisioner. +However, multi-domain volume provisioners may still need to look at +allowedTopologies to restrict the remaining domains. + +In-tree provisioners: +``` +Provision(selectedNode *v1.Node, allowedTopologies *storagev1.VolumeProvisioningTopology) (*v1.PersistentVolume, error) +``` + +External provisioners: +* selectedNode will be represented by the PVC annotation "volume.alpha.kubernetes.io/selectedNode". + Value is the name of the node. +* allowedTopologies must be obtained by looking at the StorageClass for the PVC. + +#### New Permissions +Provisioners will need to be able to get Node and StorageClass objects. + +### Scheduler Changes + +#### Predicate A new predicate function checks all of a Pod's unbound PVCs can be satisfied by existing PVs or dynamically provisioned PVs that are topologically-constrained to the Node. ``` -MatchUnboundPVCs(pod *v1.Pod, node *v1.Node) (canBeBound bool, err error) +CheckVolumeBinding(pod *v1.Pod, node *v1.Node) (canBeBound bool, err error) ``` 1. If all the Pod’s PVCs are bound, return true. 2. Otherwise try to find matching PVs for all of the unbound PVCs in order of @@ -361,88 +855,98 @@ decreasing requested capacity. 5. Temporarily cache this PV choice for the PVC per Node, for fast processing later in the priority and bind functions. 6. Return true if all PVCs are matched. -7. If there are still unmatched PVCs, check if dynamic provisioning is possible. -For this alpha phase, the provisioner is not topology aware, so the predicate -will just return true if there is a provisioner specified in the StorageClass -(internal or external). +7. If there are still unmatched PVCs, check if dynamic provisioning is possible, + by evaluating StorageClass.AllowedTopologies. If so, + temporarily cache this decision in the PVC per Node. 8. Otherwise return false. -##### Priority +Note that we should consider all the cases which may affect predicate cached +results of CheckVolumeBinding and other scheduler predicates, this will be +explained later. + +#### Priority After all the predicates run, there is a reduced set of Nodes that can fit a Pod. A new priority function will rank the remaining nodes based on the unbound PVCs and their matching PVs. ``` -PrioritizeUnboundPVCs(pod *v1.Pod, filteredNodes HostPriorityList) (rankedNodes HostPriorityList, err error) +PrioritizeVolumes(pod *v1.Pod, filteredNodes HostPriorityList) (rankedNodes HostPriorityList, err error) ``` 1. For each Node, get the cached PV matches for the Pod’s PVCs. 2. Compute a priority score for the Node using the following factors: 1. How close the PVC’s requested capacity and PV’s capacity are. - 2. Matching static PVs is preferred over dynamic provisioning because we + 2. Matching pre-provisioned PVs is preferred over dynamic provisioning because we assume that the administrator has specifically created these PVs for the Pod. TODO (beta): figure out weights and exact calculation -##### Assume +#### Assume Once all the predicates and priorities have run, then the scheduler picks a Node. Then we can bind or provision PVCs for that Node. For better scheduler performance, we’ll assume that the binding will likely succeed, and update the -PV cache first. Then the actual binding API update will be made +PV and PVC caches first. Then the actual binding API update will be made asynchronously, and the scheduler can continue processing other Pods. -For the alpha phase, the AssumePVCs function will be directly called by the +For the alpha phase, the AssumePodVolumes function will be directly called by the scheduler. We’ll consider creating a generic scheduler interface in a subsequent phase. ``` -AssumePVCs(pod *v1.Pod, node *v1.Node) (pvcBindingRequired bool, err error) +AssumePodVolumes(pod *v1.pod, node *v1.node) (pvcbindingrequired bool, err error) ``` 1. If all the Pod’s PVCs are bound, return false. -2. For static PV binding: +2. For pre-provisioned PV binding: 1. Get the cached matching PVs for the PVCs on that Node. 2. Validate the actual PV state. 3. Mark PV.ClaimRef in the PV cache. 4. Cache the PVs that need binding in the Pod object. 3. For in-tree and external dynamic provisioning: - 1. Cache the PVCs that need provisioning in the Pod object. -4. Return true. + 1. Mark the PVC annSelectedNode in the PVC cache. + 2. Cache the PVCs that need provisioning in the Pod object. +4. Return true -##### Bind -If AssumePVCs returns pvcBindingRequired, then the BindPVCs function is called -as a go routine. Otherwise, we can continue with assuming and binding the Pod -to the Node. +#### Bind +A separate go routine performs the binding operation for the Pod. -For the alpha phase, the BindUnboundPVCs function will be directly called by the +If AssumePodVolumes returns pvcBindingRequired, then BindPodVolumes is called +first in this go routine. It will handle binding and provisioning of PVCs that +were assumed, and wait for the operations to complete. + +Once complete, or if no volumes need to be bound, then the scheduler continues +binding the Pod to the Node. + +For the alpha phase, the BindPodVolumes function will be directly called by the scheduler. We’ll consider creating a generic scheduler interface in a subsequent phase. ``` -BindUnboundPVCs(pod *v1.Pod, node *v1.Node) (err error) +BindPodVolumes(pod *v1.Pod, node *v1.Node) (err error) ``` -1. For static PV binding: +1. For pre-provisioned PV binding: 1. Prebind the PV by updating the `PersistentVolume.ClaimRef` field. 2. If the prebind fails, revert the cache updates. 2. For in-tree and external dynamic provisioning: - 1. Set `annStorageProvisioner` on the PVC. -3. Send Pod back through scheduling, regardless of success or failure. - 1. In the case of success, we need one more pass through the scheduler in -order to evaluate other volume predicates that require the PVC to be bound, as -described below. - 2. In the case of failure, we want to retry binding/provisioning. + 1. Set `annSelectedNode` on the PVC. +3. Wait for binding and provisioning to complete. + 1. In the case of failure, error is returned and the Pod will retry + scheduling. Failure scenarios include: + * PV or PVC got deleted + * PV.ClaimRef got cleared + * PVC selectedNode annotation got cleared or is set to the wrong node TODO: pv controller has a high resync frequency, do we need something similar for the scheduler too -##### Access Control -Scheduler will need PV update permissions for prebinding static PVs, and PVC -modify permissions for triggering dynamic provisioning. +#### Access Control +Scheduler will need PV update permissions for prebinding pre-provisioned PVs, and PVC +update permissions for triggering dynamic provisioning. -##### Pod preemption considerations -The MatchUnboundPVs predicate does not need to be re-evaluated for pod +#### Pod preemption considerations +The CheckVolumeBinding predicate does not need to be re-evaluated for pod preemption. Preempting a pod that uses a PV will not free up capacity on that node because the PV lifecycle is independent of the Pod’s lifecycle. -##### Other scheduler predicates +#### Other scheduler predicates Currently, there are a few existing scheduler predicates that require the PVC to be bound. The bound assumption needs to be changed in order to work with this new workflow. @@ -452,7 +956,7 @@ running predicates? One possible way is to mark at the beginning of scheduling a Pod if all PVCs were bound. Then we can check if a second scheduler pass is needed. -###### Max PD Volume Count Predicate +##### Max PD Volume Count Predicate This predicate checks the maximum number of PDs per node is not exceeded. It needs to be integrated into the binding decision so that we don’t bind or provision a PV if it’s going to cause the node to exceed the max PD limit. But @@ -460,7 +964,7 @@ until it is integrated, we need to make one more pass in the scheduler after all the PVCs are bound. The current copy of the predicate in the default scheduler has to remain to account for the already-bound volumes. -###### Volume Zone Predicate +##### Volume Zone Predicate This predicate makes sure that the zone label on a PV matches the zone label of the node. If the volume is not bound, this predicate can be ignored, as the binding logic will take into account zone constraints on the PV. @@ -472,21 +976,22 @@ topology-unaware, and we need to make one more pass in the scheduler after all the PVCs are bound. This predicate needs to remain in the default scheduler to handle the -already-bound volumes using the old zonal labeling. It can be removed once that -mechanism is deprecated and unsupported. +already-bound volumes using the old zonal labeling, but must be updated to skip +unbound PVC if StorageClass binding mode is WaitForFirstConsumer. It can be +removed once that mechanism is deprecated and unsupported. -###### Volume Node Predicate +##### Volume Node Predicate This is a new predicate added in 1.7 to handle the new PV node affinity. It evaluates the node affinity against the node’s labels to determine if the pod can be scheduled on that node. If the volume is not bound, this predicate can be ignored, as the binding logic will take into account the PV node affinity. -##### Caching +#### Caching There are two new caches needed in the scheduler. The first cache is for handling the PV/PVC API binding updates occurring -asynchronously with the main scheduler loop. `AssumePVCs` needs to store -the updated API objects before `BindUnboundPVCs` makes the API update, so +asynchronously with the main scheduler loop. `AssumePodVolumes` needs to store +the updated API objects before `BindPodVolumes` makes the API update, so that future binding decisions will not choose any assumed PVs. In addition, if the API update fails, the cached updates need to be reverted and restored with the actual API object. The cache will return either the cached-only @@ -507,6 +1012,87 @@ all the volume predicates are fully run once all PVCs are bound. * Caching PV matches per node decisions that the predicate had made. This is an optimization to avoid walking through all the PVs again in priority and assume functions. +* Caching PVC dynamic provisioning decisions per node that the predicate had + made. + +#### Event handling + +##### Move pods into active queue +When a pod is tried and determined to be unschedulable, it will be placed in +the unschedulable queue by scheduler. It will not be scheduled until being +moved to active queue. For volume topology scheduling, we need to move +pods to active queue in following scenarios: + +- on PVC add + + Pod which references nonexistent PVCs is unschedulable for now, we need to + move pods to active queue when a PVC is added. + +- on PVC update + + The proposed design has the scheduler initiating the binding transaction by + prebinding the PV and waiting for PV controller to finish binding and put it + back in the schedule queue. To achieve this, we need to move pods to active + queue on PVC update. + +- on PV add + + Pods created when there are no PVs available will be stuck in unschedulable + queue. But unbound PVs created for static provisioning and delay binding + storage class are skipped in PV controller dynamic provisioning and binding + process, will not trigger events to schedule pod again. So we need to move + pods to active queue on PV add for this scenario. + +- on PV update + + In scheduler assume process, if volume binding is required, scheduler will + put pod to unschedulable queue and wait for asynchronous volume binding + updates are made. But binding volumes worker may fail to update assumed pod + volume bindings due to conflicts if PVs are updated by PV controller or other + entities. So we need to move pods to active queue on PV update for this + scenario. + +- on Storage Class add + + CheckVolumeBindingPred will fail if pod has unbound immediate PVCs. If these + PVCs have specified StorageClass name, creating StorageClass objects with + late binding for these PVCs will cause predicates to pass, so we need to move + pods to active queue when a StorageClass with WaitForFirstConsumer is added. + +##### Invalidate predicate equivalence cache +Scheduler now have an optional [equivalence +cache](../scheduling/scheduler-equivalence-class.md#goals) to improve +scheduler's scalability. We need to invalidate +CheckVolumeBinding/NoVolumeZoneConflict predicate cached results in following +scenarios to keep equivalence class cache up to date: + +- on PVC add/delete + + When PVCs are created or deleted, available PVs to choose from for volume + scheduling may change, we need to invalidate CheckVolumeBinding predicate. + +- on PVC update + + PVC volume binding may change on PVC update, we need to invalidate + CheckVolumeBinding predicate. + +- on PV add/delete + + When PVs are created or deleted, available PVs to choose from for volume + scheduling will change, we need to invalidate CheckVolumeBinding + predicate. + +- on PV update + + CheckVolumeBinding predicate may cache PVs in pod binding cache. When PV got + updated, we should invalidate cache, otherwise assume process will fail + with out of sync error. + +- on StorageClass delete + + When a StorageClass with WaitForFirstConsumer is deleted, PVCs which references + this storage class will be in immediate binding mode. We need to invalidate + CheckVolumeBinding and NoVolumeZoneConflict. #### Performance and Optimizations Let: @@ -524,14 +1110,7 @@ PVs for every node, so its running time is O(NV). A few optimizations can be made to improve the performance: -1. Optimizing for PVs that don’t use node affinity (to prevent performance -regression): - 1. Index the PVs by StorageClass and only search the PV list with matching -StorageClass. - 2. Keep temporary state in the PVC cache if we previously succeeded or -failed to match PVs, and if none of the PVs have node affinity. Then we can -skip PV matching on subsequent nodes, and just return the result of the first -attempt. +1. PVs that don’t use node affinity should not be using delayed binding. 2. Optimizing for PVs that have node affinity: 1. When a static PV is created, if node affinity is present, evaluate it against all the nodes. For each node, keep an in-memory map of all its PVs @@ -541,7 +1120,7 @@ match against the PVs in the node’s PV map instead of the cluster-wide PV list For the alpha phase, the optimizations are not required. However, they should be required for beta and GA. -#### Packaging +### Packaging The new bind logic that is invoked by the scheduler can be packaged in a few ways: * As a library to be directly called in the default scheduler @@ -556,7 +1135,7 @@ for more race conditions due to the caches being out of sync. because the scheduler’s cache and PV controller’s cache have different interfaces and private methods. -##### Extender cons +#### Extender cons However, the cons of the extender approach outweighs the cons of the library approach. @@ -578,18 +1157,18 @@ Kubernetes. With all this complexity, the library approach is the most feasible in a single release time frame, and aligns better with the current Kubernetes architecture. -#### Downsides +### Downsides -##### Unsupported Use Cases +#### Unsupported Use Cases The following use cases will not be supported for PVCs with a StorageClass with -VolumeBindingWaitForFirstConsumer: +BindingWaitForFirstConsumer: * Directly setting Pod.Spec.NodeName * DaemonSets These two use cases will bypass the default scheduler and thus will not trigger PV binding. -##### Custom Schedulers +#### Custom Schedulers Custom schedulers, controllers and operators that handle pod scheduling and want to support this new volume binding mode will also need to handle the volume binding decision. @@ -604,7 +1183,7 @@ easier for custom schedulers to include in their own implementation. In general, many advanced scheduling features have been added into the default scheduler, such that it is becoming more difficult to run without it. -##### HA Master Upgrades +#### HA Master Upgrades HA masters adds a bit of complexity to this design because the active scheduler process and active controller-manager (PV controller) process can be on different nodes. That means during an HA master upgrade, the scheduler and controller-manager @@ -624,9 +1203,9 @@ all dependencies are at the required versions. For alpha, this is not concerning, but it needs to be solved by GA. -#### Other Alternatives Considered +### Other Alternatives Considered -##### One scheduler function +#### One scheduler function An alternative design considered was to do the predicate, priority and bind functions all in one function at the end right before Pod binding, in order to reduce the number of passes we have to make over all the PVs. However, this @@ -641,7 +1220,7 @@ on a Node that the higher priority pod still cannot run on due to PVC requirements. For that reason, the PVC binding decision needs to be have its predicate function separated out and evaluated with the rest of the predicates. -##### Pull entire PVC binding into the scheduler +#### Pull entire PVC binding into the scheduler The proposed design only has the scheduler initiating the binding transaction by prebinding the PV. An alternative is to pull the whole two-way binding transaction into the scheduler, but there are some complex scenarios that @@ -653,7 +1232,7 @@ scheduler’s Pod sync loop cannot handle: Handling these scenarios in the scheduler’s Pod sync loop is not possible, so they have to remain in the PV controller. -##### Keep all PVC binding in the PV controller +#### Keep all PVC binding in the PV controller Instead of initiating PV binding in the scheduler, have the PV controller wait until the Pod has been scheduled to a Node, and then try to bind based on the chosen Node. A new scheduling predicate is still needed to filter and match @@ -685,7 +1264,7 @@ can make a lot of wrong decisions after the restart. evaluated. To solve this, all the volume predicates need to also be built into the PV controller when matching possible PVs. -##### Move PVC binding to kubelet +#### Move PVC binding to kubelet Looking into the future, with the potential for NUMA-aware scheduling, you could have a sub-scheduler on each node to handle the pod scheduling within a node. It could make sense to have the volume binding as part of this sub-scheduler, to make @@ -699,7 +1278,7 @@ to just that node, but for zonal storage, it could see all the PVs in that zone. In addition, the sub-scheduler is just a thought at this point, and there are no concrete proposals in this area yet. -### Binding multiple PVCs in one transaction +## Binding multiple PVCs in one transaction There are no plans to handle this, but a possible solution is presented here if the need arises in the future. Since the scheduler is serialized, a partial binding failure should be a rare occurrence and would only be caused if there is a user or @@ -720,25 +1299,12 @@ If scheduling fails, update all bound PVCs with an annotation, are clean. Scheduler and kubelet needs to reject pods with PVCs that are undergoing rollback. -### Recovering from kubelet rejection of pod +## Recovering from kubelet rejection of pod We can use the same rollback mechanism as above to handle this case. If kubelet rejects a pod, it will go back to scheduling. If the scheduler cannot find a node for the pod, then it will encounter scheduling failure and initiate the rollback. -### Making dynamic provisioning topology aware -TODO (beta): Design details - -For alpha, we are not focusing on this use case. But it should be able to -follow the new workflow closely with some modifications. -* The FindUnboundPVCs predicate function needs to get provisionable capacity per -topology dimension from the provisioner somehow. -* The PrioritizeUnboundPVCs priority function can add a new priority score factor -based on available capacity per node. -* The BindUnboundPVCs bind function needs to pass in the node to the provisioner. -The internal and external provisioning APIs need to be updated to take in a node -parameter. - ## Testing @@ -752,7 +1318,7 @@ parameter. * Multiple PVCs specified in a pod * Positive: Enough local PVs available on a single node * Negative: Not enough local PVs available on a single node -* Fallback to dynamic provisioning if unsuitable static PVs +* Fallback to dynamic provisioning if unsuitable pre-provisioned PVs ### Unit tests * All PVCs found a match on first node. Verify match is best suited based on diff --git a/contributors/design-proposals/storage/volume-topology-scheduling.png b/contributors/design-proposals/storage/volume-topology-scheduling.png index b952ff39b..0e724aef3 100644 Binary files a/contributors/design-proposals/storage/volume-topology-scheduling.png and b/contributors/design-proposals/storage/volume-topology-scheduling.png differ diff --git a/contributors/devel/OWNERS b/contributors/devel/OWNERS index 4d6fca736..a6fd6e038 100644 --- a/contributors/devel/OWNERS +++ b/contributors/devel/OWNERS @@ -1,14 +1,16 @@ reviewers: - - grodrigues3 - - Phillels - - idvoretskyi - calebamiles - cblecker + - grodrigues3 + - idvoretskyi + - Phillels - spiffxp approvers: - - grodrigues3 - - Phillels - - idvoretskyi - calebamiles - cblecker + - grodrigues3 + - idvoretskyi + - lavalamp + - Phillels - spiffxp + - thockin diff --git a/contributors/devel/README.md b/contributors/devel/README.md index 46ae7b9a2..626adaadb 100644 --- a/contributors/devel/README.md +++ b/contributors/devel/README.md @@ -11,7 +11,7 @@ Guide](http://kubernetes.io/docs/admin/). * **Contributor Guide** ([Please start here](/contributors/guide/README.md)) to learn about how to contribute to Kubernetes -* **GitHub Issues** ([issues.md](issues.md)): How incoming issues are triaged. +* **GitHub Issues** ([/contributors/guide/issue-triage.md](/contributors/guide/issue-triage.md)): How incoming issues are triaged. * **Pull Request Process** ([/contributors/guide/pull-requests.md](/contributors/guide/pull-requests.md)): When and why pull requests are closed. @@ -26,6 +26,9 @@ Guide](http://kubernetes.io/docs/admin/). * **Testing** ([testing.md](testing.md)): How to run unit, integration, and end-to-end tests in your development sandbox. +* **Conformance Testing** ([conformance-tests.md](conformance-tests.md)) + What is conformance testing and how to create/manage them. + * **Hunting flaky tests** ([flaky-tests.md](flaky-tests.md)): We have a goal of 99.9% flake free tests. Here's how to run your tests many times. diff --git a/contributors/devel/api-conventions.md b/contributors/devel/api-conventions.md index 0243dbd8f..80aeb1e7c 100644 --- a/contributors/devel/api-conventions.md +++ b/contributors/devel/api-conventions.md @@ -306,34 +306,57 @@ response reduces the complexity of these clients. ##### Typical status properties **Conditions** represent the latest available observations of an object's -current state. Objects may report multiple conditions, and new types of -conditions may be added in the future. Therefore, conditions are represented -using a list/slice, where all have similar structure. +state. They are an extension mechanism intended to be used when the details of +an observation are not a priori known or would not apply to all instances of a +given Kind. For observations that are well known and apply to all instances, a +regular field is preferred. An example of a Condition that probably should +have been a regular field is Pod's "Ready" condition - it is managed by core +controllers, it is well understood, and it applies to all Pods. + +Objects may report multiple conditions, and new types of conditions may be +added in the future or by 3rd party controllers. Therefore, conditions are +represented using a list/slice, where all have similar structure. The `FooCondition` type for some resource type `Foo` may include a subset of the following fields, but must contain at least `type` and `status` fields: ```go - Type FooConditionType `json:"type" description:"type of Foo condition"` - Status ConditionStatus `json:"status" description:"status of the condition, one of True, False, Unknown"` + Type FooConditionType `json:"type" description:"type of Foo condition"` + Status ConditionStatus `json:"status" description:"status of the condition, one of True, False, Unknown"` + // +optional - LastHeartbeatTime unversioned.Time `json:"lastHeartbeatTime,omitempty" description:"last time we got an update on a given condition"` + Reason *string `json:"reason,omitempty" description:"one-word CamelCase reason for the condition's last transition"` // +optional - LastTransitionTime unversioned.Time `json:"lastTransitionTime,omitempty" description:"last time the condition transit from one status to another"` + Message *string `json:"message,omitempty" description:"human-readable message indicating details about last transition"` + // +optional - Reason string `json:"reason,omitempty" description:"one-word CamelCase reason for the condition's last transition"` + LastHeartbeatTime *unversioned.Time `json:"lastHeartbeatTime,omitempty" description:"last time we got an update on a given condition"` // +optional - Message string `json:"message,omitempty" description:"human-readable message indicating details about last transition"` + LastTransitionTime *unversioned.Time `json:"lastTransitionTime,omitempty" description:"last time the condition transit from one status to another"` ``` Additional fields may be added in the future. +Do not use fields that you don't need - simpler is better. + +Use of the `Reason` field is encouraged. + +Use the `LastHeartbeatTime` with great caution - frequent changes to this field +can cause a large fan-out effect for some resources. + Conditions should be added to explicitly convey properties that users and components care about rather than requiring those properties to be inferred from -other observations. +other observations. Once defined, the meaning of a Condition can not be +changed arbitrarily - it becomes part of the API, and has the same backwards- +and forwards-compatibility concerns of any other part of the API. Condition status values may be `True`, `False`, or `Unknown`. The absence of a -condition should be interpreted the same as `Unknown`. +condition should be interpreted the same as `Unknown`. How controllers handle +`Unknown` depends on the Condition in question. + +Condition types should indicate state in the "abnormal-true" polarity. For +example, if the condition indicates when a policy is invalid, the "is valid" +case is probably the norm, so the condition should be called "Invalid". In general, condition values may change back and forth, but some condition transitions may be monotonic, depending on the resource and condition type. @@ -742,7 +765,9 @@ APIs may return alternative representations of any resource in response to an Accept header or under alternative endpoints, but the default serialization for input and output of API responses MUST be JSON. -Protobuf serialization of API objects are currently **EXPERIMENTAL** and will change without notice. +A protobuf encoding is also accepted for built-in resources. As proto is not +self-describing, there is an envelope wrapper which describes the type of +the contents. All dates should be serialized as RFC3339 strings. @@ -753,6 +778,9 @@ must be specified as part of the value (e.g., `resource.Quantity`). Which approach is preferred is TBD, though currently we use the `fooSeconds` convention for durations. +Duration fields must be represented as integer fields with units being +part of the field name (e.g. `leaseDurationSeconds`). We don't use Duration +in the API since that would require clients to implement go-compatible parsing. ## Selecting Fields @@ -1147,6 +1175,13 @@ be ambiguous and they are not specified by the value or value type. * The name of a field expressing a boolean property called 'fooable' should be called `Fooable`, not `IsFooable`. +### Namespace Names +* The name of a namespace must be a +[DNS_LABEL](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/architecture/identifiers.md). +* The `kube-` prefix is reserved for Kubernetes system namespaces, e.g. `kube-system` and `kube-public`. +* See +[the namespace docs](https://kubernetes.io/docs/user-guide/namespaces/) for more information. + ## Label, selector, and annotation conventions Labels are the domain of users. They are intended to facilitate organization and diff --git a/contributors/devel/api_changes.md b/contributors/devel/api_changes.md index 2440902e6..fa53adb2d 100644 --- a/contributors/devel/api_changes.md +++ b/contributors/devel/api_changes.md @@ -95,36 +95,49 @@ backward-compatibly. Before talking about how to make API changes, it is worthwhile to clarify what we mean by API compatibility. Kubernetes considers forwards and backwards -compatibility of its APIs a top priority. +compatibility of its APIs a top priority. Compatibility is *hard*, especially +handling issues around rollback-safety. This is something every API change +must consider. -An API change is considered forward and backward-compatible if it: +An API change is considered compatible if it: * adds new functionality that is not required for correct behavior (e.g., does not add a new required field) * does not change existing semantics, including: - * default values *and behavior* + * the semantic meaning of default values *and behavior* * interpretation of existing API types, fields, and values * which fields are required and which are not * mutable fields do not become immutable * valid values do not become invalid + * explicitly invalid values do not become valid Put another way: -1. Any API call (e.g. a structure POSTed to a REST endpoint) that worked before -your change must work the same after your change. -2. Any API call that uses your change must not cause problems (e.g. crash or -degrade behavior) when issued against servers that do not include your change. -3. It must be possible to round-trip your change (convert to different API +1. Any API call (e.g. a structure POSTed to a REST endpoint) that succeeded +before your change must succeed after your change. +2. Any API call that does not use your change must behave the same as it did +before your change. +3. Any API call that uses your change must not cause problems (e.g. crash or +degrade behavior) when issued against an API servers that do not include your +change. +4. It must be possible to round-trip your change (convert to different API versions and back) with no loss of information. -4. Existing clients need not be aware of your change in order for them to -continue to function as they did previously, even when your change is utilized. +5. Existing clients need not be aware of your change in order for them to +continue to function as they did previously, even when your change is in use. +6. It must be possible to rollback to a previous version of API server that +does not include your change and have no impact on API objects which do not use +your change. API objects that use your change will be impacted in case of a +rollback. -If your change does not meet these criteria, it is not considered strictly -compatible, and may break older clients, or result in newer clients causing -undefined behavior. +If your change does not meet these criteria, it is not considered compatible, +and may break older clients, or result in newer clients causing undefined +behavior. Such changes are generally disallowed, though exceptions have been +made in extreme cases (e.g. security or obvious bugs). -Let's consider some examples. In a hypothetical API (assume we're at version -v6), the `Frobber` struct looks something like this: +Let's consider some examples. + +In a hypothetical API (assume we're at version v6), the `Frobber` struct looks +something like this: ```go // API v6. @@ -134,7 +147,7 @@ type Frobber struct { } ``` -You want to add a new `Width` field. It is generally safe to add new fields +You want to add a new `Width` field. It is generally allowed to add new fields without changing the API version, so you can simply change it to: ```go @@ -146,29 +159,55 @@ type Frobber struct { } ``` -The onus is on you to define a sane default value for `Width` such that rule #1 -above is true - API calls and stored objects that used to work must continue to -work. +The onus is on you to define a sane default value for `Width` such that rules +#1 and #2 above are true - API calls and stored objects that used to work must +continue to work. For your next change you want to allow multiple `Param` values. You can not -simply change `Param string` to `Params []string` (without creating a whole new -API version) - that fails rules #1 and #2. You can instead do something like: +simply remove `Param string` and add `Params []string` (without creating a +whole new API version) - that fails rules #1, #2, #3, and #6. Nor can you +simply add `Params []string` and use it instead - that fails #2 and #6. + +You must instead define a new field and the relationship between that field and +the existing field(s). Start by adding the new plural field: ```go -// Still API v6, but kind of clumsy. +// Still API v6. type Frobber struct { Height int `json:"height"` Width int `json:"width"` Param string `json:"param"` // the first param - ExtraParams []string `json:"extraParams"` // additional params + Params []string `json:"params"` // all of the params } ``` -Now you can satisfy the rules: API calls that provide the old style `Param` -will still work, while servers that don't understand `ExtraParams` can ignore -it. This is somewhat unsatisfying as an API, but it is strictly compatible. +This new field must be inclusive of the singular field. In order to satisfy +the compatibility rules you must handle all the cases of version skew, multiple +clients, and rollbacks. This can be handled by defaulting or admission control +logic linking the fields together with context from the API operation to get as +close as possible to the user's intentions. -Part of the reason for versioning APIs and for using internal structs that are +Upon any mutating API operation: + * If only the singular field is specified (e.g. an older client), API logic + must populate plural[0] from the singular value, and de-dup the plural + field. + * If only the plural field is specified (e.g. a newer client), API logic must + populate the singular value from plural[0]. + * If both the singular and plural fields are specified, API logic must + validate that the singular value matches plural[0]. + * Any other case is an error and must be rejected. + +For this purpose "is specified" means the following: + * On a create or patch operation: the field is present in the user-provided input + * On an update operation: the field is present and has changed from the + current value + +Older clients that only know the singular field will continue to succeed and +produce the same results as before the change. Newer clients can use your +change without impacting older clients. The API server can be rolled back and +only objects that use your change will be impacted. + +Part of the reason for versioning APIs and for using internal types that are distinct from any one version is to handle growth like this. The internal representation can be implemented as: @@ -181,24 +220,26 @@ type Frobber struct { } ``` -The code that converts to/from versioned APIs can decode this into the somewhat -uglier (but compatible!) structures. Eventually, a new API version, let's call -it v7beta1, will be forked and it can use the clean internal structure. +The code that converts to/from versioned APIs can decode this into the +compatible structure. Eventually, a new API version, e.g. v7beta1, +will be forked and it can drop the singular field entirely. -We've seen how to satisfy rules #1 and #2. Rule #3 means that you can not +We've seen how to satisfy rules #1, #2, and #3. Rule #4 means that you can not extend one versioned API without also extending the others. For example, an API call might POST an object in API v7beta1 format, which uses the cleaner `Params` field, but the API server might store that object in trusty old v6 form (since v7beta1 is "beta"). When the user reads the object back in the v7beta1 API it would be unacceptable to have lost all but `Params[0]`. This means that, even though it is ugly, a compatible change must be made to the v6 -API. +API, as above. -However, this is very challenging to do correctly. It often requires multiple +For some changes, this can be challenging to do correctly. It may require multiple representations of the same information in the same API resource, which need to -be kept in sync in the event that either is changed. For example, let's say you -decide to rename a field within the same API version. In this case, you add -units to `height` and `width`. You implement this by adding duplicate fields: +be kept in sync should either be changed. + +For example, let's say you decide to rename a field within the same API +version. In this case, you add units to `height` and `width`. You implement +this by adding new fields: ```go type Frobber struct { @@ -211,17 +252,17 @@ type Frobber struct { You convert all of the fields to pointers in order to distinguish between unset and set to 0, and then set each corresponding field from the other in the -defaulting pass (e.g., `heightInInches` from `height`, and vice versa), which -runs just prior to conversion. That works fine when the user creates a resource -from a hand-written configuration -- clients can write either field and read -either field, but what about creation or update from the output of GET, or -update via PATCH (see -[In-place updates](https://kubernetes.io/docs/user-guide/managing-deployments/#in-place-updates-of-resources))? -In this case, the two fields will conflict, because only one field would be -updated in the case of an old client that was only aware of the old field (e.g., -`height`). +defaulting logic (e.g. `heightInInches` from `height`, and vice versa). That +works fine when the user creates a sends a hand-written configuration -- +clients can write either field and read either field. -Say the client creates: +But what about creation or update from the output of a GET, or update via PATCH +(see [In-place updates](https://kubernetes.io/docs/user-guide/managing-deployments/#in-place-updates-of-resources))? +In these cases, the two fields will conflict, because only one field would be +updated in the case of an old client that was only aware of the old field +(e.g. `height`). + +Suppose the client creates: ```json { @@ -252,17 +293,16 @@ then PUTs back: } ``` -The update should not fail, because it would have worked before `heightInInches` -was added. +As per the compatibility rules, the update must not fail, because it would have +worked before the change. ## Backward compatibility gotchas -* A single feature/property cannot be represented using multiple spec fields in the same API version - simultaneously, as the example above shows. Only one field can be populated in any resource at a time, and the client - needs to be able to specify which field they expect to use (typically via API version), - on both mutation and read. Old clients must continue to function properly while only manipulating - the old field. New clients must be able to function properly while only manipulating the new - field. +* A single feature/property cannot be represented using multiple spec fields + simultaneously within an API version. Only one representation can be + populated at a time, and the client needs to be able to specify which field + they expect to use (typically via API version), on both mutation and read. As + above, older clients must continue to function properly. * A new representation, even in a new API version, that is more expressive than an old one breaks backward compatibility, since clients that only understood the @@ -283,7 +323,7 @@ was added. be set, it is acceptable to add a new option to the union if the [appropriate conventions](api-conventions.md#objects) were followed in the original object. Removing an option requires following the [deprecation process](https://kubernetes.io/docs/reference/deprecation-policy/). - + * Changing any validation rules always has the potential of breaking some client, since it changes the assumptions about part of the API, similar to adding new enum values. Validation rules on spec fields can neither be relaxed nor strengthened. Strengthening cannot be permitted because any requests that previously @@ -291,23 +331,32 @@ was added. of the API resource. Status fields whose writers are under our control (e.g., written by non-pluggable controllers), may potentially tighten validation, since that would cause a subset of previously valid values to be observable by clients. - + * Do not add a new API version of an existing resource and make it the preferred version in the same release, and do not make it the storage version. The latter is necessary so that a rollback of the apiserver doesn't render resources in etcd undecodable after rollback. +* Any field with a default value in one API version must have *non-nil default + values* in all API versions. If a default value is added to a field in one API + version, and the field didn't have a default value in previous API versions, + it is required to add a default value semantically equivalent to an unset + value to the field in previous API versions, to preserve the semantic + meaning of the value being unset. This includes: + * a new optional field with a default value is introduced in a new API version + * an old optional field without a default value (i.e. can be nil) has a + default value in a new API version + ## Incompatible API changes -There are times when this might be OK, but mostly we want changes that meet this -definition. If you think you need to break compatibility, you should talk to the -Kubernetes team first. +There are times when incompatible changes might be OK, but mostly we want +changes that meet the above definitions. If you think you need to break +compatibility, you should talk to the Kubernetes API reviewers first. Breaking compatibility of a beta or stable API version, such as v1, is unacceptable. Compatibility for experimental or alpha APIs is not strictly required, but breaking compatibility should not be done lightly, as it disrupts -all users of the feature. Experimental APIs may be removed. Alpha and beta API -versions may be deprecated and eventually removed wholesale, as described in the -[versioning document](../design-proposals/release/versioning.md). +all users of the feature. Alpha and beta API versions may be deprecated and +eventually removed wholesale, as described in the [deprecation policy](https://kubernetes.io/docs/reference/deprecation-policy/). If your change is going to be backward incompatible or might be a breaking change for API consumers, please send an announcement to @@ -365,10 +414,20 @@ being required otherwise. ### Edit defaults.go If your change includes new fields for which you will need default values, you -need to add cases to `pkg/apis///defaults.go` (the core v1 API -is special, its defaults.go is at `pkg/api/v1/defaults.go`. For simplicity, we -will not mention this special case in the rest of the article). Of course, since -you have added code, you have to add a test: +need to add cases to `pkg/apis///defaults.go`. + +**Note:** When adding default values to new fields, you *must* also add default +values in all API versions, instead of leaving new fields unset (e.g. `nil`) in +old API versions. This is required because defaulting happens whenever a +serialized version is read (see [#66135]). When possible, pick meaningful values +as sentinels for unset values. + +In the past the core v1 API +was special. Its `defaults.go` used to live at `pkg/api/v1/defaults.go`. +If you see code referencing that path, you can be sure its outdated. Now the core v1 api lives at +`pkg/apis/core/v1/defaults.go` which follows the above convention. + +Of course, since you have added code, you have to add a test: `pkg/apis///defaults_test.go`. Do use pointers to scalars when you need to distinguish between an unset value @@ -379,6 +438,8 @@ pick a default. Don't forget to run the tests! +[#66135]: https://github.com/kubernetes/kubernetes/issues/66135 + ### Edit conversion.go Given that you have not yet changed the internal structs, this might feel @@ -601,7 +662,6 @@ Due to the fast changing nature of the project, the following content is probabl to generate protobuf IDL and marshallers. * You must add the new version to [cmd/kube-apiserver/app#apiVersionPriorities](https://github.com/kubernetes/kubernetes/blob/v1.8.0-alpha.2/cmd/kube-apiserver/app/aggregator.go#L172) - to let the aggregator list it. This list will be removed before release 1.8. * You must setup storage for the new version in [pkg/registry/group_name/rest](https://github.com/kubernetes/kubernetes/blob/v1.8.0-alpha.2/pkg/registry/authentication/rest/storage_authentication.go) @@ -788,9 +848,9 @@ For example, consider the following object: // API v6. type Frobber struct { // height ... - Height *int32 `json:"height" protobuf:"varint,1,opt,name=height"` + Height *int32 `json:"height" // param ... - Param string `json:"param" protobuf:"bytes,2,opt,name=param"` + Param string `json:"param" } ``` @@ -800,11 +860,11 @@ A developer is considering adding a new `Width` parameter, like this: // API v6. type Frobber struct { // height ... - Height *int32 `json:"height" protobuf:"varint,1,opt,name=height"` + Height *int32 `json:"height" // param ... - Param string `json:"param" protobuf:"bytes,2,opt,name=param"` + Param string `json:"param" // width ... - Width *int32 `json:"width,omitempty" protobuf:"varint,3,opt,name=width"` + Width *int32 `json:"width,omitempty" } ``` @@ -858,13 +918,13 @@ The preferred approach adds an alpha field to the existing object, and ensures i // API v6. type Frobber struct { // height ... - Height int32 `json:"height" protobuf:"varint,1,opt,name=height"` + Height int32 `json:"height"` // param ... - Param string `json:"param" protobuf:"bytes,2,opt,name=param"` + Param string `json:"param"` // width indicates how wide the object is. // This field is alpha-level and is only honored by servers that enable the Frobber2D feature. // +optional - Width *int32 `json:"width,omitempty" protobuf:"varint,3,opt,name=width"` + Width *int32 `json:"width,omitempty"` } ``` @@ -931,15 +991,15 @@ In future Kubernetes versions: Another option is to introduce a new type with an new `alpha` or `beta` version designator, like this: -``` +```go // API v7alpha1 type Frobber struct { // height ... - Height *int32 `json:"height" protobuf:"varint,1,opt,name=height"` + Height *int32 `json:"height"` // param ... - Param string `json:"param" protobuf:"bytes,2,opt,name=param"` + Param string `json:"param"` // width ... - Width *int32 `json:"width,omitempty" protobuf:"varint,3,opt,name=width"` + Width *int32 `json:"width,omitempty"` } ``` diff --git a/contributors/devel/architectural-roadmap.md b/contributors/devel/architectural-roadmap.md index afe37b1a7..04a9002a6 100644 --- a/contributors/devel/architectural-roadmap.md +++ b/contributors/devel/architectural-roadmap.md @@ -761,7 +761,7 @@ therefore wouldn’t be considered to be part of Kubernetes. applications, but not for specific applications. * Platform as a Service: Kubernetes [provides a - foundation](http://blog.kubernetes.io/2017/02/caas-the-foundation-for-next-gen-paas.html) + foundation](https://kubernetes.io/blog/2017/02/caas-the-foundation-for-next-gen-paas/) for a multitude of focused, opinionated PaaSes, including DIY ones. diff --git a/contributors/devel/automation.md b/contributors/devel/automation.md index e46ff9a5b..ccf2218a7 100644 --- a/contributors/devel/automation.md +++ b/contributors/devel/automation.md @@ -6,65 +6,25 @@ Kubernetes uses a variety of automated tools in an attempt to relieve developers of repetitive, low brain power work. This document attempts to describe these processes. +## Tide -## Submit Queue +This project formerly used a Submit Queue, it has since been replaced by +[Tide](https://git.k8s.io/test-infra/prow/cmd/tide). -In an effort to - * reduce load on core developers - * maintain end-to-end test stability - * load test github's label feature +#### Ready to merge status -We have added an automated [submit-queue](https://git.k8s.io/test-infra/mungegithub/submit-queue) -to the -[github "munger"](https://git.k8s.io/test-infra/mungegithub) -for kubernetes. - -The submit-queue does the following: - -```go -for _, pr := range readyToMergePRs() { - if testsAreStable() { - if retestPR(pr) == success { - mergePR(pr) - } - } -} -``` - -The status of the submit-queue is [online.](http://submit-queue.k8s.io/) - -### Ready to merge status - -A PR is considered "ready for merging" by the submit queue if it matches the set -of conditions listed in the [merge requirements tab](http://submit-queue.k8s.io/#/info) -of the info page. +A PR is considered "ready for merging" by Tide if it matches the set +of conditions listed in the [Tide dashboard](https://prow.k8s.io/tide). Please visit that page for more details. -### Merge process - -If the PR has the `retest-not-required` label, it is simply merged. If the PR does -not have this label, the aforementioned required tests are re-run. -If these tests pass a second time, the PR will be merged when this PR finishes retesting. - -## Github Munger - -We run [github "mungers"](https://git.k8s.io/test-infra/mungegithub). - -This runs repeatedly over github pulls and issues and runs modular "mungers". -The mungers include the "submit-queue" referenced above along -with numerous other functions. See the README in the link above. - -Please feel free to unleash your creativity on this tool, send us new mungers -that you think will help support the Kubernetes development process. - ### Closing stale pull-requests -Github Munger will close pull-requests that don't have human activity in the +Prow will close pull-requests that don't have human activity in the last 90 days. It will warn about this process 60 days before closing the pull-request, and warn again 30 days later. One way to prevent this from -happening is to add the `keep-open` label on the pull-request. +happening is to add the `lifecycle/frozen` label on the pull-request. -Feel free to re-open and maybe add the `keep-open` label if this happens to a +Feel free to re-open and maybe add the `lifecycle/frozen` label if this happens to a valid pull-request. It may also be a good opportunity to get more attention by verifying that it is properly assigned and/or mention people that might be interested. Commenting on the pull-request will also keep it open for another 90 @@ -89,4 +49,4 @@ during the original test. It would be good to file flakes as an The simplest way is to comment `/retest`. Any pushes of new code to the PR will automatically trigger a new test. No human -interraction is required. Note that if the PR has a `lgtm` label, it will be removed after the pushes. +interaction is required. Note that if the PR has a `lgtm` label, it will be removed after the pushes. diff --git a/contributors/devel/bazel.md b/contributors/devel/bazel.md index de80b4b2a..991a0ac2c 100644 --- a/contributors/devel/bazel.md +++ b/contributors/devel/bazel.md @@ -2,6 +2,12 @@ Building and testing Kubernetes with Bazel is supported but not yet default. +Bazel is used to run all Kubernetes PRs on [Prow](https://prow.k8s.io), +as remote caching enables significantly reduced build and test times. + +Some repositories (such as kubernetes/test-infra) have switched to using Bazel +exclusively for all build, test, and release workflows. + Go rules are managed by the [`gazelle`](https://github.com/bazelbuild/rules_go/tree/master/go/tools/gazelle) tool, with some additional rules managed by the [`kazel`](https://git.k8s.io/repo-infra/kazel) tool. These tools are called via the `hack/update-bazel.sh` script. @@ -9,13 +15,16 @@ These tools are called via the `hack/update-bazel.sh` script. Instructions for installing Bazel can be found [here](https://www.bazel.io/versions/master/docs/install.html). -Several `make` rules have been created for common operations: +Several convenience `make` rules have been created for common operations: -* `make bazel-build`: builds all binaries in tree -* `make bazel-test`: runs all unit tests -* `make bazel-test-integration`: runs all integration tests +* `make bazel-build`: builds all binaries in tree (`bazel build -- //... + -//vendor/...`) +* `make bazel-test`: runs all unit tests (`bazel test --config=unit -- //... + //hack:verify-all -//build/... -//vendor/...`) +* `make bazel-test-integration`: runs all integration tests (`bazel test + --config integration //test/integration/...`) * `make bazel-release`: builds release tarballs, Docker images (for server - components), and Debian images + components), and Debian images (`bazel build //build/release-tars`) You can also interact with Bazel directly; for example, to run all `kubectl` unit tests, run @@ -46,26 +55,6 @@ There are several bazel CI jobs: Similar jobs are run on all PRs; additionally, several of the e2e jobs use Bazel-built binaries when launching and testing Kubernetes clusters. -## Known issues - -[Cross-compilation is not currently supported](https://github.com/bazelbuild/rules_go/issues/70), -so all binaries will be built for the host OS and architecture running Bazel. -(For example, you can't currently target linux/amd64 from macOS or linux/s390x -from an amd64 machine.) - -Additionally, native macOS support is still a work in progress. Using Planter is -a possible workaround in the interim. - -[Bazel does not validate build environment](https://github.com/kubernetes/kubernetes/issues/51623), thus make sure that needed -tools and development packages are installed in the system. Bazel builds require presence of `make`, `gcc`, `g++`, `glibc and libstdc++ development headers` and `glibc static development libraries`. Please check your distribution for exact names of the packages. Examples for some commonly used distributions are below: - -| Dependency | Debian/Ubuntu | CentOS | OpenSuSE | -|:---------------------:|-------------------------------|--------------------------------|-----------------------------------------| -| Build essentials | `apt install build-essential` | `yum groupinstall development` | `zypper install -t pattern devel_C_C++` | -| GCC C++ | `apt install g++` | `yum install gcc-c++` | `zypper install gcc-c++` | -| GNU Libc static files | `apt install libc6-dev` | `yum install glibc-static` | `zypper install glibc-devel-static` | - - ## Updating `BUILD` files To update `BUILD` files, run: @@ -77,10 +66,10 @@ $ ./hack/update-bazel.sh To prevent Go rules from being updated, consult the [gazelle documentation](https://github.com/bazelbuild/rules_go/tree/master/go/tools/gazelle). -Note that much like Go files and `gofmt`, BUILD files have standardized, +Note that much like Go files and `gofmt`, `BUILD` files have standardized, opinionated style rules, and running `hack/update-bazel.sh` will format them for you. -If you want to auto-format BUILD files in your editor, using something like +If you want to auto-format `BUILD` files in your editor, use of [Buildifier](https://github.com/bazelbuild/buildtools/blob/master/buildifier/README.md) is recommended. @@ -90,6 +79,106 @@ Updating the `BUILD` file for a package will be required when: * A `BUILD` file has been updated and needs to be reformatted * A new `BUILD` file has been added (parent `BUILD` files will be updated) +## Known issues and limitations + +### [Cross-compilation of cgo is not currently natively supported](https://github.com/bazelbuild/rules_go/issues/1020) +All binaries are currently built for the host OS and architecture running Bazel. +(For example, you can't currently target linux/amd64 from macOS or linux/s390x +from an amd64 machine.) + +The Go rules support cross-compilation of pure Go code using the `--platforms` +flag, and this is being used successfully in the kubernetes/test-infra repo. + +It may already be possible to cross-compile cgo code if a custom CC toolchain is +set up, possibly reusing the kube-cross Docker image, but this area needs +further exploration. + +### The CC toolchain is not fully hermetic +Bazel requires several tools and development packages to be installed in the system, including `gcc`, `g++`, `glibc and libstdc++ development headers` and `glibc static development libraries`. Please check your distribution for exact names of the packages. Examples for some commonly used distributions are below: + +| Dependency | Debian/Ubuntu | CentOS | OpenSuSE | +|:---------------------:|-------------------------------|--------------------------------|-----------------------------------------| +| Build essentials | `apt install build-essential` | `yum groupinstall development` | `zypper install -t pattern devel_C_C++` | +| GCC C++ | `apt install g++` | `yum install gcc-c++` | `zypper install gcc-c++` | +| GNU Libc static files | `apt install libc6-dev` | `yum install glibc-static` | `zypper install glibc-devel-static` | + +If any of these packages change, they may also cause spurious build failures +as described in [this issue](https://github.com/bazelbuild/bazel/issues/4907). + +An example error might look something like +``` +ERROR: undeclared inclusion(s) in rule '//vendor/golang.org/x/text/cases:go_default_library.cgo_c_lib': +this rule is missing dependency declarations for the following files included by 'vendor/golang.org/x/text/cases/linux_amd64_stripped/go_default_library.cgo_codegen~/_cgo_export.c': + '/usr/lib/gcc/x86_64-linux-gnu/7/include/stddef.h' +``` + +The only way to recover from this error is to force Bazel to regenerate its +automatically-generated CC toolchain configuration by running `bazel clean +--expunge`. + +Improving cgo cross-compilation may help with all of this. + +### Changes to Go imports requires updating BUILD files +The Go rules in `BUILD` and `BUILD.bazel` files must be updated any time files +are added or removed or Go imports are changed. These rules are automatically +maintained by `gazelle`, which is run via `hack/update-bazel.sh`, but this is +still a source of friction. + +[Autogazelle](https://github.com/bazelbuild/bazel-gazelle/tree/master/cmd/autogazelle) +is a new experimental tool which may reduce or remove the need for developers +to run `hack/update-bazel.sh`, but no work has yet been done to support it in +kubernetes/kubernetes. + +### Code coverage support is incomplete for Go +Bazel and the Go rules have limited support for code coverage. Running something +like `bazel coverage -- //... -//vendor/...` will run tests in coverage mode, +but no report summary is currently generated. It may be possible to combine +`bazel coverage` with +[Gopherage](https://github.com/kubernetes/test-infra/tree/master/gopherage), +however. + +### Kubernetes code generators are not fully supported +The make-based build system in kubernetes/kubernetes runs several code +generators at build time: +* [conversion-gen](https://github.com/kubernetes/code-generator/tree/master/cmd/conversion-gen) +* [deepcopy-gen](https://github.com/kubernetes/code-generator/tree/master/cmd/deepcopy-gen) +* [defaulter-gen](https://github.com/kubernetes/code-generator/tree/master/cmd/defaulter-gen) +* [openapi-gen](https://github.com/kubernetes/kube-openapi/tree/master/cmd/openapi-gen) +* [go-bindata](https://github.com/jteeuwen/go-bindata/tree/master/go-bindata) + +Of these, only `openapi-gen` and `go-bindata` are currently supported when +building Kubernetes with Bazel. + +The `go-bindata` generated code is produced by hand-written genrules. + +The other code generators use special build tags of the form `// ++k8s:generator-name=arg`; for example, input files to the openapi-gen tool are +specified with `// +k8s:openapi-gen=true`. + +`kazel` is used to find all packages that require OpenAPI generation, and then a +handwritten genrule consumes this list of packages to run `openapi-gen`. + +For `openapi-gen`, a single output file is produced in a single Go package, which +makes this fairly compatible with Bazel. +All other Kubernetes code generators generally produce one output file per input +package, which is less compatible with the Bazel workflow. + +The make-based build system batches up all input packages into one call to the +code generator binary, but this is inefficient for Bazel's incrementality, as a +change in one package may result in unnecessarily recompiling many other +packages. +On the other hand, calling the code generator binary multiple times is less +efficient than calling it once, since many of the generators parse the tree for +Go type information and other metadata. + +One additional challenge is that many of the code generators add additional +Go imports which `gazelle` (and `autogazelle`) cannot infer, and so they must be +explicitly added as dependencies in the `BUILD` files. + +Kubernetes has even more code generators than this limited list, but the rest +are generally run as `hack/update-*.sh` scripts and checked into the repository, +and so are not immediately needed for Bazel parity. + ## Contacts For help or discussion, join the [#bazel](https://kubernetes.slack.com/messages/bazel) channel on Kubernetes Slack. diff --git a/contributors/devel/cherry-picks.md b/contributors/devel/cherry-picks.md index 7a049149a..7769f970d 100644 --- a/contributors/devel/cherry-picks.md +++ b/contributors/devel/cherry-picks.md @@ -1,58 +1,73 @@ # Overview -This document explains how cherry picks are managed on release branches within the -Kubernetes projects. Patches are either applied in batches or individually -depending on the point in the release cycle. +This document explains how cherry-picks are managed on release branches within +the kubernetes/kubernetes repository. +A common use case for this task is backporting PRs from master to release +branches. -## Propose a Cherry Pick +## Prerequisites + * [Contributor License Agreement](http://git.k8s.io/community/CLA.md) is + considered implicit for all code within cherry-pick pull requests, + **unless there is a large conflict**. + * A pull request merged against the master branch. + * [Release branch](https://git.k8s.io/release/docs/branching.md) exists. + * The normal git and GitHub configured shell environment for pushing to your + kubernetes `origin` fork on GitHub and making a pull request against a + configured remote `upstream` that tracks + "https://github.com/kubernetes/kubernetes.git", including `GITHUB_USER`. + * Have `hub` installed, which is most easily installed via `go get + github.com/github/hub` assuming you have a standard golang development + environment. -1. Cherrypicks are [managed with labels and milestones](/contributors/guide/release-notes.md) -1. To get a PR merged to the release branch, first ensure the following labels - are on the original **master** branch PR: - * The milestone for the branch that you want to cherry-pick to (e.g. v1.7 if you want to backport your change in 1.7 branch) - * The `cherrypick-candidate` label -1. If `release-note-none` is set on the master PR, the cherrypick PR will need - to set the same label to confirm that no release note is needed. -1. `release-note` labeled PRs generate a release note using the PR title by - default OR the release-note block in the PR template if filled in. - * See the [PR template](https://git.k8s.io/kubernetes/.github/PULL_REQUEST_TEMPLATE.md) for more details. - * PR titles and body comments are mutable and can be modified at any time - prior to the release to reflect a release note friendly message. +## Initiate a Cherry-pick + * Run the [cherry-pick + script](https://git.k8s.io/kubernetes/hack/cherry_pick_pull.sh). + This example applies a master branch PR #98765 to the remote branch + `upstream/release-3.14`: `hack/cherry_pick_pull.sh upstream/release-3.14 + 98765` + * Be aware the cherry-pick script assumes you have a git remote called + `upstream` that points at the Kubernetes github org. + Please see our [recommended Git workflow](https://git.k8s.io/community/contributors/guide/github-workflow.md#workflow). + * You will need to run the cherry-pick script separately for each patch release you want to cherry-pick to. -### How do cherrypick-candidates make it to the release branch? + * Your cherry-pick PR will immediately get the `do-not-merge/cherry-pick-not-approved` label. + The [Branch Manager](https://git.k8s.io/sig-release/release-team/role-handbooks/branch-manager) + will triage PRs targeted to the next .0 minor release branch up until the + release, while the [Patch Release Team](https://git.k8s.io/sig-release/release-team/role-handbooks/patch-release-manager) + will handle all cherry-picks to patch releases. + Normal rules apply for code merge. + * Reviewers `/lgtm` and owners `/approve` as they deem appropriate. + * Milestones on cherry-pick PRs should be the milestone for the target + release branch (for example, milestone 1.11 for a cherry-pick onto + release-1.11). + * You can find the current release team members in the + [appropriate release folder](https://git.k8s.io/sig-release/releases) for the target release. + You may cc them with `<@githubusername>` on your cherry-pick PR. -1. **BATCHING:** After a branch is first created and before the X.Y.0 release - * Branch owners review the list of `cherrypick-candidate` labeled PRs. - * PRs batched up and merged to the release branch get a `cherrypick-approved` -label and lose the `cherrypick-candidate` label. - * PRs that won't be merged to the release branch, lose the -`cherrypick-candidate` label. +## Cherry-pick Review -1. **INDIVIDUAL CHERRYPICKS:** After the first X.Y.0 on a branch - * Run the cherry pick script. This example applies a master branch PR #98765 -to the remote branch `upstream/release-3.14`: -`hack/cherry_pick_pull.sh upstream/release-3.14 98765` - * Your cherrypick PR (targeted to the branch) will immediately get the -`do-not-merge/cherry-pick-not-approved` label. The branch owner will triage PRs -targeted to the branch and label the ones to be merged by applying the `lgtm` -label. +Cherry-pick pull requests have an additional requirement compared to normal pull +requests. +They must be approved specifically for cherry-pick by Approvers. +The [Branch Manager](https://git.k8s.io/sig-release/release-team/role-handbooks/branch-manager) +or the [Patch Release Team](https://git.k8s.io/sig-release/release-team/role-handbooks/patch-release-manager) +are the final authority on removing the `do-not-merge/cherry-pick-not-approved` +label and triggering a merge into the target branch. -There is an [issue](https://github.com/kubernetes/kubernetes/issues/23347) open -tracking the tool to automate the batching procedure. +## Searching for Cherry-picks -## Cherry Pick Review +- [A sample search on kubernetes/kubernetes pull requests that are labeled as `cherry-pick-approved`](https://github.com/kubernetes/kubernetes/pulls?q=is%3Aopen+is%3Apr+label%3Acherry-pick-approved) -Cherry pick pull requests are reviewed differently than normal pull requests. In -particular, they may be self-merged by the release branch owner without fanfare, -in the case the release branch owner knows the cherry pick was already -requested - this should not be the norm, but it may happen. +- [A sample search on kubernetes/kubernetes pull requests that are labeled as `do-not-merge/cherry-pick-not-approved`](https://github.com/kubernetes/kubernetes/pulls?q=is%3Aopen+is%3Apr+label%3Ado-not-merge%2Fcherry-pick-not-approved) -## Searching for Cherry Picks -See the [cherrypick queue dashboard](http://cherrypick.k8s.io/#/queue) for -status of PRs labeled as `cherrypick-candidate`. +## Troubleshooting Cherry-picks -[Contributor License Agreements](http://releases.k8s.io/HEAD/CONTRIBUTING.md) is -considered implicit for all code within cherry-pick pull requests, ***unless -there is a large conflict***. +Contributors may encounter some of the following difficulties when initiating a cherry-pick. +- A cherry-pick PR does not apply cleanly against an old release branch. +In that case, you will need to manually fix conflicts. + +- The cherry-pick PR includes code that does not pass CI tests. +In such a case you will have to fetch the auto-generated branch from your fork, amend the problematic commit and force push to the auto-generated branch. +Alternatively, you can create a new PR, which is noisier. diff --git a/contributors/devel/client-libraries.md b/contributors/devel/client-libraries.md index 018c929ea..d157c8cd9 100644 --- a/contributors/devel/client-libraries.md +++ b/contributors/devel/client-libraries.md @@ -1,3 +1,3 @@ ## Kubernetes API client libraries -This document has been moved to https://kubernetes.io/docs/reference/client-libraries/. +This document has been moved to https://kubernetes.io/docs/reference/using-api/client-libraries/. diff --git a/contributors/devel/coding-conventions.md b/contributors/devel/coding-conventions.md deleted file mode 100644 index 23775c55c..000000000 --- a/contributors/devel/coding-conventions.md +++ /dev/null @@ -1,3 +0,0 @@ -This document has been moved to https://git.k8s.io/community/contributors/guide/coding-conventions.md - -This file is a placeholder to preserve links. Please remove after 3 months or the release of kubernetes 1.10, whichever comes first. diff --git a/contributors/devel/conformance-tests.md b/contributors/devel/conformance-tests.md new file mode 100644 index 000000000..46ca318df --- /dev/null +++ b/contributors/devel/conformance-tests.md @@ -0,0 +1,216 @@ +# Conformance Testing in Kubernetes + +The Kubernetes Conformance test suite is a subset of e2e tests that SIG +Architecture has approved to define the core set of interoperable features that +all conformant Kubernetes clusters must support. The tests verify that the +expected behavior works as a user might encounter it in the wild. + +The process to add new conformance tests is intended to decouple the development +of useful tests from their promotion to conformance: +- Contributors write and submit e2e tests, to be approved by owning SIGs +- Tests are proven to meet the [conformance test requirements] by review + and by accumulation of data on flakiness and reliability +- A follow up PR is submitted to [promote the test to conformance](#promoting-tests-to-conformance) + +NB: This should be viewed as a living document in a few key areas: +- The desired set of conformant behaviors is not adequately expressed by the + current set of e2e tests, as such this document is currently intended to + guide us in the addition of new e2e tests than can fill this gap +- This document currently focuses solely on the requirements for GA, + non-optional features or APIs. The list of requirements will be refined over + time to the point where it as concrete and complete as possible. +- There are currently conformance tests that violate some of the requirements + (e.g., require privileged access), we will be categorizing these tests and + deciding what to do once we have a better understanding of the situation +- Once we resolve the above issues, we plan on identifying the appropriate areas + to relax requirements to allow for the concept of conformance Profiles that + cover optional or additional behaviors + +## Conformance Test Requirements + +Conformance tests currently test only GA, non-optional features or APIs. More +specifically, a test is eligible for promotion to conformance if: + +- it tests only GA, non-optional features or APIs (e.g., no alpha or beta + endpoints, no feature flags required, no deprecated features) +- it works for all providers (e.g., no `SkipIfProviderIs`/`SkipUnlessProviderIs` + calls) +- it is non-privileged (e.g., does not require root on nodes, access to raw + network interfaces, or cluster admin permissions) +- it works without access to the public internet (short of whatever is required + to pre-pull images for conformance tests) +- it works without non-standard filesystem permissions granted to pods +- it does not rely on any binaries that would not be required for the linux + kernel or kubelet to run (e.g., can't rely on git) +- any container images used within the test support all architectures for which + kubernetes releases are built +- it passes against the appropriate versions of kubernetes as spelled out in + the [conformance test version skew policy] +- it is stable and runs consistently (e.g., no flakes) + +Examples of features which are not currently eligible for conformance tests: + +- node/platform-reliant features, eg: multiple disk mounts, GPUs, high density, + etc. +- optional features, eg: policy enforcement +- cloud-provider-specific features, eg: GCE monitoring, S3 Bucketing, etc. +- anything that requires a non-default admission plugin + +Examples of tests which are not eligible for promotion to conformance: +- anything that checks specific Events are generated, as we make no guarantees + about the contents of events, nor their delivery +- anything that checks optional Condition fields, such as Reason or Message, as + these may change over time (however it is reasonable to verify these fields + exist or are non-empty) + +Examples of areas we may want to relax these requirements once we have a +sufficient corpus of tests that define out of the box functionality in all +reasonable production worthy environments: +- tests may need to create or set objects or fields that are alpha or beta that + bypass policies that are not yet GA, but which may reasonably be enabled on a + conformant cluster (e.g., pod security policy, non-GA scheduler annotations) + +## Conformance Test Version Skew Policy + +As each new release of Kubernetes provides new functionality, the subset of +tests necessary to demonstrate conformance grows with each release. Conformance +is thus considered versioned, with the same backwards compatibility guarantees +as laid out in the [kubernetes versioning policy] + +To quote: + +> For example, a v1.3 master should work with v1.1, v1.2, and v1.3 nodes, and +> should work with v1.2, v1.3, and v1.4 clients. + +Conformance tests for a given version should be run off of the release branch +that corresponds to that version. Thus `v1.2` conformance tests would be run +from the head of the `release-1.2` branch. + +For example, suppose we're in the midst of developing kubernetes v1.3. Clusters +with the following versions must pass conformance tests built from the +following branches: + +| cluster version | master | release-1.3 | release-1.2 | release-1.1 | +| --------------- | ----- | ----------- | ----------- | ----------- | +| v1.3.0-alpha | yes | yes | yes | no | +| v1.2.x | no | no | yes | yes | +| v1.1.x | no | no | no | yes | + +## Running Conformance Tests + +Conformance tests are designed to be run even when there is no cloud provider +configured. Conformance tests must be able to be run against clusters that have +not been created with `hack/e2e.go`, just provide a kubeconfig with the +appropriate endpoint and credentials. + +These commands are intended to be run within a kubernetes directory, either +cloned from source, or extracted from release artifacts such as +`kubernetes.tar.gz`. They assume you have a valid golang installation. + +```sh +# ensure kubetest is installed +go get -u k8s.io/test-infra/kubetest + +# build test binaries, ginkgo, and kubectl first: +make WHAT="test/e2e/e2e.test vendor/github.com/onsi/ginkgo/ginkgo cmd/kubectl" + +# setup for conformance tests +export KUBECONFIG=/path/to/kubeconfig +export KUBERNETES_CONFORMANCE_TEST=y + +# Option A: run all conformance tests serially +kubetest --provider=skeleton --test --test_args="--ginkgo.focus=\[Conformance\]" + +# Option B: run parallel conformance tests first, then serial conformance tests serially +GINKGO_PARALLEL=y kubetest --provider=skeleton --test --test_args="--ginkgo.focus=\[Conformance\] --ginkgo.skip=\[Serial\]" +kubetest --provider=skeleton --test --test_args="--ginkgo.focus=\[Serial\].*\[Conformance\]" +``` + +## Kubernetes Conformance Document + +For each Kubernetes release, a Conformance Document will be generated that lists +all of the tests that comprise the conformance test suite, along with the formal +specification of each test. For an example, see the [v1.9 conformance doc]. +This document will help people understand what features are being tested without +having to look through the testcase's code directly. + + +## Promoting Tests to Conformance + +To promote a test to the conformance test suite, open a PR as follows: +- is titled "Promote xxx e2e test to Conformance" +- includes information and metadata in the description as follows: + - "/area conformance" on a newline + - "@kubernetes/sig-architecture-pr-reviews @kubernetes/sig-foo-pr-reviews + @kubernetes/cncf-conformance-wg" on a new line, where sig-foo is whichever + sig owns this test + - any necessary information in the description to verify that the test meets + [conformance test requirements], such as links to reports or dashboards that + prove lack of flakiness +- contains no other modifications to test source code other than the following: + - modifies the testcase to use the `framework.ConformanceIt()` function rather + than the `framework.It()` function + - adds a comment immediately before the `ConformanceIt()` call that includes + all of the required [conformance test comment metadata] +- add the PR to SIG Architecture's [Conformance Test Review board] + + +### Conformance Test Comment Metadata + +Each conformance test must include the following piece of metadata +within its associated comment: + +- `Release`: indicates the Kubernetes release that the test was added to the + conformance test suite. If the test was modified in subsequent releases + then those releases should be included as well (comma separated) +- `Testname`: a human readable short name of the test +- `Description`: a detailed description of the test. This field must describe + the required behaviour of the Kubernetes components being tested using + [RFC2119](https://tools.ietf.org/html/rfc2119) keywords. This field + is meant to be a "specification" of the tested Kubernetes features, as + such, it must be detailed enough so that readers can fully understand + the aspects of Kubernetes that are being tested without having to read + the test's code directly. Additionally, this test should provide a clear + distinction between the parts of the test that are there for the purpose + of validating Kubernetes rather than simply infrastructure logic that + is necessary to setup, or clean up, the test. + +### Sample Conformance Test + +The following snippet of code shows a sample conformance test's metadata: + +``` +/* + Release : v1.9 + Testname: Kubelet: log output + Description: By default the stdout and stderr from the process being + executed in a pod MUST be sent to the pod's logs. +*/ +framework.ConformanceIt("it should print the output to logs", func() { + ... +}) +``` + +The corresponding portion of the Kubernetes Conformance Documentfor this test +would then look like this: + +> ## [Kubelet: log output](https://github.com/kubernetes/kubernetes/tree/release-1.9/test/e2e_node/kubelet_test.go#L47) +> +> Release : v1.9 +> +> By default the stdout and stderr from the process being executed in a pod MUST be sent to the pod's logs. + +### Reporting Conformance Test Results + +Conformance test results, by provider and releases, can be viewed in the +[testgrid conformance dashboard]. If you wish to contribute test results +for your provider, please see the [testgrid conformance README] + +[kubernetes versioning policy]: /contributors/design-proposals/release/versioning.md#supported-releases-and-component-skew +[Conformance Test Review board]: https://github.com/kubernetes-sigs/architecture-tracking/projects/1 +[conformance test requirements]: #conformance-test-requirements +[conformance test metadata]: #conformance-test-metadata +[conformance test version skew policy]: #conformance-test-version-skew-policy +[testgrid conformance dashboard]: https://testgrid.k8s.io/conformance-all +[testgrid conformance README]: https://github.com/kubernetes/test-infra/blob/master/testgrid/conformance/README.md +[v1.9 conformance doc]: https://github.com/cncf/k8s-conformance/blob/master/docs/KubeConformance-1.9.md diff --git a/contributors/devel/container-runtime-interface.md b/contributors/devel/container-runtime-interface.md index a408b60a2..1a121c9e9 100644 --- a/contributors/devel/container-runtime-interface.md +++ b/contributors/devel/container-runtime-interface.md @@ -51,7 +51,7 @@ The old, pre-CRI Docker integration was removed in 1.7. ## Specifications, design documents and proposals -The Kubernetes 1.5 [blog post on CRI](http://blog.kubernetes.io/2016/12/container-runtime-interface-cri-in-kubernetes.html) +The Kubernetes 1.5 [blog post on CRI](https://kubernetes.io/blog/2016/12/container-runtime-interface-cri-in-kubernetes/) serves as a general introduction. diff --git a/contributors/devel/controllers.md b/contributors/devel/controllers.md index 50dada023..268e0d103 100644 --- a/contributors/devel/controllers.md +++ b/contributors/devel/controllers.md @@ -86,7 +86,7 @@ type Controller struct { func NewController(pods informers.PodInformer) *Controller { c := &Controller{ pods: pods.Lister(), - podsSynced pods.Informer().HasSynced, + podsSynced: pods.Informer().HasSynced, queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "controller-name"), } diff --git a/contributors/devel/cri-testing-policy.md b/contributors/devel/cri-testing-policy.md index fb01b36ec..73b48c5ee 100644 --- a/contributors/devel/cri-testing-policy.md +++ b/contributors/devel/cri-testing-policy.md @@ -13,7 +13,7 @@ because many features require integration of runtime, OS, or even the cloud provider. A higher-level integration tests provider better signals on vertical stack compatibility to the Kubernetes community. On the other hand, runtime developers are strongly encouraged to run low-level -[CRI validation test suite](https://github.com/kubernetes-incubator/cri-tools/blob/master/docs/validation.md) +[CRI validation test suite](https://github.com/kubernetes-sigs/cri-tools/blob/master/docs/validation.md) for validation as part of their development process. ## Required and optional tests @@ -50,16 +50,16 @@ To publish tests results, please submit a proposal in the briefly explaining your runtime, providing at least two maintainers, and assigning the proposal to the leads of SIG-Node. -These test results should be published under the `sig-node` tab, grouped by the -runtimes, organized as follows. +These test results should be published under the `sig-node` tab, organized +as follows. ``` -sig-node -> sig-node-{Kubernetes-version} -> sig-node-{runtime-name} -> [page containing all test jobs] +sig-node -> sig-node-cri-{Kubernetes-version} -> [page containing the required jobs] ``` -The `sig-node` tab only lists up to three most recent Kubernetes versions, -including the master branch for the current release cycle, e.g., -`sig-node-master, sig-node-1.9, sig-node-1.8`. +Only the last three most recent Kubernetes versions and the master branch are +kept at any time. This is consistent with the Kubernetes release schedule and +policy. ## Test job maintenance diff --git a/contributors/devel/cri-validation.md b/contributors/devel/cri-validation.md index 2ca5a0e04..84842c9bf 100644 --- a/contributors/devel/cri-validation.md +++ b/contributors/devel/cri-validation.md @@ -2,19 +2,26 @@ CRI validation testing provides a test framework and a suite of tests to validate that the Container Runtime Interface (CRI) server implementation meets all the requirements. This allows the CRI runtime developers to verify that their runtime conforms to CRI, without needing to set up Kubernetes components or run Kubernetes end-to-end tests. -CRI validation testing is currently Alpha and is hosted at the [cri-tools](https://github.com/kubernetes-incubator/cri-tools) repository. Performance benchmarking will be added in the future. We encourage the CRI developers to report bugs or help extend the test coverage by adding more tests. +CRI validation testing is GA since v1.11.0 and is hosted at the [cri-tools](https://github.com/kubernetes-sigs/cri-tools) repository. We encourage the CRI developers to report bugs or help extend the test coverage by adding more tests. ## Install -The test suites can be installed easily via `go get` command: +The test suites can be downloaded from cri-tools [release page](https://github.com/kubernetes-sigs/cri-tools/releases): ```sh -go get github.com/kubernetes-incubator/cri-tools/cmd/critest +VERSION="v1.11.0" +wget https://github.com/kubernetes-sigs/cri-tools/releases/download/$VERSION/critest-$VERSION-linux-amd64.tar.gz +sudo tar zxvf critest-$VERSION-linux-amd64.tar.gz -C /usr/local/bin +rm -f critest-$VERSION-linux-amd64.tar.gz ``` -Then `critest` binary can be found in `$GOPATH/bin`. +critest requires [ginkgo](https://github.com/onsi/ginkgo) to run parallel tests. It could be installed by -*Note: ensure GO is installed and GOPATH is set before installing critest.* +```sh +go get -u github.com/onsi/ginkgo/ginkgo +``` + +*Note: ensure GO is installed and GOPATH is set before installing ginkgo.* ## Running tests @@ -25,7 +32,7 @@ Before running the test, you need to _ensure that the CRI server under test is r ### Run ```sh -critest validation +critest ``` This will @@ -34,15 +41,13 @@ This will - Run the tests using `ginkgo` - Output the test results to STDOUT -critest connects to `/var/run/dockershim.sock` by default. For other runtimes, the endpoint can be set in two ways: - -- By setting flags `--runtime-endpoint` and `--image-endpoint` -- By setting environment variables `CRI_RUNTIME_ENDPOINT` and `CRI_IMAGE_ENDPOINT` +critest connects to `unix:///var/run/dockershim.sock` by default. For other runtimes, the endpoint can be set by flags `-runtime-endpoint` and `-image-endpoint`. ## Additional options -- `--focus`, `-f`: Only run the tests that match the regular expression. -- -`-ginkgo-flags`, `-g`: Space-separated list of arguments to pass to Ginkgo test runner. -- `--image-endpoint`, `-i`: Set the endpoint of image service. Same with runtime-endpoint if not specified. -- `--runtime-endpoint`, `-r`: Set the endpoint of runtime service. Default to `/var/run/dockershim.sock`. -- `--skip`, `-s`: Skip the tests that match the regular expression. +- `-ginkgo.focus`: Only run the tests that match the regular expression. +- `-image-endpoint`: Set the endpoint of image service. Same with runtime-endpoint if not specified. +- `-runtime-endpoint`: Set the endpoint of runtime service. Default to `unix:///var/run/dockershim.sock`. +- `-ginkgo.skip`: Skip the tests that match the regular expression. +- `-parallel`: The number of parallel test nodes to run (default 1). ginkgo must be installed to run parallel tests. +- `-h`: Show help and all supported options. diff --git a/contributors/devel/development.md b/contributors/devel/development.md index 374e10b23..03f00e0ed 100644 --- a/contributors/devel/development.md +++ b/contributors/devel/development.md @@ -79,7 +79,7 @@ document the improvement with data): - Parallelizing a calculation that needs to run on a large set of node/pod objects. -These issues should always be submitted with (in decreasing order or value): +These issues should always be submitted with (in decreasing order of value): - A golang Benchmark test. - A visual depiction of reduced metric load on a cluster (measurable using @@ -112,9 +112,14 @@ instructions](http://releases.k8s.io/HEAD/build/README.md). Kubernetes development helper scripts assume an up-to-date GNU tools environment. Recent Linux distros should work out-of-the-box. -Mac OS X ships with outdated BSD-based tools. We recommend installing [OS X GNU +macOS ships with outdated BSD-based tools. We recommend installing [macOS GNU tools]. +### rsync + +Kubernetes build system requires `rsync` command present in the development +platform. + ### etcd Kubernetes maintains state in [`etcd`][etcd-latest], a distributed key store. @@ -134,7 +139,9 @@ development environment, please [set one up](http://golang.org/doc/code.html). | 1.5, 1.6 | 1.7 - 1.7.5 | | 1.7 | 1.8.1 | | 1.8 | 1.8.3 | -| 1.9+ | 1.9.1 | +| 1.9 | 1.9.1 | +| 1.10 | 1.9.1 | +| 1.11+ | 1.10.2 | Ensure your GOPATH and PATH have been configured in accordance with the Go environment instructions. @@ -171,7 +178,7 @@ see [Build with Bazel]. To check out code to work on, please refer to [this guide](/contributors/guide/github-workflow.md). -[OS X GNU tools]: https://www.topbug.net/blog/2013/04/14/install-and-use-gnu-command-line-tools-in-mac-os-x +[macOS GNU tools]: https://www.topbug.net/blog/2013/04/14/install-and-use-gnu-command-line-tools-in-mac-os-x [build/build-image/cross]: https://git.k8s.io/kubernetes/build/build-image/cross [build/common.sh]: https://git.k8s.io/kubernetes/build/common.sh [e2e-image]: https://git.k8s.io/test-infra/jenkins/e2e-image diff --git a/contributors/devel/e2e-tests.md b/contributors/devel/e2e-tests.md index 20d76d33d..20698c49b 100644 --- a/contributors/devel/e2e-tests.md +++ b/contributors/devel/e2e-tests.md @@ -7,7 +7,6 @@ - [Building Kubernetes and Running the Tests](#building-kubernetes-and-running-the-tests) - [Cleaning up](#cleaning-up) - [Advanced testing](#advanced-testing) - - [Installing/updating kubetest](#installingupdating-kubetest) - [Extracting a specific version of kubernetes](#extracting-a-specific-version-of-kubernetes) - [Bringing up a cluster for testing](#bringing-up-a-cluster-for-testing) - [Federation e2e tests](#federation-e2e-tests) @@ -26,7 +25,6 @@ - [Kinds of tests](#kinds-of-tests) - [Viper configuration and hierarchichal test parameters.](#viper-configuration-and-hierarchichal-test-parameters) - [Conformance tests](#conformance-tests) - - [Defining Conformance Subset](#defining-conformance-subset) - [Continuous Integration](#continuous-integration) - [What is CI?](#what-is-ci) - [What runs in CI?](#what-runs-in-ci) @@ -67,7 +65,12 @@ should also read [Writing Good e2e Tests](writing-good-e2e-tests.md) ## Building Kubernetes and Running the Tests There are a variety of ways to run e2e tests, but we aim to decrease the number -of ways to run e2e tests to a canonical way: `hack/e2e.go`. +of ways to run e2e tests to a canonical way: `kubetest`. + +You can install `kubetest` as follows: +```sh +go get -u k8s.io/test-infra/kubetest +``` You can run an end-to-end test which will bring up a master and nodes, perform some tests, and then tear everything down. Make sure you have followed the @@ -82,33 +85,33 @@ you can do so via `make WHAT=test/e2e/e2e.test`, and then re-running the ginkgo To build Kubernetes, up a cluster, run tests, and tear everything down, use: ```sh -go run hack/e2e.go -- --build --up --test --down +kubetest --build --up --test --down ``` If you'd like to just perform one of these steps, here are some examples: ```sh # Build binaries for testing -go run hack/e2e.go -- --build +kubetest --build # Create a fresh cluster. Deletes a cluster first, if it exists -go run hack/e2e.go -- --up +kubetest --up # Run all tests -go run hack/e2e.go -- --test +kubetest --test # Run tests matching the regex "\[Feature:Performance\]" against a local cluster # Specify "--provider=local" flag when running the tests locally -go run hack/e2e.go -- --test --test_args="--ginkgo.focus=\[Feature:Performance\]" --provider=local +kubetest --test --test_args="--ginkgo.focus=\[Feature:Performance\]" --provider=local # Conversely, exclude tests that match the regex "Pods.*env" -go run hack/e2e.go -- --test --test_args="--ginkgo.skip=Pods.*env" +kubetest --test --test_args="--ginkgo.skip=Pods.*env" # Run tests in parallel, skip any that must be run serially -GINKGO_PARALLEL=y go run hack/e2e.go -- --test --test_args="--ginkgo.skip=\[Serial\]" +GINKGO_PARALLEL=y kubetest --test --test_args="--ginkgo.skip=\[Serial\]" # Run tests in parallel, skip any that must be run serially and keep the test namespace if test failed -GINKGO_PARALLEL=y go run hack/e2e.go -- --test --test_args="--ginkgo.skip=\[Serial\] --delete-namespace-on-failure=false" +GINKGO_PARALLEL=y kubetest --test --test_args="--ginkgo.skip=\[Serial\] --delete-namespace-on-failure=false" # Flags can be combined, and their actions will take place in this order: # --build, --up, --test, --down @@ -116,18 +119,18 @@ GINKGO_PARALLEL=y go run hack/e2e.go -- --test --test_args="--ginkgo.skip=\[Seri # You can also specify an alternative provider, such as 'aws' # # e.g.: -go run hack/e2e.go -- --provider=aws --build --up --test --down +kubetest --provider=aws --build --up --test --down # -ctl can be used to quickly call kubectl against your e2e cluster. Useful for -# cleaning up after a failed test or viewing logs. +# cleaning up after a failed test or viewing logs. # kubectl output is default on, you can use --verbose-commands=false to suppress output. -go run hack/e2e.go -- -ctl='get events' -go run hack/e2e.go -- -ctl='delete pod foobar' +kubetest -ctl='get events' +kubetest -ctl='delete pod foobar' ``` The tests are built into a single binary which can be used to deploy a Kubernetes system or run tests against an already-deployed Kubernetes system. -See `go run hack/e2e.go --help` (or the flag definitions in `hack/e2e.go`) for +See `kubetest --help` (or the flag definitions in `hack/e2e.go`) for more options, such as reusing an existing cluster. ### Cleaning up @@ -137,26 +140,11 @@ something goes wrong and you still have some VMs running you can force a cleanup with this command: ```sh -go run hack/e2e.go -- --down +kubetest --down ``` ## Advanced testing -### Installing/updating kubetest - -The logic in `e2e.go` moved out of the main kubernetes repo to test-infra. -The remaining code in `hack/e2e.go` installs `kubetest` and sends it flags. -It now lives in [kubernetes/test-infra/kubetest](https://git.k8s.io/test-infra/kubetest). -By default `hack/e2e.go` updates and installs `kubetest` once per day. -Control the updater behavior with the `--get` and `--old` flags: -The `--` flag separates updater and kubetest flags (kubetest flags on the right). - -```sh -go run hack/e2e.go --get=true --old=1h -- # Update every hour -go run hack/e2e.go --get=false -- # Never attempt to install/update. -go install k8s.io/test-infra/kubetest # Manually install -go get -u k8s.io/test-infra/kubetest # Manually update installation -``` ### Extracting a specific version of kubernetes The `kubetest` binary can download and extract a specific version of kubernetes, @@ -167,28 +155,28 @@ There are a variety of values to pass this flag: ```sh # Official builds: /[-N.N] -go run hack/e2e.go -- --extract=ci/latest --up # Deploy the latest ci build. -go run hack/e2e.go -- --extract=ci/latest-1.5 --up # Deploy the latest 1.5 CI build. -go run hack/e2e.go -- --extract=release/latest --up # Deploy the latest RC. -go run hack/e2e.go -- --extract=release/stable-1.5 --up # Deploy the 1.5 release. +kubetest --extract=ci/latest --up # Deploy the latest ci build. +kubetest --extract=ci/latest-1.5 --up # Deploy the latest 1.5 CI build. +kubetest --extract=release/latest --up # Deploy the latest RC. +kubetest --extract=release/stable-1.5 --up # Deploy the 1.5 release. # A specific version: -go run hack/e2e.go -- --extract=v1.5.1 --up # Deploy 1.5.1 -go run hack/e2e.go -- --extract=v1.5.2-beta.0 --up # Deploy 1.5.2-beta.0 -go run hack/e2e.go -- --extract=gs://foo/bar --up # --stage=gs://foo/bar +kubetest --extract=v1.5.1 --up # Deploy 1.5.1 +kubetest --extract=v1.5.2-beta.0 --up # Deploy 1.5.2-beta.0 +kubetest --extract=gs://foo/bar --up # --stage=gs://foo/bar # Whatever GKE is using (gke, gke-staging, gke-test): -go run hack/e2e.go -- --extract=gke --up # Deploy whatever GKE prod uses +kubetest --extract=gke --up # Deploy whatever GKE prod uses # Using a GCI version: -go run hack/e2e.go -- --extract=gci/gci-canary --up # Deploy the version for next gci release -go run hack/e2e.go -- --extract=gci/gci-57 # Deploy the version bound to gci m57 -go run hack/e2e.go -- --extract=gci/gci-57/ci/latest # Deploy the latest CI build using gci m57 for the VM image +kubetest --extract=gci/gci-canary --up # Deploy the version for next gci release +kubetest --extract=gci/gci-57 # Deploy the version bound to gci m57 +kubetest --extract=gci/gci-57/ci/latest # Deploy the latest CI build using gci m57 for the VM image # Reuse whatever is already built -go run hack/e2e.go -- --up # Most common. Note, no extract flag -go run hack/e2e.go -- --build --up # Most common. Note, no extract flag -go run hack/e2e.go -- --build --stage=gs://foo/bar --extract=local --up # Extract the staged version +kubetest --up # Most common. Note, no extract flag +kubetest --build --up # Most common. Note, no extract flag +kubetest --build --stage=gs://foo/bar --extract=local --up # Extract the staged version ``` ### Bringing up a cluster for testing @@ -328,7 +316,7 @@ Next, specify the docker repository where your ci images will be pushed. * Compile the binaries and build container images: ```sh - $ KUBE_RELEASE_RUN_TESTS=n KUBE_FASTBUILD=true go run hack/e2e.go -- -build + $ KUBE_RELEASE_RUN_TESTS=n KUBE_FASTBUILD=true kubetest -build ``` * Push the federation container images @@ -343,7 +331,7 @@ The following command will create the underlying Kubernetes clusters in each of federation control plane in the cluster occupying the last zone in the `E2E_ZONES` list. ```sh -$ go run hack/e2e.go -- --up +$ kubetest --up ``` #### Run the Tests @@ -351,13 +339,13 @@ $ go run hack/e2e.go -- --up This will run only the `Feature:Federation` e2e tests. You can omit the `ginkgo.focus` argument to run the entire e2e suite. ```sh -$ go run hack/e2e.go -- --test --test_args="--ginkgo.focus=\[Feature:Federation\]" +$ kubetest --test --test_args="--ginkgo.focus=\[Feature:Federation\]" ``` #### Teardown ```sh -$ go run hack/e2e.go -- --down +$ kubetest --down ``` #### Shortcuts for test developers @@ -414,20 +402,32 @@ end of aforementioned script. #### Testing against local clusters -In order to run an E2E test against a locally running cluster, point the tests -at a custom host directly: +In order to run an E2E test against a locally running cluster, first make sure +to have a local build of the tests: + +```sh +kubetest --build +``` + +Then point the tests at a custom host directly: ```sh export KUBECONFIG=/path/to/kubeconfig -export KUBE_MASTER_IP="127.0.0.1:" -export KUBE_MASTER=local -go run hack/e2e.go -- --provider=local --test +kubetest --provider=local --test ``` To control the tests that are run: ```sh -go run hack/e2e.go -- --provider=local --test --test_args="--ginkgo.focus=Secrets" +kubetest --provider=local --test --test_args="--ginkgo.focus=Secrets" +``` + +You will also likely need to specify `minStartupPods` to match the number of +nodes in your cluster. If you're testing against a cluster set up by +`local-up-cluster.sh`, you will need to do the following: + +```sh +kubetest --provider=local --test --test_args="--minStartupPods=1 --ginkgo.focus=Secrets" ``` ### Version-skewed and upgrade testing @@ -446,7 +446,7 @@ similarly enough to older versions. The general strategy is to cover the follow same version (e.g. a cluster upgraded to v1.3 passes the same v1.3 tests as a newly-created v1.3 cluster). -[hack/e2e-runner.sh](https://git.k8s.io/test-infra/jenkins/e2e-image/e2e-runner.sh) is +[kubetest](https://git.k8s.io/test-infra/kubetest) is the authoritative source on how to run version-skewed tests, but below is a quick-and-dirty tutorial. @@ -459,7 +459,7 @@ export CLUSTER_API_VERSION=${OLD_VERSION} # Deploy a cluster at the old version; see above for more details cd ./kubernetes_old -go run ./hack/e2e.go -- --up +kubetest --up # Upgrade the cluster to the new version # @@ -467,11 +467,11 @@ go run ./hack/e2e.go -- --up # # You can target Feature:MasterUpgrade or Feature:ClusterUpgrade cd ../kubernetes -go run ./hack/e2e.go -- --provider=gke --test --check-version-skew=false --test_args="--ginkgo.focus=\[Feature:MasterUpgrade\]" +kubetest --provider=gke --test --check-version-skew=false --test_args="--ginkgo.focus=\[Feature:MasterUpgrade\]" # Run old tests with new kubectl cd ../kubernetes_old -go run ./hack/e2e.go -- --provider=gke --test --test_args="--kubectl-path=$(pwd)/../kubernetes/cluster/kubectl.sh" +kubetest --provider=gke --test --test_args="--kubectl-path=$(pwd)/../kubernetes/cluster/kubectl.sh" ``` If you are just testing version-skew, you may want to just deploy at one @@ -483,14 +483,14 @@ upgrade process: # Deploy a cluster at the new version cd ./kubernetes -go run ./hack/e2e.go -- --up +kubetest --up # Run new tests with old kubectl -go run ./hack/e2e.go -- --test --test_args="--kubectl-path=$(pwd)/../kubernetes_old/cluster/kubectl.sh" +kubetest --test --test_args="--kubectl-path=$(pwd)/../kubernetes_old/cluster/kubectl.sh" # Run old tests with new kubectl cd ../kubernetes_old -go run ./hack/e2e.go -- --test --test_args="--kubectl-path=$(pwd)/../kubernetes/cluster/kubectl.sh" +kubetest --test --test_args="--kubectl-path=$(pwd)/../kubernetes/cluster/kubectl.sh" ``` #### Test jobs naming convention @@ -565,10 +565,25 @@ suite, it receives a `[Feature:.+]` label, e.g. `[Feature:Performance]` or `[Feature:Ingress]`. `[Feature:.+]` tests are not run in our core suites, instead running in custom suites. If a feature is experimental or alpha and is not enabled by default due to being incomplete or potentially subject to -breaking changes, it does *not* block the merge-queue, and thus should run in +breaking changes, it does *not* block PR merges, and thus should run in some separate test suites owned by the feature owner(s) (see [Continuous Integration](#continuous-integration) below). + - `[Conformance]`: Designate that this test is included in the Conformance +test suite for [Conformance Testing](conformance-tests.md). This test must +meet a number of [requirements](conformance-tests.md#conformance-test-requirements) +to be eligible for this tag. This tag does not supersed any other labels. + + - The following tags are not considered to be exhaustively applied, but are +intended to further categorize existing `[Conformance]` tests, or tests that are +being considered as candidate for promotion to `[Conformance]` as we work to +refine requirements: + - `[Privileged]`: This is a test that requires privileged access + - `[Internet]`: This is a test that assumes access to the public internet + - `[Deprecated]`: This is a test that exercises a deprecated feature + - `[Alpha]`: This is a test that exercises an alpha feature + - `[Beta]`: This is a test that exercises a beta feature + Every test should be owned by a [SIG](/sig-list.md), and have a corresponding `[sig-]` label. @@ -588,64 +603,7 @@ In time, it is our intent to add or autogenerate a sample viper configuration th ### Conformance tests -Finally, `[Conformance]` tests represent a subset of the e2e-tests we expect to -pass on **any** Kubernetes cluster. The `[Conformance]` label does not supersede -any other labels. - -As each new release of Kubernetes providers new functionality, the subset of -tests necessary to demonstrate conformance grows with each release. Conformance -is thus considered versioned, with the same backwards compatibility guarantees -as laid out in [our versioning policy](/contributors/design-proposals/release/versioning.md#supported-releases-and-component-skew). -Conformance tests for a given version should be run off of the release branch -that corresponds to that version. Thus `v1.2` conformance tests would be run -from the head of the `release-1.2` branch. eg: - - - A v1.3 development cluster should pass v1.1, v1.2 conformance tests - - - A v1.2 cluster should pass v1.1, v1.2 conformance tests - - - A v1.1 cluster should pass v1.0, v1.1 conformance tests, and fail v1.2 -conformance tests - -Conformance tests are designed to be run with no cloud provider configured. -Conformance tests can be run against clusters that have not been created with -`hack/e2e.go`, just provide a kubeconfig with the appropriate endpoint and -credentials. - -```sh -# setup for conformance tests -export KUBECONFIG=/path/to/kubeconfig -export KUBERNETES_CONFORMANCE_TEST=y - -# run all conformance tests -go run hack/e2e.go -- --provider=skeleton --test --test_args="--ginkgo.focus=\[Conformance\]" - -# run all parallel-safe conformance tests in parallel -GINKGO_PARALLEL=y go run hack/e2e.go -- --provider=skeleton --test --test_args="--ginkgo.focus=\[Conformance\] --ginkgo.skip=\[Serial\]" - -# ... and finish up with remaining tests in serial -go run hack/e2e.go -- --provider=skeleton --test --test_args="--ginkgo.focus=\[Serial\].*\[Conformance\]" -``` - -### Defining Conformance Subset - -It is impossible to define the entire space of Conformance tests without knowing -the future, so instead, we define the compliment of conformance tests, below -(`Please update this with companion PRs as necessary`): - - - A conformance test cannot test cloud provider specific features (i.e. GCE -monitoring, S3 Bucketing, ...) - - - A conformance test cannot rely on any particular non-standard file system -permissions granted to containers or users (i.e. sharing writable host /tmp with -a container) - - - A conformance test cannot rely on any binaries that are not required for the -linux kernel or for a kubelet to run (i.e. git) - - - A conformance test cannot test a feature which obviously cannot be supported -on a broad range of platforms (i.e. testing of multiple disk mounts, GPUs, high -density) +For more information on Conformance tests please see the [Conformance Testing](conformance-tests.md) ## Continuous Integration @@ -653,12 +611,10 @@ A quick overview of how we run e2e CI on Kubernetes. ### What is CI? -We run a battery of `e2e` tests against `HEAD` of the master branch on a -continuous basis, and block merges via the [submit -queue](http://submit-queue.k8s.io/) on a subset of those tests if they fail (the -subset is defined in the [munger config](https://git.k8s.io/test-infra/mungegithub/mungers/submit-queue.go) -via the `jenkins-jobs` flag; note we also block on `kubernetes-build` and -`kubernetes-test-go` jobs for build and unit and integration tests). +We run a battery of [release-blocking jobs](https://k8s-testgrid.appspot.com/sig-release-master-blocking) +against `HEAD` of the master branch on a continuous basis, and block merges +via [Tide](https://git.k8s.io/test-infra/prow/cmd/tide) on a subset of those +tests if they fail. CI results can be found at [ci-test.k8s.io](http://ci-test.k8s.io), e.g. [ci-test.k8s.io/kubernetes-e2e-gce/10594](http://ci-test.k8s.io/kubernetes-e2e-gce/10594). @@ -710,6 +666,9 @@ If a behavior does not currently have coverage and a developer wishes to add a new e2e test, navigate to the ./test/e2e directory and create a new test using the existing suite as a guide. +**NOTE:** To build/run with tests in a new directory within ./test/e2e, add the +directory to import list in ./test/e2e/e2e_test.go + TODO(#20357): Create a self-documented example which has been disabled, but can be copied to create new tests and outlines the capabilities and libraries used. @@ -726,14 +685,11 @@ contend for resources; see above about [kinds of tests](#kinds_of_tests). Generally, a feature starts as `experimental`, and will be run in some suite owned by the team developing the feature. If a feature is in beta or GA, it -*should* block the merge-queue. In moving from experimental to beta or GA, tests +*should* block PR merges and releases. In moving from experimental to beta or GA, tests that are expected to pass by default should simply remove the `[Feature:.+]` label, and will be incorporated into our core suites. If tests are not expected to pass by default, (e.g. they require a special environment such as added -quota,) they should remain with the `[Feature:.+]` label, and the suites that -run them should be incorporated into the -[munger config](https://git.k8s.io/test-infra/mungegithub/mungers/submit-queue.go) -via the `jenkins-jobs` flag. +quota,) they should remain with the `[Feature:.+]` label. Occasionally, we'll want to add tests to better exercise features that are already GA. These tests also shouldn't go straight to CI. They should begin by @@ -757,7 +713,7 @@ system to 30,50,100 pods per/node and measures the different characteristics of the system, such as throughput, api-latency, etc. For a good overview of how we analyze performance data, please read the -following [post](http://blog.kubernetes.io/2015/09/kubernetes-performance-measurements-and.html) +following [post](https://kubernetes.io/blog/2015/09/kubernetes-performance-measurements-and/) For developers who are interested in doing their own performance analysis, we recommend setting up [prometheus](http://prometheus.io/) for data collection, diff --git a/contributors/devel/faster_reviews.md b/contributors/devel/faster_reviews.md deleted file mode 100644 index d0fe7e371..000000000 --- a/contributors/devel/faster_reviews.md +++ /dev/null @@ -1,4 +0,0 @@ -The contents of this file have been moved to https://git.k8s.io/community/contributors/guide/pull-requests.md. - diff --git a/contributors/devel/flaky-tests.md b/contributors/devel/flaky-tests.md index f06bb078a..143025927 100644 --- a/contributors/devel/flaky-tests.md +++ b/contributors/devel/flaky-tests.md @@ -15,6 +15,19 @@ what caused the failure. Note that flakes can occur in unit tests, integration tests, or end-to-end tests, but probably occur most commonly in end-to-end tests. +## Hunting Flakes + +You may notice lots of your PRs or ones you watch are having a common +pre-submit failure, but less frequent issues that are still of concern take +more analysis over time. There are metrics recorded and viewable in: +- [TestGrid](https://k8s-testgrid.appspot.com/presubmits-kubernetes-blocking#Summary) +- [Velodrome](http://velodrome.k8s.io/dashboard/db/bigquery-metrics?orgId=1) + +It is worth noting tests are going to fail in presubmit a lot due +to unbuildable code, but that wont happen as much on the same commit unless +there's a true issue in the code or a broader problem like a dep failed to +pull in. + ## Filing issues for flaky tests Because flakes may be rare, it's very important that all relevant logs be @@ -63,18 +76,16 @@ we have the following guidelines: 3. If you can reproduce it (or it's obvious from the logs what happened), you should then be able to fix it, or in the case where someone is clearly more qualified to fix it, reassign it with very clear instructions. -4. PRs that fix or help debug flakes may have the P0 priority set to get them - through the merge queue as fast as possible. -5. Once you have made a change that you believe fixes a flake, it is conservative +4. Once you have made a change that you believe fixes a flake, it is conservative to keep the issue for the flake open and see if it manifests again after the change is merged. -6. If you can't reproduce a flake: __don't just close it!__ Every time a flake comes +5. If you can't reproduce a flake: __don't just close it!__ Every time a flake comes back, at least 2 hours of merge time is wasted. So we need to make monotonic progress towards narrowing it down every time a flake occurs. If you can't figure it out from the logs, add log messages that would have help you figure it out. If you make changes to make a flake more reproducible, please link your pull request to the flake you're working on. -7. If a flake has been open, could not be reproduced, and has not manifested in +6. If a flake has been open, could not be reproduced, and has not manifested in 3 months, it is reasonable to close the flake issue with a note saying why. diff --git a/contributors/devel/flexvolume.md b/contributors/devel/flexvolume.md index b58167c6a..12c463829 100644 --- a/contributors/devel/flexvolume.md +++ b/contributors/devel/flexvolume.md @@ -1,6 +1,6 @@ # Flexvolume -Flexvolume enables users to write their own drivers and add support for their volumes in Kubernetes. Vendor drivers should be installed in the volume plugin path on every Kubelet node and on master node(s) if `--enable-controller-attach-detach` Kubelet option is enabled. +Flexvolume enables users to write their own drivers and add support for their volumes in Kubernetes. Vendor drivers should be installed in the volume plugin path on every node, and on master if the driver requires attach capability (unless `--enable-controller-attach-detach` Kubelet option is set to false, but this is highly discouraged because it is a legacy mode of operation). Flexvolume is a GA feature from Kubernetes 1.8 release onwards. @@ -17,11 +17,10 @@ Beginning in v1.8, Flexvolume supports the ability to detect drivers on the fly. For more information, please refer to the [design document](/contributors/design-proposals/storage/flexvolume-deployment.md). ## Automated Plugin Installation/Upgrade -One possible way to install and upgrade your Flexvolume drivers is by using a DaemonSet. See [Recommended Driver Deployment Method](/contributors/design-proposals/storage/flexvolume-deployment.md#recommended-driver-deployment-method) for details. +One possible way to install and upgrade your Flexvolume drivers is by using a DaemonSet. See [Recommended Driver Deployment Method](/contributors/design-proposals/storage/flexvolume-deployment.md#recommended-driver-deployment-method) for details, and see [here](https://git.k8s.io/examples/staging/volumes/flexvolume/deploy/) for an example. ## Plugin details -The plugin expects the following call-outs are implemented for the backend drivers. Some call-outs are optional. Call-outs are invoked from the Kubelet & the Controller manager nodes. -Call-outs are invoked from Controller-manager only when "--enable-controller-attach-detach" Kubelet option is enabled. +The plugin expects the following call-outs are implemented for the backend drivers. Some call-outs are optional. Call-outs are invoked from Kubelet and Controller Manager. ### Driver invocation model: @@ -35,7 +34,7 @@ See [Driver output](#driver-output) for the capabilities map format. ``` #### Attach: -Attach the volume specified by the given spec on the given host. On success, returns the device path where the device is attached on the node. Nodename param is only valid/relevant if "--enable-controller-attach-detach" Kubelet option is enabled. Called from both Kubelet & Controller manager. +Attach the volume specified by the given spec on the given node. On success, returns the device path where the device is attached on the node. Called from Controller Manager. This call-out does not pass "secrets" specified in Flexvolume spec. If your driver requires secrets, do not implement this call-out and instead use "mount" call-out and implement attach and mount in that call-out. @@ -44,20 +43,20 @@ This call-out does not pass "secrets" specified in Flexvolume spec. If your driv ``` #### Detach: -Detach the volume from the Kubelet node. Nodename param is only valid/relevant if "--enable-controller-attach-detach" Kubelet option is enabled. Called from both Kubelet & Controller manager. +Detach the volume from the node. Called from Controller Manager. ``` detach ``` #### Wait for attach: -Wait for the volume to be attached on the remote node. On success, the path to the device is returned. Called from both Kubelet & Controller manager. The timeout should be 10m (based on https://git.k8s.io/kubernetes/pkg/kubelet/volumemanager/volume_manager.go#L88 ) +Wait for the volume to be attached on the remote node. On success, the path to the device is returned. Called from Controller Manager. The timeout should be 10m (based on https://git.k8s.io/kubernetes/pkg/kubelet/volumemanager/volume_manager.go#L88 ) ``` waitforattach ``` #### Volume is Attached: -Check the volume is attached on the node. Called from both Kubelet & Controller manager. +Check the volume is attached on the node. Called from Controller Manager. ``` isattached @@ -78,6 +77,14 @@ Unmounts the global mount for the device. This is called once all bind mounts ha ``` unmountdevice ``` +In addition to the user-specified options and [default JSON options](#default-json-options), the following options capturing information about the pod are passed through and generated automatically. + +``` +kubernetes.io/pod.name +kubernetes.io/pod.namespace +kubernetes.io/pod.uid +kubernetes.io/serviceAccount.name +``` #### Mount: Mount the volume at the mount dir. This call-out defaults to bind mount for drivers which implement attach & mount-device call-outs. Called only from Kubelet. @@ -116,7 +123,7 @@ following format. ### Default Json options -In addition to the flags specified by the user in the Options field of the FlexVolumeSource, the following flags are also passed to the executable. +In addition to the flags specified by the user in the Options field of the FlexVolumeSource, the following flags (set through their corresponding FlexVolumeSource fields) are also passed to the executable. Note: Secrets are passed only to "mount/unmount" call-outs. ``` @@ -138,10 +145,11 @@ Note: Secrets are passed only to "mount/unmount" call-outs. ### Example of Flexvolume -See [nginx.yaml] & [nginx-nfs.yaml] for a quick example on how to use Flexvolume in a pod. +Please refer to the [Flexvolume example directory]. See [nginx-lvm.yaml] & [nginx-nfs.yaml] for a quick example on how to use Flexvolume in a pod. -[lvm]: https://git.k8s.io/kubernetes/examples/volumes/flexvolume/lvm -[nfs]: https://git.k8s.io/kubernetes/examples/volumes/flexvolume/nfs -[nginx.yaml]: https://git.k8s.io/kubernetes/examples/volumes/flexvolume/nginx.yaml -[nginx-nfs.yaml]: https://git.k8s.io/kubernetes/examples/volumes/flexvolume/nginx-nfs.yaml +[lvm]: https://git.k8s.io/examples/staging/volumes/flexvolume/lvm +[nfs]: https://git.k8s.io/examples/staging/volumes/flexvolume/nfs +[nginx-lvm.yaml]: https://git.k8s.io/examples/staging/volumes/flexvolume/nginx-lvm.yaml +[nginx-nfs.yaml]: https://git.k8s.io/examples/staging/volumes/flexvolume/nginx-nfs.yaml +[Flexvolume example directory]: https://git.k8s.io/examples/staging/volumes/flexvolume/ diff --git a/contributors/devel/generating-clientset.md b/contributors/devel/generating-clientset.md index 7a47aeb8a..bf12e92cb 100644 --- a/contributors/devel/generating-clientset.md +++ b/contributors/devel/generating-clientset.md @@ -1,6 +1,6 @@ # Generation and release cycle of clientset -Client-gen is an automatic tool that generates [clientset](../design-proposals/api-machinery/client-package-structure.md#high-level-client-sets) based on API types. This doc introduces the use the client-gen, and the release cycle of the generated clientsets. +Client-gen is an automatic tool that generates [clientset](../design-proposals/api-machinery/client-package-structure.md#high-level-client-sets) based on API types. This doc introduces the use of client-gen, and the release cycle of the generated clientsets. ## Using client-gen diff --git a/contributors/devel/go-code.md b/contributors/devel/go-code.md deleted file mode 100644 index 4454e400a..000000000 --- a/contributors/devel/go-code.md +++ /dev/null @@ -1,3 +0,0 @@ -This document's content has been rolled into https://git.k8s.io/community/contributors/guide/coding-conventions.md - -This file is a placeholder to preserve links. Please remove after 3 months or the release of kubernetes 1.10, whichever comes first. diff --git a/contributors/devel/godep.md b/contributors/devel/godep.md index 36856aa29..4b10a7d5c 100644 --- a/contributors/devel/godep.md +++ b/contributors/devel/godep.md @@ -15,6 +15,19 @@ the tools. This doc will focus on predictability and reproducibility. +## Justifications for an update + +Before you update a dependency, take a moment to consider why it should be +updated. Valid reasons include: + 1. We need new functionality that is in a later version. + 2. New or improved APIs in the dependency significantly improve Kubernetes code. + 3. Bugs were fixed that impact Kubernetes. + 4. Security issues were fixed even if they don't impact Kubernetes yet. + 5. Performance, scale, or efficiency was meaningfully improved. + 6. We need dependency A and there is a transitive dependency B. + 7. Kubernetes has an older level of a dependency that is precluding being able +to work with other projects in the ecosystem. + ## Theory of operation The `go` toolchain assumes a global workspace that hosts all of your Go code. @@ -63,6 +76,13 @@ simply `make clean` or `rm -rf _output`, and run it again. Now you should have a clean copy of all of the Kubernetes dependencies. +Downloading dependencies might take a while, so if you want to see progress +information use the `-v` flag: + +```sh +hack/run-in-gopath.sh hack/godep-restore.sh -v +``` + ## Making changes The most common things people need to do with deps are add and update them. @@ -145,6 +165,8 @@ calculate which deps are needed, and rebuild the database. It will also regenerate other metadata files which the project needs, such as BUILD files and the LICENSE database. +Commit the changes before updating deps in staging repos. + ## Saving deps in staging repos Kubernetes stores some code in a directory called `staging` which is handled @@ -156,6 +178,24 @@ transitively), you'll also need to update deps there: ./hack/update-staging-godeps.sh ``` +Then commit the changes generated by the above script. + +## Commit messages + +Terse messages like "Update foo.org/bar to 0.42" are problematic +for maintainability. Please include in your commit message the +detailed reason why the dependencies were modified. + +Too commonly dependency changes have a ripple effect where something +else breaks unexpectedly. The first instinct during issue triage +is to revert a change. If the change was made to fix some other +issue and that issue was not documented, then a revert simply +continues the ripple by fixing one issue and reintroducing another +which then needs refixed. This can needlessly span multiple days +as CI results bubble in and subsequent patches fix and refix and +rerefix issues. This may be avoided if the original modifications +recorded artifacts of the change rationale. + ## Sanity checking After all of this is done, `git status` should show you what files have been diff --git a/contributors/devel/help-wanted.md b/contributors/devel/help-wanted.md index eb1038a4c..1d4594ecc 100644 --- a/contributors/devel/help-wanted.md +++ b/contributors/devel/help-wanted.md @@ -1,13 +1,141 @@ -# Help Wanted +# Overview + +We use two labels [help wanted](#help-wanted) and [good first +issue](#good-first-issue) to identify issues that have been specially groomed +for new contributors. The `good first issue` label is a subset of `help wanted` +label, indicating that members have committed to providing extra assistance for +new contributors. All `good first issue` items also have the `help wanted` +label. + +We also have some [suggestions](#suggestions) for using these labels to help +grow and improve our community. + +## Help Wanted Items marked with the `help wanted` label need to ensure that they are: -- Sufficiently actionable: clear description of what should be done -- Tractable for new/casual contributors: there is documentation how that type of change should be made -- Goldilocks priority: Not too high that a core contributor should do it, but not too low that it isn't useful enough for a core contributor to spend time to review it, answer questions, help get it into a release, etc. -- Up to date: Often these issues become obsolete and have already been done, are no longer desirable, no longer make sense, change in priority, change in difficulty, etc. +- **Low Barrier to Entry** + + It should be tractable for new contributors. Documentation on how that type of + change should be made should already exist. + +- **Clear Task** + + The task is agreed upon and does not require further discussions in the + community. Call out if that area of code is untested and requires new + fixtures. + + API / CLI behavior is decided and included in the OP issue, for example: _"The + new command syntax is `svcat unbind NAME [--orphan] [--timeout 5m]`"_, with + expected validations called out. + +- **Goldilocks priority** + + Not too high that a core contributor should do it, but not too low that it + isn't useful enough for a core contributor to spend time to review it, answer + questions, help get it into a release, etc. + +- **Up-To-Date** + + Often these issues become obsolete and have already been done, are no longer + desired, no longer make sense, have changed priority or difficulty , etc. Related commands: -- `/help` : adds the `help wanted` label to an issue -- `/remove-help` : removes the `help wanted` label from an issue \ No newline at end of file +- `/help` : Adds the `help wanted` label to an issue. +- `/remove-help` : Removes the `help wanted` label from an issue. If the + `good first issue` label is present, it is removed as well. + +## Good First Issue + +Items marked with the `good first issue` label are intended for _first-time +contributors_. It indicates that members will keep an eye out for these pull +requests and shepherd it through our processes. + +**New contributors should not be left to find an approver, ping for reviews, +decipher prow commands, or identify that their build failed due to a flake.** +This makes new contributors feel welcome, valued, and assures them that they +will have an extra level of help with their first contribution. + +After a contributor has successfully completed 1-2 `good first issue`'s, they +should be ready to move on to `help wanted` items, saving remaining `good first +issue`'s for other new contributors. + +These items need to ensure that they follow the guidelines for `help wanted` +labels (above) in addition to meeting the following criteria: + +- **No Barrier to Entry** + + The task is something that a new contributor can tackle without advanced + setup, or domain knowledge. + +- **Solution Explained** + + The recommended solution is clearly described in the issue. + +- **Provides Context** + + If background knowledge is required, this should be explicitly mentioned and a + list of suggested readings included. + +- **Gives Examples** + + Link to examples of similar implementations so new contributors have a + reference guide for their changes. + +- **Identifies Relevant Code** + + The relevant code and tests to be changed should be linked in the issue. + +- **Ready to Test** + + There should be existing tests that can be modified, or existing test cases + fit to be copied. If the area of code doesn't have tests, before labeling the + issue, add a test fixture. This prep often makes a great `help wanted` task! + +Related commands: + +- `/good-first-issue` : Adds the `good first issue` label to an issue. Also adds + the `help wanted` label, if not already present. +- `/remove-good-first-issue` : Removes the `good first issue` label from an + issue. + +# Suggestions + +We encourage our more experienced members to help new contributors, so that the +Kubernetes community can continue to grow and maintain the kind, inclusive +community that we all enjoy today. + +The following suggestions go a long way toward preventing "drive-by" PRs, and +ensure that our investment in new contributors is rewarded by them coming back +and becoming regulars. + +Provide extra assistance during reviews on `good first issue` pull requests: +- Answer questions and identify useful docs. +- Offer advice such as _"One way to reproduce this in a cluster is to do X and + then you can use kubectl to poke around"_, or _"Did you know that you can + use fake clients to setup and test this easier?"_. +- Help new contributors learn enough about the project, setting up their + environment, running tests, and navigating this area of the code so that they + can tackle a related `help wanted` issue next time. + +If you make someone feel like a part of our community, that it's safe to ask +questions, that people will let them know the rules/norms, that their +contributions are helpful and appreciated... they will stick around! 🌠+- Encourage new contributors to seek help on the appropriate slack channels, + introduce them, and include them in your conversations. +- Invite them to the SIG meetings. +- Give credit to new contributors so that others get to know them, _"Hey, would + someone help give a second LGTM on @newperson's first PR on chocolate + bunnies?"_. Mention them in the SIG channel/meeting, thank them on twitter or + #shoutouts. +- Use all the emoji in your approve or lgtm comment. đź’– 🚀 +- Let them know that their `good first issue` is getting extra attention to make + the first one easier and help them find a follow-up issue. +- Suggest a related `help wanted` so that can build up experience in an area. +- People are more likely to continue contributing when they know what to expect, + what's the acceptable way to ask for people to review a PR, nudge things along + when a PR is stalled. Show them how we operate by helping move their first PR + along. +- If you have time, let the contributor know that they can DM you with questions + that they aren't yet comfortable asking the wider group. diff --git a/contributors/devel/logging.md b/contributors/devel/logging.md index 12a719de0..c4da68294 100644 --- a/contributors/devel/logging.md +++ b/contributors/devel/logging.md @@ -1,30 +1,33 @@ ## Logging Conventions -The following conventions for the glog levels to use. -[glog](http://godoc.org/github.com/golang/glog) is globally preferred to +The following conventions for the klog levels to use. +[klog](http://godoc.org/github.com/kubernetes/klog) is globally preferred to [log](http://golang.org/pkg/log/) for better runtime control. -* glog.Errorf() - Always an error +* klog.Errorf() - Always an error -* glog.Warningf() - Something unexpected, but probably not an error +* klog.Warningf() - Something unexpected, but probably not an error -* glog.Infof() has multiple levels: - * glog.V(0) - Generally useful for this to ALWAYS be visible to an operator +* klog.Infof() has multiple levels: + * klog.V(0) - Generally useful for this to ALWAYS be visible to an operator * Programmer errors * Logging extra info about a panic * CLI argument handling - * glog.V(1) - A reasonable default log level if you don't want verbosity. + * klog.V(1) - A reasonable default log level if you don't want verbosity. * Information about config (listening on X, watching Y) * Errors that repeat frequently that relate to conditions that can be corrected (pod detected as unhealthy) - * glog.V(2) - Useful steady state information about the service and important log messages that may correlate to significant changes in the system. This is the recommended default log level for most systems. + * klog.V(2) - Useful steady state information about the service and important log messages that may correlate to significant changes in the system. This is the recommended default log level for most systems. * Logging HTTP requests and their exit code * System state changing (killing pod) * Controller state change events (starting pods) * Scheduler log messages - * glog.V(3) - Extended information about changes + * klog.V(3) - Extended information about changes * More info about system state changes - * glog.V(4) - Debug level verbosity (for now) + * klog.V(4) - Debug level verbosity * Logging in particularly thorny parts of code where you may want to come back later and check it + * klog.V(5) - Trace level verbosity + * Context to understand the steps leading up to errors and warnings + * More information for troubleshooting reported issues As per the comments, the practical default level is V(2). Developers and QE environments may wish to run at V(3) or V(4). If you wish to change the log diff --git a/contributors/devel/on-call-federation-build-cop.md b/contributors/devel/on-call-federation-build-cop.md index 708c854a3..c153b02ad 100644 --- a/contributors/devel/on-call-federation-build-cop.md +++ b/contributors/devel/on-call-federation-build-cop.md @@ -26,7 +26,7 @@ Search for the above job names in various configuration files as below: * Prow config: https://git.k8s.io/test-infra/prow/config.yaml * Test job/bootstrap config: https://git.k8s.io/test-infra/jobs/config.json -* Test grid config: https://git.k8s.io/test-infra/testgrid/config/config.yaml +* Test grid config: https://git.k8s.io/test-infra/testgrid/config.yaml * Job specific config: https://git.k8s.io/test-infra/jobs/env ### Results @@ -75,7 +75,7 @@ Search for the above job names in various configuration files as below: * Prow config: https://git.k8s.io/test-infra/prow/config.yaml * Test job/bootstrap config: https://git.k8s.io/test-infra/jobs/config.json -* Test grid config: https://git.k8s.io/test-infra/testgrid/config/config.yaml +* Test grid config: https://git.k8s.io/test-infra/testgrid/config.yaml * Job specific config: https://git.k8s.io/test-infra/jobs/env ### Results diff --git a/contributors/devel/owners.md b/contributors/devel/owners.md deleted file mode 100644 index 1be75e5f4..000000000 --- a/contributors/devel/owners.md +++ /dev/null @@ -1,4 +0,0 @@ -This document has been moved to https://git.k8s.io/community/contributors/guide/owners.md - -This file is a placeholder to preserve links. Please remove after 3 months or the release of kubernetes 1.10, whichever comes first. - diff --git a/contributors/devel/pr_workflow.dia b/contributors/devel/pr_workflow.dia deleted file mode 100644 index 753a284b4..000000000 Binary files a/contributors/devel/pr_workflow.dia and /dev/null differ diff --git a/contributors/devel/pr_workflow.png b/contributors/devel/pr_workflow.png deleted file mode 100644 index 0e2bd5d6e..000000000 Binary files a/contributors/devel/pr_workflow.png and /dev/null differ diff --git a/contributors/devel/pull-requests.md b/contributors/devel/pull-requests.md deleted file mode 100644 index c793df8c9..000000000 --- a/contributors/devel/pull-requests.md +++ /dev/null @@ -1,4 +0,0 @@ -This file has been moved to https://git.k8s.io/community/contributors/guide/pull-requests.md. - \ No newline at end of file diff --git a/contributors/devel/release-cycle.png b/contributors/devel/release-cycle.png new file mode 100644 index 000000000..f3aa460a3 Binary files /dev/null and b/contributors/devel/release-cycle.png differ diff --git a/contributors/devel/release-lifecycle.png b/contributors/devel/release-lifecycle.png new file mode 100644 index 000000000..090dabab7 Binary files /dev/null and b/contributors/devel/release-lifecycle.png differ diff --git a/contributors/devel/release.md b/contributors/devel/release.md new file mode 100644 index 000000000..b08642f7f --- /dev/null +++ b/contributors/devel/release.md @@ -0,0 +1,325 @@ +# Targeting Features, Issues and PRs to Release Milestones + +This document is focused on Kubernetes developers and contributors +who need to create a feature, issue, or pull request which targets a specific +release milestone. + +- [TL;DR](#tldr) +- [Definitions](#definitions) +- [The Release Cycle](#the-release-cycle) +- [Removal Of Items From The Milestone](#removal-of-items-from-the-milestone) +- [Adding An Item To The Milestone](#adding-an-item-to-the-milestone) + - [Milestone Maintainers](#milestone-maintainers) + - [Feature additions](#feature-additions) + - [Issue additions](#issue-additions) + - [PR Additions](#pr-additions) +- [Other Required Labels](#other-required-labels) + - [SIG Owner Label](#sig-owner-label) + - [Priority Label](#priority-label) + - [Issue Kind Label](#issue-kind-label) + +The process for shepherding features, issues, and pull requests +into a Kubernetes release spans multiple stakeholders: +* the feature, issue, or pull request owner +* SIG leadership +* the release team + +Information on workflows and interactions are described below. + +As the owner of a feature, issue, or pull request (PR), it is your +responsibility to ensure release milestone requirements are met. +Automation and the release team will be in contact with you if +updates are required, but inaction can result in your work being +removed from the milestone. Additional requirements exist when the +target milestone is a prior release (see [cherry pick +process](cherry-picks.md) for more information). + +## TL;DR + +If you want your PR to get merged, it needs the following required labels and milestones, represented here by the Prow /commands it would take to add them: + + + + + + + + + + + + + + + + + + + + + + + +
Normal DevCode SlushCode FreezePost-Release
Weeks 1-8Week 9Weeks 10-12Weeks 12+
Required Labels +
    + +
  • /sig {name}
  • +
  • /kind {type}
  • +
  • /lgtm
  • +
  • /approved
  • +
+
+
    + +
  • /milestone {v1.y}
  • +
  • /sig {name}
  • +
  • /kind {type}
  • +
  • /priority {level}
  • +
  • /lgtm
  • +
  • /approved
  • +
+
+
    + +
  • /milestone {v1.y}
  • +
  • /sig {name}
  • +
  • /kind {bug, failing-test}
  • +
  • /priority critical-urgent
  • +
  • /lgtm
  • +
  • /approved
  • +
+
+ +Return to 'Normal Dev' phase requirements: +
    +
  • /sig {name}
  • +
  • /kind {type}
  • +
  • /lgtm
  • +
  • /approved
  • +
+ +Merges into the 1.y branch are now [via cherrypicks](https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md), approved by release branch manager. +
+
    +
+ +In the past there was a requirement for a milestone targeted pull +request to have an associated GitHub issue opened, but this is no +longer the case. Features are effectively GitHub issues or +[KEPs](https://git.k8s.io/community/keps) +which lead to subsequent PRs. The general labeling process should +be consistent across artifact types. + +--- + +## Definitions + +- *issue owners*: Creator, assignees, and user who moved the issue into a release milestone. +- *release team*: Each Kubernetes release has a team doing project + management tasks described + [here](https://git.k8s.io/sig-release/release-team/README.md). The + contact info for the team associated with any given release can be + found [here](https://git.k8s.io/sig-release/releases/). +- *Y days*: Refers to business days (using the location local to the release-manager M-F). +- *feature*: see "[Is My Thing a Feature?](http://git.k8s.io/features/README.md#is-my-thing-a-feature) +- *release milestone*: semantic version string or [GitHub milestone](https://help.github.com/articles/associating-milestones-with-issues-and-pull-requests/) referring to a release MAJOR.MINOR vX.Y version. See also [release versioning](http://git.k8s.io/community/contributors/design-proposals/release/versioning.md) +- *release branch*: Git branch "release-X.Y" created for the vX.Y milestone. Created at the time of the vX.Y-beta.0 release and maintained after the release for approximately 9 months with vX.Y.Z patch releases. + +## The Release Cycle + +![Image of one Kubernetes release cycle](release-cycle.png) + +Kubernetes releases currently happen four times per year. The release +process can be thought of as having three main phases: +* Feature Definition +* Implementation +* Stabilization + +But in reality this is an open source and agile project, with feature +planning and implementation happening at all times. Given the +project scale and globally distributed developer base, it is critical +to project velocity to not rely on a trailing stabilization phase and +rather have continuous integration testing which ensures the +project is always stable so that individual commits can be +flagged as having broken something. + +With ongoing feature definition through the year, some set of items +will bubble up as targeting a given release. The **enhancement freeze** +starts ~4 weeks into release cycle. By this point all intended +feature work for the given release has been defined in suitable +planning artifacts in conjunction with the Release Team's [enhancements +lead](https://git.k8s.io/sig-release/release-team/role-handbooks/enhancements/README.md). + +Implementation and bugfixing is ongoing across the cycle, but +culminates in a code slush and code freeze period: +* The **code slush** starts in week ~9 of the release cycle. The master + branch only accepts PRs for the upcoming release milestone. No additional feature + development is merged after this point. +* The **code freeze** starts in week ~10 and continues for ~2 weeks. + Only critical bug fixes are accepted into the release codebase. + +There are approximately two weeks following code freeze, and preceding +release, during which all remaining critical issues must be resolved +before release. This also gives time for documentation finalization. + +When the code base is sufficiently stable, the master branch re-opens +for general development and work begins there for the next release +milestone. Any remaining modifications for the current release are cherry +picked from master back to the release branch. The release is built from +the release branch. + +Following release, the [Release Branch +Manager](https://git.k8s.io/sig-release/release-team/role-handbooks/branch-manager/README.md) +cherry picks additional critical fixes from the master branch for +a period of around 9 months, leaving an overlap of three release +versions forward support. Thus, each release is part of a broader +Kubernetes lifecycle: + +![Image of Kubernetes release lifecycle spanning three releases](release-lifecycle.png) + +## Removal Of Items From The Milestone + +Before getting too far into the process for adding an item to the +milestone, please note: + +Members of the Release Team may remove Issues from the milestone +if they or the responsible SIG determine that the issue is not +actually blocking the release and is unlikely to be resolved in a +timely fashion. + +Members of the Release Team may remove PRs from the milestone for +any of the following, or similar, reasons: + +* PR is potentially de-stabilizing and is not needed to resolve a blocking issue; +* PR is a new, late feature PR and has not gone through the features process or the exception process; +* There is no responsible SIG willing to take ownership of the PR and resolve any follow-up issues with it; +* PR is not correctly labelled; +* Work has visibly halted on the PR and delivery dates are uncertain or late. + +While members of the Release Team will help with labelling and +contacting SIG(s), it is the responsibility of the submitter to +categorize PRs, and to secure support from the relevant SIG to +guarantee that any breakage caused by the PR will be rapidly resolved. + +Where additional action is required, an attempt at human to human +escalation will be made by the release team through the following +channels: + +- Comment in GitHub mentioning the SIG team and SIG members as appropriate for the issue type +- Emailing the SIG mailing list + - bootstrapped with group email addresses from the [community sig list](/sig-list.md) + - optionally also directly addressing SIG leadership or other SIG members +- Messaging the SIG's Slack channel + - bootstrapped with the slackchannel and SIG leadership from the [community sig list](/sig-list.md) + - optionally directly "@" mentioning SIG leadership or others by handle + +## Adding An Item To The Milestone + +### Milestone Maintainers + +The members of the GitHub [“kubernetes-milestone-maintainers” +team](https://github.com/orgs/kubernetes/teams/kubernetes-milestone-maintainers/members) +are entrusted with the responsibility of specifying the release milestone on +GitHub artifacts. This group is [maintained by +SIG-Release](https://git.k8s.io/sig-release/release-team/README.md#milestone-maintainers) +and has representation from the various SIGs' leadership. + +### Feature additions + +Feature planning and definition takes many forms today, but a typical +example might be a large piece of work described in a +[KEP](https://git.k8s.io/community/keps), with associated +task issues in GitHub. When the plan has reached an implementable state and +work is underway, the feature or parts thereof are targeted for an upcoming +milestone by creating GitHub issues and marking them with the Prow "/milestone" +command. + +For the first ~4 weeks into the release cycle, the release team's +Enhancements Lead will interact with SIGs and feature owners via GitHub, +Slack, and SIG meetings to capture all required planning artifacts. + +If you have a feature to target for an upcoming release milestone, begin a +conversation with your SIG leadership and with that release's Enhancements +Lead. + +### Issue additions + +Issues are marked as targeting a milestone via the Prow +"/milestone" command. + +The release team's [Bug Triage +Lead](https://git.k8s.io/sig-release/release-team/role-handbooks/bug-triage/README.md) and overall community watch +incoming issues and triage them, as described in the contributor +guide section on [issue triage](/contributors/guide/issue-triage.md). + +Marking issues with the milestone provides the community better +visibility regarding when an issue was observed and by when the community +feels it must be resolved. During code freeze, to merge a PR it is required +that a release milestone is set. + +An open issue is no longer required for a PR, but open issues and +associated PRs should have synchronized labels. For example a high +priority bug issue might not have its associated PR merged if the PR is +only marked as lower priority. + +### PR Additions + +PRs are marked as targeting a milestone via the Prow +"/milestone" command. + +This is a blocking requirement during code slush and code freeze as +described above. + +## Other Required Labels + +*Note* [Here is the list of labels and their use and purpose.](https://git.k8s.io/test-infra/label_sync/labels.md#labels-that-apply-to-all-repos-for-both-issues-and-prs) + +### SIG Owner Label + +The SIG owner label defines the SIG to which we escalate if a +milestone issue is languishing or needs additional attention. If +there are no updates after escalation, the issue may be automatically +removed from the milestone. + +These are added with the Prow "/sig" command. For example to add +the label indicating SIG Storage is responsible, comment with `/sig +storage`. + +### Priority Label + +Priority labels are used to determine an escalation path before +moving issues out of the release milestone. They are also used to +determine whether or not a release should be blocked on the resolution +of the issue. + +- `priority/critical-urgent`: Never automatically move out of a release milestone; continually escalate to contributor and SIG through all available channels. + - considered a release blocking issue + - code slush: issue owner update frequency: every 3 days + - code freeze: issue owner update frequency: daily + - would require a patch release if left undiscovered until after the minor release. +- `priority/important-soon`: Escalate to the issue owners and SIG owner; move out of milestone after several unsuccessful escalation attempts. + - not considered a release blocking issue + - would not require a patch release + - will automatically be moved out of the release milestone at code freeze after a 4 day grace period +- `priority/important-longterm`: Escalate to the issue owners; move out of the milestone after 1 attempt. + - even less urgent / critical than `priority/important-soon` + - moved out of milestone more aggressively than `priority/important-soon` + +### Issue/PR Kind Label + +The issue kind is used to help identify the types of changes going +into the release over time. This may allow the release team to +develop a better understanding of what sorts of issues we would +miss with a faster release cadence. + +For release targeted issues, including pull requests, one of the following +issue kind labels must be set: + +- `kind/api-change`: Adds, removes, or changes an API +- `kind/bug`: Fixes a newly discovered bug. +- `kind/cleanup`: Adding tests, refactoring, fixing old bugs. +- `kind/design`: Related to design +- `kind/documentation`: Adds documentation +- `kind/failing-test`: CI test case is failing consistently. +- `kind/feature`: New functionality. +- `kind/flake`: CI test case is showing intermittent failures. diff --git a/contributors/devel/release/OWNERS b/contributors/devel/release/OWNERS deleted file mode 100644 index afb042fa9..000000000 --- a/contributors/devel/release/OWNERS +++ /dev/null @@ -1,8 +0,0 @@ -reviewers: - - saad-ali - - pwittrock - - steveperry-53 - - chenopis - - spiffxp -approvers: - - sig-release-leads diff --git a/contributors/devel/release/README.md b/contributors/devel/release/README.md deleted file mode 100644 index d6eb9d6c7..000000000 --- a/contributors/devel/release/README.md +++ /dev/null @@ -1,3 +0,0 @@ -The original content of this file has been migrated to https://git.k8s.io/sig-release/ephemera/README.md - -This file is a placeholder to preserve links. Please remove after 3 months or the release of kubernetes 1.10, whichever comes first. diff --git a/contributors/devel/release/issues.md b/contributors/devel/release/issues.md deleted file mode 100644 index cccf12e9c..000000000 --- a/contributors/devel/release/issues.md +++ /dev/null @@ -1,3 +0,0 @@ -The original content of this file has been migrated to https://git.k8s.io/sig-release/ephemera/issues.md - -This file is a placeholder to preserve links. Please remove after 3 months or the release of kubernetes 1.10, whichever comes first. diff --git a/contributors/devel/release/patch-release-manager.md b/contributors/devel/release/patch-release-manager.md deleted file mode 100644 index da1290e5d..000000000 --- a/contributors/devel/release/patch-release-manager.md +++ /dev/null @@ -1,3 +0,0 @@ -The original content of this file has been migrated to https://git.k8s.io/sig-release/release-process-documentation/release-team-guides/patch-release-manager-playbook.md - -This file is a placeholder to preserve links. Please remove after 3 months or the release of kubernetes 1.10, whichever comes first. diff --git a/contributors/devel/release/patch_release.md b/contributors/devel/release/patch_release.md deleted file mode 100644 index 1b074759c..000000000 --- a/contributors/devel/release/patch_release.md +++ /dev/null @@ -1,3 +0,0 @@ -The original content of this file has been migrated to https://git.k8s.io/sig-release/ephemera/patch_release.md - -This file is a placeholder to preserve links. Please remove after 3 months or the release of kubernetes 1.10, whichever comes first. diff --git a/contributors/devel/release/scalability-validation.md b/contributors/devel/release/scalability-validation.md deleted file mode 100644 index 8a943227e..000000000 --- a/contributors/devel/release/scalability-validation.md +++ /dev/null @@ -1,3 +0,0 @@ -The original content of this file has been migrated to https://git.k8s.io/sig-release/ephemera/scalability-validation.md - -This file is a placeholder to preserve links. Please remove after 3 months or the release of kubernetes 1.10, whichever comes first. diff --git a/contributors/devel/release/testing.md b/contributors/devel/release/testing.md deleted file mode 100644 index 2ae761122..000000000 --- a/contributors/devel/release/testing.md +++ /dev/null @@ -1,3 +0,0 @@ -The original content of this file has been migrated to https://git.k8s.io/sig-release/ephemera/testing.md - -This file is a placeholder to preserve links. Please remove after 3 months or the release of kubernetes 1.10, whichever comes first. diff --git a/contributors/devel/scalability-good-practices.md b/contributors/devel/scalability-good-practices.md deleted file mode 100644 index ef274c27c..000000000 --- a/contributors/devel/scalability-good-practices.md +++ /dev/null @@ -1,4 +0,0 @@ -This document has been moved to https://git.k8s.io/community/contributors/guide/scalability-good-practices.md - -This file is a placeholder to preserve links. Please remove after 3 months or the release of kubernetes 1.10, whichever comes first. - diff --git a/contributors/devel/scheduler.md b/contributors/devel/scheduler.md index d8da46313..486b04a9a 100644 --- a/contributors/devel/scheduler.md +++ b/contributors/devel/scheduler.md @@ -84,7 +84,7 @@ scheduling policies to apply, and can add new ones. The policies that are applied when scheduling can be chosen in one of two ways. The default policies used are selected by the functions `defaultPredicates()` and `defaultPriorities()` in [pkg/scheduler/algorithmprovider/defaults/defaults.go](http://releases.k8s.io/HEAD/pkg/scheduler/algorithmprovider/defaults/defaults.go). -However, the choice of policies can be overridden by passing the command-line flag `--policy-config-file` to the scheduler, pointing to a JSON file specifying which scheduling policies to use. See [examples/scheduler-policy-config.json](http://releases.k8s.io/HEAD/examples/scheduler-policy-config.json) for an example +However, the choice of policies can be overridden by passing the command-line flag `--policy-config-file` to the scheduler, pointing to a JSON file specifying which scheduling policies to use. See [examples/scheduler-policy-config.json](https://git.k8s.io/examples/staging/scheduler-policy-config.json) for an example config file. (Note that the config file format is versioned; the API is defined in [pkg/scheduler/api](http://releases.k8s.io/HEAD/pkg/scheduler/api/)). Thus to add a new scheduling policy, you should modify [pkg/scheduler/algorithm/predicates/predicates.go](http://releases.k8s.io/HEAD/pkg/scheduler/algorithm/predicates/predicates.go) or add to the directory [pkg/scheduler/algorithm/priorities](http://releases.k8s.io/HEAD/pkg/scheduler/algorithm/priorities/), and either register the policy in `defaultPredicates()` or `defaultPriorities()`, or use a policy config file. diff --git a/contributors/devel/scheduler_algorithm.md b/contributors/devel/scheduler_algorithm.md index b3fd876af..df39c0cc2 100644 --- a/contributors/devel/scheduler_algorithm.md +++ b/contributors/devel/scheduler_algorithm.md @@ -14,7 +14,7 @@ The purpose of filtering the nodes is to filter out the nodes that do not meet c - `MatchNodeSelector`: Check if the labels of the node match the labels specified in the Pod's `nodeSelector` field and, as of Kubernetes v1.2, also match the `scheduler.alpha.kubernetes.io/affinity` pod annotation if present. See [here](https://kubernetes.io/docs/user-guide/node-selection/) for more details on both. - `MaxEBSVolumeCount`: Ensure that the number of attached ElasticBlockStore volumes does not exceed a maximum value (by default, 39, since Amazon recommends a maximum of 40 with one of those 40 reserved for the root volume -- see [Amazon's documentation](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/volume_limits.html#linux-specific-volume-limits)). The maximum value can be controlled by setting the `KUBE_MAX_PD_VOLS` environment variable. - `MaxGCEPDVolumeCount`: Ensure that the number of attached GCE PersistentDisk volumes does not exceed a maximum value (by default, 16, which is the maximum GCE allows -- see [GCE's documentation](https://cloud.google.com/compute/docs/disks/persistent-disks#limits_for_predefined_machine_types)). The maximum value can be controlled by setting the `KUBE_MAX_PD_VOLS` environment variable. -- `CheckNodeMemoryPressure`: Check if a pod can be scheduled on a node reporting memory pressure condition. Currently, no ``BestEffort`` should be placed on a node under memory pressure as it gets automatically evicted by kubelet. +- `CheckNodeMemoryPressure`: Check if a pod can be scheduled on a node reporting memory pressure condition. Currently, no ``BestEffort`` pods should be placed on a node under memory pressure as it gets automatically evicted by kubelet. - `CheckNodeDiskPressure`: Check if a pod can be scheduled on a node reporting disk pressure condition. Currently, no pods should be placed on a node under disk pressure as it gets automatically evicted by kubelet. The details of the above predicates can be found in [pkg/scheduler/algorithm/predicates/predicates.go](http://releases.k8s.io/HEAD/pkg/scheduler/algorithm/predicates/predicates.go). All predicates mentioned above can be used in combination to perform a sophisticated filtering policy. Kubernetes uses some, but not all, of these predicates by default. You can see which ones are used by default in [pkg/scheduler/algorithmprovider/defaults/defaults.go](http://releases.k8s.io/HEAD/pkg/scheduler/algorithmprovider/defaults/defaults.go). diff --git a/contributors/devel/security-release-process.md b/contributors/devel/security-release-process.md deleted file mode 100644 index e0b55f682..000000000 --- a/contributors/devel/security-release-process.md +++ /dev/null @@ -1,3 +0,0 @@ -The original content of this file has been migrated to https://git.k8s.io/sig-release/security-release-process-documentation/security-release-process.md - -This file is a placeholder to preserve links. Please remove after 3 months or the release of kubernetes 1.10, whichever comes first. diff --git a/contributors/devel/testing.md b/contributors/devel/testing.md index cd7dd1242..60f83b532 100644 --- a/contributors/devel/testing.md +++ b/contributors/devel/testing.md @@ -37,7 +37,7 @@ passing, so it is often a good idea to make sure the e2e tests work as well. * The preferred method of testing multiple scenarios or input is [table driven testing](https://github.com/golang/go/wiki/TableDrivenTests) - Example: [TestNamespaceAuthorization](https://git.k8s.io/kubernetes/test/integration/auth/auth_test.go) -* Unit tests must pass on OS X and Windows platforms. +* Unit tests must pass on macOS and Windows platforms. - Tests using linux-specific features must be skipped or compiled out. - Skipped is better, compiled out is required when it won't compile. * Concurrent unit test runs must pass. @@ -54,6 +54,12 @@ cd kubernetes make test # Run all unit tests. ``` +If any unit test fails with a timeout panic (see [#1594](https://github.com/kubernetes/community/issues/1594)) on the testing package, you can increase the `KUBE_TIMEOUT` value as shown below. + +```sh +make test KUBE_TIMEOUT="-timeout 300s" +``` + ### Set go flags during unit tests You can set [go flags](https://golang.org/cmd/go/) by setting the @@ -95,7 +101,7 @@ make test WHAT=./pkg/api/validation GOFLAGS="-v" KUBE_TEST_ARGS="-run ValidatePo ``` For other supported test flags, see the [golang -documentation](https://golang.org/cmd/go/#hdr-Description_of_testing_flags). +documentation](https://golang.org/cmd/go/#hdr-Testing_flags). ### Stress running unit tests diff --git a/contributors/devel/update-release-docs.md b/contributors/devel/update-release-docs.md index 68c6707cd..93eeedc4d 100644 --- a/contributors/devel/update-release-docs.md +++ b/contributors/devel/update-release-docs.md @@ -1,108 +1,3 @@ -# Table of Contents - -- [Table of Contents](#table-of-contents) -- [Overview](#overview) -- [Adding a new docs collection for a release](#adding-a-new-docs-collection-for-a-release) -- [Updating docs in an existing collection](#updating-docs-in-an-existing-collection) - - [Updating docs on HEAD](#updating-docs-on-head) - - [Updating docs in release branch](#updating-docs-in-release-branch) - - [Updating docs in gh-pages branch](#updating-docs-in-gh-pages-branch) - - -# Overview - -This document explains how to update kubernetes release docs hosted at http://kubernetes.io/docs/. - -http://kubernetes.io is served using the [gh-pages -branch](https://github.com/kubernetes/kubernetes/tree/gh-pages) of kubernetes repo on github. -Updating docs in that branch will update http://kubernetes.io - -There are 2 scenarios which require updating docs: -* Adding a new docs collection for a release. -* Updating docs in an existing collection. - -# Adding a new docs collection for a release - -Whenever a new release series (`release-X.Y`) is cut from `master`, we push the -corresponding set of docs to `http://kubernetes.io/vX.Y/docs`. The steps are as follows: - -* Create a `_vX.Y` folder in `gh-pages` branch. -* Add `vX.Y` as a valid collection in [_config.yml](https://github.com/kubernetes/kubernetes/blob/gh-pages/_config.yml) -* Create a new `_includes/nav_vX.Y.html` file with the navigation menu. This can - be a copy of `_includes/nav_vX.Y-1.html` with links to new docs added and links - to deleted docs removed. Update [_layouts/docwithnav.html] - (https://github.com/kubernetes/kubernetes/blob/gh-pages/_layouts/docwithnav.html) - to include this new navigation html file. Example PR: [#16143](https://github.com/kubernetes/kubernetes/pull/16143). -* [Pull docs from release branch](#updating-docs-in-gh-pages-branch) in `_vX.Y` - folder. - -Once these changes have been submitted, you should be able to reach the docs at -`http://kubernetes.io/vX.Y/docs/` where you can test them. - -To make `X.Y` the default version of docs: - -* Update [_config.yml](https://github.com/kubernetes/kubernetes/blob/gh-pages/_config.yml) - and [/kubernetes/kubernetes/blob/gh-pages/_docs/index.md](https://github.com/kubernetes/kubernetes/blob/gh-pages/_docs/index.md) - to point to the new version. Example PR: [#16416](https://github.com/kubernetes/kubernetes/pull/16416). -* Update [_includes/docversionselector.html](https://github.com/kubernetes/kubernetes/blob/gh-pages/_includes/docversionselector.html) - to make `vX.Y` the default version. -* Add "Disallow: /vX.Y-1/" to existing [robots.txt](https://github.com/kubernetes/kubernetes/blob/gh-pages/robots.txt) - file to hide old content from web crawlers and focus SEO on new docs. Example PR: - [#16388](https://github.com/kubernetes/kubernetes/pull/16388). -* Regenerate [sitemaps.xml](https://github.com/kubernetes/kubernetes/blob/gh-pages/sitemap.xml) - so that it now contains `vX.Y` links. Sitemap can be regenerated using - https://www.xml-sitemaps.com. Example PR: [#17126](https://github.com/kubernetes/kubernetes/pull/17126). -* Resubmit the updated sitemaps file to [Google - webmasters](https://www.google.com/webmasters/tools/sitemap-list?siteUrl=http://kubernetes.io/) for google to index the new links. -* Update [_layouts/docwithnav.html] (https://github.com/kubernetes/kubernetes/blob/gh-pages/_layouts/docwithnav.html) - to include [_includes/archivedocnotice.html](https://github.com/kubernetes/kubernetes/blob/gh-pages/_includes/archivedocnotice.html) - for `vX.Y-1` docs which need to be archived. -* Ping @thockin to update docs.k8s.io to redirect to `http://kubernetes.io/vX.Y/`. [#18788](https://github.com/kubernetes/kubernetes/issues/18788). - -http://kubernetes.io/docs/ should now be redirecting to `http://kubernetes.io/vX.Y/`. - -# Updating docs in an existing collection - -The high level steps to update docs in an existing collection are: - -1. Update docs on `HEAD` (master branch) -2. Cherryick the change in relevant release branch. -3. Update docs on `gh-pages`. - -## Updating docs on HEAD - -[Development guide](development.md) provides general instructions on how to contribute to kubernetes github repo. -[Docs how to guide](how-to-doc.md) provides conventions to follow while writing docs. - -## Updating docs in release branch - -Once docs have been updated in the master branch, the changes need to be -cherrypicked in the latest release branch. -[Cherrypick guide](cherry-picks.md) has more details on how to cherrypick your change. - -## Updating docs in gh-pages branch - -Once release branch has all the relevant changes, we can pull in the latest docs -in `gh-pages` branch. -Run the following 2 commands in `gh-pages` branch to update docs for release `X.Y`: - -``` -_tools/import_docs vX.Y _vX.Y release-X.Y release-X.Y -``` - -For ex: to pull in docs for release 1.1, run: - -``` -_tools/import_docs v1.1 _v1.1 release-1.1 release-1.1 -``` - -Apart from copying over the docs, `_tools/release_docs` also does some post processing -(like updating the links to docs to point to http://kubernetes.io/docs/ instead of pointing to github repo). -Note that we always pull in the docs from release branch and not from master (pulling docs -from master requires some extra processing like versionizing the links and removing unversioned warnings). - -We delete all existing docs before pulling in new ones to ensure that deleted -docs go away. - -If the change added or deleted a doc, then update the corresponding `_includes/nav_vX.Y.html` file as well. +This document relates to the release process and can be found [here](https://git.k8s.io/sig-release/release-team/role-handbooks/documentation-guides/update-release-docs-new.md). +*This file is a redirect stub. It should be deleted within 3 months from the current date, or by the release date of k8s v1.12, whichever comes sooner.* diff --git a/contributors/devel/updating-docs-for-feature-changes.md b/contributors/devel/updating-docs-for-feature-changes.md index 1171d3978..02568fc8c 100644 --- a/contributors/devel/updating-docs-for-feature-changes.md +++ b/contributors/devel/updating-docs-for-feature-changes.md @@ -1,72 +1,3 @@ -# How to update docs for new kubernetes features - -This document describes things to consider when updating Kubernetes docs for new features or changes to existing features (including removing features). - -## Who should read this doc? - -Anyone making user facing changes to kubernetes. This is especially important for Api changes or anything impacting the getting started experience. - -## What docs changes are needed when adding or updating a feature in kubernetes? - -### When making Api changes - -*e.g. adding Deployments* -* Always make sure docs for downstream effects are updated *(StatefulSet -> PVC, Deployment -> ReplicationController)* -* Add or update the corresponding *[Glossary](http://kubernetes.io/docs/reference/)* item -* Verify the guides / walkthroughs do not require any changes: - * **If your change will be recommended over the approaches shown in these guides, then they must be updated to reflect your change** - * [Hello Node](http://kubernetes.io/docs/hellonode/) - * [K8s101](http://kubernetes.io/docs/user-guide/walkthrough/) - * [K8S201](http://kubernetes.io/docs/user-guide/walkthrough/k8s201/) - * [Guest-book](https://github.com/kubernetes/kubernetes/tree/release-1.2/examples/guestbook) - * [Thorough-walkthrough](http://kubernetes.io/docs/user-guide/) -* Verify the [landing page examples](http://kubernetes.io/docs/samples/) do not require any changes (those under "Recently updated samples") - * **If your change will be recommended over the approaches shown in the "Updated" examples, then they must be updated to reflect your change** - * If you are aware that your change will be recommended over the approaches shown in non-"Updated" examples, create an Issue -* Verify the collection of docs under the "Guides" section do not require updates (may need to use grep for this until are docs are more organized) - -### When making Tools changes - -*e.g. updating kube-dash or kubectl* -* If changing kubectl, verify the guides / walkthroughs do not require any changes: - * **If your change will be recommended over the approaches shown in these guides, then they must be updated to reflect your change** - * [Hello Node](http://kubernetes.io/docs/hellonode/) - * [K8s101](http://kubernetes.io/docs/user-guide/walkthrough/) - * [K8S201](http://kubernetes.io/docs/user-guide/walkthrough/k8s201/) - * [Guest-book](https://github.com/kubernetes/kubernetes/tree/release-1.2/examples/guestbook) - * [Thorough-walkthrough](http://kubernetes.io/docs/user-guide/) -* If updating an existing tool - * Search for any docs about the tool and update them -* If adding a new tool for end users - * Add a new page under [Guides](http://kubernetes.io/docs/) -* **If removing a tool (kube-ui), make sure documentation that references it is updated appropriately!** - -### When making cluster setup changes - -*e.g. adding Multi-AZ support* -* Update the relevant [Administering Clusters](http://kubernetes.io/docs/) pages - -### When making Kubernetes binary changes - -*e.g. adding a flag, changing Pod GC behavior, etc* -* Add or update a page under [Configuring Kubernetes](http://kubernetes.io/docs/) - -## Where do the docs live? - -1. Most external user facing docs live in the [kubernetes/docs](https://github.com/kubernetes/kubernetes.github.io) repo - * Also see the *[general instructions](http://kubernetes.io/editdocs/)* for making changes to the docs website -2. Internal design and development docs live in the [kubernetes/kubernetes](https://github.com/kubernetes/kubernetes) repo - -## Who should help review docs changes? - -* cc *@kubernetes/docs* -* Changes to [kubernetes/docs](https://github.com/kubernetes/kubernetes.github.io) repo must have both a Technical Review and a Docs Review - -## Tips for writing new docs - -* Try to keep new docs small and focused -* Document pre-requisites (if they exist) -* Document what concepts will be covered in the document -* Include screen shots or pictures in documents for GUIs -* *TODO once we have a standard widget set we are happy with* - include diagrams to help describe complex ideas (not required yet) +This document relates to the release process and can be found [here](https://git.k8s.io/sig-release/release-team/role-handbooks/documentation-guides/updating-docs-for-feature-changes.md). +*This file is a redirect stub. It should be deleted within 3 months from the current date, or by the release date of k8s v1.12, whichever comes sooner.* diff --git a/contributors/devel/vagrant.md b/contributors/devel/vagrant.md index 98d150ac9..221a3f7ae 100644 --- a/contributors/devel/vagrant.md +++ b/contributors/devel/vagrant.md @@ -2,8 +2,12 @@ Running Kubernetes with Vagrant is an easy way to run/test/develop on your local machine in an environment using the same setup procedures when running on -GCE or AWS cloud providers. This provider is not tested on a per PR basis, if -you experience bugs when testing from HEAD, please open an issue. +GCE or AWS cloud providers. + +Note : Support for vagrant has been removed in 1.10. Check +[#58118](https://github.com/kubernetes/kubernetes/pull/58118) and +[#64561](https://github.com/kubernetes/kubernetes/issues/64561#issuecomment-394366611). +You might run into issues with kubernetes versions >= 1.10 ### Prerequisites diff --git a/contributors/devel/writing-a-getting-started-guide.md b/contributors/devel/writing-a-getting-started-guide.md index a879e27de..0012da986 100644 --- a/contributors/devel/writing-a-getting-started-guide.md +++ b/contributors/devel/writing-a-getting-started-guide.md @@ -11,7 +11,7 @@ A guide refers to scripts, Configuration Management files, and/or binary assets the combination of all these things needed to run on a particular type of infrastructure a **distro**. -[The Matrix](../../docs/getting-started-guides/README.md) lists the distros. If there is already a guide +[The Matrix](https://kubernetes.io/docs/setup/pick-right-solution/#table-of-solutions) lists the distros. If there is already a guide which is similar to the one you have planned, consider improving that one. @@ -32,7 +32,7 @@ These guidelines say *what* to do. See the Rationale section for *why*. search for uses of flags by guides. - We may ask that you host binary assets or large amounts of code in our `contrib` directory or on your own repo. - - Add or update a row in [The Matrix](../../docs/getting-started-guides/README.md). + - Add or update a row in [The Matrix](https://kubernetes.io/docs/setup/pick-right-solution/#table-of-solutions). - State the binary version of Kubernetes that you tested clearly in your Guide doc. - Setup a cluster and run the [conformance tests](e2e-tests.md#conformance-tests) against it, and report the results in your PR. diff --git a/contributors/devel/writing-good-e2e-tests.md b/contributors/devel/writing-good-e2e-tests.md index 0658aad2b..836479c2e 100644 --- a/contributors/devel/writing-good-e2e-tests.md +++ b/contributors/devel/writing-good-e2e-tests.md @@ -10,7 +10,7 @@ designing, writing and debugging your end-to-end tests. In particular, "flaky" tests, which pass most of the time but fail intermittently for difficult-to-diagnose reasons are extremely costly in terms of blurring our regression signals and slowing down our -automated merge queue. Up-front time and effort designing your test +automated merge velocity. Up-front time and effort designing your test to be reliable is very well spent. Bear in mind that we have hundreds of tests, each running in dozens of different environments, and if any test in any test environment fails, we have to assume that we @@ -26,7 +26,7 @@ time, and delayed merges. #### Debuggability #### If your test fails, it should provide as detailed as possible reasons -for the failure in it's output. "Timeout" is not a useful error +for the failure in its output. "Timeout" is not a useful error message. "Timed out after 60 seconds waiting for pod xxx to enter running state, still in pending state" is much more useful to someone trying to figure out why your test failed and what to do about it. @@ -61,11 +61,11 @@ making the assumption that your test can run a pod on every node in a cluster is not a safe assumption, as some other tests, running at the same time as yours, might have saturated one or more nodes in the cluster. Similarly, running a pod in the system namespace, and -assuming that that will increase the count of pods in the system +assuming that will increase the count of pods in the system namespace by one is not safe, as some other test might be creating or deleting pods in the system namespace at the same time as your test. If you do legitimately need to write a test like that, make sure to -label it ["\[Serial\]"](e2e-tests.md#kinds_of_tests) so that it's easy +label it ["\[Serial\]"](e2e-tests.md#kinds-of-tests) so that it's easy to identify, and not run in parallel with any other tests. 1. You should avoid doing things to the cluster that make it difficult for other tests to reliably do what they're trying to do, at the same @@ -74,7 +74,7 @@ or upgrading cluster software as part of your test is likely to violate the assumptions that other tests might have made about a reasonably stable cluster environment. If you need to write such tests, please label them as -["\[Disruptive\]"](e2e-tests.md#kinds_of_tests) so that it's easy to +["\[Disruptive\]"](e2e-tests.md#kinds-of-tests) so that it's easy to identify them, and not run them in parallel with other tests. 1. You should avoid making assumptions about the Kubernetes API that are not part of the API specification, as your tests will break as @@ -101,7 +101,7 @@ usually takes 10 seconds"). If you do have a truly legitimate reason for waiting longer than that, or writing a test which takes longer than 2 minutes to run, comment very clearly in the code why this is necessary, and label the test as -["\[Slow\]"](e2e-tests.md#kinds_of_tests), so that it's easy to +["\[Slow\]"](e2e-tests.md#kinds-of-tests), so that it's easy to identify and avoid in test runs that are required to complete timeously (for example those that are run against every code submission before it is allowed to be merged). @@ -139,7 +139,7 @@ retry mechanisms provided in the libraries detailed below. Obviously most of the above goals apply to many tests, not just yours. So we've developed a set of reusable test infrastructure, libraries -and best practises to help you to do the right thing, or at least do +and best practices to help you to do the right thing, or at least do the same thing as other tests, so that if that turns out to be the wrong thing, it can be fixed in one place, not hundreds, to be the right thing. @@ -186,7 +186,7 @@ Here are a few pointers: you write or refactor a test, read the docs and make sure that you understand how it works. In particular be aware that every test is uniquely identified and described (e.g. in test reports) by the - concatenation of it's `Describe` clause and nested `It` clauses. + concatenation of its `Describe` clause and nested `It` clauses. So for example `Describe("Pods",...).... It(""should be scheduled with cpu and memory limits")` produces a sane test identifier and descriptor `Pods should be scheduled with cpu and memory limits`, diff --git a/contributors/guide/OWNERS b/contributors/guide/OWNERS index 7fc80ef9c..a9abb261f 100644 --- a/contributors/guide/OWNERS +++ b/contributors/guide/OWNERS @@ -3,6 +3,8 @@ reviewers: - guineveresaenger - idvoretskyi - tpepper + - kbarnard10 + - justaugustus approvers: - castrojo - parispittman diff --git a/contributors/guide/README.md b/contributors/guide/README.md index 9dc7bdf81..20c75be49 100644 --- a/contributors/guide/README.md +++ b/contributors/guide/README.md @@ -1,18 +1,16 @@ ---- -title: Kubernetes Contributor Guide ---- - # Kubernetes Contributor Guide -## Disclaimer - -Hello! This is the starting point for our brand new contributor guide, currently underway as per [issue#6102](https://github.com/kubernetes/website/issues/6102) and is in need of help. -Please be patient, or fix a section below that needs improvement, and submit a pull request! Feel free to browse the [open issues](https://github.com/kubernetes/community/issues?q=is%3Aissue+is%3Aopen+label%3Aarea%2Fcontributor-guide) and file new ones, all feedback welcome! + +This document is the single source of truth for how to contribute to the code base. +Feel free to browse the [open issues](https://github.com/kubernetes/community/issues?q=is%3Aissue+is%3Aopen+label%3Aarea%2Fcontributor-guide) and file new ones, all feedback welcome! # Welcome -Welcome to Kubernetes! This document is the single source of truth for how to contribute to the code base. Please leave comments / suggestions if you find something is missing or incorrect. +Welcome to Kubernetes! - [Before you get started](#before-you-get-started) - [Sign the CLA](#sign-the-cla) @@ -53,44 +51,72 @@ Please make sure to read and observe our [Code of Conduct](https://github.com/cn ## Setting up your development environment -If you haven’t set up your environment, please find resources [here](/contributors/devel). +If you haven’t set up your environment, check the [developer resources](/contributors/devel). ## Community Expectations and Roles -Kubernetes is a community project. Consequently, it is wholly dependent on its community to provide a productive, friendly and collaborative environment. +Kubernetes is a community project. +Consequently, it is wholly dependent on its community to provide a productive, friendly and collaborative environment. -- Read and review the [Community Expectations](community-expectations.md) for an understanding of code and review expectations. +- Read and review the [Community Expectations](community-expectations.md) for an understanding of code and review expectations. - See [Community Membership](/community-membership.md) for a list the various responsibilities of contributor roles. You are encouraged to move up this contributor ladder as you gain experience. # Your First Contribution -Have you ever wanted to contribute to the coolest cloud technology? We will help you understand the organization of the Kubernetes project and direct you to the best places to get started. You'll be able to pick up issues, write code to fix them, and get your work reviewed and merged. +Have you ever wanted to contribute to the coolest cloud technology? +We will help you understand the organization of the Kubernetes project and direct you to the best places to get started. +You'll be able to pick up issues, write code to fix them, and get your work reviewed and merged. -Please be aware that due to the large number of issues our triage team deals with, we cannot offer technical support in GitHub issues. If you have questions about the development process, feel free to jump into our [Slack Channel](http://slack.k8s.io/) or join our [mailing list](https://groups.google.com/forum/#!forum/kubernetes-dev). You can also ask questions on [ServerFault](https://serverfault.com/questions/tagged/kubernetes) or [Stack Overflow](https://stackoverflow.com/questions/tagged/kubernetes). The Kubernetes team scans Stack Overflow on a regular basis and will try to ensure your questions don't go unanswered. +Please be aware that due to the large number of issues our triage team deals with, we cannot offer technical support in GitHub issues. +If you have questions about the development process, feel free to jump into our [Slack Channel](http://slack.k8s.io/) or join our [mailing list](https://groups.google.com/forum/#!forum/kubernetes-dev). +You can also ask questions on [ServerFault](https://serverfault.com/questions/tagged/kubernetes) or [Stack Overflow](https://stackoverflow.com/questions/tagged/kubernetes). +The Kubernetes team scans Stack Overflow on a regular basis and will try to ensure your questions don't go unanswered. ## Find something to work on -Help is always welcome! For example, documentation (like the text you are reading now) can always use improvement. There's always code that can be clarified and variables or functions that can be renamed or commented. There's always a need for more test coverage. -You get the idea - if you ever see something you think should be fixed, you should own it. Here is how you get started. +Help is always welcome! For example, documentation (like the text you are reading now) can always use improvement. +There's always code that can be clarified and variables or functions that can be renamed or commented. +There's always a need for more test coverage. +You get the idea - if you ever see something you think should be fixed, you should own it. +Here is how you get started. +If you have no idea what to start on, you can browse the [Contributor Role Board](https://discuss.kubernetes.io/c/contributors/role-board) to see who is looking for help. ### Find a good first topic -There are multiple repositories within the Kubernetes community and a full list of repositories can be found [here](https://github.com/kubernetes/). -Each repository in the Kubernetes organization has beginner-friendly issues that provide a good first issue. For example, [kubernetes/kubernetes](https://git.k8s.io/kubernetes) has [help wanted issues](https://go.k8s.io/help-wanted) that should not need deep knowledge of the system. +There are [multiple repositories](https://github.com/kubernetes/) within the Kubernetes organization. +Each repository has beginner-friendly issues that provide a good first issue. +For example, [kubernetes/kubernetes](https://git.k8s.io/kubernetes) has [help wanted](https://go.k8s.io/help-wanted) and [good first issue](https://go.k8s.io/good-first-issue) labels for issues that should not need deep knowledge of the system. +The `good first issue` label indicates that members have committed to providing [extra assistance](/contributors/devel/help-wanted.md) for new contributors. + +Please note that while several of the repositories in the Kubernetes community have `good first issue` labels already, they are still being applied throughout the community. + Another good strategy is to find a documentation improvement, such as a missing/broken link, which will give you exposure to the code submission/review process without the added complication of technical depth. Please see [Contributing](#contributing) below for the workflow. +#### Issue Assignment in Github + +Often, new contributors ask to be assigned an issue they are willing to take on. Unfortunately, due to GitHub limitations we can only assign issues to [org members](#community) or repo collaborators. +Instead, please state in a comment that you intend to work on this issue and it will be assumed to be yours. + ### Learn about SIGs -#### Sig structure +#### SIG structure -You may have noticed that some repositories in the Kubernetes Organization are owned by Special Interest Groups, or SIGs. We organize the Kubernetes community into SIGs in order to improve our workflow and more easily manage what is a very large community project. The developers within each SIG have autonomy and ownership over that SIG's part of Kubernetes. +You may have noticed that some repositories in the Kubernetes Organization are owned by Special Interest Groups, or SIGs. +We organize the community into SIGs in order to improve our workflow and more easily manage what is a very large community project. +The developers within each SIG have autonomy and ownership over that SIG's part of Kubernetes. -Some SIGs also have their own `CONTRIBUTING.md` files, which may contain extra information or guidelines in addition to these general ones. These are located in the SIG-specific community directories. For example: the contributor's guide for SIG CLI is located in the *kubernetes/community* repo, as [`/sig-cli/CONTRIBUTING.md`](/sig-cli/CONTRIBUTING.md). +Some SIGs also have their own `CONTRIBUTING.md` files, which may contain extra information or guidelines in addition to these general ones. +These are located in the SIG-specific community directories. +For example: the contributor's guide for SIG CLI is located in the *kubernetes/community* repo, as [`/sig-cli/CONTRIBUTING.md`](/sig-cli/CONTRIBUTING.md). -Like everything else in Kubernetes, a SIG is an open, community, effort. Anybody is welcome to jump into a SIG and begin fixing issues, critiquing design proposals and reviewing code. SIGs have regular [video meetings](https://kubernetes.io/community/) which everyone is welcome to. Each SIG has a kubernetes slack channel that you can join as well. +A SIG is an open, community effort. +Anybody is welcome to jump into a SIG and begin fixing issues, critiquing design proposals and reviewing code. +SIGs have regular [video meetings](https://kubernetes.io/community/) which everyone is welcome to. +Each SIG has a slack channel that you can join as well. There is an entire SIG ([sig-contributor-experience](/sig-contributor-experience/README.md)) devoted to improving your experience as a contributor. -Contributing to Kubernetes should be easy. If you find a rough edge, let us know! Better yet, help us fix it by joining the SIG; just +Contributing to Kubernetes should be easy. +If you find a rough edge, let us know! Better yet, help us fix it by joining the SIG; just show up to one of the [bi-weekly meetings](https://docs.google.com/document/d/1qf-02B7EOrItQgwXFxgqZ5qjW0mtfu5qkYIF1Hl4ZLI/edit). #### Find a SIG that is related to your contribution @@ -99,19 +125,25 @@ Finding the appropriate SIG for your contribution and adding a SIG label will he For Pull Requests, the automatically assigned reviewer will add a SIG label if you haven't done so. See [Open A Pull Request](#open-a-pull-request) below. -For Issues, we are still working on a more automated workflow. Since SIGs do not directly map onto Kubernetes subrepositories, it may be difficult to find which SIG your contribution belongs in. Here is the [list of SIGs](/sig-list.md). Determine which is most likely related to your contribution. +For Issues, we are still working on a more automated workflow. +Since SIGs do not directly map onto Kubernetes subrepositories, it may be difficult to find which SIG your contribution belongs in. +Here is the [list of SIGs](/sig-list.md) so that you can determine which is most likely related to your contribution. *Example:* if you are filing a CNI issue (that's [Container Networking Interface](https://github.com/containernetworking/cni)), you should choose the [Network SIG](http://git.k8s.io/community/sig-network). Add the SIG label in a comment like so: ``` /sig network ``` -Follow the link in the SIG name column to reach each SIGs README. Most SIGs will have a set of GitHub Teams with tags that can be mentioned in a comment on issues and pull requests for higher visibility. If you are not sure about the correct SIG for an issue, you can try SIG-contributor-experience [here](/sig-contributor-experience#github-teams), or [ask in Slack](http://slack.k8s.io/). +Follow the link in the SIG name column to reach each SIGs README. +Most SIGs will have a set of GitHub Teams with tags that can be mentioned in a comment on issues and pull requests for higher visibility. +If you are not sure about the correct SIG for an issue, you can try SIG-contributor-experience [here](/sig-contributor-experience#github-teams), or [ask in Slack](http://slack.k8s.io/). ### File an Issue -Not ready to contribute code, but see something that needs work? While the community encourages everyone to contribute code, it is also appreciated when someone reports an issue (aka problem). Issues should be filed under the appropriate Kubernetes subrepository. -Check the [issue triage guide](./issue-triage.md) for more information. +Not ready to contribute code, but see something that needs work? +While the community encourages everyone to contribute code, it is also appreciated when someone reports an issue (aka problem). +Issues should be filed under the appropriate Kubernetes subrepository. +Check the [issue triage guide](./issue-triage.md) for more information. *Example:* a documentation issue should be opened to [kubernetes/website](https://github.com/kubernetes/website/issues). @@ -119,11 +151,15 @@ Make sure to adhere to the prompted submission guidelines while opening an issue # Contributing -Kubernetes is open source, but many of the people working on it do so as their day job. In order to avoid forcing people to be "at work" effectively 24/7, we want to establish some semi-formal protocols around development. Hopefully, these rules make things go more smoothly. If you find that this is not the case, please complain loudly. +Kubernetes is open source, but many of the people working on it do so as their day job. +In order to avoid forcing people to be "at work" effectively 24/7, we want to establish some semi-formal protocols around development. +Hopefully, these rules make things go more smoothly. +If you find that this is not the case, please complain loudly. -As a potential contributor, your changes and ideas are welcome at any hour of the day or night, weekdays, weekends, and holidays. Please do not ever hesitate to ask a question or send a pull request. +As a potential contributor, your changes and ideas are welcome at any hour of the day or night, weekdays, weekends, and holidays. +Please do not ever hesitate to ask a question or send a pull request. -Our community guiding principles on how to create great code as a big group are found [here](/contributors/devel/collab.md). +Check out our [community guiding principles](/contributors/devel/collab.md) on how to create great code as a big group. Beginner focused information can be found below in [Open a Pull Request](#open-a-pull-request) and [Code Review](#code-review). @@ -133,32 +169,36 @@ For quick reference on contributor resources, we have a handy [contributor cheat It is best to contact your [SIG](#learn-about-sigs) for issues related to the SIG's topic. Your SIG will be able to help you much more quickly than a general question would. -For general questions and troubleshooting, use the [kubernetes standard lines of communication](/communication.md) and work through the [kubernetes troubleshooting guide](https://kubernetes.io/docs/tasks/debug-application-cluster/troubleshooting/). +For general questions and troubleshooting, use the [standard lines of communication](/communication.md) and work through the [troubleshooting guide](https://kubernetes.io/docs/tasks/debug-application-cluster/troubleshooting/). ## GitHub workflow -To check out code to work on, please refer to [this guide](./github-workflow.md). +To check out code to work on, please refer to [the GitHub Workflow Guide](./github-workflow.md). ## Open a Pull Request -Pull requests are often called simply "PR". Kubernetes generally follows the standard [github pull request](https://help.github.com/articles/about-pull-requests/) process, but there is a layer of additional kubernetes specific (and sometimes SIG specific) differences: +Pull requests are often called simply "PR". +Kubernetes generally follows the standard [github pull request](https://help.github.com/articles/about-pull-requests/) process, but there is a layer of additional kubernetes specific (and sometimes SIG specific) differences: - [Kubernetes-specific github workflow](pull-requests.md#the-testing-and-merge-workflow). The first difference you'll see is that a bot will begin applying structured labels to your PR. -The bot may also make some helpful suggestions for commands to run in your PR to facilitate review. These `/command` options can be entered in comments to trigger auto-labeling and notifications. The command reference is [here](https://go.k8s.io/bot-commands). +The bot may also make some helpful suggestions for commands to run in your PR to facilitate review. +These `/command` options can be entered in comments to trigger auto-labeling and notifications. +Refer to its [command reference documentation](https://go.k8s.io/bot-commands). Common new contributor PR issues are: * not having correctly signed the CLA ahead of your first PR (see [Sign the CLA](#sign-the-cla) section) -* finding the right SIG or reviewer(s) for the PR (see [Code Review](#code-review) section) and following any SIG specific contributing guidelines +* finding the right SIG or reviewer(s) for the PR (see [Code Review](#code-review) section) and following any SIG or repository specific contributing guidelines (see [Learn about SIGs](#learn-about-sigs) section) * dealing with test cases which fail on your PR, unrelated to the changes you introduce (see [Test Flakes](http://velodrome.k8s.io/dashboard/db/bigquery-metrics?orgId=1)) * Not following [scalability good practices](scalability-good-practices.md) ## Code Review -For a brief description of the importance of code review, please read [On Code Review](/contributors/guide/community-expectations.md#code-review). There are two aspects of code review: giving and receiving. +For a brief description of the importance of code review, please read [On Code Review](/contributors/guide/community-expectations.md#code-review). +There are two aspects of code review: giving and receiving. To make it easier for your PR to receive reviews, consider the reviewers will need you to: @@ -167,7 +207,8 @@ To make it easier for your PR to receive reviews, consider the reviewers will ne * break large changes into a logical series of smaller patches which individually make easily understandable changes, and in aggregate solve a broader issue * label PRs with appropriate SIGs and reviewers: to do this read the messages the bot sends you to guide you through the PR process -Reviewers, the people giving the review, are highly encouraged to revisit the [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) and must go above and beyond to promote a collaborative, respectful Kubernetes community. When reviewing PRs from others [The Gentle Art of Patch Review](http://sage.thesharps.us/2014/09/01/the-gentle-art-of-patch-review/) suggests an iterative series of focuses which is designed to lead new contributors to positive collaboration without inundating them initially with nuances: +Reviewers, the people giving the review, are highly encouraged to revisit the [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) and must go above and beyond to promote a collaborative, respectful community. +When reviewing PRs from others [The Gentle Art of Patch Review](http://sage.thesharps.us/2014/09/01/the-gentle-art-of-patch-review/) suggests an iterative series of focuses which is designed to lead new contributors to positive collaboration without inundating them initially with nuances: * Is the idea behind the contribution sound? * Is the contribution architected correctly? @@ -175,24 +216,29 @@ Reviewers, the people giving the review, are highly encouraged to revisit the [C ## Testing -Testing is the responsibility of all contributors and is in part owned by all sigs, but is also coordinated by [sig-testing](/sig-testing). +Testing is the responsibility of all contributors and is in part owned by all SIGss, but is also coordinated by [sig-testing](/sig-testing). +Refer to the [Testing Guide](/contributors/devel/testing.md) for more information. -The main testing overview document is [here](/contributors/devel/testing.md). - -There are three types of test in kubernetes. The location of the test code varies with type, as does the specifics of the environment needed to successfully run the test: +There are multiple types of tests. +The location of the test code varies with type, as do the specifics of the environment needed to successfully run the test: * Unit: These confirm that a particular function behaves as intended. Golang includes a native ability for unit testing via the [testing](https://golang.org/pkg/testing/) package. Unit test source code can be found adjacent to the corresponding source code within a given package. For example: functions defined in [kubernetes/cmd/kubeadm/app/util/version.go](https://git.k8s.io/kubernetes/cmd/kubeadm/app/util/version.go) will have unit tests in [kubernetes/cmd/kubeadm/app/util/version_test.go](https://git.k8s.io/kubernetes/cmd/kubeadm/app/util/version_test.go). These are easily run locally by any developer on any OS. * Integration: These tests cover interactions of package components or interactions between kubernetes components and some other non-kubernetes system resource (eg: etcd). An example would be testing whether a piece of code can correctly store data to or retrieve data from etcd. Integration tests are stored in [kubernetes/test/integration/](https://git.k8s.io/kubernetes/test/integration). Running these can require the developer set up additional functionality on their development system. -* End-to-end ("e2e"): These are broad tests of overall kubernetes system behavior and coherence. These are more complicated as they require a functional kubernetes cluster built from the sources to be tested. A separate document [here](/contributors/devel/e2e-tests.md) details e2e testing and test cases themselves can be found in [kubernetes/test/e2e/](https://git.k8s.io/kubernetes/test/e2e). +* End-to-end ("e2e"): These are broad tests of overall system behavior and coherence. These are more complicated as they require a functional kubernetes cluster built from the sources to be tested. A separate [document detailing e2e testing](/contributors/devel/e2e-tests.md) and test cases themselves can be found in [kubernetes/test/e2e/](https://git.k8s.io/kubernetes/test/e2e). +* Conformance: These are a set of testcases, currently a subset of the integration/e2e tests, that the Architecture SIG has approved to define the core set of interoperable features that all Kubernetes deployments must support. For more information on Conformance tests please see the [Conformance Testing](/contributors/devel/conformance-tests.md) Document. -Continuous integration will run these tests either as pre-submits on PRs, post-submits against master/release branches, or both. The results appear on [testgrid](https://testgrid.k8s.io). +Continuous integration will run these tests either as pre-submits on PRs, post-submits against master/release branches, or both. +The results appear on [testgrid](https://testgrid.k8s.io). -sig-testing is responsible for that official infrastructure and CI. The associated automation is tracked in the [test-infra repo](https://git.k8s.io/test-infra). If you're looking to run e2e tests on your own infrastructure, [kubetest](https://git.k8s.io/test-infra/kubetest) is the mechanism. +sig-testing is responsible for that official infrastructure and CI. +The associated automation is tracked in the [test-infra repo](https://git.k8s.io/test-infra). +If you're looking to run e2e tests on your own infrastructure, [kubetest](https://git.k8s.io/test-infra/kubetest) is the mechanism. ## Security +- [Security Release Page](https://git.k8s.io/sig-release/security-release-process-documentation/security-release-process.md) - outlines the procedures for the handling of security issues. +- [Security and Disclosure Information](https://kubernetes.io/docs/reference/issues-security/security/) - check this page if you wish to report a security vulnerability. -* Please help write this section. ## Documentation @@ -200,30 +246,36 @@ sig-testing is responsible for that official infrastructure and CI. The associa ## Issues Management or Triage -Have you ever noticed the total number of [open issues](https://issues.k8s.io)? This number at any given time is typically high. Helping to manage or triage these open issues can be a great contribution to the Kubernetes project. This is also a great opportunity to learn about the various areas of the project. Refer to the [Kubernetes Issue Triage Guidelines](/contributors/devel/issues.md) for more information. +Have you ever noticed the total number of [open issues](https://issues.k8s.io)? +Helping to manage or triage these open issues can be a great contribution and a great opportunity to learn about the various areas of the project. Triaging is the word we use to describe the process of adding multiple types of descriptive labels to GitHub issues, in order to speed up routing issues to the right folks. +Refer to the [Issue Triage Guidelines](/contributors/guide/issue-triage.md) for more information. # Community -If you haven't noticed by now, we have a large, lively, and friendly open-source community. We depend on new people becoming members and regular code contributors, so we would like you to come join us. To find out more about our community structure, different levels of membership and code contributors, please [explore here](/community-membership.md). +If you haven't noticed by now, we have a large, lively, and friendly open-source community. +We depend on new people becoming members and regular code contributors, so we would like you to come join us! +The [Community Membership Document](/community-membership.md) covers membership processes and roles. ## Communication -- [General Information](/communication) +- [General Information](/communication) ## Events -Kubernetes is the main focus of CloudNativeCon/KubeCon, held twice per year in EMEA and in North America. Information about these and other community events is available on the CNCF [events](https://www.cncf.io/events/) pages. +Kubernetes participates in KubeCon + CloudNativeCon, held three times per year in China, Europe and in North America. +Information about these and other community events is available on the CNCF [events](https://www.cncf.io/events/) pages. ### Meetups -We follow the general [Cloud Native Computing Foundation guidelines](https://github.com/cncf/meetups) for Meetups. You may also contact Paris Pittman via direct message on Kubernetes Slack (@paris) or by email (parispittman@google.com) +We follow the general [Cloud Native Computing Foundation guidelines](https://github.com/cncf/meetups) for Meetups. +You may also contact Paris Pittman via direct message on Kubernetes Slack (@paris) or by email (parispittman@google.com) ## Mentorship Please learn about our mentoring initiatives [here](http://git.k8s.io/community/mentoring/README.md). - +Feel free to ask us anything during our [Meet Our Contributors](https://github.com/kubernetes/community/blob/master/mentoring/meet-our-contributors.md) to connect with us. # Advanced Topics This section includes things that need to be documented, but typical contributors do not need to interact with regularly. -- [OWNERS files](owners.md) - The Kubernetes organizations are managed with OWNERS files, which outline which parts of the code are owned by what groups. +- [OWNERS files](owners.md) - The Kubernetes organizations are managed with OWNERS files, which outline which parts of the code are owned by what groups. diff --git a/contributors/guide/bug-bounty.md b/contributors/guide/bug-bounty.md new file mode 100644 index 000000000..634dff1d5 --- /dev/null +++ b/contributors/guide/bug-bounty.md @@ -0,0 +1,79 @@ +# Kubernetes Bug Bounty Program + +This program is a **work in progress**. This tracks the currently proposed program, but the bug +bounty is not currently active. If you currently have a bug to submit, follow instructions at https://kubernetes.io/docs/reference/issues-security/security/ + +## Scope + +The scope of the Kubernetes project itself is not well defined, which makes defining a bug bounty +scope difficult. With that in mind, we've attempted to enumerate the features, configurations, and +components that clearly fall inside or outside of our scope. However, this leaves a lot of gray area +in between. For that, we ask you to use your best judgment, and welcome contributions to help +clarify the scope. + +### In Scope + +The following items are explicitly in-scope for the bug bounty program: + +**Cluster Attacks:** + +- Attacks against Beta & GA features, unless explicitly excluded below +- Privilege escalation due to bugs in RBAC, ABAC, pod security policies +- Authentication bugs in the in-tree authentication handlers
+ _Including: OIDC, x509 certificates, service accounts, webhook authenticator, bearer token, etc._ +- Privilege escalation through the kubelet APIs +- Remote code execution in kubelet, api server +- Unauthorized etcd access via the Kubernetes API +- Path traversal attacks in API, namespaces, etcd +- Info leak (e.g. workload names) from publicly accessible unauthenticated endpoints
+ _Excluding intentionally disclosed info, such as Kubernetes version & enabled APIs_ +- Reliable suppression of audit logs for privileged actions +- Unexpected editing, removal, or permission changes of files on the host filesystems from + Kubernetes components (e.g. kubelet) +- Persistent DoS from within a cluster by an unprivileged container or user. + +**Supply Chain:** _(excluding social engineering attacks against maintainers)_ + +- Unauthorized code commit to any Kubernetes org repository
+ _Including: `github.com/kubernetes{,-client,-csi,-incubator,-retired,-security,-sigs}/*`_ +- Unauthorized access to github.com/kubernetes-security +- Publishing of unauthorized artifacts +- Unauthorized modification of github data +- CI/CD Credential Leaks +- Execution inside the CI/CD infrastructure + +**Components:** + +- Attacks against a stable & supported Kubernetes release (most recent 3 releases) +- Community maintained stable cloud platform plugins
+ _Vulnerabilities in other cloud platform plugins should be reported through the associated provider_ +- In-tree (k8s.io/kubernetes) stable volume plugins + +### Out of Scope + +The following items are explicitly out-of scope for the bug bounty program. While we still welcome +vulnerability reports in these areas, they are not (currently) eligible to receive a bounty. + +- Alpha features & APIs +- Kubernetes running on Windows or other non-linux operating systems +- Non-Kubernetes binaries distributed as cluster addons
+ _Please report vulnerabilities in these components through the appropriate channel for the + upstream component_ +- Container escalations and escapes to the host, unless the attack path traverses a Kubernetes + process (e.g. kubelet). +- Linux privilege escalations
+ _Please report these through security@kernel.org_ +- Attacks against containers from the host they are running on +- Attacks relying on insecure configurations (subject to the [Product Security Team][]'s opinion), + such as clusters not utilizing mutual authentication or encryption between Kubernetes components. +- Attacks relying on or against deprecated components (e.g. gitrepo volumes) +- Vulnerabilities in etcd
+ _Please report these through [CoreOS's disclosure process][]_ +- Vulnerabilities in CoreDNS
+ _Please report these through [CoreDNS's disclosure process][]_ +- Vulnerabilities specific to a hosted Kubernetes setup
+ _Please report these through the associated provider_ + +[Product Security Team]: https://github.com/kubernetes/sig-release/blob/master/security-release-process-documentation/security-release-process.md#product-security-team-pst +[CoreOS's disclosure process]: https://coreos.com/security/disclosure/ +[CoreDNS's disclosure process]: https://github.com/coredns/coredns#security diff --git a/contributors/guide/coding-conventions.md b/contributors/guide/coding-conventions.md index 680080dad..63cc18ce2 100644 --- a/contributors/guide/coding-conventions.md +++ b/contributors/guide/coding-conventions.md @@ -16,7 +16,7 @@ Updated: 1/24/2018 - https://google.github.io/styleguide/shell.xml - Ensure that build, release, test, and cluster-management scripts run on -OS X +macOS - Go @@ -75,7 +75,7 @@ example, see [TestNamespaceAuthorization](https://git.k8s.io/kubernetes/test/int [end-to-end (test/e2e) tests](/contributors/devel/e2e-tests.md) - Including new kubectl commands and major features of existing commands - - Unit tests must pass on OS X and Windows platforms - if you use Linux + - Unit tests must pass on macOS and Windows platforms - if you use Linux specific features, your test case must either be skipped on windows or compiled out (skipped is better when running Linux specific commands, compiled out is required when your code does not compile on Windows). @@ -113,7 +113,7 @@ subdirectories). /docs/user-guide or /docs/admin, depending on whether it is a feature primarily intended for users that deploy applications or cluster administrators, respectively. Actual application examples belong in /examples. - - Examples should also illustrate [best practices for configuration and using the system](https://kubernetes.io/docs/user-guide/config-best-practices/) + - Examples should also illustrate [best practices for configuration and using the system](https://kubernetes.io/docs/concepts/configuration/overview/) - Third-party code diff --git a/contributors/guide/community-expectations.md b/contributors/guide/community-expectations.md index ccff6441a..32543fb0c 100644 --- a/contributors/guide/community-expectations.md +++ b/contributors/guide/community-expectations.md @@ -3,7 +3,7 @@ Kubernetes is a community project. Consequently, it is wholly dependent on its community to provide a productive, friendly and collaborative environment. -The first and foremost goal of the Kubernetes community to develop orchestration +The first and foremost goal of the Kubernetes community is to develop orchestration technology that radically simplifies the process of creating reliable distributed systems. However a second, equally important goal is the creation of a community that fosters easy, agile development of such orchestration diff --git a/contributors/guide/contributor-cheatsheet.md b/contributors/guide/contributor-cheatsheet.md index d3f9dac39..180a368f8 100644 --- a/contributors/guide/contributor-cheatsheet.md +++ b/contributors/guide/contributor-cheatsheet.md @@ -8,15 +8,21 @@ A list of common resources when contributing to Kubernetes. | [Community](https://github.com/kubernetes/community) | [PRs](https://github.com/kubernetes/community/pulls) | [Issues](https://github.com/kubernetes/community/issues) | | [Docs](https://github.com/kubernetes/website) | [PRs](https://github.com/kubernetes/website/pulls) | [Issues](https://github.com/kubernetes/website/issues) +## Getting Started + +- [Contributor Guide](https://github.com/kubernetes/community/blob/master/contributors/guide/README.md) + ## Workflow - [Gubernator Dashboard - k8s.reviews](https://k8s-gubernator.appspot.com/pr) -- [reviewable.kubernetes.io](https://reviewable.kubernetes.io/reviews#-) -- [Submit Queue](https://submit-queue.k8s.io) +- [Tide](https://prow.k8s.io/tide) - [Bot commands](https://go.k8s.io/bot-commands) -- [Release Buckets](http://gcsweb.k8s.io/gcs/kubernetes-release/) +- [GitHub labels](https://go.k8s.io/github-labels) +- [Release Buckets](https://gcsweb.k8s.io/gcs/kubernetes-release/) - Developer Guide - - [Cherry Picking Guide](/contributors/devel/cherry-picks.md) - [Queue](http://cherrypick.k8s.io/#/queue) + - [Cherry Picking Guide](/contributors/devel/cherry-picks.md) +- [Kubernetes Code Search](https://cs.k8s.io/), maintained by [@dims](https://github.com/dims) + ## SIGs and Working Groups @@ -26,7 +32,7 @@ A list of common resources when contributing to Kubernetes. - [Calendar](https://calendar.google.com/calendar/embed?src=cgnt364vd8s86hr2phapfjc6uk%40group.calendar.google.com) - [kubernetes-dev](https://groups.google.com/forum/#!forum/kubernetes-dev) -- [kubernetes-users](https://groups.google.com/forum/#!forum/kubernetes-users) +- [Kubernetes Forums](https://discuss.kubernetes.io) - [Slack channels](http://slack.k8s.io/) - [StackOverflow](https://stackoverflow.com/questions/tagged/kubernetes) - [YouTube Channel](https://www.youtube.com/c/KubernetesCommunity/) @@ -34,8 +40,19 @@ A list of common resources when contributing to Kubernetes. ## Tests - [Current Test Status](https://prow.k8s.io/) -- [Aggregated Failures](https://storage.googleapis.com/k8s-gubernator/triage/index.html) -- [Test Grid](https://k8s-testgrid.appspot.com/) +- [Aggregated Failures](https://go.k8s.io/triage) +- [Test Grid](https://testgrid.k8s.io) +- [Test Health](https://go.k8s.io/test-health) +- [Test History](https://go.k8s.io/test-history) + +## Email Aliases + +- community@kubernetes.io - Mail someone on the community team (SIG Contributor Experience) about a community issue. +- social@cncf.io - Contact the CNCF social team; blog, twitter account, and other social properties. +- steering@kubernetes.io - Mail the steering committee. Public address with public archive. +- steering-private@kubernetes.io - Mail the steering committee privately, for sensitive items. +- helpdesk@rt.linuxfoundation.org - Mail the LF helpdesk for help with CLA issues. +- conduct@kubernetes.io - Contact the Code of Conduct committee, private mailing list. ## Other diff --git a/contributors/guide/git_workflow.png b/contributors/guide/git_workflow.png index 80a66248f..36b41caec 100644 Binary files a/contributors/guide/git_workflow.png and b/contributors/guide/git_workflow.png differ diff --git a/contributors/guide/github-workflow.md b/contributors/guide/github-workflow.md index a14292585..221a79219 100644 --- a/contributors/guide/github-workflow.md +++ b/contributors/guide/github-workflow.md @@ -74,6 +74,22 @@ git checkout -b myfeature Then edit code on the `myfeature` branch. #### Build +The following section is a quick start on how to build Kubernetes locally, for more detailed information you can see [kubernetes/build](https://git.k8s.io/kubernetes/build/README.md). +The best way to validate your current setup is to build a small part of Kubernetes. This way you can address issues without waiting for the full build to complete. To build a specific part of Kubernetes use the `WHAT` environment variable to let the build scripts know you want to build only a certain package/executable. + +```sh +make WHAT=cmd/{$package_you_want} +``` + +*Note:* This applies to all top level folders under kubernetes/cmd. + +So for the cli, you can run: + +```sh +make WHAT=cmd/kubectl +``` + +If everything checks out you will have an executable in the `_output/bin` directory to play around with. *Note:* If you are using `CDPATH`, you must either start it with a leading colon, or unset the variable. The make rules and scripts to build require the current directory to come first on the CD search path in order to properly navigate between directories. @@ -235,3 +251,47 @@ git rebase -i upstream/master For mass automated fixups (e.g. automated doc formatting), use one or more commits for the changes to tooling and a final commit to apply the fixup en masse. This makes reviews easier. + +### Reverting a commit + +In case you wish to revert a commit, use the following instructions. + +_If you have upstream write access_, please refrain from using the +`Revert` button in the GitHub UI for creating the PR, because GitHub +will create the PR branch inside the main repository rather than inside your fork. + +1. Create a branch and sync it with upstream. + +```sh +# create a branch +git checkout -b myrevert + +# sync the branch with upstream +git fetch upstream +git rebase upstream/master +``` + +2. If the commit you wish to revert is a: + +- merge commit: + +```sh +# SHA is the hash of the merge commit you wish to revert +git revert -m 1 SHA +``` + +- single commit: + +```sh +# SHA is the hash of the single commit you wish to revert +git revert SHA +``` + +3. This will create a new commit reverting the changes. +Push this new commit to your remote. + +```sh +git push ${your_remote_name} myrevert +``` + +4. [Create a Pull Request](#7-create-a-pull-request) using this branch. diff --git a/contributors/guide/issue-triage.md b/contributors/guide/issue-triage.md index 140762f8e..a25b75ca3 100644 --- a/contributors/guide/issue-triage.md +++ b/contributors/guide/issue-triage.md @@ -14,7 +14,7 @@ and in that case simply add a comment in the issue with your findings. Following are few predetermined searches on issues for convenience: * [Longest untriaged issues](https://github.com/kubernetes/kubernetes/issues?q=is%3Aissue+is%3Aopen+sort%3Acreated-asc) (sorted by age) -* [Needs to be assigned to a SIG](https://github.com/kubernetes/kubernetes/issues?q=is%3Aissue+is%3Aopen+sort%3Acreated-asc) +* [Needs to be assigned to a SIG](https://github.com/kubernetes/kubernetes/issues?q=is%3Aissue+is%3Aopen+label%3Aneeds-sig) * [Newest incoming issues](https://github.com/kubernetes/kubernetes/issues?q=is%3Aopen+is%3Aissue) * [Busy untriaged issues](https://github.com/kubernetes/kubernetes/issues?q=is%3Aissue+is%3Aopen+sort%3Acomments-desc) (sorted by number of comments) * [Issues that need more attention](https://github.com/kubernetes/kubernetes/issues?q=is%3Aissue+is%3Aopen+sort%3Acomments-asc) @@ -33,37 +33,37 @@ for other github repositories related to Kubernetes is TBD. Most people can leave comments and open issues. They don't have the ability to set labels, change milestones and close other peoples issues. For that we use a bot to manage labelling and triaging. The bot has a set of -[commands and permissions](https://git.k8s.io/test-infra/commands.md) +[commands and permissions](https://go.k8s.io/bot-commands) and this document will cover the basic ones. ## Determine if it's a support request Sometimes users ask for support requests in issues; these are usually requests -from people who need help configuring some aspect of Kubernetes. These should be -directed to our support structures (see below) and then closed. Also, if the issue -is clearly abandoned or in the wrong place, it should be closed. Keep in mind that -only issue reporter, assignees and component organization members can close issue. -If you do not have such privilege, just comment your findings. Otherwise, first -`/assign` issue to yourself and then `/close`. +from people who need help configuring some aspect of Kubernetes. These issues +should be labeled with `triage/support`, directed to our support structures +(see below) and then closed. Also, if the issue is clearly abandoned or in the +wrong place, it should be closed. Keep in mind that only issue reporter, +assignees and component organization members can close issue. If you do not +have such privilege, just comment your findings. Otherwise, first `/assign` +issue to yourself and then `/close`. ### Support Structures Support requests should be directed to the following: -* [User documentation](https://kubernetes.io/docs/) and +* [User documentation](https://kubernetes.io/docs/home/) and [troubleshooting guide](https://kubernetes.io/docs/tasks/debug-application-cluster/troubleshooting/) * [Stack Overflow](http://stackoverflow.com/questions/tagged/kubernetes) and [ServerFault](http://serverfault.com/questions/tagged/kubernetes) * [Slack](https://kubernetes.slack.com) ([registration](http://slack.k8s.io)) - * Check out the [Slack Archive](http://kubernetes.slackarchive.io/) first. -* [Email/Groups](https://groups.google.com/forum/#!forum/kubernetes-users) +* [Discussion forums](https://discuss.kubernetes.io) ### User support response example -If you see support questions on kubernetes-dev@googlegroups.com or issues asking for +If you see support questions on kubernetes-dev@googlegroups.com or issues asking for support try to redirect them to Stack Overflow. Example response: ```code @@ -81,10 +81,10 @@ large volume of support issues on github is making it difficult for us to use issues to identify real bugs. Members of the Kubernetes community use Stack Overflow to field support -requests. Before posting a new question, please search Stack Overflow for answers +requests. Before posting a new question, please search Stack Overflow for answers to similar questions, and also familiarize yourself with: - * [user documentation](http://kubernetes.io/docs/) + * [user documentation](https://kubernetes.io/docs/home/) * [troubleshooting guide](https://kubernetes.io/docs/tasks/debug-application-cluster/troubleshooting/) Again, thanks for using Kubernetes. @@ -104,18 +104,21 @@ comment. ## Validate if the issue is bug -Validate if the problem is a bug by reproducing it. If reproducible, move to the -next step of defining priority. You may need to contact the issue reporter in -the following cases: -* Do a quick duplicate search to see if the issue has been reported already. If -a duplicate is found, let the issue reporter know it by marking it duplicate. -* If you can not reproduce the issue, contact the issue reporter with your -findings and close the issue if both the parties agree that it could not be -reproduced. -* If the issue is non-trivial to reproduce, work with issue reporter and let SIG -know of your findings. -* If you do not get a response in 20 days, then close the issue with appropriate -comment. +Validate if the problem is a bug by reproducing it. If reproducible, move to +the next step of defining priority. You may need to contact the issue reporter +in the following cases: +* Do a quick duplicate search to see if the issue has been reported already. +If a duplicate is found, let the issue reporter know it by marking it +duplicate. Label such issues as `triage/duplicate`. +* If you can not reproduce the issue, label it as a `triage/not-reproducible`. +Contact the issue reporter with your findings and close the issue if both the +parties agree that it could not be reproduced. +* If you need more information to further work on the issue, let the reporter +know it by adding an issue comment followed by label +`triage/needs-information`. + +In all cases, if you do not get a response in 20 days then close the issue +with an appropriate comment. ## Define priority @@ -134,9 +137,6 @@ priority, in their area are being actively worked on. Examples include user-visible bugs in core features, broken builds or tests and critical security issues. -- **priority/failing-test**: Automatically filed frequently failing test. Needs -to be investigated. - - **priority/important-soon**: Must be staffed and worked on either currently, or very soon, ideally in time for the next release. @@ -197,10 +197,56 @@ bug shouldn't be in this milestone for more than a day or two towards the end of a milestone. It should be triaged either into vX.Y, or moved out of the release milestones. -The above [priority](#define-priority) scheme still applies. The `priority/critical-urgent` -and `priority/failing-test` issues are work we feel must get done before +The above [priority](#define-priority) scheme still applies. The +`priority/critical-urgent` issues are work we feel must get done before release. The `priority/important-soon` and `priority/important-longterm` issues are work we would merge into the release if it gets done, but we wouldn't block the release on it. A few days before release, we will probably move all `priority/important-soon` and `priority/important-longterm` bugs out of that milestone in bulk. + +More information can be found in the developer guide section for +[targeting issues and PRs to a milestone release](/contributors/devel/release.md). + +## Closing issues +Issues that are identified as a support request, duplicate, not-reproducible +or lacks enough information from reporter should be closed following guidelines +explained in this file. Also, any issues that can not be resolved because of +any particular reason should be closed. These issues should have one or more +of following self-readable labels: +* `triage/support`: Indicates an issues is not a bug but a support request. +* `triage/duplicate`: Indicates an issue is a duplicate of other open issue. +* `triage/not-reproducible`: Indicates an issue can not be reproduced as +described. +* `triage/needs-information`: Indicates an issue needs more information in +order to work on it. +* `triage/unresolved`: Indicates an issue that can not be resolved. + +A triage engineer should add these labels appropriately. Kubernetees GitHub +Org members can search [open issues per these labels](https://github.com/kubernetes/kubernetes/labels?utf8=%E2%9C%93&q=triage%2F+kind%2Fsupport+is%3Aopen) to find ones that can be +quickly closed. + +Also note that, `fejta-bot` will add `lifecycle/stale` label to issues with no +activity for 90 days. Such issues will be eventually auto closed if the label is +not removed with the `/remove-lifecycle stale` label or prevented with the +`/lifecycle frozen` label. Refer to the `fejta-bot` added comments in the issue +for more details. It is fine to add any of the `triage/*` labels described in +this issue triage guidelines to issues triaged by the `fejta-bot` for a better +understanding of the issue and closing of it. + +## Help Wanted issues + +We use two labels [help wanted](https://github.com/kubernetes/kubernetes/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22) +and [good first issue](https://github.com/kubernetes/kubernetes/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) +to identify issues that have been specially groomed for new contributors. + +We have specific [guidelines](/contributors/devel/help-wanted.md) +for how to use these labels. If you see an issue that satisfies these +guidelines, you can add the `help wanted` label with the `/help` command +and the `good first issue` label with the `/good-first-issue` command. +Please note that adding the `good first issue` label will also automatically +add the `help wanted` label. + +If an issue has these labels but does not satisify the guidelines, please +ask for more details to be added to the issue or remove the labels using +`/remove-help` or `/remove-good-first-issue` commands. diff --git a/contributors/guide/non-code-contributions.md b/contributors/guide/non-code-contributions.md new file mode 100644 index 000000000..29bce79c3 --- /dev/null +++ b/contributors/guide/non-code-contributions.md @@ -0,0 +1,94 @@ +# Non-code Contributions + +*This section is new and in progress. Expect this document to change often.* + +*If you are interested in helping define and structure this work, [check the weekly meeting notes](https://docs.google.com/document/d/1gdFWfkrapQclZ4-z4Lx2JwqKsJjXXUOVoLhBzZiZgSk/edit#) for information on how to get involved. You can also find us in the SIG Contributor Experience [Slack channel](https://kubernetes.slack.com/messages/sig-contribex).* + +*All contributors welcome, new and old!* + +### What is this? + +The list below is meant to help non-code contributors find areas of the Kubernetes project where their expertise can be best utilized. The goal of this is to both provide a starting guide for anyone looking to become a contributor not necessarily writing code, and also to fill any needs that the SIGs have that might not currently be filled by code-focused contributors. + +This list is meant to be used by both new contributors looking for a good entrance into the project, and current contributors who would live to do something different. + +Are you interested in any of the roles below? Come chat with us [on Slack](https://kubernetes.slack.com/messages/sig-contribex)! + +#### Project general roles +These are roles that either span the project as a whole, or span several areas of the project. Most of the roles below can be considered "good-first-roles". + +- Community education + - Answering questions on Discuss, Slack, StackOverflow, etc + - K8s Office Hours + - Meet Our Contributors + - Onboarding new contributors + - Capturing the experiences of “Fresh Eyes” in the project + - Getting more people to SIG-Docs +- Outward facing community work (might be more CNCF-oriented) + - Hosting meetups and general evangelism + - Presentation of work to meetups + - Design + - Web Development + - Artistic contributions + - Conference-specific or Project-specific +- Non-Documentation writing + - Blogging about early experiences + - Operational manuals + - Walkthroughs + - How-tos about integration experiences, tools, etc + - Playbooks for Ansible, Chef, Salt, etc + - Indexing of blogs, videos, etc + - Maintaining content for the new Contributor Site +- Management of communication tools (at the discretion of project maintainers) + - Mailing list moderation + - Slack or Discourse management + - Calendar management + - Analysis of our comm tools/metrics +- Volunteer management + - Finding/Funneling contributors to the right SIGs or WGs + - Recognition of those who contribute a lot + - Recognition of projects and growth efforts +- Issue Triage + - Issue triage & labeling +- Event management + - Helping run Contributor Summits + - Co-organizing Meetups + - Staffing Kubernetes booths at conferences + +#### SIG-specific roles +These are roles that are important to each and every SIG within the Kubernetes project. If you are interested in a specific topic within the project, you can contribute in several different ways for that specific SIG. + +- Documentation + - Common documentation for the SIG expertise area + - Updates + - Reviewing/logging technical ownership for documentation that might need updating + - Translation +- Release roles + - All roles have shadows for onboarding new members +- Project management + - Confirming ownership of tasks, issues, objects, etc + - Rectifying “owned by everyone, so owned by no-one” +- Pull requests + - PR triage & labeling + - Editing PR text: release note, statement +- Events + - Organizing/helping run Face-to-Face meetings for SIGs/WGs/subprojects + - Putting together SIG Intros & Deep-dives for KubeCon/CloudNativeCon + +#### Non-Code Tasks in Primarily-Code roles +These are roles that are not code-based, but require knowledge of either general coding, or specific domain knowledge of the Kubernetes code base. + +- Documentation + - Documenting new features +- Some release roles + - Managing release notes +- Github management (Tags, repos, etc) + +#### Post-Code Roles +These are roles that are not code-based, but require knowledge of either general coding, or specific domain knowledge of the Kubernetes code base. + +- Technical project leadership + - Specifically, SIG-Architecture and Steering Committee +- Some release roles + - Release Lead, Features Lead, etc +- Mentoring new contributors diff --git a/contributors/guide/owners.md b/contributors/guide/owners.md index eb42335a5..4d08ba1a1 100644 --- a/contributors/guide/owners.md +++ b/contributors/guide/owners.md @@ -34,12 +34,14 @@ OWNERS files are in YAML format and support the following keys: effect on `a/deep/nested/bit/of/code` - `reviewers`: a list of GitHub usernames or aliases that are good candidates to `/lgtm` a PR +The above keys constitute a *simple OWNERS configuration*. + All users are expected to be assignable. In GitHub terms, this means they are either collaborators of the repo, or members of the organization to which the repo belongs. A typical OWNERS file looks like: -``` +```yaml approvers: - alice - bob # this is a comment @@ -49,6 +51,41 @@ reviewers: - sig-foo # this is an alias ``` +#### Filters + +An OWNERS file may also include a `filters` key. +The `filters` key is a map whose keys are [Go regular expressions][go-regex] and whose values are [simple OWNERS configurations](#owners). +The regular expression keys are matched against paths relative to the OWNERS file in which the keys are declared. +For example: + +```yaml +filters: + ".*": + labels: + - re/all + "\\.go$": + labels: + - re/go +``` + +If you set `filters` you must not set a [simple OWNERS configuration](#owners) outside of `filters`. +For example: + +```yaml +# WARNING: This use of 'labels' and 'filters' as siblings is invalid. +labels: +- re/all +filters: + "\\.go$": + labels: + - re/go +``` + +Instead, set a `.*` key inside `filters` (as shown in the previous example). + +**WARNING**: The `approve` plugin [does not currently respect `filters`][test-infra-7690]. +Until that is fixed, `filters` should only be used for the `labels` key (as shown in the above example). + ### OWNERS_ALIASES Each repo may contain at its root an OWNERS_ALIAS file. @@ -62,7 +99,7 @@ publicly auditable. A sample OWNERS_ALISES file looks like: -``` +```yaml aliases: sig-foo: - david @@ -77,7 +114,7 @@ GitHub usernames and aliases listed in OWNERS files are case-insensitive. ## Code Review using OWNERS files This is a simplified description of our [full PR testing and merge -workflow](/contributors/devel/pull-requests.md#the-testing-and-merge-workflow) +workflow](/contributors/guide/pull-requests.md#the-testing-and-merge-workflow) that conveniently forgets about the existence of tests, to focus solely on the roles driven by OWNERS files. Please see [below](#automation-using-owners-files) for details on how specific aspects of this process may be configured on a per-repo basis. @@ -101,8 +138,8 @@ aspects of this process may be configured on a per-repo basis. - Phase 2: Humans approve the PR - The PR **author** `/assign`'s all suggested **approvers** to the PR, and optionally notifies them (eg: "pinging @foo for approval") - - Only people listed in the relevant OWNERS files, either directly or through an alias, can act - as **approvers**, including the individual who opened the PR + - Only people listed in the relevant OWNERS files, either directly or through an alias, as [described + above](#owners_aliases), can act as **approvers**, including the individual who opened the PR. - **Approvers** look for holistic acceptance criteria, including dependencies with other features, forwards/backwards compatibility, API and flag definitions, etc - If the code changes look good to them, an **approver** types `/approve` in a PR comment or @@ -172,21 +209,15 @@ is the state of today. ## Automation using OWNERS files -### ~[`mungegithub`](https://git.k8s.io/test-infra/mungegithub)~ is deprecated +Kubernetes uses the Prow Blunderbuss plugin and Tide. +Tide uses GitHub queries to select PRs into “tide pools”, runs as many in a +batch as it can (“tide comes in”), and merges them (“tide goes out”). -Mungegithub's blunderbuss and submit-queue mungers are currently used for kubernetes/kubernetes. Their -equivalents are the prow blunderbuss plugin, and prow's tide cmd. These docs will be removed once -kubernetes/kubernetes has transitioned over to tide. - -~Mungegithub polls GitHub, and "munges" things it finds, including issues and pull requests. It is -stateful, in that restarting it means it loses track of which things it has munged at what time.~ - -- ~[munger: - blunderbuss](https://git.k8s.io/test-infra/mungegithub/mungers/blunderbuss.go)~ - - ~responsible for determining **reviewers** and assigning to them~ -- [munger: - submit-queue](https://git.k8s.io/test-infra/mungegithub/mungers/submit-queue.go) - - responsible for merging PR's +- [Blunderbuss plugin](https://git.k8s.io/test-infra/prow/plugins/blunderbuss): + - responsible for determining **reviewers** +- [Tide](https://git.k8s.io/test-infra/prow/cmd/tide): + - responsible for automatically running batch tests and merging multiple PRs together whenever possible. + - responsible for retriggering stale PR tests. - responsible for updating a GitHub status check explaining why a PR can't be merged (eg: a missing `lgtm` or `approved` label) @@ -210,7 +241,7 @@ pieces of prow are used to implement the code review process above. - [plugin: assign](https://git.k8s.io/test-infra/prow/plugins/assign) - assigns GitHub users in response to `/assign` comments on a PR - unassigns GitHub users in response to `/unassign` comments on a PR -- [plugin: approve](https://git.k8s.io/test-infra/prow/plugins/assign) +- [plugin: approve](https://git.k8s.io/test-infra/prow/plugins/approve) - per-repo configuration: - `issue_required`: defaults to `false`; when `true`, require that the PR description link to an issue, or that at least one **approver** issues a `/approve no-isse` @@ -220,7 +251,7 @@ pieces of prow are used to implement the code review process above. OWNERS files has `/approve`'d - comments as required OWNERS files are satisfied - removes outdated approval status comments -- [plugin: blunderbuss](https://git.k8s.io/test-infra/prow/plugins/assign) +- [plugin: blunderbuss](https://git.k8s.io/test-infra/prow/plugins/blunderbuss) - determines **reviewers** and requests their reviews on PR's - [plugin: lgtm](https://git.k8s.io/test-infra/prow/plugins/lgtm) - adds the `lgtm` label when a **reviewer** comments `/lgtm` on a PR @@ -257,3 +288,6 @@ Good examples of OWNERS usage: - there are more `reviewers` than `approvers` - the `approvers` are not in the `reviewers` section - OWNERS files that are regularly updated (at least once per release) + +[go-regex]: https://golang.org/pkg/regexp/#pkg-overview +[test-infra-7690]: https://github.com/kubernetes/test-infra/issues/7690 diff --git a/contributors/guide/pull-requests.md b/contributors/guide/pull-requests.md index 21a4ddf62..a24310a61 100644 --- a/contributors/guide/pull-requests.md +++ b/contributors/guide/pull-requests.md @@ -23,6 +23,7 @@ This doc explains the process and best practices for submitting a pull request t * [7. KISS, YAGNI, MVP, etc.](#7-kiss-yagni-mvp-etc) * [8. It's OK to Push Back](#8-its-ok-to-push-back) * [9. Common Sense and Courtesy](#9-common-sense-and-courtesy) + * [10. Trivial Edits](#10-trivial-edits) # Before You Submit a Pull Request @@ -71,40 +72,53 @@ Here's the process the pull request goes through on its way from submission to m 1. If you're **not** a member of the Kubernetes organization, a Reviewer/Kubernetes Member checks that the pull request is safe to test. If so, they comment `/ok-to-test`. Pull requests by Kubernetes organization [members](/community-membership.md) do not need this step. Now the pull request is considered to be trusted, and the pre-submit tests will run: - 1. Automatic tests run. See the current list of tests on the [MERGE REQUIREMENTS tab, at this link](https://submit-queue.k8s.io/#/info) + 1. Automatic tests run. See the current list of tests at this [link](https://prow.k8s.io/?repo=kubernetes%2Fkubernetes&type=presubmit) 1. If tests fail, resolve issues by pushing edits to your pull request branch 1. If the failure is a flake, anyone on trusted pull requests can comment `/retest` to rerun failed tests 1. Reviewer suggests edits 1. Push edits to your pull request branch -1. Repeat the prior two steps as needed until reviewer(s) add `/lgtm` label +1. Repeat the prior two steps as needed until reviewer(s) add `/lgtm` label. The `/lgtm` label, when applied by someone listed as an `reviewer` in the corresponding project `OWNERS` file, is a signal that the code has passed review from one or more trusted reviewers for that project 1. (Optional) Some reviewers prefer that you squash commits at this step -1. Follow the bot suggestions to assign an OWNER who will add the `/approve` label to the pull request +1. Follow the bot suggestions to assign an OWNER who will add the `/approve` label to the pull request. The `/approve` label, when applied by someone listed as an `approver` in the corresponding project `OWNERS`, is a signal that the code has passed final review and is ready to be automatically merged -Once the tests pass, all failures are commented as flakes, or the reviewer adds the labels `/lgtm` and `/approved`, the pull request enters the final merge queue. The merge queue is needed to make sure no incompatible changes have been introduced by other pull requests since the tests were last run on your pull request. +The behavior of Prow is configurable across projects. You should be aware of the following configurable behaviors. + +* If you are listed as an `/approver` in the `OWNERS` file, an implicit `/approve` can be applied to your pull request. This can result in a merge being triggered by a `/lgtm` label. This is the configured behavior in many projects, including `kubernetes/kubernetes`. You can remove the implicit `/approve` with `/approve cancel` +* `/lgtm` can be configured so that from someone listed as both a `reviewer` and an `approver` will cause both labels to be applied. For `kubernetes/kuebernetes` and many other projects this is _not_ the default behavior, and `/lgtm` is decoupled from `/approve` + +Once the tests pass and the reviewer adds the `lgtm` and `approved` labels, the pull request enters the final merge pool. The merge pool is needed to make sure no incompatible changes have been introduced by other pull requests since the tests were last run on your pull request. -The [GitHub "munger"](https://git.k8s.io/test-infra/mungegithub) submit-queue plugin will manage the merge queue automatically. +[Tide](https://git.k8s.io/test-infra/prow/cmd/tide) will manage the merge pool +automatically. It uses GitHub queries to select PRs into “tide pools”, +runs as many in a batch as it can (“tide comes in”), and merges them (“tide goes out”). -1. The pull request enters the merge queue ([http://submit-queue.k8s.io](http://submit-queue.k8s.io)) -1. The merge queue triggers a test re-run with the comment `/test all [submit-queue is verifying that this pull request is safe to merge]` - 1. Author has signed the CLA (`cncf-cla: yes` label added to pull request) - 1. No changes made since last `lgtm` label applied +1. The pull request enters the [merge pool](https://prow.k8s.io/tide) +if the merge criteria are met. The [PR dashboard](https://prow.k8s.io/pr) shows +the difference between your PR's state and the merge criteria so that you can +easily see all criteria that are not being met and address them. 1. If tests fail, resolve issues by pushing edits to your pull request branch 1. If the failure is a flake, anyone can comment `/retest` if the pull request is trusted -1. If tests pass, the merge queue automatically merges the pull request +1. If tests pass, Tide automatically merges the pull request That's the last step. Your pull request is now merged. ## Marking Unfinished Pull Requests -If you want to solicit reviews before the implementation of your pull request is complete, you should hold your pull request to ensure that the merge queue does not pick it up and attempt to merge it. There are two methods to achieve this: +If you want to solicit reviews before the implementation of your pull request is complete, you should hold your pull request to ensure that Tide does not pick it up and attempt to merge it. There are two methods to achieve this: 1. You may add the `/hold` or `/hold cancel` comment commands 2. You may add or remove a `WIP` or `[WIP]` prefix to your pull request title The GitHub robots will add and remove the `do-not-merge/hold` label as you use the comment commands and the `do-not-merge/work-in-progress` label as you edit your title. While either label is present, your pull request will not be considered for merging. +## Pull Requests and the Release Cycle + +If a pull request has been reviewed, but held or not approved, it might be due to the current phase in the [Release Cycle](/contributors/devel/release.md). Occasionally, a SIG may freeze their own code base when working towards a specific feature or goal that could impact other development. During this time, your pull request could remain unmerged while their release work is completed. + +If you feel your pull request is in this state, contact the appropriate [SIG](https://git.k8s.io/community/sig-list.md) or [SIG-Release](https://git.k8s.io/sig-release) for clarification. + ## Comment Commands Reference [The commands doc](https://go.k8s.io/bot-commands) contains a reference for all comment commands. @@ -277,3 +291,17 @@ Another phenomenon of open-source projects (where anyone can comment on any issu No document can take the place of common sense and good taste. Use your best judgment, while you put a bit of thought into how your work can be made easier to review. If you do these things your pull requests will get merged with less friction. + +## 10. Trivial Edits + +Each incoming Pull Request needs to be reviewed, checked, and then merged. + +While automation helps with this, each contribution also has an engineering cost. Therefore it is appreciated if you do NOT make trivial edits and fixes, but instead focus on giving the entire file a review. + +If you find one grammatical or spelling error, it is likely there are more in that file, you can really make your Pull Request count by checking formatting, checking for broken links, and fixing errors and then submitting all the fixes at once to that file. + +**Some questions to consider:** + +* Can the file be improved further? +* Does the trivial edit greatly improve the quality of the content? + diff --git a/contributors/guide/release-notes.md b/contributors/guide/release-notes.md index e9fcb4df5..926f59468 100644 --- a/contributors/guide/release-notes.md +++ b/contributors/guide/release-notes.md @@ -22,14 +22,12 @@ For pull requests that require additional action from users switching to the new action required: your release note here ``` -For pull requests that don't need to be mentioned at release time, just write "NONE" (case insensitive): +For pull requests that don't need to be mentioned at release time, use the `/release-note-none` Prow command to add the `release-note-none` label to the PR. You can also write the string "NONE" as a release note in your PR description: ```release-note NONE ``` -The `/release-note-none` comment command can still be used as an alternative to writing "NONE" in the release-note block if it is left empty. +To see how to format your release notes, view the kubernetes/kubernetes [pull request template](https://git.k8s.io/kubernetes/.github/PULL_REQUEST_TEMPLATE.md) for a brief example. Pull Request titles and body comments can be modified at any time prior to the release to make them friendly for release notes. -To see how to format your release notes, view the kubernetes/kubernetes [pull request template](https://git.k8s.io/kubernetes/.github/PULL_REQUEST_TEMPLATE.md) for a brief example. pull request titles and body comments can be modified at any time prior to the release to make them friendly for release notes. - -Release notes apply to pull requests on the master branch. For cherry-pick pull requests, see the [cherry-pick instructions](contributors/devel/cherry-picks.md). The only exception to these rules is when a pull request is not a cherry-pick and is targeted directly to the non-master branch. In this case, a `release-note-*` label is required for that non-master pull request. \ No newline at end of file +Release notes apply to pull requests on the master branch. For cherry-pick pull requests, see the [cherry-pick instructions](contributors/devel/cherry-picks.md). The only exception to these rules is when a pull request is not a cherry-pick and is targeted directly to the non-master branch. In this case, a `release-note-*` label is required for that non-master pull request. diff --git a/contributors/guide/scalability-good-practices.md b/contributors/guide/scalability-good-practices.md index 2b941a75e..7bed15c27 100644 --- a/contributors/guide/scalability-good-practices.md +++ b/contributors/guide/scalability-good-practices.md @@ -1,11 +1,10 @@ -# Scalability good practices for Kubernetes contributors +# Scalability Good Practices for Kubernetes contributors -*This document is oriented at contributors who don't want their code to be reverted for performance reasons* +*This document is written for contributors who would like to avoid their code being reverted for performance reasons* **Table of Contents** -- [Who should read this document and what's in it?](#who-should-read-this-document-and-whats-in-it) -- [TL;DR:](#tldr) +- [Who should read this document and what is in it?](#who-should-read-this-document-and-what-is-in-it) - [What does it mean to "break scalability"?](#what-does-it-mean-to-break-scalability) - [Examples](#examples) - [Inefficient use of memory](#inefficient-use-of-memory) @@ -16,42 +15,23 @@ - [Summary](#summary) - [Closing remarks](#closing-remarks) -## Who should read this document and what's in it? -This document is targeted at developers of "vanilla Kubernetes" who don't want their changes rolled-back or blocked because of performance regressions they cause. It contains some of the knowledge and experience gathered by the scalability team in over two years. +## Who should read this document and what is in it? +This document is targeted at developers of "vanilla Kubernetes" who do not want their changes rolled-back or blocked because they cause performance regressions. It contains some of the knowledge and experience gathered by the scalability team over more than two years. -It is presented as a set of real, or close-to-real examples from the past that broke scalability tests followed by some explanations and general suggestions on how to avoid causing similar problems. - -## TL;DR: -1. You should understand how go memory management work to write code that is fast and doesn't use too much memory - pretty obvious, but we spent noticeable amount of time removing various bad patterns. In particular: -pass arguments by pointers wherever it's correct -avoid unnecessary copying of data (especially slices and maps) -Avoid unnecessary allocations (pre-size slices, reuse buffers, be aware of anonymous function definitions with variable captures, etc) - -2. Wherever you want to write client.Sth().List(..) try using Informer (client-go/tools/cache/shared_informer.go). Be very, very sure you need to LIST resources if you're doing it [1](#1). - -3. Be careful when adding new API calls. Estimate how many QPS your change will add to the API server. If it's a big number, you need to find a way of doing it in a different way. -In particular be aware of “runs on every node” components, and the fan-in that can cause on the API server - -4. From time to time you need to add a very complex logic to the system, one computation of which on big clusters may take a lot of time. You need to be sure that you won't add this logic on a critical path of any of standard flows. - -5. When updating big dependencies (especially etcd or golang version) you need to run large scale test to verify that bump doesn't break Kubernetes performance. +It is presented as a set of examples from the past which broke scalability tests, followed by some explanations and general suggestions on how to avoid causing similar problems. ## What does it mean to "break scalability"? -By "breaking scalability" we mean causing performance SLO violation in one of our performance tests. Performance SLOs for Kubernetes are [2](#2): +"Breaking scalability" means causing performance SLO violations in one of our performance tests. Performance SLOs for Kubernetes are [2](#2): - 99th percentile of API call latencies <= 1s - 99th percentile of e2e Pod startup, excluding image pulling, latencies <= 5s -Tests that we run are Density and Load, we invite everyone interested in details to read the code. +We run density and load tests, and we invite anyone interested in the details to read the code. -We run those tests on big clusters (100+ Nodes), which means tests are somewhat resistant to limited concurrency in Kubelet (e.g. they're routinely failing on very small clusters, when scheduler can't spread Pod creations broadly enough). +We run those tests on large clusters (100+ Nodes). This means tests are somewhat resistant to limited concurrency in Kubelet (e.g. they are routinely failing on very small clusters, when the Scheduler cannot spread Pod creations broadly enough). ## Examples ### Inefficient use of memory -*TL;DR:* You should understand how go memory management work to write code that is fast and doesn't use too much memory - pretty obvious, but we spent noticeable amount of time removing various bad patterns. In particular: -pass arguments by pointers wherever it's correct -avoid unnecessary copying of data (especially slices and maps) - -Consider following (artificial) code snippet: +Consider the following sample code snippet: ```golang func (s Scheduler) ScheduleOne(pod v1.Pod, nodes []v1.Nodes) v1.Node { for _, node := range nodes { @@ -70,20 +50,22 @@ func (s Scheduler) DoSchedule(podsChan chan v1.Pod) { } ``` -It contains a number of problems that were present in Kubernetes codebase always, and still keep coming. We actively fight them in most important places, but it's a neverending work. +This snippet contains a number of problems that were always present in the Kubernetes codebase, and continue to appear. We try to address them in the most important places, but the work never ends. -First problem is that `func (s Scheduler) ScheduleOne…` means that each call of `ScheduleOne` will happen on new copy of the Scheduler object. This in turn means that go will need to copy whole `Scheduler` struct every time something calls `ScheduleOne` function and the copy will be discarded just after function returns. It's usually just a waste of resources, and even may be incorrect in some cases. +The first problem is that `func (s Scheduler) ScheduleOne…` means each call of `ScheduleOne` will run on a new copy of the Scheduler object. This in turn means Golang will need to copy the entire `Scheduler` struct every time the `ScheduleOne` function is called. The copy will then be discarded when the function returns. Clearly, this is a waste of resources, and in some cases may be incorrect. -Secondly `(pod v1.Pod, nodes []v1.Nodes)` has a lot in common to the first problem. By default go passes arguments as values, i.e. copies them when they're passed to the function - *note that this is very different than Java or Python*. Note that there are things that are fine to pass directly. Slices, maps, strings and interfaces are actually pointers (in general interfaces might not be pointers, but in our code they are - see first point), so only a pointer value is copied when they're passed as an argument. For flat structures copying is sometimes necessary (e.g. when doing asynchronous modifications), but most often it's not - in such cases use pointers. +Next, `(pod v1.Pod, nodes []v1.Nodes)` has much in common with the first problem. By default, Golang passes arguments as values, i.e. copies them when they are passed to the function. *Note that this is very different from Java or Python*. Of course, some things are fine to pass directly. Slices, maps, strings and interfaces are actually pointers (in general interfaces might not be pointers, but in our code they are - see first point), so only a pointer value is copied when they are passed as an argument. For flat structures, copying is sometimes necessary (e.g. when doing asynchronous modifications), but most often it is not. In such cases, use pointers. -As there are no constant references in go this is the only option of passing objects without copying them (except creating read-only interfaces for all types, but this is infeasible). Note that it is, and should be, scary to pass a pointer to your object to strangers. Before you do so please make sure that the code you're passing the pointer to won't modify the object. Races are bad as well. Note that all `Informers` (see next paragraph) caches are expected to be immutable. +As there are no constant references in Golang, this is the only option for passing objects without copying them (except creating read-only interfaces for all types, but that is not feasible). Note that it is (and should be) scary to pass a pointer to your object to strangers. Before you do so, make sure the code to which you are passing the pointer will not modify the object. Races are bad as well. Note that all `Informers` (see next paragraph) caches are expected to be immutable. -I could go on, and on, but I think the point is clear - when writing code that will be executed often you need to think about memory management. From time to time every one of us wants to be lazy and not think about it at all, but this pretty much always bites us back when we look at performance. General rules are: using heap is very expensive (garbage collection) - you should avoid unnecessary heap operations altogether, copying objects a lot is noticeable - it should be minimized. Learn how go manages memory. This is especially important in components running on the master. Otherwise we may end up in the situation when API server is starved on CPU and can't respond quickly to requests. +We could go on and on, but the point is clear -- when writing code that will be executed often, you need to think about memory management. From time to time we all occasionally forget to keep this in mind, but we are reminded of it when we look at performance. General rules are: +- Using heap is very expensive (garbage collection) +- Avoid unnecessary heap operations altogether +- Repeatedly copying objects is noticeable and should be minimized. +- Learn how Golang manages memory. This is especially important in components running on the control plane. Otherwise we may end up in the situation where the API server is starved on CPU and cannot respond quickly to requests. ### Explicit lists from the API server -*TL;DR:* Wherever you want to write `client.Sth().List(..)` try using [`Informer`](client-go/tools/cache/shared_informer.go). Be very, very sure you need to LIST resources if you're doing it. - -Some time ago most of our controllers looked in the following way: +Some time ago most of our controllers looked like this: ```golang func (c *ControllerX) Reconcile() { @@ -102,68 +84,64 @@ func (c *ControllerX) Run() { } ``` -This looks fine-ish if you don't know that LIST are very expensive calls. Object can have size of few kilobytes, and we can have 150k of those. This means that LIST would need to send those hundreds of megabytes through the network, not to mention the fact that API server would need to do few conversions along the way of all this data. It's not the end of the world, but it needs to be minimized. Especially that the solution is simple (quoting Clayton): +This may look OK, but List() calls are expensive. Objects can have sizes of a few kilobytes, and there can be 150,000 of those. This means List() would need to send hundreds of megabytes through the network, not to mention the API server would need to do conversions of all this data along the way. It is not the end of the world, but it needs to be minimized. The solution is simple (quoting Clayton): ->As a rule, use informer. If using informer, use shared informers. If your use case doesn't look like an informer, look harder. If at the very end of that, and it still doesn't look like an informer, maybe use something else after talking to someone. But probably use informer. +>As a rule, use Informer. If using Informer, use shared Informers. If your use case does not look like an Informer, look harder. If at the very end of that it still does not look like an Informer, consider using something else after talking to someone. But probably use Informer. -`Informer` is our library that provides a read interface of the store - it's a read-only cache that provides you a local copy of the store that will contain only object that you're interested in (matching given selector). From it you can GET, LIST, or do whatever read operations you want. `Informer` also allows you to register functions that will be called when an object is created, modified or deleted, which is what most people want. +`Informer` is our library which provides a read interface to the store - it is a read-only cache that provides you with a local copy of the store that contains only the object you are interested in (matching given selector). From it you can Get(), List() or whatever read operations you desire. `Informer` also allows you to register functions that will be called when an object is created, modified or deleted. -The magic behind `Informers` is that they are populated by the WATCH, so they don't stress API server too much. Code for Informer is [here](https://git.k8s.io/kubernetes/staging/src/k8s.io/client-go/tools/cache/shared_informer.go). +The magic behind `Informers` is that they are populated by the WATCH, so they create minimal stress on the API server. Code for Informer is [here](https://git.k8s.io/kubernetes/staging/src/k8s.io/client-go/tools/cache/shared_informer.go). -In general: use `Informers` - if we were able to rewrite most vanilla controllers to them, you'll be able to do it as well. If you don't you may dramatically increase CPU requirements of the API server which will starve it and make it too slow to meet our SLOs. +In general: use `Informers` - if we were able to rewrite most vanilla controllers to use them, you should be able to do so as well. Otherwise, you may dramatically increase the CPU requirements of the API server which will starve it and make it too slow to meet our SLOs. ### Superfluous API calls -*TL;DR:* Be careful when adding new API calls. Estimate how many QPS your change will add to the API server. If it's a big number, you need to find a way of doing it in a different way. +One past regression was caused by `Secret` refreshing logic in Kubelet. By contract we want to update values of `Secrets` (update env variables, contents of `Secret` volume) when the contents of `Secret` are updated in the API server. Normally we would use `Informer` (see above), but there is an additional security constraint; Kubelet should know only `Secrets` that are attached to `Pods` scheduled on the corresponding `Node`, so there should be no watching of all `Secret` updates (which is how `Informers` work). We already know that List() calls are also bad (not to mention that they have the same security problem as WATCH), so the only way we can read `Secrets` is through GET. -One past regression was caused by `Secret` refreshing logic in Kubelet. By contract we want to update values of `Secrets` (update env variables, contents of `Secret` volume) when the contents of `Secret` are updated in the API server. Normally we'd use `Informer` (see above), but there's additional security constraint, that Kubelet should know only `Secrets` that are attached to `Pods` scheduled on the corresponding `Node`. So no watching all `Secret` updates (which is how `Informers` work). We already know that LISTs are also bad (not to mention that they have the same security problem as WATCH), so only way we can read `Secrets` is through GET. +For each `Secret` we were periodically GETting its value and updating underlying variables/volumes as necessary. We have the same logic for `ConfigMaps`. Everything was great until we turned on the `ServiceAccount` admission controller in our performance tests. Then everything went wrong for a very simple reason; the `ServiceAccount` admission controller creates a `Secret` that it attaches to every `Pod` (a different one in every Namespace, but this does not change anything). Multiply this behavior by 150,000 and, given a refresh period of 60 seconds, an additional 2.5k QPS were being sent to the API server, which of course caused it to fail. -So for each `Secret` periodically we were GETting it's value and updating underlying variables/volumes if necessary. We have the same logic for `ConfigMaps`. Everything was great until we turned on `ServiceAccount` admission controller in our performance tests. Then everything went to hell for a very simple reason. `ServiceAccount` admission controller creates a `Secret` that it attached to every `Pod` (different one in every Namespace, but this doesn't change anything). Multiply above behavior by 150k. Given refresh period of 60s it meant that additional 2.5k QPS went to the API server, which of course blew up. +To mitigate this issue we had to reimplement Informers using GETs instead of WATCHes. The current solution consists of a `Secret` cache shared between all `Pod`s. When a `Pod` wants to check if the `Secret` has changed it looks in the cache. If the `Secret` stored in the cache is too old, the cache issues a GET request to the API server to refresh the value. As `Pods` within a single `Namespace` share the `Secret` for `ServiceAccount`, it means Kubelet will need to refresh the `Secret` only once in a while per `Namespace`, not per `Pod`, as it was before. This of course is a stopgap and not a final solution, which is currently (as of early May 2017) being designed as a ["Bulk Watch"](https://github.com/kubernetes/community/pull/443). -What we did to mitigate this issue was, in a way, reimplementing Informers using GETs instead of WATCHes. Current solution consists of a `Secret` cache shared between all `Pod`s. When a `Pod` wants to check if `Secret` changed to looks into the cache. If the `Secret` stored in the cache is too old, cache issues a GET request to API server to get current value. As `Pods` within a single `Namespace` share the `Secret` for `ServiceAccount` it means that Kubelet will need to refresh the `Secret` only once a while per `Namespace`, not per `Pod`, as it was before. This of course is a stopgap, not a final solution, which is currently (as of early May 2017) being designed as a ["Bulk Watch"](https://github.com/kubernetes/community/pull/443). +This example demonstrates why you need to treat API calls as a rather expensive shared resource. This is especially important on the Node side, as every change is multiplied by 5,000. In controllers, especially when writing some disaster recovery logic, it is perfectly fine to add a new call. There are not a lot of controllers, and disaster recovery should not happen too often. That being said, whenever you add a new API server request you should do quick estimation of QPS that will be added to the API server, and if the result is a noticeable number you probably should think about a way to reduce it. -This example should show that you need to treat API calls as a rather expensive shared resource. It's fine to use some of it, but there should be a good reason for increasing number of calls drastically, as you share this resource with everything else. This is especially important on the Node side, as every change is multiplied by 5000. In controllers, especially when writing some disaster recovery logic it's perfectly fine to add a new call - first of all there are not a lot of controllers, secondly disaster recovery shouldn't happen too often. That being said whenever you add a new API server request you should do quick estimation of QPS that will be added to the API server, and if you get a noticeable number you probably should think about a way to reduce it. - -If you don't do that a lot of things may break. One thing is the same as previously - starve API server on CPU. But this particular pattern, if particularly bad, can also drain `max-inflight-request` in API server which will make it respond with 429s (Too Many Requests) on other requests and thus make the whole system slower. At best it will only cause draining of local client rate limiter for API calls in your component (default value is 5 QPS, controllers normally have 20). This will result in your component being very, very, slow. +One obvious consequence of not reducing API calls is that you will starve the API server on CPU. This particular pattern can also drain `max-inflight-request` in the API server, which will make it respond with 429's (Too Many Requests) and thus slow down the system. At best it will only cause draining of the local client rate limiter for API calls in your component (default value is 5 QPS, controllers normally have 20). This will result in your component being very, very slow. ### Complex and expensive computations on a critical path -*TL;DR:* From time to time you need to add a very complex logic to the system, one computation of which on big clusters may take a lot of time. You need to be sure that you won't add this logic on a critical path of any of standard flows. +Let us use the `PodAntiAffinity` scheduling feature as an example. The goal of this feature is to allow users to prevent co-scheduling of `Pods` (using a very broad definition of co-scheduling). When defining `PodAntiAffinity` you pass two things: `Node` grouping and `Pod` selector. The semantics is that for each group of `Nodes` you check if any `Node` in the group runs a `Pod` matching the selector. If it does, all `Nodes` from the group are discarded. This of course needs to be symmetric, as if you prevent pods from set A to be co-scheduled with `Pods` from set B, but not the other way around. When adding new `Pod` to set B, you'll end up with `Pods` from A and B running in the same group, which you wanted to avoid. -As an example we'll give a `PodAntiAffinity` scheduling feature. The goal of this feature is to allow users to prevent co-scheduling of `Pods`, for very broad definition of co-scheduling. When defining `PodAntiAffinity` you pass two things: `Node` grouping and `Pod` selector. Semantics is following: for each group of `Nodes` you check if any `Node` in the group runs a `Pod` matching the selector. If it does all `Nodes` from the group are discarded. This of course needs to be symmetric, as if you prevent pods from set A to be co-scheduled with `Pods` from set B, but not other way around, then when adding new `Pod` to set B, you'll end up with `Pods` from A and B running in the same group, which you wanted to avoid. +This means that even when scheduling `Pods` that do not explicitly use the `PodAntiAffinity` feature you need to check `PodAntiAffinities` of all `Pods` running in the cluster. It also means that scheduling of every `Pod` gets an additional check of `O(#Pods * #Nodes)` complexity, if naively implemented. Given the fact that we can have 150.000 `Pods` in the cluster, it becomes obvious it is not a good idea to have quadratic algorithms on a critical path for Pods - even for ones that do not use the PodAntiAffinity feature! -This means that even when scheduling `Pods` that do not explicitly use `PodAntiAffinity` feature you need to check `PodAntiAffinities` of all `Pods` running in the cluster. This means that scheduling of every `Pod` gets additional check with `O(#Pods * #Nodes)` complexity - if implemented naively. Given the fact that we can have 150k `Pods` in the cluster it's generally not a good idea to have quadratic algorithms on a critical path for Pods - even for ones that don't use PodAntiAffinity feature! +This was initially implemented in a very simple way, rapidly making the scheduler unusable, and `Pod` startup times went through the roof. We were forced to block this feature, and it did not make into the target release. Later, we slightly improved the algorithm to `O(#(scheduled Pods with PodAntiAffinity) * #Nodes)`, which was enough to allow the feature to get in as beta, with a huge asterisk next to it. -First time it was implemented it was actually implemented in a very simple way making the scheduler unusable pretty quickly, and `Pod` startup time went through the roof. We had to block this feature at that point and it didn't made into the release it was aimed at. Later we fixed it slightly by improving the algorithm to `O(#(scheduled Pods with PodAntiAffinity) * #Nodes)`, which was enough to allow this feature to get in as beta with a huge asterisk by it. - -This should serve as an example for the fact that we're working in a very complex area, where a lot of problems are actually very complex - not only non-linear, but some of them are NP-complete. Because of that it's understandable that you need to write something complex. But when you do that you need to take care to protect the rest of the system from that complexity, and add it only in the place where it's absolutely necessary. +This example illustrates how many problems in this area can be much more complex than they seem. Not only that, they are non-linear, and some of them are NP-complete. Understandably, sometimes you need to write something complex, but when you do, you must protect the rest of the system from that complexity, and add it only where it is absolutely necessary. ### Big dependency changes -*TL;DR:* When updating big dependencies (especially etcd or golang version) you need to run large scale test to verify that bump doesn't break Kubernetes performance. - -Kubernetes depends on pretty much the whole universe. From time to time we need to update some dependencies (Godeps, etcd, go version). This can break us in many ways, and we saw it doing it a couple of times now. We skipped one version of `go` (1.5) exactly because of breaking our performance, and in the moment of writing this doc we're working with go team on understanding why `go1.8` also makes Kubernetes performance noticeably worse. - -If you're changing some big and important dependency, there's no way of knowing what performance impact it'll have. The only thing we can do is to actually run test and check. -Where to look to get data? -If you want to check the impact of your changes there are a number of places you can look at: -Density/Load tests output quite a lot of data either to test logs, or files inside 'ReportDir' - both of them include API call latencies and Density also includes pod e2e startup latency information, -for resource usage you can either use monitoring tools (heapster + graphana, but at the time of writing it stops working around 100 Nodes), or just plain old top on master (which scales as much as you want:), -more data is available on `/metrics` endpoint on all our components (e.g. one for the API server contains API call latencies), -to profile a component is to create an ssh tunnel to the machine running it, and run `go tool pprof localhost:` locally +Kubernetes depends on pretty much the whole universe. From time to time we need to update some dependencies (Godeps, etcd, go version). This can break us in many ways, as has already happened a couple of times. We skipped one version of Golang (1.5) precisely because it broke our performance. As this is being written, we are working with the Golang team to try to understand why Golang version 1.8 negatively affects Kubernetes performance. + +If you are changing a large and important dependency, the only way to know what performance impact it will have is to run test and check. + +#### Where to look to get data? + +If you want to check the impact of your changes there are a number of places to look. +- Density and load tests output quite a lot of data either to test logs, or files inside 'ReportDir' - both of them include API call latencies, and density tests also include pod e2e startup latency information. +- For resource usage you can either use monitoring tools (heapster + Grafana, but note that at the time of writing, this stops working at around 100 Nodes), or just plain 'top' on the control plane (which scales as much as you want), +- More data is available on the `/metrics` endpoint of all our components (e.g. the one for the API server contains API call latencies), +to profile a component create an ssh tunnel to the machine running it, and run `go tool pprof localhost:` locally ## Summary -Summing it up, when writing code you should: -- understand how go manages memory and use it wisely, -- not LIST from API server, -- run performance tests in case of huge system-wide changes (e.g. updating big dependencies), +To summarize, when writing code you should: +- understand how Golang manages memory and use it wisely, +- not List() from the API server, +- run performance tests when making large systemwide changes (e.g. updating big dependencies), -When designing new features/thinking about refactoring you should: -- when adding new API calls estimate number of additional QPS you'll be sending to the API server, -- when adding complex logic make sure that you don't add it on a critical path of any basic workflow +When designing new features or thinking about refactoring you should: +- Estimate the number of additional QPS you will be sending to the API server when adding new API calls +- Make sure to not add any complex logic on a critical path of any basic workflow ## Closing remarks -We know that thinking about performance impact of changes that all of us write is hard, this is exactly why we want you to help us cater for it, by always having problems that we mentioned here in the back of your mind. In return we'll answer all your question and doubts about possible impact of your changes if you post them either to #sig-scalability Slack channel, or cc @kubernetes/sig-scalability-pr-reviews in your PR/proposal. +We know that thinking about the performance impact of changes is hard. This is exactly why we want you to help us cater for it, by keeping all the knowledge we have given you here in the back of your mind as you write your code. In return, we will answer all your question and doubts about possible impact of your changes if you post them either to #sig-scalability Slack channel, or cc @kubernetes/sig-scalability-pr-reviews in your PR/proposal. * * * -1: If you are using List in tight loops, it's common to be doing that on a subset of a list (field, label, or namespace). Most informers have indices on namespaces, but you may end up needing another index (but only if profile shows it) +1: If you are using List() in tight loops, it is common to do so on a subset of a list (field, label, or namespace). Most Informers have indices on namespaces, but you may end up needing another index if profile shows the need. -2: As of now. We're currently working on adding new SLOs and improving the system to meet them. +2: We are working on adding new SLOs and improving the system to meet them. diff --git a/events/2014/contributor-conference/README.md b/events/2014/contributor-conference/README.md new file mode 100644 index 000000000..e100ed828 --- /dev/null +++ b/events/2014/contributor-conference/README.md @@ -0,0 +1,200 @@ +# Kubernetes Contributor Conference, 2014-12-03 to 12-05 +**Full notes:** (Has pictures; Shared with k-dev mailing list) (https://docs.google.com/document/d/1cQLY9yeFgxlr_SRgaBZYGcJ4UtNhLAjJNwJa8424JMA/edit?usp=sharing) +**Organizers:** thockin and bburns +**26 Attendees from:** Google, Red Hat, CoreOS, Box +**This is a historical document. No typo or grammar correction PRs needed.** + +Last modified: Dec. 8. 2014 + +# Clustering and Cluster Formation +Goal: Decide how clusters should be formed and resized over time +Models for building clusters +* Master in charge - asset DB +Dynamic join - ask to join +* How Kelsey Hightower has seen this done on bare metal +Use Fleet as a machine database +A Fleet agent is run on each node +Each node registers its information in etcd when it comes up +Only security is that etcd expects the node to have a cert signed by a specific CA +Run an etcd proxy on each node +Don't run any salt scripts, everything is declarative +Just put a daemon (kube-register) on a machine to become part of the cluster +brendanburns: basically using Fleet as the cloud provider +* Puppet model - whitelist some cert and/or subnet that you want to trust everything in +One problem - if CA leaks, have to replace certs on all nodes +* briangrant: we may want to support adding nodes that aren't trusted, only scheduling work from the nodes' owner on them +* lavalamp: we need to differentiate between node states: +In the cluster +Ready to accept work +Trusted to accept work +* Proposal: +New nodes initiate contact with the master +Allow multiple config options for how trust can be established - IP, cert, etc. +Each new node only needs one piece of information - how to find the master +Can support many different auth modes - let anyone in, whitelist IPs, a particular signed cert, queue up requests for an admin to approve, etc. +Default should be auto-register with no auth/approval needed +Auth-ing is separate from registering +Supporting switching between permissive and strict auth modes: +Each node should register a public key such that if the auth mode is changed to require a cert upon registration, old nodes won't break +kelseyhightower: let the minion do the same thing that kube-register currently does +Separate adding a node to the cluster from declaring it as schedulable +* Use cases: +Kick the tires, everything should be automagic +Professional that needs security +* Working group for later: Joe, Kelsey, Quintin, Eric Paris +# Usability +* Getting started +Want easy entry for Docker users +Library/registry of pod templates +* GUI - visualization of relationships and dependencies, workflows, dashboards, ways to learn, first impressions +Will be easiest to start with a read-only UI before worrying about read-write workflows +* Docs +Need to refactor getting started guides so that there's one common guide +Each cloud provider will just have its own short guide on how to create a cluster +Need a simple test that can verify whether your cluster is healthy or diagnose why it isn't +Make it easier to get to architecture/design doc from front page of github project +Table of contents for docs? +Realistic examples +Kelsey has found that doing a tutorial of deploying with a canary helped make the value of labels clear +* CLI +Annoying when local auth files and config get overwritten when trying to work with multiple clusters +Like when running e2e tests +* Common friction points +External IPs +Image registry +Secrets +Deployment +Stateful services +Scheduling +Events/status +Log access +* Working groups +GUI - Jordan, Brian, Max, Satnam +CLI - Jeff, Sam, Derek +Docs - Proppy, Kelsey, TJ, Satnam, Jeff +Features/Experience - Dawn, Rohit, Kelsey, Proppy, Clayton: https://docs.google.com/document/d/1hqn6FtBNMe0sThbciq2PbE_P5BONBgCzHST4gz2zj50/edit + + +# v1beta3 discussion + +12-04-2014 +Network -- breakout +* Dynamic IP +Once we support live migration, IP assigned for each POD has to move together, which might be broken the underneath. +We don’t have introspection, which makes supporting various network topology harder. +External IP is an important part. +There’s a kick-the-tires mode and full-on mode (for GCE, AWS - fully featured). +How do we select kick-the-tires ? Weave, Flannel, Calico: pick one. +Someone does a comparison. thockin@ would like help in evaluating these tech against some benchmarks. Eric Paris can help - has a bare-metal setup. We’ll have a benchmark setup for evaluation. +We need to have two real use-cases at least - a webserver example; can 10 pods find each other. lavalamp@ working on a test. +If docker picks up a plugin model, we can use that. +Cluster will be dynamically change, we need to design a flexible network plugin API to accomplish this. +Flannel two things: network allocation through etcd and traffic routing w/ overlays. Also programs underlay networks (like GCE). Flannel will do IP allocation, not hard-coded. +One special use case: per node, there are only 20 ips could be allocated. Scheduler might need to know the limitation: OUT-OF-IP(?) +Different cloud providers, but OVS is a common mechanism +We might need Network Grids at the end +ACTIONS: better doc, test. +* Public Services +Hard problem: Have to scale to GCE, GCE load balancer cannot target to arbitrary IP, only can target to a VM for now. +Until we have an external IP, you cannot build a HA public service. +We can run Digital Ocean on top of kubernetes +Issue: When starting a public service, there is internal IP assigned. It is accessable from node within cluster, but not from outside. Now we have a 3-tier services, how to access one service from outside The issue is how to take this internal accessible service externalized. General solution: forwarding the traffic outside to the internal IP. First action, teach kubernetes mapping. +We need a registry of those public IPs. All traffic comes to that IP will be forwarded to proper IP internally. +public service can register with DNS, and do a intermiddle load balancing outside cluster / kubernetes. Label query to tell the endpoint. +K8s proxy can be L3 LB, and listen to the external IPs, it also talk to k8s service DB and find internal services; then goes to L7 LB, which could be HAP proxy, scheduled as a pod, it talks to Pods DB, find a cluster of pods to forward the traffic. + + + +Two types of services: mapping external IPs and L3 LB to map to pods. L7 LB can access the IPs assigned to pods. +Policy: Add more nodes, more external IPs can be used. +Issue1: how to take external IP to map to a list of pods, L3 LB part. +Issue2: how to slice those external IPs: general pool vs. private pools. +* IP-per-service, visibility, segmenting +* Scale +* MAC + +# Roadmap + +* Should be driven by scenarios / use cases -- breakout +* Storage / stateful services -- breakout +Clustered databases / kv stores +Mongo +MySQL master/slave +Cassandra +etcd +zookeeper +redis +ldap +Alternatives +local storage +durable volumes +identity associated with volumes +lifecycle management +network storage (ceph, nfs, gluster, hdfs) +volume plugin +flocker - volume migration +“durable” data (as reliable as host) +* Upgrading Kubernetes +master components +kubelets +OS + kernel + Docker +* Usability +Easy cluster startup +Minion registration +Configuring k8s +move away from flags in master +node config distribution +kubelet config +dockercfg +Cluster scaling +CLI + config + deployment / rolling updates +Selected workloads +* Networking +External IPs +DNS +Kick-the-tires networking implementation +* Admission control not required for 1.0 +* v1 API + deprecation policy +* Kubelet API well defined and versioned +* Basic resource-aware scheduling -- breakout +require limits? +auto-sizing +* Registry +Predictable deployment (config-time image resolution) +Easy code->k8s +Simple out-of-the box setup +One or many? +Proxy? +Service? +Configurable .dockercfg +* Productionization +Scalability +100 for 1.0 +1000 by summer 2015 +HA master -- not gating 1.0 +Master election +Eliminate global in-memory state +IP allocator +Operations +Sharding +Pod getter +Kubelets need to coast when master down +Don’t blow away pods when master is down +Testing +More/better/easier E2E +E2E integration testing w/ OpenShift +More non-E2E integration tests +Long-term soaking / stress test +Backward compatibility +Release cadence and artifacts +Export monitoring metrics (instrumentation) +Bounded disk space on master and kubelets +GC of unused images +* Docs +Reference architecture +* Auth[nz] +plugins + policy +admin +user->master +master component->component: localhost in 1.0 +kubelet->master diff --git a/events/2016/developer-summit-2016/application_service_definition_notes.md b/events/2016/developer-summit-2016/application_service_definition_notes.md index e8f4c0c54..8cf3bb9dd 100644 --- a/events/2016/developer-summit-2016/application_service_definition_notes.md +++ b/events/2016/developer-summit-2016/application_service_definition_notes.md @@ -16,7 +16,7 @@ We need the 80% case, Fabric8 is a good example of this. We need a good set of We also need to look at how to get developer feedback on this so that we're building what they need. Pradeepto did a comparison of Kompose vs. Docker Compose for simplicity/usability. -One of the things we're discussing the Kompose API. We want to get rid of this and supply something which people can use directly with kuberntes. A bunch of shops only have developers. Someone asked though what's so complicated with Kube definitions. Have we identified what gives people trouble with this? We push too many concepts on developers too quickly. We want some high-level abstract types which represent the 95% use case. Then we could decompose these to the real types. +One of the things we're discussing the Kompose API. We want to get rid of this and supply something which people can use directly with kubernetes. A bunch of shops only have developers. Someone asked though what's so complicated with Kube definitions. Have we identified what gives people trouble with this? We push too many concepts on developers too quickly. We want some high-level abstract types which represent the 95% use case. Then we could decompose these to the real types. What's the gap between compose files and the goal? As an example, say you want to run a webserver pod. You have to deal with ingress, and service, and replication controller, and a bunch of other things. What's the equivalent of "docker run" which is easy to get. The critical thing is how fast you can learn it. diff --git a/events/2017/05-leadership-summit/announcement.md b/events/2017/05-leadership-summit/announcement.md index 99ed097bf..6445b70a7 100644 --- a/events/2017/05-leadership-summit/announcement.md +++ b/events/2017/05-leadership-summit/announcement.md @@ -1,6 +1,6 @@ This is an announcement for the 2017 Kubernetes Leadership Summit, which will occur on June 2nd, 2017 in San Jose, CA. This event will be similar to the [Kubernetes Developer's Summit](/events/2016/developer-summit-2016/Kubernetes_Dev_Summit.md) in November -2016, but involving a smaller smaller audience comprised solely of leaders and influencers of the community. These leaders and +2016, but involving a smaller audience comprised solely of leaders and influencers of the community. These leaders and influences include the SIG leads, release managers, and representatives from several companies, including (but not limited to) Google, Red Hat, CoreOS, WeaveWorks, Deis, and Mirantis. diff --git a/events/2017/12-contributor-summit/breaking-up-the-monolith.md b/events/2017/12-contributor-summit/breaking-up-the-monolith.md index baf957273..35323e3fc 100644 --- a/events/2017/12-contributor-summit/breaking-up-the-monolith.md +++ b/events/2017/12-contributor-summit/breaking-up-the-monolith.md @@ -61,7 +61,7 @@ Assumption: "big tangled ball of pasta" is hard to contribute to - jdumars: the vault provider thing was one of the ebtter things that happened, it pushed us at MS to thing about genercizing the solution, it pushed us to think about what's better for the community vs. what's better for the provider - jdumars: flipside is we need to have a process where people can up with a well accepted / adopted solution, the vault provider thing was one way of doing that - lavalamp: I tend to think that most extension points are special snowflakes and you can't have a generic process for adding a new extension point -- thockin: wandering back to kubernetes/kubrnetes "main point", looking at staging as "already broken out", are there other ones that we want to break out? +- thockin: wandering back to kubernetes/kubernetes "main point", looking at staging as "already broken out", are there other ones that we want to break out? - dims: kubeadm could move out if needed, could move it to staging for sure - thockin: so what about the rest? eg: kubelet, kube-proxy... do we think that people will concretely get benefits from that? or will that cause more pain - thockin: we recognize this will slow down things diff --git a/events/2017/12-contributor-summit/feature-roadmap-2018.md b/events/2017/12-contributor-summit/feature-roadmap-2018.md index d2ae01ac0..7c955b542 100644 --- a/events/2017/12-contributor-summit/feature-roadmap-2018.md +++ b/events/2017/12-contributor-summit/feature-roadmap-2018.md @@ -1,4 +1,4 @@ -Contributor summit - Kubecon 2017 +Contributor summit - KubeCon/CloudNativeCon 2017 **@AUTHORS - CONNOR DOYLE** diff --git a/events/2017/12-contributor-summit/steering-committee-update.md b/events/2017/12-contributor-summit/steering-committee-update.md index 3c2f0a925..062eec2d7 100644 --- a/events/2017/12-contributor-summit/steering-committee-update.md +++ b/events/2017/12-contributor-summit/steering-committee-update.md @@ -10,7 +10,7 @@ We had a meeting, and the two big items we'd been pushing on hard were: * votining in the proposals in the bootstrap committee * how we're going to handle incubator and contrib etc. -Incubator/contrib: one of our big concerns are what the the consequences for projects and ecosystems. +Incubator/contrib: one of our big concerns are what the consequences for projects and ecosystems. We're still discussing it, please be patient. In the process of solving the incubator process, we have to answer what is kubernetes, which is probably SIGs, but what's a SIG, and who decides, and ... we end up having to examine everything. In terms of deciding what is and isn't kubernetes, we want to have that discussion in the open. diff --git a/events/2018/05-contributor-summit/README.md b/events/2018/05-contributor-summit/README.md index e81933341..df5c2a224 100644 --- a/events/2018/05-contributor-summit/README.md +++ b/events/2018/05-contributor-summit/README.md @@ -13,56 +13,61 @@ In some sense, the summit is a real-life extension of the community meetings and ## Registration - [Sign the CLA](/CLA.md) if you have not done so already. -- [Fill out this Google Form](https://goo.gl/forms/TgoUiqbqZLkyZSZw1) +- [Fill out this Google Form](https://goo.gl/forms/TgoUiqbqZLkyZSZw1) - Registration is now closed. ## When and Where -- Tuesday, May 1, 2018 (before Kubecon EU) -- Bella Center -- Copenhagen, Denmark +- Tuesday, May 1, 2018 (before KubeCon/CloudNativeCon EU) +- Bella Center, Copenhagen, Denmark +- Registration and breakfast start at 8am in Room C1-M0 +- Happy hour reception onsite to close at 5:30pm -All day event with a happy hour reception to close -## Agenda +There is a [Slack channel](https://kubernetes.slack.com/messages/contributor-summit) (#contributor-summit) for you to use during the summit to pass URLs, notes, reserve the hallway track room, etc. + + +## Agenda ### Morning -| Time | Track One | Track Two | Track Three | -| ----------- | ------------------------------- | ---------------------------- | -------------- | -| 8:00 | Registration and Breakfast | | | -| 9:00-9:15 | Welcome and Introduction | | | -| 9:15-9:30 | Steering Committee Update | | | +| Time | Track One - Room: C1-M1 | Track Two - Room: C1-M2 | Track Three - Room: B4-M5 | +| ----------- | ------------------------------- | ---------------------------- | -------------- | +| 8:00 | Registration and Breakfast - Room: C1-M0 | | | +| 9:00-9:15 | | Welcome and Introduction | | +| 9:15-9:30 | | Steering Committee Update | | +| | | | | +| | [New Contributor Workshop](/events/2018/05-contributor-summit/new-contributor-workshop.md) | Current Contributor Workshop | Docs Sprint | | | | | | -| | New Contributor Workshop | Current Contributor Workshop | Docs Sprint | -| | | | | -| 9:30-10:00 | Session | Unconference | | -| 10:00-10:50 | Session | Unconference | | +| 9:30-10:00 | Part 1 | What's next in networking? Lead: thockin | | +| 10:00-10:50 | Part 2 | CRDs and Aggregation - future and pain points. Lead: sttts | | | 10:50-11:00 | B R E A K | B R E A K | | -| 11:00-12:00 | Session | Unconference | | -| 12:00-1:00 | Session | Unconference | | +| 11:00-12:00 | Part 3 | client-go and API extensions. Lead: munnerz | | +| 12:00-1:00 | Part 4 | Developer Tools. Leads: errordeveloper and r2d4 | | | 1:00-2:00 | Lunch (Provided) | Lunch (Provided) | | +*Note: The New Contributor Workshop will be a single continuous training, rather than being divided into sessions as the Current Contributor track is. New contributors should plan to stay for the whole 3 hours. [Outline here](/events/2018/05-contributor-summit/new-contributor-workshop.md).* + ### Afternoon -| Time | Track One | Track Two | -| ----------- | ------------------------------- | ---------------------------- | -| 2:00-3:50 | SIG Updates | Docs Sprint | -| 3:50-4:00 | B R E A K | | -| 4:00-5:30 | SIG Updates | Docs Sprint | -| 5:30-7:00 | Contributor Happy Hour | | -| 7:00 | EmpowerHER event (offsite) | | +| Time | Track One | +| ----------- | ------------------------------- | +| 2:00-3:50 | SIG Updates | +| 3:50-4:00 | B R E A K | +| 4:00-5:30 | SIG Updates | +| 5:30-7:00 | Contributor Happy Hour | +| 7:00 | EmpowerHER event (offsite) | - SIG Updates (~5 minutes per SIG) - - 2 slides per SIG, focused on cross-SIG issues, not internal SIG discussions (those are for Kubecon) + - 2 slides per SIG, focused on cross-SIG issues, not internal SIG discussions (those are for KubeCon/CloudNativeCon) - Identify potential issues that might affect multiple SIGs across the project - - One-to-many announcements about changes a SIG expects that might affect others + - One-to-many announcements about changes a SIG expects that might affect others - Track Leads - - New Contributor Workshop - Josh Berkus + - New Contributor Workshop - Josh Berkus, Guinevere Saenger, Ilya Dmitrichenko - Current Contributor Workshop - Paris Pittman - SIG Updates - Jorge Castro ## Misc: -A photographer and videographer will be onsite collecting b-roll and other shots for KubeCon. If you would rather not be involved, please reach out to an organizer on the day of so we may accommodate you. +A photographer and videographer will be onsite collecting b-roll and other shots for KubeCon/CloudNativeCon. If you would rather not be involved, please reach out to an organizer on the day of so we may accommodate you. Further details to be updated on this doc. Please check back for a complete guide. diff --git a/events/2018/05-contributor-summit/clientgo-notes.md b/events/2018/05-contributor-summit/clientgo-notes.md new file mode 100644 index 000000000..98695813d --- /dev/null +++ b/events/2018/05-contributor-summit/clientgo-notes.md @@ -0,0 +1,139 @@ +# Client-go +**Lead:** munnerz with assist from lavalamp +**Slides:** combined with the CRD session [here](https://www.dropbox.com/s/n2fczhlbnoabug0/API%20extensions%20contributor%20summit.pdf?dl=0) (CRD is first; client-go is after) +**Thanks to our notetakers:** kragniz, mrbobbytales, directxman12, onyiny-ang + +## Goals for the Session + +* What is currently painful when building a controller +* Questions around best practices +* As someone new: + * What is hard to grasp? +* As someone experienced: + * What important bits of info do you think are critical + + +## Pain points when building controller +* A lot of boilerplate + * Work queues + * HasSynced functions + * Re-queuing +* Lack of deep documentation in these areas + * Some documentation exists, bot focused on k/k core +* Securing webhooks & APIServers +* Validation schemas +* TLS, the number of certs is a pain point + * It is hard right now, the internal k8s CA has been used a bit. + * OpenShift has a 'serving cert controller' that will generate a cert based on an annotation that might be able to possibly integrate upstream. + * Election has been problematic and the Scaling API is low-level and hard to use. doesn't work well if resource has multiple meanings of scale (eg multiple pools of nodes) +* Registering CRDs, what's the best way to go about it? + * No best way to do it, but has been deployed with application + * Personally, deploy the CRDs first for RBAC reasons +* Declarative API on one end that has to be translated to translated to a transactional API on the other end (e.g. ingress). Controller trying to change quite a few things. + * You can do locking, but it has to be built. +* Q: how do you deal with "rolling back" if the underlying infrastructure + that you're describing says no on an operation? + * A: use validating webhook? + * A: use status to keep track of things? + * A: two types of controllers: `kube --> kube` and `kube --> external`, + they work differently + * A: Need a record that keeps track of things in progress. e.g. status. Need more info on how to properly tackle this problem. + + +## Best practices +(discussion may be shown by Q: for question or A: for audience or answer) +* How do you keep external resources up to date with Kubernetes resources? + * A: the original intention was to use the sync period on the controller if + you watch external resources, use that + * Should you set resync period to never if you're not dealing with + external resources? + * A: Yes, it's not a bug if watch fails to deliver things right + * A: controller automatically relists on connection issues, resync + interval is *only* for external resources + * maybe should be renamed to make it clear it's for external resources +* how many times to update status per sync? + * A: use status conditions to communicate "fluffy" status to user + (messages, what might be blocked, etc, in HPA), use fields to + communicate "crunchy" status (last numbers we saw, last metrics, state + I need later). +* How do I generate nice docs (markdown instead of swagger) + * A: kubebuilder (kubernetes-sigs/kubebuilder) generates docs out of the + box + * A: Want to have IDL pipeline that runs on native types to run on CRDs, + run on docs generator +* Conditions vs fields + * used to check a pods’ state + * "don't use conditions too much"; other features require the use of conditions, status is unsure + * What does condition mean in this context + * Additional fields that can have `ready` with a msg, represents `state`. + * Limit on states that the object can be in. + * Use conditions to reflect the state of the world, is something blocked etc. + * Conditions were created to allow for mixed mode of clients, old clients can ignore some conditions while new clients can follow them. Designed to make it easier to extend status without breaking clients. +* Validating webhooks vs OpenAPI schema +* Can we write a test that spins up main API server in process? + * Can do that current in some k/k tests, but not easy to consume + * vendoring is hard + * Currently have a bug where you have to serve aggregated APIs on 443, + so that might complicate things +* How are people testing extensions? + * Anyone reusing upstream dind cluster? + * People looking for a good way to test them. + * kube-builder uses the sig-testing framework to bring up a local control plane and use that to test against. (@pwittrock) +* How do you start cluster for e2es? + * Spin up a full cluster with kubeadm and run tests against that + * integration tests -- pull in packages that will build the clusters +* Q: what CIs are you using? + * A: Circle CI and then spin up new VMs to host cluster + * Mirtantis has a tool for a multi-node dind cluster for testing +* #testing-commons channel on stack. 27 page document on this--link will be put in slides +* Deploying and managing Validating/Mutating webhooks? + * how complex should they be? +* When to use subresources? + * Are people switching to api agg to use this today? + * Really just for status and scale + * Why not use subresources today with scale? + * multiple replicas fields + * doesn't fit polymorphic structure that exists + * pwittrock@: kubectl side, scale + * want to push special kubectl verbs into subresources to make kubectl + more tolerant to version skew + +## Other Questions + +* Q: Client-go generated listers, what is the reason for two separate interfaces to retrieve from client and cache? + * A: historical, but some things are better done local vs on the server. +* issues: client-set interface allows you to pass special options that allow you to do interesting stuff on the API server which isn't necessarily possible in the lister. + * started as same function call and then diverged + * lister gives you slice of pointers + * clientset gives you a slice of not pointers + * a lot of people would take return from clientset and then convert it to a slice of pointers so the listers helped avoid having to do deep copies every time. TLDR: interfaces are not identical +* Where should questions go on this topic for now? + * A: most goes to sig-api-machinery right now + * A : Controller related stuff would probably be best for sig-apps +* Q: Staleness of data, how are people dealing with keeping data up to date with external data? + * A: Specify sync period on your informer, will put everything through the loop and hit external resources. +* Q: With strictly kubernetes resources, should your sync period be never? aka does the watch return everything. + * A: The watch should return everything and should be used if its strictly k8s in and k8s out, no need to set the sync period. +* Q: What about controllers in other languages than go? + * A: [metacontroller](https://github.com/GoogleCloudPlatform/metacontroller) There are client libs in other languages, missing piece is work queue, + informer, etc +* Cluster API controllers cluster, machineset, deployment, have a copy of + deployment code for machines. Can we move this code into a library? + * A: it's a lot of work, someone needs to do it + * A: Janet Kuo is a good person to talk to (worked on getting core workloads + API to GA) about opinions on all of this +* Node name duplication caused issues with AWS and long-term caches + * make sure to store UIDs if you cache across reboot + +## Moving Forwards +* How do share/disseminate knowledge (SIG PlatformDev?) + * Most SIGs maintain their own controllers + * Wiki? Developer Docs working group? + * Existing docs focus on in-tree development. Dedicated 'extending kubernetes' section? +* Git-book being developed for kubebuilder (book.kubebuilder.io); would appreciate feedback @pwittrock +* API extensions authors meetups? +* How do we communicate this knowledge for core kubernetes controllers + * Current-day: code review, hallway conversations +* Working group for platform development kit? +* Q: where should we discuss/have real time conversations? + * A: #sig-apimachinery, or maybe #sig-apps in slack (or mailing lists) for the workloads controllers diff --git a/events/2018/05-contributor-summit/crds-notes.md b/events/2018/05-contributor-summit/crds-notes.md new file mode 100644 index 000000000..a07094b8a --- /dev/null +++ b/events/2018/05-contributor-summit/crds-notes.md @@ -0,0 +1,92 @@ +# CRDs - future and painpoints +**Lead:** sttts +**Slides:** combined with the client-go session [here](https://www.dropbox.com/s/n2fczhlbnoabug0/API%20extensions%20contributor%20summit.pdf?dl=0) +**Thanks to our notetakers:** mrbobbytales, kragniz, tpepper, and onyiny-ang + +## outlook - aggregation +* API stable since 1.10. There is a lack of tools and library support. +* GSoC project with @xmudrii: share etcd storage + * `kubectl create etcdstorage your api-server` +* Store custom data in etcd + +## outlook custom resources + +1.11: +* alpha: multiplier versions with/without conversion +* alpha: pruning - blocker for GA - unspecified fields are removed + * deep change of semantics of custom resources + * from JSON blob store to schema based storage +* alpha: defaulting - defaults from openapi validation schema are applied +* alpha: graceful deletion - (maybe? PR exists) +* alpha: server side printing columns for `kubectl get` customization +* beta: subresources - alpha in 1.10 +* will have additionalProperties with extensible string map + * mutually exclusive with properties + +1.12 +* multiple versions with declarative field renames +* strict create mode (issue #5889) + +Missing from Roadmap: + - Additional Properties: Forbid additional fields + - Unknown fields are silently dropped instead of erroring + - Istio used CRD extensively: proto requires some kind of verification and CRDs are JSON + - currently planning to go to GA without proto support + - possibly in the longer term to plan + - Resource Quotas for Custom Resources + - doable, we know how but not currently implemented + - Defaulting: mutating webhook will default things when they are written + - Is Validation going to be required in the future + - poll the audience! + - gauging general sense of validation requirements (who wants them, what's missing?) + - missing: references to core types aren't allowed/can't be defined -- this can lead to versioning complications + - limit CRDs clusterwide such that the don't affect all namespaces + - no good discussion about how to improve this yet + - feel free to start one! + - Server side printing columns, per resource type needs to come from server -- client could be in different version than server and highlight wrong columns + +Autoscaling is alpha today hopefully beta in 1.11 + +## The Future: Versioning +* Most asked feature, coming..but slowly +* two types, "noConversion" and "Declarative Conversion" +* "NoConversion" versioning + * maybe in 1.11 + * ONLY change is apiGroup + * Run multiple versions at the same time, they are not converted + +* "Declarative Conversion" 1.12 +* declarative rename e.g +``` +spec: + group: kubecon.io + version: v1 + conversions: + declarative: + renames: + from: v1pha1 + to: v1 + old: spec.foo + new: bar +``` +* Support for webhook? + * not currently, very hard to implement + * complex problem for end user + * current need is really only changing for single fields + * Trying to avoid complexity by adding a lot of conversions + +## Questions: +* When should someone move to their own API Server + * At the moment, telling people to start with CRDs. If you need an aggregated API server for custom versioning or other specific use-cases. +* How do I update everything to a new object version? + * Have to touch every object. +* are protobuf support in the future? + * possibly, likely yes +* update on resource quotas for CRDs + * PoC PR current out, it's doable just not quite done +* Is validation field going to be required? + * Eventually, yes? Some work being done to make CRDs work well with `kubectl apply` +* Can CRDs be cluster wide but viewable to only some users. + * It's been discussed, but hasn't been tackled. +* Is there support for CRDs in kubectl output? + * server side printing columns will make things easier for client tooling output. Versioning is important for client vs server versioning. diff --git a/events/2018/05-contributor-summit/devtools-notes.md b/events/2018/05-contributor-summit/devtools-notes.md new file mode 100644 index 000000000..c22477e49 --- /dev/null +++ b/events/2018/05-contributor-summit/devtools-notes.md @@ -0,0 +1,63 @@ +# Developer Tools: +**Leads:** errordeveloper, r2d4 +**Slides:** n/a +**Thanks to our notetakers:** mrbobbytales, onyiny-ang + +What APIs should we target, what parts of the developer workflow haven't been covered yet? + +* Do you think the Developer tools for Kubernetes is a solved problem? + * A: No + +### Long form responses from SIG Apps survey +* Need to talk about developer experience +* Kubernetes Community can do a lot more in helping evangelize Software development workflow, including CI/CD. Just expecting some guidelines on the more productive ways to write software that runs in k8s. +* Although my sentiment is neutral on kube, it is getting better as more tools are emerging to allow my devs to stick to app development and not get distracted by kube items. There is a lot of tooling available which is a dual edge sword, these tools range greatly in usability robustness and security. So it takes a lot of effort to... + +### Current State of Developer Experience +* Many Tools +* Mostly incompatible +* Few end-to-end workflows + +### Comments and Questions +* Idea from scaffold to normalize the interface for builders, be able to swap them out behind the scenes. +* Possible to formalize these as CRDs? +* Lots of choices, helm, other templating, kompose etc.. +* So much flexibility in the Kubernetes API that it can become complicated for new developers coming up. + * Debug containers might make things easier for developers to work through building and troubleshooting their app. +* Domains and workflow are so different from companies that everyone has their own opinionated solution. +* Lots of work being done in the app def working group to define what an app is. +* app CRD work should make things easier for developers. +* Break out developer workflow into stages and try and work through expanding them, e.g. develop/debug +* debug containers are looking to be used both in prod and developer workflows +* Tool in sig-cli called kustomize, was previously 'konflate'? +* Hard to talk about all these topics as there isn't the language to talk about these classes of tools. +* @jacob investigation into application definition: re: phases, its not just build, deploy, debug, its build, deploy, lifecycle, debug. Managing lifecycle is still a problem, '1-click deploy' doesn't handle lifecycle. +* @Bryan Liles: thoughts about why this is hard: + * kubectl helm apply objects in different orders + * objects vs abstractions + * some people love [ksonnet](https://ksonnet.io/), some hate it. Kubernetes concepts are introduced differently to different people so not everyone is starting with the same base. Thus, some tools are harder for some people to grasp than others. Shout out to everyone who's trying to work through it * Being tied to one tool breaks compatibility across providers. +* Debug containers are great for break-glass scenarios +* CoreOS had an operator that handled the entire stack, additional objects could be created and certain metrics attached. + * Everything is open source now, etcd, prometheus operator +* Tools are applying things in different orders, and this can be a problem across tooling +* People who depend on startup order also tend to have reliability problems as they have their own operational problems, should try and engineer around it. +* Can be hard if going crazy on high-level abstractions, can make things overly complicated and there are a slew of constraints in play. +* Ordering constraints are needed for certain garbage collection tasks, having ordering may actually be useful. +* Some groups have avoided high-level DSLs because people should understand readiness/livelness probes etc. Developers may have a learning curve, but worthwhile when troubleshooting and getting into the weeds. +* Lots of people don't want to get into it at all, they want to put in a few details on a db etc and get it. +* Maybe standardize on a set of labels to on things that should be managed as a group. Helm is one implementation, it should go beyond helm. + * There is a PR that is out there that might take care of some of this. +* Everyone has their own "style" when it comes to this space. +* Break the phases and components in the development and deployment workflow into sub-problems and they may be able to actually be tackled. Right now the community seems to tackling everything at once and developing different tools to do the same thing. +* build UI that displays the whole thing as a list and allows easy creation/destruction of cluster + * avoid tools that would prevent portability +* objects rendered to file somehow: happens at runtime, additional operator that takes care of the sack + * 3, 4 minor upgrades without breakage +* @Daniel Smith: start up order problems = probably bigger problems, order shouldn't need to matter but in the real world sometimes it does +* platform team, internal paths team (TSL like theme), etc. In some cases it's best to go crazy focusing on the abstractions--whole lot of plumbing that needs to happen to get everything working properly +* Well defined order of creation may not be a bad thing. ie. ensure objects aren't created that are immediately garbage collected. +* Taking a step back from being contributors and put on developer hats to consider the tool sprawl that exists and is not necessarily compatible across different aspects of kubernetes. Is there anyway to consolidate them and make them more standardized? +* Split into sub-problems + +## How can we get involved? +- SIG-Apps - join the conversation on slack, mailing list, or weekly Monday meeting diff --git a/events/2018/05-contributor-summit/networking-notes.md b/events/2018/05-contributor-summit/networking-notes.md new file mode 100644 index 000000000..d1220fdec --- /dev/null +++ b/events/2018/05-contributor-summit/networking-notes.md @@ -0,0 +1,129 @@ +# Networking +**Lead:** thockin +**Slides:** [here](https://docs.google.com/presentation/d/1Qb2fbyTClpl-_DYJtNSReIllhetlOSxFWYei4Zt0qFU/edit#slide=id.g2264d16f0b_0_14) +**Thanks to our notetakers:** onyiny-ang, mrbobbytales, tpepper + + +This session is not declaring what's being implemented next, but rather laying out the problems that loom. + +## Coming soon + - kube-proxy with IPVS + - currently beta + - core DNS replacing kube DNS + - currently beta + - pod "ready++" + - allow external systems to participate in rolling updates. Say your load-balancer takes 5-10 seconds to program, when you bring up new pod and take down old pod the load balancer has lost old backends but hasn't yet added new backends. The external dependency like this becomes a gating pod decorator. + - adds configuration to pod to easily verify readiness + - design agreed upon, alpha (maybe) in 1.11 + +## Ingress +* The lowest common-denominator API. This is really limiting for users, especially compared to modern software L7 proxies. +* annotation model of markup limits portability +* ingress survey reports: + * people want portability + * everyone uses non-portable features… + * 2018 L7 requirements are dramatically higher than what they were and many vendors don’t support that level of functionality. +* Possible Solution? Routes + * openshift uses routes + * heptio prototyping routes currently +* All things considered, requirements are driving it closer and closer to istio +Possibility, poach some of the ideas and add them to kubernetes native. + +## Istio +(as a potential solution) +- maturing rapidly with good APIs and support +- Given that plus istio is not part of kubernetes, it's unlikely near term to become a default or required part of a k8s deployment. The general ideas around istio style service mesh could be more native in k8s. + +## Topology and node-local Services +- demand for node-local network and service discovery but how to go about it? + - e.g. “I want to talk to the logging daemon on my current host” + - special-case topology? + - client-side choice +- These types of services should not be a service proper. + +## Multi-network + +- certain scenarios demand multi-network +- A pod can be in multiple networks at once. You might have different quality of service on different networks (eg: fast/expensive, slower/cheaper), or different connectivity (eg: the rack-internal network). +- Tackling scenarios like NFV +- need deeper changes like multiple pod IPs but also need to avoid repeating old mistakes +- SIG-Network WG designing a PoC -- If interested jump on SIG-network WG weekly call +- Q: Would this PoC help if virtual-kubelets were used to span cloud providers? Spanning latency domains in networks is also complicated. Many parts of k8s are chatty, assuming a cluster internal low-latency connectivity. + +## Net Plugins vs Device Plugins +- These plugins do not coordinate today and are difficult to work around +- gpu that is also an infiniband device +- causes problems because network and device are very different with verbs etc +- problems encountered with having to schedule devices and network together at the same time. +“I want a gpu on this host that has a gpu attached and I want it to be the same deviec” +PoC available to make this work, but its rough and a problem right now. +- Resources WG and networking SIG are discussing this challenging problem +- SIGs/WGs. Conversation may feel like a cycle, but @thockin feels it is a spiral that is slowly converging and he has a doc he can share covering the evolving thinking. + +## Net Plugins, gRPC, Services +- tighter coupling between netplugins and kube-proxy could be useful +- grpc is awesome for plugins, why not use a grpc network plugin +- pass services to network plugin to bypass kube-proxy, give more awareness to the network plugin and enable more functionality. + +## IPv6 +- beta but **no** support for dual-stack (v4 & v6 at the same time) +- Need deeper changes like multiple pod IPs (need to change the pod API--see Multi-network) +- https://github.com/kubernetes/features/issues/563 + +## Services v3 + +- Services + Endpoints have a grab-bag of features which is not ideal; "grew organically" +- Need to start segmenting the "core" API group + - write API in a way that is more obvious + - split things out and reflect it in API +- Opportunity to rethink and refactor: + - Endpoints -> Endpoint? + - split the grouping construct from the “gazintas” + - virtualIP, network, dns name moves into the service + - EOL troublesome features + - port remapping + +## DNS Reboot +- We abuse DNS and mess up our DNS schema + - it's possible to write queries in DNS that take over names + - @thockin has a doc with more information about the details of this + - Why can't I use more than 6 web domains? bugzilla circa 1996 +- problem: its possible to write queries in dns that write over names + - create a namespace called “com” and an app named “google” and it’ll cause a problem +- “svc” is an artifact and should not be a part of dns +- issues with certain underlying libraries +- Changing it is hard (if we care about compatibility) +- Can we fix DNS spec or use "enlightened" DNS servers + - Smart proxies on behalf of pods that do the searching and become a “better” dns +- External DNS +- Creates DNS entries in external system (route53) +- Currently in incubator, not sure on status, possibly might move out of incubator, but unsure on path forward + +Perf and Scalability +- iptables is krufty. nftables implementation should be better. +- ebpf implementation (eg; Cilium) has potential + +## Questions: + +- Consistent mechanism to continue progress but maintain backwards compatibility +- External DNS was not mentioned -- blue/green traffic switching + - synchronizes kubernetes resources into various Kubernetes services + - it's in incubator right now (deprecated) + - unsure of the future trajectory + - widely used in production + - relies sometimes on annotations and ingress +- Q: Device plugins. . .spiraling around and hoping for eventual convergence/simplification + - A: Resource management on device/net plugin, feels like things are going in a spiral, but progress is being made, it is a very difficult problem and hard to keep all design points tracked. Trying to come to consensus on it all. +- Q: Would CoreDNS be the best place for the plugins and other modes for DNS proxy etc. + - loss of packets are a problem -- long tail of latency + - encourage cloud providers to support gRPC +- Q: With the issues talked about earlier, why can’t istio be integrated natively? + - A: Istio can't be required/default: still green + - today we can't proclaim that Kubernetes must support Istio + - probably not enough community support this year (not everyone is using it at this point) +- Q: Thoughts on k8s v2? + - A: Things will not just be turned off, things must be phased out and over the course of years, especially for services which have been core for some time. + +## Take Aways: +- This is not a comprehensive list of everything that is up and coming +- A lot of work went into all of these projects diff --git a/events/2018/05-contributor-summit/new-contributor-notes.md b/events/2018/05-contributor-summit/new-contributor-notes.md new file mode 100644 index 000000000..8ce9aa680 --- /dev/null +++ b/events/2018/05-contributor-summit/new-contributor-notes.md @@ -0,0 +1,350 @@ +# Kubernetes New Contributor Workshop - KubeCon/CloudNativeCon EU 2018 - Notes + +Joining in the beginning was onboarding on a yacht +Now is more onboarding a BIG cruise ship. + +Will be a Hard schedule, and let's hope we can achieve everything +Sig-contributor-experience -> from Non-member contributors to Owner + +## SIG presentation + +- SIG-docs & SIG-contributor-experience: **Docs and website** contribution +- SIG-testing: **Testing** contribution +- SIG-\* (*depends on the area to contribute on*): **Code** contribution + +**=> Find your first topics**: bug, feature, learning, community development and documentation + +Table exercise: Introduce yourself and give a tip on where you want to contribute in Kubernetes + + +## Communication in the community + +Kubernetes community is like a Capybara: community members are really cool with everyone and they are from a lot of different horizons. + +- Tech question on Slack and Stack Overflow, not on Github +- A lot of discussion will be involve when GH issues and PR are opened. Don't be frustrated +- Stay patient because there is a lot of contribution + +When in doubt, **ask on Slack** + +Other communication channels: + +- Community meetings +- Mailing lists +- @ on Github +- Office Hour +- Kubernetes meetups https://www.meetup.com/topics/kubernetes + +on https://kubernetes.io/community, there is the schedule for all the SIG/Working group meeting. +If you want to join or create a meetup. Go to **slack#sig-contribex** + +## SIG - Special Interest Group + +Semi-autonomous teams: +- Own leaders & charteers +- Code, Github repo, Slack, mailing, meeting responsibility + +### Types + +[SIG List](https://github.com/kubernetes/community/blob/master/sig-list.md) + +1. Features Area + - sig-auth + - sig-apps + - sig-autoscaling + - sig-big-data + - sig-cli + - sig-multicluster + - sig-network + - sig-node + - sig-scalability + - sig-scheduling + - sig-service-catalog + - sig-storage + - sig-ui +2. Plumbing + - sig-cluster-lifecycle + - sig-api-machinary + - sig-instrumentation +3. Cloud Providers *(currently working on moving cloudprovider code out of Core)* + - sig-aws + - sig-azure + - sig-gcp + - sig-ibmcloud + - sig-openstack +4. Meta + - sig-architecture: For all general architectural decision + - sig-contributor-experience: Helping contributor and community experience + - sig-product-management: Long-term decision + - sig-release + - sig-testing: In charge of all the test for Kubernetes +5. Docs + - sig-docs: for documentation and website + +## Working groups and "Subproject" + +From working group to "subproject". + +For specific: tools (ex. Helm), goals (ex. Resource Management) or areas (ex. Machine Learning). + +Working groups change around more frequently than SIGs, and some might be temporary. + +- wg-app-def +- wg-apply +- wg-cloud-provider +- wg-cluster-api +- wg-container-identity +- ... + +### Picking the right SIG: +1. Figure out which area you would like to contribute to +2. Find out which SIG / WG / subproject covers that (tip: ask on #sig-contribex Slack channel) +3. Join that SIG / WG / subproject (you should also join the main SIG when joining a WG / subproject) + +## Tour des repositories + +Everything will be refactored (cleaning, move, merged,...) + +### Core repository +- [kubernetes/kubernetes](https://github.com/kubernetes/kubernetes) + +### Project + +- [kubernetes/Community](https://github.com/kubernetes/Community): KubeCon/CloudNativeCon, proposition, Code of conduct and Contribution guideline, SIG-list +- [kubernetes/Features](https://github.com/kubernetes/Features): Features proposal for future release +- [kubernetes/Steering](https://github.com/kubernetes/Steering) +- [kubernetes/Test-Infra](https://github.com/kubernetes/Test-Infra): All related to test except Perf +- [kubernetes/Perf-Tests](https://github.com/kubernetes/Perf-Tests): + +### Docs/Website + +- website +- kubernetes-cn +- kubernetes-ko + +### Developer Tools + +- sample-controller* +- sample- apiserver* +- code-generator* +- k8s.io +- kubernetes-template-project: For new github repo + +### Staging repositories + +Mirror of core part for easy vendoring + +### SIG repositories + +- release +- federation +- autoscaler + +### Cloud Providers + +No AWS + +### Tools & Products + +- kubeadm +- kubectl +- kops +- helm +- charts +- kompose +- ingress-nginx +- minikube +- dashboard +- heapster +- kubernetes-anywhere +- kube-openapi + +### 2nd Namespace: Kubernetes-sigs + +Too much places for Random/Incubation stuff. +No working path for **promotion/deprecation** + +In future: +1. start in Kubernetes-sigs +2. SIGs determine when and how the project will be **promoted/deprecated** + +Those repositories can have their own rules: +- Approval +- Ownership +- ... + +## Contribution + +### First Bug report + +``` +- Bug or Feature + +- What happened + +- How to reproduce + +``` + + ### Issues as specifications + + +Most of k8s change start with an issue: + +- Feature proposal +- API changes proposal +- Specification + +### From Issue to Code/Docs + +1. Start with an issue +2. Apply all appropriate labels +3. cc SIG leads and concerned devs +4. Raise the issue at a SIG meeting or on mailing list +5. If *Lazy consensus*, submit a PR + +### Required labels https://github.com/kubernetes/test-infra/blob/master/label_sync/labels.md + +#### On creation +- `sig/\*`: the sig the issue belong too +- `kind/\*`: + - bug + - feature + - documentation + - design + - failing-test + +#### For issue closed as port of **triage** + +- `triage/duplicate` +- `triage/needs-information` +- `triage/support` +- `triage/unreproduceable` +- `triage/unresolved` + +#### Prority + +- `priority/critical-urgent` +- `priority/important-soon` +- `priority/important-longtem` +- `priority/backlog` +- `priority/awaiting-evidence` + +#### Area + +Free for dedicated issue area + +- `area/kubectl` +- `area/api` +- `area/dns` +- `area/platform/gcp` + +#### help-wanted + +Currently mostly complicated things + +#### SOON + +`good-first-issue` + +## Making a contribution by Pull Request + +We will go through the typical PR process on kubernetes repos. + +We will play there: [community/contributors/new-contributor-playground at master · kubernetes/community · GitHub](https://github.com/kubernetes/community/tree/master/contributors/new-contributor-playground) + +1. When we contribute to any kubernetes repository, **fork it** + +2. Do your modification in your fork +``` +$ git clone git@github.com:jgsqware/community.git $GOPATH/src/github.com/kubernetes/community +$ git remote add upstream https://github.com/kubernetes/community.git +$ git remote -v +origin git@github.com:jgsqware/community.git (fetch) +origin git@github.com:jgsqware/community.git (push) +upstream git@github.com:kubernetes/community.git (fetch) +upstream git@github.com:kubernetes/community.git (push) +$ git checkout -b kubecon +Switched to a new branch 'kubecon' + +## DO YOUR MODIFCATION IN THE CODE## + +$ git add contributors/new-contributor-playground/new-contibutor-playground-xyz.md +$ git commit + + +### IN YOUR COMMIT EDITOR ### + + Adding a new contributors file + + We are currently experimenting PR process in the kubernetes repository. + +$ git push -u origin kubecon +``` + +3. Create a Pull request via Github +4. If needed, sign the CLA to make valid your contribution +5. Read the `k8s-ci-robot` message and `/assign @reviewer` recommended by the `k8s-ci-robot` +6. wait for a `LTGM` label from one of the `OWNER/reviewers` +7. wait for approval from one of `OWNER/approvers` +8. `k8s-ci-robot` will automatically merge the PR + +`needs-ok-to-test` is used for non-member contributor to validate the pull request + +## Test infrastructure + +> How bot toll you when you mess up + +At the end of a PR there is a bunch of test. +2 types: + - required: Always run and needed to pass to validate the PR (eg. end-to-end test) + - not required: Needed in specific condition (eg. modifying on ly specific part of code) + +If something failed, click on `details` and check the test failure logs to see what happened. +There is `junit-XX.log` with the list of test executed and `e2e-xxxxx` folder with all the component logs. +To check if the test failed because of your PR or another one, you can click on the **TOP** `pull-request-xxx` link and you will see the test-grid and check if your failing test is failing in other PR too. + +If you want to retrigger the test manually, you can comment the PR with `/retest` and `k8s-ci-robot` will retrigger the tests. + +## SIG-Docs contribution + +Anyone can contribute to docs. + +### Kubernetes docs + +- Websites URL +- Github Repository +- k8s slack: #sig-docs + +### Working with docs + +Docs use `k8s-ci-robot`. Approval process is the same as for any k8s repo. +In docs, `master` branch is the current version of the docs. So always branch from `master`. It's continuous deployment +For a specific release docs, branch from `release-1.X`. + +## Local build and Test + +The code: [kubernetes/kubernetes] +The process: [kubernetes/community] + +### Dev Env + +You need: +- Go +- Docker + + +- Lot of RAM and CPU and 10 GB of space +- best to use Linux +- place you k8s repo fork in: + - `$GOPATH/src/k8s.io/kubernetes` +- `cd $GOPATH/src/k8s.io/kubernetes` +- build: `./build/run.sh make` + - Build is incremental, keep running `./build/run.sh make` til it works +- To build variant: `make WHAT="kubectl"` +- Building kubectl on Mac for linux: `KUBE_*_PLATFORM="linux/amd64" make WHAT "kubectl"` + +There is `build` documentation there: https://git.k8s.io/kubernetes/build + +### Testing +There is `test` documentation there: https://git.k8s.io/community/contributor/guide diff --git a/events/2018/05-contributor-summit/new-contributor-workshop.md b/events/2018/05-contributor-summit/new-contributor-workshop.md new file mode 100644 index 000000000..9a45b06ff --- /dev/null +++ b/events/2018/05-contributor-summit/new-contributor-workshop.md @@ -0,0 +1,99 @@ +Kubernetes Summit: New Contributor Workshop + +*This was presented as one continuous 3-hour training with a break. For purposes of live coding exercises, participants were asked to bring a laptop with git installed.* + +This course was captured on video, and the playlist can be found [here](https://www.youtube.com/playlist?list=PL69nYSiGNLP3M5X7stuD7N4r3uP2PZQUx). + +*Course Playlist [Part One](https://www.youtube.com/watch?v=obyAKf39H38&list=PL69nYSiGNLP3M5X7stuD7N4r3uP2PZQUx&t=0s&index=1):* +* Opening + * Welcome contributors + * Who this is for + * Program + * The contributor ladder +* CLA signing + * Why we have a CLA + * Going through the signing process +* Choose Your Own Adventure: Figuring out where to contribute + * Docs & Website + * Testing + * Community management + * Code + * Main code + * Drivers, platforms, plugins, subprojects + * Finding your first topic + * Things that fit into your work at work + * Interest match + * Skills match + * Choose your own adventure exercise +* Let's talk: Communication + * Importance of communication + * Community standards and courtesy + * Mailing Lists (esp Kube-dev) + * Slack + * Github Issues & PRs + * Zoom meetings & calendar + * Office hours, MoC, other events + * Meetups + * Communication exercise +* The SIG system + * What are SIGs and WGs + * Finding the right SIG + * Most active SIGs + * SIG Membership, governance + * WGs and Subprojects +* Repositories + * Tour de Repo + * Core Repo + * Website/docs + * Testing + * Other core repos + * Satellite Repos + * Owners files + * Repo membership +* BREAK (20min) + +*Course Playlist [Part Two](https://www.youtube.com/watch?v=PERboIaNdcI&list=PL69nYSiGNLP3M5X7stuD7N4r3uP2PZQUx&t=0s&index=2):* +* Contributing by Issue: Josh (15 min) (1:42) + * Finding the right repo + * What makes a good issue + * Issues as spec for changes + * Labels + * label framework + * required labels + * Following up and communication +* Contributing by PR (with walkthrough) + * bugs vs. features vs. KEP + * PR approval process + * More Labels + * Finding a reviewer + * Following-up and communication + * On you: rebasing, test troubleshooting +* Test infrastructure + * Automated tests + * Understanding test failures +* Doc Contributions + * Upcoming changes to docs + * Building docs locally + * Doc review process + +*Course Playlist [Part Three](https://www.youtube.com/watch?v=Z3pLlp6nckI&list=PL69nYSiGNLP3M5X7stuD7N4r3uP2PZQUx&t=0s&index=3):* + +* Code Contributions: Build and Test + * Local core kubernetes build + * Running unit tests + * Troubleshooting build problems +* Releases + * Brief on Release schedule + * Release schedule details + * Release Team Opportunities (shadows) +* Going beyond + * Org membership + * Meetups & CNCF ambassador + * Mentorship opportunties + * Group Mentoring + * GSOC/Outreachy + * Release Team + * Meet Our Contributors + * 1-on-1 ad-hoc mentoring + * Kubernetes beginner tutorials + * Check your own progress on devstats diff --git a/events/2018/05-contributor-summit/steering-update.md b/events/2018/05-contributor-summit/steering-update.md new file mode 100644 index 000000000..00941b55f --- /dev/null +++ b/events/2018/05-contributor-summit/steering-update.md @@ -0,0 +1,13 @@ +# Steering Committee Update +**Leads:** pwittrock, timothysc +**Thanks to our notetaker:** tpepper + +* incubation is deprecated, "associated" projects are a thing +* WG are horizontal across SIGs and are ephemeral. Subprojects own a piece + of code and relate to a SIG. Example: SIG-Cluster-Lifecycle with + kubeadm, kops, etc. under it. +* SIG charters: PR a proposed new SIG with the draft charter. Discussion + can then happen on GitHub around the evolving charter. This is cleaner + and more efficient than discussing on mailing list. +* K8s values doc updated by Sarah Novotny +* changes to voting roles and rules are in the works diff --git a/events/2018/12-contributor-summit/README.md b/events/2018/12-contributor-summit/README.md new file mode 100644 index 000000000..abaa92edb --- /dev/null +++ b/events/2018/12-contributor-summit/README.md @@ -0,0 +1,143 @@ +# 2018 Kubernetes Contributor Summit US + +This event brings together new and current Kubernetes contributors to connect and share face-to-face. It is an opportunity for existing contributors to help shape the future of community development and offers a welcoming space for new community members to learn, explore and put the contributor workflow to practice. +The summit now spans two days; including an optional social event in the early evening of December 9th along with the main full-day event December 10th. + +In some sense, the summit is a real-life extension of the community meetings and SIG meetings. There are three explicit goals: + +- Cross-SIG communication and announcements +- Onboard new contributors to be productive in our community +- Send contributors home with more context, knowledge, and skills about the project + +## Registration + +Public registration for the event is now closed. If you are a SIG/WG Chair, Tech Lead, or Subproject Owner, please reach out to community@kubernetes.io to make arrangements. There is a limited amount of reserved slots available to you. + +## When and Where + +- Day 1: Optional pre-summit social + - Sunday, Dec 9th from 5-8PM + - Garage, 1130 Broadway Seattle, WA 98122 +- Day 2: Contributor Summit + - Monday, Dec 10th, 2018 from 8AM-530PM + - 6th Floor, Washington State Convention Center, Seattle, WA + (Signage will be present) + +### Badge pick up +If you are not attending KubeCon/CnC but attending this event, please reach out to community@kubernetes.io for a separate process. + +You will need your KubeCon/CnC badge to get into Sunday and Monday events. Badge locations: +- participating hotels (TBA) +- atrium on the 4th floor of the Washington Convention Center +- Garage on Sunday night (convenient!) + +## Agenda + +**Day 1 - [Garage](https://www.garagebilliards.com/)** + +We will publish the dinner menu two weeks before the event but will have options for vegetarian, vegan, and gluten free. Beer, wine, and nonalcoholic beverages available. + +What to expect: Attendees will have access to bowl, play pool/billiards, suggest unconference sessions for the next day, and socializing with other contributors. + +**Day 2 - Washington Convention Center** +- New Contributor Track / Workshop - + - A half day workshop aimed at getting new and first time contributors on boarded and comfortable with working within the Kubernetes Community. Staying for the duration is required; this is not a workshop you can drop into. (Capacity: 100) +- Current Contributor Track - + - talks, workshops, birds of a feather, unconference sessions, steering committee updates, and more! +- Docs Planning Session - + - Working on a curated list of issues and challenges that SIG Docs is tackling at that time. (Current+Doc Capacity: 300) + +### Proposing a BoF Session + +We have 4 slots available for the unconference section of the summit. +Submit your talk idea on a 5x8 index card provided at The Garage during the Sunday event +and in room 610 during the day of the Summit. + +#### Proposers: +- Hang your card on the board in Room 610 +- You are encouraged to advertise your session to garner support. +- These sessions are working sessions, they are NOT 1 hour venting sessions, +by proposing a talk you are committing to gathering work items and proposals, +and coming up with _actionable items_ that people can work on for the next development cycle. + +#### Attendees: +You are encouraged to check the board for sessions that interest you and VOTE on them +by putting a dot (and only one dot!) on the session that you would be interested in participating in. + +- Please respect the process by only voting for sessions you plan on attending and refraining from gaming the system. +- Prior to lunch during the Summit we will pick and announce the top 4 talks by number of votes and then +schedule them for the afternoon. + +In case of a tie or unclear winner we will schedule the sessions in the contributor lounge. + + + +### Monday Schedule + +The schedule has been published to [kcs2018.sched.com/](https://kcs2018.sched.com/) so that you can subscribe to the sessions you want to go to. + +*Evening* + +| Time | Speaker & Title | Room | +| --- | :----------: | :----------: | +|5:10pm | CRDs arent just for add-ons anymore, Tim Hockin | Ballroom 6ABC | +| 5:20pm | Kubernetes Release Notes Tips and Tricks, Mike Arpaia | Ballroom 6ABC | +| 6:40pm | Kubernetes Community, a Story told through emojis and slack data, Paris Pittman | Ballroom 6ABC | + +### Tuesday-Thursday Schedule +Contributor content flows in KubeCon + +*Tuesday* + +| Time | Speaker & Title | Room | +| --- | :----------: | :----------: | +| 1030a | SIG Intros: Apps, Auth, IBMCloud | TBA | +| 1140a | SIG Intros: Cluster Lifecycle, Service Catalog, Storage | TBA | +| 1140a | Behind Your PR: How Kubernetes Uses Kubernetes to Run Kubernetes CI, Sen Lu and Ben Elder | Ballroom 6C | +| 1140a | The Future of Your CRDs - Evolving an API, Stefan Schimanski and Mehdy Bohlool | Ballroom 6E | +| 140p | SIG Intros: Multicluster, Release | TBA | +| 235p | SIG Intros: Contributor Experience, OpenStack | TBA | +| 235p | CNCF TOC Live Committee Meeting | 606-609 | + +*Wednesday* + +| Time | Speaker & Title | Room | +| --- | :----------: | :----------: | +| 1050a | SIG Intros: CLI, PM, Scheduling | TBA | +| 1140a | Deep Dive: Contributor Experience | TBA | +| 1140a | SIG Intros: Autoscaling, AWS, Azure | TBA | +| 145p | Deep Dive: Release | TBA | +| 145p | SIG Intros: Cloud Provider, Testing | TBA | +| 145p | Open Source, Open Community, Open Development, Craig McLuckie | Tahoma 1/2 @ TCC | +|235p | Deep Dive: PM | TBA | +|235p | SIG Intro: IoT WG | TBA | + + +*Thursday* + +| Time | Speaker & Title | Room | +| --- | :----------: | :----------: | +| 1050a | Deep Dives: Auth, CLI, Cloud Provider, Multicluster | TBA | +| 1140a | Deep Dives: API Machinery, Apps, Policy WG | TBA | +| 145p | Deep Dives: Autoscaling, Cluster Lifecycle (kubeadm), IBMCloud, Service Catalog | TBA | +| 235p | Deep Dives: Azure, Cluster Lifecycle (Cluster API), IoT WG | TBA | +| 340p | Deep Dives: Container Identity WG, Testing, VMWare | TBA | +| 430p | Deep Dives: Big Data, Scheduling | TBA | + +## Chat With Us +There is a [Slack channel](https://kubernetes.slack.com/messages/contributor-summit) (#contributor-summit) for you to use before and during the summit. Look here for volunteer opportunities and content updates. Feel free to pass URLs, notes, reserve the hallway track room, and connect with the organizers. + +## Media Policy + +A photographer and videographer will be onsite recording sessions, collecting b-roll and other shots for KubeCon. If you would rather not be involved, please reach out to an organizer on the day of so we may accommodate you. + + +## Code of Conduct + +This event, like all Kubernetes events, has a [Code of Conduct](/code-of-conduct.md). We will have an onsite rep with contact information to be provided here and posted during the event. + + +### Misc +We want to remove as many barriers as possible for you to attend this event. Please contact community@kubernetes.io to see if we can accommodate a request. + +Further details to be updated on this doc. Please check back for a complete guide. diff --git a/events/community-meeting.md b/events/community-meeting.md index 5a9ae68a0..ed5bcf66a 100644 --- a/events/community-meeting.md +++ b/events/community-meeting.md @@ -1,12 +1,10 @@ # Kubernetes Weekly Community Meeting -We have PUBLIC and RECORDED [weekly meeting](https://zoom.us/my/kubernetescommunity) every Thursday at 6pm UTC (1pm EST / 10am PST) +We have PUBLIC and RECORDED [weekly meeting](https://zoom.us/my/kubernetescommunity) every Thursday at [6pm UTC](https://www.google.com/search?q=6pm+UTC). -Map that to your local time with this [timezone table](https://www.google.com/search?q=1800+in+utc) +See it on the web at [calendar.google.com](https://calendar.google.com/calendar/embed?src=cgnt364vd8s86hr2phapfjc6uk%40group.calendar.google.com&ctz=America/Los_Angeles) , or paste this [iCal url](https://calendar.google.com/calendar/ical/cgnt364vd8s86hr2phapfjc6uk%40group.calendar.google.com/public/basic.ics) into any [iCal client](https://en.wikipedia.org/wiki/ICalendar). Do NOT copy the meetings over to a your personal calendar, you will miss meeting updates. Instead use your client's calendaring feature to say you are attending the meeting so that any changes made to meetings will be reflected on your personal calendar. -See it on the web at [calendar.google.com](https://calendar.google.com/calendar/embed?src=cgnt364vd8s86hr2phapfjc6uk%40group.calendar.google.com&ctz=America/Los_Angeles) , or paste this [iCal url](https://calendar.google.com/calendar/ical/cgnt364vd8s86hr2phapfjc6uk%40group.calendar.google.com/public/basic.ics) into any [iCal client](https://en.wikipedia.org/wiki/ICalendar). Do NOT copy the meetings over to a your perosnal calendar, you will miss meeting updates. Instead use your client's calendaring feature to say you are attending the meeting so that any changes made to meetings will be reflected on your personal calendar. - -All meetings are archived on the [Youtube Channel](https://www.youtube.com/watch?v=onlFHICYB4Q&list=PL69nYSiGNLP1pkHsbPjzAewvMgGUpkCnJ) +All meetings are archived on the [Youtube Channel](https://www.youtube.com/playlist?list=PL69nYSiGNLP1pkHsbPjzAewvMgGUpkCnJ). Quick links: @@ -50,7 +48,7 @@ The first 10 minutes of a meeting is dedicated to demonstrations from the commun These demos are noted at the top of the community document. There is a hard stop of the demo at 10 minutes, with up to 5 more minutes for questions. Feel free to add your demo request to the bottom of the list, then one of the organizers will get back to you to schedule an exact date. -Demo submissions MUST follow the the requirements listed below. +Demo submissions MUST follow the requirements listed below. ### Requirements @@ -65,13 +63,29 @@ Also, if you are doing a live coding demo, please make sure it has a reasonable - Ensure you are presenting from a quiet environment. - If you run out of time while performing your demo, you may ask the audience if they would like a follow-up at a subsequent meeting. If there is enthusiastic support, the community team will help schedule a continuation. -## SIG Updates +## SIG Updates -SIGs will give a community update at least once per release cycle per the [schedule](https://docs.google.com/spreadsheets/d/1adztrJ05mQ_cjatYSnvyiy85KjuI6-GuXsRsP-T2R3k). +SIGs will give a community update at least once per release cycle per the [schedule](https://docs.google.com/spreadsheets/d/1adztrJ05mQ_cjatYSnvyiy85KjuI6-GuXsRsP-T2R3k). +The SIG Update should mention: + +- Topics where input is being sought from other SIGs +- Topics that could affect other SIGs +- Currently active themes and goals in the SIG + - Broad description of future themes and goals if possible +- Status of any notable features that are transitioning across the spectrum of incubation, alpha, beta, stable/GA, or are being deprecated +- New or deprecated subprojects +- Leadership position changes or updates +- Charter status and updates, if any +- How people can contribute, areas where help is needed +- Any pending Kubernetes Enhancement Proposals (KEPs) or general big ideas that might warrant outside input +- Prior 1.X.Y release patches in flight status +- Current 1.X release targeted feature status + +Since you only usually have ~10 minutes generally speaking if something is internal only to your SIG and doesn't affect others it doesn't need to be mentioned, people can always attend your SIG meeting for the details. ## Archives The document gets slow as we add notes, so it is archived regularly into another document: - [2017](https://docs.google.com/document/d/1sAH-74kIGROvM5MhyAkbJPVcuE9-RDHiOqfv_4PAGdw/edit#heading=h.en8cy6hno0c6) -- [2014-1016](https://docs.google.com/a/google.com/document/d/1fcs_POhXJCL1dqYrG3IxE4Ivh8jh2JYLCCdgRmBQeb8/edit?usp=sharing) +- [2014-2016](https://docs.google.com/a/google.com/document/d/1fcs_POhXJCL1dqYrG3IxE4Ivh8jh2JYLCCdgRmBQeb8/edit?usp=sharing) diff --git a/events/elections/2017/README.md b/events/elections/2017/README.md index 0d17f68c6..e9436f498 100644 --- a/events/elections/2017/README.md +++ b/events/elections/2017/README.md @@ -37,7 +37,7 @@ If you believe you are a Member of Standing, please fill out [this form](https:/ ## DECISION The newly elected body will be announced in the weekly Kubernetes Community Meeting on October 5, 2017 at 10:00am US Pacific Time. [Please join us](https://groups.google.com/forum/#!forum/kubernetes-community-video-chat). -Following the meeting, the raw voting results and winners will be published on the [Kubernetes Blog](http://blog.kubernetes.io/). +Following the meeting, the raw voting results and winners will be published on the [Kubernetes Blog](https://kubernetes.io/blog/). For more information, definitions, and/or detailed election process, see full [steering committee charter](https://github.com/kubernetes/steering/blob/master/charter.md). diff --git a/events/elections/2018/BALLOTS.csv b/events/elections/2018/BALLOTS.csv new file mode 100644 index 000000000..ef65a9dff --- /dev/null +++ b/events/elections/2018/BALLOTS.csv @@ -0,0 +1,308 @@ +Aaron Crickenberger,Davanum Srinivas,Kris Nova,Nikhita Raghunath,Quinton Hoole,Stephen Augustus,Tim Pepper,Timothy St. Clair +8,8,8,8,1,8,8,8 +1,3,2,5,8,7,6,4 +3,8,4,5,7,6,2,1 +1,4,No opinion,5,3,No opinion,No opinion,2 +1,8,3,8,8,8,8,2 +1,3,8,2,8,8,8,3 +No opinion,No opinion,2,1,No opinion,No opinion,No opinion,No opinion +8,2,8,8,1,8,8,8 +1,No opinion,No opinion,No opinion,No opinion,No opinion,2,3 +8,2,8,8,1,8,8,8 +1,7,3,6,5,8,4,2 +1,1,3,2,3,2,1,3 +4,3,7,8,2,5,6,1 +4,2,8,1,3,8,8,5 +No opinion,No opinion,2,1,No opinion,No opinion,No opinion,No opinion +1,3,8,2,8,8,8,4 +1,4,8,3,6,5,2,7 +1,2,6,7,8,1,8,8 +1,3,8,2,4,4,4,7 +1,2,7,4,6,8,3,5 +4,2,6,7,8,1,3,5 +1,3,8,2,8,8,3,8 +8,4,8,8,1,8,8,8 +1,8,8,8,8,8,8,8 +2,5,6,8,7,4,1,3 +1,8,3,8,3,8,8,2 +1,3,5,2,5,5,5,4 +2,1,8,7,5,3,6,4 +3,No opinion,No opinion,No opinion,No opinion,No opinion,2,1 +8,2,8,8,1,8,8,3 +No opinion,8,8,8,8,8,No opinion,No opinion +5,5,7,5,6,3,1,8 +1,2,6,4,3,8,5,7 +1,2,2,7,8,8,8,7 +1,2,No opinion,3,No opinion,No opinion,No opinion,4 +1,8,8,8,2,8,8,3 +8,1,3,8,8,2,8,8 +1,3,5,7,8,6,4,2 +1,8,8,8,8,8,8,8 +8,2,8,8,1,8,8,8 +4,7,2,6,3,8,5,1 +3,2,5,1,8,4,7,6 +8,2,8,8,1,8,8,8 +2,3,7,1,5,6,4,8 +4,6,8,3,2,5,7,1 +2,6,1,3,7,5,8,4 +No opinion,No opinion,No opinion,No opinion,No opinion,No opinion,No opinion,No opinion +3,8,8,8,2,8,8,1 +2,1,2,2,8,8,8,1 +5,7,6,8,2,4,3,1 +2,6,6,1,7,3,6,8 +8,3,4,8,8,8,1,2 +8,8,3,8,8,2,8,1 +1,No opinion,1,1,No opinion,3,1,2 +4,6,3,1,7,2,8,5 +8,1,7,8,8,8,8,8 +1,No opinion,No opinion,No opinion,No opinion,No opinion,2,No opinion +7,5,1,2,6,8,4,3 +1,2,8,2,8,5,4,8 +1,3,8,1,7,4,4,2 +1,2,8,6,4,6,5,3 +1,2,8,3,8,8,5,4 +8,2,3,3,4,8,8,1 +3,1,6,5,8,7,4,2 +6,2,3,1,7,8,5,4 +4,3,5,2,6,No opinion,No opinion,1 +8,4,3,5,8,6,2,1 +1,2,No opinion,No opinion,No opinion,No opinion,3,No opinion +2,8,8,4,8,1,3,8 +2,6,8,7,3,5,1,3 +1,2,3,4,5,6,7,8 +1,2,5,3,8,7,4,6 +1,8,4,8,5,8,8,2 +3,7,1,8,4,6,5,2 +1,8,8,8,2,8,8,3 +1,2,4,2,8,No opinion,4,3 +2,8,3,8,1,8,8,8 +1,8,8,2,8,8,8,3 +8,8,8,8,1,8,3,2 +8,8,8,8,1,8,8,8 +2,1,8,8,8,8,3,8 +1,No opinion,No opinion,No opinion,No opinion,No opinion,2,3 +3,2,1,No opinion,No opinion,No opinion,No opinion,No opinion +8,8,8,8,1,8,3,2 +6,4,5,2,8,3,1,7 +2,8,8,8,8,8,1,3 +1,8,8,8,8,2,8,3 +1,5,2,6,4,6,6,3 +1,2,8,7,6,3,4,5 +2,8,8,8,3,8,8,1 +8,8,8,8,1,8,8,8 +1,2,8,8,8,8,8,3 +1,4,8,3,7,5,4,2 +2,6,8,3,7,6,4,1 +8,1,1,8,8,8,8,1 +2,4,1,3,8,4,4,4 +2,1,8,8,3,1,8,2 +1,2,5,8,4,6,7,4 +5,6,7,3,8,2,4,1 +No opinion,No opinion,No opinion,No opinion,No opinion,No opinion,No opinion,No opinion +4,3,5,2,7,1,8,8 +1,8,8,8,8,2,8,3 +1,3,No opinion,No opinion,No opinion,2,No opinion,No opinion +1,2,8,2,5,4,3,3 +1,8,8,3,8,2,8,8 +1,2,8,8,8,8,8,3 +1,8,2,7,3,4,5,6 +1,3,6,2,7,5,8,4 +5,6,4,8,2,7,1,3 +2,1,8,8,6,8,8,4 +1,8,8,7,5,4,8,2 +5,1,7,3,8,6,4,2 +1,3,4,7,8,2,6,5 +1,6,3,7,2,8,4,5 +8,8,8,8,1,8,8,2 +8,3,2,5,8,4,8,1 +1,8,8,8,8,8,8,8 +1,3,4,5,8,7,6,2 +2,6,8,5,8,1,3,4 +1,4,7,8,3,7,7,2 +4,8,3,2,8,1,8,8 +No opinion,No opinion,1,No opinion,No opinion,No opinion,No opinion,1 +1,6,5,4,3,8,7,2 +6,4,1,7,8,3,5,2 +2,6,7,3,4,1,8,5 +2,3,8,1,7,6,4,5 +7,3,2,5,8,6,4,1 +2,1,3,8,8,8,8,8 +3,6,8,2,4,5,7,1 +3,1,6,7,8,2,4,5 +2,No opinion,No opinion,No opinion,3,No opinion,No opinion,1 +1,2,8,4,8,8,5,3 +1,4,4,4,3,3,4,2 +2,3,8,5,4,7,1,6 +8,4,2,5,6,7,3,1 +8,5,2,3,7,6,4,1 +7,2,3,6,8,1,4,5 +1,8,8,8,8,8,8,1 +1,2,8,4,5,6,7,3 +1,7,7,3,4,6,2,5 +1,4,4,2,8,7,4,3 +No opinion,No opinion,No opinion,No opinion,No opinion,1,8,No opinion +2,8,3,1,8,5,4,6 +1,8,8,8,8,2,3,8 +1,8,8,2,8,8,8,8 +8,2,8,8,1,8,8,8 +8,3,8,1,8,2,8,8 +1,7,2,8,5,6,4,3 +1,No opinion,No opinion,No opinion,No opinion,No opinion,2,3 +3,8,2,4,8,8,8,1 +2,7,8,1,3,4,6,5 +1,4,8,3,8,8,8,2 +3,6,5,4,8,2,1,7 +1,1,8,8,8,1,2,8 +1,2,6,4,8,5,3,7 +2,8,8,8,8,1,8,3 +1,2,3,8,5,4,7,6 +1,3,7,5,4,6,8,2 +3,1,4,5,6,7,8,2 +1,7,3,7,8,7,7,2 +5,2,6,3,1,7,8,4 +1,2,8,4,8,8,8,3 +No opinion,No opinion,2,No opinion,1,No opinion,1,No opinion +4,3,8,8,1,8,2,8 +4,5,1,8,3,6,7,2 +1,8,2,7,5,6,4,3 +1,2,3,No opinion,5,6,7,4 +1,No opinion,3,No opinion,No opinion,No opinion,No opinion,2 +3,1,7,4,2,5,8,6 +4,8,7,2,3,5,6,1 +1,3,8,4,2,8,5,8 +1,2,5,3,7,4,6,8 +8,2,8,8,8,1,8,8 +1,4,6,7,2,8,5,3 +1,3,8,7,4,6,5,2 +2,3,4,1,5,6,8,7 +5,6,2,4,8,7,1,3 +3,4,8,5,1,6,7,2 +1,4,3,6,5,8,2,7 +4,2,1,5,6,7,8,3 +4,3,No opinion,No opinion,1,No opinion,No opinion,2 +5,7,8,1,8,7,8,8 +1,2,8,4,7,6,3,5 +4,8,1,8,3,8,8,2 +8,8,8,8,1,8,8,8 +3,2,8,8,1,8,8,3 +1,4,3,8,5,2,7,No opinion +1,3,8,6,4,7,5,2 +4,8,2,8,8,8,3,1 +1,2,4,5,8,6,3,7 +3,2,3,8,8,8,8,1 +1,6,3,7,8,2,5,4 +1,3,5,2,No opinion,7,6,4 +2,6,1,2,8,3,8,4 +1,3,8,4,8,8,8,2 +1,2,8,1,8,1,1,8 +1,3,1,No opinion,8,No opinion,7,1 +2,8,1,1,8,1,8,1 +1,6,6,2,7,8,8,7 +1,8,7,3,6,4,2,5 +1,8,8,8,8,8,8,2 +1,4,6,2,7,8,3,5 +3,6,8,5,3,5,7,1 +8,8,8,8,1,8,8,8 +1,2,4,4,3,4,4,3 +1,8,8,8,8,8,3,2 +2,5,8,1,3,8,8,4 +8,8,8,3,1,8,8,2 +4,2,3,8,8,8,8,1 +1,8,8,8,8,8,2,4 +3,7,6,4,8,2,5,1 +8,8,3,1,8,8,8,2 +1,2,4,4,No opinion,5,4,2 +No opinion,No opinion,1,2,No opinion,No opinion,No opinion,No opinion +1,4,No opinion,3,No opinion,5,2,8 +2,1,6,8,7,3,5,4 +1,No opinion,No opinion,No opinion,No opinion,No opinion,No opinion,2 +1,No opinion,No opinion,3,No opinion,No opinion,No opinion,2 +1,3,8,4,7,5,5,2 +4,3,7,6,8,5,2,1 +8,1,8,2,8,3,8,8 +2,8,8,1,8,3,8,8 +1,4,2,8,5,8,8,3 +1,2,No opinion,No opinion,No opinion,No opinion,No opinion,3 +1,2,8,4,8,8,8,3 +8,3,8,8,1,8,8,2 +8,1,8,8,8,8,8,8 +5,6,2,3,8,7,4,1 +2,3,7,1,7,5,4,6 +2,8,8,8,8,8,3,1 +1,4,2,6,3,7,5,8 +2,4,5,6,3,8,7,1 +2,2,1,2,2,2,2,8 +8,3,8,8,8,1,8,2 +2,8,3,8,4,1,8,8 +5,4,2,1,8,7,6,3 +1,5,6,4,8,3,2,7 +1,8,3,8,8,8,8,2 +8,8,8,8,2,1,8,8 +5,No opinion,6,2,No opinion,4,3,1 +1,4,7,8,3,7,7,2 +5,2,6,3,1,6,4,4 +2,6,5,1,7,3,4,8 +4,6,3,6,8,1,7,2 +8,2,8,7,4,8,8,1 +1,2,6,1,6,6,8,2 +8,6,5,8,1,2,4,3 +1,2,8,8,8,8,3,8 +1,2,8,3,8,4,5,3 +1,2,4,8,8,8,5,3 +8,8,2,8,8,8,3,1 +1,2,5,4,8,5,5,3 +1,2,No opinion,3,No opinion,No opinion,No opinion,No opinion +1,5,7,4,3,6,8,2 +3,No opinion,2,1,4,No opinion,No opinion,8 +8,2,3,4,8,8,1,8 +8,2,8,8,1,8,8,8 +2,6,8,3,5,7,4,1 +1,4,8,7,6,5,3,2 +No opinion,No opinion,No opinion,No opinion,No opinion,No opinion,No opinion,No opinion +1,2,No opinion,3,5,7,6,4 +1,2,8,3,6,7,4,5 +3,No opinion,2,No opinion,No opinion,No opinion,No opinion,1 +3,8,2,8,8,1,8,8 +1,3,No opinion,5,4,No opinion,6,2 +1,1,8,6,4,2,6,1 +1,2,No opinion,No opinion,No opinion,No opinion,4,3 +3,7,1,2,8,4,6,5 +7,3,6,1,5,2,8,4 +1,8,8,3,4,8,8,2 +1,7,8,3,6,4,5,2 +8,2,8,8,1,8,8,8 +No opinion,7,No opinion,No opinion,No opinion,No opinion,No opinion,8 +1,8,8,3,2,8,8,8 +1,6,4,2,7,3,5,8 +8,2,8,8,1,8,8,8 +1,2,7,3,6,8,8,8 +1,2,8,8,8,3,8,8 +1,No opinion,No opinion,No opinion,No opinion,No opinion,No opinion,No opinion +2,3,8,8,8,8,8,1 +1,8,2,No opinion,3,5,6,4 +1,7,6,5,4,8,3,2 +3,6,1,2,8,5,4,8 +1,7,4,3,5,8,6,2 +1,8,3,2,6,5,7,4 +8,2,8,8,1,8,8,8 +1,7,6,5,2,8,3,4 +2,No opinion,No opinion,No opinion,No opinion,No opinion,3,1 +4,5,8,7,3,1,6,2 +1,No opinion,No opinion,1,No opinion,No opinion,No opinion,No opinion +2,8,7,8,1,8,8,3 +8,8,8,8,8,8,8,8 +2,3,8,1,5,6,4,7 +1,6,6,7,3,2,6,8 +2,No opinion,4,3,No opinion,No opinion,5,1 +2,2,No opinion,4,3,4,1,8 +8,8,8,8,1,8,8,8 +2,No opinion,1,3,8,7,No opinion,8 +2,3,1,3,No opinion,No opinion,5,4 +4,8,7,1,5,6,3,2 +1,5,2,4,7,3,6,8 +8,2,8,8,1,8,8,8 +8,8,8,2,8,8,3,1 +3,8,1,2,8,8,8,8 +3,8,1,2,4,8,8,5 +1,4,8,2,8,6,7,3 +3,No opinion,5,4,No opinion,2,1,8 diff --git a/events/elections/2018/OWNERS b/events/elections/2018/OWNERS new file mode 100644 index 000000000..d4c653e86 --- /dev/null +++ b/events/elections/2018/OWNERS @@ -0,0 +1,8 @@ +reviewers: + - castrojo + - idvoretskyi + - parispittman +approvers: + - castrojo + - idvoretskyi + - parispittman diff --git a/events/elections/2018/README.md b/events/elections/2018/README.md new file mode 100644 index 000000000..fee5b758c --- /dev/null +++ b/events/elections/2018/README.md @@ -0,0 +1,155 @@ +# 2018 VOTERS GUIDE - KUBERNETES STEERING COMMITTEE ELECTION + +## Purpose + +The role of this election is to fill out the three (3) seats due for +reelection this year on the [Kubernetes Steering Committee]. Each elected +member will serve a two (2) year term. + +## Background + +This election will shape the future of Kubernetes as a community and project. +While SIGs and WGs help shape the technical direction of the project, the +[Steering Committee Charter] covers the health of the project and community +as a whole. Some examples of responsibilities to consider as you are deciding +whether to run or who to vote for: + +- Define, evolve, and defend the vision, values, mission, and scope of the + project. +- Define and evolve project governance structures and policies, including how + contributors become committers/maintainers, approvers, reviewers, members, + etc. +- Charter and refine policy for defining new community groups (including + Special Interest Groups, Working Groups, and Committees), and establish + transparency and accountability policies for such groups + +For more context, please see the [current steering committee backlog] or a +previous [governance meeting video] which led to this whole process. + +## Eligibility + +Please refer to the [Steering Committee Election Charter] for: + +- [eligibility for candidacy] +- [eligibility for voting] and [eligible voters] list (not in charter) + +### Schedule + +| Date | Event | +| ------------ | ------------------------ | +| August 21 | Announcement of Election | +| September 14 | Due by 11:59pm UTC: All candidate bios and voting exception forms due. | +| September 19 | Election Begins | +| October 3 | Election Closes | +| October 4 | Announcement of Results at Community Meeting | + +## Candidacy Process + +**Nomination** + +If you want to stand for election, send an email to kubernetes-dev@googlegroups.com +with the subject line "Steering Committee Nomination: Your Name (@yourgithub)". + +If you want to nominate someone else, you may do so, but PLEASE talk to them +first. + +If you wish to accept a nomination from someone else, reply to the nomination +email saying something like "I accept the nomination" + +**Endorsement** + +Once nominated, you must get the endorsement of three (3) different eligible +voters from three (3) different employers. If you are eligible to vote +yourself, you count as one of the three. + +[Eligible voters] may endorse candidates of their choosing by replying to the +candidate's nomination email saying something like "I endorse this nominee" +or "+1". + +**Running** + +Eligible candidates must submit a pull request with a biography in this +directory with their platform and intent to run. This statement is +**limited to 300 words** and must follow the format of `firstnamelastname.md`. +Please refer to the [2017 candidate bios] for examples. + +**Campaigning** + +Please refer to the [Steering Committee Election Charter] and understand +that we care deeply about [limiting corporate campaigning]. The election +officers and members of the steering committee [pledge to recuse] themselves +from any form of electioneering. + +You should be running as a "brand free" individual, based on your contribution +to the project as a member of this community, outside of whatever corporate +roles you may hold. + +## Voting Process + +Elections will be held using time-limited [Condorcet] ranking on [CIVS] +using the [Schulze method]. The top vote getters will be elected to the open +seats. + +Employer diversity is encouraged, and thus maximal representation will be +enforced as spelled out in the [Steering Committee Election Charter]. + +You will be ranking your choices of the candidates with an option for +"no opinion". In the event of a tie, a coin will be flipped. + +The election will open for voting on September 19, 2018 around 04:00pm UTC and +end two weeks after on October 3, 2018 at 01:00am UTC. You will receive an +email to the address on file at the start of the election from "Kubernetes (CIVS Poll Supervisor) ``, please whitelist if necessary. Detailed voting instructions will be addressed in email and the CIVS polling page. + +### Officers + +The Steering Committee has selected the following people as [election officers]: +- Paris Pittman, @parispittman, Google +- Ihor Dvoretskyi, @idvoretskyi, CNCF +- Jorge Castro, @castrojo, Heptio + +Please direct any questions via email to . + +### Decision + +The newly elected body will be announced in the weekly [Kubernetes Community Meeting] +on October 4, 2018. + +Following the meeting, the raw voting results and winners will be published on the +[Kubernetes Blog] + +For more information, definitions, and/or detailed election process, please refer to +the [Steering Committee Election Charter] + +## Nominees + +Name | Organization/Company | GitHub +--- | --- | -- | +[Aaron Crickenberger](aaroncrickenberger.md) | Google | [@spiffxp](https://github.com/spiffxp) | +[Quinton Hoole](quintonhoole.md) | Huawei | [@quinton-hoole](https://github.com/quinton-hoole) | +| [Stephen Augustus](stephenaugustus.md) | Red Hat | [@justaugustus](https://github.com/justaugustus) | +[Tim Pepper](timpepper.md) | VMware | [@tpepper](https://github.com/tpepper) | +[Nikhita Raghunath](nikhitaraghunath.md) | Independent | [@nikhita](https://github.com/nikhita) | +[Davanum Srinivas](davanumsrinivas.md) | Huawei | [@dims](https://github.com/dims) | +[Kris Nova](krisnova.md) | Heptio | [@kris-nova](https://github.com/kris-nova) | +[Timothy St. Clair](timothysc.md) | Heptio | [@timothysc](https://github.com/timothysc) | + +[Kubernetes Steering Committee]: https://github.com/kubernetes/steering +[Steering Committee Charter]: https://github.com/kubernetes/steering/blob/master/charter.md +[current steering committee backlog]: https://github.com/kubernetes/steering/projects/1 +[governance meeting video]: https://www.youtube.com/watch?v=ltRKXLl0RaE&list=PL69nYSiGNLP1pkHsbPjzAewvMgGUpkCnJ&index=23 + +[Steering Committee Election Charter]: https://git.k8s.io/steering/elections.md +[eligibility for voting]: https://github.com/kubernetes/steering/blob/master/elections.md#elegibility-for-voting +[eligibility for candidacy]: https://github.com/kubernetes/steering/blob/master/elections.md#elegibility-for-candidacy +[limiting corporate campaigning]: https://github.com/kubernetes/steering/blob/master/elections.md#limiting-corporate-campaigning +[pledge to recuse]: https://github.com/kubernetes/steering/blob/master/elections.md#steering-committee-and-election-officer-recusal + +[Condorcet]: https://en.wikipedia.org/wiki/Condorcet_method +[CIVS]: http://civs.cs.cornell.edu/ +[Schulze method]: https://en.wikipedia.org/wiki/Schulze_method + +[2017 candidate bios]: https://github.com/kubernetes/community/tree/master/events/elections/2017 +[election officers]: https://github.com/kubernetes/community/tree/master/events/elections#election-officers +[Kubernetes Community Meeting]: https://github.com/kubernetes/community/blob/master/events/community-meeting.md +[Kubernetes Blog]: https://kubernetes.io/blog/ +[eligible voters]: https://github.com/kubernetes/community/blob/master/events/elections/2018/voters.md diff --git a/events/elections/2018/RESULTS.md b/events/elections/2018/RESULTS.md new file mode 100644 index 000000000..519fd9eac --- /dev/null +++ b/events/elections/2018/RESULTS.md @@ -0,0 +1,31 @@ +# Results of the 2018 Steering Committee Election + +- Number of seats open: 3 (2 year term) +- Number of eligible voters: 692 +- Number of votes cast: 307 +- Turnout: 44% + +[Raw ballot data](BALLOTS.csv) + +## Results + +The final ranking, using the "Schulze" Condorcet completion, is as follows: + +1. Aaron Crickenberger +2. Timothy St. Clair +3. Davanum Srinivas +4. Nikhita Raghunath +5. Kris Nova +6. Quinton Hoole +7. Stephen Augustus +8. Tim Pepper + +## Winners + +The winners of the open seats are as follows: + +Two year term: + +1. Aaron Crickenberger +2. Timothy St. Clair +3. Davanum Srinivas \ No newline at end of file diff --git a/events/elections/2018/aaroncrickenberger.md b/events/elections/2018/aaroncrickenberger.md new file mode 100644 index 000000000..feefe1457 --- /dev/null +++ b/events/elections/2018/aaroncrickenberger.md @@ -0,0 +1,50 @@ +# Aaron Crickenberger + +I can be reached as [@spiffxp] on github, slack, gmail, linkedin, twitter, soundcloud, etc + +## How I contribute + +I helped found [the kubernetes/community repo](https://github.com/kubernetes/community/pull/3). + +I co-founded [SIG Testing]. I regularly participate in SIGs that have impact across the project: [SIG Architecture], [SIG Contributor Experience], and [SIG Release]. I attend the weekly Kubernetes Community meetings as Aaron of SIG Beard. + +I have participated in every Kubernetes release since v1.4, except v1.11. I have drafted release notes, triaged issues, provided CI signal, and simplified the process. + +In the CNCF, I participate in the [CI WG] and [Conformance WG], and have assisted with [APISnoop] and [DevStats] + +## What I have done + +You elected me to serve on the Steering Committee in 2017. Here's some of the things I did with that hat on: + +- ensured all repos in the project belong to a SIG +- ensured all repos in the project point to a single code of conduct +- ensured we use fewer github orgs, managed by fewer people, using documented policies +- helped onboard the code of conduct committee +- ran over half of the steering committee meetings I attended +- updated the community on steering committee activity +- reviewed SIG charters + +Positions I have taken: + +- decisions need to be made in public, documented mediums +- decisions should be driven and validated by data rather than gut feel +- solve today's instance of the problem before trying to solve tommorrow's class of the problem +- the steering committee's primary responsibility is delegation of decision making authority + +## What I'll do + +[The same thing we do every night Pinky...](https://www.youtube.com/watch?v=XJYmyYzuTa8) + +## Where I work + +Google + +[@spiffxp]: https://github.com/spiffxp +[SIG Architecture]: https://git.k8s.io/community/sig-architecture +[SIG Contributor Experience]: https://git.k8s.io/community/sig-contributor-experience +[SIG Release]: https://git.k8s.io/community/sig-release +[SIG Testing]: https://git.k8s.io/community/sig-testing +[APISnoop]: https://github.com/cncf/apisnoop +[CI WG]: https://github.com/cncf/wg-ci +[Conformance WG]: https://github.com/cncf/k8s-conformance/blob/master/README-WG.md +[DevStats]: https://github.com/cncf/devstats diff --git a/events/elections/2018/davanumsrinivas.md b/events/elections/2018/davanumsrinivas.md new file mode 100644 index 000000000..b8d0724bb --- /dev/null +++ b/events/elections/2018/davanumsrinivas.md @@ -0,0 +1,38 @@ +# Davanum Srinivas + +You may know me as [@dims] on github/slack/twitter. + +## How I contribute / What have i done + +Help nudge things along in Issues and PRs in the main k/k repository. + +Filed issues, worked on features, fixed bugs as well. + +Regularly participate in various cross cutting SIGs like Architecture, Contrib-Ex, Testing, Release etc. + +For various releases i have helped with triaging issues, maintain milestones for PRs and Issues, dig into CI failures etc. + +I like to research old outstanding issues that bother a lot of users and try to come up solutions. + +Help with things that hinder the contribution process for folks who do not work full time on kubernetes and try to pitch in to make it better for them. + +Specific items i have helped drive: +- breaking the openstack cloud provider code into a separate repository and setting up CI jobs including conformance tests. +- bootstrapping the cluster-api-provider for openstack +- enabling multi-arch support for conformance tests and release artifacts. + +## What i would like to do + +Having been part of various Open Source projects and foundations i would like to ensure that Kubernetes will be vibrant and resilient over the ups and downs of the hype curve. + +We are currently optimized for large-ish teams with full time contributors and i am keen on improving participation of individuals who are occasional contributors but with real world needs. + +I am helping with the move of our infrastructure related assets into CNCF and would love to see us as a community being able to make releases and publish images / release artifacts without having to be an employee of a specific company. + +Build better bridges with the broader ecosystems and other open source projects and teach/learn from each other. + +## Where I work + +Huawei + +[@dims]: https://github.com/dims diff --git a/events/elections/2018/krisnova.md b/events/elections/2018/krisnova.md new file mode 100644 index 000000000..07a1c322f --- /dev/null +++ b/events/elections/2018/krisnova.md @@ -0,0 +1,28 @@ +

+

Kris Nova

+ +More about [me](https://github.com/kris-nova/me) + +## Why? + +I have been steadily contributing to Kubernetes since 2016, and have had a lot of success with contributing to the project. +I help organize sig-aws, founded the cluster API working group with sig-cluster-lifecycle, and have have helped usher in 20+ contributors to the project via mentoring and technical guidance. +I am a software engineer by trade, who has spent years building production systems and keeping them online. That is why I fell in love with Kubernetes - finally some folks doing it right. +Being in the steering committee would be an honor for me because it would encapsulate my 3 natural ways I contribute to the project already for my day job: + +1) Project management +2) Speaking for the software AND the humans +3) Pride in the tools we build + +## What I will do + +I won't come up with some long list of things that I hope to accomplish because I don't think that is realistic. + +If I am elected to the steering committee there are 3 things (or words) I hope to adhere to during my time on the committee: + +- Calm + - I hope to keep the project productive and peaceful. I have yet to find any situation in software that can't be managed by level headed thinking and finding a positive spin on things. +- Clever + - Regardless of the constraints, I love solving problems -- and finding new ways to approach them. It gives me energy, and probably explains why I love mountaineering as much as I do. +- Caring + - Open source needs more empathy. Every team, company, contributor, or org is different. It takes a special mindset to be able to consider other's needs as well as your own. diff --git a/events/elections/2018/nikhitaraghunath.md b/events/elections/2018/nikhitaraghunath.md new file mode 100644 index 000000000..d2e258b03 --- /dev/null +++ b/events/elections/2018/nikhitaraghunath.md @@ -0,0 +1,53 @@ +# Nikhita Raghunath + +- GitHub: [nikhita](https://github.com/nikhita) +- Twitter: [TheNikhita](https://twitter.com/TheNikhita) +- Employment: Independent + +## Why Me + +I have already been helping the Steering Committee with tasks like +[License Auditing and Remediation](https://github.com/kubernetes/sig-release/issues/223) +and Ensuring that all Kubernetes repositories have +[proper contributing guides](https://github.com/kubernetes/steering/issues/28#issuecomment-416821430). + +Being a Steering Committee member sometimes involves doing the "unexciting and +boring" parts of maintaining a project. I have never shied away from such +tasks and have been regularly contributing with lots of "unglamorous" work. + +If given a chance, I would love to do more chopping wood and carrying water +for the project! :) + +## What I do + +- I started contributing as a +[Google Summer of Code intern](https://github.com/nikhita/gsoc-meta-k8s). +I had a wonderful experience and wanted to give back - now, I help run the +[Google Summer of Code](https://github.com/cncf/soc) and [Outreachy](https://github.com/kubernetes/community/blob/0ec68604d00fe99b4be6519800a806df15d55674/sig-cli/outreachy.md) +internship programs for Kubernetes! + +- I mainly work with SIG API Machinery and focus on the extensibility of the +Kubernetes API through CRDs. I have written [design](https://github.com/kubernetes/community/pull/708/) +[proposals](https://github.com/kubernetes/community/pull/913) +and authored several features regarding them. +Apart from this, I work on the release process for client-go. + +- I also work with SIG CLI, SIG Contributor Experience and +sometimes with SIG Release. + +- I can be seen [tinkering with prow plugins](https://github.com/kubernetes/test-infra/pulls?utf8=%E2%9C%93&q=is%3Apr+author%3Anikhita) +and triaging issues to help improve the contributor experience. + +- I also love adding emojis in Slack and GitHub reviews so that it remains a +friendly environment for everyone! :rainbow: + + +## What I will do + +- Nurture an inclusive, diverse, and open community +- Create developer guides to facilitate knowledge transfer from core contributors +- Improve reviewer and approver scalability +- Make the contributing process easier for new-comers +- Create codified processes for license auditing +- Find homes for unowned areas in the project +- Drive [SIG charters](https://github.com/kubernetes/steering/issues/31) to completion diff --git a/events/elections/2018/quintonhoole.md b/events/elections/2018/quintonhoole.md new file mode 100644 index 000000000..416e8f658 --- /dev/null +++ b/events/elections/2018/quintonhoole.md @@ -0,0 +1,53 @@ +# Quinton Hoole + +- Github: [quinton-hoole](https://github.com/quinton-hoole) + +# About Me + +- Technical Vice President, [Cloud +Computing](https://www.huaweicloud.com/en-us/) at [Huawei +Technologies](https://www.huawei.com/us/press-events/annual-report/2017) +(180,000 employees globally, US$88BN annual revenue (2017), 17.3% +annual revenue growth). I oversee all things cloud +computing, and also our open source projects and contributions. +- Elected member, [CNCF Technical Oversight Committee](https://github.com/cncf/toc) ("TOC"). +- Founding engineer of [Amazon EC2](https://aws.amazon.com/ec2/) (2005-2010). +- Lead engineer at Nimbula.com (2010-2012), a Cloud IaaS +startup which was acquired by Oracle in 2013. +- Google (2012-2016), Technical Lead and Manager of +Ads Serving SRE, Engineering Lead on Kubernetes. + +Prior to 2005, I co-founded two startups (one in the online travel +industry, the other in financial services), on both of which I served +as lead techie until they were acquired by public companies. I have +also worked as a consultant, contractor and technical leader in the +telco, financial and retail industries. + +I have an M.Sc in Computer Science. + +# Highlights of What I've done on Kubernetes thus far + +1. steering committee member since October 2017. +2. active contributor to [SIG-Architecture](https://github.com/kubernetes/community/tree/master/sig-architecture). +3. lead [SIG-Multicluster](https://github.com/kubernetes/community/tree/master/sig-multicluster) +4. early lead getting CI Testing [working effectively](https://github.com/kubernetes/community/blob/master/contributors/devel/writing-good-e2e-tests.md), critical to v1.0 launch. +5. Helped [SIG-Scalability set key +objectives](https://github.com/kubernetes/community/blob/master/sig-scalability/goals.md). + +# How I Hope to Serve You + +I strongly believe that Cloud Computing will continue to change the world in profound ways, +and that Kubernetes is a key catalyst of that change. + +I believe that we need to create both a +thriving, collaborative community, and freaking awesome software that +people love to use, everywhere. So I'd +like to offer my broad and deep experience and passion to help +us get there. + +More specifically: + +- ensure that Kubernetes remains a fun place to develop stuff that + people love to use. +- incentivize constructive, productive and sustainable progress. +- protect what we build from bad things happening. diff --git a/events/elections/2018/stephenaugustus.md b/events/elections/2018/stephenaugustus.md new file mode 100644 index 000000000..51aba42a3 --- /dev/null +++ b/events/elections/2018/stephenaugustus.md @@ -0,0 +1,57 @@ +# Stephen Augustus + +## Let's connect! + +I'm [@justaugustus] on GitHub, Kubernetes Slack, and CNCF Slack. + +Reach me on the internet: +- [Twitter] +- [LinkedIn] +- [Keybase] +- [just.agst.us] + +## How I got involved with Kubernetes... + +In 2015, I worked at a startup that was just starting to dip their toes into containerization. We wanted to find a platform that was extensible, supportable, and had a high rate of community adoption. + +Enter Kubernetes. + +I drove the initiative to rebuild our infrastructure on Kubernetes, primarily using CoreOS tooling. + +Fast-forward a few years to my tenure at CoreOS. It was my first time directly contributing to open source technology. + +I'm hooked now. I'm so enraptured with you, the community, that makes this project so vibrant and successful. + +## How I serve the community... + +In all I do, I try my best to find ways to improve the project through understanding and elucidating our governance principles. + +Currently, I serve as: +- Product Management Chair +- Features Lead for the Kubernetes 1.12 Release Team +- SIG Azure Chair + +I also shadowed the Features role for the Kubernetes 1.11 release cycle. + +## What I plan to do as a Steering Committee member... + +- Strive to continue removing friction from the contribution process, especially for new contributors +- Mature processes that increase our reviewer / approver base +- Drive deeper adoption of the [KEP] process project-wide +- Nurture efforts that support underrepresented / marginalized groups in technology + +## Where I work... + +Red Hat, with a CoreOS heart. + +--- + +### Thanks for taking the time to read this. I'm humbled and honored to be considered for Steering Committee! :) + + +[@justaugustus]: https://github.com/justaugustus +[just.agst.us]: https://just.agst.us/ +[KEP]: https://git.k8s.io/community/keps +[Keybase]: https://keybase.io/justaugustus +[LinkedIn]: https://www.linkedin.com/in/stephenaugustus +[Twitter]: https://twitter.com/stephenaugustus \ No newline at end of file diff --git a/events/elections/2018/timothysc.md b/events/elections/2018/timothysc.md new file mode 100644 index 000000000..7aee75fb2 --- /dev/null +++ b/events/elections/2018/timothysc.md @@ -0,0 +1,23 @@ +# Timothy St. Clair + +- GitHub/Slack: [@timothysc](https://github.com/timothysc) +- Email: tstclair@heptio.com +- Twitter: [@timothysc](https://twitter.com/timothysc) + +## Background + +I've been involved in the Kubernetes project since the very beginning, and have worked with plethora of open source communities and projects for more then 10+ years. During my tenure on the project, I've been lucky enough to meet a number of great folks and have worked on various roles in the kubernetes community: + +- **Current Steering Community Member** +- SIG Cluster Life-cycle & Testing (Lead) +- CNCF Conformance working group member (on-going) +- SIG Scheduling & Scale (Emeritus Lead) +- SIG API Machinery, Node (Contributor) + +## Why I want to be on the Steering Committee (Community Empowerment v2) + +When I had first ran for steering a year ago, I had a differing view of what steering committee position would entail, contrasted with what it actually is. A steering committee position is responsible for establishing, and refining, a distributed governance model that empowers different stakeholders in the community. My primary objective in re-running for steering, is to continue the work that we have started in helping to rationalize the communities organizational structure, and to empower the different SIGs to take ownership rights of different areas. + +## Where I work + +Staff Engineer @Heptio diff --git a/events/elections/2018/timpepper.md b/events/elections/2018/timpepper.md new file mode 100644 index 000000000..25acd8a14 --- /dev/null +++ b/events/elections/2018/timpepper.md @@ -0,0 +1,45 @@ +# Tim Pepper + +I am [tpepper](https://github.com/tpepper) on GitHub, Slack, Gmail, +and I tweet about association football and tech @pythomit. + +## What I've Done + +I've been a user of and contributor to open source since the late +1990's, but I represent the newcomer in the Kubernetes community, +having been active for about a year now. Contributions include: + +* SIG Contributor Experience: developer documentation improvements and helping + with new contributor activities at KubeCon (Copenhagen, Shanghai, Seattle) +* SIG Release: 1.12 release team lead; bug triage on 1.10 and 1.11 release teams + +My past technical experience spans linux distribution +build/release/test/update and low level linux drivers and embedded +kernel work. + +Outside of tech, servant leadership is part of who I am. I've served +on multiple advisory boards for non-profit organizations. + +## What I'll Do + +I'm passionate about open source collaboration. As the Kubernetes +community grows it is important that the project scale to efficiently +include a more diverse set of stakeholders. I will advocate for +improved documentation, processes and automation for our growing +community. + +I've witnessed first hand the past dramatic growth of the linux +kernel and OpenStack communities and how those communities struggled +through change. I advocate for solutions that enable vendors, +distributions and hosting platforms to deliver their value, but I +also will work to protect the essence of Kubernetes. Whether you +call Kubernetes "the linux of cloud" or the "distributed POSIX of +cloud" or some other metaphor expressing Kubernetes' status as +today's orchestrator of choice, I will foster a future where +Kubernetes has not fractured into a forest of unique deployments +and rather conformance testing provides a strong statement of +Kubernetes cross cloud portability. + +## Where I Work + +VMware's Open Source Technology Center diff --git a/events/elections/2018/voters.md b/events/elections/2018/voters.md new file mode 100644 index 000000000..d23b7d35e --- /dev/null +++ b/events/elections/2018/voters.md @@ -0,0 +1,697 @@ +## 2018 Steering Committee Election +### Eligible Voters List + +The eligible voter process can be found in the steering committee [elections.md](https://git.k8s.io/steering/elections.md) doc. This list was pulled as of August 15, 2018 and updated on September 16, 2018 with the first round of exception voting form results. Another update to follow from another round of forms. + +**GitHub ID:** +1. aanm +1. aaron-prindle +1. aaronlevy +1. abgworrall +1. abhi +1. abhinandanpb +1. abiogenesis-now +1. abitrolly +1. abrarshivani +1. AdamDang +1. adelton +1. adnavare +1. adohe +1. afbjorklund +1. agau4779 +1. aglitke +1. ahmetb +1. AishSundar +1. ajaeger +1. ajitak +1. akutz +1. aledbf +1. aleksandra-malinowska +1. alexandercampbell +1. alexcontini +1. alinbalutoiu +1. allencloud +1. alrs +1. alvaroaleman +1. amwat +1. andrewrynhard +1. andrewsykim +1. andyxning +1. andyzhangx +1. anfernee +1. angao +1. anguslees +1. ant31 +1. antoineco +1. antoniaklja +1. anubhakushwaha +1. aoxn +1. apelisse +1. ArchiFleKs +1. arschles +1. ash2k +1. Atoms +1. austbot +1. aveshagarwal +1. avoidik +1. awly +1. ayushpateria +1. balajismaniam +1. BaluDontu +1. bart0sh +1. baude +1. bboreham +1. BenHall +1. BenTheElder +1. bep +1. bertinatto +1. bgrant0607 +1. bhack +1. blakebarnett +1. bmoyles0117 +1. bobbypage +1. bogdando +1. bowei +1. Bradamant3 +1. bradbeam +1. bradtopol +1. brahmaroutu +1. brancz +1. brendandburns +1. bryk +1. bsalamat +1. bskiba +1. bsteciuk +1. c-knowles +1. cadmuxe +1. caesarxuchao +1. calebamiles +1. camilb +1. CaoShuFeng +1. carlory +1. carolynvs +1. caseydavenport +1. castrojo +1. cblecker +1. ccding +1. cdenneen +1. cdrage +1. ceshihao +1. cevich +1. chadswen +1. chakri-nelluri +1. chapsuk +1. charrywanganthony +1. cheftako +1. cheld +1. chenchun +1. chenhonggc +1. chenhuan12 +1. chenopis +1. chenpengdev +1. chentao1596 +1. chenyb4 +1. childsb +1. choury +1. chrislovecnm +1. chrisohaver +1. chrissound +1. chrisz100 +1. chuckha +1. cimomo +1. cjcullen +1. cjwagner +1. clamoriniere1A +1. cmluciano +1. cody-clark +1. coffeepac +1. cofyc +1. colemickens +1. ConnorDoyle +1. containscafeine +1. countspongebob +1. craigbox +1. crassirostris +1. crimsonfaith91 +1. Cynerva +1. damemi +1. danderson +1. danehans +1. danielfm +1. dankohn +1. danwinship +1. darkowlzz +1. dashpole +1. david-mcmahon +1. davidhao3300 +1. davidmccormick +1. davidopp +1. davidz627 +1. dcbw +1. dchen1107 +1. dcowden +1. ddebroy +1. deads2k +1. deepak-vij +1. deitch +1. dekkagaijin +1. derekwaynecarr +1. destijl +1. detiber +1. dghubble +1. dhilipkumars +1. dhirajh +1. diazjf +1. diegs +1. dims +1. DirectXMan12 +1. discordianfish +1. divyenpatel +1. dixudx +1. djsly +1. dlorenc +1. dnardo +1. dohnto +1. dougm +1. drinktee +1. droot +1. duglin +1. dungeonmaster18 +1. easeway +1. edisonxiang +1. edsantiago +1. elementyang +1. ElvinEfendi +1. enisoc +1. enj +1. eparis +1. ericchiang +1. erictune +1. eriknelson +1. erinboyd +1. errordeveloper +1. euank +1. fabiand +1. fabianofranz +1. fabriziopandini +1. fanzhangio +1. fedebongio +1. Fedosin +1. feiskyer +1. fejta +1. felipejfc +1. FengyunPan +1. FengyunPan2 +1. fgrzadkowski +1. figo +1. filbranden +1. filmil +1. fisherxu +1. flaper87 +1. floreks +1. flx42 +1. flyingcougar +1. fntlnz +1. font +1. foxish +1. foxyriver +1. fqsghostcloud +1. frapposelli +1. freehan +1. frobware +1. frodenas +1. fturib +1. G-Harmon +1. gabrielfsousa +1. gambol99 +1. gbraad +1. geojaz +1. ggaaooppeenngg +1. giuseppe +1. gmarek +1. gnufied +1. gogeof +1. gonzolino +1. grantr +1. grayluck +1. grebois +1. gregory-m +1. grodrigues3 +1. guangxuli +1. guineveresaenger +1. guoshimin +1. gyliu513 +1. hangyan +1. hanxiaoshuai +1. harsh-px +1. hchenxa +1. heckj +1. hh +1. hjacobs +1. hoegaarden +1. hogepodge +1. hongchaodeng +1. hswong3i +1. huang-jy +1. Huang-Wei +1. huangjiuyuan +1. huguesalary +1. humblec +1. huzhengchuan +1. hyperbolic2346 +1. hzxuzhonghu +1. iaguis +1. ianchakeres +1. ideahitme +1. idealhack +1. idvoretskyi +1. igorpeshansky +1. ihmccreery +1. ihoegen +1. ijc +1. iMartyn +1. immutableT +1. ingvagabund +1. ipuustin +1. irfanurrehman +1. ironcladlou +1. islinwb +1. itowlson +1. itskingori +1. ixdy +1. j-griffith +1. jamiehannaford +1. janetkuo +1. jaredbhatti +1. jarrpa +1. jayunit100 +1. jbartosik +1. jbeda +1. jberkhahn +1. jberkus +1. jboyd01 +1. jcbsmpsn +1. jdumars +1. jeefy +1. jeffvance +1. jennybuckley +1. jeremyrickard +1. jessfraz +1. jessicaochen +1. jhorwit2 +1. jianglingxia +1. JiangtianLi +1. jianzhangbjz +1. jiaxuanzhou +1. jiayingz +1. jimangel +1. jingax10 +1. jingxu97 +1. jinzhejz +1. jiulongzaitian +1. jlewi +1. joejulian +1. joelsmith +1. johanneswuerbach +1. johnbelamaric +1. jonyhy96 +1. jorge07 +1. jpbetz +1. jpds +1. jpeeler +1. jsafrane +1. jsravn +1. juanvallejo +1. justaugustus +1. justinsb +1. k82cn +1. kad +1. kadel +1. kadisi +1. kairen +1. karan +1. karataliu +1. kargakis +1. KarolKraskiewicz +1. KashifSaadat +1. kawych +1. kbarnard10 +1. KeithTt +1. kevin-wangzefeng +1. kevtaylor +1. kfox1111 +1. kgolab +1. kgrygiel +1. khenidak +1. kibbles-n-bytes +1. kiwik +1. klausenbusk +1. kondapally1989 +1. kow3ns +1. krancour +1. kris-nova +1. krmayankk +1. krousey +1. krzysied +1. krzysztof-jastrzebski +1. krzyzacy +1. ktsakalozos +1. kumarganesh2814 +1. lavalamp +1. lcfang +1. leblancd +1. liangwenguo +1. lichen2013 +1. lichuqiang +1. liggitt +1. lijianfeng1993 +1. lingxiankong +1. linki +1. linyouchong +1. Lion-Wei +1. liu-sheng +1. liubin +1. Liujingfang1 +1. liyinan926 +1. lizrice +1. liztio +1. loburm +1. losipiuk +1. louyihua +1. lovejoy +1. lpabon +1. lsm5 +1. lucperkins +1. lukaszgryglicki +1. luksa +1. luxas +1. lwander +1. m1093782566 +1. maciaszczykm +1. MaciekPytel +1. madhanrm +1. madhusudancs +1. mahdix +1. makocchi-git +1. maleck13 +1. manics +1. markthink +1. marpaia +1. marquiz +1. marun +1. MasayaAoyama +1. Mashimiao +1. mattfarina +1. matthyx +1. mattjmcnaughton +1. mattkelly +1. mattmoor +1. mattmoyer +1. mattymo +1. max8899 +1. maxlaverse +1. mbert +1. mbohlool +1. mborsz +1. mbssaiakhil +1. medinatiger +1. mengqiy +1. MengZn +1. mfojtik +1. mgdevstack +1. MHBauer +1. mheon +1. miaoyq +1. micahhausler +1. michelle192837 +1. michelleN +1. michmike +1. mikebrow +1. mikebryant +1. mikedanese +1. mikesplain +1. MikeSpreitzer +1. mikkeloscar +1. mindprince +1. Miouge1 +1. mirake +1. mirwan +1. misterikkit +1. mistyhacks +1. mithrav +1. mkimuram +1. mkjelland +1. mkumatag +1. mkurylec +1. mlmhl +1. mml +1. mohammedzee1000 +1. monopole +1. mrbobbytables +1. mrhillsman +1. MrHohn +1. mrIncompetent +1. mrunalp +1. ms4720 +1. msau42 +1. mtanino +1. mtaufen +1. mtrmac +1. mumoshu +1. munnerz +1. mvladev +1. mwielgus +1. mythi +1. n3wscott +1. nak3 +1. nalind +1. nashasha1 +1. ncdc +1. nckturner +1. nebril +1. negz +1. nehadhawan +1. neolit123 +1. nickchase +1. NickrenREN +1. nicksardo +1. nikhiljindal +1. nikhita +1. nilebox +1. niuzhenguo +1. njuettner +1. oilbeater +1. okartau +1. onyiny-ang +1. oomichi +1. orainxiong +1. ostromart +1. oulinbao +1. p0lyn0mial +1. parispittman +1. PatrickLang +1. paulangton +1. pbarker +1. pcm32 +1. pengx17 +1. perotinus +1. philips +1. php-coder +1. phsiao +1. pigletfly +1. pineking +1. Pingan2017 +1. piosz +1. pipejakob +1. pires +1. pkelleratwork +1. pmichali +1. pmorie +1. pohly +1. porridge +1. pospispa +1. prameshj +1. praseodym +1. pweil- +1. pwittrock +1. Q-Lee +1. qedrakmar +1. qhuynh96 +1. qingling128 +1. qiujian16 +1. qmfrederik +1. Quentin-M +1. quinton-hoole +1. r2d4 +1. r7vme +1. radhikapc +1. raffaelespazzoli +1. Raffo +1. Rajakavitha1 +1. rajansandeep +1. rajatjindal +1. Random-Liu +1. ravisantoshgudimetla +1. rdodev +1. rdrgmnzs +1. redbaron +1. RenaudWasTaken +1. resouer +1. rf232 +1. rhatdan +1. rikatz +1. rithujohn191 +1. riverzhang +1. rmmh +1. roberthbailey +1. robinpercy +1. roffe +1. rohitjogvmw +1. rootfs +1. rosti +1. roycaihw +1. rphillips +1. rpothier +1. rramkumar1 +1. rrati +1. rsdcastro +1. rsmitty +1. runcom +1. ryanmcginnis +1. saad-ali +1. sakshamsharma +1. sameo +1. satyasm +1. sbezverk +1. sboeuf +1. schylek +1. ScorpioCPH +1. screeley44 +1. seans3 +1. sebastienvas +1. sebgoa +1. seh +1. serathius +1. sergeylanzman +1. sethpollack +1. shadycuz +1. shashidharatd +1. shiywang +1. shubheksha +1. shyamjvs +1. sigma +1. silveryfu +1. sjenning +1. smarterclayton +1. soltysh +1. spiffxp +1. spxtr +1. spzala +1. squeed +1. staebler +1. stealthybox +1. stevekuznetsov +1. StevenACoffman +1. steveperry-53 +1. stewart-yu +1. Stono +1. stp-ip +1. sttts +1. superbrothers +1. supereagle +1. surajnarwade +1. surajssd +1. szuecs +1. tallclair +1. tamalsaha +1. tanshanshan +1. tcharding +1. tengqm +1. tfogo +1. tg123 +1. thockin +1. tianshapjq +1. timoreimann +1. timothysc +1. tintoy +1. tkulczynski +1. tmjd +1. tnozicka +1. tomplus +1. TomSweeneyRedHat +1. tonglil +1. tossmilestone +1. tpepper +1. tsmetana +1. tvi +1. u2takey +1. umohnani8 +1. vaikas-google +1. vainu-arto +1. vantuvt +1. vbatts +1. vbmade2000 +1. verb +1. verult +1. vfreex +1. victorgp +1. vikaschoudhary16 +1. VinceMD +1. vineet-garg +1. vishh +1. vkamra +1. vladimirvivien +1. wackxu +1. wanghaoran1988 +1. wangxy518 +1. wangzhen127 +1. WanLinghao +1. warmchang +1. weikinhuang +1. weiwei04 +1. wenjiaswe +1. wenjun93 +1. wenlxie +1. wgliang +1. whereisaaron +1. WIZARD-CXY +1. wking +1. wlan0 +1. wojtek-t +1. wongma7 +1. woopstar +1. x13n +1. xchapter7x +1. xiang90 +1. xiangpengzhao +1. xianlubird +1. xiaosuiba +1. xiaoxubeii +1. xilabao +1. xing-yang +1. xingzhou +1. xlgao-zju +1. xmudrii +1. xsgordon +1. xuhuilong +1. yanxuean +1. yastij +1. yguo0905 +1. yliaog +1. yue9944882 +1. yuexiao-wang +1. yujuhong +1. yulng +1. yutongz +1. YuxiJin-tobeyjin +1. zacharysarah +1. zengchen1024 +1. zetaab +1. zhangqx2010 +1. zhangxiaoyu-zidif +1. zhouhaibing089 +1. zioproto +1. zjj2wry +1. zmerlynn +1. zouyee +1. zparnold diff --git a/events/elections/OWNERS b/events/elections/OWNERS new file mode 100644 index 000000000..e85dbf31d --- /dev/null +++ b/events/elections/OWNERS @@ -0,0 +1,2 @@ +labels: + - committee/steering diff --git a/events/elections/README.md b/events/elections/README.md index 14a1ea3f9..f3ad473a0 100644 --- a/events/elections/README.md +++ b/events/elections/README.md @@ -1,34 +1,41 @@ -## Kubernetes Elections +## Kubernetes Elections -This document will outline how to conduct a Kubernetes Steering Committee Election. See the [Steering Committee Charter](https://git.k8s.io/steering/charter.md) for more information of how the committee decides when to have an election, the method, and the maximal representation. +This document will outline how to conduct a Kubernetes Steering Committee +Election. See the [Steering Committee Election Charter](https://git.k8s.io/steering/elections.md) +for more information of how the committee decides when to have elections, +eligibility for voting, eligibility for candidacy, maximal representation, etc. -## Steering Committee chooses Election Deadlines and Officers +## Steering Committee chooses Election Officers - Steering Committee selects the Election Officers -- Dates should be in UTC time, use a [world clock service](https://www.timeanddate.com/worldclock/fixedtime.html?msg=Election+Test&iso=20181101T00&p1=%3A&ah=10) in documentation and email announcements so that end users see the correct time and date based on where they live. +- Dates should be in UTC time, use a [world clock service](https://www.timeanddate.com/worldclock/fixedtime.html?msg=Election+Test&iso=20181101T00&p1=%3A&ah=10) in documentation and email announcements so that end users see the correct time and date based on where they live. +- The steering committee was structured in a way so that it does not turn over all at once with staggered terms, therefore all new elections are for two(2) year terms. -### SC Selects the following dates: +### Election Officers select the following dates - Recommend the month of October to not collide with a release or end of a quarter. - Nomination and Voter Registration period start - Nomination period end (At least a two week period) - Voter Registration Deadline -- Link to voter registration process (doesn’t exist yet) - Election period start - - It takes time to create the poll in CIVS, so don’t give a specific hour, instead say “Morning of the 10th” or something vague. + - It takes time to create the poll in CIVS, so don’t give a specific hour, instead say “Morning of the 10th” or something vague. - Election period stop - - CIVS needs to be manually stopped, so an actual person needs to click for the poll to stop, so this needs to be a human friendly time. + - CIVS needs to be manually stopped, so an actual person needs to click for the poll to stop, so this needs to be a human friendly time. - Results announcement date +- Draft dates will then be passed to the Steering Committee for final approval ## Process 1. Election officers prepare the election repository - Make github.com/kubernetes/community/elections/$YEAR - - Make github.com/kubernetes/community/elections/$YEAR/README.md, this is the voter’s guide. - - Copy over the voter’s guide from the previous year. The voter’s guide is the single source of truth for the election that year! All announcements and notices should link to this document. + - Make github.com/kubernetes/community/elections/$YEAR/README.md, this is the voter’s guide. + - Copy over the voter’s guide from the previous year. The voter’s guide is the single source of truth for the election that year! All announcements and notices should link to this document. - Update with new dates, candidates, and procedures (if necessary). - - Announce to the candidates to submit PRs with their platform statement (if they desire), 300 word limit. Each platform document lives in the elections/$YEAR directory, with the voter’s guide (README.md) acting as the index. + - Make github.com/kubernetes/community/elections/$YEAR/voters.md + - Initial list is generated via the [eligibilty for voting requirements][eligibile to vote] + - Officers will update this list as voters submit the voting exemption form. + - Announce to the candidates to submit PRs with their platform statement (if they desire), 300 word limit. Each platform document lives in the elections/$YEAR directory, with the voter’s guide (README.md) acting as the index. 2. Announce voting schedule to community @@ -39,8 +46,8 @@ This document will outline how to conduct a Kubernetes Steering Committee Electi - Use [CIVS](http://civs.cs.cornell.edu/civs_create.html) to create the election, which CIVS calls a poll. Once you send out the ballots you cannot UNSEND the emails, ensure everything in the form is correct! - Name of the poll - “Kubernetes Steering Committee Election for $YEAR” -- Name of supervisor - “Kubernetes Steering Committee” -- Email - elections@kubernetes.io : Googlegroups doesn’t work here. This mail should resolve to members of the steering committee AND the election officers. +- Name of supervisor - “Kubernetes Election Officers” +- Email - community@kubernetes.io : Googlegroups doesn’t work here. This mail should resolve to members of the steering committee AND the election officers. - Date and Time: Write in the date and time the election will stop. This field is not programmatic, the election is stopped by hand, so you can write this in plain text. - Description: This election is to nominate the steering committee for the Kubernetes project. Select the three(3) candidates, by order of preference. Please see the voter's guide for more information. PLEASE NOTE: "No opinion" is also a voting option if you do not feel comfortable ranking every single candidate. - Add the candidate list to the form @@ -49,48 +56,57 @@ This document will outline how to conduct a Kubernetes Steering Committee Electi - Do not release results to all voters. - Enable detailed ballot reporting. - Allow voters to select “no opinion” for some choices. -- Click create poll, this will send elections@kubernetes.io an email with instructions. -- It will send you a link to “Poll Control”, bookmark this generated page as this is where you will add voters and also resend ballots to people if their ballot gets lost or filtered. +- Click create poll, this will send community@kubernetes.io an email with instructions. +- It will send you a link to “Poll Control”, bookmark this generated page as this is where you will add voters and also resend ballots to people if their ballot gets lost or filtered. - This page is where the “Start Poll” and “Stop Poll” buttons are, start the poll. - Paste in the registered voters and click add voters. - It will mail the ballots to the participants. - - It does duplicate detection so multiple entries are fine. -- Leave the poll open for the duration of voting. - - Remember to send a 24 hour reminder before closing the poll. + - It does duplicate detection so multiple entries are fine. +- Leave the poll open for the duration of voting. + - Remember to send a 24 hour reminder before closing the poll. ## Roles and Responsibilities: ### Steering Committee -- Select election dates +- [Recuses themselves from public election activities][election-recusal] - Select Election Officers -- Select criteria for Kubernetes Members of Standing -- Must refrain from endorsing or otherwise advocating for any candidate -- Is allowed to vote in the election +- Select criteria for who can vote in the upcoming election - Announces results of the election to the community -- Commit the results of the election to the Kubernetes Community repository +- Commit the results of the election to the Kubernetes Steering Committee repository ### Election Officers -- Must be a Kubernetes Member of Standing +- Must be [eligible to vote][eligible to vote] - Cannot be running for office in the current election -- Cannot be a current member of the steering committee -- Generates the voter guide -- Tracks candidates -- Monitors kubernetes-dev for nominations - - Keeps track of nominees in a spreadsheet - - Ensures that each nominee has the required nominations from three different employers (as stated in the charter) - - All nominations are conducted in the public, so sharing this sheet during the nomination process is encouraged -- Accepts/Reviews pull requests for the candidate platforms +- Cannot be a current member of the steering committee +- [Recuse themselves from public election activities][election-recusal] except those required to run the election + - May vote + - May answer questions about general election specifics, ie: + - Where do I find the schedule? + - How do I vote? + - Will not answer questions about specific candidates, or anything that could be construed as endorsing, ie: + - How is $candidate doing so far? (PS - we don't know anyway) + - Who are your favorite candidates? +- Recommend election dates to be approved by the Steering Committee +- Generate the voter guide and list of voters according to the criteria for that year's election +- Generate exemption form for non-code contributors to apply for voting + - Review and commit applicants to approved voter's list at least once a week until the election begins +- Track candidates +- Monitor kubernetes-dev for nominations and endorsements + - Keep track of nominees in a spreadsheet + - Ensure that each nominee has the required endorsements from three different employers (as stated in the charter) + - All nominations and endorsements are conducted in the public, so sharing this sheet during the nomination process is encouraged +- Accept/Review pull requests for the candidate platforms - The community generally assists in helping with PRs to give the candidates a quick response time - Update the community regularly via the community meeting - Post on behalf of the steering committee if necessary -- Posting deadlines and reminders to kubernetes-dev, twitter, and slack. -- Reissues ballots from CIVS to voters who might have not received their ballot. +- Post deadlines and reminders to the kubernetes blog, kubernetes-dev, twitter, and slack. +- Reissue ballots from CIVS to voters who might have not received their ballot. - Miscellaneous election related tasks as decided by the steering committee. -- Must refrain from endorsing or otherwise advocating for any candidate. -- Must refrain from discussing the election specifics during the election period. - Guard the privacy of the email addresses of voters -- It is impossible for the election officers to see the results of the election until the election ends; for purposes of transparency with the community it is encouraged to release some statistics during the election (ie. “65% of the community has voted so far!”) -- Ensure that the election results are handed over to the steering committee. -- Is allowed to vote in the election \ No newline at end of file +- It is impossible for the election officers to see the results of the election until the election ends; for purposes of transparency with the community it is encouraged to release some statistics during the election (ie. “65% of the community has voted so far!”) +- Ensure that the election results are handed over to the steering committee. + +[eligibile to vote]: https://github.com/kubernetes/steering/blob/master/elections.md#elegibility-for-voting +[election-recusal]: https://github.com/kubernetes/steering/blob/master/elections.md#steering-committee-and-election-officer-recusal diff --git a/events/office-hours.md b/events/office-hours.md index cdd443a55..0e3256047 100644 --- a/events/office-hours.md +++ b/events/office-hours.md @@ -6,8 +6,8 @@ Office Hours is a live stream where we answer live questions about Kubernetes fr Third Wednesday of every month, there are two sessions: -- European Edition: [2pm UTC](https://www.timeanddate.com/worldclock/fixedtime.html?msg=Kubernetes+Office+Hours+%28European+Edition%29&iso=20171115T14&p1=136&ah=1) -- Western Edition: [9pm UTC](https://www.timeanddate.com/worldclock/fixedtime.html?msg=Kubernetes+Office+Hours+%28Western+Edition%29&iso=20171115T13&p1=1241) +- European Edition: [2pm UTC](https://www.google.com/search?q=2pm+UTC) +- Western Edition: [9pm UTC](https://www.google.com/search?q=9pm+UTC) Tune into the [Kubernetes YouTube Channel](https://www.youtube.com/c/KubernetesCommunity/live) to follow along. @@ -25,7 +25,7 @@ Questions that aren’t addressed or need work can be punted to the next week or The hosts will do a shout out of thanks to the [current leaderboard](https://stackoverflow.com/tags/kubernetes/topusers) of SO answerers each meeting so the people helping answer questions can get some recognition. -#### What’s Ontopic +#### What’s on topic? Specific questions about Kubernetes as pertaining to the topic. Since this is a Q&A format, we’d like questions that can be answered generally. So for example: @@ -36,7 +36,7 @@ Specific questions about Kubernetes as pertaining to the topic. Since this is a - Bad: My pods aren’t coming up on a node. (Vague) - Good: My pods aren’t coming up or misbehaving, what are the debugging steps to find out the root cause? (Helps us communicate the thought process for debugging to a general audience) -#### What’s Offtopic +#### What’s off topic? Developer/Contributor questions: This event is for end users and operators, there is a separate livestream called [Meet our Contributors](/mentoring/meet-our-contributors.md) where you can ask questions about getting started contributing, participating in peer reviews, and other development topics. diff --git a/generator/README.md b/generator/README.md index b00c8f1b5..31742492c 100644 --- a/generator/README.md +++ b/generator/README.md @@ -1,11 +1,11 @@ # SIG Doc builder This folder contains scripts to automatically generate documentation about the -different Special Interest Groups (SIGs) of Kubernetes. The authoritative +different Special Interest Groups (SIGs) and Working Groups (WGs) of Kubernetes. The authoritative source for SIG information is the [`sigs.yaml`](/sigs.yaml) file in the project root. All updates must be done there. -The schema for this file should be self explanatory. However, if you need to see all the options check out the generator code in `app.go`. +The schema for this file should be self explanatory. However, if you need to see all the options, check out the generator code in `app.go`. The documentation follows a template and uses the values from [`sigs.yaml`](/sigs.yaml): @@ -16,13 +16,13 @@ The documentation follows a template and uses the values from [`sigs.yaml`](/sig **Time Zone gotcha**: Time zones make everything complicated. -And Daylight Savings time makes it even more complicated. -Meetings are specified with a time zone and we generate a link to http://www.thetimezoneconverter.com/ so that people can easily convert it to their local time zone. -To make this work you need to specify the time zone in a way that that web site recognizes. +And Daylight Saving time makes it even more complicated. +Meetings are specified with a time zone and we generate a link to http://www.thetimezoneconverter.com/ so people can easily convert it to their local time zone. +To make this work you need to specify the time zone in a way that the web site recognizes. Practically, that means US pacific time must be `PT (Pacific Time)`. `PT` isn't good enough, unfortunately. -When an update happens to the this file, the next step is generate the +When an update happens to the this file, the next step is to generate the accompanying documentation. This takes the format of three types of doc files: ``` diff --git a/generator/app.go b/generator/app.go index 3a861e282..8fb971252 100644 --- a/generator/app.go +++ b/generator/app.go @@ -103,7 +103,8 @@ type LeadershipGroup struct { type Group struct { Name string Dir string - MissionStatement string `yaml:"mission_statement"` + MissionStatement string `yaml:"mission_statement,omitempty"` + CharterLink string `yaml:"charter_link,omitempty"` Label string Leadership LeadershipGroup `yaml:"leadership"` Meetings []Meeting @@ -177,9 +178,10 @@ func getExistingContent(path string, fileFormat string) (string, error) { var funcMap = template.FuncMap{ "tzUrlEncode": tzUrlEncode, + "trimSpace": strings.TrimSpace, } -// tzUrlEncode returns an url encoded string without the + shortcut. This is +// tzUrlEncode returns a url encoded string without the + shortcut. This is // required as the timezone conversion site we are using doesn't recognize + as // a valid url escape character. func tzUrlEncode(tz string) string { diff --git a/generator/header.tmpl b/generator/header.tmpl index c84f4b7b5..14116685d 100644 --- a/generator/header.tmpl +++ b/generator/header.tmpl @@ -6,5 +6,5 @@ Please do not edit this file directly, but instead make changes to the sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> +---> {{- end -}} diff --git a/generator/sig_readme.tmpl b/generator/sig_readme.tmpl index 59bf440c1..0d4d347fa 100644 --- a/generator/sig_readme.tmpl +++ b/generator/sig_readme.tmpl @@ -2,7 +2,11 @@ # {{.Name}} Special Interest Group {{ .MissionStatement }} -{{ if .Meetings }}## Meetings +{{- if .CharterLink }} +The [charter]({{.CharterLink}}) defines the scope and governance of the {{.Name}} Special Interest Group. +{{ end }} +{{ if .Meetings -}} +## Meetings {{- range .Meetings }} * {{.Description}}: [{{.Day}}s at {{.Time}} {{.TZ}}]({{.URL}}) ({{.Frequency}}). [Convert to your timezone](http://www.thetimezoneconverter.com/?t={{.Time}}&tz={{.TZ | tzUrlEncode}}). {{- if .ArchiveURL }} @@ -58,7 +62,7 @@ The following subprojects are owned by sig-{{.Label}}: {{- range .Subprojects }} - **{{.Name}}** {{- if .Description }} - - Description: {{ .Description }} + - Description: {{ trimSpace .Description }} {{- end }} - Owners: {{- range .Owners }} @@ -84,13 +88,9 @@ The following subprojects are owned by sig-{{.Label}}: The below teams can be mentioned on issues and PRs in order to get attention from the right people. Note that the links to display team membership will only work if you are a member of the org. -The google groups contain the archive of Github team notifications. -Mentioning a team on Github will CC its group. -Monitor these for Github activity if you are not a member of the team. - -| Team Name | Details | Google Groups | Description | -| --------- |:-------:|:-------------:| ----------- | +| Team Name | Details | Description | +| --------- |:-------:| ----------- | {{- range .Contact.GithubTeams }} -| @kubernetes/{{.Name}} | [link](https://github.com/orgs/kubernetes/teams/{{.Name}}) | [link](https://groups.google.com/forum/#!forum/kubernetes-{{.Name}}) | {{.Description}} | +| @kubernetes/{{.Name}} | [link](https://github.com/orgs/kubernetes/teams/{{.Name}}) | {{.Description}} | {{- end }} {{ end }} diff --git a/generator/wg_readme.tmpl b/generator/wg_readme.tmpl index 28c5bbd10..76bd43875 100644 --- a/generator/wg_readme.tmpl +++ b/generator/wg_readme.tmpl @@ -2,7 +2,11 @@ # {{.Name}} Working Group {{ .MissionStatement }} -{{ if .Meetings }}## Meetings +{{- if .CharterLink }} +The [charter]({{.CharterLink}}) defines the scope and governance of the {{.Name}} Working Group. +{{ end }} +{{ if .Meetings -}} +## Meetings {{- range .Meetings }} * {{.Description}}: [{{.Day}}s at {{.Time}} {{.TZ}}]({{.URL}}) ({{.Frequency}}). [Convert to your timezone](http://www.thetimezoneconverter.com/?t={{.Time}}&tz={{.TZ | tzUrlEncode}}). {{- if .ArchiveURL }} diff --git a/github-management/OWNERS b/github-management/OWNERS new file mode 100644 index 000000000..cab8996b6 --- /dev/null +++ b/github-management/OWNERS @@ -0,0 +1,13 @@ +reviewers: + - calebamiles + - cblecker + - fejta + - grodrigues3 + - idvoretskyi + - spiffxp +approvers: + - cblecker + - grodrigues3 +labels: + - sig/contributor-experience + - area/github-management diff --git a/github-management/README.md b/github-management/README.md new file mode 100644 index 000000000..76d206f0f --- /dev/null +++ b/github-management/README.md @@ -0,0 +1,112 @@ +# GitHub Management + +The Kubernetes project uses Github extensively to store and organize code, +manage issues and documentation, and provide a consistent contributor flow. + +With the size and growth of the Kubernetes project, management of our Github +footprint has historically been a challenge. We have created a number of +policies to reduce friction and ease administration of our Github repositories +and organizations. We have also created a number of tools to automate setup and +enforcement of these policies. + +These polices are overseen by the +[GitHub Management subproject](subproject-responsibilites.md) of the Contributor +Experience Special Interest Group. + +## Guides +- [Opening a request for assistance with GitHub](opening-a-request.md) +- [Organization Owners Guide](org-owners-guide.md) +- [Repository Creation Guidelines](kubernetes-repositories.md) +- [Setting up the CNCF CLA Check](setting-up-cla-check.md) +- [GitHub Permissions](permissions.md) + +## GitHub Administration Team + +In order to manage the various organizations that the Kubernetes project owns, +we have a GitHub Administration team that is responsible for carrying out the +various tasks. + +This team (**[@kubernetes/owners](https://github.com/orgs/kubernetes/teams/owners)**) is as follows: +* Aaron Crickenberger (**[@spiffxp](https://github.com/spiffxp)**, US Pacific) +* Caleb Miles (**[@calebamiles](https://github.com/calebamiles)**, US Pacific) +* Christoph Blecker (**[@cblecker](https://github.com/cblecker)**, CA Pacific) +* Erick Fejta (**[@fejta](https://github.com/fejta)**, US Pacific) +* Garrett Rodrigues (**[@grodrigues3](https://github.com/grodrigues3)**, US Pacific) +* Ihor Dvoretskyi (**[@idvoretskyi](https://github.com/idvoretskyi)**, UA Eastern European) + +This team is responsible for holding Org Owner privileges over all the active +Kubernetes orgs, and will take action in accordance with our polices and +procedures. All members of this team are subject to the Kubernetes +[security embargo policy](https://git.k8s.io/sig-release/security-release-process-documentation/security-release-process.md#embargo-policy). + +Nominations to this team will come from the Contributor Experience SIG, and +require confirmation by the Steering Committee before taking effect. Time zones +and country of origin should be considered when selecting membership, to ensure +sufficient after North American business hours and holiday coverage. + +### Other roles + +#### New Membership Coordinator + +New Membership Coordinators help serve as a friendly face to newer, prospective +community members, guiding them through the +[process](new-membership-procedure.md) to request membership to a Kubernetes +GitHub organization. + +Our current coordinators are: +* Bob Killen (**[@mrbobbytables](https://github.com/mrbobbytables)**, US Eastern) +* Stephen Augustus (**[@justaugustus](https://github.com/justaugustus)**, US Eastern) + +## Project Owned Organizations + +The following organizations are currently known to be part of the Kubernetes +project + +### Actively used GitHub Organizations + +| Name | Description | +| :--: | :---------: | +| [kubernetes](https://github.com/kubernetes) | Core | +| [kubernetes-client](https://github.com/kubernetes-client) | API Client Libraries | +| [kubernetes-csi](https://github.com/kubernetes-csi) | Container Storage Interface Components | +| [kubernetes-incubator](https://github.com/kubernetes-incubator) | Legacy Incubator Projects | +| [kubernetes-retired](https://github.com/kubernetes-retired) | Retired/Archived Projects | +| [kubernetes-security](https://github.com/kubernetes-security) | Private Security Fix Mirror | +| [kubernetes-sigs](https://github.com/kubernetes-sigs) | SIG-related Projects | + +### Non-actively used GitHub Organizations + +| Name | Description | +| :--: | :---------: | +| [kubernetes-addons](https://github.com/kubernetes-addons) | | +| [kubernetes-charts](https://github.com/kubernetes-charts) | | +| [kubernetes-extensions](https://github.com/kubernetes-extensions) | | +| [kubernetes-federation](https://github.com/kubernetes-federation) | | +| [kubernetes-graveyard](https://github.com/kubernetes-graveyard) | kubernetes-retired should be used instead going forward | +| [kubernetes-incubator-retired](https://github.com/kubernetes-incubator-retired) | kubernetes-retired should be used instead going forward | +| [kubernetes-providers](https://github.com/kubernetes-providers) | | +| [kubernetes-sidecars](https://github.com/kubernetes-sidecars) | | +| [kubernetes-sig-testing](https://github.com/kubernetes-sig-testing) | | +| [kubernetes-test](https://github.com/kubernetes-test) | | +| [kubernetes-tools](https://github.com/kubernetes-tools) | | + +Note, this list is subject to change. + +There are more organization names that we are squatting on with possible future +intentions. [For more details please see community issue #1407](https://github.com/kubernetes/community/issues/1407). + +## Tooling + +We have created a number of tools to help with the management of or Github +repositories and organizations: +- [prow](https://git.k8s.io/test-infra/prow): Prow is our system for handling + GitHub events and commands for Kubernetes. It is comprised of a number of + modules/plugins. A couple key ones for GitHub management are below, but a full + list of commands is available [here](https://go.k8s.io/bot-commands) + - [branchprotector](https://git.k8s.io/test-infra/prow/cmd/branchprotector): + enforce branch protection settings across an organization + - [peribolos](https://git.k8s.io/test-infra/prow/cmd/peribolos): Manage Github + organization and team membership based on a defined YAML configuration +- [label_sync](https://git.k8s.io/test-infra/label_sync): Add, modify, delete, + and migrate labels across an entire organization based on a defined YAML + configuration diff --git a/github-management/kubernetes-repositories.md b/github-management/kubernetes-repositories.md new file mode 100644 index 000000000..6e3b4905f --- /dev/null +++ b/github-management/kubernetes-repositories.md @@ -0,0 +1,223 @@ +# Kubernetes Repository Guidelines + +This document attempts to outline a structure for creating and associating +GitHub repositories with the Kubernetes project. It also describes how and when +repositories are removed. + +The document presents a tiered system of repositories with increasingly strict +requirements in an attempt to provide the right level of oversight and +flexibility for a variety of different projects. + +Requests for creating, transferring, modifying, or archiving repositories can be +made by [opening a request](https://github.com/kubernetes/org/issues/new/choose) +against the kubernetes/org repo. + +- [Associated Repositories](#associated-repositories) + * [Goals](#goals) + * [Rules](#rules) +- [SIG repositories](#sig-repositories) + * [Goals](#goals-1) + * [Rules for new repositories](#rules-for-new-repositories) + * [Rules for donated repositories](#rules-for-donated-repositories) +- [Core Repositories](#core-repositories) + * [Goals](#goals-2) + * [Rules](#rules-1) +- [Removing Repositories](#removing-repositories) + * [Grounds for removal](#grounds-for-removal) + * [Procedure for removal](#procedure-for-removal) +- [FAQ](#faq) + +## Associated Repositories + +Associated repositories conform to the Kubernetes community standards for a +repository, but otherwise have no restrictions. Associated repositories exist +solely for the purpose of making it easier for the Kubernetes community to work +together. There is no implication of support or endorsement of any kind by the +Kubernetes project, the goals are purely logistical. + +### Goals + +To facilitate contributions and collaboration from the broader Kubernetes +community. Contributions to random projects with random CLAs (or DCOs) can be +logistically difficult, so associated repositories should be easier. + + +### Rules + + * Must adopt the Kubernetes Code of Conduct statement in their repo. + * All code projects use the Apache License version 2.0. Documentation + repositories must use the Creative Commons License version 4.0. + * Must adopt the CNCF CLA bot automation for pull requests. + + +## SIG repositories + +SIG repositories serve as temporary homes for SIG-sponsored experimental +projects or prototypes of new core functionality, or as permanent homes for +SIG-specific projects and tools. + +### Goals + +To provide a place for SIGs to collaborate on projects endorsed by and actively +worked on by members of the SIG. SIGs should be able to approve and create new +repositories for SIG-sponsored projects without requiring higher level approval +from a central body (e.g. steering committee or sig-architecture) + +### Rules for new repositories + + * For now all repos will live in github.com/kubernetes-sigs/\. + * Must contain the topic for the sponsoring SIG - e.g. + `k8s-sig-api-machinery`. (Added through the *Manage topics* link on the +repo page.) + * Must adopt the Kubernetes Code of Conduct + * All code projects use the Apache License version 2.0. Documentation + repositories must use the Creative Commons License version 4.0. + * Must adopt the CNCF CLA bot, merge bot and Kubernetes PR commands/bots. + * All OWNERS of the project must also be active SIG members. + * SIG membership must vote using lazy consensus to create a new repository + * SIG must already have identified all of their existing subprojects and + code, with valid OWNERS files, in +[`sigs.yaml`](https://github.com/kubernetes/community/blob/master/sigs.yaml) + +### Rules for donated repositories + +The `kubernetes-sigs` organization is primarily intended to house net-new +projects originally created in that organization. However, projects that a SIG +adopts may also be donated. + +In addition to the requirements for new repositories, donated repositories must +demonstrate that: + + * All contributors must have signed the [CNCF Individual + CLA](https://github.com/cncf/cla/blob/master/individual-cla.pdf) or [CNCF +Corporate CLA](https://github.com/cncf/cla/blob/master/corporate-cla.pdf) + * If (a) contributor(s) have not signed the CLA and could not be reached, a + NOTICE file should be added referencing section 7 of the CLA with a list of +the developers who could not be reached + * Licenses of dependencies are acceptable; project owners can ping + [@caniszczyk](https://github.com/caniszczyk) for review of third party deps + * Boilerplate text across all files should attribute copyright as follows: + `"Copyright "` if no CLA was in place prior to donation + +## Core Repositories + +Core repositories are considered core components of Kubernetes. They are +utilities, tools, applications, or libraries that are expected to be present in +every or nearly every Kubernetes cluster, such as components and tools included +in official Kubernetes releases. Additionally, the kubernetes.io website, k8s.io +machinery, and other project-wide infrastructure will remain in the kubernetes +github organization. + +### Goals Create a broader base of repositories than the existing +gh/kubernetes/kubernetes so that the project can scale. Present expectations +about the centrality and importance of the repository in the Kubernetes +ecosystem. Carries the endorsement of the Kubernetes community. + +### Rules + + * Must live under `github.com/kubernetes/` + * Must adopt the Kubernetes Code of Conduct + * All code projects use the Apache Licence version 2.0. Documentation + repositories must use the Creative Commons License version 4.0. + * Must adopt the CNCF CLA bot + * Must adopt all Kubernetes automation (e.g. /lgtm, etc) + * All OWNERS must be members of standing as defined by ability to vote in + Kubernetes steering committee elections. in the Kubernetes community + * Repository must be approved by SIG-Architecture + +## Removing Repositories + +As important as it is to add new repositories, it is equally important to prune +old repositories that are no longer relevant or useful. + +It is in the best interests of everyone involved in the Kubernetes community +that our various projects and repositories are active and healthy. This ensures +that repositories are kept up to date with the latest Kubernetes wide processes, +it ensures a rapid response to potential required fixes (e.g. critical security +problems) and (most importantly) it ensures that contributors and users receive +quick feedback on their issues and contributions. + +### Grounds for removal + +SIG repositories and core repositories may be removed from the project if they +are deemed _inactive_. Inactive repositories are those that meet any of the +following criteria: + + * There are no longer any active maintainers for the project and no + replacements can be found. + * All PRs or Issues have gone un-addressed for longer than six months. + * There have been no new commits or other changes in more than a year. + * The contents have been folded into another actively maintained project. + +Associated repositories are much more loosely associated with the Kubernetes +project and are generally not subject to removal, except under exceptional +circumstances (e.g. a code of conduct violation). + +### Procedure for removal + +When a repository has been deemed eligible for removal, we take the following +steps: + + * Ownership of the repo is transferred to the [kubernetes-retired] GitHub + organization + * The repo description is edited to start with the phrase "[EOL]" + * All open issues and PRs are closed + * All external collaborators are removed + * All webhooks, apps, integrations or services are removed + * GitHub Pages are disabled + * The repo is marked as archived using [GitHub's archive feature] + * The removal is announced on the kubernetes-dev mailing list and community + meeting + +This maintains the complete record of issues, PRs and other contributions, +leaves the repository read-only, and makes it clear that the repository should +be considered retired and unmaintained. + +## FAQ + +**My project is currently in kubernetes-incubator, what is going to happen to +it?** + +Nothing. We’ll grandfather existing projects and they can stay in the incubator +org for as long as they want to. We expect/hope that most projects will either +move out to ecosystem, or into SIG or Core repositories following the same +approval process described below. + +**My project wants to graduate from incubator, how can it do that?** + +Either approval from a SIG to graduate to a SIG repository, or approval from +SIG-Architecture to graduate into the core repository. + +**My incubator project wants to go GA, how can it do that?** + +For now, the project determines if and when it is GA. For the future, we may +define a cross Kubernetes notion of GA for core and sig repositories, but that’s +not in this proposal. + +**My project is currently in core, but doesn’t seem to fit these guidelines, +what’s going to happen?** + +For now, nothing. Eventually, we may redistribute projects, but for now the goal +is to adapt the process going forward, not re-legislate past decisions. + +**I’m starting a new project, what should I do?** + +Is this a SIG-sponsored project? If so, convince some SIG to host it, take it to +the SIG mailing list, meeting and get consensus, then the SIG can create a repo +for you in the SIG organization. + +Is this a small-group or personal project? If so, create a repository wherever +you’d like, and make it an associated project. + +We suggest starting with the kubernetes-template-project to ensure you have the +correct code of conduct, license, etc. + +**Much of the things needed (e.g. CLA Bot integration) is missing to support +associated projects. Many things seem vague. Help!** + +True, we need to improve these things. For now, do the best you can to conform +to the spirit of the proposal (e.g. post the code of conduct, etc) + +[GitHub's archive feature]: +https://help.github.com/articles/archiving-a-github-repository/ +[kubernetes-retired]: https://github.com/kubernetes-retired diff --git a/github-management/new-membership-procedure.md b/github-management/new-membership-procedure.md new file mode 100644 index 000000000..f292bfc70 --- /dev/null +++ b/github-management/new-membership-procedure.md @@ -0,0 +1,103 @@ +# Adding a new member to a Kubernetes GitHub Org + +This procedure outlines the steps to add someone to a Kubernetes GitHub +organization. These directions are based off of the [community membership] +guidelines. If there is a discrepancy as to the exact membership requirements, +the [community membership] guidelines take precedence. + +## Membership Requirements + +All members of the Kubernetes GitHub org are required to do the following: + +- Have 2FA enabled on their GitHub account + + This is enforced by GitHub. The contributor will not be able to accept the org + invitation without it, and they will be removed from the org automatically in + the event they disable it. + +- Join the [k-dev] mailing list + + We don't explicitly check this, but we require the contributor to check the + box saying that they have joined. + +- List their active contributions + + This is left purposefully vague. We want to record what those contributions + are, but we leave it up to the sponsors to determine if they are at a bar that + warrants membership. We want to make it easy for those who are actively + contributing to join, but this bar should be higher than, for example, a few + spelling corrections. + +- List the active subprojects they are involved in + + In the same vein as the above, we leave this vague, and as guidance for the + sponsors. The sponsors should also be active in these same subprojects. + +## Sponsor Requirements + +One of the most critical pieces in the process is validating the sponsors meet +the requirements to sponsor a new member. With the size of the Kubernetes +project, those involved with processing new memberships do not have the +visibility to determine if each prospective member's contributions meet the +standard needed to become a member. We rely on sponsors to vouch for the work of +the prospective new member, and to validate the work they are doing. + +We do however, have to validate that the sponsor's credentials meet the standard +required to be eligible to sponsor a new member. These requirements are: + +- Sponsors must be a member of the org they are attempting to sponsor for. + + For example, if the membership being requested is for kubernetes-incubator, + then the sponsor should be a member of either that org, or main Kubernetes + org (as members of the main org have implicit membership in other orgs). + +- Sponsors must be a reviewer or approver in at least one OWNERS file in any + Kubernetes GitHub org. + +- Sponsors must be from multiple member companies to demonstrate integration + across community + + A single sponsor may be from the same company as the prospective member, but + no more than one sponsor can be from the same company. If both sponsors on an + application are from the same company, please request that the applicant + solicit an additional sponsor from a different company. + +- Sponsors must have close interactions with the prospective member + + Sponsors need to be familiar enough with the prospective member's + contributions to be able to properly vouch for them. This is to ensure + integrity in the membership process, and a "web of trust" for the privileges + we afford members. + +If there are questions with regard to a sponsor's qualifications, please attempt +to seek clarification or a second opinion before moving forward with processing +the membership. + +## Processing the request + +Once all the requirements have been validated, we can move forward with +processing the membership. + +1. Open a PR against the [kubernetes/org] config, adding the potential member's +GitHub username to the members list. Note, that the list is alpha sorted, but +case insensitive. + +1. For clarity, please use one commit per username added (although you may add +that user to multiple orgs in the same commit). + +1. In the PR body (and not the commit message), add `fixes #1234, fixes #1234` +with the issue numbers of the membership request issues that this PR is +resolving. One PR can be used to resolve multiple membership requests. + +1. Add a note to the original membership request stating that a membership +invite will be sent out once the PR has merged. + +1. Wait for a member of the GitHub administration team to approve the PR for +merge. + + + + +[community membership]: /community-membership.md +[k-dev]: https://groups.google.com/forum/#!forum/kubernetes-dev +[kubernetes/org]: https://git.k8s.io/org/ diff --git a/github-management/opening-a-request.md b/github-management/opening-a-request.md new file mode 100644 index 000000000..b00886473 --- /dev/null +++ b/github-management/opening-a-request.md @@ -0,0 +1,33 @@ +# Opening a issue for support with GitHub + +## GitHub issues + +If you need help with the following: +- Permissions issues +- Organization membership +- Third-party integrations +- Webhooks +- Repository creation/migration +- Repository archival +- Other repository and configuration issues + +Please open an issue against the [kubernetes/org] repository describing your +issue. If your request is urgent, please escalate to **[@kubernetes/owners]**. + +## Bot/Automation issues + +If you need help with the following: +- Bot configuration +- Automatic merging +- Issue labelling +- Automation feedback and feature requests + +Please open an issue against the [kubernetes/test-infra] repository describing +your issue. If your request is urgent, please escalate to the +[test-infra on-call] or reach out to `#testing-ops` on Slack. + + +[kubernetes/org]: https://github.com/kubernetes/org/issues +[@kubernetes/owners]: https://github.com/orgs/kubernetes/teams/owners +[kubernetes/test-infra]: https://github.com/kubernetes/test-infra/issues +[test-infra on-call]: https://go.k8s.io/oncall diff --git a/github-management/org-owners-guide.md b/github-management/org-owners-guide.md new file mode 100644 index 000000000..c626d5c40 --- /dev/null +++ b/github-management/org-owners-guide.md @@ -0,0 +1,89 @@ +# Kubernetes GitHub Organization Guide + +The Kubernetes project leverages multiple GitHub organizations to store and +organize code. This guide contains the details on how to run those organizations +for CNCF compliance and for the guidelines of the community. + +## SLOs + +The [GitHub Administration Team] will aim to handle requests in the following +time frames: +- Organization invites should be handled within 72 hours of all requirements for + membership being met (all +1s obtained). +- Repository creation or migration requests should be responded to within 72 + hours of the issue being opened. There may be information required or specific + requirements that take additional time, but once all requirements are met, the + repo should be created within 72 hours. +- Security or moderation requests should be handled ASAP, and coverage should be + provided in multiple time zones and countries. +- All other requests should be responded to within 72 hours of the issue being + opened. The time to resolve these requests will vary depending on the + specifics of the request. + +If a request is taking longer than the above time frames, or there is a need to +escalate an urgent request, please mention **[@kubernetes/owners]** on the +associated issue for assistance. + +## Organization Naming + +Kubernetes managed organizations should be in the form of `kubernetes-[thing]`. +For example, [kubernetes-client](https://github.com/kubernetes-client) where the +API clients are housed. + +Prior to creating an organization please contact the steering committee for +direction and approval. + +Note: The CNCF, as part of the Linux Foundation, holds the trademark on the +Kubernetes name. All GitHub organizations with Kubernetes in the name should be +managed by the Kubernetes project or use a different name. + +## Transferring Outside Code Into A Kubernetes Organization + +Due to licensing and CLA issues, prior to transferring software into a +Kubernetes managed organization there is some due diligence that needs to occur. +Please contact the steering committee and CNCF prior to moving any code in. + +It is easier to start new code in a Kubernetes organization than it is to +transfer in existing code. + +## Team Guidance + +Each organization should have the following teams: + +- teams for each repo `foo` + - `foo-admins`: granted admin access to the `foo` repo + - `foo-maintainers`: granted write access to the `foo` repo + - `foo-reviewers`: granted read access to the `foo` repo; intended to be used + as a notification mechanism for interested/active contributors for the `foo` + repo +- a `bots` team + - should contain bots such as @k8s-ci-robot and @thelinuxfoundation that are + necessary for org and repo automation +- an `owners` team + - should be populated by everyone who has `owner` privileges to the org + - gives users the opportunity to ping owners as a group rather than having to + search for individuals + +**NB**: Not all organizations in use today currently follow this team guidance. +We are looking to coalesce existing teams towards this model, and use this model +for all orgs going forward. Notable discrepancies at the moment: + +- `foo-reviewers` teams are considered a historical subset of + `kubernetes-sig-foo-pr-reviews` teams and are intended mostly as a fallback + notification mechanism when requested reviewers are being unresponsive. + Ideally OWNERS files can be used in lieu of these teams. +- `admins-foo` and `maintainers-foo` teams as used by the kubernetes-incubator + org. This was a mistake that swapped the usual convention, and we would like + to rename the team + +## Repository Guidance + +Repositories have additional guidelines and requirements, such as the use of CLA +checking on all contributions. For more details on those please see the +[Kubernetes Template +Project](https://github.com/kubernetes/kubernetes-template-project), and the +[Repository Guidelines](kubernetes-repositories.md) + +[GitHub Administration Team]: +/github-management/README.md#github-administration-team +[@kubernetes/owners]: https://github.com/orgs/kubernetes/teams/owners diff --git a/github-management/permissions.md b/github-management/permissions.md new file mode 100644 index 000000000..ba036fee3 --- /dev/null +++ b/github-management/permissions.md @@ -0,0 +1,103 @@ +# GitHub Permissions + +GitHub provides a limited permissions model for organizations and repositories. +It lacks granularity, and for the most part is "all or nothing". This doesn't +scale well with the size and velocity of the Kubernetes project. + +We have created a number of automated systems/bots to allow us to work around +these limitations. Authorized users can issue [bot commands] to execute actions +against PRs and issues without having direct GitHub access to run these +actions. [OWNERS] files are used to gate approvals to merge, and most merges are +handled by automation. This allows us the flexibility to delegate access to +small or large groups of users, without providing direct write or admin access. + +That said, there are some actions that are so infrequent, or so complex that +automation isn't a good fit. There is also a need for a small set of users that +can act as a backstop for setting up and maintaining this automation, and +manual intervention if needed. + +## Organization Level Permissions + +GitHub provides [two access levels][org permissions] to an organization: owner, +and member. + +### Owner + +Organization owners have full access to the organization, including the ability +to modify billing information and even delete the entire organization. +Therefore, we are very cautious about giving more people this access than +really need it. + +There are certain actions that require org owner access: +- Invite or remove members from the organization (in future, will be handled by + [peribolos]) +- Access the organization audit log +- Create new repositories +- Transfer repositories +- Approve GitHub application integrations + +In the Kubernetes project, this role is held by the +[GitHub Administration Team]. + +### Member + +Organization members are granted "read" access to all repositories in the org, +are able to be assigned issues and PRs, and are able to mention and join +teams. This is the base level of access to an organization. + +A our automation tools look for organization membership as a permissions level +for running certain bot commands. The [bot commands] list details which +commands are restricted to org members. + +Org membership is granted as a part of becoming a member of the Kubernetes +community as defined in the [community membership] document. + +## Repository Level Permissions + +GitHub provides [three access levels][repo permissions] to a repository: admin, +write, and read. + +### Admin + +A repository admin has full access to the repository, and is able to modify any +repository-scoped setting, including renaming or deleting a repository, +manually merge code, and override/change branch protection settings. This is a +trusted role, and should only be given to a limited number of senior +maintainers of a repository. + +In most cases, this level of access should not be necessary as the majority of +actions will be able to be implemented by automation. Certain actions like +creating a release may still need this level of access. + +**// TODO(cblecker):** Define specific roles that need this. + +### Write + +Providing direct write access to a repository exposes a number of settings that +are not normally available, including: +- The ability to manually add and remove labels from issues/PRs +- The ability to push new branches +- Manually open and close issues/PRs + +While users with write access cannot override branch protection settings and +manually merge PRs, they can manually apply labels like `lgtm`/`approve`, +bypassing normal processes. Write access is being phased out as the majority +of actions are implemented via automation. + +### Read + +This is the default level of access that is provided to org members on every +repo in the organization. Read access allows you to be assigned issues and PRs +in the repository, but that's about it. It is provided by default to every +member in the organization. + + +[bot commands]: https://go.k8s.io/bot-commands +[community membership]: /community-membership.md +[GitHub Administration Team]: /github-management/README.md#github-administration-team +[org permissions]: +https://help.github.com/articles/permission-levels-for-an-organization/ +[OWNERS]: /contributors/guide/owners.md +[peribolos]: https://git.k8s.io/test-infra/prow/cmd/peribolos +[repo permissions]: +https://help.github.com/articles/repository-permission-levels-for-an-organization/ diff --git a/github-management/setting-up-cla-check.md b/github-management/setting-up-cla-check.md new file mode 100644 index 000000000..be1ae381b --- /dev/null +++ b/github-management/setting-up-cla-check.md @@ -0,0 +1,76 @@ +# Setting up the CNCF CLA check + +If you are trying to sign the CLA so your PR's can be merged, please [read the +CLA docs](https://git.k8s.io/community/CLA.md) + +If you are a Kubernetes GitHub organization or repo owner, and would like to +setup the Linux Foundation CNCF CLA check for your repositories, please read on. + +## Setup the webhook + +1. Go to the settings for your organization or webhook, and choose Webhooks from + the menu, then "Add webhook" + - Payload URL: + `https://identity.linuxfoundation.org/lfcla/github/postreceive?group=284&comment=no&target=https://identity.linuxfoundation.org/projects/cncf` + - `group=284` specifies the ID of the CNCF project authorized committers + group in our CLA system. + - `comment=no` specifies that our system should not post help comments + into the pull request (since the Kubernetes mungebot does this). + - `target=https://identity.linuxfoundation.org/projects/cncf` specifies + what will be used for the "Details" link in GitHub for this status + check. + - Content Type: 'application/json' + - Secret: Please contact [@idvoretskyi](mailto:ihor@cncf.io), and + [@caniszczyk](mailto:caniszczyk@linuxfoundation.org). + - Events: Let me select individual events + - Push: **unchecked** + - Pull request: checked + - Issue comment: checked + - Active: checked +1. Add the [@thelinuxfoundation](https://github.com/thelinuxfoundation) GitHub +user as an **Owner** to your organization or repo to ensure the CLA status can +be applied on PR's +1. After you send an invite, contact the [Linux +Foundation](mailto:helpdesk@rt.linuxfoundation.org); and cc [Chris +Aniszczyk](mailto:caniszczyk@linuxfoundation.org), [Ihor +Dvoretskyi](mailto:ihor@cncf.io), [Eric Searcy](mailto:eric@linuxfoundation.org) +(to ensure that the invite gets accepted). +1. Finally, open up a test PR to check that: + 1. webhooks are delivered correctly, which can be monitored in the + “settings” for your org + 1. the PR gets the cla/linuxfoundation status + +## Branch protection + +It is recommended that the Linux Foundation CLA check be added as a strict +requirement for any change to be accepted to the master branch. + +To do this manually: + +1. Go to the Settings for the repository, and choose Branches from the menu. +1. Under Protected Branches, choose "master". +1. Check "Protect this branch". +1. Check "Require status checks to pass before merging", "Require branches to be +up to date before merging", and the "cla/linuxfoundation" status check. + +Given the Kubernetes projects anticipates having "human reviewed" CLA +acceptance, you may not do the last step, but it is still recommended to enable +branch protection to require all changes to be done through pull requests, +instead of direct pushing that will never kick off a CLA check. + +## Label automation + +The label automation is done using the [CLA plugin in +prow](https://git.k8s.io/test-infra/prow/plugins/cla). In order to turn on the +CLA labels on your repo, add it as appropriate within the +[plugins.yaml](https://git.k8s.io/test-infra/prow/plugins.yaml), and add the cla +plugin to it. + +You also need to add [@k8s-ci-robot](https://github.com/k8s-ci-robot) as one of +the owners in the same org/repo, to ensure that it can add labels `cncf-cla: +yes` and `cncf-cla: no` based on the status published by the Linux Foundation +webhook. + +The label automation may not be essential for your repository, if you’re not +using merge automation. For repos with maintainers doing manual merges, GitHub +protected branches may suffice. diff --git a/github-management/subproject-responsibilites.md b/github-management/subproject-responsibilites.md new file mode 100644 index 000000000..a3aa7fd16 --- /dev/null +++ b/github-management/subproject-responsibilites.md @@ -0,0 +1,27 @@ +# GitHub Management Subproject Responsibilities + +This subproject will be responsible for: +- Establishing policies, standards, and procedures for routine GitHub management + tasks, including but not limited to: org membership, org permissions, repo + creation/administration +- Establishing a policy around "Org Owner" permissions, and grant/limit these + privileges accordingly +- Establishing policies and best practices for bot accounts, service accounts, + webooks, and third-party integrations +- Maintaining documentation related to the above +- Establishing a "GitHub Administration team" that will oversee the execution of + GitHub management tasks (inviting new members to the org, creating repos, + executing moderation decisions, auditing permissions) +- Working with other sigs and interested parties in the project to execute + GitHub tasks where required + +This subproject will explicitly not be responsible for: +- Tooling and automation for GitHub (this falls under sig-testing, and the + sig-contributor-experience Contributor Workflow and Automation subproject) +- Determining policies around which repos can get created (this falls under + sig-architecture and the steering committee) +- Moderation policies and escalations on GitHub (this falls under the Moderation + subproject, the Code of Conduct committee, and the steering committee) +- Contributor workflow within Kubernetes repos, e.g. mandated use of labels + (this falls under the guise of the subproject responsible for the repo, and + the Contributor Workflow and Automation subproject) diff --git a/governance.md b/governance.md index 30dd9203a..da4a4dac2 100644 --- a/governance.md +++ b/governance.md @@ -6,7 +6,7 @@ The Kubernetes community adheres to the following principles: * Open: Kubernetes is open source. See repository guidelines and CLA, below. * Welcoming and respectful: See Code of Conduct, below. * Transparent and accessible: Work and collaboration should be done in public. See SIG governance, below. -* Merit: Ideas and contributions are accepted according to their technical merit and alignment with project objectives, [scope](http://kubernetes.io/docs/whatisk8s/), and [design principles](contributors/design-proposals/architecture/principles.md). +* Merit: Ideas and contributions are accepted according to their technical merit and alignment with project objectives, [scope](https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/), and [design principles](contributors/design-proposals/architecture/principles.md). # Code of Conduct @@ -26,13 +26,12 @@ See [community membership] # Community groups The project has 4 main types of groups: -1. Special Interest Groups, SIGs -2. Subprojects -3. Working Groups, WGs -4. Committees +* Special Interest Groups, SIGs + * Subprojects +* Working Groups, WGs +* Committees -Note that the project is also in the process of forming a Steering -Committee, details of which will be documented soon. +![Kubernetes Governance Diagram](kubernetes_governance_diagram.png) ## SIGs @@ -55,8 +54,8 @@ itself. Examples: * Horizontal: Scalability, Architecture * Project: Testing, Release, Docs, PM, Contributor Experience -SIGs must have at least one and ideally two SIG leads at any given -time. SIG leads are intended to be organizers and facilitators, +SIGs must have at least one and ideally two SIG chairs at any given +time. SIG chairs are intended to be organizers and facilitators, responsible for the operation of the SIG and for communication and coordination with the other SIGs, the Steering Committee, and the broader community. @@ -65,7 +64,8 @@ Each SIG must have a charter that specifies its scope (topics, subsystems, code repos and directories), responsibilities, areas of authority, how members and roles of authority/leadership are selected/granted, how decisions are made, and how conflicts are -resolved. A [short template] for intra-SIG governance has been +resolved. See the [SIG charter process] for details on how charters are managed. +A [short template] for intra-SIG governance has been developed in order to simplify SIG creation, and additional templates are being developed, but SIGs should be relatively free to customize or change how they operate, within some broad guidelines and @@ -82,7 +82,7 @@ community. See [sig governance] for more details about current SIG operating mechanics, such as mailing lists, meeting times, etc. -## Subprojects +### Subprojects Specific work efforts within SIGs are divided into **subprojects**. Every part of the Kubernetes code and documentation must be owned by @@ -105,9 +105,17 @@ Subprojects for each SIG are documented in [sigs.yaml](sigs.yaml). We need community rallying points to facilitate discussions/work regarding topics that are short-lived or that span multiple SIGs. -This is the purpose of Working Groups (WG). The intent is to make -Working Groups relatively easy to create and to deprecate, once -inactive. + +Working groups are primarily used to facilitate topics of discussion that are in +scope for Kubernetes but that cross SIG lines. If a set of folks in the +community want to get together and discuss a topic, they can do so without +forming a Working Group. + +See [working group governance] for more details about forming and disbanding +Working Groups. + +Working groups are documented in [sigs.yaml](sigs.yaml). + ## Committees @@ -117,7 +125,7 @@ open and anyone can join, Committees do not have open membership and do not always operate in the open. The steering committee can form committees as needed, for bounded or unbounded duration. Membership of a committee is decided by the steering committee. Like a SIG, a -committee has a charter and a lead, and will report to the steering +committee has a charter and a chair, and will report to the steering committee periodically, and to the community as makes sense, given the charter. @@ -144,17 +152,15 @@ to its charter, will own the decision. In the case of extended debate or deadlock, decisions may be escalated to the Steering Committee, which is expected to be uncommon. -The exact processes and guidelines for such cross-project -communication have yet to be formalized, but when in doubt, use -kubernetes-dev@googlegroups.com and make an announcement at the -community meeting. +The [KEP process] is being developed as a way to facilitate definition, agreement and communication of efforts that cross SIG boundaries. +SIGs are encouraged to use this process for larger efforts. +This process is also available for smaller efforts within a SIG. # Repository guidelines -All repositories under Kubernetes github orgs, such as kubernetes and kubernetes-incubator, -should follow the procedures outlined in the [incubator document](incubator.md). All code projects -use the [Apache Licence version 2.0](LICENSE). Documentation repositories should use the -[Creative Commons License version 4.0](https://git.k8s.io/website/LICENSE). +All new repositories under Kubernetes github orgs should follow the process outlined in the [kubernetes repository guidelines]. + +Note that "Kubernetes incubator" process has been deprecated in favor of the new guidelines. # CLA @@ -163,6 +169,9 @@ All contributors must sign the CNCF CLA, as described [here](CLA.md). [community membership]: /community-membership.md [sig governance]: /sig-governance.md [owners]: community-membership.md#subproject-owner +[sig charter process]: committee-steering/governance/README.md [short template]: committee-steering/governance/sig-governance-template-short.md +[kubernetes repository guidelines]: kubernetes-repositories.md +[working group governance]: committee-steering/governance/wg-governance.md [![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/governance.md?pixel)]() diff --git a/hack/.spelling_failures b/hack/.spelling_failures index 7bc1a753d..6f00db630 100644 --- a/hack/.spelling_failures +++ b/hack/.spelling_failures @@ -1,2 +1,4 @@ events/elections/2017/ vendor/ +sig-contributor-experience/contribex-survey-2018.csv +events/2014 diff --git a/hack/verify-generated-docs.sh b/hack/verify-generated-docs.sh index 6c05a1f46..843541ba1 100755 --- a/hack/verify-generated-docs.sh +++ b/hack/verify-generated-docs.sh @@ -54,7 +54,8 @@ if [[ ${mismatches} -gt "0" ]]; then fi echo "${mismatches} ${noun} detected." echo "Do not manually edit sig-list.md or README.md files inside the sig folders." - echo "Instead make your changes to sigs.yaml and then run \`make\`."; + echo "Instead make your changes to sigs.yaml, then run \`make\`, and then" + echo "commit your changes to sigs.yaml and any generated docs."; echo "${break}" exit 1; fi diff --git a/icons/README.md b/icons/README.md new file mode 100644 index 000000000..d7ef1312d --- /dev/null +++ b/icons/README.md @@ -0,0 +1,82 @@ +# Kubernetes Icons Set + +These icons are a way to standardize Kubernetes architecture diagrams for presentation. Having uniform architecture diagrams improve understandibility. + +## Generate png icons from svg + +```shell +./tools/rasterize.sh +``` + +This script will convert all svg into png. It's based on a docker container defined [here](hack/svgconvertor/Dockefile) + +## How to use these icons + +Each icons can be found in differents formats +* [png](png) +* [svg](svg) + +There is 2 types of icons + +| Kind | Type | Icon | +|-------|------------|----------------------------------| +| Pod | Labeled | ![](./png/resources/labeled/pod-128.png) | +| Pod | Unlabeled | ![](./png/resources/unlabeled/pod-128.png) | + + +## Control Plane Components icons +![](./png/control_plane_components/labeled/api-128.png) +![](./png/control_plane_components/labeled/c-c-m-128.png) +![](./png/control_plane_components/labeled/c-m-128.png) +![](./png/control_plane_components/labeled/k-proxy-128.png) +![](./png/control_plane_components/labeled/kubelet-128.png) +![](./png/control_plane_components/labeled/sched-128.png) + +## Infrastructure Components icons +![](./png/infrastructure_components/labeled/master-128.png) +![](./png/infrastructure_components/labeled/node-128.png) +![](./png/infrastructure_components/labeled/etcd-128.png) + +## Kubernetes Resources icons +![](./png/resources/labeled/c-role-128.png) +![](./png/resources/labeled/cm-128.png) +![](./png/resources/labeled/crb-128.png) +![](./png/resources/labeled/crd-128.png) +![](./png/resources/labeled/cronjob-128.png) +![](./png/resources/labeled/deploy-128.png) +![](./png/resources/labeled/ds-128.png) +![](./png/resources/labeled/ep-128.png) +![](./png/resources/labeled/group-128.png) +![](./png/resources/labeled/hpa-128.png) +![](./png/resources/labeled/ing-128.png) +![](./png/resources/labeled/job-128.png) +![](./png/resources/labeled/limits-128.png) +![](./png/resources/labeled/netpol-128.png) +![](./png/resources/labeled/ns-128.png) +![](./png/resources/labeled/pod-128.png) +![](./png/resources/labeled/psp-128.png) +![](./png/resources/labeled/pv-128.png) +![](./png/resources/labeled/pvc-128.png) +![](./png/resources/labeled/quota-128.png) +![](./png/resources/labeled/rb-128.png) +![](./png/resources/labeled/role-128.png) +![](./png/resources/labeled/rs-128.png) +![](./png/resources/labeled/sa-128.png) +![](./png/resources/labeled/sc-128.png) +![](./png/resources/labeled/secret-128.png) +![](./png/resources/labeled/sts-128.png) +![](./png/resources/labeled/svc-128.png) +![](./png/resources/labeled/user-128.png) +![](./png/resources/labeled/vol-128.png) + +## Usage Example + +#### Exposed Pod with 3 replicas +![](./docs/k8s-exposed-pod.png) + +## License +The Kubernetes Icons Set is licensed under a choice of either Apache-2.0 +or CC-BY-4.0 (Creative Commons Attribution 4.0 International). The +Kubernetes logo is a registered trademark of The Linux Foundation, and use +of it as a trademark is subject to The Linux Foundation's Trademark Usage +Guidelines at https://www.linuxfoundation.org/trademark-usage/. diff --git a/icons/docs/k8s-exposed-pod.png b/icons/docs/k8s-exposed-pod.png new file mode 100644 index 000000000..2b8d6e903 Binary files /dev/null and b/icons/docs/k8s-exposed-pod.png differ diff --git a/icons/examples/schemas/std-app.png b/icons/examples/schemas/std-app.png new file mode 100644 index 000000000..57824e841 Binary files /dev/null and b/icons/examples/schemas/std-app.png differ diff --git a/icons/png/control_plane_components/labeled/api-128.png b/icons/png/control_plane_components/labeled/api-128.png new file mode 100644 index 000000000..e3ec8f3d9 Binary files /dev/null and b/icons/png/control_plane_components/labeled/api-128.png differ diff --git a/icons/png/control_plane_components/labeled/c-c-m-128.png b/icons/png/control_plane_components/labeled/c-c-m-128.png new file mode 100644 index 000000000..ceb96789a Binary files /dev/null and b/icons/png/control_plane_components/labeled/c-c-m-128.png differ diff --git a/icons/png/control_plane_components/labeled/c-m-128.png b/icons/png/control_plane_components/labeled/c-m-128.png new file mode 100644 index 000000000..d49c3a185 Binary files /dev/null and b/icons/png/control_plane_components/labeled/c-m-128.png differ diff --git a/icons/png/control_plane_components/labeled/k-proxy-128.png b/icons/png/control_plane_components/labeled/k-proxy-128.png new file mode 100644 index 000000000..8be334a91 Binary files /dev/null and b/icons/png/control_plane_components/labeled/k-proxy-128.png differ diff --git a/icons/png/control_plane_components/labeled/kubelet-128.png b/icons/png/control_plane_components/labeled/kubelet-128.png new file mode 100644 index 000000000..589dfb0fa Binary files /dev/null and b/icons/png/control_plane_components/labeled/kubelet-128.png differ diff --git a/icons/png/control_plane_components/labeled/sched-128.png b/icons/png/control_plane_components/labeled/sched-128.png new file mode 100644 index 000000000..6b6508c74 Binary files /dev/null and b/icons/png/control_plane_components/labeled/sched-128.png differ diff --git a/icons/png/infrastructure_components/labeled/etcd-128.png b/icons/png/infrastructure_components/labeled/etcd-128.png new file mode 100644 index 000000000..aa94bab73 Binary files /dev/null and b/icons/png/infrastructure_components/labeled/etcd-128.png differ diff --git a/icons/png/infrastructure_components/labeled/master-128.png b/icons/png/infrastructure_components/labeled/master-128.png new file mode 100644 index 000000000..2225c921b Binary files /dev/null and b/icons/png/infrastructure_components/labeled/master-128.png differ diff --git a/icons/png/infrastructure_components/labeled/node-128.png b/icons/png/infrastructure_components/labeled/node-128.png new file mode 100644 index 000000000..3dccae24b Binary files /dev/null and b/icons/png/infrastructure_components/labeled/node-128.png differ diff --git a/icons/png/infrastructure_components/unlabeled/etcd-128.png b/icons/png/infrastructure_components/unlabeled/etcd-128.png new file mode 100644 index 000000000..5febda69f Binary files /dev/null and b/icons/png/infrastructure_components/unlabeled/etcd-128.png differ diff --git a/icons/png/infrastructure_components/unlabeled/master-128.png b/icons/png/infrastructure_components/unlabeled/master-128.png new file mode 100644 index 000000000..ffd854e53 Binary files /dev/null and b/icons/png/infrastructure_components/unlabeled/master-128.png differ diff --git a/icons/png/infrastructure_components/unlabeled/node-128.png b/icons/png/infrastructure_components/unlabeled/node-128.png new file mode 100644 index 000000000..712ac4d87 Binary files /dev/null and b/icons/png/infrastructure_components/unlabeled/node-128.png differ diff --git a/icons/png/resources/labeled/c-role-128.png b/icons/png/resources/labeled/c-role-128.png new file mode 100644 index 000000000..5bb841fcb Binary files /dev/null and b/icons/png/resources/labeled/c-role-128.png differ diff --git a/icons/png/resources/labeled/cm-128.png b/icons/png/resources/labeled/cm-128.png new file mode 100644 index 000000000..4242754e3 Binary files /dev/null and b/icons/png/resources/labeled/cm-128.png differ diff --git a/icons/png/resources/labeled/crb-128.png b/icons/png/resources/labeled/crb-128.png new file mode 100644 index 000000000..4271cc212 Binary files /dev/null and b/icons/png/resources/labeled/crb-128.png differ diff --git a/icons/png/resources/labeled/crd-128.png b/icons/png/resources/labeled/crd-128.png new file mode 100644 index 000000000..5449d1b00 Binary files /dev/null and b/icons/png/resources/labeled/crd-128.png differ diff --git a/icons/png/resources/labeled/cronjob-128.png b/icons/png/resources/labeled/cronjob-128.png new file mode 100644 index 000000000..a0f624b9a Binary files /dev/null and b/icons/png/resources/labeled/cronjob-128.png differ diff --git a/icons/png/resources/labeled/deploy-128.png b/icons/png/resources/labeled/deploy-128.png new file mode 100644 index 000000000..e3fb23dd1 Binary files /dev/null and b/icons/png/resources/labeled/deploy-128.png differ diff --git a/icons/png/resources/labeled/ds-128.png b/icons/png/resources/labeled/ds-128.png new file mode 100644 index 000000000..5f301ce2c Binary files /dev/null and b/icons/png/resources/labeled/ds-128.png differ diff --git a/icons/png/resources/labeled/ep-128.png b/icons/png/resources/labeled/ep-128.png new file mode 100644 index 000000000..d90c26e60 Binary files /dev/null and b/icons/png/resources/labeled/ep-128.png differ diff --git a/icons/png/resources/labeled/group-128.png b/icons/png/resources/labeled/group-128.png new file mode 100644 index 000000000..51f3245f4 Binary files /dev/null and b/icons/png/resources/labeled/group-128.png differ diff --git a/icons/png/resources/labeled/hpa-128.png b/icons/png/resources/labeled/hpa-128.png new file mode 100644 index 000000000..8834b8e44 Binary files /dev/null and b/icons/png/resources/labeled/hpa-128.png differ diff --git a/icons/png/resources/labeled/ing-128.png b/icons/png/resources/labeled/ing-128.png new file mode 100644 index 000000000..d03982f36 Binary files /dev/null and b/icons/png/resources/labeled/ing-128.png differ diff --git a/icons/png/resources/labeled/job-128.png b/icons/png/resources/labeled/job-128.png new file mode 100644 index 000000000..7b8235a20 Binary files /dev/null and b/icons/png/resources/labeled/job-128.png differ diff --git a/icons/png/resources/labeled/limits-128.png b/icons/png/resources/labeled/limits-128.png new file mode 100644 index 000000000..9b65a69e3 Binary files /dev/null and b/icons/png/resources/labeled/limits-128.png differ diff --git a/icons/png/resources/labeled/netpol-128.png b/icons/png/resources/labeled/netpol-128.png new file mode 100644 index 000000000..33bdc7e72 Binary files /dev/null and b/icons/png/resources/labeled/netpol-128.png differ diff --git a/icons/png/resources/labeled/ns-128.png b/icons/png/resources/labeled/ns-128.png new file mode 100644 index 000000000..b593af772 Binary files /dev/null and b/icons/png/resources/labeled/ns-128.png differ diff --git a/icons/png/resources/labeled/pod-128.png b/icons/png/resources/labeled/pod-128.png new file mode 100644 index 000000000..c714505ad Binary files /dev/null and b/icons/png/resources/labeled/pod-128.png differ diff --git a/icons/png/resources/labeled/psp-128.png b/icons/png/resources/labeled/psp-128.png new file mode 100644 index 000000000..f49813874 Binary files /dev/null and b/icons/png/resources/labeled/psp-128.png differ diff --git a/icons/png/resources/labeled/pv-128.png b/icons/png/resources/labeled/pv-128.png new file mode 100644 index 000000000..bea1f20fb Binary files /dev/null and b/icons/png/resources/labeled/pv-128.png differ diff --git a/icons/png/resources/labeled/pvc-128.png b/icons/png/resources/labeled/pvc-128.png new file mode 100644 index 000000000..be761af41 Binary files /dev/null and b/icons/png/resources/labeled/pvc-128.png differ diff --git a/icons/png/resources/labeled/quota-128.png b/icons/png/resources/labeled/quota-128.png new file mode 100644 index 000000000..4d469922f Binary files /dev/null and b/icons/png/resources/labeled/quota-128.png differ diff --git a/icons/png/resources/labeled/rb-128.png b/icons/png/resources/labeled/rb-128.png new file mode 100644 index 000000000..c095baaeb Binary files /dev/null and b/icons/png/resources/labeled/rb-128.png differ diff --git a/icons/png/resources/labeled/role-128.png b/icons/png/resources/labeled/role-128.png new file mode 100644 index 000000000..9920cc7f6 Binary files /dev/null and b/icons/png/resources/labeled/role-128.png differ diff --git a/icons/png/resources/labeled/rs-128.png b/icons/png/resources/labeled/rs-128.png new file mode 100644 index 000000000..61acd2028 Binary files /dev/null and b/icons/png/resources/labeled/rs-128.png differ diff --git a/icons/png/resources/labeled/sa-128.png b/icons/png/resources/labeled/sa-128.png new file mode 100644 index 000000000..ca297a744 Binary files /dev/null and b/icons/png/resources/labeled/sa-128.png differ diff --git a/icons/png/resources/labeled/sc-128.png b/icons/png/resources/labeled/sc-128.png new file mode 100644 index 000000000..0f4605d6c Binary files /dev/null and b/icons/png/resources/labeled/sc-128.png differ diff --git a/icons/png/resources/labeled/secret-128.png b/icons/png/resources/labeled/secret-128.png new file mode 100644 index 000000000..417e82851 Binary files /dev/null and b/icons/png/resources/labeled/secret-128.png differ diff --git a/icons/png/resources/labeled/sts-128.png b/icons/png/resources/labeled/sts-128.png new file mode 100644 index 000000000..be6a88ecc Binary files /dev/null and b/icons/png/resources/labeled/sts-128.png differ diff --git a/icons/png/resources/labeled/svc-128.png b/icons/png/resources/labeled/svc-128.png new file mode 100644 index 000000000..609cc2795 Binary files /dev/null and b/icons/png/resources/labeled/svc-128.png differ diff --git a/icons/png/resources/labeled/user-128.png b/icons/png/resources/labeled/user-128.png new file mode 100644 index 000000000..607ae9d75 Binary files /dev/null and b/icons/png/resources/labeled/user-128.png differ diff --git a/icons/png/resources/labeled/vol-128.png b/icons/png/resources/labeled/vol-128.png new file mode 100644 index 000000000..e311542d8 Binary files /dev/null and b/icons/png/resources/labeled/vol-128.png differ diff --git a/icons/png/resources/unlabeled/c-role-128.png b/icons/png/resources/unlabeled/c-role-128.png new file mode 100644 index 000000000..f99d9dc27 Binary files /dev/null and b/icons/png/resources/unlabeled/c-role-128.png differ diff --git a/icons/png/resources/unlabeled/cm-128.png b/icons/png/resources/unlabeled/cm-128.png new file mode 100644 index 000000000..63ad6becd Binary files /dev/null and b/icons/png/resources/unlabeled/cm-128.png differ diff --git a/icons/png/resources/unlabeled/crb-128.png b/icons/png/resources/unlabeled/crb-128.png new file mode 100644 index 000000000..a98004d19 Binary files /dev/null and b/icons/png/resources/unlabeled/crb-128.png differ diff --git a/icons/png/resources/unlabeled/crd-128.png b/icons/png/resources/unlabeled/crd-128.png new file mode 100644 index 000000000..455ed90dc Binary files /dev/null and b/icons/png/resources/unlabeled/crd-128.png differ diff --git a/icons/png/resources/unlabeled/cronjob-128.png b/icons/png/resources/unlabeled/cronjob-128.png new file mode 100644 index 000000000..d72324107 Binary files /dev/null and b/icons/png/resources/unlabeled/cronjob-128.png differ diff --git a/icons/png/resources/unlabeled/deploy-128.png b/icons/png/resources/unlabeled/deploy-128.png new file mode 100644 index 000000000..643ef1e8d Binary files /dev/null and b/icons/png/resources/unlabeled/deploy-128.png differ diff --git a/icons/png/resources/unlabeled/ds-128.png b/icons/png/resources/unlabeled/ds-128.png new file mode 100644 index 000000000..d107518ad Binary files /dev/null and b/icons/png/resources/unlabeled/ds-128.png differ diff --git a/icons/png/resources/unlabeled/ep-128.png b/icons/png/resources/unlabeled/ep-128.png new file mode 100644 index 000000000..7339bfbe9 Binary files /dev/null and b/icons/png/resources/unlabeled/ep-128.png differ diff --git a/icons/png/resources/unlabeled/group-128.png b/icons/png/resources/unlabeled/group-128.png new file mode 100644 index 000000000..e4a07cfb9 Binary files /dev/null and b/icons/png/resources/unlabeled/group-128.png differ diff --git a/icons/png/resources/unlabeled/hpa-128.png b/icons/png/resources/unlabeled/hpa-128.png new file mode 100644 index 000000000..d6b252a3a Binary files /dev/null and b/icons/png/resources/unlabeled/hpa-128.png differ diff --git a/icons/png/resources/unlabeled/ing-128.png b/icons/png/resources/unlabeled/ing-128.png new file mode 100644 index 000000000..a813d8e05 Binary files /dev/null and b/icons/png/resources/unlabeled/ing-128.png differ diff --git a/icons/png/resources/unlabeled/job-128.png b/icons/png/resources/unlabeled/job-128.png new file mode 100644 index 000000000..b98cda536 Binary files /dev/null and b/icons/png/resources/unlabeled/job-128.png differ diff --git a/icons/png/resources/unlabeled/limits-128.png b/icons/png/resources/unlabeled/limits-128.png new file mode 100644 index 000000000..9f02b2ad5 Binary files /dev/null and b/icons/png/resources/unlabeled/limits-128.png differ diff --git a/icons/png/resources/unlabeled/netpol-128.png b/icons/png/resources/unlabeled/netpol-128.png new file mode 100644 index 000000000..a7ef5f7fe Binary files /dev/null and b/icons/png/resources/unlabeled/netpol-128.png differ diff --git a/icons/png/resources/unlabeled/ns-128.png b/icons/png/resources/unlabeled/ns-128.png new file mode 100644 index 000000000..8e1e1485b Binary files /dev/null and b/icons/png/resources/unlabeled/ns-128.png differ diff --git a/icons/png/resources/unlabeled/pod-128.png b/icons/png/resources/unlabeled/pod-128.png new file mode 100644 index 000000000..71936c2ac Binary files /dev/null and b/icons/png/resources/unlabeled/pod-128.png differ diff --git a/icons/png/resources/unlabeled/psp-128.png b/icons/png/resources/unlabeled/psp-128.png new file mode 100644 index 000000000..025270141 Binary files /dev/null and b/icons/png/resources/unlabeled/psp-128.png differ diff --git a/icons/png/resources/unlabeled/pv-128.png b/icons/png/resources/unlabeled/pv-128.png new file mode 100644 index 000000000..4aca498cb Binary files /dev/null and b/icons/png/resources/unlabeled/pv-128.png differ diff --git a/icons/png/resources/unlabeled/pvc-128.png b/icons/png/resources/unlabeled/pvc-128.png new file mode 100644 index 000000000..87f30fe41 Binary files /dev/null and b/icons/png/resources/unlabeled/pvc-128.png differ diff --git a/icons/png/resources/unlabeled/quota-128.png b/icons/png/resources/unlabeled/quota-128.png new file mode 100644 index 000000000..ad3083160 Binary files /dev/null and b/icons/png/resources/unlabeled/quota-128.png differ diff --git a/icons/png/resources/unlabeled/rb-128.png b/icons/png/resources/unlabeled/rb-128.png new file mode 100644 index 000000000..08395e32a Binary files /dev/null and b/icons/png/resources/unlabeled/rb-128.png differ diff --git a/icons/png/resources/unlabeled/role-128.png b/icons/png/resources/unlabeled/role-128.png new file mode 100644 index 000000000..2fdf9358e Binary files /dev/null and b/icons/png/resources/unlabeled/role-128.png differ diff --git a/icons/png/resources/unlabeled/rs-128.png b/icons/png/resources/unlabeled/rs-128.png new file mode 100644 index 000000000..728c46b03 Binary files /dev/null and b/icons/png/resources/unlabeled/rs-128.png differ diff --git a/icons/png/resources/unlabeled/sa-128.png b/icons/png/resources/unlabeled/sa-128.png new file mode 100644 index 000000000..e45406e67 Binary files /dev/null and b/icons/png/resources/unlabeled/sa-128.png differ diff --git a/icons/png/resources/unlabeled/sc-128.png b/icons/png/resources/unlabeled/sc-128.png new file mode 100644 index 000000000..7d28ee74f Binary files /dev/null and b/icons/png/resources/unlabeled/sc-128.png differ diff --git a/icons/png/resources/unlabeled/secret-128.png b/icons/png/resources/unlabeled/secret-128.png new file mode 100644 index 000000000..6d01b4b17 Binary files /dev/null and b/icons/png/resources/unlabeled/secret-128.png differ diff --git a/icons/png/resources/unlabeled/sts-128.png b/icons/png/resources/unlabeled/sts-128.png new file mode 100644 index 000000000..c5ca39852 Binary files /dev/null and b/icons/png/resources/unlabeled/sts-128.png differ diff --git a/icons/png/resources/unlabeled/svc-128.png b/icons/png/resources/unlabeled/svc-128.png new file mode 100644 index 000000000..442fc2ff5 Binary files /dev/null and b/icons/png/resources/unlabeled/svc-128.png differ diff --git a/icons/png/resources/unlabeled/user-128.png b/icons/png/resources/unlabeled/user-128.png new file mode 100644 index 000000000..ff98f7966 Binary files /dev/null and b/icons/png/resources/unlabeled/user-128.png differ diff --git a/icons/png/resources/unlabeled/vol-128.png b/icons/png/resources/unlabeled/vol-128.png new file mode 100644 index 000000000..261a8156d Binary files /dev/null and b/icons/png/resources/unlabeled/vol-128.png differ diff --git a/icons/svg/control_plane_components/labeled/api.svg b/icons/svg/control_plane_components/labeled/api.svg new file mode 100644 index 000000000..0e98429f7 --- /dev/null +++ b/icons/svg/control_plane_components/labeled/api.svg @@ -0,0 +1,95 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + api + + + diff --git a/icons/svg/control_plane_components/labeled/c-c-m.svg b/icons/svg/control_plane_components/labeled/c-c-m.svg new file mode 100644 index 000000000..167f60735 --- /dev/null +++ b/icons/svg/control_plane_components/labeled/c-c-m.svg @@ -0,0 +1,95 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + c-c-m + + + diff --git a/icons/svg/control_plane_components/labeled/c-m.svg b/icons/svg/control_plane_components/labeled/c-m.svg new file mode 100644 index 000000000..05d820062 --- /dev/null +++ b/icons/svg/control_plane_components/labeled/c-m.svg @@ -0,0 +1,95 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + c-m + + + diff --git a/icons/svg/control_plane_components/labeled/k-proxy.svg b/icons/svg/control_plane_components/labeled/k-proxy.svg new file mode 100644 index 000000000..8ff6459b8 --- /dev/null +++ b/icons/svg/control_plane_components/labeled/k-proxy.svg @@ -0,0 +1,95 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + k-proxy + + + diff --git a/icons/svg/control_plane_components/labeled/kubelet.svg b/icons/svg/control_plane_components/labeled/kubelet.svg new file mode 100644 index 000000000..eadc73ce2 --- /dev/null +++ b/icons/svg/control_plane_components/labeled/kubelet.svg @@ -0,0 +1,95 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + kubelet + + + diff --git a/icons/svg/control_plane_components/labeled/sched.svg b/icons/svg/control_plane_components/labeled/sched.svg new file mode 100644 index 000000000..c66a95d7b --- /dev/null +++ b/icons/svg/control_plane_components/labeled/sched.svg @@ -0,0 +1,95 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + sched + + + diff --git a/icons/svg/infrastructure_components/labeled/etcd.svg b/icons/svg/infrastructure_components/labeled/etcd.svg new file mode 100644 index 000000000..ecef1d2fe --- /dev/null +++ b/icons/svg/infrastructure_components/labeled/etcd.svg @@ -0,0 +1,100 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + etcd + + + + diff --git a/icons/svg/infrastructure_components/labeled/master.svg b/icons/svg/infrastructure_components/labeled/master.svg new file mode 100644 index 000000000..937e79538 --- /dev/null +++ b/icons/svg/infrastructure_components/labeled/master.svg @@ -0,0 +1,95 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + master + + + diff --git a/icons/svg/infrastructure_components/labeled/node.svg b/icons/svg/infrastructure_components/labeled/node.svg new file mode 100644 index 000000000..a212804eb --- /dev/null +++ b/icons/svg/infrastructure_components/labeled/node.svg @@ -0,0 +1,95 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + node + + + diff --git a/icons/svg/infrastructure_components/unlabeled/etcd.svg b/icons/svg/infrastructure_components/unlabeled/etcd.svg new file mode 100644 index 000000000..1dff93b56 --- /dev/null +++ b/icons/svg/infrastructure_components/unlabeled/etcd.svg @@ -0,0 +1,89 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/icons/svg/infrastructure_components/unlabeled/master.svg b/icons/svg/infrastructure_components/unlabeled/master.svg new file mode 100644 index 000000000..94233bf96 --- /dev/null +++ b/icons/svg/infrastructure_components/unlabeled/master.svg @@ -0,0 +1,84 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/icons/svg/infrastructure_components/unlabeled/node.svg b/icons/svg/infrastructure_components/unlabeled/node.svg new file mode 100644 index 000000000..c0f2b8e13 --- /dev/null +++ b/icons/svg/infrastructure_components/unlabeled/node.svg @@ -0,0 +1,84 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/icons/svg/resources/labeled/c-role.svg b/icons/svg/resources/labeled/c-role.svg new file mode 100644 index 000000000..a78aabbb2 --- /dev/null +++ b/icons/svg/resources/labeled/c-role.svg @@ -0,0 +1,112 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + c.role + + + + + + + diff --git a/icons/svg/resources/labeled/cm.svg b/icons/svg/resources/labeled/cm.svg new file mode 100644 index 000000000..6298022ee --- /dev/null +++ b/icons/svg/resources/labeled/cm.svg @@ -0,0 +1,152 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + cm + + + + + + + + + + + + + + diff --git a/icons/svg/resources/labeled/crb.svg b/icons/svg/resources/labeled/crb.svg new file mode 100644 index 000000000..da5baa42e --- /dev/null +++ b/icons/svg/resources/labeled/crb.svg @@ -0,0 +1,94 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + crb + + + diff --git a/icons/svg/resources/labeled/crd.svg b/icons/svg/resources/labeled/crd.svg new file mode 100644 index 000000000..21559f928 --- /dev/null +++ b/icons/svg/resources/labeled/crd.svg @@ -0,0 +1,94 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + crd + + + diff --git a/icons/svg/resources/labeled/cronjob.svg b/icons/svg/resources/labeled/cronjob.svg new file mode 100644 index 000000000..b422fce38 --- /dev/null +++ b/icons/svg/resources/labeled/cronjob.svg @@ -0,0 +1,105 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + cronjob + + + + + + diff --git a/icons/svg/resources/labeled/deploy.svg b/icons/svg/resources/labeled/deploy.svg new file mode 100644 index 000000000..294714b21 --- /dev/null +++ b/icons/svg/resources/labeled/deploy.svg @@ -0,0 +1,103 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + deploy + + + + + + diff --git a/icons/svg/resources/labeled/ds.svg b/icons/svg/resources/labeled/ds.svg new file mode 100644 index 000000000..90a7b4d47 --- /dev/null +++ b/icons/svg/resources/labeled/ds.svg @@ -0,0 +1,118 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + ds + + + + + + + + + diff --git a/icons/svg/resources/labeled/ep.svg b/icons/svg/resources/labeled/ep.svg new file mode 100644 index 000000000..02a593895 --- /dev/null +++ b/icons/svg/resources/labeled/ep.svg @@ -0,0 +1,200 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + ep + + + + + + + + + + + + + + + + + + diff --git a/icons/svg/resources/labeled/group.svg b/icons/svg/resources/labeled/group.svg new file mode 100644 index 000000000..1fa043098 --- /dev/null +++ b/icons/svg/resources/labeled/group.svg @@ -0,0 +1,94 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + group + + + diff --git a/icons/svg/resources/labeled/hpa.svg b/icons/svg/resources/labeled/hpa.svg new file mode 100644 index 000000000..d4cbea5ca --- /dev/null +++ b/icons/svg/resources/labeled/hpa.svg @@ -0,0 +1,114 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + hpa + + + + + + + + diff --git a/icons/svg/resources/labeled/ing.svg b/icons/svg/resources/labeled/ing.svg new file mode 100644 index 000000000..814bed5f8 --- /dev/null +++ b/icons/svg/resources/labeled/ing.svg @@ -0,0 +1,95 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + ing + + + diff --git a/icons/svg/resources/labeled/job.svg b/icons/svg/resources/labeled/job.svg new file mode 100644 index 000000000..d6257fcc9 --- /dev/null +++ b/icons/svg/resources/labeled/job.svg @@ -0,0 +1,142 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + job + + + + + + + + + + + diff --git a/icons/svg/resources/labeled/limits.svg b/icons/svg/resources/labeled/limits.svg new file mode 100644 index 000000000..0092ca2f3 --- /dev/null +++ b/icons/svg/resources/labeled/limits.svg @@ -0,0 +1,107 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + limits + + + + + + diff --git a/icons/svg/resources/labeled/netpol.svg b/icons/svg/resources/labeled/netpol.svg new file mode 100644 index 000000000..a2bf281c2 --- /dev/null +++ b/icons/svg/resources/labeled/netpol.svg @@ -0,0 +1,95 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + netpol + + + diff --git a/icons/svg/resources/labeled/ns.svg b/icons/svg/resources/labeled/ns.svg new file mode 100644 index 000000000..41942dd9f --- /dev/null +++ b/icons/svg/resources/labeled/ns.svg @@ -0,0 +1,96 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + ns + + + diff --git a/icons/svg/resources/labeled/pod.svg b/icons/svg/resources/labeled/pod.svg new file mode 100644 index 000000000..01da2368a --- /dev/null +++ b/icons/svg/resources/labeled/pod.svg @@ -0,0 +1,114 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + pod + + + + + + + diff --git a/icons/svg/resources/labeled/psp.svg b/icons/svg/resources/labeled/psp.svg new file mode 100644 index 000000000..cc621fb98 --- /dev/null +++ b/icons/svg/resources/labeled/psp.svg @@ -0,0 +1,119 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + psp + + + + + + + + diff --git a/icons/svg/resources/labeled/pv.svg b/icons/svg/resources/labeled/pv.svg new file mode 100644 index 000000000..062e9042f --- /dev/null +++ b/icons/svg/resources/labeled/pv.svg @@ -0,0 +1,108 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + pv + + + + + + + diff --git a/icons/svg/resources/labeled/pvc.svg b/icons/svg/resources/labeled/pvc.svg new file mode 100644 index 000000000..93c9f64f4 --- /dev/null +++ b/icons/svg/resources/labeled/pvc.svg @@ -0,0 +1,94 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + pvc + + + diff --git a/icons/svg/resources/labeled/quota.svg b/icons/svg/resources/labeled/quota.svg new file mode 100644 index 000000000..3f8a601f4 --- /dev/null +++ b/icons/svg/resources/labeled/quota.svg @@ -0,0 +1,105 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + quota + + + + + + diff --git a/icons/svg/resources/labeled/rb.svg b/icons/svg/resources/labeled/rb.svg new file mode 100644 index 000000000..494ac545f --- /dev/null +++ b/icons/svg/resources/labeled/rb.svg @@ -0,0 +1,135 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + rb + + + + + + + + + + + diff --git a/icons/svg/resources/labeled/role.svg b/icons/svg/resources/labeled/role.svg new file mode 100644 index 000000000..0e9c94eb4 --- /dev/null +++ b/icons/svg/resources/labeled/role.svg @@ -0,0 +1,120 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + role + + + + + + + + diff --git a/icons/svg/resources/labeled/rs.svg b/icons/svg/resources/labeled/rs.svg new file mode 100644 index 000000000..598efbdf9 --- /dev/null +++ b/icons/svg/resources/labeled/rs.svg @@ -0,0 +1,113 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + rs + + + + + + + + diff --git a/icons/svg/resources/labeled/sa.svg b/icons/svg/resources/labeled/sa.svg new file mode 100644 index 000000000..221693db6 --- /dev/null +++ b/icons/svg/resources/labeled/sa.svg @@ -0,0 +1,95 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + sa + + + diff --git a/icons/svg/resources/labeled/sc.svg b/icons/svg/resources/labeled/sc.svg new file mode 100644 index 000000000..2e5199da9 --- /dev/null +++ b/icons/svg/resources/labeled/sc.svg @@ -0,0 +1,138 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + sc + + + + + + + + + + + + + diff --git a/icons/svg/resources/labeled/secret.svg b/icons/svg/resources/labeled/secret.svg new file mode 100644 index 000000000..a2eca2339 --- /dev/null +++ b/icons/svg/resources/labeled/secret.svg @@ -0,0 +1,139 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + secret + + + + + + + + + + + + + diff --git a/icons/svg/resources/labeled/sts.svg b/icons/svg/resources/labeled/sts.svg new file mode 100644 index 000000000..6232efe97 --- /dev/null +++ b/icons/svg/resources/labeled/sts.svg @@ -0,0 +1,131 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + sts + + + + + + + + + + + + + diff --git a/icons/svg/resources/labeled/svc.svg b/icons/svg/resources/labeled/svc.svg new file mode 100644 index 000000000..7ed8a5c2b --- /dev/null +++ b/icons/svg/resources/labeled/svc.svg @@ -0,0 +1,128 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + svc + + + + + + + + + + + diff --git a/icons/svg/resources/labeled/user.svg b/icons/svg/resources/labeled/user.svg new file mode 100644 index 000000000..bb971ffc6 --- /dev/null +++ b/icons/svg/resources/labeled/user.svg @@ -0,0 +1,94 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + user + + + diff --git a/icons/svg/resources/labeled/vol.svg b/icons/svg/resources/labeled/vol.svg new file mode 100644 index 000000000..0b8657a53 --- /dev/null +++ b/icons/svg/resources/labeled/vol.svg @@ -0,0 +1,108 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + vol + + + + + + + diff --git a/icons/svg/resources/unlabeled/c-role.svg b/icons/svg/resources/unlabeled/c-role.svg new file mode 100644 index 000000000..cbeadbc44 --- /dev/null +++ b/icons/svg/resources/unlabeled/c-role.svg @@ -0,0 +1,102 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/icons/svg/resources/unlabeled/cm.svg b/icons/svg/resources/unlabeled/cm.svg new file mode 100644 index 000000000..85ac9b476 --- /dev/null +++ b/icons/svg/resources/unlabeled/cm.svg @@ -0,0 +1,141 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/svg/resources/unlabeled/crb.svg b/icons/svg/resources/unlabeled/crb.svg new file mode 100644 index 000000000..8a3a6fffc --- /dev/null +++ b/icons/svg/resources/unlabeled/crb.svg @@ -0,0 +1,83 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/icons/svg/resources/unlabeled/crd.svg b/icons/svg/resources/unlabeled/crd.svg new file mode 100644 index 000000000..3048ae6c8 --- /dev/null +++ b/icons/svg/resources/unlabeled/crd.svg @@ -0,0 +1,83 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/icons/svg/resources/unlabeled/cronjob.svg b/icons/svg/resources/unlabeled/cronjob.svg new file mode 100644 index 000000000..bc7d144d8 --- /dev/null +++ b/icons/svg/resources/unlabeled/cronjob.svg @@ -0,0 +1,94 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/icons/svg/resources/unlabeled/deploy.svg b/icons/svg/resources/unlabeled/deploy.svg new file mode 100644 index 000000000..b11d2085f --- /dev/null +++ b/icons/svg/resources/unlabeled/deploy.svg @@ -0,0 +1,92 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/icons/svg/resources/unlabeled/ds.svg b/icons/svg/resources/unlabeled/ds.svg new file mode 100644 index 000000000..4602e630c --- /dev/null +++ b/icons/svg/resources/unlabeled/ds.svg @@ -0,0 +1,107 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/icons/svg/resources/unlabeled/ep.svg b/icons/svg/resources/unlabeled/ep.svg new file mode 100644 index 000000000..8b1847cd6 --- /dev/null +++ b/icons/svg/resources/unlabeled/ep.svg @@ -0,0 +1,189 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/svg/resources/unlabeled/group.svg b/icons/svg/resources/unlabeled/group.svg new file mode 100644 index 000000000..5e24d2816 --- /dev/null +++ b/icons/svg/resources/unlabeled/group.svg @@ -0,0 +1,83 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/icons/svg/resources/unlabeled/hpa.svg b/icons/svg/resources/unlabeled/hpa.svg new file mode 100644 index 000000000..214dbf5e8 --- /dev/null +++ b/icons/svg/resources/unlabeled/hpa.svg @@ -0,0 +1,103 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/icons/svg/resources/unlabeled/ing.svg b/icons/svg/resources/unlabeled/ing.svg new file mode 100644 index 000000000..0dde27514 --- /dev/null +++ b/icons/svg/resources/unlabeled/ing.svg @@ -0,0 +1,84 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/icons/svg/resources/unlabeled/job.svg b/icons/svg/resources/unlabeled/job.svg new file mode 100644 index 000000000..d4b7f85c4 --- /dev/null +++ b/icons/svg/resources/unlabeled/job.svg @@ -0,0 +1,131 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/svg/resources/unlabeled/limits.svg b/icons/svg/resources/unlabeled/limits.svg new file mode 100644 index 000000000..8e59e3cc5 --- /dev/null +++ b/icons/svg/resources/unlabeled/limits.svg @@ -0,0 +1,96 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/icons/svg/resources/unlabeled/netpol.svg b/icons/svg/resources/unlabeled/netpol.svg new file mode 100644 index 000000000..55b574d58 --- /dev/null +++ b/icons/svg/resources/unlabeled/netpol.svg @@ -0,0 +1,84 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/icons/svg/resources/unlabeled/ns.svg b/icons/svg/resources/unlabeled/ns.svg new file mode 100644 index 000000000..231c21c9e --- /dev/null +++ b/icons/svg/resources/unlabeled/ns.svg @@ -0,0 +1,85 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/icons/svg/resources/unlabeled/pod.svg b/icons/svg/resources/unlabeled/pod.svg new file mode 100644 index 000000000..f88d2dbca --- /dev/null +++ b/icons/svg/resources/unlabeled/pod.svg @@ -0,0 +1,103 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/icons/svg/resources/unlabeled/psp.svg b/icons/svg/resources/unlabeled/psp.svg new file mode 100644 index 000000000..37ffbe3e4 --- /dev/null +++ b/icons/svg/resources/unlabeled/psp.svg @@ -0,0 +1,108 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/icons/svg/resources/unlabeled/pv.svg b/icons/svg/resources/unlabeled/pv.svg new file mode 100644 index 000000000..dba1bd2d7 --- /dev/null +++ b/icons/svg/resources/unlabeled/pv.svg @@ -0,0 +1,97 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/icons/svg/resources/unlabeled/pvc.svg b/icons/svg/resources/unlabeled/pvc.svg new file mode 100644 index 000000000..bf7518eb5 --- /dev/null +++ b/icons/svg/resources/unlabeled/pvc.svg @@ -0,0 +1,83 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/icons/svg/resources/unlabeled/quota.svg b/icons/svg/resources/unlabeled/quota.svg new file mode 100644 index 000000000..91f96b8f9 --- /dev/null +++ b/icons/svg/resources/unlabeled/quota.svg @@ -0,0 +1,94 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/icons/svg/resources/unlabeled/rb.svg b/icons/svg/resources/unlabeled/rb.svg new file mode 100644 index 000000000..09ea1a965 --- /dev/null +++ b/icons/svg/resources/unlabeled/rb.svg @@ -0,0 +1,124 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/svg/resources/unlabeled/role.svg b/icons/svg/resources/unlabeled/role.svg new file mode 100644 index 000000000..59c8cb566 --- /dev/null +++ b/icons/svg/resources/unlabeled/role.svg @@ -0,0 +1,109 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/icons/svg/resources/unlabeled/rs.svg b/icons/svg/resources/unlabeled/rs.svg new file mode 100644 index 000000000..facd3cacc --- /dev/null +++ b/icons/svg/resources/unlabeled/rs.svg @@ -0,0 +1,102 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/icons/svg/resources/unlabeled/sa.svg b/icons/svg/resources/unlabeled/sa.svg new file mode 100644 index 000000000..3f2596b0a --- /dev/null +++ b/icons/svg/resources/unlabeled/sa.svg @@ -0,0 +1,84 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/icons/svg/resources/unlabeled/sc.svg b/icons/svg/resources/unlabeled/sc.svg new file mode 100644 index 000000000..012382062 --- /dev/null +++ b/icons/svg/resources/unlabeled/sc.svg @@ -0,0 +1,130 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/svg/resources/unlabeled/secret.svg b/icons/svg/resources/unlabeled/secret.svg new file mode 100644 index 000000000..195727e1e --- /dev/null +++ b/icons/svg/resources/unlabeled/secret.svg @@ -0,0 +1,128 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/svg/resources/unlabeled/sts.svg b/icons/svg/resources/unlabeled/sts.svg new file mode 100644 index 000000000..ab104f8d2 --- /dev/null +++ b/icons/svg/resources/unlabeled/sts.svg @@ -0,0 +1,120 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/svg/resources/unlabeled/svc.svg b/icons/svg/resources/unlabeled/svc.svg new file mode 100644 index 000000000..779b61405 --- /dev/null +++ b/icons/svg/resources/unlabeled/svc.svg @@ -0,0 +1,117 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/svg/resources/unlabeled/user.svg b/icons/svg/resources/unlabeled/user.svg new file mode 100644 index 000000000..358c05c2a --- /dev/null +++ b/icons/svg/resources/unlabeled/user.svg @@ -0,0 +1,83 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/icons/svg/resources/unlabeled/vol.svg b/icons/svg/resources/unlabeled/vol.svg new file mode 100644 index 000000000..2cbc4e7b7 --- /dev/null +++ b/icons/svg/resources/unlabeled/vol.svg @@ -0,0 +1,97 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/icons/tools/Dockerfile b/icons/tools/Dockerfile new file mode 100644 index 000000000..95c6eef7a --- /dev/null +++ b/icons/tools/Dockerfile @@ -0,0 +1,8 @@ +FROM ubuntu:18.04 + +RUN apt-get update && apt-get install -y librsvg2-bin + +WORKDIR /convertor + +ENTRYPOINT ["rsvg-convert"] +CMD ["-d", "300", "-p", "300"] diff --git a/icons/tools/rasterize.sh b/icons/tools/rasterize.sh new file mode 100755 index 000000000..8b12cbc72 --- /dev/null +++ b/icons/tools/rasterize.sh @@ -0,0 +1,17 @@ +#!/bin/sh +SIZE=256 + +docker build -t svgconvertor:latest -f tools/Dockerfile . + +total=$(ls svg/*/*/* | wc -l) +counter=1 + +for svg in $(ls svg/*/*/* | cut -b 5-); do + dir=$(echo $svg | cut -d / -f-2) + mkdir -p png/$dir + output=png/${svg%%.*}-$SIZE.png + echo "[$counter/$total] Generating $output" + docker run -v $(pwd)/svg:/convertor svgconvertor:latest $svg -h $SIZE -w $SIZE > $output + counter=$[$counter +1] +done + diff --git a/incubator.md b/incubator.md index 02b52556e..10d7b7036 100644 --- a/incubator.md +++ b/incubator.md @@ -1,6 +1,6 @@ # IMPORTANT - The Kubernetes Incubator process is now deprecated and has been superseded by Kubernetes subprojects -For information on creating a repository for a subproject see: [kubernetes-repositories](kubernetes-repositories.md) +For information on creating a repository for a subproject see: [kubernetes-repositories](/github-management/kubernetes-repositories.md) Each SIG should define the process for sponsoring new subprojects in its charter. For information on SIG governance and charters see: [SIG governance](committee-steering/governance/README.md) diff --git a/keps/0000-kep-template.md b/keps/0000-kep-template.md index 918660298..cfd1f5fa1 100644 --- a/keps/0000-kep-template.md +++ b/keps/0000-kep-template.md @@ -1,168 +1,4 @@ ---- -kep-number: 0 -title: My First KEP -authors: - - "@janedoe" -owning-sig: sig-xxx -participating-sigs: - - sig-aaa - - sig-bbb -reviewers: - - TBD - - "@alicedoe" -approvers: - - TBD - - "@oscardoe" -editor: TBD -creation-date: yyyy-mm-dd -last-updated: yyyy-mm-dd -status: provisional -see-also: - - KEP-1 - - KEP-2 -replaces: - - KEP-3 -superseded-by: - - KEP-100 ---- - -# Title - -This is the title of the KEP. -Keep it simple and descriptive. -A good title can help communicate what the KEP is and should be considered as part of any review. - -The *filename* for the KEP should include the KEP number along with the title. -The title should be lowercased and spaces/punctuation should be replaced with `-`. -As the KEP is approved and an official KEP number is allocated, the file should be renamed. - -To get started with this template: -1. **Pick a hosting SIG.** - Make sure that the problem space is something the SIG is interested in taking up. - KEPs should not be checked in without a sponsoring SIG. -1. **Allocate a KEP number.** - Do this by (a) taking the next number in the `NEXT_KEP_NUMBER` file and (b) incrementing that number. - Include the updated `NEXT_KEP_NUMBER` file in your PR. -1. **Make a copy of this template.** - Name it `NNNN-YYYYMMDD-my-title.md` where `NNNN` is the KEP number that was allocated. -1. **Fill out the "overview" sections.** - This includes the Summary and Motivation sections. - These should be easy if you've preflighted the idea of the KEP with the appropriate SIG. -1. **Create a PR.** - Assign it to folks in the SIG that are sponsoring this process. -1. **Merge early.** - Avoid getting hung up on specific details and instead aim to get the goal of the KEP merged quickly. - The best way to do this is to just start with the "Overview" sections and fill out details incrementally in follow on PRs. - View anything marked as a `provisional` as a working document and subject to change. - Aim for single topic PRs to keep discussions focused. - If you disagree with what is already in a document, open a new PR with suggested changes. - -The canonical place for the latest set of instructions (and the likely source of this file) is [here](/keps/0000-kep-template.md). - -The `Metadata` section above is intended to support the creation of tooling around the KEP process. -This will be a YAML section that is fenced as a code block. -See the KEP process for details on each of these items. - -## Table of Contents - -A table of contents is helpful for quickly jumping to sections of a KEP and for highlighting any additional information provided beyond the standard KEP template. -[Tools for generating][] a table of contents from markdown are available. - -* [Table of Contents](#table-of-contents) -* [Summary](#summary) -* [Motivation](#motivation) - * [Goals](#goals) - * [Non-Goals](#non-goals) -* [Proposal](#proposal) - * [User Stories [optional]](#user-stories-optional) - * [Story 1](#story-1) - * [Story 2](#story-2) - * [Implementation Details/Notes/Constraints [optional]](#implementation-detailsnotesconstraints-optional) - * [Risks and Mitigations](#risks-and-mitigations) -* [Graduation Criteria](#graduation-criteria) -* [Implementation History](#implementation-history) -* [Drawbacks [optional]](#drawbacks-optional) -* [Alternatives [optional]](#alternatives-optional) - -[Tools for generating]: https://github.com/ekalinin/github-markdown-toc - -## Summary - -The `Summary` section is incredibly important for producing high quality user focused documentation such as release notes or a development road map. -It should be possible to collect this information before implementation begins in order to avoid requiring implementors to split their attention between writing release notes and implementing the feature itself. -KEP editors, SIG Docs, and SIG PM should help to ensure that the tone and content of the `Summary` section is useful for a wide audience. - -A good summary is probably at least a paragraph in length. - -## Motivation - -This section is for explicitly listing the motivation, goals and non-goals of this KEP. -Describe why the change is important and the benefits to users. -The motivation section can optionally provide links to [experience reports][] to demonstrate the interest in a KEP within the wider Kubernetes community. - -[experience reports]: https://github.com/golang/go/wiki/ExperienceReports - -### Goals - -List the specific goals of the KEP. -How will we know that this has succeeded? - -### Non-Goals - -What is out of scope for his KEP? -Listing non-goals helps to focus discussion and make progress. - -## Proposal - -This is where we get down to the nitty gritty of what the proposal actually is. - -### User Stories [optional] - -Detail the things that people will be able to do if this KEP is implemented. -Include as much detail as possible so that people can understand the "how" of the system. -The goal here is to make this feel real for users without getting bogged down. - -#### Story 1 - -#### Story 2 - -### Implementation Details/Notes/Constraints [optional] - -What are the caveats to the implementation? -What are some important details that didn't come across above. -Go in to as much detail as necessary here. -This might be a good place to talk about core concepts and how they releate. - -### Risks and Mitigations - -What are the risks of this proposal and how do we mitigate. -Think broadly. -For example, consider both security and how this will impact the larger kubernetes ecosystem. - -## Graduation Criteria - -How will we know that this has succeeded? -Gathering user feedback is crucial for building high quality experiences and SIGs have the important responsibility of setting milestones for stability and completeness. -Hopefully the content previously contained in [umbrella issues][] will be tracked in the `Graduation Criteria` section. - -[umbrella issues]: https://github.com/kubernetes/kubernetes/issues/42752 - -## Implementation History - -Major milestones in the life cycle of a KEP should be tracked in `Implementation History`. -Major milestones might include - -- the `Summary` and `Motivation` sections being merged signaling SIG acceptance -- the `Proposal` section being merged signaling agreement on a proposed design -- the date implementation started -- the first Kubernetes release where an initial version of the KEP was available -- the version of Kubernetes where the KEP graduated to general availability -- when the KEP was retired or superseded - -## Drawbacks [optional] - -Why should this KEP _not_ be implemented. - -## Alternatives [optional] - -Similar to the `Drawbacks` section the `Alternatives` section is used to highlight and record other possible approaches to delivering the value proposed by a KEP. +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/0001-kubernetes-enhancement-proposal-process.md b/keps/0001-kubernetes-enhancement-proposal-process.md index 4594b7167..cfd1f5fa1 100644 --- a/keps/0001-kubernetes-enhancement-proposal-process.md +++ b/keps/0001-kubernetes-enhancement-proposal-process.md @@ -1,362 +1,4 @@ ---- -kep-number: 1 -title: Kubernetes Enhancement Proposal Process -authors: - - "@calebamiles" - - "@jbeda" -owning-sig: sig-architecture -participating-sigs: - - kubernetes-wide -reviewers: - - name: "@timothysc" -approvers: - - name: "@bgrant0607" -editor: - name: "@jbeda" -creation-date: 2017-08-22 -status: implementable ---- - -# Kubernetes Enhancement Proposal Process - -## Table of Contents - -* [Kubernetes Enhancement Proposal Process](#kubernetes-enhancement-proposal-process) - * [Metadata](#metadata) - * [Table of Contents](#table-of-contents) - * [Summary](#summary) - * [Motivation](#motivation) - * [Reference-level explanation](#reference-level-explanation) - * [What type of work should be tracked by a KEP](#what-type-of-work-should-be-tracked-by-a-kep) - * [KEP Template](#kep-template) - * [KEP Metadata](#kep-metadata) - * [KEP Workflow](#kep-workflow) - * [Git and GitHub Implementation](#git-and-github-implementation) - * [KEP Editor Role](#kep-editor-role) - * [Important Metrics](#important-metrics) - * [Prior Art](#prior-art) - * [Graduation Criteria](#graduation-criteria) - * [Drawbacks](#drawbacks) - * [Alternatives](#alternatives) - * [Unresolved Questions](#unresolved-questions) - * [Mentors](#mentors) - -## Summary - -A standardized development process for Kubernetes is proposed in order to - -- provide a common structure for proposing changes to Kubernetes -- ensure that the motivation for a change is clear -- allow for the enumeration stability milestones and stability graduation - criteria -- persist project information in a Version Control System (VCS) for future - Kubernauts -- support the creation of _high value user facing_ information such as: - - an overall project development roadmap - - motivation for impactful user facing changes -- reserve GitHub issues for tracking work in flight rather than creating "umbrella" - issues -- ensure community participants are successfully able to drive changes to - completion across one or more releases while stakeholders are adequately - represented throughout the process - -This process is supported by a unit of work called a Kubernetes Enhancement Proposal or KEP. -A KEP attempts to combine aspects of a - -- feature, and effort tracking document -- a product requirements document -- design document - -into one file which is created incrementally in collaboration with one or more -Special Interest Groups (SIGs). - -## Motivation - -For cross project SIGs such as SIG PM and SIG Release an abstraction beyond a -single GitHub Issue or Pull request seems to be required in order to understand -and communicate upcoming changes to Kubernetes. In a blog post describing the -[road to Go 2][], Russ Cox explains - -> that it is difficult but essential to describe the significance of a problem -> in a way that someone working in a different environment can understand - -as a project it is vital to be able to track the chain of custody for a proposed -enhancement from conception through implementation. - -Without a standardized mechanism for describing important enhancements our -talented technical writers and product managers struggle to weave a coherent -narrative explaining why a particular release is important. Additionally for -critical infrastructure such as Kubernetes adopters need a forward looking road -map in order to plan their adoption strategy. - -The purpose of the KEP process is to reduce the amount of "tribal knowledge" in -our community. By moving decisions from a smattering of mailing lists, video -calls and hallway conversations into a well tracked artifact this process aims -to enhance communication and discoverability. - -A KEP is broken into sections which can be merged into source control -incrementally in order to support an iterative development process. An important -goal of the KEP process is ensuring that the process for submitting the content -contained in [design proposals][] is both clear and efficient. The KEP process -is intended to create high quality uniform design and implementation documents -for SIGs to deliberate. - -[road to Go 2]: https://blog.golang.org/toward-go2 -[design proposals]: /contributors/design-proposals - - -## Reference-level explanation - -### What type of work should be tracked by a KEP - -The definition of what constitutes an "enhancement" is a foundational concern -for the Kubernetes project. Roughly any Kubernetes user or operator facing -enhancement should follow the KEP process: if an enhancement would be described -in either written or verbal communication to anyone besides the KEP author or -developer then consider creating a KEP. - -Similarly, any technical effort (refactoring, major architectural change) that -will impact a large section of the development community should also be -communicated widely. The KEP process is suited for this even if it will have -zero impact on the typical user or operator. - -As the local bodies of governance, SIGs should have broad latitude in describing -what constitutes an enhancement which should be tracked through the KEP process. -SIGs may find that helpful to enumerate what _does not_ require a KEP rather -than what does. SIGs also have the freedom to customize the KEP template -according to their SIG specific concerns. For example the KEP template used to -track API changes will likely have different subsections than the template for -proposing governance changes. However, as changes start impacting other SIGs or -the larger developer community outside of a SIG, the KEP process should be used -to coordinate and communicate. - -Enhancements that have major impacts on multiple SIGs should use the KEP process. -A single SIG will own the KEP but it is expected that the set of approvers will span the impacted SIGs. -The KEP process is the way that SIGs can negotiate and communicate changes that cross boundaries. - -KEPs will also be used to drive large changes that will cut across all parts of the project. -These KEPs will be owned by SIG-architecture and should be seen as a way to communicate the most fundamental aspects of what Kubernetes is. - -### KEP Template - -The template for a KEP is precisely defined [here](0000-kep-template.md) - -### KEP Metadata - -There is a place in each KEP for a YAML document that has standard metadata. -This will be used to support tooling around filtering and display. It is also -critical to clearly communicate the status of a KEP. - -Metadata items: -* **kep-number** Required - * Each proposal has a number. This is to make all references to proposals as - clear as possible. This is especially important as we create a network - cross references between proposals. - * Before having the `Approved` status, the number for the KEP will be in the - form of `draft-YYYYMMDD`. The `YYYYMMDD` is replaced with the current date - when first creating the KEP. The goal is to enable fast parallel merges of - pre-acceptance KEPs. - * On acceptance a sequential dense number will be assigned. This will be done - by the editor and will be done in such a way as to minimize the chances of - conflicts. The final number for a KEP will have no prefix. -* **title** Required - * The title of the KEP in plain language. The title will also be used in the - KEP filename. See the template for instructions and details. -* **status** Required - * The current state of the KEP. - * Must be one of `provisional`, `implementable`, `implemented`, `deferred`, `rejected`, `withdrawn`, or `replaced`. -* **authors** Required - * A list of authors for the KEP. - This is simply the github ID. - In the future we may enhance this to include other types of identification. -* **owning-sig** Required - * The SIG that is most closely associated with this KEP. If there is code or - other artifacts that will result from this KEP, then it is expected that - this SIG will take responsibility for the bulk of those artifacts. - * Sigs are listed as `sig-abc-def` where the name matches up with the - directory in the `kubernetes/community` repo. -* **participating-sigs** Optional - * A list of SIGs that are involved or impacted by this KEP. - * A special value of `kubernetes-wide` will indicate that this KEP has impact - across the entire project. -* **reviewers** Required - * Reviewer(s) chosen after triage according to proposal process - * If not yet chosen replace with `TBD` - * Same name/contact scheme as `authors` - * Reviewers should be a distinct set from authors. -* **approvers** Required - * Approver(s) chosen after triage according to proposal process - * Approver(s) are drawn from the impacted SIGs. - It is up to the individual SIGs to determine how they pick approvers for KEPs impacting them. - The approvers are speaking for the SIG in the process of approving this KEP. - The SIGs in question can modify this list as necessary. - * The approvers are the individuals that make the call to move this KEP to the `approved` state. - * Approvers should be a distinct set from authors. - * If not yet chosen replace with `TBD` - * Same name/contact scheme as `authors` -* **editor** Required - * Someone to keep things moving forward. - * If not yet chosen replace with `TBD` - * Same name/contact scheme as `authors` -* **creation-date** Required - * The date that the KEP was first submitted in a PR. - * In the form `yyyy-mm-dd` - * While this info will also be in source control, it is helpful to have the set of KEP files stand on their own. -* **last-updated** Optional - * The date that the KEP was last changed significantly. - * In the form `yyyy-mm-dd` -* **see-also** Optional - * A list of other KEPs that are relevant to this KEP. - * In the form `KEP-123` -* **replaces** Optional - * A list of KEPs that this KEP replaces. Those KEPs should list this KEP in - their `superseded-by`. - * In the form `KEP-123` -* **superseded-by** - * A list of KEPs that supersede this KEP. Use of this should be paired with - this KEP moving into the `Replaced` status. - * In the form `KEP-123` - - -### KEP Workflow - -A KEP has the following states - -- `provisional`: The KEP has been proposed and is actively being defined. - This is the starting state while the KEP is being fleshed out and actively defined and discussed. - The owning SIG has accepted that this is work that needs to be done. -- `implementable`: The approvers have approved this KEP for implementation. -- `implemented`: The KEP has been implemented and is no longer actively changed. -- `deferred`: The KEP is proposed but not actively being worked on. -- `rejected`: The approvers and authors have decided that this KEP is not moving forward. - The KEP is kept around as a historical document. -- `withdrawn`: The KEP has been withdrawn by the authors. -- `replaced`: The KEP has been replaced by a new KEP. - The `superseded-by` metadata value should point to the new KEP. - -### Git and GitHub Implementation - -KEPs are checked into the community repo under the `/kep` directory. -In the future, as needed we can add SIG specific subdirectories. -KEPs in SIG specific subdirectories have limited impact outside of the SIG and can leverage SIG specific OWNERS files. - -New KEPs can be checked in with a file name in the form of `draft-YYYYMMDD-my-title.md`. -As significant work is done on the KEP the authors can assign a KEP number. -This is done by taking the next number in the NEXT_KEP_NUMBER file, incrementing that number, and renaming the KEP. -No other changes should be put in that PR so that it can be approved quickly and minimize merge conflicts. -The KEP number can also be done as part of the initial submission if the PR is likely to be uncontested and merged quickly. - -### KEP Editor Role - -Taking a cue from the [Python PEP process][], we define the role of a KEP editor. -The job of an KEP editor is likely very similar to the [PEP editor responsibilities][] and will hopefully provide another opportunity for people who do not write code daily to contribute to Kubernetes. - -In keeping with the PEP editors which - -> Read the PEP to check if it is ready: sound and complete. The ideas must make -> technical sense, even if they don't seem likely to be accepted. -> The title should accurately describe the content. -> Edit the PEP for language (spelling, grammar, sentence structure, etc.), markup -> (for reST PEPs), code style (examples should match PEP 8 & 7). - -KEP editors should generally not pass judgement on a KEP beyond editorial corrections. -KEP editors can also help inform authors about the process and otherwise help things move smoothly. - -[Python PEP process]: https://www.python.org/dev/peps/pep-0001/ -[PEP editor responsibilities]: https://www.python.org/dev/peps/pep-0001/#pep-editor-responsibilities-workflow - -### Important Metrics - -It is proposed that the primary metrics which would signal the success or -failure of the KEP process are - -- how many "enhancements" are tracked with a KEP -- distribution of time a KEP spends in each state -- KEP rejection rate -- PRs referencing a KEP merged per week -- number of issued open which reference a KEP -- number of contributors who authored a KEP -- number of contributors who authored a KEP for the first time -- number of orphaned KEPs -- number of retired KEPs -- number of superseded KEPs - -### Prior Art - -The KEP process as proposed was essentially stolen from the [Rust RFC process][] which -itself seems to be very similar to the [Python PEP process][] - -[Rust RFC process]: https://github.com/rust-lang/rfcs - -## Drawbacks - -Any additional process has the potential to engender resentment within the -community. There is also a risk that the KEP process as designed will not -sufficiently address the scaling challenges we face today. PR review bandwidth is -already at a premium and we may find that the KEP process introduces an unreasonable -bottleneck on our development velocity. - -It certainly can be argued that the lack of a dedicated issue/defect tracker -beyond GitHub issues contributes to our challenges in managing a project as large -as Kubernetes, however, given that other large organizations, including GitHub -itself, make effective use of GitHub issues perhaps the argument is overblown. - -The centrality of Git and GitHub within the KEP process also may place too high -a barrier to potential contributors, however, given that both Git and GitHub are -required to contribute code changes to Kubernetes today perhaps it would be reasonable -to invest in providing support to those unfamiliar with this tooling. - -Expanding the proposal template beyond the single sentence description currently -required in the [features issue template][] may be a heavy burden for non native -English speakers and here the role of the KEP editor combined with kindness and -empathy will be crucial to making the process successful. - -[features issue template]: https://git.k8s.io/features/ISSUE_TEMPLATE.md - -## Alternatives - -This KEP process is related to -- the generation of a [architectural roadmap][] -- the fact that the [what constitutes a feature][] is still undefined -- [issue management][] -- the difference between an [accepted design and a proposal][] -- [the organization of design proposals][] - -this proposal attempts to place these concerns within a general framework. - -[architectural roadmap]: https://github.com/kubernetes/community/issues/952 -[what constitutes a feature]: https://github.com/kubernetes/community/issues/531 -[issue management]: https://github.com/kubernetes/community/issues/580 -[accepted design and a proposal]: https://github.com/kubernetes/community/issues/914 -[the organization of design proposals]: https://github.com/kubernetes/community/issues/918 - -### Github issues vs. KEPs - -The use of GitHub issues when proposing changes does not provide SIGs good -facilities for signaling approval or rejection of a proposed change to Kubernetes -since anyone can open a GitHub issue at any time. Additionally managing a proposed -change across multiple releases is somewhat cumbersome as labels and milestones -need to be updated for every release that a change spans. These long lived GitHub -issues lead to an ever increasing number of issues open against -`kubernetes/features` which itself has become a management problem. - -In addition to the challenge of managing issues over time, searching for text -within an issue can be challenging. The flat hierarchy of issues can also make -navigation and categorization tricky. While not all community members might -not be comfortable using Git directly, it is imperative that as a community we -work to educate people on a standard set of tools so they can take their -experience to other projects they may decide to work on in the future. While -git is a fantastic version control system (VCS), it is not a project management -tool nor a cogent way of managing an architectural catalog or backlog; this -proposal is limited to motivating the creation of a standardized definition of -work in order to facilitate project management. This primitive for describing -a unit of work may also allow contributors to create their own personalized -view of the state of the project while relying on Git and GitHub for consistency -and durable storage. - -## Unresolved Questions - -- How reviewers and approvers are assigned to a KEP -- Example schedule, deadline, and time frame for each stage of a KEP -- Communication/notification mechanisms -- Review meetings and escalation procedure +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/0001a-meta-kep-implementation.md b/keps/0001a-meta-kep-implementation.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/0001a-meta-kep-implementation.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/0002-controller-manager.md b/keps/0002-controller-manager.md deleted file mode 100644 index 1316b123f..000000000 --- a/keps/0002-controller-manager.md +++ /dev/null @@ -1,323 +0,0 @@ ---- -kep-number: 2 -title: Cloud Provider Controller Manager -authors: - - "@cheftako" - - "@calebamiles" -owning-sig: sig-apimachinery -participating-sigs: - - sig-apps - - sig-aws - - sig-azure - - sig-gcp - - sig-network - - sig-openstack - - sig-storage -reviewers: - - "@wlan0" - - "@calebamiles" -approvers: - - "@thockin" -editor: TBD -status: provisional -replaces: - - contributors/design-proposals/cloud-provider/cloud-provider-refactoring.md ---- - -# Remove Cloud Provider Code From Kubernetes Core - -## Table of Contents - -- [Remove Cloud Provider Code From Kubernetes Core](#remove-cloud-provider-code-from-kubernetes-core) - - [Table of Contents](#table-of-contents) - - [Summary](#summary) - - [Motivation](#motivation) - - [Goals](#goals) - - [Intermediary Goals](#intermediary-goals) - - [Non-Goals](#non-goals) - - [Proposal](#proposal) - - [Controller Manager Changes](#controller-manager-changes) - - [Kubelet Changes](#kubelet-changes) - - [API Server Changes](#api-server-changes) - - [Volume Management Changes](#volume-management-changes) - - [Deployment Changes](#deployment-changes) - - [Security Considerations](#security-considerations) - - [Graduation Criteria](#graduation-criteria) - - [Graduation to Beta](#graduation-to-beta) - - [Process Goals](#process-goals) - - [Alternatives](#alternatives) - -## Summary - -We want to remove any cloud provider specific logic from the kubernetes/kubernetes repo. We want to restructure the code -to make is easy for any cloud provider to extend the kubernetes core in a consistent manner for their cloud. New cloud -providers should look at the [Creating a Custom Cluster from Scratch](https://kubernetes.io/docs/getting-started-guides/scratch/#cloud-provider) -and the [cloud provider interface](https://github.com/kubernetes/kubernetes/blob/master/pkg/cloudprovider/cloud.go#L31) -which will need to be implemented. - -## Motivation - -We are trying to remove any dependencies from Kubernetes Core to any specific cloud provider. Currently we have seven -such dependencies. To prevent this number from growing we have locked Kubernetes Core to the addition of any new -dependencies. This means all new cloud providers have to implement all their pieces outside of the Core. -However everyone still ends up consuming the current set of seven in repo dependencies. For the seven in repo cloud -providers any changes to their specific cloud provider code requires OSS PR approvals and a deployment to get those -changes in to an official build. The relevant dependencies require changes in the following areas. - -- [Kube Controller Manager](https://kubernetes.io/docs/reference/generated/kube-controller-manager/) - Track usages of [CMServer.CloudProvider](https://github.com/kubernetes/kubernetes/blob/master/cmd/kube-controller-manager/app/options/options.go) -- [API Server](https://kubernetes.io/docs/reference/generated/kube-apiserver/) - Track usages of [ServerRunOptions.CloudProvider](https://github.com/kubernetes/kubernetes/blob/master/cmd/kube-apiserver/app/options/options.go) -- [Kubelet](https://kubernetes.io/docs/reference/generated/kubelet/) - Track usages of [KubeletFlags.CloudProvider](https://github.com/kubernetes/kubernetes/blob/master/cmd/kubelet/app/options/options.go) -- [How Cloud Provider Functionality is deployed to and enabled in the cluster](https://kubernetes.io/docs/setup/pick-right-solution/#hosted-solutions) - Track usage from [PROVIDER_UTILS](https://github.com/kubernetes/kubernetes/blob/master/cluster/kube-util.sh) - -For the cloud providers who are in repo, moving out would allow them to more quickly iterate on their solution and -decouple cloud provider fixes from open source releases. Moving the cloud provider code out of the open source -processes means that these processes do not need to load/run unnecessary code for the environment they are in. -We would like to abstract a core controller manager library so help standardize the behavior of the cloud -controller managers produced by each cloud provider. We would like to minimize the number and scope of controllers -running in the cloud controller manager so as to minimize the surface area for per cloud provider deviation. - -### Goals - -- Get to a point where we do not load the cloud interface for any of kubernetes core processes. -- Remove all cloud provider specific code from kubernetes/kubernetes. -- Have a generic controller manager library available for use by the per cloud provider controller managers. -- Move the cloud provider specific controller manager logic into repos appropriate for those cloud providers. - -### Intermediary Goals - -Have a cloud controller manager in the kubernetes main repo which hosts all of -the controller loops for the in repo cloud providers. -Do not run any cloud provider logic in the kube controller manager, the kube apiserver or the kubelet. -At intermediary points we may just move some of the cloud specific controllers out. (Eg. volumes may be later than the rest) - -### Non-Goals - -Forcing cloud providers to use the generic cloud manager. - -## Proposal - -### Controller Manager Changes - -For the controller manager we would like to create a set of common code which can be used by both the cloud controller -manager and the kube controller manager. The cloud controller manager would then be responsible for running controllers -whose function is specific to cloud provider functionality. The kube controller manager would then be responsible -for running all controllers whose function was not related to a cloud provider. - -In order to create a 100% cloud independent controller manager, the controller-manager will be split into multiple binaries. - -1. Cloud dependent controller-manager binaries -2. Cloud independent controller-manager binaries - This is the existing `kube-controller-manager` that is being shipped -with kubernetes releases. - -The cloud dependent binaries will run those loops that rely on cloudprovider in a separate process(es) within the kubernetes control plane. -The rest of the controllers will be run in the cloud independent controller manager. -The decision to run entire controller loops, rather than only the very minute parts that rely on cloud provider was made -because it makes the implementation simple. Otherwise, the shared data structures and utility functions have to be -disentangled, and carefully separated to avoid any concurrency issues. This approach among other things, prevents code -duplication and improves development velocity. - -Note that the controller loop implementation will continue to reside in the core repository. It takes in -cloudprovider.Interface as an input in its constructor. Vendor maintained cloud-controller-manager binary could link -these controllers in, as it serves as a reference form of the controller implementation. - -There are four controllers that rely on cloud provider specific code. These are node controller, service controller, -route controller and attach detach controller. Copies of each of these controllers have been bundled together into -one binary. The cloud dependent binary registers itself as a controller, and runs the cloud specific controller loops -with the user-agent named "external-controller-manager". - -RouteController and serviceController are entirely cloud specific. Therefore, it is really simple to move these two -controller loops out of the cloud-independent binary and into the cloud dependent binary. - -NodeController does a lot more than just talk to the cloud. It does the following operations - - -1. CIDR management -2. Monitor Node Status -3. Node Pod Eviction - -While Monitoring Node status, if the status reported by kubelet is either 'ConditionUnknown' or 'ConditionFalse', then -the controller checks if the node has been deleted from the cloud provider. If it has already been deleted from the -cloud provider, then it deletes the nodeobject without waiting for the `monitorGracePeriod` amount of time. This is the -only operation that needs to be moved into the cloud dependent controller manager. - -Finally, The attachDetachController is tricky, and it is not simple to disentangle it from the controller-manager -easily, therefore, this will be addressed with Flex Volumes (Discussed under a separate section below) - - -The kube-controller-manager has many controller loops. [See NewControllerInitializers](https://github.com/kubernetes/kubernetes/blob/release-1.9/cmd/kube-controller-manager/app/controllermanager.go#L332) - - - [nodeController](https://github.com/kubernetes/kubernetes/tree/release-1.9/pkg/controller/node) - - [volumeController](https://github.com/kubernetes/kubernetes/tree/release-1.9/pkg/controller/volume) - - [routeController](https://github.com/kubernetes/kubernetes/tree/release-1.9/pkg/controller/route) - - [serviceController](https://github.com/kubernetes/kubernetes/tree/release-1.9/pkg/controller/service) - - replicationController - - endpointController - - resourceQuotaController - - namespaceController - - deploymentController - - etc.. - -Among these controller loops, the following are cloud provider dependent. - - - [nodeController](https://github.com/kubernetes/kubernetes/tree/release-1.9/pkg/controller/node) - - [volumeController](https://github.com/kubernetes/kubernetes/tree/release-1.9/pkg/controller/volume) - - [routeController](https://github.com/kubernetes/kubernetes/tree/release-1.9/pkg/controller/route) - - [serviceController](https://github.com/kubernetes/kubernetes/tree/release-1.9/pkg/controller/service) - -The nodeController uses the cloudprovider to check if a node has been deleted from the cloud. If cloud provider reports -a node as deleted, then this controller immediately deletes the node from kubernetes. This check removes the need to -wait for a specific amount of time to conclude that an inactive node is actually dead. - -The volumeController uses the cloudprovider to create, delete, attach and detach volumes to nodes. For instance, the -logic for provisioning, attaching, and detaching a EBS volume resides in the AWS cloudprovider. The volumeController -uses this code to perform its operations. - -The routeController configures routes for hosts in the cloud provider. - -The serviceController maintains a list of currently active nodes, and is responsible for creating and deleting -LoadBalancers in the underlying cloud. - -### Kubelet Changes - -Moving on to the kubelet, the following cloud provider dependencies exist in kubelet. - - - Find the cloud nodename of the host that kubelet is running on for the following reasons : - 1. To obtain the config map for the kubelet, if one already exists - 2. To uniquely identify current node using nodeInformer - 3. To instantiate a reference to the current node object - - Find the InstanceID, ProviderID, ExternalID, Zone Info of the node object while initializing it - - Periodically poll the cloud provider to figure out if the node has any new IP addresses associated with it - - It sets a condition that makes the node unschedulable until cloud routes are configured. - - It allows the cloud provider to post process DNS settings - -The majority of the calls by the kubelet to the cloud is done during the initialization of the Node Object. The other -uses are for configuring Routes (in case of GCE), scrubbing DNS, and periodically polling for IP addresses. - -All of the above steps, except the Node initialization step can be moved into a controller. Specifically, IP address -polling, and configuration of Routes can be moved into the cloud dependent controller manager. - -[Scrubbing DNS was found to be redundant](https://github.com/kubernetes/kubernetes/pull/36785). So, it can be disregarded. It is being removed. - -Finally, Node initialization needs to be addressed. This is the trickiest part. Pods will be scheduled even on -uninitialized nodes. This can lead to scheduling pods on incompatible zones, and other weird errors. Therefore, an -approach is needed where kubelet can create a Node, but mark it as "NotReady". Then, some asynchronous process can -update it and mark it as ready. This is now possible because of the concept of Taints. - -This approach requires kubelet to be started with known taints. This will make the node unschedulable until these -taints are removed. The external cloud controller manager will asynchronously update the node objects and remove the -taints. - -### API Server Changes - -Finally, in the kube-apiserver, the cloud provider is used for transferring SSH keys to all of the nodes, and within an a -dmission controller for setting labels on persistent volumes. - -Kube-apiserver uses the cloud provider for two purposes - -1. Distribute SSH Keys - This can be moved to the cloud dependent controller manager -2. Admission Controller for PV - This can be refactored using the taints approach used in Kubelet - -### Volume Management Changes - -Volumes need cloud providers, but they only need **specific** cloud providers. The majority of volume management logic -resides in the controller manager. These controller loops need to be moved into the cloud-controller manager. The cloud -controller manager also needs a mechanism to read parameters for initilization from cloud config. This can be done via -config maps. - -There are two entirely different approach to refactoring volumes - -[Flex Volumes](https://github.com/kubernetes/community/blob/master/contributors/devel/flexvolume.md) and -[CSI Container Storage Interface](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/storage/container-storage-interface.md). There is an undergoing effort to move all -of the volume logic from the controller-manager into plugins called Flex Volumes. In the Flex volumes world, all of the -vendor specific code will be packaged in a separate binary as a plugin. After discussing with @thockin, this was -decidedly the best approach to remove all cloud provider dependency for volumes out of kubernetes core. Some of the discovery -information for this can be found at [https://goo.gl/CtzpVm](https://goo.gl/CtzpVm). - -### Deployment Changes - -This change will introduce new binaries to the list of binaries required to run kubernetes. The change will be designed -such that these binaries can be installed via `kubectl apply -f` and the appropriate instances of the binaries will be -running. - -Issues such as monitoring, configuring the new binaries will generally be left to cloud provider. However they should -ensure that test runs upload the logs for these new processes to [test grid](https://k8s-testgrid.appspot.com/). - -Applying the cloud controller manager is the only step that is different in the upgrade process. -In order to complete the upgrade process, you need to apply the cloud-controller-manager deployment to the setup. -A deployment descriptor file will be provided with this change. You need to apply this change using - -``` -kubectl apply -f cloud-controller-manager.yml -``` - -This will start the cloud specific controller manager in your kubernetes setup. - -The downgrade steps are also the same as before for all the components except the cloud-controller-manager. -In case of the cloud-controller-manager, the deployment should be deleted using - -``` -kubectl delete -f cloud-controller-manager.yml -``` - -### Security Considerations - -Make sure that you consider the impact of this feature from the point of view of Security. - -## Graduation Criteria - -How will we know that this has succeeded? -Gathering user feedback is crucial for building high quality experiences and SIGs have the important responsibility of -setting milestones for stability and completeness. -Hopefully the content previously contained in [umbrella issues][] will be tracked in the `Graduation Criteria` section. - -[umbrella issues]: https://github.com/kubernetes/kubernetes/issues/42752 - -### Graduation to Beta - -As part of the graduation to `stable` or General Availability (GA), we have set -both process and technical goals. - -#### Process Goals - -- - -We propose the following repository structure for the cloud providers which -currently live in `kubernetes/pkg/cloudprovider/providers/*` - -``` -git@github.com:kubernetes/cloud-provider-wg -git@github.com:kubernetes/cloud-provider-aws -git@github.com:kubernetes/cloud-provider-azure -git@github.com:kubernetes/cloud-provider-gcp -git@github.com:kubernetes/cloud-provider-openstack -``` - -We propose this structure in order to obtain - -- ease of contributor on boarding and off boarding by creating repositories under - the existing `kubernetes` GitHub organization -- ease of automation turn up using existing tooling -- unambiguous ownership of assets by the CNCF - -The use of a tracking repository `git@github.com:kubernetes/wg-cloud-provider` -is proposed to - -- create an index of all cloud providers which WG Cloud Provider believes - should be highlighted based on defined criteria for quality, usage, and other - requirements deemed necessary by the working group -- serve as a location for tracking issues which affect all Cloud Providers -- serve as a repository for user experience reports related to Cloud Providers - which live within the Kubernetes GitHub organization or desire to do so - -The ultimate intention of WG Cloud Provider is to prevent multiple classes -of software purporting to be an implementation of the Cloud Provider interface -from fracturing the Kubernetes Community while also ensuring that new Cloud -Providers adhere to standards of quality and whose management follow Kubernetes -Community norms. - -## Alternatives - -One alternate to consider is the use of a side-car. The cloud-interface in tree could then be a [GRPC](https://github.com/grpc/grpc-go) -call out to that side-car. We could then leave the Kube API Server, Kube Controller Manager and Kubelet pretty much as is. -We would still need separate repos to hold the code for the side care and to handle cluster setup for the cloud provider. -However we believe that different cloud providers will (already) want different control loops. As such we are likely to need -something like the cloud controller manager anyway. From the perspective it seems easier to centralize the effort in that -direction. In addition it should limit the proliferation of new processes across the entire cluster. diff --git a/keps/NEXT_KEP_NUMBER b/keps/NEXT_KEP_NUMBER index 62f945751..bb95160cb 100644 --- a/keps/NEXT_KEP_NUMBER +++ b/keps/NEXT_KEP_NUMBER @@ -1 +1 @@ -6 \ No newline at end of file +33 diff --git a/keps/OWNERS b/keps/OWNERS index 77efac8ad..381efbc69 100644 --- a/keps/OWNERS +++ b/keps/OWNERS @@ -1,16 +1,15 @@ reviewers: - sig-architecture-leads - - jbeda - - bgrant0607 - - jdumars - calebamiles - idvoretskyi + - jbeda + - justaugustus approvers: - sig-architecture-leads - - jbeda - - bgrant0607 - - jdumars - calebamiles - idvoretskyi + - jbeda labels: + - kind/kep - sig/architecture + - sig/pm diff --git a/keps/README.md b/keps/README.md index c514dc178..cfd1f5fa1 100644 --- a/keps/README.md +++ b/keps/README.md @@ -1,59 +1,4 @@ -# Kubernetes Enhancement Proposals (KEPs) - -A Kubernetes Enhancement Proposal (KEP) is a way to propose, communicate and coordinate on new efforts for the Kubernetes project. -You can read the full details of the project in [KEP-1](0001-kubernetes-enhancement-proposal-process.md). - -This process is still in a _beta_ state and is opt-in for those that want to provide feedback for the process. - -## Quick start for the KEP process - -1. Socialize an idea with a sponsoring SIG. - Make sure that others think the work is worth taking up and will help review the KEP and any code changes required. -2. Follow the process outlined in the [KEP template](0000-kep-template.md) - -## FAQs - -### Do I have to use the KEP process? - -No... but we hope that you will. -Over time having a rich set of KEPs in one place will make it easier for people to track what is going in the community and find a structured historic record. - -KEPs are only required when the changes are wide ranging and impact most of the project. -These changes are usually coordinated through SIG-Architecture. -It is up to any specific SIG if they want to use the KEP process and when. -The process is available to SIGs to use but not required. - -### Why would I want to use the KEP process? - -Our aim with KEPs is to clearly communicate new efforts to the Kubernetes contributor community. -As such, we want to build a well curated set of clear proposals in a common format with useful metadata. - -Benefits to KEP users (in the limit): -* Exposure on a kubernetes blessed web site that is findable via web search engines. -* Cross indexing of KEPs so that users can find connections and the current status of any KEP. -* A clear process with approvers and reviewers for making decisions. - This will lead to more structured decisions that stick as there is a discoverable record around the decisions. - -We are inspired by IETF RFCs, Pyton PEPs and Rust RFCs. -See [KEP-1](0001-kubernetes-enhancement-proposal-process.md) for more details. - -### Do I put my KEP in the root KEP directory or a SIG subdirectory? - -If the KEP is mainly restricted to one SIG's purview then it should be in a KEP directory for that SIG. -If the KEP is widely impacting much of Kubernetes, it should be put at the root of this directory. -If in doubt ask [SIG-Architecture](../sig-architecture/README.md) and they can advise. - -### What will it take for KEPs to "graduate" out of "beta"? - -Things we'd like to see happen to consider KEPs well on their way: -* A set of KEPs that show healthy process around describing an effort and recording decisions in a reasonable amount of time. -* KEPs exposed on a searchable and indexable web site. -* Presubmit checks for KEPs around metadata format and markdown validity. - -Even so, the process can evolve. As we find new techniques we can improve our processes. - -### My FAQ isn't answered here! - -The KEP process is still evolving! -If something is missing or not answered here feel free to reach out to [SIG-Architecture](../sig-architecture/README.md). -If you want to propose a change to the KEP process you can open a PR on [KEP-1](0001-kubernetes-enhancement-proposal-process.md) with your proposal. +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-api-machinery/0006-apply.md b/keps/sig-api-machinery/0006-apply.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-api-machinery/0006-apply.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-api-machinery/0015-dry-run.md b/keps/sig-api-machinery/0015-dry-run.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-api-machinery/0015-dry-run.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-api-machinery/0030-storage-migration.md b/keps/sig-api-machinery/0030-storage-migration.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-api-machinery/0030-storage-migration.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-apps/0026-ttl-after-finish.md b/keps/sig-apps/0026-ttl-after-finish.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-apps/0026-ttl-after-finish.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-apps/0028-20180925-optional-service-environment-variables.md b/keps/sig-apps/0028-20180925-optional-service-environment-variables.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-apps/0028-20180925-optional-service-environment-variables.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-apps/0032-portable-service-definitions.md b/keps/sig-apps/0032-portable-service-definitions.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-apps/0032-portable-service-definitions.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-apps/OWNERS b/keps/sig-apps/OWNERS deleted file mode 100644 index 12723930b..000000000 --- a/keps/sig-apps/OWNERS +++ /dev/null @@ -1,6 +0,0 @@ -reviewers: - - sig-apps-leads -approvers: - - sig-apps-leads -labels: - - sig/apps diff --git a/keps/sig-apps/README.md b/keps/sig-apps/README.md index f7f6b320a..cfd1f5fa1 100644 --- a/keps/sig-apps/README.md +++ b/keps/sig-apps/README.md @@ -1,3 +1,4 @@ -# SIG Apps KEPs - -This directory contains KEPs related to SIG Apps. +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-apps/sidecarcontainers.md b/keps/sig-apps/sidecarcontainers.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-apps/sidecarcontainers.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-auth/0000-20170814-bounding-self-labeling-kubelets.md b/keps/sig-auth/0000-20170814-bounding-self-labeling-kubelets.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-auth/0000-20170814-bounding-self-labeling-kubelets.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-auth/0014-dynamic-audit-configuration.md b/keps/sig-auth/0014-dynamic-audit-configuration.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-auth/0014-dynamic-audit-configuration.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-autoscaling/0032-enhance-hpa-metrics-specificity.md b/keps/sig-autoscaling/0032-enhance-hpa-metrics-specificity.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-autoscaling/0032-enhance-hpa-metrics-specificity.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-autoscaling/README.md b/keps/sig-autoscaling/README.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-autoscaling/README.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-aws/20181126-aws-k8s-tester-figure-01.png b/keps/sig-aws/20181126-aws-k8s-tester-figure-01.png new file mode 100644 index 000000000..5d99b9a63 Binary files /dev/null and b/keps/sig-aws/20181126-aws-k8s-tester-figure-01.png differ diff --git a/keps/sig-aws/20181126-aws-k8s-tester-figure-02.png b/keps/sig-aws/20181126-aws-k8s-tester-figure-02.png new file mode 100644 index 000000000..df0070754 Binary files /dev/null and b/keps/sig-aws/20181126-aws-k8s-tester-figure-02.png differ diff --git a/keps/sig-aws/20181126-aws-k8s-tester.md b/keps/sig-aws/20181126-aws-k8s-tester.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-aws/20181126-aws-k8s-tester.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-aws/20181127-aws-ebs-csi-driver.md b/keps/sig-aws/20181127-aws-ebs-csi-driver.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-aws/20181127-aws-ebs-csi-driver.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-aws/README.md b/keps/sig-aws/README.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-aws/README.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-aws/aws-lb-prefix-annotation.md b/keps/sig-aws/aws-lb-prefix-annotation.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-aws/aws-lb-prefix-annotation.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-aws/draft-20181127-aws-alb-ingress-controller.md b/keps/sig-aws/draft-20181127-aws-alb-ingress-controller.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-aws/draft-20181127-aws-alb-ingress-controller.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-azure/0018-20180711-azure-availability-zones.md b/keps/sig-azure/0018-20180711-azure-availability-zones.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-azure/0018-20180711-azure-availability-zones.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-azure/0025-20180809-cross-resource-group-nodes.md b/keps/sig-azure/0025-20180809-cross-resource-group-nodes.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-azure/0025-20180809-cross-resource-group-nodes.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-cli/0008-kustomize.md b/keps/sig-cli/0008-kustomize.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-cli/0008-kustomize.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-cli/0024-kubectl-plugins.md b/keps/sig-cli/0024-kubectl-plugins.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-cli/0024-kubectl-plugins.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-cli/0031-datadrivencommands.md b/keps/sig-cli/0031-datadrivencommands.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-cli/0031-datadrivencommands.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-cli/0031-kustomize-integration.md b/keps/sig-cli/0031-kustomize-integration.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-cli/0031-kustomize-integration.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-cloud-provider/0002-cloud-controller-manager.md b/keps/sig-cloud-provider/0002-cloud-controller-manager.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-cloud-provider/0002-cloud-controller-manager.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-cloud-provider/0013-build-deploy-ccm.md b/keps/sig-cloud-provider/0013-build-deploy-ccm.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-cloud-provider/0013-build-deploy-ccm.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-cloud-provider/0018-testgrid-conformance-e2e.md b/keps/sig-cloud-provider/0018-testgrid-conformance-e2e.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-cloud-provider/0018-testgrid-conformance-e2e.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-cloud-provider/0019-cloud-provider-documentation.md b/keps/sig-cloud-provider/0019-cloud-provider-documentation.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-cloud-provider/0019-cloud-provider-documentation.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-cloud-provider/providers/0004-cloud-provider-template.md b/keps/sig-cloud-provider/providers/0004-cloud-provider-template.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-cloud-provider/providers/0004-cloud-provider-template.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-cloud-provider/providers/0020-cloud-provider-alibaba-cloud.md b/keps/sig-cloud-provider/providers/0020-cloud-provider-alibaba-cloud.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-cloud-provider/providers/0020-cloud-provider-alibaba-cloud.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-cloud-provider/providers/0021-cloud-provider-digitalocean.md b/keps/sig-cloud-provider/providers/0021-cloud-provider-digitalocean.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-cloud-provider/providers/0021-cloud-provider-digitalocean.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-cloud-provider/providers/0022-cloud-provider-baiducloud.md b/keps/sig-cloud-provider/providers/0022-cloud-provider-baiducloud.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-cloud-provider/providers/0022-cloud-provider-baiducloud.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-cluster-lifecycle/0003-cluster-api.md b/keps/sig-cluster-lifecycle/0003-cluster-api.md index 588f34ac2..cfd1f5fa1 100644 --- a/keps/sig-cluster-lifecycle/0003-cluster-api.md +++ b/keps/sig-cluster-lifecycle/0003-cluster-api.md @@ -1,231 +1,4 @@ ---- -kep-number: 3 -title: Kubernetes Cluster Management API -status: provisional -authors: - - "@roberthbailey" - - "@pipejakob" -owning-sig: sig-cluster-lifecycle -reviewers: - - "@thockin" -approvers: - - "@roberthbailey" -editor: - - "@roberthbailey" -creation-date: 2018-01-19 -last-updated: 2018-01-22 ---- - -# Kubernetes Cluster Management API - -## Table of Contents - -* [Kubernetes Cluster Management API](#kubernetes-cluster-management-api) - * [Metadata](#metadata) - * [Table of Contents](#table-of-contents) - * [Summary](#summary) - * [Motivation](#motivation) - * [Goals](#goals) - * [Non\-goals](#non-goals) - * [Challenges and Open Questions](#challenges-and-open-questions) - * [Proposal](#proposal) - * [Driving Use Cases](#driving-use-cases) - * [Cluster\-level API](#cluster-level-api) - * [Machine API](#machine-api) - * [Capabilities](#capabilities) - * [Overview](#overview) - * [In\-place vs\. Replace](#in-place-vs-replace) - * [Omitted Capabilities](#omitted-capabilities) - * [Conditions](#conditions) - * [Types](#types) - * [Graduation Criteria](#graduation-criteria) - * [Implementation History](#implementation-history) - * [Drawbacks](#drawbacks) - * [Alternatives](#alternatives) - -## Summary - -We are building a set of Kubernetes cluster management APIs to enable common cluster lifecycle operations (install, upgrade, repair, delete) across disparate environments. -We represent nodes and other infrastructure in Kubernetes-style APIs to enable higher level controllers to update the desired state of the cluster (e.g. the autoscaling controller requesting additional machines) and reconcile the world with that state (e.g. communicating with cloud providers to create or delete virtual machines). -With the full state of the cluster represented as API objects, Kubernetes installers can use them as a common configuration language, and more sophisticated tooling can be built in an environment-agnostic way. - -## Motivation - -Kubernetes has a common set of APIs (see the [Kubernetes API Conventions](https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md)) to orchestrate containers regardless of deployment mechanism or cloud provider. -Kubernetes also has APIs for handling some infrastructure, like load-balancers, ingress rules, or persistent volumes, but not for creating new machines. -As a result, the deployment mechanisms that manage Kubernetes clusters each have unique APIs and implementations for how to handle lifecycle events like cluster creation or deletion, master upgrades, and node upgrades. -Additionally, the cluster-autoscaler is responsible not only for determining when the cluster should be scaled, but also responsible for adding capacity to the cluster by interacting directly with the cloud provider to perform the scaling. -When another component needs to create or destroy virtual machines, like the node auto provisioner, it would similarly need to reimplement the logic for interacting with the supported cloud providers (or reuse the same code to prevent duplication). - -### Goals - -* The cluster management APIs should be declarative, Kubernetes-style APIs that follow our existing [API Conventions](https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md). -* To the extent possible, we should separate state that is environment-specific from environment-agnostic. - * However, we still want the design to be able to utilize environment-specific functionality, or else it likely won’t gain traction in favor of other tooling that is more powerful. - -### Non-goals - -* To add these cluster management APIs to Kubernetes core. -* To support infrastructure that is irrelevant to Kubernetes clusters. - * We are not aiming to create terraform-like capabilities of creating any arbitrary cloud resources, nor are we interested in supporting infrastructure used solely by applications deployed on Kubernetes. The goal is to support the infrastructure necessary for the cluster itself. -* To convince every Kubernetes lifecycle product ([kops](https://github.com/kubernetes/kops), [kubespray](https://github.com/kubernetes-incubator/kubespray), [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine/), [Azure Container Service](https://azure.microsoft.com/en-us/services/container-service/), [Elastic Container Service for Kubernetes](https://aws.amazon.com/eks/), etc.) to support these APIs. - * There is value in having consistency between installers and broad support for the cluster management APIs and in having common infrastructure reconcilers used post-installation, but 100% adoption isn't an immediate goal. -* To model state that is purely internal to a deployer. - * Many Kubernetes deployment tools have intermediate representations of resources and other internal state to keep track of. They should continue to use their existing methods to track internal state, rather than attempting to model it in these APIs. - -### Challenges and Open Questions - -* Should a single Kubernetes cluster only house definitions for itself? - * If so, that removes the ability to have a single cluster control the reconciliation of infrastructure for other clusters. - * However, with the concurrent [Cluster Registry](https://docs.google.com/a/google.com/document/d/1Oi9EO3Jwtp69obakl-9YpLkP764GZzsz95XJlX1a960/edit) project, a good separation of responsibilities would be that the Cluster Registry API is responsible for indexing multiple clusters, each of which would only have to know about itself. In order to achieve cross-cluster reconciliation, a controller would need to integrate with a Cluster Registry for discovery. -* Should a cluster’s control plane definition should be housed within that same cluster. - * If the control plane becomes unhealthy, then it won’t be able to rectify itself without external intervention. If the control plane configuration lives elsewhere, and the controllers reconciling its state are able to act in the face of control plane failure, then this API could be used to fix a misconfigured control plane that is unresponsive. -* Should our representation of Nodes allow declarative versioning of non-Kubernetes packages, like the container runtime, the Linux kernel, etc.? - * It potentially enables the use case of smaller, in-place upgrades to nodes without changing the node image. - * We may be able to leverage cloud-init to some extent, but since it isn’t supported across all cloud/distributions, and doesn’t support upgrades (or any actions beyond initialization), this may devolve into rolling our own solution. -* Should the Cluster API bother with control plane configuration, or expect each component to use component config? - * One option is to allow arbitrary API objects to be defined during cluster initialization, which will be a combination of Cluster objects, NodeSet objects, and ConfigMaps for relevant component config. This makes the Cluster API less comprehensive, but avoids redundancy and more accurately reflects the desired state of the cluster. - * Another option is to have key component config embedded in the Cluster API, which will then be created as the appropriate ConfigMaps during creation. This would be used as a convenience during cluster creation, and then the separate ConfigMaps become the authoritative configuration, potentially with a control loop to propagate changes from the embedded component config in the Cluster API to the appropriate (authoritative) ConfigMaps on an ongoing basis. -* Do we want to allow for arbitrary node boot scripts? - * Some existing tools like kubicorn support this, but the user demand isn’t clear yet. - * Also see https://github.com/kubernetes/kops/issues/387 - * Kops now has hooks -* Are there any environments in which it only makes sense to refer to a group of homogeneous nodes, instead of individual ones? - * The current proposal is to start with individual objects to represent each declarative node (called a “Machine”), which allows us to build support for Sets and Deployments on top of them in the future. However, does this simplification break for any environment we want to support? - - -## Proposal - -### Driving Use Cases - -_TODO_: Separate out the use cases that are focused on the control plane vs. those focused on nodes. - - -These use cases are in scope for our v1alpha1 API design and initial prototype implementation: - -* Initial cluster creation using these API objects in yaml files (implemented via client-side bootstrapping of resources) - * Rather than each Kubernetes installer having its own custom APIs and cluster definitions, they could be fed the definition of the cluster via serialized API objects. This would lower the friction of moving between different lifecycle products. -* Declarative Kubernetes upgrades for the control plane and kubelets -* Declarative upgrades for node OS images -* Maintaining consistency of control plane and machine configuration across different clusters / clouds - * By representing important cluster configuration via declarative objects, operations like “diffing” the configuration of two clusters becomes very straightforward. Also, reconcilers can be written to ensure that important cluster configuration is kept in sync between different clusters by simply copying objects. -* Cloud adoption / lift and shift / liberation - -These use cases are in scope for the project, but post-v1alpha1: - -* Server-side node draining -* Autoscaling - * Currently, the OSS cluster autoscaler has the responsibility of determining the right size of the cluster and calling the cloud provider to perform the scaling (supporting every cloud provider directly). Modeling groups of nodes in a declarative way would allow autoscalers to only need to worry about the correct cluster size and error handling when that can’t be achieved (e.g. in the case of stockouts), and then separate cloud controllers can be responsible for creating and deleting nodes to reconcile that state and report any errors encountered. -* Integration with the Cluster Registry API - * Automatically add a new cluster to a registry, support tooling that works across multiple clusters using a registry, delete a cluster from a registry. -* Supporting other common tooling, like monitoring - -These use cases are out of scope entirely: - -* Creating arbitrary cloud resources - -### Cluster-level API - -This level of the Cluster Management API describes the global configuration of a cluster. It should be capable of representing the versioning and configuration of the entire control plane, irrespective of the representation of nodes. - -Given the recent efforts of SIG Cluster Lifecycle to make kubeadm the de facto standard toolkit for cloud- and vendor-agnostic cluster initialization, and because kubeadm has [an existing API](https://github.com/kubernetes/kubernetes/blob/master/cmd/kubeadm/app/apis/kubeadm/v1alpha1/types.go) to define the global configuration for a cluster, it makes sense to coalesce the global portion of the Cluster API with the API used by “kubeadm init” to configure a cluster master. - -A current goal is to make these APIs as cloud-agnostic as possible, so that the entire definition of a Cluster could remain reasonably in-sync across different deployments potentially in different cloud providers, which would help enable hybrid usecases where it’s desirable to have key configuration stay in sync across different clusters potentially in different clouds/environments. However, this goal is balanced against making the APIs coherent and usable, which strict separation may harm. - -The full types for this API can be seen and were initially discussed in [kube-deploy#306](https://github.com/kubernetes/kube-deploy/pull/306). - -### Machine API - -#### Capabilities - -The set of node capabilities that this proposal is targeting for v1alpha1 are: -1. A new Node can be created in a declarative way, including Kubernetes version and container runtime version. It should also be able to specify provider-specific information such as OS image, instance type, disk configuration, etc., though this will not be portable. -1. A specific Node can be deleted, freeing external resources associated with it. -1. A specific Node can have its kubelet version upgraded or downgraded in a declarative way\*. -1. A specific Node can have its container runtime changed, or its version upgraded or downgraded, in a declarative way\*. -1. A specific Node can have its OS image upgraded or downgraded in a declarative way\*. - -\* It is an implementation detail of the provider if these operations are performed in-place or via Node replacement. - -#### Overview - -This proposal introduces a new API type: **Machine**. - -A "Machine" is the declarative spec for a Node, as represented in Kubernetes core. If a new Machine object is created, a provider-specific controller will handle provisioning and installing a new host to register as a new Node matching the Machine spec. If the Machine's spec is updated, a provider-specific controller is responsible for updating the Node in-place or replacing the host with a new one matching the updated spec. If a Machine object is deleted, the corresponding Node should have its external resources released by the provider-specific controller, and should be deleted as well. - -Fields like the kubelet version, the container runtime to use, and its version, are modeled as fields on the Machine's spec. Any other information that is provider-specific, though, is part of an opaque ProviderConfig string that is not portable between different providers. - -The ProviderConfig is recommended to be a serialized API object in a format owned by that provider, akin to the [Component Config](https://docs.google.com/document/d/1arP4T9Qkp2SovlJZ_y790sBeiWXDO6SG10pZ_UUU-Lc/edit) pattern. This will allow the configuration to be strongly typed, versioned, and have as much nested depth as appropriate. These provider-specific API definitions are meant to live outside of the Machines API, which will allow them to evolve independently of it. Attributes like instance type, which network to use, and the OS image all belong in the ProviderConfig. - -#### In-place vs. Replace - -One simplification that might be controversial in this proposal is the lack of API control over "in-place" versus "replace" reconciliation strategies. For instance, if a Machine's spec is updated with a different version of kubelet than is actually running, it is up to the provider-specific controller whether the request would best be fulfilled by performing an in-place upgrade on the Node, or by deleting the Node and creating a new one in its place (or reporting an error if this particular update is not supported). One can force a Node replacement by deleting and recreating the Machine object rather than updating it, but no similar mechanism exists to force an in-place change. - -Another approach considered was that modifying an existing Machine should only ever attempt an in-place modification to the Node, and Node replacement should only occur by deleting and creating a new Machine. In that case, a provider would set an error field in the status if it wasn't able to fulfill the requested in-place change (such as changing the OS image or instance type in a cloud provider). - -The reason this approach wasn't used was because most cluster upgrade tools built on top of the Machines API would follow the same pattern: - -``` -for machine in machines: - attempt to upgrade machine in-place - if error: - create new machine - delete old machine -``` - -Since updating a Node in-place is likely going to be faster than completely replacing it, most tools would opt to use this pattern to attempt an in-place modification first, before falling back to a full replacement. - -It seems like a much more powerful concept to allow every tool to instead say: - -``` -for machine in machines: - update machine -``` - -and allow the provider to decide if it is capable of performing an in-place update, or if a full Node replacement is necessary. - -#### Omitted Capabilities - -**A scalable representation of a group of nodes** - -Given the existing targeted capabilities, this functionality could easily be built client-side via label selectors to find groups of Nodes and using (1) and (2) to add or delete instances to simulate this scaling. - -It is natural to extend this API in the future to introduce the concepts of MachineSets and MachineDeployments that mirror ReplicaSets and Deployments, but an initial goal is to first solidify the definition and behavior of a single Machine, similar to how Kubernetes first solidifed Pods. - -A nice property of this proposal is that if provider controllers are written solely against Machines, the concept of MachineSets can be implemented in a provider-agnostic way with a generic controller that uses the MachineSet template to create and delete Machine instances. All Machine-based provider controllers will continue to work, and will get full MachineSet functionality for free without modification. Similarly, a MachineDeployment controller could then be introduced to generically operate on MachineSets without having to know about Machines or providers. Provider-specific controllers that are actually responsible for creating and deleting hosts would only ever have to worry about individual Machine objects, unless they explicitly opt into watching higher-level APIs like MachineSets in order to take advantage of provider-specific features like AutoScalingGroups or Managed Instance Groups. - -However, this leaves the barrier to entry very low for adding new providers: simply implement creation and deletion of individual Nodes, and get Sets and Deployments for free. - -**A provider-agnostic mechanism to request new nodes** - -In this proposal, only certain attributes of Machines are provider-agnostic and can be operated on in a generic way. In other iterations of similar proposals, much care had been taken to allow the creation of truly provider-agnostic Machines that could be mapped to provider-specific attributes in order to better support usecases around automated Machine scaling. This introduced a lot of upfront complexity in the API proposals. - -This proposal starts much more minimalistic, but doesn't preclude the option of extending the API to support these advanced concepts in the future. - -**Dynamic API endpoint** - -This proposal lacks the ability to declaratively update the kube-apiserver endpoint for the kubelet to register with. This feature could be added later, but doesn't seem to have demand now. Rather than modeling the kube-apiserver endpoint in the Machine object, it is expected that the cluster installation tool resolves the correct endpoint to use, starts a provider-specific Machines controller configured with this endpoint, and that the controller injects the endpoint into any hosts it provisions. - -#### Conditions - -[bgrant0607](https://github.com/bgrant0607) and [erictune](https://github.com/erictune) have indicated that the API pattern of having "Conditions" lists in object statuses is soon to be deprecated. These have generally been used as a timeline of state transitions for the object's reconciliation, and difficult to consume for clients that just want a meaningful representation of the object's current state. There are no existing examples of the new pattern to follow instead, just the guidance that we should use top-level fields in the status to represent meaningful information. We can revisit the specifics when new patterns start to emerge in core. - -#### Types - -The full Machine API types can be found and discussed in [kube-deploy#298](https://github.com/kubernetes/kube-deploy/pull/298). - -## Graduation Criteria - -__TODO__ - -## Implementation History - -* **December 2017 (KubeCon Austin)**: Prototype implementation on Google Compute Engine using Custom Resource Definitions - -## Drawbacks - -__TODO__ - -## Alternatives - -__TODO__ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-cluster-lifecycle/0004-bootstrap-checkpointing.md b/keps/sig-cluster-lifecycle/0004-bootstrap-checkpointing.md index 5cef1015f..cfd1f5fa1 100644 --- a/keps/sig-cluster-lifecycle/0004-bootstrap-checkpointing.md +++ b/keps/sig-cluster-lifecycle/0004-bootstrap-checkpointing.md @@ -1,143 +1,4 @@ ---- -kep-number: 4 -title: Kubernetes Bootstrap Checkpointing Proposal -status: implemented -authors: - - "@timothysc" -owning-sig: sig-cluster-lifecycle -participating-sigs: - - sig-node -reviewers: - - "@yujuhong" - - "@luxas" - - "@roberthbailey" -approvers: - - "@yujuhong" - - "@roberthbailey" -editor: - name: @timothysc -creation-date: 2017-10-20 -last-updated: 2018-01-23 ---- - -# Kubernetes Bootstrap Checkpointing Proposal - -## Table of Contents - -* [Summary](#summary) -* [Objectives](#objectives) - * [Goals](#goals) - * [Non-Goals](#non-goals) -* [Proposal](#proposal) - * [User Stories](#user-stories) -* [Graduation Criteria](#graduation-criteria) -* [Implementation History](#implementation-history) -* [Unresolved Questions](#unresolved-questions) - -## Summary - -There are several methods to deploy a kubernetes cluster, one method that -offers some unique advantages is self hosting. The purpose of this proposal -is to outline a method to checkpoint specific annotated pods, namely the -control plane components, for the purpose of enabling self hosting. - -The details of self hosting are beyond the scope of this proposal, and are -outlined in the references listed below: - - - [Self Hosted Kubernetes][0] - - [Kubeadm Upgrades][1] - -Extra details on this proposal, and its history, can be found in the links -below: - - - [Bootstrap Checkpointing Draft 1][2] - - [Bootstrap Checkpointing Draft 2][3] - - [WIP Implementation][4] - -## Objectives - -The scope of this proposal is **bounded**, but has the potential for broader -reuse in the future. The reader should be mindful of the explicitly stated -[Non-Goals](#non-goals) that are listed below. - -### Goals - - - Provide a basic framework for recording annotated *Pods* to the filesystem. - - Ensure that a restart of the kubelet checks for existence of these files - and loads them on startup. - -### Non-Goals - -- This is not a generic checkpointing mechanism for arbitrary resources. -(e.g. Secrets) Such changes require wider discussions. -- This will not checkpoint internal kubelet state. -- This proposal does not cover self hosted kubelet(s). It is beyond the -scope of this proposal, and comes with it's own unique set of challenges. - -## Proposal -The enablement of this feature is gated by a single command line flag that -is passed to the kubelet on startup, ```--bootstrap-checkpoint-path``` , -and will be denoted that it is ```[Alpha]```. - -### User Stories - -#### Pod Submission to Running -- On submission of a Pod, via kubeadm or an operator, an annotation -```node.kubernetes.io/bootstrap-checkpoint=true``` is added to that Pod, which -indicates that it should be checkpointed by the kubelet. When the kubelet -receives a notification from the apiserver that a new pod is to run, it will -inspect the ```--bootstrap-checkpoint-path``` flag to determine if -checkpointing is enabled. Finally, the kubelet will perform an atomic -write of a ```Pod_UID.yaml``` file when the afore mentioned annotation exists. -The scope of this annotation is bounded and will not be promoted to a field. - -#### Pod Deletion -- On detected deletion of a Pod, the kubelet will remove the associated -checkpoint from the filesystem. Any failure to remove a pod, or file, will -result in an error notification in the kubelet logs. - -#### Cold Start -- On a cold start, the kubelet will check the value of -```--bootstrap-checkpoint-path```. If the value is specified, it will read in -the contents of the that directory and startup the appropriate Pod. Lastly, -the kubelet will then pull the list of pods from the api-server and rectify -what is supposed to be running according to what is bound, and will go through -its normal startup procedure. - -### Implementation Constraints -Due to its opt-in behavior, administrators will need to take the same precautions -necessary in segregating master nodes, when enabling the bootstrap annotation. - -Please see [WIP Implementation][4] for more details. - -## Graduation Criteria - -Graduating this feature is a responsibility of sig-cluster-lifecycle and -sig-node to determine over the course of the 1.10 and 1.11 releases. History -has taught us that initial implementations often have a tendency overlook use -cases and require refinement. It is the goal of this proposal to have an -initial alpha implementation of bootstrap checkpoining in the 1.9 cycle, -and further refinement will occur after we have validated it across several -deployments. - -## Testing -Testing of this feature will occur in three parts. -- Unit testing of standard code behavior -- Simple node-e2e test to ensure restart recovery -- (TODO) E2E test w/kubeadm self hosted master restart recovery of an apiserver. - -## Implementation History - -- 20171020 - 1.9 draft proposal -- 20171101 - 1.9 accepted proposal -- 20171114 - 1.9 alpha implementation code complete - -## Unresolved Questions - -* None at this time. - -[0]: /contributors/design-proposals/cluster-lifecycle/self-hosted-kubernetes.md -[1]: https://github.com/kubernetes/community/pull/825 -[2]: https://docs.google.com/document/d/1hhrCa_nv0Sg4O_zJYOnelE8a5ClieyewEsQM6c7-5-o/edit?ts=5988fba8# -[3]: https://docs.google.com/document/d/1qmK0Iq4fqxnd8COBFZHpip27fT-qSPkOgy1x2QqjYaQ/edit?ts=599b797c# -[4]: https://github.com/kubernetes/kubernetes/pull/50984 +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-cluster-lifecycle/0008-kubeadm-config-versioning.md b/keps/sig-cluster-lifecycle/0008-kubeadm-config-versioning.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-cluster-lifecycle/0008-kubeadm-config-versioning.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-cluster-lifecycle/0014-20180707-componentconfig-api-types-to-staging.md b/keps/sig-cluster-lifecycle/0014-20180707-componentconfig-api-types-to-staging.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-cluster-lifecycle/0014-20180707-componentconfig-api-types-to-staging.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-cluster-lifecycle/0015-kubeadm-join-control-plane.md b/keps/sig-cluster-lifecycle/0015-kubeadm-join-control-plane.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-cluster-lifecycle/0015-kubeadm-join-control-plane.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-cluster-lifecycle/0023-documentation-for-images.md b/keps/sig-cluster-lifecycle/0023-documentation-for-images.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-cluster-lifecycle/0023-documentation-for-images.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-cluster-lifecycle/0023-kubeadm-config-v1beta1.md b/keps/sig-cluster-lifecycle/0023-kubeadm-config-v1beta1.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-cluster-lifecycle/0023-kubeadm-config-v1beta1.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-cluster-lifecycle/0023-kubeadm-init.png b/keps/sig-cluster-lifecycle/0023-kubeadm-init.png new file mode 100644 index 000000000..69c402a99 Binary files /dev/null and b/keps/sig-cluster-lifecycle/0023-kubeadm-init.png differ diff --git a/keps/sig-cluster-lifecycle/0023-kubeadm-join.png b/keps/sig-cluster-lifecycle/0023-kubeadm-join.png new file mode 100644 index 000000000..06bd0cefa Binary files /dev/null and b/keps/sig-cluster-lifecycle/0023-kubeadm-join.png differ diff --git a/keps/sig-cluster-lifecycle/0023-kubeadm-reset.png b/keps/sig-cluster-lifecycle/0023-kubeadm-reset.png new file mode 100644 index 000000000..9cd4dfe28 Binary files /dev/null and b/keps/sig-cluster-lifecycle/0023-kubeadm-reset.png differ diff --git a/keps/sig-cluster-lifecycle/0023-kubeadm-upgrade-apply.png b/keps/sig-cluster-lifecycle/0023-kubeadm-upgrade-apply.png new file mode 100644 index 000000000..2ecbcc75a Binary files /dev/null and b/keps/sig-cluster-lifecycle/0023-kubeadm-upgrade-apply.png differ diff --git a/keps/sig-cluster-lifecycle/0023-kubeadm-upgrade-node.png b/keps/sig-cluster-lifecycle/0023-kubeadm-upgrade-node.png new file mode 100644 index 000000000..235ecece6 Binary files /dev/null and b/keps/sig-cluster-lifecycle/0023-kubeadm-upgrade-node.png differ diff --git a/keps/sig-cluster-lifecycle/0029-20180918-kubeadm-phases-beta.md b/keps/sig-cluster-lifecycle/0029-20180918-kubeadm-phases-beta.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-cluster-lifecycle/0029-20180918-kubeadm-phases-beta.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-cluster-lifecycle/0031-20181022-etcdadm.md b/keps/sig-cluster-lifecycle/0031-20181022-etcdadm.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-cluster-lifecycle/0031-20181022-etcdadm.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-cluster-lifecycle/0032-create-a-k8s-io-component-repo.md b/keps/sig-cluster-lifecycle/0032-create-a-k8s-io-component-repo.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-cluster-lifecycle/0032-create-a-k8s-io-component-repo.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-cluster-lifecycle/OWNERS b/keps/sig-cluster-lifecycle/OWNERS deleted file mode 100644 index d69f24ee0..000000000 --- a/keps/sig-cluster-lifecycle/OWNERS +++ /dev/null @@ -1,6 +0,0 @@ -reviewers: - - sig-cluster-lifecycle-leads -approvers: - - sig-cluster-lifecycle-leads -labels: - - sig/cluster-lifecycle diff --git a/keps/sig-cluster-lifecycle/README.md b/keps/sig-cluster-lifecycle/README.md index 75b7a9d04..cfd1f5fa1 100644 --- a/keps/sig-cluster-lifecycle/README.md +++ b/keps/sig-cluster-lifecycle/README.md @@ -1,3 +1,4 @@ -# SIG Cluster Lifecycle KEPs - -This directory contains KEPs related to [SIG Cluster Lifecycle](../../sig-cluster-lifecycle). \ No newline at end of file +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-contributor-experience/0005-contributor-site.md b/keps/sig-contributor-experience/0005-contributor-site.md index d0b89565b..cfd1f5fa1 100644 --- a/keps/sig-contributor-experience/0005-contributor-site.md +++ b/keps/sig-contributor-experience/0005-contributor-site.md @@ -1,153 +1,4 @@ ---- -kep-number: 5 -title: Contributor Site -authors: - - "@jbeda" -owning-sig: sig-contributor-experience -participating-sigs: - - sig-architecture - - sig-docs -reviewers: - - "@castrojo" -approvers: - - "@parispittman" -editor: TBD -creation-date: "2018-02-19" -last-updated: "2018-03-07" -status: provisional ---- - -# Contributor Site - -## Table of Contents - -* [Table of Contents](#table-of-contents) -* [Summary](#summary) -* [Motivation](#motivation) - * [Goals](#goals) - * [Non-Goals](#non-goals) -* [Proposal](#proposal) - * [Risks and Mitigations](#risks-and-mitigations) -* [Graduation Criteria](#graduation-criteria) -* [Implementation History](#implementation-history) -* [Drawbacks](#drawbacks) -* [Alternatives](#alternatives) - -## Summary - -We need a way to organize and publish information targeted at contributors. -In order to continue to scale the Kubernetes contributor community we need a convenient, scalable and findable way to publish information. - -## Motivation - -While the current kubernetes.io site is great for end users, it isn't often used by or aimed at project contributors. -Instead, most contributors look at documentation in markdown files that are spread throughout a wide set of repos and orgs. -It is difficult for users to find this documentation. - -Furthermore, this documentation is often duplicated and out of date. -The fact that it isn't collected in one place and presented as a whole leads to fragmentation. -Often times documentation will be duplicated because the authors themselves can't find the relevant docs. - -This site will also serve as a starting point for those that are looking to contribute. -This site (and the contributor guide) can provide a soft introduction to the main processes and groups. - - -Finally, some simple domain specific indexing could go a long way to make it easier to discover and cross link information. -Specifically, building a site that can take advantage of the KEP metadata will both make KEPs more discoverable and encourage those in the community to publish information in a way that *can* be discovered. - -### Goals - -* A contributor community facing portal to collect information for those actively working on upstream Kubernetes. -* An easy to remember URL. (`contrib.kubernetes.io`? `contributors.kubernetes.io`? `c.kubernetes.io`?) -* A streamlined process to update and share this information. - Ownership should be delegated using the existing OWNERS mechanisms. -* A site that will be indexed well on Google to collect markdown files from the smattering of repos that we currently have. - This includes information that is currently in the [community repo](https://github.com/kubernetes/community). -* Provide a place to launch and quickly evolve the contributor handbook. -* Build some simple tools to enhance discoverability within the site. - This could include features such as automatically linking KEP and SIG names. -* Over time, add an index of events, meetups, and other forums for those that are actively contributing to k8s. - -### Non-Goals - -* Actively migrate information from multiple orgs/repos. - This should be a place that people in the contributor community choose to use to communicate vs. being forced. -* Create a super dynamic back end. This is most likely served best with a static site. -* Other extended community functions like a job board or a list of vendors. - -## Proposal - -We will build a new static site out of the [community repo](https://github.com/kubernetes/community). - -This site will be focused on communicating with and being a place to publish information for those that are looking to contribute to Kubernetes. - -We will use Hugo and netlify to build and host the site, respectively. (Details TBD) - -The main parts of the site that will be built out first: -* A main landing page describing the purpose of the site. -* A guide on how to contribute/update the site. -* A list and index of KEPs -* A place to start publishing and building the contributor guide. - -### Risks and Mitigations - -The main risk here is abandonment and rot. -If the automation for updating the site breaks then someone will have to fix it. -If the people or the skillset doesn't exist to do so then the site will get out of sync with the source and create more confusion. - -To mitigate this we will (a) ensure that SIG-contributor-experience is signed up to own this site moving forward and (b) keep it simple. -By relying on off the shelf tooling with many users (Hugo and Netlify) we can ensure that there are fewer custom processes and code to break. -The current generation scripts in the community repo haven't proven to be too much for us to handle. - -## Graduation Criteria - -This effort will have succeeded if: - -* The contributor site becomes the de-facto way to publish information for the community. -* People consistently refer to the contributor site when answering questions about "how do I do X" or "what is the status of X". -* The amount of confusion over where to find information is reduced. -* Others in the contributor community actively look to expand the information on the contributor site and move information from islands to this site. - -## Implementation History - -## Drawbacks - -The biggest drawback is that this is yet another thing to keep running. -Currently the markdown files are workable but not super discoverable. -However, they utilize the familiar mechanisms and do not require extra effort or understanding to publish. - -The current mechanisms also scale across orgs and repos. -This is a strength as the information is close to the code but also a big disadvantage as it ends up being much less discoverable. - -## Alternatives - -One alternative is to do nothing. -However, the smattering of markdown through many repos is not scaling and is not discoverable via Google or for other members of the contributor community. - -The main alternative here is to build something that is integrated into the user facing kubernetes.io site. -This is not preferred for a variety of reasons. - -* **Workflow.** Currently there is quite a bit of process for getting things merged into the main site. - That process involves approval from someone on SIG-Docs from an editorial point of view along with approval for technical accuracy. - The two stage approval slows down contributions and creates a much larger barrier than the current markdown based flow. - In addition, SIG-Docs is already stretched thin dealing with the (more important) user facing content that is their main charter. -* **Quality standards.** The bar for the user facing site is higher than that of the contributor site. - Speed and openness of communication dominates for the contributor facing site. - Our bar here is the current pile of Markdown. -* **Different tooling.** We may want to create specialized preprocessors as part of the contributor site build process. - This could include integrating our current expansion of sigs.yaml into Markdown files. - It may also include recognizing specific patterns (KEP-N) and creating automatic linkages. - Applying these to a part of a site or validating them across a larger site will slow creation of these tools. - -An alternative to building directly into the website repo is to build in some other repo and do some sort of import into the main website repo. -There are serious downsides to this approach. - -* **No pre-commit visualization.** Netlifies capability to show a preview per PR won't work with a custom cross repo workflow. -* **Higher latency for changes.** If the merges are batched and manually approved then there could be a significant time gap between when something is changed and when it is published. - This is a significant change from the current "pile of markdown in github" process. -* **Opportunity for more complex build breaks.** If something is checked into a satellite repo it may pass all of the presubmit tests there but then fail presubmits on the parent repo. - This creates a situation where manual intervention is required. - Complicated pre-submit tests could be built for the satellite repo but those need to be maintained and debugged themselves. -* **New tooling.** New tooling would need to be built that doesn't directly benefit the target audience. - This tooling will have to be documented and supported vs. using an off the shelf service like netlify. - +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-contributor-experience/0007-20180403-community-forum.md b/keps/sig-contributor-experience/0007-20180403-community-forum.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-contributor-experience/0007-20180403-community-forum.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-contributor-experience/OWNERS b/keps/sig-contributor-experience/OWNERS deleted file mode 100644 index 8f827107a..000000000 --- a/keps/sig-contributor-experience/OWNERS +++ /dev/null @@ -1,6 +0,0 @@ -reviewers: - - sig-contributor-experience-leads -approvers: - - sig-contributor-experience-leads -labels: - - sig/contributor-experience \ No newline at end of file diff --git a/keps/sig-instrumentation/0031-kubernetes-metrics-overhaul.md b/keps/sig-instrumentation/0031-kubernetes-metrics-overhaul.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-instrumentation/0031-kubernetes-metrics-overhaul.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-network/0007-pod-ready++.md b/keps/sig-network/0007-pod-ready++.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-network/0007-pod-ready++.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-network/0010-20180314-coredns-GA-proposal.md b/keps/sig-network/0010-20180314-coredns-GA-proposal.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-network/0010-20180314-coredns-GA-proposal.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-network/0011-ipvs-proxier.md b/keps/sig-network/0011-ipvs-proxier.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-network/0011-ipvs-proxier.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-network/0012-20180518-coredns-default-proposal.md b/keps/sig-network/0012-20180518-coredns-default-proposal.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-network/0012-20180518-coredns-default-proposal.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-network/0015-20180614-SCTP-support.md b/keps/sig-network/0015-20180614-SCTP-support.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-network/0015-20180614-SCTP-support.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-network/0030-nodelocal-dns-cache.md b/keps/sig-network/0030-nodelocal-dns-cache.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-network/0030-nodelocal-dns-cache.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-network/0031-20181017-kube-proxy-services-optional.md b/keps/sig-network/0031-20181017-kube-proxy-services-optional.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-network/0031-20181017-kube-proxy-services-optional.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-network/OWNERS b/keps/sig-network/OWNERS deleted file mode 100644 index 1939ca5c9..000000000 --- a/keps/sig-network/OWNERS +++ /dev/null @@ -1,6 +0,0 @@ -reviewers: - - sig-network-leads -approvers: - - sig-network-leads -labels: - - sig/network diff --git a/keps/sig-network/README.md b/keps/sig-network/README.md index cdd5348f2..cfd1f5fa1 100644 --- a/keps/sig-network/README.md +++ b/keps/sig-network/README.md @@ -1,3 +1,4 @@ -# SIG Network KEPs - -This directory contains KEPs related to SIG Network. +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-node/0008-20180430-promote-sysctl-annotations-to-fields.md b/keps/sig-node/0008-20180430-promote-sysctl-annotations-to-fields.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-node/0008-20180430-promote-sysctl-annotations-to-fields.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-node/0009-node-heartbeat.md b/keps/sig-node/0009-node-heartbeat.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-node/0009-node-heartbeat.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-node/0014-runtime-class.md b/keps/sig-node/0014-runtime-class.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-node/0014-runtime-class.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-node/0030-20180906-quotas-for-ephemeral-storage.md b/keps/sig-node/0030-20180906-quotas-for-ephemeral-storage.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-node/0030-20180906-quotas-for-ephemeral-storage.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-node/compute-device-assignment.md b/keps/sig-node/compute-device-assignment.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-node/compute-device-assignment.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-release/k8s-image-promoter.md b/keps/sig-release/k8s-image-promoter.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-release/k8s-image-promoter.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-release/promote-process.jpg b/keps/sig-release/promote-process.jpg new file mode 100644 index 000000000..8b74b539b Binary files /dev/null and b/keps/sig-release/promote-process.jpg differ diff --git a/keps/sig-scheduling/node-labels-quota.md b/keps/sig-scheduling/node-labels-quota.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-scheduling/node-labels-quota.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-storage/0031-20181029-VolumeSubpathEnvExpansion-apichange.md b/keps/sig-storage/0031-20181029-VolumeSubpathEnvExpansion-apichange.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-storage/0031-20181029-VolumeSubpathEnvExpansion-apichange.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/keps/sig-testing/0028-20180625-new-label-for-trusted-pr-identification.md b/keps/sig-testing/0028-20180625-new-label-for-trusted-pr-identification.md new file mode 100644 index 000000000..cfd1f5fa1 --- /dev/null +++ b/keps/sig-testing/0028-20180625-new-label-for-trusted-pr-identification.md @@ -0,0 +1,4 @@ +KEPs have moved to https://git.k8s.io/enhancements/. + \ No newline at end of file diff --git a/kubernetes-repositories.md b/kubernetes-repositories.md deleted file mode 100644 index 77e717b6b..000000000 --- a/kubernetes-repositories.md +++ /dev/null @@ -1,103 +0,0 @@ -## Kubernetes Repositories - - -This document attempts to outline a structure for creating and associating github repositories with the Kubernetes project. - -The document presents a tiered system of repositories with increasingly strict requirements in an attempt to provide the right level of oversight and flexibility for a variety of different projects. - - -### Associated Repositories - -Associated repositories conform to the Kubernetes community standards for a repository, but otherwise have no restrictions. Associated repositories exist solely for the purpose of making it easier for the Kubernetes community to work together. There is no implication of support or endorsement of any kind by the Kubernetes project, the goals are purely logistical. - -#### Goals - -To facilitate contributions and collaboration from the broader Kubernetes community. Contributions to random projects with random CLAs (or DCOs) can be logistically difficult, so associated repositories should be easier. - - -#### Rules - - * Must adopt the Kubernetes Code of Conduct statement in their repo. - * All code projects use the Apache License version 2.0. Documentation repositories must use the Creative Commons License version 4.0. - * Must adopt the CNCF CLA bot automation for pull requests. - - -### SIG repositories - -SIG repositories serve as temporary homes for SIG-sponsored experimental projects or prototypes of new core functionality, or as permanent homes for SIG-specific tools. - -#### Goals - -To provide a place for SIGs to collaborate on projects endorsed by and actively worked on by members of the SIG. SIGs should be able to approve and create new repositories for SIG-sponsored projects without requiring higher level approval from a central body (e.g. steering committee or sig-architecture) - -#### Rules - - * For now all repos will live in github.com/kubernetes-sigs/\. - * Must contain the topic for the sponsoring SIG - e.g. `k8s-sig-api-machinery`. (Added through the *Manage topics* link on the repo page.) - * Must adopt the Kubernetes Code of Conduct - * All code projects use the Apache License version 2.0. Documentation repositories must use the Creative Commons License version 4.0. - * Must adopt the CNCF CLA bot, merge bot and Kubernetes PR commands/bots. - * All OWNERS of the project must also be active SIG members. - * SIG membership must vote using lazy consensus to create a new repository - * SIG must already have identified all of their existing subprojects and code, with valid OWNERS files, in [`sigs.yaml`](https://github.com/kubernetes/community/blob/master/sigs.yaml) - -### Core Repositories - -Core repositories are considered core components of Kubernetes. They are utilities, tools, applications, or libraries that are expected to be present in every or nearly every Kubernetes cluster, such as components and tools included in official Kubernetes releases. Additionally, the kubernetes.io website, k8s.io machinery, and other project-wide infrastructure will remain in the kubernetes github organization. - -#### Goals -Create a broader base of repositories than the existing gh/kubernetes/kubernetes so that the project can scale. Present expectations about the centrality and importance of the repository in the Kubernetes ecosystem. Carries the endorsement of the Kubernetes community. - -#### Rules - - * Must live under `github.com/kubernetes/` - * Must adopt the Kubernetes Code of Conduct - * All code projects use the Apache Licence version 2.0. Documentation repositories must use the Creative Commons License version 4.0. - * Must adopt the CNCF CLA bot - * Must adopt all Kubernetes automation (e.g. /lgtm, etc) - * All OWNERS must be members of standing as defined by ability to vote in Kubernetes steering committee elections. in the Kubernetes community - * Repository must be approved by SIG-Architecture - -### FAQ - -*My project is currently in kubernetes-incubator, what is going to happen to it?* - -Nothing. We’ll grandfather existing projects and they can stay in the incubator org for as long as they want to. We expect/hope that most projects will either move out to ecosystem, or into SIG or Core repositories following the same approval process described below. - - - -*My project wants to graduate from incubator, how can it do that?* - -Either approval from a SIG to graduate to a SIG repository, or approval from SIG-Architecture to graduate into the core repository. - - - -*My incubator project wants to go GA, how can it do that?* - -For now, the project determines if and when it is GA. For the future, we may define a cross Kubernetes notion of GA for core and sig repositories, but that’s not in this proposal. - - - -*My project is currently in core, but doesn’t seem to fit these guidelines, what’s going to happen?* - -For now, nothing. Eventually, we may redistribute projects, but for now the goal is to adapt the process going forward, not re-legislate past decisions. - - - -*I’m starting a new project, what should I do?* - -Is this a SIG-sponsored project? If so, convince some SIG to host it, take it to the SIG mailing list, meeting and get consensus, then the SIG can create a repo for you in the SIG organization. - - - -Is this a small-group or personal project? If so, create a repository wherever you’d like, and make it an associated project. - - - -We suggest starting with the kubernetes-template-project to ensure you have the correct code of conduct, license, etc. - - - -*Much of the things needed (e.g. CLA Bot integration) is missing to support associated projects. Many things seem vague. Help!* - -True, we need to improve these things. For now, do the best you can to conform to the spirit of the proposal (e.g. post the code of conduct, etc) diff --git a/kubernetes_governance_diagram.png b/kubernetes_governance_diagram.png new file mode 100644 index 000000000..606d5c48f Binary files /dev/null and b/kubernetes_governance_diagram.png differ diff --git a/mentoring/OWNERS b/mentoring/OWNERS index a6101b132..23413868e 100644 --- a/mentoring/OWNERS +++ b/mentoring/OWNERS @@ -1,7 +1,9 @@ reviewers: - parispittman + - nikhita approvers: - parispittman - sig-contributor-experience-leads labels: - sig/contributor-experience + - area/mentorship-planning diff --git a/mentoring/README.md b/mentoring/README.md index 52613cb7a..20f6f3d83 100644 --- a/mentoring/README.md +++ b/mentoring/README.md @@ -24,10 +24,10 @@ Long Term Contributor Ladder Growth * [Group Mentoring Cohorts](/mentoring/group-mentoring.md) Students -* [Google Summer of Code](google-summer-of-code.md) +* [Google Summer of Code](/mentoring/google-summer-of-code.md) Groups Traditionally Underrepresented in Tech -* [Outreachy](/sig-cli/outreachy.md) +* [Outreachy](/mentoring/outreachy.md) #### Inspiration and Thanks This is not an out of the box program but was largely inspired by the following: diff --git a/mentoring/google-summer-of-code.md b/mentoring/google-summer-of-code.md index b49a1a146..917b94fbd 100644 --- a/mentoring/google-summer-of-code.md +++ b/mentoring/google-summer-of-code.md @@ -1,30 +1,12 @@ # Google Summer of Code -Kubernetes is happy to announce that we have applied to participate in the Google Summer of Code (GSoC) program -under the Cloud Native Computing Foundation (CNCF), running from January 2018 to August 2018. +Kubernetes is happy to announce that we have participated in the Google Summer of Code (GSoC) program +under the Cloud Native Computing Foundation (CNCF) in 2017 and 2018 and as an independent organization +in 2015. This page will be updated when the 2019 program is announced. Please see the [main program page](https://summerofcode.withgoogle.com/) for general information about the program, such as its purpose, timeline, eligibility requirements, and how to apply. -## Schedule - -The following schedule is taken from the official [timeline](https://summerofcode.withgoogle.com/how-it-works/#timeline). - -* January 4: Organization applications open -* January 23: Organization applications deadline -* February 12: Google will publish the accepted mentoring organizations -* March 12: Student applications open -* March 27: Student applications deadline -* March 27 - April 23: Applications are reviewed -* April 23: Accepted students are announced -* April 23 - May 14: Community Bonding period -* May 14 - August 6: Coding period -* June 11 - June 15: First evaluations -* July 9 - July 13: Second evaluations -* August 6 - August 14: Students submit code and final evaluations -* August 14 - August 21: Mentors submit final evaluations -* August 22: Results announced - ## What is Kubernetes? Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications. @@ -56,10 +38,6 @@ Google Summer of Code provides official guides for [students](https://google.git Please read the guides and [FAQs](https://developers.google.com/open-source/gsoc/faq) to get an idea of what it means to participate in the program. -## Available tasks - -Please see the tasks listed for Kubernetes in the [`cncf/soc`](https://github.com/cncf/soc#kubernetes) repository. - ## Coordination * Ihor Dvoretskyi - ihor@cncf.io @@ -73,10 +51,10 @@ Or even better, volunteer for mentoring an intern during the work on your idea! ## Past Participation -Kubernetes has participated in Google Summer of Code in [2017](https://summerofcode.withgoogle.com/archive/2017/organizations/6018829461225472/) (as a part of CNCF) and [2015](https://www.google-melange.com/archive/gsoc/2015/orgs/kubernetes). +Kubernetes has participated in Google Summer of Code in [2018](https://summerofcode.withgoogle.com/organizations/6453865516367872/) and [2017](https://summerofcode.withgoogle.com/archive/2017/organizations/6018829461225472/) as a part of CNCF and in [2015](https://www.google-melange.com/archive/gsoc/2015/orgs/kubernetes) as an independent organization. -To get an idea about the projects, you can take a look at the list of [project ideas](https://github.com/cncf/soc/blob/master/2017.md#kubernetes) published for GSoC 2017. +To get an idea about the projects, you can take a look at the list of project ideas published for GSoC [2017](https://github.com/cncf/soc/blob/master/2017.md#kubernetes) and [2018](https://github.com/cncf/soc/blob/master/2018.md#kubernetes). ## Code of Conduct -Kubernetes abides by the CNCF [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md). +Kubernetes abides by the [Code of Conduct](/code-of-conduct.md). diff --git a/mentoring/group-mentee-guide.md b/mentoring/group-mentee-guide.md index 0749896d5..4a4c7d12a 100644 --- a/mentoring/group-mentee-guide.md +++ b/mentoring/group-mentee-guide.md @@ -17,38 +17,41 @@ Familiarize yourself with the [community membership requirements doc](/community * Be helpful to your peers in the cohort * Give back and be a mentor in a future cohort * Mutual respect from mentors and peers who are in the cohort with you +* Adhere to the Kubernetes Community Guidelines ## Development Areas & Activities These topics will be covered during bi-weekly standups/workshops. The suggested activities will be covered in the mentee's normal day to day. Know something that should be added? Start a convo/add a PR - your comments are appreciated. -### Current Member Cohort -* Communicating in our ecosystem +### Current Member Cohort Topics +* Effective communication in our ecosystem * Kubernetes Governance 101 (what's a SIG?, OWNERS files, steering committee, etc.) -* Identifying issues to work on -* Testing (current state of automation) +* Identifying & understanding issue backlog and prioritization +* Contributing to testing (how to run tests and create new ones) * [need 3-4 more] Suggested Activity * Scrub XS and typo fixes into branches they maintain for occasional quick bulk review/approval with mentors -* Help to review docs +* Help review docs +* Setup feature and run tests or examples and fix documentation if needed +* Create new content in community based on feedback from wider community + ### Current Reviewer Cohort * Code Reviews the Kubernetes Way (i.e. best practices) * How to groom issues for new members * Communicating effectively as a leader (on GH and throughout project) -* The value in / how to tech reviewing for docs -* Kubernetes Governance 201 (SIG deep dive, proposals, +* The value in / how to tech review docs +* Kubernetes Governance 201 (SIG deep dive, proposals) * Testing (what should be an e2e test, how to write S, M, L, tests) Suggested Activity * Be a tech reviewer for docs +* Write an E2E test ### Current Approver Cohort * Communicating effectively as a leader (on GH and throughout project) * How to write better docs (release notes, etc.) -* [need 4-5 more] - - +* How to propose a new feature (features, design proposals) ### Other Help Resources - slack diff --git a/mentoring/group-mentoring.md b/mentoring/group-mentoring.md index 3e68c2b45..f5600e01e 100644 --- a/mentoring/group-mentoring.md +++ b/mentoring/group-mentoring.md @@ -17,6 +17,7 @@ Each cohort will last 2-3 months based on the time requirement in the community * Each mentee is working toward the same goal, cohort has an end date/timeframe * Exposure to multiple areas of the project making well-rounded contributors * Pilots share time commitments and responsibilities +* Exposure to multiple mentors in an open and collaborative environment ## Logistics SIGs and other parts of the project will reach out to SIG Contributor Experience with requests for additional roles and provide a Pilot that is not the lead but at the same level they are targeting. diff --git a/mentoring/meet-our-contributors.md b/mentoring/meet-our-contributors.md index 7e3aea7c0..72f4a9225 100644 --- a/mentoring/meet-our-contributors.md +++ b/mentoring/meet-our-contributors.md @@ -1,4 +1,4 @@ -# Meet Our Contributors - Ask Us Anything! +# Meet Our Contributors - Ask Us Anything! When Slack seems like it’s going too fast, and you just need a quick answer from a human... @@ -6,18 +6,18 @@ Meet Our Contributors gives you a monthly one-hour opportunity to ask questions ## When: Every first Wednesday of the month at the following times. Grab a copy of the calendar to yours from [kubernetes.io/community](https://kubernetes.io/community/) -* 03:30pm UTC -* 09:00pm UTC +* 02:30pm UTC +* 08:00pm UTC -Tune into the [Kubernetes YouTube Channel](https://www.youtube.com/c/KubernetesCommunity/live) to follow along with video and [#meet-our-contributors](https://kubernetes.slack.com/messages/meet-our-contributors) on Slack for questions and discourse. +Tune into the [Kubernetes YouTube Channel](https://www.youtube.com/c/KubernetesCommunity/live) to follow along with video and [#meet-our-contributors](https://kubernetes.slack.com/messages/meet-our-contributors) on Slack for questions and discourse. -## What’s on-topic: +## What’s on-topic: * How our contributors got started with k8s * Advice for getting attention on your PR * GitHub tooling and automation * Your first commit * kubernetes/community -* Testing +* Testing ## What’s off-topic: * End-user questions (Check out [#office-hours](https://kubernetes.slack.com/messages/office-hours) on slack and details [here](/events/office-hours.md)) @@ -33,15 +33,13 @@ Questions will be on a first-come, first-served basis. First half will be dedica ### Code snip / PR for peer code review / Suggestion for part of codebase walk through: * At least 24 hours before the session to slack channel (#meet-our-contributors) -Problems will be picked based on time commitment needed, skills of the reviewer, and if a large amount are submitted, need for the project. +Problems will be picked based on time commitment needed, skills of the reviewer, and if a large amount are submitted, need for the project. ## Call for Volunteers: -Contributors - [sign up to answer questions!](https://goo.gl/uhEJ33) +Contributors - [sign up to answer questions!](https://goo.gl/uhEJ33) Expectations of volunteers: * Be on 5 mins early. You can look at questions in the queue by joining the #meet-our-contributors slack channel to give yourself some prep. * Expect questions about the contribution process, membership, navigating the kubernetes seas, testing, and general questions about you and your path to open source/kubernetes. It's ok if you don't know the answer! * We will be using video chat (zoom but live streaming through YouTube) but voice only is fine if you are more comfortable with that. * Be willing to provide suggestions and feedback to make this better! - - diff --git a/mentoring/mentor-guide.md b/mentoring/mentor-guide.md new file mode 100644 index 000000000..52e460fed --- /dev/null +++ b/mentoring/mentor-guide.md @@ -0,0 +1,99 @@ +Mentor Guidelines +======= + +With over 37 special interest and working groups (SIGs/WGs), the Kubernetes ecosystem is vast and no one has all of the answers. Contributors rely on our docs, commenting on PRs/Issues, finding a mentor on their own, and any time they can interact with others to get up to speed. Whether it’s Slack, update meetings, or KubeCons, contributors want to discuss technical specifics, the landscape, or how to be a valuable member. Being a mentor can help accelerate someone's path to being more productive in our ecosystem. + +There are many ways you can be a mentor within the Kubernetes ecosystem. Listening and being generally helpful is an informal start, but we’ve drawn together some programs that will be impactful. These programs take the mentee's AND mentor's time into consideration. We know that it’s difficult to carve out steady time to mentor someone, and we appreciate that contribution to the Kubernetes community! The Bonus: we set up the communication framework for you already so your expectations are set when you are ready to dig into mentoring. + +You are serving two roles - coach and advisor. You are a problem solver that doesn’t have all of the answers but will know the best resources to go to get the guidance that is needed. You are helping to create a culture of continuous improvement, collaboration, and feedback. + +Check out our [mentoring programs](README.md) for more detailed descriptions. Please use [this form](https://goo.gl/forms/Y4MH6NGHe6OU5cZC3) to sign up to mentor. + +## Responsibilities and Expectations +*for ALL programs* +* Your goal is to be a guide and not a teacher. If you have the time to teach someone the fundamentals of Go, please do, but know that this isn’t required. In this scenario, you should be able to help identify the best resources for learning Go for the mentee. +* Issue Grooming. Most levels of the [membership ladder](/community-membership.md) will require some form of issue grooming from you. Examples: + * picking issues that don’t span multiple SIGs for new contributors + * or they do because they are learning to be a better approver + * labeling that will help them identify clear issues that need their attention +* Make introductions to resources and people for the mentee - this is sponsorship which is now equally as important as mentorship. +* Help contributor be productive. +* Patience and empathy. Through repetition, people learn, and as a mentor, we cannot expect a mentee to meet all of our expectations. Through the removal of expectation and bias, and with a sprinkle of compassion, we can gain more patience. +* Have some fun and learn together! + +### Benefits of being a mentor +* Adding value to the project: help the expedited growth of a kubernetes contributor and reduce the risk of burnout. +* Help for your SIG/WG/subproject: grow quality contributors, gain new perspectives. +* Your personal development: as a leader in and outside of the project, communication skills. +* Perspective: learn where you have holes in your process, documentation, etc. first hand. +* SWAG! + +### Myths +* You have to know everything about the Kubernetes ecosystem - or even your SIG/WG. +* You have to spend a lot of time with your mentee(s). +* Only new contributors need mentoring. + +### Responsibilities by each program +*[Group mentoring](group-mentoring.md)* + +You’ll need to be: +* On Slack at least 1-2 hours a week fielding questions. +* Available for a group bi-weekly standup to check the progress of the mentees. +* Helpful with building comradery amongst the group - this can be as simple as curating conversation in slack. + +Mentees will be asked to take responsibility for their growth and improvement as it's a semi-structured self-paced program; however, you are there to help guide them by sharing your methodologies, resources, tips, and experiences. + +*[The 1:1 Hour](the1-on-1hour.md)* +* Participate in a one hour a month session via zoom video conference; no more than 3 hours/times and that is opt-in. +* Depending on the activities that you’ve selected as comfortable in helping with, the mentee may ask: + * To pair program with you. + * Ask you an hours worth of questions (AMA). + * Do code reviews/docs reviews. + * Discuss their path so far and ask for input/feedback. + * Code base tour of a certain area + * Or a mix - it’s up to the mentee with how they’d like to spend the time and your skills/experience. +* You'll fill out a form once a month to list your availability. + +*[Outreachy](https://www.outreachy.org)* +* Being a mentor can take anywhere from 2-5 hours a week depending on the scope of the project that the intern(s) work on. +* Before the program: + * Issue grooming and planning activities for the Outreachy application process that they host [here](https://www.outreachy.org/apply/). All interns that are interested in the project must make one contribution as part of their application. Label them with a good first time issue. +* During the program: + * The time above is split up between slack, 1:1 pair programming and standups. + * Provide official feedback during intervals to Outreachy and the intern. + * Have read and understand the [rules and guidelines](https://www.outreachy.org/mentor/) around mentoring for Outreachy. + +CNCF will financially support one Outreachy intern for Kubernetes per semester; if you would like to participate and we already have one, assistance with securing a corporate sponsor for the additional budget ($6.5k) may be needed. + +*[Google Summer of Code](google-summer-of-code.md)* +* Being a mentor can take anywhere from 2-10 hours a week of your time depending on the student. In most cases, you will have a secondary/backup mentor to distribute the workload. +* Before the Program: + * Read the official GSOC mentors manual to get an overview. + * Talk to interested candidates via Slack. Share with them the project details, goals and some ideas for implementation. + * Point them to self-contained, easy and newcomer-friendly bugs to fix. + * Review draft proposals and provide feedback before the application period. + * Evaluate the final proposals and select the student you want to mentor. +* During the program: + * Set development and communication plans with your mentee. Make sure you establish realistic work objectives and timeline expectations. + * Help them get integrated into the community and encourage them to participate. + * Provide guidance such as pointers to useful documentation, code reviews, etc. + * Set aside time for a weekly sync via Slack or video call, whichever you prefer. + * Collect weekly status reports. They are important in making sure that time-line slippages and scope creep are addressed in a proactive manner. + * Keep track of the mentee's progress and keep them informed about their status. Make sure you deliver feedback early. + * Be responsive to questions - usual expectation is to reply within 24 hours (occasionally under 36 hours is ok). + * There will be three evaluations of your mentee's work. Submit them timely. The evaluation forms take hardly 10-15 min to fill. +* After the program: + * Share your conclusions of the project in communication channels, wherever appropriate. + * Communicate to organization administrators any lessons learned. + * Recommend next steps to your mentee in the current project or wherever you think they might fit in our community. + +A former GSoC intern for Kubernetes is now leading this for us - mentoring works! Thanks @nikhita! + +*[Meet Our Contributors - Mentors On Demand](meet-our-contributors.md)* +* One hour a month on a streaming YouTube show answering questions about the contribution process, your experience in open source, and other questions that people would normally ask to a mentor. +* Typically a one hour a quarter time commitment is expected; this is an opt-in sign up. +* You will need to be on the call 5 minutes early to test audio quality and make sure we are good to go for streaming. + + +### Other resources +TODO - add external resources/links on being a good mentor, etc. diff --git a/mentoring/mentoring-events.md b/mentoring/mentoring-events.md new file mode 100644 index 000000000..de9d0a232 --- /dev/null +++ b/mentoring/mentoring-events.md @@ -0,0 +1,16 @@ +# Mentoring Activities at Events + +During events like KubeCon and other related events that arise, there will be the opportunity for mentoring activities. This doc will list those and their respective details. The KubeCon events are run by CNCF/LF and not Contributor Experience although we may advise and members could help out. + +--- + +CNCF is hosting another speed networking and mentoring session during [KubeCon + CloudNativeCon Europe 2018](https://events.linuxfoundation.org/kubecon-eu-2018/). +Speed Networking & Mentoring Event Details: +Date: Wednesday, May 2 +Time: 15:40 - 17:00 +Location: Meeting Rooms 18 & 19 +Registration: Complimentary - pre-registration required + +Please help spread the word by encouraging KubeCon attendees to sign up for the free session. Pre-registration for this session is required - so fill out the [MENTOR](https://docs.google.com/forms/d/e/1FAIpQLSe6eClecYb4ZXWPpWDrk7FIqh6qPQPLLnXk9hSqC0b46sXO9Q/viewform) or [MENTEE](https://docs.google.com/forms/d/e/1FAIpQLSdxjqDS59NE1mi42JHDvHngSxBS4lGDDZzmXOLDO7nBawFhJw/viewform) forms today. + +The session is for those who are new or not so new to the community. Mentees are paired with mentors from across the community and CNCF projects and have the opportunity to explore growing a cloud native career, getting more involved in the ecosystem or working with new, emerging projects in areas like networking or service meshes. \ No newline at end of file diff --git a/mentoring/mentoring-logos/do-not-use.ai b/mentoring/mentoring-logos/do-not-use.ai new file mode 100644 index 000000000..5f4439a7d --- /dev/null +++ b/mentoring/mentoring-logos/do-not-use.ai @@ -0,0 +1,3861 @@ +%PDF-1.5 %âăĎÓ +1 0 obj <>/OCGs[5 0 R 6 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + kube crew option 2 + + + 2018-10-12T10:34:09-04:00 + 2018-10-12T10:34:09-04:00 + 2018-10-12T10:34:09-04:00 + Adobe Illustrator CC 22.1 (Windows) + + + + 256 + 68 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgARAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqxTzD+ZPl3SQ8UMgv7xSV9GBl4K1 SKPKfhWhFGAqR4ZsdN2ZlybkcMfP9ThZtdCGw9R/HV4/5w/OHV9RrAsvp27bNaWrsi08HlHxPsaE dNvs50+i7FhDet+8/q/HvdDq+1ZS2+wfr/HuSXyh+ZGpaG4jt5jZx8qmEAtbNU1POM1oT/Mor7jM rW9mQy7kcX3/ADcfS9onHsPT93yexeWfzi0fUIkXVE+qyNt9ah5SQMahdwKvHVvGo2+1nMarsWcD 6N/I8/2/jZ3+n7TjIerbzHL9n43Z/b3NvcwJcW0qTwSgNHLGwdGU9CrLUEZppRMTRFF2cZAixuEr uPMEsN/cwjT557S0KJPd2/GQq7oJCDCD6hAR1PwBjv0zIjpgYg8QEj0Py58vnTScxEiKJA6j9SZW d5aXtulzaSrPBJ9iRDUGhofpB2IzHnAxNSFFtjISFjkrZFk7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FUr806i2m+XNSvUbhLDbyGFj/AL9K8Y/+HIzI0mLjyxj3n7Or TqJ8OOR8nyneub7WodMkuksrPmkBlckQxgkfEwX9kZ6LjHBjMwOKXPzeJyy4p8F8MeXkyKD8pnsL Z7/zdq9voenc+FrIn+lyXO1Q8KRH4kINQevtmDLtjjPDggckuv8ADXvtyR2ZwjiyyEI9Ot+6mS+f /wAs7LV/NOopoerxPr6RxyPoUyek7IkKAejKaI5KitKbdyMwOzu1JYsMfEgfD39Y369Q5mu7Pjky y4JDj/m8unQvONX0nUvKt7Dby3UJvygku7SF/U9BqkCKanwcwOoBNM3uHNDURJAPD0J6+Y8nUZMc sEgLHF1Hd5F9Bfk3qCzeXbiy9RXeznqAvQJMobt3MgfOL7bx1lEv5w+79lPWdmTuBHcfv/bbKfL3 7xNQuz1ur64r/wBG7C0H/C24zX6nbhj3RH2+r9LmYd7PfI/Zt+hQvUj0rWra+iKxW2pSfVr9NlUy lSYJv9aq+mf5uS1+yMlAnJjMTzjuPd1H6fge9jMcExLpLY/oP6E8zEch2KuxV2KuxV2KpTfazew6 o1naWP1xIIEuLvhIElAldljESMAjk+k5NXX6cyceCJhxSlw2aG223O+7mOhaJ5ZCVAXQs/j9qN0/ UrPULf17WTmgYo6kFXR1+0jowDIw7hhXKsmKUDUmyExIWETlbN2KuxV2KuxV2KuxV2KuxV2KuxV2 KuxV2KuxV2KsI/N2/MHldLZWUNdzoGDfyxVlqPk6Jm27Gx3mvuH37fdbr+0p1jrvP3b/AKnzloeh 6j5h1xYrGynuonnU3Hooz+nHI+7OwFF27nO5z6iOHHcpAbbX1Lx+LDLNk9IJ3fR36KvL3zFe6V5g XTZfLD+mNE012UXUbwxrRolUAhSFY/aqO21c4bxYwxRni4/F34pfw79713hmWQxycPh/wjrt3IfW o9afTDq2lWdh5f8AOeqfu5hfzRyT+hCSgEUgDIWI4HpTffemTwHGJ8EzLJgh/NBqz3/axzCZjxxE YZpd53od32PKvzv8talb+aZtZTT5UsbuGCS5uURjCk5XgylxVAxKjvvnRdg6qEsIx8Q4ok0OtOj7 Y08hlM69JAvutkn5B6pS/e1KLGtzacSamrvbv8H/AArSZge0OL033S+/8Bzuxcm9d4+78F615Vqf LWmSEUee2jnk/wBeZRI3j+0xzm9X/eyHcSPls7zT/wB3H3KWvW1ve6lo9jcRLNF601zLFIoZGSK3 eOjK2x+OdTktPIwhOQNGgPmQf0IzREpRB77+z9qjc6JNpEbXnl4MiwjnJowY/V5kHVYkNRDJ/Lwo pP2h3E45xkPDl6/xdR7+8d979zGWIw3h/peh93cnVjeW97ZwXls3O3uY1lhfpVHAZTQ+xzFyQMJG J5hvhISAI5FWyDJ2KuxV2KpToI9a41TUDuLm7eKLxEdoBb8f+RscjfTmTqNhGPdH/db/AHENGHcy l3n7tvvtZqMIsdYs9TgHAXUi2eoqNg6uCIJCO7pIFQH+Vj4ChxS44GB6bj9I9xG/vCzHDISHXY/o +1OcxW92KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KsL/NDynPrukR3FrykurASFbcE/vI5OJc AD9semCv0jvm17K1gwzo8pde79m7ga/THJGxzD5ovI9Q0mR4oLiSO3uQKmN2UOqmoDgEVpXvneQM cgsgWHjckZYzQOxex+S/M2gavZxecNc4ad5h0qI6VDqtx/vLcTyxsYnYDf1EQHn7N8uPMa7S5ccj gx+rFM8fCPqAB3+Hd7vnv9JqMeQeNP05I+niPInp8e9ErP5ZuPL0T69qsfm/VvLLTapCtkxZ5ISw qspaoKo7Bm3+yo2IFDWY5Y5T4cThhlqPq7/L8dWfFjOP95LxZY7lt3ebxvXPMuueY9Yu7meaQtqM oZ7VGb0wF2jXj0IQAAZ1GDS48EAAPpHP8d7z+XPkzTJJ+o8nrv5LeSeM0OuVljt7RpRGzGgnnZGh cgCo9NAxH+t40zmu3NdYOPa5V8Bz+Z+73vQdlaSqn0H2nl8np3laUJpa6a+1zpNLKZD1pEAIpPlJ FxcfPNBqxc+PpP1fPn8js7jTn08PWO34943XXP8Aylem/wDMBff8nrTBH+5l/Wj900y/vB/Vl98U 2zGbmKeW/LGlSaDayIJ7S5KFZZLaeaBvUVircgjKrEMD9oEZsdTqpjIRsR5gFw8OniYDmD5EhFpq 8+i3a2WvXaPaTBjY6vLwhDFd2huKcY1k47qwADCuwI3rOEZY8WMbjnHn8R1rv7mYyHGamduh/Qen 601sdY0i/Zlsb63u2UVYQSpIQOlTxJzHyYZw+qJHvDdDLGX0kFF5UzU7qdLe2muH+xCjSN8lFT+r JQjxEDvRI0LQfl63e30LT4pP71beMzHxkZQ0jfSxJyzUy4skiOVlrwxqAHkhvNlvBeadBp8w5Le3 lrHwqVLLHMs8gBWhH7uFumWaORjIyH8MZfdX3ljqIiURE9SPvv8AQpWU17pGpRaXezvd2N5yGmXk u8qyIpY20zftngpZHO5oQ24qZTjHJAziKlH6h0/rD9I+XlGJMJcJNg8j+g/oKfZhuS7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq83/ADE/NHWvKWtRaf8AohJrO8QGzv8A1StTsrgrwI5Ix6V6U8c3 vZvZWPU4zLjqUeYr9vV0+v7Rngnw8Ox5G3kGkaL5j8+22oXDX0QuLa8ti0ckYiiZ78vG8lLeM0PK JC3w0pVj0zps2fFozEcJoxPmfTW258z17g6LFiyaoE3uJD/Ze4eX6UyT8oPNk+m6fax6hCiTu0st lcPNHHFO6M1QpQhm9KIB6Dkp6/DQ5Qe2cInImJ26ijY+fedunxbv5JymIAkPcb5/LuG6UaB5B8x3 NtbXtlqFvZjUonjjJedQySz/AFIxNJFE8R9R2px5nb7VKiuTqO0cUSYyiZcJ8ug4rom9u+vc4+DQ ZCBISA4vf38NWBW/vX61+WPmLy/pVzq9xe2RtrZvTf0ZWZ2cyemEVSgNTXnv299sGDtXFmmIASs9 48r7/gnN2dkwxMyY0PP9jMvIX5w+ZXTSfLcOlxajfTfuoZua26hAzUqkUfELGi1J8Bmr7Q7FxDjy mRjEfH7z1Ln6LtXIeHGI8Uj8PuHR7NqOkG4nW9s5zZalGvBbhVDq6VqI5oyR6iVNRuGG/FhU5y2L NQ4ZDij3fpB6H8EPRTx2bBqX45pVdXGs22taXeajbRJApkspbuCQtHS64FCyOqtHymhjUbt165kQ jCWOUYk3tKiP5t/PYnuaZSkJxMh5X7/2gMmzActKfLJI0+eI7NDe3qcfBfrUjRj/AJFsuZOq+oHv jH/cj9LTg+k++X3lb5mCxxaffMARY31vJuKgCYm1Zv8AYrcFvow6Xcyj/Oifs9X6EZ9gD3SH27fp RWo6HpOpLS9tY5WG6SkUlQ0pySRaOjDsykHKsWecPpNfd8mc8UZ8wk9hdeZ7W/udFVINQFosc0F9 dztDK1vNyVA6xwyiR0aNlLVWooTucyskMMojJvG9qAsWPeRV35tEJZATDaVdSeh+Ctqd7rsdnNHf 6aktlLG8c1xYTNNKispHMwPHESBX9hmb2yOKGMyBjL1DpIUPnZ+2mWSUwDY28v1UifLmt2N95bs9 R9eIR/V0a4fmvGN1WkgZq0HFgRlepwShlMaPPb9DLBlEsYlfRTspTrGpx6igP6LslYWDsCPXmkWj TrX9hUJRG/a5MenEmUx4UOH+OXPyHd773PdQ81ieOXF/COXn5/q+LfnEcfL1zcjaWyMd5CaVpJby LKv38aH2waL+9A/nbfPZdT9BPdv8k6zFb3Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXn/nv8qZ vN2sxahca3JbQ2yBLS0WAOsfQsalxUs25NPAds3XZ/a402MxELJ5m/2Oq1vZhzz4jOq5Cku0j/nH 7ypbSSNqUr36sAI0X1IAh7mokcnL83tFmkPQOH7f0NOLsPEPq9X2fpTb/lSf5fcg31SfkCWB+sz1 5N1P2+pzG/l3U94/0ocj+SMHcfmVv/Kjvy64hfqMvEEkD6xNSp6/te2H+XtV/OHyCP5H0/cfmUJq 35DeSrq3ZbNZbO6ZgxuWkln27jizjrlmH2g1ET6qkO7YfoYZexcMhtse/cpbYfkGNP1O11Kx1+S3 ubJ1e3424IBU135SkkE1qCcvye0PHAwljsS57/saYdicEhKM6I8v2vWs5t3qjeWdte2ktpdRiW3n QxyxmtCrCh6bj6MlCZjISHMMZREhR5JRE3mTSgIHhOt2a7RTo8cd4FHQSrKY4pKfzh1J/l75lEYs m9+HL/Y/CrI91H3tI8SG1cY+39R9/wBiF0PV1/xHfWslrc2cepcLq3+tRmLlPHGsU0aGpVv3caOK H+Y9ssz4f3USCJcOxo3tdg/MkfJhiy+siiOLffv6/o+1PdVsRf6Zd2Jbh9aheL1B1UupUMPda1GY eHJwTEu4uRkhxRI71miagdQ0m1vHXhLKg9eLuky/DLGfdJAVPyw58fBMx6fo6H4hGKfFEFB64RZ6 hp2r/ZSOT6ldnoPRu2VVY/6s6x79lLZbg9UZQ/zh74/sv7GGX0yEvgfcf219qc5it7FLDQ9AsNba wvNOtXaV2udGu5IYy/EkvJbq5WoaFiWQf77Ip9k5scmfJPHxRlLbaQs/A/Hr5+8OHDFCM6IHfE19 nw+73MrzXOYknmB/r01voUPxvcPHNf06R2kbhm5/8ZinpKOpqxH2TmXpxwA5D02H9b9nP5d7j5jx EQHXn7v28v7E7zEch2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KoT U9LtNStTbXIagYPFKjFJI5FNVkjcbqynv/DLMWWUDY/t8iwyYxMUUBHH5utG9NXs9UhAoss7PZz9 f2/Tjnjc07qqfLLicEt/VA+XqH2kEfMtQGWPdL7D9x/QgLa71HQr+5n1W3httGv5PVM0Ezzx21ww +NpS0UHCKU/FyoQr1LH4tr5QhmiBAkzj3iuIeW5sj7uXJrjKWMkyFQPndHz2Gx+/3shu7a11Cwmt paSWt1E0b8T1SRaGhHseuYMJGEgRzBcqURIUeRQWg38zxvp189dU0+kdyTQGVDUR3Cj+WVRXbo3J f2ct1GMA8Ufoly8u8fD7qPVrwzJ9J+ofi/j+xGahp1nqFsbe7j9SOodSCVZXU1V0dSGRlPRlNRle PJKBuLOcBIUUpv7abTNPmnvPMVzBZRCpmdLUyKOyqxhPI9h8JY+5zJxyGSQEcYMj/Wr7/wBjTOJh GzM18P1KfkvRWs4bzUZopIbrVZRK0dwzSTrFGvCFZmYsS5FXYfsluI2UYddn4iIAgiA6cr615dPO r6o0uLhBkecu/n5X+PJkeYLlOxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux V2KuxV2KuxVxpQ16d8VYbJ/yr315PqnqVp++/RH130u9eX1D9348q/Tm0H5mvVX+fw3/ALPdwT4F 7f7Hi/3qj/zonI/ov1/01y/dfVPV/SVf8r1/i9L+b1v3X82S/wAI/jrw/OuD7Ov9X1dzH9z/AA3x +V8X29Pf6Vf/AJCn6Z9L9Hel+z9Z5fW6f5Xpf6PXxptkf8Dvfjvy+n7fUy/wn+j8ef2bLtL/AEf+ mIP0/wDXf01UfUv0l6f1fnTf6p6H+jc+v/FtMGXi4D4XD4fXhu/86/VX+xXHw8Y4+Lj6cXL4Vt/v mX5rHOdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir/AP/Z + + + + uuid:c732f90b-7b90-4618-a279-c71c7e69932c + xmp.did:1e22eb59-927f-2742-a38e-0bd986b822b8 + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + xmp.iid:effb7c39-79fb-9448-975d-d6aa9e8ca462 + xmp.did:effb7c39-79fb-9448-975d-d6aa9e8ca462 + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + + + + saved + xmp.iid:09940442-c036-754d-bb89-79c2f5d1edc0 + 2018-10-02T18:06:41-04:00 + Adobe Illustrator CC 22.1 (Windows) + / + + + saved + xmp.iid:1e22eb59-927f-2742-a38e-0bd986b822b8 + 2018-10-12T10:34:07-04:00 + Adobe Illustrator CC 22.1 (Windows) + / + + + + Print + Document + False + False + 1 + + 800.000000 + 800.000000 + Pixels + + + + Cyan + Magenta + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 35 + 31 + 32 + + + CMYK Red + RGB + PROCESS + 236 + 28 + 36 + + + CMYK Yellow + RGB + PROCESS + 255 + 241 + 0 + + + CMYK Green + RGB + PROCESS + 0 + 165 + 81 + + + CMYK Cyan + RGB + PROCESS + 0 + 173 + 238 + + + CMYK Blue + RGB + PROCESS + 46 + 49 + 145 + + + CMYK Magenta + RGB + PROCESS + 235 + 0 + 139 + + + C=15 M=100 Y=90 K=10 + RGB + PROCESS + 190 + 30 + 45 + + + C=0 M=90 Y=85 K=0 + RGB + PROCESS + 238 + 64 + 54 + + + C=0 M=80 Y=95 K=0 + RGB + PROCESS + 240 + 90 + 40 + + + C=0 M=50 Y=100 K=0 + RGB + PROCESS + 246 + 146 + 30 + + + C=0 M=35 Y=85 K=0 + RGB + PROCESS + 250 + 175 + 64 + + + C=5 M=0 Y=90 K=0 + RGB + PROCESS + 249 + 236 + 49 + + + C=20 M=0 Y=100 K=0 + RGB + PROCESS + 214 + 222 + 35 + + + C=50 M=0 Y=100 K=0 + RGB + PROCESS + 139 + 197 + 63 + + + C=75 M=0 Y=100 K=0 + RGB + PROCESS + 55 + 179 + 74 + + + C=85 M=10 Y=100 K=10 + RGB + PROCESS + 0 + 147 + 69 + + + C=90 M=30 Y=95 K=30 + RGB + PROCESS + 0 + 104 + 56 + + + C=75 M=0 Y=75 K=0 + RGB + PROCESS + 41 + 180 + 115 + + + C=80 M=10 Y=45 K=0 + RGB + PROCESS + 0 + 166 + 156 + + + C=70 M=15 Y=0 K=0 + RGB + PROCESS + 37 + 169 + 224 + + + C=85 M=50 Y=0 K=0 + RGB + PROCESS + 27 + 117 + 187 + + + C=100 M=95 Y=5 K=0 + RGB + PROCESS + 43 + 56 + 143 + + + C=100 M=100 Y=25 K=25 + RGB + PROCESS + 38 + 34 + 97 + + + C=75 M=100 Y=0 K=0 + RGB + PROCESS + 101 + 45 + 144 + + + C=50 M=100 Y=0 K=0 + RGB + PROCESS + 144 + 39 + 142 + + + C=35 M=100 Y=35 K=10 + RGB + PROCESS + 158 + 31 + 99 + + + C=10 M=100 Y=50 K=0 + RGB + PROCESS + 217 + 28 + 92 + + + C=0 M=95 Y=20 K=0 + RGB + PROCESS + 236 + 41 + 123 + + + C=25 M=25 Y=40 K=0 + RGB + PROCESS + 193 + 180 + 154 + + + C=40 M=45 Y=50 K=5 + RGB + PROCESS + 154 + 132 + 121 + + + C=50 M=50 Y=60 K=25 + RGB + PROCESS + 113 + 101 + 88 + + + C=55 M=60 Y=65 K=40 + RGB + PROCESS + 90 + 74 + 66 + + + C=25 M=40 Y=65 K=0 + RGB + PROCESS + 195 + 153 + 107 + + + C=30 M=50 Y=75 K=10 + RGB + PROCESS + 168 + 124 + 79 + + + C=35 M=60 Y=80 K=25 + RGB + PROCESS + 138 + 93 + 59 + + + C=40 M=65 Y=90 K=35 + RGB + PROCESS + 117 + 76 + 40 + + + C=40 M=70 Y=100 K=50 + RGB + PROCESS + 96 + 56 + 19 + + + C=50 M=70 Y=80 K=70 + RGB + PROCESS + 59 + 35 + 20 + + + R=50 G=108 B=229 + PROCESS + 100.000000 + RGB + 50 + 108 + 229 + + + + + + Grays + 1 + + + + C=0 M=0 Y=0 K=100 + RGB + PROCESS + 35 + 31 + 32 + + + C=0 M=0 Y=0 K=90 + RGB + PROCESS + 64 + 64 + 65 + + + C=0 M=0 Y=0 K=80 + RGB + PROCESS + 88 + 89 + 91 + + + C=0 M=0 Y=0 K=70 + RGB + PROCESS + 109 + 110 + 112 + + + C=0 M=0 Y=0 K=60 + RGB + PROCESS + 128 + 129 + 132 + + + C=0 M=0 Y=0 K=50 + RGB + PROCESS + 146 + 148 + 151 + + + C=0 M=0 Y=0 K=40 + RGB + PROCESS + 166 + 168 + 171 + + + C=0 M=0 Y=0 K=30 + RGB + PROCESS + 187 + 189 + 191 + + + C=0 M=0 Y=0 K=20 + RGB + PROCESS + 208 + 210 + 211 + + + C=0 M=0 Y=0 K=10 + RGB + PROCESS + 230 + 231 + 232 + + + C=0 M=0 Y=0 K=5 + RGB + PROCESS + 241 + 241 + 242 + + + + + + Brights + 1 + + + + C=0 M=100 Y=100 K=0 + RGB + PROCESS + 236 + 28 + 36 + + + C=0 M=75 Y=100 K=0 + RGB + PROCESS + 241 + 101 + 34 + + + C=0 M=10 Y=95 K=0 + RGB + PROCESS + 255 + 221 + 21 + + + C=85 M=10 Y=100 K=0 + RGB + PROCESS + 0 + 161 + 75 + + + C=100 M=90 Y=0 K=0 + RGB + PROCESS + 34 + 64 + 153 + + + C=60 M=90 Y=0 K=0 + RGB + PROCESS + 127 + 63 + 151 + + + + + + + Adobe PDF library 15.00 + + + + + + + + + + + + + + + + + + + + + + + + + +endstream endobj 3 0 obj <> endobj 8 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/Thumb 13 0 R/TrimBox[0.0 0.0 800.0 800.0]/Type/Page>> endobj 9 0 obj <>stream +H‰¬—ËŽ%Ç D÷÷+ęnMľŹ­G‚W‚!xáhŘ֢ǀ<˙ř™U·{¤Ą!hú2+L2Śüň·ŻÇ—_ľ¦ă/?}=ż?Ň1Sü˙Ô?˙ýçăÇ_ľţ=oߏtćŐů·•ĆżsÍăřţĆçżňůßßżůHü—Ź‘ÓŮsjGµv¦iëxűöЧoʧÍÓR?ŠőłÖ|Ľ3˛Nëő(=ť«—ăŮËŮGÁnçěý\&“żĄoŹgMőśuuúúšć™łĚz¦žŹgÍőôÓ_㬳ůÖ^•ľî-ĺÜjë>Ôz>»Í—S†W#Űí7Űô’ĎRtçwĺ,cĎvöę—ČgîŘëlKvžgIăxâ›ţĘŤJ”¸ř3łvÍŞmV:qĺÓwŕÜkéLÄcoś1îSâ·Çżż>~ţ…|~‰ěćČîŻ˙Çüń:Ć‘„ţNo /ŤČd¶6˛ťÓđ<Şň1łs6;týą.‹€4;k©×7Őö÷ôg›ń9¶ĽÍr/ŹgË'‰xŹ™? ädŤd$×c¤ź6šŮP¨%P‡ňĹšL&®·GUlěx÷Kż&pĺÎ:PÝ9oM9¶éi'}•™\r¤ł Lw„“?ťÁW:_ˇď @ÎQ÷kĺö±´ęą6ăç3wí‡y¦!8—Ó¦n·đ†»(aä^ßA*§¦“˛’[Ş˝÷G>«PLQ$aŽcÓźş—q/%đ“Ó8›n~»—ŽU@ ›ń Z(:î¬Üs™Ćź×b4ĹdŰĆűÉÁ9_UÖ–µÝĚd“ŹłµŇ‘ą@š+łł—P\ŁyfĽX0IQ‹l\‘`ĚĽś_ŘĐf#9;LNb]ánąű­É†¨đCŢ&čä˛ß]I÷ŔűVéĹî‘ڱ‘đéCg˙® _͡:ž{ d,+Ě +Zí}jŽ,ŻvLŃę§ŕg#ÓÓŁ*˛0'÷nÔ‡gą~‰š˛;¸>‰¤_sUĎ­kĎş¦Ł)iáňŰŹ e~î°fN„ŠK}Ŕ,őVĆ…Z@ł¨.iiůx ä6«{w}ÓQDݎNőÉĄ˝Uö$ćă>čxS öoá»ëľŰ®÷>ő>„ş?¦ş]Š« ˙A™S2uuöî8ôéî”%HáA‚…şoü« Uh±ŞŲÝÚ‚aşóK?'ý“†Öí`ď!îŁyQ¦ôQ`ďčš$WJç`%¸đŁ*dͤ YťvQ´¤QcŤrPNéť pŔšó˛ßOŠŻQ?*J9çOíF+J018í:Cˇc†ł$»vŹz‹Ľi*NЍö"h +1kŞ—yčÜ&b†’®ôJQ$šŽVŤŇ–ŃlĽDgÍ!ŤóĹ%ÁS€ElTç-±]!ş‰U/ż:ăçë;ó ˙¸y«*O;ŤřÁTžÄ<»Ű ×^ ‡ýsń+y´{QEWx‚›úŠżůz±|đÉâśĺµäÎ)˘)™ű­Łˇ’stŮ·.šw$I+W~¸hc$XăR ”©őçäq!€˝—ßĎ+©q#±4j&ţ±Ş ,cÝ„iΫ¬5ŕ cę”°ß’gĐ.QŐ­®LÉ_P®~7 ¶k5ú•Ż “Ůälô{@!#úTk~Ź<mk8•jbŞYˇĎ&8S7l_…ÎB©ĺh´†€€Ź0Ç•Ő QRpXTčrŞÓÔÎF¦¬N%sL5>TIy™ĂSÓ5€Éć’C.“§? 8˘ÇÇ`:F߲"´¤dt—’®Čx É–"i3ˇ‡éH 7ÂR¬©- |}µSĚ„ĺŮ!K˝aĹ5˝p‹đ(ůËáł,ńŤ*aEŰ›Ď űľRzýü4µ¨Žąj Gíc‹‚pFô˝.ŢĹ5[8/‹łVpĹţ*° ”$%G + HĹ%ÚtŢń~» ÷˘!î_Řk‘fŰÖ¦DĹ Y=âľ"ŕĄT¬ĘÚŃ)Ł^‘h!Ţ>»¦ŞôUśu™zD8[ßß›÷-+z¸¨çĹ`…2ájż@ +r¨ů1v ŇôćTô×·ŰŽ9‚«,uŹŔÔŁB//–®°öŠéě|áAh%ŮÓô~dËëŇ(pîÝ·02/»6CÖdo!OÉ„ěĚ—ˇŻ*/!E©TΗTP[yMę.aĺ’żűµxĘáV˛VŐă,™˝O y›Ăˇežb—XËGFť{^v»ÍÝśÚ… OšE\qN-DEě:3Ź3íş3żÄ©Đůrő¸aEI”Ú? ¸ś Ň \ÉąŤâF!HúóP*qŢ­f”YÓ „ ęÁ‡ĺĚE„!´mE ŕë+űă»6R[‚dü̲šç5I(,Ďą@&tĐŠBÜ gBŞV=M"ßĹ‹Ş/;ÄT%Ń +Ą±¨óîü±‘…ÔÓŕPÔ°uđ®é"ŘŽŢYźÄbňdsŚ´tR»,×oăTcpą*:Í%.6{őWÖ"Ŕ&+SŢc{ Mâî:ĺÓ @7äi!8qd»og< +˛ÂđĚdČwŰŃţ„şJš=×Ĺ™Ąę  P5mŠ­ŚăąE“97Ľ9UÝAĎ=×82’3“\S\C·c+ˇŇwĘvĽ˛’ęLńWßš¦ůsďŰk`3ŚÄźk¸ćŐAńg ĽšüyVĚ#ŁŢ5ăJ;ťŢŹĹ±,)JPgH›Ą÷«ą2q—%E9b®Íىî¤JV­kŰZŽKD¶ĄŮ4Ż|ŮĹk”­ÔˉĄś° ÚĄ~5׸ZťÁô‘ IG­ŰMq`wîxţóéú4U‹ą¦vĄďWM‚t8UÉ’ć{µHŹţ¶ÄlŇç-$ť…–zŇnpĄ7"łpkiwĎÖ1ĂYYĎá5×Űô°,oX1@Tţz÷uˇŁşN$/ڦ4Jč›?2ćF™µ]ű˛Š× W[UÖďzx¤JwJItDč´FQś\yZt’˘s$µ\"›kb*Wýˇw„7=ÇT®ŕ.«żq;s+jXÚLV‹¦HÖS0sW qĹ š&)×-*›^Ł˝Ż×wÁ-íłzMTŔĺ¶z]÷¶UC(‰—·žŹęďTÓçuŘîj",l^q oV=Š+嵏Ý3V`˝»¸ÝĹHŞ­~.Ö ł±Ť©]ćîôV?J*.ëu4EęR¦ţ{z†ôf%´V•ÄjÁí^ěSe§?š8â‰VěÎűęHz÷é© U÷rŚčĺć]fR’Š'¨c+ĎŃ·ő¦7Ą?ČöW=ĂÜ*śÉ­óŞľŹ'®&ĂŞSSšČy˛Ż®L +x­ě^–|Ěb…ĐyďľÔśˇ&ÄĚĆ“Îé„\ü±×í*n ćěĺ¬ö…Ne’·řµŔ춸çň·Ä¶I®|ডAÖMŤÁAHĺOŹFzőB%sőá‡^´¤Ž[Ż(QB0^ €ż–[Č“´n]P[n·éaž[eúw­•ąř«@罡±y4ůi’c”ѬN=ÉĹ+O§Ý­ +»ĽśÜ•-€vŤ~ăąńD•­°*đ(Rd!ÉĆRy©,4^a™JGüćPČőôŮ÷žqѰd‹‚śzHe†'Ňx˙cżÜ±ב ęĎ*j]CüűůăôúŚŃţl""AIÔź%•JŇŐM–H‰›™7Y¬‡BD'…ŞNŰŰOb2řmSÄ.±¬ŚlŞSłč&Ö}lLĄ»*“F* §.9¸–™ďefĹ&•E…"Źî°U'3 <5šBÍÓź°Ő†;,Ńrj düXýłĘkŞjl,ýo8Ö2§QPćá™řÓÖXL5€á‡¬y€űP!\é‘Uźő¦ä…ĺÂ^Ź(ş Ú©íx ?MâÜ͉ěy·–ŕS™oôÍ ű2ä—,d‚"ŞÍ«­–:GşĆť:KS0‚gĽĄÚ„sÄÚ­Gá%qĎ6Űе1I­xž‚Çrçnˇ\HŐRÄŘ ˘™'ë0vé}/L(ü]­ µĎr‚mžîS¤Q1¨»€ě‰n5%0Ę9G•, mđؤ"YvÜ$Ďv'ˇf×Qy¬ąvˇ`\H\S)ŐĽe1Ś +Ă&ćQöą‰xŇéőß"~®ĚŻÁ­\Ű7ú–ú÷‹JŞ-¬†yÍUmʶÓ`2±ďł“s hçą}lEhŠiŽOׂhÁU[«sěŐ«Ü|0Ž“UŘž·őT+<—~äězˇlp 9S鬫Ô)"r9o#‘[É â–ę/\Ąć·±ĺ`—¶±őM¶Óď«:že†7ŐéYĂZU{B!ŮK¤%r±¸´ÍEN-ϩʡ…%¦'˛ÚľŰÉt¬¤ o+ô€)o*~ÖTĄçâŇűΦ´ô®ÔkzSv›B‘Îq§Ž1Ču®r,€sý;:yL8†·LžrťĘŮÔŚńM~­—$q +ÎŚć•vXD“:¨tbŮĹR6Ę B'ŮL±Č«HÉ!΢4•úޢÍPnŠÝ*żTĄ7,CSW‰ŘgIÖKÜÍJTN´˛Řöfy3AĐ\ äëÜ„ô h;°.I)™%ďż‹-ĺaR­hŕ83(Ko0î&éŻ49 jh‹ˇhhuęlbíŢÖ0lV?›ř×jŇ…±}Ž;QoĄŁmşÜW€)‘˘NĚôôQ,ď‚i1:eßr•5b˛bŻńt˛“ţÍkx1bIĹć)EŹ:ýܦ±¦ł@¶¸Ůć°ěÉÇnl\Re&¤`kovĚ-ĘsĚ’5Čp%3ɆG+Ô2$Łt5§弫 Ze×<‡€łcí8ćIúµĺúß˙üž>ţůÍ3k<)*#wQ?>~˙óźqůă˙Á˙Űń˙ßý^TöPá\ZĂáű”Ží ěş»Řá8Řq¶7°ă vŰ»^ŕZmjĆ:ŐaIµż@uéTŰAŮPíĎQmXÇ Öe-ÖÜ>ą^bÝ–XçŐnµÖéÖYXűë±îTŁ:_ :uŞÓŐnu<‰uÝĹşťÁ:ëdX—]¬Ý®qÝÄu9ę+ęAő;P}X­ÉP‹ţîV€˝ĆCüž‡Ü ö%ä6°żj!gąŢ“·ÂBnű«r-ŘĺZ°ý*°ă.ŘőDąX¬ßëz]»:ú]Íý)qgDäŘGEä,Řĺ<Řw%;Ż!{;6®6‘kČľ,"çÁţÂÔ¸’ěu&rµ´Ąä;ÖëőŔú°>VŻSŔ¶Ż5żŠüČŕřl"’†”“őz`=°~y¬ęuÂśG.€)źŕú!rëgźŇCľťëuRŻö ×÷×ëAő ú ¨>V­[nE\‡ k^­!a…†Ä§Ó÷­ÂíßĂCŇ ˛oô|ěôś®ĐëÁőŕú-¸>¨Řáťąŕ+@¸žěó*ňŘÁń’‰<ńŕřô&ňU®WšČMsăźAő úí¨>V­CĂľÉuđ§<äčŕXîĚuyŕŕ×Hú^°ŻđSd›‡„ëÉvŹ@űjiKąir<¬×ëÁőës}P±=IÎgUÖ‹ČkŽß+"·ŽţěŕxŁŠ\¦"ëÇk{`=°~¬ŹŐë&'°CÄ^~ÎD.}W٢ý&ň´łă%Ů#űž†=¸\ż×{B€rŔě°Źů6I?ŕ"ńIW“]đÚH¸B˛Ůě7!ű°j§Oźń[˛ +Ääz¶ě#7±}‹ŽÜŔöĐ‘ Řő{Čš=°XżÖűőÚWŁamGËšń±ľđř×¸ČłŹŹáz°ÝcÉľd"íŽóăźÁőŕú ą>V±3K´Ç‘oU‘盿WE–ÓăŚv]Ťö©éńFą4=ľ‚‹”“{p=¸~}®*v±ěě1öą>ńđxWÓă3¸Č=§Ç?ëÁőr}X±ńJŹ#ŮŃą/†‹Ľ«‹¤«É.řŔm$\aŮěAö›}PµSúô)byĆÉož oń‘Wd{čČwëȉ’=°XżÖÇęu˘„lł?¶{Řĺóc^Cvş3Ůë]ä<Ůáz˛ÝcŃľ¤"m‰v>‚öµóăaÁ\®_źëŠŤĐb¨ĂôČ MmLŹ×»ČMŹŻä"×ë7äúXĹnxś`ÇäĘŞČ*°o3‘ťďm"O;;^‘=®ď(ŘęőëC}P«±Ç&ť]ÄNYČď öz y­ąń8ŘG,䊱ń˘…ś(×ëÁő[p}¬bG‡$Ů‘Gşznü ëŔžçF?LäiMäŘŘxíÔxXŻŐęW§ú ZOŘV}yÂÇ#¶ňýR±wˇśĹ*aŤŽéW¦¨ËÜ99áWĂżŃ[€xrJ CŠZ…"’©}­)1_ołČŻŇĎšńőč?˝ +\Ňţđ÷Ŕĺ9Ľ# +í€ĺĄOďňQ´+jż×.˘íp†ł¶]?sľSÎĘy<„+gĽú¨SćŤE7%ÝŘÇ]…ŻŞŠę ××P_’h,|ąĚ÷ąb~üŞfĽŢď„÷±ú]Ł <6Ľoµ—„€ÇŐ^Âwľ‹bÉŢŚË$6ť+Ľě›Ďź…ďjÉŕçÁYÔ`Ł}µv‰AÜrᲠ+ĺí9-=1‘>«Q6ß:/SÖŽÓŤżM:‰ŘéRt,;»D0áRiJÓk6,zóÍk##¸·ęÍ$d2 9%d«Šbcd¤Đ$ť0’ ’Ř“60ů5V!%ކFW(()bďôlŰm nĐĽf 1)îâ’Q‚€ŕ;;l”Ë ¦Vc•˙÷ěµW«ĺ]jI‚š[°LoE›ś‘Ö]YÚú`Dş§Ç·Y­Złµ73o”s¨2>0"­żÍ¦Ĺń¤Đ$aÜéąl+ŮQăµţˇřL1ię-ŚMµÚŘrŠ]ö>>P*—^•qâ  .háw ‡ŐEĐɢZD\Óâ aP¨ióDgHŤ'—4H§‡šćŐiÉš¦×‰ô`Yá›ĹŻ-čďÄḡŰlţ‡Š¦őIÍÔ@Ł…ßM|á0vŰźâzŠž"Ţbt•ą÷EĐĐ·‰×"D‰™÷®ű)ĺ)ĺo)ĺŐ˝Ü` +˛†fşy)ŐhQx·§f«f«`űÂ~Ra۬ +™áoÖpvD Ďé:)ţeU­ŕ`r5Eł­E#&â¦ĹÚXŚłĄČ´€Wł)š˘ÂČzX…}RWŘWŞő1äŹJěN›­âÇíĘŰh§ŞłÖx$úÎŹbÍ®I«ÁŁčqQYD)8/łÝ—Š ¦ŹY‡ąó&/v* Ozr=–bú&Z›Äőł©f‰MŁ7Źäé·5•…—ž¨ýE´ĚS ĺ—x`,ŢŇcyż™ÁŢś]óŚčiŁtßd«ŁËÍfćäĐěŤlüčĐ=Ćś ÇkîLń$ąełÎ•Ď-}Ca5ů­Â#pÉn^…; Ń’˘7ľAǵUFĐŞ‰G’»ľŢíV$ťf-r ;š;jR‡}ëfXq$ußĘŁŕÚĺ»đbb—°pĂé5""ń›Ő„f»€vV0‡ÍĹM˝1âq +b«ÖfŁÂʵŘkĂfťhM´&ZŹAkÝODôMĐp霥ő¸ÄşT”ME–Ë×hĎR·˝U/Ľp#ÉŢéŮŽš(t;yLÖyc„O©š!ěÖ]–ś×ŞÍú+Ď[s%ąéÉjżˇ5ßňk!GT)0ŞÁbóĆE¨}z¤Äë 6ő«I1˙›Š˙mŃ%«<ţŠ,84“&µeç}ŔÇćrČ‚Y|Ż>é¶ŐźíKGSÝëq¦qđ`Η©ăš|StL+oŁĹńEŻ}ř¦d^Ë® ugËźíˇ­”ńG¤ŚÓŔĘF÷‚=:`L#šÝdÔćy“ři*WÄá‚GÔ¬!Q°L`%f€×‘‰]ýâË;}Ŕ”ŕ”ŕ'Kpíßqßf¨¤ŕÜ­íT„ŃEHőY—”,ŹÁ‹©žţůOô­°î%4J†b1 ˘×ďdď…d@+]†UAÔ ßgTďSŇqťs¶@ $’ÜÓĐWłĂ{ÁJ%?Š×ÖđŢQz9âş`í6_dΡşŠéމóŞnmab=I6îÝĺF\E™;ĂÔÉĘĂ5×a´ü…ľčµgŻóRš­ÔLę¦3×䢊ž; +6úĄúÔŮZ5´€c)»8sZ Fö6˛·M= ˘>QËn1čÄ–öÓÁ4ŻĆ%Mnh!«oJÄĺŮC]ŽQ]Í6ąą&-Ź…™ +ŢÄ=˘:šÖ‚l›>»g”Żńŕ!™ĄHšÜ$.‹ÎÔŤ@őş®<¦¸©Cżšű0b—šyCd8›:Ĺ0€°[0äE>˝x˙ZŹ/âÉŔdŕĺŘŞ‘ +"µâź- +ÚgRĐ&_•‚ňC(XW‚ÉŔdŕµXWH:ă‹RCUwSR (Đ+)Hűä= +ÚuČĂ)G”AAÝŁ žQĐ®¦ |% +Úő +śąČ@ţ0ő"z©L&ŻEŔş +ŕËšMZ†ŕ…Ô(WzˇÚĚĐ•Ün†äQfh‚Ź›ˇ=ôFä~ł*g 4c ő=äv¬Pyb;0Ľ«:Pë› +6]rGŕ¤oz!˝ ‚űĽž3 —żŕ…Úµ^ha y!˝™úů^H˝P=óBí/â ůŃnhPĐo/“ÉŔË1°U zB"p®§Q _†‚Ĺ M +ľ!h &“—c`] pşTŞRd›‚ö™´›(Čß‚‚ö(Ȼ蠠<‚ô…*Ád`2đj lUMŤmĄL +ľĺÇQp ňś:0 Ľ«*PÉF.J@ “ś1ďa l07¨ý‚vĺá¤k!¨{¤Ż Ü A= ő;((Ď«“ÉŔË1°U Z† HAjęŻPűÄ`bđe0X—‚ Á„ŕĹ X×Ad»ţ-ř:Á 9jč tşáŇÍ!Č=‡@/A ďČĂ h‚xA´=â€@íję€ A? A9@v!h‚zA;@/3˘S NA>Ł :ůĂÔ‹čĄR0 Ľ[• J®  ľ…·eô6C¤űlůˇvj‡nŁŕ;$ʞC»|Ü-śŰ!˝ŃÉ!ýj7´@PÎ h—!věP}bO0Ľë:¨«ňK*"Fánąˇv÷ąˇöAç†ÝĐ!‹z+7tÁ nhź‚Ĺ •{ÜĐ5 |Ü ÝQ&“€×"`« +”‚–V*˛§l1żíË3PĎ@ů ÔZż‚ňÔ20Ľ«: ™BJ"g–ň@Ę•ÔîȤŕoRWČŐčϢŕ“ÉŔ‹3°U ¤ r_©‡- +ôO +ô/١=‡@/A ‚v+í˝‚úůvH!¨g´ô2!žPĎ(¨O­“ÉŔk1°® Ů„Ęç–3âWۡ-âŁ!ř× •‡»ˇt7éĂnčÇCpn‡ňŚB0Ľ[u 3ß’ACBŁłEAűL +Ú¤ŕ9äC +ʡ`]&“×b`U 260‘`ż˝ÉC(ĐO¤@î @®¤@ž@Aą—‚ćcäCŽíĐA9 ­ďQ FÁEĘóęŔ$`đblVLK$•’zĺA ´Sęüе zˇzÄ€>Í - ¬­ úÍVha ~O6ŞŔ$`đB¬«€PÁýWîő-ôSŇzČ@ßwBiź<Đs®tBr%靼Ă@ Ä#ʶzWOŽW:!Y1pä„âµäľKÁő^¨ +ę @ÎĽP5 +t‚l„xęäGcĐţÄ ÄťR01Ľ ›ő@!+‚+UrÂ%OŻA/€pä‰ÚŽ'Z@Č·z"]@Ct:@p×jzÁĄS˘“cuéb‚ćŘé4š)=ĹR·ń\Ą€2Î^ëi˛™±7Ű-ęݗ±ł=đDg´3 ň!瞨¬0X<Ń‚A˝Śž`° A3Ş[" ă›–5':˙}łďźź˙i_ßäHoÄ~sSH;zśĘ7şŰjŤPCˇĆÉNŢđfg¨:óXÚš]&p9Ş q.ŮŽ Ő˝C4ôßłď˘ř\ŘR,ľ•*&N„šl)ë%]Ťů@úš8 AĽ-âýš ńÁÝS@vŁbŮŻŢ'R«AFžÎk“ ´APa˙9™1ë¤- BLö®tę1!Ľüg廬řHő˙ě—In#KD÷u +ť€pŹń< ôŞđ7} ÍĚ&'‘R©JŇĎ•T2Ó‡gć*‡¶VŞ$祾íRFଇú*ŞIwЦ®ąE_˛ě"Ň})šOőiżD“S[ęóĄ>—Çj‘nf‘ÂJńŁĚŮ„vÔß䣜ť+Ň›łÔ_G4ř hĄŽ¶@´ĄżŇ‹2h'ůa„˛ÔT`^ňk?ÚGńhÝA”B~ě_™ł-ýixAˇ"tŢÂbzűÚFXGâúkLŚćSö¬F Ë·ęˇyjżÜÜTšĘPR¨Ď) ŞŹŮOŮčHş %ź1G?˘FĆöqTů*ja‰čcłšĐbC)Khµ…TçąTÇç:ęvˇîBÝ…úŮ„zq¦Mbô–ŁĂśHµŹx2lj&/ä/Y†Żn•1ţG8ä>%ŚÂL¸’ʲť…ŁÓŞÁÄłJ—ŚrĆEU­Íşnś-#%ůŔçCoî0CUMőUú/9Ľžg€ÁzŇÇáyH[ž Ę7Q +Ex&«™e‘ ‰ę¦ÇÂŞG‡Ńŕ!§ 9WÓŻđâćłHeHVî]!˙É/śR ąd.ÁK3}đ2Lt;Ĩá˝j4˛é)7M^­óĄ¸´6‘A•ŕm4îyŇ ÁÇđŘÖ: äć(S„v–€}Ę«dĹ +şU! ÖyEóĹsźń1Šę±BÚ”„jř„Ä:ë V:PwLˇü/kż"Hlzם-|صAM|ÂŁ&züÍáÁb5Ů d +5ăô§{Áď:gŤÍ`>Íeőô +Ô±˛‘NÓP˘ŻJň±đčáĹËčJMfČĂz-Ć«LĘ5]ŕôb m’8Ć©5ÍzaÜMĂŇÂ@aά˝’NcÜň×;R;RďDębN9ĎkaÎą_x˛^Ş\B•*ŰRĺź†Şľ¨*Şü÷P•ňU®Ž'k}’+;ĺŞ=ÍŐ<çjlą[®ěś«ąĺ*X‚s +–ÖŔL·Â‡YžI—ÄS~H-ĆĄóI؇ŽŃAlP,ÁSĚăá±J˘{ŠÍ‹NS5 ő˛‰˝ö0jëü­Ú‘}dVîXďX¬ŻÍëŇŤ`Ł“Yß4ĺ&Ŕţ×o5íaĐľż řőř-T×»To .gP·gőŽôŽô—FúbNW<…rŃüŢ®ö:ÓźÇ~\ßŐ>Ö~©~Ö~ܡ:ÓĽŰ€|B®?ÜWďXďX¬/ç5ŇěaÉ˙‚)°_áşßŕú¬ŹÄ6X燝8żë@ęPŹŰPo™F ż€±ůŐĺĎřęé鯎ôĹśnü-ôÔ™Tű Ş?Ţ<µżŠő]˛ÁúÜ~<Žő;íGůdX?b?˘:ßĹú!W˝C˝Cýőˇľ6«KŞuዯa]namw¶ĹńG°®w±.W—ĹŁń Öö*Ö¶Yo]o‚mwÁÎo&űµmqlɶs˛ç–ěz—ěŔV'Ű®ĎwĹyŤëńĚ®x9¬wŞwŞż:ŐÓş#ăŢQÓ‰BşmBę)×ů7.Ś ěń>’7d÷'l=Ľ2žÚr¶2ÖŤ iŰ;µ!mµÝúbalĎ™»gBÍĂ.DŤzteôZ˙»c˝cýý°ľś×łÁöCj8Doűk`ß3"xkĽöu'ň:Řw×ĆĺDŽh÷3´ë“hç÷ˇýŮlČëXźű{[ă›ÜőNőNő7 úbZdX­ő÷‚´ż`Cʆës¬m‹u˙6.d\B}ÜO™Fq!G¨t!ţ\H?Ĺú3yëęęŻőµY팖X·_ÝĆşśb}•ężiA6T·'¨ÎżÉ”Ť©os G®Ădúw{7‘}Ë\Űź0!ĺYëëëď€őĹĽžĺPŞ·{ČÉNwFü|௟ü«BÖDYĆŮk‡ib¬‚Ä„™°é\C_yMa2ë€VÍŞ®‰p"-\q[˛ő +ČŐB™kmńXFfŤRhZÂőg µ7ŕ›B;…„Lp6F}h&#ýI¦ĘJQÎĆˎ¡í„Ě$< +´óbRĺ?@Ş@ň"B“ż"qhšîaE?Śr…Nń Ś +h2ZÎp;Lh¸˝@téV`Ť4­ęt5ŘđţÜŁďVň”×@‹ _çŞčŘđ¨S®ÂÚˇ… ™öFšQچSČ*:8{0á•¶J-1ŠŢćÉÔKČŽß’B ^ţ÷ź6Ěŕ‡-—ĚŚMA[žŃLč„Éz2Uę)ě[C÷P®Ć‘Ř5@ š[ˇŇ +Ő÷ŞQ1,*˘o`C© $‹ÚŐ¨˘ž$* ­„7HÂEVÎzĄćtFâÄaß 'cpcĘřöą˘sS `„4Găs`Ý.e.Ő|ľýĎ;§hËúŰIÂDźM\P¨ jKR§1ŢÝŇ’•ą¨©ČJĘT„ uăŞd iA}Q:YąşlT‚c ˙k¸ _˛7ş露ôP‡ž‡ŞŚŻ|˛äeÎx˝/ #őç3šÉ¸Gę&ń=Χ)Ś0 «ŮaxC +$3M4\…M®…Vš1šÎLDźAIť1dŚ [Ş?€ŤQ˙“Ůx(4ë@Ŕ‹ żŕéVőŃČqC˝Őoá€aç8ĐĐ}$ ŐUeTj»$;§RřĆĚP^Ä…c#qiĘ<ŮyŹs•-ç ČÄŠăŔů?űĺ’ÜĆrŃąVˇ Q˙Ď:ĽG8<÷?už¬¦Ô ¤GQx6& +Ń@WÝ:73oÖ·”˙?=XčÂŁŽŞ¸ľ®o±–A;ÓŹĆBżŽ˛)±hşáĽ‚Š„ĆŇzQ_K~>Í©%ŤódIc´ +ŁB›BŃĐbjDpŞęx?3Cq)(Ôjm]ÚB …Dq^Ř„hiţT2‚ Żĺjrq=ş«eÚ:U›öűTî,mÂR‰aMĐA~ČPDiÎĄGz©’lŇă@ö]z`¤b]ÇĄéâ]x^ŚŽ%ę#ńLíŠ B‘C7žýzšAň ›Ą3@bIK=Ş‹#Ő 7Íb×.:µĐ§nĚĚ{3¶Z­):˘µ¤Ą7›VP Ű“Ý?+ÁĐŤ"ôcIĆRl¤ŰËé‚„A“Î3‹ľla.´™"_×ŰŇ"x‘–[ĐëčÜ\1%Z@Š +ő˛T•öyË4Ä;ä3Ń—ÄRő ÚęŔŃoi®zíeI+‚ě°÷Ňí–ÚůJ°OĽQROÁ{ß2i6Ű*ôş9áŘéFţŻżEk’·Rí]ŁŁÜ„µÎ2Ň ”@$×eN•¶ÂôŽ˙ÄěZ 3şöŻZw¤”Űş—ĐâŰÚě‡â5÷Ďjűjź‡SBR—čë1ęKqa€+mY/)4_hě-oé€IečĘ€€ÇF«Źt†đjÇ©ôv\UK•˘+i ő©¬ň–%úŁ ^ÝľA»ÔZ[Xv›@÷EGÁ^…“3-8—ĺ$k lćó6š?hşä… $9›ÇúFý‡ŕ§“µ Ť]Ow…v,h{ZGˇsőŠŘˇEô4 7±Ó´1 +­grÚ‰ü”şžR+xôjnŕ•{ďŠ6)4Xž‡7XH˝©ŃÚa’?ŞS ŃÔí/¤ŹîLjiV›M[Fr“á`ş^=×řĎ/Ů~łÉË«,ŔĚsMŠ`î纎É*»w¦ź›«QűĘ×eĺ ćĎŠ’„ÔÇď‰13ńŽšç6LËiß' DČD%­hü)뫾k†ÁńµŘ(§ď›Ń§9Ě •éůďÖöd7ě9­H »h+ężµ$O búd¦´‡‹ÚŮ×TáP gśJH˘] Ô9XíáŃ[(ÍôŽFäĚĄÄŐ‘Šë§©ęJ&ú/"(dj˘°yył¨Dâ×_^J#727µ­× ÄÉÜÚ&]G"´®»Ţ[7[LnŤ®ý~cY˛ÇčîŢV˝ +Ń+f5 ˙!Ő>yÉV9ă°§P]—SJ]ąI]¤u: nłŕÎLWđŻ4ŁüчFŰB&˙KóźĽŰ­”#IŁX(„Tů}ß<ޠד nň˙Q–˝ŃG%–uľČĆ|:H§SJő¸;»}ŔŹ5CŤjč4hżÝPc’să׹¦ĄÓż2ŇŃ7ĎxMv°»s/Ĺ™Ko±ŚĘÓH÷E@ăĎh‡f)ťťlpT˛Äwë´î×č<ŚČŁ©j€ańD“ÓItwĘş‚KŁ6QĹ©V—jg©[Ç ÷â“Čßks©"Ń‚ĽÁpÔ¨¶4đ "Łď©=8uŚĺížČ–üĎgclîŢʦżĐáĺ§u«03WŠ$@IdńW’Arš÷FěVjeuB˛ĄĎĽÂ?áéU9Ůß‹tQîy`•…ŮNµ ŇÂÝm$2¬Ăîd@ŔÄŇ_­niÍ\Â5şţěBhNďÉŁçšĺ¬ęM[ŁÎÚVoVŠe9`Ręž ˇ0ú/}ÚťŃK5}"ŕ¨Wë65Bhu®[BWŕRXëÉBł«”\˘ç»Iŕg?Xˇ +¤Â+mŚväy‘w +`F e×bĆĽrŁadĵ»ČÜҦ‡\Ş+h9.…¦Ń´&‘Ú¸&ź†báî +|ÓăZ™°•™TĄÔ+ăr?tp/’NŐ7ÉČvFť·1ů„Fß:LJĄŘö9ť}ř]Áb”&quLőDQÖ„«Gµź—eSÚ;™J«—ó §Ďaa`,iřwÚ€¤XwV$LĂîZÔ$‚CÇť9zoYŃI`…EĽI^śŚ8ďJJ’J <úZÉ€;1?Í_XmŹđ<“uĄX Óô&&G"Ő%rää=k]vXšĚñm¬XȬ”\ĘňjÔĂć"V3WÉŁó‚ÓĽ2DݏdbcŮĐd]mâ%uzÜáĆNŰ´ę6śÎuĂL„õ֢oj¦uű­óľâٶé 2ű5µĚ~ÁĚĎĺ`¶´d(+ý"CníęąI˛OŠ.ľ(ÚŚ…`´:ŇýZŚŮĐe†şÍD(Nâ 7ĚU¨mLp~KQőĹęd¸-î!2ŻJŞŢNF˛TÍZ »ž_cе:¬HN€AŔĐ{Ź,MÚZÄÍéöYęš_ÖCŚC¦©Ż: 4uěľčü|SQ*TĄ‚” żAú†©"˘Ř>Ő–8¤Üť¤)Ő!D±űa‘±Ë×2Wc·IYĹ-Ö5©“Ľ\ ČĐĹ„M)h%e¸j©™üL@Ö˘ë"epzĹŠEM˝óí‹Um©“—’ýŽ–ťŠö=VĂjB‘5k‰ç›Ě ťžDYÎśâŇÎffó +ác%ŘZ:Ő;*%ůI&6E_‚ŤőĐ=¬5ö.aŠ^Ą•öJµ¸—â)ťćÉťÓgŰ4,ZňŢ•/|“Óc`c 3ů» lră8LńRßî6ľĽTwc&Ľ4Ź»ěĽ­ĐUË’§Čgá‹ö%‰XćzT1«}ÇčŰM_Ú_§ŇůĺyäËí_vXBňĺ˝-Ź[®{[.{[›-ç+¶śÎląěmąŘryłe?Ég;WÇ®\ö®ç‰-§űmůĚ•ó‘+wQĄ:±e­wľ|iËcłĺ6wľśďőĺväËůĚ—ë‡ů˛"]uĺ¶ąň2ĺfSŽ—¦üDő‰ęßŐůǬ2»ń1°–ßĹęů´SŢ›v~…Őú٬Ö[¨ŢvNX˝{ÜůdVŰoŐ'©OR‘ÔsUmÁ×`ŘtđJ.~DV·0ĎXŤî€5źÂšî†µ_g5ť˛Úö¬¶ î#@ÚĂ:nÁšî‡5Ě­ý”ÖĽ§5~†®>Y}˛ú¸¬)kJ:HjúfăÖúË´öë´ć˙çŮŞýŇluu¶z‡Ő~ÂjżOWź¤>I}DR/T5ępłę8]eŮŇ_Éy~rřtX?4ü,«ă:«é“YÍď˛Z?:­>I}’ú ¤©jXŤ}ö»€ţ˝€•»}Łu\Oĺj +čę×|Š«@ßóÚź1ŕ Řrlű°°€Ő_?.˛>}űŘŔ^h¬’›n,Mm,ʤďÉGČ~N řź™ł~-|$ŻýwĎYž]ź¬>Y}XVŹ”U’śLk­˝}­őăF­ř łÖ8ŔµÝ?kĄSZŰŽÖvcÖŠW‡­qŠk;Á5ăZOp-Ć5ĚŻýĆ´÷Ľö«Ľö;y-WµőIë“ÖGĄőB]UĄ‘&F˘;žŚ'ż8j]áµ_ç5ßć5˙µ,p{ĐúóaŕĎZýlĐ:âőŹZ˙zâúÄőď둾*謺¸,”~!Ü‘~: Ňú8a ĚwÓŔ®[h" Ôß—ŇA8µöa ß=j]jëŐ'Ş‰ę…®UaŞJ9Î×Úu’ZÇ.”´ŽËŔĺľęŃ:®ă óÚöA .^űĆk9źłúâ5źşmáZ®ń, ÔŁ$ĐŹ­{`Ó Żůţ Ďx-ד@= uźâ>”“ Đw9 ěs@ż‘úIg9 -ZۢµîrŔ˘đGč÷&voű(nŞëŘ'°Ź ě‘Ɔ1‡‘ÍQ>}5ÜF6}'věřz9jµ‰ŕŘqěĽěq XĽ¶^!ňś×”ůë7 ě¶ůŢ hőĺó<#ěúúl漠lŐ?UJĺÓZڍ‡ę‘ťjz¸zĹľVŕu‡s­ř)ŰŻ†Ľj čdćř˙Ë~Ą7˛ę@řý®âl ů€=Ýý?źŞ’3Ç·wâÉÄßđ2cś6 Ň/©*Őc¨oµÄ%ę哨Ű;ÔŰǨ‡”čg¨[şg@;q´ß×Î ç§Ĺů˘?·dŃ@0Ą-—?tÇVMą›ăŐôąŕ‡ŽÜ‰¦&%ëQ•s ÁÔőüéĂűő¬× $:É€ďFÓ‚giĂ@çTń5\UîJjAzjČ“ Ĺñš˛;xv*ŮX;ih°zŘ<ŁěP'ĐX¸˛(•B ňDS‹n 7®‚´śC¤žá™ DšµŰ´ęT0¸Í|4MJË,ţĘ`Cü«Ęf€}[;Şw±Bőŕ´'ť”6©<Ä^ďĽoe¶i Ę•j1ÍQÂIHlëZŕ_XŔry)ě"$Ô—†ű°ďLýŐpđ»Ëâ†_ÜTĹyMôűk˘î·řU«"ţňŠŘ›Ťś˛&|râ^« ;TýpM@/Xd˘@J,(-:äĆPµH; c®Ą÷ÍY%ÂřNđ–ąpć;'$„ +“ •Ěy†,QőČű@ű…[Á%ŘcíŕgL6U–kkQᬰ˛t¬:ŮMŘ­0e“ĄÂתtU€$­H2ď>ńâ"$‰›ŁxŠ«`¨jŔÂE4+ĹX娳Ş8á—EÂf¤ÂTČŐÔYÇ©vf H‰?ÖNć˘QČaÓqň˛ĐN^е 0pLŹĘ!sąľU^‡V…'X9¨çüJuDéÇú`¤ŢD Ą)ĺ+řĂMá¬ÁdšQ;YËâQ:QG`ę ÄzŚŔ:Żś|Ó.¬şYułę掺ą8> ŰQ¸ż*‡żctńR9­ŇTÖb¶2~ŤáÔYKYŹ‘x¤¬Ćyq + ¦Ę-lâ.aă2’4âdŻ(„)ńĹRˇo|…H(x€EYš—ĎČ^D‰#÷xľ´EµŇXŚ…JBe2kä$…lx* SD±Š[äg€6”ÄÄuN„ǤKśe7…FaÖr-ćŕÉ©ŻB˛ő! +ˇÂFŢŤŻ¶€ńIFľ™XmHÓ8âŚď߇NdąÂĹw‘&Ć «Ry?üÍTý„kc X&Aě?hTěSXęŮQs8‚´›;›ž75´ÜIͰ JŔóţč$Ă>)ócRşuo 9Ä%ŰIîŕ^h#b 2˘ňsăg/5žňJM8d$>·ŞźŚQäGÝľ˘c€ťj”ňĎĐ‘µ˙@ŹóŰ Wŕ«Ô +.9Á/ń—ýAÄčßpĎĆAZ†poQŚN(‹Ś˘Bb f6eˇvpŘ%Łâú9)ňną˙§mr]ÔD(Ď U1Ôqq̲‚8đ€âÂ_©Ć¨t2÷É4ťŤŃ?KáśŢÉhşTĄŽ')^\Ww #UÔ°žUI,ţ&Ąúˇ<ŕŠĹŠłŞAqŤ—•$]€}ç°řŻĘKâYśŠŤHť‚1— c¨ů-ĄÍúÎ# +čŃbÖ +[ËgŚ˘5†yt^ßIy:€#ľZá7f«6T).!¤Đ*Kl°ßF E BÄÓ*8ůą‘hOÉÝn__± +âď.ËżrÁ óśGo%ACÁ±FŃč1m‡„–;‰iĎ×%Ř’LőĂ÷µ,3cI^C!*3dNçdEz]5•łTJBąÂ,ćHÎŞ‰¸ +¸,­KÉg]5ą„HVÎ0đk°XX*f„łw¨ +Eś"Ý2s›5… ×é: nmă[ CŰŠńZ¤ ą­üL—‰Ď2Ą"N3 ç«Ř ËÎak,&Ĺ˝ú2–G ;q5üµňÚđwZ5 GpW~•–”Öʬü@°ęL#_â‚p}Őza o™UĆÔFQµ‚vAez9É0e\B.ŐÄ8ăňž¸ÇČqŘBY3qآ[«Ę¦äg+x’"WĄĚf†L–(g‹™jWä»&®¨ç\ÂkP-Q©§IˇçtţÎ4á3˙Aöů˘vQűó©Ýë¶­ăÖń;C‡˙O€„2kzSspcBg8_Ť“®0P ;OđBËĂ™Q1s0úM竝ŕ^ńB˘`µ°hál +hŕŞÇ¬š=mśÉŘóű 0ʰóíP ;ůŐ:Ăś„JžŠî”U"çç2?¤¸Ĺś¦ŔˇĚćş—}÷_öË&»mÂű9…/? ĆĎyć˝Yĺţë©*PŽ(Q)Ű“ŘMŘü»żjT—„·zĄŮîÂë×đÖ5ĽíÜ4äŻ=†7xÓxí(Ľe oĽţđ– xý‚Ý´b×»u°ëĹn|ÝtÝľÝrŔ2Đ­+tłĐÍB7Ţ»“ÜIî× ÷zęâľ.<`cŰdw/»i˛ű{§î$w’ű5Č˝šş¬mÂ'8ľ!p÷Oµú ¨Ą»iPs±+ Ĺ<Ó|Ó|gLKÜümcší‰ie°[ŢÓlĹn»ÇSÚ?“ŰÉíävkâöhä¶×ęčĂGîâîŁŰ> ÝaÚD÷=čnŮ…ŹąÜ î÷zćbÇ9jXż'Ń-çč®Úş[ ÍŹ'´ý~ˇ¬Ů-;Ů}Đö°{?ˇ­ŃýÚ%ą«„öąŹZş™Đ|#ˇ]ÝIî$÷k»5u[ě 좨ŢÇŘ­kvŰ»&víwł[ÖěćÉîAvűďf÷zęNr'ą_Ü«©Ëľ:>Č=żödOł[ĎŮm׎áŤÝ­–??¦ťĐő›č¦ť1-tÓ Ý<Đ-OÇ´şÓ|Ĺ®ße7i¶‚·í‰i–! ŢĽŔ›vĹ4żŚiv3¦ĺëöĎw‚űÁÝšą•g*Ń-\®Ńµstý]ŇüÜ/l§´v!oą»çěvF#i”ä:A2´8˘°K$'&şa,;öŮ^Ď%­8\›>Žřeb¦Łľ‰ś$tWř“űń]«ţj˝*źY!|§‹Čç ě‚FÇÜ·ĐȱɴÍó Öö[…ĽmlË*¤m«Pî[…Z"kě9?ńÍ'`üĺ~s˛“ĚIćBćőÔÔą‹!]QŻb—l>:đßجçl¶s6ÓŠMě§˝âfü?ľ.°°ČA)…µ×… G'ZŘ^~đTA“žĎă ¦¨— čD{ĺ–ł8uüµŽóĂPĘņ· •ä«ŕ:8ń&.tŕ—^Ć•a +” wşRg~ ş/2©I×Ć.ęč°ŇAN˘ÇЇ>|‚ą:UČyÇ(m«b9ăĽDs‹ÜAu Ľ÷‚I9Ť/Ś›‰U2p.`Î ąCV9ČôcŁ!ëq=ŇŇSV(µ& xćDNiŃH§D$Šłěúťr +˝ ‰tý®Qľ·[f*d*d*ä\!W§6“xˇo„ąŻ4BŰ„qiÄŞr'ŰŹ§ Ü™ÂrŽ{S‰"8âł,SúČXÉűâh2p¶Vá;Á*ĚŃ FÉ×Ń <’ąMN‰Eä!۸…Hůc´)"!ţGąČ(áTmĹ˝drŘ)Ł›ŇŐ]'¶±Ět<î!ô0k•‡Z¸p[ "`r`ń~ęšOü ŢŽ"Ué!¶±ĚĂI- ęm‘ż0×Öř®bzű˘ÚÇŐčú°9´Ş¬ĄA×S“&Xs+‹¸ +ŤNěĂ‹v®= ú!÷®E3ŁĎ*šdt¨@·S+Ť,r1Ŕ†­e~^G˘-AtV–mׂĆFŰîüŁáÚŤďĹ‚¶ŹÂ(b2p"Fl˙Ąţ0ť8~că1ë˘H«ŤGľ ńP~7&ű¤vRű¨˝ž¶¨OrŮţsnKś¬ń)Üż\ÔşÎ3\—…iâ_ŇČ´µ’Ň’Ňđ żEz¤ÎÂǑߜ§ ÷=ş§“É|ô6€FF¸®ĆóăDs[¸°¤Ŕ[•Pń +|7Ić‰n8Nn‹:•Ř” ŚŚ®@”‘c”Z Ăe,„/в™Ö”ç¸lŚcĐőaŘ>꤫‹ ăi¨ó¸°ŹĆL¨Ý©qf€ž Űi/YH{5m=gy—Š›ôÄË— č(Ó¬`‘ę¸;>@úiĂ×ńH×Ë-›C%PmMÖ®ŔĽ`çi¨«}~8xF;éaČ ¶A­.äz‰˝IżF[Ş>ú,¤µt*±.6ö´ęK6GµĐÍ1ţPhד…C…†ű (t ü3ďéăBk&÷›ŠpmŹä‰öDű› }9·˝Ć +?^hĘpůź ·aŰžb»m˛mż…íĽÉvÜɶ]˛ÝŰqaŰŢÁv>Ŕvl§ ¶Űç˛ýírgjO°'Řßěë™Í·át"Ú1Ř´Ë +íx†6˙ŕDvÚçG˛ĐN'´˝Ż É +í8Đîohç»~$ň#őÚľFŰ´ýmßô#}A»]ú‘5ŮiÓŽŘ;’n ľVh· ?bď·#»Áö+°ë ězö3÷úě‰őÄú[`}5Żne$Ił| @>űdE‘mČn;ÉţÔyEöýŮ.˝Č˛Żňc|Ů•÷}(@Ţđ"aEę3VäîÄž`O°żŘ[3۶B´î|L¶ż#=Ţ${G|l;ăă6Ů˙m|lŰdŚŹďDűn|ĽAv;Nö@»öŰíóc~jhO˛'Ůßě«©]ž…´ÎB>!?î´†;­ŕî;ánźaHüÜ'C’7á¶cp?"ďÂť’z7D~#Ů`{;F®ŕ.÷ĆöD{˘ý]Đޚ۝o%Ü”ţgÉ“+yOŚ—¦ä_öË/Çm âď{Šą@d“l’çů€}ĘîËŢŘŞ˘ňşŤŚ›Ąöőő+`˝č×sĎ»c{ęN°ăśěx†vąětAvşAvż$;ßt‘ĎU#v m_E»ĎѶ]hß+F¶ m;Čľ"F6k‘%Ůu•ěÍZäfË>Č>Č~˛×şv"ydű·;Č5ňü˛ŻČ‘ŻdZuźrd“ĽWŹÜtĎ“#ßĺ oÚŘŘ/ö˘gă¸0NńÍNć›ôHůelŰŚíöŰö[ŘÎŰOa;Ż˛í·šöAöAö‹˝Öµ+6M´Á*í4‘syf!Oh›‡üD;ßD;^ +’ŮqNvÝGöÂB–›z䏳‘˝â!ýlżć!kź“=3‘7:®QÝ/˝cľé7R}Í;–9Ő¶Ń;NT÷ąwüT"›Ľă˝Rdw´P篅ČNçXo8Çu!˛‚uľŇ®¨¨˙z¨/{5®]@ţĽHř^¶çhź‘}R!Ń.sr m»T!ĺ¦ +yÚWTČF´ŰsŃŢ(C6 ý çřÜ~îŻŮöúú ű űUČ^ëÚŔ:mă÷ţ(çhçα=ä?hJ3°ă>ăX_Ü8¶ÇŚŁ®Ű‰kżfkßăó‰ëxÝ9.;öAőAőßNő˘[·đ^ňçŽ<ËţN˛ÓŮéśěţŮ×”ČF´ŻŘÇŤh÷9Ú¶ í{Ýă´żŮ>^%űÂ>.Á^wŹŰűőÁőÁőKp˝ěŘŕŔ::fL~6Ř­cŢn`˙uÖńS‹l˛ŽĎ#O÷Ž+bä—ZÇŰ-űűű%Ŕ^ôlÇ ".*÷lÚe·Îж3´ëh—5´m†öÉ>Ú]hŰ/E»ý h§;ČľĂ?®ˇÝžŚv^EŰoőěěě×{­g—5ݦőßk ?ĐţNyŹ<‘]çdoôŹ'˛ďňŹĎ#kţńšń;Ĺo5µĎÉ^:Č˝rٱ¬¬˙z¬ý:W^ĺÍ+>ëńůţń!˛íśěöŮ×´ČN´Ű3ĐŽ<Ú÷ÚÇoB;ďďŘŘŘŻöZĎWžŻ=íŤţq ťćţń$Fâm5˛É?¦+hoôŹe޶}ᯠÝ/ĺČ&˙h—lŰśí´‘í5i;ĐÎh÷%Úőí/ěc˝a㪱=Mű ű űČ^tm>TŔ×ßoĘ­h×Úv†v˝mŰ‚¶ý´Żč‘űĐŽűĐľW¤ŻÉ~†y„mżÁöMűűű5Ŕ^ëŮ üA§ż7§‰s=ĎIąĂD~č‘ÉDžŕ^Ó##|í=Ăůb‰á8RŚăc­8’€¸g’Ŕ8b|‹iTF‚©E©—i:öŹUrD#]LÁŰbš‘ÝS)$DÇý,U9ů˝)@ż:‚Ą˝°Ŕ,“¨ąz~Q•cĄhXhp±ae‰Öüب^˝ ÇZ8těMlł28= °yRl¦h”zÓÖŰćfÓAcד"ćžÇď‘Q÷wCľąÖR_S~D7#,ć)›9ŘWŁűDÔţ¨ř˘ĽGŔŔ"Ë*9ÝíU“ńśAŔ!É^G±Gp-˘üNĺózLŁłęîVžßID}–ÝĎ«7_˝OŽ˘;Šî(şo-şĹ]‡ŻžŮ;°0ňłŻîFŮ%§\ ü¦Ń˘‰(a•ŕ0 j$ěbR‹ ńÄ€#¦Đ”Ĺ&+ŹĄ´'ŢqŃ[MR0 Áp‘Á©&ö>Cµˇşô좭›Ę°×Ť ńĹ‘Bđ6ěV\±RPČad*ë o|ŕ~]ݱ1"-&ŃXFűkÎĐA?Ŕa…ôa-c ?-cŃj.RÚT´ űŐZ&Ĺ÷Ń$ŹP©Ś}Ôwö§ZҶI *ZÓ!\z4źęB%2¬(DŰŻQBMĹźíh#˝X‰B‚µ)*©H”gîj8č€  EŤJ2ߥÓz’+ćß öĐ'~ťüFśń `ßđrŕ{ŕű7á»Ö/uďĆ#lŃ=e p҉H'iƵğŐ5(>nŞČí„*Đ™v Ză áÓX!äÁą9‡68O™Đ÷"u ʧř#Ç4—Y¤·BŇód5ŢD ő tzL䳎›_śÓĘ’óÖuZHg˘+¤!1*ŮC>ő*07ĺ1ç8an!tUM×-ŽSŤ"dT`Á'ĚąGý¦Á9bϡSz‘sěRu'ŇI0éa¬Ť +Ă~«(›[›8¨J&FŽŇHlZş*‰roqÂ’`Kňˇęš¨§ÂŔQů&r4Ĺ +ť/wvŠËÂď–¬L&€»Ě1§ĐáVMO”Kd”)}’YM]N”'Q­AžOŰž} ~ ţR/úxŔŻć"¸ëř‘sČ'IQ›¶@—ŔëÓeč±°ç0ŮaÁäűxĘ1©QFŔ*ň8ĘĐGIt˘’Ćc¤_ç+ä˛ Ađˇxüńcí®ß“y˝żOţ‹q+Z•ÔF*•fa"M +Gy’9xŢőË*Ł@:ZW5Ť EĐ ž:J˘V í´ŔdňčÂ1L8Cv’nS"YPĐy´ VfÁ W-›Čˇ «"s & ,~=]úŹ‚ 8IôD…ĂăÍčXL%™MD¤µ‘ĘŞŠfää3߀m©C^üdĽÔŞ“Űć˙#žB ŚgU9O(jľSÂű,›oE¤Ś3nd߯ÍÜ’Řr.×%""#OŮłµ‰ÄHZ%ÁÝzzUÁBŔŕ­c;ŘIĚy_řc?Ľáń©cN’MłÄvĘoűžŚ”KŇęŕcôŠń¶űF™îľž:bx'ýRŤÔŮf›©BŔ[ÝĚmL÷jŕ“ş«kÉ&~)a曜<ÔRé0ôîśL‘j–ˇW´¤KŁ1t łp…ľÂ›LŹi¶˙.ô^x‡Q–c/P…ꄇţŘ-={8łĆ ¤ŹŮCˇcŮúŘęt=˛I€ů/IpKO‰W>aB{$»RA ĐŤL¨E‚öđ¦”t$ď *8şżWz/”‘>žşxůÄ€)†u˘ŕFxÇw,žY´ë˛.ł†Pż!ŕN€ŽÍ@»qٵšçۢ±ľ-rÂĄj4ŠE“Ç2Wť—‰©Ĺ`0nÝv†EZ]}:±«ĹË_&UŔU‹§źUšškÄ +”"`Zď+Ú'…TÖ00öWÖţĚ49âB°LBÚÇK-•ŠŽ–Z¨™,mM «†K˙`<ţóŁLr÷…z1ŇńVű~WjĆT˛Ó{S• Ẳ)K¬ŻŘVđľ8¨pV|,MĚ:U¸ÂřégßÚWž÷ TÄF>ël“űŔÓPŃYor`É™Čôĺt‰! w/‘!ŹÔÄßT^ÁźŠŔš˘-±¸ęşGd]u*}{JO"ôĽśmŐÔ`BŹ-&ča.ÓL#$;± Xß[.zŞżŐ -‘ŻÓşíđ)>„ö’ž–zJ?-X-·ź–[›Ě*Ňń/ˇ )m»łk8őŘűÎkďI¨÷ݡ¸4Ž Ĺv `Śô)ŃÇĤ@Őę Ăś™8\ÚkáĽwÂăŹÍťŐ>6Ň Cp‰ŚÉmÝ1ÁL'fĹB“:OŚ.Ž0͵¤ŘĐ<˘dżĹ§ÇMČ{YŰdxđşéEI$ŁÝy'zđ—^ŁĹr€Ą28ŕ«u§wšď“ć)JČĄ÷¬:­Şúůt9]ÝĚZErs]ŁJ±äVłßFŔ v1ĆHăNé% wíst:áÉÁ¶Ăó¨Ĺ®Vřš`Ł%çGőŚ,UC÷jŚA¤–i`ůZ6_ń94Ďt–@l+g§„±¨Ť‹š˛äÁÉç*he¸ ;[ÂÔîů 9ŐüU9‡˛ë„}<#\Çv PsLfŰí÷f ´Á­'Gě¦M÷,­SíO ·,T-ö Ąžv q9Ď`|› (p“ŮňyôĺŠŕ٬U㲏ç¸NY¬ˇ/ˇď ¨oÖ`zž*©’F‡ĘýU©«/%8›!”J&Y Đ]r‘§+ş—=‹ K Ş«YĐDYzćqÔ,¸rέ”ëE§ěqřY\«gµu¸qy7 ++”aĺáyŕ:54Ř™»t ôß·Ž<¸«ó\=®âSpQz\ŕ1Ú~ÝHĺqŠ‹ĄúŰŞ{A¦ŞˇŞ]Uţ×I;ŤlŃŃ1ăyQE@ˇ¬;DhBťÁµ> ¸FvU(ÔP>d„ű óŐfÎ)˘÷Ô©śXČá‚äžŕ‘ŐČŃ=óFBć[ ŇaŠ˙yž°ëŰ 6ďzži1čg˛Çx±R׍Ůn¨ą•Ü9óä†Ć‹‚B†8¶' O‰0ťŮŻwđf?±©×ޱG!t›5ŠôňDĆňr’°ŕ€µ}Bi×ƢČϨ”`¦Ńl&Ä‘ó¦śFäK* d‰g–±Ń•_ňđµńü™'Éh€"áfŐk¨Ü DŕNĘÖ"ŮSÜĺĚ{0ˇ|©+22ĺ‡AÇäą4zä¦çLäJĄŰ™tZÍřmĺxÉ|AťŠë¤vF°_3ëžů(îÚ7˘ţý|ýű˘‘*Ä=0‹#lF>Ф¨ž1  +A& +©h(…vvjăť”ĄĹI塛3Řč#L`Y´gĄU”ôb!9~˘»ĄŻyŔiäiŕöb›$/­fě)ófŚdřÝÝ9+˘ďwUç©BsÜĆ·ć“f4I§:^I”‰…|C9v´UĆN6Ř"NE!ńČ ÄÖ˝F`ěäŤt`ZP îUîŐϦݧ˛ń+ůRŕŔM—Ť lĹJĎTSwqµ§z S“x HÇ7‘éęž¶Ç.bó¸F„™Śp— X'÷ŕ­Żm*ţ +Hţ)}ÍîIŇŚö“ä<(Rč·ăęŚÜÔ×™i“w“Ţýml#ĺÇŇlĄúÇKíq-Ś@ĄJuö_÷ }H)±fń|&9—ăÚ"¸L‡“hD‰4qôëçKťZě† +…‹łg–´mu6ŢŠ=®#ô€y€şYf"éŮI‘u7e$|ý]Şxú4®ˇ[–Y­˝ęő|’|uŤ{rĄő{6Ô vŔ?] šUŰvČÓ!OEĘČ~Ş%<ŰÓsÂ2«ę¸Ň.„ý)ŽŔÓáÁĐűjÝcÇG$ß Â¬+úöKfY"ň˝Ĺ™P*r–ĄPYŢ·ď‹ÚˇÝOĎšW’k™ŹłÝ㡖'1É •´Đů˘‹·Î<÷-5Ú™9Ěł†Š­íÔŰůPŃ5Xćl˘ëk€~ÇŇŘ`ŢOvě»hÝE—QŰoÍ©H®?ÂPs¬4b˙ ÓÎ]BŢÚ¬ż¬|Ý o')?”ú°e_ęwPɉˇ3’ĹßÜř+ťxŠĚNÓ…â Ĺs„şwxČä‘e‘5ŢżD¤s^+±:±f"*°˙–¸ż_˙ĽţzýńçďoýřO€Š©aĂ +endstream endobj 13 0 obj <>stream +8;Z\7;3L8g#eYcbgA@Mblb(nN6*V@`Aq"(*<,+0X"&00*3PXruDgSFZT6-p%Dd'YK +9'-&rql_k!PqUcpgC)2*\sK1oSd>VGA\SG>09F/ +bQ#T+.>Ac:Ul=qiA*+^I1f)O3(=G4(V%!dik +4r3)WnmLdL1:'iugi\j]'+UIe%6s^(,91<)\PapB*?9'9iOL(6i4P%(ij)EFYZPN= +)h'sb*%iIk34aV]i,H1[^A+5/0S\r>fhlZn8#?d"ClmjZLCcfb*9/Nk:@:$40l,Qt +[u5"siQTHf%"\5I?>G#Br]r9*337/0=#N:_ro)_P@<4d6*rC_X[4j>97Z[)F:Dmf0 +)_*d^Ab*?S86+\0-3YLKf<:3pm:cjD5pf2&m,gt1mA3T>C235 +A6=PM/X&sDMd[UV\"9]B%3[6MLp7L`p"c`P$1&(UcaGPKR+BO5ln# +LGi3b3cS5fn''TcZ[$^>e'k69rN#bDa2ShlTGiD_L)(H$IIih[(++:cOE[&-0tplY +`mclW_sKSP1k]L%c#dTRRl/'RpWXQ3q(`p-SH.uRjO7sAV0M?OVd^f,2j%Z7dmZsW +F2d'l=Yl^Kq+B;j2W$1Hs%t].Pd2cj<>=J"e-H[mWomc[V]P,k[p(saO\=4j;.aOStBBqH=N3,'G6;h&E32LqD1T& +rC*-J5+%+k"6<_KjpI.121J"c`/ri?tkDO +endstream endobj 14 0 obj [/Indexed/DeviceRGB 255 15 0 R] endobj 15 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> +endstream endobj 5 0 obj <> endobj 6 0 obj <> endobj 18 0 obj [/View/Design] endobj 19 0 obj <>>> endobj 16 0 obj [/View/Design] endobj 17 0 obj <>>> endobj 12 0 obj <> endobj 11 0 obj [/ICCBased 20 0 R] endobj 20 0 obj <>stream +H‰ś–yTSwÇoÉž•°Ăc [€°5la‘QIBHŘADED„Ş•2ÖmtFOEť.®c­Ö}ęŇő0ęč8´׎ť8GťNg¦Óďď÷9÷wďďÝß˝÷ťó 'ĄŞµŐ0 ŤÖ ĎJŚĹb¤  + 2y­.-;!ŕ’ĆK°ZÜ ü‹ž^i˝"LĘŔ0đ˙‰-×é @8(”µrś;q®Ş7čLöśyĄ•&†Qëńq¶4±jž˝ç|ć9ÚÄ +ŤVł)gťBŁ0ńiśWו8#©8wŐ©•ő8_Ĺ٥ʨQăüÜ«QĘj@é&»A)/ÇŮgş>'K‚óČtŐ;\ú” ÓĄ$ŐşF˝ZUnŔÜĺ(4TŚ%)ë«”0C&Ż”é¤ZŁ“iżóś8¦Úbx‘EˇÁÁBŃ;…úŻ›żP¦ŢÎÓ“ĚąžAü om?çW= +€xŻÍú·¶Ň-ŚŻŔňć[›Ëű0ńľľřÎ}ř¦y)7taľľőőő>jĄÜÇTĐ7úźż@ďĽĎÇtÜ›ň`qĘ2™±Ę€™ę&Ż®Ş6ę±ZťL®Ä„?â_řóyxg)Ë”zĄŹČçL­UáíÖ*ÔuµSk˙SeŘO4?׸¸cŻŻŘ°.ňň· ĺŇR´ ßŢô-•’2đ5ßáŢüÜĎ ú÷Sá>ÓŁV­š‹“dĺ`rŁľn~ĎôY &ŕ+`ś;ÂA4É ä€°ČA9Đ=¨- t°lĂ`;»Á~pŚŹÁ đGp| ®[`L‡`<Ż "A YA+äůCb(ЇRˇ,¨*T2B-Đ +¨ꇆˇĐnč÷ĐQčtş}MA ď —0Óal»Áľ°ŽSŕx ¬‚kŕ&¸^ÁŁđ>ř0|>_'á‡đ,ÂG!"F$H:R”!z¤éF‘Qd?r 9‹\A&‘GČ ”rQ ˘áhš‹ĘŃ´íE‡Ń]čaô4zťBgĐ×Á–ŕE#H ‹*B=ˇ‹0HŘIřp†pŤ0MxJ$ůD1„D, V›‰˝Ä­ÄÄăÄKÄ»ÄY‰dEň"EŇI2’ÔEÚBÚGúŚt™4MzN¦‘Čţär!YKî ’÷?%_&ß#ż˘°(®”0J:EAi¤ôQĆ(Ç()Ó”WT6U@Ť ćP+¨íÔ!ę~ęęmęŤćD ĄeŇÔ´ĺ´!ÚďhźÓ¦h/čş']B/˘éëčŇŹÓż˘?a0nŚhF!ĂŔXÇŘÍ8ĹřšńÜŚkćc&5Sµ™Ť6»löIaş2cK™MĚAć!ćEć#…ĺĆ’°d¬VÖë(ëk–Íe‹Řél »—˝‡}Ž}źCâ¸qâ9 +N'çÎ)Î].ÂućJ¸rî +î÷ wšGä xR^݇÷[ŢoĆśchžgŢ`>bţ‰ů$á»ńĄü*~˙ ˙:˙Ą…ťEŚ…ŇbŤĹ~‹ËĎ,m,Ł-•–Ý–,ŻYľ´Â¬â­*­6XŤ[ݱF­=­3­ë­·Yź±~dĂł ·‘ŰtŰ´ąi ŰzÚfŮ6Ű~`{ÁvÖÎŢ.ŃNg·Ĺî”Ý#{ľ}´}…ý€ý§ö¸‘j‡‡ĎţŠ™c1X6„ťĆfm“ŤŽ;'_9 śrť:ś8Ýq¦:‹ťËśśO:ϸ8¸¤ą´¸ěuąéJq»–»nv=ëúĚMŕ–ď¶ĘmÜíľŔR 4 ö +n»3ÜŁÜkÜGÝŻz=Ä•[=ľô„=<Ë=GTB(É/ŮSň,]6*›-•–ľW:#—Č7Ë*˘ŠĘeżň^YDYŮ}U„jŁęAyTů`ů#µD=¬ţ¶"©b{ĹłĘôĘ+¬ĘŻ: !kJ4GµmĄötµ}uCő%ť—®K7YVł©fFź˘ßY Ő.©=bŕá?SŚîƕƩşČş‘şçőyő‡Ř Ú† ŤžŤkď5%4ý¦m–7źlqlio™ZłlG+ÔZÚz˛Íą­łmzyâň]íÔöĘö?uřuôw|ż"űN»ÎĺťwW&®ÜŰeÖĄďş±*|ŐöŐčjőę‰5k¶¬yÝ­čţ˘ÇŻg°ç‡^yďkEk‡Öţ¸®lÝD_pß¶őÄőÚő×7DmŘŐĎîoęż»1măál {ŕűMśΠnßLÝlÜ<9”úO¤[ţ¸™$™™üšhšŐ›B›Żśś‰ś÷ťdťŇž@ž®źź‹źú i ŘˇGˇ¶˘&˘–ŁŁvŁć¤V¤ÇĄ8Ą©¦¦‹¦ý§n§ŕ¨R¨Ä©7©©ŞŞŹ««u«é¬\¬Đ­D­¸®-®ˇŻŻ‹°°u°ę±`±Ö˛K˛Âł8ł®´%´śµµŠ¶¶y¶đ·h·ŕ¸Y¸ŃąJąÂş;şµ».»§Ľ!Ľ›˝˝Źľ +ľ„ľ˙żzżőŔpŔěÁgÁăÂ_ÂŰĂXĂÔÄQÄÎĹKĹČĆFĆĂÇAÇżČ=ČĽÉ:ÉąĘ8Ę·Ë6˶Ě5̵Í5͵Î6ζĎ7ϸĐ9ĐşŃ<ŃľŇ?ŇÁÓDÓĆÔIÔËŐNŐŃÖUÖŘ×\×ŕŘdŘčŮlŮńÚvÚűŰ€ÜÜŠÝÝ–Ţޢß)߯ŕ6ŕ˝áDáĚâSâŰăcăëäsäüĺ„ć ć–çç©č2čĽéFéĐę[ęĺëpëűě†ííśî(î´ď@ďĚđXđĺńrń˙ňŚóó§ô4ôÂőPőŢömöű÷Šřř¨ů8ůÇúWúçűwüüý)ýşţKţÜ˙m˙˙ ÷„óű +endstream endobj 10 0 obj <> endobj 21 0 obj <> endobj 22 0 obj <>stream +%!PS-Adobe-3.0 +%%Creator: Adobe Illustrator(R) 17.0 +%%AI8_CreatorVersion: 22.1.0 +%%For: (Kierstin Jarvis) () +%%Title: (kube crew option 2.svg) +%%CreationDate: 10/12/2018 10:34 AM +%%Canvassize: 16383 +%%BoundingBox: -3075 -1075 743 -63 +%%HiResBoundingBox: -3074.05630587176 -1074.24127418005 742.276474769573 -63.3682861328125 +%%DocumentProcessColors: Cyan Magenta +%AI5_FileFormat 13.0 +%AI12_BuildNumber: 312 +%AI3_ColorUsage: Color +%AI7_ImageSettings: 0 +%%RGBProcessColor: 0.196078434586525 0.423529416322708 0.898039221763611 (R=50 G=108 B=229) +%%+ 0 0 0 ([Registration]) +%AI3_Cropmarks: 0 -800 800 0 +%AI3_TemplateBox: 400.5 -400.5 400.5 -400.5 +%AI3_TileBox: 103.359999656677 -786.639953613281 696.640014648438 -13.3599996566772 +%AI3_DocumentPreview: None +%AI5_ArtSize: 14400 14400 +%AI5_RulerUnits: 6 +%AI9_ColorModel: 1 +%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 +%AI5_TargetResolution: 800 +%AI5_NumLayers: 2 +%AI17_Begin_Content_if_version_gt:17 1 +%AI9_OpenToView: -939.342582870856 126.383230838457 0.6667 1800 971 18 0 0 1057 -1026 0 0 0 1 1 0 1 1 0 1 +%AI17_Alternate_Content +%AI9_OpenToView: -939.342582870856 126.383230838457 0.6667 1800 971 18 0 0 1057 -1026 0 0 0 1 1 0 1 1 0 1 +%AI17_End_Versioned_Content +%AI5_OpenViewLayers: 77 +%%PageOrigin:94 -796 +%AI7_GridSettings: 72 8 72 8 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142 +%AI9_Flatten: 1 +%AI12_CMSettings: 00.MS +%%EndComments + +endstream endobj 23 0 obj <>stream +%%BoundingBox: -3075 -1075 743 -63 +%%HiResBoundingBox: -3074.05630587176 -1074.24127418005 742.276474769573 -63.3682861328125 +%AI7_Thumbnail: 128 36 8 +%%BeginData: 4114 Hex Bytes +%0000330000660000990000CC0033000033330033660033990033CC0033FF +%0066000066330066660066990066CC0066FF009900009933009966009999 +%0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 +%00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 +%3333663333993333CC3333FF3366003366333366663366993366CC3366FF +%3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 +%33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 +%6600666600996600CC6600FF6633006633336633666633996633CC6633FF +%6666006666336666666666996666CC6666FF669900669933669966669999 +%6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 +%66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF +%9933009933339933669933999933CC9933FF996600996633996666996699 +%9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 +%99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF +%CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 +%CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 +%CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF +%CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC +%FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 +%FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 +%FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 +%000011111111220000002200000022222222440000004400000044444444 +%550000005500000055555555770000007700000077777777880000008800 +%000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB +%DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF +%00FF0000FFFFFF0000FF00FFFFFF00FFFFFF +%524C45FD72FFAF5B375BAFFD79FFA9853637305B3685A8FD76FF5B5B3637 +%0E0F0E5B365B5AAFFD71FFA985305B300F0E0F0E0E0E3730373085A9FD6F +%FF5B36370E0F0E150E850E150E0F0E5B375BAFFD6DFFA936370E0F0E0E08 +%0FA90F080F0E0E0E3730A9FFFFFF85A9FD68FF85370E0F36370E85A9FFA9 +%850E15360F0E3785FFFFA985848584FD66FF7F300F0E5B84A9A985A885A9 +%A984850E0E3085FFFFFF85FFFF8585FD65FF5A370E0F0EAFFF610EFF0E61 +%FFFF0E0F0E3737FFFFA9A9FFFFFF85A9FD63FFA95B0E0F0E31A985A9A9FF +%AFA985A9370E0E0E5BA9FFA9A9FD04FF85FD1AFFAF85AFFD46FFA936370E +%0F37FF0E85FF85FF850EFF360F0E3730A9FF84AFFD04FF84AFFD19FF857E +%8584FD45FF7E370E0E0861A9A9A9FF36FFA9A9A985080F0E315AFFA9AFFD +%04FFAF5BAFFD18FF85FFFF8585FD44FF85360F0E85A9FF8561FFFFFF6185 +%FFA9850E0F3085FF85FD05FF7EA9858584FD15FFAF85FFFFFF8584FD43FF +%30370E0F0E37A9850EFF5AFF0E85A90F0E0F0E3730FFA9FD05FFA9AFFFFF +%8585FD15FF85FD04FF85FD43FF8530370E0F0E37FFFF850F85FFFF5B0E0F +%0E375B85FF7EFD05FF84FD04FF85A8FD13FF84AFFD04FF84A9FD43FF5B30 +%310E0E0837FFFFA8FFFF5B080F0E0E305BAFFFA9FD05FFA9FD04FFA985FD +%13FFA9AFFD05FF85FD43FFA95B5B370E0F5BA9306137855B0F0E0F305BA9 +%FFFF7EFD05FF85FD05FF5A858585A9FD0FFF84FD05FFAF5B84FD43FF7E5B +%0E0F0E5B300E080F0E5B0E0F0E317EFFFFFF85FD04FFA9A9FD05FFA9FFFF +%A98585FD0DFFAFA9FD06FF85A97EFD3FFFA9FFA9370E370E0F0E0F0E0F0E +%0F0E0F0E0F0E3785FFA97EFD04FFAF7EFD05FF84FD04FF8584FD0CFFAF84 +%FD05FFA8A9FF857EFD3EFF370E370E317E373685365B0E5B365B5A5B360F +%0E310E37AF85FFFFFFA9A9FD05FFA9FD05FF8585A985FD09FFA9AFFD05FF +%AFA9FFFF85AFFD3DFFA90F0E0F0EFFA9AFA9FFAF5B8585A9FFAFFF0E0F0E +%0FA9FF8584FFFFAF84FD05FF85FD05FF7E85A9A97E85A9FD06FFA9A9FD05 +%FF7EFFFFFF84A9FD3DFFAF0E0F0E0F0E3730370E370E370E31300F0E0F0E +%0F0EAFFFFF8585FFFFA9FD05FFA9AFFD04FFA9A9FFFFFFA985AFFD05FFA9 +%AFFD04FFAF85FD04FF7FFD3DFF370F0E370EFD0C85610E370E0F30FFFFFF +%A97E855AFD05FF7EFD05FFA985FD04FFA85B7E857E857EA984FD04FF85A9 +%FD04FF85A8FD3BFFA9AFA9A9A8AFFD0DFFAFA8AFA9A9FD06FF85A9FD04FF +%A9A9FD05FF85FD05FF85FD04FFAF5B85FFFFFF85A9FD05FF85FD5BFF85A9 +%FFFFFFA8A9FD05FF85A9FD04FFA985FD05FF36857E85A8FD06FF85A9FD5A +%FFA985AFFFFFFF85FD05FF85FD05FFA985FD05FF8585FD09FF85FD5CFFA9 +%7F84FFFF85A8FD04FFA984FD05FF7EFD05FFA985FD08FF84A9FD5EFFAF85 +%855AA9FD05FF85FD05FFAF85FD05FF85A9FD07FF85FD61FFAFFF5AAFFD04 +%FF7EAFFD04FFAF85FD06FF5AA9FD05FF5BA8FD64FF5AAFFD04FF85FD05FF +%85AFFD06FF7FA9A9FF85855BFD66FF7E8584A9845BA9FD05FF5AFD07FF84 +%A984A97EA9FD67FFAFAF85AFA985AFFD04FFAFA9FD09FFAF85FD6DFFA985 +%84FFFFFFA95BA9FD07FFA95BA9FD6FFFA97E8585857F8585FD05FF7F85AF +%FD72FFA8FFA9FFFFA95A855A855A85AFFD58FFFF +%%EndData + +endstream endobj 24 0 obj <>stream +LČĘęëöŢĎ˝ÂÚ”‘ą;u¨7űĽi˘´âÖ¶b­Łt÷<Ń<Ź×'E:ŮÚÍ-=\:ýYçřŻľ/ňl}üĘ).ÉŠĚĚ 2˝‡˝ă_öŹ q11ť4s2»dĄx}!p—•]Ť·Ďe~ ¦.¤ýOČÉHbÁ)L›iÁŘâ¦*oYŮ!°\®»ofÚÉúFkç‹ňÚë/ľÜŤVW`G™^¶˝×\2çU‹Ă'™Ţ1Ĺw§Ěâť…ř¬,@űGÜĘźÜ1ŤX#ÓÜKÖö{VéžU¸·†B˙p6db$:Ŕ!Ńňv˛y«îá\î™{ ;ĎĆfx™r“(]_s-lĺ»sŃVŞ}íťBłĂ8ýp!ug±,r[ÉÚVe鸲ttoŰŘ…Ň´éËß5О¸šlď§ÚÇĄĄÇEĐ×ŔrĹĺçĄÁĂlc;–éÍXąĹô2hzĘ­ÝEü™őŮÖA}ăuműÓÔđ‰(íĚŔÄ0™°ŕµ’˝ÇńöY¬q„€^5šéxÖ.ţ@ßĹ [sCśćĽ‚|¨âĐÁD°˛ÝÂ* ň"(SŮ.|sôů˙¸ôä/d~YL´evŕJCL»Í\ßO“˝S& ĐŻŞĂ †ôv˛ËN~ĹÉm¦ŰŹłWĄ•Wv~ő„đŔŕÝťĎoSíłH }=Q?„Á’¬nÜ120ü»»oZ{_Y…Íąx&jÂgóuˇwd%jv¶—iě<ůłă7˙>ŃŢźM4gbŐds'Ů:šŤ6!Šëĺµ7Ő­/2˝Ç ńÎÇsŢ”•±R]fđ&—Ŕ¶ŃĆ©SŢŘËÔ6§­ś›ŔŘßxřUëŕ3Żqj¦1Ď’o$ŞF˘‰Áś)ĺ:GK'?ž};<ýÖĘ­čMY$§;ó‰)c:éöž•ęL‹ÜťŮŘH„m§{?ťtî.¤ˇ)RŤĂÎţgs‰öÇ‘Ô]†^ÍWgŇ“żoä>śN,ĆÚ©bŃkąŮ•X•™Ś!Ęú|¬éWY{‰•~4—tň«ÍÍ7ő­Ď˛˝óĹXřv"`ĄŁąá‚(ţôľ3ç6š/Žß~×Ůi—ˇ’:‡B,öB5ç:gťŻWĎ˙ÜȬŘů-˘2ż>mŢłň÷Ěś“]ęmżŮ¸řÍÖóżj};ĺ6î.ÂŽČEbh7#;ĄÍd÷¨´¸ň F Řç®QYÚŮ•\÷  ŽrŇ.AűÜ·r3ľĽŇµT€©Ş°Rč×VžBˇDŘÝ­Í·ąXu°\/®\8ő]·±WŢx˝ńňŻ«[źĎ~,¦,&Ťh5[ß//=ó*;ÉÎ)Ö‚ĂͶŰ€ó§měj łŞ®=ËtŹ1§°açÖłíăhy}!Ů[Ě,'Gýăo»‡?KuÎíü¬cŻ8Ě´¶«Ë'Ý7©ŢI{˙‹•‹_®<úMĽu +‘ Ni¬=ďě}éTĚěF¬ş…e”›4§DĘLâôOúÇżŘűw™áSj«ĚR˘şŻ®E«ĂňÚyş˙X•ež#Ů˝od±–·˘r˝Lg€-Ű{ź¨î%Ę;Ó˘<1źs*V˘7ë@÷µÁP©ÖaĽ˛¤ýá´÷ă;F˛D'ĎbĽIt“íăćÖëţţ©Ćî´HEĽbué¸6|ô“ű„?ĚŰi€śÜ–“[\„ě˝»ňJŰ˙ůţ#^»\?^L gd3Ű<• ńá”·ŕ5@Ff ęoVµď/ć?žŽÚ±f˘4TĹe+żíśÎłóâwÍÍ·éú>X)ŰŢ_=˙ô&ćhÉÖyvđş`JUA Nf©µú¨»ů¬»ó{;i7đä· ĺőńbr:Zµ +ëąĺőí·ą•ǰh¬7 őßĆÖá +ąql¶ńßw­ü”,.&۬_X}V\U^•¬ď–‡đÇ>ă’ŤĂTë¶y˛ľť¬A«.ĎĹŞ‰Ö~÷ŕł­ç~řĺH Ý%Ŕ‰i+“­®ĆŠĂŻ:- Đ5…áÓŇđy¶}zo!ţ ’ {Đ«Ă4Ő6"É6dZ~đ8Ó\ßgžCn9Z?€ů–ëťYů5X[‰öĂTë(VZŤ•—“µµŇęŁÎáŰĂO~·÷É_V¶ßšąŤůx/ZÎ9rňKni'ÝąŕÍžK˘´>ŘÎd«Đ=*3_÷®ěXHŐ˝âŇăLçú4V[_>ýŚ~ŐÂźiŐô*ű0NÍdß5ďÍG­d˝ľň°Ľü(7x,˛«ó^gÖqň]śň٬]r2âŕaş{ć”·㻋i9€źtisAUyÝO˛WĺďĽ-.=‚a;í–Ŕ¶K»oňÍýóÓylTľRŢü$łô"VÝťeNE§í2@`˛¶‰6˘ítë,ÝĹ6ËĹkŰŕGŘJSNfľ*mÔ6X| 8ëŐ—ŹżčľJ¶7ěŇŠ]€{ťî=˛3ťhq8í§d.Íô€ň«8%Ęł˛6c—íò8HÖ–7˙"»t@( ë$«łŞžéĹę{óqŔ¶Sżzg…•ç‰ĆÁBĽłŃJ5ÓÍ­\g#Y_Ř‹6W/ţmií f+łËsN1ŮÚ—ĹĺůD+’ęV.ö^|·ůřוĄ“DqÉMwď{G_9•0Ô|¬3'Ů:}]Y˝‘Ĺ9»lĆű Np«[ŰźŤ÷Ŕ,÷Ś´W\.őŹ"ÉV¬~¨ŞG©öĂő‡ßA¸…5™Nš…(`0PSv…ĺc©%Ż|čUŹÓí3ÉO8“V.VŮzż/*˘°ŃÜ˙¬˛÷ukďŔ’gâNGˇ>`|©ňĆBj`×öóý' {ݰáůń\ŠZ¦ß©l}Ý9ć \^i}Ţ«8ťW @ÝśŞÝ™O}4‡Ĺ %ŐÜgş`¬ÝÚxˇS2djâ#ـ٠ĺ{gąö!^­nÍ':ó©•{nçžÝtŠűí˝ŻękOcŤĹh˝´ňhűéoÎ>˙űĆć'8¦‰…̤_˛źiźL»őű˘«í=ţö>ţ­Ş«ß[ČĆ+»íÍ·ŕŮ˙úŹg~|×™Őµ×·ůâ·ąî ć Ť}VÖ§eeÚi*8e˛ź?űĺ˙ZZyoÎW§ús‰^$=´ +ŰNiĽc¦†ĹţI¬ş2ëd§pâ˛a'W3ÍóáńĎbíŞ\^:Ý{ţfnY–ÖEiu&ŮRlK¶OTyť·B';ne·{đ«ÁÉwĄŐWVz$íL}»<8Ít¦˘ť;vÓHŻĺşĎ›ßdşŹďůi§Ę˘Čť/ËëoÍâÚU}`˝ÜňśWűx>>17ťŇňËÚÖçńćŃ”[ţh>‰µđçăůÔ\´mÖ¶?Ű~ń7ĂGߥʧŁŘŔ¬ĘŻMZ剹Ě&«wŤô0żôěôËśüj6ŃUµÍĆćëęĆŰtçĚH÷îÉŇ=YŽW¶‹˝łĹ8…§™şĹŤÚÚËęú'‹™uúaRZ”V­ě`1Ý‹¤0d~UĺWh +Y…ĹD7ÍĆlţ€żNZXńńňVޱ#rUÝĘž4vż¬¬żšóZwć3÷"™YY™2łón1â–îÎĆîĚ%­d/×>ÉtNaýÝ[L‚6*3‚ůůtĽv´öě·ů•çÉĆ©WÚáž´vű›Ł…?vi7ŢyRŢřrpü›dű«ţ锪ôOŽ^˙…W^ąoţhŇ»'Ę©ÎC ĺďőfD¸Ř?…N6€ů(’5˛^ypř‹­gi$?ą#§­ČÉ­ně?śŚM:őůDOU±{ĎUaÄŮÜůěô‹žýY~ůĹ}»ő˙+ůl˙çžŔęs»›öą]ČMűÜ.ä¦}nrÓ>· ąiźŰ…Ü´ĎíBnÚçv!7ís»›öą]ČMűÜ.ä¦}nrÓ>· ąiźŰ…Ü´ĎíBnÚçv!7ís»›öą]ČMűÜ.ä¦}nrÓ>· ąiźŰ…Ü´ĎíBnÚçv!7ís»›öą]ČMűÜ.ä¦}nrÓ>· ąiźŰ…Ü´ĎíBnÚçv!7ís»›öą]ČMűÜ.ä¦}nrÓ>· ąiźŰ…Ü´ĎíBnÚçv!7ís»›öą]ČMűÜ.ä¦}nrÓ>· ąiźŰ…Ü´ĎíBnÚçv!7ís»›öą]ČMűÜ.ä¦}¶˙Ż%źćÄż’ĎőŕAáb?żó|ç-—?řŃLEná'ÝťgĎž~đŁ&~´µyú<˛÷üäŃĹÎÓO&˘ü™±ě‰ĹîÁÎůÄ´?xŁ&ZOOŽN.đĂŢŢÎůÁĚÄ<ÇĆřŻ~dL†ţgů“~´ŕş¶Ë6•˛đÖ„ëş^DJCHaHĂő(iG„˛Kٶˇś÷GťëQüˇíyJą¶ăŘá×<Ďt=ĂuQď˝ńź6ęý7đŁá?şřŕGť~äMLĎL,ăŻď˙7öRq/łO_<;nď<Ç]?Í`—ľ˙óéÁĹĹÎĂý ýă ü|Â3îÜň+ţ;sđÁŹ^Ľ»‘ĆD˙uŠź˝š0Ť‰ĆÄÚ†1±Ź/.wőjÁCúş°Ţl ¤ľ‚I{®?T«H¸–ҲÇ@^7,¨7x +d +DR:—‡e€(Ws‘Ť%Ąp°.Đ7THĐi8ËĆŔÁ^0»©°• ^ĺZŕ# +>Ď˝\Čškĺ)‚€3 l„ŁĂl›礇HĐ–t¬`¤˝˘öláŹP i\ě^. +„„ @¬:Ę—+Pđ`xżľ Ä>‚ÂU"  0!+ v5•aZ>éŕ;R؆íPK…ďO`:ă@ţ(¨ďŻ…·¸xťçKB"ě:©Ç †PLJ"ą`ׇç¶şň*2 …·ĺJ”¤Â'SKQÚ¶řĆ),T€±a®°ôÝ…Ł«B+jŃŚŻPyD{¦/60jÔ ,¨”C:ŘZźÍaB»#eú˝dUî˛Ab]ű 5ń¨ĚÎtĆÂ>¨ ¬ÍŕßM–ďĂ>(8(QśäŁp®}J/DHß}‚b”Ť‘=ö nµoB‡xÖ%ě\‡ň„Ż+1 +“?cŽľÔä‰Í´\…Ó[>-r”lĄ©U3MÝÝÎ;ä79HŁ SAT–ŻÜ] S@ ˘M ŃY‚jÚ t;ˇN€ŔöGx’–öç’¤aL@6c¶ăOßÍ;'Ôí |»á IŇÚ 7Ś+¸Ű%‚uc[ “ě)ÄĄ§0 J/D–2/Q€Ŕp!Á]­»ôA@µ@3řúâÎ Ń +Ú:Z… »CŃ0gň3v `ڞŔsDpž-–_*q9Ę0ˇXpô¶< ćŔĆÚN8Š"ĹŻ +lžđGA ażÁB>TÇh\Â*!:P”'­2!„圼?„¬ ÍŤ‰† ™ëQŔă …Ć‚QPŢçęť$ö„% €¬DXy )¬|‘' 'l"&čć3D G+Bm¤ 呦9 +ňĚ#¦… ń™8Ρ24)„Ŕ +ÍMe ńŻ×ŔM $ÁÁĘëp&8 +ü ÇăL:2BP#ącq&$€áéđˇĹëXśÉĹ’6*đ°÷˘ŞŘ5H60ÂH{,FÄŢ»ť&Ä©‹q°5 ¤aÔú°c FÄ„ Ĺl4ţÓ‹±őaŘv\ľ˘#b,A ŰÓGă0"6Útˇ‰˙”‹q@ŕˇÜĐô|#Ú"Č…ÔÄO ç:ŚüćQţL”G… Â4üuaŽrŤ9M>Ŕxĺ» @«dCAŹ;ÁC ±3”á®ŕ śŽN» ćĹs…ʦ¨Š×AP¦Öóx7LCuA–ž¤9 RöopŔc$ĐĹ#”Ó*Ä04ýQ`k0 6P†Â ‹¦btüŮZ†Ŕň=;â±yŁ5ĄMÚuM0TŠ{‰¦@8Ŕ¤&1łOĐPD!Śë/ €r„Ô 0˘ÍJhp,JV¨MÖ:4T@k@ +Ćť™z€­PjŔA¦A˝c‚ Ú7ţË@Ł˘xvŘg1M‘ńXεh +Ł€N <ô±h +ëÂ;  °ďľ•űš˛éÓ€íŃBŁB‰€: úX|›oV$8BŤO8„ib%ţa`§Şo_¨ľÉp˘6‰Ű°Lc„éßd’r0Ń6ÇB2!ŕ‰-µ\ ÉŢAZ>$ű{NíńžSs"óř÷őź‚Ó¸Y,ß1®Ą§×ÝŮ?yń,5‚Ńbb±rńü˝Á•‹“ç';çť;űOw.ž˙s¶Âřçm…ů{-ë÷Ţ÷«3µţy3?0Ó ˙/cŇÔu»ôŃ@Z\ó•áÉţóăßkţ™kË‚v˛„„ŠŁWpü»Ë'GÇĎ/'}ôhĚĎíť˝:y6Z; 6 l DýŹSőĘďµúXbţ¸úÉËŢńÖŢyşóđY¸9ß{Čř-şňÝňÎĹţůÁÓ&$î5Ď7ęç‹Ü˘––‚'m„~HV€’Ŕ ¤w˛‚v‡sĺĄoŔ±`nÁŇńµË0Ť7ĽČsŐG7;HۦC»ŠKń{Ó†Âô§K‰fĐ>†ho/Ͱ¬K +ě=Đŕ‚VÄtRĂҶLx uľi»4­`„ íďy€‹AĐ6˘ED˘íc 1 ]`ňŚ^…µ +ě)L' żčâ›%={>$ ťÉžŁ7AńN&°l«zń¬ŕ ‡Iw.ł˛uphRJ¬ÜÄ3€vč? ě~† hžúÎ k'€‹x )í^=„Î7̇ëvG^< Ŕ{¨a'Ôł`4 Ć8kŕ€1N¨ + ¬|$$s ĂCß.ľbęhPh¨Ă!Đ˰Ż8w ""lľݦ ŔÎtś*ÓU š”ľÓĚÓFm/naŕE’/t}ŹP'bŇu:î ,†źéŹ‚!Ëk÷ýA’ô‰řúN5“Á<‡–¦ >†•jŇa7ÂÄó4Ŕą!Ľf€ąň}oŤvE/żZ.ľCěâú#°/°8!O¶5,:ŘZRůŢ9N†Á yyX?0ę<ś6 †7ŐsüQŘ`B\ŕn/X™Gâw¨SôŚ´kČŹ1Cˆq%¦T~\WűÉt líĺˇŇIö—ŚťúńCWŰŚđÔ!Ť E´<Ä*A™’2!ômŻa­:0mŚdX®5⊉D Ăđ©«eF1Ł;‚u¸7‚ _ó@jáIîé›ňd :L@‰¦¶üř.Ëf¤1r8۰V]Ę:ËS¦żzŨ.Vĺgô™a1ô8Tńrl Ě&;ôßAV×ńrË' ÎĂŢÇF^šH®Io6úAôňŃj’J†ÎdM·ńf?Š…ŻŘt†c=[" BŠ.´Ěu#Ś“‚ű!ĽKiIo ¶Y)í1â"¸p][;[=ß±adĐ{s•ÄëËnĂ[X¨Kąi{—ž0łăčx_`ůě)Ć™ý…›4é`°|Őè´–h ćň¸p˵}5GÇż"H˝LĄPČ'P¬€é—Ö&ó‚¸†č· &ł|–·É„/–Ś^…xcP×ń™ŮcR“µWrC™ŚŔ4@i°Ş|Š]an¨#!䡔¸@xÂdîM ć…€Z:Lµ™ŻeóŘFď"¸€ŔĹ.ęěPfU0V)Ăw ň;I­ĺ( c„‡ť ¶aŹB"°î`'é4TČĹ+ŕŘŔHřÍ”6ld©cË%Đá`(ŐµkB‡·™kbxvx\‚Á6ĂřWţC23JŢ—Bzńs$Í'e€z~ľVŤřä‡?g‹Q`¬ťďˇiíQ§ř ¸SŽ4°ó’B}dę]"h$˘B†SxŇ +1‚)±–vLhśÚ$/C„ůŁ6s× ň=ĆAaC`ŹÎt5a«h´}ě’ňN:U'  ‚RvÖ ?n\!¬ ÚE¤ÇTYÚ•–đ‡ N[L‚ÉVĐ*ܤvQ€(®Nžłó“¸ +ŇŢń­=†ża…˘˛ÂxˇAĂP¤Ö‚:P' $ßK)Î Cľ¶ş54˛ ţđFV +=Q sGjěcŻi`,EiaÝ’Ž"­Ü±†®IE‰+צ׆aâ0“ĐŮX8zS„šŰ ¬ŃŔ9¦wCą`´6 űU=Ç?r1ĂäůęĐée˛0P $Xpęs7„©á˘?ÄdŞŃö§##LńÇ©ăéŁ4A‹ĐFĎĘŐ´a‰+Ż‚Č=aű<žĄĆÎá›č´1[4–—„YLy2™¬ +’ŠfIąÇ,^,.óoh±á±’)/v@íÖ‰Hk”ĆK’ágşHFžaÓ‚¬ ?íć#d™Ĺ´,ä˙Ňë%¸M]ž”`itŤźˇ‹Q44 ŮÇ–ŽĐďjڇYŮŚp›V8„i?L¬"|Sž XĘĽ|ŽHjíáĆßhĐřâß%j1S0GDýLŻť%R`–(& Ó„ĂTş3X/ˇ©6;¤((¨ĹŐÓá jšP)8 0$mš‘ĆÂöĐŞgNµšíĚSe~RP|B˙,) Lúdj ˘{'Čxd0‚ixpčěĂS Đf&]¦@Y-(Śç´ g+ě(/TRđŃ1$•sľť¬ÓOŚP±9Ě!SôĽ¸ľÍE +l ˘‹sţQ w™úî@ň*X‰m×>I‹Űv kwâcf@ó‹\ů>âc~€ Ëܨ}ŻA|LcÚŔŐú|ńŮ‚kĂ!»vű.âł™ĹlR,ĂFą.mz#·˘]ž6Ó|,zQ™K>H'3ąDÖ:EM0 o„.± Jč‚?3§‰_É fˇ™Ĺ#4Ä´Ld©Đ+‘Ě +Ż2˘3ś<:’'|ư±mP7L‡ń‡0yĆ%<±ťKÍN$ŚPfYë’¨î†,/t>.ĸö aç꺦‡’Ővi+Jßf‚šÉ\ PďŠűŢa¦>ŻCV6+p _8#uKJŘČ ĂŐÜLż Ô-yť>wGŻ CđX—ĺ,őą,0q`ŰCúXŁđ?’E>B7` ]Npô,tC™dűŃ(r¸Ĺđ˘ŚÂ~0Ă®Ś’¬Ć˛čşÇĐ c—2X3ca@#Úš§m +S­h‰X!ŔŃŚoAĸţ“™žŁýŁŕ–ˇSŔLeű•:¬"üŕ±…á$¨&† ß +$Ó//r|™éčAĂľ…bűu08úůB’fz¦ŢŘ®_ĎĂś3“^bź„Î(¨Uť¬YĚk0ˇ7¨Ç`ˇ=8–cÚôÇ@,°ĐÄV!ĆfÁ3ź=g:xá—pAÜztĹčĚ>=„ąvôgIß 1u¶~†ýrő.żëaú$Ęd˘˛gʇaP¶YÜzg,8ÄÉ€Äuz„ź3=2IŹv…`%—;ba¦ ]á`˙}xhł,űĚ7Ćcŕ!¶Yňą.#{j,7łĚ…en!ˇ<úBmßő +:•4m™LďŰf:SrŽŮÇ#ČśY±ĺ#)ĄÝTF®yÜ=č]š“ĘQ$UŠW”‹m‡Pˇ-¨ĆMAa¦ +f ĺÚA:ě»@Š´$™6 +ă\ÉŁ€ůa˛ň*ČóĄo‹E…ŚM†8ŠqW(+H»ĺNAN2µb,Śb0€!˛Ü+áNťlIź˙(ç!(¨*ŔP…rb¤v „q©1䆉śßcô€ŁuĽz$)ßc’qot)ĂŔé÷ŃÔ˘řUäŽEcßY˙2ˇÂřĂe„ştöš€´”Î]ySÄ&×:JW¦\ń¦ľ÷]ËĹt`–Q„h÷˝'˙ÓFý˙7'”©&l9˛ąÇ ćmRčż’¤PE˙ Ä! 9ˇď®KşüĎ–jęŇB#,Äb]Ä0)”ŞŐb¨Ď±mş o“B˙ż łÖP˛ť….`ňCA^„Ť+*ü§b1&ě b…‘řŠ<ÂT—ďÂ[X@ÉęSŮ΢łÔ Łě YvG1Í0ůÂbśŘc|-˘űÍX†á»(裏`ŮŐ=ýШópF,=ÄşV> F“‚Ţ&ßnÁzâaŠ)ż+‰Ň…˙LfĐ'8\™HÁŇ'§iŽY44Ą{YŻĎŞĽŰs<ß‘Łăˇ«Ţč" ©ĂąsÓü´P~€ó¶É,Ť0:Ąč$=tţ]™=cx#–ëw„1Xx©×ĺ±Ć ´Čr5X@#Uťzv0ł3ćd….`&óş´ĄÎw9lnľęfp€žmá'ů(ť¬Ă›0“śĚ,Ľô y:~EW· xݤˇ„ďçD0ËŃŇ1 ˝R`FŻśgľ‡ĺúŕ=†^RŃEĚ s÷ŻkšâHŽJđY5Ę>V­í[K· ąlÔŁł“-l}"¦[axlu¦OŇ%ŔL3ÇOţbRÇfÂ^XÉGşˇ‡Ńw}Sć‚s{‚Ś˘ľ yÝËČRÜÖäŽůŚş*ŃcÎ>FB2¸`vľ–×Có +=&%řBŚůJ¶Ă¦7Ł¸Ż˘s?AąÁ(IŻ ÖÎLĹ…€ä”IW‡éíÓ ‡1ŠUžľÂůĺĽëFŤŇBYCŔ2Xú†’×éJ +eÔăĆęJŇ+¨ÜÔ}«Ü±şR[ô 1í3S×éJĘzH(ÚĆA±Ć{ĘRsCć`ľ‘zúľ˛tŮŔö;ážá]§,]fÍAŤ°;eŽU–öĚL:c•%Ą”˘×+3ÔÝďiKć0á6tö9š©+–öą»!4cÎ5‹ 퀣ë…±ŰT—ĐĚb'vŢARĘ)ýXŚbô¬Ŕt•@9+ĎçzżłŤ˘ŐĚ„)#ŔŃxĐlŢ%dgaŽ ~Űfh­ď˛=fđ ö‚† Ú2ˇěwLg´*›µ<Ěw3°EyŁŰ㌢5ś2SjXäű/ …NŤd*ĐD¸pJq¨1=i +IFúŘ°Ä ÎvĂOĂÁ7ĂŃ‹sŻ€[Šlš4ú9¬+`*§vç‡Ĺ$:XÚö˝26űIťĎ3ÂěJg:čěMĹŽ5Ěň5˝KĚŽŁŹŮé;±t&ó2±–áq#h0E‚#'6٤`~͇l‚Ĺ˝,ž3]ëJź/ žNK0u»W=ݤĹ7UرÄе ¨ŠRS24Ş*َÔ2(—rŘĽĂô.u;3¦ ćęAĚ``w!đ§Ć…XŢGŐĺA/Ô˦Ea" ťL~b™ŚéůIŰŃĄWâ]¬z2t~Ť? +'CkÜ T˛Z3™WĐDŶăWf‘¸qşř;ł]ý!L§ě˛\ëŠ)ěbM,ßđąF7CÔ%„ę⡅˘C1fá PĄ‚‹$R›b; 6›ˇ:Ă/Źi\¶`Í” bĆŹă;=BÍÍ2ě®"Â*p¬žŤA” ÓŔű2qĐĘÄ,bCäeg“ áX“ "¤ĐÍÉüqĚ<-äýĂ‚z.ˇéěÄŔµAÄc2á$¨ęB°ŘÝ2ôŇ‚`ĺýQ,—˘çzáśakÎOYtéđ»öČGl“ÉJ6+M@mŽĽ\—Ă.V®Í.h˝3Ńz{´?LťŔ2Ľ‹!6!»á'YŇ‚bÓ&Â!Š:­Ńą’—Ěú6d6µ­ĂQL’2ťž(rh¨ój„5ťL"“ĚqŻcą:űĆ"›L±» ™yÔĄ=ëÜ zÉ şiÁŚ1F#LťÇŚ ÚÁC´qéjŻîŘÇDkW7…öG)Ýô1đ*ťďJ^Ra],«ßb¤dŠ'ř§^"ťÂďlĆ—-ćIPg±ŁsX;ëh„Nßné$ä6o˘|éă˛]–pt8Ôgäń€ G¬đARá+’aÁ€EiŞ2“Óőó'}ËŽĎŢĄ;Ź= WM]Žäë “mđč€ůĎ·¦ ÎĎaĄó\č—Îi‡Ů0Ěýô5›É-¦WĽÜa'ŁÚôtw ą2›‚ç8"hŞ‹5ˆ»Lßk©ĺ…Îsó ëjŽ%t +M@ËOC ÁÍ’O“éXf %KŇÝĐ˙Č ü€ ©ÂÖŰPj/xhx°ő,pťyĄ%×Ium®`¶ď$ń0¤bf©I‘®śĐĽUFPŹĆGHt0ÚąDF# 3ýĚÂ_—ŮśďÔuńł¶Ç|ÁkpĹ!Sahĺ١˛ý>Ncî 3HŘ˙=Ä!߇i:ˆ5Εřu0Ť}›ŠLÔŔżŇ22lazĬ\}Ą9ĚçŁyLţ»‚Ҩ‘L{Á(ČfĽĐż! % ř}<€• fĚSŚ!Ýa¬Ů÷5-{ňH±CŐ•Ętę5Á:7h‘kŔ˛Y‚ˇFů'„žaZAVşiéžľR:aő?‰ÇŐî· ßÜbşăT/ő1ű¤Ř¬Ą5‚Qě`ÉŤ7FiŁô[łî$ŔĚu…Ş'Ç+k$ ˇľ­˝ü!:m)+ćĄŘ5u¦)“]‚}ćFxlˇfźňäčöńÂÇ0×’pĐö)U'¨B_35Ç ŇÖ‰™'E·Ă(Ś"X9Mçdµ.u4KâíŔ‡`é 9żYŠĹȋÞłžVN˛úĆbÂy؆®iŰćG¨.•¶Xńhů9ű@–‚-ÇYi–žx‚]ż7#6‰gŞ™–°1+ßýľ¸cÁq™ňË ,g<1±Ý +űб˙’> ćż;„nB˛›ĺńžîĎÇŢĚ×€'.U°ę ¤a„˝.aϨű)6‚Éöž9j1đ=ÔŁ;ź˛÷ž%ŚPĽzsjĺęŇ‘ëPŹ_1ŔíłýŞďŁ–”aű¨§LĂ‹zŘH]·ćf)€uęˇS‘Ť éXTîXÔĂFÚ2đ¬ŔGţęˇsNĐ˙Mg }ęá¶Ľ°~8#—ś>qĂRŠ![WĺŻruß^Öť‹P ^Ä3@łúďňşűX[bzAő3ĺ‚E=棻ˇśIŻř˘Â+ćł»şAá¨đ‹ndŕsÔf«É Ąy‰Pm°/}O~ŕ5đ ŇĺjŰ!$ÂŃí.=´*˘ÂdÝŁ#ClĂž+Ŕśđ¸JÚĆe7dĘ&`oÔĹ·k(vž—†ß“R»ŐŮU“©ŤžĎ:y›­O˝°˝#gĚŁóáÁ-–y“ŻdŘłŢ !„&ÓzY}y]+T]Ý•%0“č¨auuč~xeč¦T}OÎU”áń‚† ČL{„ńc†îl˘ ęC°®#uáż&VzFzf8ş ¤¨t%’`ëĐŤâşAw)ěS!ŘÖÁˇxsĹĂ^ĚHçÍA%ß»`E7˘ÉĆöWâxß+ş +úÇf¤ń`EÇRČ2ôQ‡ŘáĂ ˙2ÉŽÎÚ!ddë +#¶ÂÖţňŔřî/hTD„îľ )ez—Nżëó_Ś;ĐľĐ1kŃé—|OÉÄÓ•…KúŘĄ řV'ł%8˛ş‹v¸`„ˇ;˛™6í8b;§Ś©12@ű‹śĺhź?Đ;ä«q@đÖCŇťŔ +%úŇŘ˙iä®gkShĎ"Ăds¦­ÓT zLťhĎPßeŔ˛YźĆÎrę’˙€VˇG`;’˙$;pPň0 \…Äz5†±X9`;+^\¶Ú5Ľđn`‹ˇ ŹbĹfYSxÝŚy5 +Á:âJ–ăů^—B͸q¨ôý@+6[Ăłď®ÉĆęáĺ .Ó `˛Ű{¬`Ä.ô¨ç\))%læYÚ«EQş$Ń *–ťO çé @đmťäMo†ĺ/ĚFeăĺBé ­„eĹ„Ą+čpSéâ]=Jhż›é!tŤ7«8 ˇŢ…:1Ů“*,máÍ?†ľXHr·Â¬8XÖĐy§řŔ1źÍÎ9,- +mič¦vě& žu1+«dü†IlŇ®űë>Ó‚çŻç?*S“Ľ¸Ćd!‹nţŹQşK/Ĺ`Ů÷eč@ş´˛tĎup‹Ą]ZÁ« Ú((M}3Đuź¨SÜGCŘÔžŤĺÝ`Á0SlF––ľd‰%1ÂżRIčâdć^ÓĎ:šŐýÎ`c”Íí1ÇÁ/ěa~ňĚřça9¤Aöh¶ç›üş"–"]. I +v“!úň6Fö±ÍvT¬Ä(ýÇě +ďk˛$d—­! Ţeů8’—.čę–-!ę#ĄîAńaü]U@aŽgŇslݢ$oęý(¦í;éöô8lş´™b˛`‰HĘ5u•ĘĄaDWßŃň oać@{d(ÓiI‡ÜÄfXűĂ9“ĺI®ÎÍótkd .©oŇĐĎ‘ěs,XĂ`ú+—tŮĐË„éx›Žö{L5aY†~”y,Ç® †î|m2„ˇx´BSËuP„ádięHáűŠCâ+›ýe ϶]éäY]x„ď§'/|—McR„f© „‰’+ö…vŚSI–sˇk6Ć}ŹSü!6†^ůB‘Äé°|‰˝_Áb26 Š˙Ů83h‘ájá¸ŔşĽî!Jaj°uëGFí ímÄ/aŃܰx¬lÔˇ°˛uˇXđ&<‚’°U—ß[Śu2gA׾ąúM:HĎ”5K KK7(Ą« ˙őŢóˇt!Ë‚4Ú>,đ`‘:†„‹bq˘n},TŔBQ˛–Ł9Ůfí(ďť`tćU`kő,µ÷Ĺ»m“tč`>#ÉÝcĄ‹ĹkŤÂòý^htnú‚Ů` »AÂkłŮa,B!‰«f‡7NŮzCŢ .^39Áfű4*MzPś°Ć¦¸´)smM,Ľ¸+bŤ°ÜU7Şł­X™Š'|ˇkš:ü…… © M›âjZŮbé–l¬î…—đ]şŻPO” +¤ečj<­Ű8ÄĐ-•ȡ|—E•Í2Epu8‚ťHˇočPäŹb‡U¨—ŻŇIöOh‚a‘ JęKk‚)›ÚN~±)ä‹hŮëÔQ:>aó"*$[7’ ańź¶Ţ䀳´»Qč¦t 9?`Ő +¬ô´If3nËâ-ĹşÁ!Š×ńń 6lÝtĎfM +ˇýôv°;‚ň•›­kµ@H-ĺ+J–ł +6‰ o{á( ›ě^J†~wQ-0˝&śô*ó‚'ÂV!Śj + Ń>9ŕ#ŤdµbwGeŚpyBţV»ţ­5Ľ4UhÁ„ uŘlÁÔř¸†ŚĚ¸éKד|©A|tä°ď]Xú^Aá˝ l éIÝU¸6h×ýČ ŹßFt ?ËiűŰš›=}Ż Ô Ś ‘‰ tš‹N†µYĐ,uúSĆ8ĢóžY0Jç-ŇcÂé@„\ĂwIz`MvN˘oď’l*nó.F©ü‚fĐô+hš`ç&ćYL|u,_%ëänˇí-î3öɆ ‡2é;PÉ,Vf•/ďccŔŃ‘>MCÔł%äň&"l‡ŃŢźĹPC%ü®9P,żÖť]Źh#<-^ +Ä»xB A‡6ĉÁč‚đ-O߬Bű–€ĹP‘ŕŢ5ŰŻµč:§Ş``Eă'“\Ŕ<'Ţä©Pň2 Ęâú>aˇşkŐtE¶¤Z±ě »%/‚Ĺă±/ś:éŽěqÄţâqB“â•4L†ĹŘżŐUŁzůwlIS_ Ęro]¬|Ť- 9GÓ3băŁ0çö{¶¤!-í˙!s9AljwlI 4•«Łě#©ň’EOßÖÉ߼ą.Ürá7fp}ŰHX¬NŃCô%nŠ€7ä?˙&4l/ŘTřŻbÓQ^Îih &ő*Ě,6(âś Ťô^«—%ŮÁ¦±Â;i9OkS}őŠzšń}& +J˝†bS ĹüíşÁOf0蛸FbĆo™°ăcbľË%żé"fęôĚ{Îč¸l^Gă^qW@ÓóĆ5ÁGKׇtĽV_řf >vćű)W—ú¨˛DJgń8ţ‚ć€űěüW™ěËíéÖi>…™LřcVĄçl˛]´ËŚ\[ç5s&¦Ř™Ŕôµ’Á†pĽ—‹ĺ\–iúEâ°¦ÎößE/}Đ˝¶ëŇŽxüÂi%M;ŮPR÷Uá(^<Ĺ›ť•–GŁQŚrA9:¦ĆQtć@´îĺ(‹7oIÜşG[Ťüß7aÁLđĽĘÝgÂäj@Ş#1ä×±&¬Ď X’äĺŘŢ–ö °8&¤Âu˝kĂBNę.Ľ8sĺŰălXś3lŇ[:}A 7Ć8e˘ ·_o$'˝^¬eÓZĹ`0k-ç]gV.év2l4ˇł4Ţ7+qÚ¦ąűEşö8»ŇÔ ŘfŃp•ăÍJ‹?4 ¤tšŁt¸„LĘFĺ¤e¶lP:uykÂDP‚Mf)šÜ©ş t7a˙]ş˘…-:T°üo+g(P§I ŠI6Î0Ąľ-qŃsĆfŘyDjěÇ•ŰĚb‚ţtud›&™î +ÓQßf»”(±}Śh†lLĐ Öb«wB0˝ŃlqÍ$ťc@Ó…9oŚQ[ľ…Ďîăěűc)ß®ú‚ĆS]Fb8ô/ôe#cYđv tÍýjyÚgb°Őގ“jobçvš‘‰×<Ý’<Ľ'BË/ś«Ŕč:eŇ҉gl*†Ö51/đ`–4})–׫ř])q$Ąť5úęHŰ_3ÝUi÷˝ÇJwGwÝ–ŇbĎé˙‡˝wmŽă8Ň…ż;B˙aľ8B>±€»n}Y})Űás [!yµň»gC „5đ€ .ţőo>OfUWwZä`ŔńĆŠ@˘ş».Yyż4‰JQě[\Ľc¬ÖuT{î¬(·ŕ"śm¨ń˘µGDĘő ¦ŇJą|Ř-ye3E –'Ô&–âo`&HuŠČžjěn!÷u±`L/Ś ÁJÝéá2U +ÇQ8öuŻ Łb ¨ÎŹĽÔ2 +ĄÄPÂżÓŐ%Ş.óˇâ—‘EĐ<őoЬCŞ­_‚[×+ă9Ô ëÉ 8¦Gä=‘¸°ĂĂĐŃý‹ŕ• Őż=,ć`f`öD#Ę8č9Ž +VžB=˝Áđz­¤Q;EŚ\şNp-"­äífÜŞ(*MôgÝ$˛Č»GĐ^ŇC! wčË+´N‹™ÂŢ Ą,6š Ł[„{-°¨!+‚[„ȡRto)´ČÁD$Yźrď/„ů$¸Črç&¨˘r˝·Vd Gp‹¶­vťGVŽĐů››´ň¬9]ş.,ĽqMn<ß”śPý.i…fś Đ~d3ś]xT3i`?ë-Ď +Ţ´)™ őf9ô5˛Pׄz(5  @°˛ ‘-ďť6©‹ĚđFŐęTެtH7…z¦Dĺdz¸YŇ/F’™aßÂs·bđj y‡Vdx #¶÷,Źť¬"l@ĹhUŹ"Žá:Ny^i]TtťŹđ)–Ř\A±vő6Ö¬CTf”Ö€ö´Ň8E!éHĺjµ{Dn +4ĚňPf‚ô ßQ#R*†Śo.N*4¬‰-Xˇ˙H»Ť|<˛őË‘e·ě6×2-L¨Z ·DëƬť72·’µóĆQĄŔę"Ł’>+Đ·wńĘ$ç +ÚŃxP¸µĚčĘj˙Ěôë%śśyhlŘÝĹ,Ńď®…âÜZnI%ÉŇH8Jkąe„EÁlmĐV÷ką%n<‚1K¬ŁÜ2ŕ®ôatC\Ë,KM#é´×k™ĄGŕ8Ľr¬ł–YzDĘ€á¨ĂZféaTDÓ Š|łtk—›Ň1th-łtH٤ýz KnŮ 93:ü0uř.nŮŔŇ.l¶Śkąe4‚B°a-·l„Üx47…Ź×ßĹ-áÇŃĆś…>ă– Ý ü eü—ܲav k‹ôZíp·”QHžAË2­˛ŕ–0ă4h‘0‹č×qËvčé©{.ÜÁ-ďu™gÔ¶ČŤ3ÇČn (˘KaiŤa-·D¨¨<ĺиÉÇ»¸%|­&Ĺiˇ™·l`*ö,š’úőÜÁÚĽ—†î.néŕ@ş ęGǵÜŇuH”ĄQKféáˇň°Đ +ÇČ)¬ f‰d ěúv-łÉV˙5|»–YĘ…‡ĺ~]×ÝĹ,éÄkŃĹŮYG›łDLÜ.ůĐ<–łJ!$Łë‡tłD˙OŘb#»­Że–,RďŃĘŞŃŠ f‰ć¨t|v­Ĺ˛ŽY‚Ę#V5ńŁ[Ë-×[ʰޠmFÜ(4ČsBé™`¸Ž[&r>ĎČzf»,ąeÂ…Ctl×kąĺ}ěíéFLđţú: Đo˙r}ő…¨Ü·˘uś¶Îú/ýć//ů7×čżúúOĽ¸”W}ô›ß—źaçűý7źźüEôxţ<5ľáO˘Ě˙üâňJţx$ĽąřîőíąZ +~˙éÍÍé|ĚŮ—ĎnÎŻ8›í,˙˙ąýĹ »¦ůíŇşPŹýńôňµ ţÁL)o~•M2źFÓËĂ_ÜOjĆÚtm?«×N–¶ĹÂ~Ů|QżěĹ‚~Ţ|A?ďnAźţůŰO/_ţpú­Űxa´„Ţ·$ ÚŐš®żűźółŰ'fŤ}r}ĎITK{N +(co_m~z“‡ţmł…=4ë7ޢ«×/ţzv{úăů;T?ł+¤¸}}óÝëËó«ł5fę;–ŞoşČň©ť,ďęú«Ű‹Űł{XCµ¸Wţ·‹ËmrňĐÎhđq“6^ćw§ŻÎ˙xsţ˙^ËÉoÁbfŹíi7^ęÍů«×—[Č=yü†$뮸7­`=ٍ)îůß6ĽŐÔß|;9©Ż®_ßśť˙éćôĺg›łŇ«ÍŹëâjOđđâęn2]•ßݲîŰţjQ×/ĎoNoŻo6_ŮřÄŽ/ŘÓë/Ż_]ÜnużŢŃd(*m<Źßvţ|őÉA9=(§ďDŽ8(§ű˘śĆrú+§›źţľ*§ĎoNe +—ąfl×A=ÝoőtsSÚA;=h§íô ť´Óvú®¸řµÓm·_Úé‘túéVKÚ őÉůŹç—_ýpúěú§wäDÝGťM%jďŹNŢŘ\}uűěłó/N1­mÔú©]­ň»Ë×÷đÂý—î˙túúŐ«‹Ó«'÷®őaË÷›cäł-čęłÖ-V´ó{¶Cî·Ő}ÚRxýüů«óŰűŻĎţ“ŠżrĄűL$6šxőúćůéŮůWg§ë’:ďd[“§v…‘—ĐH{v}y}óď?ýpŻj9á׿lµb~ (żâ˘^˝ó¶ÜŞ´Y­?şÉŹ4ÜBÎă÷í |q*ŻŰÜó˝OĘÝw››#÷ŽnY9vô€§Ho˙|¤|ŘÄr›ÚJ±EĘó>—ÚÜŞ·wDcóĄ˝#˘ńĐnéÍ9…łŤ·ĺôŮł‹Ű‹·ŕ€ă»:őtŹ|U;嶨Ąw¶¨Í–ë-Ä•ëÝ­hsšYăcžĂ_¸ŠŤ‘rúŘ®–Ülޙߎ­ă†hľ«…]^\ťźnžřrvzyöůő9 +Ő»ZâéĺO§żl~~ÂúnOo¶ă•úŔ®ř|»`çç——[…_î ÷üćúĹ«âč]­ęęúj F~vöúĹëű#Á&Tłzf§JŇéŐĹ‹mfţoďj"ʧĐäQ\zđ +čŮăŤ\Úbi{fĎŮ˙ČĄmÎfOnŇĹúˇKw«‹‡ĐĄ÷şôÁtĆ={Ľ±K[,mĎxÜă]Ú\ŢŻŘĄGČż·ąJ{»töxc—¶XÚ!vé»t]zç±Kî‹]Ú†í |ıKgŹ7vi‹Ąí™đHb—¶9 =ˇFěŇŮăŤ]Úbi{F4Ţ mC±¶9ŕí‰Î.řQ +Ý&vđp<ďýxŢiťž˝;ťw:™0‘ÇXŔőÓ?űK3}»Ą­ě‡'oaÝłşbŹ»SÁű­1¶SňüVu«dń-Čb{ ‹¶ľÍwâ@dń@'YüĂŤ@ÂâAXÜsŞx<>ĹQüőâAT<Š˘x Š˘H˘X{ŘľÝ2řŕÓĆÍwâWň‰ďŁ—őpÓŢú¦u‡›fëŰ|'7ípÓîǧԬŇ檺_n«Z=˛+ P¨É?ź_~qyúË·[fÇ>ä¸ůCÓą­·ěâęŮůó‹«{*OÂŰ^žźŢ~¶M=Łę‘]áƇPŽĘmQőgęQmHcĄ›îĎĂÝmé¦W/QĽiăĹJ7­#¤;.Ýtsţâú>˘¸§Ą›Ţw‘ŁÝ°•űÄ7+—äżÍJţ˙ůYţýDţ°zůY»SźŢ˘´ÓC“ÖsÝ÷®Čď&Öű^Í}ŹI¶ZÜ!•dÎhOhÇŰ:ěöĄ|Ă}çđëůëv“źtýâĺő«‹Űóżľľ‡Úý:Äq—täi^ë>‘Ím†˙ŘâŠýc‡7l‹Ý 6YQءaóÝłřÉŠÜ^¬č˙ëdEqĎß~1ĺm••}aɧ7·?Ľ8żÝBŢŘwÖü^JÄ>&ŢĽŹˇ·;đCćëż8™0‘7˙xó·¬zđćĎNňŕÍ?xóŢü7˙ŕÍ?4b:xó—|őŕÍ/ôĺxó)ŢÂźď›O¶uü}2Ší‡ÁďŕÁ?xđďQ$ü÷éŞzvńüůëWçOŻŻDθÚ î +9żĽĽţiă_^|˙Ă­ 8:CµŕÍ×;ng*ß–„ĺ«íš…Lڙ̲9—x}ó\”ü-9}j?éž0x# Ź–űm»ľ¤“űÁŞř¬ŠŹ˛gý6Ś˙`Z<¦Ĺiń`ZĽ_óúäű›óó«ODš=˙DÄ€‹ďŻ?ůńâúňüö“›ógź\ßś^Ýşp°9î\~k77 ź_ĘoŰYĺŞGv&Óô›Żđôź/^ßŢÓŮwró;6_}vA[Ě $ť-$óˇ˛tb’×>_ˇeމé`Ů[űË«—çg"ÜĽ§4™Źź¶řůĄHdŰŘ·—Oîlą›s®<éíÍůË'–¨%ę`‰z«:X˘–¨%ę`‰:X˘~E¦»“Z˘Ě,EÔÁµoŠöÁőkY˘v'ŰěÚ;ţˇŘ׾2Ąí1ŘŢĆp±/F™ÇťćţČ+ĎĽg‹Ú.éŰŁ(<łE =)<łĹŠö¤đĚĄt…gvĘ´k‡Ł­ă8÷† Ug./nż8˝¸ĎĹqŕÉ‚'ŠÁ=|ž|(÷đyňÖDo_ŘńŰi˙–ü YňˇÜ–ż:ŰBW›=¶«•žmnÇÜ·şm[,íP6˙îC?+[·ČÝ+{”µĘšăÍ[vÝ^oÁ9ŻwhŰśA<šňk‡*ek¸çˇJŮC©R¶Ť|÷üćúĹëâč݉čď·úÚîŚboQzě]Äţöúć»×—BÜ÷ÚşŤ´Ľ'F‡C¤lűײ;wiú~«ÜÇĹy ĂÜcÜfqű.¸ĹÂö#Xp‹íM¨ŕ(|{OUŽGçMšÂŢ{t6÷ŮWďÇí†BđÁ÷ńđ}͇âüŇ>ö€®ÇˇťnuRýô źôÓ~zĐO÷Bť;č§@?Ý\ä;č§ŹO?ÝĽ–Ⱦ꧇čĽÇ¤ˇnŽŻő  >¸“:(¨ő  >5=fu›Ĺí—‚z䝊şŐ’öFIýĎëëgßßśnA­ęăÓPw{ Íő™CÉ•űµ™‡ż¸=kDúXęČŠo¸˘C™STdßčŕődö—ţŞĺqvcżyúčěúňúćßż»<=űÇ'+]ż<=»¸ýĺß·±®ľşýĺr ą ßjrŃŹöâm·ş=»wŠîóµŰňt?_;؉—vâ};Ă}#‘ŻXş÷éc&”X˙Vë«üôúęŐíé}Ť*'*ÎüÁ]áäO?lSŽăţp´?©—;nW«Ý¶WăWg§Ű“‡vµĆÍC©^˝ľy~zvľĺ"§Oôô_qQ۶iß7¸uúŁ.R»yuşóKům;ă{őČÎČnŘś(ťţóâĹëmąĺ]­ŽĚmçžޕD÷Ů%”“­"ţí]·4äÄ$Š}–3?,Ůë —ě­\ň6ýę÷M6٢DlŢŽ?üüňúę|µoůäĂׄňś·Wr—O´€¶#í ź˝ůě+»ôŹA@{ľ·/<ý\żÇN“÷,< +˙jĘŘƧôŹ-nŘ?vxÁ¶XŃ=µ§&+ +ű ˙㞡“ą˝8Ł{bn&+Š»fZŹ5 {kóřްăÓ›‹Ű^śoÓYhŮňĺĹí§÷©Čžü xňô~Oxň+ÚžĽ;đä}!zűÂŽßNű?°äK~,yÍô‡Ţą{%€˝Ʊw‡ôN'łĎŘňvöęý4íI×/öPmľĆQíéнiq°ý—G4·jě˙ÖýT &Üâzćń{„ŻűÂ#_śĘë6ŻTłO¬ăOňô«ű÷źČ0őíó ňaS™Ç,Š~Ą€Ţwşé./Ýc©žsôřĘçm.GďKýś÷e}ŰÉâţş“\ő]Źý/8ł˝pő`ăţ¸©y 'Ü68Áż}•ÖEÔČ[ŘľP·E_ú}˙ëCÜD|ňB„¨źˇ*ÁßnNŻ^=ߢUÎĽo%Sí‹Ŕř¶iPŁĎ1úč>$‰˙`öyĂ‘1|ňÓˡrXmŢĄ˝˙âdŔDŢ®«Ţo?ýłkľýĂŐłŇ]ʰĐ·ąľúBŢÂŞeGrţýĹUý—Ź~ó——úž¨üę—ß]_ÂRt~óťĐřß}Ô¬>ýč7ÍꛟđßOĎ?úÍküÂľůżýoůéöÓ*®>_ý×7«gňÜ7_~ô›#ŢĹ•ÇÍŕúŐ ąňcßt2‚ŽäűXyt-°zřj2łżĘŽbۇ.ů& C\5Ç]×ůnđIţŤ!´. L!†®‰Ë9ĽKmßú.¦fčd@7´M×G<ŞMVߜʬ\:îäu«ŁöXŕ]‡eůćXľ×ŻŽşăÖ'yÝ‘wÇ>6^‡ą!­ţ®ĂÚĐv«Łt‡®‘ÜpÜv˝üŹ»¦oś@ú㔚¦ďúaőmŹťO«Łp<´©—·şpšŘ҆/rÇ19@BJúě kńŞfĺâq 2L ďÂjąyěyuHîŘum×ň,›ăqFN¦ú°rÝq—đk7¤aőµÜŚVřŚěnĎ:ĽG!ˇq]HsěÚ(8% j9ů Lł5,®‘7'x·Âb›äKü×c+őŮ8 Š,»ÁŮřxě}lńĄ¦Mr|‹%čĘ€02‘!´±KahŽÓĐyďű& .ą'ź€TŤś|ď\l a¦‚Qňb™Wę{’VŘ ŕĆaŽÓ7Ń5üÎÓa/–b‹'Úˇ‘ÉĘď¶Ý†č‚ÇGúˇ‹ň¦§xŰ™˘ č Č]çś ;^Ô7}¸Yž[őÇn<ž +Ő‹znŻĚ7ôQ˝;Nm”Ż + kS‹×„&t‘dyiЧfë8)ú^o Đź?lčśl»ě§\šA609ůÁăÔq/äČďůKŁWhpžű řÚ6MËŰ{ŮmąŤox=Ľh R{Ýv>ä6 Çř}Á›–˝üţ¸O1rłńŁw +˛Łň­ˇ“Á‹ĽX"g,Ó‘ă”Ű›ÎEy®ŞÜ çBŔ¶ËwAÉM#·^.LU6˛yř€xYĺ|…9§'H¬ÄcKş>)1ńIYň¸0^®±ÎIŢëqwăeh“Ň›®túškôI„ńţ€8µXťˇ‡ }‹ĄěqB+ZÁů¤\'`Źś´ ‹—/‡ŇáÜĐřЧc=Ctă$2WÜ v1mśŇośžüîI{ťě6Y®™ e–÷±éůŻ»#.‡ÜźFđ[6·‚{Z “űH.%4‰W ëdłřß&čFűÔ + zü‚pľ—뀭–ď:h9SNO¶&ÉIä7ž¤6ęÉâÚHB(ăúN¨r÷WkVř÷ÝÜTą2ľ 1rťnÄg—%[íÚ†7K^DĚkeŠĘçśˇŻ°#ޔɓăȵ‰R =y&.0 JPH”y‚µňrČs=đS r9{Ýlą„W)†&uöÁŮôw…ł2Ë—NĐEîbKéKÉS¦hZ>`™H»ž`D`P„Š#Wd Ů :ŠZ°ŔRµ{eá8Ą`w¸ 8 +솳÷‡¶÷¶EŐ“öV„°p=^ßăś{{ĆCYÁňf§‰ĺ~¶ @÷č:”^ö9Päâ Sôý@ôÁ{ĘLye[[.şłkĚ-”‹Ł0!űCŞ&1Űű]]%YŠđŞ(‘ °ó$4"¶=§ A kvă?„>4ŤŠ¦BĆt;@ĆßňŻň±¤bg Öç°ëIKŘ]$lšXŃ|Mě<¶˘©ód= r!8±A^Ńă4ĘD’J„±ĘŃ ň`=˝ŕ•Ę«‹EîęÂɢúŽ»'¸î‹Ýî`¦ěE¸ŤÜ´UĘĐeý]ŐŮřä)1e·[Ü4Öő}3`cäő …Ó§¸)JůާJ>äNŮť$âčËŤĘô˝~ş{»˝Ź(šńšµm۸|kTn Ş¸GŤ? "M  $FA7BČrő€z'hČ›í‚×’űO9b˛’Ú=J&„}ŠşióiěHt^ż‹)ź¨ęŘű+k"…óä Hwqý9ŻC‡ĘĚđŠŘ2ť=N”Ź<„ńŹ9˘µ<%;’¨&Â`č(z%ޤ©É© !G'Bč±ëˇI9 +©Ł6•l5ľ<ç…t®–;Ł8K7;Ô†&x#0˝V”sĺ[ hH5 tCßgeśRˇhÜ&˙DůÖ0`P]ĽU±™·wЇ<4;QÇ:đg^Ń6 +ÝLT‘Űc*ň2pxQŮň3=·l{Źý˘´áçîě[Ź!>B§!±Çţ¸3‘§Ą €ÄSxŞŰ؆ę˘Rg. ó -Źw¶UOwGĽ'S7Ú=[ßlf{D”tŠ5Žş3öd^.(PazAö•f‡6ď>±–¨: ]‡ÚA +*şm„ćâM˘3’:0ĎâIZ»˙»ˇ"¤Ă@Ĺ+$÷BŻxD >@,ćť CN¤&HK¸uÉ6%ب°v4AÉHPŐ‡ęmP¦([L˛CidĐo c`ąę˝×íÄĎŽv#?¨0š\ĂI§Á‘¤Áe…,’}w_íđ–QnűŚň)á‰ćĄů~ü}GH.ňżeéŤŕ\z&¸ˇ)vo¤‡íÝݱŔĹ.,öi¶™gzĹh‚% *@ŘYÉż… +đ-‘¨eŁô[ޤŹć=~KČŹr†2¸K´%Čäx˘RZŞ)‰w 獕ŰUV)ĺ©î6»!4?¬ęíéĚ ;ÝŻ]Ý'3ś"WźěB ‚TÝgN 7ŚU~÷}G«%ł©U=.Ń +ó(¤?aŐ<8Ů +Ęź4„’!¶úPRq¦źľóTŠ@°µ7AĄAgř6fĹ{H°â +AL­Ł€¨ZT°NÎćkŐ•‰ŻŚXî$áŔŃUp ďÍ şn7.Őü,ëž´¦sŮ"Q{˘EÔ—‰˛čHTU+“?S-]Őý, &QCn®ĽË Qŕ @ků]¤Ń„ż‡F ˘‡¤îő:Ó[AU`‹ýouŤś; (ź\$UStçaźVť\DJOą +†ęťŕťWIż“IΖş#ž9`“pÉd7ŃhRujWpĐËa‹^ßÉEĆîȬ@řh(Śşa¤+ň;6 +ĚĚŇC<đü»Ě\m‘>J¨'MŽrŐZŕ°×ˇÁW…ý5ťYRŰ–‡ŕúČÂä˝Ę6Ë!#†ĚĽW»Í|1»łSÓ¦‚™ÂAň‚ćT"´ÜpJ˛ÚIżV‹+÷ĚÁ‚±ÎA"y .(MŐ}R:v âGc­čţ°ëzĎ˝L@ńůDvĄŤ-\´nĎük<SŻÇ!Áq üô–¸†÷†¦  µˇŃC$R×ÚĺV Ý™ě:ţ®/x` ŰeÝ›źiH…ˇ'‹’.rî §‹!Bç<'»®*Ző`çýHžNĚ)&5¶AŚń”‘ťĘ–ťÚÓ“ĘĐzšT’…OZéI!ˇ~áTAĐ@{ĺ°ĺó«Ţ«ÜIĂů9睢 ZŠXKTwČĚŁöŁ"çÄé¶đĘ­qÝ f‘nH"ɡ:ňʆӕ˝_ç€zNĆÔiňBa1Ň+ŇÇÎ<+ (Đâ"DG¸™Sk˘đ˛NMym¶5fńŁ Ô4ńC‘&Ŕ:(Ů5NĐĘ Mr·č®F·0M/ü`D‹…łlćN[,ů Č?Ű—ĹÎ-¶÷ŚÄoî?]úX'nŘ3óŃđC"ëŐÚT(‚ąËŔéďÖ4Üë&Úk'.މ˵káăZă3n&ĽďÖ{ě=·S‡ŕ—ěŞăÄ(w¨ľé®5·9TĄŔäyMÍĎř¦L‡ApZRöČ$ŕÇăfż ë&o†ş,ŢŔdá0 ŕ;ĐŹ&WJ Ą>1-µ x)hQ!ŠČq„ŰŐČç8úT‘{‚Ë'w üdä ™żqᑜ»- Ôd (@ +=Č»SK‡ +řŮx u«W{ +>^5‡řaéGTB1s6ÎÝ‘ źĄRSO͡°±µ˛4LŇa­‹SŰŁ’Cďh‚ć˝;Đg1á“ő~Î…?ôd˝ÓtęYý‘Ň’G źÜ_Ťkňm×’ç[éśbZßC#pIuTÚ­ł=Ůő”×E»Ł‘Ž’Ě +ŮęŕŚ†GÂĆôs@0DW,vfGňއPÖëÎÜO9!Ýd"XCÓ‰ĚQ)Z4ŁĘbÍäł˝9ˇčK#Ś „°>ű]aH‡ ˙5?AÔ;˘×<ÁŚ'ş[Ł–RŢ4R‚Z5t +ä±đč*‹ž-dW8żônÓ-ŢB®ňô©Q´h¨Fu¤5JŤţÎŮ +“Ň»=řfŔĘ@Uɣ裞ňq›Úś@r@¸„–şÂ1DGnÝtIÝž24 +t˘PËę”%#ÓB?E+ ‚+x±ńŤ( +´ ”O¦ÓÇ9č´#mżŢLCćŰě`Nę¤TĹҢ& ™FđŚ–ÜČÁOÉĽôŰĺ‚=äĚQäôˇEnűjhf÷ŠŠ&sÍ–ű8Çě“ő`ľÝ?N˘@J°Č< dMXĆÚčŤEŚÇŹ\SŢ~g Ň zîNK‡^O"ĄV˘ˇP®Ř*ĺž…VüČCZF`,Ł4fŃgväb ”Íw]=,@řIkÎvĺ„ÝĘâ/ɇ?ˇ9]BŘČŚTq`ÄŁWw• Ý×@ ô…KD"=Ţćó]Ä^hěÂ,ĐćĚdyTŢ5=óÂŐ’ߥ‚xÇpÉóDŇ;Á n(ď,¬Be&iéÖ;Ń qň˝2^8ç ut-PĂ(ŕ6Eçëpu¶6s{žr¬#‰c¬Ł:lćÁŹF‡ęđČEôä,ÄĎhĐ,p)8 '<ÓpÂdł5Ó9 áżé,ĽÓ¨D††=UA€B”XO3ŁGb*(°|mQĂpŤÁí-^Hd-&0Bč˘Ěš==*qę­Iۤč0›/;Ç’ť)ŽkŁ!ł°ąUę­#ë‘wóp3Őŕ ż3KS[3Đ@m>­!gŻěÚ6łˇŐ„ĆL܉F¤Névş‹ŰbĘ„Š8€ť¶&ü¶–^*$Ô +€@«cŇ(ÓKČ‚ĺőŽ"@K”GĐ—_µ*q3|#Ě §ěZp%fu§ąŰ)ŠŰ3łčQ‹8ś….‚Pggą3n(R:ŤYť‘ą„iîZ7z†! €·ö§'˝@…9ľ(–%*é˝éhD;“О1 TÂ9‹˛\ÄaÎb5í •¨ôš Ź«CÖ‚@i=¤FŹšž—µĹzđ*ćŔ• EЍ—ZE¨…|ć©Ř/!`›˛]’@Ď~ŚáÎĂ(.ȧ’&r¬+DôQ†šźŤ±­`6ÔĆ$K"#5ˇśú3A/ő˨Éo6ÍĹBć«5{mňĚĐŤz‹čéđţXĺ\a”č 4d˝^}Č}viî©fýYHč"ht}`©QĄl6P %î×=߬iNĂŁ~ Ęą–N<‚LU]:ëďŽ5 „Áű6X<ú`\Š2g5dÜ:Ś2÷şŕŐE€ë"v'{Vů pGŤâPϤ·đ<ĽWeLů‹ůqr F/RÇXŁVÉ*{F6jŮĘă©©e@CwµŘ±]‘Če|Żŕa‚ ?S2äüh@·ŠĚ@NڱĎ6%¨}PŁ%–Ç=Tl[,÷¬Ţ¤qOć»6ÝYş¤ŐţŔXvľ0O?\v)¨ŠI#uĐ„Óx¬eđ÷â–Ď”Äyó$Ŕůθŕ÷+!­ ŚěAâíI9(4C@Ć…ęŐŰŞ¬fai4ĂČa2&;™Ŕ In—hNĘv ‹ćWľDh0«)8ŤďÖFZĎb±çˇÚóhî3¬Äç#čX˙@Îqr”ą]ż_>Óçyó<şŽ’~ş ¤žoéŹ;ş„Pâć«ŃýĹ­’ňŞÝ·e%›µÇ4?ÉůIĎ‘šéhŚaCrť[tźq'1ßóđiĚřă{ŢéŽQţďŘ0|*­ľ1…y(ząčGe8•ĐEµ†>Nă°çqÚłPnĹ*ă˝1Pč řh*iD ŞâÉŠz˝ő D˘´¨A(”ô€˝Ś,ńtq„;Ę–žÇA“zÄ·@Ën  X +fdx\!:äÉhöçc\oöĹâwÁórçËgHaµ=ł­›oî™Ć-ÓúIí-ˇˇLĹ|hśVׇ=‡©5Ě,XűG˘Í4ś{ě=‹şÜ«ĺ&€&2,$™Éăc¨4LC`٤‰đ宋U›Çł-ŢQqg ů騮RŽč˘§Čƶk8 űÔ˝‘ uř"%Ołŕ,2ŐY×<Äk]×čjĹ$l˛pF}ĂĎEgŃb»ŚłŮ˙zŤšpź1XHşFČţ!QÚl;ă0Ľ%™-Mޢ{5rŕWęȉ» ü©ĽhLC‡Ü‚˘»ů1»É)ż±ĐTči{GVu?¬rRCC…˝ď—ńgÄŇYřüšűY3›ĹA/"ĄáÔgڶUë~0w4g·9‹:ĺS‹ĐÔEđę,ÚóŚÓĐEĐčɉ ó‹°¸)3üŕC-ís o†h+˘ä‘‘ŹE#šĆ:.‚!׆L®‹¬\F_ÎBŢΨřĚ#ă–Ńsó;ÚŞŹÍÝg0lµĹ4bJź™GU-#Żća@¦/)R%ó…S«ĄŰ;1$=­ ŰQU|ÝłŚZ +Y”­q¨‘2hLŹkĚ­®F›Ed‡>¶Ś˙XĆĚűŮ1ó˙Ż‹z+Őfłpj®u}N=¤ŮLŽ„IwXg(wĹĄź0;—îÄĄËqŤgráż\x8§ľ,ű·Ű›™Ó¤˙‹Îě…ÇĆž™»uć~ź©oH’ĹtŚs5řËĚ=zn37ĆGÇÔέO)áLvŃ„é0'™=·Íę33űíÜŔ;3*úĎ ŚkLS[޶¦úÎR~iačk—–Ö}jf"šŰff&—9ÎÓ$čEn°R¬‰ć’ Ą­ffĎYX}H4˝’TŔ@¬Š% Lm4Lís»ĹLm'I_$ü΂§š,ąÔTŮť+ĂsEŚ"ŐTW›©r3EáLU ż*Ąi•CŞŁůPçú™fŃPĘÜĐ» +ş5µ4ő™EÁÍyEΩ0uF‘ďýGUÖ­>}‰_)űyQĺ ^F—4=Pô•^ôŕNM˘­Fx­h[] ç$&‚˘-ŔAů4 KźďFLbJëT|ÇŚÜĚtŁJÚÂś±¦, ŚÜNzÍD‚Éť =ÔLă Mj®`š’5 +>X´qKÇ ć\´ÎĽł¬zŘö ¸}©Ö[‚d•ä5¶Â3†NĽf¬6¤NoDŹś¬Ő往nwf.9Qű>#Ľ2sRXqŻZÍŁ$L°ľ‡ć g5„NHC5ô6ZzëIEÁiä +ëŤ l;¬Ąˇ o®ŤÔר ˇ@“dć륳i5>ŮkJłőgT5´”,O=mą°ˇî +ź \kśm—f'’Č·şýçRߥ'§§9n7ĆFP•c¬1ä%–≠+ăúN;–`íh‰&0cŢ ŰÄ!5˛SĆëô ZËś…5›r´ćËiÔZC®Űsku%źs¦çȬZ2Ż^łúć™ X}ü»Ő7˙YŠ@ăF |Zăy«W$•鄎¤ ˇLČ{/ś*1°I®jĺ(ŕ_Ç›ßW×Ě1ߦj›h E¤ÖÎzËT·S?Ý‹f ÄdŽł[CŕńX2DE䎊2Jp›ňk +Ŕľ¤|^Aŕźeí-:Uyq Č—tJ–çś_4[Ő™Y*DAŠíR/»Ň25˘…C* Đ2@(šč…} űĹŢNóh†9ĄkkÓRÓćL?Mz-{›!Á(6ęŚAIŹ9®˘,7VŃĆ(Żh›±QÁčE~MT{›AG´«¨ü­Ż9r–[_mnQLĐ9XžtyÓl]gŮ đň! łĆđˇ­JVZ€…,d†ęŃI50Łł˘á¨¸YÁZÁëg˸ň‘“u_Ö›ht‡íݤ&BśÎ4ęd…­ŤZ;šłµ%9Şó¨8&ĐÍżít2®'9†˝ …őŞýÖµ +Ęůl Woinèë’ęgň€üî“5ßÓi@owš0Ǩ¤ˇµşt™@Kům stďÚśť©Ć ę‹›~b5»ÔŕěâŇ©źµ?˝j'ă( ©I”Á„ô H}0ŐyTéÂü‹y^ŰTŔÔNő]Ă T`v–Ć{R ô–¦ÄŻ8oEO*XĘT±<[Ć•Źś¬űr‘[‡,ŻĘĎżýö÷źŢÜN; ýö[ôxů¶86|±6-ë:·üůňňő‹‹«ÓŰóg«żŢś^}~W—™Ćú×75vqͬł ˘…+¶Üäž'(B=ó›ń/t)…ËËě‹|dš¤ŽćĎ-ż`ńe +ÍĎŹ?ä?5ăŹjˇč5sČ`‹7¬ýĐ“ď°3˙Çď<[}súěâüęvýď¸AöJw+˙÷É÷zŤë˙96!qBT}OŽe_©ţ{¤Üťč¬W¸úćĹňeBÉ»í^– € 'r¶nj(%"¸h¬0o9Á'/¨z{]EňmS7}Í›?ţdÍraLre„b·"nüâ‹Ř%A#ç׾xë}ěxszHNxë“,™?yňá^×.Bu`,‹’VĹá€sµ"¨z׆-pž4›ؽś§Ş^qŠőôzŽ6ľGů˝ńş–D¶EQ×ů¬żGůP7~_hŕ ëő"ĐŘç˝H˙:ĚÖ“RŚ…Ů/‰ä#oi7 pÖÉá˘ÎfśµNLÂO†´ůš@ń;źDDí‡&ŢÁJ“ç\”-ŢŤXŚ[ł¶>…B:ęK5“Ěţ×ëbű±›ćř sžÉišpß¶1W0>Éܧţóä—Ł¤Ţ]ŘŻ¦0üWE˙©ö—*ĹSÔżËoă×t #đÖf°d”»ź8zçŽŢ<ÉŁ;wô¦-™ď ĽéŹ9€§ĐЍ®‰#ąĘÓťü}ţëÇ.ç?ů»‘?߬yG&V‡˘crxš©ťíńôŻoúÎ=s|Óúę/ÎÖ˛Řȧk6÷¤8ÔÔ°ÜNđ|fčŻ}m«/M‡rňďŕz:ÜÚ\rn€&Ë2O2 “ż á:ŹÖĐZfçfĺčŰúÝę›Oç÷ĐCOZ}ţŃc熯x:Y+ühq,żývíŚŕ öŕ·ßľĺ.Č[ďĂoż}Ëťří·W >˝şľşG—Ď˝Ec_śŢŢžß\ýáç—×7·Ëmbűmłúý“ëëËé «Óď.Ď˙ôú♵č}KłŔ7×gçŻ^­ľ«@óVVö&‘k4 5d=ë€FˇŠT›BîŚÚ7 \!"j1HóšŰék„7±ńr3]Ö.1ľä©}i2čh>ęä®Qk>7™óŃşIO׾ň”S»Đ ĄÚ4Őz6čDá5˘ű"•{1„Nł—L'ĽvČ|ÖěÎş1‹OŐł]3ŮéŠ×ěĘýxsňMt[E<€‹ô.Ĺb1®zFřŞOjú âĘzj,!®‡©4ńď˝Kk%t‡„-‘ąŁ KSßök aäŃ7w+˛©`±mz8 +fţ묭{B”µôÂKŁďŇđÖŻ 20ŁM&­/Gźčš1 5¸kŢ~٤ń»Ô´˛w—:đk‹|ąCp.˘ĺD˘?PĂ5|ďÔĐČáHgŰökRĂwö±Á˝šUÍtiÚKµĽw b"öN‰X6o=ůáńnř]eé™ŕ))ŠôhŞŃő[T‹ Ś9ŤQ&‰" ¸Y¸r\@ÍWíN»ö÷¸˙ţŐ™v{ŻÂŚ…mĆş¶gM–¦ŃŔ¶gXĎĂŹŚč­żç“\ÓC–Ĺz.ŽŞŁ]Ŕ¬Z9ĆŔţ:Ë»ŰSS‹a¨‡Ŕ0é·ű^7 oNţŕp×÷~µí\Č)÷ąŽ»(w_žnű»Ëä/ˇ—>ÉŚ#bÔDęŰ$?‹ 5ÄFKG„e5Yś._+#jZ㸰«T ňČň +CöaÔťţń¤Ü°l7ľďďG‹ořöÉhýźŹB®Í8Ă5©dRÜmí˝¨F°/l?y>2)Ça.ţ\ÍŇČL5`í&L˙>}=ąĺܦ\ýńéât¦ëć›+WĹäďśÔřd=ĄŮꦫ­˙¸ö<'ť˝¶ź8aćóąëŚźľfΊL«×ş*ţciF]ZÍir…ř3ZŚůeŰ5 çC1ŘÉvTółë`h´^Ż\—¸űˋᄏľÚĐlýĺŽSďΡl6GmÚŐO«87ś“‚˛ËCJš58íŮő 0dŘ#×ÓŽşg`$R µn3ŠLD­€Gw×juş,<â¦Ôľ§"Ňxä^ˇ'Ę&$­§PQש\Ąb ň25AŘ.¬/ŁuÓ´1*ĘőZUP@˘GËň‘ĚÂö¬ +ŹÂ(¨›Ć“ďo]×Đ÷ă»NË‘!`•pĐ•ŕD S7•g†{°jaŤ&ˇč§c((›µ(÷®Ź–z­ąÍ€!É^čÉÇÂ/±÷Zľ‰lX\˛jY&81"ŐŻ°!l•ÍH5Z›ç[í¤™›:„ńZZŃ +ř÷BZ5 •›kX°7vĄŕąÓK_GxFčµlżŃáéĹV,ٵ4cŹÄwë“â Î°ŕ˝ŐŰCíYž&°±L"2„Őµ‚ĎM#:- (€B}بŔÝśa˘şüÖ…Ź‘BŽSřÝę÷_ÝŢ\\}żúřÉ“OĎÎ^żřňúöcíÎüŞ!_ýpúňüÉĺůŐ3!?TäăOONÖŽűüôö쇿]?9~}S?ąó•ţlJjܱČóěXci…/4őŚ Ź&bKĎ‘ŤÓţ¬3; ŐÉu0P,y-iŻ× ťTXsu~†V˛ďÚ[;§xCzëg€ĆlŠÝâ5‚p IG5Öś‰ĹÚĺ,{†¨kłŹňűZ +äjĺ™ZXš¨Őrž­•Řâ=„X_Č%vAgşJTˇzĹEMÄGg l ËW±¬Vhzy{pĚ_f6Š_Ŕ*‚–/ÓďÓţ-€‰e’Ř;µ!™›‚Jhn·«ízÖ‹Ô^$Ř;”gs?ÓYă».ĺ»%c;–ŤJŤÝ-ľŇk“ëز1˛Ů}›ŻVZ1ˇń Ľ{`Ë^ąHřę‡29ňšĄi<Ňßě‘Mâ´×…HÚ¶É I+ŰDoW«KąB„PÂztĺĐ +$eŔ/9bfčM‘PoŠ”RZ-ÚÜěW57h}%¤ËjwnÔ±Š¦vŻÍx”l¦m=X3Q’Áˇ #č1ş'XÁgŃL’ˇ¦*Żń‘űď°ŐšĎÖpë°—®C~Vy;Ó¦±GÁÍ-'θ"ĽËP(ŹH­)ď…/"›Šw‰EE’ÔXh` +7ńG!šŹ–siآ̮ĹÍHhrśCKIn0Ëaíńke3E"HkťäŁÂëń O.˛F¬°3ŁĂ,ĆÁsŠĚŹ%Ŕś"¦PxF Öú p{@4zĹÜhGRo…4Ń‘!ńŽkě?żŐk©ö=a“®}µ´´06Çkˇ•ÄZ”ŁůŽ/fpmDó†!&3×q-µ6ăavąč‰â!Ţ–z­đ©’pp¬ě»Z  b&šzúN±0v–64ö„eiÇb­ÓËŕréhĚ=?Ľ®u“›h1HZńl”§…šÍŰ٤v\0őł­ś±· +z 9ĐZK‰&ňä‘°é­Ž ¤şµŇŕÍK)`‹RŔť¦`¤dJVě©Q¦/XŰŔ&ČÖ"}uÔhg!"3ŞäŤ$rG[Ćű©:˘DrĐ6Lę Ú>äLÓ’GžŐŔL9J ťëôCJhâĐiďÖ; ż˝e­XÚޏs‡â Îő¨e9+^˛Ü&Ö*oŚfjםF›Si»çZmÎÖçäVlž•đrbdŁ*éôQ$d­'ÎşZgŞhj«+Ř23*Kó­7zĺ‚vµBP–â&OSłiťeÜ•ňwcetĐń……!g8¨¨‰:iuŠ.X{ú!tĽPě2ĂŢ4ĄŮŮ %nµ;Ľh™c-驻ϲžŤŁ]GaH+$ŮO쬨靥ĽłŚ{é1˙®Ń˘ÉĘJ!KSË+f2˛š%©É˝…eĆŇN]ě´ŃŁň!®=$ 5ěQŹŞ'ş zjĘ8@‰6&­aáPLĄcíI–Y÷Zâ h©MŚQÓb¶á_cËžâů;-ě/ČcŃgŇĄ•;÷9{„‹2ZŹ<Ť‘ť-ÇzĄmhÇâ憙˘„"gKSíš ™µ.lh×k¦»Cv_FLy§Vř·8ĽŕÖÚ®MÚ'@cĄ*f9yçä)xÁ3ŔŚÍ#–oŚZń©ëZkĘ€lDMĽ×Ťb—DZ1pß:•V;›a "&Ë[˛SĐÇ5ř"ńmŹ#tÔÁ;&ŠĆc ÎzÝć\µ$[łs mČşµvşGf€|Âę ĺňg©yšęË.n@ęZVš ËóěJ«5˛ÎčŃ'§Yć±#eD?©H®C>©ľçdQ^CH–ôÎý}ťŤdť-—TüŇl,jĂŹAáV^ů ™öĐő&Ź’ŤăfPĆ÷č'ĺň"«tD`Y}PŃ™©ĚŽg´"yRÂŐ ‚ÍÝ™ĂÂx-d($VQ˛±ÂŞ5ć)BBP쩹ĄĂĄc!)‹\gíZ”ä1íŔ›.R¶věś } Ő|Tµd{-|¨kĚ3ů(4¦%“%-Ńţ€vAŕ™Đ|¬A•-Á˛ěŠaňň`%I<2şDÉdäzŃÚ$›Ě¦ő65×;&ą°^ô5§x¨xŤ m–]DEĎbE´2x +)¨¬§nBöőPX?™ äY1MwHu-Čľ"'ë–ˇěŃą=¶BżZ oĐ– lăE1ť^P"0cfR“”·r{(¤n”Šë[#–‚Ú qmš>äOio€AËPöąÁú© +ófS +´źZľ@)Y:CĎZe˛ęĆ:‘Z7Oá ­J»ŤY#ؤVKÔŁIeÔŹ­˛ěľ×S4ĚôĐUşNȇxA&)č׫r=»it*"é6x-\o‡•Ú¨XÔž•ĂTüoŮ›D«Ôş~s[-ęX8ߣç-˘Ôł‹9Şb(VpW,ë|KQ«é‰ ęt{Öłˇ ä¦S~ÝfÁW>G›»2D´aSń€r6¦ZÁKsYMá§´«m¶"UŚŔćUĘ´Š´“¤°q%=š=tŞćö(ń„)°‹,mZ-«,w}_¨Q'ËC=b2&{O÷˛řŕÔ"%?ůRĐÜ03÷¨‹˝š«Ŕj‚KšUmu–ٲ-W§´••E˘ź`šňěÖ÷*Şr¤§>?T·¦°ýŰA˛áë8Ó_ ’ăLíňއ»4ş"ŤE©Çą—ŞŃMqĐP$'©rĆrý@ÍAĄ"ĚLŰ*„ډ¨ŞV3ÁHj¸‰b‹­YH„łĐdBvÂl ”Le`…dx SŞ™Ů˙Ą˙´N,°®ž¶6YˇÓşÓ¨d f-"v`Ql–ľđé©‘x`R-jĎw#ŰîµÚ9mdÜP%˘­dWłÁş:tŻv)ü{;B“żPćwBö_Eďlřµ¶k)[~V\7dĐŔşÜŃ÷Şq—;Q퉽ňÖč×ĐR+ě nçMî¬ü•ăhiB×f»±+‚[oQĆhyÂěď¦ÚŽk“Y¨őÂęÇ„ |ŮE!˛°\bía i ‰Ş=úĐ ĘČ‘§Śzçň5˝}đ<Żč§Xi&Yó·B}ˇŔˇmµšW§Ú?,&Z{ÖJ ©@íŹtŰş]Ó™eÁ Vo˝ŕ´r« P*wŞ‹@ië竏 Űąµr—H]ŻGĐ[żZz ěXX3”n]6›ŰŇOÔČÎŽ>Şśsjô(őOYF±4: +z6žt¬[«Š”FÚüąMtôÝŘzÜHŻMnôŢő‘âo-5ĚÂ^{z´*4 c•K’Ôžb(+Ş— ĐĺBĆGë:ĹtŢá#¬ľ=ĂĚAT0“é!`+ěě3P=ą……cĄë-Ćţqͱő.ŐžLüT(Zy’Ą¬Ô[}I‰ž‡Ś«®şµ‚ÝX‘ұl-.gŽX¬Gě ßč!€ +*Zlż‡ŕŰ˙§ĎoĎo¶ô&lě (Z—sšW?-S›~ÝR»ąx±úüôćŻV˙÷ăź.nX G_]^śť˙ßß­wsć„·Í«t4Íj`{ ëcVý~bżó?':¶ţąwUŠęu¨Ľ(ŹŃ€á€N´haVrcémE‚„†HCbŐ1‘Ĺ…iA)g—g˙ń})Űńęö†HđßżăćóOxH“”şQZ•ź/óϡáĎŞV?k}I–š‡yÂ5ÖŁaP¸=ź,ĂOd˘V¦'Ş—¨ćěs*˛żŕWE&dwç,Ź]ž§v&Öyć9ĚçĆ1őĎŐ<ˇ®É¬„ĽČMcÝHQíndčáôpVQf$ržČIÚ¤hń•d9×Rzëçéó<™ŮfóĚsĎŤcęźëy˛,ĽčęŞk§ *¦|˝ZÖ÷ĂNF™«0éÔć>;":¶ă(żß9ËgI}Ćf™g0źÇÔ?WłDí%aCČOA‘A2 é ,h´3ŽŚÁ¤"ü ¤˙Č —ąFhĺÍćó<ç™ç0ź[płźëyş¦%ˇń]lŘŹJ° F™“Mµ×Aô~p-»"*îŢ9Ď”çéŞ[Ş[TĎÍ łź«yŠç‰†ŽľČěpmDM´ÚHBDn„O "Ł%Ŕˇau˘Ç†»Żúq[.ű8KWݡzfÝôÇjŽA0Źř Ѣ"î,ę-5ŚüA$…$D|sÚ¸ą{RťMŞş/Őu§‘&?UóR(´1ÁTßDvčUΉ’€˛˘1X$ÉĽDşˇ_;lß=źŢćăĆM/Ć8 ×M¬&$ű#k—ě“Ú×Eŕ©SuĄé`ŻD#`—Ë7Lh° ů·Ü¸CŐ<ü0ýqś’ŐłleŹDaCĹĐNŐ˘ Ř=ÜuMŰdú ~2¦fł™čő˙¬mg@ȬbŁőĂ)ág!Č—yLýóPʧiÄĐ»go˙)€Č˙Ę„_M‹DĽ?Îě8qŘŚŘ˝ľO,î«KđÁšnŞŠ8@´Xµ&ú4{Ö:p(”.@Űü¨7űćB#qĺ'»cL"NH_Ö„ +^žGy”¦ +NŘŰWuTúvň{ĚM (&{"B»ëÓqČ ¤¬ÝĂůÖŽłŚtÁj&€Zą~|4†joF¨zH8ó¨_UµgŰŔ€Ś2Wjć=ŞĆ<0u:PKëƲ‘ŻĘ‘¤ÎϲŁ?˘ˇE@v™ŔÂ\źísh¤˘5Q€Ú¦Ë ^7Ó—¶Ĺ€˘âw4ćSˇÁŠ tB"¨O†Y4ßçgŮs@t ÉOۇ€â1̢O˘xšŹă‰ň ÔmŃ×˝sş,ŞFůŃ„ú»şŠŃĽŘ»ÄćË#(˛ýoy¶@Ű”?‚"YdWdilBrLśMĎ룾őö ma–'Ě.íĘϲg=őß˝~$Ż»iëB ß:ťžv4!ć Î$äŁMDĐx\ú ĘđE,¤É7Sűv¤‘ŚDĽÖ@f1Q(ý@€öCľś}ŁkÓ6A+. ńD?ČfŕxÝËíłÝ Ą¤FČGsh@ôĦwŞ@­=:ß–79ů!5Úůľ"M®µ-%©Ő‹őYWťv\éŐî4îÔ`»Ě˛®şń­˝Î,84Ö¨8Kqä l´ń†ËúSĎÚL†˘ôPAHG¤Ş&; văR„g{žéráÔ3tŃţżŽöžNOĂü°5Vçü¬AŤňö¶ ÔQ+ręgcľĚĂ8cHýĘÔÉčí BśŇ‹v±şA!Nơď™×϶… Óű®Ě©ŻAZHËęňëBĚDoÂdĎĆfp•¸üŃI©' ÓČUCyp¶ň‚CE‹¸ädióÎpĐfM@GYJ»öMĹvśîFq¤ţyě\·#Yęí&ĽkY*+íĽž÷‹ Št¸őBí.3”ᨀ–ĚzĚ)-Pn y ?T´—´ą ąY:É1|biL¶®Ť”, #4Ď&Ň]8y\ăEř‘`DZY6gÓŹłA·›v¦ŤôŚrmÝ0¤a¤Şč3‹gër‚#•¨ĘK;ű•UŔ·Ah—Ą&Jq€h (ůB[ +9FüP– ĂŁŁĎĽ@Ű50Ćae¨ÎZ›jůc 3đÚLA#Żě°B(Ł÷D† PfŁ#¤>ómÔ ’ÔĺC#$…‘‰¨ź ĐĐ»|ö2n†.+…T0masiŘź<ÜC™~ç:×WB]§Ŕ6eJë;©cĽM6`„¶)Ë4¶OtđčG˝ťXăÇ]WĎ÷äxěöŐ‡Č(č*@Ę=Ç~ş ! +—™ŹŘgČ +ĐĄ.e–˨€´—‚§«U÷”R~aLÓ®Aç5yÔEĽî3zŚCł˝€ö©›|?ľĘŃWމóĄŔĆ“‡ Ůú9P„¨v¦Mô-DJ“zx"Ů4‘¶L«™~zĆŐ"2&‹±›˘W¶L –Ň>.ˇ4NŢ©MŔ'_VĹźŘUéZH(ÔĄ„‰zX!W Şwf„–-Ěo÷ą|ur ezůÜâ0ŁAsf¸UmŔ·cNŇŰÜZQą¬%™a­AŢ»ŽN–N®C© ‘ÉS§iôňT©¬¦ĄVRBĎŘ„hRׯië +óĽřŔĽě( Ą4 +Y€ŔĎ1ŚÂDýsJ;–„Ţn»–„) µ;43@ó†ĆÜÇn(ŢP…dŁFo(zĆAg4ű˘4Ž.ű‚X@…•3Ăm:°ÉÓËZšúňD +±Eg.ť±Ď"âů¶ľ@Aç<:FYÉŕ(vĹß™LkË rľ0»ü:3ą% ®7É ďlÍ3š,ËA@Ů3Z*ĎhŮ3šĚ‡âM&yň*ă”Ő.^`ŞB2ë-@ćń¬čĹÄ5ĘF™őŔȦę +*ťAőʨšĘĘEŹůa—ďPĚŻ Y9ť2ÜĘ5Zä˝áíĵ¦$ä¬v­9Ýýˇr­ib'÷ K´UP-ůZÚćPąÖZąÝ?ćřV }µňFʶ9oÁ2“Ç3óĚb8r{á¨äˇÄJĘ'çěŃĚś˛^AFË\4+&ŢŐe~ŕň7»`|¤ŻáŚĘgŰ©‡¦3°zS‡3(?ŞZ}†–őSýç](Ţ\÷bŐp‡ UP +™b'űşJaSbG„±l®FwÚ äÔlÚ5d<ô +š}k F9ş|jLÇ'h4¸{;C@Í2ďMZě‹őŢgą ź:ךBś*ď+ÔO#Ş&źZg@çRé^ŢĺĹ˝¦éź\ZvŻĐÄ˝6BłyŽ˝Ž(&<×ŰZ'¶>—Ińč^s#ýËŠ&7­€ňî1…w†ÁBš( +Uú,™,eWy®Ý +  ć_—5ęngVĄĘż†®Ä­ t9HP9%A9´-"© €Ć`"Ű‹q ’ŤfŻcv·~7Śß͢Ď8?Ť|ä*Z[…VBĘË-ľĚ,­M¶F +Í·Ö@‹ĐRÎĆäŰľ6ëf†=zŘŕJHv{JTL›Ń5{ŘjPŤ_:"˘’Ř ş¶­-d‚׬5˝]ÁërM4îfzɢ©Ó[5«·~í¸¦lĽ\¦a!Ă4Çúq+ 7•´úČ\¨č(O¤ćŰNe”ÎgmĽŽ‘™ +>›Čᬠuh«BöÚƨ¶*9´>™]”ˇŽ–)'Š‚ .±| Bɦ/QŽdRđ—ý®®\¦bí<ŮžŁ5GŰNýs ;6L˝Ý„wmĘeÄB[ ŔYĆ]-#h÷ĐbÔ`+@Ł›·c1€j%lÍż±6H¨ÜÖ‹* QdµĽnęśF?ÂŮăön~¤DyhÇnzŤ=ĺśvľď,.Ą‹ËTaŐäc„:ŁZebÄ@¨ĐMiVĐî®"nVv¦«H FtdШ†űX¶€Z·Ţ,Öi Ę3P!ŕ7€Úś!Ă”I údĹLhł¨pś™0¦ ÍpÔ*Ž€tc8m«ÓťpC-B +ha›Âém`a®Ť2¨ŕM::t05ą~ĽgŰä#ÔĹŮÔ^?ÚM-A;Z7Ťkˡ=4 €)Đěsí©§R|®GÂťŻś®=­x“#˛;Xź#+|P±dAα@ŤHˇ›FRiÝ«ĐNCĚP™Đ,§cV7"ČDĚdQΡ­E`¤“Gh2k˛’K5f¦p.U ü,sŰg{CéńujÜáwCeGŃrGőŐÔĆe´¶ µ ĺőc"}ňÓ˝AJ{łŘG?ša ”KŐá$Ń áł ÓcŰŮYW Ő.*§ń:f!¸ůÚ™ˇ“ĄďW‹ď†~ŽÚ  “;€š.Mn +r™Ľ›_4XŹRuýň.\ďOůČ •ľ&×>!ÝŢXŚ^’ȶHÁh˛ #´µÍWŹmEşd&´‚OIś@$__´l›śĄ1»ÉEhZ"‚ÖĆ’ë¤ĺ–P2* ßv]ś0 +LÇxoĹQұö$OŮü‘;Ő ‘ŤŐPăwÉâ"*®Ň›.3óÚj¨őG>›,¬¬âĆÉbđ¦ĚĽÜ§ 3O–k3y\Ý4•Ä,L™™Wç®Ad• ‚˘„™—/­×óMJ?'wY ťŻÎ8 U§©$X ™ +Ť`‰đ~Žo¨pkdj4* ™˘ŁŇ©ŤJš=KŐŰšVwŞú,#€‹e(ĎŻa`ź®ÂČ[erMĹ(GeŁ«ŽęKfŹ÷p‰ÂŮ2)UG §ŘŚd¸kňRÔ •ŤńvŐ qgjh!őůmyź«ŻVçQM/ü 3ňáłč2A®j &Řhů‚}ťPş ¬MF}p2 QĎşN«~4(lߡňF§ĄsŮ”¦‘«(˙¸d]ŁĐsgR“5X×-Ł"+ĄĎűHŤ˘PFUaWC¨»®äđv޵…(+’>­ ]ňişäÓ"tɧuˇK>ÍC—|Z„.ů´.ti:°ÉÓ›†.ů´.tɧEč’O‹Đ%źÖ….ů4]ňişĺr¨â€4tÉŹErD’O‹Đ%źÖ….ů´]ňişD]şNç`č’O‹Đ%źˇK>­ ]š lm‹çˇK šIóĐ%źˇK>-B—|ZşäÓ"tɧEč’OëB—|Z„.ů´]ňi]čŇd †.ů´]ňi]č’O‹Đ%źˇK>® ]ňqşäă.B—|\„.eĐ$t©—C—|\„.ůIU ]ňqşäă"tÉÇuˇKĹÖ§(E,‹‹Đ%ׄ.ů¸]ňqş”AÓĐĄÉ@ ]*¶ŘŃęăšĐ%ˇK>ÎC—|\şäă"tÉÇEč’ź9ĐĐ%ˇKą»’xÁŘ$×….ů¸]ňqşäăşĐ%ˇK>,B—|Xş4¨NlˇKÓőćĐ%ˇK>.B—|\şäÓ­ ]ňişäÓ"tÉ/«:¬1Jř¸Î(‘ˇGŁŇĎ >5JLiC6#ř¸0JPYlçĄQÂ粓·ÍŤ>®3J:3JI§F‰ š%2tj”<®F‰ÉGÔ(1źŤšŞig[Cµ¸ +´Ć(1îVő¶™QbşőŮ(QťQ6JLNRŤ41Jdŕĺ H\š%˛mj”X@»ĚggF źF‰l«›%ť%ŔâfF F @gF ^Ö©Q ĄQ‚rßÔ(Á 75JdĐŮlkÖ%PeSia”ŕ—§F Nqa”ŕZ¦F ®xj”nM ť%ŞťÎF‰é‘dŁDuvŮ(Qťp6JdPm”˘‡%@Đ–F‰ůP•Đnčf_7&-ŚóĹĐ(1Y´Ú&[3‚–F nöÔ(Á#™%˛r35JLą¬bn”Ł—%¦”5ň9´3yn”¨ľśÍśâÜ(Q¸Ţhk¨°«-ŤŐŽo›%¦çQMon”¨Ž×ŹězŤQbŽj~Ȳńş4Jd`m”lâÝŕ…ŰĆŽć–Ę5ŽőJ“p$4(hĐ «c™Ú08Y\hŃâɱ:č$F%¬‡Ěš[Źf +WŐrU͡şĚĐD˙ß­‘âm¦»kEŇN•hP™(’v +"ÔléX¦PL±z{t4Q$#č.dJ§S”šŻ¬ őe¨<ĘhÍÉ@ŤčŕŰĚ[¦ŇžHKS°š‰"™ć€Cv|Ź ŃDQAc*Źj˝ál˘0ťĘD‘•L6îr]č4ú˘GĐPíÓ5Aő0dE˛ŇP.Ô&ŠěŢsˇ(´Ż‚ŠŰ.Ů* Î̧Ů8í2ŕB1Q$‹%ÂşF úh¶PSR(ФmË-É‚éŮ +2Źzt]( + ­ľ®˛P$Ë´ď˛_;ď{6<´ą@¨-šUÔ‚Oü2­VY2f2(ÚLĚCQî[+3€Í3EůÚ@QAł˘-ą·ŮBŃj.şŚŠF[nF1PŚA ĹđĐZţóSOüĐé!T–ŚAooedQ®Đh € ZŻW±P$«1©-Ńěl»F˙X[(’é\ěő’ďhÎŇ/ŠdĹ-ɤ0@ÍDP ş(– wߏ ńhP50łĚb˘HÇÖ•ŢW&Šdî‹…"Yó4€Â2Z(*h¶Pŕe¶Çf Ŕ7mf…Ýyúb HÇ:ĘŤd1)ĄŞ­ ĆV¬ÉúZ±ŃlľĆťîtmśČ],mňä´†zÔlŇ檮6N´ůN×٢Ż3ăDk¶¸éZŃĹ0%'ÚăžŇşđ™*X*ăD†lśhÍ«hƉ6 ˇAif~4F»îŮ8ŃćS ĹćP‘ŠĘ8!űB“q5q6˝’Á¶Đr­´FŐŚW@­y.ăDĘťDB1NĚYíƉh!DÎOĂJ­gm†•6şűˇ*ăiŃÁ˛oÜhšUbSye¤E]×V¶uÍÁAóüg% µ¶a†őŽ‚đäń–bľ«Kj‰j7+Yh%ę’……1ŤFP=BKŐBkg]U-lsű¸IŐ¶7¦¦v7®Í;ËjC•M0¬śT-d›%˝“ ŹL_k¨š]]ň®5Â93Ú&Väżh´¦ăWÖ‘Ł7šPFČD‘Îбlˇq©ŞjaŰ4:‘IŮÂÖĺGKÖ‡IŠuéÁě`šF–6©­Žy ĆďĆČRgRE–şĽQ“ČRÍ}ru98MÂruѸšD–ŽĐYŞ +©óUd©¦O8?Ť,u™Ź‘ĄÍH‹ů„‘ÎO NˇÔ»ž“ŔR­đçfµ 3Ű©júÁP!Ku‘"&µ v“«Ë joW—$ŚÍPFŁľmE5°ł_§ݬza}Ć Ş3ŇŐĺ sÔé´|aźĄµÉŢhŤ 7/Q—ü`‘YĘŃt[W/4 +2+_Í•»±ÍřŞą>SPŤ`:bb6-Třš™Ă±Ű”Âě´±Ë=Qó÷ôšďć4¬Ô%;Ó1¬tĽ<%¬”ęÉěΧ‚ĺ•C"k;UXiMÂJGh– ó–WaĄÎříTuť&· .Ô0˝eŚ®ĎBűś‰¬•'˘qdÁ˛ą mýä'őÁŮ{r"’[cĺ™D_öfbP˛Ąi +őföíěZhµ" >ëžĘŕŃrJ˛y›KΆöTÚGhą}2Ń´´÷™ ×†ö~Črľťť7×suÂ^;KPąfqލÉ@ôŞś8~†2™H±€vfN?n­}ë)ż­ĹúA×kÖAőŽĐBŞ´~O¤ĎŻ+ŞáčĹśççg\–1b‚V››˘—gÇş%"işŇZ´îňÎĚËw—ÍÂŁ†ŠĽ´śąÍ+ÔŞAăľÔPŰŔńmă.—ŻNŽ#ŁG9µQx(gëÔ*¦ś˛ü j©łňŕTĐ ť›pÁÚb¬M×Č˙§!őě~µ‰i"Q´t" ÓúË ]Ń^č]„r ‚u˘^$m+_ç"2ŻçfÉĘU“‹ŞeDq‡ +Eł#dţűŃ® ˙ łŢµ7' S VólTâ›``o†{n5©gŻXčc, nhwż¤Í+c9‰ü‹Î5•č™ŃÓ|R3Ę´ŁCM±mNa.ĺŕ©Řďm&íµ›ËĚĚŃľ',Fßde´Ŕjî2‚ Â•ŁŹĚĘ ¬sľĘ Y`.żUsĘ`3^ 5chĽ6h0Éôę‡béoĘŇS,ćŚđĐâ…č”g‰;˝âO4Ś—N—FŹ¨éą¶â¶™ďFgł©÷WłĂŃé<\]ĺ7Ę–ŁŢ›BŤZťQjµMŠ:”‡¶1j^Ţ8Ĺ-ŞŁGAY;*đ5™hÓ۰Ľx‘͂װ_L3Ň‹šÚtMĚiŻ!]mI{ź’uXý´Š«ĎE>mö”,ČżhăâŻđ;/˝Ç*ůĄúă0@äKXçßóíH/ăätc*I˙ J(}şúP=ˇŮ|ęéĚf3›Ěr.wMĺ 3ÉMˇďŘLg›éD¨Ýt ·Syyn’Ýq}JÓźl:Su%K,ü[¦G6^µ ¬7e|őSČo µ/µz[-ľ$ăźRI’ż´ŐÜőşwĺ(ő˝ŮŞŰMń„?eŐĄţ1łÍ(OAŞüÉő]śLSŚŚ0˘¨/(z8Á,C9’®ŃBM@Š3m¨Ś^5 #jĚ.Äń5Ž­yZľ_ăčš`ÄÇËüQ jr9m˝5–δŢÄéÁŰYąŰ[?—UŤ86´“e„Ě6°š"^9ŽŻQ`ÍÓňý…ÖĚ#&(Xćż şvŔ ąÇ„±oGůj:_Ţ69§f<§9Ő34kM$”3BśUćˆLö6´•0éÇćŔ Ż^>AÄË/&žÎ>ź¸}µQ´N~‚ńŤ=3ÄŕĂÎtÂß×=ăÖ}dÝ–Těývą~ů‡Šű,Äë̉\HöP‚o4Öâä3n·ŠYą>–!ěźqiegfĐ §_ó QyńBמVc÷‹űĐúÉUÉ:GßvICů»%t"'¬{&®ýČš}Ú™X{¸Jď*íDň>\Ý·żş˙‚đ†mBÍç[jľą ŤaÝ÷ę[ą»ćwřŽKżč–ĎŤ4eí-3!qq'—ožßĺ»®˙r-‹'×QšµŰ4Šëwp iEšuŕ ÷˙.ĽX{Q2Űîş“ ypÍ“k®˙Zä4asqeÖ|c†şwÝÎ5ëš?ąŽ¬Ý»])W‡Ëöđ/Ű.ôżĂĺţu/÷ŰëˇwźÄÝřµ†ůľ÷ţÇGżůí·ż˙ôćöł‹3Ěăôć—Őż–Vż˙óŐíęăO˙ě§··ç7Wő|˙öËËóß­ţ #ÝĐÁ‰‡Ô4N¶ŮY‰kĽŘ(n(w~Őu\ôďż!>ąľľäđôĹĹĎç—_śß‘­ąĘ Źż–™]߬d /Î÷Qłúg˙ÍO9fěő2xlő=ţ“oč7żŕ·˙-?ýŹŔčT[ý×7«g †|I‘ŢZűnC37š§Ö—ľ0ÉĘlőčŮi ôŽçÇžR0ł´ŃňąÔ3+ ¸óď=Ą‹Ń­>Ó¨Őąíµ•µ*Çľ´í¦+ĘŐpÜk@4ľŃT”ĎŃds„n–tĆ·-şRČ´:ćĎ;ó=”Űcu¤·ĚjŇ磇âUŐĐŽ}/WD¤¦2µÖĂč)[ą0x€_ŚIh«·¨*™'ťó(őŻm‹Fž±ĽÔ´®Á\ş+óaPç4[ÉÜ=\Ĺ`uyŞE +vşKZĎ ˇC ‹čZ”ÖęW(—@żp7¨2)Oy¶ÇąŇ.´GvÖóXĂqÓjä’×ÚH}ÔĐ]ž+ ď%łt{ŮÖ3ď-Ý_öhĐ„6BüP¶’ÝzvŹF5Sěv°g9DĎöđިżŞŽŚ čѤᝬ“ŮQI¬‹Öł•›~q(@4xfłäŮíţ‘#€Źş^‘ň©bŮŔ5Ęj)(‡N¸t;ä¨ńAdh!CŻCčB˛qą"Ç|°qF_tŤ…,đZ‘>"• ńm]'˛BO‡oLÖłNćÁÖôěTĘŁî5 ý˙gď=Ű’É’Çáçő^×~‚"@ç ‚dDQP0GB$Jôâ˙ŮźŞ:ÝĐD˝g'Ü3ż{vwVşOźPąęśS…ĄA$ ¦Ś&B’ľŇ¨&@‡ň H‚ytNĂsT€~Éşqb[4ŽO)TŤÝ”¬˘|*óR©›Ĺ˛‰#%˛şćH~*]8Ćg:UÇŕ +ČiÁś8>[Â1˙ +Ř ú±óŃô¦§X|ńĽrŤ/TŞUŻŢŮ-uE6 ˛áç0)Edc E0S#!üńX 2 oćúSt–OÁúHTm‹ËşCÖ‚l łăÂ'˛f&ŕ) ‡ËVQřŤ ‹ŕ·. é+xYšÔłŚb„jÔK ~¸ŁĎ3)Vš€żéܓ잞dřAĘ’Űb~,s‡=ÓŤCĽţ§AŁ•ˇLXx¤Źg‡X@Ď«Â3Ő*c‚×{eLTHµTvxTĆ+DŞŔôŠFgňđ™HiĘuvQSĆCVT¨+·ř2…~#á‰? J„ŽF%c9FË@E$jC*€ËäS@Â+j¬'–ĄL樆UÄÓłŔż’ĘîzŃW*»¦Aő…‘ÎÁNA,$dĹu!f‘xöŤÎ2ÔHUGÂyá@Iaě(×ôơP&z0“Ň1ÚÂ*ćuĄĘ#VęX$öĐÔĄqL±1"«É„â’UŢĄ¬*źëęěÚ>˘j˝ `$ (»Y ŤőĄJ¬˛±Éď”=d·î˙¶°4ű´ˇI®TĽ +¸g–zÂłť*ĄŐř›Âą®1ĘŁGŕ2¨ś)żD…]BSąyY1,5ťJ¦á(JĚŔR°šő«°ě§Š™ďŵ7ŠzúHd‚P[s”¤U3Í‘)ʏĺT¨[¨˛őĄýṞ˘Y‡^Ć +ZÂ|E–xeB—d#Ú78”HA"€9Z!hŚ`,‡dśB&%ő‘ćUˇ aŞZ´/±Öę-°:$ó(7R'˘sy SÜĎÖ€ů&tń§”ě™ĘSúVžyY¨6Y'ťĺŽG'Me–K@ŕč4´BhEĘ?HWHĚŰJ)ę—†2g€ŹILÄ ­ŇxRćᡠ+f):Ôx"3 ÝĚ +¦q,ç~‹¬‹ć1z[¤>E˛Žé4/jF•yhč#PZ3ŤUď$7‚C» ű‚9â^hSŕCa©,%‘iHڞq”{Ď\W’… +Y­B4ř`ŮR4†8„śaÝ,kńš*d™B€Şx"WصN€"™g ”sĚĽGë…ľÓÍJĐŠ)ďµŮ+NSÔ(ią•–]B×ŃËpĚö1ÓôŁó©1“ŠH¨–%~“LŔáCѬN©Y€!¬âÜNÁô‹‚´PłC— -ݬ€ŔîçTóY˘‚0[ w°zJş•âZă™¶Ç\ąôÄ,ţ§­ĺş©cDłD€¨ĚřŕÍ$ÂD0HŘšei#wSýpşĽÂ8G`©ąr b¨p„Ƣ\¦'ĹŇG ˘˛xĂĚÖ¬ŃęÝYZ}Ë~!m)ŕ;j4KŤ‡Qe&ÄX0”WXÓb4ł +*ĚÍÇ', +ÁkfŽBËu đ*ăuš§`]Cɢ3ÁÉ +Éđ5Ž9Š:K  +¦0š2¦)l¦/”(vBÜƲwjf"´ŤXîŰ€˛•Öç…Č“ŃbSŮÍ|"°t8Đ“lŽ'‹¦#Áë,L=™ puÓŔ™ ôNÁhÓűcŇТ[F˛l%ÉY lCö)+žc†WUfń!%‘b>ş™XH‚ĺAÁ(ÝlŮîs˛x3ď#â—˝,>ÔqdE©Xť}f?âCťś0ő¦Ä˘ëŚý –-Ü;ťkÂŰ 4ÔŘC– Ło4 JqôČh€BE¸/%°ŔEĎéfĆSČŢźůú|ÔYáJ»4V´•h9€1™gqXłvŠŽŮ?x2Y¦;S¨şi= € ‚;č|1jÚé3;Ě®U)ŢĚ*#¦ăÖ$+1,pL<ĎGÄ_L•AŞć˝O$N„<0łń˘{Çńs»Ô” Ç\ˇIňÄŁ"ÁA§n Ky‚*š™{Đ—Q%Á©N)…Đć 8íH (&P(†\)ŹęiU4‘¨›e”L8J‘5Í˙S a¸%‚d1JÁä|E6 N+֮ПFĄÄŞ> °PŰú±Íč›ÝDęá9ÖŚŢŐ(Ë…4Ź‹Ŕ˘yŃÔśčŮłéëtŰ™'†b:ÝßcŃF¦ItşÚ-Zśh^ĂăX¤›± 5îx‘{o1"îHp&™bÄŠĺtFWŠŤhĄ‚ĺM›l&Ł4*§3 ±ëĚX7šLTxbfE ˛âÁćgh” ĺeŠnrŠĚö§±p+m«đžAĚHf±…ŻĚî<]®äI+PČŚ#m’ŰŠ(pp^™/đ1$M9ë1„şÝ!‘4´EWt µëĘ,ş‚ĺ§qOŹ6édÓůä­´3ř}5^b¶¤… żň¸%lÉî Ý‚±Â˘ +Áň2ă$ˇI„‰Ű/c­ +ŞËe*@…§X@$ŞGs׬*)`˘Z±Şłâ…cŢLDčâÍE‰fywž™­¤ÁT&6pó;U5Y±lĘk;Ë5"Ą!ľ  ,Oî¸(˛ôôŤÎö5đ klďE§ ˛ň”Kb +rޢYŤ¦=ĎĘH,Ěę.v@,#XI±1ĆѤgjxşžę°.Ľ›&%6%‰Y*:fNÇ߯Π#śâß4űhg•ě 39EńŃăEۦž=¦h"gYŘv'ZťÄy"nţ¨ls | ™ÄŔS˘`V:Vqs \< ˝6ś2îQQHÍk†< 5KlłmIÓŕK?Ű=DÎEľ&Ă f€đ*(]ťYBHwŘ5»ŇŚáB ~¤TŮÚŹYĆ •¶Â¶żi˙NĆ ]4O4"ĄE RJ ’3éŤŐ_đčŤcS¦ąc TžAŤy…3+ĚŁ"áyŔUÍÜ`7©§Â”Öüh®V6łWęxßź6yĚäŽ$„1Ž+™lCixM#`‚¤3‹á +ž*ŔŤKĚ Qv™›4KAa•¶ˇ0ßüˇPžlĘŽQ!ućŻP +uk +ú ™§}:ü @!ŽQÖÂ+ŠR`´N!Ma}€Qw…޶µdî\j$ł1¬Ś´‰G0žKdgVĚdA‚$nCÎ$’Ć8xÇ`“¸SbşĚ’YFwá)†g5xX;†’Йij.c_ôGqë÷°5:@¨b&¤Ć 1óśw1@…q;xćúkصbF˘D4·9‘…fŮIQa;YŠ™3ZÄ šHźč +qPş˛jçt‘MFÁÝ@’(3Há¶xi$ÁŽÖ ŘťćäŃ I§@ߢY`Í ć/b5zđČe*‘G_Čf<]`¦–îEăFĆhL˝SĚAńu’żĚ6™öÁ-tŔ +b4 Ě…ŕkY-„vő0&*ÓR1}·D@Ňf(Ç(…jK`‰LĐÄ’ľEŽŐyĹťNşLĂÓ&dA +Yp × >XśčMÂĚţÄz"ú Lľaćyô§E:jD±TtcqŻC@EŚ©Ű÷>8#tfe`Ś^!O’D3­…žE¶±Čbz4¬ĚČŤ'ť-XŔ“H‹ŻÚL^ĄăJřÂăotťEÓPŕŃTă$†X¶=ŽÇÔĐ@°cpLbń8‘ŠhŞô…ĘŇ XTÄÓ+* <0GĆť­g°gK'Í($NÁ,A©ťç8¶iÉ>AS + ‘Ř6$Š4 a Ě`„ ˛ĂQ)*0[MJQc%\§` bx¶Ď ¨Të)hPW,čKŁ* t(Ě™p:…o0Tˇ±3č'QŢ :Â'TłNJh}°†˛{°(çpÉxňPĤŁx.rh«´ŻH;i̲ůve(x¶Ů ˇÓ@?5’ ;¸‚%g:’’Č<+Šuëłč2o¦Ę¶ä â‡;+ 3)ý˝@çé#Ý,µ@9Ĺ  j)^c‘G ʎ±(™á!A0 "+č†LŚ;Šxć€î_áĆn)+&ŤSpTfˇ­™mJ‡çQ7ńÖn‚Îjö®ěY{J)4Â4´ÂfňŹÖ /Ä‘H”0Č©“ÂFaܢłüA6‰ +ňŹ2·ÇqGL¤d˙,ŔĆFßO}X\‡{ić,x¤˘”Äß/*JjTSŽĘL}S‹ĚäŽęłŔ„yÚvR˰ˇŻm'™ÍĂ»–C‹2ďw©,±)2‚Ŕ±ĺ-E#A5Át +‚Ô'[Ţy(µ˛P +ˇ¬Őy`va¬¤ąá̬_rŁS>TÚ­(ÎÜ^[*9Ë”´ţ<7?HÎ9jŢp0í×ăVeh8zş±xHü8KŹÚ ŕ퉓0b]¤‹(@SśĆ®Đ€BĹđÚ;ßשzîŹ;U/ăď׋Aż8j÷'0ů@Ŕ|N‡ííoţűź‹!˝ÓŘ»bw +˙.Tßa-˙ýŹ7^T Gb4·ç•~ĄiŚ…QÝů>{é`o“•n·ÝU†­vÍlZ†U†˛c8 :®*B«m}±wń ~ű'‹ŤEÇő_~Şt?ý€uľÜ”ő±ĺL·2ů¤oÖGţžÖZkYźőú€řÖÂ0ÉVeT°>*]GŔ‘1 ‰1ÚţUŞýĐ̬Qß±>Űť†V“äÖufôŰ=GɨôB¬ŹOż0ßĎřĹ!Xź&l™™9Źuź‰ź/hać髟YČŚ É:Ŕn‹Śó'0ať kŁ+xřĂ˙ăTZ“SăżD‘ýV CqÄs݉HĚ®AßćŰU®ŻÉ´”_‘› ꯙJ˙Ż]Ň:ÚĹĺ0š·S;>!Çuż_éu‡rX˙)˘{x!ÝăóŰ@üě/Τ~ű +ĎlM^[ž"kí‘ţ&‹(ŇĚÄŕ"Ąw§Ę¦v-…[ł ă?YĆŤ¨M”4Ł™v„ }–e»ď`MŘcSËf› î„nÚă6řÝÔéšNJ“J­óMť$*ăvÍ>ŤAż>mOľö5xüŽP±2š¬íŞ4 :Ć·ĚF WÝÂČü{µ‡]˘É•Q€+_§·¬ˇ X‡™8Št ëĽ†6­¤H2/óĽ®ęfň»8ŕv.ŇFwˇŰë!Z¨)ŕMËŠež·űćĆňBs|fܧŚ!§qaéű3s83čÖăő÷éx‚s[¤ňËŇ fGĂJmyää ;µŁ]u«Ę ťĎ–lBèöüýŢżE¤^!ăjô«jT•˙™Jë îˇč¶0ťüľŘćx•TUÄôk:Ëń*ë’€7#@ÓŃ™wŚW Š ÚŇńp,ę9”—¤r2f±aŰ–žc/°ÜłÂôś ’7Ä6xŕ–}Ô!»Jăţ Á ËYřÚř[ś[ĺGlă }ť†,G3ŃÚ@OşĎćŠÎ© ŹýsčIţ­–ďÍřücĺ‰Ŕ˙–}Eěţ•ýŃF~Âřɲ4&˙L3˙ďŘqý_ĎŻm~ţOÎĚöŐü…»­˙‰#ŁČÁ|p¸•ČÓ}N§FÓń2 +^źÂű]ŽŔfcfúŰoż:Î+ăÎgî"µd®ßfoŃ:Âkó ·ťźŞ®&Óńßjö1®.Fm? kŠ-7dˇ»Ż‚Eµ 2hŚY,N0CtďýÉHV“^·ÝűżĄ¨eÉôŹ$Ć1Žľţ?ŻĽSŁÁĐQjUęźhď‰öţeĂßhg"Ň·‹|lĘZnů‹ŚóUMhAk:6ŠĄ|˘;Y‚źÉůÖ`ô=­'U«ÍěŰaĄ˝ôŐOĆČÜĚÁ[B–VVj›Ä4ĺăTţ'ă­J*™%IЍcNR¨–¨)ś ¦ŠÂ󪆡SUÔ%QŃI’Uٞćˇ?ÎÜ_Ä'ó“ěB oo ţţ-ň9=Śk]¶~yfWÔ+ŁÎÂ&WµŰŻ/<¨ŤG Ľňm»ŤßA`ä;ŃS´¨ˇŠřáş}_•ȋûôĂŽÝŔ\>úźë»•G•ţ„Rď3ť5k¸YeŮúúŞÂšIŘŃ`R™ŻčŔA'–sB‚tŘîíĺł +c<ůpňš©`ý·ĹM1F}Đk˙¶t&Ł7řɸy-NĆ çúÓ^r0l›÷ĺń–‚}hoŚj+gFFŁ býηn )Ł92¬ţ–złMwy¨“­CÝŻ®ĺÄľÖ:Ę·űĆŇó‰…ódĐůťü “˙NţîXđĺXĐ_Ö_•ţ<3뇶ý6mËű°H%é[ř KrtxCţˇoČŃż_Žţ “tňŹĐ·ß§ş˙ĚĆ]»˘ky,ľ«ńŞ.KŹE…řŤŞWfš3¬°p–*0WW×ţämĘ"ő‡HýE^T—äRé;ńxÍô°Zz3©ńfóo©Żo>01úěŔÄżFsRĘĄżńFĐćäŇż3Łŕ˙ wíG`űo–ŹđĽ2íNžOjŘ«mĚOKŇýş­śĂçu!Šŕ‚ĂÇ@SÄÍ7Ěô¦ +Ľ¤`Ć7–éMQu^—°R˛"I´,Eĺ$,ö(ČšÎĚ,Ü+«<†()W)[Ź÷Ń^JňŮĚWúâlńĹ˙S¬­ĂŹ÷¶ŐžÖëżů’$.(“Ůd8NU`˝’ʉ/IĄ•8UǬv"Ě +í0ĄŞŞ:'rXBŐ´Ă8EăE^Üô ęK#ÁŘÜBB<|bĄËcyôŘl’ç÷gŽ+Ł>ź¨q˛¬ë*ĚGS Tü\…Çś RŐ^9ÖíVÂČÖă˝Ńí~žuމE@»˘â˛p +Ś j* A$ňLh§đ"ü/›‰5LuF A{@‰Ö¤śO!;2Śľ é +Ć+€Gj#äH˛Ŕ% +śÎ)śµ3ŹÄ0/{ÁlĹ…lC$­ĚGĽAך t†7E†eCď:Żbĺ_.Ľ$^d +*[Ą, ˘ +Ö´ ‹<ÍK[(´Ai~— Ëö ۦ”čNç”T"J˛Â+˘ŠEzYÝnUŘi@8<íMU)H=˛™nqy8p ×óĎ+MŁ?©ĚĆäUđ h«ů`ťWěç%€1 Kjă’ŔF€YÄ_ËÔäW˛>.>ĚYDxŮqÁ@×}Dçgđç\€L$¶ś ř§X+ts*ö»Ç#Ň>z˛0!‹" ]qŘű&ĂŘöˇ‘[‘s4‰đ$“a UÍ9Ę!!çčˇ5ęK\Šg¤űCrĚđoź‰FPX r5UF~âŐÉś âŚWO„AeđŔň01^„żL¶_d7ünAä‰kd›ŠŚSA´,ÎE`ĽŠuĐuť–'ńČoĐ#ÓFIŞ,a]`ÜĚ’Ř\V¸b‘„5(łÍąŚ  H]]$UÓ <«‚ iČš¨3„q()¶ŕíš”˛Dkeď™A2ťé|Ç^@ë©H¦ +›‡.:ř—T‹bKi‰ÇuS*kËőx4;¶,YŇQćDÎśÉ2v€.@ü€ŕ‡5‹¤9\ľ(ě—tQD) +x‚•â×J¬é˝L(Â’č¶`˛i**Č- CP@R°©QŔ± +1R ĎPšk`Ś”2˛Ě\PDŽJÔ#×Ú™ź¨s\‰LöşýŃŚpTyĂÜ ?\ u c’ <čo@ÓŔ*ť a/‹\IĢő¦]ˇa ićŘ“iłÁç2 hRU]3Ä’hŔ$Ň2 +'*Š&0 0čY^¬PÖ`§$cˇtMV6Y°ŃxŞjAEY‘üĘzÉŻqޤĄą€qĆ"łš ‘í%†0x¦›†żÂ5Š]˘ń +±ô‚,ĐŔ(Ň–čRćuTş@ Ş@`•t´ąÁĽ@x‹Ś‹D]Á‚´"HŮŻ¤ě¨bńZ+Ń)IúĹ© ő ŔťŔ$J а iA¬ z4`@,^ÓT5I ‹°dć¬Ň'šB ”d™©e‘5Ô Š@°*8" ^`*Č. h‘—€CŔĺÉÔdÉŇeA\ŇI c3{DŔŃŮĆ.Ŕ|`‚űÁ[’RXÉ2Ç«Ě$Yä¦"&gúÔ` T=WĘł-ŰF™Eőmg 6»%ᏅQd€äg:(|ĚŐąą(p Á/@kݔʼ$J(VŕSšŰň¸HýËŚĽŢ‚‘ą s¶FŮÔś nĎě"ĐÝ2j‘¦ VťŞĚ;ŠDŻËŠŹ&.Ʀ­™s(‰ň˘üĺĐZFł×ˤ-–Řă$ Ď‘% D´,h ‚­L1I0* @Y[3«.›¸¸gs“—­+ĐŃ)śDŘóĚpo +38ÁÚ j0Řč¦ÁżbÁ,“—´&‚ożČeÂ’M#Ëî˝Jł§Á×+Śq |š›Ä˝‰(}Á‡5/«Kt±N1,"´ŚÄ€s‘–h‡ĽI€l%˛ŕßŔOŕ@ Ř\4IH<N'YĆď5P˘Š´n\䕼ôK[ćÜ$„“$[“m<N0ř!đ t@śÁŁ “QŔBgÚ‹·€WвK@ :rJrQšk ž9ź«B\ëĂ1ž# ®p‹Â +řJć(ÁRć ”ś_¦ń ­`cŔ\ŰĽ…ĆVExŠ…°ÖY¶·^őŤ57Ä©BsC&”lZ¨Ľw*\IăŔ…˛J·Ű`nT° °dŽ˘0Ń +ö€‚韨+ŠÔßz3HLšMÇFbkÔ« ´yžH ?˝^*#m~ :¨=Ž Q$ ˝D,Î#3Tݍ]iĹË—¤„%°fhT—ä•ň\Ŕř•“‘%+¸‡q&ť"` ’–hĘ!ńÄŻ$ieédäŻ8¦+°ěTČi ”Ш-‘8›`­2x‡d©‚°7 ,F@-ą5X»„–̬"hÎË`P©‚şÖ^–ęAlôš‰7ŮňËÄůäpč䦆”H‘Ż Ö ;S ¶ň Đ“h÷$. ´5–"zâŞŃż˘—¸-‚Cť»˛M] l3@ iv"@ ŘÜFfvbĐPâ"¨'â 0ŮxđšTV jgë"›ÜZ3TžMŽĐŞZs3sRÔőŔÁâť¶ ěěŘŔÂÝŠĹć F•~^™AĹĎ»Zú`ˇłLĄŽ5KJť_żĐ‘­ńĽ+Ŕl^-)M‡Ćňdłą;nÚÍ>ĆĂżĐ˙ćoŮp[A/Ŕ56żý¶ă¶ć3cőo(CÖÁ-ŢĺWčľ …ĐÜňĽŮQĺWÚ‰.6ż-fGYV/pú-Ő.ŻaZ»± LŽ6ŁĘ‹¸—C^”€Ň7Ŕ–˘đnh% `dÔ Z/ÇL0¶lD©KÔľf&¶pŻây,U¦±ÂŠÄ×ÁqXE‹Ě^§+ˇ¤RyŠrˇř]‰‚.řsĚ!]˘ř53l®¦Ł‚D—ŮI‚ťĂĘň22>‘ŔSCÔĚđů +ůę+žľ`á®EŽÝ7ăY ~Ŕ棉gKXن [€;…{—4ĺ4sSsYđ¬{ň)räąRIŚÚÍÖĦVţöÍÝČ‹îŕŢŚ€Z1ż˛˘.Ü`AZˇňëpc‚«Č« ťQ‹†Ś¤#·Z¶Ą š ĚE’xS4ĂäAÍC +Ď”5ŕ_§ü•ĄČéšđ 6(w´ęţŇp/ ÄŚ; †,Ěîň†Ś´â-o mTĘÚ©óC*łŁ(óÓ)ös+˙ýĎĹĐ<äBď¬c.ůöx˛pčż‹™Ŕצ\˝Ĺőß…˛9˙5ł+/^›]ľ °zč†Íćós7kWĆsěeé×^uĐĹ®ţ?q4¨ă1Lµ6ߨ‹N‚÷ĆŔk"Žě¨ÝŁßąnwÚk÷+Łî`.”ŹîŰ´{Žóʨ3vF ö_{žăŃ7ÄřîÍęËm\~ËŔPĹ—Ŕjú]Čqđ<• g§9EÂ0Űg ýą]§â}źŻÓlů],3ŔsŞ„[°xúOÚ|şÎ_ż´Ć_ż—ő‰¸>ÜÇ_Ĺ őgëűĺkÂę;YßěÚíĆőT°EňFcRµÁőýŇňV?únĚ’§ĄÁtT3)ů>ěP‡ßĹ’l,dÎç{9­ G8ň¸aÁP›ő_4FăˇA$ťÉřJ@I˙2™+<łLxË_•0sÔ’ä]nSž+3;ÇŻťŔ•]ęln–ănË’ˇVdͰĎ+#Ŕ€u|Űj×ZĹŃ Ńîg†Emŕ‘(ę†)dşÁ(±F6-ô‹i'€&l$*o~aX©ŮDŘşą¦{UŁţMsĄžł6Áż~˛ĹTç ¶ G%yëŚ3•š§Í§ĎH&îÚőW Ż%PŹIúçŔokÔçhĚ ts·Ý7ý3¶Ů4nŇčvKëuľbëłŇź´Ŕ.Kq{yđf‚śÍ pe¦Ý®Ĺ˙féYx»ÉDX2ÔAśT&đy~嵹Tńń†¦Hc‰52ýŇŤ±1™‘ą¦JŰ&`g Í<Xf AřM]cűě’M¶Ąé粖µ$ ďüj’ô>©Ě4±µÄÍ2ő¦mü üfƤү­łÎTGi:$Éç ŔŽÂOĆh8jŰ›2N l×ĆëĽűŮF2Ľ +ĄF$üř8žK­JŁŘ­ô JiB"×=§•€Ľ`±¬Ř1üA4qSé·Ç-€…r›ŘŻÖmÁ¬Ĺ8ţ/`7ayŞsxá“iýŔOlO,ĽéÔ&ňĘçSž­™tIżŻźëĐ2®âfîĚÜ tŽ>ńMlN‰ŕç¶;"6F§ĆI”FIS]-HŁE C hĹŃ4šűř‹t±„ž +™ĺąQf—k¬ócBć)ĄÄ‚Dă7vYZ°Xě˝ŇZ¶uúUĚ…ćQÖĐű ¬¶'˝ +ŠÁEG‹_Ó|Řěu‚UTdF#8@¤×¬ Ď";+_őđ~ŢŔËÚqó( í×MŞÖ ZBĽÖűµł˝eonrĎÉĘŢfTŤl«}ÉŹZę (ŘXeŰ °úŚĆŻĄ ăÖ¨QŇaµ'oé¶P|ň9~Výđ•ɲşÚŢžÖRé÷Ë.ˇ˝Ń/ĂŕŘ4a~F f0Ü΋[Ć®lŃ×u a}úY‹ń§}ÔŰ[ ŹSYäău-A…Dš0WᓦÝöpű°fg ŢÚ†¦ŁUŽ“74m®4ť †Ą–‹†Óşî†ă L´ú€ńĺhŘRËĄf¶€Ír—­JÝăít&tZk3ď×€ö˝L…đ&,^ŘŔŚÚÚ Ŕ7í(žŕČćháŐâ Ť6…×N-uŤ˝Ś>šćőŻ1äxŇ ‡uB]§,dďŰĆ˙.ĆU őÝĘĚpś:ë’Tí\ö|a~ěţ×G~ĂęP矬Ő2|ło‹řŤ¨´ÓŠeţQdEÁ>Űie2“tßö],*kÁ€7ĐÚuGőWGj&×h;°`U h[Äcň +/ +Úz.śŤűąâdĚ3°;ű›Ű-óŔ¦fËÝ­Ş9lF›O[ˇˇQ7ĆífÝöŐrK˘ÁŞą»µOjiW‰[VĆĚŘٶšîČn$|BŇŘó'*;´tĚp0ٶ l:3Ź«ěâńćĆŁ:Čçö°5ýfŃ“°©á`„eăě _§@°ĺĐÜ«ŘJÔc3ŘúJ#ë %ż^y`3ŞČ`ďmíĚƵa·öëW{űi‹€a­jýńV˛†Fđ—ě~Ŕ†UĘş•áŔa6üi˰düŽg‰a·4ú&ÍC_0áűuű‘>ź`’jk:Á ňŰ‚ÔF/Ć.“7Nź üĎ AđµűŤmĆ[Ůh°Ť©Y ąW+Ł­F +6ŮҲ~ÝO±©…/´}&|›ĎuŐ<,{ß_hn›řZO¶şŃź€7QO¶p¶©w{ { GŤÁ< '®·*»¶-ż †gßhVlŰŮkŤŽ18Âč;fÂ.ďsmhŘĺk´Ĺô™ýŘök۬pÖČŚwŚmGYÍŁH‰[Í‹{#‹‰Âr€ół€Áz™”)°%»aőe-iw°¶IWŹ;í!¨żţ6_~®Ó»ŰŹÍF@ ٱ+}Ň-ěypěłq­5­ÇĘé šŃeÇÉçá-†ŞŻĆ·Xë-.űľ#ĆŹVh`%Z¶>µ(ĂA?‹”-tf ”Y3ĘWĆëŕC.e÷€­¬‹¬Uň¶ŇŻ›§ +¶ž#`_ay'tO_ѱ™•ŻÇbüćÁŘg_í÷çÚýNw<šśď5Z–ëwx/ѱn3´ÔŻ o[ ĺńĽÂBücéýůŕ'xý:6šÄ]!‰ĺv ÍZkŚÎY¸ŘţĹčŤQèMÖ…Ľµĺg0ň>âOŇĚ‘ăp™×Çd°ĹTćő|ĐÔZŁAĎH ~îłë(«Ôłľ;`Yp/»?1Ź/ŕŕĹA·][>°nÖy/ŰjńЬ-Y˛Ł_íŐńRO_Ý\Ű S •m ·EËż$ËvăY•-a>›2ěüđżGó=8Ú‚űPq9>ĎÚł}«uV…őŃşS"ۦUµ{t×ř m‹ Cs ¦íŞň·ÚZ§ĽľÜ6±+Ř8 Pö o uÄÝ—çqe3E˝ĺеčČ1i3Âă<"iŹ?·Śľc\AQ‚Ôaçud!GeŚŹYI`v63čŠĂ.áß‹ťý::†@ěŽAßa0˘ˇYwM¬Ô^čŔÍ>íĂ“vQ3mÚ°Ş8ş•_ńŔle8vf‡ÔĆÓZ §—ë§(Ä1ÖMavĆ|řöŘ1íw°Gp»łŘ +ş®ŤÚĂÉvËsĆşŔň·F0|µěDh{«Áeµ]sŔa ɀ˕ŘîrYë)3Űâ‚ĐR"H›N_¦ÂüÜĂŮ&·KĐß`Ž|ͨýDÚoó¨f ¤ĐZT đÔĎQç+lűÉé°í‚–˛,iż>ÎâyŞĎÄ­íL yđ yó¤j|ţ#vtĽwË:‚IŹ“/Í—üĺůHĺę9g" ˝ďÄKwźMâ®RźÂ0ú»×_K×äKo˛%˝†Źâ»˘Çź¸8xóÇ’{×™¤1ÝŹŢśş[áZ­ŇÁżÚţt#ßbCó\¨˘ŽÚ;o‡í—Óz˘»{Ľůź¦ń|Éó đŧ-†QÂ7ϱxż¶×óGÎĂ!µ÷i«jhÜăŁZŽ÷wůY—µÔéř §îę­ČŐŰÉPĚźGĽ#ŃU‹=¶†űün,™;rߦt ¦rŹŠ;Ş&/ţŁ›úăˇPu?SżŃţ.,)Şě»-ŹĘ­rŮGPEź0 ô¦žçřg÷y*T9ňdśţ‡Łŕ‹ę…šŔ0\Ő•“č‡?š92˙:şMź±öÉôëM¸r@Áwś?M©ăfÄěč6r®ż_Ľ6g3†ţ + ŮZ%NgSxžO÷F®°•!Ń3Ů™H˝¸A%KĘň^‹—SďţT#tö‘®TövJőúňč$őŤ—[µIĽ¸S;Ź—I ®>ß»áŁúCúîíx:#Ţj}éĚ{ÓşÁщ…´űAŞQJ× ¤ĐoĹ珺÷ KŘ3 “~ĺý7 éî4ŤZ×Ňáůí1aI“Ű#0¸ŕO ô—eh..Ýz T ąŘ öG¦ŢLŞË'¸Sůţ•ĺÚ¬Ł¨RÄÂĺ‰+^>ťLWˇą„Mč-ěߍśř¬Ś2í#ŘŽ/jzĄŻgčK¶”«‡t•;ÚOŁŃg#áŮLDfŕČg㯧<ŃÜQŕ-,{LĺŢŐŠ)VµŇGď,^xIśg’ŤSŤăĎŞőL˛Ţ»'IşŮDW‰ÜÎ;W&ůČCâ¤ěŽ,M†y…T¶łkŔX—G(lD®qx;Xťďr»üu0É]U]÷‡Ą‹%„săA#Ů·ťÇ˘ŕsçNćë +‡žđô•‰ěÜ9}8µFm>Láín~?;y­÷⥷ÓT¨ńfXŤ˝%^>4c7ĺ\%“Ö.ď`#?—~šAd>\ŹrxźęéZçĂcŤ@ŚŇ­01íyÜˬŚěĹŻşĂ}{»ËĘ Â=I˝jíăg÷%Ľíi“čV×XYő’ůŹ2ż Bö=©F|ďeA%\e2Ż>g‹¸okÉŐĄ· `΂ć±}ľj5;H”käĺ-°řÝŽ?QDz/ÄúÉvű˛Ž‹sb“ręěě$9JË>zK«iî÷Yűňyl7Ń=傯Ç9ŁŞÚq{_ŠÝTCjńäüŠŻľ\ÇEŹs'-řv^’|6™Źá_Q t>ÂŐĂcţŔ›<ž=‹Â0‹±¦ô &PB&éKú©”ňÂ%ľŤĐçł’ř,ÁşŠ2ŞH] ŻĂ469B ŤíńIj6V[]Ě;bĂŕ€‹}ÄfÓŹÎľSśN‘ćD“ŔŐ@Gq6\)[3N TĆgaęm> ő± %śôşQé§4체Pú(Śoi!Çsh˛Ć8;Č~3|9B‰@:ćČľš9Ł[ńűed,a†YBűá5ďśB Z„H„Ö5˙I]͆ÎÎ'Ă,"4şŽđ¶˘…Mšţš­‹Ť:˙iRÚZňřm`ăül]szY¦\s5áak%˛ ™ŻÖÁu‰ea#K+ťĺp±ŹăĹé$çßŇŰĄQ-ÜĚĐF7 ¨ŤÎ‰—#0âkX&<›bq&F©š«É,©ßŻ‚Ű6‰­DCPG@XÎ:Ź®“†´¸Ź~1NL ÍF Y^)ď+Đ_ łµŞĘM°âü]4ˇďÇŻÍ308φKú#^ľ9ëgb<ßa˛»ŮW‹ěUlËôr÷(ó:)ďÇÂ\ŃéOßÜťXş-°cł1l–²eo‡Ť~3j@+űmÎŻCs–PöŔ&ô=nt·ÔđC>;;§ä%,.ÉOî Ł N958hH©łăÉ>LâŐ_őK×ńŇ$×Kűó!ďâŰn&¦ď-źăĘ7wĎŘąÇňGĽLɲ1­®ŢlŔMEëlq­6 D ×®ŻâęÓéUęt´˙¶®¸|ňś‹źÝ^˘ mÎíz·“Ś‘i敨ň§ŕ̵nw-¶űdrX®ö¦Ş×ĎĆYŞq9.…ÚĹG0©ÓIfŚ‹‚ëq»·´ŃU‚aěŢŇśPqqĚż‹2©÷Ű×dű] …˝Ý&ľű<€%ú¦ŞWőÎ.07›L ·Ô}žw…mööďr<”ýYŕ šj|Çl„K1ú\a/Ůňß'CíhäĐÄ×"¨\•P03÷–Q¦ŮńPŚIiikŕ·ËTăÚź©ťI ľzš±"ął¨t&Ä^Ž<ťMüĄf^ž÷Ý™tú&ěę=Í"ŁťĐŁ¦Öň§‰Ëb Vsß»0ÓűÝřĺEé&“ňŐ­sšx8µ3­ąüYu8÷¤—ÂCq“l=9ýŃěë«E_ĎA@cđ,Ń9÷á_lĚ™÷Ł2/‰ŽqÎ_ĚÜa˝×ĺP§\ Ŕćqt +׌ţGmPv&/ýÇ7•k„˛ źÝ»ŔĹl9;/ÄKŮú;ŕ&2b×Nťđ@Hx§‚„× (ÓŽ[ă)aZż ĂĽT Źň8ý:䫱đő^ĐTä®+ÜßăĺëĘ=ŚpŘĺ2O1¦sÉęĺPĆÓş™AcÝđł¦e‹Ťí˝}‘ŤĹ… ävNć%îIU%Łô)Űf‚lÜD‚ÎřŠÝp&%?ţčýóţj—_ŘúÍŰŘ8‘mH7Qĺtš +^ձË÷ÎLg•W¦ź4ى@‚áÇ ť +Ý…cH÷ŚPËxyCŽÍŮeSSśŢFdÔüB˘W˘Z[0G.¤Da*>¸ŻĆi˙ľŇ°©°9ő!A);î-vxűŃ7NŞÍŘá]ĆŢ“ßĚĹ׫‡F-~tpŻśPç6}n6ĺĽŕÎOj€Ă‡pĘňdc(îĽäĆgBę¬|ŻŢtóeĐ|Ç;éW®˙śj”S N Χq9L׊]ß’eF3›»®şK‡.nâĺ| ůQ¬N˙ČôiĽxz>lżh Ŕúí>âĆfő0ý Ýä÷ÁlyşÎĽ†[ˇĺQ…čG0ÝtĆ>ŽkĆüâkתĂf?ą90źšŃN+ď|2Ţî[zÇWó9aŢÇLĺâ¤/‰nŹkŃt”čaá>ęüęâĚv„hŞj—ýŤ­¨Éa˝^ýXmňHqúĂ^&i(ťx9Uá]Í­qÂÁG;vX¸ěŇěÂf…–hw#R»{ćIťÇŻĘ±ŹUqŹ“íČů8vŮ­(ÇĘ]6y‘Ľ9ž™ŤŠĄoÔŁví1•«]Ň­0YÁţ‹Ű Ę„»ĚxOŹóúÉSfbČ&"@ngJřl'ŢH5ÝĎ’z8 &ÁHjďĎ»bć öÖ0H{ŹGľťÝW$ňŁt5ô0\4ËŮÜ´˛g§”yu{J°B˙Súĺ}Rٰĺ*Hł“t5±ď…aĎýâcĽ\ö8Hć87ë7oµLÚČ3‘lý|Ú@%'îL2ţ ¶c,‡ŃÁLę ,ĎÂŚlľz'ž.ÇUýŞ©Ko‰,3Áml‚zˇ‚ľ”/Đ?(ĎĚ6đÓĘ7ÇťŘQtŰD‰nźó¬éĂHtö&§ éŢu}y’öľ´VÓţ[čĹ|˘a:ą pOŇ;*±ęÇS ‚eŃ Ä>ďăלß}q?»çë¶Q#gőT˝§,ěxŔÜĽ ô ťć\3‘€Îó +Ö`ę,çÂ@×'L‹÷™7yÄ÷«çţ~î5~¤ ŔAâđă±fëWÜ÷úŞ–Őkű+¶»´…gÂ!śńćzq˝őtáΤŠçĄĚîP9sk4cbâAš3ĄiÁ_s»‹6ăjÉťŚĂ˙NbG oý0ŘʓŠó´J‹«ĚćîÄ%oâ:íWźQ¦đËđâĆ„ŕŕŔýćaJů„ŕk”×öÁďťÖѱ>‹Z…}»kµŤe‰úgNáVĹíiń%¤*ĄěSv7ű¬Ńt¦¶Ć“|ćH ¶Cö mu’ ­ÄÎSÁBëČFĽQĺ`Ů÷(`I»ŕiÄş´g6ôÚŤąŹ§ś^Ű×jŹU ™đkîçŻRš]•덌÷,«Ű1M${ůäĆÝx©:l0‡RP\ÍDĎĄ˝Ű ¨ŘÉđcĆžs}CĂÜŠG5|Y(ĆKÓkaUÁČŁT®×Kô`Š]%óvľ«o¶ + +‡GčJž×óîő8· M„jéęŕ$đI»˛çö9]yËą=żÇ¦łg”fłIŽ/îÝmŰ9€ĄŢl ¸˛VT0ŤW@äÉţăą‹™’&aú>Ú»Ëx¦C#!Mŕ +CnsÝ©IĎ«8 ¦»‰÷÷b,•«_NR§^o÷Sslç)Ţ­ôČbJO<9§5ô)nŻ®±kóëŚ[ÓÂąëH}ńËýWĐ™µoÎ§Ó —{Ě-±…µ0[jĺĂ‹—ę4óö"ôŇÄŮŢüť "F¦ ă$vąÎ#čŠ;oŞáş•ÉŮ$’yíC‹Ă´_š€‘ńľzřâ/᎒7˘Ż/‚‘ UâŇŢŢ@çoĎBq-;žŕ90ôr•»ŘŘwçJťť>¤ŚŁ×iĚ#x“@m7† IžBĘaµŕůęçř­Ţ×ÉIćuňČÄöŚň⎞Büb +Ëo(‚¶ŽZ xÍ>hĺ§tµżM5eO{I’Í„%żfŠ›‰,-iBž~Ŕ­Ědëńč#/Ɔ‡çăé`1š¨(Ľ~•Ş%+ť +endstream endobj 25 0 obj <>stream +Ô~;TSŹÄ´‘~häŇł&5)ď—2¨«*q-taÔ$KŚ­ř –ßNB™Ô4NŰ›—`†ěR™~ü4jٗ脏¦Ů˛Ôe„]iZ®Ď0ÉhvzéJČľ žłI×SM›č4”Ý&¤Mđ]ÇŻů7%úáëŘksbď(ź>xN8á[ˇ7éĽ@?µhŃŹýÓTőθ¶‹ždď_‡o$0gl´ú3™‘Ĺó@Ć­Ś.OŽÁ :}ö‘ 9ÍBŞÂĄw‚Tu¤\ë!`ŮëĚ.ďďúňę uęlpö5°ĆC^ąůhÄICdvóęáRçłĆHiĎCłźj žýhZř6%Bèr9; _âg>mNx¤`/]›ş^´Â‰XÖĹÓpćőŕćpy5łŽĘéÁ’*_ěč-Ůleöp][ô¬ˇ’Ť>Ć!<2RH=·ďÝ [ßsQpxZą9ź`ÁŮľŰř<ł—ÝÍśôf~xP·;ÁÔ©ß-ۇîNvҵęAťŽ%Ü +ÇćăžËŘECîh!Fţ¬ĆÂ/iĽśT_Á3­# +T⸑™ĎŽő"zăáXřů:ˇöse>őÜ|0.PęĆBVo :Šu`Äö¬yÁJMg<Ůüp~Ô)čôč7ŠrÚn*ĺŔývˇVż^ŮŃ›·#ě &‚LđɶóqůĆż_űHq;>©|Ů™ÜçÁečąŔ¸®f1ܺˋ˙/úßŮĺżĹ#y)JË˙ůq;§Ó™žęĹÓÄ«ó>SˇÂ‰ÎTvG‘D©qîÎ‹á §stË9=Ňɸ­±‰ŢÎś?ý¦î§-ZăożýćtúŢRNçţžËéôžşĐC—óéÂoó`§]ćxřcg„?Á?znváŹÝKř—KË&bF–ÍČÓÂrěćůĂěíŃĎô[-wŠ?Ăô3!jácüY`ŤËµCüYŁźqíRÂ^v~׊ď řËÁź(fł{ÁřüŘÇV®+€č…\ŕçi0Ę!üIS•Çcř#ŔÓ[0…FřóŇoŃ/ţQérBhUGô“­F‡ą)roŢ4ísä7¸Ăh Ε9 óÇűb"(ĆËăÝL:±/Ľ˝ĎéęÎá#ůf©ł©řBP#xŠ$)ţ¸ŰŮR9ń\Hí<ro7üŐoży†;ŁŘ +Ĺő˘~ 'đ9ţ!QxÝ0Q¸ßy`mowF· aíĄ‡ř9a•&qY:Öħ‹ źMÜ?\ĹŻęÇžD:ä–hFŢ`óăĹźŠv"iĎŕn?›xRŢťĂúAěăľť°QÔĽŰŇölAÝÓÁLsš9Ęä +ŠrVĂ#–'‡ţôyžÇH“ęOç3Џ3­ýö[¨szęe2R-ľ<=4Â4ë©Qí=Eč?¨ f3 2ĐBg ż¤öůëĄůś‡să“Í)ČwđůîOôËG<[ąG~8¸Ş‰®Ľ[]8Ö¨?#ُ.Oaěüô+ňDZhdăü(€G,«–S‰óóč2bMŚţFÄü›ÓíăNw¨Ösşę'ďNgęVâ%ťÎăÓ ÎÔe"Ě·˙ěrú.î>śű‡ú>;Ă.41ą×űŚż@Î4î7ĺ6ĐőIŐÔđU‰Üéqş<χN÷AęÂą#ř«Î]¸Ř)`0ŐąwČeťŢăîŁÓ—. śűgá ÓV‚óŕćĺĆxJż;Ő€Ďj¶#N®WĽtňcŐpŠîÉŽSś^+NŮstęTÜ/N•9µŘąčÔ3҉óđÚůâ ×j&gÄs«:ŁŃÓ‚óř&ŇtĆúĽß™8ÜO9“ŹîWgÚ3ÚqfŠ1çÉîđÉ™+ ÝÎ3ĐÎ|e÷Őyqě÷9‹%缬ĆŰÎRî\r^sw×Λé»Ëy78H;^#čr8źî®UçËe÷ÉůV–śŐ›«’ł~7Üq6ęŃĽł5¨LśwâěŢ8…`ÖůQ»ýpN„—3W™şÜĂĹ˓p{\ŢÖݵ˟<ć\ń;Ż„]"Ţa\ňűá©K»ŘóşÂ‡ý'WtŻr䊍î?\ÉÖUÉ•y9“\ąç\ו:)¸ +ősÉuս컮'7e×==Ĺ».×kÉůęŞö`čF8'¸Ú×ĐAĎ=|v ‹úĐ®É޵âv•F;nŹtÜrűÚŐ[w ¤ś¸yń^sËŃďÖz•±űč-ÜpÇ®ŢÜ©‹Ó‚ű¤ÄeÜůŰNÄ]|ş”Üĺ÷HŔ}ďöíąźőˇË])VFnŁYęąß…łwĆÝżJ¶ÜcOĽąă*7vö’Í˙K¶µĂ…ĎŢwdçuoGzý؉ž ť;Éż·s"Ć;çţ[yçę`Ůą fwžB7ŝʡűq§q~ÖÚéĽ+;śd»ÎđϤězî.ň»ţéŘ{•ţ®2‰űwŹ.<ŃÝ×(íf[—­Ýóło·¤c»÷®ÉÝîK·ó±[o+»ďŻoĹÝaŁÖó8ëɳש_z‚žŢĐ#©®°ç°Č?zbí8F÷ş7éÄŽQîE#No°ˇßy]9ôF޵‰7ť ßyĎAFzËý’ÇűôT©yë§ĂĽ·›ŕď$qćňí%Śš/”ô}j>őżŚľěGjě+;ußÝiňÖ÷6pžůÚŃ2ăűčjňţnęĂżô<ş÷•çÔÇţń‰ÔŮ?wŚýKĎ ˛?0^ö«ÝĘÓ~§ýü¸?Ľ>ú}ľćł_ĐŻţđ‰«ęO˝q ˙ĹAŞëż=żů+®ń®˙ý\ ú'®+†9đľşB&wqp<¤Ç™öAˇ6vÜ?ĹÚ›>čU;·WżÜ vŁţ€zâ·łnc¸‘źÄŔŰÓíy Ľj¦Í.čO<žOµڵ†8LđěĆ{ĽÉí+g×'ÁîiżrťŠGˇŔŐU5¤ŐÝr(9=y 'bčáúô%ä(‡>Š/UÎëŤqâµ»ĂË• w:)şą›fę–«^Š2ׇůÝś˝Nžżđ…řHÉ×âsîśż¨_哾RĽv?ÚqAěů…č ÝÎ’/÷ÂÝ~0+ÔŤ’*|äÝ{˘/Uꋊä{“ň۵XT§âłľßóMMrÝpÇS +M’~)r¤z¤Ó{żKşŰß™HĆýÎX‹;cŮßŮźČú­ę’łÉä®|*řäZ ÉÉűŞ˛żź8V4ţíDÉ$B%Ą|UzUŞ]oWůĐď=ęţ“¤¨şŻNŕ˛/gwęMTč¨őŃ`_×QŮśnµŁ““ˇv–LHÚC4|ˇµĎbďş»tÁ8+ę ĎÍPżL·Žô7c8_;:8Üoß_f\N_ÇŮĂ{نp9’Â-üťłî ,%ł™p*µ7—SĎůpýöt/<©p·Gś×-Ĺ’ďíŁb«–;ŞhOľŁŹĆĂ[$p|źŚD÷ëľČEĄU‹ĽŢěśE†§˛=ČžŤ˘‘Tő9zq¶ź‹ľ>ś# D‡íˇç8HvŽŁŁçăÂ0_<®dRÇŁaEŹ… +ŮP,®Š{±’w׫÷:øóĺą+Źíxş~ߌß6oń÷˝J ÜĎÎ{BżśögCn”xId݉á¨ćGĎ&x±/&ăB>š,M&§ÉF5{“Úą›ÖSjábś:-©çŰV<5|;/ĄCžh;ťĐö}éë'g<ÝŢďÝgönßÇ™p¨Ąg.ŚÎu¦ZŚłÎC_$+´—lÎwĂdźwkçŮżotÂégÉ“TqÔ9ąkĄŁ'˝ýn3wP>‹ćâ>ß{îú±–Ě˝ëŮŃ©o*\śF ·˙´Tn=ź¶nŚč™·đ8>‹<ĽÜś]„g{’÷jŁű|äUŔSůŇ^|?ßşy|?÷ńΛóh;‘:{+ř#WJËéO"Î@h÷WŔaí×ö ;Zmx÷ÖźjzXrśßĄśî\ŕB‘{/Ť/;“ľKi,ŚĎav©Žt\x‹Š MÔ”Ą÷@W‰č`ěü-wňjŕöçÔk5~0Ľ8Ťťéă¨vrtĚ ¤›ôčéK=dîË™Hfs±VŐŞpĎą×U“™ç}¤¦Qw'ś®Ľqٞ%Ď |güíĺäáń~ý¨Ďďή­nĽ}T7ęâíĎÉť†QSč» S÷’'őËMŽŹ‚í`áIí¨Ű_˛©üĹüÓşQíWŻ7ݨ89p69˝˙ňÁ¦Q?;“oęGÝYľ?űđ´sT7*ÎćÝ÷O™xv¶r´ńí«_xTş™§[ţŃ_ĽŹ=Ũó7ϵó6ąűdc‘FMŕEzăB}¸łÝ8júăŮÄUÓ¨ź.>ĚLÖŤJĂĐoÎ~Íf1\őňÁű¸iÔÝä÷ŰăßőŁŢ™»śÍg.xTe3–_\ §ççî˝}_7ęâťŰ/šÖšMNţ˝~“׍ĘÄ&9~l?ľł_»ÉŰ?ËéäéćóşQíß˙=jućÉłłŞ[uąÉńY°ó|ňMýŃ>}LźŻľ¤Qó?•Q/gwNĚ/ĎąQˇbŕôďůËją[ďη˝Q߬{ËŁ.ÜXëîůßś6Ťú!xöăŮËúQĎľyÜéüľ¨ŚŠaxŕ—OâĽną<ęŢNň8iőmĽzřrľaÔë«—{;oˇşŐ.÷0¸úŻqÔWgOWľ5Ťú08ü0»Vè÷ĘŮĂąń§÷jG}˝|8Ó8ęës·'›Fý/xłtŚ ~ąOž}˙Ľ0W;ęűÓ‰'ŤŁžŻţ}T•‡Qż»|řđ ©őŮâÄź˘öµŁ~ŚŹćGť8ţ°°˘tÍr_\lďźcÔĹŹçYtq˘¸ó™F]ý[%O×áŻC=ęyąŔŁY€ţ{’˙ĽŕQIŰő6y~qő÷ŐF]şůd_­L?űďÉ őţeu­[O˙YŃ_Ý[¬ĐĹé`ęD=žčýŐę#źP<¶¶¶1jç&Qśź=›ËŹiÔíklÍŃĹ»+ËŻŐ¨÷ÂÇË•Q'^=zĄE|ď`oOŽ]ýŹ6®>cÔŕĆZcřö}?ÚĽł@?ŻnňĹĹÖ˘a´ű?+ߎGĺĂ›żŤ??\vßŢdk‹kw˙hüs"Ä3Ťß[wľ,™o_ţŞ!6{÷wßš‡7čýŢ‹W']ľýňńsó·OĆ|uW ®A2ŐiţöŮőů÷ćo_–Ąűöć¦/żm­7˙ů«żź5~{qµ.·s\Gˇňż¦Á»ę‹ żn\7űzjŞË·Ů»9±i5 vżm6ű&}»ŘüíűóągîŰšMű0—5˙ů‡ŻÎż%~ż¶V÷­Ů´09\ţÔüçw;˙4»^&Ió·O×âßÝ6-|öwővă·«3~ź4~;>ł¸‘šoO.nnÚřÔ“µsÓŕ´JÇŁ`ó§˙퟊ŽŠóÂ*Ş3FŤZű3çŃŞ'ż4!úôb]˙ôńŃ=«<ěŢ}µyn¬Ż6Śz|Ň8*V3±3•5.—u†QI\ AăSÓ¨/ܨZô6ůéăĂćQ!hřj +ß.Ůź–µµpwĺĆhho-ş >.¬>čŢÎNÂé䔨?ş tÍň9g­Ü9Úfď±1q[[ÚRxýŻúgcyaĂŞőĎa{ŽĎ^¸WEűšÎ/®˙ľ|Ş&A?m`Řâˇ+4ŠĆ?ا_g¦•Fp˝`FP˛AĚhćŹiňňľDŞŹŇéi÷ĎÚźą/Ż´4Í˝xµ§©Ţ˙«ZyH Oz}ĺŰŮć4ţ™´´PĺŃŢn†ź¦fwíF¤׶¦ő?KO~×MË›Óöe×9M†Káţyk4ŤĎčą=onëq÷Ť×˙|:Útşwe…ŕ7Xd¶nëÚy<ŁŻ@Íťßz·ą\Y’ÇZ/ źĽîö=z×}˙Ľ0üćće˙°üN÷ż7•ŤqŚ[Ł>ď^źÓ—çz…Ő÷¶ţ¦|Ô č®hćŢ*đÓÄ΢˙·«b@ÓëĂčńOŁëîpĺżÉŐ%ţGÓC6¬xwĂ\hšęÉDďSťV§*pódű=tgĂ îgW+7ćvĎ×ŢŰOO˘Će®|ű˝x׉fbÓş‹’!˝cŮé%ťyTHËе„ÚŮ Öżo× VŠl%}¶v^\uçT-™Óô?\×±) S#WuŞvŞTűć~-HFllkµÓ:›hâž÷ítZÍ ‚^3÷|öÂ’‚̄ϰ» ×[#íĎËéϰbôRűu¸<˛q¨Ä ĄâßŰJ÷‰ĺ裷`¤›ŽnÓ˘‘nZ<ä¦iN­ŻŰŇMíöënđeöÓVwĄE]č^’s´~ôĄ–ÔÉşŤ4íęŢxké»ţy~ÝőöˇžçŐ˝©>Ői¶ěÖß´őŁ«éa6Ó™©L§ANëľAÁ٧“–ŠÄ‹ćŐśôxÓ­fâ©€,rôśLÍLzĽŕĘLjĄNšLEęh&âÉKaýńÓÄŐN ĎÚeĚ»Ĺ}a©SßřĹ&Ýĺ˝ąÍ zěo7Ä|ß_~˝j{#µdS‹€Đ}ب×+ŕćˇTö«yů·‘ď×iÍÍsj$hI +H€čÁ©ëHA“dóţjnf4+Śďľz˘Ďf¨Ť§]˙Ö›IW/o¤˙M®ĐsµâE˙Îţ=ęůhPÝé \9$Ň*ďWŇâF0“nł_­{ýŤ —îŰÖî…Ź.+Ź=ž*˙\÷Văz`Q +LůůČě€ńÔęÜTăt°i}菪@n=`pČ­e?ůňý`‹KćÜâüçŮ„…Ôͤʩ»!n5•k>şöŐΖTţŤ«Âm=®×$zÄvâ ‘ľ]öćßŐą7-ŕ’îŘK6´A]ŕť:˘ŕAľ˝rSĚţó7MJÚ=Ghłă{‹“˝ŢMď«őçqłVOľč÷VźĎ¶€{ë¤ä›‹[Á»ůóąbŰëŢŔ¤i2Óa›uu»îŹ#t›6Đ’Ş<°‰(Ř®ĄŁ÷mqÚLŕi]ö¦·űřçkĽĐ“mÄ\Ř»|§çęł®ŻO˝ Hňâ€×Bbť>Hş¶ě]­^¶z7-PZôv÷jx +}ôr@GĺäŘLÔlě¨joô{Qşg»ŽZ>Ĺş^¬×ęhh;÷r“ş•>xˇîmŁó¶-[U˛@@㹊$ŠĎ:Ý_PÖâŐ4ŕdč- űá›öýlˇk¬Z +wó寺ݬ;)›vĄn‡żoR7ú¬†şą›Ö‡x7Rµv§nő¦ďŤŽS7ęjďšťúF`BoűăĂ PGĂP7AčđF@ÝĐËMęV{ÓzvÔ7usTĄŁá©z1ÔÍaťŇtóÜ‚ęĺ˙ĐşéŮĘüčPőzŮĺŹ|2çoŠűG‡-Ląm=şvŽ˙ Łl[·:Őd˛­e]Uí®Mţ˝‰.z‹ŰRëÚ[÷°·Ţ˝kÖŚZľęC#rŚ˘#»Ů‹&6˝;ęÓ«˘łáŽZiŢ=§SďÓ$ŤĹÝäőjoýá^‹˙´*|÷÷&¤ĎúÖ˝”BĐ´•a• "(G×˝”Âöü±·†dk˝ř㧉ÓAź‘ŕ7GŻG!ýÓÉŐ0ÇŘ:ę&ý·fkÔŃŇżěĹ0ÇîŢv-:ňĄ˙&ćŘh&’ďńu ţŘť9V,…ç—křăQ[W§Fć(¨“‹.üQzyµŽ€ěíúI97ąˇîe6a4ęił¬é9 ÓâťSoßZĽĚćGîÁÔŰy3ß?ŞĽôę¦őĄ€ž\´‡ť\-D…GŃé‚y÷áü§tOšVi¶·ZeS§—6Ą†9˝ J µł»4â`Ĺ;®ç±ś^v o>2Ť@5^™ăQşöRo™j'v/|Ľ7"0ĺô˛mN“‡iđuÄ®´ňôĺŢä8(Ý[ďZÔ;*sjĽĘϦç;S/X?Ć^^Żxxq{ůżo˙Í7ßlľ¤aîŻ\­ďm]|¸{2L8_÷Xľ +[<śŻ{,ź6Î×=–oŚă=GÎ×=–oĚ]<śŻ{, 3špľî±|c7B çëËŇ9’pľî±|c7C çëËç»% Î×=–ŻbÔ? Î×Űî9|8_Ĺú& ·ž÷ îţé­KŻ9ěxy§2§ +[ë9-3§Ťî!M“±Ď˙4ą%¬íĎ\ŽĆń¶ î˝U +đfUđŹĎÂv­¶ęew?¶ęV5YŘâć3˙›^K4ťvń€/U,…ĂÜŞ^^^j…-"Vşńµ]ˇF 6o]}l|eNu„ĂJëŤďtu7ýÄď5‰Ôµ—ö¦k/uţ°ĄÓ/Nřa«Bg+ş×Kšęx[źĄMp3-î¸E4SŹĹŃ0}ą4…Ýőp$0—=Ăîz!Ímb„Ý Ťl/ýé®´ß›fkEw-ĄöBo6{ň´Đy|Ż#Üz’ŧí^Ş{+B±]ŃŚëŔ”vĘ1Ď©mĐ« ĐMqݧŃßn˛S+ M´_]< Úmľ!.ŔżŁĐçĹĹhd Z×Q•~K<­Ďx´q¬ń„ÇzĆú٤ł|6çeŹřÜŕą1rľ?eŐóľŹPGĚi˛qNîř*gŘäy_E=»ĺŹčq†@=ÇşFä·~¨_vşÇäh©łŹŢş'jhčŞÖ˝uOÔĐĎÄŔbF·i]#vúŢ´.–”6­BÝú[f/ľZű«<˝đťőŁý‰”őďëjM‹ +Ýřěúč·Wé Î¶vuŻ6ď‰ěc˙(äzĐęőŁżSóęŔúŕnw}Đš"şŻ»U[h3$ĐÔAŤ[B—ăn Oëáçd,…M·ĺ˛K »/čÔż4DÚµ ˝w¤•’×ÍLT ŘëÍďš _wń<{ľř…–fŤÍôűC/}×Ţîfs¬Q/áC\č!P=ő|tC˛´rÚ˝ą­fßźśöţjşúJ¤śÖ×ŰŘâíWě7Ť[uµ8;ĚVą6ăŕ?‚{Đ ˝Ń.#­§ŐzcçäÄzZ}ˇ7]ćt#Ě[Ő +˝iRŁ|ô&ž*ĎW|ôćQ_čÍMŞ]{61,Ŕńó‘T<’ç>ži‰r´šZ g\śĐ=>˝A<\-Ba.ŰÇĂ ‚ŢŚU‚d7,zĂ‚>zS۵ڛ´Żč 8Ŕ48Ń<ę ÔWtŻfu˙Ş{ď`ş‡›NAšdĽÉDH>në!=şš´š?ʇN{ćôęóąáăᚼŮň˘®>oĺ qó–zŽĘ8řÖľÇÝBün8čÖ‹=CüúuŻQٰ7­Xzúw`wňvşĄŻü\ŤAöe‹Ľíěmm#óĆzäQdž¶FUóF™7ŔM$2ŻÖ1uŁŤĚʶ}dž‘ˇ»t4ŠČóc­[B»÷ŘŹ—„±I×\űĂѸBsW<̨Ţăať+tߢ:ö|@eŰŐÁŮ—†ŹčĄňRqUGýÄe6±5îhŘ”ÜK ̦ťŕŻzk2ŕ6&ĚčhĎÖä;F¤Ů^1{¬’Qą1HöÝßŃɆ=Rľ´’ 'ŞŞĺŘA˛áDŇVQë$űiâ¬EÔOwâő¨‚d_Ź*Höő¨‚d_Ź$Höu]˘k©¶¤ó­’čÚs¨ń_şJRyŹ5‰®vĐťŁµvímPž^Ín[UPŢŘٮʳő=k{UPžÂ:{kůCĺŐëž#Ę«…F”§ą§/4öĘk'1ş ÉNäçŰ_ö{ČË=˛ßű®V˝ŁŐL W{6ÔŰęm Ś G#ŮltňvÖ¨tî=5ć@Ö(DCvaýń +ĚI\‹Š“E?î®îŁŽ^í­Ö‡ K#G—_Ç—=?_:ü°5ľü ţ0ľü¨ÜBř üt<ľôíű+üs|ńsçŃřŇć‹ üšŁĺ”=ҙʌőO'J4ńE—áô…|ż^”T2­–őpw&fş•Đë,W<˝¸Ĺ;Ń×ç Łf““~Ľm +»{Ó-Řďrbű{·`żźľlu&|tňąiÔ/c~°_5(lýĄµv7ůíĚQČjÚÚß©źv­7‚ý’ůăĆQi“ď6űŰeđ´aTU§đĹĎčCS\×`żË¤yÔťĄŹ‡nÔ±›u +ĎćňoMu +;ÝFÝ›mďćň`mĽqąă÷ß/żňŽö¬4ăóOú0ć7Ţ|ůŮŘNQÓôĂőĎ_=»Ě&˙~Ř:zÖł]úMß>—OďT¤Tcš»™ťqűşąZTťďŘŤlpľp[cez»Ů«ÎÁM.1/gv[Îrđh,"÷ăŃŐ\äKÇ˝=şFQ^ŻN0–Ö¨•×[«©­70l·ŮŢł‡ź *Ĺ-4*e5ľ=j፬˛^Ł·¶Ő[Ç/ŢîYOćć +kýˇQŔ®{u…ösZ©Ú¤Ţř›­ßÍížUdj<¨­IÎ# ě«NxőđÍŤŔľ:-Á*Ł ě«ĂÇ<ŕîaűjş +…Ăĺ¨űę˘úzxBŘWgçŃp÷(űę´ë +÷E`źŘ/KSk­¸ĂöŐEő5F¬ Řçto/Ú¨űęNX࣠+ě«‹ę»iŠ:°Ż.ŞO›‘öŐťˇz7# ěë%@Ť(°Ż®«fcńŔ}u]Ťő®ŔÜo`ßč6­§°Řצ Ř×´i#ě«‹ękéŐ:°ŻŽFjj”}uQ}U&=‚Ŕľ.+Ł ě« A“*îűzĄÓQ`_Ý)9ávd}muĎ!űşňGŘW÷Ü“îŘçźRÚ×)YÚ÷ÜŚŢ_žv|ńaź9§šŐ(ęü×x´§1új«ĚŰKä Š_ťÔU䬊_“ČŃłŠ_Ű­šmś“´FµŮŞŢŇFí=¨X<Ô=řÖŃč1'KÜčăzúsjóŞe`L·iő’ +zĚÉšVë‡ÝkN{É»¶ÄFŇO_eş{UU™ÚŐÓîŮ6®řźŮ´îő˙ú‘×k‹˙U6­5ŇÜgńż”ŁR˙oŔL÷–‡đ‡î§ř_7hW˙oP)Uüox˛Uńż±Zy· [üĎyŰé?Ş­˙7´‰W†nÄęóf̬ߏřŢAŢ" ·*Ž×ŰÖ7z÷ł¸ůnŢ}Äôůbů`ŢÝtđgý–¨ č»a)°l_›¨Ü±áqŹťűrRS‚ű¨7Ö+¤éÓÉlEťSŐăć»/ĽçC¬bĂëëĎ%~˙ç(]­¨·QąZí˙lëjŐ=ĆäÓI›Ę™˝nÚ†Š’él¨P’ů…ˇ; +¸ÜS/ŇŮ˛ŁĄ§#ᇠU`ŁźHűFÇ1tŐiG:[FűÎßd„GŻF™Ţzkí2öO‹€—W- ›dfţnúgóe&jU*H(›]C(lŞioúxµ»‘°X¸sXIŔ;`` ń»«îéÎă÷ÖŞoË⎗çÍ.ł­‹7UÓ:هŚŃĹ}ô`vbîei ¸Ł>C(j]F¸ŁúRc„P,<¸}ŁňEŻ(Šďń¦«‚7ţôŇoZľÇ^u˙ĆÚĹ{[÷o¬…×ęő]÷o`Q˝żş͢ş.ý7ě3:4Qߣč¨WHÓXۂÅ4Ťą‚ÍďqřşőĦeŐďöu˙*î<-Ł}?MĽh‘ÄŁ'M{=şhß×,üřďfđhß×Ýuď±¶Ő±ßý&µ–Aa˙]A´/őR~őëŃĄ:ęőĽ‰Ş«Ž†ŹöĄ^şç¶ë/úU›ŤÚÚeG;Ŕ´ŚĄ:ą¸ůéłŢ0ơ{ĹRÍŢ}ŰXŁľM U…­­ÎµLß"ęäâĆŮ ś=Ź{ë­Ý[Y —‚rŃ +ßnĆ:ýMËFŁ{Ňi.÷Ł{6±Łľ©Ě0]§5|Ý©FÍFëGÇËŐ¸Űjç$Ć1]@ptq·ÇuA·Bńč7îvý輻®°řłiŽ»­ş‚ ”UKŁęčíŞ…ÄÖB˛9® ş­łFµ+ ضf÷¨Ó7’b6Hvq·Nš‡/ďŢe˝gŠ–0-5ľđřvČ1|9ľtňĺŐř«~Ú×q†ŹOŇ`ĺč<׌čîďs9;Eąđ­1„.Ţźk.WěŻrKýâłSż˙HÎ畦›;ťzqî)ě~ŚÜ»neř>,7ŽlŻgĎęFĄaTýż_ń퓦Ŕ]FÝO›GÝŮą8–@W5$pňový®)F®Kd^ńüţ 1ŞŤ‘æqĐĺíM!é·…űŻţ4Ĺ6G!Ň |¶V D|żŰţMNźŻž6Ťú©nÔ1üçMVë–«ĂZż>šluüÝdvĐ´ĂK<Şă7Őĺ>ś©-Ţč2ŹĎ?™Đë/-ÚŃ0—ųɳ6]N<»;ޢÝĹőÉů´€Zô…ľ!‘šGLľ4Wa¦Ýô«g/jŘ_µCEÝźůY±(Ý\‡)ëö§Oo¤ćř#™Î'ťýáNű3=+ć[™65ÇWőĺ¸Ő(3éÜźéáËÚw˘­ÚŻup«w¸ěşUł= V´ŹëĎq«KÚbĎđ¸>nŐíĄî+lí5„`»ßĐ+ôL«Ó˙Ć×ĎÉs#«$ťëoă‘˝›:70KÄęýp+tëx‰3\VHŕé`ÓÇK7âo@n·úÂÂĆşWÁú°5#ř +ůťhˇŘöX\×ä;mń´ăĄ?ĂŔ`OC¬\;qĎBő´$ťíBĘ®[áž´7ŁĘ?‰®¬XfÓ¶ą-Đy3ßÝvĹG»ŢôÝŠŘ|š8ş•&˝=šŚ‘ĘF€đżfÇĽţíşÄ˙ŇFĐćómv‹7=ľěÔe†¨ÚÚĆŮÍŤŰe˛ÎÎU„sđ€¶±›ůÓ†jęśAŇł©t‰•Ľş÷¨‰ËµŐýiyäżG\b× Ä©ůZÇ–ţęČePőV±Ą ˇB-nÄX5¸|gŃŻ=TŔ¤E]%…˘·ăîUĎűÜ´^ŃDýmZ h?ËÔÔmD›vÖH-î{öŐ[łäŘ’ŘVăUďfŕĶńÝźgĎĶńÖ?XHbź8ô !‰vŔńÖ%~°Ä¶ńż"$±m<âŘ?C…$¶ÝRŤIlŹxC“î/$±‹ŮlÂë’¨§ss]-ŠŽUËüď+¬\čÁc+ôŹ˙µb…ő°ÝČ‹:šöżZ¬7mnóĘ×_G^¬°¶i±Âú•‘+”ž÷˙‹Ĺ +Ç*yŐ»M«‹\­¦Ó;«ŐĐ»W;ŢŰN<ě1Ö.«U}dµ¦ŕˇ[Ü(˛Z5<ě!ݡ-xŘ˝Úa2PÁĂîđZ…˝˙‚‡Ý«¶şĐ­#»V;”–ÂAp`[đp耲QřDŽé€˛C5U;´.ŠĂ<ěë˘ŕˇđmKRô]đpgŘA +ÖG¶đ¶ë·ŕaĎ =š‚‡Ý9ź“Ó†,xŘ& EÚ<쵹h†şŁîůFś™hČ‚‡}Ô)>äâěFµĂŞĄpČ‚‡Ý«j*0|ÁĂîl#)xŘtçUµCßedđ÷xŘÝv]OÓ(xŘ—[ÂŕĄËöÍj‡•a/x8ŠŰÁĂć^đ[°µv»Ŕe‚ßtü[<ě3 Đ »«ÝŽŘ YđІ‘Ő†·x*n[,»®ŕawáGůuŽ ŕa÷j‡ĂŁşŕábqŰÔÚj‡Ť~ťý<ěv-$¤Úµ8îÍËôŮ×ć€ső‚­‰$ťD8¨A„ßvC„»řűk¬ÓŹŁÜ®8%oHČëăôŹ@”ł.ËŠLëMwŁ´µýßnW+ ++˘đv‹ĺń™ë­×ëŻÇéł—t““łŤ‹‹»ŃúÚÁűăąńé_y2>»lŹ/ü~ů|»¸ü=óđâzőęíĺäźő;ń^q­CMżţŢ_ËfÇź¬OGůܧٳýÉĂ7ŻÖ¦~]¬lĎDÉÉÓŮŹ/W‹‰WŹ>//ľÚŢź]{~ç,[´A‰4ĚěîŮ»­ĺ|oć;Ëâ6đ–Ç/ţ{ż2ýěż'/X¨!2ŢuţżĺřâŹäąW sď’Ë+.ŢąłĽ +¶V·_Ľ#´ć™ŕ㓹çÝ׺xűsBÜ[ ¶_˝Ţv&ď_\Żżpl« ’Mć_-Ţ]Yćjť*BrkëűĘĹĺ»ß·ńŮdEšWŻĹ=ٵ»¦Ë Ń~S· ď·ŻQ<ôHŐ]zňúh|nůÓâ~áźŰ¨9ş?ľĽ2ó;·†b¤ďPi´Äěíź±.ńgW÷ >˛?ď]>xüúő‡ĹÍĄéëíąÝ‡IMýůnűdţíczÝÇ)Ä)ŇË?N.+Őj-}w‰_W4]NwgíO\’bműú°#”Ú]PáČÄĹ—đë’ţuŁÓÁŻű—+‹[‡G»Î»řŢáźőŤ˙>­„ÁĘZ2·˝=ÁŚĎ»y˛8X^}ş{oüß-Š5,í-~¶_,Ë/>ägö 7ŕ{â<_ź…nc”5ý#XŮą»ŕ>6ÂŰşýÎĆ’řâÓÔĆ]óĹĂb5hűŢ-bżć‰ś~ż¦/^„ük|ď`ś~ÝżŹzk¶Źf’ôń6ďů=Łłuľ< †îMAĎčŮ5y¶‚üxKěŽIżpż ńTůóŠ~}Ż%véźh«RÚéłelŃíkţ‹~=X1†|úĺ(O÷ÎÓOoCĹ÷WN?DkĺĂÎëôSl~ú’pú|Ď_p—Ë,ŃŻG+úoĎß槡Ľ§$˘í­éť‰ĹĆăőů;­Wsţ3cÎŻqqűěĂüż߲ígë?ŠÉB<Ë1§–äţQř„A‚•«ŁŽőłľ/W‚p'Ľ?G?} +ÍO_"׎HĆ ZáŐ÷ÄęrFéŐáöÂüÚíüpyâÉöÇ'Ó%sďxćä2í,¦t^ď3ý(Ź‚I!LřŇíćţ†í˘˝UioIDçźľ™#Ş9KDôz•Ó(ěŽ/Íß{UCD§¤ =ٍ:·»ÇsL!éń<ă·gČŮË?şÉ§żp=&Őj?Á~Íěť\™ +Ň ßółďg‹ŠBďΫřëg˙"rg—ţ9ţÝAçłŃěýń÷|ú źK¬Ý“~çáĘGWXü·´şČoOő˝~ +kwĹgź&“\Űŕ«=Ůń|ýÇÄŻmGbŐj“č—în|<đE’őťŐy\'8ľśîWŞŤÜ9+čäľ>Łż}ŞxE¸ó5Á¦=í¨_w§îŻl>şó; ^žš¦ÍKľsńaĐ?‹żz †öÎĎ­ŞˇŐŻuń’dGJŕ[ůÎwĂŕl"]q|ź?›Nžn>ľL˙ڤƋRDćîÜ{i´ęăụŽßÇ·µ“¨©/®PzüŔËi)şśňÜĚ›č‘}•ôrç™®ě§úx~łŹkŻŹÝ™]ąKÉK•™wť¤ô§rBŇ%_Ú]ÄOűŮŠŇÖÔÇt–^‚8Ě](ŞĚuŢT^•Jl1}güٍŤ:ě6­Č;şxÉ}v*F/UcKJć‘tDHUąüöĎÁĘöɸ©ÎMŰÍě&çźÍúüc+ŇîľďL|?`Qâ +ĄłZŔ3šź»÷ö‡Đ%87&oZś?;×*˘ëĐÉŽ$u>{¬<;›¸Q,ÜTbăd&´o/âSł«ˇŰT˝ţ`öˇăĄKQeŐ&|›}}n7á oÂÍ2B3ş Óm.®?Ýyę6!~ű#,Şuzě¨|ÓtŢ—÷-÷ˇăžŔŃřď•-µ ëÇo/CĹ-áăýksżŻÇÝ>Ś'—ogě>uą ĘĚŻ6ňťëĂxŞklšäFZ\@gxĽ1Ź>&Á)éę;ŕłiÓ#f?-JňmČŮ÷§űŐÖÚÚŮGĺjďź4<ʶ»ąv)HgăB¦D÷6ţţöúř=Ţ{Ç ]ćq1aú8ţéúvź–íŽßŮk|,Nßĺř7m˙ç7íĺŻáoÚŮŐ0“P7íÇř7íđ×đ7ířw[BÜĐÁé…»i].Ę›n ůÖf7{Ü´óëá®Ĺń‰z·zÓ7Łk§­© ckŐ>Î.†;‘ăo—î^éMë÷jź÷wż±š}üşr!Őb6­Ź…\Oô? ?*bíÍäd݇]ľs}ŚĎ~{);8=­e ̤ŰnĆéŮß'áHçé·!ŻÖéůĺФóô×Ő0|‰Içéß!űéő¸üőóä„÷ëĚdĺ +|žź’żžűëýz~áýúëŇűőď•÷ëŐue5?&˝Éüń&óc~ŇűuiĘ@ »sJţwu® ÂÜŰ…)ŹĆ—ţţŮ_zrôLQ’\éŹĚDF+Z[ş{śs2F‹JĎâöɉÁ$÷\ŕĺźpéë×5úéđŻC Î'XËźRiP+ü+̶sú§ďg D`Őüëęܲš¬ú•ć©ţěßUPhŤ'Ą§ę»§Źt—‚_-|ş qŐŤéSűĹ’üâ übżčđ4ŚţîëÝ+=ŕÚž°°ž|™›[5źÝ_€ëÖ‡Ő;ć‹íeąeOúxĎn;Ďो u0Ă˙ö7RŐ ÇţĂeَ_/č#Ýßë(Ô5Ôůyîż ö„ôĎzÉűGŞßřŢ«_꼢ů©ÎĽ>Ă㇌ë.Ę+pü¬ÓŔsÄĆ ¶“đŽđŽ_¬´Ĺ]c^5ź]®ËěŕîęĆ™Ű7ľĺŹ˙/ßĚű|…Áčđó˝‡ŘąçşßĎϸßMąĘŽ»{r1­ŚĺdYmÚ«eiňĽw˙¶˝ö/Ötľ.<Ř˙üďŢćă‡ă/ݵ´9…7|WĆiß˙u=šßÝľŁe‘‘uů|ď®{™éŐţÔŮÎű7ĹWD_^Oý·őćË>ü‡^…î·˙pßČNbkíMÄŇ7ďĺöľĽV;Ú|ľ:˙zĹÜţ×R|ŢŁlßëĐpŻ×ěŕô?Ĺö§Dő±uű'<^Ţč.O>óéż±ÎoűSč]čcôÁŠCob1ŐŹ›çSĆ”ű=µ2F¦HW0?UŃŹ—Ó[Kĺ<˝ďŕpjQřk*đbŃ3 Ns>íŞIÜľăFŤgćźa_ßÓ?ÇŻÁ¤ß‡ö§H¶{ň5Ág‰›¨€™Ńó폇Ç›‹ĹüööÖ“ĂÂÓ~¦ÁŮéjĆIt¸nwĄ!ŤÁn`ü‘c-}¬~Ő#DÁ†Ó§‚B?ÖŹĄ°Ł,46 ÄŁn{Á˙޶šĚ„,ŘX,ýÝăöÍ4M}¬LR dLżhżľ+śrwy;Tf׹łŐŘ NLqć0‹žlýú"M˘ôń4}ôňěęú7IOÖĎľţ÷kďÓ˙ś]ŚýŢR˙ čżřß(Moĺ%ţ/¸•âĂ=Ú—9n|+šżµ÷kěźŕÖ Ü'+.®6˙ű|őßď_ź.ţçÖ*vôdďŕáć­Ő[ęoNčonßšŁ‰'Ôśľšg“ě ¦{Â}៣˙7ń ˙A'/Ň$Ęł¨,“<ˢ[A'-‹8 +“2O’ Ž žoĐ Ë,Č‹$ăű?·ÂŕÖ“[oß·ľŚŃ—/ĆţÉĂ “…A’ÇYa|k9IŇN&AĄ·~Žý“ĄQ‡ľĎÂ$Jsne'-â° Ę0/łňÖZ…ę$)Ň8Ą©p«¤SŇĎeFaP&·hÂť2.¨Ź<.h(4ˇ?Jă$˨›‚ćž%q'K‹4+ă8Ą¶Ô$/:%­ßnŚýCłęä9 ÍßÓgËY‚ÉFIši’&“Q')#Ú2ÍFʢNAű–eqPpÇq™wŇ hI„5Ô5‰;Q”A–©Í¸9Íۉ“0‰UłŘźňDť Ł=(˘,ĚòfŮaB‘Fid ťvQły!m^Q¦q‘ć uUÔśM†>Š©U”ĹYÎă{‡I“)ŠNG´ř$ Ôţ%)]>ZQŠmŔźPIBť'iFÜ íĐßga†™ĐäJÚ\şq±Ű—$-;aI©{Ĺľäe·»ŚŠśW°L”–GyNW§‚k´QäaT”tźk[ĺőí®ĹŤ÷ÔMNÓ"äłÉëfž‡a‡6= ˘4.ů¬n¬ľűs uýŰDô‹ß[×T“ĺĺžd)=˘ `ęt“.…ĐĄ°şôŕlěč˝'ęÇéýË ţźľ‰U’D3RA¬h+Ł<(±Š|ĹYŢš{q—V»s7¤o×ďFQ9ĎrôXÍ@R1ü^KÇđĹĎu™1ˇ×tĂ$Ą‡O„Î3IčíĄQ3ECĂĎ= ł„îiśä·–ó ˇ†ýŃ…A’"ďÄ9=Ż,¦gxkąi‘t éaćyžŃ ‹"ú+š{F7´ Sę†.q'!˘ä4‰$În}VăLĐ­ c<-<ß2 ‹–F9mbHÓEŁKšŮÂý,KÚI´ˇ[Noś^yžŇ+ˇ6AZt2üEžF‰j“Ń€i™—eN‡š¨čäô·QAͱ"tť"QäçA2¤?!*“aîµÄě‹qę™Ht§Ňü:DŃĘ^ M„Ú­„Ž–ľâ)¨‰$ÓÖg Í9 –č,)i‹‰ŇPG´• ŚeDô=)‰ľŇěKšTNÄ„öŤfž†tQ@ËŢŃÁ‚^jžŁ 1…4§^cş4Déě€D5i˙ʦĘ‘•i' ±ó4h\5y"DĂéÚi@KÎRę+K‰Ňv)ÁŽQQĐźGD«¨Mtrś8=şFz=™ŁsÝ&>¶=ëč +÷ró槡ű4BüiTŰ6®ý4ŃźŕźňÖ}řšßéźú‡[÷Ä ýxĄQbÁ‹A¤Ź=čˇ$®“J–c:Ç˝$Ńśt™^O‡,=…ś.=†źÜŚŢ ńkŻN"z y%AÉěď^z–Ą¦úQ–ŇU-‰ć1˝n“§ô\şš˝Fy$y)ózаnbý´s,ĺĐ»L餩î +÷’¨ʆ7DO°S =ľl7A›8ď"ńCsYú«6–D–  ľ§‡Ł«X$Ä h›Y.‰=iKőL¶ČÍ`4zď4mÚĽ2M ĚĐdڦ±Ô…6$Kŕ1EZSc$•dôr°ĄŞ$›śH¤ćôč*§•Pb„‡6˛1)еšQNRS”Ř|@íh !Mt zřz°<ěÄ%K;ÜŃ”<-äĹńPYI’ž‰Hôˇ˘ÓŃ‚(·)@rś0C›ĐÉKş±D—yőj°Śf]Šm‹‰Ri!:źÇjÔ&ĄŐNôuK‚$ –Â4† ˘ŰY€«ó”’€ţ('ˇŚ¨ Ép‰B,QF3]:lţĘraÉ]EťRËÜ$˘®‰šŇLy—T˘ąZ ‚ cxşŮÄXr˘if4˘ ´Ůˇľ¦,Ż4™,d©%Ö]ED&­PH‚QLWžDŮ,P7ˇ Ę+öŃb‰Nv!–Fě-ĺ{K]Ó‹éä/ŢěcABXč¦C|‹öĽ"3w6: ÚÄÄ”0—âG˝Ú(âWeŻäH #JźĺqëwŔßŇĺ­DH2^żŇ“硸 KiĹěĺ,މ˝łVňž˝‹ôŇòĚŃgI¤Řn)ň°g›Ł6“¤fŘh{Ź=bśđ••‡hʧcÓ$g1'´ ú*Ĺ#“J”ôŻôzŤP;ÚLÚm;1őú0Ł ˘ą;{łôDăŔě%ŤVÄ|‰ŇĚ §•%ž71}hŰŚÎÂ^ZbL[J·HŽÚ6ÓL%6KÍđ`˘D%"ěŹ=Vş_s^IÄÄ|-d«6ÄĆIUÔ”ΔV*źžşEîŤŃĚ;tç’0fÉ-ń,zaÄăŐmĚAP‰«l°§ )}î:ҶtŔ #KV¸ $,ó–‰n‚`L—íë€^G4•iŘaL¤,úŁ@Î]C|ťh˝'šrIÔC”Ô&îX VńuRćżi‰Áě"=`:c§»EĐ„čj$JPĂa“bÍ8Ń&KčP‰0Ŕ«bľŚ=aîÔ¨VSZ}[bY°ĘLÍčÚş—C­¨?˘Ć´ˇĽn,§KRŁ’] +Ő†č4)×Hk Ä`ňĚÝGzt’…ážš \ÔIEş±ë _nîBÉŁĄÚ<Ö…€ÄĐÚ +Ły1 +¦M ňÄ#ę«‘vN!şG§Oś“¸7±î%čdBÎ'ŹŘ=u+ô˛ĺÔŮ–zI­g¨ˇđ) »BŰ:HŤ"Ą7’^ˇ6q·/„şRy‡7ÄŻ,ÍK{A ŕ ű‚‘a‰)“ž–Xˇ1v@ÓˇµÂv‘Ł«@^ěőׂghnC[_VĺMGŃŇ©¶pó +GˇA:ŕAF…cČ(ˇPs(L¤e;‚ üÚh€EőC@;F„Ź)Żř_˘‰Şę %‰ŠCŕHrŘ9´ÖĄšd ®P—ËŤ•É#‡XXąNŤT0aeߢV!]ĆLÝš ë‘Óq` ~@ڍ–ş‡9BşąˇĄďIŠGžłÜj”9ä»9`J$w™Ýdŕ^yâčg +ä—‘ÂMx(Ľ ŕ&ôj‰ÚYL…ÜE„ŁcآjĹh)3…¦ÔtĘNěf ľ$˛”Ű{H›ŹżF"Áô)­Mń=˝÷Ŕ(öj¬ ÉQ ˢÜU}—”–ެ4'‘-TL‡ŰĐ…˛ć;ú’hgdĐl ]–Ŕc´zÚ1ěuEŔČxÍ©LŚJ†“ óÍőj‰<ŇÚš¦ŻţE4ŠdgÖ·ô`k¸®Jŕ54’ëhRw-$LÝ•/q J˘ć6ôt4Élś„†’5ŃĹ:Ôh$ą”Ĭ‚“´¸¸™>X´! Ô-?%=řˇ•f#¨±DŐ ˘?“0×l#dőL‘ ^±â÷¤jB‰® †[ÔóvŃ‘ĺ±Q퉅ŕ–ë·Á˛S‰”Ž/¬ŽN°Ł–Ĺł¦s¦7QZ™ Hö˘ç™››F„®ă P’d‰1…Ę@“#MRDDiËبd)LŤ11L+E$ąŻŤR ŤŇM7*hÔcč ´e ‡ëGaaa5qw6­^H22›şxĆjÚX ™OF ±hµˇs¦;Ą! •Ŕ‰}€ Ťt·‘ľč±:ó¤ja¬Ö…‘qSďň’Y3hF·)„!¨ĐHV€Ňš&°6’ďĺ’ÂBś/4Z ˘|±Ö)ŐĆPsśZCrť]™óE±‘»«J  “Ńâ’ę‡N4K•‚@PŔÄ•¸5áíFkdu­€Nď`]=Ý:űä°ËD~‰b‰»ňhC‡®qc†ŕ`JĎčÔŤż@€+N…†D41¤˙Ě^Ź–ă +™W€ŃRQ6·Şäžpî´"Łeă˛ÓŤťˇ/„&8)8$Đ[%čX.’š'¬Ő€Ś(Â]E‚Ľć|°±¦őX|Ö…ľDsŃXb†Â‘(b‘3¨in7>6Ŕďı #+€EĐđÓ[¦µÂXň –ŹÂIëj¸Ś‘teKĄL3,Í'Ô†:Â,4¨NŽP` MKéGâ™WyutŤ±…ąÇ6”J|2FYš®1"ΚK± MQ É,Đgŕɡą&°Ť’ôDÚ‘t­(©Ńp˝hÍĄq ¸FÚHˇř‹ş%¤rzŞM’2)K–“g`Ô%ĚĎúL +Ö‚ITJ r„H±Z¸+0/˘Ž ŕ® ,2SŁtž$JÜ.\T–iGq“,ÄŁ‡ +éţCˇ‹N—=rč24řś8il™x&ÉŻDĆ-[.Ó‘Öľ#·°ż[đT—w´ÚĚÓÎÁa˘(±R6_IĂůk’ŤśbO·:ď—A§5;*śĂµ&°=e%&A•ÓçŚă1Đ}Ń2[˘Y+]ş|zzTxâýy®‘*-€ŘeĆÇ„ZĹ"ş¦ŤQJÚ’8¨:ń® ,¬m.‡ZhPRîg_*ł6ĽżD‚HĐ­Ś±Ž„`ę×8̨o­Ň“µu2{Ř1Ţ`•"†_ +cçâ®RM,ŠŔ<7uN”Ü&9ŐęÇ`ĸHX—ú&±Ü¬"Nč!8Î$`Ęm,Ř ä0ş%%I0ŃŐm´Á›EÔ±îĐŘ?ÜpY MôLôĄFM×]»›é´KJł6-™“đ^řIڜ±ă”Y˝ăFü˝S{ÓŚ/Š»ĎĘç R€UôŽ´ôfO ,ÚdXĚ”îH˘|”‘•íei$ŃtŚTĎÂč>hC|8u71Ňń脸`Ţ2®—d–Đëh”<ÔŽŤÜ„ ˇ$Đ©i¤¬ŮŃxŇĂ HĆ>h3(b¨,°ňKĂ“*X†néMŔ΢6ĐčcĐ©,7:4X_"ˇ-vŞ$Rb±í@çC‹łřŔ˘m$Ň0ţÄ;™Ađ·4 Pl4Ą–ńn)GŤTR2`TtőË}ô`0”Dw¦˙ĄáîÖŃ꽢&Ö5¶ŚŃ˛ž8©BTĆţ‘ŢWʵJ e/€«†Cĺ4­PÖ4q>µb?3RŽŘřĚ!RĆq×aLÄ9źŞ{śÂݎĐÔ5Öp-‘nhĚ3´›N—^żsĐGJ‡™ŚˇÝÂNĘ@«×5ź Î’'nmt%čîÇľ‹ ąŁÝ€RÓşŐú5wEÜÄ +58ş@BŔe5&Âbhiä +Ím“ŽąCµ„V‰­á×´ßtÔ­€Z_&ÍýăTwě +’ÂÉ‘y˛$bvQ·“LbĆhiNy*đj ¦˘¦Ř–$CměĐR‹ťŘJ-^#­D‹T<XI˘#Çmh/‚ ץUGöĐBT.% ~4Do5›Ś°ëůQ+°8OŚtś—0ů…Ú/Kcżô˙˘fě7Ě%`Â>X:caÝжéęŃI‡‘˛ä·Mő1Şő“䥇'O±#¤Žá:jÉÜ’§éŮhÔQa®túKE‘X<†OIzH„ŚmišÄ+lÂMŞ€1Č–Ś`Ë.ƱsĐ€/:‰áy`ŕRĺ],b’QŔšJŤżs Đ ·Ť0łÓ˝NŤF¨!W¶˘¦ó˛cßR¬ç$ +Nň˘uSŇz¨y3(AĄµoČVW$7Đ9މŽč|Öť„$IĐ©‘ŃP¸ŔnHš† Đ#á~Â'*ç!}Żźg©á]Ď{()|>â¸`$/,DP:áŚč8sšhLĘ G’—±*p*ťsiEhFŠ?(ąĂS X/Ąď_IÚŤQé|É€%‡>˙†őJÚXb°dČ"ˇ ±ô¦h‚±1Ą‰§2áE©0ĺPşŹ"¶ űQfÝ›© ĺ€ôD?dR>ĺśUĹLsgk(ŕ®YAĚ/ę*9McĽˇĹť1€:ô{hĽ5š5Čs§;Ó‰$%¤ÎB×óŕ—'`ĆxC:e§ďŇ>ú,Ô&–DŐzŐöŔź3jwÚ zŻ +š»Ą°ŰX8~)č:ńu eF;ŕVXç°ÁŘ­p…€¦x4!Y"‰eŞ!b‹3ŘeeX‡Ĺ®H€":•Ąš–h 5z>ióíŁ8·Ú"°?a!šDüÔ0t }BëdŘ +Ô9*…ź'îš'J˛ôť‚OGđŵ´!=lućxŐáŃŚînâ <öśŚX?BNlj±»»6ĂŃőČ rkö +3óhD¨ś…žý˛Ś&±.Řp@ěAË6zÎp´÷­É#0ÂŚĹ;@r™QőŁ!á3łŃ hCBV™9ż|¶çD +޶9Ž´ó˛5äY˙$ÓŚ–ąÇO4<čHC'TÄČzę&%LÚˇX>±'ߏ†×ÄBnÜ,†``NNYŚáţaQ_ŕśt[Ő…g© ꀄăčĄâu™–Ą `%đ¶uAßE\ÜB:±Bř‹ŚENáąpÖJJ+\hqÚOś»žŕ.b]•+QGáNĆ/tµ 5>T ű|‚{Vŕ!DÓÍO„CI¤zJmŘŠk­‚Üqm” ocžKű6ôŇ’„íďcä @ĆÍV5cŻ.Oś€ÝdŔĆĆEáuĚV˝*ŐćŔÜÇűY7*ŤQ¬P‘~idáĄfA7(…öP뷤ėJ +tĚ ‚ŐZ&±Á2w¦Ě‚ˇŚLm˛NćÜ J‘ÜäĹ'ńGćhă®jk†,‚IĘĹq,côŇĐ4=oxwI@€:˝“ 6&c´I;E…;\Ł$¦ĹâőbĎRâ{Yę v¸f§ĆlÁ¶0(ëIh˝$ Ť@Gh“H–Ó[Ô>Gň &!žcÚ¤«V$G@E©v›,Łk챪M]ٰ§Ć7Ź6,Ô.1Ż&Λ‰8ďâý’X]ö‰“Ö¤e~ ¤GFVä‰`ţ +bé+ +źĐŰ/“XŘ4Ô»Ö(fEŻk°Ž×*'–¦eřú@ +&/l2ŹŹW—‚¤ŕęSqßŢ[úŇ#SŔ ÇđŇ)i×Rľ!ŽÄú0«(‰„®‘”K!fĂěłâ/ćů@yÔłˇ=6ľń­—ö.8ůÓA¤ľe™ĂU%\ +>&™° ŔEÁ™Čé!ŇË »ÂŞăŘ‘Ťe–Ňé)ů®) ÄKŻ–xKľ-Ra ‡AZH8 ţ¤´I–٤O´Ç9ĚXyǸĽ(99ďÄXÄM¨áZ ٶµgčéŕŕu°‡ö™Ů¤S C ĺe Ü +ŹrŐ¤n×1L‘Ü1-¬/yČŃ~§J’ +a „ó Q·Â–αŃ;…“ŤxÚĘë×ů—ÁŞ-=Ň rKG÷”µqÂv—ş82`•¤ç÷}΀W÷đol|j¨EĘP˛Ăŕ¶y9¨LŤOîRh¨@3‰¶W°ŔřQ{·?·Š˝@ĄV÷žŇyÂJ‰†:Ł»úź ®ˇhć+ĺ•AýóŰ 0BÄ Ł ČĽđgqÄ8§Ř]dëĄ …Ś˝´©Š 0Jw!M˝ŕ…ŢBAŕÄF)¤}ăF©F‹b÷ĂA–ŞW#EĐ©d Xv$ĚÄ)bI™’áRG˛śqšĐ÷8%đwy¦’~đ˙°OžnCęEئ•[B$˘–ҨD,ĐW>ćű´6otç>6ˇN‚ťö_âs $ĽX$^¬z´sČ­Ą d™Ć˛÷î9 +Z,–Ď>^?$ČŔ„Ţr• …Ě7W /mŔ 3'3"’ť¶^N¤Âúqip·'Ţ™Ú÷§†+8Ó‰ń덀éJ Dg–B8p…óŔ=‚SJ3”Ę7YéŁZ6N8—•W`©%Ą@ż!ľ#h|'ŇUeíÔécň=gŘ/Žn­öl4ĄśWĆ"J$?e…JJdV–°‡»Ć”Ř;†GŤA˛¨C) Ëvűŕŕ O%ěG©C˙ŃO2…3Í”{Yz'ߨÖ%’A,)˘Ą9Ż„ŘK’Á–૬ăcJ¶.ilP3M$DËCń`R ·đ¶š}* hCé‰HŽAÁ„†¤™źbĺp++–˛%źůE ĹJžF§ů<€…Z™hż3Ę•(Q(˘šA7:v3”J”ÔŹôXŕ.Í̤?ä…Ëö“!ĺq Ă“X*!ú—RČA›\ff§¦ 3Iµl”nâIžo*%/Ő„Ö ˛ô°EMś˝‚ #/ßsÎŽŽult1K :+kÝîŔ…˛ŘľBĄK ăŘx™6vŽ*49˘D:=ă}NÖA.8ßaśĚŠYZ^_ŁÂĄ Ő§ŰTÎEM:ągĐľ«—„d /<ÁĚI!Ή})˘Üĺ†N‘ę™ćołăh﻾ÝÎs*…˝)?;ÚdŇ…ńt’ "Őmdô[šGLŤĎ‹®˛°ň„ž’s7X'ÓmôĆ »zô«äqÖF ¶6qaCŢNh–[·;=“®Âp’ÂĄ<É.ŮĂϸĺkX•ŢJ ÄzÔe´ďBăB3Č" ^QůŽ6)=s¨·”GňÖQ”Ń='+;›55sřPĺ…ĚNc6ůťT"©4ž ÓE´Ěé6Q»ÓѬ +ŤFTĚ‘‘…šfjN™ČÂć4·®R†µŁ†điüŇH*„7 ÄczšôŘÔ%fyĄčH‡ŔĆÄDSá–‘qrů†rQćŐÜ—ë*LŹ:ɲŘÁ˝p[ +]VZăDÝťťmčňp„aëĺhĄŚ0¬ÎH` ;!H]ÄÉĽµ•HÎk‡M%§¦"ďaˇ¬™rŇcë@Ľ 6šĂN'¨vů^‡h¤ĄeĘp.â4rĆ χŽŹ.Ë +&fcT‹–ÚŚ<źŇ )éĄéTH¨T¶–±I‡BA‰fş[¬“D(SOÍbłHm&ë8̬”ŔórňÍŚś˘a@ľT¸¶Á/‰„Żž s")l6FĆDi‰ôMg9Ż4TO^{*饗 +afă,#¬qů$+BMuɰ"5đE¤ĹŃÁ~ÚHc>{­Ó‰R/ľ<Ŕńd)VxŃ˝TĐFT2 -Z«%Ǧ‚ľ{"žĆ˝Ţ`±”ĺáéE¨%Ű +…ďUj“†*S‘L¤ŇAČĽőŻQŽeH“Ó6·áÜç.j—…·ČaÚ"Ż(}LëJG% ¬Ďɬ8n“ŽŰdjâ6˘<ď0"F±“r´Ś‰škNWVĂŃšLNV­`•™¨[ˇ ąqRS+Čf‘Š'ĹdŔŚo%?”z”ŢgđŁň|w–O„…M„çz¬ő+Ď«ŚuI¦)Ri5„îąú‘*™Ë€KĄ99łjƉßáť©áçr:xńVĚ,ťN í*—•ç±ÁéÁM®ëV(žšŔ1Ó%ĘÄmŚE2íE'f+C±©Eë +ię –ç>6´°Rž*Ë%.ĽNÓDŠÄK!@WţPäÁd,äˇČäůC\dă«6"=ߏ á$ľ®¦QĆ•ďŇHT@Á_ôb+sbM[µK˝ËMCG© şFB~I‚`f&˛âśUŐh0‡ +×G.ĄŠ˘¨ć’‰Ĺ2N##­S1ÂRdŚŐĂü´ś1˘N"ąßЦč6Ć.×V –] +_D>Ä%Báäł+¤Pß(y#i—4*±¤CⳍĂC$–‘ţ«y,89żŹ1űenă–a‡ź–ńiĐĂaŰÜ^çđKłňcśqmFgÁĺúJ…- ŔGŠ„R™ČŃÉvaaTð„+ś„4lĄĺőĽ&Ö­ž$±ÄÔâ„ăÇź-C?_Ť”ŕLeO%ŇŚ–‚$šÔńŘŐ`‘Á3÷!GXA‘–˛E0Î×j88śxůXQu‹áĆ@Â|°»mcJ-#ɉđc¸Ńs˙gX.ö”oĂe.śi×ÚsŽI ÝeĄ«D¦ R¶ +SD¦ ™ÚÄ´Ęxš‹öT÷ĺÂE +>€`¨{ęUw±˘Śl ĐfĺiCŘ2ă­Čzď)dĄ'aŤb•îÓŕTâ@”Cű© `/ń0—/v\6)Z™zYh›Ác}GrYzÎaAq +\ÓÄ‹ŕFÚ\Č| •{‘>¨˙‘ŘęÚ¬A1䞌uśdĽôÂSÝÇBŃ@ꙏ†M6[ cĂXÔn‚%AćCşŔĄ•d5{ç8t÷háł-rXCH°* ĽeډGČ +.†9ÜĚVѲ*‰TŮąĘ/í˛r‡xď^*6¸K–Ł$Ő4qőMrŽŁpÎŐÖ +&“HBI#ţY„.Š&D Ť4Í«;‘‹đRĺäăB ÉĽ6K°-c7hsó8׉ˇʰ{z ňĹ‹ #58r Ë@p>îŇKö¦U‹?™ňBăCö ĎHC@˛«Lt"Ř'uHgK4čÇNtj.^ěď苏j˛BĽĘM"i´AmáTÜu8›H)\ %~Ä&h9őbĚ™l×Eň-™s,Gę8”ç.lśQČV~ˇZr҇ŇKórr™śKuŘČt>6{#ˇň!8­<¶qVËtČ•bp;’˘*u“”ŠŤĽÁ^Ç´ó’ %ý؉ł\TKXK8}ËÜŻpo&Âú‰´DŚ ÓQÁ¶›€>áž÷'B$P®TćŢ&Á¬¬¤_b’şP15Ta^¸ípőÔ0˛Y6ą'I]bG¤žO8FŔˇKAZy„XŮV5śĄl¨ZÄŐňÜĹΞ• Wď˙ÜAvWŠ5EâĐ÷™Ń#A¬‰‡PX„®JâÂî© ™Äi\Ň2™w„ŘĘ@|®D» z8®C)3°ĐËË˝¸Ä=PŤ\€‚Ś˝ř¦î A–acëHT± +¸{ÚRj8ÎÚŰúĐŞŢqŰâ°čŠťDŞZäOFşÜIş°&H­o4.ďIŘÄżčáč=ŇŚÄ  ×@z‹,M”Żă™: +d·śŁŇ2x»§J-ÓV#™‡s(Ŕh$Ápđ„ŽňKT6Ł$’ŃŞÉ ‹”8§ąŽZ ˘¨ŤIČ©Ľb—í_ˇOyä9(H$|gáščAěl%!§‘’^ž0łˇNłŁ!Ň2%.c®r ÂŇŽ„ĘŽ„Ş9‘´×Čů»…śJžţ$3ÂF‰(# á  ÄiăüFĂÚźÔp(†“ąŔ5äç2¶Y—^svxŻq*Šep$™Ç›R›8ÎPőŚPS&\™ŤŔxăg´Â1"şŢŐ(9:…f`O!ä2Ö6ĽçËŐ ],·)P\ÔU×ăh©Pd×Ă!:É`‰qí’Ĺ\¸M!ÜZ« îä ‡S`ץka Q·9—ĹŻT;{X˘Ď.·©;0%vü–>ŇX{ÇĆשáĘŽ¨Ź¤/Jč“ VŚI~+­‹iČVEŮÖč‰ĹOĆů!ĺ­Hô:°oĄNÍuÁĺ5].µ•Č÷ RŰ-3!†[Šg ĘY¨‹Ú $Y€j8h +‘»ş„šŘeb+‰‡\·ŮĆ51¦‘{fgő0˝LÖ%ębe‰çFrĹăł ńŢ8ç¤ ;Ұ™y—ڱĐÁč +ઠđ˘˛Ě…gW[°‘Nj¸’ë•8*Ö‘’IR{Č™Ô&A%c“MźŰ€|€—R{@śŇĺ ů‚ĎŚ(Ĺ~$ Wtа•íŹB»mňfq(KMŻ˘Đ1‹q™­ťŤä™( M†€Ă}·cůŽĆő¸ô´€ç`TSQѱ?Q«Ń-ŰŇa‰FRăHdާŻ8âŢÔř3IÄúX;7aęKż®ˇ¦Äđ˙?qo×cMr]gŢ Đ¨’1]ŠďĚ ˇ ‰ŤŤ!$ ma4WB›ě‘7»Ş5‚˙ýěgEdÄŽSŐ|)ęÂ2@“ď‰:™'3b®˝ÖL`tOĚÎ[đ»€4rNÍl MjHoŽ6ś§Ńµ5Ä:mEÔărL©DÇ፲7sĎeédE†q/ĎAfkđN7Ůn{¸Áß +UއHúńs`üP ťK킦^ÖĽLfQćî’Đü"Ďá¤Xá€Hă†ňĺz7¤|‹{h}ŹěWë'骖EG¦­<ÔÍĎŤ÷\T«Ľx1Ô®mdög†".˝>čň´ĚŽÍc=”©Ç‘=N“ ’ń:_F°Ęfĺ@âąľËŃőÖÜţIbE‡ g cţ¦‹Ş–k ±骴2DâljlÁ wčV)ÓšcţYUËkhĘšŮ?<ó)Ou§žr˛Ä/uKXÎn-ȰQá* äÖ]ÓłćŁu7jWYzü)V]µ+z>~”Yž˙rj'Ł +xű´â•zĚqŃ7O¸şă ”9öĐÇĎžDŮÝUP¦9ŃîÔ–Ýö¬ŘĆSFNMJűÖ»í±J¶žŔ,\•}†Ć‡@Ż1î\ű!_‡î=â…#­˝ÔIŐP8,WRl `¤lmc'Ž.U ˘$ ôÎx·ŞZ×÷Ý ŁűÓźŃvÝ·»7ź­Á•Ţ=Óźčę¸.â‘\.…±ű'xyrť%h­Hç„›–Ö8Ă0igóĽwŘg˘ &lŤz;®¶q‹–tѢO°†ßú ¬Í\¶Ĺ6űíŕ"dňç…˙>ĺK»nŰvV~ĐśęEŁ-;íˇŘXňrt ”nϤ_A[ą°L]Ťx’ö0@ĘéäÔę'dmĚźxÂ:¦ŻZݕ曑¤ęý´W‰BÄíşčö¦?xŃ^ł}`®×ͨ°TŁoOŃűô¬gŇ:M˛MF”ŕżŢ ·[ť™řĚŔ=QŇ;–ü›ÝyŞ) »xlŻdć,4JĎ]łÄč˝eĘż’ś[Î/,ç4˛ˇ”®fć GOś3Ä ”€ĄĺĂćjž!hšf«Â˘ď!löDŢłů¦ż¬A–[Şä5=çD ĚÔ\ŠĄů;1·5Duľ’.ďW4WşcµşI\ÖMÍD±/8 ĂŇwŃĹľŘqţ­ű_FnčäéśÍFu˘‚»rß@rD)x´]•Ęóá'Ź=˘{y­9¸ů˘ˇĂwtÔtAíąoÁÜŃ/dK;»őĹö=ƵLæ®Łĺjgô^ăăł3ŽR§ď˘r•×\Yź]ď°żvěëvÂXśÍâ•›…ݰ›9ei5AC6­d¤@ŇPF»®ŞŁ {0cËŁ5aő k¨ňË(…=dnOéýi>WsŇvţĄŕu©^a±`'Î8Poó…„\©:żÜŹśŮ§đĽxÁ' +\öĂO ÓżžSmÇŔ٦™uzI«ŢKMÚŠęfňç¨Íń-3Ž€ŃÓ~5‘sôC5řkÁ±ç#ĺ)ś»! Ž ű ęžÝ{B$*łP1nęaé +cB´/ŇĹѸ?âŰŮŤ^Ú›cXüďlţ3)ąĎpN3]+lcEzék“CŰE¸™bq"ŽŽ|ňĺµŮ‘G¨9ÔÇ+ĐŘZŽ{Ôy@ť6ĹĽ"DP[»ĆŽ5ÝĽ+ňO—/ó»Ü˛ź!a±ĐĘ="•–nď&"„*«ź±®ś––ĸęçŃ‘î *żz­Qě˝}sÂ\(˝Ý€×LBŚš,ÜMHxTk°evţűűbtŇ}ůŽ’­a˘^2Č'­ń°· 8€‡Ř@ÂźńXÄu§lŽJE57ť`†—ŕߪO8Ęuß!»ĂĐj]­“ kŔśŻ0‰6 î–j‰ľ'8˝84śĂnY …@ß·†­sÝ­Ăó);ŞŔĽÔô;ČĹI‹»·ĺ€l[ ĺŕ~ňâĂ[4/FŢç@ţ #lK=ć}|¦ÜA~Ě󤺩˙@XAŠ»8nĚ  `ăŻdţS€Ź‚ *E·¨:wí]ŃX°oY}Yl=aÄ޲BPśJąŁÂ°CĘ<>éTĄăáMĐýpč‚LE—Mô—~˘ú)KX]G2OřÄĂó> łŚÝ:˘Á'š§ą5˘%S©GHęŇJf–’ˇs ~:˛–ď­"1ާůŁ{¨úŞ.úű@OĚÁµµ7–‚ÖEaóJ Ć wˇ bŰůÚó ôŽ@hnĽńSŹ{ˇ„¸%¨i!˙FÜŃ…X‹‘ łëŰß*˙Ýů@s(š^ńës9ÄëăVáťĘ»)Ô]`ČN÷oŤęy‘Šźń€×Hžŕ~ĐŐů©Úv?,8`!N™C_Eß MłgzQąš}­“ ŠŮ‹Äεíě0vďüО3d¶h=•IJŘtG˘yŽněqônÚF$Cµ¶°Bž7±7űÎěGúчňŤđ×*Ý«Ç%Br×RŁÇhxňřĎđJm®ľĆ,'lđţ¦” š/ĄłĆ© Şóh űЍĄă˘BX(Xl6óĂ`Y=¦,G}ݧިűh=‚ďkNáŹ5fŠŇĂěü4:ď÷z{„;HNŻEE`ë†5zzŐD‰đ×.I‚ç[6ľ&?ORô[ń‘KY†°i—@¶ĽÇŁČó®ío¶‡:ÁeégÍ5m·Z¸`TĂ›hŹŐů¸ ^TH‚ öůÖšŚáňíKP®UĺxzďĚ® "Î ¶Rě:#¤şÓ4ŁaŹu[CÔÓ´žyc{ĎŰŐNJvŚŹ‚Î`«SĚ&¦ěˇ7±˘źéşđ.Ů ęňҨ·#YxGľ;6ĺ}XhM÷­WŞZĎ8áDMw N>™aĽ.hÖ‚»¸dEŘš×ŮŰXqľ8‚~sŘ›ŐW€{®‹Iř{»+7/&’50ʤ{%l&uáfB8Ä ó‹°”ÖłÂ« >.čŐCź—+°ÂĎi-•[]Ľßř?˘=ćÍÁ»U{)űyeh#ş .ćŐ@«ÇÍě%ůĆŰ%ĄŹf_ý ±DŘ"§Ż4°›Zä˝±Hnˇ‰şĹšąĎ^˙đ–Pµ˝h<ŢŔĄ«=µţĆó·Óú/—4źp—ëĄeLď;?"˛QyŢćO˘wއ ÄAtĺ›°óňdhÓL"ńRÚęB +Čq'·»¸ şMq!X…y7ʎYŻË5éκ™É ™`ĐóÚlg1¨L˛`D Y™]ŞÄ,€}ÉúMPAXĽř¨ ¦‡×áiŇ/ń<ŁÍßźAű>Ă€{ů ĽzĺeI0N€qÜšŁQK8!™’ `ÍҰ¸ÝŢFôŇ’ăM×C¤ŽŘ‘ ŹćíNăv?9źd]”6}«Şy–-Vx [ČŘŢ=˝°–CČĹk­ŇáËvşżéÚ\[3 T'iÜŹM“JÁ‹¦ )‹%ô»O3 Žrkô_˝ÜÁŘK}ŔÔ”âA7őŔĆÍ| |[SQłOśË#n¦ŻrćŃ ¶ĎÝÝ­4ů3F§×5g~ }îžťÇ#d’T2Ú‚şžNď©A©\­‚ň8«"T_čŮéíާ™m`űůr•HĽśžúĽĎěÓç%ľ’´| !fK”1ô' áźějŐšĐi5ř,ăf;řQRę»qNëň2;łŮßj"O›nç€ćNîďĆ6nĎJŹz'Ŕ$OÎŘÉ—ëz +«„¨Í…żĂ•>•SńuKż©u(őčć¤~ŕgôĽ+šŢ? y9śßvăCŇÚ3"Q>¦ąÄż,A)K„ Ż{8ůÖS„šŇÍÚâ‡7ţ~\nµäŠŠÍ㎆ßĆt÷–}Qh$|v —'‚˘+x7Ň9´˙ć;´éꡋČÚÖr×{Uy`W4”,öŚÚl'QńĂP\Ý}‘Ë>=±Ĺ:ť‡¸­ůGŕRׂ5Ä2ÜOłMűĆSzVő ĺ¸T7Üsôş.'·pQ@Ž <•gëä¦X­s>A]ŞvŚ*VQ°lÚ)ѱvßX#$¨K„JűŃ.ÓOçŕ$…ÇxP3…Ť×ŻÇ2 + +«ŰföĄz[_şjXĺçŞâä!*z©¬ĺ&ZVuň¬öA°ŮúĂ:Ňg}ň–`M9Ň&ëŢ»§*ąĆlĘ–MšeC`ł~˘ĺá×JőŔ‹Ń_—4đÎÁ,‰ě–şŘfí=ÇQ  +äÖxˇBm/¨şúó¦—mc0ÍŃEÚ†“v©iżśu,˘¦3gf‰×űěłd<ç㥠+9ÄGqg ą.§r1[xpĚŔ”‘ˇh•Wř4oÍ;6{[ŁŠňŢ?‰YţQŇnO®FÇ2@ÁNejÎwąVäýG¸Ş50}ď—%¦¬ZNˇE‹«°Ě‘;ĺY ,K`®‰‡‚™J”ý 4†w¶Ľ´R„,ëε^’vµÜgĄâ9+¶gΙę›ç—,w=iX^őSYĽfËr;ësT˙BvÔwôĚłLđá +']Оx·cÂDŕÄcHíRęč˘űäÖČ_,¶ď†ř¶»Ňöîňăój­ťO\$ŘŐChUĹ=Ćó5›´¸ ű**»Ç ŚÝţüTÔP^°Ý*=´zĐęętlřj?ŢąËM«Ru?*lś=)Ô\Ě´ôGDVť„pa/gw‚+/ Ú=dSß„XĆ˝c®ćăcöőŔ ¨öfeUŠĘÖ.#xTĚnƬî^ČE­vł‘\5ú‰*ÔŔ€é§[~ńŚk +)ĺ_ôĽĄˇÝ ó}nËš||¶  ęFĽ rqův\Ż<‘”0:rp+ů¬)K5ŇV0łk?tň™–Ů穾ˇ+-‡»nŐŹŮçé›gÄ Łą¶ÚÚbR·ĎŽp˛=ay}ZÇÖľ»Ńr¤.‚—=^X×fŐ€ˇX’§éŚ]# ®a‹¨ü1­ úôPŘlâ§´}ýĽĹY»:m«RŮĆĐPvĺ+ŢŞr÷-ůDzv°ť¨…W6×k€xnŘśú Pç9NŚ*Ú~?ç¤Qݰ ÔşmXDě@n_Cóűö“öx€egĎ”óŰ nĹ•î«ä´Ě&x ;µ8’Ă3}…:;ýWŇg˘ąoň)dŢÂK´ĄÉčÖWűź5 Üv¬ÇTäŤBjqé^mjKÎ`t0»ç˙´ý“‹‚±ôf¦WrśśÜîšíB{v‹m'9zÇ7¤}éę ĘT?űÍM cV©uľţľŘÉ–Ő¦”o˙ˇhîj™dQ˘°˙2‹°)wˇýzwśZ/˘ăB7bĽÎhÂqKr}‚8a×4d}(&Ywo‡HÍĺ6‡¶XŹPL*gyE‹Ş'‡kÂrůňŠÖ$?Ř)_cIĚŐĚ=d†OTmµ¬ş<*HÔͲ"ůöö%ś÷•ÚBíE•€ĽR 1íĄ’6/Şĺ)›éžÜ0B}ć7ĆĹáqi\§:Ń ­±{Ů·)>¤™órŞ­‡„Ë!·Ły—śF á‰XY˝ÚăĂî5ýĽ®Ą"ć6X˘‡ZRłó«4ł°áPDĐ÷xR?•+,ů۬cër¶-·*Ź„Çú̝͗Ҷ,…SÂm˘´“¨t\űŻn=ž”`nJlƛՌí’Ômw”Śf#W#ˇt4 +·ö Í÷RłćQĂ» ¤dß|Í%äËv‚jü&38Ş%2 öMqUBn&`˝`帬+iĎO~uóô©ěUŘEu +á˛W®ź"^”Ľ +Źă"#^Ŕ Ú¤Ž›Šyśv"şáHň†±(SŰľz+X)–d'0‰:6tĚŔáŢÖ€8úök¸‘ˇ¬\5‹(D×ĺ‰hSx{8=6Ůx[Q”­«×fW Qo7¬ Ţ"z4ĺ ˛ŕp.ŤwÖ\ž2iF?ń7–‘1‹ĄŚíŔťBw5ĚĽ(˘¨#łşQh­=ËĽ\ćż“Dş/–F9âąÉx±J[Ţa{&m*:›H,nÉĂ•نćúÄđÉvăÎ!Ż=2ľŠŠóGDÚÝqlŠŹ":ÎÇł#“–\Ç(ß ń?Đ©‘ k¤ť‹z»yZ±LmćßłźÉH“ďEë+hKŽ Î7ńČ®§ŇÇ;C×R€Śľ©íçščRÓ™h0¦gX~,ł»ž¬ş#_m̶E‡¦×ęŞ5äâDÇ×vuějŰ'a¸X­r>ĆúąoOşz? Ś´…Ţ…·"j“±5Ŕ=W›ęöŁ‘Ł˘QşŰĆxbnÔö¬ĹoN–ýáÎłYC'íÚCBę›@â,łSÉÝ +ZfFîĐ×}ďŁ\ĂTźż­M=jČLKýv#VŐ»öÍ79@°Ő®­÷łU†wµůŻ ·Šyż¸Ú.:‰eíEÖ„rž˝ś{5úđ5–™őŐ[•ÁčŇŔU˝pó M‘\~.`™…R›Âmŕż=Cđ;{>mŮçŤ$ŻO),ȵ%µÇML@8ť¸é-ŽSsQ úŔ;9±Ă¤Ůč]‹Z ů|?ÚA÷h˝D Mď·'B°מőÖěŽ,Ëyŕ#_á€÷tâzÁšŘ©®0ůů˙’ţ¸·ŕ~&Ę=ů‘ţ}ZX9§Cł>ń®K=/Qáz^˛ŃŤNxŽQ‹÷túŰďŇýéo$dmw7"¦I—W™Ś];".5/é&pĆĂs”^ŕ-vuÍĘŃšĽ|ČKÍÚ+ŔÍ·ž™ßfŹć#é©N_V7řĹŢpLĺjß;c©ŢăőábpMx>ZGëüˇ¬ŘăśRó^yěÓ~ ×’g•öÚ€áÝđyĆůž̋ڋ0LN™R®ĄFŹ6zžeüE‘8JÂYěŔ+mś+Ţ,ŇŁ«GÓR+¡˙ж ·=L©Ń‡äż¤îë -±ű`źĄF¸Őv‡ĄÖáEiŇą$O#\<ĘŠÄüÁß\]şć±˘ŘŐëĐű4MŽÇáăT>č9÷.k’Üv ňĘ›˝ŠŽź…Iź˝ĚěĆ»ÇWŮŻźĄűň®*˝ł|{WNŻJŢŁ˙(µÚ´¶KęYőˇwšN¤´ů݉pŚĚg őqĘ÷0Ć\ŕĐ 5`-şy“ëbcxI%L=ËEýř6ŘKqr­Âk¬Bőddo» Ľt=ÍĄĐř[ťmŽ—[<Ú››H‚_}ˇ­©22d`{rÉhQW~Gv 'ťÉĚ} M¶°@a¨ŐĹËžŇţeU^Š/g™ŤĚ#ÖXsŤEmů¤3VÓň§zßłßKÖđmôĆŠgmlS×§Éçf뛄®K1Ż„ŔNŽ«{h÷đľX'ÓęĂ™ÉńІUZß»ý,čR'Ď í*Ń9ŃT*1Tđ]·Z]Ź;— ‰bÂiÎőŇŇĘľÎ1‹:ůäTd™mž 4NQŰ«®*ÓxRPAö´"Qµ˝/Úqv5ńµ”–óěŽ]GŃޢ@Ęź;¦ŞL–x\©ŠhÉ+¨fď%yvpĺ“ű‘ĆW˛żíţŕźÝ2őłńU–Ů»gÍČ=BSëöÓ”ł©E!i›túUŽě6ĎžÖˇ¨PqD–é9ŽT&îZpÚW•hÝ VŚ‹Aä2;{P©y‚R±CőMÇ'|ŐHĺF}#!č×Ţ˝ź÷Héř€ŞŔÁ‚@·5ĺTgŁ7—~>#žŃˇjşĐ±»ÍËQń~Úă=CP˝:ËóÚ˛wUP©ŕj‘’xpąľ­A„Ŕ¶Lwb +޻ۦ¶ŚâŁç9w¸oaj ›=úÖ cĐ}í*¸ł;ífíĽś”>÷nĹí&Gm#ęVŻÝÖ¨ŕ°Ú‚•?imM¨aß(lťQ•Ć$WŃz ‚4_ÜŇŤ:–Ż"lH‡Ž´=‹ë„†5ńî›ëH®FfÍ–UşB˛‹|ô¨.x˝ĎĆv§-ÔC,ĺ{IkěaŞüŘ#¸ś¨Çčn‹š„ŽňÚ„›ë1ó,łW—ĘäŃ)ôz÷?{ş€·żŐ {mÁćÂŘËöP™–Ův]¸A5=m¸ťcĆď_›çMęL{”ś\5UM@ŰneŹÄQ>ÜŰPkhŤBČÚÓ’MP§đ ië'ç”{^rŘ9±¸^ťGŰŰ›^h6(A”¸‰IúuʇĹ$đł±ěrÓÍy(»Ż4=—Á»čT +ůimĎV&u¦•ł‰Ű9}«µŞ%šo'3rkěîľVţ6n^ě%yŹ;ßŇb>č·©\o¦;⑥8žS†¨ÖĄ˝t»?ÓÓÖ+lÚ”4 +ŰÖ”3K‡8!„L‡l†Ŕ-·«ş°škîĺ`ꏙĆô@Ţú3WÝÓý@´oć@]—KŞ(®çÔŽZŰŠM“Gۨ×]wbĹ?ý­~Śqnv¨’Jô!8ś…[;<ĺn*VAľ§âäó¶‰ÓVgÓ"úUÜCé»¶µ““wŁP¤ŹÎ8¨ąéŠÚ¬°„ŔUZ„4 ¶µj5¶ů·Vßlnšç|HŻő„#~Đc°ý;Ro­±,pŃxľŤämKٵaOsîâŐŰ{ěXoú(`:i:ŃrD[uŮŽŤyôfÎܨ$( ż=k!Ůk€ë%ň,@Ř!ĐŔâÖCyh|ąŇžyWćý]pG‡ĽXPz€ńUR€ôoő)iřZܸ‰D)`eňt4 Ł=_ä Xâˇ4ötľśÝÍv˛<łŃŻŁ>¤‘óĂ*q¦®=J>*FČ&m®Íť˘ç*d +ŁíXµ5裳3F%óŮęč˘Űgç`TőfL??¬˝>×~$»ą}ĆC~oŽ|\Ĺń˘fÁr¶ŢĐlďEË›:O”LezĎâ!8Ş>c[ş´yö–b¬1ř›ňŕ·ćĺč–Ô­oŠQ· íŢ0LŤÄy2®$ #˛Rë*ř=9ŕ^gŇűË쪖§N¦„—íĆGČ7ŻîÝÂ5‡čWRbaOŢlöŇ„,ůÎ=z<ý•×H¸†C©–´Č äÚé×p{ü2} 'KÜśă&D^“š o†íe´¨‘űÁjÚĐ»+*›Îa/´ˇ‘`źkŕZłÇééŹ<§lÄĂ:™&Ŕ:~M”źÖx‡¦´,,Řă.ZÓ<ó—f‹í}®¬n^ězˇó¤˘yhÂť˛†o/ßŇš]żťcł™‚'ş™t{J®Ů˝=ÜŃä u´"NÚ/bď÷mtŐjn Ď/Őäy5Q«cOb”ËÎĽ '!ɡb«.áÂf„Ť řÓ +_ńR¤_ŇTąT1AŰĚQúë“Ĺ_;–XjđđĆÍ%ĚÔ§éGaU6Ý‘‹PbŞ’ X✀©´$Ă/‚ë bf2{íH.V7*_.MĽ·Ť6»c@)¨Ýö” `˙V@TȰ6ŇĂę–Ş!—˘e…IÝĹ'@©ţ8›óúU@%äÎ`fL)9.ĽŐň6;žV;ă÷Ö/?¬QQu +jYăĹîŤDŕ`°Ďţí,?ůOZrö ń”ó°Ç3e‰Ô^¦ĚżźkäŔÍ|UÔÄŽÚŐÄĎČ˵ˇ§ËEŚGŞ˝µgčgvD-ÜDçU’´Z„—ňEŐŚfĎżđFFťMŤ&VŻUŕ¤Ń2Ao52zôeÁvşŕmŻĄćę©v*ě4ZNđźW{ŃBňĽF ó9Ŕ”g›¨kčG?ľ˛ĆXôCěg©äÚ¸J[L¸Ż*ĚŞ ŠÚÝť7@4‹?gvË©+XU.Ń:Škđ­ŚńD"ß…ý™—»AÍnŽW{Ä6^‡ÚLő¬S ’=ŰM¦’‰c¬iMꣻž3«!bJÝ0 WóšëٰR73ÔhPŘÉ^$Éo2Ţ6Ô‡5–Ţ\«qöTD ‡_vzDĶsóŇĽČň…íךüî8Ô(3? ĐnUęëÍâ j¶÷{np¸Ďí·ö´˝JK&~ÜĘĎ÷ÎŮĺŹJ ʰk=‹nşŚľDóă_IÖ1>3#ĂŹ2řzg§9tŔÍčő%Đąaëű!żJŰÁ¶úÓÂ4¨6`häćhIÄ,»'Ú5ÄTbÚ Ň‰™Gľ¤•8@#Âľ¤zÄTDŇ}‹d“kbÁ‡xĽ|b‹ÜN ,Qçî¨Â°Bm«ŻnýŘ2M§#ĽsěZ0cžBĂNž=YIϢY<cőś˘v´ť_ …ÖĄS5ôTśj XDł‚y{aćŢ˝"ů„PÖđ"‘ hËw±ÄQrVňŕŮr©ă?1xţUŘË,7é‹^XĂÜăĚׂ +Č“Đ"“âfH5žožr‹î‰zĆŢńîęĐ1ăéĆ„#´Ăąxór®ěx•ĘŮQ.‡UŔÝéŮDŹyÁeO%BĚĄú¶ĐCč‘9:4’šŰ+_Ćáę®0&’‹tąŃß$™­–wweÔĹŕ4]<ůAöH,¬ŕÍtÝ& AyĘgĘ—DÍk[{AJkž˛aâú6˘fFШ9¦saöęŇî â4“7rR@»ëEmô ¦ŹPöűďâţGöËď˙ű7oóő?|ó›ďţú;ű/˙řöçżů—ţÇ·˙öý÷ßţń[| oą˝ýÝßüáü‡8m·@Ż!˙e8˙/>˙Ąâ^ÁąŰť·˙= jaNę×TŢÁţçß˙Éźý懿řŐ/~řŐ÷ß}ý›˙ůöţííOţëżůŐw˙đ6něďu+ßüň﹯?~űßXňźřŹóGĹ·ýĂ`7úwżüĂ?hĎż˙‡ż˙*q†ÍÔßĹěR‰› AŚ©itDj@,Ô^Cř"â*Ż‘ń´e6FzaÖâ˛P„4¤,ő%ÂłłŰx=R} ČĽ0%|Ťy·[Ôí™ ¶ä…)OA’/ŞeN•“9Ë@qUÇň }´zÓĄłŁm©Ć0ÚđaµH¶7÷ŹĹÄČĆ–fźýŤ¨8ÄU捂ío»!z3–[t"ęKΞUĚ÷!vLK2Ió’hUd*,ÓlČýƵŔT_ŞÚ^Cm„d§ÜQ{­Ë6ţuŘ H#Óę Ďč1żňšŃł;cűŰĆ +`7ŃŮăT¬_€ôĘ Ă§öOzŮnOł1ź-±;BŤ×ĚÄ ¨âç€vą˘ónźS–ܶˇĚrDŘ Çiţěş(˘Úżp-ŻlĆUĹiü)ĄAË‚Iú[VŠ}–(JŇrDPĽíěĐŹĎľ¦lg)#x=ă,~ 2;ź#†É»=8‹H- ütÉËIGZqţÄ(Ĺ1T‰6§ÝeĎÓöIűđNTOŢb˘–"0ôź#ÚU&C3^[íËńgzÚKäř’FY”ůO˙«JĽŁz­Ą§…QBĘe§cfîI çć@â'«´AöTÁżé˛*–üúEô¬ał_i·üé’ëüť¨×UĚ ŘQ…x YŐ©:żčĺ¦?[R?ąŁ×Užä·źŻzy%oúĂ‹ýöŃ0;ź'ţä‹˙đGőýo~ýő·üö'űÝŻ~ńý/żyŞ_˙ę'?ůů7żřáëďţáŰo~ň“ź~˙›ďľůÍűź˙d˙=ÎşĆďó·ůůŰ?űď˙üý·˙ňĂ7_üëź˙/ßýŇ>źćßß«·đÉ,Ż™ŕűíO~ţÍ×ß~Ľô7ßýđÍoţnţQţ±UşÁźýË_ýË?˙ä'aŻţ/ßýđańůîW?üęëo˙Żůú—żůú»ţĎ"ü;źEü7ý¬üď¸ÓôďĽÓçÚáGîôĎř˙ćš ˝^+Ř©ů“˙űWż\6čôÜ˙]żÓóř÷ţ¦çíN”סŇ7Cň#˙ĎßüęţńŮ-ńíOţüűď?ąĂoż˙Ĺ˙ř×_ýóó,(&żSJł‡cáoÝĺ˙Ďżi;<›ç?Ťu?űŐ˙÷ÍýÇŻůaóőoľţő??Oçř’Ď‘űŰ˙üőwżüö›ßüŐ׿ţćGľ˙¬‰ţíŹY®×šéKĹč?Ž˙öOĂýů]ţßß}MđpŁĐ·yßk r§čëe2Żĺŕhű°ŚkŁvPb6»Â~Ç-ĂR"xA!pŃ‹Y,üŢ6gt‚Çać]é­Ą„p‹g˘=ëĆőííPEh4YGĎ)ˇxw[Ţâ˙÷´ď.¤ý‹‚S××öw'V÷•e(ďî st6[súo‰n›§ÓnŃnsó>üÔ®`Á‚Ţ|˛äg,a(ČqZé6Ż%I”ÄěĐx<1–ŕ$sĎZĎţpϧ—Ë» ňf7§żâ>fÜŰß=Užaó4@ N¶5MÂŹĚ`¶C4Ł{Ěş{ű$Ônsd <­®e€­ŁŰG«o)$\[÷ßďZÇšćv7Żk­‡_š×⻋ŕČ›d°É0®-ČçŮtńÖËćµE§ŔNв•ĹőŐPE»=‹€é’`c¸#Ręç­Égzg|Ű{ZäĄ)«É˝^§˙ Ĺ$ĚFeňŐŢÂËň¬@„lšĆ‰hŽs‹hmS ęČ fęŘFIlVÝT‰ž™ŰJí=ú­ŞÓk7ób®›cO‘`bšcăăm¦-/‚DTrHŁ&B‚šÔ÷3té$cďpᇤBőŔIÇ7Pf}öŮ[„źođ§ź™ŕ×Ú ˙âŠQůłO.R;Ę/ó>[p:‚‘AţÇżő>%ÝÂjn|¶¶Ě^Ây ®}H)°Ěç”P‹; zŚEŻoK@¦=Ă?ĚŕóĹk´ÚÝr~îW¸ Ľę…¤ŠYř|Ŕ"XÓfýš0Ž™‡{ą—eLô nÇ‹Ú$`ÝÜŞ÷! đň¤RUaÖ9Q&ý7»CÂě»rˇ´ä5őýĚaoVť®ůÝ˙ËŤq·ŞŃݱy+(#7ý IsÝF}w:™&şŢ,Áż·f¸ůąŐ×aŹő>/źtr"Pi?ć)?[ˇ^ĐzVź­(őf˘‰|Ř.@=óé4áŰÖ †ĹA¤ćŽńô`¦m· /ň´“<ůe€Xz÷č>ÓŢNŔÖśQđšŢű6¤á}ź +műÝN°ęŰę뛑 ]öC+~”é¸óŮs÷ŇŠëŰ3|ŻQ^ç‡%ßףń;,9OËg¶(K\#m@xwćsČýŮ +‹+|áăp~ Řđq39‹„~hć·­żŕűŻs…{aYеFiç¬AřL ăÉ98Ţy+–黣—0Ă:,çšS?%üTf_{0oĎkkńŐÍď1mNQ5ăüň¦÷•IÜBy†mŠ^>ĺűc}±ň/Żߣ#á‚™»5#čýŔŇź?N[OMßĚމ {'‘Í9bd~Üó 3óŽČ©ŚđĹ(ÜŻ¨_źî˙™X«ęńń˛˙z~ąg+ę«ÓűáÎ]°‰bż'Vďůtç) Uľpř6fÝČ+><ł‡ň5ř°@ĚFďk‰x śËbÂxżç}8NyXG ŁŘŃĂiśĄÔ‹˝Nŕ{úőÜQĄđöă +<´µáű–ą÷­KüńÜž?0ťů§Ź/¦EwÖ ľeőěśś‹>öF>ńá"ݧ:•὞vőü¨RÚA‚9Ů9»âjŠT÷/Ő×·÷ÍK…‡_†őu«ťÁÁoۧżř$ ÚÝRrň±ś=úëOWĚ™(ĂO›6Ń›ď­J°îńą岓v~2űă(UçlPś,ŃŘ1V@ži¨d7…Ž)Zˇo®ő|ĘÝw3™ęŁjż{&“ÎŽ˛ĹąÜqŃ c‡źÓßÄ·Ľi0°áşśQ(ő2YçÇ|ůEZ´Üń×0zň"îÍŃfFř÷Ąj‡GÉ Ăjy9Ů÷FŤb•foZň»ă˝gË>ůřň•N]ŕĂ’{s‚čSżkÁÝÁËŤvwvćÚ‘ĽćĄç×»ŤŇÚ śľÝ§S¶'vŐ•«×%ÝrrlAÜHÔË’źŤ%ĺ4sĹjeřë\)K¨üłoU„v¤­…ËráĽ]/Ď}s0hľ +ŔɶéR?±a¨ěyŞ_Qß'iĺ˛aŢ_×K<_4Џ2C͢ŭ±>JŹ{kĹ÷ěž…ú©eŻx3KśĽý îfÎ@ÜźéĐ•P<á/çÎ~;(ťďµŁPąg'±Ü›Ë-ÉEvd«]+ˇO„ře;°a(˝ěéY•Á\XĆ€¸‹sFÁheÂzr‹Łuć:ĽĎߪ\"Ż) ¬ÉIWIl*±w8Aúî—č\â¦ŘNć÷ô^†˙đ5ÍrźkË‹í?|źý¦ÇŻŰî3ĺŰÇÇ__łw¸bwäŔxvP×~ż.Űu§xÓ<É +ťt…×Úłw_–ţÝ­_B—ÂŔ†ŁŚiŇz¸ýó/RXÝ™—ŠéăŹ_]-ĺ},~»Żö1«řáüo`*j3k˙z.ńIÔR]y/Ă&–}BŻŇűńů3¨ňx§Ň§}Fě»÷ţ`[a¤Ô=v{Šř~ž |HĂđ‰ÓźřĐ&-»ZƬ¬}·,€,ăKÜěš;ÚŔÚŹţ¦© lŻĹ¸ŹË’f–ż'ŠľWč?Ö×·łŁóň÷T˝öaßŃHŁnć +%ÜýîďĚ`äCäżw·NßóŔĆ7Ć;G`v%>śŘťŽ ¶ăÚ6|žĎωő×ëă@źą=š#ŢĹ:Níł˝Í$l¸O߇múÁOź;ý§_> ź•ę1χzÝ'+ę{ŘńĄ™@˙ÎÉŁVµéÄJ¬/ź3éę …zÂQfT÷y}ýőŇŐđh×Ő?”äé-;n .@Xx ž+Ń.Śó:’NEČún1lů,Ăîeę»ÉŮŁ ˇńśŞgIÉéĺÇnˇ y¤čŻáq!Ç9nţĺ dšÝޡ„˛«ěE ĐčĂó¶u&ůţ’ß—¸Nš \ť°HôářäŽOĐQ0ôGSě 1{ľtí¨őgóRqî”$o…ühşW8?­ż/<,)ĎćqˇŽž á‡DV•a7 +c°ÇŮIÍW C…^#ěĺs]Bdhç%ŽŻ/O)]> aU×¶g¤¸J [ń|ŚYb×ëG`E=Q¬+‡}ňůK-čă +xá¶ŇqR©°.€Uö™ úăfđľŇ[úťđ ďëč3á:Żáˇuüěs]@‚jýÇ +Exčę*ÔTvŮ‚ÍÔśŐ<‹:ó°Z•ĘWÖ·żPR©(˛¶MˇÝíĺ{řË!ˇĘa:¨,Κł YťŹ7(iď–Śîá(㛯ŕ—Ăt˝Žţ©~!Ý^ź‘ÉůŤo+ŞX::­—Čkv5'Sř1x†ìÉůýţ+’Ć7îăěΛôJÁŐ›«ŹU´ŤAaŔŽË7ŠŮţG“t~N9{퉆č€ëŔż·ýtX#ŃsŘ=*<ŢAŻÝNDń•p-+%ůĹđą} +p­´;­:řG—Ě”Ďzf_đéźŐÉ +á}Qót+Ĺ# €;.x$Ôi¦É OŚX[˝Ń‚|ćĺ›8xřmţřĹ0¸ÇË×Űűz`ÄéĄ;lČ‹W É·ÝĎĎőý/ęľ‚—zž.‰-U/ę„'§©1ĺĹíŞcrÍ µÚOE"‹i󠟎óđaĹ ţ¤žÍę/-€‚jím­€„ń8óĎń#R>˛3˘łI°őĄ×Ô]1®€ęp.aÄ"› ¶Hßěč×í ^s;ďţµ›T„Ž÷eŁ×ݍ'–>_źś{ڰ4ú˛{tq1­% V¤Čü’ŘŐę»^p$Ujµíú“.@šŕNô»V¸ĚŢI”+T›»ë†_ČQKň™ÝđíđVé’ý ËM˝Ě›­3Ň&t´«™»$ä Fäł„a˙âĚ˙ÇŇü'+ŽŇ|5ď˘éki&¤łüýˇ4oŃúűĂżťWĆ»_⢳8_z~ôĚ?ç rżśë¬ÎĂ0¶xEVüĽs˝(mWÄüPťŻŞĺčßëŞÎWhŢËxdćVß'ýÓŹTç+žč¨ť_@¦ä9$_ +ô•dĚ3ž~,ŃW\z<ŞľD_ŮC‡ď8Jôź|üZ˘˙d‰+ŃëÓâÁY¤çóGZčGŠôZr]gťžĎÓ‰|:JőúüčS(Ő¦ń‹cäţXŞg§Äxŕ§ŽR} ńÝóşľë+ÂE„äC±žÝtâëžr˝%–ĎtW*;#ďĘt÷ôÁ;;íĄhýňő%ę:ëőlĹ˝u~©×W˛ţăśűJ{ż'˙÷GÁŢž+\ů óZ°ŻéEOéµ`Ď‚@Ő¬ŘóĺĄz×xVě9Gůh~¨WU9ÂYvvăç‡Űé~Ľ”íy~gđţZ¶ŻT?ŠoçśeűŠ;ôäN/e{{öö›ö˙ţ¤nĎ&8SÄŁxĎ6:‹göĄÝÉnů!©AĆŃĄÚŻ_!Ą +—ĘźŐ{Nbż˘ßÉŻo›ľź}°ËçɩÜőűSa:ÂĽ×ú=>iI Ą™¸ú=NŻÝ)AWÁÇi^Ç^ůPÁÇď.bŐÇś<ßţę’Źţ|ş+ás¤ď?óˇ„Ď’{őĄ6Ęçőhđž%|>OGLňˇ†Ď¶\ú9Ăąľ6íŃĘXU|ůF—÷}RĆgIş}tr–ń™«Ç~?‚~™ÍÚÎşŇYĚŻlx~ć—b>G˘äćÚ”G9ĂćĄ|v~A}M¬|=żBY|ŐăCAÇł¨wź%{»+Ľ9ěŇ,ěW Čx˙ZŘÇ啳Ńqöq™/ŤŁ°Ď燄ů‡ÂľÂłćÓÖŁ˛ĎÇ!úlęÜ˝Ýú‡Ęţ—ÎČŹVöü;Ó±!®8wg«ĹĚyöm?´éję'¦ÜˇŃ*m‹čŰÄŚHé…D'qz¸U Ö‡CD}oEŹUęů€űűIű-hŚąŰKÂ[‹ĺ{g˝ěňjõŔYß|µČ¬ÜUX‘Č8LŘ Zqź3-· ý1ݦjř‚Vř«=ó–t›e®@qşx,•Ĺ·;e®EŹîúş÷\_ +yŇŐ±*ÜaőĄS·MAydŁHθȱ°Łčýa|ŽÇűˇąp‚Ěő†nßp'ÉŰ2hĺe š¤—Ö`śĆĂîz#ÂŞ +¦ä› ÓtŻřŐWH?>>›fĺüZ!šŻX2ŢĺâVqŠúţĽżŰ&TÂÔĂh"pe:F€űüWPČ^i Ż›–ÉĘ‘â,ŃăôVÖ¦ă=ˇÄ=8Ľ¤÷ç yhůĎóôš»wiqěÎ}śtďEôëŰI2͸8\ľ śAäŻó,ŕpćzüa#¦ôýt›=‰ţ’ :á˘./ýęeQPé<[«7h[dXś`®4gO¶ Ľßż¨Źôń”´ë›˙ä” ÝéĹ#^ŻÂ„˱ÉΛDĂ$7@óńg¶ţµĎébĂ9×§|…—ňéÇ…8řQ +xy× ˛źLôöřËĂ?n4ŕ^‡Áó$Ć X]\ú€>Âüx<č®{-Ű×v˝účă|2Śăć>;ŕ—Š:.Ży±”€č‹ŤUő¨}4S¨I6?çt:ę÷njůťr¦ ÚŮ;Ľ´ŢN3} ”âK—çţZ.¸ÍÇSŇ… qwřń” ;=Ĺ÷‹ÇęR‡÷ďĂáu”wý‹úč2Q^É;‘rţöFrĐORśŽJîË D|ôôw}OőeúXyťŁńkúë~Nă5Xęďh[ůXĚ_ó&â%R˘6}NG˝ÄbÉ|ňpÄ—X #TÂŹ{íz ¶_bE$Ž8äÇpł„>`ggÄĘböó$/ďoŤş"í/@|`wZDꑉţőg|áíç˙« ţO»qęᡛ‰°ë›|ű×?,đ‚YŃv@»®·Ż°—Ĺ鲧DU @c.SÖáíjńw@줥·B}ĄÁŢ{‹&îí+‰‡Ý¨nuK‡óeK­°źt›3 +UK"˘ižE"˘agU¸ŃFŻPäAĘ gf¶3_ŕ#ČÝľť&‰ş*ŃUw"Úr0 +§73Yď¶ÉŃJ FźƸ š_üEâ`G.ĂbĐШąŕš“îŹ4|íJćĂě‹h4Y<|™ç¸“®…ęOG& 2×B+Ő¶—íP¤9ÇtśěěÔ…<®Ĺ”{DăǦߥ^÷€Ő +PX›ađ÷Ú±G‚íuűÓüx¸ŔXcż 0vQ’BvčCă¨ń/ ŕGšżľA aŠ×€ŕÇ"Ŕ ö6˝ Ť™m +&yОp0·~?ŻTŰWĎ&mąěńŘĎ҇ÂÁR)b§¨±QÖş`Ţ+v52ÇS¶lÁIşŃ¶MB۶QŇ6lŕűÔÁ™x Ńň…âö"’R ĽŕH†ť5 äXP•¸ˇi5;"ę™+Ę‚:ÚT‚i¦±k ˛EtjăR ¦>űÎcÔ"äşĐ§·Č؇‘fí+Ě}qrPooĘ*)o@ŠÍTÔ*ġ Ůź9÷JÝĹNŰý\ rDł‹ö0˘d(¶÷†5ű©;6{W +§ä*’—„«îmQ]jŠ?YDkF%¸…fń Â0ÉęZhMˇŘtE1^“©ł}lk•>ŇHrŰF¶ŁÝ]‡E×~zS bo—eˇ’v6%Řß…§Eˇ 2ű1D>ŞYŤAuz“óšł4kc![,ÚaAç–öL—·P¨·},âđ,̸ý*ŞŃl'ľ]4BP–¶˝2®…ô¶E‚fômiÓ*ł]f~lźXűĎgLŘ-]c­@—ÇNr”čßC%pY›Łµ«ÖqĂ’lÜ+śáălÝ„'•(,=?ŢLC´ăn‘3šަKALTŹŤcé®Ů+;(2+ČŻŘ °łÎ7Ę˝#Żđścč!ý¬A’ŠÚ•úŻčoě[n@(T‡ó‚ž•ѵłG,×Bź’#‘…'ë.(Vá‹/‚ÓĎlOYGsm\¦ŘÝ5îć‹në§"óǦZböÉöYž&-.ű7ýĘŮ vK¶áŘÂ,®ئ­¨Ałĺďa DńöëXr+4•`Ă׎G‚úW„ö(¤%8ď-rmŹ]A*ѢLňí aŔcśbD‰ łĺ%V ©;ş-ňđfÚµXdAŃf¶źGfˇwĹJĘh`˘JăT€íAů9Âô'1 řGBîÍîB3f­ ?5نŁdtŁCi»Îžľće°Áć!ĎźKlk'b4{ŮeŔw‚€-?že3[bgUVăBö®ű(1ťX4Jn˙‡—n˛spéęĹŰ#7Ü e!´G;ŚX‘Pg5{ÖŹ·Ws‰F9aĂͨĐ»nÓó—ÁĽŚ&¤Ćç:¬żYŇó}F”I€ąÇůŕćśÚϵ›Ł Cĺ¦6,("°÷Vëpëfó§¸Hb4ć‡F‡Ú1§:ö ą6;…¶—ÚřQpó5vö-ůąĆ"~¶=Z™pMÚk˛¨1bÖűđýeśtËĽ1r#{‚U±_6–زhĂq%Š×v@Ł^ü\!3·ĂLŹ]s" óonęęOü€ +Š}bćж2Ă"Ă.”łË83hĺŮů±gd–yěŔąďĽô,Ef†‘˘ˇ Ż[NüR ·e\(â”›PĄé‡[¨BŚŐí5Ý +1ěKĚ6®}őç ˘č“íôˇZˇ(Ăr ĽäŚY4ő‘j¦­q7]Č«’:h?yW|î—F}Şě +"Uvbş3sV4!`(ĽT™°D5-X|°ö”fuĂT{ćo +”ĺ7„ě,ˇksĄ}=sóˇY˛±ŰáOŠř łĚixKl Ú{·Xím .a˝ĐxĂ^Ř{ ęcóö}Ž~ئ6W’`i× Ă[nŰ ÜÔ==6ÂQŠEîţüxF2ěnl‡óÄpÇćV‘˛ěLa‘Ęh¤%č)˛LćÚă2űšć ˝qŕjy<¶y—\%Vđ$Ť jäć ű„•ÝLô +óŮ€˘]ľË0•$öÄihŚ]őËíőŽFed¤Űž‘‚ł™Ň(®Q•Ő@»í=»¸Ůťą"t ŹýkUĆEâD)˘ÇyĂ4”,¶%·öąH§›*FgŕtüřËö ˝łĆĎ"“CśĂLpź™×bA*˝ŰB`sQ=3kDj4_¨€Šµ ş˝E¦Ś¨vŤ’gTŘg 2łůQôNäFv¦hnĂąŰFM(K ĘřŇÉö–z0cpMżÓ°0 ‡Uąžś€Ü˛Hí ‹ŔM>~ăăŻícŕŔšÜ*¸ŔĘ\„úLz[‘†hĄ®mŃęŚ~šć—qŇEü1¶3ţ•°Zł*ć*¨ÁÚQç™°`ĽSľëcÁ­<7đ\źłE8CČ6ďÓ“°—WÉQě—ĚłĹKaXľRGi‹Kg2!<Ź:š?^7śÉ—×ďťó]Čc¶Z~3|ą(Ô ú0ËvÍśŹš~BYôŁMËhm#Č="¦‹śą{iP>Mxz`YýN:;<"i\a~¨Ď¤=_Še„TY›%Š +۾’‰;Ś~‡˝Jľvźăfn©›Ů1C©kDŘóMŞbA¤O‰ŞćÖV©°´pŁÔFţ? /=“i„8%űp-W‘Ŕ/>D”5ޞQSGŇn‡Ňx ,xŔËRg{Ü!ń=ę;)ď7g'Ý7$Â~•¶üĹ3żTďŹ_5kbúÓŕ Ł(‚[«*—Ůíšµłh6qĐgQ ö,ËvĄŰ§$‹`€×bţÇN^‘?Dv*’Őáí.t®8e–źŮá›RvĆ8GM +¤“ŹkˇŇzk†Ýśiťˇ’í‘ ‘."# #ÉłO-Ź_©eEüP1äýłŠÎt%Bf÷qÁ®U +‘ň8ăłönŽ"Ń ¤GöK|…Ş‹}ĎEç(«l?Ö^V11a–Ňb,.™Ťü¦Ţ +`€Šš jQeĚŞ˝ŮůŻu¦Ěmp[ÜČšaYlűZhú˝…XŰŽ.ż; Ap@Ä\]Rţž"D¦,&5QńˇsŚî5ß'â\Eýt]‰ß‚ĐŞ‚°:ö…Eę7Éܸ¤8ío)5Ǚ’0Ş+ÔŚŞfÍžµBµyěŔKđ>a”«l§ľJ×ţRŹD‹¤ći;…S1ęŇŃĄŘFrE*̤cÔ Žal¦rgqâ§ s•ŽĄ]‚§®Ő â˛/6ăÖž‚:’íPKQ,˛Ć® nFpTÄčÄíT!OÉ*ɡÇl‘=MŔýąUm{›őşź(SdOĐ.yëžíRŤH¸żeŘů¸éő™áż<¨îśę@ b°3\aĎ—b«Ń•Ú]ôeÜŞr[¤$OůB­¨pű4)ívš/–ń¶hóŘٲ÷9’w24Tâ·<ü¨¦2łúfĘ0a ¨Ű° YűKq]jŞw kYČU+ WdgŕŤ±j$â€#k`ľ®ńşý *RÂaâɶ(¸X‰3Ôm ęšď@µ×Dx,‹á»§Ů8G.Ů"Äíۓš+&P"™żžßY±Hęo@pMďX4ŇŔ6öě, ,˛*´¶ ý¬řĽPKQ˝JŚ0łµ,ŤĽŁ:Dl^asnJT›Á®Çý*ěŕ^ +)WmhD>őÂŁę$°‹Đ®fĎň=EA†śáńž»™’ČMF‹ĄbŢUŢ U1ŽÇĆ<2†fp+"ńÉÔ•qs´lk[ěéÝŤ+! Ľ†^ů5ŹV·Ű/›ë=zýü{^ýµUN:aďŤô(ă‹.ë÷Îô*Ę poÂŞ™a4%ňtHę5Ľ!Ä7ŇN%‚čĂě `dŹTň &® Ă)EK@@)ŇĄź˝t;1čo_]:ĺŘ`űVŔ†×ăĚ˝€ „ÇRs,rP1EţĐŢM!ě ®‘żÁŚÔD®GŰ„ŻHŢĘ04+h˝Š«­2ˇm“PxÉŁ¶‚Du0üY®rs öxş$šńv´’Ń6nHŞ’ú€<Ćę—ć9p¦łBCŚE'€B\™ŢÎB +Kx룡é`[^EeyV{pŤř*Žâ]# ˇŇ=R \ř8Ő…×5ýˇĹIÖS›“1"h*W㾲üˇ=NË…Â=ž2l˙‘Ň0`2Ś2ß–-Đ©»ž7zÉŃÚkoŹGěPČÚđĐ0ZÚď @Oy—Ó˘Pm±.‘ÎKcšôĆ•%x7n¨9ž +łťú:~A}<"53úć}\Ě>]|žţ-żŔ(Řf~ËL†0MŇ›<řÎíČ@ɦ+25qűŮ/aLŔb-Q}ýx,çu!`Ťc`ž(Ą‚šď'ěP˝R°ůCĆ-®ŞrAŢ(9$ÜmťŚt°QžU/łfVŤüźĐ›÷đ™í2zÉ,…·„»ĺłôC¬Ŕ,ĽůÚţxÄÎWíĂßV§ _„#G +\6x>CřČŐíIŰ+“…ŻŔ9DfÝćůc«eš­ś¤émż‘2f»Ýé9/;#ŤHVŘnő^"™ťg´đĆ’/x®™ď17PŞ'¦ĽfJʤ*ßqhŮ‘żé;Â*˛ +Ś)y"GĎjçÉÔÜŁÁ€ľ"rć˝&Eť*6An‚ąő()‹TÂŔ¬ŘU›93 §*ö/äveKúŞ$ĄH‹—+sÉ­ m:Fę­€a‰`ŔŮ[ʰ@uq0»ţř˛|Ćňű@Dez‡•P6›KrEfĆA*PůcÄ9ödśDňYDťjDÁŹWĆ’IŽ ü«ÎaˇXo˙‚%_t ’AŠĐ±\ý"‹: ˝Ô4– ´ÜÇB-ŤŕČjŽL#7A™łŇ=S>Đ1 hKdeL9ß ĂČßĐĺ fKgÎŽc4Đk¤| !m×ňĽĎW>‚Ůş`ž; ĽzŤ}‘ˇaµĐ ‰„‡,‹U…ě“c§çnFˇ©0¨žŽĄ/íŶDÜ(ă}„ůĚĎ^’«ěÁ0T±ËĚĂ@—.<’ú ÇŔ,:äü4ŮQ¨f/l®7%"ŰL%ĚŚ/€_)Fyů #‚FKě[„-YŁJ“¬SćŚ]`Ű|óM_3ao©Ú4N)X–>€Ş|MK dEi\(†ó»dzRśŔŠŹH"- ÜEřěÁШ»Ď ÚmŔ5‘’`Ş›†™'6ŁVŢ5Q;Ę­Äń„±˘GŃ´ÝE>č”ZÁîŚ(+“ÁöăSËo'pzL Ô8‹;‚ÔÄÜ!~pŘýÔ@l/]‰]Řâ.’µžąÓüĽP"ô‹i˘a™±“1R×.3ĐŻ”Ĺ.ŕ)MÝcs˝„ÂĽ6â| +Óš!ďÁN:YTzŢS&‚É3ßËJęm÷YţÚ /‰€Xq!~@@©+knB'‚@H@tI­<ŤĐ6—çd &€EOA]ě•؇Č;«:ýÚ[pîŃ<¦VGüÍWÍ”BBZöŔ]~ŮgýŢĚ­ěćM{źIó6Ę„l3=źŢŘ0{¶Ý3U?Ë|F_€tąh[‚îF±Ęäg=±ÖÁéâľ4LpŔVZvbz^Ž˝ď$¶+˘ÂLŰîoŃ4ťYţ!q Ż2n¦Ŕ×LÜ9Ž%ś˘;é¨ă†+®˛fĚ”Ç +ęAAÇé[(Ĺ%ŽÉHŚH5$⮎Ľ(a*I~ń†ôfĘwŤ¤>dö)ŠË÷ă őč¨Ékş:3ťQm¸Â|y~ˇÉDťlµÜjf<ş °% Aă,Ť,#kĽ‡1¦[QĎô…_ŘO§ČŃf `Ţ =µŔ$_HC˘Se]¸cčÉl3X±€pe]vćÝDĐqÂÍβ.Ť fWhM¤ŐŠ˘ÝÎh™ü!J +4 Ľ r:ŃĹĽĺƤÝĘx]ť:ö Ť2x*ó“ŃŮéĽhűĆYhŤb?ţT¬yš[čUՙ鰙\nĄţ•ç˘*kŕƦ™A¨\eZđuäó°mdŽö*ÍEرěśŕÇ`Ąë¸Ň1ŤIVÍ ť3@),1›Ç něcI`ĚöbŕjŚuJ×nŹůařH÷¨PŮöMňsĚ$đ%JNˇ)‡4â¨ÁßäĂyXa`X™”ä )ĺ2¶†“ď3 ÔëŚMĚG_Nůé17ˇ@UE9Dú<<qÇşµť.ř +_Dzíj vř—VUWkŞřČa›ŮăL!0ĚAé6~,H;“Hďfŕňqdŕ ¨›E" %ÝôĹRćI'EDgLßłb Ě^F¸CëuŇÍ{TwRşź®¸í牬ˇ|Oąřóă#˝ëFńO4ˇg›ĹÖÖž°Š ĆbÉřÓ¨žŃ~ĂyđBIÎé|= +P'˘<ęÜ [ÖѬŠú¦@ĺŽÂ 4»éHĺ´N¬TV'HĹôv@®,° Ułk©[ĄxcľiĆwj…”důf‚FŹlLMÉôe&bXšś€]Öľ;‚Ňź-%Ë&…@gfôqЍ¸»jś®Ó:ă<’<›A"µnxv<8łq]Ţ䋞kf|TŹ2HC@”#—»”»‚żëć_%dO Áqąö} ä…VSĐK‹jc,ì âRDćýžTÁĘ@Űý2[pE,Aý”—ĘTŘLř(:Ů»@żÔ”…´óŠşO]2W˛Ź¦4Ć)f,śŁĐ7ô9ŁŽeÖDtDŘůjęqő8ˇtŕ(ŕŞfdţVlw„í(Ű—&ú$wX…jĚłŰ +±6íR’†»` 2‹p .ŐdÄ)Ŕ{<Ť T$f4lËôŞT Ó()„•U–ř ŃĐ02XšÜŤ)/€NÁđ˙ Q@ŞS1ë2l&°öráŃđ&żžRµJ ţĐa%A¦„S'ÔPŞöôx[XU39"ćć×5A;Ţ'Č”>Rz]*¨˝BVZn® ¤ˇ¶miÉ!3h ,)hÓ·#ÍPÍ‚đ7dÖńţfÔNcŇ0čç™Ý€Ţ-¨¤ÇGd +ÍŢ`iŁa`ÎO­Ý +Ć`d—pO†´3ÇkOŚÄhŻk¶t,) 9`6Ż‘Č˘í~áuě5¦Ńęâě–¬Ánü´YO7“Yć¤eéߊćqŕMŠZą“ äRśa™´¸eŽër) \·f×ęĚĽ!Ćâ©«+Ęűfń™…şf´q©Ę™(bFý,{x âSx<:Ňî üŠáLoµĚ +”i´ˇu¤QhgyW˝ +<{cyö[é3wbG¤Ă,bJUvĘOŔ®iZ +­Dł…Oá*1¶ÍxxĄÚŘf7:â§ě®ÍΰuHÔ¦my†LŰZt‚Ăc—â‘!Ża†'Î@#dÄĄđe*`±ăŠC3Ë1­|…ŤűČŰęŰĄˇ—@K\Ű­€]«ŠŽ +S,ŕĄę¨ßL6°cË“ČŇň€ń‰2ď,;ĐÔĺ«Ăa±áÍ.QÄŽ2őBšw”íîa2€&‚Ž‚˝čyˇćqn‘gĚPU30T¬ÇĆ dÓ8Đ:Şć– t•îń>™¸‚âpěćG/F"í§ô±•’2 xL.ůűÍěČb33GAW®”Ri%ť»0r÷<T%ÁÚ&`Ç”J#Łűu?'ëD·"îeő.ţ Ŕ˙OÁ +śZ§­ H (µGČ ţSbKŔG¨‚]~ŮgýŢ źz…B J7-á˘1>[|BŃ*Ö0ÄM«GsöƇGo>^—&ţ1ź?š“˛-Ź ăBjôîŕ6b¬ÇĚ6…†§/ź`01«3ŃÁ˛Ô¸ćÉ®©a^ĹúÂŞĂ𻤠aÖ†ńŹ +#ŇđĂf˛ŠU'ůKßíp(8˝0ďL8%AH™@'ÂÔŮ/ٶ4ç‚Ú«is“*°áł cÁęä[Ą śŞÎŃ-ńUÂÇšÂôu@Ş +©Ł7 Š±ăxA%tůUűŮöA‚ĘÖŞÄŃ"µ4oř‚üR1F[¦;Ě0!ĐťK +…ŠhĚ–[2dĚ&„â°LĆś+• ĂĐv(—Üa§°ŞBŰŢPň`éuyܡť<űꀆ{…ý9E*r‡dFöřlőYřą / jŘ!|"›lÓŇ/Ł,Ěět‡…áł_yô{(Ë›ýÚ`¶ÉŇصŔ…Ižyh)-đ@=·á8ĄuťÓ\’…Ă ń72>V™uşgYRuŃÍěX`źézČIQłşÍ„Đ‹ź‰uŁnO ä$w‡ć +üşŮ˘Nyúq™+'ü¸ibôŠÓf6~x;;&™Á Áőe?+ejŠ+Iׂ{îD ôećŢĚĽ›5Ź\žGŔ&QÍíÁ]EŢKe´4ĎФ(.™čČ$ Ć džgĽ.lOćiighč˝öą5nŠěö¨Ď.ŤÂ4T¸oí1»]¬=aâtwLHPbżvô1bŇ‘ú82¸."Ó®3Ä˙Ůód¤kŘ')„ŁŞ}Ťnů¨Xc”hMś±#¨BęŕÁbBÖôtĆa‹ »•ńăéWd,ë×3»ŢčV¦Ý¨ŰFŘ`č+ě ­Ü”Q(ΆŇ\ŐĂŃŚÖĄzÁ^ť%)0űÄÂA\ł2CůÂ’ńAŚ\ba6Łu1â2iđŠ‚ľ™=$¦" ­3. "fM¶>>ä]o ag1 ŕĂٰŁŕİrŃcť}M›‚hµŁ!‹ďÔř {žăEŁ$팢qřdĚqť~ŚłS•9Â<›A$„A@ă°CVb6Ťlĺíwp]3ă âŰgŹŮ{ČÓ°Ňcޤˇż«`ľ±“nQDqľ2DA+„—F{€BvńĄ…ÔŐ ý xµ‡ő ¶â(Kˇ r Jśµ‡Ěe4ČĆ2uTö$h˘JLEžX‰˙5P5pqy€oŁa“:ŞmŔ’čÉ—7ŽŚ Jz8ĐZĹ6/ĘĐqu‚bWFµJŇÁ× +ĎŽrĄO0ţ‘ĽŃ?KŔ52ee{s\Šä–±^q2éR"ň ËtŔüÂÍ˙± ?™dë ‹¸5č“ç gâśäëBÓĹ` $«Šîüh;ń"»´Ç(%Ş…ţ †{`7ah‚°“ +¨šQRŃ Ą%µ ¸ÖŠ%‰é|ńXž“%é‚YE·A!yâĽxSf„l P’$~€ÖŻ™67ÁöoĆ%u +ęPđ$Ŕ0Đ.ľGó+ü3ŮÔfl +ÉŮ5˛fÄÜpK¶E,J˛%|Q„ą2Hům#u +e÷Ěů ĂďÜĎ0 $×$ 0$¨ŮÉ–1ő1z'FŰ=YÚ ¶‚¦Śę¶agśĄ¸Pä}^©áĂšąŃjŚ'3`ÂÍ~HiT Á𣊶=e}řá¶Ż#ŇKŹF¬qŐA’’ÂLůšzf ˛ëŻnÜYĹoH‘.˝‰P…JJłáJź˙rA-`’%4|)ĚX®(" ˸çĆĆÂČeĺĺ0cô˛ł† Ľ ö¤Č#ćRĽ3ôn?ű’.Câ4{§EUgßâеă:]%ň#ý0MŘx +ńô¤®¬HŁ‘äÄs+€^âp UüsM?"Î^?ĎaX˸Ľ¶†´(Ƨ™'ÜEßĺé‚“”¦b‘2pr—°Qjr`}ő.Í`ÓŻ ő~ –’+>鎖L˝i[ Ë)äB׸Ć™nL@”‡•X:¨ +u7Ö j—Ýźú}ďđBVőnć>6CĎ<$ĘŁbNâĆđqVqžÓ +F ˝ŕW2âŚ4Í%TdŐUždH̤ضÁjŹ6jQá‰>}€7ćZhp†ĄUNx˛Ś@Kľŕ°~ď|ŹQx;޶üYJ$f¦ő{Qw¨Ź/¤¨śąďiÎhÇŰ+ ŠŃ(J犺2ťLKˇLÔŰŽÄV ÍcIď˙DŘ/ŻÇRŮčX´&ď#3­q>˘×¦·Ěŕíě2*Ä5 ş6PŠv}9CJ(ŤŠpU ¨(=·ś.¬B!16:Á}Ě• +” ’oZ řBľ˛2-qëŕHʢä˝ČmG)ś +»§©€Ĺ<Ă÷ \çHřp†{:)Ję+@ĐŽ=F–”ŃKl]ĽŚŹK%ůö…ˇ‚5ASnk6o·i6HĄůűq…ŔímRŃŮňÓŮ`ôR`~ÁZ e*_a<â‹ŰżUV¸ä -8#ŁHW{Bf&™xš^zlÄbşJlixÂD`DĘf‡Š  „LBQ ‰ež[¶;ɸ6&§h ®łmv5”ďQ7ÁŽs°hđKŽU=ҵČLw±DŕŔ4#˝"6ËĽđá30 +ĄyfÍô¨»Ţ§%Â÷4a%Ŕ=Íň1eř†¦ÓčcžZ¶G(é¶Ů˘|ĹŮÉ™»É ăŰďె3Äžfí'„jäÂ5§GńröHóTĚ'ŔČpĎŽĽŞŠzšUjÚ}Ű“Q˘ )3»' +MôşŕĄ¸†ńf0IH®¬puV‘.â€BACżˇ› SŤýŔ7*ÁĂ%ô i «<ČT>‚žäđ.•YťĽ*oČ8&+ŁÓő­Q‚H.x©IIíŁ±äb4Msfł§r ů!m`=g(Ń@P@„Roh>Żł- ~· +vP)l“7„ŁEcźĂ5“ŕŇř  łŚÓ:‘zהnjĚ60Č*öCţŠÎÍpĹ4© … ‰á…´Âí×ĎÂiSˇă†Ť*·i`/5TŔS‰C|DIÚP–‚”gHJD…ü>ěiVS„'-űjއi'˘úą»é1´X¦ŰŕLÜpŠ[D7-¬˘Đ‹žä ić6,đ@ćT1­&:9$8rŤ¶ř‘~ĎC‹Çb1~óxĂ›¤ +h錠 ¨G™˘ eĎŶv”ôXRšŔép^7ąClk}ŁYŤ@e_ +Ůës-óŹŔrî4`ÉŘ=B K};={nV3˘Î9_`Ć’´ŐEuH?*´.}Š MłÄâ× +'púLPX+mÖ\Eśq -löi–”:TśE0Ą®×WP€D ÖÇ%PůhU$vŹ;$ş°§f7đôĚőJ‹=ŁŠüRsdň™ŞhŮ2éHN,!ކ]fkčĺqcđrŢeRÂXő.>~"Äa›$fÝ`8`”¨Î5ć«AŢ2ýĄŮŠ ZyŞň†Š äŮŽ¦ÄS4˝áĄ§GQi–äQXS{ň‡}”G(˘Ôqźm¸±KÁI_M˝Î ÂŞÚsyü!A^ě#Éű"XaňĬü!´E ×1ÇŁÍTh¬%ŃIŽ´Đt„Ó.ĎLlîěăTVţA4F­Yă¬ěeÚˇYéS”ĺf:9‘Ĺĺ8Ű(´+Ę<±Ť\™‘~´ÖŃ©Ůnôv\J©q­Ő;ă.úÔ gç'2Ĺ“<„™đ0ŐĚ'Nŕ kćyŔ!ĚÁÄmëÓr«ĺ+±žŤ +>%ť¤’‡LŞt"ŞŐ¨©ÔÜ‹×h(đŇ~ŕ}9jű¨ÚfżW'Ű– ĄP€Aő±+T™mžřmDićşâĐőUvz$«V¶ ÍÎ ’2˝phčn ô hT’ ,E53RMőI$D]e@ěěÚMŁŮü'>´‰ÂVž{öV©™Ż” Ü•äLŕ˛pdvăXé4ZqßÔIGŃgęÚ`'§[ŻŃ"Ćd «rHQü[űŰž "Ś\údmT/4°:-7ąÖń!o°÷B« ¸×řőPG[ŐŮ +˙?gwŽ3;˛e‰z*g`kŤüÔšEÉwţjŮ·¶ŃăIQ ‘<ż»“ĆÝ®† ‹:mÖ@ďtž,Ď.0!8>’E›ÍÓDĽÉ4Ő |Â6ŔI«s™c!sŽşŰ.#ym‚łÎ/ŁK˛+6D©ëş#Ćož©&=ëZŚY÷pđÉg,ăD”"g;Ł9-ýUĺ÷Ő@ňČÍÝ“Iô—aĹ Í×ţ¸Í} Ý7ŰŘú,5ľńË…AsUm`ö#§a˛x§ĹD „¦Ú•"}‰ńű6ëw>E®©Ľ6#9M­pncĺÎ#ě|W´„z,=®|á+JîóŢľ%ńÖd}Ú(÷ÎülĂŠ3’r×îµINꎴŢçw˙Âqđ´zµ¸*~ÍiçY‘Ę‚?Z'ˇdS´rVZh6Őž•ÍNsnGŰÉió^Ë‹ú,M‰©ĹôŞf®HNź‘ŞÖĺ=fˇâůŃËÔ%b§YŤ}ź–[źBĺ¨Úęâ4Î9w“÷«Âho蹊>ຣÄéFJ h“őűh ZŻČy–Ę`ýlĚHĄw72¬uFô$w¶~K""RaßŢţ +`ýZrńLc‹AînŚÇČ^3VV‚9ú¤YB›y˘˘•şŕ‹MA@,!´ŐÉ 8=¤­eĆÍH1â•o•÷ |ZĚ‚ťQj|#V8AsęRýet´ĘőţM쇙ůňĚ®„ßčÓ^Ah¦˘+yĄIXzm(NŰÜŐKĂŞ¬ h¬.]ńb_*—˙݉Í5 \ âzC/<ďë.„íýŚćq.ž *Č4ô”•˙śłţuŁ×ťS2Ţ—Ĺô[ú ť{x^•٬‹/8čÝTP“ÓÎ(¤ e,ô»ÓˇM«‚rącALJßg]2ß4:Šř—Ő÷$ŇFŃŻ«bpS2µ+θ}ެÁ° ‹§IŰ·+Bt¨¸HŢČh°’ňëw "»'bmg%đ<;ҬŔ0¸Ţ€4ŚŽł´˛LHB +Łj|?ɇ-PöőďťáFuí:ާ´J=6?ÖÂs6Í^¶ü٤U¨YT©”Ć'¨ĆŤj/śÓŐ~Ôyěݡ9 +~;±Ák|µ ÎáJ2Ž:ŠüJŁżJ°Ś®^‰ ŕŕ{ś/şń™/‚°X|Äé(é˛˙ű×uDYż–’@‹x°1ÔČ # +ŹSořö‚ń,ł—‹Č/śŇŽ^ő  é,u.0Dv0¸ÍŚ€ŞJ"®Z€N„čä †»WŘŠűŤŤ^,~vŻy‰$Ą€<µÖzŁ­˝—Ų* ÷Îuës_-GÝ$èÜőďÉĽţÉbŘ]ýŇ!‡"ť€RoG=şĺw8Î#ů}/j¸exő¶„w$1†ó»ĚŠčŰUö技×řn!éiáë­4-x ”đW—?!ţ9vÇMÂG›m¤ËJ$ńč}Ć7”˛}Ióî&Źlů¶ŁÉĘžřęĎ­ÉŘ.ŮĐB—Šôędö¬mUÁ + ¬UsăbÓă’6ű˛Ř•Z”źĎ—_zI +Ä7óJX8ÓĄ«d3÷Z3¤ŕëßţâ$Gž#ýí‘E1ÜřÜŮydßîëo–khýĆóä[ÝŻ¬B@ţy«yĺF«3ĄµP3ÄUtç’—]ËÍę-ˇÍ·ĹGĂÔűUdŞOËËYŚ])ÝŢŕč vĽł(f( w1…Ţ·)KdFH®±3ü:¨&6Ďqۡ´ŽĽ\oŮtŁź÷‘Ä:ÂK6Ĺ›ĹóR·ŕÝ3Dŕ2_ň©Ţ.´$^A_ÝŁ_q…Ô3R•yKMÚ t »Ôúgĺ¶č Ľ{pv~J©@&ů笵»˝7vÇ&SJýTµ˝F‚ë„‘žQţmŐk:WIĘN'ěˇ}|7Ý4sÂt ľú@ç•…€u®•y´1sI‘•ŕŰSąćťIŢn÷‘_×ďčMóy“02EŠĄÓÂĎtťŇáL;W‰·Ú h×”«.yŁ7}ÚfmW™@I'7ťµHë-zÓJ Ł­?ŢźdŇáćĺč=zÓ¸Ů#;č'{H”…ÍU— ö/ WyŁźp[OĆČ^ŽuB_-ÜŽ',x‰ÎćĎś|ú?±×ę„,.•—Ţ"8Ý ‡îÝíˇj…±ß .µúírW)Ţű‰üˇ*k/ +{ÂĂoH\Ĺ~u7QĽŹ0ň@;LËŤ&—Ďş@Vî I|u2DCŢ#y‡ŞĹ +ÍŕlgévĘě¸\ţŤ TVÂG-I%ż†U[g áłÎi¶Ę¬.󻺊ŕôŞźz¦uW>stream +ę‰Ăť!ঠ?GňaÇ#Ëš.om×7F‘aÄ Ůů^A*ŕä«ĺmcÇ’¦ńUw>ěTa‘N={ôdi:ň7I‡+ď*‚¦řň*dˇiËY= @Ąť×]B/8'ě`ąvoI·gR˝%÷H;pŐ}˘ŻyEĘËćç˝7ݬS0‡WźŚ["˛Ő WCÔ~eäA“PŞ`ôDČ÷!ĆZŠn˝$+رť’uG¶´­d; A‹ŕ©ß˘óH•7ó>ÝY“ë¸ß$޸@ĘďÂşęđżűĆlâ˝u.¨áŕn3/˘âĹ–8řhb{·g_BU 34ŕťů¬ÂDć´äőö ÔÔISÉcS}LA¸εŐWpé¨dO.9 ď¨cö3·Ý.›ĂďłČę1Ý:÷şÖ+yGáęĘ4:$GĆ÷›vĎ:dđI rUžQŁÇ[«µÁŔ4čä—‰Płs资¶BX ĄPťdšS±É˛ ŢAÖ™VCA OŔˇ`l†ëťůú“źjw=Ä!ČŤ‚~ŃŤ"@[D;˝HĆÜ=ý$ÄQ¶şH×{Âáel){™…˝vÇ,ŞgŹ"ĺI¨ëË-đ(cě©Ě}—űŻT•˛˙Ś'î™u_°(Üéš×nî‘™0Á.Ę <Wž­yaŻbřDscő0T  ŘĂÍplĚ”Yč^‰őÖm†7I°‘…>Ů&^-ď”RŽüNÄ®Ő'ë4ď«č”ßqř J{sEmoĘ›ş~Gʰ˙ů/˛ÖîřŔ”)ĘŢŮ”ě¨ +ő~PąUHoĆú\A ˘ĽŐbĄ´˛{ B®ŇÂ=ó÷Ý"¦Üô’W#'X3xT·­kŃňžţĹśś+E>ł®˘:}¤c1B´ô8móŁYî€p‘}řľq}j˙+áP˝E„ó7`ö¨›~˝Q +ç Ú/ýč=˘éĂä÷OŢž°ĆžL‘\ňFuÚ`*®ć˛…ÎţŕčRqRřh^čuĎľT@i1|ä+OĐWűŘöŚÄ *” ®äĄ‘…BFř=Ä"ëx`\Řý7)e xޱHŤęř(M<ĄHÖH%´wyźuŔ®ÜAę…Ňě$+VűeX$†^T-ĐŽ¬Rj’&·‡l“wz}tPČTJ)×.޲«#yR‹EyVŻDűű®5¨NS.!·±ţÎU{ÝxđUÓÜbef8Ha]r+[[9CÂÓŔ!Ŕą÷ë4ż¦=S¬YvudqýD’Đöé [ňÄ8bdú¬© ăá@Úţ¬Hc3ÍÔýÔäâŤčô3¨UívďŚŃ¤e=~­7¬3.µ±TľqOžsŘWn‚ą«ŇĚOăĚt9€@¸Ę*¤ě٬;&…đě.R˝ŃĽăŕ±Ű™ŮOz~M,`§±UÚ=qh°ľ«|1—˝"P?éW©ˇőś%ăŽwuw#E!ő<ż§yĆsýú ”č –Ö<| ‚ÓYârvQĆ”Rňkőm0 ±#čyÁ™¦D{wíŃŹÁ3Źj÷›ŕăÝ ćG­ťe +ÄĚ#SFlW–ęîÜÇÝiă/©âĚËs}Ű»_˝;”‘ ÝSuĹ x2‰yę^P,Ďn„6k¬ľÚŘxÇR¦ÜŻąŐşß5ű‡¤őŻŰ=üĘRâjÓv(zĘOš+ďę˘u‹WÓÚ…ľŃćQö8×›;V}5gń(ô&.NDŮdôĘ•:ť™éŹż(ĎÖľ@áŐ‚§I*łjx&ĎC,/ kşë‹ŐZ-…Ł–‘ő +&D˛ÝÉY ኋ…§ý…l,€‹kJÍŠZµQÚ˘;ćŕÄJď§2$Ő˙šg”+4oEŞVě Ś4°ą»=†‘=łOEo$ŢzţŘ éCë•nX‘F$IőŔ‡šŞ¦g!ß¶ŐŘY}c5KĘЬúŮYŁŇ =ż„Črî uŹ~iŚĆ¨.Óţ•-Ϭ‚ Ńę·ťEí˘uLCĄ·C †đËciw|übŘÖ{ ¶BŽÓ®iĎŞ¦¬¶+‡ďđG4Ů™®łŽ»Ú.(t3Rlřö€Ú´–ČdçÜĹ‚ác·=LťI+Í+Dî|<{.Öźh[<ɇŔ–NĽoą'”Ąűůwp:  +z41zť‹ŰęăĘŽ6ůPőe’r•kQßKAµž’#m\Ô­ó|ë +˛çŻ'xů“uőoÍĽC×˝€±ť“Ú ‡”śh~ěKl>ŐmĚ›ÜŮCáßÇďÍZĄÍ'¸]'4ÎřJbź»mĐČěħr¶@W śłßssŞőD%ëźsÖîő"ŻČł¦c#¨ň¬Ô©¸%·‘Tő•b—“PŘŁ6ÂłÁĽ Čzĺ:Ý҉Ă;4˙ŐSlf± ŞöŻ ©;ĺęŔK¨“ďŃńŽ…A]eVu'/x¨V»ŕőűj<÷şb˝Ć\bëAMČ•;ň%­U„wHjđ†,*Ś0`•Ě<@ °ŢNčéoŃ–Ľç[eÜťiÂ(1yßŮú +:üµ:޵fćQÔÔ\,`¤©şË‚ddDŞĘő‘훟ȩJ>Ě“Cä0ůŻňÔśS¤QÍÖ¸§—ť™ŠUyOkL žŠ( [~ĺµ~÷Ŕ'LĆl_G—‡¸qZ¨×ęşÄ}(u»D)oŃýĎűđdPc&P;•{Ś,{”'2Óŕ.ô!ľe„±[6Ĺ×7§ĘËhŃ]3r¬ż7ŇŽ{ÖĄa))˙1[ýë/žgŔ‘ŢkŹô^üé{Â/¦{á­v{-Ńřh ’Ń)(S–­3ÚE’†N/)ź72iwGś0Ő}ťó{0#BťëŮÝ÷/F—ÇĘzyfm8î#‹VSáŹ_ +–áIÎBž`·QŕB‚ěTx©=[­ň4"gC†ä·ÓĘÚ<9:ŔuŢŢëĄ3eş>őŠď]BzĽ3+H†g"ĨKÖ?Z/ßÝăqM>Â7 9·ňŕŰ“A_áÍ×| ¬d’OĂOĄk÷¤’j¸|ЛԌłŐÇ;<Ćť9u‚˝ßˇ›QtNę®I„€÷ ˇ¨×Möd â-I„FäţňĽ«°é™rh¨îVČ70ŕZiő-đŃq¸ ?YüůËQ”´k“»ÎÎő„!p'K8Ôî“­ÇF oŞJíuůyíÉ^çíÔ(YŁŐ&EĄ€9i‚ €ĚďYY›I°ĹÇľ$x±UP®şűů2a¤‘®ĹÖT4Ë$˙«—®L×Nswh4Ůěžą„WKzŮÄ*DF6F?_&D.äŠŃ +Ź<˛1‹÷ě`HîËpŚ1KŮ•„Úl +JJqV~gÖ ô ŻSťĽĘ3üz~Ů0ŠÓř5‰Ś>2ůťWw%Żí%˘Ű·XľXöçI:Ä÷ińGď_B€eˇÚŮZ9ŕͬëřROQĹĹ)Ć©ŚňD`“×µ)߀SŕÁ’ ź Ż…Iě đT#őeC]Ťďž Ô?Ô~‹‹L¨Ż3ć]­}(€›őŔ4Q˛á llµ|}›p˛F\Ţw6Ś|\ćżľ&L6V0J†TöÖé൳o˛Z–ěŃ´(›N-Ę `ělťBP°ÝO’Ě·óë‘ÄŘ©is|}¶j˙ ·‰^VEBŹüuË,<-á_­|5Ô¨Ł@X›ó(‹E´v˝ŐV—V˛‚wÉxEó١¨hg2€ bBĽĹKŞĂ6ŃŹű’!E„Y6MŢ5"íÚÎăn{őŁš–_Rşxщńw*˙9kí.ď°0ń2¨~vwaD`&¶J¬ăűNăůôżç‘i\i•]Ŕ•)•ťGZ¦‘i"{ p‰Î–F=dÔÔ&š‹§ć•^yĎŹ&kµ#jQg]…ŠnÂP-ýÎÁ®ˇÖ×Q™~ŁjnS˘e¦V:96,µNeCŰmJ/±řXźČKůÓ:Ů#j‹ĂFRŚ$ƞЛőI#Žč-}Ďd‚S–fť×ä!žđ”`$‹˙[/<ÂםażŘ’«,ײNŕ#ewfőuPÂa CH1.×ńł©oE ‘1Ĺ˙­ÉĎÄČáČb=·ĂÄôđđ×ËśčG ĆPoÝA†YFYáAfj—»€g8d(0 +/·JĄŞę3Đ“q•´ńŚVĹe—IóřŹůŚ–hŇÝ>˛3źOD¦1_U +ý´Üă S‡Đ)Ĺ%»ßZHąŠô\| +¬Ŕs ŕűY9ŮvÉ_q¦zÖ +3ŠŞLiD¬ J şă.©yEdúMţ-á6ó+“żRńąw‰}Ą+ÁŘg= ŕ§[An×i‚äPˇ„©ţ˘ĹΊŐów”Nś8_*]îĘInämžoĆ:^UűólţŹžšzóŔ†€ôXMX’\’˝Čk\ú솛— ° +4ŁČ3,ëň¬«Ô »@.ă‚‚ČPÖ™óăµCK_#ľÓ<­3ëŮ%Ú1µăĆe&é{°NFěßHµír9đś´7zěëí™{p jEăSV;gZőď’»˘Ě|ŻÎ{k%wl:ŤÂ°ůwGśú^ń`eÍěČĆ7Ů`LIÇPhů“Wé~€íÉ.őŃ•^ +T{¸…˛űć©ÎŞB‘lGŽóŚ50ÁöK«Ô×3®#m|QËgO“@•:Ë4¦m ňľí°űĆđÍĂŻ·ëŚĆ4Úx)3'oŁÖTµă÷R ÚŤtÎdÜX~yü´öŰE +Z}ý=JźDĽF|»v™Ncş´™ŕÜ(î[q)on/;Ô™!éČáS׿îůxDâᲕóµ€D®«SÉ*'˘Ěňą3)NG˝±˛™äŻŘše#°’zmŠ„Ä,멼y†‘Ká©(1^®}Ď#IWÓż&Ż_Ő٤k‹Ć>Ł×Ţq6 «ł":đ¸9EcwwEŽ,‘v˛râ:/릣řÜýëŽz„^yrGůwo°žčŇĆ4šÇ3óF–OżŘë†fłţ´ß©A%<ń[—fQ=ìϺyÇ4r€*Ńť\•W,;kŢxÖ?ř©+rI˘,—3z}=CδKż¬iŰŃÇßđ‰ďË·ů|_ůńj›ÝŻ?VM–˛•>8ŇM~8ďěřž™‘iâĄŢ»rřá¶÷°®ĎŢżŽíøű,zž/VPQ˘sŔ1ÍzfmYO ÂzG ›čHęn7×RFçŘĽvl|a¶×$ó(¸Łg¨Îjd°‚“.1 ­T߬ź vôf"z\…ßćÝß!<łŕ<¶džĚ#&SµăwTééŘŢŢ­®ú~c_•Ç‘C«-OĹ™‹ëö¸wU1Óă¬Ţr+´ÎÜľtjF®}•ٵ…HÎE3ułs˸˙ţĺď»ăËgĺńj^Ä{]rĆ­j\»Ü _‚°$Ŕ7ńŚšÁí­Ž¨g>ĘĚzµ0ô&+Ä%ńB§‘;ZĽ€ÂČ»{Ť/čý­–{oŞ +ÄŐU#żLQ8BŃsćţ¸›´.ékVČżb¬pÔMnwąGďěeÁ˙>VgŞWiŁIä<¬ŇnçdÜĺňL’˘ ł •ߍýßüS^ě"ĺ]9ř8É^Pů$ňp/5km·Gň‹}¨z™‹VđÚí—×s±H®?°ü1ůjŽ:¶}źc·čÖš†i÷b ĆÂĹZţOĘXţŐLÎ’q&ۢ\h<:ĄM°ŽŃ:Âh˙ęŠ'NĄz¶ďEFFČ`ůťű™Ĺ­¸ćE©Ő‚+zú‘wŹIe Š„ Ľ–¦·řý d6z’ß Ţ2ëBý( öH ßYäĺŐč;†ąČŐ?Ú}ŔłňślUWX| ¬>˝Q)ZŻŐí,F.ľú–}Č—bŁzXü/lP®Ň%ÎŔḂéě_Fk<5Ó]—čĐ ÝźTĐ$R·kě=“Qĺ x ‰ćĎ˙©LJß3bXEŐµoř°dĂŢ©5˛ŢY컲` +vW®˙śµ« ČŻ]U^(łrJFJqk…Ó—ŢÝ9Xĺ×81@Í@$x›92?«bP]üďLŁu‡öë?j#ÄÓfýŘ€ ýX°CŇ"óřO|Ě(˘ß>iëVđ"„ßh˛ö<™Ű˝Ć*;=ŹŤ¤˘ßA3˝2Ę ©7Ăđf&»őQĆL“ůhÜ\ĄA ¤íeXÓŰčÔxVKŠ)•Atf‚ˇvë›FŞä×ĺĘnďËÖŁ†Źç[Ŕä ,C‘ž#ý¤1>ź˙ࡹ$xý+®ŞŐ'Ľµ?FO÷Y|×÷Őź­v#ył|îZ]ä˝ČTE›vƛܱ;ĘĂąµ´đ*ÔcHőĚ9 ž2á&ĆŁXţ¶›Ń>µďyÁ·óY%ú@@ž<­_ěd˝ŔŠ +Î KË®ǨĒB‹dy3ŕT®c›SEbĚw ąr{ě°É÷_őŮ˙qŐ+nÉŮęÓ mŻ74S~ĂÎOśF zë|Â^T¸ď3«qNs˝.™Ń\BČÜÁ#˘›öŻ–J}Ö7 ǏkűC~Ä­âŞîş?4ęµ;d±rIÓGśŠ”úńáĚ÷0Ëűł^^ĚF4H`o]E ‘« ëâúő®çŽko=Wšő芌$ż«0ş†=şŔ® +KD#rďďtľAj‘ľq„Â=âŇúÖ% G4Áęc~Ś›ű}mkÖ,ľhBäL7KÄŔyźúC »ĆŢő6Ď`|&t‚:-wŃtj$€5—\Qř&~ÜŰ÷8řYC\ş4­Z8Zö}?yŢÚ¶LV R3? •R”W¶*9>{6%"Îc*ŕßť˝ŐqŘۡ‚lfxć…îHDě«z/ópúŕq@¨KĚÇ3%OžYË༄ÝőY-ťM+[䄍ÓY9"uú Xä vjá.3{*éü=őł4yĹWSněŹ\‚C‚}V~ÓKŕYAhí÷¨&vö‘—qŐ XŚ néŮGD÷çÜ—<†•”uxl»DV긏÷űÖ%Ě"픟Mđ Óp’A"óô&řRźśjęů§čÖóŚv˛\=Óťfž1v¨;óÄ~gę.ŇĐÄš˝Y,’P00ťXádűđ;8ÍĚP]>Ť’cHĘg¦ěW$ÄĺŰ;´ĆRx‚3ü"Ý®;iěľöL‘¨ąv3zô…®őă|5I÷¨9h/o»•xrśďĂ/7–¸%ţDFjhĺń›*î˙€Đ›'”Ć˝€±€¨3pŐ÷WX;“Sô«ţ0DĽ/}ßV]¨i(}÷#F_ěŐáť\҉Ç^qűĄ'“žŰ›Év©­Ŕ%q0ݤ š„"ĄţĘ;O‡ŽŻËÁ±ŠćÍ2ĽŻFÖ/ô4ÇËËD@:&“DÍ*{ĹŮ/ĹđxíŐň8@pŮXÜw}!bĂ*g&ĘčšYTđ*Ç­ű3SP#R?Fs·±@oÂaXĹävŁĐ}Öëě śŠÄş›í›Ä•f:Ńâb™{ö?¨W¬TvőYžĄÔÖ’–ŮŢsŤĂeĿݟődáČ’*-1ăJŇs™€d4ćTbşźN©bŘŃšŚľ÷ź’}§¨Đ8sI´lf´Ł»źŘŞvŇůĺő"Ę€ÄŐ3Pú‘męőęęGfŮ Ďžś° Ďx%ǛċPťţëăŠGoŔ”ęŮĹߌ8üc—( E*÷Ś Z‹Ał˛ăż ď0…s…pŽŻ•î|ß'ŠXĆłüőFY§!«d=Đ­Ćmdß¶k(…˝ůx̸×bF>ÝţşäŠd^Ź1Ĺ7Ő—$QIdî*Ľß™ődŞĎv6(“đą3Płm1ěéd<ŃĐ$×5ęŔźIĄ3šAďnQÂQîF1YŮYP9Í”/đłžÉkňŇaIÝ00gëł˙)ä›dËŰáú.qüî¨DíxÉ{Éčµtě/d0ÄÔ#LŰFg~ôß2u®üóĎIűß÷©PÖWnYOŐ@mŘěDő©vá$nĺ|=?“`F÷ćÁU °$1;> +'Ż"Ť®703ÁŚ‹ť(×ó}ω13~ęmŻhSĆx%‰ď81MĘ`őŞż‡jŇÎÉ}2q]˘`0ßϖg˸Š"Ěăűş*DT\uxím䛨líá#>@ů”®gz×jÇňôk”YJ)UźŻJî^ÁşëIE5Y˙?<Í#ş•UćiŻĽ#› ¦ßŤ7Ę!áŠň쬩âây}ŮĹ*Ăj2¨•~WUhOÄ 4¸dR8gX­˘ůp?˛”8ZŔĽW$čó+aGn)”]D‰ďč—Žr w‚ěˇöäĘšöJ}dgX‰Łt]é®(ëécEŢ8'hrŃ,Úý5PÖ–@V9ÔvnĺśÖŃZ5k“¸ű„Zĺ±ř~&ŞÎ\ME/Ťí×% /$ßµ¨—8 Ť'Ü❡ń‹@ózbő 9`(l“űTf]ĎJő2Z“8^Bi7µÜkgđ7˘±ĺóË˝HŁŢ˛ú*{”ČaGS”ÜpLrÄÜBL9AÎ4ŽC¤2²ó îrĐeŽr˙ňa Ř\÷©ÜŽtܨŹZąĺĚÚú­ĂGr{Uv´ÍŚ`ĎŞ­ô&üŔ¶Żď“Č +Ć5j‚2okŃą…)»ţ”p8M\g’ľŰĘ.6Ň=—tN‘°ę÷zkx¦8NBőďa1Ŕ{cKüÖěz¸FËI‰ëď±wń­H ¨ř•zˇn@ÇťyÉKŞůAç(%µ89™zŢ­¬P«ačtBµŢŁ}±üáBYĺýóĎ!÷ëÔ0ő®„­2·ř”e.ŽOŐŞÁľŢˇNťqśŐô^E3/ I™Kµ4ꉭZŻÄůŽtÖmn,Ţüű=v.˘ T6TGJ ¦mFB|îbcń‘Óµ n|gÖśűGÔzłSÉ%Aä+©ušI ö3Lţ>+CÎUpTa÷ +“LčĐQďäKĺëśf# %#š‡ťb5KÇ•–˛ ©lVpĽżĺ%HB2w -ä©'X|`Á«s3˘5Om"žŔ3éáž„îR­]t®‚z!:Łß(sűMöđ1eqĚ1”ć}°Ł’™í%XňG\łIÁ Ô4/Ź:Bh§%Ü߲ĺ~·ŢMŰbR¶Úč´=¤îLBŘĄö˝¨ÂůdÂs˘.Ú1äoLę0&Xk‘ljíCÜŚBČ.Y.źÔM3¨v•—ŰC¸żóÝ?´‚ňG!:QhR\0!âZ@ŁŠí^Htq€ł°ä|6O±¬’ŕŢ@â*Â'ë«ó”qÝ0ŘĐŮËŠn»ňH­[HĐ/üZ ©¸âT4ZDf·=ÓŁ‰ćq•!u}ˇő W‰˛şKšF„>mKd!63ŢŐßš3şŤ›Ţ9PŹ«§lÍ(âű¬UxS""”ýÖsżŁ€q´•?d!˙§+MóŚwÇ›~Ýčú,=kŹRŕYç çóTM˙}ű—Ń YY§yžQŐyYg¸b$ôr8¦UĆ©éͨň‰Pîőšţ“ŰtžëT…™Ą02C&ĐŢÄÁL§Ý‹mě± ľŁuUů ©`ťúŮ3d›ť%_“oĐ ł–«” Ů´ĎĹĹ[^/P1ׇL D>'7ůd]E"4;qŐÁę›P—´í®”íˇyĽŚ2GáÔ!ŰfDĐÎťŤ)}­Ę#2´_ $HwAűć™^Hr§Őá› +•%‘˛ ”ÎJHZ<’Ś#ˇÎY˙şSA˘˙9ö§* "÷K‡§¸¦_ĂO*dźW&`_˛ÚjUĹ«jX˙S37˘śŻcâ[·ůKĽŕw€#»ş{ţ*>“<0+Ç7ľav˝.æ}fd;öX.*˘+{ĽUfŰËÁŔY7n„'¬IF›-ľĂőf«¬‚Äż §AUMŕ!Hčhž1ľ~ătP"¸VđěOĄĂ,ˇŞ®= bŁA‹†Ę‘Yb\Ű9"Ď ĚęĄu–’62ŕĚja ¨d37ßJI5|fŞKîŤűHËýP%ät? +řCßÄ;˝‘Ejz˛ľŃž|*łÇŔz"9PU˙s‡q1bÚC\·!¤™ţ«éÝDďUoĆ)ĐÖÖŕéyvMo?şůąS&SŹv T>śl!9§Ý3ÍĂ;ů-íM¸|wŕIŠ˙Ëš3‹ o"9gńéJÁőĆmˇŠb¶W>\ŻŃl›ĐŚÉý6-ÚŢďK‡Cá!ŃöŻZ˙›™Žv{$qd_„/»č ňąŽ7›KV¤Źëů[łFůZßköîţAŽŠdńÓJâʧ'c­Űođä’¸đUĄÔřŘŢ[“Ę%-Őß]&"Ń~€îô|źµi9·Ç{A>|“ń—{ĺU´­@öŞÉ'ÓkĄL¶0D–rˇEĘ:GK®{ĚyÇ mżě<,3»8ĺ&˛Ç”QĹögOCrD«ůŢő‰ćË,…&F‚ŻiRč»e¤ Á˘sü˘ĺ5íŢ˝¸Ď8YťFWą[/â&á}÷w¬"a¤ őb")̢>T,äLUÁ AoĐŇAá© «O´źĚ6‘“x)‘ž«ćAÜ5— ˇň)~ľµ¦ë­öJ® ”†1ĆF“ö 8‚UTŔŐUh5Ţŕ P'ä8?=­ä¨4`ŞHLŁ}Ł”7ĹyF9;SÜX"Ă.óř;wîĄíÚńsDż „›–RRĆcŞŤ?@ďđżČ\_Çyă–ő{¨YQM‘§ĺhXÓ¸®\˙ĘĎ=2ś` ý +B/‹–±k‚FË‘s«˙†$čp˘±ZÔ©âęíé4°Lv?X”S€lSŁŢv7â˛ůHŹîX^‡şşoďózĺ˝Ý«Üc+“€©*ĽdĘîi»ű~ó_şQÓ˛D«pgŰŃďeç;CîŞ()są$čZ 4`řŞŞČT±}˝§;âĘf±ÜŢoF¦1±©Ľ"Ęg PYü¬ +Nľ`ď«RM±cîn{ß›@,nRĎĆ6Śž}'m"Ň·Üm©ŕtŇg.W•8Ű špdŠz­ťăYcXt ďB¤ľK2—| Ăs“ßż8 óf}R†Čoj¶|d4ÝApűďŁ, ^uŚČ„ťĽ‘ň‡B?ťľePG¬ëPđ÷)ZŁRC†Ł©ˇŢhŃ®wlăđXü†‡Áć:ýĺ‹1…şŁFĽ«˙n$Dđ2Ł˙ťXÝcĆxŹyŞÚ€ÇÄČCĂűfJ˘·0Ž}x}Ěő#˛źŞŃzXí\ß@k§Ggá­Ćđ ĹĂ˝sÇB{ŐR<ŮµŞĽl%ĂSŮxµ"¸’N­ĺ:O‰1öHh°6Ąµýk0MžD»á×Á¤ˇHó§|JSDřŞf=őUýĚ ÝúnAŤ{‰§z /n…ŚÎó‹„ńÎ6­ęp_%ą’F J+X{ď'Ö.‡)ćź˙"qýű¶ďü«ŠV§÷ţts¤@@ÔwN¤ĽŞ6k€é=¦IJ;ł/{Lë—Ú˘bĆs¶c× 1j!čµzƬ?”˙ˇż¤ő#^žc·$¬ T*NąD>)ݟ袎‘b&K?ĹPÁHüŘu°šBq%ő/«%¨Đ]ŐI@/&…Uýż˛ř΂#5ĺtµ+zö:G5ż4kd:e_Z ”GßX-}Gá~«Ü9ʱßn‚ë-áĽÝ’ń0yˇWŚŁJ€ł’"•QSŚŔř–ťTa®vňhj8 ë’Ě\1ĹĹ,Š%Gá_G +¶"6™Wě‚ΠwÓ’o¦ +]«t‡§ˇó÷-TP?>­iPďşJźÓŢMŕ“×[3bú[źĄxFN ÔPqĄŁFý¬&Á›äŢ\eű”¸¦ÇZ/Ňf]Őaf‡ťI1âUßy“ ÔÉú:ćÁ9S9™Ç—7ŤĎ<[ęç ĚöUK•«ôé1´$PXNę[Jô˝óć´°†­ű“d<Ď˝SëBSŹŽţ/)RŽ@w.j<&ŹČ§JúHËňBB@EŹâőfíĘjyÎ5OŤ˛'T’ +Ąü ’Şzđč\%wÎKżč`j“Kč+ězOkĄţ§™!XýZtń?ś•!U˛×óËő^Ď’ę*)ľĆ%„Zj!Q„Au úŢ;1×MÖúńhu +€?ęµ9{v‡·»ř{Z±Ć;SäŐ+xäĺ[g3Ôc‡‡áĆ[R˝ëSŤÁÍžµž{ă7E['gůE|j—sîą5ź ř¨'‹˝ ŔxŔp:Ł©Ŕ>™u1Ű’ţŤUµĐ9Ş9,˙4ŐßĂä­?έőK‹ij»·"ŞšŁśľ•¨BŐ!Ľdžgč¬îNV·_×?R–Š\Ň"ks0ŕ´ÁA«zť¦9Ú/žP®ŔĚçÎg:é—°WM:yŚxµVĆ“üńtŢ{SŹ˙÷̵۾tĎÔ]¬"Ó†Żřřžń?9O‘⢠+?âëý\–± #÷łÂˇÝYýzü×€Ą3 kw G4ĘĎ ×ľ:cf˝_Ş&O5 őű{ěÄo~Â+ą0˝ŕ´‹îw\ó{—[ÜÚÎH^”3Atá»ŐŔ/zŚ×Îă÷Q#. .»Ţ†űLvš»Ř@f°–iĺÖ# +ĹT.]B‰GÍS,7đ”~îĽrI˞à +”ś OQ)dł“˘YŠOUA0{ Í+)ô<—í>ÜzcX=öĚCwEü„rn®ß}ęíSSŻ/Çrě¬Öń 6˛Ug pőn5 če™=Jv­Š “m=ú7BŤĚhĐUg5Č7ó¸,Ä8éQ<čě枦\!´zĘ=pÓh PíŃKpC¶˘ů©HŰ#č4뢕UG,—ýłŐJ†:í~íx®š~ͱ*ŐďéěNŘ×ó ń×<©Łšöşę…„öęEşŤ‚já­*öŚDKC ‘ŤĐ~"Ř?Łć˘aáŇ,#eŰ˙¸,ŁPuUüąlYZí@E©ŁĹvĺŞl±t_!:ő?˙EÂú×íc«CËňŞěćŻDÁčŹ/>DŇ{iÖŹ Řq"ŔB`őënŕóŤERtD¤%OOć9ń9W;žX–JĹ2E·ľ' ť÷°Ł;6÷U@/T.Ä?¤iŇÜ 28.9gU«"ňÇďŤo\Đ!‚ŻźĆ„> pל˒ŽëŚUľ4ńr÷o ¬Ń÷ä’ȱ78MŢF˘ĺF7´,ľ@'\´ ż&oöKú‰ŃĚF_ščUĂ<™Č˛ćµdJ/XŹlH +=_jśČSúo}~$Ô7uap Ó§rˇöŐŁX`Ë;»ŐÄľ;#Vđ4z7=đ`ĺW!ňV|=qíżPD¨1|<Ť<&Â2čÉȦ‰÷«7ľ‚gÓ©pëdYş§7o× +~Oe9E¤)î— ąßŮp\˝R|Ď 7!ł˝ĚÄ…ř:b]ż‘eÄĘę4oŕîc§K«¸;Ú¸'ĂÜ“˝Ć»3&pPúLř¤×Çŕs*Őa+!kŢa“Ȇ©b˝_Hń¦`Ą˝s<öĂF®¬¸ˇ[ „KxÇFăny;ň^·ĘV–ľ[.ącîňŐ®]:ř`‘żĄ=L*űŠ ş\÷¤x×gâ|#şűÖáQăSŚ´ß®+,RpůX[%6;ŔĐOq,ůY‹Čµ0 %äâfŔľQSŕŠM÷@pŮéHŮ\ÁŇIëQI,OsĽ6§~›âůVĄI+ÂZë´âŽ÷ËFcřż$G@/ćí‡-·C6«Đlµ˝HN‚Äi™Â%#NpŤÓł—OţîÖˇ0ÂW~xCŐNÄĐy+T#‡vÄŚbr©ÎᎠ–ĺ´–9Q<‘)>“ë ŘXеµpĘŮ@#»CĽBćő\”h gśqäQ„Ŧ;uźvë™ĹÜŻż\˘qĹ ţ…BĹ<ĺ…hJ'ăF˘GŮ^j\Ě­mŚ=řZ/uËŘąíäĎ\_·W VbolxDŐř‚ÓĂ•«ţSPÓ+Φ3ÚLXʏ´7¨€"“.bx>`śU}¤:Ź"dĽ®‰6÷"ływ4lAż…މÍÁ™ÓůěF„‹vŠĂV›.¸Ř °j˙-öęÚÝcĎýś˛7Řšb6«¶˝6hĆy!n ±‹äńWôRf8SőXÍ2;6]5i%ĎlťĽôFŚŠ>nÂóÄNdý"Á^?I‡Ăęů‰nt®zbq Vú¦~SâÁ$®WĺĎĹ.ň5dä7׸ńýĆ6®yôXGĘáűCď\á űZ˙Fŕ4›&.㔌`(ż#Äu‰ŞyřŤÜjkvXmR?ŤţÓÍéŻ`ogH–_ 6Íąč_ŞoJ|ĐŞâ † ýŐ©“;j€čÝJ|Ţť-Ö)y!Ós2Öm!·of·?J­ýH¸ów]e”{‡3ĐŞĆȡ|Ňďą»ć_Ěb×%¬uˇ NŐY.Y€Ťdü­+<ĘBĘ ÷[WÍPÓ™Ç&<“Ô%Ĺa±çK÷¬*ąjś©#Ř•“kסFĚÂ%Ě4§™íćł<Ô6#Č…ĎÂč h? —ŕ¶¶}—[Ľ|ş@:Ţş=¨ łđ¸’ŰśŤů}Ň|řĚĆÇ5öĺô~lˇŽŔ;ZoŹřń::šŃulřüÔYŮt—>Ô:dH|ČŰG<űŁÎ*źÄŔś÷Ž65ôĆůCTŢáyg$µ/šŤG< î"ś‚PĂž€¤mř–öD÷ďai®(i¨7ţ9gů9;w ˇ)ďÝyźwÔöŚö)†WŻ®]š˛Ď‘ľ°“Ó“§ŽB‰N{¶ő2Łm˝Ň;GÎp¦ŞŠU´ +wzłĽ2Ż1%ČÜŹŢŮ%‚ßüŁE_áeŇ4(8¦ĽŤ˘EĽt "čž1:˘;ň†—v¸ŽĹ»‹‡GĹ©î/•qó ¬®ňďe!őŁj.±JÜä¬ĺ„Ül×?ĺ…˘.x†’&„ţUK‰đgY¶Ťä‰3Ô±Ý8 –ĽS’É–+“žrâůó_d­ßňQË‹4$NĐąa‰Ü±căKë 6ö¬ÁeŹâ/Đ2±ĺJA´nÖ1ŢÝS‘±jNK“z…l…ż°Í'żöA§¤»íQ˝:»ŚőďU™58˝Ôíuž{Đ1¶'=*‘Ů_ąů532ĎHěďďłěá!˛Ý"(͜ϝ}ł.ViÔĎâď‚uu49”-˘PáůĘ+ÎOtÜ->ŘňIyRÓwdČ‘WqŚĺŐ€ô™x_i=’×mŘŚ®t bDČóŽ%D™;.׏ ťâě§EµŘWAě]GˇüTéGÂGB\ +Eož™g{ő5¶Ů>¶ł˘§Ş:¶ÔßTJ3kx8Žő‡łnËÔdŃöĄt¬hn,ot‚`iź(ü÷—ëDB,LÚŤ_FefŽřÎĘRoŢ8f˵¸ÔaáŽ"TŇ|$<®$D­/Yę!Ŕ'ýř¦7‹čoűO‰CńvĎť6äfsĽč’QŠŹhăí?´Ęxn ¤pgâ9‚c ýď|wÎ|ăGĐŘĎąşÉ沾łyžSő‚z¸DgŔ˙f˝+çľ…F.`}xA€łëÁĚöz`!O¤v]&›Í`wŢ뮊\/YK÷Uů.şťëí»Žť5±<9#w~ŢŘVXY)ÍX)˙#µă/#ęĺHű´ŕkfŹÖŐ Łť +đŽVŰ:„&š2ÓâqO4•é®ÚsÔ¬u>ev°šĎľ8O ˘•źFµŽ#/€:HAϰ†d¨\:«ôĄ•ľn;›Y¨ˇ+âąlČ*¤ŹŃîżÁPWYú?>+¬đb2PyĂI•ŔbŕÇ{šÂu›Ţ f +ŕzŘD™Ö(öË:_ĎŹśh·™ý÷°ťíVÁcďÚsşĺC~ %­ýît7ŁźlŹb>öş7·˘Ä×~w®[ÁĘŠâo^¶ůśíś|!m°­ŔŔaŘ;ڞ_— —4FŰᓤ˙äZyăČď¬ě:4Ë6ĽL(4?C·ąŻťÍ€Cb!Ţf±&˛›N˙G»pDu®QaúÇĵ[ľ7Ř`íXJWXŤNĄ83~SöĄQô$lÖqŤŐ˝"Gj‚H żUÄPXS|€§<átQ !’0ě[ďŽ=Íü¦ŔVXŤuŹÄóĹ^ /šnO&{än|źv|/3đ‡KžböŇÇ"žygźF„ľÇ5eaIßű9Ű®µ×=˛ą!iđćeŔ˙F'hěÁÇ ™Ä_‹÷Ü +㡊»5˝71cYő·,čŃßiĚľ]g9őšĺB+łÔ_ž€ÔÂsŐłsIś;ăś#٨iß‘cÚX­šĚŽž'\ŮŤ˝Ŕghpî'ŃC@dí[R"}Ľ8:­Ż°Ţ%Ěâaţ2Î…ix%+W‹E`8Ą¶ ô'Ć/Ę•›@]>ŰQ~Éf–~Ďdýüż˘gˇţK9)µ•.öU=ď7†»/ÂÁÖożąäů+.voâX54TnîR>«Kâś(đ™( oŰ|Rˇ©š« _W\> 1Ö0=…ĐL¦LFžń›KP?šÝŮťfřâĐ­‚áö±?Ę#EAď¤tzý,ĄY+ŁďL|zţ*óíÜ„K'€%çG(`†"śÇ5±Ž›,´;#Qů.ĐĽüˇă/*$ŽĐ˙¸„î] +¶Ěçę'oI—\ęŻX-Îč«á-ęZdř6 ń>KxŁ1'YSK»C‡wçű +~$Á›ŠŢ]и(’¸9 çŠ4XoĚ‘˝éúN8<łQąŤiëëđ€ćđ‡Ú–UöKWA@ÍîĚ'ô&´Ú5ě˝»j•XfŰ>¶Đ˝sÚŻéjÇî†q7í–Ł÷ +N”{¸%Çî¨c®°Av–QHrlŮóěęYŔfóď-b ;NzhŁ"i<ăĘ’Z7ăŃÖ” VR—kOWcU\đă •®*aĐŞ-HÍţ2¨ŽÁÎąpŰôČhÍÄȢáŢhkqłaҸŻ÷°…VŇ1Ś`řp?…­˘{rŚŃ~[a”nšjüú>6óÓîHgĘgݶ*ŐýJ®ˇ\Ěł¸T˙©ţu›÷z,/!n~ˇűÓŹŚ]Żç—ŻŚé9k˛`˝KU03îŞ8a‘Ł·TĹABŤ3jeA: čU©üś+7§=‘0Ü© äĎŘgF<*7Đ`:â¨oäŔn_şlnś¶6ÍśÎLK므yčîVG–äA¬ź–•di]TżkcbŐ7V@H˝•=¸óĆÍYݶ˘¸‹ç‡îd9äžđ:f2!o1ű6Ż;Y*˛ŘJőoßvg¦š~z¦ŽşžĚł`áa]*"l¬ufUťdIŤ`Äjä€ ^UÄ’!„IśEśT§ ű.ĺń ® F±-/ *ˇ&ІwÜYÚ}R°6›|Ż őÎťďNF©ň–Ë LY›¶!‘d€łkčpo|K[iTĎ=˘cRřËŠfŞ'Q†€ţř6\YĂÄ ,YŃŠéz–Ń[´>ĎŘh?s‹ş;¨§ň¦‰“n´vţĽĆßŃ0^6Ü•.$ŚŠ1ŹŻĺ)Z‹Ęz¸ă)ńČ^_Ż·~Z'äĘWÁ÷‰¤UčS`Iso“…fËpç /ݢi{k¤, —cR›Bř^{ń˛€˝Şrxm-¬dŚ8É +čÁ]× €WSż +[/âz]V[¸Č;¶\.ă +ěĚö˝Ń/ ňQˇî}Eď¬e /. ŢÇďłH"ĐîëÝNÄ‹PQŔ¦ýwĐţÍy?"ŕ™ęu 0+:GĺK)Ł›ÉN–.ą”VGjísS–ŔEęHĽK˙2¢黪‡ńF‘ĄÁ˛."5ť­Ű6P übEŲĺηYŮŰć +·7z¨™Ĺ•íćč’Ĺŕt°ýż&lťKţxŰ—ĆUÚ űĚ-ô Ń[źč|ř,ꕥőTĐr?#óu‰n…f´bű_@gky‡;î˘ŕŃdm©1’mió‡ x'Yól °-!x×Ţô›“Kě˙Ĺżl}ÔEmD9Ő±®ęˇÉűU;͡LNéđ›6Ý‘ŮQM~§­ř‰ăĆSOś ^Dmc,/ŹTYWjwŕ‰ö!=.pů+gÔ>ăoŇöý;(¦BĂc—†Ä…B+ŘÉťÍĎ&a÷`śWHĎำ:90B´ĆÝ\ŇeÝF4Ý6:íOý•lBMşr.ĚcG‡•MßgˇÇYú±†rŐćTĆ _zĄ$űźłđw4P§š—-÷”Ä•>ňőŇ\DĚůĚo%«¦+ěçp0ęý;ʏÄŠµĘŤtĎ«*~ę-¶Ç4/'ŃÔ÷Ś–¬qTdÝ'=܇ŰÁWiŮvh Ź«h,Şşđ–É·“ÄZŰ ˇ9wOMĂâ-‚ŔiÍ ş7‘0µí 3ů#a őp̉`\Bę@ÖßĆf34Ę'ŠĄąË9’Rř…ëh«1+#ŻŞ8’‘Ľ˘ ŢÍR-lbÄ«‹šťćüC!˙Č.7ŹA +§zP¨Dé?ńŁK9jO ĚĘçÇřŐ3ľŃ“nfŞ[UDAëř@Ľźűă“xZďu]ňŹ9ëßw} ä㕉Q•]ÓŚď +~áN‡gÔh.ôŞ]ż˝Â}ăŰÔ*˙ŕ „lY…ł•X•7¤äâŚî/Úľ+4FËúoă•ţFŐ”KÁŘýH‹?3ÎséË‘Ű+Yßś·†˛jÜ7 +ů#Ě‹PDöˇ5ÖŁGÍîKĽ»ó‰‡ó?śË’rçÝ3Ú_ŕČŐŚĐqÉĚ7ěťYľ¬GGŚ/ë]ŚN;ŐóđuOÉ L#ĘĽŐYčWíĆéP‡`Ę‘ż^á‡BsĘÉY|m°eq š2!îH\Uż”Q:.Ĺ?ČZúŽĐŚ>čŃ. +ˇ4đDEި+o ˝őOÍe‹·»’ď_€ß'ÉŚďJ…]CDdI.“˝…ŃśîËdyŚ +ĺ©JR_Ť*ë)kŤîcńD†gqFŮ{z|§ÔŽü¨vW؉6]ńăÝ­‘6ç‰÷z]‚+y„Ök¶G$D3Ia§ËL^żř©š ›ťZJĆĚŘ_}«üĄ;†´Íâ˝˙mZĆ٢D.ć4Şđ‡‹!%đSĎ]>"H†×]c»'¶i¶łçďYTµĺěć>4™őçXHD®v íź@§!0űÓj_`fknÂ=ć1ŢÜ”ş;ď~»"ÇźöKp ćzÖ‹uĹŇ÷n¨}]ř (ükŐ5Ćč3Ńëuś€¸ź…¦µ6ŕjwýr¶gx8Ü*JÄÇŢ ÷‰Wh"nßÇŤ5’Ńę›áâ¬8”‚ř.~Ř;~qłľË”宪đ†ÇfÄuDĂ.…ő©Ôł :ëëxćL'¸űn­¤Éh…zŇ[c‚(x÷ď_łlµ904ácńŢ K”ľ±°ĽŚV+śŢWětbÔý_$­ßîy8€°©ŞćŠdĺř*q”0 să¨Ű–÷ŚwZ17RŚđžĎřv»«,TÜĄ˛•Č=TÄ×:”‰¨3ü’TChžUXŐ‰şłLĎ·µ‰qÜhĂÝu‰=Ű4îÄěÜúę é•YüłÇA-–őŁžă÷Yf=Ä›g×Ú=3-ĚöAŹ7ÇŽ§f⛤ÚM8÷Đ2tęXgď7ň|â-›ţó—A2î23Ş—[>\€÷[Lóŕ p¤ČÚ›tÜJsd|†­b¨ÔˇŇtq$Ü1BFŚ˝Ă“uNŬĹr@ŃŁÖjTđZšG¨ßwZ*貇2[őçqý«u"ýt‹™0_›T¸á'×e +¸ŢŁNčŽôű×đ˝‚l±X,J´JĄ‘wÇH×>o—ôPËĐąQJ÷‚6vzć‚% …4W d?ë.IăąăĘp›€ţ‘-{©řŕL˛heZa—P„Ąč˝¬H‰ŁQ¦ŘŮNüX§ šěˉF¶˝IĄ•đbş‚ȱ5ĆC´ň&·w7đwh+bś[Ąťxßj/ŻťíbŽŞĐ˙!ńŚ6B›ęďNfĽžgĎž ć-Ţ™÷ +Ő)%|żžČřţyk7|隉­GłB*ż/ë*·?ů ĂŘ’§×ĚÜ*ň÷Üýö"wň‡¶™ńŽwćcqĂn¨GHŁŚçB讕6ţ3´ŢúýěŐMÁóľ#oFÎâńÔŠ ]fÄ÷ůŢĺjĽÇ˵¶`ä’#Ę9wŘĺ]ĺh™÷ű,!łşű]ŮEśÚđŞśĂ8r:Ńע”"ŽbŤęHď±+‰*äŤß×9L–ăG®¤}żzWß™ůAYťř-‘“MĂsşűů6ftZéöeËîá FEśt}5]ô üüu+VyauÚ¸$wE^FSmă`˘Ł7ęaŢŇĽ9Ü`× {áeLd€ »¶›z&‡ĄnőË9¨C—ŃY‚4Fżue˙µÎX«‡ˇČ’%y.Ó*I -wG¬%ź©N}TśáşŁítÇv2źWRłÄÍŁ!Čd††Hč8ťQoŹFyÁďHžhMq.˛%–Q.lŔĽYű‡ljúK‡ĆPJá®Ý!ŇB<ZÍ uýŞđW-[ B­’¬˛m"AÓ -#ýđćfA&<±4ú’ˇŽ z7˘xÂ|x<űć~ł `,©îvěŕ…T#:%*JŃŰ‘2”ë,»>+ýcŻeîřL?ć¨4ĺ*Ó)‹ĎĽiŁęâQÂĐ"ÖNuh’Óú´EWÜ˝Yékös yÇăĺôüć¬1ŐŠ๯’ĂŢŕž´ž—LsD¨d';š‚„cBI×™Ąq{Î_¦Ë2 óý;2˘XżjÂN×1PűÜ^"†Q—˘ż}ÉíŤî¬ćărÖ×ç ¬_\ďLŽ|KŔ2§©q˙SWQ ŮŢŁď­Ńé“ŢŽÍé,wŹ‹wtzeť6v˝p!ońü­ęĎ«sD°NeßéŰŢ­?XőÝ‚đa~ľőQršU~żË—:[©­KĺÓŘUS`0ţ†Ĺ¬ü}# «­ĂĂpŢŁšŻuŰ(§)%Ż*Ö9<ÄË=čÔ,™g]ł6v”íÄJîoPF}Hç]áwÖ!·l@ýţčz¤|Ôhę©#úi{»<›ąWY~´ Z/Sn%‹©ĚŘŁ,łÂĆéîvapxfă=«Çô2bµ \@¤yĹCš¸’áď/ĺ\ôQĹsXçťÖŕ +JęXkV|ER„U âş­i˛©Jô ·dęS‚2ęí]ČgPŃ×, ě¤;˙`@ÍÎLz˘k—łřë’řLń°H°R&ŢtF‚ጙăSC÷˝ăYÝBµq8g]…AÔ­HX=­’űŻ7CS“Ă}1“+>EÉ–Ą4aXŠ'uM% šőŨOňLmĚI6§aśţYĆŇGi§!o»˘Dş™Űrn› ;WÇmd9grÎz °/pç'żxń«çp{ŐSÇĐy×F}Ă9ÓČ·fHŻ6 +Ĺ«ńčňWŘI .馣˝Ő'_›>Ś '†>«˝ŃCüërnʇTʰ)ů˘x ąş‰b‘ÎnX:ťú8Ĺů{X š·PŘVńŕ2f„&Ç®5Dü^‘Uk„§$®FÉÍ7Ć©~ë.±˘ą„m0Á`犉ťÁ» 11ěŃÚ‚]šÄ2DżjCŁ7—ÔžB•®8K ý©p*Š Ô®O®UJŽąľq×Č^¶1a(†ÖO«„úSěÇ”»ń%nĺń”ˇę…ciPĹ1HBĄŇ®{„ž‡öwŹČHĹ÷Áb@;“78( p5ó“§…ź¶Î$tÉÖH‚ŞW˛\áD¤¤á%7ěSÎŃ÷Ť9h/íG ‡I” Q¸ ýÁMĆ9_ť–±NRŔź˙"mýűvĎłi4„'5Ż]ĽĚ6Ś-Ň"+ĐZoŔ]od‹ řŚcuIßń/p{|IÝxĄGĚ ’~RŁšľ&'0f Đä; ±×ô¨— –NŞÍä[Š8ČĹ FĎJľ ›‘Ů[U'ĺë0]ˇuU˘˝ľÇG,÷}'ęwWÚéŇ"–ĐrŰAG‡Ňlćáő¨›\ĎI«l8j}Ř‹˙:B2ĚŇ%ţ6mVR$WV*Ýď5šy¸µq+q&‰6ŚŐźd5l˘…łHÚŽËÎ{¤Ę[Ĺ”ÝŃÜbG^68RÔäZ»DWĆp!`^ép )µ˛÷É×ő.hŔľ@¸$wĄžxßéÚoÚÍÄ&4‚ř˘´ŠÂ1wQ/<{ßt#,ťďŘHX*&ËDµ±Ň8OvŚoŤ f$wŇx5ţ’!ą+ËŻhĂJ¬­Ňž‡h‹ji5J'Č%ĽqŚ»SÍH†ë(1ˇŮ,î|‰`)unH *šIę™*u§LĂÜCeť“Qâ6ÇdFF]‚ŔhŤ±ţÚL,ďŇz°˘ďKD©,Č>?_~Ô´jÉZä‘N ÖŐÚgŽJu’{ż­nňŠëÍf(ZŮpęç çtyZ+X¬ŕŔ^ôýe(#·5zjúi2öš ľ-« ©nT#3ľdĂ‹çh©†„ţŠ—źČtNWŠâćbĎĂ}#?a•`ţ§˛!®í!ĘDzű Ź‘o{ëŠř¬OVDąÂ8»4íorMëŕSÎ0žý%C2kÓ­ŻJóěýŠ{Ŕ>ÓZ 6­5MŮŹc]RŚ«]ĺ›Jy¸sgĂFaŠtȧ#&NÝĽÔwď®z@¸ęW˛˙şhp]ŘřŞňî©MF&"Ĺú|\‚Ó=w:Śm1Ařs린¸W.ęscA,ZňoOó yź:…)+悥nąBĐfęzÍ€9+rűŮräü)+öč‚ ¸•Ú‚\‡ŮŽŇTd őnQkťŢ[ÔYyčö»m:.@9öâ•1őüč9OL„~ŤA7"ŐWsn0.‹`ÁŘPXÄ6f=ed”©Ôť¤·ú‡¤µ»˝;8`Ć €ăłbj`ú„aWŁ‘ěFgcšđMâÇ»tâö<çW вă–Ď)´cÚ°šÄ1(ŹűHq7ŁâFz‰HÓîágÔ „v"•Ř´^÷Ř»“Vî÷2ËÇŚôd]’Đ'Ş;îšóÓ¦EŇţ>ËÍ‚©úܱ.:Áŕd‘¤W^°´SwÁNě·łŃĚčť2 uĄ(9ĎťŃóM_1~•Ł3–ěë–[wqËauuŃ/{Óc~¨j¬KÔާńâQʧˇű–ťvŔ¨ëłÔŐŁˇ$}`ôÔn#‘ q›ýńdáólČŽË‘oCÎR˘ÁîĎŹČVoöW!$vëw`lcIí°®čšî@łŰc‘Ą˝Šć:ZśZ䡵1•—QÎŘŤ“Đh臬¸nÇ_~7THűÔZĎÚče3ş.RŞD٬µęCHhXŁ?Aąş¤lš~Wpđ[o‚ˇCľŻAŇząŕÔ®ťIA ­Ň6ö8.2$¨“IĹzŻ u3T ×%ţַٓ±ű Ucućw“ -ZĐÇ×Vz˘„Q đÔWv¸W6%é¶{…XÄĚú61c_šY ;3K8˛9ŇýĺYM0…úńţ¨#lŇ)rňĐĄ•~Dn*(ŠIuI”="QܢY”żr†Áۢ¶ąLDU}îü>+4Nđ»(LşÇeçŹxŞhl•nŘ4č ÇíŁ®8ńňŞ +‚ÂşŮőČ»W#đIë_÷zţtl…B­x«č˛ 6°K;öT d 6lx~ń¬rŔ–ŞIa—čÖ?†Oé…Ńu µw ¨ňŔiĄ¤ôłMą©\rD]Űq:ł*Î"¸ë¤Ął[%»žBɧĂďUś¤Š|Lęö0čąâje˙ˆşLúP50"š{·ű}*ÓŤ+üqg%C˘Č5çűÖČ’1$€÷1l/#ŔDäĆůŁ·ńź82üHH#eŽAŞą*·‡ŤuôĂVÉĐçFÉáéuúÁ†ĺĎču13f'± ąľdHŞĚ śŮI?Ń–q3ČZ÷‚Ć%pg“G\<™2ŔˇJń–[ý YęĄâ«˛"ťÍöĺB`z;ž7ó?ąPo@´ťtwW˙ľÓĄVĹÓĽşú¦¨ęr|jw…űĐd +~ěé±¶˘›ŕ%‡J™M$‚CMŢĐőś”öźK¸˝ZJąÄ;N^ÉŠb'̉DE{#’äYę ŚO2=NÎdj)Ó˛ +Ň:dIFjuIl˘Řx%–CťŤĐoEÎ$L–ŕ_sĂ*OŹôŤ5HŹŁ˝/ä ×mfFhA?u1đčűö—!ZęSżLŔ#řń·; +ëřÜÔ/Ea×afT]r(,}üŚňHĺ:dÓőĄďXUJ‡ĘŹőć1ÓŞŚ™u×MˇýÜçKG–i޵÷můüWvV{ťć‹ăáťk•Yš˘¨ëJ>´RŚm¶ŁgŘňTŞGƬŇ!ó(ʨ$z~Ok}ŠţoQ×sI{ń€¦5C˝ă`EŃ+â«s)Q +ŐĘR_Í?Ű9Ľ0†é_p +÷÷¤/†I¸+q(?2˘,B’ˇćµ`Z»§&iFĂf>µzĐĽE{Á‘ĹÁ![ śÝń7Á:Š™6â;%Ç?ĄËxgůÄQ˝Ă@•˛>¨˘K%B“á®ę×AU ĺű'}ŻÇ‡>›‘oZ´üĦFŰ‚ôŃ0¨ÍľĆd‰űCć?w€čęż3ťuIĎx¨FtůŚJöSW Lž ׏”“ŐÜUSÉ™k…Ú'8šUIăÚ­ńÍÖ[~ĽńfĎ H’€ÖMă7`$TĐ2µ~˘)'22®Ů°‹+ÉćĺË8Pęě+‡?çĘú¶ŠŢh¬ŘÖ9‚ůĄśőš ¶hŁ®šé DőÜ@ÝUĐ'ćŇů(W,¦í>ŢjślO©UŐąŔ Â¦$~ż<@HdŇ%{ QĐOZa+Üea)ś¤Ů:'¸„ĎÎ#ÜíżěČdň}a—LĹéŰEÓ±AťG~(aă“ őŇ­żCçű§rŹÜŇ1;0X5„ČŚrđRŃ><đB`Ő™Âlę +‘j°ýSY•ŢIYRŻÂmáŚ^ÖoŠŚzÝçřF®$lt–‡BĹqDć1O+–n¶`»{8¨šÚ›%/]śłˇĄő˙ĚSQ›xý\Eʍ7=v.iQWuzGŻ[˙hĆöü> +gM›ýśz†ŢŠ^Jýü˙^ÎV°¸$¤^ĽšŐ™ťuńčg*ř-4âcô ó¨ŔëŁ%R-un‘Vő•$ ŕŃ0‚ Hťˇ1¤fF´:y#Čví¤¶&ö[4ĺŠ:ľbÍđ©U A«ZáŽň1|kîY•H+/ç’`Ż±ęł…™®j–=™ůÖĺph­l­Řg |>١¬xAX‡&t´Q]Ý3W~ĎÝwš`îr†”ŇQ†űĎR^˛ě««_łĹ!¦¶ˇ?4LqÇy]±éęKJđrÖżoöŇQ°M¸J«ßźn!^8ľthÜź]mć–eDTŽ3Úuďb`đđ3F¤î} +ŹcoY+ýDë$ň”őŚÇ0÷1ÚßIĘdüç'lZ‘“®íÔg•• pŇMScîVÄ‚Kev—ŕß‹WľďúzëäR)ź?Ë +¶+Ś4]ő®´­|Č•Ípá`śIąě1ŘúlüŤ¤»Ę)J zn ¤^Ča4„S8çâęL4śőfO“\ĄÂÚ«÷P7źŇ©J2ÔbćMŹ ÖC¶<ź +2öŽ ÷g”|*¬‡jn”ńDVĆć§X(•'ş±aŮ]qńhQdľ"sźlŘřÂ"¤ţąÍć +÷|(6 +E­ŇˇiňCK|M—t(e„¨+Ö;ťüčä¦oŠFŹűś‰%%7 WjęÄ@Ls®(âő/ŐťVŤ°ö絳!ĄÝŮŇpîl(*é®Đ$]B3Av˝©­˛ŘÍ\–Ż÷ať™¨Ť/e‚˙Řď€&®ď>(u<šBŘm$ş*–ݰůŔܵŘ1?‘}@· ’ôůeC?ý%â‚:í;O°Ş ›îJQť~†w=ŽîŹU(Ş eD. §ÔĄĹ %.±×ÓźeőqP˝őŘ/„LnęS“/×4ÄőŁę¤–wzâÎě3Eb#Űď:^`9ô÷˝ąĘGŔŠ\M +¬ÓLlnćľÜQl?‚&šĎYůđĐŚz­!q\ŇC.bTňĽőÚŘ€ňzľá§çEčŘRiT[ ;lJ$ Ŕ×ő1ÇŁŞ}_•Ő¸ÉďŢXjŐÉbíń±sůÄ8ł4ÄSýËČóV‘§Ç[Ó[¨­™ŢeŕˇíI +ˇ4{ĘęIAĽ#CĽ×]qpF#@D}¬QĘďä {ÍĽ™w@Ćő8©”ČŤ?©g»GŰ1ÉĆn9@Nď#‡Ą3ş cçşnÁŮ·˝Šđ_°`ć¶;Ké릶J˙łsS•ĆŐ%O Z2ąó»W,\Ea%+§g'* A…ŕ›ţ9á|ŤZPĽęoí~ťťńqŰćĘLąť]8®Ç¬čÝ Ż*.Ľ’ąU4qµ}¸~óŮZ´nÁĘ]gŐf +‡ČÉODCÄńhäßü:]DŘÚjwU&-r3;lú?ň$-Ťąü‘ŐĘľ‘¨~+""ąčŮI8~u  ´ä/A‘÷ ţ@4RÓ3X˛›zćÄć1v]áúĄď.c$[¶ií‹d±t´ ťOű5:öqž©ŔÉh,ň‡kW7Ą[OHZůV}c&őć+Pëß%˛@DŮ®ë7‰4ź¦T´ZŐÄúć+®ßFD‰#™Hľ&ÓÓuHĐá¬Ö5ď™ÎoT˛ôW¨CŻOÖľżâ•SBŞ×\ÔÓ +^9Ł&áĄVţw7bIö/h7ęušUí¬Q$]u:W3ÂęĎ܇†óůî`&‘-NTŽ™‹šů»o,ë +}AâPP{űAÇ ě#/lŚ–Ed…‘ą/ tÍ/¦ČŁŻz†Z7Efŕy‹A­3,NFŤ‘öm®–î¨TFĚ©ćěTí{ćđĽžHęĚńËą\&*ö7•Dtyut4v`ĹF'.†Qá’ö×˙cînZwG¶,±Ď őÎĐnčŢ"$ jâ4xŕCˇ¦ć6ž;îŻďř­ŇóśâVev‚]¦hş*˙q¤GRÄ~]{­(y™ă«Ş§_ÓŁ+qŕWqß\Zđq @ôňZő?MEi5ÂÉ•‚š›\"fçm űäBD#âtŁ<Ł ż×“›4! OýqNEĂëäEźk8"Őqť–ođrŹěOľ•+n®Ň9H1ĄH±Ä5żąľ0ÜľnĺŢP|v´Ę¬¶˝ŚŠ7`DńE{˛»vŘ.[Zpî,a‡čG[bCôt8dŽÍ{ŃVJŢŮqÔá +QŹ˙·_3( 0U°đQĹ@Sě=©†r/ő˘«p>µ Śg¦¤&ÓĆĐ?Ť¤z™ą[cš2Duö2&ăP´µäđÉÍέđnĐé«"©]ö2•dbV=Ł6cąí4PsÔÄ“k<ź ^™Vńş8űŚY.Z%D´4Ąůhmf#đkyz”űŃ ďíăŁ!<7Vv}S€x„ŠEóF>śmDW €Č>ÉSŽTŔý’8c:L䆚˝&3:_®|Ťđ’Ž^ÁŕX4Čpůn4Ž/•÷0eÔĆCשgĺŻD OĽt›`Q€rĄ~Čh[xLń!=AĂŻ gGµĐS@4±]AĂš‚˝á壂†LqÜčZÖs K Nx4+h°·Ňő\ÖOаq‹T%â]Ăxmz¶NÖü2Ôxw‚@šĽ*C fsĆ WF˘ŽmÖ>,A=‡ŢćĺI÷r-‚‰xA‹S…ât!0Ĺačĺ†Ěó#«ß;“®L4ŮĎ0.°FjxĆ k˘áŮE|çăńŮgEş•Ü8ŃŽé7…ĚEŽśĆŔĘš~ťÂvyß5ŇXűëF‰ÔÚę÷`i˙÷Śő%(’ŮÍ$ĆăéÓ5nKČ×BîV+"LA·FŽő~ ˇD^{$ýúĽŐűŃE ŻŠÖăaážBö”ß [K0\ą)Zó8ĽÖ@Ş ť‘ńm– -s aě Ż×Ś,\Ž ť“xŕÂ[`A j|Î[IÚś'´sE b.ŃADŽ}đ _m2âű Đđ ›>śWöŽÚťĘ:ŠđD„c¨ťĺÍŽčB šżĎ k ô…č U‘řP Ř;°4.c-ŠđÉ]ŁY9zC©jđuoÓ8©4ĹŕoŻćo´w7š¸ł<ŃŔĚEžŰ»/2lxé°Î¤G¬>Ěů‚"ű‹Ţñ§sS+ć^F&FamÓË‹ŢfHAŇL vÚdç!ô(Ř­ű4îĆkOüyëQ%©#\uGgŕëc+3L-ňáµ/“¶Ý}ËŔńĚ×tMÓĘŇŞ­ś"ĐĄ—˝ÄřľhĘÝ*qdfÉĐ÷©Ł˝\ł±÷‹&bŻćŁĆćřĘbRWpYCsăźlEŞdn±ü0ő=»4‡fhŇPŹ8ź ź“!9=Ý'2Qt@żÔžÎÝF)Uöh•ňđjKë¶Îv‡I˘tÍ*ű„łŔĽĂ‹¬-ďrš÷­(¤¬®źż|ĽICÖĎIi{|h#»[©íś5>rřt™qC¦F{?aĘĄ÷Şß0Q¨–· ć€?Ą0mUj„ęjŤęeKńݑŻBŢDŕ´¶â+{!şá¨"]z>ö[ŢÝŹZqS«ę$·]*ť3}vRPk“ »"6!ég,3Śź¨HřB¨2Ü„dĚ +Űęĵ4S.Ú?/üč®ţP™Á¶ÂqpHđÜg&(úÍÂźÂŐöÔ팺`ÇĹaU‹45v‘ĺř°˝BŤýĎ’óg$©¸ěU"T;"Éš'ďĆůµhťÔ)DIż©T8Ů Źu¦d2îŚLÖďµ +Yí­ąZxß3PĄ-ăI‘JѬŚ”DŢÝÎ SYÖĽjšůI·4ýO´ÉLĽ3pĽ ;2á7Ąŕt†ú‹8¦ú~ çëhSĽjw Őą'cĘ`Ă9Ůl¨ą-Ô«B¸ä'0ç´öwľ1üµ@lů'Ś)*jTöáŹUtXPčá´ëÓ î†qä!‰󞉦m&ž„ľµq—«"*p}â &zkÉ10Ď<ţ.üGůÄ€„t]sEz©2Ŕ8† ‘g&ĚE 2× ‰<ýmřŃ úłűEüš6뵾Ť4;Y°˝"“«Rś•ćcFDĺšŢ訬q ż 6ily­ČdÉUE 2›Ú-€tČȶíɣ׻¬Ĺ–pfE+zÄ<Ó6¤żsjnîM†ý:â#U‰Îď ×µořÄ +âvě ńOO’ŐŰ z]˘=%›BCôĐ|IśđD´ÂŮęˇúž @řs]/ćE‘@µř^vĹËč1ˇ3đTh–,´É°Đ~dčL·'n§¶—*‚y:xqCŔ×ńa…U{ 3ë9)q§±ŕ'PřŞqů]Ą5M˛" „ĆíA+Ţ[ťcě;%®0¬†Ňk)‰5oż?TżŰ c+LşĂ\#fˇP„Ô.:^ú 3 čŽA›]‚WşăWČÉ-‰¸'¸Ć›VyŘ´#TyřáP졉Wf&Ň€A9驱ô2¤›Pxá[`Ü1W'śÇˇ%)?™Ř/* ۱QÎ9ëcÜú'¦cÖYiń LâNGVkS"k¬‘ĺ›´Y˘ŕÁYÂR˘T?žÍʢ™3ŠPsź"w9ô5ű:kůÓ+Ć®»Ž{ĎěVkeb“VHŕË_¶ą-ŘĎžI „XĄM·:ÔŘΨÇ÷Şć+=śU9Ëb,cŰJ®Ćý«P݇cAR\–)“©}K÷:LĘęg´ž¦•SyMËş%żPUEŘ)ČsZSzń¦ÚZ´»ę™ËĄlbm ěHýůq™@r[FMËľ§?‰ß$e/)r‰ÖµŮ˝2j˘4eĐëz|¦şýµf:ŰŘäőÎo|»AŹsź%J‚1g`Ç1˝fŕP®Ő§Käĺ7C›ëă5˙]×ö¤ĚĆÚB@Kű~ /—4^Čr<Ąů+üľłŞ€x}'qŞh×|ÉĄC"U®rzjl„ŢŻCf˛l/Ë‘«UâDzbçF„zf’ĽVt”‘ęëúňóŃŁoAž%WZݡäŕZ¶âaďˇlo۲SőęëŢćp7Ű"ÂPň𬴒 ĎrÁó·ŇĂ™ “ýElĆŻĄÄ i÷ <śV +¸ÁUďE4¦Š@ö¬Ü×pĎÂóĄź{)wĹ)óěE.Đ2Űé\!—1Rĺl6łZ’b”&Čül5I‰©VEWu`YŢA\îËŃÜJ"Ł€ŘŹ[XÖ6ú0·ňORóKoh‹ĘíRčĂ+ş«@Í n/v‹.öţ Đ;¤(çáM,!:iÚ«Ťr€ŔŁwÚŞ6ÝĬ s"úĚ,Ë‘ÎęXať‘âăŻÚ=´Ť4~D(–rť|ĚÄ‘:DhAú™ ŽÝšYĂTzͲ‘śâş6gŻJS#@ĹA?Řtżę˱>ĺ–;\„¸8ŹĄ^b˙™v2ť{)r€$äsxëjQޡ!’®dŞ?í, CČ˝‡•DЇjO¸f¤µ©ľU„yeúgädt©IoţĎáů-ßôĘÔţ’XąÂ¨ń/ÝqMDéÂëEŞn%Ü>Óşò}čCBlňő¸b-A fŐ`çw8ŁB¤b]«  gf’#d~Ţ_,ţzŁ8âá~=)+Zˇz(`ťĺ+ŠÍ‰0Á˙Ś-‰¬Ě>+łEš5ż‰vp}RÍ—Đň*Ěš¨Čö kl"â”?N‹3Ž83<ŻY†»3ÜQ¤ŚGÄ ™ÉmoiyÇ”ˇ‰”’0Gŕ¶!Ľ_s¬TŹiä˘`iżíúŹ5*…ÁŤ2ÖŢgČr—(¶~đK}(H«Č”[µ)錰ó\*5Y3d.tťŢŹÂ—g+ą?t˘=G5^)Á–©fî>±ˇđőřg ;PŠpߪ #5Vłő®^ő˝¤{°F'M%Ő×Młk+@Žą™Ęú&—>ťéôý%Ö’')ô˛©µęÚú¨Ő|3¸&;}ל_‹9¸2Ţ»Íy/ŁŤ¨$‰DŐKÝR˝>M©ľ˛ŻÇ­qĺtĐ8ôÔĹű]ă\ZlŃ^P(LH»‚ţ´óaŔ8R[)d ę{Pĺ´c&h{ťk¨˙«ĐÓ®ň^áy”z¶VEÓ'ôMťNťsŤ|¸ąĚş“˝;«¶GŁŚş3<ÂËXB +8ô ËJň0„»ŕŰ}©_lkă^¸Â˛’˛&Ţ#Z}mŻÇů 0J§:KÂÔ‰ ×çő%ômk)@Ä5 ­ËPŘRä +Ɇş +{‚ş7ÜŘÓ;Ž.äS«™˛Äô(© ÖŮű·! 9é†yĺfÓ:˝Đ”[* ńčĹ´ĺ^×ĐÎîɢń^ń g=SżŇ¶F jţĺť3ô…śŻEč—ąÇ µĎôT ŘŁ>Rđ^Ëi°&A‰ôą„L]pţa?Š KÂľglFp• Nr\öqH ů­tCč´xŰĽU{±™®{‘hđkŔmÓËö¤¸iˇ2ňIöÔE‘‰÷韼cxž&ffGňh(¦ŕŰ—#»›PŢ©Éé8÷h­Ö;G Ś7§Ć*k0Ü×jÓ‹‘ýkŠŤËV-Ś ¨˘ř^.ěţ™ ĎoÜ—jů2ĚşW @Ŕ‘"Ôü°mo‘ź†÷¶w·“‚Đ™z5&înó +[ęšg„ŕhHNI›5Z0ׄŕđ!Ĥp˛ďď@C\3×Wź‚Ťř rj‡ĂD9lU]» Ś­|Ä!Ý?6·ęř3¸[)Ý kĹęĘĂä·‹ę@ČŔIžśŔnn…ĆQäCb-†8G2V#ŢÇdľm-‚çěŇŹ%rCb´^˲¸ňÚ!ú°U1±Źt–Ő=Ň`:B!Qđö.@!‹ĚÁ÷m!Łý5_5Uď…:㜏č +/=ă*~Ýákj¸٧¬Ä3ŠŚ]ür“ő>ÁfŁ+uă AHBP:b•TâĐ ç^a‚'9›t˘<˙Ło2•(%žH@׊éŐ`™ŕ(…IEň¨]ß­Î…<ÔĽ ç^wZ2II—OEç9îĆÚĚ·úÉŞg•$‰EX¶—ŠŽŇŘđúZ !c Ę% Ô–©qKv§šŮěĂëB®q2¶É ĆtŚšŃ±9^WzďD z‘âkRÓ ě0:ńLël˛öŚÖ8nŹÚLxáô•–»¨fÓAUB¤{˛č=˙N‰mOIč  Mâövť)tЉG’ńGŚŞ‡ĺâéËî1č _ńY¬g.ëYkłĐfÔkŇŹŠg¸˝ö¨ăíD"2™± ł"Ď:˘ đ’š]Ö¨i¸ňÉÎÇ%n«†2VŤkşDüú(éŽpŞĐâŹ2ŕU>1çÂŐ)jO /o3dżńţť‘x|â}ę k†ŔˇłÖzX },¶×$)űpĄ(…=BäŻŰ§ŽŃŐ’Ć!]ŇXR/xeKÍQÓH˝ĂCÍ`-4ć‚^že2˛˛\„Fu!zĂŐˇZŁ^»—íl ম‡$ĎpĚ8}U˛˝•;µsĄ»‚8Â‰Ř …qËŚMTUďm†J-JÉ0ĺŘg<׾˝ +ęÁW´ĐČžĺ_°_®ÉĽĂÇÜĚőt;·ZB¸ĺ.ŢŞ–%¦ç!@Ç‹»ËŐůxĎn7B“yĐôÄłŠ ´D·µřöUVeś4më^ ką¬ş·bĚćUłEMˇŐsĄ,†J9_&ęŔ1EDŚU[¦)ĺwW‘Oj'p´Ö˛ BŔ§*ş>\pm»bSĽ BşťŢ®ńű±ćJŐŚţťő îa|1ô¸” /µ5n>ĺę±5Č +°ÝW¨oÉjŤ)EoÉžD\wZa˘¬őí ,XeQíüÍŘĵögf%÷řZRb8fů3l)ć×^ĄV¬–átY’WËQ‘C°ąo˙⍶iT/{ťŔ5PÁ-Ťäňâ'Mą¨IĎ^Ó +kż—ŇűčQ¨ÂrąĚ k —Ŕ§üĽĂQ-o¬=Î'xfżB#†§T#"ż3b×OŰ«§Uź ŘT÷ nFŕÖî-źăŘQ*CîÓ#bś‚:‰h2ź‰ý”ضéiI®¸–Úă3Ő-˘ržW8,76ÚđX>ZÇbh  =[ă1ş ­×”1ADFz 7`r0A˛¨/bNč¶fŇGKŘ[ˇ»†óBý‹ˇÂúVţ­€ár™×Ěť—t´DhŠqpŽČâüÂö¤×](8ŚĂm >ąç^Iúľ^gyĚł±ëPŠę€µj\U÷ U;Ż"Ľ…¦ç¬iÔ ď‡éhÝ ŕ–v‹ö ę:ËĘ—FalV±ŠEÖ«üŕŁ1ŇWü±ŇpGĺ…çnłZqŠ»Ą‡%'?őˇ¶}™ő$ěŃŘÝRŞtŻ>®’dÖ0ć7|€CäY2˘tîęŤU•ý†Ngś/ÂmIK{×d]Ęă¸,wUZŚ)\¬—©±đo–!Ă,}ŮxŰYżŮ´J†üö­˛k Ká^Íă;ĹťWfI(‰tzIÄ¶ç Ş|j8i·ĺ +ÁĹOd ?,YĂzŻĄ%,m!łŞż)(MJŤş˘ż^|3s±„ÂvSf­{!#5»±F„Ă*ąnëQj,–lq<‡Ýµ„0ç:YĽ¦źÁă ĚsĂD‡Ą?;wća¶˛Lľö\'fkśX4ĺ¶±„ÉÚ"qT-<¶!š#źXűtÇ +i$9R” ą_ŽűŤm –¨Bبű¨ ˇWĽÂ6.d +2W:jµ$ÔŚűtuVUs0%¤[ć·bĄäV¦R·˛+ž®Ěăóéµ:!kÎ’7ˇŐŤĺ#K°®{"‰łTco=cůč`…©˝u˝ňW©›]!EňQ +ÔzB’”BćÓjk M2FßSŹÝÁó†˛f8GśţáA€¨«{µłCn”Üd3ǚţ[I*ő¨E#h% R*ĎÚĂ5&h Ö/*g:Ů:ęo- cĐ˝pÎp-RŮq„őH5 lú*ÖĐq(t±Ż Ôw&ÔŇ _vĘ#˝řşçëÓëdrď×'ÓŢĽ˝ÂÜp(^ˇ{Ý +?)’+z,­˘o#ŕŠ“WŤĺ«Á6ŔóŔ4fŮAÓęá˝§µ<éCőd -ß<ŕv&Čś±őśčb&¦ܯܧ4éRVŹQR‰źĘY*R¨(Žr1eŢ‘$mÚŹQłĆGX›j^ˇ¶zěS¨=ú^ë/ç{-$^ŹăY—ŽČŞńSÂÓ!Â>…ňz +t'{RCWoĺĂ_ĹŹßëSo†Dď â· ţ€|›Uk 9ŽťúŘ[ĺfCjľe¬"}Ą&˝GrŰXSˇB…ü´îVzÄŕu¸™+¤y‹Ęç]_Řęňí)«‚Ż"ÚÝ +Kp™f}"\¤¬Ö RöĚ™lUĘŃĐ·±s|‹ę·şälpp¨®]’s#Rdwď3ď犆I2ĽI=ÎŽŞpOްÖQrĐĽ1ů~V€'ŕ/>–Şb>Ó\[ŤWHŁxÝřĺ<Ű,ŞĘđ@kňX†O†§;ϳܡ˛3Ź}§!:^ŤŞIk•h#!‡»čŤ'ÎĚ>’ä=Ęú/jU*lW¬”sR*„ý¦DČ燎źŰ#áuW×­™:'çěßS¬]Żš02yČŕ™W˝‚ńŠ«‹•YŹŇf§{آKµúÄI Eö»¬˝j:~:w€hť·Ô•Ç[2ânX–˘b‹‹ĹŢÚ3?ü@­'Ó«{yCŁ}¦CŰ1‹Ä˙iáŻJ.ß—y:~M0†»¬Wbžj”*˝ů”˘äĚBĚŇ3ör˙(—™o¦ąd)ěůxcKÝęĽÖĚ÷z7Î××€„gËâŢF:™&^±,ß™ˇşÖŇ_áµ…µ‘9k[‡üH‘Qv+dÄżVá!.S8·ßYĆŮ í)ń§łö‡Î¶ˇDăű2‘kKwÇ?Ů·Şka!Cň´Fo‹FŃBą×’Śśm“Ŕ?jh;Ży!v®MŤi7…¬®˝Bj#äih oFZE%vĎ’+ŘÉ“|jź ˇ%ú űúpsťi~)·^›n¦—ď°ů•{Hť_Ő8*µĺ.Č4'5­¸e ČŕBY‰Ř uL%Uő”$¦,Ţżz9F}˙Eł*1řf :­›˛uŕł—I˘PžËü|Ďâř!žËP[Çô«L<óŘSěe¬›"„ëJ|šO‡źK ¸GŮz]Ďj¦ţBú@wΉ?ăóˇf·¤‹ŕĹ+4˝ĘdÖ Ď:â$|Fě©Ĺ\;‹ŘďGE¦‘)¶”Ú"w­XI÷Î+Ô7㛑ꙅŮ@+učsQVŰ fů.ě%kyťÂňµä^Í“ J<"hE™¬/WY)5s\‹řëŮň°d.Š“·…vť¬V´3{ţD&)÷ÂR- ŤR=<°pĺTôXpľ‘ܢçV™{BÇ­Y9WAzŕ›őI u…Ę`­·‘WصV(Yk‰­Ô9x‡|‹hË…Ö䄆s3«­ćÔÂ(k.‹řŰQQÚĚvG™ë¬­AÍ‚(Đ’zwËÍ©ťíćËjÁiĐwÍ ňŚHŔň9y ‡Vq–ř¶ÂFgXŕ-R¸ďŠ#ÂF*ˇŠ¦•ôü–Wâ «Pc7ďma3>ů–Řkţ=Pńl#B5M.‚ĚO/yÎlNBC“,XÔ2ĐA%ýŚÓ Ć 0LŃoĎ\ě Üä-sĄUɆčŇŽ[/!Ý9Ô}#R–P!×8{A„ßN-,eä„–ŁľÍą5ú úőJBoѰ‚jU*@+v:Ö"şlŞhHÄV{–\¤™× ź—í†:&jˇFőVŁ® ‹Ň (?ŔâŠë×u«8~şą8ę¤|dcůlH*JÂsý圯2Äť¬ţ’~罟ÂzÂ_ü˝N’˛6™möaö@mD˘ŠIń‰#ÁY uĚ%ć*l9×HÖDł}öi2á‚P–ŕń$ŰôŽ^ÎaČxH>Ž‘k5ĂQ±aĺŔŰ~”mDĆ_ěß÷ü~4ĽOMţ§Ş–ЏഠO{mn;ă’©Ş “Ż-^‹Ţúť‚Ű^ŇÓŹ{A}Ťçł’#Um?fy8ÁNqĹśŽÓň‰KúFXPîrxbčă®Ěrň‰{a»ŚŚťXĽd.mśťĘY<í:aŐ$¬{=bj4K¸V€›ZxoZZDU­żt\#˝8Móm>rü_ôBjwČ·é¦úÖ2yIđŤŢw|šF˘ Ůú\QĆSĚ/Áî¤FTjˇ “Jş×EWc VxΫĘd KW†±ÔŰÔ8ŹL^GĆ!x +¨§fŤŢď•ďs¤Ă»˝ÝډŞ.tZrŻ‚SCŔY•_t)Ľ¸Ĺ+?şĄÍą—?ńł5|™Ş°i ź°E€8fW®­ýA‰çVC źü1-¸˛cŹRšXű*q5ÔŹ)ˇ×łâF§ă [›*ŽěX ŐŐżË#LŰ|aAʡV™bV×hĂî ¦<ÂjťÜŔÜZÔ5©wĚąë5-ÚaőĐđ…h¸eţ`s™ŕž#čęÖăő/%G`łáU3` rŢr!  \gK0ă횯/śçĎc˛şkćmŔ1řß––PCŐ+xŹsŹ’v­âoL˘‘ĘEEó7)źĘ™ć|f…®ĆĄ42rw|LŘf#QS[^WtĂ›ˇşęBŤď°8ŘĚ3"CÔźŔîú9X5ĚöfÜöTŰn„„C-@"Ş1â—Šŕ¦x‰ă¸jfŤ…PűeŽ#1îý$GꄼÁ u†Ě3 +⌑°§PCdgÂŕ©PŃl;—ä{0ĄćfÖLW)Úą—Ď«};EŘ“<‰{6í[älK«ÝEĽ ;顼Ehů­ĂÍŐ5á·Ž¬ťŢ-¬ňkĹşš‚Ŕ»’j ę“ţ.âV>Ýť=ú ŃÄFˇŰ\uoO¨fŔK[ˇŐSmĆ˝5r*zZQ.®†Ö5•{;öŰëś‘ĺřjVm›ř°Đö¨¬EÓŞDJs$ŞGÄĚĐ„"A1QᚺЙ«z7„ôFĐŞÍ3Śmď`SsBIˇŽFŰŽ˛–r·;ůÂťŹ.ćĄ T=6Wů'‘ěyUč K‹[N OłsÚ ›G‘ć>Ď0ésŔöK8DŹşĚÉŤąj`B–řłÉ‹ášŽÂkýĺtOţ€śHŰwog'0„Ă+¨łîŹC4Á‰ŘÂŮ®а,-á;:sežgüř1Ű=¨D%[(Wa›ZĚ=‚˛Y±ië‘Ő×:54´J0(Łkcđ!'ô+řbZŻ>řş„pÝ4qtDY˘(Ű _{dđŻEł÷&r_OQÍ@MdÎ1‚Đ)Ş©CfŽ_ě]AŕŢ.Ś»ŽçrŁ­ň_űÜşű–îOHÄ/Ą^fÄf}‡x„bžăUi•©.!$Ţę0q`ŔUČn)ŤízU± Ş˙©FVAĹZĄ®)s„¸%e,…”¤ŽçÂ:§^ßă áCÚ:lí­ř^ůŐŕ}ş{îşÄ°FĘďe±XhśĘU*Ô7ÂJ% ¦‰ě+ü×wJB<ť*ID˝ă2±íéý6‹¦ßŕěôé%ěĺ)SľBTŔŮ!Źjâë2Ő3Đ82XR Gl© ó»§˙ţ8fď7®®1Öw"ŘËÓ´äN¤¦ĺB{F_ŃxäřŁĎ!«tPÍ·j`! ÂŮ´Ő’{EÜ€óÔXs= ŮJÎżž•ͧ źY¬Ó­5^WČđý?˙ÜÍtyg¬ĺ/Ç]ޞ0|Çë켍sťfĚ*‰¤óô]ůI3 ‘˛Än’ÎI:§?T.%¶»Gň.†Ď`đ4Żm~‡2„Řd[Q@ż[ŠČJÉőIµm oá3?‹0„xqK^ąFŰRÉů°C$˝[±­í…łĘú0»¨˙x58Ö +ÝÂźş(űéůÇÝI‰.ź™şlQ``vŻĐ [RE;XţP°†ą–·2¤üŰŁ9ÔB(LŕhĽÁpsđá'"Ś+5őĘ=/łŠę(ˇ[1Š `….q«ŘřĚg80¬í}řA±&!‚)łbčĂŘ6ů\čÎxiăj“’Šđé™Iźµf®ě?"…Ó#®Ŕ-Ăů­OąšßÂť&÷éQL]ŕk‰^·čk´t«*YĂ=+ż›.Ód ,Ý9™„®É-®·;…Ô©×üĐE-ąŃęR—·Ćĺö(y(dii&ţ±ÓšéŢ-ŠŰPµlÝË ˘\UpŢ˝Ň=ňĚfڶ¨˝ŢU˛Zab#Oiű\)PŹÜx}÷ÍdöŁŽ–„×ił*GJěÓ„_ܦͨ\łčĹMjĽ1+UĐ^É÷’qZFJ«Ă&µ(Ňß™BÂ#D=Ë ·fćyź›udÉĆ>+ö®z‹¨H(wgJö.Â/Łw4¨ą X Č€9…%XĐv‡p};+)oš›ťĂ‰7xďľžÔŘs3m.ÉĐíF »FőUŇř8üÔůÖ>@™3âŞ[Ů}oRNŕę^:©´™Ź˝”‡Zxʱ9‚SÜő\ bWF‰ŽD'ë…¦Kp4Ýč=•“˙Üt¨Đc©„5÷xŤs‰”:PůňZŇWâ±q,îđy5řŢÔ’”Ô”:KůѸu¬Źě¬%.ŠŘŁÓž[!ž‰™e9¸†Éö-ťŔ|uĂ”»ǫëüśzüÔ‰ň–a±ĚÝ÷¨ŽÔăA”řZź łís q"„SĎ…-Ś€1=Ů0\B¨Ľ´řsÄ‚n_OŮ˙8jź‚ ÝĹ-ĹfôpĎ·,ž´í·Ć?äóA]±×…Ŕ1Ś=ť›¸„Äá˸éöŐzŚBš-%‡32˝PéĆąę·KÄqF=="Lgů»Vˇ@’Xp"U‰E\FĎ$ő`ŤŻ5‚Řň§3ŃśŤä‹ß•Y6Ł‘pK‡±Ë!đ›Řşˇňł>Şâ!f§ĘjuC˙ śY[ă\"Xďh̸ǰ,âěVżx›˘ô{ŰőśÔKlâoůÉŐ¤?ЬÄ­Ń ›k‚ąĐ…+šŞÜ+A@ÖĹ{…[ĆÔ!•ú쪌-f¨Ćą+T# +Jv©râ_uŢ’ôŞ pqŇti×<¸pęŚ0tlśĐr|‡Ý»xúôă Žď­Ď-¸ +%lN0‹%"Iŕ™L{^ŐĆš?¤Q¸XO`Ńń„˛r0źm‹}B•¬ČÜd4;›ÉF˘^"fąPÔ: M–ä‘đ€´BłµTé„ě Aý2łáUE”¶Áő)|Ą‚Öb­{Ű´ž  ®0gžâá3H!Ţ$1«äúáOx®żśňÁĹ*ˇ 7· +PвUĂNźHDĂĎxßź°BĽ{Ęű!6ˇbÁ™šNĽˇČ"Që[–™%˙–˘Đť"=­Đ2—ý\2sLFj"n$’háńO·Zt«g›•Vt‰Ă2Ë´Ř>­5>ĆE /|‚ĄD4c7dDËzn…®íŻ˙]ţ˘'¨đĹ–´”dmÂkOSŢj+?ĺÚMÂs©}šAĘŚÜÓ'FPíQŇt ú†ŘOŰUŠ´#´.·ëT 6˝yíÓ'.tňŻđŇx:Ž@4ž|“#_—ŘČl"ĂnšáV|Ëp€)p´đjś1bç\˛dX°…Ío>{Vsż×;V3§?·Ěy¨´`Çś7[ňL°•„Ë+ÖřU|‹_Öiäc۬g+ž]^ę:#®;D<ÚSOf¤ńkŢN…§Ęşˇţ@"ëq‹Gů.ďeăik_˝^ŞX­‹Ř¶uf0Ä=÷+Y+Ú%Ł\Ó%B™â±^‚IĽôp/Đc$akąÄ¬RZâÉlÓôan¨ôÓwh@Ąkk)w´liž\Ó%Fč%ů0 ‚2×s´ČaË^†ĎФ.tŮ'ă‰ĺÂO˝šß<2ł+3Ý]GńťŮćéA>č'Lo7ś“&©®é3iű…—ĺšř·`ËC^ů–˘VŚVŐt‡¨Ý°ł +ҬĄDi5Lä_2hißĹxýˇĎ*ořqr?ţŰ?1gśđžD,ž˘7Šň3ÜĂÁ˛Śŕ!J´kd†Sëů׫~·ĘEŽLoÜľěÁxď™Ä%Äh…¤¸Ë‘Ę”\úNč¶„1XP,WÁm´‡ĺ›ĘŹżą•Ѳ˛“55cďý„$§)ţ›0RG­?a~SÇ3ěxŠm‰1@ŻŽ¶×y\CX¦;5RÄÜK±U »kĺĎ4hl~Őäßž ± ééîic–ôˇ¸çą×©ÂĎÓE“2µ§]) +,ËEZŰôŤ˙ZÇŤ Eŕ-^Çumă©zgŐa2ç +~Ż>–ěěbp‡ĄdĘ^,oŚĆ|,2@˛ó5ă«0ďŃ7ŘĄ)ÓDMשţĺKl5˝}íśGčë9˙ĆmÜéĎĚ­2Wˇ4ľL­qăĘĆ bFŞÓ3'M/5TŤ‰ŕF·µŢߎ6hŹ|…ÇĹw>ÔëˇBU@Zî +ŽĐĂĚ«ś¦BĘť‡L”`‚%ŚM÷¬Äfh˙k˙­i㇜‰e8ęőňÁŮb â­-źĹÍ…S%˙­B$sŠŘëó-5—\<÷RĽţĺoa)ß?o/ĽG­ţËQ›‹†ěščÜJm‘‰‚ăx"Ŕŕ<Ő^·2đîţ}7‰çS$R <‚-±î•¸Ř);yݤ÷Réw›ÇJ|vá×7z}Ô˝˘2®_8„Ňď˙’"ŹÁżÚĄ °‡Bq˝·ŻB“Hąd^Ąg'ńřŮŘó±ö0÷†ú.Ë´‡i`žülljZăy˶#,YgďÇź0•c ţ_k¤żiZ‰ľ©˛Éł‘ééźXtÇ˙cŚÄLłü]ÍőŠ=U»ŽÎá#@UEpS˙ăůç¶üř_˙Y÷ţç‘ţOăRëŹůż+PŽĺ"ďů-˝`|„Bíř‡«~ŻUăĆŹIdľ#ń‘ŹžÝĎ×)Ă=9u~úăk čXĎ/Ëa öńůjéśßsĐ®ţţs»f?÷u}Jłç/;âřy~;ǽVTÝkůňTl–2żţż×€š®áąö°Đ ”Óé„Xćů‘1/&Źű +’–ŮŁV©zŰ÷_NLWřT÷ą˙źŹeÚJ T©öő@8>žÉK/čćë‡Ě^óOis<.lýůő%ň}ßź}€]Üx/z?ŞpńËuŐ€w ±ž»„álšŕßĘA|‡ Ľť?eľĎŁ:üC}˙kŢBÜŰňý]ʲ.±ŹKňyŇţ~R~Ż+â×7)(Ă—;ă8˙•Ńf^Ţ ÷Űß8¤@"gün®Ž‚ř mT *z/jßýůťůľź ’ęţeűáLü<•l^Mĺy2Ő´Ďß˙6Cąăóč-Ěë4íf°Ď÷ŮÁéžs±…€ ë÷kkĺ°ő/›Eŕ*Ççď]B°<{Ó¬-EÉxˇÚIő#Ž +;PVĘ’ÎÇX#KŘĘĘ_Y‚ćďÚßOđ,± lÝRň8׿´R[ŃđşÇÚTq­S\Ń]˙Š<¸ý+žŮ‚Y{żI§÷ 燄¶ű+ m??_‹Öü/ˇ*T`{|Ńf„ú»ojPs~ţŠ<[”Îy}rÓ ű× ŠîĄ^Ą÷Ô1$ó~ +˘Ď s€7|hßď¨důůśÁ.QáŹeßÓěó´ĚkLxŘÇb<»´{áĺsÄ·ýëîáĘ{OŃ»ĺݶůóú‰ syěŻ×Ť¬ćŮôLĘŻgŚňës3¦ný8©”«*)z tűYŃSýSěŮŻ7ř}¶K¶7:É­‘wŐ/ů˝‚ňŻů€°ű»¸ |ě6_Ś +ÄÜ› ŕľÎs^íţľąY™ŇYěďnÜ ¶Yżç÷Ůey^Âß~|9@Şíú(Ą¶ĺă^ĆË2ŹÇÚďŻň·YEŇ5üHŘŐç‚)U +ňWEČ×›¬?ż“ ¸çĂ˙VAe5Ëż ě˝ßßŢűđ÷ÖBŠ0ż<"KúxŻů#™đlj妾_ŻCQßů¶¬ţN˝őÚß“x˙üřr^Bď˙řvÖńué-•těO°“ţ]űĽ8µ˙Ę Ł·ĄÝ3 sóË›ţţó}˙DXAěŐĚŨ˙ň_˙éčOíüżżČľüřßë:K‚T˙ó/˙gÎŇ÷cPJ>őďµäÍ·i’?• ŮýńrŔŹů qo_NŽ{wřôd¨ľYč°jĎÄmpňźčBmňłk™Ż,Ôë¦Í¤?;Ś +ěµý;F{â€ësH‰ź_nş˙Žď·Ü~GĚ ¤čă “¦|6cřŚ?ÁíeN§}>4ć¸7żZ§îËÚ©N~ĺÓg Mż¬Żo›˛ÇjlłMżąĚ,zw}7kůńZső´×ž…śęŤ¬ĄEŰWäŇ2(őyĄÔXúw­˙|Ýâ̢Š1w›±â»Ą“CýbÍťżo-łó®ŤçőĚüIŰăc'ŰĎŻô…Ő­"Ćţcß áő«…Ôç|^Ý|WĐ:_±sŁĚä ›ß×SĄ÷ýůX篵É3ŁÝŹwľH“~Ő?Żĺ"lĄöń—ŢŢ˙v×fMŞÂż™Z+ëĎ`kfTżÄ^˙0ü]‘ýôłŽČ?*Wü>W]÷“`=«čĽ>‰{ěń‚ô®âMý˘ă­@UĚţď™ěżĹĄĽ†[Éó­ŰW1ôť­ÚڵÇéNWĄé?m׼-˙u-ăţ"WNż–GńSË+?đV^Ŕn6fQă,LýB ĂM‹´WŽÝ`§Ň„µz3}šŚŹ]I$Χ·§L}ĚňÁ'PŢÖP?ŃkJg㬀yUÂ<>b’Ąź_•Ű&zÝ÷™tu'ÄŽXaÎúg9ÜA'ĎŮ]Hc [rÝŁÂYGźĺ?ŔOµ2p…1ű“^l_ů8éłĆpW.± ‹z«oŘ'¶ď´éÍçĂ>ií×{xň9$+ĺ—gOŐŚbű8~ď×ĺĚó3;×gńŢ’ůŚÝ;[ŃD‰W|—;ľ˙ĺuŃW._2^:…Ů< B·”K«% ¤ýzźł‚Ž­F/¨śâýý5sg-ţŞM±]lĚW¸„ă,ńS×é\1!Ĺ\UŔůżŐ†+{lo.O®ýäUf˛~-©ę÷=§,ÁşšŠZ\Ó*îIŔ:úŮĺß«„ţ‰Sţ{Ů…˙¨’¨×jďúćđŐedz Ďrqí»±źâÇ]nm{óB[·˙ň" ô˝QÄÜÜRy€ů‚źÚ‰BŘů^4{ŕ;í…=ű®ĄHđäÜ* Ű'Şôĺx±żUâ«Ú˘1ňř2Üď_bě×2ř{Ű–O֪쓇ţV—˙ĄHńUŐŠXńW­NWü­5řëw?-óŻ´ýéŰw=Ž8úőÖ#±c˙„5yôç=3‚Ď‘yţö)ĺĆŠî_Č€Oů6¶x˙*4· źż~—Ú"Žúť ÇÚ__‰0V·(ÍY|?•Yĺ·˛ŕźž_A{µ+ľ®TĂ~=¤oi0ĆöôqE\§~üYĹ,Ń2ÜŽ„ÎÇżqĚµŞŤň}yĆg„“ă«ĚWťß·łç†#ŃŢ~ÍafŢfđ0<đ]íüŞŻ™xď†mů5đlQą™‰×†ŻÔŻ•ňĘóľżS2GôÍŢç ýî6Ôř4#˛ľ“®† +ús:Ł ţKŁ żßČ2×ßľ Ťö˙č­}ľôqľĄëúŐ/xŽŃoeŕ~Iô($Ľ‰ÍďOšů]şGöňD#sÁÚ­7?›Ś§ëíźü`‰–őńICĎŻş^^٧éň[ąŁ_*AAvľĄ0.Ú‚óă„—Ż‚ í'<ě?¨böć=¦íÁwťqěăë«;O™Š÷/˝‹ve˙x3ĺö©EÁě~?ۆ;ă+ń‹čěłAfě #6+w9ă%Ă3žM›:°×)žÇŢůśŢČ’Ż×§_őŹ’?ôtż˙Wöů÷ë?ÝKG'X–áßhTZµfäŤ^•Ă^źęďű0%ßňď>©ň•%c_÷·I^Žý ńęőT“ÉŘ-oÁŚPh{Š÷¸ŢsćźňýXBkşšŮ–„†çéŁďµäŔżńU–nÔR2,ÂłŞoź2aSćx›#× FĐ„/d,Úú¦} ţ?Śö˶Î:žş=‚Ý{|ñÄŔ<żţĂ5źśßX†8¨×˝ă# +Y^Řó)@ă͸ĺBńî·PMĎ%—(,lJŰX˘Đ ¦kżľI,„śĆ•·ů\G¦Ç–Đ8?ąHÇ+¶!ĚŮę^-*ő2˛(U ßPĆŽĎžźs(Ű7J¬÷Ź9ŔH`»ˇG?źç˘ d’ ď3Ë%Ă·šP cVŔ˝Ä[%&ś öŘÝz…HÍAŻ×á +K´ř$Řó-ŃX#ÓJ0}Ařo~ř˘ +– …ŐŚň4PŤ3Ťź˝$ľü¶ă{˝BÜ÷íŔŰź]HřvcÖë m#C¦ź+h÷:ŃUŻ3şŤ˘PCˇĺ —ËĆá ”;]e2ŕŐ ß‰+ď‚Îý‡3CBąoń“÷B¤ą“1™ŕľ¤Ý`č|ŘKŁY7¨î‘ ¸ =çĎ Ú4¨h ,‚ĄL'ĺ@nŞÜmŹŰ$˛1úPÚéW_¦bJ`9&삼ÂĂw=/{†ůŞ);G¨Ű@éŇćëÉ”¦i^śŚ8–P#„ć|Ć“·čÁ÷ři%ü`§kZŁG@{á~˝Á+gwîe÷—ťMe%ä*¶îG–v®@pĎwŹňăŹ×o_ťˇ˙”™„˙ĺ?4(†)ßb<ÖŁüZěĐhŤ˝˛iÁ,amŻ@ÍÍôťč¦a>±8¦÷ÚüŢxĺTÄÖAr4b{qHŔÄÔ ¸úJß16ÇĚŹ<«AÇö{Ý u3B,1k-ѲÇtń%€ć8˛ţöéŚQělTköç^Ńąť€µ.ÔÂÖóő\);˘ÖkĎ˝jl3†5—8Ž5ćç‡#pl˙&˝|îĺuPŢ\Ąa†^#1ÂB‹ŐésŻ<6ź‹ĚÖň\e3ű“k[¦\¶UPÇ»ŮŕşPĘ\7cTďPáˇ]ýü"SŘ%ݵľÇďĺZtôÚó&1őË}źŰó=¨ÝŽĎk´dą˘z:7˘ öóhG(>oú·úöăĄF”ýs!ššď˝~/ß`Ź>«ř|^˘„gágx–`GCäܰ±4äěź%Ë×ÓűjX—Ćsýú‹~ž~I]aűőˇčźĂqsúW/Čl{îwÁu ¬ÖŻçÚčĎ·ý˝R4qăó&˝Y$»ŮG| ď×_„9 ‡Q~QË0ćúŻľ=ĘöďóŃŻjß§čbş˝ďhˇź’ýs\ÇV#żCA5…áÜmáłg÷(ź~ÎóÁąţŢ+ŕ ęĎ˝N:YĘźÍ\ĹxÔłŽű+X\?oG#ú÷çąÉíĂąî[űjżpű\źˇÚ÷1C‹ôőłÉ,90x~ŢaO ·ŕÂ{vP;#ŰýýU+ äűi[Ó‰ŢßďE­n5'8ĎŹ%;Ž•ëzvŇ”’ĎţŮAňJąőřo×?°ćż˙)›?Ű”\SË"MşĎŹSʏ??îďµĘţľ?6PEłĎÇ—›-ůÚ^×//Âh?ůóó=ŮZş’Šcž€ě”#äRťq¬6ކ÷Ŕ ?yşgŞVŹ«±q÷»E·ţłS N]űçü« lżZRmÂ#â{ĎQJ›ď0‰¸ľKĆÎnćçÜ1ň|…ůĄeÖç˝—ü(´»ďN«Žőë´9üţY‡ë˝Yöţz>=źťâ^ʰ×ÜŰŹ­9Ůżď ťfrM׿¶fě”;ڦ_«P·ľV˘‡†' †íăł~u×iŮІüśl}”˝˝§ío•G‰€Ł?żŰs˝ż;©V(rľď5>ů·+˘FÓľ­ş%@Ď šI,ĎöńF>ć¬ăüş⥯Tŕ±×he‰:ůý}Úäď>śĎućÂżß]ŐC𤮻~(9ŽŻwx‡[ńóU!?śÎSo…YÁ‘űĺdt›ď÷ÂYtÜ_(őçcř¤j_›LŠôí‡ţV{ţţµj 6é8ľ¶â‚Yî+ŕ wÇţn2ÉÍČ#ŽŻ ‹ĽÂőWLXÉÍ/‘JĐXÇç/rĶ_=~$Z@‚žz§?ŰWěä^ߏţ[U/K««F~tyO†¨‡­â}Ó)á˘ů-¬2ű÷‹Ŕ(ÖďÇĘľUáľYjq÷ő9-ÓÝżDVí_ż›ů˝Y®íű^âÖí AcÇŤµŮV¸ű~Ľ/č·ií |˛=4p_ňś_;(â*÷\ţ źQą˙ôüżŮ€[˙ Ę¸üř/˙Q©×˙6žg8tzSf€q +ţřo˙dďuĺ2e˝˝J®ş4­•ŻEżŃCps[IµˇS +´G«f·˘ů¸Ö˘Ůţ"Ý«mÍß»©yrUW*7 ˙XˇIM•˘Ł#´˝÷Âřhp.RđűG +ٸŔÝęđöźňugóńe–żC }O&CÜGt‡ .?%zdý>ĘLë’˙oŠîL‘1•­TźĎ-äS!>6ä}i÷2±gZeßds$ĐUoű¬C +¶Đ*Ĺeŕ9ŻęÄÓ¶ĄM˘NŰU–‹KK)"Ě +úžţR;´CŠ*ÁLŹ’ţ¸:ľrł—‡@‚ +źZE-•>aÁx‘+lń®É˝ťę …ýL2 ҆€ô^î9NŽÓęŽFAÉJ07¦^1‰9!­ő•ĐűŽË„+fI9_–”řÔĚt”„ [6ŘÓ> +µ‘8!ž+ç‰}tĽelřÚ«s•2éň±íÇ…6BmÝčŞ*ń|(+0 Ű1– Ŕ]×Ő 8®çëů _J™{ü)}Rdlýzž‰˘ń‚!V r ©Ş‚ ý¶ů›Ł®0ÂÓŽ%Úi.YŔ|ňłGŘrťł¶şŤŻ‘NşŠ$s>ţwBĆŰ‘{QÝbg± żÓvś¬,‰¶ˇ8ˇÝĎČ€¨ +kŰZ˘pkŘS¬ĐS(tŁv +ŐĎń=óŕăüŽŕgřsR]ďd÷7Q»7čÇb×2ôcR„.čluĎç­$Ţ„A0 Ą -ź˙űT÷XH9xwÄaÇĚňŚĽ7ú”v;´0a%ĺáÚS65Ök/Q%p%żâ|ĘÓPDĘÇa®ŇMRuËÖY{V[‚<°:9c#TtçĽ=®&W< ÔzéĘíµŠţŇ–óqhQć»­8źŚ’Ńń†»=ńôćÖĂ/ m7õi!ťĄ Ě`č Öľ'Z—żĹë[T)0űm¬ŘŃÍçşôcÎ- ×1Nş3QF8ÎIë¦FUL8OŻň`ks퉠­şöšvA;*Ô9Ę »6[ęÓaŕcP×”zÇ^č]¶űYˇ›ĄôŰÎÇĽY‹0—ŕµ&ÎN†$‰ÍřŐ7Ő® —¦A•„őüń'Öoˇ`ůwö?˘&ˇZBYü˛÷Ď}ÉoŰŮŹŁ$ö&c{pŘD¤›Ŕi-GČ„b+˝ťr•ăź`Žî{–śÓ›(ŽĽň•ćŽůűçmâçŮŇü¸¶×YB;- ă Ç>ŃNBj|żÎ2mßýčU˘G¶Ľ‘+vŔé,ĹÔ„ë^{†9ukzí‘é,»˝…űČ6•¨‹Ń +Ä3ť%‘ń0iŮŹ˘ňH[ ›NgIŞĘ1~ö>Ů@”}‡Řt–ryłMq–fÉÚrÔyŤô’ +˛ÁĹ‘kÉ…Ý{ áhĆ/hŹ·ÄŽ§Ď:ŐW¦·Ô{ Ćăťś|Dz}ĽĄs?ďYů=©y5ÔöŻłDŇr7ş/ÓT /ŁhŠP}{ťĺŤĄ÷¨–“j:Ç5Ro‡yjkęç2‹Ś­OLyůă0Ăń}źŻĂÄuW˝Ą憊míW‹Ătě@†‘}ĽŘ`Śě˝üe7Ł5`Ýž÷Ü#ŔÇ<ŘÇ”ĺŢý˝]ÓžjK áßú˝ţRżŹô9Ü-D†ľăő—ťŠQŽŰô—Ną°gíô—›Ę .P÷Ň%¸ľ”*w)!÷]żf×° ÷ĺü¸KH6›ąnŐ ’âŤă¤¶ŹżĽxâ+~W+Rćt»´ŹżÄóŽč3KŐ…0ąďíő—Ŕs™$é=ŕŢńw{ľÄ*â/Á}řÚ3ţ2Şt¦X +n6ýĺS—q–z6†™4˛KmÂGfŕdI· 1]Ł\ąK„cúKĽ­0Őb˝ Ş ş·ëő—,ôJ^µĘC8~•·Sţ’D]„×_b)ö¤K1}N‰Kúşg•ĺxT kźNą$PŘË_6ⵚŇű6ý%ĚžŔé±x¤ń/­“<®ü%d+5Ž*Q7n—ëżŻŹż¤)-köIĄÉ{‡`ýřË+níĽ‰uX„V˘<ĺ.K–cŘđ*uw]şHť>K<†1í±4f[ +±ŞµčKË_žŃK«ťó=ö$qŠ}[źEf|nz“ąÎH«4=G˝=Žą'J€±şÎÂq•ì $|ÖÁ˘Ô!ĽcvŕŘŮ[3ą:n0Y¤ö°ÚgŞ© l•—śj 9Íęj”}‰#ĺ‹zP™ăG¤BăAw.íż˙46vV)J6 dřHÁGw—éÚËҡMA­»dóeɰt­”ę‹÷jůYĄŠóxĘ“fMFb4ąó6˝" 7É/EiRnXĹęöoişˇ±¸Ă‘iËŁpVöÔ”P]ˇZRLé×ßđ~.„ď…ěX[dEŤăř`[Ĺ#“ʶ…Ő\S:*Vi«¶CŹËčţ…Ë•ŘiA¨Ť•ügŰÂąŽßU‘šňş•Ť7=•Ř|›—A ŠÚ’,ďX’iÍhĄáżźwş3M–nŢI¦GQ«©Uµ +úŚp¦ŻăC›Gii˘Ű,`ú +A˘vÄ„ęZŔ¶e>6C ^aH.÷Â1öËŽÁ±Ä˝­:zÄ”łÇ…ŽĐZ-kt‹ć +Ľźđ˙·c!K·`\?ć’[Űź›e۱·aůT˙ëĽN%ňÂرM;š5łĂW d.q N2Í^ň©ż‘µŕ&ČÁÂ>KKštÓŐćSťŃéYŔ z±äl4ŁAÔ;÷‡F„·Őö˛M@ľĆń>łşĘ×qŽj“*:Eˇ{+­uŻc[§ÜŢ8ÖŞ‹ĚčGžRsˇűÝSÔ˛cgÜĘ/ă5çž" )»ťĐ ™-3~S»§G|YďŻRü-tŤxnGN1¶ňř ęĂÍŔč±M±L¤÷`g¬}°˝ę#xZ±qhk|Ń. RZFż3.ozdLk!k’šË}đŠ–Iˇr“gęJm‰ŚĆÇLŕşLi-†­N𦫠ǿFC®ŕSř8‰: [y’ö^;ĄM¬Ţ÷ĽUqłËĄIMćaŐZj׼—]-O,>ăLJ|tO–Ŕ] +aĆ’_ę™~ĂĚMČĺa̰Ť…tŤ_§d{®s ÔXö]ĚŰ1r&n½?‹d¨îq'[˛…va>ůĘZ,d<ďé×G¦:ŘÖ‡ŕoÉpŽ0†Ž‘۵ĹÂŰ<~é©Äݏă'@únňzľÓ„˘žćźđZżýE‚ę —™ť.lďĎĘďHSÁšóm#WŐk#„/†¤řť*€%śĄ9kIî„uÁhEJ,ω¬t|ľŤňiůCb{¸îÉao•ÚäÂŻ9¶śĹÝ#ö ŔY ÂČx0—6·Ŕ>ĺ,!{:Ňô5aOŽířťĂ˘vBJűăG*yaúžÝÉFΩݲ†• Ü)NSŁVݧ`((Ýë¸z$Ĺw“ËÄ7ÚôĽw4IŔy—áóšIp♌;4 +?2Oź~zL Ń‘±Ś¸Cb+Őú©›Â) $ö-fmĘĽě°ç\öZřbÎL@H¶ÝĺK¨ýíţx22zÚ슭FމQŚăˇ’•ęN…ŤľeNQŠšS8CšŤęţ1 DŮó÷ŐR*ÇĽGCxc®v„ěLyŹkş5ąhřŢýqjĆNY¨ Í×S]CĹŮ54őşŇŃš+†!ŚŞ™]±‡s8ľ‘ź¬űĽŃGńDÇs~ÇąYYc>Ľă†ŕŽăo˛gđeżž[Éşi đvquâAHąµY•‚e{ü!đăHä5µEÖ(Ü“\ßĘŮmˇ«F~˝×î:茌ý}»‹šTTÝMw8ţ(  đzů]+~ęŁéÝÝU¨¬nąŔô*5©âß–RĎRuáłç ŕ]3ąŚbär‡őĺˇ×ąE&đľ-‡xşC$Z+bظÍvŮ0ßmfĂăë‘Lľ 4ÔŽCţńFÓĄ +‰gÔ›ęq‡QçjŹmÖÍ˝ç;čTe5hĐ&ŽĽHÔą–ÜL ŰD„M +§Íýxź®Ü´+Š'*Ä …ýĽVgB•{+„Ü8]ăNLZK˘Ř0<Űđ'J–x/%m=ďĄ'}]A`?ţp ý9a¶óaÍíô˛‰©§ťB@FręŘĚ[ŃE F“đ6w¨ÄŞzšňZ2~ú÷Y˘öřCĚŘ{ ¤Ëô‡PîČn%«ęËŚśń–­źĎ+Ś×8+„zČýv>Wińl ·ža§Źđ­ŽÇËS$^Ý­´il/‡‰ôĺôHę©'Tkő'śÖL÷‚ŹĂM±EšuBú6 Ců†wÍ3r·cĘ*jň-*!})(ęEqTěŹčLŤ}i’Oˇ«e îü“ľÝ9vˆťé~<đoMQS~K ®BŹ=Ő9}÷Ô&Ći¶ĂiDDŞ”gđGÔ&†Î·Rńń‹A.7Ěü¨µ§ĎY5hđ¶Đ)(<MžH†—ľÁ)UADřîG«BćË5š č‘Ô»JaUS`˝{!G÷ă Z W¶=äjťč`§BF B‚¸uźrTJ,vľ¸“EዪÜwfí$9l]ť 2Ţh$zÚ\µ7©ŕń˛óéăŻHâ¨cż˘đ×®ĘWĆCŕŐ§&»Î[! +ه—ľ'‚>ˇwoË3-¨«kRoă»Svźćň(•2KôWÇnJݶQť˘×ŐŁëRB\ÔâN +gĺF$íÜĽůó~ä+»p)¬o$íŇĎz˝núŔĄů7Vt,wă=tŇĐóÓ”věž(ĂÔ(°ÜÉč–kľf˙F¦ľîąÝH3óÇŚźrq€ =鮢żĹśëós/EÇ{<Ă5gťd1ËߢäŘpq>›†E™[9¸ăs‘ÜěµÁ`ÁJJíÁ˝„ß6´öÇüXN’Öó-ę{ö;7e»č{r +µ+÷ľ¦„F=R'WPrb 0ö‘ů†RPíPo‹*î5eTĽçUAëS_rünĚř•ŹN®~fű] ńŞ«c¬c‰í}\¨ž ‡Ö˛*:Íüű);â_aĄĎ'ŞŮňž9˘.Ň"ś&)7ř§iŚ”çNĘ7¶s"Ł]äG˛eźŃ'ASěm)J‘Ú˝&±–Z?z{tŐym1ڍv¸‚{›Ą·}ŞŢq€uo(0=™uŢ‹PFŁÚ9+QŠ˝dw-űm†—ňArŘŘVSě]€˝ĎłMm(J5XŹÎ"C*Ř6¸Ű~ĚxnŞ8Żžr0ŤiSëk©“náÜ»„>¨IWs,ň.1ę-Ä÷v?qď[Ń +ĘyĎÉŘ·XëW{Ś;ńřOäëóC\* őUNbCů˘ ó<“Ŕĺ‚Ď\Óhů#—ő—S˝UŐtě#ýő(˙l4* •é™ 'ŢĐ×GźŹŕÔľf0¦ęv㓳×9ťáu¨:ů š«§ÎÁ ĘÍ›Ľ0Gây_*AŠÄĺUiŐż†!Ö*…z’.LFiRj1éBI ×ů6$E×ä×ebtZ7šÓŰg „Ľ•§;]‘ †é1ÎްÝcż%?eeşOÓľeĂŤďk=ąe«đČkň€T>›Ű ‚!;«ŮQ¨řľĐ*ŁD¸¨ßműĚŠhÓEB)Ő˛˙OŘţóN=vÝ0 tň=30ZÓŽ•bĎÓk÷žÜyŹW‰”ż÷) j!ž ŕo¨xjň˛ŠŮKéÇ;4آK4NőxN˘Ôýq4%ĆŁ^)¨uˇzH¤ö<§o¤űťJő_q ň5 ¦o†lÝĚ Íęç;ľžćđľĚtcݱ€ń…§ÖčŞ üŠ=kĆř¦ń„#”l:ES¬h‰nW(}\!{=.˛¤U<żťÎq‘2Sp‡űe2ۡi&Ń­;ÁŃńrwĺŔKźęÔÂ1ý$`°Ç˘ľRŧô^®đLučyą•žřŘK§ću…cüäµpŽr´ŁÇ ×sşBőݱŔ8E GÓśRśs† +ť“omńs^§«6GąB#î&¤uÜó +AloÔ'5WËP +ęÔTꀠ¤Ô?µÍâhBťt5ö¸Â3Ł“WHĘ\fŘŚkŻyÉ;q'˝řu‚Ç4D­QĘ©v ÷´˝˝ĄjR†bŚHÖŠŚ“ĎjĂMŻżh“5Ťă@~ĽÂvśŹäç#řY§˝Ř§'ŢVSµsU—F”DcJ$˙úxűŁ“F†oËÔ®0JťEŘpÎLĆťĆëîŞ<ËSĎE?~±Ő—y§U|)WO\ěu];}¶©mf…ôžŇ•!°yńxלbú˛¬ĚĚ,/’Hľ«ŕĹúÄ*š ˝Ę5 vô™WňăÓ‡Ť±Q„b 7E–ˇ= b­ŢĹňń…M?UĽżÓŰ( ­öW_+cbÍ2rTĐŮ(I… áô„˙ĐeÍWżLd㎙” +ăZ +©+›˝őńCňEď)¬6x;´+łHż OÖ„.çiĂofwf ŘUyŕŐŹľ˙aîyŻh'ë(lřńźŹđż¦Ŕ ë©QuăĄč–\öS÷Ä>:ť PaŽ[BŰÄ ‰rŐě­ďá8ÔÓ7<­j‘UŕDĹź©"Ú!<, t×5IŻhw€†a[ě·ń-ć’%٨ežÔkÍ?!ťď鏚‹zŤŔW®cócˇľŁŕuD-Źł¦bíüa™şőëlAxnĄJ1,š[µ(;/f ežµ +Ćű„:řkúĐăgi Ö’-z°Ăžî(5.›ľP–tŁÔ™k+φ*ÍUacź‹„ą‡X^m^ćZJZńş¶ůW#S0Lšm¦nҲ2"ň\e©ŘđQN Ý‘QĎp€(«Äé*!T!Ëř˛Ëú9—Ś(OÍpd Ú*®Kđ–ŕúÚÖžJ`îŽH•ô‘ ›J«h+Ş @đ~ Dx,c\˝~ÎY0gCí1öŮ46™ßi qçž čy®0rŚouĄfżut:>ě†GoíE3+yAú  Ě­_y‡@úăâ´ +çŮg!0ţíž!*őB„® č=Ą1 2¬2qeşŕů˘0PIhÓEXRž 1&ŇŚlŤŮľ˝™mȬI=R9ŻcÜ&\€ż+1x‰ 8‰´»â;Ą7Błji3§;¶,°nŞ,GĂś§ëR+Ć©>AĆ6ŮÍ<[ş +ݤË9­ĺ}¬…>ŢUĺ‘aíÇiŠ­µäHŕŻVWE‰ˇ.#·ÚĎU`{Ľeű(çnł|­.t_ŤRQÎ˙ “zl×\r¤ż˛—𴤩w­ĘĚ3Ŕ˘}®Ă˛/ź^„ ŠŇ$őrP–8ŘŠű,eƧCÎ}>8ČŚ“úrę˘`ţx٦˛:….5´»Ď°âA"7ě2řęó!–ę¦n˛¬ËKžĎ·RŰ»i¸Ü­’€ßkýĺTO|`ŤÄ|”ŕŽ«üuşC“GÄĆăü¦ö;ňWóĺŰšHvčř@˝ö-Z;ĺ‡>±hĆĂ‚±ÝĎćGt¸kˇ‰¬ŔX4Úk a‰z…Ţ:ýť ß@á®kzCŤUßo-xŹjܢx~&ô¡uKÉa|ĐÇb…_ÜŐ ŕ3B:M;ˇe;%ănR´sĚ (űx!;ˇNŢa”sW™*"ßćô3<0}!öęC$¶–Aky߯͢j8Ť0稉8}Â|†­˛#°¦J ޵ř^ŹG±Í>·çÄ +Y› v+űJaGYQ ™¬weÁÔ4Űôb{ŔT…YÖí1B—şŃť©ő¦ţřÂSsńXĂH<=ÂĄ¬•2í_ŘĆç—2‘b›aÜ–#űađlŞęÜéyd ¸™Př(©m†sÓ—ĐúŰ–y«ńv‡‚]Őż«µ@}ıŰ=_ÎŰ4ă dJcçý8f-{¨b –ş•ÔO*Yě`ó;„€`>°ńܢŤaĘ÷ąd_3Čá¶8ąL.ŽëOw*ş¦yŢŻD 8RĽKą©ü Ă$Ť±můÜÍ6ŇF?üĐČ@búVżE·XyEA;ôÖH?ßűëßIĐĆťGy•…ę_dµěLž{üqě&°ĘVNn8 +¨ÇmM áKDOń®S•nĽ…ćÇÂm$źďŚ@;Áş‰;˛šŹĎ9ŚYrŢŞ~-š…ȵ$nA~CXjÄ)-}\.ZA·‰ş‰:iÁ `Z¶=źňôćÔ\Şö,IŻ<ŽbşiÍ5‚»–ü`ůDÉxŢio|÷&¶Öi-,” úČđ×JÉ7¸ç“çi˝*#‘ŁmÔnÎZAĽ&h9ZŐWh¸)Ícĺžźo‡ZÂăUüĆŁ=5ˇ¤˛ňÁŮď¸LÍĄ÷éĎЬjđĹ ß?ó颿:ź ©Ç˛¶öxžSཏgFyˇúQ‘3tźolĽuţäń ďž6ܦ«|¤Ô šWśąÎöÄڶfC@0Ź_†•‹ŞřÇ®kâO|ĎçÖ&»`$đ/ä¬fŽGśIâ­Łć ĺü]@gZ$wń jaÓÜFi +Ĺ;©#eŠrK=G#| ?ß?fIhŁ.`‰¤ŠŽú‚˙H5pŤą0Ů·¦J‹đăiŢĂđ*™9Zìx/<ăEŐ>Ýýš+ş# =–čd6ŐŻ\-Ű ZH…âäkě!Ě»đ0Ü輓¸ŹÝA¤EąüŔt)€Ú•s"đjiĚ©§şŽĐwî&'Oľš¤1ľóáđ󭸄 ť ü”ŢĽžńÍiäBK^3č<Ş.ʦľjžÍ†h#ÂöŞ9¤Ć#4»Uě’㝉C7Wa„ë¤C0"Ć®©»Z%‚$š~_öť!r‹I˛$ _ĘáŤU‰ĆY˛ĄÔŽç˝ôîě®™5•5Ç·"Š·¦l}ęëEt7¶=ugięžF’ćf¸É,GGČ4Žý +Ąv狞)ÍäÓ(B×­°¸ď¨ętóő(qź[č¦Ću®b![ÖůzĆŠßÁé~ÝŠ˙5—ŕüşyń‰á?Ń–¤ţ,ĺžO5©¶°âç¸Đ9âë‘XŹ(áPMžK\éF”Ętź8:ÂWTx뛯(%pTž“’íŚf`ÔgvĽŐMŹ9wîĎÝó"-ŮIÚ‰ătEÎ,‘R·PŞŤšq)ö:ůÄĆŞĹ(AX;ľNX‘1]¬’›¶ÍČ«öú'`aW–`ŕ˶PAw¸ÚQ°śíš‡«GRNeęž©kfŐĺsň ă1=ĄřNłĐ†*{puˇ±Â™Ô S/Ô‚ +gmBşpżĂÖésÎ=#ĐS2\fâ=Ůzśŕ> ŁÖzĚ(ŚÍ¦Ĺ¶+°´ô)°Ü.g=Ömă"·(Ý{Qs…=mësQCćÄaw5Ă0‹9\8Żż†#|‘tö*˘‡S±E˘dŢ +bOŤó)@©Öäb/3Fk&ŕo! <ÂqkÖ?$lµ„_€ş82ËDÉźaű¶Ě_c +˘c»ß~ünúUŚŰ[›‹ Ž ›H@ŘJÚqBÍěϡ¤]pÇş‡jhŘʱ‘ď'4/»Ĺ‚®hÖ‘‘V\žő!¶°$¶ŁĽÄiʇěOÄX9´ŢYrŰ?ňY9ĂŰ[3T6o"ŚwăcŽ#Yî°™ţ¸MĂËWäŕ‹¨§Ę'×L•ĆłBĂD.¶[yĚ®ô´Ť-–:v¶Ë\ĘýĽ0F4łśčuşí¨;A¨‚í–!o[Ľf9Ä–j쑊N–ÜŞ|"ú3ˇo8! ÂŤážCŮ»ŇÚ¸WĂtĹ=Ź3»Ĺ!˛ýę졫+;łUŁô·eËÁĽ«Łíő‘éděő̬R5[¸Čy“2{ăM+rî!ľK/E긗µ +k?ţH€Á=‡M‡‹0lZá čÇ2ű8Dńž9±#Ă ńvć*”ŽW]ĘF·Â’Ldú1 ń,}ĹŞ! ׌ňl{üĎm 4 +ĺŹ-·«ž÷6ý<’C‰Ét +¸ ‡l„ŽąBĚ€Z +Ô!üˇçiäőNL<Ź×„âqN+‚ŘĐŢçŞáض8K‘[ÚĐQž÷RCŰRĽŕhHýĘs_acXă·Ö™ ‹(Tn)ˇLO6ľďŘ9P”"Ą“Ć”<+D'Ď…07ńdÁ2ótUąCŃ`I˘˛ MíŹ;\đE˘5É ‚}‘úúDn]K·ę)YŁ ż[m0|ˇ·.MşQgzĹhÖ<­¶i–żŕ3¦1ʎbîÚ·gż_f„řş6Z±GbÖËÇ1ď¶ŕ˝¬Wř3ÉL›G+Ć(±ÜÜ‚á"+Źňš§řôc{Ć8÷xCŃúuđG·¦M†íÓĆ?č¨jů¶Ä‡ÄŢŃ*· 7éÁTűĂŕ,OŮ@®vˇdl®OSü¸§ű‘xÁ™™AĚqÓ­J,­ŚyKpÇ&µN{cUWsgy¬e:˙«Q!eÄáę„39hYbŹ +ÝŐ<ă Ă|›Ł\®żä)#Ń›NţPáąAÝT“·ŞŘ ş§Ž»)´ť…ó›n oŘ–’“iŃa›ĽRžEŃĎ‹haťÓGÔx´ŇcXžP ôßH·ŽřCżyÄ$ę s…ˇťËÄLňW-e-=›§§{Š4T`<­űŘčΰ_5źÝß÷Ŕ +‡,Ňá2]4—śT˘Đ÷üń'ĽÖLöL‡š 8B[:íš:t 9śż×˘h, Ť)„µ&gÉ•)˙´"¬đ—×zÚˇ)%lĆE3ź- FˇćžžŐÄ+…0±oi Äx ;Î=Aő˘ŞsDć—Eb‰fć)Uč›[Ň•˝Ő˛q'Íßa =ç>Űű¨´hÝ% CS_ę\J†ĆYą’0T$5čŃl +»C?·ŞŃ­ă­Ś§ÔëqŻ(¸ŢÚCÚ—3FliĂĂV^©ýdt.¸  Q[$©ݢ_bIË$?'ÄĘ…ŘŰčUdz-ŃćĘ!ó]Ç˝%ęZgLX×l‰ß0eáI?&Jň%˘ť—&„Ż\&í~gř®6wnuĹeîŚKYKa«XĽ)íńŚcgbž‘¨t$çÚČ·fr-Ně +vË ˙XNŢoIý¬zcž<ěÝó<“"Ť`Íiž÷3ě¶±äÄ&= ¸nA©ăp˘D‰ëZ§R“ •®Ńd wEzpUpĚ­BÉk‹ÁžŻs•Xµ§˙‡%wÄ~7Űwţf¸«; UtäXĽË*wâń™)aTë±P^&UYŮ,:á$„÷ŽŹx2M@ďŇ—<ŚúĘŻŃ,Vtjé:ó@;nĂjŰů<–ë:ă’×Úđf!ŚÇ®« Ŕ‡«$ÓCąđ˝/a׺ú:0Đ3ÔŃGµ÷]Ö@>ŽądI´|Ş)·>^ň)şîůGî×ţ +?Ř,S}· ćxB]ńßao˘”3đĂI¶'Ň y7á …ő‡>ë/'{¤€‘¬}ľôĚЧ–ł¶*c &2ök¦K¸@Ff΢¦rwšKÁ™47Ö2ˇÇ\BşÔÁMßÝĚ.sš”xĂ.´FŔ Žuˇ®ž”nż +˝é#$úY˘1Ń–Är‹?4×ÁIÂOďČÖęXu/űăá*©Ő­\ř*Ľtéq(Ôí¨4tgf«;ă•©oř6-†Q=>ÄAe­ŕ3÷ëČ,HÄçÔhÜ÷ň‡ĄšJšsB/.if ÇË´÷Ć;ÖB˙ěń‡ ÖGZňvXó­%a řnžŮ€đÖ}Zs} ’%há®§ óĹMÝŹ;‘}TáîÎż17·O7&—¦ĐÇô‡#(źgI…ăń + +J ˙·Ć2Š<íUŮ`Ő<ÁĄE·>VoO/_<çUÄĘ»xyVŹY•…3ÄAϧşcËm8ł”v®ČVnšů=ł|GEwĹ"=&_zżFąž›Ái)ÖÝq@Hj†řz™Ůŕ;Ł ýqd:_´¨Žé|3în˘ĚśyĎ…E´>»µ„‚¦ j–´ČkĂiĺ!˝U Żűă3Źk% ›zZO€š_c§ś&"ZuńĚţUZAP2:˛„ËZ#®şOżŠlé„eŮgBs „H˘KҶąęNiŹíqĽx_0îĺ®™Žś +y^xö 5[˘ż.5rîlÉşM;ŚSłÝoܱS 9·ÉčĘÂ׬ż\×{ŰŰtĐGřFĺďcÉvMŚŐ}:čÄš#ý˝–y*ÄJ EĘ:#mѱ} ˝z†±§V ť(uÂ3ä>Ç@MXd¦eY‘žg÷ę„]~HqnąŢÚůmc&ŚOv®î«×V—řD§‹’C"IqµŃv¨rÔ Ç-#,Č´b"ŮĐŻ-ˇć«UJŰéäěxeţwl ítâwJ9ăôTű©š›‰×Y_“0˛v +9y®fq°FŕH·;Ĺuúh üýľż^Çy7lűĽx sÎ=Çť/€Ŕ_쎄O˝Eťˇ ›* Ra˛¸2XRa1\퀚?v‚3wlAĄ›_łůć‘_·żă˙>żn)ăU:"1ÚďčäíI}Lfb-PPŚß ©§)ß,A.Ą|‡©ę ČkKř1S(ÎE†©/dŐ’şşŇ?.*űcöÚŚľ¦úĐŇę5ČžźŮf%î”…b^@ŘÖHďÁ3Ď{Aŕä1™•śxlU7ľNń…—”v>>?Áň¶bŤ?çSFÓ ŹĐŐaÇđřŤ-›U)ĘyúL­W‚ĘÉ÷1U+IŞ4ZVľ×^e/§ę…)\)â—dú‘­—sz˝v\;Ě´Öä2…‹v¨d zˇ‹ą¶i¸Î3<^ťÎYÜ%ákU‹šµD±Blý1 ťtÓŃ-ËšőĚnÚšŽBâ(ą­ÂR٦±/î”$50çUś%˙ů0 ×ôzÍ8OÇ88¦&„nvXô Wc}ă^=$!4yĚXb°Ľc ËŕöXrF@H…z«Ť¸T m83źëg ™ďâěŁa6±†Xa\Ǭž¦©g¶éő+ÉĽáxň{ÉÄθ€>Ń^KŽ%˘#Őg÷Ň`ŤoUż@‡.6¸qáá ôľfÂ÷ +Ů®%đČžžOKĐ ]WňŹ+ ćú¤cášžş”ö>6žçQĎE˙cxeŽwpŃňP +ČÎVop7!hř‹Cµ‹®†cKÍŰh|źC)临€Ą–ůŐĎ5¨@j­®ĂI¦ť+f—FE3c™ÔAÚ2:ś“e`Žę–XxŽMŇŢŰ™çŠ{o=Ŕ"Ŕ…qń˝Ţ ňŻNjF‘[MĆĹ:ˇ+F:{|±˝ěŽfȰqÚČŰł3.­•sKÎŞ­TŔ])O@:lX­4ýzYBŰĎhM’Gx„ ˇ¤*“ůè2<ű/šŔ¶=bAz¤4‹9ĐÎÖu=ń#™Ŕ®m»V1ŕ˙!í^rĄÇ±lAOĹ'p"E‰R»ş1•ś·ř­MŮ…ô€ŕ™Ś”3“¨ý\/µ ýÎŞŠéOÝŃ0Çćý +Q.\7`­LĄďŕt×íľŞhŹc0M™~ńQăşúŮ“%’Ą—ĺţ. iśÎŕÂ7řYý1ł1źuŐS%%µ€§W@E—ł÷ÝYh "hü˙i„¸eq´żŽ¬EŰ=´KA€]ĘŞFvö/Ť˘7kw>Ö_łďKÎůI°Â{#{zŢî﫱¦cz˙őë!7;ÎŘYŠDÖ;ë\ügŢžD`îr;ŮŇÁ…`EM’Ľ˝±¦,cî)cSĺŘ ć+˙cĘţ×­sl…nĂKuĂţgÔeV*'ş«éwy÷z‚ŘęG4;±Ď R.Ň=kő ÷Ű +Ť ú¤l/^îŁ>ËČ®Í*?ŘŁŢÔzÇŁ:Hń’ŽN{LsSO¤Iudîjŕ‰0ÁúµaůČ 6™W&}WáźUłĎł©ň몂üwíX.ś. 3ó®të†Ř«ÇsM5`#cV¬ÚËq±ŕŽť`ŤY®8ď„CmVđ•¸ńĆ„í«ýď…D||FŞN¦i©0•]b‡Jo“ŰFvGTHńĘ3÷0j‰”@Ő6ç,îť…´=1@ĺ13řúĽkKugÂş’Ç‹źPéȽЮŇX™[·ög'·&˝›í ă˝$ËsEŕŕŢő I j ľÝ›ł»"K:şÄÜ˙Ńľ §lF“ËܬkL7 Ş,kH|puUp2L ě%6Č6ÖiO+ ‘Ş7l!ĂŢXee1‚Žl­°čżâČ®ĺł2čAɶ<÷ťsEuÝĐkë…ćS$ŞkđiëP¨`¦´™)đŚÁžXFôč•îłĹő5«´ ě<ł‹đç«ú°I>Ţ8wÖ%%0ÖJUS +ŮYÁĹŁöe;š§ţUŮh=öU&1+ó‘QŘąS»ýúą•ď˝îë%ÉŚ)é•ĎÝ:?Š­# čgÂŢČé˝o´mŢýĄTIĄX+%áC4~ăÚ7DX%xm¸…&ŢIŇ1ó+Ł1CĄüůďł `µLŁR¬Ât ®łš)öS+đÂFGý,zU  ­ZrIŁ ýś×~ęRD„9Ň>_ýác tî·Ú‘›Ü}F’=H˙Ş ˘ŢXĹ?ěžęü +ź®žW¤?§îÝ˝yb%µăĆ:I„öÉWŰLĎč 9E0ś\[}úń«X‹w'S“+ö—vŰ%ěžQY´¬¬…ŢߑכܑhţFFśv,tk¨DĐŢ0´T›*W!şĎŁJ{Ź…ă(ŘzlŃÉ˙K©öŐ7‘˛ř."WnN®VŚżÎî|Ě߸€¸˘ |ňÍ{Ź/OŃ˝ăŘě?ó‡égÜo!öc‹mÍ!&b˙ wî?ô¶ř¨¶š5Ę“×őUU$ĄĆ_Ü˝0X÷}żĘŞ2”ô6 3bU‡đvÇ$#—0g‰mĘQGEᾏN¸7'ťO÷gSlb ~ Ś}»I&·ŞŰŮľęŁęŽ(Kěúl0˙Łxsm,=*·ť(ŔW0z¤±žý5ž,Ü…L6ß˝RŇđ}ÍáoŠTaÉFžűEU#b<űn7ë$‹ź·âĽÎŠ ą Pó,”ńź»P~WPh¸#RńÓţ€oĎg+)V„¶—}˘„7ó‡H&fńs¤QWşă‚°Ú´} óY…ń{ŽÝ’éQh>ź\ßĺű–÷úCÖŞ δ‚>ÎŚş0ĐŰnëÖY¸!KyÝ&Ó\ ň»­;¬^#ô?řĎđuRTKşĚ’€úđ“yĽňÖţ}çZśh¨%ţJ#p6˧ Ą¦Ű–Îbg™ç„­oy&Qü„˘Ô=Dş'LbÎxd~RŰÎrž°!OZť]…ô&żűů›­íţd†r:Ý“â—Ué®Té‰c§ž?łvd ěăÔ>W.ÁÁ·ęż,.ü¬ŁĐőÎ7ÍĹŽŞéđaíŮ{!§Ł´†’ç>몟ëOD1Fäx0;Ö㡠”ż…{ŃłˇąětĄ˛©¨g +^š;áů +<Şłí?}1`¦%şs™émgTV[JÖńA_$OűÎ/őW,ˇęčđ8žŮv +:óÖ |¶ď0 ű öKđJsé(„ě5mܱ››µk1T xvÔüČBŰ{O?…łv>J#[lŤÝiĽ(¤‡7ôúĄ2Ţ6–•Ę úô·ł¶¸ë5i§ąŮ|âníMbJč• ćźúç$śµw^©ě˘Źh­ĽĹe2^.yŹďťÉ  Ldë–LÖ©†RđHýqâcŻV>r­YôÚÇxQč®\ÓMúÄ:â—ˬ†áËk{†e˘u…đp'™aRľQŐČ«tš?ÂAFë{Żc)Úęmuí'$ŐYĚÁ^Á‘ä˛¸ĺˇ :Ië•}Źt×ýIŐ“k5ŞäÝS 7ĚŠÓ~R´ń~kŠÔ††«Ž¸wRŮúpGh_"@YaďÄiŻ«Rc ’÷Ý`’ÔÇľžş¤ÎrŘŕv˛|Ő°4ŘÝĽ~˝ňŘ$ĚDôVpx˝F’ÚŔDá(›Ô‚Ĺ0?QxED|‚§úą$5‘]^ĹiÉ’"öĘ~ű—‘ßCLĂb|EpDŕ]ď˘9 +]=g±Ép&ĺ6˝~J+­fŰŹPv†¦Ýë +]Q8:¶0»|¸jVČamK=¬?˘lĎäC˛So`ęîEZPRd! rîę(t3ݱr’ĹGě()3ę!Đ?ß™đ9ËÍiĘJ™Äw3ű‹”™6I[ń +Ť•xía é_őFŔ®tşĹzDĘ4SeZSKĂÁ–‹q§ tUë {žýxżŞ–Ęş;$j1âi>±OIµnٵ*wĆ\ŹfÔ¸ĽI@•B¶­Ť|fh‘¸+­ŔëÄčą  ů§ď&źr3e‹ ÚwÂ×KÚčçÎvŃ.+ĽF%L†$-Jaű +P’!yű•9"A!ŢÂě ăF˙$ŕ-é_j Tzż‘Ţf8×áÓŘŞ]™™Ű0ďLÂbŔ‹ß;e>ŃK4Üďw ĐźŠëĘÝ«Ą\Çwť{@¬Y¤Ż•ĺg‹Łć”B“â‘Řv7mdeĐBN«°;ř"­črU3ÇđR|ÖPőRří™Âä§~â´ĚěÉ#đŢ$Ăz»[8~·˛¨Ł/‘¨dŁýÁřiý®ą0@u$ÄM [AüĚ’ę3›,üž üBg {Š?Ć=ŇÉQa‡ęíşľô'đŘfE +…™qßußb>8÷×ëď Ěń6ÂFÖ2ďy´ń•µg"*÷ŕďŁ4–Qĺ­}×Y> +`"7Uä ­Â1´Ô⼎dő€§ë™ľ!O{†Š)¦Şáüĺô^®¶ą ë˘côűĚ{öĺšąY łeşP"5Č€N3ˇąt;§*ÍĚř}îŻëž±lYof6G=\‹+hŻ˝[@;KĐ|@g|˛Č‚a•žőm˘yĆ"ZyçŢ‚sŤ´CťŔŇúBK˝ 'f´B¬đ¨ů| NlĺŚt"WŔ[‡hî#H\ĘZ7ÉüyEđ}oZ‹dNŻÉr@Ńçş "ĹsaA”O:Â[˝ q3vĎěůÄ[°b÷Rô¤¸<x0tîđó©ĂéoFadµ÷źşJüwÔô@Ú°?3u¬vy=ĚH?÷”ýÇ埀ş“lněŐôs—u\ä‹ăQßh‚h°! sµţ•¦'N`g-AAZ z[Äç|é'§˘G.íŻŚ2©!äT#LR…WYHcżŹwłóăŽÓăŰJf9·ĐäMa–QŹĂ& čů=.•9ă˘Hý¨i:U3Łŕ/ˇ<ÔŁť¶‹SĘ•‹×‘Ż•őŞÜ{Ö/ZőŞ#5=ż¬%°UäŁ#÷Ýß›Ą );ąP†@n¨Ý󕤂t%ó7nϤv{›\w¦(ŰžŞ°o~“•չûyůE,„zŤ˝J÷ĎĘüuZîr˛1K(ýx$ž•lč„@I˙pv“ϧ˙ŐO±âľ˘nspmxŁ«]ymeóCżÎl« mďh_öş„ÖÁkĐ÷‹_4;Ź8á<»ą­'©g–J˝“Ăé3j@B*9ŠĚz¦űŻÎŐ˙şNžŢn;Ł[Oű)íŔJŞ7žëYm%A—ëŠpZćnďcň\e¤?ŚÉí`Ľ…>:˘ě@łŞxt‡>V“j“ŘűpŰ˙cÁŤč–¤™&rĚë)Iç‡NĘáú}“žśßânTćső°g Ëđ$mĺvŁv;Ž;hjeG/ÚuIŁ!Ô ýMyŘ€€Dݡ&ü,.âŤę©ďdpĆ‹Şć^M`^µe="ű`GżfF×}:>ˇ•pTŁ f=*cŇěĚ ˙9 d˛žB ¶t‰™Ő“Ć60”`ftF[ęđâRµş2Éűř˝ŁÉvÖß!iď–‚Í{r‡B8Ď’şeFőÜ"đńeÄig°1˛Ú&ĎňEĽl·^nă÷Îs`ĂĂđĐŮۢMś€DłĂüŇŰĎý“uéDó"S~-€†UďôWdĺbs×ú®˛:u)O|Ĺ7Łśý, Ś”6ł)y€GWÄsĹW‚u»@Š*6Řä¶xs_Ł#Ü‘´·ły$]ýâ(%Ď:Gü3Čćşä¶2ľń ĎĘąią Fş‘ýŃÝ9;µźď2¬ĚÝST™12ÜH:/Ţ:iu‹™:hŕťĺ×CsĎ"Ě“`B{~í-Wt¤ěÚh‡÷xŚÝŕ’uľ"’qČöמ…C¤ĄW.ś8tukʼnLŔÉÜv5ď7 ´p9Až…‚ZÜňĂ\šc™Ô Ý‘$cYt!3LŻŮvÎŚů Űőę㻕6‹$:˙$D†Ú^őíI\â"A&s °éĹ]nଠˍď®KV«o§~ę°ŘA?‘×ŮJ…Ń6 XÍľ:ŁZgs€üőŘ´ţő˙Ţ召ŮhŹť4'xtlmu™¦•ßßUĹ…׾B[™tÔż0ľl<ú-PŮŹ·ÁĽŘHFś@2NŐU Ń@OBűťY7óʇBń¬|H®ŕN};ŞĺNާ H·'ů—CxEňźX+ö^)Ó/hOt{?â Ĺ PĘ' +ÂcŕRÔç"–,%ľ6Ě4ťßYA–ÚľU`áş'Î 1ňŹÉ‰4©:„'”ϲ-ŹűĂyî?äí6v„áęľcO©ň}*3ÜhśëőşÄ uô!ŤÔ]éĺÍ.ůüń-ç•Űű7Ż«¬_&kŽęV‹ýC$:»¸3*z畵âoô(‡cÄ^gĄÄ'ž”ó˙ĹXŤZßÜ@> ÜUçąÎfˇ¨`L™´ełT™ž›ołSÎŔw˝µJ˘Ă,wě;‚ól+5)Q!j ™’KJT㇉C?9ĐćÎrŃrüůžÖ +`]éť=3D 8â1÷˝« +6\Oě(ľö@X±~¶Kq|Î3ĂÉűŠQ𓟌ß:„ję[-ű1—€ů¬ü¶JÂY)1j%đ#ןvůŠDkäŽ{ĄDpiŕĐßŮö¬·2ŘłJ‰ć寕*…č1šžŐQÇE™­ýŹô;Ó˝{´aI“rť°ăͲi‚˝ËHeŚK˛¨€á:Ć eĐo©Ąçů˝\čcÖŻquݞÍ7¨m,œ֨&-˘ +N•ś¬ÓŤľ€¶ÚĚéÝéŽď9 "öš?PŁ4ż“ Kż™bĄBKĄ.ycŰëk×ŮJĐ^ KöˇńĺUXncŇ,Ášď-+™śe;TÔ¶ůőű©WVŠŻ1휀¬ţ9q}ŘÔ¨”ŕ@Ń”z*¨Şű©ú2Ş ± ¶$fν0±eáDx4JÝ|3‘$ŁBăăŁ]:–Ŕl +™'Ż_Y Ś—…Ęp$ŘSnSŞ* ó‰Ę)R V,!ŢÇP·»-egĘ(4T í\÷kpĚôÂ8~dĄ†Š|—I’wLbÄg8:0f0ý»×W™p{ѢŰÖ{c˙pÄËŻz#^ÔW¦%xËŞźÎČHÝ;Šă˘ážw}iŢęo,C+Ř) +tX&}s°>:ą‰ +ŽřęŚbTůü2wv·„ßFú.>Łd˛Ţ.PÔ /NěćIHÔ15&‘„üďBš­Ďąß@Ôň»¦Ő€*`űMžßLÜ3;uxčóÂŁIůáI!÷}ÔPµšŽâŃůdUf0¤ř©ł•Ôjä-v#O=$Âx˝f;^ĎT¬ŐŞu&Vląv\żÇeŮvň;ŘŐD8bĺäRČhú8´Ór Á—¸÷ 10Őg))ăz>w?ől˙ąç§Ů]ÄoRµ5+ŽÝ'čd6¸ěP[Îe\& m?ި.T:8XŃ9=qŇH €—:Űź"b‚pOµ´ŚďrUE*j—€ăë‰pá6w2›4~¬Kâ.łv"ÍY—<#lUëÖ=/´bN‰ąçx®âKnLŹÉTÜÍşą±OľôĹŕf.đîVcÝť-p’5r˘CC÷I0ĘŞiőŤĽůîű';q$Cőř$%˘®ivŚvJR"ގ˙Ť#¤Ä‡>šWHv¨=îAÖ=;˘QSLYţî]N4^é%V¸®ŠŽ38‚fůC§ÂęĚ&?1VÉP ä]㚌çŇΨŮÖ¤)}˙‚zź8@ j"Ććü_雳o§:C|-­j Ě +ŕtÉÖĆ*‰%»<ääLĚżě EĘ«ŕč°˛UčQßÎ@U/Q™Éř[y,čÂasÖĽ Č38á;MßťäwĆ6worŇĘÚeź;ľ¦gçŞ`qÓJn®şD%\ż©Zj4¦­źP@ćČą1bzgľ?ľżÉÓ6 HÝä°?böX}¬ŞŔ5žŰő Üň ™ý‹ÚĘ ˛Ç·őŮ˝­…^˙T P(ʰqö¨”¨(Ä2,űŐJRjD‘†´.±ęçI~!ĺ–~bćZđÓÇh• ßôŐďý™?ÓťŠˇ: «ś?ÝH„Fă¬ÖŰÔ˝E­w7熖Đuş“J…ş2b|dŻ«e~-219ű:/2‚ňn»Ű-VTvççWmX·Č„<Í*ČĚ!Vmřb5z—“‡ÉúSM¨'č@Ó|iBdHgü>D9cp;t$°26ěáŁ?eŘxŢYWÁ‚Uü6ÎŚsşô‰ćßyşOňcÄnŁÔ—ŰčŔD!¶]{‡JMčjĄîz’… $?Úú ů#L$Ůu×´ŘłÝ4Ż6eůŚ˝K +°!%ľ»™ś4Hť,Ý.€Mđ%ŰoFË{WäúŇE^\Dß'˝˛®Ž0ŇŚŘ­@x‰Ü¸nçqm¶+ÓŐY! ęűSţţí×WŔ_â 䮫"áĂŐ·ŔÚ'ý"/…KŹ +ťéŽńéűĆ•vž‘ô +ĘóĚĽ«ÍpĽé«AŇż†J í©?@÷·‡Ęw„ťYż žÄŕ‹Ăt"*Čç +2žW«»łŽ˙Ń’G>%YZć¸O´ó\Ĺ_`ZŐv|˧dŽ0Ĺó´Bgb¤3 +|D›kťż ´Î«Á=(mż4ŤNűŹÜží Ş y\+IŻô8s’ Čů +©.—4M…3rIÇ^‚óH.ůJ“ňPŐ¬ĄäÄ(6SҨ–ŰFnŘwr˘ +ŹQжv”ne)0á©$¦(ŮFÔĹ(Ź´"ě|ٱeŇT©˙ÍwÖÝ…ŃGŚPť9a3¶n„? ľZĄ żł˘ÎŁM ˘ý°˘)BaĆ'6Ey÷93oß&Bojů§„ď× {H*]µi1g0đ›Ů ¦¤‹»|üWN+Băň^űl­»Ĺ>šh +y#)Ž´í»â’jěˇĆ„”#IČă®řŹ€B&~ś»kąÍ™ŻŮw™ˇ:p{ŔEŇţPx#q”‡Ĺ]€Í<÷ó–Př?$­ßćČ‚Óri˝ö¶c…D8EĎ—Ďň%n`őŤ¦Wlz©-§×aĘ=ę~\19%[×·čźW>sTŞ3Ş23ÔžźKíô†Ô~„”łüO%»Ř99˝Nń°.ř˘ Ä7ä•Ýé€ú„Ď4¶©7; ¦ť‡Ĺp.á_I?Cdâ‡q$ľ\•Ł$Rd›čÚŢĐv!yíaеĆů×Ď˝ —W°ÇGZ6>stream +-Ŕţ!oý??Q[4´—×RPAgˇe.™›Î_éŘąŹ¨—žäł÷gD†Ăý¬ÎŰqťxÍmt+µ¸-PA·(Ł(ËÎ4+lP`çĎşńŤ˙|1 vů™SřłÜ^)>#ş×”ţ®É0K׸”伻‘3ď± ŕaŤůőNpÖT†ď»¸gDnßXÄ>‰WY1÷čeÄvg˘5™Ť (Ő%˙ü›łS‘~ÓOŰżJˇzł—´ířJm"ŕLmâ,?0ąźXÍcG9ĚNB"˘uîßĘZNďř;GvŐ(0ăKŰP·+ë1âđ…čťÍČîYľÉ“xlw¨Ęé†Ç­,›™ƵęŠ*ť»Wv@Ă2ÉžŰc˙9-ÍxŃ®#uŰřŻŹ5R3zŠLeŽPY‰Ó>vLLŕKźëcGEÝn˙®ÔÎčÄÜű}˛G;[ĺĹŮGŤm®ÄŻ>Ażî˛°µLUŢa!śźö+µćăý#‰†ÖMĹůüâ2JźVyÄ™6śpsěK`¬0°ĎŇ«‡•–8'¦ö[ńźFö=›}4"e +a‘1ö Ă*ł‹)“ň'J˘îqŹAfÖę+×ČRIţëżHZ˙şáó§ŔčáFן~˛'őéăýňaś™l +î˝Ö÷]Č ­˛ˇť´Jńz«‘Fv©ŁülJFLO=3ŚvOŮ›zÝĎć7ȇQxáľö+Ţ"nňĆ˝§ŚqH&Npż4jw&ÄSCÍTŮEaÄ.)x†Ň[Gˇ…ż?3»U,6=ö4ĚÁDW!ˇ':Ęc’đČ„¬.AÉ;Ł˘|”±rgŻC«ň(Ă$ qŐH,Ţýˇ÷—[̉F Ě®xGű¤ŹúY ë-ąÍLF$˙~ă\ígD:ŢŘ•ŤJńú!;ţXĚczŕśňá©„HS}e%{‰‚đô,ŹH{%6QŮ +>ÝŐöňt%M:pőî‹iáęsťży«&»lţb#¨ŃŘwç…"r—/ýY1v˝‹ćZ-śźčS)ąă«@ÝĚtPČűL2ľź ý‰[… ?(gŹEü‹µ–śçĘ´'t'ćÂQŚ|ŁŠĽÚľ˘AŃ +iç/RÚą#/Ţ*®Ş˙ĘC퍩šŻă¤‡H9Ďh< +©«¤fÄ®­!ď}…5ďËđţyN?e WŮú ĆedĚI* ę®Ý;Çcß…2Š5 zV„ٱöěűÂ"gÚšn'í Z^JŃëQĄÚ:)PR–ôâżŐżFXú†=Ďáň ´‹JřĂlŁřĹ0áQ“őWcŐüge×8uç;ö€”PÓ7Ň‹uĐ|•\ą“çüŤí}fĚĘJßKđĘsŞŢaéD:íý˛a”TŁmźó7 éhUĺgĹ;ĄękĘi·ľŠL}Ŕ•ÜÇ-uÖ÷ôŘžőѱ®¨ř=-¤P+ĚMČ¸ě€ z­ŮĎó+·hşĚĂ-âá`IÜ6 +i-ý»šÜLŕWÂţgg ŤÉq}xáâ—ţ`˛8 Z2Ě‚ß*)Ď=úă<Í_%ZŤő~…®Uˇ3ăĄpÚćo<¤YÄ)­«„eVţckd[OöBěîV§Áäa‘\Ç˝Kě#+÷Ń‚3ŔÜ-ۢ/~âćˇýTÁüv¨Ţ”O˘±"IŐxQĘG–<ü€Ž‚ +łźŚ@vË>áÉlŘŞ§>+łÍ Ĺ˘Ëľ.1fÖŢ·“ěز~.?óßVW))˛ÂőŐhôýÉĘ ;E$ĘX˝+ôäľ4:$˙ żůá”8îc˙ˇ;«´ąçUÔkâěZŤC°g˝ŽöËĐI¬w@Ŕľ~=đˇńGôXˇ¸ű’łY°ČÓÇh}Ë# D™Ž„UO‹Ü˛Űj¸üW;ăP®+zŹśŠŢĘbéׯľŔx(m#*¸l—)hÍť[´°)~Őq`íq­mOevšĚűjBBúČZ­eńŰ?(ńŠ  ˝€îIĘ!¨Q 'żĺُ&"|2¤Ş ô¬űú=ąř5ĺ:ĂéÝ0›Ť©X?_“AsoŇ5D:SćčĘ C µDM"©}µřĶÍMŇé61\OŞs"÷¸’ 4-€Âsk»îě“ĄÍ Itřç-.t\X8m¸K¶„öŠWŕglĽf–/0 ůƲ˙ťĆa…©ö1eEŮé1L«1Ň›qZO,4Ó~ł» +î·.±Y1íĎÂ!a%DK“ v l cík),° „KúĽ’‰"Á še`?â¤LťüŤMS6Ţ/ˇDBşÇvűß׿o÷Śd˝Gť×Ϭ?­dH?Ľ˘ó—[Ćc) +ö.c2 cqVgÄ=Ë›rUąĂĺUÎYŹC¸`ë÷řî +.–ÁÂŢ Äzt˝q~ę“˝’gču‡U¶vIPkĐ‹#=ô¨ 1>Ѹ†ÇĺÖŔŇL9˛2€yňř®ěeEÎ-Ł«ÎćŐűSô¤Ľ ş‡ń^ťîŔÍ; ń‹¶űo*)Ć ‚ŕă§8))Ú´lýĎ]pCµ^D Í{®€[´"­”m%Eř›:"“ßjżĽYO9ŃZ}BŘ,9±F™w9“ˉd]´PCłáđňá˝ďnĎ +6€$9rm–'ZáúŁŢ~,pč-;ńĺÄ éśĐ[ń1¬`˘Â÷b‡Pý}řžeă]Čć{ľŐZ޸zô6Ž«{|ęż˙r"4‰ä{ŤBÜż°XŐ–5Éňezí;¨ľđťplg¬Ń LL(ApşłżjŃőĽŐ·Ç/˙ 8o~ěD/*¨ňőŞÁ®,Âa%× ň•Öítuş@c™A/áľ‚g=~s]ťbĚÍź/ýžś“9Ř•])z™i(äąSýxrćh=źRNĹ2řŢ”Y7[?ÉŔ#Bžo´Ăę>Óv\Ż &Ő¶ +7@ y6O‹/8şĎ»Ąč_Z#e‚ÔvDň›§Çç©­§˛Ďź.R#ŽO€[†˛}v ó€µöBÝöD˸üÚ•^ńȰĄ—žÝŮC(9aí2»;)ö0ZĎsoĆé$%×M­tńd±,XVRÔô!µq„Ď-äjnß‚U—i1q°G ü—á~Č4$ťoĐÓ•”Uuťě%ÖKű»Ž>⹡ŇHa…z|3ń}+î<¶‘vaW˙ănHŘ”1>Ł©ěI®ž½Q@Y„W怢­W :áyŁľžpJË.ĘXÇűYI_–ŰXn“$ś5k˘9=ÍřŁ[.ľ+ \űął&üÍÄ÷•Ą ! ęď—ĄÍÝ«˝ó¦ÓęöWÍęÖQĘ®cDÔ:»őPąýOűëżČZ_Ëg(kh<– Aď¶yăĹjůřóKŇ¨Ş Ĺyţ]~Ď ç‘ «"bZÜü•m¬§DŽŹ&;" µAĹSLË«Ž[Cę‰5ćµ<ęĦ±Ď:#Lž#:ŔŻśxRŤg‰‡»G0Hů­y˙˘…ú|á#¤ĆKńĎűĐÇz·şč ~Â#~k 2™¦ĆÜdÝáŽĺÔ#5NPŮÁ­¬Qôéa®b Ç*~ËýŰáőž„axYS¸ĘŽ fçÉ‘GÄőş§™ŮşŤşÇ@°…ÂÍĂNs'ĺ“ŘŢÜ«‰ëśż&Ö;Ĺs#ŽH> @y×÷ĚŠ‚ŁGĄ ~Tď4¬»7iÄRö¨a°;ÔĚąç<jAś»Ě¸!]ĹůŠľÄ‘» @÷‘b‚^ŕFĐěŕ“KVT5Č}JÓŕëŤÍăó§+Š&ĄŘZ!‚ߤ°VŕŽ_}LÔ ‚âşýÖÔQC"E3 —ĺ7Ź;ُ#íÍ:čFűĐSńŹ@¨^‰ŇoĹ,č_ÜÎ/ +¤Š W¦<‘WńđňaŰőľ»nęTZ<šűGó}) >gažz‹™ ţ%ˡ˛ŕ#ˇ¦»rŚ#»{™]Š›ď_…Ý ÖYńĐSVçžDeg’ů>Ňę^e ®ü–°Ĺ3š ;ţĹě“Íň,|ĂŠms^ń3Ňf63ë5:~á\;woť„v÷a}3źőŠę« +Ś@‘ô*ą7čĺŐ<{„Ι5a7ÔG…AKűâ)8č™ůµąŹ‘ꞨqCÔRŔÓţův;D»x˝mGńNĎX-ÉŕxáŚđ˙ޡË„UŔQŤLFďĐ)řł{”‹žAÚüŇ Şő7HÍď9†9¸×îĺ—VLę™ g‹¬n’Jxźd~v„Úŕâi/öK\PpÚ[nÝ=’EŁ“â,‘$ÎY;}N¤Kěd—:˛ś÷î†śŘ ďŽ ŇŕK¦~lmŞ•Y Xő>őă_;zşÉÉ-.cŁĆ˙=÷Ď4ULŐ" Ęë0ŠńĄAŰńJ=ŰRp‡Î”Ý|Ň ńNä[1QřŐN µ7%dtÓŞDÉt¸ńzăí4¸~Ř-´‘^1<s4vycC +‰L×Ygűß#‰EĚďĘ‚¶ŐëÜđÚşa«Ń űIO×Z´˛ë=ĽÖzŁt®äNFF¸ş•2^6|÷fŐ@Ítł/0§ś¶Ńßň&(&ŰXîęgŻÜÄXŚÇ6ˇÇšĺâ*ĹdôŞ$ČęµĹÄöMĽâC7,ŰF]ŃËş™Öo”{ÇŹÜRŮóôICŤŔ\6„™ŤÄëAbÖWľ°ď83zD4ÓŹş1ťYĹ…SÓľ,ř†Ż6 ŃGÝdČčÜDËă.ďxFÖřůđÓG1eí•(źly›ç˝Sö(ě)”ż_7~›-­R ąëěDp‡qk;ďŽŐ¶ŰNU=µŇ†řk» ż›IKÓhń; Íü±jbaWľ±WĄÁ;#sňUł˛ŕĚČĂŐSY0*’};ęĹ/eż…j˘ť¶]Ĺý† Çó÷,Tj·ü!Őň·w™5Ő +ł˘ăĘ”ř0WN;ŚŘ ¤_mYĎŕýUnüťd·ŚÚU>pđűüfBQ†!׳±Dĺpm#˘Đ+‚ÔÎsÇvŽ7|üť.ˇNZÄîĆNs±_€”=v;n]f†ŻkÝŁ®H:ě(˝—WQü8fbPŮ”!ÚśBʤÚĚ…dSĐ¤ę ŤTćcó=ŤÇť*nÜżšm5—©˙|’ő2!}oS倚 둢[— [#ż[m’d®Őéş× Kę“0­•ˇ„FGĹwČz:§#săuĹXH Î%kĎŘ&K¸ůřéöŞč>ŠPĎů}ÔȬ·AÔ¶ľß.’RůÂ0†řçwćD9Ě „z0·ĎŞp¦Š „YPŻ/B h=ŘE1ŰőěŞ#Ň^Óâ+A®(G]ÔXĆßy^š'«·+8Ć^š>TÄŘ i`°jĽ‹năc;ƇĂ\Ź)ö•ŻEoqÍN˛kęOb%Ä+ďźţ”.éČ|G:Z1^m:¬Ťb"yJçë ˇcśčYü­f0ß±/iÁTŮľq-‹ô…O”yW]rĐ‹vÝ|~q„dÄ7đ©˝ÖJŁ1㮾56„äq¨NřĚŔř0T Řv*`ů*óáöuf†M™†Ý_’ĆŐ‰Q’ÄÔ#ʶ˘ˇí©t|ÂůŢ‘nžőť!L|Ż«ú­ć!cŐS7Çę˛ŢŘß8 ˇ)µ1WqŁݡ¾ăţY.‚Ü W6Ź‹¶Ş1Ú}×čMu§ÜŢ=ô‘p˙”3í׺Î🢰:@vqlÝ#Ŕµ®ó‚]ńĐp +{$0µŢ’›xS×i1R@ ô) "ö}Đ«% ôóÔE!¤aÝD"ßŇgřţšńň5¬d«Ů€6ŤÂF´ČťÂąV÷‹ĘđŠ/Qł§ŇşŽôŠc€ŕÂb¸EzÉęć×× „ťô©tKđŚZWЉ±\Ě$Żů˝Y’ÄJ@™TZ·SE[ŢÜgvi#lß3qlÁťP1Î)ŔĹ“×É)ÎA Šü„Ś`:÷-VÄQď(¬=6z9ě„‹^ł;hŔGç˛? piŕëŤ`wRuc;u +]}_2­őŃŢŻ•€z”ŘMzkËť‰őëťÜAëĽ2pUľ{t îi]ň)ë_·yţ´ó”ťr´íĆÁO.ě¸ůˆ8b-Ůaú$ +#Ă&6S"üŮóK‡óE|ąćŠçđşĎfďčR ßpóî/jµĎuśőh»p1gś1“ e´8§ŢRB˙ó®J÷ŞÔBž^ôjNKŻŚK˘Ł˙’á›–Úw0-ŻydghL9ÜÔCfm´¨ôźf7#:(uIŹĎ÷Vo€ZÇŔç# şčŕCş˘ĺ;ľ2µ÷Ľ#‘ďěÜ˝"ŰWé‚IřÄÜ>„źÔ2ĺéĂ>všß°\:´–FvśmçCŐyé”ֻ͛w×ôŠ3FîTżOÎ;¬ĺ˘ŻV8#é`˘w}ă’Fí…ßăşýI +!đĐV|`ěćG9qŽzÖL¬ +Íq”B=°<ÍëóŤC9˛ł#óóMÄĺ걬UȧÔ@AwÝô+ŃHč!V?2ľéa7qąc ą 5Oäéî¸=Ë-g q/yż|ŘĂóľŘ^•Łđ}ßč›^µťá‡^c$ȇˇ×©ĄÎ¤gÓ}x€×/›u‰&Iß÷ü˘¬Ą $ö/÷jČÍŻâËĽDZc yź‘<ďHbż]FÔĘ#p–ląź®pŔk!ń%Dő–˘•fÝé©ŮĽ‰R&µZN ńË©ç#t”X9sfw§uywÄ´Řńůąa{mź¸5‰ŐšäsÉg˛Q`|Ăq]}ĺC µ±6é溢…*3žđö{Gt/IMbpaV)D*#*pl”ď eD˛Ű'iňă®”âĆţĹ)7Y&;HěĹ“2 3éC‰=Ř/'ľĐĘőBĹgäĐ3GhËUrŮĄ`Ş |©ú›Ď®[ţ*ˇéç›ĺ"g{QÍżśRéŰŠtqü‰‹š¶č¨ ş!ȆĐŐë]]at&'޸őŚ< +[×âÝ…ľ -ĎŹđuhY±Ů•VM…Bfľq3†C‰î'öˇłbŞě3ßvě ±~„Jl_:´‹`łű–CËbĘ +3K¸l»#Ăßʶđ­Đ÷ב±ľFĎöÉő9ľ9 +Ş1™ç•ÚÜB„&…ŮÜSő•5޲€ŐRg ÓzŁÎ–D Ąßµ®ŽXŔ»G ž_ź–żsQeÉl‚śÍɢAÔfĄKĽ±cą7\ŰLĆe=`ő\•˝j‚hSĐ,SýWŠIôąvć şx×(‚†ę»Ő%VŮÎłˇÄź.VG/AdjJ0/éKZçMĽ4»ć[´ _úÔp‰§ßOŁÔ;’eaŐ¶ĽA$T÷™1Ň?lSMŮ7¨š9xZÜÖŚG˘KÜň.O¦ Á—2©äČţŐ‚!K /÷>=Wů|ÝÜTÁ4Ô/gŇŤA'+B?č$Ę·.Aç#&L°ýşeh] ąt¸ű,Tšć,¨ź©Ěm˘Qeˉ,˛îM›JőĄX;žÝ-ż‘|ip?b}üŚó@cË—>rŐeGÁń"ľ‰‚űT}‚„^RIńÎzŹ-ž°C’óŚĂ71ať4ł2x«ť©Ń0۱UHÜ•[˘ŘűŘFżu¤¸'’éűM:#°Âv€hỏÚB= šëI{ý$Ţ&'ăNĄßĘĚ62ź¬aÖ'ě;‚Oßyń1Ë EöË ÂúĆëŕšfˇŢ• WXŐD™čŚY/w˛iٞáż®kű’a +Íaťß„9ĹúĘ2uĽŐs[6Îč–'kĚ(+rŁ‹@NmMM ź@]w4Łb:9ľˇ‰Ň‹ś褫b!żâY֭Ϧ˛Vg&č! EiÍ4čŮÄřŮŔÓÓ€„r¤4ń}Ç/’fśIšŁÂý4ËĺĆ™Z0±RDěŁđ$ˇ7)ŞźŇô±l»ĂUřW^ĽëâćÎń‘ ă[Žť ¬· ĘuK2|°ĺđěň´˛óA…[ 3ľ´S¨´ˇ +ě|™ż +zöÜZŘ;¶˘Ł9™FîÂ[Qµ3th×cÖ—ľuC$f-ô FţFx¸ÔĘswtH_˙MtWÍř„öť ‰ĽQ>Tł“ ­Y\¦1÷´Ň‘Ř:Ţ•.g4N8śUĹá †±ľĎůg{ˇPR»JÇ:ÉánŐí]“˝řŰçŢÚ]:ôÎZ`ʏ^á´0viŤ•ĎHęzźęÉŽ´M-ĂĄCîÖr1j‘ _©0ឬ)q›łŮęĎĐP›mä7I0ÚF§9ľÓ!‘SĘĹo—Ĺ_Ěţ#ţ®)·ş{ +ń°ëçäYB†sŞ|OoÄśŕ2~‡8áśÜŮp˝FîrlFSĎŰ ńçĘĽ[W„`čěňMĽŕ^jÍ܇űĺ¬AXEÜĂ2Č©ťĎo˛ž»’ݧLšµ–93ůGKbpŚJ™AřfŔĽ__…mwFU'VŠČĎN‡=9–cϡÁ…Üž»ÖZpQqsŮóîGĺ˛â$Ý›L˙1cífďô§-…eŹk7Ş«oŘUł§)jrşYëw:0»x “C^ě\fŮ^bX2Î P) üÚ‘ĹU8Ź]Ł˘őů}«Ďaü®âÉż¶îîą+·ő|n/fôžčVXvˇşD1ŻĎŮçbďŇČ  r+DĄ\©ůA»Ţć§đE6ˇ#äřŠńfŐ9G&Čë +8X™ď‰^Ź›@ßŕ^]rűAÔ ű]>Ť üĺ˝G~®ŠŘ6Yčä~śkˇˇm,5!a)ŚüťH]Ă8ÖľwŔ~äüšÂ÷Ýý… Xč%Är]ˇÔ:Ű×i9f;Šň˙A™ ĺB3ňV,Ůmż‘󾸿‘xvÁŃl–˛ š™¶č‚9k?Ä»őR4pżČňĆ™Be¶‘#ë-]5[şÝÁ6xžĐW]­ ·\0[ĆĂę60źth#¸—9]ßµH:X ÚH›\őQU@Ł.WBnŮî°3ĽöŻňćÁz°Č* +çí™SUÍérg”Aę»cKĂ܆TfŻ dĎ-‰ó6ďeŢóPLqT/łfp‘j%WP„čŐ ˛~ÖNŮfrn™Ň:ˇĘYábvî+Đ;pn#]Rj ѤѾV”¸(Đ^m‡»ô®üĽ°Ö+ó đ.(uĚYuÜ›†!ç(řLĄŽ¶äR 1Őľ6°F%‡ń›ăŢě» ÔFBë8Ť9A· ľxšóÝżŰűK™ČüňÚŔř†˙ÜŘď<»đA7c÷}­+a­ř3ěęIoybNŢÄ99Pfi0¸ ĂégshfávňlŮ9(/Ňő}DrעÜé A3řeř~W»ÍáŚÚ,‹—ĘoČ|ÔŽŞ$Ö)_… ‹D®0eçÎżŮ<˘|V¨”ň ă:ąä+´¶IÁ»c…tŠł +‡âDQš\e*÷]˝ëĘW‚(1Đó{±¬u¸SŰŮĄ<ŹyÍë8÷t0Žt…ž·bŕu˙“r%C$®#¦TµwĆo î*Ú©_.$Öů’UżMúĐLe\ç°Ě\ŘL“‘q´s—ÖPŔ8s÷JŮľŻN úË…-ž 2íš‘o˘MF«í­\höÄ(&"EŮpłž&ĆłNX_›gË©YP_#h —ÝäuxűťhĚŐéÇóî·ČěśŔ‡dŽ—,ŚKŃú–G¦ýą 3–Ąovu`Ľ«®z §Ű7ěsěD=űLŕ"%M˘$v˝={ĺ—¶ŕŐÄÔPx8xZ(— ř±4ę5W¤&@€Ră˝]-0Ć™ťŚ%qEx[É—řKFÇ=š:"ŇÝf•f=ÝfôÄßë[ö4$÷< ÂŇ3SŮěNW]éëěv×°Ĺ÷­/ Ą ‹JÍ&+0qąŽKŰŮJs¤şŢă‘Ýt$ě/Ő <Ł…K‹;żj—™ŐýC éIŠ4:ĺaoU.«G ľ^SâQ_S2Ĺ6 ŚjôĂ7ČĚ’6"¶{áîśáQ›©×ż¤‘âM ;UĽ FŠĘH˙‰Ćş¤‡ą8G\+ź¨×3Ftzęřx~¨­– é“GáWx]őYME¦¸Ô Ą# gYÚ—śăĹýE~]tYG~}ĎZ«ÎŮÍĄuíÁ=á¶­+řGjţş3€‹6Ö• •ôFŢ8Póľjż”ÝPąŻĚ_ę“ŔH-JMĽ¤ţEĎ™‹v}eťbčú!ÝŁmÎ`±—Ćľ7šCĄ÷úépiqŤĚÓę)Î*žqJ6]Óµö8 +>űińî>ŔPßŔ­[¬ÁŢ7>˝`‚ý­_Ívć9Ź:>aiśâÖ,©…Ű +ň¶MIc†sî§Ą¶Ë%4T€H;ëTčŢ`úß珀SF7Ů‹Ľ7MĂxxŻ˝/ÎâgŇ'­śŤ»–¶şÁWŃăgf˝j̰8Ť€Q8Ú?H0°'úć}w¸AĂĂzksľ˘p(íä,gnáG< Kµ0TŰ +@´ŇË÷jy­Í©áĚ*„qĐ‹l{7™=9.CJ'Ňě8ČNUě©$ –čĐć—÷_Ĺ5'“ëúkhj)öi®m·ěßga°ßI݇ű—ŕn)€|}`r¦ęľ)Řßűť?hôŻiup±ŽJ\wĆÖŻBîŤtŁ)sakÔ*÷8+ ='F…wďźRÖżďňSđ’‰zĹ^pśq2c]3ź_6|#;zż×^^´ŘĽ’tj‰ÓŃŇÁQô^‹ü4Ńꇠ@ÚßÔđů/÷*pt)g¸1 +ˇűË… +yżęąĆW¸iá©›”&ľ]4÷«Ý©‘đzíź#بu [îf ”Y敦€őŞZéKOĆđŠ+·ďL1ş¤ýÝ ríŰ•FtßŇ*<ĐŽź:Ţ…qC“2ü wyµsfO*§áˡ)şÓ;ËÄśmŁâákş °fnY<™Ód(©#Ű ‘öbő«Oň9ă”[Knţ5o@eÂôŇ덤ÂT—đôĆt¬ÁĚZ*PĎđýµĘD]!Šq|*ŇMbűµ÷ĹŞKŠűHUâ ?¦q+^˝Š‰"Î?ŕ »U¦Ô őä'ěT3±~ş%öžîŰĚĚ0¦ hSjY,9âU÷°.ďô›ůD-źë[íŮ•™;ćZL˙^-lČmxř]ÍódŤŻ©[¨#ez슯cÂpćÍI2ÄďlÎÎÝwžSřµ|›÷‡5 Ń4ícśŔ¬«éLş[4†ňAYY¤Ő9˘SFŻa|6źŚűťçnş&”dĘܲĘčtĆBş’ţµUoĽ+˛[%C‹Ě7ŚŕťkěŃĐEŽp{ţ9gíF/µđ)ŠĎ˝÷ +~’µ¨î˙ěžhĹ>Ź#BZ=Ą°ĺ43iëŤőĆ­6Ę›×US›kĘÁRđ‘ nVč Ó}Ď{7*.'nÔiĄ„bËCĽŁŐLË}„m˛ĹúCY,“?fźvUd‡şëťxAđz-®˝úqLÁČW_ű¸’Tą"˙¦[x*Ěsa>Sä™s§OhĎsgí3­őńÍą/×¶ÝÇ~—iC÷ĐvIď*üw”ŇăúĘlŞZε›/]&c&ă×u€>†Ać'ąÍ‘@#EVG¨gA˝Jaőńtf÷U~ˇŽbÇnˇ‚r{O¦Ô;Ą›–Ůb[­(“Ë;0ˇsoM_ʵGr‰5RíĐţŻď´6h#’Š‘˛éađŕÄ7D˝Ţ ™Ĺ0öÖ˝0)ťĘá ^ŻꎑK°aRh<Śé»0ŚĽ…ř&ß-¬üĽđŃ„±ôČ!ÄnZżŔűŐę“ěذŔ(*ŢuEŹUžăü ,äqyˇe}vd§ĎŢł»WŘ28ü¤® lEs§á~®B—©ĺÁäuę:k4:<‰?ÝëµÍRđqŚŚŘ¨„ÍUc@ů·ľ/«ŚNMżeeôŤTŘź¸™ĺ¦¬¬;wţ_2@§#‹ ˙H7=Ô]î`5\;ăřŇŠđť§d¶ś!f4‰¸ŻA¦Č+Ő‚¸"í}sżů%ě#Ázä”äÜĂĚŚyß‚B]©;_â7ą$Ů%OQ­KPż®_ët‹X€\^0‹^EMŁĆ*ŚBD;tWÁüŔ^»·ĽU—*cŇj_Őhy4EŃúĘZa±Şońî‡;BŘ?îdU›Ů9`ňĆsLĚó#‡XŃ‹ĄâtCdjp«z¦“QŮÇ¬Ë kżTŠ h%(ťŠ^=Č©qĺ-Űb¤ZĂv~$â{W°g[fđě´Ď¨o*LĆg°ţ-tşó[ĎneÚ 9†7k”Ő„v*yx÷UäçV#}"¨'AŹT3ýë[r÷Ľo­ă3ą6DÓë{;Ń#5z4Ŕź=îŇźŚp!©ýsÂú׍^W«›ž{ÇaóďĂé,|ął…:ŕ©ń Ëz 9’Z}f ĚöĎ×í0Ń+?°Âť€kNRĎΗ¨Ęű63_2wb¨?6j:scNÓęÉ*sEjUá’ým*')šdřcGýěç¨fÝĆý7zőŁć§R\üŞč Ł*]^Ńɉ„zĄź ĂzŘßßĚ)ž'í@L•ĘbŰÉö +Ď2ś’Ě‘i.ě|xđ˘2Óˇ”+»8ś7ű¸c”ńĘ¤ß ň8řŔî&k_†ŰnS-ž)˙úĆ<ÎyňŽQýŰçřĎWiDéŹD _éŐmĽ!łNh±1{u§ŕ{’Ůh%;¤:2ëţxă =Zž¤„–"×,Rż|8SĽĹ\í¤µĎ Đ:Ť–är°KCMĺű}Ş`¸“ü-˘)R×gEsŽťÜÜë€Xž„üKPUĂÎô­‘‹1÷Ł<ÚIv€Hc©°ÜŇ÷<1ůŠŰ¶Á gř'˝Ć¨ Ăą)Ş1_5h·^xâhŁPň»{«r(á±)ŰOoq\/`­TöFPW âZvPˇ±żVŐŘÄĽ śńIw‡ TgŚé ‚kŻéaŹ™05nŞŐ…¶¸°Ö»ĺ;ÍV­jĆ^I&oFáá˝K˝/U:?!±¦Íݰ¤ŐJ`˘GĄę ŻĆ8Ó^‚?WŻq=¶xĎ,°Ö˙"im1t7­pEäzím‰ÍLţ§bř!ăáĐ'ř¶hĆ>~$Ý-FC#îń%(ÓZ„S×ô먊~ď)ĎQőŰ I±ńR|_”é«ŇÓRÔU‰©¨úö7-9ÖłTo#Ť.¬ĆVźzD©Ú%ńR ‚¤Ć[ďßQ˘Űę×ßbQMwćŘ[#´*¸×GgţqFöFvĎ“özĂ %ô׊âäýŇęnŕD}Ę:°#+f°dRű(Č[4âÜ;TĽ§^dÂe+†ő­@BIŕöĚlć5wVbôc»ý-ŤŚßŽĐʢ·ăF醂ˇŤüˇnI3ôiÖ­3@đŢT.9ř(ŮŽ'@“'¦EVźU &žă•45‘´´5–ĘFłĐí·ťč.Lë'żëĐ=Ů­ŔN?;^Ć®HCľ‡%-\.Şítś+ňŽdŢzs ¤ĹX\÷ +ńBĘ$ť% 3€8ŔŐa¶ÝÉľXňĆ źîóQ>Ń +iÉË24Y•·é.YE„Ţ3żü1h^IÉą$@ŔW‚K§˙ś“Â3”˝>!"§ Ît¬ŁÚSnÚ7*Ęę*e©Ż™€ŕŞ8”Z¶st§µa|OGŇ đ{dŹćsŨşă. ZC&ŁlŻb»GĎŹGł]™3¦¦®jȤ\#Ťä­:čć7R—0 ‚gŰÇg‚~#ĐĐÖG˝ě­1ďvŕŤ¬Î*±żŕ`ŐńWoź)P9kĄ×Gnćrý¨ăW“=,ú%Řw˙ TőPcĆćĺj%íDĘ.»î ďǨŹg_Öâ†T¸ÎWŻ+H{®l«…š ^Dű`¤>÷%|3^±{{uZx;pőÔŇě0Î8#ÚŃ´ůAĺ“ęëRuŘPg]YĘěŮÝ|<—@S|ŘîëšIˇă–©ŚZ|wŁR ŰúO…mŔNŕž'XW­ +˙Ťôר«VŚó,ĄÄ'/é3ôŢŹýÇ!"łmčLć·etaóÍ}Ň%&Ŕň[zVĘ‘&RI÷o¤ö—$v% pa3 čxà̸ĺ‰s6Oşő'Fč Zý­í¦˛ÇŘKĄř>ż‰1TŔłX +‡á.*¨d‘ťź˙¨ĆëŮ»~Żą[Öé)k::0ąklż¶Ă°)iâb"‘@7›ŔdUc‹*¬x˝çŢ"ű®”gŘsÉĺ€vôĹs'­„®s şĽż±14›IRÓ%ČPŔh(U;ťČv_}Żľ˘ňĚrć›˙ŻY˙ßO "eVŠŤ2vťČčŠ Űř€P¦qo¶’ł¸¸-k- Ťč:´°ŔV>ý°ĆNŤô8§#75SlY çŕŢ÷"6+¶T×ý+).”ŢÓŹ}•W`F%kV˝đD‚đ:J/61pëŰŚĚâŤg•ă™Uéµ×€ĽFčęí+)řë¬Ő#ęžE Ă%w~E|NÎ9s—ôKÔ@-Fŕ-ľ3ďL:vMÁŇm‡IŐWSÚţšŹÔô›’X ü樲"!.ÖWý›Â[Q”ŕM/VG±ęá&üě˛b=—čFݟ̭‡ăµDMÜ"Ťëk§řW3ś‘D ŁjxX««X'H.Łřdr‚ę?çÖđpF„[ÜÝěB§Đ¨ŃgQ %ňŽůµ˛úcĘâ¬r@KÁFŁçŻ<Űf[ٸYľg»Fó‰îÎîS;3ÚŘEĽUV|TGLkĄzß‚ĚCYčzÄTN ”"¶Ő" Ô’`ŽĎŹ5ÉcŠíť›;`S•3Łöa Α±E|˝B?#0ő(¨^ňxzŚXĂojŻMiäNÔ ,×ý!ÎVf%ě=Ł ÷ýxĂ÷Čî,˝:Ş-wä!<0RBĎí˘ş„ˇßŮwĺˇ +\ßH¬ĺł´K&ímŹ\M…» ‚7Ţč" oťjĚqÇŚ©‰UâŘH˝ŘżÎÝ•d/ť|ĽgőÓ‰ ĹŔóŢq_«hŽKçů¸ľ´ľĘ`ßr~h@µĄ;÷%:ňy—…E…ľ ®1ÓJ*?ŕőé}ÝJ­ůÝłX,V6o±ČÁ6ISAśÎď•]2ázć|"ˇr‰¦°ăkňßČ%›ô˛řü2ţĘoĚ‹3FËÂ"3㍢©Á¤­Ť…}Ü/]2pÂeł+ěľxĎżśg`.ˇ÷ÍJDëřÁJ¨FľLUÚÜ_g¨,aµ )iNÔ×]K{Ţë”2Ü8s éěý*í˘ý°T‚hąÚo+4Ž a#'—‚9€ă«0_‡’ýgŰV!ŠóNPcĂTA cĆđd7yôTg§§sśżŠ Çě.»¬VůĘC译&#qíéĎ^)Šű^f|˘S<™ÖÇŁďŢ=áI™"˛żż’@ófXŇî¶{Ë+xC[Ś`Pi~ZGˇäL˝’¸zÖ“5k+:¤>$öE2—˙§wÔęć«ŔđÎPĺ â' jŐ§š¬•”B ± ŞŃň:oËŇŠöŮ‘¶÷Ľ@N‰"tşâV·˛pHbň{Ë* „¤é.Ń.kúu{ĽčňS ła Žý‡ô!‡]E‚Ż-’Őţq…^–_˛_d%ÔvęöŻŻŐô¸"€»^$C_áű|Xł"ĹŐ\—Ä Q-¶ŽÂŘ—pě~‹OX/üqţm+< +5žŚšĹëôĂŇ­®ź‚˙cňsŹł.ŃB‹s$4¬=lĚÁľÍô‚–lßî‹ä3 QšÝOߍ:倷ő¦®o˛Ţě㔓|zĹŻi%‡u,©Í¨®9öłřiťźrśĽ4ÜvRgd0Ż]ÝÇj×Đvý†Ëšz§±ŃŠĂbZŻŞj…»Űő.aŚmFćÜî˛W6ŮÁd^”w3f˝ű†ń2ó‡¨á¶Č´¤Ż8u¬€ÄHnőöë·)ŚŹPóď ¦ÉúKg ˙®ĎbŔµŞ*ďÔ›1ô\QQ Ő'ͨ˙ÔUƵF˛şĘ» ¨ľYő>K}cĺ|\4BKËÖŐ%fš!OĆ`•zŢuJp—ëU­_/Ç(磌đb0TÂZu§ŃbĽ†ŕľDď°Múľ‡Jbë|Żęśeť3ęÍĎl:ľď@#˝Ź}Ő\âL9˙rÂĚ!o¸ŮĚő\˘ÉĆšX—ŘżĂ6ŇŢ© Śxwť[ĺ8B$RÓýŘ·‡pĺÁ*é4¦ˇú®ě/÷Ł01씞ţşc=JR⊚Đjţ"Înlś·Mv OT0ëąŰ°Ľ‘–SĘ«¦G@F,×w©JŚúzĄí«°b ŤÖwtôŤńď˝ 1w<)Q›üÚbŮ&†´§fWëĹ'”a˛ŰâëÚł†ą§mĆ”H3 q¸Y=¤7<'čĆxAÝ@ eą!ŤR#8’ö¨Ç&=f•” ž_˙äŠŔäłCO‰µž.¦6jÉýFÓ¬çdÁ•ZóAM=Ą©_Ó`]Čyâ,ĽÇk(„ –okĺ’uŻČ^iŞKe˝…ĎŹ%W©ăĺČ]¨‡ěcĄý‡˘Ś§=v8]O©«\űSżüňÍżnUÍnG~UÜݱXńd0‡*•EŇĎâ2^ĂśHt&ď=Ă …<íő‡2JsůgŘ$©¶9j„ćµÎg]ń‹ÄÚ×${™őź÷×°1`°“¦K*{OĄňTł†4Ú˛1Om¶R™ŕr=äL“ˇÁHoť{ŕ}ăępÄń¨×˝7.媔nĚ[Ű":Ä5-řqÄu ?3ĽŻ# 75|âúu&˝?Á>w(ÂńDl ţrľßČץĺ-L.ó2^=ż{CK"+ôěr…˝A(ď=Ĺđ ěů’™ęúŽĐÄŘď$ É,Âč ±™äšáç`złďh]AäµĘwś©`w˙ŞmšdFŕÇőEs•*ßµ;d ]Łüł,aE— ±iXÔĹĘe±čňdó$݉ÁÍďš§EݱϗË(Ž™ł2‡ ‚ÂĆś#IŃF®d=ÖV!4Ŕę§Hö®H6îqíżö‹Hŕř}Pě[ĘŽ©˙TX$ů3=n¬Ó´ßÔÂŤ ĐýÎ%»ćzpY_ňą@¦ĂŢ˙Ý@{č‰ůěôĎi]{úQ–=©ŁíKĐ»¸ú©żë\żŽ¬˙ög]…é&žöĄĂ>Ř­úŘy•ŘNLvď|ir0aTwçÎΓîÜ*—IÚ$‰„ä‘ę§Ç| [n ÇŃÔHŻ”ç•«ŇťAŚĽZ†Ä„®ZWĐŔ$.© V?ŇćëÁ<×g[ǽ·0‰IĆ•ˇá|Ąr7‘ž ÂŽ§×Îóô=F§âž)ÔxżđqĹ?#çÝÝł[ŠŔĚ7šávŇĂĹşk’zbDŐůÜc =ąÁxëő»cNăÉú[şcĹý8kâ¬Ńąť˛›}÷®Ô@°äuX+ź ¦Ó±/Äl®ÔĐâ^łz›šJAA„ZáÍią$˛BÎ]ŞČ+C_ľŕNäk9!Äek»«ŮhÉă±|˛#«y’9o[úś6DˇGüU Ń’lëe/ógë‹–ˇ@G ärh^ů+WDş`îîÝa ńGŠżę‘·*%ćĚĎí×[Ą-˝rŐ°q2•Ä˙qUža\9ß'…âş +R‚U÷኶tóĘŞs_Bů›¨ŤuC"ÝŮx4ÝŔ-”bë]jâŁć8÷7"5 e-’JZ#Î#ĺB:â:xí +ü—Q^ô"Ď8îÖ%ČŚvNmŁÄVřşě +«6k#čýą(|é±Wěĺq_ĘkĹŚ›™oÓ×^ĺ—&¦těg}–wYw7"ýQźŐ Ą(÷hÎ7J«dZ/ý_—Ó›¶†Kaş,ćá`Ddť’îURĹÖ4Ä3ë%–Âű΢ř™Ţ5·ł Tt7Tl×T#Đ5é‘ĚXď;¨%Šľk!WôĽW}ç?Ú|~ł+HV.@ŞT9«5J\'&»™ż\e=ŻAWŃów‘çް”s çFŞéeşÝ–uĆ}€x5‹uđ4gµ®şq2»¶á[~' -˙"†vGüŘGó­ąsÉúwüéńŻk,ˇuŮ~őľ?k„ű鱇ş”«ěsnx¶äťIHőŚó)A— ­ŕÚëőWáĺ’ž:6¦ěąD@2„EµŞ%JîázŰTzĺvíŞ&8Ňg î‰Ú„P•KKŚ—[0|ďůťŚĽEUĎgˇ°HsîĎz˙Žiďŕ˘uî«ěŽxmp]úËA´Őđ2b«KnĘ4ŽÍĹ„Śţ‰´vę^>Ź1Š=zmUVvŐ¶ł`±Bzë]ň¦Ç}śy»‘(Ťő€•ÝćJ7´+®Ą±H'áĐę‘p9ë»~šÓőDcĄ× ňŠŇŞ? ­>€#–Lŕ.Éî伮d÷(SˇłśNĄSŇP”ďc— dv*1*’żÖÓ9 +ĺŘŁ•š’äÎ 5 {¤KÓ€ÂLI˛˘ŁÉż\T?ËíRëϢíú‘Ş.jÔV»ÓiĐ0ń\Ż2uçc]őW!ë‰×ÄzÔĘ@Qç„$˘9ßů}©óřˇćŮŻ™ÚĎŞZźŞŔŮcÜ.8ŽŤ lY˛2ŚW.Y…*>ß7ŃĹűa˙»wĽÔ©!k·ČŹ{VëǢ3—Ú=:*žˇ>Ý€ű݇Ç7:ăĺvV«?ˇ•ąBµÝ7f¸(4Ěë MjQÔŠgŹ Ś}§čWQ™”§Ń&©|s ő|ś™qĐÚm©ˇŻľAOś7?R¨őátF ¤˛awšAęńËP2őgĎľcÉĘ ˘@-©nU°—­Ąěü»ĹyÝ=yCń…—GĹj⢛Ži獽9Ѥ©lHÍú˛'hK7q†Š˙NŠůA/!©¤1RgĆ;›ÖC„ŁÍň7x@Ćpg»0ĎljŻ\ś?BĚE;.t GHkű_$­Ýó đŔxBçÚmF¬_PI‹ř‚×çŠuoOşŞ«Ş}÷°ă˝PuLV¤Ő%O—ŕ>R_ęM 4Ŕ˝?‹äĄÖ~ěéßL‡ÖďňG[Dż˙˙Övw­ş$é™ĎúëD`Ô&3"#?tŕéCÍ`Ăś™¦¦-—$# ţ÷Žë~"×ÚR—\5ŁA÷ŠýćűfFĆóu ˝ţا_Ń ¨%Č„Z¦ę©ˇ;‚…/_*ë^~ĂĽžUňé ‰ €X[5ä˝>ü˝ ü¬ó&l‚žţ¬8 ŻX‹¸ąóR¬|óĂk[eXź5Ý%¦>˙öM' ýÉ‹h]Üu˘·0?Gw $%¨ÂNP\´.ăą3’ Q#ŽLvš7ólQŠ;K¨pDë1-ÄíľîwBEZkfUݔ攍˘á’4ńd“żhV:·Á ;iÓĄ2H÷TeD’-:‰«âăe… +•„:Ħ_˙Ż|MxĆ]8ý„2'7P-ňy®:ŤÂ÷ëq¸Ý]}–øł!°ćZQpÖc…UóßĹ*“ľÇ ·–HŻ(ôµjß{“Á¬ătłk±DhĎ +ű„ńăŢkmć–Ë“UQÝ„ßjgbŽO )=NŹNúÄ8Ń–0+Ó$*Î}D¤ŮřĽ‡1d˝âáT«ŚĎP5Â^đĽćiĹźŐä¶Ż%P>aµ5<^&&ǺŖVĹ52‡1‚Đ~bÚ…ČEyn ? %{9k‰îśö©Dk.¬a•–´fý®đźL„÷LŐ\AÍÖí –kfĎÇĐŃíGŮľ»ÉYP%Ýâ/¨ąŤ^Ö] ®ÓLVcPşjË‹Wg(ČLGÖţa8˝ĺřŰ«PoFÄ˙‡®ĽG%,9ťÎLőjXxňŽ +}]ăęzłÎlĚPŽÂşś!–î9 Á&CÓϤÄűg2ßjyß•tD2J”´Wkâr%:˛µDÉŕ+ŘP”ŃF´îŢXf8ŠÖĎ·-tČ_Řl˙y¬¶/ŽĄ¬ í óyŢs-ôÍÁ{Ą¨'ÓPŹgf6w8Ü3Ú®B,™_Lî#˝S÷^‡‡=S^]›^Uä+E›ż˘ç—_ švŞaę˝ćá&~)áŕ­ża14wrL5¤ăýNiĘĄ śYĘ4ě×ăl/Ň/âYtź®:üdś^%t>1ÔÝÖ´tśA5«b¶cEE˝%ě Äłó5ëf•mTŹR*ŞwBŰz¤í{´™ö•pC›ŃD&Ĺóé¬g5¶§ +:Fe‚Śń¬ę {,7Ž +‹CžšRě¬ŔąĄńĆ1á¬S-VĚťËíX¤ň¦m(µG…Ľ¸žßś+ĽŇgwtGx#€@Ż—V %tą¬UŚÄ @Ďsá¦\‘2Ł=Ż˙Ŕą·‹é»>[™™IDă.ä̧ "˝5É™^$ßc”SČ W ŞŚÄs˙˘«™±T[ÁĚčwůé}ڏ1ÓńŮ €÷µä†pýýJąÇú”Ř="§-R¤íE8g±ŠY“ˇˇ ]KdeŔióď+üR÷í<Ě" ‰—őŁŽ‚Á^»ń‹đ:ý…ą$hYúúüŚ[Ŕf°îxąŇcgtĹEuK:ý +eí ˘©Ä'¦ÝĎ…yĐţ™§ţ¬—¬ŐÓünP’Wµm”h±„xG¤”·č‹ľę?± +nˇĄŞôw&GPýźí[ÄŢ"V«żÇĂ€ôá–׹ó„ŘJ9w¬•V×0ĚÔ:[5Oôśö"[â#M·˘űĹŐoîT5ôĽ%A,E†˘˘M´/”LŁÖďÚ#Ě 8ŇŠőîĆSP@BYÂáí&8QÍ›x;Í”=ĽËB¨jî)ş!ęk„>/ZçŃ{©jeŠAĚ%…oĎ|N c čÖ’ŔZcۆ%ě6­ß:qŹ3Dp˝¤WZŇŹW'ä<ŻŮTě2[2Ĺ8| K#¬Űö.‘ŽŘŃŢť1âÎqĆD#תťA?e]knÝ1‰ř÷¬U©ťŤzż9ŢĽŁ•Oz•ńâĹčŃqĘ׉ĄV“ l5ж±9‘éc‘X“"Ţb‹Âç˝g°]íĽ§6J˘¤¶Uć—=Hđ«¦rWŹěĘhCQ‘đŹtU†äó˘2×®SÍß{\¸V8Ä«вČLXĎt°T{ć „„6Ę#ěŞ k>‡=kN¨!3Ł,!„˙ âôĆ6)GľďşľÉ™ ®t2T‘Ůwž|żŠŤ:¨AmďltáŃFJ/FĽ^? +ëwµG®*AÎŘ */ #çaS¤źzUŐ«éq—Îrý¦+ŃdeĺjŠEç)Z¨›ŽŻ% 1ĚŹú †`´ŰpjsIŞNíQé–‚Č`%ů(Ný|äŕxpEi©ŞťeM2†>g¨´ś¦ÉŐ, ö űi H‘4e|˘kc đătFź¶Ćz$eĂ6DΩR&< †1ňo>Hw€4ĎUÍoLhµB8¤ŢLš‹%5Ă˝‚‘©kĹFÍc7HĽ!¸B}ĆĎWčá2koáŔ?wN Řć&ŘYBŰ€s‹1ĂÖč¬0ĂŐG> rđ~ćzŘ m¬üK¶WŁÁąß‰]q’ýĘChJd6X!’oÄĄš$’6* ŁEôĘĽ|ńŮc~' ™©Qć­˛J‰ëŠÓ"™zKöHŕę®ŚŠ˘O^ŞnlýT>Ătž_ JrÂÓ‡Ć;ě—$ËŰuwĄp°ď&oßjmW۲:ş ÁzĄ@')‹dŞć?+ĄNÄÜG«-™7ô $üYőkgŔrgşüŮkpšnŃ™yęČUÍ?aľůÉ4©Ż«Č¬'üqŞxeÉřřőő» =6×:vŠ´cőÚśˇ}Ďčąń˘6Ľ×±/ü:± +šL”…łD4¦îď°Dh"·W?‚Ë) =ë­v­Łäń™dg¨G«÷—ޱźyßţ?9żÂVUß@¸Ü8—CŞ⿥‹Ěç˘zć"hIN⥿Á9šŁć¶§1-X<–źŐuO‰Ď˛ý9W@txÎD/“ŔDř„۱¶€d|±Ĺář h9qy,ô’É@÷Ćŕ[ˇ±dâ:ˇl¶ +Ńüíę€íHĚÔaďÄ;Žwô%@"?ÜKČŔŮ÷Č ůjdĂK(áąAÔ""ÎT˘ +˝LcëśfŞnZ@VuŐDfM0YČÇë4‡Ř :5Ş¸ĘŽ2KĺßďŔź•<ŚĎ]Ôł8ÔöL'®€4¨®˛j#o=R›:yňd´ŹÖMU´yÖUϤZŔ̆śXˇuÇKĘď®%dB”8˛„AĽLäř5AîkVŽó~Íg~Ƹ´˘]ż’=Ő"Q'ÝĽS &ô+ő ý(Žź5¨Śk6îµĆň5qyRĐ8ő´)ÉpŁ÷Ő…2 ‚iÝ*Ą0s4Ľ´ sÝ-)ŕY'e6YéU~%Éa÷lĚŐÍŐZ $ÉČ,±Žś6yt§UăÎÄlńŃŞýő µ*=űýIŚ˘ůBH߬žf¨ ţm—óo¬Ţź’íP ó‹ń˘ăň óꊸO-‰–7QQś¶,Ju$ŹUÎÜQK"ňĽ $NŤM—rŻo$¬ÍLťąWŮP +Ď(‡Ëú:Gz+Z"`ÉŮ@R\_'˘§NţŞUHPÜŠŇŘ +ŠîĺS4#SÁî1čI’š_íĂ+˙עą>—@«pč‚’8Áç*÷vf}ňB&˝ďä]ÁÎ\!oŕN…â,k®­-h܉Ů3kQÂTs \>)“ň·eÓ“”–‚é_ĐáÚjÂijBđ^|{8yÉÎj䂨¦ĺ»BĚíYşĽěÇV?KY„ŰĆFç•ŮŔ-ôłćqTâLŞě0LGËłyŚ)Ů(–Ž$ŢĚn>;•Ř\â.›2Ň4L;gaěę +ŚY°ÁńĹ +»Üů­Ű­ÎͧiFä]Í!ßż!|P>2 '—zw}ĘÎHO?ŞŽĘ•Ú2qśQK2Ä?Öȡ—šŐţś˝ňÝ<+ěvĎćóÚŹE_–úúŇĐĽ5NĘĂcŹi„/M«ă©źŽĂ,k wG¬+â,Ł4éµ<ôxI!1NŃ#“¸Bťë.Ó—â—ÜXçx`@WUs Žü"ez»Â6 ,vfłGÚ ¨ŕ’ćÖŚ*ó“˝df˛ŞX°3Ňß0ĽďĄĘ>‹™r˙ѧďł—Â%žT%ČwLjm,ňšv ű°4Öű'¶ňe2HmÎWa#Ó[‰ěp<Ń€č×›ĄĆ‹ĐüĚö=ŔŤ]*r5p˝â+m˝… şÄăž7§źĚÝvĚĂ{!´†Ůß–÷Ż.ő¤Cë;öPnL“n;*K¨ó)€ŻŢV« i†ě +˝żäç[´ ć&,šˇ:…ůoŠŐt;žë®±±A(t/ ›ÝľťÉć3bÓĐWťłđ^źűÂÖď.÷lv#B÷ +c îńgĹĂDä€LŽ«zwĆ9@<[{†’x(gŮĹaÚ2ytHĎl·Ŕ×°x +w’¶3NŽ_ń6Ŕ$Lmˇ^¶ţţTŁšţDrÄDŤĽ/[)łŹ&É·ˇ)`zźD{ý¬.™#µţôţĆC9ٸł&·§Ró‘ů +˘˛tígčS©=ë káxhłFźj,ĺ«mí“™¤Ĺâ>ťĂśfÂ\‰ ÷ +Ş)#¨.Šţ&Čúëç±Ŕí™…nŞ^¦ą@O(^ĆUi¤!–T—†Ăsž@ś‹Gͤ.F‚Ü4á÷HM…Ó®XŞp)ŔťűŇ‚łÄŃÖrÖÖÚHě±<>Źr—ŐŃ«c1 uĐňÓúśő‡ěľ¦rţUŃË´ăZ– đř'Ú?u–»P˝WÚ3.‰cSŻ`či›j´ţFŐ#ZŁxkşçŇ7†Żp9s ŕŹu¸6‘(°ŻB/r‚ŇşĚI´űHß\Bo[A•q\ĆNŮ‚ĺ/KŁĽ% ÎăkďÁq|ž+ť˘ţÖ”[ő(F…+ÓGiżł˝ŘL#WŹT+kÉ̡4g7§PvEŁ4vTéJ¤Ů‰jśç9śµ$ă׺–9Ń•h@łëĹ€ŞŐýc‚!éťKĽ ±Ă„QÉ­Mc‰9Y¸DąÄĚżŃ`¦V\5Ť•C{~Ň|?Ŕ ÉUˇ‡;ČŘ0§ůç“76Ż[uYş‘PD ~ö7 RÁRşśqfJ@ů.ÎUůߤŽEÁ+kŔ’ĘĽ:–®Űj.¨6Ľ)™ t/"1KPÝ+᫉ßLHcëśKoíčőÖ!›(Ă‘&á­Qd{îe¨2ZÍ”ăqµ72Ú,)Ú čÝ庪iKŽS™ŐĂÁ­ Čů kţěj ™'1â;+&Ďă†Ň;N¶Éşń3ż˘ŕ|óě}´Ö +q˛ źViÄ<ÝLÎďRÎěYB= ö©j‰@źP*^Çéśň,)Ű]‡íŽż}§m7ňAdQf­‡Šşę[ŻQC{Kz4°Í€ť^Y˘cwµmÖ·9t[‹öŞ÷ý|ŢBd:ďEŃ^Z +ł`ş©ŢyXQ˙ďČÖësđł7¸9ďăÚ§ŚBYş.ĹQřŽ!Î]—W  ¦?ë>·H`c7ž~Ô]\uSźRŔÓ.ŃŤXéĺJOTűŹ0ŇΑB‡Ąm÷Ňbć+Aę‡ Ú]=ňJ‘­;/Ö“¤DP +âŚŰâ-b^bp•ÎŞX4yęaŤř Î×ů%[ÄźZS¨dj÷đ?EČ ťźCs$Z6í3¨K‚iE Ö٤đ¶"şé…"âVTVĆVĹO©|çâ?lI‚JBŚ5%¤}$}Č€Vž¬ű ]« !-B59ęZl˝¨ęlAĐÔaµˇsăńU:ĂŢi»p×]×Ë«Nݫӫ÷8/ßţć@ąz¤#qfQÁÖ—ö,ť=wđDtkqřXľ<…+<ŕâž­ĚEŽ7"ʰLt¬«{Ď8X'#΋‹Ç4jŚpÔsö÷Ř!„8±E‹‘¤q‘ŐŽDhĚ`cţç ‰§¦8dcMäććĽRő w~˝1ťáz —žyż–S‚¦_Ż÷J* +k{ÜÝĹ·7">´řzĘü–EíStĂ:d;éC˝»şvúö‰X„žHöB(îl‡W6)¶×{ G-X[=0ŃÎ&d +8ČŔ$Ńe ‰KđjGEMd°ËŃš€Ţďi‰}ŻÉ¨U8ÁRéŐnh°Đţ'őĘç¨(n€÷˛sŚÜîp¤pˇ% ô˝-)çÔÓţŃ?Ž÷R™‡ÝT”*pq0É÷aFpDŰ÷% L5/L8˝üĄµ,ąŽř2ç¬Ěüa2üy‘„‡ФhĆűĘüăęyXPµP–O ©­ Ş=Iµ6d^K»«.Ĺjyž†žô»î}–9 ?Q—ôEĹvg +Z+1O˝›¸¨ ‹M~řĚüa &Ś7&Ž IŤ3ý‹%;nŔ X:_ňn Äqm]÷ř ‘ 6·,ŮŰ=|Sśůâ—+éľĘ•y誓܅ +´{Čţ™EÜ”ž9˝ ÝŇ„_I*áÝżu:Á…’"˝Vź`K˙yŹŔâ +ЏŔú.˝¬­ĺNF ţ[EĽ3Š40Ż \#[řĄs3­@ĺW#ŹCŇTP´Ü´$Lţ‡!,2ŐšuُG3‚Ň‘Š›Ů…‘Ľ-ś,^Möťŕzb>Ď|î:OĄâFÝë·6üĘĂd¶ ©ÉQĚiIU ±™&™z-µĽ2.ČQ‰×«ş$Ja9ś«”Őď ÔvŻŃžpvčüŰXŤ$š\Źř +2ř,Šă•kе×ęQ+~%pULĚž‚Śčő{őn ÁŢGŤö’Rş«ńO¸×Ť„·h‘?«PČ7Ž$-<ÎĚkţgÍ—“î _ŁüßT­Ľx,4IŽ…˘Ö çXß(2–Ř +ţ“^$ŚäÚÂ~ëH¸#q|QŮńµű|ůKŃ&ż˘RYËÍńU[úS›ů‘śî針óŁ +0ĚT…ŘÚ‹¦7{´´eäĽH‹Ŕ÷Ŕ÷hN_Đ×Ç{­=•"Ő†}&g°fę0,MšW¤‚Ďš…ÜßBĐdEXĺ@>}JŁ·_ď ,ĚżZ/ĚDv Č“«AÖ˘9}Ď_YĚpč»!čŤvGsş‡ńŻčCĹ@Ľ6ó);‡łÄÓĽ¶Ę#"e ZPż·ÂNÔ2Ľ˛Ţ=d˛ż= |9§öN%ĐÎśKFŘýšŢG9(q” 7˝Y×rĽÍA!¦Pěë®Hśůw–ŕ?1gÉIŻÓüŕž™žu-šŕ/g!ţŮíµä ź×Ú1¶t×ÔĽlű iRµ«ŻôR5¦‘{Ý }|«Ţ˝ćŕŁßăGÝ…t"2 ©{LÇî%ąýáťy"ř‰ąžÍé‡ ę˝’,řO” Đ›ä5{ě“PĄg•úŃŐ%ĹţÚńâCćlý=ťâeľX)ĐTpHN۵żÉăĽO:ď]C˛Ň5!Ś! š* ÜR²ú´:¶<3äWçF<Â:jDGHÝ~°ôŐ €k#}ŻÚ×(~ +šIkňČ}ކďO§I> +ĘąH#Ç·NÓ=‚ÓwRšg%Ygř6X`wŮlb ÍDˇĐ[‘2x 8ŞÜUŹÁiUOkőmŇy`먤7­ŢV–ľ™č}á{ęĚU’^G†Ý=™~ xĘ.Ň1BU$+Ň÷dúż¶~oÍçŁqŃŔÓJpU¨›§ĂüƸĄwDš† Âłú|x:Ń’ż˘Z›ľŰŽ6 Žw/;kĐ­śe««,f2¶öUC-oľ?“m¨ÔóÍ;pÇxŰ&άvA†µÇâóž6ŹŠ›LŽpx—IĘŚçŠÎť,Ů.I(ă/Ű˝çŇ‹ŤwÄ>Ăfzdyc÷ŕ oć>(3Í ĽşŮç•îĽ2E4…A$±tDż~Q߼ÔaŇ«öĄ’öšH¡č3î{ë/zť7űE\ŰŕŇ=4¤8(&­)Řŕîw‡Bu˝áp†ľ»¤ëk$ď +Rݞ…+ÖFs·Ďx›-Ńpn$Ô5*ěµÄŔőŚŠ@5ŢĚ\gжç ý<Éď´oh;Żä˙ Ű,Ď Š‘łžµ¨[‘+3C^™ĽJZ-ĺBÁÇÍŞó,Ć®¦ÚĘ“zŢĽLpŽŻµjC,ĂgٵđDŐí ›ä)p…9“ŁčŘ:!µ)Ą¶řÖ ĺ„Ô+‰}Ĺ7ôč©Íh¸Őt/·p§ +·Ć†ĆhnKĎŢ{Ţym÷Ń*ąµU8î!ŢľÚ)Ű`*ץöQŹëŘ# iw5=öľV4=÷řHTŃśĆoű ŞúĽ‰Ľ ˝ç'­«R,`óݨúŐµ¨őâ\‚›'#…Ź1!˛ň$×ôÖŽřěe¸‡AHh–¨ą÷°N\‹‚śő¸ŚüĐViÜ˝qľŮ0n +„sm RŕăMď;5,ŔU7Ys`üe’\§şSŮzV·`‹Lf†±ç!­:>ŞcÍs„şj%=ŃnË;pG–ą^żŠ«H˛}dÉ™Üél¬| Áůo”Rq6"Oˇµ˘«űé v-§4Qž^ńP±HŰ|ył„Ŕ(6ÜV˛>ÎS@»měç{Ą[ĂsÓQ" +z|ěĘÂ{Oâ%ŐÁMÎmŃGČPA„Ä©8¦ĂNuTOöČŇÁŞľQ›–ŮnNdß>Ϧ3Żfş±é4O‰j 1%<Í«z%,ÚiΨžUíÍUAFé‚x seřî]>)2Ş‚=(ÇVKb»iđŹĺb‰m¤{Wˇ C'™”ďYbÉVá«D»Ľ,í™Ô ťcŹĎ—%š#*–\Ń›¦´af‰ÉÜ ™Wç®FűŔđçďŇź8Ľ«÷ÇÓłi|jzęĐ+_ŘjeÁü”AÉZűRoG ďëJ°2Á˝ť6ŘĚV4FxV®+Ńq݉S]µKĂZĎ09čvFnznż r.qÖŕ¦ÜÁ—×ßî8÷"źÔÄٲŤÚ@µŠâAäכń@KbI™l!F@†“Í|‹cçˇÄ8Ď™©ő<Á4/Ťó›Ćé!k!T2˛GmšŢ te•řl€^ź<ÎýÚ´źŔ¶ń=śŕĘöcĄ=ÁP2}©J±6Qc“ĂMä‚°ÉŮx{’ŠxÇ8LÔ{Gişkíé×ČX‘;Ť®Ę+…PnÉI]&ŇyüŞ "„7{ö˝ň™s/Ĺzˇ’ůzc¶#KŘ­^ëíQš&E6÷I{Ż…n“.Á~.xôA`žJ(–É»%vO´ö…"*ű0yA6·Äßó,”§ +Ö(‚ëĂ*ż’Ŕ3ä“lLxŐŞ z8rfiU%:T•íą^₡&/oGGŤŮ׳ârlˇĎ7čîߢŃ;ˇkµ/9Xxüýňş‚›Ę_Şť,Ú™g+fJĚUˇßźµSž=˙*–o ”[ĆUSą•4şqD!Äłţ*TűÂýi4€Nƕډg˙‘RŰ+™.{ŕ W©w;úP´ąŢÉĐö6)K$)gÄË«CÖOĎř‰.J‚G4.Ţ®S3sš˙ +®®µÁxG®ňXŐUęĆ,đxgr'}¬« +ą™hÉ+ÍŇŹĆ١/Řë0ٵźÁ쾪ĺ ÇŔDď*gŔˇđümB1•4ńÉBY0 e2Ř|ř]ßfăW¶Ą;ëtm¸ˇ_ťVŞf&¤3¸Ş‹śů 'äo6Ď[čná]Á=·ŹßąVąwĆg8˛UkuISśě‘ú*÷H•_Áž÷q¬;™z=dőŘiě®ĺĆJ@¬—Ăn†ťś9ë§E´L4˘‹őyĽäŚź«ú¶˝łf$ĄţA‚ý+´?±Ůţnb(Ă`é4›X|Ő +3(ČőL s©# ꄨjҶ':Ó @ç$ăß§zĹŻĆźI„ÔÜ%sř +Łks±˝ÂΕYBHÁőTCÝą#u›ˇNMâ!µżŚűÝ_łˇ­zát{@ Äć—QÔŰ/dKKb˘2MŚ~ ®ľB!sÇË­&™éÇ(ÍŠÝVěíÁ˝dű4.ľ.Ç‘ŇS˛ÎU9Şú^Ĺž˙ť±ňCt•<ÚA»bdŢfK6<5 b\ź.DŹĂý\’ß)Ž{‰%±úµł`Äę…×`9dˇR˘d¸@)›€LˇGř• Ĺ@ź÷ZbLëŦ(KćËóĂ`ŰŁ3ýhŤŚŃßKŃ},Ź»>Ç ÁoČI÷ggďĄTłÎz°ťYĄD”US"*füiţůłžh\Ď‹ĺÁňy Żś8Ě FVš&Ý –§§Ň0.+㦠>2#ݵ1ʇ-ĂTígă*5׺q=×+K@tÎT SŔÝX€V‘2÷±1lţŘIݧ…AsSÎ?ÓčĎ*J đR[ěĺ„î€'¬›LhZc<0qďç(qöyÔä  ,ćľÉőĄÂŕ4¶ÉÁ›lŚŮçyµl•Žč+Đ‚Źpp%rmÜĄ;éȨŻiÔ^#Â-˛ą+ň ++y”j¬ľJ·ňâ°ĹĚ#ŮH~ó•Z¨Ţ>:Ó˙Šme#”iPřž5jܢ3í$5S—ränQu‡<­ă„Căű&‘i Ňčă¨ęsăÎIŤ5ŇAbŞe´•sGýďôÚŕŤzJz úĎKd$÷ô”ŠěÁ‘_Ž•]Sšfę·můé=ps­”™M,ÄF3ŔękĽő°‘§>_žw>Jë"f^ś3ި4‰ÇŢ) + +ż!lý,®6dě5Ue“xż7É™e/ŰśťÜÓĽÉŮÇÖţ“žZ1˘ŢĂíkO±3'ZY]BAu+ú2cJ«qL „ýţÎć| PôI0ĽrvšÉmk y2ĺc~Cc¨ µŠ§ŤěcEŤI¸˘á™.˝â°¸š¤łKĆŮ»Ŕ«-ń‹VƶfíŔ ‰†‚n—UťmÉ&—$Źu)ŠľTZhP v3ź łG«>zޞíóXfs˙Ăq IĹţş1±€ţ•Oëď‘űꌹęZćNôr šŢx3BÄJ‘™VGČmD3çÓ3 #K éôGý.Ą‘ˇ2é’qÇűvz˘âˇ±‹Ö/*Tâa'˘Č4¬±•xlRnľ*b:Žăŕ™ÜmË;s“jÄĽ1 +©xĆyâ@µg ÷Ý´8ˇn¦·iEĂ=(d¦s{Ěď6Wő˛·(G^ş;eďĄ:ÉkşÎéŇlvw„‹˘ÎUQµëęk$Ę=šdd$ćSS‚ ŔŐ¶‚„=M†ĺ»Fgź{2©îsĹô\X…@Ż>HťY2/ĄÔ#íůnŚy”ꍝ1Ďh–ű´5ł$‰Ů„ď+¦ YEŻ,ĐBΕ ‡‡#h׊ú8e•pxc„ĘF{%‘9ÓĽßFë9ůĹ5~ JýÁ${Pt·`ór đE®OíY·YąˇMĂĹÇ *k™ ĆA›¤žÔíxÖh*^ #¤Ů§üŐ7|>MĆ­}vŕAcÉ8Ťr:ĐÓ%u‡Fvż‡“ÔćYú!ç"řŤE°†{Z%\¦a%]É.\Ń9źXIůücM†ďČË)-qĚ0řߨ·¦ěČäź'pŽo&ňęřrĚE}‘xĚsĎ›š Ö3¦Ő˝â30oŽ‚O‹Šş’°ŐÁsŻßŞ÷jîň@ţ=5Ýjg\ŁáĂ“=J˙…aoĽţV·iŐ#c{VăqsäůV¤ŁŇwF’őŇŰv`.IŔô(“ů(˛ŔĽmáŁc!©ńŁZä¦/Jzůç˝ČtĹ,_O› qâ3Kv‚ )´a„žČKŔb¸/¤‚•ă&ßy‹ŕô€rҵűđ<ç9M\ĺ ˛5¤pŃ)ް¬ŤqĐ1ŚyŤ%ié=QÁ-ID;ĚřŰQ|×}Ţ"8W3°Ľą ÷b°· Ž,!7äRřvö)ř +‡¨Y›mŽ™{&´kĆÜ‘$GŕăşA‘Í%ˆĄ—ë4żâÇ»ś=±őg&G0jë&“ľó´$KŞ" ¸7&bŘo·O¶Ĺé#ě»´mŽÔXwú-2ókÇč{>ç^ʞۂ}“|ß‹3o“cÄŇé®íäôéÍĆŮK>bšŃ"č·µQ¤ś˛ÄŤP®ěŐÂoQś~lŢ{ÁšÂŘ ;.@ł:`8ö4j|ňsĆ ¶…«%AFmY°ďڏŇU—=Ż[šŰŞ÷˘*n¶Á <šűĹiÔŕř˙O˛ć»ÄvN›7áóÓY\ +¸ÜءdĽˇŽ…qŕ|¸j°4N8WÂVŰ;"ŤîB^3d¶2÷"{ĺ…˝U6Év؏߸~w˝‡ńˇĂŻMtTF˛Ýg˘ă÷~†ÄN±&Ź­*;K#J‹”ĽÓv“QÍ#á|ިIe™ÄĚVż"ú±G^+’ ¬{€Wrźéöb"¶2ë·xXŤLg©™LŰî…j4Ó|ćđŚ}Yá-ú• s†óÄĎý­ĂĽo*cĹ‚_˘ŞŁŚćguŤTé&E—*ü‰45˙¨UÔ«źí>ËÉběě@ jśÍ¸˝±SůNŘ,ŘS›]ô‰q€ńÉ^SůťÜŃF>!ßÔHś«¤Źń…´µB˝YxyŕLD„‹­Żw’8Ĺ6—ÔŘ#ĹR‰żęYQ8Š‚¬:GD4‚ ˙x•5¦r™F€bÔĄ€v{ŹnCPěOëÍd„F\K¸›CUĄn6"hr‹ÇbX$bf +l•Íç‘fFvYků †<¨ĂŽ›3śUŕ)‡ň1xŐ\·€5ˇŃi˘Í*çÖK”2€ĺ@Ěl4G,Ň Hâ ’>łl®x€HO>ÄGĵ ~i´iP!ą_9ᴞϊśĆľĹlĹą_L˝Îăónŕ% ¨ä‹eÚďš«dň°BqoŠ/µ‘%‘K%¨â\ăQnr=®k͵úO†uČöŘçhFťá‡B^2'pa~i¶)‘˘{ÔŁźL[4Ƶ“¸ˇ„“Í’+öęŹ2(˛?¦ákžˇˇÎ/ uŚG28{ˇŘ—këz­yÂ&á«…`荷:`qjx¬Rť–îŘÝ‹&}DR/Fš»µ3n“Źą3H÷V3ăťŇ ĺąjěf Źg_ÝóśNę+5`uĎ5[Á‡·…6׍’8§s50"Ş…“šÍLu3âó=JÎĺí㌧ #kK ÷Řű\Ő›ŘI¶µŢ@4Ľq +U´“ZąÎ3ÓѢŠxWĽŁ-ĆÓÚbáP‡4 € ËěÔýŇÔ8›§Ľ~î8”żajŹÉĆS`Ŕ„Ä“9.|d?*Ţ)Fą]U€žNŻ÷S‘ŚŹ±ćĂyLśRl™l˝^‹Zą›V‘aÝ”ń8Žîů tâ* ć鍺8ďńĚÓůµ°µJ>;ţ˘¸=oăţĽřdNcÔößä“GÂŻň:Űs¨Ó$žżUVjš@_Ôl-Q´qNuú°ą`–8_şu|?¨/óŐ šě͵ůâřEcßC‹r«˘r~PKQUej ÁAľ7ˇëĎAíĄ>l§\¶5®Âh·[Z›KźĂrýšDřUˇżéâÝSA Ĺ>íÄ2w…íôŽĎAč°ďĺ +yĘ~G‹şbµí\Chűů1ýŰ»€Ůťjş( ‰b¸ô^ÖĄěSŞuCuú ­r•{{äYö’űjŐ(jcxQńÄçž§Ý)a¦uLTł9í¬<é"Y˘ú„ €…ÎÜ©GtZíŤý^ĺ9˝˛¶(íI=ý'dýJVgž,™“PśQ"ţĚJÓ—“Efc0z3üĚ˝âő¶„p7$^śŘÖ0q3A»ö¨Ĺ§íŔ<’ڱ,ý ZNĎ•ŘŰĚ»Ęţo.ž3öÎd2Kđ¶ĚÜĂ{D±cÜU‡3B3tX N–ŰöˇnTˇOe e00Ő'^©7ř6ÄSş ‘43[AőÖÜ-˛Óg¤9Ţ×Ý=DzĂyąóĄ[d§Íîč{ÉaV˝ůž%˛+Šah~ýÝI˛'ŻkőĐĎ8PŐµŽPÉÁ˘xkgýŞů\É$B`€ă†ÄĽk} +ě<äÉüÂŔkămx ™ÎźÎ]¸I˝ęZ0ÝŘ łnĺé;ćŇ,—fVA.牑Nz%¨°ślŁ`ź*˘Ĺ¦‰´Ęü_s­ĺi˝4˛źëM>€Gźń ;hFĄ=Â{'Ă—ŁíŢóÖŠěÔĘćwŰWÂ’ă©­śÖrŹěô<)f.xőpY{‹ýbOLĽÓ +Žyˇ7ĺ +Ä–° M#iK\{…÷˛FÜc𽢢ͦ#pÖ€n{żT?âČ8°€ň@Ěź2t©sKĺîÉ)0Ŕ6fĘ]/Ý5Ü\Šz«1é|ŚcĎD˘˛WÂXśĘś 9BOY˝Ýí\ówś§=YÍ=Ąk[řňŕša"­îďµz™yŢqCÍ  ŮęČŘŚ¬-á s<{R#Ě8$|Ź(’%[đŇŔwO —pCIĎlKĘ2‘‚ĺyx¬hEü ă˘c‰®? eýšd˙óYĘś•ązŐ}[ń?ĺ§G‹ÓAq˝ń—dF­Áh,FxŚaÍä*ţőăűEĽŇ)+Ţ [óË@ĎFňú™{ÎěŢI­tă•ĘNj奇Cl8¨Ďřç<·ůF¬™žIP!b0sĺj†¶_ęq)‰Ńr9ňËŔúaľĆҲŞE*NĺljvÇGT¨‡î+GĽ"ŘăJ2’ą1ČYls´ÇJi†şĎoŠň î‹ôŹDŇ-mxĽ?°aĚž/ :&fę>ťQí}ôبĺQfuO]7Qßż•‚mź›0óH©ýT.0Žtű±OŹĽ4‘Űcý=ęsć>&Oí÷${ĆŕcyÜçűĆ•Dn°@ç;C#E@†Ńîüé ‚OÇč VL“ÔZd¨o<&C[˛+?1O©hĺ^wÝc™é1”sAU3ľż·H‹9‰ň$”î{˛Ę( ,¶$Z_ŘÄ”{XäÁ޶h¨ĹnĎaZĚĘnn`źëÜÇŔ~˝×¶ +µmş‘Ąš€č^ĄpŹh`oŚcGčH ;ž«–`ŕj÷č–oö2§ĽmĐ«Ëv×ň’{§ťYĂÝ—U^ |h6Sg[„9Ä ęíQ˛oy^©g$YÄľZ΋žţm˙ ć4Ç WLEܦ¤ť˛‡§Ô’Š©Á°¬ćşoâoţrýO–˙Zgw;bűqĂJNδ¨-¬¸‰)€ČŽ@iŮ4Žň+P9™Ů†;÷9Č€n$K/T»@#‘1©öW© ˛uE€wËZ%ĂMNˇĆ5ŃZ®)ŹëfěÚăż!7X…ő;"¬;ÄMbÉod†Öż­7ő&&Ż•˝Ú%W4ľw<¸ÎoB'(ľŁ´`ť$f‹t +968 ‹fŮG.|ń´Ě2â{ńň(Â[ë+whˇë_Śě`U,2ćv +˝0o™ż+Ż.ŢŤ7Ö^öYđÚ[4Z®÷T…Ρ,óĽ— fŐ.+É™9ĎO-_Qď…îď¬`hć;5äj ˝zIş#*WďąĘ’ R5w/WžŤŢt¨ +†(NbŘĆj]ÁŻÚ®Ś+?z‚+[í¤Â<ŕ(ĹJ8ů‡ku"Jh-Ą&|ÍׇɸĘpf~ÎLä8zŤO źzt4A‡`­»Fč=RŤ<Ę!ié“RU=ˇ“†9÷ýYýA’IQú8çÝ4ďÜDđţu*\9žńřPJć jěv’…¦†źę;¶čś·…ÓčT°đťv·ŽÓ\ŐI~€ŘÍfĚ ¸[«´jn ١ođ9—]ÇĺLHFc —vĆÖĄ.% őŃ19˛(ńů»ĽW~V‹±ÉM˝€ l‰yů6÷ 2IÉ­ ^4íZVö®śćYě?V;Â)0Ęć&›ďL‡™<řÜd«ífż{´÷[~ą™˝Ý–­ź Ý*ŁX׺#ĂĹßâÜxG´÷¦čő¸@­âŇ\!w«{ÚŇţđĚ3M €î–Ť?‘‚4uąkg„ißÉ˝ĂăĚU†»óěđŤ3Ďb˙ +]qÄ%KřPF€‹®ů\˘ËHw~rRŮ;úĺÎáˇĆĽŢ— ôt·=RÍo¤ĘçµjŇň"›^Ţl§B§”ü4í.íĘkäTŮ"Ţş››DŚqhَ„®>HOmSÁ'›ë†^t”ä($]»’Ľ}2’k„sCĐŻô K;0ť­€G4É2ęÍĄ@čLڍocFF<âq¸•’ŞŃÍ©ţ—އ‘ „} C@OgI*m{Ôľ#zwŻĘZáʲYǧ:˝7 Ă9v]`)ůUŁ5ÇčĚ浆Zć°B'ĂĹ”ťpĹó,LľÓ,Ą×^ă@x™qć ¶„ÎĆ=Dő& +¶·r™އ!tÎÍM IËČ*î'$ś@ ›¨^ńťLČ»Fä63¦ +CówSÁ%™}e‰M­HyBŢ[ńě1Ś–óŠzĽKo= +C¦Ź„<Ş˛¶©N:umńÍ®%ş:ľQîk5۱®¤‰‘!{/EÎý O ˇj›-ĺ4Bľł~ô §Đ€WőČç “ćäć8öć›Ď˘cŻ9VłčUxCgô€‘ČQ®ÎcőŽÚCOŁazÄMĺ¶~duFÚáŠÍ#±q¶Gŕ¬%ř¦™¤˝b!óŇ„űÍGČ~^‰zŇęMŹ,íd±SjÔó6j‰x|˛XšvĽŤÍ ŤěÄN'¨ă31%?~ÜŽÄΦęŤĘíť…™.E) »í@4X÷[*ăxž€¦? ;y6|ÚąńÇ;·JŚż! % Ş>Wô +´“ćů„ŠľŐČž™PÉç1ąŐ J!®’‚'W)}Šë žDäd^óß^‹‘Dł‚Ân€äNY`VU˝FP#,01Řł„G˛żč™cV2nočŚJĂ‘ÎXe&'pJxý3rşČýó +9&ëH8šO…Ĺ != ä i¤ßN]M9łÉ_o«¬K-Ś ÖuÂWń˘„rŻ(Eď.Y –Öěő}‘ŽĚ,Č05ú°ł”1Yh~›×‰ŔphIvY…#ó¬"ۤ„J{[’<ҸaţŹPX6 ťNś°˘1"Ýţ€ňVŘEó-Ě KZQü!&ÖM”Ç Ĺ×^Ť{´QçK‘·d›Ďs+ďńďGĘPÎŰwŠyČ®µ-?’˝îJp™×ú8wI··»ż9î}> ™÷R°öşn =ŞŚ˘\6‚7xY[N𠆶‘3áÉ,´'ł%Gδł+ń´Ş‹hp=ýýÎs‹áŤYő»ÄĂÉyďë`Śz„&ÎĘî©č•âŔZł±\Ř{ÖŃßOÂÓ +Ý.Ka” Z…‹=FňȂ뉎#¤čŁäčMk`·U˝tś<ÖąŠ=«ŃĂ.ěYŤńůőbeučÜw"LłŢ«®•÷ ŘjŔýó§_)`˝ű]ö•޵(÷W‚dŢ?Ţť +Á“` ćt›ę(Ó%ÜšöŢţ¬v¶4§#jí}t®ĎzÔ÷óT3ŰCP›mZ«ążÓ›óăP¬÷uJđŔ)=ł`üŃŞ3p®TĄiřĂcHýúÁ;ÔqŹ'*ń;C +Í’Xg´4{Ą$pSńg[ßHW ¬Ě@r´ÎBÇSŢ# óáë ďdŁŢű0%7{âo4„Ół VĎÇu¬ţúĹë@t<ëZ™)Z–{řÄO,Ww, Şđą‹‡]üľB‰É9ýâ;ď $»°‘î.t8›ĂX®gŠrE2Tá;$ýăN\HŻpÖßJ\GĎ=ˇ›Žš._ŰCŤôĎ:üĎ^łY­*Áč‰)[®ty¤¶J\pŇ(ÚČ*v3nR‘Ťĺi:eVçÓ.ŇNý°áÉ +‰îyćTedQf&őZ03R’%čd/Ë÷JÇčßç^Š]ľsÜŽ!óˇ“ÚŔŕ{Sń«ŹqjdJÖ¨ÓąĹ.i(Şi9Zś‰ćĎ™ó ÄÔî´ĽÇ.#nú&Řş=@>ÍĽđq¤µð5÷ł3Ą9Äa„ţL°ČäqŢř‘Š-wţP,̶fE>†ý⟎d +qFżjĎ´C™¬kĄőóBśz ˇř†-~@pŁb5¶ ŠăžĐaŘf–đA'‚mr_ç +č‚ÔŃć®jć^¨łTJ ƲAŠGm)Pă`, +„ˇť© !¨hţzČţ/¬Š˙ Ëç3ëçýăßÍ˙Şq}Ńyĺćy»}Ëj‰ZîÜć›˙|‹×ĚM ţΠßĆ6–!"źÜG”´t ćíúoţĂ_ŹíăřkŁű×3ëýoçGí˙ń˙rő˙ü—gJ_©B|¨ç­śŻ:!¤x…ř53—3ůćün˝Â|­29CeçöT1…˛XâŚÂČÜl®FŚ“¸Śöţ.HÉłő?Í«ŕObŐ}~ż“°9ôîNÝV׽ןélwýűB…v;Ăü5¶ń%ď§›–FYľi—“NľóĎĎČŠćżü0pżµ=ß?‚ťź&—§ąýőŐYPëż­«"ĎkýYĺúŇ#(µëý`ÇĂ,5űúcŃ[_˝J_ËhôŰç=ű±~•qÝńµ LČď÷ď<ň—ŇQ¬Ë¦Gő~Wa(µ­Ű¬ ţÝmöçc{ďĹę9Ĺ…n;?´÷§çš ßýq»ŢgzšTnß˙Ńtwý-IŁ}÷µ*«|ŕˇ÷{Ö2V[m)Ó×}¸iÚśď}Ö\Ó>_˙ôëyúIȲ__ěkąźňęóőá]ľçx’ľ¶Ď'fawţŚ94ľ˙^gńüQ3+ž©Ăł}˙«źý}P3˙PĐ~wĂ9Ćz6#Uű» ł} Áׯđé%0óąó¶ó˝Có•d7Ř?·%JHý„qÎî~·ň]šbuMźzE¶ękŚXŇľj ßľîôąEcj˝ĄţF!ë˝ńxÝ×­ĚGK¶ú~ľÂ;šąľľ÷+źGTk;řŰţukrşźŹá>ĎdV*ţg'ÝŹµÉ~ĺ<ś«ţw‡řżsÓ˙ú®¬…ÖúŰú3-¤Ż_Óäß­qđ@‘Ľßö6H6‡?#µ_ź§ˇă“ş˙ű2 _;%A‚µvĽťłGMűů|Š$źę]íl_;:ôß÷ÉgSÚH^sĽŰ2µŃóőÍěČú0;ţúüŮvĽťżŰ”*ĎŻÝudř˛vé™Čţő‘—÷ë}ćŢŇv4ĹĘŞîĎűĹźřG®™'›ÄţóŹvüS•ÜŁÇńůçď¶´ŁéřĽŃtt·Ď“‹îć×Uéł~v˙â/ÇţţSÄ`Y˙µţüľR9d·oß}ׯ— 8ÎŻmçŻĎçŁÍź[űŠsC[řó¶üTźĚ9řű‡{¤Öůü€Ż?Épű{|%Č_ß?ž;´¶ő˛Ż»±} ěĘóó's­îą}˙˘çµŰżŤý»ă÷§zvź[?/šFŰúď'ČV˙giÁóţm(8÷Ďí•CŁ}ţÔµűWÉ‚q|w|Ď +ö»Óůâ»·Ń +o±±eNÝý®vĹząĄŹ+©ýЬâBj®D.łź[áWbÇ“˝ŁR-Â=2Ţs Bý –#K@–ŮűĚ‹ëčü¤QĄ{ĹŻsŢ˙mŔ†MÓj(…HsR6 +†đ‹âľo§Żs—¸¨LŰo‰¦ +ˇă8ĎŐ#fJŞÓ8Üđn—űuÜĐ^O­?°čśÜb™9Wi_™§Ů8(JŰNśČ'‰?ĂZ'ŃľY@ö=Đ[÷€d¦%ÇŔ%•ó±Źöä§ÇüđJ®_·xh†±)c—5«ŻÚľ‡AF|9ćř±ńáÁă±V]†~”Áü\«°đGęôăů…Ďę4×bÝ㜲–íě0 sŰţ†mTű­´âč¬AĘšm;‹Ă5Ż«ŕłÄŮ\8vŤm/ŻJtî–±ăS=)KbÄÁy ‡wČdvŢV }śisŽťÉfÇQ˝ǶGŃ|}Pänľł9ŘFŔľć®·'|ÔcŮhŐ©F÷kÓŕcA‚!K÷-Ž=nŠ1ÎqŤ˝Ö‰ŕP¬(Á9S%‚§­fT±™±Pý䙏¸tcůŻÍŤkF›‹ŘZĆ-Ä0PŹŐŞ+<–™Žęd˙\Göcđ1o ĺ8żŚěş9Ç  )˙ěä‡Tć˘5ç—áxB°Ŕž^{îµá^Úv#Đ´źŠăÉ1‘„GѬ˛#/ęßň›gIQš÷ßI˝Ďö‰Űs0­żľ…Öن>KłŐP‹‰Ý9FćÓX~{l}ň-ĽfˇĎţlŐŹ BĽAA\f˙3LoĚ$Ś'ĐÚćŹEL(m˝ŇÄSc"ÂŁ,üů,G‡¬ąĄV{D¶őh#GôY{Ş.4“fh$zµ2‹Ů€çÝ×7"d ńM~áçßtŞXĺ„ÂÎ}?Ę$n.d„§OŽC\É ×]Ů<¬&Ę\‹~TĽŹűŁŚ°MLy9Ŕćí0»ßŽśŁ ‡ÉHŚpşĹŻÎZ9ŠíLćöSŮlńwX™4ÍBţĆfŕ*çKg‘n MN«?ŠOwl›źrôěO4Gâ$ńCĆýqqŢů–4l'đ·ŽHęćVŇöśyR€Sy¸VA +lMÍüLçËŢő6Ťdư<»Í›ńmZëĽßşohóĆĎwfęq]™–ŇąŤPČĺçĚă§3 Źt"kĚťĺ][T÷ˇó#MRöŽ/ýƇ*šyŇ1 Ę̰kĂdúgD­`hÂÎźk¬8ľíˇŢ>0űëţĐ–‹É-y­^«ôäµ÷Í ~ţ-¨6Z§Ö¸ţť´fźZwFż:wFaÇc8­đ­­.‰O†ă˘ëňăZÄiƤ$lˇ>ŔÔAÔůN´ýŤp‘#SË·źDä6›21SÁJ汳Ýy» ©lE/zţŁ~dĘvFŚ)ČČĚ%1§ÉšŢýTßjĎĂ <ăş?ŰťÄU#+sź•ÚÚH”Oô;y¸N¸–ZTÝžZ1˙KëµYSZ2|X”CBÔ¶j€fČťÁ-jw|gŹNŘĂĺ81!`”ˇ~¶jÄť JląEä$ăTj°31Q×o<éŐyŻ3 <ףüř vĺ´č©áZE‘¸ťgđ™ňÖBÔđ3fަv‚čßÁ§D;ę^ÚÜc:—Ü{^?H¬=Hp6;Tľ9şeR•§EZîKB¤AťÄ•ĂM‚Ö‡E¨o¸ŠĐ‚'™úAŽ6« Řž\×~.˘Ä–gÎťĐYjîqÇĂ›•K ŹŤQ‚[É0cD +ŧčă)Ld¬€Ěóő[Ô˙Â’žU€3 Ň_Av<,¤¬ş‚Ä1#IQ$«é‰ÚÎícۢ„„žl _ ˘¶.‡/CŰNIE °/cWÚz'âe‹‚ŰZuÄv7Ęůíżú`×Ţ ·iň)~a‘6?¦)Ă8™;ý›ŕJź#W?ÖPö)Wî{{­ŇúÝűçZu +’9ůúY·s>±d­e¦ÄŢ@oü/#ĺ phţ/†ÖĐ$"É™ýÂG‡‹nžűřĄĎáô$/BŔ•(™lŕČR™™~©Ş<µŐ ç3’ß_@ ÚJ#ňşV7pąj Ď ç{Ô˙hşźoţAk’¨nP×=ë-¦^#ONâý§1M"FG8X@ F¸eżs©A|€‰ěmĚÔs-]KÝ1#úşA08)™:?µhKÉ~Ó[KEŇĄIhŠą‚b[úaţÚŞŁ&ÓÓ?Oşö3AŢ˝ę!šöHvďkŃL@"îd©#ŮĐKł=îÓ”wÓLřł%ě8/:ĺşzoyŐ–9KŚ1ęÜzî=ŔŞÇ0C´_çńZKô ¸ć†ĺgEgŕ`T÷2«šćPZř«OÜeˇ(ZÓJÇ€Řî + Đ-Ě:źÔwżđŤ‰ťŻŐDK"*©8`»]şÓŽĹTxc@%%3ńý†–sĺüą÷,ČU@Ľąç°ÉNć ąv®Ą•âX»îR˘üˇ%ů>g8™AH4~…Ţ×4ćřIÚ Ű= f‚Ţ-¨·µ9Aɤ«ßkǧp\űGr‘&ëu`Ťę—_ĺH5K9YR€4nzp^tWť€Č Ď»˘ůß ŮÎ@ľ€7ĽŁ$Ž{m·Š ÔQNJ»śgHň)ÚZ­Šľęn<˘1aÇ]1sK%LůÖë)‚)_)“ĎÝ7"řň·GWżnôQ†!p$ńě«.ď§â‘đ}twţÖŁyľĺ•¦)ľÁ×tŽ23}`î‰@ŐLY V3çŢłu­Ćh‘z µ'»Mbžčŕwó*:a?Á2ĎgBéţÔŕ/ËM¸ŽÇ&;ťKŚLj:ŕíş–ô‰čú ť+‡uÓĽ'Űžyj P÷Ą†žYň\Âý÷®vQ°N®Őäepµn†kaěP”ŘÎ7—!’đÁŁmŇ~]1ăS4µĘvŽ(ú–˝Íě’5Ŕ«ŇÓ}™33˛–îY…ŁťCz÷(Xşť~±“–‚š”NW"BĽő„ÖłóÉěú’˛^Yâ&*zDđľ®4Q—ÇSłJš€łĎĎaB0¶ ^kVŘłP93O˝>|=ůëEî+ZLł +ű#üDşö\?k‹łÓÎ+-¸™Ę éx/%{î†tvÇ…,ßŮ,ułęŠ`šOžŻ-˘>qÖł–Pě$5Ô]k–MÚ܉‘wná ‰"†g`?Íx˙1Î0>Änňu„űNĹf˛Ĺćřŕ 4b×í—ś6ÉQŻKÉááfĄQg~|ěNxÇŮ@Wâä®-žöŽj*§łÜ±˝Úg751śĽč=ŠąŹü¦6aL˛ źÉ„yęwFT:ŢDťÂśŞ8hÎ;'Ý]máűQ*•Ěťg˘ÉăÔ岪d]׺´ĎZ,Ŕş­ÂřĄ!E¤"“Gˇľ“- U'Ç'#Ę8ýmK°˝]”čĹ´ľ:XŘ´Üé”B<â>}ËáÎb-%âé}C¨=zŮYvây`·ŘđСy˝Ř Ro–×čëVaI$7ÚKÔÓUI"ÍË]’RŢňúĚ @Ţöö“hKá(ˇ_„¨˘N*WbéÉrńذX9ťľ‘-zΑ¶´˛%úŤ=°{şS§9"`Üü +RBő4(Ď‘źwäJ Áčí %¶qÍűhńŐC µÍďŐGޢ ]ú&ß1:řPďkč¬ţ4˛U®”ô#đ=óş«©;ć¦/ažĆë±Fdś®ú '®Î]‡ŞY‡ůćđ»>ĺJ*@NsŚşVŠť†áZeëŕÇŢóĺűh† ubF0.dpż‚kË<řł„ŢÖ<5îóY+eĚÝíWŠ©ť‹g‹¦q-˛sĄä ˛„ĺ–f}ôĘK·‹šú(ĆĆ)“# +i N˛DMÎ=Ju›k]±ľĂ&ÜhÍŞCÔ#—şĹ5ů®qÖÓąĂf,ëW-‰‘ÚűŤá“ii¨kí‘ńŐîŹęűăfč2ăŇ<ŠŽ")rep¨)¸1FÎđ´ćĄŚVwşK3á J 6ŹLďŘ·ś©sŹžÔ.üxďźeŚPĽíü(żD¶k_CŚÉ§Śx¦‡nâÄ0"©ńgsÁlŚkoÖő#L¦¬âSĹ‘NđĘőĎ€P:~qIĘ•ťeĽ3HňE[Đ×{-˘a<ĚęZ HŢŽ|»yDŔc}çÁj&^—n$ +[ČüěµŕL!@*~ý( ߌhK[?ŞúÁNĂ2›1•Ýs‹žĽ,™°ö"”ů™%Â1Ă/ŁjŕG¦ŮçÝÖµ‹7P7Ň>ëa=nwV<ęüV¦HWĽW# AÖŃd|=–:WLâÍŹ~ŔąĆ"ŻÁçĘ!€ýQ¶QĂ âÖFݏ bPÇ“d&ťüô¨Ł ôók$ŽrĆŘłFJ§Ăýb3Ů{E[Ý$îxxőëcřB’Ý÷A~:´űľúŇvóζԱ(‹H«Ë]çÉüÔÝ÷‡#ô2—–Ň5Č­oµ&–?[ ŻZĽtµÄhUÍUPŠ\ öóűDGóSŽwgzßµŕ÷’@ň©mÍĎŐËż”¦Šg±Ĺb®H”-S÷Eô(ÄĚWąĐk0©7˙ŃHę…ŽöŃ!7Lj2Véѵ0Ď®-Z#ŢĹă|É +âdR˘u4č.dĽP&ŽÄ$}<7T :¨÷ą +±A7z†űyPÎĎÁtJ±b8ĎH¬™P”,Őĺ•,UšYáIKbmÝb­CmÓµâ/ĘhF˙_B7č»GýQ^Ďbr/Ż'UZMHgškôĆAK`ţ,šSÜĘLÜd‚Î+÷ř\KĚ •©AđC|dN­ü2;dAOíčל5ZN¬‡#} K°u(ˇžQ>ś9ŻýÄ©úć ”kŐĚ˙kt_:s‡3Ř·ŤîTßĘ ĎY4_/KÔ%S]ă$8@Ý*ÂĆ—^Ž0,%C=/0^’ôałËâHţ/¤;ŚXÂH§™v0·3•"‘­Xę1NÚşľE} ÜW}|¸‚"«Ľ¸Ţ¨óm(~DY|}Ž~Sҵ@V„ćĘČ!KÔű´łp3k :a1‚[ďĄ4Íßîń~Đŕ†Qňżv)9uŁ˝?ăÖżr)ś´H}¬ýNi¦8WP´”BŁ"›- Ę[úÔĺXmyčé‡ËţŻÔJiŮŁOgt.“łĆŚDĆmąĄ ŰÔ°iäzŘl€S˛]]řÝé®l°Ř6]öx˙Hă?EČ™Eí÷đv äî52bÉÔá†â#ĎŹ§µ{ł'ĆÓí +&áJEę=VÚ±`o$¤222ۉEËcç Ťď{2/›Ď~őr8ö=”ÂĺĘΨŚ@I:OâhúO~—îŽsŹD·7Ŕ(Ś”š·ż–;ő´¤J—˝+…ţY_'úĎő˘XžQr^J¬ĎčRnW]ëTD@~ĺhžÇěLőd.|~{O€Ş–‘Be+„řŐĂbyXRë™Č-í/iO´vÓo*¸RF‚z2˛ÂĘŤH†ńĐ’đą=ú¸ DxěŰ:P1˝…R¶»sI‹'!­+ + )R\{Ďő«pfăe4O­;'ʞđĆÝ릮®EwˇÇÎkV=}Ą–ŢצBaßc"‘q[ő|~!G]›±Ű‡Pmčy˘N„–Í,OF·řp[2ľ¬®híĆ%`‚'[„Y“5ź„)yD¬H +1´ZRÜMmk`‹SLö‚xĺ|NĽ/pŇ#Pµ¦ ¦ÜąxÂó Ů‚0Źú%|7ť‚¨KńŘE˘ĽOË” .;Ĺ–ySm9~‘Ԣ拺גyôŃY3ź=>l\ŠŮG89Űúex _ş™®Ĺ; ¦s¦€Ďł/ŕ(V¬ +˙˙cı Iý ~G‘ËŰ?“öąbÄŤŽxr˙¬ą:$żW67_>¦YvqgÔĄ(Ôśn—Ţ$ţ+ö@těś˝Ę|ś@˙řE ýHYDRC–Šč]őB&oŞHďé—)EZpżŹ—îcK4ŇÚŽjWt)[…€;ϧgxŢ^^ôZ"=‡ÄťŐŞôü§"[E}ľ$xW% ńŮs`† FY:eűą”pŇTCl·Dˇ‡Ű±ź/ZÉOÖŚ»ďËFŰôëĂŐąŢUTä~zÚÂ};=ĺˡ™¬dĹ‘„,e-aĄl apůňŢ ZěSŢ&_dNú•ęâ•^꽿DŠ‹čoßÖĺę&Kë«'r(?r[uNÂî@ýôęśěřKřd†âOXXŢÄ“(AÔ0âv–“áFEc͇Á×ůĽoÍA'pFÎ@§Ă‰´žĆ|ŹĹ–.–Ęň2)0źFSśQđŽY]@˘řľZV´‹‹%9ľÔé…Ńý5hÚiŇ˝¬”ą»G·lÖ˝ş’«±er;ćüíIel_ť_˝đY Î_Č™%tżÎ˘ń׊Ñďsžj"u¤µyµŐIEŐ<’9.ôA}G˙j5[I2<›ůo°]˘/ËćϡĎył(Š+RĹË^ŽĘđ)0±ő#<7zXuWA_Oâ„ęEVNóZ&=lł{Ü0Fu«ĺt @Ţępb.6śc«®7˙ër\i9y5rśűVýlóŃĂS©°A°‘U^âp +bFJ˛#tZ’á7Ň<«~ţüB-ě 8Ąź}ˇ€; ě'Ň-Iać6<âďKŁ%ćăf ě™^6‹ů0W!Đâ´:#ëŢQÇJ'P|éU9 +˘ętRŇ«†˝ţmîŐ=Î *’37Żjá |¨ťŚŰ ąÖ°Ć¬ůŁš ˇJ¦ň4ř%]“ ¶—^A7›Ôt*Ąd†,‘OdXË»’ŔěŔ8¸ kguźeKÔc6Ě=ҵŚ3b¬ąH`§]x0­můMJ¬ˇ€ţ`ľĄ™ż›ŚIŐ1Fć\5 +bôŚ9T/\Ĺ`7şÇţ” ‚©RFÜ€64ĹĆ}[öĽ4ń©9™"-ŕ[Ţa_@‚Ţđ+Wż—„Đíe![ďď ä*čvGÍĺd‡¦µéا +SŰý´q3ÝŚÍUZ?aZ»ö®đlkLŘ" /QÉpHďdJĽŁF›ĚÜO’:ť)Ń|SaL’@ź‰čfy‚ä9‡ófÇŐä B,Ó>ä‘öďY?jÂŔŘoŢĆüŞy@@f÷?ćŹ ×ô?[쳲$ţďÜnôÝć±lŐ ągÉ`ŇE9 +ŐźżęRš_=ânVíŃëšĎH.ąÇ;ŔÉŚŹ›<“,n˝ç˝Ţf%§UřRÎ^SŢ•]Íűť1^OC­EŔ@CŮ‹íwurCň• +a«/M˘Fa°9”ÉÝŃĺ&ŇîŘä4Í<°ëZrM:B†:™2Źt>e3‘ćZóD±(ěF¬ÉT.s]®v2śx㢲çyáŰ(f¤m…›¤ô”WżÔS%ŰöÔ8[é2˘C®ŠYc«-–Т\<Eź_¦ďş“ä˝ú…Ad{„wˉć {ł/čJ7•4_Ž çď¸Äi4Őäś: čďH›·ĐäŃ`Ň‘¶×FUЦnż$r0CęăĎyĹ"!xZ?”ŽEţ0B†^fo˝¸3J{Ň–BĆ<¤)đD|·@BĆŁłÖşÁoŁĚ ¬DŽî 4’™ô#źRXţ´ě…Pß îŹoçC»fôJáÓ(*˝¦ !”vúűĘĎk_" âźeÓ‡»231®«K9ńÁOxÍV‰7-ŁÄp’0±Cą|úS.SkMcŔŤŹĽ˘ĺëü6,ÁţąhzÚ×/€Ě’zÜ•xťżU«Y'uł[‹z˙eĚ[ś8qřŐĚźç’tÍçIňëiőA˙‚g ;Xä;JÓż„ĺ;˛Y{$ßËé0śüc‹łÎI>gV˝`µ„t +YH5ńŚŇ{KN…ć]˙Wŕµ +ţţ3j«˙WIątŢÓ=ŕÖ1~ ÂůPžřžBüIţýńßţĺ_üŐ÷?Ž˙íß˙ÝúńŹ˙ďźţá‡ć˙đW˙ó˙ćO˙Ë?üń˙üůO˙đ—ń7˙řÇ˙çOü»żűűúă?ýé˙žúř›řÓ?ţÓß˙Ăź>ţń˙řű˙ěńŹ>˙Á_ýŐż˙źţűżü‹˙˛O˰ +endstream endobj 28 0 obj <>stream +%AI12_CompressedDataxśě˝k“Ç•%řťfüąÚLšm¤ÂßÚť1ËWőj¶Ő-Ő==Ö6FČ…Đ@PíŻßs®?‘U Đš*GŞ2#=<ÜŻ_ż÷Ü×ßýżúâŮáë׿˝föÓîóĎţîďNoîźż}ýćç;yy÷‹—/řţíľô“_˙t§Â~âU‡_Ě_¦+˙őţÍ÷/^żúůN뽊ďŢńó?ů_ŕť·/^íţëó7|ńýOw?ů)ßüÍ‹·/ďńö~@÷_˝ą˙ÓîőwoŃÁNďż˙ă7?-cŔKççoqĄš~¦ôĎô¤füúscw‡_ĘEĎ_ýńů÷ßżř˙x‰7łá‹Ç×?ĽúúĹ«oŽŻ˙×ĎwĎĚÜî™âĎ`Íî™—kţźżľ˙~¸Đî'çÍäć ‚—Ů˝¶J«ćibzŻ·Áż¸ ˝íŤźőě•ѳҎ}ź_őĂ·÷ŻŢţęÍëŻîż˙ţôúĺë7ß˙|wúóóW»_>˙ď<Çe‡_¸/ď^ĽĽÇ<}űüíN™¶Ă/”ţňřĂ‹—_˙ÓßţöSh”–×Í—ŇŃż|ŹĐ—×Ă—żř/}q˙Óü î#ł˙ë8Ö·Ç«{µř)ĚÖX7{§^±Ú8˝XLśÖašńĘĽĚ“Y´ĆăŻÔî'żţĎnÚýĂVx÷řźµ^diţĎÝ$í'˙ţëűo^e`ˇţÇOó8߼ţîŰçoţŔ±ěžaâvüžŇ»żą˙ö»—XS™t;M{¬NüŻţ#_Ś ’ Ő„‰v ľĽó>„Ýł0ű˝7ËâLśűť_đ>¬¬·xĚë×~&Ďăş>÷|q˙§źďţéő«ű´"‡7ożÔdŃUü™Ţúő/ďßüË«oń\^^[â’üňő×÷/ń‰µ‹»—Ďe%¤©őgşâ7Ďß|s˙řúĺoeŰĚĺ.Xö|ţç{LŻ +_1ËŻpŻWo1ę/_üîË?Ćíöĺ7o®Bşńňĺ?w˙ę7Ż˙UéŮb–˝±Ú6±´Îď”ö{lm¦ŮĚÖ¬¶Ç¬ěHŮ»%(ü:á=ľöeüjý™‡txůöţÍ+,cÖGĂĺŐ×_&Ćs˙u3'ăŕ(ň\†@Âý6Ę?żyŮüůbAB‹O[čŢĽřzÝAAďćřCVmŹŃńK©EO‹^n}e‘Żŕ•›•Ő·Ľ’&äóĎ’I +áôËjOű_~Á§Áóź^KJţ^Ř©›ţĺëoŇ»ëňşřá»4?‘¤@řżzóâ;ţüłŠďÍ_ţęĺxóŢĽţá»_ĽúÝëĎ?űI<ţńĹ«ű]|s'ď‚›ËkĎ߼ýÓë7ŔźżřúţůĘÔöĎ_|÷ÓG:ýâ÷ożú}ßmző}:ţ×űŻp0a/˝űçßţOüÁ^Č)wżyóü+<1ţ.×ÜŇ!VĺM~~|VţĚ˙ßňůóýď0řµřęĺŐď_ľţ®ę8^wKŹżzůüŐó7eŇň*ýď<ÇŞ®]ňÂű·˙vSźŘ.ßaZ¤—vQ˝ zë¦[=űűÝńĺý«Żż/˝Ç?בóiâk·ôxzţňĺ‹oŢ<˙î÷/ľÚßüđýďwżyýúeé}ăýr§ú=y‹źĽ‰‚˙üío_ż|ńý·ĺ6ő+ż żřęĺýţţíým«ĘÍ˙ćŐ?żŠó3>Eş ś;ń3ď4úżîÝʧ¶î„7˙#Ý勯df¶îŃľUî“^ţď’ůňő 0Ä+˙ÁkľřÓspě|ńŰG6*§ůw/^}ŤqńĂ‹·÷ëŢ|ýíw”Çw_üţůw÷˛sň•_¬]:9ő«sëŮł‡O4­vÇWő%˙đćů×/pfBű¸{NéGĐźŃyýN}˝;~ýůg˙ţůg<Ú!ţ3»ĹZă_˛“(ÖL~™-_áŃď)jHXđ_UV)ę P)fŰ|É)´łËĺqľę,ô»ű»/Źo¶ożëďľn.BKwëÝpçÝpc<ô´ó;Glâ(f|ůńFpüţŻţü*ŢýŁ=}ą?źýx^i>“íŁ¤ĽÓ-1ăď–śĂmUŮI;ZČŮ,Î;SGr†zŇôýV/č%ŇoýŠíč·»ßn¸]”ń7'¬éx7Üiť°–`˙j·ŚúWąÝ_ýůŢ™˙ůÍóWßÜ˙ýîżßż|ůúO¤Âîté2ţß8WšŻZţŰ5m늺ÍYé˙˙/Ň˙ńx<ĎÇËńî4ťÔIźĚÉťü)śćÓr:žN§óéržĐÔŮśíŮťý9śçór>śOçóůrľ»LuŃf/ ţ‹ż„KČýăę€Ď¬-TŻ8i¶´őµ±ĄĎŁÇôěúŔ_ąÇÜ˙ĺ\Ú©kÇ®†¶tmľ`ŢůóRćß#úßyëŤ×^aéîÜŹ|rGwp‹›]pŢ9ŇsĘMöÎ^0Y'{´»ŘŮë­łŕ»V[(Ăv2wć’ű7§¦h‡Ú’zL˙˙—•…qlj¤;[5wµőóŘg7‡yžŹóiľ,Ó˘l˝GČBDŕ°ś–ór9Lž=¸C8̇Ăáx8·»ătÔx${ôÇpśŹ‡ă±˘ÇL‡=5Öôy(m‘6َüÜđ×_‚sźw:5Őµ©n—»¦ő_‰rË|ŢđÎÍă|ĚlqĎv6łžqZ‡;lÜs8†CXÂŔôře« *LţÎ_0A'ôżúşkÚĺJ;_i u4ĄĄE:2h×[[|Í”÷ŞßĐcý‰áłĺ™fPřŁ»ŕE…}e±żpp`ż±ď.öűGłŘ•űó€ťzv°XŤ=l ×a_0Sg0C¬)ćĎ`&ćtĆě1Ë0a…y·sˇ÷»ÓŘđÝYóÜ´Ëż.ň˙敇»ĺ.ÜaYä§MÔ2ÉşÉmŔk° ŕ6<Ů‚G+|”qď^ýNńÖçÔmnÇŇĄ-ĄÍ©…Ň|iŽ =ň[ÚJ#BÖů‘qÔ¸“ĹÚk>nwÁat¡t8.ظŘalguś0 öä }ÁvŹŤoÁôA& l»ő´Á°‰f‘üJ}Ló]ٲÇé„Sí2Ý)ĄJ+1Ŕ)Ż‚ÂŞ¨EÔQťÔY]ÔhPi­Ť¶ÚiŻžő˘ú¨Oú¬/ú4¶kp1ĆgĽ BBщddîŇ?“8¤¶Ňa8ĆŻ3ĐŠt»-°˝1¶›Ţjeű=Ň&¨ŇÝť<Ë,OzŔ|s¶/mÎ5gŰËlcYd¦9×g™ëIó ›ędĆ=fśsÎY缳ťeîŮ„ ŇŁčÔlj®j w¬KÝćíVŽ +Š8wnD°±†G7ňŁ‘˝^¸[…g­…ÎmÜ hig`OÄÍş¶YľŮů^ŞÝ–Űńj; ˸ˇŐýú×ĺÇ4ôŘżv~żVѣו“RÉIxIRÚQ$ŻYxźÇÂY9‚Ŕý@SĹOçc9áç"€u%™”錔 ęMsÉ•—źâ×QÚ!µ%µąj <ČÓuóŰ­ś?”·f¨ŮZ0ŤĂ}zr?íe#,ŘA¶‡k˛ { FĄô$TÇĹŔą± ű`‹d«‘ąá0’Íç¤á€“ )Uńkb[…ŚÔÎĄ Ŕ>ëvÜn ŰE72 y÷Ő4ď,S°fÎM8Piî1ólŔ<¶~X"r0™Ĺcť_túL´Á*éY%ĐÖTČâ+Ép•9M ţD•d\ŞŃĂĚĹTŢPó4jY&žLP¤ľ¬öN‰ ‡ăíi+ě” g˝•VÂ1Ť’Ëž›Ń¸eÎ<ďńZ=EźĐ¨ň˝€ź‹Ŕź' á.A † (Č‘`˙Ň$ŕBˇŢ%ŘßđđŚĐ˙r‡•Q ňhđbXŠŕ"f• îőZŚ ÍŃËFłWŮ:w˘żŞôy#Käd{‡ÔË"»řú: c¸mXĄ>Ť,ž‹Ş˝°–YŔň€Ł€„(Ü%›:kl2µůdtXÄŕvŔmNbv;ź±Ú‚ ¨Vŕ"Rĺ#đŰŁŽPĚëS +ŕ„˝Y¶XÜFSŹéĺż3^Ö<‹Ŕ"Ë‹tskl‹ %‡2Ĺ3–ĚÔ˛‚˛&ďŕѲR†Ńxč eÄÜÉŻô—0ân6fň^áü±ÚE=Uˇ·:ż·ÖËYD‹1ßźíD_šŽUĄR÷ńâPT•eŢăHóŐÉú‘đ:žéP`Í"]y®íq0;ÇÇ!aS‚•CÉ™ç8‚VçáÎďnÝ+uUCço±żîŤłëňPÂţ‡Ô"‚ŚŕKÚ›¸XO`˙8ź,Ůź2:âčšĎD‘«´ôIŕ‹fúŐ#R{±Ť§3ŞäD¤vĆc4î+$ş3OÖÍ–ÂÉýđa®ťĂ°â+ŹÜ[Í‹ «ľ›,©™=ž=wBá¶Wѧ1 ÷>§mésęĹOh3LíPëďsos‹”ÜÖÚ'XĘmyM|ĄŔ˝ąéÔÚżĆ6 , ‰ !Äw$n€bš@&ÚÔ6 ă‹w+Xś…,IŘŞŻşÍM Uó›–2ß8ͬ®ŰÖ0] ŤzRU[íYÖż7Śő¬i_¤…QĽŽ"bĎbbŹFv'¦%-‹ČǸ$±ű(’?Ťíż)€kú–É’Nb6:'Ł;Íîq‘3Gžaü‘ç43ťĹe$:ŤĐmdQl_ 1‚QbS"˙Eůđ$n$Q_±%˘<ťI¬ôw™»$؟ĞťAf1“ÓDáĹşfÄú©¶"ą‹*Ž•©‚ĆŠ ¦ +'¶T-抩+ >‹ąâ$ĆŠP˙j¬”«“˘p—¨ę$ +Ă1ŃL¤Ź9ŃBńmYĺ¬4ÔNîΓůIĚFŃdDsQ4ť+3Q÷$+&ˇ,Î<••EHX*ٰŁ;ŰŻŁő:ŞTü¨đËuRíNÉf-Ö:Şj‚Oâ¬A*ň«Ć)ąjd7ŤH1—ä¤1'·" †P\ŠD‰‹´áD‘‹NEq*Š”©ŔK‘¸‰«]„Vł”Îkýůgb”ŞMR®Ł&QöÎiUgYMWLNJřE\ÉĽ÷gŮÁ>íŘuíŞuK»V˝C{Äéć1·śwýzę±}=YÔł7ËT5Ő4]µÖ‡¨UmŰçźĹ˙EăY[¨ÚÜ´ÚŻuŐKČzŚżŐŽ~ç¦Ő_ŤÝ»qÍ*[ŕ2Ń'`m­ĎT§–WÍ7­x  ÇPQ;ţ‹—ŕÜř&Ę-ç÷čŮ6z©eąüźł´ ×}č*ŢąÂÍ֙г¸+é!Ú}Á,űmNm©ÚˇjÇŞťŞvŽ­_˙¤µEť.ęzŮ;ń «|Lí”Ú9ŃĆ]™*™ Ź;)î#î˘ÚŤZ ץ#u»oę]“öLˇ‡Ög-˙ľt§OćLWťÎ +]\“޶¨ őrl ŠóľNÝż´Čµ XvŰt«ťŔĘümąKź:‡éMwéÖÉżĐËahË mîŰsVÔ.6‘_–\+R Č\Í‹rDJ¨lđěŚyZuô“TĆiĽfńS0‚˘Űí‚Đ5X%ˇ,5„Ůç‹î?zĎÝW»d|Z‹łĄĐőŚ“TO~fç:1•R°ňńzˇ ¶4NR#ŻLŕńPŐ”ÇůŚŰpHť§Ř^UCÁěCHă'4¨DS +ä2YĚŰ4E(‡bW‰ "]- 0°jłWÚD0T PFg9Żeéšu’Đ­&VרfĺÔ6Đř‰ č˝F» 4ZşŐ@cŇË”°Q›bĹjgíS‚ěV÷řč˛ÍčPťâV¦;ůÚI~CWA4Š˘Ń ;ŠŁY ‘üL±4 +¦^rÖ,"śž’pz)ĆLť"2ŘĽ©SŁ *˘*„W‘ńEd˝=‰ŕEW#7p"x٨éR;Š@pˇŕ,Z&$w‚D*oµ¸F„+`E/bCŃań!·±%Ç`‡s«őŘ»¶ÍSß®Ć"ŤG©JvqŰYĆ]ˇ„ü ša-mäďą@ł°%wެă§b÷ŽŕÎ]…#X ±fŞRÉă8ĂĎZ`ˇWÇźQčYaîYć ÎIĚ= Ç„P$:UŃ9 ĹQD΂óÝ MçN_ g+‘Z<«Łwu¶xŰäsť| +QĄµ‡´Účq[$ĚŻe±p 2«ý ˛'ÄT€± ’™âa*oSBFZ +h˙ďăô|őż/?ă«! öľč3Ĺ„Ď.őĚÍďůť|•ü”hŐÚph~ÖCwÝaăŻhnX_i?ß¶­×ň«Ůż˝6`´­ö‚ß-¦Ź:,ăR…uÍQĺ$nęzxCnH’mŤWC7ĘňlĬc0’0†ÂpJa ÁöU$VŽĹĘŃXŹ…“i)1YŮÉ)Će©Ę˝éśtĘěÚR”–K.MѡI˘µÄ˙ŕ’ôÍŐĄ)»3…ěÎ$’‘.]ŮYî¨w–F5B/»ËA©ąŘ_"v.§`X6úÄý™Mk‘N3‹MŚ·aČu DZk‡ľé®ḩ´ľ‡C—#ç\‰‘Ë!ź9¸óRÖ=ŁßX<—/X҆¦#41j;µľVi»FďYĂ_TŠűČ0uL“‚_>˙,ľTÁ..ąÔĹă=Wçşä`—śě]tµ;S&:¦ׯC〷7Ľ99ă­Í7Ťř CŹ®4»Ń®ĆIW+{w×=őŃ“mÜd5ŮDLJĚd-ŮŹaż]¨o¦ľ˘Ů[!é+*^K+ŠîŞVpwôhTľĆë[$żĆř§.v«.¨/ÓgűuÚhÇ+íP7‰ÜëŰrKëń— +•Śä; ’Ë]ńMł‚G†úŻđ듬QIb,-*Ůâ’Ń‹Lpé„M^˙1Wa”K…Uxt±±ÔXtK…Pś$Úň#-SŚe´öF!Ţ!~†Jb|ääť‚¨!ĆczťńAÄřlµ"Č1ŢĎŕęE«"¶źiĹ” k%»‹ľgIL?J¸ő]ÉuÂŰÇ,RcMµ„]ŰdÇŕYqFx'§‹{ţŠUöN §rŔźŠ¸›ž»ź'q =&XDbôxîÚĄ8ž«0»cóůS&NĺgËQÜNŰ1­®Ş‡2^ +/Y©Ĺ®ú·(¬y’ţ"é ˘5đ?JŹynIpsë@a·¤ňH–÷hwß­ĂAE˝lď˘ňdŰűŇXߣíý.Ńޱ¸]űěx}^ŠÁv2Ęz§Ć‘}ub¤˝VÖĂ;nČz«¤·Ęy—”´â”Ľj˛l·Ju"ω•2{×Ü%˙šs’Ôiăúäicd%e-‹çDĺmÎR%şXĺĄ!…Ťí$¦QfÚšŔąąé©i”i‰Ř‘´UJŞĄŁZ*Şä JÚŃeŤUd!ô> V©b=?6qđĹjŮŘ-[Ëe´^şÖ¦]ěŮ×,؇Ę~ÝÇŔŹńňřĽŘE{ »ptŃ)Ho‹śŘ‡D“|¨Iüˇł%Ä +5Ď’Xć SIŠ'ĺţądž´Řž9®ŘžťĚ1g{‘ůŹžâY~źĺű„ <‰Ś+ßXÍôŤ︶ë+ü˝đăPÔÚ“€+w ˝ b"9‰ÜAů"xÁď §ůEŔ8#g8¸}± +çłűNNm˝a¦°0É9m +Ô6§3şŘ±s6,ÂWΓë¶ÓXyÖWs +Ő8V'j U> +UŹ5‹Ę0ĚM3pçżcĄôô|r‘P\±őă5ŔŇÚ¤ZP$#vś(B>ął*”ĄŘЇejŞ@h«˙¦éü>ŁÝ0hUĘ©EŔÍŐ“ĐÉąeEŞŇrz)Auîä »Tľ…µwá,'čGÎ5'ôPĽ yľĄî" rő5<;ËyÖuéÔ3BuJŔ_ńúPŇŚ€AüŘX“TŔä:3óq™ä“%‡¶ÚĎ‹Ä pŢgĆĺqhİ&¨}+Q>ĺš(Ťn\mlé§5®÷¶»ům»›§żéínZŽ’IR"ŃÖ1˱ťŹl+6…ĄST¸}•™Ś¶1+ętÎLŹf-YÉĽXľä@.G±O®-Ů­E7N-§“ Ě0B«V„<"ŕaJľ wśE¬ďCń˛»D&0ě3ĹĄĆ+:“ĚE4:7Žyş ź ěAŃůZđ[ë Ôş­Î@µŢeĂ5UUauµűiën:şš&x­“sëóGž7Úĺş{)zÜv5mÜMiµŞ®˛ ęTŻ·!Ş´‚0?PűŰí±‹kV%iZnIÖw"äE‘–˘ý!‰ö«@›ű%ŮÚA'"…šdg_íëçĘÝ3[ÔçmGĎ”×p)–óÝP‰pXg8ŚŽr—»édýöÉŇMąŚ|…úťŘÍDÎ"®Tz‹îĂ—â6LŔ‰Zć3‹h°ŃQř"˛˛.nÂN\Ö Ü&7ářu*NÂgŃ!ŁR›!|W\„}QŽŁŞśŤ QťN)éžŮP±&¬\#´ë<^µťh©[RůëÖ L"A»[ |K]múĆÖD“ŁÇŁÍmk&Ő”ąWň©}Đö·ŰăU9ţÔEݬUă1żÁň–lő)×k~zɲN¶Átµ·Gű]®-=z‘eüT{ŤTţ#ĺýP%·ĚwË#őÉżçś ń©Tq®˙·W˙o^‘ň>!fźö2˙ĄĘ˝˛˙„©B‡Ň«•‹ę‚Ô;¨Şá^ăëfHłŮ'ęwö‰=»°Ć”ĺö¶ëojMrŃş=CbĂąűń?ü˙Ă÷Řz‰ĐÇži%r˘`Lő$f‘é}Ďb ťÁ~%Nńt'xó!E)AžJ|â,1R|b‰XJtbp,JBPşdŇ 9ÁÁ~vҢ'+~˛ÚP‚B,± Pu|ëś,*~@ž"îty‚ŇTcOuÄkA ¤Éü7‰­ë¤ŐUŇôś]¬4±ĺł>µś…Ö–¶~éŞ%=ŞôłpVFż m<ŮëqŐ_ÇÚ蓾ÝZ—¶÷kĹŹ}ômżö·Úăă•xÂA"nlâ +—ÍěJâozTä(f+–Ş©pÚž˘˙—Ä0'AKĹš…»ÎÁ]#Ż[¸kşŠĹĹ®V˝Šs¬¸kF^í%źü°ÎÉß*Úđ„“|ţYâ&N¬üfĺ)ĹŽ—-ykä|ŹzűőN­NpůTĐď˙>'÷áSr:$<Łá‘+ *qqWĐņ́LáVş ĺąŐçfŁ1näwęĄď­ÜQ›ÎM‘˘ÇĂŐ¶ÜŘćş%Ţúă[č›dú íoµÇ†'´Ţ¤?iń(=UĄ«O©-~„SŚ“+„ŃŰŞŽ•âÖ°‰Ł¤dŮM˘ěě#íÜkJě5Ńž-ÖíbŰ®ĽłM»¶j6mČ2ŁU;{ńéѶťü˘/Cl«» VI­N†ő×RÚ\µÖÔW-1 ‰MuUŠżşŤUW®˝jmčQ5íş·qvýą{¸Ĺ¬`UŞŘĽkCŹŰďÜ攷ѤĘĂm«=v1ĹSőOĺM~´Ĺád…ćëµ6K,wmě3ËŔ§ľSy/öłĐ«hu‘_y©|sM ˘S~+óčGMA±µß)łł«ł}µ\·ˇŹ'ë_oóŇĽm^šźÂşžÂşžÂşžÂşžÂşžÂşžÂşžÂşžÂşžÂşžÂş†öÖőÖőÖőÖőÖőÖőÖőNa]mĘěAÚ–6 )‘áR…kťJqŇs©hüŢ_V/ý1_găaĐËŠśŢ„Ś…&dě\y"¬÷Ńo“˙áĄř®DśxŇńâBĂr X) "ž†Sĺťýźó÷RľŹĺű$>ŃgůľŁÜeúF§Ä•ů[§oŞÎżé$aÔ+ôiĽ­uz’ďĂéŘ„ŁÍU8Z†Ł×j.ó{HÍťx·« +TĚ€"%‘‹™¤”2ˇÄ(´‰JcPĄŽ6̲Ć*iŘäÁš|XÁ—ŹIŇHjUĘŇ:Dm•8Ž(xWFŮ#:}1ä9Áw±˘·˝1Ôm+€ĚV Í +»¬ˇbĄpuĺKW݉!ó<«ú—gůÔĽ @‹Ů–7eăĽÎÄžĄĘąI±„ZŁŚf%Žŕ@Żß$Źy©i~J2$,0äC’»Śřđ2ÉdN1yÍÇqüz—ô޵oŢMe«Ż¤“lÚŕI7¶çvŐSîÁ˝káyg×ç•ĐĽěU§˙ďÜŁVç¨5(ŻuŠĘQu8ŢIčćd%ązJá4uKúMAŰŇ+P)gżü‘7ÂňŃŚeR&˙śĎ?7Wr)ř¤ěU†P މ?ŃĐcú-±ă%ýáµC2śj;¦Úk…€Sţ¦řőŘqŢĂő‘[Ş Uy–ÎJTş_ăWÉŁ®“´VYňRÜ2[8se§1c÷ŹşdłĚ_&Y'ĺ©«őĎ™S1Ş„bL‘µKÇÚQ¦:+Ó:gTźORěG„XźÔe%ÇرTŤ±±jŚţ<‰PÁC+X“T‹áaµČAeR• ‹±BŚ“Ú0±P<č×Âźg<ý,őŞL)úy, …TaŞ,hÉĽ>‡őË—–ý-ł\öşÖI˙WŮ)4áѸ)îˇçdü?'Ńč&eŻ9ÝĆwIlň鎫Án8Ś^*‡Ńc“6ˇvőĹETd´¸ĚŤ÷¦ZëŐ­šVŃé·Ćd"ĹîRŮ^ŠSÝ-ö—Ć#a˝f´ą¬¶Ý9ŕ"ĄUŹĺD榤ȱ”ą”’":!ókA‘59#ôZ k![Y dśľ- +±Q"bőX•ÍŇ©0ČÍĄ!6ęQZ»ŕÔ†ްEĺä™t. ~`ŚŠEď4C‘ô†î¦“hSGR ˛=ľ%÷tS51gx{°DŰäżţŁňÎh0Oj&@ÎŁ4˘ě˛Hv™EUĹÜíz +"ŢŔxćTłí]ŠTw)ćî‘·üÎ>â ŢWRĐŰ®µęS$c`4÷µî1rhu-Đî,ŽąŢY2KÍłäXp©@ʵ(vf#ąúŕ^$¦ •ĆsÚęe»úÖ®ľ´µżlďŰz஍˝U0GĺfWŢők.͗檄ł dš–ťT†ş»b†wM¤2©Î1¶^–»ŢŽ}«¤ÂŐĘWš•íε¤Áŕ, +8cĹXĆ—3|HĄĆ)‹LR‘2kňČż"}ą#Čq­K©ńXlÜIąń(u\äŕĚU SÉńTtśŇGŚPQUóŁ©$‘KŠŇ:$y$B9ęJŞ&X"Ůg‹>Ž"s%XÂܢJ%»µęN®µsljvĆz…ąjK®ť‰F˙¸’Éi5S ĂCg«ë^nUąt)¨w ®ÜŞŻŞ2˝żÁ­*äl’ďé"&Ó»’䄲p†'mň¶›p2š gŮN„~ł×(✍,'-5$˙ĐlVÎyČN)aALYŕŠďgŞíˇ-Á»ĹË3Š­Gç!»ÉWSÎ⫡ą,Ľ`·mWD[‹ĎMť®•5.=Őá'łK•ĎWÝéÚ×*­ŐYn÷ $2ŕ¦hwţ|‘ôŁ3÷¦q´d˙;±LĹ‘8»Ggâ`cşş%7…TNbĚ[ý¦Tä~őK°)L«v2žeö‰¨Ž•«ń9ąŻÇS +Ó)GFv=ÎîÇ.éYy CĽňS;%ŻŽÉ§5ˇBUăpÍ XWÄ)§Ň±«ë˛n\MĺĘÜ6·Ńd ˘&ŽíöŻąo•V÷ŁZf3U¶’X”t׋ҕâ^2®ÚŞs)%ľÖât9/Ň\mőşôa]ř0náZSYu•˘­”‡uéĂşřaSţ0ů«ü&—X1é3“śIş”C4I«sžř¤˝É9ąs.ś#k~ůkŐW­qŐ$ëĘ’•î ‘aJĺë¦7ۨáö ›·ÓŠßąŰA>5†DőI+]Y롱ľ˝Č¸Â_ţşř¸)<Šü‘€·VŚÜ%·…Ȧ%ŘÓąj7‰ŽĄ¶zĚż/7µGżäđĽţő#DB~të˝#°ÝD×Oš~Ôó©ĺĹűŽ~,ýč/ĹĂJv˛—śDܫр³—|C´üßI>!{* _ ĺPÉáuűWÉńż@ś?Ć“+ć]Ľ’ŠUrŰ jÓŞUć ö(ZíuŁ9ąŹŽŽěˇáoŔsÉÚůBbß°.“Ô^ Á/ĘLŻřY¬7¸˝Ç€Â˘Mđ:ŤĂJ2Ķ”GŢ%LŚV möP…fŁ2®|ĚaÄ™@żÔ­ś§µf +ňÁ١ckfh•iu4ËÍfí_đűÄZé’&˛1ÝHrÉaľ»†kŁőX=îÓÓű˘HĆm˘Hxť×ö¦›Ôë”kÔRmź)ŻVB@ÝĂ9iűd"N4ýh?ĄŠô™Q¶Ňą“uu«Ë«çä~vήüulN›l|,’˝:¶7ÝÎöP™áŠ çĎç"˝lŕĹŹÓ |Cçb(ťŠ!vb,ąŚ\ó»8Łśť':P"ČĘj°űsÇŹ“[؉Á(/Fć\íăe§¦Zˇ]ÍáÁď' uÍÄżâ]SŮȡޢe\SÂĚ%?Ń‹Ń %µĐÇHÜĄ«ŢI{oÍš…ç¶ß*ðł‡Şü#ă}wřv…HŰŰ“Ëţ}8’x+ŽxéŁiĎçžCĽFoU'¬>ytűcî’Săö—óŃ×ŐÉŻ×'?ŚŞ Ôżę<߉»&çÓCn…“≅ ] ĺ›ęŘŰw›ć_Uń¶`’ýݦHŰPęF‡_+±µ˛J§d‡ŽŐĂďŞĘŃkÔ¬ÄĘbőbTlŚŚ bÓŤŻËÍ‘¬uĆü>޵Ťb5ĹYΔą«˙oăW×ŘŐ:n5LkĪϱŞ)î4G¤Ö!ó´4kp(ßů·6NőPĹťĘUu0ĆńÇD‚^‹m˘@é±.Ń}µˇ&F€ćřĎý™c?kM.J9xIěTëżSr§í”úŃ›Nt°« őoڤ¬KČ÷q”meŠ“H§y |¨x7Ů—˙Ö,˙] a}Z›&©M—Đ&Űç§4÷k"›ŁřŻ&˛ĐÉnŽD<4‘mb…¸ć)ŢŠ@lăŰŘĂuŘD¦XĂ4×seŘF¶…Ma7/Ěőą‹ ¬býnńsl…ók|<ďĆN·üH#xo9bŰŢŚ—ßU’8FŻŞ"IDgöµzK#G¤łhCŽ€$±Ę• ±q:©2šÚŐ>WfYĺ›*[J‘tŇ›j¬ÄqÎUĄ™•˘®7“ ĐÝ9¸¦đőSťj·Nǻș¶Ę Ç´x,˛ÂąŘÓS|Č3©9‘ÎeŢíDŇ•µ#ą–°,sú<žö”Ľ“Řău\׳%śóŘn8‰Bs­ým<‰ćŹăîŞQćHţ+çЇćnň´QĐĽ¦kż;Ël Ú*+€2Y‹7Röbâ˘Zşzਔ6á-µď«»ĆÝ>ÖŢ›»ém4—š4Ň%°Ô‹ţŔŕäJsŚÜîę}XťŃk]€$c% «ŕ¶U<†ťz”šâtÝę«[»ú†ľŞ†6/e0hč˛Nż]{×¶ž¶cňë*ś.őXţJ¨‹x +Eq”ľ%Y]ł›$‚R­&& žg: MаÉ2&IجEÍS›ÖŚ+“É,ď®(WA˛÷—:Ç ›XźŚťŔęň,×J<\ĘŁM)ęÖ–Č0‰Ť§Ű2^Ő‘‹‘4—Ž+H~I­PŇhńł±IË\óŚĹó=žđ+ČhAď(°ÔŮĆ$\ć’Ý635ĚÔuč•b0-ŢS©!Á)ďqş;†Q¨(t-rĺLG_“ş–y±ˇAĐ>ć02¤FrýäiQ°ôâEĺq»°Ć?s˛!›ęË퍰tąÇELL׆ĺ×x˝Ç ¦Ô>Ú +°HŰ ®„Ěć¬×‡Đ&ÔŠßçl<î>ďgHgi!ZŹ 1 J_Ă6˝Â©B ,~Ľaä™¶o…kó†PLhÔ2 Éi¶\ +hö .»X\ —dĘ@÷ \ěz%V ĄŤ.âŁt‰ićjľ6śOe@ď+PlŰUÜSǧŽŤ}˙)ăSǧŽO ź8>%p|Jŕř”Ŕń)ăSǧŽO ź8Ö=>%p|Jŕř”Ŕń)ăSǧŽO ź8>%p|Jŕř”ŔńÓIŕčü>Xĺ?˛›cĹS +ǧŽ/…ŁŰv”uŞ©KÖ°[Úŕó3XĎĐŔŽ×PŽ­fJşA[šëěgŮr¶Ş®-eQ39%ťsrÓą$ĎŁčŞíĘ6Ő<öŤuy‘Âé‡be.UĘüˇXš)ŻÇšŃC˛yČAŮŠŹÇ"ĘşŢţőŔ&\zÔĹćľ6[µµJxhfN˙çDTX{ôSŽŠý}µŔóç%9«_R +Ňu­má 9đ‹išĽp€ţuH¶ńSń$ąźĂIśń§G[Y_+"ĎÓëZgőQU¨ßšě)®í9ú–PÜ’µ5%űK¨Ăţ°®MY[]­«oV7+Š—'XőŁôřxb˛¤¨5Ş—/Ţ/uI”*ju +/7·ë_•Ń =ަŻmÓÖš~%4 e6ě&¨=ľ3\Ů”V_ +P™@ĘĎ?Ű(Ż>UNuÂĆC‰Fë] *€ąĘčq,q‚s/›-XT¸m%®¨qPßV0ąUă®DF5®¬ëÝÍí¦—č‘ŃĐyű*kýď7éjŤoZáEc]ŰhĂ÷[a¬1„ÜŰFl‰ÍJzVÓרPYcI‘™ťCrlč¸Ć¶_㼮Ť9ű᦯¶ĘđŤ3€oŃCżţM4â`|Íľ^×űúZ7ŕ¬ä:líä›×8;ĄĆşÖ»8¦\ÍđKŔ\ŰÁ§:ćëÚ1cäď&ł‘ÝÇH„@ődĹoj‚†mĐ-d<ńŇĺ{ŃÍ,>ň4†7 O +ń’öőŐC;¤ßµFÝúj8ć§2¤¨˘+]Ţx¦ žfqlž!ň̸™UŢŰ?ĺ–¨ ¦Y\`Í•Ľ‹C>bŢ==Ķи`ÄAĽ·ň˝ťî/ż›ňý¨˛Ý+Ú”׿nUłÇÔ^ĹFʵ’]«Řć!{[Án\ąu—BsŽ6JňĚŐ6ł¦ĚlUě%fŰ€č…nő€š}ęl2kDQS”m(ßŃ©Z%ď3óŹńEĄ’…ŞRć*éâi9ߨ’ߤ†×ĘwR´rŕ^ů>$ĄkCő®ŐîZń.ô-m­â +Í,Ťâ},łB1Ů;V9U™-Ĺ;­n„úŘy ­p ďčÍÁşR˝OI=»KĘ·NĘwÎĘ’•ďś›Ą@2•ň !D¨Ć-§ěĚ^D—*íi‹¶‚4 ¦ąQQżI9ŻUrôXUůTňňkĘ8zĚęř]§ŽëEľF’Gua źĚ'.I×)¬Ĺ6«ąÄşć´R\h±Hkn„;¸ä!’Bľ”ż¤W˛â9ĐĂ•@ŹuµOÍj«˛ÚlńMŠÖS\R GNÔjŠ ·NŐZ­öGSd˙Ö{|\QוEŐ5Šú,!ŰŞúެçŔ’9í§ÖĚ)€I| nTęUâ{Ĺ®ńQ˝U}·yˇÇ^ÜżIuż.ňC$Z“ɬŠÝf*™F쿪ŘA©Ď±×Ő÷Fą«řFüoS˙ô¶ŘA‰O¶ŘG|÷nTőoŁÂŮVëUéu>­{J´­ĐŻ>8‡AÍ»ŞčĹdĘĹ›lTču/EĐo©{eݱÚc Hżî˝Rź›-µŻ¶Ŕ·Şß-VřaĺoUř{eżˇź‘>PôŻ)ů ŘŮÚű[q×Wż¬˝$şnöüĆĘo­űTW«Ýďw˙n@Nĺű)ń=R©äş˛ż ×]ő»aŻě´,W [:KŁżĹXf ±’jÚô4KŠYřA2'B–ˇ¨Ąég`©_ŹÉSí`¶µőwň×`OfH `’Yű±a2÷…ćMT`&(ŕĆhěí/µ!mąĄUݦÔ'ŰiTú´)şyoĽňq·6ˇÔő«š&cĽáş«m‹á©ő•™şąmô8ŽŕťF˙HŹďňÜ˝3ăkO=ľë'›Bˇ&©%±(QťÂ6Ş®Iâ–Sˇf7ç5ÝÜ1©Ö­Kť¸öPé8ń˘@/©|ŃqÍ•€óݞjs%ŠKMÄ®˝Vś1)đ*U™j]jĚ4UebüBSCf­#­­“klń‚‰_už„C“-á¹͔@<„)šJÓC3Í^iéAŃŁßl·×}č*W ÇŰ*\\kĽ(Ű˙n=něb/VI©&Ů»ô§ů˛c}Ú­Ń]>îĎE cđ#NNş3xyIŢB1ô"ŤŞ2Ś<&@J%·ů W'¨ş„ćfYýS KURćk-çu‚]© +P©˙cD0OUR!ĵÖO®XšRrENT®Ţs,)—Ş2OŞż#uLűŞ;6©˝„Ş’Y—¤¬Šňšő¤ËLx#µŐ^bJłU« +Yť6Ńűnoź„}ĆPćívß@k1ŽŞd÷JŻvľs+ÖéÖ>ĄŰŚůë2´­Ů?m¶R®=›vx =VŽNň ÇÍ2ťUëóţ<ŇĐăšUŕ}Zź­ď¶›z´ďŇŞĽ ¨=őř±{ěRöÖYq¶Ó?’'ĺÂéS)zK>śPPR“Ň« GC“§ÇÄ+ś¬ em™ŞcW8”<âĄ=Ë5‡ęĂĄ¤\[P®/&w$Żmőá­Br·•’”Nr$4嚦6Ú´Ý2«÷Ľ«U‹ojç¶uéŢ˝ ěţ ío»Çjs/Řż»WIîŰ#6`Çš‹ÂNĺ>=H†[ÇřbŮ•'ŮŤAvˇNuˇOĤ±ç¸×"Íťu-‡ďĄr(kcú:7PQéŹç[‘ĺ[ŽÖ„lIZr,¦Äöµ±k$ćeÄěc1]˛pŻŃJ +‘ćĚ»”'ĘĽ§ťyLněK‰ŇŚ‘š!Ő°ö%f3ÚÚó—)muŞcęÂĎmŞßĆX’Üě۶]oóz‚Ąc.ąÎ†WŰňcšŐmx—†ß»ŹO·ÇĆr2U˙Tţ÷ţo¦úbÚ˛†—rÖ{ Č#•ÖdV˙g&)‘#Č;3‡kyŠ[/HćĄíěb7ń[6Ź9 +Ä|—”a| :[k‚mĽU>±÷ďxµ§ŻŃÎŘ= ýäö%];íwzÚ˝„­úKÖBč3ëöŻż·IĹlŰTL_¤˛PŽ´Mf[ô”ä¦xNôÖçâuPĽĽfńa…\9c7µ×ŔçźUŃÎŮűZĽs놝S0F7ěâťŢٍÁç}KŢ©ŚçdLQZv˘pG#Ó,•V—„ó˙`L™-ť +N~N,ę’J»N…U‘YéÁUTĄu]m„ymSźu˝/SµŞ:‰ďZü©u[Ś.Úk±Şľěĺ\Öú]pÉŕŔÉtYď9­xŽoVe˝W×ęăŔřłCubýĄ¤G놯’Őo]˙l×xtýĄ|vĂo)`ĄÖ˙ đGM—D2IR9Ý$ +p)Ő{¦• + Ş‘u˙‘kÚ–őęKŹĹ5Í+ş:˘:qľÎűö ™J źvMO1ŃćĆšn2ÍVß^!ÖŢąÄ3›µ]÷öşşs—úęR’_Ą5ĆšZ‰żĚˇy§ÇunWz]ëzµ˝Ws^sŮůőŞ—uOűJš^ąŔß„Kw-ŕ­Ţ"¦˘Ě:MXˇOô¸¦ {Ľ4^íĄR±Ą“Ä%ŰçQ>]ŇâRš°cJ-źs±{F«'cä%y«đ:ÝWiÂśˇŤó + m3Eó,)őhĂś±CĎ)}žP(©ň†šoď^{nł"ęçź5IŐ?@ETYIY#%ß«&ŞĚ×µU˝kěM M%„â$¨ŞŇ‚ÝÖ´MjúÖôo´ĆíŹIO 9îC¬f•l kzóZćµ˙›­iłŞXÓ[w鍫Š}úaöhYU ßqU·TăYăÔÁ7G$ Ăŗ9ŚČK‘z3cđzńZ—čź8N¬ń áCĚ«•´% ŽŻôĺU[€ęŞŁő§1 Q—ß«úćj(^ůňź^żúŐ›ŻŢľxőÍłgµzZżóůg˙ôťĽgâ{żzţöíý›WĐ\ď^ż|ńü›{*­ůם˛~/™Ů˝^‚·v§ÔĽťîÜböjläw&Ě{’x|‹=ŔS„s˙ý۟ҟ÷ü˙‡ř‡JŹúoŽ˙Wüţ?ńęź0[»_îţýL»Ż?—O˙ZŔĹ~(ýwßň˛G¶űÇÍËňýăć˝~wűŻřăg‡7oĎ/ľzűâő«çoţĽűy„Iv|ýúĺî'‡_¤Ů˙ňňő‹·Żß|y|ţŐ°F_ţćĹËű/}˙ŐŰźîţžźřżřcc +˙98x‰řÂ/ŕVŞ—)Ź-ě%…tzQ Łń°QęT+ScŤ·.uÝ´×kŞDâä»{.Ó§™őâž§ŕçF°§W}\Ă|„ÓYď¶ÜâŔđpĹră~Ŕş"ćN‹+ő´87+cą¶ %“DŢî˝6»Sě8ÄŽń±OČŹQ<Ý9Ëç¨ ŢŔřâ­]ĽµQŘśŕ‰{Ö-Âv5t \1ăqmîxŢ­‰s-SŔ|Íno1ř8ä d\–9±ŢĐŻđń°ŕ… <ó¬đÂżĆ~Ě<čŔ Î †?ó2čptućţ;?˙;éD©xI`…[3ď4F§ů0`Y +'Yibúб=®Ň{ŤżBŐ‹±;§Â>@#€§ˇŻí´{(,xč F‰±Ř˝¨?“nMxĘ"8źžˇ ¤ÉŃjď'śůÄÇŁöŽI%©;écáqŚą°Čy~`Äa±ř4/Ú ËŕYË’‘Ř.ĚEą„|'Dz“ěGSgD?ŘjĹN8r;ŕpšqšIDZ`’p¸Ńcdí8  q,Łö‡ň{|Ô°ÎŁ™§BJ Ń wń¤ůÍ~ł=Z^€ßůLśĹ +J6T’(ž +ó‹ga âÉQYĹŃ9çč´ĐęzĎ.•”&FGˉŽHąŘ\ ž˝)upíĽŤcŹ[Ś’K"Ŕ,\¤ÝWr+Ż")`a0čHŮ˝˘=Ă:H"](ô{ş•Ď”)b§'·÷B4ăśń¸4Fb|áp`îp,™Âő F­âSa;Zš@ŁĽ]@xäą7öŁu”á‚PÍb± iŔw6|\čux: :žµ'˝›đ<éaŔj'P +¨âúQž‰3IFzbuJśµŤQI‰i +T«(~.x˛ďÝ@§fŻ”ä ăD,ި ›!í± ÷ĆQŽ[-›w©ö«G\ Ea…&+|SD25¸·Ë„ Ŕ<´‹\Ł]`jĺ±-=eR:öi|ěÉŕ1y…ö6Žmw/`ěžqŻ äŠČüąç›o…Ď9ž„Ôö<ľ±ldŮ˝Ř=ÄUôB¸Ę Î8O„88’)R‚ă&gÂx1ű‰b"XĎ +ľ¸p¸Ěb.x¸+& –ÎŇáźüW¨=v4:"qâŃ,g‘yfe™üW€póŮ©?[ľ=A¬ĐVhÍĘ"áüâó4ďđ'şÁžĺą ~ˇ¸p8KśísŕéâĆ Ňłp˝‚p4\făf¦äďAÄłÇ;ĘĄ!|§ČŞŔ“YÖ*p|ś-ĂyálńŔVůY@wŘ śmMŕĘâ\´BpÁłh.He/ +39j0ÔŔmĽ»ş3ĺÇßFIj´÷ÓÝ3&~ĆŇ”¤içÁş€Ę+K”`@ź©T6O›Ä ĐŹ*K +ŮżáMžiM­ ş“AůÝ3Ě2X6Ô>¨ łŔ,AmĐ Š€Řž»gNÎ^Ĺł,Ö|ÂćžP&T ¬źÝ“iF8‚‚pBü›0ťgxz°ůibü8¶Ćqľ“ŕţ-·ëи +§řއpŽŤUá$ÁĘÝQřúŢ‹ź&ŕŠYÚ=QÎÖhŽ›ű¦§ĂÄńJdWéňéŔČìxFJ‚čřtĎ‘=‰|Qŕ'ĹŰĆxâh”RŹŹ÷»((Ź×„ńźŐ/ě~öOŻßBî~ýćkÔ߯nW‰ägżľţň—Ďßľyńżxőî'§Ă/˛jö›ß˝~óm|/Ëńůż~ýŰű/żXľÄ`ľxűgúëFq÷×+˝ë@ďůg$î<5~÷“źîţíżŐ:Ćú!>˙9ľ(—C`€ś ™L`á)ݏKÁ(Á!ĺ‚SČ"cůXfüŇx0`ě 'j\”CvŘ4ĘŔ’¨k@TŘ-Tcp4{©’G¤RĐ‘Čí‰u•ďi¤©©“;€­éÎó`ˇř*ˇˇýiʸ?Ä|&[Ć®·â‡ŹűÔ_˙1°XPţ‚ţŔ#!MMCÚŻĹß e+ˇôJ´]ňz®ýĂ»)Ú͡˝›=fĂfŔi¨~]eĐĽ †‰đLENV aÇ×j öč’źź'®Ě0—Ł…e­qŃP&:  +ŕ´†ý¬Ev¦câÂaăäM2ž{Ďą†*„=v`Ş{)ŹłęÄÎ*¬¸¶ľô¦Ož†2›(ľŃđŁ±Ň©Ŕâq5dKxĺ*Ż_¨‘ +D§?ŐmÂ-{ɸcąÍ!ťá¸šYY»Č§ bް`S łp_ă~8śŇ’đdÁQ.Ăbě— i1ť _Óp<Ź=,¸“‡Ć˝˘´m0!`;<8:–ČÚ¨›<  aZp«Lq8~Ŕl0fŠ».t"€(=—AŽeUyLř’ unĽ!…0Ľ% +pž ¦ţŔÝĺ} V§ “-!÷č–ţ@7 vÂLöÉ­B ŹxnÎŻçŔ ŘÇţ üZĘŤVĎCáŃ‹ľ°ňâvŔ :“” 3 -”¨ Đ×ŔĚ&—ÄOa5(Ś.`—b.pŻ™ŢXƨZKéĂĹm÷…oČ—3_wĺĺ¸Äŕ’BŤĐ©¨(Všă¤‚/yž ܆Îqýa˘đ_úëߍŞ3¬ý$ąđĆú"fXëÁB§Át.{.ţş +7wAô+nS#)8iĹ3µCoĆ7<_śq@ý» pM±–OŽĂk&YŠćŕBP=¬ •ş5F…ŁjVÜ Đ:u^L—š˛Ż§ň˝šY §ď‰›ŕF ]OµćA»”ĺ!QęŠ7ĆsŮĽšŘ‰üűb +Ż7 ~’É(ň.îŮZBDÔÖ iAŢłDĐ:í<‡ń0ÚŠ¨ ZĐ\,°>‹C/‚śv]ŢG(GřÖÎ’żaĘPńŕ2Tđb«XîlřI6&Ą_ś˙hĚéć *ŕ.P˘ĺlLř8Y Sj‚BÂ~C˙ŮÖ_“ˇbPŕ'ŕb :íýz€PBĄŮ‹Ą|¦îJΊ7†{)śJy+9Ř!”1şgtĐ‘ăň9¨đ8FËľwYśŔ¸ŕŹe§ŰS\3żđąlË ÉŠ(áé’´2ÇAÓţI€‡Ě;±‡ăV<Âá‘\˵dđ\v§Zav48Š ž°8ÎŢĚ9€‰‡ ¤°9×rUÜaO0,ó`śI lQ˝¬ËLŰř”úw8¦É5ś€†$â…šÖ˘r>P†ÄŢ038Éó‰ÂŰ2~`&N*oÔÎ|DЉ_đj>żh qŕ |Ę›râ>Ĺ!ígj”äšó‘Ób¬™pGîˇxŞ:Š­‚†cŞ ZćcsfxńŐζ§·Ł˘8xéD!ňˇď˛”–a}d1ł%ä šśŔŕŠP‘Ö4D@»–T”EĽ„µŕ±‚sÂ`˛łóÇ8 + ®“ňOĹ"÷‚±őxP€IđIRŠăqÜŘm­\E‚śe[Ů"Ťaoď)žaěč•/$ńŤ»CřĂ ţVK}Η 0K«‹ŽşO20ôyŃŞ—ĂŤT:Ľ›…YZČcA8WɆDSĂ\ĐŹ«–9zCqÂ1'Î$as1ČŰú?k‘=ż|nY´BźYUÎťž ®8¨$  *q4$­™K„(¸Ç¶Îí’¬źUuZK4ZK':ŁnŢŽí)ßҰ¦EpfĄ1ĐDT`ZFdJ 1RÖÍŔ!ăhw!Ś ť¶Á+ ›°âN-‹A°ż„nĐ C9Ź–Łô +‡ˇc…Ŕű”ÓĆ·Ř áhšĂŔž|Î 0±óYJp¤ ŃÄC>´<g×;´ÍBÎÓ< ±|şŕA4¶F9 g +‚Är)9=V·…ťhČŤ«,ĎŹ‚V±7Ĺá„á~Éř­›˘"ĐŰ×â¨k`±ácMăń€C„Oë5¦¤ŕoś;r ZÇ9ăY”±=1Ţ +mzş0mŔ‚NŚ/Ü%\zZÇ{|1Ťkk(—p\>ľ(Gq”*O|nJ:>‘ś©ŹsÚŔ– O†ÇüyŇ9Uń¸Č–˛¶XFpÔBç»Ć$†®bX™ĺLQB%ĹČxÝo‰ĽŔ „]iţÁ6VôŞ ’ +_gËČBŢŽűăůă†ňbîDGPZśKb…‹b…âĐČÄŠČ«V’H‰K +d@ b ›!•ó{&‰]‡-î„íAĐěźF ôNA¤|–上ľ¶´ŹcHŚÇž)Xx€ŤpĄ=>ŹĄeEŃĆuöjĹU𲼢Ź^ÁÓŮŇĂ„vdPGtŁńŮŕŐű_D‹áÖš"Ř’g€ +˝D†g€­® Ś2ďŮ~2ŚŠ¦WŹëȡIŐ~™šě}‚Ô´D(cXšĂh;ĄŞW8ä~Yy'UĽhŰnĐĘ€éc.I̡5§%…Ú IĐÝđ(x<]>«j˝Ĺmé˘e›)+Đ/ťŃA€Đ(Čy˘7ę(ݡ»ä@ţNY?‰yK±ťŁkÍíä±Mw˝)vů‰Î8Ć4µĂA%řëŠÚ ±Âĺäř˘tň/IĚ€¬č3ĘĎ|Hb™|ČiŐŢ{ů›î‹L*µ˘Ú˝č®hůážDÁ2cl˘9ORŻ:yđQpĹÜĚ»AëPÔmĽĺđC˝ł×Z†+ľĘZAŁőŚ%=‰ž6†z:˝-螸ľAÇȉ MÝ2´ęÝoxĐŃýf9§×ŮĆ+zťŹś‘§ÜBçň•Ĺö:#ů—Ńš´ˇŚ*ęö8pÁX ŠńO;ß1†Ě\S[ą9Ł6“•Ůîeńňdrg’hŻh“Uv«}Á´WÔÉ“'IŇH'Ynő^Ĺçâ#óÔćG€|ꆇ…őľ\ľSŹ0Đo””OżQ-\·'č´AĐÓik™Í<‚t]µ<Ŕęş(Zh°µ+Ő©(qDaIk3iʧŤRNÉ= ~Ú8Ř×Âďč…·0|x™ݰ„“<ÖHjˇăÂnťĐ3Čš“=9/ÚNZŃ˙pOUP +¤Uh@/H%ŃÖĂd|C|6ÁÄé‚3ÂlĽbžĺ™2Ńä–îĐÁt”öśÇE\µČ„ŹvŠ€™˘ ŋބ¸PÖ¶¨Ň\­ZřжP/Ö$úµr>.é‘bqX5\ťyrŞeĐĚ~đĽ ;†{,n7`Ô‘"¨s,˘tŤ·ŚĹűŕĐĚ“ÖCäôŹ5ĚMÚś(Ž č:†±” S‹7fČg©¦őé(}*ć†L©·ʍ–úĐĂhN ŕŁ(<`gLĺQ:[—?Xŕ1ĽŤTěHŢV¬]„^É1蕌Ńdˇ·źh¨şxZK B‚çéM/śzCBě-6*„HgŕÖĆ6Ţ|ȱbŔÁ„9P&nWM Ź QMm\Af4ŃÖËÓ\1: ĎÜ۸p|‹m`ţ—Ń6z…Tič”ĚČČĽwzŰZßĎh±ëG2^±ůHăeĂÜôÖÄq~{käµ…f^ŢÁÖ9PF6nSV¶¦vd™L®=9vÚÍM1y‡˝Ő‡í9ŻíóÖ>ťŮÄ`Ď8Ě`ßfU=}ŕy)~ŕ›É€żÉu«˙Ŕ˝‡á¶O’Áaˇ?‘FW‡t–Ť›gáčaŃŞŁoF®Íy>z„ôňŔŕL2Č3ʶp28ł RNvÉrŃŕ,ł-W ľ6€6¸é$ŃnpîŮ– ç AÄĚîDY(śŹˇö´é»”…âÁĺiŞ˙ÖąL Ňyv˛űÁ7kSA<»Ecp +”•Á©l[ëśŇőiđgT°ńŠM]nĽ¬Ó łŢ Mön{ŰZiëń7č¶Łŕ-Wlé×—uúůŕă8¨öť‡ä6B0řWŽÝô®™\1úxnâŃ14%˙耳 ţ§Ű€Íŕż: ?ëë€×ŮtmĐjđŃpŻÁÇw7|„nđ.@ĽŃMy Üś{PqđŹÎ(äŕV˝ b^Ůü¸đ4»oŻ˝Óřâf/ó˙śÓ7qäÁµ=ŁĐ˝/ü€_®ô5ü=8ŕčůŕ»? đď˙6”?Ä !ě †h…mcÄřůŢŞ1J –‘!ĐbŰÄ2j &š1ŘŁ·îŚQ#›f"OAô63ÝU4‘uö&ynŠÎ|n#»Ż3YQÚ’efT±‘mµeűňÔ<¸cŁDďŤhjö”ÉOŰő`‡ 4ŠHv$faZÜţÜ3ÓĆĚŔ\5ÚEĽ$˘Oń’QŰmW&I–\žVťŢH™ +rHÜ­l‚¬Śť~ޞ<4ş°5ÚLŁŔł“ńÎäFăk,Žq“ÁşŐn‹3GZ®© WŤąwüXo.oÝ›ś‡GčM×_mĎDo§´7¦Gö~m˘)ľ_ŇŢ‚?RƦ+Ŕ@a˝KÁ@¤Ůa ňƉaŘ$Ů÷aÜ_˝ŰÄăá]2r ŞűL—S­Ďż¶BëhxMÇrcđ\.ç™ŔRéĹŞLsŮ1JTu#°§…<R-33,T84µpf_–đdŠ DP »)* UčgŚ€Ác^/ĚňŞÇ+"MŕĐÇ-¨=bűM[1t9Ć@Ç µěéDÓ|˝™×«ˇÍ-F21* ŹnÄÔ–’ÉÂä#vcÄýi÷Ź>t4LĄGf=`ýP'1JW¦˙‰ŠŁâo"R… …O|–É“ˇĚ•’1Xá·W.łb†ˇ®e%ýÄ€}Ňg%’$źa¨Pň[\ý¸—ΙiD°o¶n<\Ń=ÁWźl.Ł˝ #¬ź&&„áüN(”9Wp…“D5‹`¤łĚ0H#˝J@h+fmiŚ ¦ŕŤŽúéóŘş|őDŕ7¸¶-K¦…Ň»d[ŠOqX.¨™ +Á<‰^Őó%Ú*ý<ř‚@Ô6cC)PŽ'2Ö_Ć„–©qd CM­ç¶ĚŻ$ó­ŘşóŻ?ޱöqý©0>Ëćń2NĘĐŃ0±ýYWŻĹľ‘?÷lk&Ęn3[îŢ5tń•˛>Eš§Ć±ÁŽ·ĂOlsáőc;ZoÔó©4ľŻ¶Ź ŠŚJY$±µq\„˝2Ĺ·}dŃůcý4•]™ż'öů0ý´ÖôRĄĂëä\'×ę9ÁŃP;™Ű+ż+Řn ’‡óىÄf$«˝YˇËĹpDCTĚz±PQEń‹äoĚaę Ć_‘ÜkJú‰ĺ ťŤÁÁt(ÔĂě<Šž”  ;‚çX‰Č b€"@Nm[}ÇťÄĂŐâJG·]&[ĆežE`—ťčăĚĚ8NóV!č>bëb$Ďά!xNřąhUăł3ĺb˛u™ť™ĐˇL‘ɉ5JŠ!fY2.ÄÉ•—‰ĽĽŤŘkşŠNavMźźŁm™Ň±¸K,P፧mź{‚­gřˇ_¦|ćÉ1 +ňŐĚC ń„ôtŘΞ8|ÄŐkŔDQoF,š9Ě“L蜸;€‚Ä+ÂË!Â2Ějµ±Ý=-*ËL„Ę5^âµâčóâÂFGĐVf™•~ )ŕ•g}4§9’Q[“AK ÍN+˘˝J'CÎť Y{c{ex™·I(<ĽéV»d31uDÁ1H†ô.!M]ˇ.ŢŹîx‡ “Ů“©›SEđ*¦µ(ť~•’«ËŮ轵ącqʼnlÝ´:n=GKM<4N)‚oýö-»ąűĹs‘öVS€ęŘ“ŃE7ŔŕVä$ţP| A@vŤHHt×>6ÜQ1ŇÉŃ:HŚq1Ąyf ,E’łUŤOL‘^¨°ZJѵ§ź5ş¶3˝^Pôâtăěo‚JĂ"R€cu¦đs&ĆV·tŔtz„Á‚fj÷-‚˘_83đn…%o»üÄ“ŰCŔÄ8ŚáXw#-Ot´Ą0HÓâÇM±ź eŰu›Š¶jG?Ća?‚ź @,-wŐ~׎Â%ŘŮę8˛…©ŕDné‡d°ÚJnËtŁĹůĽç[ë§:–·Ţ§g™ŰĂxo˙x˙Î3“Ů~3ŹăiŃŻĂxâôk9]›´0ž=QŤçhO㼍š'{żQá ßkăconÚQZé7ýuAçš|ôŐ5Ál+“Ý(=š«ŽV +Ë:„Źźî_|łĚ“ĆAÄ B&k ڤ1¸"íJ)YŰßVö´ż(üźţĺin®ÍŤ“,ŔĚ/l'\c¦Ü¨¨2O‡çˇlÄéS2ö0LfěŐĚ÷ q %_±ť~RóÄźińgĎ•ôµ~’ČCč˝,YB$}ó˛ +AôÁ‘´ŕ#tü¸ä"fM>I^bb^dŹśf0{‰řä),<ÝĂÝ%§uź>”ńsgX÷n‘âť#!h>+\ĆŃ5âý·7’ś˛J`ýĄwĎ,7yVÄÄ2ń3çÄxÁ\‰ÇE˙!#GËĚôĽŽéđ™G›§ö :dyPYÎrÚ|ÖPzA÷Ä@ °x|ç~Ü 1ŃÓĘĐŠ YÔ5%:í?«0+ ˝ÁŁát¤,§~ěro+Ćs@ŢK8ţ…ź0HDĎĚ@ +١Ęuú±|:ÉN·HýVětτȌk€Í*&RŇ)q­ĹŁ.JjINN˛MS1m‰ôËó®ęďÔÔű°©:ńrŁEŦ Ľb)=ꍠů’‹RůB7|HĚ^‰` +tëʼn3‘A@Xcb˙™^dâsĆčÖĹIrO׎˘?DB…µZátŁű ´gI¤$EýaĆŃń7Čݢ8CäŹŮĹfşŽS8f% *ďŘ!ůA:¤"#YäEq—˛)Dţçh‘‹ +vŐ$`ÍĂč]ɨFżĘCâ$cĄöiÍNÂO“[úuŮĄŃbAŚbrŇŤ0S­’Ć‚>,čŕţ,w:bF&&Ş.PfźŐÂţĆĎOq5(řÉo A šÁ0Ć_{’)é°¸ÝÖy “1eFG†X33Jü$AFtán€fwBÜŽi§·ÖŹYj$b•ĹL…Tz€ČŁH%Ž…n褳MLLěA/?‡Í“ZŞdľs†ÔA ˇý(Ó3ĹÉ™OsćL¬Ú¨łń©YĽU {)q~ď íŚárÔÎBÄZúGP) Śź`Ö*“µs!j‹LtúŚaFÍtRăłâ]RĆŇ-tM"# ý·™Đ&ݨ_T*ŠŘćbĄ[˘¤ĄôłÄ~XĚiŢ *=ü0V&ŞrŐµÔÉhzeQĎf ŃHá-ę|hzĆŰ-T•.˙,Ű E‘Jüő°ŐĆŽúÝ:¦ßőWžŞgăôôŚgážomŻÔŔ‡č@47ޤľ‘­÷dĽq t[ˇ?GVłčUĄsٶĐ/ľ˙ň×÷ßÝ?{˙5ŹáţŘ]ĆĚß’řRďžŮÜéë9Kđűf‰ ĘőQ`§ç¨„ów%2^U1XL…xädHȬű°Y—‰—›%9Ďj¬ŠAaY>} ťöU1đ9‰Eŕq¤°ÂVU *tK˘âA7ń±*KÖŕnT–člÇŞ2f1Ą®TĹŔŕÄđ‰›ł,ĆĘčT ɲđ­Ą6văÓMEÍOźřµÍ2ÉĐń>˝®IŁ$ ĹŇRąx#¤ô˙~â‡+‡ńĘë1Ä4žŽU„ßWĺőÉĘ´fŚdĹÇŐXgO3|š‚ĄpĚXgOBLUW^ŹÁźŃqˇăú<ÖŮcܨŠw,§÷č6YőŽ?Ň9”#˛¦m‹MË =Ś$ą̈6Ítˇ‡J$a%y+ľŕ•ˇ‡ZDŚó 4ŹŮ3=]‚R­5ŁÁG˘V'1™h˘{W >`^ ‡ŕét0ŁÁGd†Qöź…:;Ąp+!ľ3Ë †Öŕ#śYt¶ťŢŢĂŐÚQäuŁą‡!JŞb9âMsŹĘň®Ł$“5ôćžămSŚwZŐĆÜŁč ­«Ž`ŐsŹDTĘ­đP˛<ťąGöĂZÁ&gďsď$:´ -“¶aî‰YH85ŕšL™Í=T™¨Šę#ă÷‹ą‡;=îS&vĐWĚ=<­fNŽEëf;š{ Ë\[ŘŢF˘îsĎă[ä=Ě=7ş Üb쉆‰)&ô¦a‚ąűšr&ź+¶žćŁ$‡Ý3,§fÚ–ry˙¨»aŐqpŕŔ¨ÖĹ%!÷;ĎŹ{¸M3Ď_čáţR6žOĘëŕ/eây ‚ťšc̶0G/W*؉ôc$ć†Fc7¦ŞÖâý8‘[€»ÄŮrŠĚF'S\¶9±Éă)pçÄŮů¬"‹^‡’j›="|Łł©+\7|,'ö¦¤ů $ťiQ%8Ú$źőšĹµÄŮ_Ô B0'\N;NąAL+‡ňZ¸Nd!ž\” XÝä7çÉn«‚uś­(–‚!˛ EJź.˛ ±0‚°3cěë¤ë"zâ9»­KŞvňsČŠ.ĄV%·;0śÇÄőZˇÍ/‡ ŃgI&keH"y°·ł’e­`G*€ @°ÝYr’&_=Uúĺ1MŹ"¬–˛Üă’)Šâ$𵂓ÚDqłş0–~3›ľHG2ômJ*~Ţn¦ +D˙Ŕy^ ؉3—dv¨2ýSôĄşPç0±Ŕ˘ŕŮ(S(Âş(šůJůáŘÍĺ x˘F}‡ dąŕ’_jńÖkë$p´»HÂJÎĺ(kD©†uŔ‘rA‘‡óű€§ +p·YĐ$s,LŘĘ$(ą ŃZÚÉĐ1¶^+Op(Ě1EaÁJ­ŹşňźOìײä#2ż$ډŮMR…‹áŤ¦ĆřnTJ™î…ÉňŢZnŰü:“ډŚńŰ´•9dUS@Ídƶ\ĐÉ>¸˝rĺŹüwS'$ż«Š¦=q†AĚ +–ëppĽ;sŃĚ yoĘ—pţâBłş^‹Ö1ŐŇ"0”׉¦ÁX&E2†Éďs‡I˘ęâ*’ŕ‰KVµźY %Ődˇć$ůn ¦9I¸Ş¸Ň"-ińŹn«× Ž/Y—,‹ű\2†˘¦ŮtW˝ŽëDýÇDµ1S}<­<“[äŠ6ŚÁ4˛=F[‡± Qx§#¦RĄ|ŹŃzIëŇ]¬·ŁiîŞh&µm•9DŔ1E&Höą¸Ů®¨‚XʼnŰ4—˘Es“Ř8ć¦kŞńl`y|Ś2ŕZÎŽŇ+±“\Ąb˝dd°D­„4ÖÚFłH÷LJAI*Ä{»‰g)Ä[)>ź*(qĘ‚ćñ‘´ő–¸Ţ‚;¤ęL’ŕ‹>ĹĚmI:Ęőś¸Ey¤6ŐźH|L«KâĂ„Ż5ëxSIč‚›zćkĎe¦ÍËKspSś*wÔěyÜąµ¦•$żŁlČ|Ôr,Qhĺx±7›ÚYb‘-5kšűrĹ-ę•Ě7F˝’bG®Đ%ć’Yě(`~KWĽŽ¦zŰ @˝$×Stś´”vfďÄź1Ucş+Q©gUn +ŹÉ†ý 'A‚T®Lş“×Ę) bcy3r]Iů +—«k˘‰N>1I4–kKeÔM;^SÂ'D¨§ď{hëµ)±ž1L–ny±Ŕ$ÂĹ c!fI•˛pĂM5ąáÝ8r1ůäÉ: D‹%ëharęŘ4Zäw4#E` ťhĘŔÎĄ/8ă‡dOŽ7č_nGŐż[Т9\Ł"żHOOţÄä=LKGĘnÎŇôPJ‚YkÜŃ»dfĆh/)+×węDËŃ,ešőd&>éŚéŁűe" 'ŚĽA”NTĂl?{í§FKj草Ů寕By٬WR¦´&OΤˇ‹ęw@LąXö KNČŐaG¶ě/&“ٍ«(6»’yTč§—·°§KŮęÄň4Ô0†ŮÄuÎl„îL$Jw +ĚČZ­N\¨Ó%Ž-żâŔ¸€RÓ ćY`yá‚"E"m +~r'‘áćň ™ĚZE”§µo+ŽňĚ4"—'Ĺd.+ß“śB]ÍÓ8SĄB*íěńďXJ•§8nÓÖ[u{fâÎÇZ”K9ţD„ťŰłr‘L’ĺ\UYš $×v=‰ÎN`ě’–ô¶RŐ:˝cÄR)N1TFÂip۶NÜÂŚX㋼J 2˛Đ‰+Xnwâ=cĄpr”—T:)q»_Ą"­%áwIuDkaŠÁ*,=E/Šń<°oAzÖú7ZŃ®·‚D( ‘áá^%FP‚¨:Ô1ÉđZA“ą ÖRoś\a÷t- Ş}őőFöíß-"3ý}XU…iwW„l¦*„„Hˇ‰Řt+šk­%LDަyýťK{q÷®t€”WđŠę m„µ™¸|2zU=Ţ@hf˘Q7¬ĘĘäŇ"â]-8ŮđJ6Ľ¸5Ík@#ą8ˇÝ˘KŃNîBźŹk%Ä9梦'‘ ł*GyžŮ÷łŞGĹ‘0{Łb]iÉĘă"Y%UV2©‘Š\X€7›*j”ŽmŃl%1‰g˛hŔł¤ÂÖ­ş =SîTęş!ôZÎÍFžĐčěŽx-Ĺ“\Ľ-ě%ÁI)aC˛c6uîévĆJŕcY`ę‚EɇŻk×\ŃŚn+žWAŹ“„ ÖI`fRë  ńÄy2ůŹňkŰäk2ĘC&:/+$Ď1Ű3$PŰ‚0áAd]LŠĽRĚł^vîZů4‚ŕ¤Ň!˙GgÍZ, ¤ÂşO]Ť4ŢS­ĄŃ袴‘˝ĚăϵägD;-Ý?űäirtĺ˘g ŰłĐf­3Ď4ÔÁl”8Ł•Îëk•ÍĂ"ç1»ś¨\â‡×%¦›ZĽr]®W–;Ę”ĺqlV'+Ăďňô•‡Ţ¬E–ćg¬@–'´O0XÖa»ŢXZ˝±ĘX\屸X˘‰íĽŠ‰€†´Ś…âúŚŽ#Ĺn¦†,?¤–L[cĚJ™6Ň•¬–iŰ Y1óţj¦ÍĽťŹł|*ĄńĚśaLü™řČvâĐÄt†ĽŁ™9 )K'kóśFf7fGML±¤SMśs»WbłC×ĚŹÇŇ]‰{_©Ř•xýk6 +9;m>96sÚćS&gÂͧPź:w<Ä6SđćŁoHᛎČ!ůo>O·“çÓwH><ś×Căń௠ňÂ7ą—4†ÔË ˛ťĂyt†dĐŚ”óHŃj3çô ‘ É«anH€=Ű™´arŁŁN’zo\±•|ă˛.Íx–›7ŢčÄíí<ç¸>äK$ý>ÓúxÁfĆöń˛>ő{VM†¬ńFłť~~І<ö.5äÂOŘf&ý¬­ ‰řłZ7¤îďtÁí˛Z"™+ úçvY­AÍ ’ž;T:H:ńvˇ„¬@—ň +Q˝ë1$eüJ=‡¤şŻe ˘j?Ô‹H8Ŕ•r3+`ela(t‘€¶>FÂ*†ŞÓč rdł GÁKRWé ¨Ěv!’Ő*šdh(†’QŁÍZ* aęŻd$j(Ý2XŰ5`ük(&“ł\~fŔ×¶«×dXn¨~3y}ťÜ,Ă3`}5ź}ěŞőČĺv ˇřJ i®^4@­Ű5ʤv(ž4BŔ}¦ńŠÍJNăeý3čôč×ÁÚŰŐ©X|čgۇˇ Wl?ÓpŮ09˝!`śŕŢpmĄ:CDYéÎr1ŇHoö¸Bl٤§ŮŢŢ2P}o®ŮŢ<˝µgŘ‚˝ťhÜĹ˝ťé +čĚT…‰ôf­‘ítV±+ě«7Ş |p°Ç ,t°çm2ŕÁ8đďÁ’8°ţl€ĽrtôvËáʆÎtdŤfŃÍ“n4«ö'ĺhíŮÁžŰÍĹúŰä˝x{ó¶1Ř« d0ug™e°o‹:}•Ű|’­zţ¶@6ř ňÜŕJŔÁa»„ŐŕŔPĐŢďa»„Őŕ71ĘÁ˝ËĹ B.›řŕđ1ČďŻČ¨ôľ&W”‰ŢWeÔJ’w˨Çä7¶ő ünŻFő®6Ł&Ö»ę\QézOźQ7ě}„nąbS?/ëÝλiÔ•{ç¨+Jwď\5vÔűeŤŔŕŕµ %ôbč]ĘFđ˘wI»‚‚ô.m#śŇ{ĂŤLďU×:ÉoŔ§˝KJľ~ŰÔŕ"8@X˝oá€}Ť>Š›ŘŮŕăŘcpsdíźĘM¨opÉĚáŕÄ9@Š˝č6"Ů{€ćŕ{:`ˇďę&”:xľf6»ČHíŕY[ă»?î +®Ľž<¸oĂŃ+ńg^Čś—·qóńó=ěžÝĄ ~đ˛Ţú/íÁP0zz÷6†Ńe|ÓFA=&0Ć’ßKâŰÎŘ!ŹK©™ŹkÝh&KwbŤľbeŃ’Ç1ě¬ă8oTŻŇb¨”0I;Úw4Ť–LěÁş l›‡@2Ë%XĚh^3PĐË—3¦·LQľŠâ, ř… ĂVĹěŐ™Ă$¬IŚú[ĺŞř ět’ d0Âi–b­ÓÔś™&ÉÝtUŞĘŐ˝ pĽQo>,Ý,JUŻ7VŽÓłY‹jçh!¨7¨Ž+˝i(¦·çD— ŔŃ6ćâžćłmyÜ-˝1úńH řSšţ‹Q‘ť ˘Ă#Ń»¦JOF2ŚÚŽ5frŨĘŚ ÷Ű(ňAŐrh+É·rĄZˇ%Ă#’ c:˛J*XCĘ“cé-‚‘fŽ6±F7{xütW7eA_{e|”Í".ăś  óÚW”ąş.Oä}S• +0o§ZßíJCŤg,*5Ľľ]“ęúÇI0A0QŃ+dăĆĂ[Ő›ĆËú2P–Ě˙ĎŢ»őÚ’\Wzďú?ěGŞs”qÍČ~# ˛[¶(YnÁ0ú°Ě¦ÝĹ"¨" ý{ĎoĚ̵öŠ«öV±ŠÍ¦OŁE‰gçĘkÄĽŽ9FÖ¨ąŽ(%or©IEµé"$+V':ßbĽ‡'/˙ÓçĹűžĹ p˛“ +•e—>Ří,yËma®$Ś‘Ň3©) Ě>RUT–öc!,Ő]Xç‘»ďvô¬#uť? +^·őD”đ|šůŻ·çź]Đü¶>[ČwZČŮ”ĽÖ‰ +˝ä›‚ő¸źÂt˘ľĺgn+îç?mÇkŐĄŰ?žM ŰäŞNŃNżZŘĆëgó»¸]čÉKúlÉľ}‘QőíyŇ€˘híe\pIănI’ÁwUI÷Ţâ-T^»rźŤúD{˘CQ4QGjü¶…•/(Zâ•ű•h(9¦“_šZÎhćWĂnł"Žhň(-©4ĆęšEuĽwx®ŚgÚOń™g™.%ęL^’?ź‚ĽÂŠ:ŃF7ˇ>‘âŽtÂYŞ‹ÁÚĹëľ;‚ĚOřśnźWĄn‡ˇa~Pú„č.č.©ŁĆ,ĘĘcˇýw÷Rű‰Ă„î×ëBű‰— îNŻv/éXÝ ] ”ćjŞů„Đ.žŠ±ěT΋·c/T…}{ˇ~éđ†AÁéĹ@*[ź‰AqÚ}úôyńĄ Ö;n\. ś54")i=S„ŇiŰbÉ–âL6ÝޡLfXö™J7höR\7ëýcďQ¬Ýöŕö¸˙ěĆŐ%°oţbĎŹş¶śx×ć˝—…M‘lM;ekę+s‹ŕ?0éŐ»„ć űµţŮ|ÁY&Ü÷Rb&>˙¬Ußá,w?Ʋľżę,Ŕs­‡Yşg^LK đĽł’PXÔłQŘbFas]ŇGa[΢Iq{/Ő—‚ť¸Ô›‚‰ąôž‚‰z­,ÜíWłqĽ]'×ő}+ř4đ·74ű…ÇüJř0Á7…ośÜzŤo–Zđ¸a‘^{˝ČÇ»%D aÇ…Ç]oÝÇđ4š¦OĎ´?±(”Yfía˶ÂgQ¨Ď˘P?DNúĂëo`$öžúa‘Ů>§&ĽWBIĄ”őDŮîÍ~şŐ6É?L»ÉÎBĽĐßRˇ÷KnĽźĚŘ-Z‰Uđ#µbĚ&ďVxÔĽ ™ݦěäBu#FëŻU7HáĹai,Éę÷ĺ|őeßEúî :ke/^ŞZ?H9„"Ŕűk g®Ć–F>eń(˘h{|ď4TL …ÜźM~¶UžkńĹ+z¬‰jž˛<“ÝH nA%ŘIlĹ-d7Š9x'»çµz!é„X°É4iÁ/~5i Ä+Ďzń–Âń]Ě + +áuÎ" ńk,ŐâgťT!âz…%âşZ*TÄő9K]Ä5>ËeÄ=˛ÔÝ{-žgŢ­ń^ć]˙äˇN[^J03ó{ Vjý}.+ľo0a‰K»^kÁd‡EŤýĽđź9‹{qůO ¶Eŕ`vDZ’bĆ©D—S°Ă,ť°pn!•¸Işa9<GA*‘ąrä ˛  ×äýĄ™¸ŰW´hä`Ś!ʱMë7Ŕ O/c%š¨„sTPŚ7=ŢY4±Ă“Z‰4] …Č·ŁVb?üJ@‰ŻgE™Y˘”NŹíÔ…hbŰľR@wŹ•hbcÁ€” đÓžŠ&¶ëR ÂčľM$ÓŔŤŘ'ޡ2Ž˘‰ô|Gi"gŢ˝_*&’ÔXzzđvvh +‚j"¤¶¨íRŔËB5Ĺ `˛Ĺ˘ţv“@ş‰ĚĐ«)–ĄÓ ŤŠäpT’,夶µPRdÜŚ†Ž}a˛üRAJ‘5łśţü(Ą¨ 4 qđ’ŰBJqŢE_ÜŁŰď(Ą(鼹ô,ŰÂ+·oSRtnÝiĚfŹE˙Âo–ŞlüXŘbz&¤Č nNîuW ă»]đ(Ć1ö/Ňozޤ(‚],˙†°zYHEľďíĆ?î|ř,Ě4=QRüŢqoĚ;ěYîµćwëdüčCq—fůĎ_˙Ą\żţĺËŹ~ň“úô»Ż~úő7?çŕÓôżSRăٲúË äýo ˇŃ,‚§š7Ěží„5…Zc;ůř|:TKE€ĺĹ(fE˛ź {ĘűmhNf0íQňYKŽóCGP8ţPĽ-”á·[ĐŃĚNťvÍk]!;.Šó÷2¤K3Ńn—ĆřŰ"ÁÎa5»óájLŮ"—k[nĐÎĂصť&ů(W†íÂ)J˛2¨[PV,†R'Âś­č¶ţÉĎcAňÎ@9¬qa»›S˘÷ň曼+j´ä,řčŁŮ­ Vućjí[7Îßş]‚™ú5·$G×AÔ{´Ě# +ćŤSIŕ˝đď`ińď{f«ž¦ŢJŞygŘ'hÜŤ¬ťC`€Ľ‹nŮçdQHqD´ť{ŮĄCLë·lÉ·Ś;·#úů†,…÷ e§ž/j µ:ż7÷–]«0«aŢ8K2’Y\¸Ŕ;µ÷ě÷ ńa„Db(š¨˘ÍÉ‘'×rřâ¶F ¸:k˙őĎĎ€‚Ňf!ä +N RuxŘ)úk‰2nŁ8`ĺą˙ŔUA2…8$hZKLÝZÔÓYąŚQw+ěŞřĂě;%…(öh™ę!€q˘č{7EJÓ4„„$p„ťŁL<â +ů`ŕ:#Ś ;«°ŐĂËa ~#éh€¸Íů_ó^ +}3`ĚËŢţ‘5Y„y=0Ň›ŔÝ †aŔśÇ8ô,öá,ÖJ·€!Bú–8K>čzË@ŘĆŇĆ:vOÚŽµ—EYŰ Đ»•®Ąąh§eěćímňĹ+7ôśĚĽä·í?,°€ťëĹľÎGËٵ,(„ťŇłŤ(űĎB<Í«)Ť×h!\Ă&_ ŕ-v•Ń{Ŕ"쬨á;`ß5|ĂA§Z]ł|»±Ď(.7‘Ź®Nd!šUĎ™žŢ=E-¨®çJhµ* + Ś;u?s;¶D:"DŽąÍüă2<ě7«q‹ôî*pÄî 4¶ŮB +ŽzBV¦­MŮËDBL÷%Ý9ĄšĘ(\!ŰŠ•ŮÎÜöÖ :š‚±ó#{ţśXřŤ/G‹eÝöf-µ@¸"7ż. tĚľ‚¸.PóJ¨m@ĽŽT“]HĂvT9K9%ôhY*Ü÷6;l ­č()Ť¦ T•5[dŹř‘]a>ę6°c>ÎÄ S¶ÜÖ؆¬LđtÝP˛ ¶yţj‰ĘĺĆ:´ l3LŢë0{öÜÝĚť}[łYmŤ˛#x+ĺ@­!ţ™+E Ę^=}„1•ďkJgBě2ń“ôŠÓ`ęŚ- Ĺ63y‰ˇ»­†O&<µťŰi]ę«#mŮ/0ţj+Ŕ¶_óâQkç­j€ť5VáÚ˛+lu§mi×w;gą]wBLŘd6¶ş­j>Mś‹4C_‡Fźâ‚˝«‹÷˛vŤ»ŮĄŔßP¸çÄ´ť {EîŘfS6€ ™o‰ÇţÇbíI”«3Áxz…NÝkL¸ś`łoÝŻ`Ć, |· 0ĐŽ:4lAfĚTp­A÷™ęNŁÜ>]×Ó”č[Ś|cč¨ę‚‚fě0ćTŮšćëĚ–ľt¨yě’‡7ö‡~)ăĆŐ+fţ +ů,[­¬zUú&"¦ éVsŇYFip^:ĺ;;Q?UY‘ ÂÎĺsRi_2eľÁ-ţÝW9ríśš6öŐi†6‹.-ćëîćąě]›YŠG0.d‹Ť¬íęć-Ž˘ú·ŰJ«#Űí. Ś<ßâŻö4… ËĽ;_nxQ"APî Ŕv¨l ÓĹŁř¤ ¶%x:PÍYDr»!D‹-­‹#ń`uw‘AŠpm\ą\)ŠŠ +•qľpb*䌣ű®çr21Ë,#ekŰV0B>×—·= Ľ)Á˘Is&Íhv„ 힬cŚŤ ŕ×Ůîfťz%ŽÁ1;ŤOďcŕÚÎíxBą-Ľ0˛˘˛¶f~O±_[¤°sÄ#.Ńoíľb[´ú‘ÜÚá•¶hĽ±Gˇa)7ÎI<ˇ0˙‰ü™Ö`k$h§6i—˘'`*´˝¶i]ꀼˇĹ¶Áß!‚óPŔÚ¶©¸ťějoTZyčź1Í›ł®c7YŻšnÖúđ żĺ‹\‹më/jÁžjCו,̂Ϋć^5#5˛ćźěłBCQR^qBĚ›"í/Š·lyÚĂXdŢox§€ĹĂŘ­ę +UśZË”ąZŢ%˘y&‹L3¤f+Ą?4Ô¤ĚČč«SŽh7&Rüş@™:>ŔŃŁŔŃYřśGßÇ& =äďXD +ëŕš ¬łô*+¸QąL*śćWňn>ŤÂť=÷~#M˛G®rĚBt±]9ăhš8´Ű«eöŢ71N ĆÝqĄx»ě_cÔ9‹1Ľ–±/Gą\!ňtlLB!Ţ"És•h™Ă5źZD/އĆ`™ĂCAś†ZVŘÍżB±JJ:şÖ>ĂĎ_$NC´=v)ű0LŠő¶ęVAݱě5T-HEöŮö4‰1b‡Dęúr,‹ŮĂ!ŢázËŕ¨eÚRl4ýş„ íúO©­p)Y$Eţ)käL©Ę!·@^îŽÇßFC¶¦A»â™Ĺ2ŚiHŐ›˘˙@›ĺl9ą{*4 ‰J-ňS¨+úÔr–[JW6y4M=µ¦lÍ‘$Úu»¨ś7±DŤŞŐ†5Ľ oíUrDńLČľĺÁ´hIŐd.xéó‘v˝Z¸$´Â¨Çî ×ő ʎ|GđSĘ +Ő)m´K]‹2ŤËE-ľÚUń磼®/Ý«‹J +BuXćÂűShĎq\vł§ö|E57Ş 9SzĄÚľ)~_Č{Ú;´ĹJzX˘Ż¨Ű=Q8bT§e@®u»Ć'ăaó“"6lf[Aŕ€•Ť &?™Ęl¤klĎvx€iM®őö‘“‡ú– ďô b$‹Ďq4,;Ľ@á^ÂË‡Š‡ÍoÇŢ$4¦–łČćOo¸ˇjJ+¨Q2Půfý©ć–LřćÔO[o Sđj‘Ŕ¬‘a>±e/ĘrŤ5fßu€*i±Fré:‚x±¸ąEń ¦śĽ?ŮşŇÖt%s΋MĆĚ”ĆWmĚŰ•:«–)©äµŢí‚©BşÔázf6”źHíˇ´°< F{&ł0$lOLX«ÎĂ3,!™mˇĘLĚN»=ZŮŁ=mŹĄŢG„UëĂL5I‘2~deÖ´%‚F@B çíVOÓŚEŕţÖEŹĚŠä‘wüíěš(pŇ÷´°a(ÜM,źß€<Żý¤Ý…ë»Î~¶ÁdďÍ2˙-úꆎŞĺĎ,u‘|,}>ý{{: ö4M>Ç BbĎ•ěĄĂ5ÇÜ$-5§ş± +d@DË|†ŮłR{ڍš˛ í%FUTž¶žÄÖţ$*ăDYJŃŚd%†wŤäRĄĹ¶oŤ!"_Ö;Ë(A{»Ž5éٵÄĂóiĄ 2­íJęíÍC×_)!Rc¤ŃI‡ćŔů\w»—"ÍÖ± bŽ*űÉ>:¨ÇPţ÷~ĎU„_Ô߉ÁbNŔvĄZ3 e±ś"ćţÜ»?7Ľ9«¬„ť6ŕY#ĂLu‘ÜĐQ‚óú´ aUíĄP8Ĺ%Ôu˘Ő¨ICťFŹ»ÂźyZŁNAdÔ©‰çSĽxÄ2WڇÍI'%^P=´śĺHBâŠđ®>]ÖÔ*ďĺ‰aĺXsöĚBPíńéż/2öŰç„«Ç\­ )ن˘ „8Mňťĺ¸®>p߸i»ď (öâDđ5ĺ†_bTcQаá4 %ş®¨XF{˘Ú®Öy(ÍP‘×Vhń‘k: –D` ~ÖĹ!^ŹšUfAMÇ*S€Ě…*Őţ`t1>)xńšÉxŘ ´ B˝Ś&…ל§R[cŔv&ŢŐ^ŢłšťE3¶Í1iµSfŠĹ?Ndšž›ť‚`. bbß÷ –Ę'…ČvćřWý’VÝnî—VݶkkLĄĎ†ŔÖ¦™[űa-Oj¨´łýibÄRl•‰Ż%6\ňĎłŠ[™O€ ÄE‘ŢĐŞ +\™…7<`hŢt…©ŠÜ6ş™š?ÝĚE!ßĚ™á…ĘŞĺ˝*_Ó!3×ÄŞˇúŤ›„R•a¬\, {¤´wŹ”F{R§ĂhŮtyI)ˇ˘OďĐ[ŔŚ[ąz¸|Ń©ěüëFýI_;üíÖŕ¬ě!ÎZ {= úzĘţ;ȆҖ­xďŁŕŰÍ»ň~şů‡;0Ľt Ö>sHMLí!űÜ=/zHXТ}N N›xnFť7nK>wÇ´ŘúŘO„ë†çÓ÷Kv«a MFK± n¶ÉŢ:›=ún›|"»°_TtU<ŕŔ ÍWCyĆ_30âȧŘ۰;·„đŹĐŻ óbíAw iĄĹBg'ac™wš‡pěČDťŁŹTěD9űnoÎQ´AK,­8´yšô,Ý“'lť?"-XĹČźˇ1Ó[«ä;¬P· v Yf6t)­:»”Ŕm@޶6đh| ü´} S§ú ‘Č•ŕsŕŔăŃ$đ§>Čąş;÷,d«.Á˘„‹Ú j¶„+ZZX€1–Ňnö’ÝM ËÓ5Ä©SJ|fţî­x3c÷Á˝Í*3Jń©ěť×tkĹÎoĺŘ<é´Ô˝wx˝Ŕ[ĽÇăzÍ5~&Ńv1Ś}¦ř©Mbů‰~ł4Ěć5ĂłénŔҵdćµGQ‚`dŰ?ÖoÝ’˘O„–öŽŘĽţ«†Y CŕľO7ńzUj\ /aîDvóNŐ©Łěůě9ÚbG‹ĎłsTÓ龣M­F}EXxĆËeS,z‡¸tHŘę7ST™ę´'ÂLÜÎ;›˛ +lÄVă€^÷Ś Wč}aB+2V¬ŁĂŢźŃJÝŤ HÜ{č°ÍfĽâ™m Ř_ÍŤÁTĺ4˙í[r7»’ +!¶~öB¶çUްWał:»łĘK;58öŇę=}|đ‹VŤl)8M‘t‚\k…ź §Ą|ˇ‚g®ÉÜô¬éf`‡ŻŕĹY2© ťw,ůÂ5…ŁJfĆBBş`·BҢpň)¶©ÄNDĺDĘrsd—bŻ>ÝŠns¬Ĺ?¨KôjYTś±dĚBł«¨@§ۡěŘż5n±Ý#˛;íĄvgRĆ;Ç™öđ¶ É˝IiFŽk%`%±§>ë X=ŕŐľÚ™†Ů=™Cĺş1ţL`F[DÜf–TŮT»pA!rÇ,ęBX>bą9úgqR´qöD5§4‚‡ergŔlâşÔ”ŹTڞaÍün‚|O9M…†»‰Ü +ÉŃÁh,Oeîë–°ĚI–ŢľŮ}Ţ>!äKHÔŞ!oż°Ž_8âÓ•=¤ŽńDgÖÉ÷ŇĚ ŠąĽńę]ŕ˘áS*S˛Z)ÓŘfÇ9’răxÄścŰ&“Ľć?rm÷O˙¬cĺˇS'L •ľ ‘¸€iq„Ĺ@ŕ‡Íp<©°oˇ:`ßÚˇzQŮŤ9spąĹ"–Kfu@{Kđćj +Ćšú7˘©<Ľ„Š GÉBp'ţ‹…ť +?î`|hČq]j®UŕšńćâRµÄ›đ‡‘sO±JU b†4‹{_宊6W‚›V/ˇĹş—’CµK5†É<ř™ p•Î_ +xJy E<łŞel« ŽŐŔ +e­79a|¸îy.+r|ĽőÄ ˇ4iKTŮŃ sMt¨qÖNÁë2<”Hk^|şĺ\fĺ ·ńhNďęµ!^tŔ%ő¦ ;~+łD'Cs /ˇv\!r±¶Á’jĐ–2ékŮî˝\ű\̶•ŞúăZv/WĽ˛äP“ýHSÝśÂG¦Q(Á‰^[p*ČWF4ä\ŃAľúŻ‹úöj4’3ĐŻ˘Šşző×Ëš{ +•Ń Ę—S7‚µ7ŇŰω×CW ŹĚžÍM¬cwîëö'˘ë2„*âDs‹E÷ÇKď5·jt/ )Tą)ăM-âěÁĄňÚF +TE¬fÍöÎý'E§4ÍŻÜ‘m,ś4+>ÔĚ;ź[aµAcc zbO­6¸bşbQűßj“Ż{svŔąÂěżíe í˝Ę?XŚ7v‰ĹĄĐ&´ŔË~ˇµlâqkN]Ć +66~nPňö…¶ĽPw07:+ÜMÎzę“rĘ]Ů mš{­µ'1Jˇeʱ8bOrSÂHýVb ‡Í:7+⮬é}·ĎOnnD“ón#bfšďz¨©ŁNşâá^âË‡Š‡…·3÷úăžAŹHHůŁdµ.@Ăzť0°OŘDX˝u±Ţľ·Ó [2 IžííGDJ°ÔěL@Ç,íU@ŮĚf/u‚ĺkĂ`BÁ‚„ŃeűBéµÇ§ŕpH*8­€¶Z{żŰ +n4@ż‚˛µ+X´<ŰV\Ü:< »ç\ŘĽ"lßë+@C€ŕ…!Č 8Ĺu´Ź!켰’!b XËú~±m†: ?C0ţ{żŐ F˘ú zĺ¶şÎ#ţ5$$C’š€Ĺ]gGË;gYµxÄ2㋇ͩă…mY猌^gŻŹčętö;ŽXćá‹Ă¦<>@ÎC `B®Ż+ O3čCY#˘ńWĺ‡ň‡ÚJő™0L°.ô„©„P1Š sŐé6±¬Z…ÁŠąúf3Bý, y¬ëoaZ$ňÂÄI(ĆŃ•eU1Śľ„ędź™ëša g] ó<ˇĐF® +í5A´¬ëÎóGgQřšWš‹ČaĘi]ŚÓRˇ¨=\…şxÜZŘĂX¨Ô‡Ů±«ČfĎÖM‚0»z aţ-ô+ÂÝşńOt6NÂ_čą„IŔuó&L†ćOśJśÚFqşqŮ~ęE±E鍷©ŹĄ§%Řći‹váÔ +#.ÓÇ…%µh{-Zjť•Đ^E˙skÎⲏoڍÓjÝ˝ť ˝»†A×]B3–wŘ:dX6Ĺ^ŁâQú +Cxäą_Ů‘.Uč ż" ©ďy~¤"N"đ·čöĹţi®™iA7ă«·ö«G=Ç.NO{Ú8¶owëPݨć-ZŔfqĄ~’’Š[ë^r<ŃÜ”Ž737¶ĂłĚ ňOëw2wÚ㻝[ö>Č>ŇÜűź?óŚ‹e C‹n†3„u aý?@*Âţ™q Î Ž·'•ő(źiÖß)ćÓ‘M· Ř|”n#nźü&%V„b!leŰsÉô ¶ťěś”5¦0@CQäń‚Şo°4ÜţŕKb@ÔÜIAłRäŰĎm ö§]™O8žhą­ďG#¦e@”ÚQ<˙H®GµŞímqóçvžź/ś(ľŁăÜeô2©ôćËţĽxß%Dˇ"Żeś” +ÄŢMA¦đ…L#ůdč\fAL=…S3<îX*©đoqD×O˝vűŽßľ!żDő8ÎíŇáÓ­şŐ9ŰQ˙5ko‹8¸sG×hőqD‘ü°LëšĘšďҤíVâ:Jëé^ó®ôT,č÷îr<ŃüăÍĽőA>}^ŮďZŮą>1Áô<‹ V0ÍKłŚÍ¸H71(Ě&ŠžgS˛ÓžjĎlťYA)ć ±aM ‡Y¬ô±zŁaŁú ŻE÷] »Żü ÚĎăć>ŢÂéâ#Ľv'ń\?‹oor`Ë7˙ŮżÓOÖŠA*Jó_­˙zäŹKeVHé +´P­Ž8ôÓµ^ü~˛K÷KĎ8ďřÓŇqŰ˙HĹÁ˛ôÚ3ełŃ´śK•ňř±đ ©¨@.V.xĚlÄĂi‹ 7ňäŐ6¸ßľt©“ţccúÖ ăWWiÖ‹Ţ Ž§=¦RňNťĐær˘¤ßĄq Ô„,ÝĚłň3ŮSOk +0É+Ý@›i«č<&ť'©‚W2±N=I…WR`tLS.O–©†°=Xýe1ŔN/nE¨:;°Xłˇ[¦1TUűÝ6u?ŞŮěˇ#¤Mł!śZ}ľ]ĹÁjÉo>ĽĐÉ1Ş·™ź—ÉͲQ˝ĄbXôF4ČBuTa==jPJŰvîŞC;Ú!J,)]łŐ}KŽOŁgĽC=ˇ9Wx«Qv>»Č¤ăŁjgPýmş8NdVżď*U¸Mío}ćá#Zs á–Uä¦řëŕ‹ü^¨Š­9fŘ^ó.cLű:ťĹĽ\y} ÓŔŐĐŞNçÔ{Ż?ččÔg÷Ű,m»µ^ş?>s§t4,jŁPĽxqŕE/kćí ú¸üÖ„ŘĚtuŽřŰ`,>>÷°CóÜXťŔţW‹¨I¶°łY4Ţ_XŚmś f Ą ë g”¨úđéj[@¸›6l}‘ôůmWÁŚn +<ź;’Čó~Ľ=ŕr7 )î\A]öh`’s´!7Ô¦V<Á`CÝęb@â„đ˝y˘p3TłŁxL\ł·ó.-˛g®ü|ů](` $X”đ싏°¬=…o‰¨#CE4«Ţ:­Ŕ ˘z@çaUA‚¨š)uçz=ÉőśŔľ¦"®ł° á†`Ł ťăĆ z%Zż´ĺW˛°Ă”ŘmŐörËÉý°7űć ţkKC̨ŘTřĐkó´ űiT3m°Ľ Rh'1rň”l0EŚl^ł‹öí¨Ż‚‘‹¶8Ńdă˝ĚÖuý(Á8źo Úőůĺ]~aýňŁ_™>btMó:.nąŽ˘Żśdô·ÓšŽn{]– n˙ÜY!^÷d|ŘĺćŽĚlŢ˝M}zĎý‰Ő‰a¶fşĺž´ťv:StÄĄäd^ăł:Ńgu˘?úÝ0$Ąňv¶Ü,®QĐ3âŤeńŇ2jnY}D¸(ĺlUúŘCü-pźÍŚu޵4bě ¨_ASěN!ĄöÁţßUʱSG Ň«HnśŔdłh1©’C÷’IŞ*.L»ó&ZD9€–„7¨şµëí +v Ł‚ŹŢP*ÁG5f7P¶2NĹ$6 (Bbm’z|¨‡,ą›7/¦ÎîÇÎ|€yk{”ÍB- ,PdŇ.µ&j)P„óa|“…Ň 4ËôĽçŃ$`IDFđhf G®ŕbmE_R ßÇł}Ř!®@ů-‘¤5łHĚ져߫Óđ>‡öluüůh/Ľť˙·WßgęÔ“şś›–DUĘýŐĂŔŹí°ŚŮ˘_4)”ÂÔ“ňtrsCkoˇ`†;##gL0ö“Ő. Ö&Š;ÍU4¨Ő=á'ĺT÷"‘­Ś\D;Í‚5Ąř“Łüt€š'çŢ).ČęăOď50'›rg­W­.;‘ĐÁ”y=1˛W°©4WNH>4AkNŚ6CŇXá&E¸*Ľ‘[qčę0u˘ŞJuÚCŃÚcvúá c™<lmč:Ž˝ÜëXähöđłĺŐď7˙ Ŕşád»_1IĹ™s1hýôŽ·3ź¶ÓoűâÉ! Ĺo«Źy„ĹË3Ç‚°­öúě#ŕü¨Ĺ[Ň÷ŐÇÄ?iž˘ĄvÜ×hçP¬M‰ů’g뱋-“H–Ĺ‚äw ZöFă+.ę&ŇDV"Ă,cË–ŐâD»K:lÚ/OÎ7ě0lrČ´&†ÇăSů\Zf©Ý ŤŹ/…łČ±Í˛«L7˝W T¤—°őë5~Ëo{ĺ^™ť˝U'Âg&K…·‰é¨šĽ§ó¸RĐťŐ‰őşXrĚ.¨dŘfHŻ–ÜĂ’íWwÓ€ąŞ¸Ú{_# ¨lŕ¸ Š…ÝvűýĽ?ăĄçŤţäf_Ćltâ ť­×úË3ľp° a‘DSĽXlѤϋvᦅ˙Ô­Ü{˝ť>× G2ŰÖX—°Ę)Í ¤8¨ë (%™KłČ\ÚűoÎ'ýkćŔ¤Ś 5“ďźsb}ަ…ţtŞü}öIs Űç*$zŇ -č`Is2%‡4'źFË’ÁIm˛r,GoELźI´ăü)Ëô"ÇB(ýEFСî‘|»ëŻ÷¦$GăĂÂB ­…Eż­@ô™ĐłQLĎ 1}EĚeĐě#ä­ßÔaˇ¦ŰőĚv\Bü“#‰Ă&Ŕžş;€;™D”Ň©…ćR:ÝôL,[žÉ kGá=Ăž†z$Ó5×dç±·Î[ôÓw©Ăb(K®»xňí'ÚyjăK ­*:;Rłęâ‘Ň˝Üüf!An‡0čú>éĽR;n—ŕ-ăAv»6•c}(‰Ą5ÜU,„’âhŮ©˙¤/ŽšĎ€`¬ Ç3 u)ž‹<ŚgO°·=Să˛H#¶ä©8S=–\‘dÝ UCŤ[]¬ěұ3™ ’,ÂQ¨·Žměוśý„é\Ü«ź>Ä5ŇĆâHć@^ŠďŹŽn-µ‹Ĺ¦yg†÷C(ń @·öbŇ+ٸk?,eăhÚÚ¤ÉÝâŽ]?,~Ö—eňk)>Q(Á<Ët˝kćżŰ?XâÍÔ +Ą–ü· ńiŕcGďŞ|çdÚÂÖ€ýĎ˝żâűţpg–F+KŐÝńYďâc:FőÉCeĹňÄ—éë0äy0›‘Ó—‡~`ČŹ˛đeďÔ®9&óWĺ™+Łć†ÉÝĚś¤m,\Ů^4rMt“ŃôŚ>Ťţ ˝=č«Y^O|š&Ě01`§Zř4K@ o…AöľđiĚ2Ô|Ŕ˝çg.M‘3ŹÎd´ť8ú´AëFc fô·şpjv·UEä7ú3§Ć‰¶¤¤ŞŰ--ś!Żů;{3Îőśő]<„mMs í™S;ÎFńq0>NíŢ8;0@h`§&ĐĂHš…ů‰SrČ;SôjL5™oŚÎL9ŚA2‘ĂŢÚ™ŮĂŮ +!¶ÓçrÜś“ ‡mĺ¶ORtfooˇ?ÂłÝëQ¶*oő¨Ů±˝ĂŻ=Şˇ>łÁ ‚bÉR~ęÓ~EÍ9Ş°Ě†ďpH˙›ŻőÁ<MP(¶lĎÖý4÷ďđgßĺÁ–ľěy°?7öíKč/Ă‹YĘP7Wq»4'Ĺ­NŐwwb° –Éb 6Ô´Çć„·©UřtÚ) %#ŇY@ŁŠŽ€fŃuD§ĹNÝbd§ÜG‡ÉíęÖ1F`‘ ůń.…Tém“Řr¨jĐ ‚n¤Uo]%ZUCb]Ř|˛z;­A-9M ˇiP7\”%Ü4'PHÓöł«©í×ôPwxBDőŕĎűN­şĽ»îĄóTT“ŇÇVo¬­ 5gi‘hŚ–ÎĆŕ,°ČÂ|8Ě`cB6´©?×)˘0KS6糇ŃFš´y»uĽ’+ânÎ+‚;ĽK»ĽaוíŐU®\\đjü{Ł|ŤđĘńöŻöťšůŐËmđ}ń.ĚĹK픊%® =öźNbžrlhś ŘZ(MŕdŐě< i˛’¦€^•ŃQPż˝3˙f&Šv”c¸čؤvREIAµsäÂĄŠ‰‘s(šŇ…Éâ@ąéüĂ­GWૣĹy ó±‚`,{;ŕ“9=>'Ţ\Óţř(ľ-{)zKö±3,îq{K |o—^--Ľ¬Y`ó¦v ®@Ńâ3Í=2bžtW–‘óf»|ysĎ}o»7”A&ŔńpD-;{ĺfŇ‘U7ű¬ž ¤˛Ů–Öď55;‹N:Dł IWB ÚQ¨Ć}ēӶÝű˛K–Ź–h>]m»†Żýú5˛>$ËǸ B‹(÷÷]ĎŢźyµÜŕqPĹ#7Ő@đPŔöÓi¨oÇh;Ľl¨Păn§2a~ł—üŢçË»<Ş‘ Ąo>VÉ 3ą|9Äďëůvĺń”vş Ťęصä퉿ŻćÝ[ ĺĎÇ×}Źí»?˝:šF¸¤#ŃŤŠr¸DYÖý,n¶ČĚŰůĘ}ee´uŐ1ć,9Ŕů +éRh8‘ÂĚ?)‚)Ú F%y‚,ăŰş™đÓ‚ˇ]â—"K#K·ą›Ć\OA¨®¤äí÷ÁĄÝË!ÁÍśD‚ ĘB‹#lžÓ-籕\7”zhIA€-Ŕ p‰Ť1ş¬[NTĹ™ßh¶0¨žQúJG± ÁEÖq•ćőŮĎ˝ŞĽŤ Ř9l#Ĺę/oľĺ»Čş´t¨ĄPҧ1—O‰Ţ˘ÔmżuZURöEW׌˝0•ŇŽAE !ŠD7Ęź˝Ţ’»łÓwBźí iăi|Ü–¨†Ĺkľ˛i˘ +-śpđkň~Č6Na©CUĹÍľź~żś/Ă^ôdńqHDlŇžŤ^H8Đ 6IéZ1ň>H7W}´¸@Ú燩ȿÁđĘs–Ť«O…„„űu…ÝU8âďĎ:°Ř»{ ŻD0x•i¦ď9č˙Đîń¨E( ĐĎ+ç—bđ¤Aš8ćöĚ„Ż ›A^F]$¬eHv~’› ÜPá0 -Pź®úŻ>2’6©ĺC+IšP1I€¬`wM®sˇ[†‰Vu_E;\©Š<Ő6ű|/fÓ%"/´ČÍo‘ŔŇA4*Ů Ŕ ˘¤Šr®Ë™†ţ|Ll +ŐC$ELÓU˙&ô‡QŕG×4ĂüĆĐw….FG +ZřIŁ#ŚÝjĸ""0YÂionŽ/6\DśPµm—V7~Ă`ł˝E¨ÂlI÷ěáóYwĐź-ŔŹŚ¸20j¦˙CĘšŽá‚˛Ŕď¸Ńľ)AGŘÜ(ˇÚ[Řaµýőúő%Ašy&˝+¬é$úvÂĹbţŔ é“Ŕ‹ńrÎX˛">ÇŃJódÎ*Sb­4čpÓcţ ž;ľö1ÖµEţptÍ;p–ăUţ@¨GË’đ@ăëü® Dއ&ůdŁ–ŘČF+32! -ĆNó +DIOň¦`f5M5ćpYJÝnNŢŢ÷´!tĂÇ[7Ń™”šŕa +sn˘kpBł%(éĺ?6ŃĄQ({cŃ5c@ë&:ű ¬Očť KŃ)DyR%ś{çvĽťxn™kŢ“µ¶Q‹Ż%¶ĚE>Ç—‚|n×XöcËÜ­W;|psÝ2G8s‹KtÚcËś;mH1oÔř‡ąeěq×néě—kAÎ-sŢ,bü(5öŔÜ2çâá´GÝČbćž9· ‹/ž}Ň3Ç( +Ô5˛0sĎ\S«•×Ő/zć<¦=yWOzć<Ś˝ %’d]Ξą 7˘™şGcĎĽ m2číۦžąNÄ&âD †ć9oĹ7Ć@ěfŃ<_Ű˝?¦yţfŕ»çĽ}Ž‚•í: +ëSç÷Ť_ńŚŮĂ !s¬›çöj?0ÄŰi2ăÂXč˙ćKˇôAzŃ SĚO{çÎć9ÎÂ÷ţ®µĂĚn»x#E˝kŮ;˙~žk‡]fŘĺ÷ţ˙»`˙Źč˙YôĚ:k +ń0ŠeyҰŔZ„ ŹÄo±1 ivŐąó'«Š¦.÷ ;:Ńk)÷Ő:ş+ífşŞOsg 1ĘaďK•äô¤/ Zc0®a ÷ŘHĂ#Řu7 ŤěcoľŇoé$(Vm÷1´˙ü“.¨7qHt‰NŚŘpP›Lę™Y]py*vu’ŹK3 t8»ÜvoP˝±  Ű¤úŐQ%ăăÎ퀔ĎyŢÁŤĺ"ô€líěٱßú©tg·…× S~žű‚3 +şfEľÄ9®~Ŕâ÷S? I^Ř_ß7ŃßÍý€5(,ôx]4NÉŘl9őذ»ţx0K۱űąĹ~€Ąd1€v´ŕ¸_\€ˇ1,¶„Őş ŇŐŘ ČЇäÄ“˛–ąA”®Á±Đ0“"U ™Şc[ŔŽu !čŰÍmDxJžÜĹŮśž´)*c§=Ë˙ĶhT•5ßÜ$_Ľň1>çńďç^ă5Ý.äN’w9,™äYl}xĽçág˝j–ç5ŇşŤĺµżXzčxÝD‘Ł<ì0 +{łöY2,ň›­ţj_;mDO…/‘ŘQwfYWŮ:Ű—ö@ŐthHríő›yűL†mV“Ô;ÄŹ T2·­9ťŘŽA)Ф}N6€˝´{±%bńŰÁŐěźďiúă‰Tńdä}·ő;”î{ĹŔöf÷‰ÖĆŕ}B üÓ)P a{ ôR@…2‘Ü®Äř…ÄúᎠŰűĂ~×m¸Š ŻfPe塉9Ş+0]7xI˛řęa@›jCh0bڵÝO[I?őŕQ;†fl(°±†DP8}nb ÁŘ<®µd>‘ĂÝÍ+IÍŘ&pś—fÄćôšył}sĺJ‰äŔönKÂľ +›ă¤|!@*Ě«™ŐÓĽf†ŕ RŃű@é ’*J¸Ě}±~4÷_E7şK<Ŕ« Čşš»ÍĹe1\0ŁţĹ•)ëFi6ÚeŇŕQě Ęť”%:@fkC«ťg·/g‘;°(Är'–ŁÚönłĺGęš®’wHîKŰA‘¶ýČżŘ~EŇ Űćśë Ű :$ąH ŐîĽy> "LČQ±=ť™ÁˇG‡ňIş¶MČŰrŢĎK9 »ę^LÜĆď2Ą}ę!4çXą Żń˝¦âo{ŘŁÝ1ĚÉĹ˙‰šL]رXˇ*‹ő„ňÍŚ˘Hđ‰ (†‚ž’nË\ë†ŔfDŕ4°Ě3Ľ_ s’ČŻxŇŘŻÄ[tuy˙më%˝€8Eáůh[9\}b÷UřĂY|*ç^ +?kçg˘ ŞýÎ!WýĄÇ#2ߍRŹ0s»®;ËŁö_R§hponŚ4ňâŰUŔČ"RaőeĽM@aZPˇî +¸ň~J-•zm†SŤ ®'*sQ)"Oŕi;Íł +i`;5úâaTVörR Ö“b0źAí^“"l ;e$ąf‹E-Á°Z†‘÷{éŔ×Ű`”·*Ő"ľľih,Äe˙•˙Ż#Ü×#Ďvś:ĂMB$›-Ę!ÓŤť3ű«Řu)Űn¶ĺĐ +±¸—đÖSéĚ“–Í…đ`Ű`Äúń5Ţ0‡˘ń›¶_†űşČŘm´S (9ĽHŇőQ=ZňČÝ ”DţŮOÔ]Çbm‚:;‘ëŮ’LąĄÖ¸,•|»,Ô†!¨:‚MvV&‹«Ů ̧.`ĆŔŢÚHĚĽKyŚF.î€B$‰\)*Yjr|ŔÚ`aq +3fçtż¸Şű’Gh»2/BskŠŤ·!I2[¶Eęi ůÜŻ(F5ClÁh¶#şë,“ú°ýuCĐŤšäU2gŢ͆ˇů‚p«UŐú;Řb”űŃ˙Ń0µ™É &qĚn4ł–Iâ?˘‰¶`Ŕ” V3Şć +Ň ›ch'ÖuHëP+SÔs~Ë’ĄÄĆgÖľ]›ň ]*C«$/L!!7FĂňjćŻMĹáDlMV6µ/yÉc‡ŹŞ—&ň™Ý±eśzöú&&ŤŚ±e'?Ľ{:k/>ßHÄSŮdvöFĘŘ]™UŻ{—ÚĎ©‡Ś]­„ŇC¸:T¤Ţ$D2W[ň‘*‘K5–.h˛b!’;×µÓZÎtëm-»0ů¨C‡ëŽ'g>ÜrâCB{Íoeř­0Fqćđʬ¤áµ 6^„}ĆŞň˛ĄT 76g*2«hÎLäűyhň@äâË=żzńvňkj¶¶ş!,Lڏ[ÁÜsÔŃ!77A Š +ŻŮ†g~ěnĆ•Á· +ńIBÉÜ«±"¶?đ‚8l_aó%GeAĺb.Ą#li¦» lxš4R˘Řě°!'Ć—céOR +6—«ĆbJYńsncŁlb‚ĘOE˙)żccíęĘĂ“ýGĘ3 +TůMŤVd¦ďĎÔ,ţa™Ú…Ă®Ô4Ž„ňč¨gČ*ˇzq•µ´Ęö´ôQ÷“{&Cź˝ŞˇŘ­úę§iŹ…Ş0 ökńaŽj}RĚÁxŰ %EĄłx`BIu|Bęř`Ď×娂7Pj—±7ëZܸ şTĚžkc¸Rs^ő„ YcŁť×d·’í{°żs­®\VŰŢ0ކr&Ĺ›"ćoOę†ĺLŰÍBŞú ôá*€vŰ7ôśb“¦/U9w\űë"(VZwš_ŻĹ"*Đz}8Ň5•X†ÍÎÓÎ*YZ±Oęą ©©Ň…z°`ćýÔ<ę47ćš2NI¨0»úOŠÓ8%[^ř.J0%·é‡şRűı@î±Ňî±’­â'•v¦¦+¨>ϰwx%x3Ba_¨Q/űeKgłHC>6¸€°h‚`~ęQĐ$Ď?¨>ˇľîuÄóĚM^âĐä­ÖCß…°Ç0ĆVíe˙F"´łÜö˘$”+»-°Ž‹f’ädĚL%vĄÎפo8–Ńr;,¤ď Ys-"“Ý=öć±1>ôÉś*U3ÖAš¬¤iQfŕpJ%‰ůÚW B €gÓ[ćŮośPŐCEVµHyŘžéÜ ¶ĘŘ#/™ţ +®(ę:dÎt÷fÎčČ^Ctb[źř8wµ—Sw€h ¶3@­n7I *]dŤň7G:B„koË^‹m4`˝…ŢĎ=>%€&>%ÁÚu!ˇ×*ăß»OJĂUO…1 |Ěwb›R!L©ż÷;|l«ÖL)¦OÖ6¶ČśîVĄĎ–Y‘mH»ˇîƦ؎Ө7qMx%NĽľJë ¦ń]ęńçČ|őK˝µm­E “# řc|(Ë#4ŃTŞp«—I™^ŽĺEšj˘ĐXYá%‹•<·4p˙ŮO3}«~hčĆ&đąÂŻżŽ=ohaĺ%.a$X¨Ŕn*îř 6ÍNˇ ~yŽiKíÜ0÷'šµă%îJ{‹Ž@ě`µ˝Á}‘žĐD/·%Ř úěţ1Q˙pŤ´G[c1Ľ‚oűüćłĘÂh +6?·•vOkŤź´q¤‚1Q]b„Á6K$YĂŃ›ăëZŚH;÷ňĚŹÝˇŻ”?:±őě +ľÁ˘ěçÍ«×Q –ÍdY|xżÂSâE‚T> źMgÚ//&ým@˝ib?zAKy(ĚPµčžp>şS“˛FĎě]łŚK¶ýRČ‘m5l›'ßÎSîđôdąŻűÜŕCŚ@ÚŐŹ;Ł +P#ňc.„”cTBĚu´WQ a,"Ő„±…I¶‘ĂČČĐ5 üY‘Đ/W}fŃ`Ż Ţ٢آÍaž=”oâMî"^ÝĘm^| +7™uÔčÜä»Đ#V&>mą‚zlBĺΑ/Ŕ'A© `nˇďBďÎĂŁo–ĺ¸k2Ń 6óŇo8›9Ŕ8ž8üÇ”ňŕťÄ„pfÇ{@J‚tٰWte!…›ë…ěcPÚ¶Ë‹MHŁŔAó‘ĐJ;nHHĂěF4i˙ÇîĹ)•+$—C¸1Ä×zĚ Ăgú9%—‹Íy,RŞ ‰$Ł­ŽYÎ&„S9Ź'™.ŢĐŢ+—JŐńÓîxÄśľÓŃZ„vř¶°B€yĘ!K űŹ•0Qŕä(ă‰~! Á °Qµ#µó¤˝ÖT‡Ąľ¨˝„r¦¤şřÓňĺvp‘‡®—î)éC]ü¦˘eiLz˝„ÚGhvÄ‚jâÓX$’ŐAI"SĚż’ßąŘĎ«oâWqB‡2>C‘k–Ä}Še®˘Y°$ÁNOř¶(ęeÜ!LúGÎ#Öݸ’6¸¨úŮ’ő;űTŢŤH@Đ ö›k€<%µĆ©pČ?W-1۶lÜ3ۇú#‡É…ńOĽĎ\ĂćČ'řťŽ‹ˇÎ;ś#v\ýPU•äMˇjÜŹJ/ˇ2‹ĺŇX€p·ÜĚ\áĺćŕoÉÔC…JtëX†Pe.çđđEŇ X®†żXC[ ±„|Ëۦş7[SĺŰšYaü\;—bŚrĐÇŇ;Mcfw>ľ6ŕTÁgżąc­@ă|€ęˇ ¤%eđŘíą› ~č» Ůí[ĺôˇ-ÁyĹÄ YzážWŇuňŻ)öA4 VX[ĐŐ±ĆÔPaív’É´W[Lă%4et‡UCaŽAąš:şô%‹{µ€0R|IĆSú8) šGZ»ĚÚĺRşwž5™ś*ŚŢęHsăŠĐţ^čy‰ŽA#˙¶iP Í3>źF` 2o·ź»p¸)_54oIJ2uň4»64)fÁP‹A^FkZꍞ\Î|n-r%ć·q»¦^çö$_çĐc¤¸,úśXďĎ`‰oMŰăüÝ; Č#gn±˘´Ä¸8JKÝźv>¶ă.Ŕ·%›@´×˝Úđ̡q|};űÍEěť!űijM};úěgÇó_Xßßő×đ|să=ľŁą˙ä‡ůĽđ±ÎVEüÎ3 +áÉ‚™á aá͸vghĹ“M0c4ânša·ŤP"ëŤŕ&ł+Á’čË +Đ™`·ü&ؾų¶ˇ tŮŕ$ +V; ’ÖćF6Í^$@Ł‚#ş UkG Y— ¨®ŕBśľÍÜÉŹßwÜÖÇL×׌Jkt6ĵľDHÄM3C-âĆ›Ńo#ë©4Ôüß=aƢňľ=w¦ň+Ä6Q›wĚW—W’5¨íCŰ^-!· Z+ľą-ă]˝V Lť. °ł ŕjtXL´ÍGś†p3K#Ó< çý“řÝBżL f”Rxá¶»ŔřŞS’Tx˛÷ĂiďČś9Q×|#ćsay±D±x ůs±ź/$ü>ľËĂa""á€Jč­oňy‰żµÄé5Ú.q Š˝YN, ·–ĺY6vr´ÄŁ bľőOK—ĂüX3O‚śËIlo˘E©'‚úz¤Q©,±·,)¸ż>ţřűř–ç{xó;|6ŢohµQYŻšZ[BC)ťľĺoŃj¨,Í$ +S´€8W ˇ«·–O Mč•úˇΤ‰™kČfo‹l4Úš#®ŐF=Hu\3fhwSQ3•I5ÇĆ.ń3;"YHÜźT¸‚ »<Ô@oŰ9lŠ‚’+nÎřµŮ±DřLV  ¤Ů]ůÜ ©śĂďEäŁčÜAýó÷ô‘®ČQ°4¦NĹ–;†CĎ1ßÂŽ†ulŞĽ ËiŮi¸ToYĂ%—Z·# ›­wĐ .4q8iE(ÁN¬YŽ"m‹&qwˇ¶R”śÓÍrÁ”QoŔFüšXk•iďézńXš\OčYĚC˛ČďŰOîyäAp8¤‡»x"2 űÁäĆőÎć7BzÁ$\-;SŔüVŞ ÝôUt©ůó,«`ń;° ¬9÷—¸T +<Á”<®ÇbÍA´ř„7†ŕ¶ćźNĘô¸îKrÜ«ąt#(7G«TFY®ľ}Ü€Âi0@Á Ž—¸‰íRę4ÔÔ:Pćh €ír)7Žě`U˛‹L2XÉ\G´GR";9Öů˛gŰÉöM#ŽřúÇ<šÁđű`Iç[yý(—EŻ"ř€đ:3Y—Ů)…ď;»µkeĚNq˝°‚s +48čy‘GżŢ,!b».açÎĎş¶!ö™MÉ›áÓ1اg!ŕŠ€;†€onŁ˘Î,Y··ŚtĄ˙zţGč äü›zUć ,§ĚęŮ5K¨űM§ň/‹ú ş˙ý˙öůÝü9Qe•–5Uv TŮA +'PeG)ś%Uö,…˛N`ĘžµpVDŮA g&ĘB8DŮA˙ć"Ę~ű…~‹îÍš(;čޢěY÷&đdÝ›5ivĐ˝ ¤Ů—îMŕĘ8k®lWŔ ŮA'0]ś5SvPŔYśčQ'0fś5cvPŔ ŚŮA'0fś5cv‰ŚŮłN`Ěž%qłg%ś™1;áĆě „łfĚB81űÂą˛ßŢ$_T`ZŚÎآŕCĽT† Ř-•ŐiÍłÜWOť®+y˘8vŕXŚ˘ĄîQ˛-.ŰtIW:Ě8qĄ˘l6±HxŰf(€ú ]Ô3„đó祒Âv^ę!Ś'&Źe±ŁŚZOA!.µ9MĂîÚ©ćţş ˙qy;PxLŞO÷U ńÍŘA­5ôţűŠ&yd•SÖ“ęń¶üÄ<; óXµ˛ĚÇË›[ó‹{tőÇ©l~¸­WÚëL65ćśű-“Čć`~aMŰšŇŘn0©€4ĺ-Ţ|”o’”7w‚q×@€$ĺ+šH(Ń;»ôvîöö«3/űĚ€BT°_] _"ŢĐË´Üňeíh±J‹9§rJÓHdÓ‘çš y‘ĆćŢQÇ´ŹÔßűp¶\“޶€·Îłu{ËfľĚćýÉ÷řl;pÉÜEg=ŮŐ;Păçż/Őť7ÖÇźŹęÎ÷&±%n—~1ŞIĎ~1ŞIĎ~1¨IŻýbP“~ńR“îđT“^;Á 'ś`“ľś`T‘^:Á›śôěg9éŕśôÚ9éŕ Ł°ôé žôŇF=éŮF=éÉF9éĄ/ŚrŇł/ŚrŇł§‹şŇK_¦g_¦g_•¦—ľ0*MĎľ0jNĎŢđíů˝ąĂË:Ľ*›,ĽaÔś~KrşĽ<Ę$[,—śîRş{CË ŘŁä´Ý,ěj7MćĆtOĐd^\ě•ŕ4Č6oâˇN ˝`Ş8ý–ŕôúŃNÁi;sMwgXČ,ô¦żó“ÝÔ¦÷ŰawWČÔ1đ÷*@÷lmüzBuŔ–š¨˘â©°‹¶NŕFš¨¨§wFî+őýĽĐD5ł(öÖ”íÓ§úLµZ tĹnÜą +n“á''OĐB ńZ¨fÄęláµß}ˇ…ĘłP·géR‡Z¨Ű‹Y5µÔ–b¨°ęč “ÓM-Tn]Ä<T˝ )Tş[z”‘ źIˇĘZgî8ů8tB­§ôYĘĐÍ )ÔŠÔ6 –Źi|-…ZÓy)އe_Hˇ˘é«ži±ťŘŇ +»9Q!­ĄPĹ$*ŰÇ­D%ÔrBěÁo×’xDeÔŮĄĎdéĺ‰$ŞOň6źäeR+H˘2cë"hY{‰’¨ËÍňNż´RŚüp+ῊĽ]™ďŃAýp©x^[b-ă©jŕ}Ëx¦…úx=Š\ś˛Ä°s§˙Ý®ÜŇ~VŮüŤ˛ëé‘ŢŁúp©ŠúĂ=á%ŤúÖZůóńM”6Ş}z˘˙fA†žbCHŇĚ•˝ĘŠ,ć ¤´Ć ĂękűyÍböŃ™”6óĚ<Ę ŢŮŮöQń=§*2ÇŢů“s‹®`nt„5Ţ´Yň#ÖM¸Z’4›fĆč×D3č–ޱLd‡·•S»™ßŐLY,1Ě˝ď3ÍU«“Ľ¸ď eoA%s…ă4™Ô-˘í`xPÂ<6ü?fMËĽn°°ęý}&qRÂÚíw¬!79f;őEÁ9áóŕ^Ażaë©R8Ť°´ÝBadîşŔ9#ąÁ˝îą]¸g*Ýýlëf1[†ŢŽâ,¤ …dăx¬čÂń9ň>áňčCĺvĽćňÇýüóu‘ ŔËÓýxňr*‡ű‚.¤ůô"`a•óßi'”ű+SŰ›R`­xň HÚä™ÔŮÚâ[’Dáš( &MâĚëÁîa׊!Ď<ž­+‹7oć0Đ< ”Ř †Ĺ>L-Ö6?M e­g`÷Ĺyŕ.%Ţ·đćĐ3Í÷B<Č{.C¬ď‹gr—[÷řJ@]Ô®R†ąŹö_«…ö Ŕ«y'0 ߇±ĺĆM2¤xCŁ„ď rŁčN-–P¨4/~"ó/pA„µFŞ'ö ĐŽŇ^­µÍŃ,•€fŰŃ´ĆişlJNí5’Rm6&Óź·=>o°đű°IĂ „Ýľ~€`5›'ĽÍ`ąÖź%Ŕđ} k$Úă×kě2ăaeF0Żî·<É˝ 'ŚÇńztŔők%_ µ»jĐá»yîŢ ¶}Éä’(ËA:“w‘HŃě7?Ű]ĺC‚‰g˝ľ´Ţe‚ Đ…ęT!j*CtćoUĂüą\ĹT̵ŕefˇ +žt>ŠĄQ˝ł"}ęŮvż $ో´¤ç©ë9〪STń>śWY]tłĐSšĄY€â‘8(ś ŢăăöÔ– F‘X¸CuYlű‚g)Đ7lůz–z +űŔ«=tžŤ ݇Ëńđ +ńSôâŘîú™ÝhÁLŇRV=ł“ dNR +%ÔPhśšä °ě~ĄF‘·KC@kWRĎďkľˇđ}w>­çĚPDĹ»:1FAWĽ¨ }˝µý„ŹBĄďÓAşŕD*Ç.a+Č\łm¨‚5!¬&ž¬x—űĐR@}÷™tČ^ĚÎgÂçĄv˙Ž_ůŚ, ě¶iBc\5UăĐÎ^y-콺¶Ś#bTŢUŤµĽŚ ž˛ăőTŁ9đ˘!¶#˝ťH@ŐX·¤BjýŹ™(ť¨ś8Ť¤ęŢÚBD–vŻ q#WM¨_¤ě~Eł!Eó č%pßăĹł OÉ]{~ IéDŻâtµ `×l¦eĐ&śĂÁ™ˇ=ü4٤„ +mű\¶íów»Ü‡‚ŻP '>ÄüLé™(j,«&úřnŹ×·”‰ţ/ńźü Ź·›kůH1 Z‹†Ţ›śýčCqę¸ňW/ý–Gýú—/?úÉO~üéÓďľúé×ßüśĎ”éýĆŐjúËČâľEťT*GMś<‡2Ř ¨Qß=;o)™÷ĄYŃiµ¶3üÄk¦TَpżY^Čg”1ˇCÁây/Í|Úwsf4KĚ3ťD[~»ú$pgGV4döÎĽk’Z +óG­ô€.ń=»«¬źÝÎ.ś{vBw¸7®žUř1….ĽŞ«¸¸éŔq3‡Óo’ë8„=Żmžj5óŢ ű`XIWčZĆŐVu=ĺä’ú&rŃUÁî%W&gĚé¦L,ť$„ŚŹ{Q8T»&eZ—ײ#Ě©őmb ,Đjd˝yŤVË:źňęć‹Ä +_(Js ö?˘p†[îâeĄ¨ęĂâ : W‚öMlĆ$ćÎ^+4lLŞâćTí +'‡ËźY UĹÄoo{GÚ­6ú*çíwIĆč°t‚G@0Ó|*!n¸z¡B;¬KK=´tŞ0íĽmĆĺ“d§ťÖĺ má$1ŕ‚ÚÎËÁł!ć:0C™T"WH6˙ü-*?g€*5VÁÖ.çHЧ[…jĄ©0ζµ†ŞžŻś˘7č"ĺÖ˘ó˛Q¸µ‚ +u†âęV‘T’äâ™7 &ěD°6_ĺ’€´mľäęŕcáÎđĹDń5źúJ°˘ŻT<˙ˇgJţ“nŁť!ŕ Ž® lĐě "śö°m^Ç6˙ ż|¦ş¬~ď& 7YD‘pěÔr ÂiŻb1[¨`!ĎpJw^i2GŃO˝'ŹůvfO‹Ó¬vLm,‰Vď‰6JMú…L¶Ň‰ĽEĘŠj%±šÜŚb /ĐB;’ ‹@śHήępTq‹čđ÷Şa ±X1ń®Ŕ[Ëfv’Ëâ ďghÎ]ó‰©aĚŻĺŐ‚°Ă‚ŕ1dĹgŻawú“«ÔĽ"•Š CJµ×°@Ŕ00‹¶úϸţšHĂ{(Ř.Ŕ±äšč›8+§YŔîŐÜ© ŹŰî$Y$đí÷uĺËĎ‘]zfb™16{ +µť4®e-t) ăĆ~/e¦[Šp˛[)ôÁ÷¦‡xłsłŰ΀ŚÉrdŕŰ_Ă)Ú팢ôčp>Z;Â)¦ěŹßď żëľW|dŹ®áŇزq’.žŽäˇŹ˝«äłÁC.FĚ˝RŹ’rŮ&zbłmzjJŻŇQJµđ꟯UŁ6Yő.ž¸ĂÓ2HŃâŠf¸“˝ťś|öřĐ»Ůý$ÇĚŮ0i!:)>ßĎ#ł[ľ iT­ţ31ž‹‘/x’ĽűŚ){ŰŻ”\ZTĹ~ÖNäúĚxm'ž­NfŘ2kćUL@˝šÁŮHý̆] +KO%Ęś#Rkŕf6ť…€nÇqÂ-˛„s;áS¸+ź*CýBĎ·÷ů-‰Ę$±çŁBľFą˘ŻűXžD_x>bÚ—DŐ@Ă  s·éYI#ü%®c“]ăĚNxŚąŘbQr,xÜ)/ű‚íĐ>ßńZC™\ĆÄ\´Š¬ÎÔťaÔÝ)r4îĆY)„‡M’*¶aX÷¬†;ŐŽsĹcémA]#9[Ăˢ®tXÉłlN!ËŤu‚GVůŚŁ›ąŘgB%ŃŁŢť3RĚwą ESU\|Ióő0Ż)†ŃŚxŞÜ¨ÚżćŁD§[%µfMą©ć<Ąř!ö”hýÚyTeshÓeÜě{l0•˛féÜ7Ľ8~ ˘78ÝIUŮM­ú)(0‹ęŢ~ˇUlFť\ţ|kőT7ěŔM†`Cdxđ"śBĽh–đőĄ*©j4GbA·&ç¨&`g%„ĄGŻÎ‰Ć—U±@ÄăU Ŕ—ĹofeüR:ÎKÉeO°Ý$ZĽ‰"y#ĹkλşĂ¦·Ůf.ůU‰jÉí_˛X±îtđ¬A¦|p“öŽjĘ*9űŮî=Ť+ŇjWŔUwÔ[˛źTłIĎb6á"[&áN)KiAd{fÝšž61Ş÷ŚÁh؇=_[8l~dľ ĆZQ|lµ® +r'é‡-ÝÝI Ź@‘y­ő¶ęY·3ź*ý˘p"¦B /´˙±Ĺ‘7ŽX?U8,ĽÂ2D7:—™ž_qÝ„,˛°±Âüüô[ť†«3M-ˇ«ůŁĂ»ş°¦śÝľÖ °éDئǠ¬W[>Î 0‘ľőŲµ¤ËŹ D]Óbé›§P ob!M[o!¶&­Ž®Śnµku(Ě´‰-xň—Y%đÔ ŃQ¶ŢZýŢb¶Ľ×…9ÚvyKąÇÓ¨•]; Ű·7›E¦Ű Şš §†X4ČCDę{4č źNÁŻ®ú›/H° S‹·peäv<ó%<k‹ÇĄ:»"8«%Ľ7{±A-)÷'Î!yŤÁĎÎćMÉöMn—ŢHW^[Ăő{‰N_•ĎE”°“Ƶ'Au×ă”hxR¨Ą_Ú ń É( řu|ÔĹąŻ4B5ŽšŮ»Űëx٧rͦ+y¶čĆg]Ä– ‹ÝěH¤¤ú7‡™[‡ĄS‘(D»p3łnf„Ý7Íb|Ą|0 źnv×EĽ®'Ű×Á>4â´eѹ˔§BÎ`&Ŕ¶ô…ëp-ć9ďČ'ZJ’)˝>É_RQ‹ë–őňc°™†,,$Láu ÷Cš“łčs‘ëÁ©JĄ%o\Ü:gĚ>K2N{#Š ŔżtŢ8`•ú†ŁB +Ť8͆=1XĽJç‘Yßfohö:ťĎE’ hŠ`˘'*–x>ďâ±ZŐ`#?Irµ‰Ě@ .iĐdĘ‹"4ÜZěbśű˘PM–^ˇ{<«¸`r“L®ąŚ±¨Üdź2ăűç7™Š?h@Čc–N‘ E)=%ơNŘS,F‘ű#‹ĘWfŔ˛ku¬Ę_ă”Eš‹fłÉźÍő¶´ť‚˝€Sp ëşťgĹőVî;XuÔďć!ó#GÎO +Ś{9oc.P6jłôÎ’&Ťz„¨×•ĐF«NáűTHmL3íG,ÁЎďëĘ­-·!ŚëTďEđ÷ 4™+Ĺrýű“ú2 ä.†4Ő§!@IăŞg3‰Ů8lYß%ęĐoĹó]Cř#–ŰGSjşŞŐß~ăő}|âĹOúĐ`žŻźÄD±Ź€X1>jnCŚt®żąw‡Ď@ęÜ ń•´}t-Y†^w€Ĺ8 ^nőpşTn$ĽňBäĐU®µ°;_r#9ňĺ¬Ůo;˝Yć­mů4G?CŃúY2?úÂMŰÖv¶#ąŰ5éýQRđ˘ÝA `?ëH±ŽCĄMłËa^ßiú0PB$îÝz…‡ü|u0^J®ů'¶ÓY–˝żçň©2˛†1t»­Sy† ďw~ĽĆŞĄť@ ×!ÇÚ5ĄńŤľpz˛Ç& +Ż›ŢůqŠ›íłđ¨ĽÜ.*3T€W@ĆÜîĚ %-çţ¸žĂv»˛„-ą÷¸=ţ8'ŞŕI1® +ÚőÎčó?9pMĚd\/Y m%‚°q˙6ÜńŇĆ`ö5×{~ĐŁ¸›Ţž!i>W“óÄ.0–ďLe]ëE#őx„c(đéÚµ¸:‹t€l? >x[”Ł: ©Ă^ÜbQŹćH†Ť¤đ +oo›b +Ęm&©Ţ\›™Ł„LmĘkďÁ;ş†˝„t‹GµeŔ‚Á ›9ŕ|čpśVü”=ĽýŃ0EĂćP1ȧËČ“! Pż1‹płM’ CeŃ"šŁ]Q÷iÇĐ5!Ď»ěÂH’“€ľźç´’ö­Ea€ăÖäŕµ7d[%%†T1¬ä—1†¶¸8Ś/ÓÍÝTĚěnÓÍ\źéăŚňE–h¨^.9/őô'UÇŁ,?Ňit/çĂŃÁ˝ĽDlű@ŕOĆÍąIs¤2ę @ăŞ\>QBm¤^öH \ľ“ŻdĆi ä ř^[ĺš&Á"ŽË÷^ľ›m®°°˘ůÄéěíAlź’˛ßÚ»˝B„Jp ądakö<ÝYhMî ˇěî€BP‚~úLčG1ydKČ™±Î×^ ’0ş’¤ĎúËg±TJp–µ3…ă5ž‘™AÓÂv×=ŚzüŞ2,6‚Y„BđĎ…rVQm÷ŕóHÎUł™‰˝„sěŞwťPjť ŕ%Äż°†$Hđłűžc ŽřtĹžůâDSTĎ÷…alH,m«#(ë‹VŮ2űţ,=pu613Bbáe qÝÄ?LéME:˛3c÷ť/'aČt‡Ć·S˛ŞěhËU—GPÚIb¸a O’6ńó ĐC•ž+_„űů*ô/UC¶‰…a lHię +©CÚŠu¤ 7 ]¨LΩ/Gk+A°qĺÍŚRÔÁtĆfk>/peۢđ±5vĄĺ0©Ü`…Ńu›“z$:kqtIÝ?îCmr!´á ‚´/¤Ť„Č”šHy'l®V0ZCYSÔAFĽśuł„á±`ě”ÍUaR…öý{łű=ďď*©đWąv.ű*ÂHŹć0zDĐë]µńźĽňz`iŮu{QĐ ^Ą!'xiâAAáó*(ńďjFÚż—yßY…Ş’PóEľ—«jk Ýp1m´Ů®Z—Y»Ě0ć'XxMěËěNíĘ8&pî,đ®›Ö’­*î`îPŔöu[)sŁjÚ4ń)Ő®Ť˝ČbŞ"H ĽĺX›18T ý*ÄĂć ­(p +Ëö“ +ÓÜCŞŕ`¬Dů ď·nËÔŚŠ'šZńfÂë§ +‡…×3·éâ+žű}Ź_hj†ď;őo cnS>YXsż3.ĐągůÜ|}˛[ć.nÜus8îÜąˇüdçOŤéhAćŢv4>SŹ|mĂćVűl +C·>ŃĐö_Űŕ€6<@.«!\ÄŚsć„Hß kß°Á7ĽGp«7˛öĘî$8óY™Ă€}YCb€Ă áKôĽz(„JS˘¬›´ŇĆ)Äx'˘Ă¸ +aćKäVŚWgX|ˇu°d1~žńhWÄĐlë@=ŔâBś u1W!zO’Žâ’—łťëëléúkȶfcĚŘf4ä“ÔoFUĆrfľău›â lsę´ú$9źŃŻńD3‚6V +wYq!˝±`1Ă‚cŃcĆ?©žĚ@ĺX† XçPÉ™1ÓëŠĐ ąž J¬kR'Ř{]Ę +`ńP +›ń框qëË\Ŕ˝‡b^ŔÎĎeŔ€Á_W?T!ĂŔU·śÇ–ĹÎyá,†)†ą † ÖőŘ0Lęą×F¨‡9Žu9 „„t%ąJÖae]čŁ,ˇPĆaBŤ=LŐ¬kôńDge˙ă -€0´n!„q˘Đ‚#ISó"Ž6-{9eWŔŞ0Đ«™›(zHâl’=·_šé“ŇĘ%X5o˛(xśÄý%ö~  RÁ‰ŐŘ5B©†Ąš +زç$Ů>׋fˇKlY)(…Đľ»ĎĚÝ."1ŹíF”ç^Ů-dT#mî°ˇüpHŰÂűqŠpx<źéÖ”óŰxYµ˛#6ţŔW‰ĆĘuµç–ŤĂŰďçNcĽôܤĽÝńÜŰüôđ sK4ľ§ąĄúĎĽĎ/|nÉĆŹ67săÇ_6Ă"š{Éa†.tXĎÍëy;Ě︡ćVůŰC‡z’ĎŇpďTaĆŕďRh€UFÜ>Ä™·3w2‡Ą>ŰD$ĎA%&iîÂł,Gp=˛¬ŮôđęiŤĽýÁW„E’g©Đ€µş~/ÖXŞ5Ú¶–`źł‹bÚ\žŔëÝŤŠ’Č%Đgč/ńÂh$PŮ€"5•¶¸ńůsĎN_Ţqî>H™z|ó+|^ŐďRđTµWEXło;Ń ÝX3?_=ţŐŐ†çri;dZ-ÓdË«#ş~ęąŃ;~Ĺ‘ęd~rżtřĂtÇź®ęćăa0¶Tó7K>¤ŞÔVGě +/뙹ĺLeÔĹ3Řňáe–ŕ˝Ô-ţ\ŕ=':__Ľ‡'oýÓçUűžU‹Ęčűµíµ·mtŠVŁ«‚¶°\W +k¸4XĐ‹Úgţ+ü—"Đśm%\z%=łJ÷źąľť˙´ä·»ym÷o÷~ţăý!'żňôÝ|¶ď´“aŞŞ÷Wëż|­…Ń@…š0˙ ŞŰËľ:âĐOצqń{7÷+ž˙ýĽżOŻ-6ôí‰>n2‡8[+‘łkřĂr˘…áÖl´­"Á‹+XĎpšđöÂŤ$›|­Ń0i2!Š“D±…î(¶*2@ń’ÔżęöE!|"ßw/–(y_eŇĆ<Ěŕ°^2%˛S?Ťz©7$ űŐ¦ů1\9„a×2–Ë–:v‚ęR`¬ľ6|wŕř<Ż:M§IŢFę–‰ 6o„VHáDšţ쉠ˇřŠŘ˘Žţ>ĘđAoU‹7©â"ŻŢ=˘Şő— yĐľžčÂ-Ý%5{k®ć=/ +48i™S;ž,-XçŰbap;Ý~kď1ťK÷qqgŠ"ÜźÇZžm’âę_ÎęGqm-¤g("ŘGÚ˛ĘUÓ¦śo˝·ŃCĄA +‚Bé`#Rr$śíź¦ÁŻ`gTIT ­·xÄ |öƉć{۱M˛3G|$pÝě)Qrľ˛ůÍ(glĹÎŢo„— +4c_}“e(~\ŃŢ5§ł<\ nwţěŤŰF‹Čř´˘Ś FG·ŢîzJë ER_¦żVvOB0@=ŠDWŘ T‘@dPEşâNô`‡g!¸ú¶(Ôň …ŢŰ”ZŇđűÜá“©`BHC\ic"÷%Řč5ŇcŰŘlŇŻĂ@ŠÔͦo7aÁ`űâ‰fűî%Řáő33~˝“Ëđ‡—8;Ž'_#x ů«'ÖEp†ëőĽjX¦Á3ĎëűňëëíÂk{…@"ěĚđë-B›`*ŢŹž…WźžĹu?Śîđń˛Đ>DčWexPć‡÷*8č!{{ćA>ëÖţďRwnnq%¨ˇ!ě6Ť±Ýś§:Kę@ű2×,&M`Ń +ŘęßşÂy3w4@QšŁôÁ×»¬‹c©·„,ŕ 3Aę-ťäĽÇU1źĎaŇWB·Lűá4X éš)MRϬ'@Ý•âÜSE4Ăfŕ®`š l´ş’j}MNÚž!Ú…ec+µGoşk®ľ‰C>f[c˙ä'ęgë±PŠńčA›á-—J×ďô®)ÉmBăŞ3ľmŽÁ@cž÷!j'Ř,¶ýł@ ĺ-. é… `ąÚľaą2yýę÷''˛đyjteHG󯇋Í{X3ůr}˙\(ŔŠ'ş9)‰˝śŃ´6M{ńú›ř›lW ^—ŔuÉۉY¤@Q!Ź*ĽĄ˘=&ÖŽA(3Ń ă„<Ĺ<|nŘK,C{ ý¸¶ťő8”HÔ¶›Ř]şPbjÖw;YšŚ‰ś4ŕś41‹xH +ŠBdY‡žäđi°zř«†$DÁS–ÔEN™“3›«·m2Ű2,9ůp}ç*Ľ®ő·3¶O]· áůÖfřâaăiĎ|É–\8IÍËFđŤcĆf·ŐŹ„Lö­°]Ltł4;RŁńˇ»GÔ®±J}ŘoÔOt1cpö!ŃşMbĎq˛•M*S¸~—Ä@‚ůD6G¶ŚŇîX ®ŽÝžv©]ĄíČ~şß%%Ďd  f×î."‘”W|´íóyBH´!"´˛ĺ>P á  -îůólů +ś`ëF(C@îţŢ`1/~w»R#™es 99łĽż!$y…°ľ˝"s¶¤Ő–ÝYT!)—Dš,˛­y[U¨0ŚÔ%ăĺ–·7Ö÷0čO*ÜÔ4łp +€“€ÓŢdmĹU3o锵E˛óU ĺntC©ť7Űyđ$IÝŰľg˝Üôë!}ë‹ôŮx*€–í—w]¬Łéöąâ9óµĐdfŐ€’G}`ɶ%M`ş>°˘ Ű›ßűlöŤǰźećĎ“p˛4ŇMřűx6z˙™›•ŞŚ +Ć1űRţ,üťE˙2TT vs4^ÄĄ–– ,§„Ń?»ěY˙čKdÍu•”ßH'Ň *ô|ŰćRD¬Ąz«Ö^ íŇ4pąM÷łŤ`-ëIĹQU>’¦=ÍŁą PîK!9ť.=ÁŞ:¬Ě?ĺšW=Ťä<]ËÜ«˛˘‰˛iAăXÝ˙ŕ 5[č”T*Ł˝Šs,HŢ}vń=»Ĺ;˝—$ŢŞTIö UMS™FťF›ÍEÍĆU Q:ÍŐđ˙nŁHÉŠu{Ő –™ŰďËůÎ©Ł‘ Ü.ČL{f!`VzrĂĺ¬2 _ńíáÁÁěŞ&šşřXÂ+3OËxeČĘΓw¤I­J@­mń ëvÎăW¶î_˝fłéçÁ“USv‡GŰo7 6†ĺWp¨Ch› a n’Ôjč+-Šĺ·öt˘Ýs3éŔ×_âÍěŐéđl«n |{|*@t ÝJ§óK‘® +xAËč˘ ď É~,/ăü},/č µ€Ă×{‘vţĐí ¶Ú4Ďéîǵ‚^·NÔŔđ×ŢŰëŮVi RĄű˘{\´ýBlô]cžq˝÷ľ†ěÁ/ÉGlqďÔšhĉw·ŁőUŻ+0G®éQؤ@"TD<[LŔ<ňâ%r„;aSÔ)$94Ä×dźnŁůżiLĎb‹ş‹±Ĺpä&`Žsî¨5úÔń8‚ČŹ€e•#ú´#a&7׼]ÝŠbU +Q„}Ńî!3`IíGČĽc:qKYP BˇA8˝íMfýřř_řçŘn€Ç÷ć…Eěű¶ź'&ËAÁ°¤ĐÜcˇţńĐÔ”Ő>@J§uŞ&'‰!©pôd)x)Zb>°SL>Aࡹ®2Ô†W­«3•]ď—<É™žöŚŹŕw/€}[ŻMőjçSŞÍÝŹĘŚîÚQ< +±Őůéméř)'ě9 XĄPµ±IźvżźżA°ML˝ ‡IËÔÖŻú:˘5Í–Ú˙í÷)>XVxş˘; +îDw‡_©öëü˙kď¶kÍ’ś×˝Ęş¤ x«ň\u)n†6ä ‹W ˘IL6!SüöŽ1"«ćÚs®î¶ŚÉnţ+sÖ1+32â;ŚT÷•~Ôr ÷o5“€«§±â1’sDh‹k REçEhBý}˙ž‡=EŁa‚5Qžů#z§ú»1z…͡QŔpŤŹ«Ś{ô¤ “4l÷eöZór gşs— Ör{­áA˛QáÍp§ľ™·†}Wşp~ül&,ŽąAxă‰AÝŤSç¶E'Ęü" |câe„¬#Ž+zFÝŠÉÓÁ »¬0'˘'ěnčŃx ;ľéeĚ=…1™ŕ’j-…Ýú™0÷łóE«Ą˘tZčdu©:Ž2‹[˘~–b]łĂęŮaŕ3 úT’8*\ć¸gAÍ:§3Äwąa‹učŰLr*Ó<,E‘kW](Öťź>{śIŞŽáŚď}Ş÷ndšgCoe ńĹ T€śŚĺŔî“âcęŘ ç×”»±±őzď±ÇZĽRú¤šÓ,äý@ĚöÔ«& ”PM{5ü8†ďFXŐ•uW0' Yvđ¨ŚÇ®»Át•Č€‰o*ĆWÂÝv‡řzn’6†;ÍÖłDĘRQŻ,8zâ]Ä[n)o{®X×fŠÚM;$¬l±E®ůsJĽĘ‹1€ö Á\ě‘‹ÚĆ©yLQY7z$e-÷ó\‰Ĺ‰nT`ěćÝkOíěśP뉜ť=:˘<ŘĆN;P¤ĂDĚ3‰‹CÄKążá¶Ö@ő\Ó,őÄšvÂwfd>Wâ2Őé|A ‡ćĚšI”A–č˝Gžęś›zĘHúé@¸ˇHC—žś|2r)'ź’‘Ëq/Ë´ĆdN«0/ý_gţŚ{SAQěp*ÉB†¬g^‚ÔůE@ĘZΙ Żs&ô˝ö™P‡ ~ŤdŘËZA€#ÄTV«ŠU‹-ř@ŞÄÄ]Ŕ +N^˙źűV^y&T¦Xyâ˘yˇo~AwNhP¨łč&­VĹ©˛GCˇđUÉ ŁßłZ2zc!쏌ůB®#ám&ág]Çs4ŞÄWňďŕôÁRúOäröAé&?+{;˘Ż‰UöXfľQ:Ż”ů4öŹ'ÝqKąň0ŚDE„§• z÷ĎŽÔ&y€ĘŞ3| MBbŔ ńŐľ‚^ZűŃŠ´Uűé€îĎüş.v¦\ uć+eLšx“ó>ĚŇđ›Ţç ^ (´do¶¦ĺĂ#ô_›•ˇ¸¦öb5• źË~—0 +`ěÜŰÇëDA+"ľ,”Ňď©E±ĐS‡V˝ňăŢÓa ‘?*©ńz©| ’TÔíŔh%rĘ_*0˘ĂńŢ00'^÷$÷ŃěÉUß×̬*ÇËó•K…ÔŚ˘cďő4ěë‹ÇÇIőŐŔ×ĎŔů¨_Ęç9¬űřű!€vě·mńő(¨Ćb"JĆÔă’“Şb“żY ç°E>1ĐBßć—®ň mů3Óú•Íű>QFäďuŢ>'ę Én9¨Cń†*w^BW{çDRů˛aAç=ŘłŐ>ŮkzvľîÁq9Pń@ŹÍ[ZňxŇ˝ęD °4ŹĄÍźଥŰ[kÄ–Siß¸ŚłŁâ‚MxÄĂ´Ž˘8E "űŚxxőiŘűűXŁÇ@éÓĄţúYPČCŤO’*č솲ö{ĂŘćűxo­ńFNŔŻ#ő¶Şr!1zO•tj·0ŘÉÝüÓY$Ŕě¨Öök ˘óSŚRwzŢr±”ś‰ĘůóŘňxŠţhť “\4eB#SÍŽą‘ĄŹúLUN3EÉXńtˇ®ŰB(uŹ1qčăWNĺĐĐ1©Bě‘#^Ţj†XXť§88M(Ľî=á.+“§öš«äπ⟠mŇĐŕÇ;;äżźÍ)$4ˇw,öÓ“xW4(Ý劯 1ęśŮ 2^üâ`r MQî©(B˛Ř(Bv¶8Ňcźč×JKUŞ–9jŐž«ĚŹkÜ+Ęŕ’Tń‰G;ă÷Ťíj>HB°4(̦÷#›Ş¸•ÚÁ"žĐ8¬PŁÁ–€/<–ˇ;&ĂíţXh-lXô5,?a:śţ̤Y×~¬ v3ÇÉóhXŠ’‡8ďăÍ˝V"oG‰`€ÎđŁh ňłAáÂ8ďş\±)Çމ—‚zF|Ž1ŁaŮ»ˇXśĆ0¨â…“˘ŕÖčŘD)ŕÔŔŔörłÍŐžDK+V¶éâZ8LUV($Ň’{™H9罉lޱÝ*Ť0_hDK•Ö“ÄôIÉŠ)/ mdK™Ě{‰ăůvĽĂéňGöć©Ń›j%Źhěăî¤auőnv{^ Ú‰RŇĺ4ö*UžUÜkś !ÁGĂFŃ=Ďě7ŤŕF°ů1ů0O îŔCIZ9Pâ^íą”ÄEvŔF=ň (óŁíŔ#auř<ĐqŞY'&ߥG@üňdóÓgÜKlŞ„ÁŃż®’ó×,žzî( 7R1hĚ­;*>@AĚtjľ`tnˇ¦Ŕŕ<ÉFŻĎy ( ‘—šL×ý‡ă`¶•ŻňN„&űúʆ…(W=_#â7­ń2.âš ŕ6ßÝ”*âŃp´.Z}ý=aŇÝ੍ +čűW(* Żň¤ŔTţĐ0H×çxď­¸lĹ”6Č^_¸ +L!C“Ą şŹ >ź†çý“hŕýłÓüöłXWc˝@ßqq3(š Ţ9€±±2!HG8ŹĚňxF¬ 7ľY’Ď1ZŘcS϶ÁφťX„ĽľăŕĘRH4ĚÎg?©űźŻăYAˇPbLë1Š?SÁ4®І íČ>Lrňy}®śűxń”*c +ŔÝyůÁ¨×©‰u5¶ŕ4\ÎŤ~!s!¬`»aŻ +EőffAŘ †:‰úϢŇň\Ö{+Q·[mŘ(¬8 ąpq˝HyŁ˙z*,ąňxW8gŁ×Ů^żŞÓĚ&Ő˛J1€Ä&sŕGtżăyjď­‹ś/Ë2 +©l‘§îg'Ć7I:®”Ú[1Z:âŘđŚÝÜó§.äÝHF9Čc\{śg|ţ•łŢ&ť­LŤ¬8‰Żz5Ş;(ÖE¨0xŐ€UElČť|ö˝‚š¦uU=&žźA]‹X$ľ˘š.§¬Á1- ŇDÚ±ź®ÉĘ”°g'Âşřđ˘ň§Ťě2hf}š#"…·i»rs€IĄĆ•Ľázć ­E@Nż'ĄK»7v7­çv<qÚîDZ0Śçęž|řťŻĘýđÚ’E~"ˇĚĆ6}âp˝˙—…2ńA9őnŘsćię”ő/Ćć÷ź]{@2'í‹"ÜÉ˙h ĹÜú+öřm+Ů±Ć ÝuŠ•2Îäútë˛S?ýe˛ŮÇë÷âŤYi¶FÄčϔ͝8,łĘ‘Pmţ˝_H +Ł^^GÉ)«Âĺ •űdʞXŠśŚ“łYéĆ}ßʳٰž!7JîA&WP| Čß~\ş!łë†5Đó§–¤gĺzoíŇ2ŘPŐ\vlGľnT¬q$ŸŔCíă§ĺ5Nb fśTĐŚŻ6Ü—Ĺ>Ě™”’;,םxäTCM[ě¨ŇŐin“<6y¨Ü”1}0}OźçN] Jć\éĺzž†ß?9`˛ě QĹř.îVŇEŠWťJbűťŤŘ’6üfBţhEýřDpIo*= ™Ëx¶gĚ2¬g1Ťâş6‰ŰŮ@mnĎţ‹âcfąb®Ž‰8Ő c¶JĄ¬šµeL’hóĘMúI\Î&8ć¬uŁXٵIŕ•*¬) "ăn,ÚŃrE}˝ßOo=LB‰”ˇ–Ý?"YrŹ!NM¦~L¶®= h tvW×]ü¦±žŮH*ĚFň6(@=;˛ˇß =ČcŘp—şiŐ5ĎČučŮx°ź˛ÁŇZ¬03 Ž_ e¸łFŮźőÜ÷ńN]OąŮëĺ‹LĂ4˝P0_Ú@äßŐ,»H¸ĆÄ6ɵ?W×,Ôś< Ć˛dő]­eŹ…%Iě€ÖŘáŘiV”ąQ'¤vý›ŚZ„ü‘ +˙fť$C…@© PšL]u5G5-©ŇŹ;/H«[ hígÚo#Çů• TjÉťĆÚ xŹg±ĺD=c˘¶uĚü‘:˘µ¸´€ÜdY&Q¦x¦’nĽÉ©W ü6uw›©? Đq‚uĺôü띪©Č0Ç"×ŘCĽë”śuŃŹMźřĘ=đűß/ îä÷[cáj \Ňnóy‰©‰™µQţŐ«-v W  śŠ ;ŕ[JĚ«h±??›řŚĽî¶‘‘˘ekIUÎSĹ'Ą!sJÜäWŐ…ç¦PnŮf0´O@ĂŐ*ćµ4]ářŤ†ą¶ľ4(Ďşu3¨”Ł›ŠŤÚ×R”ŤąR :zÄöëLkѵá/y¦Ë2˙‰ĺÚëTúz(:ÜËľ âď 0‘ŕv!EĶäDül 1>W’ĂnYxĽĎ~pPpł`¨LnŚÖÔ˙Żş?źłZ›ä €V—––xp˘čU}ŢgšDDö™úFęŰÚüy3E2‹ȉw­+gJZDtôS°6y˘¶P,ŔM-2î€n č†Z8Ýr©¶ĐňT«x şĆíŰś÷ŕ†ü¤¬Tó&;.ëđËŹů퍝ŕIOSsľžŽ’Ń%—` mŰWĂb +„ÜóxĐN»é´ËÔ Q žD·—FVťÔ;ĂîďtŮ!räé4Ź|vYČÉFX@Đă¶%÷™wc9¶VeÓ×´GQ]jé©°ę‘)kľŢ´&Aä1š>zě—@-¦÷řż‚_ű:¶*|Ľ.Ř HďX\°,ŐŤďA±pä†ÎëŰ{˙m·­S#¬2SŁöiÜxF‚¦?ĄAóŠG&ěÎFUyúš›yMWŞ©t‹B7¸¬ôŞ(>łwOš”Ž˘~Çölt´ŇĄűb™¨ÎÝ)žC´Y^'Ę5>~ąÖëŃ—ęĺ3z°:8R‹>z +Â/jJ3;§,źiщx …Ł;¦¨ôÁş®˝‡@Ę˛Ś€Çą´âÄyÂ!É^6Cíůűţ¸ß"—çW˛;°–<«ąSq[úhČwŰ÷»}ľ¸Źnl!.nţľž~%UP˝®#4•íŹhRgŐśŰä#~Óň=~ă L˘®I-vüp ž xşĚX­ő[7žRř™’ Ť.ćŻń¬ŮŻwý—J5;^V_ĹrM®}ejmŚĎÖJjőLšg/ůŮ­2GLzfÖ16XŞdÉ\g§šAvśĺL)±TRżJ4r;Ç,hŮ šł.-+mŻđyŁGW8V!)6q ±= + {8*lüࣝű–E|řś*—µÁjÝâůuşu­łčÁtxBŢ;3700®®ĎěáŢŚ‹9¶üV2W0™wü1®,éť$c®T‡â]!űć/  ôŞÔ‚»µőQ öĘŤ}ŘGLĐfŇËńÜŐG·Ř>đµcó“¶JşÄä$y1‘˘[¶żÄ\$Ó0ôýčńű;ÄřeĚ_H­~Hó–uF ë:61`Ŕ!M’@řˇÇń'?gOČŇЧ¤‰çUÓâ|6ż¸r1çaeő 6F*ľ÷xM ~㵜ź"qŞ‘\Ľ Îí•ĘÇđÔÓgT‡üń([ĺďůÄËSę¶P;ěĆŢŹ^Ú×0ó˝¦FBFč Śym«>ľ‡>g2‰©JकŃ&=HIľÎ”łđťľ_¦ŕč +Ýđ@Ě3ô@aE€wHX‰ˇĺ3—ŠąÂs¬Yă*}ÜpźÝ¨,Ąă_+bË Ć]ZEÁžKcK’Wx2f<Ľkq—>ŤçG‡=řşó ęE +ÄűaJ|xÚÎ='v1­FXA4Ťäăëű(ČĐłů-}/âc9ąN"P›č ’ŔÎ0QrĽVQuÓö2±' Ý|2f“ :ř¸7ś¨Ľ$íÔ|™•ßÚ@É< †}ěü‹azăÖöćä`źzi‰ęüč±ëňÝé J źÝtü Ţ?Ŕ–”%  e}ďłÇµu§őţ@Ţ»4ĆɤńôT3qęčZIťF‘€e-ĄI榊˘»ö(/TF Â0ý–ĎÝ*–+‚¶µ<9$â#ě]ž«ă  ś=rÎ Ĺ–Ł[ŻăÎÚÍ3ěăz%č˙“ꦞ`HnÉ´?•šůŠ´ÁtÔ≱ŃcQA}ŕC;.ŞD·SĄĎŤšuâ|ňľ/řg2ǧĂŹ=pvżĄź­¤Łš^.Q/}ˇ›oń#Ţě<Ľ‡˛{°ôn…űßôŘŹ«g4x­ĘŹ47‹"+ĺDĄŮąÎ–™7Yf ŕÉ—KRä޵Łß* ×9>»ýÍ}Ar”/ÂVů +Wş ů ikQÜÍé$D¶­ŕ6Ł *ć=Ř0÷.ŃßŇ<żé†É11Ś@h愥Ä̶–R¬ oR©k¦ő™îL‡~<ĎĎn ;éÂ%Břă@ç¦ĺ,8M- TPÓ8qM‘ˇď=Ţ—ěćľw=¤ÓĽmĆŹÝ\,ƙۚx¦xÍJŇ‚5Ć=ÂŃÄż2˙^7źܨĄë ; 3âaCĂVú˘–łeĺ"—!["BG"ᨛiµ‰JG1Şö tťÚÄxŐ¦Ť2Š3ćbvĐä™xBŃ#6 |ŞLýČ­×Č©ýí]„[|b[Ď’X(¤Ŕ*ˇ`†BŰ0ýM!űDzčrwŔjŠł$Ň!<}üy'ô{&&&%|#ď?&] î`<°Ś¦‘ČŞ#á;ď= +endstream endobj 29 0 obj <>stream +Ř­Ś{—ôŃJ¨@ńLŻÁł/DG«ą¸nrż±ĹcĘ´6^î\.8B$DŠ~–±Übçsű‡›CSľĚ‘˙QÍ …“Ú†ď4@ń߲ó~Cą4Żë%ôfË™ŘV˘kôÂ7ľ z]Úq« ćŽÔ[CކgIŁ+ö=Žű zĄnهěĽM€Ń“{a„×.ÂÍń~J<‰QD2ţXirĆţ˙‚ÝÔÉAŚŤoÉA_67/v?ř+P˘J–L¬WAú@¬6z)éG7gŻI(čQÄĎ‘ü>g¶C™q—ş¬ŔTe×ËçÚ'R˘FŃĺőíDËŇ ´{vKÉ»Ľŕ~‰đ 6śbç,šS%¤—·"2śsŰ+ TÉW&Vt¬´XŤo™•q`× Č—E ů27J@ańÓ|dşAě4ž•Ł"ŹH™€ âK˙JÔÜ‹‚Ú`|É>ąç8!ą˘ŘČ7uWÔ!LšťL@n+ÎÄŰÉp¬rV±ťÉPaXt<Ěšâ^ŔČëçńov˙­B±)p¬ü˝‰$0¤LŮ…~ťíâ~qëŘí`9ţńTŮ˝ĺÖ,ĆYL=é3JH2z°'-_’=!P„EC,GHşÔLŢRëٸS{ŐĹ5|ĚÄ4ÄěĘ*_ŔŠ–5hK?¦+\Sßoę°<¬ýkz ˝7\ô"üi홞gŁUYD hg`¤0P‰@¤F:Uhę F`PgKtĹÂhÝą§ŠÝŕrúSŃݸu…ůăBľíE¬KTő}Ü ^*fzž)B1޶Ž4wÁ00ĺżP_ˇÚ0Ř6ßĐNş±Ňm’ŘŁ[¬Ź¨,ĆŢÍ*÷ąaN…';sŁĂhĹ(ú±ŇjLç™&ľąÔ.ž˛7`!|$kŮ¢Lw• óYňLZô˛d3„˘‚8±‹@';€€áŔVé!„ť,č|ÖĎžC“ʬýżű)B4‘[ Ş`\Őľ)“,¬3gE‘±ô=g“‹ďůk,ś Pĺk­–ě»9<±Ĺ.·ĺW„5ýÄ´^H?“ó€\'…ţ))'î +1D.÷đdűTëČUŽ«il‹çŢŮ—r*^§Â%RőÔŚ‡í.äŕu;2íĐ۱ĤĐ\tŁĄHó’šžť;#UĹe%ŤžýşeҸ&˛Ž©2ęTQŤ0â9pŻ~8úL#> +ç×ĂwQ4Ž©P”q=Ć/)A§1vg€Ź%8í_ŘѦ˘ět +Č"7Ýä™±óv2o.–QĽe˝Śč@ú){4)?gÎ÷ěUi†9ś§ńFQ_}`_őĘ€eşžűj.CNP>výVŐD +%äë{úfeŚÖ.ôćČÂ]źć]oäEÉšĺ$âÉSĂĺ[ęđůHÚ‘śzŇż"0ľWžA– •8˛ľĺĘú“ľ5÷˝ß§–ż|y®A• ‡J¦ $UËúoÄ»3Ópǵdxü5ŇŽ>‚ "ż 0:˛N%Ö–’±Rß±RJşąiŠgÇR®µD[cîĂ謱·ü?×˝âĹźÄ(ţężGd –ćúďľţý˙öŻ˙ĺ˙ů˙üú«żţë˙đűß˙×úOř׿Łó» +Ĺć&ÎŻËD¨Pż -Á?ú§;ŽX@(đ¤Ĺsý Łňăĺőř¶ĺ$p«Ł'Bšťĺ|¦Ă˛AvŤŤoµ×l `ÓÍ߆âěWe­íŔ›ßpŰeŻ{ŤZâ©˙EBŻv0+Ѱ¦+„v¸ţ›‘µŕöŁždv΄úç—ÔS˛A &6¦óšĹ1‹XmőĎ@ĚÖsGuPĂţr´K‚ăí_RTá'†KZf%»˛ÁĆö͉¬!’Ď,RşRÇ#«ŰGó4Jĺľ(G™’aţ<łŇ‹fÝbKĎu±_Ý,=*ë7[nhí¦yr-L PHčŻlÔÜ’xk&Uô–űý™Đ”ĘŔʡâOßÚ…yF kđŘ'.Ą :O=2:‰.j(É.÷ ©sqŮĄd¦Ŕt Wz<¦/i°ŘK ł&WO‘gČ/ą…čV'ŹnP łé2ﳤđaę +"®kXÜ“—>xĽŰ‚5…' 2z¨=ę1żńŮŮŤm<ÝšöɤÖŰce&°4dŤKőďM‡ću¶DôŕmŽ”•Ů/Kß|©WB˘_Ć€,)î9¬ẊVöÝş!ljPćŇ÷|]Yĺ'Cfí|U†đ/0qXŠS#™™ăČ|n[fs‰‰—Ą ˛ŁI‚âŘVC“±|ŤWę7˘‚ěÁéA#¨/ň0˝ťŤ]îA¦gy ążđ!áC)čb\jqůŤ –ą€U˝ +BmšUS:kO‰I§Ŕf;Äx—ž®b­Ě»3oŁ^'Ö‡­ř©QúŢ$’1Śq7ž€€ş…ŘS…ă‘®:‚˛Ö>žL7^çVHżŇ˛ z ¬$¨°3i¬­Á=Ř™<O%TކKv‹+łŰIů/ójL>čěý,ĎŤ¸‡J=5ěg™ň'µĚ×!p±U¦Šĺî“IŽÝgó×1Öą>öî}ź—ď—ó®}g靇h†f8E”ÝÁÄ҉¤÷Wß•&–Ĺj Y­šĚă„S-X Őźś"»ěäUĐFKZQ’bQv®Úń$jkBQD#ŔßćĆj"ůCŔd1üĘJIÁţý¸˛xÎa¨¤9'‰˘ü¨˛Ř¶šÁdGdƤ¨$%) K®­ż¨¸ ßă©‘â–ś„Çfžcô4 ·ĚEEľ¦đ7_%(u‚Y.+běŽ 4;Ů®ŕ)ŕ;˘čŘi Öb‘2䌻…éÔ¨"V´’Óvť1.´ +ĎŰËpđ$6ŇŔFűb;?řL Ě×ńÎôNpžj>ű2i@8ßu.3Ź6L§nGn‘ ÂznQŚbúŇ3 MáxgHŢXv4ĂFÍ5›yy)]pâ¬r+3!Oj×äšů›‹zt*-tżLT–Ü~iĹŹVuC.`˛µŃyŞţLs4đ4śĽ&Ś c`ő /›ßŽ·„Ő%Íj+1ä3SßNxMâ˙mHm‡ÚŞ YŤűŰ:J +~\IŻ€3ëć†@ÖlČE­ŐĘĺS5ůn¦Ŕ‡•Ă‚žd¶ěŃgíy dQN˛î¤FÉ ‹_O™ţŤ+˛3ću‰$!†”ȨSu; fMRY7E<ô§.*ń¦!šr,ńG$IćôhŞäŻw˘‰‡ Ďq‹µĄëJ…ýĆĽźíŇĽ÷ÜQď„‘x2ŐĺŐŃ‚ś[’˝bą¸Qq6ÔSŘRvĺ'(‚ŕ$A÷Ń6Ő?Ń ĺ–Ť [„ibËj +‚°2ÉÚŁ¶ÓÍV2%Üôö–’“,6Ën˛‚]€Ď=€šĄ¶Ř# `8čR»<҇¨”göNôxCt;Rµ¤Ćą0 cÇ ‡§>?cřţx1EĄąOp$O†ĄN¸RĹź·¨őzşa„'/ˇěň™ZćBoř*‹,aKaáG”RÓŰă2)X Ţ/Ť}U÷*©…ŚšĚŹ’ęžÔĄĄqť{âb̧¸š<1Ć—g{fŔ±9l=uŠ~şf%}ć©’SÖz@]lk¬ńONDčhŐG"×űV®Äů‘†E*óZ·>ÄČr×’ŁhÜ0HčńĎ“ôí‘ęEf’j—Iž ¬X=4h6 Ž:”˝uG~—‹Űf9ÇF5/¤Ś˛jń*|Vń¸Ŕ‰3-{©:Ďfź˝X\cš‘ź46ÇŚüJ°Čű2µďëPFŲ)*¸. e2Xß™eŹ­OöZ,ÖČl&Ŕ#©›ľĚeji}eŹľ{IÜ•>â^×Ď'Hî/ţ˘ŹhŔÚ¨…ŇŰqn’čÜ$Ń’zěŇcŔâłGFeg’ÇuPŔěRŽ0{šçOîŹAˇ€Ĺ‰ť«/íÝ$ ĄľÉŞ“ŰIXÁ3CĎp+†Tu×/&vľK`,U +žńä#4y^ĐŢ‹Ŕ'&¶Óˇ>Ĺř^‡lrn›µÉc%Îg&ÖÍ:)s±y,’ćWĽ+†hKÜ9Žén™%»ÓȱAMoVÓłĹôĂĽ¦^Zá¸(6ôG˙¦Ů¤@Í‚©#ĚÍ» ôžĺsh“ +j@)ěÉńßa÷P÷×JŽ÷PâôČ2çŻ31*ýVgd¤Śš‚P] —<±ő8Íž}S“aˇf†@|e–¬%%nSâáY|k¤·ÁꨒG¤°ôĘn~ĽzĹĬ˝VKşľDŕ…E«µ4GiphHźFâ·î$47 ń¸ő:\"¬]µ<«q7ŰP¨µÁp(Şě‘h‘7΢<˛Çľ$#„h0˝»ßk¬Ää<ËůôÔéYú˝ˇ—¶uĎk ť …uڵsďż’ŇY3Ż MUZ•ËdBŤČŻ"~ŽH:Ň€5!Ŕ(9yJ–ŠăNâËŞ'6´ąĘ.äÁ—8 TÆ 8PLśZ”jIą&‚¬u÷B˛člÄ8ß—^SwnŃB&ÓdĐöه•2« ňo^y ·~ń`ŃQ’ôqD|%Y2b'ĚżŽGn)Ý»ěM÷‚ţ↎ ÔÔMÚ}JľGţÓ[Á´Y,Dů%¦µÜWž;YB襻Ýşe1ßS¦4EĂ +SÂfŞŁüA6?>4޸lQp˛GDĎćÇń㫢EŐnz#s=ŘĹ”¸ŔčŮ =â}Ż<Ő•8á©ÄÔÎ-âÖĆóxpŢ#Ë—8Ł˙B1¤Jk*Ćë%xŤL‚(Q5Tt‹Ą‹¤ăJĐ×ĆEŢ`đADÚ‡Ęr +_né±ŐÄŔK·ĚMn%EŁ„iŮ>&Iٵď^CŻSyéqŞKb=cÍčfĚ"ˇé@*éô9Rń@ޞ¬:ŤÂjÚXĆś. äĂ˝Ŕ•I$5ôąYˇňc±äiV‚uäzR˛fb+=LSJa`*ă€ŕ„ú|đB°Bcíě–&aěśzž.˘d—$©±ý‘Oš{f—(o]ÖĚXŕ +Ůđm*8 VPS­="¦¸űb]GY,ĸ%Q†@Ľ¶ö¦Ůxzž$ŚäävŹ©¶uV+ę´%A«]Č616ÇŻŤuonn+ÖÎŕ~¦ÜŽ»ą«h\^Ç·I2Y +:-ú@ ąZČŤ\Ějµžij“s +÷ľOµ/aÁ8ÉŇí +†ßN%˘Zľ¨%aRUز‘Uobĺt))ĽURĎěOÚCΫĽő’ą§™f[b,¦Ě!®Šú$Đ[4P Đmćw‰«˛J‡§śŢa~ĎK†#ŤUĺ * 29MâPčÖń|ÍHä’/‚-_§úÂ×ޡîëóoDQä‚w/ö«B‚&şŇ„Ľŕ]Ş_K 'ÜŚĄ•aŢ]•_Źö—0ł©;ˇ°ĹV3(«ęŘ#Ň€|/Eo:üí˝ë“Ćc ĄĹšŘeëä݉”f˙q*\{WŁâ~>I ŇG +tÇ—8ħ[TĎ‹,ň„°:ü*`NU4\‚ŕAΡľůę°úżŤĎüČ.ťQ€Ě˘-b·€ëÎ,€k pInGT©oĺ«˝ń fDôÓFPuŰĹ[ő"ůCŐËźő¬¸üQ,Ě_vóßýQ˙Ú˙?Gű“Ţ“˙Cţ×±-çůź4|wţ”łR/µ1—0Őc;Ç·ĆŘě8+~ďłL|ď%)ŏɵdvÓ6¸˘ĆTWÜŢÖ˝K —WÎׂ‰ÜHcچ2˘¬łšŢů ZŁC:ZŔ¶.DY7mĎfšÖĂAÔ!m´ÖĚáTÁBŔ”âňk˙˘ů‹W©Đłi_=IŐű ČÁehř~»˛z_ňxęEůR®;˝Š®ŻI˛™XĂ/>ßz —®J$Ĺp 'űş©źqđHő-o3·=„8žhe]ąY]2¸Ęo˙(Ě’Ţq?"He-C{5Ź7†žgĆ[˘8Żt­ĘX\|×Đ=Ţä;šDłU0`cź†säoćb#W­Űz¶r82Öň cF ´Ž- +NśěX4L‹ hő?*ŕÖÇą< ¶ú—ěËŁA”ŤÄöSqeÝ TÍĽü÷+§Šě '¸±ęőś ŕ};ĺĆŠc‰—"ĺ!Ňflúcg9kOCÁČ~‘Íőú•)0bż‚.™ĺrÍŢ˙ŽöÄ­nůŃXö˛«‰RŠŁ¦ 1˘z®€«kŠčîżçÁ€Vr¸Š?ˡ+/ľ'`‹řŽü?Ý3¶‡vŹh:Ť0®ÁЬš–j™Ó@” ĂWGźş®+Łţ“ó´á…’ŁŐěŚFëy2ĺ$¶ŁšUtĂdźăkNh Âq¸Gdp …Dń.>-¸čÔž“H´vz(F˘Ţ”DË0?˛4ż÷ÖĘžxu¤ĺąˇ`6|ý”U>ő„;¨Ÿ.Ůđ8Aą^śnUcZé ěARÎ_¬Ô~4üf||´‚?SjW¤Žf=J4Ë:I6ł:Łs‘q`ߌF[lšż‘´ľžóÄĄ?ĐËS+řy‘¦č›ľx%…VfFZ®Ř@…‡ĘńT äHĘ©đ÷ţ“„Ů3Ji,ŐŁ-PůȶŻ}˘Áň5ówU°Żü5˙n·#HU‡±ösˇ †™HlŮ\Mކ6ÄTÉL# ĎOĂÎÔ$_ńéM`nŠ`9-ßL*-}ĘĹ<lËŐŤ:«ŰńhÝ7} -K¬ŽP6ŁÔdŐ ÉĚfT@.ÓvŢěŇ?ąR˙ąĄ‰dľţŰ™…MQňýˇn$P$5*ΰ 8ęjŘ™‚‰–ążBµ˘WÉś ˇ˘űąßD@2•mLj¦:ç *m jAUävÝY¶ň$k—džĐ~Ž—Ô>§şéăH±G/ČçÉŰîF +‘ŞÇ7Yď¦ ×-ů`iŁ1Ü#ÔI￸_‡Ü˘CŢ ďs*o/đúLşÍ-2JiŕÂú»‹řŰ®‹Ń+F¸´ź[_[s[4)Ň>F=[yq˛Îîc¤Öń¤uŹ‚Ú-DO$ͨŮŔ‚ŔĎ.Ó–9…K¦a«2Šň0 FPŢě˙!ä K+ŰčÔdBâďĐđýű©Nl*9âWhƆ^¸oĎ!6ÎÄŘm_w5§`dmbćSďŹ ľ_˙âĂ]ř°é•Şť‡ĺ}µŞ,»—{Ŕá”SQ;H„Bç[ő_YŢ×V’eÔ uhꀬ @8ŐZ#n0/·n´Shý†$(đ¨Í †831¨¶5hc7@ëŠč…4$°±ŇľJ=ž3ĚWˇf›‘Ł{J°ĚĘ…m+őcÚôîNeš˝¦680I2ŃI€˙GŹű^Yn™IŕůěFHŰ% ó¦W§’HΑ°ě´LßÂç’§·7öáířfA!wňŐ‘.żFBТ^äWztŕ×ôHY€¶š*jô`‹ÂÁőD„U‡äq6Ĺ} ”©]âęŮ”÷ËăP†Ą©Łś·ËĽHĽ <đzÄ™źXĘĚŰ;}%źÎ±Aβ2 v­M—Ům蓤=i6=†SoŤâh7ň¦TX›iGÁ¦€G{Îpîq Sd?ćŞ)ęG¸Ůł<ŇUáôń+×ʍë“őŃŁĄ©°•ëIżwmî`âż˙03ÉéčqlUĚ 3& ŠÔ~űűžänóĽx§]ŕăűϩϚp@†OŮ`Vľë‡*\ťęF|™/5˘Źnú.J+[˘9eđŻĚó‹FÂđ˝iČÔ¶1ČÍ·bi呜»’ΡYČŹľď4H|Á[INmŃ÷Ań8ł ÇAě˘c˛¤Ă«üĎŘçÚl´j˦äĄö©é:-Aśl„•5ůŕ @2ˇOvz #a8–„âż>@‘\q¨JďYh™gľ»ÄĂ© +ńHë&Ě1?óOŮ…xR+©áÄ×}őo˛†:ňޤČ;ĺĆJţy{Îě<.= ±îV7ŢΚűE ŘůŞ ‹¸8ó÷pE9ýą6Ä/]ˇŹ]%żą˛Aő[©Ž}lú¤[Yąg +’ š«,˘§†/ ”DpŚŐs  \'Ëń祿ü^*´¶)ă)3VfKdKt<ĎÍ^Ś!-xD ůĆyŢ|÷çô+ó5jľ6›ÝĘŰDKćR46E†=ä' ¤1Ë#Mz¤$At;f +Ł!zjŻSő‰ĂÜ"ńűqf°T +›ý×ÖţˇGo[ئć1Ö7‡Úc[Ţ4ň3ZĽ´CćąóPŠiĎń*¦•IÁ”D#;lčí.&§¤JëŔfLŐiX©˝d[@Ż&A—ל&ö6çP• : ­×•PXc¬JBn](ńhő¬Éb'$ßUŮ#Tö±-˘N #Ž #:„7”6;Ô)úf. &-*zŢO¨ĄźFtÁžÝśI@%Ť¤_*Ć Uî»§T_ALy÷ ž˘‡\_˛yě5ü߼®›,'»ő}EĚbtkUQJ˛ŠW áݬgDź¬ńŕM˝)«‰ő®c1ľßöy™ /ň>şľçÄěŽ\¸H€{3€aĄF‰úűůŃŁŢq +ĺ˙ëy1]Ľgv»nN D8 Ł)w¬·čĄ=tÇľÍXŮpâĹ>ö_s:‘Ç«uđ»÷/ŔÚ(÷`|âaj?ÝZj#¨ű_·î˙zĚŚŇ@ ’x[éđ‘č=*Í5)fŇ/‡bqĂŻś¸*śĐęŃIť? y•ďľCw+bÓdÍaaŻÉ×\ÓE;L`łÇ̤¨ŇXĺ=yoŐ[ŕ´pż¤ÎYU‹ĐÜ/f*©ś´ˇşóý:L77Y‹Ř=™ •†ăďŮ«źŮKýĘŇéČ3ŠR4 +Ic悾™âď=`šTCŤö8ŃýĐëŘ*ňë–ú>bĄ[é\P™&ćÖďK µ]^ůčń žd%·Ř üÔŤBá’{ŞÖhűÁţ ěÇ©÷.´Q©‰µËŻ#éRü^çFE·E%Ha_E´áR“Č)+żNPp™§^ˇIL=­=ĆĽ‘ŞÁ-™_fžďŤ.—j±ěb3Ë®AϤřđąźgÚłÂţB·ŰÂ˙ÉčÔ”ĎQŚ·š7Óvd„śéŁî"x'í&·[ŇóukŃ)VelQŇÇJżéĆş¨ó˝ÎöŮcż™ž–(PYR`˘lHÝfľb Čă°ĹĄRĆ ôîZ{~öżl =mîS}tŁÍ+ƶZŠ{Ký1ä7ÔüĆĆYT)2+Éĺ—;.„Îg˙챟ňű]š6ŻtdE+ńUŹśÓáA4eŢ:¨ ­•{`ż÷b:„Ě‚pÎhi(¦3'@ÄÂŇ^w†g˘„t¤ë[J 4­ćgŹçkEɔݵˇ üy ܤĺđ,ŕ-ą8¨ď˛·ţŘ]”x ¶ým¸oˇÝÎś`bŃ V3L}ô,‡’©” Žq@0üP] ç(ŕŁÇ~~%ˇdC#|čV9Ňď«cĺĺ7$ +D]ĚÁ@:)=!ÖĘMÓL·+ţ˝Čb"5Ł> |ĎZöH§:ÂHÓ^=ż#?ľXGť‹ôĘďsţZó@Ý; ”ÝP°Ě'Ćî@m±µYŇ×vjPózé“V_ěë’jľŚA55%F$UšLG–kÎoÔčŻ~ ±v!"ą;ÔÝáN +µ3íá„6ä?şI„6š¬haeCK‰m#BĘ?őHń}Dţ^áîg/D? yW@ąĽß2W±„;ďÁJH+‡K(R"bbMh/…˛š3<­šÖ°b`‡ŤKYę)ä»B˘D„Vl *"Úµa‡[| J>="°=_'H)’OkÚ­™ě(Âě3eŔş¦Ă˙2Ó«€fîůRjľ”±e–ĚŠĐă‘)hJ7°Ç¨.—ŻżCNŇ$/źą%@ćR¨ç&ŁcrgňűˇÇ)n*Ţ5Ö‡ űŢMUµ‘Şjç9 ?S Ayµnß4ţcVPöłE€Ěä Ną¶»ŰŇč¨'$`ĄčéŞgn»Są¤)m±Üיִ‡EmÝt9$NY‘­¨+ĆÖÇł6DUqD;ŹT/Îlô6G ›‡‡†Uˇ·żješyŤ®·÷ç¨*&;0>é’űXäl÷Ř?;üĽZľ÷Ň„”©/ô“ô‚2ëÉvů7ÁDyĐänP¬T2]Ëf1’­›đë]ćص…‰Ąâ ĺ Ë7bMň 3 6Pş[R­âV”̢KŤm‚ś–hű’RĄÝä$d:nB±Ţłł¦÷,ŰMd÷)s2:*tžwşĂGŹ»JÎâď­PĺH­ŔÉ=ÜhÂZgDz´=ő°‰piˇż&Ż1VUyŤĺĆMÚ«eŻ5î^Ľqz͵Źcö °±{¬ěqŕönŹ•= fb;zĚçTۨziɲ6ŃňhąÄ÷é†ęß·ťeĚz3rŐâ—l˛Rgs~CC[E{‘VľňÝ\%éâ =M’Ʀ‰Ô/N貎xxĽř¦knGMµÚ𿨏vý­{Šgě˝cŇŞH”,#ćĆV•Žpg±ÓÁLGó!ŠrNšOd>ĺ`ŃÚÂó¶ŹtźXČnLj®=­ŃÁR“üß„#DÚkQPZöpćŠv~;0Ó4?39Ťj?Mjđ ›:h 2©âQßä°VöQźŰIŞNëIëňůBŐšrCN‰d [#€IóŚŻÓŻő˛â–L¶žŐ‚ž_˝Í«±dĽO»¦oż gÇ)Ů1YgťÚgĚ}(›U8&ź=ŕŔÉ +ežzˇeך¦[×WĆQęҢ\YqŢ×ÖÓ‘’ ´„ +\—ů=,Sý.ęÂD›Ôb•‚şÝ9ČÜG ô­®ÓU—±†<Â<ô—ó$;|ßp/ú ŃzČ=Ó2Nr:`˘Ö@ÄčDpBŠ_ô‡ÜH ŘňŹňÁ®µY~–ЇIu(:22h€*€kĺKzG3ʲ4Z¬Ę1§e4kjuż \–»Ď˝çąŁÍů`h „{1.Ő[€z°¶­#ÖĺĘNÍ2hŠ)š\ˇayšG€Ä6|ŚpF{ʱ\5ŽVR‹a®t™V×Ĺó“.ZHczz‘ŠĎf">Š©s ŠWč"«Z´H^şĽjŃbC¦Ç áú. ôń3‰lŃAąFËGŻŹü+eş FsňWł˛0Ľ˙ĽÓá+Ő 0'JÂhţ† +©Ć¨EçÍĎ™SÁ[•Ď8©”öŢZĎ+¦äß-űžZM‰—Ą9Q+ŹńŔi”‡L5‡l˙Ć‚@ÁV(Č`g{jÖiÁQÔ|]Š“dś€7°¨Ór?ĂO»´¤‹!E®m¨öz¦ÚGâďáĹÇď‚[ŰvYƇ_:„p§ż>{ř^gxkĹŮGđ’6@ý*âŚc‚ćÄ*ÁJ% zOŤÖHöö§UpŹT†Lř| „ż”‘:sbݡDxdĄ®5꣎R76öíHërł¶äµµXîŁŰ©xüţCFö˝ÇĹ}áijkĚŇ_Ö¨X PóHˇ !a˘™”Ţ„Ca(/E¤wKNÜŃŰö)€·ôËEŁDTşř•źIOŕďŇyýL•¶'ŹĆ~`kĽMuţ{z,¬%Ť]ŕ$×ŕaR“z0@ŐŚŹŇlťźkaíăKuBŤ1żČ·aŇĺń˝Ah×s´·F8 ęZBĺ…®ÔŹ÷JX7•v\ş˙ľ§ÍĚ17EmłUť‰,*âřÜľ8„Úż˙ýĘ%ď©C˙¦őÖą¤ö{(,OŢDAʄֲ䥽n[¸“= ŻO0˝‰ń1/ŻźĹ¤­’ÉBDŁÉGOŹĺŮC^Ź,˙Xün·“¦żFçűȆÓp,-ŕ*kÎcíM«Án:T8TݬlňÍ@˝ÂĂ©Ř5†˙:âZ^UťŹÝç9÷á_a—2Ň+HD[’´ŔDŐˇx˙űĘ›ŮÇŞ;ÜaEQdKeZ" Ź ÔüSÉÖâő&í4ënŘŃ[Šs‘T>±wz~VΔy¦|)Í{ćÚĎ3Á‰NϨMz?\ +ťľśŤ†µŻŰÉ‚/¨ŘZâö!üł %_#é %ÎuGu‹kÇĆŕ„qÖÓÄ^đLčř•Ţŕ(ňr„z5iWIk†5oů\°SĘVŐ´_?ë[Ń"vxh®'(”˙{CßdŞ}Ľ÷Ö–z‹ňę’0XwW~\›»Şvx‡5"¸żţ8dý«_g¶ +Żźr%$®*†ţ}Iíîáá +Ľ¸´RdC¤&°NÇ{ +7(H|$ĐzgÔÂí8^€)\EۡM1Ą•#ax+ŃsłíŰW‘ďł§¬Ç>äŁőLeÚq#Ză{Gꇭ%˘Ý@n¤= űx5W}=R{p˙ěŘÜk®(I M·“¤) €óÔÜň9ç ŁŐŘ6Z—ÓJ~űoîł]Ň( HÜrR:fËÓ*ţ*ŔçŁÔÇĆđ˝µŔś36”ś9}âř|›«&,‹&°ęÇ+˛”˛Â,ËTü˝ŹÍf:ő¬! –źl`÷Dž) /IĺŹÖřHS«€Ů¬ôL‚lĐÉŞŞ„бR÷чë[ş{véí€Ę” +¨"jĚîzę†43[BV˛8®W Ů6^Ő`×nTr"ʇv‰ąaŠ}łSŁÖCŔJP€żK2c’…¨LéŞă'1®`tŮŇ-üpn\R”`«ť;ż9ź†Î%^¤°âŐÝ­( ˘hŚdHğϿ•6˘~h¤>úŐw+÷L㤠Úô5¦°őđ#I‰!­ţâˉ§Łň4ţeĚaéđ’ÚŽL7ě꽡2hŤ•9Sűë°RÝ,…‡G?´Ţţ 8µ˙Ęć/ŹěI^äź Gţ·ňŔosü†éč˙÷÷üóëŻţÝ×ţß˙äIË׿˙ë?üá˙úú«˙đ˙׿ű×ý‡˙ňĎżűŹ˙÷ďţÓ?üË?üÝżţĂß˙.~±OůsÇ˙ůďţńź÷ëţĺ˙ůÝţŹßýŹ˙Ź˙ú?ý—?ü×yżĘëu!˙_Řś˙‹˙‘$–słZ4`ɧÇ$)Ž0´â]Ĺ•F:ˇU”Sb +ů%VŞDŔĆ Ď + Ńý/%7r#˘Ř­j°çáĆú“Rł ľ˙b·Y´ +‚ŠYsˇçw·Ň`*­‹Š1ÁĘ^6°»±ˇÄbĺÖS®ěT@ßí©ë”ŠlĘwD¨&zt¨'§rŐÔµUN‹\”z!ßyš-:¨ä €S .˝đ—3yŞ©ÔÖŘě|ŮŁ_ö ?đJ„ô8Čůĺ1H˝Ć1zŮ Řë>Á–’ĂDÜÁŚPeó™nUü +cö"ŹF®“‹˝@kĚ'3{ôî1ăŘg=edFr‰huPnA«śgĹp’]kcż§Ů›čG…űŔČPĘ~ZEkŽ:8`ş"€ě8ŃꋟĂÉÄzÍ™že,‹<SÁv˙ÝĂs‹ÜLUéůŃą5,† §»‹Łd×WĆŹ=xĽaqŮ÷ń?z­_Tž°uź„h¬˛{ŚSAó¤’Lµő) +ŤxoČ3D%PöăgWFq߫ꄉçĚĹ·~Lé|Wşß ń+âřłÖżŹŰv!µÔř{vKO'yćďÓż4žú™*ž9çôZBt•ś)Ťâ,5Ą!?'jÚo–-š$Lˇ ˝ĂĂ#ŇŁa“T2TóD +ÉÓcŔQHµôE÷©†y0)pÓ2ąŰ»mŃŮa¤•ŘŻ'Î}pćr>{śîVĆ$ýîS˝wV<  ÓĆxŐŤ¨-ęŔk~uu–T^Óşß‹¤Žhř÷y*ăÉGĆÖ› ŕă@Ša…3Ă”Ť€N˝d¦4r|ďńăhţč +­XŹvŃ`CŘżšÉq=Ju‘ŕçcČß\Âŕ+;Le¨~ÍŻĄ%žW÷*đ5IÔ"l÷ăˇČdăôş®¦ř˙-Ć«×Ëä­ŞËň÷ŞÍč•ĺdu–fÔkˇ‡6úĽĽmĢď€ĐÖóĐ*+¸řt@ÝŠnÓĘďylLAďiTNŔP•,ĺ§Ô3WńL˝xr1Ł+ÖÓ+rUą¸AĺbqC9ÖQCˇŹ“ę\赢ç›ŇřJ;[)­­Ď9ˇ–tý#nšó§Ő65ŠăŚîޱáâ%†92†Áî-C›sg#ł:Ť”I|ĆĚ_±K§ć™±Ţ ±^Ńřćę¶»H÷ŘTO…*ł–(âBŮ,aňo0M«d—UĽ\¶0 +;ĺˇ+ şž +k‘ LĚ˝ąŮŇ94k&‚f µ'=Űňç@l +(JŢ ś‹4JŹs—iŹcą…áGže1N±÷©®_ú[~Şh#żH%ކĐcR´%Îč±<ÓĄ˙ÚĘöŐŁCEŘ<ą(fu@ý•ł 0t9řöZMĘk|­2R %,%fZňé±=“zs·šđô“/Z-íťß¶‡ńéčE'oF”kĚ%ŤT ˘µ\2|€+ôrèm/€Šă©~'mť µd» ©Z=d•ô’J^sŘ '9”ą>ň§ĚЏ’Ňć·3`¶E7ˇÂAĺŔµÄŤŃ=‘GÇÉ÷3ݎ$Żí¸ňR6öu"|ż–•<Ž‚ŇoÉ %¬°RŘ—ët » ¤ťW|f6Íj}ýůŹĺ×çűj8±ŐĘ4­Pjµű{˘{hlQ{YIőÍ_1ÚăWy@RŞq&2ů÷ě÷:Ď‘ŤŁwçÉDë` uŇZš†XŚ#j#)ĹQŚ{Băc>ďÖÁŮž€®j'hŃD0őUµ»ďpť†JnwĂŢE”5HşG}ýŚYGđł$”kI͆Gń˝áIŻLüBÎČ=›b}ůQÇ€Š%†$A— Ś´řř1änŞjĆĺâŤOş67r—?Şě‡IÄD_F5%{ç>!>BŞJ…Îü{Lü˝»j8ßPĂŠ@!˛¨ě °2¤,U#ë{]cĂĽĐ`cÔMbĆÝkÁ}ÓS+Ťé2ő=ťö( .ŔGZ5jJ$ë[Zw|4D}Ô»ôŮ*Ä4®Â[A‚=¶¦]C(j‘ąRTY+mËÓ°Ż/«XŻ*ÖéĎĎZĎ騳U@9-Kô?Üíý¶­ Ě„9 ň"| +P^ŻTZÁ|­…-u€ő <‹Ď׆°}ţ +VÇHu[Ć}#®aʵŇ;Í_u0¶^)ĺŢ94€˛ľC§NbA44ńóî˘2,á÷ĆzÔV÷ H‚ş8÷?˘*e9rč_Y}ül)*±GŰ[ëd‚jy[hhpá +ř<łJÂF]› D +ęlwĂţD[Ő«ö¸^?kbÓlšJjŘ~4(ĹqÓÁ>ZĄcŽ8ž^Ó±(¶ÍJŞčÔX$"cHŽŁ_m=ł¨Ę:ňĄáS„ Nyôy=$y$M7 -Žxhy8áA1y˘BPŐĎH|ż tĹn\¶ŠUä ę•6pđŃáĄáµkÝ´şŮ­Hµ–¬)0‘W‚*’ˇl˝E„±;d*9ޤš`ýާÉëŢ“ö!Ľ:Z} Űů›?Ł}Čźuý O—-Ü`<đs„[ ~™†Ó‰{fgTmÄ`bŃ `Ő†˘Ř;ůú¨|í%A Ž/ZŤ§ľ!kR••ÂŽlČXŹz®0?.oŻÖ@/hm˝±řŔeă6ă.Ű'§°Á<)fŞĂ—Ĺ$¶+ r°haáŻWăűżžß®iM«¨2±Ôt¦¦D~۶™˛XŁiĐ0ČPÓ˙ń€ITVîzµ­śRĹy¬˛`Ç·7DI¸†ÓA±Ď9µQ áX©…ţŃ,íE‹|k„Ź”ŞĆ)uOűÚ*B č +LÓîőă3ćH#6ĽóÖ#Ď`xHýXűíöĂP.Fűł(ˇś( e)V„Ćl>[KŮé/®“ń=eZł©;‚WFŁŻńŕŚ‰+˘2E ńŠ™ôbYěÜKÓô˘öCŹ]]âÍášĚ›ŹA‰÷eśH•1ׯâŁáF÷=câ7­ŞI`f†FŤ†u±¨óň óűöY‘‹ŕËݰ÷ [ѵ  ĺţqČ.h„«dSúŃ0Žt?ÜÇ{o=ŕÓČd_éúČQXQÉEóűíix†ŔtŻÇ–p–×ĎFjăÖ%íxPkf?;s»™Ćô±‘¶čžÇŁ•Ď–}*ľlł©ÓŰŔ—ĂφO{ľ±ÍeÉzXŁŻF2;ö‚ťWÓŠT0+ K  n’40ŔšÜă§nE<ŃcŤČ]6ŤŞÖožšąÁÄ®¬`¶@NÖéŃodć7BNůnŘŹ/QvŻŢ]ť]í€Ń#Ň@Îţł«Ä‡Y˙Ńş!.M•bÎÎgz:ĺňĹX zKâ$Ńz7ěۢ(Č*3műŮ•ŮÎĂçăeč űŃ0±†|=¶·VÔčč4…ăŘ#—řT(ß8y™Ţôăú4Î’ď­Šś3´ŔŇű˛‡ŔŢ/\é(Ú7Ŕ:—ňűK°ĘݰoöL"ôÁ&ÉmŢţŮśš ]8âđĐ\ÇúJÇÁą 74ěx–Ş*TYŻÂĄjŁiPĚuś4ÜUATüZ\€Ř…Çä–Ş9ô–hŤ‘©tĎK™©JPiČ=ąż Ž‰_ —ŃľYSťďDNYńý€&ëÓS"#O¸Ů`’c$.—î•ÚRloČ*Ü {Ő*˛8X‘szý [‰Ś$+X¨ đ°>H3żř^ď­ §Ś[ä´ÝaćbŚăCÝP]Őňn·ť 7ŕl[HĂHsEtśż[rÄ >¸ ľ^aĚÚl:Ç“­Gî‘=RŘČćHrő<+ô3ŹÜ‡í{ëąýĐŕôŮ_©—P¶ł"›ń39ź %mI‡¤żiíŔdś+°ˇqÍ kŁů9…‚âĐTyµĽFÇ(oŁ/˙ý‡@GŤčpą iYö>\ăÉŘż“y%٤.ń½‰ TîÇ·‘Ąa‚áëű:wÚ˘Q>ĺbQ«u~OgТbIB‹°îůŹĚ™†@głS§÷Ńđۉř˝µ˝Ű!QQŤeć(ÚÄzHµ’ö!8g@_Ő$ĄÝ{Żv¬;ÁeŻ€‚N“ńc«sTČ`u*3VsŽ#ąr$Üî˝Ü”8Ć–MůPđ,Ę-6ÄuUěQ·őď˙–Ę–3s{ÚbÇšVşń]ť„ŢóČř’m« ›†nCWľýş]ělLą'«ĺŮH.ßq @6ô»ˇď†+uWŻ§ÜŤ.JŇýT±4îćĎ|âŃP{ +_˱ +m#¦6fń}Ľř†üń üčh•žBĂ4ł€H€¨8ŠóçƋЖćT2a<Á»Ôť=>ćDKđx^z°ĄŽ ŻĎáPŰΰvµt„ZÍߤـ]óGł'ൾĆMÇd‚.¶­ä­ř@ęB~ˇüJ îÍިš Ă_y8§!đqŹaŠŽ: i08Ux.Í‚Ů:Sâŕ‰ţšÔż·‘Ť+¦?܉˛Fp+°rA Rťś”˝ł4ęĂÄÇ^V +ť€YAŞĚd\@ěp8üZ?®’(Ňťőyk¬Ź2Đ%Á¤w_bBkČCRG”ňö ”I+:CD o¦y”ň ÉóÚť{™+S˝`öŐN­Wž +r=2ú¨+ˇmÖâ;łŚÉňËV“ °bÜyε­qlÉĽOĂęNtBdŮRäŢ ŕ¨bňÄmy)’­(U•=DtĄ±íˇK4<ňŞ—ě…—µ~„\Ż×‰` +Ň-ÝPĽśâďg>čý-˝hKŘQÄ/XpŰą1sť÷}§ÎôŽ>¸›Ď¬nVf^ŔšÖ:záqcY’¬˝Şi+VÖ¸GÔšŃÖQä܇ JĹ<:!÷™>kîÖćĎ›¸©h0˙ź¸úpĚŃw€ăZĎ–UIK¸rňČ=žővk”^ôúIˇ> ĆKËSMçT¸§NŢ{q”ÂŰ57ĺłIůśß^·ÁIľójčGU=ş¸<„¨ŕ”Tŕ|¸űß;Y–RD÷Yr <•»„ă?á»TmĎzˇřy/ŮŻś9n +ŐŃ/p ®/ M+Ůd:Ţ/Ż'ŮF&#’ŠÔšüFßzěw1•·¸břP_úá@çV†áĄ6íMËöD.ňÂG)lm[ Ţ"Rh¬mˇ±g÷řŃŤ alÉdcĹÜN•ÄžţgšłBoŐµ:r3’ŻÂ ŞŽăXŇÔ/Ł›‚Ą –ÇA!ˇ¦Íµ…0p5Y°îlŹTzČ‘¤GĘo!x|;• ^bj[4pŻ +)+ä ĘŃo‘E‰ „‰0ł‡Ű˛´xHů-Ívńb7µ^ɢ‰! ‡V•_âc×<ĚFpt¸[¤&¨6iEď°˙ĐPe + ‹™ćx +áďÝ0xP©ehoäô©îő™ň?Ŕ{ă{H° •d×É÷żż#Ĺ›ˇxýá@ÓäłĹ0Ŕ)¬Łę! EŘĎÇ›ülT¨ny Ň/ +©j\q:ź¸ar1Ů[…xMý¦•`F~ďńš3ŔűÂŚjĘb˝ö0°ĂĘ\6R'26®ŔÔT1 0Ň3ŽüFŰOĽçÜćčÖáˇ0xŠÂN}»łăčHž¤Ŕ^"€Řv{T‡>§2 +†yÚĂ(sŔőzŢÝś€ď¤ý) Ă}­}Í=.‘¸-5¤Ř. ó#ńDýy‚]+ˇ;P]ŽńŇóxňT'TAÔŇó™ +诀))*^(J< R`?t(űą\ĄŹ[MíŁ— +gŁ«p& lÍą¨‘m'C…ĂŃÜ[–J-ÂEPyöÚ>:ě-ÂVPje)—ňv‘D¨ŘCpÇS⤨J!ý2yĎG:·%—pćŮö’AmÁZýŕ_±›Ŕ‹Ił%×Vľ ÍőTî`lڎ›*h˘»§Ŕ_ľ«}†”YĆŕěZýť†ŃäďÉĐ4ü{¶ Ű?ć÷$P¬/í¸č]×gŹ]Ś_—Ŕ ŕÄů~ ÄHôŃfň/÷ąÁDQÔűˇÇµat˘őţÔýß»3Vc8>ëé©6˛ă^MŔ„Ľ t$}uzWô6`ŮŁĽ°Mţ%÷ěŢŇVá[‡ůOż¬ (Â\¶*¤(ůJröČÝ7ÄaKP8HBŐ×™T~UÍ+]ńO|JŮ•k!P€ ]ôHńćC)›|C€ŘxCWËc(1Ç™ŞéRhĄoŞ’˛Ró NťŔ8O mzť©­qĚ:*}üĐ$ÝýѶ’Ż«:¦Eś¨[~Ąä—ŐŚ>Ľţľ{Ä™Äéż÷ŘgXĆwCYď§!@6Čz~L±÷ÝęŚýc¦DΛ%ł2.˛“/ÖÝÍÍĂ87rđ¸>»ýÍ}Eî«úˇďł+…|!_°ˇn@Âf9ÁpWü–.sęgŠ2Ěşd+ŻŘóŢ úá‹xgľđbdJç§*k9čđ‹(BćĎşalÂŔ°“#śB‚?dÇĘ&äTóşKjÂ:zÄ“BAß{Ľ/×;ÁúŢ ĎF…Ďȱ ––Ë–VLu5€€ZäΔ¦“F”îwf­š„&™` ÓIn +j‰©9:ć:Čĺ «dŞ*Çô Öí5qÄÔÂřU‹6ľÄČýPřčPJďŹqä‰x@$üc­L+č+ŕZ’{ţö.ú©ŽM"©Űś,Ä$o\)ŘÄ÷ŇpťG„ď%ćŢR/ 1"€ż˙yWVf#¶Š?ôJKH ‡g‹]mŠW¤Ĺ`(g~ö`ó‘ť{k]©h˘ě˘ţ;„’U­Üž+ą±ľVĐČc«Öüzdäˇý\F˘âđ6BQ™=·ł”s góĹýQXÍ y“ ÉiŇô~CÇk[™X8˛ňíě¦ÍŰ–^6ś€^úGĚŰ@†ő(ÇiwLi{$ń +ř&X˝¦‚ˇ6|ÔšÇĐDˇřůB»âNŐŻĄ=Ä–ŠÇ˛}XÓŔĚ‚šF_đf›5Ef«cľoV^lő•=RE ńI¬çÎö­ţ|lq/'­éÄÂźĹÉĹŻ5“Ů”6–ŠXů~÷GÔň,rŹ–‚ŇҬĚć80›ÇçÜÖ™oAĄeıś„ý‡Źrě!~^1·»0d·P@IÂ4ˇżä‚wö8łŰ"?Šn›HĘ"M]I-Nz TjSUq¶‘˙iy*eZ)OĽJŰ(P)ŹĎBŹtőbŕ´(y* +ÇôčňŽT‚+E7đ\»»fŽÁŕ%–“Lç|-—%‡d|^ěižNNě°śD(gŠ%^F†d>ćľ'|ťANś3#¦Źş ˛PbžˇÎř*Ż AŤ ”d<“ŕ‹aŚÚ?Ú{—6óIró'1ÂYÍŚ lîjđĎÂdÇ›—ŞęѶú;Y˛ Ô dcßĎľ•Sńę8ɰ/xĂj' +v8ţ&Ř=Ä(#ú,’á€Áň~ 1Ö•é×c'žŕ€i˛Ĺ  ąbS+@ŕ#„$ŚHŞ™|.Ő­í•îňżŢř÷@r˘n.ˇf ś‘4ľ+]Ąie…ä”nL‚łs}[.†é¨ú§ ŮLBÖí\ËÝHµţ}8ěšbmě4Żë‘ęD’@çKüÚ@E‹žNý„>2Ćô ŻOŘY˛úÔúbˇ†šSőGŇ“; śÓżă éß7ĚôSmx\iµnÝÁ’Ďl% F Ź^RAľo`ż ©×`Fņđ˘mă`ęíÓÁždgCë„ĘľŠtZ˘#ŔĎd·É»?$Vsi +ę úeyÁ í0!Ů6A—HP$CÉýţŤůd3Yă[& +íŔž´6Źé©’.ŔnĚ0FĽQËöFßź<[ü,Ź X’ö=7ţžU)=ü™ŹřÉ×!€ MAŚŐ"áÔČĺ5`$ K˘”G,˛ý'R>eP’]‰ç¦W2źă0”yňž“ÂWűF¬’Ŕž`_D9t <·PŁšFëLȇ$Ľ¶ęk jYî)®oe +ŕ;ńq“}…çŞ!S(ÚF‚x@`˛~»ĘŞ X źôĹťš˘S<¤ëSbCa×Äj¤c,Ćß(ź‘0ŔňBh Ů] -l˛I]ýe"^Ťµ”îzZą«Ë{MŚRBgÍcHô¬Š™‰ňsŐm’gërä$čáě ޫʑŽÔxY)L˙’»<3˝ÜHfžárU9t‚Ó- Šŕ*Ő]‹ăë]ň7ĆëC·4`YÚ•ZÎÓ”Ő\¸Ú¬’rÖ\¬ysŠsEC”xRôEaŤšwÄ·S¤dKŇ…ŮÚ©Žşwe4WűXUř!KBŽŁÚ »ř9ŢqjwZĐY˘5żDâ;2ŃpV…6$çń÷“Mó•şÝőÉš +—·ěÎL;¤Ü°N^G +Ň“ű`ÓŠˇďGš±gŽ`‘ď&ľ2©?E‘“Č€¬'$ĘÚS!“}a*s©sĽžŮ± A]c¬2ˇl`¶šZ Ůj¤$řbWćő…mÄ#9v łňŕHl…Q Ľ¦xÎđý#Eď˘!–Ě҆L7śČć«Íň˛ěˇŐšX´"zj+IX)ŚAO¤đ '®aб·óĄU +MLëĐä÷A—S2÷hJg/ţ äÎV ”Ô%r\ 5zD>×`T¦ŚzŤ 6ŹiKß-{[2„ÄÍ”śRĆś´||M0ßŰťUˇ¦ŐEu"Ö/4Ck޶ŠŔÖj‚6—Mjŕ)"’â·ěZĘŞ‚i‹m!† 1ij¦ĂkĎ@÷J~aĚfr«ĽFËŮý†0Ř)OvJ {éN^€|‡ţÚ1†ő×ŢŔŻŤ×˘6ĐšŢÜÇpżÓŤâžNŠ_ń÷˝Ó©ĐÜď9& ű †IĘ`i«se‘˘q¨–łňx=ČC˝¦;jŮXE§tŘĄ˝ f`Âz»{T3›'t ŮP1cl4 ŘâśĎŽ–őLPlˇH<şÁQŢrQj+™NIZ&,s’Šd;‹ *¶ďsł7A,yZ× ,šJ5.“3vnX™laáÔ˛l°SHíč2‘—­ÄcF¤ÜC^óŹÝ´ÔĄ[ŰÇ™»Ăş;xů“čc÷ŤNbâÜ=ŘhVj2Ô˘{ŠU~.jGdń(ő!ËÎ\(ż)g¬~ä`ÇΗ„*â°íať7-uJiwgž*ůaC‰¬­±¶wĺăâűîZQ^(^´du‚Ôż! 5ńĚÜč]â­@ç3+[I† ±C*ť}ňşC î‚ú¦/¬O=Š0uă +y÷a°ä'ďí˙eíízĄÉ­óěżň:9đ›¬Ăd$ČI^ ‚¤bËpů÷/Żk±Ş÷toI 0šÝdWUW±ČŵîŹIäĂ™©|!FeO+Uŕ# jnBLp9ť‘5…ZůtŻCl%šŞńöiÁ +€"/O,°®°xSä‹ĂÝnÇ´M Ŕ+ű>y;y–ĎBAkČôíKž!ćăÜ[ŽúKË;öOÇÇvR“śäAă-$[ÚëL±ž°KX·ĺ8|ĎŇj"B*+‡ěńŘ’NQŠEßöC%?…5ŢĺýcÂą‡íb +]Ŕ®Lˇg#Y´ćą|Z“ÚF‹%%®żŤ8Ég@×Ma}NuÄóJ=Ú‰ń:¨ö7  b Ôő«đ8‹Ô|!ńbúH1§°ě‚ĹĂNĘ(Ó­–lmIů0ˇ Ä"Ň}/Őb¤°8"} 9őKĎĘÔľ.í-›&ŰnŰÉÓ`~Ę–H#qłÁlýqó…ÍőâxOđ¤R1ůżý Đ ‘Rn™EĚĺűČČ(x|sąŐ”ČXÝ}„aX¦yýQóĘJ8.ň?É§ŹŞ¦…“HÝq‡3!” 8ľ¤Ťěó˝VĘn+¸ĚńÄČSŤRyE!».Ü ůWelp®Q5_‡ řtŐĚ5zrď^Ĺý¦ĐpôÖ*Kvt8‰Î`$śźéŚ”o“¬péŻ 06w’ŢT(ž +#/Re˘妨÷«»Îđ I·{g>Ä=#+{IQ$Qdŕů.uŤ€ś t3y*ÔĐěIPšŽvÁň«K8° +ô6…™(†Ž8{> +vj)cAFÇöëꎑ8I€ĄG6‰J¬ Ç‘DĹďůVŚ*“%`VG cZŠü”Ń”Äb9Hř•:ĂT®ěQĺL`„!ěN·f ×´+´FCók˙Â* +t¸ÖąilŮžW`łô@ĘybK’ľâxUA¬ĆÂ(ŚÝti°«)(]é9řn‚pXD'§H(# ¦TTŞ!BÍʸŇá^QŞÜ“Â`Ü^î”’öT…iúŐ#űˇÔTW-lfŕ» +ň ~©PWoe +­ęIG Ęu$ I—Z[m`ÝŻOsŽé‡‡Âk·‚űfô:•Ŕ°Ää{…˙Đ0şé‚ý¨VÁÁUUAs ¨@ĺŘN¶ĺ„xŽy4úó= ,˝#QTÚänJfl{ť–zäžÄüfk‚»‡ŮIů ó0l©P hüé NWĘÔŽ˙—ĺseô¨DżM!Čév ó6Ygě|$»×¬®'d•’&JáÇ™Š}“W{¶)¤xŐŮ0  ŔáćsuM´°ĐiGu‹âtń‚! Ď¬(şĚČÍv©q”R‰űŮüŹ#ÖŕfžqůY#† Ş–°…Ó6Ř€śŐVęůu|sŠŞÍŹ™°tÚëN(ĚŹŘĂ!ĐťäüŢSĘ~zőśę\‚ŃCţ2ţ_O%x†‰ibşuS˛| ·eµqĄ5K ¶ÖJ⦞#_ ++żtńzřŁtÜ_¦pŠ!-F0«Öy{ĄĐ¨ęgČ;Ś×rÓ#Sh0Ę˝{&Ě|Ů€0ju±˙ŮŤS¨”"Š˙9 P €r·Šýř# T©źĺAź´ň&¦«#¸Ą8Ú€¦ĎRE#{ô3 YíĘĄaëOŠ… ¦7×FµÇŤ,ŰĚj7$„;d’ÝÓtCáď˘x'!Ň™»€Ăl˘~—ʦ!, í¦éä ˘$6öľH¨tđ"­ÇYŞ€;nâ‡ĚxhÎđDM±ŕçŁ(‹ČPő–˘ĘËŽĺńF…(€ÎţU!ěĘÇ—†ŚÓŐ\Ş,§¤şv„×˝ÚgŠËÇçd˙ ÉyÜp«“@Őđ‘ĺ—ŔmâL ›ˇÝŔř/eMŕt.Ĺ(°,×DâČť¸tďem2AB7UŹ‘ąŮ¤âŽv(ąÎ[· *6Ĺ{˝ß;ĚSLa«FKd‘p#N"ťµµýű{Ż'E§ rKMĄ|r“r +qa@ŹčZr,ýĹô«7đeÖF˛d ň1.~®z÷µ »hč Ů0}Éu_áÄH+1-üŠuŞ‘ĎÉr«¬çiÚr™Ż®¦żđţáĹ` D¶BőW°q©5¤F]}ĎÉ«[N”ě„5®»!VŞ‘!)H-Őďo™č"5YĹoń¬AE||ľGDľŐ(?s,4-O-C(» #ć(ŔJô ”8>?W–4¤Úc~ěţr®e*˙ئŔ7’U.­fýŻp›«r }ن^e5¸©Ŕk¨żŮ€}˝FžM-nq4ÜÓ°g^¸7ZÉŔ@úF^Mc«˝]jř„öâç;f×c ł434ˇ$9 +čó§öh6l‰­îc—…~Q#-E + F’:`>řř꧍ĽźĂ˝µ’ä&Ő×P +ľjYK »Űeú˛¤Ł·Ě+n-Ľ&áâů¬a$Gîi÷gp\ŤlĐGĂ/Ç{kŻĂĆľ¨AW_RşIFÇôˇ©í%ڨܜVÂúbÁ(Ć N Ť* +[ľ«˛©Ux21ük|«ĘSUŘ’˝;ݎ·z®mpkŇ Śň ¶®ăźK úŚĐV—4ŽBĹ=…ąT3%đ%)ÚŠú©wŢ38§%Áö’AI¸ ’Q&9÷,áý‚€ Ć7 Ň»áěűxhřm`˛Z ŔlćűÔ^Ň*ÉÍ´XÎH‘°śĄG‘žn&¦č†‘;ÝŘ{ ‹š»‡`iÔ©Vâĺíýó+óź‹Pţr_íC´´k’LTÖĘšsŕĹýS/ÜS,꺤‰1CŰĐvřĄj‡¤xV‹¬qˇ›¶Żá¤0K%÷FśL,’ä %m <ß )dDĚŤŮ8ž•Ě˝t0‚ój×Ďńj0î}9ŕËÜ’óČľ„ăWŕĹ U?o? ,Ç,k<&‘ÔÝщA![Ióö“{r¸*"ÝřEą©? ’9Ź'‹Ý%6 úâËîȼᎢ“kD“v;ŹvĹM'®/ +ĎŠMßÓž¨ę¤‡~D+ŰD !mâ"‚r§ ÂŘö׸lű@OönčPĂPUJ(tžÍ8µ)ô]»ŐŔĐ&×±?O%Wń%S׼€ŔÝôŻđßy¬öalE¨OěM>Ďí‹y ÉřZÂ˙˙ŘŔűůŻ>Ô…›ić˘´ŻĽ”ő|ö‹Ň‘O(‡Ú­ńž‚uiWîµ~dËz•y@ ő€Đ©᦬*Đřę|„ ^ľ`𣣛„na+ĐťbŠ(‚ÚO­Ý€Jq Ě~Ť:O9_ŐŤuźaĽę0Ç8|Ź˝~ŻŹÔÉ…ł*«UBS€"W•¬P+áŤY¦ť˝»¬˙ŃăěźË)¦ä$„äă8 SĄý"éÔŢü>5‰»ů–ŕěBŇžábݧ@ćü/ţîßĹ=ťodŮ^šÖÇ@6Ýęµx “iď*ň„5Epű)Ł2ë’|y*<—_§ŠT‡‚µ=Ä lľ-ś1"ŢNáPóî!(zŔD!ą»jŕEŕ1_n<=ćRÍÄ–yťBŁ•Ă°!)ß$ätLľYŞnćIŻh>YNű +ŐŢ>;KĘk©2od"]„G7$˛¤%Ç'f­$bž,ÜnŢ{-5 ´'Đ—˝ÍG·~ęî] _ŐiDD„˝˛ĚKĹĂŹzg©x—Ďżąó»˛ŮÓdBŞôă@ܵ(Ąs/Ćb¤ ě.Ń´®ˇ’b8ézôG7ŔסRÜv‰? wRÁ6ĂB(f¨QHK5ÄÁĐĎ™fČ'Á tř3R˝rXdIí´2°7Ś `Ý›řµű)¶řIRÚk„FHC4šÖČ '‰:ř˘‹·»Ç‚´"02Á˛{@k‹#F›šÝPň*‡3—»gH79§şŔx×ŮŹD&™{îÉPbďôOůc߼zL[ŐÖ-č+^ßő¨áűKݬ_ĎĚđŢ ň°‚ÉűąýÝ uË éhXv–a Äsy˙ü çcp‡ŤMŃřţuC#…ŻŞPę Să¤÷€CŤňĹ~3_JBÝ4G$˝Ś= ä!~şĎłŕ ZőÔ#pěůćö[íčZu=rthÓ…Ý"ŻAdô‰'ŔQĎ•;Gˇ8¤@ßÇ„ĄSůŠTôÍ Ü“ń^ś +/=”{3»¦+ …Jŕu5śˇłłëJRÁ„+]‘˝)TĽ†«0|IP??@Čo˛>ťihšńf»ĺI+/¨»! 2tO@ůÔŮ/ç‹öĂ{Ż}µ/J„–př»1Đk„tGí;N_Ńî=.–ÖTŽmíHÄ ˛’­ăKDĹ +ŮWäÝ9ýš˝ľÍéÔvx3T:Ż}†Ěć\WŰ“Ě]łđ­Î5¬‰K8h2ÉÄľH äާJî)*ýŃĐ#ůó‘Ň_#I@‰3”ńŤ…(Č`&„*‡Š°xž· żŠ Ż·ŇäčéÖ÷ +Đ5ÝÚÚ@ćRăUń88ŞH Ń#pRn«ş)/ĐŽ_¶ÝX馥ű^4űA*»ccNĄ¨u9âöôPt 3c~±‘­Ç—žE1GĽxiZĚ®˛y ÜŚÍ*^U¬§WÉKük·ˇŐÇ˙UşH‘°X-d˘É’ëb® Ô_„ +„ŕ臶Ď:ްău@ˇ’±g€ú%G€d ÜV@Ěřŕ7íĹşČ ±zG˘óĽĆ ¬D“Á6bť”j,™ÍŞpŢ?d„óĄÚ¤řp9őa`G=Č”ťŕľA*˛Ě¦Đɇ»‡zH°ăVâŰ9`hŻSÁZ˘[9Wä4†X'|L{ě€̶±¤˛Ě&őWJ¦!j•ŕ‡źÇ]L}çv2°{ťëB‚÷Ř•ŢPs/ę°Zď7;'Ůś=ĘŞL™Ď™é´›n)ÔĄä+ Äj˘Şqßn­B®Ő1®D¸?ŹOݦˇTć×ó2QîoµQčŔ†>Ń{Ä(w P9BýóńEĘáv‚7 Ńd;ˇGjŞaÂÔyV8®Ú2PŰNłŹö|ůnô|«ĚČ’7 +hLÇ$Žš˘˘@‚Çé1NŹëö@yLŢ[µ°-ž/¸pŠę"obÍĘ!<âP~úÉďď׼»Ă‰ÚĂéńđ™eúw%ÁMŚÚ­­č¦ r¸çLK¨J?çˇôłdĄ÷Ťš€ŃF}<ă>;ĄăG  O°iî*OÉ€Ji¤˘†K0O1ĺŁÇ3t¦âüűÎďşQá_ uĺąb‹60\ˇL 4\—F3T#-óĚÝËLé@‡d‹^±ˇŐëŞTkčŠ Rˇ.śŁ$ב• ŇŠ*”~†ąÔöP©D8ĐФŮ-ĚŤ`ň«°ľ·{°ŃŽBű+Ö!×cxt}Ý<•óŮ^Qž¬˘ĄR-†ŕ¸Őv˛ÉM ’)Đ‹¦OÚÍ—`P×gŹs†ć%= uŞńsťn#±lŔ ”˛ĘÄ1pý®G˙鸕`ůńśęŁ”Wq©ŮT("ÄÄŔ+ÔŤI«°QĽ^f°Ĺ/ɸÖëłGś +đ=47@]m|w ý#ŠmFÁIšCUR齇ĄA}8p콇öG7˘^F2J8˝†ů—î™Já°ş—“ćŤGÔĘ\H‰‡ť"›¸ĎĎűZĽ=$ĐŻë›!˝"EŰ—Ë’- wË·=ŘOľ°ő°ĐRĐnĂ Fa-^ŕJ“ű˝ťĄT$~4Y yd§ăO…=é’÷űěqn_ ÜnvCŐś÷ÝšeđňJë'Ęj)˘¬¬*|@ö< Ż4•jáťeţYuń/7°<ÖTZ9|N¤!ęi(H;`QVه™šÝc?Ęv$Äű‘O_¬˙Íî6ÄľéBF{źź*=Dü쳼Wä÷ Q),ELÎ!Ú3…5ÉŘpź¨y^^]G2DeQ„ĆHEđ\Ärîµ­Ç ŃpQŃf…ĺôčă™ZćŰ飛ôć(ąUCPĺOöŢq¦^żëŃh×I¶?1ĐG/Ť·¸S(Ť €§~™xP°“kÁh¦v!oŘÔR^hOŃąľÇzĚň´j4&Ş·Ąß" đĚ»=L +€3É`–zÜŠJ˛ěYʵ^gu‚ŢÚy*rCäĺś*˘ÖýăKśĘŚ/˘TÄs)繬ÓCµŮ†ÂĂ?]‘ءxÂ~‹!Đ;Y[ťUsl ČŃč`€Ž­Iif@‡ź=PjŹ'–™,_ ˇôR°›—T…a©<˛HI]¶‡Wr§eÇ*qQ9ÉšyĽ]™O@źŁ7 LšáóÔđŃă_23ůÇ÷őÁÂ)»«ä Ř!33b‡2e@ŻĂÔżQ©‹{Ş‘şµĎQ—˝Ę<˝xćôóÇ$Vp×é1ŁÇ^îNŹyz”»=ĆsŞă&˝»uł=r)“\Ę=‰D6.Çň¸OÂîÚ„ś´ a~ÄO!Ž˘Ç őÜŽ"6W@6¤µĺ U„Ř3t׬?u‰¨$á4cIÁ‡ó0cÂSů5Ś+Ę“OĽµL©JŢ»&ý…0\QM0ÖEéQ¤mąłŮDď=|Ç»°§=Ë’N,‡K…ŻHŞŹ¦ë82×{fĽfHńď{„nŮDÁaÎGüśĎH~Í)Ö*Öó§ȇNÓ uš^J0ŞMǸů®‡ +&r lu‡ +·c”4ěćËoş„EXÚ±u•Ł«¦č¨1eť«ťAţ¨R`ŻĂĘËHDĐWnűĺ~RŠŮú‚/ŻF>{%žňŕĐăť𬸯jedÎg3ÓŞ›ôOfŞ>6…l´Ýv{™—ZQhÍVŮÍXĺ '>˘Uśřđ źí'h=7>öč[@NEü€˝h‘lz$ýáŘŕ}K0Őą5Dzł'Sf1ěśEúÜ^ŽâaˇCJ+8vôsÜ ĐŠ~hĐ ¤Ś°Ń+€2qů…öPk +QaÎA9…`‘toF˝tyUźěČČČě—ö×5>y­É`ŤĹ_S]şaČţą‡HX®O9kI–/\Fćso·*©×dÇŤ6öřV“+X]ě aŞ V1whađü±•=Źe˘ěń¦2Éĺd”9›GYđ ¸ŇFhÉ3ĚQ|îšú}3x5^aÇŕ±jDyĎ‘bÖ±X±!`Ň Ô×WĹźŹŻIYĂcG.ł ‘56U#bv¤TIx{,†(—ŮďĎă°ŕŮT!ČCrňý%ÄAA+ĽŞ`=ß{(eóčçż·˘&BvׂiB+Ň­đĘ3ţ~Ľx‰Ó!Nď»ţęÍăš +‰;ą˙ľŤm_ĎtŠ‘W‡ +˙ VăRČŹßžŻ˘[”ľŢ? +ĄîśîęĘľ[mHÔŰý +Ťn KăAŇČâĚg$vü‡Ş»×ÁŮŮŔšAú?ř<—âDYxuv°¶Ŕ´ žk€Jš$%[…[«wŢ’áÝ{Ăą?ď1ĆÇ÷±#6›‘špÔĄČăíůÖçgźŔë o­CyçâÂ:p_„\ŞLłl!†íçëŮłş`Â*ďV>Dz}đ-Ţ÷-069Ríx/\=t#Iđ«ŮËŁŇNhGMńďäAŰĄ5"5 +–¬ÄSąľÉĚľ÷¸8őü)ŇŤÔÖ©&Y×nŃŽPď#*;”4hÎ3"ęĽwŐBĽkŕÎPŰ&^{ćNTÉE” %šýňęÂu_Şč_łÝW ¶§† ̶Ú˝~{+ńŮ=w`…9 ŕ6¤d­C襾ƧőŞélő’<\ĺ3ę 9  ÔëGâhŹĂ{#dv8 ­Ůj8‹!›`ăř ˝= gŢ‘nĚAĽ}}Ť”)‰&d%H°íč#4.Ţ?żbÝ{ŠŇżh˝,«Vë¬Ő°Řŕă{0/Ş4\׆Âű1ň^Ü_Ű“¶z%sسّ5ZšÚĹŢ•'”*ŚL?Ěľ¶Ç €gé·Á ¦h°îăfHÝŔ˝ć¬ů:ŚÉö|*l^ĺ÷”*·LŐăĐ –o )@nĐ=0®s<”÷+e d?qĂçŁúr9N~’”ýńůŚ_sŽŐ#ä±ő§¦z†őűé6Ŕ(ÁŻRĽëä—ő4śyRyorˇm>_l¤×ßËLQ$b]=T9îHg +R?QgoJT©!÷攎C•&ű=¦ĐÚď÷+6٤öÁ ˛s[óŽűŃÍfJ´…÷ĽXŚKi/¬‚Š 3PĚmФh >×××ćQ­Ŕ)›oŚÄŁîíóvSçhoŤ5%Ď)p_â †Bş?,Űľ¸Ž*tů_`‡,€ěVĄ‘Zt& :5'6vµ«Ë Ô†)t¸‡'đb]Đ:ěmŕďńYK +Ě`ě–OÚ,űľô€¦pđŇ› ˇ%Ő_Ő´”úşUâ×+¶÷ń96W/+·ĆBłő´"NUĽ]ˇ* ‚č4¬Lâön8?ń ˙ É2}żľV†mçľ#X¬Iˇ“y#iG +k¨YëMŽQFëTµ~l%ĺöw÷Ů.§"c÷š%ÝŔ^ßgőٰtĎöî­5CśłNľ÷ČŔcĂ9Ó™\\äžÉ0őô +&±gO‚É”Žx7§lÁç‰űS-\úWyä÷ÖÖŽôî•Ăm¤ë# ČŮěÔ81V'Č*ˇqű(żÍŁĚQ±‘…üĘĆ1S…r +ÂYď!Íd +Ş˝çakU‚]ŻwüN¨ ĂR‡X•»ŮˇU}űş€‡cÖň÷QNZAE®(!îoÍ iPV™Ą‚‹b“”â‘đe‘P2ÎOĂeún'!´^_#»µĚ•Ţ®çoĹ‹¨^MąˇŹnăieQ`bǡ“‰¶PL^ÇÁťTCHŁľN:#T¤ń C,F‹ <=j˛ŔŚFÚ-mx…Č~†˘^É"uŮ[Ł‹-[ĂGá¸ýŘ`ă‹dÂź‡Řüőa=Á€ü4Čżü Ěţ NŁ˙ő[ţküř›÷ă˙űźň¤ůÇřOż˙ý˙ţń7˙ńo˙űŻ˙đ‡ßýË?ýęo˙ĎŻţÇďţůwżţĂď~ű«ýŤsĘď;ţ×_˙Ă?ýęçß˙ó˙űŐď˙ׯţóo˙á˙ĺ_~˙˙ůý*Ż×…ü[x›˙Í˙AÂŰM2 Ҭ-hF0Ťm´· źXśPŘ“’¶;łÂ&ţú¬!SGš{"¶ŘĂźżĐúćK{µŘAł0,ŐßłEç†ŃbEd•Ýâ?ž+ţu÷‡PĄ)Ůc + ÝĚNo¸ÝqT±ë é¬n˙޸hˇ5ťĂÖ©yź}íŮ ě%°ŽŚĺ2Ż™{˝_×ký8 ŠÖ;d-j?ű—ŃĐ®hPâ–Ň:żŃN&őlx9‡ő +żŚŔH ˙K›¨čÜ ŕě†J&ŇmőŚĂ+†Høă{g^€q¨ŹAV } EŮ‚ßz×× –9ÍŢ[ôú=î„ůWŻVYřqŁ{´{wku޸ż":4´#ÎŔ8ş lUÂ<^Őş˝Tł˛ü9ź-…Î…řE°Źbg"> )—Ië“ă·J•dŻż7Äű ü)őĎÖ$Ô1|Z—Ôk>únl¤Ŕ)eUbb::ąCßôEňP@˘ÎçCá!ß^L-Ű:3”_¸fź~YěaW ěqFLw çÔ+ň*T­©—{şŽ~îÄHX„ ĺ`WpÔ<­Âˇ0#my…š9öÓ@Ť}7íJ*şÂXFíkľo’Xf/x…°4hâ#¬Ř÷SŁŇśaÇFIłüůą‡]SľiĹ«Ď&îÍe*=ËŇÍâC°Ř¬];r»kĚ‹÷đ"ę$Ó*r@L«ĺpjÖŠd5GšÁC­!čţŘ˙´‰¶(|’ţ{“Ůqe‡WŽć+zŇ`žůF±ß˝€ŐNůűIŤŐó®Ĺ‹ëŽN„f] lŽ +Ď%Ů›úŚžĹWH8ˇô4î sČSćŚ%ce^ˇSÜŰń˘wÎáľ3çä@KHÎ`‡ś?K˛‘Ą]Ńaîí˘ăË}&HsÜHäo§@ ĐŘuKG<() ·ČŹłQPĚp»`ćąö`×&D ĽŐÁE)§PŘç±]­#`9©ß^XcIş8ÜâęЬ‡őťnóCÝžwč"Ňî®Ä»šĺ˙ lx ĺC7( G%• )$Pí"ëřr+ô*(˛‹Ä“€´w ™ő‹&„©ô¸CŤŰčxFţ_t·ß¸kŵÜáČó&mC @–sµX0:VĽ…×8^ĺnFŇŕqG˙ÔËđóëía§ŤŃŐŘă¸Ŕ˛Wô{ž÷eŕ$Vq_SuáłÄá×× #x8ľ!C!B- ŁÝk­dŹu• ˙TóX·"řc)ŃË ň.(…›ĺ7^>,L]Yőá=!ňRHYđ°ô6LQ¶ ľBQwâü4ÄňBiS‰¬ř˝đŢyUÁH÷ Í?óöş’ÍvŔDZR»]ÔźT#4})€‡:Č QLĆ}č4&…ě…ŠŠşL¸ ŐŁ…`ą/äČßß/28 ü©f~•đ9‡“V’Ť†vI%] +îżg,wúűůPxť˘ü{ÇsézAĄ—Ipäţ;®»ť9ź±ç#é#î0Ż×ß{}˝!ě÷g¤¦_™zLtPőý’§gÁłB •J6oŞ}ŃIÁMľÄĹNßÉȡ¨łšź@G ą÷l˛řł*oŇżÔś}»÷íĺjŔhcó¨QBŠzÇów{|é|%łĆ ŕ=÷+ËU‘yťšľţŽqă«­çĂ‹‡C©=‡Ôĺý·Yá›Kr(‡ ťMVoÚ¤¦ŠÇOLZń®«@3L z(ţ1Îîűr‘gĆÄâPóc~(DÄOÔrU©ńćD•ů-8†b˝ĽĚ$šĺl‘ZŘL¦v$@Xľăx€5R¬ŃL#*¦N”ĎÎŞš Ő¨q”ź!ůsŮŃßdÜçÇcžÖFnlě‰>ăíěKĂŽQ‰Đ ł ÚÇVŢ*˘ŁH”^ŔO¬O+˘˘—rń–ei®4€ŠŮ ČţÓ ŽÍ¨ňGćç4CÓđhßa‡˝ęfLU *ŽYä™0[Ě|ßNŔŻË`Öl…Ü2h’ź *ő•ŽąĚ~ Ë‚îqÝÉÉ,RĐ^śSĂ,(+­‰gGĺćvć…Í`äµ+ÇjĎ RW;¶8VmÓać ĆŔ“»?¤ˇä;G+38Z2,Žl˙DĆsĽ2=Ń’¨˛ÂęŮ+h¨‘Ŕă鱼`Řű.©7 ř‡5˛nŢ-¶®ĂŞ(`yµ“Ę€ŹdG…SxůbŮ\Ôv%Ół—ë¨űdI(YµDÓŠĚܧŮ;amŘJÖŰÜěož¬ Ę%¤yL–Ź“z5]čźđżü“’-Ňr R1Żz Đşoµ­ÔĆŮëż—”µ&É83GősřŹ&çĺŮ ”ľM}âzĆüA=›ůCĺš“×aX®ozÄ;´°Ö#Uľź“[ŠŹaJ!µŞ©ŢÄšăD”ˇüÂ~ŘOśŠxL@-çGhár ¨Żíߤ–"Y +XęZ îŽË2ŕסňÉ{Źł§R`—$á(” }ëĆ“JńQíČøýl¸±>ĎřE«źź‡«…)X{˘ÍW+÷5=îůôWőĐâţl¨řÁÜ—÷Ńzęßîf“łM,f6Č©DPăzÎŻ$ÎáˇByľĘëk—& ·ß{vŤ ?šmĎ]{oE©Š˘}VTŠ\_/ŁßŘfLRîeű—Ďź!LôűtfŚ4mŽý·`ľĎO ËőlÓßZ7–H2ΖýcoT0 şz6:‰Íëi8ż0ĂŤÜ­“:˝ż¦ű”’˘T¬Ĺ°Ąô+‹Ęcz%"UŞă;P* "4§a° ʼnJö!Yó5tĹ›ćf…uÄBćŁUD Ťô±Ęű!ŔŽŽ»:9 Tähp»č7Ć´á»ńŐ4QQ‡sĹ+Şşîx t"…ÂµŻŽŇ]+šŽţĽ˙>ËRă'W…ÉŘżz÷v°+¤q’qÁĹôŁĽá‹ëńŢĘD{ -śÜ(ű0L. ?6Ľăč_ŤË“‹v‰ĆťdŃŘ":Ä ďŁaĂ”(˛'ŘKŽ=ügĺ±®/KŠů‰VąK)v‘ÝĐ)T|nôs×řAŔąÉ§Řťă!Î#ďá§T`řˡnl0ŕÎ[îüađżľkČaCř›;,ýEkÓő!b‹Ľ7ż„ ‘˛§Żż±$śÝ°ú«á5LFl6(…§YëAb8‚DśĎN@4q䵯ŕ'±í>ÁŔĄîÝ~k2†gĐ b—ĹTŤ»SuĂéeťÍx¦ŔĆ µÎF|}ÝĄ›sRAÎiŕçk¸1ÎŤRŇC4íŁá—“î{+L?u\Y‘;ĹëVtÖĆ6lĘ]Ń4€4ůGŤęłů˘©ŘË4¤FÂä»5ó˝Á,łšă!YOJöĽ#ŕEg3G*§›»&ÓB•[3rŃVăe~ßźG>ç&"ś.NÎŔ/%Ŕ°*Óîµ}ę6˘Ľ¬Ľo·*>Ű#*>Â.ÝÚŽ3 ůw;ßĹ70­kŻ8ĘŰgÁŻ8Ěű÷ 0ě^ć/ĹiAĹ—<âŕC1ćx»‡ďşüî?+yU"źuÎc(|‰˘·¶‹ŚŻ@¦ä órĺĆń5˛(¨ňˇ Ôű°:;t©ű8›€źL’ á«p'Śîý·!ľD“qyĐćÖ •ŐKçáAA nŇvš-îe›Ë®·ł~¸ +#Y˝W¦+ŚŢ÷ßWVd6·€Z†"#±=ń_-jÔjŠ‹Ŕ¸Hý°h‘ F8Z±ŇĄ¦ŃťŠ€[š{ly~ űÝFŠť‡Ą>ĄEJí[f…˝9ď K•,c\§d˝W—[h†^{*dë×L”TŽF>Ő^ !IúOp2ĽŹő +ÎÝý{°m¤µÜ8ÓeőpŤtS%čÖÉyÂeŃÎË Ęaâq0ć8ž3:1¤Ł! %2ÜsÔűĄ…;4K‚(\ĄZUÁArI ŽdSUšíŇ,“uż@:›fípÁovÝEV‡Wo¶I4uşUŹŁç6=L ě ¨˛člf¨i–E&±Ć·A®…Ę +ŹOłÝŞ~n{f8´¦8:SŽŰĹΛl8`‹^%ŰQ¶Ř::ÉĘ)QăËwŐ&ńjlU‚|QÄHAYŘŻ—@ŤŁľh…Ę ĺŃÇ˝[17żŽ%Ë•@TÁš.r.‰•š'Ő©¤«> qY…Á…ڵ÷ľóĎתLčďËÝńM;řh/^tjY„úYWŢ»Á6V€WŐ´ŔÁóĂŐ¤śđby€ö2wď IţĎç™±Rńb‘‡/ă›ůđy‡Ň†G~><ąČ PŮřč!¤;®[Đâ›n9¬¦÷´‡ăUr˘Iî?‰śĺěŹHsíű‹˝rL@ôQTmO5¬h‡‘ôĂŞŇ`§+;&‹5=˘¬†öJŽ™Ěâ- +>®%yF˘h㜪„µ’Ůש\w7)Ç^¬9@Ťb¨r…+Ĺ®2Q_? +™ůŘư«§ĂĐ$Šb왯řós&7ë`bHB-uËS(đäX‹«yâ=CÇŞŮŃiHRž†óŢýçk8˘I (Šźq"ÂGC<ŢvďëÝ|ďFýmr‹ôŹäÂf\Řuř~Ją‚–4Šn!7m„ůÎ{‡ßÜ•asŽă8g‡â!«#ĹCĺ! HبňŘĂ—„śáŢw ÄËáDA-/ŠŹ0-Ś­În)P rR˝|ň=őČ÷Ü{±Ź^H˙öSN,Q¸$†±z[NŁÔ˝M ‚fHX><¶ŇĐÔ;î’YA>rYą}–Šý±Ë` ęÇh“ÄłFťÝĚ|?ş6¨nĄ/§ŠeŚ'đđˇS}Š~ÇÓt=„Č«`Čw´cĘ›’’ćö8Zܤ¸îqOXBĚşo–4ŕßbŮ&ôS<0Í6FJS‡÷PAI¬}Óc°/Sňc±ůŮm+l$/5…ţP­Ub¶É6ČZDÉ*í|6üć‰ĘÔH%×ëłŰŢŕÄü$W ˝E|5¤€ő|¦¶F9ÚK[ĘP‹účCĄ;ţw”Äřź—@Ů÷ŻÉˇ‡‡Řż9<»ą[Ć;¦8í, +˛P§^綸…Ź÷˝ÚěöŞüt “â=Ąĺa«ú»G¸×b‹†ŮŞ@1s¤ă9FbÇ}Ž˘Ďî‘ęsË]ĄĆŠUŠ1?{ î<çąäÁ¦rfÔ’Jdś€˘ŻÔFĄ†!¨ČHIíé"{GŔ™{gB ’10křżÁĺ¦a9"úG`ŁôčítÝő]ŹŁí¤«F~÷nĘy”š‹î˘W¤& ąu T­#P%hg\s}| ‘|¤±+«ěÍg>ű×w“đ^9jó­wN¶×ďIݦ:#ę*:Š®XJ(˝Şk„:JýŇ€3łĚ•q·®"»%%vĘ/:Ł–Î68ĎţG´aXÁî±EŘCt|s ¶˘Lö9™$Ďcľár3ľéńľ°ś¬Ů{7Tśäý^Ę4#–zäbô)á•Ú{Ď2â勨5R«!5w í +Ţ­±ŢŔV +íëĘ»şźhxËC·Ş 2#ă;¬‡ś"@=¶?ZÂ%éýUS4ĘaQů.„RL *ąL +ŕL»đ¸ŕ5řr¬GI ůßßE›ýsP-Bâ縋˘+ŽAĽĘ] jÍţ^‡(tŕµÜ‡[T )ö8čž}t8™Ů[ę=ídë´ď‡Ńé‹§‘ % =Ă9ŞtôŃ>{Píă‘zkťÁWW]‹8Žíčž|™Ô¨ÁqA‹_ŢZÉč<őŁJđóŤ~€Ł(9Ąv|ÂÎlěFwLX1U„ÇëôGń/HEđaľ%HĘřů"‡Đ%c”˘«Ô«Ą*ŞjůĆ–¶S!đŤ(NŹŰ,ŕÂŻ´E~¶ +fGŚ˘†â/™#¤Í|ĐÓÄšě-ş{¤°Tő@¬§tŠBT(~Qŕ=ž,UŔÍfFŘó–› Í}CM°Ä—¸ÁJ™Nr—ˇ˘N +ňśŻJ˘9ŠÝ­ÜyĆ5Ŕý…yŔ~;4 G鶉,Ľ¦´@X‚O{ wln¬-ŇĘőˉę.ű-e—jPqĹÖ\ŕʬ;łôQ°c÷¤Ďř%‚M÷&˘ÝđdŢĺ˘ţ9Ú=›Ý`x5Á=ŐµŁÔÜ«˛çQ 0esÂĆpH¬[Őéŕö™ °9A&ˇď x\±FłL`F)ěŰ‚}m)öx,TÍIě’îUGđ +I bwčó(%Źw"Q=Ţë7b:SÉ36!?¨8Ně%d¶;{ ě‹h!\µ;Çwo˙ڍżt~ł +ćę#Ýn¤—ý>S‹Rż äđiV1‘ä+Ńp9¨.>µCŮüHäő˝olqţPG'A>ă@&9đÎÔ>ŮS±6f‘<ÄAˇj•0°@źÜ= +°aSŚîÚşřěçÜ pZMëL÷MÜŻeSĄWŘJP 2Dć§> kXejĘ=[8Ăşáb`&ŕ¤Đm`‡¸ď05űP}¦x/ć(—±Ög~.§ľXŮgśi%X¤+ŞŁ(riU8 Ę˝Eü+äÉŠ>NĆ© ŤhÜĂ‚FŽZ4ě^w%ň §ŹCç°›¬)ösŞÓŁ\ö¨˘pvG•±ďfÍÓ‘Đ”ž‰ËŐ±Mźń¬“™ +‚ŤŤŘôfÄ„ľW˛E4ŹH]4Y¸Ü®ăÉj+OÚč@Z` €Xw”şŻ×#oÁ¬ĐÇSŕÂľŤŚŃJˇ'Ż÷pÇʸt`ĚjN±®—4 +o„¨ăľPs§YĂHXOy‹¬¶Hl dŐgć©Xnă6ˇřČmj®Ó +[`ă¦pś!źú{‰$`;~»\ë@„xF¶ ”ó¤^ +-ĄŔyB‡é«=vÓ§ůÎź]ÔW)“_G…÷W‘Ěý{B&yĹ0–ďZ’•őě:Ş%yŘĐ–ShW~ď´Fk­ś÷-TWĹŐ߶αĘ-żtöú$&0! Ż=—Ű$ŠŞqëÓ8ĐŚĆEM:$TYßâ’—iOZB›Ł!^Â7¦µłŃŔC qš˝<âečÇ7‡˘|śA˛G‡łŞ7WŇŽŹ™`?őǎĄb‚“‚ɇ¶ äz2y!” +¸ČĚ"P +Č5ĺ¦PVv™…@°(µ.‘O¸EľZű ‰\3 šJd1”‹Ţ= +č?ž˝Âľż–ěÍ9g…E8+T˝jś˙ăŕĆË\€ ş[1Y’&¤"kÜ›źZŇ Tťa~Ž;7üa؉\YQÁąŃp%©Ľņ,čf ‰U­dź ÖÚ*ÓÚ{nľ]ÔćT˛¨— Şóm=˘´đ,ę›\eü,@çHűiĄj”´¦QI„!*0î3A%SȦőD˛epö +[ĺfŘ’‚§µ_ äĹř÷ öR°ĄŔYPZĄµzˇJE»a”,¦ĽĆ¨bvAČ•čD4ů $,ípVŔ˝şŠď=ĹF–W˛‰„Ăăp”ŔWH§<Ë/[ĆŢxÄ8eźŘĐyÂ:r'T€tű~;Đ~ţ«mŔ WŤMęµ÷˛ŞV‘ůÇÓ:¦‰]wm]0ĽdV©ćßžÂřŰśLS€`őX¤p}` ;wh~b.´o[ă¶QŔ4 +1HďTGzbiS2w ]đBÓ—™żŮ¤†€ę^űÖ“ĺżĘɋ͉P 8j@x"w t† 5>‹yˇ´ćąÉJnßő“4b3ű2\YRŠa0#ŠŔ¬täěw„ľ{Ö!«Ëěd ™íjŕw›f ™‚ňlY“süĐ7ő©oÁ^BőŽzvk_T±°ű0yŰž#[ä ¨ŚQ d2§ÁŰ4‰†ýYMX[°§H×Kd&; $ 5 +ąóľčLĄăěÄp:_]Ęyo‡®×{+wďJ ¶ĺŘײ˙ÜŻČĺßäľř›Ä|+ˇ°vgÎĄL#±1¬5+s&ŢVůłoO˝wŔăĘ8,FśŠ·jR +7$€$'M„z!ŢYM„ăPM&í˛ß˘ e`W†˙ö—č ŠŐ˝˘`°÷úMAoÄJŰ>°ŻCŢĚ LŕČí@2—Ĺ ’=ʡgŞSŮPtpróÓ—‰Ő•Gw–>“­§µaâŠxűµ÷«Yz°~Ôެw!)° ŠŇ4¤űvňfَEY»fa“dJ¨†a>ů0Ć©ĐQAµj133Ic*›±ŤYę6×/|‡á^§42 Ô¦čAţaY‚nXü1›]ă‹\é•­q`CĹ_8Ŕţi¤’Áqă}ČŁÔwˇŘ›…Ŕ^ŇK¤»%r’÷Hž\÷ćě.îűC–."1SWkă~+?FÚĘŠÖx˝ýŇ’„Ő‘^)Ćź’­7' +0ۙ֗nkhľR‚Mśö ŃuxÇüL¸bÜ ä§x #Î;˘‚R~Ôş'€ş"tŮ)Ú9îMáŮúĽ;˘ÜďLË_긗Šb\|‘¦ ž~ŘX+¤ô—¬5yAŚŃ´°#şIG¬ůűĚ^™´âő±Ô[pÜż·@µ/AxŘ'ď«Oú3§ÓÇ ÍŘ…¸îc‹©~IMl +ÍF-rľřŃ^Ĺq“Ř»·+´•Mo˛Q»9ĺ=HÖLäÄ&Ęx"FęUwIÝý6/âC »Â`3“Í2żĺ˝u庤t 1Ľż”Vp¶čĐTőŚĹ™bťď<)‚VB<‰G d9ä,¬Č-Čf/…E׸WućLůd‚ŘĄ†7#˘ÍtĺJ’ž_¤#‹A·:µ–tîYłę>«ÂSwćCůY 4¶2+@5pWlžřűĄÓ®ń”źI$FtŁ)“*5ŘżË%&a­…`«µÉ +Lżšir@F¨5áĎd&ďdWŚÂćT/p”’ýŐ^˛źs©Ź-^ćÇ-^›!ÁčfăĹÂÖŚÁÖe/‚"^Sđ‡:ć- +bä^\ŚJ VŔ˝…ŮŇ*)ś s 'Ă@Lö +A5řb3/=ŘńNĐQ’µ·†Źđëx·Ŕ´Ŕ×ĎH1äßŔtÜM®)Ő +Ë~ŔW +­ŢXu@&Qß-‹Ma÷‘ÄÉM3Ś ÁZÄENÝîgÂ2ş{´,‘úbĂ‘ŚŐš!¸ůő„ĎăČĺ#$…yźiהͥ_‘ú-üĎŽţÇM†)ÜÜ×`–[¸?8fPŹîĺ D?8z§q†^TĹO=BŮř±{ó{…µŔ •=ý­›űóm7 ËJěwň­Ä3Ă^ĎHŢ”¬ýÍĄÎź=tF.Ş}9ůÝmĆŇ=Ąě]óuNp <‘9ŁňEôĐ´‰8:`‚ÄBě˝zŰxÎ4 3ě"$Ë‘óď2 ;vÓTnj+üŮÉ·ÚĽňŁp“‰cX%ŰŃČŢŹűT¬ëxŇ\"q°ĺĚÄIŐ/ŃWâ±[`„Á‰ěi‰‰R6ËÓ]Ă,žŕ!S;KĽ€©Tüí¶zĎToČÍň@5Ůuźé6š-6ěŃL4µçŹQnkÚץŇł_şDdÍi… €‡máF»‚Ł a&">kAeĄ$ÎcZD9ď™ ±­ąěVDv‘4ÂWöL:ąů=ŢyGF’ęŐ)=ThŢ›<]< ¦~P<˝c y»ë€Šc6čgČö¸ôkf?˛!Öü@(bÜÔůR„ŤGŘ"–MB¨÷eç&¦˙‡ŞőŹl&ś˛5§B~(‡ĆęëÁĐb« ń5é&đ‡T_‰Q˙ŚÁÝôűnäHG¬ęÎ1• /sÎgŢÓş/ô«‚=ô×3XyßÝú8"ĐéhĂ‘—oĐk|®_Ó°{t ŐÜDÇ5ęN7ôŐšŻIŠźfsi‘ôi!†Úšˇ-Ä:ÖB ú\ń‚8PĘ2)7ń™AW¨ÉďŔ«Ö·x)ť }H3Đ(\®Šż%*ăŔ=Ý8î‹őË‹ÓŘzÚóŃä-¦íĐ#żAREű}`¸,‚nC™ŠC×Ňü?ÎĹnG–zŇCQ€!ŐěşAôSĎ™ŮhDKúďbâJ![‡ë„Š€J7˛“F+A٦z“˙ďq č©bŢۤ řî앆á'ě…çQ¦Áë–Ľá0#ČŢű˛cÄ ¬żŐ *„uÉ0Í™=fXq[ŘĂÂĆRřüâR´·ŕŚĐ€RăŃÓBMĎ7%Ö vŕŇ c/ fIĹ72§a/šď5÷8z§pôŢ/ŕ<®dÂCÜy6tŻ•R›N[łÇ^ŠÝ! ¦_2ăg‰P¬őűˇĆźŮ4ˇÍű‡›É‡¦äę–;Aw>1Ô2ů-ŁjLËô°iŠ÷>@zŚýý˝C2?ŞŞ.¤ŐaHRP-éb˘‘z­Qśšąl’*t™B‘b˝ň-…¨éhë°Ôd<}” *µ/Ęęż«ŰŔ§Ąĺ[Na©\ł~äSű™5*zyEÍ’„ĹeqDĎź:Ś›‹vż®‰”qŔ`·(_Ľ×ř˙ú(‚˙'Ě…ţňŁý[Ľzâźě?ß»ćG»@x5p/Á [°›ą ś7yw[&iß»‰ř癨žÁ ř\¬š»aDz"v¤ďеšÍI*Mž}O÷y 1™j€Íٶ†%źÇ|iübI¸ľvŃxb-…ČöŇÝDYjÁlCł/Ěghęô Đ«P,şşWOÍ“µ#Z<„,\¦P)ÓšN{% ®5soÄć Á{?żžÔę +QöC¬Ĺ4ě;>=©‰D÷íČgLÖ›µ/>s‰í ČQŽ>Ł~ÉŚ[cáßŰ +·GyÂźQ¬źˇNö†lq¸"ľ‚ŮÖC•ۆuáđh{ ĂvŤ:Ź…ů˛ÇŚL"Ç_N¦ ďĂ\1Y‡–?!)'ăK¨ôŁ +¨4HO…ㇾNC ď†˛Ř*˝Ýáâáâęh¨py •$•uć<1™cPćçĎ+]°b§¨Ô +IQÔů˛¤S&ÜK˝ÁŐŁ¤{â0 +łcD3^­Ĺlś# ‘q/CSúŁFËc.óŃšcĹ(P·÷ćrOđĐý©xRT**ٱŕíč BĹůü\Őćá[Yľż”@‹ ô $›IWđ…=:řBŘIP8ÔŚi„ź¸Ix«śLő͢Qx1_[@ŃýnŘŻźBń/­ćbvëUâdę†Hɤ?°Üµ Ť™€¨sjćQ‘*úYŽ€CĎŻ'÷cÔUr¶ôůyúbńúŃZŹés“•YC¬ŹŚ8Cuµ«Ńđ¨Z1ľžĎ +P^Ç 0>w$ŻČ5ä#ŁÍÂ.ÓâX8KŐ¤VĚ{ŕ¤űС…­f ň{)ş ë 3Í~j ”ęUMU’•÷=ßëę&Źű‹W„™ÂČkOńEęr§Ł"Š\"ĺýĘʱ…](ë¬ĺmt+±[Ą´wSΑŞröçk\¸6Â)䀨"’y,ŇŠçÎTTCä9Đ[­…ľż6ĽDxŇ1Ph?1`˛ďŚw,ްëYÄnţGFŘĎý1 XłËłßźęIJ¦XhĘ÷¨.Lc$k@!.{ă…ěh_Qˇ×«‰1Ěl¶[„‚Y)ŕH*.§¸@ ¨s—/`ŘĂtËF‚aXuč’Ô5ŰfGŕçčOˇÖ’@(‰xé#©ç ń§¶#V„Ó:jdI´S:ţ +µ{Ŕ€%ĺ:Nzšl:.ŕ·ŹŔ5!ň{ŹËöS7ço©ĺ­›änYvk ŐUa„’Áü‡LĘáĘĺˇřÝu•;aBú˘Ş-ŁŤní°Pu ‡? +źľłí–,„\C6}÷h@\éTÚµi Š©Š=PUŻWţ©źÔŮ5R]2Zĺ…2)·6bć˝Ě¨Ŕ@Ş˛Ř"´hŹľôŃmfŢą\î dŐůň-X1kľš+ŘGv;Ű\Éđ$ä…Ö١TIZČĐĐ;p…Păľ°2ú—ʼn*‹S“EEö@1‚Č}÷N6pU˛AioáĄŮž1îř÷Äóhý?­ýTŃ÷"p\ůyń hĺUg¬ďă5¦~ć5î4đ~EÍÍľőřÍť›•'ŠĽęďÝd[¦p"62ňďŔ-I2>ěţ»]ɨF[ +9©q|±ĐäTƲ‚yŔŔąT· RĆ|ÎB^dŹĘ¬ę Đ!$+tgńĂkÜ2ą·ĐŤ—ĽyűLKŃŃ.±ż¨a˛Ňxť ­>ş Áz$6ztNę„ŕĐ-Ç™ăřEłymx}Ś›,Đő>CzE·3üÚáU—)ëPłÎGŠ=Jŕú)bqŰŐBÜ·˝Ťë»5¬÷¨qőëyĂß»Mg‹Á­šçţĂă¶UéyT`GT`ŻŰ*AőÖž-$|t8ÓÖqřAî\´ÔÇq(§ščä +†µ Ő‘>Ŕá5J†‰¨ŹnšC‘Îű—P!LałTB8ZîP»ÍRÍáő[ ±ĎGŔIáŽ.¨Yđ'şv Ž7˘@›™‹(ň"­ů1JH1ž„E PF»©H{âĹ©ŘzĚ0Ě }4ÔŔîDĽŤŚűbČ·…â% âóŔEvŔ,hV+-¬*ň‘?? ÓŤVÂŞŹ‡¤ňŢ|fĹťćp1§¦á©—_×Č4ůáŞëĆG©ő^${Ć‘>ńŔ 28p¸-÷ŮŔ-'dN9Cz\Şáő3ř˝3Ąq¦¬ßřRú'AYś vĂn¨÷qdT«I ŽXdóQfěˇCÚ¶n]ĆíŞŚd‘ +8©ué ŢPWXMĂľ5ŹťlŰL¦˘jWCăÇźťţú[v“ß­ŢlEľmą°ŠkCŻ!lVڤň©” J!¦¶5Ž3Żgţů·Ű9Ď™yťV:Z‘Fq/;#»¨”,Ç3ôV x†¬C‰oĚЎWN‰űĢŔa,‰ŇT8)Żľf7˛,Ŧvö7Ë‹y ¤[č"íBŠ#¬ˇrg#ߌáTňýßkĄţt ‹ŕäĐvOŢćT*gĺ,î)wĐ80ď›čĎr°™YuąsM(Ç­°dŽĘ+Ŕž:·iŞđ#Ôs®Ó°ŽÝjŤÄJĎŹż#­Ú«w'ć «Ě~­11+.±4—ިĺ®ô½ďä§áޤż¶‚Ć0ÇÖž#<Đíş6Ů ˛·Z×7=Ék—ŐúxÄ|Ó+Éd â^…N逧ĎÜÝ'ÄqŚšrď ÷ă›óĚŽżh]jĺ° Ş TęŐĆ4[Ľ?ŘĎÇŢA¨Ę +ˇEĺBÉ­ć·ÎdAµŕĆ#aJeÓ=Ůě(«YŐ{—µpîË_Ź×ÂŢť§Ą€v°­iŁŢŠĹc*/ls÷EŢᏏoG&Ď5‚ÍfaU˙܆:SPoč_4Äă&ă~Đ)˘uxŻkÓŹ—´öReń—†ţÓ2ßwKúżZ)˙ëw\3© p$1;ä):Ą}˘‡őŮ?“˝qýćkř¶žíÂ>lŇ^!ŹŤÇWbż9±ÎÁq7Z(P>r‡UŹvd-2ÂN7i˘ÍÍGĂ3’ r5Ź´$~ďFJM!ئá4!3äeů¦ťÚ˘8»ąÇĚ t—ťZHŢJ¤±^Ç]ËSrŰ2Ŕm öj°Xo02|üŢ·…č÷»ÖPxąÎbÚR,¦áűŰe´ĐLĹHăŃ™Çxö`J”đµ›ÁˇPŁctÇSUMpşnˇ€˘ljz†¨:NBpÎIJńkÍ«‚ĎlžgI×â ĄĆ硾,ÄÇŃΰŢ7ĎÍëże6ö%"ť [JěÁ‘!včŮPNĂ˝ďÇm磵ף Ą nüß'{ŠWC XŇ^Ť^ńÇÓČGŽÎ’9™7ä˝í[–!Ľ «”}fWűďŚo.Ů©‰V…ŘŃú"7¸‚ó«B‘xERmaµŢȆv3Fë9^čWOIŠ$,ŕňÇńŚ)PłŘ1‰Ú`ŐĽi9,äÝaşŐ»)ąŇ^ ÎH' +BQ\´áßškěë—Č‹$É +¤›¨w·Ş ÓCf-“’EŘÔ»¨/¦Wż–¬0nQá)”L7¸ŇĆdČkč˛Č1#ś'»DŢ{žmÝÁN=h’h’ZŰCýJ'ˇWa?TŮâ +Ţ~ó¤÷!°—ązűě"čJxިżĘ"§ü(S/¬÷ßNäźÝ ŞÂÝ“fŃ,łÝÔÝ«‡?Áy'ÓĽś˘ë9D×e\ĺC°Úá ´ÉŻ&[ől]Pđ#§ß-9@-,˘^'űˇ˝Ö6«ü¦XE˘¦¶`|°7e7xvŁéxq8#%¬g€ë‹ZŐĂţhř×{ż{üµ—ó|}óýˇ¤ Á}1+¨âˇ'ŠKâů·Ś,=ÁŕYÉ»ŰëQ~ÂjXŮ+߽ثŇkĚsAČËÎÓcFEVě1Os-¤Śě1žS#ÁÝMQ^y_IŢ5Ó f€ÉY;®Úíł´cđ@o)4»CˇějdŰÁ<ĚyÄ2!ßä‹SBĹΛY©˙±'Ř›ŰčÁG'|ť”“AÁş<ňł·ćţM!ýx{U>=°[cĺ;mG„jŕa%ÍvçĐo"m´UzżŤŘ^Źökă ‹¬_ĽÜĚ ·4‘–b#‰Ű÷ҧíË=Ô´ ^äŢҢ۪Ig«7|ua‰-±kĹÖ÷ +ZĹuâ3WëÝ}˙ÎhÇ‚˘ÓuĐAţM Ě7á +{LŚÜžkqĘőq~Ŕ4#&Űű§ćU”ęQ*śuźµZ=ňÄłľöŮăÜşs||aWp~¤q®Uۡ @s}öđ™<~o©Ćą°6BŹF·,Ň%5g^ÖéhRŞTrOk@ôk›Ä“¬âZŔúI©ĘűkrIyľfV‘´˛0QŽlÚŇ`¬„â±đµpg}Ϩ}ô¸Đšś_ЙѽdŢ%˘íő-¸" +*ěűS’A119Üz‘LČE„*÷ç ¤0;pnM™˛®­ĘŻ÷†ý©=‡qEÜSáPţÎăižęÇÁáH€PĹDŞINšřIůüěĐĹúh Dţ’ +o]ˇOXnČ/QX–ٰV"đZiýi8{¤ ;Ě=ôîV.ÁC†Ć8Ôa,óřQľDr=ÝżČ}ĆÚ<ŘŁŘŠŁüßÝg»ÂÄhËZ(‘•â ł$âüÍ­~ Cχz멲^˙~ /Óx^?p[Č‹€ˇMݍ |r+(iâ®ÉJ° +˘áŠčö÷LxoÝ/`ĂpĎu1Ő˙ „4ľXmŕź'ĎDĽe¦”ÍJ8†y˛“F”fÖG @%»ű+´ď¤vßµ7¤)éAPŰ´ZXˇ˘(bŞĘdŻĐx z lxďQÚţľ ±n\Îg¤›4=&"č×ó·š'KgŘ+—ű=­LŐČy‹CV_kća$GtÎéÚ”\çRĽož•<7âG"5WŽ9 µż=dPX‰ĄFźě˝’ôŔô~_†˙ëWüő'HQů!ÎTý '˙ë·¦güÍżűń˙ýĎ?yŇüă?ü§ß˙ţ˙ř›˙ř·˙ý×řĂďţĺź~ő·˙çW˙ăw˙ü»_˙áwżýŐţĆ9ĺ÷˙ëŻ˙áź~őóď˙ů˙ýę÷˙ëW˙ů·˙đ‡˙ň/ż˙ż˙ü~•×ëBţ-,®˙ć˙íXo?Ôbö‰ćÓx…ŤD–yç‡ô>{¶‡dÂ^¤ ްßY0&yĘóŰáę~8đóÖ&| öqń©ŠďącŤ•eÍ>QMűQHęŕ/żěn$dF¦Nť‹PţŁ=H]éĺIÖ­č|Üż,]güĄöKZŚ—ď7-‰)č„qJťâ’ě\ŮnîĐ'oX{űů]$tł®ěëB)~żo5iY´§SěŻÎÚÚjŃ7”^ČĂWps _‡jJó‡=HřŠ4{`^JDJ˘2„序j:>kňëke›§Ĺ·ö÷tĄT€ÝĂůŻiI3°2ĄFČťôXw´ŃJ ńŐ!ÓżďÄ)`ŕ‘¸wŹ + ŹÜwď˝/‚¸5(˙ŔĐŚm`kńXŮëŇMeťzßžX.ĘC1Ó€klÓ\KžĚ +€miíą‡řk?»WšűšŃ)Ýż‰gµmÉIďŔµćĂ/'Łłn }…”ëŢĹćË…I\aÎDš'3”‚’gAŁą…Ň~ö¸ŘŔ8AĆŢŰĽZz”é÷»1Ó p˘ŰŢ©ş19G7|žŕ(¶s qÚX|‘D0§hĄÚCśč~Zrlź3@€ˇ›†tđČ>-ŚĂ><ŕs:Ŕ¤§Ă ŕ%ŔóŮ= ÚŘăŢ2î@lÁl zíż˘€ N&SĐIÜtŔ đ&4ŰÇc/ľĎP,(cśäŞĘ˘í±B®˝ů>î=jc±yľD‚JőH‰T"’Ź;fŃ2éłGáđĹŽű•ţ¦[ Ď[‚ŔD<ă5ß#żŚp×Îű 'R!DřlŢÎO –YľůB@ şý.W×JÝĆP©X‘KN_OHÝłťD†Ś1ě°ôÜ$şq«Á*"ťL71Yę[Ťć `–ŠfÝ + ¨ĽĽX„"±=šŮ=ęş±Gt“fE*ú,ÝoB$›qÉŤ˛Îw9ÚQ˝“h6mď˙zćAn ĐĚW{JóÜšO9ujm˛ždĂT“ádĎp~XŐ›G6śhĂ-ń7=z¸]ď]řĎnH´ak ©€´PěĆ ťT™¨\hÎU•%chżI ™·g¤•°ŢbRŞů8ڱăë +Ź»Ú$\ĺÚRČăbs¬Á/4š'Ä đÝěÁ¸ŁÇމěÁłXŕč(É{"Ź…ěmzÎÔděŰ™#ljsEÜżÔ5GôĚÉ,B•Ü#6É%ůđ˙Ü«ňóóv5t*(.®©ĄMQ(¸ČýăÝ­%°Yh|CCá¬Če¸Żç@ŚRÂtâ®#‘ĎŚÄâ˙W9^‰%ŘeOA‡ÖĚ“^$_jÂ_ĐOM'‡˝pI+§C0Ý.2ţ —qŘkaů8U«=«€PŢÓCa«Zq{“µÚ3#+ŕć–8đ\#‘Ă#%Ç–C­#slo=â YÇgÔ!0+ťßH‚SIl9rč—ˇBIvąđśČ÷c€8UĄK­'S-'±ňDË—÷ŮnăńQ$§%:ř^_lłŽß5–HIu†ůSř;ˇ•Şhć^lohŤ´ž¬QOěVe'=dżĎŢf÷¸ ÖSČ%˘ŠO‡ +Q—®Ă˙Ě2D™!ď3u'ŹkŻ×Y{+?5Ś\QS6UǬ(ĄÂÎnťRÖ!JĚ%¤Hž2kĂH*OQĺT +©T0%1ĆmNń1»Â’S‘¤˝s ·…ϸEO´ô„HÜţ˝»X€ž`I—©fO®ë°BŻdŞ[>i‹±T—L„Ü?{ś_U‚·´O“d•}s ÎÍtAA3{-g8ÄŇúčŃ›z2ďŤ]qďőb‚*Ż6â‹ÄéČĂ1Ĺ×S f ż?çs\äbH+ &…Ő%r¶¨Ĺîq_ Š;X:ÄA”w¶ĽÁÚĘiĽ8M;ěÉÚ¤[_gˇrĆ.ŹÁ(E°rid+ÎRŠ/Şü Ă…+zˇĎ®©JL*c‘ČŠ+ÝKŮ=˝Ť;Ęb=Ô7ń?·é±ŠŽČĂđ +Rű!đ˝Ąáv-âXź¦ =Šö%?LTëJđ‡?ó eo\qyëŮ[ń:“’ľF¬łÍDíµţlśôÚ±t˝#0ă*wĘę"ąn.΀1U§nE8ŔjŲ›ŚöIŕ Čż—Ď%hůAéKű®˘—ˇŔŃž4w ń7=ä*폟 ˝2ŘÝk‰&uÍ…Î!v˘î~?Z¶˝Wś)źÓ$Łą{ŚŘą¨^YCŃ xŚIŁ‹űTăŽŔÜÄâé đQž§¸Đć)bĚĽaD€¸ČyE𨄠f¦ŹflWü.qlµŁRŁ1w+Ńt1&K8U«ˇ2©ČYˇ\Ňę ŘŚ%+Üäm=|‡*rźŠ\qî`~ RĎĘe–™ń6t+,V«”ű…÷ȢyŐőp(«öŞôZ +üeuR꥾ěq°š§‡Ąr{\±ú2_Ů ;ć8˘Áč•Hî_N”b…ÔO]Qösňë°\Ăz\Aüę/áż”}2$Y#Ş×Ŕ˛ś‰•z]YÔ‘ÁŢ.ç~T+䒛኶­-2ßôPţrľžĆ/[!¬"#[ϸÚO›Lčiđ2¸öގĐâŕš~tę|Evp$Öä˝GśČ-šnűş“}(iŠ·đhbiţP\ g×Tá· ”˛\슷ÍČu;5q }0h›ůÚUIźHłíě$÷KŠ[RÁ´3× +­hđŁZÖľ-+Izűč?Ş2 vd šëů8ĂKű±‚‡Ë]%ÇZć7=@W-űőůeý˛ĆNŰ{@Ë«WXec0ÝS śĄT7° xcő\đŚßŰă{<n°AÓĄ‚·˙ó@ř—í‚$™w¤Ŕaó±GŮR3uÇ„=t˘sMkXgy=ÖĂFşÎt´€#f»5Ć,xgŢj{řš“>a \ŽÖ832{wzXůD»D+=€sŇ?š×©,ˇRúŰߏn ątgŠ@ô(°Ö°Ăi +>Ö°hŮ=t—§‡ˇ*‚9őüަ¬ >ż +;6Ţ˝ śŕÔB.qO-ćI:%( WÔA j#ą?źgČí»u^ză”_v8'bCSżů6IvK-˘wvţÔ;¨R}×ă8Fí÷üáó~öBLílśřL²b!âÄ4±É~‡ż{¬Eú‹Éů­=΂“…+'$üúq ŠK¬™Č†–—Ú\IŽpń7=fT"Á;Íç±|t«D…) »âr/Y,—i®ĄťDŹ<ˇ=‰w4µ wdÚĘ&÷˝ÇóŽFF±ý÷Ţ{‘čÝv&ћЭćZú7łíÚďŹŰ®VźÔč{7\|)&öá\âܱéZ{!s“ßżuŕ0Ľ–ŠćÄŢzś›Ö%Ŕ9Ż:ˇ}¨’~ëLĺ\ś­źŤ›VŻŘŮ‚‚+”…ŇÍĆčĘŃ12i9úH  ­]‹ßGš +1ëG¨Čç¦Úi¶[xŇ\¤‡ ˙¦šÂkŃąäÇŃ ×§čX +HĹx4‹hÇÍűÖT +:NaŮއ=kŰ®ĂS¦GížÇ‚Ş#ö½ŰŁ]ÔrëĺCŁ€­@:qSSŽ J’ťđŢă¬jË2ńÍ~˝ľ=ĐuŢŞĚěVĂ.}©>uŽřě±ň!ć*[_í[·v”±jÓ“`‹Šňb‹ Ö…|X°‰ »sÔ^j ëĺĎŢ4Ŕ´>—g©nwH‡ÎîéFÓqµEŐ”(’ÝŁ)wĆ1bŰp.ͱ=•?˝_ŇÜëëŔ±D6U]ŢU$ěĘ$čc’©•r[3˛I¨Âp˝8oCKYŁé4­úmEKoň`p™9ĆŔ%=Ś]&Ŕş6€l­RdQÓ^ęr±7ú¦boUĹs*ŘOúŃ-‡O@€bŹF‰uâVÝ3Q°Ý?˙·ü4ĽĆńŽÝÇiđçkUeŚ’id.ĚŤ7tÔ÷OH±p)ňŔÔĽĚÎV”nWĺŇE´@9‹ˇg&3W,|Yj“ś~ÎĆín޶téö7ă*©Ö:>{üć©ÍQ"ť çőŮŤÜ<5î˝ŰëÍůĹňyEŮ?z|·Z~ö_H˛ęĂľaL%ÇÜř¸ďuAٰ†k‚^Ú źcgżÇŽţµhł ž\{Ô/#ŐŢ$ +Č’Fľş÷OĐHŃ6EsH;d@Ş˙âO‰3ź ™\r‰‹­­ŃłÄ Đk`äîś•Ź=Áěˇ0 ‘ ŞfőőŚ}źđ7şţ5’N)¦tÖÉAˇüţšfXč©ě»ë>%›&\¶Hţ‘ř Ăć-‹&ŘőäheYŁU \[•Ă׸čAjŤl’ë=ÇÍŻwŹ=LŘÚ#i(âÖô9{|şí‚ş„mcéżâ@5paôpÜě—®iĆŽÔ_7‹·{¶‡ţ6 ‡Śň¤÷qžş%X;şíVÔş‹˛ôćHaqCÁ#ăAŹÁ1Ď–§Ôća=Ő*Ł×ö Q €äJŃŃY۱0Y“ŹkďI©śĄS®#%ŻŔz›Ę…˙’ű_äAi­Šc+ýÇçDJÔĐ0t«ů©l' ަ1+H3hB ¦ź‘@¸ {eş©÷˙łö.»Ö,éuÝ«ś¦Ü)gÜ22›vÁ0аᎥA”h@€) +2EŔoďcFćţĎ^[<"P$býëŰ™kĺ%â»Ě lçŕ\żv#GĐć¶úyĚť)—9Q}´®áŞ·;Ůý> žqé!xI0»ÚFĹ’›Jyt˛˙u„K§/1»ÖŤÂ,Š ›óť¶Ö¦m,·üEZž›s(ŢDCë._bĄ$=T^bjű‰Í–EEĽ‰˘˝ü÷€+&#^ŐGĽÍőüaĘ$†g(ĐQ,ą ‹3s’Šd.OA»’ήC¤LSąď‡ü˘Ö÷ §Ŕ+Ď´ŠĘŔ˘kuGéx«©%Ç%’Ýöë*«˛eˇGŢĹčś(JŻĺ©sąÂ:˝}„ÁÚbB¬{" +;Š"×^8í 3]g ُ©Ŕ©„ĽňÎţuŞálW9“˛żQńď-~°ź!íY×D¸ř0FžuřńµÜ±<Ő˘áŞŢO adř×GtzĄ'€ÂÍś€ů1]°:;ŘŠ~N)Ţčaqë ŠPÄÓ¬" k>Ą §uíî4O!čwfçëAíů[G7+˘0ëö;©L;ź÷“¨•5ĹATž!7Ęť3áďĚ™ŕ +ŘĂďFŁl}0ěIňA5KŇw}ÝsČ‹eňć·h7ł®v$¶’´Ô¸6•ć/`<ÁŹnk«›/ś÷ůTVhRT6Kn+H'®:dÝĚś†ńÁĤd¸óýÝĐ?„L~ţŮyë…r EfX=˙Îâ?ŃśçĂ9ÓLŞnLh˛´Vą ţ|= @g`/Ň‘ą¤üĂ’SőýďűÎŃ—]{Ôúż˘%Óç± Ţ[­ ć 6&°źČˇ[wĐeîż<#ż ;Ż&5ń.ë8gň˙K7W§Y˝—48·©Ż$·4 jˇŹ?ąňëzĆ®I”łTkQ;"@äŃ +(h&ö}ŮáÇÝ; ěÚźł©p€qť_§Iv’íšo㦦Kő@–Ý—>XÍ«řľU t W˙Š ‡5‚"ąíëTöúŻ41űçn$Ŕáa…˙)>űÔłÚ@ÚőŕçiÍ,‹»}ěâ{B÷qr´_€©«ŕ»0ţą‘Ôˇâ#Âç ç9(ď›üv%ťµG4ĆţĆsă••`Eîľv«ÂpŃÚĘ+ÉnoŚÂ?#ţňŕíÜLd ěŕxÁ‰h*ř`Aí"š©L@ Ecd‘[{?RQĂ%aĘ r5m1€ś»•>zZéý§4ŰŤĚÓ|ţźaŚÜ×5ÂĚ›ńCčÁůSp1εŢYg»BÇ U„b€El‰•'caµ Cn¸Bľ#ŠŮ:8ĆZ,"UŃ5č-…«>V3ÂĄMŔöË©˛˘]Öv“eÖ'X#Xo/,€€'âYd`¤ŔňTTß|Ş8#®Č1ŻˇĂşô|\-Z3 ©HH%+í*–=3Ó€ ‘ĐÚ…źé?X!Ă;¤ţQĺ5‚­^ËâűŁ>Âz‰ŕWňťËől`ă;0üuďyeé†řŃŻćJDüĺɦ°=¶VZëĺŞÎŁŘµK ­ěZŃ?tţ±rާúÇ%Ŕ_l”…ˇ@ćő. Ž@˙Ť3ç˝ţŤf2ąś ôʀݵćĚ-Ä÷ĂŔ¨=z©Đň5i»­u—˛UśŰCc×ń*—»çr·wnqoj|Ű©Ż‰š@±±Z¶ř#€/˛´š.Fx3<“ůŽ\†fY-ň°ß3eßĂ;Đ©¶KRe‡Ş‚€äG@ňtA ,-bFď\ćÁ˘?řě>ž­BÍëuÄ7VĚ™.ŤđbŐńĐ_ õ˘Ŕ]Ű\˙!ÝVŻ ÝßGËů3¬żH›—*<»·” +‘@;˘!şŢŻ +lRXŠř`)'„ŤďűŮë®6ëĹDą¨ýp Č̤ד…J°$€˝čfFgw]H–1nŻ0M¶§¨fŠ +p­]Č CŁ ůaűĚ\zy°ć[Ą‚Č—"ÎWd’ÍľO`˝|맇şsß SG ˙·26Á3Ń[SxNë[ě lŕ5#żN_k=ęřô}lhUw)}xWÍßGµ{ką€K0»˛0Ȧř9źgŕću%YŻ„ĚgX•ż^ĺęÜÚb…Y}f˝Ç5<,ĚÜĹü$tFřIëî%˘|!÷č–Aůⱹö§’xEÖ\’< n†–řă8†i$đ0Śp™B6ŁŞşľÎ4}6 đ›öç@|Ńý‡ŞŤRë¬/Q ˇľ‹Ř!nXďő[V±ťcŘÔ(3/Îť0Á>µ†]uT/ÝóŕPóło°Ŕ—VŞÁúa'bă?DĐ`}xmź–ȇ4±ć°ďc"UČŤmÔ0ëĆÎvH™KĎĎ}ą˘ áií.?čÜLÄY•Ëć +Ů*ŞľW)Ť›x:„„úôŢ^|÷—Ń86¦N•¸ńö7Ď‚ ˛Â®ÍřŰĺ2&¶ÓTĺh­˘ť×C†Ae˝şHsýŃ‚pZ›(l‡_ZVż C¶ZóÎŕ4)'­—Ľň]ůž;&Šę=‰¤÷o ;V+#ŕtmfë„@ě®Do +]$µô>"ľďŐ;ăý†č‹ÔŠK•ŇĆn7ś)‰ËW—· ‘ć#`˛k‘,zÜ’ťvžŰ‚Y™L=útńöF~EŻDC r\€EkNŞDKóˇńˇăíĘ•|˘z®śäQîŚbv9™P‘ çzCpÂüÁĚąU§«°ZŢV*µP˙űgJŽ|ý…LŢ  ÉXZ&łaĐ0öi?đN8Í +á%AŕĆ{i%côŮż˙űÄô4?ô…¬ôńçŰ”Žd›,Ćd_OÄHů“Ď6cŤ×áí€Ď(ŤÖ/Pp—Ú»3⢠Âwţ|iv!áČn‰ Y{& +C\0şfźAW_2Aś®4KzŤąÇ•Á6€;˙XřBŚjÁŹT}©óż§Č«ÇËKŮ’EĘéţ`MŔÂh<äŞ ĘĄ©Ź_NŐn§CHiî°!ç@x Ń|´ź?ý`0Šćq®wÉjýÚDĎPÔBšf•MS>/Ézv'ą€ ­ŕimůQä[آlµÍÍŁ?^Ť nÖV"xc`§éä6ç 6 Ôz”hß#Ǹ¤?ŃÄR÷¬í@öň +{^—e©„ L:d7źń%¶"ě'Š-lŻhť3Qż6śiýcţUČÚú’Čă1ţ€—ĺ "Ó¤¤4©Ţ—8Öô“őĘ +dUöďéń÷~¤×H`fAq„Ŕ,]\>Xż™ŻŤjí/łiéę|Ęś¤“Ęł_«€E"l»Uw#D’×±#3s†7˙ő›:nÚřk}ű.OY  ·s˘»VÂDµ54Uá PîÎp…׫5ß +ź1< ]Ćđśym¦©č€#ÎëđÁ‘} âw +řćŹ2—‚«ŽuqŘÄđş~ńcf %Lą7g6x¬÷Ů©úÄ‚—.j“E:¶ăqYZ”OX˛ňśžĹ =OĘ|óşU$„ł…´/ţÉüŇĘf€N–Ś^mČ|g¬«¤áŻ_ UkýŻ‹+3’RIý„ß_xX×»Ë΢{Hţ{ +]ÂlŻŤld†?@zLÁWŘ!Îd˝…WÎŞ¸c¦÷ĺŽ"`A'Ĺ.Ř„Ű+´Šß–3Qu!oT]˛É™čMí`b‚v9aYÉŠ¸ľÎtű –ćôžK“eţĐ" ´Ý&’š đ›ýM+—ëč&sűM,Öíwȉ BčžLř^Ŕ¸ +ë6~×;ĆŰŞ<ú˛E§Ëđ:Ă_ÚŢö° ×/´7 śN­=Ó˛HĄőeŹ‹ĆÖ“?Ě#;ŕ\M«ě˘‚«žŠÇ©ŘMCżCUúum›żÁNŐ‘™Fwfs. ‡c›_Pđ¶yϧmuť1Ę;„ćé\!HŻ‹%Ą]ŁÁÓ HnƉž–śď Q5d7Öc[žU™ićďk,—"8ś2íc4MŁG€Ń04X§çDúo¨ľ‚! L*·ş«§Q4牢;âj~‹;C|üÜP§¨ěŽő¶˛%bť«äLţŘ?^I|8Kd.§{赿‚Ýâ‚jÓJIĎ8†ÁŔA[‹ËO÷ś–5†g‰+‚1Á¬)¤žNp ;öëÄĐ’÷¤ѱˇ_|řŕÓŐđ˛&Ńm=Ë#Içúš×ńX.®§çO`Rŕ¨pűÜ‚ +°0pBô8cpŠ‘UÍťé׉g˝¦ŻJ +Ôg<Ń‹Lq4ćÁ-čđ˘*™Rß™’Aém±wďLĘ­–\‹¦™‡QŕŽÁ•Šć_NëľňĹźĄ­ĐőY[óżŢ˘7°Ůb*S÷»€„!r=‚34Ŕ{ć»H*QHú*lB"sZ‰fŕ´#–2"Čéň‚BiFŠ?m4Mj>Ą˝†N‰é­FĚ'Jđ%îbţşžĚ)« ŹÚL×™­9»d—5č{Şě’ëN71Ń{ĘŮ‘uűTÁdHB!›·KÍ©Ätđx©®áŇó ź(qĂnaS°dO€čëa7¨»#N?-ť)Vşpë@ö"ÁĂt^ř-2ozÁ›ńÍ뎌éńĽ$…ń°5Ř^(ŕ–äŰbVxÖîş.9šäąl.0eÔU¨¤~÷'clĂvűV7 č‰bcćGá%ČŰsë !?›YĹ0— +"Ŕ]=AGŹpyhć?ë„]3gĐ­ÂWěźjÄüŠÓf€0đĐ{ćµ|s"ôŕęth^ ő™ÍçUËyAčqmÝ©!eŃ«źĚvmqQMęŮSűíŹ_“?˙ŐßPZ[@mhm QŇßě·”mt¤ţá c€@Xç0‰ë•;˛J* t˘µéŔ-ŻäpŚVB„+¨o Šęô—o~ȕů8ódÂhiä@9¬E–6RŇY`íQ€ŕË vmW7ęviŻMśÎşµäZ4čK¶$Ă&„ EÜ,¨UĚžş~’ß3 +zőyż§Z×ô´±H+1sµÉÄĽ,“bćt•Đ˝Â:ąypńTô.щ»î-Ş)!ő…šBV LZ, i=R«20ôę¤ßŠÝč˝# áČD†Ń*†ő÷ĺżX.9x˝U"$ąÜe:ƧĚŰRöx€»n…E9úPŕî¤×eĎ úˇŠÎůIFÖJ°â6ăL1Í"G1 ˇŮ5%uhOĚ̉çţiEŮÓ•e˝pLä·Q%‚ż`Ç˝ęýFąN°Ă9ŤăL!kbSőO5J3‹<ô€¬Tl˛DďŠ zW á™úĎÓ×  +^φÜe˙úMň8®Ć‹űšA‰вžĎ©7 §iá2 +‘Ş€ľË*‘{e¨Fnď$úë4 ýúŰńđꛍ’H‘¸$`ťx'iéßúU%šČŕ€ŇNgŚÖŹdÎ=ÝĄU/j€#rŕëüő‘xZ9 X¦:·Î%ŮŻ“¬ť:yąwćőßϦ,ĐLzą~ěŮżDVJ€ă.QŔb„j^„Š &(|™Ŕ×s?gđ*ÚчW˛~ ç­?.›ŰmÖf wĽ"áÔŘÂkěLrI°2a®»üô†Đ?ÔňŃ‚^N?ŠćáĄ&ů&iΖażŹŻŰă¬Í2%Ş˛óń ÷ôniöa0B4yôßßNK—Żpp%ˇ…FÔ´nń[Á<ëjĺxĐ@úgIĘąDäŔÉ‘ĺß/«>ę¦gźż­ą»jŘ8ÔW‘TtëZ]”ütłřĂTçŻ_Ń fůrő˝ŰüH%ť+™Iz…uÜ@ěˇWLtcĂś +š‡í©Ü>o"†EQęw…”âţâdÂR՝أp«Ź/m͆ 6fFÎţ‹ä(<ŠwvÄL –ͧ§Çň<µ"b=ťÜŞ˛›#@Wę+‹2oO„)»Ńân=GNEîMOeľ /ćúÎGIo[łFM3‹ľ”ÂčÇłĘ4L˛ě~9ĺ«NKÎö:ŮSç‹#3Ý_©K§L8NýŤú(´‰ÔjŽQč<ła”ôVťLŰćTjVĆż9`~EŠčÁ–'5Ť,»ęGôŞ}îô`\Ŕt@&eRĂ˙˘ă¤ Ů +łb$LťJ‘Z€ĐŽtŰe߇ˇ„ČĚÉ ‹ŢÎsČdEĂ{Ű4Lî‡FĹËó0KHSÁrGŰőĹą-qFp)łDJŕ‰°x^Ź ¬Ź+eW}ĎDc“,«hK?#;Ź d™¦jśM$Żi"ˇŚÍ—ĚMÓ¤ç;XÇ,;_âĎzzťtÜŁ”§ĺčĘoîEÓ0 +Ň18Ĺ.qL2µłÍ˘8Đ&´ľ"ߣ‹·Ź˙h>ńzxSέîpÄł’oŕpa™ ł‡ĎtOm~#Cž/¶Ŕp¤Ňű{ćƤÂܱ§Ć?Ž0÷1G6ÇÖ@ăT}ŁvEż§A…áTÇąŮIÓÎöĐ/ŕ™ľŐâ§c‰Ŕ Ćt±¸˙zňŤJW®_SHrÝĺŢzU¬”ëŞM3¬Z2đëÚű0Ź r^T3»·ÎĐRó¶ĹMAlaß@§Q­"ś}s©YYa(×@ǧţR&Ç!h»‰3XŮ6]S@Ú±V14ŔťÜLAnď*rGgđşÖ«úËas÷mŇ`®Ż†°ÉWç9ÓdđV~íÜů_ x˝ÚV!Gg¶X‘ůĽÓh¨‘Nč‰.hć4©Čü«` \Mu>ĄµZ;(\ű"q_ôC€˝ýxăř)µ!mi"‚ i +-Ż`|‰^?QęB„ŤPŰý€‡ZŤµ(ŤgđF¤,ť"l–Őkđ"/¸nqýD(ô†o¦Ă/Ôą:NP†h9Ó‘o{˝•>bů˘öy6Í€ąˇź‚Ń$%Ăťţ*t\Ý«ť˘٦&őĂâő|ĄÄ‹-k[N÷Ö7’Ť(˝Źş[)4•á×cże§NŁë +´cä‡ÜÝ ďŘźäÔŐľä6ĎLp™ÂťřŤ’5¬ż%g p:bşČ¦×˘R’WÔ QŘ©”ť…¸¬™ńđO7 _‰w{wHÂФ>ĐgďQ`Ô"b…Y”Qá ‹ +)ˇĘ•d?@°—n߬»÷ĆB ŘÇŘiĚ@hôëLZÇ(łV*IÓüB´{ `‚Ëľ˝ˇ«÷‰¨Ý5ÜÂU8‘ýë‰xo€B[“Gç—˝îđDHK¦j!‡CĺáI„u„T0Ď#Ť–[ÁěřŮ_G#]ĹŕËŚčVÓ‘N?8ą?ÇV–îËĚ|Mdúµ®±‹ĺ©ch}?g6´EwŤŤS÷tÝÚ[tľ˘wëSŚLěč#l2V-§– Çqʉŕřa%ŽÚ#»†÷hB¸n‹ke•é®Ç2…&€2‹[šíĘ ˛É˝âů>QŘ »µ!§ż×ŃňŞC]Đ÷Pĺ˘~5CÆ|xnꆖ®G7-´ŘGŇ`+ön˛JŻkSě*śé=¬*[逝şďÄ‘g”M¨tVć|ŁĄŁ9f °X}S×ŐC“ŠUsŇ›>ş;µN“ |Nw¨ăCE_Íż´ß(y2gˇ ć]c¬×Ф8ŇÔt7GPS͆řs˛!¤ĺÄ)Iâ{”ń‘ÝÔĄ‡´FĹHď•wV čCúNýóÓ9”n7–u[Jpĺît[Ů,í)Ymm‘(Üúdłí»‚Zŕ9ÜDâC)]w Ó“|ĺĂŘWdó} 3Č$‚Ƶ˘DuGȤYßSü24¸8î_NE~˘©ž‘­FÁ0ő•űĆ},Q˙”¦@'`‚|™Ía©Šëpć۲Iť‰Î?c·)âéĐ+ÇčWĽ-öĎ7‚ +,NEç™yÓĄ‹KŤ„¶XëĂŮéóL5=j(«†˘ĆhS‘Á±·âz"›Ń†{Cµ~Ěx‹Ą®jMŚ;˘p˛I†¤E- +5ó›%ĂxĄ†•EÎŹÜ4‚[ĺU„ébFíaÜÚ+\Žů)ú_ÎŻ›˙Ń}µ Ng_HY禤|ÎSó‰, Ę,E˛ŰťÄ*p’}‡ +Ý}ç«x6˝HOfŚ0TfÁ&'B4—±–O|:UůeÝÚą}ş{ä¶°kËZ¦yĽFJČżY*Řü¸Úe×|3ó_űĐ;fj´´±¦±Ia6ĆĂ+ŢZ‘‰A ÄuĆÔ6ănÄIpěÉ gÓ0b˝ú@¤žXжo}Ú±»lŰ^rüÝ=pÚnçUزpôN[ýhŢT®çŤWKĽŤ2e´}Ľj_ĽôÎ'[Ç›€użâJ\•>őJ€×Řťbäîž3±\;˙¨Ŕë >u´Î§ŚÖi~Đä‹^4RFßţłÂ'•˙îĎ"=PkĽ !,HŕÖńjűŕŚ‰AŐc¸f.ŻV?„E®ßµá§kE)EôjŤPűTčÇW¤¤+¬űŐ«Ů!L™ODvČ’1dN“ťaMBĂŕąţSčöłNhîE7ÂŽĎoş)fD‚d|=űÖbá2ń›®‘ôśú ‘E(©¸Ö*”SđŐH&­+#\ â[ř«•őĹ^-+8+RÝĆîÜ‚ĂR!KĘ56ó‚‡eă/W=ř*ŕ›Yl‡Ăʰř|oϢżŽŮ#ŻřJ\xY¨~¦‚JÎ_.ôr€B1PSQÁ•’ŘęYqŹ-žúµs¬mĂž´={nîÚI/…mŚč;â"Ôľ¦|ÎO‡WŃťśëmŮĚŤş\Qµ×ćłź›ĎNV5YŞÚZ‘ô, +,DDRőÎjlŁłÖú)ŕyDTÂ'ĹŽÜ<Ł?Ň€IX?S€˙<ĚąŻc'^R×Üaü.ת#Äá_t´đ™®‘Ď™¶ +ń–ĎIëĚc_v]ÜJô0jű8CÄ/oć)é@čŢ-ç(î')›gëjaĹLnÄ™%“7[SqEM%k¸ńXhůô˘y[ÔCŹÁńŇTŮľ@?Ld<^¶B.ű'xC»› tŮ­®‘´g:w4đŞčČNÉŞîŇúwÝ `úYż˛,ěKl^»9ôôŽgXŢ +e_šŤmY!sűm‹ěü‚ąŻ˘ĺ‚Ť?e|úˇ¨ă/;ýĄß JˇéÉĆh Šeş$V‘ć)N9C˝j (úxyŁPY6 (™ĐíŔ„Nśm+.:ŃfqćÓL{1NমG{XKĽ«ăëxa†m9­™<ŕCäĄr1ś2’ĎD(¬6h4"öw2éh.ÝŻÎ),6\¤ëhĄŚČĹ©ę ÷N ĹŃţhŞ1[„Żâ‹ę?Dsž%¬ă©HaMü +ŇLĂ&M?ůCzKÍCoás–ňĂšsk´A•iep†ćÁ +ŹUĽ:'ŃmŐHí%c@gVaý\kc¶ůµŕŞ2…í7xtSÖqÖB-ČmXěćĚ® { 9µżB˙7żäk| ÎGĽífîp˙„‘"ÝĹ®:ŕfÝÔi˝QvŇúUXs„˝ň ]nqvz^’Ż>uT˙ć+Ťrd±|5˙^ +lĄ€IĄ®0˘:#drQŃ`6FD$ý""9śČŻ/ 1IŰ٢Ԥ¸ąrj´J]ôFš\"<‰N@m×–ô`lŤ¤GŤŕ»¬Í°Ţµžú” źÄö+ĄAÝčÂŇT [Ż.ÜÔJζu"Đ?!ÂzĂŤqNu‡qj»3Aë’Ѹ9-#ŕ†µ`\ +pYETčR# +¨ +7P· bŢf‘~ʧ +ëz3m1÷¤ż ü˙|±î;âr.eˇD)(nŞ?+ s¤Ąť"Îź±VSy3źYĽ§tÇo6§_§ňW­Sˇ9¬_ęi +¶:ůXM‹1új—4fi@řŞ/}Âđ/čTşg† +šţĎĎcNÉú™č­J‘×µj˝ţ˘Ýíšp ŽČZÔÄ­U—[™\tĆ00ýŘ_Č S‘¶Ĺ0,a…D¦’ľDîÜ­ťž™Ü^ęłč‰0´AśxŘ+C@·h¬Vk:*{ŹŻ3#éxňěŽć:“^q{‡Ýßٱ„A.Qł¦'­şl^Ă-˘Ů$@€>[G}E2PDŹ2}Ĺ' ˝ďěyRńň¶Ží#€ú–đŐiÁ±â Pݱ¦DÖ7ë× Ć@*WąbZ„ŹÄŔZóT]5^š.<+B~)ű+ĆÝ4t‰8^OÚŠĚd2 HXü äź GąX|SŢ:P9´Ť¸ňÔ|@Źćkí¤l§«Â˛8kĘ!ŮŻŢ+P‹h„Bµ–Ăp›”§f>5ďĺ/­{䀲HAÖ9S†MżyX` BâŤÍŰňŘą’ń˝R­}Űc¬ô Ý"\Nü,í>Č^đ +ÔÓÖăI^ĂcŠÁŕ'eg„D 7‹1#­¤ţ!=–xźg&Śĺް•\üM˘Oú6E|şßĄ0ş¸‘€Ë_3ŐYö´Ç·G^拤aĂz‘€š=č™ćŔ`Ř—Ô>? "őŞfĚ$®čń+bčť›VA]Ĺ-mb žgöZ‚’KŞuOWüű]8`m¨$–ń®űo/Ő«• Éód×O¶iA…Îćů%«ĹĄ‘SíčΤZ)ÍuÝ[ŘĽ)Š\*NłMŰ™Ěí.}î]â ‰í˙ 5*9řT“šś ¤ůÔţ†L•„´őóa8sµ7Ű[&6Tvˇé®çŇÉ Rh«~G#=y1ą +RĄ= +&hÇáŤ7CťˇĐćŐN† Ň˙ýSôĘt4ĘZîÍÜаJr–Á<9P’”xwŢü)ćěGłˇlő|ńyxeŔݧđĐĂmF0v łŠ.©ŻHÚÄţ·"­Ťě.&Ą×N}O;nHm·ĐĆÇú†Ç+r˘í0›$’Ý9ŔĄDW±ďŘÉwzşĎ"WÖĘŢÉYő÷şU/AE<2ۦpťč!Ä€_·Ótß¶iVN„[÷ •ć©T2eŢ(±ý€}đaX˙­Ł=ę˙ő×˙ň;)cË˙÷ßý]ţ­üN\@2b˝U´žşČѧő±nÔq”m1)ŃŐëÄăč3JŞˇ«÷©L”4,üŔ±izç˝k(@żOő7ô+%łç¶é]ÁŞˇÚQLÄłjE5s®Ű‡<Ť[÷ě_v °‰ňeÂC|ŘÄŽ¬§&úd´Ó)¦6ŃTcB lčŚtňHŹsÄCĂc´#3éÂŐżNĺc…•óŢ*ÍşzT†AxK?UĽźÚ˝ˇ4…SuđÁF¨>7Éĺjt c0„ëÓ»O—mťyFŁ ‡)WôËW-$dTkrjÂË\*ZdRě–TäÓłťŹ|2ŮŁe牭| ~$ĐᲸS)!EwŢąŰwŹ/d1\łj @6@™—÷sŞ14®^«Đ „!.lşŰ ú UQxźTťšó¬ťĎGe=+Ą Ix¸7N$CW© OóČ/J[¦Rd{}‡Q9QuČk_e6ěX?ĐXffŐ Bmq‚P&bč 3Y ĎŻ3DLNÄ™3äÇ 0Ś9bŐdąb`!dgŇqčů2â8çÖ!Y×»żŇ÷'ŰÖÉ,ů0±őŕŘ)ÄIěĎ-7±ňŤiX;VWěĄČ ËÖďá»}DäTWő \X”ű‡ăŘO%i/ČeŚBö +ÍgŔz’ x–2Ĺ{žoQtUČ:e‰ÜŐťüŕîźJŞć +jĆCűŞńx>Čq'Pµ} F×,Ďź!FŻ2LßXXĚÂl’­{…Z'*Nql×cM¸^,>EYhźX`ćá‚Őü=őČŔiéŚűKPb`ÂXçLˇ7€Ë]‰Úy@řĺ7Ř1D gî/2Pţ[aŕĺ×ÎĚęWőDTŮV愇P†ś bgz'…>1=ŕ§šiuĂÖNÚMg·5J®Ű»\őç<ő.ź´ľ_Q—ϰş…÷Á™Qú íys}Ť¦Ҷžt» í+QK®8ËŽh;âˇëŚÍüřôÄeťj}}3ő×€Ř:ËëvEĆ?>´źa„˘NDüđ·W.ć5­h”‚ŞO-;.ďŐ´˙'ăsŃ~»…BǤJÖŇ5¸ąÓ÷yA Ď®Şí3¶®óÁ36I»×.[–ŽŔVÉ8 ,¨1č ŇCŢnđˇˇ]ßť&ňűZń)˘ô=űű~Éků†”çßłĹCI8Î8üŘĘę±n ǵm¤ř23zUB® Ót¬Ut¸ůáH<őĺ‘k$9şĹ] i .z}nâ±’ĎÝŠŚćŔçßsJ{`há÷kwÚ'«TŹ#ČĄÄÂ^kŇ +.Ň›ú*Ϧň 33aL2Łáâ„Z»vŠĄ€Ń-ă·?NŐţ(em2zî˝`€` ›ü, : Ď Âo·•śą®c ŕA‹–Ô<ç=iNFeYś  ß– _äÁdj×#J|Ë Ź·ô¦LҤÇ’%¶L4™IÍ4Â9µ™Áćî Ú_ÖmĆ1Ó±XďܡnhŮr×$=§Ň÷„6âőpGŮ„ĆĎxîŚ#Ż–Ö¬eä->I0µ-/"9> ,ZQ# C=ÜS-;’˝ˇµÎ*WśgcňQËvěB*âŚ3Sg4kDucń>©ů·Ą¤†sÚ÷/v¸6ďyŻ > +cŐą÷ť+ňď1FA‰÷–ş=†ąä ]ŃŰK2âúB8ThcK¸ţVäë˱š§ |ÖŚcő?ąŁžëÖĚÜ´Č c8ÇĹN„* Ś%|#!‰,Ů# Ě}ŞôĆ$Î*ˇ_ĹĸĚImňs˙ýĄ !¦´‰@uš©»Dj¤Jús‹¶Ű+…ôeÂué…Îm'€¶s^ŤKE„~OŘ·üňüůŻţŢĘ–Q.¸ęř'.(Ň›}’"ĺ}=A ę ŮĐ&˛i˘úCŐµ€7÷˘`¤Z0R +Vł~Ą‡rn۲bvŮA i ľHT.˝ÚK°]çéTĂiŹlťěµ(ý†.{ß +ÖC<Ą5ôbîűµ_GűLfg`|b 6*-f0NçľU뽓Ą»‚dă}Dě˘ëÎxö ÷3ŚĘ©+SÂ-źáAËň/ŕëě‘F>¤Ń|şVcD‘‹ľÜłmÜ‘í8y±Áž Ë`q–XËątśŰ€Ó€CÂś*şE(%Íh0) KDyÉxvXáĂöĚq¶ţNëtëÁPˇť Évŕ}"°K}ŕSLJś dŃ˝Ů'żŚĺ…Uüpá`?LđăŃZě4­Pý {–>ąŻ!ŢăĐ ‹I!»?„UśřÚuéô®íŔS$vŹ•)`S‘‰Uç*»ĆÓ–n ŮČ~ř\Lż]ŰžńÓ˝řŰlÄ•6‚‹Ec¤÷H.UE5§~ěí=3źUÇKgţń—g$Qžśëřé@6zR,•|3N?‹ŔgŔ™ę ÔĂ‘Ôs†Ź0ŚĆr¬ĹŻ´\~Gděe¸ćpb§‰“:ô§řÚĽM‹l˙ď©z„"™NŢÎY ɲĽčĺ™ ,c˝Ą$ú»šU©°}D—+WeqĹKtvdÔµ_(Ź]Ě$ĘÜĚ÷‘0ĐĚ(ć—4©g´cÁ đsŘë@ść&Íy/yżO۵źZ“ű˘śJvÁ Ë¬m1ńü›ąţZ¬ëę*ý±éµk7Ç:éyľ‡Áźµs_˙aK~`ď*ZĘ>%T íS>˙}/pŹy9Ňň‚Ąż˙ą™ťźEĚŁKgpG¤q ’řK(ń3 3`ćAwśdŐç™˝9Ç%ź†{?”-GÍóŃ€¨ŹśăZż¬śďđęܦ®čäv«ú°S+ „ĺ§ÂY©-¸ă âĺW> Üż<)Ő˝™bHî— XV»Č #x2Ą^čią#Ýüđ©swqEő;Ô˝Żę|ĺŔ“eł+ľW!Ő~¦wA´ş®´uGX «ŔśoŁ5ń·wëałxç«;pFăOĺ–cü~ůGÂÄđ¸Ş#*őRGk ‡ü§9~QÇľąBŠÍşň÷>ÜŚŹďX˙ČŔ9ćžÚUMťó2Ą9—i6锥„|ľ7üÔâ ěá;(¨šţWŁÇĆÎY73:ŘdđńG)Ň_żš‚nĹügĄEnUµ»…–ÓÎÂŁ>€c&›<ş;h ŕŮš +dě·†a 7ńĐÍt‹Ň8 +‡Ţð”â["öʧäľZ{(3÷±Ą…0 Šbksű~Î’2˝†Ô39É—=“âż÷±u 1ýk[rŻćWëíëLdqWOžČ;ŕN.J±=˙€ä…ÁBΗD3@Xýđ1úŻÄ<9W´§Ą<Ł&n§|ź5®˘o(0L\§S]hE ůŰ•R"« †Ĺ™íj[Ä´1MHšáś!/F¤“!¬L˛cgđń ďđjIîÎlBĐ mňúz´Ź­0´h¦ D–+Ş*‹CćľÇžŠ÷l˝Gy"̦5ťŚpRî YżN…îa}#–1Âzż7o|¨C5B ąčąÉ“ÝÝ[‹˛  AŘWív ÓJűěqäo>»đ˙©[?“Ŕ8qľ ‡ĺ{"_ISÖó|>­·„Ív?Ä(š”htÁ–°íÉ÷ľtÁ®R9T3§`ÄI˙?˙śν´Ý¶^>ČlűočÚنОJ„Ň)<\((ÇőěČcÔŨnŁűˇEŕpy´|ćł3ńľńłGËAx>ROα9ř |ËEăGĆgD~Á‡ä÷0ś5Ú »21‡ćĘŃLąí.©&AÄ™mFőŞ{Ťoź’`69%q’§ťL#ÎÚ-Ĺ@ŠŃC+(HÂăwţ~Ëúç¤ńvyT¦zřĐŐŻD ceÍŽÉá(0ťă›Á@F—ţCD™tŐĂ„ů«Yńű0ýXfüXäB×íj˛*4ťÖu®,'U5Ąˇt’–Ś÷~DĽOXÄ>xÍ~ +c’>•G OŃ ś}^śa®ľĺ $§óroŢ׺,Żł]ŮXA:7Ě3u2€żWúwŽă+|„ůŤż`ńź/çđ8Ěk’Ä2źK†'ţ…Q0fOX<(JEDHĐ4˛˛:'’UD"hD䡦aÎ/)ÇNžÖW©Ż’›»Ř,ť®îúĐG`.â¨_š\10C+­ĽŃç~ŁĎö±oKŹK0đ¨I],Ją +R—]‚„ľ~U&V$çcęńQ$ĂóĘź}†!¬Ŕ +endstream endobj 30 0 obj <>stream +ý= +Y–Z[Ŕ€ÔZ:“'yAśáhj°H_fYŻg˙ŚŘ—Ť¤ĽŰlSâÁ:JGM­°WJKNË1Áµ‹ą’~Źx_Tˇ—`ĚÚ8šl2yZöĄÜ€<öź",łJś®Z~iËŢ!Ą2cËâѵIłeJJÝZ|ČqĺŢ;…ö­kŤ€CůZçĘř!b_żlxŔ<źzdOáx÷'ëGň0¶ç{>¨T›ĂńÓeśŢ+\LeU‹{(˙}Ň˙DWN·>¨đŞW®r1µźĆÁ䚼˘ZŻŚXŻĽ6aZ ŢŢ95Hĺ‘udł ŕLµç˙Îo$Ć˝©ŕgË:Y_eĘŤhĚ ĽULd”H§FM4·ě,™_O´$Şľ·ěsÔpŐŻÜĄ)ŮÍ/¤żń=Lą +“ΊđeQú\u44z©r(ÎB<ąźa]żSľ-–ŰT†ô ˛ Łş˙Íź‚ŕöú)ŃŐE‹PxNâőĄHZłÄó©ö|Ő1§żer»úiË€€-«ě:ÂQQUůŃńdל5‡OSن«ĎýßňD’Xď’׿ĂTěá…>…Ë©qzÓ«ôY©Í `8¦K´\¨‹ő‚_˛Óţü,ÉŹ#K ĎÝZ€¦[nC~mą«ö‹ýBÚ´7Tďn˛›/9Űďy§‚ú‚ăRĺőűÎńđŽ{S;őČÔŠlî ůđó†ů-ŠÝĄiď<fŃ…¨1$ć 9©´2Łâčóp¬ÜMÜćGÓ{ć§ýů„ěé„Ţ +ňú 'QuŮĘîřÎÂßżčÄéŽÓňÚ@¨ś_Ŕ†W6©×$ljá m(Ôîĺ09d˛™g şë1„ţA„úřç§íäBţýÓˇwč…á ŘÖB¦0B KkôÂi ^ŠřPrA™îŚ"P*ŻŐLŇEŘOÝź&ŰzČ&Ű ĹyGĚQ掉 ˇ•ň;Ľď·[G*ćşÖ›Ä}„Ä-ŮD_z˙=á–+5˙ŃüëΗ¬t8X®×ňńuˇĄsŐöóÎÝąĺď^Áé2ĐżěĄ*G¬*F’ő)·~`<·M9ę¬Ř”?*ŕ°¨Cę; +×z»xÚ„O[ŮuSěĎ9üĺíwřˇZŚ.śTv#Q`đëaE1 öôí…$ó•˝ëíţ˘–Ĺxď”úuÉ»Şş<ŕWĘ MŢW>BĂĎpť*ô¤}µ<×>=G•čG˝ŕýaů‹ ď +˛Î#"°5Së€?#0§„FĚçťôć©*ĚŻě[ŻÇ ©Těu=ú­ösc/W­­.ŽĆd°Ě‹Öň'ş=ěˇ×x=–ŽhA׺Ś_ą”ą]ŹHMĆ©IHÇc»űr“âĄV±»Öą1Żë{Ż^Ţ}eÉ»ź80 °a±Ű€ťŢ•gˇPÉlä٧ßveĽ‚é8„čĚŠŇŃs˘ą-ř(üĐmÓ zn>2đµ’ăGl…ň_ţ”GŹĄf@ +ÝC`ľŢdw¨ćZ×XVŔŔ@¬ĘEç™Ţ1pvŻę Ňâ©ĐĂMwçF¬śë^^"aęÉ@ÝŇ۰‘0€^Dt•NÍÇŚPq)Ă)ĎÔŚ®Id†N;äLu ( ő{?ö®ŇâFĺ†ĹG*F§!´őŰŠ¸Ôţü€ćťŐj­ĂŻÔĂ·°Ůq@¦ghŚ…„r>(xj´Óüď*Í©ŽÍ÷ŻĺĎ5”Żśă|hm…JjAĚ=[€BÇx6&ąâ+ë抯÷ś]¬™Oi +«6°ap˘.)Trŕ ˛úˇ|QqČH„şnD &BÄ(_ëTÉüffŇF”Ψv…Ż'<ĘSÎöaqćl„ ďőb•:ó[— ŻŰąĎ4Y|ŠśŔ“5¨70@ÍĽmZĺď>ŕ‘ő" ŕrżťFĂô“F4núě«fŢ!eĎč8YWŽ*És$±č(ö]Cb­«eűŚŘeEp}0_Qşţá@đPoĹ»ó†iÁÔUNĂş:u …ŃCś˘1J,ŢG(ą±5ˇI˘"ě đ –ői 'Ä€(©†µ´ +MäTŔ ŮMˇď(—ŢÔU¤0çţó† '}ÝłŁEUá&dw¬żďs›{ŃéŤ'Zô +ˇVĚ«·ąŽÖNcĎW0˘îb­jóĂúÖ‚ +˘hlhń%¬—†ýĺ!č"·ůޙϰ#˘Ô5Î{ÓÇĂwݧ +ÜÇ6MĆ,‚™żęRĐI@ĽnU˲őöă-żĎLůńHt&z‚ Î@Ď+­GL¨ŁçŚ»j öO_0ěwÁ˘ +iß_Üëäs˙ÄĎ•Ł”üý$M@Eá!uiB˛ŰţŔżÓ“„wčT€.˙{|¸[Â[QŽ:Ă^V­…‘4é nőlĎeŤBđ©-úOXéž*Čhľ¸Őoac[,°Ł@Ú{ŕęts¤Ŕ”s»Zđş“îjí3bź*](Qĺo:6a’Y­şÇ-0,R…bߥlž,²źîçC^~•=Jŕq„5í1VŤQÂŕ*üÍóŤî0ÚĚx»SĂô *:DŚůŕ79Ôâ]ĘřŚŔádĘęWţ×VÓďÂ.Ä;ÖP¨e(0ÔfM`ëfáU۵şe Ć1”{9©˘¤&˛ôŠqnj­ěwö왇B’uGĐďč ŁĘçŢ»»ŇßĂJ‰EGXCŃĚ+&†W^%8,uĹPiö¶Üč‹ÔwĚmý0bý0_UŐ-vM=7ÔÄĆX®ébU"ĘRŐndhßWú"±;¸ť1_E§~ŠKţřŹ"8*Ú% [ÖÓÂegđLÎH÷…a05UٶÝkgčłŐČčNŐ Ńď‡őŰ,[ Ł.6`L®p Q_®ęâK‰j> Zż.ú­ŕzéBëúń‚¦‚ˇřá ü†Bň!ă{R©\J ›x>@ŚŃ©ř-,iřů”4€Vî*b«îÄřějo3\˘‰¨ţ$‚Ű‹P®Ö©ˇĹ$°lőë +-ĄÍGÜůTó ”ŢĄŇ)ře-± +¨xĺŃđ­Z}ÜŔ~_ţC€ß_TUAZŕ_Čă7ÜżÓ đ˙űüço˙ćříßý_˙âIËo˙ă˙üŹ˙ř˙üöoţ§űüÝ?ýÓß˙—˙ô·˙ö˙ýŰ˙óď˙óß˙Ý?ýýřŰőű”?ţo÷˙Óßţů˙ó˙÷·˙ř˙í˙ňţă?ýŻ˙ĺ˙ëţţ-ďŻ/ňߣ…đżű°đ ›4Wµ{[hNqŘĚQ@ĐB¨bč řa‘đ\ż'ŚŽ[ź_VĹ"†ńůo +sĄŢÖď@˙뿡Ŕ€ž¶h&ę‹4>ŕŢ–y@ˇĘ\¶ěę¬öľ…)§BŤĽ"@"Ś.{Ć0z(‡ÇgÄxr]"Ř{4)#/ ůŞj÷b‚yď=4’ú‡gÝÂlĘm8ěő0‚9ź©04ĄŐWŘf5jbѲŠý6bĺqQň-ËŇÍ+Ë1ó¬c`ç°ç~NU\ţM•ňŞ]„Dőt[u;&âtŮF”ŕÚM±ą›b ˝‰čÝcĐĐŮg=RI R=c ˝Tëę!ş ˘ŕşN‹Ąâý) Ć:‘ÖëĘ*#·+ŇzăőŚ µZÖ󾩲Qk­$#ž š¬[;Ϋ>iS¶7©#đĽő©ŠrÄŁÔ\U%×〖z:Y˛+čŕŤDÂŞqm\ď4µ‡‘zÇ<Š^ú3°ź‚ÄçŇC‹<ž*04ˇ Ăű"a0ä\í>6’5 ţý=óÁĐ.ĹŮ™? Ź„ţŕD3Ś%Á6A°ŽéŞ„kŽĂîŹéŇpé˘U„ň´sg(xŢa< ¶Y0Ţ#%±‚_ŐŠ¸ šůŰŮzűúIâWĄ¬ŚĚĄbęŮž÷°ĹÂAe®ÚâűGx 6b,ĂŔ Ľű–1öC–GÚ‹Ű‚Ď >ÂzúőĚ7×ă§NM7bR$GŘ:bE˛"Öb„ÚZ:Ŕ:ľ3Pfŕ˙řł;ąĆúá3ű3ÖM¤jÓÉ,wś%éEí|ťtý”<ÍńŃAňŰ÷:ĎÜkĐŇĽ"H»’ߡ…†Ě<َćBU䎯S5 ¬h°Ź-µ¶yťń ¤˛´zmgĆHŔ=  +¨îęźÚčűäUűľ·ĺ{©č >‰®¤-ˇ¤?} Á›–ŢĚ.:góoha7 ˘ ťo9ŃqőĐu„%ŕűa,Öz7h¶łd.a TPrLö˙=âÇgů#Ś^\‰Î»¸la"ĹúAć<żd‚Ž•ȦŁ=]%Ë?çeiˇ°öË4ih#™u‡_´lÄź¨wş˝‹˘čźs%BˇáS:Ć€S,/ü€=a€˙ˇ‡D›NáâQ¨˘Ö<,™DMíJŐŠy^âcËdusĂ’T§űݿô2÷©Ĺ&äýŢ®av"˘¬vo? ±VČë9 ÂĐ™/Ůŕ —˛Á±IűŘ0s楻őfaŻG€­ +ŻU楠Ó6?#˛¤–ŘŠ“UťçO˘[/L˝ëô1”w_Âż.iŚZEÉb3!Ť`˙ň$Lˇ˝dĽJ:4NĂpRÚvî—Ç›” +)ĽÓ?ÎÍľňů-•Đě ¸Lˇ6Ť|8,mŽĎ8O­Ý[pË”ńÉE<`†°fćÄíĚű´đeËŃE ü€¸Ľ‡±Eö\™*ąNßšŘÎ^$g.MŘEŰ Ľ‚ Ä#Řł?ëhŰëč‘ S +öaÉsŞ; p/q >PĎƤoŻěCfS°Da ˘]á” hp;ALŔě§FUđs¦ď^ cKŔiĂWvXIS6]€Ł‚ĺNšŻ—óR ą=~ąËEžűô8űŔíÁ|}˝`§NtůúZmÝ­’Ŕş’^ńR@ľŞľFáťëĽ´ŢáőŤ8Ä´đɧç­ĺĽŰL=ńJk18[Hn©ëŤ•ßܬšç¶ŻxZň:Ş÷Ş4ě×ń±ü%Ş™SŃXŁ +¨4Ž(RŃ=ë +š +ÁŁG„Đҵ -ˇňE6$żCjznĘ&Ľ J2›ŕęŹ!™Žł¬\¬üľ#YZÝ/ôż+~_/9ěWµ˛–G°OYĆ’(fýÆˇłT‰sDÖŹa8Ł*đG‡Ç…P#¶Ć ł%–ńď&„Aŕ“ďđ)2µüyç⦺ yđśŃŕ=°F籍A2ľ".™#ăOw~€¶žśŕz&°¬¸EQĘŔĘÎ,Y\“ŮvĆjŁňç 7p +sŹŘUL z˛ťĘ*ţp xpCgĆËol¶emFŚť[‡h2—y„\'eüÍ›WÖ®4 —v2z'É6Ôö3ľĚ‚ř$´M¶VýŐ3ޤĄîżłűńďăcńi:öđ€KIyŘ)±×żO‘ł>:FŢâ<×b¶‰ź(źëQâď`_dů*‰WNeÚVńĆ+ětčÍÜč í‚zÔwr@FpÎŢíOŻk©k˝î®/Ś‚ńzÔ§ůŔ Wč"†úż"©#ŽËŤ/Gć:˝‘ŁFúŚŔ‚×É$©çTauĂř»˛ü§eŘx‚ăęšű±îÂWĆ"άűa•LBůŚŘż*θěÜą»ĎµžĹ—Ů–Ç)ÉČÖA;J{ŕîŢŰńńářST]¬»2mó mV%­†ó"ža1§iîY]Ł÷qcü@HúSQ=á~Ţr˝ë6(8×6İŠÓp» +5cWĐÓ™vďiěCv8ë붢ž–ł -ŃZćÚ¦Ţꑬ5gxŽj 8T µ<ĂĂŽŠÓKMŐ0Š7'Ń ˙ĐŠ§‰Ç„’tŃQASű[ű÷Ę$"§¬§Ş˙eĎÓQŞmĄ:R; đĆ©*}ó´Cy\UŰ!fĎţęŞÜÖł~kß™'WU± §j#§Íçă~"\ô*ú8øeĂX«6~×+ÜżŽĎ €żwZÇ· GÖk –HEh˛ŚŤĐ”$®ďů +ÖC‚9Ö‡DęŢ÷ĐvýźšŐIŮ"Ú]«MK1Ó+“U:‚‰‹3= Ńö˙—S¤Żjň68fČÝ˝ÓYčl\ö,ďÇ*XI@ł× +ŕ44“îH˙_ŰőqéE{(&rłÍ7ń?›Ł»"ÚąçŘŽł° +GľĽ>2D!"Ţ®c;‘ęq{'ÂÍü`čąçNáBÄU’ĂŮ7Ó-úő×%,'° G˘µŞ }¨•ÍW¸ńě$˘źjBcPŤĐ(ŕ@cu§—ČjQĘx©é”'h{5 R°”1€ŠpŘCM"ĚŚ;ą1×ŐFç@W &ĹŐŃSNŰ^Őwmó=ĂąůIHšöäp%íK«îŞćO-NŚyĂ*v«uM;·’aő¤Ďаk{ÉpŚĂVvE"Æe9¸ďże`vtfŐý·m©brđš +v¨˘±*żhű żśg[Ksâ]ŔrĹ\ă ›=lä  B”_"Y.– Qb=ćדĄäÎĽYfü´B|‰IÚhÂďî˘oz\Žz:?D€Ő®óënüţS­đťhy°f 'ý–‘kČZĚlć”-ň­xčo9QżäGŢ$¨Łµ—őüÖeb*Ř®‘HlŤ7@ŇČśÜ:O¦îEß®ýí—Ď-ŃčźÔrĄŽ¬újó#k^.|k"đýĐç{ÄéŇ(Š÷jMńy p|Öë1f,‡Öe˘0oĎ~F|ÇŔżŮďĂ”“ҵ€×çk}Âń÷9˘´(–‚ž-ĄoĂi¨7™‚ü>`—áwÜÖK©ĺÇa &t ˙(~µŤĺQJş9µů` M«›6ŕ|M©?ÂDŽůf­ePAľ‹ĄŽ2]_»°gťłrí3â}ćN›/ôhÎňĂF,A`žhDZ:*Y›Đ)›yľy+Y´í<â y4e cE’ÄĘĂKSLô>,5Dđ¦;QK@,ÖQi¦z_AŮ€Şx»µBżaŮfĽűžÉijŃ©ěJŚ—†Ž÷đ@HXP2a›žhSžÚD¬RŔ–ýŁ’PµHXíS '®<¨gq±v¦ëHŁd ÂźkY«¤%ΙŠ—ą9Ýľyí5÷ú°oÔF§üuמC Ôł$Ź?÷zw¤®~FqÂ2v˝‹Ď÷¨oXH‰öÎX˘®,ÔÉPţ(üNäpÖĎXÉíUżľ/×âĆ”ŞŹ-uý»Ü˘^÷|×îf˛řŇŚ™JvR”Żűň= b ëA˝Ď|ßۆŰĘEQőÝëięu]éCV/ ’+ő3â}GÓTDLąŽÄŽěy!ý Ś€+ôĂ?SzUIkř“ĽýŃďaÇ6µBMľŘókű!ŇVZqDęČËŤ˘ëČú‡ôĹľEě«vE*Ţyůç4 WŠť[ßiÚŘi?VÓůs»Ű? ęăÍ7ŞÄŞ{ ĘćÓ@lX«Ż` +„ +Hc÷ě®ňŘFXČk‡Yö12˙ejqťJş° KXŮéľŘX_źăíĘrCĚăs»‰Ů$¤ <iô:äjuyßfá ř’,…Rt3>uÜ—UŐ“Ű®ż?´&ĆţfâSLe&HƆнŽôQüě +—~Fě¤H %ɡźřĂđ0MR|ˇ]‚Vz7Q˙q•č+čj×ÚWvű-¬G|s`€~&M¦C3ĚbkÄqß,žß2ýµ×v#¬Żŕ?9é܉qkÂ$ T\R.4Ŕ’:eGWY„Âú€Ś˙~“5ukŰ×Ýř3š–čv٬«°óçĽČžyúg:ICź®};üńܴ鉠3ł"ľôîČŢíhÎvĺÎÓä[aŘëNŐ˘*f©t;‰á‰óTĐă{€8zk+LľOőVâ&:°˛8S˘1[ =%‘~!šBoixŕSń|đőôž‡#†Ëżü™C0J‹UHĐ@ć‹Yv¬(¨ŽEť´Ňkşüü4f׆¤QrĚóĐâ-ÚĂ.ňUŇ„ŹŰ¨ę˛DłěüĆĽ9ýY`©9@=ń-WÚpŰţđ—w*'â„ĘfôŽłŞiÇÝ6Dč”53Šŧ>"~Ü%?˘Đˇ.b,Qćvěb°Ň¤Hô^‰ŃńE]Đ*Ní “qŘ„ëÚFF—ą|Ç|fĽEX»ĺ +˛ETµ8čNB]ÎËף}ę´˘¦ŹŁ—SRÜ˝¤P°Ő§ˇs*Zŕ´X±Ź,™<^rxtżüsZN-K9 \űúš„‚˘ŃemZgę%@¶“‘Äą‘™ Z\Ź×W‰O#N*’jzjÔ;=o[ Ý)ZÄíYŮ‹T ŃwÄ˝ €ęAUúžJ)Ĺ˙8ţ4núŞ°Úťy;WDíŰ~hSŽŰ´%HD‘‚´ +ś‘}2űçܧ⠰5¦úÓ°p ËZt}-ęľq·¸ŕÂĂż7n3X´rŢíx\|RŚŢ)F(Ş.×GQ,)ęi»NĹł}LňD^XdÇ5ÂI]WO2¸`ĄL׏ţkă?,µ+=dľ?hëz1XËTOŔ©CśNF¸bŔ&ş“›tLÖ%ľ^]Z |ô" đť#aŠË®°süXżů|'ÇDá>µ đ<ńšXŻď‚Ł*íNZż‡%E3ĐŤŚ-…6~’%N'ţő\\Ő‹8#‚żVZĐ t1–-Ţ'—™}˛!ĺ[ž»Ó"»¸Cŕ*ľÄjT3]µIÍ.š8ĂŰ?ˇ†˙gÄ +(…ű!¨~†á«f-ZŔ`xŽ‚ ĺŃT‚ëĚAç~ł$“….b…†őZ9D”#ű<Ę3Dx—öŚ0´ćLŚtDZ›Ë€ĺŢÖşA'ÔŤË$ýW,tݵř‰µf0Ľh•±NęB7F2(t«ôd ÂçꍴB3őLÄČwHbRC6^˝vĺDâ^×ď¨áź0T7‹'¨ßg{ý暔֮=ßePË_đ4ňô(ÖżG{f‚đ>î±‰× %®a"qŇŃöęŢ&tX°Bż†˛ #SÔő𰅅玠Ą–S^o€`ěM?§ÂĘižűS„G0‘×?ą¦qJ¶V)‡›#Ů„dšm¤«swp<żŁÝʤóy?ŻxűÜUËŰHŻĺmÝá;g‚pÇ™ôغà ó»Ń#ĂOÉuUýëü&÷č˝ ¦ë‡+/pGĆ 6·´€k×¶j”Ě_> ‚µËî‚®ö|g:î¸5üKnę-6d%zJ @ß°Ţж?‚FrEůţÁnço9Đá˛U'é?˙~nžĎz Ż—Oő|é^ đ˝éĘČféš˝ůó5‰­ĐnPĘI—}mBű•ţ±oÜ©şÜM"Ś:đç|`‰ÎNż’>6jÎźY`X ­űÉÄ>Ă0g^ĐÄą¬ălĺłč0Ć)ۦŞPźú•#źąĄYO -üůË•żŞčô&c˝K±Tńánˇt0ęŽw×Ô°ŕsŤk*.?Ö¬˝h_úu“›Ĺ+_Ç=meÂŢŚě÷„ÉZŹó•3ĹŁU˝XqC%!bĽäVÂěńŃČňľŁFe˙ UĚE‹/łÜżL m ŢäĹč{’µ +U·ŕďűö|Oč>4GđŤ bôđ»0’[ßąśůŕsĐó”Żů[E¤É,Ľ‹±żďÜß—`ö8Ž={TĂ./­Ű»}FüĺAÚĹÜNöQâ­„‚Cvş8&ĽŃŃÓżQ +tů-Éńé9 ĘŢţŘl!`VS$ŁÇşč*ˇ0+ţ)Bíŕ¶µď¨Ď0<“Ɔeˇ@Vbę(’ěŁŔb§RZ_.-Ô”Łżwz„/µ˘n$‰ ÓŤ1“#jjčßĂLhŐ­łä]1QÄsż"Tç "ŞąM%ăŻSąubŘ©&$2ňËęj{{ ôŽň¤ňKŔHqĺ©nĄÝ°Ü‹l.CT"Žy˝đ©0oD=®h§yďPć¶Ţ92X) +ÚÖZŰŻ}Îű‡z…PZÖŐ©Ďoú Ă[EW–ËĄWCÚúVŻôŔ>űŚzŻtJ¸}ŹřË“D©ÍŢ,SęZő3„UĐ Ú%)©\&Đ11Żß#PG–âĎKĐľČ^Ć«µ+š‚ +ŽO(ĘŤ6ç•ö]q\ÝňL řZTŕÍěă‹Ő C,#đ”b7ÔSl†Üm†\$:em_îžËýZ»ëš0eCK™°¨hAS—É@ťvI1˘űŘs*Sťjáe„٬ζďíq˙›{˙ăíč»ÇXš˘Ťođx·r¤Ň;ľ7۰FLźNúŁ3ŔÖ10Çč,›Ë“Sé]1lz\J»˘¸K– @Ď´w’Ť‹–lµŇôbgó{@˝öu$ôčs}D)L ń@ó“ksî +á°ßşe˛ŻČd‹97°`=˘WŻí3b×"[÷”uâRäđűFŇh\iŘŢP +-2č<Ě8â”.©e›ú–Ósý[Eř!p·ĚM¸ďŕű“ös[ŮźzËL™Txąëĺ'Mę”>3źî^ĂÍąpŁ-)s5şjHĎő-ßmŐ +¸F›Âg‚Žeý}l<ŐÜ5^˙ăú<Ś–ă%–ăUž’“H Ŕú81_•ď8ç ÜúVăLyďŢśH.é€Đ“…EŢI_°éŚŕĽB™—ň…×kjOđ/’}?u¦hyÍ%±×€—˛uÜĄš±>% Ř!2…iF9u}ťHG˘†_´‡5ĚŁ´´·É…W‡|4ńd™·ä4ďřnîÎÝr ›S‚§íj»ŰᾉŔęŔÂÇ"ŇžÖ Ě3Ć.1Y¶?D¬´ăÍř>>ĺ)›1śkA2ŻAV0T.XÁhIŚőŹ™{˙ŚŘgÉŰť řĂÖűąÝÔ(ńpŁĄůÇť&ĐfśNs´ ~^”vmÄŽq†ýÍóŤ2–\i¦‹á3F^×ŕŤ5@x—NW”Ś”3?Ůîďź"Z`Meőňâ’ż‡Ť#B–HŤäDkWŠÉ@,äúTńe‡];ýBˇágť_2ťB›ă}>d‚Ëć´V»đÓIÜq:í˝ÖX~řľOď÷÷0Ä4%SĐÎúĐÍ ť"śˇ.Xä­+Ôď´XRFčRâđčÁĘńką4GârÖŤÜŠö¨‡†b9Ş[ŕE!7b%OśqJYkéΣz?.Ź˝ŕóĘBŃA‚zśŰDÁ:Ó=”?‡Ű?US(fíaňc˙ý3Źë ô‘}Pŕ`¬€îC‚pwĂ€”ú <$Ű<Ô'ögź˙ľ=3Źó§0śüŢ鵞Ía;iŹňC¸ë ^]‹Ź¨e=EÓőëdXD/Ę|5YŚÖ+ľ·Xcď¶řöµFÁH˙ťU•±ŃÔ:Ž¦Ú¨PÇcŁŇk‹&L”7'&·÷o &üF®ŕGŽľśůßqă۶wm0Ď޶ŰŃZĆj5¦äĽ+ż=ár*n§"™Éµî6xiź˝„/:ó#8o°ŕĽg˙ân÷xşS×ă± ŁXôw Ő›†tĺ@ KXÜĎć*Ä +âĆĄ>07.Ďâ{žzDÚMç‡×\Ó>lÂ*Ŕ˝8đq*BgT§äeřç§…¦}Ľđč'Řϡ–łĘ.đŔ9ŘI#üęzóă.F}gNĺŻ]«ŔxÉŘ›¦¬UFµßeÇś3 +n˝¸Ź­˙U7®>Ü_T®TxÎĐ3%öâ˛ĂwôbÉËĺ6[+ÍŕŘ+;qo +)*ŔŻd kaË›řľ‹q˙XÖ"q{3¶Ł’¸ĘrČYpźáŁ€î^+ZŤÁÖĐ«Ř=¶mî4‹ÉRůň 2ęɇ4(©×n^1źÝ“»«9•…ň±BSŕJáň/§o_yáĎÚUČ—®Ýř_ˇ]őĐđĂŠ#^·üš›ěO#řÇődŽëMÇMčrë»7ŁÁą™Nëţ¬µă =dXĎ­G(Šńm~Ţ»ľAĄLđ)4ILß&Ť Öóˇ I"ĚSQŢ”-е8 Ką ÉÍ&c全-‚<éĽg6Ąç>Up–«ČćË@ѤŰĺ·ćT×Cńłý‚Żĺ3t<ăQnntŐR`˝Ň‚şJ¨*ŐŃRť—e.ń[:˙zĹ"N,٦Ż|ý8굤·Lŕ×őufŹŚM‘Ž >KDúü. +҉ŮűÜj kłĽ(ôľSÁvţ>·fHEm +ÎěČü(ŐC´ô"EÔË`S|ń٤u‘ ëB Clľ®Ptjśö© čä‹č_L}+®O5ĐŰŻŞu$Á¤¬D\Ę~ŰÓXľ~ĺMŐ ]‰ř|z ÄaÄ lŃiŘ N7őZú…ŇĂFV©8˶ßţř=ůó_ý¶tű»˛óewEPa«ŻÚ ćŇ‚Ąëý`Q!ĚŻĽÂXŤ¸ťhÖ2=б%ÜO[eŢ! ĹvnAŹK‰‹~Ľ«Liúú"ě®·Źˇ^P’FVÜ!ĄQŻŘ|Ö§WiS?5ôÇv»0!}žlň@ĘvâćĂaűEîÜʨËÜŞĽ_ËŃ·őą ő}¸Đëx Tľ&ŘN˙äÚ ŁTŁŚ˙ODžĎ Ú;",‹8ŠňTŰ6rˇ¶ˇd„ÚűĚţu"ńZùƦǵŹ#§—m5ul" _Ř™”zř*=ŮĐJ„ůÝz8Ë×™e€ÂD4˛’Ň^ôŰŞCm7Z_Śű^ ŐFxAT)”Ł÷¦ŻMś2¤Ŕ»ŢĚ#ôm0VÔZMŐ ¬Úc JŢ~#Ë@łşHť!±:ĚObĹZ|ů…)7Â*Źh=Ü"q+˝Z§âˇ«¶Ç*µ»,â{Ó^×UPAĹŽţH|´ŽÖ_ďő}}O›˛”yá±dý“¶É&hŁ÷lôh8Y[°o Í,]q˛· ±>D®¬ oĹ^‡`Ź ŕ “)Šč•ú*€%<ž&*…ÓzjŐA[ŰĚřş"€®ĐâUż$QëŰČc!Iű:Ń +¸¬3V–ŕ\ôKćĹ«zVw7ťť<ŹÜIÇąI3¶`Ő~ן¬.ŕKÓ ’ŔÜ&’É-›+Ľ#±íW™hU˛Ö695xĽśČz’čÍ–¤ś¤€0%·q}ąŁk`ň2`¬„Ó‹ABáú:AöPĆW +á˘Z4‚-»>Ü#|ů†;zHęč!iO +ŠŠ (Ş4Lî‡!uÝ/ČR‹4Ť©ěęG—ä¶ŔY™“ęDި8…@ÉŽ0›Gš´¤ťµ)&ľgŠŮşa[ą-ű‘Ćžsź)΂g IŽAźű•Će¨Ěí …WJW_”ž+óŤFĂz÷˘îřÁá·:c˘vÉĂ[çÝ~š®OýŢÂh¬r3ü*ë+Ň=řĹű¶Ô§Ę‰‚Úx§„˙ŘŃ_aqA ™?é]›ç kÉ!Žfrŕ]Ű€’ę)żÇ[BÁ•t:)XÇ•JNÄ%–š˘ ŇÁMO )˘¬”¦n-łľ“-JG©-ďMżż˘Ś“oםo·k“`Ż`ŰËD]ß(Ë ˝9ŃŚSaUĂ%<7řtcFóßg‘¤ĆĎé8źµů`.oÉvĂúöGkżđCçNCÝŻ ćŻî[%ô2ĆW,–t>¤Mšaôh Hkŕx,ş$,)-xŐuĐ+==ĺ„°¬>Ósłň…jfQÍS·~éuéc:Łs +0JŘÄ‹›Ą·q¸¶8ĺPÄó`,§ Áž~[ö×> Ýö×ćárš2TÁťśa¨BĽ®ë7űĹÚn#eŰ–!‘¨/hz {#ůµâąn±Łuë–_¸±ĺ+˙ĆV¸Â¦ľłs l1źzŐ ]uGHʎ_xízZD÷/§")cŮÁ§”0ŢwĂJžÜĹŽ·Ý5Ô'ŻvK(Ľ”µ„×v\gľ-›ô×™čőÓL @Ú^9ču„-®nŬśť 2]OŞßuDěžö˝lgV6AÔ‡ÓŇç‘:·ë n_ÇöĽ¨‘Xżô1ą7ÎŇ!¨-IBr«TбA,ľŹ@ňBˇü¦D„É>L/†…ÂIůwoÍŞĎÎxŚ”[7ÝÖu"9ö÷ĹĆDő‹U Ö’? hLĄ–˛˘ĘW!;c+1AgĄX ×dSú2?gpŚĐÝvľJć&ad-ŞW*ZˇsÔUoąŻsĂ|ŇÎOÜ9µřeµNntĚߎÜ6mpĎȧÔÇF¤„Ë›•˘)bĘż‹ĽEęˇ[Ş@ŤI¦ĆI™Ú¦Ű ›/Ş)ŠZÂĹ~D~]b_ÁrŚňQ«®čň$3Ă!iŔď9Ň +BÖđ~(0öć‹Óî:dq{Ř;*}ťó',*ÝbžŔóôŇwşŔ<¶ ëĆćB¤gtxĽ˘]x?«‰˙¤č Yö!2„$ oJˇ-ađ©Ď (t®ťu(%řX_đ©[ź•iŻ)rŹ]Ő•b1ÂfĆÉ?ݵ$’¶ătî óEľ2|˘ŘUý.dw-‡“ďé^éŻőpM·ŤŤ-]ݞŇháŚ]řĐŞAŻŐţ+%L­:q +uÎíéą~ţş§ŠžŕP°/ľwΞď ăV€Šđ+€ÉDh5đEHd”Űfu#ž+…†Ť¸­UB…ł9¶"xŢUŃ2(gz7mG‹Pđđ3Lmĺ-kŘI + ^ ¦űÔĹ!<2—»RÇŐÝű%·3eMc.xÄžé\Tkµ6€Ł4YńQň| X©·É;ŕZfąęQň˘ßEç—~Š»[u=ĚŘ-ęwĎP@OOŞęĐAŇ-ş!Öµ‚NQ/ZIił¶±ÍO?mâh"÷\-ÄÁń°|Łű—2š*xŐ—¬"Ξ VĎPPQDvó#Cń#~e>Ó^Đ^L{ç«>JÝä“xé:)3ĹW‚ ľ Ű˝ŠdČgÉUß‚ěŚ Ú ÎŚ6Ď ş˙úRyWĘŇ`ĆâĺדťęhŮ^U^źM^ŤÂß]O#˘ŚRxTM˝˝Mý¶H&]‚ŃŹÍh ČÔkĚí>Ľ` îŃUîŻódgˇžąÚ¦¦ź›šŢ‚ÖW˙şkÝIĚ"¤B€¨hdLî}&Tg‰ JÎÔ#Ty˘gĆ› +‰*p’lpU€_uV˝ĺßŃdsşŘ Ňąť°Ąěä‚ZS›IKcV©Zwp=;çUú(čW飀ĘŢ +$°Űťéočßw†µ­âőĘľ_\Ňz‰[ÁĂ:–|ižéŃŞÇÓUŮçYBđď›ń»€rżö}ÉR /Ŕ[­ŘŽL…óĺFěé©Ív¶ţ_vß_ĆŮvťbrJş}ĆąŃhl-véâP‘˛˙żÇ íc]‹´$ń äě±É×깢4–3O2Ô[JöW2áX Äřś k“L…pXś{$&4„ŚCç\$QOÉô«ÚłúnwĽ…ŰÁű㤇%a<µčĘŞŽ_™.…ň_řÉôré*ŃËeŐUŔŁ×™ˇOÎICqŽ€{s8“ÝiHZ>·Uµçí Ż‰ň8UąÝôVĺľ‘Ü`•ÔRg3Q\é’§ud_Fźş8ˇżÂę7żTÇÉ?lŽš®Śš„ťwZčř3˛Ţd†p$7‡€ă^N9 y?ŔvÎ($AD +nTZĘZ5N@IÔ*±ůŁ@řbVŢM±PŐ`Ƈ(í dQ)RőxŕÚN鏴Ě9r‰z|6y·ĐQŁÎQ#Ú.óhZ$'@K•‚×řŻ´…źiɲŐMTéY·ń?›”ŔľĐţuDĄ­•MçTw¨C9ĂŔCí)€ő/_ĺ +a-pSÉ®'Ż&“fDŔ”ĺlmo´c]óšşÁJF@q(˘ş˝ËzŕĘľ¶›QŽ]µť[÷µPŚsm˝dÍ/ď¸`~YMăÍc†H:$0~S­ů:•XÓuŞ›ŢéH®joŇ€lc›„6ΰ˝ĆńřŹ I­zF¦`ç˙üT˛, $*{€Ţřîw)ňň5•Oć]-ô»©*nvo žzŢZä‹Č7R*¤ +ľúypČL`ţ‚ćáěĎK{IňÎ!nžâ ‘̬BĺB|ďžó±WÜ˙§Ţ3ňłEĚ=‰×śĆf’KĄz©§Ŕщ‰mÝŽEăĺĎčIÁĄŹşmµÇA˘ ŠŕĚ“ –ÖZŕkh¤YlAĽcĽ4ň'J#±-Úůç + Px(péÝ1K)”@ę‘8ÔÓ©`$šĆ[ĐB Čů?Ü[]Ůýűg×agč'ľ~bS@íD d(„XŰţ݇~ÉăF«ńüî=Î c–‚Ďv®zľŞ÷Ú»ąŐ™Ş‚vÉł”52Zh–|ł=\\™-†â×5řß}ß`z„JX —~çř1ő0—Ą,Ĺľ\ĺµvr+Ś´pšµâ®Ć]1ŐámĂ÷9î‚těoŰ=G[^ÚIÓÔ=«–éĆž®*ć‰dvq˘-5x‹:¤ý"Đď×y˙×:Ű-đŻź˙ń3E€tÔ˛˙ůűßÄßňĎ5€qî÷áčdv¤Áŕ:öb°7Ľ·1$>ŰI]ˇĹ˝ĎśGCdâ$ů,Ďô ˇÇî}m>0^§˝Ć~›ěę +É}LĽrôÄ]’0ĄÚ«g¨{(\Ůő™EŽTžŔ#ľžÇŞ)ž¦5°łL§äI@< ĹĽŔŻ‚Ąí ”z‹˘>(ô€ýÂÎŘÂMM 2=ô.@€&aSäť-UgýhĎs˙`]Đ4"ycJ¸?¦M86t±Ŕ¸ýSˇ®É'í;]áO,č®zE€ëh0č”`~ŻďŐGµvGD ż:żä4‚ýśiŘk"żÜ!5|úTyăĹé“\3Ń}ßßä˛O[Č(˛§`d#–_nďżőńäJ0-¸ŇÓ lŚS꼪ë×8(oŕ'š'ŠŇ%¶ŮĹĽ’Ç[Ű78—&őíp÷MX9*ůĚ {‡Ó„¬Ăč€] $«ă0‘—ýJ-;WGD=7§ÝšŢ6xaTX÷=tČy €lŐˇHŠýńý} +ŕoő Ú{ Ä `Ľ¶˘hć…Ş ĘŹM{ć%|iýÖäďWŤç`W"_Ť™tO÷™7®şMTřhg+dűE_ă+†’ĄňÔŹ¦×‘»TíŤ4Ő(¦«á>4ŕ)3öý‡ĄOz^)˝˘˛'…ęśáé’Ŕ•ůyÚTDřĺŞý ‰/-$ůęEW¸śŹ&ˇ$c=tŠă=«l¨‚¦ŻE:ż`Kjjşz´Š¨ę”Óv˛†L ¬´ ÜîŮCfÝ[Ä©Y•Ó|ÍIěŮŰyPËRp‰Ętĺ€(ú’Ô@CdrjÜěńéˇ÷&yđCK$­Śňka]¶¨„…ń›ÓF: +ţD${¤q©b rLŻůU(.§‰Ňr˝€”Ó©ľ¶XÜŽí\ 1fOÔÔ˘q¸ Ú„Y5öů‚‡˙ą^ža=¦)zCĐésÄň ×î85"µĹZX%€Bţ·÷§Ôa(ë ™hiĺč©ÄŃőZp­ĺÚ@̧Đ0ŚBź˝.¤ĺ‘îIęćóXVXfűć¸`}ë˛Ŕkž¶Ń[ŘaRŔȆ7˘Ây"©Ş: &ĘĘLĆŇM2ĺ=â·wĎE}ť=Ź6u¨ŢOtđ  ^ýŠ›!§ŚDöQu©V@Iöśî+Ľ…AD·‹±ćă>~íä4ÔŞ Ţ8ső4gRjyoät®1lę°Ë|®4CÚj˙¸"lŤ*đ¦±X]»ýÓóč.« ´oźń`'žú‘ę ň,ë§F@¨‡MĘÓ-8ě=Âf:—şBű{•í>ŹZ=hý żgýĐ„Ľ‡u>v°™ŚŢ•˘ ÄE3í4)÷Ó;EÜđ€¨ďó[ġʧg^řáOřQĄÖĎż[|×Dîŕ=%@{y{÷€,ůýďg<ńĚ#囏µ°ę%ŚwŮ›´Éöv0j0Â/‘Ă÷0vá©ŇęUĄĎŤZRé>CńV’QľĘ-Ĺ8Gą-— É!šh?‚­HüŕGýÓXĺĚ߆Ę2Qoc9 +ąoµňĹvăľ›9Ü2›ŃExWDŔ´°ˇGűâ˙–/ŻĺĹ=°şÎß(¸KD»Ż^,ú,MgR¸Çny4hÁUÝz… ŃäÇMh­ółŐŇŹę.Gsm%Šsžct! Ś-·AĄq 7,´kGÝ,Î/Íő ?žó÷Úő™ÇMř +“žnżjžľÜŢzşÜř¬wĆŢŤÇ}L ‹öÜ7Ę•!ťÖ„čˇŔVÂĚ"pÓ;€‘!°[ek^F!Źż#ýú[)öBJí<ĄŘެ)ŕyXU¸Ą( /Ë Ý‚wí· Ş×ë×0 +v^DaĆf7ĽťćĘŠÚ¶ +S*ŠÇ!Ü ­ŢyĚËl—]tč­V@řäÇÇŮúöŽ!wł"aćR"‰Ęq÷!Bí ›‰†^}¬´ž.Ôďź42E^Ż€^rŁ*v~%Äw?€¶Â”şŘŇźAÚTŁ?'Îj¬ăXr¬čš…-Ĺűi‚rmy,wHëČŰ7{Ă#\˝«ĚxşXpý˛ŽÉ<“,r ›ä <®ç6Ô)®ź÷xr5Ź(ŃçsťBpLÄ7×Í—Ę|tkmş Ü?˛9†)ŰĎr…FŤ`† +wÓřn±řŞi-Ĺ|řŰ+Ză6?˛öqőÓĄ`¤VÎĹóú+/ÔďÔtW\Ęš0"”Q´?őu",ˇěd!?ɇ”Rv$á(4š8É1p)*’sl (äčŘ„TŤek y}Ń{ŕ ›Ďöč-LYÔ˛¨ůó \ Ř÷ă;[ŁŇ„|~kfä(ćY˛Wwť(ë6ĽŇ#¤—-EÇŠeŹ zţ–ŁŁ +@$¤A}ŢK +ÚŹ÷¤¬?äĚr˙ˇB7ĺÎĽ¦'ł~ˇżÂńťýĐ{Ŕoź¶ŕ°9Ŕq~sžkÝ´b'=6˝ÔĄŘô2eľG|żj~ c ‡™+ŽoR¬“rďaĂGÍwâ¬t™ď†sôiŕu~Ľ"ŃĄ@éťĹ‘¦0…üBŮç–@/ 9€¦óóţ2xáú÷%l·S—>¦¤eŘ_ĘE ĽŢŕ| +!Új2 @Ŕ…(G1\»E4?ÓťŢ"ţí®>9™ż}ľŽ(Ä Yq¶ßÍâĆ8PŁ~gĄďÎnIVt«ÚźĚöTVOŘů†AĆŢaUçČt×Ú°Ę˝NÄ<š¬¤Ă‰¨:#ť’ĽĘ&ö)Ú‘O=«GY(‡f]ßEě;ˇ%Ťđě|u|R8_¦öŢ©_Ł›a/Dé+˝“" Ŕ%ky UłXl§0VđŚtŢŻ¨gŘúɶáĹ»äP§T?Í;<őXQo˝MÚĄ®]ó|¸0¬R¤k$ŘŔĐußxzLNjŽľdˇWn*Íäâ×kăěfĂ şD°J‚z·Ő.Î $ÓĘß}ťt\¸ |(ą™ ¦¨7gtĐWśţhžŁś]Śpčĺˇ9€ˇÍ˘~>^%8ĺXP§s4pPú*˛Î=óâ˝(K†łj…St#8{Mˇ}xrĽ‰ÄT?Ĺgl‡)ŤÍtđ^B”)\›"r^뤦 ›ś u§Ęeý, Óąp*;ByĄçJV]ěvĺ¸Ô”k{ą/ŽKQ$çRlu•ťC˛ Ůą~nĆŠ>ŁÄĄć«?ęř›Ęęd°šRçt·­‚µ&I}E±J§•"ĺô|ôEŔŹŚĆ?2÷ůf:%M˘č ›žŤĄ"kź˘ć Ĺliů€őRݰËNaz€0[‰śuh`*$MеUňD0,gHÓXůzŕ<áŻ\ő·ĎăÜ +~?±®ą58C¦,4îgjßDřcöř1{~äoľ†‰˙gňĽ^çVŹBĄ¤őÎŤŽP –Ě=ó= 9DÔěYr'ţć—"ĎżŐ®ř•Ł‚×ŐC§›éEťîŮq«~đ_{q‘¸5㦦Š’ŕ·Xç÷2„ŕ÷šů[D_áĎDÁűOG›SÂfH‰‚u±H.;¦&K $…fÉóBŘľ])X%éVŽŰßé!ć°Ez~¦»x˘ÔňÎìîi;{TNÍc…Bżp~zKj®+ĽÚ¬»ěqţéë”{*™#äŹ^ăóˇë´ÇU|ŕÄŇ5Öą4ŕK8~±}LGŕ9Ł8×^/ŤJ$‹«lW^‚ˇăSČűf´j=Ń‹ü&"5Ť–Ď»ýĺ¨,,Ę}]Ťy 3–-EgM_yĐ?§Z ©„ M¦˝GśeeiŞĐ]řćDQlD´"+€v8ßPÉ$OŮŁ~žGŐáKŘ›ž8‚$ÇFň’rp°đěÓƱ’Qho±&ľFĽfČ wĽń͉ âŇ•1›ö'ŚĺĚ®ŻjÓá"x/>đý»ÝW@˙jĆQĘĂ + Hś ŐÂ]ř]x†®Ő©–Ł™oŤ©ECjDI$ p×{ÄYGČŹ•<Ű7'‚á +tCEçöRŹ0*҆+Puj”çm6ćÍ…ĹÔ(‡+ć°L…ňë 0¬c—Ľą§%ł /í}Şfýt}iQ‰ÍĄAĄ¶!]nRl?Ć/LĘ+…îą*7´Ë®ÓEáçŇ&d P Š +ó¸uaEMÄkĚîĹ"@fĽáą~s˘yôž|më/±˝¸ż䛍Ëţűů9ޢR¨Lc»(úf9-Čßs˘ë$FÍAůJW—fŢÁőđ¬Šdsďúłőľ˘5ôr„† Ţ›|m^#( ĄÉE@ú86©5đc†UkÔş`Pů ÝŢOftAĽYˇ‘…”|ĎńůIvg–ĺŚÖ»h„¬»¤ůŔAůA”⍮Ů]Ć`M¦˛ňăĚ”ÎŔ®úęjáßSś ‹· ]ޮޫôB®ţ<ŞÇđâş˙´z˛U?r8ThSpұÇw_ďç‰őŇťÔĐÇw'އI Hď‹(,˛lÁĄJěD„=ŚÎ Qů‘îhQâN|5‘Ł"J űż»ďčŠŐŔ$·Ń3\Qř»`ihńv“ńŃZh4BsŹŔ­dĘßż("|®1ý,lˇÎÇÎÉÇ Ă¤ŘşâÉŔ\«äBtáĹ@çnCy|Ú8™’(¬ …ŇŤ–W—~Ć$s§ë0ʉP¨ hřx_nOÖú5lĎ[úQ4ö Ęać0$,ǨՆ RSć´XXŽěż“ţ—ăĺĐĂËa>z©Gĺkˇ¬KQÉbŁ'§pž—ZWő€ÂQŇ—•‚Hؠ⡣s¬öĘ˙JýxGL +©†vĐ‹÷·ZCF>U)<;Íť˘®Ű{$Ńď ]Sc„F*‚ĐE+6qeČóŔx_˘,Ü~{Á%Şr/jo¦ VÝ—Ĺ•ľĎďb*"ťŠňúćDÔÉew“-+ÇN™®ľ ·hOü”tN|eĺwÍxD˘ÚEń\A—*0ąW±@!CEď±w]öđŃ©IĚʤ:řăŤŃSĐ y‡“1+Óľ_21Ĺ '6„LĘíĹ6ňţřet߯Ź( ý€ż "đן2}P×ţ™"€˙ëwüŻńń7˙áăď˙×_ĽhţřO˙ĺř?óź˙öţćOúýżüóOűúďżůÇţéÇ?üń˙ýô‡˙ýÓýÝ?ţéżýËţőŹ_/~˝Î˙ď3řţ¬:&Žęô¶×c|µŞ-–g6řéU˙±eΙ/‰6 Đ@Ši׬ßLĎyî•Äľ0'~ţĹ;ˇöĘ8‹ç¸ČŠľ—PzJXp‰ÓĹL uĽ:GézĽUŚN»{^gĚŻ}¬ŁáÎGŮ+_9l˝BéŐáކCÝ©3Wb˙~!Ă-7ťň 9Ĺ™•QpČ CXUň=r ]q@[‚rH^~˘ťfĚÉɸ„eĆý75ŔKŇŔµÔň„Eń G/öÂ3NRÍVôyY(î«ÎŹ8–şjM]ÁôJ4Śů*®ťkÚ<Á«şî¦ýI)0……{ç^îBuSŚń‡ŘqQQ9ćËBľ~«©ŃĺS•ÇeynŹŞüˇňa)g›˛l]ęEQĺČTOęĚěçŮMŢcŹ:Ž.>6„yĐ8§k&ŃPbh-ÓÁŞ >ö°“pů›qľđ·śÓvZ¨'H‹nňÔšKÜ^{Řţl€BśÉ˛I^Ň>0łęM5íqËcË˙9ş`ËXIÇű}ÚBfUNL/îKMŔűď=¶™5î©gť´~PĘĘłtsBÇ7 žŐ¬Čšk|dŘ[őzű{ĽĐ`(S;ÄTŰ XĚ“Mfd¤;揜î™éVń—'Ížć‡#>[ďMIBß_vşmť9JFÝćýÚłżX‘üˇž±“żĹ8¶Í®‰ť“ęŤwč8żu?Ń8jł=“ŕg—ňÁ1ŕŠ†lç'â(ŔJ!ąé^YͰŃĎR7`-{ń +CJÝC)Ô[bRö… Ű©fűCžôŃÄ*4ŔĄ1QL˙»§©Wľ9:t- +ç漽2Ą×ʶ‘đ/ĎU1ˇ8 Ŕ4´ý{ň±ýť%p\Çm˛şŇ}żrľr§CHßç‡ĐŰ/ç!SQŔŘŰ,jb©Í{! Ž´UůŐŰZ†öÜłxiűçT‹~ŹL­€Ěčë:ži1چürÎżş8~ě{Ą‰OaÔ6DƆi`W·#čYq)BßWIÉŁó"lÝâ4’éJxęí5¦ Jł…¶ÝDěś–Kő&”ĂD€”#‚Ň:Ą]±w®˘ĂÔ?—‚Ă˓ܱhöł AĽď3_ `™0×§4<÷…M_şz{µuŁË¤ąśÇ*J +÷«Çţ&dř•©.}±9„ŞŽ:Ç~Ĺo(n"YwĎöT&‡N5a¤QďE‚?’MěG4mŰÜ¨ŹŚxi‹Oá¶ŘQřqŰ §ÇńÂŮÇ!áĹŠĎŽ¨¨§ůş +5F‚ +Î5â~ÉĎ0ÂF1‚N‡Ľ(g›ČĐ +$€&!čÄ…ĺÜŕ‰ÜW˛ŹµK5J1•.ű)S âf.ën˛č_x~|˝çűQśÎ­ÜA4vó߀;ä׬§ź‡ôü±«}ÇłóŞňő{ŇP3Nµú3¸Zi6đó¸OŁâ|řöŞŻß†MKţ^ϧB +}ŕŽµ>BQ;\ĚŠĄsŞúwé|`“Řâh¸Űˇ¶S©A©8ôžÂ‚ŽenyşŞ‚™\rÍ|ÚťwŘůP)_j†Ó˘zëH„×<-PśâöěýÝ‹Ň{ŤY$Î÷˝B<¶ŮJő!-X©BE/"5Ô¦.ďß×rü ŇĚŰQ6Ź-Łŕ 3Ľ×ţú;2ź: Ă{ľ±ÎŻŁŤč7ě÷~"m&ĄY¤m7=÷zQ?.2ŐbX;¤lçv%WoDüü{Lěć¢|ó3©s…]a<>¬Nnşp–‚‹ÉWQlŰŻ=‚˝ĄÂ—$Łę[x»€š¨‰GŤÝgj˛E˙\äŞ.ĚťŽőĄksˇć—**3ě c::F¬%űÍÜ›’=q`r™€ćOPÄń{'['ŐRÄľ:Ä&$T§šöp⫍{LáŞV„› ÓlłAAaq©°O uîů{dĚF7b¦IMBW‹ »Ť¸›đKÚőڎqXúÖ5%„«'Zô‡vŢVF„1 Jq3äÖo҇ç +@äš.°Ŕř};TĆmşĺ}d])÷Śă1¤‰ÄĘjőž†îőńË‹ř+[ÖšŽőuď«Ü?ŰIsě=)ďśc¤Oş/b‰5ő:J„=í‹ňČÉč*Ćýîô˰4_śž–ßC `fŤŚň•2ń:0ĐS_1Ť4jÔ7ŻQCĎL•EÁOÓÖáş„žAŽéΚÎBČ«’íĐ3a®ŻÇĎÓZěŮó6–·“ŕa —KÇ ă]Ý\SöŔĎíŰí–VPÓ¸–·0”G{íáuŤ¸ßËšP…Á†V$ęž(Ne´‹OŻ÷€çUuGúöń®äâÄQcZ¦7ó͟٩)Q„9ŐşŻaéxÔ ť­FŤ3ň(LEMĐ{[ŞT"sPH®ďçQeD!č:<›ż9)JRúl@N9™Z?™š°;JŔéÉ,pź±ç/%̢c/-x,Ľ¶ő2ö]öJS9żRČßFRÜŐößżq:ç *$ä^l„tň2:G63V€%”ă^¬čöqvš·ĐŐĐ!NáÖMâďd× Ľů´•h"T“´Čţdy‰N 8„ Ú"‹ˇ^2’٧†ş h[ňţŻNŽŃxr¦EPëżű|Źw‡ľU,Đzb‚§zwśĘ EŤ„âáŐż‡µĐŐëŹHő‚š)îEĎbŹŰ,ä +JÇÔ|P(Ąj)Ôq)ꤓ¸ŃŇt‚\p=¸łÖˇÓđž5#B~¬®/Ő‘­ EŐ+;ÇN¸ŐŻ+¸Öťmç)K!|NÔ§NńźÖzśš š˝eÝ? Ďc&FPŮ/q+1ĐîWzřë2Âg›íĺŠ)™9’ÝĐ’XeŠKgaoôMđJ{ýĂ–ü\ę=,‡3`1Ű4_HI-Ľß€,‹˛«GssvţţĆŁăÜ}T1ŰŤŁUĘmąńîV[«E˝áţčZ–ů壺¸§µť­źüňR ´/–Ů—#ĐŇ +]YúZ`ú…őff٨:A>‚›Ü˙ž6[ľFüöi A«ĄnÇĺíDł¤ťNĂ'Ňâµ1Ůaжď"ľ]ߢ”hŕ‡I c÷Ą!śvIôĐ™¬Ű<¦Ąxf197-äʾێ'šfyxĎ‹—lb‘€Łř7”ĺśÁtÉŻµ'ŕÁk«C s_HÖžzĆ“1cĽçÂlâKxŤS KT»VŇőz¨ľxJ™p‚XKłň‰ĽÔűJčFŘ3í„ń^—ętŕ {ăúw”ýüĐ€?¸ĺż]R Ę^?: ^ńťÂb±»gčOcÎĐH>Cˆg°¨@?§5P:z”~ +;@X&ô8;°„4ńŃ0âB¤( q_ĘľË^¬&ňýŇĽz oCoŠk‰8•§*RŚ‹§{!Ęü†Ü.’ţőÜ =ýB‹ëއeŰ^ť¨5ő?†NGĺŠ+5äJVq®`Bx“”‰¨—i٬j€¨¶*čţůĚ­¦·Öşř\4ßSđ_ÝŘh‚óÓŔřJĎíloŢĄÄçhżÂÝŁbS–ăgEá„ 5ű™t$DQčGěéÁŃWW…;ţwLí´ä±ŔÄöv"ĚÚ-q˘_ň;cő=b,|eŘß|÷0ĽöDůíńś,«SkË>%ĹâË +yé̆™…kPBŐ€ŕKÄůa­bHriţ͉(Ľp̲5 áĹI°Ľ“ľ@>®á—ýßĂhçQjŻâö—HźiYăaËG\XýĘE¦ł‚éš©yĎOżË˘…±‚ڎ +~Ńib'uÔvŔŁ Ađr ŔŞänŽ7†BÄă\H”gč7`‡0ó‚ĆĚ÷ăR2€ ©8ÁbË„÷HŚUšđÜqĹRFÔÖŐ)@[R>űĂú"ĚĘ>:EŚĄŤü°ÇŽ(§Ž2¤#5›'Úů*/r–@ SÉ´®ĽGśßçk.ôv"87<ßZ,G˛ ‰2ö‰o…v¬Ó_ďü×°Ő U,s?·<ă–ŻŁ´! µdĘńtŁ€Ńc“Čő5ŕ·7RĘ>ޞ,ďçKĂ –Fo eëî?ę5­Hµ’úÖ”K€r(Ţ¬ŕ€±F3»(IiÖ  ¨aľ(´YŹĐćm´ňE»L‹b=jő$o˘…č +ČtðgŠ9Â)~‚÷ťÚó«/t/5I SżĆ?›Ą¬AkŇţó +ŃeÁ¦č'Oz]!ż7Ŕ†ČP™¬č(~şT,¸4H®Yľ¦éĚĐ—'ę ş‰P™j uw„;/Ĺ澯ä~"–Ľ›F§ô~mXËČ÷÷Ă.ŮÇÝëP· 5jčb"účxřşßßD”,_ĺůRoa ŚU#3?ZNÄ2Xt=V?…äÝ~ăäěć¬îĺűßŢŮWˇžŔf˘ú[Ř…w«2iíʱĺÝ3ósíŕöôůĎßr`*ôć7J5,ńÁËňć~×L~ÇÉŽŠÉ—€×ěŃ ×±ëďgAöa…ĎűÔ%ŘČ Bęň(±»Yçůµx~Ź1QT‰˘ÉÚFč0˘mÄVÉ +ś3‡I˝Z5 SŮâÄ@ÎŃÁă2owÖbDäţ^€ö¬#_ĂçEšĽ#Żľ˘´„Őµn©ŘR±}?ĐËžűz?ăJ4Ő|?ş ®đt@ł›Ž +¨UôqŇ5»—{ŠóLđćf_şł‹ -#Ľ—‡f ’É ăDë»0ń^4J ůTˇ€‘¶C€î™çä˙0 djŤ°>4 áŹ"őĘ-~“=7Î#,_m¸ĎŞé´›Żˇ„ËsşéŹÂS$żN€ŔŔB3<*˙LE)žŘMÁw{Ž/çSŇtkfü*©ř%)ÉŠĘůx’„.ýÂi·|:€ŚK}Ŕ}ńG~ÇýGá˛a ÷ P˝$Hí»?ÇNi%™_ŽběŇB;HđŽÚď;;š96ÉÜz<ŮťN˛‘•&ővôďÎĹöÂs¨=ĂLOiż3\P¦P©vNúu €E÷©;˙ŽöRdӭʵ ţ&ŔČRÂváb§}ë®˝K4˛Ż@é€}Eďi|s˘¶®B $ +§‚ŚÇţĆp$ß#ľ®(§pů5 jáÚ(ľg3f˘RŹhŁŹĽNI֦ȠHqٰR;·”(í@€ÚEâ +±ŤŞ^v·TT÷XËÇ>AřuÝo‡MÄ EʵPŹÜyVQŁPŠŔěßܬgSoŹ­÷I +"G •lĘAíß»\ąX˙p÷4ÉÚ©2Ó–ü»p˘‘‡{#•ř˝7FBzďR¤˝ÁT€ś§-h"©Äm_oĚ÷SQO±mÉ-FăíDZPó`jďβ»âýě–ćç_#Đ6§3Jűúa&żEµC +ů—ĄämSÝŘÜ ´Ââ1´<ôd]ö˝Ň,ąÍŻńs¬!řo1+$\µŕ˝Ře˘‘ĆQ‚ôŻhőş^ż{!Ę‚sú-#S†äĎ9ëÓ{P¸čҕ횭Đ˙t‡ zŹřQŘ€Ůʸ˘NüLŐçËô»ŚţfŹ÷°ŠË+{ăHݬ,?ž|ź%Á»†›ĎABďĺ/š hŰécÎ:H>y°™ ¨uĚă!WşŽ–{וâWh‘:ŔĐŘIů¶uVĽ‡6M?ĽŻ.eÜďcűë+±Ô)ŃH®íç,ÔĘźúĎyĚçşG«ŃóŁe·cŐ×´°%uK꙯ )ł®§—bĎ'Ň «ÂşBK=ɦ7D3ÎjĎh2Ó´ľ^—şb”±e›>ŠÍ)ŔÖú†µ!ő©k|)“IÍ+R úT/z9”1şG—6c>zH—0sa•< ‡ŔÍöŰ[hîo:˘‹U`[­<,…އZÄ-*(ŹÎüő‹ň9ęÚPcßÉ*Ř7/Eź›KÉk®ßˇK‚)óLÇš5 Ľ˝s8‘ł})‡đÔ]Y·"L{ńş 0`ř®¦´:ë†()Ŕót“MĐÇ +}Ł„eľçÖ‹~¸Ň.ľ +ë°X ™CmČ&¦$ÔU+[:0ކc2µóhňŇ˲pŁ«†éüC`µŔFC5–%†ź8°Ş_6„Ŕ[öŞë–®µY–ÁčOĂ‹či$Źď;¶˛!iÜ› S^ŘdÍëĎűňiÝt3™ôÇZśÂŢ ¶ńÔ040ĘĹKCďLĆ´¦ÉçKÓ?”jdXbŠç˙.@ &"%łĚ.€Ţ7° ‰ +d$sw,ŕ;¸cY¨S‰‰Ŕ4OrK$B—<%ÍČ}ÔŐ†«Ś ÎÇÎ!ňž0+ŤŇ +}Ä“ądš2•(xčň’™IVlLţrvöJűľ×ÉpR÷¤űWűIl6`‹Śr šŃĎ_wb¸P6Ő>tďÁłű#qąA…ě +Ô›TZáđč ”n<=şÓG 1ßč<ŽŠ¤V†>şG)ó€Ža&âJÂ䇕0ÍÜqŽuswÂp ä#Ů©@Ôŕ÷Öץ®uÔŘWc¨§ĚŻźüפŘʼn…PŞŁŁG/„&Ô-áeÂă$G;ŞU%Đë`­Zŕúľ°wQrRÇq +UEÔÝ×ő ŰrO?íX}H€Ř›‘…>ůŮŮŤhłźQČÁ†Ä4Ôŕ;äÍ2\ůÂđlYâ'[˝‚Ă(ŃšěWÔäWĎI5Sđžw˝fĂX_ůR¸˘gW0°A’?g¨jąŚEs{N%‚Š*Á¤ĐëîŮ Ŕ¤¨f¦ ˛p±Yúqáň­jŰň–˙Ĺ6I—úBŠx®DOěv-;eÝĘ^jotűâ§»lÄH=Ą$(µž/–`úŠ}˛ÚB˝/cZ żüľüř«żŞÔ}ŤM:ÖŞ·˛ýÓ9:PŻVŰU3J•„§Ą'MĹřpŃB»doĄHö”#ŁqZU–ĹUăF±ô¨qTëó}”ňS·Ř*YÖěHÄČţVŚ „Á ­ÓFŐĘÝđ:«Ü ¦đrí˛Ó˙‰VŇqHеw'\őV Yč ©Nrr¤:/ëŁUŹR—kß%ýŃicŠ´Q•ʇ,›µëĺ(54Č® 9ů÷e}*ßţż“ÔŕĽJ.ŰţŻÓĹúrHżíŁ s˘uźŐ¨$‡QÉ^9@ż<\jÔ ŕ’!4!AOäłÂ2úť5c-—sxˇňŞ -ÓÄęئeQˇ§Â]Na°Ő(ď)¶Ô‡ń" ¤ÔĐ.3ŃžĆrTËţ%€Ôç(*˝Q 4=DV|Č—‘z›!”úĎKLZsž*B3»UśŽĘ9ę]ěŁ ˙9@[µDÇÇŰPžŐ2›eŤcł_?ÝďÓ’i;ŕ®®#ŚăëůŔj|b|™€´×‘ëbͱ3ZRBKëM®´k\$,ÚŽí‡fĘ|°äݲť{IČő ÷ěwŘI+xęý÷‘fp&!Ëx€Â°ô€‚¸¨ő>Z l«V0hńŤO Îő&důNĽîł”aĺ@‘Ü»Wäçt0Ář-S;ÉúşZhf·°°ťŮşÂv†µÚđa¦TÍúbáćBą‹˘=}#ęblŁí¨ě‡Ŕí ŮR·Ľß¸‚çHĐRś`ůSÁ`oäA™Ń&şó%;“n}LE!ţͲ- Ő¸%ÇžôIúŢugűŰODY¬¶2ŲĘPŹÁ^H0ÚJČT@}‰ŞšV3ăHîĂ#Tďś Ţ‚>uXŹ‚Ék‡é:łw˘ühtR…D_sů.‘&;­ĚËzrj§»Cµ9,Ű  ÂŠ$BÚŻ»čŰ+«ˇ—łgÔţ<#¸öčö ”$Ůis(Ő<›|ý€Uş·:ŕxŐ>”Őá.µ*.ľ.{ˇŁ\EĹE—!J{ĆďqA €ˇ5ácpxháý¤ ©n uŹý_RľZšž^Ú^ąóW>ŁÂ‡ú´¸»ěF˙Đ%@Q ¶Ú´{ŞËĐ éŰđöňT@c€Şg ęÁşn ă"©ĺí öˇâČ%ĎŽäŮs`GL×ô} ­{kŻë¨ŐŽtfZZÉ(^ˇđă6˝„ő.[Üť/ZXF@ŹB‰ĺá/´;S9¬ăăJ•‹˝ÖŠz)Ż˙*G6†üš·’€‰łÜB%mg¤ěÎŞC«Q–«kčzÂ…d MŔ$[¤l•¶ßž­ ĽĄdţF§¨"]}żqH˘;Ru,ĎáŹCĄ$¶Ş]ŔĄĄPě“ŔĆ´+ô>± ›·’h{DuĘ‘~ÉtR Ńć˝j#)Ö‚›ÇŢ>vż~?ő}¨uÔĹoáﮢ÷ĺQě2Q¨ČPł»˘ !g¤î^%·IµÄ€¦…lzţwń¦Ç:˛3ń +÷đłéxk´ËˇŰ? Đţžôś.Ĺ ¬g“´§B.®żU?ÖË~)¬<'3ĂŠť?˛:b™w2 ÷.Şr`Yk´eBϾ߬¤ËPđ«,o…w±.…¸’Ű9ç^ř«ýźěň…ďi µň_ÁÉ,Ń F2Xٸ…sĂ )|«.ÜâśoĺIDä ‹Ú™¨0¤řX‹ ţG…cEéŔ.‘Śçtí@˘úĘRÔů 4ڏŠâ#űőĄ˙ćÓç §…ľÖ㥶đŞ|‚’VęĚPWmAÔÎ÷R~F‹Z!ípÚQ‘{\iS`ŘČÔ’ôçÄ“–†°®Ôĺ|ËŔĺ•§ÁÉ+RăîĐđ—̱ű!Oő®vĆ:ť=cÁÍî9xźŮT[.„8Ią°Ţ"ęíN§X=»TŁpżą7ÓÁŹAĄÁXÂĺ+ěżö]oSCĐ’źŤöÔ6()#P[!SE}‹YŽęMÝĎŚŽ„“Db¶F„TýÄ+š1‡QÝLµ´Ü¦$Ŕ;HbĘ4Ůc˙+o$~ÖËyF#•ÚBU$2"t’t—=‰ł?lzi}…şY TYAA¨N~ćY˘°ľżŕjn E@ÍţŮšP­•Ý»ĐúÄě±B vÔXV‚°Ř†3{ě|…±+€§»‹ "É÷=0ÉŃ VFŮ_˛+` ű…m)0ĺ!›ˇLóUĘů˛H?ĺdÁŚ{Č.` +ç™|¦Ąąý´qNt čE ĆMěݵ–š—5ô:>]VÇ;¶ôVMÚÄy.q¨Ě@q´Ř˝‹[8ČĺŃ4E%bÄM˛Ľ®4Pq€#MáPőNÂxłŞK@ÇÔ«ó; ŠölDŚŘo ß «Ů8…Íx·5ßW"SDWáÂa&|L ˝V“l!ˇŇK”±t‰7´MžŻ>U3H<Ŕ®eúâCQž%›0’奴Vź<Ľ·šŐl]Ć(ě’ş/t!…–LŽżw*cÄÖśŻ+íŁ`JŐŤ8őĽŰ[»ęŰh¦8šRV`_U] +ËF„UČćěýÚç`i{L˘¸@MJíRôç.^Z<Âě˛Ý\őŻÉNją×róŃßD§ă·`\¸S.|rCç:Ĺ+f…=ÓĘ0Č‘¸Cj®” V +Ż…<p•‘›ÂĽKĐj ʧĽĄ˘Ş:`z6ąkŘgú›c†öž0zĚv»%ţý˙׍¤•Ř€ěě$®Yy@ÉŹ™ľ`˛3ľ|áéÉZµę q¤kˇ?ÖđzŚÚŤšn´’ŇKĺ$™Ű;Ä©š) 22?Ť5Ý ňö‹÷•lKŁGÇîfťuĽ€°xôĄW:Í­FŽW˛ąĹ޵¨Ö”Ř耱¬QĄ!Â?ë@‡GĆčÚWc.óôç…@˘’łĎ¨Ž}4 äF tĆTQa«8śĂŽcŇěZĽB;d™Žô3d95,ÓOétŹ{¦Fí“0sAć¨đD„BT’ţ‘ÄWŹ+űp»âß_¬Z$$‚*ŔŘ“•3­2v˘‰ U‹ w §÷w̡  vŁ«Ć)že9‹úő´ÇÉL*]A¸ĹD#Ç$~ö”‘ÉŻ!Mě<&—c!~=J­fë˘fśf]Őq;ž^sź®[č@žńgüŚV?“IżÇ• +6ď‘#ůťXßŮšŤžĐl+^Z#Äe/…¸ĐÝŽ€Är§uhyj,9 RŤ˝' t=!UTč]öÖčráĘ´ŻIÔĐBŠŞ«Fw|iš‘óV·ŹšÉ:ŕă^D çm%Ű*mŘÚTˇ6ÉĘÍ[Ť(ĄBn+Íf§bU3Š{_|¨^—řUp˝žác5LĹöěÂLdW^@)z]ŠEWx«Ĺö§+U—ĺˇ(ôK řęŹ÷° ĚöEÉ}óRc‰"aÖ.pp5D¨Č†ç÷”FLuŘGöqx©ÔćŕĄ2Ŕ±$u–"–Ô$ť!G,ˇ˙ę>”DĚĂŽ-âqsÚ ·°• +q‹…Ąęú­!remXŢç:(ńĚ—ż°‹<¦ną†IJ1=1ş `űîĚČ2 KQ*T=îý ]ĚćÝ«[o[?=T’ Iü.ÝLŚeX6Řwë˙Ě’Ţ«[ _~S§j)2¤O›5×=SŠç®ľs‡ôbŐď0§Kb± +‘¨«#L;=Qm‚x&Ě2!!#´%»;rO!'xFrPďNmf˘iŻ+Ů´XRT^ϱ`j‰'Ű6T‡Jx9˘—bçřćć±ĹnĐ[ă‹§ş°Ž“rבneŁĘÄ|ŇÝ„ł÷ °Źŕé†}áFe“Äăч[b{ Bß ·ÓÂŢ•ŁFĘ‹oĽ»›Hł("¤ …^nőđÖ›:ÝW"IŕąQ ÉÚqly:ő…PJw”¶ťčˇĹ| ú1g<–ëťED–áăqO«g˝–ŞŘ€˝¦ŻÁëΞ$ĐýÓŃĐýó„Ď=‡Řt]lcvęő3ˇŤ×‚zź©čÇâ»LHţç®`PVR`F&…†÷ëi g±yČűSĹč{§Śë,ťéEoĆ"[Y•7(×Y‡Ŕ$­Ť/II¬Ď,¬ĎălŢWhfď¨mî´s|V,ťNßŃ>Ďg· |űo"|Ś5#}_ę-,­XŘŰ„r‚{-6Tź1ÓÄ|łťq×t=ÎWßAőyˇËł>},‡žŽóÚŞ˘ýlMl˙XÖ šn`|4 eŐ>>­ż.Ű.ÁĘ @ +żU‰Ď«ř°zK ôŠFBť’!ÚjlčvÄDN:°č#)éÓw°>›l97Ňł{đôWś›}ř=.  +ô °Ď!,aŮ—+s…§%ČD2ýĺŔ˘(eŞ{j–Őz(d/ÉH_µ.µî†s}VŽŔđBL}h8O{őEúFG ’N•H!Uł—z"ꉸ±ůeh5ývжĂeťDłÓzűsHg…Źî×ďGć[ÜÝŞ™BOŞçasG·6űűľvLŹŤĘŐŢť»/:}Ő[ßŔ:ŰË:0Şé±48y‚?Ą:X¤LpëJŘžöÖ¸ †ÁČFčBČ%íĂ$v&‰`ޤćgMMj’p¬i–ݵęÂĎ«ÓőöıH`‹0MîÝ3Ŕj­m~@5"D.2IĐłÁG{ť˛äxâ|ÇWžş'°ţĺxč$ĎËDn$ţI +f°žkŠ Ä3 }T`ďżGśZŇaîbďťż=űBëZڙżEô˝ë\9ŕÄuÉSŢí +ŐQ7Jä1ĺ‘$¬Ë¦M‰Š)„Q<9>PĹTŞXŠ#•R>łâ›}ýs˛_ĘM[¨ľţő$\6ÍVđµg +}ŔW˝÷HyШ§dĹĆň‰[dÎř¸dvšéş|¨DĎél¬GÚA›ČČŔńhŃŻfxNL>—BÝ?` ×°k¬f9Q»""r|ŞN4Ńą”ňµ0HS\Jy÷sđŮ^ćy°;{îőF”ŢňńÇ!ŮÓÝv›˝Žg°P^Ő›zFč{ëÓ«Íâ/EÔT4WŽÖt‡ŁŤ¶©E˝…ĹÖφ˛k ĹC}VQţmZő *®°ÍbźI‚‚<•¨¸+kBav§¤+D}•§)î:˘Ő¸®€PL›ň…K"JÜ&t%”ąNżŹnޱéŢałä¨őŰhmŞ`„˘ë0'ę%śLއMć3Ĺvě——´s…=yŽĘrkę˝ůo4ęđMÁ&Ţ‚10Agg""´ÇX~ô¦ŹuÝ~ŐS s c¶îÎIyz¶%•¸áRŔă˙Ą7äÇ_˙ĺ+tn" =ˇ·çţzďŃDšĂîߣ 'U˘ČʉjÉF_r:Ő´€6Ő€6©( ´Ua®€: +ťö D”µŻAč đÓ#ĹVgz˘PîśnNóŻťP_vs4`¦sŽ„¸ŮÎÁŕ;ť`!fÔ}—ߪ„˙j4ŢčĐRÂsP˘b§J ^iśß 9Yix8Ă€ úq6QýôYkéş6 #iňűqł¤€G ’îžŮR3~ƶWú,®ĐgSŻźěndľ†Qaű,°l÷đÎá’ăDŃŽl3®ţ TÚŚK…ÖÇBË4äJ”$"żŠÂý©ySFŐ$D+*˘ŃFq÷µđI»âD­¨{‚2nDt–o>XâRPž‰ ˙ń©łí,Ô&ˇYŢş%—3§écR©‡÷{?Ľ ż\¤3Ői0&Űd#R{äZ$Př‰=K,-}V řÄí<µŰŚu*ô{z†şŘl6ś?‹*·¦ +ďôi6ÜG-  i=D‰‹Ę¨!« Ŕ ý +ÄĽĆÝ™Ůo§ý’/ż˝ű%*Whň˛ľ SżADg‰ŇÖQ¶0–äŻüé9Ęč¶ßćźń©gł§ęQ§?4Ń˝ÁÔ‚(…Ć/ )rA¸ś&3ô¬éĺ<ŐrĄĎš"ß¶7ŽĹ±[säM§ĂFÇ9HˇşmYD–Ş ¸1űfőŐá‚Ű^?ćŃ& ŹÜ ŻöLě‰ÄŹ©W p‘îÝb脏›÷Šz-Âw"Q\C”HŽôVu‚€}Żh(„C-箞sňÖľ‹8DÁÂóyšŢ S Ş8ÂĆĐ©w7©ôgr +/31L~Bô@ | 8SÖqXíűgbz~?Ř KUÄé +% +Đ×7Lęhň–?r—ďa˛H¤ĂÜN© +(dÍŻť]Vă>C+RúJż™Üĺ*ŰéŔËq˛ý}_©ÉLJ§C`ŰuŕLDŕ8«y$”íOµ¬ŇŹ÷]—TL2ZžäŚCི*\#@eY XףCÚ­×ĺ›ËÚŕ9€Ą‚í*»đł»Ż ”ă6”LSŐnQ@»¬« OŁ~f?)#V]€ŕh,#Nc«=tlCKť¦ýYPńąąË†e­Vzu†I“-Q‡…(¸ ÇO%Ćg°ňJ ZIÖ|agă•ăBY!âö˛µQE›D•ŞP„QۢĆw…3E¸ÁBRëÝ5)JOÁq;6ŚhY1E6ŽĎWʼn&ˇ"(&ŹÍ‚Ďf”t§b<Ć­:,ﲎMż4ýú›¨vFŞĆćČÖYşýű­T±ĘXts¨uZ×p%öPíÇĄś6ł©ˇäzr°ŽXÎuŽşČAŰÝpŐť!W¨>çC2«ëĐ0CpŞÄ'V˝+đBJ<&:§±Gŕt荷 +– ś˝{€7öĹéRËÚbBů„©TŁI#¨ý4âzľ•?jÂdFůÝjW8§WݧČ?ÁăMké–%XK]ۡr]AÓ¬˛_÷ˡď[ĘzUÚćÇ’t˝bZ»©(,źęRő¤„®ŞŢKŁ)čĚ{š¶â«­MôĂ; ŁcÉÝ[PîNuÝŘě˝WLćÎŮHŇÄG‹Q>OL(…±AffŞ`KXヌűď(ÖDf*ó.ZyT€2x9jyi/‡¸FĘdÓšŐ~ŇSxĚş˙ý8$Čç>lIív^äăľŐ ^…08d8Ëq\¸ćË‹}• ń«ˇü-ŐČ>ĹčG«¨’˛ŁlgßxSŹÓÔף#…˛9ߜٞ=V7q`CťóĆśż‘]UiŞ÷6©<›8ü6cĎ(cŔQť»»ă;ˇP®ĽGŰŠŁÂ)A1„ÍĎęÖç“HęĺöMN@ŵ×\đµ±ţyń3â÷¨˘‘’ěUWšÖýC/ŞYßÜżńtęřzTÉŚ {üfđĚL)é:D˘ýEoL…Xg^-”Ąac;ĂXőó)č¬űYîkyńWR<ë{-KŤđśŽwşvű5Ôx’3§ ŁpŐ=Ú‚ŚĎçZľŻRîIXVŤq‚5‚-‚bS.]eľßn?;żuÂ&0W4ŐlÖYÍhîö ř·ń-1¨ß|LgĐňzws× őűď +Tps(®Ý&Ůç z,B8ýąGŰ:έëěő1®!çG![Ĺ·Ď .čęM$W×7ź§*¦"âqĄaÜô™Ů§}?nÎťĂ2'ĐWií +†ŕjˇî˘9s'™Ö†Ę-Ż–u©a« + !Ě}0U„öëx,ě2ż;’o×Yp[Šw§ąŁPš +ńp™FÔ#ŃZ¨ź!zJHăßCŔZ%ŕ!ßC$ţŮ9 „Żr|LxGրُµ¸­|TčĹ—·%Űťáy2nĺŻI­Ľ‡X˛ĎŻ2Sum˛`ďŔěf?«˝@î•rťŃçr¬ň¬m:'˝ĄÁo¦‹ĆńŢŔ,öŻ9đ„qŁ{R|Ž6€ž]B1Ám;Ô +”ŃĽU8ĽaĂ@¶CađîŞqĎÎMŐrF ßĹÇ”®ŕjţ€´čšbęSśĹűŁßÄbŹ’˘[ŚB2‹·f?5x ^EgÉ,ę†>5żÇ8ŰPD9﵊Żn‡Â?&vűW`h4ůM©Şléqű÷<—,ŁíbŢŮâsT¸2pÔWmÂ0á~u1躥}cođŚ”⨊ úl'™¸íŰp’ç`6B`ő#ŽćZ’g~Q˛+zĐ ş÷%Üćú*Ż+,2vƧ‰v¬l*řU7ßE¨ÄJ«Ę+°îq…ۤAň«ĆSîÂć·ÁĎI#@±p<‹ö"ÓwŽůVl ö!B"şÂŁBtłĐW=ĂĽî-©ÂmĐ’xoŻłF Ý[h®ZHX€>Ö{Ä~¨´ĚĐ šOŐÚ°yÂNśň\E'á°‰×iJ]t¶Ç¤Üěń(ît 5Ńú6­~ű$ČĎ•»5ăVůć}…5¸vPô +aFdEßďk¦? W„ hČ]ööP{[´OúahN˛r‹ŤE›źn0Ţ;a Šzżä\ő|R€XLtźż†FÄ~ˇ˛ÚŢ٦X ÷ăÖĘvDa\\(Qđ2sçŃĺU­Ź=Ýă„p.Őć +$z űŞ·źt.aŘe'@l-Pńś˝`‡™*ó·*‹Ä4ôÄ®ďŚçE_éőXjîŻ~‡őED“ŕµs–QÂgZq d±¦×膴;EI@± ]ź.ĺ¶šVťĚż Ž`‹+(i°ŻPK|5svm%#şf|ý:T0'ż~"¨ŹWv R™ôölŰŘng™KY‹ÚBĂôŔÁw@+Rm(Ĺn3ĺ‚°8˛NĘÎ#“ţv"ČVl¨Ňžßş­0ĺ•“¤wűŢb B‹żt=˛Ř4\íů*.‚¬©ňÎ~HłŔ=v‚YřÁk@jWeŘ=LŐŻa k¨J`6IĆKŐÔ>=ž¬T>ú0pĂĄ+“Őô‹šĽ©FŚxŮÍîÔ:Ć‹śˇë›1`[0^$¶Čťj—2öMŔß×xú… +aV5Z Y{»ÔL.€ç +W7‡PäPČ7Źç.·`Ř8ůô«h\A64ŹŞ!KŇŞd«7Ž~§Ĺ5"?€Ş;¬˛÷ÇMqöŕ<ÇQŔű|3ÉŐ/Px@Ýčďá( _é+ĸ”j®`ڇäVcuŠÄ^Nţh!ŐY>’.ß˝î·ÁF†:˘çS§Ďj/ĽGś‡ضoźß3“%}jřSÚÜŚÂX%w ĺóáĎŰăçíŹÂí[h{gŻs«-nu]8-X±Ů8DM›I^řÜŹî š—eĽ‡âäŇyÓfO;-ŘP¤ßÂŢŢ*í>łbô[Ž:§č¤šęŃdÓ˝I¨É%Çňk­ó=˘Żđq „ůB‰Fy0Ŕ Ú đ%]¤BI&´-ĂÍ©śŠ#›p<23şîv2©Á >ĘTű+=†ŐýřБ߬"„";Źî,ÁîĺX‘µ8ÜĆ_ZGU|4DĘňé.°#¸ĎjÍ€ČÔşă,š}`Ójh™ŮeĹ ŕś@DŐ‹Ľ¦hńá°ž‰ň’[ˇŠDě>-úB®P r$›l$<RÓńĚ©ńGY!4Č»ňáSjLěŞîć{¦4]u}fŔuhÜČhæůq^ëx‚ŕ´Sú7'B9…üž5ČÖ2•˝|s€‚ŮĘá9͇qţ%ěMW–¦h’tşß°9}Đşě͆ ÝCFEg ~ xM:B'ä Ú7çŮ+d(űěń¬A![aŕWű–ĹżĹQ­›¬_  Ź^¶Bç¸/˙kv ¨lJ~>c˛ &Ň•S!ó`ŚĄ¬'"5ŃŽ(Ć37FW‡Y` LŁ3«ť+NL-äÓ„•äĂlĘ +}!@ěunĆ‚z·ýČ”s©,ĄŘŢ~Ż@Ô’5áCÜúŮƬ_=‰k=+ĹŠ¤Ú0š ŔĄş˘1CXć +Ź3ŽýŰI”¶K®óĆ`qďgdĽ·ĎŻŠče*xhąűÚűgzŞó*aPD¤”ĂÓŁ»ďőŢ&ń +AĄCGýĐľ·ţub' †X1 7Ř{‹ÚfLý`k˘SŢŮhBřZy†ă$÷@›v•úX´x9ńó/^8>„‰fŃd†ëĎ0Ż‹ô°íĐřúhě–´ Č…îâAŤˇŰ™â\‹ě-ŚjáDtęřMǶ"*ňť}çŃFŕĚÓÜŐÝP«$–‰˝]łSҨ0\tqŔSďE¨‰”ĹărŢÓBµśˇ°Ş ”¨ 6t¶¬­Kńą\zŮtü2–dD±źü0@ť¤„§z3bol@ϲÚ÷HM;¬,Ť[+ČŰčń7ô‡‘<‚aăý‘ŹX|‰ÓVůű[ +śgŹťźAˇí\Ő)„ha¨Rfo§+ş0mGáoŹ l`-VŐËŻbc śµéÇxňÂĹqg ­`?”VĎ4߀T·ŔC0.Őö3Ä*ĚújVĽ”$)c˙`”3†–•˘[˙}3ÄféťWŔŹTf"ÜĚ}†=ů…20?É÷ă´ “WA>k K®•i ázJ-˙B%Śvęž—E˙PC€öLÄ ؉©†OĆ/4ŮłĎ3Îß÷îŢŹ†ń@0'†¬|#€¨™Ŕűŕu臄©·LPkÂŽFtĚuŮ”ć¸Ó˝Ą2|n*fŇm"®ô¨™Oy”+€™îő ±łÉÜčĐ$`]&xctÇy[”l•$!»{möDçďqÚŢ|#Á<°Ü<j·h *ŢeáMT¦Ř||€:żńţ ׳~Ťş˛EňýĄń «ÚçľářBIĽô˝X¤?Ů—ç윥•o>Fýt0`«qůÄX÷ M°F:Ćvl˘fčÔşż#ÖíçĄ6 ,$ épŐ"ż»F„m2Ľ~›łĎY5y/) LűĹE'"°&u˝ţş’TW´°ţDŃR' +ćŹçitÚuϰÓHŤ Ř?AŠyÇBÄBʕ๝ڊ +†:Ę«4`ŞËčâ0Aí§GĎ Á &wé-âr§5Ďői|Ć\°÷縬†¸ pĚŢÉt¶'(LNĽ*ĆÉE7§ű·3ŘÔß_ŁvҶoNdBĆ6bö=4m@žßâűŕ„:*p„Eâ‚­`'÷¶†öÎńş 6őč٬ĺy(Ë‘Žą§? /-V! çÎôň đqZŠ`“É3óV5 )©| aą{”˘ŽQ(šúU­Ó@’”,Ú¤” ę¬bć¨ty* ţű΀Fî° °ž0^Â\ôDňa.ÝŰm# âʇ[…"@Ń÷‚ŨßoqĹIoJ&±®íé”°ýFéfÎŰŰy[NćXâÄ× t +ŇI›„˙Ş·¸Ô`NĺĽĐ7'jŔ];”˛ýÝ÷¦¶u5=L_R¤/y%fXÓ—d +T­Ă×y’ĐvÍ"%b\Á·$3´ąÔ\ę/'eŻDţP¦ŰAá,‡+Ő“I;Aí´Hăŕd8S $Vˇ¤枀wřCz˛×›qĹËFMŢ©d§]N%{;ţŃŃÂż=Ó8ŘX'`ÉâA¨Íű‰bˇRĎLd3iŹ´ý±7x™üQĎ´YĎ´YâLHDä|w™•„Q5ŚC˝ˇ |&ň>ťČ±§4˘¬dÄČěŇYŃ^a\ wa®4n¸‹UĚôŇđ(TibĂ^}U¸tÚjQ Á1»!XĽ\€|e]J¨»î„"Ż÷¶śÓł¤úH¶4:U1F$Ć›čäĘóDÎčzQ&žęئ<ñ"Ř<88Ţ`{Ă’ †ް HäçíĄŘ‚ÉuĆůĹFű” Î0ÔI×/čGA^WnŠO¦ĹČÁÇu%4ŞJŤšAν¦{HPř#‚NhV3.€B+jŕď<ËL_O¦vu§Źk/׹Čô®öŹw†…‰Řa{҆FĆšäsíɱ3 ŘŔş×Yĺ€+řŞ‘Đ0ŁÍ:Hu9Š×Ř06SľˇT—ń—Âúým ą]Ä„Č7Ç!M6Yyú{d˝‡­€ŹĂÎ+µ‡çţu2$ş2řVćÝ©‹­ꮆĄş^’Üżśo„öâű&ą¬ď§ˇłFďś^}öF„ôеCţ=`'rěí`QWÎÇ̨ÇĘfRbwÇh¦šľĆf–lÍlľĎ‰ĺ.ŐT"Ý$^ˇdĎ,"ľhJ](pXArËr.âŁD6φy°žAÔ4§BënˇWY ÓM•›ý˝j0ě‰Ŕ_·Y9DTK‹VÜŞČ6öćý–«ęÓv9ícâGą'hŃý«EswŁłĹS¦ůźp)ßż;íŁž<î-ějĽú$K¸eHy<‰î>-^~8zKĐnN€:÷{Ä©şĐűW",GűćD€ď, ô©Ťô&§ţ ě=b•tňŁWú= ł†.ČîŘ>‘:ű}Ĺn©űZRé¸đYŻ”ź +”bE b‚”Đ«ë®!ĎÂnŁ@’Ę~ţ :)ű! UŠ5ęąoĂĄ +ĎP/ĄV=?ŃŢŔŢMřćžJŘ€ş[X=šsI¨……§â¶Ł›äp[k©&YÓ z˛U¶©čôů]Ýhc‡S4š0JŇĂPöD±JW¦˛Ř¸Ô; qľŚ©°»'C<C¨fđä‹ĆF>űĄJL÷ď3¦:W„%\Ă ŁłJX·L1čq.Ť~´Ż2ÂůnŹ2(`Şéüx|Ňéz]eYą)@î˝ruî‰,¤ËL°ˇA˘:ÜâŘ y4L«Ő®ŚŘÚ¶Ďw LUwłxU»eą5ÉdKĹŰL-ú±HLşfHLçYË_N^•ťFţiuµCHuv¦f‘{ ’^s©Nߌ,€ş‘ +‚„ + Ă´AkŕÂníh€H"¦*ÍÓčlI™1÷ÂŻáž… Ç& +xwĆJXf×:Řő­¸q=" ŐYęeQfbK8—‚’×ݨďeđśkÔś¤N'‘Ł7'‡°HĽ4Iř«Ď /±¤¸S6!˙?kď˛k;łžçÝĘj:…¬#ŮL6‚Ŕ€‚éÄi ¶,Ă‘äîSĎó9×?ÇŚ¶ l¨ˇýŻńM’¬úď +ĹĚ‹lďśw’Fuż0L®O˘«{pH=rˇ5@üVíz†şx§ő‚ ľ­[čéy¬Pp§đ–aUÇ:RŮ ă±ňć–Ó”]Ď`/ą›šď+ů€PâĘm›Ěřž,t€RlTkďdfYˇ +âŘł.űÇKÚ¦h\ËĄ/2ą„9A<Şu±řÓŃf¶mŔť]wbaE:ńuÄ †CµŃúŰ™ŽlOŇđźG.´ŻźÉżGŠČ ¬çÎríŻ‚ú”mDž HĂ__afŠôŃqçĄJ˘Výş}~Ń)˝âĄĐĚSô/(DĹý=˘Ľy°źźźb9íű‚KNᬛBcÝy0DżšJ›ü<4¬V˛Řq ő%™M经ś +s»‚Îč Ô䧎à ç=úĺëÁÂvŃŻ§qÓ‘Â6áłsąÝ׫ ě첆s uś0&p‹aŰ`‹élBeK+HR¨Éx© ĘgUcD˝ľŠL׺1×!‡ö#"_ŞŇ Ŕ®‘m´ýp ¸y.Ąm×NłR<ѵŔË ů ŢĘ&˝ŹŘ‚VÁ ćµĂˇuţ«WřVĚąÉ2fdCšĚŃľÖ61Đţ! g:˘ľnßÚđŕ~˘UŁž¬‘$fž yâčXü¸ +ţô!ăąya )D Ć¨şăĄŰňĄ€•Ť‘^Ńî!¤=ĚŹă¦ô-â}ä¨yä&C?ľÜ jKö?Đ6Hy^H®˝öom­ĽB‹“*Á<«F§;ţśęŢkŇEţ4Lhó€•ßä@ľę´N¬·ÉŠX?őe„CO”ô}Q`µ'wďú:•ÓÓK„Á(9\F=Nˇ™CW’ŐôDÎd®Š@WÝ_*ŮíĺýR(Öň¬K±VzTA‡ť9•<— +I#n·ťăľž§nÝ­ýÚ›Ş|‹Ř§BSŁţô÷¤m6ä.žtł-ý~Vímy řîŃźa-ČBś’Wµ7 ov€úČjťĄ®í9 Lˇé©]đ="§ÂŇŢ=íýúĂqŔѱj?2rÉÍ}e|FD}‚ç2>$űLßÂZŕŮô‹M§˝ä[ăŞŰN—•vvŇé}Ôô! 7f=˝µÍĎ÷eMWíŹţe󷑨2b¦}ŹÉËç?[áOšŐo{ô{/ߤÚé˘âĂépmŘŻŠ¬áB›č@-ďŔb§}±ďű¦uu5.D•tný8PĄ‡Ęe×@kgk}gkÜ´z§ĆkăOJúy<“u>˧+můÔîőtźţ=Â#+bLŮŰßÍ€u °š_±—ĺ¶ŕŘ…żöź[Ú-açŤ$÷…A†Ű=’iDÓiÜf­¬×ŇýŻă2^—łżß…VOPW¸Řţ0çÁ Î;¸ć•4 Ä-ĺwó"­âŕÜ–˝5Ąáź€P>"ö&w9I"ÝY/ŮŹş÷›µN ľ­Bz(úźR2üqmĘżhňë+Íýc"YĘň˛ľ¦é2ât“ňáă¶K/`ę {ůVŘë®Ó#ČPŚĐsčdVü&‡íÉđ€kí(…ë›őęq:?׊h¤ÉUű|ĐČÔQWśA–ÉőuŕěEWxG…»iוŐ÷Ŕ䙜ZI #”‚^/Ć«^ś·±+‰ç-­ŠÁůzÚ3´˛zá2Ď< oWŘAúó‹BËFCµtK•',¶ńC*“ŐůŞdݰÂ÷0Đm óoÎ$Ľ'€˙AݬĂj±~b`»ľ +’ŘçűÁ×SĽŇ8žâ‚ĚűűgΨ5đ뤓Ś ŚyMmQn(B)čBćŔ(Ůź=ĐřÝpş.i“÷dź™>xödN<Ľ'‹Ŕá¶<đ¶bĆś&íú_Žg.’‘ ĄÖ÷€?żł9Ń&sve_ľEŃ›g½ĘčU´Ž,.*Ó¸Đ~Dü¸e~„Ń•‹sKÓ¤Óa2V!Yç>ăhŠŕ1ŽCŠ—ëtŠŽžśŐ!Ŕ>{"Q` ŻăµelÚÔ­qěMJzáćm§OKúůCŰż_MSV'ߨ'ňo˙í93e§Iô•g»˘¨ś>\bČ8ŰűÁż¤ýtdEg›¤—úţ™–ťjk÷éFMuo{=;`Ŕa(ä°çr^uwĐîějj™«]zѬ5N·‰ ÇF„ ë,ń‰ODK„ť[#śY”ă1é! +eS˘VřE{őŔjţŽ«—Çń×$Uf…·ü^"Řqv»yŤąŰ {ظWáüTAȳ̨9"W‰šAĂđ¦Ě#÷S®Ľ@łáÄ’ýŹćęôŢŐ© ?*ĄS·†B·‡ĚL #2źGd#ˇ{^‡%Óp@ßCĽn‡€ďD1pϧ(Ú­O‹“5¬×ÎÝם5ĚůTĹĆ× F6ľŔĐ›$!ţ÷Čff{ÍČë +”©JÂ&;w"ř}Â1k\€ř‰h‚ÉÔ9Uá¶"=˘ÝŠ0Ńß§š¸žÝ[‚L3włň6ŔďJˇ€Š€ď1›ÖőDŔ‚ŐĎĘaťŕs«ńî„pÓęűJÇŃÝ®´Ôx‘ѱUŻKp—"RÁCó"ťJź,ví?|ŢĄy\¨–»ř=JâJ%·jŕ»ű@zâQđ˘_Śóż†b ­KÝÔáč>^0ŔÓ,^đ qaż‚Jɩަ MO^ŠHśžŽŕ1]%/Ô×;{Ö:ĐéŚWĹŠÂî}Zo„9\aÍ€9-%ާLE@Ě÷‰č™äG0źg+ ڧ÷z@иżNŐťďň´s_Ńéß[áF7Ž=čµKçaô‘ŕĎ"Lü˘xłű´DýÖ«n9Ž÷Úźâ­FW}ý] •5€ŇÁqÖK†´ Ś˛Žź¨$~ßţ}·öŹ`&ż˙ŃP¬Š”z‚ô÷űĎťWČÂxßvöůp坬€VQiôOŐg 8űŐ±Ľtëš±îÍMé§čx/źűW#EY;ÔEŮ8ÚOЦžż+Ö`„Ů\kG§đ‡ÔĆ8÷ęůţíůCXŐč÷p%( 4úHîé]uűű5“•# ďrŁęk[y»ó뎆fQLyřŮYv=ŽŘ#}z„ŢĐa äé//$lGä5^ Đ;;OzŃ,ąv5śů=>ßč%÷Ęď™nđ +`ç˙ĹRäreżŻŻ3ŮóżR…í×ÝGŔ+‘żëC…´ äÂLo8é Ś\žÖڵ¨°ëgŔ^!ľ%tźÇAôN°#co%žÝ§ŢĐRţŚđIhűIxQdaT“ćłQ“ľ/yîKŢĂH4ŚF:ů_ëäJ,Éo×ă{ţńçrçg"(B>ňq ĐW"ÁŃě BŰy-EÄ49^™C ę_ iŕhrĆ›ý§%ŚKô`ŞĘ´D/~î®: ~şęł˙ŃJmަĽŘŠŹ0júĆh•!F ÓI‘el}ăë×Ů®02HůiqŮĎŢ%µ&ÄJśvX3¬ …śĄ«¤í ąÉ;Ń·Ź_“\Žáx ]âz9W· Fu˙íTŮ?;Đ˝„Ý䙫–… +ę8.ůŚű Ýż3ÖŢ\Ś;Ú0¬§óuÄ!+úđpăíűç¤?2mv6Ŕîć çŠ#1´2ťXʏĂâjlě׸řaĚQxŰ™Ł2Kz€vYe‡zË— ú$ďŁs Ăä#âĎO2U. +ŠU-ťôÁ>„ä5ÝČűÔ Ćö.˝lĐ´CVŰG"řĎÝúţ!XG±żh» + SR’ŚąÉ*Ŕ†š3ÂĘ ł{ĂĆß}F|­/Đg‚zéBÁBâ5W*éZĂ™­§ËJZďĘyí;ŢrÇű;ÇoŐ%$´±e Ë.|ś¬  ËKeiWęă4˘űčs&“é:a|L^»"5}ť)«řžĺѦíHŘqîKfé!/ŰÇyȡ3ľéTđč ëúíN"î/(Wö‹!Đśćz­đłX¬ÖÝë;ű]Ő|=şŘaW“î1/Ě÷ëܸBo-÷†”y Ähń´VS,@üf`B?–čEâÔµh›9dhßöĂײެ˛˙¦üý0dojFΰ€Pn!Hžˇ]Ř潩-ĽPo]}¶ \‹ 0iÂĽ«˛ŔÍ×ň$]ŕ +ĂŚvG’ ™{đ8ś˛hćCŁâďY1%^;Üe‹é +¶‰ćšytM¨¬^Yp»…2ů™ ˙TÚgÄZ5W3Ćëa©źaUYbt…Š<0bÎ=µyţ)%:áżÓ9ŢsŞŹ°[Sc°ĽÎ›yÉ/¸o0§%t,ˇĚË3˘fćp;1"1MÄů…â[OYú%ăÚźă=ÇđďóD TşyZÁ!w:ąo»źŔŃCj +çl-Bʞa> 6x©gt+lÔ‘vä>)v™¨‹p]¶sK.¦ű¦äQ„¦ËfţeÎĚfq +ą×pLşÖŞÜy·ď™QŢZ‰ }F0.˝k·o‰ő†) ňl¦OH-É=q,RťwIüDEÖ.ľśfŠx«9h‚ôWé˙p kS\'Ă\Ćt¨lC4§>#>věťř~CQH–&Z5écł/άÄEěÜ$†•Ď3m—TGôęň{ź/m˘ĆB§#6Ö` pTĽ4E Ě"éCC 6c“7]Ő,!H–(˛±«Öb.Ń€ˇ[üévš›DPŤTě·sÉyĐŕDʡ˘Ň0n3Mxí‘+`d^eôŐ/ŮEfA›Ŕ4Łśř.#ihĘNÂk€ŃFű!~üç=‰iihKĂ ňýŹ·‹( H—©Ě˘§Żßđg F{čS´wBöFÂpáŇ’Cw—î‚]WbŵÉeěŚŔ%€†aĐ´žďuž;­­ýJą×†H˙-0kć k‡štť;t·ą zqn™=ş—ľX^Â_€~!Ł]đ#a_ý‰ňŚEO(—R{ďS­÷žwůź0QHčĚžR_šŽs>ô横óďü4"ĽçnĎĚąLîâßŇQťÚš?Kć=7¤†ÄŹ_AD;lOD<I#¸C“VbT"&*c_ţ‹'2Ú1BšC\ +MáŞ]đ‹ôűKĂ8Ł\čđxcb}– ¤™ 8®˘Ćef¤.ĚĚy +yâsźEäTÁżź‰V.a]D6ar˝!9gDT;6CŻ$?茢ůÔ«_ě°ŕű Šě–„~ŐMhOBßÔĐ{ŐŢ“yWÇÚ!č +)žţÚđs” i Ť”]¶şotF$z8TÔGë;=ú;YҨѴć]Źýű"ŤlĄŽÎ°Wn 7ĽÓ‰ÁÂ~‡¸Ť%Ő$Ĺ8 <L¬çŮ7Ú1ő|Ő@–^Ů´ţ1˙*~m˘=éd÷Ü]Â0 +:Ü”Néđ5C–ş1X­zî˝óUeá®"×üŔ7jŁÁľ<ň Ń CŇ7Ď3Śăđ)]ÜJŞťZ_ž‘ÎÖ˝#¦ ]D„8Aňá §‚mö oň% +8eÜzظŁGĽk/ &Ź€,lď¬tŞÖ3|Dťshw‹ *°¦`IŮÂd/o‘Ď^’÷Pčż8t¶ ]ŹTq ÎĹlm@)áQ°ÁűŚÉx€VÇ9KTĽP_7ž8˛•ô]ű§dᢠ+ýiH» 93"—¬Eů„U÷8iéÇ@YüÝ06u Ńđđ^A Yś Řéü 4v¸ÝH‰ ˛\_™jY"¤Ďš3§0Lćo€Ť'Ţ8/¦âĘŽI5B‘0ě?ŁĆ*ŕÚXGdĐfčFŰ¨Ć «•6WݤĂg8ę΢ö$E1OĘ]ŔCF ž‘Ýp€× +îv…帶ąľ|ÉĄ Óâ! Ę—áiE}ÁcŰ•‡ivęR?ŽĄéBĹLÓ Š´đd ýR«šČ#`j±Ö6˘PćçP`ä}®@úy_‹oě•ţÂPt€}‘ˇ(ż%fČĽ¬ĺĚź mź×?@ ŕ§[ˇxôş]¨EľçłĎ#ŰMP]ťÁŤ±ĘŚC?°ýËá…DÚííęCĚ3ľ‰>~iÚŘ&YŔĂé|č«9ĆŰîOó*ňϬ+&»v$WĘ.¶»gĄŻ-\Ť] »ËU¶ính×ы׭źęOűĘ3=5ĹŕŞk3 PĆF >ťHŕ77‹Âżä@GÝ*±Ś€|čĐŁÍ}¸BÜÉ46;˘VDĂźýÎämL:s"żé:Ä|Ý6ĘťÔĹG͵¨í~] [†ţ}8ĄŻŤ@›pq•"Âi"ňŚ×ÓŐzĚĐ ‰@„ĺ]RŞ5÷†ĚŽ˙éô’±ż‹ŐŇ@”´e}LÚą˛™ů¦…j śÄôçsBĚ +Sőű>#Ďŕ{s#-;qásĺ™őHO´)ţľeł­1n'á*ŻÄy’Ą¶“%ŇÜj2‹“n±Ű’n9á0Š< ‰u„˙űŻgv_)ăĎWKX\ţ›ŤÎˇ=Íf°—ŮÚC4mNĚzŮ'gň}ěÎÁČzß,Ţ-´đÎhŚĂ;»y4Ű&v+Žw‰<7µbfUň)í5$eĐŃ`QGŁđ śű»să®6ŃD1Čm§MúŠÉîëen»C…o|YdЉ$rPćŚgŘއL›śčŞ)$€LIďk×ëÂ3ęgKĄ›´ůX’)ôÍPÔ^Âεy‹JŚ_5%ťSŞŕ–üDŮŻB™*: < +„¤…-%sůî˝VÇŽDíj;Ű–ÂÎv‡âuÉ×$­bcë_Rżű“>¶»mK~ŘDŃ!ŞŰy­*,pŤžŻÍ{,É R­ĚQŽAĄŹ0{Éżx~=9^©ÚŞŹH§‡#UýÜŔúĹ.OĹĘPz ŕ +Đ8ăĎOáÜm<ŻţČS8f˝ńéɵí|0'qЉi°ő&2č;GüWß?ýŐßMM·Źňz˘¬Ť4˙Ą×ŰĚ[Yu"¤*ć/„ńtL¤˛9&ŠÇÚ3]`ËHn úH7m5LR€)ëčűUu5ĚVÔ«Ŕ¦€ąhD$f‘±ăô•ă<űR‚k±_?I€ +čÁŃÂŇ™X]\v:Dcq,Eľ¨żk 2 ä „#?dF‹č˘<#Q$[‘ŕ•yi/ŢkeZ¸PüD) IÍbăÚÉŤ@%*9“°Ţ«­…!/›/^wâ±Q˛[š”ď][ďçzą cIIýÂv@p?‘ l ¶c­SZ_ńá!Đ 5ÂiŘ ‡:çogŠď^š3!;JŘ9BŢ×™\y-ńď(?ň‡ŘÔ'âvűnŻ2;tăU©3âÎ&ďŹ2€ ·kOšşč”dDZé:NĐÝrÓYl2Šęń5+c7N ,”á{iŹŠ Ś0ÝlŇüé@wĚ·Ţ–ôŕy§^±ďd˙HQl§é +5 «#‚ř›çúL»ÂĆç@Q©8ge`ŮD\L®ě Őh­ődTP_ó°:ě*"á–ÁÚ´ßrjt@“šý4–ä–ťIĎđ)w0Yô(Sŕlĺ‹XĎĘúâŤŔKđÖ—8zjČĚ=Ś +rnOÚ­Xß;B4˛ŹGШ°(Á/?řÍĎÍé«„vźą]©«rčdîß 8{=v/†2ŢK˝w@Iä:TÓiZZ˝'8D,®ťŚGŇzú´×ÓŠ˝'"n捊Z:¦mź™ĎýŐČ&TËw”·îJ©Š„aŚőmř±x$2i»P°¨>š4“hŠ[¸Ă®yƉńrÇ{ŻŮÂŰJĹN‹çżmÓh~×`yh ó2mŇŠőbMŽđiľě_·ó·ăJiT ;“± Ě ¤aŤŘ ă|›¸W, +˝±B ădí ŢoN*đú`RQ^Í$LÂł×NY ©Ý;^%ßJZú…îG›‰á :ç‘)>’;·´`±ž˛“Â,˝Śű{˘!ßĚGđ’ü—-ěÚ‰ŕT“4ÂSM`¸˘˘\3ĂäË‚ůB*_ŕ8n +á­Ir<ĽÚV§„\:ňlBHě_řĆm$›*:U“Ě ++˛9Mą:ď/@qQ|ŕŃ_ëMB Ăâŕ Ë.?AHĎÔ䙵%ZQî:®Ř* +Á‘ďM¦ň*ĘĆŔ/ˇ%H’îár6v4Ú€âĆhŰt`{ÄOý÷wŻc‹xŐ(ś’_ćI`oFCL'\N·1D‰â2şDŔcČ;÷w‚á{ÇŮš[Ý»Â+@ę6 5ýaĹŕëç´A/IUţőśçŻ_!Ópj>'W(ů4ű/Z»Ož…üDG˘Ý‚4{D;Ţ S^…®úsŐj‚ĄI[…-¬ržŠŻtťÜç¶0VIâUĽ#¬qEŤnLÂ$&ĺEe<ú&PáŻÍ W@1Ň)4n;–űĚ´GŚhŻRĘĽ…>ÝÇGć57ÄËs*rp"J$>gÔŐůšůüÎw:Šé*\Şcôň4 ŔÓZwZjqb˛˛tAÖćNňE˙µnŁ›µ"ŞČ~†/Ú۸ůUJ,˝đúlO3AI˝IÍUü>›řĆ7†řÖ"bˇĘ)ëK}Z¤=4ÝÚžtµc+Đłőó +2yÜÎWXi3a-·‚:.ŇPĘnÜ:ăě2O&Ďu‹G%µ˝éáítń‰íţ:Őď„lG·Q÷C"ŔzŻí,c,jżaĆçfÝŚÝşć·hĎă(¤1¨z! +wAH§‹]%Űpc@ŠôC·ůxľ Ă6ÚfÁăĎĘkű´AŞ3Í—Â •}á¶~‡/»îÉÚËĎ,Ę– H‰Ŕ˝Ę@Ý)«<®bôh/”ćŹđŔčhX˘µŽxëgv•Ýý'ä5Đ~çéE§~ŮÚXHĹ…‚L¤,2?řÁŐ@˙;đAžr•Ôzđô4TIÎc+¨Qˇ˝0OP°ˇ1ĂTći="¤ţ¤›Cí;EOŕâş× ŽNgŕZŕŇďú.vcMÇ,Ż\aŔ.ĚhB÷M5}ŠÇŃ•Ů9 ¨Ď@@Äl°ÁĘSjZµ={ĆąŐµ˘ťä™ü @ç}™ńž‡Ý ˙[tL`*SŠđhŔÄAnařu‚ě˘ŕ:Îě5x6Ŕ@)ůćş7ôv°N EĐY:ă/ÁV´ś×&<Ň7ˇŠgç9“¦ZůEëőĆ=ą-t ”ô˛ĺ¬R€#VŇŘ?´4¶ĚÝčŤQŁ˙ůA]ݰv×´6Ř”«¬H9UZgk‡a1`3*~™ĽŐö s a<1:{"~Çx¨?m)GXđ}¤IčÚÎß1Vąłš +(^DŚŚ;("„#zŃŘÇ„ \ÍŔYÔ,¸-‹ňČ9ĺÇ…´ŠŔé:Ľ€śÉU3ęˇN˘FĆľ÷lďDÎ!âN%»:Q·Ź2˘Ĺ”[Ç–$@îô¬9Ş>h”KA9Ćć(AeWJţÄAđ7čĐNI@}şÖĚ3ĚĂJ©Á ×®¨+řzcwŹAwLĄ<¤Č݇ӫ‘r<ę$±– ¸×FŢll᫼A +Ťrłur@Q\ů˘Ă9|ŕü 1đ-BŃçř*”íZŻ›f“tăuEĚ$L?¤y˝×keÎ+ŽŐ,ńĄŚÜŢŁŰ”»1|ĺjż`9ÇČřćŢ’Đę}]”€'Zĺ*!d1/łě#1䮺ĺČÝAW›Źě€Š9×É7ůľâ*o+Ăiúçä±€:Ä«)Ő§Řnxę/ä&),e^üĆ}†K§‚U1ŕ„Ľ&«ÖČß][9žÎz‰ ÉÔ&¨ęç €'¨<©[qCüPý:•@|M˘tĆÚĹĄîŕXzT]n…Ţýreą¦îÚl +Ç=s¦#W{żĄ>9BoŃő|ĎłŮ"Ĺ ń„ˇ’÷l$GĦl± 'uµ(ĘAA^힯|ůi×ZŁő{+i+ÄO `˛ŞŤ¦PB)çVÔEkĺ•ĐÝH#»s<Ů´–źk[m_˛›#\Ugps%eŔ©“ŚöJÍ­ŻÖúô*ZrĺbťĚčg&q×S€†N ţG5iRĐţˇL˝Â8¸a]2_­mî +`%\ĘY"Jk„&qhŤĘ”–Ý{Ă™×g®ěѬ§_™”÷Ú)ŻŇqeŹX*†ŕÝ1ĹwŞqމöFł÷ 9ß&äsz€´\V˘p˙~"^›u˘qlŤPŃz^’šE  %SµÄť ňĹxŃ u’7”VxČçą…Wh“˝).Š +Ą“wX?UŃ[UßDeý*Rr©všŹš§€ŐPîŚËxڍyč7ä9C·Ż-Ŕ«oXWô QmĄĚPÁţĹ’oRpm–9ŮDŹ‚šw¸H¤]‹†ŰË‘ţŔźrŰN Ú&T˛ŕniőÝ`zG”l­2±µ}¤5ęí·$ď.;ďŢW|fĂś=ŢâpŞLGS§E «…Ť ÂńÚŐŤ,…¸X-˘©—>!¦hç&kt‚Sm&íĆr‹/'3IŁěŃ™ăügĐ'0Zą6`o5=­đű…Ä5{(+Csí|ú4°śT'\Űř!'¬){GĎ­Zy €üs¦ę\=)ąH6ôzş¨â¦U>žî =Ť7žX4[űŁŽOKfäŚ×Ř3ڎ 4&řűmú>¨ii8i‡Ö:iâđ>Ŕ’ý$§ŚRkŰŚ¨sŹĆŇ‘öJľěú9* %GDŢĝʟÂŘ ŁŃś‘v<PMxO%™f}{Q´D€ôtíjżťŠÄLBÄz5ň>AĘ,·ŤüWrÔ}GÝśZ«ďŢPH,¬¶ ąZüćŢŤęź‘CžÁě^9Ě)iőÁĽ\ę§+F!LÁ16©ӥ—K„!!¤ÍúOOA§ŕ6J`Qhߍű±!ůP/N%Ą@Ü.…vŞEEâ “ÜÝ9)â´żPXůâUyĆ•'qňNž·ÇQěsŮé˘EóˇßŰda-’ťô_ť_6ű» yŐüY@ež]B—ęŘŐÜ.MŽF”°dě HŞ&ŮÇw¤€ű«^ކ=o6ŕ7ŚĄă„Ć{ŚEýú]ýśNA~Y˛ŁůYđřČϦ ÷*:ÉE^˙ /+{7˙Úőz±čĺrÝú ·ő¶ŰÓ{ć];yxĹZ+€~¦Ś¤'$VÇq¶|­ˇÄŁ3˛Cłęaűˇ;"\›řZ˛¸őőšž- ~6k¦k|‚V;ťcA23uÁh “­ŢŠ™†ŹŁK>⫝̸yö¨ęŹť¬ËGdáżňµHˇ‰|U.‚&µ ŹşöGt E@÷˛ÝŞzř¸ű ÍůşźžJݲ7˙Ě’—áţ°ýgĺ!u˙nχ€ÓśĐÁHB0c±]Ľ¶ŰŹ9-*Žç•í/ną®ÂbP/› ‰P|â˛~yČŚÍZxm_I)ají¦IZ;UT?F)Ĺ Ű›H˙˘VJËŮ4E˘żz‰¶üÄtµî4‰‰ xOuÄŔŕŚ‘pŻ0Ö¶˛'‚bĐÔ§bĺb„Ż#äŃ@w›€ěĐ<Úď Ž0÷&;˛Şk%í±şÜ‹Ö" řč{r]tĐÝô3Vľ©Ń¬ž!ĎŞD.Šěŕ8Ő%V–{»zĐ^­ë+]‰V[ěVFp‚ČóKŻ˝nµr†'7lŰţ*oCĽ& `‹J „ĆĚ xrް\I-%¸“ź1¬‚Wă[N„"Š1TôşNąÜ@Ržďtw6U׺¤`¦EŮ@ÍjâLŐUšFěęŔą#ʧ¦2¦O ¦Ú{Čüץ°Äs&Ę'źC¤H}Ű~S)6XV®ľÉ˝Â ś0 $_`¤q?qfرVťÇ„ĆČö‘X)MĎK^d=ôuí,sň/”sZ¨_ĘőxłßßLWä”˙ćÍĐӞʳ„qžźËÍĄKš‰VÔ ¤ř]Nô>AÖS·ň¦Ż3ąË¬¨ő_›Ű>Âm7s… Á°vâ®snö{˛´h±ˇŐ[éD8>[Ç8őRWŰë@č"SO„Č®ä_ŰůP*Q&Ţxýh34”'r§ńb®SH‹wţ ™[ňăsŞ­NLVŃČěäötr7ia&EľdTPćx +˘oă8Éôšú>Š#´‚®Ăł…ŐYv®‘u“őGUS1FUQż¬ůߢč¤rôçĐx•0ŰčZZŁ‚Š$¸bť¨§^[ŢNşłśşo@Ź±Ţ¶–Óâ·ŁBűłAEiµ¤ŕ­{h]cą ń•źř—N#{®‡č©§şĂŽŇĎ™JX­¨żÔ†€óuµ¸¸ˇđÂX JÄN]Đ`#wŰŃ;IÇá2ł"Ś]EÖ­ŃSĎäŔ4îűĹĽ?‰k×p5*˛t+;7CIhĺ8áŹÔtC„űÓëj#oţó0Í9?ĄoľNĺ—bDşý hPŇyb˙«—í8ćÜú9Śř2= éf]ĺ ýéyěÂ,Y/“2pĺBÁ~3»GnČ­…áŠ)l¸Ş·»´ˇD€4%J<Ř/©Av*ęDU°ö0d×/ßCBqs§u¦—…Z´E¦€y3-|—Ó^Ńu§µ2ńčűúefqop>Ř3iÍźŘ ~ćŤýYlBuđîŇ +ň6¨ł±^ +m=#ýëÉ®[±ľŔ9â&×$<ĺ~Ä``•cKřď5°V,¤ŇwË™•|O €€™@Űfs±¤C2=EçZűJąb®éŇł"¦r­>—°ß¶#¬X&¶Oçשä!j(а-+k Ť…Č-‚u/ú¸oý/ŮÚmgňj·”I«źgÖ\Rń5V ý‘„Ľ>shďôCab•9ąw/_е¦ĆáSâÉ”ür‡Śśg%(¶ŔäŕßÔ€ű>Ů·^H~Űľ+?HۨęOńt yl38{\ ()&ÖÎBÎwĘŢ™ZóÖ#:]X†>Ú‰Ďëaf˘¤Éň€­‡áo†Ňq/âT.…‘ČŤ\ţ\%—+(}3dđÉhŕE‘OF{<@hU¶TbĽ­Âęi= „ä×Jv“K»©ź˛®Üźn[auUă!xÜoďż®–d2 +řČ_yŕ» `[ČĂm€…ŔX€ÎÍ-‘m?٦EŞ›×—ÖţÓF‚¨Hká]ÖTŇUȨ…ń‘ľ +ɦ]͵›ŕ e +*g.6ţ…©¤á§_†óăäŢ-yÂzĎá8–ŁE{Ë–b}Ä]Cľî*Čż€#eL˛žŚóÁ˙ÓúťÜ1J”9¶”Č–KÔ/ŠuV“La6<ý˙|*_™“ÎGż]cs8 +™°…i€éq<ç­G|ŔźỔ"ÇŔŮ(ÂOąÓbű˛V.HŠ÷ÖD•áX”Çš"…]›ř_U~¸<`¬^ëqK„÷yc sĆ%Č+v¶(»`˝µ 6ŚÜTÂďŘÉŔŤnF˝Ľ˛Â.ĚţĎ­ ‚âń–Ůľ…q©ţÓ€·ßtߎ>´k-†­WŕÜ]čĚŽ[=Pżö´m­5·L˙ż„üë##đ×:Ú#$đ_~˙Ź?¨ +[Qŕô˙ţÝßçßÎ?č HJ,·$Ţ[8â>´)k›'ŃĹkś6qżÉ8tńŰIŽÄc†«ôĽ“3¦±K($^ŠFdgx 2ö74Ď+şGqϢau;‹Ţ$ô¨®ThĎ˙ĄšĐŇü˘7ݰjŰş¨j/:aE·"Ŕ}Ż.!Ŕˇ!śG•âD0ýń5ÇP[ŹÄůŞ +pEL2VŘéD–¶» .jßw¨˘ÂŘűG˝7”ćT±8…2*VͧDĹqĽŰôąŤ4GÄš€y„`¬”ů\{3űť5’/™TDČŁXh+‹ę1ŢŮßHÝ9šŔŽëř}é;@wŁ c&ur®öéý…>†˘+ŘĆ*źN6°’ZfĆřŕíSŃSFüŽYÓhš,چpgcS“ě +¶Ąő@ߦ–€Ě Ź0…»[ă–ŃuĂ +„GTUę2•Bßy„açÓX~űÚŹú6ąŹŰLϢA„Ů/ú ¤`D¬ÍÜżÎú`Ü SVfÄČňeÖaeŢ!*Pi–+fâvşU{.F,gŰËRÇ,űݬ-®ŞĄ_P‰—Ě +¸¶CP—¸‘Ńű +´b¶¨Ň˘+!tPd"IGýŚČ©¶$Ę…Ľőy˙p{Şäě^‚l‰GZ-§ŚÝďv9•†Aä{žďQÝ쀑30Şu– P/Ź}%Ľ‡ő»«  ¬lK€ýAŽ L$Sg‚Íúđü™¦DhÄ´‹|mł7]$ŘĎíÚ· ˛XŁ÷ÝăS©ŚätÖ"w¤şÓ•ż§rÄBH1"†sÁ9SčuŐ¸Č3zMďŠ2cŤNîśűBú üym[ ö;BEúŘ5†“ą^Nt‚"®0ôĎŘÔwdŘyR™=Ż5Ą‘-÷Ć®Áôđ8»­ą^!¨ +ÁŁđůAŰ©Wďwů†âďÄPi¬ç›ĘGŚ;I3nń5!Áă1lwń *WK˛ĆÉş#4R‡w˙đé€Na®ˇ˛Vb¤GŰŽ˙Ăç?=˛źa7X]•Ŕt¬ź˘lĂĚé8cŐ|ś»&Đk×ęHlÉ´ňŽ$áĹPt„:®ŔUśń¬ŐݵUM€G¦íÓ1˙«éŞÚ=CLůz` †I`&«ţ[78nŠňÎŘɉčGDÄáń Ł®‹ßťňűViMU<đZ!ăIv +cf›Ać†n'âVĆK2˛˙g [&H6źâ˝Ó7ËK9,:áđ±ýp.ĐQ$Ŕ"©đ;ä@&“¨1ŰłÁ†}U6űJ‹ťË‘6p‰ĐłJĽę51hšŇř×›pl®jüŢ'Íám4©ÝÚí nÎ6•ć­‚ű(U/;”ŽčŔÇ#EWşaýKL@˝GD»/é낚đŇűoRÚ{f‡„QËĂ=¦^Ěc ;jšÉnË'ÖýXĐŤóÖЬ¤»÷%bčĚÜqżŮgş¶|ű][Ě>o§đ*”Ów¤ĚpŻżWIl´ęÓtZ.2Ä™Ęôë$°-`©ˇĄm陇Ű`ńş˝BşŁľ4mî_ůŐůÓ_ý­•-ŁdpŃPpPÄ7 z}ż®užE±f€8Âč8E<|‡ + ­˛qR58©ęČhç᩺űÝń@­J·ëřâN¸P Ś¬I%ä Ö»HĄÚ÷ěꥥ›9¶,&@×d"l˝ŕkđ5Ô=7JŤwćÍ˙TŰ”§kŘl«‡(S’Ý]čDçęŚz§4Ý$ď#bW\wFł#„ÜĎ0u·Ô*á'źékˤF”"#Ré=Eh§Ű+Ł9üBTCľcđf÷TŮqIAŇb2çŇ1¶KfĂ)ęeDÄ‹XfT”…%˘ýÁŹÎúľĘ˘Ź‚Ýc„ŽÇú ±”sG°†1=µ$öŘ­/š3\¤ŕŇ+ŃR˛T1•Só«<*LŹ-!¤Ląłń¶ˇ‚«ěP™©>®ť ęr ćG:,öă·]×>ďŔů­Eh'˛w¨Ö˘ćĎ`˛˙tĄ™ĐÍuň1~D€ěoJCÓ¦|úßĂf8‰JÂ?Ó1*|p/ĄEĹMh(×–‡ĘЇ h~FüůÉDťgŐEs|hăGßőĚĹDŃm„kî#0Íč \h‰ż-úŹ0ě9Ö3€Z}fdzöśaĘ8źçzĘŠ©“˘ôLŔ€ÂňĐćkřćuďUŚyˇ7ěr|ÔL{M–ąŢŠh[†W몉;Ł*t¶ >$M$HŞ4vćש"?Fă{n|7l\eź*Nt©gd +đuÜC _ §+Ü4¸óý!uw"ďűĘĄ÷MáăŇ«ČmÓL1Wîľ›»Ş?s˙o ůľGl’íe“úËń#ěŘ ĄóĺwéöäW¦z^"H˝˘XŚjpđíß÷*÷ŘšŻUţßǟư†Ż+ő„(r˙đal«@ I&~†QŽxĄÁ¬b=3Ł7ąń¶aŤ§Ü–‚@3;ÂŽ«”/Źe\4űÖ`Ľ"gß;Úęâ@X±hD,ýű>Mşp%»oż*˙ď7Żş7_ ńýsC—3 +~ítX·ä¶âžŐ—7MGÚˇgĽ7˛ 3˛zpô€Ę˛ăß«Đô,WČą¬Ö hĆACHđůö]{'R0ŠŢŻížĺÁ X”m¤´˙‹ŇŁX/”:ăą˙ÓůDNpĆŞďË!RtÖ•żGűÁÓ‹Âá`VŕŐá\wFţBĂ“:ăöŃ6ŞúĐ +ď ŮTŁĹAéVV­šSý łF•aŃ˝9 +ËV‘)Súë×TEđÂáwWç•÷ Śpí¦ř>*´ŚáŘc>ĘŁ`#Ĺ|»׸·ąőiś†~—ęăNKě~•îµĎ.ĂťÇ,RççË”·»ń\Ý f‘ńŽVIćs”rz˛fÍqŻDPIŃęÖŢ+9úŔ_g"•ł˛¸Z’Ĺ{›XŻ#i-M‡ţAË‹‡ďĽ©^$ZńőÝĆśż‘ćBľ:o]MmT”°%ĺˇáî*`·Dí ‡ĎÓRˇ+3DułJż&4OŬő‹ĐbÜÇŻâí¨’N ĆĽď§YnC2F†íLíňP›G;Źč˙±I)XVF6±č3ČçU­Č;ŐŰ‘ńy/6sÄ©řSCÖ,cń–­—źpOĎPľťŞŃ-c ˛"ę O4ě>í¦ŻKĎeôY˘Â¶~Pá†l0›|$éŞ*O~hÁÉh÷ąmwf:2ŘŚ‘WŮ'j M{]ަ›Ü\Čř!běDĹäěéż%lî°űˇHYJłiF߯ÓÁˇ'6E˝Âv˛lVqw3ĘýĎYP ŢKß]/Ŕ$}Ú#qŐ^D” ß!nSŤ šžFERKŕoŽ—˛Ý”–wěĎ‚ú]_ZĂRÔT4¨i?q‚HĎ)ŞĽlŤ•s2[ľGä |ŘB~Ó‚´łţ ÁÁJ° pó‰‰ŢŻsÝ«ZńýSÜagp7îP¨Í~™nak›ž‰Ň;#(ĚÁt>{fiDÜçoŞEfmµ}¦óFŤĘ¶ăa?•˘Ó@ăÔŐâĐâ#â*v­Gîľ„ŚŇšenk–ççĐâ„'pư©°ś¬­\X˝Ďă~xŻ(~ÔÖK3şiŔSĎšîB·znůéë11•ťcÓżîŢëď”űÜî†÷cJŽ8‡ĐXŇJsćfľ FéÝmúÁĺ ~--ň‚ž ÄŠ÷ Ű>ŻŚ…o +^Í gśt&ʡ5°b”«óč9UF7ŚżDäˇ@ĺ—™‚~-LŻ' »X. VwËžňŕXeO’ČÝÄ\ŃË"iŠ’†%3/ô†­˙!b˙0-¦qPĺ"*Ő%ět8BYş ădçάÖMË˙SÄ(± ž×đ#LĆGÝŚŹ榚©hnĹč¤ďä\d‰Ç­ŢFĹĽĄ}FěűFż¤©KÍîĎŃŠžýO”YQ­űÝ~ëĚŢa§·hż»l鵕.\çÓďéÁÓ¦č@’ ++Ľîă^‹ří¤î‡}˙΀ŁnňŃr˙p Gkíö¤aíH6¶`GP1+9şÂöÓk®ëݖꎕ(˙=IçP—‹éŁdčíäńŹŚŞ&Â$švĆ®¨}bŔňŘ„é+¸Â¦hVÎoá‡ŘĚDđ)˝ś)v@-˘‹qos*hÚňH×SóJČ(ŐxĹĄŔ_@qÝ&ŇSśìŕkI­Çą6D'đ2€N¸í˙ÔŔŚ hOß(}b0Xç*ç€k|S˛ÂŚł yŞ~®>ÚŞojÜĎĐo@Fž„çTaVĺ\ @ÉŔ«íĄźD’¬Ö N…Ś!`ÓCDe¨\[ęőĄJZ¶gÝF}ŚíuR*Ź0?–˛ÄmĆ 3 +JEexÁE\‘Ěv}ť ˛aČuo‡şôTç$Sžś‹±7Ň ^™Úü*%żJßŇŠiś0›~F +Ž",D É©ćˇ­dÝ ¤NiÍ9:ă9DmhX“Ôś­ýQĘF7^Ön÷ţ#ěĘ“ËPŻî>~Da±šÓŕᛱ¼Ç?ű"É-D ç’ÝżĂTę]˙ ť&H>7ĽxźŐ’Ň|…kń6!9Qoř” ö§gA¶nü@]®¨ôco#G\ҧťfł&şą¸ł"xňńçw,¨§io(gţp Ńţńz Ď”şh% ×­ŔGŔĎ»ĺ÷($D`Ŕ­§ĽÉŐ%ćÄđi… >xřľ1ĎűIzi›'m3iČj ÇGx[CN‘TîcSąŻ°Žüůö +Gź{ćß© ×_Ú1B›čsţĆđŢn ¨b(¸ ˇÖÝú +J—Xµ˘‚ÓAŽrŁZSňĂOŕ‹cŰ•ŁĎĘşSÎp>ęhn=ĺbĆúyďwČ4w˝Ýë—i>Avş×DϤîIá3­MÇ5Äß»˙áŻ0Á=bş5É˝WŘĐ~Š-Ü@’á/r 0ři 1[\“úďÖ}ŘęđĂ8^B˛UřC€¦q„˙+ß@_vD¨U›€,Ö‘ś·ń[îŘ«i_±ń,L)Ś@¬ Ţ~mü9ô’!˙:PhÉřĘůÜů™Ç}(É9⩊Ű%î)ÔELڤ…K_¦Śí§u)ŇÎWÚxżCĂ<Ž|5"ł´¬™­›Ć{d«‹Še^®­Um +@§,*u{ᬠEĂ +ÉyŘťaOŔŹ5ŕ/ů†k€}б­ŹČK`‡2/=Ű&ÇČ)EBĚvNđJŃŽJËĂ»Ľ2‹\aÝ8aG·ÁtÚ˝ŻrŁé3óJç¨ÄrjÚ¬d]?EŇq ˇ™+ŮýŐtŰ[ ;ż.D1öéČ€×Îś!j‹ ĹH~ůS>"@żE Żt9Şóé2\Ç6´„dŤX•ĺä±KĂîÚ˛†dŚs­;5ŇÉîa“mvsÖîFÄÚ^©Ë¦Ş Ä-˛ Ó-2Ł$"ZůąŞ3Hßsű]2ö$bë+¶CQąÉöńž¦ZЎFŃ‚˛šŇoIseŞĚôÄi`[ŰŞ_s:ôŕBi€MR‡\g€ľkŐă7k7I=§_oÜÄ]ŰGôn®Ĺ/ÜŚęQú—HlĘEż¤–(ÚŮďúšţ~†.â|<Éu˙ŇŠÖClŐ?Ą!Ľ›úsž + äź÷`FĎ‹É0ęó7h1A‘X÷9ť< ě%Bm”"pŞ9mÓůzHż‡•şß2IÖ)™~3Č“dCšĄ¨SÓß.î“|A?ů ˝9HSźůĂßkÚ,(#8UÄĐß>čiXˇ;~‚f8?SŁĘăÎörŢ"VuJăČúZÇ8ŹĹVâ˙uŁO˙-ö,Ú1^»;ä|*ä5ůęŽlF Y¦ÜÓîEĐň©9 ˙ȏ“QvoG3©ÉÂIBV‚µ÷ę(źąBpQ颱­€ĹĽQ\®ç׻٬ ;•Ad“R}p­nsł°„^‚9;bA6„¦š 'Wß?ŘŻÎ÷tíăď±÷ŮSˇ`…¬R(5ˇĐöáOŮóSľ(šŹ(Á˙¬Íúx_iOó•mŚÎb’ˇ¨úÁ%úsŐ ď1ďhqAá3Ěďdbť&[JPWX†ÔOa¶ł6ůx¨ >Ŕł˛Á^ëJ†:dT~ąĘn°˛uôöC{ü#˘ô88ÝĽ‚»†‘ËßčwDgTW]şáM‰°{‹W‘†A°);Ç3}zr}= +Ďă{m÷Ń•ŻĹaűÍ é@ŁžüTD´;@ĎýwňKë~îÎvĘ^¶ßNp=bݤŠkĹ<Őąą§©–IĐĂp‘÷A8Ü3ÄF•Í]Ů®Ą˛mŻ÷C•ę‰ŇµűjQh‚GÇťçB"“!_VÄą ůCÄ<őhŢţţ),/®?íAČdd ôXŐ"%ĽëXUhq(›°ŢyćFßö–RwCą†˙ SżĆ"úEŽ4» +“?|@×ŇĚä*ĺ7 Â· oră m‡čź!&lŕ;ČĎs›Î¨„iĂüŚřZK¤!ÓŐŃüq 踀V'BN5¤ż Ż Ç€±Ůuń~3ţ˝QbxS0$±f>=AÔŁ”µŃo‚-©N<0şLT!uk ŔMXúÔ=™*d"ľ$Ç*ÎجD§G'! }ÔU…bN$ŰůfŮ6Úâş×[u’§řőá@ŕéĂ”ôL“•甸íná\ ×Ŕ6X…–>€ë=_l—D©Ä˛¶úsî1űČ]ĚŁsSŠÉ^ťS +úp˝3˘éÖ‰pýŚŘĹD¤-5`©÷ýĂŕ¶ŢjvtÄť‚G)ÂÚč>]ÄPeÖ«OŹ)EÖGgĽ3§)„`gĐľsHŰăR¬ô|hćµyJ -ŃK ”áp)¤+ÇzŘc±Äýéż…„ŽQ|Ťü©R7ŚÄ4SÂf;{Ńd¦\FŰ +‡ŘŞ +gxGDĽż¬çŕ 6M%Ô뇵­µĘľSmĹ—]É`퇇“[qµ|~™Ź0Cm˙a˙¤m-ŕjnĎř%CtJđĄŘR3d¦˘_«ó+Y@{§F‡p‡‰3ěq¸: ¤\ź­˘±ÁŚśHS0HdM…ň†âĆůu"můřő„…k,žż‡›Ëß3ŰŚ[ĂT‡h˙Tv§sGÚý=ŢęBZ‹á+ëšŃh"ĎČ«:ęs[# ĽV6•Ű>#@p©Éşůúžę{›aëÁ8Ü>őá|"şÎ±˛¨ÇÁĽ Dߎ@7ˇ~FěS•ŤËĹÂtk);б)’}ĺf +â®đż¨ŐnËą©±ĄöÓ;“ąáűjyśÁĂVuĹXaĺÚak˝úŰçŠîpŘČvŮfMsőŰB'ď:©Z.XhďöŇ…cň~ O7~o/ý!¬ˇŐ±ŽsŞDsŮR\—]›eW†ân-ěyíÖÚŐ/Ę+TD^đ'|B×'u-lw7ś3ĽPf‘ďę[L¨ósăÝmčďak‹kĹÚJĹ”ö+ö…WŚ]$ś˘ŻzŕśđĂfĽÖťŰíˇo·‡óѸl[÷‹)a•đw Ys›ě‘śQ… BűˇĐř=!ŔZÁFLőЄ۠ËęŔëmťă ,b~¸.˙:ďŘŕݸ§7á-fżÔgÔ‹ZvCȇš}˛uGČ‘oP ĚĚdă!wŞáÜbqě­},¨©:٤ü[;ŔőŇ…Éő-âEIMşç{´ŤĚ y3ŹÓZ5Á÷H0ßµ^áň~JŔ~á”0ÔąŽĄMw5˘Ş“,e%†2ëyá’ęöĽ˝fľpŃüÓÉÓž†_$J›X޲;ν ͸ç¶ľ6Đ·–Í÷×GFEŕ_‘řo?äń öŮtü_˙ž˙5~ý›˙î׿ű?ţŐ“žżţű˙ńźţé˙ţőoţ‡űżýý?˙ó?üç˙řw˙ö˙ů»˙ýţÓ?üý?˙Ăż˙»őű”?ţ/˙ţăßýéźţÓ˙űw˙ôýÝ˙ôď˙Ă?˙Ď˙ůźţËú~•÷×…ü×hüŻţ?xwv§Ú+ť§Pµcţrݵé‹ •»ë ŔÝhLÝhČOţ…’ĘmmJvYŐŠĹçżTâJ­­(®ęý×˙ŹâÂÚ§cPá®YęójÔµŠ·|ÂÄ]Ҭ-÷ř +ŞŰˇĘ‹Ë›8Ż#8ýőiÇţŹJz#`ŕę$öhÍŠpZ8"Ö[„(#*ë̱˙*((Ž&ßSk{ŁC°2.Ńlk‹;Ţ1Pą2v™ó©6 +¦‡îäfF’ѸČŘ×ZmD»ŤhĺiŮQ\˛Éz"DĽ®c´sOxîç[ wý›úä×JőÎUŁńÁe»bmąŠsá{ŹşÚ•¸ ++‚$BLČnvÎŔ¨aýÎ+‡™+!âĄ\9oz=•˛î"b)÷§Xf†˘ŽćWdvĹv(AĐ÷¬0¸AQXs*d$hĂŔ“áÜ…®#v+«ěŠśý«użŃšş{đx×Ö›B-âIÓ X ÚŘ+5_‹pŰJ–—]Çő‹¬/ŁĽŁ˘Uuj·j1«SÉŻßţrÇÄŕBOćř^PYW&vß7ŐŐqŽŢ +á…‡Dţ‘ü»Z tHH řYşő—U˙ +"ÂéL´®Ż¸hŁŃ¦&"Ýť@ixô\)NDD¬:±˝Cą35Ë%°[®€C)+Rń˙ŠçH XXHŻŤ%~üŃ +ÎŔě˝mÝąŕ +±ÇţuⲊĂĹŞÇ9ęóďötpA´¨°řţ‘Ćk«ę‚*Ó +š{Ą÷ăç\ĘřŤÍźĎńżGYńä(­ă ’ˇiŃz^ďčĎžçU›śĐ Ęřü gŕ.:úţgwrŤő˝WRă˙' +4hźµPĹO ±>ëŤzýsýŁ „Űś•*¶±3Ő…Ëß3ěę´3ŻH‘§»Śö‹—Ô(š(‰8´Ź,Čß3Uä„`ëö­¬¶Yx™tŹC.KÄúătVUęžô˙ďDt¸r·ö,ú>UƇIq‹öÝĚĽÝ?ěŻÎ;#iý„îÂľÖôg„Đ:}Ýíúţ.aWtĎ&ó—Îý+BűoääÔ§@ @©´µĂ`Cy^M·›QY‰ď9j„8z¬÷ü‡iBĺBłťUk,ĆA8"~Füř8Dt]÷dĆIô‰M2ű(ľ żxĎťóžv}ç±đŕĽöŠxŇiŮvB-°ÖŢ“ŇS'éÖ`¤D@ĺ”ÔäżäFlÚĚx 0%6‚~Ŕ¦°ţĽé EźNµbđax¤l˘ĺČkPň|ÄŘüôŇ2ľ&2jF$ !qę&BUűµŘM­5‰îĚň4â:QSńĺŇéŇSě>aeO ÇCG_ő,PÎSČD=6F6{D×®xŻŰqÍ­”{ťźYRĎřŠ“WŤńÓ +ňáŕŇ›Íh“ń†’ČIdęxQŻx›Ş–??)ý,ŁŠ3• ‰„%GŢ‚*8ŁwŠs Uf¸wR5’TýëŮŮWFżőę9D Ýë>TÇţŠ{LPlĂčÁ—ŽGÖć-8eŠĚŘăž4~Ő˛%ɨ/浢ÉPÁpÝhSŢ4ŠÖ{)#ŕҤ«Aň1ôɇ‡ˇ@ýNĐÜwŢ\Ča{Đ• ó Ö[pä*“"kr>Đő +÷Cďp $0˛Po荟·ÎyDt:ŘFČ_$'> @Ä€XJž¨ Q‹jßçDô€ť°ä¬˘LĆr`žŐ÷ł–P÷×ë&y.HQfÜ””v.Ę˝.ýML;ŰŽ ůybcż‹?fŹx®jŇ#¦ŕ-{jUKQßąb1únŘ]‰l*UjŔşý–Nt5ﯿym7ýtŔh ŤR^|#”f´'ň÷ஏŇ`÷ž^ěeN¦Éęä€Ń_>;>ż„US*k#m +l#< K"‚ &ÂGŹAeÍ5śˇŕw.eCđ Ĺöó«Ě0ÎNZFg›ŕč/ŮëžÓÔ†‡‹ü»¤Îýp<\č–˙ĄWĺOďËUqd·Z/řIďľ[)Ć•®!‘őŹO6ÎXÉß´8Ázë´»žçBGT1Hök'8°-„KMÁ +ÉآăUI>wž Ś+*Rĺëď›­ÂAŔA´™˙Q‚ä‡ODS˛n}kEt»vś@+OšOă¤čOIö»ŞŔFZH‘X®ďĘű«¨”ÇÖAŁć€ýľŢżKm†ŮD ÍľEě"ć0ą^ŃN«ű‡ŐŞ|”ć•-@N:áÇĐä â\oö`ŽÎ4•‡jJ¦H?_W6Â4tĄÜ0ü;oq“t53đ8NŐ&§;+…×rĄrq˛äv?>xR>´eŹćVe(B‰fH‘"g- ăjf·ĐOŔúŇśPŁý&䝦ĹűDš"´C_ť:§¶ęČ»ŔÝ€Ş»JSĂĺ^}+QK]÷fmVŇ)[ěęu´{1k}WpúöčRA§¸ň­”}ĄeëUŤÓr5űŻ@čđ¶öđúĂç¦mÓ­ęg7ü l_—B:Ńņ&ŇÉ×J‰Z\cQÍĐq%§n†äÓ Śďľěo+\ví˘Uô÷ĂÔ–!ŕzşNíó.s1.¤C)ý Hq¸˙ýâ´¤·Y˙»S«´nNËíIwn†­śąí|Óx<Ó|Ý:[˘~Ą5á +endstream endobj 31 0 obj <>stream +ĆČo»ýjxN­—p·Ě*Šc«&Aďët.bůt]ĂîîýĘ~.OSÄÜ—9cŚ9H˘ěĐö *ĆMÜfä&‘µY+ě÷öe z󸏰{DúVŰëö’‘‚âkRzČ é!Ăő°k˘kçZšOáß#öĘUCb®+‹ůđq ş-ö‡°qÔš»kXŔ»ęň‡4}ŮcÉŹĆCdř! "!ĆőËŻÄúWaŔ öµ6üٶzÓ ˝Sq­óo҆F®×cö§çđ'`ˇŮGçď÷ł^tĺžgJnŸ১EÁ,Tńj¨9×Öś’šüśŚ9 sod=\ĎŘmo}$żéş|wˇ™úŃÎ[kŇzîS_­Ż¸{ŘßG ěËĆf«Ł îî1š{te)[§Â÷ŔP˛«3°ŤĂT†A¬ĎÇ!»‘ĺ‰Ë“Ý|éYŇgrr{nü¤2G.J`­˛SŃăĐ‘ťĎűýD¸Ú1» 36=çěk×y­Ç!ůŹ?wHÇE pl˙’gśöе~óěq(*H‹¸ĺ +¬‚8Ä5ʧęŢîË6δҨš·É·Öa¨L–;Ňčä^šO2uHuYůő—sŁŻ"EK­VÖÓXux…[Ôőń\űĹNŁP?Ňmň¤ˇq › éÄ%J2="XČ~ZâsĘČ|®ŰB‹ŃÉg^@™rqřp"ř¦«+,ł«”é=×~¸»ć>ulçQ”`…p‘^žj´,×Ö+D\gR·"4Â)ŕëŰz?iµ·ÖµMíçCMl.á–Z¨ýĽn‘6ęAâs!)ÝQŤ ÷~ľËşÄ #{lw[ŘŔqjxBU·!^FFĚ}µ˝yĚ4č\„=ð)¬ĄË8Ţ3ŚÍDB»´%u;MRŐ(ÝFÂqÔŚ÷â·lÁ;ŐşŁ«Hę~7@Ęŕ +Žń’Ţ‚Mţ5b†Eů­ZgJćŘšB~o”ŰŔ–+éDôfOĐqýíDŰ>“uíČ…vß&}8XĎ€˛ÍW‘g…(®~ŃöŽ-h€&ŔČ‹•D ŮΆ–<Ăxr„Ł5ÜßÜR>#Äe—ůőcüńS´«ÉťX–ůuI¬×3¶8µoŻd Ä!߲" żEäTí’ ą’(Ýő‡µS•&ŞârĎŔJ‡›t{KRc`Ńdľ·8ÓďÉTŔ:r­+Bfże9÷Ýéł®-ëTs׏­¸SGź"ţcý´§R.`Ł„ę[ý!bŹr™‡ź‚jU&üű‚đ!@ÝmĆ^ÁÖ74‘Ď?"Ţ߇ěAúfßńÍĆţ'>ך‚#ĎuDT‘ńż~ŇE<â6†gŇŰGÄ.żomÖ].d4?hW(@7ă°a<ŞFŻúăü)‚ ô)/T]ĂçTßĂÄŚ±1°2˛ţT‡c€=ăá­„%•t űńÓI\ýŚxźşaß…öĚć˙ń@=ö+‚VAÔFś‘°bĽő=¨MJŚ•űLĐŃ >çu….Y–¨DŠÖc#—hńq¨Řy+ +˘ä,őW“U›1Ź-m‚ČÄtVľ3hď÷LROĹ˝™0\\H=ŽÖ:kç;1v4 R”Ę2a¶JázîęŚXŐ>Ó)»ËŞ•[Ö—S×÷¨^by]ÖOΛuęlŕ”éó_ĎS§˝÷©›mýŚŘżT@é?ü}ÓŚCăÓq&‡Ź)7Î6ő§€©ű-䕿Ľ'řű„¬ţÚ9cťş˛^'MA‚¬*VÇ­Zŕ*źű¶uQnŚ©ZßęÖßtgŚ˘UDÍ57·–˘yř ĺ~ˇĂ´ĺ9Ő·0Ňő­ćç×rüEŹw@ŁŹô†vR1Sá%äX‹w••ňńľ¬i,"ˇĽ5gţx <ÚĐ:?)ž! }ţłU4c˝ĆŰ#ý6ădĄ„<Ő\AG͸Ş{Ď-¬éŢ0M˙· ýöĆľGě»v©W#ĐĎ‘Ľ꯯¸ŇvĘÖwĘv'‡µÎŐŘţQ™ťůTzÖ7qÍ÷nPSÉ‚`ÓÄXÂźkFśďήT-Y˛”ěgqĂ6x±wš! †ś¤ëu¶†AŞŰ=ľ®@Ápž1"=ĹÁ >=™Ĺ1zߊĽŹ˙ŃŞŘ;·»Łż ëKĄARéC‰ô 99ťŞ„S7’Ô[bă °ÇgÄÎHN™ł¦X"×>„úRRÔŤđ§-Śö´azţq©«ÜŁ__ąîĂ@®‚Ý0ń™I,ď1[yť:Ś =ÁĆóe¦_·Ç… !äţ.i|ĺdw Dv”H)wú`cg¶3‚ĘA%ŻĺŕN+î&‡UQ_Ĺ ?5µŐ*ąöö4ě:9î<Ő>˝i+–҉tý±żáPňMźÇyfŠóňÁ¤äT¸ßëL@óQŔ.L ËtĄDžfěş'ٶÖűÖ#[7dt˝ő/.°"zó”ď= #Hój>Ggd}Ngu$˘+JË2'jŘB­|şr"ÁŻGš;ď‰D ÓÔë9ýű‘[BY[e€Ű˘ç/xů ŕĘ–śÄ÷Č \ČŰÁXűŘ,Ě–6ě´Ó•_ąńw ę¦8HEQ„'Ż09GÁR›©ÓułÇkw^ś–Ťý©Ög4ýn˙Ţ*©šĽ»ť&".‘W č¦řl‰7˛.á|KQĂ*¸}n#·–ǧžÂL=ś;NŐŐý =Ě‹Ł]†‰R JlQ•My»ŠýâT[ Gş¬Ś±y)q!) Z‰ď°’üŇ7nĎĂó|Z†ÖFŘŃtĚЉ?ĐüąÎG(ý^:î’…Ak+˙ľű[˙óۇ췒ć˙HĎţą†ćŁ5űK§z>ÄKT0Ü$Ŕ”ŻuKµšQ:űĹĐësE¬-e2Nˇ?¬é·ýŁ Őän$ąO +áŹůëŻW_ż‚‘Łĺ 6ôŚĂňČ+Ŕß@^á‘6ř cvęęä€Gí,‹1Çćô–2+XĄJ§%»»n[íëwţZ1…OóśËŹĆH!ěHĘTŮÂîtěF(b\Roe–r_ďÜřŢŮŤŞľmłŇ×Áń‹Y7—-«Kj·ţ$#ţ$|č}óB®_ď˝ÄöńŇ[ ł×GCK:”Ę?´Ö+°ţÝ»†˘śR]CÉŤŰŽýA`q>®j]`˘ÚgÄţľ%tź‚Uh­˘@Ú˝elśp‚ćţŕ“Đö“đŕÇ>˘¨ ö^l‚Śj˝ŕą/FŐ8Łłq!\LżěŔ$Ű xBÁ§o~ŔvÎotŐů!JĐUguSZ*˙Ş š´P†cçµő8>ťfDŮć/›1ŇjŠ&c +Yv/]´§úĘWĺ‚çý`*>Ăü®??ĎŚ ĘéŠ8XΔ;…şúŠp;ňđĚĘxęÎÔŠ%jŐ ęí•,üŠń$bqUÚ ľ)€łÇ•ń+"âăŢJąŘ/ôßNĺΉa·ŇhĚ“aĘęnCç Ô!/ŠíŃn8AA&²;>{‘%x@Ä—¤nąC^o1j˘É˛sě12cv°6ÎĂÁ OLʱęi?DÜ]R)â@(Ť‰˙†âStQOb‹XëoD«fä:ˇBPfD{YNÔlřřó“C©Ç^-TĘSO +` +Ł©H檼‹Űß÷Ńź›őýèy–¨y +1ßô)Y7ą…!°çŔE×{:PQŢ€(dĹřńµ°@ž^Ő¶ű~ do.ö3ÖÂé÷C+ÄÂ9…¸őÎĆ|×}Ç[îřkéNXyĘď}>ŇnĐRĂYüAc—ĆžŠuá-9W–}*óť{`Yj„¦Š“LîúíTYŔ÷OŤ8(+ě8÷5c‰Ŕćs+D*Ë“¤€‚č po,ÓÇ=p=`áO +/„ëzö +¸DţHh!éʬ—‡®śTw7¤Čó<”w?x®s_Z`ČűDߢÔ#î-zÄ`ŇćŘ5Ţ wŰňŘ×–Ç."S„¬'ůGŔ.F¶Ţ)Ś×KqĂo‡éaK&^ßxř®A"Ő4¦±G±FÎ[QcÉúŻ‚ľ#µ°ß’ĘWŚ9Şml{ýs4Ď.6É^L•*é‹ů’¨Z|SŘŞ®¦ËAľÎ„Ť¶ZĹŹu«vS·ân“ŚĄ2ś Fť8ľEltŐÜđµ"Rô‡•jEqUÎĎer@®<üźĽg~§F‹Ď©>Âî¸R®uÄ!3P/HëbVFŽ@ôrďäO~+mP;Tćf<ňâߪ|ç«őý© g&;mř÷vĺńóÜúí2ÎhUäľíFexM!ś­5čŃa2Šç¨Ţ¶Đą3\]taĽRřu +GݱĐJ,ąL‡ü… ÖASY‹·÷ +‚UË»mJ0°c +FŔKí˘ÜH›S‘ÁxóÇDşŢ/ňńiSW§3Ǭ‚|ÍKęͰîő·qŔ•kźű 3‰c…*3<ĐJČ$×»!<ă‚ÚbŚş˛Ű)§qsOg2µű|~Ř•O×n…Two˝şďaű\‘3Ęv°€fŁ`ŞĚFq˛·ÍT”«9§ëzFĘ7ĚyŰgDƶvŞń?ÂÎKŇRÔ{Öc˝ą&|«ÂńM·ź?Đ4ž0ţD~)âNšEXzĎó‡ŃőéTlĆĎH]¦űĽ{čß#>vëÝěţ¶µđ*Ö’á\±dóC‡ #< +>x ÎŰŹ±ë ¸ .+CvÓÎtGp+4aX©ßőý&Š!<„¸ 8B”Ŕ]bĆş¤¬ĺa° ZÇWBŰ(Śbr‰đÂAfA?Ť‡”~'śćÖĎ›?/i»Ś^WĺƸÝ.¨G'hÁ ąÓ÷§G8¦ăeˇ+©Ňsůµ +H6ß˙yzfzmŤ˘Ŕ©:ú˝?­Q<‹ď˝¨ńńCŽ]A˙umĎvđvDZ/Zb—Eô8˘50"—™‘E#Räl”üĂŃy_Í]4ÝYuѹǀ1ŻŕcUl5ß*.D=FÍÍN Ţ~ýEhá +1˘?2őeÎ˙!_·Ď Y#ôžäTn jôă‘tnĐa +}ÜŹ{d'ꙪÔ'ý4×m›đÜm”!5˘ Qr ›¨ĚSĎWo>ń3̨k¬áoë—Ť™Nv̤hN[„@ÂAą Öi› ®2·Ţ)n‹âŽ+=y +DmŐ^×7ş Ą‚„^}č„BIË€MVÝČÁ@ź) /&°)z?M[šČk¤6*ŞťaÂKŞC^Š_©é"Ž1GľŚŞőŘŕž ĺ^xÍžÂÍĽq(Zuô„ćÇz#(¶;íŔŠŁJ\×lĐą·j·pÓăÜO.] űf8ńť,c{PôZb~~Fu÷vFÍăt;€1#á)ˇ´ DŁţ‘áUe§řŔŻ¤éŚ±Ő&RY•Ľňß©­C`ż#XA”ă¸â!÷…ÎËÄĚúĺî ýCË"EĹq–€”Í.A§ĺÍü@‹0Ť¤AG‘ćŔĐ+ofgر?ŐŹŽK °ĚöÔúW‰×vÄô€ž)¦§B˙ŽĐS 뻹QŰ‘•1!\»˝kŰí}ëłL1Qł‚µ¨P ­ +Đäëh´˛‘“<ô~Ń”P*»lřpP\îcë»8;`JŹm˝:"‡…aV,Ŕ@SP‹ôE„Lń~‡;ć+ojM,üăz”Ö†Â>Ń Eśś‚ËĂճjĆN_.çđ\Ż&yYë§ÓăGőoV˙ő´ \O˝Ëú»­m•÷żFÔÚü¶@‹Qݣߥ™ŹńJ¸Ů7Ď,’_%BŮ:5přĎOs®ú[ŢŰjtíŁŹz8 €ř]´ Đěş2µę‚4Ďä/wÓ•çąD]ÓS`~Śë`hc>ů…z·ť{<=Şţ8ě"ćÁř¦+]8 [ ëűJxdb CŚ>/ +z—«k{zžch×ć‚lôM™|;š+rĘq\‰ß{ň&†úřÜDÉÖ>DâwĂtd4Ťô9/nű° +Ň"FHÜ^ĄcŰdĎCd?Óľ‘3ůU×!ćKîpnuÉ ť«˝ ĽźŔÁÜ›ůY7ó“ljÝ˙Qz96ÁbđÓ‹ÔľF•ČçÍĐ›ećL ]^ ޸‘[˘g ý`Ť•ąÍű+E(ÇQFV9T@_pTŹcŃ Ě3ţ@]?u=Ů›Ş(Ě!lˇŞz Ú{®äŚ \“brťŁžé…Ř4 +ýŞ%Öbś”¨Í8\§{ŐZ$­b5­˛NîŰ? 1vřżÁ}Ą†?‹XaUůݱzŘř"cE3—™:©ÄýN´ŇÎű©‹28ć*`ťjŃ—`3źÖOY«Xę®éą|˛[Ží&lPľć–łm`)SîźŇA»lv˙J´0Ďs@Ćs‹hßtŽD4‰HQm·˘ËL€ęogʶŘ×Ë5ăq1&^{9L€–ż+?×őň–B“EVxŘz‘¶×U(q•ł‰Ľ¬WŢáH€Ő›ÁŞ­„˛R)Q.EňĺVŻ‚ü )ŔˇHmŚ-OÜF~7S›]ëŐŚŕ×ÝU¸×ç¬ÂéBQ{çÔ˛ŇŃ‘*FŃ" “,Ş„„ÉĆUGűä…íô}ná‚¶Ž{Ćą’çŐ°.ĚmDA)î4aˇ1h—>&#Śü +± +#ÂŽăöŁa'ŇĎč“@đßM»­Ňs ú+€™ĄÇg"ËuKĄŞzP”żŮ52 +A٢ÓíŇ3«ő µĂqÖU"S›g”‘8<ş/ńůÓ_ýĺ¤yřţnđN«v +…Ó—ýÇ' z\v2ŐG}ÂC·‹‡ZĚÝU^4Ú ËÖKý}b t’őěyŤĽ9|ő/şlZN'úͰ“űxŃdµ‘)¬y-Ę:é$!+bĄ g® +SĂ:ŽŞ_éé›c¬˙./3÷ŢÔĎX߉µâ`·lص2Ĺ@—ĽŹ -śęŤÔ$s‘… Oş&ÉđÜž.+zÁ\Ý.ęÖ›¦( É]lNŰ Y›ů„:aş¤./ţEŚŕŃÓŕ…hÔ[:š]ńźÂ–úi"ěDö«a:W“˙Ú\a`vĄÍÝÔľĂÜţz\í :Ť`71B‰ŕË­źó·QäE{‚0gćčd2…äĎŽÇ™ëŚ3W«ą±×_2ÎN+(ď KwphČ_wµ7ţmµkOj¦fŞWĽŔ×aZśĐë¶VŰΡ4żf_ýŢ Ň¶ÖŔ®›ą]ü)6AÖúź’–Ő.p¶.Íá[Ńęe˙ü„O@7hĺżGŐWđx ˘{Gyˇ°ÍKmúő÷ŘE­m‹8ŐŽ&0ăő(Z¶zlžLRŐ˝”ş=SÇŇ`äË’`ňeő{QČI[ĺMÔŻE)x­• ŕ~q-ůňô -•±ŁB Mŕ_‘sŞ™´o1o‡ÓóţB E1µŢ¤`›¬ŕŘuçĘ>†śKŇçrŕýGĄŘýVę U`$G,V1CK´żĘq†Ń婲AG’*îń±iÍú`mś1é˛'¨«B5ÖbŢőÎĘ$%đŕđ{śQ0%żĚ“@ŞYÁýĺĎ + BŔ^,çel™Üj׳ĺŔhá +ö:˙poňV’M“· SŤŔďJö×–˘†Š4\9…ö÷’oô3žż~ Tp„!^wî‚`lSUĐ”ôɲN& ¦«8±vŠU’¨µ[YDx[ď«([×W=ઠ+RSď‡CkÍąIR-°??§Ze+sDÚ0 ńkWŹ‘j9·XRcLŁDʵ‰á +%ŢFČB«=ô×G-ő@qAV»tý€2…Ż}Í+l֜ʜ/i{‹QνQM×jŕ'xŐŘ +—Ş<'ŞZúŢ‚#ŽLS–źŽß/"©®Q®ř}Ű?·ôČ:ž˛ÝˇĹőM‹{A@(ĺEČ”ŐčCú˘Î?ŕh=ô 8ÖăŇ”WjşKťáIJ¶ŞÁÚBčyGŘj–µ3ÓŕąTq‘{RNŤJ®°˙ďşő Fă,‡áeG…ż© +đu˘©©2ü†-#Ŕ{m(R„ﻉx§ĽâŰßź"g&"šOv´ˇé ŮÓo2AŞ´ăRm‚>WjË đž1ř–l ŚS9íâË”ăFňUÜdćőH®ˇŠónÖó|>ćÔ +F+™µv=„Ž9“żaźˇ~ł#),)(ŚÉî×ß(L˛N=ďŻ-c˛°ńu†ěˇŇkC:AÄ­'mXîuL)ŕđStµôDŐ‘¤7 — ©`€¦Jßd<\)źçTŤ\•ÜiĆďü#Ś»r[ć(?·bŔ°­%-ŮSzdJĎ´µLÝ茏EIŮ^ë†Í<ˇZŔâsäŠä™ňçMCěÚXŐ×EćµĆsčśŰL *S\!ž\rTÚÖ»)ĺŔ +żt€`… Ăl{jŞ4Öî­“ĆJ7C¶ęŘa®ťě ˝Gŕiý:ăŠe»Bü~äĹ\CUq}e!§<%Śe`Důp“3ń«2GnRťFfĽ÷l_ŰOË©úŇnƨŰgibŠ-dŰ®Ă+ƉĐęąHŔgVB»dř§4Đ4«4lçďř Żň¦/źăzś]młE8^ŤőoWŹKů:H;3wRő’uÆ#ĺ+nÄĆxu ŻÔźëő?#Y6¶śEó¸-]ş–{Ţş‰+KtĐŮ>Ą&™o®oPµÚ¸ŕđţV%ëÝwiPŻËŃoއÂWř}b«hľO¦G›€ň>dŽâJüć“Ö{}ôĄ­ŤoRŚ0u*Ô`đD‡|=ž¶ZŞq'Ś‘*:uçžP­Da˛aá;ů´ÚMjŚ ąI‚zs•č‰Sb@Ä«BŔ…©FHs;ń fĚ™îŻę~­©ŕń}"Ł<_ž6ŰŃ/âŐł}Ń,·«˛ +ťxŃS¬ŸĆ=_iň–FµuŢ ÖE¨(4ĹC¤Ť¬Ž/ú“úKâ!˘4wʏy0ęʬ{Ś5!ëŻo:üMřʆj^Ű…’ćýíwÁäń–T`&pmŇ8 &ďë#ę«yeh¬S‡µ@íüP'†wW= §±ÁĹd î:ÎqîÂňśuűeüČ!ŠĎ7 )čÔőŇÇŔvíhăeŁžG™Fkl5ŐŞm‹`O7d”IOđ}Z+S]z1}<+3bďôęÓk¸IČc jůz§ŻĘK P7€C@— h«écyŕyř­g¨ĂoüXu‘k›psĽţ?ÖޮמăşÓ»7ŕďp.妻ޫ/mŽ3Q"ĎBŰ‚é1‹$J†żýÔó¬ęŢçö¦h‘g÷ÚÝ˝űĄjŐZż)^U;ÎżP Şő–úĹS°“7íßFSÖtÍ…>ňqÓÂKČ*®G®€E‡ݧ +ŁżÉŘ,{ôX42îá/=±™[—ńŹW±Pb (ם@ȨI–6'‹HŚĂŰ9Dˇz°nôÇ^4˘ë7qTŕîÂŘË0ćAi¨âŽ-´mĸ"°¦&â>” Š…sGčÍËHQߊlŚQGŻŇ 4žF3ëŘđ.*Űc#dĘi´8—ML©MÉl"zś-ĆS÷hoSFjłNí±ź$!A×Ut&ŞÜ8€lT– Pňýo Ď kIM´O®#Í®÷ Ë(Xhá}A†÷…ĄúsĂě!ö02Ç@bFn–%˘boĚŘaŇ€#§ŕEöA•ň5Ĺťę@€Łů ×(µž[ş ęÄc1’˝Páů}3îŘjĘ—1ĎIńµ€Ťyt9ZŞ\ݧ*¬%j FPz"÷$ÂL +WąöoaÝ«Űa4k†ë”Ĺâ<Ń!wŽ_Ż1f¸‚|Đú3čśeřtˇN^$\ú{GÜćl0ĎH¨äËN„ýŘDá\5ĺs±·­ 5Ö˛śá›®»ňţJ§M<©†j)˙ÜI@ú“Ü—°f‰H–š¨I’…Ńş/5„„ď“ضahÍ&ȧî +Ś´Ĺ9ÎĐ8‚ŻďÔ1KT:žÁ¨ Çz¸wŰ.Ń?®Đ© ] ×"tJ×uÂĄűb*‹QB|gč„i•2ęŐP4ŃŠŁ4˘ôGČ +ęŢÔň¶ťBüŞ˛Uű9¶¦ćV2żćęźa,Dř1î'| Ť!>Făa}qÜ«'U`{[ŁęßUő1¬«j ńlÄ«&i¨8ú†ŻÜúÝćh6‹ă@ŰjSŁ‘‡Ö›űNF S2‡J\W 2ě=ő̱î +ŔJ‰Á• @\×Ď&4+Box qřAk""&‚uŔ}¨#< +ŘŁčţˇ^Â#z„[ÎE<ş]Đ@ô*i*7źVf ÎŤý3ňrhř°“*ZVE‡:7 ĐáQď'“‹ĂúE%âćS҆eXŁ3x„MËé°A%•6éYC{rÍú}{îT +XTĆe Xő‡˝[÷…žĹbëAqŰŮPů«Ô@˘%pXŕPÁXmQ7€›żň\ŞicÄűMDŇT 2Ź)D·†¶Ô-˘”rŕ†‘ÇŐž˘¬ ‰E]Ă Űω lÔ°Ú2 +„®źşĐ2Čt™SX—řšJDÜ*pG@ä’BA¦Sń’˘ÚĎ’¶Źů¬H¬ş±ľIËHUh[Ąjť Y×:7{ź|«Äűe2PZ˘˘{\ ű¬Ôq´n´nëi°0ťéŮ•oéáď ćVVN§Ż[MűcĐŢC=i +HK¬oBg@ĆÄćş—­‚őäŃť¸Ź3Ś>8eÓÔ{ĐÔ•Ĺ<čďe#(růYHŞ :żŕs©Ú+[»H·ţčQCC(óT«ÓPT›‘y!G˝—ßY—ĎÓÇ1‚ş:CN2q.W·G…ÂlrŻCm…á\¶bJë‘´˘v|ĆoR/›5 ęb?ŠĆ5_QŚM×+ +–©J̡ĘőĄq=k=H/ 8Ůë:y4Ő%ODrBv©…ŤöpLÍ !Ű0ĹBOçZ3ŁbfkŤ9•JĄ94T9Q TmF-Ł9T3€%(%˛“rv‘%ěźbâ«n-ŹLK2ëÎ8¨ăŞ: đU '*aŻ,|XáĚî×í*ˇçáb–*Ż&cpnć™Jľ›îFpóQEÄĹ +?DG`ř/úŞŔ%Ä„XgP +QěŤ_Čř sAÚÍZ>úäĂV¸§Ę6ŤŕĺĽóĹsh[h¬-r­ÇŽżŘ¬¤~/ś–˙±.€l`˘¦bŚ„_ŤWÖćqŕávp@Č]ů†Ć†Č;ÖµK…mQL“Y(Xţ©@­B*ťFőT…óAČz޵K¬ŠŽĺAňŕý±ŰĂ Ż)Ř[…S´$xs¦j~1Ďz|R%cŞkŽkŘAÓP)‡N_1Fř—^Ď®Ţ̬íŞţR™ěrP$grg€Ü śZÉYRcť™2K˛ ĐÉÎż®ť Ş(źř=Üň”·áĽÁµ™ż^ů• Kč‰ű‰egCép+r@šXŐ/ŕuşYRĎ»<ÁhŃŚ&ÂČxwý*śYÝ•¶µF姬QŁłB-`T˘¬°|üQ˝ŞĆÍ/dNJÓEkň+C3RYy`Ű4ꡂÚ%Ç'­nrµ6׏­P¨*Űş)űň5Í ´LގiýÄz'~rŞaŠ‚îTí®şŐi­ÁMÁşĐ’­}†,ĽÝ9L÷U¦´Y°°íf®Ě3ör<ߦĂCŽnşĂٱť|†0K”v`[ëÔbHFŇA'łY0„óĽĺl7 "Ń0÷"‡,•f‹Á2E”)°ű.ĎŔô/ojo63˛KM*ă˙Ňǡĝ0PÎ0Bíća"öm‡ęjxś1čĂűjJG¦Xř„ŐY—ÇĘ}††‹WĐ6yd]O„$ľĂźňű‚¶ČăŢĄ6"@Átľčc«L„Şx}ď đMe¦Đ%s˙ôfBÇÜ…abÄOˇ2°…BĆ(ÜBđĎiŤhžQRY7je±7ĺŕˇFáÁ9°ö3“KQ˝ĂNďţd5ĚÂńłŇjjvFă5ěńë0Q ČYĹ{ń:Ôč[s~ťěP® mDÜšZzGô° —Ů<˙Nôz“I¬Ô"3ßâĽ=JŻ*˙oŻËp—.^ő®7%S{DşhŐaą7ű8]Ć"Bú1ŚŚŰî`ôŔŢŃ€QKŘ–…§ ˇEZ0gJ~ÍÝdtX›TMŢńŚÇŘ©O#ŞWeĆšRĹňëđ˝~ŻŢ¤sy9xć¨"˛ţ@UŘ4™kwS˘Ö-"'¨3,;xŞ:Ť¬Üš +ŔZ@â ٸ¬Ąä3˝†ĚZ7ř~l달5_gMťő,x’ŢĄ´"}®7Ż Ž¨{bD'Ăs;Bn ĐK'#˘hÔş•ĐzlŢ+Ď×Z>˙"Â@Kş2Sq ˇ[°uj[•eJ` +ă‹ŕćÔ |“pcĐů¸@;ĘVj~ׄŰ+ŮӨ٤#21µąeáČPcMĹ˝ŚwőÖĹťačyĚ-\ŹČp´Q´ËM±Tŕ>†§z 0U«&ZĹ@Ętë:Ő!ˇbsú¶Ý <Ă}wA©[dZé趢Lź Spw÷VÉ·é­ş#gZk4ć©Wü(Úď§GŹ˙§ÚŰĄđ‡÷|"pla€ä?˙ôe|–>• e•OĄ©/´n#˛c˝ý,~sEĹĐŠ]Š€źFyő˛×Ő+QýQ*ŽĎÇąŻ*s ʶ.š`ţßë=ýĂ’ëQˇ’ű©đťBą(Á§Ż1d9Qχ˛‹v·Ť>Ô÷ĚyĎÍ#AŢúAW^aëF«ĆâÜ0š „e=z¨Z&¶¬0:Đ .^'ő(nÎm†Á>ŽŘ‡ĘxŇ- 753ř4äC)ŮŃÖKrG"żŔő!„`™¤Ú2žrF¨$G§_"Č܉8îąąnűKzŁ“vÎYVČŁ¨Ťü#QsΞŠň.Őµó),‘ę±.Şŕq™Jî\,\¨Ćz™L9(ü'J9ź]»äyEmk­‘oéŞá> +"_bd@Ź$É&LŐ¦+ ËvĐđ9eź?4ňkŚ!q Ű6 /” Ç=ć6Ö\?ǢRŢpGoţÔT>6h Ób¤đĘ“ç2ą›k؆4+eľ°k†őęXMů óč/J' ZŔ—KXsq粳Šđ•~¨ÖŻ…?ýH“i#ycÔ[`:`ĆÔĹçđI 5îś”ĺ„ĹĚ>9Í%ćsD$)2yý˘$žöcĺţe -ýĚ +ţóă9`p}C É}ś§¨ @`A§&0AĽAżT:ELRHi—uěŮÔW‰ űüĽČD3>=ľ†–<(˙5vŐ±Í Şni:‚™9Ů:ðXv˙ő¶ą‘>éÚŘc@ ;0…f|}Ť˘~]7CÚP€Ţ^ôţ»ĂßZHö3:K×"ćŠTo˝ňGŤ#A®PĐ µP˛Q^o¬_v^ks?ň‘ţ¸ľ~/GjdăčĂ]-AT´Pł˝+VmŇ n¸Ł(] +¤ëŰ’b–újCÝÉT7y˙cťu +Č›ć!lb˘w-Îűě‚y_mĄ4.5ňś}î˛#.°QÍaáôqŁÍÓú ľÔÉ•;ÖěţyűËçő) M´kŹ\Ł(‹\Ô;ĚTV'lń15µőxĄşLS­WĎŃú[¶G9u–6DB5T]îI§ŢKĚ~,?Ýť?_@@…E|Z)Tmĺ·ěśH>µT€Ź]gőM®µÍ.„’0+ÄKK©Űt7^ á,RŠV==k}Ô“™Bksm8ň>B™ŞőâҬső$ĚG€<Ä:ńĆ˝m§Ö5:FŠjć!µv×űVbG¨L©q)ĘńcŻÍç?ů+űEßőaî +ě'ô2Ĺ:µýŞĘ< q†ËµK Ýk§)jgS „”Ť€*€âJ‘Ô™W¦$Ô†EµŇâő¬=FŘ»˛3`¤Ä˛ÁâiŮ)ň|\‚sÚ´ĐçĽ=áĽżŠ„G8=ŰşńgëN#űI)R ęôä)űE@“‹¬ďÜ='ĘÇ` Šă–íç!±î)b׫ňnĽňŹűéh˝3ĚŁQŮ‚°lv7”µŻiˇSUľYŁř{CPŁqĐČ@ˇf…©¶H]ôÜ6ĆÇVó' YS,o"@µGcm׼ä˝[ÜNox„ŕ’Ş:+ě8bG±“ ˝—fE PŇO-ÜÖň/D›Ŕń«(¤˝ëşEŁkŤ<2ůS"ęAh<”C6 +ŕ[ŞxG‰®›®šL±@ R[‹6Ź —Jîi˙0…fNŕĂ*Ű®ňŠ>ÇąsuĘδhMŇü2‚¤§*ä ňz*>†Ťŕ*ćy¤(G ˛:ÄSĹ@E­$,‰ďĺęꀗÉĎżľz. +íhľ«zü´Ł E<ó*:sî $°¨¦•Ŕ_†f®{·ŘÚs݆]Śžôë» Ć Ŕ*PxĄěń±fH +–}‹.ăĺ­şó”±ňt ŇSmŇ3l’ÜŁ?ÚJd_»m·™äDúÎ*.=RŤ ;0ąëˇ$©ô`TʇAuŞźŔë •˝Ö×D‡˛‚¸"ŞöDôxÜDäáH•fŢ,x„ÎWbÓnIKç!/;«ÉhŽX+ÂFWÍ*şkŃĄ\WĎAł®˙©qŢÇMť–Ło—Âç°ccÖ°”÷őoVßIHĹ©Ö +ń‘ ÜŹźďçy[Ź'.‘pčŹ_kaÝK@ď´9iJń´ÁśrŃ$EżťqźÂ`>Đńá«ěŽ÷óŚNí;˛·RŤŇv@á:D×—ok7 ŕajWšČ"¤ âŽCÜMáş móŹĎ}ú(ąĄ3şC[.b˝˛*Đ8šO%–Ł•šŰä@3điÉfWŮŮJs~9ŁÂ¸ž,á2 + 8 #˛~µrŐ¨µ!Ŕü´‡ˇ!ž™Äë)«NLFŽ…8• aĺŰ MŚ­ăĽ^*Żá¶'Đ ˝Q劳±9ą[Ko…x‰€]G„N±GŢâü+ąm5zŤäDĽłr}5CĆ~mlŢ׋ v¬jtć|Ó®Ňo@Ň-mÍśq榉hiÜ€:@S3DOé/ × Sçľ@P—’Uk87ű`=†ň(ž–ťWŐłDQě|sCăN íło4#}j@ýľG¦ vŰ@˘JVš[ćśČ8•ýQţjťČZv\,›€:ö„fŽbéVöw+ц:ĺőýO ®fîzĚS ,Źs¦Hs2ż[ÁVţµ Á жDCI°ę‚ˇ=TrňgDç»Ćä›ęAAB÷ŚŢ¸íŹQnřˇaĐR ËűŚĆk¸ü±R"mcJ#ež‹îŻ˘ť ;Şđo®#äháĚș禌$žhá<Ńrä:¶—­>Fôť«źÝęó†Ť&.´*‚ô'tH®©ßT´ŕu3Hk%ÂĚ,äşóŰâóݵ¬[űĐĎ|| śËgě0„ĂÂč €_˘«&aH&gMßŮSb܇ÁÝčQá dďúŮç”GŃ(ôhv˙!$wĚBăĆł\ fgÍ®>Äů?98>í'ŹhÓTZŐŚÚ5ę)NĘ’´Ťč;âĽLćn᲏[™ä‹óĆí.đp˘§Î§p°©ÔĚ˶[Nk8hÚ”]˝3léť +‘©?´ ž1ĂJÁv'‚´ĽHQPrxŔ@/›“źX~¤•ĘŘV**ć´mIRdhšve›VKTC +ĹÝ üp?\CG"P†/˘˛b@Ľ°Ô͵<,.ăP©K,o$·Kśś«ďO0»ÖĹ.ď ô^#u ÎXt„Őu%=/Ăbşşč=C{'Ç}CéQČů!ůH‹äG{ß&p±!_ Ó9ŠdSU)­zE¬UÍÉCkG¬ ‰Gš/řcĆΞ •Ţć*âꀑ’aá“XzX{™€´đ'+Ý-ŤÔÓD˘Ěç}„önČŠ›č6f„‘źsĺ#AŇŚÁ›¤CćsÄPaa:·‡ßSAĄ…AP R¦čX*áNŇvöň1OĹUN4°÷.çsD +zÔ]`šµżÚ‘ç°Iăf@‹÷yĹ”_Efą†[vĺ)z6Ť3çŚ3Öł^ő;™F»´fČ,™’B8,óž#îW5{qđ9Ď;ÂÍH Ţw)ćEÚĐpí/#XkdŠ:ě»ÚěÜSŚ[BJ­…„śĐ-±7ĽĆř7±ě[bBÝ{täŤÖ• Vř±/_ $ÖĹ wžwt)šBεíD¬‘áÉUŽŤ‚Y™µ˛,ç ‡”•z°ĚĽ¦‡#–Vçöý,@, ¸ŁâTö† «˛&^€°Ř V“rŰ6Ą…mJ~Ě;G¸®0áßĹ_Ą^;Şţ†4ć*mçz˛Q6Ŕ¬ť]ÔG +764éo˝ĄňĎř x7ą–P ŁŰĄČ(Łő%ÓëŽ ®Ň-އŠqśĹ®`b"ę1ą‹p1đQ”źÂ˘¬TtWČ\Ĺł•NťÍÜăcDÚ¸M‡ďň˙s–Xś‚e–J˛€8(|SFá ®čĘÓş^żĺ´”“i2͇ĘhŰĘše›ëŃ´Ő.µ¤EšÔ Ŕ{:"¨ q©(÷&™ÇB ŚäůO ®x¸a[öˇ"±=›bëČ1žUSĄ"âĆä}c掰€˘ŰČ5}r ]ŽTR®ě3P™˘×…ĘőĆÚÉ…1el›hL®Él0}ŽŔť’˛rG.á^=‡Í™2íŇČv(«Ö´©ż˛6¨ŕüC#źbn*ŁhŰQ*ď®OY4ÔcK—˘ŁŠlŽőyüFÂY†řőzYhź_CrÖ¶b:¶XBŰ® ônŠe9*éQ­¦ł¦şg¸żSCyřőÝě¶zIJőÜ#@Đ‹] Ĺzw„,tŁRńńzĘ| +َŠÖ ÚÄ(aĺłÝÄX&SHҬ۳š!Ť% o› mQ©_ś{uĚpů7­$”2Ó†áy†!Řş° krF†Ć¸µH)v¨eŹ)k);Sgô ż§ÝZ"8lş@>M5c­e]†>Ňťž"ţx•žĘźľż& Ş0kz<Łě…ŃfK®yŇI ďŽ‘äčĘă‘ëöŹ:"ë2*ŹEý‡(ő¸ęlřś;bD„č+#ĆŽČWD"ŇUE«z‚x¨fEH¶ö±ŮÚ3XVG°¸·µ÷8¨âsÖÇŚŠų́'›Ä]·łÇšŇÖ­Aś’š•‹R©:aTO•‡HƦ–HkE„ĄîâH®27@jÚG¸dŃé|^K&Z´ß.ŃO0×EYF||ŰoÄ֪‘6 á~#ëŹ%P^Yrľo„[Ç@akXcRşđ¬o kí>öŽÎ0©Ď˘ ş#Úű;J§őđTŞá MrŢ^Fč÷6™fü•yě·őR0\‘Áą+Ŕ=‡+ęZÍ÷"˙ +uÖHl(jÁ>‚ץG Âă’|ú9‘őĺ |ÝŽýĽSô +ö- aŘ·§´Úő- ‹$}+źfW94Űž#ÖU•_ŽéŁŮs„ű…ad±y—®!:—ÍÖ mzń륲іkrő€1 ,vÄC +úÜbŔÄĺ\ő­ó1>aćH’s>ˇ€Š*Űż®&ŔŔ„LBNUjn§˘nn0ô`€<4ľÁ°)ş’ôĆǴ aGůĐAüT‘Ą\"râ‘~zşëJ'×<ćÁ waĎÉ>µKŕ<ń*:âëÖšRč3*Š`ĹxŃůj˛6P©«ňđ<ŹŰ3 ­3jśPdE Ć–iéFĚ%ł Á™Î5ŢÄç(żAů “=ĐM¤Ą\úü`Śĺ#„c’°ÔŐŚ˘;•Á”ˇ ß%€NęĘ 2}Â[^˘‡ şę˘vťX†ĚwDZŢbŁ+Ťܞ#ś =ŕ+ĺ"WApg4 Ün!,ÉZÂw ť˝żsf“ÁHp—®{†V˛ŠšFH¤qRQ›N"2uŽ Ĺ6·Ńbíś"V±:÷ůč?í..ó}ܲﶎM ±ŔT{+€6€Ôün×ç±[ŕ–ę¶$µýţŠK#JĂW=‡¬íą§^ ŇĆ“!ýfó>…aŤěłĹѢŽ(1„”nŞÚÓ…yd{CŹ µÜ?ˇÇCĂůĎ™_|ź§a„Č^ČJQqbäą7´¨]!DÖß?C#>CźIřI16ç”%20O… ŰĘĄLTáŐâ;Ţ_čř,lWÖ­lţ¶ăęUńŔô ¦k ~†ŃJ†U˛wwiŮj"Ç‚aŞ(ŮŻÉô mnV–*Ş" (+#q‰P»0źámŕ¸YŇㄝp2Ă‚ĽEiś‰ŐŹęë"”ÜXFuQĐXíăŮĹú¸a_ŕŹ9ŰÓ÷×¸Ł®Ăşb …RWEŃc˘8đá­lq+/HÍsÜGŤęByźi‹8Ý0R"şaç(AĂv·ţę¬ÎĚIĂb‰˘ŇÇ0[ŕn!kÁŐ8TŠĂl nĆş9É Akřu”$жËf +ć¸Ĺ/š#ź/ĘäOą…7rI7b:ÂX’ +  z +ʨg +…a’Ó€€jËńL“ď J«‘Í9?ŤOh¨Ć5.űá +÷ĐÍ ą#śŽq‘Á5…€‘ÜHműŤÖŘ0Ůńü)[nÔ,óz}w€5!»0(ť oNżŻgWBˇ·Ĺ  ˘ˇĺŔ\¦SČN(ĆŇçĆ*éď^h;“^ľ“kVS‚GÇą'“đŤmz(ňéME>FڤÇň~µ?n…yE‰Ďń‡#@xsŐÄ*:™é‘ÄŔa©*:H€‡JVó1bĎ)=ĚżR¨-ĽŘrE‘+:„Z6•Łź7P˝4=™9żC-|ú #bŕÖ y˘#ŕď?'3żŢÔ:gzŠx %´d·šL}ÜŃš­J 0ÄzXôâ 6rޏÜMŹ„ů b)nvZÖÂąo$ś¸Kž)w y”ÁA% +¶ ;6gaI ë$)Bľţqű6iwآÜC”6=D $/ŐWă*î5 ›ą†?DOČX]d{×}Oç>VP%Đ-Ű®ÂwFG笯ôšÍÓ†‘öEčĘKDi/… a 7(?¨aE±…:qLat™M*­hĺŘ’H Îçý`mK¨•iÔ;j)ěDÖđvHýÄSSET¸j,čö0,ĆLÜó^µpŽO€[GČÓăbŤ]ŽŘŘţk¤ë›ătĄŠfčôŞZGˇ+%"—މD[CwËס¶á‹#ňZçęÚĐ;C4çD3sŻ[@» + c{uő@snđ` Ęx˝Sy±Ł±Užl”• *ž"zÇ‘^\Ü‚=ĺŤĺú'¨«ÖßÇŃ‚í=ĆfvQ|<”Nń‹Nť›iň‡ŮsÖ}Ś1ůÖj‚OG/ŕKë;LtÓăUč3इă?=)Ů z©U şĹ-SAv[ë= ÖăűM\xÆ+ľWJßŘŚ+2ÝÄ}”‰g‡ĽćaméÖŔ]áů4Žp& ÚŮ,<ˇţ^uć}UCő×vi@kE „’Ę­úIO—QkŤpl|!ęÇĘýt~ÜQc‰vHUF;"&вç}ÍZäHJHFŢQŮ|HĘ>[{& ÖĂ“Ĺ2KÝ,Ř•jšl 'ŹË" +&ަPČIşayî°•Â˙â:Ł3&\&đ@x:Ŕ(PSĽ4p\SîşŇ§iŠÍjî]]é“°Šž §©ţI,Wa­–PPÔÉ5ďęJ~Ly6÷<€2—ěy(o‡5 K˛a6¨ĂI& tŤo8îŔYks8I~kwÂú1 ±Óm§Ď®•V„yűłĘi€kBÇŰNBŔćý,ăJŢö mŰ7¤KľrlYŻő‹Ô †˘Zdkşć–ŻĘR^—ÂJRuéăĄţw*Šľ2eÖĎK÷w˝ŞŁ?€"ć„`ąOMčőbÝşéî=”Z +(`ŮŹ3·Ad@Äýçč3O•Ehi‹‹§_&5;0 ukÁ­·×k´} †ň‹đOQ[ëćĽyЏ!Ri‘_ěҸ„n­5`Ĺ V,Ź ,ş«•qĂ?®­Ěüđ(g•…2µsFĄíŠl^gÂđŹĚÂsĆŹŻ,»}…ZůR“’ŕç OłŞčL ťYÎŕ@=ĄâŔ† Ňyy°5˝Ţ~Ę÷ÓĂC/ŕOüů»<Ţ ¨~˘ŕ}Ĺő·źýŐŰ?ýăźNä?Łrđßý„;†Ęv(ĽżˇÉR4ĂR‘" +ÜÄ™íWŁ’˛R‡lź5„Ćףu€eX“0;ľ˙‹‡/­9T±Ű–Ŕüm…ů«Ŕ®#Ľ+ăC46PźC¤ĺ‹­µbŞÚ”Ä”ŘJ°tĘ›’N*bźÝţ•¬°Ďž_!;řAíM1~ ÉbXGľ?Ö7¬;D÷öđ'»ăZ*śółŔ"‚„g=ż¶˘€ůƆzĆ–lᆣîVÍ^_r …kÖgʄϕ“ˇ sęÁŐ·3!äyÝP«ß1íţ&dYŞôg©ąn}@ZˇˇĚGá-č^Ăö ¸ +ô§ Ä: Đ/ń„[d$ěáě Qc»ż‰*15·fâ Wę ÖfŚŔgŁ…"Î[¤_Ű÷} "ZĽŻA1YôTCR€Ř…faÔřČ©Ą7Ä=‡HípŃfOósJĐĚ8ÎËpC.ZKöŇÚŞ8ÚzZ`â©!‡ţłhąnˇK8l/yhŠ|~͸եR7%QťghĂëéRŠĘ6ľˇ\ýçĚ÷ăźa¤0쬺ŚÄ'¦6SQŃ}QîŤLěúŕ„şöĘÚ-Î#YC1¤_rkĎ6‹üĹV˝X= JȨojÁ“0Ŕau5űđtĄ‘·ćxô°P.›~ í4UŻyÉÖť,”Ą—’ŢşáĐąPeßkw0GUÔć‹$´#őĄ>4Ór¤8™)ç÷Η`Ř‘Ćj»sdç6‚nÁČ6ôˇK÷ç<2°w ćśwŮëÚ8ŃćCcꍎ«Ö¦*•<ŠKŕ q ý¸!^iđ•G{Ţz¸¶‰0ě_Wńxýp…LoéŘcÓ¸´ţ17`ֆĨËřWíą_ŕ$5Rr °¤[c Řs %¬}°s6ᵹSéŻX+‘ 7b$*[‹`ĐŔpĽ#Ż"Ç#D.]˘[lsą)alźĂ×´ˇp@;QéM°ÍŽ•Jń®Ďg»ä'«ö3< ŕ ®­kf`,¨íF8‚Y3fW2OÉýůsw'/żŘÚ©µŤpW@í +ÄÁcn:śÍVŢş¤x„´§4¤Í™ŇÖPÂ×ÖýŮ“ :L‚ÝIđőÜůHł6]=±lYŮ*Zyó¬č¬Ą6`ËßÄ(ŕńÁ´ÔĺmëŃÄęn BŕAĚ•IŢ“Ź%«ľ„h™ĆŻĺS™‘‰vB©č9’â gÄZ]^­p¬“WqżÇ~OµDh ĎÓŢO"RşÄ)4˛đÜ[“H°Uř1 „Ú9TĆŽŚC­ů"j+xdd'Éęď§Nëg 8Ľ©_p€ÔětµŻH˘t©‘JĽ´öaŕ“Đ7ŕOˇhR{nţĘEaŻç~e[)U Uƶ µë˝Cn8ôůXA°•XR5,‰Öó,´CŐY)T"4˛ ŁŤËĽĐ!Ż 4|Ů7 č2ÝRđbd’fŮł6*ŽU3Č +ČG>Ő!˙-źôî8ĘxŰ–+y†ë­3ŕĎaM_¨Ä™$ŐWńWšq®ţśYę\G’˝68VŤI5Ěz„ôuť© §“匆kNů‘WáóÇ«>»˝BÍ*ętťŠÜÍâÓř›+¬jĚŚŞyű”΂Ăö›;ň9g-&!5_Šm^§sq¨dÖҡQd#ć-dNí-Ď,7vúú(˘‚Ç8Ow¤L\±ťóލ‚JxpWşp§‡Šö$‡ŇqŞ[z*Ă»°0Dß™I¨˛af… îăcä6ň°>?űĄüŘeh4ôß,çPžFGl„˝"™Q"űřyü2|<ÇxÚ ĚňôcHĂcżůŘ€Îću}îłšx\ˇhhK!3¬˝żnçfFŮZŰεÝ»P…>*Úhîł©¬áśďڞżSŤ¬Śč±3/|p‹ëâEÚ˝żz§ç¶˝«ë†¬ąL¨„”Ţt€}ňš‹@ç…ŞŮąQ>•aúşNmßq~fĂD¤•ČăŇŁ«Ú!eÝYr÷ůą= aµ_IÇ˝őěˇ'{*!tr[Ŕ* Í4Ľş×׆öď/6ÄëŐ,žŹ[O¤]ÄQ5uÍyđm=6Ěm9Ě´Ţ/ôc+Ô#:EC´·S˘Ľ­Ź«ÖČŤŰs’ź¦ČZ÷Ť‚~>ňůŢźäËâĎđn€\Îo'ýüâ6ťd˝˝mš5úIŽéĽ©dKş.ŃF``^vńĎ;uµ‰šytĘ!A{ĺZ$Ô®xí¶äŤ8 Şóڶ¦‹•Y€Ľµ`îRx×q€fر‹ăv¶V€2L’ť°IE°jŘä‰_ztz×­¬aä5Í0=8”|וô·”×L”"Âŕ°FŔĐMĄi]€yómş­_T7ÂPö;aŮ» í4ü™§;š 6Qćč)\:Tjś ő“â>¸ąŞ3l.9Ć +ÉôäEa’mA)DéXßo¨ÁÇ”ú§gďG’ ig`8¦XSF ÉňWW7Ȣ4·…6x4OC›pÝY©łöÖ¨”u]â8d(ţq1ŕr°^)şĺˇ…ÖŚ8|6ń-J7»¶`&iNž†9ĽŮőč;őú{D0q¨®ůgŽÔ™&6[R 8ŰíśIé}<*XBUĽ ŹCĺáÉLs0Ľ]ŘZt•M¶ćiu@ÚIĄéySS©fË`íŇCŢk((A@~ĽiXZŽmźMaíńdô.í·2ĐÁ©Šyä5N”»Ł—ťL¦Ô/<=ÎJO,͇Pާӧul;yÇ„b ř"jÔGż1ĘAŁňݰckC×gQIŹŹĎĂ^<~L§ÂĆĚŰa`Ú˛Îôn˙č ¦ÁE"ŤëË(ŤA+šR˝m-&—gö.~Ęç:Gäď_Ŕ*ą–Ť¶łîĚSzŘ + wL݇î4ŻäĹ‘ś$ž#B?{<îŧ[ˇ¶#«‰HžÄĘNµvCm°ë@’,G®ß”čëóŇ4e^Dġ¶# ˇuŹ]Ž?íĄ…#< ş˘{”ĘVd’oʲ·‡˙đz*Fr*žX4d“ÎXÇK ÔEdÝéDłÓµMĹ„8ś<˛Má5i¦C%”íĎç]ˇżaI~ĺČú@|ăĆqëYâ6mEŇuyŽř˙z?cźődŞ"ř~„łíZČč€Á:^ŹŹ©űzČד+Źť%ë0Ú…Ďń›†ľ'těĐś{–:ľZZŘMX§˝}UdôĽŠ 9Ą=€ÇÚđcč¦ĆGüt)}Ó%m>–iŰŠ$geCÉ€Dť©†â\{¸źşÎ›˛žşśę|±ź©^¬úě9žjĚhzŐpken0ů[ Y’@ęqÜ~°-F%Âgçcă’fٱ#^öąÝđS^Ó!‹–ąZ'B»ż“V_Ňĺq$JDő€ćúî8ęnĐ"eÍ­:”â@ŔOŮŹű7E~•BÎf @;Żł=c%Ă Z]¬"PňÁěv dśńz9ýŐtŻ}‚®/~‹?Źç€ýô˙D×řĺ«0n8RÔÜđáĹAyF[^L.Ę«€ˇć‰dQşK ĎaPR ßĎ#ĆâHZXÍ“ˇ)?¸ŢoA3ý|ŽŘW J.g~±#ş°˝4ĘqŞŐ|*±Ogµß‚t2”k ú¦0©ŽµB’ç|ZBIă ?ŠřĐŘ_?Y/N2Ď÷;kÁëéë 9އ˙”çŹ]'e] +ÍîŠÝǰ6*JŁZËăá׆‚'`î&¦° đÉhBŰ@ŃÇ}©¨ň†»¦ô™Ź;:)©‹Öłę‡fmmgmhŘčc˝ˇ·Ą1ÎÔ óz>L±¤fŃÚÂ[âŞęÓ–< řް÷ANŤDd‚G( 9ëăPł‘Łá‚¶u5c:`ů’ĂG›´ös—»:—5L˝Ľö!Ç•ůýcr–=´Ç(q¸é€[ő§ôŤŃó4©‘G?`ŘšNK‡ů¸a§pŠąáúôýďOEOO (NXŔ3}ŽňŞyć%’ß)í§aŠ;PgEt[&ÁJ:+€IîLŰk®»_‰„uš†ŐmBLĎ!j4­ÜK‚cçqkldţ7 +Čp˘#‡2$Ęż+ĂEüwŤ 1ÎŘ"Ć p;Ůp’5Óě-7Ţ0h„+¬ń„@ÓŹŇÔĘq{ŕ¨Ĺ­C=ńaq&énsÝ®ÇúJ;AŤdE<¤ŻH㛫—FĽ<Úq'*ăh‰q*)"Q´Áý•ű`eŠíZ×ÓöV¦ĆŔ‘ade{AĂüTeń ľĹÂ(Iľî®'ŻĎqoÁÉ.··®SC~§ś: źž•kpŽH›$$ö]+Ńeáş~zÔW2ʵTÓ%>SbJ*GóüYdAω׆ öWĐEŮ•*˛ÝçŘ:lŠůđë»1ç–jx8~ŘÍş` Źy-ŠmŘŮš0Ö‹×ÓâÇ0Eµí®'jÝŚ·µ]¦F‹žş]MÁ­y.Uíĺ°˘h¸”kĄ§}ˇUvµNč»G™|-śR$—.DbF·É(¦ H‚%”â»ĹfŇiŘ®Ą ’-ý|$ŮĐ˝ě¨Ţ8qt°‘ś€—K6&y&‡î Ń=z čT”ŻÚ©_ó ¨Żĺ ÓłşZbů <ŚjWŐ"ńóóŞŤá0Ż»Ť¶hvĆ(úŢPŻ 0Ő°ňé÷î8X8w@áŇ.4[j+í÷`âô»¦+6°°Ö ä[5öbš±÷.YzÓŰĆN‹®M"a<b…¦»'Š[»‹@KÂ9łňÔ۱ŹăĂą^DüTΞôFËBF°P2 HB[Ź!ýWđj2űEe­É$Łŕ îSmUűę áĆŞ+ŔBOŐnŠş¦J&Ąy­ 妇Pv€Ŕ9‡âQ$Ě:MśQňű]BÓżťQ ˙'Jë˛"JPđ®"jhęAhšxž1Ię)x…iŐP ôŠ*Ěű@zš¬ŮÉ tÂ"LW"ę^§;˛¬¬śHe„Ś_“Öĺz”@9dk­Ž­ś #…íî{=FXAŹ»Ç- ,¸ZăPŕ 9Tŕ+‚5áYR1˘z¦Ë˛ŞâÚ*⏻`bEWN‹×ę>Ś^Ç,Y-_'ş:ë6Ý0'ňW€ľĘŠ÷V9.”3ĺ¨î]D5‹UZšđ樂2é˛"L\Vňňç  +`R +Ą ʇÝXŇcF…ë©ő9 f^ă›—đVkP›ˇOý]J$x(Rj6 BŮŸ »ŹűćÂleD>­ˇ˝Ř‘OÉt6Ö9 µŃr^Ę‹řÉ%Ľ´onđsćą4'ÎŇkGˇtśAĎKŇ\yW˝ŕIUth]Óűî:CŕáÝ}™43VbYŁN»"< µî(Ŕ#číz BÓ©ô»•G•âľ•Cß`­«Ż&a&+,„ś‘"¨h“#!ÔebMĎ*um"Hî `V#€Ą ”Ű5RĐŘ„Ă6G˛BfŻo÷7–ÝÔ.čád^ěú L ĐZ+;:ˇCRdhé\žMž"öú =ďĎs‰ PĚôdPöG~áĂP÷ĂpžÂXŹ‘iOä€ŰyÎ#ÎůÜZ’Ő'ĺ‹•‹Ń™mD»MÉÂŹżľŔRö<đ›u&xÚ€će&ŐÖ•đéjŕD¨Ř†X#+¦đičČ3řuCvVć"PF!OËŃĘ +$„iźá,ŠpŽójŕ?EdX_F8”Ę=F ¤oB†(řŕ{î’áĵ%Ň7đĂÔ‰ű}Ű't:„g¨–Ć’Kňj,éßƤÄÇ%"|mh™x9ݬťŤ ĘőžÂďżó-Ýq‚Ŕą÷¨;Őčćî6@%`G±şĽÓ dŠĄ+Ä`…fαůˇU™ČŠLř×ĹęÎŘŢD%3R»E…Ô00BŁÉ)4‚"'Ęő8¦1Q +[-ć==ö±X#4IŻ«ÇˇžÇnf T>śŃ1íSĆĂř1SŐŘ‘M;n(Źç⏝X–-eżöĆú%Ě7×0[?ĺZťXQ¬5瀔Ôh·ľ†Ĺş]ZZA‹Zˇ°H(»śĚ«0äcŠS_›ĎvUŕÇSyĺ3¦ -Ól†gď"Ý.§]É•’ˇ0q [ËĄSEi’Sť˘Pż4háö~šë eL´^Ý(9?zŘ @ÂŁ˝ž!Ýdî†:ΔbH˝ŁÝŠ!—ÇBż«FÖč÷!NÔ@ň¸AQkślÇŻ9áȱxßĨŕÎ… ĎZáŐ8~#ˇc’Ă3ĆrĘŠX+ŻĽ#†;:´)Aî +нʙþNŰYu'8";±÷Ů9vR®)â„ Vž?ěâ“˙Y + đkBgiŐ”ç©9ä-'Dp=oŘa˝išh«şĐËŞŔŇSmŹŐdŻâĂô€ŚpHŮmnÝ^1yw¨ kćü5]VĄi1jzÍ ŕqµ[)z¤rA8 uĐC[ä çퟆŤ„X±!Ú\?¦ČÚmĺíqđQCÍ™5×›ŐgĚ…Ënjő>—Ű•$9Uş‡aĹćm DŠíEŤ jµt&#q‚őhkŻ#(öóŔńlŃ #Lşrç!‰ Ĺâ4˘PH'B{aSâ’R±Ź„† +2z`éZ‡:ăASŇ‹á®ć4Ţ©G™Ł*ąÁĺ:öŻš|ö>&rő1– +{ +ret»oy|Ť +6ž‚€Ö3ißš>ÆuM¬TŐš +îh ˛ęâ,V^É@“ýjĂ17}ŰĄ‹0ż“Ut|uJíëaŃâ1+ą¨T@Ő}ş‘Ć!ĺînPÉ 6Ö°^c.ĚnĽĂ-‡VŐUi—m˘–ĂY˙dÖzťŰ <@Ě`z>ČĎyDšŽťőŞą9V¦8}1VŘú™”Ȩ†ŮQA0}SÝlýÄZU›]ëŐ-GMŘađŔQµô‚0@»ŽÓş3ç"ÝgDážeĽ® ŔŹ€˘)Gň§®]Ś»?„/íŽ8!Ř«žîGčÁ +€VĘvKĐL˙‡ 1^Đ$PČjěÁîíöyWŤ49eśűŤ! ëqIN$×üýŠ8¶k&ůýS¤O6hŚDą†íyÇîî M,&h+ćC˝öYÇ(ÚgY­SĽ)3#š*ą"± Č ě8ÉŤâŰh rYç…ÍËcŃP¶§iÔVŞěĂČšŞ€ÔfÎá÷ĺTké:Ţ~ň´ÚĺTęCjÍĹšŔὥćWEĚ0ĵSŰ©Ěs"§u Ú©­ Ăľş´žĄptú;îŤŔďŁĚ[Ó»ýĘ٢ťöŽvRD<Ľ +MŕÝqč¸Y·óŐŔäŕÍ}—9¶wÇ*gżm=XĂa]Ťq^R)@.ýŃŰ™;EЬťo + ÎđgâçtµTą —hs…)0…Póśé!hŁęRđkxŁ „ËZĄńcŤ•eć8ođ$`ëÜ×°8®3WUgEDő,ąĆé5[ńZ9“' ë{ڞĄx†ŽZtíšXĹÚŁť=µ“żi’a)r­Ů(Ň›äC%ďĆ Đú¶Qdn§şĺÚ´îŔäöîLÄ×’o ÍoZ9 +óĘžÜÎÇ?}~^U ŽmÔ‘'ł=őłôl%$FC˙•ĺ’Hg˛âęi¬7J]Ă$§oBůHA(żÄŘZőF!U‹Ą3‚JΆJlt˛ŐłâŮ€P°7(JŞ| T–—yoő4xŠűł˝ęy­ęʰ^U˝6¬Ř%đçkşnŮaęN xťŤ˘ąIs!ÜC|XřDľ9Dp1AÓBűhcÂ×KůYăkąŐ4Ţhk®|Ĺ\q]`-Ťw˘ -‡ňnŤ_@"Ż”Ż¦Úł ¬b®Ło ]»Bç˝;Ú{±µˇ÷ËÚçTcŁĹ8‹ÓKŹÜúp2"lP‹…҇č Ę‘±Ă3[OĘ€{ŔéqţJ· +î€sĹ 2 &8ęĆďp§% ö`(Ś©€ ó ÝbćPÔ[°ĄJ[”Ő¦¸ľű+w!)Č(é cUsä{`ŕÖ<@|%,Ň9Q& @fĘ»‡Č!ŁŻË<[j˘Z,«ˇ ‰ ŃyĆZŔŢ Í¤ ­ĎQXÓ“¦o‘ţ¨—P)đ¨6RWÄiűFü% +řú…Ş„$‘Źzw¨‹6Jp™˛÷!š<=­h1#"¦ )xä†×ż×ݦîSâ9¤ć8lh Ň҇"%MŁQ”ő9?ŕţĽŤš’ě Ϋ0Ű]¬m!LG i˝´rŠ2ĺë:'˘ő{‚c¨żSM•P íWuH5ő¬7ä62n !¸ ®ľ®ô~Ő±źˇcó©LVżwă Ô$Ízx:)ţäµvˇ;ĂŠž… ¨ŚÓ…ňP¸Ű×ţHlz~Ţ +†ăĚ{ [ÎĐ–qCo±đv^§úp\˛Ţş“ňN:Jľź˝đĘ»ż<ŢŞËußu××Ä˦Í«SđÜ×+ŻZ˵ëůPX÷ŻG*É,ž +Öŕ荖 Ĺ–†řý‰ěe<<·z‰×”ąk +k Ő*•IA‚łÂAy=*0DrĂá2ę=Ć2–0błńôɡń€PŹ–Â—Ýü9t˛[ă‰č hKépáLQcÁež÷îű°8Üá©ĐŻńđ WĐçtŔ¦ěwˇOv-Ń´oµ`BĐ7Ź­ň†pŢ’!›ěQaBڵ¨žˇˇFRT‰¦Ô\ß-hdđ®•=z†Žš´„ďoúŕŕ.N2Eʦyřş‡“ a˝żŇ-Z‹Ŕr7BPá9ŐNGś„čZČÁŁÓ}—C)8#ËQĎ-üÉrçâ±Ö-łĂ 2Uë[˙TH?3ďU(Iů–„¦,ő\~~ ˇt¨Đ–CR5fÂú™Pü"Ü'ˇA‘4őaŐ'Z j°î/QjĐĐ@R¶P…rďď[‰†ž7í\~ć©Uú)Śŕ´ś>›×îŽ8ó^%ŐZˇ>.Îż,xTĎ‘cݡt¨€˘ä®J. »»07NřŘY!› ůÇ”ćÜŢŐ‘˙­Č +­ĄĂkźéšö‹íźäÜ…ˇ')Í:(„۵vé±?Uń˝žV#´óMŞĘ$ŻG­A1ÎęłµŇÉĹMA‚ aF‘CFv”ÜŕüÂÉU&±˛7Z-H„ó`őţˇGţóŚĎł—đf ç?;“Λ ,ű$ţĚWÂK˘Ůŕ éŔ:Š$żťýÝ»9ÇFž¦@늶Ť"4BűYâwp'jĂŕĆs=ĘŁ›ő™F—m4· +dá¸Ô˝ł„„g Mek†Ň'×€|śŮ€ş»ĂŃ5ü˝@¤AzŚÄ›Á`«ĆG `G™Ă,śÂV.Ô/SĺUĹFŁ(XËzJĐVŔŻČNKÔIXĆĐ—8ÖE§?{hj‘’0qş®B}Z M=éM‡(ďŕŹHRbő+y¤ÓŔ%YĎ5ÜČ‘é.—I“í&:×ćdśžúd1ô‹P­N"â=+ë(l7·PŁ ›;ŇÍ‚PF<.¶^ß*Ĺí’‰íXCk ÁZ¬:|˘žŞsßÄĆc]Ľ?^ĄŃä›rłˇ»Ą))vž@Ú@YăĎŔrĹ`ńZ¤Ă"őÖJ-}ŕĐO,#Ţk×Úűu7ai¦˝Łk†4l¸Ź@á&AČ(; N_ýúî´:VX߸±INÁÓ˘bÚ +ڦLˇđčD¦7NaC—űş=ˇS‰$–©?Ô‘rX[ToQM›±jWJ͆=Cľ‚şk  ¨ě"ţ¦˘•——”TľDÜçó+é­ôÖÖ >/T™ÉPe¶č—E„J1ŃżPXĐ)ÚđĐ˝“_˝Šfkí)îĆ/ ř\ď ;ë_Z ß@X ‡‡Đ’ĚGá”JŃ‚‰°ĚЉü~2©Ĺä šđR‰gŽď ĂC‹Đ× ľFÇa ˛ž(,t?őŔ®G 2×q»4%UvY< EϬG…‚)m!^Ůrě ŔŽYžÁš,˘¦Ë,WíYz:îłŔÂč †tµZ«e3ĘÖmë˛ f$íP› «˙ő íFRFJwNĂ#®Úk%}Č×úERGe§ť.UŮ–Â=śę Av’Ɔ:&…ţ{J¬`vĹm=¦ĎčkYŞ>cľÖŽ*đśIÖA»HŐ+4iČ—¨Ü ň†OőzĂ.RŞW*ŢîR;kĆô ¦†LÇŞFFÄ(ŤäěÂLŃšĆä”ĹMËŰ IĐ[gĄ.;\•3E‡Ë{WŐo:X怲,5h­1’©9*çhňě§š\Ł/t·č± R6§ˇ0ż°Ö€hN˛#dŠ© _YáŤ%óĺŤŃ+´ŔXדĺ[mŠZ›{de„…®ăüŢ6Jją«NzF#Ú„[WD#‰ÂTÖ \66ÇŢp "®‚–ćđšĹó­Dś«jYô'tęđ€•ŘCąßlaߦ *ĚŔĽirP0¸t«ŔŕfRE| ˘˙”›úĚ((™Đ× ‘·ŃřÝ 1Ż/—”ĺ%D˘5@âĚ#¤»:-n±…=ŕ7s%ŰŔ°dŰÄ`E[1ynĚ`AŮSşčQh#QĹWydfJOđ-‡4Í•6RQDQ‘ ‘Ư˦ ÝE: +uW“j dö‡¤·™Ć5`~UłNÔń5/ÂéWÚ€´éZFě6ů" ©°ö¦B=k1eß2:%P* 󇼺ßUĘă --ö~ş¸ş{€sĄť‚ˇë|IĎ`Ľu¤QŔM8^?*ˇ=Ů©-o·lžyp&ĺB¶bđ~îňłv#+ …’Ä@4ŠĄ!h肏é?Ä˝Vü![ŘZ{«éü÷P˘Öµ/łńIýőv´Ő5‘9ŢG©f Ő¤˛{°Ő#çkôsÖËYޱůŚ‘‹Űžq‡Č@[ОűHéVĘÔ[8ŮË-T4Yfä[zÖĐ”čT<SęŘÚű]ag›8F‹ć×¶d]đńŕ†—-ÎŘ4{ź~óTt"ĎřI* u‹á6»)ŕ‰›o(ŽÉhŤśĐ1cJN-®îő¨ť0o'—¸8JÚ(BŐÍž>‰‰~Ş%ŹĚo1|fzĺ|ł„mµ[ËczT f%´= ŚaÝNM‡>-đĽži§ˇ˙ŔŘ%»-čÓÔ<Ąžď4üD Ćć)ä´*Áţȱ’™°é-ۦtĘËc‰Z˘Ý9¬GťÇtťŕzW=«ËVg*,˝›čg”Dü1äV§Ď«Ca T‡Şë4”@O5¨Đ%^sJS¸î­oO ²Łó±ď2LĹÜčů7\#B"ŤîÜăPĹI.A‹Cmü,™S`­Łxʍ)%şWőueF ‹ÇäćÁcv?ŞUáٶ©c#‘„Ěniyj@!ĚâĐíµ p€Ż†Ů!¨‡Gµ†JĄxEš´jDS Ş:D˝ŻkĹ *í*ţp ¬'ÓsbT“E<ť#4bÉ+ŔxŤzsh as¶Í4]j…Aho‘Z©Ö…eŇŘoA5&đr׊J>°[đs'y)HsçĄ5›ĹľžÂÉv»îbą}Qk'Čx)mCúĆʆô­uŃXZ°i°\r‹ÝÄŠ"€UŚîëYűNVfPA‹–‡Á––W]şŠ,”ű¸€ŕđ=r,Ł&-ŕŚ:[…űÚ4Űşi҇ëăUÜ@ŽK‰ŢĚŞfA–; bVITÓvÁ +#vtR ˝¸|Őőú©Cť–ŁSTŰ}¨ş•5qvnq¨•Ódiř«Á,OÇ–ĺĘ碶âˇÔäÂm.ŽÔĂr»k-)đR•E(˘ Ž_¶ˇDUCy¸iQT{8TGUśo=C–Ş©LţŹd&ľλÁ47´cÚnÝSżvŘŘ$Ięa +–XÝ˝ĺâką¨./§Ü=…«Fč|pĄzJ#łd¤n-ŹrÖ·dkž Ŕ¶´ČsŕPk,šľşI> +•p´.ŚďÜČmĐ…ÜłŃ Gżw$DV؇#¸ťHłÁX x­c]*[Eu=ÝRTyÂo8qf¬€iy*ĂucL<0% ]XWڶ4 ęçĹSDČ.SÖS"Ý÷ťA0Lô/JrĚ`;«k®Ţbgy\ŢXĆJ§s˙+ţôu-ű=„Ŕčş¶o´Ju4ż†s ö®é­Ő ˘`łŢó®vÚúĘĽařEń9€#‘đŔ˙j,kMţmuµ3 Lčvę(fż|ř}ť°đf ă(Gś›×8ň«_#¤ú ř\éq;Z7¤°†:¶¨.íŁ +ůşÄçüňu€Шr%ârŞÇŔť’8Úµ€{Eëˇ a ¨µl¤-KJfƬŞŔ ń–řđ5TšŠŤ‚,¸710äŔ‘ë`+Ł*ŹĹJÇN_9NĎeKŕj€Ŕ»ČňlËj’>{ť™Ńîń˙Řă‚uk0\ő ˘ÝY§ĎKĎhy,c)‚ľöúqN–”UlU˛<¶Ć´¦‹ŹQ±MŇÚšď~cÚúĽ0ăURVD{&‰±1D;N‹Éí÷é ™ďĚ̉ŇEŔ^KĚ ˙ĄÁęAµ‚’Ŕc•t D–k‰<Ł0÷1Ŕ"r…Ž "WŢβ»ć…ö%'ĂJŚNëýĽę °2BQY)f©cnµ`ägĽ9T@řkB+[gÔ4ĎşŐe鄨łë0dŃćC–¸†ůhX0h1ă­hRŤęL¬§+6>dť§™ŞJdLé$ńŃő6ąkT€@ٵîß=ý|Qq356ëőĐsJS@Ň€Ą„ÚçCJ-éHAš5††`޵î(ꩇ*ň .HyĚT± ž1# ópz’A×e<¶žvHë·&PLy€©e6Şř Ú~!Hř‰ş~!~Ëzp•i&˘@/Eg ‡r·Ŕ‘ćŇ<Î%¦ÓFcuLÄŔxĐBÍ0ő†¨€đ͡MćsODt&™ar•ŚťµŔv·1#âr:ÎxG–-źÂN]ÓŇŘ7.¬a +4Ęń"‚:ϨLáסžĂš;ýd•s;0€ękÖUËŹ>~C°@í\’•p]ŻbĂţ ”ŇŔFNôy滯Ą•_ŇF¸±~ĄŤťŠŮŃztůj8jBr§Âl…‘ż¶V Dp‹TJ—ĹjË"ŤE5ČĎ%ÜŤ‰pA·"@ÖŃŞÍ÷ˇ¬®°3ďi ĐéBĐ2oĘnEŇcřĄ¬äĐ1¶Aĺ×#Ż ĺî f¦ĺ#¬żśŻ•]ł,ÖŃæ +xę‹ u#EÂvţz>†őSąapŻ ěVfŇgdÄpUîu7üoś+×{C–U»fAD”qCl`ąśĎ3&Ą'-ä¤ ŚFÚtäřěţyűËçň)ě¤#Ć»ÓĚa,ďhň®ôEUöSgYźKt%xyšŻů9ÜđůőĽł¶\żî°ěĚ *‘& ëţ!“®ě'7ˇt% +ah^Î —`ŘZ¤vč˛l|m*žC":O*–+#jŻh,łŐ>˘’CYř~sš~Äî8& ¨ÇHÔ9“¬Us¶Z[ý>NG!rË6U:Iso(Ş9ńt]k=ĐäÝ!‡éübëë”řoPcŮŠ­R>c˘FYđĆ„ěĐ982$ţç]IÚ ^ĆĹôrG¬ +­jˇńNYeYkč´ťáß ™Ň•Í'"ŹÁy›<¦ŢŞÂĄ—3:S+ ‚Ő †öÂV&•Ł×CH™L*±ř±ŚěÇSž­őĚţ˙`₢°~ŻmSx|Č +Ň]ą’ÁÄ2 ŞÖq‚nqe+”*JÔĆF€žj‘«'ŐXSŇU4/ŐHŰčaé,‡ňdľČm˘Şô\ađBţż«PߋƧŞîă«|)Zŕ'$k@Pr(…lšÔz_âdîC€©2ß ;Ů­R ąÜE7MŃ1%ÜĐaÄĄoGŕ€±"F˝&TQ3 ƤÓb-BwšÎpVHy†G,mńúxLČŤE;oS×4]E¸ęßJ0šgÁ8‹U&Eęń(»cŘ ĚRwž5y"Ż*4ł˘C +3ŁĆă:˛ş>U1śR‘ +˝Đ~Pb‹[·8i‰%7śHÍ"`˛Š|„Őͱç`öăŻ& Wt/’2FEŻZBâ˙u Ú“w«©Şä›ÓŁ^ŃEy_·Żl¬Łua„ě„őńFµm?»˛Ď‡Ľi^ĘCëŇś© Ážţ)ˇ8SZ!âÇŢŹĎúWn«U¸ ¨ď ¸Ľ’Ą•+Ĺ;™‚Ăđ_¦Ş„_#¬é]ÄŽxQXÔ ”đ¦đ& |@·*)ŚşČ`Ł€H9Ľ%赼P"Ô [`ŘHOĘ2[O3dś2ćP!ĹěҨC,<ö>P(áPÇŁ;;gfÍ·ť2p•6ŽÖď[‚K…ü ’s·•(OZ\ŕsäá!ľácÄ^AµÝc-YÉ˝§0ÖCU’?ÎŇČş“Łđ>¤“‡Î&âŻĎ1§!a‹Bo»Ë¨-đ’HSpmŐ3ŁĐyÖđËq ¨[™'˙Ą!ř&[ Á%‰¨źxěáŹ3)>«k˘vŢăGě(Ö^ëľ0­»#+bĐl6J%m:ž.ë;–¬é6Zˇ±Í,d'á_Ň%äA˝jŁr(ŘŮäş|uCýÖÜjôŐTC‘q‰śWéw´ËŽwS,}¦XĘćůVÉvĺę®ĎOĚÇĘ!ůý°ĺU!Oha׎÷Öä,uđ¤ö .):*é•ŚŚžč p‹@Nť±Ł5ł^Qű%"~}őK”°ŔŮ&ĎaJ9=#‹ôď=kx2@Ý—üÚ +[Ě~CgqşŻ$¶:,ŞZę,:ŇĄł Ź‚ż°žČatšÎ @›nU<Âô‘Y°*ĘP„HĐQę°dD´Ř +F×Fč˝1([hś´±e˛‹-¬OĹ'8ňă­@ä®ÖEúÂam†éđăŽD‘­˘t7=ˇtĂ~Ń_‘±uQC˛ Ďéĺ‹zë:Vť-űî(Žđ˝î¨8sÝ)>Glşŕ´|›5=‡5Äąo@Łŕ qn¨ÄV7(GéŽ0;SĎľ1îĎç€=nmďŐ¶n“`˧ýž°XŐ¨guŠ”Qź7âĹëď­ö" |=™žwęVŕŻ@)kÔxńlłŽŽŤFFJbi›ĐŤĐjH–5ŠĘrtJČy! Đ•ă€ýđŃ„AĐ!{ń”Pąßł˘ˇ1/»ÜâMéť!!üŕ3p)ľ®oSđ•„s%—B64\Ő˛”Ł<¸ť*âš´S-ú»WŔ—őy{{=ť!"™ęőŞ×Q§€¦Ć.2ęů„ĎŚ€Y<®ÖŁSm‡ůó±pë~ĄZ´ĺ€Ő‚Ó%ę˝y!đ6đ]X #FúćĆfŘâ­őHIQâü°¸SEŁLňP†!ůĚ Ą‡˛×™MJpľíŻMŕo@)Ý—Ä%Y7®-ŤŰÎaŹbG^Í!)HKh ’nBÓ7^şQ5îčN! ’áíÇs§ź~)U/É‘µŢAŚ_¤iDđ¦3Ű­˘»>ŕ)žˇDa÷:s[Ú¶/çăâ3ĚČwą\"U†Ě\>ĹVřx®ěGHŞŚŹ®«…¦_Ăĺ©ß@óňŢźĆBĎŮ/Đ„2/”şPôĆ[جql0:Öč_Śń b‘„lů$çĹ~´úF+;“š—Č1ëz‘w™ĺ CuşőÉtĺČó5$±¶8Á^ęěˇë ŞfÎaGcé=P‚´ĺ•q«/<˝„CęőŚa­V‘¦î ˘ÎfŹ6ÂÚPn<[Ą8†ąDâÝńkmHęr© qzĘĽł!šďkżŇ'üŇ´a‘żnđŽŢźnÔ&» ě *H+ď4“ĺč›OÄT˙Žl“Fui5Ň©fŕąUöŹu¬bsd;Ů t,ü\Ȧš×J {ÉjHĎ—Ö—áěěâąA^JZŘOűóŐVŕp<úË˝Ä Dőlö F‹‡Ŕ¸dś,›‚ý~y_|˛!î5múŤş0ČVR“l€ń=‰!âuQa}l8J*>ărřą·j*PZ +49y#¶g3@oëM˘L!ţă†ř™¸ ”_ĂE`/)tőfŕˇŢzβ ëŃŻe÷µ©ŰŚ€”€gP·–w`Z׼‹&ă 1µćç ÷Cśí^|źÂĘČ/„‹—Zű“ +t|ďmP+oˇšěŐ™Yž©€ŃX×›Ř'e4m3žĽŘcC˝–ëmŰ.>mĄkš—U˝çiuý±«Đ„šř]EÔÇVÄXźZŇDť2é+s$iA¦ ˇU ´Ř!hçt5Ő8ç-+Ű|†ž&(‘âlhUkŚÝNRȤčĂ ä˙yďOQ¶RÂD¨*»źi‡ +VôÁfÖTbćő;Ę^„Ň“»ŞŞ unBHÜL¸ćHĹŞzU O&»$·woČ,AßOČÝ{Ź­3@q¬p(±Ú„Y_r2hTĎ÷Sb¦éVŐýÖÖ•„AŻ&mă4\tŔ9+[TfŰi^ˇ!ćó=â(ŕ=WD˘pˇ„ď üa‹NĂ„¬$Îŕă†_ßť ¨J¬wN}?„ÁR B$Ćt +ÉŹ a#I‘ńµ~Šx9?‡upYľ}Ĺo.ĺ­/V8~|'c"\tŤfRÍÂŻ›Âéş_Đ1]YËve=%!E •yÚč(YGŹuë†Fn)±,Wćhp\`$±hî#,:gfM~ŻXŹíúŠÁ¬iI)ęd'Ëëđ,7‡ţ¸áŹ×’:Ę |ń}ý»± šÎ†Ü˘ŮéJ®äúBđn­ďU’“ÉYyÂ(©Ţî%Ś!ŤJWëY ŻsďGÝ‘±#FD´ziěR<#ŔI‘®:ÁضŰČëž!ŔĺŮŕ…Đë# č-9/ËA*˘:×Ř…ňgQĚÓý–ŢWvý- +5^/&v-×S@G)–hw&@”™$°Çîć%źŠ"ŔÜ.“H/j&Y˘*ÝW˛»<‡]Ú›X’†«;˝*!’úĹŁ`őľ¦ęÝp’{XЬ# ŐwDMQÖŚžîč ŹŐlKôÜ€—3ôR‰hďŹ`VÔbfÇkF+Ă5d‹xzˇń ÂtŞ<sG¸ŚDˇ!xqWş0ü­ &ŽxX™ŢZŚ _8;h±9č‡m ÍRýYň^oé,ű_W)„Ű $Aű‹‘ĄĺX{EH÷Ň™+ŮŚ“öH}Ąš§nę1˙¨ý…66aŔÂó®Ě.›J¨Ľ6Ą“b¦`0¬[jP§MÎ(ë`Đv7í×_ÜŻ>7q«Ć©žŕšişőíY/Hò¦sš"ô;Ô* 0”*Şâí0jE ââČÖhž4`úGDç¬Ę;}c{ sGĚw€t‘„VkůÉŤ!ß*ű«˘Ă¸=WE­*E Ćžt‚ćDĐţX'’F|ß:™*ĺŁ\Čyó2ł5ÝA´­ׂvÜšÂ-®ŕˇ§šFÇö–žÖ{ĹWěDÓ×Iˇx^üŠh%Č×XVY!¦ŁG+çWrS$lFŁZ°¦‘Ů®°f“OCšv×Ę{Çißy42O)®%  I$¸oś +Ďî Â)˝;łť:YŘĐ7媬#”?Ń"Rěżéř·ÎPÇqá bď Yä ?^$ž!Ő„W!­sŽľBtĂb¦yłŰ´Í`K#4ťÖg4Ún!揻4ŕť¦˛ď˛ódĄf#™8Ü׺JC¤ř|ŁŁËVŤ($\őţ".‚«)ٲ9Ő +Ë?E”9'w C>‡áO!Ťf‚2ŁCÁV0í!SuŁ Ż(šŕxE)‚hDʇë,ÖÁ>+kuˇ"ćÓŽZ fĎŠŚÂ´•kJ…ö"ŕS3ßÇŁô>HŰ«1`آ­ËE{ĘJ0ăX‚M“t˝ńw\uY»w÷D+डş5Űń–ń‚” =Ź´vD¨ –nsÉn´šŮ GŐűŢĘť\űCbÇŻá=áiÚ ˛%4„ Ŕ#|•ĎĐáR¦yE¬ü5=ÎŘ©§Łů;ü˝.‘Ó ©Őt=˝5ŔG—q2!ŠJ6.˘6źH­ësÄľö;‡{ú~?‚áOŮ~H–«Q C:4Ęs„7·ĹÍ˝áOQ áÓĂĆ+Í}¦5δo98=X1ŘĐ’ľ‡s3PŽî µ-:Ă\šűsX@MôÓ@P7žŠ€vÔ`@a[¤[lUçf¸-lfn¨ +x‡ĄÍ©ą-°ĄąÁ'Z·VýąĽů‘[x8`Ă Ł¤AyÓ2ő´ç¬ĐŤ*2!j©™“đ•ŞxI{H,\ă$ťă…nUŞ5ß—ŰÓwŰŠ‘~ĚŇz˘;I‹‘bGąĄĐ %ë0ĆkC¨žŤĐWV.®ľ;€ój—ń,{›<ňäţ:?áôŃQ,+!IR™†Ä+ř&QE‘® Ç|÷Zw@ȇ9ůfyđ<7LMÂqDĆ"eGöÚ0’N{@ÝR"8Ł3čř®¶˝N*Z¸żEĺqH#ŚgůŠäm´Év>FěWŕ܆ ě ™ů´#đëäőL@S°™Vö/6P„3I™9żkÉ~ú '›ß%-âđyt;Ęş&~4 y&h‘?ä‹ý¤-B|™R@ §€ÄAĂĺEÄĹőC +ő¸ĚĂ`+tžĄ I:•U‹űxúž‡§U)Äë7ťq±˛äFŢqăU2!P`„Îu`4Á•IńŞőâ–e.J3µÇPĚ5‚"–Ž`ŕ@ęIŹ#…ľ-(°®ő¸ĎĄl©í.ĹťçöĚ[—„ÄߡqĎ}Öl˘đÖËy„¬u”ë:‚ő!îăNĹăčŻ"çU8{=đĺ>ÔÇ0ž1Ăŕ)é ´A´”7¦Ňše«ŽdĆŕĄ` YŰsÄ®MĚČ˙ŕą#äô-ô@(LCPšú óná´6tJÚ=ťĽ2q—+~=·‚ŔŘ€ź€EXž;l%ńż¸Îč _ŐÁr­Ř4ĚđşUO*C>Š‡Ý c–ü%* +™Çzâj_ObkE`}+)v1•`~EtťĽR‘Ů9Y\&‰ś$€‡ć] T‰«”=fü&<mĺdří3"Ůž&ŐŘéSž<ćĐ:Tä«aLÔ5iË­v\PÇ5¤g8GM•…ŃY^™1µ=UĘTÁV@´+ęqµć5X«Ń1ŇM.Đ4'9N3 3!é˛ ÇvJŞ4†$ů µ.ËÜŞRBR«ZĎ´” éž*]}Üpá;˘šđaŁwőYbäéXG»7ČZućmß–{ks&/ˇ~±–ĆS¶(ĘhJÎá:., )»@{®Ű$˝bRžű|ŁxZŢ®ęUç-Ň›š!®¸îľ?÷ůé‘EÁţâ?—F˝í>°˙ő•=ž·źýŐŰ?ýăź~(Ř•~ńÉ×_~¸żţí''řß×˙} …š˛R kŃs`rŠq(VX%„C›:hĂť¬{ÍHâk{’-‚=XIrQĽő°}4ůäđ>©¨4ČLŰěé +(ˇ$żGÝwÎăÝo üOöŢëą®$Í{ź~ŇŽf¦şČ Â'}ž \Ź ďAĐ€žU4e»«ÍtŹŮžŮąŮĐJŠĐÓ>H +=Húőý2óËsH€d·¦c5!mOE ëcŢä’Ç_đîŞ-#¶řăk{\á2a]ú›ŕĘęCˢ2QZň-B–ç p$N"CüT*Á„TiÉŤáüAmřŃäGC]>;hW#×.mP[µ ňjxdš^3\)“ŕ˘ôyŐ¦Öé ˘ŕ[š_žérŻĚ\ż›ŘĄë)Qúă“•± Šç—^ĄW`Ń“vęTzď!˝&ź©’‰Dˇ˛=VŇó^2J˝·¶ú˛]ţ"ÂŚ«ra˘żŽĐ!<~A>idÉË3ŢÔźŚ/ŇJP„1މ„ ¨O6rí53f"DĐ2*zU‹¸sqÚóxŘ~3Ü™Üy‰’HoĆ@3rí«µŘÚk ÝT^3\ +†ŁÎŇH"S-Q‘Ţ»E‘€„hč/ÂGe"7‰UE)iâ;¨iÁ^+2IŻ][}Ůď}4/[ÇĆ?"¤0wÇř˛5O@Í“„ţÚNő ßęEWhU¦ĹÁ]Y˝űř€¨Şż7MEš\| ‘R_3<ÄŁxQQ&ĂÔâ%9Uż7MőÔâźuüß6sŔá‰ŔĐG1?ˇďUšÁ{U“‰^!s–Í “t_¤ł«„¨€Ă@«Uíč‚’VýžYş/«Gňîţ剬g,KIĺ ż”Ň|3$RkßyauĽ?6é|쵚 ‡•OH3 (´ůÄţčU ş(ţ +•KU˝VźÚPşDĄ‡…Jă(uTQş|IéÓJHq,†úĵśTźzî™6DĎŢZřŢ"ĐZ~’% +ľĺLRlUÖ4ŞŰEÄRˇ a(ŚNëBĄćj«m2!7 &tLF¬ĐĆ1]’ă´˘k›@Ů®4H3H„ş&ŐPčhŞQÉÚ€ŢúÝzď&†îl:_~hJ¦.„˘§ěȵw\]č5ĘgŹĎĽfx(Ůá˙‡y|i2˙JE˙†"K»ńU⪓uGăĘÚ­&ĽÇ’oŐ0łĘgŕ5dĽ@iďüžŚ¬­ěÝť k0zÚăf”© 7ügن‚Ö\’%ź,Ż•YÎčšZŰ®Řj‡32)Š©#E(YVq˛ÚŽČ‚FYi˛`9.[â`S-óĄŻ­Á»lđ)Y¨á— +ęâxÚ5Ú˛tźą>ęűg:bëRäy˝…ç ł6 XÉ{°eX–µs´ež¸f+©ĂEQŘŠ{WgÎG‡–, ˙]ű_gx2s˘Jż·üQ“-ó (y…ě0Ľ:sţ¨a1›•L¶ň ľJv»˘jÎHVZŹŚď+´cĚĆDô‡đŢËĚB-U8łŃ˘ä‰ŤÍJ§k—–WŤ:UÚ%ş‚„ö´jŔ“9CGăoš’ɦGÁĺt,äűl88Y j«“䇸"[& *+bě« P*3ŤŐy,›Ô±pÁłľ·‡úöŘÁK8¤2úY“=9¨®b}:S4~L˛ ÂÓ#±:@¦öWgÎE•OÇŁ+gZ¨§9 ‹˙áĘĘ {ňˇIa6sŻNśż© ¸ßY”¨L+HŞR €L#~} (ٱ ĐlöcYŃ ˝Ü˛¬ťř>—Ť+,†^]CýE˛ÇKÖ˝O(§“tťD~”IŠ8iw®äç.ňšv7Č3gŻM€Š…Ă$ˇ^]Bux˘ć-- +ĂOĺÉmVŽu|a*6EN0žLłJŁEv1ČLDtQł‡ćÇŹżLRŞE Ň´Iđ ÔĹŽ\» Ţ`‰–A˛L´R 9Ěë ×>SŰૠ@Ň?bA]ÍŔ$ĂŁŔ~ŇO„Ě%cG€Y›Čk–W‡§¦ŮüćÂÓtěŻvir¤1e6‡~' ŞŔ XŘ$[xVU’I ĚMá6zŻYC6«ÎË\/{ ZײÇ+řZÓŘŃůş_®ź´bĘČža…2TaťáÉ4ú2D•Ä—.Y…LŇGe5A™\±qÉś­qM*)2ńG®]C> ¤ěY›Hx8ę×ÁČŇoĆÓʵž€<Ę3$łW–<Ř%ęse ÚeU‚•ŐÂÔ”é´:4Č™6˛ÉäȆäăĎ&łI­$“fýŻšô˝Ô×&rl :âTk+ŇÍÂÚš1©( ÖÓ̲Di„¬n¶ÔLQ„‘ł<2]#×®ˇľ<“‚JťĂ©Đ-´"WJń1!……W˘Ĺ'ÎN…˘Ôqp>(-Á´Â~⵸<)@i]9\‡Č=OđŢ&2梂Zň|'Vđšá*‹ b!ŞVЍo™Ľé2´Df `]‡Ŕ:™€’¶—€Ég#¶^»„J|D‡Mźä [ynĽ0 Ź`zIâ–±SUč j˛üÁN0ĽČ3¤5Fż’19’°ěżş´L¬Pś0YQ?żdI kI©‡±äůY-…@oĘO|´Śy’tT*yđ®ýb\LŚËDă%đú˛*LDf1ń5ĂYÝu(×Ä:ÁŃłđ`ĽŹ,{"±6v¸2‹Ŕ |ŕs˘C¸IÁ§ĘF?T'sĚp‹9ć Z¤…“˙á®`®)]Ä"*ˤÁĘd şű$ Î6@‚ËĘÇ\äjńéĐóÚl¶FA ÓL\‚˘e,_żgŤí}’ÍU˛$zĺ·€ŠH•ŢUˇ±‹QZ¨s[D‰ľ]™e7[00“hcI‰ Í$kú܇ôĽBúü˘“%^ҡŠyôĂ!q+˘ŮFm#:[/jçF$ߎŤa$iĎ#µË–W…Úč™2O]Ńo“_…Eu5‘ž[ŕ*qpĽL7–”ć2K(+Y”Ő ˇÚ"3F=Ŕ“÷ŔĆ™€)ţĚf9@Í:zÍE†Š9ŽŰä€Á’q„˝±¶ +ŚłŃ«śg ě4‰™#6tvŚ8Q¶čżÂĎU¦Řgň môˇX›CŤ±¬ü ,+GˇEĚ$“ł€Ż~Gé2t”îlčĹś”Đá>lî0)-Č:MÂ!c†mSךX"ÜeYŢ$L#%»%™˘Â’äDţfä·ˇ´\ň‚˘™/ „˛H&ÔĐp-˝gďhňÎ|Ř~¤’˘`hĂKăp5ÍQ:Ô±±[÷ä HcĎ(‘ƲҧŁ;9Mš:0ël5ÎÎUQ«tňRC·|Ľ°ˇ1gÁÄ‘z‡Ó•ézŕČŔLç´™gđ"˶Ąäś*Ň´Ą,y6)Hč!©j›°ÉôŤřk®`&F—ÎÇȶsp¶Ř–6Á­5üز!Đ$Z»SĄ“I&H×eY»Č¤($"PaHÉbi¶OpU“ĽŃ"–á2űáCçxˇ°iÉt@ˇÚ€"37‹c§•l”6†*ÁwoP˛ Hjőűä"79@ŢĘšÉ1H +hˇÄŢl>L™}C!:Ťe&fٵ>µĺĂń"K X‚ć‰GwáŽÍ™.Ĺża†—f’ńТ<}ae5łĚ› "€pî•é$‚¬(ďŔT*OPä=”ĘýÇ%Áłš”Dí˘:ß"›\Ž+6e6N*|rpŁ©qbÔ‡Čôéăi¬-čŤŕY­ćŤ…ŔĽ6ť’6 W( \Ő†Mآľ/_g$´(Ôj$»qTvUŁĽR +4@!­ô:|Ł“Xb“‰DCrh¶ĚqGşĚŚHˇŕ ÓT4źLÖÖ 7ytP$ÁÍYÖ01(+Zm ĆçËüfCČdjˢ2Zó´‚ą@YE`Ó8CŇĺ`BL›-š‰ŞôiÖC€&y‹TAŞ$vŔK÷žŘŹ,˙D˙lĚ JŔ¤V%2Aá>É^˛"#1ŔNJć|ŃĎłtĚ}9TBŁĘ·dq¬R5Ôb¦ůÉ©}v2‚lDyN‡ž'†jĺŠ'µ™ÓQ,Z»(Đz/Ż šöůŤż#šh—ßÜĘÉÉ㲣 Ě(m7ž_˘Î‚ž¶9ΡQűMmVčÓ™U–«DçŚc˘ĎśV˛ËŔ;ž•í®(ŠUůşlNt¬ň]µÉap:š÷#Pv.ë*(•żß\‘˝†fÂśŤ 6˛98pÉŠdxtésÉ®«kşdPäĚŐť«ÍÂA#cW:v,biF`p"~†Ęf=ŕ)*ÇdGŤ†ľâ™?ÉHCi›‚aň :Ď8kY—‘Dh0“JŽÉ±áč7’äkĂNhäj8”łt•ҨcşIvĆ;Ă9P¬¦TÝk}1€#xͤ \’L4üb6m¬H‰ŚpffÍ>»N«·-ö#ś4mŠiKW \•fü©,«ÖzfČěb*2>ăšU5§LśolŠ·‹Í«˛‚)Y°çLŠí1Ů.˘+)×ä¬iUEOš(Ű%żG™-+:ńÓzS–qĄb»Žő`„ŞŽÁ©té)K~z‘Ÿ‘˘Ę±_o™ L*cä0,v;–9a34 ĺMU –ȤIë9¶1.N!Şŕ =-;Ęe“Ś÷4ŤśŽď“ăŇŐTqÖܔˉřx.Ą¬ÖŔ®ODJçĎyĹd¨H™‚XuĚž}YŰ…Ë9»!}w—”|Ťđc“&aÁOg“9Zi%k®Ž&Ţ|¢ŕ/rV± +!Oi“|Jh&ˇŞ·tjĂr2|qEÁKp)Ý伺ş©ó,’„>ŮC†łzR˛‡­ČŢĺš;ő)ę†ĺ‰‹٢rLĄŇ9Ů4„Q3Fˇ¬@>Ü­J^o4ÇäĄéśů Şg¤łÂLÜ:CÖ}+E¸,y•<(řšü-90T!ę¦`QĐdmĹp xÁŠ8d¸¶śŘS&Éš€Eż•n.Äͱßęzö)Kq¨ŕą5‘R‡ľO|lá’"°LĚ1ŐôČ3°1Ffo<Î8‡’8IrŘ1gąŞ–XłĎĄ›Ó µ´˙”§ŞtÎć@˛E…–¨ťĎ5|Jp + ‘Šq řA·¶Ďn˘`fŚŮô + ćô˝Pˇ†€‚ٱeksnâ ׺íy0G!‡"Śfě¬rnT.tfÎÉçɬ€ąĐA\Ă&,Ď łÔcČ \!Ž5˝ă€Ąż"Ż9HJ›:…¨ŕsŞI¨ěÇEKŠěT÷U*{•íbc8}svú:N¸)E>_rcřÎ3pťÍëĂ ×÷ +†$‚/9í‘02'•č‹đÉŐ‚h6«+ĘĚ ţ"fîD ®Şž0Ytů Sł$Ú®8ČÁqJ‹ŹYé $"Âxs,ffż{2ş‡ź 3ÜrĐ{¸˙!3|›Ůb¨–‘ľä'Ę·÷‘3“óËĄŚvsČ]?e˘yšĘYĚ*“\4ÖLkQŕ2ś}"zŢŁř§ +.ţŔ)ŹZĺxSĐŻlÉŐ*Çy°K›$[9±Ţ*Á";‹T" +ÜY:VŁD)TV;!«W!4YWbű{hĂŔPµ/âl¸Óˇ{*SL™}Ô:•7R1O.B8Ľ-X;ʤ3r<łŚ˛iÖřXË•Ů3_¨’‚őaU0z×ŇÄ4|fűRS|9ꍋ’MŇ13-sÜ yËukD>vC!"PdÖĄEN\sŁ1O@Ĺ‘xAÖš{ÇL#k a,gRłŕľĆMĄ:s˘IYŮy\•,y lç‘•Ťńşhç4Řćo6X‰¬ ˬ´¨ň*Y3äStIM~ú:Ů›]%(V ű‰ĺö%Ł{TL•ś'Ł78s@oČ­É66XáH¶ŃUńŹ*l››e™BWçÁ9ÇŢĄßWˇ’\— ¸—”?×l|Zrş?W.@ ć‚Ă Ń"UÖd=gΨ¨>Ĺω(÷ŔÚ™×0čĆŔ‰Ćúšµ*€“r˘a…ÍI™ěÄŔ$M©¨ ç ”ăŚŽPź:m᫚ l…eë0Č]e$‡c±:W’ ¶ó,ŕ’Ş*¸“Ľéc—ŁÁr±2eş™°XfĂ úŔ&ˇLĺě÷P1śCłAŃć /U/vdBÍÚ¬ăeIÖŘěł­íŰĺ ¸Đ‚®L@–yqĆ9ňĂTAP2îz.zdŇĹ+v+ɲm«3ô1đ¬8ĘĂrNˇ­?¬ZčˇŮÚě CeŚA‰ç’0­Č^"—ęó2ëđ©>Tň‹h;š nÇ*X<đ‚AvGę*Ď?ľâĐÓ1'H‡jĚó·‚ĚgPYŞcqí –›Tň;ŞěFNäcžŔć|žŇK^/;s{7lU" L×\°…ćś#ź„MřÂsľ­śń¬•«X>(ĎđH*¤Ŕ–ŽYXöŻóÉ"Č9;ö #p>ë‘虤¸–0Ů Ío™™}`ÍŹ$űyˇ3G‚ç( Ž:ÇsŞ\é!Bś×k˘ähá€ÉX,Gf°\­ę ź$g¸+vşĚjT¶ş˘›“áw‡î›Ő ¶`âD!Ă+3YźĽj$Ń0†ż†zʵ(™\ŃTI¶¶¬ĺ·ěo2-«ä©Ľ˘-kIîAđ .żu—Ë!ľH)ÎJÚěeśKČiŁNÔ˛ć82f>‚ď9Läř:ťő5ce*ÄĄ6ΕŐ@YŮý\(lĎ"xʉu"gaTü9´łŕ‘E•5BÍ,ËÄI^Ç ™·1%t2G+OŠÚ¬eľ«“íŃ…Îë9`:Ęß­ůeVů—héW° !§Ĺ¨Z + 'ž¸* 2Bö29ťc®eL®ŚŔ*?DVF IéçŔ’L5śÎŕTNÝw&†ÇCK?gkAˇJ3ŘšZĺ‹Z&ŗץŮšPÂYh]¬Ů„UČhOt.‡™€2šóé˛ ¤JŔAëę\‘A&*€ą–«<ú¨ź­&ľĘpöE¬ó“ÖśÓ) î= ŞśáęEŤÚ–:ľ:TcOśP5ެp/j~z—Ů ‘"ę^š\bŔgußËš°ÍĄ4<ŢŽ~ďÜŃg/çůÖŚšč(!ŘčÂśr®—űRŮ3‹†1ąĘ$Çă…6ÇY¬ ŕYËqFäÁYĹá×ĺ‘a ëĽ;ÍPĺú(NŃGsÁś!SMč;ÎćËBd”đWdf˘mâőˇ+[ +ŁÁĄ`ó.űZ=ę:ÉD˙LU“ťVŇčĆóđ;łB°Đ†H˛IW +–!Ă9¤MĹ¤Ó /E™ĺ­>ŹŰ–Mˇe™żXfÇsxQĽEcmÁÖ‰” SUđ„â2'z]dČŠ'=ąLďTŞ5‡¬¨˛ D&k*Ř. +.9ý€ˇíNE˘e@í<—lő 8ŽPÁ0•™L0¨©´ž)ťÎÚwlŞ‚Fét]ŐŹáwę\iÉčj 0łb§•7<¸,2o7:ťĎHš~mrČC¨áĆ!>›­ďôő¸&—Łśe¬Ď™&ńd“hJeĐeń¸Ĺ“ĂHÇž™K2!Ĺ´*–§X‹ŘĺN,ł”Żc oY”±ZF\BYzž¸¬µRP €•N’Ęç…‘ąŔŹĚ‘ٱŚu.rKK'śiµL‰¨őČŐŢ[6‚·¸ČHnBţBŚ´ä­Ą,ń·p]2¬©‰ÉýkVŻEz;Šü˛;:Fďř\ú‘™zĚče-Hą1“¦Ř ÝÔČ˙¨Ô0ĹnŚu†}tŇsĚcĚd±ő×ËěMrp¦ŔÂz DŚ~ÍÁ1˛&F-s&GRĺ’óźĂm˛é28هŕˇswĚŐ l +N˛JůᨖľŔ™E¤ż1Ŕ…×›Š;Ũ +źÂLBE˘4Ž\-~ –ËtăíÚÚ 2'd8—‡ /Ę}„xěLiĽŕ*=jڜݓÜP6ç"3Ě$Ś}©Hi26 fk ‹u¤?”OĎDĐ$xdšË_–žI«ËI‹BřjNj¶‘* ™>3;ˉ¨ ú\ Ě5ŠtÄş–/řHć/lż„/PçSSŮWm˘ľ +OŤ^60É2UJłŤwx'“%ĽI¦ha–ŤSř€U0lÉ($ł!ČF6“g檹6rš$”9ü6š’‚ 8ĂĆ‹š`ÁĚÉ4ÍëMÚ=€EN" n°4C‘Ĺ)Ö!Ăm$ŕÇuIĽaË“áhF…çř÷ŠäB>rqšŠ+x´p÷źUš2ý^Iľ‰—äĽ2Ű]ÎĹ!QŚĐ9Ć­ČKÎĄ ˝Á˛ š†Pů$ť—µ@Î +DŹłäí²r”[ş çX*Éźcr`˘„šÖÝ;1ˇXCɱTÁŘÁĘéŇf덍.´J\6•šâ|Śń#qę -+Nx©«(!Í‘łňb,ÔŽ<©*˘ą´¬ŞVŘXÓ1ë8ĄĎ–ę‰C LĽ@.’śŁ.K› DŮhG­”ËgĆQ»Pż<źnڤ,‘”Ăňl6|C 4viĄgőMäÜ„ŕ9÷´ř/rpđK¤i ŽáKä"¨–9°¶ŠŚ +'ł^.€-äŔubí|ÁOdcÇĽ/9Rš‹be¦CIĄ/MôŚĆ‘El‰Ć›Č©N"ˇyČ/ćě”ďPęśóic śĽ 6¦ Ă!ĂIĄŻgâDŤÜç¤ ĆH•ˇۺç¨Tµâ-!'oČpcżŮ”GSŞÜSČ!Š2žĄĚüĘŐ+O–*K2.Ö,ŽŮÇid(K¦Ń! 2MęMĆ[NíAJŤÖaVŽj*Eü]dxÎ×ě6Ó'5ĚŔµG\®‘_†Đ©\R §ľ•UV—+ý”"ó\.‡TVţqW·‚•E¶49 U}ť”čQµ\fWĺśE?WŃ‚mk8˙)5'‰ťV5S )«DŽ]&Ůśmč‚j9m™+­°F“]ÄKô”­â[«Âd°Kĺ\źůn°M)¦_AOĎp!«ĂĎÍd|U QńŃÜéĹĘü´Śń}Ţç>F.ţ)˝„á'Ćp0Ćĺđl±ň.»ól˝’§ŻÚTް r˘Q +Ĺ!¨^—Î 2Ţe×Ę!DÜFó]Ĺu$OÉ•DmLyÎżŻäs®zŕ]'s!¦L÷;ÉűŘYŠŁr±EHŮ5ěADLfW§·ŮW:Ođç8Ęĺ¸Eś‚ČŐ*Чë!$eɨŠ#ő6«q)ˇ" ®˛XRLLł&?ąš9ôżŞĐŹ·96oĆł%Řgm ň ě9ŹĄ`$C|+“®Ř‰uÉ•«Yť­á»ĚÉ˙Ţäę…űJąKŤ["ŤÉ¸Âśďâu® ěs˛ľŻ®U~9lç–ImölšnĹä+g´Ë–OŘ䫊 >^ň!PŹIZޱä«öB.–¶ś ţ“Â)]¤ĎŮá 2# ©»Ů“ÁU081;-l®«ÂđyhN™uYľ‚‹$§ősĆ,fÍtDEc€:ădP{ó "gę'7XYË< +¶ÜdfPž˝?%r–ł”ĎŽërŮ’ď„Â4Ť çbi ËőĽ*¸ü 塵•ŕ:V2Ca 3§•¦VĂäW§SaoW-Wu®.a %Ş;f"Ţżf¸Oy•xXžă ެ§łă_°tijč1\ř8ëłÚ¬&čţđŢňęB¬?;żB<čë +Î;•úTŐRYýĚ‘mŞá©U®T¬9‡ ‰#ŚË'_]Á •Š·«Ş´±âŕë Ρ*ś€ěî +wź€&ÎU(ŕ%»č¸’B^%wĄáLe35“±˙NžÁK†çě—Á\ľńĘŢĹßŇŐâ«&6ĐŚ,Çhל›e(Ó&ązyĐ‚řjŘ}|eâř]4ÚĺÓETGa˛†ďmUĄ”íůUÎZrÚd(D0÷Ń ił·?sÉťkOĽ·†A˝ŕg.¨Łr¬fţŻĘ$¨‚áŘ&ţĘžEŽ#đUŘŽËWmaĐë– w!ŁM°®a‹\YĎ±Śž +–s$MÎĘű`žÎiš©-fđl-e‡öŐTĎÚ÷W´U;'Ąjy!Ű!g\8ź]ôIHP:ć~ďEBĺl8”¸O­•Şu$Kĺ©®.­Zu‘íŁ:jMUĂÁ!)V®d®rjŤu)C¨€ĘŔŞW"ŕ’˝ĹŞ¬w\Đ.W8Iu‹\nXçDĐ«K«źµĚýUÚĎš­ÖA{L›çŇ*–‹‹É*–ýdµŔs°ˇNíTĚžVΩDßűąâ;śî˛hrČ—0 |oŐćděWŃő“ \s"•Ęń5ČĆI‘óŞ˘Ő2çVáŤU©)sŢ„C‹ťěšË^YĂ VqŃçxâÜ?i&ä¤Ä–ś·ŕ§Zpu¤OŔĹUD´Ř%ęž{DN—{ou¬ŕşĽ:ľŚÂpáűŇ“_`UžŢčř˝i†őBťůH'LUć”ăRnpNřâş^aJśMdEÎ^M–ˇ˘)ż"Y1@>R^#‹‡epb 9ĂčÝĄ ęĹYßť;Ż:čĎ:2'úKĺ9CGVý]Ś­-ŽM`:ôcVÍoY0‘¸n{ÝĚ- EĚ·ĆáxţąH®cu¨Ö0üŔ<Őµ•ąr`jNđšá¬–˘]5UeQÖ9Áé®9g8'7˘Ě +1U4ľXrŰť*Í)ô+áÔÍŕąvmŐÉř¬*¦R Ż.rÍ!î `j_abłŤäę¦VPů\#Ąp?đÁúrö{*ŕ”ŹPe;*o¨Ş=–ÍĹ÷TU˝& -ů¨Şâ3ß§ŞϦ*{e šdP–ś1řf– Ľçöeľaü­‰lz—uż«óTUCDĚu B„l.•Ż$›Ëj‰*U±66 CĂT6´ZŠGe) Ţ­´Š‹¸dÂ@Ö†`ýČXYKTń2—čK“ÚEQ%•˝ş‰AmďMž÷§łß(g°č,jć/©{tÖ˘éEçldF ¨ůÁÍĄZŰ®–ňl_3ĽÜ“©¬9ö«®/5ĎÚŐY†ů>ęL*ÇJĽÎđÜţ”?á9:“‹żXĹř‘ÜĹ>’x•eŻý\ľwTą fŐ đ”˛ćbţĘ0Ăł›Ő§ #'ł‚čbHHšäŃr±(őŕ_¬÷Áđž­Ô¶RťÍ⏠ůůą תq±VŮđÓä/ř"—oő19é5ĂŮíęc^Y˛#”=d» +›||-ôä3pŽr帺†x¤Ę•#“S#§'Wţ<Ö[÷–ß<éűĂw/v/ż˙ţé·o´˙ôůË7ďÂ'ŹŢĽą|ýôÉHŹ|ę'ĹHšâéĎąđPZ{_ă?ĹHţďôřŻ úÓ—űů(F¶FîŢ+FžĐĎO÷i›N©Đz׊˘ ¦KçR÷QŇ”5z:Ńĺ%&Ţţfxíß(äU˙‹Ł®Ěü‡ŤJ_Ái<ď}űýŇËÇßż|űćňŰ_Ś4ě“€Éő7?»|őňÉÔČüŃ›—Źß>yzđý·/ß<™Ľ|Ůlî?}üýĺ›çŻž6›·ßľyúíá/ľ¦?‹©‘Ů˙Ç?VěŹ÷ßţđć ýEüąL?'rŠÜqĽ ŠyÎď?˝|uőËOßZś¦Ö·ůäĺß5›bd~ýÍ÷WŻżyůýËËW{?\>ůöňÍ÷˙’ł(ţeg!ţ¨mýŃ__©ü—­T}bĄ=üż4FBß#ś'AÄ&˘×˙ääĺ“ď_üQđ/Ü_–VČŢÉ˙űć­=}ůüĹ÷Őűoß^łŔWoőó—ß彬V˙ÓĹęł?j÷Ś, qÜđĺĎžĽ¸ÄĆv/ż˝|ýÎ;“\Dµß®]ľyňęé·ŰDq?0?ńŻ@~ŐÝÁżâ˙‰đ§—€™E#yRť•e ;•A×HŇ‘‘¬¨QtĚÇ"ŤiźJ^›‘O,‘” D`( …¤TJ„Ř82ąß2ĹČj fý–”ĺTXÁé&15ňóźĚ‘HZ»"5A#«ľéŠŚ»Č| ß…ŇŻ¤Ćy+$ÉQF ¶Ui˝ Î! Ľ Ýú AöRYL<„l’ BÂ<‰¬¤C‚9ëîëBĂÜ5úkT$¤„~+§bHťˇM»"NT \ŢYOb“%ˇ‚† đÉE†&kśţ® öTA» ł@F*|ęŔ™Â·¬…>Nň«*BN$^!´¬,Hę0Lˇ$ÉŽŠVHGZ„!˘x˘p§Ň(s!Y˝ íßBЦĄŠÂĄěgčz"FYDěĐîC8–%)š!IIJôW(o.Łpˇ†-C_vgbw ¸ŢB#čŘK|‹4IÔSLű"u1„¤Ç ”MDçIʤ€ÇɆĐoVC!şOśCôqÚş„Q2„©ŇôÝ%µaZP8ť<ĄtŹš0ʤoAű!í`Sô-úF(µĄˇ ),»$Ö“"A¨” [˘Ž4qzx{ˇŕ©"¤ĽşÉ‹ö„‹&…ĚW0ąAN¨f…%ú.ݬSN9d1—ÖĐQÝYl¦‹ ŚB6, ±đlkR|X +W“„ćií• ŤS•$ťJŞuAâ“ÚŇěq“€ Ç[—6!\,:DÇ®=,L$cę0É`ŢpÓaé©WĆ'˝Šë‰…?2éáŇ@ä­ŔćE°\ŃŚŇi¤°VÓ+ +QÜĹąâ—ˇ°©¤§č]Ůđ¬HŔ¶¨aQň]˘GQKJ†sxˇQ%şbĎ)P‹Uéś$d¢©°$‰Ń<¤ĐO9–>ܡĐ-˝Ć䏆7#m8A‡š*Z„Çc"č‚%Ľ:=t× a&4¤@Őş•äí&ÚŰ·EŚ.ťW‰E Xs9>$ÜF_M:1éâMN#pęnNuIݤÇJoL6ř–öDߨEíBÂ@Zy€p3$ÔKzf6xÔťtđz9bĚćH‘):‚¡ˇUAÂŻP$…¨ŞđH`R%Eô‘ au8ŘV`Ă +öąp;éS„*ŃtČéB7-Ňň˙‰n 2-ÎᜤˇŇvJ% QH)± ÝŞ"QµŕĄ§K%â`Ă—P]–P©@Jc o>ÔsŁfT(]Hl$äŠŇ…°`6.Ôk5Dw,7@ĄQ>$nbe*7 +‰˛:\şsÁ´dˇ" ]:ńDsq|ĄAţľ?ő©Q¤n< +j~ŠMŇe~ŠM‚‚Mj€O˛Ií‹O±IĽ°O°ImäŔ&ńć?Á&5Â?Î&A˘>Í&Iŕů›T…ů›”Hµý$›”¨7ůq6 őlR ~í“lR ÍÇ٤…ű?Ě&ęŮ|’M +”Ŕü8›pŢśMŠŕzű8›¤3ů›!TěŁlRĐ™’M~jĐ«¸˙)6)P4ôclRťý$›1‘űclR ¶ďălRâÉ|’MĘЉüŁlRâśMâ=|šMŞIý16©BQ䏲IČiźf“tęźb“ žg“A6źd“t%źb“šŢđG٤)ôŔ&M¨ođQ6i ,|śM˙ؤQâlŇ(˙)6ůIľ6ř¸_d“ăĺ¸Ţ|ůG.épŃ_†¸;"´„J:,$Ee+řđ=8:Ţ VcřÎ,×CksĽÉşĽ §D„[’rEô::˘0Q‡tÂ[;‹÷%'\xzÓ#EH¤'’O¸KXRhčńÄč‰dhçŤú%T}bޏ´O6€‘ÓŚĽt&_Ž :ŤŮ‚†/Ú&±f”ńʦó@ó/ŻëpÚËÁ;‡Î@h†Ąç®Jl˘Ä -ޢ3”¤WŽUŇű÷6Č2)CĆqÁ† $P˘9Ó; ÇN– +ŢbŘ ý2š'D*cD‹T1|ý5_ɶőţâwţ“/üň*j¦=„PZ«Du¤ +Có” ~šâŁďĂ^ż‡¸Ü,íÝYIš@nÄ»+HŔ4ü3  ď FR(ß›¶ľ»†:$=ŠŢHp8Â@Ž‘:Ü(áeIXHWVú U"¤C”°t°1Óˇ*ÉÇôôĹ4Qa"ˇńáZĄ˙ŃŁwAĎ)Đsł ś9¦~#ôBWá d Č„5v4.łKŘ‹djęhť°şAű/Úą“ˇ`š!ř ß/tŕĆ0wJ 5^ “˝¸Ö˘őś—áBCĺIO Tcrě ýQ°#]9I+¤‘Ń«Ď,Iŕ‚#A&3PĄJÂČ•´ +ýLŃ#Až4ń…ôÜ,-(U{Ţ ¤B’#ŤJ—^Xm`ę!ĆĘЦučldIآ@Ś#[DĐ-ĂĐ @Äh=fŞ@˛vY}Ë"ô‹Á"a­Đ"{h.<[ÂőFlkš˘ şí!›/ěËŔÂRÂ:ďâŹjô˛ő çŁJX«Ť—ěJ<\„µÂdFxTő'9N«žDK/[€xÚ§ˇú;ťĽ2„6!zb,Ý/wŽŁ@Ľ7ÁüGy¨Á:¤Ç!($±#’0‰Ú0ń(ĂóCEy˘<´ů†ám+®1W„6îDlC$ +V"h:HT±śDťdô$ŁDä­Ťî}4΂_Pą‡? G¶˝ĎFXڞH&'¸ źBRŘ„p*r +Ťl_)QHĂĽŇC´YČ„§ŐC.“´Ń’KC˛D^Y•o q‘tOÁFˇpŹAÖ° Ą˛‚LâŐbk.ŽĐŕ[=/MA(BśL†âla‘ś@ST…„%|ôâtÂiR–čđëAQ‡<Š8šdčFŃDL’ÂĆQ°»_DŕneńL´—ŹăTúˇ§âĄÉCęŁŮN +ě(QŃ  +Ë߲ôd‰ňé”ŐGi$ ”7ĹQ%=BµQŐŠX©0A¦K1íťI坢ŠlŁ +r =_IüUńµŹˇőLŮŕa#‘š| Đů&x¶ŕŽ$: +J$„KáŐiÁo NČ9đuČ‹ IBZ&Đ$oĐE‘`0Ä"Ń ŠŃ˙`ě3 ˙„í(mz„„ÔpÄđąĐ_‰HF‚ÝŤ˘÷.0Ôç@Ť5ú:ň=ŚÍ2ů5Ň_éş°ů ·8ŞŤĐÚ +‘™B% Ňeř2 +u°ĆŃŘgČ Ź%›Ŕscú7˝D˘‘…ę¤=ʬ • \bҎ|ZĘ$ęŐq ôÄI ÝZ> ކp\B´bőęZqĄµ‡¤GÓMs­8JLµ€gĘÁ=ô!qÔ"ńŇŁę M©®G-äJ<2ĹňqÔúXś+7{‰Jdj‰•ĹiT(«¨ŕ…b‡5Ú<"4€f’aj‒ +BüS‰đŇ0$şé$čMg4Ăk1ŕëÄ\…'hé‘©H`!TÓłJ#o3 !BO§ŹË¬%t ÔU8‘–CgŚB>V±s +ŹŚ*IřŘżŽŁč»$ź‰g‚XM\źľ´q­™µ„Ă)Ń{şé+nE<ú ä(Ă•Ër-]Yđkz¤bŇ.ŁHŹř)=šŕË ÷d‘+“´ Ńdmc‚gÓŁ:—&ö vĂrP˙^·BĆQp,Âw‚ęDq˝’Á試ÄH ĘŃ‚Âjŕ~ š ýҨ8„›HŻ·ÜŢ3ŚA&Z<Í0‰ą8E›źŞ +ĎN€4Ŕ[F‘‰GOj˘¨Ft;†(™„\g+Ž ~o‘ÔF mÇ­—qHpQŇdŇ,S(n„¦q¤ĺ‡§PżW8ľ …âwt´tTĆ Q¨aŔßl¨÷Xż¦ă 979˘Qo–pÁG 217"’D^°{ŽˇŰ…®§ňë }.Á˙ +0ĎčsÔPŐ R¢QýŤ86q{äxŕĹĂĚB”CĐůD>†ŠdÎ ß —čz1šé˘D”ŠdꊍŻÓĆáhŁëżVŚĆ6Đ0Ú‚ryę:1ÚB{BfÂbŚťď‰ŔŃ„ —HÂDQFYú}/“Äždýą""@›ó´´"ŘFŻm¨ "Á+Ł#ůŠlCUbNp¸–×JŔe<ŞÎŤŽ®ďk$`[ "(W%`Ô…CjzV¬ŻJŔŠn‘–]PďpěJQ[Š(هÜ1\®‘t Ĺ…řädFĚ‹wĐÄ\¨¶ˇ ëĹ$Gk°AúL¦ŕç#"5JI±´>’— ¨††âŇF’P\$ĚlC@ťµH¤.KvAŐĹ=T*bčDE¤!® Řĺ˙§Ě]ţO–ľqG’ą@óLÍhŚ[‡:LŻŹnŮ׌ĆW˙&táA}LâbY‹ą2ó6ę˙żéKpŰ«EEJúWüçôĄ˙ʤ/…ŞĂ…i!­˙ŐĄ/É2t˝&®m‹űS¦/!ń$3 ?±NűźÓ—ţÓyĽ ůPk`bíÁ«ęĐľ¦J٬€Ň­fBF÷h(ĺ,PĘ+y2Đ)Ú"ŇşWv+Ä7]rÜ*‘‰” kýÎÂ"Jâ2é&(ˇ™ą/úáEpÁ=E"aíĘ%·°—†1ŁÜ†ôh3áŇšů<ÔO°č‚Ţ^1´Ć˘¦éĂiÂv2:Ň‘°‰"¬łL˛IM`Ó ŃŁ(ĺ¤`A 9úUß a9Ô.Ú™ń-’1P•ßf“żCKŰđ$đą8 +\úŹÂ&ÓTh&ai4¬LWAŠ”fUÂŕ')‘–K*ÍHÓ D0¸x_a +Ďn4–˘ŰÄ䡕MÜj’ŔÖc$4ŠáĘäˇQč` ăłW7lőwěKŢšßAI,‹PĚ1ČihŻ`ŠB4¸;éşĐ*D 9+Q] +qˇÄ>†  %m«d©C=@˘%*c#­żDz–¸ŠvCh|* í—Éě‚Ú٤ @[CJŇ—IY·E!m8Ęu›â{ă˰ˇÍiĚxßaŞ<+CČKd>ëhOFš#ŞŐKGÁoëˇéŰ8‘lż‰„ß?Mä ęLĂß+ľÓs÷…ަMP $^«ěă3ˇž=‚‰]çU$KË´TÉŠ +·%ęŰŮ…‡ˇ@ĆĐĂMÇOÁNŽĘ—˘ň\˘rĽ¸:tމćRÚw5ťäş¤—NXíÍĆ» ]…ž˘‚9 + őç´„ßDE‚]©€©ÜWęJ0. +Ň+Š! 2ů ŃŃě€Î¤üá"b€ŠkÇ4é>ˇ®aŚ€ˇóĄ‡¤ŁżĚˇR´‚ÍŰz]Ł™¤[!Ý Í•ă$abRíEâµ^ˇë%îCÇ«s*(x ‘hh”Ş ĆâlóÝ !ËPß>-Ň–`őŃK +‹a1Q)úJŔrßE•vr…j‹THĹ`> áë5ď9jĆ’&kc‚EÝĽ˛Dç0Žľ®A©¶Č‡¦s@g7Ížúʞ·đŃQśĆ„3)Đŕ,¨¸âCÜÍĂ‹ q×qK +ž%ÂÍcHŐűÜĂ\,µŹF˛ką%ZC«q÷Aˇ˝Ę-Cxň$ˇČŠką%ň PRžS,Gq-·Ä§M8Äćűk™%íđÖˇĄ¨ő×2KP(óşâCĚ2ô‰„up¶Ëk™Ą …§îPFsŔUfiP” †3ú•*?Ä,Mč[»ňĽ®e–†h$/€lęk™%ş€ËÁ0~Y G UúzV źu‰ö­ćĎkY%ĚřČ ]ôM]Ç*Ńťťp,´^żŽUÂĺGZy=§DŃ âABŢÜ8%Ú»Ó­Ć dě*§DŚíđçŠňZN©c/r¸G‚›ăzNů©QŻxEô*čze\Ç)q>80ʬ k%ť3С Ö~O˘VŃXWÂ!â®ĺ“uą —Đ©Ľ–MęPIŐŠŇ}MjäŃ#Őɇ(×ńÉP­J“ä'śp-ź4ái +MdײI´–FĽ©q.†7]e“ĺ—‰}ÜkŮ$ž:˝aę\%¨kŘ$Ú,#ŔĐţęt•M˘Ů0‘t”QÁĄy•MZTgă8®e“ ±D<˝E(‹ą–O"ąÝ ˝ş,‚Řs•M"Ôľkš_ů±IĐw"¨ŠČ…Ě1¦ď˛I 7ŁD–W‘Vs…OҤSĺ#!S|€Oâgšd]"ĘÁ©y ź¤!6NKgclđ>ů)Ć6řŘßź.Ź‰Ô»?ť%*ŞKŃIśSxŕV.Ľ}ço†ď˙ :M3¸šézh}–7•@$Ý‹ĄC0V^ľzÚL˛ůťTôÓŐźüŮüŇÓź˝|ütµ?rşý“?»‹,¦™ šCf^Ç˝PyAĽš~ý⎿áźđ˙÷# +Ö –«GÂĎiŤcaK—ß_6GPrSţäĎN×˙LőŽfĘÍąĹ-»tâVÎÜŕDuŹçŰ'fĺˇßxd–Îeű`Ć®ëŢqoűéÂĆCżvŃhďM7‡ÓĺFŃŮ“ÝCÝ;šo›ËÇ­Í{ýgíݧĺćc·ńHŻ>\Řz9ÓÜş3żxg®ś5K¦°0|ĐŮ{ą¸÷eąőLŻßźëíO¸őţîĺâđžč´†ĎűŻVNľłkEçÔm>‘óą…Ý)».ű§vőľ_»?8z5?8)ú3 ;E÷?©W‹Ĺ˝öđŃęÉ×­ÝgvýŢTsłčî7:ŰfĺpÜŻčĺ㥓·+w\żüŰÖáŰbp:ÝÚ™j—ŹŢl>üŐňÝď—NľYżřĺâî—rőb˛9´+wŐŕdnqg̬Ś˝Fą&ZC·th–Žď}KvO&Ë­©r{fqW-ťŃÂôŕ¤\˝ĐSŃ;Ű<űůňŃ·E˙îDą5ŞVĆôęLsŘŰyÚÚ|8ĺV§ĚĘÂęýÖć#;8ź¶Ă ąŇhn-®^lťG_,wĘĺ‹q±üĹôâ´Ýś-·çĘíŮć®[}h×.őň}µtq[®LŤąćnŃ:­ż|ʦš+wT÷tÚoŤĘťŘÜÂŢLą5㇋kÚŹŠöÁ\sďŽ^˙|zńĆôâíůŢŘ|O,l™ÎľĄ3´ër0_nÜž]ř鄹]t'íý|Úo«î™l5ö&Ô*Ý‚Y>źmnÝž]ś6kcbůö\·ŃÜ5 Ő=wK÷›ëŹÖ_ţ¸vňrĘ ć[ Ź{/·.'ÍędAźŘ‘Ý3łú°čźM¸­ ˝ć–Î{/z[ŹEs{iďą[=źYÜžpkó­˝rýQsă±íö·.ĆeoLôÜŇiw÷UsřRŻ>2kŹőŇ]ż|®»SzItö:{/Öîý¬wôfq‡îńţt›®é諟˙‡˝G?źoďηvŰ;_n>ř»ĺÓ_•ł­}Âáż9ă7¦ÜÚ”[§;˝cú«ąÖáÜâÁZą=ß§eO{Bţ#»rÚhď‹ţi{çĹúĹŻ˙öÁ7żźďďL/¬/n=^:ű~ëÉß/ßýŃl>1kýĘ˝çßţűłW˙8Ű=°kťÝŻöžţăĆýßšő'fýQŁ}@'9×Ü.wiň1µôĹl{ĘnΕCş‘ŮÖíąÎÜÂŽęźęĺs±|>×9jtŽíăůŢ™Ó{‘ýs:CÂ@6ĺ6§ÜĆ„^ąÝč̸uŐŮk, §ěę„\žŃëłôWr…I,ěś~»qü–đęÖÔÂŘ|˙ÖLëĆD9.—ç‹úwýÚcŃ»W´Ďמ·7žŤ«•ąrk~qO÷ĎćŰ´ýżzŮŰýŞŃÚýlĘýĺ¸&Ěl®Üëźv6ž4¶?ź,Ç‹ĺ;Ľ1ŐülLŤL“2´ ·tOµöż^ eĚ/ěŚÎwÇä€N`ÚďÜ.Ö¦,ݰŃ=¶›OçŰ{“˛?c×nŃ!̶‹…˝ĺĂoVŹż_>ü®\}°qôö7˙ôż_~ű˙Ĺ3­íg{Oţvóň—năá„YŁÍÎř­1µ<*—ÇÍ:=ÎΓöđRwö}çčńŰęě>wk#E×tŹ×ďţrĺüGÝ;”í­ń˘_,lő¶źČŢiŁs4Ű>Ö«—ÝÝŻÖÎľ[ܸl”ÝáĂŤ‹ď:Ďôę©Y˝G÷[n>ľşřęwýýE{× NűoşGßŐËą…˘TtDEkw¦Üi´î>á7Ů;k´NĚŕľčśţEŃŢź0˲˝k—Źf[Űó˝ŁÁŃ×G_ţ·§Ż˙›ýżťëíĄŁÎî“Öţł…ýçzýrpňĂÁ“ż^üěěŮo7î~3Unţtw_íZŘ~.–îéµ§Ó6WďĎ/îöŽŠĄQ±,ş'ôź“jĺĆdygľ/Ú„Éwěú¨ÎtNç{÷ĺŕaçđŰbéä¶čŃ9·vľś°·‹ĄĎg:fťnvڮΖ›D¦čßsÍ­ł>6×˝=ÓťëYµ›ÝŤËćĘĹČL‹Šŕ7'›#Ó‹_Ě,LÚ Ń;]Üzéן—kO{;oş[_N»-Ű?%ĘFôˇ±x¨÷e˙^kű˵łźËţÉg“¤‡µ ÇŃýS"qD +hŮÓDńÜÖgwĚgwôxŃť÷CÝ»(şç3~wÖmŰÁÖę˘ Ë'·ç;#óËwä¦ěÓféBç­=ŮÚ™_Řľ9UNĘ%±¸_.ߣş{V.]ôé…>ţşâ32ŰÜĽżrüšlŽč^÷l¶u8ß9"Ľ"Ę?ÎAöŹÝ™‘”ýŢĆĂű_ţ=↢{č—.šOć»'·Őň^QťĂÎđQďŮÜâ®_żK§jĺ˘čťšĄ‹ĆâŢ”^Y=ürďÉŻ{Ď—Źž·÷źšŐ» [ŹŰ{/čßš8o÷xxúM{÷ń-Ń˝#—ŠĹĂĹͧŞ.şôÇÍÚ¤ß&ögWĆĚú”ßó+ŹZ[/Ë5âÚóíÝ?!†U®Ýmn>tëÚ»/§ß·_K§KÇo—ŽľjvwŰá˝ő{ż¸÷ćź÷žţ˝śŚ»őqłBű"Šzc¶5*—:[/†÷»vöc{ű‘wÝ=&˛C¤•0&—oýqµJ b¶ą#;G´Sâz3íĂFď®č?đkĎ—N~E’ŔěÂÎĘáŰĹť—wÔę­ůÁíůeÝ;•ťC`ÔÂVŃ:$:3Ź3Y™Z’+“ry¬Ń˝5Űn4wTçxB­ÝšëŤÎ/MČU"#źŤŮŃůŢLsÇŻ>w›cj}\­Ohâ‰t÷ »Ä m&ü&ýmŃ=±«Ź‰ŞIâů•qŮ'ÄžöC‡Y·©ZĹÂîŤÉćX±D(ýů›óűtŚô`‰ôM»ß?[Ý{>Ř~D(}{~0&×îĄIł.zçÍá륣oş»Ď§čŢč\űÖěâŤq}s˛4ťĂ˝»ß·¶žÍ÷ĎǰŻĹi×'úě–/Q.nIđFç¤čµ65—Of,˘M98sOş{Ż—ö_–«çĹâvřřŕÉß5ZÓ~c¶ąm–ĎüęĂ’äĺ z\ťíçkg_7şű7绳 4ů˝…µË’Čňî3"€Ăă7˙Ő?˙OůĎł˝ÝŮö¶YĐÜ"dűzăüg[÷tk´ zb3~[tĎËŤí˝oŰ{ß´¶_-l=§·ÓwvžM”;Ĭ'ýNŃ9no=_Ü~Qź­ýěŰ˙îŕŃ/Çýšś ßüzxůŰáĺo:ű/V÷żüű÷żôNźßŇËÄj‹Ţݢľ°ţ¨łů¸\ą )ĺŽZˇë6zDS~‡ţ™¶D^v +z­ťŁĎ&őť‚¶ł=G˛VçôŽXťv»Ť…Łîć“…Ť{?ť]ĽÝXš)›ĂWť˝·íťWĺúăůÎ1a It5wí[3ÍŃFk\/ëî‰Üőó˘ą7e6&őq–±ůî´]'Ţw»Ń˙b¶;&VÇŠB­Yż5i×oÍ·oÎ4˙âÖü3‹wć—&±Ń-B×Ć"-•D˛­s‹·eź–GHŰľp+Tť^4IËtřSvčĚÍ©ć­ŮîíŮŢ´Ş…ŁIA"Đň|ąýĹtůWcęó‰&±fEÔ&ś^™ë4HŘó[b™8Ń|űđ¶ÜxB¨b‰¶IĆŢůbĘ˙ôŽš1ô«˝[E÷FŁ{c®ďwŹýÍč<ŃĚ=’¶“€Qtχ_®ź˙băě$\5ű»[Ç/×Nßš• 58+z‡z騷ődÎá_NÚaký˘ąz>]iK’˙ęcÂá߬ž}C‚ôŚÝčí=§[¶D”z§˝ýŻÖď~wüě·żţý˙zöćď˝}żń`açĹÂÎKRĘÍGí˝/őĘ}’ßM»!ń”îîK’ľüęŁE’đßvw^Ţń»Ó/˙q˘Üť*÷ÔŕîÂúĂÖđq“ÂđÉęŃ›ýű?v¶źĚ¶vÍŇ™Y" +öxůäűÍżní>_>~ýăďţăÚ˝onÎ÷¦Ę-MŻiř„$v˘¨„ÉDfš»„6ŁEľ–kĘŤGDç Q›î™\`C1:ßm´ÇĹ*‰ vé>‘ÍÍóź/lܧ[ ťíYŃÚ/„«´HŮÚo4‡7çÚôU˙Ä-ťqľÝhC%$"Ů9˘»XŘxľyď·»O~×ÝýŇNZËÇĎţúŕÉŻýŮ• ·zŃÚş\9|ą}ď‡ÖÎ?:›[÷IĆ[=úzéđ»ĄĂď;»o»ߨĺ»DĐšýÓíűߏ»U’Ću˙|űÁoŽž˙ŰÓ×˙îřő?”»ŹHŮ<|ú·“o&÷çşÇjéîŇń7kwAĘÚÂđ-iqó!qö)żE¤Ď ΖŽŢ®ťýěřŮďH źZ<űE÷T3żrá× _´·ź©Á9qO:Řrí>‰ý˘{´|üőńËěź|Ý=üjóţŤÎÁ¨\ÝcB?ŇDn«Á¤Ű iˇ\y0ĺ·Ió™í”˝ăŐĂŻDďh¤Ń&Ţ${çD…üĘĂ9ł}‹N’€rµáI~ŢWý 3’đ5!•ŰĽ1Óiô'Ü&}‚ţsĆíÎúĂŃbeT Hň™Y$1ž„şkÓ=é¬?Ú<ů®ąúhŇnŤďs۲s"ŰÇ$µ6Ü&É˝·ćÚÄ4gôKź”+Ĺâţ¸X›”kSšŘ"©Ć¤$N`ĚŽ[ąOśŽť0ˇ=|â—!…N» Ý;iźŇÎ5wFÝq±4çwFçú„DÇH¨ťë%śóŰDÍnN/ó—KôĎí9˘Ą}úĐüÂ>ęäÂŢâĘýŰbpcŞĽ1nżhNŰ bÇ k÷‰íŽĚwéĐćš7'őźßś! –Ä z n@ôóÁÂĆŁ…ÍG˘D,^.îvVď<üEďŕq˝öös˝zŻčď“´ÜŮşë–iŮ›°#Ú‡ôx›$ îεŽĆěvŁ}äWď/ﵸýčŽY’˝»rŢŢ~Rn<(‡ŹŠĺ»ŤţÉŇń×§_ý~pň–Ô+˝öP-_´vž÷żní˝^ŘzIę6Ťź*‡„]„!3Í­…áÓîÁ·ÍíWbő‘Z}Lňö˝Úhí—ëd˙”e’u‰Î·Ž{»oe÷pR//l<€×=,§ĹŇ9鼤±övľ\?ý~Ş9śô볋۳‹;ôÝÝŤÁ­b‰8ÔÂňĹĘţËYz†“ž®ć×Kg¤tOĚ/OĚ~H·ssÂNČ%Ý»ŰÚ~ł°ńŇ/Ý×íÓ;xĹ $ĆÜnţtŇýŐ¸žÔ¤#śÎxâ gD[n7ş¤Ď&j@AgŢ\˝GĘČ„Nš Rüň}K‹\Üi-ťÍůŤżş#Ffĺć®î7HNŘ™/w[«÷¦őň_ÜjÜšY¸3OŹ$í#38'n{ói{řlÚo%™™”ĢuDźPťtŔ ±Dź ˘tsŇýtÜ G,rĆí4Ę=ĐÉŃÉͱ˘{szá©s]"nă¤Ŕş ŇŽwOßľüúżľ1łđç·Š‘éµxŘ!iyăĽŃ\ĹbÝ)łzcRýůÍń[šČ)żôLh…s‹[¤jŤÉiúDNŰŹzĂ'­áĺtOfqřD,źŽĘNٵiúű‹kç‹›–Oľií<#›ËL{źäůąöľ^şX>úfĺřmsýÁYą-şóť˝ůîţds“4ŇŕH.Ú|đ7}z°[Oç:{K‡ŻÇ_‹¶ýúŁŐ»żŢzň»…×b錀˘wÜčŚůµćđY÷č‡Öá „9Kw§›Ű“n“¨eďŕ«;šě1¨K‹¤Bßžď‰ÖA{ëQ§‘ąĹrýáňůĎ:očuR—ş„˙k­áŁĹťçăĺđĆ\›°—¨˝>:+Ó?ťCş ’xiăź“§ K$u{Ö®«Ĺ]zŹtăt;D"&Ě +鄢§}P,Íú=˘i7¦ xűÍi·~§č“€4Ňčň:OHusşu»Ń śî`’tĄć64¬Á)ńâq1 Ĺ´Ń™óëSfůölsapĐŮ|@\űŽX-–oNwHĐ’‹rđ—·fŠrh»GS¤Úëő[„ER-űĄ{ťťWvý§SnTôm˙„h‰‘ŤćöŤ‰rd¦=&–˙ËŰł7¦Ěť˘G +ŻXÜźď}1áéQÜ™P›ţö3"Ľ_̶~:áţâŽýtë˛{Đ\»¸[ߦ_:íĹŤ±ą›ăbJ-—Kw»D7ʵŃl^Ü‘ZŘ”^…Ľ×=¸#şŤćšíŽéeâď´ý)»FËŁ?,n\š•ó)=hmÝýĂ™rHä¶Ś™UŇ6.~µ¸őL¶Ź–Žżš(WéŔ'ô*M>ˇ—egoůčU˙ËöđáĘÝŻőÚ…Z:wë—síăÉćÎQĽ{żÚ|řëůî‘]:#ą4;7|:Ó>hn—\>ţnĺî÷vůśä´rçé¸ß•«#Ĺ€T6şŽ•Ă7$h‘äßÚ|@šţČ\˙ŽX&…hÖo/ďżŢ<˙Á®Ţť5«Ű÷ľ[Ř}xK¶oÉÁ¨YˇIŠîááăżÝń{˝ńԫ壯ć;»“†Ź!]Ąęžl’–·öŕ‹Ůć„čĹíSö&]Öě"=|˘rŤE’÷ÖnÍŮ…!ńŁ7śqÄ×ÖFËŁó$Öžşţé„Đ?tP_Ě´'ő +‘‚ϡ=m•+ŹHHđk3 CR{éˇ ’ Wôčߪµ3Ą–Lk{ăŕÉ”_Ą»¶C5bLvkZoŽLyŰ9h¸ő±ů^ŃÜźqŰsĺŽhí‘^@ď‚h˛ę퍫%’yF‹.á˙ťůe(;$ů˙ÖÜÂXŃžs´ÚéwźŤ*bpDŁ3Ťęźüř˙Ű\kçłQ1:»@R"‰÷ŁĹ€Xá˝FęáîÝow/^ßkLĚ»¸f[ŰóM˘Š„-ë3nCµööţ¬híËÖ\Ü›±t›·ç[ó͵îć}’Y\{JŞiÓ$Ž’@ř—wÔ_ŤŠĎÇ ń"\ÄÝH¬5‹Ů…­éćĆHŘ(čɤ\"m‹($˝ô9·ŃŰĽżvôlDDłŘ©K¤»Ś5ÓrĹ´úĂG„şµŰ$ŁŹ+ú`dřÄÖŢýTďŕóIGĽŹžC±pH‚ÉT$ΑeÚŰ­µSúĂMşĘŮÖčl›fm F‹%’Óľýý¨ęŤN{ĺ7GçoLxâžŕ§z«Ń:\;yŰŰy42ˇĄ[˛­őY=ř|ÂŤÎt悔yIj;!‰IPŤ‹>IÁ^JúĹáÂÚ]"é·f;$.†Čö,ńMÝ>XÝ˙ФzłtBD~ľą9W®Ó›ťtëEgź4ßîđ’gĚ-ëqĚ{¦B:‹ęí˝ůÖöţů›7ó?·÷žŹ‘šż°KŠL{ýQoďËŤ{?łë&7·›÷FĚŔ Ž6N߲͑"Ü9˛k÷Ďźüę˙Ç˙ëčé/oÎ,şÉş0ˇß*úvůIwďëöö—Ëwś[ş7ç÷:Oˇß&cq‡ľKR:ÉNýý—nĺĆ”'*d–N‰Ě4×D˙ čŠîţÉĹ·˙ô?üźÓ͵ĎĆd±°ąrř\vöďÁÍ™v°”öź’´@Ľ¦ŃÜśu«ó Ű·HľżŰXŢ~úÝ?üÇéŭϧ ;¤ŘÎ7wçöýM¨Ő•ýgŻ~ńŽźýć/FĺOďŰ3ľAk#]l¶Cš`Łu@řŮhď‘\GrÔ¸^'MíÖ´'Lh¸agýriç©[9)zÄ1‰Nţt˛ĽCÄn,ôOšý“ÎÚ} [;k{O‰{Ţ Áé¶(ş »A*[ąr±vüŠczćŁs­;ŤÖř|˙Î\‡ôD҉ŁuÖN»D‹°ÓIwcĚÜžmÓŽ¦ÜĆ\-zźM(×=îm<&Zýo>źĽ1&&E_uîšţ9Qi32UNý1R]'ěSeŁ$9p;ŕvżŃ:˘'ůŮ„űb–řď@¶ö +ŇÄv‰$ŽĚo_ntŠĹa±°µ¸rwóä›…ťg˘<·°=‡]ˇÍ·v©üĘÝÖÖ#żJĘÚ˝ůöţ`˙ĺňé=8Öýc·r.{ÄěN–öžšŐó[jőv±B”“Ôyâ¶Ä4GeOőýĘťóâÎłąîˇ˘Ű/7nŞw{{/·ţríáŻŰGoć—ÎĆ-‘»!”qŮż-űjéŚu5¸đĎ˝»oűŻI¸×Ůćć´]ˇs›P“†´ż!)€wT˙ó)óWăĹÍ)#hť‡o×Îż];~><ű’„b. +ôjôç“rtľCGŃ>÷kŹěĘýér‹4qRîÎ\pˇúŇŚ¬}»ńđW·$.zP4íȤůbĘŤL{şćú˝ÎŢ3·zĘgěĘř<‡ćÍqK + ]˝ëI·=]îÚĄ‡ŠŢÉČlkBö‰UŃMhZöpĘď•G+ç? KźknŹÍwoţß$˝‡“ăÖ™/úGl°%MěČfÎ$HHI$‚Ě™l˛Ů9çžśg¤IĺWq%k­dŮrŇZΖle۲,Çőzď˝»ŻęŐ{çV±şfzHđśóýľ_Ŕ0c Ëł™°ŃvżÄ'ÚŁ6vÂ6Áa˝üŘ Ö…Ű:Ż`'’ĐM6żtëyhÂoqG .ôń XGŘËčݡCÄä¤,P +ÄFßÁ ?ĽŔ&9 +đžĘËŢ6j?¤÷Ô‚ó)"˘\iĚĆŚšH‚)ěšé|owG 0î÷™đĂ3«0#Ć䍹I Ľ + uÔBŤZŇ„´Ňqx˘(hM´ćăr/xW ç W c e ćYuY(ď2Ú’O¸‚*PÇ„7yÓHż Ş qÉ“Óy8/“ňłY_aÓ AeÚBŞ-¤Ń ĐB_”E*·Ť%gáź ľ•HŮ(u|ÄE‚áńPšXŘÂb“VI˛aIalĆ=SÜ~ĹĂVEďSÁ< tÖ +¬8Ä^Űv2m@D'‘"„–¬ľŢgőD,NvÜ„OŘ/U0ŁŠŮ×ۆP–´ái7“Š-"\1a{hÄDüóAÓ?Ü6~ë8 +ÔůÖ'Ý›[–D:l"ő5ĚÄ­ŁČ&#VfÄĘé!Nnú9mÄBŘ˝Q`T°Oŕ ëQ@ȸ9‘gouďu·ŚşţyČ–LçŕFm4”`Ř„Î9’0»q>b¦t¶“PÇě4č,a/•Jm *Ă*N÷Ě88ńä›db>¬m˘RJťÎ%{^’X7čˇŇp9mzčü!3‰™HjzĚł¨@ âÝxý(“^0*¤?\îyõQ;«s…¨Ě*¦ĚY¨, Ö—§‚©y€˘ŹűŁEű`­ađK#vĆäŹABD¸"ČüžÉ/Oxc:Čnn »°Ĺżä¦5 [{k|pĘŽ©šPUď‰ Qť…BÍNHŔo:'ă‹”˝á^Ź:og±CĘSćdLÝ@Ɇ§ ÝC2±q‡L„ ˘«Ú7f‡ŕ?âä†`-AX:Ăŕ|Ž Z9jănv€!•±sDĆśQß ód¬ç¦˛>&o HűőȧĂvÚA(v,ćĄSx´ˇw07‹Éă®}Ăöa=†Pë( j´€lő®0 " ΀€JN,eňHvźpú‡ý˙x›nHď`|ő°ýźXéÁă v0Á‰ [h“/z}˨׆ĄĚ~ŮěWm4ŰYÄR‘ŠŮ+Ü2âĽuŘ>j"&!+sŇvź ”ń¶1ϸ•ĆúĐz‡M8ÄOhd€Ů°Â2č# b +ŐŢ6ůbMÄ!#Ş< +«aî×ůǬ´Ź-ńΨŢL;©¬‹ŇŚĚ-Ř>ď …€ŔË${`¶uNÎä— Č@ˇ& Ą\Ů*ôŽŽ¸ąa=8óŕŹaáŠJë˝Ńˇ›3RS# Á6ŢFćý|ŐA¨ĆY0řă."5ąp±µtAŹDđ&Hâś3 ÁÇ[T4:hO09d'o™p0cn:ŚOŻbR[ďá˝@4uŔ€€šđH–€Ncś"-Ţ(¤ţ†Ŕť†1CĆ÷Ó9]°Ň:g|¸Ĺ+€=†h6b¦ťxĘ<Č‘qgä•›pÇÄÔĽźN ›Ľ_xŘFŽŮńĂ÷ťÚŮę Ł„LpŮŰFě#`ř­Á13¸) ŐAť÷ HřC%Ă€BÝ&WÔe<¤táĆ2:óĎÍ·vŇśů-‡ŁĆŕč€@‚z;ü¤Ť^ ŐŚ>yÔÁ|ńqWdČĘ4ÓĂ6`ę@‰m-H +0#Ó!˘ĺľç¨ÁŻw†'ý,Áqcő +ŁNú  ôťqřE›_„0baYšaµ±Ă0läföĹ€j‘ăČ‘h4$bX>˘Ť˛§OÜ7Ü +9lŞs ä80«6"íćŠĂ 32y8;.aľąů”Szžv‹™đ +ţpÉĘ˙ĂĽ ť'Ü‚Á+Ď[˝¬—€+Ć\as@Eř&¶¤Ň&™ž9dkĘůĂČÚűtŢ[Ć]·é‘1' ů‚ö·ThŔŕtÎ nÍŠ%u*ÝÚ–«+W­ DbG!G‹©zqK8í,‚•Ň#˘Î5ŘüÂ%Ś/ śöOF [H;ˇšQ 1j˙8`Ŕ q +VŚŚ–Céţ!nδń`üÉp›Nj1ffň°űĘ!ëWY†ô¨ÁµĂ쨌ÉĂOŘ)ť>hDnµô¸5¨łR:pÚf|ÜľËń•†S~©·s.żěcs$Ç,Lˇlę¦:Â)|ĹţńAůŐč †ŕŔżz`â¶ĂV€¨ś¨hBb’ŚEŞűŤŰôč°#¤÷ NĹÜÜîi„şŃ/”@¬ó˙Źűu µ&gp0'Đ39b†*ă·Ž: űl¸lEcuˇkŔ4šPL5„,ÂÜH0e@„Á˛{”ĆÜÝ€ÜLA ұ›g§-đq,>äd‚ô;97ř +p†& ’>o†23”Ň3ť›0ńSç$ µU °e.ŃwŇ™a{ČL†Słúš†fśa$bÇ3.21D!6:čXw+žŮ… 9âdÇś!řëa0fčń 9pĐŕ;îŃBŘ"• Ô@Çm$Lh wŇY2ŃĆĄ†ĎzذÜ-#öz݉z!śz…=đĂzź –xĚŠ›‘„w„ɲX±”—)zô ’8čP0 ĂF|ČŹXqw¸Ť[ŔÜ`™Đ»ŁőĐ©!3;lĺô7w—L ‡tţăľC§´Ü·o 1 ÎźŐ±‡ >Óŕj:â¶Ça=x$0ưÔ,DŹýȨ1řŔ¨ß6dY°ŞwđQuÖI˙t`ô+űuă0<˝Č€hç+ ć +2ÚWŚŇy Ś6Đý64ÜŽ„Ę6, 4~«˛ ®­ą™ŔŽVâž2ز±Ŕ~NÜč`n˛n!~‚(®ďň.ç‹”\tl%·łH¤‚„K&čŮp‹7P©6bgáLâ SđěFŮŘAďç|pśđ¸—דGcđŻh¤â˘Ű—>&CD ¸X +D*vJó0š‡ÎÂE+&@Zd”®—ÍALsÓCć° öőÁBG†M¬†‹JáB% Ön™@ä§žđ܂ћĐ{bp©‰ÎŐŰÁČŰF=·Ť¸AČŕ#&r R‡®±ůc~:Ł·ĂÔčŔĐůÁ˝1`c'ˇŚč}˙pëčWč鼶(‹P}W0?á_g:8fwŁ"¸;°Ů]H +endstream endobj 32 0 obj <>stream ++gĺŕ;V^ň ęý÷ |ŔK7'%ÁkÔ–ř‡ýĆŻ°îŔŰX=żyV& ĐCŞvTXđtĽéPęlz:čńťęş¸ś‡/ů„:üžV§8m/¬Z©ś KZpĹŕ“ q@q­„j@ă:W4żą8ČqN&F+.6®ę‹ + X „ÍB9(·˝ˇ2*ą‚đĎPËÔwĺŇ.VÍ,.˛I_¸ +&˛—Ńp~ ČÇBBďC*·*`•š~ˇaŤsE†­`đX o(o§Ňŕs™ +ç–\ >vsCxď …˛SYHy~±7ę ď‡ć5cF_k~0“¶óŔŤ,éf ţHy |˛_*†t3á +™Áާ°h ćn\s%X˝4ť’·YGP÷ +†€ ńSŹÄŔę~Flk  Ů]N*c{$˝Ows‡Ť¨O0ڍ2ćˇéB\«ÎC2ę`Ů (@ˉ©6TńBË©#: W@čl-ái+¦B‡č7b NöĐ„TUďŠN –s±űE/‘ ŁĹK`ĚJ LšINn^P +Ť™‡)»Nr€× [Ť‚ĎńIPAS´S9L9;8á¤ÚqĎ­Łî­\=+şé,•č±jŹS{ţhÍëŕâĆíô…Ň!’ꩢb=V]˘3=HC´Úő 5@"Ţçă­=6żě‹Ví„bóG¸T×.K¸hp©€XĹĄš7ś*°ňiL¬˛Ůľ_¨8i ľ‹NO‹Ą•H~.ěşBE'ťŁĺI0öHř§5őGËX‰—W|Ń’“ítÎiřc]LîůÄ–ťÉŢ„j(;m *LfŽË­x"U ™ň†+n*—H53![ŮěTŢËd˘Ă¤gÉ>`ŐË\ĘRőľ•ĚSŤ8CcîÄC+ˇŚş8×#př`RlŽéĺ +Î` +ôZŹđnĆËd€Ď-x&đ˛yF™ Ę-đ„nFóň‘EÄ1¨’J—[6*uBH›tryg¨Ĺ›Á䤛/¸XÍN)*aĆbV"kHÄŰ^ľ ĂpĐ &K4"Q+dń†m&ĽazŤÍCěuŃYXyG0cĹŐqʤďőDŕ#6\őqEZjAŰ7Bëä ҢźËÓ‰&ź›bRí RMMnŇj˝Á/{B%/_s2qňĽ\ )-“Ńb¨Xü˛Đ0 šŮ)#hđ°ÁxÉ<´âç=\rt4› +MřŤ›I¶ŕČÍ ň=չܴ?Ö RS!m&Ża±Îr5V_•šx˘‰I• TŇz{X¬nŞ@Pˇ#$` +«˘Ńr¬¸ęlŇĚ„ +hdÓ}ŔU8?Ç˝B ‰´||ÉIĆěDĚŚÉţH…Iuiu’H´ÍAu0ťXÓ.xř<Đf@îRŮEF[ĺ–‚jź*Z÷KžP‘Ë.rÚR05K&§\śf#FT„v0€„M‹Ĺąľ-,Ĺ%ŕd}@†*řŁU,IH2©s‡ŽÎÁ‚ú÷¶±á Čł~ľĚĄf°X‰¨Ś:‰„sfLňE+¨PĆ!”IX(ˇ´Ěçćčt×Áç98#*űBđţ:ˇtá§‹Ă;ŮÔTfňH´Ľ„&ZˇÜ<ź‡éĚ㉎P^ +i=@—ŹOKĄéDc•×úć€ü/¶‡âBX&%hçř¨ + 1`ŹÇڨ؀o*ťÁí!L +điĆe• ʵą­4·=‘ +P $ô;c@x'™ĘM©±*·¶r3ÇŰŰWc·•‘hÉĹĆ= @_¤Â*“éƶXYĂ“ :^đ™!;*y¸,¸#O¨ Čg§Ĺň"ŻM㥶· .QËQÉ.›ťBÝmĹIC|Ëâr#čÉ›ť‰××”ö&™¨r‰ĎőXmŠŃ¦ř"Ô±.Ě€%©ęJ¶`ŇĂkľčŔ’qŮ™Xiµ:ľşxN,-Pj×/ŐýB™N¶µ#TÖ¸âf˘}*¨NŮÉ8ĘCÓŀ傉&Č1ŁÍ{Ą¦Ghµm:9IĆA§J0k:;O¨},ŃĂâ“‚6]]8GŞÝo +ŞÇfć°x{°ÚŃ +ŘEo¸ÜhÂÄ ă +ƨDŤM5#…™X}ťĎĎű¤š“…Nié!“)73l VđW&4†đĹŤ$Ô›d5 úH~)^ßkkbe^°\ţh:ČÁf˝Ń"™ěÉÉXmĐĹ"Mť'dÇÁ[.™şfÔi`Zˇ´¤vŽ´6î”[ŰX˘.Âg”Övvî´6:ÖXŁŐN8Ó)Ď©,śLww\lÖ)ar ŤŐd‡NvѢśźsŞŤHń&o¤f8żéM´·C™~ş˝Îg»TUĄ”ŽXZŠ5·b­mo´bĆ69iŁ•梕PfŠNubµőââ…ćÎ ˇľŻ,ő6ď “]#š"“łTj–VˇkÚĚŮP~ŮNe†,p¦›ÉX%ZZ`µŮpqY›9ťčě¶#ÚT®µć[>¸(ćfB‹Ő–„ú®Ú=Löäň˛›Ó Đy8 (B¬lgz§{»÷/źz˛»v±·u)”ë“­xc-Ö\çň3rcµ˛x±µ}#Tsóš‹MůÂY6ÝeŇýÔä‘ěÔ±panj÷®ěô1·Xt‡sŚÚkSńć&[Z ×¶ě ™ęÁ_m¤4î¦ŕł@,É©SĘô™D˙”2u*ZZ©ĚťŠúT˛&TWXmžÉÎ…r ‰úZnödĽ±đ ÔI=±ÓIh"Rn‚‚‡rs‰Ö^Ş{‰€sĐhĄf#„WIą&VV’“»JgWëŻÎźCř<—ŰŔ·T˛Çk µ}4Ý;%V¶|‘ę+*Î͉µUV›ˇR]&ÓžÁ•–+RÄhŔI:;#Ő6`…µ™SD¬î$$/­8ü/Wâ3sĹů3™éŁ©îmî\˘ą1łsÜĂÚ0ŮÝkl^éíÝŮ?rg{ĺ,źéP‰†\_C"%°íňTż´pIëźPÚŰŐĹ Đř&Tđ E`Ń6«¶wK‹g‹‹grýŁ‹§î-ÎEv0 #%@]¤˛–ž9oíĹ%mú”•Qm>šicŃü@#šÚŢnîÜŐÜľ¶pâŢ+O›Q§(u®Ľr=ŢŘő†kľh#šö‰M;­MřOH3ú" …am2Zś“j›‰Ö.Ż“Ë©µ•G^~7”_qŇ!µS™;Çk+ln5Ţ9.­˛Ďn_wń… O8«…ÔäńtďtaţB¦wdĺř˝ë—žÂ­XyĄ¶r{kórsăöâü©ĆćµÎ‘{ çŻ?ń-Ą˝ĺĺłbľźęěÁDňł§+ËŰ× 3ÇşkggNŢ‹KĄĘÜŃÎÎ5Ą{ŚÎÍ/tŽ>¨Î^äŇ-©<LV´‚'ÚLn>ZŰTWS˝#éţq>?•źŮŠ·×éÔ$—íűÄRH›ŠägÂąŮęŇŐDc×Jań’XšĂăeR®m”ĹęF¶wJëź kí¨Öˇ”&źź•›±ÚZşłSśŢ[ßKrmÖˇľtľ˝s#żxşIŞ,ň$ř[­µ»xüˇd}ŮN„ąd-×…ąśon\,­\jnßaŤĎ.B†¶á"řâzeőÎŇâĺXóH¬s4VßfÓŤŐÜäš95$S$ML΂X^!”+şŰńň˘=ˇ2łŃúv¨4P^ˇ´ ó‡ő^ÎĂŞ^VÔB›ÚLNîe¦Ď¤ú§A.#ŮYXśHaRm/'škRu XĄ=łűŘKďŔúŘ‚q!7ŐX˝ ^őŐkĽhmĄ8ąyĎ/Ţůüw‘°V[>×Ţą»Ľzú·ľ~­±q=¤Í=÷ŕŐ'^ç ˝7KĘĐËęä^mőâěńűňł';‹'~öÍTo0ź:˘v¶S˝ŁÓ{wďÜńĚÂąçĹňVkúHwĺ<«•‡´yą±]ZĽ4uüá…óĎäçÎÍo]ě.źÄ¤T-RśgŇ=63%W—§Ź=Ř?őh¬ş· ´|‘|0Ń ä&¬-Ú™B¬ĽQ;ífÁ +f¸ qřŠÉLqŮ^©ěŇ}/ŐOyŁ…üÂĺĚô9Ą˝[߸ +ťBĺÖÁ˘á˘”_‚NwQ )?-×W&·.÷ŹÜ¨,_Ŕ”.­–»ÇÎÝý5\ĚÇKÓĺąSĄůóÁtźŻ­Çëáü¬P‹ä¦MhŘÍ*ĐV‰ĆEgýŽťËO—çN/l^śßąťŚ—áăjg0__˝´qá‘ Ľ¤ÖWçÖÎÜńŕ‹đîP¸kĄ}:7w%?)’í/lžÝ=s#¦5˝lźĘ.„ +«Reٵu´Ľć ÔP¶/5·˙´ŇŰ.ŻÁş)őŐÓw?·pěš…"|)Ů=!wްŮ9đętĽ˝}ęţË÷żV»„T“Ű[RkGî«®];d2gAÍ%e“íH~>Ű=R\ş¤öĎF«[>6Wź>É©53Ćŕ’–h¬ĺzGJÓ{Ĺţfcń¸ý1Ĺ(•Lçhfň¸ŇÜc2­ł±}îˇéc7ÜŚšžÜ ęë…Ĺ‹‰îŃPa‘K÷öÎÜwňΧŘtsŘÉĐÉ©HqÓúbm©¸p&ŮŢśZ9óĘ7R™?ÉČŐţćĺ•óO6÷îéíÝ˝tć‘ćÖ=´Ň;zúŢw<íĺóŕ7ŕKÓ“G’­íLwŻĽ|Q›=M©ť­Sw÷7Îű…B˛µ™š:*”WĹĘŞ6u˘ôÁŇʵH~±3¸r¬tČ‚‡ËźÔFqÓÉĆşRšĘ·×<\ŠQ[<$ÜT7ěHĄĺŇÂYpž`/ó‹A(ŃhŽIw©>â—u¸ŠÉ“rmŰŚÇdŇŮľ‘îMw¶óSGymĘŚ›"›é{Bo(-V– ąµĺłĺ…ătşĺacQ­-×–ÔînnöLş2™A¸lLë-@€LÍö‰HŢMÄĂj'?{"Ó?.‚‚˝ ůXyŽÓ¦p‚[‹TZn.e NBŢ>yo(7sŔş©«ĎńωT\\$^Ę÷r“›¦@$ÓŢčíŢ›źż#Rܬ/^ÎÎťˇ2=­ł˝wí9żXŇÝĽłcpÓ‡Ü —·Óó×…ňúFBétk2TŞ´xľ¶zyfçŢé­™Î1ąľÉÄĘë'ď)öw hě(°ä)N[á +j÷_D3«G.§« §‘2¬ęj¸°L§úáü˛Ú9*iÓť• +„Ę›& Ťć”Â%šZ{˝ĐÝňGrn(í âĐwŔ&ę±Ňb˘¸ËLÁZUgN¤zÇčĚ4dU$RµIH4T˘ŰYżĆ¤»VBHu&=Uś=S=ŻŇĚiHŮÉĘâŢĹGP6 CJLăKK`ř»Çěl^VjkľPîÄĺÇ:K'Ś@š +çV1â§bĢfLd€WÂb ęxs[í Ş]OpR*)–Äl{ÜEZĐ«äd +2Ú$•ěL¸7)„ÓµHˇ)ôÁŢ@,˘ÓSrm5š›fĺrˇ±Üßą"Ő–°x‹×(ĄĘĚ0©ŮHi Đep¦kZ˙Ö?šť9H¶í¬R[reÁ•boĺôĂ §ËôO1j×E«0$e~H(>qŘ0ąi<’‹ć¦Â…i6׏–ś|rŐĹóPÍ€XŠW– łçJ g2“[śÚ@#i?<î`LHdÔ†Ž;)€hićdvędnţöpuŤ/ĚÚM63íݰ¶čŤTˇF~Č&!µ0µ“ź>j"$´y€ş‹Rr‘;ĐB™I¶ąÔ¤“˛ť#ťÍrměJeć¸XZ¶r4Qß?žź­Ďž†Žµéţî˝ĺĹËRq%¤N…Ň}LŞĂL“ŕʤĽÎô‡2bq>’›­Ěžjo\%¤†,·»v˙ ‘dۆËŕü©D“J€ď]/Ď_č¬]µř"jqşłqŻ[ń {Ĺ>Ř +Ś{‚)/™´ů#Sk—@Á!ŚŰ°¨•”W=cKí 25jgľ:ětI.5sŘä±áFś'x\¬ĐŃâÂ汾` +Fť¬âbÓ62ÉĄg8ŕŔPJgĹüL°'VÖř,Ě‚›Íý‚źKĄ|€O&Ę3\vŠJ÷˘•`ʍ֗sSË»W&×Ďů#)o(™¨,ÖçĎ4–/%[»ś6T'Ý\Ö3U[bá±z˛u*R[Ľ0ěţ™˝{x!WíŻťĽ+ŮX6a±ÁÖa0ĺŹV¤ârĽ˛ 0ٱ@¤čĆŚšrAZ›×*s§!^-śx´ą|9QśťŰ¸Ł:Ź× jŮHŮŚĹěA%”śĆ#Â}ʧdFΖśá2Č—™ +B»Ĺ«N:ô›ďťŚCpŠ„T†qęÝŚ‹3±Ú 9<á°„6“jíhÝ#1°ß\ĆäóÝŁŐ…óN*‰đ6=6ŹŠ•±HĆŠ…! ‹ĹY\Şř#„/ B-ZXŇ&ŹÖ.RÍĽTRČô,hŘ‹Đő‘Ü<¸ĘPvžV]ŚňY(™wpzŞĆef‹3g:ë×›k×Rť]S@w’Vgň1B„8“¨­% +3\ĽJ6F¬A¸.ĚĆĘóÁxÝĘűů)9üŃVwc÷Â#6BÜ?f3: _Pć•v4=ĺ"v*É˝öť÷z GÇ,~Ťćŕ«Bq]©í*µ­ÁĂ"¬¸ɋ͍X1XX`*•ů \‰¨ŤąŤóJgŃD†Îw9­C(P‘ ҉FăÚ źh™›SaͭࡓŔ‡@ÎDĽ‹¶täjşłÎj“ţXŮÎx9…I”Őöť„ ĹK 5™ć +«ÖmÁب› H5|xmK*,Xń(­v’í#ŤĺóĄąăjs™I5lÁH­żşzć.2^8`ř…FPť efypú׌ĹÁ˛*őmR.X Ëe§vÁ„ô¶®ÔW.¦Ź„ł“1­łwćĆÚ™{G\´'”']0xB~ŚVťXÜE¤„U`‚62Lő°äT05ٴʧ»§<|nÂK‡’e°O¸ł@·â-‘.8±1˝Goőy‹äB©I2^wRŠ‹Qrú’‘ %ęKrk#\ZđGóšxŚWůî?źłáăv0e.5•iůÁ-0vaÓ©úÚ°Ă„\D›Ň¦ŽŔŘpÁ쏑„P +•€ö,Î_¨-_*ĎžQę›h´fÁ“€ś@D3!´=†?@^km]/Í_ +Ëćaé¤eT*¤+‡’]ą¸¬”V±‚q)"’˛† ŮIŘĄU“›1㊍UvNÜH¤›Łzʦˇűp±JµÁÎťwаžjy—0ˇ¤÷­(ôlRĚ÷ňłŰĺŵ» NΗfWű{gçN\¬oś s €!ßçÁÍf§|Vç¦lŢĎÄ™x!’iEó&Ua3Őd}úřŐÇz»”Ö¬OĚ ńĽXhf7"Í9ďŹe*3B¶ĄłĽęçÓF4¬BĆź9*-»ů Ď*ÍYľĐćó TÖ¬lĚ'ĄÂ…ryeCé/{Ä”—W™Ô¤ ĺé&„kbWś9IĆ3͢Ňţ(¤Ý—­ár^(´›‹[ÝíˇbËÁĆCé^X›ő2šŃ>8î<<á¶ !Ą˛+‚ÉÉ;Ř3ąąÉĺçńdÇÎ.{xE*µÉDÖsć`4/d{{>ľ0á ‡t.·ź'X•Ą=dÜâ|ĽťŚ3µ‹ @8<´ĽrâęôŢE>ßrô0.(7ç岇 ŢaŁOg']AŮˤtŽŕÍ;"d¬ÍŞýXy%ŞÍQńĘʉk3;çÔöĽ7¬ŽyH%0Ů6¦TMDŤ$ŐÖ„eLŞ¤í„Śđ•âôůćň>ÓŐ6a<ŞĹJ3 ‚rŤN4XĄ}ťémd¦6˘ą–\žNTW“őM1ż0n!ľrĐtۨ3ŔkBjŇ⦌X†&Ľfw‰5r­­Tm‹TĆmÁęĆXé6gźÁ}ČěuĄ~T.má˛Éć’M&¦ekÝŮőcË»çŽ^şűęĂĎÜ÷ěמyý›o˙ŕ'~ň»?ýőďź~ń×ďüřĂ ÷łsş»y¬:·ÜYŰémť\9yÇO˝ôÓ÷?úč׿űúwtęúĂÍů]ąĐł"ĽŐuř%•T +3ąÖ†ŹIN8”mĚď”f6ŇíEą>“ę,.ź¸~ć®ÇŻ>üěËßřŢ凟=˙ż\|řy.Ó´D;*Ý,X&Vç łÇ«>V‘r-Ą2™köĘýŐŢę©­swßűäË<ýâ·ßýĹ{˙öőďýäřŐ{+§´Ć!Á.ÚШ a‘,)íÁäĺ:%çóýÝDuF®Ní\¸ńČżľţŔó˙véÇŻ>ňÂĹ{ž8wף×{áőw~ţÄKŻßqďŁŰ—î#bE«ź· l ” ©m17ÇĆJq:ŞÖů^ą·ľ|ěöîÂňΙ;ŽŢ~÷Ůë|íÍďüćËżţöýâůŕÓĎzöëŮÚÜaS`ŘôŇš¨-¦ŞŰ?a#ś(O‹E,\t .ˇ!ăÓj±»väâ‰+l_Ľçâ˝OÜ˙ôË›§®5–ΧŹQRiČÝrČIqJsrqiăřŃS·_Ľ|ý±§ž}ă­ďĽ˙Ágźüćwżřđ“?ţőţí??ýüË7żóĂÇ_xméŘÚÔžťTÝW[ŃXNÍť™ŤŁŽźż~îę=>ńÜßţáß˙éóo~÷‰—_˙ć;?ůŮGźżňÍĽóď?ýëüýŐďţěáŢÚşp±lsĄ6·—í,…SĺLą9»ĽzúâĹ{|čé^záŐ7ľýîO>üőďż÷ŢGŻ˙űĎŢůůG_ţńŻ˙Ď˙ű˙ý@ţů—ß˙ŮŻ®?ţbu~OĚő€0ýT4®ĘÍ©…Í]x­9yáú}Ź=˙µ—ßüćÓ_˙ĆăŻ|㥷ľóŁ÷>üŐGź|ńĹ˙ű˙ü÷‡żţâ‰_?qÇéÚ+ÖPQĘΦ[Űî â D9_kĎ­9}ű]Ţóřó÷üËËw=őŇ«ßţŃßűřÇżüčŹůË˙ú_żüô‹OűűŻóÝ•cw‚9¤¤z4ŐJUˇ0#h“µŢĘÜúŃ­“Ż?đčO˙ë“_űĆ×ŢzçGďňŢ'żýŮGżůŐgź˙áOţŻ˙őßĐ­?üĹg/˝ţµľ¤÷°c6Óŕáěäi!Ąž©ö—wO]}č‰kŹ=ő/_óGżúäç˙ú›?üůkß{÷Ă_ţńo÷ł>ţýţô?˙ó?źţćó^űÄí÷$+Sź0{áĢK +ÍĹîüÎöńŰ/ßóř=Ź?÷ęŰß˙ÉŻ>ůţOßëÝźţú÷úËţ×ÇżůüŁO?ýŹ˙üĎź~ř靏úőýď˙ţň/{ńÍďÜóř3ď|8šž$ĹAI“˝ĄĺőŁÇO^¸tĺĘő»o<üŘ#oűíßýîw_ţéO}úŮ{ż|ď•7^˝xőÚÂĆNŞÚó}O0é@Ł8+S\LŚ)ĺJck÷ÄŐ»ľűá'ď}ô©g˙ő•ţěýüôý7ľýýďýŕÇ_ţé?`:_{ă[ŻĽůö™kMoś+÷7ąxIζłŤ™Te2YhL/l­lînîl_»rĺ[ßúö·ľű˝ďýŕÝ?ýě‹?˙ Ęńó>ýě׿ůëßţăł/ľxű‡?şţđĂÓÇÄü$#—čXŽ’ĹÚäôŇÖ‘3—wOťß=vęꍻ_ëí_~đáźţöÝ÷?~ű?z˙Ł~óůçź|öégź}üáÇ˝úÖwÎ_{°Ř[őÓŠźNFÔvĽ´eÉP2®*µÎĆööC?öŚă‡?{ůo˙ä˝_}ů§żüĺo˙ĺÇ~ůĺżřŕW^{íĄ×ŢŘ8}•O76dĹ) 1׍ĺÚp k»'Ď=öôs/ľňÚKŻżőoßřÖOŢűĺ_˙ţż~óĺźţÁÇ?řŃţđĺ—ź~ţĹ«ożóŕăĎUz[NR6¸ٶ"aŠ(¶WrµţĆމźzîąWßxáÍo˙řýżüó_ľüËüčý>üôÓ/˙řÇĎ˙ĹĎůţÇź|ôó÷~ńđÓĎś»zo˛řőű}üÉg?÷ĘË'.]č,,D’Y>YF!şâ7Ą#ÉťŁ—Ž]¸»Ô](4»ýţôęĘâ©SGźţÉw~đ·úŮoóÎßůĆ[oĽöę+Ď=óč÷ßą˝{´Ö]Ś‚˘ůX“°ăâ¨r ¦w6O0’rZfk}ăţwľńÚkoĽýöo|íg?{÷ŹüýK˙öŻ·_<µ»˝Öějő¶—ä Î@€KŔË”ÜA e$śćăj®Ňč-/o\<{úŃÇyţ…gżőÍ7~ůÁűźńůźţüÇ÷~ńgź}ňÂĺsĄFŐ±"fŘŕ¤÷ŹX‡őȨŃďĂEY©&”âÔěâüęÚŢéłgoż|ÇŐë×ďĽńőW^úŢ;ßíŤ×żöňK/<˙/ŻżöőîąűŘ‘c™BÓĎĆ,(cđÇĂéTy6Ş”|—Psë[Ç®Üxđąľöř“˙rĺÚÝO>ůĚôÓď~˙»Üsĺé‡î{ęŃGÎś?·ľąŃšśI•űŐąŃLďćĺĐAĐe»ź7;pŹŹÉäj››{WŻ]˙úo‚WzęŮg}üŃ—_zéÝż÷ü‹˙vőę]+ëŰ…Z‹`E3V4jtPF›ĎPn”ńˇ°RN–zőŢňÔŇĘGíé"X+Ęšęčcd“›Ú?dÔ›ýž@ÔŚąP%EŚřŘh<]”Ľ Á>ÔéÇq6‚…Ä \2ăâ7{h„Nş©¸ÎŤ4ŘŚŽ‚GśíÁxFÎ÷&x‰ŹJh @ÓT:›ÎWJÝ™ŮÍçć6¶ăYÍ éťŘŐ»I‹?bAÂzmôĐ´¨ER5śO"”@ňr,‘¤xLN¤µŚšËkµV{~UTÔd*ÝęL–KĄ(/xQÖ…GJĆĂŮhnŤäľ:b3yCaąÎF‹˘”©•…\AMČJB^YŰl·«Ĺb¦Ý›T´ ’'|ÎÇő6\gńŹ›ĽŁ×Á;ád3’*…ę|*[ËkĺËWďď%ĺQ«Ďč ZPŢE"jóŃ&í kXĽL+uN.Ű|¤ÝG‚ň<ĘĹéxŃ”ô^a3Ă–ŔWGĚőnđşN<6¸ˇ†ŽűCŠŃËÜ” OŘ1ł‡0ş _0ÎĹ*“1^#„‚‡”řX6((tćˇ1§Ă/`ˇ¬—J˘•°¶čç‹#ÜćçíţĐÉ7¦w™-Áä2 ţST**—)>á'Ă*aA˘:'5 3á?l€/ +#”j÷…',“›Ő»y˝'bĹFźŕ"e?›ĚT§×vĎ+™Ę„ÁFA¦éd”)ęá㎓ ¦F ľŢŻŇ{}Áp—ÁÉXQÁ†I0@ľ ő]DlÔ„đÉf˛¶†xž¨ˇ„č@X‡‡îôw1:q`ćňđeźŘÂ!W&Z^.mV\Ň9żĺÔ)^[ë»js§8wĎÎŤY1?Ę–ú®@ôÖCƱÁ-„°2ŮZ8_ęźöqůcî1˝'[śő‰}ăî1itÁĘ!ą•¬¬Ęůłťs `Cx˝=čđGťě\ę6xČd83sxÂwČŕ:lt ™\#&·ŹűB!–bĺ”Ó”ÜLŞşHJ%"Qlla¬:<şŞbbÝM>Ń„D}á—žĄ“=;.#tBJľ*V^G¸<ŔĆD‡ HH(6gθpyß° Ჾ@E‹ąîĆĺ13vŰ!‹Ů†őNůô-čç4ťBĂENí+µJjé,Á X4\5ú†'ÜN8Ň‚ËM»\j†ëĆ.Ĺ *f[|:{ó)  &5)ćçJ3'µ%,Ş‘ń.VBé).=íŞVR5CfbÄŚA‹ îń×ůQ:0©ĐR•Q: ľłßŽE˝ˇ ›ťö‰• _ŘŽG­9»q–L4G”5 x(ŮC 1¨6y9‡Ź^ß»0ą|ÜâgťXŕŤG*p9kщü5ČgµŔ;8î·á.BňóZ0ŃŠ+ˇôĽŹÉŞĄůpş=dń $ŘňP „JRR ĺ <ŽQ‰Bc çĆÔ …úÚń¤S,h<š›µáâľq§#ő3˛ŃIšÝAhęQ(ş“ÖĹřâŕ Řľ(¬ł‡JŰ0ůÉ7áf]\OO'k˸X6Ü|ĚWŕ_6ŕ5˝kpÓMP¨aˇü- ű‡Ě0Ó:”Z,at…ÇÍ$¤ 2ś…ń@82xCFDďĺlXĚĂäÜ´ć +¦:KgóÝ ť„óx¸`5ŚË¸Ľ-‡O M¸>čDvÂĹ™ŃĘĆ«;˝í‡˛Ý“–@ÜěăI±l0áŽx‚ońjGP›\ĽÎÄ>&eňđNBŃŮض!ťgĚŕ??Ͱq8Ů„š|)–&\´ÁÍ˝<ŔňÖ!۰uⲋ˙iźnx‰"¬óťu„‡měmľ}ú¨ŰĘöĺÎćííĸ7„ĆÚLnYlě)ť#|qŚUŰ˝í틏8CiÂé°=ń0y2Ö ik~ 8ÁŠĂ& đpÁ?xĆKÚĹd©xÍËĆŃhĆ'ÜĽ×(µ‰„µ€XałłRu‹J´˝l + ë xXăä«Ô<¬bĆmŃϦFĎoqîźp}X:3±j 48} šmpc6ĚŚ'ślŰÁx›‘›ŚŇFhEʶÁĄŹYö€čeŇ>.čSíĺťËx$wŘŚYP™Dyŕä.Ô>opÓ8#oť¸!§ęś: ęđ…ÝD<«ĄşÝ…A2JáR ž!3Şs’4Š„r\Şë˘L(ô6.Ń©Îŕˇ4‡í žZő3™°Ú‰ĺç,ŢȸÁç'ăX$·Oç˝ůňí×ů\d:’šŠiÓA©ÄČ5K@†@áeÍţ/”ĆŮÉc­Ť+Xş/Ríďjť#."1n§aÍuv +F…҉1łďÎ ŽE®¬Ĺ*k.V›đ +ú@W:©ŢÉęŇJn!­Ášc‘‚ÉĂXVo š<h«:˙ˇ ׄ#hň +RA]dö„Ć­Ô¸ę›^żÂJĄŻ2 ČD +%¦P¶xóţneżBÜôľaó„·6Oq!°(Jq&”i 9I+)»xÍ+”ÂĄ%4^÷ňZ(Ů^Üľ¶uĺi'—ň0IVíąĹXn1QZa2łmAśMOÎś¤cőŰFťăö ¬ŹÍEŇÓÍĺËÚäQ9×Ůx®lÂ*řB%WB#5>5Ăg§ÍţđÁ ąyGŹťTVCŘ,-Óńz¦ąAI%hĎHvÚI)Á›—X“ÉŽ‹Ď›qŮ€‚tÎÁőđ4† Ő¨6Cđą`8Ç'+\< UWF7Těă˛NRör4ZÄĄŠť”'ÜŚÎAtZ0ŚĎA˝B™^~ń˘+R˛áVTtb1W0_a DM¨ŕóX(2=bÁľ:âÜŻ÷ŤŮi{ ×čx‡S{” ­ŃDŁ0ÇL@,{™”- yi•Ż«´ĚŢJť»ü(-n˛ýö€r fŇÇ$‡M~“‡#Łč?«â‘BĽĽhmRŮ)(%«!ŕ„Ó]/Ą6Ú‰%ýlž’:L|ĘŠ*ăÎG©oç‹T > \´ŢÍ€Ů?ĹmXÂ:xDgĆ*ę”Ô>®nąř˘‹Šsj#(×Ń-ĺ—->Ósp Dł “ß ŻF¬8H’µŐońŇ«‚ĘGň bi% 5PˇĆ¦gµ©3ÉĆ$ٛΞA¨XĂË€UÎbŃ*“hc–¬§~  n>ľ@±gúzóOűu:3:jôC¶5:ił/J,\$˘U”Í] Ńa˝^70yCil$ęť…łçďz1’íab)5yTެ3©©ęĚ™Ćü9µł7 +#–@€ĎA +e¤:4ÂN¶ /Ą+—†ů‚…˛˝ha>ŢÜ ĺćxĄŃ™=vćŢ—Í@ɵDc+Ű=’lnfzGÓÝ#BiŮAĆYą*h˝q}Ž ŕ`¬Żlôöî--^<×IůBi+×yC#ŇE«Ád/Ń:6µ}Ż”źňÓÉćŞ'”¶ˇF‰äúÝí;ÎÜ÷âî•§«Ëç ąŞj˙?IďýäČu'xţ7Ł‘Ôl[UđHôČL¸„÷ŢŁ +ĺ]—·]Ý]Ý]m‹m؆®éIѤDÍHJ˘üĚHšŃîŽv5ł{»{··qżŢ/Á¨«€Ě—_óů¤yŻ<·u‡ŽÖĎ[H@}Ja.PXŔ‚í`qą4µEszH +W·ĹäÄç¨@x®?[ťŻ,Ąšë#âÔuÜ) ŐšG)ô×J6˝ľWʉb˘™ź˝TY>ĘLíÄÚ›ľÜ<ęĎŁ|䵾ܺńÄJĘFTLÍGşW­ZíŽXŔŠĹĆňôú˝ď :ڰźP;ţĆvrţFfá–Xş¨'#|¨ôěÝϬ ‚%!Ů‹w§÷_ÉLéÜľł ť guđ …sK¨Üż] +ŘĐť„¨ ÄĹ€´r‰‰H{75}µľůRkçeĐ@üĽ0ě*tvřHgĚÎő§¸zÉ©’ťľl(°ÁĹ^%Ľ)3â·ł€ÇĆá •î?:j,ŤúOţŃÂ.,hEdh—˛cęôJŻ ¸°Ůă$¤a3>ćÁA·3aTĘJ™™Xă"řXa´µ¬oůňK™î%PÓúÓáš '&QJĆě‘t¨uI›8bfMHđ`~P0I1-F+fĚkD…qHp‹éhm­8˝¸|Ë#$Šťőx㢅 BľŚ”źăSS¨R‰T×ŇÝ15 (“ +ü‚”ěΧ&@ÍLD1P”ÄŘ @ zˇü‚ż°˘”VĹ̬‹ŤaRF­.á’ SČ`…‹6ŇÍ•Ĺűë×^n®\‡ĄTľľpůî›ě$ ,µşąpřúáă/Šk/‘±i˛(— +–Fű÷Ť V<Z¤ÖíúĎĹ&tnńĚ{ĚĆŘ Đť™ŰŮi‚ +Ş‚RĎ4÷NXµćdU îuzÓo„V´ş4ř,›±“f<šĽ +Ú(Ą6Çú3!łTRÓůöh‹v"ŚHyXĘőźŤO1Éžż<_ś»ĽyďÝÜôĄ3: ´>ŃŁÔ¶KH‡ş #Fűą\ |éo]0híůrkL´ÇF'G,Ŕ㋚Pź•LmźlÝ}{rç~iáOĎé±Đy}*ý{… +‹5mD„ŹvlD„\°°¨Gü§†lF7Í÷(_ęě á[§Fô8¤ÔÄâş\Z÷W]TĘ‚Ů`ÆĎ ĆŃ ăž :Lç_éśČĘâä:`ď1'§é/áÇä "ÖŐŁ2ć/‘şSL9ů4©v<ˇ6*—]dc#02!ŁŔPľ^ýéŞúŽńzSĄĄ`nňÔéĽŇAîŻÄš[©ŢĄpmÉĚí\}ÖXĽ˘Ç|ţü\sőĹĘŇÝxű Ń?ٍů˙gW€•#yv ˛x”XyÉ ‹ß=3ňíÓŁ:0R‰IL{u ˇžÓQ:$äd3Zô…súqŻsút.Đ(;ŃőŘWC•e„R#ŮIÍě‚\ZăŇ‹TtR.Ż!RÎŕęă"`W—ąbĽŁµłZ;gty¶ś˘ÁÁ.ýî°í…a;0VQmôg\µĐ W¤ŠČyJ­±‘Šś¨ešë@Ć1o˛:µş|#ŃÝdc5HÚŐŚ÷g'ă‚eĐŰ(`î´:,ď%ÚWĘó÷lýÉźAyIŃ&hšŁ ŁÔźD•2P‰|w=Ű\uS§Ç-Ͷ×îÎ_yeéęł';»”RŢ?xxăá;?k!&ŽřkJ~%;qĄľpŰA§ż;â<j“ä“lxed÷¨‘° \ H71&Ňä…†Şn. ´‘”˛‘ň|iĺňĺ ݬgÚ—ĂůĄúÜ•F˙ณůkŹ?dăÝó:܆°ľNÂŢ"Č;€úN"Ň€„ĆNt”łsâbazĺčYgí⯑ÖÚĄ.*l€%.Ňäć@ V0Ą9`$F-8ÂŞ&DęĂüdDüÁŇJrr7PZBĽ;®řS­q­±Ó ´f_ďî>+.ßKN]qyó§†]NL]>|ŐíMžsY= +ŽBP¤ZŮV«»gÇÜg Z+ćîźoqŽŘŮQ"Ü%ąř, SđŤ#lEĹ!Cş +q‹9!důüE‡vQjĽ8ŹQ ęĹřr”ż¨ŘÉ%žłź4ś±Ľ0lĐ{@Ö÷Wtđ&· ,Ä:KY&R—óÓJq.ÖŢć““¨”— Ĺ+.Vvł@o„”żĆ…ëR|ĘŚ NeÂv" ­ńabćŇ ¬ž&dć_ĐB نô/&şĹa3­sIT ĺç8µęŔe7! ‘<™2‘žŢ)Í_‰U—c…ůŢĹ‘ňŚ‹‹ú’áÚ°9;¬¬3ńY+¤IĄý%Ü—±ăŔ -T?ʦ€Ü!BŢŮ÷ ĺŤéŰ:,ŠŃŽś^ÖvëµĆ +Sk·…ô¨ăÖôÍĂ—–âÝxcíĽ‘Ôa„·„ËĄQ}JcAcs°”b]4ĂśŻAlTçä €ô<’đRśëěŮ1@" ŘlgŇF—¨1S@˙ĎŚÚ5ffŐqŮż:źâd¸ÎĆÚ¨RňĘŮî6ę9˶VSťMđŽ]Čč±€•Ĺ›śU +k;aś 7|©1 `c™ 6Ćň©·ĆLćk‹ŤŢFš8˘Gdb"Â>Ą±3Ă@¦¬ÜEĐ9$>ҕ읭ń`@@H蜌ŤĎ uóY"T'_j"R]öĺ§äÂśÚÜr d´E„JąÖVoý!iŚÚ9­K¶`źĆj‚$Đő.4ý!>d&56Ć)f—×ĺQ¤H1ß]bőTčŢÍPe>\]ň—ĐPËÁ&Ąpyfů¨ł|ĎN©&Tçb 6A(eDLSJ˙^kJJGóS.2Đ?©ŽúoĹ#î™Ó8x°+9jĆAŽÎ;dÄú3á{Ŕy*TJ×—ž˝óŁ÷ţö*ó—pNÎMKąŮÜä~˘ľZél·göą`–ćŮP…TXµqą1›xv:=ÜżBBKkc†ôř™Çé!Ë5Ż jŁŘÝi- ŰI*[©‰ áJ¨´.ݱjU©ł–¨,aźÎÉ:Aő&#ŕÄ<’ťç§.Ś:Ç!ŕ.aő(ĂÔy+*aBJŚ6Ś.ÁŽ`` +JAJ÷ţ=uyL.ăbŞŘ^«Lnw!Ť8‰ ÁÁÚ/@_ę“ „ hlvÔç¤Â¸R ŁM.ŃźăÄe5UÝ:ĽpÝ#×Ôňn¤˛#FÚÁÔ¤”čşřôy­‡öeâůi€¸§G¬c6ÁŠ'ÉŔdséQ}ĺ¬_ĐyH)#† +ý­óşoŹÚ̬΀ج/9é`#RŃąąSFđş ‡_F)-é#‚5ąxŃ›]@|ů`˙É覞ô1ńz ŕnďŇÔÖŁµëoíÜůŢěŢSÔ—ÂĽ)OZ±ČŁAŁçěmpÜĄwňĂf≇­ô…6:YЕ섏¦˛ť‹/żT^Ř7’šci%ŢÜ÷—ű÷ŮĆŰŕŰűI'ŘBŹ –ç-FMÖ·łť}*ܱ°ŹsT†xPiý#N Ľ4ŕ%FPŇh/%«ËŔŮa.©d¦ý©iJţ¦ ŘČ ăÎż9­Ő[iZ;öÂţÂ8Ü?oŹĘ€356Zgçúg‡lô9­Ó‚ů>8!VYÔ*ĄA +SÎź×<çGě&orň<ÜDhPëÜăfđ Á1+úČy=p‚ňĆIAĄ¤*$¤DgďÖ›ł['Ű\t‚”Ë §‡‹+(wb"ĘĆĚ€q31<„·‹olŇĹÄ5&ŚôF$µçŻÎę€8€6§wZxHŹ ›1]żT +ç5ö +@Ĺ‚xŃ€ä‚}w˛1T*€ÔSk«śšźŰąÓ\ľž¬Ż'węË׋sW”‚ǗVó=&TĐ9i»G·Ó wŚ`7ÄĹ4®K76Ě`Oµ.“›C„d¨˛8ł÷pĺĆůÉÝăWNŢRN.ń7—"üU_j.Ţľš›ż+df01™inFęk|Ľ ´ĹÚźíV2˘a><á¤â߲|wĐrVďqIUxGČkű+˘ +!.-ş9Ő‚ŠÁLwiçöý×>^ľü P]úć2hˇ·~Ż˝v› +¬¤,Ä»ĹÉÝDuÉ­«ą勍[P7†ů”G­ŔĹq›`€«'č˘bฟ4i!ť•¤ä<ŻvoÉŦ¤Hebé’?Ő„„°/;Q]ą9±ý(a´{HFÚ:—7šî­]}fc&DďdAC´áa;3ŃvXa}Ůfo»wńć ćSçu 0ÜtŚOô@JĐÔĄąÉ‹ÇŔ—­  )7ąS„pćcĂŘC÷uÜFŚ[IŁSŃ# ™!Ń +{ĎŹ-0ç˘:; "-VšjŻUą"“ÍMP©< |,ßč¬SÔ‚`¦Ç-ŚĹÂ5„O\w_sZżąaĆŇżFvaŠÖŚŽčá1B‡<|ô;gÇż}fôoNŹžĐęaäeĄ ؤtuÎźhŤ›PFJ/*eIµ!¦§ĺâr¦w5ÝŢś\ýÁ—˙8·s8#°ˇ`qNĘNKĺâÓnoÚ‹™X¸f!BçFŚc&­ł:€(Rô}ĄbROvRí‹…Ţv˘2{ĺÖ“˝;Żňń:ěË +ýąĄTkż˝ö¨2ł4}…‹¶‰Îâöm"С¬… Űúó‰ĺXµC[F4 qp.ŕŕXpČávxOkŃţŃŻ˘©î…t‡rIJ®Pţ&®Ô ýE=pFɧ/IńƸŮÂiT‡č,„ OS°Ŕ2ƧuČ_č¶ŹY"íĽńCtÔźh_=ysÜA9Y•2d¤!ćf‚•µ431»u˙µOóÝ  Ă™övnęPÎÍ +‰)T©iűÁČÁâ­Gźâˇň·ÎťÔIŇ{Ƭ4(ě8-W§WďÓá(_°’÷řłŢT3Xěe{ë±ć˘[ŚÉŮÉhc“ +Ő˝ŔF=TĘqjŤTĘR¬›Ş/SÁ„’©ÍŃĂ~3ć·’AŤK±±Ą‚ q°‰!;JăŇ8ˇ2‘6âÍŢôĚĘŤbwťUËľětĽ˝›źąÚY˝»|éqyńŠ”›jĚî˝öýŻ™XŰD„ű˝ţ,îd?´6”ťŤÔZ đŽöiŚä›'×@Żd”ČI©vmĺxb㤷ńâěöąÝű•öLúm¨‚°1;*™Üý5›ÜLŇjőE[QđEjyÜ䱹}nOPg&ś¨ Ę—ŃF ë „ËH‰Y`=nJ9ŻCĎ » v^kÜLŠ ·ą EjBĘ㤀ó•ÂtuáĘĚÎÉĚîĂŇʱŤ ’[™?ÂBU—†ÄŚ“K"bA;(VzëzTüÎŮ1­ ·Ŕ~˝CÔÚi˝“6OĎÖf¶o@ľ¸÷K…6ŢRňÓ©éý@k ”(9˝ľŇ[»aFe;BĹĽ”š©Í\î,^W23$đĺâÄÓçźdş{}F?lBő°hĆU99™iíň±I"MŻßâ­SÇ 7áa¦śHÉö’•Ů©ĺĂĆâe!Áś/Ýă52”O4–÷®Ţ|V +ˇŇ˘Z_‡Ľy r€î‡Ť +"-\XP‹ D<3ćDŔqŚvżYh5f„ Ô…ţ:ćâéqëpR!!Ů“K#Ť­hcŰJ¨jŞ{ňě“ĺ+Ď@ć˘U)?%f{|Ľę¶SL°Č(Ą\çŔă- ~Ăíz; 4áôÓIĆQW»—.öOŽůiµI„›:I…[áĘZwë‘h6gv÷o=Ďu·ônÉ"ÓîŻQEF`¦˝ĎěfAăÓ»ąq`p6öĽszMDDHĚ$jT«:ą9±uońč•…Ł—§÷đ‰Ž•=ŢTĽv17ą±&Xtq)Đ‹ťdXcaĆĚŚÎĆé,”öĆs3B°ňí3ÚŤÓää 6ŇhcŚnyĚ.˘Bfjýčţ˙ÇiĂ€śL‡[b˘gÁ#ß°ë\¬—,„ *Rč^_»›™ą†G'đPEĘÍÄZý)‘ď}s/Đ| °ßĘ„‡lýů{ővÎě4&ü…ţňU¶a“ÇŠ+2 E}7G«%&^qŠaaş˛|i¬Çj3ÝťdsŤ ĺ?Űú°äq)ďbb'ú'Ňĺtˇ±¸}ô©ż0hrQađé/îcň„,DÔÉFą)Ř›<;î™®e©ĺŃ j"ßž]=(öV­¤Ö.6×^śÝ6˝ő :XśŮ÷e&ńĆÓ÷ţîňÓOµ¨ßNŞ©önkĺ$^ŰŹ×öřŘ„•€ŤuRÎŽÚŘÓcŘ™qlÄ*ŐÍçŮéťăg‡'o:H˙¨Őyd+#‚•Ts-ÓŢŹw.;Ľ9 –çA­¶łŃţăölÂäQĚX ×»Ü_ÎĎÖ ×Íg\TÔ‚( Ă‚ $ÝMůĂů Đ»Ľd°m¬ç&/M®ß®/ő/\ʉĂë/}sÍĄQďń1_—+v2Şsűpľ Ĩ&TëćĄĆĘă/GűÓň<Š”¦ö_{çóîň•ÖÚ­îŢăĚÂÍôěőÖĆéͻ3›wbő‹‰Ęüç_ýţöÓŹÂů‹L n†d úxST@Ý8=Qţ˘ÎŽÚĎ ™ż}Z{vČDŇB&čH— +V#Ĺy&XBĺ<iáˇé°Éi$\°0 2‚VË‘Ćj~ţ¨±v§ľ~RZąjí2‰‰`Ş·~đxnç>"gQąéßU˛JFçđŔdyw#~nĚ5ŢżR@Đ1;mňřmLć™`qÖ_śJÔç¦wîMďž\±ČŻPˇĘs0n6¤Fc'˛‘z¨0ŻÎ˙ňŃÂ…ăőĺěÄvş˝îĎ͆+Káň"®âµĺÝ[ť•KVÂô-R]ęOemyüŐţJŁ&Źń^Ü˝+ÎŽŮyĐÂ,XÔF¦Ŕ ¶šźÚ;~VžÜZ„i!;«T.f޶nľ}őék]|&_ť»¸ó&@ŚEJó3·*‹÷ă­#!>Ȇú¶&Ş«gµčč°VÚFĹúŤµ¸ďě;éXľľTímßtłqŹż„«jq4ŽdgWIO ŚäzL 4`$ĎŹ#}+r´Úc“FXŇXI:XŠ·ú=á“°Dĺ´•ůP)^™§ýŮŇěáâѫɉÝPiždá˘@g–_:yţEkńČÍ&ůȤGĚܢŃAŽč 1čÜ{PGz㓣VâŻNŹťÓ¸F ÎĘZĐę+ŮȨĹŕđiŔ»˝gK7Ţ),»ŮXŞąŢŰ8ŮşůVcö`çÖëő•kĘlqń(1sUެůŇł˝•Ű[ן×®k“S±Ćz¸ĽBÇgltrČŕyaČ|VătSa'Đ» +Q.&âQňD (ĺ§ýů©ůí;[·_— ‘ĆBnć ?=Qe5Ůľ\š˝­V×,„ßFô/+pbŁ->9ME§¸ä<lşŮ”ŮŁh”›‹»˝90,.ëbŔ Ąµ@ź™Pr,ž@Ĺ”éĺ§.WŻŠńO*™bo ¬›ű‹óŤ•۫מOď?ń—ąxÍÉ*¨¶Ż2ˇ¬ťQ°@ ‘ +`(Î5V/ô™•]\šŤvĄ‹©‰ĂXsÇĂE/?Ů>z(Ľő©.ßŮĽýŢŇŤwĄŇŞ ąĺő÷~8łz4ćĎŤÁZ—Ź‹MËąÔ[<Ż…-°·ĐŮÖ׍¸‘íD(K™YojŠ”Rű·^ąöđ})޶b~˛*ľ­¬ôÖoíÜy§8sŐ#•!Ă:fÔö7gÇOZ ‚Ź‚yĐ©ß0›Ý|(Ő·°CZDcflD´żä¨KöđŔu1ÁDńćFŞłŹČ.XČOěf.U×Nn<ů^vb]ĚL\ĽúÚţď÷ö^ýâÖł5/Ţc#ÍD~n~çˇ/Őu˛Dˇä".Dçjm”Ă#ŁŐ2 _Jďb@M %µ±źŘm¬Ü¬,]嵉գÂÜa¨±l¬ ™Y<\ďßŐk€Î%d{F:čôĄ¬BŚR۶J­GuY,\—ňónoĆ*{ H*ăţ +â+ bĆŘP.qŞ“ ¨••ÖúćĆÂÜőTw7\ő­¬$S»÷|ą)%?ÓظjnÓ‰.­V±N._±ľq*.ó±.ćÍ +‘† éťĚŞľhŇwlçÇ #ěĹĄT¬şĘEZ&ÄŻµ2r¬aÇĄqjp‘Ŕä÷ďĽqpűy{冚źáÂeŁ‹vb^Чú+ĐéŃqóńDu9Q^¤'4Vâô°UcĄlX`››Ass*LůSĄJ_ĐÚůPµqńxęŕĄĘÂa ý“běîł·›ł{cnP`)TĚZ°đ¸¸§h‚7HUçąľ[tfQ×iµEGÚ¨TTbŐž_ľóÓn&Q™»•™Ľ˘V–üé `v2¦±PFÍ·w@Ö\ĐÂNŕ)rŐ#f`ZµaÁ†ě: ^i-żüÎO†µđ™!›ĆL;¨«¶•Ôl ŃÁmzťRҦţô\5<2é"ĽÉĆR¶·›źÚÍt7‚Ĺi!ZM7/Nlßí®ĺ{ë x*ąi*҂Ĵ­•'·ŘPą+‹ŻĎó(¬„5y,°~ĆĹÄ×Zq‹x“ťúňńňő·&·ď—f÷'ç·~ňŐoď˝Îö'żš‰uöĄ‹ŃĆVgýdíĆÍ‹·˛ťŤ«Ź> z<äÍÍÇ:{ÉÉkÓ—Ţ>|˝rńvľµńÁż{ňÁW&"<ć’FťŢ1ČgĺRt¬Č/eę+—Ž_šÚľť›=,/]ËÍ« ĄůKŤĹŁ•+Oö^|tĂtsu÷î;W4éqaöŞś›Á”ţ˝ťd°ĄGŤť˛a ˇ‚ŞHú«|´é‘rX j@‚„\˛`ľQŘŚ }s°3"^ _Ő™6Rf™Ú¬ZšçÓT…<ĘĄěiŕ›U¤AHXQ ü‰Î)ô°20›p`Ađ&ĚFAWB„8oNm*4{ ď˘f„rP^&‘’­Ňô~sů§VÝŘČţ3ßÜq‡]ĽŻâm;4¸€¦±z—OgçĆ­¤âŤ?Ń\k®\ĎOíKŮY—łł‚ż Ä[.J%¤¬›ŽŁ\V×Q>a€Ew˙ŃlÔDZ éě°óĚë ćQ#áÄ7.cb0˙©sF˝Ť5aß4źŃ8Í„ĆFk-áK¸é › ů sâ2)#‡KůŢN¬µĺMMŇţśŻ«ĺ\V=˘Ě©y*•–#őMŕzzH1ĚŞ´ż8 CF ° Ŕ‚!&Şw° ĆĆŔA;p3a*Xół©ÖFcţpjy÷řQkq?ŰÝś»ô´»ůhĺęë3Ű/&ëËb¤$ĹéęÜÚĺűB˛Łäf+ ×&ÖoÔ–}é-E˛ť+w^ŰľőŠ… {S3llBÉ/MďżŇŰ%V]nN®}ňĹĎ÷O^ő¦;ŃÚŔíňÂÁî˝7_ůţ/Ţýń?˝ôáW—_zç{wçŐďËĹyą0/¤gŐęf}éîʵw;›OQąLůŇe0ř™)=,é Ż‹‹ÚŮ8—ž+ĚŢ”˛3nV-v–)9Ç©Mof’Ž5L’ÁZnbńň«¸?%¨y1VĂ‚ŐěÄaqî–7»â`˛€üąxŹR[7Ď*)'Ą‚Ţj‚ß,Îâ±2¨‰×Ö9oôȰ/W]Ľ•žÜcăm:Ň ‚ Öź…ĆFJ&Ř.% ž äąH—ł 5ŕżÖŽc•yPÉ@ĹęQt6Ú +ş‰żbE$pčŮpŮ„ŚěMqÉ^¤¶C†šo†â¤‡Ř(®čťÂ@¸¸©ăr X*ŔH3Şśq(uSŞą°cŤ™E¸g Gřç ż CÍ”ń;čHĹ1áM4âŤ; Ç‹ˇ\—“rŞ%&'%yăÝp~.XÁĽaZVąHâÂ|¬-ffÎÁÄś?Ţ ¤&5Ŕý¬“-¨s°Ć§‡-@"žáË;‰ h"’Ëu6ç€ůÜO¶—q%.%ŞŤĹ«ÁüD´8Ęu1 Ôç0Ş +ášoÂ|L-Í&›+t¨€Jy:ťĘ†sR´-ö¤TS‹Ń겔ťň&'Şł‡ůÎZ8QŞ5zÇ'Ď [‚Z¨ĎîlÝ~őđŃ[מ~ďĘăw/=|céęýöâÖŃÝÇkW×g.­_˝˛|§¶r2±~Rźż­]tsŃ@¬výÉÇőĄŁs:dČŚŁľ4­6µťLďŠÇ—˘}ń»ŹßB%,›)Ő—›‰6·&6Í>/ŻÜłľwűŢłł[.!EEš\†•zˇwuáĘ›©ÉK*tpü$ÓZuđ@«Çś>‡ĹB¶s :®V»›­•› P­5"T¶ŃQÜ_¤#µx{ő ˇó€' 9Ž…ŤôCB’Ź5Ęó×.=ýaaú¤ą7Ńp8néOap +Q¬`šk¸ś#}É@şv'ٽ̥faoŢN§®€â̆ŰFHĘ %Űţ\Źđ—@„h]Ü @ča§Ç›sŇQŤ•ĆŕđĽĐ{FĚä·Q×ég˙9˝çĚ8bÄC\ĽăÍÎé .ÖbÔ†R%óá1;á ýś äçĂŐő`eŤ Wh%J×ůXĹ„đľx;ŃŮŹ6¶“í=LĘ›Á^ŘHŤ•‚E%RÖŰÉ c¶ó۰Á\ĺ20“ÄůT¶µćć#¤śö%±Ö*—ěÁ<“Dk#:Ş&—CĄ‹ˇĘFÎ+2 šk˘r”Y+ň)!ZW@ˇ–@ÖëśěɲŞŃÍj¤ @¤"ř‘X!–mQRL ¤rőéŇÔr¶=.t¸hIH7‚ĺ™Tkľľ´d¨ÖŰŘĽýĽ~ńڤ,x8Ő‰vŚÄËsDZÚpUo´JĎH‰.nةōq^yqóĐE…=rŐ—YH¶v&¶Ěě=l­Ţ’3SŚ7zóîÓŻ~űfvîÂr!X]W;—‹kŹ÷în÷ĹtsAŠfľţáÜΉÖí4’l|:TßÎO]Ľön¨8Ś7n>xg÷Ţ;ŁNa– 1ý•îÚÉúíwWď}čË/dj‹w^˙a˘ľb„ĽFT‚śjďOď?Ý{ńŁĘü±Úľöj¤¸pzÔynÔ9jadÜ#ć˘Ĺ…ćŇ ZĘ=xëÓźáľ,¬Ô¸ô<›3‹ÓŻ-hî;°Đĺ;ožĽ©¤;`Ě/PYFČç˘â„żq^G鱕Ťăk/™ ńŰçtß>«ýëô§†śF0Ď‚ÍěWč®JQëśžk§ű‹abH–›ô{#E«ÇkĹ$Źó‰n°ĽRÜí®ß3=!G łľtĎ÷łw +#Jďä1.ĚJ «›Ň[ Śöé­Č¸Ťpp1§2őńK;ą¤âřP1XNOLíżÔÚĽ—›?VŠ«cʆđ|¸d(KŞŔôG­¬ŮíĂ˝Yµ¸€xłv"LuÁ&™ÁčńŹÚy“G1!>`"śśťÝ áâ9µ¶vőęý·­¤b€9;ˇXaź@/^’ÖâŃŔ{:+e†D‹G1@^ť“3Á".$ŔĆĂ\ČMJńňl¤<ďĎÎH©žíâľśS$µâ‹Ö@\9É’š ĺW!±BËčG´bĹ)FN Ď [Ǭ4ĤPˇŕ¤â$\ĚźžÄĽ*v"Ş®őŰH€1(Ś6Ź4<ć4ŰIpg4 u qPQŕqpáŢQťÓëχ]§G±C˘•!J›dv3€?ĺDeĚ‚‚*Jú€»…qN…pźĹ‰™¬°°oşd0Y­v—÷A´ +ł«G·tG ¨ŃÉž0Ťh!"l´ /Lr¸y•´ĂBirS2f'…˛7©şÉ¨ ‡ÇŁćq cňиcH붸}n, G +R8ÇůR.OČŕßśŐť˛ž±÷EÇĚĘčÂĹűÔ  ÷fŘPĹ &ÝfCĺ1 fp:ש c&ěŔ˝f„Ăą@ş<ζ…pÁ‰KF'¦19őv +aA/ĺS“­Tgă‚Ň9†Ć,ĂăĄJô…’§Č±,&Çôn†#ĹÚt<Ó?8Ŕ0%ë^µLÜF† ¶¸9Ć—y'îÓZP 39Ič€n~ĚD8QEĺ2ĄÉx©‹R^o(rŮŕŔ:ä Öa-l…ú»vvŘ0ćŕ-x“J\¸éŤuµlYQŽ7gwé` 8:Xń'»ńň‚/Ö±b~ťťDه÷ď¬@ňíçDyŃZµF‡ĺlnÚě˘A€peŇ—‘`‚Đ8řpÔLŞI©e6Ô°fp˛e°b‹ÉŮ?㼞f1!:jDNÇ îÎÔĆňöm ڛٷ9YF:Áóz+>¨±9="Ć…ŔP€úě„YŘĂz"D«ÖęŤN7ě!x-„7ĺ’ýëÔf0tŚÁFž:3>®GÇ ČаőüăŔuĚ’WÄč0çKnQů•í(3zL6Tł‹·ş8”8 qTç–#uĽk‡}4ą¸a-ôť3úQ#a}`{^8?!DőVBgÁF Č…Q;N"’\ ÂüfŤłQĆ_=7f˙îÝßś;=dŮÁűSF’ýęęŢ5Żš×Xq‹s +Â'<ľ‚›MhpřÂë›7ľ÷÷:Dü«SCg‡ 'E A‰Ë‘4#ř×vŻőVŻavPëÔŮ)­•ÔÚHRp^aĽ@$-ĚPľ,„ÝT?UqNq!Nńś/nC‹Ëcu`áS˘„;ŽL&ЦäHĚŠ1Z¦uŔĆřҬżi†d˝K¸ u€]¶őoŕO ĽjŇŠ*6 ”|& +ł›äµ˛h#ü7»XĐ Ŕ˙eĄ¤Ěi,č9ŤuĚŤčˇ#6X3Ă`KB±´ŞFÁľé-î1ęą/VŹVľ9Ó \$ÓXö§: b€2+(SnBAą(«!2 †=ŻER ‹ÓJ:ĹČ&BÁłÖ™ÁXjm˙ŞŰĂ [FÇgÎë/ šA…Á™0h÷ ¨ŚÁ,vŹŮâ3ŚŤV§,Iéd4›I çW:`\†t …™Çě#ăn',šíě…aó©3šS/hôfŠňf >auĐ%űĂé`$'řł ¤ínÄ`­­ëÔ9íąĂčÍ`ö\Ô‰ă:çĆ6f@Ś6"Â."j°sç‡ÍçtŚ/ “ţ #ć­[g!Q:čőgQÜo°ĐCŁĹÎôłcÄ6b‡ OVkrc‹S8Ëă©D¨ÔŞŁ›\X™q2b‚Í€P2)ĘH(šŠF“ęěěäŤ;/ć3ZŰŔ¸e@cÄHžaYEńń‚`wş$IŚFC4‹Lă«ÇÝŞęMgÂks«[+ŤĄÉD9!˝ś,;”áţjżzd:'Ęľ€Äˢ/Á Żä@ôěÓ9ÁWÄłĄtŁËúcjşŽ°~§‡u˘śŃŽźµ~űĽŢŕÝt|pÜ †No†xźš«t[ÓsśWDc„ś$řAîä0oÄÍ“ĺI>”eYÜ×Z1«›†p/Lđ ŻŕlŔ‰đˇŕbç ëe)"ńËţĂ ^źÇ`‡IŞV““3m‚U‘°C¬ÍAşÂd«‹7;X,"¸ßáfĚ“Őb°XL˘(–Ň‘‰R|ąW<Üęîmôî?¸ą´2 řaŇkXĐű0"02îúÖ©‘3F˝™°8h˝ŢévF)>YňůÁëpy, łN“ +“ăÁyšU}ţśŮEť1ž:3rúśvpÔ6ÔźăČ©Ńá§§.XĎŰÇŤÁBLn‹ +Ĺ3.„vA¤č‹Úě€ůq!ůظ :3¨3@0Ě9ě¨ĹdŔ1›â…óIľSŹö¦Ęąr4–’+ĄČöRăč`qa©U(„óŮH0ŕěÜéó͸Énw‹ ëçÎcŽHČL+•+Ş^?+(‚7¤8:s9yŞ©žÜXżwg÷řęâÍëÓ…ÔŕipÜfw“ <ńĽŕăI™Enä3ťd­ GýH-+-O¦OŽ×ŔëÓçGżűű7ľţĹ'oĽuon6RZ`.Ö_<ע@,*ĂÍz˛^M$. “,Ż·Ř-V›O +ĹlµSť^żýřőT˝mF`­đę͆[0źľ ±ź9sE 5Ę岉dÄé¶Ůťýa¤8o±Ý9¸Tnµ}áđĚĘ|8•´!¸Ń…QRÔ#F¤X a$rŃ$ ^Q5šNçC%Šge¦°ąÚkV’Ĺ„´ÔMß:ZypkóůăËŹîî®w»5v;!›1Y1‚šŚ‚ńp´'ĺjy%矨«[3ń›ĄgÇóď>Ýy˙ńÎőůo~ţý§w·×V¦ĘĺĽŔ‹N7fs‚rG˘ŚJ0!7MJú˝…¸?äZĹđt;Ő©Ą¦›W/­ímĎܸ˛üřŢţý;×w7wËĹr8ć8Ęn· ŤšMvjTŹś¶iôžłçugĎkG4f‹˛™m<…Ç‚RĄ”ńKĽČŕŮt<“I…CQ5śtÁÔé Z°F ę¶[9Ź] ů´1şłS?ÚlÜűËď?üé—˙ň«g?ýřÚÖlB˘ťv‹M§wŔ(„€ĚAĆ:‘ˇn\L˙ŕÍŻřč“7ŻĽv{⣗ć˙ţËüéłź}tí§ďîýĺ7/˙éË[oŢ®ÝÜ*®LĺcŞŹÇ˝JÜHÓ4Ü•:[ŕŻ.¦ž\›~q·r˛Wúüí+żýęů_ţôăß˙ňýß|qň?ţřö˙ű˙鏿úđdżţÉË›żüâá«'‘ ¤3¸4ťÄiźÝfqŰŚ¨C/`ŻgĽ›ˇćÓű‹ůµ‰đîlěŢĄîgďżřÖŁť·ž^{üⱎXaĆŤ †Ądş• –+ěőůŕ[7:?xíŇgŻüüŁ»˙ńgĎ˙źżüü÷żxŚŔ˙îţ_~÷Á‡Ż-őr‘ H3‚ŚQî%ˇBźĘxvÚÜŐŮŕí̧O/ţü“»_Ľ}ůă—7ľz˙ňúęé˙ř§ţíwo˙îGw˙ń‹ăß|~óáŃ\&âeX@Ţětžđ)iżÔK2VĂŻfß8*ödáľőż˙ţŤ?}ýňOŢ»ô»ĎŻýůçŹţôĺÉOßŮţŮ»›żúřŕGol]^ÍçÓQ3Č#'¸=3íŇ|3>[Q.ĎGŢ;™úűw÷>y˛řŃ“•?üô•_q˙Ď÷ţîőÍ˙ëź?úß˙ç×ţÍřâÖűý?|űp±A ăŕ¨Ć`u»Ý„Ä0팷t–ËA—»˝żą{p©üö…/ŢÜţřŮňĎ?ąů_˙ůłüÉÓ?~őňż˙áăź~˙Ţú|Ą=1Í·í G3ŞŻŁ—K$řó·ŹŰżüđĘ?|~ó‡Żo~úęĆO?:ţ·ß˝ó«Ďnń|ó돮ţ—_żţ»O®}rŻţöőÂFŰ— +q4ĹŽjĚgNŹ: † mmĹ í¦xe>z˛_y~{îçßż÷ç_?˙Ź?{ňĎ_ľôĎ_=ţúĂ«_ż·űăWćź•ö§Őňz<°›ćý:çkŐĆL+ÓJ±IlżË˝qłóůk[_ľř“÷ö~őůŤţŮ“ůůËżţěćŻßßţ—Ýř/żxřűňRďŐK©{Űĺ\ÂouR‰1>‹r!Ę«d5ŠoMn,‡NÖŁĎ‹ź<[ůýŹO~ýŮő_~|ô?˙Óç˙ó?˙řÓ—×?}ýňÝëk8F9 :Ü‹'"ś«˘bÓ9j·«Üß®|üxő‹ç_˝sůßóÎ˙ţożüÓWOţţíý7ď./MĺC2Ťc¸ŰĂ JĘçOÉrTḞĚzwz™ë«Ĺ{›™˝˛öŹ?|ńŹ?}ç݇«ďŢíýđ啟˝ůŁg7wjë3Ąbľč ¦) ¸XżŁ„“™H$&âő(ąŢŤnMĆgcŻ5~ňÖţŻ>;ůâÍĂO_Ţ|űŢĘăÎŁíęµĺě\3PHô ĚN’sJ¸J“|"$Çd*)ὼďćzůăG‹_ľµýŰĎŹ˙áG÷˙ř“'ţŐŰżřřĆ/?Ř˙Ë׏˙ý—/˙ö{ŰźÝ/źleş9ŃŮ VX +cɶ †}4V%žTťW§|Źö‹O/×>x°ô_˙éťżüî­?|ůŕ_őęż˙áĂź˙ö‡Oמß[j'}JcC0Čä"Ç…Ľä|=Öaqh˝ĆŢ\N?>ěžě6o\,ĽycâןÜüůG·?yĽöŢť™§‡Ý˝^r2'ůY„"y—É ŤÚ=IA6?a­†‰…zt­—żŘN_š/ŢÝ®<ą<ńěÚÜ“ŁąÍVh«Řh©“Eë€čX’dóÓŢ)Ä9-z#™D2’’ +;[ŽmMćvş‘§‡ÍŹ_ZřÍÇ—ţü‹§?}˙ę÷Nf?¸3ńh-vg.tr17›÷J Q 8ŢH˘TťŮă‚ĚeSGNÁćŠŢÍ&w{%úp;÷îťŢż|ôżţň?˙úŐß}ńđ{ŹöwgJŤ\@Ż ‘ă´Ű§ÍGa1…Ë…ŮFŇ;[mĎd÷çs·6Şďżxńç»ĎŽgŹV+-Pž(Ř`6Žém&7Jv2Ő•`˘Íq~ž +±ŕĆüäÁć\=AîL_Üm˝űäúŃć䥅"řŰ•N¬šö‡N‘d˛ +†ą$)e_ZMÖ%L#°Ź"’A)ła~¦Ýž.^Zjě-TV'˛í|˘•IÔjXáq5fpRZ;çać3›6łu:%Š®gŇ íÂÎTâúRâí;Ó_<ßůŢĄźĽsô“·®ţđŮĆgŹ–żwwţů•ćÁtŘĎą §Ťd% ěCčD†ô6 +r“éHĽśŞŚ˝†Wţ˝Iőę\ěł'k˙öüçß˝űő'·?ýňĂ«3—.–{Ťě—8%%E›AŘ aYÎ_Ę–#>6©P9•OJt6 43j#áď&¸Ý^ęÚZw«—Ż„ŚßözyŠEZocF äůQxH ś)F ćt0¬ú•T,šŤĹňŃpLbTŠK\6,*¤[ň¸C‚Ď·€ˇ»PŢŘ"Ů6ČY Ë˙ÇŢ{ýHvĄybď ő°Řťi6ÉĘĘJźá퍸&®÷ކ÷>"#˝ĎĘ,_,_d7Ůdw“Óf·ggvG«´ŇĚBčM/zŃ˙#}—˝Âb WJ ň0Ěş7â~ç|ßĎ\s…hIĐšµŢáÁÍáü¨ďé'=çĂĺಯ˝>ę<Ýk^ô­Ë}Ôq;~Ç’Ó[ńX>‡´ÚĎ“ÎňFîç÷¶7¶RĹ,˘s\E—űľVWńE]:íioŹ+úňčo~yţëç»Ov>ϱ«;ŁsŢ:ř’«`ĎAđ´(H¦Ş™˘¨jšŮďu[5·hu_±u^×%Ĺ0K‚šcŐÍli-ŽeKg¶p9ŘĚ1iLĺä@ ŻĺujÍ^Č»2ß+ÖhZ†'p2ĎIŮ<žEl‘K¸­4µ‘¤®ętŻÜÁCRmHv›l‚5ŁŠâ”‰˘¸ÓéŮbq9ąNÖ jĐpşéuo#¶ťgs\­dLx{¬8C’ł×6â[Éo Lłj™nŐłűMďpVy>x¸(ż8é~qľs:i͛δ´/›+Ţ[‹Ćňáłí+IüÓőôZŠÁečâóÖđŞŢZgĘdŰëYSđëyëűŹ/~řúí×§Çăˇo¨,CˇE*ĺ<ăç/R”ĹĘ^s÷]sţ¦Ú<Dçŕŕň‹·żĆ 1EhF·íF­6hµ'• -ňF.CPm3‚-Ż# &C ĚŽ „ö9­‘NˇĹ<–CČÍ8ľť"@™gPą@Ba”`¤Oä< .Ś\A§$Ôo¦Őâ¨öłĺD<Ëa”Cr®î E{J°Niî¨Ę9FĄ\šGbl‰ÔÚ$›í•ÄĆvŠůWźlüěł­őŠ–4ĂđM«Šă,Ž‘'ŰŞÁaE•D5®¤ńś©:¦VŹÇ‰Í$)‹ňÎ+˝~ Vş/µú8GËčËÁ´Ř çwç:@ő)ăĹ /Ç–“%k3Ďmç™ ˇńVźőpe@¤TAíe 3ŚÇďŚn`Śpk†[Ó,$9ĺ’Fj-KÚ´ŢI•ÂI¶ b­d +jµ–ă .U¨¸ž$R¸–eËŚ5&ő>e@ç4 µG[#ą˛żŤ(:Čó­˘ÜĎń Bź˛YŽ“+±’䇗,#!kŮ/šCT•]ÖĹjž  ´7Q3Fş9ąŁöqµSµ{­¶ŢŹŇiÔzŚŐO’Nž­§ÉZŞTp. +őtÉYK2¨ŇRk‡jő0Můëi6ŠZ„9Ą˝=Ĺ›dqu%‚}˛’Ů“€©˘’g+ ĚĘPn +׋¬·'Ö q•ÚľT?ćjGlőU{÷·J%w‡´ÇNűčúőę‹G ÖA”zĆ·uŐNç^Ţ o¶éíĄŻĄhÉ-™Óúއúń/ýťWh8m¬E;ˇ~*6ÎQcś“ÚĐ˙2ÔQ÷BŞ$H'NX|°g ^(íÚ § Ëq8ĆŰÉr^’0hg¤4ĽńăĘôy0~luĎÝÎŮńłßŇţwFţî›ÁőoćOßü&X|ŃÖö?:ăÇy1|ć”óć”5Aµ.ä']ŮeĽéôřÝŃ‹?0îx)IĆiĎč>,ďĽwĆďk‘ĺ›)¨ˇF¨­ˇ¦Ję"oŤLÉ.pLédŘŞÚ86:gägy?'uHw:Ó´iťfřj +7‡_(Ő]w=' J 3F¸9gĘG¤5Ë`ŠâŹĄň‚6‡ŇĐă}łűĐÜ8ý‡‘ĽĘą;ĽČ8 ř®$SŢ&Üi)EWŚö%®tV’dŽ/—ě[ŮgĘ%{#Ěp!ÔÚa^jC€µ+7ĎIwG¨ź”ĽÝ]á‚}«{µ‘‡´4rlŠ>_®˘Ŕ#L%KRő Ú›i!śą—06­ţuÉšmgąÍ4A4¨;Ŕ˝O—cźůä¤Ň<5GŹgŹż[ĽüŁż÷w1¦ś¤}©şSY<Ť”ľ2Ćí ĺďĂŮŁÇ\u4çJŠAĺ¦ĚYHUTí\l=Ô{×Vď"Ëş9ĆŞŽŻÄň”2[Fç¨qúÁťÜxŁë`ú4Ţä¸đPď^ęá(h˝ kôLh]‹őÓňüĄŇ<ŠbZsń¬sňQlś(Ť @<\Řťó“çż%Í®¶vţâĹoţűă÷=Ľţ®¶˙^­€ˇľzţÝŰßţCśtóBÍlťtŽżlź|Ő:yß8ţĺ/żúëťłwÖ'ÔFăčýřúűáĺwÍŁ_v/ľ'ťĹzV%ő^švµö™Ú˝”Úg%/ě`PB–®@eĆx9ŽŻ¤Čĺ“ăš”=ç˝…ěĆ +ĘgkYĐ„PS¸1)(=\ĆpđSÁńó?8ťÓDÉĘ UČ„ SŐ][¤5ÖÚÁä)Ô2Ł·÷O_úc„w%Zť>ß{üýÁóßµߨ­CÎé1ěž~Ś˘JN „ę"Ľl}S^Ľ ć/íáµŕMËă‡!JóŘ™˝´fĎ8(kT=ť>úAiçĄJs˙u0~4:yóđíď揾ÓŰǢ;ZśĽťľˇ­~0¸¸~˙×ďţf÷ŮďfO~¨íż–üöÓ7ż˝~ýű,ç§ dŹůĘ.ä€3y!µ. sôN_|÷wfçâr‡Źäö•Ú\;üxöńď揾·Zgç/7zřuÉéŁk®uEř‡bëÚ˝Şď¤ýku^|ý·ăłŻÂ§…:jŽ1{Jz3\ëUÇO[;/Ž}ź@­.K˝—„’k€´Ł«oBŘ”*îŕ,?µGk»_ýkPb ~üdéuš (wäLž‹·Áî‡ÖéŻË‹wRíčéWşxÚoâ*\`wxS[Ľv×ZclIkÍŻľZ\}ewí÷„ęžŃ:®Ž//_ýţđŃŻ’%[ +vĆç_ΞüVÜ„ĽWöYoçćÍď*˝Ł ®…OĽî>/OÍ#Ą~Bú‘R°ž×xg”cĽŢéÇŁ÷˙nřě÷öÎ+oţÂť>§üŁŤś!8ÓńŃ[ÚdJJuS%— Ř(kš!ű"]˛Y{–e+’|÷{—¶w•ć5S }0ÚEą™çë)Ň)iťpyLMsŞuD0k˝ µq@:Ă,m±F¤”Ń9ńĆל?ÇŘ#gř«ŢŹb Â!µšűoűůÚAQko&WŰ˝˝W‚7˘´fçřířú;č˙Ĺ“ßí<ýcëôty–‚ŢÉ;LI•)ĺćěř‹`üv‡¨µ™ÝśTÇ'v˙ Ş›tĆśÓú'jm±žc)s»d/-¸B}Oď^™˝k»wat˛¬-ąÇ_ţ»Ă7­őšý‡> Je.Ř˝‹÷€EĄ];řXŢýŇżđöľš×EŰEŐoě]˝ţˇ2ąú,ŠĺNčÓw^éý‡zűĚiwg7ř›üú÷˙1F—S\ 7grűzxýýᇿď\}vőęůŻţőß˙oµéM„ôJÁîźţqăč—ó/ţÖźżĚĐ®Ń:Ôš‡?Îî۱Z”ŰŚ=uť^üöřŮ·nďdvúN«Pöqgi®!,`PžőťWRyG„Wă d ‡o§_[˝‡@4¤Ö­Ž®ěö!®¶ůÖĄ=űÂťż0‡ŹCÓ¤›!wp s#ĂF‹ +a Ůúą9zmźFż(ÖZűOv˙Řd9ÍEq7Gîä §{i·O%oÉ‹(gşÝÓßŘĘ©E+)q»`!|Ă<«Ď?°Î¬<¸  H?^Ô㻞S¸Çz»f÷¦ ´@0łţę.IÚ`äˇç)gĆVňJ7ĹUŠR…s±’N;w|cö/őÖč±ĘÁ—¸7Ť“¦Ń;“ZG1Ň*Ş`—&¤=Ü“*FűH?Ď8ÍĹóĆŢK{p)ÖI’UęÚ¶űĺób˝(ŐYoĘ{SŻ{Z]h­Ăm\+)5ٵ‹6ŁWĹ` +^¦<KZ#ÜčŚä‚=Ú›Eq‰u;Ö袱˙j|ő]÷ě뮦0Yvű˝ăסoĄĂ9"(sŇŘ}Ţ:xŢ܉R»B° X˝’¦ˇ +ĚÎŮţă߀ÂŃšÇŔ_°q5Ă‚F”ÚFŽIÓ¶R_T'ťŮĺůłoĽÎaŠ)Kµ3Ąq%UŽŔć€e(c˝~<:}żxř‹ [Îpuµ÷ÄŰű…>|.ÖŽ¤Ć)ŞÁ°ď_S_ýO±UTëW¦/wýU˙äCcţ4ś‹řÝżýO7±c »;á´ęĺÝWVďŞŔ×f/ţţý?_ýöżÄN&[>4zOĘ;oÜŃ#µľŻřÓłÇß^ľůnôłb5ŻőKö\ŞÓŢŞŤˇi7öF§Ż1˝““zYˇĹĂÓV”Ů«LݧW_ĺ9źŇ;‚3ŃÇĐ““÷¸ŇÝF@Ěs’3™ź}EČťűj=-Zkďô†OÁúĺ…ŽYÝűíźţLJ/}oٰ%ăLUÇNçÚë\oRJ]Ş‚K‚^ÍŃ®T™zźôwóÚ°dOťÁ3łűČě]‚á?ăÎ3ʙԢt{¸=Ľú•Pß_ɲ„Ö$Á­=ĽÂ´NžŻ"bµ¤·üÉcÚL©Íckô¨˛ű®{ńÝŃ«Ó8|›«”ŐŐۇ‘‚šĄ|D¨ú‘»> ťQ–wŤÚ„u‡QÂĘ‹Í(áĆJh*pÖ _1Ł~ôäÎ*f_?† 'µVyx=ň›4[Ćä$-©ő ęíŢ©Ö>J‡KďůĽ7β^´ QVOŻítć×Je¶’⤄mÔD¤–đËą8oKţČ]ŚĎßÎ?ÚĂ‹ˇôžPŢ‹˘:@AAŞťóÁé/ćŹ˙ŔÖ.du=#[Ť}Ł}ś ťŐ,·žćb¸‹)C©~.w®"–ˇěîÁ+ŔGˇšeË`uÁŁúěµ?z –0ÍÖŤŢ5íNF’á9a;Ťi•öńé‹:‡_ bŕ lokĚÔE†ŻĄiTíîâEĄ ŘČSĄ}Qž˝\|cŹžĹ©ĘvN1Ę;˝Ĺp!ˇíí€Ych¶ĎZ{Ż­Ö Âx»§o;7?Îä¬ĺ… +ř¬ţů/ĆWߥ6 _5qľqőH^Kv¤¨ç„ďĎĺ`â5xř4™ÄűöčEŠp"n#VĘ5J JÖ7FÜAĺ¶Ń>Ë `žÓáúJŤŹ`ÇÄÚa7ҸNçÎzrm˙χWŰýĐéxôžö¦k ©>"ŐsRť*ĎóJ#<«wíŢ9Z\kô5öľĐşçrëXnY3ľľźk`˙Ąćq …"ÓŢ.WŢ'ĚiNl%*´1»±űçiľ‚ďłµ˘ÔF´Ď‰áŚńRí öe’ráŔÚ{/ËÓg 3¤ĘľŐ9‡|NRmöxgNÇÇVX‡­îIĚp~A + +‚ŻWvÔę|;Ďlf)°™l–k@ŇŞí \n’ś3Ű˝™žĽŕÂŤn ‹zŘŠ÷ć´9ŚeŢęXíCą:ÓëpŘ»iˇEÁ•—kă'r}#Ďg(łŔUb¨E¨ľ|”WzŰ•őůô;pĘK[(Č1X ŽżîĂUĎ–üVA'ŚŃfNŚŁz¬¨!lęBöfVç‚4;nç—Ë9ÖJ3."µ9ÇhťHµCó4iúýÓňä1Ś&ěîÎ&ćä™č"Ţ_ähźŃÚ­ý— \aGĐB©Î÷UT÷ÎŢ ćW”°VŰnďW¦»§o+ł'ŰÜ"°!)uhĄł´YÚHK„10{WŤÝWre7MX)>ĎU­î…TŮű|yÁR /©vĚŢĘÝgrLA+C›¤V+iÍ‚T QČĺän‚k@úQć0‰)v÷Ě<25{7¤3I µĺo!*Ćv«îľiĽ—ë'0Đj㴔ٮOoš{_dy?ÍyÁ~?|ń»ËŰ˝ř†ož&K&Pkô8+ÔŠSt°Km?ýMďđ…ÖÜď‡Â¬'lH$Đ!%kź_ž}Ń<ýJ©ÖÇçZmŽ)-DlBR•Ě‘B°\+ +W;”=aah*»I®˛…©9ÖŻŽ®e¶´•˝·™ŢĚq`Ŕ3\#§tÓB†c=»ş…¶žhoÁ׎ĄÖş 쎨Q°=“K»ł—$”4mEKNAęę­‡Rí†u-/A­i@JëA’Ť˘fNě’ή7xZź˝ň‡7÷cT‘-7fŹ ··ňb´¨ĹpX’ PcTÔşŃ7Ř}^\¤H;Y‚, +˘Ec#+ŇFϨďofč•öçůź‹aČő$l áB?VëŘnť$ «{üÔ¦=~,׏±pfNm=IaŚ­—ÇóILÇäpćŁubeĹ‹"©T¦'/ýö‚Úî&™ +aNôÖ9mNPˇą%6S¬×9©Ď­¦¸íśĽ–äîo“şZăT­gJN4Ç áÓ^m„ň·3"c÷CN1şi:@„*`”ĐĽ "řĘ>W=!‚cÔšÔn’´‚ň\9QÔ1ˇQ2FBýLë?㫇qJßD<¨h@ë­R8߸Ö>oě˝n~ ěi¤¶·íôΫó';×_ď>úĆě_`ć ¶ű¬wńĄÜ9[Éń@ôVç†uA-0ţQŻívߦ)FA®:Ó×ĺů ·k’[ĆÇĄ|c–ÔĆĺÜŁsŐ;ţ˛ąx-ř;)Ú]Ëp„ÖÇáeô9ÁKŤs€>Ŕ,[Ť´4ĺ@nÇPMmśÖößU÷_×?šŁ© ÖF«í´÷_+Ť#rŘ_Ö”/Ŕîáęr¬ë·vŻßüUÚë +6Ó‡EĄŁ·ŻŚŢSŕ™µ4‡puŃß#Ť iŚĹĘ1řô•4woĂ…pÚ4\o§)7SróL™1‡Eąţt=/§pm|üŇéĹ]vĽńS˝}.°y=+}ľQx+1zgyEĹŠŐ=kĽřÍ?Śo~#×DĐlQhÍ©µ]ČL€ĘhQ‘F‚’aËk)&śGíDŠ0řçŰ8$-üʬVEY•Ń+´ŃâÎYO1?_ÉüĺRr+Ĺc\•ŃŰŃ·‘ˇ®-BŠzŚ5aěI–¬¬Ćhśó1ŢÝH`«[ŘzŚÁeŕP>^”Ăą2܅Ҹb5QrJćŞJ†0GŚ»cvZ'|m?‚KŃRŞä |SEµ%TöÔÖ)ĺŚ b9–#9ˇuÖěľ^˙şuňUZl­eŁIVCvÚĽŰŁť>8ÖţŰŁ·S=~‹ůł¬PÜ1ŕI™¤=®/^_ľý÷§Ż˙®qô«íĽ’Á4µ2炝‚ԀܣÝéěůă/´ĆEŽ«$ +‚äŽDNÝpĺ®¶––"¨AşóĘÎkµyZ2»Őů#­}śb|@¶ßŕ‚güŇčť) vkçć[ŕ÷śŇDí Y9@í)éL»Go*“TŞę•Yuç9°¶P=Ąa”Ť!çN*Ă«ŢţT%”¦Ý˝ńi¶O…ň~^hµ­&YH!ŃFŔ€pâęđĄJý¤¤yw4@µŚć kʶsR†ň‹JO¨ťšÇţřŞ4K BĄ˝˙eʞ\µ¨ô·P"J`d!UW"(«·¬úBô†zó¸ ´6ňâFŠâő¦âŽŁáCs–TŢŁÍ1ˇtłt,y+ f%N +ő×’|Ž­ć„&¦…ëŽĺ¸j8ń{QˇÝ:†Ôúá\tx)>‰ŮqDŰČË1ÜďŽŢ lőłu ް•ÎjŮJ,/­ÄČOײѼ’B-D¨-…ós)\1ST‡1‰Ćđ|ßfA"Í!؇Ö€Ď×|ű4R˛7 FQęĆ1-VP1¨Nžě>˙×őĂŻIw¶>ś(ˇ¬I®Őů`&·NŔI‘î40&:EVE(“ĘŚ;b˝1H#0Ś\óŞ‚‘Ëó˘ŕeH3äôîÉâęëŮőoÄÖu‚đ0ľRR›iĘĘ2ľŢ<ˇ aôî#ĆŰO”ĽDAí~I.Ż%±$ˇQć(Eř¨Ô’›ÇP˱NŞőĘř•ëÉ’]2†Ś)÷Ę™˝a ăΙ­`tĹz“(®łĺýĆчÉÍoÂ+’»oHs§Ţ? †çQÜ.Y;ÁôŐÎő·GĎ˙jpůŤŃ»H†U™í^} Îcş]P¶r[đć”ÜÁŘ`+]Ň‚isç%TkQęÄq›Đ†áŤĺC‚)ÂŞojóŚżK:3DlmćĺŤ _R@K<šŔő®7~)ť‹Ý‹ă&dČZŚ( >)ů„čyÝ3>Ř÷”!Ý’Ö‹ő{"ŽY©’»‘ćót@#\é#\ĐV–©ld$ŕ‚amCş–\řRč%(Łq¨7O%˙_ÝOĐJüFN‹•Ľ8éş¨Ś®•`' {ô#|ŕĎíęôQýč=UŮË+íĺÄVÉgi *H­ď*íK80pCŕ%·ó.7„ňŞtĂ5•–ÚşV;O(gëkIüÓŤtŞdPÖt;ŻĹ +.·oF=Ą<•ý1ŕ@Şd•ŚČLëRîŽŢąqG/™ŕúv ¶˛ÔîŐ×ţđ +’ę1Ş’bŞ¨Ň±»ç\ËóopÝŘÝÜyT_“Î8F{ %”`tOg¸–˘â¨AÔ<ß´ŢzF\Ú&–ă”썫㫦n„ÓX¤5îĽďMŰóő´€ +Őýëoz{_$I·(w€7•Ú±Ň8áEx7BŠ‘Ęs«{’bý{q*‚Ű9±Cî“"í¬#™­ńéˇ˛ν——ÚIş’bJó"’—×"lË˝‡ĎńłőÂŇ6ž˘ĘţZâT†´•Úľ3z Ů‹k=„oDŠĆZÄgWGÄ$äŽĐ8Ó‡ŹXđPL9…[ia-ÎĐRÇi¬Ĺ°ź-'?_+˘\ŁČŐ’¸‘"ڵآZ7Ao„¨®6ÜţE}çI}ń´±÷BmJ,Рð‡W0~:8˙uóđ+oţ č„<ç`j5Ă9¬ż[7dp&ÔU&ošó×re?‚JçŇvËyÎ-‘eŢ›N/żŰ{ţoSÖ3lĽ ’Z´dŤ¸ĆI^í9ŁŐÝ÷>ĘRNs|aÔq҉vs˛,8č~eňŇźľ)Ę}čó$ú­O»{ŕѶ1#YrÓLŮě\ôÎľN Ë”Ţ+ČmŻ$ĺC-`J‡ +¨¬®g(cRý¤±óbzóë‚:ZNrëYÔ‹Zž'00Úí̴ΓéőďF—żĆŚÁF–%Y^”‡ç9ĘŇačĂ{Wž¨˝§ą Şć~ ×OqĆk úAڄɅgOĚţKLéfHk-I&Q™Ö±"ź.©YđÇ"µ!©ŹqĄť%]ʤHţ„H ˝Ş[ĹPéŤe´îoˇ”Ü2'NďZižf¨ ŤiHIgő:§Wł%™”k~űÔnŰ˝+ŇžeĹö˝µ™$ á-UîZ‚L+đuŢť Á^Ž.ŻÄ™źŻćKr˝28+ňŢr´ôéľY´1gO˝őŻEoË2vy\ź=·řËąqv 1˛Rź N•ÚE4'}ľ–ăôÎčŕí˝őâ_ÜOÁ +r_jś¤K6TqŽu‹b•s‡˘7ŕě6ĄWňŚ•§Ňr´ĘžŐ=çĽqQ¬ŔÔ(ŘFŠrŐÁub`ľśQ^ŞŇöX¬Ńţ>”?ˇ ńáéAźńćră 5d/FĘ–´®Ń:*9“µ˘ľ– |U­í±öĐlžó×5)ę_ŰDµ8ôÚÉIÍőśD™SĆ;Ŕ´Â7AGPs5 úÄÍł>¨‹Í4ť ŐÁۧ­9mOˇr· :*6ŇtyŃĄ‡.8— ü D\ŽŁB„\ŕE„ +jNqkÇŻ¶/Öéóml+/Ápgr^¨‘öŐG@č•ńcłsɸc„vŔގJ |Ůj­¤…jđî Ř9ÇÖ–ŁDxT9!†Ű¸>ćË'ëy-ŠPŚëSJ}3U +g«&ˇçˤ9CE •a*ŕ8"¨¶–f±Íůűîř Đ 1L_ÚĆ"in˛÷Âkîep-š—âž#í%O;ś5”Ę»ză÷&´ŮĄ­fŠ2ÂĺóŇ&6AŇPV•+E1(é-Ę0ţ"ÇÔ®FYc©~Ô9ůŞwńťÜşĽ1M:ˇ)Ł‚$Űh +gôjrîX©ě‚Z#ź“Ű)ľ‚Ąj>d«'ŔY  ĄKüxShQČ™őŚ”*•9o•›KąŤNjÍmDĹ•A–mn䍭‚™ăę¤5MŇ5Pb¤ł@Ť)aÍ·ű“(ńó(¶‘ç ą™! „4D +"‡«ÎNJ¨Ż#"(®Že(O,ÝGzó|xňK˝y +)ÁČ5Ѭ§©Őť¤Ę¨ŇWë§ťý´»ÇÝŐ/ŞD^M‚€÷ cŚ‚t/‚ÂŹŐĺľťĆs|ü`’ösb 4<ëî)µSDjßKŔDz˘ „Yw&U×óęfF˘„†[ßÇXH*’á@lgůµ8ąž`yAÖAc·Ţ?ÜH–VădxBŹ«0Î΢?3?[N$QE 5ęâÁ6Qä*y¶ +EZę]÷Ö‘O—“EÚ)…«éŮ›9%Šč1DŤfE żLÉŽcćr”&¤Vu|“e˝mD‚ŢŹAuTP© ?—c¬UÝyűëż×Ë‹O׊K>/4@™D>‰k ŹvƇ¬ŢÎKWEÎçéUëśÝ§ô.H)¨őcÖ[„§\0p–vC%ŕ„/"JV-7łz—ŢčÚęťQö ś„M¬D +2äv¬ ˘bD,xĆťAz HBĽŚµ™cň,H‚."´Nă„»ś7˛*·¤ŕ€2‡+ Ťň +hćíçEЕͼ°’©cőn´ć Âg/^ü‘{¶(Ý(é­ćäŞCynĺ %.ŘĂ´pË jŐ…-m•Jr'Ť[B9ŇA…¶ě-dwމ HőĺńăŇöÂý­ÜĘ6¶šä3\ŽLX4ďmbŤń5đéR„Z‰1@aŃś ˛M˛{¨ĐřËŮźŻ")ÜŽŁúZ‚»żU‚ź1Ô¦ÔgŤ˛%{i]KŇk)T&53¤EŚ$ŞŰµykz~5)ăú„xÉŤâV‚ +¶ ű󽜠 ŻJjO­ĐÖ Ç8QĐ•ŮÎ2Öň˛úŹ•ćUQîbr» Ô7ňň§›Ĺű12†š9ľĂäPHP&XTí¤&®¶áµ…éË z#+@†¤ŔIĺŮpÔ"µ>ČHĆ™€CAĺ–\?ćË»Eąťa€A¨2 +pF+I:†%ĄE}H¶LÉ*˛álśFýT4ĹFŠQˇD‰€«’›„ÜN„żbR\ôŞŮ*ÔÎ!-Ąň>…đt·T˙ľ…HiĆWę§Bő¤ ·Ŕ‰G0ă^‚bfAlŃŽäE¨ŁHщ` Ű+ëYe9Č hµť‚XÝĚ*”˝Şç\p$V€+ű+)Đ n« ,§L‘ćTl—çáÉPžI\WśŢÓ˝LÓ^Fhô!˘ö2\•ěĆ‹F‘óÔúţZš —D/ÚY±Ë§Rý +¤ÉW{Ó§iĚ€‚Ý0Gô-ĚUŰ[űďkpo=”¬,amf…ŤŚů¶’`ďEč$Yă+'€ü"TŽ®BŻXkŃŔ‹•C»wł‘â#9^ŮRŔZsHćdŃąµž(łź"Ěż|YO iŇŁôk ą•(÷·čŐ„„É˝ébú‘űđĘÉÝMĚ„T OGËmŇőĘ€÷s|3IŘ9ĆEĺkOÝţcą~–¦ëq˘ÁüY]ËČۡ‘¦]D¨˙Ŕ,‚Ďu ş ˛Niž5¤H? ß’¦63á i\ËŃ6a´ąňŽ7|¬w®@Űdi*„XvŰŐÉ 0{Fhb0fĺ‚4ˇ‚(Ąä +Á[(ďdH3C#÷!UҸľ‘¤qˇ"{SZm¸2‚Ťo€ŃKţŹ,QTÁĺÔďϱp-ł(gLirŢ4IąŕÇ©PŔ?ë'¤˝@ŐpD¬h€=`Ś®V‡„ąĹĺĘ´;Y/¨˙ň^P.ďăJxj5Iڧ_ť˝¬Í_Ą™ ŽëzăŠ"Ič  +Ö2üfN„śiěľě_ţŠńçyľćž€JŚ•ěmTŰ*čnËq嫼;ÜüŃW†‹CI]pŔ +i~9VJăf­<ŘFAÝ=Ěđ­‚2ä+Xµ¶š¸`ǵ$[Ň'¨:EřN–iPĆŞËŰĹŐ(/čź­#’E“ÖĄÜĽś=ţýĺW˙Ůşţl‹ĺäX^YŽ”€ŽWbámöˇétzĂG„Ö]Kń­ŮsĆšÄ1g5«¬í8 *e>:ůđć‡˙) +®Š*'Č»ríĽ¤Ź8ÂŐ:p'Ë”ÓTPRAMí@-ÄđśˇuŔăĂ`AioL`Ú9dśýMÄ])č ©@ŃÖč•ę óAŤÇkzű´dÁçW˘¨“Ä-„qÚřĘ–Ây\Ů`Ţý[9 Ĺ´.Âxm‘˘‡ŠAŠŻÝí3Ąz"ěDQĄ”!V#łĽ•ÜÎ’±‚DŰ3ü´(7#Eu=Ĺa\™+Ń,ÉňyƧí‰ŇşäkÇiĆ[Y†Ú©Çpµ 7Ň\ tíďTrţ°+‚i%k µĎĄÚ1"ő čŔŤ–ô)x·ÂofhĘťGEĄ“k„5zW¶šK +Ą¶¶3ěz?ß ČouŠ8ePn–Ý>—ť¦L ¨ŤmbZx1®öĺřáwjuÝŢŢkÚ í!ííŔ@çąf­ůZˇXJj‹6‡ âÖS,¨¸$$[Ďqµf~ň u[Š–¤řµ¬ŃŽ1čaˇ­6Nst°••8gŔĄzń˘¶™ć>[M~ľ–´ÉÓ5HQ¨8˝w=¸ţľ˛˙Á?ăüŤŚöÉ +’ÂBˇőůz1QĐ€_„`×ë?âě"4ĺˇâúďDoÚ,V +đňiőŕĂĹÇż}ţÍßž<ýnŐÓ$ĐG-ĎŐ }(ą ™9{B™cÂäĹúf^YÍ(@¦dą µR O¶P-Í•ă?:ý8ž"óôŠBŁ Tc¸Ň7G{˛;­ Ż! ·ŠFA¨m HŁ<Ű(ŠT‚Ę–\„ 1’ ŰŘ /vśá{ô†Ę-M豢Ă« ÜŚáNŽł0§Ś1đďçôA -°^–˛%+/´ŔBJŐ3ł÷ĽŔŐÖÔňf1ň¦®4!TňJ 5F¤=ÇőAS×Ň$atÇź>łĆO j?Ͳąđ§ďg9,Iy”łăŚ_ąăWKŰŵ$“ĄýT)\ľtWŠ®bć<ËÖŔęÚşš]‹áŃ·‘$ÓáµĹ&"¶RtZޱűIĘ$ԆѹkgB¸đe·(WŔG'(‡6{z}» `ć}ĘĂ $0{=Éߏb[YŘ?–—~~?™@5JďJ/Š{RÂ÷ Nˇ¶…‚2Iŕč˘Ř&ô1*÷`\VÔh;÷¶ĐÍp1e=Té?.sVäZ¬˝Ř.%sH;S`v0§źEK÷ăbšiJKňÇ’?z…n´43áy0v9Ágů*aöKćXđ÷‹€ŻAËńĺ#Áۡµ6J9›)&N–!·AQŻç•i^[Ť6jăLi_•‚ý´ĐŮ‹‘ ď   „ł‡™3TÁ@/C6&IjÜ.Ľ€ďPŕV&€ŃŚ €2 :¸ěE¸g…׏F@ů§ T`Ýf^M˛ —fĺ03 ŢO#ŻYÇ‚;+ +M„©f(G)ĎęÓë8"˘nˇzś +ňJołW2Ň6fG1 rҤ– Uи ŚRĄÚvцŻXJi®’šI&VVn+í›ęŃoÔáóĽŘ‚‚HŹŽčď»—¤wśşŰ¸»Ţ»âĄH+\b^éźB7‚–Ă”6Ô#xĄőś6J#|řŕVA-ŹoÜá)a62B%ĂŽť‘În†˛Š|°‘ç׳ Ţ ®¦řő´¸•U63b¦^>Čňˇ”{/h‚0ËŐIW·•˛G¨Ú‹` ۬đÖ/gĆUŽpmĹ4°Ť©’Nę-ĆjjÄ^QV_ +µ 8Ú,]ŢÎń„ŃĎňĺnÄJWYôŽ?4÷ŢHţçý»ÁúѢöů +0 xKjý˘ŘH“N$Żč•ýS^Î ›„ą>ÖígĹ^AÁ!˝_Á ÄĆFNż¶r€0áŤ7Bí0ÍWAy”6Şś~8ąĐşţjVŽâV,śĐŔÎ0!ncÜÁç$ ŁŔ–ÖÄňQűč—Jű3GQÔXIs0I,ą¸‘—A®ČŤk{đ’ ćńpjôIô•Ô湍”>T•ăüźŻ#÷¶q¨Á4€î†—Iw‹prb“ örrű^ŚI•ü­Ľ¶•Ó3ta|Ř=/¶ĄúEšo-%Ů (jo‡Żś€dťežh´ÚýŞv0˝ż–זༀĺ[q5Ë +Á¬±űtxţQެĺxPDaô^? Żc’>ďíĘŐăđugľś ˙b)˛•ŠR Ş&Rrq{_j=±Ćá +\ˇ)¨źm#I˘nQîGJźobŕ¸Á°”ô~x» jŤăoi VłĐÄç †RufŚ9„Ż.Ę­nEJ•yëAFĎń}ł÷X­íÇQ-^T…ĘnűŕÝěú­yĂ´Ą–ý—2'yu%-˘Joďĺß{_!ę´ú(ŤI]ły 5ű_˙ĺćĎ–siŞZ;űľyücOŕ8q ŠR}#+mä4 +9 ěůá«˙ TÎ0c¸ şşänăNŚ R\;'ôˇv’Ą€w'¨\ŮĘŃë0âY-CT)}Śźˇć`EÚ;údĘYˇžŞ›„¤ ˛Ť0'XW…&¬ĽÔµŻ˝Éˇzš"=@iܤԶčM){°^´îgôYcě#­ů”˛÷–ěFNŠě<ë—Iľ¶ŠČ«ľŔ”· Ę˝¶Á’¸%”O”Ö5¦ŹÖóâç"†đş)m͢>TÚŰÇżv?”Ľ˝Ť"t Ť°µµ”¸´M­†7«Ű 2`ýĂéŁ?z“×[¸Ť(M­y&7.Ik– ťYáAVĤ6ďĚâXžI2Čó Ąv"×ĎăT=<Sú„jŠöâ¤+y`˛la+ˇJqqÜ&É/ÂÉŕźk)\<&¶JZ'Íxܢ˝}­űHŞźnŚűęAŚÚĘJëI:’çcyay ˝żM¤‡1'”5÷÷ N@nHŢ,óSFµĂŻŘʡM B'ěŁë6wâEîg«éŚĐŬ}±ńČż#Ě)Dýé:"ą“ŃŮÇ‚XYIq±VxKÖ¨e.\×;Ľ"Ě»SŕtĐ `>ŹŃ şQűŢđEëđ— Âűä~v#%@:ĺĺ6¤ýgkčZNŤŕ"Cď!\’Sď<śŢü1˝eËÇ+ă˙úgŇÚ˙Ŕ˙Wí.ŰÖîąmí.ŰÖîąmí.ŰÖîąmí.ŰÖîąmí.ŰÖîąmí.ŰÖîąmí.ŰÖîąmí.ŰÖîąmí.ŰÖîąmí.ŰÖîąmí.ŰÖîąmí.ŰÖîąmí.ŰÖîąmí.ŰÖîąmí.ŰÖîąmí.ŰÖîąmí.ŰÖîąmí.ŰÖîąmí.ŰÖîąmí.ŰÖîąmí.ŰÖîąmí.ŰÖîąmí.ŰÖîąmí.ŰÖîąmí.ŰÖîąmí.ŰÖÚ˙Ç?“¦/ý3i˙Őę*·čłťŁÎORú“UJʶ`‹Ý9<üô':ljĹ©#vŇ;šě.:çKĹp["–Ę,ĹíAgľ´ńç7/Á»–ŚÉh˛€ŤNŻ3l.EÂ÷˘áŹźţÄűńă‘đăéăñŮ9‚Ý˙y+=€˙éö o±čě úK?n^‚íK©Tvó§‰%ę§?I,•OĂźÔŕ§?9I.%~üŻ|ţK†ß¦°ít)™XŇ–jŤÄRv,Ű?ýI4ź/$—~ü±óăż2©X>÷ç ę?Ůđç˙«˙e—˙׆?ď˛ř'ţ˛˙_Ž(ůăýرüd>(ţçߌ÷˙éćŤÍđŔ…źţä˙fě=ź$IÓű°ďú +ł·cÚ–÷•eŇ{ź•岪˛Ľ÷ŐŢ»é™owvfýŢŢîŢÝŢ-gxŁ( +€P$€hŔ C!„¨@OÄ}TDEOOuUÖűľĎďů™Ěě~ŁŇřx>[ްRµo®„ß,ô›™9ßü‡â‘ŠĆÓ+í$‡i¦ťcĚţżÉůń}ăý[IŔxă蛡'WŢĆë~3X%ÄJ:#€E˙o|%gÂT6-UQĄŽŠŐgG™jJéaĆ %5¦ô»óą1iô0­aŠ ŕÎ~WNň•(a˛MgÚ˘5a +c<3DŤARí‘ŮyČş˘”+ڇRRJ(‘f—-ΩâĎN’z'Ě[^T +}ĘlÇŮmNDkS©¤µ^ś­ˇ™"6ÂdÁźÖˇ–V;Ö+›Q±¶ś­ťą2 Ţ—TcT‘1ju—.LŇzŰOdbśas)ĄěÁ”¤lKŐĄyŞ÷ďŇĺťX Đy?aĘ•íLďBnJŐ=˝uNÚňfZi&ÄjĘ»SŠ;ĆGp-N›¨TNI¶+ÎĂg!\Ő‡gýx.HR–«¸ÚJе8_ĎÔOäĘ~LhzńězBq'Ő aňů1ťéůQŐźRHµCgi±H›^D‰YJmeđ‰1*ŹË-O\^Pt&„çÂx.DPµ—ÖúIą“ZkâMa˘ŁKqş„Ém8TĎ'¸ZË®#"¬X,ńl3)­ËS +EWRż n¨µ(ďŽňq2›b­4¬aZ÷"b7ÖBäuoj-ĆůŇĽ=€ĺ\a*˛čM¨P…”ÜٵHić"D!%¶\•:„> ő®Ý?ŐŞsJŚŇ%ŇňĄ9•íűRŞ/‘G¸zJíĹ„şÍz“*5ÄâŚĎăDN*NQµ¤r^T‹ŇE\Ć0Í—…lËđî8Ź:ű§nć<©RÚ0)51ą‘äJţ¤g‹lq¦µŹůĘ6•‡:v ”©˛qňAqpe +QşŔä™î=ąv–Rş!Ú ±L3ü¨ćGť˝=⼠? +Óĺ0Ur'”µ¨ł]_Óťí‹”Z„±âBŤÉĎôÖEix§»÷4*ä¤Ne‡Rý0;ş/7OS™QJëaJ{ş˙şľů8Ä•ĽiŤ-lÇŹŤÎť”>JéS‚• ąU€żŮQ†yłŹ …X ŃkaÖŮ>V¨%ĺF\n„ŮJ„µ#ŚĺëqŃöľŮdÖ/óŁ?jx“ΦeATO°ĹiúÓŞ‘I=?BRś,ĺkű†˝¸Ző“¤ozq"‡EBÓ†qľcę”6eډ'ˇ„ńl”*&…:` ĘŔô«Úç şpÍŹ~Ă“dJ›3Ǭ1Šą>Ü“i珞_s'Vx7Ób •Ú ÚZ0Ś(™_ŹrnD„`ůµćOCĚg§3ă(Sô!B0­­Â"„Y”Ë{Ş}(—pµkTvn?űA˙Ń/-éÜÄٱŽ=oJÉXÖťť?źťŇˇŘü1űIÖÂŘĘpç[zPm%ĆĄ8[ož+ŤÓ$_F¬'&ĽŮBi„đµ[ 1vRís… ­~@ýnpfĎh°ĄIR­ĄÔ6ÔĎŚÄňfkăˇ`ÍbLkBi›«ěĄÔ~,SÁĹčB7V"´+.ƀܾˇ«)±g«)Áů3ëŢ”Ś0…´\ Ńą(_+»•ĹËÚÖ;ÖěNϧ¤ +[ŃÖ„´¦I˝/VŹJŁűfë¸>ąc4÷üÎî;®0î"sÓ¸ÔNjcÄ9l™P;Î6«Qa=.­Çĺ8çě#âK(7}¸+*Ä™ Ů•Ö×13ČÖ˘|{ly?&U×â<¬3ť_xÓĆZLşd˝)*H«!<4_ĂD6ŇÝan-Ȭ‡9 …P:Ă}Bi­i<żä#VÔrôĄŤ8_ٞsLźâÚĎosŮEͦ…šłí]ŠPĺ¤ŘA„6ť[hőD¨^óĄWÂ4Đ (NR¨ĹŔ°Ŕxhöš+uÍ•ôĸ(f&ůVŚk±BÍĄĹ.­v+HąşeW˘˛ É ¬ “…‚FĹn„."t>Jć–ü¸‘â”…ËmxA’«ăRK€^A‰y%Dd:Š˝ ďqő]ޞŔ0ż˙Í: ‚áJA(ĹâŤ^gqČÔ0Ε1gk“Q”«®%dwRqö(2Bqâl°ˇ·©–PZ1ľ–’ZŞčO*jyQÝâKSą2e¬qJm’Ů!SśÁ×$(/g›µ=¦0\Ťs.DŠQe*3NŤ8ÍXö¤4f@ţŇŠ;Ąű±"¦ čě×@µ[Q¦”Ş X¸Ö$2=TwţÎľX;dĘ›1©&Ů;Re0{\a6Űzű¬˝ýŞ8ľŹUŞ{R +Ě őf^G$6;3;w´ú©ł…ŢuöR%Ć+07"ŻĆŹłv1Dä¶3Ő 2ĺߌ ]L›JŐ p!gĂě*?w%ÔŐ¨¸•“| qţŽ|&Lfctx&ꬉ¶â'ýâCdw„[ 1"ź`moB[ óëQÉ‹¨@#×Üéő($ňÚő wB÷$to4ˇq¶ˇjlĽX~ăŞiu¬”îS<Ŕ`&ŕ!„ft)FnúwLHßpŁaĚ‚e„†ę  yL¨«Ĺ©¤×˘˘Ń\qÉ—Ňă|0·¤ĘWúQ‡÷ÖĂĚjşéI.ůđ[.6éě$*4ÜÎĽ¨*?Łr „’Ę-ŕů[Ť±Úr5"Ę b5F\qK˛ć¸ÚQ9Á–F÷"t)€!"—’ëÎ>jŕä4››jőÝg-Eą o“ZZ.L€M{űů«ŹĎ_…řBÉĄô.‘°íŤălçŐś= Ĺ‚X.Î5pcĆ÷™âťŰ$łSčB´ŮüÄ‹çA¬}X>ĆÚLvJĺf¸9ŃěÝÉţ»ĄÁąÓ’b],ďÝ[f˙ŽŮżÍZ3ŐZÜň=ľ6]MĘ µ1ľ¤>`3C\iKq%(wĘŮżÓňcyxŇ@/ůt+[ąćKşb0ť\Ľ[sĹŐZ.3"Ťöőµ‘‚x™07Ůâ“ßÄőa”µŕ( 4®ł$Ö#´')'ą*&61±#Šţ”áKj ,î(Hë }ka9ÄąăŞ;¦´BXÖ—ÖWŁĚRxk5ş¤\QÉ—Í\ť ­1°dŮ›aj `xZÚśˇJ7Á×a١ŁÁ-ĂâűÓđĚ’źX qk!>4dĹ $GńÜrŰť¸á%@šť=„ŕ€g'Č=,ëŤË DQ¦ ¸ĹŤ@% Ę€ÇÎ/ű±ë®D0ď*®Ć¸›îfX@Ŧ=¸ZŹgÁ3·ÁquĘ\čŤ3Ł~ćŠ +Y{®ŐvRJ+!Öc|9)Uřě<§Ů=÷ĄMZoj#€›p„48u0»·Őúé`Úŕ‹S¨rH‰ŻńÖ†Ţ<°'wn=ý~}ű^„·0ŁKćgd~‘Ď â"©tŔżP4…+ĚÁ}aꀇďlÖ5ďĚÖŹ˝xÁŹb“Ô{´9$ Ě‘Zٶ:§ln˘ )©ž’śÍ>ĺęa¦{‹.Le{ëôá·µöŢR”÷ăŮ$t“9ÇŚ +H€ÍzL⦳ą‹1žOŰpő¤Řc…XʞëĆWÁ6¤ĄĐf¦qâěf' +č˝âlpJ-uPpÝl=„—ĂĚM?ş¦Ö’\…3 µp±I©ý^Ž +ˇ& h5,¸ćPJDXŹ +!Ězô$ŐŐ0˝äIÓWDZň3+!<®öá°q%dg_¶âÇLsJlBÖÁŰ\ž„掉n`ˇă¤L0]ëŢA%oxÓ@AË`!8˛óĆŕO速Wyâňł•{ŹđŐ„k[ŹŃEOL¬Â ÚŠćRLŐ7űťg×"Ś $Ů +Ô‚4¦™öťÂč!WX`b•–íÖä˛4şůK+-TmŃŮľRžçÚGt~öÍôhĂŮ1N­ěJĺ©|Čv¸Ň^BnˇB-×9ô *¸ń¤ĐČuoW¦j[Oě­Gxaał<ľ+V÷|”ćě„Ô”ě=­yaŤ4'0$*ÓsöIJ@})±.Uv´ú±=y†ÜOUăb'ĆŮÍ0Ą…i“›$Ĩ',,®uŔöÇąŠlďÚóÇBu—+od:G¶´Ž(qÎřAYK>Ô·€+]?–äµbqŢVËqľ˛a@›ľ,„)˝p*· ++ O"j˙l%„úĆĂO¨ĐĚÍ łĽh>ţD !¬Ľsv糤ŔĆůZ§¸*«2ŐBřŇYhšCŘ*ÂŘŕZ#h|ďjŃ ˝qżđ>D‰Q–'®ůÍźY„h !±ěu^“G•48,; 1Gě¸Đj$ů*cŽa ĂD~=ÂyâRËŻ‡@đşő0LĆrŔfK +Ä×HđX — +đAQŇrS‡EJé¬ĹĹ›~ü¦'˝ě%iäÔ: »+Q-LKľäŻ,cΞR6ô*vIc@fqˇŹPVm—zg|iŞÇä¦Iµ,pËl¶‰Ę0ěŚs®ŔŢ‹3eh^¬‘Ř Ów:a*Ú‘­ *7pĄ$„/Ą•“áF71ąŞ’˝[Űx*Vw ^%µ^BnŃů)_ŢĄ‹[dvq^ďÇM@ $HdIsĚ•ö‰Üf\$Ô!řmWRŤĐ®wˇaĽ.i”¶ů•}I™4şN‚ăĘ1±“y!±ňů…^;ô¦ÓCT.Dĺáµ[Ž«1 Š”[Š5Aú0(?)Ő!t{ٞ7*F0ŞłäM{)É7éÜ6iĚ1©“dj.§‹I°17Äuú¶'éKBF¨1Đ…:pËZ„< H€hŔ€5'Ô6„oĘôĄ ÜIĂ ©<-ŐĂń¶+ľ$rQxŐŠŕňQĽ@«í@R~k5˛$]Q`P›·˛Ł‡diËŮewÎ6Dř’ÓsÂUŽčň Č‘š"çC3Ŕ–|iĂ•Í;[©A\˘ BÚkQ>N—ěŘi%LázOnłĄmčŽ8Ä%đŻŃć€ĘO=¸y3Ězý ű`­RB-Ζˇŕxaâ7 Ĺ»bPDۡ´ž  +ĐŹPq¨P„7ĄŔ’zĐÚĄU aEŕ´›~Ň1ŢX&€ę˙°ÝJ„đ@śP-čµűFéJ>ČJDÎIXb ´Ř!řŻGŘ0¦űSňZ Ĺ›é‚j»âĘzL^ +°`´ŞäEÄo¬c¸™ć*~öI}€| “Úl~Ó›ÖŻűŃő¸ŞŔ9ÎÖˇDî¦_ 2î¸ü«kˇ›ţ”+ĆCŕŤSEO”_öbĐ®¨wئ$ä&@ĽË!úş}Ë…8ü‰ęW"´ÖŞs®/IeOśąéŤÝt‡— Ś×ľČônEąJZŞ/‚d‡šă Sň9PIŮ>Pš‡ią> ĎŹ=±Ž¨+1"”C)oŃçOgşôW‚+.C +a9ŮÚĘ4ŽŇj3”Rsí˛Đ[EUD\O)pW.ďZł§IcńJ®lDŮ‚/Ć@)\5)Oë.‡ośŤSą›ţô+DAăËE(đ{ÚZŚ‘&čQ5(čš¶‘ף`kk¨Pó&DxŔB-i€˘/©ÜpŇSW`Ľ$M˝PD' ‚‘‹ńđ5Açý )EçŚŇČŹ©P‹@Úth „)ť $3Â?–fKTwGůaŃ\ĎÇé"äč ŕä_ô$$đ<ë1đďŠĘAĄMđ˙«aŇcÂ(Ś–…|wm=qóÍÖČ ŚŔQś9:}ôuÎ_[ŹŻ‡Hp‰`ď×c"Hˇ+©A<,4÷ ­­›î7”JSZšÎE `E@‹DŤ]´zÇ1ÚBčBi(Gf-JG ŤËtŔy®YOL Ł˙ďŢç\wľre{r™Vj×}Äj„]…B`™´ŇÎv.Ŕđđ™áôěýĺ8íŽó12źs6eo´ě XßźľĆłýŐčMi“|],íÔ7_eW1ÁqM‚˝ ó>Üă—Öşlq#Ó˝”‡ş5Űżý±X]ĽĺIyâ +8^ČqE&;OÉ ¨b˙"@—Á‘€tÎśËN¸ü”4Í”‹{ Ĺzk=sŚre PTmÔ窛OńěPČôÚ›÷Üińë‘ëîD‚-ÁH@_¤ü Ú$ÁB4ŻąăËĚeÂor1 =Ƣ$ÁšřppY<–ŕÄt„©RÚ˘¤i°Ł`żáJĽ˝żáIŽqş­M‰­™ ĆJdÔá"AÚ†„NŁźéh•ÉJüN‹!.AvsöĆŽDI1%Á<’tŹ› Ńîŕ™óŮbç(Á—nřPĐ>h‡Yăž +ěř¨“ٵ|łĄ Ńë!ŽĽ×cř´ŢÎÓőżŔXf=LÝôb žŽž&łş¬Uwřü`Ĺ›DP)M롤xĂ‹®GĹ$_a2}íŘ›ýtťhŔaľ9_ +ů˘LjM ôŐ v‚0yXXĐÍ$SR­ pő)© +$%2a\‡žőˇzڵ ůrfŔăFĺ$ ŠŮN UČ, ľcŠQ:g5¶·ŻľÉ§nůd‚ ŁřâÂh§ő®÷Ťš§3í•”+FmŔfśmÓZ§1şxüŃĎ*ăóĄ …ňŕuťSč«1!-ʏâ.“[ČÍÓ°ÔcEÖ ŻÇ ňđąŕŇÁ; ÖÜ‹*7ý°PJŞ -.”bB9ÎYŐÖţł ´kn$Ff”ňa-W\\ +2oΔ–EËŮŹ´&BdB¨%s«ŕo˝3äÜřŕŃ·TöF€Śy¶Q˘%‹ Ţ„ŞX“ÍłěÉí·Ö‘ë®řZ‹ŔŘ ‹…XH‚şřŚ0EđuŕŁTĹä*©4} ÔŽ„ňn”·—Ł|BnB >„ľ¦ËÇb늩ěĂŹ‚D!ĆUă"ĚşčJń`xP±™ëÜa +1)·`IalK^Ô9ĹM–Qe€*ýč›D0Ů7\Ś±Ĺ”ZŹpŸĂ]ő(U2„äÍ%ÁŘä}i ‚!@‹ĚÍă|=ä\)ÎA˘OIΩ<¤°ßÄôÂÖ¬ ýzę‹1ë!p/á%@f‚ź„•I5çmś_qjJ­HˇµŕĂrQ¶ž;A˘ Ę ˇŤËť Ş‚ŽŔZ‡Ř qákA<—äŞ\vć« bh&šTĽaÖ—1±ˇĘ˘·é†s(‚©ÄŮZZn ąg \a&h®0÷«Ëá_şî˝ćB€Ł@ťŻą’ vKo.YFńüj@Öp×Ü(dWLvĹT_BS­)©6]QÁL`T°Oŕ W Ä‹€"×3Öţuwú†;˝¤ßv§~u KćK¨î¸%XłÎ9şłó&€¸XWDôŵ$g{ t„ ‚0&¶…üÉTĂh!ʧ_şé˙ĺëľµŔřĆ*ň+KŃ•x<ç +&8±ő¨&Š ×o»±8SŤV„´ătM.‚íěbĹĚ ‚eßv%Ż­#î0çOh1Ľ kaGA eĽîA˝1I(ě@ë­†YźĐČłő(„eĐGÄÔŮχ‰Âr[ ± ĘnXŤpÓGzbˇôąâÂť„KI±‘›!ćQćFXŽrxĺĘm_R “ů î(”ÂcL‹‹K-VR™ţJ ájś·ŇZ3ˇ:—Š­Ëĺ&dnfśK*Q*ďMË«Qf-ʂŠ+“Ĺ´6«˝0Qîît¶şŇęz\rÎ<Ć$ÄZ3×ŢĚ([ÝvÇő8ß&őa‚ł<Śł$‹)®şqôzvň*€g–ěr’¸š¤ó`0Śâ,AĺB *k˙¶?µaŇRK(nŻ2ůyŐ1 Z] +â`üh>J—ÁirÂÎy!>Š™ú—‚´ ‘`ĚńI©EH„®ů’&řđ(–{ ŃĚ‘’l5âdĚŚ7™Y‰©ţt!W=$ĄŇz‹Ćzś÷ ěj0˝äK@;Ç0â,Nm\w!.0ü1Á7EˇZöaË + Aj˝ CˇépĘD™:Ę7.ŇLÝ—u9rm5±pśůŰ« wHp;"ř*…°<®ŤB„ĺNčA˘čMeÖbęrDZŹ+P17Ů‚¤31] -o¸’î HjÎIż¨ŕŤË1,ëNJËaĐw9Aćâd +´b ?²,G`µ™Uv\r‹ š•ľäĹ×BśŁŃS`ůT6ČžD9lj”ő¤C9Ějś«ĄŐîzÂÁµ0Ş"l Űú› ńOŐňŞ5ßâ~,K=Rk˙ĂĽ ťýélËĎÇ0%Íć+<)#B۸>brł|ď6_Ű[AŔšŞ¤1€¬}Ç˝íM]ྤů‚¶'ˇÇhp|‚/銊ŕÖbLI¶·kł+kxq5ŔsŕC +rtçm”.âL‰V›K°11€ç|)çş0ŕ‡6zŚŢÁŐć?śŚZŹňgG¨< bÔM/`¸L+Ć›}­¶łfCŔ™qŚßJwŰLęP 'šEřŐ óÖJě+ѵL›ĚN¬‡QÝŹ„T[á×ݱµ î !yc‚/&úŔiGXo|Wâ­Ą +LĂ“DM‘ˇ´ Hz˘".T)ĄúFťťp +qÓë”Ďą©&@‚˙Ć’˙új š¦˛I*Ć A’¸Ĺd†7CôőµžĐ„s*ćÍĺž ť‡H ¤b˙_ľé© §Ô`B^öS®ďŠ@•Ůkît_śµbT˘.t Ć0e©†ĺĂuÇŤŐ žu–s( Ś7¸;‡Ü©çÍŮé(Ľť)®%•eţ¤š_Î0Ě@Ň—ŠS­ľ'–·ÂtŮ—V!ŚCüô%ů ®B-@UiĄŻ–v’R}=Ą¬DxŁşŹĘĐ×4»Ë93ÂHaĘgR|ÉŹ›R ¬{Ś­€ěBt%OR˙®‚°@ŹËz9H¬€{D4\éâjB ÔŃçÁdB#D™bRjđĄ9›ź lUzŔro»ĺĹM Â)–u@fŔ ,±'ĆFđ„w\nŔ˛Ä*&wQ®ćD’¤  +¦b=Ä®…XWTö¦3Ćsµ-{rů6[–Ą@Ú\Đ Ske=¦Ţ\]ZňS+>rÉK¬ř§tÓKÜđŕ®°Lj¤ŇÄ®‰°s7wÝ•X €Gc K­@ô¸éÇÝQÖ$Ŕ¨__‹‚‹,X $tÓŢOrą_YrżuÓç…áȵ »ä ť]1 Ěd´·–Ľ+>˘Űą€NĆ©p;®őăLhüšŹZ‹;÷VąŢdđ‡^g5  RqŘ/IC ůÚ¸…ř ˘ěÜß…ćPµEdz)©¶!Jˇg¸Ń CϦ8ˇň#˘Ŕ$$ÁWáá\ŤŠ+NďĂ»8ŽáĹt8yŞ?Ą2”č\ľ$ä:gvŘ\ŹÎ ±‰ĘMTŞÓF7Ćd!-ĘĺMLiALK µµ„ĽšĎ\hÎâj#ŚiQ*»ś®‰«>4źę¤ŃŰ–”›q±áNen„řĄN…đU`ď8x{ˇŽýPů†'yÝ“€lŁK)±‘›1®ŽđMŕ1"Âó`˙@yËŁűĺŃ*3OI]ŕ%h´8ÂśľâBx6ć\`­—ŽŕĐD´•7.řSF(‘Ú5F+€Őbw¨Â8ľa5Rb•ÍčÜčm? ‘@ś¶ę'él+°R”sn5ńĄÍ Ć_wŁ×]i28‚+Ě{ UáEčš8Y ĄzáÖT(ťĽä#Á‡°°q’+»Ä/]sżµXńaqG”sPý”Đö§Ŕ×…—=HšĘ»› Đ…´â8«„ę\±ňc0e'HČű >ŕĄ7“ĘĂĂť2€%~éfčK±›ř¸Ŕ‹onЪ⼍PY€%ĎçäÍ L'L•©ěX©í +Ą_śHŐÍ”ÚBő‘Ăó’˝­6ŹôÎyLl…™J”-‰<$(nŚłT1!Açć‚Ŕo)r\R®Sć Ą´ŔC}©,ÖWę\¶/XsLëăZ/%ÔÁ?3ŮQ}|Ďę]°ąaÄÉbEŕ˘W!Ś!dČbÜÄŤ¶Č'ĘCďC*Źr6`žĘOÉě$—ʬÇŔŕ)@>ÖFÄš|WĺKŰFë$ˇ6ęž7€÷–Ł""6 呹-wҸ ÍaB„IĺF$ Xn­#:pc”©¤•™é{Ŕ'“9 bH7ţ”Ćł[eĚĚ=ěÜs•ŤaJNi#\#!4˝X6H[?x¬>ŕÇwî1€ft%ĹzŚćDΛVWCT‚-…gCTŮ“ÎAÓŃŮ ¸V_ĘCâNČ+!çBörh%;N•1hľę +QŽd¤ ! Ëą´ÄÖbŚ I˘ź+̓ʊU ¤LżłDjťĚa\‰7»®(í‰q¸\“+€77”Bc¶aĘA窓EëMČVnđ9D*’»Ř +”é²źpR­˝ćN»âRŔą{6—–biK±·T{‹4G!X‡”ęE¤µ¨čĂóÔ13¤răÂđDŞoA’ěM";J$ŠŁ}\śÝWÚ§„9D¸rśĚ¨ŐMĚčK¤$pU:7dó#Ěh eXů“*Ť2;HJMř,©¶›ëťeÚBe3Ąu“RK˛6ŔŘăđOjJš}&7(öĎłb,Djˇ™ YŘd¬-"7Cä6čťjŤÝ¸P–ëjë Í Ł|3iŞÚ¦óŁgE9+Hç±/Łs}ľ´kűBe°ŠÉť”CYv€(Äř:0•+©yŇÄĂWv§Ô0U ŕyŕpgRJމ©ť¤P˝ŕş?-crř<Ę–`â€LiËĺ Áš'LËMLŠĎyp8 Í—7Yk««"@08l%©¶“Z—)N…ĘFZ樂&"–b)Âb\ Ö+Î1˝ĂHHő(cK áf0ĄE1#i3pč5Ą ±7%5`ĺB=ĆÚ^4ďĎE3đ–8kjWĘĎ ÄÝđSĐzą š‡´HŞm©4Ő[Űru.”‡ŐŤŰ’˝‰>HZ¨ÖĂôQR†ŚÓÖ­‘Vž%äz€.Pą!ŕg%*Á,`: jR†DˇŘ‹ŇYT*“FU»ă ŁŮÂ6ťťÂ3ią˛eń77äŁNĆjk—,LÄę¶ÖÜŁ‹#¦ĐĂŤg ăóüô’-M™ü@Č÷š[÷™Âl (:;€ňe`URfżĐ=Ş.îŇ"ś hTj;€+Ł} wޱě ĎĚ˝—ä W0™ČŐMÉŢŕJó`;Ó)L1Łęm MÚÚÇróHkťö—4·žČŤC/™Gµ®Ú8V›'BuźŻl§Ôfś/…¨´CĚâJ-×=˛Ć·ĚÎQ®{ś -¨ia˛`&!q$řŠ/m8Ž.ˇ€ú÷¶‰ł%Čł¤ŢW«{La‚g:TŮŢŔŤV„Éć€Ę q¸ň,T¶wŞ·¤ÚfBo­$ÔeĽ~Ě•7ák„)Â+•ęv}ăŮ?ˇJ3­u¨·a:‡li‘íźhÍ-@ˇ×ň˝ÝŇä\oîDhën¶‡âBXćóĐÎEwŠ1`ĎćTn<ź.”ÎŻ‡ČUŔg„µb]°öôŞ<˝B3 Hč.Dâz’/ Ö4?9·fwZ{ŹçWś—őqł—R:^¨CdJyŁ6ąĘ .ŘŇŽź©!TUŕŽP ¨ «7vsýc˝ą+AÜĄ¶Ź:·¨µÄʦŇئÎŐírR‚řÖ`­ ]Zp•-Ą±W_”ç·ůŇ€·zzkKinËÍm˝ uśť}°”Ů^\¨ z“0K¦6ö +˝óáá»Ă㗹ޑho’ů1™íK•™l/˛ µ{»4&ŘŰ_¤thş°śPš‚ËÍC,?Eł“ěčJŞlđEĐ©ĚZjröSÚbŠŮćîđč%ooş0 +ާÔâÜYmsv3şŔŤa&çGĺ”PK#Ą:Ítö +ă[zűČŹ’ +tĘ,AݦeG˛ZÁ_…©®wÉŮoČʡúLű¤8ľ“]ä§đ€ĺ"ÍtPBi`f—Ż,řĘFat č‚bqĄ©ŐĽĄsËеlďÓf{'öâÁěň›ÖěŠ)MŚ.ŚyŻ<»j/L.${aÔý٧µÍ»)ĄAfzŚ5Ł +#®˛* ÚěZíoÇą +Wś˛ĹťźíŁúÖĂŇüJ«ďÔć·ôĆfUµĹň"×;)LďfW9°eĄ˛—Ę®8“’ĘZ}[Ş. +Ł[ÝăWÓ»źeÇ·‹“­ŰH•ÍUĺ+űbu_˛ˇÍ˝w´ö)"ÖעpfšłřÂŔě)Í}Ł{ÚÜ{^ZÜlgšŰ­Ů¶Üů˘BBhĐŮ™Ň<ÉŽďٛτʖŐ?M«Mt¨ÚŠČ ®ę[Ď·î}çôŮŹ6/^oÝyOkí•YqrQŢRŰ{Öä|püzvő™Ö9HëÍ”R%چRŰ”k;ŐŤŤíGFç`űŢ·»ŹŇąnÚhÉöÜhn§·•Ţ…1şĂ5öřęü7Îç˝iŢ ÄRŮ~VŢ}QÚyVŢ~föÎĎĚÎŽXe‡gJóPnh­ŁŇř˘µ˙´8ąxöF€Ę Rš·¦ ŕZë 4»_Ý|‚gŔ94Ąň(ÎgqÝć­QnpVٸW^Ükn=ľÄő6µćŔ·beKo<ěůĂÚÖłÜŕ‘zRp ¨ĽŃ:ȍΕćžXÝ”ë;Ŕ3ly–Ęt™24ŕ†ÔŘËŹ.a…›{ϸÂ8Éĺ1©ś ł``0µ§×ş‡/껫›š/KÓË˝»ŁşÓ†•Íű“ŰmÝ˙ćÎoÎĎŢŃë ±4±Ćx¦öĎą\^Ýé˝×ÜyRž_ Ź_A㇩,™í‹jÍ}{~ŻwüN÷řEkçáńł/»űŹ`‘2čHP—\ÔöžgwłÝ“ćîłlÇiݬĎłíIpT¦iĎŻ¦wż5˝úäčÉ—ýäŹe{[´úgź'÷0cDˇşKä¦Ôô“YTk† HˇŃÜ0»ůŃíŇěoRmŮŁłŻçϵö‘+)iöbpđRož)­óââ‰Ń»ĘľőiJďřQwśŐQuăqmëyçđU}ëÁŮă/o˝÷c¶4+ôĎFgďĎn8˝|ż{řlrű“Ĺ/&Gď~úĂ˙ˇ<żéŤ\{§ş¸iď?śľž\}ÚŮ{´yńÎŢÓ/Ů|opđpq÷“ňć#©uŘ9~µxř•˝˙Z­Íňýmˇ2LHe¶4—[‡ćč23<Żn=¨í<ÖŰŰí˝;Ĺů-©şˇ6v\OkngÚ{Fkxňqir/­U™b/×;`‹}Ţm”sĂËĆÖłćÎSŁ97› ±<ŐŰűÖô˛0ş¨-îvwď?ů|óö‡Ŕ–\a…ëě=źľjď>©m>˛¦÷„ňÖôŕťéůűqľH4vžV7î§wĆçnÜúäńÇ?íî=‰Iuąy uNöĐ rëÜč?lî˝'äÇ)#z(Ϋ­ťüčToďĺz‡ŤŤ{beT ş_Ő7ď–ĆçryLę PĂÎÁKĄ¶Už–&·Řâ¤8<ł7®2ýc,7U[{Íť»ĺÉWč•·µĆ†5<ě>…Ĺ7»{Ť­«wżýsktë0>yw~÷łöń+č¦üŕ”ł6Ŕß6g÷ŽŻ2>E8C­ŚZ›0—w§—Ż{gďMŻľaMoC†]Źł"ôî­Áů7{Ǧ +‹‡…ńĄŮŮŻMÎ[Ú ŃyS<M LÎQ®Ć•bˇ×ŮĽ*öʎ.Ö÷Íń•Ös”7Ű;ň‘FSQĹĆ”˛S‹ćĐfeă~}÷Euç9Če¦±‹“élŘóÓŇô"?<V™ďÝűÁĎ˙ Ö'.ł­íÉů·ŕ1>˙€gŽÎş·żřę·żů›ŠÍŃéËůÝĎűçA˙Žo}2ąüTk<|ůŐÇ?ü…ŢŮrĄŢ‚Ž8µ7îŹÎ_ď?ţv{˙éâřé÷öŐ­»€öö{qUÝz¸{˙ó»üôčĺoćúwf»6ĎŢe Cˇěh±Ö<´&W˝ă÷¶˙čÝź¶^Ţy˝yú”É÷ j™îˇ\ŰRęŰÖđt÷ŃW;Ď~­0Ľ0Á-”gD¦-”&ś5…K(]Dîú—ťçi¬`]­COŻäú¶ÚŘęí?¸xńÁWż °/‘ÖZŔ]—çĎ[µßË4vŽnżsďĹg…ćSJŔübăHëśç—ł;ß1ű ŃÖ;ůéŔżTží1ú°nĺńůóĎăčŃ'Q®ü‰ë˝Ęćkń@i€W—Šó«gßůđ;?7ěM.?˛ćwňł»ÖâŃđâ°C1 sÔ<ź`LĄ2Ď´›ş'ďŮ;ďĂ;„Ňď>UíQ„‘Ů|ł4ąhm=číŢďîÜž?·ďAEą<¨/Ö7—§wAĹäú˘ą¸Ľzů˝ÝGźĄe»¶qßęż.m>Ô:Çjmëţ‹o?ý揕Út=)K•íL÷HmîäF'ÝŁ•ůííł˙řŹţbpřT¶†;·?<{÷GÓű_lÝ˙üäĹ×Ó;_H孇Ͽ|ňÁO0˝ ~>´¶ń 2»ŞoŢďźľnî?íĹťgźď\ľKf;•ŮíęöĂl˙<78on?ŮyřUďě“LűxáÜ9Ö[‰2ŕŔŕ±Ö‚ČĎń,„¸ÝĘäVą·Ýž_ jU¶g:$Üę¦PYä{§˝ŁwŔy‚˝lżˇ¤Ě–\[ŕů±‹´|¬ÍXÖč*Â|±ĐŮÓjýĂÇăł—ůÉ-"?ŵ^srçůgżĄTÇ•ÉÉôÖűíýzďT,O¤ĘÍtńě 2˝Ę¶“bQ,őŐú¦]ÓŘ5[•ń…b/6Źžlť˝ŕ +ÎÎýÉĹëŃé«áÉ;““gýť«lmńŮwăźţů_íÝ˙$D0­ĹäF…áĄ5{\ś>ĐŰÇ„ÚxůŃ~üó?® ÷©L§ąű˘¶ű˛ą˙ŞöÍá­ĎĄ<Ů[ś˝¶g·ýÄłí-`ň;Łw^}ýű Ýfk«1żĄóDv®†Ě ÁWÔćwO}±ő±t6/+Ó3Ül§Ő6“›­ŁĘěľ=˝›Ę9{žoíˇj **7Źy{—ɲőm„ËúQž1kĹÁţđčéŢĂĎË›w±lĎťV=))-[ĐZun /K‹‡­ý'łËžĄw™l§áDÝhßÁÓŻWźŐ¶ÖWíí‡zs;&ĂtN©ď ZÓjąÁ Ŕ4wtúN˙č±T›ˇJÁlέщ˝yݵ˙˘¶óT¨ďájŁĐÜZ€,™Úlěp™vš+ö˘˝˙¤ľóĐč‚‚<˝ŁsíB˙@mnł·_žĄŐjÎ%9ëęé—Zko)DĄĹ*WĎ!Áçd)µźooµ6n‡éL}~ąuďËöá™îíńń‡Ťb}«ą¸ş˙ÉoąžďÍov8żôamý«Úá§Ůţ-?nŕZ­6» +*Ő;~wtţáŢÝ/wď|V_<˛Ć·ĺB˙ÖÓ/ş;wTě(°ä)µy¦wÎěÍ'zç6ëç>¬ ŹpµÉ[°ŞçFçTŞîíS{ń0ßÜ]ś˝*C¨|cŇ(łťËjiÚśßęlŢ!3­´TKpEč;Č`KăËBď¸Ô=*Ô·a­†{OŞ[ʤú.dU<3ŚqH4bisqëą¶ă,:?–kŰÝýťýgđčí=‡”]ßý5ĄT`HĄŤGzď ˙ć㯷?,Ź.­őäĂ,Nž„ś@Z5ZçLâg9Ä&' :7Ď@ÔĹé•˝ůH°7D6)Ú|®—kĚ˝)>Je¶)H2Ú†XYřÓršĎµQ¦ł™é쀽X$Ő¶­ŃąŮÚU¬~grşs÷Łüč„)™âH,ϵúž\ÝĎô.ŤP&gurŃÜyÔÜyŘŘ{BWćbköĚ!B®ÜÝ:{ţýŁç?¨ď<“íÍ”dĂ ”‘PÜz§%6Ó2[ŰFgWiíý٤^ٞ­áń»PM:×+N;ű/{G/ęwT{BejAŇđ&ä0žqÇ)oRööž6¶ź¶ß7†zg?Îe•Ę´>żg4ʱĚjDB6ŃěÎöÝöîĂ0—Źs…ló žË´5Á­$t:Ű—+sµşcňŤĹĹíϬŃm°+˝ÇąŢi”łĚŇřöÓĎóÍąWÍÁyyăI÷řĂÉ٧Fű„ĚOAËkt÷éĺÎnŠ/Ű“[‹ó÷;ŰŹ­Ń%P"řüb{Ľ˙:"×ÜÝą÷e˙řĂ|÷Lł·µÚ“ĂL+ŕĘňm_J µz®{iíöźÍ/?ćň“Xî\ë“ďüV¦2Źł8±4Kŕ{oő_-.>Ž»»»¸ü€)Žcla L.#ÎĄŔ"*T1ľ'3Űď‚CŹ3fŚ·ś»ž€±ósˇĽíFäo¬'\E­î­† Wś ‘pžŕ=ŘÜ@2»G·?ĘŤŹÂ‚™TĘ)Ąç+jmOÔŞľCĘ5 jŔ^npˇ7 `vŇJ=BfIµ&äŰ´^)ő÷ÔƶXŰ2gŔfsÇjmźŢűhăÖK2SĹ´Jip<>|19}Ż2»§6{#­Öa=«Ł3([Wfˇ"ŁăW‡Źľłw˙ ®Ři w.ž~«29 3çҡP%ÍAľ{Z\Á"TÎtB!„J\¶dvű“ÁÁsWGO~mzúa©»půÁđđ¶8‚¨ç­S@„˛VŮe30®†•Ň«re #W;'IŁň¤Ö·h·â0)•€~Ű[O‹˛].߇qŇrŠ+Ę…‘'ŚŻúK4÷Şł»ÍͰßj•kí͇ãw“b×ëJmlžXč3™zŚ1 çşűl~@f:¸Ţˇ˛#łsŇÜx8:zĹçG1:‹‰•l}+J 6]źi‚«Ô‡ś9L1Ą7 dszj¤Ö÷»{/·>ť^|R]Ü ÓYo’Źj\âLitQęě©ĹˇV™¸bitŚÎ~ˇ(ǤÖ&ő›é%Hs¶yyďŐ×q.wÓ%9B°ôňܬm§¸’…Lë÷ţä_m=ôDÉcš-8Ây¶{«<şWÝqţXDŚÍCňRZ® L•Kt¶-XŚ=9¸|·Ľ8󞱍ö¦Ú\pe¨H™¤ĚbsOŻ;Z–VmXó“EĄ +đ!3WŔ˘ť<ř¸¶¸Ą47ČB?mÔ1µ,—úöüBŞ@€ĘhĹhM}z¦Řă¸Pp§e:?RÁ‡Źîä;G1Ö”ěEeţ`rúnďŕ±==•«“¸íśźżř_ě,Eh2;ě=­ľ/[ÎéßSËZ_ńV'Š rˇŐŘľ&dëÎGăłWťÝFcŁĐ\ÜńŮĹ‹/]) ŐÚ|i ^¶}Ä›Ă$SL@Ą2®”a‚qľ T·Ę¶PÝ+Ď×6źˇzËŹIZĄö‰Í¶˘Đ­lž5{\¦Çť$]đĐ@Ś@ą,“iiŐ ľ8NŠĺS­)ô#$Ł ®•Ć'ÖěŇč‘fBS‚-čĺI{ó©×=qÖ‹€Ůč«Őí"¨Ěü^®učü + ÂăJ­:ľXŹ1L¶•in7·ŔŘpŁ!3\°JKĐžÝĂWŁÓ÷úű/ĘăŰ”9О@ťi†q ˇ řňÚěΧ˝ĂWŮÎ)€y=Î'%‹Ęwč|‹+ôµĘ¦Ő=-÷ÎĺÜ€Q«\¦µĄ×‚x$É!¸BIv8­ş"¬?!*…ÁÝ'ź•jSw€ ”t›rŮ‘sĺKŞz¬§Ý?eŤ“íP!FAĎVrí­öţU˙ř®˝ydoööĎwîżsđäőřň‰ÔědŰ;:¸ŮĆ.­7|i1Në¤\”‹ťL}f¶ru Ô‡•ńî㏰uďUy¶OäęT±ťëĚ;ű—™éA…×ę˝lcćChZ·I˝˘ 2ţŢs­wšÖëb±Qžî띹ޞPV3¦|Őčôűg—ĺťS4WĹt[®n`°h”ľH„q¬]wď)_¬ă’Îĺl­9!MH»-µ1b­v¶3źßŮĽz˘ug Ą¨Ő¶Ść>&7C±ěM®úÓQ\+N +]09íW{fMo«íC¶˛HmĐeT/ç{sľÔ±jD0éb§±uźĐ;ţ„´ćKĄIťSlN«ˇ|1JABGř˘ Y»{I„•¬ł'ďŢ­·§ki:@*¸ Ö¦6VŘzđ!|J°0ąęKo~ă Ă抽S蟙ͱ88{ňÉŢÝ—öü3lĘÇŬÜ3ĺa3¨LĹž]@Xfň€4ÂY¸>čîľ;=ýHŻoú´ÁšÍBo˘`Ť¤ŇD)ʎŻë[—őíKł5łú»Ąáye|;×>ňFą·–Ă×ÝIZof«Ń´´äŠ®ů±HÚ “ÖěNutÉd޸ŕ +SiˇŔz×čŤ`z%BŇŮqyüĐę]rF?Śje*šŤŃćţ­G§÷^>|ďóŹż˙Óo˙ěwú‹?ú˙çżřëżů»˙ăď˙ďżýŹ˙'˙ë_żúâ§ýĽ5r~E=ˇĐrµŢŮî ·{łĂáέůá­Ł«'÷ßýřÓŻúŢ÷~úü;?Ľúđ‹Çź~őę»?ýŕ‹˙÷đg?˙Ł?;ĽűâäŢëĆü/´1ą¤Úc­6c˛u˝ÔjĎ÷¶NnÝyx÷ĺ{ď|ţÝoţúOżúíß{úí=řäë÷ľ÷›?úÇř{úçôçůű˙Óżřţo˙áţ˝wĄR'%棄LąBmZę,ä˘]ꎦ‡·öî>߼ýhxpş¸¸»uçéŮÓľűăź˙oůŻ˙őżý»ň§˙ËłOż?=Ľgu¶b¸ĂĚ™'ÄJął×š]rĹźÄlcrx··wY›[ă˝ęâřôɧ/ľőë˙gżó‡˙ěĂď˙ěÝďüŁ×ß˙Mµ>ŤŇ9„ĘFŇ +Xą0V!ł‡„RηfĺÁFkşŐß9ß:vçĺç_ţčwľű“ßţă?˙—˙ęßüű_üłżxüńW[gĎš“.Ű»§Ě0®1™źë"t6Śé¸Tµş‡íť{Ąáž5Üľű곯˙Ű_|÷7˙»÷ľűëý[ŻżřáËoýÚ'?ř­_üŮżřáĎńÁ—żvőŢ·ąB7FęQ\ˇµŠfĎs­Ą8)wwM{Tjoő·nť>zóčô˙ů;ź~÷w˙ŕOţÝúű˙ź˙ţ?ţç˙óŻţö?|ďg˙¤1:X Ó듚ąćquxLéţ8—¤t)×eŚn’+ĄŘ<ĄŮŚ^ł»›^?ůč»WŻżxýĺżó“ßąýě“ÉÉËîî#1ß[ 1oŻ$Eµ<Ý8>ą|üđŮűŻ?üô?ţŮď˙Ó?ůËżúß˙ćßýÝżüëżůëóo˙Ë˙ő_ţö?ü§?ř“ţëżő{'Ź>hnßGx;ÍXE{fZv˝;Yě]>|őřÝO_~üĹW?üŤß˙ăţű˙IďáÝĆyçýţďî&±*;Ń{LÁ4`f0Ŕ  zďť Ř;)Q¤(Q˝K–lËVÜ⸬KbÇ%q6±7݉ť¸'ëuĽ)[ß÷îŢsîą÷î98<E3Ďüžď÷ű™ň{ŢůŐsoü艗ľ÷ýwůŢÇ_ĽňýźĽűŹżú×űĎWôŢŁĎżµvöcńĘBqz+^źă”\,WéÍ/îť;wű‘»O?˙âóŻľţĂźţňŁß˙ńÇďü˝|ďÝ_üŐźţő˙ţţßEţĹWďĽ÷»kŹżPčo’- .’FŇąJ{fuĽ–Žíž˝vç›Ď˝üŇßú»o>ţĘ›/ľő?˙Łß}üé—_~ůţŻ˙ţč÷_>ńÂ÷v.>-N{E7“â˝huÝFČvÄç—RĹÚôň±˝ 7yđńçüÖK7źzńŐţügďň‹ß~ü§żţőO˙ú_żýěËĎţéŹßýţO¶ŻpH +%^éBÁźžň'ĹÖÂôňńµÝs׾÷đÓ˙äËoľüÖ»?˙ŕÓ÷?ý§÷>ţĂď>˙â_ţü—˙úß˙ fëĎ~óů‹ßűI¤4§˛{ĆŚn śj»×„ +.&ÁČĄXˇ3żyňĘÝ'®~ó©o}÷Ťź˙îÓ_ňűď˙ěׯýř§ýţ‹Oţéźßűđ“?ţËź˙çţçł?|ńü÷ŢŢąđ`8ßFŮÎŽ¨­n Ę,IWf›ýŤő.=řřŹ?űęŰďüňwźľó«ŢúéŻ~˙Ç?˙ő?ţë“?|ńńgźýŰüÇŻ>úěúcĎ{±ÚŁ4őţlîq†3’SĄś®Í—:KĺîÂňîą«Ź>ů÷Żľőë?ýô‹ŻŢüÇ_ţćăß˙×˙ůďŻţúď/Ľń>ţĚąëŹňŃ(»IˇŃš›_>~b÷ěůË—ŻÝşńč7{ű‡o˙ó?˙óWţóÇź}ţţoßĺőWĎ]ą:ł˛ˇšTÇN„Í0Źy$Ň+D9—/Żmî\ąůč­GźĽ}ď©o˙ý+?{ďźüę×řÎŹň‹Żţüo`w^~ýŻĽńö©«w»+űąÎŞ7•âµxyJÉ7ÂérwfmausucýęĺË?řÁđŁ˙ř'?ýčłĎżüËżĂńë?űü÷ř×˙·ĎżüňíźýüÚŁŹvW¶©-e)1éő‡3ĹFwníŘ©K›'ĎlnźĽrăÖ÷Ţzű·~ôág˙ôÓ>yű'?˙ŕă˙đĹź~ţŮçźňŃ'żúÖ?śąúH¦µč˘döEjÁě,ÂÄq&”Óůb}e}ýîŁß| lÇĎŢ{éÍ·ůţďľúó_˙úď˙ůŰO>úę«/óᇯĽöÚ‹Ż˝ľ˛w…ŤVś•W.’M1Y«1ł´ą»˙ͧź}á•×^üŢ[ßyóż|˙·˙úź˙ű_ýĺ×~ň“ź˙ä_ľúęł/ľ|őíwyüŮ|kÍ‚Kj+­1S'gĹD ™ÚB˛ŘYŮÚyä©gź}őőçßřá/>ř諿üő«żţŰĎ?řđŁĎ>űęOúâŹ_ţú·|ňéÇż~˙7Ź>ýĚţ•Űá\ ÄtN·Ú‚±rŢŻB±JqëĆCOĽńö?ţâýßýĹŻ>˙⋯ţü—OţđĎżýôůë_Áűüô—?˙ĹŻőë>xěéç¶Îßîm_#Ąâ°3B~“ĂkGť…qľŇYŘŢżtă‘Ç_z㇯Ľőöwßüţ/ŢűÍż˙çţţËůĹűżűÍűżýđ㏟őµS®Î­ěâÍdmÓ/Ä‹•N®ÜHfňŤi€QËíŮ饵ĹK×ÎÝ~ôÖĹkçOť;ť,¤YŃ“´¦l(«6aj޵`0ĆIÁx:UŞTŰővgyckisŁ7×;qjëĆî<|ăě•«gŻß>vîrufžŹ¤č`Îźěѡ’ÉI[ Úéf`·‡öú7·/ÎośŚ&SĄ\z}mq˙ě©wnŢ}â‘˙řGďřű>ţäÓĎ?yö•—vÎź­ĎĚřÂq6śşb>ÎSľđĆńóŰgoe›3éJłÓé..ĚžĄ±a'éÇYI )~!(Jˇh"I¦Ĺj­ż#a%Z­7rŮ,Ďú°ÇŠńNR¸8źěÂľä×FŚZĂI%ź ±b®śN¦#!II K«µZ!“‰ŐZ 9Qéć›´cA•›Đ»ĆµŽQµuDí´xĚ(xĎ$#äÓ…ľ/¦ąKW®;ľťMÇŐjľPě¶[S­j"U´@îĂŁj€zäđńČ|ٱ žÄG©0+f9‰gĂÉĹ­f9Zô‹‰Dş\oÎ6[3^–ŤD“|@Ý>­•:jpZ1Ŕ,1ˇ"ĘgńZ]«ă50©i&ŰÜjŻ\©Íî{1«Ý&„h4ÉńA'Jél(¨"J*e§öejÂHüŻoŚ›a˘"§eśôŠM…•X4Q`Yżq“„— ¤|R.. ±†~đđH´©PőG F´Ăj;P‹Ë 3q"Mű‹»·u¨ŕ-ćKá<NZĎ%f]lfDŹ]¬ÉĹŚiˇ1•U§w޵VµÎju’Ľ”#Ů ç2¤wňr(̤ë¨|ç$#&›Ô#Z›GecUvź i ż—\žp¬Đ]Ú<#Çň“j# X'-#x@ŢaÜ<˘u9 eD ýíÁ‰!•"B@»ÔÚűŤ¨¶Tľ?ѱşĹQ­“ WÂĹ%ŕy¨»f§Çl§ęťM” +1‚·˛ł9(PĹW†ŞoT‡ř 0a4żőFÚlbF*mF*™éłl|zĚ€ş0&žíXţG4cŽ~NnTgÎd;{7uxĚ6¦˛Ç3=;:0n3âX‰‘Şáü˘”šŃ™Č‘1łőť¬ĘD]Ľ•[ÝM&ąŘÔŃIčÚzTcŇZG´6 „„;s3°7!'§”Â,.d1>k#Âv*ęâŇ–ˇdÄ€Š_Ň3JČDÂD÷ĄqÖĺ‰&‹K‰ÚÖa•ă¨ĘŞuP°/íQ:”ÜŔY  ™p®¶đé!ŤcXk3@f”ć—ąÔ ©Á %+\8gpyAÉ©l˛ŕQBjFĘ;V"2¬sť9Ń´ ~••3" ę̸DŠJ¬Ü¤Rf'‚ đŔń#¦wú\ž¸Oi¸|±Ł» +endstream endobj 33 0 obj <>stream +ŃđĘM&\‡Ů”ŃqqyµÓ?bpŰpQmĹż>¤;0lÔ8€©Ť‹ÁŢÍ-ꝬÎáűĆmH‹\36"đfR\V™)‹[Ô?褧'ĆŤ…Ł|˘-ĺzVBŇ8GŐN„”'µČˇ!áqű 6f Ͱ(DűVTŃÁŕ5nŔŹYA11Q ž8ďűR X@™­C\Rń14fVC;”)ݎžČđ$đŐ(éI ´Nâ˛ŢhŹ +·Lä¤BRRť“bnŮéM˛Ń8ů!µ“ńg*S§¬t`ŘčôĆ6MňźT˛aŇ}ŕ^gD;3'!::b$\Ţ„•R`.ăŤtäâ)T'ôÄ$4LŐ@Ă“6‹‹C1¸Ý´éU¦đ@éиӌ@ ÄŽęˇ «ç~Đ2­4©éěÔN¨8‡ň w:Ő\±R!„Ka\ń$Poń¦ŚHüŐĐ¤Ő ™č™´zu°h&ăÁÂFkýnĽą«G‚:Ĺ “6źťHÁ*©ű#o°D‹eV´vÖâ–'Ś °ŤCö1µëřŞCsá +řC-äÇŮI+Ą¶Ń: ĘňCĆalÁ$«[ú›Ă“§;ĆyĚä5sĂFĎ“ĐÜmaýR}őÂa“{ÜÁŔbŤNÎĘ[rý›™ÁĹB­µľ~î1 ťpz'śś‰Ůé.6™ÄҤKš`†ĂZ`(”Kc\Ú5čńµŇq2Xtx‚0üi›@‚E2Rqr $÷Ä{BaŤ Ő”®™ +a\Â+=rŃî‘MDĐ\edĐżĹrpŇä 5pgZ, Ěŕô5đ Ńjł{Ěę°Ĺ“†5"XŁĄ +-ל”,Äk ĄŹpĐQČ›ŐPjó—0_ň¨Ć9¦‡íxf&1ÉɦÔ6 +ŁĄµťR¦{xÂ2ˇ‡Ígs ±D%“‹I˧W9¬¶éŕ ®‡y'“ô*M+)Łţtkĺ<ĄÔMiŽš€{Ú©‹Žq‘şšÖ;|ăjČ…Q_ňŔ„ăţ :8Yń¨Oi‹‰.!di©¨GüĂ(ťË1)B,ÇŰՕ˨Ě>_ˇł™¨łşCă& +Śů„‰[Sˇ1td‹”_óKVObŇáW!AL®+­ÝÂÜYR*kś~„/‚1G}i­ťÖ;=*#ˇµűŔ´:4á:2iť4Z‡P*0A+*čě̸7Ó@úşË—=BöďŽh‡b"0ˇ6ěÉÜľ[>8áBkŁ ë&MipaqĐĹĹŞ"g¦XuČ‚pÉĘ&ţ,—ť%›`µŮő«k—ź¶x;öDę䬜 ečXď°‘Ŕ<ŃĆÔ.%–µŚ› °'é‹v+ó—ŤăR˛ľzň(*XČŠĹůp}#ŇŘŠ¶OD»{d´ëdăˇxýˇoľTY8¦¤ńŃ€—±@IČ,‘RCë`M8>č+r1iÉÚ˝YŘWd•)6ŢŐą¸!µ –óţ=&\vzNOăsT°«¬BLO_Ľk!eâţ-Öx¸neS:LŇ#  Ëŕ~x=,bţźrłI‚K˛áĽóy" ®46/bČ·ŕ’Ăů &äM¸4iŁ'Ěř0°N=ОIpĽX+5{ÎęË 1° ˘•‚ŹĐ#Ľö#l +e’Ŕ¦Gôč×F,UЉ2!A„+RÁş7Ň"%05*0ö1†rZ1"‚ЏAÖ•«:C2ĘţĄ{”ţúaXă2!°c&!:<¬uií^śOYăňD0_:› UWÉxJL,:AŽ6ddXL) vyR¤P§m,Ź›˝ĺŤů˛ztŇ„ťt™pá Ěä}‰i9żBŕ¸É PeĐ‹‘&ŚÔŕŮdL&ĄŞîÍ ýIFŠŹ›śL T—ŰđęĎŘ™ć1©ääSR河ôŕöżů\o?7s^,-ąů¤śéů3S7â V\и¸Ł&7ÂÄ3őM\Ěž°ŰÜ!0€N*ÚZ 3-Ělśą sX(ďlĄű§23§•Ö±Pm +°/^i­|÷Ťź­ž{D‡řěx +”T—rkJeŰ-Vą–¨o™‰Č¨tzŇx¨íM,K'R˝‹|nÉDĘ6\ŕŁu P{Č7n§ž(%•éH ńçŘřTşşĽőéÚâE-اČgćô<ˇL1‰9j $=ż jŇF†ń@Á K:›Omó–Ó=ZĚÚž0S°GÖ"Şy"ÍDcK®¬Ůč°ň¨x'\Ł$·v]RŐŞ‚x9jpOšÝ&L`˘-\ŞŇsRvÁN)'lG5Ф•Ö"j ¤Ęnˇ„Ę&Ť+d¤ĺŐlž0ř`‹o’×˝r%­×§6mx`Dă0»|€P6 4yX‡™´‘áK©Ěî ŚzĂ@x™,äŘDʨ?ď‹¶.=čd…EěTŇŠGĚnEŐvż“Ž{ĄJ$7|r+&¨Áći`LçÁÂYť4ŚTŇ»řż98ydܦł±“|G…Ę@ÉídXL´99{h\7aBŚo8©ĎFÇ+ůÓóÉîi.9Ĺgű¸Ň ăOr*_ ˘.ęµŐ«·ž//ž>˘v\¬upß Ž#m3J{ÂJém$ä‰i!~°B̡ţ”?Ű—+«RiŮĹF@xOOCÄś[Ę“JťKő”ĘZ®»S_8;żű0ÂÇLn–WRfžtlť±{>ŐŠ‹jŘ?¤Ă„ôB¦>;{.PX†ýł'ˇÇeB,FËËT¤ćňg@A|­{ăMw°Ŕ$›B®“é¬ ůľríÍĘęµÄôY,ÔÄĺ.7UżŇŢ:}ăąpľ?f&q©é`Ę·Ę®F*»ÁŘěH)ŢHMkŁăLZAÎť«/^Ú8˙tĽulŢôĘŮúě޸ 'iĄľ›ÚŤ÷N•—®uŽ=®Ô÷€pÁL„ ě,f~'›„|y5$€­˛Ń ě <ŤhČ0hŃł1iw¤-ÔŽs…5+›±’Ao¤LH%„Ϣ|–ŠŢh3R]cc-›[ÚĐlŕ$oFýŻF °$µÁĄwPNO¸Ľ/5Č. Bö=Ń^˘}*\Ţ${xŇiŁâ žbŮA¨GůŞ ŠjÉ0čúĺî±i7öXGeĄ˙ćŕĄոŰj,”âÝţ<ĘeÜ|öÄ5Vŕќʌ˛.2Řň˛\^ •Vę3§ĎÜ|Áoˇ¬Ň8.ä—iĄ]:UîďGę[“°DŹ lT ˇ´PaPNFÂĚ*ĺ§7 +ö8ońé~°˛Ę$§Yą\ďmźşý’ő“R1T^‹7Ź…+«±Öńhó?;oĆ©ŕO´Ćô™ € ±ĚŻ´¶nggĎZŕZH‰ÜÁ 3bĆ­T„·BŐíöúm!5ĺOuĂ•E;6ÂvZö%;Íő‹§îĽ°yůéÂü·T$* Ű×=±Ć…©/X\—pą#—VË3Ű9݇…HíźZ€ą<j.Đ şŐůŐ•tkkÂBłjś>;łďä1©€qŃ'_üŃöĄG­”8jÄřôbtęl¤}ĘŁLMXĽ +–š«ł[7ż1ę0"©tĄć‰ÔâĄěŇUľĽ®§˘\¸|ďůÎm] +|©~bjvďńěôyť+pŘą/ +jŕµPj—€‰ŰĄťL0Ř)–a6 •Mö˘ťÝôěąĆńGÚ;ßęçŕ8TěîpŃ®ÚÎZ\ĂÇŞfÜoÄ|Řçâ3±úfińbiőŞŰ—,u·Íu‹W†Yˇ°ŔĄg°`5ZŰĚLťâÓÓ ĄŕB1TXR}ŕŕ\ş‡†ęf2†QâăUQč… KRq-XŢŕłóÇ…¬R[&#e¤ä*kfZk˧no]řfkí""¤ ŤĄ37ž ĺ¦AĘRjÇ—öźÚżűVió*>kcâc +cÓ‘âĘäŕľÔJČŔ"µ.?Ŕ6ŢÓąřĂj—Ú浓 +Hwf2bg’T´,\Ňȶ–—OŢb”ş“Q,„ßéĎ8ü9PZ±ÚĘâţ˝P~fÂN™‰Pzú°QZi©ť &(™^ˇł lŃNFPˇ€ůÁÓ ‰oŞ/UK gŽß|>?{ú°¶Â%ű´Ň|ŔPĂ:rr0—‹d ówĂ•Ącý@~Óë3±é ŕ8/ĚĆLXŔJ†fNÜÚľńěôÎíňŇe.ł ÇĂCúA+˝›Ż„‹Ë jÚČ(ëÚČ(9ą¸¬GĄc6Ł‹‰út }dÔđw&Fô¬óĄ-±Ľ%•6 :mÁdFnÚ0ůđiD kÜĂ:\çäAľŇ9}`V–¦·@öV;YŐ`y ‹ Ťń)=&âR‘Š6ś|ÚÉe(Ąëw0±Qś‰"ž°đ Ś€qeđ´«4ă@čM—Wäüô ÓÖÁ!Uă­ít˙t¤ľâ—ó;çî5—Ďęń€TXhm âcmĄ°Ř% „"!·PX¸ÂŘ&TX»€†Z®@H“ÎÍ]±zŇ“6—śQTý˙Ýŕ‘:˘†-î`Ľ˛bFřO|ýФŚ€Pö&gݡ†…TŽęhv2Ů-vđ¨^căt΀ +ڞSQÝŕ}%\]Ei%š›vĐa`F`Äň&›Y¦cÓbeňhAv…ř; &ÁO´vFkgŤ`‹ÁÉČĄŚŰŽŰ±ňJsĐq}Ň>jŔ&^Q +*hĄÎD«b˛žmmÇý©ÚâąÚęĄäÔq&^‡}1›W1îd¬\ČŢFr÷(łrĺd˛s¶˛xÓ6hţ ä%鋵€iŞ^ěłPqZ鲉i,X(QÚʵ6\tČéöÇĘóťÍ‹g_9wďԝ鷺»t°˛węˇK=‡K9 ˛x¨TÖr˝łŤĄkOć ça !Ţ›śfb€+Ł`vOI¶‹č5捶XBĂ5›ŘH ąhe±Ľv °¨ne;g"…•ĆÂŮćŕŕ˘ĆÉúB… w_fSC:Â…ńN#ţw ę;É H¨ě4Žbn!TZ.Îî­ťż×ÝĽŽJU_´˝yúDG ŔF;ˇüXą¸†[#FrŇB ŚbB…AWĂFT’Ëk©éÝPyőgíDPJ·5ŹĘîĄ5·˙ÔÔî˝ŇęÍÔĚYČ_809qeu˙ —?uHíłző8 +I"•ę Ą¶{Dí:XÜTŮŢH3^âS l¬RrSíL¸TfŞP_nöŹ ÚÄéP=*r]ŞnÄ;{@ŐMşü‘š’대J8 +"^Ť6©.̾КgWŚHňx°€ř’ţT/TÝ +–7łý re“Mt ¸Đw®łr,ĐşAB(¨µB!ĆŤnP± Űăţş #fő<âI9đB*R¤Ň^8ĺäbđ˛ł{ËžYľôlvń’'= >—2˝ąíÎÂ9Ź\ŐÁśbďqÄKb´ćŔťgĄŚWĚ`q‚ôHĄ4NqČ€cRŰčI3~Te´Ú¶3ŽÁÚ! .ź™ ÷'łťŐúÂvwăBďÄÍţńë 'ďÔ–ÎËŤ-;K•ç'Nů¸aÉ`Ánaš'ŇsPI­ÉV ,ŘK§%ěDÔqfŘŻ¶P„/CdcŁž`ÖJŕł †4®qŃz¦±şqúaZ.řň`Ĺ™J0=džŰ/§±łb¬žŞ,©ĚäÁ1«ĘĘ0™’j`F¸4xĄZčn©,ä„ipa%TXÉő÷‹ógúÇďH…0÷ íµéŤË*«× lFIc!-ĎÍĹÁlJÔ!*ͦě§Â5±˛–^¸4µőP0Ý›Y>ýĆ»ż $z6?¨űRK±ÚĆńËß޸ô,ĄLš„ťDŠ`.k¸/`r=ňë{CÎ'L$pŔ§Tvď8€)+;fńémÁśÚNVz0  $tNŻÍ +Ţ ÔĹĺČp Ué^´¶(ĚĹĄµíË/Q±6.çŰŰý­‡hsŇÎj!Ń‚GÝ\« €!ę!ţ‰3S*›×Ír…h©0µć‹7Ň €{WÂŐĹHm%PZÁÂm“"•ąŐóÝŐ›vZ1a:Č 3I2XAů ÜkM ™Xa˘B“ę„ú«n¸g^ĺŕŔެԤ™s8ďtÂw‡`>I„ +t¸śi¬Ü{îű/üŕ7ŐĹÓ„”ółB~>?˝—llT»':s{¬śăä®zBUFiĂl^măŹL‡ĆWč@iimŢ1=qxÂqhĚ2¦' €ëĂ>ĄYšÚi/ź·SL´ŇQ&#Őpy-RŮd”&«rw3Y]6"ť“qő¦˘ŕŔ<šë% +3Ă“ŽQ śŔ&­îŕ¸:oĹÜ—ćcM#äłă!B°(dúŢÁ=u\¬|şÔ٬Nź‘a„‰:IŮŕ`l¨D_“MÔQŮěXŔIG`Ńk±É)đ>NBTҵíýŰ ®»ĹşRŮŤVwřhGNO É)Ë iÝž@6Q÷Đ„UmóY‰šn­<ÜX»CÉŤať›˛|¸hpxţnH÷őIű™ŃąB0“ ¤¦LÔBu.öŔĽ†őČËKúHą.–Öýą%4POF·ôTŔ›hÄAÜíźžŮ~xóâ·w®ż4ň1,ĆýiKYń0GŁF÷‘ ۨŇ;ąq3sI‰Ç­ž ‹Çčd€+ŮÉ)§sÝőő3ŹT–öŚ”@s,Ż%Z{Riupźm˘>}ĐĐŔ—r‚-t‹°<dÔTăD®»GG:Ćá–0>Ź J+M8đR9x/Á0ńÔ9HOqńÖÔÚ…ÂôI»'jĆ|L(5˝r&’›4dĹD#2ca;ø´ ,.~T Ť Úń9ÁpŤhśŁ:áĎŠ@ŇssR¶O +é™ő«ąÎq;Á•Z|ętvöŘ).Úě,źOŐVł#l*ť•Ňł´x_lÔ°ĆůµCZ˝Ő +@kÇŽé‡5ČŕĽ=&‚ś©˛ytvvpvČć9ŞuZp ĺŇ 'Ä«k>ĄjiT‡!t”• +*“{hÂn‚8““ÁĂE†GuȸΥ1_ŐVřČq‚ö'(źB IĚ—’Ý“Wź™ßľbäIRbxz¤´†± 'ÎcŢĆáŃŁ.oŇ_"ř˘?> y*NůŁ‚R çoŽč8›Ó;|#ZdLŹŽ›qÝ@*}C*ű„ AĹ‚úрɅ˛.ádâPSO©o°JaaçzkőbޱQšŢi¬^,-ś —ÜŚRč{ĂEťÓcw »xǤq2Ág¸H ä±Lóě©2ąXÔ— +W—çN>´vé[…éÝS—?uëy_şçd“0—u±iRŞŇ ‰Îąüâ _vçSŮÖńhc“Kt¶XÝn#á"='ťřĆĺQË˝jnđ_A;XŐçöe"ĺe«X0^ÎN­ě\»ýäwVĎÜ ŐVî_-ö·nv6ŻŃ‘˘•}‰©Ňôn˛¶âŹ5”|—Ä5ĚEF.m„ůI+ â˘Ćć3ŔA«[†č88î‡FÍcZXgĄh±Ŕ)]Ô_†´­öVNKéě‹r˝Úڕމ; cSűT´Łü±LóÜ=›74jBőN˘ŤŘńÚä±#A&kőOôׯ5ŇÂpyâ\˛O†jŕPSK–¦×/^¶óĄ]laăN<č‹T.>n@ÜžAFŐŘHŤ•2:}zć­hÂhAX·/¦ł{@ĄĹË3ť5€*gĹârŞu(•ČÇęĄA‚uňZ`fŹĆ⵸ĂD¨ŽrÉaŤkXí´ŢżaĆ2¸Fđ ÖŚMč‘5„zÂn.öŤ#šŻžüÚˇÉC#úQ=b‚ýŚ›”©-HɶƄy…´őcBŽRš|fV,­fűç2ťă˝éŤ7~ôţÂÎ ŔŚ€†äŇ‚›”Ę&f]ţŚáq&Ú[ş`!ĂG'ŚŁj“Ö‚Ş­äA‚ )!|ßA+¸PäRÝtg˝Ř?‘¬Îź˝účÉëOp‰Č…ŠëR~%ÝŢël>\]ĽRž=ËĆ:r˛»|âJę0ĆBEl~byFéRrŰ…T ŽËc˙¸ĂH‹ŤŔYBf‘OÍQÜʱkĄŢ.ňéA;—ÔÔ~můúÂîŁ[7^JMíd[kkű·ůĚk2áĆgśĄŘ3(—q̵q3f@ü\öH62 ßNDÔ`Ěa‘đĺĆŤř!•„L™¦lnHFî‡đ&&¦_Ś•…ŠŃ‘fkůRµ2U^HVf 6B‰@´¦¬0Ŕ’ÖÁ›\A”Šf+ËĹö±Cc6“‹±ąýÚA>‰ˇÁ +"–śŢDĄ·]ďďťĹÇ*śRĄ5ĽĄ +űŇ0MűéʂʌNQ“‹w‘20J“Ë7©ÇÔ& (L8ŐÔŰHś‰”ú[ {·ćOÝĺsK.ÉJŧWÎçűżĄ§Ô¤;ŚMŃb•–ZD°n,ęAx…Ňěi!ŃÔÝ ś&u¨ÎBÚ`Ţ|bö„,s™Qú· şĆíj«×ŠF;gG%Ř“’ťs·žŃ8h'Ł`B–Š6ůüś\]SĘs˝ůíŰOľV:p8Ű9‘źŮóóľä ¬kÂ+ĘĄ«żF„+wděШ@âŢ­¶z€°\¬R›Ýؿ퉔|!Á‚[ĘůÓ-ąÔĎő·â­esÓ±ćq:ÜđMö1!Ď*u*XâSéĆ*-'Ů:Ŕ="™qÉJÉ*ź°1¨/GËM u0É1;w@©ś>©xŁÔź'ý™ąµKĄ©-F©rł‰Înaî\wăĆę黕ĺłB~¦9ňÉWęŤwLdŘ,‘RK.>sUî)/Ó:>X3ĺ~[`ĂýŽ Z‡a˛x ťźÚÖ»#¨Lwd°FEĽë}fŚOďb5€ŕlĚW;ý&2ęKÎ%ëÇBévmúxoűćňůÇ—Îsöä.ŮŐc˘ŰźNÔ×óÓ'a&ę•K›^ě¤"*‹Wmöęl¬ÎB;"?ç“«_?¬Q9MNÖ`ŁŚ6ŻŃ%Şí<ćËÎl]î˙żFt8ČÉžH›Oö-Dô»b,„`!ŘĄŁÝ›7˛sXŹW…ü\Ľ=h‰ ňŢý{CĹ50ń­ŢČmĐżWogÍOe"–ݞŤ›ÜV"hˇBZ, r±ĄěMTť|D*ÎVW/G›[ńúzvj'ŐÚô† ?۰ˇyă N N¤‹™bsůÄůG¸hăਠ˘#ŕJ*÷1ąĂ2ćdbr~ń§Žh`¦ëŃF)ůAőíO:ó§Jý +.(őőÖćó{÷f·ďÔ÷Ks{l/”h>öÂŰg{M‹IvJIwvŰk·ő˝Dý$ď0Đh(Ů ÄܤŤ9¤Ćkđ +o@—ĺfw.ßŰżőŚ’&ŚÎ-Z˝qR®¦[›ŮÎ^˘{ĆáĎ;(Y®,­¶3±ÁăöLŇäšńPľf°śźmđ@®‹ËBt̂à HˇgÁCzČOÉ•Xs+?}zzëZcéüŕÂĄÜżřČKoý4ßZ™´qn ”±j§b:WN2…˝Ę¨ ÓşX2Xcĺ–*±A[ž‡ŁĺĄŮĄ˝'ź{}jől{óęÔɻ٥+™ů‹ícÍż1wüzĽ±ž¬.ľţÎoŻ=öОRÉjaŃÍoůBU ‡&`Z*ß‘Iűá1ó×iŹŚ9HZ¨¤':E˵hiŃ+—1±@EŰD¸IE»LjVűČP^.΂áQ*ŃćFań|sózcëVyíF¸˝ëMöätëÔÝ…ťŰ¨ĂÄRtpWÉ[ BÓĺÝŤÄQ5¤\) F Úî1ą%›wĐyF.ÍKĄ™dcavçćěî­őóŹv6.ÇZ[\ł{ăîűç`m¸¨s î7#‚Ől÷diö\¨°„ +yŤ“µßÁ„I©ĽÉçP‹K.… +kt¸:á`ÔŻ‹‰¨QŮ)Ŕ€L´.Î%j‹ŕ+«Łl$ŃXÍőNd:[R~>R]‰T–˝‘Z(Q_Ý˝Ú];m%%€oŃÚĘ •M¬í–j•FMnę_ß˝/Í«í°0 łQiđ…­fN^ľW™>°ĺ3ľÜ|°ş^ś;ż}ĺŮsŹ˝ŮÜ|ⲅÚÂúŢMÜź5-Żć®V—o'Úç}‰H@6,°˝˙P˛¶qD‹Ť‡µzlt|`¬Ą•DwĎé‰+µţ6řM“pKeB®)ĄE`©în0Ó0šď{Cĺ#5¤ATîË{”ź6"‚ĘJyär˘=đt”K!ľ&f¬¤Č…ˉę˘GĘ•ç÷—Ď?‘ęí†Ë‹d¨č Â(8łş˙Č­§ßj/źw1).:íć otP:xD ťpŤę(bzŇJţÍ!őQ4aŔuVĆ‚…±@ŮFĹ,î'WÁ»Lövű§î­\z®¸tŮĹÄÓ­­ţ±[ŰWľÝś?µső©ĆÚ…Puľ´|>9wN¨n2óýµkŰź®/ťÔƧfâÍ­HeÍ“łyRc÷Á1ó•ÓEGśTHď(DCި;X C%ˇ0+fO\ßľö”XěE›KůąSöDŐŤTçLyţšRŰ´’Ť\VĺÄÄÚ\j–ŽÍ°©E\ną´ŮT9h›půó@Xlň‚AËh>{ăÉm8 xăăB¶_9S[ľR¨*-ő·A„uq©´Ř\»¶qáéŮ˝GĄĘ2›¨;™ Î+ťĺsŢpÎî âˇ2*ÁP¸ůę‰&Š3BĽaÁDä7@ĹYĚî°Ů-3ýDmřȡ1«Ë€C‡+Ţp)ŃXi®]’««v:˛¸|ęúÝçůHÁĺ‰ä{g2SgbŐ->1§v˛c&·ÓÜ;w7ßÜ,2+Bl†‰MÉĺőto?ŢÚqł±3—=qţA€đfL$R[˝~üÚ +—žĘf< ‘Á§^xsnăĽ⏪-`ăłb~ ó—†´ń»ÇbŤÍQ#aFE;€F†*BvŢźžˇ„ôŢŐÇ/<ô÷B˘cĹ%jp*ľ«®ő·®î\®4wÎ-TP_Ö+7uwxŇöµ#šCŁVÁ[!pęĐ#fł‹ §ű 3¦EUfŻŤŚ –…D7—ąÎÍ'˝±f˘u,ÝÝCĹ*+ ˝ÝâÜéÚŇţć©[—})×Űâł˝ősOîÝyµň›Ŕ/®Ţű~ký&m% ‹;ŇťI'c@´X"|1ŔąZíp r¬VÉ?ÖC^  ”\Vš›‰ŢnsíJuĺ—¬÷6ÎöĂÍMąąĺËΑĆŕ®ćx8—/×7zdg mőĺÁë'¬BUëVľi…E—?ëWÜ‘&,T©ŠŠ(ź5˘ lű06łŠ“ )ŐµöÖťÖ±;Ĺ…‹é©ÝH č[%jÎěŢ äg‚…ąć±ŰáÖ OrĘŁÔ±NŻžµ“ŤĂ.­rń)ÜźóE›6<¬w˛ŁbM”± ©a#â'„tĽ¶ÁFŰ&TŇZ˝bĽi'Ť 3@ ů˝ëß:uíéÎÚ%Ą0ÇF*FČăÄýŔ§+Đé1ŤŤF¸D˛¶š¬,…2=••<4nUYi±Íĺ As± +BKérź g†µv.\k®_ž9őHué¬T\‚ůâŕäżqďŮÖüIµ ,Ťń9 Ń8{ň&Řç˘BéÚ";`+ÎÁ# HÔ ŹŇöD;P +Ćk—î<}ćúÓźqy“Ő…«ŮéłJuEĘôŘ©¸ĘBa¦ĐŮłfX‹8§57źE<Š —ŽŮu˘Ú^ýćs˙0®EŹŮTfŹŽ2J'ž%»¸WŞĎnŃÁŚiĐž«ND§!Ňźj®äú»…™ÝěÔ1ą4ë‹Ő2­őމS[ç ý- žÁü,mĂ|FŐ+ÓŰL¸2¸•%0ČóP ;ir[řžŕ“j+ˇµ0ő§şŤŐË«ż=}âvy~ozqűŢyo˙ćSĚ ůŐ\Ľ»*ŻÇšŰÝ­[›—ľŐZżšë;÷đ‹ždOO„ýůĹx÷djúÂěéoÍî?U]żVh{ń­_?úâ;&2˘†„I§_ ¬lÚď‡ ++ŮĆÚéËŹĚś¸–źßݬ\ČĎź’kKĺĹÓÍĺókg=ůŕsŔ 3­ŤÝĎť»űĘâé»Ĺůsb~îí¤ä¶ Şě´ŤŚXH¨"%Ő¸XË-äńP̀ʤX¶ŕI +˛ľ°BUČ7˘~_µąSL´"g›ŮúĽR^ä’ł¨PE|ŚMŰÝÂČýU¤AIX1ü‰Îé,`ő"LŇËŕ‡®„ú ľYĄ R٨Ům€9Č2Ł´ö{ĺ¬j—g÷Z«—XĄćbÁFžé¸Çf„8^_Ú—čŘ ŮLcôP@gg5VĘ sF\J¶6[k 3{BnňeÔvĆ'‰6D+¤sy›óE—4 Ľkđč>i˘,°pdÜyxŘzpÄnˇ"ţôď +ł{Ź÷÷Ź×V[Ó›ß}ë'{·žđgş±ú +Ű•ĄS»7źyüŐź=˙ĂyůťcgyŻ?ńŞXZ‹‹ľĚĽR;ŢXą±váůîńÇ0±B20řŮ="č`?ÄĆěL‚Í,篹9Ł”ş«´g•–?;í‰7A¤äzľ··|ć BJű”Żăr-×Ű/-\őçÖŢHţl˘O+m‹c‚i'­o5!ˇű‹łHV/ĆgőMR,Ý"Č×–Żf¦O2‰Ž'Ú$ĺ˘tˇ±Q‚ ńÂLR¤T B6Z%İįÍËńę"F*Tµş:›Ç +ÜDŞZQz&R1!Ł;€řÓlŞ­ďPá–ŰźĄ| ŠOŔLŚ‹TőNßDŮ„/Ú Ä2 T#ÍXđČŞÔE+RpaÇC*3 Dxpg C˝QđĎ 1¬CGÍ´•žč`Ĺ>éO6Í5;Ť$Já|—SbşÍ§¦%ůS‘‚\śĂýʍ°ŃĚF¸x‡ĎÎ69çóR˘JO«ű;.ZP^ç`†ŐŽCăw ś¤ LćóÝă €|OÝNuV‰`BHÖšËçäB/Vę…óS¸ô9†kľH]H´.®”çS­5O¸ ‡8ťÂDňB¬+ő…tKŹđ±ÚŞ›ń§zµůýBw3’,×›ýË·î5—¶}J±1żł}í‰ý‡ż}á±—ÎŢ}ţôCßZ9w»łĽ}ţĆÝÍsws§·.>U]˝^_»ŐŰşŐX<«Ż»ŘX(^żřčw+çŹęĐ132Ą%×w˛ýłî@ÚHܸűĽ/\6 ˘™VůąXk»wüáůý§+k7AŚŮ:yíć˝—s˝mČ—¦Ł-X¬ ÁF±néě3ééÓ:|ęňŁŮöƤX­vltዹîiŃąH­6uĽ˝vj˛˝I†+6OŚJžh=Ń٤˘f¸HäIRĚ‚caŁ$Ř—ââÍĘâ…ÓŹ˝Yś=¦ą?9¡Ć2hapú@D±‚}hmbž +¤B™.ŘťÔÔ6=Źř v0u3éa ęHů>)•A…h!vDčq§Űźwzb*«‡CZlDďž0SÜ&ˇCÎÁsz÷a j$Âl˘ëĎÍů2=6Ţö*M=ô“QŰI‡GÂĹl¨°©mÉŐM*RőÓáL‹WM(Ht’Ý˝XóDŞs +f°6JeÄąŚVôvjXmRŮĆ nŔ›EĽ)‚KçÚ›..J‰™@˛oo°©.)Ŕ$Ű;(Ő9p ¸X —×ĂŐcžWToabȬ»ů´/ÖˇË`ÖëśĚ„ÉŤ1ŠŃĹh” +ÁTĐDăĹx®M q>”Î7fË3«ąÎl¤Řece_¦)WćŇíĹĆĘ€ˇz˙ŘńkO7Ö/‘ôÉE7«8pŢSŃDeáŘĺx} °Ş?Ö gć„ä”7Ň´Óa‹ gýâňń}ޏĹZ »”jďô¶ďĚť|¨˝qUĚÎxý±+7{ç˝Oçvn bQ®m)Ý3ĄÍ»'ożş°ű`¦µ$Är=őňÂÎ-­Ë?j¤Äl¸q˘0{~ýÂóáҢśh^ąóÜîÍç&ť> "ŔÄ”ŞS›·¶®=żqóĺ@a)[_ľţÔ›ÉĆšö1rşó˙‘ôžßqdgšç±gş[ꪢ‡O¤÷‘á˝Ď0é˝7H‰„#@€@‚ž,’Ĺ"YŢ©¤˛RIŞŞVU«4ÓRËŰî‘Ô­ťéžQ÷ĚÎĚžłłsöëŢÔśxŔŚŚ{ß÷yOfŢ÷^]»úĆń 77ď‹ŮŃŃÝ·Sµ­gf٧fŁł&BfP±ěÔ¶zçďŃJńÚť—Ţ˙ÎŹqąkm®°ÉfÇbq{íÚWwî3Ű»Á̛Ͽ{ăÉ{Za ŚůOd–’cT†Đ»§É)7¶{éţµ»Żú ńK§żtŇőgO»źšŠz€y¶Bh°_ux‘ĐŞŚÝÁÔ +đąaz˛™&€ÉŠ“ş”ŞQ))źáłCٱ[]ą2ĽřP,®FŐ©®Ë…U/>Yfµf”;ĘcśĹ*Ů`śr Ś–ÝAd!DD¸tTČű&Kü +Q.ç†8ެŐµÂÚµŃŐWűŹË›÷µÚŢ|„ +!3ź +đ ;®4ŚĆľQÝ–’…·żńůWŢź÷â'¦Â !ŔżŐľRŮy "Ä"Î2rťˇŃ€yGÉűUWsťóď0bj¸q%×ÚđŔRŐ©d#!P!„h—žs‡„ćÄ@$%01ă .s“ŢĂ„REYŁ·Ľ·yđśVZˇí†ZZSJ۶äŤó JŁĄ´7Lú"Lś0Ę!„‚ś_ ÂdxµÂÉ…Jsł·yˇëaĘP†’\AjrϬ‘ެ,)`„§3<‚'ŕ/ÄlBHŔŢÔr!\T˛ÝlwO+o éĺĘđX+ŚÂ¸VíîäšŢü`UŹvĂ©(U¦µ6¸ĄELTÓ˛Őó’Ý&űbłD0?!“ +ĚçĄĚ’ęt6€Ę ‰Éݧóŕ JŤJśÔĆĚŕ•)/08D(óž¸ËŹ-Ip!Śžěókµ›uGi»şŞW–ýʰ&c”q)ËjEĹ,ŃRĘÂ)1m{Aôǰ(|Á%+”RŹĆÁfńú‘ÉOąŤ€ż„!žLśµÂ %_u‰1›0—†ůÉŠH„q1+$‹0®,Đssá8`u"yr:tf6ęňÂF“Śb¦ąę˘Ť ±»±ž¤JŚËFHfäÍçë}Ů®ś‹MÖ…eG•ŃŤöîóŤ­;ľĂT„JFP>†ň ›ł©”lGÉtPÁá•4ŻeJóĹřă€ç%µyKá8 †— J°"ÂhJˇ‹jĹiQYTłçŹ÷Ż=âŚHUŁ´^ě_ÓŠŰqĘ +CŚ/„‡ +ABWC0FD2>G%۸PŚ"˛¬ć÷÷oß~ń ©y`.LhAXŽčĹÁˇ¸čśĽ·¤ü@5$-F9,âBÜ<Ě™qRÉ4ÖSŤM˝4Vň«˘3ÄĺrÓ»);mWQŇÔň+fe; ´ĽQqĆń!V4I1őÔYď‰éŕ|†|B¨F©LI/¦V0©@%L¤€ęúz´a ˇĘô|Ô&CŔ;{ ł®’ĺÉ.Í.F%˝be‡QT Cb8ˇB” nÉgŞŮć| T””włpΆp9Ĺ|Aě[¨{|Á`8Çe¶a6D•… @wÖ“đFŮgÎúf\PQ†&ü‹“‹ĎLOÍ„§'Ë`ó~”’L`c¸8ă‰?u·KEÖlJ` +ÖlĚ0O„8·{ęĚĽ/GpÉŹp8—,4V¬Ň@°ŞQ\ńF±9_Ô¦ÔđV˛ťëç—.ťń&¦#Sóé…” J”ÍĆijş„©iwśˇÄT­˝–)öŔ?"`rÉ®'"’SÔˇqŽ‘óB˛ĹeW á aľ(0ÎĎűhBSÍr±ľ’©”$™yËžNŚ"ȧϧ]pš<ÚÉiĎ|„ŕ)L©sVOJ/ v#ł˘šé­_ˇŤ20€âhŁ©ç†™Ć–ś^ +búbL°&Ę[“_ÖA y€‹a‹&xO›q]ŢH<Á…â´?FŕĘ&›¤\‘ŕP8x« 4SÚJ~‡5»AŔ QÖ˘ă=;ś÷€ä1Úâä,ŕ;[Ů=ş—`­y/ę 1@Uü1>ăD2‰ł‹q5ŐŃ3Ă0,C¤á‹qÓ.čË'Üł^"Ëŕ~ž>˝ +!8î ±Ŕf=Č™Ů0Î"’\Ât„ĆY‡Ń[§ćĂyfń/NÍ?3ĺŮÁëy”QTÝŢ;ľ+Ů•ą î‰qBCř,*Wălv‡l]<¸÷ň7ţv˙ÍSS'§<(E )A˨©#čűWî®îÝňÂě9Wt1Lą‚¤+D”†ó#%“©’SSr a¬85IUśÓbS<'gBˇÁ†˛ć4čąśî8Í­?}ŇÂ$¸T±»Łç—€b™Ó +d*Nh ÎaµDZ`Ř­L;•ď˘(tŠQ!L„0 Á^ôGŚt~˙ęí8ĘNMfç#'N»Ďśó…Á ”{TŢA’0ęDfć˝gg˝Ţ`TU”BÎ)ł"¨ůÍ%0.S‹ „ůĎ͇gâQXô‡Ů3Óţ§NĚ=őôśŰOQR‰ŕłÁMPŞnŚTYĐK ¤ĂqÄ`­Wě©S®Sg=łó!Ź%8'Š ‹Ń©ąĐĽń†h°b„ă s§§ý§Î.2r&ő33ţW|1@&hCŇK \÷č©Y(f&Ů1šń€iâÉş|qŚbq +gy<ź5ëýN‚ç‚ L¶˛ůZGOçĽäŹĹbńš´ňµž–k==ĺ;;ňG€ZĄuݡÁCLĄ”]ŮÚRłĹ…2ăý€P*)ŞÉ”éä'gŻŻŻÜ{ţ…Jw|Î:»8;çĹHžaYM“yAGcŠ":ŽIł¸Ç·zqŚHÎ,Äţü©™çĽn?Đnw4%ŚŇdU‘eA"14„ĺpš„0I1(ÎÓ¬-ëeŚ:=ă}ęÄĚ3§\çfCS“GŃąEü™ł‘§ÎON‡Ľ'@x|ń@23ĹBÇ R”ťP0?ŽR)’O/ř çç= s‘p"ŕóŕXH“ŕJŽ_ę8«ŁFąá¤ójłž::ß˝sm{ë|żZµ*Ą”‘r xvî™Óss ľp8.2¬ÎęO)ȸź/×lIgMLâhÓËeuÔłźÜ»řřů+÷oo?xöBˇš?7ď;· +ÇI O8ľóÎťßüí»?ý٧ďľ˙xc˝bÚ -°—žlž‹š“L;f˝fő:ąN+źT8'e‘,ď„Á, +ŐZ©µÔZŰÚ|řÚ×ňť]AhjŔĐ+šµú0_83>qâtlÓ,—KŮ\*…Ł“a¤8©V-]ľv˝ŃČ–5ŢÝ´ňą‚{cĄ8¨RŇm„Q (F“48Ű)*fRËšBVCwÇŐ˝Ő^3WË*燅çîěľôÜÁ;ŻÝ|ĺŃĺ;7.‡M;eĹŁP(Śř‚‚@“1B@”ŁŃ˘Ăµ+zł¬/wěĂqćÁĄú›÷7żţĆĺŹ^»üű_|ţ«źüŐŹŽöwGŤFEŕĹh EÜ‘ Ć&3B3ĺt©šŃóׯYküR»°µÖ»}}˙řh|ďÖÎkŹŻľřüłW®4j +eq‡¦fýľ05ëFNM‡ćÜčÉÓ‹'O»fćüň‡x +OJł^Ô^dđR!S,ć-Ó±­\ ¦ž9ă ë $âá ‡†ÜS1ˇKËćó—;wş®-ż˙ĆŤoż{ďÝWöß´ú»ď=ţ§_}ýß~üâW^ąľł9tÁ™EŹßç^Ŕ"‡‡ú´źŤ¬UŃăuëú~íňn7{ŽűŻ<»öÚŃűO6÷Żüźżţč;ď]öb)“D=>ďĽ'Š’F +PbŕPÓ@.vů+«Ę“Ë•^8˙ösŁ7ď/}đâĆĎ?ôOżţčçßą˙«ďÜý§źľő?˙ŰŻ˙ć“'Ż=Ř>Ţďd2Nf#1VÚ’«9a­m\\I-±•*ŐĚQŁ®3d7–2×÷Ú_{éđ·żţ·żřĺ÷>x˙ĹÇ÷÷/쮉^𸽡DNĎůź:y.čvélĚ ´ ëŚWgí˘ĽÜ˛AjěŻŘo<ľôú‹×ž<8řĆŰw~đŇ/żtżT±‡Ł•ŢĆŃp˙ kÖ"ŻLĂ&ŹÔMüŇ’ńčJ÷ÁAăŇ’ňâőÎĎľxí§_ĽůÎóŰ>˙ýŢü×ü쏿ýöŹľyóŹżxóGźÜ=\Ď*t4-ş#p B@~ .©{ +ý޵ź~÷•Oß»őՇ˿şů·ßĽůű˝ůăŹďţčëÇüŐ[řÁsď=l?8¬íŽ*i[Ëd2’–‘“šfL!ŢL%Ö«üííüëw×^¸Ň|r\˙ü[żţá;üĂßüöçýę‹'˙ý÷ü˙Ď~˙‹o?ąÚůô­źńňŰO.Ą eŃ?;ń„Iś–á@<äMDÜĐ…a‘ľ¶Y¸ş]Ů_¶®¬§_~öŃ ďżrůý7îľöÂ}ŰJa&Ž †ĺUşź%všěł›Ćű÷–ţú«×?ű굟|üč?üřť˙÷Ź?ůíĎ>#đű÷âóÍoőÎůŐrĘiFĐŚ4Eŕ U |TD/¸ŰëơĹďĽqá'ź>ú⛟Ľué‡ÝüŹ?|ăż˙űoţËo>řÍ÷ýý÷őů—ďlSĂ2BÜţhđ„¬te5ÇĽ´g˝}ŁôîťĆgŻoýÝ_Ýţoż}÷?}ëű߸ţ›ĎďţóO^ůĂžüčĂŁýŕź\űŢ»‡7÷*•‚ăy%8:Ô7{™ő¦vs3őŤ'Łżýúń§Żoüúîď~ô•_~ńâ_żsüďľvđ˙ĂÇ˙ë˙úé?˙ęÝß}ńÜýí»ßýŕĆö …@Ţsłsž`<'†Ą¦mhkCîá^ćÁ^úĄëŤ^Úú⽣OŢÜůɧţË?|ö÷ßă÷?|ë_÷ÉŹţęńĹÍć`yĹ© Â’˛ś˘-·ÓôNť§pđóoßú»Ď|÷kßyűŇŹ>ľ˙/żůđź=üâťź~|ű?˙ňkżůôî§Ź;<[˝4ó&GSěěś˙Ä3łŹÇ ý4tÔom:O®6ßy¸ń“żzüĎż|ç?üřőřÁ«˙đĂ×~úíŰ?ýĆ•żůĘć;węWGÉVš4%…ă4ŻŁt2iUÚ­î¸_ěçŮĺvuČ˝ű`éóŻţŕŁß˙Ćń/>ż÷?~ýňÖ/?{đËŹŽţń{÷ţóĎ^ţí÷îúęęŰ×óŹŹĺ¬ŚR‰1>Ĺ‹jµ`Vl˛ĺŕ‡ËÉ{;擋Λ7jźľąűŰżyňËĎžýů'wţÇüüü§żůÎ[żóµ›ŹžÝÇ1*ŃIŕ˝x"ĹĹš6¶V¦® µŹšźĽ¶÷Ĺ;×~řáÍýŐ‡˙ëżţü?|ýo?¸úŢŁťóŁŠ©Ň8†ÇQ^Đň˛žWUG㌯”¤Ë«Ĺg÷jŹŠßűĘţß÷…ß˙čĂŻżĽ÷őG«ß}k÷ÇÝüřÍK.·/ŽëµJM2 +Ś’ x±IE±rĹT*-⇼8tWŇ7ÖÓ_˝ÓýţűWńŮ“/Ţ»ńť·>xĽűÚµĄWŽZwwJ˝d5ĐňGIJ,kV‹&ů¬©¦U*§ŕ«ůÁĹĆ'Żl˙ŕýŁ_~˙ďľ÷âďż˙ú?˙âź}rďç߼úÇźľöŻ?ë×ß:úěĹĆ“Ăâ°,˘PČ„Ł–Î Ń’i¬š$ęĽbGoŹäW®Ö޸ŮţćKç˙Ëż˙đŹży˙w?xéź~ńöżţîŰ?ů«‡ß~c˙ťÇ[ŁANÖ’kÂd˛XîŠgJäf'ÝMcËčb›}°SxíĆđɕ޽ Ő÷î-˙ňÓ?ůřá§Żíăůń7†Ç«ą•˛˘łEň®’™š ŁIA!ť¶,b«ăěŻV. +×7kŹŽšŻß\~óîĆëw6úća7y©oŻÔ@®˘cI’ĚOKiRČjA”RĹl.o*9Ť]o¤WĘ—‡©7nô>yuëWź\˙çź˝ńŁŹnëÉú7ź_~e?ýü†ůäBy˝")XŔŕH©DŮ‹~4X,¤‘˛†mÔ¤÷p×yů¨üőçW˙Wţç˙úźůöoľxů[Ż\˝2®wË˝>D‰ L4B˘!™ÂŇW¶ŘnNZoGăŇŐÍňs—Z˝páŰo\yóţúť˝fČ{üŢywČçĚÜR±µkd§óQM—6W®lt˛äĺeă…+ýŻżţěť•ë[5pîîRşUĐ-ŤÓĄÍ@"Ä,Ë‘J‘ v®­iŤŔ2Eä %g%‹·śŁµÚőóÝă­ćŢriPÉö‹ŮvÖ¶4'€ˇĆЂĴ1ƆPŢí E"Ŕ2ţ(KđNśH& cv¤ě˛;.}é´Ç¤ ,‰R†lÖY˝Ť&Ś0 ŇjĺFÔJ*NĘ©+’‰Bd•\Yđ 6#¸™`só>âĎľ<óĄ§ç¦âń„¤(–ŞĄa„!”Łx]T((&˘q‰JH4ĄŠIUĘşÝȬĺě~ŞwEÎ.‹éĺňň‘”m†pb-Ţn§Śę&Ě™1\ŕĺT˝ż>„N·gC –ěđą5>˝Š«5XČSr±ľrHZ­™¸á&‹2blÖ k1,™ ´E?|rĆ2˘R­'„R3¸áG4ňO ·ç"Ü\D\Š1:Í[M9ÝĚj2Ű&Ä4xŁU"¤cҸV§ôcÔĹL_pÚ”’ˇôJÎřP=€%} #J§#dĘ#¸Šp«—H9Ë5=?T3]ɬ$0Ž`DQs%7ĺ.‘0Ş3F_,]půąyj>úôlh>*DŮcőÝ0Ŕgý“žü(“ć:C^Ë”ű0­±ÉňdL(†‰T°=üĚě¤ýu×i˝f×. JĂ޸Ä4%·¬ĺWg<¸'ÂĂlŠŇ*ŚÝ )7¤PŇš`d\~ĆGĂ|Ůi^ŇË´ŮŤ0Ůé ď 0¬ŕ°rX~T©IĄ ­±“é]’Šă“qĹE¶Ęý\(€KK™e˝´mŐö”ňÎtL}f;áBĽđdŃĐź?3ÖSfOk^2›űBfŐSNN…ýQÁäż|:pÚ…DŮ›ZŃJ{ĽłęAŚ…rĆŤ/ڵ# ĺÔ08®ł3áĹ# AŻ2bfv!´čŤA 1ŽMľĎrÇÄů0ďŠË~ŇńbÖ—žv‰ĄÍ¸\ÄäěčüíňĘaXČ Z%&äIŁĘXM)=¨¬/b’rĎ "Bś˘ł¤˝TčďŢ}×jďžňnÔ¦3rő€L­BbŮŹj®É˛t“řÓ·c!ŇŽ0yĘZćłcŇě2&ҲV}$LDŞré%µ4˘­v”MËŮ%§ąKjÖh&Ô +‘ťËjó˘\Ůâ3K„V®®Ý!’m?ŞPĆd;-63D“­XŽIe`ËʵáţĂ—>çÇÝś«ÜŠňyH® K2ŐÁ!m÷&˝ÄŤnD¬Ĺĺ6a¬ş3D¦Ľ m6L͇‰"ŃZ•4—aˇć‰pľ(Çę L« ܲ± ćÖ:°Ö‚ Ç T©€\ ˘:.—|‰I“í(›I¨µ¨Xť‰k§ÝĚ9ž8;íE|°$S„ÖDĺ*¦€ÁÉ#b׼3śŹÜÓ…_ Ń9Dž¬˛9íFĎ.&8kň•ĺB”ńŔ¤Vcj=.×Xg@Í›S6Híٸş!ľ$V.P™±XŢ çOąđ?JB«zŃdĚúŃŚ/áqŽ1Y"9ĺ%âBA̬é?fMűIW\CÔ6n. f+‹g /ź ̸Q ľ&¤0ĂË1Ňśw#@Ö@ŕ +™!—Q™U2˝+§ć هęÍdquçř•l˙‚‡LF„lĚoadǤť{Ş7ů±My¤—1y*ĆąFBmg—nfGĎZ˝+ńIŰX O¶ěÍmÄ•f+‚ńçA•7ąě˛MşŤ¶—”ÚˇPÜĹŤI ˛ĺ€ Ě^2˝‚'BnŮlî9í»ą§•7ŚŇúčŇcÜjÁɆ5¸ZŰyÔ˝řBs÷‘Ýżś_ľÁm+7ě?đÉ0—ˇĹć6“ÍĂěň­ĚđV˛ąf'kN)ł‹i­¸Tń‰;Âl·G×W_!ŚćI/ęĆMĄ|>Ő»‘l^G´~Îű@Ö0D,řŃ—§"ü|L $ô(ĺ@B)@¦ĹÜH)­G8+H[!®„0&P›Â8@§}°Z_ľ,¤ŕy§CLD(@JV»DjŐę@Ä XM.ŐÇŐzŐčŃöP-źOÖv“Őó a‘2z´µB$űŕZ^"5Źgüśw”â,”ÎzŃťJč Ň©ĺ„ŢZDÔÉF¨™•0W + 0*–ůüjôěZÂxp‡˛‡Zy{& ÂR ‘Y,ŕýůĚJÔ â6—^öÄőY?3éÜ‹¨@6µęNBëĚ©Y?ą‘@ŢÝ{ęôâ—Ďxźva^"K[K|f„iÍ…łáI¤IŐOŘ>2¤n´9ťn:­= Q!ę5ˇ°â\ŻvŹAhuôň8żtŔĄ» LŘť(¨L’Ën:[!ľJ'›raäĆ’`x)g(6r+wú—Ţ(o<`s€CśÜňŇÖ-•rśŔÓqˇÎ¤ÇFçŠŃ?¦R]ÁŞęŐqÂhPv„(a´©T_«í(Ą1¤ĹüŇřúËO&mŁšűL~#&V@ľ—ş{Kű§# ‘l8ÝËéĄŰůµgSKWÉĚjH(+Ĺqg÷ůTű˘ҵŇć`ďůĆÖÝĘřÎňá+l~áóđźv­E0Đ´ööăúÖ ™ŐçÔćaŚ-DĐmÜnź +0®¨„5ÎŮŕ˛[Jĺ‚ŃĽ˘4Ęj޵=ˇ´Ce×s«·«[ĎMşúd×ňK×é ‹HÖČÔź[‹›„ł¶N»ÉéĄÎćmXČą!Äźší+Tz KŹâJË 'ÓŤ}%»2CLÁ‡9Q®ÄväÚéŚ}DÖ(Ž¶ŻĽŕEŤÓ^ň\HÂ… mô/żŤëí‹7_}çă:Ťí3n1{)=~¶ş÷R~ý>—__Dtł~¨Ó\X<˝…ąśźÎ‚ř±ŰWäâŽ+,ű ”/"Mů@»N¸™¸Šš®¸kő®y*rÖbş3} ;§BTÖŤX>2Ëç6ôúž+&ÎMşo&ĺ‹jm?Ęćă\–+9 ÓŁěŕf}÷QB+«…!¨t™ŢETÉÚ&›îŇv‹´[ąĺcą4&ĚV"Ů’ŠŰN˙†3¸!6 Ą6źPB\šĎ-CrQë„=$śq\í€/Źn—Ź€nKůU c´ł„ę:3âKëŚÝęoÝ˝Ŕe—@çňéĄüĘőę…'|y[É z㣿úy~ů˘‡¶ɞݽZÝ«nľJXm?•šxŤÂ& ŰY)ŽźmďżbRČŹŐĆ^gďa˙čUké&lô‰”·¸tĎé_\H0´Ó„őf ÁŤéŤ=*˝ó¬ŹóyĆî’VsúXf-ś—+;Ze3H!BK7·ŮTS Ji57ľi´vÍĆŽÝľh×wC” ôP.oÉ“Y^–*›ZăSŘałăT÷HČŻş )ßżTZ»ĹćÖ„Ü(@ń`গ6ÖŁj ˝ów}ctăÍúÎĂĚđ†]†zűŕáµÇßvŁFɨ…µŇčvqíNaíFnt+HçŽîĽŮ[ż%-DĚĺVo4wžÔ·ćWź-o>A“ýé Ę?nHĹu±ĽĹ×ćdp@EDqĆĂqd˘4O»áł>ô´‡QyLďŇf_°‹Qáé© `BS°ŇŠ +XŞ/ÂŔOŮŁW’Ą±'ˇ…4„‘Ôĺ ¨Ö”Š›vë"ČeB.ÇGVmˇ Îj§ŰK{O–^*¬\ +T˛Śay|ËB¬Í¤űv머z?ŐżjwŹôúc¶SÍó B„ü(Ů9Ň:—(>ZĂi\l_xA(ŽÂś“ŰÍ Ťµ«çŻ˝Ô˝đP.ŽXŁŃ_»Ö_ŵŞ]ŰÜąńććőŻ .˝ÔŮ!3<ć¬âĹ«ŹwŽ_R–ʰz“v ’­C®°…¨M»2>|řŽZZĎeÔ/đĹm±ş—Yąµ~ëťî…'Za}ăčĄĆů{ «!7v¨Â6b­°…˝q%;Ľ…[}R+Ţ{»ą~g˛Ú‘ÉĆŐ&¤·QłK•tóbˇw8şp«ąq3®u°É¶ÔK^’l(mcűţD69Ǩ­ŰÝ‹ză|fpY­îđcu@”îřI3É־ݿfnĆϧú׹Ě*(@Qy°_ ŔŐdÝún¦ś¬íHą! Ř„TčnßéoßŃK@í—ô’RĄ›[[W^^ąđŔ›Đ9»×ܸÝŮ,Öv' Ţť!iövŻľäTV°4Yń:8Hµ÷”üŞ]C­ĺ…„=–čd#D•ń­Ő_­_zYď]1»‡FűłVgB +“l7WŻáJ-˘¤áK0_Ŕ†iíjźZ@ü ťÔ;AŇ9ăĄÝ°Ič\ů`NAŃF;ĆçĂtÖ‡&RiŇ@ý”—J,0k•M1·Ś&ëA\#•"@)Ą´f6w(«ˇ7’ő Tvĺ” B+?Ľ–ޢ3Ë1©8\,V–®0f“ňĄŃµćÎC0ţýý—z_-Śďâ©N±+k×! ŤÍ:mĚšÓłj›vóľ÷ňG‹xĘGe`µĂwę;OVn~PÚ~ěęöÁ×>ř^¦˝»€š {¶Ök”[}¶{ům«{Ŕ Ą°"ĺWţÔÝ7`5Ć ˝mu:|<şôśQY댯KŮeLoFÇOe T@žŮŢ.ŐcÁ‘[NhµÚʵöć=­rT*§Űzq‹taKď\6ş‡j}ÔP?jФQŰs&@şb˘ÔÉě†Ú8VëĄc3…á~oď.¨&§ý” V`µa´.'Ë[zqĚ™í…0§TŁ<ŽŇąą˘č¬ŹťŹj:gŐ.e»7Éd'U۲Aˇ–;&»!c:$z`“4jy7Ę0“V äťŐ‘#Ź%;¤łĘ>ʉqeÔ2ž¬Í]µş%6Ź9Ë·ałíFUĄ˛ÎVQ-&»ÔBőĐ=ÎYVŠ› č‡‰dľ[:Ňk[lvµZA!‹ző<¨ňa6㲤٦ͶY§›Rae–BF) "¬NČiÖn/“ęEµ¬TFRönv\0G%­±™^in?,Żß[€EÄóFµ2:žřV|Ň#S[ąÁAaů ?<Ś„‰eĆ­>ëÇA¨ĄőáŢ#@8R~ęřăą  23!ÂŹëB¶ďÔÖJť­ŤK÷ÍŇŠŹHq™u!·Í9«ŔćËSšrvÔßčźż S*+VöÍĄ»rý€Í¬rąq\®Ă>Üąźinűď#Óq©ę´Źz^¬®ÝĚu/Úµuŕ"^zë“ÚňŐ[Rę{FoŇV=5¸˘U¶Łt¦ł|řÁ_˙úĘăb{•L­(•ýTďŞŃ¸ f‡‚Ő^ß{nëę°R ˛é°TMč].=ÂÍĄ¸Ô0y=·ÔCr)ÄU‚LŃO>¶ÂÔŠÓŢioß S&—dKÎŤŔ8´ÖnŔBy>`žâ’­îú„/ťZŔ¦ý µâđ–Yż¬_)©éĄÇo|ëüŃó'f˘']¨›ČÇĹf˛´c–¶AÝÄ„,—]. Śj78§‹ČUÔ„ĄzBo'k—Ôňµ˛ /đă`ŢI»%[Q±JŢş]ß~Ŕd‡g$"U€’ŔZMŻoCR)L§#l:!¬Ö®×€L‰ů‘Ö¸ŕ ®—7®^y=·r-̦1­,W˘bł"L‘ëľ É54Ů҆’i‘FÝ…ha6ďBŚĹD0pÖ_!Ą +Ţ|u˙>e6“vźÎŽ@„ŁR!Ußéî?ň“)Ď EĄ +Čz˝2–Š«ţÉÖ{m6¤éŠrV‘3˝RwGp:g}ô3W#\AňK0­sVĂjl67nÔ6néőÍI…’+LjÉ—Dą¬RÚ¨Ťďv÷^!3›4=ŕµÜP)Ž;ś ÓLŤRÎb\CÄťZ •ů¨úĽř8ĺ“sqPD®°vż6şWݧŇë'=ô\TF”ĆluÇĺĹ!m@ĽŮŃJ›4Iµd”V`>"5?aD¸"eő”—YbîGU«:NµöŔlö1złP2LdŃV?„[„T, ʏ‚ EąÂ¤ßWL\ZżZëncĽMjE˝8tÚçËăkNg>Ş·Ş!Ę•pˇtr61ă祦V¶s+Ľ3đ#ÚŚŹSi­ĽÉ9KĎLGÎ,@>H7 .3˛;×řň%ľLA!€«¨”IHů(—™¨Úńe•ᇩu/$čĺu˝vSµ˛‹&[~&łYs.ÎŘBŐ-=¸š[ľÁg×ŔD‹ąTŻaj1ŰŢÍ/]Ň–ź2ŚęűĘáK[7ß.oާócoB&Tkě™ bžÚ%ćFŁ‹Ź*+‡R~Xť€YŮŤč ‡$´x˙Tçr~ü@ &¤łÍ )Ó…„B„Í J¨ Ö^ „ë¬Ĺ¦·H05ÎŔK9s"­tc‡·:'ç‚'fýł! +đ• e?“Ó +‘¦žîB›1¸Ů§3#®°  .NŹ.`{Z[ziÉ‹~\s%’Q®,Îs™1Ö©0rM%@(śń’®¸bËhr`Ö.f;W¬úî©E,F¦rť ¶ç¬+&-Â*¨’¤˝W1©ě +QµÁSŰôˇş7˘ČvĹ”™ ‹+%;ś ŕgˇ˙Ý˙96y䬷gⓍ~´ÂH/¬y­<şhSoîńŮ4éĚ)M{1ĐĺTÄĽ’!~ŇůG)lL4ÓÜ1śöÚ‘Uě#L×Ë^ÂAÔ–\ŘŔŐVśÉźs!ł>Ň,­e»Îů¨ů?ĺĄNÍŁ tĄÜXĚŽ‰¤+D3“Ő^ĹfÍXBŻNjŠRöăv„Ií©Ę8@FĐÎJŻ!ö(®uŁbŮ‹j@‚ÂTĘ“!&—PLv]Ş^˘Ó+nLžŤa@ŃV — ‰Iż6 p©¸‘[:ÎŻÜDôöB ŘŢb˛˛‘îî÷vî .ÜW«›ZË .U6oóĄőł!z­´K€– « +˘ś”W®ů1Ěź]I¶ŹSÝË·­f Â‚ą ¸b•"„A=Ą´]ÝÎ÷Ź«çĂŤ©…HUJ('đŕ\nHĐ ™^J~, b{1.‰ąqfx==<ήÜR‡® ¬Ť”é‡ÇBn5bŘę#Z›N-Ó'»Ë‘†Uě\}).§#"°á\Ź %ą¸­T.‚:3ĺ§"T–µ–PĄ…*MÖź~ÖOť…`fŇ6 –‹~Ě$Ś0‘"ÔzŚ/:ć}°Ô%Ë«‹ĚŘ=łyQ.n0ö2řót{f&zf1AČĄÓóń8ëhĺőüňŤó÷żÝÜ}Äg–Ď,Ä1¦Đ˝ f 2Tşb"@i( 25ĺ#& yÄŇBLü™y-ř_I‘R:NŠ„ěŕJ>08Ó>â/Ďţâ¤wÎGCTš‹®(5Ŕ"TĘ!jZ‹Đ[AÔ9·Ă”ŃĆŚ:7M/0j(íŽń“^F_Čm°ęI$jd'HDmFO-ť×jűtf¸)'] _"ˇÓ‹‰ĆY c,ŮŚ˛©Ĺâ !\&ő +đ•Îŕj}çůÂÚ?[ +QBâ´ź,ŇFOV( Ż­^űJzt ˛:A&ËM'¦˘z3Ű?Ţşöµńń;ąŐóa!I˘ÓĄě^”ËŘĂŤ>š\˛š—ĄÜfrX0ëŇŚĐgŕűfŁŞÖ}(ô€řÜŁ‹ă…„>Ub\Ů I‹1&ÎÚéÖţŕŕµěĘ=ÔčĚL'rqR8–˛´Ýá kŔIˇF00Ä&c¤ÁKF4›Ť€a¤ň#,łŚ›ęĆ3€Ş“š^^ëoßëěš|#9¸ŠŞ5ŕq˛Ő±]ßpÁzBëŮí+˝ťçV^¬mÝW*›~DŃśÎ`űŽ]ŰX„Äů¨0@l3făKiĎů’ÝÎ÷Ž@¶Ć¸P7¬#R}ňC‹Ô +@A˘Ąë»™î!a Đd'ÂfĂüL€N€%.€2Ëeły „tx’ě¦VA„L-" ĆB9 aMłĽNŰྨ‘*‹1ůÄâ†4_ÂńÓaÜĆ•,T#T([A™ p ,"Ú<ׄ. +F ¤‰’[‘ókž„őg§ü´ĽHz&$-&L7jşp;‚Ý󂳢rHűŃáÎŚ‡Â劫b÷'Śé¸úĺ™Č9/ęŽ2Ŕ’Ö Y˝°|ńŐĄBO¸ěx.Ęi˘’u\­˘f±— x˝ăÜđŢdż!D`Í +cŐjEőŢT"u.(Šć ßÜîÇĘQĆ‹EŕŕJ+7µňÖ|Śž +Ŕ!J'­.mw#´ ÄźPŠéö…ěę ĚY + EfEŮBBmq dĹ-pcŔ /9f`>Ǥ–ăBy˛ç P ;biKălvĘ ?5ă÷%LkχĄĹ¨óEĆě`JEHµy« tŔ—ĐJŕ $•1Ł'—vŤĆaŻ‚±ť‹0sAl°}ĎŞoĂ Č2ŮEĚńé¸PŇËź ÓŽYŰÉ Źó˝ NsM6q°„`wíňIÖ§|;.-DÄ0]€¤Ęt€=9ŹśvcĽŮL7·=83icĄ ZłĽ|Ł2ş‡ëÝi?gŇĂťű•ĄË^Ôń%P7…ĚHČ­ŃvňkÁĄşZyÍGZ'Üج‡ŘtOiĹp!“śZhŽŻ2NIžđPa®čĹ™ň› a~jâőzŞrÄóL€}z:zröa) ţ ´Î¸±Ş ™a˛±˘–*:·S¦Â>ł°ŘX¨_brërý <‘ňĹ•9?3ĺ&p®”Ě-O-B_:í}f*§r1*ă…˘Lů€-ʸ`đĆDŐĹśQÝĚööłý‹ąĄC±° +(1Ććd€=8ěćĹÚĆóů•;f÷ ŕ„0•„Ät€J’Vź/ě˘ö:“˝ŕ´®ć»ÇĽ3\sĘŔőj„M…) °D´iłÝŢz¸tđ¨)ÓŇeQ) *iBkPąµ°XI6ÓÜbÉ|sSÉöÝhŇ…č.($®:­#«}5ĆWÁ{aŔoUÜXmRĽ ĂO¤ÔŇfeýžŘ<…É•(_óĺĹ, PÂ& *ÓÓ Ŕ—]ËőŰ»ĎGĹĆi/5¤˝©®F[Á“©´ßŢy©±ő<¤Ôf‚ ÉT}3Ußaš ¦~ňŰ•}±r1Ę—ŐśZ„'ű§$›SüĚ" +r$4ůäpM­AB9€jS^Ôçq)·Łý 1ýŃP©ŽĘMX(Q ¦Ô|¨ţ+ÂôJĎĹ&$çúR85Çř‚š[KVv„ü8€Ů~HŠ$dRÎRr:ŕQ>cÇzq¤W¶Q˝d‹'°Y/ťü¤Ęň @Ó˘t–6şŚ˝ÂSgÝÄ_ž 'ř¬S[ŹŃćiWâ©x6¦CÉ%ˇqÍęłfk1Hč©f¶łÜâźźťq“S%ČUQ{,d6]!%—Ë×NLÇţü”Ľ ĘWąÜš?ˇ,‘FŚMSFť5k”^Äd'LhžI+­¤ä,iĺ ĘlĆXĽ@Ě‚Íů0¨:pť0_ÉFKăz“MŻâÖ¤?"by&Z„ŮĺsŔPč†Óę ©¬VÉÖTLž +˛Q:-f–H˝®ćÇv÷ŇZ1ąćŁ3łqÉ ĆA,…¸ütĂÔ6a.CR#Bç/ÄŐs~Ŕ'F´]ĚúqT=ÉC\ëâzdî|TŽł9?žšŽHˇWZ”˝śłf"ěiw„Âg€đF'®¶a­î_,nNG¸g桹0¦;@¤ÂLŐŰqą +şÓÜSK[„ŃŚŕI`ÇâBř˛ą¸vÖĎ,ĆÚč€ę"3§]Čä®BĚ"¬Ăr“N­M‡%W\É!-LČÎú“nŐ(ůŞ6€!I*T€p€ăXKS~"Â)kh4/fX„ä“óĐ‚źj-šůĄ,ąÂś’C¨F5pĚ.ĆâSmŚžĽö!¦gělÉĐA"@4Wź śÝFĄÂ|őÄŐŮ 0 @Äfُ1ďCCtŚ-Áj Q˙öŢ«G–4M»h.„5=}ΩެJďÂ{ď#22Ň{źĺ}Őń¶}OOď,wvf—KKa¤(!BŇŤ®ôô“¤'j¸Ňox!@â|“¨9ť•ů™ç}LDT~×|p”'í"iVYۉgđäO +r‘ŤóôެÖö“3z™ă’/ł2<›ŮŘFë +&Ó»`ňRkž‘Z»PMZ8±Ű‡­Ĺs=šĄ_~bwH9Í)˘3đ{gŤé}{ő*]:Ý#§·fěNş}ëkŃ–ĆńL‰&f{c÷NÝńťŕ.$a÷.Ëׇo˙öřăßÇ›Ź¤ŃÁ °¬5HC™=ˇ˝¨)ýFŻő+xŃśÝĂ- Č ń– V*"ŐúkoţšEašGĆĂM}đ˘ŔL‘k0ćÔÝ«ń:SJ„nµÖU)Ń›§Ľ·.‰ťŠÜüĄŐ»˘ťś5¸S;WFď¦bôźÔŤ§u­$FĽćŚŽdu˘ńLŽ?m n™pY”"8.Á›€‚Ŕcś=Ц/;Gßµ×ÎŢţ]{ýpăE4<-˛vžqh{Ş6O’ĺ»Ăżw†/H}§\RIjRś§aŕÇFçB…uźľ‚Ă'”ä ¦WĹ4.SäAÚ ŃŢ>o.ŢIŤí…Ăz€(ś°7ĽnĚ_ŤĚ5ěp5\ľĐ<ŔŔ®q>ü@• +¤U¤ę©Ť#ü< ĽŢüöŻţő˙ÖžŢ=+(™Z †+8“şĐz ö˛+ąc ş*6€+ŧßÓ›,ýţ‰Ý>‚%hL.“ĺot—žrŃ`ŢPZ“PĐ)ÂQFOöáĺ®{ÇźFçßôŽßŰýÓôKآYMŽmBNÔh ‹lâŻ)ŔH'uµÍ{Óáĺ_4hlľéî R8‡‹–Ł9D\´G­ŐWŃüŁÓżswzű,ýÂŘŠÂ*‰×9¬Ë‰?¸‹¦ď´Ö%Ž  goS\5ćń覅uJűŠr7Ră¤1{O_‘RSµ{ç/Ô“ ,“Úą–ÚéÎőŃô1“2Ú9Úr:'ÉĂ9I€M•44ĆëöĘ‚+z°GR¸ť’Ćđ€ŽJ|"›ĆäĄÝ=ËÁ‰MxfĆ‹üŔ¬,†9&”‡˝ăo[ë·’7y˙ó?^}üçR|Ěy+©yT·Fy!®©m”gE6üÉs­•~‰%§v µ°LĹ4ăCVďB‚5PĂm<ş‹‡7Z´Ôăakűpż"äŞZž8Ť" DĄ»WÖVß@O35;G¸°şö5úÇj¸úU–š—˝OŞíĺďWLü$Ôľťśú˝sŢěgŞjv +ŚW¦5Öś5®KZm÷7›«oaŕót¬·oaHsX×{”=©ý]Ę9 lŕĘLŽ“ĹK§w*¸ş +vu«Ľ+{}Wďäűćú+%>Ňâ­.Kbü¬¬ěˇv !Zś »‹hŁ&Grc­'[<*Zű€rJ|„0HR˘'¸ ŁŤŐ:Ťt—H(jĽ‰—o‚é˝o9oD•(Śr´CH‘ŮÜŘť€Ť3{Š—~ggů.EQb| P J ©*^ńšßjŤRfµ{ňc¸řX6¦/ŇÓÝŤ9ň{Ej°î¸ą|ÎßĘńIĽ¦uö(Ł®uĺh‹ ]#ÔQMÔ4řöY‘o`†°µ¸•Ł´Ě7íţ]8˙ŕO^G3hĺIŽqŔNPşŠÜ<`]-9·şWŃęÍô&=çIëíćŕřÇß˙űó×?łÎ 7rűLJŽ9îÂ`LîIĄŁřŁdů˘Ŕ ŔtKtĄĎGGŢä]ců¬‘ĚŹŻ~dµ +¶ 2—ÚmlżŢĽřťŰ;Ý+r’ŮăŤ^™K\Ľĺ(oŻćĐÖ"˝ógk6«CŁçUŮC°ŞR )8š˝ę[b‚šĐÄ7'^ď`¦•.ěV‘íî ct•ĺŠLČZ#»}ęőÎŚxCÉÝýŠ“§Z|LYC­})Ĺ'xńQYë*ééčxkuĎ ýFó4ż‚5môw¨Ć+Ż5<ů>^ľgť%iLkÚ±ć.®‚Bµë Ąp‰ü Âářp×đ]@]sýŇŔXcźÂÚe.Ý”Ő[‚Ó7:[z;:űľ}řĽ ď ŐpfDÓáöĺüň[(;®Ŕn÷Dő'¬‘Ŕ”ÚńBc=5pV—s Č'€ +«·K´Ł‡łxtĺ$[Ůź0lÁ +AʞưЩ«M=^ .‚ńŤ–îev ç¬5×ţ芶‡Čăvj࿎–o­ţťšśC#Ąxb$ŕ«“3Ł{‹bäý©3Ľ,ĘÉźí‘ ŔxúBoB§ň´ ʤ?żţyqó[Öťz»˝zŤ˘ Ť6\A ĘB̬î>ůôŻÜńŤ,†§?Ŕ%fżŞ¶*räv@zj0†gĺ‡\™nŐ8B:€.äŘŕ€0Y˝+{łlU…»C<䂍Ü< f/Ąh·vP×Q\xcöĚöĄš\IÁ!ď®ěΕÎŞJľn‘r{§($ÉćSĽţtýýżýô·˙{wóÍNQ#„›5rś#ŇŰěĺp=8úztöťŃ:*0Áćú'·wIj<ß,(}ŇKą9űűöŹ˙G©ĘžRÖDŠŽâĹł}áHwëĐĽ;e퉙ŔMݢ#=§a´‘ń±X(í˛Ü…˛8WîŕEYęŔW×ä6<|‘Ó»‚ĽŞŤ%|>Ü8aôĄhŃŢľ3{8ţ¬®h˝'ąCÉéľx3ýWor•Ţý;{"ŐZG’;ŇśžŤÔhÂ8éµ›Îö}sţ’1ú”’ŘÍŤÍk’{Pˇ«ĽEČ §=ľřQ‰×5%)2ľćO­hVçýîŘé_67ź‚ĹÖÓM–Q;KBOäxĹú řg| ŞôÇ7சÖ2{§­í‡ĆâŤÔ8FŃ!Ťší+d7B +ĘścwÎ:‡ß)ÍC1Z˝ó¬|™(©i'›*çIyź ćď}M”áÜzýíK¤lÖîj6o­µŇ‹q'ď˙ćâëżORÔ?˙K§›ĆCgt‹…ýµě-•`Q“"‹™lśî\\‘ńŕâhÉ[ +ţ‚ĐşO˛Ě~UËÔÍ,ř Ó®uĚp¸MVďgRáţŕ^ +‘RG¤Ň*łţNžŢ-p€Ťč,QT\űř›Óoţaöâ÷Ă‹_űă—%®ő$'1Zj´v‹ +%· /áä~tňťßż–Â5TwňňwŃčŢŚ0'úôÝüĺď?ţá?üô/˙ĂŰ˙ľŞ¶Y ň±ýĄŃ>ĄĚ!<łßż´»FçTŚ–e±™çš%©5•P +pRQ[¬?%’>i¤§SZ#%\ÉáśĐ;°ľ‚3ЇWłłoŠґĂEIjŔ‰ŢJ‰NŐř všCÉť€1hŘ6o"F‡łúçßc‰Qn¬Ń&”ˇĄW+(˝KčÁCX¸±;ĐßÝšš%TŮńvź2{b¸A„lĚßwŹ’ýE‘˛ĘŠęć0Ýi"ś‰ÍŤÚ9·ú7zű´¦%Ö2:Gîřv|őëŢĹŹrrÂz`¶!~%cŢAČh{dnż^üt‘©*Úĺť1c¦ŰÂw1Î\ëŢđŢQl˙,Ď˝.ř%ÚbÓk‹k)Ú0Î^ÎíźĐv×HVťĂoŁĹű0ÝřňH‰gČŃ”=pşÇí勪Ă0“öŕ‹Biý"ě×µ +ďCý ±ńtź¦Ô–Ý>6šÇu}”eÂ,ăgI ‚ľSQáL(˝˘D[Ł}ˇĆÇX—egë)íěUÔrş™r;uéŰś)ţĆëßU•ŽŮ=sWPv„ÓťşąOF¬»1š›Ćř˘1>ĎÖ1Ť}&—žó¨€ćF÷Äě^„ăçŕ"č5Ľ\0}ŽnťÖVµeĆ%­)° G]›Y6ŔŁ"·śÎi˛zßÜ~eN^°áaNď ¨Ëcđ\ë^«­s,th¤­jičť +mu'XÍš~±č("¤lŃźĂ*“@¦”:ŰńéŹçßü÷ăŕ˝Bę]ŢÉ@8A·»é˝ľ_+îWJ¨ÁŢ‚3Ľ™ŕ®­îsgô.ś˝ăĽyž……QŕýĂoZ«Of÷š0`Ú—zr†ŔbÄ«}ĘFđď}ěĎřëŞÖCDµ@>ë÷ţŕśŃ›ś3°»§‡/ţęâăżŇ»'˝]VcŁ}htÎ+J›Ëhń1Ţ|kž×µŢ^U.26cöA2éĽĆe«´®„čfĎn®KŚ+:#„ýŐí÷ťÓŻĺÖmˇź!ĄµôxEé-BEś ÝŢůřň§ÉőĎ“«źwŁ _TdR8í×ô"Ť×ô¬î1cöJ¬»_Qó„`sÖŕYA8¨[P +łuÖ;ůşŞw÷óÁPnRZ\Noéńr”»SŇIµ+¤”˘‚”;˘3Săô·ô"źÔÔ!ŘŻ±x‹‘îV Á›·×“Í×Îŕ†TřŰ ˇĺKq'u6x–Şb«˝zsńé÷˝“·\IJ/ťCá-¤Ţě]÷Nßü5eĎ8o#€*˝eYig/K»‚3l?®î~·yý/»ç?ĹÖ‰ájęF96\ý{ 4˝Bč€%CůP>`É93·˙V KYŕB¨OŽqË䫇żőSÁ¦JţĚď_4g/!(„>Bîî¬?ą=”ęÔ`—ÁěNHŽÄÖq´zżzű÷ńć›*ěiĺIRb'9‰ĆŻäơѻÂX°¸Nç ¶ >żÄaVCô*^Ľ˛űč‰ŕŻ8wét/”hY7¤=Ő[çĂ‹źűgż6{7ś·@:–‰ÝŮĆÓËţéGspŮ=ůvv÷ŰŮýď´Î(•ŇZĽî'ħ´łRăCÉČC™´‹¬IXýËáĹoN>ý=y HŐĘëńˇ/”x-n¬ás):ă˝ô eôs”±ÔņäěŢ1 ›3¸…É×ăc=:,±Q¦¦W…Ł*´Ż‹Â„dť3­q §˝S’żÜ§Ś0=ÉCj=BďÝ‹öćýđä[łuTbMBâńEsr˙$'€üoK09îFp°‹ŕŢŇ”Ă-řßާŰ.'¤>)óm§}Ť” ŠŘ)ĘuąxPöňW‘ş9ŇŰ+)śÚÖÉLo¦ônF7ż;|ó/ÚëOVr‚Rrş'ó›_C7AyPT˛s㌞C ŠR $ö¸3żďŻ_ő?bn \ G.‹m×i””ń—îôM˛ýäΞ#ŃŻů€Ťďbęp@ „Üşŕü-ţ}ŔxE> Ťnú÷ óWÁň]´|g$GČň Ě3VÁhť™ťKds#ŮM¨ę´ŞĆzç¤úőćő_ź}÷oÍŃ}– a'JŚíÄs5Ôĺ¸ÄűĐň2śĽvşWŮş–'ôôô ś ¨ÍatÁiŢčąÝ‡]?Iďsp§JrŠřć®o´ĄwoÍÎąÎŐhj4áüľwöéěĂż8ţđwŤí'Ú]Ő´Áçś ŢX ­Ţ]şłçřŽ —e fŰfŤŽß?ŹŇűuď¸Ć!ăçvďzŞ6—Ó«ŻÓó$RŹ’Ô–'§´1¤Ôv¶¦0F’ĚnŁé˝;zÎ:óšÜ«çČëc•Ż+\(ŘŁ`tkőŻ…hCjŁśćÂüXáş.Ĺév?Ć ň?ă{Ű’˘lÇG˝öÉź<«a˘Ľáe´ţ`Źß¨ńQ Č,*%.‚ 4šG„ŇŞ+]«smµŻ$ă÷ŇëG 8ÖŔu€ëĘbB{+ Łő­Ë#;éidčZďôűpx­„kÉťsö 9˝^^}CJ1µ˘¶I{"6ŹËZ?Ç5ŞZż®őŐp“ĂZ-!uArx΋ŞŇÇGd(‹őg|¸¦ÝIÍęńń¶ąývţúżKÎ~Ł + +”Nhübxúł5zÇGU}XNď]1V/Ýbľy =Ĺ4ÂËiÍ-ęY©(DůR¸j®Ň?ľ†¬ČÉôâŰáŮ;Ł»âÂçÇŢ[{Îî)Á¤$E޵Ňۢ<٨Â7Ë\Ä™éĺ>Íéęůośń5 !ď/Á$ŕŐŠ”Řýs59®i°m˝ôÖŻÁµ?{­·NëZ ±‘1ŰV{ăöVF2‡ŮSZgó»ż Ń[Ţ™V…ŔčśđÁ´¦włçĎîŽßü~ýüź5Ć—z0­>ěýŕü{ˇq‚Ş©ÄŁs9:˙ˇ1ż+óA•‹hmp˘ZĹćIE X˛”%ÓpxN59“âsł{»Ľý=ČDôĽ=)Đľ ×äĚŇ?3Çrt&ÇV÷ y’ +Ś«66pď9¶Áú«öÉ׍ă:Ç?–씵ť’ů@ř’˘UÝQđĂÍoř°—ý%ČsŻŞAh Ş~5`lđ†'%+µK+ťŞ~icEU ĂáU% d¬Eëôo7Ľq]iíVTĐ,řÖjť(ŃŠµ5±Ůž˝`Üé–Ťn1ýłî1ËŃi4ył'3 HV%ˇ˝O† “Ţx.^±ÁÎSnnŐätp’~y¸ůX7Ćy>®ë="ýB>çNĐC˝űÜĽŃ;×8mtd\ş¦Ż·Ż˙®ąý¨uĎëj'ÇúXÚA$ŹJb »ŻľéźţěNnČô«!<řţޱŞÝ,cUŐŽ=L˙¨JđÇO‹Ň^UG ˛ }^j´†c Dkwň\·{„ËăŠŘŞmΙpîoŁmců‘ 6Ú+ˇ¨G·Áě-ň 78·;ŕ“–“¬âńµšjí“‚ŘĘPH^MP lyEŽňĽN®W÷?ž}řCců˛ p5©é¶OŰËWéuLkŚîăů›ôőÁÍe}‘©UřPilP55s¨÷_46?ô.ҸäpY““ť˛R“ L]Ujî×Ěݲ†ÄŤŔb¶OŇŰŐngőćá–;Ď· »”ŹĄ„ĽÁµŰ=ĂG+ń¦¦÷jć,+ö˛\[NşÇß'‹¤Ú"•$śÝo_ţîú›l­?`™2u;ö3†v÷˛$&96R›ÇĎţŹ“ç+%§đęŮşŁ5ŽşëO¨Ů˙öWĺ/Öž/Ţ˙ĂúÍßşýKôŠyPËß( -X!•ýôę·˙K8{ŻuÎĘđŐć°ŞkÂř[!צ¬…ŰÝZ˙h÷źP^IÓ?Š<ü.Z~˘E^Šó\ »ÓŞÜÜ«i™šFë˝pú¶ąůFkźĹh·fjŹ˝šYUşJű¬ąýzűć_OîoŽž—L #y‹eŞv>˝Y˝OYoüęę»7şüËŠŢ—šëÖú}Ľúdő®)kĺĂ,iŤm0¸&µ”ä±µĎylíó@[ű<ÇÖ>ä±µĎylíó@[ű<ÇÖ>ä±µĎylíó@[ű<ÇÖ>ä±µĎylíó@[ű<ÇÖ>ä±µĎylíó@[ű<ÇÖ>ä±µĎylíó@[ű<ÇÖ>ä±µĎylíó@[ű<ÇÖ>ä±µĎylíó@[ű<ÇÖ>ä±µĎylíó@[ű<ÇÖ>ä±µĎylíó@[ű<ÇÖ>ä±µĎylíó@[ű<ÇÖ>ä±µĎylíó@[ű<ÇÖ>ä±µĎylműţWŇÚ™˙JÚ“Ďűw'ŢáëĂ_ţbýňy»ÁođL˙đŐëÓ—żüEOmHűĺkďňřőĺýÝáË%}Ž".CöOo2Ą?ľ8We://Ď/ďđäŕřđć´ś©ĄŻUÓżü•ˇ3ÔĂ˙¦~ů‹ş(r,Aó4'Đ%É\FyŽ`(YI”X!sűđ*Q&XQd†¦yNúĎ_uóđŞ?>)ăHĽ@1™zÍŠ´ÄŃÜzŐö‰˙eŻúĎ?ńâ—żüňwżüEď—ż3Ąrf:Ihźţň/ţß‘Ň#}ÓŕňćTůO˙vN1G˙4Ăx/&$üĺ/Hďôíĺńi?t2SLű"=B:Éü‘ůĆNǢYeŠÎĐ”áâżđ-iżţém˙ô˙R†E_ińˇŰ\&}/…ľć:š‚CɬĚ0ŔHă¬=ŞĘÍşÖĽ‰ĚDwÂZcŇđÁVŠŹxoÎ?n +n·OŐx+EKÂčU”¤"§Űl0ÖłG¤’(ţXo®Üţ™Ń=•›Çb|Ä…[µuYUZ9RËŐĺďńÎ@M6fďRë]É­3®±®Űý˘Řpş‡Z˛˘Ížśąý›`ňJ¶´9›'Ś;Ż«Ý˛Đ`ś©®ĄhíŽnHwšˇśtGgkΗ¸ŇzFrNžëÝ3ˇ±*+MĘęf›†)ŕü±7ąď‡ßëĂ{ĘťVôNYIüŃ]sűÉ_Ľö&/ËŹZ÷Š —%%‚ëNęZ'ĎyĘ&äÖŃňŢ8GŰř,Ćš”äVYnWµ.ëÍĐ1ÎťČá’s§´=kÎŢůŁ—”ł(Ę­,äą°Ş$vçTonËbXć5\ëÍ#ÁťW„¤Č„ŇŇÂekţ +źHiŮ_hŻ˘U„fMn×ĺvMéŠáV9ÍzË&(ňq]éRú€Ö’żÂˇęr‡µ¦©•e\ĚX]íUĺVUJ´hcÄG”1¨+˝×xVŃv*ÚiçI›V[ĽŮ0‡BŁČ¸¤ÔÔ§Eţ€˛JB„·W¤6kÍcD¨˝"bx^SZ5­ÂGyÚ?¨[„ŇĺÝ%kÍEo­4ŽÔĆf|ř>š\–y—Ôj|l.µÖa‰K>˘ĂX3>ÜRά(¶Š\$zs·wa·ŽiĄíőÎĹp^ŐÚE1"őžÜ8RâcÁ:­e±ó´-¦Ű¦Ţ(É%ńŃ1ç-$ÎY2çŃfĎě]D«·öčNë`×Ë4ş~÷w˝Łw¤Ń%ő®Ńąjn~đ§ř`SÓűŔpUjVĄ¸,Fe1ÝҶÇřU]ÖµAž Čt—ľŠÔHw- +¦„ѧť©Ńąh,? ŽżÝĽř-ét*jCk{ł×­“ýĹ{ľyÂG[)Xťżü›ŮÍĎ5kP"ł{Ý;ý9^Ë7NřĆa 0“uĄMi]üa#ăaëť ‘©éu3Ý5Ö™rţśöçusDc“öŚvÇŇ˝…0‡@ ^V›e1.ré^eU±Áš=BMĘBXdü*רáWL Ńę 3}Źď«ý˛š'ťýŞľS” Ś_Šś…ÓöŠ2fZtnÄg6¨Ë-RëqÎ  "…‡v÷šĐ»OĘ⯠+©++95ăBm?+ÉĘŻ +éwť?Éł™ŠLˉŕ.EoĹęý˝ŠŠnj'KZyĆĹ T¤Î•¬BBXcˇyJ˝ăT…h“P3(µç_„ă×ţđ•nâŃý7ů?ľüÍźěUőöYş˙âáG1Ţů«R+Ďúé·fó ”€Ů91’CÎěKćčřţ/ÍîqAŚ2”Ĺ[ăĆâc0ĎŮCĆh(çaç¤Ćžć¨fŚąđĐę^GłWZ|Hȱ•lăĺ+spĆ…S>\a}ĺć‰;ĽY^˙äô/(Ł+şSgpgŤ^đáa]€©0E”Ţ­Ęq†Đs´ŚÜ{FčŢ]Óć„wŇoW/ň>ctTÓۤ=rGĎGW=˝ý]˙âŰşÝὑŮ=Ńűgj˙śkş“7““ĺŰŮŮ·ńâE9Ýt§ku/Ŕ]jűśöV\tʤ‡*á:Ý]•t˛´—Ą}ÚJ·)±ÁNIΑm €äśĐČJIŐś’öšq·ćđ%ĺMhó¬w®ŠB|@yĎŞf‘o`e+BX“› )ü¬+­*ßČ×­Ş‘­[ …šĐ´âC%XfŞ:@…çwKJ¦˘íUŐ’ÓöTk]JŤs9:µ;wVëŞ"¶gšî6§mČąkĆYéí«höŽq&OJB¦®ˇ8ś3Ĺ +Đí +Ol=ÉńOr\˛H)áě%eÍ«R·&¶wهp…ęOH3Cú9¦Éc  JşBď1z‡TŰ»eąÄx´Ö—ý^ŔY3Ů[:¨Đăď°Äš©)Íu0ľŔęŕ=kVÓ‡¤9®Ŕüĺ‡y`ś1a Ş:(ĄoÇŰőŐŹ ¨!m ĄtG“Ňš°~ž Ň­‰’#§w–î«ŃX2Ţ” –”=ĺ˝%ˇőĘ\Żz'_ŮstnôOůpˇ¶ŽŤŢ~rP^kśL_Ýă}ÚĘ1Ą µć)ëĚi Ĺ8,đQIŠ+?!ČóŤ˛Ô“‚#˝u)GPí%i 8gÁ’Ł…ŇÜŠŤôëőÝékcxCySo|•dkuŹ…dŐX}XÝýˇwú#ăN +bŁŔu§¦gĎl]$ëoŁŮűtç°Ć&ÝBUŤŹĐ<ăďSN!Ý»WS:Ś9ÂHˇzUcHŘ ÚŮHŃą7ů'PK÷Éľ×:—96Ü'ÝŇçě)“~}|ł®¶(}ž!Ó9‰2eµĚ%ĆĎÖ~Í ”kŽ‹l´_·ł¤WdBĐČ“Ľ%íŞŇ‘ÂMAlćŮFm9h"&aM¤»OÍ›˘ÔÄo)k"„Ç`uPz +<)(0€]‘ŕˇ&6Y}@©Ýť’’§<@úY^¬K}L# +ÔW;’3 {çnű> Ý<ĺhŻÄ7h{®$·Ţč…Ő=/‹)ďeëĆ~MŰ)p»%™7‡˝Ĺk˝uF:ó|:.­":ŕgŃ_B(µöž'Ě eŽôřHń'UDÔdÜ™źX˝[Ż)‡sJk;ÉńŕäBT¤¸¦´y–nź?ŕ/Q\fű<š='¬ţ.iŐT|ĄF‡2hą{LĆw˙ě˙óéÇ?ÔěnÍhóŤŤŇŘžÇó·­ő{1J·v@‰UĄ6mÍĺřÂč˝4z/ôöŤÚ:Gí(îŘěśĺÄş$u(sl´Îµö…śśEăçg/?8úX"ÎťąĂűdóUrřmrřŤŮżűW?ţĹ˙`OĎ÷9RKŮ Ę™«Ť#ły,K¸”`ąůtŰÎ~YęŕQ@/ +ŐjŽž”¸…á´ëđZć4G‡±K¨#«y˘Ć«§5í€đŞňPInĚ޽ѹ‘Ǥ9á(°49ÂŘŻ*YB/p>gM$w!ąsJé•ů¸ÄEP–”4†Ŕ­ź*Ô€Çî앥§9¶Ęă]˝}ĘÚ!¬ťş#ş‹ńŃwYśŮg·Ă`PÖLK®óńěĚ•ât[ăËhzĎKÖťQöóFvëž3Ů|, ‰ŢX*áĽ"'8‚çÉć›pöFş*Ävď«,€”ě©Ýżn,^ŤĎľýę·˙ăěîÂîKńFí\¨ťKDąydô®¸` ˙"Ş 4Ĺę^Â}IᑇźîŃuąľřizősQî–ĺë.ÔĆVOŽBrŽîúë÷fű¤¦wyoĆ{éźţäusó•Ţ=÷Ç·ďú7ŃęĹ.i—ĺ‡jJNŕŘÁ¨@2 Şt›,ĺr’îéçy°Ť5ăÜ%Ś "KšYÂ(Đ!lŕ­A›Íů»të÷ş śč}”îkĄöÖ"\·9«É˝˝ş±SęZ¶+BÄY#fŔ[ĘîB krU hżîä™K)…p˛¤S“Đc ÷ëúnA¨ +Íáí–ŤLÍ‚gĂC<›ë§Ű÷šŁ˛” ĎĽ»@ÖĚđvÖ‰îĽŔFyĘÍ…ýŻđ LW–° ¤ •|V@A{°ŽśţDĘ|řá­)äÉę\Zöž±'¬ąťQzŻ@ąŔ*:Éč}BIvëju&Űś·#Ť„ Is„µPăóćęŰîÉOV÷Jr'ş?^ž}=8ůů‚Ą.őÖa0ĽlŻŢčťŘłąŐătُpôÜľň†ŻÍî˝5xÁú šâLŰë×1„çśy{óÍčü×ÓŰżßţFî!lOżw'/JZżnŤYoáŤ_D‹kjr†.iÍmş ¤ÔőńîĚÝGł·ăłź`ČËÚ„v×”5F4“‚Ą„FűŚuçPOL¬­aűik䏟Ź/v&Ď­áusý†0Y& ­1ŕ‡$rŔş%1†[MYj#yej¦lŹĂá5mŹ2„mbě9XH +¶uľ˝Ź™Ä“LHHđĎ}ÖYŠĆ ź¨ÄćNŐČNQlâ#đźU±[“†Y*ÝdÎ'SŐ`ăa~°ÖĽ51GÍÉ+%<* ­´Ol3ć„1Ćp­„Ř„ďÝŻÍÚűĹG”€Ňú:*1Q™,"#$‹ék:b°FcÚ#9‘üÔ…VÄł'FrŠ9¬+ť,ahŻ.u˛u¨ŹÁÔeë6°.µÁf» â[`<<ęŕRDŞ}LŁö´`}@»;ey§ 않CŽŐh ŮÍ&­®Ä»%îĎv«Tş•Ôµ şŕĎŤ©Í#ÚAâ­k†«Áö=¸€ęís.\QNnŮl-DÝn¦ç +Ć/hcâU`ŤÜE]ĺ…6aڤpí÷ݵöQŽ÷{ sŁ}"Ç99˘üáLĽńóéőoÝÉ=âmY©wÎíás˝w«¶.·ńú˛ś]@HUi©É©5x©´očđ Źá·s\Hč}ą±aśÂ2Ľ.”ÔÇv÷ž±†%ÎWăMšŕ¬!ĺN)oŽĚ‹Äjw®Ó×e%)IŤšÖ®i<°v{„»OyP(Ő_ýËʰ$a9p|Λ!tIżHş„”`uv‹B‘ń8{ˇ·ďÔřRňÖś1ÍĄU¬ÂĆěT”§%ńËWâ¦U ş0·ň,€h``Εp…0Rä“#8HţZ@'µŽîÍęRüeŽÎTU@ŽTÁ«}B…OčrWWÎ˙bźŘŻŞ9ڧ=âÝ9 ×hžÉYEjBCá™Ó eőPG,Ň>¤´[źx9HdUěr/ĺI<ŮĚSÖnEÝGĨ[ ·¬#w§÷—Ď˙j§ŞţŮ>•©¨¬64á–ă9ˇ„ig«Ě‡;%öĎv űE´†đ[Hw¦´ëZ Q+ĎŘHú S#>˛“=9¬(iÉhÉ íOłŚIčMŢékŃ\knüÉ ˝s q©}řůşŃ缥?zŚď•Ć&Ď´Eš=Ňę—”&|Qsóť‚mťÖÍž7ĽuÇĎS©m©q.ľjťü¤nÓÍeĺôlaňR¤$gÖčŤ>|Ł9ޢ˘´Kbli®s ¶ťî †¸¤!BŽH›ÖFë 씩krcëĎßš;TŤ¸d˙‘žiťó‚śěÔ  ě‡ęĂ\ńΔ6‡X 8^ üR|ŽÂ""nׄ«uQŹXq¬(˘ČŇ"‹ŇPÚ¨&őŔi;e55ŢRł"6ţ¸q]†°Äy€j·˘ćŇ JČJJ;MXîZ\ ]˙,aÖĄF™÷jŠęĚ檝Ł,ĺďVL-F÷WűUJNkTF´çűĺ”X_ňVfç¦(4ž–Ĺ,íÎś“wŠr¦jäi˙Ďj;e>GŮĽ´Ö+ö^QBQäH—NŮfŕ´Ď@Ľ{5ýiQü"Ǥü)6k DËýô\_Sň†ÚŘ)R;ůún.łľě-,đ†UiĂm.Ó-`y°kú=kŁ-B‰gç|č;†_"t˙ĐâC>—9Wo­igX•Čăćů&-^~ŇZgŚ1ňĆ×E9Ä„ątŮ"ç3fĎÝ8ý+#Ů‹ç\´d˝ąŘ8¬ă’Ň©ńVźšŰŻHk$x3ř"$;19­˘Ň†JúăWÁâµŕĎáÓäÎiAŠłLˇ\D6,G0ĽŃ‚ó×›$ýLÝÉŃ>QMjűýŰćüŤ.j|Ř^˝R»Ű}ĆŘgÜ,ŕ ”5ßżř-!^ůŁkŇě–xŔR˛Ö¤‰”möjJ‘6i­˝Sv±X5 …–#4ř˝č€Rjj=ŞŠIU„®EYÂĎ’°µSŃ™YLÔ^UK\*x–¦§–Á$Ą¨Ş&˝XÄ4 ÂČQ6~˛z§ĚzĽŢŽ'e)ÄZT„$Ą5“ĐŞpM€0S–s@Ť`´^UŔr4HťT"«ą†óĚTÍÖĹ˙´ĺąäĎŇźÖp|öµLź–”}ÂÜÇBHM!XµÖź`xěćńů‡ľGëyÚ¦Ô K÷b_ZFë¨7»?}˙7rëpźr‹|„ ČŮ3wp?»ůCëč;ĘI]“3ľ«čť’śŔř ŃĆě]77_{ó׍ţĹËoţ•;ąú˘ŔčŽ9P4Z—ĽżAő?Uô!l0ŚŇ=śąŐ:ł:çPRÁÎŻ~`ţŮĆHZCP¨Îg—żžÜüVn;Ííę懼ŕţ*K<Íł¬9@O /^ç‚…2aM„ÁäIžŢ«HyҨ?äb ť2(Ďéź•d¸, ŹÝ +śX1&ZtЍ…4 ; +Cř«űe–~Vŕˇ# .¨l-ď.kj«˘Ä2šňI‰ń¶Ŕ¨ôşŰÍu4:ËĐ<-ÖC\BvK·Ä&Ü +đĆŔIŽNď*đrŤÎSN*déG´zë7¬=xVˇ}(JÂ8ÁSÁÎÁGńF[ʦřÇ.–˛¦gkŽś%Ü,ĺÁ§mď›eílEbĄf¶®í%¨gާ\‹Đ‡ŃäŢîeŠ#z‚ިq%]ÎÍCÄvéaÝ4SćĂůR䋡-@éű5vaŚ&şÉ° WĎ{<©4ër5[”ŮGňµ’C€'/úś Ĺ\ńΙ…µG”Ń#őv~w÷Ýż6zçyÄ|µ‹ c4ŽěŢUĽz+46Ĺ5š« ďňî(žŢlu#Ý QÖó“O?˙Ë˙utúq·Ş‰6Ľnz +}źr˙Äę=7ÚWţâ}Ý[ŐĄžź@Đŕ1´>.ŢÉé_Ĺ`§,…xo +¨*í (gH[ýÉňĺ_ţ‹˙XQ˘'y†R›Áđś1ű9ÚÝ­gJ‡n?݆ZC(Íš’j{ţ6Ő»ŘoźľúÍż©h­g•P;¶¤Ň%ŐäŻČ†A˙ěćĂߍϾů"Ë<ÍŃU‰@ßĹj&’ ˇ€OÂčÁ×ÁG¸’Ú~E11‡^çT &ʆb‚'ź–äDUg˘83ZăŚŢ‰z§PϧşHY„#˛ÉÁ2ßŔŁĚłu=GčŇÉŐMäD¤E(šM­x .JGZwňüAÍŔĘbśgü,e?)˛˘5¶ăcpőź>+íäéí°ć‚wć`iĽ&S–Ë”“Gt- +{e™áŰŘv}„’|R÷jĐ_—Ń{’¸Ú%fŞ)€ Ë„Ii Ą¶´`ŃśĽP;g´3®«íz:±FDę€J +zëH +ÖV¤Ńwű—ţôŽsÇś39cCě&^ď”çűlx@`NÄy¨-D3Ëج=”‚ćYëśŐ­!‹Ő—ă}@ÝÚ˝ËÖöc´ýĘݑެ €î’4Ś3Îă°Ţ Fťu—R|NŘ wđÂíßÂ\8·¦4+B€y+˛q‰GúKs¬ó¬ĚY vË<Ť~ďŁůËh|žĚ®`r .j€Şáž•,ib*Ěä\ŠŽ„`]‘[Hâ?9Ú¬?\B•$ŁM8zo?íł©ăBAá°™żW3 ˇ4VfďL ×e)© +A9(» ş.‰íŠÜĽ­;xCŮ“LM/2¤ + TäĐí¤,uřŕ(ż`ŃëJ;OZ»č˛N°~™öµÓ\ćé ĚĹuVjŇXŰ%©ĹX#T­vže•šU>Ý5yÖ±ŞfëŕXż"D™Ş\ç<=Ą 6*{eŘ$.˝đ1ď‘(()xšg2eŻ’ç2Tnká¶@űůşmůëg °ž))é§ MĆgEé nî§gV1"ż.u{Ż‚®ćI7W´:eZŹtçEˇ5ɉ.«ĽkK‹—€ŕęš>¨éĘYă÷­ĂüĹ;ĘđÎÔQ–"`6ňÁtŞjŞŤ¸Ä¨;Ë’JţD ćJă(ľq†ĎI{ĽGÚ¬ż@ ˘®őá[wůť1z‰_U•.eMhŁîĺx†Gtíő·F÷š2ÁHíÚÁ”˘o»E1=Ĺ­ĹŕH ɇDěCw)łÇ‡3ÂęŃ)wÍHm2DňB1’*ŚM§$x†€–Úľ¤íY-˝RÜF˘ç˝ôTF„ĆŰ ©qÂSÖŁ^ §%ĘČÖŕ^ę»@—”ŔObfXgš^˘ĄíLş¦Ú~E… NIj“ćŚs×UeXQ†¬ł’ýuU ˇ#+XqÄ^ÄmĆžVĺ6gM¬ÖE Vż˘Pb“ä‚bÝ,Óľä® mH(˝ +Üf ++ĄcD›SÁ_9í +>ĘŐŤ*ĺęÖźďŐ˙äińIŽGAťźä8ÝîĂ%KRîě×í +˛a=É‹Č&9ĘĎQa‰ŤÂţą.r¤ĹH ö žpż˘!EŠÍ ĎňÂAU˙2Ď˙ůKVbĂ<ía ˛u3=ç Ź0ş" â2s„[˘#Î: !C–ܕӹ$µ>: »ÓxzKíôÄ;ŢŘ8·ŻăĹ7Zç +KŹJG·şÄ€uŃťęńˇžś‹Ţ&˙€°e{Öś<ĎĂ<3 ‚–Ő»éťţäOßÖéĎěßJńIž J|äÎ>ĂW¤;ÇbažÍţť3y (˛fOM6Lz}í¬ŞvrŚ_W»Hr¸Ér0R9Ś 8ĽŔ6 \˘4ÎĽÁk»{+¸sĹ_Qzg§""źfʵ†ŚŃ•Ľ‰™śUXźŮíůgY&[1d7˝ŹQ ĐŮVřfŁ.·ŇłĐgLęb‡Q†€Óźě”˙ôié ˘żÚgţl—ĚTŕńŇ+pbYŇ«+=čő—y‰6&„Ú'Ô1­Oýlçu›G„Ôú2Ç=É2ůşUf#Jî˛ú”Qúŕ( +(ăÓ‚X¤<§{ŹŇŰŻ›ź(dŔ,K",Cişí´Ü©+Ý˝ş•©™X卙h/@‚1+ŃţźďOöŮL%uć_îłůš“O Ä©0řéŐ¤ŽťÔ”~žmT•^‘oPááeé0€:¸íKČ’F1=¨*–Ďr\ľŞV¸(=éG:EÚ§¤VžóöęĐwźUŰ´ÚĆíÖ äGLËŮ6öŃmÚąJT“©É»Eů fĄŤDĚĂň…6˛§Ň~V–ź GŔ¦’fO rĚ*mM…p“eDBŽębȶěĂ…xäÓpx+F‹/«rYj©ńVŤVঠĺ\ZU©ž§¤@0;ŕŠúXnśí‹Îö{ú"ĂŔš†j|„¬ý¬$}YäźVä ˙"hŘĄŹQ€{đ %.Gşpk”1đÇwÓ‹ďúÇW)@BnÇ0rt[¶Ç˘Ţ“Ť.v1 ”[‘Ű%>˝. üčńÖh¬ĺpńÇ“QYŇf¬1ˇu€|Ĩť"0 !.©0cvrMď3ułΤ0~™šťŰäX‹4šö~Őř"Cý*CT´Ş0ť;«‹Ť2ă*ŢtŻ&?ÍSU9ë)§Dą%8mÂ,Ňđ]ě»Ő\]Ç“&äŐľ,$ ¤+;-<¨sNń;ĹtůŇ›j*:ÔüW»ĺ§ű *h-Nk×ĺnARîÍăťšţ´˘e٨˘¤§b.÷śé­ÓšÚ‡” VŔü˙éN R[çĂ*ëa笲ů$ϢúhłOi]D]T Lc]ëĂT#d•äFęFśIUnĄÓ.Ą”ă w—’[Ý‘ÎN“x»Ń;ŕ‚=H? +đp†uIßëťGłîđ¶®KB0ŽřYâěŞb- Şzpî9o–ĺ aÇ“—˘ŹşöPěąôĚ ÂH“1†3Ľ=(Ë b#ë-aÝ)sŮEĚqA‹đźű0„ zÜ#ô˝Ş’{d"9ŘČáˇëX¤mLiô8on.ÍÎcÎĹ` –ű2ÇěU$RN$„S©•‚PlÂW”>,q2 ą‹đ.űsL eL$#ZÓ4’p>*¦‘­™53GúEˇ‰0ޞގϾţć6…ĺ "${:u@Y*¬<\]Ú-k™’ş[T2ĺÔ)í•g9WwŞ\¤ vżŞÔӻ鬧9vżŹcŚ©=vĘrž4sUFýé ‡,¬VŘF2~ÉYí?ŰͱS*˘{ő jT-”sŽň`®ŃľŘ-fJ"˘A>˝€®ŇÚÜ.G‡´1Ť?)itzoUî!;ŔÓŮ@ܦ¤čěÇ©˝ë?9`€[ÄOrz—ŘĂĄŇÜňŢ ¶Ô{Ś3—›GrĽ­ŁfăµŃ;Ó:'9&Ŕ&aí éŐ(:HkďRpś¸(5JpňZżŐšGĽ›^ľTü™•¬ÍöVo1îBô˘7Óă e´ýáŤ,ÓxgzŔúű,XÂc}µëLfVëĐé_Jѡmyg˙l´Nf§?ô·źĚö1‘f±¸˛FJ| “Ś,&ů 9^@>¤ŤÚG*'­10ŻuÎŐÖŤă›Y +/ůHŃŠq§eřkbîâĺ;6śę…‡ +ŕ˝=ŇeÜ9RžÚľÍsńŠ—0jJ˘µOTtŘ_f™¸‘4FB°V›‡řdµ *Fş)óQ]n1ćÄH.0özzĎU‹’šZ„JY1ÖśuE©UŐűźą «üäčô;ĐĹą3;Ą]ÂýšĆšz +ăVM„6ŠNoťÁµ–ř†$Ďú™Zz!{ŻŞZś1¦µˇ„’±'ąš–J„@WziÉśRĆIŃ/W7«\)KPŐ +ź”Ó) +9»Ú–¬ťlr¤^ ,ŮźúŁkŕá†Rć +C®¦Wťúzcl•‡ĎQ:XAŢß0!ëÝ˝˛’¦Ú˘ř$/ähŻ’Ţ=ŰĽą;¸ Ć·ářVMNj>,2Ţé–äulkíÓîń;ov‹4äŤo”Ö HôÎâŐŰŢĹŹÁę˝’3ÖV›áäFŠÁĽ§1ŃŰÇfçDŠWÎ3?5ÚÇÁü^mqŢźĺMź··š«WÎ膏6ś·ôú×0örţŮ`MŐäĐhő?(ɶfôo)6ĎÔîŤŃżUÚŚż‚Ţé­ăhţśv†ţěU¸ü 6ŹI{"ĹG€®ôÎ aőI«_Ő;Ś;ÂËôöˇ=¸ň§/ťŃ=°*ůk>Ą¬qEéRö L•㢂!RÖ0χu­W‘;ŕđtPÁ +Ç”Â5çL ×ąQ|ÉźĎIs€R°ň‡×N˙žPđRc]·Fyą]qŔ±=Ľ1ű´;ŮG€4H8ě W\´1zçÎčZh¬ů`Á¸CÖF—˛C«w)5Ń Ö›‘F.±&'U>"ĄFšbµ¬{yoŽ™gťeŽ‹b§„Ď›x mŽ•pău.âž•5” W[Pp¤E5\yóĆňÎź\:ĂăÉő7Ţř‰ľŞöĹh+5N8gŐčźDĂ ÖźUô®Ö>~2¤‡Q`85BAĘpŞbŕô¶¤Ţ˝ˇŻÄp‡Š6»wzëĎţhź4ĺ‡ňĹtNĂĺsµ{ćNî˘Ĺ ˝wbt·r<·úÇÝÓŹťóŻÍÁąŃ9r:ŰĹíŹF÷”qĆ (˝u„ÚC°Á‘Ö=Ö’ĂîćÍäę[ Ť°Ć@c0˝®âŐ«Ćú­Ôş›JcËŮ]ĆęF_mů“o|m . gś§{.Ĺk±±męýwţÖ_Ľ‰–ďśń˝Ő:ZÜţ…?]T;b´ çoĂĹ;gňŇÝńá‚¶5­Ťr¨ëŕŔ–LŰ›7ýÓŻ’ő›öć8ą˘÷± +jrŚÁÂL"q°ö¨$Ä©Łc¨?Ľ؆6Čłjă0śĽ0şgrs  úăk9^FGIŽ´Ö +Ç^c˘ZŰ÷Ťĺ+ozĂ6–6¬i}%ÂëO­á ~FŻ &włë_'‡ď´ÁE´|ÝXa8ŻÍÁUëđ]´¸ýżIz/7®+Ý÷źxóflK"E6;7rU(TP*ˇP…śsěś3»›Íf3“˘HJ˘r°â(Ś•,YrĐXΖle۲,Çńxî˝sßZo˝·ˇ»ŮDUçěý}żŻPçŞËFG¸t;Xś§•–Ę)ţź›íar!,c´łpB Ĺ1Ęĺ+¶:ďî–Şýĺ!dęS…Šz<ę«riU*­šýY0Hč:rĚJ° [,qĹy±Ľ¬^ćűOËX™´Ń“2%mţ¬GŞEŠ«lv ÖŔtF,Ŕ™”ÎÁ™˝1 #3R˘cm63M+m·łúŔ)ŔG@íŐý[Ôâx¨î‰5PýO·%ń-†ŠEg°ę +5<±ŽPX*ËX0‹‰i:Ţđ(MRiŇ)Dz/ŮuA-q9[ ­u‡Ě´bcúHćŤuřô|nňLnú€MOárÝÎě *“r5]𦖕=·ÜÔa‚†¦ăAĺÜÁŘ1©LZ¸’9P äW‰P Ŕ§ŇpÖDlŇ%·`jĄť›:Ŕäú€Ĺ®ç‰öˇŇm& ¸hńĄ@'vÄLÝ<Ě{Â%˛ĂéĤŤË<Đ)ĺQÂXŘDö-¤řjÂÁ[éT#]ňWbŐ—zbF(¬°ů6; .;“„Ň{b&……ŞX¨Ćç— ş`˛\ÁҰ™ŇˇŔ–ý[&@®Ią JHĎČŐÍňŇ]by })8ćŽT^ŤőN)“§řâ!W}Ńj¦·™ťÚŤÔ׌žÝźFIJϻBU"Tu2)1ŃÓc˛Ör %T(;ą’/1ml+«T´©,ұú\UĆĄ*›žáK+|yŐÂdU¨ä Ő´„4 EŚ„DE›D¸ĘçSÓ‡Ąµk²ťi,_ BőqG uńp—a”Îi*1«ĂŁÇÔ.ĐL“KÄř,“žň(]_jVéś +V7 ¶ýJ3^^°–÷ńzwĚ({”™@a]®ďąC 13kň*čĚ^$‚Í®F§ë÷Îî=V_8ŰX9GĹ[îPY(.đĄEo˘#çłÓg˫רdĎD+FOŘć‹y"u2Ň +×6cÍm_˛×\ż;ÖŢ6±)“/NĘźŇJËžô‚/żâŠu°pţ©Ĺ¸!ż ÂjîIíý`kOjî1éąloŹI¶đP>›ó(“d¬Gŧ‚……xwW(.AyŕrmÔá×!h"L,Sń^°Ľ®ďXý@ +!ĺµXŔJËgłsˇÚşT]W's“V:Ż€ŠĐ[<Ô •)(ą˛iě±Ů›?7h¤@Áĺ}ń›ź÷(<\'Ł-ĐT*ý)D‚¬±—_‚V:{.ľ`pqBŇŰ0ošŽöR“űŃöV¸ľ©ô‚ĄĄÎÚ%p3ÝoĂP}ُ|©±qWkó®ĘÜi:ZĹE±°`ő§˙ú—‡[é©sJkGެ榡ń'{ *J)]ą˛žž>ťšŢŹ·¶¦÷n¦şŰ0Čz|$ UçĎ.D:»By-šQÚ{RÖ:i&ZAÄ Ţĺđ+reµ´vwiőĘÔÎÍKOĽMĘM\îeć® +Ĺu‹/ocŠîpŰĆ–t„2b)eÜć+ô)5&ŐăňËÁň:ŻÁ—ósľđ.•0”\ÍöheÎźŞ;ľô"8{wőŞ‘NŽ}Xź¬¦Âµ“‘Ć©ääa´±9wňćâąÇŃ`™ĎĚĺçΗ—/––Χ&÷ŠËWŞ›7ŠSg®>ú©˛bˇcl˘®nŔ‰$ş§˛łg‹«W“ťíúÂéÎîM”Kg{[Őµ+R}›O&§«[·äîYo¤ĚešîPNOHh°BĆ'™ü’?7nlFZ'éD3ŃY*‹D¸ćŤµllšRšţDÇďćf.‹ë&*Śi6ÝC… &@‡A6á”ŮÜR¬±§´v}J…Q޸T˘]±´Äç"ŐµT{czçz}ů"¨Ą‹ĎÁÄ%;»…ŮĂD{'RßKën©Qęť.Íź×b”(”D¬µ®mĄ•ÂüĹÚâ•“—źLuv4D”TzTrĘzŚĎű2[Jçś›+!ŚĐI817퍷¸ü,ťč°éÉXmŐŔĹ   ŕ…ěT´ľ,Ě“RÁNÇŔ “˝O¤!äfĹET( +ą9ą¶ęĎL[Ř’7ŢQZkRqÎŧĄę2«‰ąÉôä. >“ęÄ«gîy^ĚĎÁ8fÎTÖ®%¦ˇ›¸ě¬K¬ß*ĺőé“÷‡ +ł:—ĎĘÇëp.gJKgÓsçJ«wCXŁcÓaŹkQtj1;Wzú"_Úä«[|a‰Iv#ĹůxmAĺdĆť„) Ś&3Ĺfć\RçÓÉúŞ™ÖąŁx´ËV©tßyé©a»oÔâ5{d‹GęĎ…ŇŮ Ő6˘íýpëŘĄ?Ö…Áń'kre6XZŕr3 *•ÎúĂĎżăŁu xł87< +óW đü\޶|ăÖsw=ó=«OÉĎTÖ®gć/A˙Ż—®RJoëŕÖĺG_Ą“Ť“ˇ#fĺÚF~ţl÷ä=‰înuz÷§^7Ö ÍMąşnlµ7®Ż]xręŕ6łRnoÖçΠ|Î-ő˝R&Ĺâjzú\óäSgžLô&WÎÖgw. łćOM’‘†'Úsłíí[­˝‡řÜ´ •mţ„;Xt‰%1˝'Ą#“|f)Ů;eň +F˝QÄYĐ+2ÚôĆéÖöą{ž/LďYdbęb´} UÖ K—ˇSđř"ˇĂ—â3ĐéF<Č%Úba®¶r±µy-;{Hu“ËÔ·®ż˛ !ÝÎôöŇ“gÜ‘2ž_ +KľD7ěůăí ‡Ďä‘ ­‚ĹŠęâ…µ‹Odz§¦–ĎN®ťÇ„ üş\]†š/Ěź[:|đđľçĺÂ|oa˙­ç l€%LTÂеT9ď]JLžóÇZS˧×÷ŻńJÉâ ‚ňă±)*9Ďe—Ę+÷2™=.S±WZú'¤ +`Ź/łă&ćO]zjűŠÚĹ~Zét¨ľ#V7=±°:!TV÷î˝xďó>ąîâňbe…+݉ŐíÜÂŔ! ąÜśÓ#Ś'Tń'&cőÍÔĚ9ąušÉ­Ř<ńB{×+çU‰rJ°¸ol¦Ű©ÖrqzhĐŚ“R6ZÝŠÖNJĄ5p12ZUŞK«÷··Ż™H9R[ ŕ +‹ÉéłÁú•śöFű÷ěŢő¸'R:n ‰PÓźšň*-6?“šÚU–›sű/˝ůÓěä.)ćZËçÎł˙`iĺ!5¶NÝÜąđ„…NoŔ›Fj›ˇňj´ľ‘™=«tOárueďzkéŚ= •—ĂÍ­@fžÍÎ+ÍťÖÖ­ôÜbşÚżs,}TŤ ŕˇbŐĆU¬qíPqQJ7•ł7LĘen¸îUąôlzę4'ŕebú,Ą‰“‘Ş•+ ŘĹaTFÄš_UˇĽřd‡ŠÔ2“' s\qŃĆ•¬TZ)®śşö¬'\gJ‹çÝ}:=‹KE"T2űSÖ@6TZ $& ¸€3Ţhť†®‰µ}±F¨°ŕ‘«ő©ťĆÜľ‹Ď&[Ĺ…łůŮĂÜĚéâĚ^¦µTŻÝ÷ôď~Đٸ2îä-Taó|nI,źJ›tbÚćŤ\zřńçߎäşRiďGÚJ÷03wWnń:¦«sgĺňňĹ7f @B” ä+٩ӇľŢÍıʢÚÉŮY ;›®TÖf¶otW/»ąl˛ľ*ÍY™„É›@ز/>*oČĄ5[bĺ +ď˝đPR™Ćä6ȢMť+0bĆ&"d»ą©ÝÎÖu©ľf ¤OĽFÂDŠĐT¸"ć–‚Ő­xw§Ľt±węťšDÉX?ęćÁűz»VWŻE[‘ęj˘ąE+MŤ[p˛žhËLE-T„ÍÎ@€çćgOg¦N‘˛ŮĂ3JEĚĎČőőxw?ŇÚuG;VoŚWę  S3±–Ëź0ąź\Mtw˘­-_ +ä$řť“Mđ™žWi˘"·2&•MŢđ¸“5¸ÄŐÝ›TĽsǸć]|8ÇśăĎ˝q°x.Ń×–'śţhe©±~31yÁźZ.L_ŚőöńhC©®n\yÚΦ‡żZŮŃ_ô!Ö}™ŐČäŐ@fqÄęłR‘Hy2ĚTzúL~ţbgíf{ĺZ´ş-–I>ł¸{#ŐZsřGAĺ Oy•9:9'×wč䤓‰Îo^Śä¦¬^aTç}ÉY"Üň%fĺę§´«s‡„ĘŻ ÍÁ$ô¸ä –”Ęb˛ľb÷ÇMPDď ď ; K|z:šâŁM«\g'ÜŘ&˘mČŞVNă +A˘Áőęâ2R׸D'W #ÍTw?ŮÝGşs +Rv(;˝qöA‡'‡¬mÓéţúÉ[Őĺ‹R~ÁFĹw.>\ťŮďҰ/>ʰ?Ąq„Q!, 2ŘĽÂgA¨…ŇŞ\ßvËő1[Ŕ€Ë›fc•!#¦vřľŕ«)ě d´ŞŽHđEňţdÝźlŢ@,""M1?ĎÄŰ1“,ζÖ.qůDČ!B—*T´C†»ţôT#Lg¸¸ ´¶•ÖV¬łă Ut™’ËbvJçfĄTcîÔS§޶öHąn$d8$evH(6öř„sÂD ţ8oú’mOĽĹd¦ tÄç¦ĎŔl:Ů´ťMvŇSűŃÚŠW.:ü‘1»oHONXý'´Ž!%šîěĆš»ńÉóľÜťěj]O¨­¬ű”i‹?sd‡lBÉÉćZ˘˝5áâ´.> LB©qÉ)­bş3!Co¸¦A¸Xułş|MĚ/®d;'Ůô¬Ú%2ÁÂňîuN© [˝Lv^Şí¤¦/ç®ú3v®^ćók»7¤dŰIrq±:>Ů<)ć—@ó…D·Đ=Á*íÖúÍĚôE.5GÉM*ŇB¸śi¨ŚK Ýv*ʦ&ýńn¶»WYşěâŠă€ÜlüĘ˝ĎúC-*ůăÁî]ĚLV.«m~9Ő®.]@„‚őëź…”týŹł;lÁBZ»żąp¸a4Řżë ›«¸Ąć ů/Ç zWČîÜ9aТăv?'°Ęf &5µ|‰-LM¸G2z"Z,äŤtĽ TxXŘÉ5Ô›] c0“&OTeŘ˝7—pҡ`¦ăŤ5ńHÉÎz0JKŚ7g×/Őěţ°… +łÓ…ÉýâěąPyÝ«ôÜrÍäŤÂx†ós0Y(_•·`FňÓ‡“Ű÷v6n¸„d<×ZŘ˝;Tśť@řţG‡î°ťÉr©Y!» + rđNJďćÇÍ„+‡ R^ľ’íť‚x5µóPiöb0Őí-]ČMžF…¨u±·jÇ .›[¤Ą +i]ÁîöÇ_ůî{Ť©­AµÝ0L^a>Z”ňëR~ĄżY„ĺ yyâ”JŹť„[ĚúĺboéŚTťžŔ(«_ö%ę^Ąę’`F’p#(:Ú÷2“W†1× 3=qv Y´™ÍË‘ę˘G©ŮůŚÉµx%2‘+ D”źŇŕ5ŃŇśG.hÝü éäň^ŕđü +—śŇ  !WC•Íâě™tď¤\š%ĂE­ŰźoÍĎďߍ É;TN{ č–;T´KŠýËż*Dd• +«T[Ý$Ź5×B+— +s‡Éö¦/Vă•ęĆţµ…ý›FÂL%°`/Âśô0‰„dőHp‚ZŚw‡H¨éw¤ĘÉH}ĎLÇG,Ę>ˇ¸şĺP&íň§Q_ŇŕäGÍŁ›Ů@üq*\Ă„‚—4Ź‹%čGHFcV*XËKľô”ťI@hŇŁ<-őM;Ô˘C:€ŤŚ7ÜŔe*ël|˛żF‡Y=‘paá¸AqżŇTš›plV_Re÷«¬„#H +„öLMćgĎeşűRaŮÁäŐh*ÇéW&¬„Îéż@^+Ż\MO’łPĚǵ\ŇÉĹ]|† +ŐĹÔ¬”ž'Ů,â »üńcjç±1«ĘŕŇY=Bž0yTč÷đٵťkÁHéĨÍá‰@÷ˇlÎČ÷?ů"ÂCzĆSÎ̢ľ4HŹšÝôlM4ÝŐĚôš\ź’k“éî|kătoçlai‡&‰ 4k;éذ ×:i;)BŇ-3‰*Îz˘ąPˇ}ňňĂŤőC©Üµ±Q‡`“•dwÉ_ęM đ|>šíbĺaťÓIËv:2îđÉń;§¨ô¬‰ŽâBL*uéd…N˘˘ńđ6.ěKf2sKRkÖ̆-´L†k4}tT?a%-ŔěRť]LZ ÚĹĘ”R´3văŢXdĄ4˝R_ݡRe˝G " źŇµĘ¸ĹwdČpçImĄ¤ě źČIč]<ŕ™XZö&&ŃPŐäK€/›i‰KW°`lőŞÜŚSHĆ6:9˘'Ž MvÚĺ‘]TÄŚ j»oĚFë0„¬ťš‚¤Ća&ÄąťË퍳t˘tĚäuúĽ@AńžĹ»sĚr|Ü6¬ĂŚnŃB†‡őîŻVř1ľâ‘[|fŽQz¸ťŰąŇY;+“ź2ńŤ'­Â5µ‰¸c@}lĢ2ůHľ/Ż„óK?;¤uL8LnŢŧż1fľmĚtTew +RaKL/ą|™ łĎ*‘ĽË×»‹Űłë[ç®_~ŕÉ{žzńÉWß|ë‡?ýđ“ß˙ůo˙řô‹ż}÷'Ţx2ÓŰÄÄ|‰şŢă$ĂŃd3™k¦Ë“ąÖberqjugăĚĺ«>yîţ'OÝűčęĹ'ŻŢ:ĽďÉ 7ůőwžóťÉµý™őł±Ę4Ć',dĐ+¨H Dé`R +&«¤ SůŇäbgíT}y;×›­.¬5Vvçv/Ü÷řó?{˙ŁŹ~óűo}ďÇ{W(M®‹É†ĆJk,ŚŢÎŮđ”ěÄËK624bpăXqr-ÝYŠT¦ĹB'\ťžÝąş÷#—xę…o˙âOťą÷›gxĆ-©ť¬ÎP™<€$_đBfr6ŹÄĹËR¶/52­ůĆüŢĘÁő›Ź˝pßĎ˝ýî/ßűřwŻ~˙§'/ßjĚí)ĹW ¸¨u0V +ńÇ06Ąs&,´•‹©ÉDk=ëąćÚáµ˙őŐűžů·s÷=růÁgĎŢxôŕ<üě«ďüâŃç_˝póˇŐs÷¸ř”ĆN«­'˘ä +ďy„˘”j3r>hd‹łŰçëSłkű¶Î_?}őľ_˙îożüŰďţř·/ţř×>ýüţ§ľË÷îśpWą-„Â*ÓáÜę‘Ńş š`S/epŤ(ç d„ŽČ©úÂćŮťK÷­ž˝qöćŁ÷>ńÂňŢ•âĚAŞ˝ŤsécăČ׎pŻTŞMĎ,ťÜÚ;öâŐ‡ęµ7ľűţź}ňŰß˙ňĂO>üř7˙ů÷˙üôó/_˙îŹyö•™í JsC‡É&Dä2ĂÇĺhŞXí,mžýÚŰ?zí?{ćőď=ú«oľóÓźôůKoţđť˙Ůßţă/ďç<űĆĘá=c±Ň\ľ·«Îř™h¦Ôťť?uöěÍ[÷?ńěóĎľüÚŰďţôĂßüáűď}ôęż˙üť_|ôĺźţö˙üż˙ߡČ?˙ň?˙őŐGžËMn°ń¦g9™)5§–×á±°ą{xőž‡źyń…×ß|â[ß~äĄo?˙Ćwüއżţč“/ľřâţŻ˙ţđ7_<úÜ«;î‹ä{6ď˘R\¬)ŻšÜ’Ůé‰|Ą·¸yęüÝ·n<ňĚŤoľp÷ăĎżüöŹôŢÇ?ůŐGúë_˙ô·˙úŐ§_|ú»?|ëÍwç¶ď8Äąnąą\ Ů (µ|c®·¸µ˛{öę}Ý÷Äż>öâ·_|ăťż˙É{źüîçýöן}ţÇ?˙ĺżţÇC·ţč—ź=˙ęĺĄ̂Ů3¨urŽ™˝:„łS +%˘ąÖěúŢĺű˝ňđăßüÖë?ţő'żřř7oţčŻ|˙ÝóůÇżűýĎ?řřüó˙ţß˙űÓß~ţě«oíśżĘ6:¨2;ÇŚ.Â@,I–¦ë“k«'Ď_ĽńČŤGž~ů­üôןüŕgďżńîĎ~ó‡?˙ő?˙ëăß~ţѧźţÇţçĎ>üô®źĚwע•*\W÷÷gs ©PŚ’q_ “•ŮBkˇŘž[Ü={ĺÇţőĺ7~ńÁ'ź|ţĺ·˙ý§żüč7˙ő?˙űËżţýą×ż{ă‘'ĎŢő©alŃ…sµĆĚěâÖÉÝĂs—.]˝~í‡|ëí·~˙űßůç?ôégďýę˝—^{ůěĺ+SKká\ťM´ĚîŢÁ ÷ň,/e˛Ĺ•őťËw?pýÇn>ôřS˙úŇŹ~ţţöţko˙ŕű?üÉ—ţ8ť_űÎKŻżµĺţöŇA¦µěŇb¬+vÂŮZ(YlO­Ě-Ż/Ż­^ąté;ßyű;ßűţ÷ř~öĹ_ţÓń‹>ýě7żýŰß˙ăł/ľxëG?ľúŔíĄm6Q#Ĺ4ÁÇ˝P*_kϬlî_\ß;łľ˝wůÚőWßxëW|řÁ§ż{÷ýŹßúáŹß˙čß~ţů'ź}úŮgřńG/żńÝ3WnĄóvB˛!ż\ŇÓN*†Q!AJfóŐĄŐŐűxř 8Žýü…ożőÓ÷~ýĺź˙ú׿˙ăWřĺ—_üň^zĺ•ç_yméÔe:R˛z V^©ČĆë|ĽRŠZXß=xř‰§ź{é•ç_}ăßľýťźľ÷«żýăüöËżüâŹřăţńË/?ýü‹—ßzçÖ#Og+L3’ăzBcőQ$"U™‹ç[K;·úé—_{öő·ňţ‡_ţĺŻ_ţő?~üţ~úé—úÓçřâżz˙ăO>úĹ{ż|ŕ‰'.ß ej8UY]c”–˛p.-MÎo\»÷Ń×ßú÷źĽ÷Á;?ůŮgźţĺź˙ňńo˙«O~ű—żţ^çÝźţř'żřŮ/Ţ˙Á'žŮ8wł»}óÇU¨ÖĐYĽf'ĄŇ#Ś)µć¶.^»őČ ŻżýŇo}ëŰoţäçżüű?ţń›/ţř“÷~ýË÷~őÁG=űň+űçŻĚ,í°±zĽ˛ŕbůR+S¬ĹSŮZbÔbsş·°2ńęŮ›\żpőÜţŮÓń\’ćýś48BŹéĐ12a@¨ObÉDˇTnV›­ĹµŤ…őµîL÷äţƵçďąďÚáĺ+‡wÝÜ<{©<5ËČ RČâ]2XĐYIŤ´ş(‡ËCzëŰf×ö"ńD!“\]™?8ÜżvĎÝ÷?zëűß˙Ţ{üćýŹ>ţ䳏ź~é…ťs‡Ő©)(F‡2®¨ß„1„?´¶unűđzş>•,Ő[­öüÜôŢŢÖ3Ď<öÎßůđăO?űÝoßůŃ;ß~ăµW^~éé'şuď]«ë[ůú4ŽfóŘČ eOč × ŁzLkvSW˘+‹K÷^»ëµW^yí­·^{íĹź˙üÝ?ýéĎ˙Űżž?»·ľşP¬Ő•BĹ‚yÇ N§7ł›3ą9ɡ-Čńl±1;»töô©‡yđ™gźúΛŻýę÷?˙âó?˙ĺOďýň‡O=őŘáĹt1gFÁhq'Eň^Q’Ĺj}şŢňŇ´‰3lŘáňO‰;5®ţV Ž +T0ŹĐŕ,^ŁÝăˇĂB¬MMRéúFséreúŔËFŤfÇr‘HÜÇV„P™¨"B,¤;T¸3¬u˙__Ň;8!k¬^e B8I„ÂŃ’Łé€ËéÂÝ^›đ‹6Tŕ˘5uńĂ*M"XţúQÍmÇÇĚ ˇ»×AĹÜlZÉOÎďŢT!·¨?±Y +¶y"Zg`H]ś Ü>¨ľí„ćÎqË ĘiF¨7ęUH.릻7Ňß“Ä ˝[4`˛]t‚‰'4¶q‹[í Ícu1Z1a&l>2„T𩭠ÓŮ0 (ł‹vxBHÜܨ…´z˘ÇŐÎP5ëPľż †ě”4n!ÇL¸ÎáŃ!*łkÜ䲹/ź…ŚĐŠ+4cÍÇÜéŽaŐ±AŢ@¨9™¬O™¶Ó©5޵Ó:;58a5ŞÔÖ± ăĘh´âŚÁé ó9ń ÚĘ đ!PűťcđF>+.ëlľµsÂä5ŃŁfż ŽŰFL´{BŃ\{aýŚÍŽŚiqČt`ť¤äÄŘQx…!ýŔ„ÝęŚŮţďŰ‡ŹŤZlî h×Ô8Z„ăĘ(-Ł‹?1aĄCĄP~Áń3ĺđ*RĽÎMc\eŇ&wČLDěľdËP\Ö ü׎Ťß6¨í—w¸C?‰ŇvO$ž_P*GF-wŽ',„Ăźô„[„TCŮ´aq*”©Ě;™ä±qËń ó Ć¦G!»čKL‘r3/ůBŤÝ %7jňhśAq‹uą¸ctËÇUv­Ő#)u5âZ'Tťq>G𥯖T` ef·…ó #¦¶úíž?\łűŁwŽ›µvÖ+Ő©PŐA'´.ŮîËŽY— ăÇŚŘ׎©n;®·€ŤiťvwĐፚ\ĽÚJ«,ţŻŽM ;«GCZ§ :¨„“Fő„ÁĹCęď蠟vö7Ž0JSĚtŤnţظőÄŐ‰K#Î;Žiî2G5¸ŢÁs‘I#" ¨đŇ GŤP Z”źp°OĚ›ô'ć4ˇd_¤jóĹŐ6f\ă>6h:>fłą‚©â +â‘ŹŹ€ŻĘ[P9Ĺ ;aelľ´7Ň%B *Z‰ „”DkŹĎ,Z˝ (›q+slĚJRĄÎľo;®µzcN:‰3)żX0ˇâ  +ůĆQµJ‹´¦öldd@ë¶{#vřR^ą%ĺ×p®<¬vŹŔ ˇÜ‰qŰń“ÁîsRŠ»»iÝî`láŽ!«eÝlÔÁFďTۆŤžŻv-’á›čĄ;;Áü Â(GŮ,iz#m{ §Áä gđĘ5 B Ĺúkü‡í"j%ŁFL"¸)UŹŚŮTvÂX¨¨'Ö¶±Ů›O‡2’Rę.ťĆ‚Ą=®q̸hĆű[L@UOXĽz±¸qX›=©¶{ ĘőgťľŚ›/ÁüÓMGr +ďČaH‹]śťVÜÁj 5GE&mdLNOú"•cj[ß‚m”ZńÎĺtRŹ +LçľřpŔüęБԉwµ({ŰAďdě¤8nŔT&74ő tŞ‹Đ©ţŘ6ĆŮŚG´xtÂ6bň˝I:ŇĺgQ63öŐ6#:T‚˙µz"NZ5öݸy„J|펱ۏ©ŕL)ąăćĘz$8nô ©0H/ÇáhĚBŤŰýŁŻáÍdÜD(Fw¸:s:Q_2A§/ú2NŹ‚xăNoBëŕ·ŽŤő6čDĎŃ«rđz<&äÖ«÷Çę»j§ ˛Ń›51ůÍnĘ´\ Č%ŻP ů˘Ť OiKÖBakŹ ›ÇěGáOjě •ŕ'lŚMʉ1©˛ĐP–_?¦=>ę0 ˘Ń%ţÓmĂÇG V ă<¨óžĐűŽk=ß±Ý6ęw›[˝X]>Dç˛PľBĆgŮâ†TݤSSź«4VWĎ>h "ĂVď°Ő§sGÍdă딲0bç@ôöř +‹ř’¨/iďďń1’1\Č[<‚‰ÚI­8…<.—¬>ĹÉf=±.—[Á‹' Ą«'‚¨OńŠyŹ”7{$ť[Đ:Y»'<ĐßżĹpű ä ĚÜ™äsNŞů<$zLďÔ"*4hđ$lĹ-TH±DJ+!q± +Pú Ć©s˛2bóơşŘpeví"ęŹß9nT;ĚXČA&çŃ@ÁJ'ĆLJŠ+;×ÄTűȰaXíĐŰ|&—ŕć n® ł3p¤T˛zĂGĆĚÇTŽa¦v0V*î ׍¸„’ŤĄsD¸Úß”ćN¸§™ídÔ'WůDOmńŤŮě€řă· [ľzŘn¶±?Üä•¶›K“b^í ‡@ań¨ě~•póĹXm»Ľt ńC÷ůs­uĄşit‡tŚů°‡ŁrÁA•íč° EĚ.đŮŁG±Fť*UĂŤÝÜĚ!.Ç­'“‡1GüÉ 3©¶zFµî łÚęŽaűŃăŢ=a @J4"śĘL iđ!= Ň×^ĽäáŇ˙|tâx_L8*ŘtxR_­ď–n¶ÂDLŰŽ«Ft¨®˙ÁbW° +"Ą:T´|Ě€i0ŃH+–@Ú—žq ­PˇĘôę••KOĽa3ňČU6>Íǧé92Ú=˘uŁžH­łKđ…oś0 éÜ °6OÜi—f/*µ-1^]Ţ»EĺŕŇ|~6T]“k‘ćÉHűi[éX0V˝÷áJsűĐ’z§_‹°zLBŮ—ZŔĹÚ„…ÖˇüP_Ů ťJÚ¨´Ů›vřót¸CÇÚ*»ďŘ –ő«=:L˛z«'†2B(DKK8—†öôÇÚ\ru‹5Şé„ +ŐN$hŘĐż^íŕŃ@ŽQ:.:îöĹéPVŹúyd¨«q“¤ŘćŤ0ŃâŤ:Ęeu8b"‡őŘq°N5‚Đq/*ÚHLź5úSÇ´¨ĆÁŢčŕ-ÔNfÂpŇ „ŠM¨‘0Ü>jÔ:§ŕôĺ ˇę•¸­Qr0pŽQ'›±a­“ł˛ XW*«,N….>DpÉŻÓ·ëśŘ1Ŕ¤Ť ź°O˝“„®±{dÔź2ÓÁň2kÂT˘|Ţ +$©[půř¸sDKÝ“Ŕą*)45iHďµá2”7ęO«‘vçőč°UëTÖŻô¤ě<@ŕÎQĄż«SÖýµÉ¨„‹e.9 ‡Aâ”ŇY‡ 訮;d‚H e¦˘ă V&ˇÁ%_zšěßţ7›éd¦Îń…—RÝ@ŞcóĘ\0bܸÝw§Îĺ¤b©ę:ĆgŹ ›M®  •yř|´˛Â¦z‘ÜÔÚ™űB fb­Ťää~jęt¸±¬¬;ąśĂ+5–ľőúŹ–ĎŢR9ýfLŔą!VĹĚJ¸´íâË”TQŞz·|B[=I,Řô*sBád˘{É,čpÉ„qL¤jµ·ů‡Ě¤Ĺ!Ä")Wś ë$Ë‹Wž¨Ě_°AöÉ3©*9ëw(e&X2Q;Yx&Ô¤ alNďU&˙É:,%»$ź…ÚÖO¬Ŕ¬xäşRŰJ+&2¤˛y!ÔŔD€xBe%©±kË®`đň„Ć5˘wéPŽŠ40±Ě&gÄôś™ß>lşsÜ6b$ŹO8ÇL4HĆ]\e‹*‰%\n¸‚“'Ď[´xăd¨ę•Jl¤Zí¬›0v`ܢ·ű!1!t4ů¸ĘytÄ„ł·?1Şw k7Â˦ş.C+]„+"¬?Ňpú’ýť¬PŮLÄŤ¬w…U6a̰’1ŻX’33ŕ;äF”Ăw ĐÎý/ćH[ČÎM‰µťů§ŰGŽ™T&ÚI%!ßÁ"(ąńJÓ'ĄďR ëśZ'cě;©ßDF!+’łńöi_ĽĂ¤'±pŤŚµ<ń›ť#"- ‹jeůĘőg‹ó§ŹŽY4vÚŘżoy¤#M*Ü6jnóD'lL˙:>$¤'ĄŇ˛XX´Ó2Ŕ{˛łéä3.1‹‡«ľD7\ZÉ´wŞs‡ł»÷9™¨ÎE3áššu÷wlÎ=a&ŃĺňócŽŔ1Ę%çR“çŇÓgŮܢ#Ó{5&ąů|¤¸HČ{ ĺdSřZőĆę.!GĹë\¦•j­pŮI ÎešëĄĺ«Jď Ö1©IőQ[ ÔÜ8}í™PvrPŹcbÝBmŢB0˝,—v… ¶”â•+&gÄś;Sťż¸vî‰Xă$^oé°:}jH‡ąŮd¸şíěĆşűĹ…«­ÍGÂŐS \JĆ93 `°Ňq›?;f〢GM$ŔŢ1ŕDĐ"AM‹Î¨‰Jşä&WŮňĺVŚtĘ ^ąč N&Ť0i·÷Fęry…Ž6L.´˘ŮÄI' ŻGŻ4(X’ µĆ®¶VŹ .ďOL±é9'WtňžHWidŹŚXMD ęěç‹P9†092X Ĺ€ZŇôwý +€»Ůč¤ „=Ú5’˙tűđ°ĘqbÜŮvÜ@¨lŚ+E|)“sxbăFđhߨÖuöŹĽ(—‚…ĄęÔé3w?çŹ56®mqŮE2ÜĚuö‹“rucÄP;ťt$”ä +ĐýrŇş˝B:\śłz#pľŕDT¬Á$'…Ň2ďŃR±ÚÝŢżů‚ + ŕb>X\‰Ő7CĄĺhc+Rß ¤gőŕsĄ1ˇOďvó%!»Ôظ™ž>ěokŔmTDă†-Ô€3˛;Ô–·›«7ąD'h‡Jóf*t\ë0“’?ŢŞŻ^ŘżçąőKOäfϸĜ¬”ć¶ďňDkÇ Pźź ć0©%–‹SŰ)«vprĺ$“sř˛d°ą@Őß­ÎŻ”—’ŤŤa~Ű qÜęđ„«.!ß˙ dÓ{đľjŚaâŤÜěéňňąôÔN¬µĹfçQ1‡ú"Ź=˙˝í‹ ţ„e’ó‘ΡÜÜ÷„;Ă/°bˇľ<˝q÷×OX´N·ĹúÉÄüĹô¦¸Ş&"ľPńˇgߞٸ4@ĺäü‰IĄs0}ę‘tďśĘÎ;÷G ŽŞś' ÄťCůţíRÎ &hĚ„”t B+ďFZ»Ééłµ­[Íť‡Á ~n˛ĺŰ;ľH{ĚL÷·¸„xâŕ]\93}Ň:D`ŤÍĽŠ’z„7SŔcăNÉčé/5KŁâŔ?N&ޱ‚Nš±đĽ2`,¬wYqnHďł30éfŻŚr.=«ŻÂß!F›»Rm›Í-Ą;§AÓúŰáęq+Ć‘BZďâTfÂĆŤša=ĄCdŕ`~L‚I1Ѳ hQ˙¸ĂogRŃęzaţBaůŠË/´7”úŞÁ+9Ř4—›ó%§Pˇ©¬§:űL˛”‚qů`nKL‚ű’]$XŐăQ D‰‰Ý>jD Ę-ůˇ¸Ć¤gmT ăŇáĘ".u@He:ZO5V÷onś¸±rÁÉ%sµ…3מ fz@YáĘÖÂÁă÷żQXżEĦMTlĐ@ tRÎ/ŤôďAŚn ,r€řOÇş*;sdĚ>fňšń0Đť—ÍTś4@ÁBĐZş±¸¸wť +W­TŘŕX)K Ą­,Í<ĚN › ˝;ěť%ĂŤ±ţNČ”ĺ©n®µ ¶hĆe„Ë9ąl5¨2ĺMLŠĄůÂÜ™­»źÍNź>˘ÂŔV|ńI2ܲůSˇŽ«đ‘~/çq6őĎÇ5ŁšŚN˛Ůuot’Šö† ăĽ:ŞCY#ś:y}űÚÓ˝ť›Ĺ…KľÔś S÷·‚9u÷Kˇü" ¦ Źř˘m…’“ň‹jDĽmФµSŃÜ$É&ŹžĐüómĂj·C¨2… ľ¸!ÖldŇ€J”T7ˇŇ‘ÝŔ8z|Üu\…©¬ đ•Ęꇮ,ô6€˝Ç¬ôh˙ë!DŚĎŤŕ±Žĺ11ODjV&iőĄpŰjˇ|ÉFČqzBČ/D2ę+ÂŁż]UĂ1@o˛¸$e{· 뎩*ç˱Ćvrň´\] +HŮťłŐŐ+ććk7ĘK×”Ö~iîbaţi×bľHĂH]lźĄÉ¨Ť)’ˇv¸˛éŽ€k]V2 ظkńäň:…KýŐ‘N.€wP&łńt{=;˝źž:©-5—ΗgĎPr•QšÉöNŞ˝ťíťô&z"6bńóŃf8·8 ÁŽM _¤b=o¸í ·ÝBYmó;Ľ1(ip€".3—›»đ§@só›çŻ=ö˛7TłĐf\"ĺ¶ŇŘ™;őŔć]ĎefĎAéŽŰ).Ő¦]-*ŚY}G&\CFŻ ܲşq cpt.5"¸u!ż4sęŢs˝¶~íE¶¸:da\\Öä‰j]ÁQ+m&˘v2I\¨@Ý>b†—ő'çśLaÜ€Ô˙Ş#OŘ®™=@S\iz'ßÝ3SLz 6ěl$‚Rz™™ËFOrÄä÷ĹűWG˙Ďî +Na@Ks\B¬´¤w2ß82üµ;FT0\Ńźvk<|§ŠT!!+•@ożS=nň©¬¬ĘĆBŚ2UÁ~8T^FČp$Ół!0#8ľ¸N§ÉhŹ/­#\Vcëă"°«ŤÉ@ď@MÂO&ĚÔ„™ÖÚ[4VFcń—~cČtű+®÷w\1źĐ ĂŻ0ÂçČp•Š”ůx5ÝŘ€0Ž•ůł•ĺ‹ńΫ:üQ“7¬w÷w'ŁĄ’ ŞM$$wOxZ*íĹ[‡Ąů»MýÍźA^âţhLsÔâU9ü"F†Ű´ŇC…D‰\g#ÓXł“A«+-ζ֯Í>˛töˇý{ţ-ŃŢ%…Ň©ý{/Ţű &f xĐŕU±*äV2ÝĂÚÂU‹'őŤaëĐo‚Ž÷¨(äĘt÷؆,ˇjĚiĐ@ˇˇŠťN@l$¸L¤4_\ąä`sŻ”7Ň­3rn©6wXďßś·Ňţ`îüý/RJçĘ­ECX?öśô ľB;HŚšI@G>3,,ć§O­ś{¨˝~"–ý‘ćúé{l¤¬qrt¤ĚÎŔJůLh hńˇÂ:„ëĂüC‹Rq%ŃŰ —@ÚěÄdsÜâ5{ ´fďě>TXľ;1uh än˛Y±đňÁŁö@âŽ1ë Ń«Faâ@‘áňÉpe÷čýČ Í„ł÷Ż·X‡ÍÔĹnc +´2 t +ď8ŞuQfPÓßnÂHDěLÖŞÖ—/-_zRgÄ$Ś. +• •˝Ń†Wéú3‹ľÜŞĹꞑaĄ0ŹřŁ4ŕ† ÂfI±Ôé@gcŽŤ™o;ˇ9:l¸}Č0 vA×÷ż=ĐâÓŮy`ˇ;¨2án.ăŤÔřÜ´P‹µNú=”ËńHJŮFńv +â­„s)x-×8eJŹJ+…ze3+AXŚI9éô‚ŃÂüůÇ'ĐěCú&Ú™!˝Geă0®ĘÍŃáŠĹÍŰqŢÉQQč”njz§8«,Çňó“«#Ąe]ąş‰6gćĄň†W™5ş!4…=bŃͦ‡ Ä8dCهDD©$„;Äźłöó…pű¨îk'T:'ĂDŰ|j!ZÝ©oÜă Wé`~jýŞ?5 +0nˇt_-î@č§t”úú1-~B…ᢛ/Ž<·Ťšo5ŹY(ŚËúc.éť4§TTTeĄ5@z.N‹ ĹŮö„Ť‚Í´O"ţ”ÖĆŚęI˙GFĚŁz·“ +Ź›ţěĐ}iżŇ%äkˇBŃ,e:'1Đs_,Ó\K¶·ŕ'fZŤŐ(‡‹ĺ@bVČŻŹš!»˝rťM.0 €ŤeBŞŹYřۆíŁz"W]¬Onö·‰S!j„wKU±ĽkťUżcÄ+áLk*áN@Ľ©±‰6!d!_LčűWW´NÁÍe1!çôljn°Ľ!×Ó“çĄŇ:­´4XŇw¦µ Z×ß„Đ&L ˇ¸‡´.¨X`űŻő˝ ýÍę§'aÁd'ĺRsnßę‹BŔKOźZ<˙äâŧÓó=Éix#FLug¶[sg=RYĺđMŘ诱lÁD>R±`śĘŚŃbĘ˧!°X‰Ä¸•?¦ÁŔĆLä»sÔÜßjŰLYúWhkn®˙ń™ŢÍcxşµ\ťŰnŻťďžĽ{r뮹˝{* ç¤Ú†™Ž&Š3ý §LLă¤q!ç 5P¶â‘»"ŔlD’ŤgęušbvG´6źŢ3n +‡ČFG†¤;TńEŞ©ÚňÚéűH©Ű÷ĺţ7Δ„ä j˘ţ̸™ćŁŐDiaTŹß>h5R:T"Ä +t„‹Íi0ár®˝1jŔ‡uýV‚ąĄĚäA~öĚäÖ=bn z?×\é­]5zőÖ„ň0JăÜŕô»|1č&Ą2çćRPiZh7G€UřŇJrîbgă^!ŮťZ<ýú;żf•î°)€°Ub!ZYŰşôÔÚŧ‰p率Ő"¸<ôXĂWÍ%x¤Ž/:é –Î‡u8 řÔ¨Ů;aĘHü* ç‹4ÝBfĚL@…zĐ P*«×ä‚÷Bµű2x¨†Ël˛©,łą)>?nlűł D´‰‡ŠŮćöäĆ˝T¤>b¦'lĽ‹¸|iH¬:†¨¶ůŔôuîA=1jň‚ްą.RČuVü±Z˛qďr¨8ÁQ#1˘wCŹój±ţNř® ‰»92TLŐ–zćÍçľóËňüi·ĺłÓ\v6Ű;Ż­•Ű'[3§h)ă“rT¨ě –©pÓAgÇLĚŃÇCýOč ´&LŢAµűȰĺŽAĂ Ę1˘\ň‡ë…ÎNsńܙРĽ‘Śč.—CĹą´N…묊íőxyQëdUVĘ +ęMDŕÁ<’é*ą©ă#–ăp7ş„!ŤtŢr?ÉDëZ›ßŚť„<—šôöď©Ëa|ÉÍ$ ­őrď$prR+.i,” úšP–Ź×oh`ÔdFY+)»…Ľ'Ú ăx«›'+Ű7×]|5\ÚŤ”wHKJö¸xÇćK›pyŘ´’›Ä˝cŘ8fňÝ "Řk,ÝW[ą‡jÇU.‚K3ˇĽĆâůçcŞŻŤô”ĘtP6ŃłP!¨ěômZxW;6- ôáR•/¬2 ›“ú+Łj‚ő*µŕîäé©íűÖ/<µs× ł{˘l $ľ„ AťĐşŽ›NŚŰÔVßžpřâ€ÄCFϰÁٵRŕJfśĹĄd¦˝şzćViá”–ŕp0ÇâŠŇ8%–ű÷Ů*-x÷ţ†ţ„ŽĐĹ;Áňy`ÔDíd¦}Š”[ĂĘâQ&‹q%‡”V¶rđµ0€—0Ś ž*‹gPëÔ:hV©·WÎMn\VęËíĄą˝kŢHe6ŮńĹť•óąŢžŮŃŁ~*č-ť‘3HCF”×"A=2»Ł¨/iB8ť91aěoÇg…á·žPŮÝ4’ž™Ó“8—śZ˝’im™) WbťÓééópRľH˝µx.QY†Ěî¤BzZLN“üW‚`"ŽŹ[˙ĺŽ µŃ0aĆnTwöŻŰŁślŹŰ‚´”¶ŔbPĘzSČĚĘĄ•lď0ÓŮęNŻýÍOţaţÂ=ŕRKóRn¸T61ë3H@™XwńšŹž¶žł™đ?3!ÁEŠ„”Ľď!uT*r©Étç|±·“¬Î]ąýäâÝ׹D +ĺ"Ĺóáürş˝×YT]¸Už˝Â59ą´sŹ$'‚ŚĐ\~byFź$Ô¶5ő°>ŕÁQuČ#žóÇLÁ36 ř,)ł ¤úD(·Ľy§ÔÝ ŁE!=hç’š:¨-Ýťß}˛qď{©© ŮÖęęÁ!ÓçŚ&­…Św0Š=s9 ‡@­ťł-č@U*Üaµi`đÝ6b1>wΊő‘é“€”­€ qíŢ ĘiŹX9Ôš­ĄŐŢĹTy>Y™ń±&%B±šy0%d „MÁćW`"–­,ۛdž\6?ăBDÓ@ź°Rä’—NTşŰőŢ€“Ŕd F…Ó«¤2áĹčŐź±T±—®ĚŹÚá+ló ~\Dióó#ćŕ-&šjš]8ĘhĄŢĆüŢŃÜĄÇBnŃ/–śD|zůę'?ü•‘žs@ÝŮ)WÉp Sę–ÁPŚV +ĄŮ})Ń·# ťF&ŕ î +8ÄËéq@2ĘeÎNŔ ˛ëś{ĚI{`ŮęćÜp8@ádçđčíqéeô ”%bM!ßW««ząßťŰ~đĆg…©M`‡łťťüĚśźă“3AĄnHZVK·}†E+ubčŘY0‰CfdĚI`Ç8ŁR›];x@ie_R@Â91ÝRK˝\o#ŢZň q97m4·ČhCn4Ů JyVŻJEŠOĄ+¤šT˛u`sĚPŘŽ†ť„:ę†] ĚçHµé b&9äć^őŤzy®Ó±,ćq1Ó_˝QšÚ`ôJ(7›čěú‡“k÷VöW–®Hů™ćÜĹ7ľ˙5ďŘđ(˘”đpK.>óÍTî)/ÓÚĚLů¦-°ĺ›Ž &Ź1Y4T>kĂĎŮŔŹ Çwźc˛ë@`gş—h­J†Rµ©-X~!]śÜ¨Ěěŕá‚˝t dĄ€ŮsqŔÉÚ #¶»Y/FďŚ)Đžç†čAęťüÜ5­±ÉĆ;2fGUPR˛îˇ4?›Âŕs(Ůtq'‰drF&\„ɉwPhÔŠÓłr p%­äéH^Jwę«7»›G˝Í—ćvÎď>¨v!"ě +*0w%›0łÉO§ÜŁ(#d´ °!˝2nC\ţQ'ě¸7(ř˛şđsÍJÉ9ŕzü¤rj"xüśĎâćL.ŢO§­ŤËE)V÷ŕ +°<^*tľRś­-^é_8ęďľ\^˝éb4ąŐ…«h´ć2!ëeS°C@ĄjoĂľ}bĚdĂPŘěLnĘěĄěŕ×sőţÎŤ@(aĆÂRq‘I´•Âlzv/ŇŢFʤśŮŘ;ę­ß°e7 +)ÝŻ÷/O.]W˛}řĺR÷éóOłS˙ň¸ůś-h†;¦Ë©él{—‹OŰ`ivă.źhż0ę9kÇlć˘âŔ©O¤äz©ęÜĚĘAsé˛ —q5Ęt„Dť’Í•Ą˝—×n˝ )ĹhyIolÄ‚‹zű`šŐA¦iĹE˝´h…ăc^śGcę›A«q+9m!Oć ÇĆťcÜKFůTO.źŹ5·ŤćŽ×őôÔŃłOW®<Í5©0#äz\bŕ¶Ul@+ĺüä%D,žýF·›Ý ° dž˝^"umjóňÝ7‹caJoáZËAĄH­­U×§¶ ÉV«ż»wűy~jŰě—¬ 3m0ŁŠAôŕ~źÝĎâ3űŮqŕŕ\Ě© tĚ+Úđźě'뛑t»6˝ŐÝľżtőµĹ«ŻÎ^|Č%'ÍAÓ‰úůüôĹŁŐ’ŹM.öÚ¨łÓ.vÂAz 1‘ďójő[ÇMgF˝6/kqVmőËcn!Čgg6îö˙żŽYÎL @'SZ[HöXě;gÜ>ĆI\ +đ12VŇ˝±~/Űż†],Z•ňýx{Đč˝ožZWAá;imČ5čßkvłv?jĂ^ŚŻrťł!NLqS04ęg)˝L'Ş^A g«+7cÍŤxý|vęB޵NG @?» X +TđŃq 'ŇĺL±ą´ső.Öxń¬ÍGjŕ"\ěcC˘Üđ2†šźÄÔ‰q¨ô Hv:°ü {ö' ťąµKĄŢš•ôúůÖúKs{Ďf·ÖJý˝P¶I4ź~đ·—ź~f +†Ý„žîě¶WŹő˝Dý"ďZ‚pŁ‘ds#.ćŘz|v +X÷sůHnöÂÍgGo{đ‡™@d'ÇŐjşµžíě%&/{ÄĽ‡PŐĘŔj7c –Ű3I˘ŘŃHľwy0ÎĎ5Xëç˛>ŇpŔ +`X@ÁŔ¤űɰVč:ĐŮ'jĹhnä§÷§7î4Żn\ĘÉëŻ|ďËŻó­ĺ‡%4TÂ䪛0&ü! 8ńP6@ëgmA“źĹ•®¶<ŹbĺĹŮĹ˝7ŢűbjĺJ{ýöÔĹÇŮĹ[™ąëíÍ—g¶îő·îĆç“Ő…/ľúýť§{P… —čHĂđx‹ŹTná’âOڏŹŮżuĚtbČڤHR±)R­ĹJ ´ZĘ"ÖƢM"6ɤf'<É«ĹYP”^‰5× + W›ëwGĺŐ{Ńö.ťěŞéŢĆĄÇóŔr.(—b§JÖc‹LĆ»[±“cľńÁťâ¬%8ć¦lHŘE:ϨĄąpi&Ůź˝pv÷čüŐ'ťµ›Fk#¨ÖÜtů㬠•'<çÍ0ĄšťĽXš=Śa)?îeť€w‚Ň 7ż)ä°H‹K.F +«d´:ěaĆ<´ź‰S3ę&€dbŤh±ź¨-€˙rFfµDc%×ÝÉt6Âů9­ş¬U–h­IÔWvoO®î;ń0°o±Úň •ŤŃFµÁ¤QâĹó»÷⥹17(Ě." ^ ±őÂĚĹ›Ď*Ó›ŔÁB†ĎÍ)ŐóĹţŐí[ď>ýAsýe—-ÔćĎďÝGĹ$ȱXů|ˇ»şô ŃľĘ'ş@ą‚ˇí—“µµ¦ŕ`X'ĺ"ăb--'&÷ĽTĽĐX®ő¶Á'ýL —1µ¦—q¤&w•LÂXľGGĘg¬Ä©qxŕĘů<Ąw„ř´’FťĄ–í§Ă\ +âSA9ăÄe.ZNT¨p®¸­ ҉1Ú\j–4fŘÔ޶üLÚŽ(ŁŇĎ&übŢ›óŃ h°ĎtXr +\<âR¶Wą\[şTČBÉ–zŰ@Âú9-\Zh®ŢY»ö|vďI¸˛Ä&ę^FA˝łtHGsnZA#eX*‚P B +¦b‰âŚo8‚˛Ĺ'Z|á,v$jGT%ÓKÔ–Źrú©08d´BGK‰Ćrső†Z]q“ÚÂŇĄ»Źß´‚źŇňÝË™©ËFuCHôÇĽě ń"ĘŢáă|síô`Ȭěc3Ś1Ą–ϧ»ńÖ„5.ß|˛ső%`áíÁ0p"µ•»[w>XľńľT^łŁQ®ĽůÁúkWÇ|ÂÉ1Čä ±ńY9żK§L‹“›Fcý¬łĂ˛Ź†G*RvNLĎRzďök×^ţPJtśh\ŠďŐŐŢĆí wß+ő©óYZmNř¸ă#®ż>1~쬨AđS:ňť3v»ź‹¦{ăfČŹÚin FŽúd„Ë]‡IÚh&Z›éÉ=X®˛j±ĐÝ-ö÷k‹ë—Žn<ů^®»!d»çßŘ{řýŢĹW_Ü~öĂÖůűL¬•,Ě/\x9”îŚx ¬r ă ŕsM.ŇHŞQ«ĺJ›}4ŔB-ëÍőDw·ąz«ş|Č%ëݵ«Ĺůhs]mnđŮ9Lk žjŽ7sńąž•R˝ˇ´“ĎŁÔwśRŐ„č>‡j ©°ŕłH´‚hÍ€TÁÂU8T„…¬b›˛ń«{Ů^ +endstream endobj 34 0 obj <>stream +]mo,Î_OOíj5€o%՜ٽĘĎ(…~sóA´µC%§(˝ëôĘ7÷PŃŇ +źBĹkşĐ¨ŮËBŚ2š@)}çŚëÔXŔ +‰”Ž×ÖŘXۇMNZŽ7Ý4î +Z|pň{wßştçygő†^čłZĹ꣼¨xj0Îw‘—HÖV’•ĹH¦;ęÄŹťsŽ:I˛ÍOEAĐü¬‘átąÇE3§Mn.Zkžż9sé•ęâ•pq1 „ř˝gď¶ć.ŽůŔ’A!ç@µqđž‚-Ŕű‰Hş¶ŔĽ•eÂ#@ PÔ JoS±NP*)ńÚŤ‡Ď/ß}Ž ?ť¬ÎßÎN_Ń«ËáL¸7uÖSč\UsÚyO‘k…(Ý…Ş/ą'Xµ˝ňę{?>g‚ŽąF픇Ś1zGIĎE’“(®ĎnJĆ6hĎUÇbÓ>\L5—s˝ÝÂĚnvjS-ÍňF-Ó:ßÝą7µqµĐŰŕ©ägÉX; d$Ł^™Ţf˘•ÁŁ,ˇžŇŔ•°#6ÄńŕoLHŽ91“ °115ŮXąąrýťéťĺą˝é…íőŰűo2ćWýřä^¤|ŢhnOn­ßx«uţvnróđŃw©d׌EĹüB|ňbjúÚěţ[łoVĎß)´7żűĺďž|÷+®Ťů¤Ż89Ů4ďE +ËŮĆęţÍWfvîäç*Ë×ňs—ÔÚbyażątuőĘ“‹/˝Ř0ÓZŰ˝÷ŢáăŹöçĺ|UĎvjŰ +ŁnŇ…k\¨H„kśŃB¤<©Y`—Ë44â‚6#˘ßś¬HŐGĹ­°ĚW­‰‰UÔl3[źÓË \r–Ş_˛i7"ťůfŠ4H gP_™đňÁNb’ToBŚX ć żY˝ TŮY;b p>*b‡I)ŇjVJµËł{­•¬^ół`'k:ľyâ.hőq`xů4źč¸1Őâ6Ť1űBnvÜIŘś '[ë­Őë…™=)7çă3cn†•DŰG긔óS‰ ›ăµFKZ Á?Xz€ŽŘG@:qÎ{ü´óĹ3ö+îE?&ŁBhţNZÍ.rĆ~ç¬ýř¨÷¬uQ&އ’~JőÓŃpq>RZ!x5äPsąĐ»oo‹éi*śW ˝ŇÇddV/‘B´ĽklŻg ‡™HŤ +—ÎLŔĂpÁÚ0{cgĆ=Ŕ:đÓ©ĺÂ\ş˝Ů\8YŮŰ˝ů¨˝´—›Úšß:µőhőđÍţÎK©ĆŠ+K‰f¦6ż~ůźšTňsŐĹkÝŤ; bő•Pf’6ʱÜä•»oěÜ~ÍAhbşĎÄ»JayvďµŢŢkńÚJkzýÓ/ľwôş™4ęË@nW/íŢűµď˙âýýă+}µyů•÷ľ÷·w_˙ľ\Z‹ |fNŻm5–ď­^{rëiP®ˇL?;c†¤‰€čc 7“`3óĹą[R®ďgôŇä +)çY˝%f§©xIB­ç»{K—_ÇÂi^/ń:ŞÖrÝŇüm1·ęˇs@ůł‰©·-~ŽQŇ^RÜj"ß g ;é MÔ×qą`Ed(”Ż-ÝÎL_d*ÖÄŐ˘tˇq’ ˘L“Rx¸@D +l¬ŠÉ9@ _ë7ăŐŚD¤ęD” ĺl®:a śzF«Ř° AbšMőbő D´…Y‚OB"ŔśV5{ů! ł >ÖŔä2p©@FÚʉaČR?©{p 7µă„Oz8Ž۰ÓđY;i†Ă*6#$Ĺd3Ń\u“1-QŠć'19%§ŰBj¸$11ĄćŐb5JÖŮX!Ŕj\Ľ#dç€7:ňáD/’žŢßĂxPŮ ćôçŘ90$‚‡ +^\$‚*ůüäÖɶ×F<°ŐcŢ‹L@B17ą$:§ŐjS[íŐ[ Q“íu¤ĹâĹx®MJq!’Î7fË3+ąÎ¬VśdŤ2źiŞ•~ş˝ĐXŢf¨ŢŰÜşóĽqţ&$ŻV÷ ‚;@Ä•ůÍ›ńú"đŞ˘1ÍôĄä­5ÝdÔáGYQ^Ú:đ‘"×BŮĹTűBwűa˙âËíµŰrv†Ť[÷ž~őŰßżp’‹jmCźĽ\Z|ńÁ÷çw_Ę´%#÷ň›Í_82ůĹłV‚IĚF;…٫篽--¨‰ć­‡ďíŢoÄËŹC’f¸:µ~´qçýµű… +‹ŮúŇÝ7l¬Z˘5(śîěÍî=˝řŇÇŐ…›BrfçÚë±Ňâ±ďÉďö DČĄĹÖň JĘ^şúđťĎ~†…rRg3 L˛/d—f/˝±ró»ÉÖžŤ^ľűÖÁŃŰJfÄü´%*ËůČnžš †ĚčęćÍK×^±„oťśřÖ Ó_ľh~aČk ÍłčB"@ű§6pĄHë T.źë¦ĂŚP!L–ꋱ’ť¨ŕ\rJ­¬§w§6îŮž—Ťâ\(ÓłbeVă^~ŘAš˝ĘjŚ”túIł#€R!łwá6îĺÓ¶ÁżŚ—M™,-©ĹŮĚ쥙˝WÚ[÷ó 7•ŇÚ‡tÁ§•ť@Ę:pú#NĆîabN/-ÂbÎŤkjz +ě’ ć­HxÄÍŮŇ€aĺ`vG€×J  ä9Ź2q{ äÇ”H˘®ĺ&aNsBEĄ+—ç.Îlßi-†M5Ó–Ň“ľ,4pc *ˇT8H«&7uĆ Űľą…á +†|¸ěA”Bi ¦T«_„Ř$.f}DÄG©AŢ/ ·˘‰ząµ”m,ÁˇÁÝĚr˙rŞłÎu¨H†’ăb$.©q@&wΆăBšR +A>á%Âsřh’O(é.ˇµL~)ś_PËËBĽ]í_jŻÝH€Ú¤ÔT®±´}SĎĎ(#Zč‡ó3B˘EŞye>BuerĐ×+vÖŚXü!“%gĂąE6Ú@ů8'Ĺ2ĺną»> ÔÖäĘZŞwîîG‹óůa.@¸™ĺýŢú  »€ä¨f—aią0nÇĆ›† ·ŽŢľűř=K@86ârpăAÝ/UÔĘşZ\#™×?řâÖŁwƬŘń!÷¸‹â_«ďVî ±¸pśŐÔTLJh@ś!Ą;@ű§·SŤĺgĐBlj~7U›·@˘ “‘JPČ |Ü LvhÔěvz`ŠŻĂD…„ŃąŔ:xOĄ"¨­îÚÂÖm%7Mé97+ĺ–&iöRz±.tí03QZÍcb’Q˛R4G‰1‹ #…¸žm9„݇zqŕ T6R Ą 8ł›Š×ĺjĽăp ĹÍ”ś0đU›t´ +±q¬„i’|$ aŇ„9;ęö­ŽGNśsťńš¬ŚR-Ec•T± Ôb7Ł., >6é!˘ +R\şÜé…㣾Áş°äLać ľz·˛xŐćă}¨ “ÂůÎÁ&BŚJ()Ů „78)Î) Tl>.HŕxAĹy eĚű‚ĽŰOú śćÄ@Á¦)ÓD”¬‹PťHH“óË×/ÝcŐ (U57—m_R˛K~Rsh› ĺ +đ^LvAś¤ +s)2RÇř¬…äôúúááwť„bX7®8ˇ^ Ľ$“µŔ@ďM8I{@p Š% NxY$`|ě<ÄFý„”¨ĚĹ* á\_J÷c + ĺݨ"éŐQyĺ%˘Jz:ZX  ZVŻ0lňXśFBě…3ÖăçścN*@§|ŃK&px±pfł@¨¸ń@]{0ě"t Ś0şéÜ×î&\Ŕ;[gL> H<¤|\Źř0qdÂ+† ZrĘ‹(î€ŕĘR»d÷Ó@ĘÉę#P”ď¦a¬ŔB/jsBĐľ™˛Ĺćtş}~, t‰9i܉ˇ;b Z˝Ě±3¶aSŔKĺç •<~Îâ$Ü_žŢd•¬ÝK™źĐýD¦uPçĆ=gGěăBĺˇqĎÉďđ‡ühDŽ%-φŇ>$Ěŕ_ź86ä<9ě>7Xł#¤6Ї Ă˙ gme˘UL‡‰Vƨşťđ˝pzĚć‚6d·ř'g6Wvîȸ ¶:1——ˇyĂón3;±łŁ./" l„ŕłb „Ap>€ N?d2[˝~Á9-¸FřÔŕ>µ„޶¸ŽŹŹ›ăxčśóÔië™!節RJݢ' «;7‚Ś6fEl. ŠÝÇ9}lŹxÂČ„_Ž5‰)7 +ŞÍÇž3ľ}Ü=âÉ邍аÝCaŚA‡k'ÇÜß9=ń×'ÇŽ Ů@upá4BKrX_»xMÔ ŁNĚâc=¸sI$Tô3ÉQ 8BÚĆÖŤ—?ř» Xř‹†N Y^’âcĽ’cšŻď^ë­]±BĚY“wÂMšś„ÉE@¤‚q +-F"±śQ쓡Lk~rPŞ«ř`#96”pÁ´Ă‡8=(ڇŁ +3ŕŔ›Ť¤H9w˘´É‡š<Çҡ nٲŮÇź6yŔ!»đ'śî¦5¨¸P2řM +»ź`#Y˝şäÂĂŽg÷1€ Ŕ˙e¤” ćGÁ“ŁÎ1 ˇb.łC`O˘ńŚ®ŕŘĚ˙-đ<oŐĹo®´ĐA6–m®„Ó“1LÓ +`ĘŹ+AÖ`”R€Đ@صD=–n:Ľ€t’–¨@EĺíhÂîQăéő˝C? ťsŚŚyŽź2ź>kŃ {TVď#7bwx†Ç¬gF¬V§W–¤LĘČe“ŕüę$ËĐ 0űŮ1÷đ¸ß v7súśý…ăŁ/Ľ8j¶“¤Ăą¤ÓCá¤Ö2j,χs ĄÝ~äĐZĂ&ß 'M'ĎXFĆ\;‚ł†Ć'ĽCŁ®1 luQ\óá†ĹÍž:g?yf‚Ą "|zŘ>lňO8 ĄŠá\ [ÔĐHŔá¦Ő1ě¶€ÓŔ“1Ůü(É`$ĆpX:-·AŽuŃ–L—áx:ȉvźĎç÷É-]j)©Ú‹C¶3Ł.» U<6(p]Č%§ĺdvÜŰ {€‡I™äH,j¤ #ĄĎÍM߸űRˇŮ?krťwśµ˘G3Ś˘„8žw{}’$F”b0‹mÜá´b_×ĹLVŰ\ź_Ű^m.O'+IIYYöŕ€áÁ´_sT:+ȡÄÉBHŤˇ´Ę)y˝@öŚMxÁ&ąr¦9Ĺ„ăz¦3a/Âx¬ŐŤťq~ë”ŮâüTâ츄Îlp!=_ťjĎÎł˘dÔ𢵓GĹźQS•i.šc"9LLś¨ÓO0Â9šS0&â…ą®`Bc5šŹÇÂr8BsĽ1Â0 µZjşßÁ€Š¸;Ŕ¸<„ć¨ěôqvă {ü´Ýas:,‡M„r&Ö-'VzĄí©‹›˝o-ŻöŐH"DW€܇â‘áqß_˝0|ü¬ŐlÇĘlöú˝8Ž’JH–B!ž=>Ä€a1Š!‚¤ŚŁ=ÎŰ}ä©aë Ç‡Źť4ťq zyG'°cgŠ ŔËĐŤL¦Ť(É(źTŐ~qk­×ަJIiy*sűęęĂŰ[Ď_~tďÂŐŤ©©ŞÓüŢ€Ë Űś(Ś©“QśG`„Ą¬ÁÖ áj>ÜmčŰýÄ­Íňł› ď?˝đáă üŐżůů÷źŢŰY_ť©T +<'xý¨Ë ŕŽŇ:NGý 5TX,&Âi•m—´ŮNz˛žYśmîŻ_Üé߸˛ňřţŢ»×w·v+ĄŠÓX–t»]C#v››1Ă'ĎąFÍȉS'N™†GíGŔewq$WĄj9–8Ćr™D6›Ö˘†®Ą|yě´ ¬Őô»ť,â–0K!ŘěFď^h\ÝjŢşÔ}çéÁGoÝxëŃú;÷zřáýůÍű˙îăŻ=Ú_Y2 Ćč ‹ÝfG= ´H;é™-"ç´ýőŇ…Ő"x]ŢnÝşŘ~t}öń­™wŽţđ“×ţýo?üěíýëąD±Ř¬c/B(ÁürUUxŁÉíö¤Ł …w_Z~ýöĚł›“ď>˙ĺ÷ţĺ·ţňł›żůěÚż|ýę˙ţżýŃ'GŹo-]\o$†b<>V\ Sül]ÝŽMfŃé"YM‘3MŁßIÎO&ö×ęo>Üţýo˙ÝŻ~ýĂwßyp˙ćúůŐiŃăłŐtÂü©Qű 'Î:ͦ0ăÓů@<…ikqÔłˇnMĄ±>­?˝żůäÁĄŁ[[Ľ~ő'_ľ÷ňĂ›ą‚>53Ýšß™Z?b˘%ŹĂ˘ (—ŁŘć¤zo·yk«˛9)=ŘoüâËÇ_ůěůÝĄ÷î÷˙á'Ďţíź?˙óď?úéw/˙ůWĎ~úÉµíą¤DyÝׄŮA@`<`Wig7KŢ8źů›·/}ýGźľ}ĺŤ;ÝŹ_Yř»ď^ţăOźýěăk?}˙âźóęź~rűí;ő[ŰĄŐ™B\W‰„¨$B‘ EŃQŢ_ŤçŠÜáRúɵٗv«GË_Ľ{ĺ·_=˙óź~ôű_~ř›/Źţçßý˙ţź?ýńWí5>}uë—_ľüúŃfL•&,ţ3Ł‹›Ŕ¨Űĺđ»¬AŹ™G"2>•Ą.-dö– +ë]mw.~ęó_zçŃ…wž^{üŇM]‹9!Úó4ЦeŞťÄWŞĚőőť“óĆţço\úůÇ÷ţĂĎž˙żţůďńŔ˙öÁź÷ݏ޸şÜËÇT˘yEŤ“8&˘ŠÍd‘ öpN}y;űŮÓó?˙ôŢ—ď^ţäŐÍŻ>Ľüżzú?˙ń»˙ĺwďţî‡÷ţáË›żůâÖËWçł1‘fh BĚvŻ艒 K˝ýpM{ý ÷ÖŐĘçO˙ţű‡˙ă÷oýéëWüÁţᄌöŻ?ô§źýô˝ťź˝żő«O.ýđ­íËk…Bư:ňâ°éwĘ ­Ä\UąĽűŕhćďŢżřé“ĄŹź¬ţá§ŻýúËóüâßľąő˙ÓÇ˙çżýŻżyë_Ţţożëď,ubpŔzvdÔâôűý¸DÓť¬XU˝ĹqiŠ˝ł–¸µ¸_y÷áâ—oď|ňlĺçźŢúŻ˙ôů?üřéżzőßţđÉOżcˇÚéN…Ž•bš‘ŐCő8µR&Ŕ×ß˝ŮůĺGWţţ‹[?xsëł×7úńÍ˙ň»÷~őůť/źo}ýńáţő›żűôÚ§÷ď^/nvBé(K‘ĚȨýř±ŹĹ˘RÎv<°Ó®,G{Őçwćţýű˙úëç˙ágOţé'ŻüÓWŹżţčđëvôÚÂó«ĺ˝™H-NDEüF¨HD+ÔkÍ~;ŰN3Ýş7Ĺľukň‹7¶ňáÁŹ?¸ř«/nüÓĎžüóĎ_ýőç·~ýáÎ?˙đĆţĹËż˙áÍO_é˝ľźľżSÉ'ĂN/ $1ĘĹ8A.f˘ť¨Řv7rc%z´a<;(}úlő÷?:úőç×ůÉŐ˙őżř_˙éGź˝şńŮ›—ď]_ÇPŇ "Ŕ{qxŚőUut6OîN)vŞź<^űňůĄŻŢ»üożyď˙ü·_ţé«'÷îŢŰ÷V–g +Q™ÂPĚŹpĽ’…Ó˛l(,ťˇéśxˇ—˝ľVşż•ýákë˙đ—ţřÓ÷Ţyíý{˝Ľşúł/ülóÖ…úFż\*”D5CKi`‘€0Š–ĘĆbqkÄĆ”±=?‹żqµůăwö~őůŃ—o|öęÖ»÷W_š|´S»¶’›oEŠi =H»— …Ľ˘Ő(‚KFĺ¸L¦$¬WÝÚ¨|ňhé'ďěüö‹›˙Ăüń“ýŐ»żřäĆ/ż»÷çŻ˙Ű/_ýí÷v>P9ÚÎNĺ$ŕ˛8!I-ĹS^ĐBZŚŕešÖ˝‡3ˇG{Ą§—ëß}¸ü_˙ń˝?˙îť?üäáżüęőűĂG?˙ţťŹž®?żż8ÓI…”ĘD!"’Í7–ŤŠÄB#ŢŚŁÝD`ŁÎÜZÉ<>:ÚmÝ8_|űF÷ןŢúůÇw>}ĽţÁÝţÓ©‹˝Ôt^ +30Ip0&%34âF`‚ ¸Â¸ł¦á‹ c˝W8ßÉě/”îíTź\î>»6˙äęüV;şÝŚl¶őé¨u č‚`€ć§Ä8Á'x9#±l2•ŽJ)…™«Ä·§ó¦bOZźĽ˛ř›Oö˙őOúáá÷Žćľ{·űh=~w>zt>?W%Ô…BA`pÄX'@ęvÄŔQźKÁ=yť/‰[-öÎŞńňNţý»˝?ţäŃ˙ţóßüëŻ_˙Ý—/ďŃŢnżÜĚ'€čµÁ’¦˝něu…H4®°yŤi¦ÄąJt§źŰ[Čßެ}řŇůŹžî>»9wu­ÚđDB»uĚě˛ůŮhj2[[U“– s8^Ś«› Ó—¶ćIâBW}i·ýţ“ëW·¦÷K໫“ńZ&¬)¬"Éu#NTŘ!eńPFOŐEŁ`(Dâ)UJ©BNăú5cg¶´żÜĽ¸X]ëć:…d;›¬'uMá0jÔâ%Mna’4d·{\v{Đë•HŞ‘Í,vŠf’×—“ďŢťýňů…ď=\ţń{WüÎážm~ţhĺ{÷ž_i]šŐ¬/ŕuŚä€B0 Qł‹ ř‰L,QI:í®iĐZ3|qZ?śŹţdýżüýw˙ÓďŢ˙úÓ;_ĽyůĺĂţţůJŻ—Ă«¤%Ł31Q=0ðár® 1)…Ěë\J˘rľ•Ő›ÉđT’ÝíĄŻ­Om÷ +Ő(ť ‹š(r$Ă”ŮE[S#Đ x¦8DQ݇†!=¬¤ăF./Z\˘užLHlNÂ/!ţ(/ +mŕĐ}AδAŹĺ: fÁ´8PŹci1ť(LwW§›˝b44[\^,-Ĺ‹˝ÜĆdzˇ¨,–½\d:§ĺÎ>:lžp» Šn$rjŘőťăcĂŁ6źÓ"I#Ä51)@í$Ű/—fڧ‡˝×®ĎßÝę¬wJE0Šä¤Ü|¦{0q`ĎŕA0†feA”FEąXČgjR“QˇËKr\„0â ™ΠDĘÓG\¸= ś.îĺĺéäu«•V,•V¤(MrÉ:ÝÓ;}¤ÍKŽÚŃa+ę!ă‘ü’ZZF„΢tFQŠű!” Ď«őú\»˝X­öÔ¬¨A)’·{ŃăĂcnÂE&‚RŤ +WůH!ĂCĂćáQkÓe9®Čj<.¦ŁÓŤäÎ|iąŰžÍ_oők™f:ROéY=ętůŽ™&ܵíg¬Đ çěC6â@ç3ĺĄd¦M“¤Ě!Y•IŠH‚‡Vš™Ł+Ű/ݸtaĄ?S-k’@ŕ¨F>ćĆ5÷qŚ1™îě§›{ńô ÍDşÝĹ —îB03aň`x(N%ĄL¶fčY†’\ĚëGƧÎy†-¸Ń-°Ů'y0ŤSv›ßç¸<ČłÁ@™;üś…©Ł´@8łĹĺńHŰ˝ Î~<¤t´!&»fżř­Sł“  „TCŃ2®ĂD‚iiĄ|ĹksE$#f”%1Š "Â4nŘô`Ń “łáůíáo˝8znÜ¤ÉJ‚(€°$$2ŕżHEŠ”…,&ÍfxÄŠ°z;ÖÚ %»BĽ›ďîÉŞ ăŚĆéőXĺĽZ\€Ř¨ăąP¬ÜžvNŚąG\4ip©Y.ŢĂäħÉP¶<˝Mhµażäa‹2|LŇ +)>4Ä• ;tbŘ*1@„\ň9ubŞVonŹzŘQŹ0î|TśÓŞˇxŹ#É:.ÄÁhĄŕ!4Ç”2®ĐjYH´yŁNJ 2\pQ v [PőRq3ű&ìƄsD(ɨĄpzJN4Ĺh!˛8-ŠAK©!łs »‘0­¶…Üy›u'ÇĽ/Ž¸ĆĽĽ—ÉŃZŰŕGŘ}Đ“ˇcŔ\ű|Ď)‰|˘':XžŚňY7sáş´żvca*\ŇKç©bŁVżčD)ŐUŇ˝a fńp#•­7śxĚJ*U“‡¶Q—7Ş|ĽKE›:yÎÉY4ĂL(,?"•ÄÜĽRYI´6ĹlßE'L~˘´|{ ă3`Ób˘Î-iĄ5)żrÎ'›@Ź›`+4X4ôWÇĆÎ 2ÚRŞ›Ńę:źčY|҉!·ÝË›śÜ·O9N™`/“bbÓJnŤ3zX÷I§ÍظGÝ”Nc:3ěžp>\ĺĂEZHŚŚ»&¬ľ@PđŁűYfź0ććLţť0¬¨ö­MBnÁʢˇäĚňa~zŰÍ'`ĄŕăÓ„Z¤µŞďz'PŃ ÁP†Ku<||×E% }2Óľ¸zí-­ľzŇŽ›ťJ̇Š[D¬ňvD1 –ĄGńoÝC§I­Ë%űD´IGAHófH¶ˇŞŹÂb‘ŤOĘąJ«{™x(9iTW ĄŔ¨Ő \ŔcµqA®n„ +‹\bWňĹŮ«x¤nG$RŚÓbSH¤ćň>1ĎŮ2}ijýއŤźµcć@(*:0ÍËĄˇ‚×ÄhĄŘ٦ôÖ —¸Úô%¨Ž«=3u1kPq“cnÜ‹”R$˘]/Y<¬ÍË2á +Ş”¸ö?RYçRRw‚$GUD*€Zs"a,”łM¶˝L"(—ĽBqŘŻś2ăkXüĚ9+lD'Ă•**˘N +Rጩ1ďŔt7•ńqE•‚CU6§ĚČ™‰ « nYŽ{i $ä˘O.űC%ĆčjŐÇÄݤJ{Ä/O Ş‹Ë …ód˘/äW„ĚňI6l§±€+E+qI;’° Î>:iF†¬¸źĎ‰i!>mGµsvÂäW`ąŽE'ůhÍ gĆß>ă6#m>ŢM–€â@UňŃ13 ` $.źb“3d˘GÄ{~ˇpr4T[H¸ÉöV.>J¶Ď[‡OşŔůÍô@u ÚąÇZ‡mň3R¶;††|¬)¨ĺzrňrrćşÖÚőÚĆ*X¤F'űLjŢ/U]lÄźu”_`“] 1Ă +ĄOJĄm>»Š©d.Ň;€G[N2j…%,RáSÝhuͨoéŐ5%?Żććf6ďcZ ŠT´Î^iĺ^săĄęę=˝}!Ý=`Ôş–šę¬ß˛ŕ7›©Ĺ¤"Őíd÷JbęJ¤şćfkNÉhUj~1ň3:x´^źŮďm?ÂŐę +bƢR~9Ö:T÷aĄí¤Ň6P5t26X°…!7ć“Á°—4|ÎAÄ…ÔŚ”›ó°š“Ň\lQ; Q€6™ľŠŰ ąÜ˝ŔÇ;ŕxĎąhź HHnⱢ”9<ŻUŮX“Ë$ @ŹŇ§äür¤´).Ź»RmQÚ4imYńجž¶ł6̲‹ź;cE\T,®Ćëõ X BML»Ů,@`p€^!ĎĄçµE'gŃŽ3H}JÉ/ »AZJ." Šü>—öÁ '¦łń®Ĺ±Óν° `S)®•Ć“±ăÔŔ˝NM|ű´őEjĹ“”6É%fPĄ:î '<!2)ÚqÝFÄś¤ĘŤŠvŔ‰Ž×·ŤÚ/ź@Â%>Ósq.âz‹I¨5Âů~zr‹Ť7Çá®7Ľ€ čT ”7Si‡PsqE*R efĚh„—4¦řĚ|júj{ói~ţ¶Ib¤ş“‹W,dĚä÷óe:ŢW»jű"kňZ1\ěŐ +©7AŠâjťŚµ•ŇŠ”ë䬞ěď?í\8´ŤŞ®ÓéyźPőžk®M®ß9çˇńHĹh^O¦gŻÇ&÷DĎĹçĄlż±z7Vß0ÂJnˇłv·˛x­ĐżÚÝ~Ĥű. }3µ–@¨ÓęK÷Ë‹/%z·ĺę¶ŹÉxčŔmLŻźtĐ&Ż %Ög“‹RáĽZ=ď"R«ĘĄ5>·B&çR˝ĂââíAWźälzrźŠÄĐđH‰Mr©ž]ŔŤŮ d°Ř-źl,B|Ę@^qń©h}—ŚĎ˘ńżT3C‘xe]JN{ť±ˇ†—Íq™•Pi‹0ú6<©fg–v_˛"ę)+qÖĹŕ„V·Ú^ÇÂőŤËŻ<˙ř+ٞtÚÁŽĂ*®OĆű׋kÓs7ŮôÜŽ–—:Ťş…S¨›MŮ©$Č˝ľĘ®Ü![@c…Ĺ![`×);ě—‘h‡Í®j­ýoyÎüN4lCٶ îÄb.2i†5‘äRóáňšÉ'Śşo©:áĺ˛riÝˤýl + +Đh‡ŠĎ$;—Ë«÷‚J^ÎL¦K´6@REJ LĽIé5BŻĄşCą>­#51»d´ŚÎ™HĄ± äbă\ŞeaąŚëS¸Ń÷Ë đüĚ•lwŕ¶îŁŚI$Ü 3\nŽÖkíĹ™ť—Řä$`1đ].>™žŢ/ž?âňKRŞÓęďx˙”•™đ‡ąÔ´T\ŚÖÖăí c@ń:-;[ž;uł§Ě ÎZć<F°›Tó •3vVMNî^}&D«ńÂŘYsČ31»šíßęďż ¸fÂÚşöf(5mFÂ4 +©SN2î$€›Bůóéé›s—Ţ™Ú~…ÓjË7rSëx¤Č );›jof»ł3űáÚ*)%jË`;ŕ„˘Ń +(m@‚€XA™đ™ąXk– +>!ČN«ď%{·3 ·őî>­†ťŢÖKJqÖÉč|z6ZŰl­ÜY=xşrííŇüU9Ó+Om¦wXŁ­¬fg®Dk[‰ÖVkőöÜţµÜ+t6 7ŮÔ Č[żTđpI°ˇ Ň2KX¤ÎčŐr×ęv26đ™ ¶1ťí_ŻŻ?9ɧűre­±v§˝óŠ6yRŰxĚŠilĽe´7Ć4eTˇp Ő¦ŔŽ…+kd|hÎ36ÜĎĄi˝IheÔhىy&ł*¬(…'ˇşp%^]bbuTÎHą^ŞY­­F++z}C/ŻşHŕa(żśĺ®XXP*›tf…IöcÍ>Ý3Ät{37{…IÍň©Y@ń P)ś›źÝşŹČHČ´–Żmßű`ćŕYyĺNbę@Hvˇ^ÚşséţGfDuÓ 93››9ĚÎ^Í̤f®8©ÔÎŐg­ą}/ˇÁB*Ő;¨®•ď¤{×ó GH¤}Î) ˇ‚SĹěś_dłsÁč 8€€˘8mˇť* –ާĚĐrĘ‚»Č4nRŃ6Żw&Ľü‹CN  AMARÍË ±<?ĄĎl=Šäú– â˘ă x ¨n/—A”ę˙ĎŢ{ýJ’fwbďÍ@í’ÓÓUu}zŢű źŢ{˝Ż[U·\WUWµťžéÎ gv†ärIî¬ô @€^ô˙H'j–Xp%ű @‹űuâvݸ™‘ź9çg"#żcnęË×Ë’38ązW›^ŕjŨ­Z«7Ç/{úć÷ýł/¬ţ™R1]}›˘J¨^×Z‡őĺ»ÁůŤĂ/ęűď‚Ů­V]5Ď BJ˝‹ňúťżţLôńçÍůëŐ‹ß•Ńěť|¨/^Ě/żxöĺď÷_üĘ\č•ůáĺ—ó«/DRźŢÜ~ýonľú»ŁĎ~ż~ő»öÉŁ6xýĹ_Ü~řCQ©ĺĄ:,ÔćÄ@yůÖč?a˝E}|őöW˙ŕ Ďa\•Ů sđÔšĽlź}{ýí?ěżř­ßż~üî÷ógßsµą3żUúOŮڙ޿ ćď;'ߊµCŮľýţď×ß…ßvÔ:”· _]3ö¸µxÝ?x{ńâŰĹăo(-„e©Źs’zvţô‡6Ťfez]ßĚźµŹ>÷&· Ä@üÔÖĄ·ą.Tćĺĺ«úá—őŁoúWżn~e´Ď€^÷77_€ö[‚¸ + ěΞ·?”§·v÷,g÷÷ź~wřô»`h¬µŽÝţEkńäÉű?ś˝řeŽ ŚúÁâńĎÖŻţš>żđŢ<‘«Ďżř}s|Ž0vřŤ×Ł7ŤŐK·w^ę\ňµÓ$WŹ`¶ZžŁRu|őíů×˙vöŮ‚÷Őý·•ŐˇvE]­ĽZś)şS„+r%ĎUs +‚MđW_ßL˛.uQnnçÔ S•‚#18*őnÁśéŃ&ͦvň|™ł‡áň´UPę”=ÔÁ¬Ťo¬î)_žE_v ĄÜáeuq«ÔÖŕŕ¤`^ž˝P:g›)D8„VďäËîÉ·jű”´ ĐäÖ`|ü^«Î»7Ľřrqű+˙ĂWż?xýWý«ź‹Ť5ŞŐÇ—_ŃHšşŢ\ ŔśÚô¦ľx&Vf”^÷Úë ·l-.É5d7_^(ĺA}riµ#¨,xSx ˘U ZEë;٧Ţř6߸ĂÓ˘•éËźýŰł/ţŤ=yćMžŐUšűZ0=ľů€, Ú§ß6Ž~ć/ŢVŹżÓz·E ŇŞuŹź~ř]sůôAŠ&ÍačÓŢ;“gÎŕş<¸­ź˙ĺßýOß˙áß§ĹF^i3ŢÚÜÎn{öÍ?źţěęÓ7żüëüßÚ«çIľĘŐĎ™Ú%[»čž˙b˙óżŻíżCÄŠŰ?ł{gw÷íX%ͬ*€No˙ââł?ŻŚ/×W_ŮťS!XH•uAi'Y”gçŕ˝Ń8ĐáŃ=ĺüéôěËŐÍ÷ţř oŹZó§ÁŕŚ±j˙I°ţĽ˛˙Ö›˝-đ„/W¦OŔcF9E–Xw&w{óŢě5ëNH˝Ý?yuđňçŔ&[%ŸŚ7Ż,?/Źž+ŁşJb:Ąx•ѡvă¨Q´“ׄʫÝÚôłÎţ7ryÝ>©Cńµ édčJµ˛LU®yŁç„ÖÁ,×–w9>#3/”×ró+ŤňJ“4šJešć±<­,ž{“'N˙ôXóôgLu•á=w|môĎÓĽOZ`—–|0Ü3š§îŕH“Ę˝Ă7ÝăwÁô‰Ţ9ăkËb©[`ň XÓ;¤Ń‘«+µşŞŽ®ó»–`l®ÔvűG¸HNKŻŻŔË4ößŔňţśqÇ #•ú±X]§C® ýůM÷äýâéŻF×ß'+O›fe2ľřúV1Ü#Bđ–ÝŁ7ýÓ7˝“· ‘k¤ŐŹ«w +"d7Ľ>yůP8vďř î"2h$şÔŽ˘RA JťĂćôr¸~ňřłŞĂłĽÔ0ÚץîSŁy6,é.śÎĹüęëĂg?Gä˘t¬ń«ęńϝٽ}ntŻ(g†ýäö‡öâ)Ř˙ĽÜ˘ěIsőîŕĹżš\~ÓÝ]ź^‹řýßţĎÓÓ/}čÎ^VÂmŐGďýńSBmŻOßţă˙úĽ˙‹˙;ËzrăĚżj|Q™ż°:'ĄÚęúĺź?ůâowRÔ[=á‚}Łu!VŹ){Žk˝ {<żú@;CÔµAŠ /[ ޸ąş]=ýSj‚3ÔĘK§{ó°Ľüš)Ť8yĹ(/÷ŻżcÍáfR Pk“o«ł×`ý0m赎˙âoţ‡gď~ý(Jl¤řŚÔ٬Eyx[>ŢJŁs. f+Fsźu&|íłg\°*O?óF/Ľń0ĽŕÇaÝĺúZ(/ k—†l°Üž=ýĄÖ9Ů)ʬ=$aüi0{JŰCLmáz‹súµĺK1LY˝ ţ˘yôŐčćWçď˙u÷ěKLo ţČś% «(Ôp­Ă:3ÜŃΔ/Ď‹jĹm/ĺĘ,ĹúŢK±•4WMÎä+íNŕäçŻ~PŞsPĹrýPí\@„óvż1»Ýő›‚Ü Í.-oŹ!ëń•=8/„Ą÷jjuQ”«)Âü±Ó>îß–šëťĽşť×”‡ýŔŻRaÔŔ¨Íkó›ĹăŻ§Źż f7!C9c­qś˘€Âč¸ĂÇÓ«źďżüKą}“ĺ[Äô»'îŕ"+–w‹J¤ ¤™ +]šťÇćđi’¶!ťľ‰|Dh­˘Ü«[źľč¬?ÔćďŔäŽ;ľ++€‘\xM8(ĐvspqőöwĂłĎ)˝đ¶·fęQŰŐ`tř¶9yبÖWĄÁMcývzóC0˙,#4hÉmŚOß’a!ˇ±X=łĆĐ\÷Ź?řýK\Ş]}9=xţq'gÓšŕł&Źľxúç¤1ôËRŁviĄ“Äě<$IŐÚjm߬/«˝C&ü6™ˇÖO‚ůŰ<[N"J4Í!¤-čuÎ_0î7‡”9pçzĚ1¬ŻtÚ=ýěŢ>Ë0nqĂíÜĺŞŮ>ůc÷ÚGß A:ž-VW{Ô7:¨ŃűX©›žuFÁř1ZĆîôuŹ?·GŹÍţ…98÷§×jçŐŰ`˙ŤŢEš‚$ZŐ#ĄqÂz+TďgĄ:dhwý<<.¨M +x_n“FĐŐĂăŤöéäúg9ˇżk¬>™a4OüácçśP˝±Zž…ŰńÉMąv ·ŽÁ$"JŤ0ę„VsšVk?I±˘6s;+•.­5¸aĚŻ”×GĎW—ď¸wČř3Ň™[©Ő}Ń›ĄHSő‡ţŕĚl­ťtű¨  S¸ňF{ńĘěśD1S[gÁ‰á*ş6ť>îŕ·nwŹ?ôÎľaU’Ű;(Ź·ö_Ü~ôâorC{ÓöŃg㛟™ĂëT˘÷‡Ďĺ +¨…S©¶BtÚGŁł/ BVÁěś•WűźÜbý%¦÷©ĆmxÇ"oăRE©¸Ă§ă‹źő?hµĽXŮCÖž0đpÇ€śŕÁŤîc€>Ŕ˘ÜJvA(Cl§)Űę^µOľjť|čś}ëÍß"ƬŤÝ>ś|(uĎqáÚ!ëŻÔĆ)Ľ<¬.'WjýŁŰ/~O•ÜN;3˛4tOÝńkŕ™˝‚‚+˝vĚ»KŢ]čÍ đé;ĺQŚf´pŰ4Ć„ +ÂU0©!y3Ňě?Ť`fž±ďĘŁó4ëhőęâµ3x¬ŐOáp¤h<ŚŰiNr†[ ŠŇ›ţčşwúőłţÇĹóßíÓí$U$µţţ «}‘ P™"-@i<(ą±—— y¬a’ôÁ&Zř+­5d»EÉ–ä4E·Ä“ÉK?ÝAţl#Ď«´Ň’śAŠP˘€+Ť !Z•üĄ,‹|s7-2JŤV+Ń,˝§#i‰1CŐ i†{eTKÝ Vł\™ófť2¬7—*Ţđ™?}Ą¶O’´»‘âň\W[t©KZ}­ylőŻ„ň‚Đi”͢,.:r0_Ů<úbvűëţĺw˝ż‡H„d~×,ÔĘX,OŔAôOľ<˙ňďZ_ҵuQëh•…ŕ)x|°č~xňĺż»úđÝó_&°BŰVs_©FbO¬ňĺăÚâs»{*Í,ˇ•ą^ŰÜQXyDiďŚ$ĺň•ýćÁ«wĹyŁÖţ {p‘—j€l¨ÚUę§ĺĹ;w v¦ˇýçüŽ–zT°ä›§T°âË«ŃůÍĺsĘh9Íuëŕ °¶Öşa•Ý™RY6gOÇ'źÓF‹-ő‚ŃSźŢŕJkś`Z¨m7'Céţ, Ž„“Ň7-u.9k¦V@¤(ßí]ĘÁ<P#Kc­}ĺM_ÖźQĄ.`)ˇ5'ź ÁĽ¨´ČŇ$N•aDYÚ…aŤÖN’’ťľß9Ô«3§wA”úQLŹćŐé•*‹TřĄ9ßh‹Ţ‚-ŤŠb=ÇUw˛ŇN†×*KΞěĺTTnˇZŹ¶Ăşc¨Ň +7~ĎŕV}ô/ ´ţ$ÜëO /Żćč ŰQDŰJ3µńĹôü \n=Đđ„8śŐ'ĺf3vŇü§{ĹVĘS>®µ7Âý9ŮdŐ9* ž@ÇŔ —L`cvµĆ)U…5K}«k _ ĺJďěĺOŁ…<ç +ţ*ŮiÂeĚV] î¸ÔX™µŕ@žó9w ň†¶GBĺŔ>ŻĚßIősŰ8®Ĺ‹ÂŃÓďkł§ ¬ÖI ÍĽÔ˘JĂ`ô6ŰÚ¬No»'z/š‹[ľĽH‹UĐĄú~}tĄ•g{y!CŮIÜÂÔ>mŹ#ľ‘`·2‚Y]´Oł´ ·±ry1:ýz|ń˝ěG +ĄµNnžă+¤9Ţ,µ/JÝKµ~ŢŤ—ŚĆľ?şĚ˵G!ɨ>÷Ü%)VXąlxýĹŐZó0É–eĚäÄf^î–z7IĚÜKŇf0kŚźA(µOĘ󗽌=ĆŐn’t÷0źĆš'qŹ5‡Z÷Ú™˝ÁCIŤ<ĺĆ Ú^FŤaą{ş—¦˛•{¸GRJ—TÚ9ĆÍłî^lQ;Ĺx 7BT·ş•ÉMçŕUçđu÷ř­Ő?•Hę]©ĽaŹúâőôńŻ{gßU÷?€bť€)eÚj!JY®šýç|ýZëĽh.żčí0›'IĘŔ•ŠLp˝)5ĐEą®VW«'ż:~ó·Ŕ)DÎ:ow€I9®t/1k\žżm}M;ó˘Pî-nÜÎa†/§Ř E—‹28čIsů®¶ú‚4'0ç9ôŰD¬GKĐnŽ«¤†7Ľ__; 6gLXŻśP\ KC!üBe+‚ ĆŚÎe÷ŕíęůŻ kľ•S"EÔ‹ŐŘĎŇ`´]±Ľ¶‡ŻV·żź?ů5íNŁE”dcvÓ=Fߥď]yeŤ_ćTÍfš ë§”{Yq;ÍCŽ á•ĂKoňŽ.ŤŢßËń9ĘínšT śU|Ţžń΂) Š|@Fp§yľ ^­8Ş §{(¸ýÍ8%}Ż{Yß–zWP/Đ6Î9˛ÓQśV‘3ył]\‹`ü”ÖE}đ()Är<ŢRUŮËň€i„ÚQ+űZý;é§»gvšÓkR­nĄ¸OŁLŚ čňqiţeíđ^]¦‹RĐXtÖ/Á-ţéşť‘÷p·hLřúU©}“BŤ‡{¨â ç§_>Šş™‡'ćÄč^¸˛•+¤ŢR*3˝:U‚ŕ41Éφ[i•íć±?z¬T¤Ţ„'X]P°ÝĽPT×Iů*Ď1Ł% ˝u.ÖN ýYlH-^¬IŐ}łű 5D/FÁźqöČíźsĺĺéěuBmYíc9y˝«úţÚ_’Î4ݶc”ťy°†¨Ń‹ †ŕ­¤ę)mĎqµÚ8Iy»Đ'L®şÄ, ¨^ÖŞ'˘ż/+ČÜáPz· 6"¸Ť—Ć”»Tęgŕŕ˛B-Šë[ +B5ŰĽ¸Ö¤Ľ㯡˙Öŕ&‚t3`ą©im>XQνąxé źH•.–ÁŽQĄ>ř˛8ĺď´4媕5°3*··RlŘ+TK3ă,ÔĆełS” ÉË5ˇÔ‰ĺąp·jfľÁ{s0DŔPÔÇ‘¤ě˝‚„ëĄvRY|š!M; :YP–Ço«˝c„±S‘ˇ”0އG,MR¬6™_üöŻ˙˝dµbE=†šŚśT”Zë§ŠbáŤúŠ·ű TĎR^ ŃA&˘ő!Vy>ŤŞ¤>dĽ%ë­‹ęh7#D2\˘ f4ů'{D¤ ­đŽ,{đD¬žî ÖO¶ Đlś1ĐËëxQł‡jý”.Í2th» ›h­.8C»}ĚčÍpóÁ͡OÁIJâĎŚĆ‘Ó=S«Kщ~//¸aůĽ‚Bë=4‚?ˇĚ&©×9§/řS©vJm\i ţÂčś/żßüĘěßdXž‹Xŕˡ)ę9ą ĐîčŐ;S*‹RóÔyÔäŐ.–Ş÷Ln]geaJ#öăM} E!f"‘çJő2{Q4šfx»—Ŕ-¦4-Ę˝(ćĆ U:ĽżĘ‰mPb|ůrW¬żgORěOStSYł‡°.λzm"GiťłĺĽÖ‰ŕ:(.T®Ž!BUośşŁNďńěňNď +BB2Űze)»y1'4¨ŇÄę\ Oľ+'¦˛›•2¤•ÄÍÝřë.(îŤ3PřiŇÚJ2 LGŐřÁśXCő>hxąr\j_áĆŕQN+C‚–+kŁuÁ¬bZ·Ň9ˇe!‰( Eu/ĂG˛rÓL§[ďu&gŃ·›áĂ zJS*Äqg;#ýd+›ŁJv¨Q·,©41ąIJj®GüÓ­)–ą°š^CK)ÜIăVިý!\ˇ˝­”ČýÖâyQ®&p~ÝLCv4)c?·Ň˛ß:řň×˙č4?Ý#7’*¦uA™¤p5ÇŘ Źvq©QťŔ +R©…űôZ%Î$Q_Zť ąz^rˇ-ŔE±śĄKiĘŽŔŐ(˘,ë +hąµ?~Rťßúăk!†›°éÍ$aBl§ ‹Ň{ bÁ›H•5„®ÂHë)Ę)ĘŤĘňóŇđ•Ń©¶Ăę ¸ÖMč- qL¨ÚݧzëF Ĺň!ăĚ căd´dw",Ą|¨7®h{ gŐš—a\-łşŃRÚ¤łĘJ}ÜÍsłq–ÁK”ŕĎO_3V$ĺ®q'¬\Ż7Ö`3ł¬ł“ăEwb}Ľ& Á†ŞíxčŘŚWňc¨„É F¸Ö8Ͱ•­ś-Z¸Ú7ę§‚7Űi„•@3çŦhĆ0m'ŻáĆĐ?·{—¸\ż~÷»ŐÍĎqsŚČ]Ľ4JńŐ]ÔLR¤g04”ú1m‡›X"” T ¶ç8sX`|!”/SÚŔ¬š•}ZďB¨oĄŮŹĄíµÍ8ş“ ws*˘ô ‡` +X€DŇ{Ł»‹[ŕÓŤ¤°“–€ÂR¨ ˛ÍĆ”ÖýłíâOwń<d(g/«lĆ9ř™¦Áš*ţĽČ j/'îĺPe´ŃCřZ +ws”´÷ű«ç ŕws&ă€HČp•ăg…z‚ fĹ­¬qĹYc«}*úST*§(@W)Q”9ňň'/K˝§¤9˘Íˇu˘ůiŚÜLóiĘŔ@ŐVš6C!!x`m(kD=ĆŔ#N;[Y1ZÔ Bňŕ¤0•ŽúĽ=)•—ŕP(łov.ÔĆią0Y@Îh''¦qť+őwÁ†p>)‡»qşťSPŃŃĽ¤´6%®Ęě±ć8ţJ]pm0«ŢäµÖ~ ai4NŔ,„—»Ťř÷8n¤Z©sĄµ. łNŻW)˝žĂĎnÜÁu©ušg,i Ą>«·’¸´Ď%Š|š0Ä`][Ľ&Í^’´"y…VĽŢL•dQŤš,Ký'jű˘ U#a‘eČťNš±ł[PÚ sÄÚ@ĄRŰěJŇ6çOíÁcŁ}cH:pŁśłď–ĆŐ" +îĚľ KCLołţ|ł~˛‹fń’`őÉ0ŕÇá}ůýŃ3˝N”› NÁeŹj“{´~7ąţŮâŮŻ¬0ęFăă˘ÚC±z Ť)=Bîj;‰ë,śŐ˝¨¸H^—@’;¨ŇNÓŢ'ŰůÍ˝‘â¶óę^ŃČ€h§Ý4̰6°şW¨XŹ Ą|„kŕR«ŇŽ”»ą‡{„ &¶!D!ăśńíôö·Í“o*‹Ď”Úi±?ŮÁót(´FČ,ażhőŁęä…¬q­,79ýJŻ‚6Ksu¦qŐ:ýććŰżóĂß_ľţU‚r +<ĐGS:¬3ÍrĐĚJ°ĽëN1˝ĂJ»H) +dĘ7Łq§ě‚ŇČ|tú6ĽDĆ!_%µ.ˇµŇŚ Ň«feŐśÝBĆI—ĐÚQÜi„É]RźRć äPŔ«ŕR#˛M®cú°<{Ě_ÂCşX'Mi:ü´"Ëxi¦ŚĘ`öwüű0Im§)B®… ËůÖ i´®˝ńBiG˛ÂVŚDCެ„•&´&VęSîśögš¤­˝Ďş#©vP[}ć/^Ö¤ ˛UŕO¨Z+*U ˛śPĘĺĹűĘâ=ŔĹF‚ÜËIE±–çÂň… »ňb‹öö‹r¬. ý§»Ĺ˝4“B•hŽ/„ź-öp˝źë ĺ¤`’<ÖęşĂçzűZ _ŽHł >:+”EoětN„ ‚Y­źĺ,J–"9u3EÇ‹ +°3~ş™ËR¶ŕŚŮŇ8ĹT·óÚv^ŮÎđ@čâ(“,ă!őë,(s 벓¶S!ě<ŠS±°˛ŞôŹeÎHĄ/‡ Ň弙X^ł9}â63zA곥ľQ[µův +¦1ŇDÂë`ňVV-Ş-Ö›pŢB«_–SçZő@´”PŽĺĄ ߀ŘEÁJŰqÂݩս. žrő“‚6ŚĹČ…÷¤[>¦˝5eĎa!€—!s|rÜ.<€ď(ŕV©«™ÄLXtH"pŮŇ©śČÄCe[›ľžßţeíäۢ܅“dŻ(V ­ÝöÂ{}ź˛ĺÔ/nˇôFĹ*7Q©Ç{ÇbőJk^!rk·‚€†·v÷ ç­Ó,öcÍŔ°°fw3+€ńF7îře^é%h,*ŕÓ»VĘóBźTëQLŤ%>Ľ=@ßÍ«‘‚/–bŽpáÇEµĘ–Ýă·bm ‚°¨tIWă¸%sĘ'im~xëWy­4Ď{š˘m°ŤyÎáťľäwY«bŹ´g­ĂźiíčmQl$P•u'Eµ‘dÜ4ç+ÍĂńĹ7˝ă/ŚÚ’Qk€Ľ/Ď_˘Ć*I•Áć°î˛:e´cE5č9şÁ ŮŠ•&qş ɲťĺ µˇUćiÖĄ¬nÎ9ď sđ € ¦´‹B}/§ A5‰Íđëc\ŤĐg„ąŕ˝5É'»č^^˘Ś>¨÷ť‚QPşÎä™1~ĺŽ_,yŁDI 0_¸ŢMqŐ,čáŇD®ś@ŘJŔóQ‚˘Vë—„+ŕ ÁŠňr¤›@ĂMň\Sş{9m'-'p­÷Âďnȵi?ŚSł€·Ľ=!őn/'±’Ó<ÉKŤ-L‹±^$üZw­¨Ź }Ş×Ď@ěj“†HĐ»QÔŮĚhq&ĽńFkźÔ(O˘4 ¬iynE®őoRlm·h¦?nh RzČxÇ\ů‚q×pžë +`i[ośÎQÜĐŢA@_Ý$ëmçůĺ +•đKU¨Rűi”`  L%ü¨‘ŻÄŮ2Ş÷¤ú1jĄĄ˙6'5ŠZ§ µblHdë-q˝V…f}ĚÓŐĺ7Zë*ĎWAO°zu%Óéo"N–oKÁąÝ{-Ç[Y9Ššá—"‡/ôΓśÚŢĹÍ]D%¤F‚(=JŇI:ÇřZă˛ÔżĄťyÓ&Ů4ĺÂăQ’KéĚJg‹_׏ľáŞÇQ&PÄĺö^^ßH»áÍęA–ŻËµłŐ‹żŞ.?Ä™/őě޵Ů}Âűë,_Ţ.jŰEť6jyťˇCđĚńuLí–Ú—fçqFč„×a¸Ź8 µňb5Ă—Ó\,CQnár3´By%Ă|¸ńE¸ůüş—WŔĹÓzźł‡©Š›}±zbŹ^ť«án&…í´/‘śÄÔ4¦mũ͛gË’·ü¸żí ±aTסOňtiŢ>űNnžłöŠĐ†áś¸ŁJď C*?Ů- ÚöOôî‹ęâ+Ö[Á¨?ŤŕFe9żţ–Đ›;yĺO÷í‚Îů –•°®wř‰°ZY§6ó0-fĹ.ˇOŞł·ýł_dŮę'›Ĺh^pÂĚ„ý=jµ’L7aöÎqĄÁé ź­ž˙U}ýĄÜ¸ŘAÜ˙óż6ř˙»˙_µűܵv?»Öîr×Úý@îZ»Č]k÷ąkí~ w­Ý䮵űܵv?»Öîr×Úý@îZ»Č]k÷ąkí~ w­Ý䮵űܵv?»Öîr×Úý@îZ»Č]k÷ąkí~ w­Ý䮵űܵv?»Öîr×Úý@îZ»Č]k÷ąkí~ w­Ý䮵űܵv?»Öîr×Úý@îZ»Č]k÷ąkí~ w­Ý䮵űܵv?»Öîr×Úý@îZ»Č]k÷ąkí~ w­Ý䮵űܵv?»Öîr×Úŕ˙/¤9˙…´˙jwW9śČĂóáŹÔĐüŁ]Á(öáH0<;źžţřGęg„Ósy9>_Ooá±l:Źld‚ép#úÇ'oŔł6ÜÓĺ|yËăáţ4¶‘ źK…?~üŁěFn#űńżĆă˙(…a‘.`XÍçrE߀߳i¤P,bXČńŤ˙çg‘t>K`ŠcxÝŘ˙ř¬?$˛YĽfó˙ô˛\ËáHů{ÖňŽű˙Yý‚g-~üŁúŹtřăů?ţ±Ťm4ŕ×ę?˙7Ě%ÎĄxzq¶đ†ç0G‡˙á¨8…YúçÇŁŐĂĂáÁt˛ńńđßČçŃŘŹłB8uŤ«đ§0ýńŹ.ţÓ™ĚnđŻ»ÚČe7ěŤv7»16‚ŹĂ!rüq:‘|C˙xŔúgţřë?ľä˙vŕŹ/9üg ˙qň{”űŘŁŹQ¤.÷§äř÷ÇńţSLÁ Aß´˙(#O/—ăi ‰ ´6N}Ś«?ţ„ß>®E±řÇĄĘmt7ňŮŚ O°řĎ{EŘ«zŐ?ýß(@OsŘÇN#á łĐÓÝŹÝ “Ü@a©óĆŹ +B5A”R´ŤĘuLmbR˝Ŕ×2l˝¨psT”[y¶üÇ"č‚3ĄĚ®wҬ'­8–ÉóD¨fH‹TjL©+3Ö›Ą1fŽm@ŮËiďdčť‘,ĘE±LY}Î_ŇţаgŃK A3DoH[ÝWf¬™ě«ő3Tä¸VšäĄVŠňb¨‘¨ÖĂőžTÝĎHŤŤ¬V°ć+Đů(˘eiźµFZýńf¨ŃŤ‘Ą,¤9§¨VöpQjrýHm_Ă—Lĺ(+5âŚ#-ĄzXD”^AîlĺŐHŃL‘^–)ç2®táT)Â-đŤ8noç%±ĺ';[´ŢgÍQ–-§H1>ŤÓâôVFŘÍ9Ę.r +s‘Ľ”!Ě­$őÓHq+ËGQ^ÇťßĚłŐ4ĺG +¬BQi%I{+IÇ‹únNŮJńiŇ+JťßÂäiŚ(Ł_^ëőe¬(e2eŽ…ň’¶‡Ń˘ÍÂ[¸yľYÔY±Áě˘crKň‚=ΑŽěĎ1­• ť¦gź0F¤9F…ŠhwöňÂnNŔÂ2±ű¤µD´QQ#rWZ_Ž!rŽó9ˇw/…ę!íÂ:öâ,,Su}ő t•a˝ ă±îŞÔĄ4Ő~’ †x)›1LŹaa “śP?ĄJŠ.ďÔ­LX•0Ža•&µ‘fśŘ`Ý…ŃyR?Ďnś2h{,7ĎíÉkĄ}],MŠúW»óÓź5÷ß%ůrŐ9oíOß™˝çEcR4Fi¶ 3™"ť,íÁÉ?Îa?–˛`!6’ĚVŠ «äŠ Diĺ”VŠ«¦ąZš­e„fNŞE>ÖR‚9„„§Ĺ°R 3#HX›-ÎOSV Ő"y%IřS^…@ĘQe·qjÖŽ ®6cÔnFÜL0"Ä^^IA‰m\ç„n–mŇúś5g{5EŘÚGÄ&Ä@†…á×qm(xë4ă}ĂţlČ$Ő.oM9s’¦śOŁÄ^VI áŢîźě6âDްP©ÉÝ<ŠSĐŤ ĺngřÝĽ3ÇÝ­¬Ca¬4_CKÓ ëGóbŐ7a’l–ň•ʉV;W*g„Ö7«G·ţvxúöO%gÖ›Ţ`ć RÔa°‡ ÜŢ-(á.áER€s'¬5D¸çŞăŁś7ŢĂôŤ,_äkFűFm]#B%ĎÚ{YńcĄ¨I^h¤ąj’­!Ú÷ÖzóŚ6‡iÂä­Ů9ăĘ3Dkµ.¬/QšH•ýÎúŤ,˛¬‡I ±|ČWOŠÚ0E•©`Оڗ ĚŤ4ł“!ĆÜňB3ÍÔ‹R/ÇŐ‹b¸›|¤¨äYUŞIĆÉU©z\]}Ý8ř*X‰…E†<Ţ[vQÎ<'w}šO[!µ^XM6#nçäíś’ăĂr)Ń‚ú JědÄ[†HŢAŤmÜJpŤŚĐËK®rš•ë[9ć™qWÔÜĘĘź&¸HŃ€•ŤŁZ’(LÁĎi'ŠĆnŠßJ°Ű)`!‰–xsHŞťŤAÇFÉŤ8ý(AEQ3'4h{‰sBź +î!oŻâŤŠŤ°şSNÓDęĺĹ.ă¬ôćU^¬E7R Ŕ 0"6â + Űq@<Ěţd§řɲ—ĺ3¸…ť,ßJŕ^sP©Ďh}Ŕ +J©oe¸ŤŚ˛“/ĺą 4#őÓŚźgÜ ĺ<ŚŃĽśŁBéÂľIČ2tü–řżŮH’ĄžZ;€KîńÍ$SÉpU+@ţŘÇyČ‹µ4_N0)`z«×Ŕ†9ľ‚‡\&ľľUPv5,ĹdŤDÖ1:yąQP;YˇQ”;iÚŹ!ŞVYů“§By®Tçl0-jmĘłţ~"ŔĽ|Íjś°Ţx3Çďäĺ,]ˇKÓ‚ŘĘńŚ•˝˘ĹÍ8ĐŞîŤîăę±—„¬ÝɰeD¬az›, 0#,' 5ÎŮĘ~Vnȵ#ąş&­ďŤQ«ktwżő§ŻóR}3öŠ*Ś őA’ŮÎËś˝°zĎőćuX)Íč‡%c)€ń*t`7ŻlfĹ˝°ě·ź$Ý®ĎĺúPɰ.ří.w +ÚfFÚĘ(ĐȇŰĺ—R”ťe*€3™pNôŤ˫Ѽ˛›ć7“lšt \-RĐ7SÂvFŽä5€‘OvŃíŚ ]\ëďaĄÝ‚±W0"p"LB/VŰjAŘDđü5Ë×Qm ¨®îĺEě8nA<$±R)g)ďA”ÜÍĘŇźîb)<€i„„č‹c..65.9#é­Ś´›×wrr´hä„iČŐޛǰ÷¶Sěf’~°‡<ŚE®â·Ď{–[»á¸č8&>cJ’vVp<ÍŐł\•1G¤RO DĄĽÔÄĚ ďČÁ’ĐZYÚ­qyň*͔㸙$ť˘Ň ËĹP:\ś3×›Çi>xᓜĽKéC`Ů›ZµĂ/ľýwÓ›o“‚—dť˘Ń'm¶cłui÷®1=,e)–Ŕťß"Ě럲ţ ăěSör‡”jś;‹.uwł\Ťµç´ł ¬™^;žť~SÝěá:"5ĄĘ‘Őj ź[Ă[.XhÁęőç-4ć›T›ÚY±E#®4&Ô¨”ť‚ +Ë] Ë”1Ü…Gxqł­\ő“(˛“…á8)ĐZ\c'§Ĺ1/MUůŇ„2»?MŇ[i9ATHkźóŹXwź0îЖf'Ín&Čí4ł‡(_ÇĄ6.µ˛¤+šQDfŮÍđqÔîŰJ‹Ź’ünNŰÍŞZIÜŽ˘Ćf†} ˙t3ó(AďdähhÔ†p ëvă Éě)z+/B÷ hk©ý‚Đ„i‡Śµ “CMŔ™‡1r3Éo%…8b¨j4HÉÎŁ8ń“ݧ¨9,•'ڇ/Ó öp;’S€‰2lâ–0'*(( Ű}ĂşSHáUţf–ć¤DLj×F/¶3€™>hŔvYľI[+ŁőŘl>qEŠž][ꍣ˘Ú)HͬPAäŞ`Ź@sZý›(j1F‡ÔZq‚3  üµ1Ä€ŐżŐš' ¤¨)řsXe@IhÁÚhźŐfĎźľ˙×ÍĂWi!ŔÍ>ĺ.(w –(ŤX…¨=ĐoDqĚNá˝%¨/\Ń đĂšdËŢâMcő.Bx1Â/HmĘ0Ö„D°&Ző0č]sÎ$ÉxEąY”Ăš¦JýĽÔĘxsĄvpýć÷z÷äaF6ŮdM@±˘B$$HÂf;+f+¬acŽç‹€6|‘: l`!¶3ÜvšÝËi Pą°Yj]…ĄîSÄIšx݆u\€©ĺŞ›k& ˙QŠ}öRô^NŁ:ÂWr‡Ú´6L`Tł Š6Sân^ !%-ngÄ$n<î!ÚfŠy¸‡&ĐŇNZ~c7’)(m4Rl8˝ó=L5Ž-§[ťÖ8řĽvđ–đF`6+Ó—Rý$J)ľVŰríDo?łFY3č]„e/q Ż(5ĺę‘ŢĽ¬ÍŢ€ ŹŃőśÔËň5°f¸ÚÁuÂëĚ +R Ř&–Đ{ űs|U©×–ďÄú1_Y—zi®ĽťWs| ÂśČVAŠb&¨BíÇpś×F’#„šVYç„ęFšnĘ -@!\¤ŠÎ&Ě$ĚkiôsP;ŘGa + ÂJěFZŚ`%x ř5yIĽ˛ť ‹*ňŮHĐ ăAüŔZů:gŚJő3REQ{¸sň\=ĎÖ@µ¦±čŢÍ ¤™ü¨~á-˘y5K{9=š×cĐ"Xc0‰•HřS{ŕ0í ¬5Á•P…Ć1ę¬5…9L‘îvšßËÉ)ÜÝN‰€c ę¶S a +wÍĆi ß˝Ľ Ź­`©o”ˇuyʧŐŢVNz#졏"d5Ž)˝´»‘áaŇR¤ů0Šü‹‡‰lX:«ą€I€ź}ĘQĄQN¬ĹçiŹÓşĺÁcˇĽÖcť9˘ułbj™łŰÝ.…× +j'9¶ÉK‚4’Ú)¦ş‹:i¶Šk=%XÓÎh§(ç…2޶XgB}Âe•vZ¬ËµăĆú˝T?{…č‚ŇaÜąP9füĘ^‚݆çÇ ˘ "$AÚ”5ĺ˧¤łźÓFm z{ŃŇL@ýĽXł Z€4ĂÔď(ĎW˘B™ýĐÁń•¬ÔČĘ-đĽŕXwe4Îc¤ĹŤ$í$i°vŹŇŇfV†˘”Ž,“†Q–ÎŹČM0Ý‘ŚÉHiÜ‚ŐyA#yÚŚsH™K\î!lc'Ěb +dĚ8ůÓ(ö“=$Š€Gh$pŕ…&`ËVš? ‘ÖćśÔş`F"E+Z4Á8ŕJ…NŇ.#7S¸ů“ťÜF‚‚ËP€«AšťŕfŹŃşqDůÓÍôfâ˙bé=śą®tĎ?bŚÄvĺPUđŢ%é}H ď˝- Ľ÷Uí Ű‘ÍîfÓ{;tRщĺ8˘,EJô’(ОŁŃĽ·ó6bc÷ g#ŐŐ@"ď˝ç|ß÷ËL QŤ’vÂĹd!0€áâlę˝đPČĚčb p|(u`ŔI o˘tDë98á‚ iđ„ÍHt “fĐÉŔ¸•<˘GG1L$۬G:ޤg:łçбëQ‡?N@Z–łfź0Ř3©s ‡µŽ:212éYřť܉“2ůC€Zăv +Hä—«T°Ž+zß eüÁşŤKŹŮ 3pŃŞ_Ěú%.5‡…›°Á\ ¸ +yŢ„«N6Ď%ćřäŚO*Ť»řQi!˘RŐú@@p‹Ą]6Ô0Q6Ţg’ł*BŻTr›ˇúq4ÖÜLm0S±qŻč 6ÉÄ_Bˇr؜ާh=PK*6ĄqBŔ¦wŚ\ňB&G-” ‹áˇ&¨Ó°ÉŹHe.»LĦˇ;l€K$Ôż«ţpk 6áP˝ ~Đ}0W.:m#â°xaŕ‡€â5VXDŔmŁ[rř#ĐŹ°â°: “.¦tŇ­łúFo4í°oo@ď‘ţçF}Ăf +ŠpŠę57ť.¦Vň)ÂbŇŕĹ6ŔĚLĽ’ÎĹŤ}(#%pmŤŤłrGô-»?6igľ:b°"A7™ĐÚ;Ą( +­up^¶@„{“né Î3fŁÝt +4gp‡Tźrx6ŕă6îźGŤ‡u.Ť•ŕµůŁjhŇ Mˇ±0¶ÚÄhĄ Â;dÄNzľ˘±ôÓ#ŮÉOĚŹ ŽőĽl|†ž´7™°éÂćHĐ D4Řp&ÜňÖę* ňÓŘHłOtÓńq'ţĂ׹EŘ=řĹ/W\|Vçd°PŃFÇ HdÔÎŚ»ir~ĂjÚń›śšDđIçŕ~ş“NÎNDąDŹV»x°ĚçfťbŢÁf=RĹ„'µľ° ݰ(oZČ„›Í@.˛ó<6éSŔ%ąäź[tsYČiH¸1á•Çě°•dĺŕăÓ´ ůcţ°‰ÖŘ8"ŁWáÔ~ »ärF— ĐHyÄŽŹŘ™1±’ńxmOmźvĘUŔ+.1e!"Z +–ŇA¦@ybiČč›´6żrXç>‹eôCăĘ™ý÷ÄQ«ĎÁŹ ž Áľ&Ž™ą1 ÄÚ´‡NO:xŔD 0(E­“)84 §ÂW!$LzEě…E 9+?XXç`]"Çę:Żkˇw˛Ćäéť(Âať×MÄĚiÜBY}ŞÁٰ ‹@_€&;¨č„…Ě3f%ˇţ5n Pî ä˙:nĹMŘ[řîŔăđÍ;@3‚F‘Áúę‰GLXřŔmĚBJ„x?feŔ +5Nđ0’›Źäű‡ÇÍ“F—Ű/ş1ĹâU„j‘ ŮEŐň˛SíXĚîŹܰQ fń‰d ÉsŘ@LX“ç˙żĹ»—Ë ~’ńdsËͧj}#fbÂpó…Pq¨µÖn˛aă6ĘŠ† `{Ďç ´đP5š™i¬^BB•+3éťT†‰ÍdzCŐ]+=HMtrZŹ…µH‚ź[,Ń©@i‹Í.Jj{~ű*“ę~eÂ5aă!ńÇA)⡎‹+‚@E+z,1‚Đ=$s2Ô$Ă-pR7Ďv÷Ľú•1#ŚŃBĆAB=B6Ó9–ęťFB5:P.ôöÇÝĚWÇĚÇ"{ţ†;`XĐ&`0x`Ü6¤÷Ž[pÓM.†j·PQ,­6µ¤,?<Žč!‰Iv<ĺ€Z@ÓG!~Uă¸eĚvhÂ>Âî±ÖĹäŤhHÍ`Ł=ŃÚY -PHčt“G¦E1ѶýĎa±(ŕ°ŰŕŕfFoç]xŚVˇ<śXÄ ‚GŹ[é‘ Ţ"-.9¨Ř!­ĽÚÁŠĆ!8A¦‚89Ę…+†_ŽŔR±1#[33cVrZyćôÓ{ŢŔÉxŇ î9đSgČŚĹĹÔ ®O:íÖŤIF'shŇ3faśTTŰ˝7o<@c+ óćńRŕ‹8*ć@ŇGŚÄE¨;†‰ßtâ1Ať‚TďbS ň_Ŕ„HĐłZŹd%T _2Xâ÷pNłŕ˘SŔ,*aĹŁLQłÓÓ»wâŃÖ8`>ÁĄ*íĘ…e·TšĽéćî@aŘŸ„śžb3á»?şĹb¶ľqňŽgŤő#ż‡‚¬;8„>bĄÝ\ťŚÎâJ—Ë­šŘ‚É%ä:ú(d ŢR:d'ZíLzřĂ:/¨‹M|˘ŤŽY鸍TSůů3WžÖűÄăv+ŕă-;ˇjlĚ~óHiśQ·ÝŻ1űFŹ`A•Č·ż“9Ą±pâ>˝?tHŹšŃ0€­Ĺ± Q°żI‡Ŕ«ÍŢÚíÉćöWĆě5¶Q× ű,f$€ÍX ęÓŚG!×AŽšpJ@j#z/T‚Ů$¤ +nxřÔ°•Çť<¨E4ŕ nĄS>:EEx‚ ‹Ń¸çaNٶI+ivË€lź“=ĆĐćc&LcĆ&,´ĆD'-‚Łbš”ó E‘j=‡Ç]ŁFF¤óČăvnĚJtxČ$%×@«˙ńöđ¸MkŁDÎEgAĄá9Ă:DgĄÇ]'ÝC:ÄŚ@TnÖ6mĆĐ’&=CFđ_ĆŽE­@âh$qŘ0(ŕQđe3aő­hČĎç©94Ü´ŃIŞËĂ,XŠĘËç°PŐ+¬,¸Ę¨.=íd’N:éáłv +Ě.ĹF.!;âF­<('ŕ<¸-ćťrPq/źyö‡›&2î€ŐGä(u"NE;ˇňşXŢÄÓ63áą `ÜNŹÚi› î`ň^ąe¦rLlŽQű®&śŚŃĐ»y·I‡¬uý5úÎuË„őÎeýŚĎŮy1Ů +fşrŔ\PşĆyHkł0D°ĺ«nľ¨GB@â€?aşy +ŐË•„ÄĽ\Ţq 4lvXëŇy†ő^XźT ˘MŹPÔy7?aqđ™pÂB@_k=Љ¸Ů2[˛R©a#6i§ÁŞ`&ť°ŰAť7ěâ«|vtÝäSĆ-ä‘ đeĚěŕt6ÖŽ†ĄXgÜĆ뜲 6ë•&X'Bmk˝!;™€n˛ˇáŁćQjq ®Á]˘‡ :Đ1h,§w‹ĂÄäd1$°Ń7¤Cá1É98ńÝł@Cyůăöa˝oH?g)˘ř…ň„Ť7Q$W<4hÖúďî0šôŽš‘Á‘UgňFÜT˛ +ě긅ѡ´Â:7x=б¬Ż Ö}BŢŕ…ěňËy@Đj#3b)+]ŕ“«ˇĘ>—[±1ťéĐyE¨a‘73@Ř€ŞŕÚ€Kv`'Żő^.…ňYźTĺÓKt|ÖB%‡,”ËĐB_cńe&ż‹'ćáż ľ•LŮuT㢠đxśRÜÁ#SVIµŃ0Ą°oG&=CÜhÜĂW=|Ĺró ö&3V"ę2f2jhWĆâO€yA3ZP6a­›0„ŇB•ŽŤĘgŠ z;8”# +sQ9ŻT·i‘„~?ŐZń1#¤Ó¨.oň$ĚŚNNŃÚ¨áÁšúGô(ŘШ™Öz ‘q2E/®÷Ĺt኏>sQ°pŰNĄ â$Sd¨­…¨Ż÷Y=‹“ź4:çeŠfÜě‹ę!m +†Hž°i7W •6)W5&Ü`5&ňź‡L˙ppň€Ćî|@ăł;ró”Ą Ź(=°†™<0î6ŃX9ŤUĐ:DAmˇBNc!íŢ (*Ä'Č„#z?TȤ9P玻Ť»G Ř-㮵C$Ó:„q K0f"ǰŚnŇÂEhĚŚÖ&:É䄝ź#ö2:ܱřUŘ„IËéľWŢá…R‹Š-Ęąm¸ Kť.$ú^Ř%;¨.íaŇ\Á‚-›‡?j¦*HÍŽCx¶„Čh/Ú8ÎĄ—ĚdčŹPű^ą>nçµ.‘ɬăń “…Ĺ‚y&Ôi:µĄč ˘h°dś_kаĆΙĐ""”Ŕž`!ď™PUçŤhÝÜ w˛Ć/»Ů­ťbŤŮq5“?©÷FŤ~­…ńs9;}Ó:9_ â•~=îĽ ÎJ—R§uĺäLła‘ş2ŐŘ„aitu0‡&ěţ§0kˇaę ă9*xĺ¸M80ć„*‡`>áL8>©ÉĆ©HßÍd}\ÁŠ…ë=Ŕ§cvÖAĆíxÄ˦`Sďŕ,nˇC“®Ccö1=Ž0ë(µ ´@lő.† QFGŔ@ĂN±D*MTi›đÁ)‹?<éćF,ř¨…€eBŁn±jĘ&_ĽRÝ)öŹkÜÂŤy@#¸\u0i˝78zsDˇÔ´,Ř&٨*ŐdŇAÁ~ hÔE¦¦–.µW.ę‘Ŕ2‰ N, C޶~Ĺč`=tbÔNݢs1ăn6OG§@WńpG ”hę¤ó„-X’6TŽip\˛x@ýG ĆÎÂ>ăŁlŢÇíXZë B·xCŹÍ4fÖI¤ĚĆ L:ĂVAçŽ(©E”ŤŤ™Ľź@ËCç¸Ő;ĹÁA? =iă¬Ţи“2żsT±ˇ +,Đ#üÓ2d†ŮĆG`·m›Ů©6"G&‘Q#9đh bD>ĐĆ ěéSéŔS-Ä„k¨€ă ¬ÚČ´[(Ť9uÓťp +oqxr°|‹jô¸!$đŻŃ±B‰şý!§_1!€$˘âÚa#vPďszßŕPĚÍÓ=M,Ô0˘*X `„˙<¬«5ąŇů5fJc†U&Ś; űl„jőGuˇk 4šü*„j€,-" Ňť2 ˇÁ´{’ÁŇÝ@ÜL4éÄÍŁÓx9uňC`ýNÁ ą’ˇ ŇgŁ-13ÇÄű&,®u 〟Z'e@X pUŚŻ±'›sńĂfJNÍ{8čkš]382`$`Çă€3.*¦C‚€Ť6ŃÝJ$Ŕv$5N~Â)Â?G Ç!36dđ Cz´‹_B„2@ ¬ă¤Ť‚ Ť`ÁŁN6KĹ:D¸i'˛ľ *w‹Ć>¤÷Z ŕÔˇ'yXďS!OX 3xG¸,L‹Oyą’‡LÄÉA‡B¨3ŁFBcá&Ý€q%ÝO6·np;(ËŢŇcŕSŁf~Ě*čož]:˘ókŃ#“ľaÝ )žôš@4&ÚŕQ>;bđ™WÓ‘5Ž=d$Ć0Ő< Ça2n!4őŁHqŔňP«z‡LÎ;I城Śĺ°vvOŹŽQ í¬±˛®€ŃľrdrXë4ś@Gmţh;"Vlxdü€Ö?j\[ĄąÉ'ł¸ś˛ń ~N4jtpFíP·€ź`Ęë»<ŠGČűe›Ř`Á˘v:‹Ş\6AĎĘE<Úô‡ë;°P•‚Çŕl”Ťô>ĽĘŰ‘'˝’’Ľ?˙ëT]ĚŕôĄŹËÁ"ˇ”±@ŐÎä<\ÎĂf0ądĹC@‹\Ľçĺó€i.:=ęŕF™#ąöqDČšĽ˘Ĺ¶Ń®± ZOŘIgPą±ÍÉĺlLvÜ8d¤Ž)HňŘ•ő¶A¶§3\±Ň‰ŻN8N8€M¬XĚĹdťLÎJfěTtlÂÎŔß!ţóĆëGăőcţ@ÇĹ–@— q&Đl”Ń;đ!#iDBÖÁ Ö4di3M¤B[MÚhťK6úb¨X#ä:`¨ú@ŘŇ 0ŽŚ™ “"BUL©ß˘ĂůˇAÓFt¨Á2zczoĚB.5Ńşz;(upÜsPă#-hLÔP…®±ˇ”ÍčíäÁot‡ Ѣ‡ŤŢ¨±“Śkôľ80ţ•#úa­×60eVßEt.Ču¦ˇ »ŰŻ@ş Ą ´2HVapĆJç…!ŔPŹďCa€ń.ÝTă.TâżzÄz +ŢĆë‘čÍ ´Ň0ˇ=TŇîAYBáiĽ€áüq¨Á§géX—Š6ŮTĎ%ä=RŮjŔßŮä´[’ŠëV&oÂ"nđ…8`q­dŇŕŹ:Xč\Ĺúć€ăś\Ƭşř<¤bX_ «‰đ2TˇŐŽW¬ bŮEg ?ăˇz¦±Ż–7Ąf°X´ČJ&|r B2°—Ë!raÄÇBAď•[Č$ÔĽ?ÜBCM+xś+0f…€ÇřxĹ‚ťIë ç)*6-çWBJ}âć Đ˝! cg˛@y¨Ňwʇˇy͸Ńô+uvËŹŮ%ĐF žpóE4P™€śŚ* Ĺ@7:—hBBv"…Ű0vÓŕš«Őđ‹Đ);™uĐąIoČ€©€źz$QęGc\cÍŐĺd2ŘaOXďS&ÝÂŃď b¦A‡Śţř„[¦ĂBMH­ZWɸ6NdüPZNŮ’}4X7Â<¸„I;;ja´HŘë¨ů•F¤¶Âfú@Cl˛ç Ő]PѦ\X޶Źň…U_°f'ă64 ¤z^ą*áb!i¤0ĄF„ë^ą@ÇaćÓ¸Răł3h¨ędsđ^lzV)Ż + t˘çKN6ĎŞSěô§kŠ+¸RŤVÖ|Á˛WílŢh˘‘®ö}JŰÎŔď°PMĚÎÚč8—Yňkž@ÍBĄĽrŐ …*°pÝLŞR5`a;“€§aJ…Šuąô<ťZőrE×@˛’z_ÄJe@©4NqÂ-ZÉř¸K0ůŁz$ >_€mz…˘“N_ëIçćĽ\ôÜBÄ`ŕP^ľŔŧhµ ™ĐÍĺĽRŃD&Će &©xŹPŰ6&5Öŕ…Í&śBÁ)–đh‹NLąĄ˘‹ĎŮ™¸‰™ń•ŚÁ’ŃŽWŞŔn8ŘŚW!%‘ Á%ZĽ˛ hÂ+#Đk|°×ĹfaćtĆJ$'=a-ĽŻ'/±IźPbĂm€¸C:?´”śÁZD…kIůi.ŐˇăµÔÔ6›ěŃPŐ#–˝RÝÉă$µ.ĆŰ.ŁÇ"~Ąő3laa005ł(6xx:Z¶`!Gĺ‚G(ÇAG‘i,Ô‚ż¸ąÄ…@n^ď,PCČϢ‘&“šssX´ŽGĘś%ŐZ¤±nm±®Ňár®Ź4ět + Ua©8¨AŐ©ů•Hi)ŐÝJ3“I¨F>=u%¤â˛7ÔFmźTvR;1ă*¨r©›ś"c3ť 'ŇňĘEŹTŮÄÔ“]ćrKb~…NΡj®ŠË.N˘aŹX˛ËBn…NÍS‰i—łQ1Ł_v0a !„O+Ą%µ±,.)ĄĐd=¦Â* Á Â$‡JhÝň Ń9xpČ 66"<‹J!5‡GšH …Ę%§9oĆĂľ`ŐŞBăń)¨PyUĘ/°éžCĘ;Ł_ő‰đüďÁO3…gň©éĚÔ±`eĹk‹ůE©ĂY$bÝPeEĚőˇş|R:\žŤ5ץ܌S˙çb{X\€e* íwˇđ€ PöD¤ăWš đîtĽ;řx—‚ú4ŞÉĐj7ŮÚŤ·v=*H şĆÎÉIĹhµn®«íťüÜÉÎîŐČŕi$XvńĹIPѨňń©tsW©n±)0ťr¦h÷‡=BŇ‘G)(IŮYĄ˛,ĺféhŐ€Čŕŕ# ö–Á%jy&ŃăłÓ~¨‡ÁŮí¸“|Ëj‹uÉDźĎÎEńÎ6«RjYĘ÷ůÜ4—›–J°Žmą8OB-…kľPŮF'7/—VssgcÝŁPŰÜtľ˝á…X>řQÄAg±P›Ď­„űÉŢ:ŃW+«n!@çr Ju7Ó?ŰßżőĚ“˝ŤKýťËb~†N´ŁÍŤHkS(Ě©ÍőęňĄöî ±¸ŕ–r.>哳|şÇĄgRSDzÓ'äâÂôţ]ŮŮnĄä–ó\˛#禣­mľĽ!×wČě•ęĂ?mTxŇÍŔkAXÓgâłçb3gâÓg‚ĺµę™`q†IÔCµ5>·ČeÄüR¬±‘ź?mnAy0É)˝?`gĐD”Úó ±öŃTď€äcăuB¤$ĄÖ•ęZbj?ŢÝĎőOÖĎ#R¶@¨Đ[&Ń—rKPÉÎńt˙ŚRÝńj.4\^Î/(őu>7Ǥz\ft†·]‡śbłsáúĚpnî i8ɰ—Ť;ĐŻP–2 ĄĹs™Ůă©Ţ±ÜÂůXkknďpŹ4hĂDďhsűŽţŃ;gŽÝŮY»UĘt™XSml 2ÄżÁéňÔLyérnćTĽł[[ľŤoň‡ĐP TTĚÍ';űĺĺ[KËçň3Ç—ĎÜ[š?“ěŕŔGĘPuęFzît´˝*­äfĎXठ“‚™,L8H —ěě¶öîjí^[:uďO‡KN3É…ĘÚőhsß+×}Á&ťšő)-;›Óˇ!Ź3ú`…rn*XZ×·cí}^§OÖ×yé±°¤q˛b˛[]8/ĺÖřüz´{J.o‚łĎď^wIEťG¦Éj)5u2Ý?[\Ľé[;yďćĺ§X;RY«ŻÝÖŢľŇÚş­´x¦ą}­{ěžćŇ…ëO|;ŢŮńJYĄ0“ę…ćĎVW/5wŻçNô6nť;}/.WŽw÷®Ĺ{'Řübqůb÷řÉůKBş®LÓ‰šŤ±—_ Ö·µőT˙Xzć¤T.ĚíD;›ljJČÎř”˛›ćäü|mĺj¬ąďSx´¬”h…R Ă ›0dĄ¶•íźÉÍś–sť`®ËÄ[Ra^mmEęéî^iöčň©»{ŰW@-ÉH ®8wş±z±0{*Ý;ˇ¶öéxżµpkký6……’ČÎśNMŤ¶vëW¦6ŻťĽúLiÍp౏ +e˝Ŕĺ×ĺĘńÜÜe:ÜpŚHE8µ¶,ägÂőU©0§”łSűLb +\ ş +>Z]ĘôöbŤu.Ţ@Ą,¸aqá<źîGk«±ć&mFkkÉ©Ý@eŮ«´„ü\nf/Ţ\##ĺxw[ĚN©µĹňâiü`i.Űß˝pß‹j} 桱rˇłwٰ|ş)\]%Ő)Č·ąöţňɇŤU;) ‰zľcąĐÚşT^»ÜÚ˝ `MĘ.ĂŽŮ€©´Y]żłĽ|%Ň:éŹ4¶‚Ĺůts=?µaĆ‚F, 0EŃä!ä,)•52Ţe"ĺbo7ZY¶Ó&3lěŠĺó†ĘKZTÖ{źôňńÁZä@6SG3łçR3gÁ.Ůyś@q*ŮYŤµ6µP•ÎÜţc/ľ ócŁŁˇütsý.x4ÖŻAáëkĄ©í{üڝϑsőŐóť˝»+ëw@˙66Ż5·®‹ą…ăçĽúÄkR±Żqó” +±šś:Z_ż4ňľÂüéîň釟}#Őß(LKvwSýăłGďŢ»ý™ĄóĎ+•ťöě±ŢÚ"RŁă/s‹js·Ľ|yúäĂKž),ś_ÜąÔ[=Ť‡Ë°jŇ"—îó™iµ¶:{âÁ™3ŹFjAH ń¶/P cMRmÁŚ9ř’ť+F*[Ĺ…łn˘`FČŔ"®‚^q™i!Ű/Ďś¸|ß‹Ťĺ3Ţ`±°t%3{>ŢŮol]…Naň› ýr)\XNw1±paVm¬Mí\™9vŁşzŹ÷üÁZĄwâüÝ_'”B´<[Y8S^Ľ@§gXńúf´±%ćCĹ…@~Öä—Ý|Ú*ÖܡčnŢľwĺéĘÂŮĄíK‹{·QŃ +Ľ<Ů݆šo¬_ŢşřČĹ^L6Ö6ÎÝţŕ× l K¸Ĺ<Ŕ¤ëxçl~áŽÂâĺ@vfiűÖýs7"ą–—Źň3Ů%±¸®nµwîV6LRĚ΄[;P˙lĽ±G®lŔĽĹëgď~néÄ5 ýD¤r˘wJíăł ŐŮhg÷ĚýWîQNöČp]íě„Ű{j÷DmăÄ!+9nvŕA>Ń ł˝cĄ•ËÉ™[µźoĚž’u3Îá\¬ą‘ď+Ď-Íl7—OAÚźđ0\ĽšéĎLťŚ·öŔŸL7×ÝÚ=˙Đě‰n.™žÚ 76‹Ë—b˝ăbqYH÷Źž»ďôťOńéÖ“cÓŇ’›Qę+ĄĄs‰ÎöôÚą—żőÓęâiN­Íl_Y»đdëč=ýŁwŻś{¤µsď?{ď©ŰźöJČđ¦é©c‰ön¦w´˛z)7–IvwÎÜ=łu ííÔôńPe]©®ç¦OͰĽv-PXî®+[pHđµë w@Ül˘ą/O:!Ĺ%ŰnŞG'şáňjyéVHž/ Ë—Ŕ(ýÁ<—î"á†UµDW§Ôú®™8¨h¤8'¦§*‹'kçĂÍM_¸…ĺ\sçěŤřT#Ń\imŢV?'•W™x“M´<Ş&Z»ˇÂ˘“‰2±ŠéIĐ5ŮY9ŰO46řd··tŞżvŽŚT‹3G›—ę«k+·6WÎTfvCé{óťćŽ^3bŻÇ•z¤¶Ą¶OF[Ǥ²OČžżă±§^üNş6ďsłçŇłçsó+kwÖ6ďfÓđÇrwíR˛˝­óĘ$„ě’ďT—n˝řČëŕÝÁ|?ŰŮ´`a_¨ +©Uj+Ňť˝•÷Ěď^ĄĂŐbo+ŃZC‚·PŔ•¶ś_J´Ź&[{N:®$;áüśGHĂŠ€‡rąe*9‹‡ŞˇĚ´ť é<LG«óµĄÓsÇďŽ÷öĽˇň¸[p±nN…FSµ¶ëĎĎźjo]Y8ű TZÄCĹěuëŕ} §éîŢH÷ʧ»»…éăRnÚJGMÂgfĽtö±ĚĚ.Ůs±IŘ%€2Ĺ§Ś™0“›%ů`~Z.Îňů™`eÉ)Ąýˇ|mů¬&¦”ŁŐŐâüůňŇąĚÔŽlúi*O:8·ů'ť ”hyîtvút~ń6ą¶!çmdO´2ť}9·ě Ô`ŤP`1YśŢ+Ě7‘a ĺˇÔ]LS›ÚBÇB.ŃRSV<śíënßPëŰWŞs'•ňŞ…T±Ćöé»ĂąŽ‚ŐőřÔ©Ňň•ćÚuą°‚†[ŕeĽZß;}OĽ8ë˘âÉćfwý¶âôIµľ’9?ZoĚź…ŽPrł3ű÷V–Ż„KkbrZLĎŕáŚ4©,\ĐşhTĚ(ĄĹ@~ľ:¦łu• 7Ťą•üµű_$:6B…äĎÄZL rďfeńbwăŞĹH–f»[·ăц•ŘqŮËĹíSQťňR ޸ 0nĂVJ\őŠîĐńéq;÷Ő1§L©ą“Oc#Śh’'dB©˛ÁŇŇöJcÉDť|ÜŧmTBHĎ  bJkĹQ. B µ§T7¤,fŃÍgĚhŇt¸€I‰XeNČN3é~°şęĚͨůéŐý;¦6ĎŁ”WLÄŞËŤĹsÍŐˉöľ[ “Sn!󙪯Áb‘F˘}V¤ľ|qńÄýsGď!ŁĹ|mfăô]‰ćŞ Ź NŇ)4X —VŁŐ]Řł?‚J:bô°d( ŇŢľV]8 xµtęŃÖę•Xi~aëöÚâ­D´¨eŁT3±Óq11KŞ&D0úż”â Řsˇ¸â”+`OBfš†v‹Öśl ä·Đ?p•ČpöSďć\d”‹Ô'LČÎ1P‰Ü\Ş˝—ë‹@ü2.]čŻ-]p2 DĘđéi0yL¤‚2V\@VJóD¸ŠŠTô‡ęÁâJnęx}é"®[±—I„2}‹_v +t} ż©RĚ.’Áš WýR–Ě;8b#•Ă6Ł“ôŃŞďÓÓ.2¦ł3t ˙ęwßë/ź° .<ĚĂÖCĄÍx}?^ß|Y„•yńyŤ‡‰Ąr01,T Őj Ů\Řşď.›( $ĺBOČuÉ8¬HvŇéFssRfŕen! snĹC6zâLF«0i+Ç®¦»›|n +ŤTÜrĆ+ÄąX%ŮŮ`P1ZŻÉ´ÖřdĂFGĆÝ® Ăë;áâ’•˛Én˘s¬ązˇĽp2ŮZĺRM¨Ď¬Żź»‹ŠŹ14Ô¤“sbfžS‡Íx"kĽ±K©E Bs‘|vzBHçŽĆÚĹâě19;ÉuŹž»±qî^Ť‹ő*Ö€*,QÁšŹ:`Ů8ÂÇa€6*B§úxbšNÍĹ;'Ó˝3)Żó˛b˘ń‰ĺ-Đ­D–É@™‹N,2ˇ÷č­>Ây15EEN&nĹ#ŚÚ‚~22 b¬±˘¶·äň,49ozÇP)3a#&í6*Bj: +.ÓŮWň‹ŹŔŘ)„O§cVĺąéÜô1Ř7D.šŃ€\ )L Úł´x±ľzą2.ŢŘöë"•r&„µc2üĽÖŢą^^Ľ*®B1ŹŮ('«úĂE,ś'#1ŃSK«ńň:§Tq!EňŁlÔ€ť¤áýlŇä4fBç`řHuďÔŤXş5®÷ůů4tˇÔČP}pć‹MM:XĎde•Ëx¨¬÷ĐV?ôlB)ô ó»•ĺ˝do)9µXž_ź9zë©KŤ­Sl°*ĚHfłł”Őş&ˇ\”‹™v°ĐĺRU>SK4fO^}¬ż1Ţž÷)´ ;Ĺů­@kÁDŔó#™ę\(ŰÖÚ1LJ˘RÚč—“ŔřsgĹňŞ[Ę0ŃlĽ5/;RˇéWsV>â §äbĄ˛¶źYő()Ż”äRS^4ż4¬w˘]iî4Í ¬D*I1×D@»y!['ÔB¨Ři-ďôvO‰Ą¶ŹŠéľś›÷r9ŁWštŽčÜDŚWW"%9x¦¶¶…Â"‘čşĺř˛GЇË*–5‚™bŃb¶Ô'uvTërŁÉ'I1íˇ˘T6ř$;倵KK@ +`V];uuöč%©ĐuczL ĺĽBvÄŕ3ú´vĘE«^.ĄuĐ7?q ">9©¬s L´şvęÚÜŢůdgŃ+''<”Ť qŮŻ™HŮH$ŰËx¸ +%m'UDŞ–f/´Vď2=-Ô&Á\¤<h@«u6Öäă čëL+3˝Ě·ŐĘl¬¶žhl+…ĄI ů•!ÓÁq'&ĺB©)‹›=˘±ŚęĽf·ĚEšůöNŞľ…Ş“6Zcň»é)4xÜĂf 5âŤăjy‹”+&Ź,$Z\$—­÷ć7O¬îź?~ůî«?sßł_ćµo˝őĂź~řÉďţô׿úĹ_żű“/ŢóLeáĄÖQwđ—ʧ‹µér{±6łŮYÜ\Ú=uôÂŐëŹüµoÎď_`cE¶ř8­DŇ­X±ËE“±R˝µ¸9·w¶·}˘¶°ÚÝŘëďś^;}űO˝řł÷?úč׿űĆ÷~|ćúĂ­Ĺ}µŘ·"’Őt a“çňí-—Đ9i&”m.î•ç¶Ňťeµ1—ę.Żžş~î®ÇŻ>üěKßüţ•‡ź˝p˙ż\zřy!Ó˛`ŠÝ2»y\¤!łGk>>ηăŐ©|«_™YﯟŮ9÷˝OľôŔÓ_űÎ;żxďăßľöýźžĽú`íL®ąB†Jmţ  ń@–RJv,dňJ›RK‹…™ýXmN­Mď]ĽńČżľöŔó˙vůÇŻ>ňÂĄ{ž8ף×{áµ·ß}âĹ×nż÷ŃÝË÷‘‘’•,ʉ 1ŮQň |´/Í“őXˇ_éo®ž¸­·´şwîöă·Ý}ëőľţĆwóĺ_ű‡ż~ń‡ż|đéç=űŤl}aÄ„Ť™i/›Sr˩ڮÁ%él¤Ó/±J —KN2ć"Â~1‰Kéd©·qěŇ©;Ř˝tĎĄ{ź¸˙é—¶Ď\k®ś/Íž`ÂĺQ#~˰“â­©ĺ•­“ÇĎÜvéĘőÇžzöő7żűţź}ň›ßýâĂO>üř×˙ů·˙üôó/ßřîŹáŐ•·ç¦ŹÚ©¤WŁÉv0’OfJÍîÜÖń‹'/\?őžźxîőďüčőüěů7ľ÷ÄKŻ}ëíźţüŁĎ_ţÖßţ÷źýő?ţţĘ÷~ţđ oî\ĽÂX¶µV_8ší®Č©J¦Ňš_]?{éŇ˝>ôô /ľđĘëßyç§ţú÷ßďŁ×ţýçożűŃ—üë˙ý˙üż€"˙üËüüW×˙Zmń¨’ď`˘L0š,VZÓKŰűđŘ8vúâőű{ţë/˝ń­§żńÍÇ_ţć‹o~÷Çď}ř«Ź>ůâ‹/ţ÷˙őßţú‹'ľöÚ©ŰH×xĄNŠĄpv>ÝŢuÓq©…zgaóŘŮŰîzđžÇźżç_^şë©_ůÎŹôŢÇ?ůĺGüË_ţř×˙úĺ§_|úŰßă[יִ¸Â!nS3t¸*Î…rSőţÚÂćńťÓ—®?đčO˙ë“_˙ć×ß|űÇďňŢ'żýůGżůŐgź˙áOţŻ˙őßĐ­?úĹg/ľöĂdcEďá'l$(§Á#Řń0*ćÄx#S›YÝ?sőˇ'®=öÔż|ăŤ˙ę“w?ţő·~ôî«ßçĂ_ţńo÷ó>ţýţôţĎ˙ůô7źżđÚ[§n»'QťĆĄŮ\¤–[˽Žݓ·]ąçń{î•·~đÓ_}ňź˝˙ć;?űőď˙ô—˙üŻŹóůGź~ú˙ůź?űđÓ;y¦>ż—é쩞eđýl䤙 Ä$#§Â©f±łÚŮhήmžľtíá'˙ő•7ßýŕ“O>˙ň›˙ţÓ_|ôë˙úß˙ýĺ_ţöµ7ľ{ĎăĎ\şóá`zŠRš$žęݬn?yúâĺ;î¸~÷Ť‡{ä­ďĽő»ßýîË?ýéŁO?{ď—ď˝üú+—®^[ÚÚKŐzJaĆC'ţ Á«ŚQ"ńJµąłęę]ßýđ“÷>úÔł˙úňŹ~ţţöţëßůÁ÷ř“/˙ô0śŻżţí—ßxëܵ‡f·ÎWf¶…hYÍv˛ÍąTu*QlÎ.í¬mďoďí^»ăŽoű;ßţŢ÷ż˙Ăw>üôł/ţü7XŽw?řôł_˙ćŻűŹĎľřâ­ýřúĂĎnťP +SśZf#y!”(Ő§fWvŽť»˛ćÂţ‰3WoÜýÚ›oýň?řô·ďĽ˙ń[?üńű}đ›Ď?˙äłO?űěă?ţč•7ż{áÚĄţ:ĘĆQ6Hv˘ĺeLĚRb"/VëÝ­Ý݇~ěMŘŹýüĄoľőÓ÷~őĺźţň—żýý—řĺ—_üâ^~őŐ_}}ëěU)ÝBř•o*ů^$ßéBŠXÚŘ?}ţ±§źűÚËŻľřÚ›˙öÍo˙ô˝_ţőď˙ë7_ţůÝ>ţáŹř‡/żüôó/^yëí®ÚßqRŞÁŬ‘]D$˘ÔYË×g¶Žžzđ©çž{ĺőŢřÎOŢ˙đË?˙ĺËżüÇŹß˙ŕĂO?ýňŹüü÷_ĽűË÷?ţäŁwßűĹĂO?sţ꽉ĘŁdĚipRĽJŐb™ÖâúŃ÷?ńĆ[˙ţ“÷>xű'?űěóĎżüÓź?ţÍď~ůÉoţü—żŔvŢůéŹňîĎŢ}˙ýGž~ţčĺ{çO\gÔú™°ůBvŻŕÁDł÷SÁÖĚÚ‰óWn<řřKo|çĺ7ßúĆ7żő“ź˙âo˙űŻżřĂOŢűŐ/Ţűĺ}ôÂ+Żž»íÚĘÖ)%ŰËwöCál˝5SiNĺKŐ©Ŕ¨Íéĺ…Ťťő+×/ÝűđÝ·_ż|îŇ­ůZQŠü çôłn\2Ř 79 ?!«Ńl±Đhµ§»Ó3›{G7ö÷ćWćOž;zăžŰî{ŕĆĹ«×.Ţyď±Kw´—VÉ­„ňó\¬aG8§ŹCHŃOňśÚ?qűęŢ™tľĐ¨wwÖĎ_~îĺ—N]ľŘ]Z +$˛R˘ât%n*Č{Ç/ź¸xwą·Tlőfff××–Ďś9ţüóOľýĂ·?üřÓĎ~ű›·ôö7ß|ýŐW^~î™GĽ˙ÎÝýăőŢrÍÇű¸ťPĆíŔ5¸ŢAŮ<´(†óąĚÎćÖý7î|ýŐW_ë­×_˙úĎţÎ˙řű˙í_o»tfwŁ9ŐË5:^J081LÁĂC‡ÝtŘĎ… VŠ&óŐfuuëŇ­g}ü‘ç_xöŰßzý—Ľ˙ůź˙éĎ|ď?|öŮ'/^9_nÖ<8ď!#† Nö°Ć:¦GĆŤ¨ŹPÔx-/MĎ//®o={ë­·]ąýęőëwŢřĆË/~˙íĽúúk_éĹž˙—×^ýĆ÷Ü}â؉L±…ň‹źłcÂD 9ťŞĚăe.Ä’ůÍťwÜxđąľţř“˙rǵ»ź|ň™ýřgßűÁ÷¸çާşď©G9wáüćöV{j.U™©-ś +fú7/‡¦Á—í¨dv—É×··Ź^˝výŻżYé©gź}ôńG_zńĹw~ňŢó_ű·«WďZŰÜ-ÖŰ$ŻÎXýAŁ1Ú|„qű9)ĘńJ˘ÜoôW§WöüRĐŽS.’·úy3ÂÂ:ú8ŐäfŹőfÔ}tÄĺ—ü”‚“ +FBŽ FÓ•PĽŕBp‡ĎďD ‚ŕ˘B«e3ˇL8ł‡EŘ„›‰jÝÄÁft`p"¬—8µŮ›”ÂR0ěÇ0–eŇŮtˇZîÍÍoź:ż°µÍ漴¨wâżŢMYĐ€‘ő.ÖčaY%HŐ )0!JR#±T(Ť¨±t.“Ěrővgq]‰'©t»;U)—RČëç]DaTBÎółţ@ţ«›É+Ęj–”p¦^ióĹdLŤÇÔµŤíN§V*e:ý©x®;IĘ LĘ{¨ŢFh-č¤É;npi ^ť“wŕ°ÍĽ®k‹©l˝«\ązç±ă'ĘĹěT»]­Őg§űsýv®Pwúȡq €Ö‚ ilĂřĹč|gR¤Ž“Ůr"_cĺ¨ËëçÄp<]ErąbłŰ[îő—IJ¦óA%ĺ'&;b%_Ĺŕsц«ă8‹ŕBy^JEłhj.T*÷ŽNo]í,ź”ŚËă+át:/ŁΚÝ8T«6ĘsçĹÔśÖF˙ăI‡?ěc“VD€U¦P4šJĄ ‰T&ť«IRÄH†dĄP+J˘ÎLY^*ąi6Ö>0l=¤1Ť< ˇNTđ‹YZ)çę‹ë§ď5ă!Ŕ["P ”* „Kůř´ MZq¶ăˇĂ–CăÖŁwÂŚyđ!d‰®ŇRŇď$qQZ'î U'•´ă*)Ľ”:nő˝´Ĺ/yđ Bm>Öäa}rŹVŘxCP+6e÷Q <¤ä˘l´ä¤Ăz/‡đ™1 öUŤyHë$"Ô°QTŚ˝śÁÍŘý˛ÎŽ›=¤ŃMú訩&ăRŽ =TXŠdéPüÖ<:át !\Ěz™¬ĘąeT*i,„ •ě¨8aňMč]f b0ą f— a‚j…‘b(%cLĚ‚µNfF‡ŽŕŤd„IÚ}˛Î‚™ÜĽŢ-é=+3úB.JEůD¦6»±!ž©ę 6¬“‹c”˘‡-L:4&ˇSďźkGő^í289«?dĂð?PůˇÜŚ‹ŚŚ›)ŃJÔ7dŔóXÝO*„wxŘîĚ>ÎĆŽhl°)ŹTń)m¸2Öö +i3˛a­cđĺ·BrZĘ-©ŤýdkŻ´pQĘ.LXq”łĺ<0lś|ŁEHŽOµ—.”gÎú„ÂĐ„{BďÉ–ć=TěФ{ÂFÝ °Ş¨¶Őuµ°d¶3𠂇l¤·Ó4čÄUďŕR·Á—LĘ™ąťoŘŕ1:FM.ŤÉí$˘>1G*ĺHeÉ/äâůąTm™ +—‰`ŮM'ťŻoä:G‡ôŢ˝Ëäeý"źšaăS„Rvâ +#&*ťu,X5zÇLž «ĎŁŐMą°Ä%»0™±|KNT¬¨%§wóV,ć¤Ň´ÚK6Oąčäµ!|<×sâ!˝‹™°aPuJe"56Ňşů‘ + +¤ĚCGˇđ`}aĆ,HĺłÔČŚ=6Tâ=1ŃőK™DĺŞ i¬¤›Š\Ô-ŁćCcVťŃ Zd°a(ó 7± ’Ů8 qŹšp+Ş8„ KÂOżXpRq˝u’ ţÁ7éYč‰Á §ąiµ2ď˘#ŁFdÜ€`L\gÂŽŚZŹLz†ŤÄ„•qř#áô˘ ŹkĚ~xLZ‰ˇ ŤüŠ—ĎĘŮĹ@aÍęăbRNw}rŢâ ­ôč„{Ěŕó‘±Rsç“c:đŐ$®4Ějň)&$č“ËBzžMô턊°1€”ÂĚ™He +P6F$8j@ÄP©5wÎE¨‡ĆlŤ",Ô†›P'ĚřÁa‹Ů†Ď,ťńqiŤŤF…ś‹Můĺ’ś‰×÷p[kˇu0iDxÜčÓąť¨Ś‰9zpąiOHÍQJăČ$â ZÉř•Ěŧuń7ż´ÉĄ¦”ÂByîT¬ľ‚sT´N(U1=-¤gŃPÍJ%MXlÔLjĚ8´Řŕ3ţZÔĎf.ă˘âl¸ĆĹ»CźĆŚÚń WĚđŮYźRŐůd;ŚçZó[·R±–ĆÁX±‡Q=Ěŕ+& ŞM^Áác7Ź^śZ=iAy'€ň&UL®Đ‘6ëĂ?i)J6ˇđ†&ť“6ÂE†Q)GÇşˇŇš^ôqŮdyQNwF-ľűDC®űĄ˘âL¬Ř\÷ËůIŁ1ůa}íDŠÇ-ţh0?o#”C“ND9Őč¤ĚnšzÝÉ‚ęâRiđ Řľ Ěł‡IŰpuŘäÓąy—P”Ňł‰ú*ˇT 7żfÄNÄá>ŤI9˝kđˇ:TÇĹÂ-G ‡GÍ0R19G‡ŰgíÁlRšëpĎ›Mpy);ĐËëިĽčŚ'(—K—–˘_ńËKń0•“í‰^śŇZŤ3[^L˝ "Ę{r\(Óz§0<ďľÂeč>ąąrZÜ“éĹ cľ``«P6˝ŕ‰_[B€XĚĆľŢŘóĹĺ¨ęŔ ÂŘăűÍí§ŚŮqĹTLiÁărĹáĽ1Ţá§ÝÚęĘRâÚrx9H»Ł*¤T0Á0®y"¢ŹY r }ÓWĽVűÓkî›31Ń„ô嫟ď¶./Ĺŕ@¸öŇMĎr€Ě.,Îfq!Ó@«ş*ä{7B”Ź2Ăb1ŞÖ¤Ú6j´ŁbQČô·n˝>~ő}(iG¸ ź¤J[zi+]ŰĺňkWý4Á熫÷Y˝ýÓůĐb€Ťó%97íîĽ,ďĄÁŃPT¨VÓ[;™ÁIvx–›ÜÍM/Ü4&Ň…Áń‡îîChÉ &űńT˛T[«î3ćĐ„ľ8›W6ť*qˇIÖPą%Ú«baęIH7ś$¬ŘÇ'z”ă‹1ľ@(uÖh织ŚVö” ÓcŃo±¦2°Xö¦Ó@‚–BłűὨN¨MĄ¸JŠ%Z*‰™FPgńY¨+’)Ž' !ĘŚ&ó¨R%´F€2—n)HÝëôâ¸X‚ă%äÇĺ­gaązĂOřĐT×Ă´?áĹ7ŞbbJ`Ós^üĎćB—ń…Ŕ Lj±Ć ™3&´FU`óXŞĺl?¦EŮ, ¬kő©”¬ęšZ]Ť'łQĆSš+!]P¨N)˝qu)‚iŔ[ŕőVľśŞ®çš›'OľFŤ:‘®VÎ*«›Źěńít˙Óš¨\čŽ˙öţíčŮWLŽPŁ5Ys`ÖŹíî9©÷«_śé켏‰ń*=IwŤöÝňÚ'J}?ŔXĄ)ąAÔ>./F¸(źcÍ—ícj],¬VzŹ_ßßűćěÓRŞŰBe‡¶W…â¶ZŢ2ńb)ř$Ô$Âd¨T3šDv"<č°UYăôÔöREy¬€N÷ůě¨8<łşÇ—ńÄ“jŕ@€đ™Ś’5ľź0{dşx9ď#—d€Đ„Ü2{©Ę¶YŰŤ°öĺ%äş+ľćnş1'"‚QZ‡ÔÚDŞ*¸Ńe˛c2ÝGř |l1š,q™AŇę¦rÁę)BĄć\Ń`B†Ä„‹Đä›ěÚ2¤ę´\vÉ%Š'3 Ľ©ęŞŐĹâ®upµ!çĆT™ÍdEd#l)Le¤í‰Îă +Ił›­oď‡ Í ›çBqhçٵ(›[Đ‚Ůö&”?ąĽ|mń "&T ß±é(y„ÉčʼndŐ®,z–SÂ3'•.YI­ě”¦Ź¤ŇŞRŰ ě!WXáK«©Ć.›[şôŹ^ř±ł÷čš3ęKáŮ}G17ěÉRő"LśĎ»ăĘl…TÂŐ˛Z۰şGfű !fŢ+«·1˝Nš ĆHĺ5»{\źŢě>Ýą˙%¦ä¤¨ŘCłşCĎfl΀ÎDx[)Żi­='ŞŢđZe·şńĽ¶ő,Ő<@Őf/z)‹Ö[ąÎ›í'Ô*–ŞR:ŕë Y‘FS(Ť´úJuĺXklD­>9í˝)®?%Ň#ĘSÖČW»“łGď~Č46‚ eŽ˘B'žl§kGŮî}Ł›]JIfűn„ÇYçnö^ž<˙ľ0ľ ›·~řt°u± čTĹĺWďÖvö߬Üţ…=¸áB…,“nFD35&–ârĂ×€˘°wx7üxÚ7›˘3Ź2;Ńúw¤ćqX¬†#™íĐfSj¸RŁÍV27ĘöŽĹü!5ĐfË'± ~W!^Íů°¤8j_Âec|\^.o¦j»ÖAŐź[+Nf:gdŻ.Ƕő vŔčť(¨\Ŕ•&—î‚b@-ůfł~©ŕnq±B‚°çWaîO./-yĐyW˛­+Äzâ +©6p©J*M”/¸ÂŕŃ’#Hëbł-ďXťĂtűp°ůčÉűßË…1žŞŮĂ;Z〳'ÍŐ‡ťŤÇŮÁŮ2ŞÎy1L, ‚„rZaVN~:iÔěÎn,™ý' +cĄ˛atŹ„Ňşhukç?űWł•îF·3ÝŁüřNnt[­í)7›jqĽˇ/HÓz×hŽĎ>«m=ťMbâBÎGKQa.H…Ů,ť§{ç“[źiĺUµ<Ít÷"B榍p–\ZÝúäáçż?}ő}sç i6łĹîîů[>?ĽbúŚÖnşµOY+Vű¨łyÎ[ /Şeűw•ň.*5¸ôrg6[ť\ěVĆgK!ćŇBŘ“x{@­Ů@ɶŔďz)E)Ť›;ŹzGĎk›÷ ++wRŤ=ÂlRîWůźĎ_ţ<Ěęó~B©ěĺVźf'y{u)”VlŹŽ¶ÎŢ˙ů|ÔŹ™Ś=5GwË{/kűŻ•Î-/›“2ťoüŹŰgݍ0M.oWo]ü˘¶ţÜ“H];—sP×<Ř|u&4BźÝ.é b‚/¢ś…Š­bi-·rż˛őlxç«É˝ż‚úąĽoMďIą©3"Φ¸„x‚ę¤Ö«o˝„´Ř—€WµÄS®<ć¬0?{t4,MW€ÜXś˛Â¸ŽB¬+Ęv†Á+Ő8dá c´Ĺ íL(pĐ#É,ˇŐµÚvat ţ†TźÜ·†ç©ćamőhÚl:Ü Ł4ΨIÍ*î¸ć@”Ą ŔłŔ?Ŕü ¬RUň˝ Ąú Ů…Ę Ąšś¶÷>i˝&ĺR{zVÝ +%-4UÓš»Re“0ząţiuőˇRYJˇ´VşąŻ•7ŔÁĄĘž™<˘¤.;˘€(ô2Í}łultN”ÚN\(PZÍî0ŮN€2X«'ćGŐńńÁĂĎÎ^üĹřřL«4‡űOŢý&]_ʲűwö÷řëjź~Ŷˇ°b ±’m.ĎîÁĂ´éN¨˙Ĺš'ˇ\u&śH2ÂŘ@wA&Jln +–é† kă{ě­ĆÔjT­Ciĺű‡{ŹżM76—"lNWÖźŤröŘ9› Yš]]k®ś-F,®51­1{´¸™,oÝ˝öî“;ďll=şęˇŔV¤ŇgŻÄĺ*d¨›fyÖË-&UýÓ›>GTäň©Ći2ż!ä×—Bă’¨©0“ŢĽűáüÝďÖď}ÖŮ%Uw˝Tć†w6ĚĹűżÎ´5&'ĺ§“‡’łZ^ÜĽ´€řBľąÁĄ*×ć}ziiÎKŁĆ@iźéť3ł}ç*!¬BXWçs.⦋Ľéˇ<1řĘ“ˇ+ŰëgŔŢÎč-aRz h„)¬z ť2[lnS*1©ĘÚS2łBčÝ8›Ą„Ćg|_Řb âkăz“łB®§—µń„qJ-÷÷žőŹ^–Vď…*瑤¤gł“‰V7Τ˝Éť··¬îŇĘÓîŢ{d6ů3ČKIÎŹÁ4Ѥ•Clł§bqť0ş%š«gőńI‚KÇH5ßŮY9}·÷ô‡Ďľ}řůß”§÷9Ł{ńđ‹—_ü@™ő“%‹¸90šÇőµ§Ăý7QľúÓĄŘUĐdY,­ yČ•9čîe?° Y B7ÔX27B3ý„X†ŘČjő\wŻsü +M5}¨^ěťŐVžd›‡ĂݧŁŮ=Ŕ-WL”ÓÍ_˙•P\˝áˇýD†šĺÁuLmCßęÇ4´€„#Â:ęőÝtű µuqüüŰéé[ÜěÉąÉéŁĎă\Ö‡ibn%ÝصZÇ”1žó3Ë!ě®Í`މúqÓę—×ď§;‡¸Z‹Đ†Y™¸˘Ľ#ÂCim?ţnőţ·íŁ÷ĺͧqµyi1ŁěŁÇżL¨ĺ+ÎŘB8é%ŕ(”€"íŢ]»˙š3quŢçS‰Ůů–ŘRDXŽJPáqĄ-w€Ná~,L( ľŮta6—Ptf0:zuôę7>Ř#Ą&M(T.ÓKćÇÉâš\?š·˘r5ÎŮĹö.çC„JCI58łÔé Wn8#—ć}×–B—Cs^ş~¶z`T +$t°N{†ÖęÉÜPoníÝÂĘ]©ĽNhM©Ř‹ zB€xk1Z>&f‡Zq3HXľ@$ł&í+ÁS”RĹÄ*ôBĚPrbţM7 +Í1dv11ˇ,yO\Ł´v¦ą+Úý(­']Î5…Ć)nL@Řńˇ +l}z—«ţ¸âr˙Ż.GAlÂÎî`‡„.Őäâ› +…Âčén}ő.z.ę““ĘôĽ‘k^*í%4Ćě©ĺŁuę@¦“ŮQŞ˛Ż”6ŽXkäŚę—–Ž ŰŚ6nϦ‰óŕ^\§­Ů;)¬\€Ş_YN¨Ůľ]_™J¸—sĂTyĘ ČîŕěěŠ3h­AML.©ĺµtďĚčśÖ6^XÝS±¸âŁTHßő•{Ŕ± ułIㆄB/úI¨X`ű?˙¸.ĂÜl˛zăËQ*‹1¶™íNvƤ<ĽÚÖĹÁ‹ßĽü]mď%_Ů‚RĚęÚöůĘî3ŢęyPÉ?&âl”2ő\?Již%šŐ¤^ŔzdË®~ĂG19n9H]wDfSmG„čě íÖf—Ď‚´N©ĄÚĘŃ`÷|zňbíîűŤ;ow|Ţßn Ď"bľÜŮžť8U +>LdŚ&ź©>ź]‹˛%ć0ˇ2[:­ˇsţ¸DUgĄĺ*‘MĚńF-Lëđ[q €ˇBgúRnPť<ú’ł:0°3_ž­8Ó5*ŰbfBČuWDÔórwßd./„a!@X¬Ů‡Ž SM Ĺî5§gŽł]XI7ëŹ[;O6î|n6ˇ÷›“ăő“WŽp2¦B‡Qr…&“Rş©Řߥµ*TšÚ UŮL_ďWv_®ž}aTÖ6ýĂ˙ň§ŠkKЧry?ß?ąóę·'/ÇÚ«W–ŃťaµôXĂG‰€ć2xkUĘo$Ó]€óĄ>ĺ$!L…Ĺ…ě‰jRnBug„…í€zđáPžXáˇŕ“BRťÉ ™t/UYËőŹRÍM˝µkŹĎĺĆ>›ź0™Ncrľqö…-GDw\Q9RŞAb  ˘7.é/č… ë@’!ÔĆŐ8ihąvsőX. +C{źfz{ŮţaŞ}Hd&Qˇ¬e»ŰGϧGď#ś= <ń$*”Ł‹+UÎÝkÍiŐ|s3Φg'Ő W{¤îŮpD%ŘAG]ŇĐă༠~j6>™F•ťnr™Nuxří˙üű˙ůďí=˘Í†ŢŘŇ;Ťő‹Ňđ¤7˝»˛}!ZuÉj +™źî öNDą¶Ś^Yś]ˇŇr#É/}u)ze!´ŕA—}ë3˛=jŻŢ›<_ڰ>Bsą›a˛˝Lç8Ű=ě«Îô´Ô;đc)OLzł9xA0ĎŐ׊ÍÍ›ËŃyNKaŇXôŃ óaBŁäŠ’ůăr„JcŚ–VÝHÎî©kRz—V*í•ÓŢú]ŕq& ąců˘‚«€ľ‘ŇK#<™™s "㲴Ńâóc±´ +ߣu»Ň?üŕ:©ěîý\ďž’[±*ëZi5.Uo¸I>U+6·qŻ,…ť¦Ëlz}|řĺđřsÖŢô¬VS2-_”˙Óžź,Gć‚‚'‘F…zŞĽr!Öđ$ÄKs~xÝôbxŞftö!ô1Ö@oßRëűxŞiÍžŚ{ŮT˛8,în<Ú<˙ňô“ßŢ{ű‡ťß© +ĄVP©¦2ĐGó~ňÚ2ďŠ{cŇbEĄ ńb_ +ńţ®aRŚU©OoÝzňUw˙ÂĎj cç¸8ľ0ŰGłűl‹+đëł är ¶Ô1°<µŚZŢ­O/¸ěĘRH’&ˇ4(­‹J ´ćRL—#Ş^Â0‚xz˘ü‚óŁbŞ8š?ß8ű´8:š>Ţ}đ.™kJ1UY• +ăŐăÍő>$d!]^?|’­ŻB +şO‰L„ÎRÁµPB™wÇfÓńĹ`¸ć\±yO‚Vk:Hz}۬m0ZeóÖëúĘťĄě~aőQmëě””­iď>5ZűdŞj77’™–'ĆGHÍáÁ;–}X‚¶hĄ*eűŔcŐŃí ě©;H¸\Îô¶|qüň×Íőű_ýâá‡ĺĘZL,ˇR-!VłźŞěWž5öŢɵmJ)×ĆwrĂS©¸±%<›íVóY)»ăŠľúé|čš—Śk}Ţ‘›îŮŠ¨2)Włť„h‡ĹŞ­Ţ{óŮŻţćčÉçéţáÇË ­Ťł÷+§o¸l+Ěęrqµ˝~żÔ?TóC»1ĺRWH0YLŞřQe9Ě.şهaŇŠs8îWć nÔf9˝)ŮS\íÄ…Š–ë­>2+cTΦękýăO×î~‘0żúÍ­xâjľşqúě[$™žŕކĐŮ•uřf©úxăîĆ­O/Ď/Ýđ@a$ř‚TÚ`Ň}8”`jĄÎîú­W—Ă br%!0±Ł 9ŰŤ¢#ůŁşĆfý1yÉ‹Q%Ś©7–ü!L$ĺĽ'ÂCĄ:›+ÇUžę­ňř( ňqôrF°1Ĺ ä]ˇdĚĐé.•nş7ť±đÇfBłk”Ů8e¸Ä’›sĆq>CJů?żćúÉŐĺ?»˛|eÎ;ďŨ*h5ؤj×,M\"©U|¸JhuÖ)Ő-˝}TŰxV]ął¶~ň˙ů˙Ř˝÷2#¤!«˝«Ő· ĄŠĹ­„Zőa +%äÖö_„Ěő%˙Ľ3ŕáÎ03çÁ$¤t‹ŐĘŕűQΦ´–TžVVnµ6î–z;O_˙üÁŰ_JĹ!–ާ[·ĚĆaer±rúeoďÓÎÖS1żb•¦wß0é’‡Bl™Í'Öě)kMüDÚăÁ)k!Ş.FŐ+nb.@CÎŇŞ{Jy›MŐożiŻťq™–R™MçR^}Ü?x»{˙çgďţP^˝W?ţL©nKů‘éJ56[Š˝ŠKuŔ!čµĹ áĂÔeńćŠ]‡€ˇłNsT§ĺú˘źşâd"L LŮnČd?BřĐ+\€± +±y.;Ľěm<(wvKÝ͸Ąµb*×÷ÎÖ@IůPÓU gsµîAkrűĘH©şg|’ÇŤ.¦·cÉbwí|°qtB–’ďJvŹ3fkx v•+(—+·6*Ý]G_öă„’`,0Ę@B^öÎ +“)ŹĽC ŮöĆŮîŇť‡_+őý„Úł…őĂçóĎ˙-_Yu†8 ;B,szŹ3Ç´1đÍő “Fł˝őH+Ž\AĘiŮ{B ‚*Q<%ë”O‡0ť’ŞóüßAu-Fśád×ý)‚›(ź7K+Ď>üĆĺb‚Mh567RŰVďŘîlŻíśö«żk®Ţ†8\[ąŰŘ|¬7väŇ&a Ü3„HęVűő—GgşzmáĘĽBâ‚—t†yvZĘwű['Ź?ăł/Ěh’f]­Ś­öF}ă¬0>H(˝ľžÝá2CŇhiТ=`Ť®VX­ Ź8«dÔsĽ¤Ě0k9âĘ"ŕrťłF!6J é’#îÉĆNćVpµÁ¨Őíă—íŐ3Áî¦ę[Ĺ•űÍígÓ“wGŹľî<Ő›Łťżúăż& +&CmĆěXJ…ÍŹ«rŻ"lŻ:ľ3[3ĺă´ŔľŹ3‚şŁ*&Ô¨Tg>Ŕ,IđG¨±ŮŐçŮ2ŮěęÚĂd¶ÇĄĘýŐ;yüJĄ5=ënŢe̦WcÉTo4!l: ’lK‡P3c¤ AoÎM€Ú'ÍúRš °ś˝ŇŘy‘Ţ +!.¤,č­4ňŮ„X°}N•6fł¸łłBr#,ČaÝaŢ a)‡źĐ|r Ľ2i4’é†VYżZ»ýaăöĎvî~ľ{˙łŢĘ>ĆšaŕB!BhÄlͦD˛Ťâó©ü$?dw]I¤¤ĺ 21Bůň#̢ĹĹšVÚÔ“ŕŚâębܑܜHV„ě„Ń[Zne <1> śo´¶úűO·ď}Řľ˙Eçř"dAr{{Ď©L?®TQĄ˸R§°voăĚK(~ÍéĐ!ĚôFw„÷Ćř |{}°}÷%š*ziSkí ʼnŃÜŞl]¤'çDşĂéŐł‹§/„ˇ3„ŇÔ*Űí'ÓOŚÚ6 yą˝öÍ÷[[}đď®z„S‚´­—×k“űRa=€k[goĺâä’#:¤tá Ô őŤrogóčńčŕI€Ń«‘Ş®(Ĺ›i–FG_ś|ú;Ěhe:öđ U›!:÷ˇł~ʆJ˶öíöľW®:c8ÇüęÇ…V ~,}ÓÇÝś­c®\q…ťQ&Ćeäň†Ţą•ťçGwĂŚmWV?|ű·GOżó}­ą©Ô7¤ât;LLIťĆô!©¶ć?r»7"@L¸˛‹±E ęţęí'oż#f'ÇLŢ3Ůq/sŮI¶wşzţĄRŹ·ď_Ľţľ±zîMh~¨L2;[ŁŠÍaÉŮőľ`Băó&D$8D¸áˇś15ŔääŇvip;]™ô×יִż?xţ‹ýç±őŕs©4ő:©VŠ[Ťő¨KZí¸X/ޱYG(é &=č qQL-6¶e«÷“«î9G,}ëG’ţ„îŚ(„\Ű<{ î˙?]ńÍy(ŕd>;QJ!:÷Óą'.„h-Äh¨śăr]@÷áé»Úö :żFgzZc»0™M‰ Ľ÷ń^ ˝të?śĚ. łů{˝1—úňlů*d1@†i#ĦÝDĘ‘y»“,öbJÖlmőŽ^ĺFg…Á­Úę˝ňř4™i?#łXš´ÖŚ' €łézµ5:¸űü+)7Ľ<sYř5;ŕ>2bň1!o561µ|Í…N÷`:ÂÚůˇzAűKÍ•ť“‡íŤ“0ĄŮ[ăÓźí\|»uţyďq{ű"U[KGßüţ?<ůćďÜ„aíĘĘýÉń‡âŕ˘8x Ö|„i4]˛z}®8©«.j)¬řp;!5Ňő­{Żľ}üá7QÖ\Ž +R' ŚŐ«ŚOk+Ĺ铨ڲ–ŐÝ­ŽůŮăöB)@A*ÝŘx2[Ι=›jq. pX°`é ÎĚ6×BTÚWY«›ť5Ö­ź˝î?ź]¸ÔKŹ?ůę˙ôŻŤńá2"‘j›Jµi˝aóžD +€“IŐФ= Ü ‘1Ú0V¤ŮÍϦĺů2×ŮßÚżřŐżzôtrúzőÁ×µýO«;źLn±yçÝöť·…á­Roďď˙ĺ˙zóÍ_G)C4ŰÉô0ę¤>>–Ó=ĐŤ+K(g¶}|m9ru!ř“+îk Q’!¶ÄçV9«źkď%­ˇ7Ů܄ΌŘÜT(oyP™I7¬ÖtowsŁ“ćŢóŃéŰáهÎń»Ěä~˛´fU6Î~˝{ď3\Żz;7»«ä„ÍďŇéőŮňî~úş3îš])`ç}„3ÂHIÎfž±Ú;f{ł4ÜÝş÷~ëţ‡[Ďľrň*?>#¬~$Y ?žE(ÝťÝoF˝ÚôA{ëYşąŹk WL ďÚ2¸!o*u:=–Jűéć1—é-Eg4™rj2 fZŰĹţüSĘp1[Ő×îVWÎĚĆN¶wí$łýtqpt˙őôřQ1!ľĺú‡ł©lňŇěĎV Q\˝u˙]ˇ˝ăŚH`a!*ʰxAaŰÍÍŻľí®ß†X„+Uąľcônµ¶źźú»gßüăčô‹¸Tköwo]Ľ§ÔÔX®s«ąýşwđYqň\.®!DęüńĄţÉ57±ć®03Ööaqză Íáaă>™Š¤Ůˇ­ľÝŢă(OďŐ5Â\c#™îĚůŮ.|–ĘĺoŻ(…u?¦9Â,ouŠ“™§ăR“Ë„^ 3ş”é{{ĽYďě<>xţËňÚýLgŹI·˘lógŽőáűšŠúgŤZ{ă6!eÍöŢčřÍÉ‹ď·.~nvÄâ &”bŻyîŚ+ם;ž [zăPŰ7ÜXS[ÓŰůá鼟âz„É@@cŇ]­¶ŁV6Y­rńú/ľř÷Zq%L™ěěTüFľwĽqöúŢŰÚŰĎH­‹Ëµ¤5ňÄĄ«ËČź]s]™ ÂWa8uú§sÁ`BĘT6\!aÁŤ;‚I„ÉĎ–Ťë¤T®#•R2?*ŽoW¦¸Ţ­Vsí~kűQ˙ńéĂ/ţ‡úÚ™R[»őěWź˙qăÁ_€_ĽţöźÇ·Ţ ąq©ą»wď‹Tee9&řpÓŰ´ś‡śëF¸(©Yů~Č?UńĆ“  ¬Ő±G§ĹµűŁăO{‡Ď¤Ň`íäyk÷qftjŤÎäÚťÎîj.ŚŔąäú†ź·b©JX®C‚1wĂZĎMÚQąNe‡Zs/ˇÖČL—ĚŽP­K›=<Ő•šŘ– ±€ŠvLLŰ˝ăÉŮçăŰź·v?©¬ŢĎöAßşFy´y˙}ޱi4·G·?ËŚďňĄUŢîCb]?zaR®(źiI…UJ­ËąBeĽ1ěT~¤ôÓ9ä†őc*­U +ý17 ŕ¦;śÔ Ł­ąÂg!É_ĽýőĂ7߯ż´›Űb¶ëŹó1Jźš­@ç%\‡IĹR˙¨ÔÝOW×aćĘbŘć* Ř–ŕ30h ŃĆ8łŇŮ2Ő›î”éŹn˝Ú|řUo˙©ŮÚG•Öěä€Rx÷íďĆ;ś XŽPę!*ëŠBöT¨ś`Ó•ţž8ËV>OTÁ ę!oOřÜ +ˇµŤB˙ĺçß?yű=­TÉRo÷umý©Ý;4«k"lÁâü¨Đ\ą]sÓŤĹ §č}R©aĽŤPÖĺ…'D÷&GńĂZtcWGŹr9Á^1*;éŇ”Jš­3ΨfÓs čÜzśQËŁĂúĆýććýÚęm«˝%çűŐń­µ»ďVĎž77Î@<ŤĆ—› JUËşëçB¦;»•%5ăy" ©D\!L†żiĄä Óî0ŤŠ9µ<˝:úä·ëw?ëě\¬ďť˙§ůďŹß'Ě&żÚ.L/Ňť[ůŃůôěĂéË_Źo˝®Oo?űň/ůŇš—ΨŤ˝ÂôAyýĹÖŁ_o=ţ®wëMsrű/˙éüü/˙%Ŕdťqm9¦:ŃTX¬đ…Ťtó°6<~ôę«Í»o;Ź»‡/;­ţ~gďŃčŕůńÓź?řŮŕ†ŐńÉýw?<űúŻ÷}ÝÚy¦7¶)cvo'kMĽ¸áp“ 16¨"köĄüÔTşďĂ-FÔ2‚›±™Ź+Ý‹ó?®Břęo?r]«6Ş věΞTÚµ&7 ±!µąŹ«HCI„ ţOLž-NbB)JYđ&&äÁ•pąő-Ú# ˛ů éCĄ8źâ\”S“VM+O:[㣗˘ÝO°‘łg:>ŢqGřăRŻ\‘‹+ÚňĹ!¦ ŢxĘ]a6J~Ę,ŤOÇÇź47/´úN\®:#‚l¶Śâ$ÎŮŚVOđEB¬ËŮ!!•|’=z@-ŘŞ][Ś]˝ľ<\ö31ĘHĐ:Ą”€ů/]÷{n9@ýt>xŐ›2„w‡&UJđV"™1[»éö+[9ŔˇŃasă^ar®VÖyła‡vw›ÖmRŃE»ÉĄ›™ÎQnx˛žU †…tź7Űs|ÉGÂ.@ +F“yoT€›sE!$’YÎjéÍťĘäöhďńćŃĹýW_N.ę«wv}łzçËăgßmßýYyx¤ä:ZqTíďž>ůL.OŤĆNo˙ĹÚŮ(€Üŕ(Uť&óť\}úôíŻîľţEÍŞ•mˇ°f4·.~±qń‹B˙hĽ~ú·˙ô_/>üR­NóCŔíîţĂűďó‹?ţŰŹ˙ń˙üęŻţĺö“Ż~řĂxűË?ęí=˝µ'Wwěţťáá»ă?Nď|Cč].UíÂŕ×6˝ćAŐ¸ŹE±şŰÚůT«o'»==âô†hŹŐÚ:_L˛Ö ±vqđä—´Y‘í¦RPVżľö¸˝űZ­G“u ±¸ÁŮ_BŚJŚłÁ[Xúăâ,ćR8I(µâŕ”Ń›~RÇRŤţÁëęúˇ¸ÂçFŚŐ +QłYhV `ITHÓZ™1›lş)ćz´^k żN_z{ Ślş& ‡ÁMĚ^×ŕĐ Ůn€NűɦVÄňFnpŹÍŚIµĆĘEV)˘B^ĘöĽ1yÁÇŕbQÎ i˝)02H×–âPĄ ÎŽ2„‹•váŮťQ Oćŕ_—ôM>伸ĺsłs”’ZGÇ.—-¶3Ť)­—őĘD)ŻCJR‹«Ůć®ŐÚ¦Ô,ŻŰb®‰ŠY©°˘Ôv çPJĂ,n¤+ëČţQ!Jé!\ńD…›Îč•Ĺ„(™fRÍc‰PFŁ1˝ł É÷ágĺ•#Ú(jĄţčŕ™Ő\Ë·×2ŤUJ}Ί™ľśhĹ1&ěÎNy|ĚgZ„ÖŚ&Áél!ŰĐňť|{C«Ś˝’ďiőMµĽÖßyÜśžfKťÁhăŐ‡oGűç˛ÝîÜ;óËÇ_ţöĹ7xúőŹŹľřőáłĎVÎźżűúôŮ×ĂíGgź|×;z;8ţ°vöa¸÷,?¸•óéÂŕ“ź˙Íđđůuľ¤‰T•·ÇÖŕ^mă)™Şđ©â»Ż”3¦9;ŐŘÎŹĎ×î|ąóřűîń{ŔłoŢűWőµó¸\árcTďbưµńl˙éo*돢\ć᫟×&'ËQ bµ3–B¸"¦´ęÓG€čR¶ß_˝39ţ +µ49e2]„ĎÓf›Ď Š+g„Ůňˇ‚”mO2z Žš¨\– +ŁîŢ‹Gßückë!´ąZZ8t…fGřb2 Jöa|Jë 6UNW§°;ĺŐ'beS›2uÄYČ®řQ"V^1ŚŮ +qÇĹy@čĹ©6b|ŢNBâ8Ľá&ćĽäR]‚ŕ¶ż˛›=Çá%Żşp?ť‹Sµľ-W×ÄÂ$iŹĽ¨!%LĘ:#L”7)˝–nîeűgVď”ÍöxŁ’©ĄB/€K©âJiz‘Ý-Ż< ´föa~BłÚF®ëŤ°7ťČ ˛č#! b K–i©Rźś&¤«WSĄQar"–§ŚŐ„1)MîáJÎĄ@ (˝›éÜĘônĎćĽbł`"JaLč Ů0•!•Šś VşŢ–$!Řţ„லQ6Ť˛†śĘć +­B}Âi%]i ·:›Gő•­lk*ć;rudu·+“˝áᄡÁĆí;oľŢz#)[-R´Ł”AŮ\±»{űUa°YUÍO3Őm­´šĚŽ"\&” DU?¸ó8ÎeI˝źŞí—'÷ÖÎ?ß~đĹääµ^ŰLŞůOß}ó/˙ý˙Ýľ÷Ó[V˙Ěž>iź~ýŕł?îŢ˙YuĽŻĺë_|÷W»÷>¸꼟Š[™áÝćÖó[/~Ě´÷¬âčÓϸ˙ţ‡ĺěÂ44¦Ů[=ýpöćÇ“÷•jî×ożűÇŇđŘŹŞ~B€\YąŘşřćÁĎţş·÷J)mŢ}ńË\{˙Ęrěúrl9”ڞERiäŰűăĂ—ĽV{řüóßţÝ˙J§ę1«{Bi[©l=üŐŃ«ż,Ť/˘TćÉŰ_?ţđŁ:…1żé# łüh*ÎstĂĂ.x©ăŰŻľř*€*?ąîůÉ5÷ż»ě˝´óŔ<ű™ök­ž1F+i)˝ 97ÂĎ3˘”*„¬kŞąvTĂ”†JE©´juŹ[ë÷WĎŢ(µŤ(Łç[;©ę†źž=fĺŠÉK!Γ(1+hĄp‚ó†PŠOyø a˘b!&WłGüŞ1±ěEE)Ó¶Z[Ő­‡›_MîĽoě˝2Ú'Î(‡ŕ’”í„eY’ţrX&R´Z·Űű¸ZŹ0Y«˛ +›Ŕe?i.G¤iđ$Qo‚ł‡P9ŰŢ–ô%‚h*Aéâ [źâ’ĺ cˇ´˛ëtvlžż>KGVu˘U¦ńćłF‹ů8ĄQĽI$-w„źó⏗0"gô(e€đj™JfqŢň'TL,1j-ΦăĽEČyxneŠÎř 6<ŔSł«™ťí'ĺ•Űf}…OWy˝ ¦ šUCtÇĄĹĂ(Ţhr1Ćš!L +Ĺ“ś\4*klvěNhfcĎę*…Ioűáääez“·ĘőáÁů+»±‰ňůLsŰll*Ĺ1g5@Ę⬅:7›×+7ď%}‰T\¨¤J[f}_Ě )ą iąjg­łv0ú'z÷¤Ľń¬˛ö(ÓÚĺÇĄ"JJ›‡Ź6N_w +ĘŐÂě4lRoş‚´ ÜÔl~úá7ożţÁ‡*W– !ÉEŘ ­kuO­Öš®ţň÷˙é—żuúé« "üg÷›GďˇB|ĂY«<Ś3&&ĺµĘ +°_kýĽ<»• hމ ’ gh!!´0ąęv2ÓĂÄ&͞ēyF)ÉéFkž9ď$€Ő™ôµEäćrĚíÇpŠg“Z&×-·¶QŢš»—Bč"Ş6ăb)Ęf°dŠŕĄJg’˛›WńŮsaĄÍććăÁńŰîţó@\ŽS:ÎĄŁ¤'Ą(Ŕ¦b‚ĹU­4ÔŠCRÎKZA2Š8gâ‘ĚĂţBÇĹXĂŔă„IpqŚIJ*JŚ ŕIC«ŽHن°VL)zi÷đÁéĂw˘U…Vµę;µÉCŁvŕ˛4@(Ř)•c´Ž`RWPÎÂĄ2—Đr-†§RzĺôôŮłĎ~f &F#ŚĄ˘˝4Ľ4wtřpŕ=O ˘J4|¨ę‰‰Lˇĺl<&f¬Věîäş{f}[«l(ůU:ŐP†f÷RůÔUŚÍ•őLóU†PZţ˛äŽú¨ dX%wiÎu1ě óh˛BČ­W áiČbfuťRk*&Ş$L„µŚAR[tĆ‚ěěCçÜq’(—‡‡2é8­.{bŞŮĚ–Vc¤A•ˇŁś ›L$?őRĎ"@EŮd·,-Ú(ť +Ũ@#}«_ ŽÄt +ĺmLČ…IÍft—}„?&\™ ,ąŃ(®ůăEiŃ„ä łLî¬ßŤZ0ĆB.ÁÚ 6'mčÁEWt~9čňaĄ/¸˘ îD(‘JPi=×Ҳ 1U‰“ivÍse!|})˛8{ –pINÍ@ ŚÓĘ’/qi>@«5!ÓS`Ş+B¦ë Qľ(3ď‰_şé X”V¸H‹éjw=[_‘ł­­ůc”#óF8\/€ŻJŮĺIezű¦źXđDśˇEW%8†SR™2%zˇNéo"É)ąö`«XĂQ¦ňPµ[Ä&˝ŕ#}Q>”“©ŠśnĆč”;Dř*cpŔ„ä 01ÂĐ3ŤZg˝ŘY%8UÍT —}qţÇ.CA^ž/ş±0:۵k‹>gT +Ń9JëٱZĘvÁE/ŽwîóVPoőĚňj±»ź*LÔ鉰„!ĄěěÎ:R\Ś bŚ|QjÉvűŁ BD|0ÎC¸ +雪A%PŚCĘŽ@s(m UŽ„Ě( Ě|ç SóŽP 6;ăą^˛ę”ś_öăWü._bşyűčî”M»¸?L#1!)磸Á$ožw 1RˇÄ čs 0R e”ps{ý±F2T ŁVHą<»N„ˇKúöŇU—ËK¸|řÂbřĆM˙ÜBŘéćU(>+¦JŔ-v©y|÷%!dť~2€$AU‚q) &E•eOBĎ ÍâjKˇ¬‹‹nôĎŻz—ý ‚Ą`{.ßpaŚĆČyoń„¨e~s9ĹÇV, ”Śň´OšýëÎČOozţěşóĘBşC2+dRÓMűäÁ Őn:´/.F—JdŞ•JŽTöěÎË/~˙_<¸ň'—®-řB1Ž—s˛QÔsŐ¤lžŢ±qňÔŹ óî'¹ìa1Π%#©¦ÓązľµÍĄęx2›ŕf­J‹FghNSEO†âd8JáLĘČ÷pvśđĎéąBJşă”;Š…âT2UĚqŐ˝qů¦; +»ŚĚnŕ/’Ť@h% „‰Đá;a(‚ VL×ěŢÂ!T +Ć0řŻ‚VV¬†#D\w„ť!0…äs&;lI¦Pµí<ě›7”pPĐóTaďí<Ó’$Ä\mtdV¦  SpXA¦ŚAyÁhŁl†=[ä*ŁPŚIç’:J)(Ąâ”Śbž`Ô*TN/ž%Haa1´ěŚ^˝á˝9…ˇ“Y°{(*TŽâéP„ †˘KN˙ܲߎéšV-çëµ’žß›Â¸,xŔ‚óÎČ’+Ă”`D¸ąĽtŐqé˛Ăä8µÎHĄp”g8ÝĚV­\C6ëPŇ‘„ő¬µäŽ_şîľ>ç[v"ľ Éů®¸<±âôá~„G™lśÉű"âŤĹŕő9O2UĆXóćRpÉťđ„X‚·TłNЦ/Ä/,َHrÖKČ’§ŕ$(N 9ZčJ)Ó™ I T*[Ş´‡fˇBHj0Ź'âz:[iŹŤr˙ňB`ÎŁ VÓĚó°J˛Y/­ďď륚+Š/° *ăśÎ*z:—ÉWňů˛˝łłţňíĎšŁíy72ç +Í9ü+%Á0R’,GbqMSňů /Đľ€+öÓt¶Őj-{űt÷äüxt¸^ę–4Ku=Ę( ĂłŐ~˝tş¨č©´&éJĘĘQIK2P˝€=NO ~˘XďTG«‚Y°«C\0c¤#D„ľ±ţÉ Ż/ˇ$řâĽ+Cç ˘RĘnôV'[»˘Ş‚8ühŚŇdz§A©ą„`•»ëR¦.¤ë´Zt‡©p‚Gic¤¤dĐB:†K(cĐJ•łIA8¦3u3ť”d5ĄŇFÓˢý~y}{…@™* Q6ŽË(Ą‡ăR0*D1§Íh" Â!_(PĄSÍ­uŠGíÇç«no|öů§‡ÇŰVÚÄXAđ>ŠI/ąâziéęĽßdBQŢëŤ%b CqFJ×R)YVŁq2B,4ϢĆrI’–xÁN™Ť`ś»±äżtuéĘu÷ü2˛0›ă(ćđĐW梗n†Ż-F\~Ęb|D(‚fе8ÎÇQVIĺ‘0?Mr9V*¸čŐyŹÓ‡bŤˇ€Ź¦CĹšei:ĚolvÝ|ˇ˘÷:໇Łçö'­V¶YĎYąĽl@fŻÜp8\H$ˇ$SdD2ÓđíIĄŃ¶US YÍXśČg˛JَoŽí/ĎŢż˝˙ęŮÁ§źÜ޶*óÎŔĽ ‰$X'I’S« ¸!bŁfz{Z´ôĽ‰ęÚŃzőĂ«SxýÝ÷Ď˙ÇůőżţŰßţú·ďwwš;ÉË.f‹ç’.™.ä3ťvv<,ű•´&ćsYVĽˇH(ڤąŐ®÷§ý­ý˝7_W®qĚFś WĽť`Rő¦#rőę GíL¦Ń¨—ĘąX‰ÄfĂȉj»Uż÷đQw˛’Ęf·Ź÷˛•2‚Óţ8ĹiyRÉi…žÔP4Îł<ĽňvľZmfŇF)#— ňx»uçdcÜ+·KÚájőőóăĎ_ßůţë'_ľ»÷üńŮęjĎÎe1‰ŕ0…Óh2ĹČ$NŠěQŁ„‚ţXĐ“»DÜ/c‹Ł2ss»tc·v4¶®mf_ľ5úř›Ż|őŤ«_}űą7_yh[éÂĆP‘Ĺńb’äÉ˝6÷ü¶ńŐËţĹ[ńćĎ>|é?ţŐű˙ďö»żţŚŔţý«üí·ľóĹű—W«iCbXQ3˛4IČTĽnkeěęż·iĽ~ZţŢŰ?űîKź|pçŁwŻüä›wţÓOŢţ˙á[˙üŰ~űĂ—ţö“‡żţţŁ×ďo•Ó2˱!._$<ˇh%]]-°ŻZďÝ®|ů~ëă·vţćĎîý÷ß}ů~ţqë·ßîź~öĆ?üřÉOżvöW_?ůĺG7řĺÓ;‡µZ)ă>Šh Ű6·—r›míÎvúOÖţňë׿űÖî‡oí˙ţ§_řŐ'Żţůű×˙ý—Nţďżűđ˙_?˙§_ů÷źĽđß~÷ĺ|p{wFăžKsóî@,#U––ĺ¶iiţ›#ţńaîŃaöµ[­^Űůä+g˝ł÷łď>úŻ÷ńßţčí?üäÝůýG?ýł—Ź·ŰĂńJ¦6 ájÚĘ”mĄ›eöšĽü‡Ă_|çîß|˙Ńľtň˝÷®üôÇ˙üŰŻýňăÇźĽňóďý—_}é·ß}î»/÷>xľ~e¨MžˇąąyßłĎĚ…Ýn ˛ńł%éîvćÉŤöűŹ·~ög/˙ÓŻŢ˙ŹőÖßýřó÷“7ţť{?˙ƵżřÂöű÷›7ÖRť,eʆÄAÇTĘŞu;ýŤAyPäĆüĆ˙ňŁĺďńôÇ߼ýŁo\˙ĺ÷üÝ_˝ő÷?{÷W?úŐ7Ďţţ‡ţË_żţ»>üîçWß»U|ů¬UÍë HŚ iAJÖKfͦ:âtśz°g>9ÎĽs»ńÝwö÷O~őńóżřčţ˙üOß˙ź˙ů/ľ÷îń÷ľtçĄçŹśÇ™d/LóѶŤŻWék#íŐłöGo~ňţÍź|íÎżüúk˙űżýâ~ňÖ_~pă+/í]^«™I†Ŕ‰&ZQŃ‹ÉdFăŮśŚ¬Tä««ĺç/ź”ř…ŁżýÁ+řé׾ţúá×_ZýÁ»űőÍ;ľsĺŃŐîńFłQkČF‰U‹‘ ‹MĹ*”Óé¬Dô2Ôń(sş’˝˝™ýâýţŹľză—?ůä+·ż÷îÉ/ďżysůŤłÎs{•­ĄT˝čAű"-U5«ĂPBŢLf“tA%VkĘŁăÖGoěţř«gżůţĂżůá«řŃ[˙ôËţúŁżřÖŤ?ţüÍůĹ»żůöŮÇŻ¶žś–GU ‹ÝD5ŮÂP”,…Áë)˛©!+väŢšňĆŤĆŰwşßzíňý_űăożúűżöŹż|ď_~˙ťźýŮăďĽ}ôţË;kĂ‚˘ĄpÎD¨TąÚ—xŢ”©í^¶źĹÇąřq—{´WzóöčɵĄőŻ<˙껏~öáăďľyôŤ7Ţľ=şľZX©Ş:‡Ň”€I ™éą†Rt<¨“ŽEîô2G«µaéÖv㥳ö[wĆď<·őÖý­“yÚO]Ř+ ču :Ž˘8`~FÎRbNL–$9]ÎЦZиÍVötĄzu”~űöŇGźßůőG·ţéŻßţé7ď}űÉć·^żq”}qË|rPݬÉ*Ä‘9=ŚÓ¶Ó‡Eă$ jd¸Şá[ ůd‰Ľźyý¬úőW˙đă7ţ×˙üź~őŢo?yýŰoܸ¶ŃěWs˝^T Łl$D#A…Ćł_µ¸~AŢl™g•ŰŐ®tľůĘÁwŢľöÎĂÍű‡íČŤ¸}žWĐăÍÂrąłoä‡<Ż $YĎW¶WnžlőňÔŐ±ńʵÁ×ßzţţÉĘ­ťĽv9Ű)é–ĆkjcL"Ŕ-„/Pj™TJvˇ«i" +M µ`HKŘčdÎÖ·.÷Żď´Ç•a-?(ç»yŰŇ‚„@Ť»#´#Äc\>Ž+>_8čó%"•fzĺŇΰ~u-˙üĺü/®ňţŐożvůG_»˙ŁŻŢűÁ;W>~cďŰ/mżwé溥óŃx$HqŞQP&§LWŽÇ¨R:×Ęgl6Աþ~}Ĺľ·•ýř­Łţ›oýçß~ýçß}üý/ÝyýŢĆ­Öj?›ÔU^+Ş™%”KŁśF9Ž×›•VZá +]µ…‚ĘTRâRŮîçőQžż¶Z|îhtşZk›lY—-YhEWťuSSsČ´2S–Lŕx$̢­kĹl¦’ÍÖ2VVem‘Ω|Ĺ’4*¦b1S”jµ$ôhB$Äte= ÓíÇĂ‚gĺb®¶2Ţ_éŻÖMe˝–şłÓŘ©Ë×W+ÇËĹíş¶ÓĐW+©•ŠUŃßü¬Ë +"*!ŐCXjj6řągfç˝Ń@XˇéŚ"Ô-9/!<żQ“o®eŢľ·ú…ç·^< CS(Ą¤*je«4ľ‡qYç<Á±|R’“'Ér˛^«–rFŢ–ó–¨+Ś˘đ˘šL°R’ć‰iWëÁĂt6UÝ5—1©ŔëeśŐQŚ“Ől aˇMDŃčv7ťv{ŐHŮ˝ ŐTŐÁźťu.„¨ ťK¨Fo‹©&FëÓł®ŮyO‡§ŮÉdVKYSŻÍ•^ţl«qy>]Ż^ÝZÚč”úĹT·`—m3Ś>;íp†&÷¶_ô OÍř¦˝$"Ŕo•š»ůŇ€Ąé¤€• ./c9Ůë—žÜ=}ĺÁÍ«{kí¦ĄJ‰ÇPÓ!Ň +’ćbTŕ2ËĹá­b˙F¶¸Ćr©ńxçęÍ”s:©čz!—k”ĘťŚ]ć5č'"1yn1>5žu“~ĚvÇuWT -|ŢX4†±9˛ŕEĚý1!‚AcÚ8kÇ1Áĺ†ĂY_„#…LŚL%ŘköäüŘ“?3ĺvč8žÂhC1›śŢE)AY¨´FµńSj&ťiŞ˛‰Ĺ©&Ł„şčF6Ă„™ŕ + ^ňß~vö3OĎĎ,Ćb YU­¤–E +‰c<-č’JÇŁ“é„ĚĐI)•”ó.:çÁx{^ş¦äÇRv\źÉůvâś%ŘÝtëŔ¨o#Ľ%DAI7›łřą…Đ\ĹS=ˇ°.dW‰d‹´Rn®śRVg6¦†ůÉMQ.ďA´(žJšÓ‡ś›őB'Ćé •l&ÄJ7„áC5ęÓ·çĂü|XZŚHQ&+Xm%ŰÍz*ß%Ą,<ŐjaĘŠ˛YBkŇz‹5šRn fş´šŁőZÉy1ÝŹ§Ľ #ÂdĂTÚ“ÂDĺ-NŻPJž3zq”Ěőeł–Ŕy’•$-ĂŞ…iWŔ@CΩrć‹óAęüBäéąŕBDŚpÖ¸ââśźóMÖäÇŘ4„ëh-W ŚŔ'·'ăb9D¦¤íF•gć&Ë_‡ťŃvăS[nÔôÄ䮩…±V\ťuî°€piZ«±v/@¦]ń¤3h­ #ă ł^Ş™ö±3f?Ěćg‚ŰĎrb†S˛ů1µ!W¶´Ö^néŠ\޲9GLB«:8!Ä|´śë•]«q¨V÷f˘ÉgśřłÔLnú“g.:Ú\ŇÚWĚö‘[uGŐsÓ!_Dt„ĎNů§h„+pé­r(dVݨ±U/¸E?‰sv8ˇžź†€ă¸8rú©(izť•rs‹A§'OH1|ň{–+*-„GLńQn}ći‡TŮŽ)e\ÉŻ]ľW]9 ‰9T«EĹ"eÔY«-g‡µŐëN\vŁRB) …aX,ÂkLž˛—KëűĎ}Ůęîź÷‘.Ěfr[Jý„JŻĆĄŞÓ“ŰŇMňÓ_Ç‚”f‹´5ň”ŮgMŇŞ Izq#@š¨\çłËÉĘcu#\VÉ/gÚű”VăŚv"Y#ÓCŁw5Ů>Vj;Bn™ÔŞőőűdŞëĂTÚl§ĹĺFXŞ–ŞQą*¶¬Ü=óŮK>ÂWJÝOXˇWjŇ’ÍV}xĘŘK“µÄŤ~XjÄ”.i¬şP3HĄ= m.D/„H?*3Zť2ÇŘp‡yo„çô®5ý¤ÇźjíĂ!ZŃş(rÜŔÔôZÓ ĄâMLŮŽpąD˛‘ęł1mĘE"|Ćăf<¨‘TšÔÚRÇUś"*Ő­%dF aŃOŘ!¦ęA¦€*“»l¦\ŘEg‚·&?Y.FX7"Ç“őh˛S\fHí(— Ń6´ö\,éÄŚ P‘jtnCŞîIĄËçĬŹĹä©Ő=X*Dĺ}XΛȀ8GŮĽ/‘šö1±$ĺV¤ěŠ·f|”#¦ˇÉ.a.‹f'€Hăź˝čźua Ţ¨˘2î¸ćÇ /˘D)sÁ…‚¬Aኹź_Łs«Tv5&ŐÎĎ'Ʀ·SĺŐ˝ëoän*óAßŇ*tÇd9÷ôŇäb›ęšZ;qe:Ę;F"ŮÍ/ßÉŻ=o-]‹M–ŤŐT‡Íop…­Úňeú¨şÍçÇn,ĺB5Ć^V§byź0&Ké i.hÓŞDŞ%Ćfű0Ó=±Ű‡Zu˨l®]y™°:HŞe o4ö^ężŇŢÉ\-ŽosF×*چGŹÜd*Äç ´¸ÂvŞ}šßÍŤî¦Ú‡!nrĎ)möq­“«PźDfHšÝîÚ­ŐÓ7HŁ}ÎąS­^N/ÝNµoˇÚ Ŕ˝Đ5l•J^Tň&¤é°°Uý =BgâbĹOeĄÂšZŮ óV€±‚|3†0&¨MiĂĎd˝H˛9ľ*f‡đ}g‚lX,ĹŐ’ě“éULk‚ůă˘hµůô€H6ý˘ÇŘŁdőrޱźŞ_^ I´±ÄX+djźĺ!Ó ¨qÁÇ{‰ŚZŢAÄĘEdŇ ˝EeFdzśĐ;N49Ů5·âË Ŕđ#RU(naĆ›_OC7‘ˇí‘VÝť AYŞA*Íď/äVbŕ#d&@Ř|věŽés>v˛r/šŮÔę{ ­· ç|ÔbX†ľÝ{jĘůŮ ž§¸‡Ě3Ö˛[õ +endstream endobj 35 0 obj <>stream +ö˘źu†* mR÷‘¶—Jč ´ca˘łÝÓLç!"ć0˝!–VB†Đ뤽ÄBZ=˝şQ\>áłýET!í^Ľ€-ĕދ)úĄNP¨3©¶RZsá)^:3K[…•ű+oW·^đsŕLaĽĽs×M§€D6&6Ůě†Ń»f ®ÓéľhŐőúFÂhŃvJ”4ştz 5öÔĘFz<fÉT+Óżš]ľW\>˝|Ę­ĹŞZŢčíżî»âşVŮľŘÚy®¶q|úWÜ EäÓ]kQ +ĆMëîľÜÜy%·úB˛}ĺJa6 şMŘÝó~Ö‘Q©Ág¶řüŽZ;0ÚAZŁ­v˛q(Vöčüfaő^}ç…ÉŞ>ůőâň-& …a‘©•^ +«Ry›Ě¬;±ÉÍnJvą·} ®¸ +u%dGf÷ť]Çłk1µăBRŮÖ‘š_™ŤHA¶äĹ3ľ"”ö”Ć •Ůđ’yŁĽ¶{ífLy¨KA„‹ mź ®ľGčÝă;ź˙ĂźdZ»üü"jörvăůúákĹ͇|qÓ‰ęfó2¨Ó|Hšrâ!ľŕcňP?v÷šRŢs„o< ăAĺio´kĘĎĎĆ’9äËűÖŇ­ĎN‡/:b\÷â¦7atλPËKĺ…–Ţv3v"µd÷o”×Ô·eúGaΞ@'—cRŮĎZŃdĹÍd{©±őÂŇŃąĺ¤= Śni|3şa±LçÖ˛ŁŰruŹJŹŐÚeąĽ~Î_ŚÉĘPŻŤ…ÂČÇ–"r›MŻ‚†¬ż´vňňhŰHh˝ęřA÷ŕ ±~†č}\©Ţ}ĺĂl{ß“0˝ÓŰ{áÎëßąóůŹ–Î^g ë&/ŘKŻĽű±”] +¦ÄćwRÝ›•ÍÇŁ+o冷PąÔZ»–nnM‡h7iˇĆPm]ë|ľľqżąq”6&VíΑłäŢíS:łBĄ´˝ëd˛±züčäńW@ĂlA-歹mľ°Šę˝¸Ü±EBëÇ·ŕß§<ś3¦ …µľcvޞ« @Ľ~Î*Ż77ď͇ř)¬•@ip7µ•Z}Ľ‘_ľv˙Él˙›§.ą€gryżĽńhăÖ—ŔkśQĺäą/)…¦»q1F: sŕMJő ¸ňpóćWG§ź¬Îĺă•Ń™Ş ™žZ^/ ®”Ç×Ëk·ôÎ>•jä:—ás`Bqł­ &Ć +m"–6ÓKg¨Z‹J%0;«{#żúBiű{| 7Űzn¸zňŠV_p¶X\7;W–öďß~{﹯4¶î'K«ÍŃimĺŚĎ ĚÖ~yí®Ů9É-ť,íż°yë-ŁąZ÷¶ň…5¨ŰZ yř „Ö—J»DŞËŮíćĆ Ňęúčô$k”¶)PěĚJyăůîŃkP“bq#Ů:ě>ś}ŢZľ'™öź]Ę Ž,“i#z·Fp`zëÎ.s^ô’1ˇČÚ}Ęj♞ŰâJ—•ÚžVŰPFÔ˛í].ÝĹ“%µ˛ZظctöÍÖžÝ=¶›űAÚ=TŞ;Ęd–Çrm[k]aK{\~#Ý?‹«Ž¸\\©¬ßĺ +ëba Qzekýäe,YC¤ŇŇĺçN_úĆÚíwš{ŹsŁŰR~ z÷äńÍ—żăÂŚ›K–Ö+k÷Ęë÷Kë· kwLáěţ;K›·"”…J…ÂęíöŢ“ćÎăâęóŐí'Xj00Ąć# ąĽ)UwřňfÂś 8Ĺ7 2ĐY¨Úžr!˝Ř”› ŇE\ď3ć@´‡Îřôtz +Q;±†ČM'yĘ^;y#UŮp'´ ›…Jđ“i îP´¶\޶;ÇĐˤRmśYŤµ0cđV7Ű=Y>|2>y­´rC*­Đ©ĂęĆ]GL r6›ŘťłňęĂôŕ†Ý?Ó›{¬ŮM·/C…ŵTďLë]ˇˇ}´V¦uÜ=xE,Ż…řLqtÝn´Öo\ľůZ˙ŕ±R^ăŚÖ`ýfkăˇŐíĆöŢíw¶o}axĺµŢŃ+ąŃuŢ*ßxyďúëÚň’vBo3™!Ô@ŞsĘ—vĐdŰ®mś>~?YY…ďe4„ň®T?Ě­ÜÝĽű~˙ŕ‰VÚÜ:{­uůAÂj)­=ş´‹Z+\iOo]ËŹîÖ€Ň*§ŢkoŢźÜíČćcÉv\ďbf‘kŮöqiétíŕn{ëNLëá“m©—=Đ’\”¶µűp"›|ĆhlÚýc˝u97Ľš¬ď‰üX=¨Ň=eăF+Ő9˛7íáťŇĆ‹éÁ->· +t|˙ííŔ~€«É»ÍýÜŕzޱ'F@° ąÔß˝?Ř˝ŻW@í—Ůě˛ZZ˶wv®˝ľrđČ“Đy{©˝uŻwô˛ÔŘźÜđžQćŇţŤ×2µU?"Oîxž¤»‡jqUĚŻcÖx1aĎ„d&Ő +’fmăîęí/6ŻĽ®/]3ű§F÷·Vg*›ę¶WojĂź#”áMĐ`õ®łĎ/˘ľ„N齕ąŕa\IęCBŠĹ=§`ú´ŁB1Ää˝X*!W& ČÇ%mÇä +a­¶-ĆXŞ 4J-J©•uł˝G[=Hp¤ŢJ5čüĘyG J«8şYÝeră¨\^&—ʵĺk¬ŮÂĺbeíf{ď1Ś˙ŕ赥ăĎ—6ž#Ň˝ k×ÖoĹ%@›Ëtq4gÉjlŰí˄ьqv2×Ó‹ťl{]ŻoBwc©6ť*Űőu)7 Rx˛/ńł¦Ź5Řü˛RÝMÖöôÚ¶Z(ť7‡÷ľ¸răą~9YżlŞdú¬ŢXŢľ +ËąńÝôđžÖ>5—ďłĹ=¨˘…¨d–wŻż’éě>íG…Ę$§/]Sę—•ňfŞĽVííżń…ĽţM'‘öŇ9$ŮĘ{Í˝'+w>¨ě>¸ş{ňčÍ~ëî/bfÂ^E¬uÔZ+¬>ßżúžŐ?ó†ZZ‘‹+ź®î[XŤ +eRď N§/Ż]yÁ¨­÷6nÉů1®·IŁçŁs‹¨Îä™_şĆ§—8xĆ ­ŃXąŮÝ~ Ő.Ń`r5ŰÚŐË+TfJ;zďŞŃ?M6ÁC}áÇRFc2欟rDETmRů­dëz˛yŚŞő(—+ŤŽ–ź7™ňŃDE’-Łs5UÝŃËĽŮ] q1:iT7"La>(A]ôr -̬ƕ|˙•ęĄ;64fą˘Š+nĚ%7bRć0YÝŹ°%fĘę@ßy0‚<Ś<žęQ™qH¬zéL”ĎĐFĂ™PTĂhď'ë;Jix,3ľ‡]–Tk›|iŐ‰iQ âRÓ[ {|f¬–·ÁôCdŞ88),źéŤ.ż‚Yť€Ke˝~\>ÄĺŁ|ž2»ŚŮ5«éÖ¶\ZY@ä„SKĂ0§“J–ł»eŇýSXLk!j 0’¶— łç@xʨh­íÂčZ{÷quóÁ""yă‚`Ôkk×'ą•¬';…áIi|Rť#áR•µ‡ Ő}tA˛˛9:| G.®Á?^ňSŔHq17$}„.ć™ĆzĄ·łuĺˇYYń’i>·)vůĚ*Ä Qµ­ä×Z·—źóSi?ť—jGćňsJó„Ë­ň…ŤŇ„Ŕ>Ú{kďBü÷RŮ\ĎtĎ–^­Żß)ôŹíĆ&¤×Ţý¨1ľáç*jóĐXš,«ž^Ój»&ן~đçżąöň×@±Ýh’JݍµŁôŇ Łu ĺG˘ŐÝ<|açĆŰZpŮ\Oč}>»FË1ąf‹zaąµq=®T‚|-Ŕ–Čä´ž¬eş{ÝÝű!Ú• +›ę(…5‡ÎúmD¬.„ći>ŐéoŢG…ĘůE|ĆÇ­•GwÍć1Dż[If—_~űŰ—Ď^|v6rÎąČbLj§*{fe|ó|~RŚj0řLUę5 ÉÍ„ŢM5®$«ÉÚ^Čă0ď”ÝĂSťT ‹Tď€n7w±ůŃĹ…Ę5PDkčÍݸ\ 1Ů0—M(%«sHč )©¸¦µ2Ă[ŐíÇ«×Ţ*¬Ü qY\«*ĺ•ĹŔ­0›G•fX¨Ć•–jCÍu(Łé@µWt †3‘¦‚d řWëđć«GiłTLŮ&żŽÉĄtsŻô’ŹJÇ…-&× ëőÚ†\^őM¶Ţłł LG„ǵš’[Şô÷ÄLąŕebÉ0_A~iatŢjY­íöÖíĆÖ]˝ą=q(ĄĆ¦—1¤ ÂçŐĘVcăąţáTnŰŤegü‚V©ĺ57‘ş g|´1âb“Ďo •ÝŸěÇőęř "řQ„ͨ4D]»qď]·Zg }T^­íFdÄ39'¬űâr¦Ľ¶qúJeĺjŚK|Aě-Ť Lmű™śŹ *W§™úh#cwĹňvşwÚŘ~¨·®¸đĚBPTÓKµńit˛‘PŤ0— ¬A0L–7KË×µŇz4‡7Kűź®ä,‡Ř ä¬úÖsíݢ|ÔĎK"L!NçC˛ŐŁJÍ1V_°;fq€Lî&ă{¤·N˝hjŃOĎ:ţ¨ŚsvBk#j+,TbBY-Żrib˛żŇ¸0ľ qŚË­¸Ő‡¨“ĺÜ)SČŤţőđrĂ;@ÇŐۄٝöIŐĂ|>Čçńt?$ÜŕłJUŻmĐ"r ¤Ż°|U®n Ą5ˇĽŞ56™ü(Čĺ ţóĹ5g š¨MC:=B“Ý Wr“6thˇ·Ż×·|L&ľOĺ˘| Ô>ČMVŚçsăúć=nŔ•—ĎŇÝ+€|f¤U¶ ž=¸I$kLŞ9YŽŹĘPÖ•]†č§­oGXKÉ,IŮţBś ŕ3/¸©]€˘•ĘŰPÄčTo¸ß]żÂ…¨DkF•:¸cö‰dÓ­˘•W„lOÉĂa}lĹTžÎµŹ„üh6Äřńd„Î8c*5ôjH¬-D$ čóř1$ĺsó10ŔÎ4ÖÔÖŇŮÍsnf>˘ jk.ČąbŠ3*‡)čB0{Ze›‘LVŚĘ +"¤”ć#Ť0_¦­%µ´ÎçV@Ě}XŇŞo¤;‡0›¤=DŤĄąx*D怋k$,R.—Fg®đB`ˇ_š¬÷•–7o4ú»¸`SZY/Ź2ÝËŐŤ›™ŢŃBD…´nńB¬ś›KĚúxTm$k»…á5!3ôˇÚ¬— ŃY­şÍg–ź™ _XŚ{ă +0<řܚݻ)TŻe%?‘Ää\B.FřÜD…’­ PuÓ(?<ŮôÄE˝ş©7ŔL“µ},Őń±9'n͇ůkűIÜ-;ĽQßňë0ŃRaÓx˛śďî—ŻËG›~Ö_9}mçÎ{Őí‡LqĂ“HBŐZ‡6Rě%˛ ]RamířĄÚĘ©\Ő'`Vuˇ:pHBëŔű§{W‹ŹZp1›ooÉą~\,…ą"U"Ůâěř˛ \Ý8"Up˝CÁÔd†:3—‚”•mí VďÜ|ŕŮ9ß\†î§ A±ęcó0­qĘÔł ´™ K&·Ć—vęüđň°ä€ŘÓŮŃ+ËTôš#‘ŠđUĄt™ĎmŔ´N‡xč5,@,]đPŽX2ČU±ÔĐlç{׬ćţy'ĄŇ…ŢÔö|sDe'’—¤ěqLmEĺŞ#H7†'™Ć¶Ó= ¨"ŰUgˇÖÔühÎO\tĆ˙uýçčä+ç=„=›lôŁ•ÖôŇşŐŞk·6őöˇ_‹OVć”gźŔä0iĐĆ’ZŮ­­Ý+®łÖ’—0¦ý4*×x¨5PNČŕ|a ¤t @e#˛OAm;c˛TŘČŤneG×ó+w“­S?_…h#ç–ĘŁëba5 5l P­Ë¤ÇđňÉîr”a•†{7^‹‰ĺ™°1<®4ŁbE)蝹cđ™i¦óśµŚ©Lms™5Čé}ôłsq„ť,›†(enřFL“ÉfT(A>ť ^DnŻťĄŞ«NTaí%ł}¬”·X{ ˙<ŕź™Ť\p&HĄ2µ‹q­şYßľüđ;íý—„ÜřÂb,eKý)7„Ę©tD%@€4 H†JO{ÉÉ‚®V';ŹĐąiżS1ŁźYş.7Éj¶ —׼¤Ęd +´=NµĎÔÄ™4«—–ö_ŠĹŢÁ2ăŢĹRÝęęŤLg?Ćg•L/»t®Íf7eµIťLs·6ş糨XÔ«»źÉň›…ŘXŰ%%ÄiÍEHNt>TĚŻ'¤&c,8bšZ\§ôÖB÷ăVT¬±ąŤdăĐj_‰‰ĐŇ›)Ź®âz+@gŁb}>–‚o䎫P!(ź˝¸Ł”’–pfS)®EÄŇl›őâŚRŤ¶crӜƧ—‰d«Âö$Ě‹nň˘ cŤNB®O{ • ˛Ĺ¸<Ůw,Hg' ż»Â’ÝÔKkPZ˙Çd­?b˘x^Ć×]ayÖĎN9«¶ÖX˝¦˛OĎÄá ó~đ¬R”Ę8CüE'öÔtŔ˝1-ĚćÎMÖçD˝0•šqµ Áôrß\„Ç’MĄ%źLyc1ˇĎEÔ(_uĹeg”Ťqv¶s4ţüň €Đ>ż1@ščT“HÖ1s€Úc2Yďzaô`˛ß*rfŤµš Z}i:‘ľ$sXlAúđbJ„5bR\eĺŽVÝY2Ó~$Hë”Őgě~±AüIµśíäWoă™ĺXöâV„+%’íˇAIůˇXŢ4Yr!Ä"BMŹcbu˛ç X’J{RĺOŤb\~Ú<5ëó&T\ë.„dgDE„2köpµ&¦»‚Őđ&´„ZĽ‰ËUÜXR*űF댴WalçĂě|î>°š»,›wâ/™Ť‰˝şr!&c6ö +ŁëĹĄL{Kµť„ ,!Ú}»şÁ¦šÓ^Ü“ĂR)ĹĺÚŚź;·€NąpÁlgŰ»î¸4;YĆJĹ´vu|»¶ö€Đű3>6ĆfG{kËW=*ŕ›bnM,¬3ö`r5‚—äÓ}­şîĄ¬g]ř"˘ą +ş§v˘„R)>YjoÜ`3E4ő¬›ńe‘ńR±¸˝¦ă‚ŢL×.C=Ďúą§g"ç/žń‡ŇşŕÂý.ćF©Ö!T/"×ÂLa1ŞN‡>óÔZ 'QˇÂ6•ćŠL{c꼏ťv‘_IĆÓÎřg¦<ĎLGct!Jç<ęEŐi/ĢśIoLT]*őíüŇQ~p\X>•J«@‰Q®@¦Úöđ°ŰÇŤ­‹+÷Íţu ŕ„ťŠKY?ť˘¬PÚÇěM6éÜ(öŻ ™ŃbŚÓˇ×Ă\:D[ŔĘfĚnwçńňÉ»ŕ)3~Ęá09NšĐZta=$ŐR­Óěđv\iđT±˝­ć.,ĺ@uG<  A×3ť3«{#*ÔaĚ=đ[ť0–!Ł-ÄUOÂđ‘éde»¶ůŔq€HăJ-"”aľ<¸˝+řä†ĘěŚăóë…ĄÓîţ‹©5ĺˇg Đ‹”î»ă´U"Ő“+GÝ˝×Z;/ĆŐĆl’L7·ÓÍ­ ®)0ő“kWޤÚqD¨Őśw"“ýSRíi7qÁ‰AŹ'gדőł¸XőcÚ´óÄB.8ŁŚ/!Đ “›ŇFÄr3@dpµáĹ řSôĘÎG'¤¸Z:?Ă…R˛°žŞí‰Ĺ ?nűâr8ˇPJžV˛„€ 9«Ľˇ—×ôÚ.¦÷\ůŮE|ÎE&—TÓn 4-ÂäŁĎÚËA"}ŃE~îR(!ä3ŤÍ(cN9OÍ"sQ=žZ[7­ÁuÎě8¤žnç{‡˙d*xÁEM‡Ő_Çě 1·íňĎLiĄŇß|v&ú'ç˝đ„Pç ëľ„]¤Ś(—ĄŤ&g6h˝Ś+™©ą'KiĄä̲VݢÍv”ËŔ¤lÁ‹ ę:ăľR­ź%ô6—]%¬´?*C ±Ü“Óiö…Âj¨^ڏÖLČUµ´šHu¦ŁĘt€‹0Y)·LéÍdqĂî_Źkť¨Ňđ2ąąě‚q*Aľ8äńd—4ÇqąfŠŔĆ‹±ä%đ‰˘, ‹9áFAŐS¬9"´>ˇwˇs"JŚ+řôLX‹µÚˇíHpnÜš sS®”*ä@xĂl&–ě"ZŽ_*oĎ„ůgâó!¦ŰO¦ClÓ»1Ą†ži&+;¤Ń)c1±ąl>¦]ô±ÎĘ=pç •›r “Ł +˛NDG”6“^ź ÉŽ +ͦ,\ĚĎy“ŐŞ1ů4–lA ‚¦‡ň“H‹1yÚG†ą2mŤŚöU`g\9·_ôŃťĺSł¸ěGdGwĹ• ¦‡0 sÎh eë­µ'o~“”˛sn.(@3&´a€ĚúQÍ üow1ą´äܱ䜟LŠsůa,x1g‰r$ŮA“˝S˝äÂg\‰N`ňĎNGf|źť\‘%—ws|Ń/}ćB-Á—ąTo>ŔJécŹăbÓźÄ.č¦8kăJEÎ-#\f˛ř ®ş"“ś"R´ÖäÓCĄ°Â"Y%´˘W'Űçůč8W¤ÁµzLČD9;ˇ”p­AZ ™ Ó9\kóůŐĘúýÚöcˇ´íBUxL˘KMBn{¨HÓdEŻâ +m´ĹĚh‚|P({™B "Uń2•]ĎrÉUôÓ‹ú€EˇffüĽ7‘¦ÍaL(ž› Î:L..„%Dl¨âlHťŹ$tÓş"$†Ą1µ‹jýyT˙¬ýś#>bPˇčGŐ0¦rV ‡Î®˘©%/›ź s@\AĘ óă&—«ŐĄ¸Ő\^)n@IBŽ33>ü’—đŕéX—ň•ŃÂąă’›tEĄĹ°pÉoˇj;čž^ÂwFĄ©Ed!ÄŚ™4äAaą0w)ěEtWL™vÓççđ_gLÇĄ­µ ýÜBlÚCL{i ˛8_ôc–#¬zbŠžë—şűđ—<˘,$¸†Ńܸ˝€ęϸ‰)7u•jRnLhŤ ™rÄ@]É…ˇt0/­~(wŁB5.”#l~6$<5=ďÄś±$FÉ:ăÂ$đ$D›TŤđED*Ăc>®Lą‰Ů â…$˘‚$ČQ “뀑dŞ %&”„ü“F…˛ź˛AˇË@( ]ôÎ0—K¸Z‡bó'´(5YŤSÍŹ˘ˇ)f˝4|Á›Ł CŞЍPO„żĆů¤6ŐdýÍmAYňé„…Één> ů}>ĚűHKĚo°ŮőP‚$ľWźuŁŽx2•!h/†8čŁĹhj1Üž™ SNPVÎ-E¸č\@Äő›Ý˘íU.^Yżč%@ťŔéć#┏ŚK-,Ůĺ +kéţäd§QÄTířÎŰ­Ő3aúŮRDi†ĄšźÎ’öĐUŁ´)ĺGÓ>p˛%zTpUĘŢŕó»€F“­uŹ}qvÄ<¬ĚÇ ©|ą4şEjŤggüá„@µą;ëgˇŢ.ş©g –c2ë üqť…QŤPÖBX†ĚeVôÚţ¬—Y Šđ$lJëC1{˘IŔ­™‹'ë^4ů§ü3^Ö‡™¸Ň ´&*”Ü‘äůyâ’›Ź 57fÄ•NX¨Ă#(TçâI(•ÉéhˇŚ%›`ý¨Ř`¬• Sô z4bBŇ»FýPČoúĽ M/Ć-/–ťö ˇqŐGa6ů´Ţč¸ ŞN,n‚5x1ËźâĂçü“ @}$tT-Óé%ły¨Tvm„c3(—6ĘălgśÝĎ@1Čd=FŰ>T(Ĺ…\ ŃbLĘŹ%ý8rJŇ(ła3‚Ů%¤r„NŁlL‚žł>˝aAuÄDDČA_0V?>Ůˬä‹´Ůőŕäq|đ—ąü:¦bR <ÂU!‚0:«Ą&š\‚f ĐiÂčĚD¤ó¬ PHʱ>uÉĆCŇĎöÎrýk>Ňv!ŠRX…¦đ  +PÁ´ź™ rP3…áY}çiőCLÎh%:úBLžŹ( nS.*ĆdŁ9÷i®ślĹW!€/\ô1S΄IF¨Ě……ĐÄC?SŠM&3sY µ)Í/śöP Ą“şa¦ ¸ÚŤłŮ©…č%ćŠ(OĎ„A$Ł &Ąˇ¸Ó;|}çţ·’Ą˝§gâÎ ŕ ‰S‹ °ă‹ÎÉeö¶Ş^6›¨\ťö2ĄŢ ©u\ńÔĄ€8Ő]PJżµ~çĆ+ć€T…§ÝćŞBn+ˇ´Á8&»u ©™öávBšZ‚^p˘“s¨\Ś“­=I‚ł©25š «ŔŐ‹ +¸Đş`Ż1>ś4îDő0—SĘ Ţ?ăĄ<&Ť0ˇ|“u\)»;ąú7łB—«aŇŚĆ™1Îö“ßnÔň¦{QÝ•p±„rŮĹ095ďY`ÎOč=«}Š‹QiĆKÇé4Ćez1Ŕ„H‹Đ;bi‡É­ůHsf˛É2ôNމHˇŕŁsŔ9„µRI[}ЮŸśĐry‹Ď­…ů4¤Ń„Ň…ěć 3s~W›jĺ *VB\ŐZBŇg.Ýa—J ~jĆ…@‡Ďĺת—9’2›¦—Dz}x2ÖFăňäǸúć˝öĺÇҤꪵĺëDr s &:D#T>ĘäĂ4KB*É&PÜŚ—Šó@!Qů ťsĆ“ź˝ŕ=ż?çH\đ2ÓŢĐWť0ÂlY*l {>ŔÓ©a…”jş˘ňśŹ~ú’ç™i?”MČA‰BÇ)µ˝ĆŢ“ĚčŽŃľB[ăYżüŮ‹ao|ZĎĚDÝü…µ‡fý€Ö{a¶.Wßâ̰™3a#éŤěřÎöÝ÷Nľ·~üx!¦ř0°Ź\ÎŁJĂť0€™i˝'ۨÚqůąxÉ/΂™bé_I:™ŹÉ>:íú4é»ĐÉ)âIbf”-DجQ}„)ÝLsŠp>ŞFŘÜl4 +Q…(× MŔˇa“6(†°Ť˛C\%Ő<Ň[‡0ĹĐn>TqFyg|ňk…I:‘T‚°ĐÇŐ6řď3‹± ÎX„2¸îNh!¶’Ďn&k':7ăƧć˘Á‰o“ť&ŘLH,ĹÔ¦÷Ą±—¦}ŞVIkÉę^ŃÚÇ©îŁ@Ů řS±´ FćÁM<µ”j_3Ú×@.Î-D§=d€°Ľ‰Éö…Ŕ]^"OöT˘.¨ýS—ÓNĤg=oňŰb1Ě•Ľ„ ,GęužDĄ‚ZŮçr›ědăËjTČ@Žvă)"YSňŁ…ŔĚŘ#<Ő†IqÇősŢźĐŕţÎ˙ąówLĆ•*ÖyÁË^đŇ\úÓó1 7˘‡Dą2Ş´cB ć墿ŕČÎłó±ąÉfĘĘ„Ň?Ýć,J—(}°UÉ&‘ꂳC8}Ú‘8ďâ|d KĽŐć­Ö Ł¦éźś٦ÜL€É˘Éz"Ůf­eĐ"đk`9&˝ĘšK„\Žá©9/éÂŇPŰ@Ô3!ń‚ŹÇ|D&Ô†TŘË» {äc+s1<“k€M-Ç“˝Ü‚‰_†jô`&ô¤]x€ßĹŔ[Ifs1 ú Ŕ¤CAĘŃY@eTfxB¶V㸵÷†5ş  +đ&.$ ĚkĂa''×ú®" ĐoX‚@ ę$ŇA*$‹Xr™07Ř̆źĘ^ňBD ÁőĘž\ŘI${N =ŹHM,¨P8ďĆ!řëŐmµv襋 q "*âSܤS-/"ú‰žlTF7ŰŰŹd}QćbŞTPµ5U\ LžËm Ą}<µěkĎ.DfĽ¸7ˇČL®ŕE-hŰ¨Ü r€=\,ÎzÉaBŘ/,ŞŤËąëÁŕ8Yw\F„‚‘ť13,©µ¬Î‰Ý;ł»g^2  \4ăť”ÓůEdĆĎѰdÍ›Đf}äůůŘ%'…íÇROM§8EBnjőË HňYgb +‚aDtÇ…ąÉ%=ÔE7ůô,âŠ%šT…+˘†LL\ů0ů 1 -Ć P?>·ßô™4He•â¶TşL¤ú®|{Îżäޤíđ1O] .„dĄ°ÖŢąŁŐ×ýXŇä§s0DĆXk†Oh=­q”íßvă?U +‚TRůą¨rÁK]đAÂJ•· [ĄŐ‡ÉÖŮLHžrAŽ ť1 ÜÍMŘ>¶ęC¨R&łˇ ÚgĘMCYú‰ ©ŹŐ`*§ý,¸ĎE/9÷Żzőé˝ T€©a:Cëm13Cq"&änµ¸CjĐŞ¦+g2 T É5®°YX,”ö?\Ř%ęŽ +„T笕_Aµ.|\Bm¶çĎúaTY8*!·‚ëm8’ ]đ“y"ŮŽryšráiDní3˝y%ˇőýTŇq„±qµ,¤;zc;‘ę$ëű™ÁµĚđV\í‚äB§ČąU­v˘*QHF´‰2ăKxPýŽŃ>­ď<Áí1ŔÄ­p *q!l.×ÇŚĺ0× P“3$nTżč&ŕ»8B|LáZ €ŤH-ä#B á*ł>îÜ"˛ä˝Hj>Ţ—„ĆËH¨Í8_Ň~z6ň™ón”ťśäqĹ5'˘ŁÉ¶RÚ4ęű ą:ëK8#Ś`µE{řŮ‹A·ł9d)HćA{§\‰[ý§ŚádŰe©íB칀B(=HŮ OĎDĘĂŤçŔţćĂÉ‹.ęŮ٨?¦ ¬fŇ^*Őúf˙VeíRÜÁ¤:´‘¬gűWŔ7A0/€KŞ}Â\/ P AÜRłC˝¸˘˙˙ě˝×o,i–'öŢP?cŞë2I¦÷ŢűŚôŢűLfŇŰK^^ĂëëŢňŐUÝŐ]Ón{¦5ŘťÁěě.ZŇ‹$HÂB€€ Wý1Ň öްD řU‚ś̌üÎůÎů™ żŃcČmËÁ‘#dČk=%„Ő»jóĚ^©­Cp4Ä+}€Ś/Bęŕ€rnÓ‡đý&Ş…p#%˝ß_hźÝGV÷‘ŕŽÁËřCža„Ü\,,Á› îPp€U›1Öć Óňěéŕô‹ůőďÄÚÁVĆ9FeĹnłF#AŰa\®ŃÇfăT)®¶\ É{§i¬ëô’B0M«ĘeëSď>µÉ¸3°ojeŐ:ŕ¶řâžXX°f›µš‚Ó1ŰĄůŐüň»Éĺ·Ůá˘öâ\…±@ç,­Nš#©´ďíěYßĎÝb[νĽ°Ľűu÷±ědOŚúˇ\Zź˛N·ązęť'ˇ +đSy:;sŠŐ4›ßŠ3¨ŕş­=«y Ö3J;N—˘$gM+Ă*ďD1“kFmO*ďÖ ĹŐ6S€i*Éě'(ŰŰîG¨ŘPůŁ+Ł~Ć6LšĐ¶őńc-?ýłqH”V]ZýKą~ĆÚă8Tf c@Á'™\‚)J…)ż˘ô^ň®Ś€ňĎP€uŇE´ Ę•®w0ĽÓČŔkĄŮ łşĂ}JmcrĹiîtWĎR” eó)ąA:“WöcŮWNpeÖěČÉH9ÂSAŰ´ą@ĹNŚ)ĂGřŇRFoáfQq©„ŰCgřĽ}ú;CZh(€ô¤P±ęGŐŮ;©v†›ă_Ťx÷®ÔP©äm1ďL€O!Ť ĺ8gý^)DX`ó)łçôĽ_ľĄÝćöóęü‘Pěaf ÓÇ.¤Ę&—Ł&Ť®JŢíV5B+Š;ĚÂDďňnÔ§Ů;|«Ôw@âzp5JąryÁş“8˛­äÝúUŮŃ[§|n–ŕr`Q1/ĺj©'¸m{LnŢŢ˙Úě<†ŮâJ3FBaŠÍ8_HŠ%˝µ?9ű˛ři¶ľäŤ:)•AŢW/ě*ÎVŔć…emń2ŰŢŹŕF ł® +Ĺ ÝJ:Ó(WfŮJK´Ń4«‹¤P`Ý9e/Äâ^wďKRďŕr#č Č`PMJËűő1±N[sÚŢ–Š;P$÷DUŮěÔ»?“Íč˝üôivň˛0y˛äa„{f€>Ŕ|QV/!ÖŇ ‡ť©V=‚˛§ő.€çzŚ˘V뇫‚ŕńŔŠ-"L!Fx4«¤Ţ "¦?©Ĺ(¨:gő˝ßÝĐę &·efoĄÜ”±z©'ť|ëU››¤Š!ď׺ë¸5ˇ­™Ő8±G-*Áę…‰üFĘŚ€0ŢŤ7fç$c´AyŇÎug•©÷§ČÍÁă„Pŕv‚/%˝?hPĆÔĚ/Š•3ľ°ÇA„­–v¬ćéđô[gř+.lÁźŃa!,ą&m+vďYyöNm즼? ˇ>Á@_e{qˇ¸…J1¶ W˝_Ş"ôúýµăˇ3|Ő»Ô(UŁB…°újă°‡ëIëQ2%ňŇŔÔ:Ľť´†ŮîăŚ1đ!Zšş¶g´ÎÁj•…\<É)nĎ®ď°îËOdΗçĺÔ€,ŹŇV×ĚĆNďŕŐüň«l÷8H "┣ćgůî‰wS޵»}ćÝŁ^ŮÝLKůâQÜd˛蚸XĺËGŮÁËҶ·mvă´ű0ÂÄ©, şĺlÄŵŽ ‹źz· ˛ĹBďěć–9€ç€&ÖŇ:, ”VŮQ‹sřhĆÄůR\lm‘Ą-,OÓâä…Ű9J±ąăš­áńç;Ď~ťë_Â2ů˛ĐO¨ĘĹetý‹u&‡ďţľqř ĺÎ@«o%.;.öŻ g˙óźD>Ţ$2r»sń«ţŮ7jy óĆ<0Ůnφ‰HÂ({sňţĚÖWG@W‹Ő_IJ TćzFuÉÚ­(ˇ„`Ĺń&´ĺüncű5[ś(ËŞŻ&§_!j7»ł*@Ę Ű„â’˛şŢ®ĐB‰ĚŽËłµĺ—fű*Ő@eř˘ě­ÚJ.ĎBLi˧ĄŽZ>Íő_ÉĺĂÍ´&lď—"G×V÷ +1:Ę`­6c´łç|qáKfóÜ<ăň‹i­Ĺ…$[€Çz\Ś1E&?w†O‡gżl|)ÖĂ $Pˇ´Nµ|19ŕݬ^NK ­~˛şţ}mů!Ę—)§źë_Ř˝+©´“–*[¸ą…[\vhTvRśžÔ ŤžÓ9·»—)ąëť‡opŔlŁJ-%U’b ,®µ)­ĺY!TOńeÉűĂŢ€Q\.q΢sňŤÖ:r+Úy9)Ś«ý˝ŁČ`ć+Y˝ëÚöçBqQ?QŮęrqńmµü¨ţQŢĘXbiÔ˛îíëí]6Ş+ŕtĐ `Ö’JZéŃÖ´6;8ů6-ÔîmŕaÔ„r"í!”ýĂ $Ü8_ˇlČŢ)Ą·ˇ8󣧫çżoě|¦5ĎüXá˙g2†˙Oŕ˙«qČmwܶqČmwܶqČmwܶqČmwܶqČmwܶqČmwܶqČmwܶqČmwܶqČmwܶqČmwܶqČmwܶqČmwܶqČmwܶqČmwܶqČmwܶqČmwܶqČmwܶqČmwܶqČmwܶqČmwܶqČmwܶqČmwܶqČmwܶqČmwܶqČmwܶqČmĂ˙ĺźÉČűţ™Ś˙,Đ÷§Účtôă5­˙( gńx•ŻpĽ\,÷áÉĘd´;‹řâŢkYďËŹ”ö!ľôÍÍË˙(A’8–ĚP(R–¦IŇé$‘¦HĄh2řöţź_EŇIOgđLOŁßîÍ«Ľ'1š¦(#Ě÷OoŁiŽJ’˙oŻúż}âîŇĽŕUŰ?ţQăÇ?Ú˙ńŹJ?ţí G|͆ <űńŹŽţŻH‘›Horj,wgĚü^™AŽţ)Ăđ^Hů㥴Ůůr2+›ŠŻ iďřnRě&qóLŚFţĎŔ(Ě×óˇi㤠ďŰ˙iďđ~řOďú§˙Sľ Ě!o&ŤůnŽ3 ÜLÓ+ ĆGdh… +Éţ(#×b´“ŕr„Ö Ť©62R=%4pcHŮc\kŁBĺO[‚Ëůk)«›JQĆŤŇŢ&¨TĹäZŠq˝Î;=µ<Š3Ú™ö3‡lncrţçOĐq\Ă• +ëÄŇ’+­čÜËör9Df•âs{XáÝąZŢ5'„5DÄ&éLQµť`‹"‹*MÂěSV_­í¦Ô¦/­xű9KU|3Ó\IpÇfă/Ήl/Â8i©śó¸Q R¦×µĆѹȎ^đŐ´ÚŚň…ăęµ}gxĄwNµĆQ¶ű+®Płf\ÂčdÔF‚+p#–“´…đ.©Uq­îGdř,Tj„é\„ÎǸbFkÁÄ0µA›]Lm"rËi=ŇkÇiĄ˘s[#€™1Ć• 3ŢFH3‚¬Ůçť1ˇ¶Ł„BŤ$“ăĚn®}źć +´Ţ "úz”‹NśÎ'č|ś)’ć°FŢĎhÝMÔáv‚)¦ů +ÂW(˝‡JĐ…ŚÔŚRą-T…Ś%ŘRŚÎĹ(—ł‚=N •SňcŮQîa”ŰLɔڰ9\,C"BŐmoĆŮű!|3-… ŢĄň©… +µ$[ +eLX\oÇ™Üfś‹âVŃ7R’)âj7#µI­ĎdÇlvP]XŤeWS|…µ'reÉĺFaÜ §á# +¨ÔÂÍaZi…Č\łH­­–¶ĺÜaňZiAší—‘VŠ/ŃŮ1cOąŞäşAT 2émšşË¸KĚăÖÓ:”ŢƤJÓ±$–¶­Ţą\Űç +°Žý¨ËTŰyômiü(%S|Q(¬śÁK˝y‰8_†ŽQNڞ#¤!˝ =ą?JđŐW dŚÍ”·G_”Ęz{ͤPF”¦PŘÎvŻ*“çŁ÷)Ąeł\n˘µNsÓWzçw¦¸5¤ŚŢâřëÖT –XÜ)ÍŢŮýçxvŠgÇIˇ™L0ů4W„ßl##ÜlĽăÂBřâüfBôöŚUšŢFôvB¬%ĹzR¨§ä˘ÖC7; Aˇáe҉vóv*‹‘ŮŚXJ˛n„0C¨òqřj@!!lĄĐ<¶ëPW6R6büĂDőT‘ҡ¬ "÷ŇB‹ł‚=fŚťKq%LiA ¤żA™#ą¸“ä‹÷"äO‚T&cô$w&ÚÓ$›¦i=Fxéü^ ă‹Ňíj—ÔzľĽea)¶°•’¨ +R…Í´!`ܤT'śYJ(…Q%FX„¸fKzőȬźęŐÚصgţvtüöĎÖc|~îíľ8zLÚĂnA°P‡1*ČčŢßĚĆłĐba*¸#L,SbmrđA,N‚¤ĺKK¸TĎví L®˘B.VnöMš˘r3)ÖâB3GRqÇjťpö(IŰ’;´»'beŽ™MÜěÁúŇÎT­îvwŢ(ĺí´P$Ő¦RŮ—jG¸9J°@*HQš/ĆhŰ—äý5ŕ†Ę­$ßŔŐ>"6pĹűŰę!\G…"ˇ×â|>%×ÔÚamőEsďóňöó„\ŔµšXśňĺ9[^`Ů‘Ú8«L_ąÝóÖüąÝ9Šx[îĄâ6`›_ Złf¨wŘ*cö˝˝USʢm!:"y›‡„3ĆĂ0íO)PJöŮ-ĘŤ‰Í”ÜGŐˇX=NkŤMD†<ó…U°7ÓÚÂł°˛QÂŚÓŔ|M0ąž $¤Í°•â„#Ů#Ćčúb<<żf|Qn=Ɔ ‘›\nIe´5“ űRn%s„Ňôöšă+I®Š©}Téńů•Őz„*Ť{a—ŕq0Ą PÓŽ⑹{~üž ¦Ąĺbr7-µcT1Nć uŔ›Ŕ +Vol¦D_J÷Ł*Ö!XXĐ”:Hň%”/¤ŘüZ„Ł•i˝/Ŕ¤­učĐÉ5,ńźűâŚÓ7ę{P` Ŕ=©ç«)±uȹɪԓR%Ƥ”e{Ř_˝p6D¤*ĺíg2MIŤÍŚŔ oc"w¬”ćŢ®Ů.Ş53F7-7q­›äJĚ0««Ňô‰\Yčµ…Pžáf‡ÍM„Ň6|Ĺ€yĄşŰ<Š“ DňŁZš«rÎ,Ł´ š±Ä­0eGţ#€g#T‰2Ć|nI[ŔÚÝ”PÁ”mugHf˝?®Ż6O…ęnZkjő­¶Ă¸C©8!Ü^¶wŮŰ˙Ş4{…ŞŤ ™ âÄú0ÎoˇšŰvűĎ­Ö…·oXvŕm ĘŚ×`TßH+AoěRś) b "Ö‹ Ő¤ÜA”e-´Ć(¸·KöWXú3ćFJÝLéÜD˝?ď$Ř\šŻΤĽśXľAŤ0Ş’ŇF\H2…ŚXe¬Ť„Ľ•ŇB¨ 0r/@lĄäS ĚAt™l0“ aŔ‰„~ŇŰ{Ş e˘řiZjćP Ý+<ʢ +v”rˇ⤓á+i¶ř0ĚŇ”ô™ ĘFhX€ľ(Y ”–YZ¨ů1”ôfJ  –ŃÂx‘ŰŚ»§Őޤâ"Bz¸·•6âÜĂ ¶¦q±ZęśňąyJiĽ¸¸(©>“z’ËŻŕů¤ŘH‹5Ţ3z#F9¨Ú"í©TÚÓĘKÚl§ąĽâN*Ó—IľĄě8“Çő–·yč˝ Í%ćVë0)•×RRś…÷XkD,ç€n}˙ÓŻţnöř«¸\Ś y<;`rPl‡vű<׿ -och±•G¤6mo ĄcˇtÄçwŮÜz‡Qëba˘ @ÖaŞëBnÁĺ·iwnŐçÇ_VĆŹ”…©-µzྸŁçîč™XŢ6Ë«WźüµÜ\l`:PmZ6›‹Î„6ş Rü–÷6í,G¨<˘ŔK! Ý*Öî…1ÂÉ'@k‰M?bFÉb’­IΔµ{÷ăÜfR‹ŃUĆÝKBa—ÎNRb*,Ť?)lÄ­$ÄtLjPj‡RŰi¦Áí0fłRR”Č÷m&•ő¸@Ě@ڀҊSą0‘ÝH k1棍ÔzŚó§´ph4ĺęíbM$Ë=Lp›¨Ó˘ĺÝmŇdä¤:Ô2$?BŘ€3kf#.mĆĺ(ćfŘZ ¤§čüz”ţ8yb€š˝Ťŕ€QoűÇ$=*Bt`˘”P…şĄí)” +*€Ć.¬G¨űţL ‡w•6ŇŇäô0ˇj§>ľŢJf–@3¶ŔHK-Î]eŰ—vëÄŁsőĄŐ<ŔŤnFmĄĺ*¦ŐäÜ4§;x&\>ŰeĚv”vá(s5ŕž™­#Ň1–K Xe@InĘĺťlç¤>ţäýß´ö_&ĺ2eŘÂ6[X‚e ť±PZaFôQ”tS¤âÔeŽ9PřŢ]Ëţö›ćę].FčRFí°Ů!ďNhwjÖöËý 1?ŤóE\kᚷçŢ8uOřâBŻď]Ľů­Ő;ZKÉ:‡A7ąSP쀨PÉ€1¦eł•VR´ëíčbŹçq@©…©]6°[)q+)dˇő6ťö#oă÷„u’äŢkŢ®&ŔÔZźŐ-¶âti=!<Ś› .ČQ¤b@ëŇj‡3Gqş']¨˘Ť„@M(0R’ĘVJ‰S.Ŕc37üZŽ?©­E_\Í@›#x@Ůř3ş·yŻX‹P.ĚW;ŕ5 Ěŕí©FŞí`Ć +¤Ő PRůGqD×VR¦T`É! h= +(GöľÂ"xę—š@ORa;É@ŢŁr#Ł@n[iľL«P«0I”/'w-!@f”ĆÍ&çąÍ¤ŕYBI±kÁÚ §÷Ľ8}#W”Úŕőzwţ´2˝ú#Ś.ivůÜȨ.ó˝3ľ0ů!:CŢö¶‰3k‡ZőD«žŠĹ©r”Ń;hŚŇĚ÷O¤ jSÚůÁłÚâusď“úŢ[ş8łYť˝PGa®śę­ŁŐʬÎ%5֝Ô8gčmIĺúpµĄŐ¬Öy}ţy„k j?-ŐÁšQF—˛ ·…ü<ٶ=!±´ŐŮŹH5˝~X_ľS‡RuÇéź%ĹĘj RĘśČfF “6¨ÚD¨<8/_\¤ĺşYÝAäš/)7ˇrP2† <ż™„'Q3I~.g”.y#Ě@ácPT¤ó0&ř’Jtŕ#ŕź1˛§Ş[io‹!P>ľ2Ĭ5.5ÄěŘiś0ć8Lä‚Ŕ}d¨PŐš$Đ˝ H3~Ł~á#¨‘ćĘAÄ +ŁVZk &±ň^S Ť>48¤*Ap§”î©Đ(icrCpgĂSŘJJADKP…­„U8˘n+!&¨< ŮZ”ň ˘<6€Ą +|PŠ-8€¨CŮgô7őa„~$ÖCL”°ŽY«´ëKI´cŻ…±żX‹Ą˝Ť¤ęĐ ¤ +ř9`í1댥ŹrEŃěU†—reXOČ/0ł—VĘ –Ĺ\‡ÔaÚŽw® ~„Uh^¤‘ÚIđµ‘O +5Ęěëĺ.?öă*WŁ-ä§´= ÝqZď$•†V?lîĽW`Ż0kŃ»|a!WůŇ›[‚݆×GhŞ *$ĆäXw&UŽ™ü.bŽ3ćô¶3“|™ÎPĄf´.iŠŻËĹTކ1ťµž“Şiµ™ÖÚŕyÁ±Ę…U¶yaÜ0•Ťsů8W€¬ÝzRÝHkŔP¬Ţ5ĘË8´a‚ĺ€ăcZ Lw(Ą‡Rj’rauÖBDŐ0ąĂç÷Y{Ii}Lhú˝.fAĆ<Ś2÷ĂäÇA,ŚGhĆ(ŕ…`ËfR? •Ö +rÎ=0#!Ü ă6Jď0I®Ŕk­eěG|1J.Ĺ®–“,č„BŠ.ňf/Šém$7b¬?J»†«m @¸‚3Üy”r€CA3{ŰÉň5`|(uđ€!DŹPZ “÷89 ČYHŇ%'“€“N -­EŮ ° Ŕ-–´Á›ËĂĎĆŘżŘHű˘l†«Š –ív’1˝É$Ąn> gţb-¸ÂÖŔü˝})ĺ—«@epú§‚=–Ý)Ś×2ś;Eôć*&yWĘśŐćśŢ8â sŘ@.1ˇ z>!”1­«×ŽŚú“pc‘Rb)%•ĂŚŽč"gp­@Ăćf ±¤U÷ÔúˇWElžĘŽÍΓÜô [Ůó¶–Ą˝ł Ią ,ĆťKµ3ľzĆBĺhť(““ Ą\Ůńc °eo˙4°KXČúfJFřŠ›:ůťęís±˛Ý€]’ ţ-Ţs…Ev&¨^@?č>Č®4± +kŠ.Ţź†E»'˛®ý+« Hi(­]Isµ8UL{a=áM9Q2ű§më|IŠě<ŐZ”ßLŠ7LW WbňžĂR›ŔĹADăż•T6‚ë›q†U+˘3Öö#ĆVZ_‹Š ´P®BŐźlÄŇ´KHµX{,»…‘VÂťŇzba7DdďGČ-D!”`Ž·_(“˘}1!€čąÁýi /•‚)y=DASřS*âˇMEÉĎx×ăüýů‘őđ“̢R…±şŢą>‡ŇŞADxJ? $Ö‚H$ŁÓZGÜ ­"¨N×Űt5=˝'Uü”d,B©0řÂŹLľáěn´#ĘçúRŤŃ.4Č&ŞpDšÝ˝ârsT¨iőťmBÂC·»lÓQ±¤×v•ňJp‡Fçłş­MfG ˇf + @ĽŢ•3|’’j„Ö]ÎŽtg1ˇbňŔ’zýÄčśzt]){ 5}i,,‡Qݡʟwŕô} ĹŹč`âT^/ď9í3ÂěÄq3ß;a‹Ă TŘ@Ő-Ü€¤Ąjuň˘ĽýłÇ`ŻôÚNJ,†q",eFj8ŕň¬Ázś !"ÂĺF5X¬8Ť(—ä@ďY›i&ÎşŔG1ŇŤ‘ŔkÖVRßJ¬m’J3”Qá‰ZŹńPŠaĚ(xŕą§mŚA$„(+Ćş`{a='B.-Ă× _d4śĎŰ•i„2a-˘„ëÁ‘‹bˇ/Bb%If)9Í”cd>Aľľú09#—‚ 4ĎVZ‚ú÷§t ô˙F‚ ¤… łÁßÝŰĘ<ĽŮ0Jr§o˙ŕ ÷¶­8 *äýVZ*ôcŘĂbç¸ŘÝ{H†â8ÁYźO1€ŠP-ŮigřRyxžćË(_AąRŚ€ĺp6S|б$§ĘÓi3AţÇ Ď)˝ĺ}•ŞőůSÂhŢ3Iq‚rŁ—ë_ŕ‘ťÉâň§ë@ä4[Č‚y;±w ´„ܸÔ:]|MçFi5„[ŕ1ąĄVZ»_ĺĆ×iĹSMJ}?Ę´ ÂŹ°biÇ<ŐÚ§Ůňöńłź«ŤŐGA< xÁÇA) +ą%®÷ JŁ«(_ BÜ=(s)7— + `RB¨¶W/3FůŁ­8Ä’Şˇ¤Ůn-_7vßÓą‰â {»/„ú“­äý@&#V`&Ŕ/Za „m’Á ş÷Čz” +¤„ÄŤ/†jO‹PQšRž‡iPY<Ö˘ Ä˛¨Đŕ¬X-pÓ GAţÄźůx yÄG¸€Ý@Öâj7Î梌íKŤzxF5p[€Đé Ň–ťľU›ű?ť+]ďćmťTٍ ĹCy`|‘ŤA»ŔŃ´â™÷ąR˙,#W„Iŕ>h‡4[áš +äč(\ČóVľYĄŚó[qŽĽ•T·Ňč´áÁű­ŚĽĄ2”ł•ŕ†(`OŹO±\’ŻZŤą0ö…0”Ô>ÇÔ!r+ĄbrMpF`Ű©›Mt=kśV@aŢś/Qe­@úF\ą‚ +H,đ&&TĚň¨z\kȧ'AgˇgĂd6-–ÁůJîŠ'@ęŚŮĂ•x–Ś\K Ąź/·÷÷Ż)”°ůlŚŚËĄ•Ý;'˛Đ ›Nχ«¸Zł›Pl ÁŰ ‘°úíéŐ»źýëÚěńZŚ#eĐşŢ)ôŤ´BčS©t(äWzç"ˇőTI´§@č› 1¸|.¨tĐNJy"Ť‡ +Pך€1ĆB”JZ©"RąŃ=ţđÝßGë^MłŽQ] bŮŹ¨k1áćLiU-{›Đ×$'Nš)6żúÖă;[ĎĎNŢţ6ĘĺDŮ$[c›bŠ)¶ôĘFyľ{ům}ţěŁ-ôľŮŚQIx±¸N0ÉW >“B tč¨ –§¶Ą ’¤+fGZaF _ZĆśĽ¦ýŔ „Í* FiV^€ň«4ö|Âi ĄĄ$aeŁŤ®Ußa mľ•ŕýI>Rü |"¸E`4ŃjJv°Č‹4L> ŕ›q"ŠvŐ·Ňň˝P†”ę˛=¬ţóá‡$Ś(±+m@ixŤ/BGŇJ¬kXŹĐIt`ţ¦¶•$_–Ľ"×ăŔż*Ę—ŇŕÄŮ"@˘/ćđ&đrRLsnšÍqFÇi±…9˘Ôl>á%Ö€R|ŠŠ2:|nL™`Öz)ˇ¬–—zsSëR'Ť6*Ů5´Ň 7Űs3mr‚ť¶ŇÜBĺŚ\ĄŚä™+ĚR5«OŰPębU.-sĂÇÖđ‰PŰOi­ pçzfU6Q%ٵ@¨gÔ.e/’rG­©ĺ=WALŤ3N”0 oˇŚĆÁýą`ýĺA˙8^‹ŕĚłz`µŹ­úÂm­@äą°t ö ŚnĄDH…č.(kLý(ť'öÇŹ‰›K¨”Îh`ÖŽíáŐFĆS\ĐPpX__Źľ( Ád{biNšýĺĆ#p`Ö‚@Xčë0™ŹŇEBŞ•ł´ÜđĹůŞUÁ…0¶ˇ +¸16Ú€°č &HIkAŕe>™Ń#†˛…le@Śf'ŕ°T6čŮ: j;LĺP©Ý„°…{›ÉÍ›"śî홼Ň1Ćn%cő(aůbtÓx l#łaá2 ó.|T÷RĐP”q?€ú˘ĚzÔ3ÎR:ϙà ˘˛¤÷ˇľ0ă}:á€a|˘6â†wf"ŇT‘; U`Ş”ęŹCi"p=¸cŰV¸Ćť2f7FvÍqv `uśŻÄůFZéő‹ÜčĄŢy”+¸RčPÔ0ČČ P±e`m°K( f§&MJo°F›ÉŽŤć™R=LÉőő”śŃ;`衯ůęąÚ˝jÇđŁSLK D…¨K~\ÁCŞť|˙ąPÜI‹€HůMD”ÂÜÖB¤wŠ›­’Ć4F©›DěŤWÓb 7[I©„xŘŐJq5Cp^ĐŚ)„M!Lh` ˇ´Řü‘[qďJq=®y§ň "pa¸Üˇ˛STlfÄ:ô đi8-lĹA˝$Ö ş(ô$d&Ł4˝K´ěó֔۲@C›I%LĺSb Sű1¦eŞĄGëýiŹ@®@Ší»ŤĘ͝Ǥ†”ŰÔŹ2iŇIaF(!FťRűI®šdJQP›^ÁHD5DlzOÉoKöŘźb¨ĺOHąžřłűˇ{~0 +Řůž˛[»ąd™˘  9 +^#)Ý ŕMüiÝź6ĂË,/XłăOI(墂|M¸ĺ BB(0rË)ßÄfŚ˙8€˙ĺ& +’,ś1K°•˝s| ˘ e¸DR #&Ő¨< DFR{Ja™âĘ0ZmÚÍ˝¤÷NĽĂł ąrjwžq…,=tşYŰŁ`J( ®BŞMŢńî‚Ôş ň7“2-·śĆaÄ3 +P“J»ĄŮ˝y–”ęŕţÄňeO¨Ć-µőX¨ž¤Ô6,äY,ď+ŤS(ĹŚXbÝę]_›ÇŘ‚Ől"m€ž`Aď%Řr„*†Á»wvŠŹ?$´€-Ş€c-y§ěôI‚«GIg3Î…S*§wP©řĆtĆQ¶Ç×ěĆ8çWry?â!§žđ®±îś©1} ëšQQ0ţ~ĚÜ€M)şw>§ \@Ě{[0¸r6€áÁŚÄ\&;×*§rqŹPŰŚŢKó…‡QüéŞe¤**)­!şóhFO-×ÖCř-t+*ĐŞwX-(-Ű(nŘHĐůMďěh ˛€2U(§?{ůóűáÍ(…ń“ ô/ÖRľ(h<ď +&(±­”–`JŔ×(Dh$Ůr’­#|S/ěěCĹŞÎ8Iĺ>öc÷¶Đ@BŠd¬4]ĚđM”)FˇfĽ$CiM)@ëm$D°źĐČPf[)0ËŔŹ©·é4]H0Ĺő„ä‹‹``•Ť¤ň0ĚÓcڤŇ*€Á‹5Lmăj'Ć<%<1ë) Ż^۱ĆĚ[ŃCEŔ<¦U¸´ÖłÎůTś6ąLXťŚé]*b¬”źłůí„ŕ]RIq…ˇo¤„Í”+Á–kŚĂSŤź÷÷Ţř s ŃĽ3lQ°ÇµĄÜÍ›rŤ}?P0’E䛝d¤zF†yöcl —;g_o?ú*J;ë1q=NÜÄř »´ťáňńŚF*µMTţ8‚Ż%Bë*ĄŔUˇ°Ś’YJ…m¬Ĺh@˛â« ´ˇrŢy!9Eąŕú×bĽŐ`ÎŕńY­Ëh}”o†1txŠĘ<kćOjŘHzÓ aŽ/mFbľqĘj•­•bě-D˘âFŚX g ťÓ”ÍIeÉlß÷Ł~üi%5Ĺ ZSëQJ‚µ†1B‰î’B‹”;„Đ +#ú_®'ďmd|QO™Ľ‘ Ä•€ J…ŻZś*ĐÖ4Δ™lŚ)…pg3m®'µ-Ä€2vPóK -p +éfŚkůŔŹblłĽ“~)%„či*Ŕ´őđ»žaó›‡Z‹ ŕ!-ëIȶ°ÓFt·$S¨ńĹéµ˝—<ŽGŚä3ÁÚ$Á{2ůúř©)1{‚ +|UDjć`+fLŇV‚4Q±‚mëćB<řSłşGZťŹct„ʱöµz€˙´s„ČŨŕ|š2±XÄí$_§łS!ż]>“›G>¤©ÉÚcđÚÂÔÇ!ü~”bř_0ÚÁL6Íס×A'„1Jµ–*z}żą}]ž\‚]MCIĐyĐ!(>:OËu’/ŃB…7;k„´ĄóaÜ». őĂŰC!ۧÍÎźNFmĄdTŞ'ąT>ب‡!¨ +ě dLvGVóŔ—〙H„ź/.űAmbYX Ďš%ĺŤđ‘/ý_j3ĘĹ…čÔV‚ĚFP•Ńšëqú~ ˝Ł˝Čhˇ´N«aPÚI1„€îĘ|´ó'xx2Šš8[fŚ.É`JĄ•g4nŘŮ3§đCŢňy7ŐDy`CPŕ?Y‹ÜßHC‰\ăň ş#I—gň0Îߏr[+Ęx§bn.÷ĚůÜ,ΖJŔV€ř˙ó‡a ÚnĆ2úz„ó'eVYĽČ@÷!b9ÍÁęB×€hLpeŐ`˛ÂtÖS#J#F缴Sdđuç[B ŢśťNÁŰ…Ň&f¬őc&ş”aB§Ż•VëH­î%řj0ÁŚý crŚ6a-€UycdV0­µ…ľ¤l7ŽIúZf÷{gĆ@ŕqPˇ +v—+ÚŰŃş ÝÓb hڤ3‚˙ÜדüzŚńzD-ÚĐćL ¬c‘AdB#¤„¦µĺĘR,ĚQ±MC@ąŹýčz”JŃ.ć”ĘyEH: ‡ŁL$q0-&é"wZoCZŇBҤÔô, ¦C‡‚¨‚ŘŠ‹›qŃźŇC„f<ßܫϟ~ âÖ+ËJ”pף<đÔfŇŘJ›Ń›«KkÎf×BŚ/â)Ą‡!ćAö'”f±F*v#Ć$Ľ»é¤űţĚF4cHµÖăa„¤Dڎ~3*Ľ<Ôj4“uëÇ”˙‹µŔGĂ!^”ÝŚ‰›1 ÚŮźÖ@\Gűh-ä “` Ţtá*€í´5B„Ŕř˝0·‰x÷VůoĽčĂ— °{Uď‚búal)žŃďm˘P·`?”˝ű»ČČ6Lď j;€;âňZ\%OÂAä 7Ú^iŃö(­Ô~Äî3ŕMŇ|WŰÚIK-TîŽQžůĚ[ťľŞN_sÎ×€KĐ8A0h§<ľ—ât.í]`m‚–NŇĐDeh«˘Dp;ÎTXk"ÚS°€ę°{Đ fśŢJ¨ \mą1źź~áÁňC¦mDŘ‘‹S•(UIIŢ­&aÂŤ˘€`ňýyßO‘Áü 9®Š.A× l‘ŐZQTÚŠqq"x-Ě‚ŽSE@cLŞúŁĚźÝ |´ő…)Ä#ĺ<¬>®ô"8čşÄz%¸<¨;ŮPşŕVÓ[ś;ĆŤ.¨bX_.„5§Ť–”)ĺ%eŤhk+-ĐĎBnÚš˝,ŻÄü$éy±`QZŞ1öD2x1JďĐv/ŕ“’ˇ÷Á•§¤:Ô*Í®ŞËgre,—‡ŮîžŃŮ×;ű٬ă¶Ý?– – +&7D”™í0®'ÉĚöQqřxrúĺäü‹üđL­ď˛…›iµm˝ľĘŤŻĚÁłĘňRßGĺ—…¦+Ę)•бŢ9Ą + 27ĎMŻµÚŽ\žBÔZűTŞ•=ˇ´“ëNÎľë»~ʆ…Ö3Z'BiéeŰ\¤ě`cBČGHWŠjej4N˙¨8{’íť2…)f@§lGÁË B÷( ôU‚+ŇŮ'#Ąú XyPďô•fĎóÓ«üř.ÖíCeŚ6ĺäÚJ®í§Oˇş`±¤Ę"LZ¨ÚŇ»eŕZŻŇ憏ę«×ŰOYŢľ*s{s>Şn_·O>íś~Zś_iő•ÝZŤN^ŹĎŢ7w_ŕF›u†By›+NĄÚJ«­xwPîťdä:"Ő¤ŇB,mó……Ý;kí˝©,Ż­ÖAsů$ŰŢŤqŔŞuµşĘĎ‹Ű×”;NŠUٶhU?"ŕZŐjíkŤUqúdpţŐâŹٳŇřŃŢłoµÚnśkȵcµq¬ŐaŻ:Gź[˝ Tmm¦$ŔLB*Ëű;<3:Çöŕ˘sôieő +jŰéěw·Ż(ĺŢ/3J›ĎmťGąŮËúW]f iv"ňăëÖާ{/wńá_í^}˝÷ü«{ Ô¶Kó«ââ‰Ů;*ϏϿ޾ţÁęźŮn4»m4wőćAcçu{˙­Ý?ŮůWíĂ·D~@Ř]˝ľ´;űĄĹ3cxeOźKí#ą±˙DäBPá˝,µýŐĂĎ*ŞűÜáĺřäŰ?PkÓÜäŇčśęí«{V™]uŹß—ćOˇ<ÔúN”sP­M$—ŔŕV÷¤˛ýޱű í€rčhŐ)"çčl].OóăËÚÎËęęegďÝäô :Ű#ĺ%ŕ­ZŰËvΠ<ęË7Í˝ůńsĆ™q 0XŢîžä§ŹŤÎ‘ÚŘŐ[€3buwBpGk¦O!ĂťŁRq†IJ«fŘĘf['ÓĎZ‡o»Ż;'_TOŹ^ü śĚzmXŰ}5öł˝Wż©.Ż'ç_Aă'¸›ŠZťăúňĺđüóÁůgÝ7ç~38~ IÎčŔ#C¨:g|Őu&Ź{Ż›ﲽýŢŃóŇň‰ÖŘ1ŰL~huöťŢ‘Ý=ž<úyeţ’°BižĄ‘\žlBČůÉÓöއÎÁ{»łt;+µşČöŽË‹§ĹéUsőbpřęü“_í>űĐR*N`áúGďg_ő?iîľ-/^*Ő˝ĹÉç‹Ç?Eä”(”Dűŕ}cçUiń|öř»ť'ßżűů? Ž>Ik-˝sbő/ ěˇôîc{ô¦sôŤRá`F˛}€¸ňäÜě¦ŮŢQ~xÚŢy©Öv€Ĺ   ŕKăłÖî‹Ęě±^ť±Ů6°a˙ä ŁąWš\TćOÄŇĽ4ą¬ď\;Łs*ż0»GťŐůĄTVWϬöNyr:<}ÉwGí˝ë/űÇňôň0{ôĺňŽ󯠛 +ă ©Ľú¶łýňüÝ_×f¨d›µiwbůrńôëáĺ7‹ëżł–mź‡ÝBD0ŮÁ“ńă_Ďż+.^WoŠł§n˙¸9ÜÝąJňnś/€™’hş rÎňŁK©şR‹ĂţîuitŽ*-µuěή­ˇÇĽąáYµŁ”IuʨzkŃ9جíĽj~Ö8řčŇiCrśţN}yQY\&ŹU–G/˙öŹ˙3äQJąîţüń_Ácöř{(ţúřÝo{ÇďWçď˙ć_˙wŤ˝P˝ý×őŐucďÍá«_˝řöÎľř7ůŃóíĂ×»—_ŠĹ‰Rő¸Řęś–ç×ĂóoößýÍŮ—˙Đ;ůâôů×»ď…ÂVÍśęÍ=ٵ_ž\ľýýÁ‡˙˘8ąrA-T·§§TćRyËTďGOű'źHÁ–Ů‚EĽĽŇ[űf{oxđö›ßţqvţrű˝łďZ‡_T—/gOť˘vź€2äěAˇ÷:W+…Ţayvąóü»×?Ś/ľŞ»ś;íľýâW˙•‡Ł“ĂÓ/•ć0>}Rš=µ{Çąţ‰Ó=Lp6aTˇ­*óç«'ßľřîďG'źž=űúôĹOĺŇŢ^_=šź=ţćéWřę_ü±>{|rőŮ·ż˙wP6 %« fÔuuůi÷äg˝ÓośöÁŮłĎ_~öC±ł Ś + żÚ>łúŹ ă§ŰĎ玮2jÝjϡţµędŹ=ş‚ĽUgŹ?ýŐ?ž˝ý>%?éě°¶űIyőÚhź€V×JËëżűîw´ë»RaZ^>/lż(ŻŢN®ľ9”07€Í Á5jK§wÚŢ}=xôMýŕswňś1şłĂ÷f}št±Đ©ĚŻş{݇‡ŻĎć矀Ú’Ş^·VoZ;懲ŔbzkŐY=˝ţâŻßţ@čőćÎ5P@aö¤ţue÷ŤŐ?7›{Ż>űíű_ţťŃ\laşVŰwgfç ?}48ű¬¶|¶ůŮý?üŻăÓ÷zyrđě»Ë/˙ŐâŐŻ÷^ýęŃgX<˙µVÝ{óéo>ůöď©lô|hsçuműşµűjtńuçřSµľzţáWOżdsýÚöłĆţ›Üčq~ü¸ł˙ÉÁ›ß/żwzç+ďαˇ/%€'–WLaIçŔÄÖćOŞĂýŢňŠ4z}; ·±«ÔV…áĹđěsPž /{ç_QrnWo®čÂĚĎ–Ăb](ď”§×I±‘KĹţ‘ŐÜťľ›]~Q?a + ÚvćĎ?ýáߍYmţhńä§˝ăϲà µ:×j ŇĐąqmqťëťbjI­ŚĚÖnş¦}h·÷jł+ŁľÚ=űdďň3©8_}=˝řjňčóůŁŁë\sőĂżřÇ˙ţ?üoGŻľŹóEĘę +ůiqň´Ľý®´xťíť3fű‹źýíßýńß7'ÇśÓď~Ö<ü˘süŐčň—“'żŇšđäpuůu}űY„˛ctb}üůřěóŻţđßw»Ý˝öňIŠ/0ą1¨6?]Ń\ľxôö×Ç×?W +ăţîÓÚâ’v{„ŮňŰv÷¬¶ýŞľx)Ő|}Yč‘fV8TďśËőC!7εöQ)!eÁm–ĆÇ“ł÷Go~UÝ}A冠⡗ˇ¬Ć˛ť˝ÓšŰ¤Qt;ËňôQ}÷e÷řłćÁ{ĄuD›íbg`Ľxj·} 9=B*ŮőUďř“ÖÁ{ ňřŽĎ÷ŠŁłł/–Á¸mËŐmÂlÄů<&•Żß˙Ćę­Ĺ9BmHĹ)čtŽ3ĆÍ.P|ˇ·×Ýy–ŕťÖňéŢËßôNżuĎfçßµO>S[{ťŐő«ď˙‘ÍĂ7żŮáýŇGy×]7O‘=‰Đ6m5›ŰOŔCÁJ Ďżś>ţîčĹoź˙ĐZ˝-ĎžéĹŃ“÷żĽqČQ@9đSfç2Űż¬ď~’íźňnëńëďš“3ÚěČeČęc»ˇ5ěŢE}ő¦Đ9\]~USy#Ň8·—Q«feŃY>éď>gť.ˇ53R úĽÂĘěiqx^ś[ű«ÉŃ'Ť˝·ZëĽ*íLŇR ŤZŮ]=ů^o2_éÍýÁńgýăđ} +.»6>őő8ŁSŞěĽÍŕß}÷űŐłďŞÓ+Ćę~ňÝß®}÷ iĂî>ň`?«qÁM +y`Đ3Ľˇ8 .-®ë»o•únŚÉaj]Îóíe—Sś#g|yž‚uÁŁí¨µU„Đ 9g7§N×逼[¤5÷ËÓÇn÷Đ(Źúó‹?+L Ą‰PšŞŐĄŐ:ŇÇÎđ +Ş– Šł1żęĽíĽi}Â×–¨Q·ęŰĺńŞä«˝ËO˙ćěÓżm|Đ뻸V‡))cÁˇ0ů­ź 4ŃéşÝ}»htÜŃ–mrąîäüKXM>?,Ť/úÇ_ Ď>kí<7ësÎiĆX;”Ń´@¸¦B‰ŹŢ·÷ßwOjO®˛ýcDʵEkůŇîśSÎÖobŐűű/z‡oR‘ŠąÎ)”:®Vůňś.ŻŔˇóą‘^[šŤť´PhŻ^ŻžýPž>ą2>z—^¤¤˛[™={˙«Bg¦Mwü¸şóÉŕü»ůĺ/ěŢ#¶°.3ĘÓď]íârµ>˛züÓţţ»ňô)@"čüRďxvü)tDľsxđň7Łóď +K«ľo5„ "­*+ô¸ÂZ­üŕÔ鏏?,źţ\*Ěă ąóÝď÷oťÚË üŐĘB­€î}2:ýjuőóăÔ‡«§ß +ĄYZtPÁ¦ô*ę] +,‘J’këě_} fÜ´\öîzÄ.,•ę~Ő˛…e¤šŮ8ÚH0~DŚł(OĐb~¬ąłg?ËĎÎ˙IďáÇuĄűţwĆAŚČčśs媮ĐŐ]ˇ«sÎŤn4rH H0gR¤EE+Z˛¬,YNËQ–le۲,ÇńĚÜűfŢZo˝wšo­^XÔě®:gďý}żŞ:űŕĽĹ«X˝Q#˘ŁÔ@&2f€ÝTj{ü"€™¶yc:·ßMGq!±ˇ`®CÇ'h‹ĎĎęÁ'ÚrrbnăbciĎí‹8P0?Sęť(Ďť U7čÄnŘčĎHqL"–BŐŁ`FŠ3§{[÷u6ďEĄt˛Đ^Üą*Ďia±ëʏůĽ™“ňkŕtňe̸¨±“¨? ¤şr9?µ đjzűNeîB0ÓťZ>_čťD¤"@-#&ë`Ń„+LhńĺµNZă˘=l„ +•Ŕ‘ÓéY —ňDÇ&pnRÁBAůMµv$ţ *äŔqŞl”•(±8˘u7÷«D˘©®'šGD`żéťŠ¦šG Ó§,DČÉĆĽŃ ŔćböĹ 09é"BŢíK;Ů´Ç_äÓł‰ĆŃâôiL( żůc-˝‡3#őľd¸J&ŢCů‚–=lL™ŁyŞHÇş™Î‰úŇ•ĘâĺH}C ůG-ÁEk]”€ś é-PyČ€»ą4—.•ÜLĘͦ_Öěć«ÍĺŤÓŃŔţŁĆ‚şp™Uj|tŠÇMîKľň÷[ÓGGôn+ĚóIđ ţĚ’RÜPŠ«ýfDäĺM`0° R™‰ äOárŢ.O-źRę3ZŚqúÂ\ŞI'ę¨f$ ŇâáĄD‡ŤőµĚF‡Á`żť zŠ3*ĺÁ Íą­/y ·łq1­PÁ\¸¶H†@ů) ´&V™÷†KF\¶QP¤/® +éi“áz¨v¤!f; pąHË^Ąň:ÖZŽM,óÉŞś› BĄ•@jzTŹ~í öža Ä&ü‘†ŢFŇŚ;t6ŽËÉęj¤¸ űňŁF|Hë±á"*fďQŰ÷©m‡tnČ_RJGĺě2Ęĺ´vŽU(1/6»K[s{GĎ޸tűÉ[O}çÉWßzű'żřčÓ?ţő˙ůŮ—˙řÁĎ?:}©#\ě/Q7{!*KO¤ ŮjŻĐ^Şő–¦×¶7O]şňĐ“g|r÷ľG×.Ü{ěʧďňü˝Źżüú;ĎżőNoýÄěĆ™xmS*H‡KL´ +űcl0™ŞuZł+Ó«G×÷ΞĽq˙ŐGž|ŕąWvn=väňCg|ć±ßxĺ‡ďľőîŻýř˝ŰĎ˝ŃÝ8EÓVBĐ»(Ł•`şNIá`¦Xé-uÖw›+[…©ąúâzkug~çüýŹ?˙Ë>ţřw|é‡?;~ĺvĄ·!§['kpđf·ŕ"BJş“¬.»¨Đ¸'üńro=ŰYŽÖfäR'Rź™Űľrâú#—n?őÂ?şpű©S÷}ëĚígčXELżÎć‚K4`v©ŕň*B˛ŞäÉJ+×^h-_Ý»qó±îâąďżűë÷?ůĂ«?úűK´ćŹ'Ęł¨?ě˘ŃĂkť ě‹cŚ ňk¬“ŚČ™^Ş˝,täÂÄúék}űŐűźůîŮűąôĐłgî}tďúťË?űę;ď=úü«çoŢY;{ 37«wz!&Ä„kä”W*+™I>\ ¦ZąÖŇÜÖąćôÜú‰óGĎÝ8yĺţďĽţßőŹ?üů_ţůď~öĹO˝/NÖB:ÜA&‰™HaMmeÇŤ¨ĹĂ’ Ěe,hĐŠ& łŃp¦ąxäĚöĹű×ÎÜ{ććŁ÷=ńÂĘńËĺŮ˝Ěä!d4đ7YZ©4ff—Ź=~îĚ…+?ţÔkoţŕ?˙ô÷üőGź~ôÉďţăź˙ńŮ_˝ţź>ňě+ł[ç›&,le)\ĺĹd8–)×;ËGO;ueďŇ˝<úôkß˙ék?ţĺ3Ż˙đŃ^}ëť_üęă/^|ë'ďüŰ/˙ńď˙ůňuűŮ7WOßf,^™/NmĆëł\$ËUşs »gÎÜ|ŕÁ'ž}ţŮ—_űţ»żřčwúŃűżúożz罏żúË?ţď˙ç˙ý3ň/ľúńŻ~{ĺ‘ç +˝Í@˛ +¦›ŕĄp:W™^ŮŻĹ#;§ŻÜzř™ďĽđú[OĽôĆ#/ľńü›?řŮűýöăOżüňË˙óý÷GżűňŃç^Ý>´8ĺ Q&#Ä»Ńęš WěĎ/§Šµ©Ą#»ç®?pď#ĎÜű­®?ţüËß˙ŮOß˙äçżůř/˙ű_ţń_żůěËĎţđ§—Ţzw~ë*0‡„Pâ#m\(řÓ˘QlÍO-]Ý9sĺţ;÷?ńíÇľóĆwŢ|çg|úţ§řŐÇż˙íç_üůŻűŻ˙ýß [úëĎźő'áҬĘî1˘ rŞí´ ÜL‚QJ±B{năřĄ˝üđăßzéőźýöÓ÷>ůÝ[?}ď•˝űŃďľřäüŐ‡źüéĎýź˙ůźĎ~˙ĹłŻľ˝}îŢP~f:;¤¶˘X’®Ě4{ëkÇÎ]¸÷‘{yúĺ·ü‹ß~úă_~đ滿üÝźţú÷˙řŻO~˙ĹÇź}öď˙ńżüčł«=Yě®Çj«L¤©ď÷gCGuĆ„ ."DĘéÚ\©˝Xžś_Ú9sůöcß~ůÍ÷>üôÓ/ľzăß~ńëŹ÷_˙çżżúű?ź{ý÷>ň䙫·ůh ”QBh´fç–ŽŰ9}öâĹ+7®Ý~řˇ·ż˙ö˙řÇŻţú׏?űüý߼˙âk/źątyzy=RhRm;2{xÄ+´•\ľĽş±}éúí·»yçń§ľýâOőÁO~ůÁkß˙ńŹ~ňóŻţúďŕtľóÚ÷^|ýí—ś\Ţ˵Wh)+Çkńr'’o„ŇĺÉéŐů•Ť•őµË/~ď{ß˙ŢôŁźĽűŃgźů·‚éxďĂĎ>˙Ýď˙ńĎ˙üË/ßţéϮܾ=ąĽH5(9KŠIÚĘ“ł«GN\Ř8~jcëřĄk7^}óíß|řчźýáÝ>yű'?űŕă˙Ĺź~ţŮçźňŃ'żüćN]~ ÓZp“Š› ůÂ5);1qŚ IJ:_¬/Ż­=xűá7ÁqüôW/Ľńö/Ţ˙íWýűß˙ůźżů䣯ľúň×~řâ+Ż<˙ĘkË»—ŘhĹ鍀bE+ĺ@˛)&kuŕ"¦7vö~âéç^|ĺůWßüîßűĹűżůÇţďßő·÷>üä'?űÉźżúęł/ľ|ůíwxäé|kŐ‚Éj+Ą1“'gEDP"2µůd±˝ĽąýŔăO?ýňkĎľţýźđŃWűűW˙÷ź}đáGź}öŐ_ţňĹźľ|ď7|ňéÇď˝˙ëŰO<ąwéf(× 1ťU[VÉű#…`¬Ň[ŘĽvßŁŻżýo?˙Ăw~ţËĎżř⫿ţí“ß˙ń7źţţo˙;řśwńłźż÷Ë÷>řŕˇ'žŮ<{ł»u…‹:Äčň›´btfŘń•öüÖŢ…k<ňÂëßńÍ·_ză­ź˙ę×˙üĎ˙üÝ—ţůűżýőűżůđ㏟}ů•ç.Ď.oâÍdmĂ/Ä‹•v®ÜHfňŤ)€QK3S‹« ®śąyűĆů+gOś9™,¤YŃç!(‹‡´Á¬Ú„¨M°Ö‚xN–âéT©Rť¨O´—Ö77Ö»łÝc'6ŻÝ{îÖý×N_ş|úęÍ#g.V§çřpŠ’rţd— +–LNĘ⢜(ăA˝íßŘ:?·~<šL•réµŐ…˝Ó'®ÝşţŕŁüčG?|˙Ăß}đń'ź~ţÉÓ/ľ°}öt}zÚŠłˇś +âła<é ­=»uúF¶9ť®4ŰíÉ…ů™ăÇŹ>óĚcďü䝏>ůěó?üţťźľóĆ›Ż˝ňň‹O?yçű®®m-6gx h.Ż‹ +šŔ° p ¬2cF;Î0B2[]ZľďÚŐ×^yĺµ·ß~íµďüęWďţĺ/zţ»ß>wćřĆÚbąŃL”jŚV[ ‚—l¸ŕˇ„dĄp2_nÍÍ-ź9ą{瑇žyö©ď˝őÚo>üŕ‹/żřëßţňţŻňÔSŹťľ°—-ě°×ŽŠŔ «-äţ!Ă Ę9¬q»€¬‚Jf˘;Ó[XÜÜ=yňÜ…ó—®\ązíĄź˙Ń;?~ĺµWżóÂóĎ>ó­W_yéţ{olŮŠĄ+nݍ÷P&uÂE#ą.Żd]0 '—V·.^{ŕégżóČcßşxůĆcŹ=ůÓźýň‡?ţáý÷^|âÁ[ŹßyčÄ©˝Ą•ĺjŁɵ SŰ|¬u÷qhč˛ÉÍęĚÝEĹ’Ĺ••ÍK—ŻĽôÚëŔ+=ţÔSwąóÂóĎżűó÷źyî»—.]ź_ZK«¨7pĆŕá5fBct™ť„ÍCąP†Srˇl«Ôš›]÷°Ľ Ƭ¨×ŕńęś$G%kmÄţŤJç¶CĽ ­Ö`4ˇŔÇňR4çWRV'lvy,nńú`&€ËY1#:;é$C6Bł!ŐFŤr">‹“´Ă,%§€÷FYĺ‘$ŤGSůlłÓ]ŮŢ›Z^“â Ψ,đŮŁ˛az·OďäTVRc'É@Â)"lČIř1Vż ‰r0š…“©D±Zë-”p(­Öąl–gýŹ×ŠđNBF¸8źśôř’_2j '—Ľ|& ÄŠąr:™e%(Ď/®Ôj…L&Vk5”D$Ę… 6iG$•Ó»GµŽaµuHí·xÍ0řĚ$#äÓ…^$^L%r.]=rt+›Ž7ŞŐ|ˇ89Ńę´Ş‰TŃâB«ŚéˇCĆC#fđ‹ĆŇ_‰“!VĚ +J:φ’’“¬ĹJ´č‰tąŢśi¶¦i– G“| âA}Z+yŘ€ö[1xJ*1Á"Ěeˇ­nŻ—ŤHńHjĘźÉ67'–/Őföč@Ěj· !MrĽä„Iť QDĘĄlgʉtĆŚř˙úć¨Ů#¸Č°ÁIYĆż$E"ŃT(‹& +,ëG!”Ŕi.ňÉą@¨$Äúţâ> Őo2ěŇŞí „ZÜ´‡‰ăl˘Ř[Řą©ýo_ + ä‘pR—7j„üŁŘŽ +&ŘżDżoŘpXăŃAvŘŹĐ1_¨F yśM¸éhż'‰łŔf\¶`a,ŁlĘÉĂ—Ćë=¬ćť(ot‘Z;éâ°”#•-çŚ.Ě䀞٬‡–H)cÁ•rzczčëCş*đşDě/¨!%7Łh”ÚF<ܸ ÖŮQŤ uá-ć&Ălő§íŔŠqÜŻÓ ŚXĚn?ĚÄDâó\bĆÍf†ôŃÍšÜĚÖ5˘˛ęôNµÖŞÖY­N‚—stcDőN~ĚBŚ‚ +3î>¬_Ä9‰°ÉĹŤë!­Í«˛±*»Ď€5.ż“ÝŢP¬0ą¸qJ‰ĺÇŐF0NJ°€ +|¨yHëvâ‘!µë_÷Ź ¨.<j—ÚB<~#,€ă‘ďO´­¨8¬u˛ˇJ¨¸Č<=hŔěôšíd˝˝“ÁCFđQv6ç +TŔ•ÁŞŽę żĆĚýć·tx‚MLËĄŤpe=3ušŤOŤ`7ÂÄłm+Äóf¤ßŃÂĎ)Ťęô©l{×E§ŽŘFTöx¦kÇ‚űFm#FLcVfäj(ż §¦u&bhÄě„ýF'«2áf7oeG˙Q·~“I.Ö9<î:¤¶Ö´Ö!­Í‚H.&˛bnÚC'”d'RÁ„,ÂgmxČNFÝ\şß2”`ńš}#Ć~™Â|iĚźu{ŁÉâb˘¶yPĺ8¬˛j¤Ç—öFÚ¤Ň@Y  P®¶ńéŤcPk1¸Ě0/ĺ—¸Ô4®Á &+\(gpÓ äT6Ż +Z°(.7Ăĺm+ÔąŤNŻ’hZ`żĘJŚ!ufL&Ä)Vî.©Ŕ@)łă<0ż`ÄôNźŰ÷En_ě°ĆnthĄÉ„ę6eDĂn.Żvú‡ ¨ ŐVěş}†qŤÔ"µrăAłˇ˘ŢÉęľoŮ´°Á0#!#?=LĘ‚)*3iAE@ýýNzz|¤ßX8Ę'&ä\׊‹ç°Ú ʸ:0`80j?¤AF „Ů# +ŃžV†tđ5 G¬ ڍőŢ8ďůRóŹ3a.ZwqI˝‹×đŰ ÚĺB™ň*ě Ž] Ă’’µ®€ÖÉ»¸,í’ˇ– ‘ťd@JŞ}\Ě-9鍓P;¦Ň9aEä}F'‡Ř4Ág|rɆČ#:řžCzťnOwQŃ!#î¦V2âá2t¸­× ˇ:¦ÇÇÁ !°Ć58nł¸9IŕýÇM›t¤JFťf$€bž@ě°Ţ5főŢíZ¦"Ť@j*ŰŮga>IE$g˘ttŇí/°° +čĐ! R¬żĆĚí!cN*fĹR(PJý Ú5¤s›`ŢÁÄĽńIW ?îâLŻ$*Ýĺ“X°2d& ßNČv˘ßbDµÖA›]äŇćéĆÜ1˝Űk} Ľ_âr¸X%-đź8ó‡Ë đŽZFŤÜlÖý™y&ÚsQńp¶ÇEkzW_‚]Śť:‰!=lÚŚH0L—<\rÔL i=`~MHČ+zŹÄ'»F$°oÔb†x7%k,Ά¤“n!AŐ…ŮLż¶‹ăl'˘FX>¤uŤŰĽV:ÍF'CĹ9$Sßm3bBđťŢ(Ä&TÖţ˘Ü_„™Ô7¨÷čŔ™2á.TÍpPcĺFu  Ś‹ăp¤v0·Oĺ Ť°h§’62aĹ#őŮ“©ć˛• B\ +ár7ÓIN! ü«q«Ů2Ń;nĄuŃLÄĄÂzkíÁxsGI:‹2 ŚŰ|v_ˇ˝‘¨±˘ÁQ Ć|ĚD€ŁňÁťëĐ 89ż(ć­Ţĸï‚$D©GZ;…ŮÓ„\Ö8ý_cűŇZ;ĄwzUF\k÷´:0ć>4n7ăZ‡P*A+,čę̌5S ôM.]ô +ŮŻŇö‹‰Ŕ'<ŢĚÝőÝĘţ1'­ŤÜ7¨7!¦ţŤĹ~4XEÉtXuŔ‚0ŮĘ&ţ,—ťőH%›`Bµ™µË«ź°Đ;ň†ë䌜 fç©X÷ GĽŃFg‡K÷ [FM8(°.oŇť¬Ě]H4ŽĘÉúĘń ¨bŤ…ęV6ĄCd=$€4fé?Ż÷żŔ':(›Äą$Ę›żA7 âJcŁA)vŃq &;č‡Ď BŢ„Éă6jĚŚ éÔĂ0›óĹÄZ©™3V_fŔ< ,Zq |…âµ?Ħ`& dzH}Ȳ_ĺ1‘&H‚¸")Őép‹AjT<<8ÇČ9¨d^W©ę ÁDö.Ü!…ô7 · €3é˘BZ·ÖNc|dŤŰF|i)7¬®ń 0•Xt'm:đ 7’8äö¦ˇNIŹ2j¦]D„7âËŽéáqvxÜyhĚiôH&ďKL)ů`GM(@•~/VH3’ýµÉBČU!݇Aů“Ś59Ç,T]Ó;›ť9(,yüł7ˇÇ\,FËKd¸ćög @}­Óń&*dSȵ3íU!ßsBnbٞr%1u 61Ą…)M•Ë_™Řo‡7µ|ş>ł;jÂđ@:R_‰uvâÝĺĹ+í#ŹDę» py0,ŘY`ĚüN6éňĺŐ.¸h•ŤfořX2ÂACżEgĚƤŃđ„P;ĘV­lĆJHt¸ŚË%ĎÂ|—‹t´®®˛±– @mh6p +€Á7Ă~€WCH’ µÁ­wNo¨Ľ/5ČÎCBŮă/zŁÝÄĉPyěÁq§ŤŚxr@e¬rć T°J¨ – ý®_~ n.6Ť‚Âk«¬ÔżěÓy†5nŔ¶ ©sń¨?s”/xĽqŤh4§2cŔŻ őŹĽ¬”—ĄĺúôÉSןóĹ[p iňKTd˘Đ9Qîí…ë›ă˙‚Ř$0¨ „RB $B?śŚ8-e#ĺy'ç ”‰·řtOެ0É)V)×»['nľ ý„\ –WăÍ#ˇĘJ¬u4Ú<âĎΙ1É+ü‰Ö(€>3 0.V¤ürkófvćtż®…p1Q*Ť9!3f%Ăx¨¬nM¬ÝRj2TY°3ˇAŁÇN)ľd»ąvţÄ­ç6.>Q;…Ę…p˘2żuŐk XHŕú¤â|°¸)mĄ´RžŢň*y˝G׎ń©y—§‚ Ŕş~·:_˘şśnmŽY}#VŤÓü€7RGĄb €d3ÇÁ÷ę1žO¶ +s'«+głÓŰńöŃ@~‘ }ěůn]¸m%Ĺa#§˘ťÓá‰ŢHgĚBŻXj®Ěl^˙ć°ĂÉDdRnK-\Č.^ćËkz2Ę…ĘwžýţěćĹ`¨ Á—ę%:{3»Źd§ÎęÜC@Î}Q‡tа…T»Dě?.č `‚ÁNz(ĹĂĆ´˛Én´˝“ž9Ó8úŔÄöĂ@@üěu'·ąč¤ÚÎö[\<ń¨PÍÍ\´Řŕâ€_%üi3ĐŘŕÇ4bőö—ŽÚ—FäŔ˙h!¦XaѰ‚MŰ±Ú +´Ňď,lFť„0jĆŐnLşť#BNČÎĆ›kŕw@…±‰Ą±(,g;'AMë·Ă5NL ¤¬t^ëT6~ĚĚŕ0đ?Ŕó‚Iň>V5c~#âÓx|n>«o”ΗV.Łľdir3Ń\łĐŠ' +ó\z‘ŞŃÚF¦s‚OO—‚ Ĺ`aQHő€‚sé.¬›‰Š߯r‹@/TX”‹«RyťĎÎą8&d#µ%"\6a©TŮX3ÓZ]:qsóÜĂ­Őó.4O]{2›.+R;ş¸÷řŢo–6 ă36&>b!6..Ź÷ź­¸$Rëöügă]ť›?¨v«m´ťwg&Âv&IF[ ‚…j †4˛­ĄĄă7HÝÉD,¸ßéĎ8ü9Z±ÚňÂŢť`~zĚNšń`zę Q*ŇR÷;!3Ddş…öE;†…$äű«AÓtŞ'WJó§Ž^6?sň ˛Â%{T¤íňeC ęń~.‰@ćk•Ąb˝@~ŽőŘÔpíac&$`%‚ÓÇnl]{zjűfyń"—™×cˇ}żĚîőCĹ%`5mD”‹MÚ9Ą¸¤‡ĺ}#6Ł›‰zT }hŘđµ}cCzÜ#ŐůҦXŢ”Kë.*mAFiÚĺŕiH jĐA¦sňŔ_éś>•Ą©Mŕ˝ŐNVŐßBĆÄ"p#DĽŁGDL.’ц“O;ą ™DCmD¬¸Č0ĆD!oČř…ŚF@¸2xőŰUőŽqŔô¦ËËJ~jßi@ďŃy\®Ć[[éŢÉp}ŮŻä·ĎÜi.ťÖcą0ßZż·ş|-Ń>Q™żPZ¸HF'ŤmˇţŚ ô˝4sńe*4©ÁĄ Q'¶Ř](žBŃÁfĄż:rŔ`ű“„Odvr#?s";˝m,O,ź«ÎťbÂu>1‘žÜÎLnĺ§ŽŃ©)wń‰±‰HaiČ€ haL,3ń):2éŤLâRd˝Ëçˇă ¤âS$äć óçy§Ŕ GÎ]{ěe:TU;X;ˇPáÉDk{~÷ö‘«Ďĺć΂ĐŐ¸!3ɦşFDR;ąZtÔJŰP" Ö÷/ä,xpČ„ęa 6Ąâňěî}gVqí;ňÚ¨G…ĽÍ3˘A•“µ“17•&Ą!Ő@í·ŹőĄç!ľ¤qůő·:ňFčHĂînJ¨Ěl»GäÜ4źť‡-w  J“ĘÍ^˛zÓă6—ě_QTý˙Ý iČHR{,¨Ż,›!ţžcß80®# ”éä lXČaĄCN&;¤EöÖklśÎĐąŁědT×_° UW`*ÍM9¨#p +byÍ,Q±)±˛ y«owuń9; &Á_´vFkgŤ.?Ŕ“788ŕKďµíµbĺ#Í~Çőqű°xEF`±@EęL´*&ëŮÖ&€qĚźŞ-ś©­\HvŽ2ńşÇłŃ3ŢďNĆ*ÔŰ(@îŢČŚR9žlź®,\·ő›?ň’ôĹZ@4UZçńYČ8™dST(QčlćZën*čDý±ň\{ăÚÂéG–ĎÜ9q뻩ÉJŞěž¸ďÂ}Ď`rÎB-t–ëRa5×=ÝXĽâđfîs5„N±É)&¸2 +˛{ÜHł X @71:Úb ŐÜl +`#)䢕…ňęEO `đ‰ęf¶}*\XnĚźnöź.jś¬/X8÷ŕwDg@‡‘ÖçÁ)Č_y¬ľ“‚tFBe§€usóÁŇRqfwőěťÉŤ«°\őE'6NŢrQa$°Ńv0? +¬R\Ť֑·ŕ01ÁBßĚ«=FXVĘ«©©ť`yögí¸$§'4ŻĘîˇ5»÷xgçNiĺzjú´Ë_Ř7ęrb‘•˝GÝţÔµsÄJë0 Iŕ"#Őc‘ÚÎ!µűŕ°AkĹÜýë-Î1;3îŕ@„»ř›î|ŁĘY~ÄĐo7a%Łn>ʇęÍ•‹+ź4€3âSVTJ…Şt¬E'şľÜWXsř2.*’(-Ŕľńă€AyJ.×čŔäâÔö}ÆCc–ýŁ–!= +˛ľż{ 3ąE°…xPg#p!GGbaF*ÍÇŰǸÔ"D`U#ş€· +!dŔŰŘpCHL›Ĺŕd:l'‚* %pă3›ą`EC/0PëÉ0¤3ŃÍŹš˝:—€ ĄPažŤÔ¸č&D_´ŔÄ@¦t33Űĺ…ÓńÚJĽ¸Đ[»­ĚşŘX Ő ×Ź`Ŕ6ç”ę&ťłâš"^ąŚ˛cRŘĐBőÍ,#LŔě+8ű|!íW™ľ1¬3A<›3‹±úvsó©łÁâôĆ_fTŤ1Ý]Üł!ŃI47ŚÄ°#üe\,ŹŰĽűTöý*»ÚÁ`BŢďŘĹ ±B˘îab:'kN „ Jq~ň8€‡67y öeŚ.^e¦ţ·«Ě8ÄD46˛˙; t.ëKtÉp‰·©Ś+ąÎ1 Ôs.ž›XOO±ű˛z,¨GB®úSsRqCe ŚÓáf ˝Č§€ŮX!•¦Ú!îs«ĚdˇľÔěé·‰ÓÁzXÄ•ş\]Ź·wAU?0îö‡k‘\{DÂa`ńBl´HM’Rđ…ÖÜżşb„$\ČcRň%ý©n°ş)•7˛˝sJeM´ Đw®˝ |,¨uý&„.Ik„‚ŹQ±ŔŰóîľ Cýfő<äM9°0DDäpebţ„“‹ŔËÎě.ť{réÂÓŮ… Ţô ř"^Îtg·ÚógĽJUçá´.ö.‡,FkLĐŮ1VÎĐb‹¸G2ĄqŠ “ÚFŤ›±Ă*{żŐ¶ťqôŻĐ6pˇűĚŚ‹?™mŻÔç·&×ĎuŹ]ď˝:üVmń¬ŇŘ´ł±Ty¶ᔏ – +ŢP ÔĽá®LĂlE€I¶Z<‚­żuZÂŽGŤ.Îěń«-$îËŮبWĘZq|—‹†!Ť‡j\´ži¬¬źĽźRĘ``űşÜßq¦"ĄgŮĐâËi쬫§*‹*3±ÄŞ˛2&D!ĺČ4PNŹT “›* 1fęßX –s˝˝âÜ©ŢŃ[raä~abujý˘ĘJ›="‚QŇX äCą8ȦDm2 ŇŚ Ý<~2T+«éů ťÍű¤twzéäëďü6čŽŮüp îK-ĆjëG/>µ~ái2Ň90îqâ!R(‚\Ňp·D€ä’ĽJ‡‹őč`ó1,Đ)•ť0eeG,>ťCࢸ”SŰIŃ*„„ÎIŰĽ ŕiˇn.G„D°Hwٵ•@aZ,ÎGZ[ľü"› BĺüÄVoó>&Ú·łZ—hÁ˘(—Äjň@ő.ţ 1“*mńHf—ß…JB´Tč¬úâŤtŕŢĄPu!\[”–‘Đ„I áĘěĘŮÉ•ëv*2dBt.ÚĂ$ ©óJę?kM ™XaÚEűŐöWQ¨g^ĺŕŔ ެä¸9”wÄő;áŁAźÄ*TÎ4–ď<óÖsßűuuá$.çĹüŚźËOí&ëŐÉcíŮ]VÉqJ U˝Á*™đ°yµŤ?4î90ÚżCBKkŁGôřÁ1ÇËÎ3n\ňEšĄÎöÄŇŮQ;i@D+5‘!"\ •WĂ• &Ň`UžÜHV—ŚP@çdś z“Qđ`Íu…éÁqǰĆă>MZQiÔ€:oEĚ—ćcMŁËgÇ‚ ©(dzt˙™ş&Vp>]joT§Žw!‰: Ĺŕ`l°X_“M ©lv$ŕ¤Â¸TôĆZl˛>lj‹‘tmkď&°ë¨XŹTv˘Őm>ÚVŇSB˛ăâ2ZÔČ& +3Ŕ⳪m>+ž"S­ĺű«·HĄ1¨CI!ˇŠ‡÷kşoŚŰ‡ĚŚÎô0ą@jĘÁD-¤¤słű†Śŕ5¨‡ŕ@V*/č#”şXZóçá@A鯌néÉťhÄÝ흜޺ăüSŰW_;ţHcţ´‡KY±ČŁa#zhĚ6¬qéťÜ¨™ôpI`‰G­Ţ1‹×čd€*ىˇ¤s“kk§¨,îIâX^M´vĺŇJ˙9ŰD|{żˇ/ĺGŠ<xÔTăXnr— +·Ç,Ś•>Ź *­<ćŔKĺŕ˝ĂЧÎá1BFH4'WĎö6/%š+“Ë{óÇŻŃŃÂ'éouVϦŽŰ˝Q3âc‚©©ĺSá\ĐŤpĐŚ„ěx áŇ6X°¸ůa­k¤ßŽĎ †kHăÖąqV%=7+g{„ž^»śkµ3a,R‹wNfgΓâ˘ÍöŇŮTm0;Ħ¤ěŚśžˇÄ»ÁFjś_? Ő[˝ ´vl˙~PőŻŰ#"đ™*›WggűW‡lŢĂZ§“a. |BĽşę‹Ô@, ëОrAeBĆě&grrŔx¸‰Đ°Őą5fđEmĹ€Ž ča`'(‚ôE(!‰ř’Brňřĺ'ç¶nŰćň&I±4=\ZEŘ„ă:¨qĐCzŘMÇá!ü%ś/úăS.:ˇ2a¤?*DJŔáüË! sz‡oH ŤčáQ3¦ë—J߀Ę>fB€Q±Ŕ~@4 ą @ÖÁ%śLŠ ő"őu6RßľÚZ9źj¬—¦¶+çKó§Ąâ"ČD +=:TÔ9˝vTĐŘ˝@;Ć Wp>Ă…kŔŹešGĚŕLµ.“›…}©Puiöř}«ľUÚ9qń‘7žőĄ»N6éá˛n6Mȵ@z>Ń>“_¸ćËÎb|*Ű:mlp‰6ŔkżŰ­`DÂ\¸ë¤ß±Ü3l9¤G]B ń´ýQ}¨/./ąŮá•lgyűĘÍÇľ»ręV°¶|÷6h±·y˝˝q… +­¤čKtJS;ÉÚ˛?Öä'©@\cAÜDâŇF?nĄ€]ÔŘ|ŹdEó~`Ř<˘őč¬$%¸Č$ě/»´­v—OĘé–ÇäşµŐKÝc·Ć:{d´­sůc™ŢĆ™;6:8l‚őN˘ ۱°ÚäµCȵzÇzk—ö›÷ č@`¸˝q.Ů#‚50•@Ô’ĺů©µ‹€—­ ůŇn6±q'&ůÂ‹Ź ÔŰ÷¨ˇ±’F§oL"föđVČ?0f´@,ę‹éě^ińňt{ Ęi±¸”j• +ĺcĺBßÁ:y-łWcˇ-hÖa.9¨qŞťÖ»ĚXú÷(Ă.LŇš‘1=4¤vÁŢĘĹľyHóŤă_?0~`H?¬‡L?#dÁ!ejórrBcBh!m€ý##M>3#–V˛˝3™öŃîÔúë?|~ű`F@CJi^ČÍJe3nĆńí.žłˇĂcĆaµIkŐVbH#Á‹¤şď "PäR“éöZ±w,Yť;}ůöń«Źr‰Č‹kr~9=±Ű޸żşp©ăěoĹžą°C ×FÍň[0Ĺ+·Ůđ|;V1÷¸/7jĨśŔdÚ$e#PC"|ׄ71 ůâ`¬,dŚ +7[KŞ˝ă©ň|˛2íbøDkúţ(GÖ:x“[‚Éh¶˛Tś8r`Äfr36ÔŻíű“,U ±ä¤•îV˝· ę$€,>Vá"UJęďáĹDŞ_ÚCESĹ^ş2Ż2ĂăFŘäćÝ„„ŇäöŤëµ &”jęmĆ„K˝ÍůÝs'äs‹nÉJƧ–Ď~÷­źÇҵ…îaS”XĄä.Ő ýM=pZ*”fN +‰¦ĆŚ‚p×Á: aóđ8ŕÓoЉ—ÖÁ˙ +˘kÔ®¶ŇX4Ú9;,{Ľ19Ů>săIŤr2DČ’Ń&źźUŞ«‘ňlwnëćcŻ:GgŰÇňÓ{b~ΗśF¤ş¶o!hQ)]ľ˙.ć¦bÍŁT¨á4šě!BžŤÔI©"Ä;éĆ +Ą$Ąl`Ž’Íl%•‹ł1°/G)M u0É;·OĺR9}&"BG۰?Oř3ł«JťM&R äfíťÂě™Éők+'¬,ťňÓ͹㏽ü.o›*•ą Ś%źľ»+wÇF†€ÁË´Žö÷LąŰŘp·#¨Öá‡,(›Q3 +ôÄX˙îs›ě:0Ř™î :\Ą©Zçh ?ź.NnV¦ŹrAűťtD…W*ŘTŰ8@˛&(hńČf;ëDezCZT{ZÎŤY°!IEÚůąsáĆ6޶PQ3¦€Ś’u‡7ěfSŔŘ€úHöú]ÜÉ~ im$(#:©µŕ/( 2:ŕ»+×€VŇRžć…t»ľz±{äFďČ˝sÇnÍďܬ¶!R¶!ĚÄí`r÷÷lrÓ);¨QŢX 6_©hL¨ÍpŁŠÎL8”/ŁŤŐy`6+$çő¸)i@‡uěśÖćsÓi&ăáłN6ó9ŚrPŞö6ő˙ÍCj­ ·@˛ŢÁkí^˝Ókźž«Ď»ŕ $ô¸,™Ä„TIĎě'¶`™3›»7zĚhÇC_ŇłőŮS“KçĄě, xąÔ}艗˛ťă˙zP?jBôoĆ#bj*;±ĂŧL°0ły՗اr ›q¶yă€ÔIą^Ş:7˝˛×\:e"DBÉ2m>Q'C…dsei÷ľőKOCR1T^Š46=ţ‚9€úŕa#‘..FJ‹?¨vÂ`cť»­ĆŤPpĐ@ ö÷1çh¬já¤BľTO,ŻE›[±ć1+‰¤;7rúh6V +Ó|®Ç%&Aݶb’ âi©śź<ú‹Ăw}»ŢÎL80ćt’ ŕ¨kť#§®>Žô/ŽÉŢH‹·,ŢžW7:[÷óÉVkvg÷ňůΖŢ-Ad˘áţUd˘ű÷űĚnźŢÍjÁ٦vúMDÔ—śMÖŹÓµ©ŁÝ­ëKgY<űđĚń[\rRʍ?ť¨Żĺ§Ž{(­”\lh±“ «,´ÚLël¬ÎB9 "?ëSŞß8¨R9MNÖ`#Ť6ÚčŐvńe§7Żő˙_ C: řdox‚Oö,xôž!»ÎĹXpÁB_”ŠV€uol\ËΞĂc] ´,®‚Ä·Ňá[żŻŢΚ]>• ßßßľĘ6jB­¸d!Z$ rłŢH™NTť|X.ÎTW.F››ńúZ¶łťjmСđ϶ţ–.\t؉ţ…t1Sl.;űmě6ą¨0ř…”Ë@}LhČBÄśLLÉOCţÔ!Ťdşmd ?^Pű“…öÜú‰RoÝŠ ‘úZkăŢąÝ;3[·j {ĄŮÝ@¶L4zîíS˝˘Ed;I·w&Vo$껉úq.Ţ5  Ń`˛AŠąqs@ŤÔ`cVŢGÜ\>›ŮľxgďĆ“Rw0:T´ŇqB©¦[Ůönbň”ĂźwŠRYµÚÎÄúË홤 •ĚX0ß;ŐßÎĎÖ_ëć˛.*f% °@‚¤»)9\čZ° Ţĺ'•J¬ą™ź:9µyĄ±x¶ăRLîťŕ…7ßÍ·–Çmę/a.VídLçĂI˛:2lB´n–J`¬Pąë·ĺą?Z^śYÜ}ě™×:+§'6.wŽ?]Ľ”™;?qäľéŁ×fŹ^Ť7Ö’Ő…×~ü›+˝čŔ$V.ŃÁ†Ů#˘ Đń–/XuăŔ‡’KČwhÜ~pÄüŤÚC#’2éŤv(Ą--ĐJ dt5Éč$“šŃy|D0Żg@Fx#•hs˝°p¶ąqµ±yŁĽz-4±C'»Jş·yâÁůí›°CÄR´˙TÉ:›ÇSýíÝŤřaµKÓżS@µÝkBeÝď<Ł”ćäŇt˛1?ł}}fçĆÚŮŰíő‹±Ö&˘Ôět˝{ Ö†‰:G˙y3\Şf'Ź—fÎ ‹°×8Y+ĐD·ZŔ›|¶¸äb°°J…ŞcFí ÝL@ŤĘNd˘ŤPq6Q[?ąXfÉĆJ®{,ÓŢ”ósáęr¸˛D‡kÁD}eçňäęI+!|‹Ö–ű­lb¨\ëď4jB°mçZĽ4§¶s@Â,XĚF¦Á v¤0}üâťĘÔ€E0źńĺć¤ęZqöěÖĄ§Ď<ôFsă>—-Ôć×vŻcţ$±hy­0{ąşt31qÖ—čdC[{÷%k뇴ČPX«×FĹűÂZZNLî:˝ńBcąÖŰďt3 T.ăJ-RZ‘šÜ‘2]`Łů,É ܧr_Ţióń)#$¨¬¤W)'&úšs)Č—BÄŚ•ąP9Q]đĘąňÜŢŇŮGSÝťPydfcgVö¸ńÄ›KgÝLŠ‹Nˇ|ÁŕćŤrLçR{Źą‡u¤?15n%ţĺ€ú°Ę5fŔtVĆ‚„@ŮFĆ,hSŞŕÓ &»;˝w–/¤rş©°“ ęÝ…(EĄ, …ą0˝pěęÖ•ÇĹb7Ú\ĚĎžč·'Ş®§Ú§ĘsW"µ !ŰţmeNLl‚KÍP±i6µ€)-7“6Ł’ĘAąŮ„Űź7Âbs. ZF đ™Ž$·a€â „Ź Ů^aúTméˇ no8ß=•霊U7ůĬÚÉŽP'*ížy0ß\ěo2+şŘ ë(ĺµtw/ŢÚFŮŘ©‹·Źť˝ Ľ‘‰ÔV®˝ňÜň…g…ňş ąéńçŢ]?«vń‡ŐÖ`ă3b~ń—´ň'ŹÄĂFÜ ‹v"ŤV„ěś?=M +éÝËŹś»ďŰB˘mĹd˛)ľ«®ö6/o_}¦4{*°/K+Mť‹;8nűú!Ía+p࣠(uđž!łŮÍ…Ň=Ť…ŃÂ*3m#bý-G]"ĘeŻCů$k&ZGŇ“»°Xe•bˇ»Sś=Y[ÜŰ8qăÂírÝM>Ű];óŘî­—{ÇzqůÎ[­µëL´•,Ě/lßH·ÇťŚ–(±„űb€sµ6Ę +J¬VÎ?Ö»hPHĄin$ş;ÍŐKŐĺ3\˛Ţ]?[śß 57”ć¦/;‡‡ý§šăM \ľ\ĎčUś´Ő—#ŐŹY…ŞŤ8|9,Ü + n UĐpÓ#Tpą +Š0ź5ÂŔlű6îa#N6©®NlŢjąUś?źîě„k ľU¤Tszçz ?-f›Gn†ZÇĽÉŽ7RÄ:µrÚN4o¨´ÂĹ;?ç‹6mXHďd!&5SşgČ6 ö!?.¤ăµu6:a‚e­•ăM;.hlÁE’ß˝ú­WžhŻţ$˝ç—#YvřWH˘i[&+=ĽGÂ{Ź@Ţ{ź@"}VúŞĚňŐĺ«ÚTwW›ißcÚĚtszDÎpĽ%93$%‘ŇŇJÚsV«ł_÷atN|ČDf âÝwďĎńî»eǬQu©*žšě@g‹Ě{IK¦ę[©ęz4;őŕĎśóĚzH/˛-DĹ@ĐB¬ ‘Z¦2äbŮÓ >.Voťż=şôjmýšVZ ĄÉ‡BâÁ¶WŽçB`ÉwŁĆĽxOÁćCD4S_c'ŢĘľč (ę&ev¨x7"—ŐDýÖËď^˝˙.&dCt޶z7·tͬmjŮp>"1ë&a¦Ř˝Şćô>E©#B˘L/Ş?=ĺ[tcµÎÖ›}˙Üôě”wÖEůÉ8cvŐĚJ4ŐCi­±ĽGŞYç¤=W‹/q1ÝÚĚ/Gsý}˝ĽĚ[őlűüŕčAďFq¸ŔS-,“ńNXČĘVŁştČÄŞ“GY¤‰žŹĐŔ•°3NÄ ńŕgLHÍy°făbş×Üş˝őÂKG/UVN–Öż˙Ă__yř3i~5NôN˘•óVë°·÷h÷Ö{íówó˝ý돿IĄ6,&Ö˝ăôŇÍĺËď-_y§vţ^±ł˙ÍŻ~óú7čÄŤą <çÂ’‡ÍP‰a´¸™kn_ľýęčč^aĺJuófaĺ’^_ݬ]nmÜŘľöúń‹6̶w.>řčúkź®]~­´r])ŚQuňl'ˇwl°:ë#˝¸áĆM€Š„Vç¬6"ĐhÝë¸RqŁŇŚÚŚýq˛˘µ •pŔ"0_őń%&^Ős­\cŬ¬q©eX®A|1Âf||揻H”đDdpĘb€źlŕˇ!&ĺGuđ"ÄX€•`> ň›5[@•ťu!ö0¤˘.ô“"­çät§˛|Ň޺Śő nr˛¦ăŹOÜEAÎ /źá“]¦ŰŔ¦1¶ ´čcç=„+Ě9P-ŐŢmożPťČů• źťó1ĽVR“ť iâr>D%#lž7š.e‡„Đdé:ă$ÜaůąsgO{ž>ăšqŕT a +*¤€ćęy‡ÍKÎ8Ń??ëzv6pÖ…Ďz©7ŽK©Ą‡čVZŤ–·^Ź9ÔÚ,/$:‡bf‰Ň +j˛iVÇb"‚šE2ZŚU¶âÍŕőlaä0­SZůĚ"7Y"M?®sáCŁł.€đäÉ@?Óqđë´;˝źu‘6XóSńÉŽ9BJLµ’­m7’ĺXˇ‡)i%ÓŇKŔ%‰ÉľQ\ŐKcT4(ĹdăĹ0kp‰®[ŢčT(hÉa4ł4 ĽżźńŁŠýĚé9˙3çÜŔDř‘(.¸HU …ŢÁ*pľ—^Jw·05)§ę­Ťëzq`•±B•>l¬Î 9ن¸„YYI··©X)"ý4`:“1 +˛U±ĘC9Ó¶A‚Uß’ó#1=¨Ż\)övŤTĄŃŢ~ôFký7KÍ• ‡÷Ţľňř›OľuíµŹ/żňŢćő—ş‡7Ľ¶{ýµćřňŢ ďÔ¶î7¶ ö5×®[Ťó!ÖŠ&/ĽţYsóĆó‹đ” ‹HYĘlëŤ ąá5DĘPRňÁkó±ŠR\¤)ĆVűppđxĺĘ»Őí‡@Ćěß{řĆ'ůÁaĎńvX©Bjł4Ľľ~íýĚŇe?»tűő\ggĆĎ[=ĽdJůŢe Ń9Ł^ďt¶ď€DMuvńXŐKYV¦âŤdw/˘•ěa†3Š@OâJĚ…—ĐÂ|šK´Şk7/?ůniů(s1ŐâpŢ=iađ@˘xŔÚ»R ¤t4ŰĂI÷ݞ™H,úpŕ©kśŁë+Ŕ2Čé®VâZdČB= $ôą"”5ëˇăâđÔBäŚ ™vÓŔ¸Íź™LÖqŘgçac“=1?ćł6ѡ͖-¬ňj +âŚ9î§4TÉE‹kF}OŻíFŤR3±l“KÔś0'%»©Ţ‰Ő:JwŹQąčŁđłŽ¬—ŐxŐć#NĎyOÍzĎŮŕ…#l˘Ó—ÉwvC\śP˛RŞ•čě°é®ALRť °_ôŁ PĄ«śŹŐö'=ŻhG”€YC„ o5UzTýb€™v"Ćt„?á'˘aBĺ%#ž(%ňRNŃLˇą\mĺ»ËF©ÇZ>ŰŇ«ăLg­ąyĚPc¸pďÝćůŰ ’Ľ^BXÓŹ +ľ0OVW÷o'ëŔ«ŠV/–Ë©>m´|dĚBYQŮ8¸$ D©KąőtçÂŕđĺńń+ťť»JnD‹ÖťO~řë˙0ľđRJz}Ďě]-ďľvüŇ·W/ľmŻËVţ•w>Y˝đh!$žuLr9Ö<*.ß8óăXyMO¶îĽüŃŇÍřyH¶ÂÔjýÝG{÷>Ţyř‰T\Ď56îżóÝTsŰäL÷důäÉń‹źÖÖn ©ŃŃÍ·ăĺőgfĎĎfÜ´źH"BÁ*Ż·7oQrîŇŤ—?řÎŹ1)© 6»Ć¤ĆBncůŇ×¶n3Ő>ńٱ«÷ß»ňč}5Ű1?mŹ€Ęr„Ą ™ÄµÖ©EbʆnďßľtóUgXřÓç˙ôą…ű´í©©€#4Ďş‰íWęďáj‰6›¨R>×GM63B…,0Y!Băe"zP9Ě%ąT_Żn—–.ö÷î ąˇW¬ŇŠ”:°É2«ů?í&me FNyB¤ÍF)Éć罸źMřŚs˛Ä/`Ó¶0ËĹĘzi9»|itňjçŕaaí¶ZŢ™ó“^㌊HYÂNĆøB&ćÍň:,ć}¸ˇgúŕ–ś0ď@´çDT','Â*EŔěî0o”×@É3Je®°ÂÔh˛aä{0§Ďy ‰ˇrš‰W*+ÇŁĂ{íÍëR˛Ąg;r¦śČB‹ŃrkQĄ´­/ř¨36ŘůÇŻ0Ľ)+~T @‰i”6`Jw„DMáb.HD”á-pąK6*íŤ\s–&ßfVĆWÓÝ}-ߥ˘YJIŃ„¬'!.ąsN2”ZŚđɡą!ΤI>©f„Ń^ÉZaMŻl +‰Nm|©łs+ j“ŇÓůćĆámł0 +SV¬8Ö +#!Ů&ő€˛ ˇ{# +9éë?kCě!)Čd¤Ô˛–_gcM”Opr<[T;ŕÔúŽRÝIŻg—cĄU€ü0— #Ühóňp÷Đ]@ +ň@T3“ŹaiĄ8ďÂć›jĹ;ŹŢż˙ÚGö°đĚLhĘÍÍGĚ\Ő«»ziCŚfßţú—w0çŔžťňÍ{Y ţŤĆĹâÖC!v/Žł†žnq €ÄYr¦ ´_ié0ÝÜ s-Äű«ÓőU;$zŤŚV#Báž0µŕ‚fm>ʦXÁí¸THZÝ ě¤w?"—FovÖîŞů%ʬ*ůe9żágňŽ!UJL8|„ÓO‡đLZ8ź•]ŕË€aé$§Y)[¬­µ×®91ÍGę~Rw…Ĺ9ągFŹ—ć=$0ÂS‹‘i;ćǢ0đB*ÂÇAboH¨i/&Č©V޵ŁÖůÄ Ř?Vł#¦–Z[éÚŞ#Č?čAŕŁmP<@(µniŃ”„dTg]@I +¶‰ “\°fRîH(an˘LŠ—“=ĹjÁL*GŹLžžš‹J—C„ +Ó:Đ NHžr‡qyÎZpˇ‹\Ą&űQě6Ô‹%Ăb1ȦüD ˘ĄĹe*É,>;ś¬ KŤŠŁ+ŤíűŐőÎ DŚú.p~6btBÍĘ©¦śl"ĽĹÉ NM¤ę rÚă Ô9'Śđľ„pšĂgVĺl Qs^B÷ ’ ¤V7Źw/=`ő,(U=ż’ë\Rs!Ňđ…i§ň†ů¦x!Î aR‡ą4m`|.K’’ŮÝ˝~ýĄ=„j‡X®z ÉD/yÁŤĚÚa ÷=¤+,¸Ő¬0>nbc!BNVWâŐ5-?–3CÁęcRÁ‡Ş˛Y“¬Č«S3K±âNXh‚Ôr„éżÝf„!Äź:ăxöśgÎC…éL„/ȤŽ/¦e—P1„ŠŹÔuE4/aa €Ń‹Čçć.áŢŮ>ł‚ÄOZŔÇ…ńhg˘V4Rý˘ú‚/˘„IÜ’+Dý©¤jsî@QBŢÍŔX3ŚIîęô@оيÝéńř‚!L +S&ÄÄ=<ďÁĐť±Gć™3Îé…°–í^Ę ć •ý!Îî!|_YÚgŐś+@Fx0CD ¦MPçćýgg\óvB•©y˙ÔBČ’BhT‰—dŁŔJ™ fđOž[|fĘóü´ďÜdldÎ…b ŘŔ &LŰCOťubbމŐD `˛]&VťsŁv?~v1řÔé9§ňc˘ f16š­.ů.o”젳΀ÍG ŕđV’™îdzű§‘©E˙ÔśűÜĽ;!qRbi”U•DU¶M +ńrc9™kü Lé¦h–€÷âŃ);b÷SîKK>Z `Ň‚;b÷˘Îá âćśx ˘*±B®˛”¬ô#¤(Ć2 –íAś€yOźőś[€<áÉĐž;gźósn,ŽĘÖh‹‰oV˝#(ÉöĘEJ/TĄ×´t?Y]—=Ş-úC8cňd]HČE_ D8»ť^đ,8üˇë Q®  W&Z#¤ČgÄÁ-€9¨Ü3[L¬ĺš!ŔŘ˝¤Ýžťu;“Oü€Żçô<Ę[3ř™)ÇĽ=ÔíoÝ Ńy'ěđ`ŢCó–ć}gó`gg˝D@ŮŔçÄ@ŕ|şaŚ9âôŇU\AÎd#xÔfCJĽ©%ű>H +ş3Čž[˙Ůł¶î…$p?Oźš‡pç-›_tŁ3vřôŚ$g6F5—źÂ‹ÖęĎĎůţüôâźrÁC,x T1NĄĹh4ž·JcRĘĂ´"'ĄŠ±jĆ1’cĄ¤¦ÝAÄăGa\R­Ě€GěN'I‘J<áAé… şŕ‡ÜA”–˛ŚÖv…[?˝ŕCöNŕOE8Ó LkDő˘"đž ®ÁFsfmĂ‹kî0ç +2€ Ŕ_9-č…YwäůYĎśŤ€Pq/ÄĎą p'±DÖ4-06›;4ç <—M«¶ţÇOZčϵ¶´L €)0­¦B¸a-F-‡ „ÝH6â™–;€H'i%Ś +aT„QŢĺ‡]~=‘Ů=ąB©sî™9˙ł§l§ĎşÂ`´č$•ĂĎűá¨Ű‡¸Üţé9Ç™‡ĂPd9›¶ňą”8żÖq™Zć:;盞 ÁĺcNźs=őěěSOĎÚ\$)ćq.ĺńS8©hFVŹx-RÚbA>­5˝|ęů…çĎŘgćĽv‚łVćSłŢ9;ěđRaÜâ–ÝÇž:çzţĚ"-Ą!B;=íš^-ş‰Ą‹Z>‚iv755vűčIuL{§í`šx2 ÎJ2‰1–IĹ*ťf„c=T2R™rSKd"śč +ˇ 52ĺ¶š®?=ĺ<3ëuůZ%4͢Ŕ şO-­Ż+©ÜĽžvB®0“ +!(ŃxĚĘXVÚ\YYşu˙Ĺbk|vÁ{fŢ}fÖÍ0Ş*q<ď eY°¬Ĺ`vçĽŰăŔ°iŠŮś±ż»şs¸ÝÚ\JUS˛.˛ŠâÇĂ“Ý~mP鬠HQ™SIŹŁ´Î©˝@öĚ-Ŕ%’ůJ¶Őg´„™mÂŚ@@„uř°S3ž?=eł‡„•<;ˇłąÂśdjýÎň*+ĘAfá*ó¨ť*ĆCŚž®.q±<ÍcbrÁzBT!śŁ9c˘ ă*&d1Ö ‘!ńD\S´(Íń˘$b(„aA„ëőôҸ‹3q_ńú‰ ̇QĹä\~Ć 0¦ůC´Ëíô¸ín·S„J6>¨$·†ĺ+‡ýăýáK/ßŮÜëQ "Do܇âŃéůŕż{júŮł› wű)›- +ŕ8JŞ’"KĎ‹ţ â@̰E„#AŇĆQŚ)iW<5íxęŮégž_8;ăťšô8 +Ě.bĎśń?uÚóÜ9߼µ»q»3äö…cÉ\¦‚aB,Żh~ !ă—w†ź=»8gCë÷EÜN;†zU*¦ą^ÓŽŞ…Ş•Č(µJühłuăŇĆúf§T2Šů¸·xxvö™SłłóNź/$ĐŚĆâ,âŠËđ¸“)”MQcx•c:ÉR1C(”QŰ|tkďáý‹·ŻoÜyá|¶”9;ç<;ďő…OÇKˇ0°ĘB­btÜK7JŠĄÁŤĽĽµ”}t{ßy÷Ćoţú˝źţěó÷>x¸şRŚ™4Ĺ30›lž‹ÄH:š°b•˛Ńn¦›őLTf­¸A0śÍís{Ľ’Ŕ—ĘůzŻľĽľvďµw2Í® †<á©9 ^QŚŃ¸ěéY߳ϞŠŔa3+ň©t<ňú“0’¬X.ĺ/\ş\ít%ĂoŻ™´ĆA””-DˉLËáp"(pX¦•ÍcQ5ăS*˛=.ě ۵t9%oöłwolż|÷ŕÝ×®>~páĆ•˝~żfĆŤP ěőÁN +c:Ŕdça)$g±Ť˘V+h¦y8NŢŮŻĽq{íă'ľńÚ…ß˙âË_ýäŰOínŹŞŐ"Ď ę ¸#"´‰Ó±HÍH8­‰Ą¤–ŃŮNŮXîfzŤěúrűúĺÝăŁń­k[Ż=‹řdĚ^Ś…÷±űš7Zw. >xrĺ“÷n˝÷x÷Ăß}ďá?ýęă˙éKo=ľĽµÖ·, ĆčE»Ëi›Gýv‹ w’H'ĺ_.!Ç+ĆĺÝň…í8®¶ďwż°üڝяÖ~÷·ţĂŻżńť÷/ż°—OF»Ó1g „|8¦!oM‡÷ZÜšüčBńĂ7ßľ;zăvďĂ—Vţĺúő7~ţťŰżúÎÍúé›˙ëż˙úŻ>{ôÚťŤăÝf2i… Ƥ`% ©”ć—úŢRĽ—C—Jd-MŽZÖ¸›Zí%/ď4Ţyůđ·żţ÷żřĺ÷>üे·wĎo/ž·ŰŢćOÍşžzî¬Ç¶ 1A“'$HŁănä¤AÝĄ±»d>y¸˙úK—Ý9řúŰ7~đŐGŻĽ|;_4űŁĄöęQ÷+ű݉‚b\‰aű=ýÁĹÖťę~O~éróg_˝öÓŻŢx÷ţĆGÇű7ţőľřĂo?ůŃ7Żţáoüčł›‡+)™ +řÜŢE›Š€€ŔxŘĄÓžAŽĽu>űď_úéwţţµŻÝ|úęÚ_óęďôĆŹ?˝ůŁŹŹ˙đ«7˙ńw߿׸sXަšL&E5)EłEÇřP-Y)q×72Żß\~ńbíŃqĺËŻýú‡ďţá˙ę·?˙ĆŻľzô?~˙á˙÷˙üăďńÉŁ“ćçoüü«WŢ~´×ĺE{č̬ßî#0JňyÝ!Ż#â·ń¨[Dćű9ęŇZödُ;0.®$^îńŤ?x|á'7_{ń¶iÄ=‚yE3 +ŐIá[5ć…5ý[˝żřÚĺ/ľvé'ź>řŹ?~÷˙ýĂO~űłŹ@~˙—/ýá7ßüäk76‡…¸.P4Żę ÇD"\ұQąĐeŻŻčŻćľóäüO>đŐ‡W?{s˙‡ß¸úź~řäüÝ7˙ĺ7ţć{ţö«ŰżúňÎ+7Vsq‘fh Bl®@č IÍjň0MżĽcĽ}%˙ލ꯯˙Í·Ż˙÷ßľ÷Ź?}óű_żü›/oţóO˙ăý裣|đ‹Ď.}ď˝Ă«;ĹbÖr: +ŕpw+kíäJM˝ş˙úŁŃ_|üůëźľľý»˝őËŻ^ú‹wŹ˙ňť˙űď?ýß˙×O˙ůWďýî«»˙í·ď}÷Ă+Ý8vśť™µ{Bˇ.Ót7'Öô@Uu_ęł÷v’wv/_®~řňúWď}öĆÖO>żó_˙ţ‹żýţ“ß˙đÍýÝg?úöĂ˝µZw°d»>TŽVΔ j«B€Ó?ĽÝýů'×ţćË;ß}çŕ;oď˙čÓŰ˙ň›Ź~ńĹ˝ŻŢ=řé§×˙Ë/ßůÍç7?Řüđ…Ň~WĘÄXŠdff]Ď>3ă·ŰuĘÓI„ŹÚµ5ëŃIíÝ{«?ůöĂţĺ»˙ńÇŻ˙ý^ýűľöÓO®˙ôë˙ę­µwoTNFŃz‚‰…(NC¨hÔ(6ę­q'×É04zŇgß»Óűňk‡?řĆ•ďýř_Ţúűżţ?yó—_Üůĺ7Žţá{·ţËĎ^ůí÷nţęđíË™‡GŐBJóH ‰Q.Î J)+šDÝÂŃ[[±G{ÖWĘźż±ýŰżzôË/^řůg7ţçúňţçżúΛ{ßyçęv1”ô‡©(đ^g5].űęKGµĎ^ŰůęÝK?üčężţęŁ˙ýß~ţŹ?|ýŻ?)?ąÚřćË›˙őď>úĂo>řÝ^ţ§_ĽýŻżűä'ßľ÷É“Ýw®ŹşiIŤ˘L "˘ąBK`ŮH¬5­:H†÷Ěť­ěkWúŹ.¶oť/˝kđËĎďüäÓ{źż¶űőűă'WúÇĂôRAÖ$8S€’™šń!0A†˝î©řzÓÚĎwł—×ĘŽjŻ_Ľqsőő«ťŘa+şß1—Ę Ö˘c‚šźźä•¬ Ćs©t&&§UfĄš8\*\čÇź\iöęúŻ>»üĎ?{ňŁo\˙ÖŁ•oŢ<ŢMÜ_Ť=:_X)Š2ęEˇ08bĽ&ÍE ăhĐ«âţ‚Š®–Ĺ6{oŰzĺ¨đńýáďđřýá/ţů—o˙ć«Wľőřäâ¸Ň*$ču²¦>/đJ$šPŮ‚Á´ŇâJ5v4Îź¬îî׿ńâůOž\|ăöĘŤťZŔ Ů]Ž9›×bcé^®ľ­§ş,«q8^JčűkK—V›)âÂ@ńbçă×_¸q°ty˝ ÎÝî%ęYÍPYUV*ćŽD=¨±iBÎáRÖL7TŐ `H"ń´.§u!opăşu´\ľĽŮ:^Żí ňÝbŞ“K5R¦ˇr 5j >aRaTrąü^—+Č$ŐĚe×»Ą ŁÔ ›©ď/őî…o˝ĽůýŹn|˙ëß}c˙‹Ç[ßz°öîµöĄeCcဗ`d7$ÁTZAHmjÚ6=ë ŕßLEI¨ŠžiĄLl©™:Z-ovâ‡Ë… «íq=ŰĘDi3gĆ<ŢŕłS ‹ľÉÚö3č©s®)'q Ä«ŮĘF*ۡIRáśÎ¤D$ÉC[­ěŁk‡/Ţştak<ŞU Y p4Ł÷ᆏÍ9Ćęeş—3­“DfD3ŃÁ`ýÂĄűĚ,.ř1\Ň´t2YÎćę–™c(ŮëĆ!qf>|ęśÚŽ»ÓÖlAŮŹ¤v9CA_ŘëGflĐśĘÜâ(LĄÍ0ÂŮě^żx@Ú`pÎ +áŃť¤cM15°…Ä?=e·yČ0EH]ŠU­1¦A¦• Ő€Ó•­¸U‘Ĺ&"cňĽbÓŹĹ"LzΉ˙Ű?›ţÓ§gĎ͇BQ– EM@…–ä4A&ĂA ‰dD¤HE*bĘfgkvâí‹Rj $…Á‘Şy1.ĚśŮWĎëĄ5Ť1ž“â•ÎĘ´'üÜśoĆKŁŃ&—^ćCL)C|†”r•ĄC¨O‡d?;Y”dRH ˘Ń®.ş ç¦ť äE(•ź÷˘1¦»`•řcĂíY?;ëćBJpFMJ4ůX)šjŕBü­ý„¤Z!µ*­W„d‡·¤ś$µ˘—J:ÍŤFť=@%üDÜüłŁĺ )Ĺče-ÓW’-1VŚ ,N ‚jŃrzĘćYôŔ>DŁőŽ?ďg3ł^âůąŔÓ3Ţą`ň´Ń±…ů76ăšôäGč80×Á Âsj˛Đ(ŐN–'Ł|·ǽ¸i‡Ągf&íŻ}Fieł|‘«v8ć‰T•Ó53ś¶cv?1qR-ŇfÓÇmaĹŤč¤Z‘YđsÓN +â +VmŹO ¨XËO§Îy8»›fx‹‘Ŕň#rYĚŻŞŐ­d{_ĚŤ˝tr!$@”Qč`|\ZL´ü†QŢ‘ [ç‚Ę3‹čł °š,úwĎĚťY€ČX[­íÇj»|rhĘĎMů\~ÁĂýŮ)÷©8Ŕ¤™ř’šßᬡÖçňi6ďĆQĆôGäç§€ÁY83í[tA\çµ-$g潋Ž`8"„ĐÉ÷Y¶ 0çăB’‹°¨ń§O/ůµ”CĄÔhózaéĐÇ'aµä3„^˘Ťšč‡Ç‹¨h‡…”ĺŇ]?źçz©aö˛ťăí›ďŤíç]¸ 1©äŞT: âðPp!ęÂdYz ˙ă·c^ÂôÓŇp©1kŃ1Ň‚ Rś¨îÁc°Xb=%?˘ŚF€IH©žUŰ&Ô"Ł×"JŹwő楶'׹dW Ąĺx´áBdRźl§Ĺ$űH´î +A±Ŕٲt©ż{ĎĎ&Îş0[XŠH%7f¸LX*zpCŚUKÝCĘlOz‰ë-żPI \Úŕ—;"ꌏśóánX¤Ô@|Ůîgť–ŃŞ¨Zqă¸˙hṳ6!µáIŽę\µćA4LĘ;#“&Ű&Qʡ4ROŮpµě!ćśvB˘‡ăj ‘J¨ ‚“…"¦V9«?ççÝ飲A®äĄŇ°4YesʆśYڰĆä+Ëům‡Ä°R +*•Tf¬.ˇ×‚LÂGš ´gBĘ"˘{ąĽPż€M»hD,âjÉD}DĘ…$ť €sNą"Ń)âłBrIH,ąPăś‹X©°ŇŔb=>V÷@™ůđźťqOۀΠď#,{XuŁş’‚DlÎX‰Ë'űljD&‡DbŠĎĎF"zŃjŃÜpëřqŞsŢNDý|Ę ć7;Ő1içoO¶)ŚäÜ`•¦‚ěBDŹ(ŤTďjjô‚Ńľš´ŤU±hťNŤ™ôjH®yŮ?ꨰƦv$jUĘěÉĺC>·Ťé“d^Ň7€ÇÚ2ć€e,ZĺÓXmÇjµµ°ŞçWFű1ŁE«F÷¤Ľő µ÷bműŮą\aô†‘îwwďŘń¨ŹM‚ÔbŇkŃÚajp-Ůż­ířÉšS2ÖBŐzH,€üĬ.k4F—‡‡Źq˝öś±a1ą°o_‰Ö.ĂjÇCeś jč$,dť°ŕŚS~n.(»#Z€´Â|ŢM$„ôHÎŻřYĂC^6Źč]Ě@›ěŘM%śR\ŕ]0Ţs^ÚĎgĂrRZx|¨bî0Ď56ŢÁ”ŠŃčQf_)lFËŰŃŇćĽO ő6e,áѸ–ŹĎÁúiëÄ,9·ńů3ÄKĹ#Z•°úx|Ńę‹°2Ů5ąäcsÁBˬ"z›N-Gb];f‘f_-lLű@ZĘ^"ŠĽ?—\ +Á-f˛‰=¤Í¸čIç^X°©–¶"jsÎCθyżęŕŢS§˙ě´ăéÔ§(ŁÇ%G¨Z›wÓ‹~ŽP@™”\¸é$âŇĺFĹş`˘ŤC«ľ!Ŕ'­Ěg‡^δn¶i„FS+Ś3˝6Ńš‡%ÜlĐé°T°Q·P÷r%*Z“˛#á%­>ź]M/Ýčě?)¬Ţu3i C¬ô ·~ÍNĆ€śŔ!ľB'Ćzó˘Ţ9&ă-Ţ(iĄqDŻ’f ¤(®7ČxG-oÉůqXÉ ™Ţřň“î…G“¶Qµ]:łŠ Ţó­ťŢî˝s~ŹV­Ö…Dďzfů…xď„H˝|AÎŤ›Ű÷ăŤ=[XSókÝťűŐő›ĹńŤÁác&3ös菻ÖÂ2H`ZcăaeýĹäđ®R; 2Y?¸Ť™ŤçÝôB@„…2k­˛©uąx^Żť÷’*iÔ”ňźß"S+éáőŇúÝIWźÔr¦w™ŠÄ0đh™÷¸ôPČ­áÖň"2Yě&%z͵ëź¶…eW\˘k\$Ëhb’ë6(š¨îĘ©Ąé€ŕĄłNÔ +°y.»%•kěÄSzn´qńE˘źrg˝<. @hí sámLkě]}őÝOhU7N»ŮyXÇÍ^büBiçĺĚĘm6ł˛k±Ę&@§Yźpjő±i•ůc6.Ją­źä +€b°8ĺŚě:ĺf§C +벹mŁ}ůϦügBTs˘1gÄô`q/™˛Á†“HqéU­˛łf'Ý·t?ť p9ĄĽ`2!6 IE4ÖĄŁT÷jeűAD-(Ů>`şd{$U´ĽĆ$Z”Y'Ězzp,ĺÇx¬‰ÖĹ܆չbuŻŮŐ°\ž‹Č^6ÁĄa)+ÜěăÖ8¤4AŔ ŁkąÁŔm138FY=DkRÉ—_ˇÍzgýĘččE6Ő,Îĺ˝ĚŇĺŇůG\aCNwŰ㣗ľöef°g§ĚH´m¶NrŁ[ĄŐ;Vk×Ď瀡s!!禍 ’·Sf¶Ë«wŰ»Ź“˝Üěz#;¸‚č ?ź#“ŁD˙ŠXŘ"⹸)ć–źł‡çC’ďjĹ—î»čl@¬Ńń!ŔáŢŃÁĂÓ l<¦6 [ŤóŹůҤµP©píĹOµmGDÇ´zsëîŐW>ąúęgíŁWčô˛‡JqfűĹ7ż’ýłÎCeéÔz´q)żrŻż˙z˛{łŐŃĹxeuĘGÚqÖ»rőbóü«ĄńŤĘř:@Ú_0ë»Äp 1ŇěR©eÔô‹7/VWn˙½vHZKDĽCší0_•ňpďÎÁ˝÷<úé´śŰóklzkͰXöŃLmd—Áë§ĚbHăŇKri=VßMt.ĚĹëfŚÜreĺú¬Ź=eĂ`0kŮóIŔnr=(TϸX=Ő»xă !Vű7OÍťµE€<sŰąńťńĺw×,Ą›ďHé%˘ŮѤ÷=dÂC&7I…ó™ĄŰ+—>čľĘőÍ˝[ůţ.-qVSÎ-§;űąÁqntY«oŃr˛ľ ®&ŤUAiÄ +ʄϮÄŰG°\ +Y@vFă$5Ľ›]»k.ٱš–ě^TKËĆä3˱ú~{ëŢö•'[7ß/ŻŢP˛ĂJ˙°¸tÄZťXu;7ş«$Űíí»+—_×+ĂbwŻąv›MŹ@ކ䢟K EÔ–ÝŔ˘ ƬUĆ'¸Ńp‘ń‰×Č®±­ĄÜř…ĆîË 'ůĚX©î4wîuŽ^5zW!˝łÇÁ&ÚVgo>BSV Ňę¨Ń7¦UwČDhÎ3N<ÄehłEÔę ÉU&»)·Ô⚇н¸š¨m0ńŞdĺü0=ľŞ×·cŐ-ł±gV¶˝¤ đP*¬K“YĹ5µşOg·Ô8Ţ:â3Ă…°éěç—Ż1ée>˝  $•µüęňÁCD)BB¶˝yóđÁ×GWިlÝKöŻ©0Ô÷.=üĆč>:©d—óŁëąĺŮĺ+éŃ5•>şńF{ĺr€0`!ť^©m=ެßË _(¬=B˘ťs‘Š.Ls+BaťÍ­Db“ŕFŠâ´ťö`¨,X®ť˛AgśČ);î%3¨Ö˘bŢě.ř§§<@‚š‚äz€/Bbe~Ę<ŽćÇöęĄ Üx¨î—EÔš[3ë{ –q)×呟ŇYŁ‘hôv ^Î.ťŮ%2Zư0ľ¶⽌I':fý(7Ľďś­#­˛EÇńÚ&Č>3Š6ŹÔć> ĘG­ZŐ˝ĆůůÜČÇZ™ţ±Y;_]>ŮĽôrëü=)7bôjgůRu|‚©%łĽ¶u卵Ëou÷_nîľěłFnďäáÖń+ŇpâfD«QVä@´~Čf×aĄfLJ÷ŢUňC0.˝ržËmĄťäҵ•kď¶Î?Rł+«G/W7oEŚŞTÝ"ł°±Äd·´ęĹT˙ft5xëíÚĘŤÉjG:Rja­ÄšXLÔö˛íĂŃůkµŐ«!µ‰N¶Ąî9@I2I€´ŐŤŰŘd-˝Ľb¶ö´ęf˛{A)m%ÄŹŃYşĺ"LTŻFë»fç’Ů˝šߏw.łÉ!  ˝OÖN€ö«q5Ů`·˛ťěGË[bşlD̶6nt6nhy€ö=:Ń“łŁDm}ýâ+Kçď8"k¶k«×›»…ňödÁ»Ő'bíí“—­âĐ ‰“ŻÝxcGÎ ůÔ2b ć#ć9źHE«^łĚ) }`´\ĆGĄśH4"ć' äĂ‚‹4Cbžf­¸&¤H´âÁTBÎ)%ç—cµ-Ňh‡kŐhĺ<™Zz~! D8H­L˙RşŤJ‚bnhr!Wě]¤cUTĚäG—j[÷@ü;»/·÷^ÍŽobń¦—6‹Ë—Ă4&c5P`NŰ(Ż™µMLŻ„SI6µL=Q[ÖJ+ ş‘hŤŚćĚҲěśó¨R§¸é‹ÖéTO*l(Ĺ-­¸&çBcőňÎőŻ-ťĽ!–6•ҦPĹjŃZą·v @Ď%×âÝëjí0Ö»Ag¶@Í#ÝŰ8~ŃŞo<˝rů‰Oo_”J›Rn%ššŰŹßúôÖ+ßXÄâN2 )M.·UŮz´tőĂüĆ#`W7îĽöá÷’Ťíy$1‡± Łôđ…Ö…·ŤÖ‘Óĺě’Yúcwß «A.‡k  ÓáĂŃţ]˝¸Ü_ST«ázÓE&ça0 Pž©öE6ŢfŔ‘DÔryéRcí–ZÜD…DuCË-ABŽĘ®kÍ zëP©ěu!ş‰ęĺuŕ1§ÝÄB‡ĺ +‘ZUŞÇJe–KA&™íď¶wn69ĺ" RŞzýB´°®ĺĆl¬1ďcB¤˘Ć*=ë@ťq2sŐOĄŤň~Şu•6ăĺubŘ‚’-¬źó +v(FÄşJa;@g`&Ś:¨;˘#"ŹF›„5đń'iY‹ÔË‹ ‹–őÚ¶RZ—˛k@ŹYëP¬aCą¸Âf‡‹€]Ş#Zŕk äÜ }ÍtŇ˝#­ĽÎ¤–ŁîáS~!§•6ËűTM±kÄ +ăxuMĚ.ÍAb„OĘŮ®źŃp)Á ŕeâ­C°Z…ä"‘¤ŮĂbÍ%ôĽZ]K÷/Ö6îVnÍC‚3Ěqz©8:žřVlŇ#UęéîAvp鍄 +Úě¬>ăÂ@(ů•ţΠpÄĚđxń¬›)Ě'§˝¸ ÓřTÇ*/ç›ë«ű·ců%'g“+|zµ†ŔćË”kRjT_élŢtq7™Š»±ŢM©rŔ$‡lz’*Ŕ°÷·n'kŔţ;‰DH,YŤŁöů—JËWÓ­=łĽ\ÄËo~Vś¸™Ľ\ŮŃŰ“¶ęńîEµ¸ ’ÍÁá‡ńë‹?m‡"ľ$wăí˝z^Hőyٱ˛swýä $—:Ż$zź|kóčţłÓçž µh~+–߼‰ň)6µ\ŞÓY«K%ÄčúÄJDkDËűJáĽR\†řq0ď„ŮDŁő€÷óyX«Ü®lܡSý3‹I µ¬U6ÂbŢG%üL""eŤú¦•L ™‘Z=ou/Öî /ľž^şäc¨ZrKóÁ~:K?WKe$ZőPşś¬zeV}LfÖ#Q ©€łň5,—Ŕ›wo“±*Pń١R#áŤW¶Z»\D<ĚĄAŇ"bT˝V‹ąˇk˛őžAĹj"¶`Qµ(%ŰůÖo5Ď8©ÓNz.¤řŮ,ŕ—Ô!JcŤŞQ]«­^)Ż^Ó*k†’ŠtĽ·’Ř”ś_-Źo¶vÉ5;’8çćÔt_ÎŤěXô¬‡<ç"!=ĚWŘÔ*—ß‹nT+ .‰ř(@'Ő<6ŞGŔş”\ÜÂô€Çä3aÍ­Üh|řb~éB‰ř¶7ŰfjÍM%]TąBçĐ*­l¤Ěź[‹7Ëk·µęľ µćĽĽo‡ÁÉFBE,Öf C%·’í«Ůe?ëŽ/•ŰŰěä,úh ř¬ŇęÍÚĆÝ ›čg)•“©yźč„µů äĄ“”ŃâĚz,Ó&«ÉXĘěkŐC'ťw“Ó‹wPD3˘Ö ąęçň!.'ç†Ll˛żŇ =¸ě“\˛A˛ ’'í܉—ě˙źŰKvŻćt^ÁbŤ)7 ©’źMyŮoůř´đ¬TĐŠ«@ĐBb@_şwA,¬rŮ—Şĺ*Ő÷2I`˙ŮĚh1Ѝ†ĹşdĽ+ /“µă&¨Đts[+­ş(+xźHŮ,`d€ö^fŇ1žMJ+רn,×;Š7öĚ`­ľš_ůě@cR¤˘•I;>Â"Ś6‘č“č&ŤkhC˛ÚB˘5çĂg<(°™§í„‡L¤rk—AČhł»ÝXľ€ ’óZ J%ŔVT¬…)•… G©y5·Ä%šR +Üv×EçBŔ•Ç“µ].ŐźöQnT ÖbH……2úřâ\@@€úÜ»śňsł!@"@®0f§<şUÝ&+Ď٩ـËŐ/c I‹AŃO@]p±¦š_ŁH*y=żqq/ˇşpÝĎćHŁ-g—Ůäs˘ĄqĽľf7»°Ţž G}xč"Ęčx1sŮţ®ŕD …lvŇď+(ôVNĘ­ ”3 5§ĺúVcł0ľd5wç2p‹€ 6Źńůçf"Ó.–ËJq#Ý˝ČY]¬N;)™P k¬Ő{ćś˙ô|Ř–Ŕ MŽĚć%®°Ďĺ€)Čş1“1`“RŞ^®`'Ó ýPĄâóZaE+źdŞ·‘hÝE'QcÖφhÓŤk€ÝÝ“ôŕ +—Z-¤—­Ś*ąTc;ӻࡠsÓŕ÷ĄĂ—ׯľ]X»MeĆŽL¨ZÝńĐIĹN,°KHŹF{ŠK‡b¦_šł‚ Ö@"QëŕýăÍ ™ń ZP>‘Ş­ŠÉVĎú™ HŞReĚ%0X\gě($äQ­N€©±şŇš ^ÂHT·8ŁůܬçŮ׌—ÜM¦˝|ÁE§Ŕ´†‰–č…vÎKc±•±Ů ęÜŕtż°lO}]Ë÷0ďÂÔ…H4Ŕ¤ě&›iťň± ÖD@|ö´X)^¦€D»±ň^ŞyѨl?ż‰xşyäö¬ŹYŠ‹X’0!ą ^˛Ü=°ĘkNDsD@™ AyÚĂ`rQNőgÜŘ™Ĺđ˙é˙ś 9ĺŔĚéĐdŁ5;ҲËX-Ś®µ©Őv¸Ô(<éĚ)žs a\“â5óްć&ťäěęPŐdŢj,ąLG1­ŕŔ-X©KŮUL©‡čĚŮxĆIÄňË©ÖůłNrÎËM9Čççşbz,¤FîHtÁKŃ“Ő^9?jĚą\+M8E.¸0ÓO'vRôP”Ő'˰9 +©­€Pp *€ ·Ą0ťŽČU:µ"–ö©Ä’ •fü¸¨hŁŚIŮȤ_(p1·šîg–®ÂZc>lo.Z\M´vŰ[·şço+Ąµ°RNv÷‹k׹üĘ/^Ío:P ÜhB”’ÝÂŇ%łŔĄ–˘Ťăxë[°Z÷1Y7n@l\Ń~\'ő¶śß(Ž®g:Ç´Ńvbú”›„Ĺąxp6˝ + ŕ€‡HĚDą˝…ô8Ůżśč§–®)ŐC7[ÖFL¶sýc>=ô6:°Ú âpúdw9B7˛Ý­“—C|îś_6<,U‚|^ĘmČĹ=Ŕ3S.ŇO¦هČuD®1Öřô3.ňŮ™0DOÚ¦ARÎ…ęîîĂă¸R rYŕOĎů8'$ÖFGŃÂp–hł«íIąUÚ€—ĎyŘg¦§#¸”?5 +1–ZXÉ ®lŢţ¤¶ý€KNχiČ#äç*`đgć ´ŕŻa:N‰!ŕ’…ÉY@| 8çśřźźq˙ÉsŽY'&¸”[ÓnÔOĆ‚ Ec¸Zǵş±Î.bi„)}Ú>;>·CŕPĘä&˝2ôź^"U{$Q* :AÉŔJ×ŰJ~S-ďRÉţ|X~n!âŚDýT"̧B–¶zBvŚFk&ľč…í^ŘŹI„VľŇęžT¶îg—o¸ě”ŕ"«¦ąhŽŇ‹X´D¶ixé­ÄčRŘhzč­×pž¨‚hµTçxýŇ;ăăwÓĂ;s>Ţ«Eší›ą‡é$Ú3jÄôš—´ěšŐ«ŚŃBĺÂdç29ĺbçC2˘·¬ö±G”B˘u^ĚŤś¸ÍKĄIs­ÉE`gâ´–moßüîĺ3!­ŽXÖ@˘ŤÂđÄŞo‡Ř„d5íŔÚ˙?{oÚ\Ivž‰}g¸?8&l‰»µaÇEfž<™'ďľďű‚‹}ßBíKWőŢ$[$Eµ†#j,)${¬ ‡c"°?ů?ř'ŮĎs2ó]uˇ-Ę‘q»ŘěÎÍ<Ë»<ďzJ«Ż˛8ĺÖaˇ˛rřéŢ“?ŤWV“µÍîî§źííWĄĺ'ni Şí™ •;‡ó°ś +ëximýeŞ~Xě?XuZ›/óÝŁ9§bg–˘µ˝ŇÚ«öÁWKÇ?‹Ő6 K˝ŇĘö“?ÍtŹda5ZŰźŤő°"#Ţ…$+«÷çcůćVgý˘<8lnľđj[ÓnyÚĘ››µţń‹ć:•ĺÇŮöq˛¶+łC35¸oäî/¦Ký“TcŇ,:ůU§´ođŢ1§°ĘĆ><ěn˝iýöúËRâYE3Ţ]TŤi»t7’XÚ{qđü×*żúáTfm謭h~%âVîGŇ?ť” nÍŠuTim‚ý9“V˘0­Ć[Ç€č0| źa÷Íx•tűćĂÖCźß·_ͧş3^+ZŮ]Ś7"ŃR¬<\=ůúŃĎ˙ăúłßĄűgÓ,N¬Äň­xeh¬‡gŐ­—°¤Ňý `ŕxąÍ×U¦Ż,çúGůÁ1  ĆÂć‹ĚÚ3Rĺĺóhi`§ŰÔé»//>ýÝŮç[ŢúÜHâĹ•T}Sd:2·ÔÜ|]^~ ÓÜý27xb¤†W-w÷SŐĺI3n&™ö‘•\ŠU¶Ş›/ŔË^y=]__9~«®›©nŞuëä~Ů;ű%€%νĐŢ}šś,$šůĺ'Ďż;ůâo‘|ôëtű6Îúţ«áá' ‰nŞópxúˇź˙wĎţ߼ý«ÖŢ‘luVÎ}úŰáÁ'‘x}Ϋͩh»48ĎTwâůá¬H5†§›ż·F+;‹‰n˛qČD‹ĺg€‚V˛łzřĹÚů/rKŹŇ˝3UŢšq«Óv1U–řj"ŃÜ˙ $í’Ů‹‰6(d2’L•–Ň•Ądy0Ř}]>‚őd§ű©Ć^$Úüx>ąďX©ţ´(şŮa¶u”¨í«Â*Ô–Ě­LŰč‚H˛3rMőńRěؤµń¬ąůŇH-ý·w€–™A§ťF$5XL€.VŽ>Ż šř–×ts«]veÚČAp-(*KX¸Hő§bíźL«fzŃ+Á Ě/=ęíůô›xüsˇż«¬żšőŞM…Ţa¶˝ź\$‡Os+°ő~µńäwĽo(Y+öJK‡Z^÷ádjů¬×Ź6Źż†őaĄ›^©«oĂ‚Űyö]g÷í\´8i'śB7żt^ž«âÂ?×Ú^=ýrýůźgV»µm+łä•·Ríc™í€ęëŹjŰo11XC°%çÜR˘şQZ~«íňÎÁÚV}ëóúÎיޓXy}ŇLütZX©V¦s:ç6"^+QÝ. Î2­˝ÚňiuérŔJuR­=Ŕ›xc7ÓŘÜů˘ômnř{;«Jł2óčÓß-~š€’-­G2+Vn5VŰéî~Ż®ąĹ•ÁÁçO~µůđË•ăĎÓ˝ăHv,Qžw_•z‡“Vf1ÖWu·¸oěMŮ剹äÝĹLupĽzü©ŻOłŤU+Ý9Ţ}úç{/~—ížO‰R¬´úäóżÚ{ü§fş­î@oÖÖ^Ô6^‡ĚF°r•ĺóÎîK+żôńbf>ŃuĘ;YČ˝ÖI4ŰOć{•öÖń«_—V.ć“˝ŹŤ‚[Ů6ł+V~ٶůfŢ­NÎÇ«ÝĂĺ˝Ď@ĎÓvůĂ)ob.ae–!üAZ÷3vş[[{Ň;ú +Ô›hě©âĆ|´5é|®'ęG󪝬î”6^7żĚÆĘ-[±Ö¬(M.沕ťŢĆÓÉHüÇwÍŹ&ٱÂF´°f&ZV˛5iÁ,Z[H´7(Őëýý7ëż^żřfăń/ę[ĎŁĺŤ\ďŔ†Çß|ň7›Ď~;8˙ p‚[čĹë«vˇ—_ş¨n}‘ľ.­ąrňëÍó_UWžĚÇ*ŞĐĎv÷UyŮ-,KČü°88=}ű׏ţ?C§LŮůEŻśn¬C“¦:G…Ť—n}Żwô‹ŐGoÉLoóřMkýb1Ý[Hvâ=™‡˝żrňíŇ鯣Ő}ěą™~ŰĎöĂF›‹·ĚT_ä–Ű;oö^˙NŔČ.gš{^uçef–Ŕ ńÚN†•«Sv`¬˛ţrăá/NżřŻ~t×,LÉ"ĐK}ůÜĂĐne{gŤťŻO?˙ŽŢţMĽu0-3@’ˇo–?q2ť&Žžą+_×÷ľńŞ»@5w" ŢźŇ;ž4˛÷"iđCĎáËöţ·ńÚ®ťîLši3VÍ66"ѢHŐeň§“n¦›Ç‰Ú¶L÷!d2­+ÝÇŻTĐku6JÔܸȴ¶îĚĆ2Ő­öĆËŢŢçµÍWvf(â •jć›ë…ćŞLUÓŐµĄíWÝíÝ˝OÓÝ3YŢţx>3c¦=¦Tő'Ť4dšW\/öĎKĂÇNvůţbîO¸©ęúĘÁëhqpw!őÓéÄL´ď=®ýŮŇĹŻĘ“Ěu—Ź×Ďľ‚µřGwť{‹ůIŐ’•ýôđUmíÍ‚SůhŇ)4wŽžţŮÇSŃ?şca€WÝŻlĽ©.¸ŘÉ÷ŁĺŐB˙°<8(t·3Í7×1ŘJ«×XyÜŮý¤08Ž–W0 ľ»aeúę°:ă0ľzGne5Ű=.Ż>Ď.=ű'0C– ş—róęĆ'0¨A˝03ťĂTc·µő<Ő;™Ś6'eŮ+®Ö×织íÍWĂó_Ĺ;'ŃćU\›‰5±ő§˛9ĺT2íÓÜŕiĽq¤Š›ŔĆó±ö|ŇwóK@3"k$!Ő{ĄÁ“lç<Ű=çÎyÍXyCd—§TCŐöb­“Âđ,8#ł4­Ęwc ˇdu ‚W•VbíÓDç óŻoż™R•ŹćâłnÇmç–ÝŇZş{kAˇŻŐŢy›ë«lćX¬¶»l6Öą/J‘X«Ř?vvňkw’ś•SŠ$ş‰ćqqůĺ”ŰXµŔŚ*ż”©­ĎX)v«Ncç—Óí#D` +h(;·‹c>Ö9UŢ.,=é˙)0C$Ţś‹Ď‹ÂÉă_ 6ۉƂ[YŚ7ťt×Mwđg&Ť%KűG/ţî?ţďąúęŚ,Ď8U0cŞóHćVídgAfçětexšnlÍ9e#Öž±Ë€IQńňş—íĎYéSŚ–wí“dűLw,f¦Ss"“­®“˙dŇ›ĺĘ*3˛Űoł§÷íúŹďyŔl©Ęvąw6+Kőĺ‹âđiĽv¸§ŮnŠ—†™ćNcíq˘ĽÂć'™Ö˘G;ĹÍö +ťĂĘňŁćĆłâŕ$ŰŢÍv6­L‹×ç‰BĽĽ H“éěÇŞ+Ńň0ŐÜĘtrKNnMÖ2ťăĘúóť—żÝ{ó×Ő­7‹ÉŕEşGŁ,34óMěčµů¬Đ?®­<Z€!ďT·­âF &ŐćgůŐ—ĐY¨¶›ÔI}Ŕ˘ ™)»bĄ– G±ęćÄ´3I¤›sŞž¨Čüć´ŰšőÚNa=Ý95łk@béŢE¬ušěśĎ&»?YHţÉB|Ú-&«›v˛ĄŇ­ňŇ)@Naőy˛÷Đ*­O©2—“BAŽŮ™Ayůik÷Ëćć'‡/˙˛ąů +$‘«®•űS"óŔĘš™ĺXmżľţjçÉwŮţ“ĹD˙‘[ŚÖçUő ż”lÇÝ—źáG˘ő»ó‰9· 1î—ašŮ%§Ľ źď?®­˝R•íŹ <6Î÷Ď*«Ď¦ÜúŚ]É”6úëOâyAfŢ.ĚÉâäbzĘČn©ÚÜnžR?˝kFł˝oÓëÎ8µŐڍú‚,CýŮ©îbĽ}w!›¬l­!ó9UÁ_ďDŔ+±Ę.ţ}7’ď¬>üłżůßšË?ťŚNĚÝŇÉ‚*š‰ŕ1Ô®Ę-ŞçÜ +č*ZXbźŢúzˇ»źiîT†'őőůÁ].ń:°ĚöŚx-«@G¨â2‘‘ěx`ąłÎŢŰÁŃ睽י•Wć˝*h;âŐcĺM€XŘ&ąţČC±ŇáB¬)óËý“?­í|]Ůú޸ĆŰTi(Ú+ŻB‰»™AcăÓňę›l÷"Ű»H4Ů0v6*˘ő|kgÁ«zĺĺWńĆ ž )ZZyIşŞ¬Vg-"·mžą-UŮŻ¬<Ż.?[TµX¦sôô›D} )Ö:SMŢ\_^>™i$›÷Ít¶µ_×>I›S\›Ą”4±Ţ\gĆÉąy@‚]UÚ‚8]LöďšĺiYWĹ­Ęđi¦}xĐČ­3[Ů%· <°2ă–î[%UŮéě}ŃŘ|©ňĂ×ßţýé›§Ş{v~CŐvŇNu>Ö{Îş†•ÂđqĽÁ&–v¬U 61›JUwD˘rŇ˝Xi»:¸¨öĎăĺ úÝHR_m_ş3ëÜź‹?0‹va3„Q„Hڶ?ž‰o}:1źąÉA…-8UŔ¶Jw/VÚřă{ňO(+Ń]Ś5'ŤÂťŮţ‰u3őBçH¦şs±I3;i€Ęâ•M;˝´ Zf¬Ů];ß:ýţYM4$,¦ú ‰Ž‘Î%»Ů»Ft•ŞďŐמf;N®·tÍÍÉś—ďByuöżŞm~­îĆ«Ű^i}Ú­ţt&z'’ŽÄÚ §¸‰W $2m6±ú®WŮLÔ·ńg6ŢĽkd§e bÁ’róNâh+ÝŘŚĚőN`ˇÄŞ[ŐőĹĺGŃę¶ťB ‚Ë (`Ý7łUNŐ¶2­}›ťęDóěĆŮZ + ¦¶ +X`¬´E©`UU7“ŐmčDü6^Ů€Ő†]mďSZűdYY~cîîĘ*ě÷YUąĄÚú«ŇęKŻşK|>ŢúŘH.ÄŰ^y†öĽ[ÍG{óqŕö•)Y»d(5Özĺ5(ĐYËt/J«ź†ĎË+Đ•ű÷­,¤4ݬW»+rńúQş}ZŢx±|Ng§™hÖz{ß|÷?=˙VdviËkŞúž]XÍ` -F[Ń ľţdR!y%z´+Ë»ůá«Ęú§€FéâęŢé7"ŢĂÎ@«ćlĽ_ßţlëÉorťŹ§l•ęČdgF–¦íčíľ‘˙x>k¦×Š+/!ůďÍgD:z»ęĺ— °ćTVpyĺYwď‹i«8ďÔđG¦†ůÎ9ŮŚ¶·¦d)ÓŢ·’í?ľgOY%‘dšůÎa˛şexí;łŮF%^Ý3ŇýxóDU÷ńÇ©îÎÄŰ şŁ«Űéö!T˛vP\zć7Íd×ÉőcŐŤ|÷´ż˙UuýµČ®/&—çăKVzuŇ®ÎA„Ć["ŰWĄuŘżřEx>Đ5p¨®¶ůŞÁJ/™x‹ČĚŘĽT$N¶›lm–żjî| +l#łýXi%Y^îo?]=ůšÝ.m@bäÚű±ÂP$륙ęZ ŁŘ‰{vşmgˇ‘÷A*"Ńś6ł‰ŇJupš­o{…ĺ$[q†ž‘^Ň ­…X-Q]_—ÎăĽËlČ9^Ű, NÍLöx†ţłňúËt÷"V?‚ŽD[0!#ŔŐőĂdű!Q–łý“)Żţß|ĽX]~’¨í@O=03€ń°ôWĎľ];˙ĄČ ÍćĆs0…™lLÚŧ šŮxôíţŰź[:w‹kýŻ#©î\¬1ë5!Üî.ćcĹŐb˙pFŰ•ĽŞ˛ ëzáľ(ŢŤ¤D˘íĺWîÍĹ€î`ÚĹ-ŻvX\yŞĘ«@kw`.|qŅ̌š'±ú©*îČÜF¦u/­Ţť‹>XH/zͧ„dÂdëmuóíŮW˙áío˙ŹöÖçNĹ#N5âÖîΧ ŽďGfď•6{»ź żL6v'­âÖŮĎsť“Ĺxď¬MF»‹Y ”óŁ—ßýúď˙ĎXU™e#=TĺÝęÚ'©ć1oëHôdnYd†©:ĐÔCđB$IźF˛±‡ÖžńÚĐ,ŮŢł\ďÉŚjWĎ{M`*ŕ˘lçę5VYÎŹ$»ŞĽÖÜ~•ęŕů+ ±ž™č¨\_e»_2Ĺ>®ůá)łW^AĆ»*7g;éň VZYĆnZŰŻk«O­d×Ö3µ­dyu^ĺîΚs2ń*ŮîŮŇń7Ńęć|´>eâ…ĺtyeAćeŃÍ-e»'µ­·Ĺµ"7â%ËŕťőH˘îU7Da 8'»ô˘˛°tŮ5o¤:ŤíO*k/TeLk4Ő<…íQĹ;›i¶vľŚÖvÜňZ˛stĎ­˙řc¨Z¦ľ5gç§°Çń^HţÎîgĺ!,e ·Nwű)¬l‘iǡÚň›ńqűŻ˙íńg]'Őíî=ţU¶Mó0;xv ›^~=Z\›We0KŞľ•mĹMYy 8„”_w +k‘xű'÷¬;sń‰…Ô=«8)+‹íńV;\Ú®oĽr˛ĂYY)ô©¬ÔÁb´1# +>0?š´A6nv $ +Žkî}~đůß­<ů®üłÂŇÓi»ń“űĘŠh}45ĽôKiřh°˙eˇ{¦J›Đňŕ¸ý§ż).€Í"©abůŐęÓďŢüĹúů_ý§—ßüő\¬)ŇPkna=Ů<0R}`ćB÷$Ó>N¶ÜňúŚ[{`צˇLÓË^e "t2kÂň˘¶ô“t“ÓhiĂ+­F-@_';¨öOW?ÎF[^imZUŤÜüF´|«IĂT_ĺ†&`[~č–wz‡_wŹľÂÝD˛‰V"qF+ŚD;’č9y ç™Ö1ôďGó±{‘—ČL×HuÜŇ +endstream endobj 7 0 obj [6 0 R 5 0 R] endobj 36 0 obj <> endobj xref +0 37 +0000000000 65535 f +0000000016 00000 n +0000000156 00000 n +0000041466 00000 n +0000000000 00000 f +0000070886 00000 n +0000070956 00000 n +0000849090 00000 n +0000041517 00000 n +0000041917 00000 n +0000074055 00000 n +0000071371 00000 n +0000071258 00000 n +0000069165 00000 n +0000070324 00000 n +0000070372 00000 n +0000071142 00000 n +0000071173 00000 n +0000071026 00000 n +0000071057 00000 n +0000071406 00000 n +0000074129 00000 n +0000074550 00000 n +0000076080 00000 n +0000080440 00000 n +0000146029 00000 n +0000211618 00000 n +0000277207 00000 n +0000324378 00000 n +0000389967 00000 n +0000455556 00000 n +0000521145 00000 n +0000586734 00000 n +0000652323 00000 n +0000717912 00000 n +0000783501 00000 n +0000849119 00000 n +trailer +<]>> +startxref +849318 +%%EOF diff --git a/mentoring/mentoring-logos/do-not-use.png b/mentoring/mentoring-logos/do-not-use.png new file mode 100644 index 000000000..23abfa269 Binary files /dev/null and b/mentoring/mentoring-logos/do-not-use.png differ diff --git a/mentoring/mentoring-logos/do-not-use.svg b/mentoring/mentoring-logos/do-not-use.svg new file mode 100644 index 000000000..4603d5778 --- /dev/null +++ b/mentoring/mentoring-logos/do-not-use.svg @@ -0,0 +1,885 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mentoring/mentoring-logos/mentoring-logo.ai b/mentoring/mentoring-logos/mentoring-logo.ai new file mode 100644 index 000000000..018ec1ba7 --- /dev/null +++ b/mentoring/mentoring-logos/mentoring-logo.ai @@ -0,0 +1,1864 @@ +%PDF-1.5 %âăĎÓ +1 0 obj <>/OCGs[6 0 R 39 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + Adobe Illustrator CC 22.1 (Windows) + 2018-10-12T10:36:15-04:00 + 2018-10-12T10:37:50-04:00 + 2018-10-12T10:37:50-04:00 + + + + 256 + 68 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgARAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A7vo3nu1+p3Fxqc5aRro+ lbxpV4beRS0YaioGChGJIqenfbMmeA2AO55zR9tx4JSynfj2AG8YkWL5XVHcX06tap+YqJdC30y1 a49KRvrMjj4WhiJ9Qx8Wr0Unke3bDDTbWSjU9vgS4cUeKjvfcOdfff2Knl/zDJp9lbwa7PI91dh7 pZGHIRQFSy+ow6c/TdlArQbGlMGTHZ9LZoNecUIxzkmUrlfdGuvvqRHOh3Jtb+bNMmWz+CeOS9I4 RNGSyKZPRVpOPIKrSbA175WcJ38nOh2pikI7SBn0rlvw2augTsnOVOydirsVdirsVdirsVdirsVd irsVdirsVdirsVdirsVdirsVdiqT+ZPN3l3y3bJPrN6lqslRElGeRyOvFEDMfnSmZWl0eXOaxxtx 9RqseEXM0l/lv8zfJfmK6FnpuoA3jVKW0yNE7Ab/AAcwA3yBrl2q7Lz4BxTj6e8btWn7Rw5TUTul f5wefLnypoEQsCF1TUWaK1cgERqgBkkoepXkoHzzI7G7PGoyHi+iPP8AQGjtXWnBj9P1S5PmW9v7 6+uWur24kublzV5pWLuT1+0xJzvseOMBUQAHjZzlI3I2Xqn5LfmVq0Ot2/lzVLl7rT70mO0eVuTQ y0qoDHfg1OPHsaU75zvbnZcDjOWAqUefmHedkdoTExjkbieXk9w17zHomgWRvdXu0tLetFZ6lmPg iKCzH2AzktPpsmaXDAcRekz6iGKPFM0Ej0L81/Imt3qWNnqIW7kbjDFOjxcz2Cs4CknsK1zM1HZG oxR4pR28t3Gw9p4MkuES389mXZrHPY035e+XqEp68cnqepHKkh5IB0Ragii9iRy98v8AzEnSnsHT 9OIG7u+Xl+N/NcvkLQ15BGuEQuWVFlICq44yRjavGRfhau9B1x/MSZDsPAOXFz7+/mPcRsetdWj5 B0N5I5J3uLh0BV2llJLpTiEYgAhVHTjT3rj+Yl0QewsBIMjKR8zzHd7h5V52i7XytawX0V6by8mu I6gtLOx5p+zG9AKop3A7nrXInKSKoORj7NjGYnxTMh3y5juPkOdfO05yp2LsVdirsVdirsVdirsV dirsVdirsVdirsVdirsVdirsVdirsVfK35xahe3f5haqt0xItWWC3Q1AWJUBUAHseRb6c9E7Fxxj pY113PveI7VnKWolfTZh9rc3FrcxXVtIYriB1khlU0ZXQ1Vh7gjNnOAkCDuC6+MjEgjmHuP5+aTq OoeWdC10Rki0UrfKAfg+srGQxH7IDpx+kZyXs9mjDLPHfPl8Lel7bxSnjhPu5/GnhOde8yzH8pND u9V8+aX6CExWUy3lzIK0RITyFSP5mAX6c1fbGeOPTSv+IUPi7DsvCZ5410N/JOfz91C9n89tazMf q1nbxLapuFAkXm7D3LGhPt7Zi+z2OI0/EOcibcjtucjno8gBTzZWZWDKSGBqCNiCM3rp32J5Mvru /wDKWjXt4S11c2cEkznYszRglv8AZdc8x12OMM04x5CR+99A0kzLFGR5mITnMVyHYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq8t/OH8u/Lepr+n7jU4dFvkUJLPPvHOF FFBUHkXA2BUE02p0zoexe0suP90InJHy6fsdJ2roMc/3hkIS8+rEPyv/ACy8parqaXlxr1tqy2rc xpkCyRs5XcGRZ1jkKD2Sh8c2favaufHDhGMwv+I19lWL+LgdndnYpyszEq6D9tF7rrF1pFtp0z6v LBFp7KUnN0VERVhTi3P4TXwzkMMJykOAHi8ub02WUBE8dcPm+cPMl3+Sw1pf0bY6lLZ8/wDSJLWZ YoqHqYknR5G69CU9ts7nSw1/h+uUOLpYs/GtvveR1EtHx+kSryO3wvf7ns35Z3v5bnTfq/lF4o2c B7i3ckXZIHWQOebBa9RVfDOW7Ux6rjvPfkf4fh0/S9B2fPT8NYq/T+PsQf5tfl/5e8wWK6pe38ej 3lmvBdQmp6bR1JEcgJWu9eNDX55b2P2jlwy4IxM4y6D7ww7T0OPLHikeAjq8w/L/APLPynrmrqk/ mW1vo4W5Np9us0MswG9AZ1hbj4lAfmM6DtHtTNihtjlG+pogfK/tdLoez8WSe+QGugsX86+x9HRR RQxJDEoSKNQkaKKBVUUAA9hnDEkmy9cAAKC7Al2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku xV2KuxV2KuxV2KuxVgv5v+eb7yn5ehk03gNSvpfRgdwGEahSzyBTsSNgK7b5t+xtBHU5SJ/TEW6z tXWSwYwY/US+adW1vV9Yuzd6pdy3lwf92TMWoPBQdlHsM7zDghijwwAiPJ47LmnkNyNlkfkI2+mW GteapYY57jR44Y9Mjlrw+uXUnFHp+16aI7UzB7QvJKGEGhO+L+qB+nYOZoqhGWUizCq95/Uo31p+ YPm+GPXLhbnV45bg2kTIQ4SWgbiIU/ulNf5QuTxz02mJxioUL+Hv6sZw1GoAmbnZr8DozHQfya1G HRdbj1efTINQmtYvqyTzcntG9ZXLysoIj5KhXkta/KtdXqO24nJAwEzESN0Pq26d7scHZMhCYnw8 RArflv8AYxSf8sfzA07W4LOCwka6YGa1vLZwIaIOXMXFUVKf5RB/DNjHtXTTxmRltyIPP5dXAl2b qITAA36EcvmmFrr+oec/K2r6brZF7qWi2h1HStQegmWOF0W4idhT1AY25fFvUV37Uz08dLmhPH6Y 5JcMh03uj5btsc8tRilGe8oDiieu3MebAEd0dXRirqQVYGhBHQg5uSLdUC9h/Jz80PMU/mG18vav dNe2d2HSCac8pY5FQuo9Q/Ewbjxo1e2cx212ViGI5YDhkOdcj8HoOye0chyDHM2D3ve8456h2Kux V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV8/f8AOR2ptL5i0zTRX07S1M/t yncqfwhGdp7M4qxSn3yr5f2vK9v5LyRj3D7/AOx5FnSuhZdf1sPyx0u3oOetajcXrGvxenZoLdBT wLvJ92azH69XI/zICP8Apt/1OfP06aI/nyJ+W362Vfk5JqWk+XfMPmHS7OTUtTV7W0ttPjDsHDSA yFlTwVqg9qHtmu7aEMmXHimeGHqJLndkmWPHPJEcUthT0NPKfleKO7S4tr3T7rzygiubQkzGCZFe R/jAcLUtX4iR4ACozSnWZiRRjIafkeVjYO3Glxi7EonNzHOuaC1aznGheYfJMOj3OnaBp+lyTabq Ls7CaWBhI1ZAWXi7EHjWtOW3YW4ZjxMeoMxLJKYEo9wO3L9Pua8sDwTwiJjAQ2PfX4+94z+Wd1FD 5106GcFrfUGfT5lHdbyNoN/k0gOdT2pAnTyI5x9X+lN/oec7PkBmiDyl6fnsx28tZbS7ntJhSa3k aKQeDIxU/iMzYTEoiQ5FxJxMSQeiL8vam2la9p2pLX/Q7mKcgdSEcMR9IFMr1OLxMcofzgQzwZOD JGXcQ+zc8tfQ3Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXnv5vflwv mnSxf2K01ywQ+h/xdECWMJ96klPfbvm67G7T/Lz4Zf3cvsPf+t1Pamg8ePFH64/b5PmV0dHZHUq6 kqysKEEbEEHO+Bt40ima65aprvknSdW0w8j5ftxp+r2Q+1FykZ47kDukhchj2OarBPwdROE/8oeK J79t4+8OxzR8XDGcf4BwyH6finnkP81rx7i50bXr8WGm38HoWt7aRR2/1OYCiSD0lTY9yfbtXMPt DsiIAyY48UomyCSeId27l6LtQkmGQ8MZDYjbhL1Gyj87+XYPL2l28M3mGJ5XfXdVlmDNwkYhfTMz 8vh5cvkKdznPzOnznJMkYzXojX6g7qAzYhCIuf8AOlf6yxPzf5ivPy/stXs012fUtc1aYvpltK7T LY2hYkMRJyHIg099tutdlo9NHWShLgEccB6jy4pfBwdVqDpYyHGZTkdh/NDzfQI9W82+ak1S/kit 7fTxHdarqKRpbxxQQEHkREqj1GpRaCpPsNt5qDDTYeCIJMtox52T7+ne6fDx58vHLYR3keVAe7qk vmvVbXVvM2qanaxmG3vLmWaND1o7E1bruep98y9HhOPFGBNmIAcbU5BkySkORLO/yX/LU67fLr2q Rn9D2b1gjYbXEynp/qIfteJ28c0/bnangx8OH1y+wfrdn2T2f4suOX0D7S+jc4d652KuxV2KuxV2 KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KsV1j8rfIWsX8l/qGkpJdzHlLIkk0PJ j1ZlidFJPc0rmxw9ranFERjP0jyB+8ODl7NwZJcUo7/Efcu0b8sfI+jXL3Onab6MksTwTAz3EiSR SCjpJHJI6Op8GGDP2rqMoqcr3vkOfvATi7OwYzcY+XM/reGfmL+X955J8xw6lYW31rQzMs9oZFaS JGVuX1ef222qfiXvWudd2b2jHVYjCRrJVHofePxsXmtfoZabIJRFwux+osSvvMfmG9v7u+lu50mv ZWmnEbuilnNaBQeg6AeGbLHpsUYiIAqIpwZ6jJKRlZ3RkTeZfN0ukaLDa/Wrqyj+q20qI3qekz8h 6z7jhHy2OwUZURi0wnkJoS3Pv8vMswcmoMYAWRt8PP3PojRPyn8rWXlOPy/ewG8jdlnv5RJLCZ51 HVvSZDwX9hDsOv2t84nP2vmnm8WJ4eg2BofHr3n9D1mHszFHF4chfU8xZ+Cwfkr+WQNf0N0/5ebr /qrh/lzV/wA/7I/qR/JGm/m/bL9bMbKytLG0is7OFLe1gUJDDGAqqo7ADNZOcpyMpGyXYQgIigKA VsgydirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirAY/P1xbfmFq/ly ZZr+V57OPS7OFEHoxNaiW4lkc8fgVmqaknwzcns8S00MoqO0uInqeKgPe6sa0jUSxm5bxod21kqe ofmpaXGgvLp0M9ve3ljqk9jM4jYRyadG55MCWBqy1Gx98OPsiUclTIMYygDz34yifaQMLiCCYzr/ ADVHRfzctLfy8snmC1ubfULXTLW+dnEf+mJNwiE0IRgPjlboaUr86Tz9jSllrEYmJnKPX01vR9wY Ye1AMd5ARIRB/rXtY+LIfK35gaN5g0u/v41a2Gl1+vIzJKEATnyV4WkV14g7jwzC1fZ2TDOMTvx8 un31Tl6bXQyxMuXDz/ASz/laa/oVdYOhXqWl1PBb6XzMKtctccwhUc/hHwd/EZf/ACT+88PjjxAE y5+mmn+UvRx8EqJAHLe1k35w6Hba1DpN5aT29yTBFd8mhJgmuACsZTnzfjX42QELhj2LkljM4kEb 1z3A68tvK+aD2rATECCDtfLYn8bqTfnX5ZjjrPBcQzrbzzyW7enzVreVovSNGpzcoSuSHYWUnYgi wL94u/cg9r4xzBuifkapntpO1xawztG0TSormJ/tIWAPFqdx0zTzjRI507OJsAquRZOxV2KuxV2K uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV5R5j/wADf46u+f6T/wAVfpCw9D6n 9X9T1Pqo4+hz/wB0+nT1vU7+2dHpvzH5cfR4PBL6r/ndfO/pp0efwPHP1+LxR5V3dPKvqtJbX/lW v6Y1D0v059V+rav6PL0fqXp+i3136pX468a8a96VzKn+b4I34d3j7+Ln6eLo40fy3HKvEqp93Dy9 XCu0z/lV36B1f9J/pnh+jran6V4fWPqHNPq31P0vg4epwp/SuOX854kODw/rl9HLi34uK+tWnH+W 8OXFx/SPq58PThrzpmf5f/4c/wALapx/SP6Pq/179M+l63peiOVPQ/3Xwr71rmq7R8Xxo/RxdOC6 u/Pq7DQ+H4Uvq4evFV8vLoxXTP8ACX6Fsq/4l/Qn6TsP0R9c9D0fU9ST0fq/Lf0f5+9ONM2OXxvE P9z4nBLiq75C78+74uFj8LgH97wcUeG6rrVeXf8ABH67/gj/AJWWfT/S36X9ez/SP1L0fqPqVX0v rHq/FTjTnw2pXvXKdP8AmPym/h8FS4eK+KutV9ltubwfzP8AHx3G6rh8rv7Uq1j/AJU/+n9T+t/X PrX6dtvrnH0fT9f97ypX4vq/Ln637VemZGD894UeHhrwpVzutv8AZcuHo0ZfyniSvivxBfLnv/se 97ZnKPRv/9k= + + + + 1 + False + False + + 11.111111 + 11.111111 + Inches + + + + Cyan + Magenta + + + + + + Default Swatch Group + 0 + + + + R=232 G=77 B=140 + PROCESS + 100.000000 + RGB + 232 + 77 + 140 + + + R=50 G=108 B=229 + PROCESS + 100.000000 + RGB + 50 + 108 + 229 + + + + + + + application/pdf + + + kubernetes-icon + + + xmp.did:680a5909-6609-e84c-a592-ccd7027bfb11 + uuid:5a9a8801-427b-4461-b9a0-4b78d485ffb5 + xmp.did:2900cbd0-fa85-4caf-87b3-66865a35913c + proof:pdf + + + + converted + from application/postscript to application/vnd.adobe.illustrator + + + saved + xmp.iid:2900cbd0-fa85-4caf-87b3-66865a35913c + 2017-01-24T09:39:08-05:00 + Adobe Illustrator CC (Macintosh) + / + + + converted + from application/postscript to application/vnd.adobe.illustrator + + + saved + xmp.iid:fce22475-2629-47cf-b798-affeb9beb940 + 2017-10-11T11:49:45-04:00 + Adobe Illustrator CC 2017 (Macintosh) + / + + + saved + xmp.iid:f3fc4001-efc9-4b8b-866c-484b38c9e5d6 + 2017-10-11T11:51:30-04:00 + Adobe Illustrator CC 2017 (Macintosh) + / + + + converted + from application/postscript to application/vnd.adobe.illustrator + + + converted + from application/postscript to application/vnd.adobe.illustrator + + + saved + xmp.iid:0c572cc6-f50c-4f9a-8081-1a6f1c935948 + 2017-10-11T15:05:26-04:00 + Adobe Illustrator CC 2017 (Macintosh) + / + + + saved + xmp.iid:680a5909-6609-e84c-a592-ccd7027bfb11 + 2018-10-12T10:36:15-04:00 + Adobe Illustrator CC 22.1 (Windows) + / + + + + + uuid:7deb9b19-5d0f-48ab-a839-06a6cc929280 + xmp.did:544d1e83-c32f-514b-90ed-c65f279f9521 + xmp.did:2900cbd0-fa85-4caf-87b3-66865a35913c + proof:pdf + + Document + Adobe PDF library 15.00 + + + + + + + + + + + + + + + + + + + + + + + + + +endstream endobj 3 0 obj <> endobj 8 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/Thumb 45 0 R/TrimBox[0.0 0.0 800.0 800.0]/Type/Page>> endobj 41 0 obj <>stream +H‰ÄWIŽeą Ü˙SĽ |•¨”¶®ze†>@ÂâÚ@»î8"¨÷3łQ ôÎ(TfŠOEˇ/ůz}ůó×zýé§Ż×ă×G˝VÍ˙Oţřď?żţóřňőoőzű~ŐbŰńs´źkŻëúţ†Ď?ăóżľ?~˝ěŞřgWß˝´ć~Ť˝KŰ«_oż<řé—Çsíâa×sôbřđíńÄä=i™ĄŤq=w”ęîbŁc¸ŠY\ĎŮKĸŢOkµ4ÇL›psżŃfĄ7Łm–Ń1_łŚŻtX”6iĄZçVl¦6¬¬¦ťf+­wšf™~E ţnüŁâŘŃĘŢďă·Çô2yämůöp+m­w‹Ďë}O_ز˝űö°^K ş/çľÁ„Ďő~ëŁ,_ďw䌥+ž@`łâŚÍ ¶±ZüC@­F lj·U$ËÖ+#ôN"ŃXŚôy\ i×Ŕ•ÎźĚĺŰ㟏ż~HúpDáš±KĹŐ^ ”ş—h φK¬&~üÉśŇ NJł1÷:Ş&Ꮧń,ř°Í˝×9GĂz/ř‘ËmÂŮćűęÝĘpdč§­xoW/˝"ľ˝8"ʼn0|‰}!ÎŃńÖKÝcĹ'„?j§IŽv5Wb­Wq!Ď®LVdňí1Ş’a}•Ő'V÷2 »RľŤxDfÝ`ŔnA™eŤx"ąÖâ5·ŹUfEšáW¸ +l5€ŹÁĺ +Ô-ě±ŰĹrXÄóň˛oŔᓍEg™5T_ŘĂ5ářś-Ăk^5ĎĹ~6Üv–ˇŇŠ*RŚöެ +\1Ż(pśó^* §4Üý‰bčŻŃŰŁł†öËđíńďߤŻ×UĆěvÁ#D‹> ®î,S$sX×,ÁOżŕ沲űËlęöľú6$ţ΀áo.ý´ákŰsjŽëYń# ú@` ëdL0h^X$@łČÔĽb'{â×/¤w/:KG,dH.€WŁnĄyÖ%¦ —ŮĆ-t7YřG Ň_Kxe¸×Y9ś“€ÉgĂď5ÓĎq2¬Âd°Ŕń úÉJ`#ŔÝž4Ä„.‘#]3Ýg„lä_\Wż^ |TŠŔߤtD„e}Ľ%ż[&(xůËB`6 ůŽËb-`ŮQęĎhâfl‹{HDÖ`%č7j•…"Ąt"Îĺř¸üżŔňwQ šÁ?5őŹÍ|~ «Á|¶řĐĚŮąIč„0 +š˝7§ß†ćŤ&†€s ІĆé°JšL–ôÂ…~/LDpwźąűîŻú˙ňŮa3äkRĂĚ?±zcî°‡‘€ +c đ2R荚B8gů ¨=/gëF(˛)Ţęq8I€˘*Kľł÷Nż¤Š'çÚâ=Ë ŮĆg +ݳѳ„źl&]´ +5`(bm…žqŰ&%TR<ŃyˇC`ş cŠĘˇDkP-ufüA]Ěö†ŠpQ ĽÇXŞţc`Ź› =-]Ş ®÷Őn‹_΄X*ś ZđłeK5đ@ÂĆ8®5” ˛»ôş/[*›‰Ô üň­:"Nđr›ęe bұ߳ǒ4–goéH.*±EbČ&ŰŇúťe\ÝKxmCŰ,V4ލ(6¨Şˇěú‰µAŞÔvőIJ4$Č g„™’ú>Žś ´‰U<…ŃĐČ_sS˩Ԥč¤#^Ű‚LŐ91&ŤŻşPľĆ”R ŔpJ ·KCśN# ˘ń‰† ™µŞLÜ‘s;)PčđÔŞ«ŤĚS‚Ă×ĺÜɬh p'é÷tˇE6-ÔNńëi÷ŮŹ’ëÇě AʆBh<ji·dn ňu37u0·€Ĺqg·& ?jŠ€†Lsl1ŹL‘ř lĹK GôO"8ßYóËS× zĂS>‹Ŕ„‘ňYą`äŕ\’®3Ş)dŚgřú¨ÖJÉ[Wę]*H®ĘkČŇyĆ›+Ńî6źźW‡éâÎ2D(řD J µ4r,š˘zd„ůL¤ ˘öYV4 ˘†^Hsś…2ˇ4ÄP\q•gÎ"}Áŕă6Jç ůP%ńtŞůÎX¬y›¦ćÝs–Ąˇß3RôŃDĘ´sĘYBqÜŇ[TO»ˇ Fš[Äk¶p#°(íPŁM‹XřóčçĽQC°x×äC!n˝›y+¦‘ľÁ¤mdęšjÚ ~/Š{QÜk|ĺ”3śąÂŐ&iČ‚©ÝÇtş€ ąîÓČ[†¶Î1¦węsˇ¶|ä}śL…Ô›°ş'Ç-ĽĎ2ď@ôA!‡i0Cząo°”eŕ—„t3O:,‘[ŰJ‹ŕt‹1ŰÎÂ`óŰŹL™jľ2±Cłhv)Ľ —H|çĐF¨ÔHL°„”›]Uu0ßÎâ#I6ÍôYňý4OĘ­J±×cŘŮyČĹÂ… »[?5fäfőQŠ^©ZÄFhO<:ć1v˛µˇP[ÍŃBÜ(ä/LCř@`S©PÓĺxń˛*‰yS÷ů`1Ôrc “-ÉHéďLqťŚŻ•ošťoĽśüÓ;DΡ¤`oPÁH4™Úm:sD94°d¸ĄJÉnSűÍ"ĘďO‹NĽáŐ± ˝ńˇ1ňŽŠ ®*á3n«n:”– á©aHZbó"Żö&đ+ŕnŞjĽU „)‘Ť±$¶ëM +¨ŰŃ٧‘Q±(q@Ăŕ7˝\zŚG6vbáN5ť!4ëNTť>`wĹQS®"M=Ź 4)FşĆ´ˇě\RźŰ˘6QÍç ¨QJś3–3g”_;ލíÂ1W5b^éh~oj×XÁ'Ęą\ĂĺřÁÔ>óIÁgר:Cݞj¨­ =v’x+wUµţ?˛Ë$7’‰˘{ťÂ/ „s0Çč3(ôBŐ@ŁďôßčŞLä"e w'iĂŚĚEş\ÝĽíCŢĹx>ŕ¬ć2‡şÉŘĚQ˝ĆJa˛ĄAt˙»źn%ůş")¨d pPJç x(ĺ†W§…¨vĎ/lM&\V“ĘŠY˛{XYjoŘp®dĂPJywyhY÷&îńĐtwĽÎÍyB/ÜĎá7V{ľ©”;sĆWT1B*äVQ)Iô·ý"B&ąć…îN˛Ô:Zh8Ű„\JşľÍő:|]re)GŠK=zp^h?Źž"ČƉ˛čf[‚~4` ďHĚqŢ€U˝uĐ]*té¨T_Sq\ČXż/;wPýwĆUŮščş#Ť—šŔRyfÜ 8j°p˙IO3ßtŘŔrěi8TŘŽĽ¤±Ô )Ż®YůÍÄť›Â +m}@@ĺR´Zŕ‹•E ÄËĄI´F +Ž3 íÁâeô´8ŽÔ|Ý:ż3ăř‹=.r7’…CA-˛‚Y»iôQnŹŇ:wć$ÍăWC$UČ …·2Źę{·1Sb[Ş- rŚŘiĐŞ(Üţ­¤1ÍSÎ#:uŐšžt÷ëö?ôý/¦‹íú[fÄ*˙S=Á®ß,•LĺÄ Pţbž€i[Üe,˘qÇ+Ö…ń)?žPĆz>Ń-˛"×çK ±Âŕ±ŇÓ*¨Nš@uŻ ŠÇmÎĚńlg`ŚşrKýŰB¶ŔéÝW›tŤ€â†/ü3ęcˇRű‘—‚Ü o© `ßÝ_|^ÇÇ+\š@Iş$řÍÂŚł ŠŇ¡ě…°DG+)[×ئ rĽĂ$©K-Ç( •őĽ"ÚVš/*f?ąŚőŽ+[˙űą¸Iµ†»t—Y­ 2Ă>źě5Ő4Yxu´M!Ľ˘!ľ™ +]§së1g»Ú|ů•!ŐYFhž +ę[GŔRýnwÉ +Ťżq6—ŇU”ɕޑ$JhśPřësM0}_ż_Nă#Éę°ÜVhŕEíéIˇťŁ÷lúÚâv’ŰĘ>R +łť¤•˘€7JJP ouŁăÍEĄmJfީЫş´Ź.˝o Gy‚˘NRj’ YśšŠÇ'¬ĺń˛Mp#(ëMßÓË6ł sU2Ň_==BiąŔdµ!ÉřŔÍí{щż?D¸PÍN˙úýˇňÚ4ÜU#ĎÂťüĽ]¦e ?űy!ĎűQ˝ŁĐ®¬Ł#ŕŔżYrEeTĽĺ!µŔµëŁd$ÓóŢ/m"‰¤ďŞLv;Âtá÷G'łlCź©fP‰Ĺ'ĦZÉý,’Szµ~Ön‹q‹Ń±=‡’ťĄźŞS–5¤·1ŢČj4Đwűś4ěă0xʍš¦’XíĽúŞ˙H].¤»ű[g1’Şë»ŻŰTťęĎnFăş)–©Ą1ž”ä#ÓRŮ€ąý‘GŽĎHŘS +ć~ôxx°™ĐynQ´ň™JRËPŤ–© K”¤Ho˝—o…O«Ď^QÇYŇmr)eńyŠdäýśŚzý‘}š¦8rĽ/ňEîŹúîĘşţţ!]ŻF©G‹ď¬ŃŻ=R‰óĺöËNŤÂh +%JhEQĹ{AˇŽ·c¸÷ •ş;¶M]ĘAuĎ(éLČfžđä&~y®LČ2—ČóĘgęHűlaľůLůÇ0ÍvŁŮŹ…fÇ•·ňlĄ äÖÜý–´ŻŹż>ţőEŚK­ÎĽ]ąë_˙ůřďU,@ ŔPaĘVLô‚Ň­źÄyjäyÓ ©ŢţĹ“ÍÜl@ţ€I_cŘŇ Ź«ĐFóĄoĎ0'A˛Ę–€śmŞ ŹT +u4eđ^0ÝŻ7ÔóM4«e, ŁąYCöü cšUNü ‚ ř”^EsÉá¸k5ýF-Ë_F_2LLĽ˝Ó`ľIÔeŤ @»»Ś|‹śŞçÉPK‰*­+¨Őľť˘/ĎĐmăvĆ}©Ăß4ˇ¶K°{™wh5ĘŃ J–j<ě6áě:n4 Řłf˘<ŘmY©óŐiĆ…C7µHůÚŠŹÝu´ńZ°ŘH +ŰŇZSĂ6uŽrpŚÎ4ě&H3«SoaÓN6çpdô6*OoŤP˛8¶Ł ?ęÝěĺQóć …=޶»ŐŮş›µ‚-âí<6&áţqîϧ¬´Ľd%g‘ÔGÇ˙hí…ŰÔ¨¤'Ě˙jíO|cŁęěu›ŃOÔ2A·v4†”9@=3O¸GôC°ßÉđËŔ>Çk[ž«n+˘ĺn]żŚĹ±ăZĆVi±˘;ëdˇŕ?¤>ŻnQ„«8RÁÜ:Ö É¸ŚĹŃ'ËŃç +5”ű®ŻhşŔů°bÉÜrd`w‘ţX8íücA=jM×-— +éIăŁrž9â~ZďŕŔ¬Ő Uu& /Ń9EF$Ż_%/8˛v¶Ô…RiňŃśÚ•îłT_UĄ#ą;śţ#ăוî÷źżwLłÔĺ7['~5Ě­­ÓgiÉ5«ÁÖz˘/¤‘˘<<­.ŰžŻ;ˇN¦<—č+Ą?ÖŕLíAş?|)FŹ)2ęőmODJÚĘű:Ejň•Ů(;˙ßÉáÚ¶=™čqĚQ?“xĚ’5©÷zÂcëű÷nBൊh—đ±r&UÉڋ󨣄 t´ţÇgň‰âkřÄů ˝ZlÂ0Y$D®ăĚwF~Łă}ĚrŮ´úEăŚ;ąÜđ“l^M»Ă#××0¦ÓÇ'zĽő +ć@Ëh‚ –v]ď0a őö~€¦Csű|ýŘ"Mţ*§źo +«•Ö3G=;Îky ®°NjBH¤ź«ŽűJˇ0W0‘1|;ݏčbą` ]Xçˇ Ť]¤ÍÉ˝ş­ĺOWi"Pˇď˛v7ŰŠĂť&îšťávsŰ3ŐĘ Ş¬WC©¤TM/GŠóŮ5ź + ŰĎŻÚ@Ç—ŕ$ŚOQ-ˇÖć”,­2M&R<ŰĘţ”Sxzú©A™ľâcJD;eĆÖśăÇéŦ=úőĎFýú ¦Ü!ŇM§SüTKźô™šW_ ^Ż©Kýw¨Ç5ŤűŰUĄÖ:bŐ-u¦®Ű…żš`G¶rčűîb +;SŕcW÷u8+›x™~?±2peJÝĎoNŽ_‹z&š\öý@fŐ‰¤M¬••™îY«óz 7‹~ˇ+l»&]…ŕnVżh*˝ÜÖ°čNJKx§b']…š(ä_=Ł/i–΄źć€F,nz45*p:oáĚŔË93[Ô€y»sśoőůáÔaĺ(úŃ-¬äp%oČĐaąž}‡ůs€€|VšüY„ń´9üÄŐ3ŞOÁăŞ“Š¦cÄéZ“~ďp‡¨AĐńI˘¤ŰÖ± ¦šWLŮôů˛:˝[äł‘:ÍWV„ÓXENĽ)Ňé?q‚€í¤ÄąńµűSHٲ_`™7ł´Śxq6ŰLĂ2€†µéÉĐyŮ&¬\Ŕ·tGE=¨ĘX$Ş‘ö˘÷dĂvë´™g ZFŐ3هְśt U‘ą %1Ü©_¤5F*â۲3Ě$•mYŐb&,5ą‘j{™ +Š•*ŤWŕ7Ý.ĺ SŢ˙_ĺČm$AĐ×+ônô}ŘŠ5÷rő[yÔ„‚`Hd¬, g€™î¬Ş<¸jE”=š”b'ňAĐHîĽ{đc©c_÷Ůn)^5<4«îŰ®©uC˛Uí“ČËáĺkł†,j6úĽÎšˇ¬Šä©‰ŕ)¬ˇix¸R¶›¨c†fl÷ú±ŤaÄRV_ë#_6<¦S.騞3T8@f0Ú¤tŔ”ő}©>Ś m‹ľ[ĺ°[ÖÚĄaf“Ä, $Ŕ ¨×MŠEŽŐw¦É‚§wŔ +yq3p1Mđ9*[Ĺ;—ÖKů­w.9e&­’ú73Đ “÷Cí2Ě‹OX:_Đ1cŢčÇ`+fߥva#é„t·Ř™xÎ+śt+GÄĹĺ.đ–M@֍ †¦ÜѰŽÚdU3§}cđŔ‰;Ëíôd×ĐP$ř@§Oô~=¬Áb%<ѱQ0[nçR@Ż0™ş?śmyJ|ęl…˛ĹF`šËŢš<«'É»"6M«[eď"5µZN¸)ňĂŽ©©T%VE:2[˛É´ř…Ă`WđNNő˛©3ň^Ç +Ç^˙Ô|, ±´şx>woŹDU™MŻK2Úm˙âMÉ8ŕÇ-vLŰĐvR>N%Ú^B2)Nˇ*L\ňßţÇţűa,N¸*ű’—oA –0ŠLa§’źé¦Yzxlf•lŰQU–z˛8 +ĄĚDPb/Di•¸‡Â䡛â~rěÓe;Pľ$D~“;!ŇuđűhgţĂUŹÚ‰ţ E~Ľ€/ޱŕ!0/ +Ľ\=™­–6µdB(ćł„ržą˝ćV\śžX;¨s*_žň;»ˤLb°ĐŇ&i˘ë¤Ű ÇSż™mŐ”˘d’íĆVŞh‚fsJF–ÄĆ·–MH×)B)Ř•č‘!ăn'…&@đ»nvĽífëÝÍÖ7ݬř´łő‰ť­OěězbgóS;[?ÇΖ˙ÇΖWvvţE;›ß°łíSĚě~jfó+7;?âfË~×ζŘŮţÔΖŘŮův6ßýěúc;;ělÚŻýlţ ź]źďgç{~6í?4´@™•¤­A/B:QNü1'"mۇZ é[s„*>(ßm»Ër»Yh۰—˛]ÜćMÇĚWŘŐZs€|¬ťŻÖP·>ď}JŐŰöĄS%/üěČ+_J—9Ů‘‰}†cěÇEŃÔĐi +ŃŻš©.DŮm7ŤMĄFŚ;‘ŕ[šÇ…8 ç`¤"Úâ‘0‰j­łKSç:ŔȲֶŁá€´ă?Ĺ“–PFlÝú„‡ oűpĐfżpFÍý…E(Řî!Ă}L·.şŐŤHŮf‘pĘR‚'8P¸/YŰVj‡VeW%,hlśŤ˛ŞúîNEm[4VÁşř[Ň1+™Ç©lgx˛§Aߢ»5V ÂÂ~ۢŃuA؄ ąá8ď¬]üčĺq<Żëóz€GĂříStęm!j·cÇK +ĺĂl§4N'6ĺ} -°ˇci©8˛´u/•ĘGU2U˝ŠFÁfu\Sďő¦ŢŐyöŰ&Ťh6€{ 7ĆŐaěG‚é$lDĹxaŐáÁOh™čúmŮrŻŃű…C9b.çz9f†DEżçŠmłń>stream +8;Z\7D0!Q;#ebicebbtrla0qdq+=\\:-2D2:1cG>bnH\!!Ybuq6D76N4(q]2hq'lC +X*lh;N`!0lXtq&)0.*;I'\&'7@jF56j+aR"'O`nKL,nEl+oH$-`XNi7OD51mKT4ju +12AdX136maVI7fdC$Qg;VLI]COp0TIA +';M&oqM:NjmJOJdDEhZTfRIIY:&@'`/'IBTURBCX&3F[sn,=l&+*M4L^7%(hXF2>g +e`cU(H3dKHm@@UIi44d$I3V[1WC:BbE"[# +ML6DTJ'?'XWc=hYXL\'tV09WF8Np@_G6%B7Ti.qK`D;.M#9*!pUIU7MN+6N7ou$,. +W6Xrkm"ap +endstream endobj 46 0 obj [/Indexed/DeviceRGB 255 47 0 R] endobj 47 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> +endstream endobj 39 0 obj <> endobj 48 0 obj [/View/Design] endobj 49 0 obj <>>> endobj 44 0 obj <> endobj 43 0 obj [/ICCBased 50 0 R] endobj 50 0 obj <>stream +H‰ś–yTSwÇoÉž•°Ăc [€°5la‘QIBHŘADED„Ş•2ÖmtFOEť.®c­Ö}ęŇő0ęč8´׎ť8GťNg¦Óďď÷9÷wďďÝß˝÷ťó 'ĄŞµŐ0 ŤÖ ĎJŚĹb¤  + 2y­.-;!ŕ’ĆK°ZÜ ü‹ž^i˝"LĘŔ0đ˙‰-×é @8(”µrś;q®Ş7čLöśyĄ•&†Qëńq¶4±jž˝ç|ć9ÚÄ +ŤVł)gťBŁ0ńiśWו8#©8wŐ©•ő8_Ĺ٥ʨQăüÜ«QĘj@é&»A)/ÇŮgş>'K‚óČtŐ;\ú” ÓĄ$ŐşF˝ZUnŔÜĺ(4TŚ%)ë«”0C&Ż”é¤ZŁ“iżóś8¦Úbx‘EˇÁÁBŃ;…úŻ›żP¦ŢÎÓ“ĚąžAü om?çW= +€xŻÍú·¶Ň-ŚŻŔňć[›Ëű0ńľľřÎ}ř¦y)7taľľőőő>jĄÜÇTĐ7úźż@ďĽĎÇtÜ›ň`qĘ2™±Ę€™ę&Ż®Ş6ę±ZťL®Ä„?â_řóyxg)Ë”zĄŹČçL­UáíÖ*ÔuµSk˙SeŘO4?׸¸cŻŻŘ°.ňň· ĺŇR´ ßŢô-•’2đ5ßáŢüÜĎ ú÷Sá>ÓŁV­š‹“dĺ`rŁľn~ĎôY &ŕ+`ś;ÂA4É ä€°ČA9Đ=¨- t°lĂ`;»Á~pŚŹÁ đGp| ®[`L‡`<Ż "A YA+äůCb(ЇRˇ,¨*T2B-Đ +¨ꇆˇĐnč÷ĐQčtş}MA ď —0Óal»Áľ°ŽSŕx ¬‚kŕ&¸^ÁŁđ>ř0|>_'á‡đ,ÂG!"F$H:R”!z¤éF‘Qd?r 9‹\A&‘GČ ”rQ ˘áhš‹ĘŃ´íE‡Ń]čaô4zťBgĐ×Á–ŕE#H ‹*B=ˇ‹0HŘIřp†pŤ0MxJ$ůD1„D, V›‰˝Ä­ÄÄăÄKÄ»ÄY‰dEň"EŇI2’ÔEÚBÚGúŚt™4MzN¦‘Čţär!YKî ’÷?%_&ß#ż˘°(®”0J:EAi¤ôQĆ(Ç()Ó”WT6U@Ť ćP+¨íÔ!ę~ęęmęŤćD ĄeŇÔ´ĺ´!ÚďhźÓ¦h/čş']B/˘éëčŇŹÓż˘?a0nŚhF!ĂŔXÇŘÍ8ĹřšńÜŚkćc&5Sµ™Ť6»löIaş2cK™MĚAć!ćEć#…ĺĆ’°d¬VÖë(ëk–Íe‹Řél »—˝‡}Ž}źCâ¸qâ9 +N'çÎ)Î].ÂućJ¸rî +î÷ wšGä xR^݇÷[ŢoĆśchžgŢ`>bţ‰ů$á»ńĄü*~˙ ˙:˙Ą…ťEŚ…ŇbŤĹ~‹ËĎ,m,Ł-•–Ý–,ŻYľ´Â¬â­*­6XŤ[ݱF­=­3­ë­·Yź±~dĂł ·‘ŰtŰ´ąi ŰzÚfŮ6Ű~`{ÁvÖÎŢ.ŃNg·Ĺî”Ý#{ľ}´}…ý€ý§ö¸‘j‡‡ĎţŠ™c1X6„ťĆfm“ŤŽ;'_9 śrť:ś8Ýq¦:‹ťËśśO:ϸ8¸¤ą´¸ěuąéJq»–»nv=ëúĚMŕ–ď¶ĘmÜíľŔR 4 ö +n»3ÜŁÜkÜGÝŻz=Ä•[=ľô„=<Ë=GTB(É/ŮSň,]6*›-•–ľW:#—Č7Ë*˘ŠĘeżň^YDYŮ}U„jŁęAyTů`ů#µD=¬ţ¶"©b{ĹłĘôĘ+¬ĘŻ: !kJ4GµmĄötµ}uCő%ť—®K7YVł©fFź˘ßY Ő.©=bŕá?SŚîƕƩşČş‘şçőyő‡Ř Ú† ŤžŤkď5%4ý¦m–7źlqlio™ZłlG+ÔZÚz˛Íą­łmzyâň]íÔöĘö?uřuôw|ż"űN»ÎĺťwW&®ÜŰeÖĄďş±*|ŐöŐčjőę‰5k¶¬yÝ­čţ˘ÇŻg°ç‡^yďkEk‡Öţ¸®lÝD_pß¶őÄőÚő×7DmŘŐĎîoęż»1măál {ŕűMśΠnßLÝlÜ<9”úO¤[ţ¸™$™™üšhšŐ›B›Żśś‰ś÷ťdťŇž@ž®źź‹źú i ŘˇGˇ¶˘&˘–ŁŁvŁć¤V¤ÇĄ8Ą©¦¦‹¦ý§n§ŕ¨R¨Ä©7©©ŞŞŹ««u«é¬\¬Đ­D­¸®-®ˇŻŻ‹°°u°ę±`±Ö˛K˛Âł8ł®´%´śµµŠ¶¶y¶đ·h·ŕ¸Y¸ŃąJąÂş;şµ».»§Ľ!Ľ›˝˝Źľ +ľ„ľ˙żzżőŔpŔěÁgÁăÂ_ÂŰĂXĂÔÄQÄÎĹKĹČĆFĆĂÇAÇżČ=ČĽÉ:ÉąĘ8Ę·Ë6˶Ě5̵Í5͵Î6ζĎ7ϸĐ9ĐşŃ<ŃľŇ?ŇÁÓDÓĆÔIÔËŐNŐŃÖUÖŘ×\×ŕŘdŘčŮlŮńÚvÚűŰ€ÜÜŠÝÝ–Ţޢß)߯ŕ6ŕ˝áDáĚâSâŰăcăëäsäüĺ„ć ć–çç©č2čĽéFéĐę[ęĺëpëűě†ííśî(î´ď@ďĚđXđĺńrń˙ňŚóó§ô4ôÂőPőŢömöű÷Šřř¨ů8ůÇúWúçűwüüý)ýşţKţÜ˙m˙˙ ÷„óű +endstream endobj 42 0 obj <> endobj 51 0 obj <> endobj 52 0 obj <>stream +%!PS-Adobe-3.0 +%%Creator: Adobe Illustrator(R) 17.0 +%%AI8_CreatorVersion: 22.1.0 +%%For: (Kierstin Jarvis) () +%%Title: (kube crew option 6.ai) +%%CreationDate: 10/12/2018 10:37 AM +%%Canvassize: 16383 +%%BoundingBox: -1601 104 213 579 +%%HiResBoundingBox: -1600.41305517778 104.2275390625 212.701499098413 578.542064388736 +%%DocumentProcessColors: Cyan Magenta Yellow Black +%AI5_FileFormat 13.0 +%AI12_BuildNumber: 312 +%AI3_ColorUsage: Color +%AI7_ImageSettings: 0 +%%RGBProcessColor: 0.909803926944733 0.301960796117783 0.549019634723663 (R=232 G=77 B=140) +%%+ 0.196078434586525 0.423529416322708 0.898039221763611 (R=50 G=108 B=229) +%%+ 0 0 0 ([Registration]) +%AI3_Cropmarks: -432.5 -67 367.5 733 +%AI3_TemplateBox: 251.5 180.5 251.5 180.5 +%AI3_TileBox: -320.5 -23 255.5 711 +%AI3_DocumentPreview: None +%AI5_ArtSize: 14400 14400 +%AI5_RulerUnits: 0 +%AI9_ColorModel: 1 +%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 +%AI5_TargetResolution: 800 +%AI5_NumLayers: 1 +%AI17_Begin_Content_if_version_gt:17 1 +%AI9_OpenToView: -1367.32863356832 875.374831258437 0.6667 1800 971 18 0 0 1057 -1026 0 0 0 1 1 0 1 1 0 1 +%AI17_Alternate_Content +%AI9_OpenToView: -1367.32863356832 875.374831258437 0.6667 1800 971 18 0 0 1057 -1026 0 0 0 1 1 0 1 1 0 1 +%AI17_End_Versioned_Content +%AI5_OpenViewLayers: 7 +%%PageOrigin:0 0 +%AI7_GridSettings: 6 1 6 1 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142 +%AI9_Flatten: 1 +%AI12_CMSettings: 00.MS +%%EndComments + +endstream endobj 53 0 obj <>stream +%%BoundingBox: -1601 104 213 579 +%%HiResBoundingBox: -1600.41305517778 104.2275390625 212.701499098413 578.542064388736 +%AI7_Thumbnail: 128 36 8 +%%BeginData: 3954 Hex Bytes +%0000330000660000990000CC0033000033330033660033990033CC0033FF +%0066000066330066660066990066CC0066FF009900009933009966009999 +%0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 +%00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 +%3333663333993333CC3333FF3366003366333366663366993366CC3366FF +%3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 +%33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 +%6600666600996600CC6600FF6633006633336633666633996633CC6633FF +%6666006666336666666666996666CC6666FF669900669933669966669999 +%6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 +%66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF +%9933009933339933669933999933CC9933FF996600996633996666996699 +%9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 +%99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF +%CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 +%CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 +%CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF +%CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC +%FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 +%FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 +%FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 +%000011111111220000002200000022222222440000004400000044444444 +%550000005500000055555555770000007700000077777777880000008800 +%000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB +%DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF +%00FF0000FFFFFF0000FF00FFFFFF00FFFFFF +%524C45FD08FFAFAFFD62FF850E0F0E5BA9FD0EFF608BFD04FFAEAF3B8BFD +%61FF37080F0E0F080FA9FD0DFF3C84FFAFFF843C3C3CA8AFFFAFFD5DFF85 +%0E0F0E0F0E0F0E37FD06FFA9FD06FF3CFD04603C3B6084AF3B8A3CAF3C8B +%FD52FF5A370E375AFFFFFF0E0F0E0E0E0F0E0E08A9FFFF84370E0F36FD05 +%FF60FD053C66608B60423CAF6067AFFD51FF7F0F0E0F0E0F85FFAF370E0F +%0E150E0F0E0F85FFA9370E0F0E0F36FD04FF848A848A8484848B608A60AF +%608A60FD51FFA90F0E0F0E0F0E0FAFFF0E0F0E0F0E0F0E0F0885FF5B080F +%0E0F0E0F7EFD63FFAF0E0F0E0F0E0F0EAFFF370E0F0E0F0E0F0E0FA9FF30 +%0F0E0F0E0F0E61FD63FF840F0E0E0E0F0E0E84FF7E0E0E0F0E0E0E0F30FF +%FF370E0E0E0F0E0E36FD64FF0E0F0E150E0F0EFFFFFF360F0E0F0E0F0EAF +%FFFF5B0F0E150E0F0E85FD64FF850E0E0E0F0E85FD04FF5A370E375AFD05 +%FF0E0E0E0F0837FD66FF8536373685FD06FFAF85A9FD07FF5B373085FD68 +%FFAF5AA9FD06FF7E370E0F5AAFFD06FF5A85FD67FFAF850E0F0E61AFFFFF +%85360F0E0F0E0F0E85AFFFFF85360F0E5BA9FD64FF5A0F080F0E0E0EAF85 +%37080F0E0E5A370E0E080F5AFF360F0E0F080F36A9FD60FFAF0E0F0E0F0E +%0F0EA95B0F0E0F0E0F0EA9300F0E0F0E0F36FF0E0F0E0F0E0F0E85FD5FFF +%5A0E0E0F0E0E0E0FA90F08370E0E36A9A9AF5A0F08370E0F845B080F0E0E +%0E0F0EFD5FFF370E150E0F0E0F36A90E0F85A985FFA9FFA9FFA985A9370E +%855B0F0E0F0E150E0FA9FD5EFF0E0E0E0F0E0F085B7E0E0E0FA9FF5A0FA9 +%370EFFFF370E0F36850E0F0E0F0E0F0E85FD5DFF850F0E0F0E0F0E0F7F85 +%0E0F0EFFA9FF7FFF85AFA9FF370F0E37A90F0E0F0E0F0E0F5BFD5DFF8508 +%0F0E0E0E0F0E850E0F0E37A80F5AFFA8FFA90E7EA9080E0EA9300E0E0F0E +%0E0E37FD5DFF5A0F0E0F0E150E37A9370E0F5AFF5BFFFF61A9FF5BAFA90F +%0E0F85610E150E0F0E150EFD5DFF85080F0E0F0E0F36850E0F5AA9FFFF85 +%FFFFFF85A9FFFF8537085B7E0E0E0F0E0F0837FD5EFF370E0F0E0F0E8585 +%0F0E5B37FF5A0FAFAFFF5B0EFF5A5B300F36AF0E0F0E0F0E0FA9FD5EFFA9 +%0F080F0E0E0EAF0E0E080F5AFF84FF0E85A8AFA90E080F08855A0F0E0E0E +%0F84FD60FF850F0E0F0E0F5BAF0E150E0F5BFFFF85A9FFA9370E150E85A9 +%150E0F0E0F5BFD62FF5A0F080E080F8585080F0E37A985A9858485080F08 +%37A90F080F080E30FD64FFFD04855A85FF5B0E0F5B85080F0E3785150E0F +%A9FF5B855B8585FD6CFFA90F080F0E0E0E0F0E0E0E0F84FD74FF850F0E0F +%0E0F0E0F0E0F5BFD76FF845B5A5B5A5B5A5B5AFD6EFFA9FD05FFA9AFFD77 +%FFA837FFFFA9FFFF5B30FFFFFFA8FD07FFA8FFA9FFA9FFFFFFA9FD64FF37 +%615B8585855B3737FF5B3785FFAF5B5B850E855B37FD04855BA9FD63FFA9 +%0F0EAF3085365B5A5B36310E37FF850EFF5A37840F305B36370E31A8FD64 +%FF0E375B5B0E5B5B373085300F5AFF85377F855BFF0E3785850E3730FD64 +%FFAF858485A95B84AF5A85FFAF5AA9FFFF7E6184A9FFA95AAFA98584A9FF +%FFFFFF +%%EndData + +endstream endobj 54 0 obj <>stream +%AI12_CompressedDataxśÜ˝gwęH¶0ü~žµú?lrP`0“ Śł±L´€Ó}úĂóŰß˝K ا{ćŢľ3=íŐVíÚ9TIśŰkŤ`˛7ď¨A6DŮ~ű×ůyZS•Ő\‹ŘČe[a2Y/W^ňÔ˝6Z Q•,Hm˛ĄjËŃ|±1LÖGsxż§4‚‘Őhf+*ÚŹŃŇkóxq°9ZMTŻaú®¦ţn›/V0M)#ďf p%٬¦Â4f(Z‚ŹV´%+H™ýP–ËŃź"°‹Sóő¬7š Ró?"¶ -P4ÜĂŮšµń˘ŚWŁşşüF…8šĄxžEŃp!†yV¦†‡»™HŃś,S˛Ä‘©¤Ď1”Ŕ±’$˛Λ™w×Su¶Şió®ş\¦ç“ą¶ŚŘŇ?•™­˘ `D±=¨“Éüw[j˘tÇpO˛Ŕ·sى +Üš*+Íć% 4ÓN­G“ŢőzÚQ‘,Íël›Ěz»„é`füL®‹íÂ.5Ô0{H‰ ęů”u-p5„ë§X™dŽY®°- ”( 4P.áž“ńˉ +¬ÍSŹ1,cËÇDŃ–ŠŃE$äHr§Ä±/ <° xȰ<#s ŕ%ÁIGČТŔśŤ§`2FS1†‘ÍŮČ?ž§ş:méżxM޵ůbŞhc ,ȱL·ŃĆ +"|2 ¨¦:]L@aLž†AZz¬źMP`ş.z–A ĂŹÓŃ´ł•§úc¤ţ±]ĎgŞ!´¤¶jčzÇqĄ˙5†ę뉪ÝÎF+C É‚¬K­2喝c;En˘a‘čí_˘©huĘ:ź¬WÄľ¤ ĐŚ˛ňSEÓ'¤Ĺv +X7\ł¬ş=ę·čv٬"´hŔÉíęBť5ç-BRF&˛Ś$°,/H fIäC¬ČI rŇŔ*YĽú H–ĺőÇHPYđ@ <YQ †eee%B2$sŚ 9!Ń!Aä”Čq‚M‡ ŘaŃ,Ç!” ˛eĎq´l‚`:&đĽĚYX(… Z„ĺÉ,oKoPűŽf Ćѡ€CGń,•:Ô:2KÉ4 ÜRY(ś(‘ç öÔAxZC'éäs"ÜąîˇZ‚‰Ć4%2X3AjLŚgŽG)é 2$Ç‚,ŔD’Â`-˛ Â?>/ń¬$0’‰ JW¸‰d™&ĚB °N˘i¬ăl:'ó#ČXc8`HŐÁ*’’N¦©„rJĆT}CÍBá,±Ŕ~Ú€’%I"“9TŘś × ´K€[¤Ŕ*P¦ć‚°‘q@-+Ę,)h9Áž„ăD;%Ë„ ‰ŕXDŽF®l‹ůaÇ9˛ÔoP÷oXšČ +,iđČHN +ÁÚ8I%NDł!F–%{/ÄóńL$Ęĺ/rĘB^‚ę‡( :pX&BŁ #•i‹EČ}#°#•$č Ş¸!äL,‚ű"á= ˙@0›€°!¨á)UQFşŽÄˇ’Kčçt\ PPÁQ €N$0Čiţ!ˇ2P» +ř,…ct¦v“NV †Š ŕVG ń2+š¸€zŕ=h8‚ }ÁˇÔt\0ŚŽĺD‰č«Ŕő€ŰY +\6ÝŻMsħ +`‚pݰnđS¨¬ľ˙°:Wp™°p0>^g Đŕ¤Y°c cây€ăÉ,ĽJC rJ2q±! +41 YŹ>…ă`鬤s@@đĽD|Š€ugúČ  ŕóH»… ĄAłż„šcâĎČ ,X?hBqBp›…P&¶x¨Ş%X?Ńt04Đđî"řKŰ9č>‡E;hˇn2čĐĎB 2&˘´™Ś¶1,C Yt3Ƣ% ,<š(ęÖ)‹ŕÜEđö˙…@ŕmÁr  +:ZD` ŚyDĐV0Hâ÷„]ގ)š˘D@,<ÄYÎp`ŕ 0ËČŤ-.Ś ŕAÁA:0F×Ěɬ) Æ˘`ĐgÁ(ÁÉ ,1 ,F´…8 Ő’Ł,¸ * x1‰2pˇ­: eĆD¬ a2 Łî—E^Ć0îËd!:J4#0[T]„¸Äš¸ŔŇ *@D§Y3'A€;yCY9*K1z  !Lđ“@2 …^…ŚĹHB@–ŕ—iŽáLGŔ˘w§Ż"ä4Čh#Ě şdÓ­  +č!Nč ŕ< śŹÇD4NđB஠ĎÄprÔ l‹@@&®Žáhnb(ş%ŕ4xB780H ˙<޸Dt">0y lÓ3 Ô=‚< +iáÝ8˛,;^ÔAŔ?鳲ˇ‚: ą \ÁőҰI M`6‚)+Ŕ +ĆÍ ‡ł‡8ń „ˇ{Č› ¤Ń$m§C‹Ó;0ŚAŔsI' +nÜč&>@ Eć !32Ôź·Fćş!˘ŔŠ %ĄÁ˛(`•„<$<¬T¬F$:JăŤÎ“A¸_pp >ČW (ąd6ţ@xßĚ !ĎAşr7@`ő2şc†äD"Ńŕ» źÁ$| iAÄđmŕµI`7ćg†˘±ŰN~A A·)Ý˝Óč)Á§ >IĐAhý?ř/ÚL/ +’ S =łtš2Ň€—ń^ÔA Çi§ćiSA°,‰!î‚Ć\˘EH*yy#,PKPtL$‹Ăî<(H—(ť*lCJ€ě˘Y]“ÁŹ‚"ANËé9 +ć˙ŕ€,†Diáp®@0ÚĚQŔ…€Ç}±=H|0”˛‘|AlăG&łş‘‹~3P`mę“%  ęFLLt^wކ©s¦$ŁüA¦|Ŕ  ˝Ľ5 Ăa ΀˙ž]%Ł E …“@µ†ćµő•@ČOćyRAb'ঠ°3Ý2Ô‚,'JAĆŇ%î5#6FČ^±$¨(7@¨8ď­Żµ€ĘÔ‡3 Đ®x„DĂBŠAaµ(“|‘ěÇܱš žVlĚę® XJ›ÚÚ‚1 2=Ô,˝8üU’(Y§Ś -¤*4V$ÂA0b±Ôé¦HČ„ĹA:Ťµ‚€*€‘HX¶™ÚÉţ .­s«e wÍX˘©đ3!DˇIł27Ć, é!!×s'd Ź™“eÍ2 +S%0®z~ŹUĆx ˘˛^‡‚ô$´}H"uqŇPÎłŘz Ě Ó Ej±ä…2qˇ_F‚¸iCę<ö °/ “šM’ŃËA`§ËJşę`8‚ÔôNlÓ[†d¸`l ¨`1‚YőJ˘€#.•\Źé؆P‘Íü̧¦1‹€\ˇŔŁÓčzAщkO¤˘Ć%s’áZ@3°¦IÁ/@ěB0I°ĚÄ,ÖCa@Â=Pđ–`ËŔ%zŚuú }",©ˇŞĂ¬`m >ďéĆÚZgíBˇĂ8 oB6ÂÚŮ”«†ŻŚ‚†äŇč[AŚÚv +)4Ź žL€ĺag łŁ H?)Gmbt-±ńü‚·Ý4Xöt a1ÔŠA`A´Ů–Cîbś˘ôÖćĚp"[i#Ó·}Ś”ş7Śť:zs` ŕ«ű]âcĚÔ‡ÇÖ#čĄ P‘DeÎHvä…®ŮȇˇxÇ,[7M.€Bö@ÍŔđÄŚ +«&Ě#xÖČľiD`›‘}cě––8ÁÚÁ‘Đ“Y>‡›ÚŔt°¤˝d¦Q0ĽMÄó8PpE…ŃÁađ c” DHčô¤Ďlŕ€ř3C‡RU‚#ʦbl8ŕţÍ|—ÁĂČŰ74F .-ŕůkűŰHŚI ů+b.kéŢH ,LśiŮČA%d¸e=?ĂŠAE%ÔB=Ţ€Ĺç«dwş7G˛F=»Ľýí_˛ÍăµÝß‘ĎdG#;ëíîgüÂ>x›¶%ż¸Ůy„T°wr'ŇŐ€čŔH’Ä©Y_0ŕŻ!‘ć «ö€Ę€{â>Đg|ßúŚ9Ö'µUfÔĹł7ŠöÓ!׾Ľŕ)Ě~(“QĎk ßÎFÝyOm¬´Ńl`ó(ŁH¤®vWĘl0Q#‘ô\›©Zóç>Ó^[ŕ/ßĚţęÍuăô›~;cÜ΂˘żí‚Ô-\W•ÉgĚę Tç޸‰:EÖWWzŁő2ˇL¶pa¶ú\ŤV#erłVzš2[ý^PŹô/‘őËŚ·®”ů{+eżXi˙cŔ 3‚XŤ»E<öÉŹÜr7ę­†żÄ€żIµŐĽckşRGáj»¨Ô|~`Q“ywüűhąˇbP +©+T”ŕ”OjňĂ/Ql*HT‡Ăó'dC:©)š2]š Ů™ä0[,÷^)łŢDŐ®Á™ßĽŚS^üăws±ě‡ş| ©Üě8âN‚˛ŤÍ\ČŢĚńˇŠ <R_¨98Č)ŢĚc1ZSPŢR‚±[!b;nDi#&á0"žl•`Ý %ÄNÎÖ5S5š2G&ű_PĎPCě(s{¬P4“‡@@EIö38#Qăy,Ëp÷YÖAđL VÔ1‘D ’l7 I“7] eÇŞZ6¶Ú0żÂ­zAÁ‚ ÷ ­7r9lŔ@⌭p˸» …µŠ†„B”č:[@ؤ—p·Ôč ¸G y…MoťÇP˘ÁŠ9d¬Ńk…ě*’ăčűc Ç€ÓŔ´Ú@é #áh€”R<‚‹H ölzz%b—ű|¤yÎÓ!ĚÚ <Ă>‰Ń‰¦±$¤HJɸOó<ö^iäżP{"őéťpŘ€…Ĺ ť¬däF™Bâ†[ćd'Š–B‘óĽ`¶ŕˇ¬Â|ę6˛ËCxH«lŇ;0ĹÇęŤ.ŽÂD_ƢMĐ›—¸')4ÍJFcwy°)_Ĺ ŞĹ1 úˇ AD<Š©n×ÜÁQ´:™3¶C° ɸ möpdl'bw_?ŕ ŕľÖ˝ŚŢ-ĂV/ +EęoPlĚx»f_t¨‘QOôb *d{/” \Á® Dś`VY¤%FCj/›ý8ŞT(ŇA…i%ŰI–$¦ ™A©p«Ťanl‘˙é´ Ő?ă˛qZÇƨ­«9č ¶4DKG„!{Q`Î ·mí °¦ÍŠ(lŃ‹¤}#›ŰĹx.ôôŮčO`ËŹÎJúF ĺđ¸­&lA@dÖ©†Mqo_„JZ/Am(,w9ÂiÝ6q;›ÁĆ'šlĆ-^(tôň’°·łŔ˙)ůĽ(˛U0”Ľq(Çć‹{]˘á*°ôÁÝRÜ!ĘÇPěB‘5†ą+ŹŽĘ }TJx0`›’&.¸ű¸0#Ešž^Á¶H6Ďc0¸OŠŢ”tTx|h”0Ľ`žü€¨ŕX4Ů‚ĺ±JhŇíš-K˘†ž%í6žĂľ5Ĺ)­·öd;R•OJ:J:VĆgúőÓ!D/ç锑i& P—tÍłcK Ą¶)b#žŇfFQK6ŻÚ…F»”¬Ő’íôm˝•Ý ą[‰2ř¨+Z$Š{-śQĚŕ¶‚@ăÓ"ô¦'Ą žXŚcŕ€ î`ča·ˇ‰5dŽÝ +AA EÎb€@?G™űMŤXÔö`ʬšüçó€’„‡pGž˛ n4Mh ËN ;09c1@Ňkă¶Ť"ěňa°fŤŤ÷ďŔ˙q˘ŢRaÁłßBĄ1,k5PvĆ„eńäi>XĚ»›SC6(€lđ oXn đWoŤJ,†—ͦúP­1›z<î3c{•5ΠS—q÷‰Ů4El´áţ¬“ÓđIÁ?视đYě§‚U`ŚŐ# ćáNŃ8ĆmJÜ›"ŠĚáé,Ťßś%‘ďÔĐZŠ/¸kĘě)'Źa·j„%Ďçŕ ´F˝oŚA; ´ÂăAŰň¦ ő,8BAÂ@«Gjp!PA+Áňő¦0Ä÷–ŔÍS3  ,fY$P#Ć2P2|ĚÉFÎu0xlMfEJŘôźAX#MđşşCęaŠĆ*EÉF˙˛ Hs°GMŇ*pÝ<ŕFÓŚ4‘šY Z: Fţáą§M˛Ü+Ú8Ł^", gs"”"¬…'D>íë év‚Ł-^|š™V!ńŕm%tŽŔiK^Jáîm˸]αś%/e°żÉýÓzÂidĄŘdL‚ňŕF* ”iŮ’–»8]-8ȉ« ŹşlŇR +˘m¨(‡íYŠŘ„%)Ą™‰2*E̵Í@“bvĎІÍ(ÜáhKNJXJř+á [ݬHz™fNĘáţžI“ő&ćn¨l’%'#2‚á x̲qO’69)ŮÇaŚSśŮBÚ(p”Ţ5“REo:˝xzQFWŔl“Rlj‹˘dř70ŮáirfÁLJ9x™¦đz»Č*¤“Ž{`„¤sÉiX`@Ť'·mlzó >˙ϲćŘăH`3~Ą:ČĄČż–N/ř/"?¦˘úJ(pÔşć;Ků+Ľ“ő1|Řvős˘.űW¸4›˙>#ßĐwx’łůĚk cß ťD8I.ŰŚ‡Í‡Fr#|•Ü’*Ł™MŃ/{ÉúĂL;YáÖh9ęLôILŇX)Ýń/M’R–Ł®e†Żž®˘OÍvě‰$[Xç;> iňd×Č„<}Ź# A0©jŤ•6ëË´úfŕë|UW»spm=2šÖŐ> }2]Ű—…­:a‹Ú<Ć‚>­gŰď—fFËĹDů©%÷„őU˛¶MOú†h(×!Ƣĺă^#”G˛BŞ(Đ6R‚řîŤC¨Ö›ž9“ăęÂOÁ“çŰi˝wşm2xÔ:Ö&(éŢ#Ź&:Ücee˘‡vËđĆűеýö/›ÇB!!‚±)őGCű}ädöŹ…ń2…Ź…âc­äIgżéhé5Ô> \VgŁÇo†Ý4č60ż»ÓCßÜ +šćwčfŁnÖ拹Ftf˛3ííb9ę©0WݎŔú„•ѬŃU&¦MpĽ¦>dÔ>ËYÝ»ÇzæbĎÍ'˝dď}˝\áÚö(ě!1&ZŹöîĐ?Ág|ÉĚY .ďLľ!Ůŕ†Ú#—Ł6b46HO@ĹYÍ==źőÖŁŐ÷śĹé©ĐfÉőś´é U·K5űCťU{:YÄ5lŤëŰ›ľÔg5ŢĚtś_§)&řţűH“ůţmš¶Sś$ +îÉţˇvÉëôA2Ĺá@fob fŤŃt1Ů3}·IsPYAŽ꠳£ÂP+Ę"v†ô-ËË9h|L‰“-/çĐ˝–°}9‡áÓxc÷čdMë˛Ö'?Eß\WÖ“ŐË—ÝÎńŃř/‡GmÉQY*?<Îá&^Á#<V2O¶łŔ‰sĽĎůĐäő#eG]ő×|”N’Ą€{µä(_';5puďtbkť7uű/Q!ÜĽ˙Ą°˙v•Z—M¬P%^€I î'‚Pâń„'ĺ +»—P!˛ĽD@Těßó6}ycXŢÍč üUť˙{/¤±.čÓ»jpAµÔVĘYţZ.[1ěĹgUŇAţbęLSú ţŞśę˙3Żc2°wőcŃć›p2ĘJŃŹĽŽ‰ąŻ”Ż!y;2 ©ßÓÉ ‚öiŁÎzĄšűćᤦ)ß›ćß„Ĺ׎&=Mť™§Ś<ŔĆ?«ź›­xĎT])=`‰ř9]µŢňC™¬7÷:"ažíśő¶ź˙,űoáü/0\ëő#Jgľ^ý +ß-7ýŮ˙÷ůË~Áßľ'Ľü1đÄ/0ŰąR˙@FÉá}®î­Ź>˝ľĂvVŇëFúäU@ż öŔ˙Ő®V‹H8ĽXk“Đ\„{]ř˙t„ ŔČ´É;Ś~Ń@4u9_kÝ/nűl#Űű~ÉLţĂ‚×oř·ŠýźB¶n~•´˙äšşÝČy×?gI¨—őLîżÍî]łeű‡˘-ŁGÜëp`ů?lBţ;ŁÜ˙:«:#rÄ”ţ§€Ą uĄź»ü»¬ŕ˙3~ă+bgóٱĄďŠÝ=ěX}Hô#őůOzŢHéLÔoYĆ©Süřľ[@؆’#ťÝőr5źţÜßTE#K{bXiŁůľ¦ţOŘ ,čź¶ž˙.S^ö˙č÷˙OľśŚş˙=nśńÉ|Ž'­ăˇmcłę(ůCă™o(ŔĐúřĚ˙6ˇ´Dł!|ÍéćŇň—„ţ®?ô :·<şôżNćîËăż"ňç·üů!îó»ňż˘ďŹďyŞ}›íĺŁôtć+HDĘjĄż$ü[ä}ľé“sgÚ }ň«˙ڤbá?bf“˙ß×â˙öšś=c˙ĺ[Şg&—,Ç-iŰf'‡ĽüÝVVf5ľ˝6_ŕk{É <Ă1Ňć&ߺޙ+ZĎÖĹ“6Ć6ĐÔ u_w¶„ĐGá¶KŐŤ!ĘBŐlËŃt=ŮžŐŘÚ3‚¬4e¶\(ŔëîOXŐ¨gĂ_ů<n2Ĺ6žAą;_Ż~ľ!ů“ßá ,°şO‹S&Łĺľ÷X.ćźZť*˱qmäJĎ,µYĘMo1 +m,Ř’ëŐÜVW–+UŰ$ŕ»|ŽłšŢ‘Ë—ŔÚ¦ä?¨ŃrŽż®TIĺ»ßNüĺvuòš¦.Uí‡jkŞ¬Č¦•Îh2Z™Q‘üüËffS©ői쨀ÎőÔDU{čŤ[»ÚŇ拤¦*úaÂCňĚúb ˤASCť¨ÝŐ†tú3„±őki&‰Ž«<.`_ăńĄëǦFřü^*uôk7żf€ŕůđa~ŽŁÍW śňŘ+e:M2ĄŁ Ķ›€ü`ĄĚş‡+ŃÖX/sł÷„Ü®úCŐÚČZ+X‚kбÖčz¨>ßśˇpö<ŽĘź\‚ —[gw2F$"z‰Cş·úäÍPz‚Ux(ř…čEK™Ť–Cŕ…•sÇL°;-ČchőH^@ži‡â6{ÝąE#Q<řü\”­ŁL,üĆ#¸!Ţřő/ýM÷´đ Yoů€f»ÜŻ|afÉsSŚ›şd›|ě„‹ĆşRÉÍ˛ŽŞµʎř˘Űo,őž¬’3+ŹE‘¦Cśń#f¤1íwć;(´_[Ö–‡{ë:Ş|Ű,»0ë©4Ôî|ÖűK¶şa‰n5;\‘ů WđťćßU‰Í”ź4â×–¶eËçµ}—3ą‘¶Ü`ÄŤŠ“<î›R6’őb>¶ +bÍ'ťĂqż|â6O&ońmß ÇâóŻ °–´˘ŃĘ“_ˇLÍ˙¸7_ĺńýřŁ,ôaHëű´<4OĘă«ď„ZŹ™ŰĚ{7ˇo·®%ŠĚŢ>â°ç™?=ńş@´µ3›o}Śm4ÓźÚ]ŽV_T]–r‹±% §K,‹“#ŔiôËiĂ/×wüňnľýL“(n»mŤl­5I¶šŰŐęáu ˝B ë?hKířvú蔍ťüÍ:+ˇĺԤߕ\xŰ1żĎ;ˇÎh5U0ě–ôđĹ`:u0¤ĎűýĐz©‚o.xÓžútůVĽKďhďç DZěŔZTw2Xwús|Ňň\řV­¬0ZO[†ô3{EăŢL ÁęgÇsdaóŐP5+ Ďm¨˛Ý©PJp%=Űł§qW­={m?<ŔřiBRű™Sť†'´(łŮ|żţµý±-ŤdîwĚĺć‹Ó¶xLei!b @Ě˝őWË/çčÎOC`ŧěÚń!ŤHÔŕ‘Vzáôčd´8ŤÖl§v=Ş}¶8ţčŕčĆ1ěA¦[,Cŕ01÷›Ä÷z{{`–VÔţ”CĄ§jęň4bŕΊ;;nű]ĐÄuS–—ą8Śś6i–đ‡ďű8<Ü{äçőĐŽÝ"ĄÎ°.é}Ď—«Ih±čˇß™XŚcçÁ¶S&?ź`?$żâ>­ ńôô)ItÝş›o¬Ożaö} ‹_ ^gęö–oĚmFú¨(­ęAK§µcµqg_AN Ő3‰Ů@0îŮ:?m rAí4•8ÉĚÚŽ?ştŐ×!P7൉qn_µŹíO÷9`!Ů ;„)CO]ŽłC»iűDµ:ĆöđÉ9 ¤5¸ťT–zÚrŠš‰f ÷_h*ÎüEđ Íh±ŻN„ ›D·3QşăSŔZ<íh1śkš*Äśk#H¸­¬? +ralśT 2ă ôéí˝‡€Ěcťôá0€`KܰÎvpeËîbŇýůÝŮ~śđ:Tw¶<©Ö´Mv2ú#T‚Č&Ęâě0ś@KŇŘĺćQď@żPČşOý~&Hn7Ń—Ú2ú Îë‘ßwßě|˘ ř +hŽo4ëźJŰtĘ´ů)ŁÖapŰ·Łh'Ó Ô,Ź-żâ°D‚o@k_9ß]đm@úF­dťűŕ–…zu’ŃýŮ +ę‚ÎruÂú¦7±řŘcő& ­?ß¶ŮĂůáDýˇNN§3u Xv×ćK(i± +ţ*Ýßž;8ˇ»dgě«´°żžuOĺÓ:ŃąXZN×'°%’4Ám»{>»­…ę~›ö«Ň˙p©K‚)ľ„L™ ~!Jš§/¬·’Â.ÇŁ„żŮ©Ş|Ó'§„Ź`(¶Tçäťi§A1qŢ6ęľÂkŇtX*ĹyeÜ*“ŻUş¨ľŰ©ŇˇO´Ş,J@:AźtŕSßëpKi·ĺ…HżęyíLfiy™+*+Ë•yú˘±Ö˛ć©}ŠĽ¦ô0w±á[‡ô“'Ď:čw•+LOî"§x>ݵ‹Kçä/#Óoű¶Íë|fĘân!8Ł)żď´öĆ­o:4^™˙€áöR=Đ'yîĂ+&dŚ›vlmô‡:©©ľçé€Dů“_9ĎSa2Y“°:×lŁŚ=ÜAYÔ2ąve>›w‡Ú|JŢĄ?ŢrH‡&`pý¤ n°ĎVĆ‘ D^›OFÝýC‡`žłP‹Č€¶´˛ĐŹ‘Ť>wj÷fúînß)N>¤i9¤xú.BţíR%Ţ«iÍ|^8Śćgv{˘‚>)Łí6 ŮüSĹVžĄŃf“ěPJ`ŢtčdĘ©e5µŃʵťĘ7R†XŘÉK?GnÖĹAóXx©oŻŁnÝ"jAŻm G¶ŐPµ]ČU{iű}¨ÎlK] xA›ŐÖŃ„lĘ//íËä6çdí á{¦­+ŘnŇpdEłÍŢX852kůd#](H|FE$ŁÜeŐő俸‹ąŁĘ} ČşŞÁTBËO‡‘ÁĚ^ĚŮwz¤„–gÂíUVpF·ůx…»Ś”źÝ•„¶îŠą,S‘ÎiŽsRÔ2󞨳Dô5äK\ËIJĄM"Z¶k&Tq•\Ý”śÚHŹbńn&r>á*÷ˇÉťGÄÇü*óţ’âät^^‚śVC\p®sîě.ő>qßšLź*vÎv&Ę}±uóôśl¦C­ăX­p‘—ÄĹ8÷’,CS&pľÎyň˝> !üĘ˝[Éô_îÄÔ$1ąŹôSĂUz(>Ň;yseştů#qqéľÓ'‚E/ÓŻ×9|r}d +˝‚=”ŢĎ’Ť s¦/â^é­Ťüîńwł]ţĆ“ríčEňśuůS×7"íľÍĄŐµ/Ţ*:‡ŃnWă§‘?Ű/uÔ4VDmtö˝{©ÉůĄ;¨ůź×ÉrĂőxŃâ4B´ő’HÎşî©?V‰†Ĺésl$ŠáeźMjÝíGčÍ”ÝLqŮΉnUĽc©^d”+ dşójj"Ö¦: ĺóDşpáĽËdßn›)< θžżú/Z˝§Óqľyăłs ).řś(–'áN¸™!«â©±W +Úę•)úĹYÉ„• WÎîÔŤ€Żdh¨ŽŁŔ‘/ţxîÂřtq—-éđé@öMźŤy` + Á÷”?ĎĚĺ fLt»öŢŻ_‰47+†ůŞ)ŢDP©âf /Ű%ĐžXˇTŽ\ăí©L›°BÂ%'< +ďÝd3óîĎôĂĄŹ¬˘¸ĎRBçöćâ*ÓŽ'›Ăî*Y;ëV’M†EHŠ/N¸©÷˝»\o¸¤+ľŽ·łI“ve +íažé7˛=ÂRWńúăÎčť.%śĐdŰ´ż•â„¦ oąHĺî’HIâGšôü©ąüşĎÍ]Ň­¬7YĄ §4QlíÉe&tŠ*ňř“§FúDqˇ3OD›+G˛Y\­?ssOš֛ҿ×ěx­‰>í#4Jîłj]—՜ǵđ¦‡Bý1ۡ.|UÓ”Z‹E7+Ń9˛aG9źli˘sÁ·šl)”)Ľ‹Šát©JŤŹi)Y}MUré~Q˘čR§—K÷¦Ä“C>5bwŰÉ…U9öşj:c{‹4°µšÉŹĎUŔusΆĄú‘»ůçőîĂuáS`•_8:˛ěŹr×{<‰–ó~z´ ÄuźjŚ×Y¸ÚŇU#®)ŘtÝ‹JVńÇŠŹEëŕ| Łçe_~ŐîM“Ť·b&<Šyrú}÷•lVćD«YPrYéćĐ\ř©ěó†#‹l`~Íä\Bäż–łÝń‡ËÄ@ e˘čnÚőä.ŻŚą“őÉÂg…»Q®Ŕş9±>ô…’Ą‡>/jńč&@;Ń]ŐtůŁI+ÓOş_wBB=—k{íCB8ŕ™ +¦ĹwöFM@€ńNä±Üî°šźgÍn ys&~ćŹÇ–Ś&Ä,=Ýô8;‚43ĄŇU0w‘ĺ˝d”P3đÍtřf%qžš©Ęëik¨˘t9ňq‰V',Ö®*uşóz›d]öł,ă={MÓůt9źâ étŚR;‘K:ŕI_n®ĹÍîM:(ą†_Sč!ÓäNňUh”™Ť‘Ű7Ňx-ĄO•ĽćD>©3íÇEA.ĐC#<^ÉlpĄęz;‘ŽîΑŘ,?ľą#J@p95˛&˛¤&Ję‹AJušqYČ &^‹’ٶhČű\ÂEÂJľšLĂ)» %7Eq”rąĺ¦Ś«Ó9Do6Lh–nĐ\X©ŮJ0~RľßĆž$Íž0ô›_ŰÉ !„U»‰ş¶_ÉTÔůí"Í®@ă‡ď¤XôE“Oşt¬Ű݆¦TŹoč—7tmőe_s jŽň+¦ÓJ,ČäHlK5WńuĎd͆Ť±=J7l‰ěÎqą»śôö^2ş‡Ő”ÍÖ-zł#ÚřVy 02#yŔd˘›%Ö6nDWUšá%™÷»ě¶,â¤Ň®Ł + /7“ÇyCBÜĆFM‰L ¦]l0UÖ‰öVÉ']ZEˇę;gŤ@('gÉzP‚„ł´Ř‹Éf«4Ë%hz hňçů6°…÷–Śe}s~‘kŻšľD”ŞŮýŮÖý•Ű‚g–Ă’)ě—QV8Th¬ô¤˘˛ßRĽŃ24Ą”ŕ†śĐűt´ÜŁŹĺ\’źI•°K’ꔀFš)1 ôąLéňł˘IµŐd}Ö¸M6V…iÖ_{vG'ą„|ľ0kŽşw[žé +OÍŹd5ťŞ‘ĚĆČş¦;Ľ2łł]Z-íŢÖ“âs±ž)jľ·C$ů«—B˛tw9´±¶Űóq~YU5#', )ĺϡMi:]Zś®+HĘa–8›(Ţľ¨ĄL˙fŮŹjORg?Ňz2Î2ާÓŐŇŃR ĐX«Ą­˘"qz!~ź¬ć2ďwíôč]GűÓó¤ľ>ŘĹzoŽ« nÓ&#ĂmL^¶SˇBłýw‚oÓ8gA漏ᆍżAWu§‡ţ‡txŹE yí˛j§Tö‡rŰj}šUµ+"ŔĘ:±ËPÖußĐQËJŽŐ®¸®î[;¨]M°đŘ–»µe©ňX-Ą¤ž?÷ÖŽË™ü؇Ş=ËPLž«ěĎ{c÷>ďŐ0†¦eMÄo7™ţ­?^;—aĽ˝¬nФśĹ ëNěőÂ5>f_bîőĹçĚegë7ć\žJ¦ +\ÎÂO’Ř-S7µPó0˝6ë‡óäÍuŁ•Ëx{ćŔVçç.JŻ;5Ş\ę,¶•ô~s‚yŁlŇĂg{ÄϷۦ~˝„@ڎRj\ńCâ_ëoŤ7‚]™×ԉٷ›†éM'Ć”kdřă¶/‚Eáě˙nÔFum5âEčĆŮR>L M1-=8 ÄÚw'Ż&ůŢ;Č&¦1‰[»Lä@„ó¬ŻOЧ]—k"iů\, yU`Žć2Ű^ĐťDôÖ˛4Ő~âö×µ÷dóVy ‘ •{N°°ś«ŕĆWď·:°ź6ÉÍűÇô†Ţ€6M3¶ÎöM3fwš§-™b„¤+ÓáÔĆ—flY šń:ç­M˘ą ˙Čřă/ľĎS~Ł`™·l1ăTą=$,EŮÄ…â:Ş÷‚‰Čőűxłš‚#7KÝDPÁŕâc>Ę„ďŁ “Ąn5ď*;Äeřş•l–hŹrđóň/< -(Ż“µzř%2z•ú ő;ĘĆ’őčń)˝)ű myľÍµŁĂđ>V&ţ1I쉏ˮş@y­“Rg1ŃW­€q ÄŚyZóě#óĚeďŢÝ)훋‹ľ¦&SŞJ3~â‘ęC"şéĎÄpD6*J7sßQ(éő:źAJ~tçŇŞ0N63 +ťšHN‰bŁD¤z3!Bł:›OşDv7bÝű'0žL%Yo&>>+s™Ĺ*ËD$w®—Â}>}ťn]nŇFÁŚ7âŨű”)tëµwǬ>I˙Ői‡`BÝä<Ĺ˲|őś[ ˛!Ȩ[I–Î’ýĚŔů‰‘E( IŇČ·ťJOq¶ľ:GÝ{şđžť·QÉ/˛ťđăb7-××&5]gŤ\Űéj…ţçěëűŞKÚ–źYš_e;)źĐD*~ö)Ůlşě;*sYŘĚ[6šZ†n”u—l~}>˘%WÎ\:ůąc˘€ÝÁ\&Đä7mF}˝ň8™m&Eą>ą·ÔČLQGA0.(XKył@s“¶AťÖl]ŽńnĄ&3Ęu`55vŻŠ)îÁq{{ćÜߢŐČ˙vfń„ž šqáĘ“ěÜj€BbŽń± R gťPA<ĘŰ9"´dżÎyj«déîY°ĆJ×˝Lo*vv<`mpúŐń`ëŤu—<ň“Ýě}čî×=Ďôĺâ$ÓńŤÎĺň›v‘KNfŇCÝSTÜŚ\§ĂĎ™Ré"¬çpĚM#ËŇ}O.’¬;L©Ţy 4ĂB,—ڧ„óź)(“óO®hRów^ęčXC™RÁŤ®=Kş¬kąµjŕgťśÝ ˇÎ˝Ĺ›d,}{Ľ”,ó˛>ŹW/@Ŧřjn%Î÷¶đ >DsžÂ4)źŻťąL­ŇČť/8đ3wę Á¦ą­QŮ|Úć]d#0)6śé$ü{•¸†Ľ‡Ń ”+ŹMćg€Ę˛źŤÍ9NržÔmֳ켠Oˇ÷ůE-ŹD`ÁÁ‡ăhĺăí7ÎA»‹=,¬KÉů°ęł–V§L–h˙¦(o@€ě;‡J#1!{–QUî¶Ś}<ˇxkĄŐÚ«¸drŃ€c[çÖ4k(_ôú9O)/[%MTöćى“dŁłčë%#8©©Cz·$P‰«ĹÇĆ<·ń† ąc/1zS­%ë[ćs€áµLa:ZBKMa‰!÷V9—ŹgŐČ6şŇ•^ŮyXćf˘!Éóp7Ű™_ż€kşî^˛Ę[Á‘šú]–˝Ń4KNry}âYÎěÍf1ŔO´b€é·AWľHÇ ×› Mśé»ćľĎąÖ 5Ĺ­SP +AAn)Ý ČÔ#; e'©÷÷Z"Sčݬ2EŹ'‡ű©}ç)9Q¦$cĘ®\»‰şŰ«ňÚňˇäÖČp5gµ/Ľńµ!fv§´Ő9×+Şđ”żŘ3 “H[şÍČőkgť{{e¦¨iěfoţŃŞP15e‰hń:'ΩńÄŠ{O¦ďZ8…Ui˵'ˇđ.šŃk`YúÄČ«ż;Jţ}ٰŢ I§$9·{.ÓwĄpRĘ/Wx˝‚rźXzď™Rńĺ#Ł^Ľ:¶BÓ+‚7Âvžä9,D:U×woÇ{e¨ľ®®ríŐK0—p«ÍÝ=Ř‹álĚşˇŃ:J€0Ď?JÍçl§™ĽË x×hĎ“mśéż6[wY†X˛Dxú·2Ó狏\˛–XD*Ëő|·›(´\ĎtÓĘ8ă…»â›UłŹýBvÓŇ$ °ýFc•’”‚!vMňÄéL«=ŠÍ·«p.łN’íÍHCÜÁLn–¬@DmzSăčEĐH[ö¦€łk¬›˝íaÝ3“Ţ8RĽ7‡çl˛˝Hf`qť@ÓipÚ`ßm˛>/ż ńďŘZX#›Sî‹r6đ’˛Ă˝ĚtŰŇ%ü‚hüRdM›–*săYˇV]·µ^Lö6;§=P]ßÔ™˘˝OYiĐ´Đúč'I„Čť—ĹČŢä`Ô´śëq0Ëôç/~Ňh:Řř6<J®r3ż-^“ĄGŻ´UoOűh(¦(n;yl·žÓě˙‹˙¶y6t÷H^†Ľé˙ëăvv»=»–kĹTŰţŹł™pőJŽć”s-–jô+Î2˝¶Űµ;Ęîâ®ęP¶&Vň(WyţSŞ>¬‡„Ć?˙üÓn÷ľeěvźŰa·{ЬĐůr¶úçö€ĆÎ$´› Î4ü +őŃË`ÎoŕŹCʧj^_‘k|˘őňá…n7ůš}ëŠř5Jľ¦X)z‰_«:pó±ÁŻ]ň5)ݰ řŕqŕäI©öއOŢ~E7›w‡’řâC(G8zͧŔ5Ţž…DˇĆŻd©<Řxp ‚4…THűŔŻ·ř5}‹xđd>Ĺ ;ůŞS#ĂÚ~ş€Hűű<îbQrä.Ŕ‡ŘňĄŹM…µdócyžË¦| đŰó’íśEžHm–)­ŮWÂ5ÂO–x +€?é´™L­0™ł§őÖ˘ëţéZśi‰O7ŤűM™Ŕíř"hámߡoü¨_´ŚžiŔ§yío“‹x;\/©îŇ+\ŹL`GETmĂHˇľ]°H”&uÓ¸”ŘçëťO=<Ö“őŢĄ+• ;9˛"OhđńęĎÄDZ¬k~ď˧ž…·Ô8Ň $>F)‹Fm§­˘ľáĚô\cěČ Öą‹\ˇ*Ą.±ĽŠřł•2Ťť&Ńź-ç®ölÝýóĎđ¸X‚đ˛ŇDÓ.‹ă Ě ‡Ż|§ĎńÖ"„Ů\Š$háRßωÓ'úvo=•hayU§XOpöAžďţTPľyÂł•nR‡C©ššđçťťcŤň Šă¦¸ËsŻŕČSY¦źOŇZŹXvĚ0ţĚfR•J|_°†D˙$Ęü§ÝéĄvg¸;µ;zWďv{ćŽĺŐŇvűeq…+uóú^vďőý‡Ý‘}DŮuéa˝žü~~.Q +wÁ‰RŞ„CATr»Ëîp˝DěÎ@ćÚ~Ćř;ös¬Ř«b3ŐîŽPy»çrňd÷fs»Ż Ůý%Ř­×–=řś}·‡:AŻ=<ĹěÔ´vc§—˘jgť«3;»ľěĽë˘hÎW»H·5»”¨°v9Ç]Ů#·öW{´ŰE1Ůc®;ŃŹ«öËVl`OĚhż=ńeěé'gŰžuigö\í#aż:_<Ű Ő…Ó^‚X`/+çműőĄßkŻą„‚ý¦“Ů… +gżĄîoí­ő»Ă~?díŹí–öçű[Ńţz3y¶ż5ů€˝ÓŞ7ě˝űĹ™˝ß‹—íĂą˛˛Ź]Ô•}yř°Ď«ˇĽýŁ{÷a_+‡˝ ¬ÎEŞâpĄś.‡gxëđ§/)Gpyţć *JÔÁŇ•) qđCşv{ŃČěŮw+Ž„öđáHë GîµÄ9 +/…‰Łü|UuT{ÎQźÜĚ·«VÓń@ÁDĎɉĂŃnŘŰŽÎP÷ŁĆ1ş… ¦ÎĹ‹cQ“°†v¬Ü·‚ÓŃĐÎś.îrčôŽ:wÎ`C¸rŇěää]¬ß)M•Ąóâ-Úw&ęďŹÎĚu±ęĽjP9gůnsÖžo8gó=t>8˝n狼p8•š˘9ŐAcę|gJď€Ć9«§‡ÎĄ+98sT/űgî@zpćÍϨhéýŚ·ßNĎäçöÇYĽ´°źĄ3´űěŠMĎ*ţ;ţ¬XĆÎîB‘üŮs¸U;S"Χł~Ą4<żA)»XĺCçöčϤś»îŻËçţµň˝kev.¬’ţó‹kWüá%óỼâĆľ+öLőݸćŠďa®ľú:ĺŮ7˝<ůVóö“ßëĽřiŢöGŻćŤęűŻ™‰˙®rŻůÇňÜ˙^‘Bţ•Ł.š€§íL\á:pś?˛ËÜ(Pí.ť‡—čľ±ŮŔ´3ľ :fÍq0x÷ĹH0L^ÜK“ţ<ŘâźŮŕŰó]%8Ő‡Áőŕ‘ +ůSO•ŕęLB‰áŃ„J-Ď]¨Uľ8 )ĄŰ«Đ¤8›„Eö"¬×;a©çäĂéőŐk¸Y±áÇŰâkÔ‘Ô^;”Ç“Ľ Ř[çşä•U\ŐśTkąŁ:7,OÍ1}^đ`ŐIÓ×Ţ0kx‡tAˇ*ôí\dčťžÓł«Z‹9˙%&ćö3ńyv”үĚ˝/”gzjCd>ĘN7ëÍ4f¬ŔyßŘ4˙vËÖÄT‘}‘Ďě{y qŽ»*îxráUÚĎĹ.DW|đ;¸{ßŮŠSΖܒ=[ňţ±oĹËw˘Ď§Óçüm¸ęĺ»ÁĹ|˘ŕóĄ.‰~»r©pChÖmˇ3ńL„ůÁ%úž9A”˝=r.˙Zş[qf,ö´ąO\ö0ŘTŞwŇĹŐŐB*ĄSśôŹ^KŁRâ]vVŚĚ¨ĄšśrµňMvx!ż©g`ůŇE â=ÜD"9‡Ü×e>ň !nĆ2¸…VšĚŁ\:ź‹f2îe´™y)G{wEwtĄPw”ÇÉ_$Ňڰ[¸P¤gďĹG˙ń-Ľ|HÇâľž7v­ »±vë¬[y6Č—´x,Óy‰_—|…xű±‚*_Ś®Ë`0=ľŚ_k/—ŐEąv©ä™KmˇČ‰p5N$EÖťhxÎí‰ŢtĽHÚ__ĆIVy%ł˝‡Aňnp×Oľ»•!”źă÷”|łž¦J JK˝¦ňÎÔBëú±˛ ]űŘt’)ÇÓŤŐŞîwň­ĚŮýş—«×ËL± +e^î†ÉĚâ­ŇȆ]ńQ6%ůĽŮŰg{2;ňMrî»÷e.Ęąku|›ëTWËĽ=âŤĺů ôš/xŻMţĺĽ[Éř˝Ú%—ŇW™š6ľşfăWSßdP4KńBŇë}/Ü>uÓ…w9Ż˝kćşWťţbŁ9|)[jĽä©>-K±Ç×V©®*28ĎŃŞě‘´‡r¬Íŕ©ÁrĂťô•‡­§÷Š—¶·*ńQ*]iŢŽĘ{*jżö‹áuRČ>]ßńÎëëéĹs¦Şä˘ŐĚ+ĹTźë@ő#;vסâ¬.ź×µöęuucéŻo¤ÜÜqS•=ç€ć¦ďĽuO¸FŐ/Ůw±Ţ’—őéőm±V]·Ť|¸ŢiĽV˝‹¦ÝńěoJÍË‹f-â©6«~çÖ×m9oSOĄČíc#qs«5Łă˙Ł[•aĽŇ껲ďwŢT4wÉA˙öîQ:wÜiýxö^¸zyżŻú=ŃűÁ¸Ň}𿝉™—ŰÎĂË#=Ú•Q˙12,_>6‘ůă4ë-?ŃýĄď©Ä^źzŻťřł7Öµ?§ĎGŹĎĎťEüĹţ“i/ŃëHçĺö¦Q~™7'â+§Îתý±˙:}·íĐím¶]đĐb»{?ôżyąÂú-=ŁÇoŻO«®rVč<+—‰Öťň¨5”uˇvÓ‰ÖkµN«×Şu4_§Ţ•®WxôĄŰXŇOÝy© ô„Ŕŕ˝wÓĄ´Ţ´őäUą"Ĺ«µŘcJť¤Łő>{őŃíWďî×ýq?ÁX†- Ş W{0^ÎíCöfÖÂÓÖp2Ö´÷썎nn#OŁŮuÓwˇÖ-Ľ7žýÓ÷Ĺ Ë®IoÜĘ$Ĺńň}ˇL.˛7ŇäaM«SÇý4>M\4¦ÓW&Wśą=˛{–uÓĎłnŠÍbh5/^±wóa'~±`¨ŞsQk´ßsż˝h>¤·8˙qWPšť ©Z"ôŇŇÚ>1żôž÷ĺݢvűbý lkeËBťn}&íě§Ů­<ľDQČęŔ †€<-G~1eˇX_˛hŞÓ…ĺeNěvvG–Wx1Ű!ňS9úc®¦¬ ú®ŢošłN4ň}»rn;ŇŔ—űí>iYó«ę¬¦|z}žÁ‘ćÎOGZGđdĽ^F3ÍĚţsČľőj^RµíOC~~eO;)ąťťő6ż˛r%WişťRŁ.Řüí_äJëĄĂý śý—­N +ű+A˙ĺpĹâ'†»¸‰°››Í'2e/›«T¦/çÇWÎzLÉô©‡řf”ńÇęÂĐîeŻbö`ŘŤ›P-Ž/ dz”íáĆŢúPЬ# { r걩 +C…c‚ź·§˝7Ü’YV`u™1wY}‹ł)‰•„GaúHžă!§R·ŁÔU[Ĺ˝G b['X\%y—®.îBąů#×ĘjĎŹTć1÷ĐĚĹ’±.íKŠ3*\Uońč Ckő4uőƇ™7űU•¸‡­Ł+4ßXڦ]Úש·Ęş’ĽşŐk6ňĺůU%‹h5á•‹ĽT3sů­L½Ĺ)Ôŕ™ Ö….›ü$._ť˝“ÉaŃťěF._x/ävµROźŢŠ—ä¶PxÉŔ§ĆâδĄ”›5ŹüpK g˝şŁöĽH!¶,­ýńĽÝµeĚ+ĺŮ»¨łOÖi,__]y©iŃĺŁö­U©0×đčŰh+v‹n¦źąűa9pëË uu«ŔĽ‡í‡°.;ÚkŘGÂzťň:o“ň!¬Kç«:†ő*~#ÎZ+¬Ű'—óŢűŁÝjĺ V(>ąŁX©\Ş”8„sóđRpžÍ4oě0“ą‡W*׿nĆš·_¸čb»ykţŠi¬DÓ>3™yŚ7ßÖĹÓE{§=ŻăeÄęý,WĎű4ˇ˝€•›o±"]´eĘdrÍíŢĂĘóÓöâÖ¶ö2ś5Ź`M(‚;ŁuŮXëX_/ßęǰ^ť±žčóa¬ö—Ąs¨Ö÷°"ńMÚ˙8›–aőG'‘ř¬‚Óů±~c垨\éOż$ב›ĘçÜuććV*7ŹbuUŞj~+Ac V©üŤóń0“Żď¨óq¸Ő¬âbßxÜů6k`}zö°ňăFÝôitöyśŰ!÷1N• 2‹X}źh˝\ę’;„•*OűęVŤXŞd_;ǰľRŐIµqkÉýX +…ćÚA¬Ť +KJçcä–ó\‰;‚ő‰Łš…†÷ÖőŞQÎ?‰[¬XÓn·¨Őč(Ö¦zĂZ ZŻîřa¬ełŮ–Ç~}yÜ»`Ëuë]ŇuĂ:˘±×-ÖßČ 6Ż ę»˝ëóÄúŇqTŽbG&îâ¬Ďؤˇ^_“Üar«~ÇÂĆyë{ď9ŠŐńđę o±’°fővMËŐĆŐ˙ÉxŞLÂď.ş€5ň±ďžÖô¬e`Ëľ=¬X´Ĺ©F3î¸çj7ňÔü‘ů*‹XźM¶>ŻŽ*uŔšXîÓš˝^PÖŐ%–Î{~ńś:këĆĂĽ¬"Ĺ]uCeł·9ÄÚĂŞ­ßÎínŐ#>ÖÜz+ á໮ř’.÷°:šĹfť`e/oËe+Vf5ł3éU±Rźhm±Ďď÷™ `-ÚÍ>“5-ë7mmş7jgäB˙ř(Ű-ŤšaÍŹÍ'GoGěŇŽŽRŮ‹^Ŕm|ŠÔĺÄŐÓÖŮä[źü}ąŢlźí˝uŹŹVě“Ávô3Ó¨ +w:~{u=~?>ÚhÉňˇQ“iTcMż˝YźWŹŽj«cFąüĂ'3nÝŠ¦=ď[Ő¤×ÇGďÎjg'F…gĎvôÓ™ă·?ňOţăŁ/cOőĐč†iŻîţříŻWőč(„üxüř(×"›°ÇbˇţíńŃ”ĚqÇGŻăěüÓčęG$zôök1oµ»üiŢmkź™f?«ÄÇ&@gßÚ*3=:ęż`Ę™ŁŃzÎÂ4`a­ąIëGŠ·ĘědńvkBń—N…‹ä 9NµŘČ\úM)hw­áSľĺ¤;ť»Îő 882äNĂé>Pż;ĂŁXÇ zŕČBp¸¬ď8QÍÁ¸cµ É´ĄłőPłw˛nRlęőP$ýô°uÝáŠ4sCż&ŰŁq+‡˝ź Ťô•ňUŽ`…bH¬{_Ž`}x>„÷ąŽÜ‚=D®Q9oŹbu:ˇ‰5?±b˝°{ Öm.Ŕ5άL®ńŚkĎĺrn±.ݢk«­ěV~čő\>Mö°’TÝ`ň‹•Ü]¬Žś:Š•”G° +N¬+Ţ,ąŔ.ąÜCűÖü™p+Ö{XőTÝP(ĚS”cXëDZJץÖq¬¤ě:@|†Í§ ‘„ůbáoÁ±ięˇf”zóE’ß’$p[ż˝0Nżăł»?·†ârţ>͸/©ň†ÝďÝĹŮ€ĺO:čKoZ7¸/v×ę[«ľňh7ţÔ|y­Ż>e°M%¨÷Üŕż­ÁWĹkź‰AO® –ĺÔ\ ¤‘0«µ­¤ŠüůůöO|áé5ŤdśL´µ`†Ą&>tť%Yq*ł-ÝQČžEKĺŻ(Ä?( ˝™rTŚnÇVŚGe†zg-Ô>S¨w jÓoń2¤ÔwµuHKqŁóżNͶßý’ÎÎćÚĎéěË2˙wôËT®h™öoá>ÉŽ˛Đü÷űéĐÓŻűo8˘ěsÜ·ë…˛ű^hC˙7ĽĄ`Gž?´n˝ë…ÔZČĄ'kźŮ—Ĺ‚˝°·ś=ólŻÝŕę+ űîsđk–yY§J‡ťř1óÔűźŐí!čřűÄ]Fn*fĽ9Áî7Ż‹ŘŇ‘•K;N—îJ.C¨}ö9üŰ$éhVŤßŘ㎳qáźúQQQ}Úńp”1$|Ź7§wĘchN¬6I×»GGzÁ¤ĺâ_śmßú”˙ź˝ďěŞj˶ý^­ńQâ^{ĺ€T̢PQ$Ô9u?ĽßţzsĺĽĂ©ć}ŹS­lŔž{ĆúHsŽoĚ +÷ĹNHü˛>¦§óĹĽÎťfbDÚ=ľ5?'˙„"Q%´±?ľ7Ţ|¤ňOâ‡VđŤ¬Dbş·Eýčj»[Řkş + ěŹ?1+é¶űýlö~ťŐ‹±P qÚF:k-…7Ś™ĺë95ĄbíĐdęúWőj*·‘I4ŞxČţ§ëˇ€Ş &+¸‹ű5“ÖĹŐs:ŻšA<Ł6Ó*ĂzŃśž˝Ś™7† äČcÖk}†AZß´:ĆşýzÓ©§BŽzÓz˘Ż¤«\L:ě­Űgo%]éCÝ4c¨›fuÓ¬A6-ÔÔ!ąÍEŠ cÝ~ŰÔ'÷×FÎćňÎaJ‚„2­ÚŇ(燫…±ÖĐ»’=żmfő~˙ěyµ0ŃHisZĂĄtu»Ţ -‚ú şÓÓ•íWs´ż·ÝŇ–(EŚXÍ^CsćÉôb–΄îL¦‰ŰĚ$‡:ł3IPgÓ¶4°lŢxÜżÚHVnŠĎ»Ó}6çOéŔ…©Ő pú‡• €2w/ż]ő2B•űăÇĂ2Ľĺ¬Š°ëĄ RˇŁ«^˛·ů{¨Ľ´eX$-ˇŮŰý«EĚÎ+ q´Đőn|ž\Ď:0ťąŽ˛Ćföóa űí¨.Αô˘¬µÚŽŠş°wE‹óĆžzË:Ô1žĘ!Qq?ü8ŇęĺG[—»ŇËşŠLÜž,3ö6S5ŞŠV ćś¶ÚÍ40-•n1{R™Ąţ6é&gsůsŕXŕJ!K##A"GWK|Ď޶ňĆK éV®oŘŰó±AĄŰv"Ý’8ą–Ň­A +°ŁÁĄ›$*4d:C‰âJGYé– ÝĽH˘@eř “yŻÎ­Î©–‰@–»čÎÓ,óyz¶Ô«ľófXˇÜŤw牱] ŐŹ´TL–I\®¦^袷ę¸k[‰KhôÖŻa™â굏K͢0ŠŰ–±ß¦Ú‰‡Ą˝řgzI§T„ŕ¶żŽÚ›ÝŐ.Ué¨&­© ŻgşRchNn®°¨%%~Hč2­;Łp2e§^ŁU+ÇlÎmŘ[űŤZO$»úr+çąí‡ÜŢ–ˇ˙>Ôt`XDCĐŹN­rl­ÖŘQ;ô_ÖKb°KGýëÇüˇ5řˇ{׏ť˘/lg'§3áŐ^őăŢEŤ3:ť—5—NT®Ü‚zö6+Ž%˝› gÖ„đV0đ—z¬ŮŁ«ď·Z)‚6|ŽŢ~Ö{ß‹ŮÝ5›Ö†Ůë ĐAď]´âřş0,9B+óy§R­3ö˛DVÇ­& ϦVS}ą,jŞ/—=©)Ńž•šjE«v_¶IŤËůľ\–yËř¬™^Ţ 3µ˝ĺr»jMě‘táyoĆă­!9Sľ\¶ňC'¸Łëźf·,Ó·2Â^; PmdČ"=§ŠP„L«%YԥņĽbč-ŻÜđČ”îy_?|ő˘+_–·Ö.>ÝßKĘůękůD¦ ŁśŻľ–oDnB9_٨I-_â°śŻľ–o$*’´ś/Ö7Ąµ|)gĘ`ĺ|őµ|#Iéâ`ĺ|őµ|i =P9ßlm-ßHRş8X9_ö\óu \ÎW_Ë7’*ö¨śŻz®ÔÇ=ű*端ĺSAmtu1ŇýófË8—y_]Śô®łQa%´ź“⛕zó˙VFŢW×*^V&Ď$ą-‹ňâş­jrŻć@ßÇ÷jĽ)ŞíVťe•IŰ“3ITnS”öę´·­Ęv•¶oV >®ţWK ĚŐßD‹l·ÂŹő…«©9ŤÔbŢ9kL l5§VŽ®š­jYĽWźŐ’n×>>¬,ŃÉ$*7”q5ĹŃóKpű®36°»9ZÜ»Ľ§¬< ®aq˝ç—.Yv7;„2É öë fŮ]aź‘ŞZÜwsç5A»h7¦PăŃĘP©ę­Áľ©ë-›ŕ5SDűëM¦{[ ˝^f÷d§,éýőžę^kŠ^żżs ť“Đ˝ů°_5ń´G%“Sçk´‹ľ˙źţE%Ćč5č…uíTŰŁŤÄ5…Mp¬}MaIBsÎ/Đľ­ˇţ†ä;•Ě©:Lt¸‘M©Ě(ÎŢę[u™÷É ¶+ĐĘz=Ë2ď[—:潞-Ďp¤Ľ¦°©&§Š‹˛X` ŢęJtÂĚűö˝5$ó÷¸iµE;=Nl~ęýđ6­ö¶†›–ó_=řťËŁ2—w>5ŕIqtµ@ßW®Ű˛}ĄŻł±tŻľvĐpé‰hĎç;†üÓŔçË;ż«ůĽ>PRŻn¶·Ë!Úf™ (¸»›úhĽÇ%1R *[±Ň\µ×xJ.ëkŘłFQ9{°Ř®I +”nÇH®<®µť×[µ^&w0«ňŞđ —T?KÎúĘ{Őłł$lúăaSĄnÖ­&č‡=ú‚Úę‚Ĺ%6meYÖÚ­áá´Ý«Ű …¶-‚¤!N{ŘŁ/¨şâov˛lNé䤖[µzŐ”ŁrG×Ă^˝7uUuôŢdmĎ–äYśSWçŐZÍ´zóŢT§Äç+ôzŰŞ¬÷Ćš~v ·Śőr»Eęe"nŢ`o-R/›ĄŔ›ł«˙)ŹfŰ&\6vTyýFÁbŐQ/÷®TO'Fře9P=tTc]gR?SR ’YçWí@k®c3f]ÄdE~ÄßzćÇr×ĐJ‹D‰VeYX$ľT»=?ľé)Z±:„ÇŢúçÇdĂ…„ęTëseüëe¤éŞcé¨w~,š¸ŞŁůQz©˛¸sj­±ŁV•ëEÔ_"l¤·ęncęzÖ›=)÷Źäź=`±ŮVĂ­âW§HÖŻNé˝HÖoUÖÚ˛HÖ·6m°áGĄU?˝yĄPl(E˛o‡R$űvXE˛o‡U$ű¶ýE×M0ć@/şÎ¤@4gCĺř1wŃu4 ţĽ]ŻŃZňcMQžJµę­^¨Ź˘<µiĺ:Ģ<µiß[ÜÇ5PQ^[_ç€EyŐ¶çP‹ň*±Ŕp‹ňFŇW„·+ď§(Ot›,ŕ•Ü%É5Bˇxű}™’^Ń»ý>»Ětébż)»©ŢjółČ¦!őetµw2ö„lV´~]šĹÓÜÓÚ]V— ÁjČ"‹lúhÝ´Z’Eą®ť÷ 'ó)˝RŞĎA^˝ü6Ö9}±76÷ćÓÚXgÉú4Öy¬ńúţônlîűŹ×ügqlö@{„aĆćV_®đ>YLħz'7éđ§LÜĹĄqű"ÍĽ™*){Üś2ɰ™R´ń;uewZ'M4™Qgď™ß^”Ť:>)ÎÇČ?T•Ý˝Ż+»űQWě÷őé«l([ŠĆÇČŞF=¬«[~•5®‰ß)ü~”HČ|)_çŽ×š/»{W9*vř~m±źľčO+FuoMĽüe~Ş*»k*ö»´Ë––ÝÍ}~S9*Ýý^UبŐű­oMVŽzqąý`¬rÔ±ĹÝÎëĚąQŚ@~IczĺýáŻ\ÓŇvź®ť6¶SO#ZŰyÖŘÔůR_¨LYřôq)Q#ŹÎÔŻś‚•Ő¬_WżŐ"ż7 nKBL$RŘSöTuqŃóÉő +'U&âŃę ´¦WË*ćTČčZÍäľKÖÖݎčy˝2_ÔČż†ńĽ^[·ÝjsÖvË­ş;Sf‘Őäöń˛^•Űn¦Úöl~YŻý +;u™÷˝­°ůu…öÓjťĂš›SŢýĐü¨^ű9ĄGäh“Z۲°ŻÉA<¤Âľ6>›!ö•Uőĺ2ď‡QŘW¶¸0ťg…}Ĺ™¬Î¶Ś{öRŘ×!ćŔ1q9›áö•mڬf¸…}Ť—™ §°Ż•’Ľ°/™Sb]×»»ű*ě+sÉ„9·Ă,ě+«ę+ͬ°Ż 1f«"†RŘWVŐ7Rz÷Ă@…}er6%l†UŘW6'Ąo†ZŘW †XŘW[•Ďf¨…}eg8ŇüŘVŻ…}e]ő,n*ě+ëŞuö]ŘWµiC.ěަ5"ƆMFa_Y¦$ó~ĐÂľ˛ŞľlÂĺP +űĘŞúFĘo¤°/Ë䪪/‡:‡QŘWÖAM>tż…}™=ŮëćýĐĂ*ě+:ŐR ďÂľĚv„Řt®ú +űʶc¤ä˛Ć ű*RF8-§~ĚÚćîĺ-k#>LlÄ„=ű­é;kAŚ)ČQ]Ó×ČöiČQęůQz¨Żř5úl†óŠ_YEXUxÓšx«T…(ˇF[™Ö@ßŰĽ‹ŰrZ­…BqNY¨Žiµfě¦9ePA9To»U­ąz¤ţöQNkËţŘłüĚÚK÷ŻFŠO ±´«)·©Ť+/ýř_˙©V==ţt^Ô{Öcµ°iz˙oŕÇ˙FRď{6Őô pőyś¨\űţßŔŹ˙•ΦzÇ~˙Ë;!Ëß˙+ěMŻŹ˙Őt«ÜŞ6Ź˙Ą‘MOá§ÇůĘýľîčhmđN¶5»­…mor¤Mőj Dţ¸>Ýx¤]57=ë5 =î3Ă1WÓWYה؞-źíë/Ó8Ł=YÎצ*·±Ř±Ů8Rz…^s’5졤i¤řŘVS`NJšö÷("§ůjň:_őÄ€•…\ĂLµBoCLµzţ«Oő7’/ÄlȤnW9ť/9.şZv4ÓÓtŇ$ëh(¦ÓsíÇš;jóV[»Ä1öÖPűW›oZ„C§§‹şpçő0Ż7DoC~áÄ2‚­&‰<­Ě*wóđŽYýTP廸µUĹۦY8_$,ě•YŰoήgQĎě4,Ľ} éĺĎR1Ň—ÁÎŢZ˝ZÖ$’›ť¨YŘNF:q¬żŽZ•P4„ľĄŁŻ1ŘQî‡Á_ř–éTż3¶(”ÖCs4ôJ3˝ź`ńdI¶‹Wę÷°µó>óôßőe©UW$Y´ćÇ–ďţĺdZ?úîßHRYţô_Ź…€żP|ŃÜQ?%My·đô_˙ëJ3cŤZkî¨ý» ^uémďţ%ůĐO˙ \í›*ÁzŮâŹĆú˛:đ3ŇÓ]Ş|cŻ/đ3Rv—*{ĽÚ÷ăď$Şď żťŐľŤwtIG;ż¤’ŔŕŇÓ©M˘J¬µĆŽÚVß—yŔr(yEpŔęűtP›µYdĆü0řóPřëúpU#Ój© +»9?Ő&Źl$ş%ľą2mÉ⦠ëwt•X÷}ů:ł›ćÍöÄľicÉVR)š<-ŮŞ–Şĺśňd‘q?ôQw»Ľó®“CŚ…tŹŇë¦ÚŐÝ~ąlűf+%ýnŕÇ038 +ýYo7µ 3źRé„lUw»ĽsŐ‡ÝŮĽř1Ě$ç–ŧ×Ýň‘ľ*8’/Çn®»Ĺśzy S6«<*ôĚĺÝş,0Ä„,•›y|×jA–ľ›Ű;|=6ózÉĺOĎĄÎĂŚuď9zwç§ę˘űg?ÓŚ|QŮ +®©ęĘ<˙yWOoéŢŸJ†Ťź¦›8;O+żĚÓtS_&^ţ¬züŻöľOťś?-W¸ě>«Ő˝5qjÝÝ«Şü”5”ĐńÓtcNő¨ďâQóő€·~»×«jäv1LM!â‹Ĺô ‹ŮąŮ»'ŰUő€Î÷™Ĺ·3çɨ\MfąŐ…Řäozĺ¨úúîfUíŁ”ÇÝţŮ}óĄŞqżfÔ }ľrÔ‹ËoŹn%ŁŽ¨·đŇ%oąŰU›12IęđÁĂz4źMNŕÁĂxŔŇ×s¨ţ<¬Ď•Rő7Cxđ°ţµĂA}ťń‡őëizü¤í‡őKRĂ áÁĂú×GZ×{6ÎzŐxđ°dÓĽşMëóÁĂz?ňŻę:Ý˝„ŤúëăúŢô‡Ç`íwNl&(l`—ľŐQęçă%í†"ŮŮśŚšâˆ'tń]ˇÍU‹ >Ç_çÂ_W4Ťżj‰_ŔŮěή˝ŮŮäŚ>Z oΗWŽ÷»†Ţ}`OĹSÝŐ§¦ćŁćg’ڵOó÷˘ç’ ď¶ČBiÖµÔg»×źŁ/méÉéń7ć§ąÖéôĐ‹łÉöĄ‡ŢXgsň™Ŕmüy««4Ewă™Îíf­‰ŕ×~Ý6Ůů DĚUöń|e–MćđŹwŠ_v"©r­Ę§đ·-Me 9sňţňR§7đĎ!ÝQýZ ŻO5u†ÓÚ´ŘŤz÷ÝC9M łbÜ G}÷L“a¬eßňď}šţşňÝ]'˛Y>ńoů)Ę”óĄ€U˝ĺMÜH Ë—ݲ.Ëú“PD›.·ő¤KwűţüĘŇöť»źWľ{ŹĎ—^/ťľ®2—?Ě|Rd<}°sĽxwkěöZ*‹#"űś>ä/[ ÉěGµ_řŰKŤ»4ÇB˘iőÓţř›Žü„]5Ł~Z~om’çßšî=”ź0Lxľ_ľ9Â7˘†ôîĎmŤN'çOĘč|iJý´?±r?śÎĎ}3žÎڰ˝}đÍ^_3źß;éŐ|±¶×i<}ĆgîűÎjw˙Ţťůo§“Űë÷Ö쉢uńĆ΋Щ§ţ ť…pŮş—P¤đÍŐ‡.g hż´4Ł~ZűřhVý”šůŐ7Kţf.ż›]ËMÇ}˙kódőëíË׋÷věĄÇ;:ä§łë@ŞĽŠ„ŤuçřöťµźżzĄžŔ˝»˙ŰŹQÉÓŚKiľş36}ď© 9ů&ť«c«ţ˝X.đłGcsżĎźńĘÔCČ۝ͱ™ß·.ŠW+tąi·¦"±÷ä4äďgG3˛ +eß„4"$Î+óYđíč҇µđvm_h”f—ŠN–^CtÎeEg×\í|Ő»Îýąčô7;Ń+řóŠFÄ´ +çŤÇÓˇ]î¬wË=ÂÎC˝@ň„-ŻkŃrrV‹oMAÔ~Is[łL}Ü‘YsßîwWÝ;Ós"–ip'Ë'ă§ëFgâá÷źNË)·±5®É +e5­<ä'¤BD¶x&b•ŇMÇ–ľü­Ä©óĺ1‘ŘSµ›Ć¦»•t®NÉřňév'‡ 4ÝÉľŹ—ńĐ÷TóÜęK“DótlöýÔ"áĘ:ŻäxÄ_§ĺéoˇ´íéŘśąľ26=ł<7Öń;9%­ ő) “Ć Bd椺#!Ľ áÉ)ɧ٦ŁOOřş~ůćĂ,ľy|˙áúŢŐë±µĎîłďë{s›·–ž}»·µôzŐžXýúâňĄ`Ň˱ÝÉUýđöé*Đéű[ys§vÔxÓÂWO—ź=_Ü]_uśĎKŻďţZ}řÁ}´ôęzjÜ˝®Ĺ(ů·HÁËÝď·O/p¤ŻěʡG˘[F*×lěÍ,Ţýř}oU{ůůbĺëýÓ/­ĚţĚŐg …`q„ŽžßźÝ^BÓ"ćý»P¦W€ ëw.ßLîü^<ŰĽxW?´¨µĚčÖŇĹŘjCżXýzçüÖĽµ˛úem˙óÁ^˛ë„­6ţcĐÓ™‡Ňć_„7t¤ŚBjCűŐTtWGw‚ăk"…ŚŻFÚăÖĺÚěńűďKŻßĽ˝¸{\üÄZÇľ{ż7_n­íďOjkďÇż Sfl™ËŰÉq—m8Ďf€=ŻßđŰ{3kzw}ŹöMbÇ·X}źK‘‹f +«6ąa^VoC `”ޤÔÉTť±ŞS?żU2uöĹř]ŠÓgc“çŰJqC’NPŘľ˘ö~Rá°~çĆćĆ>Or…o’ťÜĂfűĎ“ «¨°ĹĐŘýµź‹§ż»ź1ţËw•$H(°ýŮܰĺ…Móš <µ` +›ć5‡äöf‚ă—WÄz“š˝ą<Ůvh}ť4Űó¶<מŇú•8"âĄĆc )ßJ­—RZ“foˇ`rÚĂü#P&·`š¸}C™ö{ě kîŤÜJ†VI}Ă:é +ţZú5(ĄµDqbx4‹š‡°[öŻrŽ÷´;vá›7żűüI°´éş‹řçŢňňç§·žĘŻ&XóŻÍ çÚxµövůŐÖb÷jáńҦ3v±˛űhőŐňšąą&skźć?Ý}żuú`ăäÍÎG4ů /v/Ďż‹ 8uQěĄIcłâm“+ËDجďÍJÓ”ăÖüÖËĹůµŁăĺźSS/Ö6ź‹ż—şK«_®ŻžË‘˙ső8:‡Ë§Ę'ąp÷ÁťÜŞCk-?zůĐç++Ë?'O?®jŢäekxuűlwĄl;ęÝÇ«W76î˙ÄI[ż{A68‡,†Ş0L[H9nĂ0mőy¨j»áJßô˝çĂWk©U5Ě@Eý®GYŞŠzŤ.ŞWyŰ»°íŰ`ß|0żňáQdĽÝYżő­Ě¨Ö¶tüb˝çµLDxŢó Ő<~OüÚĘn<ťDo~'Ń˙˛¨ŕʲ¦›P"ďž.Íťë‹K/ž®Ż.Ě:Ź–ćζőŐëýď|LzçóÓĹŻŻĎď®]ě~yvwÁxăŻŢ:Ľ^[]YłÖ_/xďţ)}ÓŻ(do7gĐ*}3|›¶¨oĘFďač‰ hŮßÉŠŔŐ+ź>–©Z,Ó¶í]CŃ7CPuôC·Xsě(źěśvü“Ţ7Â7ýź4¤üůD˝˙ J{k®jÚ˝·×»ĆâÝG?_¶EV +r”«!bb^ř¬OšĂ0łx‹ˇ•člĎg}2Yč ¦`śŇzYp†É0LďŇŢWÍłé…Ďúd2 +›^ř¬ŔdˇŮ˙­çN&çŇ;8ýô}@Oŕ"˙Y¦×ď©úuzfŮë|\{EGâ}‚ŹůĆ4ŠWüuť±Ŕy&TčőÎÂĐ5ôfŽú2„źĂpÔ—˝˙BŚ€hKH ÷ŕŚböw–t –łůg°fÚČ!AĹş¬7˛čĽďĎ}Ůác>&E¬ÝŹ?­ź¨dýĐ-ýi=[ąń˙»žŰ&/ô§ýďßźćZÓme÷‘˙ ůú|`[¦ŚÝ9ĚÂË™ŹKŻ·|jĹěňÓúŢ3űľ(Ą+]& 4Oî#˙ޤřĄő˝ź'3ëK'ű?ZČ9ůI%FŽÝ6€°1&Ź®Vľ{»G-‰ü·ôÂźčąýqą·6ß‹·^púάy·PŻ4č‚©o×ü}öĘ~{=Č‚ŠĘ!÷âłŕëOX´ç0ąţ„㪖ŞC™6ř!×/ÄC9äú7á´Ö‡\ż`‰­ á•C,ćť­#(K€Žć;•±9´łôJąBô5ŘS›©ŞŁly乍ţ2ő+Sá#vĂĺb +íÜqÎÖScÉßĆW–ĆcŰäMć˝ ŐÁt6qgîx-×ÇěĘÄÂZ˘ŮÍ©ŕť•¬Aţ6>ţ`a#ŠdťÍ¤×Ď __żť±ôŁq§›ëcgçůRÜÇńT&… §Ż™·öńnÇşs÷s~uÎŘř¤©R}ů-éĺť7šúóîĺž5Ë ¸(Ăpď*Że…÷Ěo/âäřÝ$/~öîÁł'Ě—4ýdűÂ˙ÉxIňxŃ~řôÍçűf"¦§§>ěbŞö>0´ mĚžFgs=ĆQÇÔ!Ř—îFKÚžŢQYůĹ”˘Ç!dÓ–§ĎF5 ›»ÚřŹm!mŚŞ1©ńůY<ť“Üĺö‘%={oőňUćM«x®?<‹÷a'űěÔlj>\X_˘M7R›°ňţđ“Ę’}Đ:™}đ.ę÷ŁÎL¤6aaĺwš«¦V/Ô&pTEi©7Ąö[ěşŮPFµĽg?ĂM0ŻŤJbÉľ‚5ˢˇľwĆÎşkj.–ß}HöŹ}¬ †đ’)5íŰ÷Ć>K$,AŐö1]ÖG‹F’ h§gúě#î`¶’-˘ W#gLĎ 2 ĺčšî ş­žż#%]»î “Đ3˘ł?Ň2Zt€aęú›nËçL>§č*Ú´ţú‚°™›«čŁí‰ĚĄč +ĂTö‘YHľ­Ĺ‰X‹/¦¦¤‘ű ϲ} JZsz®ĺ~č­ŁĹnćd${×Đç93ęĂ˝•đŮĺřĆă•L»îLŇŽ#>ŹÄűefŰÍ¶Ł´şuu[  Ąĺűč Č2Ý•`ľxżŰ•(}“ďCt!ySZ 1{źDžŇşV3ŰmÚ÷ź¬ĚŞ>.8V¦łT©Mk»ć\ź“H)isPŇ2µJ˛Č(éş1Ű@žDĺ$RŇf^ő*€L#űkVVžL;ó«3—ý5»KNv,§›ýUĎŻĆÉNĆÉN&GKŽťX—° /Ą*íŽ|đňxýőÂüűµ‹OÚűĄM÷)ĄŔĘţ·G?XÍ㤋čśö=_™Mż´Ć»ŚŮźź}÷)Ş&zrW3í%Ĺłžź¨ňŔ‘čV«λ‹°ŔňjJ *, +s´Éč'cJç žam§ăIoNzx.K’_a–}¸Pó ż¶N3*®ýŇS»s“ß÷˘©>žN\íÇ̦?Řš=?č¤?řäIŤGôY7ýŮůĘ·ř#őÁĆňoŞš§3éżmO}‰‹±ćŇ|łĺĹ7O5©Ś36'u©š36;ë;OŤ°Şká%}‘îüË·Ynî UJlLxóˇ}7÷äL”t_tŁ´ă`á!wîEŘďÁ‹mé—ÜŢ»%µ°|ž5¬vžîŘŻS{cN/,ŢŤ˝'/—O´o3KĎľn­>~8öj$ýŔ†˝Đş’˝&wYů˛9˝ą~Ż˛Ë˛ţFňÍ»|±u?îrŮąz>q´±űŢ˙¶ôęzâxíýásJ×FBĆé +čwź,ˇ0u6ŻíÔęWĽdŢŞŠ?sőĹ +eÚŰnDýoŃů—]Bß·FTůVJ2Ďř“˙dGsíî/^đ>ěrď@N˙}\Wţ^ŹJŃśůŮüőľ·Ň¬ţśŇQ˝űó‡“ZÍ{7«9yu{m.‹ëo&JGQ%eôOx…Iě|ÚŐ’Q­;ÓĎBĂcó}÷–Ćé®˙d¦›>ůfóovÉt^¬~óneuÖź^__{ňĆk[Ż~9úŃ—yWĘjGXY|ďŢgÖ`ľ— +ÉĽëO Śűď¦CEĺĹ3ŃFľ:›ě˙îD"ËžJDVjÓXŐĎ—‘Ž~Q•oN«úÔŻ“żĺWüóîLSkrqlWł~]Óó9)‡îď\ię.­ăąůY‘ßÖÄݵG7ĂZ ož>VB4ţ‡l‡žŹŢtŞć_ Ń÷g#Éř8 +sۆ¦$ŘďŤ(‚Ď?—Ó:ŕÁ–•ćĹ™ úöLÉ´h…Lř¸žČĆĘśúŰţřŢ8~}¨š(Ú»ŞÚ’ĚP’,é<gń­˙ÚĐ l}Ô·şĄňf˘\Ä8iDÚŁ_ˇüÂŚÚ$—¸ĚFMŢü&}kÜfîÜÇK…âoĄ®! +AD'·Ä÷Ď3˘ó•-ťóŇĂßáé;‹ şň=ó÷ o."$ăÝ‹oÝ˙ş=˙ˇô†ĽŻź?ćI€PŘvKä쬱ьwCqţ`Ą®fŠ÷füT$#euF‚‹r·%·o`|Cm«ă˘PB¦:‰!'Rsb1şdă™.¨hďŰRÔy|ŰŃçŮôť‚µ·»!Ť$O$,‰)9ř„L¬}râ`î‹’`n'É=đg3äĎcWS—qĎ }Ř3’8XĚ˝¸¸×y’¸}’hp®ďěŘí剸´ńŕNˇŹĺnŞc}gĂHř+Ľ©đ†pˇ{ü`›ěöüŚhűÁHXýůÍoůł †îńłÓ٧ îθB$[J6ÇÂçÝ_/ăä©Tś•ĂäC­rE”Š2ŠsŞ,Ä(˝"ÔJvË…%Ŕ[ĕ“Loq ”ăĐ8Ź÷áSz$îĂűtĽÓIoÂO˙<Ú„E+µ Qř Ü»›ěgô3•ő{˘Ój]˙ymÂL.ÎÚIÇĂúóŢżjŚ7Oď„ĺqwőW˙qwŢŹ4gˇnŰcÖáC(QÜ»ľt¬2ÓÇĺĎé¶}”vËy&a‹ęŕ{ gđ:¨Ůž&a +}ĚOÍ ¶­“ăď8‚Ôz![¶Öű$FŇ—”SŹv"-č[˝¬ Ó:-ŞyŞ’Ď뙜~şŹO^¤•îŕŰýn”ŔÚwç+zăNˇÁ^ŃGg⡡ŇďĆ76—Ł>Ü[ cýNµ)<¶[˙a$ínŰOW?g)mckĽšPÚ¬ H°ZĄ(­¶ŹOZ9•´$wôŮ@(M“8źo Ąoęú ŕo7;ëzLi}.dÓÝ2ZL"Ci…y,Ľ4&qń@BÓŞMűJŰľ—ęŕ˧Ű3)%Ý×f|ů6;ŰvQ%CaçĆ@¤E·N'!‹ľ2äčŇšŽ4#Áč×Ď ±wĄ;:Xx¸ţuóŮbF{ҵ”ţőý‡ĺôśžĐćÓżvě»é_Ýů{é_ďgŘ“>¦é/¶Ňżľąţő`g)ýëɧĺĐK Ű[@pbçËFúť±›~…Ů˝ťŐëýŤ­•ÝGÁ­Đq<öś~”q•wN|ř‰gëÁĆŰ)•,›ŘÔ©»|źťŠM?˘ę;ćŢćáśÄM”łŽ÷yŠk$ĽĎs{\C‹6ůďÎÇtěiĺ0P—Y:ółaĐD.łÄdĺWnÚîĺ‘ňĂ&–!Jâ˙LOásüAÚO =;A§ť Đ­‡éŻ–ţěŰýŻ)ç@ňAîÚNeůoŤÇާi/űA:Ŕ›vňBŢŇYő4ö±ńîNzI!ż!S×vĆťżUMŔŐ¤ôťŘ´™Śp5Ě -t·ş+ěč….i®¤xů5ěômD ŻĎvźĽúIńđZ93HбřµÖ§Ű®ŕщÝvŻ»-ĘgÓşK=]IĐ˝uyovűî…ű`Ű~şäíN…ŽŮ÷ŻĆB×Ô»ęVa–ČČ1‘™Óׇ?c7ë\Ú»yźţ­ş^ß?T!^hç„?ťl›áO×>©Ú±µé}Ţsţb~s؇ş[ß/˛Ë÷řç‹yfîťl)/Ľąwý2ěüóôNLsďÍ´›őîáŹř[ü^ájľ¤VóůíŘJĎţí;ń?yąuűúa:1b·«8ţŽąm‡Wßýŕ„?­îÇâ]+l÷ć×R~:ĎV^ﮯžŚ,˝|ýqríKgQ®®ľ§¤Ŕ÷čşđ«sWů’•`[ßszş…¸ň +â‘°Öl8·W^A,˘sh·ëUWG«Î-Ä•W«łŕâ%F{ď’`ĆŢÚéa:ž‹?ßĆź^]]źKgoůčŰńéÖţŽ NŤQő?˙ăż^0jţ¨é8řĹá_·ľŚükęňßßĚéŃ­Ó‘éŁKL¶Űë.]\­\źťî_ügt^ţ¶ódkűáęčühř…»ŁS“ľ‡¶řű´„’ĄŐS–ŐwĘ:©ů]ţýëä :űWWÇ_®ŻŽ.Łž—..ö‹íľź^ť†­ĚŃîĂÓ«äcţsőźóŁđă)ÓŃ5Ç™íľB÷§ß˛ ˙˝r·<>ýyy°~4ô÷ůŮĹUç?‡çÇß;Ý˙} 3+˙b›Ýůç—Żk¶ŻŮŁA`=mÂżŹ..1ŐŢ6 ţŇź±xÎrďŻďÇWG(¸Íň/ĎŹĎń˙ůĂłµĆË/~éĎX~÷űŮŻŁîŐ÷łźÇ§ÝË‹îĎë/G§G(őŁv~Újoňdţőřä¨őUůĎŘ«ţĹÄßýЉż˙ 1ńýęę|ľŰ=¸8Úż:ţ÷ŃÁŮŻ_g§—ÚŮĹ·îéĺ­6ŰÂ.çZmEŇřŹZţůőʼn¬ůđ {trD…{Ů54ŁŰ~{Ů€Ă?mţúë/í/K¶ŔÔŹZJMµšęĆek—ÖÜâ#U”Źi_žď@ZFoż ß(Ű’ä+Üľ„DaAĐŐÍ®iv.żv.˙szµ˙w§' ďő°%ŇúŹÚŤHŮk—g×G_±-GôhwőőjüaGׯ{`ťđ{˝đOü•ąá¬ß¨_‹µĽzł±÷úűńĺšť­SřŽú€˙uÂvţ’a]_Źük»…ą˛÷·µ˛÷e˙ň?¬íU.XďňŮىšÂ +ßŃáňţ˘n>ş.ŐýéF÷ +ǵ}zĚáftXß8‡{˙6ôůőřŞók˙ĆuçâřŰ÷«^–\üîź±f/‡ÁŐóýoG—ß÷ĎţęéÔËľţ‡ě‚ÓĎ6üu|Š5tţÓ×&$_ţ3¶Ŕ7ű"…pߏzeŞţŚÝе^C†˛Ď€ŹŻú#ŠĚ÷˙Śť¸:úűʶ<«źí8¸ľŔ@Wťú"űÚ\Ć–ôE!™˙Ú˙űř×ń˙ő¦/«;ů3väüď~¶ä0taw®OŹŻ.űÚ|ĆvŽ @#^}„>ÂţŚÍřşŇ”ŚsyşŢůvröe˙¤ŻÍČ|˙ĎŘ‹ţÄhxŞ ÷Ě×ţڵ÷Ëô'G_űµ˛ŐW˙w/˙ęěĽĎŐË7˙ŚĹ÷Ş˙/żźýőí˘7‡Rňť?cÍĂô4×7íľ$]¶ăÁc2ęšç–®˝»x˙sÖ›šĎ}ńĎŘŁ'˙’Ř}8r_śÎâ÷űÇůśî῏ŹzqćWńçG%‚Ń©éŃť·©Dę‡gřGó|Ç6=× Űs]sTלŔ·LĂ<ŰÖ-Ë—-]3W÷|Ű2,Ďtě±MË1Ű0<×ötń_·Óp\ß5=gtgźĂ¨/}tç?üí~úżý5jčŁOF?ě꣇#řđĺČż:V ™žeš®8¶ëŘŁ¶ejfŕŰžcZşiŹţB#ĂôµŔ¶ Ç÷}=đŚQË4ĂpL,Áq{ô„Ť,K3M›“1‹°|OÓ+đ|ÓuĂEWł,K÷ Ă÷=ĎEK3Ç7|Ŕ6ŮÄÓ¬@7uî&6jyľć¶‰ĹéŘ +oô€c9ćXž`3Lt7jú†fŘ×pt7śËŤĹ7-Ó1tćąy®ćcK]ǵÝFĄkµ}ÇrmËCC śF€]÷uÎŮq1>öűaz0jşľfúX6Ö©;¶šP`k¶ëcž–kˇw[ Ůćfú‹±9ˇŔĐ09‡_ĂvXƨỎŘÇ °Ůîh‡[fŘ–¸v`[>úńm.ÂÁö8ľXh‚óq1L`¸¶nűF± &dxl„_±ą–Ž…aB¦ÉÁLś)¦00ßČt9c›ł,×÷Š36.+Ĺ_ÝŔ + Çd¸nPoąś¸í·“áú6»€e€ĺçŹÂ N&&dú<ôĚyšć(ú UŘ E—d–' ™Ťg’Ŕ@^~`a) łÁŘ$T#íď(•KŔqŰ:´ZErw-ať{c‚* +\CÂ1ÍĂvIÔĹićůŹ„céš®{:ÎÄö!|4˛5Ë đÍŔÄ×@ÉřCn°­žąRÖ¤‰Ő1źŻˇb(†O˙`X$'ĚŔvu°‚7Ú}y´2:µ=„TOőx3Í^ľ<úv}˛YK†Łą†¦ÖA‰ ńŇÉ„c¤×ć•ÍĺéőŻWLJ±öÝyű¤ŞUŢ7ĚŃĹN˛%“^99;řů×ńe´4 kAń:Ĩéř]˘ŐřéÖńżŹ^}'€šľ±˙+šjú«EíťűććţéáÉŃĹÓŚÎĚ´ÉjLcté|ä_PAĽfŕŽ: +â‚ÚÂr©Š +Ť@Ľše )„ݧّ ¶tC·€u𩠱‘î¦But]7ěŽqQlBÎtéÉ5\HáĚBGAľĚt”źM±IaU˘> +­l_<•żA(9ŁĹé8[őë*4ÁX…ý)4*D~2ÍG5 (I1ĎÚÉÉńů%¨ęáéńŐńţÉ‹ëýĂ‹ýte¸8n›gč4Äíަ|ăzi‹29SŢňů1řa˙â*ÝH/ĐŞf`鳌X'r_ŮišĎÚéaF>VěÂf:ÚÚF„ßş Řn@ĎĂł0 §”mĂ öü rÇTĐ€ĐŔ…XŤ<°odůŔuÔu^…Ö7u¸Ŕ@÷a¦;®řŽ4A'ŽPµç©&®f‚Îu Ř`tE°¨®BTăľRó&@T0&kŤn±•  d‘ ĄU¸lë†k˘ †ł]Í…A¬8#M¶t›Ň1$gd›šdĺ¦đe ăĚ \….Ç’A€|Řř ;‚4hx¸É +gäU8Ŕ'f@‚Ň4°\€ÂÓxŢ`„@Z‹ŕź­óu[ĺXčŰh0†¬áy†]ÖčÉŐVףä)޵"X– l"+ÜI€, ŚăQý–4Â`G<J9ŕ’.śÎ32ŮM0Ömůhl^:هŻű ‰Kc +ŹŮŔŰžšŘL0|XZ€=*4bIÂn°deží[mµaÚ-QFČâś? \đ+6™JÝwŔR€* }„Viľ•ăh˛˝¨O~Á©ÂĐ„Őeq(Ľ f‡V6ŽYń¸††§EZH×Ů18ÖE±v<{´ŔŤD…ą›ä%Cĺ[98ĚĎĆAúîŁĹŮ`mZ ŰĐĎ 9ĎňKVUh"Vt~wJ:Ęďqq:͇ő§ěŘ<aş[®”˙yd±ĺ{ܰő:-`Í€Ś…zru¨Ŕ »#ţ˙N”Éa‡R`CŇ;VQ`CpŔ¨×D2|}XÇEŮżĹF¶č ŇŘ´mł¨CŚŔE!îŠŰ  č,ˇ€ ¦iďôä§ař˘€nĎ*ŐÂő˘a9ĬUÔ°†š&9Y¤é’Ő=ÝMҢ¨‚’ ´ č!Ę:»Ęv‹"!L4*€4ň Á2PžŤeŮE0ăŰtZ›cä€d!~S-ňČJ6Đt ´lűE&hěŮ.««ĺŔžtŁ;č@q¦ď#ţO†zMA‡­ČŢPş%3÷¦L R±Ú¤?=•5rl*hĘ^÷y˘…Ft^RË»8Ő°ENË®!h§® ;Цl‚t€@€>÷&<¶cŔQbµ®Q0ýDA0,C-  fć\I»KEęĂNąV)(6Ę«]„(Kše»ľYPÝ ?[ď»˙Kôľ‘ť:ŃPď—#ˇ?Rď×`=Ś}©«ÇL\¨w›@T5ÓŁE9e dĄíBŤ@…ű´A,Ŕw<R_ÔhŢőC„»a”Ç© ?úL7…4(9Č4Â1śQ"‰B@)Đ"bOEű± _5b¤ę…Ę6v@Ĺ0´äş®bě5hyáUŐ +VˇM9ʵAMŘjęŚM€YŃYEhÜe„ ¸]09Äqę¶ "B‡b°ěÔvYPAPXŽmyÄôÍě~á řé‹ö˵DĆz™ý +‚R¤RűEP†9éNfż¨Ż`Ťšń~ůô3ě×zżN˙kQÝŽëĂć‡utÂTÍf@‰&:PśXĹ–,kŕĐő€Ä`K+Fś`{ű#šń›Ť3ńđ]ś h3lŞcš0.^b¨¨#—ŹcŃĄŕíďcX”®śvăd!ŕ3S˘u:CZVvt´°L‹ń0(j„-Ă?†qaÎ Ň2¸^‚mhâřI_·:$Ř#ĂÁ2Şcžš‘«Öaâ™Ę$j·ét˛Ŕža–°H|O(Ą{ š'§ËpčČdčŹ=4±4ťP `­$vŚ pO@j±”é ++Ă>[a¤Ú©9üPŰRácźę'0 †sŮ€ —í°|Gđě-Ć:z”4Č:ÖZÔ6AT€üy¦\;ŘÁŔ˘|l W(čÔôPB î„Ĺ®šĐÝجD¤S `Źvhµ`04Ř5ČiPěÜ@ś•;¶čŢg ĎdlŘ´ý°‰#äC˙¦ s—D„‘€ ŐÎKđÁŻÄ ä…eKw&±HŘ‘tě,/켦Ă#ĐŔş¤Ě®F› îŽÔHI>9S‚ҲrmČÚŔfčxE‚Đ #¦i…ź +f¦¶Ś0 ÎĄZ¤·\bаĽGµGaÄĐ +Ł R éfAvé>Ć`”ZF°qT0‡LE‚0 q”7ŽxÍHLĘÎŕ=%€0=` ŇńĂ4°=26¦â +“®Od Ë(ź:c}®ŁX "ęěä3Mµ&…#Ą ‡‚Wi’R$†~WÍ 8âNx_En?7§ţ1)HL%6čňp˘.Ą(ăÔt·ën€SŕSöP~Ň$%©Ś¶bĘPJ}ćşJźSŔ’Y@­hŚúdN'ŚX<;p4P­`ßQĂBFůhAÄTĽC8Ć& Pbź¶´,‰MńĎ xĄ·7€9 ‹‰ :ͱ±*lČ P­@š&]†ě d%ĚM“Ö ĂĘ@vr’®Ĺ” taz˘»P:=ů`#%âĐJBú.yÖá•kĄô FÓۀРČGŁŕ(u”Î`7%±8B€ú¤fBM‡KˇńčĹp0ô9u(GOZ@Ź‚ü÷í€ JĹ?‰ ľyW +“8Č(Řiĺkä>Ňâ >‡f@+Ű×(),j™ iŔ&(…Xł@„ăTmuÜxʂюCőiô}¨Čµ,hr¦‰l‘Ĺ8 +ŔtÍśµE}gب@)ni…uÔŕů ŘęD©SĂÁ€†|ŮŞ“Ĺ®Ůä^Č’zőˇ O[ÚÔ§.#4mA°Šę;4ÁwĐB.3ŽT ą”č銲 ”ˇt‡ ŁńÍV0Ąašˇ7 ¦ŽŁ$4¤,2ĂÄŃŇw°x@Ç oMlşÄĹ Ś©łăčt^¨ü4‚Çţ;tĚŘg.ä±ÁŚ l’ęƤ(dÇ­hUŠ!­ ;ŔłŹ|96Ň+r@!ŕdŞ]$ŠŁ1uę]OQ¶gb±hÄł=K€'­UźŰ Ĺ`FÇ-Y¶@ś/“…÷ďĐ×(1§E{×ö©e!-eńbźČ@M¨y+ŕ?`vś­NĂŁfŞ›BÂŇŠÉ6„’ ŚđĚ u!ś !äTąf$h3 ~.vĹ&Ěš˘¸+„A»ŔîBž4[ ą + eűhp+ŃäR®8‘…¸ńŁw‡N]%­LűčëdŇ8Ť öQ†ł‰˝!% &+tčřÄÂ!í±6‚i‚ă˛Ń+¤­â\`<¨›ŮH ž¨#źňůZľÚ śťGg„d«N% ťý§›’Ŕe876Tš'™„–ś. @ÉĄŔ…ôQCÎb—@%žtš€Ň°cŇ Á@Ö¤ä3ĐšA٦cq@a¸•›Á ¦×†tK׫G4h„â†î1Ş0Yč‹c+â :3Í(g‘©â‚ˇ©,Yĺ,öŤN?˘ÁbG±* +{dS“Đ— ábyâ Ô6Z˘ŢqÔ "A¦PÖ4e|š·®®Î›ăSÜb(X˛Řh07ÄŤˇŽôB$2Ú‚†Bb¸ĄĘt$ÎŢĐBrđ]€ĺší€M€ü!] ­T| €Z'Ą€FYLpW d#´ŠM[&ÂdT^ęŔŔÇéő§@8(5Ŕ¤›°ŔˇWŢĎ&˝â>g!­ ›0/“""×T_t_Ă0Ŕ)kťˇP‹áߡŚ0ŐĽ@‡X ł9B;Ľq'Â`¨­14mąä,`¦Qü¬y˛3xF¸Óđ¸(źĘ0Y ;(ř 6'4  , iŕ€}X€ĐŕćŽÇĆâPˇŃA« A®Ř‹Čô k şŔé@rE:†¦,d#hy/= †Gd€nŃżMĂ•‰X<6TÉ uĐ?Í\Qî-s-©“&Dzž / q3ÔŁ¸%Şb—M$ …ĂžÚŠťlŘćşŕ+Ś čbC +ZÇGJžâOô=C řŞĎ9‰“Âł©—]%»č=÷Ů&´e,LŇRa@÷@ šĂ +ĂÖmOD>t†Rx2ä't ňŔwŠßSÇ +Ű‘†Ťdv„ź)I°÷Qh č9“ÍAČźAnA¤@Rˇ ´©K»Ë”´VŮ#—±)źÄ«+cŃ÷jÓŃŔ¤hY}#ý„î@‡QlĺňŘÝű”;°€ć˝{ l˙aĆjb6Cţ2SĄťŮŠ0S ň(€a±‰Í' +gX€ćPĎ`{— öLófZ4™ů—Ra RhK(9 +=´ňénkgËÜh]`?ĘŔl%đ9D”‡Pśššć89†©¬QHS*}Ŕ@‹ˇÉ0©Ř<ăġn WĆNŔŘ!D+&DCˇZa+AĆ úˇJ•äEĐ E$z§EBÓIk€`]†J™ä»Ň"ž§ű|ĘüKcbÁÁ1UŢ’’ŕGú`b)3ć6X”ö‰Ĺ" dl·ImĹęŃXÂbˇÝšSLĐŔ‰č ‹â`H÷/M¨HEc°ÄM ÷4<îáŠRn&Ž‘kwHT+€˙űŹĹ+*j>×Čĺ A îvŹúóĘ Ŕf1Ť85D”Bô:ů–éJ_‚tQô桕0I)['Ş Q“9¨Đ hnŐĘš „Ô(tŹ[Đ gŃäAâP–x4¬’Kúň™ćb1óMx.6„ T>ŘÄgÂ_I«ŽMEĘĐ%Ä ćHČ›x”›Ź&°ĎM:”x˘ô˛ Ö˘Ga[‰çŠE%č\µÂWč´öéćy4š i6ŃŽWl€}„Ҧy¦\.¤&5”É,NsŚ:ČĄć \ű¦…Y{”r: h Ř= ý··M›ĽDm€ÄȶôM3ő‘–”Ú#SUÉ؉@(čĐK„Il¶ˇpâ›ݲ®´ č h&Ł(Ä»Z˝ ě4‘ç0ş‚ŞĐˇM× +xř‹@­jqć]]–ňh[tš´K‰¨€ÎL1Á5ľĄMčë3č%¦ßQmBy+†7q,¦`b6̇@ÁčľŇÄgÍ @:Ş śÄKţSM°s$ `? ¦˙ B zfʉO?8DľĎň$K!=ŰY’"śhÓF˘ ¤t]0GÄ@¦ŞŘŠČßĂźéRäŚhlSŢÚ„µj]˘Ý W0:Đ@öˇ3M* _šPŞŰ=:ˇ¤Oô‚Â7őpY®Ž }ăJ™ ˝–4Ľ,!Âp‹Ë…z>6‹U9tX̡›c‚úmizĆĘiűű¦*Ňńč˙¦/ĘŽ +Ŕrur%đ8yMĹ đGôőŇ}4¨‘<Ń-O8OGN”´Â4‚ůÚs4ń¸`[iI¶’ô4˘+íA—ŇÉĐźî©ĐxġQfŃLX–VĐéěá2#Ů<›¦!d#ńb2č6A"$Lp'*›@§ ź«u Ť!@Źđ–~h0 ZźQFY:śžM§ ţ Ť`6O%ů‰đđMBŞXźĚľ¨k‹ú‘®v٧ÁéRîy,“SJ˘2M§÷ÄG‰MČAA amüŔZW ‚€´Ś&8΀Ŕ‡Ć˝#M@%g-45–Z±%€ĺ‚V<Ő[řLĐbx– +öĚçQ0žä0G Dc„…‡„X>Ý#8uĎS’ʦ*n‡YNA*E°é\‡! áĚ9; 1:ôšI¬•Á +‡ŕś©˛ś E KBjéÜeşű=:|:ChašŔ˘tW€{ŐP x .čara1ÎÂŁ»ç€IÓfžr2dšX,ĎF0ĹEńłP‚xôý@(áš:c'f8rPÇôéÂěr¤•$YA‹1Ä*E)6Ť†]un*›băÓv"ş ˘ÄÓee ŔąŚ/IÎf๡˘éb:Ä\¶riă~3ëËc$Mő˛â“q<Ö"±‰Xž PČŁ x„(™nl\"M8‡ă¦Ž… @±`Mź–-[ąôÄŇ&…ŞeGř ˝´tUGcahÄŞ4‡®ť~_4¸ëaé¬G čđ×Ýh]P[’Ćdz’ěgą&Łٶéŕď0,`íĹEö‚VĹŹ´ÎdyCMǦçÁ&¦śŁáăxˇű($C¶‚Q€`Ń7U+ü˛g‘ę‡öžC©â¸JÇ3ާÓ$—ş¶°Hq:ÁĄZŕlÁ|t8ńÄt˝2 ›­ĺ 1-CPů„ëú¶´€,~Ą¶<Ő‚ŐŚô3_؆+ŞgŕŢ  +Ě µ€Y3†č BJ3!Śaf_#˙¦'‚‘/ă•ŚŁ«eĽÜé.dá`uSĽ:ŕ&7$xĆîAş’ĂL%É…KŹ=ínZ%Tâ.eŞ&cđ0E‚/śŽł“Äk‰Ď ‰¨L’ĄÉ25’©Iú¤ €k>mş&  p`č2“€!!-óçŮQ-±Ţˇ$t’;#‘ Gě{€Żý |š?ŔpľŠćŇ á1ŤHűŚV0A\“bŹmťÍĂ»¬nĄĄJÍ0AtDO_Č\P˘`Iî8/l&X´][ms@} #Y ž)ALłů•¨*Q0é”! ÓQĆBVŘľŞ›•V<¦˝B±/ZŤí4Č+NR9}Ć,1“R6`IńŻm„DYĘ*Ď—&ăüÁ5"y Ź4¦†`d*¦KqÉL8q‚ęa¶§<î`ĐŤd`°sb©Yř¨ÔGz,Č@ŹŘĆPáwŕ.âßD$É ňžŞZ‡‘)Ĺ OtŞŽ;lRŐ–Á8sű "i.I2 Pˇ-5 ­č¦p%O6t§b~P%Ţ–,‹y»¶ÇĽô…Ą˙7`î/(Ĺ0<Ő‚!mÖ~Ňš’ôl@öج¬‡"č +Ř)ô4ýżŇŠ˘|Ş–Ĺ&X(—tń˙Jć{‚¸-¬K.›ˇíy¦@t›˝ řłRÚ Ł3űFEb”gT ó ”đf˘ŽÎ˘_É+`H’06 ZŤY¶†–±T+*Ťf’˝hR:¨¶čÔdţ¶O\ -oňĆID‚`šŤÍuűÂŁĚÇg~6Q–….qPż4p™ďČV.Ëě$f(7Ě2Ł€˘TôÍĄĂ……ĘĘ• "ŔĎg©ÁPí8%tşÂéQ×ܧ7‰ÇUŠĄ1łŤM5!—iŚ!2F%éëôd»áqúęr ¶áęĽq‡ ČV:SW@‡LŢâhbk{RˇÇÔ1ú±Dń8"ÎË ÎĚëäv ¦ÉŮĽÉlj…˘ŽvĘA"lĹ»8žtŇ梒°Ęن -ŤT«·ÄÔ¦UhR¨Ňl4ąvKÂě.Ž^aI 9XLÚ–Č!ä|¦ťë‘Ôr °· -”Dő‹ |ybŢhâŔ$eđŚžđB ÖčĚřnC5–Ăđ +őxLbátŁbB´_čSFG™ĚěaŚđCščP[ôĹ2đ/MđĘřˇ!÷’°Şä…ńŔâľRíL†˛člu^cNĂOc{tj,_Üńiž¬L†łŰc`śK‡ &¤krDgE)őJ&xĄM@gŽĂä5´˘[»Ă´5:‘…xxű*1‡ɆŃ:¤vSŠp€†`JĚŘŕB ض…\Ą•Kďťdg¶Â>@¨|iÂŕ3ĺ7AaŘ„Y3:ó=ü° 6Á¤%±6ńH¨¶Ĺ˘“h,P“!Î; +a+H,(-ű•cIé‡Ĺ,>·j,›y&ŤC+‹L‚ńYB#­`Ĺ›ôEĽKGL¶P~bŹ rűŚIěEß»-M¨&ŔU,I +2ÔéMŃŢVçĺ˛x‹‘|¦#ЧÎ,"óFŮHK”˝Ď…’ĆDH@‹x”~UfĽčdo—‘âA“¬Qč2śśÝx®bő€Yˇt+˛‡°Ţ¸7ŚŰSFJdä +ć`ö1âĹ-fţ°%;HËQ ˘»â‡)Č´#ZO&9Ö ÁoC×B 3AI) +r5Á$4Ž9*î(ş°¤g>:•sď<©śm3ÔËđ¸EϵęĂ´dŹÉIJ"N€žMĎ4DgQô{ Ô ^ďŕĘš}‰isÉ—đ:/{T˘Ŕb\»1ŞľĹ‘ŘhpÎ ‡‘˘,,†ęĆ=L+NO”tC梱Ęň•¦¦ôĆo0; j Ĺß z +ĺ„<ąĽŠĹ Ůó^/†F<ΔŮÄ–@ Źî%qySúl@ż¬Ë, Ńö ś…G0ĘĐ-ę× ÓśCAÂL89‡yĽ¤8n= DĚŇ Aź3Ë[¸G ĎZ€NĹJËE É6łG-â?4…ŚgÄÎÖ§)Kă-0”6É‘¬@¦"Pł b›h&ŤŇÄÔLÖ9ňľ…#q4DJ`Ä«Ůń¶wń¨PiŘ3ÄDőIÚôîТvĹKíŤŇÄ›»k7!”™ŽăŇű,6+/Ö«¬@l Ňc’ZÄ/ł™aDńN#Y06ÄÇ4cĆßG™rĚH Ĺ +WÔJŐ«.ůř®ŔEfg3~m2ÎáRĹůŚ+Pý›.Ł<˛Ö‚:?Ŕ–é…Fët-ąőcÔ˘ bK>>ň™5 ď0uQ‚’č–±:P ‰FÜĽJ‰E»Ř®cúŃéz‘äg4˘†VŠK‚R*ĆPµ36Ëx§33™‰#]Ú›¶ü‰&PÖë–$ˇÂXǡ[Ű `łőíđ@ZĄ<и¸— Už?˝«ä)˛}–çrGč\%ŻŇčˇw*0U‚% MÂúŹpA¬MA4Â0Ň(“©ĺź…&–#©E{Đ7•?Ęh cćŁ^’‚Ű›bJ5¨]xôĹ}ő‡XŹ2>tŘdR(Ă1L“bu:ôahe“>5`…Ăäž‹,]%Ô;>•°HO>tâęĚ0á˝yVč;pxµ=Ä–ě†w×бéeZˇĹĎžY +™Ě4`$#FňĄ• ÍCĺcfŁ€q ć‰đ÷$ ?đĺBCVĎŇV†ÍeÓóeřáTl¦§0Şh¨Ľf/ęS^ ‡·ý°t ľČcťó>4±…ç3ů‡&°č„Q‚<ž$ˇńĺŚĆ÷EjŔąĺŹoI`QGˇĚŤrËoĚbLOU4±‰˘Ăg¤”µ%D0}I¤†ÄQâźYÝ.CÝLěŰ;.IŚ:ŠO˝_ĽPĽě¦r32E€k|ÔíĘďIo +ă^ =w”ˇ0&Ľ@ę2]R94a ąËŠy;A6Řx”ňOµ€ťú¦w"˘:‹—+¶ů«č0tÂ5‹ÎHrł¦ŔćĐK— ^ţđ:“mĆŠéĚd#Â"â*ʵř3!É3 wÖdŇťÁČ«d]Iú;Cľd‡ÚDęy&°J5ĹžĄ‚°ŐL°ÂžWG¨LąĚĄ ś¶-/¬ý¤—‡R479«žÄÝďI•śFW8,Ţk ~i(|&@ŹH’ňű úb®µřäyÉŁÔăęTr¶dŕ{RQOµµŕZ*jG@!©D6]4’GͲ4§`|‚·TŇR˘]ŔěOî©ř[–Mk%yöŚô3ý‰qvŇTäO‹nÖľ9ĚůÁ‰,RaÔVÔ Ćű@y ¬}#P ‡uźL]…E_SĘě ± 6–‰óäc[.$u\şxKł/lîŻĹ$Š Ď“ćŻá°%Ć•>q]řĐ$2Ó… 5#Żeń ~ÓNB=:‘ą¸{Ą.Ť1{¦ë´:*däłFŐäEś +PŞQ˘´Ě»€Ľ÷ĺJ%SnĚe ™N|CĚxgôʦ%¨‹}hŠbd­Ĺ®ÜDâPtčD-8Y_ĚbQ{ę6Ü€&„ÓxeHŔUR)ĺ[–Ü"±HlK Ňžţ<’żI_…+ 0 rŃLç?ŮŚĽI×)#°&QŁŘáÁ»P‹†&ůľ&CDž­"‘.k9ékŁ&µ 1*čß%"UŃĚ@á2*µh1ŚF÷5sö`ÝŠď—^+›76j¬±äĹŚ{¨­\m˘Óőíń†1¬—ć2“rH˘ ôúŚ|҉çŞmŁ‹Źe9&1H”.Q.qĽKŇ4OtwŇD_<[—GWV?y@:ľ‚°Ś”C€8W¬&´ŠĹ´Ú÷¦4Âʬuň´ ^@a>5ŁŁćëŻë,,¶¤ČŚI\ĽÔÎVˇk‹pj&…śĘyLţq%é—·1ű™I(–äíj"âxW ě4Oĺ…°˘0`L‚Ĺ4ťéľ•Âić̸¬ €`ÖĂ|pVŤ34%JR#čEŁŁÓQďš§ÇÔW‡wÝ’W‡%ŕĚç 1+ š4¨nč3ÓË@Ś–Ň)„Ľ)!ô)2Ť*ňĘbmçGq­2KäNXé&ÍÍ€… 4X°j¨ôOLh›:CŇw™JχGXę ]2@Í$–¬QŢşĽä’ČB~a9ôŔ¨2‘ +CÍ vZ¬""â¦=ŔR$ć Çóę·ŽřMéăĹ)¦TÎ3DjKŇ OSődOâ/TŞĚ€ÂXL"ĐťÂ&3$řHG4yď3C0rÍŻkćÝ“Ś% ÷°Ź2+¤]5–Ç’6“ŕˢ6–VŚ(¬dŞâDSąy0¶ŞXĄk‰0•ˇ/¶°éq3mą˛Ç,O٢‰˘f†~IK”—ÂP Č(zŃĘ,=•ş×b"ëUm—©`Ě%¤d-$´ŃëÇ0.݆p)K‹ŁŐK¬-YK¦U‘_ÇVô31śa©¤@VŢŇV‘¸‘Ł:ň,‰ÝC3çťZß`6>m;lAkłô…©De)ŠŇŠIV ą8\{!בĘŘĄp‰TČ«l‘z©5g¶łĄ¸aÚćMőíMőí˙cŐ·§#7Ő·7Ő·˙Ąę[ŰMőíMőíĄúö´UÍéMőmjŤ§7Ő·7Ő·˙|ő-9ó¦úö˙ëęŰÓVUš7Ő·˙ĎVߊvľ©ľ˝©ľý/UßžŢTßŢTßŢTßŢTßŢTßŢTßŢTßŢTßŢTßŢTßŢTßŢTßŢTßŢTßŢTßŢTßŢTßŢTßŢTßŢTßŢTßŢTßŢTßŢTßŢTßŢTßŢTßŢTßŢTßŢTßŢTßŢTßŢTßŢTßŢTßŢTßŢTßŢTßŢTßŢTßŢTßţ3Ő·§Şú¶ęĄűtIîër“R ÉŇ3Áč…!Ą•ňŁÔąFęs‹UC´I˘7$ťI»ŐŽ>u4)á±ĂĎuI^t˘żđYđ¸+Ů};D$|Ć 0GŮq…Ot_cúA=íh°BúQ°¸Ć’grKFq¤ę-ŐPÔšŕs›á°!hëËçiÉń¤5>·čđ¦…Î’i‡Ń/j“ N¬żđÂÄ—śŁ! FYá«­°ů°3@á^ Á0 4Ü]6 uÉ·¬=GĄŚHńů"ŐIŞŤ$ńűdVąQφJ‡‰2Ă™` ŮD'źš¦!ůą„şŃ,,¦ řD»i0A•–LěPGśéR=›áBČá®ŇIŠ R¶j-»éűRnŞF…y ŃŤ[ wÓd°YfPBŮşŹŚ˘Ó‘)tÂô‚4Ů@uiRţáG'Ľ¬GsŚVAעN´˘ş0ω†D‡ŽW)}Uf, f=X©4ů0ťZíD3µ)*ČŹ¤AgW@„\k˛~ "˝9MzĐJ© /x„aDµhâ2ÓÖ6BIąU:ăą1U–7I´ĘVÉ-CěżřuÉČ„*„,ŐRJ˘¦XZgJ‘)#śťLîÄěĂĺ…v úEč˝cÍeôˇÁÚÖDKtÁ`=ˇRĆífa™łČc髳ŔŔŹÇ€ÉÄěďD°f>—!\Ćvô@4K»ś#ě$?Wźx¬A¶S‚ř[Kßu–ďéýIí!0Ô›ÖÖş„e˘=GÖÔ3IUť!‰Ü(ĚüŔgľmjşäů¦Ć𙙜5xL©Źe/knM#f§’¬ďŠŐńJ8J¶M‰2u9°•ÚÓ6mBJMECS§FqB\rkH|ÎZ;‘zÔ6L˘„".š"óĚ"1 +˝«H|n34ťBĚÍŠwźó*©;‹ľźţ\ ˇSňĄX$×…”'éNŚřyĚ‚ŞJ*¦vů,YŁbAŹ90fJ°(ŃÉtÇňň†„2€WR„A j“%B7řpQlSr¦yÔ¦M–ßJ] Ő)R¶ŠqVĎ„gţ«´ĄE †–Rö3]S{ËĚa‰z U<-53ɵvňM2'°´[§(d}ĆşR>ÄR†žŕzŞg†Űü˙2ŮŤaî”čđY_a>&ŢŃ!ďŽ!•ü1Ň•S.áEJ7?FQ~˛CGQ ¦(¤*ůÉ.ck‰€pMh‡jźq“D>¦>Ž“s$Ű"A ŻäăxŽ’źÉ´ÇDĹ몪ŢNěTP)VşMZÇPígĐ;iš1®5[Ëěł#ąJz˛ +“™eŚť;I“ŘréJ3c+Se‡G(ź9Ŕǰ—G‘…ÎđŽÇĐU +ďIÍQŘëS ‰ćG‹`áFtÖâ˘ňŽIĐbť„C -Š(D»ĺ‰H`PH± M.†ţSÝ0§ÖKëD®1KŞDX†,cřË0d"ŕ„h,=H‹ +V¬Ć’^S¨™ăQżÍ[%R˘YęőŢ€é"9…Č“¶Ť¦Ě5Äg©c$|óťčRY’l¤L5B3ÂŁôťg˘éÇQŤaĐ?mń>‡° —>ꏓ€YŐiőNK9’1Ëťu?A6#­ńšĂÂ.(~#žł2ćŁEKužć0Z§É„)޶bCgrv2‚Ą134™„É*éK×m"ëĹ÷Aę!\á9쵓X—ĽNĂŚ+Ĺô{'˛DÜv˘˝ąR7†…B0ĽLʼn &óy”śÍbś„0ó]0…0HYm–xcŠóxű‚‘Ůë´€yć’|y<¤şÖŹÍ2‡.ďźťCž\ ‰Ó{ZŚ[„G˝RĘŔÔć1öř—IĄnŇDÂ0±éYdđ,ęu°†$!ą˛¨ez’ –0őfFęÓĽôR ˛„â×Mäc®Ĺ`4/%”óťčâőJc3‡>y;Q°nA"őĂ=‘ÍfšR°«fě§*ŁÔqÔ’ńAĺ}‚Ruꦜa&I-2ä +źZĽńÎŽ ~Îśúý3g&‘ݬź XŁp°Ä̢#ç˘}SR°-ËBúDAůb }Ĺll3F°ď›s=:ë#AĘÔ™´÷Ľc*˝íE°•ŮÝóXb%j3üAžI±–8¬(jÁliç‘GĹĽ©HĐľM\G®GÓ.I.Qő΀™G§w„Ň“ĎÂěX“ą`‰Mľę0cĘ}'Vdđ .ëČ]„Ż€‹<Ś˘e\řŻíłÍř|-ÂPئ¬Ł•™ú‘:*~*…X@Iç…&ĽŘ&úM>fT źL™¬†ź3ŇJŰ…A á>cb+žž?±Ńůąă¤ \đ‹• ~đR•řh媧µ®¨:Wešl©&ş™†XäÚD±1ÍšYO<Ác Ųl‚T±ň¦ňÍ/ůŘžŠeĄmĄ›I@ŐČšbi‘äJjhÚH/5ŢgÁVŚťr]8¬ŃN- tŰL4D¤Á©ëK›(5ޱ‹VY‰”ř^™Šk›ęÎÓSŢ ńĄZ‰Uoˤc¤ ŔÄ Éţ] TĆŽSČ)'†źd%ʉ»ČŃRżĘňx}(Ăx^âµâÝ‘Ř!v1ą!˝”„I [‰¨ĄµÚ=rKJgç-*žŹ‘1¨űb+·Se|šřÜN,D¦łŇ4ĺÉĎT®!Ůz‰çVgbsÜa¬ť0±;!űyHĹ:0aěďÍwA1Ę«N[…4–X¦‡K¸ä%dCÉ«HmMĘńí9IĎ@qĘîô$Ë.Ť)úĹcŻ“B˛źóŠ‚ř¨ůą“Q§aőqX&,Ŕ›l)29GŞőťĄö•f†(ó *čL·o_ĺ„Ĺ/!Ś‘'cSVĘŐ-ˇ;ĺjűżŚ˝É®-[’öü‡;! IEÄęĄQĺËâ@x‚jR B(䄞$%ü{ąůňĆVě›÷<Xdćń»Ł[Ţ»›Ť÷ß±v‘W$¨ľ§‰Uw0DÁ%ŕzí]lóeŢŠŮîNc§;i¦v ĆĎ2LD.„/ +ž)ôAż€[$ob€úyh„Ü4Shlęzů[Üţj‘˛S…ăf¤BŘ˝rýČ?b­GBľüA¨m4LĹ®ô÷ÝÄŰŰë%K˝CńPabk­`čc~ÚR€ĘpśŹń$?–Áz$âŔ©L¸ň)ĵźFŢł(nŰ~ďKaB)ĎJk†RěCmBĚŕ¦u‡’ëł+úÎ(ÔŚřHâąż‚ Ő‚ÍŘyŚ Đ_uiŞ*p +üĂ=CrĘŘٍK`@žKÔľŽ¸‰5wbĹŃPkXŽ#ŁŽˇĹĐŚł?ţüŞ}ţýÁľžżă˝çĆA5şďţŰŘě…ŕÍÂÖĺ3‡ ýiŤűÔű ç%.Â"w{§v_EŞO,lK¬kRőâ:tŁXr«„H?Ž z‹»g(~x‰#šA;1« ż)ru;Ä,F˙®¨®ö]"ÍAą›úréĘł°3¬%ëÖʉÉüŚăŁ#ì™ĽBV”_z=óbz” {Ż·` ęl1d M,ÄX4‘um+ŽJ‚q=žI'»=q±4ĘŘéäń1. Ң8ŚMÓ4 »Ă÷Ą Ç™t=_pŠzťîPgťCOĘŃ_VTÎĚΨ" ióŐyТw'?\' |˘ř+ĎűłZ—˛)Fĺň{Ç»bĂΔ‰)ÖŠqůĂĂbAߏpŐN%}E{äćâ.ŻcŃXÉ +ÉĄ ŇlŞëŐäŽ0Lv˙íŮu0ŚFÁ8Ç1lţď?ż§[ç{qć[T‹Ü.ü®ëŠq•ĐÜŻcĚöć箺MbS⍌5ţ:ą˛Ö‹ëĘ–©† YçBí|ňŘĹŮŰ©âÇ/jt¶‡DKňéľ~ŕQ\ÇląiqĂ-L-Ż#…ţUŤ˙¸Ź¤¤)뎉T+Íľ)ĚČ«ąĺĆ í#¬ĺs_«>áŁđ˰AOşH„B¨PĆÜ„áuă8 «aŻĐĹĎký'ŐáyřDŔ”ĺ5Đ€\|ç{íšEŠö{Mđ·_Y‡ź˙­bq—^WĚ?ţxĚ[Ó}uš=ęĺM1ü˛FúY.×Ôzë?Şĺ(âae1OîQ,Ç&Ţ8bćW­\k8Ř` ­˘Rąd­gű䬔ŁHąÍ%|ʆďž;óÎŁN. Ţ9X@Q{S~ LxŹhŢ_ő:ĚżÜę(›ť5r€h]śf”Č +,‹bެcţöÓŕůÇ?ęăź\Ç_+X_Őq ę.š­ţ,ŽCâ†ÎÚřkË˙ü*Ť/…,íů-?*ă}ĽŠY…q1˘™´W]ĽkS2{üݞř%RˇÄóŁ*Ž‚Ŕ1›|ű(»(3Ľbŕ…ÄŤFŃ?bh9UŠžmÝSĹľ#79 â(ĆÝ4ýQźc/±gĺpŚ…‹íŁ{TĂÁ2R.űÓb8 @Şň®…ńîÔ·?JáŠx ­•pÓŤ#ž}—`ŢpÓ›fV¨.ŹÝ&_eđŮß5WÁgUş/ŞîEpŕz=dď^5p”oĎQ—w «Ë€ŘëO†Š@~6gđĽBym3öů‹ú7VťäŁf<ýúěruĘĂĎęwÇď©ÂűÍci®pŮÖkßૹÔ•ľ»® \9ŻňQůĆ8 p ÂŻź…oô&שκ7ö$ŹÜGŮ[Ü"ĐƲĄ~T˝?n˝˙ľ3¦š·Âň피÷Ö¸mp–ĺĎç´ćYđÖö?ĽëÝkäXÎr7ćC»gµŢ °ąYŽ}»çőZ™9kÝňçë8ŐŚĂ ¶~ÖgÎJ÷J C·~ş•8®?T•ĄBő@¸CÄ»Ě=ŔqT‡řŁÂÇ3*r‹éżŽĺšŹ7ŞÔ磹č8ä=î’UĐľ^¦ű,p‹ß˛=ÔQßî`b9ţ|”·1<|8Ĺ]Ýî:şĆibĆźµŃóP~8ŕŹŇö7çţďV¶µNvd@Š­çů2ţÓ=(˛ÓŘ$Ç "NCîűÜ_ÜÄzůÍ͇sp+0ž«lw€WDB%ˇ vooŇńčLÇ~k r,ĘčĎ»ŻĐŘĺ‘^Ş[ěcAťĂťż[áŞčŃ»ĚÝëeаćR‹hďRóÝů-ŔD†+ ŘSˇŽ;göP§Ăŕ¨×­\˙Ń­ĺ+« ń ‹sńtty•ÄPwm\ÂpáY,(HŶŦSË1d‰«9z]ŻŞđÇţ>ŔÝxęcŞ[ż xpç}. +sIŮ(–“"š+€fˇőŽŠ±M˙žZëGąńh¤ń-ËŤ:]Ćń'ĹíxŹW÷ÜôđΙ–FŹ„§(ęžc`gŕ„ń9i÷΀îz4ď?‚3ؤʯč˙ŠrĄpőä 6¦’żźŽęRË‘˝BX|±ŁzŔżž‹[ŁîëÇ?˙g‰ýaBţ»ű/˙ă?ţ×ýëůO˙ú_ţź˙ű˙üŻ˙ýÇ˙„˙îĆ˙úűP˙ţĽ˙ż˙ö_ě?ü{ýľŮ´Ä˙©?ÄÝ‚-|h˘€@˙ 0čPY†’wâ_ KŽbeeˇ´¦W@WĆâ:0*đß8‚E“Ź]ÚŹţG»ůW@1ä†|Ç˙íßüŰÁöáĐ/đ g»ě¸Ý0&h¨ÜśXi…Ô-rč`jNb7…gÁgŔą¬ň´ţŁˇĆ‹Ż p ‹„®Kâ¸ÓżµŤ”ĄřUâZńŃ÷Ĺ´7#v„}¶©Xé©ŇÍ~j˘&äŘY~4!W í+Ďľę:ŔjĹ+ž*‚ßwßЇűbM™Ü žh7tÂ’î_’ű„ŞŔ{ÁĹ€¶/âhWt%h¨#Ş lŢ Ĺ]Č-xÜŢ6ä׾šN'@iDS€a§P”«(áEŔܱŘĐX[ @A·Ř‚gĺV±ź`ČŔh[Ż"‚Ď D~Ĺž‹kaűQž ČvmŔÎz¬ŹÚßL TŔ pDyGEŽŻy)»|5 ,ËóŁčöŁ)7zD0?•®°¨¦ÔKŔĺj@(ď@••¨p“gčOŕč§‘«(ÎXq~ôU㞌" ĺéu§Ł›8Ç–W{@7xÜĚŹş¤ >Uyń~ěW˝đąŽÎ@S +0›}X±‰˛ś ¬lŠÂp)ę#X?ň«a;âg”rČn})· +¤RbˇÚżŞ^mih46)Dk‡yK`7ăŮ.Ë…ůhc*›·âéÝúŔ v ›ćúCŕQąPÁ{ÄTSp«xÄZMä§ßŤw$O†ĄśM {ßt±nőR$ÁrŰČ”czb ]?É@-Oő`HEDGĎatT MD>óS»˛‹‰¶ˇ;P•Ą®„ůqŔńş8 ż¨@ÂógÉX5`ʉÔ÷Úóę¶Ç×­=@n‚?¤ˇ +ŘÇu©ŻşčbKQmP`řţčŁr«Łűľ'xíŔ…·€ă¤"&]—Š &‰M3÷Ő0.`ëoÔĚ}DPVhx–ĘUÔ‘Ýč˙-"ń†„ś ÍYúhÉł@ŞLDŃKŕÂÚ̵oN•ă@‚ +|rź ¬SÎ:xÉíŮĆŮ&i=úe†XşżűemÇÄyÄ×$ŁPŕ Ć‹ÄZm +VX÷i»Áł"ć°_ű‹`償Š/®g»Ńň¤C‘˝EB‘E¤+ƨ© ,h,щŚkˇ¬‡#Vzˇ‘Љ=çŚA.]XÇŚÁÚTó"Ę)=pŇ&«‚ŕ´×őTc@°d€<3şŻöżăýâgţ 0x¦Żňů¬ż]2ţ \ ľlQÍąű_ë_űo <˙4@čđW ţUDüí?V˙‰żúOëŇ˙öÎ˙`cí/ lż‰¬UčÇ“ůëŐ“÷'˙·˙ö<żýĺ·Ň˙˛ZýËoíŻůÇ^˙ňŹú/Jţ‹ńďäţťţ·Őţ[Ťc8XůőăýóűYôB˙ź˙mÇEřź[˙ŘWÎ\č+[´—… Ĺyŕđ†‚i)×-Ň}ŚŻĚ< ZĘT«0\_J˝áKÁs/EŁÜÂľ•ţďh%ü/ňź˙Ż·VĚŃuRÜy h$ýńżţř˙Çőă?˙‘ý÷:;ĄěĹŐpµżÇ€0¤Ŕ+fµ•®-RŞfü4§xU é†ŰQM¤ÂD˛ăö›_¨Ń’[C‹â’?[őČ~Ą'v$"* sMtJ»V·H^Ö.¤´Q·Ěu˛EŔи3ôý3ź»>?M Ĺ;j/*:dŻłçµćĘ H¦Ť&¨f>ŕ‡)y-€Az›ĚDŔ;´ßŘÚw zĄť%-żÖTR…ťyÍýěQ[ ~‡@â‹·Ľßń8¤e"C"Śk¨€’ÝÍ›ĽőŹôPŚâM—ý~Đ(ń<­ěÓuĺ +“‰€ÇjKaî4ĐV7ńK«VkHl)0běsę×ŔŰ?zŔÂŹµľŔKdsá*0aKÂJ^+‡4TFÂ;:´źiVUˇLLćm‰›oBDšňőD*–W+á§RŠ[LĎě–ŁF_U„űXöÜ1U˘Î—F__4ç¶LçI R©HŁ{„˛ůפŐ#L^IŤSŰ]ĎĆ“ł:H€ŻNŹÝďW¤Eţ!~üÍH±·ž¨Ô±ú´ubŚśÍŐkd}®ýşLmÄNůÉUţ›U|Ăä,}¦5•&ďv$–Ü~ć#Du7×űÍ)Đä>öiD™ěÓí Đ9fpbŘu%0–Űü4‘+!äöŃ[ąšV„Ţi–0D,}_lş-¦®śj X)Ͳţř®A®őýţü˙Żřľm2¤ÚwĚ–Ď–˝ő•1•Ëk|„ě|CLďs>”üd—m÷ĄŽĎ7Ţ•łĄ"ă)Ś…—,V­nÓ¶EI9vů{ĺ=­P#Á!şň¦;썽@|‡ˇ‚áĚĆ}ř»Ăkî{ĄłŞ·MĽUz˛ëßłç¤őţžŃ3M•V˝›l Ů•ä¤PżP=«ćÓSâbÁźSţ…oxJ¬âj—}¬\xôkŚ‹úVÎţęČ®fɶ<•îmKžv í‡ŐH˝ąo(Ă6‡4óZŕÓ°ĺ-•Čk~-Ţ[Q‘kD)ÚD€<˝×öµÄŞFs/Ż÷Ë*Ą8Ě%=Ä˙…ă)™w»>Md/˝oc ńvěçűµT*LÍ–R}Óż»Ô*>÷l¶¬Bf˛ÎâŹí Đ!57Ř+ödÉvB#0[č?<ąŻ"Áźë¨˙Ôöo/łpk„ł°ďUÓíĆá6ĹĄzNŞlë5Š˙g˙±yQ3ס˝˘7ŚVď€lGŃĐoض´rŁn‹,$‰áC°ř2c¤Át/ŠŮ;ÄiއëQa±g’˙s™ÚvŕŽ…Ęý†ŻÂ»>*ŇŹÜŁDLJÇ®.Ů®®•T7‚lꎗYě‡@gbŁÎűXĐRśYŇîďx‡&bp–Ő ™dša±¸â˛;X9ÔĂ]®ŠŚćăâć?cőňÁ+óB@0ćgš9#čżÂ š[íbČÝEţn¸đ˙ŇňÖ0T ÷Lő0blÄtOř ŢŚÎÓ~ĐÂ€ŠŞŞ(îŃĹýr22(0UŤ˛ż|5Ç`SEîG‹^[‚7`»ĺĎý§Ć#€ÔVÖÓaŔʰ&k^G^’7ôv¬AĂ-1beĐsmWäw’ËĹ4„@BkN¸ž-ëţ-SEe0ĽcQr?Ććosîžp€&ž–ÍźF4d!©Çb8pňü_ ÁâJTÖmX˝—š~hcoÍvÖű¶C–öCcśß<ÇĘ,d‰H§š…§˝îP‘ |ĄíŽĂ5Ä.DĐoę +¦ä=ęşµč LŹéęZ}z[!đ^ľł(ě+' Žj +ÉžÉĆ椿9ĘëLµ;ĆÚçÉm°TüËgd,ľ”§2§ á)qŃ Ëż—śŔß‘†Ü|”č’hě#ÖĚO#xä ImáÎAÁp~Ű~1——)ČL÷<ű{łx/4qýö׬݀ WĂ3ľ=â…ܸĐÝsď[ĄđE®.ďÉ|şž«UĹa߉îlÄ®ŽŠČń5ĺŤĐk#7h“®ť"(HőĘ”ýPÎé!W~Ž’6cRžźěßh5×ĹóJŕ™Î$ RÓ–É12Őą› ífÄžď‡j–ďvŠŠj"sđí «J¸0q;9Ľ=X›,!©ţ’“¤`»UqP~őőcĘ$s¦j÷«ŐAä[![DŢŮťU-äŐ`$łČŔNßËŠ˘^eÁ’Ú ď×·Ů<\QŮĐĎľEĘFŚ^̰°˛Ŕ]TŚO±RÇAťöY>čK'gůófo‡'WJ°¬( š>]_aű:°D×m[d-žs6Ó&*tő¬E Ťđ`µŮîŔţâr"}8Ż´î~|•ëŹ^üQÂŻ‘I f®+ů¨¬ő$LTšţ0:e;ńáÁiá™ěťuB=ďą–µĹ_„ żJŁ.Úž¦üŹĎDFŞŽeq[ĺĘň˛ŚÝ‚č-ČE§×`†ýVČZ®¸1ějĎšHá…ĚV}µ‰uŕV-â4„{ _S:ë€jÓ +8x­L + ~ËZĹ tXVˇuCžxW;‘P9ňł-jŰ´°ŕkŻńJŁ"řŘń{Žîż4pűĘ}Ç(÷vY°zq*‡@wýţń]pŇĆwÉʡ;Bö؉QiJrËâ7Цőňşj.vWuëYXBá}8«ę>ÓŮlŃν-%nĄF2˝Ĺ¬‘ľLhG@šy|D“[ŰÄŮmÓ´BgcĐT-Ş%2w$M×ykěU˛$‰ÁEą%nŰ4šŮµLśďË*¬úäčĐ.Üzřď‘’ŘűöH{«AB úT ÔwOŢ +MöS‘ĹwNľ±%ćÎë¬ö©w˝0Qł2+ÍâÝaOÖŹĹţŔčr(dq{Ľěö·¨UÓę¤xÂŘ|ĎŚb +(FËŃvĎjś-‹?Żůnň¨h”a€ś.¦yhU_7áFΡşv†ŁŃ‡ž1×_ÓâĚŃÝ{ŢËďĐý»ĎOŹňŁęQÂh¶µ·E^Ŕý6˘D]Tr˛p"Ëą±tż-?’Ť|ă2—úć]˙‘ď:( 5Fl™DÝ;‹ D6ö߯KpN±­-ŹđŇ,Ôë_ˇW)˛qĹ?j`¨-)ą4ä"b‰ +BEýĂ´g-kßNŹCYy¬…YÉ!—R1ăŢBÔYÉ3ÉŤĐ7Äô$;z.‡c1 ÉžZĎt¸mžtą +ŢpÂŃńÖ»Ö~JĚçRźé![ú{Ř1TdÜ®ĺńL +´Ý.}- ¦ýPŤU ąÎĐybinĐĽ8­ž,ŻĹ-x•’ű1’‚j?tÉéö®†~ôhLî#81ć®ÇDń–ٵzĹłÝ-%gŮöˇŞýXťŐŁR„‰ Âęz‰‹$šÍ~tIY“E'®ŐŁVUMĘË>ż‡/fcźVëYČŐŰY=§]°Îݰ¸ČşŽdÜÜĹż^>zž›mš YĂx‡”»*WŽ­Ř—P×jE9N^JÍOx:šÔ?‰Í`?SoJ-*ĄÄ[˘ÉgáúĚŚŽŮ¤sşZî«)”@ýîÖˇ6ťJ«ÍŘ˙v:Ž‘$äŻXńFEéÎą$Íű=·X®ĺ¸kĆ}ő ęĚT0´3zĐŘ­4( ęłż§„ě}]+;EŚFW¬\ăŢ7eë _ęN´|ę›&°Ć–j5z¤n“ĹćŠPK ű]ÂŽďşĹ^ŮáPP„F˝9„Óq0/JÝ ĹľsŞéű¸áůÔśŻŃ X‡ţ™ÎˇłX/Iřâ…™ľ>ˇjŰĎń:ľ‰,Žę&V˛ďĘŐ;ŚoúZ3ˇÂ(st»Ü2C1H’}Äg;‹NM áąA=)ד鞙頛ط Űűôűń´ťIÔמűUüÖť…‹ęÖ¨}Ń7ߪö×Â.»Ţ—ˇ»ÂŠď.926PĺĘů,ĭ׾#TűŽŚéęEřüŮeŻŔ«‹ ·żĽ<¸–łVYą™ÜĚ8¨Qćw…ĽśTdżC {ĺćjvđĚ«­YŽś5Ó;XY÷WŤžzNDř—ţ˝3QËVXž˛Ô kĎń D$49€"oď)ʧ—ú¤­Ż‘†Ä¬!h6@ŹTüŕg݇}Öl7»!`U¬W®|ĺěÜdÂ2ä›KŚő¶WZuo öş{tÝ<¶Áľ´Vä4x®b “9&’ŤýĐ‘ćË+3â§ŔąîŐÇżů–ĎZš[%Ä…çô$` †ÁPí¨P^ľý(u”‘‰čĺa÷µ¨ ©ěîGUZî1ęY@sťÔnÜ·±v{‹>m@`šYX(ÇÇąŹĚA˘ŽĽçw„÷7çoń;ărƵʳrŚ yg‘6’ęÂ*r%ÍÝŹo]CćR߼ç?B*÷%UŞČ»¸ąk¬ )9OR5›z&x7J̸¸Ż%1k‰NdZŔr›wÚ‡ă5sźs)…uŔß"äâÄ~ˇ­ě Žłöç(±*%Â:Ć(/]>Űm®Ą"GřmikĄ9Ap#qň>ň×5‰XR@ˇ5+㇫0Ăfî!8ŁhíżŠő}­É#Ná…ˇIëµfŚăzl-aŞÁ¨îkx¸irFîČz"NŐr€aúL{öÄźú±Ebx°HA0;˘ ?1'Ől}Ékć y\«pH)n OTˇqr_H’2Éő(<_‘ř¨H»rřÁ.¤žůîä„Čs”Ű9ďTő/ Çôď#·—÷±Ę€’W QlR÷üRŃşd§üj4Eě^Ou +Ł.BQŹę÷óˇÓlkťŘŠľ|ÜŢŢ^:ä¦ î¬ë’}Ó6%›gń!™P‹,6•‡Óđ­±–#Eë‹ćK]„h4ßďő=Q4Çkr 6Ašîţ®-äĎă"ăîP"Ó_ŇjËĐöf¦î[$ŃpĚü‹ľą˛ŚÉyT(v(ý¦5YÍ’ąi®z8ďśű=É­ÇÚćűő4yCbr&^ŮÁH-ěg +ĐoýD$Xß˝é?BŠzőÁőstÖ$®yĹ`;: XÖ‚S@IDSńOtRÔv—É"ś÷`hšžĽöŁÄĆĹĚćF?’ŚwnŁ”G`F]Öę1Ç:×d´É}/Ě6E”Šâ +c6˝5ËĄ -łHşĺ[«Ä<Ô±ś"´˘™­ŚŇ R×JC3!ë݇ÔŰö {•µÇóÔ vÓcÔ4)‰ď'?+:ȸN˙ÎóÇ.přUvŐt*1–9a r|ˇ¸3Ĝѓ U1‘ÎŢv•f§]9”âzßsá¨:»ć ą •ŕĹńŔ$x%ęĘT_¦°%c UXć„IŁ'ö$ň&¸oQk¦uuĚÎ$p˛?–8÷«9xű\˙I}äÔ_ĎîŚCyü\U¶1k’:±ZłCŻń–ŘťłŻ|pи ¤úY‰Đ¨,7Ń«‚Ř/y¸=‡ÓT‘ä`ú +rjäec×fB$¶9ö˙–+2ŠŤÁŽ…Ńź5{ŻŚČ”Ç©"d(ŕˇK@kîűhCeGm‹Jr!!ř1¦=ĘdQ©ňí(íň +ى´Ŕ÷şR»¨ó Ç‚–;3đ#ňbőđhęâ2{M8Ł\޵›á­ŃúPń›ó†BŘ”Ş5?kÎޱn§ŞGëd&A­u§rřŢ­jwZ[ŃĹ­dšiźśÔHÍɢ¨żEyůxcµ°Î˝Qśťűá“\NĆlKRzŕÔo‘çc PË掤˛ě‡b7Cő^WÚr™Ř0űngŹ ‡!¨ÜĐŘĐFîÂé>Éőc¦dk÷a%ݱśÍZ?‚:»Ü—"Ś H˛ iżsg˙öO¸‡LŞľyÍ„Tu"Q¨`vNOŢŃťSNęÝ`5`˝Ű +‰á ±őľSB)ARÂ4Ą&­Ľ*€ż}_Q‰Îq€IŞ™UđU_Ć ëôÎĄxAůťfťď$§'”:)¬«Űăzĺz.D2X;jÉ­¦R]‚Ţöź:„í3ą*‚<Ă Ü&"§ń…ěkML’‹–A,Ďş}řƤú _ÓĂ…Ş†ĄJ9ĹgB >˙¸”xŻű9°š&‡îĂď*%ÄSyO[ą˘­"3ć±LD®íV‘l˛űôZ\ë b[űˇq®RL€»/ĘđÚg5‡ŮG]DRËv¬á8/Ŕ©íZ& ¬ęޤĂQ+ŹKq]ă>ŞÁĺ+¦MLÓ$hÎť>3żŻ+IöĐK9;»˘ĹóN Ş?|@Ş[ˇ0÷fh”&Ţ^÷˛sRßý·¦ŃW‰&ŢĽíËŔ7ĽÖB‹*zúŻcć~ÚŕÎŐE=ÚDę“ób®ÇŞQť•'HĂd™@˙S 65z”ŞHy^ Ĺ’lb[˘Ú|–őkńą>ű€tßwlŁiLăÜ űŐM†Ť˘ŕč±a©A5ÓŐWw&W@čę¤Ţ[!ţ…żĽ×ŻX©ĚpďČ1ëÇ\‘©.*a€®Ź×ěÂ1¨¦üÉ)śšf"`}9ĽÚo†c;OÁ€Ž{#ÖÂEęËÚ7”7¸|ŐRɆmШ`¸+ő…a]Är•łŔ÷VüÜ1´sË[®.ĂÓ˘ś†¸÷vtF…}sX!ŤG }šń*ŰŽ'mA!GŽŔŤÉQ9’śűŔ6š +1yĽŔy¦ő‹y?Î41’¤˘ Č»°ÔmUÔ-÷S‰ó¬1lý˝Čôé›7CíyĽÂąnŃ0°˙P˙ "Ů·ř¶ÜSĐĘo"ŤV%MH¤ü¨‰h¨RgM8¬Aá¦?¨‰Mä:•`#â2ĄrĎ@)`úU)HB„(^ÜĎxH 9ć*-nW.»"ŁÁghvŔ6TťTrśOąbR w;ż.ůŕ‘¬ÇÉ ™˝űÍA +r'‹ŠĽÇş´tc]€Ş üKÇÉ"pô0nOíČ-R®ńdłx‚V21o·Ču\I>ůý> +Š/NŃÄČqN?l‘Ů{nQ*˝3ř•}äö.ţ^G­ä…xÁNĄäýOv< ¸Ž-O•(’qÝýů +WkĎ$Áࣖq© vŐ¤·xÂ*Šh@HëĹ®VhâNÍą‡ żAŕ¬8y…­~Ë+]ÔŤ2F‹â ?C-@ÄK?lCtűJN `ďŘ[‘Y DwjŮ:ŔÖËa۾ĝŁ˙Pî\«*ńEÓY°áó{á@g+-$M±Ú QôW‹Ć뉖äQţ­V¶,Fföť0kÔ¨G«6"ÂńËÁ&´śöÚ +N8©&Ń_h¬1|Sô'¦ť`(*ŕÍűéuµ3yUO˛ +# HÚű—O4ă×ű‘gĎ×+śou»H°fSg;Q„ý¦“PÜŚu”'ěZ=âOF żĘš”Ż%ö}ˇpŕ‰Ż?Bęá™ÖI¨áćvźŻBĂĺj¨ź™ ţ+ąż]™5:7d'¬:b®§s:`´ZŁŠ{EKo…‹Y…•@DiŽběy›‘k”cóZKĐ=ęMkVß]k× Ň»™(¤lÎď ´úŰ#SJ^˝‡Ţ&jäťPâ ·'(5Ş*ňśË±¤«®ž3Ĺ•¨ĎЉP2k +™sc[¤­ujd@˛—:P˝§b®QúP-oĺŤI¸Š[$ńÝ2’đpĘ ÍÇuBŽ +ŢP€JŢ3šW&áiÍ™ ôďR±íO)Y‹{Ź.î@-–ŠUdÜŽôCłď•6Hő“g5hÖL?=/#é ‚Â-Ôëî÷9®Ł#”€Ą\ŢĚHƵ4 ˇż{(ŤßN îŰí,ůkwä|…J!vśąçdË'?†B+xŰÚó(ĄżŁ!ݶ=ĂźvŔźí¸[ `yLîý{¸•É˝ďŘč1Ł•AîÂ1š><ąı«"‹uˬÔŘíDśÚh ÔâK2˙*B̸ę‡]ĹP¨D+ç±´Ó1ŰŕĹs Üđć Â>"`ýŽ!ó¨oŢtŚ3JĺvD{űčHO$ëŃmúŻpŁäéóc8 (°±A­RâŚ~ ˝i‚«¨Q ţ먷dęnMÖQ^`ěZŃjť)ÉŽiý=`Ať` ś89ČrTDÄŽ—uî&j}-[ŐĘřĹD¨—ËÝĹxvĂüqźf1I‹ŽÁűcI][W,C*ŤLśŐ›°!"I°o gĽJHĂr0…shĚpĹ:Á禲Ęfă+VŁü<_3çć!‚Ř5ěRXNL=É0|'ĺ¨ ‰EŁł[b€UČ?ÁFäó*ËbĽŚiŰCč~uű!yî;Đé ÂPű[$sPű•m0ş–„EŞÔĚ)ëß]Š»x‡Łň(ŻŇ(&â>ůxÍqÓYI÷Ł?‹Vâv$Źí~=„< ›1·“* őĐ1nŹ+b%đy·Qnôkiń'ËźşŘđ Ëěmß@ÎťăĄ©Š‹Ą0đÝ•—JŚa5&1p©›¨öĺú ‘v˝F±Ýqz7•qöEiěíI0Ämąo/ ző A­–AhQň/ ¨˘ž&¨p¨ž/ŞIe`EúŮűŃ’?UHĆĺB>nńdp»Ó{A'.†lU©W %ÄÝÓíD äz‹¬YŮžřIކśu•'Ęčudg$‚ 5XÜať“„ßGżĘ© kŠŘŔßł+1ŕMČy/µ5µň×Äb7aÔÂƆ'Ä" EÎĐ×»eŻ/Ž.ŁkŞĘž4 ú;ŮŤWź2^ űÜv‚ĘŠąiçnŻÄVöĚ3+»OČDřĘXĘ´@­âĚ‚V+˘tWâ|śŹu 0Ö?F;2EĚéô;…Ş‚ádé™Ň¶ěp©ŇĘĎřÔ«ă1B*ŰÉśŁs®:y; T„I‘TJ˛ĘuSáó ŞĄEZžÝçĐ +”4®žĹR cŮSM—ęĺäSÁű3­'í“K{‰×’mS.â–y‰éáĹ˝{Ř©]t¶×č˙<ˇN3«ir¶m-őhŇ5˘Ţ?$ţz {ą*Wĺ5ş]ę‰'‚đŕĘî×Ń˝·\ďáE ĽŰĚ`đ'‹Rx5±őä!Łä«m™¬±B$ŔN_“čŐŐK´5ęâđX3†Ť $š[Dž+W52ÓLzZ>V)hŐéš&Ńž©|ńNH*Z‰ŹR˛šµ+‹C19OR»čˇŰ ‘+Ä;ňDĎÝ<_©=V~1¨%) ş#KđGŇž†îr5ź ҬJ°%¦ńw!“©oŢô!5Ľşoý5(¤PŞnşxçŁ)%¬ á‰kŘHŕ„Ů’++Ópă=Şoq~ÄŚűâ!D$đ9Gsq- <ÜIŘëŽ+/#_9š"x/Tůtp”±HâL‘ěFAĄ¨±EµŽ #č’¸trSXűITPČ×>Łe&Ď{đxq^3+í4ôk(UÝ"ţĚĹ~©,c!ő ô}SP›±¶„ „”;śřů{Îv5ŔBňL‚vŹMиěô÷±Ő ).io‘űę9ŹŰ´Z‘K&fKTŻíť¨á,f%LĄ˝Čîä´/Ň@cpť±šÂ!RźŢć8®Ő YtKÝ١˙ÝĄb˘-ŢA9™ŘGÚĐŻđ‚áH,PŐýÁkIçwT'ŰlEÚź…`´T„•ëőX͉• LH -őBĽÇ 1»K{{`ú[ x:UŚđËůÔ‘»Î‰Ü¶f÷qüXłďÚ˙4–W‘1µź±ä`ŘÖf$#¦eÖ‡r^ŕN˝ćÉŇ…z€ŻĄY +Du…ň™yI’Ž®ýóEă“je{p`rµ-8`öĄÄUçpí)<¤Ř4ä`wĐŇ_™±ö˘— Q©.3kBăCęyŮ%Q¬„q‚@403]Ä*#·”\Ž^ą–®Re?Ó±›«íűçâ†_ĄQvdrľaf®ĺňËq„K¶˘vk2ĺf\Kµ~„x÷3…* +Ż4űŮôŔW‰U7Xt4ă_TIŹWĚ“Au ČĹG¸ąČđéńĽĚ¸(JfdąÍŹ‚p§€j€;ŽěŹÄ;“ę0E8ęB©•Wnź ŚŢ›"u—˙&~Ď5îe”\€‡ŢJNô8+•ßŔ^#ůŔŢyvĄrŢƉĚ«ĐŰI¬ŻÍ¨yĹuĘBŹBź×Ö¸÷śi¨;Ťµ2=W2PsđGä8`1-wřč>`%ŠCy73×.ô 3†1Í,x–ą,Š<1>‘Swš%úŰ=›ü[| ž Q÷úZ#Ó9â2R]ĆYDô»yI~¶ZŃö‘őýCőxö3EdćŐ4IÜsT°]G”´ "ơ˝đ›ŔČ“ä&Ä\ÇBŠ/D˝ Nű`ć˘wćöůlŢgq±éäÁ×M ŚŚś\ކ=‰ ţ„‡Č´ę›Ăá5úvx&ç’1U¦F‡>>˝ýıł†áĂÔ}vZĽÎ92ŢÚÇ“ÝŮ*ńäňlÚb×öšž…ČueŞŚE‚(ađš +NCJî7 Źý z©÷ R{Ç`‹kI(=nóIé<¨ä©ČÁ3ú¸©)ĹÖxÍ­‰=ť1{ÔP +±ÁŰcx롹`3×ftëHě džĹâ•[$®¤Ţ@çt߯ZĚÍTq*…ÝëﺇdîLĄ}AGX“¶ú,«!Č%ń!čjçÔ˝ťů›ź c ’¸źÁL±Śý+wF›cđ¶dD­‡OÖnŇHHęfĘ]xŽ-Ő’™®/hŮÓÚđbG _ź*V›’ď&ą÷ëŕ~€¨”,0 ő@ĽyÎe%Ř›‹Đ¤i8碳#¶í=’ĄÄ¤ńmÔH¶ ˙qZžjĘ źlqYȡ`µĆµ]ÁZeqaK°őaÓĎʼno\CćS߼ç?č]5˘ý|SR`G9Ň(ýUë.`ęŤUH‹ë’ż‘ >eFŤ/)÷]Ü9Çi±74˘ůęŞ~SGÎÔ‡J›ŃMB_SG⇠öó3ŽTűDpíŢť3…Kľ{čóXozo%ľVĂ®bŕ0Ć<<‘¶C¤­ä;檹ۣ-5/â tGB<§ ă5uť­¤$˘)*Qx:#ô"`˘őLcxÎcŢšś*jÎk[¶”ťF9—B®Gz!%flFęcŠQž;Pž "ľŻ0ĚÇ.Č»[€“ĹĄŠ\(O›‚šť0ďč®{Ev)])3Ä©fëNEäĺEjIż›ŁąĄ¸a)ă é-ÇÂ}h´ĘąßÍ}`˛ âíĺšśňĆĄ)ůRą”Ąß3kŠ[â +mS-*2xĂĽY‚ĺĄZ28ámťG+‡rE$T/NűŐ 1\Jž0Cč]¦äϧŠ(¶-sŠ?ŇĘ€HmĎ3ŘŹč€CńZ&ż±ŠČç†gÚ׉?z¨ť/‹˘_p·č3-[k-şńʧ0¨PŹj’ţ2qLŔťČ>h·dě4ą.5ÎčľÄ ŐuéŘâQË˙CD©?‰lŕ`ĺÖ™˘äŃ´VPȤĂĚ FruO}˝ž˙ĐŕuVő÷'ëźľI©xń¦a|Ô3Ą˘Ý7ŐZ¦˝ŠňĂČjč ď×ô‘§caô:ŤűçÉĄo˛­'Ĺ ¦Ôąµ­ŢGîÖ©ö©úÚz{Ůńź¨ÚzQŞŞľ>[S{»6Ô°R«{Ó×lt–dŮ™$ž‹¶X´WŰ_3ŕŠË±;őÚňÖ˘aźŞXź=ÖŕĹ|xSÉŰâ›Ţ¤é#o-CekĎdd´ňŕ°cš—´äţZĚ• ’ąH…hNmµěđŔ”5±•¶ŐšŔňLĹF ^S~kgp÷(B,›1·V÷‘0î©<Ö×é¶’)䵂°EuVlÎńŕČ ž$ůTĺŻ é›Ń íç:©‘4Ş«eL ÄrSq,ů(÷Ëç"\ËâÜŽŻĎŤk˘BŔ8Úóř3×c·/ŮżÉÁ墡_pŰSOßnĄ ôaÖĚÝ˙–‘#‹‹ăâ÷óĺ5:÷Ł4ÎŘd řŃÖĆ{ŰÉ}°cKůpĎŕl]ěcŹőgřě<žpÝGYŔ´/ECH|pć»ę±ůWł&9˙äĹD°™ÓZŚciC†č=?—Żţiŕul˛á¶ČüâSţŤWŕlę—ď9˛©îÎźç68…xĎ9¦¦á{2;•ĐŞ»Ĺ*Ěu:psEôěĘ1…|L.m;\uńűĂíĽđr)}QěűË#ů„8©ë9i“Ű4ÂÇőíZ'·¤ć~\'žŔ«q üěë ĄôɨZZ¦ÂĄ€7cs=-…HHҲ®¬ÚŇÜŔë×Ď’6G{Â3u b=§YşĎReG>D¨éCr˛S¤X‰wzϧ2—vG˝ˇ&Śą«i-*"çúľ_ŚŠ˙P‚BĐyĐ,)QTTd 2$ćUČ-’Ű>Oş&ę ËW DĘ@ŘvŻN,ć~—Ŕ•;^Xˇĺ‘/éó8ôTë©TF×±>uŃ"Ž^î€ÓFĄöŽ’µ>—dk’ůÇ”ÁlâÝ<=# šČK°+}Éü(š23;‡úµnęz{–Óřâýz_j…?öZ;lbÍťŰđę}"[vŚ€¬‘ż‰ż…Hâ4pü–ü4[­$`8Ép3„8Ń”»yĹéŹä: 5|ľ‚˛‚Ră‹aŰjŹv"źßý¤:<qF™\ľéŞ…›7ŞaČČ5oIŢo4íäÎĆ@0’kxŕ1Ȳmů'Ż)-9n-~·Tö©ÍśT"ş‡s°›'®1$${}ďşašełW‰ąĘĹ˝;‰af Bä +śźh|8|ł>5¨N×u˙3‰ľb}ęćÔAő¶ś»š Ąą’kJűdÜá%¤ć´[—‚é†;ŘŚ%˘š{űTv–‡¨­jŰ“ ÍĎoňŠBi™5 ;Áłoç&ҨźÔŕ$hă˛Än‚'µ |‹d"/ä@M5wčב<9@V‚qî +S›'P¬1TÂť–ź˝şoB+k-ŘôńHóç'ĆýŞ˘ ”pCÄ–Ľ â‡ÖŠŽQ¤ëcÎ>stream +‡™őĘ);ĽćrĆ—<¶ĄćŐW|łż—±­~ńň‚ć×i€H¶’ăŠöF¦SOÂď±|%®ý ľĚ"­VmyJ1T’yÜ9ăłÎí“ß4óD7¬@úLnĹd¸!!"éął?U§)oy˝´O!çGč§Şpŕ5„ťöôÝE’—’k ^{"ÇâáAFĺëČÚ +BL9kÁC0ňq±ő{äÓD‡ôóĘ:L Ż1YüxŐ ÖVK+ŹsĽäoĽĂŃŁúūΕĎN™ť93S¤őÉw‘őnU KëclöŞź7 +(oŐŚę°&Â]d¤ <Á´EřĐAäbʡ?f#ﺉ׏áçžËč]i},Ŕ†îśµTŇPeôŮ1’‰·+ĂÜÓ™\W"zuž'ş ÷g"újďZüŐM„/Ťwú†ń ň`ňS3+ţŢ9ŻŤ Ńľ+„f!JĄ-%YA‡˛‹Ů™ 9xŃ,DL$†‘ĘBG=m‹056Dj'ÄaÔŽÎţýŢ)dl¬uĽ¨c]HŰ lyKoäÍcňµŻ)®"yťüb2TŐů=g°‰z¨/<Ę~$¸Ŕ+&⋦ â„ŘĽŠšÄęxŽ\$ś„î÷j¦“}ÄĆ~'6 "¸^‹¶6 Rc‡fVä$öf×IŰd±µ ŃEđ’sDÝs~ąłDřÇ·LĐNÄ3ť/>ĺ6·ě:*tý:đňî“Oˇń50rÇ"J×:Á:Č@«Cř‡Xy ĆSśd›W+Q?wáBĂĂjqśĂÂ%ę׫Y;° ˛(öqÔ8ʝ׏Δ\ˇd‹ iîHćĚß)ę±§ ǰfZ››~jtÇUD^ĚËăî•5cĆb–jSĚĄ=-wk"đďcçXiˇÜ÷ 1 ß™·®oÔŚš\„ś¸gKLĄJNÜ™¶=1Hł%x_߼)AˇoŤ¤x## Ц·Ćő÷„Žś×`§Űo‡¸ŢâHUßVłÇĂ«–´€ŰW©›IŁM˛'ßuŮňyˇçDâE¤r˝ÇţU{˛ĂŇAmÚĽšˇV›ąL@ęÉŘĎ*Am®ńčBĽľ#čEĺ†9ˇL—hCKc€#BxN”PčÚs9d)ĂÇŢą Ý_ŕ!©Jó‰ąqU¸%ŕ¬) ±\*_o”zťş4;1’–/fÓßi’„=¶gaş’pŹIűÔDĆ<şÎU6”űݱÎĂ^ĺ˙Än" ÍÇo‰vČ$Vî:“ć1Álץ®Ü87wŘn +ŹŔ~MÔĚ&BW×S‘ s¨ĐF”Zkůˇ`dóră°«â\ćÁs¤|Q0ŰA >Óµ$”Źť]š¦€ŇŤNMĚ3¸ vĹžYĆŹą +˝Ź÷Gń#1˘CEë ¨ä(ą­ +·)ĘWťď˘Â>"ČϸŽţç!%`»O” yŮź‡Č'klrBD@„XŞ#ŕ’_4dĄµmÓ=x´ĹŮĆG3ŹüĆÇđŐ/?hlP1q‚yÇľuăO8hVá[呇ÇÎb´Ç‹0-)xćvX×Ý£ЋعDďAKÜbŐŹŽvý"ÜjÔ>?WˇěH‰Ă +Óh>Ř÷ą,·;€Ú,4ľż8ü={n)m©5“Xe‹$Ł˝Ŕ• ç*Ň`‰®`ÂÓZcuîfB:n\?ÚĽˇ¶Ŕď]+«ŽŠÇ?±;Ź&§ă×}ź_ Ĺaq1iŢ6¸­˘eÓť¸9Vc†®„ÔS‘‡)?ě:ăËפÍS‹vž pCŢM’«Č$ÜŞ-¨€v7XŔx§‰ă2IŔŢ•ËŇ +îÓů-Ľxô+ąč·ÄTÎU¶Á¤mkőä›ÝB˘ćŽTţ» 5o8™Őé€6ajŔô·\„Ő©'ă^‰âϲÜBҧëý’šžŇÜöµ$ +ćpoYKl‰«Äżgâg¨YĘĂŇĎ”wôě*ůˇăVbŢ’Ü&rQşv—®°öĹ84ĆÖR¨ő±ß7±Uli{ôMí„MfšŃş˘=ßÇ25¶?2 ÖOł¨‡ě&8á”vZ÷Śţ‚´UŚ,«˘5lýîŽČ9ÖŽżź8HĘU^„žwGä5t§^9áţa^D«ýŰDbŃt‹`QýľNV˘#óe¤ÖLNĂ+"h…ů ´Č÷ÉŻR±q΂¨Ő9uT‹rµ;văşB›ž;óă\ýíĎW´°\Ai•>˙IŚŇT@Ę»ÔéßA`*z”P9;–HĆ×MĚ­(+]´·Š˙jź˙žÍ 3ëNTg’đ%[˛[äy’ź;‡4ů˘R ĘřĽ€®A‹™%eýˇwŰAŮ"”ŘĘx9„!퉣鑢Ćé~ٱ0¶m×)ł¤ŚţąşŻ!ŠŰß…ď>64µŕq{”¶FćhVşhď*Y}*źkľ>‰a*@=„ř9µŃ•Őü3ŞKľV}đck ľT,_äĄx‡ YÄŤ#ËbnOŐČ"gžË' {îLŕoΤnĵÖCĂĎwć źD1ŤsQYCĘŁ†r†OŮ{ľ"çÄÁR2 $pS•*‰ábâşî˛ŮŽd"Ż1BµÎU0D\+g-¶l§#‘g˝5{čř!I´…{Lveéo +ÓŠ>T!Uč vĹ +~ËQUĽ˝÷NÍüXřR•ö¦C‡o‚µÜFXRí‡`Ç›ř˝Óz{Îč‰qUá±p@b« »tŔŠh@Ů˱»Ţ ?Ĺćuä=Ţ4»‚0Ł%Sä®ŮřX _ëŕ€ +‹á|a|L=Éâöř—ţă7S˙ĺ«0őőô¦ +«¶‰©Řőą ´Ę‘şB‰Çęą1»‘ŇŹBĐŚKnOĆ­ľ‡nć<¤0Mwjq÷^á˛2$ë+ÉÖµľKs­–´ĚdČÖzIŘląŰÜ„@UfŇśB\I\ŇŠ’”6ěJ‹ŐbĚF.I«V÷ŃĽĄ--íçy.nEš«ĺ_ĄÎń;LĐdżkßÍ•s0ڱÝpĄé^»Ô<1p Ő^ńÝ„ËNh=ôë ťçĎCí_ů¤ažč˙$MJĹDδZăľRĂpÓ/Žďŕö¤üT‘zćÄë‹jŻ Ěŕj?Qn˘Q.€Î]‚UĆĽ5®RK˝`ň|ż§T äť}ü(A2‘ ¨µZ‘ŘÓt™Vg%č{UŰĺűRb8sMh‹D˝Ęjcr˙íXüÖ©śÜHu—0ü˝ř·NŕLŘeÂÚńoŮ“IqD…=ÉA;­$Mëx{łµDîzŽěc‡$ËĂ»Ă?câ1âä‘h!ř‘u¤]ă\€Ôkĺ ¬Ť(Üż’fEF‰99FmÄú–%{čöđĹ7Ü3ýf*j·ÚmdpłK™=< ŮIňŹňi+ن+‹Č!rŹu‹ŰÁ?¤ß»ĎfZţgćŕúJ|_s2Ü$ŃçüąĐáWi@ýssDM'ÍţH©'Ňŕ=m]%ŁţÂÂKx5xqŮÇöÂęHË ßźŁ˝­Żčńš{4;áÚÍ8—Z/Śaş&ë pA›¨ÉX\ë9"7ÄĐÄŃ`ćłô°ŽŽë8Rj§i‰ÁíŞ»R+y¦Eă%Š›_<+ş•–ţ ËlçŮtóů1Ž5°JŁMš/[\6ÄŰř8–fD}ľ¸MźÜŘŘĘĆÜşáđh<Ź1 @Őä§ŰV턪i¨˝­ (°ÚEAS]µ˝M!6,ĽŽiíŕĽÍuâ§‚ÚçŠNuç®h^'’g?-†“܆<ňo=Äuĺ ¦ë-alADlý›Ôeä•řzJ“ Ă.Us´ă¶%‘ÄM`ysÍÔ…IżóˇĘ$ŃYľßĺ÷}‰9sÎŰŢoˇ˛!vs>Y¬ńť’ëTx§)M3ÓłŃÔ0frť=A=ô=&ŮĆ<|K%TňÝÔÓáăć~ŽídG"롍1¸+>~©LrŘĎđ˛µůÂißn‹B±°†`Q@u]3A±SWĽÖ’ŞAčťIŐö…>mJď54ŢlěsĹňŻůÜÖîvvnĹü®Db´¤Ţ¸…vg9>'š|xč·aÂ/’(UˇJpĽh\÷·ď[Š´íÇć)ČQ«+šďş™¦˘Â~DEîc×e–VOm äb[:4h"ŢCaĺ‡;m©N—$ ×î$GJť”¸×ýuů¨xË/”ŇÇ ÝçżO/ôÖqlE@"¸Hd»ť;pţ|÷c ů‘‹ĽCžl\îł An{wËŕŮép)™řä9Ąyň˝ęá,ňďU–śpµcGTÓˇ*’pžŞň ±%~€1 +ę…5=RÇ×óVÉĹďWłl|%»OÜ–xC)š‰sR÷JűÁU†±˘ÇČ 6$ăiłt!u&›¬)nđ¸ŰpŻ|ďşâ&NÂü/1Ýf°wđC, Ľ¶—­ő8 ËŻzI±8 dRXgRG“ťÇŤAötłŐďĐ›9hĂ]´ěÜ’@U›9ApÚäŽsŻŃ§ˇ€r÷üX0% ěΉɿE3ű¦]ÜŁčŁmľ±¶’X×/!!ń“¨­Ř±k‹ëňďJ¬şDŃŁNů<ÄjňšŁăćč.â&‰dF*,Šů'řń ć·^ú2°Mę›Ç“L4˘öx˙j\+ŮcŠYmbp˛¸Ń;= +ËŘ.,éŻÜC¦P߼댎:NÄR“8Xlϡ$—`\ +RÓ4qsČxí:¸Ö†|Ę•Ń%† —ÄZŻP*NnóPŔpô:¸5Ž1ËWŃX`Ď“%jËlj#léţS"@Đ&x«âĚ*lXî|ĺ"'ĘĘí„–Ň[ŁD˘}ő[RçÜőDfš+ +ž#YéÂđ·ző$W\Dŕqśl¤Ě5_]D8QÚ0S)&í‹\ 8€ŕĘ»âE;Ôx#‡ěR(Sů^Ŕľ¬cʉČÝN8áŁĂµE‚ŃP‘'›×y- ő~@yÎ҆YŞ®âO]ŔĐȬHEx˝1.Ós‰L¨ż» Đ3îôřx2ŘřMĚě¸×AM M•Ŕˇ,±iMę­v€Ö»{™vBn›ČíľŽ÷.ů±WäăR‰Ű#u¤řKiârXQż$ăS…ŕí &Ď7­IFŹt‚V–ô;@öŮ“˙ÔS0„UsÄŔ3Ľ¶Wk+ů] †gúv0´ Ú4ŠĆsBnqŤ¸Ľ‘#§g6ŕC–¦Â0”,ćXŐŢłŁ„yC~ŠÂń.žÄ’ËžŞ•ZJd5ÔÖă­şÇ ‚{Dţđ±Ob!n‘;b*»VŁ…Ž,S¦şš'şGkÇ ďŞO°úm‘ęöűČáW9úr©ŠV,álL.ţR1c–Hľ ŹÇA ‚ŚĂěb¬Ű›ŃÓEWz˙\%ňîTĘ^âX«ę®&IEN“Fˇ•ĽEçĂ+Tdh;K™![ŔťW[ákO}7ŁöBĎÄ\Í3ŹBßŇ)˘Üöâ:’yy=Ď“µ@ ‘Ţב˝JzXbmĘË˙†r¸;§cwY+źŢ +  ßäí.cź&ňčůvęťË=Š÷](SËč:Y˝´-ě;OÖ©w~ů*›EH@|ŐrP7Uü1ťuť1¨rr\,"ň *7|EkÄžµžF§]´µĘ)yę•ĺ|´i Űüo‹lv‹8 +IâyRŁ$Ć׎k1ĄJ…áŚGTýf¸LTřúŕ;'‘™ŐŻßő!$9l:=„â#ę<‡ŕńô1~Úw_ĎńsĹ€»€=fč Š_NĆĂ(ÖląëŽŚ7ż0~Ą”dT¬€‰ę^ĹŁkłÇćÉ@ěű01…ŽŁő„ÚÁlřĺµëhő0uŁŘ·,@q_DŘVľx;‚.ITWĆşßąŽIlTđ +A›b™yd'/ÝÍ“+ÍĂť°NQv ÜĘ›“¦4ޡWËĚAY3˛Ţľńv4ÝgKIŞŚ/ƆŰôťŘ8pDźL_ĘG)ŃH„Ëéď%"I€ »ź[i ›a+ńBšî¦đ¨ŠH¬:‘Ű•5ͨ] +Ă1`Ő©%tÝą."M‚CZôj ‘;€f^‹‘`Uę ÂG«Xřů›Z +xEu0çâÜău\NO–&LäÉ,'#yŃAŞß7Ó4K:vŠCd8V’„H^}tç r–uAů||>˝Łýú)­Ďů9 +ęhŢNVď6#S,ŁgSO sxsÓŘdfŻúu :.ť<#‚@äżo𑥠 5 =›’f0ŇÔŽÖ¦wâ: jUy3ńj?ÝzGešoG§›OÎĉ9‡µö•–v‹Č©ÉJŰ%…f@OR @ô^ŤżtŔ“ hP~k.ř9%JtŮG^ĺ)XÜJĐŰŰ{Ćâ7QĂŻ’*Ěy2h<&ČVî™˙RYKŘvä¦qÚP6"Q€Ń‹JH¨Q{qÍ+4SG&mÜAkŰI·€‰MCPJ!HŰ›r%ťg^)Ć­ůíµ‘Úâ!”ÂMśyŁj&Ţ ÁźH ©Ť”áT ă>Çaá/v ¶ßŽói-וdl¨ŞLu8jŁ8vîz@W2O«ĆJéĺWWG^Ö ¦ĺŠoVÂK"ëm°pÂô0×}%9ő¦ëy­®/·?É7r¦%*şçÚď î(B!OfJI“䋯J7ťĐ1±ň2ú»iŃÎuĺ§´ůłŽ…PTwćC…`¸†€ÍőŔČGF·Á˝IćÂá°ínôŢ<ÂÄ;¨‘Łś×µÄU·÷6ŇÍńP©"E ‘jéÇÇŞĂ đNŕsŚ˝C€˘žŠ%˘Ź­ ÜMR|ď¨1s@č!ş×"/KĽ›oéü-ľCŔ˝l6ĂśS‹)\Ń qQgµ@’NRř9ŠÖ9¨c|óNQĘ­ŰrSÁNz`ő!<ŕń ű;/¶(ů˝Ąj><ř&‰×y,-µ ‹ř°Ě'?´n®ôƱ Ŕ•ëĆ|qÉ +„U˙ˇ®Ç¨”9ŃúĆ+dőÍ+Žaq!W“.˙d2^668r±TßΚ']ľxöSöĂÓ”uÚ +Š]őÉF"™„ĎŤ™§*o¸M´'aD11ýĽˇ›HqnDjJúď :DqňWwăÔ ›»9W!Ăv­txt&ź[]ҤcťWÓyć"»Pé/éYÖó•Ş|>ŃZđŁz3ŁăĹh©^Ő”GęŮîÇNŘ w[+ź„» ™„ĚöźY#ůą "ž˙€Ú‚w冪X‘oňĄŰ®ĺąĆěă—[Őů„eQRtő OWbR{H…ˇőRlŔ®AB˛›°Ú[D«€V‘;˛Ęܦ(f¨TK4ÔȦÂčĂ?'×4D˘—˘˙Çî¤Iđßźéţ5SV±{…™çQz•¨aąN† ľĚ¶B„ŔMÚĄĺńő*‡Ľ6E”ĺŢ0<ź¸R:Čz0Ś +IŇé$§ąOPňxÇĚą€­‰ő‘Fö›®3ĺÔ‚eŘ’<ǢLŘlĽ¶$9dP4í™ÍŢ{Rpv^ăBŤôpsŇŕ ÍM®uTBäg +!I,Ĺ»'şĆM‰ÇCĂK Ń"O}4‡Ë2]Ěb%Žá*›ÝbPĄ%nýŽÁФ`×§ý×x˝\ž=>łkž7ÄČźŽ~ťMMÎEÓšä¨ŃĚlJNerRÁŚ\íŘÇYĘ Ő¬ş¸{Qü|gŮŰWbi{’»&q4{}‚Ad$˝Ĺ¶ő}-ÎMđp†j.y‘ĽÖ˘M†˝”€!¬ˇŘOśř° ´â±‰± "âĚł¨“VŹ:Ş‚‚2Ž—–cć;ڶ ·A0ď‘—w×úŮwçŇĘNÄpk:ů˘ŞEť1&ŠM-úŔDĵ8Ą«ĺA„‰$mÓl‘¬G›~łóŰ"GŘĘśľ7I1W'©úĘ?°µ!O™Î°>â:i°”˙ą˛éĂwŠ’t*&‘íÚěâš SÓęźß¬"ë€×Ý5:š—Ë=Aź'·/:i4Ď$BżCËҬFˇ™ +Ŕţ>¶ţQŽd4+x¨TźŠŕ‘vô`]ë$Ń\/Z ř‡'A_˙N( ˙Đú±'‹Gî5gNăL6‘N˛+g®­D3x^O 3ośV鲢®†`ŃÖuâWżÓC] +`ęĹ~ç §ÇňĂs _ŁJA¸E*RęŐÎa<ÄÇfyö@]5ý=f Ńné™p`(ľLšĂƤLŹ®´9÷ť5zµČťł +Ť¨ÔŁžxŻnq~é"«úîMÇôřUxoىľR¦•›HŰ\÷ĂqÝNr‰/¨ň$©°ŘŰ‹.úřłó¬ŽÚ‚n‹?3·‰Čgő«Đü¤ŁJ/ˇÖ@ŞJćüÚ÷—/‘č""ál Ő¸Čtvˇ—ńŃŕ †!ý¬ llÇĐŹ68˝‹µT„Ó>şč°VPwŐŹP :1?&öákŃ®7†äÝ-zEţNle $c䧨|ěŇ™ëÔÄ*‚TâOäqí‘)¨H-ÔVŢ"ťć*D˘´9^ĐľnŐÉâű"ĽÇĄ_A( ‘‡!<<ܡ5'śś_d@ĄŢ-"‰iˇÎ§Ćł›HáőHÚ>Ű€)Z%ŢR aí™Č28Ô§•D$ac÷ ˘IdżéJѬ~ÔŔČ"ráJańé}ŤlÁD¨«gµőJ^‹qÁë¤NZdrr|ÖŻ–·"Şvĺ .°Š­xÂąË7ÍŕMu}lëńȵ)ŘÍç#•ëŢi"Ěx’¤gţ.IÍÁµ gýÝí/.ŃZ^âĐĆX®4j2̬ô©îŁĎlc öň˛Ë)ĚđÂŔ^4P§;9} ߣ$LłŤý =›kÍť–˛Š6inÜ0 DfňÂŇ@^X-= +Ľş5Ip—í˘Uţxňď‰_ĺXĺdć©s×Núα)4xWÔ˘\bý‰+"’RŦ”×»éQCC9ś‡YuW>lě{¦˛0–9ĚvPcç%ÚµŞî|ÎąhMNAu%Ó­ëTŹň—ů˘IŤ*x, ĂźqÇŮ[˛ýěŻč2K­äBÇ ăÎ^‚É•Ęřźů¦™Ůkď%n»…wc¤­מÁt˙ЧĚőz¦ą­ť­o¨}Ń|CX;«pn/˘…—ČiüĚxχśh·;>jh'NÎ +ôËŔődăJž-ąĹŃĆĘ€eGLŁ,"ŹOeîC ®śxZGËĂĽU*’ő±8ŻT‘P‘řŔ˙q|¨Đ`Ż3Ď}¤Ŕ‘đýśf)ńF @„1±(Ńŕłâ¬&ąĽĹ!Śe‰gz•sٵ*ľö¸V°ë)„Tb»F–«mŞxřsëpaJîI–1|Š+1ç]D"† _Á7ő2éä,k‘?‡ÔĂmAÚś÷*HŮgŻ_ľSgµfXpäת͸OY4–ě±p©DsUÍiő,p†=ö ň´<Ľôžł:łUYŢű1„‡pŕN`7‚ů°Łz%»Z–\p§ęĂ(ą§ fĽ2ę–Î/>I_cx^ DÍě?jJÜ K6ŐZ|q^9¤óÜőc# ˝cÜ$†*$OâXxůzëĺV¸y ő‚k|/AB„W6ĺ5%ÂËđóčç|ňLo)I÷ŇZw‡m.ÜJVw6Ě<^ů.†řu‚%ź"XˇKârc‰,¬yxŃÜu.oëŃLÔqŐŰyâłAdr,ô¶±F*ĘÝZ–ŕ0eújÍŹz8ýüÖ[†`vu#äćŠńĐ,uҵ:7ŢŰÔćX˘Âµ˘,†UaG' MZmĆĘ<4éć‘ŇPI1ŽÜ¨R­ôyŐ›mh΂l•”Űȡ5SÉr×.ć7L•ěW‰ůBD ’µ#ĄŇôŐZŕĘÓŇ’ (‡Fybýţ¨‹=7Ą*üTĐ.»RN/†Ţň€ˇ)ĺ ŃŞ‹çČŞ‰¤ĘM{ܦ“Ţ1ńÔűĹŠÍ J‡eúźČÎĽžBôŞ˙˘¨'ÔŃ€Vý?â˛Ü}Řú˙ĽYŰuXš’,Üî}bKęV7ŐâýľHĺŞBČ]ú¸H=‚-pŻ$ˇ‡~„|fuÔu”Á&öÄ>yWPz*Ö,T[üíágMŠ'´‚݆0‘]uj§¨ŢLRj`sďz+¶5`í,LŽüŠÚG?B’ű‹‘!TŞ6ÇÔpďTŁę»E°-Ç´¨şhYs3"L`”ŁBÔßq&ˇ‘YRään!;ü)Ük™ÍË$ +ŹÚâ1i4á#Ó!6”W{nďwŽ!3«o^tdVĂ'â¨ńZřö@!©$K7·luEÜ)őě:L«ŐĚ ĽąGĆ$Őĺ0ĹŇvrîŞRT8Ż Vv¤c:îce$©g•7žs)@Đ…<Ę·×Ţ)„Ż-+â@žőž+Ň3”ŰçÍÔ†(Uű"ŞŢ48“ĺ7x4đÄB[µ…—ŹT‡ËJJŢž\8z8;Q+0‡Ł]*őGźă¦µHHɉëc~1vüô±´®ń\ą&1„‹U1‚?ŢXUĺ‹J(čđŢ-x8ěŔźCŘ?rEˇ7Ô†0ŚTBbł€…ʤ‚6ţ$"’¨§ććÁĎrąä™”*±gěˇ@dć_Íř…×¶”(žOSüîROn-â®×<E ó‡źŚ¬ đr->fË_É»áePH“9˛0)ZŁ5tÜłę§«¦mBVÝś›®ĐµŽzľö“ŘÇDśłÇô0őjĎ5˘r¬"˝Čąq?×zŽJ,W¬(űčm#ÁZţ·ťŃÄ6‚AɲRęB‚|¨YŞűᕊÍBK|ď’{ŮE¦ŠG >émřőńĂdůÝÉZ¦Ń5—ĽĚŽÜ\ +—$ŢÉŕ0“łůhžójŃ"LĎ`DTwîâŻr[oPŔ/źˇ>Jŕ>z`?tó°Ąşy9OĽó}Ľđ«4 +Ô6¶+Š(ç:ě?â űé˝w6SŃržhŰ)^q6‡e6BůćÓ2äĘËÚ»ÖŮĽ˘‰ŻŠ†×ťő3ě«_•™â ®ý±dÓ @[<ęK˛tC””›ő>¶¸ľń śGýęMŕQMV*Ľ!$í“¶Ľlj\IŠľąyvéQ%] Ľ‰×s.Ż=Ś©„7S Ę5śp§ńfk>Óoy0íV ëµ÷˘¤ćV_Ăt ę˙ŻD`¨řĎÁJAÁČÁ \•Ař 6ŽíĘŠq—U˝gw\[Ft"â„Öčě•oŮb}Ň’řŘťŮ"rěOďR0ŤĚ/–Q”&7U'Ő‡‹ŽBÝýśI r$ĽäxÔÜ˙ôĽ†áŁË:‡ÚłXĘtĆŰĽ×:Îz(n ¦ć3˙}Ń„D>î ó Ł‚áčaŢ-ôJěo‹Yý˘Ś/G ®~1˝XÁÚ0ɸRŕy†TÎDE)ܲhÓC“Ů™vé;ečýh$‰2ç'×ďŮ6=o'ffíZ9–o0hTi0ŐÚ˱čQ«_EÄßĎI1 )Ú†”Ä;ͰţÁ @i.Zwł;öĹ?ÓaÜJyŐ‰uĹ8˛ Uă)•&ˇT&FeůŐrA©]ţÇyŞ&*%éH„\"Tăt×ńjmń8ôřyŹëa]7çáŐDαÂ8gAŻ&§AMßXO„â^ɡiĎĆîă:Łz™™#Ä`_Ę(ü:š@÷­c©c_D ±Qb +MEć öOMŕ]0®*9n-‚ddwô)÷+}2ü:‘’c˛"׸“\‹©Nᣚ‡–¨Ţv,™Ú &ŤńM„RŐv^™Ł§B.*Ő@mÁ„¶Ĺh‚ó§]rf"ľËě:ŰÇ|!@ŠIŐ˝Ô•4°ţC„f +'uĐřŕ~ʞ-Ü\PĆÖ9Ž€Ç<-g4°ě1–$˛I ×Í#řYs»)Ň‚ŮÍÄZôŕ" –Ď[˛a›2R"®Ú*Ii€Q¤2żňŽjr´Á•1©ś¶ľÖ˛r…dľ5 ź¨Ć› +IAŐ*ŹWQŕrv‡Řw|—ĽÔAÝ ó/·Ě ę +‡ä§Ăj‹ĺ^öż©É<ŁMg¸F˘cÁź‹Î˝0üĹv¦úvůW Ő?;ü:—:dD۫ɢ o1rvW,ĆkŐ÷óŽÄ0Ö|ŤXSGЉO˙7©ÄŇ­o‰giÜ5×X„vŹbsήŘtKEîźDÎŘPňýWüPĂ^ĂxD•ścV±'oK9ä€gü ŕĺž¶€C3nV6Ą‡:ąB0©áďCś[GWJ4¦]ćüçë“T‰űÁ‹>ýťáĄUÁ Fžw?ĘË={Q‘"AÇzőÚĐc'dŁR2-ÎÝýF D ɲ ŁČ«e‰ ;2ĹáAMHńö€'/TľQň»’‘–ÜW$Ůşő“¨$”Ľ¤5ÚR-Ďíďç$˝Ą>šE+¸a¦7ĽFĆXÜ"ĽÓ _KśFEań‰€p8žsvIQvIÓQΖŰe"ń}+ýî,%îzˇ)C÷*ĽeNů§7y.ÚV0‘‹KKP+QIO3RśD[M&xŹď˛tZ)ŕ°S3Č{ĹŮZÎČ„G[ŻcÍXĽ>ąĆ +óöžĹşHŕ›nWĂ,9ąTťŕe˙Ć>Ž­"óŃ‚lň‚ĚčP—<¸f÷™¤ó´ýE|\°˙I)Ŕ2ň~}RTEzI|góĹ„?[ŔłCĐ8ÔUOm•ęD†cfň™ Ţź•]dżÔwŃĂŻ*f)ÁKAß<¬Äq˘ž¤TÍĺq4IřÄ­¶bÖn˙m'' dˇ}*ĘŐă¬mk,/—б­°b-]Ő–±Lħ塳AQËÖčŇôt–ŰŰŤ+X%ěC’‘AäŔIŤ$< ¨ +áŚFý‡ßázźë€JN&.Ü·Řöëµ~D 6E™¤ç±ź_´4“đĐŰ!94•sDzŰ |<•’&ď ąý:xu0‘#l 0É3řSšN  ëţÜźÓ2Ňŕűę6ťä.WŃÝ®~ÝŁ7C4[„—¶S)ĺň‡r×U} dN¶8»2It’§‰Š2hÝőcŃ4Ş€öđ(Ěř´_”ťiý ݰ®s Z9™Ş_K a$ůÔŚ!6.-ő>®|ŰÚ@é@jFFŹŇkK"Ĺ 3˝aafi±×é÷QW˝pt<¨ü[Äs&)3Të~®ć9µáU[˛Űú7żźÜ +B ŮÖO6~ĺ˙6ěŽ4ű›ÎF6Üü:y´‹„ţ+‘T¶ôĚ4w¦[fű*đ"”Ó˘|MâŇúY-†ÍŚő˘ř˛‘`R4ú{‘JţÚ=pjőËשUĺ%wĽ ž·ţIĺ]+Ś÷{Đö9áJ5j»=u JL´”<^o9ŘUĎIYŠŽ_ťä§Ď ‚Ąnís=Fő8QD vđ„çUDö\Ęur‹<71«Ŕ 9—(C™×ݬ|ĐPdřˇ[x(śŰâŰ–FFXŮŃĚuÇCfG•'*‹˘‹źŚ0 |\đ>Żr–•@!JÓĺ¦Č“덅G»ŠîÎçč€ĺD妨5—ŘNŚa´đ˛EEş$Ň1ůC=ťÔ%•*á ý‡ĺŞy­ö"ÂźT˛Ŕ8ÂĚ-H* sź@ÁąĎť)™•¨şI3Oc8b˝ż’çŚC™âçö3€‰ŚNd$VµćP“ŢőgÝ 4{˘ÜÎCŽ·üÎ<Ű—űËÇ>h3®U8Ŕ¦|ˇINGڧgĘu‰"b"LT†8>J$b&#ć8’aÂÁË~f®up âJ9ŶՊĘ|qĄV[®CAAďĚ'ü{F|mcÉŔeXmş©íC˙‰mC­yµ8>=ś•V›a¶Ľbž‹YÇŢ‚hŘΡB¦7…ůö;%Č—Ążőt.„ş/…‚Â{ůĽśÜ!;IÎĘ—YĄ‡ýśĂGó`* +Łŕ%[NŕžšŔ@Ą}˝@In ŁŢ'&r·ob†_'TňNp»`ü‡)#ĄŞÔăQŐoýśXćJęú6UGWś ő2ďź"ĺ·Ż„ôÚ>&tM„W@aĆ)ÔTH’˛¬ö>x&/™‘Ĺă™1Hµ$ʶQ>ŞČ#ÄÜ2T*s+’Ľjѵhő°Ć”Đ`M7ř +‚ôŔÜC_ďřAd殝˝S;Ú€ŘO]58+L#[âçh¨ŐcŘŐd GFyQů•vLő¶Eű>Q’z˛ýiň[Ď‘ţÂČ[k™',U’™”ˇ¸WĚäřCjí«Ć·šJ6Żvýuć<ŐTĺş]WÂlyM…ÚÂ_‡÷˝| Š]älřLćoąc7}źĂ`î›ţY8–ł » +ńĽ±.0ĽvŘrŐ7`ösL@Ŕß•‰”ŇĽ÷®Ó~î˙#ÂĚp NĄyľ ©Ę0ŁG‘Q•ˇ,Ę/łń žjVíĄ Ľ-ű’YPňŽŹşPÂďDH„Ô#ŃÇj…ńoT¤ręi"+P!¶HűŘé.†Ć—OŕŔGQţNŢ4TkvÚťŰř°¤ň>7ÁĺYk +ánPäőŢqĎ ŻŁ™őŤsŕ„ęďżçȦz#4ĽˇqťÝí&•ěv˘5¦RĹŰPăĎĐ©S´¶­/q\ϰcjżSŘĎ^bé/ěo"'ŘńůGómˇ†Aýâ}ĺt݉%D€$Ł>~35 ÄĘ…ĺ˝ĐD´ëj­R­ż¸(qĚÜ'.hˇŻ˛Ú Ś¦Őž2§´ěňś®©= ”8ŃKVRNý;ÍVcŤ$©XńÇ2ä =o©Ću 8Ô­~=ůíĚT:uxTĎ?`|/hôPŻ*sůr@ÔhďŰÇĘđĽ“Gr"ű M F{ďÁ·/”S)ń™1)k‘Ź\Dź˝Í#|9ň”•ţ9C +j«TÎŞ—LŁäĄ4¦>XÉŰś›¦Ďń–ŮL™Č xߊÉăŽf€Çl)yđd63‘‘Ŕ86ĂĆŞjhń—1Ú:)‡dđ!â×ĚŕŇ=h/,VÜI¦gúď}ťčdŤpWöÉ%úŰŹ˛{ňDoý4Â8]•öęŐJül÷„C174“ŻČ?%†ŕa­z˶iäϱ“Ř\ęŁ(jŚôÖj?{śFwvŤŮŠÂEź^¬á´‰ŤT·Ź7;ĄÜ *_] 17™4°$ś4şIś}ŤŇźźŽK ROHĺ ]TDc Óýüťóţ"Zřuud?˘gť§Ű"ŤĘĽŮ‡së É?M—B]ĺ V^f€.R¬§F‘8żRiůCm0%ގÄuÇÁ\aĐ#/=ŘŻô;‘‡I[xHÍE„쮯Ťľ"¦ČnůŽřĚ:šŠü ŮOßhxD1ŕz?!klCU®`Ö+ÔńŔXW Kgĺ-ZëIĚăý¦“D†ˇďlN2µ2â©ë$uQTsëkI€Y Vµ•,fś¸¤& Ô¶çPęäŕZ i]G» l™% O˝qŤô®ľrו€ž©‘”Xí€0ZM#™ĺJ{É•OěŕCŽ;"DO,Z&q-†gĐ›NJ†Wz}ŁśÇůżsđíkĹΚę)śßíš‹wd•Ăš +Ľ_Ťž_ĐĂőSýślTđ+3ćÓ’-›6÷ĘEëÄr"Ź’ĎqČr*qÜ‘üę b_žŕ,ÜÂŇb*\®„ăµĐ¬\b´—ŁŃe;6ďP¤“č;ĎŰZ$ČĚ©L7‘ ĽÄŃŰ&N2đŔ<·T‰v4nńX(‚ł©_ľëH¨¦W;,Ě|HZ˘ž|E±ß­žcűY'.V°UÝŃżĐoŕNG”côEŠM 1ÉáŘýŐř3ÍáE*ĽČ`{ŠBĎAO÷€EŠ&wěZ7Íë=XćřdĺĂÓgßTP^|;—7Áł™©Däxg@â'šVôE$BsDő8ăČ 3HS=éXţ8ÁbęmŠŔ`^7Ęű†m©”’˙ź±oI—Ç™ÝJŻŔźHęAŤ˙io Qűź^ ‚:ľvő¬ëŔ©L‘xűJĂąÁt á{ŮŐě‡äĆÝćŹëcĎčćř'¤vXc5‘5iŹ"tm{ –4ÝŤŐ¶Díç-śwŔ\˛~©ŁíŘł(˛ +Âoǰçól¨’hťHĆDj—č[€}\˘úÝ˙e2`iÉYa5!˘ÖT× |,ďÓfă…z.+Ç8©Â…ÓnŮ+\â~ęoMď®ň„Yđ›#íÇ0/Śn\=‹@«’ŹąŐÚĄrü+ $± B;wÚ{”yď†ţ”ŞŞą›Ä‚ÝI9öBQýHÂĄŕK4…ĐŢÝÍéĎŁ;¦e7D˘ĺ5Ś:Ä#5®S÷ -N ”ç´“Śc’ ´Č˛˘´aUQ Xâ«V-jsĬQŃ? ó­1ŤŕŠö0­~«ů˛ +Y{…îdH`küÇŁÖ|Ă}adĹ0Ó3˘Â¸«˛xm‹L˙9ü9±2«D÷~W |•Xéś««ţcQ‡Z=hdMÁ)‘P Hčf±µ/ß=¤ęú®'q9>órÂżj"S‡;BÄ^cµ*–±Ď\tR¶Śh–ď±3Ýí+´’`¶î{˛‹ Šđ`f€Ź·'’8Áü쀹öÂQ°X‘sOĐŮ—î +ś;‚4˛”csÍ˙í0P`H×9®fx'R”Y©Ľ'·2 ËZ2RÓ}o»Rz–C„´zka»#ŢH,µ= ďx¨NÚ—Ë-łÎ¶Mx‰?BąµŁ:9Ç«šý¨é§Nüɱqß» ±Jęj«˝łÔIĺ€ČeQBćblŤd|‘ßčşjŚ,ăÇd1®B°¬ý„N(ăě#žě <)¸a†Í ?ű~Ř=8Ňł +•ť@bĘ8îVńťj{Ę^},—¬jŻÝÝo+âîÍa8);ů7Q ˙Çř‘C‰îđÎłJ·§ qqÝŹ”ÄuÖ: 3÷ŚTý—!Čü@š‰ŚíN7Dř#ewâÍŕŮâ:”ć™n­HóŘ[ěç3h?a›•u0Îě%šV ~+ÍÄń0éOFĄµ* ®đ°µë•ĄŁżř&VyŐEµQ ńŞÍ-ľWҤ‡ţśüµĎ›Š ĺ¶űаzTvÎl#řÄ…Ą¶ß?Ĺśń5ëÂ$šZ<‚h ¤,a­Ŕ›®ÝVĹ»_Ů„Âk, Dö´_Zéîęú‡¨Iáµ bę˙›tqáě€5ߢSŔŢR%¨‰3`™Ă“s-&q:zÖâĹł7îŘ›I8ő 4‘o W3»O˙q€eyeĆčŘ\Ŕ +Źö\ÖŔÔ©lNeŞ”řĂEěĹY@˝#(![šŁJk˛‹¸ o [bô‘ŰËŞ`DŞt«©Rڬ?ËH +gR:,Ă˙ú•×íŔk_`Ag„íxh°°xĄ28ZçR"a>e5ËDë ź˛gáÉť!ďzĹ]ĚI¦ARŰěđ˙ć->čĹČçÎYcdÝÇÓöÁrđÇTeÜEĚŇž[›ţĆqŽâëŞNÇSĎı’qo 8«§ \›Ť/ŕ–RÜŇ%s/\řäŻRh™Ži+óVcK7©ÔEěÎĚŹ©ĹCj5ÇčÁ`Y˙Ť ŘěĂŚďŽ1o÷vtÉúŃ«*ş %b@T`’e„yÄnAÇg& +3PE€äö”uë°fPłŻç¦:Y628.OŢŹűŢ`¦śšcS±˙¸A9ľ=‘E7±GśUR,b/­ŞýŠůł\}#šęż‹ţśSĺJéúNe7 ŞŻr*'tĐď4XTJA†…ą"ÉNęŇQçËî)˛™čdŐXÜÂ*CXh ĺuĎĘ[•+ROHaçłDcĚ^ĘŘf˙)Š÷;ňIő¬tČć¸Ć›ň§ü"%ôî¨^ÍçÔU_č#5Ô]éÝŮŹ }|,eéP@ÚgłúXś™Ëł€m ŽąřuýBĆĆ´ŮĂ®Ćýe(?·ç~_ Ř¸Ą@Ńm…ă"•žjřxÓ0-ÓeŠSď=ÔS–0Ýţť,‰fÉžČ3+¶QTZ‚­4~í@Á=ŞŐŔÚ1dËá_xͤţř˘+“ŇÚdĽĹö©D…¦`#đöË}Ő”Âwű‰r]GÉ•ž‚~‰(Sm®ň^ë%˙-śeâ–Ż˛ I›"â˝2†‡·¨¤śżQȫ̒ĎgťTámÍćšđ·•­:Á[_®Ą„Ź´Ö}µókFcš·4h˙Ś»wŢ+?r #’¨¤snE¨•eÝ9»ßom2f{I°‹ű{ÜÇ˝­‚ÂPnúŰ,ĘF·d-Ýk\ßr‚çu2N + °8 +Ĺ ę­s},.Ź@®ôYś"“}ĺFô|M*Íţ8Ż‚[÷”Ö"3ĺFć©gl•ç=c±TO9AWt<Ż3łČ%’g–زĐ7µđ1„DŢŤőxIKÍŠŚ.ż{}ďťO3™ľřr?Ň9WW/’!$Ϧ"×ÜÉ+q q[˘ńĘ,)ćŮŔq'eŻw¶­-÷·€áω”Î@-7ŕ樖Ră;´ÚÁ,éŕÂ-÷Úˇ˝Ľlq»ę†±ĺĚš4ÍvŐý.ŔA)‰}0ô/©!b/˝p ą‚ŔYŹŇ-\÷5r[ßyHŐĘÔľ1ÔíUţ˘’âęP"Č] +Tľs +ņO*Ę•B}ń.Z„ÔĘÚ–^î}(č«he†”K +ÔëµŮQ~ŚŘěžÓZXźŮHhĄ4€<Ú`÷QtR;‰§ŁZn3«¤wç˛ÚĘź (ĎM—Á`¸Ç±O© |ö0UCßäŽţ’¸Ő­ßů(:a +ŕ˝wDĘI$-“Ň_Ě:y«q…e±»¤ŕ4(ą +nÝĚ®­Áń™>éNPľ ! ,3?ł6(ťyú-XŐz–‡'Šj+P'˘BŤäËŠ`ßłŹ7üĄ#eşU¨ąíń)»Z¦a"ĄţĹMŔ:) g¨í]“â!0…–ď7 âĐČ1ęŐBo•©-o·%Ôy ´VY¬ßPŮGíD!Ď"S„*É2wU7Xś‚„EŠç…ş>ňJ5đČ żčcÎčŻRM«2f©y;;¶"+¬+ôE7sהݩkn^ e×Y÷ĎÁá.Ä4¤´ăŢ‹cŽZ+ăA ¨»ąć¤‹ ™‚ćętv(Ą]Łâ+rµ=żˇčľGěâżÁźD2[R +=ťJ9ą¶ăÚ}쾨XÚE’QŞR˛×aŠ;jÓ­`·Ęt{ß]Âo,ĹVÂi-cěľJż5FC‰YŮU©cľ˘LÝ}ůÎOđ'D™b‡í›ě|<JWĚżnŞű˝Źů;W…$ĹÔ? ŻďÁËpÁ+ĽĎ!~Ě–ě±0Šĺ˙II +d“˛K~bĘ;)Bž,u»îM,Kl©Đ6łŹjąřý™•ůś§ű]{3JĐŤ»xLÁFŘűîNˇŔ_đwKťľ#¤Č¨„ť–ëľGmľeFőŽšüD”© ߡľWr,cl1ĚŹg]˛˛†ąÍQ:vĄřV€hŠş#(˙Ń;lIŐź^4“*» 5Ť·Ä5Íj«ŕ”3_D¤™qßuňá–n˛ç{ěA١î&ŻüMωăé[ą|WĐçKäą +~uC2édKF<ú]vĹxsĂŇălââ3÷z3+Řk¤ŮÖ+ÁÄiÜĎĎńb8Că¶=G +â˛Ű­¨ţJs¶’ &(pŁíjŹ|e+~9DĐďŐc]Ú°pJš÷or)“ 4c»ÎĽŚ-*3Mw ~F¤[BYó>ůÖ_ݏƇK=+â%Di>ÖĘ ?Ü*c>1·ţLŔ˘&”Ô^úěręNó˙×ŔJ¤dB łî´…LÜtĂĄáBa9“@Ěť4¸=篦˙€ś,ŕ¬wL(UyÇoĺë<Ź/¨.–!*%[Gnvn›lÄ-ĹŰv ŞˇSíÜ]“‚K¸´\âăĹÄ» [wĹř^¨Z®ÚîćŁHĺÖ€,…šŚ‹Ąg"vcĆá˘LŽyč,laŚÚdŹÂ-ČsU] ‚6îßĂ™1ŘLŹS¨öDH Ëľ¸ëł8{«Á—ÔîšCXĽ/QcÚ¨ +@nźeI”áš SŻdWxßŇÂČđ4|Á)Qi„kÖ?źŚżÍUf{Źášŕ~»Ô-Ô4aóő-*I™żTő—Há/ }·]÷ BˇLhĐýďś®´áÝĚT‘]đSîůŇ^?Ůĺ1‰/T—0źMţB#Ç%—«Q2ţ•9›`6ďaýhŢżšđÉCę|?,Č€ŇćţäÜfáÜdĐ€5^céÚŤ’ŇćÓ™lňÇŻ>„‡§(˙d°™ú8šjš‰˙N™Clt 0e–6„üVqtÔtÓ5D +@$úx´š'u­műFµOÇĎZ[Ň>Í{§\,>C’|Š;Ô|·Ă2„0ç˙Çł’âż·&éhÝčHU'•¦>xy-njPőç bV»÷wµÝR‡eľÜSŐO?Ř'Ĺg«2ÝýŰhµíQl§Ë¶WĚ]És?ĐjßíŢązě÷o&űU:L–B‰§wviMžÝ[ârčńßEăí•„Äßhon}‡€ŃBik4Łę,vq9A;cąă¶˛îíKŤCg¬ cp˙¸™FÁp3´qkł#25mlŰhŠđf/}}“°=ŠčöţŞŮîüÂv•kLŐ˝FËęqYˇGp¶ hŹ 5sÂÔýX{>ăŢJ íÎpźŁ˙pI ü¤…ęâE×}ßoC…“9Ş˝˛yoLc«¬˘˛óޡwş#uwýA[oáQ UŚ =5DÚÎ5e{ś]¶Ł*6bşÂÚĹk;Qä­Ś±ČµíŢý„ńr…e#5ěŤ2:k‡=´Š`CFî rĎo/ +ŘŃL1Y×ŐV´9×7W.V^űšaţ#~úŢŮyËݏ`u¶ý¨-Ř0łiŞPq„މŃ"C[‚!2ĆŁš^Ľăó›€=ČÖçŠä')âB^G˝%łĘĄÄÜŔňŢ™‘QŘ?Ş#M™…š+MÎLÁů5ˇŢaq_1$ “—Ýł·o–őĐŇ=f]M™ćˇţ Ţů2=ö´éę{Éě3ÝşlMę]-3˘ýÄ.‹|ňa˙|„CG¸ęYf ¤’â 7{ÁatŻŞłâ/mď\Â˙)zßŢs÷ôyŮ>‹(r÷© HîÄßó‘ě턬|Š“Úß3Éś7ŢFł9;kl'WĂäKÄ^úM›Žyĺ7‡Š`Ţ…Ľ’ŮI©g5™÷hî~¸kłDęÁĎt~ľśF|śi­Wj—×’F¶pá‘Ý>dŚ.Űą‹¶×[ď"ú*=(,“ébŚQĄb’Y´Ý•ŤÖF™‹Üşď¦Ë˘ďbD5‘­$ĂÍu}Ú/śyF©´¤ŇCwĄ94ŔŢ‚şČÓRĘď”AÁĂë`±ĹÓ«O'°{&bF3h8‘C ű4Ľ¤łŐúxąÂáRřö9{śëhç)tĚ1bkşÖ2i"ţcé^ŠÜ”Ď*ÝÂ; ©Âţo•#· +öá3úϵEÜFôÖ„´1Śkţv̨GcJHĽ†ä–ţšŻ™ŰSŐŻ”­F€É*P3«•&Ä˙ß’ETÖ©÷ë¬đµYŮ(×Őý +šĎzV6đdŹ'GwüĹ€ěÇÝVgM-cdµ:7v(ÖµO,ß_2?ő¦Z[¸ŠĎyŮťÖöep·g\šnŢ[î[g­ŰźždţŽő`ű>ĂA~¶ÜĎ»<ŇČĸ_çŢ@*•5ť›38Tq8„m·şfI놚]ŕ–¨;‰‹ó¶ 5|ĺţzĽßŠŇ_üţźˇ!sŻ«Ŕ#-˘‚k‰ +óRGŃ'¸ÂőšŚĎČ·üghŰK,†ÔM;,ă×úńt Ľ[ČB> Göâme’f<ű—ý±)Š3â Ďj,Ę„ą mcěW« ˛äަ´(b ¤«šéţůĂąŁ¶”őT†ËětßVgg#Üh v+ŇĚŠ'|;…çGÔĆ‹^ÜQ \“¬ŘI·XÂť"GIi cµ‡lŻ4CDň/@(&n¤1m§ÂĺkÝ![0¨ćŮS˛ŠUT÷ęô +°ĺłň¨i—N‘¸˙™Î ±gz‡ŮČcçźéżX‰€ýö"Ů™“uŰŇť˝J˙Ӡ6â$ OFt­KŃ˙Ƈ]ôoewĽ°ú<¨łĂŢjŠ@˘Oq Ŕ< +ľÜż0čšĆüń%˙Ăś3Íţ’|lťąe Ű9ô+K`3E,ěšĚPś–äřNÄ6d‘Ň—ˇH!´D6’Čć ®żş…î!˘kč.r°›Égĺ~Cś™EúÇÖŚĎŇNĄť¬yI!Âł<Ţgs»…5—"UN.béďý|°ś,Ű&eŻ{gEuW5‡MŔLËÝcĐ6Żź’BĄ;~ř$eh<@őś@iQSŽŤşČ#"÷y%‘(D¶˝çŽJÔvÚˇ%Ő˘tř¤Ołű°ňˇű[ 3łBvj|źęăWŰR ŞüW™¸˘p,ŮďMBAv?Ąˇ†‡Ŕ{~™¶EXśĂ č,ž»Ö˙›ţpÜ~6îĂ *Ř®ÎQűá™ţZ +öä(®_@‹·‹ WŇDˇą>°za×kÍŤÖ+wEL`ŻîŁ%lJČiŞB˛l-=X(,VżôB±y[±2@Ńe)Ä‘'şµ«WĄďBEŁd î¶é˝u(—iíhZľąÜDšŠ·,ńR(MĚń/Ą%J˙ë+Śľ´¦"x 5NSŹŠ÷ńČ FÜs;Ýżs'Tôť%ň·áOYŚ )J %śŽb;ž„4..u—Wä"ô€®ł(Ó†SËŁĘPZK k鄡_±ŻgYšbaÓŞ2dŮ[a?¸jż°‘Ň Ş\®pµťN¬Ë Ńő¶O +űls(¨‡ íǦÚŮ[*m"‡‡náĎA™2ukĘ‹ů·t‚á˘ôF9é`UĽp‚`Ď8J1ß Úë}÷luŻ;YGÖĆ*µKŹŔĎžó¬ýŞG҇ŮyC—a&hž7"VŐĐÂß<ôU彪xî١ÂjÉŤ“őYÜƇ„!bqtvá\ä%hkUC¦9zź9ŁĘĐú˝ ČÍÍ1ŞdŕĐíNŇË +ô/B©G}Hć˙'DGąţ–fm3‡ął<ĽDéÇóÁőťOŮhiľ7s4"âźý<Í…eĺ."ôò„ŕËfč*ň÷ąť~kđĚOč5Vá@€˙WÁcc ěžLą]źńĺ#QčáÔĹ Ţ‘Ď:˛ˇ%“Ů‹gŤ_Z¦Ś\čř´†Ő.ÍcL´€Sdr±ŰUTÖx ę–“C~,<Ű#&[3UŞd ‹fŘRfkVÁĹ:7^ĹŻRĚ]+;#˘›joćłţč!VýĺU˙“Ç:éBcl'ŇĄtégÇJ;K/Ň;Šk«âżö#íäęń)ÚSYEą7ń“GXVŃŠn§~[E}{=iZÂao§";<: ŃýĎ™[Dű:śŠÖ+&¨ŘĂöl +t[=ëTx—•Él+U±«Z8‹ +›&DĆÉ%8Ü3<-F·äY­ł‡ŐN%ľăS$á<1BÖvMOT1‘šÖź5Ţú ÇVŔę·řÓBŞ7€n†˘@BD(p bNĂĽáj‡ËłÚ| /ͤî‹ŕ=ńAą8łŇ<źĐ´Ë˝jŻ)˘´7Çýkźr…Lđ÷ˇzH°ńč"Ť(ő%rČ*âI*˘dČŁ,řJkľ¤žÚ‹¤ +q˝b4|t–[Ď;íú1׬~b:©ť$pţŤĚ…!,ĺ;t ?í¸r}˝ĄúU6żž]ŕÔP 8»ĺ/čŮ;Ą`É<Ůęň×, ô/ňÓ─°·fYž2Ű„Eóë`áć‰˙[Ľč¸ úbȨl)©b×E?í_Ť.š»HEÎmíç~úO?ŤňŔ$öj\őrě'ą[”Ľ!W˘·%´7Ç+íő 6Y»ľ‘ N¨¨ópv'Á±@lxK(Ž˘[•î¤Ŕ°ˇ3­.Ęľ[¸FÝÝ—R'őLlpŕrü°Ń“L’ËěgŁşŢ‹yÜ?rďa˛ńđ|» ţRMP(ćŚŘXbŮJ%Ś˙”ĘôwJ + iW58-§Â-‘=Ąš`Ň":?« â81ŕ—ć/ <ťĄšµŔbŻ$H… +ë m¦ŐÜű=Áź)Xň\D‹šSV łXiźľ’±f˛…őĽŔô°ě§(ĺy×Ů]B+¶ÔŠ”Ě:Ԩ؅]ÉŻQÚ|Ą>öü*ô”-f+Ē廲4Ć7yĄ(Ęa¬ŁäíNç1žLŹ2}”§CĘŽ)—9R:+Ë˙c%ĐŁK“dy 6$N×(.‰¸óÝ5w­ťsGUnXič"·űI ÖE+»° +BqímeÉ,Ců)ŕ„>j1qéN‘ˇ3ýŇ«><Ĺ!l]ęŐ$Ň\FřXÄ'g>ëLwUž§ˇ–ČUC¨Ď˛÷%+Âö˙• ôJ ˝đÓĎ4,]mŕg˙¸`s¨ĂĎLHž0ˇź˝fxď­ÂřÎ<ż˙cTÇ­ 7úcG”öPKرp[ÄH[ř3PÇË”Ýů÷lIÎ×%ÔÚk§hҵä +Ëčđ(`b˝Í‚—»R8Ń™¬î&řŮ×Ú\oKÄ» +ŻGblEń©cNmu5žúٲŢ? 2*żIČŠatŔkŁi¸» ĺxÔ1‰Úűźá$*«úŰ‹.oŇ8K»¤,~^ÔúRSđIß‚Ü&‚&‡śŚë#čż~ţzůĘżŤA1ĘźsĘĂ"„> ‘S´ Ń‹‰rđI¦ĂEK¶Ňŕ¶Y݉lUń*şkÍ"ŕ˝mrZŘę~«^›ĎZ]Ę9q 5Fµ#>hwĆöőŘ!˘|îLűŞA*Ĺgő +Ś)ŢťXkń1Ç{p™×đ=o-wÍ‹7[X{Ďb{®› +L ň`­kxew~ÄíéŤ5yâ€-‘ëR§„•ĺ^ {|VĹţ,¬G“Ş,>čTVŘČ}˙é7†űó`Úľž>Ë2éÚ r)3»ĎÚmńA˝ żČÂŞłäďĘő…Ś®.HŻÎťĽĂ»í)•ý\ű˙M)»o\î=€qnă†xŤş¦y8 !ř뼸›~8ŚöqîuŤ‰Ľ÷Ĺ`R¦Y2ëód   ĹtBŢUÝżq»oQÇT˝5¦čRš×…óu|&É„{ ‘Úý‰w§ÄĄËrµâĘ„ű•ßsç +×ç§3äEŤřmîGícŇ€+ĺ9”ÇnJ,;WYò๬2l÷Üŕ6ÜŤĆŐ bŠUČČâ•Ć‘°¸Ë$صŤÔ…Ţ%8K#se©ž•$ŰË4wTgsî^Ę5vIsBbu•›˛růďTKŘąO»ňŁć›´Š{˝FZnVe_ .ŮÂÝ8wbýüË âOyY¸DąTsŰIzF‡*Ĺz ŐśíVS&Ą<ôűi^ő S{o%NHo×µ3ÍÂ,u}—{eíQ¸ë’'DĚCLŮB‚XµĄtO-RQ5ͤ¤Qµr}(Ě[Ĺ~k$=ľ}pÍ,{s~§ę&šĐá_§Q5É‘QB3C+aľŇІÖĘ€¶kĄĺFmźEĚ4Ú®•ýßĺu2ů.­<Š˝!cEe´r÷z°hĺ’r{…IŘ{•˛Y]MĺÚđą€{±r‘đU©•_čĺUk$»…—röý}‘E¨íi1W,J•ČÁlÄäΕ a(ş4·°W+Ö:´Ö~ŹQ{YSÜ‚®ű®T¶žd! ·ÇµG  >ľjűk‰”EÍ«ó(âÓ±óÜfSpý„ByIÉPSDś’›ů—~çĆÔm"C`R!ńügđpň"¶§+–WÇ©¦RM!đňĆKc™ä©›5ÎŽł˛Lř\đ¦->¤€bâ%w ĺD%8E |9…;ّڀˇłßŢoĎĄźçx¨OŰŘ땬z:¬śřQ´3zů]‚ôríÄ,čňµOF/E꼜ďŽé{+·|ƸŹăĚţB=éŞUćő1vđ¸5ş‚hë–)^ŘsC‡˙Í70˝úË‹ţ§bö.ËŤđ9·uÍé{şÔ ʤĄŚ/dě]ť$沷·Oš8®Yát*Éś:¬·€úqIí Ţ +ýĂYµ[FŮl¸[đxö +üŃmŽÝű>Ş› ży’čueÝă—“ϱ¤‰”éŐĂŞKzýĘ"úGŠýĎúc¦G)‚=”„ł ‘ľ]dUlyçSÎ_Ĺ›×Řţk“Ńř‰%Üłh׼ ŃáŃ)/(Ęž7źŐ”A €“Ä=ţA K(äŔLĐň˛÷yěż'›O| &¶Î_™Ş»eLq•č'ĎĄťîť({C+:Ëg•a Ą˛“ĺ@J=kŰ;śžČNwÁ—Äm¤2^Ýĺ OTł1>5®XĆşů,ë"du©§H2ŻwŚB3nBť‡źv×zÎ2 +›ŚŘ Mç™ 9˝Ňřú:ŰF,ěĹŐI\Gş5ŁŽp´®'¦Ô +±¦éC@Ä4^źm8ĚcÉ€,ŕÝÂťŤŘÍŇ‚‰ű.3gKä©VuďÔŮĎň +w25đ=8u»RWB‰Ą)`c|˝BËló҉á¶@Pµ‰rl˝•‹xČ‚=ÓâL;y ÷á‘CçĺřŽK@\Q")Úű‘ ®ůŤÎś¶…µV®Ż Ą‹7ěd=žőš+¶Ď#Ń»°‰˝’ü ¤čKăsť[× ~¸„'¶<ˇşĐtčÂłč¶îÓpź_€’đřĐÎ:ü)©Â¦iţ–†Űe .ő?Ą˝u’ѶؠěB¨îŇsBşnGűJa×TWvbĽŽÓ-T‰’žXŔ3S(ŐeŽ*‚Ó”ľdËsŐ4oýd« ´W¦v]$»Řt‹çç¨/Ěós,b‰\˛áµŁL§l©˙ő{5»§śNđ\n˙*ÇyŐČZd®ĹĘXöôćűd3šy'k˘ÔËtýcťŃÁ.lÓč°Bľ˘§¬7žB-îZYháC‚ÄSÖJ •Ş?;Qěšó¸ÁJ‚âo©ąV*7viJŰęýŮRa<ýÄŠ|í´÷ŕRž«ż ÔřÄj{[ÎúÖÄUňÜ„\ý Ťs)ĺ™Í‡ú:…Š–Sä•˝Óë— U+ş_Mę˝ř«ů‘s(\CžŐ] LKÄ<Ţ»ÄäN…fázÂ,W´^Űg‡ł±\Ob™Sh7ąÉâ kq=Ľ]{¤.iÓjgEuö÷yŢ©†6µĄ´BQ‡tۧďVq3Ŕ˘Ť' ©˙Â/0ˇúËţ'Ą$A¶ťž"ßrcł|ÂVšÓ“*ĄCn K=¸}R/™ń™gâĐĘÉíŁéĚŠ…ﳊťÎ.ŕ§L ´â"ĎNÄt9r—ĄöQ¨S¦\ŁźőTŁ3źŐÔ±j‰ťź »¦ď¶ÓcT.?VPś­©,ăŘŹÚbĚźryĐŘł8áÓB꟥4ĆĚŐj{quN_Žsčiŕ†×| +öŹt›ĂúŢ-6÷„îŚVÉ€´ +^¬‰>jcę;î‚çł6ĆEźX4 w›j8‹NÝMľ]ç™Ř9€¤Tl«®źĚB5ámR­¨×-˝˘¶˛DěĐŞ%· +q—Ğ͛D”[ʞ_ ŽRkW˙-©WGCÍ·ľ ßů¨…Âdź?ţĐí"¸-{1kHřć‹>đą…»ŻÚY­oŢI—Îbś)0oŞCŕHsDe‡Ź2»yiĘyJ—şn b|Lp|m^Őd|­ÁĄ#™’*ÄŮ?‘/HÔÖ+ěˇę5<µµżë´ Ň試 _ç,ĐMľouŔVŔľOćs™pŢ:ť‡b‘}¤M1Ó58겳ŘLĘ~]ź+ĎEË‘Ďzş: ä,Kgčűh®íŐw¶MĘ»ę^`Ě\±«đßňŠc ©Y)ÔťÎ< +ôé®í Şč÷ďÜýźrˇũȖă+Ô–5ůŔíŐDĹwĆNW9áK…>™Ýź:Kc6ŕeiÜ_ľŇÖĐĽňňÜ·SÚ,Đ·š_łpýşe¬ŃŐMfĺŔúśźŤšdĘ*Ő$őw ¦%ÖAŘAß}?ä[žľµrŃéᄺµ"CMúÎX.@Fký—r®ů_.ۤ»Ă+[fßďwę¶Ż‡ÚkmXą%Ł•'ťlĺžâ‘`Ćlş-ö D›˝m„Ô +8NÓnÄ‘ŕ+S´Â⌇Ăá™Čp®•xD=…‹~mĺNîS•&‹?ĂăÝYÉ€« mk ‘ ř ˇJöO4|9ć̏ʸ=˛ +Ô¸ĎkłGz]VGlîŃ ŞÚŰ4űpŢ{ô¬ Á15V´ľŚŰÎ[˘$ b6ÄN=ÝŠňfŽ™ŠűÚ,>IÚłşK$PL3Ě‹ş"2 d­ă ¤Żţô„§­*…ý«b“Y }˙ýÂ÷­*€&•éQŹáp–WË©sŐăQŽĹO'ş‘’ńt“c-¶ôböŢk5Ď×ŘŹ _;ś¦ 𠼇ҟŔńžĎ¶őŚžó\¨A- JęăfťĺőoµL“řníĹ=F\BČâĄW!Ç·˙ü “Î4ć/ŻYę`:hm®căH­ ŻS·âŃUläVăŚjîZŘż©yöŹâřŔăŁ$ČÓ™c !ɇMMťĘŔ5›“ŻťűHPb‰qîWç!^ŻBIÓ1W»xk ˘F^đeô}¬ő樟uÄ főÚĹL¤î§b·N ÂĆ­Wh4EqÁÔíĎĐÄűP/ĚVnâ~śŹ.wâKo”&!ä¤.`ʬ‘šő¤çýU Óöl€yÎF·^ŘŚDNl!2ŠU`]ťťťUqąů,…Č~„Ś&ľ^Řxoný> ŠŤś2çĘ.á»Ô~™3 ˙o ŢGCąy’uzB9cŞ/‡mڤ‚Ň?…đŻ4Ü˝úząóDN’Pß[©ôVu´°š(`‹˙ě3§ú9€¸„çIş…U9*ţŽ'>čTXŻ6>ŻPWÁüIIŐŤ:VÓtý±iUs”Ář#v˝Łdwrh!H-ů§Ĺ. ź8*łqG­—7Żéź„;›ÇÁBřKôŹ[Ćţ9ü!zćnŻ`ř,Q—‡©y…śá»';›&Ô¶)€%DŐCŕ9k6Çݡݻűަť »µëëm$L­|’*36,Ďl9ÍŠ{ďU0S˘^V¸Ô…(®KwŻwŹYˇ¸|$Š™ß<^)Xňwü±Čď +Eoę5îĆn- +XG-ń…ĘőB¬ŽßrŮ(§e6yĎSÖ´L×Ů+=<ىĹü™©t»űćb;–ŽčO°ĎýG·"wDĎâ™Ĺ8Ę˝'D0ÓńJLtőŃNęí†Üâgp~áä]wk˛aégWCmiĆ–Ŕ[3±O©­0°A•ÎóRîŠ+ Ő®og2ďćĐĹ‘Nmć8™ůáSşÝĐÚ}Ç®ÝYdT% Ă=VŞë±8ś14–Źű ńŤŻä♡V?(’ĽxUôK?Ű˲X4ˇĂ…ë%ŚoĆ~B?±Ě@—áîzÖuŰ÷‘6wřĺ^4©®,Ô…Ü“y2±<ĎąÁݢp×…FC_ů*,%p*ĄÓáµäďĐJĂ*» ŘóAŚ›ă¦W˛kż"ŃĽJQĄ)ĽłvK‹˛bÔCŮ<,4ĄčĚáĽÇ(ę¶őÚě—ë!r_Š×P·){c‡A¨"â,),ŢőR[~öţ…c`JőçWüKąwŤ ŻŐŰłüqŐú}üŞÁÜY†i[¶Ü+° L)A/´ô®J·$2Ů€ť}»ZŃđ°Ťx'ÍŚfT$Oî™ôĆÁmÜnÜ…»ĹfęYLC™ßÚoRhôúóyžŽ ôb®§‹$‘]1—t÷ÖÁż€r,üu3â„&®űŁěĆ0ó{ëńHY¨É:jH˝ü`8ű“łµ'ý!çMJ§5ćNŽ´T,oďý$˝Ę‹R〸ܰxčÄť‰gˇÁ_°ÎÂń$ML€˙|ů ĐĘň¤sĘŘF=Ĺ>fŢ*#„->hĽĘ݇Öěţ.‘.łl.2"cŐł¸ĽžR˛óß’ŇO?¬¶µ˘ "«Ŕ ś±Wßč$ Đ~-‡Ű«±a×·Řţ[–ĎňC&ç°\[`#˛Á/§ëŇ,Ôđ4Çulą±ĎB Ář–5qćQnĂBw'»[y Ó‚§L–€rgî;^ťę{|X śUî8ŹÂŔŹ+ʉ´Ŕđ\ÎxtŰ YřîĄLů·1U¤ĆoU™CőľĹF ţ_: +×$ 0n¸- +š™¬YŘ6vÚ9ȧyă„­ZűËW!džČ&ŤĘKű1ý†¦*1~] +kŻ€ŔŔB$ «`ĽŇŽŢ˛ĺ1“B·‹A~nAčsđź ÖĆîp]őEW®čĎQĂź2*´yNů× bČ:CÁĐšTŃ…™ÖAl¶:+Ý#ďp{?аýzďťMßč1aP,f잪ٟ ř¤ +ąő8Ůeů›… K^ÓzTE™a÷Šűą +‰q‡ZnŕĂž÷<=˨–0`҄Ι(ʵµ˘żw´Ľ¨Ąf¤6@U'w¨~hqi3*»Ő‹yEt$lKęd PĹýnŐŰ>©(ŵ—×îC.¦Ć™şm`dMßN +5~’ ôBšČ¶Ł$ß.儬 ˝ťŹP;,Áňl…&hűjŤă˛0‹Đ(I‰^ĄżsĄÜX ýu“a4”’( KÄĽZ 0ř+ÜŢीńŽQź|Ös×jžűĺ’ ‘2ŚhëŽĂhMŕOŰľćź–HjVĐĹ^ ‘ˇŕö˙í&e–Ş)˝˛}A5l0ÖŃtL=V‰ ŕł6AzćS@`c tp–6ď¨v'ÜÜ nĆ-6ÓyÔ t7ÉmŻŕ Ő‘9YGZ<6ęC8±3»÷#DěAŮ”Jťj„ĹX"űXĺă0şŐxđȦ†WĂŢ ÍȢ>ÂKlB č…SDFľëAUQq;}†5,Ö-ČóŮwħý›O`2ő—W\ł IC‘?lTErdÇëăMđ#Muć)eňé™jŃé-&Đ9«"ĄNN4‚đ>ŮŞŻă_ÄYźŹKpý‘ŔŮP앏ÜăĄ!0¸ß(tĎü9…0:ďęĘiDjĂůđĄpýbҚߨîůëŕŘýŘ +śĆ PíSf}[R¨,GuęΨ­tV…÷d%1R:PŔrG7®U Żç< >%Î6zJÝ9öV÷ł_—r'>Ůó_"` ⍉Ěy|ř l &]Ô˘śxéë—Ŕ”©o¸*h!ň4iw:AbÁ >i[o` [šŻSó®’ D.Á["{wKdĘňt=Ë~řĂ”RRß˙oImTfľDĚÉIÎĘ^4ž¸[ »·ä‹Ž%TŐ7ęE‰Ô°ďäTw‰Tń×YF†đ›„Č)ł«‹ţŚí>KwwŔ‹l™^ŔOŻ]ĹŕJQ eÁĄńµÖ€cظ•ŔŠÓ“2.aň—¤‘”Üô‡;` [UćOY¬s{]±?bÂÚhîĐäYÚýĽ/ŃLśµ†@©Ň9č'mîzvÜťÇKµ'kśŔó~ŠG.z91¦Ő®çlXޱkFFt¸Â ÍÚ­šĚ˘ąDe=U\´3. ˙ĹWaZ÷*š5LhBů.Í'i“ŹŤöą)íż‹ţ”=9ap5>śpĽDá˙§níVI8‘Ą_UfËëĎ eŘĹÚű§„Đl.zA©{ËáĚPYE5Š:6š3‚¤OK -QaŐT±Eď!OŰĘQĽĹ€T¸PEłî$ŇóíO"ŚQOuߪH¤Ű8šP:4çK Vy¨$ +vRyłďš€¸[ĺí¸_)á™m, Ű)Yž› jˇ–Úy€ݔӭšm2#LCü*ôŽ BD‡C-ű±U@Í–oV‡©–ąT›µKáďµ»)˛|tvľE$lö(÷6—=˛˙% +ŰúRG˝^öďCiuJÚE’ÝŃÓ†ŽÇoH"JFzĹľqěÓ6ĐhŚv]‚Ő"-Š)ˇţ3űůŹ´C8şőęZR} @-÷˛GZAc҆×ÇÉĐR¦śVč8sF5łŤ©0ŽNű%Îé<šć’×Ě^ ‰RFt¦MéMso‡=ăm"©ť[ŮÁ¬ÇM‚“*€Š™5Ĺ­ îl«×q88`Wţ}PŃ™:řA7QŃÉ-ŘECŽ"÷ŁŻ'ît$€©µÄď˝”ÄÁĚîŤţÚŽç)·pŁ”żÝK(oŮă…õż &+E?öďÁŘm˙I‡›Ľű"° ÷ífY)Ľš)R4 \»ÉEPîăYI)dĄŹáAŻ—Óť ľđůá‰-&¦ý·o—í9,Ľ0-ˇa}pü*C™¤¦\߆Ěĺ˘Âň#ngĘ/Ú¨Đü¸8ż + ;ß,˙ĚőE8‰Â-I˛äąÓ Ң,¬(˛žAjm&TŘ +Wb=üî-Öď˝°€b‡~ǨÄÖˇ@Áś„®őm„]1ÍѶ0Çţţ0sţöD7HK{ˇ3”ßnÝNíwňAB¶îí‡l'Ä®¨bágÔXüYtˇqW/˘y˝÷F­n×ĺ؆– +ŚĐ»-¨Ŕé~ś"QKñ*´ś“o^—ęÚy:?pgOÓx™ @Y€L·póěЇ›·ŘŠ˙/ü)ťҦ t·gçiü§¤ŽtçcY‡§řLŇ:…v*ŇÉ%źĽÚSčHoČźö4)PúďőušŽ,„p€ŕĘÜq +h­ +E§gT.Ă'Ůs΢–˝AÜĘńšÔüűVŤ´ASś6H™yť×ÔČ!¬kÍ˙ŐPVX¨äV#ľ|}O±Ě ’—¦čŘĚ13Ţú'q#Áú {9=ůę3ËŮ˙,Uq +/˝ŕěMşZĐÚű)V=ę¤2+ů¦`®k§ßî[ĽÝÎ’ňČ0•‹"!‚˙:¶™1/—f»w™‘‹ˇ}Ť”¬Ă˘–>_ťâŔD·tŔ+Ŕ˝ÔĘZMŠę­„ˇĐ‚ö^Zk6|K±_´ą÷*ŢCž=iî,ÖČ:rt%0óéj;·ě±P2nlÉÄ€˝€âşqŘö36MtŔ¸yýŘĆ—HÁ›CÄ—‘gĺ%Š[^¤Cő•Ű)ÔŚpq‡äČ˙«ŘĆť°Ő+ýyśóƲu;˛S“Ţšz§…CV^NuáŰ€Ô,ШĽSě .‘É©ĄPK»Y¦~G5͡ě»55~HÁ•‡zۇ꛺śSçn§ÖËúľ‹ĽBüZŔĐ|×űŞVRÍf‘á%Ň^Ů?ş&QyÓ ‹—tKJ‡ş»ŘÇ-Ëšű/ŢáHĹ=ó#[:@\<2X«–ţI*˙ńzCäâ'l#÷|N­ňâ$~˘„úsÎë¨á+ ¶`˙Rć70đ.Űx Ón şĹňYX[÷ čO±ßHą×5\»–;z‡&^ Ó¸K§‰JĚkŞIň ýľK!°s]YÂČÄçÍžÁú”";Ňj?·úÖçŘ•ŕLd5PŮŃ6~łî–Ő€C +Y1'ß +٧Ľď«4‚l ׫$ŚpĐ,(.Óę)ôľĐ§¸É]Ä"şź|–˝ŽŁ~¤ěřk±:Ł +ˇ8éÇ6łş$Î,‡Çϲ¨ă)ň×z”Ýí^».%üq•E ~÷_f7ýÉąŐ%ŇsZ>˘2kUaN$ź8ŇWľt}Ł&K†&D§ «Qgٰgľî‘†ľc•gárÝ˝źÓC€D&r(„d›!?ĄőÂÝmXĐŠë[@ř-۰ÖÉîbć« Á°†ňžgvoď*1ŕŁ\;u=›„ŹŽ3E"Cé. Y®"ŘG­äF‘čZšYßŇJűëŐ%>÷úý i_µĽ˝Ś¬vÚ—ČĆ=Ýo`›ÄqKr>…äřY [:)Ű_Ídí+nŁ+dľőݧ™|¸W°!ňĘô¤O§R|ż4,#L…:t?oj<¶-˝ż N˘N%ŃěÇNśţďÔsTA¶Á~čWźÔ´ĄŠĚj‰p"ÓčÚÚî/˘ô`ŁräV‘J©ĘŰx=_¬  DrĆf®Oá>°ęŠY +˛Đ5'Ŕă.C~3zwPGßoŚÇ¨I€ĺ檰+5”ŃŹ"z‚ŕkL2‹>ÚÔÇ5łĂ¬x„Wčĺós^ ¨"Š©eÓŚb¨­0 +«—łž„ô¶]˝´řÔíŕ«Ţ"{*‰sŐĺřM<ž:˛V‚›©YCaŮĘőTäc%ľđ€ÓlßööQŢ|DAL6hB)Ą3)řQęD˝¬Îß`·HHH‡r$‘BěÜécCu·éjÔ]Ů‘é~$âxP;oURʢŽp˘zŢľ-D€UlÇÉf7ż¤<Ěbě#kąžłxSaöŞ$Dň1 ±YF68ů¬LţüYs›ËL(ç–6\E_[„şnŰřK!őÚçR`Vk\ß„_µ˙řŞŰDýMÉł<ý<Ćłw" rźě, '<‹®3®ŞůnµÁŃCg0PźÖy'ŞZŘďˇă"Ë4˘LŮżLHްcFŹ“c)攸ěĆTh»Řá—€[ĺ~’řf&űYîˇ0´˙ÂIhJőÇ7])U$Ľ¤dhelĘDÂć4am€š;3;B¶ç7IUíéÖk|IÖťš<8k…÷8÷©šD*Ź?g sßő5ܲâŮÄŘá}î·ŰO±ăÍ߬›Ö1\=±M¤bęX!:sťŐ¦ŽťŘYM˙ĽĄĘOĐ…ůhŰş­o´H¶că* +dĽsĘücGďýI8ÚŚ7XżŽ]öę+Ë5íJűÔ1u^/"Ňů´vLtľ\Đ›,¤Ó±Ź|fZÎňĂ[}Rš‡–MŔ«Ő XśIs‘7 Cr*Ždá Ôć2pA·éQ÷ˇX˛)RŃyŠdˇy‹›dˇ+ĘÔs1§jşiŤŻ-ŘŐ˝\™ö÷<ű·ŐcVŹ R&r× +5oęiľőŘ>kŕĺ:B¤ç@^Ü3‹Ź|ĎëŰDÚIz4>k˛WĽn´‚ŇČ%EüŽ®~?ˇµ-´áóöóřâ`^SH€ˇ§–®Ü{ ;ŠŃ~Y]qĎ•%S\f;Ďł˝{•iXç’9Ě÷23Q÷lpňĐҡŁ$ŘŮçĆ›”ů®‚Ýq!Ĺ„ paŐŤ˛2ifšö´@AÔm·đg2§\¤îěe*«OnČë=錷ú<¨wČljí´>Äľ[i-çć €q[D?˙.zřs~ew›Řť0Š7“¨–ŤýU؉ɽżŇK¦őPÜCşśy1_2€AsO©îS-‹ívY€ë9™R¤ZĘ|!4·ËYř‡ÂÚ!|řL!2°d™î°ý%v…•5´Žµ­ęµ§ŢEśnzR5óíÍ™\e©ÚQ8ěáv aü»ćB 0{ćŕÔĂCPÖĽç­DnĐĂDąŽÂLWM6„"vňŢ»Ş6‰ě©‰ŁqĹŃa+KZSďuąDô E´·ÇńĚë±*D=<ď~ËÍFŁŞlkćoŐćAÝiŁB ÓôEšMPa}ĐÔňG|lófz'HYďôLĐCAX†2›ő>d6*BË‚UźY­»¶„ą—ýĺ1Ł©Ř2×›˛ńJů‰ÁĺĐZ¨…O¤úĘnŃAż·uŔçŻr¤ń)CÉË_žŤł)=íÓb¨zŚ‹€Eţ> +W±ň)ĄĽÔYä6´§¬fŔOÚWÎv_fě±-Úi,«_učpsŃŰŁĚ˝§†˘ťÂNhon‰Y`Ű "„†‘B$¸€x2ďtî‡nĚg0{÷ܦü›fĐi~„ů—ăťÁ l˛˝ÓŕÜĘĐéaˇlü ŹŔdę/Żą–mÍćqko(é+…9Ńż=„R˘¸ôq9»Ł>…™„šUüŔ#Â9ŮYĚĽNš’xÇSDâVĺt}—G祓łWë^­'TŤ†4ax‹„¦|KŃk^ÎΤźÝžÔ,ĎŠ¤Ŕ­®Ř«h\ŚĘvAi—4ě¨Lë@‚ ŠŤXlŮł©›@éYu/Ě˙ÎXÄ™ŽnFG:Ę“çgH Ý'a¬čhČâhfS-‘ÍšĆmß"oó0–ůă"RRǤ€íFÂ%)3D,1!3[¨Mć¬n˝Ŕś ł)Kď`9NÁAC2eżŁ¶/»ŹëőŞ5DH yěŇd?‡ĹZâüşĚɡŕĘĄú!đxţĄ?}oúÔt˝żť +bë+Ň ö“0Ý+XJFmöě§.ĆZ÷ËęĹúvÎKtdi÷» çĆŻŮ}䍯«ő(Đ7îi;8Űś"1(äĆţŘXš_Ä«"ÖA(SWż#i$+Ůl,e›€]}FăqćVő‰ok4ţĽ§1¤b*.RhŤ˘łyV;‡n•˘pW'ËzIýŹăµ]»ČiĹ•D„'1)6Łv2{_©es•—9Řn*{R\ .Ňߍ«Ň§íĆdłŽá“˘g`ń)Ql׼–®ĐőáÇÍ˙*ś†×E :ă"#R!ëßb†?gQ›6ľoů¸ÁŠ|Š©ú‚XťÚČ•/WXíxYă,wĽß4 ‰ĎH¸3××m†ßę«Ŕť\YíëfK®4Q_*¬@ŚSË«?÷.Ť)ŃĂíá·TQĐ®:¶.×3U±;D@yř|Ü“ZŽšű45šŁíĘkçú0$ ·&ËPĆ_ +mNď)¦oQF!c]U(†y©ŤÜ(\ɬěҦ6ŞÓčH[ŃN>ÖęüŇŮ"¦}“Î{S•PUíŁÍĐv­>~Ž/c0ôaÖĺŪ⳯ +‰Ĺ÷5Ĺ5ĂYž8Ő˛ILŇ\şř\¨–ǤR4Áň©J°ĺ0“Y? Íl2ł +ŵkúł^c÷íń… a#€¬y–¨ä[9“ŞCA×Üxv‚yH@–cÎC^‚ĎžafđE¨ţ~öűfŞ»4s?‡©ýw˛{»çř4dçη…ż<Č˙řmĹU‚BS¸?â ëúü NÄ9)‹|÷ĹŞÜŕi?w}—1+ýě+ƧŲŃ1üiqźŔă~Vfŕ×Ă©MćR T}Ü`Ί93—ĘŕSđŐS)5í\ćń˘]‘LJň5źú4Ą6(üţ¨íü}‚&Qxą•BY6T/Ęm¨…RŐ  `żrE–§s}Üď“ÉÉZ˛ŢoÓ˙ęźv¸“Ωë©´ćrŕć;!ěën×ű'Ŕ/5W‹=ĹR­ł-â´6ßnĄN˛†·{äź$čúög{µçľ;ďĺŐ;‘Ć!r“¦/o˙ýt‚ö[đ^4±D»€°Í•ýę[Ţý([ÇědVÉ«ˇZďôń‚ĎwďŢî ¤ćĂaÝôI Ű„ÄúáDäU/»[ivOŞ.eýăň«2ˇŠKąĹö.‘WHcĂ‹ÖÔÉzÔ~†H’ň–,)˛ĄČ6R†řëY­Č!DĚőrš©;tt˙Î…C*cˇRătiAqeÖżN2ĆuÖle,ż\Wţ"Ö뽚ý ,‹©Î‰ +ýwú‰ľ-QÖňŮĘ7ćWăÉH€Í.‹žxËŃâçgôÔß‘d˛XĄHź±ëß1Ž:ŹWŐîüúíŰ µî Ť5Á3ë^ý’×gßâN€Hüř˝ĺ.ăşÉy¨LpcYüxM˙/ÖŞŤë}0GŐV®ąoSŞńT‡ołß5Ő\úŔ-%7‰ŔÂŐ¤ÖDf@üQhre°ŞaáÓłQë9¦$C6÷oÍwä§ŘkŠ~Ŕ +•íĽnĄ‘đ—Z=ÜŤĆĄőK[¶@VbA>PVÔéUŁĚWRäĎ‘ÁźS&Öž—Ţ?­ŐB©¬Éěuí´¸ĆšwRŞPź[#r„›™ë=¶¤łZb*«Ĺ8ęŁvZ°C0ÖPµ)łÝa÷ź­-7źĆRŘďL߉07Öř–·°Ř\ŇĹ>xűÔ Tź"#űýŮw‘ř¬ÉE(ÚźY,}Śâąô±ŕŔh…ě]K9ĺ¸ÁY˙† +y^G!9{öş•ÓˇŽDóĐËî—2»:2óŕîśu|$ŔvĄmۨH]98»JIZŘo€qÁlN9yŃDZ)€©ĐPş×ǫՄˇ‡]ďw&kź%w­ţÍLŻĺżäŔ”QMf„>^šC±I UúQP„x'ą˝d•»p~C*†¶°H˛I[íĺľźF=tŁ…ŤőšÇŔš5ď[m<–L€Ŕ(—bŽsne÷i/|6»z.i-C~—‰ć=Ĺíç7ťĚšš2užňň^ăŘw]ť'‰ÔÍ&‚]“šÁÍ´Ş®°{Ę3¨5G®IŔĐ˝ś•b¬Ŕ,—!°“úöZOéŮąŰîUŁ•ą^ˇžęŢüę[Ú +P/Um&«a$VçC^D,“r¤ďzß.ÁŽ(SaźÍ°fŠ[ăjřźÜĂÖ…úÓ›fJŇŻ0—?foe=Ý_¤]—K`0}f^{Y¨§ĐĆét®LäÁ!ĎÂËůO^Ö—|v ­źB9ác\*Ây)ăű®[ł”ń,‘Ü?Éx¶É±†Č6ŚÓ0\ěň¬ś;‰ąoVŠâ—oˇ<€T2‰ŽC˛JŃA— TŠ-j– ľ†ŮŐ®ëÂ'·_$\ÂĄ #X +¨»*(zşŽ˝as˙Ş‘űëý|b¤Ł·‰Lr;¨ňIÓR(…]ćŢp‡pÔÄ»€K8DěF‘…šŁő×ELB“ú ¶ß;łúśęÜŠJŔ¬&<ˇ<ŮĂ+[:R¨¦ÓÜgŠ’}|›3‘Oi ,čŮqĹ/Ż•‡1Fä#Ľ?Ą‚â~X—AŮ,Ţc¬B22Ɖ5Ó´-ř‚1JŘËzń ËŞÄ ÔtŹ(ÂŞëGŞ­ük Çç˙É€íR‚PŐ±ÖĚşx~Ű‹tf¦”Sá÷óĺlÖ#člŁęiÖŞą[~+ĺ´Ďť·úW#BQĚ·榧ˇ÷{´˝$ÜH0|–§*a÷ăĚÇ5˝ć6ÖÔ+×Sýe%Âcz7n2Áß}µC1b°˝«3ĎHxűY;ëág—f +fź®ü.b±nů[‚§ňŃŤŇqŃUĂ˙0üąŹ{YK/˝…ÜÇčýg·ÇΔnŰ ‡eÝűź}©u ŞwUŹT… ȵő{Y°§Ů9ŻU˝î¶†hÔn*Ä+kŮżß«5‘ë*(Ď:ôhÉî‘MÉľö_NV§ŕÔnoÔF“Çľ,)ŰLŰ&É·°rń.>Ȕڋ!a ®DU^ůćÚ_<®Fýé]×fÔ(Ż%ô›Ő¨S‘—şłr !n`ŰŕUë\Rëť Ń!őXF°Íđ '|8rň±W]§‘@qIüÂMż^­S ś{?ń9ĐM7‡5"+%^b9#•č˛@Oz §©ňcjpťWEŁĄ7OŐnăDi’©Ć‚o™yš¤X»Zˇ\ěFIç/4ôĚ©¤á"wY«mD‘Ç.őr@˝:â…fŚ{:%đĹô8!¸Ă+kĹĂDŁ«á&uN)ţ†Č`Í"µ¨Á=Ü.ă‡pő˘ˇ|”n8Ě›ĽíQŔô×../šŮo3t›;Îţ+ń%˛ąâRć*ö»Ř¤jÝőÄ5áÉÂĎNÂ«á µâň¨{-µŻŁŇ›˘ť3›Zs!ţŠÔŰ…ť«–^˛Eł[/˙Ţ”ý¨®ăú kOţÔő–-nhôű¶ŤĂýŇEŚ{źĹĹ%˝Á’ĐĆ>esH)»čD_"ć¦éŚ™´ŘŞ­ôˇĂ‘M$§Žĺ7=˛H-ź9÷P_ş ‘ÓZě\ ʵ»őťá…tچ€#{„{q!B&TôWŁľŚ—u +†ö4Sp>źlęx7ë–&ž9ęUW”y|ĺÚľňU%™«ÂJ”ŕšü+—˙gB]ËŮ·6 éG•†ŚST†2\ +Ô޵-\‘&y& jŐ‘döČý hZ¬vš„ŘP¶ţcĆ’2󺦙;U>d‹wѡ/eűÁeďĄ(©ęĂ€ZZłńů±‹?*·»FĎ^× m,ÁÚCy<-­pż±]쮉--ę×ţä˝Ď¬Â‘ŔÖń×č +RÍÖŰVT8°Ą"7ëÎ5×9,żÂµ(’ô˝Zęéţżu>l"m~;]?÷ęߌޥf× ő†ĄfćČźSěJ¸"U{ŞR]LŚpäţŰŇłç “P‘©‰:ćÍŽ‰îžűŁŘG(wWU*îÝEśq_Ű“ÍëĘÝ3ÉKÂ=ôdÔlË8¨}çót gđ +ÄCą—ÄÂ~â—„)˙ŞGßç7 +pü¨tDÍń>6–ąŻŰŔ ™yŚďś“Æ˝ÁţŁŚ?·Z¸ʶ•łŔ(”upNoŰXS±BfŐMÄüzâÁŽ-Z“ +ěÎ×»!ĺŕúČe†Çű1äş¶ŕÖä:Zʰf +ó˘Ia6˝¶k2Z+üną•ţ_uÍ`ţř˛˙áÁĘT’żljY"–d„ž‹U]˘ˇ;ËÂM›j’¬Âýó&3™K=Ď˝ .˝:?ş¶32X¦5ýć?6żŢ#gÍłfkCd +p&LóŃÉ>łDLwLj"ą.xźő,`úß‚>0ý_„EECrp/Ó$€Ü“ËÄ^÷<ĹDĐa.ŞŹzTřŞ&Ľńď7ăĺ>QZ©K¤`{ŇEŰ›?Ű—1ÍĽ6y`p»Z;$ń‚iQaűCäTŚŤ%BBéć"w{żüćÝ$]8ĄŃUźcv#ŃŁńeS’ŰÎĚ×UŚ@Ťwçł¶J€IĚ˙ĺŠkĚέ°íAă^"–’Ux î0đwAĘŽ­ŢĎĺQON…gĂ÷¶€¶ gö„l>^´%OĽĹÄ»6ô—"6BäçkćÖëŔE¶Pę)2—&“Ë©)Łśń¦]oôď¨Ű“=˙&®·ÝŽ4ĹŃÁOVÖÄ´YR+ż„ńrC‰yz1mű­ř˘›Í˝kb"vnٔ໖ӠlšĘĺŃôƶ™á¤íŻ!OÇnáşA.„ţ_[ňŁdmF˘ż5’ń‡RĘ ië¬íU23ÉX&ký‹)„*θí3óÝÇĐď|߲Ť j6çxčS­ęŠnOAÓ­g™9ŻËâ6˙*ŇŰŠd†ŚŔż|XţEŕđ‡<tť}˛ŤŤ<ž^.˝xáYp ŤEĎPôč}+Ňé·Ž¤\zđŮÝá±Ňä ÇÍŞ+sśćŕőéPÜ- +W0rŐËűJäµő•1,ôěŘĎv@']ˇOü/:˘îĚ®7¨ľTË…u¶ř*Júß®ęĂyŘ÷ŞáˇŚ·„ĺ +ɦㄠÜ$rʧ5AKV¸"íń„®kDĺCĐ7űmśđ¸˝s`éěŐ˝Ź<ĐÉ_đ1RíďQ„hšĚ‰P#ź™Z±ô¶đ;™ô›ŁžK + ręš@Ý@iíŰeę&áuç¶”ë­™ŁŠ(Cdv)ÓˇJ~’"˘}S ZŘLX&ęuűěâĐă*Î +PLD—SC^`Y>}JN'ôőţ\·Eő%â É ZĚČJ +ŕĺ,Ůp !‡ó××&sÔzÖ«{;8‡v\ú)ď̆á<ؤ +‘—{›ËJ˙¨ř;1Ź–ą?¶°ŰůŐ+ —™††A¨i$<Ď#w†ae2¨Ă'ő…Č–€ŁmŞ+DN)ÎébM_áŔ-ßÍ®oý(Âd/ń­?@DÇ$áއÇlcÖłžę=-©;‹GˇŚÂ$Ö#‰yl`Ěó˙'tą|×E—«i«É2çša:ÍłźęU‹JyŞ–p4Ö¬±™÷f#Z"ů§v.V!x( dDŕR[1‡đtV +»~ŐСď +y-”–Y,đľ¤^…×vĺéóşóĽccşŢI˝”¶‡~8ŤëąµK3NѶ%b·lâxÇD¦!ňZDRĐ}Ă1ÓüĎňťQr&áB×P¨θ‹Äú¬Ŕş@dě¨Cš…¬9’x–ýCRS¬8Órú.FĐD6ô$X@ÜćńK©«—D%ęAxäPbÉh ÂD^ńZßĺcĽ!Ă…ü(űSŤfĹł;‰fő°ö‚™‰hü”oç~ (0ťŃâä”Í[sŔz–y#˘ąÔĹą®˙–ÔÖ ż/ľÎyZđnD,řY'›'î5‰¨ęë´ÚĽ^5ős'™ż´ôł2ä’Çůž±˙ůń|Ôž§úB@K|ŞQqřXÄ’×»á,ND +­ĆĚW]Řb©}-w ăCCŠÉ‰ŐĽăő|†^ÝM$’mÔÁvZfřéťy»ˇ”óŃüXČXýN(ňE<čĘw6eXłŁĚmoS°B`nďá<+v?ÜÓ’Ë­ÎqĽ•~‡Hअ‚¤Ýű{Ż6ÎůÔŤśt…µ•"Üe_ĹĎ}k÷_DJĽŕqeŠż—•ďl@AJvŁýőŢ{ Ĺť‚]ʶ7­Fi.“QT·,4ú„T€RöîĚ%möĐ\Ö–ćZ xr‹ënb®¬4Ç\ßYÉr)¦2Íů5×9â°ú·–ä.§ŞV´í‰î®¬w»> 3#]łóHňd«xiť"Qú١ź˛sk"vøÇáŠ)ĚĽuŻŢG–9a–>ëČ=Jaâ5sI-Żą ëA3Áí±Ł±B§ 0A3ŻťĹÎĂIÁŔŐůt\żŻôÍlQű-8ĎßĐţX3Dů‰Ťuxc5äMz‡é"qD*k~úL&ätčë',®`|ÄÍ9/y̶î}íűę%^˝ Ş §ÖÝ-`Ze:ĆEĚaąP&á5qI#Ŕl›íŹnx°V{{Uŕ˝nFG`Iţ.gÂadc0ŁË±cgŕę6‚ B"ŰęµÉ×t ˘áYÄ(ÉŃŮ÷JÝ}×б#lZ§»Í:\OiR’ŠąÔó>§đó™J +Tc ůN2mLÇ}“Q5żWł&úKő/2uŻk®*Kd®u{ld>gËĄňŻÚ"d€Şp=îúÓŰY„¤u‘;™ćŇrʆK8RŇU‰ĺŽ„ŁJ`(W‘ü;ÓGĆ2˙ćz·ýĺ@«88Or]‡ÖlHĚ~ćçć–-EŰPĹ—H?«wç4ܤ`‘ËC>TOüÍ ++‚“A}öÚ€}—„˛I‘}|C]őňů¬ÁĄv/EĐgH·Ťâ{µbnJH¨†öN€9%”T íR ™(z®lĚŚC9÷ă5šĎĘ=UĄBŐ©†+ő˛jKŁ^ŻkE~ Ií|Éć6ĂĂŇś|zL-é†1ăüFĚ6źÜĄqIe"1—1Iq™wUŤ0ţdď¤üy=Ë~bu×TÎÚÖłěë=OŹ`"Ó[h$d…B%Őłd¸C%ń7Ô–*/L/× —i Ö¬.> fâ!JüÄęR&ś˙¦Tnśä8Š‹‡.˘O€ÖzYn¦]’ź†ČCĘ?ÎQŕ/żŃ^ěiľ95;öŁÚ÷Tűr5"˝‘8eźĆČĽv \ök‡QŔm \U 4˙YĽK«-ŕć|ŃĘţ†Đ˘xĹysÄý¬‘ÔcŻL)Ůrf˘ź•îqMÓ#ů'ćĆfzš>§ ô"ÁđW2‚±üŐIçYÖDbýëXŢv&–ٱ\‹p!ţŁFAv†%žkźî~ WĂ+9”7ůě4.{BäřŚe¶«Qa˙şćđËTů˝´˝ŢĽGڶ°Č ć"‡0űýaĘźň6ŕ \čÁR€ŚÜţ)ÍĚU҇íĸ–˝Öťľř«ř7šÇÉB-u‘ ë>4Ú3sĄÂ e=Íädv"o•ő\WßÄJf™ĘádžqâóăQĹ>˝ě‚…eŻb@DđîÜÝZšVľľže^ç*ĆWł–÷2Ź5—GĘżkçąŮ…Ó‰í ŘĎBj'G4q +é–—Ö 6Â1S«G&)Í7ÝťBţY8K3ÂËk|¸,ŕ•·Zł3^ě„ŇűdXýžkÓĹaĆ–“h€.‰"´°·ÂâÝtm,=»ďˇ-g¨â6ĐŠŮÎëŰ'‡Ô6ĐŽ*Ůł­„yäS0+Î?ȨáÓ)«ĚÝ·¶>ŕ°Ţ(űoá™:ř…jýŽÂď"Âlw`®čÎńa>Ë~EŤ^úđ÷Ëa­98‘ăÚŔ5’×”»ţknÖȵřž-ěC“če$'+Łať8bQEW-QąČÁśż´řYĚ]Z´v5Ńâ«ý’CŁ«s0×Mx‹eq‡˝ś§g ]’¨µľ# #LxéÁ}•­€ůßÁÄë/Żúź”Ú¸¬|Çŕő˘đŔµk!l‹…Ó;[DÉÇk´Đĺ=.Eó`@°Ă|éŘ ‘¨=Pˇ–ďj¤5 ‘⊊8ý‘ćCŠk’”Çg±÷Ńp·ckŤ7™•Wţ..ŢŻˇĺß׆ ¬ĆhóîľŕHô ‘€Řć“bť%'›-Ď˝ŠňKŞ)ż@1,@ĽdiÉ˝–íxݡ+ú¸ňą•‰ĄČö]›GÖő(ćĺtä¸ňá"Ő:őź´É^v&KňB$Žd]˛2䛤ďľ5íY—2'°pč)ťŔ6ć(V‹ďńݓԛ`Ľo  ÝR¤eoƸ!Ň?±ˇóÎşćoî)›ş\bń”ĄI˝ěď•w‡@łHŽhŢÓ‡¤ŞěŽwh/ëV˙‡i˘(%¬ßOJa_\–ë˝kĺ+D˛}"92ĹlčzAýÄŔţů~ k'ň•6 +Č-z"íÖ‹­čSä¦QDŹ+ §‡ůٞá’ëÜ2É'őÉ"®ŹńŮÍŤC„ß_ůöx?$¸Í‘§Ö +ŐÉŐF@DL#{ۦőś,+ŰH“jnľ¸ÉĽŻg›ĄAhi߇ső !ę~S€‘dx +űI·ąŐr¶)7Tsd‚,LÓE„'÷Łv1M˙‘R#ËEtÎśa¬]VňA(&5źđüç#kđügßęe!ţśz<~íŃc´ÚŔL˝6”:§S>7kl‰+ď‡ÍĆs™íşqżç6ŮëÉO1R'ÂůäJ5 ńza¦pv2E,Y¦uO.}«ĆT/=tÜŚÔ2ť÷ü$"/fŐ*0.őY)YëGśîë›v2.Y›Ůg‚ߌŇN…ÇJuâÔ–m7#^ś)k[*·u *ąońĘŐ‰âí$Óy±f0´SâŢźŕµS`˘]‡í`¦6xř5‰*^i·¶5ŁŞą¬ J*ĚÔNˇĹt)­˛‡v>‚ >öˇPh§ĄĄE§‘«€*¦h§Ňü'Ó|/ťáﬕ†Úë><…q ÝĂ…%‡zkzRÖOe™CÖ<üvAµ ‘Á_ęçőHO˘NňYşY&ĂP~i‹^oÖ%±ĄŃi–C¤ âµ—IŻ/-ó\tŚ,w!¤üŚä ¤äV«ĺúžŤ44鲼»ÔëäPX˝ĺú‚ fq<ŹŕËá8y–Ź˝…‡>eÂÖăN‰;hĎç:Ýü™îcDHM}–0 ĄŁ‚óąBOáB •Ű+wµÚś‰Öd¦ňÉÍ$ĹőS ë>ŠkG'oĺB´řܵŁţ/ś„ćX|É•cŐ,Rď9÷‰`(ÄŚ-ÂöÇÜˡVóŃ~ŮżRMb.2rľlůóŽGRĺ Đ—čÍmsÚb +- ÷yŰŐł:>í%L“‘…ézŕAÍÖ_ąŢÁ +bFűm—rĽ:Vr~O±ĆÔ¶]0DťYŢ_4-y÷%RĆ|ÜK>Ŕ§*Ç÷f¶TëüvXĎ_EĘŔ±Ďó±Ę×IF ‰ÎşŚĚř4.u)ń`ő]L‡×ĹbŢš‘Đ@&=.ďEJłPdwő—ŁlÇěß(K˘CľžD~ŞT­‘=¨ă¬Aë)‰ŕżę‚6ŔhŻ)±pĐÚ¶/2Żô>N…@ ?/Áž˝˝ë˙!_ń^›‚LMpH2Ę•‚Łľ§]„ˇxöYˇ©[jTa+%žĘĎv{('@”nČBNÝ3®vlKjtkYćm(ÄĽ&A§&X© ú%”z+‘ťVÇ`Ęc,Ŕ.şM—úVĹĆ^â†Q/€xÖ(ß*/‘÷şŁW~n»ĆžwWđa_đ,DĘUş/˝}w÷$ÔA]ǶĎ.Í­AÂg#˙Ň[{ yc:ĎöK^«ĐÉÚR\zbéŢ]ăFŇĽ”„…Ô|h—\a‡]g ›dd©&†ÄBőízĐ´c÷Rŕ/ŕµmX®n'×·€ăÜ[Żt­şî4®ěęłĚČp™tá8µ,U»Ô]:㆑,u«´¤0TR®ŚÄäÓ©ŕĐI»µŠ ď=ĎŤiÝu2‹–KYČŮ87ťĽnÂw;Ďkßš4ĐĘv+ÎŰÉŇü(ĹTqč.1ÉU1ŹŤ C3’ĐKS¸GU·Kó,ő’ëi®ÜR˝µ[¬9Oé+…Z’+ô{¶!i®–zM§#’~(,<@”ľŃ#(C ž[ÁŐěkŰJýĂĄĺ xą#M·!T’«PŔÂV„Z{Í &C9U•Őß 1]ăjç‚„L,yvÉHď×xĚV Ű• +éšžëĂů™‚tł0ąŃB<!2ô >e,q䚍íÝßżŔ+ 4ĽżŮ¨y*®Ŕç>ńŞe Pv¤\¤s Jć7Ž)ą"Ădŕ®lÖžÉţsĄ%üb­Y6tĽ.+[,YvoŽď>–˘‹q‹~IPłţ…kŘúM˙ß÷\‰lgę^ťy\,]QňwxŰ?fH +ËÖŁŁ· +DÚZ~ˇÔíÉA¶9îř’wZý^¬átóúM_íTRą^ĹG˛ţö Ž©mžĂ%ŠÉ×ÔW,e=ăą•ÎE ĆăkvNw;Ň…ĺ[«{ć"öYÄG`YF©śt +îE4Ę÷ů"j`™W!§ÂƵv|+!®9|ţôI&âs.ĘC¶jĂ«¨‡÷m±|›'ź´Í–€gĎR€CbÔŰ <儇/¨#H.ĺŰD]4¦“3řô„şZí´;,*ô뇥<ß­@Ż»î&šd[…iŁą<ž¤„;´¨CJ#ţ űî +Mä©ă”ě…§"!Č«ŰGč‚éˆěňTĐ?]Pl¸;BüŽ™ĽŘúв§ReŻľBR5`o)áSj’ř‘ĹÚÇŹkaFă­  LśŇ“9جĎ/ˇ“ yeů$´…&ł·P.ćÝrtŃłâlŮ)k> ¸6?šgö ÜChŔ:ĂQúöú^iC–@N¸AJ‰Kw·aĽ^ě.KŁ +٤‘‡xj’˝· ,©«bĘŤYěÄq|—Ă4[wX€~ĂT˙Q] ÷Ă,ÉÎłżšb“ÓâĄE=Ńüۡ·ľvXúXčU~Xó,,Ř4NźóěÇ9>ü„°OŤ`ě~uްĚ(tîľűř¦QbŤĂGżPőbl‰Űn·âÝćމÉEŤa‡wG:;O1(î±9Á[Ç}#:‡ ]Śţ(r„…ŁöM=Ňü9?íëEęÁfµo™ čLŕ#Xˇ +Łë¶vV»OÚÍY3NË>ktOâ-FŁśT`}I˛&wĎ™¦Ę^ç_üüźrč$ëM¸ş˛W\7s›ćž;ŹqQŢu­íÜîßOBf@×~s:cçş]¬ąý'ť|'±šëڬ¦_Çuí* +q©łlŐ, wŽ|„®=w?KĹDěîď#scßŰ6Ľőú:\ŘŽATu}×(íé[ü9śž¬–˝dó|©„đăO-:đ”ĆćXD’ÍmäußnŠ&¸ŕĺ‘§ŕD•¶*4jmlµĎqéL;2;rąłň.•X„$ŚŹŮ Ř ĘÝę´‘AT¤.H1îOu:eýÝ‹1 «ľTíŠ)áŚD‘ó ’ ¶¬7ŚźiŻs߸Ŕ#+úąŠąq‰<Ü +H«Şrń’oĺግǍxMwŮ LŔž<ăx8&äÇ­“«!¤ÝÍo«¨udŢŽHmr’B*Rő¨¨ôĆ~žm[¶ý*˛ÂŢź„ĄŽO$ËžçÔŽĹką•ă®Á(őJJăĺncďŚDÔwk[ŻŮAű·b~… 5ÂNX¤{<˛ë€Ęi±c,ks'>śfč€ÔP4¤ŢnQ\÷‹ÝD6S—Ää˙«M×ćŹoşŔđ8Ioşs%ü?Kd +é@l>»ßX§çŇ:Š‹]ěŠô•PĎO¸ľ ‹˛ýx„čÝŞW9üĹ’›ł·d¬žŐÄi@*·_ë+›Ől5đ‰‰kĘůe;­Ú2‡éĎ5꺨€‘4u(±iÁD({Ocf ڛލ¦šÓ!Ks_áĹŤ‹óýJźzÖ:%ˇK—öVýŽJwé +oSŽđ´ć]čG\u/1ÔËQ`™Î‚~ĄÓčĎRÉ´é3…n ńă,€l:ůÜŞŞň53˛jšmgm@d‡=CâOzüxű¸D™RďńÓž»šC%Âá!¤L9F”ٶ!¤“ţŞă2É8ĄŔĎŚý¨ŃKu2SÄNöÉ ‰Ę Y¤b_Š*ţĄ¸é˝(BF=‹“-^‚ŃWĘ/-Ý/ᾌ*#Ýô×W‹´h.Ňš_XůGľQK…îĹu°9Îüx ÇÚ퉲{…2]Ă$=é±CýÁ¶© ŔÁĽTLXŮ77W˙É5TVő··\ŚNv]8éŻůdڶD삏ě^Ż˘šŚ,Ëű$<|QA®š1S1dŚçuĺ_}PZ“LďÍÜ‚# sí×#%éóĺ“ć/m@¸Ůî“T™Kd˙¶ó˛sęl·SäĘ^_sB\"…Őł.6 §|ö'!Cł#ś•Y@EoŁĂÖ8Ćóeu¸žÄYxrűRYÍ‚ôn7HßĹůĂ‹©b{CCýÉâŔŕ)‚Â)ű˛óÉâcĚFĐŠvýŠ ʱ ' Ě-@«žÔ +{z¸ÔőîkNyŞŚč"{ĹZ‘kŔ8“ĘE=ÉΑ8l͇é9ă"Üĺr‘vYú¤Ôđ€ąá±c&]źő4N,).é˙7ĄĚ—r{Rď±5šˇš‡aű7J*Ë™t¤QZĎ’QÚQmy7Çň˝¶ˇb!Ţj•»H‘·–T$a?‹’gFR9y®¨%ş”%Gś¸ ;y"śĘ/+8íQ…ÓŰn'Č+R &Éo#`|źw :x¸ĹGe…° ß„NÜë‰âeŔđ› ĺS[ż‚]ë©äÎU_%–_Ö` `śÇËĹB]ťÝaB*ĂŢ(ŕgîbĂjÍöÜţ™¤…Ř¸Ý +®„-+:d‚<n‡Mu«F" ôVďóř±ŕ„†‡d\đ l}Vń*µ.ýĽ˝H-ý‹xáOĽ¶0!Bßν€V~PÁ{\ŹşěҢ1‚›‹É5 ţYŁÁZľ—m÷/zíCD` + bwőÚ?ŹOů űl‰üüX»˝r'”CÎśŹß•Á>|.5®‚kárĎMrq…Č>÷í‘#j)tň q´×wdDÚůrž@mđť“2đvPÚäá.öľ k~élAYĺ­ŃZű,GUHAžYj+ăו :›z]>×ŢŰ©úx‹µ¨KţćťĂíĆÓfď •l—żżľŐs§Ş™Äđí;)Ö ţ2FćŻíQž^•Ik7K÷Ytq˛,éuL§mŇĄ0„pţęĺ5Óţ_~G¸VH9Ř5D$ôó˘ä§Ö…˛ ¸*˛VčkJ°¦ł î¶—ÉňK ňŤS¶—CDfWW-ú¬Ú…Ť5D¤ŚŚ˝ĚF›ŚŰO•ć›ÎG .ű ÜŽ÷>„Ś´Öł†‚qř_îGtH+éEH âÇDš´ś=eÝ&ÁF.8Řî,đŐŮĎçŢa(ý‚m;´.ÁiawQ#9ۄݠjąî»¤ź7xę¶l˘ŘTDäm/łąůÖ÷féű:ŹťŤ"]ă4@ú$“ EŞ’é aĎŕłĆI.÷ć“ …€Y$ŔaÍÉźş‚‘¸@-7@ďŐĐĐg±… )»‹We%"e`†˝7BîGʵČŞ "?¸Wńß”˛;"—ü(…ôĆs6ĂżŠ‚ˇ…(: Dě¸uîľ©©ĎÔČ_e˝ÇßL@Ú“H˛ÝÉČ»ľÍNr +IN ű ŘGL©`:ŃjŮ=lVöWçáťć]Cpa”†Ô2 "&mŘ›ÜÉ‹=­fŮ"öĄâV”ŰĹ>5$ĎRü<ĎŹsŁk}qÜOä‡B$-ÓIůá"×#X/p〹ÚÖôŞŹĚÝČűě‹[Ď«áěčăTĎÇ^ůvNů2s+J}©†uXUĐ]Ć“¶'źµ-ây˝ďĺ ź%î +,Ľ^Đ%cĎË·ü Sý[Đđ§,ętqő`pł°rP$Ů˙¤žpŚ"oq§'Ř +šóŹp÷z‰°o7B­’Çb[&Bˇ„qÍze9ĹEd 'T¶hj—„™őńiGÁł+[:Ôöľ‚xµ×$ŔĆ2ŻSÇ8Ľv'ĐLű}O˛J0ŚŠ•·ĺo˘_E ÔL®ŤĺŢâŻÍŞĐ!üőž…vÁĹâłžCŠăׯK16BínNŘx<ÖvđKŻ9 +‚(Ş0?!=|–É%“úx­Uę7°©_Ą<‚HĂŃŁ—€ť˘+]ŕßě1N+ˇwBd«ůä&éMDGíĽ?Ë›Î`üHýŇú”ÍLćBxÇ“Ł!qy3ćúgNĹÜ}_Ł'ŰîrĆwQČş‹–áĄ4©ýëˇĘ#ÎWkÂëGU“65+Éőňëś2ˇ‘ZĚ1]h˝tßÖQáż;±ü¤6Ľ„ +w[}_śÓ˙_EtĘ‚«uŐřĺĚČđh‰ć™‡2x.»źGQÖÂYřÜ?ęyďhűЇ+aZpéŢcÇ-Dn¨rřząD30ą Ä \łĐr &jy˙˙b*,IŠČ𞛓 + ä9ZÔ°ÝAŽČüa™őŔäÜďů_Üł©żĽčRŞđ`+$ŘňLä< ĺgˇŮ¨5ąĄąî…˝>ąNtCÂY°-Ëe]ż8âň˙{·ťÍ’ä:ě^ߡnó×ÎăÎm_±{†BŰ$†a h‘°h¸†=† ·W¬Č8¬ÜłŞHpŘÓőíSĆ9b-$/¤ůóĹýmÍ;>!8T°qŰŕ©[äŔ.ÇÉ÷Ą§-Ň +—‘ÇaMâR±*‹š ś{_ŮŇß@ž»’ŇG ť’¸reF7\ٞ•Úí: +Ü,ď8\ąőÚě‡PHý˘׋öZ ’Y±…čI×:8ć +`qrpË$ÜČë۫įeÇŹALYĄž%øÔŕd‘’”ëa+ ¶'?Ů[ "ĘP-ů„HĺÎn\ë,ő`ĎzdiĂD_·(Hň”šS"ĄHhĺÜhP)"(†T§~ú/ů˘ą„™ž€OŹäăĂú¦1,6%˛Ő˝ĚiçôĐ*H|bąÇ ÜK]rÎláĹU½Š]ę‘cęÎÇD?A_4¦ć‡s»öĽÖăKçv:0ĺť3ł…QĽń-ä•FηE¨_Ş"fç~8,śß}±Ix˘f, ŹUO3™`“ôěqćjM&‰\$M÷8âmů;ŃĄ‰ĂĚí\dzbdgDČ€r$O3=ÇŐŁřc‚S#÷Ś`5$« xŞĚn4”·ëVĎEVUąß¨9!ôă±U‰K%a{¸l ĘAŘ}ŕ)ýp`;n'{3úM^«Ó.Ś÷uÂ(k|Q)>›TĆĽ4xřVfŐ™ËÁô`xc5<" *łI†ŮĄ [›UéŃú4˝őÎ[ LRBSÄ- / m©YhyNÚ* {^×[y‡9Ł‚G"2ż¸Tôůš©®|O›ë»íÍ^ă9”2ąëăű ?EŮmźr‚G‰T€uR°”:2ŞwÄY@ftĎFě|zîV’‚jŇHWözÉ.ÍuĺLóî“öJµ ŕ•¶Zr¦śçWr™¬”©sç Nő"dÄžjsG¨N˘XŽ˝ţ3…m7¨J)!C„&˛¸X9>­ą@„Aąˇ”L?J”`ł+Ixě#dţC-hwĐUo& Č1˛Ąń_ú›¸–ď‘c č2 żf tLJĺXßŕ t  F2®#!ôĂť´dę°EE|2BDžÁÔ7“ĺŠ5%:OÂ폕ňńĘĽ†ÂŕzwÔ+ §őXSÖQ˛ŠěâĚľ'ţB›ĺ09ąí»këjoj`•"ĆyőrÓÔ9ş+]aňűZEb r»:¦HŽk‡™ĺ)rlŠĐŻ•;»Ţ#q\,»/Î͉9Ý4ýµü„-E9´DL ŁN€®P4ÚDůď‰ŐwŢu¸‘iy¸31oÇj˘Š…ŕ9ÄúŽw?U’›<^@Ž ÚEŁ(ó!m‘zPŢŠuä°‹ëxv- v&~˝JI °Â[$g÷öµnv[DľqŇ3NRâ¸Ö;cĆj\ăy>5.Ęjú'‚š+Y¶ÓÜ(8Oóż&©ĎV'ě4·ěŻôě3ôă]´E{#­¨VಔF¬âk˘â®ÔëÚ) ľ‡p÷nlxg¤}qůNDvRŽhě5qđ­|(ťĽ¦`ŃŚŮkĎ^ÚÝ ‘ŽnŢ.RFĂlsČ›ń᮸– šßŔZHĐÚĹh F/´2Hí3ĹČőś¸ÔAżnR>Ž™@&"•…h´ě5ç[.@•(Z;fŐż§ĽóŔ`H‰ŞSÍď™Ć2ꊆe?sPĎ@¤gyĂDn¦Î†H,™±ň]G’¤ŰyŞ/;ě›IH‘(.!ďńLb +¬?z§I‘|ěJ? ŰB~”Ý63§Ô>9’ŤZ˙Đ-ÄĂéWBLżűť| Ş5ś‡«ĎĘÂ*óĎQt¸~~7ý:Eáé•F˘=kíiďKeš'+—ˇĽSĺCÍŤ<Úó¬‘*őPŤnĺ,Ălr© `îfZ÷±85~^Đ9Ţ•B +ŚÎŃvÂ)ZyX±ôcáĂ·ň*đ1"WŃíŻÜtüöA\@ÚFl™HLşnxÖgkd»mGĚ5ňĘQ&LťĘézŤxß ŁFŕă¦SµŢ×kĚG©[cpŕË™Gě+ź‚g6¶ĽĐ–ă +WôÉżh“Żűňm?Ö|^ëTȬćŐâ-Âë-Zël©řZ"uúue?°»ťŘxË ě Goe˙13ŃZ[⊠+¨]óČţ0¦·źł­Wt>k"¤4ązR~j»Ą\ů×»•ôEo.Ăą¸í‡äé0[uo!ŞÚYʉŚňNÁ'/źČkI¤•űĹČńžĽ'K©ôŽ’Š’=9Č@^‹ávÇťüŇz‰ Ż`q*ßMäÜkÁ2xEfĄONŠýݶ/ŐnßHp{Zź#-=ĆäÝP8ô°ĄÚ= ÷jš“E;sz|Âć¶p7ŃShźí>ČŮák:±ž ¸V×őĘŕ”Q1ŃJˇŔb~$6ŰÁuĚ9ʇ:Jhk¶ÔR ĹČBMŽ#kX9 ÔűV¤$¦ÝCdwPˇ™ČĘŃj5[ť•sX˛±«RrjÎq uř=‘éDý)PÁ~ rřFf%ĘÔŻ–eŻÚÇŠ÷×ĐÝżYVy‘Ź^;qS5K+/ň‘+qń²1Ť"÷Zď=čîâd@#Ź“­T·łbŰr\E“€Ôt­ähwD>%ë‹-ĆÇ +˘7Ŕ šŇ%ýV§ÔXÉřţ:Ýłóę(–'yő UaĘVpFŐ1–Ń<čGíPËSÓé÷RĹĺ÷śt:ŠÝŢüA&=Ŕnł ’‚28 ‚Z4Vud”E +‰‡úXŹňC=ů´ôNÁłé´)P#¸Ă¸@0µyą´_ÉÎg"ť!Pw* âę +_ďEý»1žFńU“’˵LŢlĎŐ %;:_čę™±*pŚ÷, sÓXhd)ńw%LFĽşĆ@˙(בۡĽ{Ń +4J҉t‘quĎ|FĂ´#‹şžúkřQvĄć0â‡0M6ľţÓsEND¦8h.r|Ć…!¤őŃťHÝ9Fŕć4ÇR÷iľ“ ÔŚňJŢ€­źˇ{ęDWŞĆóbŔJ=cb:ňY  ‘ÓŚĎľ†fŰvˇč*ĚÓŁé3źflöÜďđ÷‡o%RăS˙P^Ú HŃŻ.%Á¨Iw Hnńé4ĽŞ†"ÇaT/źČRU·ő„JE÷÷ĘĄĄĐn`jŘ{$ngŹW‹ľ–¤´2ľ57&m%żvŢR˙0Ž–ă·ą’ýď?ňťÖ•37Đn=+fu<ą‘¸Oܡ–ĽîÔĆÉJČ@ĺf­ĚnŞl®Őňn`ÜĽĺ±D śĺ, 5Ýîsń +0Ŕ FŇ3Đëć7‡šzŚd[ ^ß´Q‚ö ‚u”‡Mxk¨ă¨™/šĆ¶uř:Ńc˙Ě4–Ćs÷ä=µŕCG®Ţ‰ă˘a‰ńDNş^A$ZÜT26‘0+ËĘ´®×’K_ §Ş‰×•ŁČ‹¸boFö†Č„učOK}jB¨ĄÖ>˙}+ęň5©4~­“Vkż?Z'Pęú+ 4¨†Çű@Hdjł1h˙čbŕfĺ03čVXéčŘn9ÁQőˇ:ó9p…0«Î$ GŔ_yŤž·ä‡~Ť‚*ˇĄiëEŁ€ß÷˝%Ç”7'¸x‰¸PoşřQKũ̀ř[Oż>‚=ÉâĚ“>[Ó×~o¬\źřÖ5ÖŚć&ęO +Nž’±z’×É\41śÚ’@"Ąäš@Ř·QyeíDÓ Kk+$$ňöŰ÷|C$Uß{ÍQŤ«•Q]t"Ł]ü˘¶ kuä8ˇĚüKÜ Î«mRń/*9HŃţÉ =7đ˝j®ę>¤(OKľy„R#+Kéŕń8źC ›ĺŇŕ–ډʭ«úç‰,…&7¸Ůĺ[O^Ş´ W6\]_ť"śŽ§¬Ě1YKřuć™0 "„’›ąÁĹô#ă#Űř[&@şîe™D1î¶CŘĆyT;ŔĎi<cľ•Ł'†!y}żâB¨WÝë‹6Áđ=GyâBâFURň<<_?Áw¸h¸wLnd +_I׫Nův!­ˇĺ*ńřđ’›=g ý#7ĂLäÓ©šăy .«Ôyˇě6ü"ÄŘŁ‡ř +ΰć×bV»˘Űw‹÷Ëqǥ۬ÍJIđś°bŠ^™Ťf˝žű9 1Ĺ[ ď·ć¦ŤZŃšă^ů!ŁW”8Éi'â:gâ‰ňPd–ε&*`d­ňŔ–‘ZSJÎşšÔiHKlďîŁ.ňTënń f#ŐPVżŚ UwAŤ¶Ě ÉŐŰťEęVriýÇb†oĺSŤÚďfę=îűšĽyŔL1üBŻÂŘŞËĹNĎTö€ŃŮĄS„iîNÝŮţI Đ 5ÝjXĽł +ťm5»·:˛y,l©Mě´ç‚a§~Đ:OĄ˝¦Q†ęF®Fl‘לą9áŰňRO/4ÚŔ Č[wsĽ&AD×fÄa®ŽâxpH–ł¬=Q|˛äD¬őeák‰%kÜ)y2ŹM±¶>8#ß„’´šđ;'ëo1„^L‡M‚ąP¸"FřˇĺŠÂs(¦ł”i켂&™\gÁ…›ë0rŠ4ðÉójď٢@Ą[Ů@ľlÎÝ56¶ĽĚ§ĐŠ +©~oÔ Ăčt€„‰mŚ=5xdx¤‡Űłę3Ŕ‰×ÇhSYĘëäÉĽľžč¶Â+ş‚ń©n"D†S–CÝOţ2|óE„jŠ!×s®ČNθɨ7Jě‰_#ëR"lĹ1k +NqĆý{Ł?P9˘Č)éc’‰çĚ2ýWľ‰}+ëŘ…JEů\×÷ŁSÍciu?îZ‰Ú.ąDź-ůć:a3S"NśHQçQŠąE®«eçłÔ %׳E‹•ˇ‡ló@/ńsżă2úÎ ţRó _“˝šH“wcOÜâ#Ś’ë—şP(Ęŕę™> ”|şF!ö˝ĺ>‚Źxxů“Kď“Á{–I©'oĘ‚źáSĐa&^ŔjÉ·ÔéĆŮ’ü.•0{^ş?˛šÖĂ^Ś™oYoOôô 8č-šHŚyązcVF5¬QZ#ˇF‰>˘‚ÝäČ‹%$ŃFtlžĺő›?©bČ[ë ÓEŽľ2FŕiDn‹HĚNYEFźšH=ŔB5’{$®UŽzýŤćF"Ml‘kpż@_ŹoÇîÓ…ĹvŰ"m~rŚ•WڬŕE‹>ëI QÁR!j*…JŐŞČ˝rď(®‹ŢÍĄ˛·řK)Ł}±1T:´ŕÍô7-¨wŕ¶rfßaj€ťąě·›H´}·Ú<Ś?b"Ě0ť`Z´¸Öą‰–ÖÝßËŢńő#ÂRňéDŔBţŚŚjQĹw/™Źîó¬î˝j˘˝·c*ż’hđË·ĐC% +“Łś’dŐ™ëÇöő¶„»‹xΔŰńQŹ0˛.ޱÁ°Ź÷ŽR?ą±ke!VĂ‹=ÖdBŃ}Ż>¨Öä!ZRé6ž–«ç8í.Ő„Ő6˙yô­ČŐ…<ŠĽ® +Ů|žLµ1pXŘoíbźoNŽYc(Ę^IÔżôĎ;ąú×ó÷˙ôţĂ—˙đwůË?üóź˙ýźĺţË—źţů˙˙˙ţË—˙őźţé˙ů7_Ę—ëK›_ţřţę_ýî®JH‚ZÍß^ç˙˙‡q53ĺVçŞúzůëů&̦¸ůŻú·óĎůý?ţçżüă?ýůďţůż}ůńďľüŰ˙ô—ţÇ?˙__öŤýIoĺţţO¸Żóĺ€Č˙„˙8ęúňďä6˙oąŮ˙úW—üÓ˙ţŻţŐô?˙Ýźä˝=ČşA.űÜ׼żH„.´Câ·GSTnaNzb~JĽ*r É“Ž9IÚčdNbtJÁF NCż•(%<ůś*ˇĽHXŇaůŽPbtşË—˙ěÓm2 čŁţ$rč"‰ĹÝKĐN±´PΔ+ÜK,ÍÄŚ[C5ĽăűjĘĹ,éŃDZ÷e›řUŘí–CtşTŔ‡ľŕqf±_‚k/poĂlϢ˘ {›¤ţOޱxdܡ¨ Ć•0â%OÍ«=ĘE+‘9†–ĺŃnÄ"éÄ]č ĺ®%ąEw®"ˇ :°ăľ÷ľçS@UjM1CÉçŻČůşăZŹÎbqÓ_ňAŔŚú,q˙¨9ék|ĐÂŔ®ć )ź ĘŹâڍn">Yü›ŘšMśŐ°&îM"ŤĽšný`Gđ«_6ĺKG»ŕĹ +L·~Úť§ŔâŕOĚăž<FňäéŃjE +0Pąl^Ma€Ů›ů"÷'ç  ]Ś‹ęr · U.Ačś$Ř™5ěĂ>ę–ĺ°TůŔ:@†6lşň«ˇAłđ3bĘ«Ę!ĆY—ۤ9ůc‰1¤\čÎ Ěşń"ÍţÂ-Ć!ž }Ć©ë2őÎG:bE‰öXß(föSg0Â"·"çµ6ëZ(UĆ9˘şTÄqxG;lŔ>ňĄ*~,/¦O‚YtŃZŁZ…F.Ĺłtŕܰb9·[I™ĺÚűP›l"ň™QBú,Ěe#ÄrTi|5äĄ@yą•ď Óf±Éą…Ý8&LÄŚHVNäf#( –H•⯕‡Q^cĂĆă}]Z0»čbŘeѰÄ5Ô´©(˘vßJ»'ź[‡HéřCě +ČŃQ1ËaG? +Ű”ný’óQÁ‘GD‘‹±l‚‘1•“pkEÔ¦ÚOÝs„"ŐĐŔ_`”Ń QÔ Äc‹\Č^x?­RŇůk¨Ë‹ öűä˝<Ăͱ¸k°Óă6qĘ;SŹß—ý‚Ú#Vg ČŞ; ëş, ßG>OĽHÍ60=WŞá"‘ćPÂgýĄľă<\}Ý_lĘO*ˇźTcăA”F*+Ćl×iE0S aP€VÝ#UE +y]D8®.~Ý&¦ĺ0Ţ8é(EyiOng*ŰŐÎÍD¦"óÝWű_đ˙ZüĚÄöJrŰÝ~’Ďú3hŻ? ­"‹sűI5§Ěß÷ßĎź¨÷ŘM˝/~ô/ú#łßłŕ_ŔÍţŢúÂ.©ţŰ’˙Vٵďřy eŃúRSâ§ß_ógyňóçZţéç6’8ë§źÇďú›Ůúý-˙Ćý·r«˙¶ëż-)üůźţü*˙îOű÷'ű/˙Q˙ßÇŢe—Ť¤E>=Ö§Qě’7¸üĚĂŢbÍJľňĄl1bl‘1l˛a5 Ŕ ·śiü%ĐÉČ׬ř˛’Ćŕßtôt凱8#ÖëŹc·đ CbŢ.‡r"bŮîcšŘ16JµWc #”‰…™›,'áË&W+ +ݵCńÚÄ€ĂTĄ\ť Ä0rš!10еKž±JЦ˘ORqÚâNĚ3¬ !Z_ĺd·­ZŁc [^&@±6ůfëĽ9Ú*‚nKÇä(R7míĄ-±˘Ž?.†í?ń,b'Ä.)k;ćaA•ŽąeüTQ4 CŔĆ UGB51Đ_Ŕ1i"ŢB›¨©ŁďJ¬Ő‘(¤®‹ÜŤç¸´‚­›7bh5ÔÇŔ4\=h4–†‚b0pŘV•Ŕk… ĆUżÚ€ŢŤaeöË« L9Ü ʉÉč€\ëßDLřB*/‘Ą WŻ#÷–ž]ŔÓÄ`—ÄzŰŠ‹żÄůÄbgÚŔ`ÉáÁWŢ&zhälGOĄ1%vĺęć^špa¸e$O<Ż óťřVőu˘Čf©ój0K2]SŻę6Áχč ++vn¦Đî -ŃĹć +–›„Ż,ŠÂ TřďۨH°nň¨u\ >CJĂ@%ĆDÁłŘžŐ`Ę îDC& L°­č,=H¨ë·ËVw ű—c˝n +‡ätg9°č Č` F…â¸ďs´@ípaŤćÖI^;ÂX4S¶ČĐ{KO:@ó“ÇP(Ŕ¨eS®âç aňFőV*˛Sl÷î÷"¬ä5ęŰmH,'ŽÜžS¬41¨żŻőźĚ~JvÁܶߋŇJ\Ý˙pý4~_ţöÖš$žs Nö·á˙äôß?a0ţÇlţřĽ ‘ő“­˙CY?‹ +ü,×ţéŁţôól?‰7ůéßµńżűÓ˙†˙ŕÔő˙Ő˙Äüńż’Ý˙­ř÷řŹýżE˙÷ʇ#áÂŢÂĘÖD¶ę6äf«Đ4±˘_`?äTę.Ůýx¶?@™kaC"&ü4jÉ4ü›Ăţ7u—ćÓš˘ţ7ř®'˙]ŇV ths e§K|—r}ůźżüď˙Çőĺď%ˇýăĚÚŐI_čĺ«K¶5 m/2Š&.‚×KA—ŤçXÁ˛r[1ŞN'r9áçůŻŁ¸/AŐkĺb¦ýĂŔ Â}Š +BX|¨ô—Uë(Ś2ʢŠä„‘ߌˇDa&á†N"SÔŔÚi{OŹ5‘Ü/ŮĄĘBŔôfήB¨ G1 +iň‹đxä·B[Ż·ĽĂ¤ćÜ"Éďn\Řwő‚"ŐË‘é$-#Đö ô{‹đ©1™1q#jz·[$ ÔCz&ńSÎŹQwXË<-J", +wąĆÉUÁ VrÚ7űUŞ˝ł™ÂÓ$î$©PÚí»úrŽRq?"ň§%p +âRâő’óT¤$5±i«ČbZ#%Y~1dL´Âhű äÝW€ĺnĂ%N „Ţáđ°ŽĘ˛ëŘĺ·ďĂ@J M˝Şě‰.\ŢJ¨;r>?^ٽӒ¸ÍIT[:@Sqq€ÁĹęűŚ +=(>e‰SDYŚŢŹť#OŢnE ; (TŞŐ$V7†_A:řÚhťů‘,îa‹n iâ´PĘĆHOÄýšmѱ/)áfnĽf#†HúôŚöčÓG“@"´ččŕ ół‰Ä^ýţ•ň =…Á`ˇÚ5IsÇĆD.‡ÜZ~ó y!Âyß”ŃÉY“×J®ś¨ź(ÄŹŞĽ…j`ňÖî^MS,]°ôˇlnçđV1ŞQÄćç—şzíIË-ZÜ—ć{Ž5ŰÉß~Íá€Q]µkµŮÖM°öüŔRL:Z•jăĘA·ĐŚÜNű-âöĹ-r‘÷:°»E¨čZĆ]®XçÜ Ę#6’©ÂçŢx… U_޸Iĺt^§P +0›–VŮÉ0Í%šś®AáľčÇ"ŇV® * čEä˝q­6y΄ze"ddńÇ^ɸyŇ#tÍE^«ő¸ř“qż^{ňhÚׇɣ!r îLěxzŽž«–š +­EI*n˘cťXÝ G‚ޢäé>8ę"D8Äéľ´] óÔ*±ĆHÎHÉ€§Ęb,D0ÂHCŘ·ĽĐXPĘkqšM3‘ü/ńôŔgD,±Şw4b.ÝZiňzjO i=­ÄʆŠŃPÇ I®5yÂ<ç‚íRŔ¬Č™Ţ ŰL-C«ÚěnK–ŻÔ÷qv|Zˇ†á•ĘŢ)hPN¦^2[:ň"]6;6Ú¦ŁÓčv3(O­ŽD°Łn}yĽlKăÇ ˇcö›–/#¬´19"Ý2_>pСRl×™ü«y­Ęb µ° ‹kĺxő&쮬>/ňck_~”FăąhČBbćÖbY7.Ë<'Ę”‰TF¦ÇNQ8nrîŁŃÖíJ(í·ÔŹÉá0ěőŤŻf“LAE9[ä«~7±<`ň9'Ž”ßžŕB0xO{¦JŽ$üÖ€sÝçć8âÄűaŞ>,Ô…‘ü÷YÖwŢuú‘DĚ0©ÇˇW˘ĎĹă€K‰ö +ÁŃážśGÚE +aF˙ěŽmŢt8Đ%mdäχńÄp‚H@zé„°·NŹ—!¨őĄ$Ţ7-Ýb<čţ”;Ö×{š‰dT +ËO ëcťô4ȉz.l‰űx\‚˙j&0V>őÉNqˇ&^< FŃLĚrČ–¸#‰ßt†¶/p;wĺ#Ľ8z°K!ĄgÖx U „jKôڱv‚źÁĹÂqżŕŰ02Ô;®ę–ŔŐŔ‘ÜÖvÜ:ýÂż#˙ä„ĆËÚ†çzţäíÓxŞů"Ť™ +ĘđVcjqËAy4xN śF\GŹâ9Ľ¶‘1):Íđ[żÄ đE¦ăwńc|ÜÉ„růńMI9Ö_{ŽÄ{>— ± JµÓ-2Čnęi¤śwžž`†r=Ďspvŕxű/ŰJ‰6F×Í}f˙ŕŐň±ć‘Đy`@1ŠJÓWáI_‘SMŔÇňę$ő>˘UTě?\?SoA·KćZ3i u`D9ËL¬&.yĽÇó÷BmťÜ(ŻÂ%@¨Ţ(Ëu°gÄPR:B˙JüŰÍ)Áýx.ěđ2xŢ^ ¶ŕU:y[­AĹ4uşQ÷W§;EµÇÁ$¨/eŃHńBe(Ś­DÍg®jÄă~'RřV…‘†°LVI‘ťÇŻ.uµÔ*a\@SźF»(Ř=ş"& ;urDÇ–îbE¬ôéƧ72tă•6†NIpëHÍóÉ×'‡:-[\éˇApÓÄDá7—rŇ™!se2m쟌­•CôŘ®„6!ŔăË÷šA ®ß7óĽ!tHë·ľÇ{ąZUä•'Ţ Şp±“ĺ<ů=`8łžĹphtB:źr@ĄŢ'©ĆÖEš Ş˘ÜŕęNřjI3´ť{¬,Ţ¤Ś€ĎżjT˘ôCn/l4č |ŤŹ5 ,±0Äł9ن¶ś‚ň‚C€šţŞ–;”·s~şľy ŐŔ˘š]PÇ·Z9áëD[ډź!Y°oÚ Áâ›HL\ě;¶pËÔ‚Šş;’ŻL;öMo^F’ŮžXČň’€ T“Śoş(műŤ5txŃ;ş:^`p>”ć”7:q+í@Ŕ÷ a-> ŚwDň§7YJŘŔGÁzëŃ|-Q“3 U˘Đ€~TĹúÄ»*BĺąľŰŮŰw/íäٶ9Ź›Áä ×7tfĹť] +d5Ďán$ÁŚá80 +ÝŻ|n :Ú"/:tś!V÷ި|nÇżŤkµĘÉü *µÄÚ"Dö•ľL—éźđlŰŹ$ÍĘ ‰”‘Xkd$!Ű/!äHÔ–kËaśŃłł»yąýëó KXKńĂ<60ă~:¶L"’›ĘŞŇ´ßA˘?§úRó%± ·¶ń=)‘ĐL{äfg^K"H Ŕ»“šDĐzĽî5Ůéď Ë&±˘D^ąžô9ŔX€”Ŕ\n#űÉZ˝Ädž EŇD¬·a·©ŕő¦¸@ŠÎ‰f—VŐ"Öľ łqĚ®Ŕ­‹ÖEě˝L ,›WüD­% +›Q’‡]śŞĘ¦ĂVR®s«v¨hKŘ>TÁ’sIýVĺâ^?$u]Ô­¬°9 Ś|SyGĽŞ#[4ňáćDý–±í4®&BŁ|{Pn¶ qý±xá[Iú‚ŠŔ—ŔŽżú™•…ř–᥸ÖU‘Q÷v±D:Ä˝m˝oŞl`»8ćQ2BLi­Í„¦]]éĘ÷”ŔIüřdŽ‘ˇnRů@Ă·›Éľëí®ŕ`‰D©jÍXÍ5gq1‘7Ř˝<ČŢâöć¬efK’ŠĚĚuMŠŤPÜ($÷Đ*»®Z7Ë0t1ĐćL +0†~jN_ź$iVu]Ľ1ĆLořqÄŁN%‰ZúÁŹy(ě`¬‹ÔŽ©-c™bł˝.Öµ?”’â®ĹQő ĺyĐSˇA$ŐHěs´Ł‰˝-,ÓpŁ!Ş@-íŕÇ×"Śmśjžŕzô9—Jţ ®á¦±\DŞĽERj†k—Ą% «ŚO<ŇzŃŽÔ$źăalą¸R«č˘őŮŚGÖ":¬Ö jvŠČ}r@Ţ?+ăTéëz±Íl)‚–y¨y +#î¤= +iÔh"g?„*Q˝(¸ĆőÍÓ¤k\9ăOhmŰ“Ű6yëťÜ n˙!vĽfŻG¬-—}őě0v‹(ňřá“[ ;ÎZ<Ň00źîHĆÖĆ˝y(hŞ“…a­ĐîśT´NŻC;yę]‰řCEârę}_ U¤BÜ ‘Ž@˝±¶Y]pÓë|.«HÚWjŕL=źßmĺĎt=¶˝ÓŐc´’jQ– +fq7jŻ\ɤąŐ›B6´g_@żfĎüĹ-qż˘'k<śÜž{ÇŢAŰsⓉ”“=ĄË +ś¦UQÝţÁXá[iZϱ'q”žÇřܤĄikšÄ ‰»ĺZ č”´2±KGkĺ~ÂÔCZ@Ęv¨VžsC—¶®ę«!&’¬¤öĽőŽšŚië|¨ĐŠ p:b©ý¨g/©$ÓJ'ŤŰ>r5°ĹüvÄ´ÇŘî‡@ňÓe<ç¶ÂĚbńp(ĂW°LágÇ@ýY-Qc¦,”SSŤźĘL P ÄZ’żďvŃ•‰·UirŇb㥔Wsw`2ła>6„;±Ă"<Ŕ~řĘąĘ3Ć1‚Śá¤›¦=É€—ŃĘđÚęËXtöí.WYε së¬sMŢÓ1…#”ËŚÂz ˵Ě#ą6ą6‘×— ĂwŽC¦öhĘę›nćÓÁťÍ’98¬)Ä1DÄ­ÁeNâ3y>…´Ź¨ŮíÜ48•ö$ëUfPđľí’¸¸űšyË+ŮBÂtM®cȦ„^QI†÷9áńW;üŘ7˝«¬AÁç"H¦U„ÖB)ô%A•šó`Ý…x8ĎÄÎE€?7|+źÂ!$mVVR®Ź›hJ±?ćA^;+'ĘuuY-‹Ď[ťÄŃe~®ĐSÝ˝TO˝d|d=Áé_<Ż^(¶ ·®0Ű…éeĚćš:Ő™ÎTłIn´-u{Ŕ•îz- ŢŮŢp‘4™{űÎa·PK±Ő4ڤ(p5 +Ű>äa7łžWŇ…ńB€Peq‘â.üÜd釂B±€oôÉ˙ź¶4˛«3C|ËRhaľ*Ëi&5–¤ÜÄî‘@çI#úÝ×ď„Wp˝;8®ôf–ÉDhAEĘ•ăŕaDabógÇĺLŐĺJȡa+sňbÇbµ"łeµ7®%qfŤ€AQJł} €?mĎ9dZőťý5¤Fî‘}ŞđśŘ\h®‚×wýe%KÎŐóŠnÁ{Ž_ăŽF@9Ŕ±וżSV°8Aä¦Q ·’w;.µ€ďéSanź `Áł7.ÎŚŽQ’ę±6f/ö#&! 7+Rđž%đ¸ÖYi×čä I ”>iEDDkrź 1Ň% *jë5é‹ăü$±ÎľÖşÓÖř"üś-B†!FŁ€Č{ľáúHrŕf"ç„dÇ|Ďö(Džó¬ŠŃoU€Ýý•tD¨#űS*TčÚ"]ô<Öž!Rç1ĎŐQL®ą“ ywŻĐ˘cÚóíýŕ8ÔßżE¸­ "ăl÷őádÁŰŔťŇF˘] RéÇö=5:ôż„”§ö)îÜfZ~9îGT$éíÄČë¸KĽźóâńô‘v«RŚ:ą÷†ĆçkĽ__PĆUŔţ)Ż)‘ReG1f±ë !aŐζ}wžĐ϶pńů^“ŹKÝI©ťkőđýrü#0 s^°–-O&ą +ő»rdܲ÷ms?đ\ą­¤ţaĘľQNv˝bş«’NűwÂěecˇI€íłK*"wĆ;ô;3·Ű"ësýHĘ”sn^†L§asu;ˇßę,pC…ę+=‚Ze_OŔ–ż¶ +Ţóş˘ÉL[E˝ë߸PvOC‘~ö +ŘRŻXrV‘$($ű[nKŐ~vC\ăą%ćY%! `řV>Ą  ‰4+Şs_µ†˛ Őŕ(Ťŕ®nXm!c›Hç/=µ8ť3=Ő¶~Ő,[±Ý¨Ž, + ,đ¦:™ç `€,ét~ާi!%/-QnM‰TZY2$1>«f*Hř¬ŞĄŚ”žŠHŁRęúĺŁóřF_4uA«Şžô…‹éäŢ*k q]CŹŻűXěëϧ2ÓËhŃç?°!Nťq€cĺKŔ©TTŘý‡ÖCs*’e®Šĺ˘ş4DśM¸Q0$ËGĚ]Ş><Î[ŕó˛ó¶EÄ + „+…TmÓyLÉă(TÜ€T9 ç Żslźľ [ Ť¸p2żÄk>7ĺË ˙„š“Ńą$P´őÚÓT é«Ó‰ᆵƀ‰î†0QŢř±(_>"ň01˘ŘĽuăTx&-™|‚Ě´Ć'˛|… ÚZÉ(żĆ§ş˘rÓĆÜýㄪ€#żA›Ňsn(ţˢým¬$ř”b^ŻČdČ’V\ÔH*P®QŞą˘i`KŤ¨oĄ"ܶâ‚jd5Ťř‚yEů‡ák!˛bĎ. +VTŃ0¨öůÂCę: Ýc±SÉsë1`T ÷“wů  ű^!¨ďĽëw¸Źđx±ĚăßUśpM㦠+ ií Ý‘lňh´8±cq ÁhŽŁ ŚÇÓśą‹§ŻŠČ™ş™ WEb˘Oü9!ŹŠnŢŠ*śďDůřtaU‚úwşmž9ż1Eő·öjŽ-˘¨1ô©‡óŔxCb˝rO"5'ë©Í †hKwĹ:x‹<ĚOŞŘö€Ĺ®Šyȵmä3Ǩ–ĺŽÝł®+†fBB\üާ?,łÄ6Däŕ×z†śţ°Q4ěŤIŞ‘6Ďžb@z¶‹Ć 5V°n˘~Mm5ĺ˘çĺl3 ‘1ß5żÎŕ[ +ťf^’ěŘfî’ăQQí4»ĐvWÚAsÖ +_$¶żň?ŠÚë‘a¦Nupʬ(Zw§ÁŰŞ!9pľś·łr1f~®’qCrť¨řčąHzŻQ¨ťäë “ď÷«K#ÇTž)şőy-9s3†ŔÖ'ŰnĚ'ŃŰ«®‘&ÄŁ=ˇ#«†2\PľčF8ç" WŃÓÇăuŰ.¤ďj3 ç8°¬’©´é%Ăgk1µcCné)ĽUeűiŮt€Ľç’ŚńFöőM1'äGeÜ„Žf‘×ŐB[K® $XëëQŐöÍ1éÖ&"ąoÂŮ0x‚ţg¬¬ç€ĐľN8dÄ’Ü ‹\1ĽŞ>ćV2âĘ…)ÜtL "ś\őčA\Š— ‚ÂrE5Â3,ůµM‡ĆŠâµĂĚŰąˇd0a‹6€ý0?‡§8+uRă0?Wđŕ7ď7ç?tN9(ô`R|ńâFşŐř€öô:Ć?»néŇÔ¶sąűkJÚËS]ËŤz§ş,vT)^‹kqKAc¦9śtĂc‚»$¦‡ŚQJő8ď_t‘a}ďMG†Ĺ;pďŃ´ŚŻšř„·O˛ń:iSV/¬©'ŤĹPHÎ@`Ńt9ľuxęz4źŰĽuęzĄ“ą˝[RřĺµˇŞ›Ě!Đ'¬O č}‡9k“·s'zzĹJ˘Q śCstZ@® Šé J´/Q˛ht`çyTĹľ,Däf^jq̆šFť‡ŤÇąË“ ®uyÂ;ĘS–éGʦéë{8ž·W&ĺuy˙Ů<áP(ŁýJCm™X!˘†q"M•hÄÝ$Rďšźv4Fé€âřŐEŐ~Ń>„Dś9[“ÝUsŻa#-ŤĐ>*B¤ńá¶čŔ1dśpYěí žWĄěŐ@ űđŕĘ ëLÓ›18Ň^ăŃçfü!‹fx©®éLÔűÎq3…0†őc]§'ŃhŹ»đĹyőÔ˘4ćcŻ»4ĺ$Á+‘Ň4Ą»=?DúŠů9śb,Ťuz@&sŚ2VËYĽđ4ĂFžŁ„ę˝ đ~’@Lu¨ú±fą÷1§‹,ČňZ(éó jëIĺdµ ÂŹR'!ˇgŁm_´ÍZ%ŞSĺ%ݬojN5¸ň)^ĄŚ°ĐŔ[ţ‰©tÚPĐ«^Żţ‚$˙vł5<§ĺ!s˘´Ý¦"Ě«gĆkvjn*ňXŇąä„ĆĽSo %_ô†uş8©ĘÔíŹ(ţ`üđíK5gZ=á>#ËęÔĚT#0SYŁÔBËr08OPNx•€3S(ݤ"cĂĄZJČu4ŐßÔŤ(~0×”ĚŐ>B\İ ĺ­ą‡ĹŞIË %ó“>"óÎD¬a¶â@&Ń! +8*1Íüťš)ç:ŕćęŚó pSÍä!h,6µÖĽXdšIˇúčă]TgYďÍ>°ę|Őââđ~’˝ÚU󨺊öňŽ\Şfm1”şCťŐÎvY4´Âť%ŐŔŃO@ŢĚ…ü¦$çĺHâ4łň2ř&ÁĚ“Ĺ5`˙ă!M]Ś›S#ZG‚&švNÂ$mL\yjž{d*Ő^Q˘äKÉŠ ÷ůB«ë âa–3Î\¶… &řXűOÓ%çÁŃvV4­ü˝€á;+Um%––(Yĺt2VŞîš°vް­ś‡qÂzňĚB[ŻÎkÝ89CY×0Vg”ĺ•Çýt˘źŹŁ”Ť‹¶uµŤysM$f§­¬cľ ÷\pâÄHw)0=Śť˘†á×^yú]ő4)\ "Ôý¶¬»µ; "•Ţ!šěS¬Óc(@Đ1q/ő=•3˘š¸ĺŰ­C ĹŠM>X.ˇ7«ůQsČ>vŘ–-ŇEW‚•™Ň(ßĺµ8ă¦ęąéâsĺ=Ôőó¤=O˛A[EĺË«ş˙śDrźúuđ*jD<{wű D'b}ň|K\Á•jvÄi©Śr¬[„(lťäG°2 cÜ“•Ät˛Ö¤ÂP•¦ 9C_]ńý˝|„ŕ2%ôŃ)¤ŃŮ®cÂÚŐ~Âý hFç äUÚEĺ3|KyÂ5:đIŞëÜ޸Bh.­•9 pmžq,ËŁC?ɱţę¶ŕcîQď:'Íăd\IĽ–Č.17 +},6]Ě]´ČŘŮnźÇ°„ݱ„W¬v˘đůöjÜ—Ă}zQ~_t0íŽctIí;Sí"Ďɧi"¶ŕö˝ľšD…¦ĚѶÔX1u:BîţáˇEđĘSt°Ś%Ń)8}¨ÄŃ”¬‡UűL‹€á×ߥÔoú4ü—ŢptŔŽĺmĽá°ŤűĎgçčŁęR×+6l Qăý·ń&‹¨4ôÚÉ–`L™ť…”„vükťr˝Fń«Čú„¬xQ©€Đ±ł ő»ŤJS™ŐŇDVň7h€Čô9ř\i¶Nn×éýŁQmĺĄc˝RöĆőKż@”ËŃ’b±{Ž}b?rĚc5p©Š‘eôŁžŢ$tyďsyÇ(®% + ÁŃ0µđś ďŔ°c‡ŚyŤyôItźÄ-WS‘ů›=ʇçFżÎŐŁˇŔ?sŻ=*"úŕ{c±şBťđ^Y^‰ü‡DĹr®ž,¨HT皊Tf•µóK<+ =hBĘCCźÍ¤î,Ćş i u’”Čífť”ź`ęéîíŐ*&Äe}&ÓŁŞ#·vDJLĂŁşA{=–Ĝ٣4—Mč_úŽ«Äá~ÜŇvJ˛=|ĎĘ1®iĂä j™Uěüö@Jç1§(ýn…XĽ3d™ÎÍÝä™č›÷u1óMŮĹx–“ÖwTś±p›gbŹQŐłPZ _P ©eD­he±ş@Ń-ŠĐ`č>űV^-3l._-é1 Č1Ţł%í®Á‹_™çĽ˛h C}µ›‰×1˙D+°ř’YŁ‚jr%b˛í—%Ŕy”ÔADđ=’ťŘ"ߌľ(X¸î­GŐ± HÉ {š”€6>É$eqNÍrŁ©´ďíÄ$×Č!Ô•¦˘óe–—*¬dDĺ„ •8lř”Š”¤ĽŹ~D[ta¦¶ľ1ÓőĽÝ%Ă@4śkčzC`°Ń/P(l˶’ú’…'Ş|qŃo|Ú"zcÁ;•×% +q«fâVńůć„‚2®lí:AúůcyĘkĹĂ~˛qčÜOe >TÎb¨3ĆąďźµżV;9ŐĐbľ˛ś‡ ßFČî]$#Aîͱ&$îcWesź×OU‚¶®zŹůČb¸#¤Ú•ĺ!adXčj'iR’“ݨ[‡MąĹ}„üŘ˝9HQŻsy^ďćy×üWŇĘďÇŞm˝9ÂA鏾ź™_f4pżĺ+Z;<1 >VlQăŽę'wŘÂ@čÄËŞV^’üpg±§%ď/Hs4 ßd?4Ž›î€ěźľŕ×::ôŘbsLľéěłbOíGńD,ŇY©”ĚhŃV…ĆËnÚ:F`V ĂýL––ŠŔř„lČofM­""a±~¤ş> nDJ·ÖčLĹ·mxŠ>–ojď8†ź äâ›o9@.íQĄŢ·ŚłíA5Ó-đ$ŽÜ#ĐÖöđ`ö!9Mž|¬=ŃŽŢý~^°|1îć»äĄ˛ç˛ŹNB„ƵDʧ·˝ôlPĎtKÜ4d¬•OfŚŚKĹ<żH×ĘÉjü1°/ĄŔ*NH÷-…–…»ív…ŘÉ™84ţ*&‹«ęž›gŔŕę¬Ń€\3"¸TŁ=H}˘‘›V°ć™5+TĹď‹Ű÷Š [¬Ç~×R©ňšOvޤ°#Cě21‚Í‘€Č Őćę»j-/ĺv`ť-·ý‡‘ŁčµĄ”ć5nlgq…`;¬.łb…×ó§†bYIO´€,Y +endstream endobj 56 0 obj <>stream +ŽQ |IŔ‘ŚŔ·‹DęY\&ŔrÁ?Ć锯ô} +LŤř!ĺĐ»‘éXŠÄ$ŤßCDÜ_TµâR5Ţ ÄÂ×$‚ô‰},|ߍü; p‘A‹Dú)ďţ`Ń’Ác¸óÝÎVŞsÉśíÁ —CąŹ~ůĂřX徢źBůwNhjX$étSďך%m PcbÓEľ¤}ĺ7Pçţßě‰Wb'6%¬?ö\5dť4Ŕ„5Ęr˛ŢŁŢGĐ?ČI%Č‹ Ür˘l'Šqˇ<â:²+ÎívÄŚ4ó0ę¨ÇćiU>śÇđÔŔzësp"ţN4ł]îžĹ[¤”9ażU·qG¨ĐîŹŐRĂ-Ç˝d1΢QŮŕsHŤ\‘e©ÚŇ^‚YáJeĐëřšżX®; "ĽrY=.säŻJÉ]ĉź»űB@řZ^Sąňy‹?Xݰxţ- vá$S¬ĹŤ%•PźąH6(]wâf*ą˘X}Ľeę9m®ď7 ąëä¤v–ç\&4{¸Ń}Ł7—{=::O`W^‰…ČM]Ú@~ż/nź–‰¦Đ`4Dî>ţĚĂNŔ˛äčrĎŰúťô4…zNÎ…·.^‡WAdWno˛&2…qb%Â5hţ#oËÇąÝH¶ăXđőxô@°¶öfĺĘč´] ©×^¶†ž%X~4^éË‘Ŕ<:ý¦ďů™Đßżů®ĂIµ‘őLµWo? ™©Ş)[o€Ň{0Ű5&‡"˙Öy˘oµoĚx@˛ř+n‘€Ż5뇿rňEŘż–Ł÷"ú VĎ9ڎ8č/zuŃf#P§wBŘkđ“lÖ¬<;ÄŞß˝e)^‘P$?ŕ#2±ú΋ţęRÜ^´^ěęú[$>ůOţs‹ôc™­ÂU‚»#-üť +ÓÔÜxŮ"óŐđIvŃęH=ŔXśüă<`Śŕsj `·­Ş/ŕnńĐ2ÎAÖwěkŐO5‰HËo*~Ł_1ó†¬ďI¬sŮő,K$G°)3¦Áx +HȬÞůĆ–tÍť9|®z°> lýű™Ůźkd5i.IRäbY­ťÁŘB.±&ˇTB{Dżj͝ˢ*Q #ěD~ĽEžŁ8‡ń—€ĺ‹çBřŃhÓčyëľ xn<:.—ťÉűóP%ÜxÍ PyĄŤ@ÝâRŤÖ0TjĎěWVNÔá&ŞË2yęDLŇy?*&ǵěÝÄL`ËŮŻ_\fÔěŢťq·Ł†i„ ďĹLz3Ůö‰8Şân"qö´ř`đĆósĺ|Ýú('íb ójD§ĎF:™`@Úwti{"ĹcH¨¤mĂr~‹HlRJt×׹·ę04te¶ć梻ĺeď,źnžVϬčkÇ&'”ĽMŢXQ(™„µ3{ÂřjđĽšj¶+Đöö§YLéi»€amX·r`ńb ËHBí„ĘÉK¶Ov3đŘc˘„ô—)qŹJţÖ`¬0a.É[őź°Ć{î,A¶ŘĎžűâHRÚIH¤µ¦„ŢíʬďĹßʰ°ËrS-ç#¶Ç‚K1‹6HubŔŹkÜhÄrŤ/)6™ůü˝oĐx±/_¨îęľČ®§¦ŽsµCő–vĽQÎşűQ‡ę T7SC/TĆőRţöŃějCˇěUţű}îJ TŔ$r/¨n_­ĽćC2ËăP¸tóćfšYĺ•§ëXŔˇtI×LÉ+h!vi”né~Ż%9ŐLą™E‹ZäE^ěŐKn܉.eń‘Č×tß4aWăË÷ĄŐĹĹú0]ÁƦť0ůÜ…ÖúˇĽWĄşě­]űYŽ5:ÄT=¨Â¶frUÓUĽR)šy­—FIćI5Ő Ś(âĹĄxŘQ5“( \Á#íßz9ŰYÝ üŰ(ŐŚ^Z›×ÝpÖžšlk–ëĚzĆÁи 5´ů‘6tĚÄŤD 9^'P?ćĘMi–ŹĚrŤ;m$ěЬGĎdőŢím2çAË[r]ŢÇř5Ę­¬R÷“–Éô!F%¬áT‡Ă{đwŤsóäa ¨PĎBl»1 "#B*XĐÍĹąh‹ůÎ-’žĂD 8¬oÎę­W®.Z8đđ™o2v/lĆĎ™Ý/ 1îN öm±ŐF â9ŮŁQ7Îť ˝VRÄáŰŤ˙QôĎĽľë¤BŐnü“ľ)ĽUŇéMÉäŃVâŢ=ň'Ę!ä‚ ĎŢŁĐńJŞŔÝÚZ®Ůc¶rdó×€č”d1'ýöc?ZíkMÜ7Â2Ätn,€>öCSĚ_ÚĄĐŇc‡jb<+I«t÷Ľ˝6Ë'ĂΙ(yćĆtŘŁWaµ.ćmŘ*^­Ŕűţ".#ń•Ý✪cRvbňb$ô®ŠÔ+[d^ öA¤ç®O\+Ćsü¦%Żý‹KĹRĄ=8˛ÖHăM„ATYDżpŔD®ÄQŘZٲ w$o·ĽĚđj’áQ´Ľ»˘;wň¦MĆ~°ňÉí[taµńµ†o +l©>Ă™7?łR1=ĽÜ%7q”9 fčoV߉őt†;•Ę#·ĄÇľ%2ę‰[Ü=NEę›!F‘®hp Pö1×z~'Á¸Ţń›-5uŽÎż›cૠ+Ô¶ŻsĺĚOeŤRť8ĎimŤó;§:˘ÍÝ ą[^«?gŮZ?o-ěqn5ěńIjśbŰŢŮÉĹZçť©n\§:䤏čW"Uw4ż˝‹gú^ĐđŤ”j*¶_ vNZ„Ż!Edé:ľ3fçRw` –ß•`⡒«~€vŚękTRÇ: ę…±OßÜ 9€Rň˛ą­•äń6 ňF`«ĹĄ¦G|ćDäuĂ&ć)ŕZőÔÝ'‚¤č3§î5Ě'ůÉqEĄ€»hÁĽcJŚ,ieĽumQzťe"&•Ô8j>Śĺ§%žyÔŐŁfĄ"jŚaS­ĽŚůXڧɦĂüH“s÷ŘgK¶˛ńČşŽżÄšÇbkí`·2ź«ëą.+ßůŚQďWÉJłŽäłÉ Ś—=Đ=ÖX¸Ąnpq‚ľŮúšÇ^Ďf'.ŮT|Ú|ÝŮB÷éţ%˸mmČ#WEĎGf(“ß ˝ +Ź~€řA/‰8×Dä Aah!ö¨ÍŢk¦€ß4h7í)«1鑨»á|^űů«<5ŞŮżúéJÝAşßpÎyÂ2Ů:†ç9zcKX ¨Ü(ßEq QŻ–|h¦JÇÇDüy@´HI˘ăşŻu'×i˙ÁmłŃ† +w‰§"wD”˝·ŁO Ď %Jó1¤y@šŔŰč=ËŕĹŘĽ’ śűGÄ‚ôdZűžGČę;ďůkH­Iă}ëˇőöÁÄέ4ÄIçŮYZ¨ZÎCĆÎ÷]?mć(J>UoşkÄĄj"¶´w±ĺöŽŇů+Šd KUbjĎ5ŕÔŮö˝íŠľ]šâ‡@ xµJá"Ůs‚řc’9râZPůşˇVť›=Ď1ńłîxŢ’ yěX9SÇH®Ľžó"}aţp…/4C~ü"Ę•˝•ZµŢśxçę ×Ć5?Ą8ňcřĺäq)Tśŕű˘=ÚŮÎI©NcřézÖv©ŠĘUŠĐ]2ÔŢ"=ivUB2 üÝ/ćAÄwy%¤˙ Y.RW°źűCÝ9®˘"b~(I$$‚K°mH$ÖWËK=#9C*±&=ź“|O˘/ý'‰#DŽŕ?,Ń7­"«H#Äe˝?7‘őJ ,µ—°Ĺ§ŃD5DŽ=2 mĹ Úbű•y˝z©ž=¦ÄNâŻPŽÍ,´ß`Ů!1#T­NŻŮĚ‹KIŽę{VÉč7ĎűNěšr¶Ą››b¨‘^š6UěŘkm ůßt‡_lY"-ŻůžW……ďąđiqä±ÜzLf…EÁ¶ů‰źiwĽÂ˘řëł[ţÔ‚ÇtepNjÝĺŤs:ž×Ä„î0Ô#|{ČÜ\čk?0‰ířaJX˙GŢDN ˘4źŮs}$ą*ţĽÜHĂ„ßĘĄ DĆ÷žĄŚŻ!ô\´˙ SDŰoi(QŐô\ÄSŮHŹóđ¶×Ţ5F ÓM¸Fúiv„“J†ĐużÚ& +óě©“+Y=ÔkJŃiş +:y$čl+Ćbľ?ĚgĺčŽř*ńsŇśW˘¨Ăg’{cěaŃ8ńĽIŕ‡Ź˝‚ç5”R‚ůŕ:Őőb¦ÉBÜ ěáÜŢ”2Đą,v»ÎĄ! ň ×&9*14Ú"óI<®®łˇlˇ•ň#lž‹Đ3L-ďdßzđ|ÚGĹh%cß°É);ŐN‚—@ŹŢ!˛8%ŢQ0p§©öÎsđ)Ť‹†$Đ?Ź»Ľ ąbCÍmŤ[”l÷7§=«ŚÇ‰{‹ŚčćZ´q°?ű§‘WEś¦ů¬š“±©ăÉ»v&z&ňÂx–?:+é‹)ęUg +áčeF±AI)ľ›YçwŢ*Zĺ<ńęŻ1«rTŠÔa/&°Â ”Çt´‰Ť&’q PŠş­JÚźZÉ 7&?7P<]N_X¶ĂĂš-#h¸M§*ŻKŮ`M/ŐQµčŔĎV![”é¬Kfo'ŁÓš­H¬-ÂĄĎ0:ň~JB•#Ф]l )Ž%¦ú‘łiLżá#"ąúŢ«ţR1ŞkÁ]‘[,ąT˘uĄÓ™ô×\‹Šp·"p›µźő‹Ë3Ąr‘„MQXĺ奆"hđGĂP—Ë@YH®nXÍ™+á~Ó\ôŰ´RçTŔT0‚h–LxyĹ„ +sĚ$ČŇĆĹiTÜoN›@L€KîHJ°Pnž9ą˝śgµłŽBÝČâ˘>ýőqâó!G‘Ř)Ĺ´i•ěn™‚R¬2;śˇ|őśTrż€ăsqeˇĂ"˛z0%ţNĎCb7J•Á‡D<Ń[„ˡ`ŁxV@H.{M‘ßxŃvMl榴JeWă±’/épĺ›ůÂ;WÄV\ýR†KŠkÝĽ@­R´Yű‹K-ß´t6¨››˛ 6Gý^÷Î ‰™ÄűP|ŞN8§čá˘()čáŮ+ ó•—˙JN=ďŁŢ®×´ŢÇgĚ1(šżĂ'BMŐĽ»dAŢ>Äâ•&ô®Ś!ăRŚ&¦Đ÷9\0Ű‹S *6g4D<ÓËęŚ8Qň@ ň¸çĎĎ9łŹ}±db‰/bÖxňžŐA fŕřŕá[ąUÓ-´d­f\Ě,~ŤŁŰîG…xqţ¨0üřž˝W"ĎĹ«dĘ›=×8»g~ 耥tkôt×G,—…Ň2ËďůÎ’D^éâ˝5Ŕ˛śëÄúŕLŰ”ŔGť­ć|‚mŹ ĘČĆr{ąhI'XHL#%‚MtĆŠńĆ\L2Ť ˘‹ýĄ[®žPůŞe¸&ë¤#śĘßH=Ĺz€&Y×|>Ď vűŰĘNa{í2b˝C”ÝŔ$Ţ"ŢŢJ…äŐŇĘÔ=TéŹ~˝K­j‘íe‚śîĥΠD‹Y×±Őm<ަ(z‰L6¶ĂâR(›‚ľRéK˙nŹä80bŰÝŃ,ŃŽ¸N{Q٢Ů×ÖľŠÄöÍ>/+?9¸dvv¸*VÇĄJł`ݶ­¶‰=I€yÄx+=ó'o€력W— sŞrÖŤĐŃY,Š -9ű!ůd´=x˝G3qî^¨úâߤ(BôN¨Ë×Çŕ}OsMŚň{Dű¦+âý…±™űy7µÖřł4â ·“ŕiŐĘ‰ŹŠ™€uŃŠ&ęźŕÍd:qŚP#őfnDżőHmz;wXżí8Łú曎ŚęˇňÁuŽÚI¸iÓ>iŻĽVăľńQaG°ÇbŢ´ćh"bŚ#8Ä9ŇDjúJŘecô-şTľUĺ­ë~Ωµ#U˛ŃuŽTéű‹Ą}ĄSć łŚ}L~Óîͬ Ú9Ě6¦’rö@±płsY›0Ósn€ŚţĐýńĽ0ŚpPŁľÉĘ%„ňŮEŹT©‘‰;·jâ”&ŇĘy+Éś&ŹęU] ÉĚÓŽh'čŞ# ÉŢ’ˇw̨̼ę¤Č©x÷µq8fxé@¤ź [Ë/i‘)3™ţT†ńO·H˘i¨@nŽ/8ű+ćÖ›KRŹ­L´eRÔ~ýĹĄä¸$_^`‹7»śčĆA>>Ă‹Ĺ"4ý {Ž÷đ4¤$-ÄcyťS•Mđc”ďťX›T„J‘8ÂŤ¶GňJĽ±ˇ,ćĎÁČ‘ăä zŮręĂŢMËcĺ– fgţ˘\ŠT?«4ĂFĚ$nq%żhf;Ý•¬Öě%űťW’`×čcz.ćŻĆKňJ*졡¶ŽęDÄĄÜu;KĆÁĺ|,j%ěý:mÉC¦&Đt «˛ů”u™Ł•rK[ôłOä%đ ˇ5DŽV_Ż&­# mö+B4W/Ż3Qáęďąťüb†oeRcXwD«Dl¶©@ńç'6¤_\ŰVeKvlUŮ›öÄUÍ®¤s‡]=‰~f?GŃ«nő\˝™ńĄ©®Ţ'¨ŠřT"™Ë§]âý+Q +WŹŐw;h‹ L°r~›SmÔŚĽb{?BQK=”75î¬.ńżÚďÄŽ‚·GŰoĚ,Ś©»Ox.ą­č?퀨{š~׬–îh Ĺr/q-śš–A˙ÔB‚éQU•ĄĘ4´p2–·FÎő"Lhá +]@sź4îŽ ćđ}6äü8źLLIk Rl%•¤sžĐš +&ęę¶ ĂOU”sŁÂdfc¬^HüČ*"˙aOöóĺ4F9r—˙ÎÁĄ/ Ľ)ýVK¬#Ń+BD^i˛Ľă!%]kqK‡‡y¶5(ŤĘÇöbń‘Gm‘Ŕ؇‰žzÎej‰@‘±<•ÎÖ¦z59}ĺŕŮSÁVź Ś +şś±żâ§&Ňô»¶đŠĂEđf*O•((˝+M@Ş^9ńbg˝&ÉŐŽ Zcx.4€®<)*r­tČ©ź9CŞńdI2ć-Pšk‡2˛^ÜPŔX öĂşćö Y‚I;;lşĎŞFG‚•H%°äw?¦gżç2úΫŽIńÁ° 0ë]ÜăR'Áá±ö/OË}x´u¶É"‘Č1Z„ĂŚßd"Q€ß^F^~˛žşHÄ–űÔŕ…§#$RĂ·ĺ•J4J0 +úMß- *ć¦{X»•7ę–eşö<¬„SZfc-§ťŐĂąŘâą Azč4Ť T,ĄĎ¤kĎ™Ťäb׍ŐrPíśN¬@d©×Q Ŕ!Ě-9aŔ¨A…Ľ:4Č©<°Ń±ĚG:ޤ‹ńĂ‘MŹTß"ŚCö3Ĺ7ą¸]1¸4I&âîPË-ŇĺކIŞJ"”¶¸ÖŚmKńrđ9 /¦Ž.ŇľÇǰôH`śůÓ „r«Ve7Ë’( ‹qč­Ľ ţއDf%ÜĎţ +Qěw‘Bë%©˘*6wişsCŹŃg™D,t•+Y?Bäý€ČÍŤ¦Ľo&CĘ ć‘A»‘"$fîýĆ PÍ=ć´ó=§ëm®ăĎ8ĹéVŰžŠÂś5뜪ë`S^Ä?ĺRh´,ßéZ÷}Ś›6ÝNʵř‰ +ĐÄ˙Ä0AK €mIË›Âń`MXMŚK FşąLRuĂó` ŇÚ•śn0ě ł’CdR€˘tÎz«íZTÂXŘ\<2ŃçU/ärk檞J1zfXŇŘĂSŹ•Űü±ąřťřáŰ©ZčÜWi3™8˝aćĚMp;ÂĽŇ];oI„f2Â! m%ÎŘTFW‹-˙űä²TžŚ…ň‚f€,ýś¶‡÷ŕâ{\K˛¨ěnĂ qOĚn‡1kęüÄ溍9q`"Ѩš@¦¬Ŕ(éYˇ0Ý||/l›ŕw í5˘Űu(]KŐ¤ĄKŤ™ćs Db^†¤4đňÜ)Ç|fÂ@ď˛a źó!Í$°‹[,Á›fR[QE&}aKćŚú=ô[ěJŚéeą”‘?µ<¶&m~ďř6š†Ş˝ VoŞů,ęŽîŢ KtfFQU[٦™T‚Úˇt%Ě…˝p``Ŕ‘¸Ňd† +<“WĎň‡D%[$ĂűCDo4âŃÜ0Ü…W˘2Éđé …cq‘U2ďgۇđ®Rv+ď'Ńoę­áůňzY^éÎ]K„‘ň#Ś´¬…­„¸Sť©+ńl"ĂĘm€š=ÍăÎD «EĄ´*Jń˘!‚€@žůU­—ÓO¸&&’ĘŃÚۧó–D9SţVҸ!ÎyOę!1JjLH±ěQUµY7Ę­ś­ ”ąh¦ýŕŮűž‡ČěęŰď9fÇKnČXČţŞMă‹ć‚Śpóśo€Î-×ývžß¨öÓrx?üę˙!zŢ˙$ę—‰d i‡®#2P:đĎC«ŠŢ§čCŽÍОME Ł<‹;xrÂY­ ŻţŤ~Š÷•Ë®RoŽÝóÉi`ĹžaŢ qKV$ý>ZĹ3"ň—|«W¤°ýŇ‚{”бç + jÓ=JÓ˘üaŚ„Ră> ŃfCJ MĎyΛ‘ě*¦Oľx6Căs ôA3J®4ţ)ń×Ě4ű9ů""%ńí=âaL>‘ůîŐ#Čyčkˇ"ygZfQHă˛NĘ“Č-"† ­¨#•“Ţ"®Eë+[€ď"ËuKŢL<ü»ľp72-ňž_xČ‹~ŇIO·3UgCB2概H§6§ŕĎ$§şbq°ä R^j-ĘŽ@ßMý˙!Ú5ÚHX˙ŠőÄÂ2DîŘ«äkÉű«YRťÂJ\Z†ĺˇgV˛í‡ůfřaؕ܊h¤„zˇ6Ś`¤˘"źdj Ĺ4^Ý@{·Ž—«ôńŞüŁILnú<ÉČ„›Ź“[—hŐyxąąčfŘȸޒżÂűÚş†ČńvçŘę~D–”b¨OŃ8ČénÇ:‡ŕü™;Bť˙dhĹďÇßʱđ–B ząf,ն̱DĂ"FR+Ŕ\©v>iż[UwĆr´çXr„b VÍč皏â;ú(‹ +I0ö0V·j‹_~˙Î=çŰĚŔ/ۆäá*F\ë–ÄË&T§»ÝmŽWN’“÷Đ#8Ů +B@K@´ß©™cPżşżŕ¦r;u®U(*(îM/©™«áwě˛B—366$őĄkeLďZVndgËşŹ™ÇBÓH[â`±ę™U'?Ď`ž©7€łj ú)óöÔíUĹ-şWÍĚĺłňęż©·dŽë ‚Ú…¤XOŮ`.9[­»´öąĎYÉ;YŇŐF˘©%Ť.m đ¨ŚDŻ”ĹRA‡}€Ç^ëŠőIĂKî's)·Ŕ©¨ +š•i[śó,î.NXMä<8’ŞÔ`ňÄĆ3ŐN‰.¦â˝ŃükD’7§ŤX‹lď0QŽtnMC}łół˛^ä«Ű÷–0ü˝© +™÷ćŤ2gÎWÜăYýą…ŐYÚŽ¸D/?u:>ŢĽ|ĚRăÍáăk94É +"—¸tŢ*íHLĽÄ¸ i%děĚóśąĎŻď§•ţŞýĐ<ÂlbđÉäÜ·¶=° qR«­Xąä^Á›~!˘®„ȨQ@˘‡Ôó‚Tér,źĘH<ä†ćvŔiĆĘÇ"’q‘¬3Ź2MŞ'Ě$¤ä]f5ŇĽH˝ČE`LU"Ú÷ŢĄ ›‘°FŘâ~s’KŽLń,ĎM‰9ľ+’Fśx–7%¤‹ŠL¦˛ËBç3˛Ű_0#|‘:%@G6‘€™Ł^4w‘Ŕ‰âHĽŢdţ ‚ďÓń jŻ-ú‘0C2Dr@5‹čť=.ňÄwĚ +5ć(ÂMËmLž…“{AxbíN¦‘l®ú­5î(÷zš}vš7‘@bkűđĽÜçĐ5ď ă`ţµÎ~\ë<Ş:şťÓ—.½e$?v‰q;» „p-…p7FUTcż7BÜ‹KÎZ‰M¶:;>˝Ż#–®4·”­Ď'ËnNÓص§_w˘Á‰Ťć‘~­ îQSŮ/ŻfSEţŕŚ€˝ŰsDVŻţ4îĚp‘-ĐZöµplţ!k6äÄUĘÇ3`3ăQŻJ°ť1o\“XF˝qK\é4–#đV^ą ĂĽ* Şç'öcÄ·ł+ź»5ŤŠęŻ©–W¬É© x7ˇ– “uQŇ&ł˝@sĹ> G¦ µL¤TµłŤR]-©& ÍMsŮB-}•Ü4··çE4Ç«AŁłˇÇ´†*ně×Á =ĺ\ąP@źYq]GŚy§RŇJ14΋™ž)1¦ä㬖%źzđk$nFÖĺ.BEE40®ßLDZŤŐ7€·f^íńŮ2Ťí$ +Ź„3Rľ_L­í8ˇ¤L!ĺM¸®«ÎŠ( ®¨¬ ľ¤A”/§đě}í<V?:)őqp7®~Ľ«PôĘ•,­ÂX*c’ÓYŘGëţąé$ôUÔ&Ş®¦ŚâŹîř”¸tKS¦Č$“zÇť:Ţž9\QżśA°ýqőřÂ>S‰ý>j/ö˝¶Ĺkśµ1 ĚwYíÖÔ+±üińUĽöËżUP´Qťłvą–aż3iű^é3?•>qĄęë%üí™»˝ţÉÓŔXĚ:=±Ď´Ý(^q¬ÝćÎŃ Ŕë]®÷ĆzkDăŹý> 8¶őe€cÖGvé4ĘŻîý#fDT‹DxŃ`H´_ącž˝ńj’‰o‚ ŇBÂ;ę°ßvśB}óG +E(x7’YťŞë‰IYu—ń:ŕ«ŐÇ玙ďr}˘-5ijbĹJB}#—ÍděÓ7üÄTO ż0ş”ľaÓÍÔ†»Äđrő5é\OCľĂĺ*Haĺ2~-„6ťŹÔ¨nS0‹4laF.U@¤w&\…IĽ}ᵫ€„“‰Ĺš4z% ýBŐ>*Ťf”[`™kµ¦1quŃĄ"đÖufţ}Î'c˛ĘÜ…î@’&Â(‹8›#GŕZ TUR˙“s’xw"%1Źţ0údB$,˛o››ó"0·.»Ź?ąPˇÝ_S:2týĘĐÚ˛0šö,S±ŤĂídŞ6¨ŤŞRTËÉŢÔEL©¸!9­ťASĐuOŚJ}9< dŃ\lTŕËÇ|A_jUZą×ä[QÍČ0qną+T”/&@,<”?ěS‡t=Ż5IwŽUEH•OĆi„… t“WmśĚ=ňL¬W°("†¸´uľĺ%ź%P+ `’%ů%fLŤ† ŽB4XL@Ž‹Ů·J"C3ź ŤqľxËÖäigĹafâŐqři®|¨ŐK¸1Ş0§”ZĐq f¬Cö:iĹb8P3}ÓŘ<™ĘLŻIđĘŁü×LĘ!".*Ćç-7Př§L/s¶ŢY۬˘3’Ţ)·Żąđ÷cq·3¦JakÁ¸ٶȚXBńË|;äqĺTň¶1‡G×&‚@hj®X“&Šx‹25¬fa«úλŔ–·Ę1Ż +ľCÚ}* +]˙ÝčĹHepňĐřXľ ŠîDe=ÇqóÎť “)ŮňZrXî°v` +‰©č•zx¬dŮÜŰ A«ý×~‚ŻeŢoRC‚hCX4_Qp?·˛\‡&U=BĽJ- ŇDÂŢĐ(…žĐ•ń¦ćëłIm´ĺ·őY"ťD–Mm\”U]°>ϱéŇ^;ąXµB' ´ł)°d¶Â–‚l¬Ť±nAđ‰§©-o]×­Hß°HXĚŢő1j3ć¦ÂÍséşźÔ1>DůŚ÷CĎ‘›Ť řĂW96IeKný %M«”+‹q DŃcÎČ#J‚ĄÓr73=Kâ)-¬4ç׋`±?™€eŰČaĆHś.K¸-qŽ ©-Â,,Ë'y†®;-eÜ™;ůSXlZcúf(š€4«[${m‘<cpŘŃ 9V)iSiG–˘D ¤Śü*QÔ5ČhI…ě ValëV¸ź™Ť(ŢECŘ3F[íčh9’¬ĹirŠsĺűŽá̡ţĺ7ť)Ńşčk‘®Eç°e]_ăőĽWüOÁÄť¨‘˘Ű¶·ŃŰŮĚ -"جŹ´gů=`]ô{1ÇW žŚQ‡Dc&Â(Nú1h°ŰDúy~ ćĘkV¸~‘GÝŮ/Ź»ăay}N›%X^•-ŕť# +Ş*äĘ ¤c1ă-ń| NW0ć$ßâ9†hJdĺx~5%ŻŽ9ľ‚őf‚6łKE’‹8Ň-ÚR:{ú„ÔŔ‹îE<] —kNá1D®EOhĘ$ EiŃDš6¶RÁí×hôv6×Î.Š:ęÍ+@Ľšë=©'P"·Ôť‹źH!v­g,ٰacíĽ•čőEÁŚë1oĦű ö¬(ç„#Hą}ŹôFŚL péÇd:ˇ©m:Č…p˝ŻđĄn´Ç‘Ňęřĺ /Ž ’ ‘ +čĹ“.1.%Ž+Ć’!´äf#NµŮ™s-B–ßó”Č3)u× z¤kÉ6Ô"ŞÄÉňňP!4˛¤6ç~•Ř®›ŕä5%TúT<.žĂ.B5ł(Nn$_ŽŘ[ ŁbÜ٢¸ú$š˘dî%gÇĚw°íą±śŐóÄ\R‘»Ź—Źš·kýiśµ˘ä K'VˇH©rÍYEĆżp?ľ=|{‹j8Ń‘©˙Äîµů¤¸%^ žv(®äáL]•ÜBV伣 Łăř1cˇJ›Ň”U]ĎsH•Ď­ÄQµĺťÓĘ„ÉÚŠűíĂoµů˝fíÎDx­¤ 6>(D(9C$Rs0/•˛rIUśËß ?UŁ«şĂÉš.łeË]KQ’~G´™Zyó'E…-„˘ô]h‡©+3Ăš^úŘ…‡u˝\u·8¤U{Ĺ"]'mp©ćňĆ©%ď2h™‰fŽS-+šäčäP“)eΕ[ +üöÍ5–Ý-jKqN­ăÇJZ× ˛çŘב˝pý©÷Ą-´3”iďşáBA›ýĺ¨ĺë#fľĹă˘(üö-Ú¶cžĹľÁ”Hž=ÔÚg×|-ŐuÚ++ +&5^HyX†# @Dʬu&"g𫩆IUc 7¸§;ĚvdgÜä}Ęz[Üđä)BřÁž©”sʧŤń(fl%F*§ľ¦EJ6äÄSńÁgîÂA$ă R–;&őš…ÄÁiúä!ß§.Rűd‹,©EU•kń©ęľř•“!ÔîQ3\{řś§Sß|Ç‘OuŚ´Eµm(Ű×±Fޤ˘ ę~Ç'“ńÔU—(bk”?“|‘FfŁŘĽ¨1Őň9H%¶ĹÎůM śŇI„bł˝Ë"@Ę#.¦Ň?±Śo–Ąŕ®Ô/^_ĹWěIç €~Ő˙NÝ»íl’%×a÷řuC@Ě_ąĎ™ög8ĽÚ– ŮŔ4 c@‹„EĂ54h‚ŢޱbÇaíü««ęÖ–4ţň´ă±V[ʰĺµÄf‡\ăŮ’ŕ~;#ůß4JBŤxr0Ý)Ś˘-­#čEé^Ly #Đťš` +ýď´ćţEĺ‚/Ü®ő˛ÚŔäD”Üs ;şnŤś>Żŕ^:O>ĽSI$7p%»^\»(6’Ď şaĎUýR4~®DaąB¤s9ç&e­4FĆŁÍ] ©Ą€óÓ“Dˇ‰ç/"TY˘ky-˘LĘ }W‚Ą3{®ö^ukÔ†kűžß>JŃě7€ä Fd}“ďŘ™ľ(űMô{|*&çôÔ¶ĹUäHŐ(,fΡtۧ¦Ú ™0ÉŢ{ÇŹKÉ[DR+ŻĚ©;IÜžŃUmTĐNŕ®S?ys Vřâ—ă7ćÝŚŤ“óß’h×°‚ ࡊ˛'Bą8¨ćb“}ě#ŁBÇ•ř)ś"®´‚ĺ«ŇvßĎqv=ÔPÖhšżÄ‡…±˝Ű'P&”Ź{Ž49AŠcÉ\PĄńҤJĺ8Ťëç:ü§%?çôżŹs._Úŕő·V^U˘‹Óé<&XŠ"®¶Ԣݝ­lI¨ă‘ Ŕ lБݣäĘŐ]ä–íŔ\+l·şePŕÚT’c+Ü쾪ČU ¤ýR#{'ňąks.–zě~šop•×ĚiÖ{oÂM) # W^nĚ#˛÷–wF1TúŘĄ¤äşŕ… +sVvyýLS°Íč[ O׹qéÖvŮď“Îşż*]€7ŵ*řÂŢh ˛˛H,Řj)˙z{3Śk}:ęx,I0y?0jń¸ÁĐľČâäösđ{Ň"cę‰\W®=Yőd ŮzF҆ybŔŁţC×uî81BjÓş?öˇ.î9 rWÂyqfgݵe­ îČ–/¶kH#1-t^NbAO—PĺĘ­ůÄ€cäB"í…·Ú +OŢŕ'¦µ‹ŤDĆM‹(q»^q•ݱąĘ¨óĄĘzîđ}ĽŠpŤ"·ˇ"ż7Ç +\˛ł«+ęśď„Ňö.ÚŰČČ‘Ę,ëóŇ6=řő(„Ť«VYą§ âĐ!Ě-I”˘´©F.?yŤčžEDLű:JđAł¦E &Żĺ8űĐ… ,‚4GeŠPłń.·öńtÓsűç‘’üýçĐs¤Q5©đăîĘ@E’s˘ŠĽ›}=.Ą#ľ±äFţ<°áđLŔsŮýźEάÎ@–Ô÷#ď´óŞîŮ=w oYţÇŽeuÇú”\ďÇ·âi‚{÷ŕÄŢ2*F†kYÝŔńčđĄă±¶ńf徎 Źüf¸O ¦8ν‘ç1KI«~ąěÉä)ň ´˝ç†ĽÍyvâĐ!&#5ýŮ=#`S«č1ţűŚů‹%ď¨?Ód!µNĚGeˇÇťÍVĺÝ^G'UI†słRţ!˘˘ =˛éĄÍ<˛ö÷ĂĎŹEĄŕEU X„Ţr ž‰Ú¨q! q(ŢŮĚYóő}Ě“­ ł,ëOřqĐđ˝<¸]w$MЦ$sJ˘|đň¨ +Ižç¨-QFŁ’W‚ÉW( +á™*.Ö:6~Í—B$FfŹ^58 -َ¸ťâŔ›’ă)޵]UR®ł B˘öÚP püK§‹Bµ]gĹsńď…˝‚D¬¦„!Ŕč·¶5Ô{7ÚśG7ňW”)‰cy[ĐŻE WšŹĘ‹)âŠ'°pźu3ţ4Ü~xM˘;4eă5wD~‰ĄČ{/XPU92.|ĘFEK‡cĽ‡ÉjÉń;ÍĹ dlj$ѵŞŢR$ęG/Ş·=&RjÍrüTő¶ČuÝśft-îqŇH‚hhî{™ĆCšôKîoa¤6č-őÓ#úëÚÁăĘ>‡‡Bʧ& tÇK+Ť7’‹ýč…!v¤ú¬EIĂ GŹĹŽíĚ%šöLĎŠOˇ‰äČĚ…‘3Č-×I†Łő;ap>1'‹¦ ŐafÍŠśOϵe3ťjW:“1Ç-Sö®‰ĹÔĂKŹE KUď缡;—‰żrŇÉ-rťßš5vŚÉ#;&Żj›50'6 ČpK§Öe7e ¬±GĎCŤ‹`9·xa@_ňÇ~á÷ÄöôÝWlO˘”XÎÖäí€ńŘňäG9ga·ř  UË‹~/>çugž°#—€‡ř!°/Ď\âęäIĺ0Zg)§aMŇ5„ń‘‹xd9sÇDÎR’Dóµíłx”/CK‡hÜ÷RlőSNLlú\72‹ç˛ńł{źë. ăEĄÄuqt(3_ Dč;–×c3jnŘ޲§ŰŞi¬|×ôJä…¦řą fł>1+ęɲöČzŘ|šxA@ŃŁĘ9z–jh5ÇŚˇS~`›”ĽeÚ)ÝĺL1 X ÉŻ‚ţ‡!_f¦óq”)«íK ︅ěĘRőŹ Ź}+-]Ç^u‘đţ;,ľ©áeP@çÎŐ ŕxb ŔGfQPë‡Í‡‡?p?™»ýŕ]ŤЉíaLŃF‰p?uź©Ç’×uo$áž©7§"ł>†Ď´ňů‡ĎŮYNľŻ+íżoÍá2ű‰ŤâĽď…ű“#GŚí Zt‚ŔfĹ îţúĘ™ Ľ˝Ńť/ «ö†•ę‹öÝ~EěŻĂŞís*Â<ű7ŔŹTď W”(OÔ}ůÎ/ŘGŃ·C×I}:@ąU­uTyąLl=€Ößž`ťQĎIjq­ć`{–¶˝QĽD$Kü8¤÷lĽ)źK¨ćëźDČË ] WŹţ!Ć Ľ¶.§ş w5DhĐňź\ł+Őű=Ř +‘ËtÁD.Ú&B„$`,ŐDł"`󎢸–%Ş@(÷ăóBž·Ű‘÷ĺ¶Ü¸ ‚…‚śDO^¸ź&ŇňőŐć­ĺ+¦:&„0ěR:eűX‘¸zTt!¤—vř"%Ö™JęÂ9]ôúé«R~Ö™fg‹Ü Eź‘Ga-€Hť/Ýż†őóRĂKKX#}{1_Ă”0ľ'-{޳ѰóC"SJł-¦!†sˇ+»áö˙Uč€Ű3W/Ş\GniŁąéŽä;LnĎh/z~ŚŁ(ˇ®ĹRî%4/YŮD´QÇ‹ÁR4)˙řĚËEîBłđ¨‡ĺ@¨Qr*I·¨•ĎFkéÎ+1 R~‘ü¨Żš ů SzôH"př^ʆťbÚĽQ•L´*w… +5“sUÉ3TÇú2ˇě©Fr˛)-ĎěC$ţ0±nąÓ1… GÍíÍ‘zv–28 +`Vźkć1ô2ĐkMÁ%1Ş<7E´ň[/[Řo‘cŠDď8W4ăRO`xďßÁ(ĄoD¸'&UKd(vć=Â9Ţň%¤yQĹoUµ…ZÖŔŤŽŔ…Wß –Ą¬žť]ÍÁsŞKŐň +|‚ z8Iŕ*z|’­Ş˛Mŕ^ÁúÄ‹2€0Üq*‚:†ÁUxčŃŰJ4á°qň)» ÁfĎ#ŕáË "jdDŃ˝˝ÜƉżžYĽFuözŻÂę¶;ö …Š…/ű{ ŘÎ8GľŁĎZxř]7‘©Ő^ň×ŮWŤ©|ýZrg±eośř_¶Źϵě§Nź»öT7ѲňeÇčË>b-Š “gRŔhĂkqb † H=3˛•´ŕČľ:n¬Iď!ňL´X›{ČÝó-r`fBDböę:ëëĂÉ „›w'Şś&"ŮŰŚ˝o‹+°AĆ%1tZŹő»V=÷iŐĽź”Ő[˙î’öW¦Űű}M\ĂŰ·~lÂÄŻľó'§lűŘu0îCląlĘgÜđIŐDÄ]Úgýŕ'ŹëĐâ€b®ĆŮĂßóÜ;4 â“˘Z BŤŁ1rEŚ’'Ż|0T©ő»â]č:ąF4Ť›ÇĽŚÜ Hdiî먠@jˇĚ±ĄůKÜŃşre!†<ĺŕ¶,&¸hŽ:ăÓŔ[¦i&MŞa.âáÇ ?»ž’ÓűöC«py ď×±—‚“óĘNZn“ö=Oi15ďůU2­o‘Î%éííK +©QW4˛ĽćŞĚ´öCĐ+äó¬[T ™ ŻÍpküA+ňéä އ ®%Ă-ý‘\˝“5Ç˝’ *q˝9`Ů0Ľ™Qgon”Ľ–$\=hP Áh•ŤJ„=n‰ą‰!˛^>¬zPŁŮ®¸§8˘z #ÖęĐgóŤÚřˇ§ŃXçRJ¬Áď\ě„xíioi浞›č`ä8Ôłę«R}č_˘űí,Cý nř^‚u}¬wűGÎw,%~u)ąl®GăH„ő™Ů„ÂÖB˛2«föDlpÝťÉOĹ”cndQ5“ż›g"Gă‹I…¦V6ţÁä7Oá,ű(멺ĺ,Íš†ŃFë©Ěr)¸Ţ™¬(ĘX}©z×€9LÝk—82¸V –GWĽ&†ľ9™‡ę¦M6űí€Ř&ÁL}–Ě0îţh n&MĽźáBx{:x!ŃÚ$ôđ%Ć™·K|ŢĚyúi~‹]FÂBm˝ÄŹŽśCâ›Ä»Źk‰'ş; zŮöFH0žĽ¶čEŰöQńKÝ•p”/Ĺ”gŘÇŤLŔ"śh¨Ą$[ÇrA?é* —ňC㢝…ŁN0WčĄ|î۰sč±&ÍčíE†é;ţ~Jr:i‰ĘoЏ’ýô Ťp  şVk™id[l- ÚĹŇ–FśJ¸áçš""NŻ^7rEĚ\©)íQn tr  uzçĺ×đh%=ĺľbŽÝę—Č>dż˘rc"rI'ˇ˝`y]HÖ`2'§~Ó6¦÷…MŐKŽĽě…qŚeđµëä S;˝š#&]ĂĘńł#}nĎ0t27` YaRĚ€ţM”fĐu`{`B;¤pR”p‚:ĺBÍęenşűЎŤ(/B`ţ 7‘ Ö^őW—k]Ŕňާ«‚Ą &Žô Ń˙1‘„"ćóžŤFôEEł}ĐČN`hp=­ţpůBá`Čr ÎiÁ=UfËa3kçINéJzÍzb¬ˇć ŻgÇĐŐ´č¸ëŻ€ţeŁ®&WĄŔťKELxĎŁ Śčn2±ăq=ÓNQ%˘;Gr;¶ +­;#ÂśˇvŚXňčÓ©‰$öYňěĎŞV^tŚĂÇĄN$ŕÉ&·ţĐý‘@»şţădv/hŢ´¶>4Ö.˘AŞjźřÜč-2EwĎŮöX}5‘ş.Ҧd+]I|#•é&h¨†µíxĺĽd4ôđ&GśŁ/Ôc˘Ä<óZˇgßR†Ý,ĹÂqm[š°°ç"Rß=ÇCíöyHdb+ Bâ~V’ňí DFÇE·ßąŁ±ľ­ĘrŢ\uĚř݉ͥł”QĤš›6(K0qDGK`bŤśŕ!KÔţ(Rśł=ďF˘Ľ÷Í1şRó*“:h ëQ†5YÁhÄ6CRÎ/ĄŔ:“oZá {"ÎąđIĹ`Đáţ° >|Z˝x˝ö»ť§%cŽćv'ÂTĂEç8 +Ńý¶ËłTIÖ]ąw_žňg+÷p’o&|Ó`N^r0™Č}Ńč7’,ݬhú©ŐAQÜ(şČ­ÇHęľ#9ű­ ˇg×âŤD žźVĺ"|řN†Ő1JXĆĐKI¦šcA}u©Z +Ő0,2‚śŔ´Ą1’,?¨4·ÍĆuťěWiE’Äo%˙Lu¸>ω3d +‹1ä:úUd—o(…ş–ŞÇţů}â +m‘’÷·“Oô-XŹŁ`”bTĆŮRgţţÔ7‘DÉßÖŕy®śµÜ"bń/®ö=XĘ8ˇŹż)UŁěŮx!žd†”|‡»Ů] 6iXýů˛äýú|×üĺ+Ěőş! Ňů¨•mÍřJőďub"~Ž.˙řů +ż˘ÖŽů_śŚĚ ¶+AIę‡ç>j‹`ß[ŮTÝ'ůÜAőéďäó±Áâ˝3TLŽŇ˘^_ŻĄuN]‹• » +l–Çĺ©úE¤Š„°Ö¤é?8‚`6@tÂĚĐxpk;Cë ‰dÂđŰÔ}ZhÖ˝ňOŢ%Ĺ’j ÜR“xxډČxbČ0Ăa˘‹ŇÉ9)ĹŞż„›ăâcF+I Ěi·D(‡=@•¤Xöçś˙÷#eď AZM«Ľ ‰ŻÔŕňÔ©É+Şj_ľ­u«±ĆŻZ—mâť–ć eó+WGw\€*݆…ÖENŹh¶»׺`´úÓăAA!őírŽ|hIč9˛¸-öC›ŻK,d§˘,ě~łŠźUj&¶Źć±cÂÜHGĐÁĽ\DÎÎč<ÉP˙ĘŞKŃbT¦ă\J m^`äj—öyŚĆÁE™ęľĘdńšűqńÇYń׏éŔ™ÚÔ_ş"Odxŵé`=Ҥžúź"Vň ÔSĂÎł:Ś%ݨʄB•ľ!F›+ÉGdęRëJd:Ť‚GÂDšÎ9ś°Ý‘ÄŹkžô5ŞáÁóĹ +Írwq7be";AŘ‚*B1aČ p_Ç›ľŹŤ{¨á1xT%))eߏ˘çľźŃ™Žg‹¬¤fĚ+р؎Ş$ľ\6wéÖĘD{ĹŤHÁ~ŤúĆâÍŕ` ˛ů9›9°3s—Ë·‹~Ă޸K˛ Şş–¤¦ŇČôąήvü@畸đŕUéëDCŃ@9Śi3ä0ŮZĹ®C´ŕ®ąçŁŃ‰ˇK-ňYy„3—+çĽëŤ@Ů÷Ák^«ÍBU[éVćMp5—ŤÇ1‡Î¤w?2ń‘ŰüčeG‘,±­mł.f-ćŮ/,Ou‘‹2ĺKĄ_›8‰ňëâޱU†oeŇ Éz˝¸Mϱ™"6®ápîy‘ÎĺÜŠBQµ’3[Łó˘¸>ÔEŮ"'»ŠřÚY6¦p.SŮ_“©í‹;’”AÁ€ňŮpÓ–{Ń{1Bpô-"e1–„Ä6˘µŰ"Á+čďç¤uďJ@ť)Ľe ĐVÁ±k+lúą&@C®üÚ:˘ČŐg®{iŞĆ+u{ŤÝjTŇ€I—°ĂĄ_× ‹QÁ±LlsyNpăUÚOů‰đá{ą¸Ś’P]Uó nűݎľć }‰|ő·Ä$2Äł˛™„˛´ Ő˝ą¨ŁđĘŐ‹łAšŃ”ŃŹ^%ň5Ý1o°?µ„„6ë×B§”`¶˝¬’Úr5çÖôYu—“żŻ&¤oä ŃW6 qmDü§ąËxuŤ:¦Ľ¸ ¶0ŚY"ťÚ*'.†ŻU娳c©çE¦,>ĺG51‘0˘O ¦ú“3 +•9(TŚß‹ť#Äř®¨#ÇtÉ´yTQôwîúŹj0ý"! xKcÁŕÉ++ÂTÇ ±ş$Fkl윪—•wá qŐ=€9Ph2E +qµ@xy 6éśJ–1;Ç31Ť#îcŚ#`č8˝]$ź1ëbî®=Cîmş–“0:ś Ď1ŘMyËƤĂ%äÓ‹FŽ€]×kQBß ďž‚’cT‡K@Ňw›- +zŇkˇ‰}*šţE(üĎJV2’Đb*j®HĂä—'“ „žő‰Ć_ý$ĎA_q¤ü7‹ăóÓµ$Ď9pf·>xě‚+‰mó"c$Šâ%¤&­Ľy݇Z=úTz“‘ćşÁREÄÚĽë›ýäŇ/q˘Du]ć ®ň¦‡9 Ě^WîÔ>Ŕćó>HgA˘ś€ĐuSJs|;ŽĽ€ËĂĄß÷™V}÷EŤ}Đč™S\łěšH®6n É™¬_žа‘"R~ăŁęôÎĺ %4ĄU3űb ue$-!‘Ôč2Z9 áű(ĄyHĚ0ëáťuą0¤Mů 磝&"ę×î xR5/–q„WĚóęaĹŇŃ“;“v€$2‹Ó‘ZÎGöBÎç)sÁ˘íŢ ’KŽ©T;Á8:(9ĂŇî›.DĂ0y,[.ޢ·¤yíä7č CÉ: ’m‰ď ÓÁď‘DÄ*fxĺQ#xhö%$śí0ňŕi UfHÍ oÚ/L4ŞÜĽ-‹Ă[äŘű•šîÎŻ…ŐŇ…”ł_Ú+·łsŠŁpúÖb<ľ 澊ëxÍ*%ÖŔQ%q©ĂŰn`Yr’¸ş/Ń;ÎutU·€§ĘÉ;5|ŃC_‡ZJ‡ß*‹Ŕ"Xn÷nٽ‚&6˙&DÂü”%ią´XBĂB8O.JmĆçL±ÜwQ‹őĘ2mc·ćµÄ2ě,áłŇ°·O‘řqkńíz˛é׼řži·}ǧ»űĂLp‹@ôVoŞîĚł»ýÚ¸¨WĘ /JX…DBkfńŕ4¶HÍĺG7^)Ł#áě»µŽ‘ŞśT)1¦Ëé;ĚŢ‹:Ń2otjrk‹HŇé l^+=ĚaK€vÔ}0%šă_zŔ‚&ńgB‡ď%UŘ Ě~„j˝śŰ2 ąĺkčlcćY,$_±®®ű§ +–›U]gG?ü4?Rtu…ŢßC’Ę™eüţ&’ĽPďĽöÉQ˝Ř´•DĄŕżI~ÇĽVX8%¤¬ —•Ś1‡ýu$¸(Vv‘zŻÜ‡×Úgˆôłś*ĘĹ|›˝}$ĄażŤÁ3SqĹ™4ˇRë­‘ě١ÚÓơvpFx)‘YW74u°˝şŢŢ1żeŹ.·?ę<ĽüřHć#Ő7B ˛X!¨¸ě×dÂő†4Mô Š\zMH˘—gA±Ëj7ă4 ®ł9žľ5%ĂRČ›§u5ȶ©Wđ҇]k˘ĽÎŮ"Ö‹šL/'¤ÚóŻQ"čŰ­ęW‰1) ĹW0¸q×µ˙=Ô ŠnT'aŽk-8 ˘źBČ@&Rjvâ•Ëa9SŤ[<9iőfżÝ{bƵ‚6Ú®%zZn'P1;ŘśűZL¶cőüĄE 2Ü"Tý„gČ„ęŻůkHICUî­0÷/Q)ţVşĐäǶt€1™Á÷ tA ăN)u%5iL¤Ń捴ť\zřě‹:Ó›oöEB‹ď“ě[Ă(¬Ď˘=žş^‰\· ¦KnČ›]gŕF‘ßĚ&a\«2b›HÝJŔ€oD–< ă>•°*7];ŔÄZµĄÎŤ"°ôË÷ľ—•,jŞŠ1:8O±C?Ţ;¬(ľ6°Ůô$gͪ™¶;Ť’S;ä·H'ŇHH*3×ÁŇŃěŤ\äTĘp™ß"U\Hě°B„ţî@’ÇßqĹ{_¤=Ę™˝5•jÉÁ»En1˝%;ŕÄa±ÝDáa‹|ÚQ!ňB bżă‚:±ĎD°űń]"Ć +]ŤŰuĐ`§‹d‚÷|îk%'”îy*:@d&Ż*oöe{Çë ŘG0–ţ·íJ)B7]°GZüQrnű<2‹­¤zŃÚńŞÎ\çv´¦ň'LüĆ ľ‚ĆPnMXČJjUĆěE(ťXčĘ”‡·Â.X—{ŽĆŐŁňYLäč«Á˙"~Ü<ťdµj 3[ç’żŻîѨč["ˇ@$ă č_öśUÜođÎÔ$k3ŁS1µ™q†ŻŃÚS‘锑°>Ĥ "âż^Hű0ëQpŐŐÉČ„Í_k·1Óöă°á; UC®M ä˘Ýí@Ú4o­,´řź;a·›î$ÂłH|}×í„$VʼnhćMëŤęęŠĹ ŤĂő#“kcĐ]ßĹqÝ#aTX-µ%g@<ý6­ÉbŽż˙C I™Ň>\łJ´śbŚ‹¬$KŘG\>ˇŻ +ąëqŞ?Ó8âE…Ňüe J«ČJB +®Ú\1ś§wR‘ő¤Óx—J¦’¤$¨×­÷ ę1•ř‹ň?»bSyűÄĺp˝Ö+Ň8| ň\I¨™ŤËde3%‰=sżV†>Y÷$]vťeDo0ÉZ¦˘Ă˘ř“Uö=j‚s!ÁG4xL#"‰Ń@Ę€•ăüÉ›8¦Q:Ńď.Ö2MËíúąPN[¨dhJnG+{ŻÄĎĹW˘ÜbţÖ»{2±6$‚wK@ޡ›É~¶žSSQ‹Źšř·č÷ĺMµ¬'VA~Ť3f­Îlž#+vĆäaĺ‡ŇĘâóyOvůźT6—ě+ľâFză8¸ntD­s¸Ř˛‚%S‘ţ8 §gD'±"PďFnňEGNyBó©ĹupOű¨× Ś©A¦D@ě8/]Ďţ +0ň~ŘžHő›˘;§„Í(ńEýlh-˘żď:Ě«~đ¦żf;˘ölłt¨Ď}ÔĘ,ŃuĄ )ç” ĹËUŇď…!ďň7Ę Ä+&_—H­Ś–ýIN)Džź-ŇŽż«­‹x8“ŘÇůń …BµčíxĚŘUn]ąůfă;h;zQÍqž ô-‹3– G›¬©á˝Ř sƨ{˙±¨Ńá!žČ]EÔËÁćš˙ ńUŘůąë"ŤćżÂé·e8ž~?wążyĂč'řáFqĂÄʉ§ýĐÉ!mWşm.T˙ÚŮŻöă4ťf©Y‡…-žo‘q[mjůŻ{¸M©V(ÇÄŇ–hł®‡>ó“Pp~™<ŢĎţĆĎ'.Ě-P[J¬¨“Ü˙’R“ĽČ ŞŰĽÎ>˛”1°v›\?&B|zŔĺš×ĹâŽrYxKĺäfŤ§_WN4Aź¸(bݰ°k+ĎI˙‹Oą @m<ŽÓî’ż`ÓVډłĐ\Ů!cq.K.í˘ŔsRn6%KşlÇöł´h”9úÔČ”Rćű’úf6đr‹–ŢńÜ϶úífÍ.'M +î¸Ć|;9ˇc"Të!%)ĚĚ"ŠHŕĘč=čHŚłTô¸ŐI3‚dnQjq&¬š[Řâ«."W6öa·Óô Däë‰D«¦Ú»ąÄ­yŻĎĽĆőPź óŔD˛ýsáÂ÷’)0KšŇ{ŔĐENS~MˇÔüĹhö׾ä6·*ú›ĺ8VP «âŔ#.KÓ@ôŞ®•Ŕa]Ł×Ë€”#ŮMLWŻşÚ96-Ó)Ę‹xšÔlŇn!|úXľŢĺ×’W‘@śĐ׫úte‡Áł‘ÚI\ѰQÂ|˛¨;®ĘNšAˇDÄÜľp}ˇ>EiˇĐ»Ž ĄëŐą×Ń šB2¬Ą*‰üS?‡™µ1jGĂKz©^•qçcÚ¶^í«‚,'‰Sp|=‰Đ´ŰąŻ‚E$R®$P.P™JĎąŠÄ¬Ůˇ’5ĆS·GwsG¨Š©Žinßč~ÂP|şiÁŢŁÂ+7q‚$ú Ls7ë9|î„ňŮ!ŽöíĚoLí5·‹*ýmłÚ]qZ•gŚ"±ę*HxYj µŰ±eO(Ě;,qĄą4s˛ř×hV|X·ŠÜľVoy$—^Ţs´bE°Łömä +%č™ĺ¶gŞP,ç†řu„k|zžĺdmŇB:‰šłQ…M+×éwÄ’®đ=E‹­VŁć"D¦îÉq“˛÷ŃÝ$H‹đ>łĐüD¦T?xŐ_SŞć¸ktţH”vĎ9W @„2©1jď&’ăS‹ćäW퍶~°“TTĐD.ă„T+…­Řç]Ę~&wo±±NĺĹ,egJ«RârYÍNĐxr)±€$U¬_# CŻ{&zG–c~¸Őbť}.l´{ŮgŚîVŽQ€:sľÇÎ!uRU$Ë,7…”•ö1‹BÚ\LcŰ”ž!y‚UÄjâu" +¨‰•ˇ"ç~Ăv¨·‘n‘€ŽvÇ\LŠk9ë>„Pµč*Cp€Dĺ¶Efť9ŔܦfúÉŞ"ÝXă˘ř¨RDĺ±ď(f !‡˙׫á™f]$­DVěřÝ€˘$×G|Óť°’q?Ď•c[zâ}â®Ĺď­¤©k JňJĽđî*[Çůą@š,>Ą:RŐ‘;®yÄ&l_νŘgo<ů8 ›0ź {Ä5Y&5Î#ź»öRm!­.XĘÝZŤpĆ™BiăNĹĽŕť_Wd7"Q)čÇĽö2‡ŕq#ä=ÚYMĘň}7Ą¬ŁÁ@đźřűŘ`n߲Ăg šŁqu˘/ÚRŘ›d*őŁ„Pj¶”¨’¶çżrů>Ť2qąX|p„ßęÂŐ›sŁôçBďeYąęŻ`Żů~btű«Kaý:ŕöaŚs+ĹMjĺĂý/°„Š+eÉ©|uźIű EtĂPÝëI #“XAÓŞ"roC) ń@o+V­-;MĄĽh  E«Çř—é$·ýÁ…,Źä9ff%¸Î ŕMŽl‰+ †@Xan±`çz` «ŇŠJ”™xMZě)‰„/=˘ňH*Ĺż‡ÎK=´nő؉ŮDŽ$˛.ÎBÁfµŇJ9-ŮŤĂ ”Ý_YI\I›p××-•¦ł0¶o=Ď–|Č'Ň +Mˇ‚4pĺ#”lTÎ(Őóp®Ż6˘SŚ .Lô‚ç? €äx©Ű˙ĚĹ Ť’’ ŁeŁ˙p˙ç=ŻŁÚ‘ MöhmGŁČR‚uí—·yÔs3ÔöŻţÁ4íŃaíw'4TÔÂr.şhüD÷ߎ0ăvčdl¶ůĄ:mđ™G&Ö®-rçôě6÷Čň™»o€’¦1I<ˇQÖu7"†Íę“ +s s%Táźđ ‘Výŕ5çČD1Ă16ŠÂÖçRş˙Ť|*ÖcÇL"hÁ÷•ÄLôrcµĹF4°¬„3i"‡´›ÎÜ ‰ĘďůVđüt€?¸«ćEeRäĘŽud"Č—˛‹W,˘\óÓŚŐĹ´…U kđ§´,Ň«:TĚbKböŐÇpĽŘ„ŮçN z¨ą‰ŘÓţZv´3&§÷[$ áÖł_×LFl­ľ7Dł=AhęEµ¬ęńxMvc•H*ľ–—*üńŞ&ŔqXĽâ?”›=[!Îřö ď§Rc3o¬ŕ#W˙¦ŠŇĹ·™Ŕ«Í†ÓÖL˙ŹW"Ä%<đß‘ÇęŽ(óKő§ĺ¨~üWwŕ ^1q^±§@ý&żTzśBů:ďj'¤îÄ@ĂQő)‡3UM%rÁËŢ= Ť?]µ¦XGľÝ(3ď*ýÔ›Áě@Şé‘¸ĆÍ<ą»-Ć ţâ’ÇEěLT™!Őc` ŇŔŮW Öđą“ÔÍbIImÝM­ŻŁľ&öżQ‰P(?ZŞP/p © +ôţt¸ŇpăôŘŕÚR%€™,w ڬđ8iĘÍčL‹y;Ą,ÂśwLÂć"Źu‘Yš0ëôć´Än’HÚŰ€óş2ş4Ă-&…?C°Š§­?|/_“b6Ü Ic•@uu7>©×7ńľâlö™Ţ*‰svĆÇHĚ]Q€',SŹamě=¸¨Şţ¸ŇőçńíÎî"ŢÉ3g—$déXŃéžěĄä°'Ą¤©,łžÂŻľ¦źu­…6!€h3m­ {Ń\L1÷ ±@ĎÂą)¤Á,Y°Đ%ü˛éü¨Ę-ô–)Ż*v\'nĆۇˇF×EđĄ*Bü{©Śćl›śĹ€45}¤Ů¸-ś""Éń¤"Ôȉkń,ó–:ч4DâzĘžĹxęŚÍĚŰo'WĂ3®»+­¤) H™GZ+ÁBňô0kZ„‰ŚĐóWďdÁČKµ/VÇ’ÍA˙3đŚÝ;}˛Dbâ’Ć +CP˙ůŹŃf%ŽąŹ8ä9ÁË‹¦> ]ükôR&Ç*!=Ř)|(”@ĺµđŻVü<ň[卺Ű׹§RíáE$@&rG¶9¸Śą´7˝Ášĺź»&!#bž’ł^jjwU$†\ýGh†E›ŤVĘâZí˘Ă©Q`B˛¸Ĺę”7C„A–Â%dŞô[/8f2LµßyJHęIYâ..G+wâĂŠČ3Ô/§ ¸>V±ŻC¸ăgxÓ¦©HeČlˇHD$"má@„Yă!4—câ”ěŕ•¬XU4Ţ©“ëٱsŕÝÔ7‰Ńîľ$ÇL=C;EţÜŇC"ÉËš§¬č*"o/âŘHĽÄhUéRĎ)Ŕ…Ń~łŠÜOáŢž†Á†jďk-‰ Żë0‰űč`ö^ţŐC˛-Âxn*R}ÝŮž ca#™Täi/¶®†yÍ+÷G ő®vöŹÄé[Dî9Xć·ČlTŐV‘3ôÇ}>ą˘ý×˝´ÜlĐżžNâá× üöł.ňvş -’Ă +ż„̇!H+—ßG˝±ĆžŻÓk<|­×pLŞý:̆ď$©Í‹žo ÍGŰÔDşĽwßj‚ +Čăó¸DÄ2-_ŻŘě¤ ¸–‘ÜÍN6jşŮë§U0łE$îÎᏸ–řşi,gĐ—Űgłuj/ŞMkY ł¨ńđKň•jlżeDČ=Ü]p R´śÚőÉühÇ´)Eâ ©ß(O¸Ö0$ⱊ3¬ízGOřˇ-2HSw©d00jŽŢTE¨žŤČr9VˇýDPE?YţÜŚÚŢ”^:âIť§NeäD^š_q)˝ąőöđ•Ř6ôď×,? ^™ŇoýóΠţő_˙ý?ýď˙đĺ?üÝżüË?üóź˙ýźĺţË—ßýó˙ű˙ü—/˙ó?ýÓ˙őoľ”/×—6żüń?üĹżúË ”U—%®j{ť˙_ńh'ŕ`Čź¨¬Ąüçâ9p@.y¸KţőO˙öŻ˙ů_ţć˙óżüă?ýůďţůż}ůďńg_ţíú—ţÇ?˙_öŤýIoĺţţO¸ŻóĺżČ˙€˙9ęúňďä6˙OąŮ˙ú—üÓ˙ţ/ţŐôż˙Ë?ý¬“/m­ťr•©ń$ś‹şű-’!paÂńí`Ô˘€n#W?u[ i|ŻÝ “t…R‰B 10I±ëŢvĂ2sż­ÄŮ_ţł]k,MťA ôxÇŘ ě˝N+' O9wŐż Š-° ˘fÖ.#]Š +P0:ťC‡SVňĐ÷6®ŕ…+€÷ ‚‘éÂŕP‘‰%¸Ž$úô&2”ók!âH˘3ďGłÇŐŔZ€ç¸´úE %FĽ×»s5UĐĘ‹ ú˘Zě«€mŁIź:˛#?"&WCĹVŚ´]yµfÄ’˙ 5U®pYcyçňonrDű+}Ů…Ş¦¬f}úaµŐ€Ęß``vŰ'H%&’Ö¸Ú ĘÎľ˛ČUy7‰h©ű×S$¶qŠ}M’ťĘźăĽÝÍDî ó„(Üŕec€TŽf‡kÍgĂÁµ[ču]ëČş„™Oý©®¸ŚÄ“tvŽŠöŚ9 m'žĄ`Ąý‘·Űłr‚.xR1ĐÇŐęÚWĂVˇ°|­ě]ľ‰HPhłçÚh&]>‰˛ +=›FJ˛<±Í8–­nÔJÜżk±ëy±ˇ 'hş,ŃÁ/ʉ6@a~ëćç ,—Ž­Ťę˙`ö i^7¤5±C0‚EÖ{ć1”7q °É˝ěĄ¸K´č mÄŽ¦ĚT ­í÷"¶ }yŤ^g—€ă#®oWß¶ś# +ěkýOřź-&S›żżJű›K™~ú®ßŤż)»Ôýă9eŤżE­^˙źśţő;,‹­úX®ż±_’/'w©ZňOÇäý#Ťú75˙ćw(÷ďE~/×ţÝFýÝďgűÝf˙ÝT˛Ąäú[ąćßęźvýÓ"ĆöĎ˙ôçWaí/˙´˙ń/˙d˙ňő˙”=93-7 nűD‚w]ţ`ŠŹ“ă~m*VP`€™RľŰĄ8Bň>Eá RAąDCdKřŹ0Rq54-&(ń' ‡üđďÄřňÇż¶[x`°bÚ ¤Äčë×FAţ[$h뮿mă5~IJa1ëů¦‘o 3±bä;´ů2ň +`!Ş ťÁ¤őŰĘŻ8ú!Oxsőů¦™Ż8uţ!Ačë›fľ˘Č8CüĐúm3łŽÂ°Ë˘ß·™GH8ÄÉĹĺ«|ÓĚ#A˝ Őóáżmć5-@[“»hß4óµk{y€Ü­ĚošůŠRá*řż7ÂÄß2ó qf?ľićVŢ pŃAwú6óöe/ŘbÉäţ¶•o:=É+Gĺmĺ»Gäó·Ú¦oy¤{ťe©éř Ź *Ń §ĽMĽ×Nnč*°Ýę7M<:uŔżÄHÓýŰ×ۆ˘đ€ů>-|dPúb'Ú4ß´đ s %™ľęýŰ&^ÎV~a,ä_ľiâń(bÜ/ô}ĂÄăY4pÁIz~ŰÜ+’‹äý8¶źÍ=0›%WÁ“ý|ÓŢ+âs—LľĆ]_öţ¶čí?ý˙ŮŢ˙ĺźţüg˙·ţ/ţçŹ˙•|Ŕ·ţáßăö˙)úţřwřńkÄ©U•ÄËSŁŽJjEd%Qó‰BtěvăŮľˇĘ·©XJńÓ€6"oĐľ(˘ů‚¦ÎŕŇôD#ţ˙?öďäß% €PZ(TĹÄý×/ĺúň?~ů_˙·ëËßK~đÇ˙Ą•aôZľâm#¤\çVý‰‹ĽČä´`t'ř¦€ť;·°uŰ웍µ–siůt’[¤CŤi:F UwUÄ“ôŁńżÝxŹk59¶ô>wÚ0Í;®nnÎíĄ„Ŕ›Ő\4…ŤńBlr`ŠóéüşĺĆ­ôFhÖ:[+Y˙óÍ]QŽ%*+EÄTÎnUŔŮÄĆĺ}ĄI*TIAż}‚ĎŹł¶&.&cŘjĂ>=Ńë‰Ćt @ŇÝ•ĹW=äŁlŚÎ~«Iôf"+A»µ!9‚sĎ«|F´©9 Â7oňÎcű˝Ša +–ä±·ĘV˘ń…Čč‰QŁ…ů+grîŇ‹^^ŠPórí0 "ň—Ă—«P""v6 ŔůT ĚŻBAČ`}7ÄÁ׳Kó­äĆ·Îr´qrx‰ŕ“Ł<‰c°ÜĎŮN×Ę>‹ťĐJâᵌÇKA[ęIpÉm¬ŮSßr@MäW77·o/ř»i„›çU@ŁÓΆĽa©DÁ\l˛Ż©H˝J …QKöęç˛LUţîm|x oÄ˝śp s0˛ôŤčď‰ď ´šůŮ´W%Ęó ^×hX&TXŚ˝JzŞâؤB‹şťc’X»%7‚Ńr¦čŘ"ť§Ł1ćŢ?ˇbUXlI ·`Z.¨Ô˝îĐnž{ć¬7ăĆ +•í÷¬h»đ+”`-ńŤUĘ×Ăj´ăŕó„{!f2°Ĺą"c“fëpRyLz|łQÖ>ÚÝ:ΖčŤ&b``ş„^ĉ”&5ĺ.Á +d—+w--¤EŰŮťŐť¬¤híŠ$K%]ZÖ+őő$–q0ů×J˛65=÷k»ź¬·{ňÔÁÚń\‹-ť|çwúÜ +ËOćÄŻ‰ĚI¨AXr?đšĂ)†„ŔĐ-‘­‡˙ĎP6^ÜbĚ÷˙Tń˝FěĂł 0‰†<9b ©^¶T_9žëV»°”Š ŞĂ;b(2@~…¦¦B3ĺĂeRŔB/4†Đ>˘_íF‡™łLy l(Wŕ­Ä•’Ö ćk‹¤c“µńŘ%!i`šÇďcď§µŰěńt&túŇr¤T’ČcćaNńÖZI r‡Çű©ą´±>"ݤ“  «éëç\ž®×‰ŁQ5vCä!=iÉWĐ*÷Gr|—üˇ‹4°¬-鎗üąi®GDCçMŁc Í= ţí‘kľ.ŐYąŹ{ĐB9pŹ:aDÉčžÁ’H FŘůe[b& Ímł%–óÂ{ŘĎd0Ax7žöž¨ë“—×!5÷ÓĎ–ó/{4Ů’XČOh˘1š iÎ<ę4]ŞJI¸ÓE® BrčK‘Ţí‰ÚĽR=Ř1Đ Ćććuń‹>¦¨dŔlţÁ]aÜP©ĺ7÷kőś˝ăčÓ±5ÝŢL2ďšĎÄžčÍᝊ K׬çÄ×81ăę­5”§{8zmÔýë’©ž:ĘtÔ¨D5s4ČďĆv“|)µĽ6űëY6 CŇ@b†‘>űfű›ý¦¨ĚLúâ PąźT?ň ™_ýŕE§I0!“zÖSŹ·XďDPWŰ^Ďč){aré¦ĂóĽÓţ—µ©-ED€ T˘*l‘1ĎwŃuĐuČźŮu +áżůu‚6µŰŹŚX[đgB[ŕI“[>v XlWâTĹ•*ů쬨?“çoËG,ńę$˛°pÎ4`$» ×'`tä\ ĆŕÔ㣞;mbĽENĚ#ě~×\^Ţ—Ş@¦z!‚UBÚŮ‹Xă÷A~ĚfăNřăęa{\‰·vđě ×ŰÖŠHżbűf‹\-‡Ă·«ëĚ<ń;ŞÎ×ÇhúŢy¦×ĽE.qŻţŹĂ5V,üŐš0*C'¶ÜăZ"e‰°Sá/.%ßkĄËB˛sÂâѬPi·„:%węs:iô÷N +ľˇ°A +íhIŘg§áFĹS‹Äsĺů!bc`ŢÄG5+‚űéĺT^‹đĹqć%rL0Śń@ëvT@!)Ň!l¬~<ű¦7ÄťY¦Jšx…ŚŇby0FgB1^ŢćtÖU˛ŢśŕDZhx¤› zČ„>9Y‘Ťů 9äýV˝(3_Ŕy­Gä g<dwl`~)N°ĆfÁřáü=O„I‡ĄÉö˝—U5uŔ´F ŚÍZ‚r*=y"Ě|ŮkĆë´Ő¨áXĹéňâűůŢ~5|'źŞ 9L\w ĽűݎłlQV¨ÄűŃrąPÝn˝Ő1lUâöa—ŚVőÓä±ČűU@Q¸˝ˇÓÜ;RűěěńÄ[šugÄw}Ůj‰€ŁZÄ|J6UB|˝¨ä€.?Qc+z[„C ĹNÔ$ ťü$ćŐÄ9Ľ›Řu÷\ąĎ:Ő€+V=W|¶^Nz1N”ŻĹ¸;v”<™±: +PŤß[ľZö"l)e g˘-Au”…5C.ňÂćĘ:ü"ś\w†˘>ŻŤ-ÜsR4lŕ-Zp‘v3L•tc:„[±™aš|c/ +«1n`˝QíĚ#ŁEÓd‘T]l”ŕfuń@!ÂľÝk=·~xęě!Öxž¨1[ÄxO˘eAÔ)ŢM[]÷‰,eAc÷f]¦¸0gâťT¬ÄOî|ÚťzĎcËv´ňiovĚP¸7FnQ‘â<yÜËGˇ:ýîěŚb°ˇýÇĽ4Ęíť;ƦÄRÇ'ŤwŘ Ćĺ^š>3m|RÖt7Pü źRĹ;$Ŕ§Ąc /F˛¦č3´y<µ÷Ŕ¸0qŃyÚ" (㽡ŞynMđcě˙\ŔšćV`ĺižÄˇ†=C!«1źěŹÜGć[?xĎ_]ęą•*’Y·đK¦ĚŞČ„ á–Űş>ˇĆďŻëěŠAŹ™­Óµžx*’Ś"[€ŚĂNhÇ/MĚěŰťíÉ–đąĽ{a°(űâĺLŮV v +¬§ČĘ éXĚOÓIŮ·ÓŽbůśQ&đç^Éţâ׺OG‚w|BăVÝQODRęÁÔTHIgŇŻŁ}hZçćśD§űŰ"M˛ŕQŇC`Oĺ¸ )ÜTé]ą2eUř tYHíÚÖO }bČ2Tßň¶V"Fë±x¤Ń•śńÁĂ$K÷¬Ě~gŚĚevJtE·‰|F #Í+byĄNĂ[*±Čq!QéśSPě±ŕîiv±·Çż>ßň:üĐt´ńśĐ<ĽÁDÇ)ăŐ7x!ć––Ő>ĺXm§×cäP‰ ŻĘP…v˛ÄĚ:ŢÎy×Ák†J”†ŰşQ±'tˇNfÝÁ™w˝o·‘‡Yh ść§ćdň݀Ͱ»Á ®me€,—Ęs‚Íőá¨Ú +Ć‘’ëkrF)JuŤzoa´\f˘q5óIő•=FGÔ'n„Ĺk őŇEĺŘvÍÂÍťPzĘű«Ń}đζę\ŁŃIř!ËöD±úY`Ľädę˘Ń‘°ůĽ)˝Çä¦[y/Hý(^ř^Ş…qľăŐŽÜç‹d mvf<‚} XB×ĆAĆ`Ăš=ľ.îŞ4K§˘&ó®d_ u\Ĺá8·ž¬^ő•Á•1&p"ŽŞŇ®Ćŕ|aăC#ö\Źn´^—;  oתî,7[dƶ» +’ź Ť,ÉV±őmŇđÓńżc|vŞ[Î{vż$-šQZ…<–ťB‰ľW‚X#i%~ź ’:ď§AMąŚ’Ď^r €S&zpš*fZű¬Ę Ćş:úń{zĐŞRJ|X=Ý‹¨ pJכּíĚř¸±sŃóz1ÂŐ;ĎM—}ĚŮ×]ţĐí¨ĚÜĎn’ Éś†NŘ糥a–‘]­ą˘fíĎEAcäfěµ0ćŕYp$Ë{ŁŽôH …ÍăFĎg äÎ<Ý tld{nř¦ZëüśIŕž”ć–ô$Ý! ţ>ĺ Ż×ąŃběYęrM‰ŞK4úÍŕC;őo¨% 3íDt~UG)Ľ)yĺgzˇ¸b˛´Ń Rjimä×",/ß%pTĚ˙;°ŠG–Śü°2@őí ;Ĺ4UÎPµsĺR&‡™ĐĹh5OŕŹýBdQ?zĎ_ă=ÇčTł/ú$¶µ‰ŐŢžN™gÉ{_÷¬„ârÚ#|¬™cp +#ŠwS˝ ëaÎkI'kĚ… ‘zö¦{˝ć ĚKPrťäšMsś4żVŁ!ÔôďKł*Ä7±H Q~›*Î@Ą=L0®yQ·Nęŕw‚Č\ąAĘ”7č¶Ë =©5Č%˝›ňŚHÂ~±äYáű+]|[GBDˇăĹŤŚ/‚ŽcŽfÇ"4ţ‡ú°!RbéŔDöž3ía/K\÷ČŁB"ěŐ-b|đŃŽ—ĽřŕJŞő ׫X•]†â[9/O QŢöc𖇬–ăű[ää[.ÔťcŐq­žřĹ&íľćŮSgćĆ­ŚÜlwt˘ĐkpDDS’+ü†[ËŮĆ|úÇÍ,qXt4ůb®Ű +I]h"ĎsŕWÉ­gä•4ą/wĎüÝ8˝F^`e±Áă 8\ý +B2µ±’nĽ†¸q“±ÂŇa·ŹÍs]ŃÝ+řµĂŰaÂAˇ‚ŇĘDâfć˝^ µH'$Ę5ÜqEÍ1ĺ;ž ĄjÇq´DáSŔ{ŞÎ^L i™#ćíQNϸ¸Uë4)«É˝r'Ë1÷ ~pĎ\ÜÎ.ăq°Ä%©ŐĂźéî V2®•üôV zbÓĽ‹Ľ ň‡ÚuÖ·2bř^ŐyăjŠwo>˝)/‚Ú¦Q+9Av Ę9˘{&ÁqâŻ}C#һ٠Ť”˛qP âüÖz”í5€€]ýů°î¨¦LăZźĐýęÉU1Zٸ*ä‡JŁ^"Á´8ŢŹDź>Č:Ă«&End«›8ą™ljŘ[ş20ó,uŐ˛Ń@fĎź„•U€íyĹ€ťEbkîn]™s[Ľ…kyµ’wgŽ÷]^&ľD‹žçőŻň׹hq†‚‡Z7ť{,Sf_Ä–$ESĄĺ< ęvźĹ.Ô‚ű »éĚ?”qŘĘdqç Äĺk:+źř*Ů!›‰P×BgsD#ü6ŹŮüĘSîdVS• ś‰|_Źv`˘Śe·K„ÉDř˘®Ő' ĄN5r…(Şń¦žŞwnčřC‰_ˇ=¬€\#6âZŚ­qÖk.Ż2—ĎcŃZt•›§R]ő¦·ÇD|«űe“6ů|1߉$ÝEŃşQâq‚)ˇşă ¤žxĚ(ÁZ zťfx~đôöžˇ¤Ż€!ädĚÝSăeUâ–‚ˇpŹ‹81kš'7.b÷Çă‘–—*¦&X˝N¸ŞË^ÝďVźY†~ä2“úÁKţRĽ,•8·”-ŇÄ5»p÷lťČ¦ŘĚ“Ř5˘Ź I"Řľ$8tÖ3ŠÜ LV)3ˇ±3Ú @ńy/Ďŕ4pýČë\bĹi¸‚VSEÚětä†Ă¸«hm·ü^Ł‹k™ ßäöRľ÷Ýó¨Č3|ďńĂĐŇ*â$ËéuÝ€dP*9šˇ]ŰâÁź‡źyí…W,· B?.’·F‘+\Ř_˝ĐĺŔ+ÁŚ·ČŚţčľ–Ŕz^DČ?C€‚q%ĆţÜRŤY˛E‚’í-QO–KÇGÂźB„fžěRUňW4쎹n‹źz~oňÎŮa +……“ť0ÉŃđÉG°Hôd~ ™IÍv;ĽmW*™Jp’y9ŘDzNŻ«JÜ„A÷sß-TuMúÉLÝ^OĆÉ{;71N»żçë +FŐňJšńIKŤ:Ő6%´ŔhźTlí"kŽÁ JCDŢř]Íőuť„¬|ńŽ$i b&yv ţqÂnÉúI1Ź •†.¶Hyswh¸Iö`Ż †ň¬Š6;B‰×PHŐˇÂ;§Ě±é)E•ÂMÓ빡·%˘߼ÂSf'ÍKĽS™%÷´˛-ÂóVđötPĚš2tşn¤F/3h:mé‚–BÉř×<§c˘ś”˛Űí=ţ\Čđ˝lŞ~dQxޱą| 3ÂęsÖô–»żŔčśQňh.2y1´”4ă”J[ @żvÔ‘*–:Ł˘±1›žĆ٤ĐŰŐ߬¤4¬ \mĐÜ©,µ °¤fí«PŘČ]Q§ú]i™Ű´ńjĎ +Ć$ÂĐ÷4mĚŁ6,70˘ZÎkm/]UJCź9H|ą7·Č®e˝Ü4ťő°»wb)Dçjĺt[č“©¨r0 Šéá šă ¦·8˘ž*ö- +O ś‰óó‘É™éi ćfSŤs}®¨»ŃJŢKfˇžÓůÖ0˛¨Ł­=GŔuM~pô„H0CM[µź/kHŐśŠŘĚ6„wjWŠÚĽ|K8w” ÖÓlĐŘkjôTOVTOY=1×§ŕ![ŰjruűĽg0¨Ú¶ÇŮą“ĚńJâä´Ę*lgb‡Ż:C1,/7°C!'qŻŘE‡ŐŹÖuĐ5ěfÉ;ÎÍé0›E‚ąŐ^Yٱß+kv´î${Ö4F˛‹§ÎMíş%=,gć˛aÓ|€ç_ë p"Żń|¸dľ2‘s_?·4vľő:šq|‰Í4<ŰxĂ3ĎŔYLnX•*TÎÚ"'ř>°Kć9´͉ş†*čěď(˘`rofÔ#Rb.˘B»EŽňDĆ«C\Ŕ§–$‘¸ś,Ő*EÄŠúCő‹KUšîÖQOŚ <…ž|äTt÷űyťq99ž÷Ó‰„ÇcÔy48D$ŚÂF˝ďëë1Ö$łr‰O™cÁ8Q;ÔŹ1ÎZ ě1=*öýA>cÇ‚f˛7öýíLJ”¤–€Aß… Q—ĂцáŚc×uR±)°( Ý«­ľ-'Ó|OŁÝŘÖś\3ť“¬±ň˘‡2Ë~۰ÉÜwóÜí~7ĺ,; ô–ňŞM‹“8o˘ĎXr®y?^[‚1Y űsar|\ĚW>OCę"Z®6¨ÓŚp¸Ţ»•\/%Çi‹ˇţôrîFPNᵾ|¤ ‘Ĺ ßKž +ş)Ć˙Ť ôŹćđbż†Ťô૊Ń:<‚HżW[ß^MŽrwj5@RöqtŔzBpb lżęÝrĘV]Ť•šČH +=ĎCŮI ÝŤ˝ź­»Ŕ‚fZJ(®dHYR„X3ŚĚÓÔ;­”Żřp1ëi#×-ÝÁ$†«ĆvZÉňdBĎ7|ŹčäUn> b¬“×1šľÔş2ţ0Ą$.Ł­˘yDóWŕFîóˤƨÁE~śŢsąEqyÁ‹*ŽpFÓ½|gý°Ňĺýę¦éísGPßđkřZIó'*RžץéÉ©3bĆíäd¨¶=bŢ(n%(ëî­‹©8ý7ÖXŮFŤ™T!üŽíÂJíĚÇfĽ¨Ő&MBňâ+HˇşPí<7ňÓ‘D©­¸?*H1ós‡¬ľSr°]¸ď8ÍG„Šăb2·öAÝřĐŃšá$¬içäM4°łáfĽXŐîśő3_ô­ćsĺ©P=‚Q¸nJĘ AíłFÎđť"ąéWJŕ o_‡a¦·H?›CH6rşăÍÁş-ěärHŐă(ôŢu´ŹŁŹń á{™”śŮEđ±Ú„#¤Ż©`»UŚ"87 +Đ*ăNç‰ňn"7fLłµlǡ˝˘J´ý¦~‚'ÓČ«2[ô@‹¨ĚqÇW36éíSÄřŤ·„ĆZ!Ůô^Ţś§·+cّՠD3đ +7ĄZl먾^ŽĹ6†[ęČCăş:źĂ˝Đ×3­ë=÷ÍöEÍ gŽŕő]ëŘÝ:ľJMĎݲVľExĘBEtćĂă"VD¸Ňfű``udíÔ$9Ąj4Dę1{†ł$fË–JvbÓÚI€ś[ä@¤Đ¸ř˘«m^ Ź1yä$*#[ިrúRۡŕ±7šIC)9·_ňůĄ:¦čía>ŕiÇ,DęL–Aýť‹zť„~עӻ»«Ä1+ Ětî•vŹí!Bâ ·çÄŘęhŢ’ŤGó“VOҨ­‹2®ń‰Ç_(ŽwîI8żĆoéłĹÓÔ>1!QŔ­/"Ů4‡žhł”óMVY8Î)‰ĽVć…öA;’j¸®ÉĚłČaç˘f=¶„‹őUŚl%ÉvTo ź"w»ŹR@8F˘ť $Ş}ľPŽ”ŔgD<´|mÖfłÇąVł._Áđ0=hü®Č|ę/űkHEa×^@ ”Úř°%™Hő¦Ř”›!Ťjä8›O‰‘ŹíGżőB“ä.ÂÔÄéír´íqŢáýퟨ”ĺp«ü1‹äOĺČÎkKôň‚sŞ ĹŤ=9˘l¦Q®ÇłŽ®RčŐ-ČĆąď¤ěź'„đǢć¬"5‡ç©Ń2zG ťn‘–ůQĄ|oĎźŐí+B°w®—aä’hKÓ$?<ĚťÎů-,3^µžAE,"éu°1÷ mTnZŐÍÚ–đ!› +Űq]9^gqGŔć´-2ć»ě§óa^ßR¨1ó$f3.f%y ô‘Ú›Č|'zÓůXz^j҉ŢRD1ý‹KÁ1ËJúö +uă+ť¶ľÂ‚»MDLú +¨ťŞ$1Iw+¬vö¦XÍqgw_ÇĹęŕĺJP9ú3Ř׹łH×j=§f°e Ç•Ť6îćʲ¸Î‰_Ë÷ ýnr‹ćŢZ)9t™Ç˛„"Ó€ůžË•;QgÜFIü1Ž1ĺEIť¦Ä>´ßňśň`ŻŐ$rk]ŤĘť91Ú…ŻB_17‘Ň×g ?PtÝë9Ú{ЎzŘtÔ/Żxfw:ň.ąÜ±nJ…Ż)¸wdps Źă»Źő€$ç]iIUE敝ůe;-ó#`ţóąÄ"öd0‡Ë +ď°×?ľ“UáČđ"…Bx‹ák(ĺ"b€ŞŞ©—W®ŕ¨Ń:‘™örd.Ő×Jq*K E鱏÷ÔT9Ž2ďXŇ$r,cë-Źáĺu|śĆ¬„¤Ťą{—*ÁüQZ(!Í왉Oá'ř`¦VfżM]¬5Ďô[P< ŽX+©ýÓ„Z=ˇ™Ô„Ľ Âkî»hýîä8×<“ őT¬‘Eg¦ł˝&Ľ~ţ:\­Wřý5ŻÁĚN˘úÚ†Ťęă&…9â3ŃŃäĚ=rdOÝ’á×zV$±{‰ýIĘřĽVâłičč•ŢřZQ‘0?&%O¨0 \}Bg‡†b]‚gÁÎĹóAS+Ęâx +8LÔ?ŤŻ^}q¸şí¨©ĺđ>4Ő 8‚ÍG}żx#«Ójr@ezť“ť—ŤAjĄÖ-×yMÍA±ÍAäѱDÇkaF; öƵl¦Á#)ńFIseqŔWŢł1 ďqÝoş†Ě¦~đšcB\"˛»1ş|@G1ň/şćđ%DŤŃ'Yvť«‰Z4ÖźëĹIQ]3ö7ŽEËö˘{oî:É»i´.bö‚ËŠ˝L|Ôo¤]­ 7łťOŘťD˝ÓS5~7(Ó5ćc‰EU1Ý#ÇĹ|n02’AĎóh›‰ČÍÜ/LűA ř9u¶#$Ô[WĽéX;v‡ĹŰZŠ/¦ň= tť›(Ŕť”đm«L¨ömĐjݰúĄ¸C©hĄnŹ“7Q+źÄÄŘÓwyO›±<őŐ=EpxŽÝR”ę´vn€ĐÚ"Ş­“D#@Ű›–7 ămV´@ĐTŘ^1˛/„]ťtŹZĄĘô‘ŠdjŻŢľŘĚ„ÂK<5c YhÇëqMÇź|j˘QB5{"Š6ťy;<ĆS„şĄ`°ĺiNgćQŃ*éőÎv|\ŞÖěĘ*Š+×Ë·oţ¶˝˙Áuyَ’“BÖT×M—JLź­w/]hJ`  š*ń&ÍčézCbR횎}ćýŤ‡žŹ¸ÁlśrukÚWߊÉőóŤ—Ô?ížC}ר0´ň!k‚µÍ$D”Íôşf&ž-v5č+éë˛2óĐ~µĆâÄţâ‘dć{›Îś¨ń¶i»Ž®@Đ8ŚĹBČł*%ßó~1?L|cęëG”2hř~‹ŠvMőĚ‘MÉ9ôŢŮ63gĎŁ ŇHĺÖŻđŕ—’DÜIF‚j׊â|'졗A. +Üw?µz!ŃŚHBkk.S±NŇ*¨=®“ý"WĎŚK1“|‘­Ř—c¶¨’WÚĽĆK:q ńú<ř×6°P*­ěĹ„×âšŇŠł’ónç›4’W_b_;Ýă +€{’wÚu’†Umym9urF×›űŘč-@)şru <ÝLKą;âţÔđHwR8nřđ‘`÷U‚[CE‡ŘŠ_#q˘©űz»mk~gNičëCČłŞřÁňć1MÔ=Í 5AŽKµĹl«ű“Tä{ę/ÜŠjµ‹°:kGŢré×<rÍ»er‡ňcüWncÄ­€r‚o×Á˝¤1!á\uôa{&qkâĎiôýä̸˙PÂÄn@?ÉG=|ú5Ç»W•yDÜŐ(Önć|Ä—…¨s7ܡS$đM_<ÎkX‘#kbT›Ć8ŕśnĆNéHzb÷0"™M1w÷…÷ŚîءŢBâËDË|rĎHÉŹ˘ŚH±#řł˘›­–´f‘ÄlEĎY”Íśr'®řťçSß}Ń‘OĹt«ÇňÄVőÎä}WÚOăÎŹ.L2ötč‰ëń–<ý €ÍáÎIZ$ňo â8_1®®ÂݸÁ™čnHrĚ•ëN€ŔýąĹÇ»Ui V¸‹,»v˘W·z'šĚéąyeëu BŔ^N¨`j$MÓ•ˇű&r]±[c +#R|ZÔĆ!šÂ”d¶S^»;ꇙ´¦ňłŢ3ÇÄ¶Č P†ÍĎ*€ř…áb+ďQŃÓë ®SýY’…ôłž×‰˘]Ý'˘Á ¤î±Ó4HDGnßĐNSŽĹo&S"1Ď9H]÷ńLîť@ÂŰük‹”*±‡ŔôŔ>¦7´Ą"čŠ?ćĄŮ—«ąÂdf‡×”öűęÁřĺ‘<ż+Ż$-Ăç|#ÍXč[ddĎj×í]=ý<îm–ieĄŚ‹đ…s”)xIşJ•CŹÂ=5ť¬O(Ť«¨g~EžŮ‹ŽŰ%Ş%öB<@ËěC źő{ďÚç6Rۇö±3çż×BsţŁiěđ06€íŕ´m'S9’äÇylZŹČQMŘűxS7ü–·ľŐ€VoĘĺ.!±ţl¤q˘F&-÷ĺÖíďöŠd(íČ k^ŇLaFýś¸=ĚŽ«ÎOÖ[Ýre[ýĐ ?X™Z31°éĆt¤±2•s-mëk+ďŁĎ‘[Y‰HŰŽ€8”A +tßź`_1ŽĽ†^Őőµ‰‰ř4ˇ«mä “ťF„ŢşJSÎY?"{˘fšť´)Çs%˝Pź^yÜ]áZĚă+«w§ĹĘPÄ»<ą¤˘Ó¤Ý +E$Ŕe+ż‚‡6ćnîű¨i}věňz€ßT:™#“°ď‰ý_­ôQ;Č>yĐ‹}ęÎgH©”3_X.şÄ3ŹŁ€™SéVŔü4Y?yT :{Ѩ}&TWËíËMůuň"˘’^Du6čŢăZ4)ű9RK•t°‹ŃW î¤J*ˇęžä"¦™3D·bSŘśMůáÎ1ú{Ѩ~ńĆméü×pÉ|ŰĽJ«-ž*ŤÜĐŻ0˛ eQ#Áąë·”0ü€Şö E#Xvx#ˇť”ĂË86rĐŽxtâ;ů6ŘăŘń‰Ý@·óv¬Ýdl)ˇ%‡ąr Ëý‚Ë‚ŻťEÖ–¸®VĽĺÁ{,·8žRT‚G·—C®-‹D!ĘDSnkŔ@dŚî¨}Í’ZiĎgŕłD®ľ®¨4*#˛»ë>“ĘŮcŐXVěťďßšČ|÷Ź1ÂÉÉ»Ě }XČ’€4żX©ÖŃÉŐËűń‚ĺ6ér”_ĹÔďş!ÎŘľó’#_;ö´›b žsŽđ¸/Ää É͡ᅪOă$_N Vý%ˇŇ¶D¬bÜy‰Ű*5yws×ÂřU0°+Ę^ĎšŤQ§wRĂ`~[D W–.”‰;ŚQoŇ0?<ť|Ş5´zrŁGĂŰzlăJé#6mý Ť„UęŰŮ~w f3ř ¶Hé,PGhËËD.bfyďňŹĎŠL¨7)L+<çn;Ŕý!°aHc}|iyMžqAd~ŁC \‘M_H­ůZ7Âö7‘J7`ůďJlŞ•Ou›ĚË’—’S(ýmŃ>Y^Şg­"•Kž&4 ŹŠ4†Ž˘cžéć–˘9îŔ |ä®c!R%)†Ü~3ÉľiQP‡KŽfq8{.ÍŁ4źAVčÄF®w›G}=ÚĹ0ć˝X©í-ÉK€Ęć䍜î¬{Uë‡AäB̤ s#čąw_üÇUs…‚2›lâ@qŢc7‘…;ʀȉ=OľĹ7ąŇ ~ĺ]ÖÄć.0bă6ßyľ…٦PZlżg/éľ2ÂFÔK+˙YŁ$Ęšn¦/ť¨=`Ţ$rľÚ1wz©™ďÉžÔSs,Ţež'°%9˘Úë«-˘Q×5Qšřo +[—›H„†zö“„đÔ˙ôuB‰ü(Vř^ĘÖ°ę(jrĽ;±©—l#ؤšR¨<ç›'”-×íě=v›7qŔAk} o˘.Ő[I‘Ę ę“úűíŚ7YěŁE‘ iŞ´ěa30—dćň}ź¦rI‰1MÂŔ^ż\„!ˇşă ŞŐ§E¶¬‡Â†“y/˝`€ŕŞĘ9D m»rĘ[Ţ=ßlF«ŻbőŚĄąÜ'“×ÔĹđ† Ţ´MˇÁ3W čŃ’Tú÷ß6¸@xV7 ¤Őś"ÇW6‰Ůß6§µŕ<¤ ś§†4 ¸ÉĄG¤3Î\^Ś?đĽ›őÝ7XŢŽÄű–°ˇxvDHá¶@;nş+čb\:öĺˇiüŮĂs0ĘăÚ‹T@4ť |“nU„°]ňRw.2~Ů}ŹÚFжčŮxrxuKÄFe!ýű*[w‡Č_Ľ:Ż’ŤŹlÖC÷ďm`ň®‹Ć ă:€¸áÓÄ<1Ű݆oڞűzĎe3ŔoŐZŃ@~-¨CăJ1ó_·7˙D6=ÓźNpžů1ĐCcdNDn@lű.1ÁŠÝt ©ňšTşśçŔą+­ÓČ!5AâÚ͸÷ó0xB»ĎŽś‰,Îoo%>Ěň=@˘¶›s»d8‚L»{V5ĐşÉ}cHI~LRhjGçţ-ć|96n7,±ő|Ou lņ’J9˛aŃZmÓµ˝zlDBG˛CdÔ¤©Oż +ĺÉ7Yŕ„;ßÔ0 3&Ą”¸y$PÚÁOH,(#¬ÜŐó•-ť°”“† Ŕ›“53ą®śO\M•RJîZ˛ÓI92ɤă×JXl‰”X˛3~ŁöhXľ(˝K„śĎHLë-2†ÓXěł­ütĂĽ÷”K.99ý=„BQnšhě*·g}÷F“F„ŐJŽ;Q;IĐ`ky±0®µm5©iż33ĘOUF5HN‡ńsÁĂ÷)%űŁ=ĄÇ XôÄŃ}bUµĄżŘ–`ÄXM%ú|inŽElĺľyô7“÷6UJŚjĐČ›ŠE˙ˇ'kçîěŠ_Ťqo…fŠá§č <Ů×ÍŁ|ž8ŠŕŕÎ +FFG&t˙ÉšvJ®—äÁJ4¬mŐëąčŠs>˙NF>őÁ$ ^ÂBv*ŃvDÍR™Ź6żÔüiE\bş)Tlůíö牀m6‚LJŘ,Ń2Ě8*7Äşă"âůr¨őoQł~’#!ěî±€·Ű°Ü'jz^ó¸ „™Çţ›FňV}­I̵`ZxU•­Y°0‰é<ÉÖ¦­-í’é#óU ‡„"Č1éV)fµńcÇ#a _ű,€^^ ę ń ÷+şîÄ@d¦X“¤·đ1±ÍXŤ3}ĚJűąŰšI"ô"Ťéçşľć;‘ŐLq%ţŚégŤ/_c›¨č¶żźŕś`»YŁĐçyx¶s|0Ť«ŠpťţW˙qGTčW5eLäΕĆ6  ž–Źë–š+‰­ö E”ČXŐs2-ĽExń:ËŠ';ł.š›ÜŚ€·ß1­|Üäíô€¶ŃĘ`Č™á^Bdĺľ]‹Y”!ő^Ó'˛b—N(Ú?á…~O°ďß}×á®f´oăőfěÓštPţ˝%˝GľwnS©HőZ šö&mŽF0ľ-Ň<>–#1R!rÉuNšWEäžôŢ +/GA Řw~Ë_dD~ĎňvFË9+ěgVÂĽ×WŘrŞÇ.ň\Pawüý˘2:ţg±‹SIô»$µ +“ Ú×:÷ćGH/ç¶p1«Ą~"­¸Ń*XÁ-Żľ37JýJ Úó™­7W·Č(4)ŹZäVˇąhđOâĄ#ýş>g<ĘO}DDő¦ +áąĹn–đ9şyRÚb‹HJ^RIQ3Ů·ka/€j x†5ŹýÚçs†HeĆAUmŞá+ek˘`ÇĄŽ%•r#Q7$ŮÉ%w7ŽRÂýjYŃä9PŇî×tĆGŢsĽg†^iĎÇ«)}|Ăó4^9ľ ’üžyFĺčÇؤz}N¨Gµ˛ą@ąl°\můj¤2ř4Ŕ5?FiA>Y˝µÜÜâ¶ď—aÍ|=Iͬ_\NYy}N”$:M:ŢŠZq  íťçFvŞÓß­é±5¬Í×öiŠXŃ­"’FŁwžş7^{¨’SJVČDbEnç”·/†ćQ›”dä>šĆ )ëĹË îŹűóP[^şO˛ěw"4j©ŞĹř~d>Ś_Úý\ń˝ g(űJŞ’R‡›úęRĹé|=e<€Đoŕ9‘KĽŹ}^3iĎbź*dđ4ç÷ąR‹eIä4•Ť¬Şíި/gZË«ę ›<Ç}L“<ʡr„lĺĂwzű5~#ŕŮZÉôAˇ•‹ń”›.Š%‚—yqbůÓ7(1LlëX¸@ř\»Ňó!Ů÷P< €‹kËpv/T{ ŢVĐÜî6ć« Ĺ®5ëó Űą’ˇuX9Ç”^ÜáŐ̧ş5Rtz]'äŘŐ`-!¤\ žÄ¨PŤ”<ăâŘv&Ç~§Âu˝= SJz €ůÔ“ÇPE(9|ΉKĄ"w\B'%IŠÁ´ž’Z¦ŔÖÜ!53ÜhĎ +™¤hGĎ +—ç‚/XĐúý9ř;w Á`şÎŢ,˘HNüÔĆ“V!hH j‰ă*® *K°Ä'¤?ß"rŚPZ˝ĐbP¦Ö7ý˘D\ÉmL§Ež$Ď4ĎzL?Ďsu'ŚA?*ŐŠOó7Ťj§Ä°tś—(쬾@ L…s°2^ظ#]źéLĺęÉ/8‹‡}ä졦N7µÂŇś¶VVڞÝŕąitť@ä6«ťsb&ňń{b%ţî{VâqĎ‘“2ÚÖKU‹–Čî}ňśfşioq·ďaŠoú$Ŕˇkj#ĽťM $ ·%o„Ŕ0:G°ńžĹJt΋$ą:‡(ĽÂÓÍP‹ó¶ě!f×öß·—Č E5Űs4ÉTSÎĂ[źu‰ä6EĆN1O)"YîĎD´Î“ű[Őý©aµ0GĺUm$Ś»ŻÜ»ŃMiÂă‡Ú§S¸Ě•O‚«„ćČ ˙ěĽ$ÎŽĆ€ťŽ·HMĚű픦ϟ 3Ö1±ÝöÜ!Ńaĺć"šťš;Ç.użďˇo)NfÜ_\‹ý‡JM"1Ř"Pî쀸;P_nB 5¦Ĺăś4˝*Ć"-çÂ~qyďŃůŃâăۢF| of9#™=z“¸idýçfľŞ¸ťó'۸ŚÝş›Ń€Ú¦÷®4¬; ž%§ęâ2WąÂ4î6$Á8íĂ%Gŕî±Ň¦6,1$¶HżyŢí>7X/&5úąčá;éV‰ÄřeÝĐX6sv…ű™4AŻSÉhz{ěe¨m“ÎŰ{5})ĺć ÍŞKđ$zhę8v@¶ŢĆŘ,JXľ_Ö’ŐŰ»ž@]˛¦ůĹ›Ř{o×É;—ʶ¬s™žŁÖ]]đéQŇr΋´ëÄVŃ®~óugWąi¤=~;óą[ lź-Š;^W˝Ą÷•Ű khĄÜĚÍ›PgJ3ŮŽĹ +AvoJ)_ŕ~qZ"îč´ĺ¸P¬«ĺ…ͨřď’č/™R\oŻh8¨RJ¤&Yź" +čdYíŕ™[ÔÜtťĽî—2MŰ»÷_Y^—ę_ –JIŻËU;ˇÔT%g;ËąÉŇîĺB×Ë ˝î¦ősćí V )×™ď BŐ]ťˇâ4źO®đi9^P?ćČťj ´IĺŤŮý…׌Ń,ą8ÂŤóÝ.( j¶M%D®+ţężńň:V”&ÉtaäňŢLŽdě1¦¸µc-%×>Ů]öApŃÚ(‰lŞ)^‹krce®ÜĽŔJvÎNŞŁ‡Ýr‹DoĆŞ6“S(j‹ĚÁŚ_Ř$V +U9Ă÷…uăň×î9<e4ڍ›-€L0#3o?p™YýŕeG‘®^‡ăž šX},÷%ąF áŘ÷®-Ť7€Ů!GŚŹ$E>˘ŰťĽţŰ} H4›őĹŚµÁN›ą“¶˝ö×’Ś ß“FL°zöQŁŘí;Ô'^,Ŕ™U[óŹgĽ-śUtLÚ”Q˛H×xÇ)˛ŔńxLq4Ął¦a|CĽň)Ŕ}j˘/Ná[„™ť÷C?9żú{ŹBułĎˇŮlsěBŃ-e!D8Zo^ěŃuč‹vű"Tný˙IŐ÷^t”ć$ş¤I‚ h‰Ďg"dŞ䡞]&8xĽÍěV1ĘŻŐťŤKK‚x”§V˘ęŢ3ü©>ŞĐĐ‹§"O¬I¨kyPĎr›J}ň°Ëüs:Ź»ĆZŤŠ5ýäЉ{‰×˘R6ř%®Ü™µ´‡ůˇő´Č# ĺžöjŕ†Á@őű¶“b\ˇÍ"„[g›}vÝŇd‘m[-”ýě1Fňúí•ôŕNév{¬ďM[ąč1’€u ¦cÄCR÷:nvL!¶•˙Đ\I )La1–z‹¬'iE6 evŻ[ëٻǮzż/â‡TěÁšĄÔ\ f¸řx„Öó6’Yô;śźŇ+FĄçVjŃ“LżĂIě‘#Li¨×ÜĽ«¬"é_vNňZUÖ;]1ďą—´c/9îDµ"=Gňć%Ć˝Jĺ,*Ťî”Dن3}ń •<ő Ýí¨á[:NZŔ?ç&PÓ¸&Oűvĺd' V]é¬`;HWŤé 8µĚ˙k? 5ťp¦¶ZžłŞ8fWĎl‘ëŘ‚îéăBż%xanÚOήˇ8áDwĆs˝ZńČi˙mbŢř¨Úäěçâ‚o,÷¸•ĽtZÉ„=¸®ó VIsĚ#E¨0#ť×%0ŤéU©órřĐá«Ä +*d$Ţ_3Fńu!yń´"SDL&rÝT€&Wă"• }őY'ϵl‰î• ]&"¦;Y€Nt]L Źµ}5Č™öÔbÁÝ•–+¸wÜě•BQďÜ}zËľ‘2ąÖL˘/ąjI¨ťTËA vަ×`ČbüEź‡uí]ÁţęŞyâGc­&SxRÍSĹź,éÝă2qű…˘—§śëDĐLbOĐ[]+ÁwB37tŻ@µÓ>¶Źü㢊MqH!áyoŞ*şcć¸É;Őnä&莏iŠÇ“*¶¶Ľ•âcEĹo:É1}9/­1˘$˘8¸u€FÄZ¦<‡d(¤ęĚ=ŹKG±ĹKmŔsŔ˝'_ąš×ýĺČ–ÎťŽUdľŘĎ\Ď»0z*ÎÚ:Ëę@Nâh ;«ş—©}çÂBHÚ—w+{ÓŕTÇ*F .Ö_"„<¶€ŔÔ%ODBJ ă3[„Ŕ ş"BR'ŻRU§Bd šígçN2RťchŁ5YĚŮ Ţ–@)EbRË«¨Ľ|ďŮđž…X>ńůĆ +P}Ťä·…c¬úeü DĘëÍ´“ä%!C`şy/ś \Ż…¦ö‘3dH˙Űţ!óŞďĽé_CŠhô—K¸±&ňr$×kĽEE¸ž ŕů’ b|ŐNĺö {1kĹ…Á1ÄňjCT »üŤa&©äű˝Ţ5ž>ÜöX,ŠG ăť†Őy˝&Ô­žčÎ’çX–čfŽ‹$Ř÷QżäŢđ‚ +<&w"Tm°­r2śG–Z‹fO7ĂęŻ<¦7_Ü"'–ź†=ť&ĆĐ–›‡ź'őYIˇˇňWp‡ÍĚ+é>µ„N¶t‹śCĘá´»•+=ľ8\J“QŐëY[Ű"ň“ó%˝x“ËDćŐ[L3AD®ń˘÷ŇaëDT©lpa"ť'°ćëĂöŽq•Ţsk]¬Äą­żc´č ÍŐKśV.iŁBVSíő5^huMI޸üž´đ®qÍ|ŤÜ/e‹ÉKózb¨] aÇčř µ{?çŕľV“n‚Ü@)BĽXϢ«¶y;›ú[‰śř(*ş‡ŻP­](.lGŚWۤÜ÷Á%ňć¸PďťµTíTŹŁÝŚŔłÖ3E9•¬·» ě˝í‡‰Ý%;‹őtĹb_’Ńlma €¦cLÜńÁĂW‰•R9'­­Gř ü5DxX âE¤s1“˛!1|î.I¤ó.™aJOE9r t3{ĺőa„Ř»Ł†Ąä'éB<ÉNňN„|-Zt¬ëCçŮnÎFŻŘ5¶PNŁů¶¨a yĺ&sEpXĽ0éęű`FŹ8źŰ覎ÂiSX‹Ř§Zś•ý=(Y'mˇf}ŚtŚZ\*„iăĚRđx{!µń.§Z÷6+|7;*B@S©Ŕ!c^‘Ş*˘iÉ« ů†g^Ü\˘/(˛ůuDg<ŔXJu«çˇšˇ(ë,Đo›üŽË‹ÁmI> 9[ +ÂaÎŽdiýŔŐ9Ăö—>·÷»bźR¸‚˛Őr3ŘăN°[“Ó.îD»č‡ĘŮđLŔ~ďŃ“¬Ŕýő!W~*˛¨)•Ş^ŹŹmU4Ľs}řżĚ::1WsžÝĚ"YŢšZä?ń÷%}“thĺ!g¶UŠ·=·ČÉşKĐŽ~Ŕp|Ňź/<$/rĆ[ ë‚/A•Ľ2sEu[Ď•«Ŕ^ß!29éź0ĎPqşíѡwťz[ܢ˝~®°~é2“ú΋ţ5¤˛Ď\NRűžĎ$@3¬˝ô¶đ,–>“Öe{îÎ) Ť-'axůىbŇ~®FĐ .r'ázĘŚĆE÷ +"ĚGkŽĎ9ąv„źşR±ŢUĐźÇUO7ÝţĘ]ÁÁe¤b@ŁdjŮŹx®¨+ugtD%Ýżđf ” 0g†âŢŁ于 żPŤ´ź ŠČO3>“ĺ‡dĽ©4ş,[5qHEEzÔŠ1 Í›Ić3yfŻébHŽÍy*AŃŘ„xě%ś|ň©Ź"^¦"%Ö +đض9ßôŇŇ(™¬ďŤOÉŰxJqH”—{Ű*Âd‹DwÓ~ŚĽ×7Ű„JQýGĄž¤rŠüiqy ď.7đ=pYD°łAJN˛×Ęľ×÷{‚ZçŹc'x“Íź“•Ŕ¤,W×|`هHŕrďÜiw$ďTÉ7ë"ţs÷č6+ě"ŠÝuĚl{„Ü$Ź ~>>éCőŚźśĄ /‡ĎĹîăŕxq=XłOf ”{<Í‘S®u}L}P‹ű®ś~Ú5‡“¨¦–#FŹ/ˇs1Ô»9ÓŽľg‚ ™ť÷A·ÓEÁ +!+)‰cŞB}f[ĽŽJÁőź«e8‚Ŕ×Vju…YăúĐű’Qh Ę“-%éSPŃ™=F&áęg ůü`Ěđu5ďl”ş> ź+’(f‡ŘĆä*Ga ’ů®ü†wČUń=íź”ď0®'-®«­Ŕ•şbü”Ć6?=Ş˘˛ó…Đ+ţЧťb˝PîĎí͢z&ۨضÎ5cv޵ş‚}ö@U‹űDaÓT‰§ů·Ü(ť;Ú}Ź\.Ľuf-°áąÚFŔ:{:î€âú›·ÓX8Ü75ڱ…2ĚŃ”Őn1FŃ^ÉťrŢô0çLźKâŔ›¨ˇĐć+ ™ŽáĎ•p˙ѡ»@Ä^¦/†Č$zÓCJŻ÷âXă(ĐtĐ@\Şß9ňhŠ(v AšEä^ňô&ÉĚAE&qEÄ˝çŘęďɉ‚GZ?—„6Ť(5H[9­Şß<sčV5†97MđÁĚ˝ÓÄÇ„+#҉jJEF"°Ŕť.g;ÇË&—jĺ=]—/:Óó¨{«ÄűKɨôˇäŃőĚúɢ® „˙äç‹°Í4dĽł°g™a!Ä4ĺćuFI('Ťzgd.(Äug3A!V ţäô”14§AeÍ"‘Ĺ”%)}ĐČ?+ÜLP8˛€Ë +…bĂžč[kđ4ĎŞĆ8s,ňyĂłßóśC}ůž#‡zb‡ÔBs‰Ź +÷öß™¤xC–úWż‚k#]ś˛H' +ŢňžĎę'&örýhCĺ­Ź&Â8M—zDo´/ň\IÁŤ¨ôN¬"˙Ń7±ŹĂ0±¶)©yÝtŰ2ť{T&OQPů^ă?[b8(E-¸Č=>". 42%ĎŞ;a K”ý˘îs, ŢbŢŹ‚Ža¤ű*"Ůíö‹´#|ŃI„Ş[äb˝¦¨¤‹1Ĺuń|EYcCĎ\ęř™‚ś\ß"Ş8·°>žULʨ0¶t÷cµië#ŃJ€ľúиŁÝ {/3—ÚٵśŤh”×đńçTRĐÜixíD!`©z·đy»‚„„ śőGę“#,çOx·›%T޲Oeţ!PŐ ]'âÉ$;¬znš%úńČwěë Şź#DÄoßá­n¤•ŮeĘ[ń†ňqoćČ´"©(ź#Ks&Â(%ĐĽűŠńlzĎrHž8ČŞăĎ™LI„7W[QîłdŤEb„Ĺ‘×đN¦^`ĄŠž@4÷ćĘ“Et]÷.‰J˝Eš|…€ĐPKZß”Ď%ꉵ:dÇIkŕÖ‚K˛*"é(3Tió,ŹÓ^'Üľ,Ě2*<ďďëZ&đ /„LřaÂţVyŞ ]‹;5¦ÍѵđbćăÉ^V.őÇúâwb‡Ż’©©•1˙ ŚçűJ”ř_Cę!pX‰|§;e;źĽÜÝ.făíyĘł#+Ű_6Ő…ŃÂŐ\Ëżź\\†ŹÄ*ĂÇ3Ź-KEQo˛1ăäÝřŚqŢ‹kĆtq~JBťQĐ˝“ůUŤŇĘM…NëąíťŞÉä„Ŕ”ŹZĺé¤ÁŻmžu.$˘’ŠŰéШwŞćĚ˘Ź†Ln #~›<Ąq—§N!"ż?°,vŮđz‚¦05“±ív¬4Ť¦™#§¦TdČ_9§Ń#¸hĄłç€^j&YĽ]#ł¤+‘ĎląŞ»Ąb©& Ćđ uwď^%FéÎbĄÄ&óëŘ+soGú“ĐjÓĄä7ü)^!-+}Ć‹vG—7Ľ˙µE°g¬jXś´“ Öë>Ö·¨[LúŁ1Nvś ™oS}ËÁĽB +Y‘ETj+ue)ˇú˛đČKçŕ/śOnŹ[Ę3Îź#ÉUkŠ«É ÍŚý”?i8cąw#6ç-‘ĽżÄDĄÔŽ%!eL7$Ěz˘aŐČű©[c<Ăy“纊B^Hܨ|şÂe Ą±Q­'ßEÜk$řÖ"đ»Čł&•}őáßőť‰ý2/:ótâŔ·öŕWř¨#¶Ż®üA!ŞăpôŃŻJIžśIOäC9ž‰„]zV“ý4ź6q‰7e uüB1ĚĹ‘°ţíťćů^ř-Ϭ©*cpϧ"‰Áâ®@áŤCČ`°+OŘ˝ž:1i"CmˇIyA>WnÔŠ_˝ycÄ OÉŽßM‹\ň“Ś|dŢŻŮK$É~rvľŰď“:fĄ>”°(P.ĺdŐ†`˝•Íé9á4u­86 +»3Ý„;FS Ú〄ď1Čă ‡·ĺb9ţřÁÝ˙`dĹ ľÎ°yš LŠ?í˝Y<±—[šQ©f‰CŐt’ę_ĆëÜŽ–"Žo˛ŞKěçrOŚ€Nq Ő˝®Ç^ťŇŹŹSý‘ő¶č«g¨„ž:™ŞO˘)9Ëé"~e®zM;"F§%]Đ=e¬Fu–IEOĺŇ: ÝtT®Tr)xšĚ/H.ŤD;Ü­K­Ě1Ă=cÎh?Kµ6šWٰ^ýĘSĆÉLxéMĽżokďXń={‰Ü—x ¶m’NĘEc@j[u•ú>›r•Ż‚PéYý"¸ĄĄXHrőśë'ŹŘ˘ Änl/Ž-B:ŢÚ?ë±c† +#ű1h˙ků˙:; rĚÄ$#ĄĂ#`_ńµźxť0ixĂ×ÉdŞ)Ć–Gż¦ü±«E€‘¬[ÁVâ’Ł}ť´Î»Rú=§ëŰôʸU’B0ouEŰŮ"É0¸`eąH};=’«QiçzǨ3ö=ëť»ŇĐŢězĆśl°Kî]X3\‹ĎVKŚ$H˝wn”>+yyŕăk;‹żH§ž ŰV“łĘ§š[òˇ#<ąkŚá LÚě뉿éÝ$ĆŁź@Y4çéxDHĹK”¶tZŮáa2H{T÷•sČěę;ď9˛«gdń@ß|äöť`  µ‘j­‹€Kŕ $8…oŹČüIčOşć3AyěëőŞüđGGŚMÄ=y'ąF–Ů+ÜAg˛jÝů őmł˝S×DçďŘÖ¦¶Ü9*–Îă}hŚ PcŘŻGˇkW#î>p P ‘´%sNŞSżR¨˛k…w7Ź7LŞbŻ÷x"Ů©¤üĽos§ŠÔşä÷\ÔAT,¦äV¨Ťľeꇞéú¨"EĽZщ®ąb:$ů˘Nű"řŘ1<é!ĚMÓtřáHsjľHuf"·h fÉDEb2?2Ź„{Ţď%§SăF+?I ĽH¨ž‹ŘíđŁĺg ž„ÓN|6đúş¸Ł +ş^ 0Ťx!éQ\¨&şů{Żg&¬Éw‡Ż“*Qݡ”hAôĺ#ˇz™}ë˙»eť$ŚHX«B˝G×I"yÚŠŽ^9éd.3¨ŤMŃH—Ş;¨ís;4NťŚ´ŐVĚö‹&Ľ~G[FGBŹ hm_Y»)ŕqĆĎ$9‘kݤ)‡“ŁŠ{¤QsK‰y»™SÓUBٍ X&K°ł?Ł&ŕ¦1/Ú–H&xÔ\0lčMąm(^ͬó=5źŠÎRb9OB»Ä,†˝ŮPŚ‚ĐdvĐPĘ6O˛e©©ž4:ź–„“}ŘüMp/>ńBBDś]T6Íýrˇî7 e¸±.ĎNGĄ’Ţ/tńŢ…şz T*­T~?fř:‰’»FlY1·¶ś´›;S c Ő—WůrÍĽZµÍĚaÉ‘Śů4üľÓbęejŕÚaßJ’9A$cQR:Đz ®bô‘öźŞÎ®|jIŻ5ţ€[Y& UŤM.!x +›ŤŁ›´ŕžşčĽ&u´_vżŁÂ˛}{ą*Ö;Qg»Ä˘Ď÷q/YĐčhĽÂa(c®üi„ŔcÁ‘ŤŰ>ĽtIŠ5´©H´ËŁ'ĐĹ‹F™Ëg› +ˇö„醾ބ*›ÚHÄPŮpó ·těçbßęY~6”Ńęí¦Ś’5Ž÷ÁC󨏜ńA<üBÓD»e”Ńt=2‘]c­ŘŞeÝŕîŘČpđˇ?šă ‹%VßOěŤxT™A¤~…‘ĐçTÖ¤ÍÓZÓ˛zPI E8’Óĸ‘G•„ʢő˘W˨˛·,ţkĆ‹ůŇŐácÍ ę±¤ž«ݤ˝ĽÜR±XQŰöŻŔM—ŞŰVQ8 ,*Çk4˛T|éŕSîšżĐđ2ętźĂU Řú‹âPgđîŘP۱ĺLtQË´äED&QµÔŘ-X‘ŐëÓv<šR `ŻTŚBbYcˇžśáD™úŻp$R_ĽéČŁj˛Ňě×xGŇ-Ä9٦ݱ<í5l{ ! |’dâMý§čżIrĂŢď„»ńä&÷! ‚%{GÔŠt?x ö÷bÎ%®Ě@ŤQoDă[äŕśÓĎń8Ö_ŠdűC?Óĺh*3hă‹h l‹ ™ŰĘaP¸Ü§Ö=×–#HcčyĚë~‰Üş ż…ÖÍç©^´Ý‰űnťÇĎĚľ9vź9-ąÂä;Ä×ŕb;©(Đ˙U˙Ě©’ó´[r€Ěśfť~ĚČ»&ÓC]/*ɧ6î×y”t(ÇÝh€šĘű6^¨YtFxPеCâ¦+(Ŕ`éĺ Ůä‘_čX)©đĺDEc"GpŁĚ ŮÍLM\Š*ţÖüąFÖ!Ő ľIÖŕÍ9¬đo E›šXďWiŤĐ˙ÝĚÓ)’ŐŰ€˛,qeawGm˝Y\Ęqĺ44V¬PáJóř°Őz/SÝĽî`şČ‹ Z_˘qăÔEi‡Ô3s˛ÉtŃBp»ÂĹĂ)Ł«µr§*et–iSKI,Ś]Î*/Ěž‹áU44d§4j˙@Uą—Łe3ůFőFA›­ć±b“g?öĘ +€…ŽbţŇűĺžĐ~i8+}’¤µăC!šAŢ߲śŚh[ĺ´vUH©ű–§+&—SBIXy­¸äĚrřĹV÷.ĹąůĽt$fÜđ•J÷řÁOÂ˙]=y3Ű$¤ŐÍXKŚĎm·µPě’şÁMČ Éđ‚ôDT/yE4¨$N )o.7^ź»Hx µrH)ˇżďcQÁ1ÖťÍřąź 7+ž.q+`‚+‘˙€'ŕĹ©/ßpŚö­B‰Ë­_Ç9( çwżéź1Ć™ AŃ˝Ľĺęűqţ®DóÜq/¸n‘ľžµŽm±żÁEç‘Ú.ëďrŔňFÂŕŐëŮxWfĄŰ©FőĂ·WÍkҹР_µť|ÜË»ĐËŁśÎĘ` ř9\¨DdNKIö\4/ ‘‹˘'=ľ‰ŞĽ§ó :P>Ś€ëľ«űRł+Śx”C•áíŰa˙b\Bň{Ż›qÚ”)‡,+q˘j é’^¦MŻŘÂżląQnx¨¶H &HpłźsąŻ';9&rł­–[ĎkLfű˝V…ä7ăčs‚i© »ř4Đ4ąĂX?¨ D·’Ü}^W  3ŮđjócSgÂhĚő—ĦŹ[ńČ´u*uůubšußJ’×y”•q9ÇxDD(yuăVO·OŠ÷,RňiržĘDnâ/ +EëŘę ^  T ŢíĽÓcP‚c¶TxswhĘIíQMŢm ř9âÜ˝ é®F WűőˇFŻOriô§/Hô¬1ý*"뉔ľć;đ#[¸WËűK@«Ţ‰ę㥠ßŐŤŤpé’śť·˘S˛ą—a–;8‚<ůK˙MqgqŰŢ5Ëäó¦©(ě –' Aí^Ëý-©¦zÝ‘çÝŃkÓĐTBĽáoO~X܆ĆG´ü-Ďä–ßv%ŞŃäW n)Z@Ź©ú¬°+íö<©Ę3Ü3qÂŃ>f}„öËŐ"w*—ŮŚäj›Űö™´đ8ḍwęÖ8rźžŰgáÔębŰţ롔ěÇ⇯R"@xˇ›¨ó„Cäąýň¬$jjĂš¶ćĘ1<"DŮŐWÍ1óŃňĄ0žĂ¶H/¶]`ĎŮBhîĹ;rË“…Z+qô›‡ věß‹ĚĹhÉšĚä^.:`Şí:›ôđäőą>-ĄťĹîň¨ł±‰¬<Ä͢t© #ľvŁ\+±z#)ťťá·+A{˙ĚĹÔŔô +¶ŚťŁRîČđľ;âżÄT¤Ă;˘#@uĺČşPă÷liÇňíĎi2T"sHłD&ĄĚ¤`~ÁÖZŠGýdŃ6Ş,™–y7ŕ@ßJ/©‘röošG˙ť#7¦nľŕíŞMüßô3`”ÖIŘ8NzhĐńŁśž,BĐiBăÇSŔeË ,š.oK1»˻𑊵$9îŻĆŔŚŽ{]©ˇßŞ:Ě&?TfCş\uŕ-ý¤IĂÉ’×Őń zrŰBQÝŁ˛Š´Ôď0›ÇŤć—*¬zÇ3X]ą·‹Ôâ–äĂ*tv9'‰S ˝[”ďńc¬]z-·ś_Ú'.¶V‚°):Ö@‰ ¸őě `žŚ\UScó·ÇËé&~ŢĂĆ‹G°ź‹˝°žŚ3ů}§đ3–ů’B÷,*ŐĎp Ęă.KExv‹ÜGĎáĹÂ÷łßËó6ű’qĆ\¦]'89­ś†íĽ›sĆzŘ"Řx‘ó‡ń#,g"ŕiŇŮňůŰ‘ł•»ěł˘|oqhÔÓ¦żË5öÂaË{eËń\O`SűăA ¦D©4ŚăWb0|™Ž7‘8€#ô~ťîŕ%­g÷WCř$Śv‘'=ďlv¬[çmb|íL@|Ńm‹ÍßJK¸ 9x°61é"1]V.‡­ ůŠíŔ!ńőµĄžŔ1sć@ą@€ŕ• ţAć«„üą¦Ę1ę¦>YYç6ťî)ŰŢ…‰L …ůáa$bŃmż@ůJˇé_ň3M1<÷.}ú8”}î ąźTĘe~ät¦Ţ75÷p6O€Oe`Čů>H|ÄäWđ%ËtAžćí7ľ1o! đĘ«›ü–ô jň×'bM«BhYîŕýÉ;eťfíHĄ ÷î-ýÓĚM˛xµ^ĶK°´Ľ0Á´Â•ďW-"UÉL„ŃťµŁ9D×´ ë5’z,÷Vü•jŰßOĹĂ0ŹŁ‰TŢĂ«`ďŠf÷F _ĺN"=s˛@µ )˝ĄîţęG'7Ók‰ ź= Őěđ Ëe33ůü®‰¤AyÜ:de9Ý/f©RcfklĎeęęÜ'¦Heî~¨k§ęú ˙ Q8q+ĺZpkĽ:‘vł­}0ôDRrvŔŚgµśÎov·NĘIĚ~¬)“ĂG›V^8,’weňĎ> 5$ň^üţť/qwŐ˘‹jUľ'Ź•?ÖĂëŻŘ’ą˘LjéŃż®óUQ§mXMătÚ®!)E HŹ;ĺÄG4]ĐsΞL*%Ń©ęŠŐ? ×Qů-mĹĐ7`pŢÇDÄĺ\TµFÚ7 +N=Âé,Ľi[´6oT¸Ć]É*ĄzK5 ˙iŤuĺĹq…é¤O¨;…®#§řEź­b‹î;q››ČőpŰľ¸2É_â^ÔŞŇgGä·w\i!LĆbżöTżko"č+ţŤ&O…÷IÂ|«ě^e€µhv ”×A'Ť)´‘i˛ëgɇ<Ř ŚĄ`F,ĆŃüĎŹr-h 3˘¸”î]ÁHŕż÷f¸ą·f"4MňŻ]ďŽĎBÁ)ď%klyÇ|XsbÚ|ÓÎ&ĂS$ i1 +¶„Ŕüč^’‰Lálcćb8c„#€YŮ!”ĺ2‹úΫ7")AŹ9ZHĺŠ?żŚ„éć¶)Úź˝ ÖšÓęj˝ž`VňçT–źf-DŤÎţóńł«\ć·GŰ"rÚł6‘°G#oä€noŐ7íB-±vF+đé*‘ߍN=cŔćÚľ7+Áo#ÁűáĐBß¶ď!ż‘SiłÓÍ$/ÝĂŃ N2ăęÁo6ʵš3Śř…®@ŕż¶ëëNóşĐҸ’şá+OôX‚±ŹŮčG Ô´mŃŁĹ_0âö«ú“Wbî‚ČŤűZű2ďUÓž–qŕbÚźWghÜWAĎÎĐ黎”9’7TD„ď¸ŃU†NQz`î*51NĘ ČM9oş‰ G,’VŢĹHO˘ÇgBë¨ä"ŽJťĎXŕíqţPŹ&‘ćţkţ-“w˛`”]‚NĘŠőÔäĐ$î&w:ÖQöůLľ˘|G + fÂĺŚs&"®Ĺ÷µLÄ''S1Dx9ôN#ęŁúPrkqżjŹâ,ŢŻüľˇ„“ľîsC Ë) ďIă­gBĚ‘/Y‡ŹpŽĽnç3ÁÍÜÜ^^)ĽL¦?C;|DVš T¨˙Ř”™;ŁŐĽĎ†ćiaÚľ^SĽ.ši)%â(öě 5ű…ÄDG&sfVÜKŕM–´É‰t€rł•‚á!knő‡·Y‡Iľęí”ĆWĽfâË€%mWŹna.–}`’ůłÇĄ#*m–Ě5}ąĽ¬“<ŁĎŹĚ<É÷ Z&D®E^ˇR!&%D0Ő9}ĄČő,ŕË_*ŚW‰`IÚ±m[D0d"Ž8ë~1°Áý+!‘î*“Ä{0ĚEÚÖ"vĚáyÝF쉩¨Ő .Âń M4Sx?± +ŃäŕÁ,ěC dž=‰ď9ĄČçľ÷¦Ă{1î¶Ć¸ôŽzĂ{•gXDD÷×ĆŽpš&FTd4yŃ&’n˛3l©÷7“ôDć}ŕś¶uvôő*w4Šó^W§µ)•’Cm5_»o'îçb&÷¦xÓC˘ođ–ϱ#óx*@mp9a$Öwí÷aEÇ'Ă8Pëňäź6G˘ŻGpaŚŇ:ň>’ßůNüö[ĺ¤@U:ÄÄŢÖ˘ŞĽ^f·©âŞ+µX!•ßî5>âö}Tß(^"B%T&žÚWB·Zň”° y§[€;Ęx$ĆdĐĘöZNŔ‰‚ŃÓE-ňYv”řTq/†rÔ¦H1ŤŘ"r†sµŃ“ÄŰĆÇŇL¤¬c<ą™÷#î…ĘZúl%č- !đMi=ÜStÚÓŰ)$™4ŕ> Uw”Š Ö'íÝUĽĘ puÇ»î,úŃ—›ĘźóąqŻĚ÷(•°ULäUü›ŹüçfPu"Ź[˛ěÉśDü\bcI%â4Ż&ą/MúzµbăŰĘäĎť0ďşwZ!ĎN”›_Ě?긮†A=¨?C|•Ő#“öpT3ó¤ą_Ħt˘IlÍ<wĄ#†Ű[¤•¦Na#é…`Żm6›ÚI,8zĚďhŤu»Ěš„Ń‘v6ťˇ»G8„ĺ‰&Ţ×ld(fg<—˛÷ţyNąSoš‡bö>‰ BYeiśDqbě„^ö`oÚ×é —08wä ˝D¶bť8v®,„ĺ!@˝čDčS­ÄnÉŢđÓ+¦c[´R\éĽÖJ‰čüµo­,ÔĄĎ`ńh˘á`䌾‰ ZĆÖ˘}÷Á#×JĎý]$ T¸ř(JÄíV˝íľväbĚ=(î+'Ţ^§AÜŠ+gyu"ď•ËIŞ”b™ŻBELÔ'î'öä4ĘoaÝ.˛Îš–bÂÖţq+ Ôiá䎢4ń8jD*ş9łĄ«ćş&娆ÝOt}ă®×,°ťőp;‚rÄbWĎäÜĐśZCîńşĘ˝ňdÇ˝řZ €s=üYš}půšˇůż¸Š2˛~Š'·żM˙xÝoőDôň©±<¬g'૙ËÁ9|1Ą€Ů>ŕhµů4‡­đ ©źTÄs©Ś<ÇE#Ny$grô†Č53Š®n‰'GÔµz[ŢŰ•f.|@ +…‹Ű^"PܡwT¬nQÝÝ>ÜJő˙ Öw^ňŻ.Ő|IĘĆp€—ŕpunĽyYťkDktĘiOn¦ťî¦“L_’¨6Ű_Ô5°÷€đжoâ‰3[ 6JŰčź÷ Ä7ŢáˇtqTž†Č]t{ŐÄħ"’’őł ćş±¨ľŹ–«ĽbĐQ*N˘ŢŰĚÓ üű IV•ďćK4v/ĄÉŞç‘˘ÄSxÍşbżHlS ĂżH,őŃöę°Ň`ˇ—Í!Pʱˇ˘lągž +ó( Ĺń!ţ"K˛mÎ3-WŞĽ +ßYH­üg™„™(ďa^©A˝  oŘ…śÝ’,TëÍx&+JĐ}.â´e#ŢĎ$덠¬6Śż(`Ä^ ¸ˇ%˙[>A +Ć˝űAë%=‘}Â6Űą4(§2Q%,)öކ%t’Ň•oŽĹMŚ…v_±ő ‰íKxťC+žvyŢÜ,PgGĹ›­w©¨3˘\Q^°Śę#hg¬Ś«źe©ď_ĄYvgoHޏ9ÇN‡ +Ď•hŞ8€e}Ft« żÇhX?LaRGčć`-uSâĚD€µŚ„  “LAÓMXvN%°\?çbćGŮÖ|rK^ł1?ŤćŽ.L…%;&ďîgÖě±AÍKh¸h®ĐMůö /{ő`ś¦›“€­·nŢôäq‘ý\$ß]Ă$‹ČbÝ+”+Éď´›řt8#Hr<” că̦š1499jěD µçÂëh‹íÉÓ ›Bgµë1^íí\í䣤Góŕ`†ÔQOľ‡áeiŹÄĽvôEáv.í·Ç,OŽĂŮ>f)ňVMr Í– ěČK;äŚŐLąďŐ»Ł»–ÍÓćđ|dq +Ťńíqç‰Ř˘°d|ÂŚŐxwßápŐ‹WÉhĂŚ;Ú!¬±™ůÁŕz +"O±@śÍŽs}N#OQדBĂĘś‚Ôü¶*Í%Şî*ĺíx3ć—piG8Ý™Uv ÔśÁßo \VżqçI­ŃÝ&–0ĎĘš© ĄłĐđ[ĂŦčßd®ˇ ו¤=± 5Íw¬;„ىb ¦ŹÓŹşéş¬ń¦$¶U.äŁ"0€ÍCí|Ĺhů: “ó8ˇsťĐÎ@đŃöjłEĄH‚|ŕ÷Ű8ĚłľóšőgO|*[™xGÓ‘ʆo´$Xĺcl U¬ç=2 ŇéčY łYEĹ=Éu˘„ë1•ŹÇE 9şa·GöT›˝€ VÓ0Ł%wť‰GŹ s¶cˇYţč™ÄĹąxxuŹ'ŠÜ]°”5¸9€qh1ŤäÜŔf$Űk8J™OÇkVuA]żcŠűHPëG0TX451^Mk `QdhXu9Č1o7Ş/$€Ëćl]¨ůĄ/’˛"~NńćŞí ĹN¨Ýhî·ÎČÍn°‰ šÍÇú«‰T~Eű5㬤”ŹIDJPqâ¶«0»±Š0ÁĘIVg/ÇČ/;÷»¶T$ý[*¨O»§VĺU¬ąáŢóądE'{°ÝŢÎEłä°0]ĺŕÓ±ý±‡„‰á“ís¶~ô¸LŹ•1Uý‰ 7:#ŞWŢË#” ‡8Ëal˝§ŻXÉ–bâH‡„XĎsď!ÔІ{ć*ŐnGŇę™ćÍÜzÝ“aO’)›âR}§Ü±ňĚ5€É-ĄˇB‡Óëü·ýź1¨čIĄčŚÓŐěłÜW˘Mer‹$V$©±?ďşzÄ2OŤM¶&ׯ)z¶T˛fsóŕ@ôĹzÔś9„ű¬\BúŤĚ +‰¬ĄvG>đml]yŻ1M«H˘Hf=*¨9骟¶ĺ hř*«*(f¬`‡^JŢŚŽż†ö^„†ĎNY몹Ąp_ăŐËŹoŞ®#ÚU$ {SŽfŻhď RĽŽHKöF-Š1ŠŘ3ß-ţQťf44÷á]ˇnËĹdĐź¤ÎTE8€ŔLzń˝ňL=Ń4ŕ]ć +FěÝsĺşBZ;$«Y `X´2M+—ł0ř Ą\Łń  +`Íéö\@÷*IjĄśÖdĹ[–#Ţ !Ş€lŹtpČ=ĽW•"řń!Ą›ôăô¶ÇÇJl|ą“u6ĹíáŐŐir”fzK>Ş”+7bâNâřiäNwžsŚĎÔ65a뤧ĚާO  ÚAĂ!qŻELÇ;§’3ňPJĺ kÜ'1†§ě–QŐO,)…=‡ÖňÇ5…~Lé, sŇ5ŃOk=;ÁŮ‚Žc.T,nłÇňĽód0®8‹8ľµŤÜĂŁŞ%Ypk§Ą«˛SşÚ>!zź_˘šCLÁÚp#łkjc2>Ř(Ú–M`Šľ‰ëU; í üĐPů–ĂY™¬K!Ž«d—µétĆ$„ŃŚm‡`·źS‰ -vU.3$îXwó1Ň!ů¸#}YŕŃ L¬’h)îU»#ŰÚr›Â˛…Uf_Ź ŃšvŘö/ťDfVßy׿ƻ®‹lÂŇččá^űxŤ~Ěd&óŻŃŹ\3ŐŔ»ËĎ*ŻvĂŤ _U¸‚lÜĂ*ą¸ă(0“ÄđË®‰„Qł ŠŠěm-řx×+, ĽnĄËă‰óé`ěI0©NišÉÜ?đ±óUüĹJ§hč¦ËZI<†ŕ>±ö˝ć«Ć^>RvC¦ÜWą¬$Y"g*G?ůÉYLŮäŃ-—ŮQ…o+_1=î»96ŐčlKy¦îz‚†`Ű(I†¨şĆcî őd89°Ř9şIČ/óÂÍ!!ŹÝôu‚ m1«´ą´.¬ů˝zÂűn3żlé0µ|6G~}ꛀjŁńŘ,Ř;˘Xu™H 7~yáçyˇ!˙¦T T +Ťľbhxđ`…Ťî ŞˇŤť“=ś%“ˇ€Aa—wbŘ´}0D-Î<´03ÂŁŃŁ˙j"Ľˇ®)Ipő´Íw”N)tK^©§%¸ÎѬŽů“iČBnP0©V ý± ŕ‹$I´.šŞŐ+ÝĘŻˇy5č÷«{J”Öľý¶Ú lĐÚľlŞ]˘¶jŠšC™qÎm/QcĐ!÷Ę«]ŁYsP§—™CífÜët·Ç•ôwEyĐfÝÎÁĹmµŻÇN±‘Őfaýĺ¸ř‚ĚŽ 0 +vlŁUE–Ąśm KDs%·}é&ÓŁZ˛Ę@—E©Ź{±SšŮx"ťťÇ)«#‰|ÜZÁOĽ®ŹĄ»C§XýśŢÔhś6Ŕ—” ¦uL†¤)>u*,LÉ1Nó!ź@>5=ËÄŘč­ľ.:•<Ţ]I˘"Ŕ˘łăń0…d¦vrtňĽkIzŽ“ÚFµü¦x­7_ľBQ3qˇ zŔţÁ†Ŕ 0,â¸B€ôq/9(7C[ŠŹ­†ÜŕĎUlLÓ—Úŕ˝ ňĎ-é3“TEäÇűĚ÷t'L]îľÁj,nČÂ$źeH¸ó`ĄÝV[\•/Ź·4Paí´Ł(Ďż˛ľšSŢéĚ÷=ź9Îw^vTĚÄa'çGŃݱëU8ďí\m4,ęßăhm?Z/-Ńř° PAŰMŕ´ •7’Ţ;6cOT4…sś·Ďň‰v4x‡`)Q;ň›˝»j(@Dą¶ENyhq?ł¦-B/b”¨¨ZTXđA!ŔfŔ«yľĐc’v‹f?xŇ~ßČrŕ±c‹+ńuţý~Ö}`]WÍ®sFoYŇF#ľ‰ 4eYß”×>2Râ«Wh%ŕqůę{š9<.fšą`,¬ŔoĘôčş{MćÁCťřűĚě…p¨-RŹľ®mşŞŚĽ—$3ÔÂ}V~ß d$ĎL>¨Ä¸%VwXĺ¶Ýf"ěFáF¤D—=aţŁK-gx?x®Ä»ń^çơÂa¤··gŞ‹IÄ9rŽlř=ź”§“ÂXQ{ź ő·,&=©nt1PnCđ»řk.nĹÔhŚiÇ˝Äq0-ťĐŔýđ@ŠU»őó/Ŕhn Áݱç‰fŞDOL;‹I–SżW;ďDîvÄĘó.‚±¶¶0îÔîsąňS¸T·śŁÜÝE©GNyÉ9rLó6âŰÖxůş{7ż¦UąŁ a Şsk6ŽČłő‹ĘĎ ôY3–#ŤĆ#ŘôŢ6Ťšž%ˇöę¤íľÝý­k—ÓQ9wxŽ%ńĘuí¸—‹$„P çĐËxťýđóď¬|?Žř*K©°#;ďĐŠ"¤_C{/ČwÇ'č€kŚs)ÝsgH×¶‘Ä%|CŢEŔsč1¶H4—ţ€hÚç}íĎź‹ÖĎu»CN6Ůsp]ŤcViňřWšŮiŕ@1şN0t`ž~Ř•NŤf“HD-5yr)˛ńŽŠ(ŰŞ¶oi.ŹÄFQesج¨´;ŞÍ´ôŔ­ĚŠÍ11”Ô–”­g¤0̧Ďâ·‡Aä«~¸,ŘčfL ¦ÖPĆŕ°ë`iŠA€NDRaÄ<~eĄđVˇÄŤ5•ó^É_ÝMŐšS@şýoIf˝rO@z~űŤÜHmäÔř$‹§™…rwľčŤu—g±ě"v‚‘xr¤őŤ×¦±Éx󊛏 $&ĆÇ© ŹsÓč^e›ďŤ ĽŢBŔüS‹ßĂ"ZČíć“I­&ǵP, E#ŔÓ–áBË×mą1 C¬Şű^@3‹‰Ć_˘č `ÄŽ’"ÜTŻëÓ}$^8Ph·"8]ßV˘0Ą®”dpT©6Ťa-úPżGL-Żä V±1ďęć<ů…ô+śxRU:Ł­<3Ů{ÜŘô3Ě½UďɨI„ ś +tD¸df‰-rÇŽ0 1WúµK”ęË÷Ĺ5łĚńAQ˛2®×ÎÄDĚM°€yimTë«üÍ/ÚäýEYCIN%¸, żPµŁ@ŕÄIOÔ$5´śpG҇ZĚ´#ńŕ7ŕ˙˘~‚ĹX´Á¤Lb˛Ď‹<Ůü8&»†.Ç}ŕşĂ}ÜɦąÉGßš«ß<3iÄŃ0Ą|>:&˛‹UY ŘwĄďŤ@ŐHŇú ĚŁaFÝŔG1ˇ°ó[˘:;‡a‹. ŹűIu d…Ť +nĺý%˛XđrˇńçćͰůň†â3H´7:ŰtPRŻ‹Ŕ*ËEËÎ >=Y/ÇEý-!c¶ť”ő2žóVݩߩ’ř5Á•ÝCĽÂ0žŇjĆóĘ`î+»E?á›UJ,€»ü1¤ĆťŤ5K‰<ć{KMK¬ýćIÁŔúLFѢłuE'=Żř٨ŕ«vç’†ż8Î öĘý2ˇ˝Á ±0?ŁüµŠ±üĽJJf]“«É!?sCś©Im‰s\áďş–ĆçYŚH6+R^QĘäQ6½µp÷âúÖć_ó@0PoĐ;jŐ"4ÓîĘH `zŁÍlDg”‚Iß{"K"™ÎJó'~\ÁÝ=Ynheńń˝G·Z‹yPrńWSr¶śő‚”ŘŃŔ¶1S›C©ŰyVâs,t*°\ ĘÝdö%>ŠŁ%©UŽňúJIq®ç+–„~ \ř*wÂ6 í­şÂË©­·á¶üR“ég«Bm_´ě…ex/ůÁŁçôD.ĄňžŇĘĎć÷±Veçźć3 ŻW°u…ˇ+Áąő•čS9îÝÎb +[‚emŠŇě?á´ţ˘%řjĹîÓť›đZÝě5ć±ŇS#ăl|®kqU;řµŔżçM"ĎMď›2#ÔcG‚ď†.fÝ Fá9e9Fuě»Ë_d‹ŐôëvçÍő™XşÚ©Ń¤ťĹňű˝ť§/·%®G4ř®qgŽäť–ŘÔ}đziújşĘńc0y[¬đăjJŘĐŹF-ŮĐÂĘşNÉTĚ%,oĎo‹ęő#\ľŮâ…ăqË˝MdYű|Ź@¬q]—_á-ë­&âęXk¦¨ď“č8 +ó‰UŕA+!Ů›qŕpăĺA'éń +«›Á;«ę­/L„™zŇšLÇ©ČHTěL3îćI› Íó‹_¨Žz1)a} V]č'¨Tą4ĐŽ:ä¬ß‰9ëîXâĘ©R•:Č Kw]ů’oNŚęęÁ?«"7MK„+¦‘NĄf­ť‘–`^řü¸Q´U¶¨{ŽÖ*9‘v†ťąÉ&¨”Ä•€5R ńŞć>«’ß~Ŕ#dňôťýkĽčX0Ř/ …ˇ(Ěšmůlć»'×,úç-,ß}™©ăDšRĆJkÇçW•”’łť$z±†ťľDĄľ׉ˇ…uB@ÝÜÝ}đĚëá%fü7íĺͤYuFl¬Ŕ6pz—<ŞŮ&6¸Ń 'Ě‹ÍFč÷´ơęľXÖWUbލd€:č·Č±A„ÄG„;ą0d>"ĺ~o©‚xOô7Jó8q+@·/»PÉŽÖąźz‚H3Ű{ë~żâ_Z\ÖîĄ#:±¬©tá3ô·„hÍ $Đź ňř3ŃĄhŃÇ=xpKőŢ"’~Ç<‰~iźŰ"ľŽáßčó†ČĘžŹ +‘¶ţ1¤˝´ęây˛4ńrč7 ąxÁÍILśÄp˘JĎ_dČžąK@ÜĽݧpĚÖ°í™&âŮ’Ůtx®-ľFÔŐ@ĄőÜGü Á#ń`>ŃÁXÍ‹¤qĆ|¶Śp9­¸yĽ˛2É"Ś|ą¤{G† Ü~˝D˘j~ĽŁŠ0vt,ÄĽ€÷aókk]§Ĺ%QWYs/A´iĂu†íű!ĂW)Tű`Xˇť,ő`w?ÖÍ廀Űä +زăY¸A§r%'¬«--ŕ¬JXŹ›V‚·Őš)‹$źFŘo×8Ę`a'Útőą×/2•˛VbwV“yZ×ÜLŢćbÍ ´0CŢąR×3Đ­¤Š‘„Çľąăyś>yođáE%Ň˝—3ňX %_)Č)¨HăŰ~®pGÝäb@V u©R±µ¤vĽ*běsW)w…ę1ŠGUě¬,ă•y ŇĆ©ČCÔ‘|z* $±P±l kdJ"_…–RudŁŰ›ť˛$ ĎzĐÁł…ţ¤’}‘čYĽť“:t–HÍU$QHůrś=ÉĹ^s&bw}; ˘ć5ŢťÁyäÝŃ|.ć¬jŕ"1{?Ďx:zb×`mHô‡^2¶ŚDGŻc_KŃp Gdčúäű˘$ôFLŔ{ůz!¶ôD<[Vď:ÓpÓSˇ“YĹć;—öÂČ9 ’AÜgíť…´Ů´CLŃö› mÎQa¸ý0o‹xw šÓ f_\Ď3™ęŔ?dBőť7ýköJňP ’ŐĽż6ęŕÔÄkĺÉy˙^ í˝sÇáT}”%$Źté>ťUď»§+™­őŻ0珉ńľ&ĽľsJ'hÄ褀ţý ? +¬oRˇËŽů>ďA +ž™x‹Yő÷V’~2ଋć>˘*DĄ~sîc'Ě×ýîý[€&ĎEUx źś¤˘»ĎďÄ:ą/C[Ő©Äb«ăc|ĆË Űô‰Ő-đ–öűÚÇy=DŽ^°rőĺÓ~ä䌎;3ź*%©ĂťK„JwËĘ[$ŘúöŹŃ!řÄ’Q‘cď¶*ÝJ¦áz &PGé7ş¬űS?‰řćw÷µz{Ë7ć–r«~AŘă D.ň"❎Đ7”™}ő{‹\´ßă"˝=ŠÎĹËř9À܋šÚ^˝-<:uĐ®u×$nöŚPäîŕTt+”QĐú1mSNţµî +q“\+Lg:€4ŤzjŕdŢDĹ{áoiŃ(Óő©™%¸¤Đ8>U/·hÉ/]n«źsp¦úĚŤ˛»š L™mLôÔb™^ŮZI žS°‘¸•Qz`»źłFô&T¦‰…±´2VÍ-¬ĽË VżůätŤ™×vVľ$ClížUS}Ô€†hşo™G¸A۬‰ţĂWŮ”’)çh§Ć®9%ůk +e_íV„¨ĹS­XĹąöű0[ćo#ÄŽ…›lzą€,ĂcsOv±ŻŽ:˙„N'ř—6^ĺF¨šTŕýt‚9Š{M&PŔ÷łökFz0Ä´ÝśëVśą܄Š(ŁĐČţľ‘k'UĘĂ´˛(:ÎvĚ15 ŻćŁjyfî°`7ϱđł‚öH;˙˝DÄĘ- ]©j2‚l=5’ŔŽ5şĽ“#=J2sQ.žłjÓŰi˙ÚjÍ$±ß‰„¬'ś25SZßłŹ^˘łßýç0ÄĐžE¸?ĺS8<té,V% v­îňx éÚ® {ÝVZlŃ"˝Iń"9žĐ ’@8’'‡yu‚…\„gČ®˛ű*ăóŘ0~´üňĆßâ@!V<µ+÷s©/'!,Uů‚WľVnŔl‡z%Ňĺ +;L wđďWć‰ćtĚęX4'W‰˝s5ącTä &.,Ż0Mfß¶›Ďr—Ďžá§"®śŕýśńÖŕňÉîíÖ=9ŕ‰¨©"˝ˇoX.ěP+ř$«[Âjݡcy“Vť.ă©(xäŐ2ŘčQÝsěî IDu_xL§ľó¦M©’¬šŁß Čn"îLäjTt7ŞĚě®ĺW]•6y’I5óÍA5 +Xz}Î*vG=ťş¶ŘHŻYIĘ&KĄ©{LŘĚ™Ü(žűÜfk2Jë~|Ů.1¨âstXśňđ›ŤÍGÄn™źkß9öP—ç ‘Dë˝ŔX–EˇäI‚\¶¦0Ť­öˉ*XE±®ű˘Ąđ-ňÚ±ÇLP§ˇĚW˘€d$a:Džcđ S^°¶ç®Ö°÷˝ž?ű9Fő¶Č¸ůx-|Š.ü čfżxŇ&dÜ‹a‡¶TL6v»PŻÄܶEśřý2‘–ťÁ-qeˇ)n%±JňuěÔ}…čŹ)TŚJĺÚ‡'Ó¶eQźÜ"3*¶ŃĐ•“gäëFÓĘŽrü ĆĽ8ńnó{^h&Ąç]í>SMŻ' ćtbÁw!ňüŕ=3N"ÔXJóâ©}°FäŘÚ„ Ë>űä!G€ćűsňs%6ĺ¶s•/ě8Ąćc¦°y8ŕJ1ß6ţvb™Ju†d—6čśP©Éă®ôáN®cż]+ü3i…·‘ż^Ą“Ţ ¦IN­óč+´„MÂź3/€ĺ‚âí"&EË0k4áqě‰ć3ď×OÂuٱ¨âý‡ę’ţDO Ľu˛Éb1>ĹÝýĂżśŠ#ţü±â‹ôJWÝ6oc#6ÂáĽĆ¨‹MO˝ŁA!âvő Šß@őhA~|™NIýÇg†>Ýr‰ž¨B„˛çúť=&˙ť–!rüU6—âÝ꼗¤ř{şµpIt¶ňÔč˛üČK ¤:¦•Äآľ^RřXYH­dlť'J<ń­qmaDŇ[chÁęŚÄdŇBĎ“(?řÖ÷óf¬×ŮgB=Ű hÇ­”ăwd¦ ¦ýč^ IËů'Ř +˛LCÝ~đ[$mó®éţS±ŹO{¨Č»«‹&˘w÷Ë ľČŁnş·JÜjž8xMĐv‹© °JzjËŐö®ążĄ":Bq§Ł»y3đ'É›í5úy ’7ťzÓű[öÜ9¦ř說SôĘ1ŢÉεí]?GŠŹ±Q„ ŢKňHy«zPÚv@ăŔéŇÇZąZ7¶·~Ţ:đu+Ó™|AQóX$™ĂI°Ż ˇî»ŃáňÜŞ©ć8‰ÎÇ;žÔâ0ě 3 Ł†d5Ćž2ÝYŁUŹ +•Puć¦|%g˛1ţ¸FĂPąĂ›gýHľTlŰ©Pî[ągô? ţ‚|;JLŐ‡i—?Ő'Ĺ^ r ·ĘęÄ4Śc]TĂÂí™˙€{ČäęëWť3Çäš‚Ó'©_‡Q×1‹c&rÔI€Ř8ŻúŞÇî!“EoińÖĄ‰~üŃ~:Ó#ŕpřx¤Ţëů­(Z“âÁ2iż“ Ŕ2f‡ŘXűB”—ť˛‹XIáâ*ă5_µWĽ‚Ł{“Á’ŇŁJźŚĹş*YÚsT G^—7‰’;Nk,DW“z¨Ń©ř -‰â78că‡za4Đ]Ňč1ĹAMʰLeĨВ».ăFËU·ÇÇáE€ęâĂíöSŻŕa‹ÚT^1ąąqhJrŰm <.FE;j‹ËČŃZ®»ĚÖ‡O­ž™(4×ĺmýłŘW±„BQ•-đż.ŻŁEš Ě”QµJ ď»9úŃ|c!ÎÂ`ŞHfçşa{QĘď5’n\×gç» +©Fŕg8ľ”gwŁxUIGMÄ{đj’€1DŘń†E…iCa0Y—đ Üši‹¬6ŽLÂH×Mj ”qXŔYĹZŤwśzÜçˇv˛ÚÇpÍŐDÍĚ8ŻÔî?˙fŤ˘9ŔżçŘďą•‚…ŞUCäIňËĐę‡É«·”Ď0D•ĆBě^é"Í +=„ óvSa«îšKń.Ct†Ç±“ ^3jşn8ů&ęxŁ+ŤďEđ Ű©ć(«Yqj÷l‘Ţ"—ýˇPá«$JtčJ$…Żľí•ĹÍ“‰šeĐa7‘(vôoĘ1Ž2î5irřů°iu:O +„čM»‡ůÜĬ€ëÜžDĺeäd§js®¸Ş®¶š8Ň©ĺ˘EzŘ{b”4M ŤQ{NB—÷~ PkF ŢôTEąDq¸ŞĚÉQIwU¬©—d!±~njHlż0Ő[ćYx;rFü´unÖ—ěľY ±vx‹€ł9ÇâTäy—»ĽeęQŐ®ÄJ?Ż"ŢG íéťŔjT„÷˛FzX»â:>Ĺ?^#Z±(/ůDĽ#?€eć(Ç*śLO`ýąŢřBőU_Qwú)l§’˝ťXѢOLR.§ť|é~ť‹ÖŻŔ¦-’ç +±uäÓS;ÜLíTfNȆý›źěú·H wIź­cžl(ʰˇiÍŠ 9{ś(á šĽs)ěŃČvúpü/'Š’áú[É…ys1Mg^wáŐ# >Λ…Jős¨˙čI* 0y®é–9ű˝$¤ŽJoVm™–-˘śą>˛Ebjˇ{D™ë,SŇÔ|XťqŃYŐh0qXÜ|Ĺ&¦Ý+P˝ÓÚ~ĺ2‡úÎËŽY‡É]¸Üă(– ¬Ŕ%Qů ˝PŮş*(w2…ônŮ4Î!¶ŠöťÖunlćˇ<Ťv<řVN=Č#ÄS ZN‡Ä‰ËÜ–Ĺt»ŽčEP¸Ĺ)#ň€l~jäa FÄŘ4ąŚÓµöĽóíٶ1gR©×ŞŘŔw’Äńńmůąo…ÄŤVĽ'{‹‚˙?•€;¬µ3<\xü RĽňłEîNLÂaţć-Ň=†[ËDžţ"î(6mѩԻ$ +ßdéQůÍÁ9%“ĘÚ·ŠśQ1@@îóÉ˝.¸˙8đÜě[OńbaζČč†b"/W¬2=f#¶Lôţ1„ę“nß»=g«íš’…b¬žp“ńsr~RQbWäřA5öiŮd5‰™Ę$ĆĺiSj,ݱj»ĐDÜ+}ĐČn(Őn ‡Çć˝ňŘŚÎ]\*v,•Ą"eĐtHś–<)ŘÎŻ^öđ“Â4ÝŰšQsÝ‚ĚhKăĎ+ńŻdxČMŢ]"XŤWxÍĹĹeĚ­ĎrÍvQhžK,ÜX“c‘łąZ𸒦Ä2ąIčůZ3™'ŚâQĹ@ř)Ç kŁľűvÄěef®ŐÜÚÝΔ*dxülýŞ ŇĹ+ďsGńËî3Ěů¦1ýóą—ĺǢWÖôßúď;›ú×ów˙řüý·˙đ·˙üĎ˙Oů÷‘˙ň_ľýôO˙ß˙ű_ľý/˙řŹ˙÷żůVż•o}|űÓř«ő +endstream endobj 57 0 obj <>stream +׼M·™%Îę(翪˙—-ĚwĘńżoĘ -]|NśŕRäţůßţÍ?ýóďţá?˙ó?üă_ţöźţë·˙˙ěŰżýO˙üO˙đ—˙óŰţaÖźň÷÷gü®óíżČ˙˙8Ş|űwň3˙/ů±˙ňWEţŰźţîŻţŐđ?˙ë?˙÷Čč€bÚBŔ0í`qh·QĄ:ú-wi‘|C˘e;:Ĺp!đ›Ä°ŕô®°ýâźÄ®ď¶ŰŤ˝ů·$ zZzS:Ć[‡zv· ;ÎKb\żýg»[{4‘V°ŚŰŰđř{ť-¶cnCţㆠ+XÚ€ŰrÂzčż2÷ąëIEKŁśly·Ś©™»ą>0CH VD5Oüe[(9%\–€D@V¦Ł°Ă9J€ÔĹow/Jaß0~ F0ďۤ¬§ň+ä°w¬6ßsuO~‚^JÇďĘž’–7ŮŮ!Íîh°oäµ§z&¶äuŔ¬ŁćŹ‘·’wëPô•' áU®Ý đÂnĎĆ>é¨=Wĺ‚OD6yŁq‹DĐľl‘‡G00çÔź,nItńʬy3Ý»Ň(Gĺ®|IxŚą€aŰp8GşO˘˝S_.Ś—!Ń>|(îVHxő zösĹbó^C—î$KńMąĄät^W^ĺľüFG–Ťż˝#FĹwĆ Đp‘ ĐÍh‡ďq%P`äŤĺYǽĝLŚ2ś5,ĂĂ_bźc{ ®«.(ý˙aŁśO^‰…=Cĺ®ńž„]˙™hĘ÷+ťh(íAWGţÇ7%F»Acvëî0ęľG{âyî ç˙`2árÜKD\ "ĆwŢvH°îşFÜMw˙Iô€ĚĐvµ˝SĂôŔí  MŢM4QqIöçW÷‹ČűX[űUßň/`_>bßěĆük9jďüąÔţ»Ň1Ż}ýľüt˙®ţajKüÂKXŕXę˙IŞ8Bö#vëźaĹ~gW’Ď(?S˙iÍz˙^ŢÖO~Ô?iů'?ýľ®ź%"˙YîýÓďďöÓĎŁ˙ôűqýô{•ě)9˙ ÷üţÓK˙iĂű—üË«ŕö×Ţ˙őŻ˙l˙ă?ę˙3šďźđ’ű›vAĘÄ7•7yŤŠ<}a€ŻRtˇ(X´(QůđEgé%ÔőA΄ż„AK š¬ÜhřK ŻŻ. ÷·?ýŤý„ö«¨ý‘€J€~nMH1‹)–ůjjÁ]^]QÔöľ`•KyYÄĆ<ކ`L@-F"ůëAŤ +Mbůj0Ň\ăµZ*‚Z˘ÎpěâhIŽ›ŘiůŘ~!'g©‰Wc.çůŮoÁ W–]ęʇbß$”ýÍßD9Ižß~P`BF©5_€Z ` ŇÝÚ°+"˘b;nĐî˘ę-¨¤bz  $†ŞO†ŐĺE _*vYEfu1óÄ®-2aƇ–°CÁJW‚Ty ^*‡°µjÔ·v>tŁzD92řá ťĐo †ĹŔ(Ŕ/hűŃžÇÔięte¦u·Ö`ę[ć +–WăpzŽĄ şP•ĂŮ‘|-ݏj^'/zŕé/Ě˝Q”ČĄąĽŰT´2;‚‚ mCL)MşÇşU·á‹Ŕ2ô[ˇĺGÍ}.`˝&µjŠéĶ †—n†“{ÁŁßü Ţ]—Şî˘dŹ;_pby=!yäNÄ3—*0ě<{l` «ěs¦UÜLbđÔëŰ^IÁi`ÍťńIŁ[2ß4Ć>pścŮA!¬¨7¬S&Ö"{I‹_P†€‡šŘ·ÍăŞd1ЇaG© +đř6g,Ô+‡ˇ —š/9%Á8ŁŽ]r§+O?ľŚ,ľď´»a?HţîeФăţŔΗ|{:>bÜ~0ŃÍř +dÎĄ/H-öfżÄ6y7Ŕ±5ÄU’XěM9&’@şíHQ‚GQb”U÷°r.džu˙ …žŮŤ:ă˛Ú>0đ±X&ďŘŽČr÷ň;ŚĄÉ˙ýŤ¸TjŬHţń¬ŔIH şźźćß(§Äł~&ry?Á™˙¨{éżżśĹ·{źv‰{ąî×Ď?ýt˙á§źŕZä˙~ţ®{ůë?˙ŻřNBţýOüÇźţ…\Îoý—Ź˙Ř˙®úď?ý-ţ‰8#`F"(ę¨řfő!Đ!r‹ ~ľ!NeĐú>ÂŇg»"1¬ ĐG IĹĄ±+CΧSŚ1r=]}OŃĚH“Ť˙ +·ůďäK‚,C§–ŃÓđ/ßjůö?}űßţ÷ňíď$5ůÓôbŔsÓ⤒×ĚX°ńîŘ}Xo—аůˇ‹d™uÓ|I¤Ţj¶’q/âuA̲"»}˛<ŮVS<şŔ&Bp/Zź` GŻOĺ˘/ŐŁS5KśKŤ˘ śĐęÇś đÎ|Vipy;+g ˇe`B°‰{ŤŕaŰůrĄioŘŔŁ€P{ÄEÄ­tËCűŔYy”Ă•řk(K—U0{*"׍H,#0?ľ<ëęŘ03ť5™őŇŇ'ЬŢJě*ĐĹž0Ř/Š-ąiľEÄRů˛j–+ń^ĄŃJZĹ‚m·Hk<9Şm/Zíw‡jM«sžĄŃ5B`”µ:¸¦ýđv™ňáäF°EđA›î·ŞY“ĘYM}Ć÷î1ę­·ZŚŚÎ +1bÜkÔí^ľßĺÝ•ç3ľ–sgAki¤x‰ZWµWŕI!Ż>KžŰÜąű˘ęňyq ią_Ú´łĹâ‘7 ††Ö­ť±Ły«śXJa6“-ÍęiWB+)o ×C—G(Ü;D‚㇇0ÄtŃŁŁéG;ôęđ’ŻŠ<“‘ŐtÚĂ!ĎvQ”ŔWi©mRź˘¶ HđNbe@»”·’çQEŠ7[>äj-ÎЬĎ(±˘OŰ;üŽ“&Ö÷^v ”݇°ąÚ ´Q˙śűs ›R3†ýF±'łkňHÜ":GkF‹ĹńÝy’ZĐD:ŤA‚ÉyŚłJŤłAÄ‚M”ÜÖPkR˘ĚÜi4hYY>r°ŽÄ5ťý+ZKÔ@TT‰¦.(QĂ5„Ę·cwzÔÍĂőĘ-ť»ßđ$ť€•T[B7ź;Ę!ŹF\ĺ çćTËIxz"bž»” ü,ÁŞC¤÷‰ŢěůęŤÓhGSÄ= ’+c‹ey"r…ybdE&ĘY•Š}-OŰ$ůŃ‘XˇŇ&më’ď{›w ě^ŘěÔDŢzMk-`Ąâ±ÁKAž@dٵ~Y1Ř·šG B>côÇa +d|wą‡÷EýVĽ÷ ěÉ1s9†;©łflĂçĎ™•IX‰˝sĆDbŠnm­4n/§ó€g?yJň-K<˘PÓ;˝©'ĹŠ·[Wú˝RFű¶ŘQ7o§‡±fÔBIĆx¨2Řt˛I¨Ü‘ĺ5o +2Ô‹&qÄC‹ăĆ\P;żr×Ćt…jËo‘ěP»CůÄ Ż$Tą+˘RĺľuywniëPŠ˝rÜ[3O…UÄ)Ź[íŃďA>ëÜłŐ®\Śůn‰„nU"Ç>€éĽ#Ý”ä#Q‰&|Í9XµEĆ1PńÄWă÷ĎřBÝ®5 ‘jäŢo™=ńa!˛hÉĄ·°aü^4íŐ®rŹĐ ¤xŞŰŔĽ–ôšjĘđů©(\]µ“ŐIő¶÷ň‚`ę^4E۰`ŇDBťBoŻDĎŮ˝ ‘2¦·ÁgnË‘őőΔ |®7‘źNJčuőŚ™b´#|–;;hč\ŤcuOI«%»ôtŠX1a\hXHEŮ9sŔAimQĂŃäŇĂî Rľ-ťsȢ¬"‘°DĽT/v­ňb †—bGÂÖ¨”ť±łbz;VC«Č5yňNĘßuř@׎[%Âö–!ÎeSLŘnSĚŁ®cĽ˘g(Ćń~rÖ¤whÄ€7ôËyvI$ňĎýkĆçÉtäNŠj<ÓL\=ę“n=ó®4 +8”ű7fĆmŃîPň$XÚËÝIÓ-w}ů%v-yŮ …žôÇDö®á!Ť­ÚŃě=q™a´’}Ť°­ mŔÚĽED—Gŕ0AÄ‘lr¤¦"ňŠYă«)¤RgŘ8­S=‰AŞˇč<–0[DCÉm +h°6裦ÓEIŕřK$r0ßđé+ěőľ!óŞďĽé_sbńIč\î×e?Â?ŮíVrß1׎ztÄNUv‚˧5SHŻŁvÝÇóĺtUq —%ÉŚ‹G*ŃFO†‡<>Žoa׹ĺ›á*:óŤ‚›[ąĹ:a+sÉ=ڦŕoÇÇí hľ0­ă›NĽ0Ë–ŠČĎň™wů Čkýđ7Źh +kIřoo¸otÝm2ëYőôhا§36@oň6€bb É čą-"öŹ, ¸<ŔFↇ­sÇť*ăCH˘çk±ĽłŮřű“ˇ!"G©đĹN+f:0vrÇ˝®ĆŞP)‰D}nÝ.4ćCöX»$Î×–¸6G%–|¶ç8‚˛RňŠë,wržWYh%§>;Źţşź‰&Ďd_ö‡\ÝŮCę&Äaôä®Ä đ ůřoŰK>8–”7S"WMâ^CLr>nLš]ňđä_Y[šäľĐgźł„a;p:QĂ:)§¤ÉOÚtM_J7u ć¤đÓĘá8ňć]B¸łkB7»Cęz!âĄBŹ,ŰÓÄ~ĺnâfs_K#ýÜ’śđ˧ď# «-‘śu–Ô€ĹMË5}rżůgý5Ĺ,¦l:Â٬d óëźÓŘn®Q– |¶7§±ałŘ@ŠüÎĘ&óG#‡ŻR*ýđ‡™^•PF~u©t¦[ęĆŔl^›¨q3PżíĄĘ„oŕ—©Kp|ŁFĆčŔ:h¸tŇÔ´J¸–+nĆ(ŮşťĽŻP\NS+sď^Ąä×ĺË4­<*W÷Gîá4˙9’pšĽ*î *鉰D° •”hvĄ5Âo;áôµ,sŻEeFŃź&oč}ż×•]żHŢŽySŐíÜ(5Ą)‚ČŁp2¨]›iP«<_7ŁŇ1)Bp ‹SŇńąć9kľn{őâ._Î×_Ľj1hçÖňˇîí űsQ§Ę+š@˝áúDFŤłŽ3#´´@łśěٵ2±4AHXîżůCéňENÄťzÉťűCFkßÍö“ÜćŽŐî°x.ńĄ‡ČÄę;Ż9–wŻ×'Ą^ŹýW@®mqgąÝăW1Öß=µoú™Ö©g RH_źAóă"Čd ]Őą‹ąÚl´CD˘Č(jĐńˇ^;¤Ö+†E˝h_öŚbj;c”ěhç2Jj™ëI‰AL×rl5 ˘>ĎŤ±Ú+/w6á­ˇŘŰ­Î\GŽo`Š vdŤÎ2™ ę[$3Ě{ŢDN×0 +°ö‹ń^ČŻ-b«Śpżg±Y%‚Đ>‚‚’Ý7LâˇG©™ÝJ©˘řŞR5«ç[Âw3–Mô}ę(D6…(BôŘ9ߎ9‘ŁRňĘŹŤFe CpjúţĚI0˝e"ź°wTŞŽÓ–ę±@ăi0Řň łYj0‡kÓÍÍíEŻâý„=ă~ß`zHeSRYŹhţ¦{4óö«Á ă˘EE­)$ˇ{>{6‰ÁZC÷`ä.-ďň(1ĂŔ™ń–ÚĐ÷±0 +Ĺb¸rď:Lµ"|j;ƨg™ím”vŔâęN#oŽâŢ4a¦2–ŞĚ‹š~ŽOkŇÓoź.ž…™`·Ý»>îµÎY»ďÇ_eX`0¤9ĹĂv÷ŠhĂzą˝›ä13 Ž]¤KóľĎâ.ě{ń„üD*eăr2Đ^EEľŔ ¬˛Dí¤*['Źn#g4¸/ŐŠq(޵ay̢3븙q/9J´źŤ°€đŞR#ۡ¶'›EA1!7o5Ŕ@};RWI|ZÎČŚŹ“{ep á ť•ĚĂáŻ=(#ř°ÚśŚ’ĐĆôZ»úE@aˇ -i§µd'd9ęî>Fâ—?çňJx„NłkŚŮŕIUôÖUîs9öiÄu¦!ćă]8ÔNÄ)”§˝<ú€©sŰH3”–ÍJÚ>¸ĂfZ:;Mh©Hb|e Äęfz{T ý'ź>gęLŽ›Ě÷„ GJâĎ™ˇJęlČ˙¶€%žŠĐĺ›VŻúщćPf¦zNçn˘9“¤5>ŢtSčŘdµägu$@]U&äxöwu řŰ…ÚK°3ŽćŕaŠ…‰§cUi?\Ąę W‰$ń›nd–Ć`ečŠ[ÁŢŚUZ´E±c¦°j7%Sf¨O-áöt‹ó×Ě ·vci0^†E—=-‚X+¦Ýv FSĘß÷™J}ç5Ç$ą—¤hÔHµ;Ňy&ícđ•¸<]„Ç5E )ľěź6‰Ý8ÖV4ü73"šÎĹqCCDN`–MŃ,v&<ž=8Ă»ó9ž ŔÂü!Ř•Cp@<ß4źŇ÷BëoĚŹb~Ć®;ȑĸ ’čŔx˝Tł˘A +nItRľ¦źç]—CS"8IEFĚ×A‹ ćˇnżČ—Ë®…ůÄ€ ~¶Hڶ-ň‰ńCŞW»Ţ"bóŇWAP‹ř^ĐQoYw‚Ö׼Oi÷Ź›J­-µ2fßóz2f€Äs˘ aŐ¨‡9P‘h ¦ +6®vn!Ů"âŤk`a@ä"dž-ŇhŇXEîúiNő{$z!1ÁžSü1¤ł®+´ăçůçŽz28Đso:âüŃú@ţn˘wL|/Ĺ}˘*˝O;Á|Ĺ}¨- :ó¸[ć§|ŞW_Ľ !M÷Ł:ü®ó·W3ăĽ=IĆóŕüŞŮťéěP}ĺ!MHxXŻŁdŢOj0@^f ˝+5żŠxŃÍXCŮ"Ł“jřMčɦăQx´˝S@F‰WÂΨTRz›™aÚ“ŞŘ˘HO^í·d}“‹3“9¤Ő9žĐÉp±5)¶‹%,e3’4žYm#•şQú[^ČĂ`n—[Âm†ĺf'جH•Nɤf¸]cRĺďÉ;ŕá;Ž!ŞďĽë§µ ŠrZH=©Ţ¤\äÎa4Aˇ0FĎ2PŕQä˘ÎLJLÝřčÁ@ş©áôă^ňç("¤y'¦SęŠüP™>[Én§cWŔ˝­sň(xôMKô&VçzžL“FÄYß;•~¨‘Ó驺Ňţx d'čQŘ)÷ŇJCë”äĐ’¤îűěÉ»¨ô'`‘<Ô]Ţ aA$)_:9ać©Y^+ŰŠ #ü]G„Ňů¶zůV>‚‘ilĽB]Ě mQ)ĆyÝ"ň÷V&öđbô˙…|í*’ŁNt/€4ÄĽ¤.Jš·HŹšľ‰Ľ›€ői˛UD¬Ó‹HYĄ8WĄâěŹ!U9kďęZŹ®%}ŕŽ4BzÔÔ:×s»Z¤OµĎzş śŐ2ÎĽ¤L˝±^<ÜýEË™Ëĺ@čo8çĂ3щHa?Q{Ń#¨Tä™ÔôŢ›˝±Ţm—(.š™q/9,Q—†e™‹4nÖ`l7‡¸ÁÁ•2ά‹ ˝řÄ$} Ĺx¸í¨%‚ű„§ěŻň‰Ö"Ú±Ľó›ý:ő;#ç)Ťăů ­Ž$7×úł‹°ENúfAËă®ÂKaVjbŻĆĽĹ +*‚𹼤>÷ŐcWâM*ć«q§§eűd{÷s|ęţ`;»=ńŮţX ńUr…—TVžMkđkč ±`©A‰·î +wçxŹšb`ô/9D®äŇ€Ő—÷ľ^± „¨~Ĺ­´ć·" +€» ŹĽB%Á\ŐĂCä©’­%ü;|Ţ Ę*¤’ÝŐ*.Ą VzŕY–űyĺ<µ¨ŔĄ9´í§łú~›]¬sžť0tirv§_ç`ąź«JÝ ěs˝ ź±MśĆúůíĆ!yl âR™‹C·ĺĄ«7vL’Ő4úĚ/ĐQË6p`‡ÔĂ —ů(Oő€b^—ĆíědIś@]7Ťk´#3çš–sD +Řś14äśĆ‡!"a‚Yü­˙@Ů'ł7Îďm·*HgrtRĽh˛EnĂ/0"¦ăĺĂăĺ’Ćô—Ź,•N!ő^–TŹĂUDŽńYŃqĄŹëîÜ™{"îu´}!•3 ™«ĺŚ^!ŕ9t<öŚUDýčěn\$g˙ţ€ňçŕÎş“”ŔŻÂćäFs/ŃäM$»-hl¶ňFÖŔˇVďe 0ĺĽęćIpńgÇt@’Ăĺ­aۨ=©˛´)7ĄŐ0˝qÔďĂy¤Îg˛/ĎČ ř¤¦ąW÷™!Ak’És¤}ÚŚ‚Ą˝®O$\Ŕ MÂ=•zO•÷O†źRĽoĚ(ůVuy“Żh€öď ŐďŞ@3űšÝ¸Nb@6ç;$žp|6đĚEÜKě•٣Ž?^PŠőAóV<öňýhá«üI©ŕr’¨Ě1>ýęR ᶨ?G P>x”Níç›8wÔ„„9żÇó¬"ĺ˘Dů>yLý:\ĺĆ"°°N ź""Ę3Î ‹4:É$2}ÇľÁ- +oçW˘,š^tĄ¬Dmq–ăEçŽZîC©ďIIďJ“™űBŕVní,˘Đ„ ę­ä¶‘§p.† ş«ž‹cřv‹ÔĂě ‹¸•ˇ¸1 +Ď˝ý§Ź?Ő¨îxCĎ-é.,6lď +ŠQH÷ 0ďŔˇ‚éu«#˛íh¸Ť„ŽĹôrlŽaL:đ9ĚŠ´lšĄNŠŰ˝Y˙_=ťŽçWxĂ®ű؇Y“/s{ąÔ +ĽÉ˘ÂA|ÎÚě džčż^é‹qź×Gf;̬żaB/€Í&”c×]Ö׾CĄ^˝†ăŐ!ĹžÉö‰Ă^äŻwŇ[zŽŽZ ™çÍ^2áü©×Ě1‘hUő“qÖ Övv żňű››kßâEĂĂÓb]¸çg¨pë76ĺ0Póďcé‘eô}."6F`"Gv›”Ś‚xúäŮFÔ/XšŞ;VЉÔBu=KuYNEä0Ě]Ü«4ÂŃpł' ­§ĺłű;N"«ďĽčŻŽÜćŃřEfÄDä={ŃAĎ~›ČĂE%¬ěŇ +j|T€™HÇÜ˙ I"´رEFU:˙94öz›Ŕđâ^˙?co’-9’+‰n%7đýÚ°ç47ă7ŽÔî? +@Dy#ÝcPŻ2â"Śf$E#±äŁdśˇ÷€ÍÖ€é.Y^Ŕ—ľ”ŘumÜV=¸M¨ĂÔÂ…ß­ ,Ůlă@+ußÓ7¨PCčâ°·$Î(iEě"š·pđl\µč/÷ÎfűóSF…ŠV˙ !#8VŞ.¸(ubm8nĺt,ŹďęqfˇC27ąßł?Şç”޲+Ë\8·Z&D¸i +T’uŕ_IÂĎýŮćŘuˇ«Î›ľŚD:>e*@©?˘ëŹ +&c«Żď^Ĺ-+aDt«Ň‘Wm«>9cö¤ăT7°#‘cç¶ú°˛+7ŮJwo|vŮDBÎ~ˇţgÄ˙.˛üíĽ÷ j9ßżĘJ0w7–é´b¤\Ą­¨áNŐĽt“[V2®ŻńJř’jq v¬ęć¦q…śVŕ±ő•-a ÷m¨uw•ń٦®ĽÖÇĹ/;íÓĄÓĹ·ë2Ĺ“ž9žł q#?»–™{ć!%–ďzS‰.S)Čŕ»2np8ć…´wßú*iÎe9ɇ}»Waj§h€GÍls™cŽ|Ö§śĐbůěÁeRv;ÝĂ?„Â@†Š€¤7/ď]÷ €ľs}G h¤jFŕ%ü–ýrĆż~Ńqč,¦}Ú‘ćÖĐűN‚jµ‚0ö¬P8HߎhWâ&ĐmJ°QfQc˛µâQ†űÂLÇ„LŰď›Ĺ˝ˇëĄ@ř\â.ÂŤúĆ™Ô)HÉ×'ç÷}@JË^»żW_2+|Đ[ošżť…„cšąM!€p’c‘×:謑CžĄ† II{ďvőbßüoĄ‘\>ÂŮK´ÂćŢDËxśó Ćh…Ž_qÂţ˙÷řčvëqwÍ)¤[”§úüĹse/Í.ôę˛+Üĺĺę6‚ÔŤ’ĂBşź¬}W®Ůł1śéč2[7ů.®»–"W˙‘&˘ÁfŐĐl´Ň›ž9ǽŠęwťcďżţÁŮŔÚęwš0ň;#{ŹdĽP˘yF÷ă&¤g€Ä"‡Tž»rÄ[ąŃ‰+ë· Öż[żř;×í˝€gî¦=u!Ůč5“5”°ÓÁD™ąŐ,ąůG ”§óĄŤ¶ÉAăv˝lŻCëč q5­t•¬‚<Ś -QÉË«ÓĎŤ‡Đá\CÂ<\–CäČ ˘[ýhţ`ěBQO<ŻTřYËČŘ8‘h×dÄyĺʰŇ2ł_jŘĂÄś– xYłéwçTYŹ.GţQKĘn•xş§˛ >Đľ,ö1$$•ô‡ş‰]¦nq)«qä$Fq%Te”q“)šÄ)€V˛Ô0€BRŽëę:ö‹SúyÂJkţ“VJüá·ç23Žţ—”»Ax ö*)ŰĽ›(Ń>žąJÜ×7šBH±^±«€TńAéďé˝Iż/ ‰¨Оś“ňJ§ŕŇƱ5÷Â"˘Ĺ:‘<ě“VŢäŚ÷,^ $Ř˙“Ç™ +´ nއx±TdĺW6 +îS.ľuűňj:”mđhNוÝY`Ađ\sQĽ&q%Hí|[Fpbăžäl0€®+˙UşÉĽďńÍÂŤ› pŇ|şÉěý»0 VßN™Á‰]ä“{˘`3™Ś¨qü>ě -ŮSYp„†ŚŃÁ®`ßöb}0N ýĽoíáü9cř])…Ăę%哹}˘=ÉČ$ţŞWVd0ŕşÖÁiUXµ§đµQPÝVŰZ±–Ľ5¸EwiĬoäě»Ď'Ë;%‹†ÉFŮ6·&f żŃŤ–>'‡x}zň|DN“Ć‘łż‡ŔúŐÜŐMR®Ż­ţýnň.ŁÚ ^^1¸ž_ů}Ő»†"XëްHío–Őý‘d`oÇ,hWúI"+ön5˝ĹpZyöFń+VýJ+9|ýŚ#’8 DŐĘcĄv@‰sí"ëăKRËŐ-ÎH,4«S¨3f\É#·ýź-±óî®ďuţUłnÁŐÖ÷:ýÂYß¶SáÇč±o‘ąhz°(`ę¶ŇCáu"A‰űjŮSběČC˙ŮÚŐÎ~_]:‚€ Ť§Yţ*Ż”bÉ}×sˇeň÷·°cĂ×ŢFe˙ű5Źł–妚-ý„}îá»x×6«ľéÄĎ}ö@›¨x€ÜDÎÜg- Jż®´Č$ŞÚ__÷¨@?[Öi¶†ë¦śň¡űYcE {ö_QdwČ&‹ÓĂW°”ĚRÇž +»$yj&„ĄúkG\2[{p.ť»/Ś®î±Ĺ”/îČŚgĄ@2… olŇp·~H˛î8Α/ź&ޏŁ(Jş_?ö§P¦!Ż•,×—ŐžpHKk/&Špb g+îUÖ:<öľkZ·BĂ}o”`‹:fń±xp +nȨĂş•oŹ®BśčÔ‘†Ę›ł/™´‰ŰXűhµ=䢂g5#HŹŐ"qš1‡ř‘Ń5hEJ‹×MDRv€Şëˇ@v]ŞŠ­°˛Cü*©öĚ‚‹ĂaĹK­¤âEŤîBř׾é®Î°şZě¬2X¸W˛76yL\: •¸Cw"‰"đ7?z*çFťĽ ú0R°ł1őĆ‘’¸çK"Upgiz­ ŢŔ˛±yÆ«×ÚYOň íéĂq8¦‹o]äěpgčÚŠě/O«·$pťž8ővµN}îţĂôáwuŐí´ő‰×…ź†Z€ćL™â=O„ix»A—­&D5T^Ähú«űČ„>««[ôHU‹ßr8áPň(OJşY(=çŔ…MąŠą"á´cJ<©Ž +uVhhŞ–&Eµó¸˝ďß]k*™÷đÍČŁđYÄŐ6ĄźĚÇC™âpF69ýt˙H(z;î%+ŔĘ’ěcž˘IvW”Ř˝•PpĆqŚ×óş¤DÚÔ–~ŤšţŔŞ= +`s”ş=–"âňüč>d¶]Ďç!‹)řĹUl˙Í*iűÝ„[ey-‹D¨Âiźž;~’‹YŽAšQX‘v ?(#YÓ%űđÄeě°÷˘ľÔ‰şxę˝^‘Ę ‘7ňŰ{§ZTŤH,´ z¤ď \ć{VďÖ Ď߉ҕŞÄ1»ůjYB˛ÉÄ{Ů* ÂÉ]Jîh+íidŹ–~ľ‡"\¸űáeIM †ţ[ŮăÁ +ĘýNŐ­łÎ!'Ľ{Ż=ÖxGjă{˛íŕŮŁC±//\nuubwă5ŢĘdpśJHę&şs€S{ěęžO#wëJHdȇ)qöž_Ú=öÎŔˇćB¨ÖJuĄÝ 9ľ1¸yb¨˘‚çxÁoTýá`ĐŠę··ş*Ş®€„‰uµ/eŔRĎĹöbĘb iop˙¦4ŚĹYíŻCsĚĆiP8'ĺŢ·‡ĄRšX /ţd ›—Ú U—c@7~tzé*5+Ővü¬—ŰísÜÂäת%%˙ ™Ăü|g{Ľ$óčP +˝ON™—őlh)YŐ!15ŚĚńvĘ.í“a_íąŞąô3-|dďCŽ(I×yńĄ Ő~îUzw$čśĺ—’ůŮ׳®ä˙Y +IaT{¶u[Z9&D +˙ťYłeV…ę… ş"űľŠW9$ t+{şöZ*Äťë˘Äť›ÜÚň„겷˘pBJ˙ÉWD˙_V"V•ŐŤÔaÁ×Éwφşč‡ú<»´%a˘D÷ţ¨.®ůujQ'{aq*­B“›ă#D4óő¤I +“ĆťyôÜ#—ZRF{x› GżëÂüă*fv¸„Vq-«ŤzBő: )ř».!zr'”Č'!ĽubLOH2pF·üĐky¸ÖËĘźXň̤-Ł/Ć“•éĺćGą}÷jů(÷źîť‘4„˝śĹh†3řyĎN=Ů5b"<śäŔÖ}*S “[Í´ó°ßBDĎ˙ňÝVrÄŐWf$y_ŐÁSď2đwUI][çôÔ«ŢŃđĘóˇ&Ś×ĘŤęĺôJUa†ŐÎZć^Ů„« &;KřBbéAî=˛ó#{yŕí!ëž§€ó˛Cól.w‰Pg8Ą0p®p_|thŕéżęĽd(şÖ¨µŕ·ř»Tz|Ja¨/IiRןjĎ\˝kĨă|ěíq€ž&CĐ€xą^aa–”3QpËĘŢGîQÇ×)Ą“•);^ŁŚ*˛úeooęŐĄÓń¸ní +ÍŇŁaĎm +CŽŕę;iF©ÜŹžuÚĆŐ\U•'ČL¶nŮ2!°o….¸˙8’CçďRC„S&0±´‘b‡Y<Ĺ+’d޵ôZG.Ěő”ŹS +¤°%¸R®MňáŹ'DXĽÍU`U'=rŻS±Ňyč E!«Lu„OЕۣÜËlÉ\Úˇx{'c@ë +Cńl[iŹŠđäqÁě"}Ăě™nÉ´ĄÍ»vĆúXjqyľ-ŚĆq­7·•"O¶|ű+hăaŁ2XŮY×7yhfńĽžŘ¦˘¨LbŘ» rřÚŕ(§PJ ĆQX١5ć%S…w'ŇťčÂ|z”’yb™ŕâÂ'¬*?21Ó:Ť¬×„tžyÎj¸‡ď(×—™< »;ZĹ)ŘŇ6«· ÎżĂĂf†uÜ °}p7:Š>aöťÎGµN ě ľŤµ •šJ;Ň—Oá ™ş;X@ÇŚ3&čB‹=FOţŁôĆĂęa‚YU–®űŇuĎ + +ŔOW‘Ż(%˝^7PŔ˘¬űě—UOyž?ÇžľŞ^m<ÔŽ/»@M^Ś\Őކv§Ě»`E“5FIUí?8ĄÍ¸˛Ďě‘u7™?"8ldłŢEΧL—o齿jáýSÎnݬż'đ‰™o”©ŕRŇäO»ŢĺąAđ§ ŰzkŢyŐŮĽ˛e¦,Żő‘ř ŞnNşđřŃÇ\U`żöŹW>»ă<&"Îfiś–Ą$Ö;ĎaĹA6ş˝;KfpŚĽY×úid˙SvL="oÝd Ő™˙'©ĂďÁ€„t÷#6ZŮ(đ¸»íQúĐ•ů{VĄGómâÁîËíy©¬Ě›%Ť/P>ť Ź÷Nz‡ëlĽÜo‚Ă*•ި®ůwm`¦«™ď0ÜŽűyľíÂcÜÄĘ€cź†,+2šÁ*C çqăXLaçĽOö*|CşöŐÄ#“0+‹\Kž}÷´«ÎđťîŇŢ)ż=?$Švż¬äîjĄDó”KbÍŠe@ş¤*9{fܢK®ťąoď{Ë%E!&U°ŠŠ2ň˝ĆŁ„Ą·r‘ĘóăbÂ%AąçÖ>sřä(vČe˘Tę,ăćŽd|)’EĐâ(Äí™]~”[Ô„?úÂb(9&yĺýYŢ*Ś ó(ĐăęH~Taj–@ÚKjjfÚ Bö(ňaČ©Y:Ź^ÖS˘ + «×Šď¶/˘ăś{p¦SemăÖ¨n™4%ËŕÚÓ$$Śk]‹í&RÖĐ?żü(~ąńŔyUMŤ"ĐX0ýúŰ;™_-ÝĐ›šŚ±[Ť´:ţ¶˛MŐGÍYgt_Ňő“><Łđ+¬î˙ŕDĐiŐoď1Yegâ—Väł—¦ZBY)ĺ­Ĺ=¶Pt5–ľ¶ä÷Î 4ľ:öC,¦&}ÁD +fćŮŐĎé6[‚ňUSy­Řiçé#´gGq¦¶ˇSTnţ•óëyEÓtř6e“8ĺVfO??ŕ +R];‚j±;~—:çl˘÷ólS{ˇ{šNt©„ŚÇ'ŇŢ’ĆěĹă”y$Lć!Üí JšüL°Ę¶ťsĐYąë$…‰ĄÝˇhY«jĚaáđ …gÓŐU˙Šóůç°Ec&8>!°m‘ců‹ş†üY2TŐUĐ˝ÄD iýýŢaŤ›˘€â„¬ë(¨‚«¸ŕFŐÄ,@»ăě}šÍłéŻč&€YXč '«¬ ř掀śď\\?CU…Ŕ˝.Ó› Ëu÷ŢSČňV6!~ŻňT/OÓ­ DĂ"ĽúV$ZřĎ´_Ş_KíŢÂŐŞťąµ˛ćĽ“2Ęâ-őČ';80!ˇO˝“v¦ w‚đů¸’‚I!ŘÂł5;Ű.VÖŃ$„¸N”BÓÜgĎÁ‰Ą÷ŽÎZĽGşř/ý(ŔIţr»‡ő9 zşk¶”·Ô«2´‚’ńś”¬RĽVŃPÇ‘CµhlŢ«âó_â',°˛PZtëm}»\q©ľ«ĎNhoç •6ŽW^ HwőSvV\gc;¶ îGµ(ęZ–4´łú T<íRmY`ÚcEĹźĹÄGľŁebąÉ[şňsî+4u­«TNź°ú×˙Ô7…ç Č «G4¬n{K¬ÄL(ąPß™q,aQŞçiw“z˘¶ Z&vŕ€tôPĐ"V•řé&–NÝÉU[Ţ÷˛Y˝¬žžzśE +3őLeďPIgV¤š~ŐËĆ5cęĹâĹoŢW9hpáłÂ›łŁVŻFd‚‘ˇţŘzőä —ČR­#¬Âwůš—`öÎö~R˙«v‰;:«’KňÎ}Ă >`B0ăc*‹Ť CÝBö… +Śş˘I·•†ś!dôúů9÷Ă™?ÎPŚtö‹Z÷PŠ\=Úc{Vr!l˝Şíz‰Éť}?F®MţĎąĂďŠ"$ň|ťÝ)‚7(ňˇ`NĽRLJ* b\28ĆŃP +ąĄĚŃ*űö—·¤{ůś› â”D<\Rúz`r(ď ośşÍä;2xŤđĆďôĎĎaR‡Y¬ĘŮnQ?ňš˘›Gó+/.ľl«uVI5EkÂďÍÎĄ˛öŚń©Dµä5„ á"ę&›0\RµÍŇß§ĽbcŇ•&÷R§ |hKÝONJmşKrXP ] hOÝ'źĎ\âRÝO]ÎËÉŻŞ5·čôĽ‰áşÇ‘hÜÓ-ˇ;Ëg~qkĄęöěŽMőěľÜĎö˛ĽîUô Z;˛\0ŰO`T­$fđüPäěhrŤ)ľó“J^É€Q ęŚFÉĎlHÇ %ă`7©[\zŘŻ_·o> Šy-ÔR”ýŰ‚kźąe ­ů˙¤Ř "çž©ż]wÓÖĆâAäPÉßŃĂęđĚ_ dbŤ´B#u·ÓÇŞŮs(%…ßö<żěüh% Tů:đmůkę·UÄ—§ŹâWžÚŠafĺ©I·úlyŤ¦ńĐőú¸xŰ5Ľżd—óăüě”EÄ羣íI–0j{6Ű?ě»›8µµíنݷM’ý§Đż…7ý·ĎłxÓ÷R˙UrŽu7ýĽ:8«Ý&üýnbţRâRĽŐŠ"ňđU +Ö|f…މ¤c +fěŤŢÚŔ^WžµśÜňĎo=ʤćŰL¬_ď¶Š Y@ňhan©gâµ ‹ÁÄ’Éţěť9'ÓČÄtYÝ äŹGaß“\ÓĄ űÔˇě%÷`…6sLżëZÜ’Šv.ýü'­ThĄ˘E&Ű;<~eäĎČt}¦ăűJ|i®s&{_R9©ç]´sç•ÜĄw#×ĂĚCÜ-KŮőP/•[ńZü#,<§#¸o“fB˛HćW ťĎT%˝3xf" ţ”’—w˙×vcůŘÂíFQ?ľ‚eZϱ+CA¸„ôOţ[” *ÂLÓ⨲7QďÝOŞPÜ’Ë+­7÷ΚC–f„¤§>ÂűöS¶šĽN*Nö€ž"öt«M 4L&éi–űć†Mç!OŞRçOźöKWiΚí“|ů%çBĚ•›˙s^ň»˘íMm Př7UĽň_ĺłÔ€Y÷®[ĺkŰ‹Ý!QC[řkKüöňFYîôĆĎëĄuçÂ_›¬ă˘‹űŐ¨†żćYţjŻe’Đ륎/„žÍĆZ2éÔiµ7Ȧ&›ú™;ËĹÝźrFĆîeeeÚ.™ű‘°ôĺŐŁŽ–Ąń];pq­!p¸"ÉĺŽŮ/ +çĆáN~Ö¸AEâw^ÔŹsżĽ43gŃ˝g÷Ë®úz+ůalň7ĂRźŤÂ)îv¤€¦˘=7WÂď®ęp0dz”‡TňoCŔ›ę˙Ť{fđI%ÔÎôś –î“Đzđ ´Ň1vwчť)hý —q4ĎţąÔ¸eIOÎę:Ť“\ąĄEîyl\ Čąnd ˙kß$ŐŠ¤j¦yF˘x#†öv‘YÎv;H4ÍŃĚŤ¦Ö»(fÎít˛;Dáz&ĺÖŔíy·Č%<#‘„Yľ}RöçŹ'ĂżEÜ÷ßăjúÝ{_#€šEz/BŮkÚXrEY$”fNv HjQSGH« "‹ĎËD·Đ˝{vĽU˙%ó‚¶/ĚU4?¶ üątůRhV‰ŕ}=šU,ŃnßÁY]ËĽ‡äíńĽąÎŘň´dŤ0oě›äx'N2§ükŤ 7)(?ë®ČYrJmgsQmU;bë7vE š > ·3öŹŔ=·o*É$+_ŃGLsô|"1 ňŬ;˝vW±Wş].č¬őá#sŃĎ„ Çőn`7o0ÄłNšśV:Áśr%s’ľaî ß“ëJMűőAö“”·& +ů\ŕ;â?Kö·Ź>ŠnĘ­.Ęąý'­¬BŢ•–ôS  ˘“ćčq• fX¤v@@‘ÁP^jő…ěY +GľTÉĽ.UĚhî4ÚĆĘ/¬5/†ż'«~ůńMCNXůüŰďłô›püI6ĎT7‡ö•kˇ.uNbfü¬·eĽ§÷1Š gĹÉ—‹‘Ó*Ëę·b`:*‹"«TďĘßáµaKżÖçÄö ć9߬ܝéč­[~ĐD¸ö±¨Ĺť{6«ĐËĽ¸¦¬˘}4Çě•<Ż˝ą?>ŕÁŽ1 +ąN#žRa°öˇŰô +B$D„Ĺ,&C őéô‡śyĚ'?őV†˙$eř]1Ž‘«~ľĂ—7öWY‰őýpŃ4^Ks%Ą5‹¶ˇű-MŕzP˝˝!űtpÇSł÷üś}Łé>„-:]›`%÷Ű»]_r[wÝđđ“·5ę”ďˇ&µ7“ţoQ®¨ÄVŠ©ý˝[‡YëťüÎSÁ”UÓőţ[5R·/ +ŃNF ÷":a˙í1νxϵj_)36)‚ýR»JŁă1Î[šX%Íů'ýĂr*.†űđ«@ëé‹Úć]őÄążP(ż˛!l^&ÝöG·ˇ'Ů™.]Učg—ăUţçđÖmDŽzâ=|Hpi’Ą:Í«Ů-ŕűU)„RČ0×ë‚•Ŕ´věcĎS0z˝q÷ +ţUC擆ę÷—ÉϬĘ?=g´Ź¨D\;D #§MĎîZĐ»g/fR0XÖ<<üq–9Łî+Ó,wČů÷ßęţ ¶ÍŹm»Ý…ŃŚŁÂîŐ-Čý–UďxeGâRÚŔ,l”gÍ­dó&έ)ҨnŇwE.ĐĘţ›G´ńc…FÔěň…,şf˙4ÓF‹0C2K‹w×>őŁH~ đ>5!©Ţľ»IŰôy=i|uFŚ(nÁVQ$8XAýö.˙U6]”őđ»ěR‡Šą™É1 +˙ĽRÝŤlÇůóĚě˝xިíµz 7aśéÂ${×&ÁYčâ¶ vĂälĹKÜ0ul˝?ÚřźaűđͤâĂÇbş2›đ7m1ë9úźsłzKSJľÇ¦!4[¸Ŕ+xs‡eÄçóę€~§‹#dCśM?‡kÖžŐ:‰ęZ5±@iOŞBó2©,Ý Đ µ0Ŕ±2KÂŰZHç&i¤s`Ţ}n”!öíú¦źÚCKÓ ă›đ˘Ţ”© ĺ3±/ş4qˇGŇţ»đ>\&ŰőZ„WÔŮă•.9¬5x9ŚëJ­É1ĺVö§ĐăŇŞ+ĂÖűÖm™ěŠľP´K‡c—č!žÇ䫾‘ÂŢ|ő–)č4łŔŽkíŮ#–0Ńúy ˘^čÖ…·}¨€ßú ` Hź±ź Ëţ٤Š%ôKďëZ*9âűŞĐďEm\ôźŮňBťb/ 1şÂCZÎŐxvëőëÍ÷8Îb)ŚbM„)ýŚ9çgíĆ;!*m «9wMG p«{»LzUě+>fą(ĆĆL +Oç{nĽ+÷¶aĐŘnĘ3ř¸¶vÉÖŮfÔşKµŰ™ćŁÇW†ż ?Ą ż+ žÁŞ“»ď:Sţ6u©ÚťÔ;ĺk"UR˘´Yo.Qâ‹léř;wäQâ>«„hpţX§P˝ď"Ö‹BÝ,Ú{e“ ź×­<§«š".‘ĂQ™/—RuE…QGňâz¸•ĚťžXZ»µżŻßżRa.i–ěMzíBJâ$ĺśŐîB*ljëmçP˛gölňEćŹ"k°\–¬AY¬‰*%e†Żą†gGµD™îHdĐżbąš äpÇO“Ôî8uü¤OĘ"nGE˘Ý'ąŽÜDDYÂÇ-÷™¬ee*=Ś8z:(şfĂa{©:†‰ťîgé@şĎŠNĽ›Ś‡Ű?˙fĘž±?Šk‡8 `RIć¸RŢ·ď-í·éÄ–y)ó ą”l‹¬5Żů +ó÷jc˛žř§pK§‰ŽśE/0*łË‡5ů˘ “9CÜťłžük”¬Éj +s_F÷WŢřęTęÓo×1¸¤=śg˛¨98»!~ĐéF÷U2ě<˘3Ą›Ďq4Íă%‡$@®‚i· +€BŽęě­_2j.ťÎ>~”@vk±Ë©¨…S€mńŤäT25-«¶ŻŇ8{žěřţ“µÔďďň_^¦žw1şČU¶…q¤±§wĂD ˘NéjYy1ĹÄ×QtąÓ1źG_u­AÉy·:ߍ>Ö;Ů]Z3`ʵřŔAo©ć%ž÷Çtá÷…Tîů†żő.]¶ŞŁ¦Pş‘ÖŻ=Č—î¸É07˝tk†‘^ Íî¶•ý_9¤”‹ _vÂMöŞá˛:F ¤ćJŠV—á^fé˝÷ÎmÜL@'±á¤¦(Ň$űIU]׺¬˛ĎĆ ¬†@ąÂź¤Kuű[“‰Ťs1sR5ü\°J9P˙WÎřHß×;fsGe€eú9©BŚk?ﶤŕ‚Ącëţú”â“×Â!<ŞË˝HśŞÂ†;Nľ§«=5÷‘Ę…nl*ŹđŘÉ}˙ş“Ď—G-S؇®ÎW\Té*ŕ㞨—ýżňD™oąŐ-˨ኹA’ě‡őśą‹ś©›č’k]«ňv|ßťFĚ뉆·ň,e§zŹŠLÔş +/áčMÚĆJĽz#…áŠÜ–1)ާ äąö$ż®ž|$KϦŹŇZÉĚöŕČ >PôĄ˙ŻRĹI9Bw¦ąÉĚŻ»Oj7wÉť8±Ü´Ĺ)[řŃçáÍy…Š~%”՜ηʾ¬Ëáfż@QŘrH!Ëu­!u}˛šÚ!>tŘg+`$”gó¬\…3vkXĂď´*-«’ş–Ő)äźsv˙‹'k䂵“µ2Ssžw*í÷çVOż˝×U>©ĐÚb§Y‡b䫎`})S¨»“'`XbçP˘”Řd!ý–ßᣫ]m©aáę"Ľ&=f,qÄýÍđrĽĚQŰČůžĄ"yŃ—á=÷÷sŰë‡pčńe ő]ĺî,éŞc–—J˙AĂŢĹťď÷˛Ë¬/˘vŔ¤Şr‰%ه9ó¶Ęh•hŔRöŐ6píý+ ÇJtţÄ—Ř;] ł%Xü…/Ńů:„űćwPC)íĄ0Zćj1łš9T| Ťźz  sšČ!’)˛Ő~·*K[uFŔ™Ś`(áéŞáö‚f×43#;ĽźdN@ć†ĚŚ„Źf}s’ĎjE´b›^«Ťě›ĺwĽdv¤j˛ÇőY4y Mł’őśvkĽö7‚CąĘ}‘W UÔ•´9LşRXÄ™|GÂB$üžÂŔK˝ďKL0ţȲj<“ đ©OꉼaHÝ9Ŕ]šzô/Ó{PpËĹFżá<äÉG˛µĄ׳ćÚMůŘUoµf ©˙®uÁMuś× Ó\&ŻjÖ,nB†~Šě=V¨0%V,ĚýŘÚąD5}ËWJńT‰V?#ş4ÇÍMźşÖŢSRĽ8žßúŽq®đ-ÇŠâAâSüŐ˘}ŃBp,§D÷Čj°]Ť0íq¸I±Írr÷»SđʵWµIĂc-ĄŻ,”Ĺ×ú é¶ŻÎ ňĄĘÄĽöaĘÁ@éŢŐ•ô˙ĘQÎNÔ‹Ŕe4:ó/;âuëőź{cÁ*#‘;Ő.\HuËxëJ~yŐDo)š¤JéĆîżĐĆŰ­RůŢy^ŕ7ÉNÍ–IçµzbƲ ÖŻ {$]&;¬űěAn+wk;« +ľŔZŻŔË冞6á¸B™Ľró»urĐ»Wľ* sa™„tUÜď.=o) e«ůB<ßRđŰŰóÓns!lęŐµ.ÉAVßGµv39dó +Ťń}†0÷ôÓŢč>?ÔvJĐË–Żö12ţÁu>řaĺX}S,•Ľd¦‹¸ČŇ场ĎQ‰†oű±qSO») ŢłT®áĺ‰a^VÔµ··‚ĽTsă-ľbé9´íu륜s6Bz`‡(笶ýýPI×AşŰFŕ c‚ŽÇZ<«D§B¦hŹäş`/W$ %…ÚWHŔ„~{6°űĂ­®˝ÜRcŠ”·j >UˇöY[SéWĘÁßlSý$ö4ű#y(¶Óě«çč>LęUî*RUEˇ6rqšý„łÍŤÄłŮ9>“ó{›k4É»x~S0ŐM†îHץŢRwyÜJ•uăMnŠx;AážÔŁ^Ó+–ۆ›pEö!…A‡U#~#óµmµc€ţioÄýK†ÁvW,Ń„w*ć˙yJ‰ř‹ť¨¸¬ +)i–\ęą“ô¨rö VúI3˙üJf[_h¶oüEç’‡tÁâY˘żëďĘIĆiŐVVcRp'˛)…SŔ¤É¦t¦J뎻g®JH/óü)˝nő*-y¤\Gý űűuő ‡óЏ’›•'ţ¨\p&K¦úí‹uB)BO4DHHWW9ąé~űŤčĹBoK˝gÝń«u4VŻÝOń[nîŤuRŹF˙ÇşŐg¤p‹Đß:ɦvŞ ^,!›őAŘ6٤‘ž^ęZ +úH»čġp¶řU:S2vٵ[Yĺ±Át‘ QţĂÉ’t–u­ˇ4”0ŞoV}}’‚ÉŔ·†¶lĘ­Îóźü‡ÓđŹÝůĽJ¨±˛PŘśĆXĐÁYéŕr‰sŠwWX Ü]_™Ś—Ű·)ÄĂ·_ú˘>č‡KŮ7RÎ=¸Ş=‘ÚéŞëô-ł< Űň &?b8v5]XAJOh HŐĂ‚ď:DüĚŮҤ+5Íj”m„fáŠÍba%ž íK +‡JľÎ›4_ŢŔ:_†#Z|<äÍoVlMpsÄęG¶xČﮜR©ZÜ]Ź‘ zéŻî{±üžŹŇp™#ŠÄĄ»łäŰś·iŇ‘ ~]ŢţZ {ęq¤öp&Ęăóe,‰¸k9™ĺ^ ÝôH§Ď.íJě¨ +MÇ-řđŔcÄ Ź-óW˛üžW6"皢f vé ‡…–oh; b–c=ĘŞxÂľŁ‹^äłBÜ.Ĺ?^öDŃM`:Ş<éĂy4>łA»ĄÉ2ą|ŔnS€˛ôÚÓđó—0^üýtętîűĎFHߦ¸Řçś©5.Źzh!%˝ÉPog¬§™h¸XAÜpĚů]˝U§nEL`ťčÚ9ÇďťFůhÍł*€ć’5LD’1 @Ëńý>đ–)Ý|OŞěőŰÖŁ˙çY Ą×oďr•^MřvqZIvĺMŽ˘2CđYÔ”5LW*şáűZŹbĂ©JVe8¨ůC»dąü0ź-őXĎćß;×äŇdý€•8¤N6ţ‡Wvë·Úďűü˘˝I١[“ë 3|wAި1y?\Ł2+(|m•éÎC®ăüµ›‹~ů‚ž˛Y÷ě-a5fU +“ëŹ\:zÂś ÚJG>ŢaIÎaŇnaĎf˛(°Ŕ|›™;*„„‰ÝńWű’4"Řoěż_Ýs 3„.Vý3®ŹŇČĆŃüř +&–¸žź×Ďw׊›V¨â KhëR{ÍMĚ«™— ԋߋۓCQ–fĄÂŃ˙2:wh·ŕňń2Ů;že”p™č2=Ľ‘ßśwߦŔ6ÔQ÷ţ¤všľ÷—ÎÇüťhĎŹ˝„íęIthĚž÷FHů–< ţŚ×·Ôńç$› “KÚ(uĺFrg=ĄĚč pžow©Z Żź4….&]`D¬ńŢFőq3B<ŻY]<ěC4¦&>ů´c4Gü§mź_˝7Lkăz@¶›Ş á™’ëřŃ1ĆžPÜÎ.U<Ö˛Ú˘®@ŃŞmzćmGb©EG,‘A¦t…ŇDbxgű9ú<Ýľqj pę&® ŁűeŹóů~!ś.ÝžĚ#JňßŇśˇĎɆi]jŁF.@=Ęď«úă+]8>ţ'âĘŻwféŔ˝4^±Š0!?\Aäz“6_a8O5–ô¬DíĘ´Ý×$/3'Ďíá—î?~ýĎ…©;L„]ĘO…óÝ ˛ "Ď|ľ[ëő:ˬ9NŽçK'ß­°ëul$¦X{v4I'R×ÜĹq+ W©2ź·ĎĽűŕů­żżŕŁ7}ĺHVBŐ©Q™˛yšŐĎ/ٲiŇ; —0Ř[áŘ.x‹x5Ż,&$ąGeö+jČ˝÷LjřĺóČnvČÎÖ·d–‹đËą-¸JI°ňćúl‚Yş…‹” írÝs‡Í\€kn_Ft6dřfąë,ćIĎ®?T?‘¤&E$ŕ—ŚĂ-ď—D¤đÜÝŇźµIĄâµÖQĄÇqnÉ,ľě©ëą×§ér+™ň° TQćŘv±«&łúD+¨{DÝĂłżě +×ČlUبW.š4/•B‚đŁĘ~wáő˙_墒¦Ă˝Ţ®B>«"‰ üÓRŤF÷úĄŹĆŹ_‹Jé[Rí+ ±Ŕ\±hâEU%ş,¤ižx‡šşI“ă„ÓŞŇîZ×j„ňć(ĘŽ\EÁ¤ČQµE¸Ěň¤ćG÷f0}¨÷ŮĹ}dŐł-ĄŔ˙G„Öfż˝ÓU›Íó ›?îŃřN„K¨c;Ş‘JY6ݏď2»ŻYEŻ·îϦsÝČ黦6żŁD5a˘ÍKî^)(ŻĂmej´L,ťäP«;T6_|Ëd»ŁcŤRŘ›P¶Qă;XMŮ`͉”mĂÄĽ­}Vş ěnR­NŢâM€Ĺ¸ćTô*˘H~ŐfiL×ÝKŚ~„æ;ÍoiďIµDv·Jq\éóŽšŮą˝g +kgľT’pËäřAgâF…U ŁâaŢĄ?řÔiyY”âý2á`—ŮŇ`ëÂoÜq–¶v|ŽeätÂŞ°î­ELn âePúúUöε‚Ůu§vˇ$q\ÜF‡‰=č÷ŮŐ­.‰Đnß±3UądmŤáq ń1[Ăľ¤…M\I8ŕÜ#˙FĂî…Cmuşw[äŰvî18FRýyŚx>qÖR‡'ă2ď“&„Ŕ#jş‹«qN€Ç9żĎťřă)śó +é]űׄ1óú ń7,ťf×™g1íŠs 'č­ĺ6`´,u͸/M#™b¸U˛‚ץ‹6…·ńFŘ™â(˙|ršmL‹é9Uóś`Ś}·ŤŚ™4Xŕ{e2ű‡3ńŹŐٱx“R–˘m˛8S°¦;ďŁÔĐxë„[ˇ;ß×·´í1!öZŞ…Ť +wM3Âuq’ÝMm[mÜ}Q”ľŢ”¤Ş°ě>ʼnTתDřn0AźĆ©Lö`’”,cÄ%E) +)†ęZ—˝®…Cî·KCżÚ¤}U§{WĘřpK+2·đ äV4#S*OĎ·”i¶rđ\ä+*r ęŚćŕ!ε´Z_dżźşcáŹŮ‰‰÷rŐS%łöoîŇo‚ËŞ +'rdYěľKĽkHř’^ťGî°M^ŁpÇĎ—a;Źőź€÷Vf=ű¦Ĺ…ńúYě¸nr÷ťfäÂÜľ•)Ö^‡RłeČĄi˙ľVNYÓň©^ĺ¦c;ׯO άăçp4|l÷ěýµ•š© 0#€SĎ»JCÝN^MâţĄ®nś‰…)ó#“„ÔŹÔ0±4«¦Ĺ,Ćö´9fJdâ #÷I]×'©^¸ŠP'ÚVń_žśž­8&âý´W/YňaÂąEMą*abÎR­WŻ.ČW\űlVúÖ&9)`b‡ë} (ZL{\ŁÖ_—öL?…Ő¤Ö"ř=ÁěĐßź Z‘ýö^WEĆĹ&ܢY»yZĘtÔăő¸7đ/ÜJČŁőĎN ¶;/YĽîľiF¨M(ŔĽ»ÂÇ˝)_Ł|Ô0‹˝Ëń›}ÓĆ”řĐ=§żiŕŘ´?ÎönNn>Ď5b3±2ŚÓo˘u”‘µ5˙fĹVɆĆg#ÝGŁxMﻨ:XŽsg^WO6<žYm’ĚŃY°źÁ.˘Łe[2Đ„ÉP\C‡"ŤÝí$Ceö(lí°ÂâĐłďźŰŐ)ŁŃҺ̞îń–G‡°Ĺ}‚1 čÍ9"ŽÝ%’Ú¨L;ׯC»Á‚™\şÁÉj‰/ď˛:„W?Ň)űĺ…őęÍ[ÇŻj"]˘`›ś?ĄÝjćźwőR˙i1—I«“±®s‹€ )”čÖµÜS6+"M˘ űzĹ;Z™Ô¶Ô„§=™\ę÷Ř“} o‡—Ků×Íä<6ş&ł(΂8aŃďÝ–É :.žxD&$.Ë­ëVBŻź×€T¶L/Ń$FýŹwsď\źćvţ«âŇáźč§¬,ţ#cď°OŇ("[ĚěJŢŽ +Rö–WŹřť PTö8rýIčŐ‰sšµ3ë&:ů®şLósW_äŠy†Ej±ąoZµ<˘UĄëŔ'®ť^EŻÍb†ąwĹâU•n¸đoqčC·µ`2Éš/ł«CŔűŮňNpCĹ2·d w“öc!„ÔlCKEŰ‚Ij?A|XŽ ,Ă“ĆáŰŽd¸ÍUŐľl„ŰyÉ80LděşböVýuŹůĘÜΧPżW nUAŻXsÜAKúJÎ*ËG ş8Ęě _6±[–‡üL<ÚńůM{őŇr(lě{r·¸CĘAŘ–ąŃu0U¶/Ž…QRâĆ›¬`çy…˘M‰—4ˇÜa`·›y"ó¬ ¦Ý r öW¦Zźm› +óž"°€‰çřj`«úoň»vŔgÇ>Rw É,-źŕÖ۶éÝ)t̤ťňŤY%‰\T ±hˇFF,Rę°P Ĺp …ú,JgóäŤ[ť2Ť‰¬ µZ&°“ÁŰĹŹJB#S˛™Ń&ŐÓőĘ4!¬HRZ&ŮšYWŤP*'ă6Лȗ™’®çŕîX ®„ę'nŘY8tTlöő4Ńő&Đ„M ł=x‘Ąsş”R‘xEÂ릌(«řžç¶éĂ˝Lź×ý»>Ľé×§‡žô—ŮĂř?E*߉HÍäPÄAşË–í¤Ę(%e‰yu‰SÉJ0ŕ–¤U}é‰č-Gh|ť:îîv(,L-uľľY:°Ů˘ţťO˘ß8GéÁÄó=Äű–ÉYŁ˘ţňÚRh©öÉÖÍiŔq˝űčŰU ŞŇ‡ÉPŃTŮúę„4%´#[Ć©ń*·Ď©’ď©HÁ7L_*N?żtVvb=µmŠ-ĂâÔ”%*Ż!ĄbÜO÷ó-ôu7Ńžm‡˝Y“¸W7ąŰľ}ű:Bł4©@Uý‡ČűëŇņ梜WI°DQĄ¨ßć‡Ęł1$ÚűoQö­˘ +ť~˛ŞIĹ4ekVźÚß§0˘D Ă+@§çuL#`&JKĹăâPjYťäÝ˙OĄW˘Ŕ_v>µ32%SĹ]´ŹĐ±™ 8ÁÓşŞ“ÂjŁÇmÎÎÎĽ9L¸ĺ‡7Çę.Ő‘;QÉ“O~˝~E­/ą••ŐŽ÷WŮ®Ł-GŚY(`ŘË?tĺ_ĆbiéŠÁ­ĚejS’9Łá˘V“« ÍąTXJÓÇLî–´W„UőŇ [áâ*Zf%y({P˝*Üę"Ä®b+“y‰ŽmE—“o⪦ŹHČFŘŔX úÖDpT7ő ĐÉąSEYeđóПDžpŽ +»Ď޶땼€8†íËćĽ.5§¨Âę©qz~˝¶o«tĚ0Ůľ«ü§Üá7ĺ•=ÂjÔnßíą ^VSĐ|÷Í”ˇ*šÝą‹¦ĽĆÂă$cŤ‡G] + O^‚·D$& #üäVśvö«şfaҸpŻ}EÚ”.I ·˛4|Ł«‡‰űuPXĆDnhá <š.)g?ś ĚŘź’ńx©šâgď!Ś«á’˘5îÎhlŐÓ%•M ‰Ň# ŕá–O§Ú$Ň­šĽóČ”śyu¦Jż]ĹĚD-Âť×rjm9Ź‚!ڤ÷ [‡-SžkČńŮäő>KÎk«ćcá—BRď&fĎą ÓĂu-ý2ţÝżJý%CŔuR )üň"WĺĘłßäÎ*F±)RÂ0Ń7µ®Ő¶|iÉt#ťş 9ö{¨úĚa˛5Ôp,ĺ„CąÉě"3¨Bźvi*ýnz¬Î–2¶2é{_ýpq¦ÖMۧĎőě 5űc&H43w«´!™±-!|GĹŚ.4Vl´÷»ŐBKsŽÉ’čç”}ΦC˙çŚá÷•ężĂ˦f“ŃSĐrYÝsXÁű&”źUgőˇ/Ź{«ťIźül®č5 (a&–úoBŮđ €ÉE循)}‘»!nőP;8żr!¶űr´Căv:ýAĘJ^Źx•xă[Ż"¬„VŐQQzĆ8NßŇg*85VÜôźg `¤o÷,IˇÂ#óŇŃoÂbŁÁÁeźŕ´É˝¬˝Ě«–m#;Ľ‹ŽąP‹’ߺϻ6ń(}ku­&%AŘ7%EÁrÜö‘ř—ŔxÄSÚWj Őů8‘.Ľ K7•Ľ‚•%kmlműdńß6Q Ż,E„7 +öă§"Îx;™rü;›Ĺą•e–ÉŹâň¨WjÂy©~ tĎÁîeĽ‚’_Öô1:Únml" ŻŢ |OŰna“Ö¸ż]v¨ü”ň>ojťúÁ˘Ű[u-Ęü5ŚĘžĘÜ˙ËÜ‘č/Yşö”4EUBµbĺ§ĺ¦/Ź˦™{°Ją®Ůʧ—óŮĄţÎ’–\hŽ+ą,ŮJ/Ę˙®ż¬–’»RĚ^ß0˝Sž‹‡Ŕ±ĺÝصšD„"»Ü×.A4xĺHŤqDHśZőŮżý±ßť ZIýöW%uéR»ÇÚűË·ju +u9‘=];Wpěń°n‘¶nťJXp‹çŹ Đnđ×ďČHíwń.şÔá}>dŔŤÜtüŕšCB¶ÝE‘lŞ T‡3“ţĽ”¶eŹç ˙QN¨şăŰŕĐ"d&¸Ć¶Áŕ!›_ Ăń^ţłń^Ľ5 4«“z)µj%äŮšNë2éÓ µý"C‹fŽ–7Ihű†r”R[Ű0U°‡"ÜŽ/`÷î`ŇuеÉ3asä^+©«°ÄnŇd§1 +©b}éna?VRStx`uî›Ůq!%L,’Ś„TZô\a˘cSVR“¤¤aE&-VR–¨•ÎůĽ·üJWĘďߡ÷Ć룋š5f‚´őÚĂľ§B‚áŔă|w}Ľsé 0GoP<ŢŘmĚä‘<˛ůĘ@‘Ő•jŕî`ŻëQ™tl!˝ďÁ"LČ>ŐúľŔÍß$A¸'j˙ĎRźÁd\»ŠŁ•N"’˝t.85ˇ§2sń :[˝BĹ­”vü/t—cľîErüséđŮq)HŰńě,»©¦VÄWAyą‚üäĐF·Ą8uęBí% +ĂMě÷lńĎçäŕĂÉ`ÎQ-» +[˝DY`˘_!r[®Ăţĺ™ÓžÚc>Úíźć ¨¦TÓĄť: wěRMÝ·X9f|>źaNÉŐöFmăÜ_>Ů ‰ČxüX^>I~x®•S$–ORŠ ±úaßňIîŹÁm6Ü+c!ţY^y~úÎn"¸Ćć[óôŞ{e|“Ž”`yҨÂČ>‡đ7¸KŞoŹ_]:$é‘˙|•âÔî%»µ÷kě4čpH*ED–Ŕű[[.Ë? >żĆ}Q–w®Ľ"ažť®ó¸Së'§/îoöeőo˙ˇŔŇ„ëŮ­ČB™Ř’ýŕ† +TIśĐĄÁâ:Ne_Ëjě"3–§ĂäňŞj¬ ^nq‘ ˇśń©ĹW÷ן8Ľ{—Ś0típH«TŕBZăłn¤ +ţ„ęJRËŇĘ^O´¸Ň‘Z&ěnD“c_ôŚď9ŢśJ!ĐçtiÇLš?ĎšŐ”ś­çéÄiüNş˙2qÔ™6­ě>ÉĐÄGrđĄ×m5T± Çi»É3ţęJ '—ďGż'9~»«GÁĆm|·Đm3âď6˙GnŮOĂ/‹ĺhĹĆKńH,Ę1QĂ6ÝßîPi 4_ˇâűëËŁ"őëŮ čHýă@‹¨ßŢá*˘î‡4Í<‹ÔĽz î=BđÜô±âšdłE‚őĘlX°é ČŃ~´?§¬›ű#8¸Ĺś/§¨9řMţŰJD5ÖM¶R¬ĺ,(áÉŽLd݇Ąc;)».Ńá>ż +ü“nË}Ö‚~°ü!ă]Üá,ý9€ýô*%‹LFNłŔśµ2ĘIĎx·‚ČĂŁDŹXäĐ.ܱ~ë<”řµa+@ŠčZřťľťQŠô,µżî&–§S-ÚŞňsb޶\u +RţŔęsčq(+ŮżN`aKş©vÍßŘx—‰}›ăCůń +‰Ěş–Eäs˙˘ďxÁą››' =Só–¨s˘˝rqĚÁ˘ŤS—´ÂŤ¨ĘľîU *|—[ą‘q4Ţ­uc.]źwěÉ ýD*˛ű}ŘY›,˘x–WďJIă r + űKa‡âܡw·˝¤śľ!đ!L‡•ĺpµIÔĐÁogť]‘‹Ů7¬}Öš¬ëŧ<„‰Ŕeě5;Jű…×jI]ł"á L“¶ľŤ+~=źźľ#7Ű«fĄo?ţE­Ú‡JQi§çŁĂbm˘6Ň—LT%źzĺmX˝ź‰ÔuŹęĽ!ăDßzń`× 4®ls—JŇŮž®R÷±Đ˛×IíĽö]čňaX 4ýěh˛¸*mv‘^őôśE]ćuTZ§üůmÓý)]řÂď’~؉ŽéI–ă*ˇ¬ě©•rw|ű?ŐJú˙Áw«+MD†…ʜΚ+ňęN‡ß~¤oÝ%«dôřkŽť 0xÇćGv?űGUŔ]é$ D.xR 0’]Tź••_~„tOPn Ś8Łň]­‡;ËY˘’é&—Ş=ÄšŻ€NHIŢE4%ΨGXC—śÍ:śŞoeěőwW$—‚÷• +ĹŐŐ +ÂeŃÍP2ČŻ?¶}/7ý‘ŘbwŮžşŹÂWVÜ*ĺ.E˝}›í±ÇuźäzÜňjaO*Pž}´k ł5‰ˇ×s_|Á›ebŮúńi !Ă´W©€A+sĽÓ™a’¤ÂúwĽŕ)¦Śâä«~MxŠIfiäćă™§™5Vó0ý˘{šYdťńú ę>łş2 Îí!ăąĚ!Łű–ÇŹŞÝW95mž?ő˘‘C +“›™üŕ?H®¤VÉ6Ë©Z3Ząźýôăą¶ŤÂ‡‰ôşC— +e?ż + áV÷ăTŞ‹‚˝‡'ReC4ąIŽE—č}{;UuÜš€¤äAʧČÉžy]I}#)ĽĄ‰g©Ť1śµO)×ÂŰ §ź óŐWnrä#)ěďN‚naI­®X4 +t,_‚<čU `c—ľdüwukĺřťlÇxF8@ŘLtËźŽ„}ŃéÝfn9)łý Ŕ«hÇÄË%ë~íÄďmdń({]9‘ˇÂç‡˙Ţó;Ě)¤[ćđVČF&€F_ O%¨.¤{öö÷R‘ĹCĺ†[ȇB–n@7ČDr=¬çKÚÝŠdqXiup§‹¤ ‡ř»n˝¦_RŇ6¸%Á@ˇŞHçąv2¬V÷A¦Q0’Ŕâd—ĹNX`ëßÍ\č“ÍĆj†_Ţq`DýĆú&˘$‰Ü¬‰˝Ř9śš4ÓćVAŽ]0L^Y7“~Ţ$_&VoL¬ĚŁ*˝‰ Yˇ~µę C2a Kv 4)vö_"ȵu#“ŔńI+´UFşłŤ‹YązŚŤ3ĽeW3ľ±š3Ą÷2e(•Ť±îÎőp!¦\rśůŁŕzA| ·$âqZ~“Űś5$$ĎťYŘčŐgÜL ěźő +ř‰Ş(ęâďöK “Ía€x±§É>„ŐTďne˙ül”ż˙ąK`Ë=ośűŕäýĽ~.ĽH4‡¬q‚`řŘ G‘ ÖčĹ«ĎkG•aU‚Ú žČÚsŻQ·˝¶ĆWäËŰÄ$J×Ç>-VÖŢ-ÉJNđć÷*ÖŘÔ®âK4+l\Ä™˘Ľm&Xč٨„nźÁW“ÎLě”zKžŠi¦ÓNŮ™iOˇ( $ŰÝo=w‰ęµô˘ ‰˝4Ŕ?ú•i{Ď˝ű×­.—"†–”'çsÎR“ýŃ’&ĐMxc‚ňNú6Ă^ă’‡UŽy°=SŹ\î>¶™<†+,¤ýK uU†ą%~ýCiIť34î´ĹŃă(˛öR|ĎëűȨx ËÓčŽRaę|±ˇł=kI,"ŘÝ{Ľ†öŞ_Y$1 +Ž?Űľóoć­ćKőŽu˛¦g&¤ť¦nYĚüve­üLF§U€ŢíÇžňłă0P<ÚçŚ}˛Ź“± y’+ Š^ËžpÚÓ.Š… ÔKç9gÁ‡xżjľ·L>”CîťŐRó`k'aŐĚ2¸&ÝľÇösńQŻiۆˇóWuYëjäN]É-:_ÎÓ?űż«_ŔNw‘öŇŢ^śÇŞŐOE‡_Ň×AŻŘĘS]Ĺš.'Ť´đ§˝ËĺîR]•EQCs§ŁľHö†.F»ÇÍ{çP}ńđ¸|ÎčëĽÄ[#ÔÖ„‚/±RŻ"`xîr7·łOÖEُ®µ­€žŽŮ:7vx´_él¬ţ#iáR…\äC5iéć—Fč#{xúŠŇ¬Ďâ!—Š—yźu?L»"#ŽnßaéT)DÓĄ†lĆ!!řčäáŰ2NěżÇÚľ?rj”<ŠŇXuťH#éĽČ-QN•;˝ee·ýą%·G|Č,ŢU™·>’3}ý…ű]Îúw*%.«Y—iĂq +„_ř ˙D$[÷r¬UŠščŢšµŘÇ®`d:şíěŮŰ·±ś”G^o÷ło]čÚ3č_ÎD´ŹµJ(]¨;Ť §V»Ű_AËŐ¶°~)%ò3ÖCä–J ţ¶–D| %ĐŃ”2÷Ţ6ĆMż=ÂĂĎŞí fČąýą˘´JT–ŹhéuĽ¶¨]éHEŚJ ‹Łđ¦Ü7Žqe;ăŰžxáL J)‚g‘öx¬ÄáíKHçű]|˙·¨çţö^˙UŹő‘a!îő!€”eňČäÚ“nKy·# ł…˛_ÉÝů»íĎu‚l¨í㉌- ™ČOą|‡Ô˝í´Ä‡oŰ•rLzI+ýňZ-wí +­ĆWöA'Z»JÜčtq†K„GÔAVu .ĆuĆ®©ăů˙µ‘`5»sđ‹“ëąv‚·‰7A:ľ'08_¦e˙Iw ĐÁĘαTcşyoĆ‘2@€ż2GDâdUr “,xŐ…”ÇÔ± ăŢŰ6ţŔë€tYT¶ÉÂŕćíöîŕ)ői]Éţ#’G;Śäůö !‚ňv¦¬n‡ItsĎéĽŇ«RÜě·ÄÇĽ=GfŻ›üđBě¤s±ŹŰ]Ô*—UfěŐ«U› $śhé·nłů!PšI îˇęR×νíĆ– §›Şą7OŮ—Şl9;nňó!é@9ÜŞđ鎝j}Ő&MbÜçZú+ěV­+DT˛Ż’ˇ Bé U¬pX9Jy­zW0gňŻ{jŕŹţ`ř6ÎÝc¤ąŹllHéU÷ ňíŐ?ÍŘży VëOźqďw<ˇ¬ +NóŹ[usŹľ†Ź^7˘šlˇä;A4=‚Łj’Köˇ8(ěĺ<ţ “&¬LŐVKoß뱳đűI5ŰşNß¶ű\p‘p÷8ë3LÇ‘,¦ň?% ż«‡-˛ý¸¦¨V€%X±ş{ˇÇ“1ä4/Ü”đ[îÂńŨ5yăóÖŰqN&ąEΔ +V"VqY¬Ż ĚE4˙dó:ÓĚ[”<¤É”6_)‘rʵgÔÚť˛<©F€‹ý¦–ŕŞ7ü›ňB‰>ŮŚjéŽÁt„m!kvĺ®Ăh‚µíYS‘?O—k¬Ńn\¨‹*ŞRŔĂ@\bL§Dš\ľ®áQ +ÍëÄ ß&íeAĆ#íŰůęĐËÝOm`»ě4áA +s¶÷9Y+/zIŃć=—żůˇ—KiwÚ1ɧoźąyrFşÇ’]ł^PńŔĺ±V儹őä€×WłŠ<´:ěŮ wK´Ďż‘5®‡ňܧ'Žůłňt߇)H÷“#QОsqó|`@°Zéw‡ÎÇ"ŻÜćÓHjtGîDÎůő¬ y!{ĹźŁ–%ÚOn­UźGű“{ŹYOŤťr5Ő݉Kʲ/YrČ$·hůxÇWÚfőťíĺ˘v°Wc_źżr¬NeďŃNj)˙—I{Ú·çđ’0¸@KI)ź§˝WÜ˙ÚĺMQ3˘k±´L9^JAŮWdś8®řzĂj…GB펖S¸ŐĄ•˘C°•lŐÔ!Ić@Đ â9LŽ:öÓd|.ŠN¨ ëŽ^IT4Äí—&T5>§5m»A–nc¦ż)żš€Ř‘>6 IG§óÝË‹ü‘ŕük™ÜŰňĄY|żz(HĎÔž\‰ňZŁ|gY]Z ,“ŤÜŻŹUťĹb&)GÚcź:ü.;Ź +ű˝Ňâ7• ÎüŇŠľÄËń)Řű'·~Ľđ=Ď˝ 0«ÉvćÚ»˘‚™÷µ·óĚ#·0y(Ö˛vţîËđRö…ĄąQaF~Ž ^ýěÖ +5LT®Î§= ,YĽr­TČńű|ď+_a’XřŇöޡ˛nýWĚ×–w|xE`/«,ÔZVSŔ#Ź–µŽöÖ™ţ ő ň»˝Y+§ăiu‡/;­ĽöÍ©‹žwăvô]˛|~~Aţ\ÓŮĆë<˛µúÍ–…BZ–ľ–$V¶ăKoT9H™"‡ń!»Oë.lőľ""˝ +ž'ő¶vŤŕo)MÂňň÷pű>WµiyˇMjŇyÂRj˝ľm%ĎG1(Šü=LhWčÓ•A>¤ +áŃ‘?ÎĂSqW¤µł=ŕi"BkÜRú-ň ˛Yű\–R×ńw!ÖöńîÎ÷R†ßUS¦ú,y[/0ěÓÇ〉éRą3©ŚĽ=úéâ ů=ůŕ×<·Ţ*ąéT´Y&w¤ł’q€k–ĺĄď”€cöÄ[yyz¬`%||aţ°’Íýú =–=wË…ňz©®Ň}[s6î‚V‹SP"‡ŁÚ“¬^®ĄŰź1"K4`fIO¶łĂioŽÄ +p¦×–Q»‰÷‹2Ncq˵ÚM “˙hľş‰eLóěXb® űŕVŹË-ČŃX—Ú¨Žś1Ó‚JŘĄÓˇv¬’ŕŔ†NßP×óŁ3ňŤ'wń}\˘Ź ďťg*-告á ×%ę#M&s"wÝIŤM±…ŞŢ;Ů]®_ČKćĎăäO!«ăN»ŔĆ˝ë˛ećźcô.i˝;>Ç’žy¤¦L”*Ną3>Ńđ˛ää‹Ó›Vá*Î ¶w±tâ˝ (¤iš”8\·×. ş§dGB.±štv2ę|Uިqáť8%ŤţoeŹv÷‹Ńyôź+P!™C)‡±gŹNz©L%Í%Ç#ÖA$SťTĄô¶ âçZ@ËÜg¶— ňľYű´$Mj¦&öއ®l“$诵‰GuăL•j}T(C•źRlÎ>”/x¸^éąąCl˛‚8dű… +»çáşĐ©ÉŮăo ÖT¸ŐušŘÁxęY~ĚĎ +­—$·[sŹěUNÖ~˝B=´ú\G˛ÖVŘmż>Ť7‘×ëń9W1WDż µ5kżĂÄnë¨A˛#Ł…ą.U#“¸Ö-yx|‰K_2;#rVű„‰RwĆę’Ä—‹s!°VmČ,t™ŘŰÉ]^ǵ”ĐąŇD@x !łˇ—˛ŻHţh_š–"|™ÁĂů3±ŚuţŞ ¶LůKˇśńýü5tîăEŃźc±šłRGýUč.“CÖ˝}.M—ş”RwFwĽčYăRşÇ×ÁU¶¶®S'Iáěe‘+˝Ľ–}4WV^ůÔŐăědĺҸ˝¨âÓ¤¨sűżVnިhÍk‰:â˛:gIÓ˙§nô-{PžĹßGP“ťqąś'­_?5Jä7ÚxüüSÎb¦W°D…ý†ő0®xÝ-SˇŞO?Çö)Đá™…SG' $î iZ2ЧH.ús¨ň6ĂN1f´őĚUě›}†L>ăs Îy+ÍAß%hüU¶“㊙~Ffd:Ösľ×çÝAEţČRţHeéşV©ž­ŽEo’i†Éa˙*{Tkáµö±y­K(=` ‡ŽfnŰT‚Y'mnHJÜť˝Egßd|Ë9ôj„ľÁŁś%ąŻ»@ť¶L@W¬™%ČÇNoi‘o=¨Ü\[Ń{ľą®‘÷pŹźׇaďĎYÄďʬ~‚–ÇĐ F„A=yÍ𡜡Vä>˝iÚŠ7]×ÎĹš_şÉÍýÝŠ/ëň¸»đyX ĽĚkŹ+Ýé˝ä Ť`gUu‡Ë5ŻNxMŚî]V§žUU­pXđMŔęÖS«”ŕŃęčÂŠŞ˝5÷Jů°•xÖ6Ą™q@C˘;ç^sĂŞnÄa™Űë’U•Ěý*Qíţßź`ŁP â"ap~iĐXq:ľdÇŘ Zý^g¸eałiCnJ +„‘MHzç÷°˙Gýg´qf'–wíˇ@üÚvǶ4qMz´Ţíčͤµ\¤ÚN˙ +®‹–Ěźr-A°¬¦ýşWżű®ĺćýŢ~©6L¦z/ľ!ęÖµ,vŤ˘E1€#Óȧ¨Ş#CNąx9Ë {d˝Ú˝ň–sr}i«;c¤[yääŐ×ŢLnşł»ęjąÚS±ť(gjá&t㦠+T˛Fäć –ă’9Ä ¤Ú@aba«ŠĐ&$š"Ż5·V-´§/nÄWŔ™ +éÄo±4čnŻú r6®Ł¬ĺnĹż Ç +·iA¸˘ŔKmů艼*"b&‰ĎáŤçµősĎ_C‚×€9ŢGSV˛@¬ ˛L`2G$űáÂGĽémy©ß,ŻţpŁyŠU [í:ö§s7Ă „+żŇ-˝up¶Í«4ńăAJ(xO+ĆN“FĄ,줖ă`;*AË˄䂼ָ©xľ-ěgżŇr¨¨ń„Ć ö”°í&'8ŹŞ fÉ„ýZ–, z *“„Ey~ŞRŰ2Q +!?$ĺËŕ\ײ$ŚÚ: 0Şa&M·4đ˛JÇĘM]·”4EVd0ú¸`đ×Q¨%‡·”ÖG‹şĎý­oš¦.“9o.Ş9 ů;TŐ(ąÎľt°(®Öe^«‹Ś¦Ď#6(—[†Ë*Ję楚Šôx&3/‘ľ‚ɶ‰ćóhŚ.“ŁúëS湉e%üL>‰y řO}#‘BôVj«˝ÝĽÜ°ÖsĆ€>ęq¶3L®ęp¬kYIÍVůőŰ€ţ‰#Ź¨ÎĽ09tďŘ]ËŹËB’K`ććËş·J [| ł—»N«Ć/G0´¶Zř`;e Ĺç$cÚň÷Ť‹?ţ,VÄ(j.\ÉÁeîŚt +ÜĽ~Ôeg »>Ěîř«őy˛HćŮŞ;tţĘÖF¦Śv´\ŰcZGR CÖ¤ˇ—ÜY~Ś®â˘Ôł·Ó@”QpÓ=×wćţó =Ż#_[´B’î Ľ×Zv­LDpgńŤĄÁŠćě{;˛˝ëm;J¦RRxĚÝ âNţwee÷W*žeŁßďLHČ_é%öŔ(‚G#rŐčŔM“­xäŢďńĐ×uú‚i®E–Gš+ öIşÎŚ×˘ňłÇ&n*Ăd¦©ű!~Ąk~4ÓFm_ůŘçĎ–î.úü¦SÇáżé›ą'ş¸fňć©|]Bśâü‡ÜŹĎR¸_ÖŰUsćµĂŢłĆ2 +XôOĄ‰ŚžHź0é˛nčţ -şşVé“dÁŁ»f‘”ĐĘü¦6n"Bć 9>ĄĎ1÷ ]ʶ/ąťŔ;D<Ŕcv:Yo sOń_˙ŕ|ČâęŹ7űŻ +¸'ôáEq2—ÚBŘ"jďW˵î˘ëîU,ŤrŻźsnôčźí@>·Ł¨´Óâ=Rgôü¦´ä.ĹYéIđÜöLôsʆçjäĚg• źb^}'šľ®eż»Ršu-ňÔó’ŤÜ›·VČ®0ŮŕOĎ[By0 ×ÜĘĄp˛‡2€źäţ]kĺÜ}^&{ 4»(ĄÇµ\ňťşë¬9âíarÜó9”iłŻ' Ŕĺ>×µBgU‹ĆÜ«†•2/“«ćVË$™ň2G·šĄ•NÔ“EĺqňR›NťďŰr">¨cp«ą1XBb!0L + }]ËýŠ×úi5yDý'­šj !öĽłĹüFoěĽÇaő9©<ë×ËŢ?b¤óDŞot•^ĚęÚ z jä;>čŢJ&T¸Ď<8ib]çčŤo;p6ἪĽsöß´ę +®7Q4|߯ ĺÉw,;ęćŞKV>!Kw€íHpý]Ú(O 0áľůâÓtŹŁrĆíž=–(ý…EňŚho)!ůs:ĺ­Ťč7u=,M×쯖‰HeOwŤŚďÂ#fe{R¤Ó»÷- {ďÁ\šj;ÝîhGŔpjšl»HRBµ;ĺµ×ÎۦGď'QÓ¶ŃĂ&v¦Ű– ˘#Ő?Ě~WSAČ´Ë$ŚX3Cü«ĽÖľĺ%lÁUé…Ënđ ŚJłĆŞh´i—ú«0ŞŮOÎč­$]Tžřěß''P,ĘßÂżµ\ö}uće Mʱ˛ZRB>?›4Ň­V¤Äš7‹˛ÓO™Ń}—»ě./ —;Eń`műJý “«¸ŃËóëÚŮą: zXÁąÚ»H”´!§ę"‹$€rW‘ T)\ŹÂŢä^;řžN$·OÄE»ˇ)opIć2u «¦s†rX•·Ę¨·DO*¶eÓsEną%NŞ…k”jˇ;â~Ž‘fsËbKQ í÷•ý’)b}ĘĽ^$őşŔ˝ ,%¶ôM{4µ°ĐŰ'6ÄʨňłşT¸ă6ňć$0KJ”‚O@˛˛ ;Ŕ>+©qŹ<«CÔč=ˤ&J>ôó”÷ىÁ3 ?Ű8Ť¸bW«w0ŰĎ™ĽŮ!k©Đ™xGĎčUzĹSMű˛iýßĘ#uSĎłM{pŃ› Çů‚iAb-s=?ńTĺ;Ł-'­¶Wä¬'¶¸4`c€ś±ŃŕÚKśľă„ó’×׫ČcEoÓ÷ D2Ç%©řĺ,Ő.ąÉ]Îů„ čĚz|¶e<79DŔÍ!Ýź*e +ŹŹTŇžwż˙xR°şúĂ˝ţ«î5sˇxŤň”ö‚”¸]ĽŘ"ŚŘĎáI‘h[\™ő‡tÔPz]ÄŽq»Ě‘‹Tţ´DLĂW#,/Zŕˇ;-Ě^ß@ ”–ź(ďšx™˝ů|ő,E…ü _ÚM€ď˝î­ŮVyÇN—˙óĽń\ÄŢŮRsđJerWŐM”™-Ę…s;Á™4ü’a¶_ ‚–ť±+_ a\Ô­ç 0x€Ňq@Q|%GY] {q¤ú[TĽöö­nîdQ®tz âSĘő_Ş%±„LľăZýW5ča sďőWŃK_&ǧÚféÜ0©VBűJň2ىr›[őúzńAúű]=ôX„É)ˇÂ[!®+ťBOĺVŞß÷ź´jgŞh¬#ŕ!É@~ź6˘[ž­>+㳪ͯśß/ËöŤ3Ĺŕ72Ď*×5yéâ¸1Bítd› ‹ßaág +R3žÜu•Tk-HęS*őFtjVŻ•®ăŢ+đ‘ŮŰQ®”Yí|?‡ŕ$¨l,ßN+˘ÉĎë´µmďÍ_}k™!&äLŠ•˙+{‡ÓT>IšîÝ‹ťlĹ}űÁ[oÎŮJ©Ęĺ\gII0”<ö´K:aqp6QëĆ×ĂĄł9ĉ؇µŇ“mlčë8;5v«jé`5/ďb5Ě`\%Ű2Ů—ď<¤¬:c˝7ŻeŢąµ–°Ź˙*[KWâ~O«,i"˙ś5ü®´2Ź<ó”Xe1¦Ĺ-ĎAł’›ŕ§‹Š‚„‰®Ő-”‡RJ¸Ó’ťcť5¨g›µo +~>ç;gPѵôěL ˘ˇi…:U6ĂsĎľő<ÁO\¨u©)íŹUŰÚ­×s{Yf÷ČŐ­pZoČ&ďčŤË··‡Ócă‹ňsŁ4ą—Ő Ěp4ÁĂ3źŁ?şŹf©–HĹ7ălń¨ůGěĚľ^u&Ýxväń”Ó•Č^ŘóďˇŔ–)›ť§ĹdĽ¨5.VCĺ—9®¨v–®ÇĄH‡t”ÄýrkócöLkMň*żF”m#Á>ń1m«ĄÁÖŞËËo“ Üí)ę!Ů$ IÓŃ żÍ}Ś|˙b٦zšž8IŻ› ýń9xr&ŔžIbćŚ$ŇăAÁ"ĚÙ뛷<„aß? 1ĄŮ¦t$~¤íJĐiÜ@`‡Ź#‡Z\ůĂ©Pł˛–]|0ݵ#WA’o ş¶+ĽáE­­˙ćë5 ’YôĐ­Ţá[aaŮftdň>Zhý%†ô=C7•É·SőéBšfǸZáWŠH$łWŇReÂɱŹSh»:ăí=µ[>đ¨$X;Č…! Ćě˝"OKĹnVÚ–]ľ¤#XźBń†¶=(!%ßz¦.Oż”'襯 ęż;XNýáfW‡îE”µ°&‹nPX…ÚZ “ŚÜibÇ +™a´5”jR¦]ܲŹŕAÍŇBMHźµ1&ăÍRČŇćT¨éÂóáxî±™P™«˝gq“ż€ľĘĄČ0QYÎŘ@¬Ą.™L¤Pa,h+ui"ĄČl¶]ZXĐÜ—ĹóÄ`ů6@g:sŔî6×đ÷G¨ků’#Łx}ŽĆ5m·ŕrH^Şý"K,qÚ×­Í“er eă<=”7ň÷¶& ˛Ýž\ő<ęZ]”‡Ýęů¸EmžhNÂÄILÔÂäĐmnĽUŹT"sţX„Ç&X –‰=ŰF aعٓŇ*#áĄŔLW~ęVD]ü§Ś4zűě8N=ĚDTý%Ľ‰M“©ěŰx•ŮAç÷ąŮË].aż:Âhţôsߨü@ü×Ý™ŻŇôÔA×äRŻ@äUäKşĽx\·(«9UäÓD&M8żŠĆť—jČ×)%ĺl‰Ü‡Ď±𝲸 ßt›ŚŚf…ĺÖO­DTü¶¸\ËE«&·4° ŚrüÎÚulr¤°ŘÔÄ}=ęú!µ‚Đ|6»ęq^ź/ˇ>v”!ىçr_sŢ^<˛Ń©Aő'¸†rÂAµ:5”ĘłôŐî8ZáÇ“Ýđś›˝ú˝~Ú_–LŹŢ[›_łÄú¬¨výˇ~݆7ü“4âwĺ6č…SÇI’¨qťç"hÍUé 3‘ˇ“[WĎOPĐ1·ÉK­YwŢăľž !é®y*Ó7pJö,V[ŃäUBľ Ąâ^‚şnawâ‡Ýy-®Î M⥞âďY.Ž{*ĘŚcű:ĐŰ„¦(â1=qm1§°!ňÍ™´fˇĄÓ˙ĘcFôUČj%É®ůŮnŕˇÚ†VI(Ś’Ţ'Ü9VŽłŹř: ď×yarŤ{Ű«ĆraKq¸ňM(ť…ÜĆčHh}Ö;¬ŕî.Ű:ôÂEčŃ1CŞčŠv +W¬Bgŕ}ŞűŢtŻseĘ)éśiĺ‚—‰So°Ś+hDČA=w×ę=_-ﱋ)D:á·ŰŢ5&Đv,ţÂSs{ŹA~ŻíŔWä‰]S{ ŐT«4Qiôď|ľŻ‘şfôĄĆyă[oVÇěYůg° t]*ô.·ş­‹§”řĘă'đ†—\ŹS5’,ZŘ‘8›S#žY`éÎqęJeĹüü¸’Ł)˛Ąqżą›Żqâ´+íjyyŻ|Z€÷3§Ú%Ěü4;UíŔsĹ«/ćĽ;˝Ş|(ľŽeaDzK˙čĐŤTXuUyJ·¬Ö*/=„â &·6/ýŹˇó–°Łp[ĎĎ˙ź±oëŃ$9®{Ŕ˙Đ/ H€ÝŞĘKe–ý´;Ë}Ö– ŮŔ. cA‹„EĂł4č5ý{ljŚËÉęU÷ŕpf:ć«úŞ2îçHzäÄQŇ+ˇbĽ˙>‰@öC'‘YÖűsH‘\€ĂĺjÎöä"-S +ظACč+ ď˝Ţ¬ĚŽ˘RÓŃ]ŤWhbM€ZŔO"6n€Ąn+z6ră8•WíĚĽĎDuŧŕbnt9˙PDŐ3YćüŚŮ• 8“ČS2qî ¶U_#q‹2fźLă€5S4ŰČ>Iâ3«‹á´o§‡Úő/ ›”BËWü]÷ÝÍ]ÚÝśhč×䱑FĽĎአDĄ.jĆ/‘\¤ÇĎ%·˘˝~üŐÓÓΠ<ŹS…i«QC÷”:3e¸oĚf€A§@ Ôˇńđ(QұŘS^>&›4Ką˝Žź'ísźŮTĄZ©ä~ú5öí¤™H%„UĂ;vo±ÖµRÓiŕČîxhŻ™K†H˛ˇ{2Ézpęs +˛lbäfŮúM#xśE÷Ď„r•'2‚ěˆ÷ň)T zIĺú:sžńsČ4®‘)ä33 /‘hJ(}őL€V¶ˇ¦5—ÂR7Ä>n¤$ÇÎż…ľb˝,4şTCUĹŢńĚ +á§l:źt­–±46¦Ş\†ŁťAŃä×ĎQcşĘŕÜiĹďF|‚ČöÎŔçsg#řëDÉUÝôŹpL{ŕ#7W*2ô±řĘ•EP‰|b¨< Ö¤ť#Ć‚P­šHĎQđTÉ îR‰ęŽ{kÔ/‘cŰŁ®Ŕ?3›˝!ÔRݵňżÇÖ"e%‹Đ ŮĂ^ÉýÜÚmű¦ő™ÓzÖ¤”r‘ĚηEŚöÚ6˛»µivímń†‚f0„ŤÓfĽÇjŁĎFXďu¶hđőqhG÷ĄĆŢĺ YÖ+€ó[Ćf©}Ń!Ř g3"µRęŚ>g  8:ńA—'EIJ 5gȡę#¨†c °b0Šś% KbâYěăC2Ü®Ö FÖŞÄ I:^J°ĘDóšŕ8ę¤Ů/Ńcěőňö˘¦©i +oŮŁK/®fe*?i‰ô#éµÍmó†źFź±×O×*;÷ŞÝˇhéZđxäÖšĆaň”*ŻÖżë!2•úŕ1ÇÜC%"8˝^BGÍwž@’ŔnTÄ0λď,’?Ń‘™kDE›gCÎi"ĄOšJQ&RÁ™^’¦çéILŰ—E¨Ł9>@qĘ#‹ ĄuىdK´·Ä k¸‡/·QÇeĐŚ€2ŃŤzóXBʤ‹WĘâB ˛Ômô|9$O§§Ó(ŻR#gçÜÂK_¶´ËÄ(Z†Ä—/yň-6(xÓíóĚů©ĐnÉĎľDäx~gć/ qĺŹôE=Š1Á7@;â`Üö!řěNö)o;`–H¶2\ÄFóD”¸ąś†Ďt.‘&î6"TDbz[e1î1›H ””¸Ö¶ĐŞRT<űŢĄÄ0ć\ľu‡«ŹoO”xşGY=Í~îŽÚ^gcüuşn vË8ŇZEäńeM@!"rGŘD6†Q˛uůá6»Ťg(ď&‹‰ŔŰ­9^noÂ$c·ˇK]Ű+i_P.6mµřşv^ë&6ieK¤ńÁuJ™ŤAM%/}[rç žć%†óXúÎĚ-@…Ěľ‹_dZSO˛ĂËKÄŽ˛;­Đwćj§‚*Ő ·~ř’ťOqUĺ¸vW•Ĺ=ü˛YĄ-`DŽ@!Iv¦ObpPIś%«Hőęgoööňˇ…kť›69ŰhăH]mo{Ę™áĆó:ŢOű8nx'Ż‚Ştc%°<»ČĐ?‡Ô”«¦pU×9C˙ţůŇ2%4‘ć´Ąpbj4>ĺĺqéŻ9\Üm»\ĐŰÂL˝=8Z]­’ť±HĄ¶ůLP$˘ŰľH—ëňŞ1Üľž?”ň,D5‹9\l®śśZ©M礨a¬;+±ć;,Žđ©{vO9 P_™!S·<7}ťo +$˝©޴†ĺÎL.$U„ŠP‘Šč5t»aůJ¤HŞţęýsžő7LvÜT(A­/±ý9`Čv%zęDĽÚ{*†W©şŤ;śĆÓŁâ’+ ZÁśŹšlĹIJ5ewŇőD˛IÔĂ +­čcö–„§X"î;·ĎÇDMjĘWŹĚßE¨#Î(P&Ri-_DP­Š®^K¬EL?ăx:řIZ«Ü]‡ĽŹű™ß<\-ߦ-‹&N5Ť;÷ŘEwGąXă§Öῲďţť:×Úc^ÄâF @şÖĆşD’ŽŃD®ăMM ßĹo&ŐźÁ㎼‰$Yˇ'9—ł˝ĺÓë±7U­}ńŘ ŰÍ8®_ŠęôŐ“¬Ý ÄM:ĘEM¤‡q!7>nď{c*W“u×d‘QĘę~ôhä]żůÔOúsHÝ#đ¨őЙ޻A( ô|ń­ćf‰} +5!@ć ›˙”wÄ|bŠ…xnĄvńÉr iĹŘ’rÄ'ŕźŘ} +rĹJ'¨Ó¨É Fń:c·ŔljżHMAřY·XëÄšCÎťC#Á(•RžSk  ť@`&Vn Ǩíś;•˝Ĺu<-}bł…Đâ ÉĄ©z‰AgyÇÉs¨QćI+ř‘CfĹS÷­§ŃW‘Ţ„1ý˝3‹¸Ô †đ9ŰPEä%‡E&vç ËŁ>˘ÉÖđ¸XżšŰXK¤oÚŁŰšą4±L”ä)ř±7=+_GĽj´TŞŐmÖaęęBË9UÜňĚsqb+Äań瑢ođÉKŠ Tô9ëű´I×^âú7÷@ą¬c3ŕG<›ÜŞ*"ÇĘđ=KçŞ$ §ů¦ä9On95Yg2ô¨Dl´Ą4Ç“Jd=Dďü-•ŔK`IG"!@Ť ĎĘ_i§ˇ2Ř‹~µ ŹkŤ“-OlŢ×5ßR#QŽÜßňöěK†H.>šĺTűĘ ŽŠM«Š@ĄgÓĐŃK\ku ̄柼çx·úŤjIHÓ2}e2®¨ó1DśĆţ%Ţ{”ůŠŃ@¬4yŢţöŇŔ× RĚSܨRLŞĆš‹:ŇÇDÓąó.Bdô| <Zuç×üzŻGŕýŰĘ´ýËb÷+l~Ąű†ĆĺfX´¬¦B&ُZ6î7ą đĄĂĽ•"!âhg¦@ľšëTĚ: űc„ăf"—»ŘĄvň îŁîfÂ^P„?®r^L4”˙“}ÔöbNP ě Ž©-Ăř©Ć"ÝóĹ۵`Á‰ěě ”q‹*®r<ÜŤÎ=ÉĐ3}»hz+'Çq\#Of!Äç#U?(GŁ®Ţc†&\Żd­QíZE˛\ľq…d­ěMF%×6].jń‰šĽ +ÚŔŇ@1Ň˝(ń_ŮX†čNŢi·EEÎÜĘvÂí´yÍB×DÇ7… KdŢĚ诜#‹Ś*‘č±ýŃ*ÚzťŹ=8%ż©“ +š˘©&B b'¸[čnňR…ř«/ph¨´) ľ3Hş~ÝŁ#|ŘĚ€lŃ7Y9ă·Ňŕ}2ŤŠÄn:>÷ÇxĺG%˛gl°ŢÉma1$űŻ1gńí„ňÜ= ŤŹ7#NüHčż%Ew‰$ĎŐ˛}çľŃ˘=ôhRfĘŇŞ=Ř•[gZ0rě}3˛ą2&1q¬3ě7Ĺ\SYQfŽ [,ÁHmły$ż‚ôŹCfVď?çĎi.hł +ĽrĆŃŢčÁ›ęçT4ŤXöđO9hr•JYÁ @as‘Šá—¬TČ«~Đ˝Ű8ŮÚ 7(÷2±Éó““Š*ŐÚF%»ćŹŇöŁÝa0 +T6sâ»’¬ Q®cT0¬~mX:Ç(ś8;-°›„!"í żłJ@ěccÔ1·(łČq2ĹV‘şĎŞOĹôŽ= ŮfńpŔ˘yşnĄóĄyËd‰ÔX2ókAęĚé• +¬ÎÓł*ÔF®ŕĄóš‹˝yE’8e‰ÜŰ •““» yG^2ëĽß W˝éA±<š„=ˇuLd+FÜŞ"¶AÓňIúŞ”„>Ź.ăelÁ<–öÝXĽUfsAö,®Ô©®™ëíÇx€ěćRR€#)ćU#ng‡Z.1´X-$âúŤšxyOÜŻź +éˇęr´YłD®ÂS·đ6gy@ \ÜČHµ8˛mH‚µ‰pŞ !Žäär3ştG2÷Ŕܤ“Méŕ`1/:}M6gBKĄé8Z˘}4Sä.v­·Cľbp›şO´ňĄËńÓÉŁť.ňAřđČŞţ­ßŻl믿ţýźţÇ^ţáwżüň‡?˙ü÷?Ëoţĺĺ›?˙ż˙ű//˙ĺOúßórľ/őzůá~óW_`˝(ĘʇfůwÇţźÓ} îňV üđQäźăBQŽCţřÓß~ýç_ľýă?˙ňÇ?ýü»?˙ëËŔß˝üí?ýňç?ţü?_ÖŤý¤·ň‡ß˙„űú›—‘˙_ö/uĽüťÜć˙’›ýËoůÝż˙Í_]ţóŻ~Ô3pu{CÍŠZ UđЎB8°ä°Ôwv°»Dk$UB"ŕ.gŠ}cÓáE"aPSaß ŇŽ~&ˇ"HŃ{yŹ «1‰ĎĎzŽ—^WS 5ŚQ°»ÉŰl`=`ÉNt^íŁ€ę}2ţŁŐ±§Ů€¨yĘ=/„DI¸Ľd"‚i_¬ť)|ŇŐŔdR@J)˘˘V}ťB›ň˙®ë h4@¤A‰0ăr˘ăňbĚF.ţD‰s‰®Š‚j*áWS®i°ş5@Â6•8Ő™Mgů­čóŠżizăh¶ŚŽŽł•¸Ô#˝,ë«=G>BÄ®’»°í{ŕNý$xdĐ=ŕm»‘V ŃC4Ł Ěáâz0Ô!>Î.&'f‚\¦ÖUVŔ*L7lY^lbŻ1S“7ő˛ş©x"čB#^‰ÂËĂ”o¦¬ŻňEĺÁ‹Ďu8SÉkG˛)8 ˘”™WĂşuňÖ5 Iu­)˝mdA88ŔMXŔŁP#`$†‚4¤÷XąťKTśöĄ Ŕ–§o` ŚĄŠŠŮŐäî‘s¶+˘ä\áß^y lž¸•Y,ß”#Ćn É0¨rÍŮŻĽ °Ą&ű˛qq4Řę·ć ś,Pb ý­:Ň.„mçĺuśUąžEŕťĂޱ@ËRŔ?/~ä;Ěpl™ží›ńuÇő=ż˝p_m~#×ďb&ŃüÖ> H)ǡ{ćßößÖßöß"fŃź”üÉ'y·źDŰ>Őöé›oúwßȧ~#’ß|RÉš’ă;ąŢwú·M˙ö;˙óź~~Ô˙ľúiýö«źě˙¨˙’šë(ł(®Ä/‡Ž đĽÉ;k˘4pŽEŢň z&ÉĐĆ ţŐ‰łXObHŠ” ‰($¦Ć?’4éjŃ劂„–ŻĽ™!†u–Ú_~řÚn¤ĐĽVohé_~Ł'ůŐo‰lŠĽî¶Tpá`Ťgí+/9`?€X‹9bĂă(źÁ8€żAö©_QE´ÄĆUlmAť.‘Ţ‹ľWTܧx[ěuŐ“˝Ëę͉lćV9Äb7ÜK‹ĺÔDÁl·§Š ČX9iůëPT ĹŠ´µVĐO‹[7eţ'{Á’áík9 _ź®o ˘­Şz»<Ł/;l6ʱőßľ=l—¶ÖW?ýWüÂŃÎ˙Ń_ńˡĂökżů{ü˛ţ{ęřţFގL©Ŕű#ŃĚ:=0ΠYç~ż:ŘŢsĐĆ÷:„@ËĄ“Ťq_:vőEi-čĐU=u‡†`Őü+ćďäĎéĽ_=/p¶ŠĎůËËyĽü§—˙öߏ—ßK ôĂ?"ćÔ +UöŞĺ\âN†u1ÍihÄ&z,ďAÖÔPó†˛G) 9łD¸VŁ"łEçŁÖF.˘V©›‡Ě4ÓŘÚ¸éfSgŽÂCS@DŇž`3łka¸Đ›J!ä#„8ŕ«ft Ľó' O˝´ňŔ™,Ť"’ËDÝkÝŁć‚&¤®Xş]ŚH^}mXEPYşŚĺs=C”Fr&şÁ‰ÔËšqĄFJŻU6¸ű“ř´f4ëË• ®[%¸qŐ°,ŇňćâRâB˛ý×t~WydĆěŘĐ‚%ěÉ• †eJ°âB̡Ň`&Ď`6Z˛†Ä“q]‹'±Ý@¨Ür—$ŻÄ­ŃDŃ~gމô$lĄţąK$©D˘hĂ'˘ŐDKQˇšMZ=LŤ¦?74ą÷cf‡o‰”dĘc>grĆ«TŽ®Ű ¦˝G|ˇą3’©D˝YeŹ‹ś÷Ś)5<·{_R˝eNĽŽÂŤüčúß»˛®ó@L fjhF  )2űjw÷Ŕj± Đ®xÓ*•dJđň°4tHÂOýAż5ěŔř‚3_DžăŰ˝ ky„i"„‘#➏XY`ډű ç?•ą"á›2r2޶6i€ "mgÁűČxńüßzÂqÓo0ĽMÓ˝đŘső+ćŐű:^÷OHŢĘOîÄŕꊗ%!Äćm‰4®­C¤I5‘¨ŚůĄ2ýq­@t×SŹ@ +ĆŹ•=6ovĐl†ý<ř;ÍđâÖ÷-$íŠ-¤$,Oż%"ď?K± CŢňŞrt~5@sÂRłĐň„X ɰĄÇ/děT€łfFo§B‚ŻÍťĘ“bęĎ’cŁq­Ń¨ĐŹă51–zË=D‚ŁÎ2°Ů'•ąőV«^ž˝ĂŠgOŞŢ˛ßęĘ›ShÂJErŦbęŮíLľľŁýUŘAÂŢS+á4¦Gqâ +VÎ5©íę-ń3¶ľbD3/Cü[K*+ÍßÇóťsR—ĎŰ뎝Á¶DÚśóŁEČ—KäŢÁvFÍ0۵rĺG[şTvÔk!Ă ŮLb9Ř>!ײk^‡7T*6CąĹćfdŐnăÓĚÔśMS‘r^Ź­<Ů`PZ F1{ĺ°˝M”tZ˛ą©™MĆŤ2v‚µK{-&ÎěúŠĺ­‡3ł/!Ođř¶µB3­Ë˝$wDúľ”¶z­´,p'Íš3fŚ #—›xçżŐńꉙ.5b—áŇşŰLż¦H/Ělµz¬Wě ©Ť¤ ş”·´Ě‹ÇLşHwRđ‰˝ćÉ/đcď!éâ“XÜ&Q &éç°EWŽ +h‚<Î\Ą4  &ÂDynÍŰAˇ°'´%Ŕ5Ç‚”/ŠŮ›ĽđTs"Öň/ˇşÎU\–Đ;ŰwťyĄYiĽß˝`ŠůĘ‹Ŕíˇ—5‡|MdĂ›‡őĽ‚Çë$ďÖ2Çv®›_kňxs‰›$¨n˘ď«^ć1§üók‘Żzí «7ŐĄe@ Č$…쓾:Ú.˘N#â„Ęŕňć›JŤ˝wi‰wŽ.7Ě©FÍ2Ö5e’SőŔĐZń%çŘçv6Ńü `Š«K+%–çf¶ý° g¬×Gn?Cw;oj/‰ěŞŢš2u‹`!Koçžxę[JK¨-Lbâá¬ůíÝŠÜ;¤«+žš×oŰN>Td< ]R„jŢeĵÝp;cĂz,ýW‹śśę$ä}89̤š™m˝™ ±žAÁ8íŔşT†aŽ-o?ßt0őFS„pč26w€ËL]Ç{Z?>cÚ¬Úu$¶ë1_Ż›şŚâ˘e¨>ÄĘ®Ó^CĆŻ•Ü_§}D™F޶ľö(<ܨ«Yij™Ţ.R_9RP09[ě°g˘‹x‰Ż‹^îňY"ýžť39ÂwlEĹ•’jZk…ÉĺźR7GkŢ%Č%«¬ćě*ó`Ç…J92E„ă<ťoĹLN}u“dřôˇ'A0ÖEŁ{ťqĄ#žd’#Ďś”†łC»Ms˘é†ńQ@D´&™|ňB˘t[uŞ#ě‘Bo$ľQĹ’CiÓŁ ‰"ŕÔÖşĹe—)Ě$cR´ń˝ßL@żčÓ)?˛Wy§ĘB`ßٵUá`xZ"żv87ĽµŞ­×ŻĹÎoĐfÚŰ´§.0rş50`•+gˇl eźłĂ¤h’Řçńĺv3 [":ŕ…ŻŞs*oܦ˛FúXŢř-çÎÉ]–@EŁÚ‘wEd4z[fb+8äbAŃ€luf–šëZuóÂC˘ÁiáaC®ZKŽi´6ćňv ’ĐB°·…äô9Y,Q‘»Äţb8ÄóÎHi]Tr¸®€WŚnˇ.«ęćűŔŘ›¨acČ!Öjuľ“¬B^ë¦ÍqÄ«:˝+Ç6ăîUÇe„sY·~aÄđ^.%‘ăSŞg“ęÇźĂF čŇôCé+«ýĚr +ćŰŁ{¨‘f0q\N– `ÎŘ—„PâN¸~_Éw‘}eP57™Ě×ÍĚ­žjî‹EÄHôŕv8.w‰ËbŃPśąŃ‹¦´Ő:ŚgĽçmwZŮ®›Ňć÷9€‡VĘ ˝“R*fť'ŃP±Ş'đŞVß’MŢtÖ÷νË7B&JŠÇŐŘă5k™|pĺŇ>cÉšĽŮŘŰ2ŔŢÄŮ>®şúwžbn†÷g†ÔýâHÜÍ +ĄâJĚ⪟a($ÓJx¦PKáDµŇ‡I«śŰPČVÚĂÎÜ-ĚŠĆ=ý:hRµš0ˇ±ň ¦ÓS¤ńś51¬5ţş¨ ŔňY8[JťüsfČcµŘĘxP©Nťçľ—łŠ[Äx: VŞžh‰lÔz»Ç ˇPąťď-!AwŽďőó„YŃ+Żęüčúż1hR"Žš#S veĺ¶~n¨Y ™„p|qúđ/LM— +¨/Ř%6ę»UŰ ľš‚%ĺäł™5YŁ}fď)GÚäE!t+)‘ŃçÉ-®ě9m‘Ń˝G„Xť|{wüŁ^ĚŻ¨6<ÖÁ`‚Ř"~'Ȭé‡.c[@P«ťnČŤç&ŚÍ›Á©ŃśÍŐşHľĚ ˙QaäŢŁ©P8Řá0§öAĄçŇĐéuo¦ 8Y#Ŕőäć ~+÷]"ŰB"D’"lť*d5Bu=xoPB˛príâÍbĹ‚8÷bđÁTŃű)- +żšúŚŘSU8^ďş•ńÄ3Žž¬#`Ŕ#í”J'ßƱ:bÜ8«§Č±ŽŞ IŚËĄô QäłHř™ůR8c;uďL/—j`őuu‘ňľXÜ1FA3Ör§oâUáÖąčďŁú‹ÁŻšäB"…9ĐÇ·Šăí,:zŔ GŇóBČçtl su^řŢĄhÁuIťgr<Úë +âÔőA~ÄjډÜĚŁ +‰ä7,N)—UŞn©Í‰ĐĆ#T§ŮL¤QoIEš„ňqĽâ¶žÄý]•ŤqŐťúÔúĹyIRçB{v‘FF€ˇßČłSݞ×zqŐĹÁ™\Ś8WâäfˇhN¬)a!Fcťb/mőÉÍ1°áť-¶ Í-DÓuŐ-Âw×đ \ăÖ"=·öăZ˘uÝŞ8&'Âó`ťiVˇŰ‡,‚Onu57ÔĚÍb Uö´ă¦$oşŃ#SźÉ«[ćeĘ‘X•đĽw¬A“żë‰Ü»"Ń#@üâ®=ĹňÝ˝ĚGáÂ{)5—^pč$‰ýšĎaŽ-v)áŢq,D颚˛W‡1]B6C©g.őĄ-ŹŢÎJÖ$V3(5{‘Č}iĹ«^ݱĐKj+g66ĘôS¨M:ÉŁëŽÂąN2v+$˛­ŕţ’Ü.ź|˙` ĹĚÖČ’jĚža.^ňů@5bZčnŽŰ­ +Ę•ČY¨şgv´ôF$ě•0™Ôň¸&Â5Çz_Ú$!ë üÂŚ +i°C#tÝP‡@µ’’¦ŰůĄ “Ü8#ýź9ť¬9Hŕ3ËęV/J’Úz©Íôżu +ĎR˙ťřĚ´IŕMĽ«^ë߼Z>\äĘ­Rh­ă4Ň»ňk¦!KqŹk«wŐWŇ0s„ť‰­]­j€8Ď”~3wËĚw¤?2UłSLP*z)‚ŚK1ýęúR´~f®Pt*Čőůц폮śŚşˇŻKśěC9%â9‚Ű]OŹ7rŠ‚0ďWÍŕm‰ÍŘě«é€Ć4)Şś={^uµ8›Mn¸ŽU‘,2‘y ¬e 4%HľŕT )#"ŐI©rdW–´–-`^ܸ¦îÜMë^o"»Fé>"D‰m,qđČů]˙‰ŐO:‰Ąúń¶-4č—»iT[™ĺl<Ť  T8^Ź·ÉÎĐĄkN;Ue‰śÔçZ"S¶DŽN,d*hîȱÓF%˘ÖG€‹9!t¬<iL$ם«E/3kTv•ůJ€°0#·nu#«gÖ˘v»lŘŻĘóMÉ”Ń&j\ŞőšřşĂÝ>¨ŕĂ#ŘÄÄ€|«\Ě]ę7Ĺ ës'#ž,jčŹÔ#8©Íóďu{űbŁY1—µ›ÁC ¶÷‰CšsF®{’¨črh ÔOË>gÜIޢˇ…dC1of"äŃ0ŃR˝¶q畳0ě—ČŬDŘ·‘ÖŰE.ŇF’ĽUŚÇ…3źy­@ť¶;ęXnsăđ}|÷kŰź®íÔ#XiümĆ)Dęh R¸ŢyÖq1Í':ľaÇ)ová.8@ą˘ŃSý 23D°Kv[ë[Ü˙4TN>îú(•ę±1)ŃźBÄ&(S5ečSą˛”ť—š‰ş^U‰(j–Äń<íŃ€q‚Ż&ż^.X§ŻNÚĺH›Í¤:N^ľWűHű&Şx’loSĽ:&¨ďN­Ą†8y†×|™ărÄuä0´ěEUď8c(-“ěDEĺ…'Ś3¤—Řôu—ň;Ďčfuűd +u.§?†ĺ ĺp{°’owîřŔB¶k݉¨§/k±†… wezzńQČđN>…5Ţ]GP…¬•Ú‡–4[*%áĹMmL˝–s*¦lNOëŔ[+*hä5x*RňĘl07¶†ĺ5'BľŠ% ™—ś‚,ç=EŇCĹ÷.LąÔhc1ŔíúPq }äż[©ťs±Ž&~Żę#Ď5Űf´ čc2uzu¬l%?Śň{{+Y9­ĹPă™z@e‰‚Ş*$RR|şĘÖŢV},4P”ĺEyZ7ĎP¶ Ĺ®I ď-Ź"şüˇŘÉÉŽbýLDMR˙VB3TsďmČUµ?»ßZ™I#b:{™tňH> ®ÍÖ$ĐÚM9źÔ]u2půSdž3ŕD “őz.Gáé\ ÓĄRáźâä€1ČŞńgĚ­FŮôpřpI 6 +ä÷Ů<„©‘&ú<寛 :ÚěŔ‹–ç+×O™ĺa×4‚$PH‰ ‹đĚ|Ýc&vť˙Ńősöyf©R^F=’Ň=˝NEÜëďÔ˘Ó6‹ĚüŞNžÖr{Ă9śOü„árĐ şł/0{G-±´¤.Ň Dń15VqĽÓßJfa_7×?q0FyŠ…ŠđŃ`V<u¸Ň{!¨wžěçĘűHČtĽ?*ń`ĺYoĎ^˘ĹÁcű +ưg˛ŤĘp*Óä>¤*qyËđ"˘žrű7§ůÇ%r=ÇA MąG®.Ĺp°şż^ĎTI˝é4Q*‚@ÜBJź€|H™Ä:©Ć\Ĺ«Są{ş Pú$2QŔ„c¤˛aô%Ç!łrŘu°TCÄ!đ 덄M…3ëu;dołĂ-‡«Ńă‡đÔ¸”Ľă;í˝î†Ůłb,O=¤gL¦U9¨¦UÝq-¸‹ś­ZIl>dxŮ Fh“ť@ óߊĽďmB RÁV˝>h›¨ÎČ÷‹źŚŮe"ëlb˘id)Ä®€Ϥ—T©ÜşđĚ ßąQCG.±Ř+ťËťýâ]Ćf´ÝQÎĂĄíÄřŠYť>ó¦ďmź1%u®;Ér» Ć©h–"Ą&řahA=˛š«R˘<L®{TeĂ.5ą+&JFńú­+Ń>…v+^ÁĚŃ©Y"»;@`eOł5ňóhĘ źć\5ŤĹ«X_“KŔ¬Ź›ˇÚPŽ{sɨ«{•ĚŞfrÄ›ĎŚŞ°*PfžaĽG.Ię8c¬şČľa6ą®Çu mŘxŐ)Q Ĺ»ÉEše´Dáz˘±«ĹBkĎď@ÁŃđÇZľ9vŰÝ;ĎŻdîȰţĂá˝Ü©˝ř¨é€ä–ÉHđ9 CÉLUĎÝݩ֬Ô#Ź«kĺŔ”é,Ť¨ężŤŚP^Ťś®O>ôéÄŕĹ*ÂL¦¸îšL™$8ş8´RuTwTjέC|(r`ŻŰˇ±Ú% ĆSĎ ˇ%•x—Ő+Ť—žD¤–ą+$Đ«®¨€kĘóăN‘¬my.šđbi‹Mc¬’´öĂĐPÚ@ ±ůMI. yńć°0©ţVM<#:“Čž ÔQ˘ŚřÓŘ $Ç#ÁA9ꜪOĆ]•v+'SBč5sUía¬‡rÍ›ýK_™m&«°ŚĐ¬ťş %=^N–•5Z)žőÎ} ¶K èF–Öm+úWĎąFĽ(ř°×@ˇŇÚ]ˇ†ş˝ĚÉĄ)Ť?[ ŹSuÔ¸Íyc'>áţ×ňž[>čăQgÔýľ'Z‹FŽÉŇĽŮ’óőćÇhĂ}}őqóűŹá3#)]QŞ„9Ńávçűź 5m"‡+ Bˇ «łQ>á2¨©™ďeX˘TQŘDZęÚŞ'{\KÎá‘vP‚LJAŐT‚r&Ű€Š şÖ[Žä=Ék%7®Ť+V0=6dÂZ-{Ť‹yů/‘ Ő;ÜÉ^ň׊&»ýľöžťĽß#ćÚí)¶$Ş_ĄŞÖĺ÷§ą-ÉFĺČ‚M&ď[Ë_92eQë}lkż Š- ¤ˇ?÷ä—HŁ=„u­ą­ ,në,ÚĹ Ýě‹Áܨ<Ŕö'aF8,¬N÷«Ĺߡ+1ąŤ®Ë#Äú×9ŻN©äŘ!‚!˘Ë>ąa‹“̨K„ˇŐW÷&ř®âٰ•%m«Öď¤c^"ĚLŤ$çLĚo—ą••ž$VqZř‚™¤í{$9g¶íäĹE×LhIHMČ3˙Ńc>.®µ±{kxŕĂöÂËka¬ ŤeĆŘBÖňH%BúŕF+ş¤żEĄ¨-ú}|{â#)MµË1"“Š”‘ íöRy8ůđĽ=C‡ÚÎűaŻFhŮ cÎ@7!ţ‘ŁśĂ™AGµJ5Ęňşyo 0ŃŞŻÚ7úD÷ńJŮ#3[l§·Tóm¦Mź`ŻŃe2KŔ›ÜúÚ™kN-ĘMţu`{îÇGLÓLn4ÍýŰ˙'ĐyE÷Q©ż¤}ĆgM°{F—1/umˇÜ]ćI&B.H›Ë˛š]÷ň€yČÜ2î˝Zލ±2o‡Štźl´~Ď˙ČL#ËĚ˝ť˘‡[Ż @ Ą#˘ÝóÓôaU^Fµ˙’⽫ ˙5fI,$ÇhţtźXp9.=B"ÓÝ‘Đó*ÂĚ3¦»4í®GXl@0ë„f&ŔĆ2(• ˲'bÝRą;ŕJ8h*pő'ú„Č4ęÉŞ›VóW[W4·Dč.Q6éýVŞ;…bîáb×ÇŰOxK ! Ć6¦QĂ‹÷ŤiwŐĚN…Y)ă5NQL±m<ú†ŔCN^`ęXĂĆÜ  AҨf±$Ţ„ÍhqćČšÖ <4Sń( ۢÜAó/¦Ľ:T3˘ 4÷ič}V@-‡ŰżĐŁžÁ¸&0ŘŘ`JâŚs›ŤS pmW°mˇUZµ{¶ÖëÜĆ75ĹźÔ`d’ůťf ĚŻHł&yşż9žŮ-ÓıŤ”YY¦Gks2ĄXÚę'zĚE[GvhNbqŐMo›;áćH’ď®Ň’qş mS.ąĐ`$ŠÚ˛T‹xö~tő>d/BśMŰ:Ţőuo´ŠAO\%Sqń]\=ąÉA«Ľ—miü$Ţ[÷ôgbď× âKP.RúÍűŐclX·gÄ)!ĆÁ =! 7Ż+ŕżÜ’űöŞKpťó¸”ńoŔźIbäa"Oű)ČF›´śň‘{ČÜęýŮĄĘ™[tKi÷r‰HČľĺHś-ĘnŠÉ•—†^It‘OúŘ×ZěţO‡ďŹ%źs#[^)"ަ×'žß&ŞD#]^ú‘ź;5D~qIČýŢ=ęS¦âŘĄÎWŻcFŐŠw<–Č>ëJH*ďCDIÎÎÄ›ĂCň űµ0V™ˇőšPęw!ř5 D­´:˘[ÄĎ{ĚO!Ć4bJP/¤ě47¶&ÍĘÎrv“9š“b„Q&\Ń(x±&ORîŵƑ]I ÷ÝAvlôfÄĄ_DN x;J^Áť`l˛Ł×2şę÷†ˇ ‰FËŞ®—“ +«¨÷~3f/®$ZBóf"¸Ĺď]ęÚ¶çÍ´N—úxn™B”_ŇŘŰšägŃŕŁr{ś ĐiŻuś}ďg'¨ąV""Nîň-‘ćHTŞ~¨uĐÖ}\KŽSŇB*ČB-68ě—@…Íö, ÉĎśí;zK¨ßĹaşŹL™Ó‰ZLT~ő}ŠfL"E(]Ç–VŽűI[§vg¶z‘­˙ÁT~˝^űVj)Ż“&7.˘WŻäŤînIŻĹf'„=î•Fú°°ž˝n\}HĎDžÖ;$Žźk“Śňě‹ôš{¨9gŻ^–|IĚ}˝ťŁÓꔫm]ú`RÄ5Q.-ś$6Á/ ޡ˝ŃçęÁµň +g†6d‚v,…,# °LgŻ˝& źâvo‚bűĘÚ +P|b:”D•‘ŐßţwSÂV‘’JpńŃT6aU‹ć•Ý…¸ŇEee•bRŰ%rÓ^ĺŇŘ;jţ¦J +fُ›ůđ»XąO*Qýć•FT—ČńAśMÔ‹ęÝ rŢ[ž^ŕ?¨ą§áuÂPćűVŤ”ďäRNf'4˛·ÄÚ˛ ¤ťëR6Ą,v >@ý şą#łÔrn…inl~ŰPŢnŰX “I¶»Ô”0 ź‘Q×Áö.úŕń{ –·u3ňŞłú)żJ9@ yT÷ę+WŐ1RĂKöă{¤¶(?wö +ó+ÝD©ťk†á±‡w>6jFË4Ë^T?Â8i4ĆĐäbĎF“Šó Ö+,ą9Ä&9q‡šK`Č~ň4vqsÓ`éCĚóŮíăń1WĎ«N +ť,oŹv$Ŕ*ôÂxŘźĂđžDě¦Î-nŐ€Šéâ‡ć¸—ȶŮ;)WŻrÉëpŞĹ1|‰˛˛ÂD˘ť¬Ę(ť‹)湼 +eŮ•<ż’Ég}ÍúÎçäű +;mĺ#+"¦b{ÖÇ˝©j.EĎ EGkPéNż¦JWšXőâL}jĆxŚMąŚ*u˘ěR +Ŕ”آXŃö÷9_ú˛”(áÁżđß8I7ŻPúŞ´Šą$Ä)Ó°3sn"—b”đI—~˙¸]ęzťŕť‰¶Ě…) nB„âŐkxÖPM‚׸4‹čßí ¤$ ą;2XM·»D‘JsĽv:ăp3ó^ă>{Ű}ÉĚtÔ™·č»ßžTá~.š±‰šŐďÝüCĚąĎdr\Ý()‰×)_8†e5X,9qaďłlxcýŮ˝ĐC“>¶cH}CűcçđŔĹ™ÓŮ›’Ńźíý7=ţÔ~{$cˇg߉Ť˛.…Ť/…{b˝űŠ—ë´|}ăD^"âFć¶Zž8IÝfĺ౹Ôŕnljźň?Đö`9o7 «ŚNü6ʉő‘›Ć>Çkţ¤34:ţ¤’Śě,ămRÁĽŔq%K…Ž4îŘȇ2ËôFĐ řŰvp~řî1FţTß^¨ŐŹ–›×‚ę— ďĺPŔ nÉĚ®S{-đg—’äçž#Ł×IÔ¦˘wv«Vó…ôÄ´4$–ɨĚË«cTôo)Ob¨Z66b"ËU°ĘŤŠTĂ -ě[ťE“-ątń8"3öćëiÇMĽ0P´˙2‘Ë1XŇ´ ?qmß>f2ÂU3šËŇĆ‹1NÔ źĚQŃ ‡$=ěŤŮ™íůČťdżĹZBÉŐqĂÁ5( ä6> 8ŔŰm>G„äb–BmB´3ČĘ,ÂĆÁ3ÂĘ„GQÚ€uxSnFdU ąfđ,GV·â/Ľé7çĹÚčN¨Ł4iX–b2b»iř>Ö,—Ěz‡IL‚Ő!ĘčCđ·şëĹkˇŤ­ŰÓ9c;Ţ;¤ÖŹ#°—Ök »ť + FΓBŻóNën"ůŞ—ŕ6¬nlQ©<ýăl[¬r?hým­Dő=Ś€ý  'ĆČůuńLÓýhCź¦^†rÔxDj%f3Ľ)yßQ +ý,Z.ŢçâµYUô“Ĺ4Ť:xýF}÷¶ęŹ4jć6Pرz%ń}±Ý *Ż\,ÚV`9úI%)€BŚ$Ó˝ÍL‚ÓZ4ăB…Q6-"Ľ± łN;Ů÷GNÂs¨źôg—’SzŠ­–ťm:, đMÉ#N 0ĺ-Ĺ.±˙źA:áI@·*ąb„z w&«<×x"î'xsÝ0ŞŘǵäę[Ł˙D8×öV+ "ʨZ‚Ž}fú튧úŇľkIqŰĎś6(viµUÎ s•@Ä«ńp|şÄ®ł +uăElN]óé­k›˝W;©í ¶n˘ D¶ßůN:ä“Űç‘˙QB ›\nšĘSŽSčŰČ…”ĄvÔVHÉ‘ 9A¬şdn`Âz¨D:CS•l©NG–X´KU†ĚÝÔ¸‰,"\‹ý͵t$…)‚Ś+q:ľ¤®Śľ©N®ŻěĄßL§E\řę]ÁŰDĆ`ôK‰xĎ~đÇz<’'A] ŘC~ŔIČáLTN{SăT©-Ż3!÷ŞĄ˝Ńµłe1´÷fő›Áé@NłQ*›ÂŚşV!m€.föŃ•)•f5ˇRňţُöĽ6°!UĚ09+<ŤŚÔL÷ ÓI»S9´ĺĆÄÉvÜČÍFĽa†ëä<ÔČ­„ázş€[˛ŕyS Ţđ¤+Ęĺ„Ôny›«Ĺr?ŕďąG˘–ýtĂirŰvV Ť\ÉUé„# ¤sxޞôč„u·jD7Ŕ*#1„ źŃŹc‡÷˛«Şő& śĚń9¤¶YP¬đRLcj»-ă˘1*a.Íőß”@ÍÉ€ÉÔ^Â46U•\sűťső˘ą`+çúe +¦q‰1”2IřÖ§śÄ »$.ćŇY¬“ÄDͱ•uŁÜVŇLçĘN%?ĄhőÝsë?ÉWô%MŻVµýf7ź˝.CA`}lÔÔX¤ÄĹZcC3{ž+JČ]+}o}Tq™ÖWaʞY=Î5©JÎ iZµÖ*nﯚ¤Y$}ŇÖ“eĘU[ląŁę #úU8Č>@ŠMxµâzîú¨a˘áÄŐč7iŐŠŹ2 °v‚]yŹ‹8’aN}ő®XTNCłŤŹĽ!ČĐŻĺ=Sxd1}~ŰD)JŐ–4SńkĽf)ÚZ]˘¬ž)Dɨ—:qUh Ys‚ +ńIĺ'ëŮ + ďm,ë“_ c×]i0:Y"K÷ÄJ—· \žńuđŚÎEH6˝µř51č-·‚pËdÜCirv^“©eoÔżQ|3挄¤Đ3·Ň”ií±Ç©!ćŐ7P˝ Ű‚€mhě˧KDmZŰC5®ćŁLËvň*˝†c7±.Á„J Ô†3°¨>p ™S˝˙ŚŁ@{ű>Ç)›ÉU¤ďÓqCŽíť„'+`X`„ĺHXAÎ+9Äüi"ovš!‰Ó9~±ú»öŹq&Á®ŠČUr}ë~˛FéjyÖB"í?eŞĂ€ť +&iű<™ěaş“LňB€겶ÝZŔŻŠ¸sśfČĘŘ:ĘsC±Jřجš)LŤĂ4Eć a-QyEíČMľpůńŤĚŹçL4HŚžWE2"ĺ5 ‡ GníŚö‚]«ěĶŠ[Î39t!˛±A$€«‰ô´Ýq˘•¤Ç—— ˇÖWÔăžkÍŽťJÜÔŰ+ŔĘ&⠔٧%.S8®ň# !ľw)&ş4Íl-flí*ĺ¦Ô +ź’Ő +ďtÓ ÷§ĽVŔf­ZČŮMě2+W&QIůJI.Búć“x Ö>cŮ–(Šc†śŠ´—yl5a¤čŘ<ĽšÄg纤Ž~Ó!,Ř^v}ŤjÝtÔ°ű/¤ %S]ŰúŚĆ¤ŁŚ„=0ŽÁá1: ńj†űÍŢ‘–EJ­A/ĄĄ_Úc["O 3I•Ľ%P_Ü$mC+’Q>ŠKM*¸¬i‚:Ešy3˶Nőä_˝­iŤĚ“7|=»M$¶5\NëĹć¶A%%a“/9Őżőű•kýő׿˙Ó˙řĂË?üî—_ţđçź˙ţgůÍżĽ|óç˙÷˙ĺĺżüéO˙űo^ΗăĄ^/?üĂoţę+É +°É)´ľ;ö˙śţ›~ČŮ‚K­ą~[´$˙u„ OM2ůăOűőźůöŹ˙üË˙ôóďţüŻ/˙÷ň·˙ôËź˙řó˙|Y7ö“ŢĘ~˙îëo^ţDţ#~ŮżÔńňwr›˙Knö/ż9äw?üţ7uůĎżúéß\kăÄ ňč”/ÜŽ ‘¸č +B%‡ĐňáŢ—ó…CžO^i6şö!Ż{Ą¨+îČ .+vĆr%·ÇrY“đňĎëbf‹WŁ&źw{ŐŤŃŞkĚ-˙rRŘö1`˙J.A‚×íNě(‹±+ľĄŤą ĘwŐ«ýgüň×@˛řZťŻŹO×·Ř.?–#$ůš×)í<Âoí_Hţ É ţí™{·M~Ň«?)ů“Oň·ź–|Íżß]m|§ŰôoOyĂ?˙éçGŢ˙ŐOë·_ýdřGý?Ű cŽ.Ť<äE–CbM2ąküŤĽ€&Iŕ&naĽŕ_ťĚA0WzyQš†=˙ ŻŞâÎ\ě¶śk^˙¸¨CnöŔ˘Ľ˝ľ¶[¸1ĘŮ€'6'MßáÜŽwů»{@÷±Ö!žk˘˘Ű~°$^Â49ŕĹŚ•ő"1Ň{Á8.íş~I(*Q°” ÂŮľ¨°äĚVXyŐĢŕÁ±şŻ8XăT®óä@Ł]™9Ϋ`˛7ű( «äXŁl ֨ߨ!ăł±PrÚýČďOÔ/ű%7taÂO\0Ž$EË«U%–ČŞ"rM‘««\8#úQ°Cqrçř(ŚłtŔJË_ůöjĐrŕ^EŔ˝" +ä-®6OņE¸;Dqq5Ddbć;V đQł">–(CŢŽŢř%&Iiŕ|–'š(ÄŠ{ÄńĐÔ±W_€P]g^L‡ÖѬSQôťŻÇâˇ] ţ¶.SŇđŞ`"Î$cďÝDĐóU\ąĺ‚hëľ´$!N"݆śáŕ€¸$ą«sęř&ÖyŕËíŁnh?@=‡|Č”±™6ÉĂ$$~FďĄ/Jv‡Á2ń ˘Ě‹ ”¦*ŠĆ7$őoŕ ş<×CÂj$ęf p¸/ +F‰}: ¶ĺ'ř>® +8Ěă”·dŃšjçä—†ťß‰XľËC:P%ť@ŔŰđ˛ôŁ NwG†J b‚íkä*‚îNh˛Ä§Š5şlöÎóx3°!6´ŕíb(qŁvt­Ó_˝…+gfÚGu Úwm” +eR±ň|€QnoRl_\íŇš‹â^OŃ%˝9ôUăčŤ_Mab%mw=GąYŽ’JśN3˝XŃ™o‰śćňúşŘ?™-‡@ý$vĎw4#aŤŘóńőůť3ä…ź&pÂżí˘#ň’ż“˙É˙Ďű«"Ćţk1öźÄ€#y“ü;ľĚđ÷ßžßöß¶ońďzyküŹo?‰“ű$Źč›ß¶Oß|ÝĺWýćŰ«}ó͇N᫟ţ+~áĺ˙čŻř凿Łřµßü=~Y˙=őż?ü#.ú/ %­hF-ËŹÜł`šPĚ÷‹ňSŐ¦{ŔÝË`Ƶ9X8|4 +Ĺä2*ţfsU=ơ“Ć"˙ +g÷wňg‰OÚW$gĘ®#Näĺ<^ţÓËűďÇËď%růá5RśĽ›ľ|ĘEhÝź]¨B#„dyą÷"…9—ÂD×*řJÔO~­™›đ"ur™¬ÚÝ#É5 "q·—–9Ţň@Ö8Úľ‰)Îz!Őg B4ű §Đ]ąČ)ÁťíCXÔ>ö—hG*"/íŢFČ`Ďä„W©Ű:Db}§¬kŐX2^e¶©ި~źŻ˝?  a”E—©ę +J˘Č\"â÷ D»Z‘Ś¬ďŤ±Ź+'®€~Bpáv)”y’˛R^áń+EŢękö9bIx"Wđ~,§v%:O\H qÉdAÓôěÉ'‘ÉD8ŽÚ÷I2ď„Ó)ŕćĚQFËťŔA1ű Xëň¤b‡Čł†ëŃľšH1ľßun”ďđ ´MŞÔ7Üô=©Ř‡2Ń>Š0ďGűĄ*îjŚç3$XH]q Ř«pŮŞ"â%&ĎHěĨîł7&@ř`lhq ĽoŢáŃĹɸ•höŰÉ˙Ńrsd!ŚĺuÁ%ĹS›ÎEů¬ŇŘĚT6ršxŻ÷›Y÷ąč˝3o:âçĄjű +Ď©~ń‰ř1yoUoŰbŔ’ö3ĚŤ­Vą¤Ň^î¬nm¶™Ö +PY™T›µal€-ţJ —Ú[ä„"› Ą„©“ŕ1 « +“e$7´ď9‡¨}ô?»ÔśJ°ŢgrŞ”%"´˝ˇ'}Ňf3DĽӰĹÁë×:1 ó.Ť÷˘ö=±2Č˝s<łŤTďč>îśŇ!ó8î6ŇĎ*+rtŚđ§‘3‡q?}ŰĄĎrB°Ď™¬` Ďm[P_ÖMÜęő5iÜŁę/B “9oogóŤ€<쀠Ů9IÄZűë1-Ť6ý^×NI©Ç}’+Ř5=‹•ô|$…Šđ>ľißVw˙ˇ@‡žo¸E(;ľň订]ĚŁ„çCŤ(3)ÝC™%RëÝvę'Ż#z»ËéK~rŹk]˝f‡×») † JŹŤ„CNž@6y[»VPSă~f¬ŻGôl  ."‘\*(ýž‰p4sjŬŁĘGPąŠÜDCůe‘Ă;#EóązŰŞÇJż»ÄşŻŇ?kôr’—Ć–§@Ľâ¸ÄŚ—+í†,‹:É5®Z»(Ŕ:%ĄÉŇŘFĽ ąľWęîżkg4ĆŞh$ő¬›ńý e`ô&äŰ×ɶ жóŢ`¨Ov.8Ý3#_;a'Ź(jôwřĐ­'V({ôÉč@r–¦hąćřRśoOVF`·rΆáŹk%łyj—0Ö¦¦ĽÁ„ąŇ,?'7k)ŁŠŻăLÄë°b3h ­1Ö¨Ű%]"Lh`ćéd D°g‰î:Űą05zÄÚdě{µ¨ÍKÍÉJs‘w}DćW<ę¨ŇIĘ×}ž¸ >řň%îÁyj};…ŁßŚ×Ú6 +6,’ú^S| éHÎN’]Ú,톞§ć•äË«Ďz3‰›ő'bĹuˇ9O»HFk_ĽŠ7CĹ‹˛Ľ·°óW|J­šŹŤ­óÄrńKpŚŽ APŮ&_?ĄÓ/\Ň‘Ć9đ‰•Ššóú¦KT-ěR'qiŰšy sŮy8_đEÜűÇóµ2‹˛î/Ő™¤DŤÚAˇ, ±˘B„Ń›U¤frI0© *Ϝǥvř8H• Vů>„6ਝh”oŘý[HhP̧%›‰$ÔF$ĺű˝łĄo˘Ł?áĘ0ÄHX`ÎŢSÝ= lăJĚÚ¤&đN­˛Źal,µµ'ńŘ:|;ŮŞw;B:dúA&¨şm˛Ř§5ç5DżÉÚ»ŚčŐ’Ă13˙‘łŇz7€˛?)djŻŇé׾®¬/‘DişDOî{Ź<äi:Ž?]y©DץË·¦íś.ú$glÚ›N|î¬Îlj{ ]bŻ]­oY/Č9ęż“ }m^8m\‡çďWĚáěŁq»×=î„#D኶oľ,Tx/•Â0Ĺf0>đ¬źCčÎĄ]ůé5iĆLQŻA’*J˘đ©šöśĎÂ÷8ËŽż­zçȰń|U/LKđYúëĂö®WČMQŁňŃŢ,išŐĄ˝jŤT†D-ÉǬ¦ű<|DĎk‚ş›đĘš_ ;v±Z¸Ź8Ł 5öş4P¸xž …öűě{‚Xz‰…›Ąď¤ˇ‡ŰT©N´¶4„ĐRV}·ď‘ RYn€ŁŤÉPFť™ÇF`ÚˇĎ÷Á•PĽŞž“ĄĆáÁĺ¸Đ‘˝FĚiyÝÉs¸Ô•·K'~…}vTv#bśä*ă®{g!(gᎇ˛Đ5â¬şŻ©˛[Ä-1ÔU¶Ýz•:*ĺ6 ",˛ç“c8ĺebú˝ăZ ÷~˙čGŻD>¨ßľí7}3đŠÇ‹Ś;Śď˘^"×W1j_“„1Ĺ]ÜuE_’`^„¤‚să!Ą‡q\ú1ËÖNja´k±\!/ł'$ ČtŢdcŰŘFÜ)ôµÄTšÖ"Ł^±çĹ$ĐęE+-‚„0ŐW%)PŹ—Č1˘ĹĆ€‘ąëĆf$ –o¶°] J’ Zt°A9bUťŘÚ3Ě(Al +–Gt*–8˛pvf‚=ě2…úŕIG=îÂŘ^PĹ^¦gĽU)ËýÎĹřÍC/ÚŰöłŹ/ËŹ3[ĚŠśÄđĚ˙U3ňöR»Uô„5DŁ]Q'`Î/kćÄżp +/Rkśĺ7mč4÷€F¤ÄűÓč Ę«ĽnD@â';ďGĂŐť¬4ĚĹn>MňţÂ0đb}®™N3ʬyë^ňˇo–ąu¬Đ]Ń{¸-Ż:ökÚ +4çŃs!MlÄ$őęL\˙ÓnčWnĆčĆSyTI0‘vŠÜQźj'?šxä~'Í;úŃâcśËe‰Č™Ż©á»Ë]\Şlś'(ߑԑ›ę”8TÄ=ľDDo&~íAöU\K¤:ź*|mŮô]wH]Ě32”€†ˇőŽî~­»×äŹ6‘;Ü'Z˘˛›ßţbh`ÎߎťŇü)Vâ+Pck˝x§;®˘+– ťĚwd\N ĆDCaÜF”Ŕ}1G†ZÇ]O1čt=÷ĽüF0µŁ4A›bÄŁZÖÝł[’i 1𔄏±¶lú-ÉOĆvד?\MÍL,'}‰ýŢmhżqů㉅‚ptCđ@íýž ŕ»,^ 楅şňf• Ö“NW4ű-a=_ö=aŠxĚÇJśť†ţ^Óž1׆+‹uć{¶Îłîs÷ÉőďŹĂ…wň¨‰›I| c_˙R±_·t6Š4q6ăŃšD2ŠÖĐף¸ĎZrꉖ"ć‹úV î€jġh $›kkaR3Ë'Lg¬KýČ…Oáuиĺ ¬aí•ëş‚Zű‹`±d#Nî‘ Ź<c6„µD‚ŘCb±J Ţ\•@ UdÎ$rĎŞ[„©źĆ¶É†8lcŢ•!,§ĄIĐ#uVLŻ#c’gď“SZčŰaüQî%ľrŚ +·ăŁ Ü}ä¸ÁR%jÄg¬B8Kť|ż?SÍÓ+l®LGIťŞj[˛’ľ”)ÖÓ9+ěś±äóŔč%‘'Đ_!\YSŰGş0ä.‚"ő˙ŞÄ§ ďtĹ&˘ŰZ¬]>nÇsܵU˝c.†¸’¸÷ M™Óőá] "LDy‘sq%kÎ׬†"Ř`ůPČă&ĹaćeČwęĺ ZţG˙ Řj[fbŘIîŢ pJĎ +éÄ7C6•D8⤎÷Zź»RE‹3GňcéMKzs´Śú~0ł#ćęÇýŔ}°m Öa¸ž‘˝Čű$ +Vl—_OŁ#ŹÂG?V9 }' ܨĂ+2K*ÖĂlod Řu?s€ä D&S<ëĎ!•ŕX›lť’ (rĘK7á“/$ÎccOBâTÔyŘY`hrLŢĺc/ýi¸jq §;¶±íËáO‘3’0ˇkÇď˘ezÄQŚ7+ţ„mËUĹ +%^Z`!×<6×SÖÝL—i'‹:*"ǡ’ +|•Ř?‹ë—Čşqö‹ŮĚńkmËë8bůaNpŁQ†ČÜÜŘ.ĎůĽOX”›˘@(ÜGn†b«—“A öŰčZĚ˝QQ×Ç,~` ۵€‘s4*Ősqß>hG>’őĂ~đđ#^ćÍĽĽŠh@ĺg,W¸&?=ŔňĽÜ­dĽx-"çFzďŚIq­“ą—ÔH\˝ďCj&Ʊî“×¶á¶ ťĺ"$g:ô _"D÷˘*52I¤oOü°Şž] wS„S±˝;l¦öH¸Ç·ßĐB6©lř7(«OŰĄ¦`Í,ąqÁ\}03“*®„˘ąÍĄ¬ŢٰC+ZKj%ńŔÇĄäťĹĚeWáý čä™s{ ň€z…fĎ7rH9r>˝8ÉsT¦Qf»"™_"×o¬W&Č}$­ň–sôŇHt¬Ů$`Ú –Ü‘ežfÂÝn©ic$nV|äÉrňAJłľ8P“o"I'ş,ă6ěfYbgđ6„Şg:ë,—^Ľi3:r\ůAc±ZËa±ˇň8ŁÎő~Ś%±`jSáśŕ„ě˝P(Ď˙¤4ź†uŹäĘŠÔÔ ltůµ6Gśôc_<‘ß|;n06CňëÎGRIç ‹0ňČą?u« ékʰ&e‚:ç“v&ómuą-2‘˝h'QNĆdš´Ő=6ô#ÖkiŢvV¨ńôö{šB‰÷-L×ÍÔ0K¤‹9ďÜĚ€^śWڧ«”n©ćŢ’úşIŔ%Y ˛Ń´/hđÖWOřěA:&Â=Hě űkÖ F;,BÍś÷\"Ś)‰“(äÂÂÝ[/8?Ô06#»+âĂt%ö8‰L«>xÖźăY':Ű‚S:#ět+ĺižü¸]Ř‘O6 ¤1@ľ^–(ÄsĽRµ&^łŕ‘“Ň–tĘŚÍŠޤ–ă&rÎÜĂm l¦Ů˝c +@Ąµ9ěwđęéQŬ“ô+aáŕÄFÓ4<đţfÍăs;ň°}Ь±)VÝ™D´[UDBFfŤÖăĂ Žá¶h¦!©¦Ż#ÄM-Ç{wOęv‡Yőě âË‚ýbfß8@=§Ě~ÓÂąO:†ĹڤŮínmĽŕ»+ş6~UŔŢąâl:rjWKYnE Bx.}nlŮřl&pⸯşc$ ¶e…eŠ» h9"´5će&÷’ Óže›ÎÉĘ6gż ‰xu”G’öˇţ“ŁŃńH†1yěΫ x§§çľaš·&¸ô%ľ,Šx/ËZÔ± + ËŐ ”ňsHő’‰»H]Îsĺd7IĹRöĘ®Z¤)†#Š)VĚΰ™pjʱç2zF˘y7‘žü4ę_GOn‰´€Ł& +q;”2‘‘7`mkň),xDźŻ23Q©y+°BKŇžy(ć« o;ą n-•čč,ýô¤Aו¸çYÉ™©€«zćŘ©‡f9‰ŕvla¨7ŢwKš#Ŕ7ĺbćó„*ɵö@éŘ2Ř›€EB!}úŐ¬°Ö†O0„’ë-ôZ5`Ç0Öd~¦©đ¨Ý[¬.ő؇'ˇ‹G„ôKęÍ +tń¤É`ĽiÉ$ňcg†°[TšâV¬ž*€qń©Â I" +=›@“[Xžeżś…‡üŔüKy„šî?ĽŘuĺZ‡ő3ŰĽP(Ł6kÖ’V}jĐ2nŤ`înĂ´Ř˝rË žĂX•„açócXűÂđ¨ç+>@)B«Öři`żD]ť <*’Ě­f÷"ó`‚{ÍPć{S‘„TwO9cGzżÓĐű^©‚>öM†˛BÄkłŕŇ+ŰÍDş"çµx ’.$Ëa\«Ä‹ˇ§Wr#4ô,Ů#bŕOńôŃ!2ŞŹrŚ<Ô‹ă} ˛Š9=c{e”IC,""\#÷ńW•üéYçzĄ§†•Č<ýđ‰uÓXţöÝŠL?h¶ "ŠZI“ęf×ZU(Ů(‡Úńń‰}ÖJô˝5Ŕq|ĘAݍ•o@‡4 &7‘šµř.„_ë|śۆ­ě€˛đc6ZE˛˛M™Ő¦zĂž(ěůŠT˘±¶#”Sů&r¦÷+‡ ×OTĘ7ĐěUŇ<ăé%˛Ł`ڶ­­;~Sd©+)Ő—ď§żTç…8ˇAř%˛aÁC¤'`D^Š!Uę:78Ą5˘XV‘čÝ»ČŃhŰEEhµ;®uń÷şŁ™#ťß‡Tuđíjçç𱏸ť;ě›@ŕ;fqíč[NŮvjhÓ[›WFRî¤[3‘Ří^&ă´ÍHĎŮG“E64ĹÖĎEa˛ýß0g‰Qľrʱö¸>ô„çECłę&Zr[¬s,Ú™‹đZeđîu¤’Űd„šřËä)űwČĘČ řĂHč3¨ óĆ~čăYDX@ÖKĂĄz·b$j®ËˇAAŕŢ*2ç¶%?:wöµŠs§îƵ»Gť#UĐÍF&¸× ŢčX˘€X^¸ĺHcą›­kH‰:4–ĽĽCBËhÜp”Ýň6Ľ—Iaí>irˇŚ ńđŃn÷‡ŘuĄů*µÔ-ÂŚ‘¬´ůB f4u<ű‘ůXĄç|(j sß )Ŷ2‘qç.:4öÁu,4Ć&"‡čC9.^ZŤ¨ç–×ŮAĽZłźáuĺE쎹í PWů2eßk€µźlĘ +3Mą*Şă§.ÚJ™AÖ“Ň«ŔxÁXĹ8ť†Č{÷âĺ–NŮ9ÔŔWŢŁđÇËIzzKÖ;r7˝çš\ ¦”ąłěP%ŘAíâűjÜŠĐŤu‹¬ŮäČ'dHlPŮN$č)ű.§Ć57ĺSX= ţjŠŹ¨0ßt€y#Ô:ŻOÔŰ]^üĚ@ž‰}ő}gE™yvĺuw^hMÓpär‰ąi"qĄő˝/q.”Ú2ĄrXś–ÎľTޱÂuµ7FĆQ1ÝŐIQE'B$jFLSŇ<^dÔI–˝ýýS¦qZů0wÁÖM÷„‰ŢŘGZ¦E"tÄ3Íq„W8>7]iGŕŘ–ŐH¶"Ó# ڰŃ÷ć"P;cć2LŔ3&UâuřŐRâ–Z×*íˇ.Ř%›őÝOć|†Ý*«·DĆüő‘cČŚęýGý9…ě‹.÷ÄÄ|Dŕç#Á0‘óŐ]HÎ0rů>Łú ±Ôű:Ě…Iµ»hŘîŚ oťbtkýuOú 冴DŢqlź™ű¸wx=Úş]Ý`Îܱ!ŮLŹ;ńYŠŚ8«ľužtŢˇŻˇĚL 5ÜŠ]ňŮ3VúĚedyĘ“˙ôKsÉ”×S®v„ű}•Üţ&`¸É+h+Md/­ôB»Ńúó3 2Ě+ýź^'ńů–HtíÉóOëhŠxµ$z¶bSO:ź*”pđ¦Žĺ,ۆw– +ßcđ׿ER4pB@*Ő¨ÁˇÔçIt­?l÷!B»äAE¶Řö‘VĚżŚšŐţö¶‘¤ť‡Hď´Ăj"”…//đ4Ěʲ›ÜdęIj»Ő%őx{É3źŤ!¸˛ť<"–OŹçTßÄČ3úćÄş 'Ë[â?FEn›ÚĂódI8ŠjiäIŔW¬Řˇfç›úŢňý—Ô«…¬ćtŃ9ZsŐ’:WN!BKTĄ˝“{4°+ÂŚ0\$$rGÝ!é’&\Ôí +äřĺ¨É +,}»ŰÎđ•˝mx[°×sú üB&P<ęf¸žWL¦oĎ ÇÁ‰3RLľń5űńÓÁHZ9bDäqŰ·ţëýgL a1PU@lÖ–óJÇĺ *Ő)'KĹoHŚ\ąńŻ,ńłŻł«ĺ#~ΦMlÓ4p8<7­¨7pe<†P“/Ń0,w”gŮň$üꆑAb[µs5h "“Fýě\|U1> â-xÔ8Ă–Í8™ó}”ť "ô —ČÄĽ§wO–ę¸N€í©ş Ĺ}$äÄáâ˙ÜËÜKŕôP±XŤv8ÝÂßťë<şG«|>ÎŹ)Řńhřa‰Śq]>Ţ©"őÎńS»ÖąŹ€©aď}R1bĎP~ĽÍŮ`*}Ň@¬N‰`a´ěL‚«żiťŐFĺOňSlđ99T‘ăŢńÓ‡˛\Ő€‘lăW[†ITҰÉKE{ĐѢB·leŢ´;ŞÝÎ[0(I“ż´ĺÂeŠÂ†Ä ěŰÜ_=NbäşĚ0šĺĘť÷E¦iŚY¬Öš6,Ms&3ſ٨IUR+6ȧĆHQ(yw\4ŻmöěI¬âš3{Śy(ŢßV(ünÓdmÇHąĚ.¤gĄçľÜćăÔta\„ĎĄE ·&Đĺň?;8ŽÎ·ĺ@ý9=Źéµ†÷’¨“¶“—枌±ň9er¬D}PĚć´+ó+CrEŞĽlźüűlG¦Rvö,`C­{ýN瀨nŽm3‚áö;ć¤cę>…C¦‘RžAD̓֏ëŐ[Ę ö(SĚBÓ› ±ĺxŕDÂ_ěÍĐęˇŇľ©&ó!R¸¤Ü<ĂźC{yg”jo&Ľ”JŚßd6-­ oSřµ‹‡)bBÄ^c—‚CΖ p4Ҩ\Žű]Ku jÝłqgGëY{Í")ąXáRRđ“ÇËĺÎŕŰŇ@t›ŰÔ°8zP#˝ëł…ę×±Ő%kÖ<ţáíě%B= S̲ż„ +ŽÄÇHǰ\nlăUµDRöj9¨Ǣ¶Ć0–ÚŁLѶŔŇĽVMWâo¸47ę3o9lâr1Ę“ßj+čał®cÖŃVI°^ö“HcąÍA|?¦9í¦-[Ăl$Ö8^ž€š-ăĹVŻť–ľÚťŽäR`´“ĚĆőg:© 4TšĘĘřńcqËśQ`™gÎĐfĹzŇúlĄŃ„hęîÇ@8S*5$<މ•ĆFÜ0 +O…ëŻGâ.{ÔÁ6}ŽD=úç™ÔOřsHőśµŇoW’żÇ_UĚ®oÇ Ô&Á‘č őćěúo!€‹ZÁEJř&Hzř~~'^kZß]üݛŦ+éiÔ1Ł/±çR`+:…Š%9cĂÓ¬(-LČi0ąĹ7Łb>8O$RąLYĚM< ‘ÇťÖĹsˇśż„Zoćę;č«bÇĆň¤ĄÎ ěúů¶˘„¶úÓýd°Şnýä~ľ–:r° *rS +ĺ!Áćvŕ›ß‰µÎľ·„¦U©léůµšxî čŠŃťeű%B;<píYÇ8_3B¨*%6ó +„É%"±rçB¤Ţc3['jĚŮ„ČE`‹q-&3\RsxČęIŐńj^Đ_FSŽY{K"z™zştßbŤ‡őAp"äăĺë“_EîÎ9fÖŮ’7@±.r´(Ă eîáŇÎ9»ŹŤŻQo&a :v/)e¶ďĚaYÇ&,ˇ+ŰĂłéPł#˝©LăIXÚ<—±}J>;Z›×7Ć–ĎÄ€‹¸—íâá€Lü‰HgU¶žł6ęr@hr?ŇKm%:ÎVÉX"„,µm;d’B' fÔě*"2dgĘS{sŇNń–µ‚¬Đ0¤&ĽĂ-włÉ“0¸TdŔ¤3˝Wö@ĺ—¸–XňčÇŞT˝DÔ~dJ?ʆ"ú‚€á˝” +¤ô A] ćô9¤Qmď$w]‘ÝËŠ8â´şË7(zuuJvµĂoÉ ĺ ľé¶čőF€7°SAW~dv~3 >WÎrčv^éôÔlIµçBŚqd-gWo^:ÄJ ÂeňěEčĺFµ}µÜÇv“ĎËáyĚ2c†t“ř•Q”ăČ|BwOÂŚ0xMV±«I™jŠI\"PÝ0jěxcÂÎĄöŐ`şťIm˛ +•»Ť­Ż뽉łR+ LĄřů:Ë™őąU7˝Úć€-śĐKäzű1Ë™i*ŕq­–č‚KD^UĚ\Y$u9ÖB5kCĂŕ’1^żČ4h"ľháź\6vu\$7ßp*ĐÉ}ckTFOW›;ú¦’SܱßqSÇĎo&yő "źVßçJA­eD‘9fíOĐÚÍoFdx_Dô !1•űĘ/hĂ˝ ĆdHwbbÂ5ŘzŤ{_|ŘÝŠłĽ-vĽLvSy„ +"ďj¦v­;&Ŕ¸şRrý{…/î0Ý +?q +ˇú Ť®'P…(Y»,rş."ÍBDËşö\Ëwăů®KČDęSár¤g ÁžĎq†‰ëĎmáw źFč&,{|5щç‚JĹÔĎí úí€2LŇŤŮBç‰Ç·«ŹžśnĺpÇt4ÍŃlš<Č㠺݉:ď7MÎ""1č˝­óVl9$Ô”t¶>y89Qď2žsĄŔ`0Čk="1[{´µw;•·ÚĎ}FKÜ|Ôu@Ó”SŢAî`çV +÷TÉż®5k»úÎÉ—WrXRwd4á«ĹôŔ6`3Ó9\ëA Ŕ®t¸Y,gĎü9Ą "fKř:9ľw.2C‚V<"ěČüąŁÂ2Ësëx˝RL-°Dä98Š˝¶yŕŻ$‰Š\Dů×’b8HË’"¸íȧ*Bŕ›‰Y-9^v˝ţđݰĐDđ&"°KÜŃ6źŚŁ±uߏ×X¨łsѢ˝\=bĚDl`Pq!Ţ$…JČűM%µb4Ç®üh‰ńěßŰ»ËŐÔď Ís2kBŃ3žŠŕ·äÎŞZŚNŚ|–=FŤVę›č¤Ű!<ß‚ˇ +A%Cuő˛ŹľmÝí••PtŠ}4pĆ#łşD$Ňâ¶ą9ě¸őĚ7!"ćěô‰Ľ°_5˘ńüŮ7€E ź‰KŻůÄxÂ9‰7p +endstream endobj 58 0 obj <>stream +`*‡D3KlcKˇo"Š÷x”›:ËÉ—kď­-ĽźNÉmRJbYTž"™Ú¬Śâc[ţoK“®ű‰±fé"ýJ(&¨«čat%Rń˝r Ť}phŞĹ8µÚz®”„x¦ u€Âž„Ĺ—ÚxÍ\SQďS6 h5ńPŔ… Ât6‘č)ËĎąm–ŠH´*’,ĺöŕË6â=P[Ě€éćű4ťwI>ô +śO˝ű¤#źbđˇźţmă­b°`8®îxÎV†< &şý€gDg>7oWě-Ďđ0 + Śn±ĺ†îĄ<'ą×ŠçĂUő,%ŐNfhSŻCŐoůąŐNjé9Í`CäOqS(ŰÂy\ďŔäOâ Ë“b“¸ŞHg, K’é"䢩aT$¨LÎf›éšcTë a¦1 ú;Ľĺßuá(;5YđÇβďćtđ^ÄŽ»kĂ!Y* č*b¬!ş%L ,"c&+^xß$)_Bł%ű¬}NNşČĎs0ÝŇ®Ť`¦„đŤÓĹKFĺÔ>î&UşP[ç{žž±Ć÷áą,~óN$M[R<îéÓ‰]â(*`Äç‹"¸9J2Oéăk”j˙{´G1 “lxO×7äzRRqB(•ë!B$šôÓÎ qlšHäĚvěd%®5˘bżŽ°wŮmĄx,wĐ ˘‰\#—yˇNÇ‘„Äq­;˛–jNÎS=ęĺ†1ę§Nk‡ëĘ®Źf»QYš4»HôQË"mxşĐ«ś4íş7\¶Ľ 9 Ąqóp¦“ tŔ’Ţ}YŮ }(ęFĚ[¨Ŕů`@(`@Č9KŘňú&-ŻAuĺ)s˘·ÄśĹva’h)L– ăł8^żóţäĚpÉvuA˘ŚAFižŢč ̵VF0ţ˛áýJb„;­/ÉŹlˇ&Ą ^3µImé'ęp¨@Óąăě>»RŇZ6ô–9µ’ÓUu™÷îZŤ1Ć +­Ĺś›-껄Šý­=źČsĐHyŤé”;üĐřŃ&Âd˝ż!¨Pá‹˝KDĽŻcö±FN\†łäÁi/ř6SÇ0ˑٳid«W€şv]Ęž(ő?‰=¸ęf;\ +ŐŽş˘Ś1Öą;Ę‹řť4¤#ľťTĘá;aKä8G=Î3¶ś5+žď{ţfťdŹź††Ôňc° +]wPR¸VŠÖć÷Öi–ě—™VzôíÁ\Ąž$MňĎ\¬R @›î¦•ĄfIQ-ŔN˛*ÂKŚ“`8YŞ‘§“á,’µm)C žt}Äh0zća‘k5ńNČŚ.iUS ő™ĺßč¸d&¦'GlčÖШРśu +eÇăß#ׯ>ʵ·-9˝i +:‘ĘŚžŐĄľĺ”mĂX¨šeˇ::—ÚOĆEĐÂć{#HÎ6“čf™}G°wVŰÔd´Ó§ź˝X_7ĂŹ…Á™<|ˇŁőâ›ČrŚ–°çÔAű˝]®˝ť¤źD¤Lč[‡źa/»nüŤĘIçńĘűD+îË)ř‰L«>xرz;c;p™Í›đŁBÝěP«Çú(–’sIí<ł­S˛L¬nxŘ5Îü«TĂĹk.¬Ř(•D¶©ŽŁÄę]ňĆA "ÓxU,Xî´"DŠ€é[ šGĂ­3ůFíz:c›zR…ˇ´ŮŘo3Kú h+qŃeßPGf•¤ú`O«/Q|H‡ÓëlQéŤPŢO"˛ôörĘž(ßßťPĐ`†Ť$Üâé%g»W9ÎEaUé= ©łž[I·l|SęžÜ6 ‰Sţ˝Ł(dO] s@şŔ“_ŮĚ5_ĎDN(G¦&_4ĽźVő¬¨ +uŽB˝© Ç^čľFR±™ß='Ťç"%9D]·Śi35 «bˇ4Těhí¬şRnSB7ĐĎ.ÚtĄ$âzŐŰ·;FZěČÚÔ  ^Ě~‘Ść1Ňą?~ý–LzĐľuź]T}äi`@ÎŐ>#Hő1·e».4ď¤Tˇé.},˘On»ă•±ŐÔ±Ëyű¦ë™ +»•Ŕžg0sÄՉ̷KŘ' Ů“IŠ;7ä‡Ďކ=ofđqĎٶnÉ‘pó©’± ¸îç”o=ʶTFärVÜĘÓÉmÎe×#ÉđR'[~˛jî¤Ů-SĘÖ©¬Čü,f»R2m3ôö8qFbĘN# q%Muâá=Ї>WÔűíČ\őő ‹Č·;™’\CJvŹv1G`EzŠ(×u&Ąeăsa)SDFHŐâjŰ7˙/Óş´FcW‘L#·U]ĘŁX§c6„˝8"ě÷7@ÁÍň”Ţă·-¶Źf÷$¬l#Ó;X™ŚNě^^d??c'm‰\Iń›ş’“sXů©oćď:ÁĂ\ĺšDäYňŇj#ź|ée›cśoy)Ëy–Š\Ői§¶ť"¬Ń(‹gN=­!‚ ŘüGýďM/ kež!d•‚Ęëę‚Ä1Ś}6E’ąćÓŠúÂ$u Ŕ/ˇĽÓß÷›­űŠĐ,č.ŐůĘůśŹN2čűĎ—(ö€GÉşôuĽú÷ UMmÎ| Émtł é7®“©éŁFs"ą$±»‹•¨Će>©7Ăąę9vFŢđ«7ě"®”'™\®<ĆB§8Ü?]ĐTq@ü¦1ŹHÔÇ"‚uÎĘěJĘúąĚç…,4ŮÖ¨ó\2ꀔ€°ŹćP F"Ä<ű7çťÝ—*M¶Ęs…[K*qsbă.Ăĺä¬Ô}‘ýLčEýfݧö"oJú’iφ¶ô37eEŔ‹W–Íŕś4Óra$–{-ë,±CĄGç0Đ2_Ś„¨ŞÔpô°°mUߥf7ąŤ,P˝GxbPÎÇCRĹé:—6\ÁĐÝ˝z;X@]J—Đ žŢÓ>WBd·˝4zŇÚŁĹs7Óź]íelú• g0«’j˛8SŚÓ#±ĚÉć­Ú ÁŁ'˝ď„ć©m^ĆÖ-ŞjTLč!”FĹ«ZôQŕ.ŚH¦ŽSâ›+(ĺµZéQ´ňܧČí$0Hť4€dnţtşŤUôŮP˘ľ,^x‚‚ëĆ8â8S‘ĹĆzŞĘŰżQ37ĹŘÚŘ5OHŞąm– żŁ’NT„ÁwrĘ!'$Ć ąO¤Đ»›jî4:%Śvc.!ŕ#ď‹y>üĽsÁ~Îäk㍕›B-GőOµî:ëŔMfÓÁĆa§Bąé-źÜ¸ňîÓ!š¤Î‘ÁŻ©ca®‚’ę#6ľM%âaŤE«s¶}SRIĽ J{ŃL©ăVŚ Őc&ĽĽRÜt‰V> +Ż-/©â›Ů”0zSi^L4]¤áˇąÇ•©ŠrĆ÷R%źy¨bP j$xí{íPD˘ č +~ÇŠ3ĄN‰C¸˘îqn¨§)3ăׯ}Ü;Ú"`wyş{¦=‘!2¨¬9'ĄďŔ¦ ˛ä.ŮťĂŐ.ă»Ď¸`oŽSeÔ”%ęîĎyčX±,`ŻČáçÄ$‚łyĺÂ[¦O-IőÖ1Í™ĐbÂň…H•€÷±YłݎK Đźąĺ¤Ę˘ĘňŘjŔD/GG(P$Yvds´P})ďd"fÄ+?÷đSľTtĎ]`ń„{ALg±'S"Đđq?®íĎAÎfŹ1-pä.ŘWń[ź÷ź°ř˝ó¨cŔ/·Şđľ6Ý^I§sůáÚÍ÷’` Ľ‹ëÎńĐ\+şh] +Żă5zÎňŕç’׏$KÂó,aŇŇ3{[9ĐJ¨ćšQä¬eĐôPXż|Ă_Wı`Ą1_lŢ2ĘO9{Ľ/]_ëOÚR\Ţ®ďÉ#&łKť/ăČĺ÷Š5™ĺ|ož?°Ä-Ż SŠ9äĺŹŮQĐćż>Żçü5ślßĂź&xz% jâÜ\D±ě٢Ë+%?ĽJˇ¬x1FyŐ­řŰűśW{˝T¸˙ś0˝Ŕ7ä—9,¦ňÎţ‘€ ös/hŞHTźĽpÚO=Lâg^]CÖŕeÍë\4ŠĄR>’]¨şá´©ÔN 54bˇÇ [›Ű8ńä±Ó†Ż5ň”P‰šIôUÍÇŇGŻ'8žsîq–đŇ–ž1i·Ţĺ9Ćs©üLÂ&=7óözž§Ćň…fnJŮ•ăW´Íwµ6Îqż,kĂůęőT˝gÔĎqěöVľ\Ć\_ĎęĎó~‚aŘw—mÜÂUÂ+łp‰‡©`O~Ąř­Ë HĂtÔysě†iŕqą×LłôÄ$ô÷Íß+Lo5¨őŽJ¸Ľě ’şD쿉Ł[­93‡¶sÚ‰\>$é’Ľü‘ßźjwExC¬‹™Â€ČIŚO%ʧj\V'â›Đt‘jW53Jä ď|¸ °`T>Á‘GTÝN ´—x°ËlગkÓŕáÍeřxlČNžŹ€Ô%ÂŁëvD?L%Äö§Şgµ‰,™ş…3Űâ®,1!^U¤HR1xr;áś×M^,Ď0ŕđµ~vŤşÍ—ť$ďR†±lůxjAŔHoD€O°/‰ß)žÂ”»Ď D˙Fî·Ä.˘…¬ÝĹŔkî"čçmçŤĎáĚAĺF}@Ár_á8 + Ű—S}™˛IÂĂŔašä Ź9ŘPPaĎ|qŻ*,OŁ›& b×…ÂCçŃxđ +űú^.×IB>iÜ-śđ©’˛ö¨}çł VÚVUsUöĚýŤ·E~­ÍÇfŐ „ľKq¤ÄRfĹYía`ËŘâq'[d8ZĚžpbHťđ:i^# .ää—°ă8ĺYěű›(żşyŤ˛lĺYQĽ} G)1ÂäjmVţ軞ö€ŽXE¸(Aazâę©!@ée§4¸Vú_â0˘ÚśDŐˇ@ť!o!EOćF×xŇíüŰ®áˇđ˝ű…Oî8'e. xęă}u†ÔÖ7Ń“Él‰Č{1Ć6{Y#áŢ⍎ k\Ż«Ëëę•rJiyęT„‡˙ŕwÔg….ĎŔ ~IŹĄ"űŇ@#ę!@łńŔĂČ)!á#éwúÄŻV¨Î¤ÍE¨Ő“ÉŔ>h7…čĘ“”hG&reëúŇ%Čňě[aV%§—4€”|ă ĂŔ żG«=[MD\ F(Ť*É®ua¨ű·€˘j"T…H‚€©óÔ]¬ő{\'•uďŕ6,ÁoĂDץÜ3…Ă ?çčDä-ŐçĆ +p]ŻšˇŞ˛¸p–ěz' 0DŞŹy ż›&_1 Żë×Îř•ÍéK™§Ę{OIR™°M–čGţžś¦ÇEä„Dşh§†A Dä:ˇ+ŽÍĆ€˘Rm+¦őWfz^—˘mŁ%rň‚Ţ0ˇ’nÓ¬‡~wÔ13’éôzŔ†SE ĂT†Ń—ůŘÔ©Żl—ő\‰"DĹŚă$;iL6řĚlLŃsľ-©t‚Ä[y]!ąĹwp+ô ë h$ŻMZĺ!ëŰעf-aÜőąGĽ!řŔÚÄ×ü˙Ś˝Y’»®$:•=J lľďŻ& AhţżŃ8cédĘěY˝{vB+:˘Üă±2đ4ł5j`bPE%­íŮOŢLP(\5[ŕ‹9qc"Ť–Ůaeř”H|®I-ăçMЩ䰥#r-Î~üݱÂw9Č«r˝GĎn NÝDŠčG*TRá(˘šŇ2I4 cĚË >¶ődy PÜWɤÓ`Lę®›˘ăuI ACB$0´G`Î3g)DJŢOľţ?I5÷µG´1b%‡ÚŢň×—ťŐvöXK`¬&qlŮ +ĆšDu¤ôP…Eč!]1ł“4ËDh™aÜŻpM«óŘ 2D±|•Ńfˇvdk”')‹4¦OG§¬ęč޶Eđߣçd=8ʧ"Aóx|˝ř–;Jo ?eŚOŞč®hƱ>Ł(%íWwcŁü:â ÔosVE5·Yf +šo‡îľÁzÁź—zŐÝŔĽČ8żú:›uES3É§ŠĄŕň"‘sĹtG…×É‹Ő^6ĚWŚoĹ•ff][jölT›>ÄT#žú®##]Pô¶i9ő +LµPĺd,Çj¦ŇłE×f·*$`đĘ|ŕ9&Ź“HăÔĽFŘ!2'µ°¸ćĚŽq­pçÂóó<¸Í.~Ęe×M«Ź5±8<ĺ*»˘Ć;®%‡r ‡Ńo<ş¤Ů}D—A”aIc¤V˘$ pDY{ŇŃo‹Ű;r\ÄxŤH˘k÷?ř†˙#^¨oßr8âoTˇ¶ +Ë/Xěö7ĎŇRŢöLx“]ŢÍýĆ 1ďBľĄw9‹ƒuqĚ‹ş[ä…5Öi毚D੹DŰ[®§Ôŕ“ŘÚűnł" ¦şŽî bâčmص X’ńÇ´úý‘ž3ćHÂ)p3‘Áu+°öÜű˛KM€dçzś:~RÄNě`ŢŮuíă¨1*nq`űi>kč¸VĚ©X&Ô"˛ţCë(â>o\ ¬§ÉŐăţQź]_q(L±đ-;×â0ćJˇ—µ%1ŞĎ@´ĺĄž#Žżr| đ©Š0¨éaxcUĐs*Tr˙LZľî_q+L„¤˘*šfsH†"¦ÜzNô_ö~çEm)Dw`Ěsş \XO üBJ^ÔÉv‘9şÍ7¬°n/ +@©ť€”y­ +°ŹŻ‹kçű¤ŻŁH1>Q?A*U’‡ "Ť”CńbŰž>Ş4i,!zâý0ź‡Ą@JŢ"“ç4Ú´î©Ç/j!Q5¸‚UÁr·wĄI7- Š)Fő¦QĆçŃ!x)/GÂôîĘKy0Hś‘X9`J*±·ĺ…*eĘ rBe«çL<xN§ŐČK%)z_Ţ’Ę+e_fżkťtľ!N“ä#1LÂ?„ ßĺSëň‚bsßúŹK@żzŽŃ gôÜ(BÖ!J\ҦµĽ„­eBŻ0˘; ß•†řä‹ŔQţ¨ůĹČCµŽ"“0ŽBĺÄ%c ‰Š8[B.9|‹K%üeëŮL„rÓĆőwK1P¸j㺏¬\¨ąc ÚřîQ`—™°Â`™‰;+pVËŻníĺ~ŹÁ”ÓŇY©BN‚ó4ť=ščĎŮĄČŔ0qš˙Ű˝ż×’V˙*% Žđ]»] h¶urű5Ŕđ#F[wµtŢÇl(–GęŰÁŻql±îĘÎ{I‹H<ăRżYÍh! ęŘbQ´ĆubŢ|UśőXq”Á ĐuJ%·úěCÖăF0ĂnI¨n6 Čú!¬NŤĺä &·˝Qi’űŽP_ŹÔ?jŢ’zd=#.?lC;O[÷Ăm4 Ź‰ŮŞu~»ľ´J\t6>'v¬¸A˘šŮs=°¸H¸Ľ`˝Á|?0 +=–¨!~Ó\2ł ˘/í»ć)Ń’łeďËIanśzĹ”Nâ—„ű±¨’ŕ%UÄ §a&ő1îÉćó" ]­ă€ľ™a‚SS!9ňÁŐńOČ<ę‡wüÇĄ&±˘í8§x‡ĽˇĘ¨«M7úk†YĐC±ľ€BóäUŰ˙ÄDnqÁ·řŚí˝¸ÔM€}Ü)‡H%-$°µ}ô'çFw xäd©}őË[ű†E͢/ăÔÁ©ŔŹ +{\í›IžŮ¸ü Ř8¸\°ýĎ®UÉrF|_kb –@2ń +ĺ…5˘•žŘ4éGm[~4F·Č™őâuľŤ&0ČQ•X˘ďF8‘SiVł@żŮ˘ľw@°č ¤ÂA\©%gĺŤ?fŇ'¦ŁŽvśOšç•Ä®'˛$9±Ú•0Ç’ üŰĄÓ)•lÔäÔt7žˇS‘Ř| ۵Ą‚JH…RŐ…Śsµ›ctř¤.˝źIĺ-0Zś ŹxŞgĐj*sÁěWó-x„ňIŘŔk©łđd¸&×ňÇ>®}Ţ`„vq 8h‚-[Š1¶§G»SŢ˙±¤31wQŞk ň^'›ŕ_ËŃpŤzŻű˛şŹź”‹Či™yÄBcůľ÷Ę$ H¬q)îMÚÉţ:WŞćWPĄGäö"`ťh4ĐVÚ#— Ăśx­Őßóő&Hš€lŠ™2ýâ÷+řťŻi_śŇÎp° ű9Ýîqd:ĺÖż&ţ†žŃĚĂÉňBŔ ăAiď,3h×5–,„`a«÷‹D Y^fňçŔá›|j*ě0a»ŔbŤŘź: +¸ČD{›ćfvjé,głĐŰg(ł&Äbř^BP]¦QCrÝ®zŤôväŃă ˇĘ$<,¨®x¶\Ĺx +‘(¤™e@s„(­$9Îiĺ¬ćY0·Đ%bëćôaůťŠĹč ľ·‘”çĽÔpâ8_ăć¨1×ýđŔzőîÜްů-ß±˛łE玌ÁŞÖ­•`>$ć–ó˙PLĆÇŘŠźJת%fć5ö-éŕěąnb×řĄť8Žó‹ůöřŘkÉ|-tk3ŘŮţG,ůž_ vâeűĘÂ<ÔP˛¸;˘s P­^Ľ 1nxCéy7™BđPöçu”‚kçA €˘ĄąĽ¬^¨ÄC`ĘYsI7­RrÔĽaá‰-Gj¨~4ą°3,őÝ=HđŠBŠÉÜg~„1 OjÝę!E{*@(°üSŘ?fŽR© )­nk“NŘ‚żz¸şźH&_ßżä(Ü=ĎY?łµjK! NC§Ăa82‡;x ˙Ó(Ď!Ä•óG«ŘB”stžťńZ¬—żťäd +¸AC:čŮ>彫 řŘ+aµŃ…~Ń ĎÝu•ŞrćVŽ’L ‰^äřŠ˘3Av#jČť·Ž9í¸Vö^öĂËë{‚q‹tްkuo•{®˘đŐ4[ ÄŻŻů˘˝QˇěÁz +†’}Ą‰‚”ĆŕKS99Ž‘(šMň{F­ěáČY ĘwÔ©=tL§B$AU ]ÄŘm/gŐD…'ŮFÍ őX–Ů% pËź«s?°~›â\Đ–×ö}›óô)ęŮÁÜOáíw-´J ÚGŇXË&w*2‚-…†0QşKŹ`KĎÍH˝–D$ 6±ÉPhˇž“S™]žăsFĹÚíÓůwW}€E{ <Őç5<˝ĆđŃ"Îą+Y˝˝ň€WWŘĺKl9ß8č@Őlă˘ÔĂsďîkć9Zp˝F«~ŚľËľęÉ)†ť‡št2ž})yMňĂŚŔwu›îßܢOr &Âí, P«ĺ˙ň†_C‡E„vţŐ>,j*›áQL«_\čý7ĚÚ©  ŃŤ‘4f7Ó6lÇ×ÍÓSu”f”n&i‡âRçš'˘1Ô1G+,żN$Ż˝$á€6Hź7×ÄTľ B®«ĺřłf °©•Ćł›…đ/´-Ú§‘şÔĆł–©[+¸ZB­©!°ZĘIs;; =鸠´Ă[Ť¦m÷káfa§NęčJć]ËuV.”‡¦őKŽ[Ś;á‡U×±Ńg¬¦lŻŤ%Dé NżŹ¨H  ťş+aL9řuÖÉĄ‹óůú4|‘ĎU •Ť±íA <ţčÄ$®O­E˘`/°ŚD2Ö­\w$ëińˇ»ËʵűäÇą–e|^®ZO %ókP*Ť(Žě˛yŤĆýTeP xaÔPŰĎŤé˙8`îˇ÷»Ä")8Š÷Ąúµ¨ź0•óöľ)^•H´…E ×ÜÓM/EŽÂmAü‘ VűŹÁÇĺ]ÜWessx÷c„°Ů­™ä<;čŁi‘p ‘Wýđ’˙DNy%ýNÚ‰ťvúżT‘–›ťašf2{Ű_˘eţmiŰ”–Ż5 *Oď9Ö:­Ů±Ď)nâ$ĘcĂ»âÚń!ńĂY­×Őgů$Śë‰Đč!^+NÉYë°éuB0¸ľëTM>ó? )™gMŞ™©$2‘ę)Dc2ňV:š3Ď«"‡‰Ě$>m–­±b_Ë˙7bŮë€řJyźŻń98V߇thšľŤ_ü1Ą¬'2&DPwx"ĐŢ0—ÜUSßcscnźÄT"r·›`ů—Bô0™ÔÇ…ŞA0Í÷b‰H%î:©öźźŘxµýb?5q‘Áţ›2®Ó×KĄjv3ą +˘|ŽŕŰßgb±ëç˘W¬ďělÖFŚ(ł†Ŕ%µŞxľ™‚WCMĺYt>ÄrŻ‘@EÇVuZ_‹Ë×ŕ¶DěëâkĐT(·tn©Ë-’e=@ÝRÇ´lZŔSúďÜkz)Ě\®w «Wv(ěË–xĺá uĚ\ň„>đBÔ冑ţ1@ř.yÂaËá,Eňbä¶?tb-Í4űĂ+Ű®iiŐľśIê·Ţkq’"&v¨#zÝ‹v~Td ·‚ű("á©®Îh¬UVúFc<Ę«Ť*7?3«Ń—˛gR™1ZüR ŢÄNŁJ;t€ݬ‹í‹†±ÔY(%SGíir§D›·ŁĐŠř„Ězµ;9č´VĎČ%&JQ´Łu¸TĂĚL52sľŹ#ĺĂ&`ťš"ż¶˘ËÍq™Ä„őE‡5ő)“NLĄî(uŮĎ´M౤Ä÷Ń3ö°×k§ţ#I$M:x€LB +K ąV¤ý‚y ůbi¨ŇÖ§žŁQSř¦ŢšŠ§X© ‹@6‰z%¦Âň§2u’JđN ?•‡®T’¬qâśiŔ]$;¨†\Ćy=žÉËů†‚q÷䝉÷$ć÷íŻŠM9—Ś~‡Ý%Ĺ í,ąĆ™ČŰ…pŐ/DkŔEľP.$çäĘôLľ9¬ĺ… e^Ç k‰đk¦vbňÄĘDK&řPĚv1›şâ^'<˘—iŹäŃÁiQ©'ËĘJNyŤ†fŔŠ’8é3× mqAnčE˘‡ü·‰Ó·oúOČ4ę:#*ż®ÇFý]ôÍ%rÍÝ˝:uĄŤtćťCßICĘkň,NŃě'ěYé„\„Ň)źŞśřFz­–٧Âm>™íŰCI´˛‚`»É5ૻćz~L]š˝%DŠÍ^sLTO…űčIG2Ä·ž,…šw“Š‚ßćs\Ł9Âed0‹Ł9$>8¸ů4:íÝ?+YZPz¦D §x'ä÷›ŢŚ«ĚoĘŃŠ`M©Ž%ř_ÂÇP‰‹şćrópť˛„ťËvU´čŰnÖ¶*s¶1$ ëţ<ÄţiĎńNH=4z°E +-שŇ{"vźŘ ŹO¸™,rmеÜ •zˇőAfś\ĎšXÍTęËëRVců„n›:ÝRň`tŘ™ řâ~š{M#m)â~ź‡đçěŰ€´ET›g‘UIJű1ř ĵž› +IŞńéý%¶§Vµ÷ÔóUiěLA®%Ŕ‹P+.u_” 8‘sgFń߲ŽĆ&ÜZ6 Ô8őÜá‰z­4ű»p.ŕĎ\…šËŕ~ńxQĚLrhV|}4ŃŃOň5•fí%{‰·–SŞégTÔ[DŚqŁx|'ŃcVf8AyŔ~^—ň •`Hçý72”‰”,IÁ¸]Ç殕«.OýŠ@é€ äžjÄŘË $oO xěÁaŁ…{đ@ęß"§Ęiđć"#­dŕ‹w0…L¬¸nĆ÷\Dŕŕ–=;F-Ď$Š ńA›ŚĂLß"bę3óóČ1C% bü^˘Fk…đ %oŁtJř‘˝´d0z@Úswf+ÔĽ„6şĄ_uóÍ^·ĹWÝRURÍ}ĚźEaŔÍ\hŁ"÷g3ř•w.Â>ŕnĽBĄ‰˛DNx@‚šw[ ŇÖ‰Jřî BH5Š %ľŰßó/—jOOÂ<»8¸ŕĎÝ"OÄ ţ)NH~@í<:äqÇ"qÜĎsÄ +Ç>Ö'ş‡rŐ †ÄRQČA¨}źT2q-Ţ[…”$şIUć·ĂőHôZ^Y¤‚™&rţ3C´­ůžox«©hérȢČ5ů¤b%ą•hěX’Í(°=%0AH+Ţ;őŤäkěräˇă˝{', Ü·ÉED,P©ëÇP0¶Ě§îťĚĽ]m˝óôĽ.Çe™şy9ËĐćJ±ę#Ss3a}\± OZňÜzŮĎ*Oç­Ä¸!sj®^ű1 Ť(3yŐkÉÖłçđCđđ]&Ąy2ĺ|XR˝2úO(eběmSBů®ÍĘlěAŻM[‰ŃS[f©KM!fK5Řňy‚„ÄDŚÁÚm_bU„í“7‘"ˇ¸7Ak嵎֩.Íž{LýEŚ|SRźĆć¶N¤]k6b#K­”o›!SşŰuĚ㡶S®,Ëc>Úcˇ•LfĹ]ăúŚŞryz‡L§j(%Öø˙QĽnňUY('Áhb;GM ’+o%ččGNłBmŢd™ůú‹«ö°+×›S)W’˝ŞÔCp»Ůřţ*JXݦŹqÎ-˛ăů÷ÔÇ#ăŐ$ýą®ĆŠ-™QđŰlÝm_‹Fúľ–śšÄ*ĚźĽ,očMËż(©!×ĚĆ0ží<Ż hťWů"Łżc UU±Đ„•«Ńź[< #ßÎç~µ–tµFřž×*´‚¨Çü¤}ŐŐÁŘNÚ^¬x&?ô;§W{Í.ô­ÝŮ ôłON›języôůo¦XX˘ršrř“o ÖbP`iç8Ç—!!f«ĹRç–×ŕ0Š[¤e.A Źś‹€ą”čŘ1|f|ÇmňÔ=ÚΖQŐR#ÍOŔ ¨P›Ě«·fr‚tĎbĸÁŐ»o§WßľęČŻž¬•nŰ˝^ĹClď_=ç• Q}M—W† úŠDßÓG¨ádSź˙ES0uąŐâg Đď•ÖW CÁOľ›ĽH @ ‘ş>°?îCéç2ôgÎw‘ƶdi9ňxĹLĘ;§ą\óź +ŕ>ÔŁä©Ü`OlŔ4L×ĐR~–ă˘ě]UŞ%pŚ­1 r[źýh4ÚVvšîeŮ1óö«xóę´#!kĐŐź÷A˝Ĺ:Fë˛a–3˘ŠÄĹ}'é9¤Ä\Mţ^ŕŁV Ů"ň yš†;ž€íka!5p2ľđöNPűü‰Í>1ä(_бo!"YDŚ+"‰úP·łĵ˘öx?&E$0‘]É +nN}z1âŽç¤—r‚b€ ÎŹM„(^ RTČîĐĺO ŢCę5G:Çóô€‰i +ĚjáB7Nj.Î׼Náp°éŚxöólj JlŁňÔ6ОÉx÷éeî|Ăk)ZÁô#ř`ÂĆ×4ź˝©ćÎňmÚ_Ń,Xb¨¶ŤöÄ>¦+we,Ď긍SfŹ9Đnš7Ć |¶€XĎÝŇXĽ-nĄ? K«QőÉZ¸ÎĂťX !b,QÍú¸ß¦Sá)3ýQĆ×ěäšý’€6č4 ÂĂź–ćŮ…»b‰žq‹˘T6©Ż„ËZĎ1¬ Yť> Eţ[ôđ}f5ç=JčZ†=śZŃč ěoNŘá ĚŃ­ţ 9ZÇŔú§Ev¨ě ň‹ôä"(k>y&rçÎŞlVđC'É\Bäa¤¬ĽÖă˛Ű˘»sNí'Â/ueAZ^}{kĄď4sMiŽśuU×ÚN"ZM; lA4áÔ›N.â„§żŔ÷k›zaÜSC¬tŇé@+q:Ë„ž¦’%łC;šĚM•Ě ä˘čÍ‹qµjAŮŻ|ťĹ`ÝĐĆ Ü3…ewEŮŰM;ÔPëc×M-ˇě—"fôXOĄŕ2 +ZV!Uú“T3ŔF‘”ţ>Ćúů$ż«JĚ7Ú„2Ű$éÝ1Ę«ČzĹľßnŘHĎÝšhWqcŤr·Î ‡áq_&[BĺŔŕő đž9áSΦQ^¦ćT™žďĽ7»[…ß®‹8ă"™˘ey8ȇĘ`ö%ë¬vrs“%§r '˛'ś1AYÓˇ˘é\•şÖuL\cdĺ +čµ ďöuc"ľÄ•xł" îǂ˓&f*NgÖ ¤B®ń>|®wd)F?’+*“Żśá„~oeęúG˘·Ă–—áłű|ë2™úáeÇîěŠ×D˛ţao†Ńoâ˝Ů(ˇlj,>ţŽd*µń–Ę«Ž[ż»Qźż©Ű‚XlŮA*ĎËŔ0GĹYţ(ńâĹT(Sqż‚U"±šŮşmś\őtęKŠ˘Ź#ŕ>0NUäîő9¦Ť015rýĄ)“Ď}/čä©xÓüsűGxPş¦ś<ąÚb™AŔEáâ|pá ă–ĂgĂýđĹlőÜ·ăš‘µNZÇŔÍn\IÔ ÁĎ Uú‹şĐň Ô¶ly´Ď‚žh®-Áč™@äŚ9„äf&“ŻM (=‰ Ý51î#"„¦¤50éâR ă¤R…–HąT#P}ň—‚Ţő€$Ćg÷Ă’[ä‰ ™}C€ż J˘¸!ůŮÂ!š(°›ó<ŕx­z˘@„+ŚMCŞsq­¤Iۇ˝|Çô:"LÜÁÁŰŁIűţIĹź7âťüv%”¦0Ĺů}<îóhXÎG={´^ ó!z(@© +ÇťX?ż_ÝS9W‘ßíWÎź·—·č…ĺę–ăţeâüÁÎb2>ŞyŤ#¶]ş¨ăBZ“(ż¨żżźË4h eĹ BIxďŃÜIÎ6Bähe`ăl…±´ČýE87•¸ľ„łË\üy»ýzˇóü*|—7éÉyĄÂť+y!˙„.Ć éuFź+O$•0aîK©Ś‰ŻmŤń™ÔĂQjú~!ra{‚ + PŐ žüH'Oí¶S‹Y#S%Á5І)¬ă Žsé  E +gtEđ:ĄtĆ%I-|B‡eUVg +ŽXÎď Ş®"đK!B3‘܉.„/‹ŕ>g°úJ3ŰűŕđÓµ·ÜéÜá[yŹŘ‰~–‚Ş2Ńź)a2eŞš^őŕuÓA˙€ŻkgjĆü…ŞĚőťť¦IS–ÂÁÜĚZL!B ŐöçŁöÚx¨G•]ňç}Hü [ş´ů®…L÷«únŮčq­cr·,nĐÇ|˘÷AĎxżQµˇ°‹Ú|DKpr-"|#v9…Îü,#Űkśą=d×CÇ™ ŠąŹMZ=y’8˝CščűÚÜĚ}%ź §<9­©ţJbw愝 vCg•Žţ/zŤÉ÷Őt5é…#ąÖˇ“’e–ŹVb媯;Ë]ôµŔ"8DÜQw5‰HsD‚çJƲds­){ć9)¨Őô(ŕmŰ()ÚhÜ<Ş‹hĆPJ`ŔDÔĐV†m…%ë(›ĘGŹ + ËĘšp +ś9}ű˛#s:(dđšú;‘`+Řý€˙ŠĎÚ^w-ˇĎňĹyÖe±˝qću‹“í\9ÇĂ/r[&2jO©Ż{b‚”2›šhExCrŃË‹K JtA÷R'¸·†uI`®ŃOě˘NBI?ż÷®¶Č"+ ‘@Ó30iCĘ•µ(Úó!X †ÚB?)›đ&ň«@$Ö"jD|*–iayĘÉ[Ňż:­7, Ý<·(ŞĂźĹ$Ü1˙łčAŮęóa…ß˝‹ďŠÖ-T^PŔľk[EľÂ˘bßV»ĘĹ-Ä +© É.QGA@üÍQÍ@{˘Âpk®„SŠ+ŤJ‹*E.R§$`ÚżŐ™ĄÎDĽ0a"CĽo|¨-"w=ý–‰ +GÉś\)ňp(>fâçË’jL›Ě&KT8ź°bW™čďO_¶†ČŕŐ,żĘş3xDG†hÓőqő¶=ăXľßI­aUZâز#1 k~śďŚc,ÖCĚúçR ˇ­l3Ífď™,.ˇüVŮ\ĹŢ©mŇ6’ZÓN‹šV ł°o8Şěôě7 GfA:a˙5Ýő/¦0t¨“|h›ůĚâÜaMúÔ°×ŮHă‘Ô¦îj˝3%DKEHq±Ę\< ŕn_ç°ńs¬đ}ę”Ô ŰNɱNžŠHťxůuۆWě8^ńčIOY<´g¨&3GČIK®¨ön-úá¦Ó|•(Ű™i›H€úl‡R)žĎKĄgR! Ó“ÚŮ/EŁz­‡Ćź*ăDčŇ+^QŁÉCŰĂ€Z¨đ<‚Štîş›>ÖNYk%ćńˇ¨ÔÉH7,.ş“ôÔu˛9˝Ë>á7ű^ÓI‰űéY#9y/Wy%QręQu7A@L'™(]3aI×±ĺĘMUŰ$G˘+1´ÁVî‘K™ĹŢYĘúĐ?äĄ_vWV#&O}”㙓ť˙·˙Ě măť•ź•ŽÎôjř$1B,9JvőyŽ@ň9ę?Ęâ„.QpľńfÇ‹ö]3’Ě’îţÔő*J‚Í\Ř%Ó+éQ,¤î±ž<ńęźhĽő(as×qÉ2üť48аbXz ŇDţÔuŞqő¬J‰ °ţ­µ}*Ąťb%SgÁdž)™U‘^ŽnśŽĚEJˇ&䵥Č89čÖt۰4oŁćÖĂLi8)/°ĂAťt`ź~’¨·şś_Scť±ŢÜ2:f32ŽQŽčô{` d娚—í +ňŃđ ™9}÷š#mŠ,đ·]'v/¬˙eAUá-TWJW˛óKjnÍěfżh7&OlźľPnbü4/÷Áů R6!đv.šXłkQä,Ź69g/ÎÇj1ş‘A–%ÎhtD°y8E·¨X© +°ŘŃr˛ÄíŮďDÖj#.ŢNd€š…R:Ć3††ůĎ&DĐŤ·ćoôoĆĽ"µ|,tľë &ąĐŃ(>Df‹|+ +kÁäŰY檹JjQO0¤rÇ`Äß±n߀TJ(ąî»)Ľhą.S‡’ń!DĐr +dUĎ rTEŻÎĂ•rÄžjŹ7˛:¤Ŕ\Ąryâ4żn¦"ĹMŻrlî_Đc'ĺ8ÇĄ¦B‡ŢŃ—) A‹U¶Ľ™<{ÚM–[ű‘Čuěýă*…C4kh° Ç“Š„q™v´‘1Ç1’5ÄDhśKuEz¦ÚÄͶ$Z€8ߏý®ůjżb€ý¤fÄ禉¸­ý^,Ëš;ý5#w{ú+ŘG‹SíQs~Ş0ůĽíŻ^ˇ>„sľéb†/Y.Ţ‚ÍŇşżÚuHĂz/ëKüXß#ŚÉ¸hżćĽ^K,q‡]"M–śťřc>ÂBĚEKÎPąSßôŮ"бYĹźgŚ˙·ăÉŁŘéo¬oc…ď’'`= ŤjF˘Č] śŞJH.P˙7E ú%yň·I{5KÁřYjFĘĺĹJť\ŃRÝš»®,0şŇŤĺUu%9šqPą +TŐő&ú©=9xĽ_Mýy2ľ7 CX›Ý0µ’ ‚O Í˙÷w‹vł/w[ľ +7uSć„ĺ@şÇ(0D0(UçŰG1n±ÖĘxŢA|0ŞŇľ±ú:J ‰ŮĄm|CŹö“˙GŁšuŔŕ­JîŮ*uăce˛Efŕo‘dĹŹüü±*rÓ»˝YG)qć“Ŕžî1 e,Y…%`ČP‹ćŰ•ˇWnČŃöôĽâNřB­h ·ČK=¨űÎ=pőí{l"°d{.§oHśČĄ xŔ+)eaÜEŤÍ… +B Ĺě-‹čéZ\iż!Ń”vmÄ°ŻżžFbî}ĺ^˘“ĄD#ëE—¦%W‡bßQ­Ľ‹PżţCąä Ń­'Şřv;OŽŔ@ä¸ă´Q٢«KIŕŢ)äBDĹd{°|‰›Űuéîěçv O~UżZ“)|‰dÍŁ±0Řş­ÎÄ@•âóˇąáÇ”©}+&$4!~‡ůZ!"×ě…á2%Ńé´µ\5éîĚuíBŕTťĚ­€’jMěc´™ަĚř ‘(Jqm–(*€KťÄ!2˘ť9ű‘7O<ĬąSqe›Ą?‚&ş[ąµKt‘P‰ZÇš‡ŢđxÁÚač`eQo8&Ůâ±űЦćţw©ÇÍĎČ9ÇŞ»LĺŐ˛'7Đq°Úk…CžWČßaWbě8.-®¬ŔůĄĹv˙•®ŠaťóŢ&ŔŰs"˛Ä)=ŻŤůůĹSĄLf®Ôt4 Ę©éëŢÜÝŁg#těúńé|zj5HźsJŕłĎ&2E^˙ +\[ó •É‚˛¦Whă¶)Mß|ŘÉtÄô#­a‹%ă:(ĄŢvSQř„6kńÂ^Łaí'O¶f‹W‚(ę߉¦(CĹ•”"ęĆk¸Ég‹oOßNXâźC†ďŞ­…'ÂŇDN™Ĺn5É%kşŐ«Y­—„?G¶3QÔL^źŁ +@żJ*?¨N\/z˛bŞť L·˘’[•/k÷©~Dç"÷uŚ´bÉÔĘćöC <›…“ĆAŞ˘łýĄéÜ á{űĹśńňä“6\D"Ů«Ă,††‹^°¶'«“ÎťĚY-3í“C—+°ECý×řČňVP^¨KíĂ™{»XĄ‘Qlů†4jŘ$‹ŞŐ!ŔíyŔŠ\‰s´˙|ržŁG‡Šů^ŮA_]Î[Śá –ČřG#Ť–2ŘńüĆóšU +š@EŤš +Á«Ad}úo4jfbĚ-Ńš|úŢ.b›˛HkµřjúŤ>Ë[ăNěŘyčćüU)«iQëŚ:ćäرDU\Ďî{z^‡˛&e#Ť|©ÔćÖĄţć‰ÁWŞ‰Ô —y×Ëcžć˘,ôú/̬Čt«ÔkÓá& uŕo +´lźÄE†X¨Ëѡ$˛ÜÁcI( yj6ńčfb”9á 5Ş˝3Ž` ˛÷ŕL…ń}F`ëf&ĺoŐô: Đ^¦ź“Ło_j$Gă!¬ZĽ’»çXł©Ń.„•áaşŰ ćXD^Z_Ůýx-v=ŚwFÔÍî&{&íúBŢĄ1Śä<ŮřBHyÇ|4ÓaĐfśľš75 QŞă‹n¸†őx‰ID:íѦ ŞAЦB’Íś¬˘hEĘ\;†jďc˙ˇź‹˝üO,`XřęÍ|•B<1N<®=C„(€<"|v "ĺ/ś¬±rrăVtq +<‘ŠÉŻĚE‡PGLŚO;ĽÓéě—ŠLţČ|%`'«JrćhçĘJDęX‘ž±,"á­8ł„’ž15!Ú«T=ĐY‘kŚä]­ÜřŻ“#SüµQG=c”kfé\Ą’šMëâoő|Ť +pbđ"iwđ‚_v~}] Ꭿ$7¶^]t$ĐDž[u}mXČKÉrĺG‹aÎL„;h""ÇęvĽÝĽńרԔß9X!×÷đˇ0Ižřâ¸ăP˘­Sr†"ńŤ×,ß…N×ř +rYúš¤‹ÁNxáb jcŁ„)›{ž€”ă+ęLŞI<Ľ^ë_Äw·ŁdZŢ"ŚćłŤä'*–î­ć ňXy?•‹¦Ř\¬†*¶cmą±çâ'ď´Ĺ»­úß` +”ÖV¶?Ă)ó—ť ` TĹ>.â{ŐtT7Č…`y«f…ËĽű“ü*BüŇ˙%|ź"ť™;¦ÉjbFĘ´9âŽXĎ}r€SÁ¤ń€ťŢ\śŮz;>Ŕ°?MÄŚ0Ăâ?Č-h\ć?Ű©q ]˘’6ô¶Ę93RJf€{yŻM,¬–ŘĄ„“z¨lw,ć= Ř*| •ĎS)iŔR(-Ó•zŽ_ŔóĆX]Řű›0śáľąź›JŮ®#ž¨—).mb2;KŞ· řă"roc:MŐ„¸Ľ1b0©zĺÜ$T÷yNt`ťjĎ® ôVţcŚšRĘń ž–Ş¬ßŻž˘¤S©y®1tm —¸üŔ‰›Üż!gQcPŠWS$¶ĘăG!†)ĺ Őt3­ě«Ţ^bő?ęâŚë©wtőŕéó<ëâxwň{HöІ‡~­X2 ·PčúŮ™ŘÂ?ďĽÜ^m=, w>¬DúĘEŢÇAŰÔ|Úî„=ę8ďäw†ŕ„r —8kň|Ú§zOës„Ěřćqš¶šËéŠŮŘřć.ďXłä°"Ď1Öm/b¨ŤvkI°vp-•&‰K®Z¬I3ÁhÖ„HІwxLĎ9÷®ę'>ĆĎ1áC00ĚÄýé!"3šÂ´ÖŤ‚ę·>"s«^vÉ+ělVłü’‡¸ßQb­Ĺa%Iś&ĽĆUGp!Srě38ö&E“Ő4•`Pő%ÇNlkóŁFĄ´Ž×:řÜđšş$5ľc"ë Şâ’h >rďŰ9î8Ť”?Ş)Ă”ëIąě–đUÇM“,ÖŤ3•ĘEaáu Đš ŽdGă: +Ďă‹}D€‘hĺP-DŔ¸%Őś 4•Zuá‡*K/J0sQflÚyŽUÜŞ"r’˛îLm„(­A¨p±ßr, íÇ.ěę·…Ş*rqA;yšlÔ˝ŹVŽ:¨—ŃňjÚŞÜŕĆx+Q¤gé#Č,x$Ę4Ór ŕ¸-Ź·5‘qqöS°8™8—q­Ałęz|iwÚH~ą[VlłcQthąCSďłE×zZMN&hĺýťD¦u%™EUÉó˛T ˙Zěü—ĺhśöH¶µÉ¶}lËŃL™š|I“*ĂJ@5K.|!vŽÁşcd7ó4~>çaHÜZÚĄ99I¤´ö«za3\Ve.Zć‚É˙d:v° ň´“#I[€Óě8ý"¦EJÚş«Ó–Š&^Ň]Gö\®wçíŰHáűLę .ިćTz˝Ďż¶ čą2îJGdѰXoŇ!@ ^tÂ/ŚR=olńőŐă'˘u‘6- řfÄ9g0=*ŮMUť•¨ľĽxń8a™µbä,Č]ŰFľ_rúb؇'q¦ ł’•{C’»î7FřüXDM–ę ’;ĽŮš÷ÜÝ´´h—Ą>2ż%#§–ˇ q-ŠřáÉqň¨+˘ öŢ«6ă$Ć‚Ö2©®)$…•°]X`k ľĹæJÖ>•‘ąA´–Ős@É”±¬ MS­–?>']"Ďf¨Ľ§wשÚt­­ŐyXgŇ +H0bWQVťČꉖ?çYuź)#ť˛«µ_aËQ Á>M?fX•đ-•x¸3.ZÝŐBČ‹Ë.ó?(Ą2˛d<8„ŤľČťéĄWˇ] +G%>ŚćË’ř¨Dا`0(hăé{°C粴:Ý–Lô9űŔtŠzoV6ˇŽď-_oĆxçŚJsoľWžý"רKŃJ"·°ňʱX‘—řđ:fÓ’nD ¨'ŃuČ!â™C; ńŚ“•ŁŕfÝ9ĺ!Ýw~S¨ďŢräPb}G€Să5šP0­áy 5ŰçlWE~@ ×;LčŻęŘ…u¶:yî˝cMťZn~/†2ü®złÇ•śło˘¬ÓöĂ1×Ĺ›& Á ÖH»Ť®EĹíţ…ţ™%„{i¦uó:ň|B¨»1_!.›pL ýčĆ<Ř{¸p€[5©in´»iŕĂJ„ĂěŁÄ¨‚ćN´©7J{ŢLWŐG®0Ü“ŔĽri% ęöŻY¦[b[BIÄÉ˝lÍŁs9¤xűšŘך*"?sÂď,-݆DäďoĆtgh_¤$ť÷¨BŤđ "^/ý«§0TŠ‚p_«ëW©šíĚHŞŽYZ}49Läµ Ä…Łoşľh‚×IEŹďµb=źĘŕrr®ŕĆAxť,ĺ't`)dű ž~1:7ásÇQ^+n÷M'ÄAÜ´ĽŃoľő+źČAŘ„J$Gäîv‹Ô€ČŕϾĕWŚŇÝ™_Ę%5ŤźĺŻůKSś(^źKHXâKoŞ żş ’Í’¦µoÇj>ޏ ąe?ô Ţy,ô-dŕeĎF“߇ö0˛Ö>x“ô˛ţz⇠+źBDôę4‘µo‡ŰP94Ĺ$zj;0€~Ӣ͹ţG±é‡Ŕáű„ +$BČ#wEBĹ#Ń0őE.€ %_Ć­Ř5ŮŘ4eK\4UZç=ĆţČ­Â3ŞŻ)@b(@avČ|…DŹ?6RŻÄ©Ť++z{C‘ČńFy*Ť†śĽ‡DZWVĆIsŘ ćK„=`jZÝ`Ä!du7÷WrÜÁyË!™Î5‘ + XsÇIŤXR-&»fËřQ)Ş®ŕĚ6ŤŚÂRµrÔ“»ŕ´™ó[oĺRÝ{˙¦‘Ě!ĄĹŘ OťŚŻp±Ł[äĺĹbŚ[ű2lÝNéζI¦QâdÜxmďvŃ ˝Äž]Şâ@ęŃv˝®ÄhROŰÚ_v‹$zŠĺĺ^ľ˘¬ńáŠY›ń¦”ĆŠ|vWT$0Đyö.[jŐä2Ő÷C-ĽŚžŚ…—Ç„¶.¨ŐăąŇ€Ńl1/]ÁG&V‹'Ę`Éß‹ßúL¤~xÉI(›zx7>ÚG@-öďyě޸.]ĺŢű‹©ĽňdÇf\9W7ZôÖ78ç1Ďđ‚JÔč\´žÔ[|E;i˘Ü$‚Ăvçň]ł'a"TŃ€Č ]oĘV1ź1ň.5PmŻW’$˙˘Ç,ô “°Ţ‹­”ltŢŘż¦wAwR˝i "$%ą×âvěĆi°i{ÄGA Š˛äkŹs*”Ó'÷sŔšy˘”´4h9A*óaŢX/}%×:‘îŤuÍgxě¨XµîëÜ÷™čżFĘDB\q"ąejC€*U¨Ŕl1T@,ą–-j¸4Ó˘"…–Ď3ľŹn)yă>5˙+©vyIꬴ#­é´rŠ·÷ÂŰXoIőĆCwßÍşŽő[H ÔÚé÷ťĚËŃŐE âh˙¶éK-.•ŐÎŞRQŃq)yçÓREŐ†[Ü0 Ü@„¨Én rŦmĄ‡*ÁDí,ŻŠŞíw.E¨ŠÓXˇ­,·hŇüąÖľNVQXśwˇĂH4> ĎP_Ś«Ŕ0ËńY Š«-çiKN%¨%mç¶>6<Ż€—TkÜá~‹ČÉË ¤şŃďˇínÇPW)1HŻ*Ą¤ËŮTßТzíŢ—†Td‘§§‰Ĺ^ĄIůŁä‚Ş=Ť®ŕďśqţ[Ľđ}ĹĽžĎ ­gFĚÔ$DCUÚXo +[´vb›«s*@U2p Í,Ę{ż¦ŁĄLě5vq ¸kŐŔňt-H ŐÚ†}‰dś‡zU[<ŘŮľ…âo sĚŚ]mi ńF+ö˘L$ `nxŘUÖIQß^őĘMďHB[‘BDśF=H±×9ř&ü'›s9ÎgyMľ—b\/ ßĎ›ÜÉ%-çŞ;•ýĹ ĽŹîc.šťs±¦<°Őő±˝8ĺŔ?Ź©¨®$‡ďĐ=°’Í4H1€éĄ‹h#Ţ +ůtâ°č[ŤěKED8 5S/ ]µ÷˝Ţ0ÎŤŚ¤Ř8ńmˇ˝âźźqBˇˇv'h‡Ţ´JGd±HłFçĬĄąmÍ+¦×ősÜÚy2&ăÁś[áu?¶OyXXĂđ™ŚÇ&ÇÇXĄ†¬Ł/Zç„—ya"~h]‘J¨«ş)`ţťd® ÂéI@stć4 +ýkâÍ‚ĄÚ­lJi )v`|Ž©Ň˛EšNęEZmTsQZŕŮQ&I‰ 3Şc<&Z”ÉCł0=ÚD¦xŔl1(ŐÇGZ…Ąß§räV˘É˘Ä› +4˙ú}î1ýŕ'8łúö]oF Ľ?{MĚeßÔăwłŕ…lţ'¦)Çár$˘qöë˙©^ęéÎ=+rD/’ëk&ňP1o‘±g˛Á)?’Č$Ľ¸¨ˇÓ «xí)čńM!9ÂzlpĐD•_ą&ŘaÉ—Ďăšíič4ĺ‰ő3F”ç ‡QxAď +W[< ŁďtGű:’ívŁű8Ď8ĐőJăĐUȱ9qřvŤď‰“Ľt߿ȼ^#±(nLÜH‰'q©}Ć]†ž'¶HŻ1ďóľźżrŃ-Q¦»łq–Čîd&G\áĹ«Hdg(– 9EUädą")t';ř1&@±Ú^ĺľ ŚĎÖÂ7&úîFBśĄBmŇ?Ďv˘"!O#†^xůöŻÎi Ć´×őŮ +kŰ7wMHć: 'ufŠľ#rňZ߼ ?Äß§W‹  "˘ó÷‹BQŐq­‚öGMSł‹'"4µSUlëĚe=Žś®ß'Ý[*"#AA]ĺ; Á6Šrˇ îf čÇÍWÔţ’!6ńhĚ-\®Bäo]=)W(âJ +u8/1ň/Ś\ÜńE€÷&]^ězĐs#z>¸S‰3źÓ4Ń;ĆćqW´s^uÓÎŚ†Iďť©yň­haJž Qך¸˘Poůí_Šá7SCCa}c7Šę[Ó„˘źőîaHşPVžČM…$Xhµdó-ŃČw…ËÇ]ţ™|e?™R%k”Zt|{Ö›cŚK`®&Ő'g^ç4ĹŽ +÷Ý$Y &6˝ŁÜ)ó{> X +@Sx-µëžűüËÖ…Ü}xsý˘÷«R‹ľ[KúBś‹ńbČB„ÉÝăç+±MřZކ;|\í 0|5Ýo]6ĚŽß>śë­ŰL×ŕ”r`R–ŞŤJK—(±öµćô&ĚÖc1ŹAË™ź˝Ó^®šËŘ!lDyÁ 8ř”•ń +`ä}•›äÇ(Éz©1¦ä’'ĂL|ěmc˝4W9&TL·¬TçBÄýőŢQĎnó”ŰÔ> éňžŞo_q$TIEµ#›‡ÇáL!|äË^"P€_Ś©rÇI/ă~ѦKööďą}xÍĚo÷ \ôâHr­î“č S·ÓW]ătŔŽčî®`s˛7ŮÖ»čs1*±äşÎa1÷ô.âi%:ř’łzŞD}‰‰ŕćTŚŁ$Č5ËÇLŕŔi‘ŕVę#yxjÄ):"ŻŻţ汚_“ľnŔżź(Jëă:‰{ă·ăޫڠ Q_ŰM’3&6”H\ýůŘZD)W•TĘ·‹˛‰ô‰ÉŔ}ňŻ®˛ ňÜÝvQ–Cxh*TłdlÚ%–$"â˛Ë±ědAm +@"иn +ôRd•ş{ĚÝG:UÄ…7žK>ř ´_ŻěZęK“ŁÉŤĂ‡®ý‘FăeHĺ€js&±É’şEިűnŐ $ž; ŕ!!™iüĆĄäíĆYÔ#üŰR‘‹JđŔş˝x{—jlµ%äżyđTÔ€”ä6É»hß@ţQJň–~±â«$[ÁΞă{С©Á#°íDŻ› ß`˛ŇîFwÝ`řV.ÓÎ"ąqĐçäŤÄxqĂgnŔîŮÝE—ĎH‹ďPĄ¸ĽkÖȨüvÄŐ?• ”´ąç9Üá=«ďb‰c+ >Ľ&H®Wß™ż +"óqÖÂî~ľÉ¦pÄ®mFY +?∙M ´°¬č[żęQM¸} +& +Ëlšäđd:ĽózmO©F®+Ón¨1ˇď»Fł˛ŮV¸ EŁźŞ’YŽT3•D-M•,ÄŞÁuWInŕá„{z­xu_ź­Z%©”{5żľčě›Ăˇ¶í]ŰYTĹĽż>š˙˝xf©IčőuŃę$Bńô^~p•¤@Pş1“ŕ'UŇAM ®Ůň4›R®BU‹úURĘt2‘ɶf/ÚşKť\ÍCV”ŰÇk¦˙čgŞž­@0^N„¸EÄ{T7Uq© ‡±ř\‚ 6­˝hő"9µ!ü˘5h­üĘĺĄxšbÄ^żO¤5BRl<ô¬§˘0@Ş ±ečń&j' %ľçMł +[Î0…z*ĺ7&B#ě»fň7~ĎcÓBpÇxÍ • µEVň­4ĎĄ8& +.¤<7Žź‘÷ř›đ–’®z@©Č­EźjŻĎd݇GĐwpyvRĺM9pĄš‰U_;Â:Öb¬–„tfńJ'.ĄX:`>0ýA4«jý¨Ć¸EĘLćFŤkuüň˘A; Đ™-‘Ź4bĘĎaŢOľó©o_täSňżsŮZ_dv LoŞˇÔdđŃÉ‘¨ŹINÔ<4’ m;°['›%FöŻŻ×ńňň‘}‰ňČ'ö#5ëŚd'KăĂs€ÖâľË5? QH$\ŇŁb]4ŁnŻé0ĺ5ZAę~ůĚD€‚•3…Äソx0PDE™Üm¨MĽbäü%ěv‚kŕ¸çމŘk°ťd*ąTd±KĄş¸XőôŇ€cóě‚O O¦ĚŚč{&R`'sëUĆ'_ đę"÷9®7¦¬`LŘ‹PÎ@΀^ZĎ´4Ў!Ő˙p®+ĆÎE¤ź-4ţ’°[Š(2Źb˛(Üu],ýÎŁ2 Â䢬…/5ő"mQÝ?î(č0ěé{nP˙"bP8ĆѨ,GÍ!!FÍděFm=ŁâŢmÖDĚě»Á™ť¬z §˘ó„2Rłí¨HĽ*ˇEił Ńę!"żóZŽť‹N>š=‹C˝?°/|ĐǬűET2îčřŔl¸ÂVĽłö|%©D{7×’áć×ú[×őÖ%Óň“.›«Ű»J.ń8S.?@ęqřč(Ë—™ĺ€Ě§D˙ĹMˇî¨HďIÄśuw¦ż…/»yžŔÂsD\ńßâ†úS9E z™«Ż±Q¬zYrŽ©čȡx¶učesäcS]qâ1ÉăIUŇĐ©ę>äoňó¦ ,h•<ض~B/‰ĄŞ;×1‹Ľ+C©Ş+ŻuřŽ')&­tu&†‰*来ë‚L‚÷C3Í÷ o}Ěű|XěČĆţXĽ@›)4÷\ç  +ZŮs>PÝsĎFkj%ĺnZŠ":!SĘzĆň ‚GŘŐ2ëÄÚ4ĎíÜÔÉpµĚ¶:Myp‹ß\ÇfŽSOĹ”S©gQK|w†)©•ŽN`ş Â`Ăr­äéęKű$“;ňzf™’&›PŞäa"[SČĆő_,|ľ ZÇÉÁĄĹ3źáé ›ľ•¸ďÄ; —/‚Ëű˝¸t$e5÷áÔzĘýx”NłŚŮÄA>Ç‘@W~|yřpgyݶ^"—ĘÍ3–űwŕ×_D i™Çś3óß@Zݏn‡ą*ˇ\Ebyę#ĎŘ·JHŇíS{˛ESFµzl©T!ř„Č( Ŕžu˝*×pB˝{·ďoů˝ +¨ÄJąÖ­afłB\Oî¦î°äÝź}Žůc5]›j+‹ č +Úî:•‡ÔdËY{ść÷ŔIŐ·ď:’Şśˇ3c:ďű@/Ć}&M“ĆJ>ĂAyW‚h8tGBy;3𠵆rE.Y©‹®GW´Ă"&ÜŃ|˙ 2ű«dQCüyďpoUĂu‘輾…_ÉtU}¬Ä/oš^mQe ŞôŻ÷Š=^ŕ…>çţ8Çev^®ŹŚ§„‹wĐ}zeýNTr«*˝«v?Ĺ ßgTwîPËżÔ˙c–>7‹•V:WšłŻˇXh#s°@a™ŽÖ´ńI¸YUŘůIw 1ł&:Ű>¦˛?(ě*I=o +K»ěް\!Mm,śč#:2«¨Wš/ëác3€dđFuw'޶_ÉÍę1ů!¸Ë ©†‘Đ‹AŹrFx«ąś«Üf4‘q'/}Ń5ÎL SiѸĂęČű~i„xŰÄŻ*X;wť¦ZdŽ$ĂŔ‰?z•Ďs¸RC"ć¶ rŢQŰŮa”SOäČŐwN‚óŞď^uÎţ1 AÁě­oBgţžQ¸·†¨ÉŮhFDc}Gđa”Š»ű%yźťk‘X\ş“,·<ź ť_ťÁş^6Ĺę1V! ĂBŞf÷ѧ\iâ_\^ĺôZ“ DťŘżřřXöĽ aöë÷”DŤů= #3˘9ýž•úě©zj‘~Oąß`xŁ9áą2N¬Đő~Í#ö(姆SĺäWDPXreĽÜŕbnoĂńĹËL’pďz1ü>\Uů98c6—©2D¤;ň‰RżÝ>ö˙ÂR˙“ß˙./ŇAÄŰ÷eqxă­5ŻĄ€÷V·Öc 6]‘hÍC5Rţ—Un˙2· k4ĘšŠDôńжύşcŤŞŰ| ÚłŻŠ–hŕtܸ}‹§nď®őśT-ÔÉĺ ÖĘÚ‘Züš •fÉńż‚ÁÓň&Ţ®Ä ‰VßBD^\ş‘[“/0Żs;iIîS¨“É?˝ń&TŹş¤•wNź JVŕ—mź<€Čdf 'i$ŕŹLR*m¦kŇ0sfzŽbů¤|Rwl¤JĄcŞ4ͦ˛*‰WŤŮh(ś¸ÄنŹäŹF€ˇmĽygNÜ!l"™DYąofOŵD&~ Ę+˝iF|˛đ.­CP˛]q8‡fQŰH.x ěhę}Gmϰ|t®á€v,¦‹âJĽâ˘v“‡GLä¦XßX›ŠÍĄc°\mř‹#ĄźxÇZ~Mh ęäî˛_Ť=__Łâm+I¨ŽŞ2Ş–‘ťŮ« oµ#6ŞľĺBVIp¨«ăcÓdŤ*ą„ Ń.wű;“l·Hta´iܦBt¬ľ—jd&żšĄR˘Vą- +ŔFvBµůÁ˘˙!–űž˙ä'MČ"•şr†aKÜ^ò׼hO{KđÎ3$fűÜ«Ô-Ŕ)ÓĎőEÄ–d†ÜűsŐvŁBLÁ~˙@űššúWÁď‹­ŃĚ#Ś5&&qó{Ĺ`GŤq\ÇW>݉“(ŤÎ˘67ŕĎŕéČŻ¶»cňƸ–c^™o-¦·#ěwą‘`-€1Ŕur'AóôÝ@™vŠG^j<7Ő,1ĎŃĽź_â܉[]°4ł–">Ó z¨Żyäµćę±"A>>Ç|~$ěK^ëë=6ůś˝fďrŘ$Ż"§Ţ·qTŞłq7_K®ű‡äc[m»íűî–ÝŚ<ÚcÜő|Ćą˝Ą˘0îŽL4ęY%Şr—ÎrŻłÚŐ’˘Ú ˝VĂ€vE˝,ŠćăŽ'xřNChž?IÉ€·ŘbBëvGF1˛~Šś­ä4W®,ęG‡6[ ­dÄ™‡›“! 4Zx7iÍşPU3ą+ %óÖĄÇQčÜFTLÚeă×™őËó·d;Ć!Ý;`"Ú\‰ ĎD,âHřĹzó8Gndt0[/şŕMŢl1ěNŚ +g;ŰŔßĚzUš›Ô…Ě’Đɨs0±i†Äi¨fô60ĺ8[“Î`ŞłŔ§ËŃ Ěć˙%o–ÓgE™‹¶üíô&†ýv;·ßE~ľKzÔ4dŔMĽĆđČđ~…Ú¬*ŐKČ :sŐU‰Šś˘ §Y˘8EĽ‚SuP@ł‚±lK )Ę=ôoŮ÷ÜßPôý„ßT‹7˙¶2R_îŇab;ăŤç:-·M.śë@~‰Ľôˇ\[ńY‚瀷Ąh˙p-ěşőĎCm“˘‰—ÍsŻRůCnQđÄăĹđ•rú¬•Ú-Ĺ>bśeg€x=ŠRL}°ô*ücŽĐÝ’6ÉĆE›°@^ŞýQă\B@(rS?°lťőă_ýěýCa‰ŔÉDmŞĘ®$N¤CHlŠŞµĽEyŢ«éîHO&#C•·$ŻF\ëŘšĹ1h( #¸ď„ Ńů‹ĂFHŠňp8x0ަ{ď5S>¬>Ęi`ĄL =űž %}ŃÇ"ę™Ôqßáíx:ż!¬oyÍ):Ůę%m«DO+¶â~ű‰@˘#źxĂ2(żtsĐ'­ľą­Sáű‚Űń€ÚĺnçŠÂ^`&ßňhđĂć2¬:ä:RáŃŻ«{8©"…ę<ćĚŚŽ‚·ĹűwČ‚i‘Áe‚ +„H«Ńí›8í2"‰›|ą§9©†˛Ź~ÄX?¸Ě¤~xĎ\Šw Uꢒ+DÚcŇ駨ô n'FlěÝ^ł3ß`tף»üěްâÍŃťF_,&r9áłß1Ň—×*W¦5'=‰Ź˘?TĎ`­ ®fĹŁŰD˛ µEꝨĽ~-h&ńV•ŢIv°Eę]ŹĽ›#íŞ_O.ëé3YňRĽ• D<…-öÚďx8 Pj0ýÉçMCš”w`vćµ&ŤěBŞ?r +vëoř+d¬ż } ů +\ĐÖV®+_SŰé×ZŁ¦ŃĽ´MRŽá‚Js~¸–âŚĘŰŰA­Ť‹&â 2ą“G#CőjH´ţCwä†*"ŞăAE<9ßŕŰ3Üt-ä†ńô*Ş_.Óos?ŮűçŐźě!Bę}Cb'¶…Ëq9G#:†ăçĘ^ŢŁĹŹöC+[bű-JšŐϤĽp‹"ó©ľFťö®>=1ńQďÜ…ńq\¨ŢŠ*YŔéů§eE‘#°šéN}wÜ~H,ÄɆ„šlŻĄK>˛ć"A„\=Ú}×řţóŇÚî`@qoŔŕ:HEý˘vmŹőÔ ż‹ŇY‹ďÚ´y­Ç˝•Y̤ wúÜ٧U.ůŽÚŤIhś*ˇF°|epű˙ţˇ^łłĺ×ŰRîqQ¸(V‹ńonzŢ™l=ńđňdÜŃ–ÝžŕˇÉ!s_ý]ÍëËßżEßĺZ +nšüAŞĄËŰn·űG´s˘RĄŢ`g ĺ’d»”D$ľż«ďt¸qÓM ­…Dş™¨˛&…ߎkýZ„ď5Nóč¦ő(Ś€ °#´RÁěfR9XÓP; Ťú(ĐL±dFŘěÁ +÷ղ˷^Vj'uˇŢ“z‘×Ö7ft +=¶®˙žě +´–ĐĐČgů?äĄ +ŤjŮä oGŐÄ@Ĺ¦Ň Ă ue‹Ä0©žnŇË+0¶^J¸Ő:%˘u­ĺK9¦(ŔÎÎńPxöÔ7Ş®ą ŻĆk·˙HáÚŠ:‰šďŞíÍ~9˝ =ÍÁ8®AWRÚűOĘࡰ’uó ĚÚ…•^ťO3ÎřYëą©ľnXÔ ŰoűZ˘Î6íľ®%~§Š\É{–×j3Ztf‹Dă8nŘ)LbNĽ ąxµĐĂDîDŁŰ"—o÷¤ŇţBđín[–5)<ĚťüjŐ=b!ří?DŤ2Ť%ŲX+Ç'ň°RěPe,Ô×®“.ä­÷®_1s`WŠmKĎv’ć‹*Ô¸‚#ČDBRk¬łĄ&d(É„Á8ëXţ “ćjű¶+ńÁ<ĽDJEđDÍ-v~‰í—m–ä6.˘V^Źs?9Ú*ŰŢ!Ó¬^ö—Ę·IauÝVĄěŠĽVŁßĂ^kky & $0Éoçţüčč\´tąčMíY@Wß1ˇ˘! Đl‘'§5¶Č-^·śG^ëč˛áëŻ2 IvŘeXłĎüB,wČőä¶ř® ~NŤA{©®‚ĽFNŚ5J÷A*l·Ű“ ßÁjjŁĎ¦Ţ¨9 )]*±Ýę>BÜ[3‘;!Ö·—Ť˘őm"9»Ý9ˇÖĽVgĘ÷K±aÚAŠ‘´Çy ED§ÎcŠĚD88‚\'6cóZ’«Ń·ŔČăxŐţCAřşT¤µz;g‰HĽ†Dý+pľłź rOš˝! -—­óű§hw6ľ!Rh> ś0C•®Ź R„Ď ©‘[?ž`áÓô¤Ä¤ٰżă98±FŻů\Mńc:(hŐ_ISR žaTOŠyű!ůSd0űŃ‚÷­»†R;řB‡N®j3»y)Gc®&…¦•§KfTbO?čŻoł¸+ˇÍýÚbsßk2¨·&»¤ž?ŃV{÷I+-¶:Ür˛â+ŚnReíüt^Ž[BÖ›wf»Ún†Ć®b/ + {ˇ&@ŚŘ ¸Ľžuç »u1‚ęΦ‡ý«rĽ‰0üě–břB%oŤĽ>ÚDÂ×ĎŁżÎvşĚËxó0]zOš=XţZ€Ć$ä(F "‡ŢwB˙1zř.«*ŔŽÎŽží )±Ř +Sb`RČG­®7ÜŔVź§ť&B ňYÉo"OvnCKJYI†TúWČš›¦üc¬‡¨dďsYŐ:(ÎîĽÖç ˝í édŻ«5ÝB+3ôU¸D‘‚ie–őw2L$Y­ ăsa1ĆŇ= ¤@ü gůÉ/5ÖYĂÂIEĆa6ŐD3kŐcă8®ĺ-?‡X¤`«;”5:'â_ŦIđjµ:ń9§AN¸«‡T(ř(řŹ0ö’ ČëĽZyˇ…,˙ĆŇŢĽĚÓ¶WĄ$Źpf‹„e·»ńĺ>;~tvDR§#ďĎ š¤BÄŘ«B x[*…»f0¨KkŽÜe@as”"01`ńő;Qu"^)Ě Â=†\‚ňl °ůÉa~úK÷Çs!ŰÎß“kđ*"9ŹÓđĺµÄú?îŁ ’5Gľ6Ĺ*#ýĽţqşąz21žëţDFMʰđ¦˝RěYNÚĆ‘†ů üz1HţrŐş˛íŽą"äű’W+ ¸ kł‹—"Ď<Ç% ňY +ñ0TĘÄÂÚtX\kYŚĄ‘ě‚iŮMÓ±ç—F«PH˙Flđ.v|ňŢąÄ7—[ą¸–|ĘŘUżŃŮťa^‹XÖ4zmňN­!H× +Śô]1˘ůĆx.˘|‚Ĺłn¨zůżŹľIŞžďľÉÜ4ŚóŤyDč/qŞföäÂp“ĂłÔ—öŘŽ ”W¸téÉŚQľPËÄ +·ČÄbâdSµÄKć*âÚkѢĚJ¦*.Ź]in´çĆ(éUvC +˘ĂŞ.Â@ˇ(RTs Ív!Ó§ăcĽ‘‰ÖĂĹČíjt"ćľ3»Ţy­ŰçÚ¸ /EŹńYói"\…Bv?Ńy< (Bľć‰:9Ţiż“zf˝„äA·‰#˘¬Ž°ßÇ…čZѰň&^ůc(ŹúC›r•ózn‹ĚwgHb„9“/ͤî¤Wµb Ęr€nŇČ Bń`é.’ÜŠ*`ŚjE€ĽÖ`ęI•2Ż÷+îfö$mA&'1T-ą“—ó$ş±jyέx2§v¨JOŮ541]‘Ű zdAŘ‹2®0w“V˝ő ŃD@h‡(Bĺş ¬ź±ˇűqyQ‹ +—WŘÓ†Í2LaM\‰:»Ä!A© čÚﬠe«¦c˘¸–¸šr’)óó©†Ç"ĽŞap¸o—$&öŰ™rm++l‘JŘ$¦†«ť†pî±çľýĹ?ŕËžŐĘŠ€DAnŻĂ}b=)˘ˇ‘@ŘŞ6w•A!ÍÖŞFŢ縔VҸ€ąFbŤ'5‚j±Ś©Yź7Đ4¤’Épk¤ÍîöÎT»&g®M…mT¸ĺ·Q'Ś_ /=×CŕĎ—"ź_Ń0ů^EKb2(¤‡á}uWţ;WÔ ‘nT9„?VÝü`·|#űëąź6:%@ň˙ŹM̬ĎěaĆë1dăďŃÓI±Ş‡Ő™6ZfPŹx9ŘĐŮ=2”('©głzJ°dÎŕáöCX˘ëmË4č™Ôřâµ˝Üs"ý ÄyO˛ęhyĆ l^ɵo!W‘cÇmW¸Ôŕ¸4+  +Ž îŤş¨P‹ŰDnźČß®Łc(Ëđ"ŇřH0H-,ŮZ¶|{¬*'Şç¦H×RłOyŚ˙j«zĆ0yĆEĐe®ŚuÜvÓÖžš ¦ęůŮMd6őĂ›ţăR-[ĚŹL†; +ŕM8†ÎÖŕÎ4Ě3Ó‚]/ÜŰ4óN2îK9b˛Ëöv‡"âáIʦÎk1¸Ťv=ß´÷ěH÷Ô¦ŻDhß"€ë˛ÍĂgŹÝýW$ŞzÁ·ĚBĎŁ.T÷Łľ‰ę qëű9—GűĘąÓjF*–!B14,÷Śa5ď`ÝpűˇpFĽĹşüľť*^çÉąj$_€˛.ł_ ô˘QćkA +dżsp9Â7s#X!‚­\âą m ŻÍ óqa‰—±ErÖÚlŤé›Ć-65ů_µć1gŇxŘ•nt@#)Q©vó'ÜŚäI«(ţ†FnĆ}rg@¤Ć ÷ĽTç¶„ÄqůĽôݏ'tr“ ŻËłçx°# FiĄłŇÔŻBä –+ćĚ@Ľd9¦–r[‰X.ZhXßÓôܶ”\ęü/E0>iüyXIÓS+Ö—á ;¦rúš÷OTDnײűf"=ٶHI¶‘Tż`ôń¬ňDN ůßf­-{eôÓôÁkl(j¬áÂńĺkcfť‹|›˝+î+î|Š}Ŕf0h„ŤËÚ‚7”LÓÉX1Ó,čn=ËIÝcşÝ~r4˘›á‡f´čČţo* Q¶€ô*1ľÜŤ:Ť§W•ŔąÍ‹Zž€Ybfů¸Đ=ŮĹŁhíĎĄöŁhŐ=¬÷kýA|—dé¸ŐĘ:ĆÉłľö'tW˛Ě\Fě +ÉÓ kš[ W›ńëŘż‚Íş’şc–H8x4w Ľi’¶ZÎz As™jŮ>j®ąĂfG\>űuRşÂîO‹üĽF#çnŇĄč\9¦KSçÄR¦N ®ť kŤ8ňT>°âq +`°ď "㬬‹ËnşćŕíéďI —žsşQ]9ĎË ĺ|‘hĎŁŻE„čX8ń—i÷-%ÂĐËg ’‚^.7®—#ČËwôză5”Ü»Ф69z•7–”q-ń’rČ>šś2ĺ-BĄ€hhsövË:łÔ‰ t_R‘‚śŞöńŃç›pk`jĂ3ćWIţ’ ˘űC˘X<Ě™Cl (ŘZ~…Kˇ*M­>ÝÂv‘%kw±×›{~ČÖ~8jô;k‰&[\K" „"߆ÝízłzŽ2.°'FđAuňéî"›)j~$ŚÎĺüň’ŻdŁ>žČ]_IE°]Z8Ť·sgĐ ţĹ[O·ý]ňd®—&˘ |ě‘ř-{Bŕ9ŘéńţŽf00|sÝżBMŃĆź—á™ŃçôÝfK@x{ 9ńN“˛-˛ümFW;óöYiă6g„ŔnnőQ·"dÓ*lŞPs@“é(O9wf :+ GQCqóZy Że{(˙§Ĺ©ž»^×ůŽo† )i]€ę—x1Âҡ…b2ě~jŇĎ‘A1hD‹ś–ŕWx˘ćh¨†{ňäN•G%÷ěöIŽTŮďčŰŕâ»ěëúbĐOÝ/Ă ĚÝ]^@”NfM˝ÂuÖ™EŮžFÍqtl®â‘®nAŕd­<±q†gü™ÓfHě劖Ü\đ¸ľzr éÍ)]BâéŔŢ}Ěâ®%/u\űÔňE'oĂĘ2ÓŽŽúa®šČ ]b_Ţ´)ůňÇ:­řĆQąv€ŕXúßaÜôWt `%J)Jnő +:ČđagůÍúm‘öúˇÄ˙.Ň™ RŻ•¤6™*G]^ďX®{Ű “GŮ)ş.jđzö;n—KhČ4KW„s†Ř:Öá÷xĄČOÄş*ăZ ĺL,sí6Ë'{ ,,kąG<Đą|¦x¤Îň›ŘídÉJ¤Ťˇ gĎ EŇ˱O ‰4™»Ü>fňh^U Qńj­‡ˇŚĄŚć7#ąĂbyČéđ\ĺn1“ˇę«Śă qž·‚ž†It’ţ}‹cťCWht“!ć%„4éińe°Ă:Ň‹(€ŃžynVż&s2@Ji0‡xCdQ*kW‘Ć,‚N“‚fZ_Ş`µm!fDłń‚¨ĹŁ"‰>„ŞëóHŐŞ$fŚŢĐ}¨ď$$NŤR§8ÚÍň4Ľfţ*«O ĐGŤĽ|ŚéřÔkŽ€ÍI×j±j 0Ź(Žnš2 "M‚–Đ‚ÚÄ.s1–U’ěś6ôËWÂş~ďŻ2 üá=˙‰÷Ü[G)ţ!©ăďĚě…Ĺîu'x٧…öe––ÇŢŃÖďgĎ2 ÖEłnęlÝ_A%d‡p‰i}jbxęgOŢa¬‰¶#Ő‚ÓO<=CĂţ|ŇpÝAúě÷R“ŁKqcşä^ĹŽ+]AŔh¸¸ Vn.í®„@Ť07YzÜ}Š·dŢyÝópXzKz %IT^? Ě-Çsyü‡żwŕŤäź%oŻĂ·.öE:vÔbĚÎĐr|ňţ¶ßđT٧eáq är’˝[Ä2ëĆě:’ࣾ˙xm‘»rř)ôŇhB˛ĎâFD©ˇjך猤˘îąs®>O4@śńgÜú N۶ăB"¬ä[JNˇ7~ąLĂCĎu˝?‰ąSbŽwn"ă4_đTÝX& +?úE- ĄÉK] JŮáťl"ÎŚşÜîá;»˛?÷č$ŕףáŐř¤b}GÂI˘!¦Žř×ŢgC=crúů˘ÍŘ©»ú1WÝ˝ý6Ł™ŤD-~2˘Â==B9–ĹĐse•vk#R…âŞDŽ˝ë;Z‹JĹŮČCdŃŁÖîAë±˝ĽĹ Ęĺ •öÚöÚD¬›•Ě7©?9?řKaŰúÉ +öËíŇDvťň]yUf(*Ň1w´Ć‰™KĽ®Âµn9+`NŇę/¡x‚:3=ĚťSs\±2ö!Ă7ů]׍O‚†妅ă?ˇ»÷•\q šDR{ĚŇŤŔh ˝µňÍĹŤ˛ýö¦rLWň†VöcžUą#Ópőć~?ĽnPšąíŁť¸í¸ĺöŰ®ÇŇĄä^h5v·D-Ü43eĽ5°r†ĘŤţ»Ů¤Ë×^˙1•ď>mJÇËhWv·T˘ŕ §YCî{ IŕG®$áYĺbś3Ę š\äL„FÔ“ÉŰçřÖ•Éű)¨zëáŚ] +ÓBw`"ésË—3—u:QZ«Dö*đľřZ¨ß&߸RE¬A©y­Úr_Íe““r‹Ü5‘ő‘ćĘ/z,˝ +o˙A¤ŤĽß¸Ň•ó[Їk!ŕE›\ńk9ĐţÖ…ŽíąôűÔĄ]Şż :!E„“ż\Ę2´Ó µ‰đZž"÷N9nYˇď{óÁ=ŁŔŕř?î(ˇ ľ–ß»˝ţč¨Ĺ×p‰XÎŘ?r÷żťž rěä¸Řm?$Ţ3HŐrwdŇÇęNÎ}{Ĺę8¨%‰Nvć~nbɉݙ**Ö ZXÜúb +Ş™'“ŮfÜMţK Č‹%)LU‘uň•!<Č•$"¶¸ÉžŚÄwÖG—'=6UÁ~WËŢEµĽäÖŤPôŐóÉ[íÄě¦Ô Ę´ Í­™!őg°kDjnŠ'AĘă;ö5űą+„b_|+ťĽůŹ~ľ_̿Ȼ 4Ѿ˨Зá"Ě ±µý ©š3 +› ›6ĽLd0_$Ŕ«Ë1Řו´EF &Ŕ?ň–”ýPçÝSÚ¤âR§:[ĚÚ»FJžÓGPÚ‡&†CM˘ę÷.I=AŻÜăŮově6ęɰĺŻ|۱6×ńM$Ź‘Ę9ÓŃ„Ľ‰·űRRX/vE%‰JެBzĂéL&µrŁ4â±űýÄ˙÷Wu‡Ů¶•ˇD2”$ÉY÷MË/&ďú!B/‹3ëA-‡â Źë©Éóí ¬™rkRňú& ă?ĺžóŽŚ}Š.®Ĺ8Ąű‹9M HŞŰcíRwÍQS]ĂNöG—ĚĂm÷pŐ]1D´EŔfšÂyFπ븮|Š˘ňÉćý®žâvsvĂĺ;ălö71eqŹ{Ä.ŇDîÄ˙TżZ Ěß!ŮÝPu )ú^b•f|Żi‹e)9±Bԛл&ˇüď8dröbHq˘śč…¶äĘR#ď'\Đ<ř2K§¦ęČ×J,΢‹†Ś5˝¤śĆ~­W5Bk0ž7 Z©Ŝˡő<‚«ÍcńđáÎ0b!i‹˘=×ř\°PcÂwëó”lÜ€DóB7b…ˇ°¶ŹiµÉp‘[ýôŞ˙Ä«žµ&w j‹Oč™HŁp°kruŰňEsrŕw‹Y ¶-8“ŤdóŠ‚»_«+Śö1<ډđ8«’ŰĹ” ŐÍ’`Sí9I÷óëćĆŕü˙{·ťÍ’ä:ě^ߡnH€ůkçqç¶Ż¦{f.„¶%H60 ĂĐ"aŃp š† ·W¬Č8¬Ü±Ş(̨§*úۧŚsÄZ…9®÷áXÁŠ»y»u I٢pÄg÷ľik޲š›XŞJg`L÷q·­n;ˇôĢ’Éó´CHŢŢLśUőÚDĆާŰňşk‹hĚNǢۜ/®Ť^˛yÄýŚK@=¸]?±ĽÎMĽţA{űvLü? ‰™‰C·ź\*„ m É´7ÚŻKČ]XZ\*ů—I]Śe7ÇUÂNżô"\‰-rĹ2„‰Ě`“ëy)yćc®*Őł¦˙‹K!Ěů¬őě‰+aö!ôžŐBĐ@şöĆ • Üšp×ő™:gLŞuAňO–Á¨żÍ‡…Źj:[dă%¸V§J’82KŠ}őŚ+ÖsçÍNÎQ}ŞJŁ3Eq@$/lé(Çš dÍQڤ¸ĂU!Ýě–j7iď ”UMtÖTv18€Ţ… beD8ILÄZÎ`좴 Éf¶Ą®xyĐyÜľ_Q”<}[äÉŽ»•y5ťZŠOµË4‰Üŕ©dNn–Ͳ"á4˙ŕ¬űW‚ŮŚT…é,„¨TM'ěŢĺ Ë­4ăNá{AĂ·ňŞńqńH3t–Üř-¤gZsß+Ů[!B~·\TK5u,QöŃĂ@Śů2ŕă#‰4ĚĂ1Ś©#ăXBc1fHÓG .ecČ•0Đ91H©›Ç=ŐŤŚŻů!—BÔź + Dy†¶ĺíz–j"…ćEqŇ›Řzě<ŕ‘&—¶ŕäh?ĆD¸Q +oÉ€żöúg<‚U•˛“cĹ_ăĆu ă›Ç&°…?Řéu7đkś®Ĺ&]é3vĚâĆ«SĄ˛+l„7žťxP´C y®Z©đá¤pH佬ĆĺÉÇ1đ©·3JІX‘…WÝ!Â|a <ô‹ôJŽh‹/é5#şĚ,ŮÄű­xÔ¨ömĹTh Ó­f¦MQÂý˙‘ŐwŢôoYńMe‚TÎÇŕ3,9ĎĂ]‚Ľ2Ž^ ‚ +Z´+X—…ç؉†%$0[ěU&‘[ "č3JésxŽŠÜźáŻq$o¨ …^(ÔMĹ‘8HÇń‘‚wGxvWD°”˛ÎYF ČhÚş€,ťX„-¤[4žQ@1%NŰ)Q,0¤ŐKHHnh›WOž›ł Žś:!`ÝÁ2;~h$śŠôź?X~-^ó´ku@ŃŚ)¤nźť*äĚâÉŁŽýä/w`ICdĘű'Źk]ď©ÔTo˙H#b[Äéä+·ČAͬ"ŮTôk‰ůô…/żéŘLµçR#Ľ®đ3'ŤnŚßN—g,|­Bôq­~/Ş'N”'‚÷_BęÉÎ +¤@ń°ÝňŹ$c7îę€ŐW,ňs´ţőÉžD˙†öH×p`1žěcú7Nąsŕç ÷íGLb(b31,ÇůI™mşż/;ôĽ1Z" O40Mśmo©– +H]Edő{mjÜWwšý÷Χw}ÉÇE"‰şÖ™í(ZÔvm&H˘C!ZR)c?ő`-÷2đ÷>ă{ôĎĘ*34‚c¦ňč–ôĎŃ$8A_EV"S§ů÷–…“oŇ.™ö9NĎr¸˘ďĹ ßĘŞDŮš+RÔAëV(Ťź‡Ť3‰Î:@9`oj¨Đa;/6©Ś[ą¦dĺť!< âű ¦D„BúJDŞŻceŹ,­žO+ęKSb äńâzDT޵ń´ÓýăůJµ•#˘#ÝÁśăŰ"7ĄÓ[ac +ßët1fějҨџµ¸}˝$Xc "B2šWTM˘móĎPj§HΕŁýÉŐ`U'0‚˝8ĂĂ}8›×IÎŤR9mĐéé˝ćG7J‰V‡Jőž!S¨ďĽŕrh‰ +©RÁ8^bČÁN÷“+¨M,ŃŰW +2饍W–ň[ząm)ěOEÂ`±Č%™mőH=\a݇ŽŃîKÖČN٬Ź\6±SĂKˇ¶ĽË鵸áł®"’Zä‹É˛ßđéä¦Rb†słÔrŢŁ±ŽŁŇ‚äĆŹ/]{±‰ÜLĄP'őöÓľŐ¤Ü!ŢG©+´%ĽEš7?ę~t˘“ +×Ëăń*“ůÖ>ŔüsÉ–~3‘łé´©˛Ť~L2Vš={üő$TŔ‘ cŢ1DÚIŔ51›G¤µĺ«*¸‹J"@í-˝ =핆—WöŚ%ź–v­Bĺ]»éJť»_RЏĘ:ÇLdŃ&<ÎjvmüMx/ťź†`!5ňPAs†7‘ǡAűV®çI{{‡Ś_MĆď–×"¸@5O©ÇČzçSëŤŮpűX˘$ž»›H i´©őc±Ă·ň©‚‡9ěŇŠ:xŤ…*ěĽ%¤F¬ŔŮ#ěÚşěV^±ńí(qT$^ Ę+ʦ>mE5ę¬í\Ăy˛HyGržÍDĽ‰ÖÜ1ä÷ÎĹçí~‰nĹt’A‹ +މ7sÂ$`çfz†¸ÔM‰ďęPŚ‹ąSa µ«ĽčăKvÝC̬æ6Úɉ +$OĘ(d‚Ť?šÖ‹†]„s."O>±G˘2Ł>b˛ î Tţo…ĽŻĆ|0MdŇoČżđyx‚^ +í™ĆfȾדg*ör ŕ+bÖ˘îáiźä„ßąiJ*†9ŰMř|śÖ Ü[‹+żb-ž€Î¤ĐÝV=ÍŔç +Q[©ęĺ˘X®ňw7†ĆĹ©­¬Ż$ÜńĽóS>„RͰ<°Üg ĆÓîJĂgČ i=ľŃ#˙˘—ÇvěxOŁ­ŹŹ˝˛äˇ^]ÎihÉŻ1)s/Í"âîpO‘ąÁ6UíěuEçČ˝zĄHzŢN©6÷!ކ¤ţŇŠäCE\ËöőW¤@b5{+ %*cŹÓ٬q¬CůŹăŠU˛mB*ßíźxŹác"#*ű™ś]6‹Ć0âÉN]ůŽ3Čtę;ďů·bXŹ˘Kĺů†L„77 ČyŮ×z‘˘ E\łRšßô„6cŻB 2+ůQ墱ĚŮqĘŁTĹA[Ww”&LńC˘·…Ö""ofq˝Bc8ĚßqCÓĆďěüH&ĺAqógďąşB~*.B1;x†ň-0d¨č‘Y|®\şśhNŐîČżń9m=`J @‡‚VĐcZďjzńD‚Ţdx˛XSś|¶#—‚żLoĆg꿲ľSäWĽ©Ř<-Ű‘K1‘"YÚ"QâöD; +Xě”Î (ÜѨGoSźŢ42ěAMÖËMŚĎxt®ÔgˇćhÂŻcµĎL!ďz«ÄL3b6—€:¶cş˛ÔD-o3–Íť6eOîü­ÚµZ¬ü{“ä{1Ä·ň©ëś­©…«GŃĄ‚TÉĺEíŰ—O—›Šţ”ČĘ!"Q˙Y´×-˘Í6č.[“4IŹí•@Ś4UÁ©I‡F”´PĘBáôóÇ×j µdÂr¸×ŮÎÁâë$G‡‹ĆT§öˇĽŢ%Nć8Ýf,ĘijćůlF€<ČËÔŔD9É>´¶Ă´ ͳ奤“$ÔŇťŔŔ®´ĐŚëcr iÁ2{Ě[äóJ¶:ńZs+Io'ǶČZĽě‹ša3…ŚaŇýPŹĽĚ«źoOŃcYĄ +©Ť'I¦4‹`Něî7óä–)ä`–N•"jrÓYxU‘¬˛ąÎŢÜg] ’áß]÷DNE™4ĹîQ?ü‚ŠlŢGRëŔó›pdDĚń§™aBsx ‰fâ·GśüL¦ÂV]áćá긜c™öF¸ě_"¨ZÍ=f +ţŐŘCă˘jo6ŕNŻA,PPLÂ’łŁĚő™<ďY F¤ÖÍ#âJ{Ĺ´ňĎéˇT„Ľfáź ĆqˇHb°@ěQ)y€ŕX5ďśµiXÁT`ˇB.˛ź"V9“YsßO~4ް +La¦.Ńe›ć;N!óŞďĽâśq]Öhb7ľP±šĎ»*ŔZŻ'Ť–Y¶!"QŽ—sŽ[ľ% CęÓ©iT·€hB6ŢM„ұrh>='Q;2”JŐ©Ş-Z–&GÉn‹tߦö׬¨„9®%"byG´â2Qćń§ŠĂ–ăžęP€&źő#‚Ť¬v2YU‚¤$ s#ę[–¶"Kçhs0}©$‘Ť¤AtM1+ő=–K?5^'Á [3®ů7žËoW9JćŮÚßáfp± +\7Ä>T,c_ěÁýkî»ÚĎ’°ťíŹ\ü$Žôw×Ď÷ďʱď$wřóĘď‡n‰>”˙Ü?»őĎú#’ľünöůóěă' ó~F{ ÷{»Ě…-ěý§%˙tüˇü~üˇ˙˙ިú·5˙Vîę÷?_µţ,Żč§?ôźúÝ˙ĚöÓďg˙é'•n)}˙QŇÂ?ęźvýÓ"Öů/˙ř—WeîŻ˙Ľ˙ńŻ˙l˙ă?ę˙‡†˘Xż„sI©űx,1!ޢ¸¬YľhRyŁŹS"ů ţ­–Nń‡b‰*DŞX8ńžSľšů“‚ѡ&Z0t˘ ŇŃÖęřƨJ~ůÓďě`Ćmt\đűL ›°ŔY2«h(Ůě#Aă§€XďĆ~°„ĂJG@óC\Ľž1.]@â¶¶ńŔÂ0ęÔkÇy8“¨ŕLkŹC\×fJsśj10{ŤvčYÝÇP\ʏűěŇ}± +J9·‚1F ›3*‚vÜ H±Żj\"Žú—(\Ť«utĄ ýn™šxż"3ŚźęXüź Ś“!ǦőÁřŔÇDpvEĺ0!ĆŔJHÝ:Rš´ś“?ňŤŐ1Ŕ+Ěܦň¨éOi—^âaŠ–W÷TaĽ­ťýçË{óÍy¦…Ý„ţ†«3ĎÔ·/Ş2`>KLüi¶`-ŤFö€-Q˛¶EÖ1)˙ŁáVť>úeí=xO9wÝĽćc85ˇ¶HbŇěČČz—Ť0ľ9÷Eä¬çśGÎ]'h“¦LŻÍ fçČ$ş+7•ˇM"đ vE‰€†hz¦UÚj@†÷ĄLd8qÓÎßćSĎ} ŞM/Çî&Ť|;W<ž\µUYë Ë{xoŘľÄńT9Dßüě­š#»ŮCHťy*äUđyÝÁqĚTúńޱżçYb®ŃUˇQ™^Eľ˛i­aöŃH¸°nĚË×Ç»ä˝ĹŰ\fIę•j5ĐĚâ8NŻý2-ßZöbdŔFÚÔU5ő_Ür°âyţ(h–Á ‚K™ÇÝܸť•đőĂÝľöKŞŇJp0cö‡´ÇnnfÔ]Ô~Ĺ,ł‹8ëB©ŮĘɲ~Ů—3>—91G+†ÁTăŔ/űpA$]­=Ęžq­!7ś Ž ba`4ü ĺ4–¤,‡ĽŐăµ{RźËČ1P˙súĹSĚ{Ó˝MD>·ăm®Ż’ăş?ŕ]Ł…÷ť7^xäŇDZěpz὎dĘP‘čŃÇM_ŢÍöąŚľÉoŠé•l¤íé tÚ"Ü0V{»N:ĚŻĂŁ·8”ň:˛{\«¤”Ův1 É1PÉ6­ 妿¬ĆĐňRĽ÷!ŞmBŇă瀩@ć]Ç8„<Ög‘1 äDÚ$ŽkĹ+´a‘ëE; ‘lßď ÜnŢN­wâáÝpsÎN°čZmćnĂüdŢČtů@"¤> f‘8 [D®ýÄÄ}\KţWÚ¨ŤŹr;®‰ýPíĽSĐť 0šČźö<‡jKöün!)K,<™Źag7ńńŻžŢ«ňw€ňňĽbĘń1)â\ţĹĄrĹ꾊w©.H7mĹ9eŔš»´vşZęÄ•Č +[Ş>ɲEęY9`A¸’ˇŮX’“ d\ČIźüŽ$´Ý‹QbjNąµŔĐŮ"…°ŃËäÎ1oTS.Z¶*r [Îo{IłxĘ–şx¨O-<ĂĎ`#~ĽA!ÔyŮ +4‹a"ńhiŚ{ŕ†I÷pĺĚ'ëI†B4âÜĂŻŐh~đŃE=gÔǢ0®(ŘÉe?×ĂVNÉ4F}­·•ľúN’ĆĎ0sGK¦éŐĘ®íIŁ…m‚ňÚŽźďĺMH˙ýřá3‘Âlů°±O1Íoa#´Čęö€i˝ ;Ę]<ˇ"â´c"Ö—ąâôW.ŞŇF”ŘŻ'đMwiYc›b˘­Č–~tçm%łqH%gşeî?‘܌ףaYR°h’LË©'AµÔĺş|Çŕś+6•ŤŁÝëÓ‰šd}mwVĄ@uOF†ˇË*„Á÷`x ńj›>ů¤=yĚţ•«´±VÍZ%|} >ž,äűIb4śb·ßŤ‘ś:ĹŻäŔÉ+ˇyVíÁvÚÍ“ÜjižţJ&(Ú„± ¨ŻÓîŘŽ±žâZŤ&ÚTŠ jĚęń7@[8c˝Ö;ź +µŮ ŃŘĆNÝ3¸ôP˛3ć/&Ž®ĚŁţ&ú“¦€%ě/Djč0-©y”;ľhSĺńŁ*SśĐ‡«BŢUé㫻١EŰM;6~N¬#Ď5ßsFXüvč»f9Ď8Vu4HLľ4‘ł]>ďÔôVBŹöv{Îtey<Šó•ĎńLÉ(ż-ľ/á@„ŕ¦l÷8~ňˇŚćÄcD´Ě˝QcDB%tÉđ™[}ű-§ą‰ ^Ąß}ŤvW‰áômzĐĐ+ą8P¶Ż6«"˘#1‰ół{6Ń$bľ…rl‘D’Ldă®7!b­Ó­ĹµşŽ±đµ®)xy.]Ô~®@ńl&’hWűZÉ­žh|‚Y@ʎ­˘P¦‘Ř"!mŢU©WŹŃOÄnedr×ę×pNš:]ɉ˝% +ĆV®˘–€¨5צ«†…ŹóÂhĚÉG†Y.ęŽtaž48ËE Z8ÍĎ8F1ź‹Óš5ő„ÇŤ+U4ÜJ¦qőv–3şčŐťČAâµzŐ·Č +=t'viíZ€ák„ą6±f™Ży‹ĽňHžqşČö|/@XśčÉkQy|O3đKÜÂíŚçd­ŔŁS _AžÖąŹ¸ž,{)HaOâ e‰oĹ”j„Zhß<Á§U¤FćyçáYÄ: ç-đĎX'ŁXbĺ‚Ü}KöôˇQgS´ë‚ë ý´w™š~ě^ jŘaË|Ő›’\”jŹFߡ“-ç^ŢKóÝ|íĄŮi–€¦dĹޤpAoňÎnćb™+ép˝Ż„zH·Ä8Ň +KxŔEŞ+•Ü‘Ą“gĄs–pDľzř?ëŮx_$ć.ŐĂ>FUłĂÎ@Ý |¬¬Č–îîy’{€ZśśŮFË p@M¨˛QĄůvĐ𭤪}Lž‡×’ +F±ěHüúz”xP[¨=Á% ­1U»Ď¬źĂ¬»¶:B“]©Ţ~…Y”Ż–ŃÂřüJ€·śdŞŠ[aQěgd$}Rş¤*J˛JÁ‹ęâä]w99ŃÂĘÜÓMý!P]8t±Ćľ©é˘ÄEcţáęŚ<äÍtŹoz)|/˘=÷şÜÍ‹}ťměĺßA b&`Ő-"“§>jâĐgŢÝŇžkb4§Ö‹L⮩V=ěs\‘Ťz4‰\¤źřHâWsě !«3Ę?žĆH*R‰«MÉÁmj=OąđmQ$‘ęl¤ô+1ůŔ™döť—ý›K‰¶<\‘Eł}Ţddô[}ä(Ô#˙őOR~omľO(eÜ':—’S–=xjg·Ü—Ö^kłŰaţýĹDe·¶¬=VřtŽč1Ů[ yćÔ;şţÝÇ™ÄÝâ‚y1?j÷Ę}€á¤—¶Źęi»éŮÚ‹Źę«Óţŕâ „GD/F•Ë—RV]Ž‘J†ÝR˝(ÔUźúěLGrxÍž\iýpŚ.Ź˙Dł¨h‹\ t­é,ÄĚăf0»đÜľa¨*é 5 °ŁŻ3_|ŰÉٰu96]ä ©ńîso\\JŚęvĄ>$©»giö;5 űMäşÖŃpRp‚fF¬ĽÚkőxĽiµ ż¸P=ŕ~•uxF#Áîůĺ˙ŻĎ÷ Tř¤C#2ąâ~Âz‰HLj#ŕĽćOX‚í9šÝň±VR(jŇ=>ˇŇâlČ3¬`ÓWÖŞł +'Ś6÷v&|ĺ"2ÄćűnKĐNO^ Ł Ť˘ľě/7™ÝÁą<¨[ôN-ëĂśôç€Ôz’¦+KC‘ C`f5ş“š+XçX‹š'¬Běq%"wKPÜ&V zĐĺ68QObO`UĚŰ$ľćüČűŇ’bÖu +§ÝJçxL€@$HT· +¶z ĎŔ•Tȓݛ•͸’śl*€ ÎT•%‚7L"™ęŹĹßJĂ0é—•Ăý”%É5 ˝%$fm«”ŰÇ'\%«i›[GůgŚq=Á +NV;Ŕ\BťĎĐÉ>ÎŽĽs›_€ŇÖšWš¸"ó \EÉKS7i»Y`‘­ŮŰýBB9Řľěr%‚Îöitý•Îk”W†-Hš!ÓÚjAnnĚéDM‘2NÎÓ€ˇźY—UÓf,‡:žá âÄ)ݡ†‰jQě~|ϵzJ&==ĹfŇ|#â%Ł5%y%¶Č8’;Lďîzçbŕ8âhň‡sţbpůžţF—Ůä QđĄSWě^ě+uLQ‰‰¨]vűťIť¶ š$o›ś:¦AbZ§CÎŻÔőă>űĐ<>Ľ8]ż#TÜ­2Żh×-É4ť@ţ[9u—:`"TŠ8yq©ěÇ™k4Ł‘Ł:őh]ş^Nă±Ę$®d@„]9ůS…V¸Hó÷CCV¤čŽBäoą%ş‘šO±_ĺěŕásy¨É<Ł â\äŔä«”ŤcÚŁĆÜó÷Kďo…4ĄŔepžlšpQŕ­Ť_É,ż ę”QHý|rú-cf €˘„ëŞÝĎxb†·»Î'«1óx˘Jýwë»V{=W»¸˝Şő€ň%˘l7iň-J!ŕ4ěÝF€—E‰mł ź˛gŢâ6řzhSżv±©?r] /·,…ŵfî{m)Éús4‰&áKíBvV»0NřFŐá„Îy¨ÁÉăoˇ·Ś_×SrD0ô?ńuŚ&›Lg čVÁ䆊Ôă`.ĺ7ŻÄÂ…=Xiđ¸Ő‘6]óűK©űšÉł×[kçÁ ç- ő--Wb}(i‹`+|RśřŮPČFôŞ*ŮúŔĆQMÔ&Eż!MS×Y5Qq¦tŢ€íO‚‰Üŕb± ěâľşGW¦Ýć¸EW’ÓłÔĺÝë­ŠÁń}é'."b„ ŕµZłü5“ö`m»2Y2î1»’!KíaZöXĚ»űiÖR¶ąŁÜÎěätŮ +G Jq­,{I\K#č%hî Ö{ŚűÜ×+¤ž4ˇań}Đ2Ą¨Kµ=`:͆D6äËŘh&ľy6D®1Žk]b~V°·?ź§öJq‹Ö˘Ůě؉H8Î}şšŹ˛u¤Á."NţžGŮZ44<ʱ\ă=ŠŠĘu ş˘ľ3‰p9ő #ů´ĹáăĂ‘Ë1^‚ 8a•ČÇŹD3+Ŕţ~‹Ô‹+HXn‹!N ÝźühaÚ˘oUŁ.ĆÚfĆÜFnInłĎl5ßó ™A}çG!î@Ý­í9—ŞđFgęľgá^šü}Žkíh›‰Uś1I´( w[âyDzöš·SEÜÖbČs3˘†Çĺ{śÄŕKřdCÜH +/ţ9“-¸bł°íŁňŢ‚—ű¬qlÚÔR,8ń1Yey qŁAâ9Y‡.ęFŽ·E–ĎŹ’SŠO )VňjGw8JëöCŻÍńÎŔÍ[Dŧv- Th±´|ÂYî­J¶ꆏŠZƶJ¬@„»q­kää–:ČI;ČQGqŰ«ä{G ©vI]c—‚ÇŤ]ű-Un_śďöCóJŘ:á…´-҉ĂGÁ#ž ďxňZŃ °Itf~q©qy˝ĹAäuĽ®„—1"Ą‡9Ŕ'—ßQň:˛ŢĘAÜѱ}¤«Ô„g"÷•ł•XßMM*ţL. A×+ÍpĆĄÖQÂSŁr|ŕ«SMR-Ó‹úZŹO2ÇšĹŢEJ‘׹7kĺ5ÓLS¶—3÷Y2.G‡éá9#y·HRç‘ +˛MŘűI–›EúVmÎÝđ§Q€–g›coCdj†e TOŮmˇJ Î#«ň”Ů IBSE?r¶4Ŕ)]6GŽQ,xücŽ˘Ţď€]×„Źžć¨4ö€l(ů±Ň śDO°EeMiÎdĹNĹ ]óűaĂ·Ň*Ś)^ŃßđNřűßBŠGaţçÉ +nľsĆdfs‘‡—ÇËGb°b˘Úhç]ţťłž¤tEˇ‡ę<ĺČń¸iż?!H›‹iďآڛócÔ0·µÝ^ŻŃµ63?©»1»× ŞŞŻJkß[Ş,Ťx+n‰ř#xwgä8+éɉ˛™ĄťöŇCźęLdÚ¬ß<ŚQ©űŕšÔđě˘.h]ŻŻo<Ę^Őľs .5łäD„j ńüśďúĆóxĂŇë<D¨¶řŹś5RÚ먿*BT ŹBYńĎcˇÎi㔼—ĚM‰Šo›cq|ÜŕĆ@BF6{µ~ś!oŘz~Ö}3šd˘čí'»DNžŚłq/IIşQ&hp*M “UEĹ’‹>9ţ‡¸Ći‡ ·&Ł‹°•… +·'©©Ň„ưŘă~üÜy)Ľ€§,ňżĆá"Ë«A^&cqJjŘKy.ź¶d%âfű•; +j+rMb?ľÁµŹ«^űvbSŰcNqRwŕAD˘ŰŔ‹ cŕ/ŢHŢŢ‘¸#憜ňŞH*e––Q-ĘҶŠĚv7d\뀔Vl×ä±GlÂHřű×ń÷\DćWßyŃż…TőŃÔG!űŕh ŹŔЦäNMŮĽ}­™úY?úç Ä™6(L¶w:łRhű¦i ˙»^s^ˇş§ż˙–áĄ'yż®ő¤:NMÍ%Ď…ER ˝ž= Ň3Ţ ł~şĎ*¤ľjHËźC˙J~đň ;-wIŇvH–Ř‚Ł"NK“č!ŠÜŰR8ŹA4;Ro‹\/f!TTťr:U¬ŕ b§‚Č9+Ů1߲3 +‘çu41LË*ň\dßíZ üޱG*TáÚ\ĘS‘ ¶¬bľ¶Jú; ‰c˛»¨”\8 ć9*#gÓ¸Ť;{%*2×"Ż•ôľÍ~8~ ©J!ŽF=q5T„zuĹvLŕ@äuÎĹIäđxŢŃÍq 3M“űxú¬©Z˝gýőe%D5ŻÎ(ç bCąÇQ†Ńďuxz•;–`ŰŮ´·Č f’ÂáÎ h¤ 1Á5ŚZ;|;Pΰ…íP"Ď$i<_MőőćCŠGŰš;mĎY6ÓâQ™™kg“ŤVŔĹEa˝›gµőî&Ö 64ÚŽvReŔÜĐľ7zhőXŞ×6ˇű–í@‰÷ŞWvEřÉ\I 5çśd3JŔiö¬qšť%łízĺuŢýŐ˝(µ<üväÁë±8ŻnTE††Č÷â…o%Tí^řhÓçđf ) +(Ő¶‰Ů:śDę+­0÷íě~@duKţ¶µ˘´qÖyćoĎaGąiźEŐ›(HŐŤ%g¤‹Ä·!í9Ş^‹k›Í‹éŤŚT̉¶˙ý8xnaŽ©Ůţö˙q)y9ńÄĂřyćdVÚąj<„÷•nĄÖcă)^l ™¶Ôâ;šžĽ9•”‡t÷t5ŚDQţÎł5Ó„‘ôŃ4yÉřŻ>šäŽç±ßÁ(°JĚnk‡g +4(Ł˝ťLpjbdÉśÓ °ŤÄ|Lą'‘OH Hz +ÓLaŁđ.l9P<ŔG±źëŮy„‹ZQ¬€BňăQŢC!&ĐčĺE:čIM.ăl‘ — +ňł@<®† ¤Č5g{Ú–b´Źbđë;ž¦rHÄn"¶ďůÚ(čÇő Ô#é±×3>Ľ¸bB+®R˙L4k€5ŔÓŽiCĚX_ÄF Ú|Ů"§g×R|~zş©72Hžż©] BC¦·2řĹ…bTÎ_O?xŕ 1™_;˝ŇvˇJě4NN^8nfŃv…žŃŃĐGHÔ’t׏Ő9˝\dĹÚŕÖ9úˇ›ůŕ ŐĹ«ą×eo8f|úVŕű$8Çw˝óNZŠE•¨řš÷) ÓSĎÜ‹U q¬Ö2¦"^<‰ľŰÇ'šoFŽâm[Ú9‰+@XĄÄťˇfˇÜ3÷@Ě}­ťŕ¸^±¸ĂÝ}Úĺ`!Ru­Ř­×­űJŁ58rýęµú«đ69nÁ<ŢĚ1ÚÉř"̸-UűŮą·yÉÇÓďNčۡ÷ňŞWK0Űb%%r˝˙-Ő$AŐ†Ě}m®â ť X­"ŁĹ›HᯍşFóÁĽN*yÝě|OKűďäZ1t¶B8”Ib›ęě„éĺ ˇ¶’2űWĹ:O9¸ ńzŽ&@‡ +$vžidŘEóşÁNXI#QjPg‹€%ơ´g‚WŻ…ażI/ŻB»ń´ťŠ4bUeÄ /Î_đ>żżJ´îĎŇU˝Źz°’Ç'¦$Îo¬Ąş'ůĘä\LÉŔ’đkvŘx2AŕýÎşę%CwüßÚa„M{%®+Ś/¸ŰÇ9mß~?O4ŮětʱëŃvC9öŃ*ę˘řKť&K„r4Ѭ֕ĐŐ–WĄŠđĘĘWK«ňżđ«EÜLwUdµuÔCÜÁiÄEbş_ I}ĂřĹ…äs ř0F"öHm´NAüř…L¦ľóšcŇ@€ëXř]˝ŇÔÔDw¬µ‡Ę÷č$…. űZn‰ĺLPXôŢ…ĆĚ]Ä‹gű†%g;¨J÷Żä¨µ$—)ť5hĄ»"¦v»˝śĹ鯢W0P!Ľ.Ś›’śŢ¨=đ…!…¦Í±ďĽ!>Ęë#ă»čǬ©xéřa¤%qNFĽ©”\9Ň2ŻZĆFá hŰĂË(•čc­ŹlbÔNÔ'ui]OŹÓŃň÷ŹcĺEÄ”$~~ĹČę'¸RŤ»i}´b@š ă=^¸‹«bIě jűG`´Ů¸Ň$Ö,IĹŤv5 B%O‘,†XFP_šÎćBˇ‹üé•çRDjYTs€…µě±V"üo‘ÚŻ€h×W3r木’3qCĹiěkÍVž±¨Ďß?˛oçjŇ"‚‰DL´Eİf_!®Ľćm« Ş<‡ŃršoB7ą/Ú۵'ŻÚa–˛fĄ!®ŐkR0o‰i'CěIŁ‚~ŽŽ#Fě‹;MŚ×5 _dű´Űc5Ű6‰ ±-ˇµ‡\HöJYO‚)ýţ¬äöŇgŠÂĚX<ő0ěă €oĎîJÍ!.80ÚŰUk>…z®¬™ŹŤVÄ2;ss‹ČťŢ9ÄŠ*Ě•mzšr㎠:0ŽůwĘíN_T—_ÄâÇB‡o§TÇŞE0µ÷"źj…¸ `z?¦®şâŇ€Ňó É ‡<††¶¶;Ç©™Ś0KĺńšjǦ÷FUÄTnÝÔ5[DĚÁ—â5!H•B[Ńq©pëęČ:aˇ™­I×›˛řRmňSÝ4ŢO•óŰűÄČ>G'µöy8z„°.ĂU¸›–LľZ śűˇďÚôňŞë¨ ~µý6ýmŘI¸UîĹ}8kźN93pî-Ĺăíwł±¸FĂ"vĘMŞśśěPÝĹvj™5ňhS]†ÖÖ˛jŹ®iBIýKŘ’—e»y†y‹41µ<,6°î‚Q.%žň°µJäÚö‘ÁËíz ¦Ň€µĹôDrŰ„3ŕU‰G¬ä‘˙Pó`rߎą¨á"őń¬M]Śäڰ祮›ĆJ®z´#îĆâTÍąłáŮĆ…q+»hHóI~·ë„¶ĄzĚxvÂ_´Vę©Ći~¨âżýyMujű|Ť;(aě"|ńšF Şoă‚ÔëůěJIxnŰÎĺ°i)~h$Ă KŤxđ6µ‡§\y­+¦Ăw`uÍáĽdĂĆ#Ćś÷Pď_tś`}óMG‚Ĺ;h—ÄËü«ĆƆ퓍ćyT“Ńn‹Č1Íś0ÔB”Ň7€U +…—‘żCHţĂ{îsDsj@ŕ7pR¶OBă\]i–ČÂc;óÄ™1ą^q GIg"‹íl"Ńu>UúĐް k¨z«ď†*zCňČߊ7Ȳj{'ˇ'¤äq<Ě݋Ǯ"€„gä!8ĂOÝׂÁ}ˇőBŠY5TĘcǶ2Í"¤4˝X#CČmßĎņČÂ=0»Î4ťŽş‚™&cągÄü©~©ëĺLúÉžďÝ%Žô—aa=*Db±<őA±í‹}Ę‹«çö·QČXz‚±*rTéŰGćŚ µ˝Ť!ăĹšÓfŞsoĐ€ţÁ|×l–_Řz„Á:[ś$fęďG¤Ů?8|;·:öSE“ČĎHŻxëAő_o\/ tŇ· +ŔďMyŕHJˇµ’oŚuN—˘Ś`SĆkĎĹ0^!ކ=~PjIcÂŤj-ďMN.'ŰP©zť„š˝¨üP©6‰ţH~uQňécó:Uł$'¤ä-ÔnxršUż*& 9Ô´©f=3T°A±ÝŽyŞćäŤYLŃ–ş9¸0ĽÚ˛Ý"g­•[#܇ +k‡8`L˘HZsgkkďME‘.Ár®í{}ę„h> {Ę™WyI%@g«6¦¬ÂŹ—gú_ďr(Ô]éVjć‹0ť©Şˇ“3ô?(ä·‘Fň’Ăd%úň|‹@Ôđĺ„4EŤr*žhl«­‰ČlbQ§Öş$Ôx†Ě§ľó˘#źşDş7a%‰ţÎO;!ëk˙yúŕĺ…5®ÖÔřČyâ-yĆm'q¤ÝÔt@~ăˇB=Ď9~®Îˇ§ĄŁ:LhÎKb®]#ÍÍ[eMĎ Ačť ¬y!Šgô‹˝“MZ˙@`-?p€HŔX +d+†Dó߉ëHŇۤaÄţM3;ş& ťÇűMeäwcŕżaĘ&J‰Ů«Ä`Ő:ÁŁä.Sá°cŹNb+Ö¸/—}!ŇÚ¤qęîÔĚóőC…–!2“#>Öť’4 ¦Ś,{Ńş“§.húĘ©Ż ¨»Oâ9´ hŤ”ˇŹŃ®@DLf2D§ă%ÇäRpýâR7íËL›‡ÇzQS·ÜüňHžhä:4´4źv'±ń;aöy:ű\ůŽĎŔŕ–ŇĘc{˝"’C$ q¦‘kĹÎ+¤Ę‹ę‘Ňť;űzlj(ĄyőĎ@¨î8‰Ů| +Qf‚^ŮŤd;‚f‰A8đÁu4*Í‚&µĽY“ů>×l›®)P (ă#Wďá"žZŠŚ*Xu3ârĆ ˇ¬ĺő\'WóR@ÓÔýżçňé)Ńę}şÔĎFp¤0ŘĎL–mRtÎ ®ŹŐ^â1D˙ů©Cx—#˘*ÂŮfÖú™w>†żť/7zć¬hZů{Ă·2)]_JbyŃ4‰ łÖ Uw"¸m­mĺ­“,îVŮ«ëŰ:~R¤µŢ`±:§䣦´Ż-бht¶Ťos…ś„ߨ:;ć yń= KÝi¨Üt–:óĐ#1Kő‚‡ÎfhůÁűm`ĺF řHŐdń +…\X(Ú&Ygý4Źó%­ĎÎ};cł2Ó“PWö%°µäűÁZęŁĆid´şTâ°¦$*KŐj0§«cĐZ©Â~šµo<ą}µ/Ż˘ţD:“‹™ xÚK Amm˝ ÚĹÔ¬ÔXoů§‘2fvW´NA(c´° ¬OĎ&‰)$ŁU©>SČś m&ěđűµy„ȲÎ@5ÁSsDIź’-%5u•Ö\,`Ľ86/ÁÁ”ř›Şfř†ŤĐg-D«Ô„mn/!í&%Ĺ«I%J űHHJ”ň•#vńh‘ŕ´®Ió7S>Ô4@˘ŔÓ[äX<„Ż˘EĆv¬ňÁ»ń„=×Ę XÓ ą˙Řϰ7ř¤ęl7JpEů!hsAĂŘzçZ¸}îž;úI~ĺčaČÎg‘‹iٲî@]V c%zrN3Ó'ŠşQŽ Î”rҸ>ě"ď•ç c‚hi ŰĹ–ŕ&2Rµă"{”Qżă{¸÷őÍWąS¬â ‡eÜ}ťŞZ×ń“@“6aĺô ´ń•á’gŚŘř%q!ˇ|—YkŃlDŇžFXŃ@}΀VEÖxăEÄ„xoW–iJłşÓDĆĘŇ‚Ĺd>"ľ (·ëČŁĺ𡉄"îŘŐ»â™c0ŃŐýNB99 ś5BĂîP'ö#•j[‘›yď/ŽöbÂĺ\nĽS‹ť¸&žcé]±‰e°aVcžý¶`ŢČüJ{r˝Ž1ż^;H@ł&šę¦1›;O×~ůH¤sóp®yôVO`˙¦µ8«hĺĄlnD_¦®ä«śm}‰®F S5&•ĘKń˝JßR` +Jv’X*ÉEä&ô‘WęS㸣NXɦߥćî6‹ćô¨đX÷#‰qDT·gÁŕ¤.e›’}IóĘ%°yôőĘő‡ -§Ľ˙¬vaYđ„Q®é'q$čů¶ËŇF2ôÄłĚŘéÎËă–>ú3&3 ]E:ŹEš•Ějř¦"2÷;Ö˝)¦)ÁcÁp›g~ŻxGAṮ/¨T3¤FKřq­€âĐ/äâŐĚ_â&öX5‰•ŻFt8ü +jÖqĽUábkßp(îyĽ`úXËě´DKDĆ®ű˘9+ {_ÝŤërťUŞ"|”0ůłú‰+l‘ď‡ ßJÓÄĆ0˛Z»µPvÍź]ç|žtkă“T-;9łkhő)2ÓWęRŞľÎ\%Ďw’“pĐ×€§Ď^qY¨ÄZÎt ŠnĹÉyA¦ăÔXŽZNQŠčZ{0C °Ňo`č`đ|›­'|ҬőżńysHQl±j‹Śňš˘DINľj©A1>ßlP°Ă';­přu‰ÓA(};;}r`jŞŃsˇ\tlýL0bRě.ţź ý3Đř(˘yä;XË"Í\WKpWčb!y¶ű:1›™KÝVŁÍőH?VWÍy¨ěÝ^¤óďކiDËlÚ6ýPŽĆɢĺÔ ©]Żť{AĽŐ§Aă}°¤ę”pŤ˝ů}7Ď»ţô…XÇc1z\ćýŃ÷3“ÝËĚ€Řöhę[ľ˛Üeń?ŕcĹ:&‡b=Ií›h^îČŤ„BąŻ3[!±ŁuLQ#• 'ĺ?´h^y‚.ß p‘yVĚG€úóM*Qç°GĽ›ĂdűV€‰˛x©3ŃOj »óó×m-Ęź­K©Ô;Ă ëihń#W4f4 +hÁ‰H·‚\ăF8±b+bPĆBŕr’|Ď7üL€ß|Íx!ôáű×çűcđ6Éó‘¸óű'&Ó“ŮĂëv 5tĘŠÉč•»gŨJôűyaňI (ŇMgľî!´‚ö8ÔĘNF“o,®%jîXĎĆ“1[Âăóf™GaĚń})%~˛ślíN‰¸Ĺ¬2lQµQł°a‚ŹřŞM$¶kvś‰jĚƵĸ51O#Ţĺ¨Qď±w¦p\ž)Č[“0ő$–»đ§TLĽ?“„]ťÁ'˘y$ÄʧuÍtŃHc“Ćb7^hˇĽĎ5<Ĺ·÷0léHŘAâžXq CĵXy\f2vB[góm‹Ü'łK©‰ŮC„–Ť B©B\鎤¸™Lëť.X1głâ¸€.Yx`B?"Oá`Ww&Ä©»ÁĄlg‘ç +=U^EŘIč9 +‚¬»’ě¦éĆ^=ö"Aű5“Ľ"˰zËsSZŚŻÚ‡É^L ŮŐČĂ 1F’~Ň»ÂbAÝ`ĺʬžŻ™Đ•n%ošwŇH8k nŤýÄYĚ*ÚÓ˙”gč;µSđ6~%ę·bß÷ň—@~{“Xĺ+`ór +ž@˛D¨)żůđ~ÇzM  áyBQŁč’kśŰhÉÉ韀‡DQÇ^cÖ!Aâ_Š›MWýÓť…š<릶„ŽCE­Ú]Slsíźń@‹EôP~âĺJ+BĆj@/¸Ö1¨‡ĺZ.w!X™ü@1]·ZOq‘ďäňm7ĺőµáŠ@uĐ ÓŤmő÷^k}˙TTBë@%Ě j%1‚¦W©/$«BŚA;»¸Ęt‰Č ’@J±´wź=×I2ŃkŐâäq©Qµ/śc}©Ń!±ŠĆ !¨µG°÷<Ďe7hO®FAKEGŁUš4 €¨®úľuţ ±u¨žňŽć#ÍŐ±G‚b¨:›!rł0ąÂćgŽçľľVVĽěŕ~)r׊Îw2µěŽCqfŹ[NôčKż€i¨¬+—¶[QđŁh’'Íő-‡wŤäfÇŽ&_™ Đ nŐms?A8=4ś°,č|’gŢ,ŻÄBä¦fm ˝gw¸P÷däA„%©y HČzÚ;&˙CZtĆL†¤•c$OĎAłđIřç1Ţ8˛+ŰÜ˘Ż ÇA1zkŢ#Źč= Źn[qťYó%Np±A Ë/"wnÔŃĄz>†J˝V˛5öĽ¨Ě ÇK=öđ´í5t!GµxN˝ĺ-"Ż"Aîő¶”Škëť Ŕ3ŘŚÜrŽ`şO^A?ŢTĽ[ݡŮ$X:—Ábw ÍŹŽ¶#T1EýĽű3]PL™u;M‚ý˛Ky/ˇ_Ý%×’·O…jŔ<¨±Ez˘oî|ëúśâ(Yu媔•E“A /\6neqRËEn"ňîLd•(5hăZ÷ŕRJT÷äµ§Ń>gR&ÜS0®wâRŐĽdeŘ×:VXTęÉäô—Ľ#7ÚĽ ®(u#aŠ7¸»‡ńĐ@¸¨öëA #ď5n¤¬Ü¦€ÔŮlĆ‘8ľ6LV¤™Čb†şJ~L: DY©śűk%žáľVç9+S©›PÂq­ńi<d3ÇŚ,x(«wM¦ŰWě<î}¨ÔcĆ+َť8”×wÄĆY˘h *^QÎÔIX`ję2Äß é±¬]Őöž V$'ŃQ‰µ…;O˝C&і์S¬űµ*ÁjMń@¨ôsHÉ=“4m'JÉ–ŽZĺÚB¸â¤†+n#—;ȧ_4\µ16‹g.Ň_ i%Ířˇđá[IƬ‰ę%´$?AĹEC + ”†ď.„Úuśąj +ë󢮖qÄÓš·×˛ěóQ€Ó47OwKş×ZŢA‡H`,ňóyr¶#¨¨Žťî·+§˘Guq‹´ÉVI& +•쌛Ś;Ę>§SĽ1雾<‰^śhÓcśű Ä/ża5»ćąâőń©Îw˝áćNű·]AWµŰ”gŹX5;Ć®Tć’ós]GˇµMž +ÄŔŮ˙Ň)ńˇA!EĄďëdµi+{9€©]ÓX*7ŹĂŮXT+éĹĹaËőj$ObĺpŚ{ Şw= ·H´ßT!ç‰BĄ·s%Ő%4rLŻĎ°Ą’śémNlÚל±¨°Ă1ą7îJÁR.źŠ`”ćú]ŻĹFŕ'{·:­®ŕkŇŽÜ—vJ™/XCZâµĘăDÍßÄVŰ"“Ü‚<¸ÜW÷Ľĺ× c>©Ů{~#V€ćýÔyZŚ_=&šçąŹÖ@®âÎű Ę“· ˙ńýC÷„:Dn.’OÂĘK ­ŻĽóţDa‚(ó>†$śQä÷ŘeŢš tJ;ńiJ“wb_Gl8J˛"6ô­}ßń™X}ç=˙ćR­pĹM{w±Şk/±űµ/ÇąE.o÷—ÓT?dá{ëüÁ@ Ü[ä~uy’P´úůaBŞ=—Фy­XĚsŸĎA |1F‰€R$r·%ŹďK.“h1Ąź4úţ;ÍťX¤ţ,š­Sč¤c}č8>M)ôă‡1ÄVT|ĂýµęÁř40µÓ3˙ cŇ-DłśoĹ4Ăi×B >7úˇ:˘\AŇş%V,®Ř_'Îc(gTR\ëŕKŕńĹc!ČŞO~RĚ;öÖ©Dl°ăÎJiąĄ˘"8ţ×’Ë$u+¤ÄČ2ÉĂŔ+s0 ‹€Íe™ČĚmˇ-ŇK6ÚâZ"ť´-Őrúë—’ =@ µ¶ĂČĂvÓ&ŠAŢMěźŮĂĎĚÔ·…"’޸ˇÚ Q©đÁŢ=iÉÔb•“ç%®óD›sv.ŽŐ•¶ i{˘Őî+‡‹ÔŚŮRyőkń€š–>#zŤNK ÖĽGŚ ´‚óJň| ”húÉ,äŘędúOS>úěΞIa0…¬ęÄśÍQ8@×ń,YAéiľ‚|˘zĂš†ĚćzU*Óôųܬ$îQŃČČąXĂ–ĘńL…y Ć"€1xÓailNą;6>qeĂ­ŹsÂc:_FĆrpw¬Ç>–?×÷BoĺWŘi™T€Aëł'Đöo!•€Żö˘ŕ:7É@!·DtąKŕŠKyűŤ‰ŃţBđ…îŢÉŠ §¦ŽcÉc+.­zنuw.Ť«î– t7ç=C1×MP{PĚBj‹Ěâű$VUşĎ• ř˘|QÝeNöPĚ;Eů-ű¶H›ąŻ?ôÄżäŞůLŢŽ$Ä•Ămés‰v«¦Ü̢ 8óĆ[˝7¶ËşÓcxžJŔ˘ú=ĺ3¬“Ř +Lë€z0î¶Ë‹›\đÁäíHč WŢÄfUÍí‰t .%'«%ËQ;(ć âő¸çČ&Ó4[yoÂżŤKI¬óÂŞn{#îj1±L/g;kşIŃجNCx>in^·Óú1ÖŹÇ®ĄdjÄSćË{ÖTĆ]¦q›Îu×řŐhrĽŽ`ý`tG)GrYA)@đš96'PˇIi!żŔR,ÔB˙Ä {¦+ieőšÇĽHÝÄ`*!ľÝ 3őŽępcłsćc}WŽ–„†2ćŮîH¤HC10Dż ášÄs0p/(F,Yĺ *Ń&µ‡¶ČĚó…¨B>‚©6Č1Ž0®Řś>&ă`ŚF[çZ0Ď[Îá|DfYßyÓżąT=Ü9އD„Ś8ZĘÍŰń#Ň[3—Mbť;kľ‘G§‹Ŕ!”—‡l·üýÍ;ľŔĹ?ŘƱ0á›ĘűFË0vuMb +CCwŇN—Ů˙8 iÉČdyĘČrÚ^>a2Şvć«oé­Ž­f ÉF!¦˘1‰Äęw˘7^<{ďőʬtźÚ‡¬™Ë@¬±SkĎý$Ćż] Čö "¶GsÇuá(4‚sčÂ},Q -0®D9–#˝Bě†ÝĎE%¤+<Š}'ôş‚VÎDîuyö,7G^xq%FťV)ÜË+ŤÁú©+@·Tľ˝Ezâĵf˘KÔďd=ô_B* F÷ł#Ťů0‘oěTŞ-‹TĚnúÎ Ĺ­—-ëŞqGr,űx×ü^Í1"€ÔXľ˙ťjc}*W%µušm ĚÉvłóÎň°}ö–?­Ţ\˘‹ÁŮÇ'Ý&Ǹd^ űĐ1¸l9µ/ň„5}Ó~Yâ|aMGˇ.–Ű^Ü0ĐŇ› 2­z…˘‹'ňżió`.2±ł‡ľ?uţ0HôtžČĎulĂr%…î~ÁŻimŘ?şA b¦ü±—Xł\ăßş%úr Cś@{t’Ą ľ eŢ;ťrÎń̡g%řýš¦ďAĆęnĺęI 5·“‚í‚…oeSěhT2P@ťdŃü-¤$ČcŤ•Çč>:ąZ%@Ěnp\ë {ÄgN(^7hŰöb ‰ C^‰ ެŤŤťF{2ť +Ôú0 5ĎÓąţu‰‰áÇzA­k“rë,Ç­śLź<łćĘx÷±8׏ťË…˘&é˙E[ŔQݬäŕ ÖqĄúˇ%q8źcŕŰl+ř^Mäî<e»ŹťĐبám}ŁíaWWÎě?Î0µżĘVšw$b\‹«#zzŽ5–­¸ąž{•äb ­ťTRÇń‚Ą +¶•!ĺ-*`ŕvGAü›ŻLxÜIj§:uő7¤,?¨&ŃçÚ»#ľ*u¶«ÖŁ>ŰO¸{Ř€ŻÚ´űXx>r¤é~ü®×~ţ*On˙IG¬fěĐPśŻŹCx[â>cO»;±”çIA!©D˘*7Ę9¨‘€ˇÎH•˝ T‰?kÇ ÷H ‘ł Ë=ň"^cRD »‘‡ĘŃ,VŹh˝ě=éďs ~REÚká9ą}Cmk»”N€ÝŤ0«0oĂ[ä¬Ř‰8ťŘ}Ţ"3F¶qŢĺµ$:ٲ)&ţÚ"‹y[ŹEVzK<cˇ ůŐňRŹ–nO»ÁfŮÔPy"‘ŕ[śÔŤ8ÎŕŮE’‰qĽ¶ő:Y÷ŮŘ×bd~Üprll•ŕ%-‘łÇŠEŁhńÜa_m}Xn¸3#ľÂí n†b8ęQ(’ŻĽj†Ç‘ON#şŃ]Éč÷1ç«óEI{»×6Ĺ5"ťŞăjNą ™)żĽŽŁ4Ă´öKSްî=Ye¶HiľŮµzëÁÂ6%'oaÜg˘ [¸)ß$'Éűç&“WŚ»č%q îŇ_uâ‡zŕ*"1ű‹:q¦o«Ůë Pf!äâ5Âú‘łiJżá!2­úλţÍĄ¨¸©7^@Â$^ž¤żÇZn®ßVÄlŮ+ŽozÂ$Ń~x kĺ…’ĄčĘĚ|äw›¬;î˛Ý×ë=ăÉsĹb#şÇ.xD8O¦? +ăůPŢŻ©Y¬jeeŽ™ă]ÚŽÂ4Í0*!Ŕ–ÜŤ/¶ľa€SU=O*a•oN…Ő^‰Ě5rŮW »x>$11‹µˇk˝ś5ÓŹ`©Rz‡Wd‡=Ě\ŻP 6¦űžŁÉhç&b Ü(OÖ4# j[¤M4©Ř"§t‹tyäa‚HŢ·–×"ňĘfĆcżë÷ĆѶx§w‹¬+Á•U„Q’âR'uás.×FNµnc%ńWts3v7ó5ýX÷Đ ‰ŤŻŘĂÁ‘řT)ś:l^}-ŤNţĐä±+`ô¶\5÷_á–-®Ý®×´ŢÇ…q.=U\´š©ŞčňkÝw™ +Úá%LC~Ńv“ŞÂ?ßç`ގünbMbŚ…B;ě/^1µ'ćMtüŤMš‚®„.g¦ Ľ€“05PŠXőnToE0#Qő5ĺk)\ ·xä.ÉĹ3’íY^,\XýÄA%ĂęÜkR OÉ$Îú;¶ż¬§f>K˛¦y4Ř1žČŃD®p‹śµpÄŔQiĚa[ÚO_,źßéE»Ç¸TUŢ"k2ÇDßάV€n­Ľłb‰Őńa%^ś?‘x!ó!9bŰ’"÷u`tK’k§7ş«:ň ¬µÂ‹+*©úp%M%(˘Ôw’—ä…n^Y+€X:–őą­?\·;lIMďj{ô¨óěĹ´[Ů`‘ÜRĎŤ~µýJń†¨P‹R exŚ_Ş‹3˘¨Ç›ż(ť$„PȽոś±ôÍx–<öQ·Ѥ:®ręu«÷ŃÂfáPj^笢Hžqqm@Ź`‹y%9qÔŇ u‘ş:Ä’FÚ« +LşJ>V Üĺő6H +ŕ=?S¨[ÜcLbXGΞjZ‘ *ŇbŹÎ‡Y!r?´1—"VLČŚëěÓÔ’É"Y\•6ü÷}řD ]ŁŇjÖ2!‚ŃúĹĄ©˘ůS'xł«‰˘Lß +˙!B»b‘\Ď#žĽ#‚”ŮÇç=Ş?ŻÄCBň¸ ,]$ą6 rsă)/% V`ŁC +-•;!RŮvŘc‰ËwŞbŐ˝Ńcś0?¦<“f?®âĎ8Ĺ6k-ělŚŁŤ4{ö Ž|ßĎéÔZ +Ă%Ŕ§¨„ő@STQݵÚňî]ÍhyS;#-ŁyhÍŹK´Â\0#D­—[Đ82ťS«>®„«Í aŘŞÔ{ěűů`Tőˇo¤ĚąeîTĄĂ[Ů…Ą|$Rň¦*Źi©1 ¨xuXąÚďÜ÷‡o%UŕŻÍ^”nD_!&6pú*‘}ĂČIĽ}ŘDh§D Ű 01?ćÔŁ‚ť­Ä#›úBXájŻ[ĽM˙’…ňr)ËDäĹ=>Ž÷qÉ«łSźEĄžěvĂ=őř’‘űŤćrťźX^·Qň\QůŻ-äâÚÍÁ?XUŇłBá)ĄˇÚŢű‡žul&A/Uą5ĘŹčsÔ馮ěxh¸ä„Ďşßąë•ÚëR1Uŕ™*ÁgšŁNě‘ĐM‰§–_ÉígěGdz*.2H&’ DűxŤMś®ŐbŢ ę\ďyĄ^ŁÍŁQ¤üĘłĚpżŰ—AórľĆH®ÍşICnŃ%3‘t«˙}ÎZăÍpŘNÜD4™;(~Ć’tmâ$/{A8ŔĹhsS÷uüJg6©ĚwbzY°ŮôíoĽ˘Ń»F9Ż™=MО ¦"^×=‹«Áń°ă.yëGoCk˝4” Ë~0î}ĎAdnőťWý[(r‰öŁűY¤VM&đHDpóvPÓůúzžߨúÄPÍž}ŁŰEĺ\}v‰ź +µ‚±ÉăÍąý+“€âZפ’UĹ:ć§čŁÄ8î)“4ýął;,Çëăa¤<«µµ<©7ŐŽ.üäž\šîjÇ"&ÚjTŚ "†ŰÇl© Đ‚÷ Ď~pÝëÔÔ˘6]U‰ÖIJ“˘Ě 2nbCČŁJëç"$ŃĹÝx-‡qĄKŻčEÜüĹsš#ŻęßóĆĄD!‚É@ĄZŹyG†Ah!RáŢăť‹Ç` Ňžwç^ł‘E_«’ŢFř IOD&*"F/ +q[¤—3ŘŁ–“đ"®%qJ©¨ŕE–ĹŚ2úôďÚŽdşßô ú`b"%FL÷Ge۸ŁÉđę8’|0KŐÄÇ•S*ШŚ"ľˇhç9ąNůéď¨:´}ęőü‡hHŞłhÜÖîř0‡Řń‘Ż5®’ĂľŰÓ+†"ľE¸b}ôĘW;‡ĚQRXĐII[žÖŢ nvŚ0ĄÜ[ąpg0Żh¬x-.@'¶K‘˙‘,ęË‹:-vŞ?ŤdJ.ä垏“$[7j.ĘY(Đ)zdŚoHIdvěokú,Ř—H‡—ذ Gm÷čľKäńÓĺF8–ęuJý˙&6ÁŽt¸g—úČó64ČíRúHt’Ş˛ŃŔĘ–5n*Nb’é_čc§X„Šźg1D5hl݉Tięx;đÄľ”8©6Os¨Ł™µLŻ%q\G|{GË3sI±¸yyM€]VűÔg„>Ž;)ÓUőĹxńöŮóÁ [ő_phĆź!đ 4–Ę9ě€Ńpn-B„ˇŇđ–űI_މFĽůýAĺŻ]'(âlgiWÎíQŚÖ(ší»Zúť§GŁŮlNORń× +âRŻS=Nľ@…ÁeŇRgéćŻKvšqÁ‚d{Š3ˇ¶ +góÓ#[É"âÓXr„áZ|ľZb%A굋Łű+ ‹ÔĎ38đ Ţ/3M˘žźĘ:8ľ1Üż#ÎŃnę ëśĐHH+\5ůÍ,ŢŚůŔm%»ř•áYj–Ďyr±Ňĺk˛ż\ĚĽŞ‘bňF{€÷-ÁIÖ7_v$YSŠ;*Eeá'ö•#`V?íl”T Î^‚YúR—O§’÷›ˇ°˙ă°ßckĄżj@±›n—*Ěă“ó×=âŁß6±"…•\™‚L ‹8řㆠöPDĎǵf´˘·Té`vµ&¶  ţäJ˛W +Ş:"‘'š¶„rąRâ§®ć]l«Đű€H‘ŚeŇ8N´ŹGâC~νśňÁZ]î©g3'Zܨ'L$®(&–RD€E=µěúâ¤ÄÁeȢäA˝Ą‚ł•Q4&;ˇ"1BÉy‹y˝¦Rmއ„Žu˛‡‰éýHFhż@E2*Ě@#G +\ä‰/IÖ¤¦žŢ´üđäń¸Ş“ŢQY(ŠëЉp‹Čë r'ý ŕwDĂdúŮi.~ <4?هçEď‘›¶*Ć<É®ÔtĆEŐ‘îŘM.B©šÎ— ƸԤyšzKĎůęζ+XŘŠĄ_?@·T×—$F|7@öNř) ©c©©RD·|CŁjšÇöl^\ĺ?“‹ĺč G%YZË~ĺôQ6ÍJfWŚGY:ĚČm*ÝIňáżX><a|šE¸Ą +ŰĚÓuď'¶î#N˝žďę“ŰŚ¸"­ĺCĺpä‹Űeů9¨Ţßł©D>ůNńí k­)Ô J3‘]ɱkÁz ő5U%Re¬‹ş‘v.™Z+ŽÚWzX%cąi[ŮŔjŽ ę ŔŢ>·×B)ť™Üô¶·çE!4Ű«WŁł˘<¶±Ő¶d |QtĐH˙˛˘-7ćĆ(kÖ¤E«Ľx…#˘5¨7~®q–Í‚WsY‘ę ¦‘*0.;f(ă:Ď4«ţ×7Ş·¦a\u”`%şľWůtÁČfq Gˇ*Iű9\6 ~cÎŰFŽDlłÍą°‡žÄö§ŐW:ÁW6®R`%şD‰öń૵ÂV…\)qżŐłIűžŞ˝˙ĆcÁ×Ç}Ŕ€+ĘNö€ĺ쉳Ź5ÜřΧF•ë˝ÁŢ)3WOýžĆ&qäÁnČĆ0cV;ç°yTţ<rAmÝMě§[B^Ăh§Â W솟vݦµçXuqb¦ŔcÁ;f¨żă"‹úö[ŽJ3Š–ú~$c;f;u˙vÎL ÜéŽé‰|†lw!p—¸Đ“Ô¦–l;í÷z™iűŃâ űÔĂđłuěvč[¦QÝT)Zk)š ťĎĎiÄwś|‚!ŢĎŢ•ľdžÎ*»"„±tňťöŽ+Áa–ĹCž@ÉđŢH{Ů“ŕL™@5ă(şÂHذÚPő ˝Ü + ËäŰ(Ü9aYn.…xZÂ.@ŚąŹ eťÄĎ&D.nń›g ®2µŃűř2j:żDT*0ŚčN?6DrĎ"»¶Ěn "3'ţɡ—ž4•*#w˛Mĺö(FłKɫůH˝xŢłśÜN&h´ÁĽĄf‰´;ň&‰+@7Ô)2Ř·gżT•©i«m'Ú¬Ŕk–Żů‚ÂÔęôŠ–>–üἦ*,ŕ!*Výäň–×Ů0’˙ťžND$ůşžssńŐ"¶ŘrU# ŇKĎL9‘ÇqÓ¶`aäI˛ĺĽTĄáŠ‚a‹{0U¦f§Dů!ę+& 'ĆěsŤžkj>Aă”ńŢ-¬‰č!—[tްôąá:cźrŞxUÔO"Iůä/öVąŻo‘‚k;i6Ĺ9nPk}Ó}ÚÎď«2ˇvنçôN™ë~G©Ě“¸ł2–)3łíÂÖ`Íđ¸ąÖX[r± >šgH¬úH[Z®C‰¸Ń^Ąöébň0ípeTž@Quś4Đ|}¶­Ŕđą§­Ńbo6Ő‘< ´—x:ÚzQuäM]躉©­€NWKޱ%¦"éZ• vD|ÂlęęuOÚŃŞË’9«äęč{ŹÉ‚ŚęË`® ú¦Ş[űţ`‘MâĆ +ź‰Ú ę?|†™$CY†ëł/ZŇşzhyGx§'Bňš~ńĐ’ Z´ęqůR +·b|Y…ź"‡ó5pL¤8Qĺ°?™GQ4ŁL|\dzžGĺ + DÄnĺ<Š}îş]ĽŠ ;S)ąx -#ľTřé›ajD_ű:~ÍÂA:çN#đÝĂ{ÍÇve‰ý‹2ďúŔ˛f[WçPµŠglhËI[ 0…ÇR‡ă§ę§ş»˛1R7î#ö“sśT?ŕŽ|ęď:*ÚţŇ9"w žL$1ŔűĽXp„Q’SĽyµg™lG°íĚxŽăłę[űöâ‹/jeŹÖbkI?“/qí říhÂDßIż +37çA2ę§`Ţ ĽsjăkŮ+gďXŚîĺŢ"O<Ů+ćŐŮf bĄ CV č‹qńV.D’‰”†[Ź%!xA‚éĽúť“úĄ+ÁVôÖÍáđP‹$Sqd^ÇƢÔé´—¬‚őŽt•’Y#7-ŤZ˙Ł"×"ý7--3×QJ:xvOh…‹q!u ŹërL—ŞŘĆłźňv× s9ë=ʦ ëAňąĄîjř[O‚U¬rŹ hĐę${™čÓçF–YŤĺĎőŘtd˘c…㢠0‘r+’Y%sOŕ‹2[‹ź9÷ˇ€‰ZÂÚuěč4c‚řCJŽwD®¤ˇivŰő ‚­€“rÔ­“ô"m&—b3–\@„8|cÄĎĺrQ>öÂg——§Ü´âŤXÚ— +ŹŽÔX‰»Ž`Y^s*şĆ)—űUt+ťŔć51%ĚúÔ>a„!\„|fZěH2ž»– őń°č€˝E¨Ě]ĺŚĺ>Wł˘Nôąűx‰´ÜÝn¤}žńEáˇá؉x(R«¶R‘Ů<ďÇ߆«ĎMU0Ptp\ +UŐő}/ę¶W’SKň.Ň\1ćgj›ăÓ””ą©ňąT ¶BqyÇ 97۶ę~Á]ç·c(NMżśŤ€ň3Ąă}“‚eYTsv@¸Fl4i®Ň D2‰>stream +0­G ĽOTy‚H§pŠ^ázbwRňoÝ3Fĺ° ŻPzL÷™f„Dä%\ovfŔ~E]Ľč Epm¸‚S¨„l Nöz^ «ó4¤ •#?‰^^Ą¤‘VÓ!%y¸Oş]gđ IěÂ2Č“zĺYĎk>Lág"hҤmÝ;Wô†KŃŇć{¶©ű>™ľx啾<=ŁĽľ ĺ-e ¸;Ő‚;\YBĚÁMż§<ž\´ŘOŽĹŽČú0~-޲o˙S2ěśk?XѱŕÖĬ`ŽđusZ4nö1L˘†čEÎ~·F'µŤybĺđ¬h;D$Âó•/˛ŞëĘ6Ő +t¸)…9‚ěw©z(Ś_w;4PާŹŇҵŘJhµ ž=?F$Ű ŚůW4”8ĂÂfÖUt3ϱ*ÂÔ]ĚJ釙‡ĘÄ`Ö´ZaúiÝŐިMZSn 5U°Ĺ”DĄNR­eĺĆżEëâ9ŃźëŘęOîk†ĺŹy˙oâóż‹9™c ‹Îť~Ő»ţĽĽÔŇ”.Yxü3*؅ߩ֣s.ˇnnŃŔ,ŹmśóXś¶›ž5W;]6ąą€Ł¦ş„Y4Ä„;Ťż<<`’Ƣ=řµÎA.˝ćQłL «zŇƧDŽԥɋ™žáÚýćÎřNPk˛óĘErŻ«˙<ćúx(LĐ´q\çNv˘hĽÎ<’˘c'ŠÁ˙ˇu݇‹rśN"›śľÖŇd=ŕfŃbłĄTííMF®%ëě:#jâµ›Ô¨žĹ[,ßńŤ ‚‚ŕ“CYH#U]kŁżRwM îÄ5ÇE˘u°đí˙ń€Ů1bâ5#cž]BżjĚ4iđö<•vö4ĘIň¨Á›¨łu2\„aôjźo6f„fK­%‚+;‚•­{u +Ů;-Ö'P„x®Ř¸Ń€[˘˛BU7\éćÁbâ µđN¬M@Ü,ÓšJ†¤QŚŮ +3Îą:}4*ő¦Ň´}‡Jä1á‚EnLĺÜŤ2Tn4j%?¶Ý·s–Ďsv~ď™SôĄęúŞÇ,§ÎxÓš?bů#dż]Ł˝ECt6‡hôÉţe›ţ3!đ}ó5'{;ł+ÂÓߣľÓŃŚ…2.Ń2ŻL™H'ćý)t5>)gk ›5W”o¶€Ř¤;H4^ĎË€v‹ Ě!đĆÂç9r|‡U牔n±…ĚK$ް‰9¤sţ‰ů©č°Ú„%(şl6¦tđ´¬\š†źZ5HvýnÎ\Ýf+Á'ťŹĹ€°PͰڋ9†•©ÚŽům"­ÓRsQr“üřq-±vi—.t€d=ýÚůŕף6ĐZM‚!Ó B¬;„ʕĖKĄşüě«Ó«zß\KÄß“‚Há(9.ämAżă‹7ZLä!mą =4ĆçÖŹ@ .5Ş3ş3żĄĘµI…wOú’ĚTŠJônŢ(ňŔ Iřŕ xîä›wźáĂcy—^nęf>áÇ÷+mVfjEIm…’č‹–˙˛ć\uĎJö źJäß`Š™kéˇńŮQŘŘŔŐĂâMŇĂsSfĆ•<ňŤ¨‘ęłXúÉŠ¸±ťéáóÁőú±ŠănrĚ÷xďÉG9! č‚ Ź©Ôp¶äŤţNđCM0F şËŐĽw|©5ą; _RBŚ""A ä-WÚŢ-Ę·"¶vw­<íŽî·óyf˙|·‹méÚ&1b >ŞČł’äÍt–ŠŤŞłoś8Ľ¸I$ —RÚą“ +ž%§ĚPÔ·…Í%6;wĚî[ž•t€'ńBPŢ8ínéD{‘^¤kŰS ËEŻî+÷Ś#ÍĚC¨íĂr xŻ&˙#j6+O”ëdĺEY¬Đôé7śW:x˘Š®üL‚+śŁăÚMFdőP´Ý`cŠZ4ńĄ$‡ P|ŐÜŔą‹đ9ăŕ’]ťPL—D«{-™u`?\Óöh©ŢŻpŤ‹ +›I Ř“}Éń|Äé±ZLG]âÜćDCú;ŚBoG=‚żf&"yŃ=Ҭܼ/XČz®q ޡŻńđëÝë 5ô“łĽ˘ëgkχą“hÄ[ßň/´{&\Pr+ŕse#+Ă­EK2 î‰čQMmŁ%Ž–Ô¦“ůqö¬adÉ59޸ móąyÓǵ 36}ü¦ĹĄ:–şĽ·–žŽŕ´Űeđľl¦šBÖÎhů6GĚŚelç^f‹X;Oź<@¤*Ř‚ţŁkQ‹ –h6\yü# #,ÁŘÄŢ9+ńX_¸‰Ě°~đ®ĂźČłĆrµJůőüů6]Ć"5*W·‰đ&ň6ebM Áן€LĽD§©Ĺí2…1 v{LCoÖÚ&"‘C/  űĘfGJxjHX¨đ©?@uďGí&ؤ|ýÁDüÓLtçsg×Â%ˇv#í‘|Ĺч쇺ś˛tŕ¸ümTÉ'ßǬĂ{ܧˇę(H†ÇA{€ßvĄí茨n°9;¬ĺŘ Ę–!<ňëQôTĹëA›í ‰Ş±Ýŕ˝Ç™Hćă*2đ_-Óök5ě<'Űď=¸Ňĺöą‰ýÚyw»Č48pÁăJGsôbȬc?Ă+Uň•ŃůŘţč4‘i1ć>ČŘ ’ެ-’—ŠúA1©Ŕ­‹á‹FˇŻýÖ•Ô/ţEih "b5Ú‘3ăđĐHDFťő\`ŃÚ“oâ´ŽGCr`HŢ?$eŃ®1C„G•CŁ<¦oŰF-ćJ\Ů3ŰU)÷ĹaŚéÇ’łeá%çĽP­'C S]7S=Ű>:–K˝eëVőNvÄ­·ă$Wv-ëQP­šxxnÁ'q;@AoIŘ6ô~"PÝŠvîfťpŞĄČޱMŇhâŮo:ëí;}Úc4~­&†{=E0äŘ0t-bŠWWYŔčZ‡a–‡p:äo99űÔžÖ(y°sż“WT 3°‚vâD€5sňG›˙•ÄW©Vű^śKyËÓWrľ‡AbNUąá¨őî>®BS[™úµŞ]D˘–`ü)=ĆůR+“ 2“QČŮĎ`"+‚Ü-űż®¶D)ąo&‰ČČ)2jîťcNć]—O†˘aŮܱ«ĺ`ř¨ĺőŮÖŚŹ5hȇcžóčóC.ô±™XO~čOlÁ捻äĚ9I`_"ÚA©FţŤÂa$Ć +§Ćgë¤!‚Cáw÷+_aăÇČróőh˝9çő€'łje‰íÂ<7ŐµŽÎhÎŹˇŇ^dŹÍŁPĘ5Ç|$ŻĎ™c\‰Ř¤­Ę»ŚsŁ źB˘Ą`źÓÚ˙ y3—7ǵLąŽ‰ôĆó’öűUä R*íť}rŹ5ËCÄů*/ ÔÄ’Đ "<ŕ×áˇJ•üŢĂ©~ÔŹCؤ4'áA'q2c%Fř9÷ VOáyůăŮ—Ü o Á„ďq»Ą`ôjýLOĐÄ×´#˘jˇĎJđör°?âŘ1űŁŁžĚéě*ůf…‡w€ĆâĹpakÉ_íYd‘‹†Ž/’#¤űň%ďY4ŠŃ:ťt1°Ěd 3C úĽ‰eř–ä:ČŔ$&‹OW•ęĎŁĐ$ąÍÝĽÝfË9őŠ]ÍŽąĽę«¤.Á{ržKţÁ†Ô ŘnUâBX»b) âČčËîJ]Ĺ:ĢĹ~(ó¸ĽćďńđGkNűÄőąµÄăQëzĺ â3$ѡ’;îy&ŇDf]¶¨xçĂOjá×k@UO ÜăŔ?V Ô;ű•ýăĽV™´BĄRr˘M'ő‡+– ˙űą÷}`Z1ńóđG÷o…E|*6ăśňžĘ‰ekL‡÷Ä|R‰uśAy¦@çôk)Râ›wáI—:€áy%ľ? +«ň†*lŕűgŘ˝ý'ÍWƵú‘ěÍO`_"rTţqRç«~;’TšwË›A4ݵ–¨¬Ő*Ă[Ž×¦Ž˝|ОÉǶ¦0ibegDąŕe×BË ÷54–+÷Ż +`Ů‘n[Žšş3‡vÓ3ďŚ¨ŹŹţxüž•îÝGą—üçNĘÜ#×ŕŰf.ßňˇ:jä#&/á*ŁyÉ˝i´·hßîúcU«×ŞhŁťĽuI^ Aę·ňÜŞA=;¨?ŽľĘဨÎ['ŘĘÝ"Ć&Ákëä®—n2o•¬I}`Z{´z±Ţć㇡ĺ!Đb’ĄŰIínęV_Mg id($—äÔĂŚcčăĹ`/—fuő‘ö fC[»‰¸Ëó%z»yéĐ_8uĆ 5M;ŔĹ ŚHP ĚÂőőxÁ˘Ś- ż¨x3“1Ô¸×{ âňbĎ}Iš°XŻaÜNUŇ“U^đÁý™T+mjČ:f0…îÂô|˙(Ž*ĂnÎÁĄŇSL+z¤—nh±ŠúÎ~µ’kó­ń`‡}Ľ‘×YÖz°°N›HYŻ˝_$}Ű”ÇÇş±Tˇ“«í쌮ĹÉ*uOßŐő6ć{,HşKŚMÍ0ĎɰgÄĆŠnośń +ľ™hŮBH‰űŠwí´F&†GÖá-ÚŻŚ§×“â~Ľŕm5îÍQôđ_ľbb/¨ôţĎţCn9>ĆĘíoű!DŤ ¤>q=ЬÍÇ÷ńIb«Jv`qĂŕţÄś˙$Ľś,X˝1,XUÉŰ´óÜvČ—}ő\ôçeHE{“چ‹vŹĺť‡ć6!ěk^Ë’üÔwĐá؆ÇÇ­ Đi\G·—-!&‚ "©q{5˘uĄ•jůčłÖÜĺÜ"ň+c? ]’UKD:j=YŢŇôŞÄȡ+F×Wăi’7Őu_'»)jAµľ_s×qě,ÚL\JŢž9ńK!×L¸MŐŤhŮĄŔoţ$5‰šňA7U5‘s–qžäćq-f®Ń4­KÚ9Făˇ>`Ú™ÔBähŐNJČâvĽ{âmßM0IÓcô‡ŘI4Ť›Ç MżĎMăâ¤řT©^3çîćOq;ň=c‹a†íA­ZĽť\†Ů:/Opŕ5DÔ~(1O5,G<ş<ČŃŢ’ł<9¤ÁWŘ"ÔsŹ}y§§€:żýgă¤Öš#–ZÝŽĆc'•űÖ*"Q‚/2¤V¸)Ý"ŚžšHLV;ú¬ËŔű<óŽy»¸qmů쎜:!ďv/âÎě0 34óťËjĹř“NEç:Ň8  qój*x¶Ł浸ˇ‹m l3:lłÚí'ĹAf_q‹ČżţA‡Ë$ěrZ$*Ű+ś mľkë?´bjO Éoňű«X­˝x`îäâsŔ~@Đr°s Ĺ1ÚÚŇ, g¤Á¬ «‹bÔÂ/¬Žkľ:Aňc1úőݵĺ˘Í'=Xç´%,S1RĄˇ”8®ĽDÓ¬š)‡ÜÂ…ššŮWOtXËG¸ĺ•žă,aRĺ[ĆYXŕúeęÓ×ÓKďTlUĆ<ďXÖĽ©®80Ôz¤,]aȨM ýp»š)"ńep­Ě®vąĽ®ji3Ďžl_›ZŽ$•H‡ßzpߨZ&żĽŕĘ€|:‰1—±I{ Óď€˙3ϸތP^‹Űcáb¨Ď+š; ťBGµË9SV>x´@SL@ “ǵžŁ’přRF‹,˙ařyíÜ‹Âí¦Ş_Š7ŢT3ÁRdv‚l@O^SŐĚ*§‰×ĘIsÍ”­ (vő1ú-™—ś›­ńôXŤ†÷öŠĂtč6…D A%ĘjĽI*ŠßjÂÓŃ…ęO3<Łá™ůą ’Ç:[`ĽzŤ×é4čô*w#7ô0ë±fH´ain(¶6M¤ĘëńĚĎţC%& ýŽrv«ß +ÄĐý\0'ţ&’ĐS»/,Aža¨¦-¸™ÁS?hs¨řꊢH2Řxዪ‰]IÜ'Z­9ő.lÜşZ’ş`VEBY§&uv‹%bNQ#§÷ +3Řą9U©•Öô8¦č‘Ďđ+ZŘăq)ąc"÷Wx‰Hµľ~Ńß]&í°~­w,˝ż&–îpś_€I°ĘĎ.cřŻČ|ŹL#đ˘,ěi1én ë1•ăMeŚ®1d0Pŕ,‰OŻůą t× p>ď„©Ç׊ΓŐCäĺÜDÔŹUxV¸ ++‚ĽÖŁ«RŕŮÍňLř1G>rňŕm+űýš…zt‹ë5¤+Ruc׊PÍ(9ş…Gˇ0ä_ňdšHcśhw9Ę1#o—š/p Í&‰·ýĐuUg^Ůů\ĚćŘí  ‡S’ugţb×ÁĐL¤€Úf:Í- Źľ %ĎWţLä üw4”žJ: äD—m?ĂmĽJ/"ĹăÔÁŞ2ňţĎ%/HÉËn…l…„¬·3:˙÷sT­°8Gđ–öXŤ0Wtž‡XÝíĺ8Ä“…¦ËwUâŽ$ZH <Ä rłEÖHrHM>1I<ź ¬&fčŃg›ťÍžGÂęÄ)ҡc>Ä!ťŢónüc!cŠ´#7/wńş­cz§>pn˛Ł\0vźşw%+ŰK®+OŞçuźywěAłé.ÔOš:tx>T]“"N]€śÚk¶{by]‰H¤gą= ú†kľÁż'°ş.3BFŘR1&-ZN÷§¦&’X/u›)H!ŽąťrĘ5Třśu7ĐąŚô9Ă‚ żjqś<ć°‰čĽÖA±¦•$±¶“âiuľÖíöi‰ţ‡‘ĂWąŐîĹúöťŞĄd6Í?Ć÷PŢ'Á{ő#‚jÖHÖLU%~‹447Í-ë´l$QÓĽ¸É ĺ]ą'oŃÎ_ŕúýdĹrźÍ•€w®ąó:ň8”óśÁ:Ő2řM|‚Ž…ęĚ2[ăÄ´c…9—đß"-Q:S)%µqęÇ­”ʉ®EĹŰ”r âľ™Ţ*MŞtŤ÷Hµ§î%úĽu*e}ŔnëS•#îÁH”˝ldThąvY¸ŕi€ď÷ g¶ktzNÖhĆ_”Ħk";-3±ńŐiúSëÇ˵’eâRňł4n§ËĎą1czŰ< +´äJ’fŃÓŔŤPö É¸ęěäJnneGzë (ëhH„s¨A$wҶj–OT*އőgź΀ç:Ćt°ň+ŃĘÜÝC·}´)żËÚ‰ÎĚFô>FBĺ=T{0O ¨d‡›ž+‹Řr– ĺ'¸.BÉ2’Śp·ÖŇWY­ĹĆpŁ×UŻţ9ę˛Ě)¬Ý·@kę¦bhWú{lNV ćrź©ăDQůŘęë٤¤ť"­Y!>kU)1 čŕŐőŞN¸»{°ÂŐg@•“}RŤĚĚ%ĚcBěŰ.·“”ĺj‚z:3RvĽ‰îÜ}Ş›ćyîr=ň+ncżý +O‘ůŐׯú{)}­śhy”ÎlQ+Ż:xČíĂ'{™ŤrLன|+%ŮCř¶·$r°7b/R>!UfE Uaőľr‹”f‡uă㻼B@sžĂń9rÄ“„R}R ˝}Űű ×ĽĎ +0ľéŕLménóő$-Y×^ă“Ćöó,łw‹Ű Ł"IÁśűµúGpŮMc›(f1·H»yâU1KŔY@¤IŁ µO±â/Đë}¤‘ĺ˙ ‰Oĺ\9ýí©I\J»üx…ÖŹŽw2<—•×iŽŁcŠnĐQGuőwzŢ?xsAłÔ•čIöCçl€ňAGôë‰őĂ~FrßťŤß©čp=Í»b^xŇčŞL‚· Ë`oŢ­Ž/‹Z°‚$ö¶˝ŕ4^soĽ 9°Ż´ň¸'¨kZŕ™ş-]ăa‡}eÄŐŇ(´R:§ ńT±ŞÁOá&j'd: Ý ¦fîć5˝ÝP,)VŁýUÎ˙« ©~0ý±ĺWAţ Şçă–ë­+ŞkˇáavpŠ•Y{Uˇx‰*µłÓ °ó°ŤŐŁEqĽ#ů'^ ˝+´¬$–&bĺP» ˘öT·‡…ô—+Ş€×9F·ą~xVXŕ3E¸¨!˝ĂŚ›g{ •r€‹!đ˛Š)AWMfNµ4•á./eFvŞűLÇ[¶S~Eüýřľjq’]KYŇ+{Áđvjĺ_Ó›€“Âč·X¶!ÉŇĺün–?2)’&÷Ô¬0Ąí}hćŔ>5îĚÎě.I›Wh”üŁŹŃKryŕÜ…‰éet"şe %ĐYÇ'Ť˝kĹYNá®ňF°¸-;p…!† |cD „oE±*Ţ´ük7Ă\Š{uZVʬ< ‹e#ůÄVSrSšď39ێԕׇQťFVŕ‹0l7·ÉuqČÔÓîç°íħs)gU.żYU%Fl ß3I<.[T+{ó.y(ňĐKX<łż[qđuÂeµąWŚóAĽd´ “WÚ¤ŐXł®Űň„©ËŤ·ĆîÉÂ$ż +íc2>ęHŮwÄk^Š™zvWQ˙ˇ2x{ )ď9t&Çű‘‰ĎÔćď:Şe…°Vô»¶Ň_5ókśKĚ“FýsÍmeôMÖ›0śbĘz.‹.EĹ‘*VÍľ'8 8Ŕ^ˇ\dFb˘)˛ŁXZýهŕZ6(W”ŚŞ'DĽŃhrÍâ+ę|ĺĘK¤–ř¨Źď ÂˬٗňP\ď^)ř×ŕjělŽý +€ö3-Bć9Élŕ±&Ńßm‘Ú’ÇNßĎ3Đë>Řlsâ%‹s°–fDrŐúžeą…łk±ßqřĎęg˛›hîu |@‘ÚŮŻďĺdN× ŘŘ%Úf”ěq—â4¤ÁyÝ\uâ®0Ľřŕî-ęŮëzh0łă^Bů$|¬-1 +/6 tŢ|břÎK‰ő E‹–?…Ô±‘¤~ó~î +7І“rEÚŰM$Ůś÷Ż€Ŕ»Ţ‘Ü Á—=Ě$/şÝŤ.ś}®đĹéÍŹšű 6K°ŕöC®¶±ÁZ±/“Ă%8…ŤđĺtAŢÔ(şS-ĂČ+ŻÇiá‹©ĹA ůŤ#¨đÔÇňÎěÇs±ňSř¨~9›łÇ™-qRŐ]”¸w+WöxOĹË#–Öx¤˛0[¨ÎŕgeĂĚܵ¨ę ĽđÄ‘5çŇň—Ľb˝3ć™Wş_bTŰHLŘqśĹ˘Î™K˙ŕőâŤíOípîO&5„ÂţÔĹÔtđIó +G=˘ŇÚĘŻ$ľJ“.Ŕp$mt3?ę÷y® A´˘Őě;ö®n|tĐ™ +$Z\´'ĺí'´:‹}±Yr¶ť…˘ł|č×”·ŽäÖĆ·–\«2ě ˝şS-uE~jYŢsˇMgoµĄ>ł‰đú.*ç(R^hQ;HNśEż㨜7GˇTá|˝Ąş3 Ę,»›Ňb‰™kc…qšlŚŰ*z”óć ˙©ßÉĺ©%2{$ö¨ş…Bű!¤” ŚěĐ +ěŽ=ĘSX¦¶^ŕó%†m,…ËKM W}«Né!Ś$]ÉYâ!ŇËí;F€ĄĺĄÖť$X*Č%ži¶\řÁ­oĽÝ‘äHÄJ$âŘm”Ôäđ©Ć›7ˇzŘíĚŚ}6T…¸®ŕąŇK-ő{íNčëÉX a0aˇsXG˙–„ÖŠ6˘˙˝\Äé î§ŕ°6fC –UĽ|7l ˙T|L4™l{Šz*ú%ź•0ó?ŻkIÂs Ňn}^!Đk‰q»ĆÁhŤrq;9ä5ĺü’×€‚ţµw×Ôóü­y:ËI:¤á‘ęşáĂ0+P>†‡LŞ"%€89äh„Ä©ŕFW.őš•t+WG^÷$´ňŻ]C&W?xÉßă%<{ +–Ç[7ů‹Î&4(“ĚEL•żđ9ÁćpgŻĽ§3GYěsNšđ' +'-!“Ôŕ4fÇ$ą-f"ŮLl ŕIň@¶Äp#™ĘO8üńtŰź› ŕĨX‘=ŕŢ»ná‘Ýf!]ľ?WÜ­FôUăŞă©•= A@m +ŤďĂQ¤Ú‰ÍŃÁÖ™ËŔzÓĹq÷9mČ€¨Ł†‡ÜN +„†ôąM!–—ëě„Ó€Pc¬ÖÎäŰÚŠĽ˛ěÉęwŔo6¶ě"\XŤfÍE”-"ď“HQˇŽ-§? ‚ť®Äß$ ôě×Ň6Z®aCʇZö+lXUĎIĎM—‚궤9†!ÂäXq©ÎYĄ8ů§Z3‹z6ť#ngDľşQ°cˇË(V2Š©&¬öä<Rąm:Ţ;{+ĽżdŁ5aą_cv5‘|6:8!Ć·Ľ˘óµoű…p9p(fyúAI°ŽTQŹÖ"k,´. *âBLú¶Mຉě°đIzĄé!đ[ |.vm^6z2ŤVóÔ1STĽÇĺ÷-·ú0‚5 ‡JxjŔ|Ę o·Â—Ď“…n•˘MąEj®@şáLP„L‹ľkÉkÉÝć̤î¤/uk,sF7uźeÄšIf¤‹‘ĺ7˘üM–+v™JŢŞ÷rpË0—łŇ"ű/ľw]]÷iţ. ó‘-'ÁšŇ¤$ŕ)|á{€¤)wŢ3ÍJ":łŽß”f2 8PŮ^}..L^ëOĹ^ŕp @öĽVôb,H’ŕG^FbgÁG/5ńWöˇ&ˇčŮr4+t2ö]ť çÄÄŮ/e ~y nD/lHĐVO¸áĐ 4!đ)eµ$U2‰‹F$”ĆíäÜ%u°ß¶iç +_:’Źät˘Ĺ»ěžźÜ+vş•Ú‹!2ÇQDÄDZ\ź‡l„ÜV!Î8a ąő“ĄŕČĆáçç˘Ň«Jř˘r\ŃŞ­wcÜ©cµž:¶Ľ§ Ů6‘¤JŰ×z¸Yd×R—玓±Ź»ők©;iuZ>y윯Ú" :IÇiłF/-®˝»é۸Ă<śjşÉqG“ "ô·fľ(暣˝–ĽČĹ[Ŕ*E{DÁ„{»ńŤOś”·ČCś*ňi{D…¨)¤B-§Ż~ +)Ć5Ébź1ŔáWs SűŕÉ9Wăž6Ccn‚¬Ž;Š4Öř®ź…ú@˘;ŕý4ZgovąH†K`F,ýŤvŰ”x„ęmsľăČŽ_ł#°KÎђdži `ş/‚‹ŹK%l™Óz"Â4­µ—ڵůŐăĚZŕĘ}ÍŐ{adŇ[)V˘ÁÍ'nşíÓZä’đąAaöäčŞÁ #’ÜFl—ąRO,™Ć¨eÝŮąP;AQ ’áPô/czŔß!Ń‘e˙˛Ę÷Ś–=Š4ă S7ĄŃě‚Ŕ,Y-5‹,ŇnbTäyž +?LűÁ#ŚŇSˡ&s"ĆPě`ŚcsňÇŃĂWY¦Ó®„ç† `$Čď!ő8¸ę65#WÄ×Kę"ÂąôD«u Fd€—şgbÂĄZň¶Łş;"kq›”+ŞąňG‰ ăí#úíŰ÷R‰4´Eţ¨ ëGŘ‘"ňgD”')ď`¦'×n€0ŰVwŮÔJÇŘ3}z×fó%¦r5`ÉMq‘ăy­ŇüŘUH¸“Ż‚Š71ƬęĆŤÉZöN4楆9ćě+o5‚nľ6YС RHůXĽőß{;öç7×ëuż˘Ť%2u\WN!fÍT>bV0 $wƦ±b c¸H•„vÂLcG7]a†ńLI".„ň'ýě6ÉéEŠµÄŚ ÚPEŻ”ż¶4…zřr­Î[%!`·{óyvy/çbMŃ^fróćs¤V牊î+Ç»Tď(‡·W(ž%߲˘Á¦‘Kë™čXŰTÔâ&ţ-’ĚÂÉcbvđç0ůŐ۲!ĆŔĘ>cHT:ˇÄB$:˛·źřéWzĆĐ˝r +kĺW0ŘQBaőŕ¨ëŻ{•čsX.ă JfŕVąÔĹĘ۶Á]Ľo‰hTşM–#¸Čk¢DŤY‡?¬c)îX´‚¸C4‘/˙ +ďyŐŹ^ó÷lI”䦩4zaˇÚÍ‚6·Ó3O,ĺžś¤DE$ěČeĘř¤pK×U»€v2‰rS¶ź @[¤W;ąq©F°`ňş?¨mGXW!"A%OŞĺ~(6Á†ú=,/»+q ő0‚ĺ +¦jŠ-ß@ ±4†˘OČ‚ÎN’&@$+ěŢÇßţZ٧G¬q–čĂcqáđ%3z»ťÁ´/>7'Ó{p‹¸é˛s:ígNłhWç\¨JŐ\ŠÚ"wôĆýĺIČ8VĚÜ7•OŢM9–r›‚ P:®?ÂĽë Dj~śâ}čŞ]ětlI=;EżôúÄ—©R-—{UJě¨gđ?ĄŰśńt…ľ­ËJM¤Ó"‹Ě¬č1—_Ţ`ŢŃĘeľ‚mşWżkP‹˙ŮJĹ…yŘ7vĐS%‰nľgýÚ† 6žČÁ÷d ţ‚qÜš8NĹa)"9ŠZĹĆ–'Şë¤çlóÜJ I™ËOŤ-A+eŢžůůěMŻ;FĐÍú·‡Uü9ÉSpÇÜzÉö&…ja„fI·ČC€^*ň”҆«ž5ŁĺmúT Ě ĺ’÷.Ó„}s[›‰ĽŐ{ÚJHV3´ă,…Éu˝lD%EÎMvŕ0#őpÓXD’¸ąüĘŔá«´j`.˘ćYNU~Oˇ ®`Ŕóˇ)X0<ĽBđšďĄ@oĹ9żk*%ŮŞęJH:|e۵ű&)ę7‚VÓJ†ł€â6[—ʶ´˛& ¤&Ź“» eJ\l:Ýľôĺ×z0Š{ÉŮ–„f&ÚqŰIiͬĚA«d†•‡ť4źĽrć"˝Żö/J4Ż =^[Ҩ̔ĹNž(éŔ +–ç=„3¦Ú2s(53(Gě箌‰7ˇćŞČ}6µP8OőŘG8VťRFß1űwĹ~XÄ&É*nşĐ®Ü#0íuB6˙•\ň"Ől‹•€÷~g­ĹTóJ*ą‰yÇT3öŮ÷ + –“ Őç1äśËaĽůĽoFŢçš5ąŹ4_ö癟‡ŚajDѲxŐ5±Ů,yV-2o7h2ŃDŔŃć›ĐŞzTxČN ŤĚCŃó KLzpó„DôsDÉěŽ@jöX“5ׇßÂy…··-É­đmÜâ›ĎđEŰŠ[ę:ĹQ-çyp 3MĎ˝fâƸH H‘ŚĂ WLş’÷‡)’5†LŚš-r€«H<ŐŤ%’©±ˇR=ÉôĚľ9Ć­żĂpËnnżr™Xýŕ]O©¤juŻăŁÍ ?ć"€mŚĽ‰4[ Ô'=5Í dţZ*­ţL¤•łL>˝ˇč1ÓšýYΦ¦ŐôTDK9i„ęČ«Ť ‚-îhQ„Í­>úů¨Hç"ďI÷ßTdr ‡:.EAJrçv†Xáîä°/x_\Ť2¨/+ěkA ( Kżµ˛! )3Ń-"W%W ˘µwן™ Εü†aęžÔŘ*rMë'™Őµ8qLF5 'j‚ă ĹňG|)O˘…R©éKţC Ëľ9BEč-l‘zóBŔ‰‰î7®U$µ1ă©löC˘LžÖşČ¬3ç—âËB»p!´x»¤®ÉďÓűňž +j‰éÉéÔ‰w‘çÉFČ­ÁĽ7‘lxިKâLćýHô’V•ű„öCpów웫Ҍ–HeńzH÷be‚NhTpN•¸çť.kÁ¸MŰ] ýQżˇáGŔëűbw>ćăcÎGĄJ§M;ËO —š$ | <Ľ[+4¸Já•x/%đ’ą§Ňű3éÇ.Ľv3łŔcľż*(rc}ßM)÷Ń\h‰«„żĎ@ sÓ6J:g›•›¸ăěúÝř?r}÷ÉË >´?Ě ++J˙d{ý+ˇşÓźł_śá6LÎŃnżF1çŻ ľĘ¬SÇNKÁnó“@aßS&řQŐç2Š+żś- +ÜŔxBĹEĐF˝Ćg?補·śąY`ŔŚ„ˇ‰ŤÖ}-ąŤ‹×Ť›ćźÉ•­W8ČT“+FőĹIôŇAÓ”Ö,ěő˧Ď[3ĂÄŚŁ^^ňÇ@gM• ëm…Yť r¸mۇ"™ŚOłxÂHhXúĄ%őyQŮ#Ő›„ЦG演˛˙>™záÄl^GaŢRiY¤ˇćbÔőítŠEŢa1˝ďć\*ňjî"Rčą› Šv˛€˙šĹw÷ –ĹŤ*ś˝ť'· ]sm°Ěź;qU)H’ĐŞř¤( őîÄîăI¤t×Ę /iö9 A‡‚żI¦ó#ërEz ÉŁČŕ7=ŚDŁřÜQm”@H,pE›hp^Ú)ąŢŁl î˙ĽgvŕëžLgňRŁf‘9« ›ĂŤ +”?Gu %O‹Úů˝Nč¨8|ľ|çÁŤĽXQ5żÂŹŽ•ŘŽŠC,ç“ę[Jx”cň–ě”,M¨1ąNUBsT‘LC5Ĺßç^ź +]ť÷™¨î‘ýP81wXâiË~+Ĺa" + µhŚÓLWT“[Nyb€â‡î!ÓŞŻ_tL=ôŁE1ě×:c…G.¦Eqł$fźë¨Ś ż{yŐbŃi»I‰± 332‘ĂŤŻŹhHćµćâeąő‹ń3Â4b‰)@lěUłRčĐŻóËĐMü%"răäÓ”ŐĹL†őúH>•ěą„oyTµĘ.Ý"­DZĄ"ŤAjăŃ;ŰR‹Űť‹Ę9ŤţOĹ÷SŹ +4l‘ě4…Ëż©f˛eĤĐ:Ľř†˘?Rç}Ę-Ҳ3˛E‚µ-©}䲕ÝĎp¨M;‚íÜůT‘XúŮ:ŞŘuo‘SĎ1vš#`[Ŕżł˘x%űţĆ@Ů[$†ĽŞ˙ëňBęY¤ĹŐ*Ečt?…T¬5; Żł~đFĹ&őˇüRmţ-}?U>+ĘĐ´Rµ0ţČ+?ŕÉĺ/{÷:ŇKĹ2@ŠG\‡ř¸‹bdš„ś›jÂĎGdłqX®ho“Ä`¬ŚĂŇęHÖ HGŤŽ$óŽ`Ĺ,hĐíT×’BĂ**R_ÇĄŚÎ]č_(N(Ö_ÍřGÝÂ1ş‚čđ(OC„ş¸á‚&s[o©Üu±”®µÉľV’ńZÁĄĚŰKeŁĎĂi÷¬ňßĐÂę +ę6ŁžëΗ÷ĘUDžÓ{]q- »©é ®5’ĚNGčâ7Ýj$´ż*`ř*•Ş^hwE÷ňxă^°v.‘&aU‹2Ôd†lühó¨ŕRŤŻo<˛Ç(7¶†Ö>ŞšŰ-ŤŔ4ď.xŰąŤ@JKw ľĐA÷`!Jł‰L• +wűšŤÖ­—Tź-_}¬ł!LU˛¸Đ7/ľ¶Źp(vbľ1*6sĐşŮCK¦Y‚‹ÝÓíńxĐJâ—Ř"Ő1+˘őěĺ"ë]Xď^văň ű!›¸öR)ńŹxčÔcCÂlZśŠUFL]Űc˝P‰4t˘b $ú;„ç6ś˝›Řݢp/nŠâ„ě„"ĆÎ3:Xi&ŢCÉęŰ>}5Ćá8®Ě¶ďŁűKQ°2śpNź­PËÉeU"ČWÇśÖEǸž#AϱĄŃÚíłň?GĽŘ(Z†űCnAsF+c$ŕţ4°–© +‘»ĽACw?;÷çTŞťó˝+­i' Âű´V©AÚe"µFĚ–u"&ňEđ#ySěľZęr݉5¨"Ô·0CQ `SăĘš&<ă€L‚w@-O$Łę ěď0µ_:‡LĄ~đ®cÖ±őç–^F<0ŠŁHíX—x<łÄ›kY¨ň»r5­ ˘§µ÷Ř#ľ;ćuKžDű{k=*© ‡&Ť1tEHŢé8Šmhó]=v×DäáĄwO  âWOF}3í&M2ÓTđÇ;üS¤ŘŃ'Óű•ŻWś™Ży«çęÔl…ŹŃÇŮ{ślj"…:é1€ąý$čT‘g•ŁXŃdŽ"(DnĆ’ '| ĄAŞdWÔ~Hô%Y‡!RKrlggÜŃDV{}5`¬DŞŻősař!u«D-—đ$*$ÎŔ@!÷ůÜžŚď?s_h˙y:í‡_˘y ĘŻńÉýB¦ÇĐ–ÉÁŢźBHĽN¸|îşÎFDJřI=W-Ń)ăv˛÷'ąű}ÜŹ7CLYOýU{ňrEę¤zŔp±&Ňł3‘›!śň —•Ë|PĚ6łáşEÄG'ŰÔ[ĚńŃČq%QTĚýÓtHśĎ‹ň=5H˝xÄşü“lEŞYsbŇŹ5DJĎzmF‰ÔîݧI‹¦nIJˇeÂŕ´ÔŤ°¶)+š0'ň2’Ä\Ë 4ŹżE¨ĐÄ2°1°G~Š-#8jßýc±BÂ!ĎŘŁ›7b^ČÝ*˝3 óŃňú”ŕkěi+qAhşF˛4˘Küłź?Š^ůÓëżďĽę_˙öď˙é˙ř‡o˙áďţú×řçżüűżČů/ß~÷Ď˙ß˙ű_ľý/˙ôO˙÷żůVľ]ßÚüö§˙đ7˙ę7Z#Uë×bTÚß^ç˙Wüż řrŁ8#‡|ţ±*˙Ľüëb}qBä;\—üĎ?˙Űßţó_˙đŹ˙ůŻ˙řOů»ţŻßţüło˙ö?ýőź˙ń/˙ç·}cÖ[ů‡ż˙3îëß|űď ň?â?·şľý;ąÍ˙Knö_ţć’˙ö§ż˙›5ýďżůłĽ· ׌ýR±c×=ĘÔáĄú|• ×@3PÎä° ”‚l3O0±]DPËîš|„’¨Ä­LŽr±KÜşJ`şW¬Ĺ·˙ěëšQcŁ_’-krĂ,Âľ43/P¬{WéqöĹ =^E°ą,w#˛˘Y»ştévŤ[\­+íü‰h‡šFPJHÄ&F÷rđHô8##ND|.‡±˘‰w/™ ËrőŰhŐüÖqF{^m`R +p’éČ ‡CA€Ô'ަ?ĄxvM¸`ŇUŐŁş©[Ćö41†’Č ˇ±q!ĆÁÜŰ•W˘ž I4а‡ĘIL*Ű>"e   ÉoyMČ÷Äî‰Ţh&hßMâ]9!Ţ–ŢłśŃq/ň>âj8EŚ{ęGM"AD\›ŽçH>|E§AßŇ@9xâŔ=Í$äˇFjy×f—$x®(1ĺŁÍKWń°0ÔD˘78ńK§BńSţCłCŃąşĂG…‡ĆĚжŹ«ý»/ í펮śź mŕk=|11,ŘĆXú·˝+*Ç­s/f4ń¨B€ ‚‚ŕUąÖf,s#zc7ŚKńŚrý&–=Ż6,C^`Žý¦tjĚG`Ćn~Üš/ˇü6Ŕ¤Ö +şcłIxuÉ÷–ĽŃ™ "¬ŔĘąň«5MčŃăÂÂó7])“°«˘•ş!?P×—ěľIüŽCŁo BŔ.•—k> T +ŰŘŻz`n]"q´Ţ÷ĹţgüÇż!ĎßKîó‡K´EÎôŻßŤ?”ż˝µO.ů H»®ń·¨čë˙“´ńţö‘ĹrývěöKňĺ6őź–ü§ăŹň¶~‡BŚţĄć_~÷ÇňüţŞ÷ďĺÚżű㨿űýlżűăěżűŁJ¶”Ľ˙V®ů·úO»ţÓ"¦÷/˙ô—Wńí7Ţ˙ő7¶˙ńő˙gi­:Iqú7Ioä8Ë[ĽQů‘c‡"_ëľ•†ËnßđoIDü`KEôş~S‡Ž%Úy!Âż„ÁË«ašqÂ˙¤# éXč%ßţô[»…“€ĺÔ¶$° ź Ühł«zUťú ‹íađuÜ žľ”mÍäó‹ebś:~X÷…ő@hě’růi ×T-~!á@źhŞeř–­Ç< 0ęâ3Ä,Ôz«ŤÂ° cqyü’&[˘^ż´°j·Pş^V­©—(ĐP5©Ń|€8//_髬 ŇvŘE•C×±şÁ×Dbu4±ĺI÷í`)ď 5.•Ŕh çÄ. lŇŇ‹őu‰+ýX¤xÇŁÔÔN|ů=ü¤§*bŚa"şĆ‚ ď•O{ˇĎŢnŻŠ~MńËňr-ąę¨Ü€=­/Jr!Ü^ŰQĄG }ă"ßCl,¦|ĎÁÓ‡˝§ÇťŠž¤gćoŻëŕ^–ŰŇř»u´ŔŇúŤuŚ;ĆŇŘ.ĺUť”ď-/­mšFž0*Ą ;Ó)âkÔÍ]ZIAÝNŚq€‘UT3na“ą¬řr9HúŠÔb·°!”ů¦°P0hu\ŹÚ°KÇíđz°ź¦O†} ,$‹Í˛oöźÜ@ý,Çr«ň_ŰoŐPÉGą~;{ýARut?ţ ?=+QóoĹ˙VŚăSň¨ŃŮ–ë.żŇb 4Ďäüám±~ßĘď/ž÷wżżKeÖJţß~h±~óç˙˙Á‘í˙Ł˙‰˙řÓżűĄ˙ňďńű˙Šţßźţ˙Dě|ˇj=pV¦D®Ű,a¨‘\ľá7D?)Ńí3ÇÚÖMM©ř:ńÓŘ'{Öľ)ŞYł¦ćěŇp[#Ř˙ +KüďäKT«( Ň,Çđ_ľ•ëŰ˙ôíű߯o/ńîźţŁ&:JBĐrv‹xűćĽß]*H†4QQo™Ł&rdKŠPřpY SZY®C›‘ ě~ď’c ł’hFGËD dµŮŐ1DjnřBäµ` +‰řëó &QoŁ&2Â,QVG¤çÍEŠ}‚sŞŻ–{c…-+×ŰO6ť^G×&Ł…ę<AŃVťĽ T»Đők²Vün?jUEiz’tKDÄf&”ëqş=ż›«¶m·k”ľ9 •†ű°J žT°ŔFłQ""!\bŘn@݉šú‰˝‚úzÔo›Jˇč¨öCâŚg¨ę·?Pg´-N¨3đPLÇ×’źMňĹŞ\ćOˇ- xŤÇ퇮b MAމ@2„­vcÚ×Bą_˘›`ĆĆMüÖ§]îOt7ĽćIŕM&ÂčŐőĹź×:šB8W%ü‡Î20¶3%4¦Íî=ýŃz”˙áPe+Ż•ŘŇűČ3j¸Ýtéą‹‹çi~ö’x;p*`(O„ +|Ő–S-‘ŕx‡8>‹`ó!‹yČJŽŃÂXđ©·ó,Šűu}$÷i26߉e"’Ľxlč)˙´A±™Ěł¤ˇe¶zU$ ‚=Ö Xž–…QL-őxvżl ·biĵ™u3H°q1äŹüCôG~ô®ż»”„˛Ń%Ô×$çp0˙®„—«.ŕńŮŐ +M“1 +Á— î©Ď´Ž®oi=‹  ŇhčĎßß'H^křu|ŃsŤJ ¤&A]6 ó$k_©5ö.€ÜÇlQ8ÂhDiRAËDqĄÓ^"ä‹™¶HŹͦ"5č ă‹K(3Ô¤?Ż+ ĺ¦ +ÎĎô9Áf‡5ĆîÚľťGBopîřţ +żcT›ŞŘçae§Ţ€Hs-§-ňśĘ·ÓőZő#pSü{b:•Ö|´l}sOˇ0KňN:<~ËÖHúŘŹBe®"ťf.4Ęťî\9WĄG¸$~<*ęÚJňžÚ®#‰Q5üť” czRŽl©Ö#Ń}•Đ ýHL#°E$"m €Tç©+€„¶učűżž+F‚âŽ^ÖnĽmJtűp{3HĎĚĺ-DÕْčcZ…ŤKÉO'`+N±(ÝC\a ^Ť-Rś9˝Ĺ“Çř·ićŇă!÷S ëúűÄ,ˇ®§ÍÓ\´’m§ĎŘ`Ě"ÉŤ%oQ9ť‡łąQM|˛]XÚ$V1ŐŠŤ +& ÷âďp…•؇ţ°˛ĄPźqé-ň0[7ÂíśB1c2î\ÜńxÂeĐÝ5Lë=€yĎîWnŮŮŰ<~ë‘\’ąĘ|-=ŔîÉáědŞŻYNsµ>“µ©«ź…ĺˇëŹB†/FÍTÇ_M ܂祐‰{¤Ó•[ŐC“*T5–ĐözYÎcB[ĺŢ'¤B %ş»Çžoިו­'q|ÓB')<’śş<Ůę*”;HˇÇT3‡ě&ňäŘŹşµAÓ©„ĚYÎ(!­Ű6 Pß ěű“s¶Đ 9@¦„<‰ŠČ ™š+á=Ň‚k=ËuBüââđő@iJÝ+r¸5TÜkŁY"ťuňŰ7%ľžĆ3É:®·G‚ýHË/xŇŇHýzn m%ngň\Úń‡Č‰ĐCŢž3MŹŹźzČH[Ý/Ţv×äŹ6Đëľ˝ES +šůŬ›j<‘ôjÓĂ—Ôzśa»f1gĂZzÇ˝6¸üť8ź<…Ň1!Śůż/>'¦Tđ—ÖiŔNĂ3]K§Ť'n´2j¤<ŢK +´í˘“#iCÜż8۶23ŮsC^U…±şk‰ˇU gň+©Ĺ#¦>+¤\ąýˇń‹X+ŚKµŐ"˝QÓşÎU „+ÇGÔ8…n_řΚľ|Ď‘5ˇëÝű‘ ±oJy”†L´ŽcJW12ÔŚOŠ~«ŃíWMŁI¦š´űłÁzěüéŔň•iŢ"ó ¤ţ^4͵G°ÓóŞČJâÝŇ  k»–8¶Ř»–ď·|%-“ü‹Cʆ•©»ź×ťĘ!Hl·ÄĽHĽCÚf‡HÜťfŹň¦'LJîłĆ+ő ŞSÍCűÜ Ůć"Óí`V%׉[WűŁŚ¦3+ Óďšq—\ÂPJŽ€»+“l‚}ެf¤O šâ®R•ů˘¶3 Ź=:—ßBÁ–ş…I{ ÚŤŻ%Ż9–)µ;VŃ=}2IĂx¦š™5(ýv +Aţ SËkťq©Â5Ć-•H‘C¬¸ˇ¶>UŔ儸ĄĐ‡ź4ŢcvˇßęÜď'čŽ +ŔQ…/&ń˙Măë >eéwGs¸“š"_Ë)MĘ^&QÝŃaöIÄ`´Šßíg8=`†xŐyßĘVŚ˝âříčĂďç$sÚĐŇ Ţű $Đuđś°ŐÄ”ą` Ç ¨ťçźój8óĚž+–Č…ĺ!ł,<ž‰-ĺysÝ<)c©@äÜč†7–$ÁýÔßWy‘¨‘+Ir ©ĎQÄtÁ¦Ž_"AüŠâ«D +™ňJPWÝł ¨ň»K`ľ0wĎĹwSĘ;±Uo/ERŞŚ¦Bn×nŁELQ©”;CUëŘł±cęČ`I +0*s’@äĘéUŐŘé,R|•†ÖyĐ..±8­N¨Ł§7hÓŇ"¬ëł§‚ű8tźPýމ^ťęŰŐqŇîšxŠ`ĺ/ÖM#XÚJ‚nćs"„lU$_?ÁWŞ.–#ÝEÄŰfÚáwĐŘ ŔsË)•Äń-fPˇµrhüĆő1SoĄJĚĹaÓĆ0 ¦°őn„n&>&‚f&É©ăaí€džŤ×Ç9‚5cWX©ŃúH‰JEŃ&â’¤ćfÓ6}”P&@ű 2J ś˘¸–s~şîß­Ĺş¨GšÉeĽ@Î;%!đ©xqlW©ćGˇfřë' Ç+°Úš৬ž·nŕë }EĎ|Ľz{‰¸†‘őč© Št č=±\Ęw)3§šWâoöj Š ŕ\yEáU7ŻQâĎđ‘›ůú"DÝ™éO$Žvv: )bŇIjąBěl[0G"{Çťŕ˙›YöŔö·(“VÔv@A”UâŽ9۱ş«Š>ˇFM)F^9uş_í Ý^ş–oáý +çpdW_˝ěĚ®-J±n.Ě`¦GźŽ`¶÷›ŚtÓ$V¶^5Hjw=±5µ¸Hˇ pĄ®÷1ĽĂ“ěŹáÝ™űK„Ëýşě?śŚ‡LF0ŐYxř&?—WŠ _ä~ößs~ŠťŃÍý%ę5®ű‘ć=ç>žä•ŕ‚ČńŇ\´L؆n1O'l N”3Ëhá;ńHŚ·5Wru_/ö7HK‰ŠY’p(ń­_V‹Ť‘ŕZĘÇĽĽ)§ĘŰ^ó2ŘGˇ)Đ †Ş›7ľú©c%´ Őíj¤^zŁËî¨p'ÇÔŽČETD|;o˛şşöemÄZŹóÜ(4!őâ˝Č1ťĺa‹*yRŐ®ŚzA- ×7ĽNę1đŤ:ŠÜP }×ŘŠS}ąćO&źÇ{“űŹR=ŐÔ m Ďc“"Q´’ß‚>4L¶żň Ě<Šüż\CČë ܆HĄ!G-cpULúÉçéđ®ţ' ż6Ö¸T‡Jď“u»é s·"aľśEP{şÍ%Ď^ާDDąť j®E¨Ď« `ş;é€Yr]·ą9ZÚ&ÂkÔŃîHĺ +ă}â)d ™ÍQłlç” ΖOp•~…gŕśęË7ý=ľ*CHë›n“±0âIŕY*ň2“%X;Ť\xł<‡N@b˛ëąŃeä;ą‹!‚ üž1d%y–ăô«&¤5 ¸FÖÂ-ŕ'Ř"Ď3‚]"1Çk_xNśăAŰxŇÚٵŠÚłśż›JFÜ"P!x˛ ‡ŚŘWL„úÔz‚"6ŤÓZwsX]§¤­A“·‘¸Ąđă3Î{wbf +ľ˙©&)†ůoCŇU7űˇJăPFBa1FTVBŮŚkU0ů07čńç’#±š@·ĺ°ę×:‹]]K>@ĽH=c…>]ß'+eĽ2Â6‘•†®ú—S©LÔ·T{˘LőS<}ÉĚR%¶ěéq[´”T„ůzí¬“!V‘DŻT8<¤ĘI˘ŁěŃdÚ7&,¦Â™彲±N JĽĂ«\Ü:Wâ9Ýłż×«IN+Ęz1’Źl)·0u6%’äH¶0Wr€Ą˝ťOÂ#í¤őŠ„ r,´ô]C†ůŹ•„Ł• +H€” —ÜI˘<ެ]&¤Ä8gghIY„ńWłü"RÓsWB¤¨a+µ˝7Ś:e÷}[HbUńH&ÉĆÔÔJsźcM“›/)Jżäc Oj»‡“´YçÍŁ‘5Đź¸ičWÄ _¤SUW¨IOĎ~[ÝKúî őMŹ˘»lv‘Ć˙đwĚ'q×>eÝAćłÂ﬉XŹ ¤Ý‘NĹÇÝsS C´şHs +\·0Ozݬ/2™]ÓIÖł·±>yÜtQúfĐ|ťŘ$ęKX`®•^G&ů4S5ćˇvÔ›fbąşČM:¨$9„ďQ€{Zľ~¸Ŕ™Ěž \\mZ?Ť´Ő'“¶'ľ°pP(j{% ‡‹ţ˝“YŁß˘z(fđVŐ0ÂÜVÔ·š­Új!„e}±¶'őNhČN5ő °Sý˛řÔ#]ĆDJ-Ľk¶ě'šn‰ÂmZÖ + ú(Cbxšc1ďßÖŐNCU™u!¨ŠU"l3BĆ’Lę*rż‚& ;¶@»Ô.OŃdTI|ë*e–pZĚ˝©fl&TĽ©dP‘ĄĆɧK­Ä÷6Ă: +Ăą§Ţ”zc–¦V~Ž‹đă,ţ$Z3˛´]śäÝ<\D!¬ĄÉ ĐŁ@¤0h§ÇpuŽDî®iI}:ďt¨ˇ0j…ܧŘn +„/fx…Şˇ$W–ŢNK?Ä–eäÖ›?OU"űJřI +9 BÄp8©9ĎtXŚ<`Ć~é"™úŃ»ţž&ńČí<17ŃÉĺ<łV ¬d·Cj6\ 5=:Śçć2˙–z%6h–_ ‡ ů.\óSH¬Dß"3·ýěZJÝ~ĺhŢňAlŚ®Â6Ă^—Cu?&"Ćáq8äµÜCŤk›RÜĎź0Ŕ"«Ďâö'0oä‰sšÓOŕ7g7múúź}¨†FcrôišD@Ľ[„¶¦÷!ÖĎ9¤YÁŮ‘'ô5ąQ•mŽöb°ŤKő-RŹ6#Ƣĺ Íc(1e¶ĄÄÁçěŢ 03‹©'Ńĺn Óž›ŕłCyĄ™íwK´‚e‹śE^¤G +XtÂÁ‚…ŕqˇçI¶ş#ľyWŞę¨\2\k ŘăÍ‹Ŕ&5h×3t +ŻŹVÚşâ9×xË* ő ŇđÖ°ö +R%˘bźÔU*Wa˛D•ć5{ÂŞ°§˘`|„ş$P ŢŠŇÄ~Śd +†ş‰ŠóbŠ:ÂíW…í˝bUđîá PŞ”bÇ^éżHŢiľřLďXú§Ž^ł‰ !<‰ĺz#wVĂjźŘlů<ŹY*0’łˇŹ3sôtľíXŰQŐn4Ž]©ž=Ř4>+éĂâ)"ŔRPĚJµzL<wŹ@ Ňâ{*ă›WeŞř€GŚ›đ÷CłĹ2fÁ&Ť7H"‚Ńž-ZKŔqhn=7ĺ4>]౩ šWô÷ËS±|¸ßčɰ±gĎ@TcÄ…đç‰z‚ę6÷˝]Ę+c[ůłf”‘ĺ|˙Ě9<…°ńž‘„ě€pya®}sÇ’»Ô€Á’âĘV‰”MĄżÎ‚Ć(„EÚ’ ź#hŚ2§ľâ‰ÂRŽŔ¨Ţeo`Ť3ńZÍźV*`z©Ö¤¬˘)®hęá{ń…×v2Í)­\»o*{ÂPĐ™Öb##â‡Ĺń1#‹Ó`%­‹Ýźhôv·i\7E…(Ü@2LáoÜO¸…ŞťÄőDĎP‹|{®?ň™9}ýzżű#'ätłôňd™Ç»ką€·{gÁsë1ů+íĚĂo—áâőĐ.]Dą¦·ęˇş4ŕ•$ +MŢT"%˙pe˛‹ähŚ.p/kR±G&ó1cá&”Î%Îw\k#·Jő'ĂZó™Áδ•îl¤Ă;Ű`7w^ÂN`ţŽ‘ů]d#ęČ-"/ŐhŘ,˛-‡}·Č˘éë…ľy1*J5OŞÔŠo±Ż…AzbvPŁN3R[dÜDDŁőűŇß(ČŞ®•Ó*gKkľfî€(*Göˇg~řn¶żĺ'62ňc°i%Ԥʕ„o[¤$GÓ©Ľ[^1V(ľ•%ţ:Ů>T*xIMŠŘ`~ +©ščš83„n&Č(m´Ź‘šL„0'L·…˙ŁÇn™±k´0ĘŃHÁűĽ©Š±/9‘\Bš`±rÜĄ4ś”_ó&ě¤ßo_?ŢDeF§ćó–°őž‘Ö§…“:´Ý›S#HUäĆŕ/έ?ItĐtP …ŠnýTVĹôÜłrTN+Ě•Çx5Şť1OŞĎ}ź«p0Áy¶ßńb|Ş4^^ŤÁ…ŻkÄeŽéAő;GÝxÍ>çV–ĆÍQyüöK3Ąp LÚľgÓÂD(SÜŁi«ĹšP\ (Ń#ŐŇĐsĐŤĂSą±6 ¤÷YúA¬đUáFᦣćNXpĽ>Ü‚č3¶Đyâ8ýĄăţ ńĘ]ÝŠţצd4˙ Ô<šs0UŤíľŇůŁ˝ŻůZŠQ’űµ<˘iZß•®Ç¦°™çIX(ĺŢUşŤo<Ł2ŘŮéŞčöŁGě’J‹–UGîîDQ†ŔĘ$»ZvŞu¨‘÷Đ1ßšy;i*÷á­±q@ó4Š +›´ćĎ3ÂÔO>ML–gŢy4ŹPK˘¶a +Pf[7Ć]Ď1 ŃŇ  Ř"(Pűľ…D8ŃzŰňčë1o\eŔТ %ĚCR§“†i}6Ű“&âaBdyĎ1ć»U™J8piE5ܱ4.*¶«Ĺ'Ŕ¸ }u`Ç1“»’x-3–'w#60–“˛Z'&lŃ,ző¶ńˇ‚}Ń˝c™"}öŔjÔt'f)ž koŃN‰.f¬‡ÂŃšCýŮĎńUžg(Gí$§íJ´ź +=X%P¬ĂđĽ7­('h¦†ż'‘&ô­Ýă8ůg‹„Űö·÷äVŞ˙bâ |ofAŢFDü‘ĎiíďÍó÷ł%·”ć!źXhaŻ®3µ§u^‹PśZ0"Ék ˙¦3ČĚé/9Šně‚´źÍün&2’# +íF± +D‚ţh‹Čë^Ď+ňď'“‰öĽď$§6‘›“0‰±žrÖŔ÷~{vű±J;ž°NĆŃÔ-ď ´ko:áÉ0M8Rž¤>5ÔcO.ÎD%ŤŁ“×·ĺäŢŹe]„xGy|Dů$ă†lŘšď<9‹‘š@1%g™8…5F+łEF=Ó11ÇĂ@e3j¤éăďW]B´Ä™Ů"«wę%Ę“KJĆK¤u¸spňČš] ů@Ąö9¤We‹př˝EîĹ» +ďeöDŢ·+ăZĽ-oRçw^ …ăÓV]Ő`%‘‡őٵf\ë!-ŘRĚjTß 8rÂÄ´W‚(†Č±ĄĘśČmXcS3ů\ŻŢúĂŘA[±@RP9"—ăo%eDŕ±ŮËŮťU=W¬ëc‘YQ”'fl4Íc+B?gVÄrôŘ ±ES/ßÝ+fMâ®c ĹÖőV‡sCÖRîH8ˇ17ďŠ+ÂЧ1Ą Ľůąű|Š:üjŁJKöy±Eą8jW0Ľóx‹#,JB'iÜ0çLgfr®>8{g1Ě`–ëU˘ýŤ°+A޶ĚSá^ĺf6ŤČădž5~΀+!LŘĎuŃöŐ­CJĽšÂ;;őµ~0|•9!Bľ[Ćö{55nç{Jy‚0Đô“;Ĺ}qÁC˘~ K4%IŽiî´ě·ĎpíÍYh®Ň]‘ČÖáíđÍkV pŽĹţpúŞ›6 €ëB“vlb€zC˛Ř¨}FţrÇ•2í‰rL8_L’s9Rĺ@YUWÚRËń+çÁšËĚALŠ0ăR °ĄbnµŮÝ´VŻ"Ż ŕśúšwµŰ 8č¤ßĆ6(µç!ôb=ĆňP-Ä +‘vß ˛˛Qóä sę..ĺm›řTýĘq§źBŠ@›ô\đřš˙Pf1şI?O¨9ČĹŻĐ),ö× cˇ;şx#}oááŹMâNôů~|%Ć–´Áşůž_¦:Ď ę@ť'Áů¬Bműěw}r÷y ÓÉą“8?ťńŤaáxźw‹Č+˝ršR«ą÷î™!{kbśýfcĂnŰĺ :žŽéńMHÎżXTPĐHĘŘäZ7qśš˝Űš (Pş­ s†.@>0·Ź€×Ŕ|ŁSĆÖ%™ŻqL(ń÷r ;(±DâÄÂĹRKŮ )sŹŕ3Äuن6óEo©B€†pŕ 5Ä Ď.ţ8lř"—Ҷx›)AĚ:ßC +c3!VňÉLýˇűÉPŚľś^®/AᨢŢÁ'R-X?§Oî PަšËˇ¤éeí_AjĹ渖dď5†cáYÚ­1˝Ě>‹bŁ€fĆ^ĚÔF€ş}/zůj1«ť=č"Ě7'ÓŰh¨´we¦YçŃsy¨j)żn2N,&©@TÖ 'řd+€Zz+Y^Ь^ÎsĹżOZ~Ţ'řŔýD¬LÁrd‚™‹ç^—‡3T±ąr {KIÍ9śb5RWdGxő+Ń{†RK[2F-Ęšă»*ŐrĹÉď¸đjrÇ‘ůĄéí`˝Ú ˛źźé"ÔlĹUŕ¦řńţ:€!—Ô#>$t;śQ]ĚŮ挀ę­<W jMäP‰zj9†$$!ă26[wěǵΑ)„’´˛kßj»Bĺ]+@~öz:ľÚ'D&4ÁK‚&¨mBýń"× |IÔŃÔϧ`ZžĺsJ Rň? B[‰,#oG$ÉřîŞS C;YB9Ďu´Éěޅ]ŹIaÁôW×*ĎÔđ4­_,oăíBł^â;T“˝ÄÚëŻđ™\ýŕ=ç`CÔ÷ÓAű‚ĂČľ AL.ď gף­yđŘ;>/§°ŮČÜT>-ů*L ‰qFˇ ?"‚^‡*Ňś'3ĺOaZ/K“+ŹjĂ}ť#á7ˇhK»śĂdqx$`§ EČţeťőÄ,WBç™IFGđzřnqăŁS¨f§4óŞGsČ nąĘ 2`Aď3(¶Á: âEµQC K\ +Ů}Ë|ÚÇśX5I¦-r'Žă)×{ŕ@¤ä8Îd4±DęŚ îfzX9±·C ůíE3÷Éhä;şaAp«"•-}˙ˇvě}ŠHŁr‹äÔźÝNćq%Q +ĂWp™, ţBĘ­ěQ"–M +sCÂIBěC´ĐłËE'b#Lݶ,ďL§Q|+ ´8J  +*=¨ †YóĆŰ(‰ÁľĽ?ÍFë=^tCŕKÔQű!ův’hş© SŚQŚwQNk3•,Ľp‡ĂCCéŠ4K¬.vxŔ ßɧՄRô<0GcU`e4D€Ę`ҰíŹ?‚§÷ňYÚYŹX7s@ÉŔÁĽQlQRoŻŻWZľ†Ł2úUđőÄÂ¦Šś›Üąčkí"K|ň,Ö0˙á–Z ăĘťÚ—5;y˝Ľôň­ŘŁtů* ‰đ.LŘö'‘÷?Ý󯋾J­ P Ά= /:t¨¬0۸ń!TÍ5-$şĺÉV‹ňÔz˘3ŞTâ®l°éśq‹Ä„4Şşăd—ÚÚMÄ€‘v¶Ă&Il’T7âo +éMwýL›îv±<äĹ”t'1Ć*xŔ|‘b ąx> ¤^áµUu_*š Ň>,Ü>ĎŔb ¶>8wÇ‘Á€ź¨ü›!öymÄÂĐ@X6ÝG9€­%ĂŻ‹'ß0 › ^ł&çÚ!Ęę…Ŕ4!"T9é_oaRD RY}(wÜ$BA‹' s4Ĺ­ńyţĽJôŘMS[önq#ź®…äđ&Ŕę«c˝`GD°ŚÓ®cý¦tŞ€1ó©Ň°2g>čUkJ|©q˙Đ`óm"ŚĄ`çŘ“—B4˘đdnQů±&Mżď8r^<Ї°µKĚ?G‰B]$ĘĺóŇ;BďĹ,˘ő„^Ç %R3•`?źmk.ŰRrÎ=ĄłŚűÎOµ—{;Š{Ř5ĚÁ{E$óyş,ĺÖ`eřr-*xo‘Jo¦Ö§%ÓAźL™ţrŃü T.וLd"CčţęYĆţwȤęŻů{š‹ŘCµĐ¶ç]šśĎÁőŠ—ŻüĆtŔč4¶qťTÚ4ÄÔŕÔĽěŔg2:/ÖR_ÍĽAË>¨ÄmKž^*@%îAkŚŰЛ˯×s”€¤YcTJż‡¸²‹»ş+łeŽ“źWIüVÎeá_y­ŕ*)‘˛•r–;Fr˛ľéhúXű䯩O™îç‰ű¸Źw¬)Ń6MĽf|\‰RÜß7—/hl¸BäNMřČͤ<úu Ţ8®ő›54&¸T†s©N†‹µÓî.JŇzÁ‹ZŔ»&1ë1Ć©Ś-‡×KěsgŔ(‡t>Š"R´őŔay°EşĎ赨őŤĚ]v)¦ä¬bl+v;IAŽ˘áŐ2ŹÜŽ¶Ô›ł" RPŕÜ)š‘ɱ7y{ą† —TÇ- +{D{Gę´M5|ÍÂ‡Ż’+€Óęą¶ďh+ŢŻÝł«öM­dsÜ"dH&ÁU’lÁÂĆŽ!ż‘“=ňÉ™+ŔErcGM}oźćC!{\;†”Ă3& db$–!Ž/Fëhń\Ś ´Ń9;–ĎĹ»ŢG^·}U2?]:dáHvňz~ŽŻ.!YĆ7ʉîěqn‚’Ѣ ăZěđšÓÚíąXŚrTç9 T§PĎę»56[ł¤ú;čśq’ś:.Ó e°7l­€8Uó\#ÔŕçĹOŁőg*°@¤ö7{€Z“śtÝ‘ć“[=f“FîRéČsbÉţ +ω՗ďů{tíošâPď@9¤‰ą ´3Í +‘FóZÚ˘‰R? ~ ÷Cv4*X *U|Ô:=™Ě<ꙑ;ŕ©@:äÝ®d1ʤ&ÚŰ©“ÎĐTäWÓěllˇ »^­0ÉŚ›ŞŰü„žä9ůĺőf‘%‡=J†‚ˇ[Sź F5WĎVź.ówć•Ń„›đb(‚č,?ˇZ8zÝrŃ<§(áĂĚś +ł5Zŕî]ĺÜßÔýuFłrlč°hą˘‘ךġ¦R’(˘GÜ:ąĽQŮĘ’ţ–čša—jDnńl)§÷âHSđĚqĆ'ÜTăŻ*l‹Öv\)ëͤë§IXŁýŕód®k/\<](ÇV—ÎE¦gÔ©-j+Çíđ”+¤ Ä2·=ęX´zHďz&w!˙‰Ł.Qţ:a´˙ŢrJg®Á­»öZóŢ:[C»ö–X-ź ňĘľËâč™ÓÎl…<O ăxU§_ßv©_d4Zc[h*;ÚpŘF›¨Q„xbÄRcšŔŐ¶çJžbµ±şAb¬7áżßź[‚Ä5Ë-"‰1Ď«ą™Đ«.ĎJ·Ü‘.É0´ełĘç "«ÎÓ¬™ľ~/źŘP‘UźÇWžÂ@r8¬.¨ÔAf±Ç1OďôS|0|•G5ÚĚŠ]rŻhE|ŹSë¤Í HtĹüX?w@üĂŢu‡CJý°e+×ĹVDż= ýăV<ćđă‡zĄńhťé,~¸ţ +ĐC]ĺb¤>ŻEcĐ"‰Ż`>ö÷)Ď-"G8ĎKł ×YíKăĘIşé8ťćÂSżŁNŽÎŤWčIy™ęşÎ%SÇ›¸E´đub*Â2n…–ęRČ•’;±jV*%łšéÔđu`ëđFA–‘ç}ŃâďŰAÖsM‹Ä3ÁČ5©ÉŤ±hâěÚą÷ţÜZ´±Y÷¶mäĆ©—9—ÝĹL +“«¬“%QĹŠ;Š­i%]{›šë.t—0ŕ4.>ą÷vĹzrůUâ†w{t|lb“aęú| ÜŢ Ľ,#QŽç:¶.pPĎĄ^ІµŃp’ĽcŽsÓdń’ŹEŹ[jŻ0č7¶;Z®‘Rq§şüĽöét<-U60oó +#”o‡Źź\ŘE˛;@ “çóuücDăTE’ëÔŻ$'6÷¤a˝BE ý ˙n ‹Ű1g9Î*+&Puůâş +,ÁEĺ[eâ𵉖ŔşŰ}%9=v],6¬1Ţĺ "úÚCD6őőkÎ1ň•|ź:Ť[Ź©yHŚÜCÓ—s•,3˙Ů‘syeôz((MD¨J/ČěI&,ú`íD!V B™đK;4Íć‚ + ŠIďcˇ†˝9ş0{ßîឣţË7au»ú¤ Ô0ęN.{`¶Ěr1"€Ž\m#°%¦Ťô8 Q‡×;ĹŢĚš(j¦MEÄyŚŕ*µĂÇc+@[ÔŹ#zwٰ*ćÁńC<Ąô•<Šö€Ř Ň'e*™w0“zŐAáöĐ>Íç}lČO˛¦č#VóZ ‘Ę\Áűďâ“i"Ę5[›1-‘’Ď`Ré¤R=wü#ťzŽAÔ¸czv‹pkg‰;L„ Üü\vGʱ˝˛ŞÔ°‘_ÇDZR%ë9¬őŘjQöGb7W°ĘwË€ůT°W™ÇŕĘ×­(D2"Ĺ´ł;˛•<=ŃČâ3J¤$?WźL3r^şŠL^ľö†´ˇŚĚzfüMb6»őcąĘ)ţ. +Č:3utlK¨ČÎŤW‹µôłáĂ’jŹ«/ď…Ũ‰ý¸Möą÷¨•b6MȲ?řעA·Źł(kŢURÚ–U×Iä˝kňN7L9çł`%ď\óSfĺ1O?˝ÔŐÝÓë(? ľN§ÄTŁýPŔBÂ4‰„jĹüż‚˛‰ ąuŽżsOPc{fýlß4рɛÁGjí»©™®§$r@`/ +F%V¦!3čŞdľ]ž˛é–Ç~¨'˝]\©ŐdSUěwj׺ šÇµflKuڱ™Š5*JöLG¨»ŕÇXtqвš:˙`y¤‹wr58Š%󨾉  Ö­®‰žéşHµŢ­®çľ1÷JöN`î{›…řÖgsYŢ”;=4H˘o q•4Ç"¶ÔxĹ–bo +'ŕsIÔ„ëĐÖĺŔ(Ţž«}3fë=¬ˇµNˇŤĂeÚČčVqsČŠß©ýˇď‡ó ÄϧíK}ÍíűŢrř˘2•‘eËN¶žťIü&R± éź\ńŻę|]‹B_ő)~uěF$k–†ŽăŚ.N«¶Â´Vb:úç0‹-'$U9g͡ űč Ţ w´›yŔqJ Áó‰G`ĎîĺZ¤Ć§©^ńoąĂŁ#á\TL!FÎh©H4íŽ9‚Â@8’Ęî*ď+ŐJFi7Š*YÄŢ{.ÇŽ%=¬d*°Ăŕp•^W¨ y9ŞV_ú…LŁ~đ–chTÁĚ©!úu sě/š -UŨ^EĆpŐ#řŐ|ÍěoôňôŮĺd»şą=¸ł¦«/€TÝEf"kśŠlŹňZ¶˙şĄŞŽüÝĽ‚kŤěŕŠÁćěą|"bLÇ qDűäseŁ #ęÔ—0ł»ćL™´FbŤšugVtp+đ[öŚŽÂ”¨ŔŠŇ»÷51 4HµĐüZdý`pĐáä5źł~9Şâ’2Â)Ś@kIŽdFYFĽ>U”‘ľPňډ©ĺôµOąŹ|ËÇ"TÄśsO"5 µçĎŃĹA÷K}“Őr*‰ŇTŠý°Č=s˘PăŤç &×U1˛®Ť±<©´(;cçZyS^Q/^Yˇ }$7URęQ9§|˝gÄËĎEŞÔkoQCÚý_Uoůŕ3ëVl”H·ŐLI+©W·sö{fĎAÇ”˙¶bđ ÜC'‘9ŚBľŢđZ:T3ńt?ýó¬W÷ţÉiř]祮Çc=!,´‚ŰŇf‘Vwwíµ×‹3‡ëµR“_Ć$ +WH°’s5M§!â%ăĚ‘q{ _ŕÉ›ľ ž T \đVvű9ÂőÂN#~űŞŽC +Ż*cÎY-¸.4˝ĂW0R¦fľ&©ĘÇ1Â(ż{WŚóěôŤŚ02Ą’¶Ű*łîu C§yÔS˘9Äŕذ¤żpŠ‘Aĺ —Ćňk%çŃ##č›3Ę‘Ń}ĺ8­úň-GZŐÉŞé[âĚδďĘ']u›Ďń+5'ă{ž/qźŽýť@8ô%6Úës×›ŐúŻ„ˇČtü^%GÚ0j{.TjĆ^“vď09Âv…i·Ź%÷5«sMa"ł¬üâÓfhăŚz;To”č “c'•“R´ÓŢaî˙ VéĽX©Bě«(Ţq°_°u›4ňQ‘ŹYď‚Ý€s¦_sÔ\+J—1ťKŃS˙«'VPAă]ŚlŁ:ZA#Ň!Rxí(ł)‚Ť”|¤+f›M&!NBä:ąt‘M BŠ,ţüÄÚ«eÖ‘E}‘zr|'‹µ+ŁY\€đIZ4čžü¶ó@änÔ!§lĘwšIQ”žéMSë}WBCń|É;©kżF^Ůłp‡ ßâó(ŽFV=Ŕ–ńQ_ĹáůĆz.Q`'Ő„/×ĂŐ 6$.Ĺ­=Ą>ńżsçLTÁjÁ )„źÔW‚ÂTZzĘgş)P/šx€TĽáĹSĘ—®h +Ź‹rV[!‰â*Çşł¦]ť*Ô‚_IˇA­[ b˛(Ë=W2Ý*»ýJLG*ďqµ Ô’™Ĺđ×ţť7—¦e9^Żá6ŤÇŇžKˇ?dP'A‡Nm´ËýĺN˘Ł4ě6[BCjÂŘ­7i†”c¶Ą>­ÔĚ ńÚ·<\ťG ?H¨­i–ű0É”OÝŮL€ÖJÇ ë +üEŔ PŮ;J-ô1g˘¶ĺű…ěC^`>myčŔ˙Á°C?íđ¤\Ű’xś ĆŐ@řa…Ěä¬`Ú’Ůć ŽÍ=Âř}l¦»B&¤ęě’uśY:r¸mV) bĆ$ą+亲٬Ń@« …d@˛ŠAů7N ÎÖN~_„IĎZýśQĚBÔ#źĐËą®Ś”©ľJXéBRFydďÇŞĘŢňŤuµ2LÍÖ×ůŞŮ Ć*gťö¨BUx˝Cĺ%oqŐPÄ;‹T=iXC ‰}gWZGÖ,R iĘiz…P?ÍŔ š–h›ç˘`‹DŐ´Ň2z\éěĐ Ý˙ČSQ…‰#čě´S…—“=ĽQ“ÖJ3qLdđR*»á“"ň< +f@;#÷Ú ÖÔŁÚúÓ–ęD$ŮŰ“ ”\=Ů ¦&ď%űĚ»=9­ń¤Ga~"ó¤Ä““±3zµ†–'ŕ>€ËŮ.Ô”0gXNNŚĂ«óňXNüĆbä6krË'*pﲯfŤ?ŕáÇJ9lTׄ–$GŠ2{<ŘŽçVďyÓ?v śJ}ů®#•r®GËJ=§ţ·ŹŤ ZctŹt, l +&h)łĘ´ăÉ"ľš~ą—ŔąđŚlä>Ɯޑ‰lJě›7µvXH k©bç=Ë˙,±`îŮÔiéT,öÄÍ4®˘Ëă„€š~JÁ‘8 c3µ(±Űäe1mMĺ4ŹüGYCL“[[P@J2ę~q aVňů@DĚŹ{Ť\ţ[ŇŠ¬–|ş’üć©Ŕ‰Ď‰¬‹A +Zçă=Wh”"]î˙sBĺüńú˘żúDýĆ•+â‘GEęs˘/·Żsqë˝Ö €ㆄ@ +)EÂęLCâŞ'X"ʧô`3 ĽvŽ˝ąh§R>j“~wLöŰ•rő;ŠvçŚ7ž›‘u-ý#B3}ĹgŽÂË»¸ÉbŕżqŔÂăcżHĽC2Ž€|ÓĂk,˛&śľÂP&Áĺi‘OŕkYžĐŢDd&°·Ű@ZUĎĹíü•ěuC7Wv”"nŁ©*MžsP!żeĎĺ5ÚďÉW0NЬż¸‡cu¨UÉ™łăŢçµ,¬x†cŐP;đˇ‰A:c·řŠűRI}-Í`—¨ÍPe¦ÜŞŔ;J8QÚńŞůyĂ XnF©]±?¤îç6r’ľ )¤ÖSbďŇ\~Łüş0jäR? +ľžö% |ˇg'1&ýŽ%h¬ĽN\,pÍkEŁI­G»ý×Ô‘ ÷¶T9ÉM:Ů’űB•Vlâűđ^Éů§j+y2,šłüę1đ˙$új*J™™4°ˇČĄm„Č5nRk^C¬ýQ=G[„1;ś×wňôŠÔň\Ć. üR>ř ÷Ö↗áÚÜT ˇ†Ä+ŇiµłŮŤLľ $Ť‰S×ČD"Ň@bQŰśT2©†MoݎÉ%Ęłč޵„sč*Yg@ýľµ–T2ŮśwÚŘD+T’˛&ŐíŃŽ˝űš{[±c¬„2‰‚·fsâI^­®- #łIŁ-[!a ,ţ.€[(bË`¨ú^äłŐËňq>ď]{{!ęh­źFĂ6>ýśNT€­śĹĆ×ć<Ů#Kš{…—|ď~5|‘P%<ĽĆŤ…ŇB‘“É1Š2˘aZ#ˇŞ=·?U2q ,†y+ ö&Om;éËüĹAHEČńzÄ—7-×Ú'ź™=©×}Ö»j¶J"íóĚ/tw94ľ\'Jyĺ\vĺmŇU’+§đ\>że•ÖÚRâŕŐăBƆA.ô.~ŕ޶ÔW/:ŰReÄ>¤PÝ­ŻśbQ_E×ŕJĚ yę’Š0µÍ§SXËEŰJH=ă> ,šC”@¤2©k\ËKŚÍžë +@?®1CęSŐ©Z˛ž(nşŐŔ¤s‹WöôŚűA#›Ł?BŚHžÎ’ĂŞŚ&)9Żä[_Ě锥˘@ęl*%׌ =ĎD#żęűô1â®EµTކČ-˙vڞĺjŹŹA¸őf×z‡~‡Çb&:3 #ąµZ‘ ¶Ěöcs¶r+ąekźâJ lGÂáy”K ;Şĺ5ć$Ş}ű.¦Yľ{&NĽş]ŻÁ&Úaę©ElÔžO»O ŰŞq+\ý‹×B¤ +Z}|á1Ťt-Ű_©Hŕ`՟Д7‘ŞL(&µ˙ĎŁ(ův—†¨¶‰ěĽŽˇÂÁ›«P·;á;â‘ç×ëXńST52X¨Ě–ÄáµxŤIZĘ/ě^–fŻGţ3ţPîb’cŇFNů%ö˛Š”ł9ŕ±—’•›9ifM$†j÷Á‘˙ĺ°®O.,k;(‰Üň‚‰™gGŹĂÁZ4Ľžĺ`ŇE6}iű´‹ÎĺVJŽŢ„F4®ŞlaŽŰ‚ÚGďřI˘ń˙3ön˝š%ÉuŘ»ţ‡z! f)o{çNű©§‡|Ú– ŮŔ4 c@‹„EĂ54č1ý{ĹŠŚËĘ}zN•Ž{ćDű–qŹXËóérďÁ}“§ĐKzCşÖyéC™¦»Ó B䶰ʱä«2ÜAםUý‡ČJ`ŔnŃ!T˝şů« ŞÚ FNľfŘ&đ‡O_uŔ?ČWĽÓ°ŚŻç6vQLŔč¨Â‚ńę´IŚOŃy ×ć¶_3î-Ňf‚wěŘddäľEÎNH×Ů*ŘJŚT1Šë€—˛hőHĂýě28ćĘĂS,uŻňĆŢéľ–‚í|ťŤŇ‹?DěúÍ ~Üî& ö±k\—§jůXĽ]†Ďľú`^l}93ÖŔĺî5 s‘Pޤ5@§7á0óZ Ţ©JţÍi,©b—&f™Ý\9Lˇ"âßn«¦ĎĽ»‰‚ťŰ波ţ3±bT±ZůŞÔb[5¬T¤ËżP˝č—›Ď’Pţ˛‘˙ć?tĹň©Šşý9©„2Ăßż"đč{ ťrhŃęĚŹU(ţIĺL/ĐĎ‹›nŕä¤^Ęíp’â‰m˛ËéCÁZ_“‡f”ô‰ŇŮ-†-YÝŃ×,"æşŁHDTřRr¬]])ýťÜŕ+J"y¬XˇSĎŻľÇ÷¸ĂPŽ_LÇp”2îšĂ/Ó bʬ8ě©ç RŞmŐÚMĺ·ŻśitŰo•2aÉĆ׵ˆڥ“ ÄÚBĐúm?ç +×ĚŇ jĽĂëąkö ú Qĺź4řĺÍĭܡ ‰«ˇ\¶SiäŽămqźW˛Ś§•ă°ăvR3^Üö˙Ž-Ţěś=Q×5~°ŕěČý=x˘¤H0§ĎهĎiu˘–¸řQ—FÂ!>b*"¤z㮄G2öúÔ čNĂQ®Í·}ýo$µŞŽ¦uOćă„Hq8 .đwf@¬ůvdĺ+C±«§żÄXá%ľ»oĘ X* GüWáÉ,tjńş«źŻ9hę w#¨y"üÄ;üLĺźľč)_ÄĺŤÍ3ć[d0ő"D8»Ů"b3.U_4Ó“µĘHEE—ú>˛F·†9ĺb W¨]É„QuŔ,ŃžěR +:¸ß .ýŤqŚÜ©F¦’8ŃN@3]j˙Ż’ q)9&´«ÔMŕ€[˘ńŘ~Eq&±”\ćíErź—:=߸bŠ9|Żšxěźů?łŕŕvZk\‰mdp”nZ’Rô| +˘ Ć]gźľŘe"d«Ż9©†%F×zhC¬`ŰŞůtPŤ‘‹÷ąď€~xÄőg6€~ÓˇNčZÄśşĄäź âČs,¬D’µĄŞoĺ'‹˛ťÝx©Łę±ED>ŤôW†ßöĚ;z.Njní‹ô={_MżJ`iŮŁÝőŘ©ˇĹ,9‘•xS©‚Ář©'H^ă“ŕµöC“*ťűcÄfřtăĂ%‘žÖ'FĎ™U=g˘)mS`Fía]6 ;ö¦śĎ +aě őr"A¦o$® Ť/[¬Î·đ3ëVđĚĹb"•ý˦ś+'!ę.dq¦&ę>ś®řŹ+ĐĄ†ŠżµU÷•b]˛^˘…»*JżGečZÇ&-âŰţŽxcFm¦$ # ~9¬·ĺmI˙Iß+ЇuI¨ÄäńŃŔ "ß›Çţ\ß &>KµŔŇűçs.ZÇů¶‰?“Ý'§rÓȨˇ«Č dîHä‹dËME>µéB*'smm)1¦›§ąÓâQa5í12ňĐ_ zbrYU|FbťĘ)öqš&UÎdĚp_|#@9QĺÚc<.2™­&wć0G~ězx‰,¨ĺ§Ž©ŕ­ă#uŰáä™zM1ŻňBŐČč,ëĚńŞáĘżH\<Şš”ą¸Hő’°ÜoůÄ/™ŔG7~ćJľyˇůť!fáÁEx‚6/ËÁp̬ě_ý·µhóŕç‡ĚäÁ\KbÇCuG *’^ŠeŹÄîfK(íX}żL$6,ôša&vJfůĘľéugJś/FZPĐämiđ[ă”ňîŐŽ?†žňŢc˛FoúEĐÓf’-áĎIäŕשÇ8@ÉäÖƱýśÉr·çurČÓµ ř8đT,M÷lëţP)üć1A§všžż‘téÍ1c~yăbF• Q)îÜąÍMiSB¤›’lD ZŐŢXöĘE;Z’dsGţ+Ą$x|ytîč!(eÔ5Č,ĽYR"ŹKďɡ(Ť×áôĶJ¶ąýŽ‹ČLë;oú[ĆžW´MÔçc +ptT»âC@;,ëţĐITJ‡¸kFě©ĐăëëĹ‹A;şĂşö3¬çD*ńël‘c®Gź*@ f^«6¸ćAĽ_ĂâJwŃŽ›ľ•nn©ŰD$<˘a<çńÉŻ…ŤůäčzÎŔÇhŻöCňN'9v‹Ýŕi"5÷ĄwŽÝ[Rص ŰŹŞf‰/ţĹDhWG݉Z^K‘W ď§ěţ° )oőÁĎÝö - BÄ8ćĘ4 ¦—€ڶŇe R :joWsđvü]’„bÜ"rs•Ă‹†=}[>Ě ‰mě.[TiĎ„Ąź»ĺHĚü±{î!‰Ččâ\Ťkő¤4T™Zž]ÂđIÁ ~ťđEŐě,bwIg‹ś…‡N[ÓĎhÉ’'4 4!Q$»´9(;z= E*’Řčvťq’ŰéŻ|Rʧ`zŮR˘·fŃÜz›^ŚqŻ™@KÄ=ýâRlöśÔ[Ž^rĹáKäčxa´h¸‡Oľí â?ľz…€’d •­6mh!V”cmü +Qŕpô!};“—Ă[ç–ĆŠ(olçÝoDa;Z€ Íč?Ä RšéUšÚÓ‚LOꕢr+ű ¸l3ŁZ¨eqžÝ–â˙‚ łźŘąď,o -ďaS9Š9#ÔŚĘg14vĎ!N{5Ć·C ĆKţNŕđYbŐ EgŮÉ›Ž˙ä[SjHŘŕoÖ0·Żnö_žÜ?ôpČ´öľý«l}Űůŕ{*KąĽč5¶T®N w•ĆAUD"®Ý!rŐME$Ě}Ő“í»ŘµžWÚ„í$ dé¦séČN°2íďđˇ8 Ý<1,]ońU)WńIčęjń%đ ?ÓŢĹÍD Pş×ÍzIŇW­ŃÝc"ĺ&˛PęÁŕÇŢÜö#…V@†«:Kd‚Ur™gŽ6\T§ŔŹ~…Ł„ĄÄő1úńüÖĽ“ĘĚ.ŇZj0„E¤)şČ:ZÓżáĘ%hřhw÷Ç8 ľ5bíIŞ ť$ŽŤß–Ců\4%°/•PÉŹ0?X#q?s3á4đ$ţ,λąĹ7sßť†ĆE*:®3šdßRAĺÁct5žž¸ďá1M}žayą™K…*UŽöźÎ7ď~›Ýȱ7ó«˙L§­cýŘK<§ŃzLČpŞ: Äȸ(OŔ­ëąłękNdixb­(%ĽhäNPí‡Đů}(@íLüe",ŮŘ z[;†nřťŽL˛ţ®¨“ŕcŕu±j±ÔjŘX/Ďľç[5lzgXű d˘ĺaÜ|rí!cjóöĺüAfQßyĹá8Äçĺň¤0•˝˝çŹťŔV˘Í ĐBÝ'yATdŚ´ÇŠ‡wY•’_Ž{:®‰îS1V1‚ŕÝmŇ,)íěZX޵€-%ií˘ ůgŽ ĐŔĽ’ýý +D!{bîc<%.ÔGϨDľÓvô‡ę×Ĺ=?śŃÜ´ŐD&-#“›ŹŠ»]Ş2äfábŻęů3Ăţ%ŻďcźÍků&’łĆ;SW°źöĽTe.¸˘5×a,Ç~­w?¦÷FTEPa˘Ý¸˘iµ“}č˘OŕČYä,zg®öC\âĐ{ĺ¶K·Jöhg4đ׿bOŕź7ĉß4S˛B$÷›_‹q Ëő[ ć*”_ôR~{+ÝG&Ąű wŔj”KťYá[·ç^Ŕ-V}sůLˇŽ;Ö°žŽNźb˝°©!‘{CX(pÜŠýjÚ ص\¶Hˇô0®••ŰýCrB†/ç™jµś~Ţ"±µvąČH,ź}-ůކJq¨yÉď0âÉ/7L5@ö‹2Ë2Ö@Oö™ŠSéE™ěű¬źE‡ňďź…Ně^[!tÇv¬Mí ˙ÍW Ó4ńNÉ0WöĹýˇVO0 ŻĂŹç/°´îÇźé\Äž“wS='!Ćę¨i=čŠw2„•#Ń˝¨ś×Jöˉ9´ÇŁľž~ŐŽžóV?4|–H•)Ň…LŘř­Üž°Řz¦r«Ő Ä1ë ůjzc4@”ptç’č}N®ôÁÓ&¤Zî»9/•˛TŐ·yŚĘ€ˇ%ÇNU“xă=®u`ÎCJŽłw¸MߦŐÚ—ëŔ؇cŠę…RÉ™đKfÓžčźŘů\„Ďô"S«ďĽčo.uĺ˘~1Š!RK +xŁ­"I¨S˙~˝pĆőý šŢŕÔp8{{Śp©;0lŢlĺN•Š\â©Î5z¸Ĺë"ŁŽEžŰ­Rő·Ç ęă_FIá4Ś9Ë®M}!pŇTb˛Ů{+7Ó_ű˙{tŇú·‰ôčv ;ÄDô×’”5gε@ţřô‰> Aźó¨—×(0Yi˝řu¬WŠď:i“ľ*Crűˇ~×€8Đ„*wßývZOO ç|`gGŐ¬ĺµęeu)Ó< Đ”]ĽöCĹŰÉż§äZ”6ńµË“ Í~­yîfj ĆÖö¬5wń!!ďĽúµM¤xţ»O o¬â祒€UEz6ɉ»yĄ9±˛­1^ŽW´,#Ŕd(‡] +˝š+±;~٬‘żhâćkäuËc8Guőx·Ł†6?`Ĺ™÷IVžsčŕµâ×Ę’;଱5ýČv®5ľ.f4Ů"Çę~~Ň-r¨zaRuܴĉ±ĽżE:oîă5cŮ•gUŐ`P…[űěĺńY»´Ű-!lvŰ’HŤĚĆĺ‚Ôv6źň Ą„x aA^Ż‹ŹVFĹ,ňĂĘ5Ák[,‚‹ůN6Ř=‹Há—PF'Ú…ś,:(*!ëf $Ľő5LYÉ8¶ăÉg oŢmůÂrA|ÜŰÚď^[: +]PxŐľ7|’W%;µwkfŤ­|w†JwQyˇ•v?D)@[$TF«ÜiŽíFÓ¨!µ_g jHSB‚Ž1(e>3ëve:BÓÚŁ™•$«¸/4«T%fŰ­orŔríDUňlö‚¤ćć}0¨äŃš†Cd6wH¬tnîV/'ćµ—„[ éŕ¬ę%żi–’kcdş·2­E~[ů›ŽâŽT<ËíZĄ€pR$Śňy€y2ŰŹC‚)˛ë`AjJöâ +qZˇŹ«ŚĹ3űSkuŢöŠJ—AŁů¨}ˇňµ‰<Üďźh–ć.~*zë#ë›hź?˘XŰUD8]GZîçĂ1QE„·­~@ň(VŁĘâo97dŃb Dl{}\—xÎ&űP‹đů4şŞÝ-c^JŚy’čb°ř+‚á–HyRkqP +ę·O[ř‹—2ú±9¨ńrwc™ţ…JD.sŤěQÂĽ›łk–BFt ňëpâ']üc*kŕŘvčcç´Pľ(p Î*˛˛ąĺp×±=(âę:YM´Š'Č fM$ćbÍrŁĽŮOřŤ.çĂł?(!w:ÎĘH*Jă´&ZšôĎ&MţŻqÜرvd©@^KîŻp®%—©Á,g6şńzĹXQÚô&ßó‘E}ď]s©Ć…|3 UkŮ+ůVî¤[!Ó§¶=Ęň=‘“ˇä)n+ćGH˛ćŤSÂ,ץZ„°/Vz"/jÎu]Óŕ7 {zîĺ­ĆSx¤*ń‡C@@„M€Ĺ»Ľ«żî1ÂćëU,ĘL$BôFĹŰrś¸Ń€úÍ/PieŮ®rĂε,×OŤ÷ŞÉ~â|ä‰|µĎ•µ8ŕş^Ŕ +1?,±0t%Üďn¶–X†ű˛ExÉ@ÎYói˙U䨝„şCÓÝy™qڍaľŻOf + ÂŁ]™¤bż 1ăŃŹPµkgpŹ^ ĺÍşÁtű6·ýŽŘ„@JŰĺŤř¨.RŽěŤřÖ9·W^*ö],® úKŢCp@Éo®ÔáÁ,ńl «ć•bđŽ= öoÝPĽgŢP $Űß%ů,ď‹âk>ż·Ă48WĐjN®\ó|ŞřŽ‘^”†Î-ó.>MűJŚ:Híî˛~c:?A˝GL®ą®éşvŚŽű}UW´hI 5ާ©.ťĆ +PQ7Őâ}t çóš>•UĂšŃ.·ŽÂŽÇ ¨ëa[pŢA)Ĺ2ôšéŚÁŚ °ŐቒŘůžÁ^=ç &bŠîŘ T‘a˘ö˝Ţ’Ő)óÇÂ%şŕ%óU™Îyn! ¦?”sbŚí Ń2’5¬'¦h–'á_ `ř,wĎS .ě]Ďi9ôÍ•¤¶a»Xsąvmkďî·-„ů@ćĐ"ôÎ<LuĽ&ÎA«w‹–t¶ťâĚo-ˇ7ʱĂä‰ÚçűĂPˇŰYB;ÓçoÝWś­11ˇšćoĆyw˝ ¨ Ô±đş>.^4ö8Ře±MG·.%«=&Âđmě^pĘĂľrgH kšKÔnkŻŃ…Ö*g1=j8ńiÚ\l´ł +¤ÁwSÓë¬: k|Ń4ż†A5y[T “4:kM´ě ÄŻö˝–şĽm?ܧ)rěť«ţ=%ö +â:Äm¸Ő/0·ZčqâAůîŢ{N/B?yOş'ďÍţ7˛)_łă±‚ăĐďMTn¨Öą_ ĚÎß”‚˝'K9Gµńe9HĐIFI°ň„ÜX h3ŰhiÓ»›¦Ü­Ľ4 `ëZÔ¦ÖŠK”6¶U˝nţ««ČAe¨d´IüüWQŕś÷EtčÄâ‚cM2qôô®áé_K˝Źľ¦Łč Ô!˙zÓx~./ň<*|0‡K(‹É ÝŐµ™—*úŚ/ˇë–ăˇőŰŞ© Ĺš÷oD9OI"›˝Š2ݱoŹFNˤŤsśŇ˛,\ŠýäÇŇŻŢźőOYÓw^ő·xŐĄ&ţĘΆ%Ű[\ţ™síÎÍ~»‘=öľd78ßµĽłç¦ůŔ÷|Ş’-đ*Ě™Ü-ţ"@c´,¬Â&Zˇy˛ĄŢęsÓáÖ‘é-|ßEAv08†UL°4ŠĘŤŽČ·¬đ<ť“ đŞň8Ô&>Fđ?9ÂżOµ$2Ž_K)onÇ€ÝI2źx @oĺňµ¦ÁŐ1¨MBRÚX¨RĹčő˛˝!żö{¸[%¶9÷Xü‡Ş|¬ÜšS NżMD‚Ź’xOSo8*Śv­öuődĎŘőćýű],h[&3˛:­ë1ž)K˘€ »8Ţvů<÷‡44ű*ő6-Mo_Ô°V`żKŽ‚)ŔP=öľÖ[–-Ż5žÁŇĎ'ćYśJ ¬VR†ę¶#–„é›*60 ĺAÝ$?&dEUe8;čÚ3N>>j!"Y—ç9{‹“—^•ŘIć*ĬQh<6\óR—/ ٵäKH–śű.@"¦â*†č˝iŘýfĢ$ĹŹć—LJÁ…şÖ1Ş/yWşŢ "z¬«6ĺ¦3‚ě»v›Ż§L?Ă Ľá)!ČąoĺÁ¦n ŚżŤöpÇŘo/~§ő6+xL{N€MCD`f™ť}Đ=l˘•ěß ŕh¬ç’őušÎk=ÔÖŘ}!b|ţ%ÜU«: Bµ,”!˙ă˙,ýi_ŘZU˛ÍĹ˝oˇor—Ý1ŠřĄ3b’r’϶ŕĺg _şv%aŻ~ćÄ—$3ÂŁ_¨‹Í/%‡ąˇkr3…6ř:NÓ§rëĂ9iŃą]Á ÖÉŻëćŠMÁşIĎ1ÂŞTł´ż,"ĺőÄł$5ä†3ĐíR—:Ł>C +N€Z; +\O x¸Ö»8~ˇ;ë0űŃ™:3Ëf•ěĘG”śT–C.ś=O@­{lâľL^s?‡J:Ě {ĹA—=śŚî #&ŤőL‹>mĹ*N¶ÚăR“áSî¦;ŘťÚüž…%ěĘűLîÜ6eLár‡ŰrY‡”Ł;b`LZŢĺ Cq-ß…ŮŢóşŤ?}®ËěOBˇ¨řǵFq„W[qx÷ĚľE JY€'ďÁIyĂFfú$Íú蝪bœij+§7ÍRß„Ŕ\4s˛­_Ł`rSç|Xľ\¬Ĺă+s‰ď©˝‚VF´ť ŻĹމÇĎÍş_…b ÂÎ x ˛W3,ÉXhVńđ‹gĂŠwgűläzcŢuź÷‰™FŰÝ0k0ň%Ă1Üľáď–é€{>Dt„“ ë‹ÖH*CÖ×߆{čACýĆ=3šďĽčo.%î“vÁý`H›ľnCť˘x&âń¸H2°^Á8;•űµ—•Ě{v‰đ6¬Ô@é2‰Žř›ËH#Ă€Ô†¤Á˛tVţ™ZÉu pףždł6ú˝–fŚ’đG™v‹AOXÂů5&Ä"hdź=##aĎ•KźU7Y#ĎÜŁ-bâ}'9Ť-ľiÄĂ@fÖ2„×@Ö@ G‹Q:ó;xîÚ¤/Ě4K˘ń שLPTŃ.¶L •éµŔ,”˙XôđIbĂBg¦o©şçâ…ÜŇĹ‹ąŞ· Đ,QČYU7—pUu«č›üCWlĽ>şn3‡Űľ¸ćTřVKŔQ»Î…ćR—DN¦ĽČŔ¬ŠK˝FŻÄ¤Qéc¸ěRÎ+Ũ'[ÓÖ\Ç''[¶Žŕą^ýöiX×±Çd‰ CQ2±fE ¸…®üˇ»ÁP3C2î'˝Ŕc¨äy˙ľŁtꦴ5Jw$`Ă%µ˘Kl°š†Đ V^Ăwrb,jŔ^kn—c“ŕ,îľ|&c㣷×}'e^éĆĽÖłńÜB7H k§ZľlXç±p¬%á}ś‰J˛;š}uwrŻh@úˇŇęű×,ę6šŐW¤Ć›98ŕ¦ďRčµlĽ9#BP!/j–öCi¬„ćńü‡!şöŐQ]"h›+'ł iŢ2’ +3\;±U6{°g¸ÉÇRžŘ÷$¦ÜŤÝx„™×2pEŠ®©Í‚©ď–—Oڰi-¨˛÷÷b’z»Ş5Ó˘Ş„Ç—ÎëöĘŘňnŽe¬ňbÍÂńşktňóZŤ©H!E‰ýŁůSŐDgđzáęlb2AŇx.-iWyť\OFń_¶Č9 Ű#/ŔžŐD·Ëps)®…ZtMb D;˙ĹĄ‚ĹŚ¸śŽ#ŠvÓÔݰ;íâr'¢@VµĚôů˘4Ý<űťî;ËD:˙P(ĂWš.ë\u˙íÝ™Ň͡˱ţ(ľąYä?íG˘®é挫kő…OÓŔĂTlx=ńĺ ÍJŕ8ű!8ˇ;m3˝SěÚ7Ŕ%“±ĘŠ…¦aŹR@®]hö;i^ /ÇZĘXźdöŔ3ŠÓşĽ*L,FËvˇ_ pąŰ±€4| –÷}$^ěśU©âÓîŕM•Ň^P–°ş“珰L–´™îHoĎ»÷íŚć)cTüŞuXÜKŘçéxµNGň›/yy)ťÖÖ<ěŤ55Ë?=|–\)÷AVVÁŰ=Ě)ęĐŇIť'§#V‘ÝF8†…)m;ITg9:©śr$Ç újIέ˙ +*™Ú.íŐŐĺ€$ˇ“bv©µQű)ÓÉ»3Ö‰rfŃÍŔáôkŢ”ávšîČ’Ńq”R ›ĚAżěÜ׺Ťí^ç`řB Č]@ę‰DYó +8B|Ńę´Ű®“ BHÔt„ţň˝mđÉD$°\™)Żsţ1KF“ą÷ęw–ÚĆĚŁ‰Čy-)lj{]đ 0<@´nM(e%ţíĘf†T¦·âúČĽëJ|SÓÜc˘Î7ÜQŞ?‡›ľ´žÁČó!’”źl†găĹçťĘ.ŢJydÓ‚-ŐxáóŘ+&ŤÍ2/I&``ż’Šip5P)-ĘujEz—ÇĽhl 9mLáH^‰VëŮ•Rëřň±Ń˨wů‰ŘbRôő9ń’ŽÇĐŔŢŐ&ô&1ĽŤ6˘Š«'Ë)ĆšŃ׌±yĎE?Ŕ^‰úxL†g• Rő“ŐdÝs«ÂĽbřîié¦);žro«ľ©Šv¶” ÷š*‰ ~zä°¦Gő‘Őď¦Gűň."¬ďĽé(ÔUąDŞ(µ†Ä„Üą+'ĚQé5čŮMÄłéťšÉavĺ@宎ć”DeRműŚéăÂÉ%®€]ČmrDŹËÂfâNnHĺ:{úŃ‘,Ęî•;eĐ]Ć2GÁ}|žt/1ć}>rsWc›EśWn\»˘ľX'´ĺ¬$Ŕ#3\ +ŞýŕâęÖ¤}3íuöčę\ŰŠ\á ľ Ö™húĆŔű eŚ1_ŰSíÂw¶üŘĹ„ˇ}‡ #í…ôć>=?>x[AB–×bĆc=<’=TJQuRˆĺíZťŘ‚·ÄăÓŐ~k‚ţŰ•0Ü‘“ř›Y"Űǰß9ćZ "™8‡¶Š˝’ †Ş{Éy©Ë[WvÇ•Đv=·TDFş[†ŃřńzláÉěľ‚A•ř Mo>:ĂÄ=™joŹÂĽŤöšóú!;',űX}äŔ¬ĚďŃň“¶z&íöЧýШ'.Ż|Š€®v+¦—vöźsqL÷ śęz˙Đ•('ÓÔbÓž@›¸jŚÚY8<Ř€_éůÁ ­Ćę*Á/°Eä¤\'°)bŔ‚$Éń:(áGIýŚPĺóôŤF4ćłE†řţă{6ÉÔ‰ť—Q5<Ë[Nř5-TÜě$.´Á÷´„Ű[†ĐÓŐ˛FáľÇN!2?蹺̈́ÄŰŚQY.óL—foŚÎďŹů~ńY‚u! ŹÍômJÔ¶<Áş.ał'—¨Aą “iń‰dyVv˝ťÉ¦şźöö"Í ‹tŃ8™–ĚIF’ÜeóäAĂűÇiü·Ŕv™6Jď©”šEbˇgÓa“,ÁÂÔ\d1;Ž‘”0€ń·ČUO$|xďű>ćOŚáŁ$Xşé›„’µV cb]Zë*ŕ,*SnřDĐzÉcB;ŞjŐW=8»=\1ktR>č(ţy€[Ě=”6Š–^Ěß›;xö%P[-PX”ôçÜÔ*›ĄŤ®—Ľ׺\mző9Â[ž:V‘u"ĎŞîR7XËČ^řJ·ő Óş8x[W›Â]>ŚjKk ĘÍ4ÎőSĽsÉo"ĺ© +ĂneçćV$ŔC·H»)ź1‘BX_*ČŞ•Iq´>›Ë°LÜcH‚SC4^ˇřĆ)Ď­˘s9lG­ĺĄř}j€Řf˛ ۩ᤕ¨•]–\iÖoł7mKőę˙Qińúż˙PîÓ›wâ! Mg ´3ŐEް´ęí,ę4¸+$¬<oş›jşYpîčšIÝ$‡Łoü„ÖŤpŁű›_ů:-L¸ ąV?ćť o *č Cšô/˝™ŃC3BŠň®D˛˙žsÔę{Żú[ľę•[ Z$N üďdxŰ\Ô>ĺuşµ¨¸ˇ›~ +A'ÇZÓ6sáłöÎĄÓâę±úQK®cVĽµÚĎ)(…MpŞKvš'7Ţ °Ťě¶Ż“›+™¦\Ą +z‚ۇ|HRw@čĹť±AUëK·;J z"jµ|j^g‡>Ôł‹®ú{@†‘Fjžěż7ňčű~ŹqIčÂGÂŕµ\D„c_c´ýÚR@ůk-Q„DäŔ|ÖŃ‹™*[D4ŠČÝ;OŽ)®Uî'ÍtĎĆŹŁ}ńţu1™5Dę*Ţzę~h’;9Ţ_WBŕ!«ť0†÷ßďn#Ău…Ňä^ Ź®ôŻFî`¶m1<{\ćją?°Ąę,ż„TĐnťÂÖo čýHśN¸s˛ď č]BżRęv*Iĺ?L®„; öďdŐÝĽěĺżĂgŢńn‰ýă4Ń3ż'“@Ŕ‰%ĺa5‘t6çŮ4iĄÉ¬ă+řŚw Ćk -/Ĺ@±j)J5Ť CąÓä¶|ŔĆŕE„]š‘ÇTĺÍAéĚ o{ôók4éÝ+}BoÁV8¤żžŰ Ó%aÁd/!9ŚhNÖouö‰[óÚÖšožLúŇS±ŰYXÚ˝$<Ý>b=Ą©?]có"^ŹţýřáłÄŞź„}:¨oýpś™o!ĺĂâöV.`č.Ťŕď $ +Łén#şč.-ä„^FThµhĂ4żŇą‹§-w»»í#h-ţµ´,if+±)ŕÄ€ňËb·×L±Ž8(ř†Â}Ý/=ăŤŇc q s Ě€śž™Š}l±ň ‘F/ 6ŰAÝÄČÍşEąăh8k8 Ĺ®qžvŹíŢŐżcgJ)Ů`^dů†g*µ·tWÂ@¸Ŕ EĐ8±±<ŻŻP3Ę“fđE±KOý˘ĐiJĎmŃ‘Ő?„1­ŰËŽ™eęć¬í‬ćθžŻň®EíĎ”[â¨ů8±©mŤ}¦-ÂÝđÔ˙A!ş•xű‰ó‹ăĘ­X4†î¶†ĐÍ„pÎ锣+Ő@řŇvL§řäGóáv´{ťK·t¬(oÄuFÂBZŔŐ[Śŕ¸1oąr„°m´ü~ő“,‘Ł +4Äe'ą7úśŘzi®°~ŘEŁr§ćšEK5ólŇj´şŻĹ{•†Ú¶zÇspń´w‹â€®Yék\˛ŚcYG#iUۢL1Ů©C”Ůsě×ă_MŰďĄ šĚŹK5 ŃOE›3f$"rŰIÓ {´ő©kČ´ę;Żů[HEpUĄ +©ißV?/ťÜĺUěX?ě*‚  H3Ř˝ô¶Ą0QÎöMŹî*üPQď(äŕöP¨]¤ŕT$08_ó•Ń´Ýđ]X%¬ 4d ¬c?Şj'çUëQŚÖ$ŽSěĄ+·Líř<±S·EÄ˝zĐď‘ćíó\ö+˝ćľTxáH˙ź};}QÍßΆϡúç<×6( 0ɶłç2C˛ka‰Ú{űŽjyµ.š˛˙f)´©6®ě‰Ę.aľöWXA\M×b•JĘú-P“Ŕf Ś»_śĂ!ĆOV?©ëyĹ ül‰¬ŠÝP ńoމŤ\]T‘[‚÷š|E-ľ–V°|˝¦U*áí!%)o÷Ů÷_\j–„üŮž0fLäNZhUIfšO[ŘsQÍŕŇI|‚饧'Ľ9(r$óöÁ +jżU×uQŽ#žăŞ!] ÖĂřž•™o÷Ră1U_t~$±`Რ+ďgG6Ř3¶av$Ç´Ţ@a%î_KҸNĽÍ`2_g7l&uŤńnw"c\ą¨€çŤçôjÜřÝ"‹1`x¶E%”ŔŹđ‰EťŐ:ńü4Ňů„ö´”±Ď»ŞĘlÜĹő]ůí»äV‹¶DĎäą2úęŠÁň<‹ĺ,uo,§-pH¨7M°>pIő„GSwĂC/¨Bĺ–ĆĆŻÔę/ýóNąţőO˙đĎ˙ç?~ů˙ç?˙ăżüéß˙Iţáż|ůÝżü˙˙ßůňżţó?˙?˙ćKýRľôűËţĂ_ý«ż–Ě=6%=•`÷ďĘů˙U˙ĽÁ‰!Iîżm=Ků×AŠÖ đćĺżţńßţô/ţý?ýç?˙Ó?˙éď˙ĺż}ůńż}ů·˙éĎ˙ňOúżľěűŁŢĘ?ţĂq_˙ćË˙‘˙ ˙q>Tůňďä6˙oąŮ˙úWEţé˙đW˙ęöż˙ő˙¦nä9Ŕ‚‰‡“—ßb}âłIĘĄ+.V°*…y·/W×izD7b Lꋉ„rxSËI'†*Ż|‘GľPż¨řFąBüô—˙ě—nzĹhĄ9"¦čĘÂü™ĂsÉ@4Jľ6~ ]š…}%qřĆI:€:›Dxî"·og€4g“ Rb3"žk|M‚Ţ®Rዯďl‘cňďěů ć)­Ç‰Ag.ókaÔv%–DĂĐ앸 [„ąĐ›60v·?¨®ä{HKbFżrYRńőüŚw/Ç«!a“)č vĄË)¸˘!)Ú/V)ń˝u&űD®IZsˇpa#ľöţnL'zD’x‡*áş=z jůĄ’]w‹<€‡Kr1I„Šý5°y奒î~žcŘDśŃ§ŰĚ­PQčŔQ°É+-ňj¸=‚źńçÎ:,4Tî+żúŮâţî7P)ô\.°O˝›GEäXgĹĎ-˙¦±Ž"EÜt°qŞW|íŐlV†ŘćiČQťŻŐľ/č©ŔIc ˇśB×ŘÖhŔJdKüýNPmin1”—m5®ăäUűŐéµ˙W37Ś×ŕŚ‘~ˇď¸!o1|÷ s)Ż_úű‰‰«Đ+mů=#’qcęQĘÚŽH\n. ĄSÓJ_˛|ÚéP”|Mď™±‹íô•š¬x…‰:Cj%ůNnťá=JRéGŮčÎą&uÔ˘-űn*Ňž\—jXěíąD†‰ÚzC«čK>l 0=üöş[vŚéű[Ő4éy·iÔ˛Ď,BŞÍxş `s5"rŢ–¸WáĄ'ĘÎé3¨gÔëNť|ÄT‚Ť:&^*ÓnŞÇ ·Ş"<W:ŕŠDčb\ÎţjI ľÉ˝îĘד+GEäÎ !÷yHű‹Úî9绚+z}rkT$Âۦ)¨Ą'(aG÷}z ‚ Ę ·ĄrŤôŹ? +÷sž±Ć'Ě†Ç +šąŻhÜí÷×c”‚*ŚĐŻĹ‹eTăľ–ÄŇrkA¬ˇ–w, $m#EĄ Ě­§KTš÷€U¤PËe« ?z$/D$…L°¤ĽVRh©Z•$[Ńgşg.Q7Ut‡T÷ë%‹±şmćcô9coKÍɬǎ´Ĺw«ł‹‹ćĺ5ĽŁżZÉIh­ˇáb}łâs;ł‹±Ő۬Řsśf‹|‘]¨ÚĂISBLôjůQ|vľóťÝXŤ]$řë– ‹DűýŮmfĂ\i6^eËĹă§úůj>ˇ§]˛]â?UŚÝ’îˇA"A›Ć^ËÖ®Îď$u°Ň<4uKĽ©aÂíh·¦ö@,7%äíxčq}Ăí¨6"€ŞŢ4ďlJŘhś " ĺćÉśŹł›ž˘zťĆňÂ&ţ}hóČŃWÂFIČŰ;‘q©ÂÓLÄD |ŢôµPßm9ŁŻAc,T{‡I$ë"L/Ő”>%=&Ĺ•>˛űĺ}•˘ů ÖţěŘőtVaÂZřBl˝W)·wžIćHŢŮ×ŕü‰9ó'3¨áHbj —ž‚čÇú l%úôĐ,îţÇ—Č‘DŚ<ďB”#žnÎ.oř 9Ú-P¤ákiÜ!Ý Š¬¶NF1Ő®‘€ČXJtNŃ"K‰žcö‘Ą˘†#ťéµ·mC˙Đ÷˛ś’Ş;¸|ćAůĹ6Ģů9ü>áČĄ>{×™KÉa ™^ÔaE,dG:kxŤ<Ęcg# vg.1:‚é¦5xZ÷Ľ9PCŰcćôOÇÚťżš8¨łĘżOQîa;»„‘DęBžÓx+Íű!b‹ŮL$Sö·˛®vś‘:<âxąMo%Čvë0®y+¦_4P¶ćhK‰ś~˝ęé輫ŞkUOĐŽŽ¶J˝N,-.ŹsuĚx<ď‚Ţă5Ť©`”ÜBqőĚü»É·9]j>T­ëZ”Ě˝xą‚­@EšĂ%P=EÜwŚv¨%Dé´’÷TĄP2¸YS;ĺë€ČuŽţěřłGň´îcđš˘TĚÜRÎŐţx"u1Ä·JÉżĺÜ­~G@§ń=˝#Bč,’«Ďű¦%iş®ręzď5'âđÉp87Üő;0¦ą™®™)¦~ÎÄŃŽ‹Ä°JˇR-·’ë^;UMbś-ć玬%!,1 "™ł(g·­§ÝÝE}Óßň«–Ä/›~VPÚę'F˛cJăócTQ °Ŕ[Nz,ŘăOĐKd3RŢýô“Ň–ERµ“źňwÇÔŹxa‡ČrţÚ|ŐóĎŔЧĽÓçy˛pŽZf"¬hü4®¤ŤŮ"‹ş'yD×´Ť4»Öó5 ?¨ëV=:ŹN©¬x$Ô¶źÄŰ4‘NśŹČ%Ţ%A”G”ÜŮZĚŻśŁě›ŕAíWŽ@ůúš€©(TĺĚ;¤:úü‘°#âę…–ŻU"QčTä_ĺř!y©Ęřň]Ů.Ď ěŇo°kÝÇ ŕu¸—rA"ÝĽV’#«ÔPĽE䡩—rkäřř&‰‰˘cß pK—jÁstRŁ—šGHÂ*S˘ĄÖ]ÉAŹŕŃďBT‰;Ńżď@pëJJ\c{"Ýb5z(,·´q´#´îqođjމ#ŁÎÚÓÄ%!X3zwŇČkĎÂKúű~rLŞ4 )™<7S:’ókN`):g%;ÖőĘ]—Ý'ˇą/ "Ä3ëŻÜ„C l9¬USäČ~¨đ8‚˝>n$Á(ő‹·X4Hîđ·Ť·w†_VTŽ:őŠŞ.‰á0¦öܤÝQL¬'o›.ŃQ}EÇ7Ş +ÔĆl_·Ć”r3 x5ďáUЉ>K}{n8ü’Xr%@µD3 ţ0,±t ¬™Ă`ů®łiWĺň‰î _AÍ ‘BCSˇŽÉÖM«oo^ş:ús™ŘžrÓ€`F„Ú´;WŽ2g0hîKőkdĚoÇŕáş÷Šća*{ďľ +3-pnÉ«ÔFe€K K'¶ŮfŰr=»ČC +kÔŃ,śXĎY༴aĺÍ M˙ś†“˘5VIŰ1ŮIOˇ:ą’ţGcżAUQĘ +Őİ˘F;Ц“kĆF¨&€1ţ·#g.Ŕ4Üŕ‘Ŕ,c©g]řbä<ʧ®r±Éżő6\" Ű ´WŕĚÓ3‰eę|ĂňfÎŕGD9üŁŇJZ]VTRUi#ć;H5v|óI=ą|˝îA™6,Ź ín固oŞUĺÚ%ž<¦]­$'}.ŠvĹ/ÉɢN#ëkxXąźFŚkÉÓç|®~Í‘+îŢ ^Ď„oĺeKIŃČĂëüÄśgT"jó›š~„MŇ=K|ŘxX9ÓJQĺBÄR"‰‡5iµy˛Ţ¸ Ť/§řvĄú·>Żń«†ăř•š `.Ĺż•Dxýx!tdGgd”úp9W˝ôU8q‘çľ‰Ú –Ťi>żë2—úü5‡ é5ć­·Ôěg3Ě´ę‘;"ňb|¦Ć~e\÷A‹©ébY«dźĽ"ąj˘Ň©aôo‘KWźk&·´] ě\Y.9>-ş#ű¦ÁđJHÖý@®q‘¨ÁZŞôpŠ×ŰXz m|‹0¶ţîuäÔDVůš«ă[döő"UŢ^˝ö˝‹Ď +Ľ´"|EOXĎaL +ąČ• Ű1âĆ}Ż6®…-€U×shăű™DbÖI—B=˘źĄô ‰K©‰‚S1…I‚Ô“TĘ=îJ oJQË$ýžQ–ţ]±9(Eä@Ů·+a~ě¦Id4§(ŻŤŇYĐ f|ă‚DÓľ¤«ă: ,ÓMŠŕH~ńç>¦ď;B' +žěő^4î""ŽDŻć" F;Ź7Ü©qüŠQq˘×T˙ůysČ“AfjŔ=g˛ c_6ńCŰ‚†Ăĺ˙2ńä%đđńÄ\· +r¸â Ťűţ:h“káűĐ”‡ëĘĘ)©—ŢĽ€\%™űľUĄ]ąmáĺ ~A@ě ž@ŃWpż§Nheŕ©úďŹIŚšHÇ;ő“‹=ÇŁ˙Ż9Ľnęó¨Ěś¶&y[˛ěÂCÍđśÉŹž°©°z…ŕäč 6^ßÖš°ŃĂGŻßOí0řÄzˉďF źdR H]^|1˝M}üZËŕ›ĐG&ś3SĹŰ08ťgź*ëő§ů°†Ş˛ÄĐ˝î:†‚ˇŻĚt‘ŢNĄu°2Ó±ÓŮ€ť|ZR±¨”ń]DxbqüĐ ´ż-Ńx\=ű‡ůçÄWÚ6Or›™¬(đ´ +’ăi /Që·‡>ŰcČ˝ĂHf\íEŠĹ°»í?Ź=\[}`ą™pG—+ň3N(9M¸­Zź˛8»Dpݵĺ1zÎů>häo Úŕži5)ß®9Ŕ–‰ôž˝44řIÍ$‚/Ő‘›ZSy©ŁňŘOOżSx§AÁ3ąČJŔąť¦ÖśűŹ u׫‰)ČrŞ‹+*ܦÝ4ŠĄâëîŠň˘µŃ(ß)•®4łZŘ]üĘ«(„Yě;XöťĚś. ĄęĄŹ ¸ëŠI’ËG¦Tí9_/ńu˙ĘÉ$ăřRŔžp†-˛ĽĘť-g7ĺO„Śśb‚¨°ĂäbĐŃzŔî©9‰ sO%ĐĚ—‹ůű %OĹ‘Q*.îcżăłôvó ­‡§ňŁş˘ĹXŢ~ËŔQĽM&ŕZ© ž§F…´şł O“î"Ťúü%s™¶ł6Ć`"?ŹĂ8žÖyźc˛V˝Ă<†Ż˘Â/ů€O×1÷şé†nróîâ:ŢŇ^ßLgľ[3#FB2d^Ćëný›je‹4^jÝ"5Śř‰n„µţÚEÍ˸Ö|Î^ÂâŞé Ă\ŮĹTfÉ®Úé‰ŕĽ ö$˘s»Ş#W’x"ŤSQ©A±Ú Ô«iT $ďsÚá…}9REäZ÷‰€ )ńCwÖAĐô/ ă¸E»X9ďrŁĹ˛%Ţý‰)4.%o}¶AU$ŃÄ7‘UÜ­5bO"äŢ"ą¸E¬[BSƵ5ĆTŠW3ţFî%á7˝°-‚¸7Ç™nâŠ`uKĺü»JQhúKŢáJw-âĺö­=˝hE@„Aá#ßWĽé¬jx˝—YđÁ. +ôśă,CÉű;;Ó±cw‚3éäQ7Îé¨ů;¬BrĚUSĺÁEĆů5JěxÚ4ň»Ěé;«ŢJN, _kĐaŠAőˇëĹŚAÓlść×wŢ>™mńą: +…0p=ŚŃÖ‡#ć‚›aĘ/ŃŔ¦â-ŤĚ{gŔo ~eϢ=‰.†šoŰ„UORx؉I|ĹY”ˇ|ë¬¬á:ńZÁyŢ­ń 6DŽ‚ŞŘ­‹F~Ó•Ë•˛90Đ'YÁűćŢ>Av#bćVÍŹ źĄR +OI9ć¤gtÝ@ď]ťK-ëbbcŐÖćHÍć{%¬»’WBµŐç¶-9IüÓ|űr&€{śLţĘ€HÍuĺť–dŁ©ë“ĄŠť“Ĺč>颤kEG,˘ŠÉ& +‘TÍ2Üň¸éż0Rb°VE˛•ru"iĵbj(b1RŃ‘ĐÇ.‰ťé®ůć€ößo®RÇ™×L> +K$üeőd÷Ú¦XärĚ5 €VR)>9˘gô`"µ$ł ´R^óM3qPě–“—»X/^îŇŘęť„WĐKыëbLî9fÂÁ·‰žřŽ'ŢŔj&­éiá&‘Ë#c§Xa «™1ÜŕQ8ńăA1/b‡L«F˝ŚÁ˝Ă~'ň©FËOżż»ĂG¬Ř˝‹yřŢ’˝d;CžÄ"bfśđWt*=uMęČ4ŔůZśoĐżřÉÎdg•Řů7ĺ OWKYµ”DŕÉMlŤŢ^ ďĄ%»Łk†űpĄlÇČÝ8c™0Ý>ľp%k˛k÷ýÄűÖ3—;fÝýő‘eâX–#kFl Şź KÉ=ťĂM–o…Ű0 +€$G cŞáł…)š*ďľ§ő " +áמ)»ĹwBŤě:ţ+:řŽWČTę;oú›K 9¤5Bfhő—í5ö;AŕqÔ‡÷Ä˙Ş÷u®>ôëĂTĂjKźfJ-Ü‚°‡˙4O…c8fuËëúđIiŤDłýv;ĽČ°×L< +Z4Ę®ř—É0ŕ‰)X໩“šwîBŮ—Pcjp]u \ŻŁÓĽaärÂăóî2ôí$ôűq0pmľ…żE¸/˘ŞŔË v-ĚL\±Y´­}=[DŘBXü;r†§•™ăŘjŤľŃš]JÇLnŽĺg?4’ňl•˝űjŘ2‘Ëâřhç2ĺĘkÝ:¤®lź4ż˛´iAŐ,BEᦛ¸ťDîJzXîëĎŘRy, $żs[ń‹ M9h9ń‰˛j9ćŰ–f‚Iů“ŇôX_Ź·Ľ=••S^Ďv)Ţs,lŘÔždők$hŮzŃśÂčŚVÎČľ:@śÎI›nŢĂŃ9Š7p·Ë}S@ŢćtŻÄH\ •˛pś¸R‡0ŠŚo¨ÄT;Ä4=/|- ‹8ůµ%H>ÎDşÖŔ™ç0J˙¬ŹĆäŽ]ĘnŻŻőxźfLŇěKĐ÷'öĎ +ś‡ę[áťâÝÂWąrE3ť·›„<źŹŞGDśŢXq4%çŤUQŞĆ$½jx˛?ş-ż +OÖ_Çŕ‡ů 9‹ąÇ‹K´Ű?Ӈ˱żhEç¦^ţ¨–Χk>?-|–@Ý_˝çá:ˇcwT?UŘ/RuQLWDŦ®Ióą#Ż„=ˇŚwi 3Ąyôín¤2Š5K*wmâ—܇r}Ą‘sŚŢI`íK?®®ĺ#®çŤMZŚZµ BţaÝ‚«k+ë1ŮlŃ%ŮŹęjɰ }ÓÝh„{b˝/‰ú¸°á[äVň˙ˇ$'ę0brŢČ$h©7ĎÎM7­Kqu¬ÔjŚKŤ´!¦ŹĄ3*Db;Á»â1JěV¦_ĽżwgK†ŤLąJťÄŔ "чâ8p0”Ą˝<ŠżPš/%˛`7 `CÓ"+7»ú$ĺ§F`b3 űÉá2‘°îsž¸žIעÁőĹÜQř˘Äîh‰ ¶Ö_ŁVăăĺÖŁ[ܧ0ÇŐëŃç?Éď wĘ Ž>¨ŹzÇö ŐĽzŽ<éŰiňOZQĘĂu.E·^ É<íąČ}ĚЇ©IęŘ®kĽ‰gjˇ×îĘÍ2™µšÔ=Sĺxz=6vfqsô~+]ÉĚâAćuWŐ} }î2}úÎkŽę›¤·iM`ąŁĂ@GxzUŮ;|dĹs:yú$­Ň/-"dŘĂLdĚÍŔ”ë…3şAo^[°ąĐŁŰF’5Źs)EcO…$¸‹Ě©\Äjľ†fJ˘b‡ąbjĘç˘ĺKśf8Ç6˛/a./G×·D*­Gç÷h¦7,Ö7 GíR2§uIô‹¨š´%ÄďŃR˙ę+Ăv/ +eŃŃî‘ßťvöěBU(‹űŇą«mg^‡A©®‰ČÁ&íúAu¬Ž!ż¬CĆ•$xˇÁrŻWđÜ˙‹ĽşN=Ů·¶śŕ$°Ô>úşâĵ$:Ł5 ŘŻzÉ,ÓíľhÄ,w< "ňˇć(ąçr Úµ z‡3ÍÇ×/.U™yYÍÜ}T Ł3×–`ĺž lůâŹĹŰĘ€´î8č“>Ď q˘AŤß|Ńkvö7ë]ľFôî<°F^ëĚíá?í&¨ii‚ Ż\Oż:^Č)z†BđƸîLř‹ «ť9ď¬"ŚŮcáńŃŹÇ®_`íöýÚO‡M^ ˇR  ‘Ę“ŁW¸.ž­‡ýoŤ@9•Ę#mk\ë>¶l1mxź-çń58ŮĽý?ž#śü~ôđYF…‰śÜ´łCŚ”jaq­:n뎩Ž:ń @ĚßěÂע®¶ ˛_lˇö[$*Tďxô.OňŞÚ®;±É÷XYâ#ąÚe­ÇĎőµ·sč­ od8tŃÁlN(xŤŃW9ĘU‘.B'gŕsď f& ř2­” ee‡(fTËE^Űł±ą€–Ł©qFJ¨ĹZ«{…â`Q-‡đ47“IŞęŰ“řÇAR)Ǖȹú +q¸ZĚAčwÖ·ńÖ~÷ŕĹ?®7äţ&:ÓŇEń¦¶nŢZ°jĄá € ”Çdâ‘Âě$Ä·™Ň#ęŢ@LëYs&GPLm‰ÔY§‰+Ú´–¦U_ú‡YLŤ#*XÁłZ 7žęF>IˇěâĂ»7@´\Ů ˇ´ţ>f„/`ńôyF‘<° ,Hr}fc;CwHëJ0Śu ŠZHOi狾xץž>­ďókT;fĆVÚ5YaĄ'ěŽ2)ś6e8öq­o84ćşoj<÷wUŠçAšńt!â pNä •·]ÁźđLPÚ‡î÷Ç*`“z(raôŁ=«ýśĺxlš"ˇćWqŔŃi´¶?7JĚyí^ĎąTŢ﹇L®>ÓQ™;ľ±ĆĚłĽőź›Ž“Ó“pűŕ pOŇwćG•Ř(¤÷bŕ=[ ŞČæ\Šëy¬ÔEŘH +SËy-®Üné×ô;4Ě:ËŽŽĎWš`Ä8НûĚu+<Ř}”ç |%/Dngî‘§ÜŤÚXŔń^9(F AúĘyÔű3–ü˛ŃľKbl‘sYy:ç»×ÄĚŕâÝR<=Ľy‡ýXEĆôZň2‘ÎĽ®Š,Nłz-HŤcön㏷ÄȇX§_{ŢÔ$Ű"gÁ"Äb×â©Ů-U­GCDŰVŁĄ DZ 2QvU1a˝íZęT +…Ô•‹]Á“Z‚1tëE!ŢżŁśk_Ô*žüEżążLťJŃTɆn,ŤF%őĺ ž=B}y3€żó=˝ŹąÚ„«Ú­‘!żů¤‡)ú1.űCAÄ_ÎŻ oU.•ó •Ŕ6˝eĄR&NÜC`ĽŞ¸Ä’ »÷rĚf®ŰŞČâŃŐ7´‰j&‘†¨ţŇ®í6H©bŽ f‹Ŕ4÷âőŃ\IČO”XUŢ–,ńúŢîçä&Ććą>Ý^ŠËL zč$3ńqĂĽĎĽĹzŠXbĆg•»ŔőĆĘÔr5ÚSX†÷Ö€‰h¸ł8'n|’îN‰nŹ:Ăđ0Ҳ ĂŻXă@FěXk˵íÔÉE\ÁZÖ­YâŘ"ixM•n CyÜo˛-Ü/?˛:ąžśĐŇř‡ií<hŢŘPÚŮN‘‹n2.cZp ¶ç:¦“Đ·Ź"Ç>7łz9;”6J_űÝr˘}H‘‡Ş¤â=ÄEmß qřŕ°_ݎ?Śv,Z-k_/ZÍ!‘cŞQîś]C[:V›·vň‹˝äNŚ&@ŔkY}ŹU Ă \™ě\\ Ę)ˇď§ţę?t<šx’ ňşe#D ČÝrł•ĐPáN–‘¬ÜTi}cΊƟkč4t1MBn™Dőó&ę‘Ĩ˝z•ëë}L‹!PtnŠpŔĎ5¨ęŤpóJ˙g6…fT$y´Âî´‡{S¸Ň1u¦ˇÉ1F‡ź94ë»"S¬Ďßô·xÓÔ†”Ĺő=^"Ź»(pok?i[‰ ~­śl#ůMź0Î*•HD–e¤—Ü€ˇ3±y<I+Xä/2Ť=FĆ0ľ<ßOtN!éÂ@‹Šťśž0¤ÝŹ(µ¨=2éÚ¤—ăáxpwĐk- ßL-#r —˙•`ꡤ2NNŤn9Dę͢~ńÉvŽ2q€©·S‚@ţčPą¨ďIAs 0ă8=ŠL50…JÔóA&qlFšçÉÍí¸ CDÔ”č-!°ňŇ[äJę±/›V.śˇDćĚ®łh“I~-®ýo‘¬™Pô•-©j'Ȳ?„ĽĆŮýŚÂđ°q<~ !"řŰ|bĘ{©ÔEĽĄ¶ß^b XČ%"­ć’¬zżZH*uőLJčİÔbó[î†nŽß^}‚oŁdż ôĺů 6ßěÝ>Á±yV\rűÚ‹§ŕ±ßä#đqby¦›ACz·z|ʬ¬ęLFlŕyÉc»8¬YťÍś?ĂĂĘCË–ŐŃ~Ͷă-h€<~, őťQ4¸Ď""ŽOFŢ›ö,¦›,é;Ë2Ç-<ŻcŢoZĺ,É´„ôŰ%™šŐłtü.Ä÷ĽWěÓ›ÓăY_…Ę9} ިԠ13˙>±éţZţzTŻż|–8ˇ`GXí`˛şwŕN¨ĐăłV[Ďs?(uëI1µŮ5Š_®ľeFg%ô$Ő/‰Ď¶’2‰Ś6ŮqÖqĚtn«’,+ęĎ +-´Ćµg`E瞥Ş(·tŃ™ˇď],T"†ö„€D[a\čĚ%˘ß?Ť§‰…Płqb%Ń~Ů,Őř@żťëJ#­ ç9ľěÚ—·Š¬č˝^¶^łç8řuˇ¬¦w3ŰôUq?SŇüa|ůz:ćTBŃľIý¬Şá˛âąůŔ©Š{ʇŠÎů›eE+řž™}|^h5ł$"ý9űCćúAâ#VÎÜg0—ŕ];l,4ŞâńŢTĹZ :ců*áZ`M>×( ™úĺ¶D"ßńšÄ6‘b"ąćłEPw‹y¦,˘ĐsĘňsŽä`™ĐjĆUúŐĎW‰5,3"QŁÍNÉ$0]DÁB±a@’XDqńpmć/Ü*Đ‚*oć°Őr‹¤Żw­b;Ż"W0GPÍř&äŘOŻ4Ühq„°č$; 8KÎdgO .;†ślŞÝJ2ĺÖÍČÎż|ß'd¦ôťC ňcŮćVĆÉzŹo·%ĺúú€&¨"'±űŠi3.†žRŽ[›ëOś‚p#WAMDNx˛Âić“§y­ĺřńĆ›ÇۤvĆpL ďîزD†Ó»M9™ÔYz« ˛ĄäŃrä®Ěň¬+“(@m/±’V +#§jí°Ćń©Ą|ôµ\D™yĺĹ»Ą]‰Ćj<@Tť«źxăđ«r¶. XŤ_oZ—Qr |‹ÜT×R +o÷&R˘×5j!U«‘cÜĄˇň=.j‰Šö}-4ž ‰ŚĹş_ +•¶l»C(–č©Ä•ś z*>đ’«łZĂŹ€PLâ¦H§Xň¬;!öĄň—7źiňxŇĄâe(‘â¤}A5ą#˝ÉËkÎ÷úW Ń1(ąÄK·ÇqpÖů*>“S4xX+Y±Ą×۸×ŢĆO󸵒‹9îŰC¤|Sž"La(őŮâĹ–‘ŰMP(l‰šÎÝMĚ:xwň˛ąýŃ:›âçi*¦˝tç§ő µ`^6ŽďJÝŁ´\­ŚŞ|ÍA!Â/O@`o7{&ŽĎýäÖźú™Ăč úç;±Ě3y©JDWç†Ď˛(¬9<Ţ`ś~ćÖÜ·8¶řÖ`îĘŰń[‰r wĹ´€&Áڰżb¤b*84äJNžmîs=ľŰE•×´z¬ţAP¸ť 9ę‡âG®±IToyéűá}8Âuq‹@ő‘V7 -‘0ŵ +ńŕ*%é2™ĚËxźxÓW7Ć’W×sY‘ ŘhŻş:© eZ8)ÇŃúYa.5ëîĹč’ęp5[w\EÖhMlG}· ůBŤÂA‰®Šxp§–ű‹¨HkˇŁćNżJŕVŚŹďašÂálŐď"g+ośĹŚ#úń,×Ńň˛’d[E‚˛Í•‘Nö•Ö{ô +ˇ˙™Ą~©#ě>TܴٱőŢ" ۦŁ|Ąr2wéĄěŕN†wń¬9ą'Ő‘D{>EÄ´Äě0čxĹ ö×R f; ń˘Ńâő;†˝\m~l‘FÔô7G.đČ=CçDäzZ§R…GüąĹ*9\SŇšJlś{ެ• @O3*﨩˝hQd$°ĘÉĎŇź„lo׹te9řhÉÝŔîśU'r!Ő§—¶T¬«ďwŘÉAá`žÓĹ´řĚT<ůpĹ KűA…ĺ§/řďšňúTXNŢ­h€ÜýbĎž «*UąąîĆ“`®MEä"ĆÚí‘äÎV0?ĹĄ’ŔlżłrŃ×Ř"Ç`>Dęő~ęŘ!ŃÇÚ$Ď«M©\ŃVˇXFž7ĺŔ7Çľm‰)Ź: Ä’uBßsÎŽu‰q űÖ˙ě׊铚L`d"4)XŁ‘lŕüŠÉZŹŃäµîbégÖ‘ý r¨Č%wS']Ý7qLĺžBąń˘sÍ ĘÝŘ>Űé ¶Énf„ŕě ű¶–gËľźů}F÷(Đ褙}îóU˙ŻTť˝9‹˛ţ“­"*ŻE”+/ÍŰÔ>@X.rĹp¦ŰĆÔ¸đuâüć[©–ôUĄZšS÷ŞTćŘN3¬;y¦W‘›ÎPĆ`ÁŘůD´mÂĽŠü“řx ů±`áóěi1şCë'tć·PHćďúËăĚLóôŕ2uS ¤B0Z*BT–j`i3-„*‰µ!·¶Ý=o‘Vîl.´qN ›Hí”J + 3U¬ŞJ˘Âń’éíLn\c0XYýZ…XZE"éX×Ńk=ÜÚS×Č;ń%ŐoËç$ÔŐČIŹś¸ń¶ćT,1\­q†ÔeÝG]ěVP%¤BUÉ•Žj­#Ű?śŻĹFś=‰cZy Ş™L pźM¶ŠRdlŃ©Čʵ&*ŽŠŹnŽ1ŹŮ Ąa~Čéš Î¤ŠKÝŮm$VŚďňD;á3Aę!č-SKŠß%ţqô[×ţś1˝®×‹€KĄx–O^B=~k$ż8ľÔąż±“ÔNYßÍ\mt-y[ÉŹŁS“\«?čé{ _‰%ŻĄÓB]'»¶0y˝:˘Ş6W‚ŕ(Ň(~3şS[lĎ!—•đ·I枀ÔĐÖHś+žŕR+á°áXîĚ·ówâÂě$߼»‘ŘöJĐľşKk]®X?ó28S5]đ»×)PöXđ#řҰ5ŤRµĹ#ęű­]< ‹‹ëQśţÔ5dőů›Îůo c°Ł}€¦Ý#â‰~ ۄ쟣ćI&×°}?ÔČܢQ٦5Ä,HűY&Îą†u€ąůP­s +â5ŕČâX¦ąCEÄąž3aő\Cjş4„Ô’{||ŠŞ5FŚŇ;Ť^ADB8ŢŤŐĂzAŚńŽńŔŞ’¦ü´EiąĐ⼠cU3&:‹0ä[=+AÇŔűţ!yť-ô)ütÎj´×HŹůűBóŐyá9±kĹľ¤HuŽ<Ž™I + ‘Äľök%›ü˝­lžĺ…:Ŕ«ÔĘP'r*qžąľŽG/ŚĽ ŚS©oů5H €žg¤ń®¨e^7ÄĐSz4ÚşŹ>2o/2îÓ“ĚY)ŇojďëîbĆYq­ű” śčcbl©Ń‘CxĄîËüąx?¶a˙ ·÷Cť/śÉŞz‡Ŕ¶k0ł…e§KŞúń4‘ŹiR_šýŞp¤%K3 Ůöă…[u3\CĺÓ͇‡9ŤqŽÂ*7 n ­ű5˛căŽËÓ•B+.Řô$Äp5íĄ˝µŘ¸RµźľV~%ëM +{[mfâbHŃrńÜŤ+ŤŁ@|ť:›ć÷y<^˙\Ç’Đwă‡ĎŇŞKô¤f»éɬ*€ľŐ˙)GĐ Áiş1pö¶ŠČ©e­e`=ýčܰvE¤ ®hÜńVK>ʵSŔĐđ'üAą>Ś|čĐ=ŇÖŘ!†śśö­Ü'hí¤rëq%Ť0üÜE©ŚD¦Ůë¬~Ši#Ŕ4ě(‰.\§+chŽ8čr¸śEKJŞŚ+ň-Rşy[´ť„çm¬B$YŞŠ†5l)É´•ÚŤÂ-őä„•—Ůk X}±šÖYÔ/śűM?ŻŹÖł62¤ŞµśŢEXKNPŘÄ{Ť”‡~"˝;ďěJzâ[í›ß‘3ńčéqr§PŔڱş‡ü "Cډ?wf‰pf™J©âbFí<ş%a:(DZÂEQżčęőQA•*1c?¦NŘ"TŐu‘¬óAűbb _őă+őĹT¨Č óجa`"`ý”ŚkZ¬Áuŕ+÷2±„G©śhđŔdĐú7DŘ(ɫҗRčÁ„{Č”%pÜ»I=Iń9óSésŤ-đ¨çáô·;áSMdQ0€/%‡§´qĚ-#°mA÷ ©cIţLK–řłĽa'Wň[Y´L­§oĽxĎëŃÂ9–×0¸ h¬„ŤU]8ő^äóůŽ*$8ŽŤëĚ+*Ž*$.éÇ<†™ŕ%YÔű?č4bxźI=Fůţ4€UµG3 ¦SNúćE9ľÁLčšIdÎj!ÓbfQŹH™5v>)Tw–\/jŠy«Ô?‰Uc/]rő“§yoÄäÜ–J‰ ˙ćŤzVyîÇ©Ěů^c6ň¨'Ů"źM7s¶Ţld!•QGßžČD~ \ř< ŽPŞĆ+é‘@ÝÁąµ_#Ď8ÜMÂĚضj Ú'ÓăË•˝%TrD¨ÔÇ;ńěÔ +Ęt(öĂ™BŐ‘˛Ă»¦LĽY{gA±écĎRω˛Ő69ˇNe´ŐŰ Đ9Ş ©—˘ŮŮÇóô×ËgxQLE¸hT{®=Şß®qŔČ9I~Dűč •j¦‘ŚŘ¤‘ĽxÍăIHÄr ±Kýh‚„ŢRgŘ4’Ái ´"’VаĘzĂĽ¨B6ů}ß„fŹ;W®M!ŰM“*3Ö=M!9HĐZknŤ’BRń _?ť;_eCÍm‹Ěُ˛/Ô%ő™ŻuíwÔ,‘6†źŹ¬ď¬(đ™¶0ڎ4đˇÄ“źÔB{ ‡P đĹg?˛€zB»Ă«ţž17ő¤:Ç–yő8®wŞ6P ZŔ,Ą‘DśjĐ("|rý ”l«^ö„Üő}&†¬úÜNT˘4sŚiŰ{ďąż˛ëÉr(3żx¬}ň ¬şşď|•\á·aë}Ű´¶KŽF_IJşC–'«4^€—Ç䧢2I–ßb€„1Îmč¨Ú0ŚLúes·kźą΢>}Ď‘HyŐ ±±eŕzł2JV›}żXâY,éމ¨™Şő$´ľg˘Ô5‰«$‹ľÄuźHŽZ„~—Š’Ü7U1}’ńÜDrłZEhxĚ=,WäĎÇJ5Vli5¬ÎŹŁ‰˛ĎńĐ€@Dš‘̉ÚkĹÚJĹÜ]žSů Şt±ç¤!Ćž°*ű‡)ŚÄeŨÁ?YŞÄ ,;íKÚZ–ń+¸ÓÖu˛ąi.Ôfö‰DJTÔ˝O4˝Zż9€cöŢ•BBÁDXńç€QŐ©É*©r‚+jLUiá"L˙i!CsŹ_)EÓXđ&żJůV3·Ąäďĺ­=Ü7CŐ{ĚÔ‚@]_#š<§2îĎuç±Ý†ň˛ô©ÉUlyZ÷‰š}€Ńk0ŃĚĐě;lň(ăŐ¸Š©Ż<ô{ÔOˇšUĄä˛‹×r•P‚Ű=P˝Ë˘@ÉČbK"4Ä—ŞĹđć1‚•9iżžŕ&ߏ>O©K +ů0üâ·TČär‚úóţ­2=Rkt˘Om}$hcŘFąJ Ě¦>^56BTk§dg\®żh,e‹ĽBDP·ůdUަ¤HmĚĘ›jnmͶţ>ü>RD\qv ”1‚ĆŐĆÉ­@‹=ú°ž@v‚ŠÝeŠśL!ąŇ‰çN0(‡1tě¨Ţ—¶ĺ‚Ü^ă‰s?îĂĆë–^S®}˘F¬ş´î f2‰źę+°]Ö´1Ę÷D‰5sDHŇH"]R©ůÚ¨QąŞ´’•ű €kd,jš÷¶R%ĹĄ6GűÔŘX,gbk«JŇ$¦nE_JŚk¬«ŇĆX,×ŃĺP$޸Ţsg>Š]Mqľ-B7®ý“|„~®ç$ćöš eUUAAZđ@y”ÉĎĄ )× ë–ďËüZé ¨~J¬b7Ů~hĐş_*Ď›:(&ÉŤĽ*˛xwv¬öž%¨Łj(3ąŤĄ1}D‘#pi Z‹ů',ÖŚŁ¨Đ.žZ‹@ĄĘĹcÖ±EÚH¬ÉSŹMcMÉ2/^fÂÜRO© Ľ ޲¦¸›ms-¤5’őŽ\ú8Ĺ1"2r¨ ˇ–ÜZDh?ŕ"2·úλě˘Řrťű»ŠęÜD +±A´˛b‡›ZLN`"ťđHëͬťtĘłő]KZ邉teÁ»ĆüoĄva%†{‹G!ëąQ•ÎĆłéäôĐ7ąhUŘŻEŐ„ŠŐ©ŔЦ:lv§!CŐ6űT\®-СŽQóŔ4úÁ%·Áę XL®$OжmURç -íŔ3.S…‹ňĆ/HG‡XOĘ/ M®˛»."S’ü–4ş»°"ĺŮŁŻŢMd%ŰB >ÜőŻr"Ď™qÂÝÔc„<~öÇöI|ŰŁ;gYŹ +TíIŻ`e˛(ťŮ~+ćü%ŰvMÉ›aŮRi6#ˇĘľĘ~ą˘<«ś)^–6«~˛µĺ'ŃVőĺ7ZŕËčm–ş"żëzÂ#°±°ŞE™z^ +öČ,főP•ĢÎk‰—‹”xźÎQŽéBuŰË)vĚGŹí8eÉÔ”+Ěg¬őě +JŃNşúť­"ŐŰű–—@ÓéăÜ­Ň$úÍ’˝k]5YľHŻěP DsÜR Vď1űEş†QG€Ěl9(AX5ˇ‡kÔF¬ n+,§8Jí‘pQď;ŔăŐYo_ŁÓ·oĹwR­í¬lćF"\B?»ecçţ/ţľh2'ĄVÄ +>ż›?Ń—D%íćţX¨đy"u€ńWđ%śĐŔ tBëűjduŤđ@ÄŞČ*’$-no/¦T˛®ÄVIE”&[\hJdÍ›PÄ´Ť+ÔäÖáuÎçCW•1Ëâę4$ŠřTßB‡ČÝ_]°‹÷aTë„‚ÜŠčeÁnľĎÎĂ’=„6yŻćĺČ2 +@×FŔt¤‰O®ŔˇKd…IŔĺÄN;2X„UjşČłőAÄyŹ2^Ă˝uŃłUˇV˛%ouL’ń´ë>çĹfF×V5¶fwź2Úéőlç¶ó•\ÖPW†áń„, ŔPoIü@ş¸•a‡Âw˛…GB–4z™ÁÜě"ćJ»T“ )*z١is˝!VuńI +{蓊VC*‰çŇQŕý‹I}Ĺ(HŮ’ëDMď8W3Ńéˇ äŞěÎĺf›‰žÜ9î.íľŃ5TědGô5NŁ[í5sđ `=”ě× iżR¤ ßÇŠM;ɤáObÉm>Śs+'A*ĺGżK˛ôŔŰÎWťŁ}ĺ2¶ÚńLeQĎ·˝j“Xř™i$sň®˘•č…x3±Ň¶}«ĺ]®§iŤV>Ôáăx@ůĆyÓů˝(5¨Ĺ–`ű]>˙Ě7pőŮkŽJ>f‚ŕ2#ťř[ĚýÎřŘŽ] +´Mű±WJćôʼnUIßxR‹Ú4Ö5”ŘŽU"´vű4€ů•×ĘŹ˘'}eŐÉĂbŤßętŦ’ÝMPÝgpuq]«ŤŰ#­ĚjŔÖî 3ým­”€éüšŞ•^éÓý­“vGťJL¸ë0g=Ąř|ÄĐ_DL×*_ď)gŠĚA@0¬b¶Î­NQ›„!Őď,yű +M˛.“QcJňfě8&Ş·Đ!ÝŁ\ŃŢěÔ‘˘^ Ôd¦ńËöXŚÔ ˙ư@öć..ŞŁ_Ě)?#ç@ŠqrěC'ŽkŐńđ÷ŐÔđM‰Ł4ëľŰ¨j[•ÝđŢÓîąv¨ńŘŃuţ,çsW´bť®ůü0c?ťüLc9šťwË·FîaáŤGzź9Τ>}Ë9ç·fŹéyÄđ稩čtÍÔł˝I¬h"b«’ŻYň¨śsO4»42bŢř-"š˝|-\mu ʧ m‰Ł‘žÝćňZúŃł„óT‘(ýÚWÇđ’•LÄwµű¦ťh‹ňZµ%‚˘ú˛ź‹őív¤dČŽô\Çćh•xÝŹ^`˝t¬(uMŘŘ—X´őS0ýC¸öąĺŘ´‚Đsîá@6M%y %łyńĐ,ŇCz"ź— $µs 2»7‹W4Ó©ž;fŃäÎů+ŕäjOă•Ő+© Ö7éZą„"‰*p™äuíň†‚xŠMD1?ĽިWßU‹Î0BÖ+§]*gçD*»Pk_®ÎsY¤Ń.1î¸Äp}T< Uk?†ĺčÉë‘ěg8¶Ľ'ŘwŇ÷KĆ×ÜŰ˙ž:·‹xđ©Z)ď|“¤•dp=Ąp#űJ9ývđ)Ô,XÉ«ľÔCůM©4ł ç=±ú<ďDÖ\‹âŰHhĽ?–Ĺ[˙˝±+ëŐă8®ďôî‹é^f¦{’'Q @°ÄÖ“ŔX„¤Ŕ$Љáź:Őµśţd“`Cş·îô,]Őµžs%öŁ:Çíôw8č©fy®śŔń+` ˘ł]Ç„8Ć‘ç4‡kkŇ‘×Ďšs`/ó%‡šlô‘ݰíÔ°ňĺ¬nřľá)ëŞzV»0 U)ş 5ń‚Ä6ݨ@ô-X(Ź!Ź„k_>4µa}ܱ˙~V¨ŇŽdm“}.Ç`˝=Ń™AńîFjË+*'Ż3XŮf‹üťŠÜYľj¤Ů–N‰ŮPc§Ó` +Ť„@óĆń•‘ šÝŞvr•…ŘŐ\íN˘PQµ«Á—Bž1nÁ’z‘#CŮi= +°ÇrÇÄ׹RMČ "7pď­A9 Âs)Ŕä?xcű-Oö9EDľş< ~  &ěáé& +—R§D&†›MĘ~;–+Í0čéšđťf×.JÎb^%džčCU˘†? VÔ(Ü%ÝÚˇsWŕś„Bńq¦îI‰ÉaęŁâ9xC'‘\…BĹçśćV1Č +|(76–Y ľĄ)Ű«ÁQR’Ë.ë5ńr€^e}NäŢť%2z·í!ČÖÉu*Aéş –ŢÉÖ†—#G}ٍ đ3†éjž’ś‡čš#4ůcnd|épÝ×ĹźáLÔíáž›¨wŕ`ÂÜxĆ2e$OďňĆŹowťĺ¶<ćéDáHn­a ś·»Űú•śŁĎĎF?Wp)1üz”|ř¤Ş +J–Ó+ĺ™ăRídŮÝĂËq6™ě› g=±QÝ˝ëYK‚Dć^ f?‘Ůô°Ż@ćZS˛Ďj9f˛†ĘÇN~ŹeçÉĄ÷ľëhd·&[U\đhBÔ °`’p źCĚPgî‡BM­Ë6őBS5ö + +ëÓQµÔÎaŢL]Äyv‚ŁDLá­Ä4ĂD¸µ$¶Ät+É^iĂđí%^˝§ţT5č·,B·p$şÂđËRŢ`«¦»Â·ŕ^P#7)ŃÉ®~Ő•…‰0ˇ4ÎBšgźĚÄô»\k źS»íh ֿĀÁ¨©ç,c:ČáBëÜ{ŹĆâçťéV ź;á7x ś +o‰ČG¨Á oŚWŽ6žĺR:/+°]ąÖµ}ŠKÝ@Q‘,íAB|΄™sŠ*0‰Č1“ą0—:mNČ/ÔIÁőűĺtµPOXpN´3 ¶E¤Â“„ŞŮB~ÇEŕ‰#Ż;Đ“Ť cŘYEŽ™Cüa|{p»©ćČ>í†íJQ1fОÜÔá±–ÝÍá@ËÎOęňqOb&“„ĘźUçDĘZľĄYŰL=Ć8ŻOE®Dř‹1ëŐSçóľĆĽÉެTRĐH.S(Ç[¸e&"ţ]6€J¶ŔŞŐŢÍ1ŤlIĐÖ*™k%E‘ťbřĚlî$dau&@ô>ÎŹřçÁ‘RPúĆ´ aĄJÚCî×W)YŔJí)L¤˘ !÷ąŤ@ŕŕ™G +ëED™ĚlŇquČ"¤:FÍžř©w§˙Ą +^˛Ô`Ç+ýŞČyśóŹ\‹Ă—y+k]Ëţv ýRő’1ČücĂ 2jî«°Đh Ď3( +!>Kş÷yóČ©(°TŁşĺú” e_öě' V-0Ů Nš'wćüşiÖüB®tÄ”pĘŞ«{źž+آ-•ÂĘÔÎK±vť‹3l¦RŁŃ »'AKÉć K7‹xą†`qaB7ł?PŻ‚•Ętł86Ďa‹5©9DŚCEüşĺé…n>d_[Ć.R·z%€|Ć0ą QĹ4xKă.‘ŮmL×=ˇ‡ě(Ş}+źňíĹRgĚśÚĂß`ţůÖup"((\%üHĚ?Ľe‰oçĂéPöŮqÍ;Ë^ÝŤĆ="Y©g2énuMµţ>ď>ś‹“­şWĎč˘ ŤŢĆ.wňݑݠm®N(±úë‹séCŃRî"Ś˙‚Ц%…yĘÔĺ g°ědO@ů…š“ž®3{‘ ‰ĘěşJn˙苹µe·(#SWM$›o \™(¤@JľB ž+‘{ŃYE’fMETäK„«1'(˘3y+mX%BijĹĘl]Ď&±ĹAJ‘‡÷ô=GA~=;Ę“GíiÁAÖ‘ ÎöF8řńEĺ,Śa3•j‡ŠîŻíÁäÎ.Ëd^ľM)¦ÉUK!Ţ[Ą!51oOüÜóY>źJ—BÔsŞÂ%C:pJ‰{°Ľ +ŠÓËčŃŔ§ďˇ)Í|É…˛vŽăM´ŕt¬ŃÓ˝6˛¨Qµ6¶ß ^§Z#Ţ÷ápfns¬LSř.%\ÇutĹřÇJ–ŤpĐÉT&.„9rAÇŽ_ ^˘<މ‰O­ÎQ6L + öľů›śŤŁ” l8J%PĆb"éÁ^‘fˇĂÖ˙ĆJŔĆ´B{"ă$ +\*î|¤ńľ@ë§AΦ©R‰/˙*ŚÄET„Ř|sú„óp4˛kCEý×ôöj ŰŚ=îĂiˇŤx,T˘ĘÎĆŐŮ “Z©;÷DŐŽĚłŠ<ť·çÔ +endstream endobj 60 0 obj <>stream +űZKüa ŞWH qdn§T×µ3“<<őí=Ő˙î»îâŚwô\÷*őţ”_Q0Şâr°P Šă®PJ‹ĐĎ-SçEmßTŐ­ń"zşĹ“zeÇ ´˛&¶ÂćÁ%b´’m’‰LĎ ­t( xś…!Drt@+†rg6ŔÄĚ­4Rł˛:Wo<…AJ|č%SEąC1î(ËťśÔĄ˝¤¨ąŠÉýŐ‘6 5QĹĎČ+Ć. ŕZ•¸EłőĘ´ÖĆ·©+`Úü&1Ż‹ŚY%"{ŔŔX×sɡŢ80O‡Ň¨JĄ¦3‘„79s{‰d¦×DF4ÚU~…lš‘07ZśťÎÁę•uY\Uű»¬˛×wˇ¤'Mĺ“ŢsŠŔ*ďç™üËŹLwxl°űNk0|fÉž[ŢÂAăÔjV|ěÄIŘjXRoÁÇ#úRDxllĺÁ`©¨=ö5Ăë¨Hd9&-|Í«…séĆt\Ů–¨ ’=|ásÝ\aż9xĎÝD QËł·ĚđČëďúUřě1DĎ0ľŞťu桲ä}ĘSE—»xÇ‘$í«Ďj+j:í1۵6+ărë cŮ]Žě\ódŁxČZGňf¤}ÜTô›Čy󱑢&‰¦"…aĄ!Â,ç*҆ĎІnťů‰ĺÇDę|‰<ÜsŇÖ*ąé`şeűÄČ…äJ$VDW5h®Ö—:žĹŚžmy4Ą.O5fŚŇ@_îĘ[|-eúHHrh…¸âĺ ¨c8G˛Šh5B˘CP2‘­ÉVc0Š b­B(z”Ę®% ž~?´Ťh‘…8! ţOpiÉgěxăÚ3@`E%[}€?~$ µ‰HPkK˙&{8±V¶e,5žĐ<şÂý´=”›ó6ř„ćŢŹ™Á牆7EüJT;bÖIDpđŮě=˝ävŤŃ^aÚ]Éy/húßę^ÉCŤ„rY['cő8ľe¬”DKŞ0ÖÚÉ),DÄ…Ť¸ĂâLÂOÁ4ĺŘýůĽ/ĽęčpI[(·ěî÷zĺRbŚ‚DÚr0ÜV§Š»ęv@H¨{rţ¸^•^×ŘaHÔ4ZÇź§*Ň›qëšÝŞŽ(wX«‡k,qßX|¶±A†€ŃT‹D§Ú‚ęn¦hbĽč\ř€U´·ŇD(Ž2Ť&7tqF”Y‡]­—©Ďí,m,µďę± Şęšá"śk?ĺRŶ „j#ŃąKV¨ů ú(öäNt UY‚śW}ĽŰŐUkĺvŠŹD@yĐTö Ř•Y™w`lşĘľó:™Ź›~9°+ą ´¸sá×qř+3/Ź ŐĎŃ'÷&Ľá™T˙T×ĎhD!.ÍĐĆr8B°;Ř[“Édš| -®G*zĚ7ű‘Ž˘µ†çHš‹DzÚ›h<×Ęü®%”Î, +ą÷(÷::9}Q†čőŞŔé;˛76ŕĂ %ýN\§mÝ>¸NGĺ*Ţ|JăÝ4fĐŔČsň[>߲čbäńLâŚěÚ˛Ŕ˛ěŚüĐĎ㢮YHákg»ˇžË<,10T—hŤ&€ÔćĘ]xĘ2­mŇh–ËGÓĚź“_ţ„’•Ç6ň„ëh3ČfZ¨q5!yĚ+„ŔłúŽzĐą~Ä™ŃÔ^ň+—ęŽ,ŕ:!ĎYX‘Lć4,ňZ-Ă÷‘6Y|‰¨Żý.ŻŘPžňŠEî#šŰÚ™„ +ꊬíeůt6­č>ݬűöĘîH>FäŢYžźČH‰ëG řʉsŁ"wpůZ˛m™ś#ÁÂsfě)•ęÁěíçďÉ“6ČC¤Ů\Q@jJtîÜmF Ď­w^^B7dřµA!S?TŰ›®ÚXńĐĐĽŘńtŞčŘĄhٸ©ťą:ńH@d4ăôJŻc›  ‚ě›8sčóµ¤Kj¦Ş¶]vˇS[Ţ©řŕfa~MŽŇH`ˇ$ײ’kŃŠĆšs$÷’38j–«ô|ťNŮĄ"e§FĆé*Ž…{®ľÔ?âö™oü†ÄUčAĎŞçůđ>ńfwôčĄSŮÄż…śËI» eîË‘ĺ®|řľu9_„YmV˝ăŢŤ¸VľŻsšŁíŽĺëÝWÄZŽ×c®"ćÜ"9g1Sß+Ţd|ě%ŇeĚ«YQ·ąnrv  q¤!é•(#¦[˘ć=ŹŮeg±U+Qâţ1Mn-÷¬:Ŕ=ĺ6ŘwĽŃű‘mtjT6†Şeďč©.ýŃę™jŢ“DkŞ%ÇáŹI>»Óŕ,4˝hŘ›~úUFšF†ý¤¶yż‘é ŤRv?śČÎnG6Ą3č„ÓíäĽw1ÖOcsN32ń0šŹ7”ęä\q>Î{x_L…NöAÉQ¸jňI=}•ú»w,Ë^^žt[4ZëSqŢ}’Ď•WľG‰LŰĄUćÄ’ Ě®‰‹PB+%§ąQôŮFŃj„â¦ă«íşÓ|'2ęѣ幤:óYş„şRîoEŁ=¶6mĹEľ9fÓUTĘ€ţ¶(îa’ W瓊­¬wv)꡹ ±d^^M»©ÝQO_4\:¤EŃhpnEh:#G źˇÜl™˘éíLú˝‘Žđc(Óć±wśě5Íďîɤ(%&‡&×qbç"¤l5.ćÇ7ĺÝ“’@Krô¶´&{Ćńž“!Şľť'đúEO-Áď¶ŤÁăđ©Ł6Śz©9ĽżzÉťŤ%Ľť‰™_blŇB‡<7µpL G8Šioé ÝżD‚$Ŕmů(ݱUR5 3hhž„„¶‹L5Ď­¸4mňf—HRÁjV­ą9$ÇŠňÔDB¨ű<öh†ňć€{ ÄWmń9ţJ˛oş§đ8 PĹs›Ě[ŹŻ$-jŢtƱćҤߡ|QťI-§žëíěL®üy˛t„\kč,Ľ¨›˘W¶6 Fˇ‹jçć˝Cžp3g}k Y59eëęęĄ4Ű˝ČĂÚŚëýEб«.0™Ü~\{¬sĂ]”)j;7˘ş 3ÎYz{[öŽËd.áDz{Âr\DÜ: ńĄ’ÂBý(ń™Şw‚ĆZ§·Ô™…čîD"ŃÁs­Ŕů÷PŔc+d#śËćđŘ1·řÁę0~GŔyë<…4Ěuç|¦6§Çé‹ÇčćJˇ©Ůă??Ĺë˛:uŽĺ!ĚqĹ<"§l «7ĄÁą=©jţ_ĎÁŠO/?č"ňë"kapjT˛TDŢçp„›ô;üŰCG° +YČ-S«™č*<2ĽúŔ«~RqÚŻĎ +”Ť2Ç\ÎŮmS‘]Ţ´ßD‚łsE§Ż*W̤N<¶J´búUłF˘"g$gc“•Îŕ·€O7ȧ´ß1ó·&ĺLź[2âTBT‹ř3W§Äđj“śsÁz'OS,%± âuŐŕ¬ňx&ĐMřďďT*}Iás,—ŚB+X—ş7g=óc`k-…¤}'Ë·8‡ěÁDĘÚ]žyô8Ú>ÓE%?2üłnŔ‹˘ŰłĚ H×Dľ?Oůľ}ëý°ëđľ  +­cn((Dőp +ż'ŕ“ZYş«#;˝8SPrŇF5?‘Żĺř ţg˛·Cń-M{ôjˇŻç±Ťâ·; +Ö®CĹw¤­%ľ¨DĽŚř)o»öŹ<ˇŻş45k1Řs§JBđl„y~Č3ICs­îźĺÚä輓aXOžĺMó˛ęâôĂ‘UK…Ą0Ďá•§-Ń㍌«ľˇß,ˇ +4ü“gĚň†h›ěn7L©'^ą'Ç05šŃ”C#pţTáćÄ< đ5UšÖ:Đr­ ó×ędj+š~–¬˛mźŃ(ij`­vŮęDJY6 (ÍřŢ…śZč-a./b_wO=Ŕ¦8G‹ńN*͢*Ů|Čb 9ÎĆR±ĺ×vćŽ + BM_CĘîéF¶?ŞZďdďŇ0Ţ]?OF·w(iĆXCurX~'yS\ÜŹ ĺ™3­x÷ŠQż‹m%g™7«ĂG9HŰ²?˛éNÉ +˘żŘS!ň^ł"ÜŽÚ’mć~Šą‰± ‹L!!1;ŘułélB„Ëhž5]ą+1ÔĚ«őaßŃÖé‡fGĽ-.Ü0Cb˘µĐ˛Î`–¸P ÷ ÉÄť„\Oď="ŠúĐ~RedO đ#÷Ö4|Y.daŽSF&â ZvOwkYô¦ŹÉŕüŕýĄÎU &n‡`Y@źmg˝SĽΧl۶ńZ¤ÉHôv•¤<Đ]Ă`µ °h^°Ž‡jś$¸?W{2őĎÜ€Ť¶–ЍťČd«uŐňkR/‘ôXŤBö¤đŘ7ĂÁ©Śo5' ¦űąťOŮp‹~ĺ»÷gÇńĐ;9Ż +!tś0í9˘¶b¤”g4̸HΦ+݇‡ËŤ*ń5¤qTöYZËĹě®É­ÜĆ‘+Ř—HiqÄźčÉŚ&Í䊵ë\üĹ&«Ďú˝R«ČŮëgÂŽXÇ:âőОóčíńÓ‰Vúîü‹\"Ů']"[¸•.P,¦AÔ•čeĘ=1ă•çíDůc ‰żT_ŇDA­éń~îoر&‚y˘ýV,„ĺŔ±R¤ß¶µ Ť›Ü‰sď­Ç'ÝĹ)UvřXěď÷1kóʶ’{łLˇFr‡úÝ‹RQE÷óÉH‰<Đ6<µÇ6ŮqnÎtő0ޏF×JÍ)[š‘ÇCˇő0Ä^™GËnDn+LőÎńŠÇîŽcĎąž»×\ĚĆ‹ ¶O (łÂÉ{ëSTźĺË"©ë@'n…[‰a‰ď`ŤZR@ń8Ž…’ŚU*"űc{ô; Ô?ű÷XýćóŢü×˧o_Ľ{÷ňíë?ľ–ůééůŰ˙ýĺ§§?˝yó×ß>Ő§ňÔŻ§?űé'ź`—4 –ĐčűuŮ˙©ţ/ ‡h&‘‡˝ľÂ¸őhňçTP,ůĎď˙ůŰw_ţü—w?żyýâíßźţ?{úýľ{űóëźÖŤ}Ż·ňň‡ďq_ż}úüţo¨ňôr›˙-7ű·O‹üŰźřô“Ë˙Ů÷K›Ę!†ş‹ }Čöl€Ím:ádxKě€Ű¤·cČ6ď@>ĂěO§Ű€.ę–ĆCöCďŔăĽď1«9cź‹xĎňşD9⡫ˇÔ§żŘZ(ôĘΞ Ý€JuŃT8/rŞĘţ‹ľ6Ć-A}×+ÍŞĄľ ťŮ*‚ŢŇ1ˇ-˘Ez?bŇD 1Ë+w«ÝČŚÂYA%rU&'ř3Î@ÇîJ…>dĘök¶Ý(@uŃě'UT¬t†h‚řÍ€$đŐú:pÓpoőG¤) +q€{ťbLŰx@Dł^:ÖŇĹ"›Ľ ó ńúÚ Ý˘HĹbÄc5ť)϶=;Öçě¨Ág§Y'ŃöÓLrAiYN­@˙}Ô©ŘË•D/hB@wÂąÄ 'óÄńšc•%Żí®ňÝZE”D3C|ç§Ő=€FÜ÷‘c4#mb®W#&¶ŃŔYRËŕM"/`ˇ|tÚ9«˘zˇ~Š}?Vh‘ÓP\A±†î é0°¬eŰ,ÔxdŘ´ŃŰZířżßNqťüďyÁӶ㫯úź·Ďĺ ľśĎĎ/ĐZs?Âő…!l0ŞăKŃ·wzđÇ]âáPÇ/íŇĄ ‰^Zó§čć”sVbů›SŰň·_Ôv}QŹ/ž?żŽçĎő·=;ľ–…żÖźúÓ*–ăő›×ż¶wß<—?ůüßĎďżzýĂ7/ţţňíď~'?řěŰ?ľüÓŰ?˙őĺŰO?ůń—˙÷ňéĹë×oŢ˝x÷ňäWO?ľ}ůË»7o_>ýňÓ›żá'řŁřĎ>űęŹ_úÉ˙OŁň +endstream endobj 6 0 obj <> endobj 16 0 obj [/View/Design] endobj 17 0 obj <>>> endobj 40 0 obj [39 0 R] endobj 61 0 obj <> endobj xref +0 62 +0000000004 65535 f +0000000016 00000 n +0000000159 00000 n +0000018089 00000 n +0000000000 00000 f +0000000000 00000 f +0000435569 00000 n +0000000000 00000 f +0000018140 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000435636 00000 n +0000435667 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000027015 00000 n +0000435752 00000 n +0000018532 00000 n +0000029996 00000 n +0000027312 00000 n +0000027199 00000 n +0000025605 00000 n +0000026453 00000 n +0000026501 00000 n +0000027083 00000 n +0000027114 00000 n +0000027347 00000 n +0000030070 00000 n +0000030376 00000 n +0000031940 00000 n +0000036134 00000 n +0000101723 00000 n +0000167312 00000 n +0000232901 00000 n +0000298490 00000 n +0000364079 00000 n +0000429668 00000 n +0000435777 00000 n +trailer +<<01C1B8370D45AF41AE9BA938E33B57AC>]>> +startxref +435973 +%%EOF diff --git a/mentoring/mentoring-logos/mentoring-logo.png b/mentoring/mentoring-logos/mentoring-logo.png new file mode 100644 index 000000000..bcb76f0c9 Binary files /dev/null and b/mentoring/mentoring-logos/mentoring-logo.png differ diff --git a/mentoring/mentoring-logos/mentoring-logo.svg b/mentoring/mentoring-logos/mentoring-logo.svg new file mode 100644 index 000000000..9d210a61e --- /dev/null +++ b/mentoring/mentoring-logos/mentoring-logo.svg @@ -0,0 +1,198 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mentoring/outreachy.md b/mentoring/outreachy.md new file mode 100644 index 000000000..bff96b654 --- /dev/null +++ b/mentoring/outreachy.md @@ -0,0 +1,45 @@ +# Outreachy + +Kubernetes is happy to announce our participation in the Outreachy program running from December 2018 to March 2019. +Please see the [main program page](https://www.outreachy.org/) for general information about the program, +such as its purpose, timeline, eligibility requirements, and how to apply. + +The current list of projects, mentors and other details can be found [here](https://www.outreachy.org/communities/cfp/kubernetes/). + +## What is Kubernetes? + +Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications. +It groups containers that make up an application into logical units for easy management and discovery. Kubernetes builds upon 15 years of experience of running production workloads at Google, combined with best-of-breed ideas and practices from the community. +Please see [kubernetes.io](https://kubernetes.io/) for more details. + +## What are SIGs? + +Kubernetes is a set of projects, each shepherded by a special interest group (SIG). +To get a grasp of the projects that we work on, check out the complete [list of SIGs](/sig-list.md). + +This [slide deck](https://docs.google.com/presentation/d/1JqcALpsg07eH665ZXQrIvOcin6SzzsIUjMRRVivrZMg) provides an overview of how the Kubernetes community is organized. + +## Communication + +- Mailing List: development announcements and discussions appear on the Google group `kubernetes-dev` (send mail to kubernetes-dev@googlegroups.com). +- Slack: Please [sign up](http://slack.k8s.io/) for an invite. + +## Contribute + +As part of the application process, the Outreachy program recommends that candidates make small contributions to the project they intend to apply for. + +To start working on the project, make sure to fill out the [CLA](/CLA.md) and check if you have the right environment with this guide. +The README in the [community repo](https://github.com/kubernetes/community) details these things and more. + +## Coordination + +* Paris Pittman - parispittman@google.com +* Nikhita Raghunath - nikitaraghunath@gmail.com + +The coordinators can be contacted at any time. The easiest way is to send a slack message. + +Do you have an idea for a task that is suitable for this program? Contact the mentors or coordinators! Or even better, volunteer for mentoring an intern during the work on your idea! + +## Code of Conduct + +Kubernetes abides by the [Code of Conduct](/code-of-conduct.md). diff --git a/mentoring/the1-on-1hour.md b/mentoring/the1-on-1hour.md new file mode 100644 index 000000000..9fb1fbb1d --- /dev/null +++ b/mentoring/the1-on-1hour.md @@ -0,0 +1,28 @@ +The 1:1 Hour +======= + +One mentor. One mentee. One Hour. + +In this mentorship opportunity, you'll be paired with someone in the ecosystem that can help drive your upstream Kubernetes experience forward with a quick burst of information. The mentee controls the content that will be served during that hour. This is open for new AND current contributors of all [levels](/community-membership.md). + +Activities that you can select from include: +* pair programming +* live code review how-to (for those wishing to be a reviewer or be a better reviewer) +* live docs review how-to +* live code review of a proposed solution you are working on +* codebase tour of a certain area +* guidance on your contributor path (advice on becoming an approver, etc.) +* AMA session (ask anything!) + +We will attempt to match you with the closest mentor of your area of interested or activity. + +## Sign up! +[Fill out this form](https://goo.gl/forms/9WllkPFTRB999vcc2) and we'll be in touch! + +## Mentors + +If you are interested in signing up to be a mentor for this, please see the [mentor guidelines](mentor-guide.md). + +### Notes +Please pardon our dust as we build out the process for this and recruit more mentors. + diff --git a/org-owners-guide.md b/org-owners-guide.md deleted file mode 100644 index 530611dc5..000000000 --- a/org-owners-guide.md +++ /dev/null @@ -1,96 +0,0 @@ -# Kubernetes Github Organization Guide - -The Kubernetes project leverages multiple GitHub organizations to store and -organize code. This guide contains the details on how to run those organizations -for CNCF compliance and for the guidelines of the community. - -## Organization Naming - -Kubernetes managed organizations should be in the form of `kubernetes-[thing]`. -For example, [kubernetes-client](https://github.com/kubernetes-client) where the -API clients are housed. - -Prior to creating an organization please contact the steering committee for -direction and approval. - -Note: The CNCF, as part of the Linux Foundation, holds the trademark on the -Kubernetes name. All GitHub organizations with Kubernetes in the name should be -managed by the Kubernetes project or use a different name. - -## Transferring Outside Code Into A Kubernetes Organization - -Due to licensing and CLA issues, prior to transferring software into a Kubernetes -managed organization there is some due diligence that needs to occur. Please -contact the steering committee and CNCF prior to moving any code in. - -It is easier to start new code in a Kubernetes organization than it is to -transfer in existing code. - -## Current Organizations In Use - -The following organizations are currently known to be part of the Kubernetes -project: - -### Actively used GitHub Organizations: -* [kubernetes](https://github.com/kubernetes) -* [kubernetes-client](https://github.com/kubernetes-client) -* [kubernetes-csi](https://github.com/kubernetes-csi) -* [kubernetes-incubator](https://github.com/kubernetes-incubator) -* [kubernetes-retired](https://github.com/kubernetes-retired) -* [kubernetes-security](https://github.com/kubernetes-security) -* [kubernetes-sig-testing](https://github.com/kubernetes-sig-testing) -* [kubernetes-sigs](https://github.com/kubernetes-sigs) - -### Non-actively used GitHub Organizations: -* [kubernetes-addons](https://github.com/kubernetes-addons) -* [kubernetes-charts](https://github.com/kubernetes-charts) -* [kubernetes-extensions](https://github.com/kubernetes-extensions) -* [kubernetes-federation](https://github.com/kubernetes-federation) -* [kubernetes-graveyard](https://github.com/kubernetes-graveyard) † -* [kubernetes-incubator-retired](https://github.com/kubernetes-incubator-retired) -* [kubernetes-providers](https://github.com/kubernetes-providers) -* [kubernetes-sidecars](https://github.com/kubernetes-sidecars) -* [kubernetes-test](https://github.com/kubernetes-test) -* [kubernetes-tools](https://github.com/kubernetes-tools) - -† kubernetes-retired should be used instead of kubernetes-graveyard going forward. - -Note, this list is subject to change. - -There are more organization names that we are squatting on with possible future -intentions. [For more details please see community issue #1407](https://github.com/kubernetes/community/issues/1407). - -## Team Guidance - -Each organization should have the following teams: - -- teams for each repo `foo` - - `foo-admins`: granted admin access to the `foo` repo - - `foo-maintainers`: granted write access to the `foo` repo - - `foo-reviewers`: granted read access to the `foo` repo; intended to be used as - a notification mechanism for interested/active contributors for the `foo` repo -- a `bots` team - - should contain bots such as @k8s-ci-robot and @linuxfoundation that are - necessary for org and repo automation -- an `owners` team - - should be populated by everyone who has `owner` privileges to the org - - gives users the opportunity to ping owners as a group rather than having to - search for individuals - -**NB**: Not all organizations in use today currently follow this team guidance. -We are looking to coalesce existing teams towards this model, and use this model -for all orgs going forward. Notable discrepancies at the moment: - -- `foo-reviewers` teams are considered a historical subset of - `kubernetes-sig-foo-pr-reviews` teams and are intended mostly as a fallback - notification mechanism when requested reviewers are being unresponsive. Ideally - OWNERS files can be used in lieu of these teams. -- `admins-foo` and `maintainers-foo` teams as used by the kubernetes-incubator - org. This was a mistake that swapped the usual convention, and we would like - to rename the team - -## Repository Guidance - -Repositories have additional guidelines and requirements, such as the use of -CLA checking on all contributions. For more details on those please see the -[Kubernetes Template Project](https://github.com/kubernetes/kubernetes-template-project). diff --git a/project-managers/OWNERS b/project-managers/OWNERS deleted file mode 100644 index c9eb57d87..000000000 --- a/project-managers/OWNERS +++ /dev/null @@ -1,8 +0,0 @@ -reviewers: - - calebamiles - - idvoretskyi - - grodrigues3 -approvers: - - calebamiles - - idvoretskyi - - grodrigues3 diff --git a/project-managers/README.md b/project-managers/README.md deleted file mode 100644 index bdc6a1b58..000000000 --- a/project-managers/README.md +++ /dev/null @@ -1,46 +0,0 @@ -## Kubernetes PM - -kubernetes-pm is a github team that will help to manage and maintain the project in ways other than just writing code. Specifically, members of the kubernetes-pm team are -expected to: - -* Add/change routing labels to issues (eg: area/foo, kind/foo, priority/foo, sig/foo) -* Apply release-note labels to PRs (until that is automated or eliminated) -* Set the milestone on a PR or issue -* Assign issues to the correct people for immediate triage/work -* Assign PRs to be reviewed by the correct people -* Close duplicate, stale, misplaced issues -* Close support issues, with a redirect to Stack Overflow - -They should **NOT**: - -* Manually apply merge labels to PRs (lgtm, approved) or press merge button -* Apply priority labels to PRs -* Apply cherrypick labels to PRs -* Edit text of other people's PRs and issues, including deleting comments -* Modify anyone else's release note -* Create, edit, delete labels -* Create, edit, close, delete milestones -* Create, edit, delete releases -* Create, edit, delete PR statuses -* Edit wiki - -Abuse and misuse will result in prompt removal from the Project Managers group and loss of privileges. - -## Joining the group - -The following is the provisional process for adding people to the group: - -1. Join kubernetes-wg-contribex at googlegroups.com. Send a message to that group that states: -1. Your github id. -1. What you are working on with respect to the project. -1. Any official management or leadership responsibilities you may have (e.g., manager of a team that includes the following contributors: ….). -1. What you plan to do with the powers, including specific labels, SIGs, system components, github teams, etc. -1. How long you think you need the powers. -1. Any questions you have about appropriate application of the powers (e.g., policy for assigning priorities to issues, policy for assigning and unassigning issues, which parts of the system are covered by which teams). - - -The Contributor Experience working-group leads or Brian Grant (@bgrant0607) will approve or deny your request. - -Some prerequisites may need to be completed prior to being added to the github team, such as clarifying relevant policies in our contributor documentation. - -Thanks for helping to manage the project! diff --git a/setting-up-cla-check.md b/setting-up-cla-check.md deleted file mode 100644 index b988f4fb4..000000000 --- a/setting-up-cla-check.md +++ /dev/null @@ -1,60 +0,0 @@ -# Setting up the CNCF CLA check - -If you are trying to sign the CLA so your PR's can be merged, please -[read the CLA docs](https://git.k8s.io/community/CLA.md) - -If you are a Kubernetes GitHub organization or repo owner, and would like to setup -the Linux Foundation CNCF CLA check for your repositories, please read on. - -## Setup the webhook - -1. Go to the settings for your organization or webhook, and choose Webhooks from the menu, then - "Add webhook" - - Payload URL: https://identity.linuxfoundation.org/lfcla/github/postreceive?group=284&comment=no&target=https://identity.linuxfoundation.org/projects/cncf - - `group=284` specifies the ID of the CNCF project authorized committers group in our CLA system. - - `comment=no` specifies that our system should not post help comments into the pull request (since the Kubernetes mungebot does this). - - `target=https://identity.linuxfoundation.org/projects/cncf` specifies what will be used for the "Details" link in Github for this status check. - - Content Type: 'application/json' - - Secret: Please contact [@idvoretskyi](mailto:ihor@cncf.io), and [@caniszczyk](mailto:caniszczyk@linuxfoundation.org). - - Events: Let me select individual events - - Push: **unchecked** - - Pull request: checked - - Issue comment: checked - - Active: checked -1. Add the [@linuxfoundation](https://github.com/linuxfoundation) GitHub user as an **Owner** - to your organization or repo to ensure the CLA status can be applied on PR's -1. After you send an invite, contact the [Linux Foundation](mailto:helpdesk@rt.linuxfoundation.org); and cc [Chris Aniszczyk](mailto:caniszczyk@linuxfoundation.org), [Ihor Dvoretskyi](mailto:ihor@cncf.io), [Eric Searcy](mailto:eric@linuxfoundation.org) (to ensure that the invite gets accepted). -1. Finally, open up a test PR to check that: - 1. webhooks are delivered correctly, which can be monitored in the “settings” for your org - 1. the PR gets the cla/linuxfoundation status - -## Branch protection - -It is recommended that the Linux Foundation CLA check be added as a strict requirement -for any change to be accepted to the master branch. - -To do this manually: - -1. Go to the Settings for the repository, and choose Branches from the menu. -1. Under Protected Branches, choose "master". -1. Check "Protect this branch". -1. Check "Require status checks to pass before merging", "Require branches to be up to date before merging", and the "cla/linuxfoundation" status check. - -Given the Kubernetes projects anticipates having "human reviewed" CLA acceptance, you may -not do the last step, but it is still recommended to enable branch protection to require all -changes to be done through pull requests, instead of direct pushing that will never kick off -a CLA check. - -## Label automation - -The label automation is done using the [CLA plugin in prow](https://git.k8s.io/test-infra/prow/plugins/cla). -In order to turn on the CLA labels on your repo, add it as appropriate within the -[plugins.yaml](https://git.k8s.io/test-infra/prow/plugins.yaml), and add the cla plugin to it. - -You also need to add [@k8s-ci-robot](https://github.com/k8s-ci-robot) as one of the owners in -the same org/repo, to ensure that it can add labels `cncf-cla: yes` and `cncf-cla: no` based -on the status published by the Linux Foundation webhook. - -The label automation may not be essential for your repository, if you’re not using merge -automation. For repos with maintainers doing manual merges, github protected branches may -suffice. diff --git a/sig-api-machinery/README.md b/sig-api-machinery/README.md index be681156b..35a32ec7b 100644 --- a/sig-api-machinery/README.md +++ b/sig-api-machinery/README.md @@ -5,13 +5,13 @@ Please do not edit this file directly, but instead make changes to the sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> +---> # API Machinery Special Interest Group Covers all aspects of API server, API registration and discovery, generic API CRUD semantics, admission control, encoding/decoding, conversion, defaulting, persistence layer (etcd), OpenAPI, CustomResourceDefinition, garbage collection, and client libraries. ## Meetings -* Regular SIG Meeting: [Wednesdays at 11:00 PT (Pacific Time)](https://zoom.us/my/apimachinery) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=11:00&tz=PT%20%28Pacific%20Time%29). +* Regular SIG Meeting: [Wednesdays at 11:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=11:00&tz=PT%20%28Pacific%20Time%29). * [Meeting notes and Agenda](https://goo.gl/0lbiM9). * [Meeting recordings](https://www.youtube.com/watch?v=Lj1ScbXpnpY&list=PL69nYSiGNLP21oW3hbLyjjj4XhrwKxH2R). @@ -44,41 +44,43 @@ The following subprojects are owned by sig-api-machinery: - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/garbagecollector/OWNERS - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/namespace/OWNERS - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/quota/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/kube-storage-version-migrator/master/OWNERS - **universal-machinery** - Owners: - https://raw.githubusercontent.com/kubernetes/apimachinery/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/staging/src/k8s.io/apimachinery/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apimachinery/OWNERS - **server-frameworks** - Owners: - https://raw.githubusercontent.com/kubernetes/apiserver/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/staging/src/k8s.io/apiserver/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/OWNERS - **server-crd** - Owners: - https://raw.githubusercontent.com/kubernetes/apiextensions-apiserver/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/staging/src/k8s.io/apiextensions-apiserver/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiextensions-apiserver/OWNERS - **server-api-aggregation** - Owners: - https://raw.githubusercontent.com/kubernetes/kube-aggregator/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/staging/src/k8s.io/kube-aggregator/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/kube-aggregator/OWNERS - **server-sdk** - Owners: - https://raw.githubusercontent.com/kubernetes/sample-apiserver/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/staging/src/k8s.io/sample-apiserver/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/sample-apiserver/OWNERS - https://raw.githubusercontent.com/kubernetes/sample-controller/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/staging/src/k8s.io/sample-controller/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/sample-controller/OWNERS - https://raw.githubusercontent.com/kubernetes-incubator/apiserver-builder/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/controller-runtime/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/controller-tools/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/kubebuilder/master/OWNERS - **idl-schema-client-pipeline** - Owners: - https://raw.githubusercontent.com/kubernetes/gengo/master/OWNERS - https://raw.githubusercontent.com/kubernetes/code-generator/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/staging/src/k8s.io/code-generator/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/code-generator/OWNERS - https://raw.githubusercontent.com/kubernetes/kube-openapi/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/api/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/staging/src/k8s.io/api/master/OWNERS - https://raw.githubusercontent.com/kubernetes-client/gen/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/structured-merge-diff/master/OWNERS - **kubernetes-clients** - Owners: - - https://raw.githubusercontent.com/kubernetes-client/community/master/OWNERS - https://raw.githubusercontent.com/kubernetes-client/csharp/master/OWNERS - https://raw.githubusercontent.com/kubernetes-client/go-base/master/OWNERS - https://raw.githubusercontent.com/kubernetes-client/go/master/OWNERS @@ -87,32 +89,24 @@ The following subprojects are owned by sig-api-machinery: - https://raw.githubusercontent.com/kubernetes-client/javascript/master/OWNERS - https://raw.githubusercontent.com/kubernetes-client/python-base/master/OWNERS - https://raw.githubusercontent.com/kubernetes-client/ruby/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-client/typescript/master/OWNERS - https://raw.githubusercontent.com/kubernetes-incubator/client-python/master/OWNERS - https://raw.githubusercontent.com/kubernetes/client-go/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/staging/src/k8s.io/client-go/master/OWNERS -- **universal-utils** - - Owners: - - https://raw.githubusercontent.com/kubernetes/utils/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/OWNERS ## GitHub Teams The below teams can be mentioned on issues and PRs in order to get attention from the right people. Note that the links to display team membership will only work if you are a member of the org. -The google groups contain the archive of Github team notifications. -Mentioning a team on Github will CC its group. -Monitor these for Github activity if you are not a member of the team. - -| Team Name | Details | Google Groups | Description | -| --------- |:-------:|:-------------:| ----------- | -| @kubernetes/sig-api-machinery-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-api-machinery-api-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-api-machinery-api-reviews) | API Changes and Reviews | -| @kubernetes/sig-api-machinery-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-api-machinery-bugs) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-api-machinery-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-api-machinery-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-api-machinery-feature-requests) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-api-machinery-feature-requests) | Feature Requests | -| @kubernetes/sig-api-machinery-misc | [link](https://github.com/orgs/kubernetes/teams/sig-api-machinery-misc) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-api-machinery-misc) | General Discussion | -| @kubernetes/sig-api-machinery-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-api-machinery-pr-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-api-machinery-pr-reviews) | PR Reviews | -| @kubernetes/sig-api-machinery-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-api-machinery-proposals) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-api-machinery-proposals) | Design Proposals | -| @kubernetes/sig-api-machinery-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-api-machinery-test-failures) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-api-machinery-test-failures) | Test Failures and Triage | +| Team Name | Details | Description | +| --------- |:-------:| ----------- | +| @kubernetes/sig-api-machinery-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-api-machinery-api-reviews) | API Changes and Reviews (API Machinery APIs, NOT all APIs) | +| @kubernetes/sig-api-machinery-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-api-machinery-bugs) | Bug Triage and Troubleshooting | +| @kubernetes/sig-api-machinery-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-api-machinery-feature-requests) | Feature Requests | +| @kubernetes/sig-api-machinery-misc | [link](https://github.com/orgs/kubernetes/teams/sig-api-machinery-misc) | General Discussion | +| @kubernetes/sig-api-machinery-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-api-machinery-pr-reviews) | PR Reviews | +| @kubernetes/sig-api-machinery-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-api-machinery-proposals) | Design Proposals | +| @kubernetes/sig-api-machinery-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-api-machinery-test-failures) | Test Failures and Triage | ## Additional links diff --git a/sig-api-machinery/charter.md b/sig-api-machinery/charter.md new file mode 100644 index 000000000..28baf5f0d --- /dev/null +++ b/sig-api-machinery/charter.md @@ -0,0 +1,63 @@ +# SIG API Machinery Charter + +This charter adheres to the conventions described in the [Kubernetes Charter README] and uses +the Roles and Organization Management outlined in [sig-governance]. + +## Scope + +SIG API Machinery is responsible for the development and enhancement of Kubernetes cluster control plane. The scope covers API server, persistence layer (etcd), controller manager, cloud controller manager, CustomResourceDefinition and webhooks. + +### In scope + +#### Code, Binaries and Services + +All aspects of +* API server +* API registration and discovery +* Generic API CRUD semantics +* Admission control +* Encoding/decoding +* Conversion +* Defaulting +* Persistence layer (etcd) +* OpenAPI +* The informer libraries +* CustomResourceDefinition +* Webhooks +* Garbage collection +* Namespace lifecycle +* Client libraries + +#### Cross-cutting and Externally Facing Processes + +Client library releases + +### Out of scope + +The contents of individual APIs are owned by SIG Architecture + +## Roles and Organization Management + +This sig follows adheres to the Roles and Organization Management outlined in [sig-governance] +and opts-in to updates and modifications to [sig-governance]. + +### Additional responsibilities of Chairs + +Technical leads seeded by legacy SIG chairs from existing subproject owners + +### Additional responsibilities of Tech Leads + +N/A + +### Deviations from [sig-governance] + +N/A + +### Subproject Creation + +SIG delegates subproject approval to Technical Leads. See [Subproject creation - Option 1.] + +[Subproject creation - Option 1.]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance.md#subproject-creation +[sig-governance]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance.md +[sig-subprojects]: https://github.com/kubernetes/community/blob/master/sig-api-machinery/README.md#subprojects +[Kubernetes Charter README]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/README.md diff --git a/sig-apps/README.md b/sig-apps/README.md index 68d468427..e16aa66d6 100644 --- a/sig-apps/README.md +++ b/sig-apps/README.md @@ -5,13 +5,15 @@ Please do not edit this file directly, but instead make changes to the sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> +---> # Apps Special Interest Group Covers deploying and operating applications in Kubernetes. We focus on the developer and devops experience of running applications in Kubernetes. We discuss how to define and run apps in Kubernetes, demo relevant tools and projects, and discuss areas of friction that can lead to suggesting improvements or feature requests. +The [charter](charter.md) defines the scope and governance of the Apps Special Interest Group. + ## Meetings -* Regular SIG Meeting: [Mondays at 9:00 PT (Pacific Time)](https://zoom.us/my/sig.apps) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=9:00&tz=PT%20%28Pacific%20Time%29). +* Regular SIG Meeting: [Mondays at 9:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=9:00&tz=PT%20%28Pacific%20Time%29). * [Meeting notes and Agenda](https://docs.google.com/document/d/1LZLBGW2wRDwAfdBNHJjFfk9CFoyZPcIYGWU7R1PQ3ng/edit#). * [Meeting recordings](https://www.youtube.com/watch?v=hn23Z-vL_cM&list=PL69nYSiGNLP2LMq7vznITnpd2Fk1YIZF3). @@ -32,38 +34,12 @@ The Chairs of the SIG run operations and processes governing the SIG. ## Subprojects The following subprojects are owned by sig-apps: -- **chart-testing** - - Owners: - - https://raw.githubusercontent.com/kubernetes-helm/chart-testing/master/OWNERS -- **chartmuseum** - - Owners: - - https://raw.githubusercontent.com/kubernetes-helm/chartmuseum/master/OWNERS -- **charts** - - Owners: - - https://raw.githubusercontent.com/kubernetes/charts/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-helm/charts-tooling/master/OWNERS - - Meetings: - - Charts Chat: [Tuesdays at 9:00 PT (Pacific Time)](https://zoom.us/j/166909412) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=9:00&tz=PT%20%28Pacific%20Time%29). - - [Meeting notes and Agenda](https://docs.google.com/document/d/1h6UTTuNRbFI81higrN3JUV2XxyzqqVjZET4Xz4WTR-8/edit#heading=h.57pbxthvt6k3). - **examples** - Owners: - https://raw.githubusercontent.com/kubernetes/examples/master/OWNERS -- **helm** - - Owners: - - https://raw.githubusercontent.com/kubernetes/helm/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-helm/community/master/OWNERS - - Meetings: - - Helm Developer call: [Thursdays at 9:30 PT (Pacific Time)](https://zoom.us/j/4526666954) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=9:30&tz=PT%20%28Pacific%20Time%29). - - [Meeting notes and Agenda](https://docs.google.com/document/d/1d-6xJEx0C78csIYSPKJzRPeWaHG_8W1Hjl72OJggwdc/edit#). - **kompose** - Owners: - https://raw.githubusercontent.com/kubernetes/kompose/master/OWNERS -- **monocular** - - Owners: - - https://raw.githubusercontent.com/kubernetes-helm/monocular/master/OWNERS -- **rudder-federation** - - Owners: - - https://raw.githubusercontent.com/kubernetes-helm/rudder-federation/master/OWNERS - **workloads-api** - Description: The core workloads API, which is composed of the CronJob, DaemonSet, Deployment, Job, ReplicaSet, ReplicationController, and StatefulSet kinds - Owners: @@ -90,25 +66,25 @@ The following subprojects are owned by sig-apps: - https://raw.githubusercontent.com/kubernetes/kubernetes/master/test/e2e/apps/OWNERS - https://raw.githubusercontent.com/kubernetes/kubernetes/master/test/integration/daemonset/OWNERS - https://raw.githubusercontent.com/kubernetes/kubernetes/master/test/integration/deployment/OWNERS +- **application** + - Description: Application metadata descriptor CRD + - Owners: + - https://github.com/kubernetes-sigs/application/blob/master/OWNERS ## GitHub Teams The below teams can be mentioned on issues and PRs in order to get attention from the right people. Note that the links to display team membership will only work if you are a member of the org. -The google groups contain the archive of Github team notifications. -Mentioning a team on Github will CC its group. -Monitor these for Github activity if you are not a member of the team. - -| Team Name | Details | Google Groups | Description | -| --------- |:-------:|:-------------:| ----------- | -| @kubernetes/sig-apps-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-apps-api-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-apps-api-reviews) | API Changes and Reviews | -| @kubernetes/sig-apps-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-apps-bugs) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-apps-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-apps-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-apps-feature-requests) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-apps-feature-requests) | Feature Requests | -| @kubernetes/sig-apps-misc | [link](https://github.com/orgs/kubernetes/teams/sig-apps-misc) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-apps-misc) | General Discussion | -| @kubernetes/sig-apps-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-apps-pr-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-apps-pr-reviews) | PR Reviews | -| @kubernetes/sig-apps-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-apps-proposals) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-apps-proposals) | Design Proposals | -| @kubernetes/sig-apps-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-apps-test-failures) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-apps-test-failures) | Test Failures and Triage | +| Team Name | Details | Description | +| --------- |:-------:| ----------- | +| @kubernetes/sig-apps-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-apps-api-reviews) | API Changes and Reviews | +| @kubernetes/sig-apps-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-apps-bugs) | Bug Triage and Troubleshooting | +| @kubernetes/sig-apps-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-apps-feature-requests) | Feature Requests | +| @kubernetes/sig-apps-misc | [link](https://github.com/orgs/kubernetes/teams/sig-apps-misc) | General Discussion | +| @kubernetes/sig-apps-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-apps-pr-reviews) | PR Reviews | +| @kubernetes/sig-apps-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-apps-proposals) | Design Proposals | +| @kubernetes/sig-apps-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-apps-test-failures) | Test Failures and Triage | @@ -129,8 +105,7 @@ Monitor these for Github activity if you are not a member of the team. ## [Helm](https://helm.sh) and [Charts](https://github.com/kubernetes/charts) -Helm and Charts each have their own regular meetings, as listed above. - -[Meetings can be found on the SIG Apps calendar.](https://calendar.google.com/calendar/embed?src=phfni1v25vnmi4q06m851230so%40group.calendar.google.com&ctz=America%2FNew_York) +Helm, Charts and its other subprojects have [moved to the CNCF](https://github.com/cncf/toc/blob/master/proposals/helm.adoc). +See Helm's [community repository](https://github.com/kubernetes-helm/community) for information about the Helm project. diff --git a/sig-apps/agenda.md b/sig-apps/agenda.md index aaca6480e..3dddc33c6 100644 --- a/sig-apps/agenda.md +++ b/sig-apps/agenda.md @@ -1,13 +1,10 @@ # Agenda -~~Join us for sig-apps on Wednesdays at 9am PDT on Zoom: zoom.us/my/sig.apps~~ - -SIG-Apps meetings are now on **Mondays at 9am PDT** on Zoom: https://zoom.us/my/sig.apps _Note, the [minutes and agenda have moved to Google Docs](https://docs.google.com/document/d/1LZLBGW2wRDwAfdBNHJjFfk9CFoyZPcIYGWU7R1PQ3ng/edit#)._ ## August 17, 2016 * Intro / Agenda -* Brian Hardock of the Deis Helm team will demo [Helm](www.github.com/kubernetes/helm). +* Brian Hardock of the Deis Helm team will demo [Helm](https://github.com/helm/helm). * Helm is a tool for creating and managing Kubernetes native applications. * Adnan Abdulhussein from Bitnami will walk us through example helm charts for Kubernetes native applications @@ -25,7 +22,7 @@ _Note, the [minutes and agenda have moved to Google Docs](https://docs.google.co ## July 27, 2016 [[notes](minutes/2016-07-27.md)] * Intro -* [Gerred Dillon](https://twitter.com/justicefries) will do a demo of [Deis](https://deis.com/) +* [Gerred Dillon](https://twitter.com/justicefries) will do a demo of [Deis](https://github.com/deis) * Group discussion on Deis * Matt Farina will give an update on results of the sig-apps survey * Open discussion around sig-apps survey diff --git a/sig-apps/charter.md b/sig-apps/charter.md new file mode 100644 index 000000000..237a87629 --- /dev/null +++ b/sig-apps/charter.md @@ -0,0 +1,53 @@ +# SIG Apps Charter + +This charter adheres to the conventions described in the [Kubernetes Charter README] and uses +the Roles and Organization Management outlined in [sig-governance]. + +## Scope + +SIG Apps covers developing, deploying, and operating applications on Kubernetes with a focus on the application developer and application operator experience. + +### In scope + +#### Code, Binaries and Services + +- APIs used for running applications (e.g., Workloads API) +- Tools and documentation to aid in ecosystem tool interoperability around apps (e.g., Application CRD/Controller) +- Grandfathered in tools used to aid in development of and management of workloads (e.g., Kompose) + +#### Cross-cutting and Externally Facing Processes + +- A discussion platform for solving app development and management problems +- Represent the needs and persona of application developers and operators + +### Out of scope + +- Code ownership of ecosystem tools. Discussion of the tools is in scope but ownership of them is outside the scope of Kubernetes aside from legacy situations +- Do not recommend one way to do things (e.g., picking a template language) +- Do not endorse one particular ecosystem tool + +## Roles and Organization Management + +This sig follows adheres to the Roles and Organization Management outlined in [sig-governance] +and opts-in to updates and modifications to [sig-governance]. + +### Additional responsibilities of Chairs + +- Report the SIG status at events and community meetings wherever possible +- Actively promote diversity and inclusion in the SIG +- Uphold the Kubernetes Code of Conduct especially in terms of personal behavior and responsibility +- Chairs oversee the subproject creation process + +### Deviations from [sig-governance] + +- Generic technical leads are not appropriate for this SIG because sub-projects maintain their processes +- Chairs follow the Technical Leads process in the subproject creation process +- Proposing and making decisions MAY be done without the use of KEPS so long as the decision is documented in a linkable medium. + +### Subproject Creation + +SIG Chairs following Technical Leads process defined in [sig-governance] + +[sig-governance]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance.md +[sig-subprojects]: https://github.com/kubernetes/community/blob/master/sig-YOURSIG/README.md#subprojects +[Kubernetes Charter README]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/README.md diff --git a/sig-apps/minutes/2016-07-20.md b/sig-apps/minutes/2016-07-20.md index c29687349..01d7bf70a 100644 --- a/sig-apps/minutes/2016-07-20.md +++ b/sig-apps/minutes/2016-07-20.md @@ -2,7 +2,7 @@ - Michelle Noorali gave an introduction and overview of the agenda - Janet Kuo gave an overview of Deployment features - - See her [blog post](http://blog.kubernetes.io/2016/04/using-deployment-objects-with.html ) + - See her [blog post](https://kubernetes.io/blog/2016/04/using-deployment-objects-with/) - See used [minikube](https://github.com/kubernetes/minikube) for the local cluster set up during her demo - Saad Ali gave an overview of Volume features and things to look forward to around Volumes - Check out his [presentation](https://docs.google.com/presentation/d/17w7GqwGE8kO9WPNAO1qC8NyS7dRw_oLBwqKznD9WqUs) diff --git a/sig-architecture/README.md b/sig-architecture/README.md index e2057b80a..f20c538a1 100644 --- a/sig-architecture/README.md +++ b/sig-architecture/README.md @@ -5,15 +5,17 @@ Please do not edit this file directly, but instead make changes to the sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> +---> # Architecture Special Interest Group The Architecture SIG maintains and evolves the design principles of Kubernetes, and provides a consistent body of expertise necessary to ensure architectural consistency over time. +The [charter](charter.md) defines the scope and governance of the Architecture Special Interest Group. + ## Meetings -* Regular SIG Meeting: [Thursdays at 15:30 UTC](https://zoom.us/j/2018742972) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=15:30&tz=UTC). +* Regular SIG Meeting: [Thursdays at 19:00 UTC](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=19:00&tz=UTC). * [Meeting notes and Agenda](https://docs.google.com/document/d/1BlmHq5uPyBUDlppYqAAzslVbAO8hilgjqZUTaNXUhKM/edit). - * [Meeting recordings](https://www.youtube.com/watch?v=d5ERqm3oHN0&list=PL69nYSiGNLP2m6198LaLN6YahX7EEac5g). + * [Meeting recordings](https://www.youtube.com/playlist?list=PL69nYSiGNLP2m6198LaLN6YahX7EEac5g). ## Leadership @@ -21,7 +23,8 @@ The Architecture SIG maintains and evolves the design principles of Kubernetes, The Chairs of the SIG run operations and processes governing the SIG. * Brian Grant (**[@bgrant0607](https://github.com/bgrant0607)**), Google -* Jaice Singer DuMars (**[@jdumars](https://github.com/jdumars)**), Microsoft +* Jaice Singer DuMars (**[@jdumars](https://github.com/jdumars)**), Google +* Matt Farina (**[@mattfarina](https://github.com/mattfarina)**), Samsung SDS ## Contact * [Slack](https://kubernetes.slack.com/messages/sig-architecture) @@ -31,40 +34,97 @@ The Chairs of the SIG run operations and processes governing the SIG. ## Subprojects The following subprojects are owned by sig-architecture: -- **kubernetes-template-project** +- **architecture-and-api-governance** + - Description: [Described below](#architecture-and-api-governance) - Owners: - - https://raw.githubusercontent.com/kubernetes/kubernetes-template-project/master/OWNERS -- **spartakus** + - https://raw.githubusercontent.com/kubernetes/community/master/contributors/design-proposals/architecture/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/architecture-tracking/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/api/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/api/OWNERS +- **conformance-definition** + - Description: [Described below](#conformance-definition) - Owners: - - https://raw.githubusercontent.com/kubernetes-incubator/spartakus/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/test/conformance/testdata/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/test/conformance/OWNERS +- **kep-adoption-and-reviews** + - Description: [Described below](#kep-adoption-and-reviews) + - Owners: + - https://raw.githubusercontent.com/kubernetes/community/master/keps/OWNERS +- **code-organization** + - Description: [Described below](#code-organization) + - Owners: + - https://raw.githubusercontent.com/kubernetes/contrib/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/utils/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/vendor/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/third_party/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/OWNERS - **steering** + - Description: Placeholder until sigs.yaml supports committees as first-class groups. These repos are owned by the kubernetes steering committee, which is a wholly separate entity from SIG Architecture - Owners: - https://raw.githubusercontent.com/kubernetes/steering/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-incubator/spartakus/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes-template-project/master/OWNERS ## GitHub Teams The below teams can be mentioned on issues and PRs in order to get attention from the right people. Note that the links to display team membership will only work if you are a member of the org. -The google groups contain the archive of Github team notifications. -Mentioning a team on Github will CC its group. -Monitor these for Github activity if you are not a member of the team. - -| Team Name | Details | Google Groups | Description | -| --------- |:-------:|:-------------:| ----------- | -| @kubernetes/sig-architecture-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-architecture-api-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-architecture-api-reviews) | API Changes and Reviews | -| @kubernetes/sig-architecture-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-architecture-bugs) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-architecture-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-architecture-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-architecture-feature-requests) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-architecture-feature-requests) | Feature Requests | -| @kubernetes/sig-architecture-misc-use-only-as-a-last-resort | [link](https://github.com/orgs/kubernetes/teams/sig-architecture-misc-use-only-as-a-last-resort) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-architecture-misc-use-only-as-a-last-resort) | General Discussion | -| @kubernetes/sig-architecture-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-architecture-pr-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-architecture-pr-reviews) | PR Reviews | -| @kubernetes/sig-architecture-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-architecture-proposals) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-architecture-proposals) | Design Proposals | -| @kubernetes/sig-architecture-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-architecture-test-failures) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-architecture-test-failures) | Test Failures and Triage | +| Team Name | Details | Description | +| --------- |:-------:| ----------- | +| @kubernetes/sig-architecture-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-architecture-api-reviews) | API Changes and Reviews | +| @kubernetes/sig-architecture-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-architecture-bugs) | Bug Triage and Troubleshooting | +| @kubernetes/sig-architecture-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-architecture-feature-requests) | Feature Requests | +| @kubernetes/sig-architecture-misc-use-only-as-a-last-resort | [link](https://github.com/orgs/kubernetes/teams/sig-architecture-misc-use-only-as-a-last-resort) | General Discussion | +| @kubernetes/sig-architecture-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-architecture-pr-reviews) | PR Reviews | +| @kubernetes/sig-architecture-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-architecture-proposals) | Design Proposals | +| @kubernetes/sig-architecture-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-architecture-test-failures) | Test Failures and Triage | ## Additional materials * [Charter](charter.md) -* [Backlog](backlog.md) + +# Details about SIG-Architecture sub-projects + +## Architecture and API Governance + +Establishing and documenting design principles, documenting and evolving the system architecture, reviewing, curating, and documenting new extension patterns + +Establishing and documenting conventions for system and user-facing APIs, define and operate the APl review process, final API implementation consistency validation, co-own top-level API directories with API machinery; maintaining, evolving, and enforcing the deprecation policy + +* [Kubernetes Design and Architecture](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/architecture/architecture.md) +* [Design principles](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/architecture/principles.md) +* [API conventions](https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md) +* [API Review process](https://github.com/kubernetes/community/blob/master/sig-architecture/api-review-process.md) +* [Deprecation policy](https://kubernetes.io/docs/reference/deprecation-policy/) + +Please see the [Design documentation](https://github.com/kubernetes-sigs/architecture-tracking/projects/4) and [API Reviews](https://github.com/kubernetes-sigs/architecture-tracking/projects/3) tracking boards to follow the work of this sub-project. Please reach out to folks in the [OWNERS](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/architecture/OWNERS) file if you are interested in joining this effort. + +## Conformance Definition + +Reviewing, approving, and driving changes to the conformance test suite; reviewing, guiding, and creating new conformance profiles + +* [Conformance Tests](https://github.com/kubernetes/kubernetes/blob/master/test/conformance/testdata/conformance.txt) +* [Test Guidelines](https://github.com/kubernetes/community/blob/master/contributors/devel/conformance-tests.md) + +Please see the [Conformance Test Review](https://github.com/kubernetes-sigs/architecture-tracking/projects/1) tracking board to follow the work for this sub-project. Please reach out to folks in the [OWNERS](https://github.com/kubernetes/kubernetes/blob/master/test/conformance/testdata/OWNERS) file if you are interested in joining this effort. There is a lot of overlap with the [Kubernetes Software Conformance Working Group](https://github.com/cncf/k8s-conformance/blob/master/README-WG.md) with this sub project as well. The github group [cncf-conformance-wg](https://github.com/orgs/kubernetes/teams/cncf-conformance-wg) enumerates the folks on this working group. Look for the `area/conformance` label in the kubernetes repositories to mark [issues](https://github.com/kubernetes/kubernetes/issues?q=is%3Aissue+is%3Aopen+label%3Aarea%2Fconformance) and [PRs](https://github.com/kubernetes/kubernetes/pulls?q=is%3Apr+is%3Aopen+label%3Aarea%2Fconformance) + +## KEP Adoption and Reviews + +Develop and drive technical enhancement review process + +* [KEP Process](https://github.com/kubernetes/community/blob/master/keps/0001-kubernetes-enhancement-proposal-process.md) +* [Template](https://github.com/kubernetes/community/blob/master/keps/0000-kep-template.md) + +Please see the [KEP Tracking](https://github.com/kubernetes-sigs/architecture-tracking/projects/2) board to follow the work of this sub-project. Please reach out to folks in the [OWNERS](https://github.com/kubernetes/community/blob/master/keps/OWNERS) file if you are interested in joining this effort. + +## Code Organization + +Overall code organization, including github repositories and branching methodology, top-level and pkg OWNERS of kubernetes/kubernetes, vendoring + +Please reach out to folks in the [OWNERS](https://github.com/kubernetes/kubernetes/blob/master/vendor/OWNERS) file if you are interested in joining this effort. + diff --git a/sig-architecture/api-review-process.md b/sig-architecture/api-review-process.md new file mode 100644 index 000000000..989de05f6 --- /dev/null +++ b/sig-architecture/api-review-process.md @@ -0,0 +1,257 @@ +# Kubernetes API Review Process + +[API Approvers](mailto:kubernetes-api-reviewers@googlegroups.com): [Clayton Coleman](https://github.com/smarterclayton), [Jordan Liggitt](https://github.com/liggitt), [Tim Hockin](https://github.com/thockin), [Brian Grant](https://github.com/bgrant0607), [Eric Tune](https://github.com/erictune) + +# Process Overview and Motivations + +Due to the importance of preserving usability and consistency in Kubernetes APIs, all changes and additions require expert oversight. The API review process is intended to maintain logical and functional integrity of the API over time, the consistency of user experience and the ability of previously written tools to function with new APIs. Wherever possible, the API review process should help change submitters follow [established conventions](https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md), and not simply reject without cause. + +Because expert reviewer bandwidth is extremely limited, the process provides a curated backlog with highest priority issues at the top. While this does mean some changes may be delayed in favor of other higher priority ones, this will help maintain critical project velocity, transparency, and equilibrium. Ideally, those whose API review priority is shifted in a release-impacting way will be proactively notified by the reviewers. + +# Goals of the process + +* Provide an easily-navigable process so all parties understand their roles, responsibilities, and expectations + +* Protect Kubernetes APIs from disruptive, inconsistent, or destabilizing changes + +* Respect, gate, and expand expert reviewer bandwidth while maintaining consistent flow across the process + +* Provide transparency, including clear feedback and path forward for API contributors + +* Maintain the high standards of the project, including positive user interactions with APIs + +* Provide review regardless of method of API definition (built-in, Extension API Server, or Custom Resource Definition) + +* Provide review over both tightly coupled external projects and in-tree API changes. + +* Provide a platform for commenting on popular extensions' APIs, so as to encourage the spread of good API practices throughout the ecosystem + +# Non-goals of the process + +* Creation or maintenance of the API standards documentation + +* Being a "rubber stamp" for changes + +# Process Description + +![image alt text](image_0.png) + + +## Intake Pre-review Checklist + +* The change/addition has been reviewed by the appropriate sub-project stakeholders and SIG chairs as needed, or else the request may be rejected pending initial review + +* A KEP has been created if introducing: + + * Any new resource type + + * Any new version of a stable API + + * Any new functionality added to a stable API as defined by SIG Architecture and the API Reviewers + +## What APIs need to be reviewed? + +* What are the kind of reviews? + + * **mandatory**: The changer is expected to submit the changes to API review, and the change is blocked on the API reviewer approval + + * **voluntary**: Changer can request a review, or a 3rd party can nominate the API for review. The review comments are recommendations. + +* Which projects are in scope? + + * github.com/kubernetes/kubernetes, and any kubernetes-* org projects it depends on are required to be reviewed. (mandatory) + + * Any kubernetes-style API that uses a *.k8s.io or *.kubernetes.io name, e.g. "storage.k8s.io" (mandatory) + + * "Critical" or other “highly-integrated” APIs, such as our extension points in the node, apiserver, and controllers as defined by SIG Architecture [TBD]. (mandatory) + + * any other github projects in the kubernetes-* orgs (informational, for now - may make mandatory in future) + + * Any projects that produce APIs (including CRDs) that are intended to work with kubectl and/or kube-apiserver. (informational - intent is to ensure consistent user experience across the Kubernetes ecosystem) + +* All API implementations (including alpha versions) that are part of kubernetes must be reviewed, including CRDs, so user experience across the Kubernetes ecosystem is consistent. + +* What parts of a PR are "API changes"? + + * "Resource APIs" include the versioned data definition (pkg/apis/*/v*/types.go or OpenAPI for CRDs), validation (pkg/apis/*/validation.go or OpenAPI for CRDs). + + * Configuration files, flags, and command line arguments are all part of our user and script facing APIs and must be reviewed. + + * Compiled-in APIs of the kube-apiserver + + * Webhooks request/response formats in kube-apiserver + + * HTTP APIs in kubelet + + * plugins which are not covered by some other standards effort (e.g. CSI and CNI APIs would be deferred to those standards bodies) + +## End-states of Reviews + +The API review process can result in multiple outcomes depending on the content of the change. For example, a new API could be approved for being builtin, or rejected in favor of out-of-tree development. An API that is reviewed informationally, results in either suggestions for changes, or approval as-is. + +## Information required from the submitter + +As much as possible, we will automate the detection of PRs that require API reviews. Significant changes should be reviewed BEFORE they reach the PR stage, but this is the backstop for anything that gets missed. Such automation may miss cases, so any PR can be flagged as "needs API review", which triggers this process. + +To begin the process: + +* Create an issue in the kubernetes-sigs/architecture-tracking repository that links to the relevant KEP or documentation + +* The KEPs/documentation should include a clear and thoroughly-researched justification on why the change or addition is needed, including, upgrade/downgrade considerations, and alternatives considered. + +* The proposer may follow one of two paths: + + * Complete the coding of the API change. Create a PR. Request an API review on the PR. (In future, the request will be automated based on detecting API changes). The API reviewer will /approve the PR, assuming the change was satisfactory and at least one LGTM has been given by another reviewer + + * Write the KEP/documentation including a detailed description of the API. Request a review on that. The API reviewer will note in the API review issue the commit SHA at which the KEP was reviewed. The reviewee will note the API review issue number. Later, when the PR is ready to add the API, the reviewee files another review ticket (per above path). The review is expedited because the reviewer only needs to compare the current PR to what was previously approved. This two step process allows for automation, and allows for KEPs to get API approval before moving forward. + +* explicit approvals by SIG stakeholders are not checked in the API review process. This is assumed to be given at the PR stage. + +* Any additional GitHub IDs associated with the submission (particularly in the case of multiple authors) + +* Acknowledgement that they have read and followed the existing API conventions document + +## Information to be provided from the reviewer(s) + +If **approved**/**reviewed**: + +* Any non-blocking or nit suggestions should be documented in the review document that will be stored in the repository + +* The feedback should be made in the issue with APPROVED or REVIEWED (for externally-maintained CRDs or external components where there is only feedback, not approval) + +* Final status in the issue should be given along with @ notifications for the submitter(s) so they are informed when the review is complete + +If **rejected**: + +* If completely rejected, e.g. "please do this work outside the Kubernetes org" - an explanation of why the change was rejected - appeals can be requested from the api-approvers mailing list ([kubernetes-api-reviewers@googlegroups.com](mailto:kubernetes-api-reviewers@googlegroups.com)) where the moderator will coordinate a follow-up review. If that request results in another rejection, there is no further appeal. + +* If rejected with "changes requested" - an explanation in the review document of what exactly needs to be changed and why (prior decisions, standards, etc.) + +* All applicable in-tree or critical PRs and Issues will be noted as not approved with UNAPPROVED until they successfully pass a review + +* Final status in the API Review issue should be given along with @ notifications for the submitter(s) so they are informed when the review is complete + +## The Moderator Role + +The moderator role is staffed by SIG Architecture and manages the API review backlog on behalf of the reviewer team. They will ensure that reviews are finished within a reasonable time, that information is correct, and that appropriate state labels are applied. They may also help prioritize the backlog, or move cards across the project board. Their mission is to help reviewers spend the majority of their efforts on performing reviews, not doing process administrivia. They may also work with the review team to schedule face-to-face review sessions as needed, or ensure the review is added to the SIG-Architecture meeting agenda. + +## Process mechanics (see diagram above) + +Timing of API review requests matters. The larger the change the more time that must be afforded. New API resources (aka Kinds) may require significantly more thought than single field additions. API reviews that are requested too late in a release cycle may not complete in time to make the release. Plan ahead. Also, if you are changing an approved API, you must consult with the [kubernetes-api-reviewers@googlegroups.com](mailto:kubernetes-api-reviewers@googlegroups.com) list to ensure it is still consistent with the approvals already granted. From a process perspective, you would request a new review in that case. + +New APIs (groups or Kinds) or substantial changes require KEPs. Major changes without KEPs will be rejected. + +1. Create an API Review request issue in [https://github.com/kubernetes-sigs/architecture-tracking](https://github.com/kubernetes-sigs/architecture-tracking) - the work will be tracked in the corresponding project board + + 1. Provide the following information: + + 1. Submitter GitHub IDs + + 2. Links to code/issues/documentation/KEP (keep in mind that all code will need review as well, as translation errors between proposals/markdown can and do happen) + + 3. One line description of the purpose + + 4. Acknowledgement of reading/following the API conventions document + +2. If the work is currently in GitHub kubernetes/kubernetes (or other explicitly-critical repository) as either a pull request or issue, add a link to the PR/Issue pointing at the API Review request issue + +3. An approver or moderator will adjust the prioritization of the request in the backlog, assign an approver (or potentially aspiring reviewer), and add the label status/assigned-to-reviewer (see *training reviews* below for the aspiring reviewer workflow) + +4. Assigned approver will either start the review, work with the moderator to schedule face-to-face discussions during SIG-Architecture, or lower its priority in the backlog. They may also request that other reviewers be involved at their discretion. + +5. Once the review is completed, the report will be made available to the submitters and one of the three labels applied: APPROVED REVIEWED or UNAPPROVED These may also be added after face-to-face discussions. + +6. Either an appeal happens, or the issue is closed + +## Review lifecycle timing + +Ideally, reviews will happen as quickly as possible, but it is highly dependent on reviewer availability and bandwidth. In general, the following timeframe can be expected: + +- time t: create PR in api-reviews +- time t+1 week: prioritized and queued +- time t+3 weeks: first review complete +- time t+4 weeks: subsequent review complete +- time t+6 weeks: approved or rejected + +## Expanding the Reviewer and Approver Pool + +There are two levels of authority granted in this process. The reviewer and approver. Reviewers have the expertise to fully assess and make recommendations such that minimal extra effort is required on the part of the approver. Approvers are vested with final decision-making power for the request, and can only be appealed in the manner stated above. + +To become a formal reviewer, you must gain a high level of proficiency in understanding the API conventions, project structure, and the underlying architecture. The best path is to study the work of other aspiring reviewers and approvers. Once familiar with the core concepts, one should contact the moderator to be matched with a reviewer mentor who can help facilitate their eventual inclusion as a formally-recognized reviewer. All issues in the API Reviews backlog can receive an initial pass by a non-approver. These trial run reviews can then be examined and critiqued by other reviewers or approvers. + +The path from reviewer to approver requires significant reviewer experience, endorsement from their mentor, and a body of successfully-completed training reviews. Aspiring approvers can petition for inclusion in the OWNERS file by sending an email to the SIG-Architecture and Kubernetes-api-reviewers mailing lists with the subject "**Request for API ****Approver**** Status**" with links to all of their completed reviews for the prior six month period. If all of the current approvers LGTM the issue, then the submitter may open a PR against the OWNERS file with their name added. + +To qualify, aspiring approvers should reference at least 5 provisional reviews of new API types and 10 provisional reviews of changes to existing API types with no substantive disagreement or additions by approver. Aspiring approvers must be able to demonstrate competence both for new API review and for compatibility concerns with modifications to existing APIs. + +An indication of whether a provisional review was seen as qualifying should be part of the critique/coaching feedback given ("your provisional review caught everything important that I saw, +1") + +### Training Reviews + +For those wishing to become formal reviewers, the process has an alternate path where API reviews that are not time-sensitive can be initially reviewed, and then collaboratively examined with an approver/mentor. This can be accomplished asynchronously as comments in the review document, or ideally by pairing on the approver examination. + +Once the provisional review has been accepted by the approver, it then goes to the submitters just as it would in the normal process. + +As aspiring reviewers gain proficiency, they may pair with an approver on time-sensitive reviews to better understand the process with less impact on the review duration. + +Aspiring reviewers should reach out the moderator on slack. The moderator will add them to the list of aspiring reviewers and assign training reviews as they become available. + +## Aspirations for future iterations of this process + +* Make a video on this process as guidance for contributors + +* Review the API conventions doc for freshness and organization + +* Separate and keep separate the process and the API conventions parts of all our docs. That way, people who are not subject to our process can read a more succinct set of docs on how to make good APIs. + +* Consider a new home for our API docs that is prettier than Github-flavored markdown ( a new tab on kubernetes.io or a new site) + +* Given the level of completeness of the conventions this process should generate documentation of undocumented conventions, which might be pre-existing, or might be new. + +* Ideally this process should lend itself to some automation. It currently does not. [ TBD: Create an umbrella issue for this ] + + * [We already tag PRs with api-change](https://github.com/kubernetes/test-infra/blob/1611f3be80713f9df933e25e4cf9a2b538302ef5/mungegithub/misc-mungers/deployment/kubernetes/path-label.txt#L7-L17) + + * We should review whether this can be improved + + * We should look at tabulating these changes at the end of the release + + * We should consider autogenerating API changes docs from openapi, or at least making it easy to review the set of changes + + * We should automate mechanical API review checks + + * For example, this PR: [https://github.com/kubernetes/kubernetes/pull/54887](https://github.com/kubernetes/kubernetes/pull/54887) + +* We may want to move toward the idea and process for "shadow reviewers" outlined in reference [1] + +* We need to update other docs to point to this document + +* [Updating-docs-for-feature-changes.md](https://github.com/kubernetes/community/blob/930ce65595a3f7ce1c49acfac711fee3a25f5670/contributors/devel/updating-docs-for-feature-changes.md#when-making-api-changes) + +* [https://github.com/kubernetes/community/blob/be9eeca6ee3becfa5b4c96bedf62b5b3ff5b1f8d/contributors/devel/api_changes.md](https://github.com/kubernetes/community/blob/be9eeca6ee3becfa5b4c96bedf62b5b3ff5b1f8d/contributors/devel/api_changes.md) + +* [https://github.com/kubernetes/community/blob/be9eeca6ee3becfa5b4c96bedf62b5b3ff5b1f8d/contributors/devel/api-conventions.md](https://github.com/kubernetes/community/blob/be9eeca6ee3becfa5b4c96bedf62b5b3ff5b1f8d/contributors/devel/api-conventions.md) + +* [Pull-requests.md](https://github.com/kubernetes/community/blob/a74d906f0121c78114d79a3ac105aa2d36e24b57/contributors/devel/pull-requests.md#2-smaller-is-better-small-commits-small-prs) - should be updated to specifically call out API changes as important + +* [Owners.md](https://github.com/kubernetes/community/blob/a74d906f0121c78114d79a3ac105aa2d36e24b57/contributors/devel/owners.md#code-review-process) - should be updated + +* We should probably add a checkpoint in the release process that covers focused API review + +* We should probably re-review all API changes in a release as part of documentation creation as a "last-chance" guarantee of ensuring we don’t ship something we don’t want to support + +* We need a special process for "informational" or non-binding reviews + +* [https://docs.google.com/document/d/1OkSQngGem7xaENqaO8jzHLDSSIGh2obPUaJGAFDwTUE/edit?disco=AAAAB_-Yzjw](https://docs.google.com/document/d/1OkSQngGem7xaENqaO8jzHLDSSIGh2obPUaJGAFDwTUE/edit?disco=AAAAB_-Yzjw) + +## References + +[1] [https://storage.googleapis.com/pub-tools-public-publication-data/pdf/45294.pdf](https://storage.googleapis.com/pub-tools-public-publication-data/pdf/45294.pdf) + +[2] [http://wiki.netbeans.org/APIReviews](http://wiki.netbeans.org/APIReviews) + +[3] [https://cwiki.apache.org/confluence/display/TS/API+Review+Process](https://cwiki.apache.org/confluence/display/TS/API+Review+Process) + +[4] [https://docs.google.com/document/d/135PQSFTDqUmxsBhG7ZwMYtfWnJ3XTirsdAvytlkzOd0/](https://docs.google.com/document/d/135PQSFTDqUmxsBhG7ZwMYtfWnJ3XTirsdAvytlkzOd0/) + +[5] [https://github.com/kubernetes/community/pull/419](https://github.com/kubernetes/community/pull/419) + diff --git a/sig-architecture/charter.md b/sig-architecture/charter.md index 55214bab9..066f0625a 100644 --- a/sig-architecture/charter.md +++ b/sig-architecture/charter.md @@ -1,40 +1,66 @@ # SIG Architecture Charter -This charter is a WIP. +This charter adheres to the conventions described in the [Kubernetes Charter README] and uses +the Roles and Organization Management outlined in [sig-governance]. -The Architecture SIG maintains and evolves the design principles of -Kubernetes, and provides a consistent body of expertise necessary to -ensure architectural consistency over time. +## Scope -The scope covers issues that span all the system's components, how -they fit together, how they interact, etc. +The Architecture SIG maintains and evolves the design principles of Kubernetes, and provides a consistent body of expertise necessary to ensure architectural consistency over time. -Specific areas of focus include: +### In scope -* Defining the scope of the Kubernetes project - * [What is (and is not) Kubernetes](https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/) -* Maintaining, evolving, and enforcing the deprecation policy - * [Deprecation policy](https://kubernetes.io/docs/reference/deprecation-policy/) -* Documenting and evolving the system architecture - * [Kubernetes Design and Architecture](../contributors/design-proposals/architecture/architecture.md) -* Defining and driving necessary extensibility points -* Establishing and documenting design principles - * [Design principles](../contributors/design-proposals/architecture/principles.md) -* Establishing and documenting conventions for system and user-facing APIs - * [API conventions](/contributors/devel/api-conventions.md) -* Developing necessary technical review processes, such as the proposal and API review processes -* Driving improvement of overall code organization, including github orgs and repositories -* Educating approvers/owners of other SIGs (e.g., by holding office hours) +#### Code, Binaries, Docs, and Services -Out of scope: -* Issues specific to a particular component or functional area, which would be the purview - of some other SIG, except where they deviate from project-wide principles and conventions. -* [Release support policy](/contributors/design-proposals/release/versioning.md) - is owned by SIG Release +- *Conformance test definitions* +- *API definitions* +- *Architectural renderings* +- *API conventions* +- *Design principles* +- *Deprecation policy* -TODO: -* Formalize decision processes -* Document initial reviewers and approvers -* Clarify criteria for areas out of scope for the SIG -* Document who owns client library, build, and release artifacts -* Document who owns conformance definition, profiles, etc. +#### Cross-cutting and Externally Facing Processes + +- API review process +- Conformance test review and management +- The Kubernetes Enhancement Proposal (KEP) process and KEP reviews +- Design documentation management +- Deprecation policy management +- Architectural initiative backlog management + +### Out of scope + +- KEPs that do not have architectural implications or impact are managed by their respective sponsoring SIG(s) +- The release enhancement delivery [process] that is part of the SIG-Release Release Team [subproject] + +## Roles and Organization Management + +This sig follows and adheres to the Roles and Organization Management outlined in [sig-governance] +and opts-in to updates and modifications to [sig-governance]. + +### Additional responsibilities of Chairs + +- Manage and curate the project boards associated with all sub-projects ahead of every SIG meeting so they may be discussed +- Ensure the agenda is populated 24 hours in advance of the meeting, or the meeting is then cancelled +- Report the SIG status at events and community meetings wherever possible +- Actively promote diversity and inclusion in the SIG +- Uphold the Kubernetes Code of Conduct especially in terms of personal behavior and responsibility + +### Deviations from [sig-governance] + +### Subproject Creation + +Federation of Subprojects as defined in [sig-governance] + +### To do + +- There remains lack of consensus in this SIG regarding the need for company and other diversity in the leadership of this SIG and it's subprojects, beyond what is contained in [sig-governance]. This still needs to be resolved and documented in this charter. Further details may be found [here]. + +- It remains unspecified whether and how SIG-Architecture gets involved in resolving technical [conflicts] within and between other SIG's, and this SIG's sub-projects. This still needs to be resolved and documented in this charter. + +[sig-governance]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance.md +[sig-subprojects]: https://github.com/kubernetes/community/blob/master/sig-architecture/README.md#subprojects +[Kubernetes Charter README]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/README.md +[here]: https://docs.google.com/document/d/1TTcfvf8T_tBhGDm-wjgg31WrWjYg8IZEmo3b1mpUXh0/edit?usp=sharing +[conflicts]: https://github.com/kubernetes/community/pull/2074#discussion_r184466503 +[process]: https://github.com/kubernetes/sig-release/blob/master/release-team/role-handbooks/enhancements/README.md +[subproject]: https://github.com/kubernetes/sig-release/blob/master/release-team/README.md diff --git a/sig-architecture/image_0.png b/sig-architecture/image_0.png new file mode 100644 index 000000000..554a53fa7 Binary files /dev/null and b/sig-architecture/image_0.png differ diff --git a/sig-auth/README.md b/sig-auth/README.md index bdd95a67b..b967ba7d3 100644 --- a/sig-auth/README.md +++ b/sig-auth/README.md @@ -5,13 +5,17 @@ Please do not edit this file directly, but instead make changes to the sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> +---> # Auth Special Interest Group Covers improvements to Kubernetes authorization, authentication, and cluster security policy. +"All I want is a secure system where it's easy to do anything I want. Is that so much to ask?" - [xkcd](https://xkcd.com/2044 "xkcd") + +The [charter](charter.md) defines the scope and governance of the Auth Special Interest Group. + ## Meetings -* Regular SIG Meeting: [Wednesdays at 11:00 PT (Pacific Time)](https://zoom.us/my/k8s.sig.auth) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=11:00&tz=PT%20%28Pacific%20Time%29). +* Regular SIG Meeting: [Wednesdays at 11:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=11:00&tz=PT%20%28Pacific%20Time%29). * [Meeting notes and Agenda](https://docs.google.com/document/d/1woLGRoONE3EBVx-wTb4pvp4CI7tmLZ6lS26VTbosLKM/edit#). * [Meeting recordings](https://www.youtube.com/playlist?list=PL69nYSiGNLP0VMOZ-V7-5AchXTHAQFzJw). @@ -20,47 +24,120 @@ Covers improvements to Kubernetes authorization, authentication, and cluster sec ### Chairs The Chairs of the SIG run operations and processes governing the SIG. -* Eric Chiang (**[@ericchiang](https://github.com/ericchiang)**), Red Hat -* Jordan Liggitt (**[@liggitt](https://github.com/liggitt)**), Red Hat +* Mike Danese (**[@mikedanese](https://github.com/mikedanese)**), Google +* Mo Khan (**[@enj](https://github.com/enj)**), Red Hat * Tim Allclair (**[@tallclair](https://github.com/tallclair)**), Google ## Emeritus Leads +* Eric Chiang (**[@ericchiang](https://github.com/ericchiang)**), Red Hat * Eric Tune (**[@erictune](https://github.com/erictune)**), Google * David Eads (**[@deads2k](https://github.com/deads2k)**), Red Hat +* Jordan Liggitt (**[@liggitt](https://github.com/liggitt)**), Google ## Contact * [Slack](https://kubernetes.slack.com/messages/sig-auth) * [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-auth) * [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fauth) +## Subprojects + +The following subprojects are owned by sig-auth: +- **audit-logging** + - Description: Kubernetes API support for audit logging. + - Owners: + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/api/auditregistration/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/pkg/apis/audit/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/pkg/audit/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/plugin/pkg/audit/OWNERS +- **authenticators** + - Description: Kubernetes API support for authentication. + - Owners: + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/apis/authentication/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubeapiserver/authenticator/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/registry/authentication/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/plugin/pkg/auth/authenticator/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/api/authentication/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/pkg/authentication/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/plugin/pkg/authenticator/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/kubernetes/typed/authentication/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/listers/authentication/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/pkg/apis/clientauthentication/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/plugin/pkg/client/auth/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/tools/auth/OWNERS +- **authorizers** + - Description: Kubernetes API support for authorization. + - Owners: + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/apis/authorization/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/apis/rbac/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubeapiserver/authorizer/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubectl/cmd/auth/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/registry/authorization/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/registry/rbac/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/plugin/pkg/auth/authorizer/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/api/authorization/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/api/rbac/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/pkg/authorization/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/plugin/pkg/authorizer/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/kubernetes/typed/authorization/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/kubernetes/typed/rbac/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/listers/authorization/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/listers/rbac/OWNERS +- **certificates** + - Description: Certificates APIs and client infrastructure to support PKI. + - Owners: + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/apis/certificates/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/certificates/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/registry/certificates/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/pkg/authentication/request/x509/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/util/cert/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/util/certificate/OWNERS +- **encryption-at-rest** + - Description: API storage support for storing data encrypted at rest in etcd. + - Owners: + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/pkg/server/options/encryptionconfig/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/pkg/storage/value/encrypt/OWNERS +- **node-identity-and-isolation** + - Description: Node identity management (co-owned with sig-lifecycle), and authorization restrictions for isolating workloads on separate nodes (co-owned with sig-node). + - Owners: + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/certificates/approver/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubelet/certificate/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/plugin/pkg/admission/noderestriction/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/plugin/pkg/auth/authorizer/node/OWNERS +- **policy-management** + - Description: API validation and policies enforced during admission, such as PodSecurityPolicy. Excludes run-time policies like NetworkPolicy and Seccomp. + - Owners: + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/api/imagepolicy/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/api/policy/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/security/podsecuritypolicy/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/registry/policy/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/apis/imagepolicy/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/apis/policy/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/plugin/pkg/admission/imagepolicy/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/plugin/pkg/admission/security/podsecuritypolicy/OWNERS +- **service-accounts** + - Description: Infrastructure implementing Kubernetes service account based workload identity. + - Owners: + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/serviceaccount/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubelet/token/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/serviceaccount/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/plugin/pkg/admission/serviceaccount/OWNERS + ## GitHub Teams The below teams can be mentioned on issues and PRs in order to get attention from the right people. Note that the links to display team membership will only work if you are a member of the org. -The google groups contain the archive of Github team notifications. -Mentioning a team on Github will CC its group. -Monitor these for Github activity if you are not a member of the team. - -| Team Name | Details | Google Groups | Description | -| --------- |:-------:|:-------------:| ----------- | -| @kubernetes/sig-auth-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-auth-api-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-auth-api-reviews) | API Changes and Reviews | -| @kubernetes/sig-auth-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-auth-bugs) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-auth-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-auth-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-auth-feature-requests) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-auth-feature-requests) | Feature Requests | -| @kubernetes/sig-auth-misc | [link](https://github.com/orgs/kubernetes/teams/sig-auth-misc) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-auth-misc) | General Discussion | -| @kubernetes/sig-auth-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-auth-pr-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-auth-pr-reviews) | PR Reviews | -| @kubernetes/sig-auth-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-auth-proposals) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-auth-proposals) | Design Proposals | -| @kubernetes/sig-auth-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-auth-test-failures) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-auth-test-failures) | Test Failures and Triage | +| Team Name | Details | Description | +| --------- |:-------:| ----------- | +| @kubernetes/sig-auth-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-auth-api-reviews) | API Changes and Reviews | +| @kubernetes/sig-auth-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-auth-bugs) | Bug Triage and Troubleshooting | +| @kubernetes/sig-auth-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-auth-feature-requests) | Feature Requests | +| @kubernetes/sig-auth-misc | [link](https://github.com/orgs/kubernetes/teams/sig-auth-misc) | General Discussion | +| @kubernetes/sig-auth-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-auth-pr-reviews) | PR Reviews | +| @kubernetes/sig-auth-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-auth-proposals) | Design Proposals | +| @kubernetes/sig-auth-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-auth-test-failures) | Test Failures and Triage | -## Goals -* Discuss improvements Kubernetes Authorization and Authentication, and cluster security policy. -## Non-goals -* To report specific vulnerabilities in Kubernetes, please report using these instructions: -https://kubernetes.io/security/ -* General discussion of Linux security, or of containers is better directed to a non-Kubernetes mailing list. -* Proactive or general security discussion about Kubelet should go to kubernetes-sig-node@googlegroups.com. -* Proactive or general security discussion about the API server should go to kubernetes-sig-api-machinery@googlegroups.com. diff --git a/sig-auth/charter.md b/sig-auth/charter.md new file mode 100644 index 000000000..541c854eb --- /dev/null +++ b/sig-auth/charter.md @@ -0,0 +1,69 @@ +# SIG Auth Charter + +This charter adheres to the conventions described in the [Kubernetes Charter README] and uses +the Roles and Organization Management outlined in [sig-governance]. + +## Scope + +SIG Auth is responsible for the design, implementation, and maintenance of features in +Kubernetes that control and protect access to the API and other core components. This includes +authentication and authorization, but also encompasses features like auditing and some security +policy (see below). + +### In scope + +Link to SIG section in [sigs.yaml] + +#### Code, Binaries and Services + +- Kubernetes authentication, authorization, audit and security policy features. Examples + include: + - Authentication, authorization and audit interfaces and extension points + - Authentication implementations (service accounts, OIDC, authenticating proxy, webhook, + ...) + - Authorizer implementations (RBAC + default policy, Node + default policy, webhook, ...) + - Security-related admission plugins (NodeRestriction, ServiceAccount, PodSecurityPolicy, + ImagePolicy, etc) +- The mechanisms to protect confidentiality/integrity of API data. Examples include: + - Capability for encryption at rest + - Capability for secure communication between components + - Ensuring users and components can operate with appropriately scoped permissions + +#### Cross-cutting and Externally Facing Processes + +- Consult with other SIGs and the community on how to apply mechanisms owned by SIG + Auth. Examples include: + - Review privilege escalation implications of feature and API designs + - Core component authentication & authorization (apiserver, kubelet, controller-manager, + and scheduler) + - Local-storage volume deployment authentication + - Cloud provider authorization policy + - Container runtime streaming (exec/attach/port-forward) authentication + - Best practices for hardening add-ons or other external integrations + +### Out of scope + +- Reporting of specific vulnerabilities in Kubernetes. Please report using these instructions: + https://kubernetes.io/security/ +- General security discussion. Examples of topics that are out of scope for SIG-auth include: + - Protection of volume data, container ephemeral data, and other non-API data (prefer: sig-storage + and sig-node) + - Container isolation (prefer: sig-node and sig-networking) + - Bug bounty (prefer: product security team) + - Resource quota (prefer: sig-scheduling) + - Resource availability / DOS protection (prefer: sig-apimachinery, sig-network, sig-node) + +## Roles and Organization Management + +This sig follows adheres to the Roles and Organization Management outlined in [sig-governance] +and opts-in to updates and modifications to [sig-governance]. + +### Subproject Creation + +SIG Auth delegates subproject approval to Technical Leads. See [Subproject creation - Option 1]. + + +[sig-governance]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance.md +[sigs.yaml]: https://github.com/kubernetes/community/blob/master/sigs.yaml#L250 +[Kubernetes Charter README]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/README.md +[Subproject creation - Option 1]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance.md#subproject-creation diff --git a/sig-autoscaling/README.md b/sig-autoscaling/README.md index aafac1b37..6006dd877 100644 --- a/sig-autoscaling/README.md +++ b/sig-autoscaling/README.md @@ -5,13 +5,15 @@ Please do not edit this file directly, but instead make changes to the sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> +---> # Autoscaling Special Interest Group -Covers autoscaling of clusters, horizontal and vertical autoscaling of pods, setting initial resources for pods, topics related to monitoring pods and gathering their metrics (e.g.: Heapster) +Covers development and maintenance of components for automated scaling in Kubernetes. This includes automated vertical and horizontal pod autoscaling, initial resource estimation, cluster-proportional system component autoscaling, and autoscaling of Kubernetes clusters themselves. + +The [charter](charter.md) defines the scope and governance of the Autoscaling Special Interest Group. ## Meetings -* Regular SIG Meeting: [Mondays at 14:00 UTC](https://zoom.us/my/k8s.sig.autoscaling) (biweekly/triweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=14:00&tz=UTC). +* Regular SIG Meeting: [Mondays at 14:00 UTC](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly/triweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=14:00&tz=UTC). * [Meeting notes and Agenda](https://docs.google.com/document/d/1RvhQAEIrVLHbyNnuaT99-6u9ZUMp7BfkPupT2LAZK7w/edit). ## Leadership @@ -20,7 +22,7 @@ Covers autoscaling of clusters, horizontal and vertical autoscaling of pods, set The Chairs of the SIG run operations and processes governing the SIG. * Marcin Wielgus (**[@mwielgus](https://github.com/mwielgus)**), Google -* Solly Ross (**[@directxman12](https://github.com/directxman12)**), Red Hat +* Solly Ross (**[@directxman12](https://github.com/directxman12)**), Google ## Contact * [Slack](https://kubernetes.slack.com/messages/sig-autoscaling) @@ -30,31 +32,43 @@ The Chairs of the SIG run operations and processes governing the SIG. ## Subprojects The following subprojects are owned by sig-autoscaling: -- **autoscaler** +- **scale-client** + - Owners: + - https://raw.githubusercontent.com/kubernetes/client-go/master/scale/OWNERS +- **cluster-autoscaler** - Owners: - https://raw.githubusercontent.com/kubernetes/autoscaler/master/OWNERS -- **metrics** +- **vertical-pod-autoscaler** - Owners: - - https://raw.githubusercontent.com/kubernetes/metrics/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/autoscaler/master/OWNERS +- **horizontal-pod-autoscaler** + - Owners: + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/podautoscaler/OWNERS + - https://raw.githubusercontent.com/kubernetes/api/master/autoscaling/OWNERS +- **cluster-proportional-vertical-autoscaler** + - Owners: + - https://raw.githubusercontent.com/kubernetes-incubator/cluster-proportional-vertical-autoscaler/master/OWNERS +- **cluster-proportional-autoscaler** + - Owners: + - https://raw.githubusercontent.com/kubernetes-incubator/cluster-proportional-autoscaler/master/OWNERS +- **addon-resizer** + - Owners: + - https://raw.githubusercontent.com/kubernetes/autoscaler/master/addon-resizer/OWNERS ## GitHub Teams The below teams can be mentioned on issues and PRs in order to get attention from the right people. Note that the links to display team membership will only work if you are a member of the org. -The google groups contain the archive of Github team notifications. -Mentioning a team on Github will CC its group. -Monitor these for Github activity if you are not a member of the team. - -| Team Name | Details | Google Groups | Description | -| --------- |:-------:|:-------------:| ----------- | -| @kubernetes/sig-autoscaling-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-autoscaling-api-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-autoscaling-api-reviews) | API Changes and Reviews | -| @kubernetes/sig-autoscaling-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-autoscaling-bugs) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-autoscaling-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-autoscaling-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-autoscaling-feature-requests) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-autoscaling-feature-requests) | Feature Requests | -| @kubernetes/sig-autoscaling-misc | [link](https://github.com/orgs/kubernetes/teams/sig-autoscaling-misc) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-autoscaling-misc) | General Discussion | -| @kubernetes/sig-autoscaling-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-autoscaling-pr-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-autoscaling-pr-reviews) | PR Reviews | -| @kubernetes/sig-autoscaling-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-autoscaling-proposals) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-autoscaling-proposals) | Design Proposals | -| @kubernetes/sig-autoscaling-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-autoscaling-test-failures) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-autoscaling-test-failures) | Test Failures and Triage | +| Team Name | Details | Description | +| --------- |:-------:| ----------- | +| @kubernetes/sig-autoscaling-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-autoscaling-api-reviews) | API Changes and Reviews | +| @kubernetes/sig-autoscaling-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-autoscaling-bugs) | Bug Triage and Troubleshooting | +| @kubernetes/sig-autoscaling-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-autoscaling-feature-requests) | Feature Requests | +| @kubernetes/sig-autoscaling-misc | [link](https://github.com/orgs/kubernetes/teams/sig-autoscaling-misc) | General Discussion | +| @kubernetes/sig-autoscaling-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-autoscaling-pr-reviews) | PR Reviews | +| @kubernetes/sig-autoscaling-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-autoscaling-proposals) | Design Proposals | +| @kubernetes/sig-autoscaling-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-autoscaling-test-failures) | Test Failures and Triage | ## Concerns diff --git a/sig-autoscaling/charter.md b/sig-autoscaling/charter.md new file mode 100644 index 000000000..9239aa64c --- /dev/null +++ b/sig-autoscaling/charter.md @@ -0,0 +1,85 @@ +# SIG Autoscaling Charter + +This charter adheres to the conventions described in the [Kubernetes Charter README] and uses +the Roles and Organization Management outlined in [sig-governance]. + +## Scope + +Covers development and maintenance of Kubernetes components for automated +scaling in Kubernetes. This includes automated vertical and horizontal +pod autoscaling, initial resource estimation, cluster-proportional system +component autoscaling, and autoscaling of Kubernetes clusters themselves. + +### In scope + +- Autoscaling-related API objects, such as the HorizontalPodAutoscaler and + VerticalPodAutoscaler + +- Autoscaling-related tools, such as the cluster autoscaler, + single-component scaling tools (e.g. pod-nanny), and + cluster-proportional scaling tools + +- Ensuring API interfaces (the scale subresource) are available and usable + to enable other SIGs to write autoscalable objects, and enable people to + interact with those interfaces. + +[Link to SIG section in sigs.yaml][sigs.yaml] + +#### Code, Binaries and Services + +- Components and utilities that take automated action to scale a component + on the cluster (e.g. the horizontal-pod-autoscaler or addon-resizer + subproject) + +- Components and utilities that take automated action to scale the cluster + itself (e.g. the cluster-autoscaler subproject) + +- Special parts of client-go for interacting with with the scaling + interfaces used by the HPA (e.g. the scale-client subproject) + +#### Cross-cutting and Externally Facing Processes + +- Reviewing implementations of the scale subresource to ensure that + autoscaling behaves properly + +- Coordinating with SIG Instrumentation to ensure that metrics APIs are + suitable for autoscaling on. + +- Coordinating with SIG Scheduling to make sure scheduling decisions can + interact well with the cluster autoscaler + +- Coordinating with SIG Cluster Lifecycle on integration between the + cluster autoscaler and cluster API + +- Coordinating with SIG Node around Kubelet requirements for vertical + scaling of pods + +### Out of scope + +- Testing general cluster performance at scale (this falls under the + purview of [SIG Scalability]). + +- Owning metrics APIs (this falls under the purview of [SIG + Instrumentation]). SIG Autoscaling should collaborate with [SIG + Instrumentation] to ensure that metrics APIs are suitable for using in + autoscaling. + +## Roles and Organization Management + +This sig follows adheres to the Roles and Organization Management outlined in [sig-governance] +and opts-in to updates and modifications to [sig-governance]. + +### Deviations from [sig-governance] + +- SIG Autoscaling does not have chairs as a separate entity from tech + leads. The tech leads have the responsibility of chairs. + +### Subproject Creation + +SIG Technical Leads + +[sig-governance]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance.md +[sigs.yaml]: https://github.com/kubernetes/community/blob/master/sigs.yaml#L305 +[Kubernetes Charter README]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/README.md +[SIG Scalability]: https://github.com/kubernetes/community/blob/master/sig-scalability +[SIG Instrumentation]: https://github.com/kubernetes/community/blob/master/sig-instrumentation diff --git a/sig-aws/README.md b/sig-aws/README.md index a1ad795cb..e2fb10548 100644 --- a/sig-aws/README.md +++ b/sig-aws/README.md @@ -5,13 +5,15 @@ Please do not edit this file directly, but instead make changes to the sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> +---> # AWS Special Interest Group Covers maintaining, supporting, and using Kubernetes hosted on AWS Cloud. +The [charter](charter.md) defines the scope and governance of the AWS Special Interest Group. + ## Meetings -* Regular SIG Meeting: [Fridays at 9:00 PT (Pacific Time)](https://zoom.us/my/k8ssigaws) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=9:00&tz=PT%20%28Pacific%20Time%29). +* Regular SIG Meeting: [Fridays at 9:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=9:00&tz=PT%20%28Pacific%20Time%29). * [Meeting notes and Agenda](https://docs.google.com/document/d/1-i0xQidlXnFEP9fXHWkBxqySkXwJnrGJP9OGyP2_P14/edit). ## Leadership @@ -21,7 +23,7 @@ The Chairs of the SIG run operations and processes governing the SIG. * Justin Santa Barbara (**[@justinsb](https://github.com/justinsb)**) * Kris Nova (**[@kris-nova](https://github.com/kris-nova)**), Heptio -* Bob Wise (**[@countspongebob](https://github.com/countspongebob)**), AWS +* Nishi Davidson (**[@d-nishi](https://github.com/d-nishi)**), AWS ## Contact * [Slack](https://kubernetes.slack.com/messages/sig-aws) @@ -34,19 +36,27 @@ The following subprojects are owned by sig-aws: - **cloud-provider-aws** - Owners: - https://raw.githubusercontent.com/kubernetes/cloud-provider-aws/master/OWNERS +- **aws-alb-ingress-controller** + - Owners: + - https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/master/OWNERS +- **aws-iam-authenticator** + - Owners: + - https://raw.githubusercontent.com/kubernetes-sigs/aws-iam-authenticator/master/OWNERS +- **aws-encryption-provider** + - Owners: + - https://raw.githubusercontent.com/kubernetes-sigs/aws-encryption-provider/master/OWNERS +- **aws-ebs-csi-driver** + - Owners: + - https://raw.githubusercontent.com/kubernetes-sigs/aws-ebs-csi-driver/master/OWNERS ## GitHub Teams The below teams can be mentioned on issues and PRs in order to get attention from the right people. Note that the links to display team membership will only work if you are a member of the org. -The google groups contain the archive of Github team notifications. -Mentioning a team on Github will CC its group. -Monitor these for Github activity if you are not a member of the team. - -| Team Name | Details | Google Groups | Description | -| --------- |:-------:|:-------------:| ----------- | -| @kubernetes/sig-aws-misc | [link](https://github.com/orgs/kubernetes/teams/sig-aws-misc) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-aws-misc) | General Discussion | +| Team Name | Details | Description | +| --------- |:-------:| ----------- | +| @kubernetes/sig-aws-misc | [link](https://github.com/orgs/kubernetes/teams/sig-aws-misc) | General Discussion | ## Participate diff --git a/sig-aws/charter.md b/sig-aws/charter.md new file mode 100644 index 000000000..8212cc673 --- /dev/null +++ b/sig-aws/charter.md @@ -0,0 +1,56 @@ +# SIG AWS Charter + +This charter adheres to the conventions described in the [Kubernetes Charter README] and uses the Roles and Organization Management outlined in [sig-governance]. + +## Scope + +SIG AWS is responsible for the creation and maintenance of subprojects (features/innovations) necessary to integrate AWS services for the operation and management of Kubernetes on AWS. SIG AWS also acts as a forum for Kubernetes on AWS users/developers to raise their feature requests and support issues with. SIG leads in collaboration with SIG members will make a best effort to triage known problems within one or two release cycle of issues being reported. SIG AWS in collaboration with SIG-Testing, SIG-Scalability and SIG-Docs is responsible for integration and maintenance of tests (e2e, periodic jobs, postsubmit jobs etc.); scale-tests (load, density tests) and documentation for the scope within the purview of this charter. + +### In scope + +Link to SIG [subprojects](https://github.com/kubernetes/community/tree/master/sig-aws#subprojects) + +#### Code, Binaries and Services + +Kubernetes integrations specific to AWS including: +- Integrations, interfaces, libraries and extension points for all AWS services such as IAM, storage, networking, loadbalancers, registry, security, monitoring/logging at the instance or container level +- Tools for Kubernetes APIs to work with AWS services including Amazon EKS +- Prow, testgrid, perf dashboard integrations to expand and maintain testing (e2e, jobs) and scale-testing (load, density) on AWS and Amazon EKS +- Support users on their issues and feature requests +- Documentation for all things Kubernetes on AWS + +#### Cross-cutting and Externally Facing Processes + +- Consult with other SIGs and the community on how to apply mechanisms owned by SIG + AWS. Examples include: + - Review escalation implications of feature and API designs as it relates to core Kubernetes components (etcd, kubelet, apiserver, controller manager, scheduler) + - CSI, CNI, CRI implementation and design + - Cloud provider implementation and design + - Best practices for hardening add-ons or other external integrations such as KMS, LB, others. + - Implementing and hardening tests, scale tests and documentation + +### Out of scope + +SIG AWS is not for discussing bugs or feature requests outside the scope of Kubernetes. For example, SIG AWS should not be used to discuss or resolve support requests related to AWS Services. It should also not be used to discuss topics that other, more specialized SIGs own (to avoid overlap). Examples of such scenarios include: +- Specification of CSI, CRI interfaces, cloudprovider binary (prefer: sig-storage, sig-node and sig-cloudprovider) +- Container runtime (prefer: sig-node and sig-networking) +- Resource quota (prefer: sig-scheduling) +- Resource availability (prefer: sig-apimachinery, sig-network, sig-node) +- Detailed design and scope of tests or tooling to run tests (prefer: sig-testing) +- Detailed design and scope of scale tests or tooling to run scale tests (prefer: sig-scalability) +- Troubleshooting and maintenance of test jobs related to kops (prefer: sig-cluster-lifecyle) +- Reporting specific vulnerabilities in Kubernetes. Please report using these instructions: https://kubernetes.io/security/ + +## Roles and Organization Management + +This SIG adheres to the Roles and Organization Management outlined in [sig-governance] +and opts-in to updates and modifications to [sig-governance]. + +### Subproject Creation + +SIG AWS delegates subproject approval to Chairs. Chairs also act as Technical Leads in SIG AWS. See [Subproject creation - Option 1]. + +[sig-governance]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance.md +[sig-subprojects]: https://github.com/kubernetes/community/blob/master/sig-aws/README.md#subprojects +[Kubernetes Charter README]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/README.md +[Subproject creation - Option 1]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance.md#subproject-creation diff --git a/sig-azure/README.md b/sig-azure/README.md index 9811e2a13..0b2ea4396 100644 --- a/sig-azure/README.md +++ b/sig-azure/README.md @@ -5,13 +5,15 @@ Please do not edit this file directly, but instead make changes to the sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> +---> # Azure Special Interest Group A Special Interest Group for building, deploying, maintaining, supporting, and using Kubernetes on Azure. +The [charter](charter.md) defines the scope and governance of the Azure Special Interest Group. + ## Meetings -* Regular SIG Meeting: [Wednesdays at 16:00 UTC](https://zoom.us/j/2015551212) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=16:00&tz=UTC). +* Regular SIG Meeting: [Wednesdays at 16:00 UTC](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=16:00&tz=UTC). * [Meeting notes and Agenda](https://docs.google.com/document/d/1SpxvmOgHDhnA72Z0lbhBffrfe9inQxZkU9xqlafOW9k/edit). * [Meeting recordings](https://www.youtube.com/watch?v=yQLeUKi_dwg&list=PL69nYSiGNLP2JNdHwB8GxRs2mikK7zyc4). @@ -20,9 +22,15 @@ A Special Interest Group for building, deploying, maintaining, supporting, and u ### Chairs The Chairs of the SIG run operations and processes governing the SIG. -* Jason Hansen (**[@slack](https://github.com/slack)**), Microsoft -* Cole Mickens (**[@colemickens](https://github.com/colemickens)**), Red Hat -* Jaice Singer DuMars (**[@jdumars](https://github.com/jdumars)**), Microsoft +* Stephen Augustus (**[@justaugustus](https://github.com/justaugustus)**), Red Hat +* Dave Strebel (**[@dstrebel](https://github.com/dstrebel)**), Microsoft + +### Technical Leads +The Technical Leads of the SIG establish new subprojects, decommission existing +subprojects, and resolve cross-subproject technical issues and decisions. + +* Kal Khenidak (**[@khenidak](https://github.com/khenidak)**), Microsoft +* Pengfei Ni (**[@feiskyer](https://github.com/feiskyer)**), Microsoft ## Contact * [Slack](https://kubernetes.slack.com/messages/sig-azure) @@ -41,13 +49,9 @@ The following subprojects are owned by sig-azure: The below teams can be mentioned on issues and PRs in order to get attention from the right people. Note that the links to display team membership will only work if you are a member of the org. -The google groups contain the archive of Github team notifications. -Mentioning a team on Github will CC its group. -Monitor these for Github activity if you are not a member of the team. - -| Team Name | Details | Google Groups | Description | -| --------- |:-------:|:-------------:| ----------- | -| @kubernetes/sig-azure-misc | [link](https://github.com/orgs/kubernetes/teams/sig-azure-misc) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-azure-misc) | General Discussion | +| Team Name | Details | Description | +| --------- |:-------:| ----------- | +| @kubernetes/sig-azure | [link](https://github.com/orgs/kubernetes/teams/sig-azure) | General Discussion | diff --git a/sig-azure/charter.md b/sig-azure/charter.md new file mode 100644 index 000000000..87f0324ff --- /dev/null +++ b/sig-azure/charter.md @@ -0,0 +1,100 @@ +# SIG Azure Charter + +_The following is a charter for the Kubernetes Special Interest Group for Azure. It delineates the roles of SIG leadership, SIG members, as well as the organizational processes for the SIG, both as they relate to project management and technical processes for SIG subprojects._ + +## Roles + +### SIG Chairs + +- Run operations and processes governing the SIG +- Seed members established at SIG founding +- Chairs MAY decide to step down at anytime and propose a replacement. Use lazy consensus amongst chairs with fallback on majority vote to accept proposal. This SHOULD be supported by a majority of SIG Members. +- Chairs MAY select additional chairs through a [super-majority] vote amongst chairs. This SHOULD be supported by a majority of SIG Members. +- Chairs MUST remain active in the role and are automatically removed from the position if they are unresponsive for > 3 months and MAY be removed if not proactively working with other chairs to fulfill responsibilities. Coordinated leaves of absence serve as exception to this requirement. +- Number: 2 - 3 +- Defined in [sigs.yaml] + +### SIG Technical Leads + +- Establish new subprojects +- Decommission existing subprojects +- Resolve X-Subproject technical issues and decisions +- Technical Leads MUST remain active in the role and are automatically removed from the position if they are unresponsive for > 3 months and MAY be removed if not proactively working with other chairs to fulfill responsibilities. Coordinated leaves of absence serve as exception to this requirement. +- Number: 2 - 3 +- Defined in [sigs.yaml] + +### Subproject Owners + +- Scoped to a subproject defined in [sigs.yaml] +- Seed members established at subproject founding +- MUST be an escalation point for technical discussions and decisions in the subproject +- MUST set milestone priorities or delegate this responsibility +- MUST remain active in the role and are automatically removed from the position if they are unresponsive for > 3 months. Coordinated leaves of absence serve as exception to this requirement. +- MAY be removed if not proactively working with other Subproject Owners to fulfill responsibilities. +- MAY decide to step down at anytime and propose a replacement. Use [lazy-consensus] amongst subproject owners with fallback on majority vote to accept proposal. This SHOULD be supported by a majority of subproject contributors (those having some role in the subproject). +- MAY select additional subproject owners through a [super-majority] vote amongst subproject owners. This SHOULD be supported by a majority of subproject contributors (through [lazy-consensus] with fallback on voting). +- Number: 3 - 5 +- Defined in [sigs.yaml] [OWNERS] files + +**IMPORTANT** + +_With regards to leadership roles i.e., Chairs, Technical Leads, and Subproject Owners, we MUST, as a SIG, ensure that positions are held by a committee of members across a diverse set of companies. This allows for thoughtful discussion and structural management that can serve the needs of every consumer of Kubernetes on Azure._ + +### Members + +- MUST maintain health of at least one subproject or the health of the SIG +- MUST show sustained contributions to at least one subproject or to the SIG +- SHOULD hold some documented role or responsibility in the SIG and / or at least one subproject (e.g. reviewer, approver, etc) +- MAY build new functionality for subprojects +- MAY participate in decision making for the subprojects they hold roles in +- Includes all reviewers and approvers in [OWNERS] files for subprojects + +## Organizational management + +- SIG meets bi-weekly on zoom with agenda in meeting notes + - SHOULD be facilitated by chairs unless delegated to specific Members +- SIG overview and deep-dive sessions organized for KubeCon/CloudNativeCon + - SHOULD be organized by chairs unless delegated to specific Members +- Contributing instructions defined in the SIG CONTRIBUTING.md + +### Project management + +#### Subproject creation + +Subprojects +may be created by [KEP] proposal and accepted by [lazy-consensus] with fallback on majority vote of SIG Technical Leads. The result SHOULD be supported by the majority of SIG members. + +- KEP MUST establish subproject owners +- [sigs.yaml] MUST be updated to include subproject information and [OWNERS] files with subproject owners +- Where subprojects processes differ from the SIG governance, they MUST document how + - e.g., if subprojects release separately - they must document how release and planning is performed + +Subprojects must define how releases are performed and milestones are set. + +Example: +- Release milestones + - Follows the kubernetes/kubernetes release milestones and schedule + - Priorities for upcoming release are discussed during the SIG meeting following the preceding release and shared through a PR. Priorities are finalized before feature freeze. +- Code and artifacts are published as part of the kubernetes/kubernetes release + +### Technical processes + +Subprojects of the SIG MUST use the following processes unless explicitly following alternatives they have defined. + +- Proposing and making decisions + - Proposals sent as [KEP] PRs and published to Google group as announcement + - Follow [KEP] decision making process + +- Test health + - Canonical health of code published to + - Consistently broken tests automatically send an alert to + - SIG members are responsible for responding to broken tests alert. PRs that break tests should be rolled back if not fixed within 24 hours (business hours). + - Test dashboard checked and reviewed at start of each SIG meeting. Owners assigned for any broken tests. and followed up during the next SIG meeting. + +Issues impacting multiple subprojects in the SIG should be resolved by SIG Technical Leads, with fallback to consensus of subproject owners. + +[lazy-consensus]: http://en.osswiki.info/concepts/lazy_consensus +[super-majority]: https://en.wikipedia.org/wiki/Supermajority#Two-thirds_vote +[KEP]: https://github.com/kubernetes/community/blob/master/keps/0000-kep-template.md +[sigs.yaml]: https://github.com/kubernetes/community/blob/master/sigs.yaml#L1454 +[OWNERS]: contributors/devel/owners.md diff --git a/sig-big-data/README.md b/sig-big-data/README.md index 5a850ca80..762af01a4 100644 --- a/sig-big-data/README.md +++ b/sig-big-data/README.md @@ -5,13 +5,13 @@ Please do not edit this file directly, but instead make changes to the sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> +---> # Big Data Special Interest Group Covers deploying and operating big data applications (Spark, Kafka, Hadoop, Flink, Storm, etc) on Kubernetes. We focus on integrations with big data applications and architecting the best ways to run them on Kubernetes. ## Meetings -* Regular SIG Meeting: [Wednesdays at 17:00 UTC](https://zoom.us/my/sig.big.data) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=17:00&tz=UTC). +* Regular SIG Meeting: [Wednesdays at 17:00 UTC](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=17:00&tz=UTC). * [Meeting notes and Agenda](https://docs.google.com/document/d/1pnF38NF6N5eM8DlK088XUW85Vms4V2uTsGZvSp8MNIA/edit). * [Meeting recordings](https://docs.google.com/document/d/1pnF38NF6N5eM8DlK088XUW85Vms4V2uTsGZvSp8MNIA/edit). @@ -20,8 +20,9 @@ Covers deploying and operating big data applications (Spark, Kafka, Hadoop, Flin ### Chairs The Chairs of the SIG run operations and processes governing the SIG. -* Anirudh Ramanathan (**[@foxish](https://github.com/foxish)**), Google +* Anirudh Ramanathan (**[@foxish](https://github.com/foxish)**), Rockset * Erik Erlandson (**[@erikerlandson](https://github.com/erikerlandson)**), Red Hat +* Yinan Li (**[@liyinan926](https://github.com/liyinan926)**), Google ## Contact * [Slack](https://kubernetes.slack.com/messages/sig-big-data) @@ -33,19 +34,15 @@ The Chairs of the SIG run operations and processes governing the SIG. The below teams can be mentioned on issues and PRs in order to get attention from the right people. Note that the links to display team membership will only work if you are a member of the org. -The google groups contain the archive of Github team notifications. -Mentioning a team on Github will CC its group. -Monitor these for Github activity if you are not a member of the team. - -| Team Name | Details | Google Groups | Description | -| --------- |:-------:|:-------------:| ----------- | -| @kubernetes/sig-big-data-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-big-data-api-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-big-data-api-reviews) | API Changes and Reviews | -| @kubernetes/sig-big-data-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-big-data-bugs) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-big-data-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-big-data-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-big-data-feature-requests) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-big-data-feature-requests) | Feature Requests | -| @kubernetes/sig-big-data-misc | [link](https://github.com/orgs/kubernetes/teams/sig-big-data-misc) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-big-data-misc) | General Discussion | -| @kubernetes/sig-big-data-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-big-data-pr-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-big-data-pr-reviews) | PR Reviews | -| @kubernetes/sig-big-data-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-big-data-proposals) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-big-data-proposals) | Design Proposals | -| @kubernetes/sig-big-data-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-big-data-test-failures) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-big-data-test-failures) | Test Failures and Triage | +| Team Name | Details | Description | +| --------- |:-------:| ----------- | +| @kubernetes/sig-big-data-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-big-data-api-reviews) | API Changes and Reviews | +| @kubernetes/sig-big-data-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-big-data-bugs) | Bug Triage and Troubleshooting | +| @kubernetes/sig-big-data-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-big-data-feature-requests) | Feature Requests | +| @kubernetes/sig-big-data-misc | [link](https://github.com/orgs/kubernetes/teams/sig-big-data-misc) | General Discussion | +| @kubernetes/sig-big-data-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-big-data-pr-reviews) | PR Reviews | +| @kubernetes/sig-big-data-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-big-data-proposals) | Design Proposals | +| @kubernetes/sig-big-data-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-big-data-test-failures) | Test Failures and Triage | ## Goals diff --git a/sig-big-data/resources.md b/sig-big-data/resources.md index 1c21ff1a2..c7b3b2d03 100644 --- a/sig-big-data/resources.md +++ b/sig-big-data/resources.md @@ -1,15 +1,61 @@ # Resources +## Kubernetes integration status by big data product + ### Spark -* [Spark on Kubernetes Design Proposal](https://docs.google.com/document/d/1_bBzOZ8rKiOSjQg78DXOA3ZBIo_KkDJjqxVuq0yXdew/edit#) -* [Spark Dynamic Allocation Proposal](https://docs.google.com/document/d/1S9OMnFaeSf_UUxWpMpvC7ERcWx-jDr2g85MWri3Hccc/edit?usp=sharing) -* [SPARK-JIRA](https://issues.apache.org/jira/browse/SPARK-18278) -* [Kubernetes Issue #34377](https://github.com/kubernetes/kubernetes/issues/34377) -* [External Repository](https://github.com/apache-spark-on-k8s/spark) + +[Apache Spark](https://spark.apache.org) is a distributed data processing framework. + +##### Status + +Kubernetes is supported as a mainline Spark scheduler since [release 2.3](https://spark.apache.org/releases/spark-release-2-3-0.html), see [the detailed documentation](https://spark.apache.org/docs/latest/running-on-kubernetes.html). +That work was done after the [Spark on Kubernetes original Design Proposal](https://docs.google.com/document/d/1_bBzOZ8rKiOSjQg78DXOA3ZBIo_KkDJjqxVuq0yXdew/edit#) +in the [apache-spark-on-k8s git repo](https://github.com/apache-spark-on-k8s/spark). + +##### Activities + +Enhancements are under development, with a good overview given [in this blog post](https://databricks.com/blog/2018/09/26/whats-new-for-apache-spark-on-kubernetes-in-the-upcoming-apache-spark-2-4-release.html). + +* Work is underway for Spark 2.4 to improve support and integration with HDFS. + * Design Document: [How Spark on Kubernetes will access Secure HDFS](https://docs.google.com/document/d/1RBnXD9jMDjGonOdKJ2bA1lN4AAV_1RwpU_ewFuCNWKg/edit#heading=h.verdza2f4fyd) +* Shuffle service design + * Design Document [Improving Spark Shuffle Reliability](https://docs.google.com/document/d/1uCkzGGVG17oGC6BJ75TpzLAZNorvrAU3FRd2X-rVHSM/edit) + * JIRA issue [SPARK-25299: Use remote storage for persisting shuffle data](https://issues.apache.org/jira/browse/SPARK-25299) ### HDFS + +[Apache Hadoop HDFS](https://hadoop.apache.org/hdfs) is a distributed file system, the persistence layer for Hadoop. + +##### Status + +TODO, e.g. "No release yet." + +##### Activities + * [Data Locality Doc](https://docs.google.com/document/d/1TAC6UQDS3M2sin2msFcZ9UBBQFyyz4jFKWw5BM54cQo/edit) -* [External Repository](https://github.com/apache-spark-on-k8s/kubernetes-HDFS) +* ["HDFS on Kubernetes" git repository including Helm charts](https://github.com/apache-spark-on-k8s/kubernetes-HDFS) ### Airflow + +[Apache Airflow](https://airflow.apache.org) is a platform to programmatically author, schedule and monitor workflows. + +##### Status + +The [Kubernetes executor](https://airflow.apache.org/kubernetes.html) has been introduced with Airflow [release 1.10.0](https://github.com/apache/incubator-airflow/blob/master/CHANGELOG.txt) with support of Kubernetes 1.10. + +##### Activities + * [Airflow roadmap](https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=71013666) + +### Flink + +[Apache Flink](https://flink.apache.org) is a distributed data processing framework. + +##### Status + +Flink 1.6 supports [running a session or job cluster on Kubernetes](https://ci.apache.org/projects/flink/flink-docs-stable/ops/deployment/kubernetes.html). + +##### Activities + +* [Native support for Kubernetes as a Flink runtime](https://issues.apache.org/jira/browse/FLINK-9953) +* [Lyft is working on an operator](https://lists.apache.org/thread.html/aa941030440c1d9e34c35c0caf5ddd2456755337fc34a4edebb32929@%3Cdev.flink.apache.org%3E) diff --git a/sig-cli/README.md b/sig-cli/README.md index 6c3a1892b..a82c20e1d 100644 --- a/sig-cli/README.md +++ b/sig-cli/README.md @@ -5,13 +5,15 @@ Please do not edit this file directly, but instead make changes to the sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> +---> # CLI Special Interest Group Covers kubectl and related tools. We focus on the development and standardization of the CLI framework and its dependencies, the establishment of conventions for writing CLI commands, POSIX compliance, and improving the command line tools from a developer and devops user experience and usability perspective. +The [charter](charter.md) defines the scope and governance of the CLI Special Interest Group. + ## Meetings -* Regular SIG Meeting: [Wednesdays at 09:00 PT (Pacific Time)](https://zoom.us/my/sigcli) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=09:00&tz=PT%20%28Pacific%20Time%29). +* Regular SIG Meeting: [Wednesdays at 09:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=09:00&tz=PT%20%28Pacific%20Time%29). * [Meeting notes and Agenda](https://docs.google.com/document/d/1r0YElcXt6G5mOWxwZiXgGu_X6he3F--wKwg-9UBc29I/edit?usp=sharing). * [Meeting recordings](https://www.youtube.com/playlist?list=PL69nYSiGNLP28HaTzSlFe6RJVxpFmbUvF). @@ -20,13 +22,20 @@ Covers kubectl and related tools. We focus on the development and standardizatio ### Chairs The Chairs of the SIG run operations and processes governing the SIG. +* Maciej Szulik (**[@soltysh](https://github.com/soltysh)**), Red Hat +* Sean Sullivan (**[@seans3](https://github.com/seans3)**), Google + +### Technical Leads +The Technical Leads of the SIG establish new subprojects, decommission existing +subprojects, and resolve cross-subproject technical issues and decisions. + * Maciej Szulik (**[@soltysh](https://github.com/soltysh)**), Red Hat * Phillip Wittrock (**[@pwittrock](https://github.com/pwittrock)**), Google -* Tony Ado (**[@AdoHe](https://github.com/AdoHe)**), Alibaba ## Emeritus Leads * Fabiano Franz (**[@fabianofranz](https://github.com/fabianofranz)**), Red Hat +* Tony Ado (**[@AdoHe](https://github.com/AdoHe)**), Alibaba ## Contact * [Slack](https://kubernetes.slack.com/messages/sig-cli) @@ -40,26 +49,31 @@ The following subprojects are owned by sig-cli: - Owners: - https://raw.githubusercontent.com/kubernetes/kubectl/master/OWNERS - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubectl/OWNERS +- **kustomize** + - Owners: + - https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/OWNERS +- **cli-sdk** + - Owners: + - https://raw.githubusercontent.com/kubernetes/cli-runtime/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/cli-runtime/OWNERS + - https://raw.githubusercontent.com/kubernetes/sample-cli-plugin/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/sample-cli-plugin/OWNERS ## GitHub Teams The below teams can be mentioned on issues and PRs in order to get attention from the right people. Note that the links to display team membership will only work if you are a member of the org. -The google groups contain the archive of Github team notifications. -Mentioning a team on Github will CC its group. -Monitor these for Github activity if you are not a member of the team. - -| Team Name | Details | Google Groups | Description | -| --------- |:-------:|:-------------:| ----------- | -| @kubernetes/sig-cli-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-cli-api-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-cli-api-reviews) | API Changes and Reviews | -| @kubernetes/sig-cli-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-cli-bugs) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-cli-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-cli-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-cli-feature-requests) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-cli-feature-requests) | Feature Requests | -| @kubernetes/sig-cli-maintainers | [link](https://github.com/orgs/kubernetes/teams/sig-cli-maintainers) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-cli-maintainers) | CLI Maintainers | -| @kubernetes/sig-cli-misc | [link](https://github.com/orgs/kubernetes/teams/sig-cli-misc) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-cli-misc) | General Discussion | -| @kubernetes/sig-cli-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-cli-pr-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-cli-pr-reviews) | PR Reviews | -| @kubernetes/sig-cli-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-cli-proposals) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-cli-proposals) | Design Proposals | -| @kubernetes/sig-cli-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-cli-test-failures) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-cli-test-failures) | Test Failures and Triage | +| Team Name | Details | Description | +| --------- |:-------:| ----------- | +| @kubernetes/sig-cli-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-cli-api-reviews) | API Changes and Reviews | +| @kubernetes/sig-cli-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-cli-bugs) | Bug Triage and Troubleshooting | +| @kubernetes/sig-cli-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-cli-feature-requests) | Feature Requests | +| @kubernetes/sig-cli-maintainers | [link](https://github.com/orgs/kubernetes/teams/sig-cli-maintainers) | CLI Maintainers | +| @kubernetes/sig-cli-misc | [link](https://github.com/orgs/kubernetes/teams/sig-cli-misc) | General Discussion | +| @kubernetes/sig-cli-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-cli-pr-reviews) | PR Reviews | +| @kubernetes/sig-cli-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-cli-proposals) | Design Proposals | +| @kubernetes/sig-cli-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-cli-test-failures) | Test Failures and Triage | diff --git a/sig-cli/charter.md b/sig-cli/charter.md new file mode 100644 index 000000000..8ce0dd185 --- /dev/null +++ b/sig-cli/charter.md @@ -0,0 +1,53 @@ +# SIG CLI Charter + +This charter adheres to the conventions described in the [Kubernetes Charter README] and uses +the Roles and Organization Management outlined in [sig-governance]. + +## Scope + +The Command Line Interface SIG (SIG CLI) is responsible for kubectl and +related tools. This group focuses on general purpose command line tools and +libraries to interface with Kubernetes API's. + +### In scope + +SIG CLI [README] + +#### Code, Binaries and Services + +SIG CLI code include general purpose command line tools and binaries for working +with Kubernetes API's. Examples of these binaries include: [kubectl and kustomize]. + +### Out of scope + +SIG CLI is not responsible for command-line tools built and maintained by other +SIGs, such as kubeadm, which is owned by SIG Cluster Lifecycle. SIG CLI is not +responsible for defining the Kubernetes API that it interfaces with. The +Kubernetes API is the responsibility of SIG API Machinery. + +## Roles and Organization Management + +SIG CLI adheres to the Roles and Organization Management outlined in [sig-governance] +and opts-in to updates and modifications to [sig-governance]. + +### Deviations from [sig-governance] + +- In addition to Technical Leads, SIG CLI defines Emeritus Leads. These former + SIG CLI leaders *SHOULD* be available to provide historical perspective and + domain knowledge. +- SIG CLI defines the role of Test Health Maintainer. Contributors who have + successfully completed one test on-call rotation within the last six months as + shown in the test on-call schedule of the [Test Playbook] are included in this + group. Test Health Maintainers are SIG CLI Members. + +### Subproject Creation + +Option 1: by [SIG Technical Leads](https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance.md#L100) + + +[Kubernetes Charter README]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/README.md +[sig-governance]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance.md +[README]: https://github.com/kubernetes/community/blob/master/sig-cli/README.md +[kubectl and kustomize]: https://github.com/kubernetes/community/blob/master/sig-cli/README.md#subprojects +[Test Playbook]: https://docs.google.com/document/d/1Z3teqtOLvjAtE-eo0G9tjyZbgNc6bMhYGZmOx76v6oM + diff --git a/sig-cli/migrated-from-wiki/roadmap-kubectl.md b/sig-cli/migrated-from-wiki/roadmap-kubectl.md index 4fbf7a84e..62d8b6e71 100644 --- a/sig-cli/migrated-from-wiki/roadmap-kubectl.md +++ b/sig-cli/migrated-from-wiki/roadmap-kubectl.md @@ -13,7 +13,7 @@ If you'd like to contribute, please read the [conventions](/contributors/devel/k ### Add new commands / subcommands / flags * [Simplify support for multiple files](https://github.com/kubernetes/kubernetes/issues/24649) * Manifest that can specify multiple files / http(s) URLs - * [Default manifest manifest](https://github.com/kubernetes/kubernetes/issues/3268) (ala Dockerfile or Makefile) + * [Default manifest](https://github.com/kubernetes/kubernetes/issues/3268) (ala Dockerfile or Makefile) * Unpack archive (tgz, zip) and then invoke “-f” on that directory * URL shortening via default URL prefix * [Imperative `set` commands](https://github.com/kubernetes/kubernetes/issues/21648) @@ -103,7 +103,7 @@ If you'd like to contribute, please read the [conventions](/contributors/devel/k * [Eliminate round-trip conversion of API objects in kubectl](https://github.com/kubernetes/kubernetes/issues/3955) * [Move preferences out of kubeconfig](https://github.com/kubernetes/kubernetes/issues/10693) * And then add more preferences - * Enable/disable explanatory mode (see [kploy output](http://kubernetes.sh/kploy/)) + * Enable/disable explanatory mode (see [kploy output](https://github.com/kubernauts/kploy)) * Permanently disable warnings once displayed * Default labels as columns * Default `--record`, `--save-config`, etc. diff --git a/sig-cli/outreachy.md b/sig-cli/outreachy.md deleted file mode 100644 index 5b4db2bcd..000000000 --- a/sig-cli/outreachy.md +++ /dev/null @@ -1,64 +0,0 @@ -# Outreachy - -Kubernetes, specifically the SIG-CLI, is happy to announce our participation in the Outreachy program, running from December 2017 to March 2018. -Please see the [main program page](https://www.outreachy.org/) for general information about the program, -such as its purpose, timeline, eligibility requirements, and how to apply. - -**Schedule** - -* October 23: application deadline for other Outreachy communities -* October 30: application deadline for Kubernetes Outreachy applications -* November 9: selection decisions are made -* December 5 - March 5: internship - -## What is Kubernetes? -Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications. -It groups containers that make up an application into logical units for easy management and discovery. Kubernetes builds upon 15 years of experience of running production workloads at Google, combined with best-of-breed ideas and practices from the community. -Please see [kubernetes.io](https://kubernetes.io/) for more details. - -## What are SIGs / What is SIG-CLI? -Kubernetes is a set of projects, each shepherded by a special interest group (SIG). To get a grasp of the projects that we work on, check out the complete [list of SIGs](/sig-list.md). -This [slide deck](https://docs.google.com/presentation/d/1JqcALpsg07eH665ZXQrIvOcin6SzzsIUjMRRVivrZMg) provides an overview of how the Kubernetes community is organized. - -SIG-CLI Covers kubectl and related tools. We focus on the development and standardization of the CLI framework and its dependencies, the establishment of conventions for writing CLI commands, POSIX compliance, and improving the command line tools from a developer and devops user experience and usability perspective. - -**Communication:** - -SIG-CLI Mailing List - kubernetes-sig-cli@googlegroups.com -Slack - http://slack.k8s.io/ for invite; #sig-cli channel - -**Mentors** - -Philip Wittrock - pwittrock@google.com -Similar to contacting the coordinators, the mentors can be contacted at any time either by sending messages to the mailing lists or slack channels. - -## Contribute - -As part of the application process, the Outreachy program recommends that candidates make small contributions to the project they intend to apply for. -To start working on the project, make sure to fill out the [CLA](/CLA.md) and check if you have the right environment with this guide. -The README in the [community repo](https://github.com/kubernetes/community) details these things and more. - -Check out these specific resources for how to contribute to CLI: -* SIG-CLI - [How to Contribute](/sig-cli/CONTRIBUTING.md) -* Filter issue search for: `is:open is:issue label:sig/cli label:"help wanted"` -* Hand picked issues for outreachy applications: https://github.com/kubernetes/kubectl/projects/3 - -## Available tasks - -Develop `kubectl create` commands to make it easy to create Kubernetes resources -Develop `kubectl set` commands to modify Kubernetes resources -Required Skills: Go -Mentor: Phillip Wittrock - -**Coordination:** - -* Paris Pittman - parispittman@google.com -* Josh Berkus -* Elsie Phillips - -The coordinators can be contacted at any time. The easiest way is to send a slack message. - -Do you have an idea for a task that is suitable for this program? Contact the mentors or coordinators! Or even better, volunteer for mentoring an intern during the work on your idea! - -## Code of Conduct -Kubernetes abides by the CNCF [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md). diff --git a/sig-cloud-provider/CHARTER.md b/sig-cloud-provider/CHARTER.md new file mode 100644 index 000000000..47c1a2102 --- /dev/null +++ b/sig-cloud-provider/CHARTER.md @@ -0,0 +1,100 @@ +# SIG Cloud Provider Charter + +## Mission +The Cloud Provider SIG ensures that the Kubernetes ecosystem is evolving in a way that is neutral to all (public and private) cloud providers. It will be responsible for establishing standards and requirements that must be met by all providers to ensure optimal integration with Kubernetes. + +## Subprojects & Areas of Focus + +* Maintaining parts of the Kubernetes project that allows Kubernetes to integrate with the underlying provider. This includes but are not limited to: + * [cloud provider interface](https://github.com/kubernetes/kubernetes/blob/master/pkg/cloudprovider/cloud.go) + * [cloud-controller-manager](https://github.com/kubernetes/kubernetes/tree/master/cmd/cloud-controller-manager) + * Deployment tooling which has historically resided under [cluster/](https://github.com/kubernetes/kubernetes/tree/release-1.11/cluster) +* Code ownership for all cloud providers that fall under the kubernetes organization and have opted to be subprojects of SIG Cloud Provider. Following the guidelines around subprojects we anticipate providers will have full autonomy to maintain their own repositories, however, official code ownership will still belong to SIG Cloud Provider. + * [cloud-provider-azure](https://github.com/kubernetes/cloud-provider-azure) + * [cloud-provider-gcp](https://github.com/kubernetes/cloud-provider-gcp) + * [cloud-provider-openstack](https://github.com/kubernetes/cloud-provider-openstack) + * [cloud-provider-vsphere](https://github.com/kubernetes/cloud-provider-vsphere) +* Standards for documentation that should be included by all providers. +* Defining processes/standards for E2E tests that should be reported by all providers +* Developing future functionality in Kubernetes to support use cases common to all providers while also allowing custom and pluggable implementations when required, some examples include but are not limited to: + * Extendable node status’ and machine states based on provider + * Extendable node address types based on provider + * See also [Cloud Controller Manager KEP](https://github.com/kubernetes/community/blob/master/keps/sig-cloud-provider/0002-cloud-controller-manager.md) +* The collection of user experience reports from Kubernetes operators running on provider subprojects; and the delivery of roadmap information to SIG PM + +## Organizational Management + +* Six months after this charter is first ratified, it MUST be reviewed and re-approved by the SIG in order to evaluate the assumptions made in its initial drafting +* SIG meets bi-weekly on zoom with agenda in meeting notes. + * SHOULD be facilitated by chairs unless delegated to specific Members +* The SIG MUST make a best effort to provide leadership opportunities to individuals who represent different races, national origins, ethnicities, genders, abilities, sexual preferences, ages, backgrounds, levels of educational achievement, and socioeconomic statuses + +## Subproject Creation + +Each Kubernetes provider will (eventually) be a subproject under SIG Cloud Provider. To add new sub projects (providers), SIG Cloud Provider will maintain an open list of requirements that must be satisfied. +The current requirements can be seen [here](https://github.com/kubernetes/community/blob/master/keps/sig-cloud-provider/0002-cloud-controller-manager.md#repository-requirements). Each provider subproject is entitled to create 1..N repositories related to cluster turn up or operation on their platform, subject to technical standards set by SIG Cloud Provider. +Creation of a repository SHOULD follow the KEP process to preserve the motivation for the repository and any additional instructions for how other SIGs (e.g SIG Documentation and SIG Release) should interact with the repository + +Subprojects that fall under SIG Cloud Provider may also be features in Kubernetes that is requested or needed by all, or at least a large majority of providers. The creation process for these subprojects will follow the usual KEP process. + +## Subproject Retirement + +Subprojects representing Kubernetes providers may be retired given they do not satisfy requirements for more than 6 months. Final decisions for retirement should be supported by a majority of SIG members using [lazy consensus](http://en.osswiki.info/concepts/lazy_consensus). Once retired any code related to that provider will be archived into the kubernetes-retired organization. + +Subprojects representing Kubernetes features may be retired at any point given a lack of development or a lack of demand. Final decisions for retirement should be supported by a majority of SIG members, ideally from every provider. Once retired, any code related to that subproject will be archived into the kubernetes-retired organization. + + +## Technical Processes +Subprojects (providers) of the SIG MUST use the following processes unless explicitly following alternatives they have defined. + +* Proposals will be sent as [KEP](https://github.com/kubernetes/community/blob/master/keps/0000-kep-template.md) PRs, and published to the official group mailing list as an announcement +* Proposals, once submitted, SHOULD be placed on the next full meeting agenda +* Decisions within the scope of individual subprojects should be made by lazy consensus by subproject owners, with fallback to majority vote by subproject owners; if a decision can’t be made, it should be escalated to the SIG Chairs +* Issues impacting multiple subprojects in the SIG should be resolved by consensus of the owners of the involved subprojects; if a decision can’t be made, it should be escalated to the SIG Chairs + +## Roles +The following roles are required for the SIG to function properly. In the event that any role is unfilled, the SIG will make a best effort to fill it. Any decisions reliant on a missing role will be postponed until the role is filled. + + +### Chairs +* 3 chairs are required +* Run operations and processes governing the SIG +* An initial set of chairs was established at the time the SIG was founded. +* Chairs MAY decide to step down at anytime and propose a replacement, who must be approved by all of the other chairs. This SHOULD be supported by a majority of SIG Members. +* Chairs MAY select additional chairs using lazy consensus amongst SIG Members. +* Chairs MUST remain active in the role and are automatically removed from the position if they are unresponsive for > 3 months and MAY be removed by consensus of the other Chairs and members if not proactively working with other Chairs to fulfill responsibilities. +* Chairs WILL be asked to step down if there is inappropriate behavior or code of conduct issues +* SIG Cloud Provider cannot have more than one chair from any one company. + +### Subproject/Provider Owners +* There should be at least 1 representative per subproject/provider (though 3 is recommended to avoid deadlock) as specified in the OWNERS file of each cloud provider repository. +* MUST be an escalation point for technical discussions and decisions in the subproject/provider +* MUST set milestone priorities or delegate this responsibility +* MUST remain active in the role and are automatically removed from the position if they are unresponsive for > 3 months and MAY be removed by consensus of other subproject owners and Chairs if not proactively working with other Subproject Owners to fulfill responsibilities. +* MAY decide to step down at anytime and propose a replacement. This can be done by updating the OWNERS file for any subprojects. +* MAY select additional subproject owners by updating the OWNERs file. +* WILL be asked to step down if there is inappropriate behavior or code of conduct issues + +### SIG Members + +Approvers and reviewers in the OWNERS file of all subprojects under SIG Cloud Provider. + +## Long Term Goals + +The long term goal of SIG Cloud Provider is to promote a vendor neutral ecosystem for our community. Vendors wanting to support Kubernetes should feel equally empowered to do so +as any of today’s existing cloud providers; but more importantly ensuring a high quality user experience across providers. The SIG will act as a central group for developing +the Kubernetes project in a way that ensures all providers share common privileges and responsibilities. Below are some concrete goals on how SIG Cloud Provider plans to accomplish this. + +### Consolidating Existing Cloud SIGs + +SIG Cloud Provider will aim to eventually consolidate existing cloud provider SIGs and have each provider instead form a subproject under it. The subprojects would drive the development of +individual providers and work closely with SIG Cloud Provider to ensure compatibility with Kubernetes. With this model, code ownership for new and existing providers will belong to SIG Cloud Provider, +limiting SIG sprawl as more providers support Kubernetes. Existing SIGs representing cloud providers are highly encouraged to opt-in as sub-projects under SIG Cloud Provider but are not required to do. +As a SIG opts-in, it will operate to ensure a smooth transition, typically over the course of 3 release cycles. + +### Supporting New Cloud Providers + +One of the primary goals of SIG Cloud Provider is to become an entrypoint for new providers wishing to support Kubernetes on their platform and ensuring technical excellence from each of those providers. +SIG Cloud Provider will accomplish this by maintaining documentation around how new providers can get started and managing the set of requirements that must be met to onboard them. In addition to +onboarding new providers, the entire lifecycle of providers would also fall under the responsibility of SIG Cloud Provider, which may involve clean up work if a provider decides to no longer support Kubernetes. + diff --git a/sig-cloud-provider/OWNERS b/sig-cloud-provider/OWNERS new file mode 100644 index 000000000..1c2834b16 --- /dev/null +++ b/sig-cloud-provider/OWNERS @@ -0,0 +1,6 @@ +reviewers: + - sig-cloud-provider-leads +approvers: + - sig-cloud-provider-leads +labels: + - sig/cloud-provider diff --git a/sig-cloud-provider/README.md b/sig-cloud-provider/README.md new file mode 100644 index 000000000..52cf9b5ef --- /dev/null +++ b/sig-cloud-provider/README.md @@ -0,0 +1,77 @@ + +# Cloud Provider Special Interest Group + +Ensures that the Kubernetes ecosystem is evolving in a way that is neutral to all (public and private) cloud providers. It will be responsible for establishing standards and requirements that must be met by all providers to ensure optimal integration with Kubernetes. + +The [charter](CHARTER.md) defines the scope and governance of the Cloud Provider Special Interest Group. + +## Meetings +* Regular SIG Meeting: [Wednesdays at 1:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=1:00&tz=PT%20%28Pacific%20Time%29). + * [Meeting notes and Agenda](https://docs.google.com/document/d/1OZE-ub-v6B8y-GuaWejL-vU_f9jsjBbrim4LtTfxssw/edit#heading=h.w7i4ksrweimp). + * [Meeting recordings](https://www.youtube.com/playlist?list=PL69nYSiGNLP3dXLcYbRKCbpPCN-8CDFAB). + +## Leadership + +### Chairs +The Chairs of the SIG run operations and processes governing the SIG. + +* Andrew Sy Kim (**[@andrewsykim](https://github.com/andrewsykim)**), DigitalOcean +* Chris Hoge (**[@hogepodge](https://github.com/hogepodge)**), OpenStack Foundation +* Jago Macleod (**[@jagosan](https://github.com/jagosan)**), Google + +## Contact +* [Slack](https://kubernetes.slack.com/messages/sig-cloud-provider) +* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-cloud-provider) +* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fcloud-provider) + +## Subprojects + +The following subprojects are owned by sig-cloud-provider: +- **kubernetes-cloud-provider** + - Owners: + - https://raw.githubusercontent.com/kubernetes/cloud-provider/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/cloud-provider/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/cmd/cloud-controller-manager/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/cloud/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/cloudprovider/OWNERS +- **cloud-provider-gcp** + - Owners: + - https://raw.githubusercontent.com/kubernetes/cloud-provider-gcp/master/OWNERS +- **cloud-provider-openstack** + - Owners: + - https://raw.githubusercontent.com/kubernetes/cloud-provider-openstack/master/OWNERS +- **cloud-provider-vsphere** + - Owners: + - https://raw.githubusercontent.com/kubernetes/cloud-provider-vsphere/master/OWNERS +- **cloud-provider-extraction** + - Owners: + - https://raw.githubusercontent.com/kubernetes/community/master/sig-cloud-provider/cloud-provider-extraction/OWNERS + - Meetings: + - Weekly Sync removing the in-tree cloud providers led by @cheftako and @d-nishi: [Thursdays at 13:30 PT (Pacific Time)](https://docs.google.com/document/d/1KLsGGzNXQbsPeELCeF_q-f0h0CEGSe20xiwvcR2NlYM/edit) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=13:30&tz=PT%20%28Pacific%20Time%29). + +## GitHub Teams + +The below teams can be mentioned on issues and PRs in order to get attention from the right people. +Note that the links to display team membership will only work if you are a member of the org. + +| Team Name | Details | Description | +| --------- |:-------:| ----------- | +| @kubernetes/sig-cloud-provider-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-cloud-provider-api-reviews) | API Changes and Reviews | +| @kubernetes/sig-cloud-provider-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-cloud-provider-bugs) | Bug Triage and Troubleshooting | +| @kubernetes/sig-cloud-provider-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-cloud-provider-feature-requests) | Feature Requests | +| @kubernetes/sig-cloud-provider-maintainers | [link](https://github.com/orgs/kubernetes/teams/sig-cloud-provider-maintainers) | Cloud Providers Maintainers | +| @kubernetes/sig-cloud-providers-misc | [link](https://github.com/orgs/kubernetes/teams/sig-cloud-providers-misc) | General Discussion | +| @kubernetes/sig-cloud-provider-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-cloud-provider-pr-reviews) | PR Reviews | +| @kubernetes/sig-cloud-provider-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-cloud-provider-proposals) | Design Proposals | +| @kubernetes/sig-cloud-provider-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-cloud-provider-test-failures) | Test Failures and Triage | + + + + diff --git a/sig-cloud-provider/cloud-provider-extraction/OWNERS b/sig-cloud-provider/cloud-provider-extraction/OWNERS new file mode 100644 index 000000000..77ce32903 --- /dev/null +++ b/sig-cloud-provider/cloud-provider-extraction/OWNERS @@ -0,0 +1,8 @@ +reviewers: + - cheftako + - d-nishi +approvers: + - cheftako + - d-nishi +labels: + - sig/cloud-provider diff --git a/sig-cluster-lifecycle/README.md b/sig-cluster-lifecycle/README.md index bf86ebbb3..3ef220624 100644 --- a/sig-cluster-lifecycle/README.md +++ b/sig-cluster-lifecycle/README.md @@ -5,30 +5,40 @@ Please do not edit this file directly, but instead make changes to the sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> +---> # Cluster Lifecycle Special Interest Group The Cluster Lifecycle SIG examines how we should change Kubernetes to make it easier to manage and operate with a focus on cluster deployment and upgrades. ## Meetings -* Regular SIG Meeting: [Tuesdays at 09:00 PT (Pacific Time)](https://zoom.us/j/166836%E2%80%8B624) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=09:00&tz=PT%20%28Pacific%20Time%29). +* Regular SIG Meeting: [Tuesdays at 09:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=09:00&tz=PT%20%28Pacific%20Time%29). * [Meeting notes and Agenda](https://docs.google.com/a/weave.works/document/d/1deJYPIF4LmhGjDVaqrswErIrV7mtwJgovtLnPCDxP7U/edit). * [Meeting recordings](https://www.youtube.com/playlist?list=PL69nYSiGNLP29D0nYgAGWt1ZFqS9Z7lw4). -* kubeadm Office Hours: [Wednesdays at 09:00 PT (Pacific Time)](https://zoom.us/j/166836%E2%80%8B624) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=09:00&tz=PT%20%28Pacific%20Time%29). +* kubeadm Office Hours: [Wednesdays at 09:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=09:00&tz=PT%20%28Pacific%20Time%29). * [Meeting notes and Agenda](https://docs.google.com/document/d/130_kiXjG7graFNSnIAgtMS1G8zPDwpkshgfRYS0nggo/edit). * [Meeting recordings](https://www.youtube.com/playlist?list=PL69nYSiGNLP29D0nYgAGWt1ZFqS9Z7lw4). -* Cluster API working group: [Wednesdays at 10:00 PT (Pacific Time)](https://zoom.us/j/166836%E2%80%8B624) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=10:00&tz=PT%20%28Pacific%20Time%29). +* Cluster API office hours: [Wednesdays at 10:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=10:00&tz=PT%20%28Pacific%20Time%29). * [Meeting notes and Agenda](https://docs.google.com/document/d/16ils69KImmE94RlmzjWDrkmFZysgB2J4lGnYMRN89WM/edit#). * [Meeting recordings](https://www.youtube.com/playlist?list=PL69nYSiGNLP29D0nYgAGWt1ZFqS9Z7lw4). -* kops Office Hours: [Fridays at 09:00 PT (Pacific Time)](https://zoom.us/my/k8ssigaws) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=09:00&tz=PT%20%28Pacific%20Time%29). +* Cluster API Provider Implementers' office hours (EMEA): [Wednesdays at 15:00 CEST (Central European Summer Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=15:00&tz=CEST%20%28Central%20European%20Summer%20Time%29). + * [Meeting notes and Agenda](https://docs.google.com/document/d/1IZ2-AZhe4r3CYiJuttyciS7bGZTTx4iMppcA8_Pr3xE/edit). + * [Meeting recordings](https://www.youtube.com/playlist?list=PL69nYSiGNLP29D0nYgAGWt1ZFqS9Z7lw4). +* Cluster API Provider Implementers' office hours (US West Coast): [Tuesdays at 12:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=12:00&tz=PT%20%28Pacific%20Time%29). + * [Meeting notes and Agenda](https://docs.google.com/document/d/1IZ2-AZhe4r3CYiJuttyciS7bGZTTx4iMppcA8_Pr3xE/edit). + * [Meeting recordings](https://www.youtube.com/playlist?list=PL69nYSiGNLP29D0nYgAGWt1ZFqS9Z7lw4). +* Cluster API (AWS implementation) office hours: [Mondays at 10:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=10:00&tz=PT%20%28Pacific%20Time%29). + * [Meeting notes and Agenda](https://docs.google.com/document/d/10dq54Fd-xa6P5Iy3p46VY1YTFqugGMd1PygDIpuRw6c/edit). + * [Meeting recordings](https://www.youtube.com/playlist?list=PL69nYSiGNLP29D0nYgAGWt1ZFqS9Z7lw4). +* kops Office Hours: [Fridays at 09:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=09:00&tz=PT%20%28Pacific%20Time%29). * [Meeting notes and Agenda](https://docs.google.com/document/d/12QkyL0FkNbWPcLFxxRGSPt_tNPBHbmni3YLY-lHny7E/edit). +* Kubespray Office Hours: [Wednesdays at 07:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=07:00&tz=PT%20%28Pacific%20Time%29). + * [Meeting notes and Agenda](https://docs.google.com/document/d/1oDI1rTwla393k6nEMkqz0RU9rUl3J1hov0kQfNcl-4o/edit). ## Leadership ### Chairs The Chairs of the SIG run operations and processes governing the SIG. -* Luke Marsden (**[@lukemarsden](https://github.com/lukemarsden)**), Weave * Robert Bailey (**[@roberthbailey](https://github.com/roberthbailey)**), Google * Lucas Käldström (**[@luxas](https://github.com/luxas)**), Luxas Labs (occasionally contracting for Weaveworks) * Timothy St. Clair (**[@timothysc](https://github.com/timothysc)**), Heptio @@ -44,6 +54,21 @@ The following subprojects are owned by sig-cluster-lifecycle: - **bootkube** - Owners: - https://raw.githubusercontent.com/kubernetes-incubator/bootkube/master/OWNERS +- **cluster-api** + - Owners: + - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/master/OWNERS +- **cluster-api-provider-aws** + - Owners: + - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-aws/master/OWNERS +- **cluster-api-provider-digitalocean** + - Owners: + - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-digitalocean/master/OWNERS +- **cluster-api-provider-gcp** + - Owners: + - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-gcp/master/OWNERS +- **cluster-api-provider-openstack** + - Owners: + - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-openstack/master/OWNERS - **kops** - Owners: - https://raw.githubusercontent.com/kubernetes/kops/master/OWNERS @@ -60,6 +85,10 @@ The following subprojects are owned by sig-cluster-lifecycle: - Owners: - https://raw.githubusercontent.com/kubernetes/kubeadm/master/OWNERS - https://raw.githubusercontent.com/kubernetes/kubernetes/master/cmd/kubeadm/OWNERS + - https://raw.githubusercontent.com/kubernetes/cluster-bootstrap/master/OWNERS +- **kubeadm-dind-cluster** + - Owners: + - https://raw.githubusercontent.com/kubernetes-sigs/kubeadm-dind-cluster/master/OWNERS - **kubernetes-anywhere** - Owners: - https://raw.githubusercontent.com/kubernetes/kubernetes-anywhere/master/OWNERS @@ -75,19 +104,10 @@ The following subprojects are owned by sig-cluster-lifecycle: The below teams can be mentioned on issues and PRs in order to get attention from the right people. Note that the links to display team membership will only work if you are a member of the org. -The google groups contain the archive of Github team notifications. -Mentioning a team on Github will CC its group. -Monitor these for Github activity if you are not a member of the team. - -| Team Name | Details | Google Groups | Description | -| --------- |:-------:|:-------------:| ----------- | -| @kubernetes/sig-cluster-lifecycle-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-cluster-lifecycle-api-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-cluster-lifecycle-api-reviews) | API Changes and Reviews | -| @kubernetes/sig-cluster-lifecycle-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-cluster-lifecycle-bugs) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-cluster-lifecycle-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-cluster-lifecycle-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-cluster-lifecycle-feature-requests) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-cluster-lifecycle-feature-requests) | Feature Requests | -| @kubernetes/sig-cluster-lifecycle-misc | [link](https://github.com/orgs/kubernetes/teams/sig-cluster-lifecycle-misc) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-cluster-lifecycle-misc) | General Discussion | -| @kubernetes/sig-cluster-lifecycle-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-cluster-lifecycle-pr-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-cluster-lifecycle-pr-reviews) | PR Reviews | -| @kubernetes/sig-cluster-lifecycle-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-cluster-lifecycle-proposals) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-cluster-lifecycle-proposals) | Design Proposals | -| @kubernetes/sig-cluster-lifecycle-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-cluster-lifecycle-test-failures) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-cluster-lifecycle-test-failures) | Test Failures and Triage | +| Team Name | Details | Description | +| --------- |:-------:| ----------- | +| @kubernetes/sig-cluster-lifecycle | [link](https://github.com/orgs/kubernetes/teams/sig-cluster-lifecycle) | Notify group | +| @kubernetes/sig-cluster-lifecycle-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-cluster-lifecycle-pr-reviews) | PR Reviews | diff --git a/sig-cluster-lifecycle/charter.md b/sig-cluster-lifecycle/charter.md new file mode 100644 index 000000000..da9299557 --- /dev/null +++ b/sig-cluster-lifecycle/charter.md @@ -0,0 +1,65 @@ +# SIG Cluster Lifecycle Charter + +## Scope + +SIG Cluster Lifecycle’s objective is to simplify creation, configuration, upgrade, downgrade, and teardown of Kubernetes clusters and their components. + +### In scope + +The following topics fall under ownership of this SIG: + +- Improving the Kubernetes user experience for cluster administration. +- Tools that assist in the creation, configuration, upgrade, downgrade, and teardown of Kubernetes control plane components. +- Portable APIs for provisioning, configuration, upgrade/downgrade, and de-provisioning of nodes. +- Tools that assist in management of configuration of Kubernetes components. +- The configuration of core add-ons that are required for cluster bootstrapping. + +#### Code, Binaries and Services + +- Everything that falls in the scope of the SIG. +- Tools that are provider specific implementation for infrastructure management. +- Core add-ons (e.g. DNS) that are required for cluster bootstrapping. + +#### Cross-cutting and Externally Facing Processes + +- This SIG works closely with SIG Release during the end of the cycle, because of how the release of kubeadm is currently managed. The process requires a lock-step coordination which is outlined [here](https://github.com/kubernetes/kubeadm/blob/master/docs/release-cycle.md). +- The SIG recommends and verifies compatibility of critical cluster add-ons for networking, network policy, service discovery, etc. The SIG maintains the health check of container images for some add-ons that are required for cluster bootstrapping. While the SIG could provide support to users that have add-on related issues, the SIG can decide to delegate issues to the add-on maintainers or other SIGs. +- The SIG owns the framework for upgrade / downgrade testing of Kubernetes. However, the SIG does not own the individual tests for each feature. While the SIG is often involved in triaging and debugging upgrade or downgrade test failures, the SIG will normally delegate issues to the feature owner for the failing test. +- The SIG collaborates regularly with SIG Auth in an effort to follow best practices in order to promote secure default clusters. +- The SIG co-owns cloud provider specific code related to cluster and machine provisioning with the respective SIGs for each cloud provider but does not own the cloud controller manager or any other provider specific code. + +### Out of scope + +- Networking related issues (see [sig-network](../sig-network)). +- User interface, or user experience, issues other than cluster bootstrapping or management (see [sig-ui](../sig-ui) and [sig-cli](../sig-cli)). +- Node related issues (see [sig-node](../sig-node)). +- Kubernetes control plane issues: + - Control plane component related issues (see [sig-api-machinery](../sig-api-machinery)). + +## Roles and Organization Management + +This SIG adheres to the Roles and Organization Management outlined in [sig-governance] +and opts-in to updates and modifications to [sig-governance]. + +### Additional responsibilities of Chairs + +- Selecting features for a given milestone. +- Hosting the weekly SIG meeting, ensure that recordings are uploaded in a timely fashion. +- Ensuring that the breakout sessions the SIG hosts during the week have chairs. +- Organizing SIG sessions at KubeCon events (intro / deep dive sessions). +- Creating roadmaps for a given year or release, or reviewing and approving technical implementation plans (e.g. KEPs) in coordination with both SIG Cluster Lifecycle contributors and other SIGs. + +### Deviations from [sig-governance] + +- As SIG cluster lifecycle contains a number of subprojects, the SIG has empowered subproject leads with a number of additional responsibilities, including but not limited to: + * Releases: The subproject owners are responsible for determining the subproject release cadence, producing releases, and communicating releases with SIG Release and SIG Cluster Lifecycle. + * Backlog grooming: The subproject owners are responsible for ensuring that the issues for the subproject are correctly associated with milestones and that bugs are triaged in a timely manner. + * PR timeliness: The subproject owners are responsible for ensuring that active pull requests for the subproject are addressed in a timely manner. + +### Subproject Creation + +- Federation of Subprojects + +[sig-governance]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance.md +[sigs.yaml]: https://github.com/kubernetes/community/blob/master/sigs.yaml +[Kubernetes Charter README]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/README.md diff --git a/sig-cluster-ops/README.md b/sig-cluster-ops/README.md index e82445321..2d07fe640 100644 --- a/sig-cluster-ops/README.md +++ b/sig-cluster-ops/README.md @@ -5,13 +5,13 @@ Please do not edit this file directly, but instead make changes to the sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> +---> # Cluster Ops Special Interest Group Promote operability and interoperability of Kubernetes clusters. We focus on shared operations practices for Kubernetes clusters with a goal to make Kubernetes broadly accessible with a common baseline reference. We also organize operators as a sounding board and advocacy group. ## Meetings -* Regular SIG Meeting: [Thursdays at 20:00 UTC](https://zoom.us/j/297937771) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=20:00&tz=UTC). +* Regular SIG Meeting: [Thursdays at 20:00 UTC](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=20:00&tz=UTC). * [Meeting notes and Agenda](https://docs.google.com/document/d/1IhN5v6MjcAUrvLd9dAWtKcGWBWSaRU8DNyPiof3gYMY/edit#). * [Meeting recordings](https://www.youtube.com/watch?v=7uyy37pCk4U&list=PL69nYSiGNLP3b38liicqy6fm2-jWT4FQR). @@ -21,7 +21,7 @@ Promote operability and interoperability of Kubernetes clusters. We focus on sha The Chairs of the SIG run operations and processes governing the SIG. * Rob Hirschfeld (**[@zehicle](https://github.com/zehicle)**), RackN -* Jaice Singer DuMars (**[@jdumars](https://github.com/jdumars)**), Microsoft +* Jaice Singer DuMars (**[@jdumars](https://github.com/jdumars)**), Google ## Contact * [Slack](https://kubernetes.slack.com/messages/sig-cluster-ops) diff --git a/sig-contributor-experience/README.md b/sig-contributor-experience/README.md index 477f8e8ac..f989cd188 100644 --- a/sig-contributor-experience/README.md +++ b/sig-contributor-experience/README.md @@ -5,16 +5,15 @@ Please do not edit this file directly, but instead make changes to the sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> +---> # Contributor Experience Special Interest Group -Developing and sustaining a healthy community of contributors is critical to scaling the project and growing the ecosystem. We need to ensure our contributors are happy and productive, we need to break the commit-rate ceiling we hit in July 2015, and we need to get the monotonically growing PR merge latency and numbers of open PRs and issues under control. +Developing and sustaining a healthy community of contributors is critical to scaling the project and growing the ecosystem. We need to ensure our contributors are happy and productive, and that there are not bottlenecks hindering the project in, for example: feature velocity, community scaling, pull request latency, and absolute numbers of open pull requests and open issues. + +The [charter](charter.md) defines the scope and governance of the Contributor Experience Special Interest Group. ## Meetings -* Regular SIG Meeting: [Wednesdays at 9:30 PT (Pacific Time)](https://zoom.us/j/7658488911) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=9:30&tz=PT%20%28Pacific%20Time%29). - * [Meeting notes and Agenda](https://docs.google.com/document/d/1qf-02B7EOrItQgwXFxgqZ5qjW0mtfu5qkYIF1Hl4ZLI/). - * [Meeting recordings](https://www.youtube.com/watch?v=EMGUdOKwSns&list=PL69nYSiGNLP2x_48wbOPO0vXQgNTm_xxr). -* Off Week Sync (Contributor Guide, Mentorship): [Wednesdays at 9:30 PT (Pacific Time)](https://zoom.us/j/873813890) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=9:30&tz=PT%20%28Pacific%20Time%29). +* Regular SIG Meeting: [Wednesdays at 9:30 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=9:30&tz=PT%20%28Pacific%20Time%29). * [Meeting notes and Agenda](https://docs.google.com/document/d/1qf-02B7EOrItQgwXFxgqZ5qjW0mtfu5qkYIF1Hl4ZLI/). * [Meeting recordings](https://www.youtube.com/watch?v=EMGUdOKwSns&list=PL69nYSiGNLP2x_48wbOPO0vXQgNTm_xxr). @@ -35,7 +34,7 @@ subprojects, and resolve cross-subproject technical issues and decisions. ## Contact * [Slack](https://kubernetes.slack.com/messages/sig-contribex) -* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-wg-contribex) +* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-contribex) * [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fcontributor-experience) ## Subprojects @@ -47,18 +46,24 @@ The following subprojects are owned by sig-contributor-experience: - **community-management** - Owners: - https://raw.githubusercontent.com/kubernetes/community/master/communication/OWNERS https://raw.githubusercontent.com/kubernetes/community/master/events/OWNERS -- **contributors-guide** +- **github-management** + - Owners: + - https://raw.githubusercontent.com/kubernetes/community/master/github-management/OWNERS + - https://raw.githubusercontent.com/kubernetes/org/master/OWNERS +- **contributors-documentation** - Owners: - https://raw.githubusercontent.com/kubernetes/community/master/contributors/guide/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/contributor-site/master/OWNERS - **devstats** - Owners: - - Phillels + - https://raw.githubusercontent.com/kubernetes/community/master/sig-contributor-experience/devstats/OWNERS - **k8s.io** - Owners: - https://raw.githubusercontent.com/kubernetes/k8s.io/master/OWNERS - **mentoring** - Owners: - https://raw.githubusercontent.com/kubernetes/community/master/mentoring/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/contributor-playground/master/OWNERS - **repo-infra** - Owners: - https://raw.githubusercontent.com/kubernetes/repo-infra/master/OWNERS @@ -68,18 +73,14 @@ The following subprojects are owned by sig-contributor-experience: The below teams can be mentioned on issues and PRs in order to get attention from the right people. Note that the links to display team membership will only work if you are a member of the org. -The google groups contain the archive of Github team notifications. -Mentioning a team on Github will CC its group. -Monitor these for Github activity if you are not a member of the team. - -| Team Name | Details | Google Groups | Description | -| --------- |:-------:|:-------------:| ----------- | -| @kubernetes/sig-contributor-experience-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-contributor-experience-bugs) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-contributor-experience-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-contributor-experience-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-contributor-experience-feature-requests) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-contributor-experience-feature-requests) | Feature Requests | -| @kubernetes/sig-contributor-experience-misc-use-only-as-a-last-resort | [link](https://github.com/orgs/kubernetes/teams/sig-contributor-experience-misc-use-only-as-a-last-resort) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-contributor-experience-misc-use-only-as-a-last-resort) | General Discussion | -| @kubernetes/sig-contributor-experience-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-contributor-experience-pr-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-contributor-experience-pr-reviews) | PR Reviews | -| @kubernetes/sig-contributor-experience-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-contributor-experience-proposals) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-contributor-experience-proposals) | Design Proposals | -| @kubernetes/sig-contributor-experience-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-contributor-experience-test-failures) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-contributor-experience-test-failures) | Test Failures and Triage | +| Team Name | Details | Description | +| --------- |:-------:| ----------- | +| @kubernetes/sig-contributor-experience-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-contributor-experience-bugs) | Bug Triage and Troubleshooting | +| @kubernetes/sig-contributor-experience-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-contributor-experience-feature-requests) | Feature Requests | +| @kubernetes/sig-contributor-experience-misc-use-only-as-a-last-resort | [link](https://github.com/orgs/kubernetes/teams/sig-contributor-experience-misc-use-only-as-a-last-resort) | General Discussion | +| @kubernetes/sig-contributor-experience-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-contributor-experience-pr-reviews) | PR Reviews | +| @kubernetes/sig-contributor-experience-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-contributor-experience-proposals) | Design Proposals | +| @kubernetes/sig-contributor-experience-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-contributor-experience-test-failures) | Test Failures and Triage | diff --git a/sig-contributor-experience/charter.md b/sig-contributor-experience/charter.md index 7fc57f582..0b7286ca1 100644 --- a/sig-contributor-experience/charter.md +++ b/sig-contributor-experience/charter.md @@ -1,21 +1,25 @@ # Contributor Experience Special Interest Group Charter -*checking in for comments and will add TODOs at bottom along with feedback that comes in* - -## Leads: -* Garrett Rodrigues (**[@grodrigues3](https://github.com/grodrigues3)**) +## Chairs: * Elsie Phillips (**[@Phillels](https://github.com/Phillels)**) * Paris Pittman (**[@parispittman](https://github.com/parispittman)**) +## Technical Leads (TL): +* Garrett Rodrigues (**[@grodrigues3](https://github.com/grodrigues3)**) +* Christoph Blecker (**[@cblecker](https://github.com/cblecker)**) + +## Subprojects and OWNERs +Can be found on our [README](README.md) + ## Processes and Responsibilities -* Leads run weekly meetings in accordance with [SIG governance procedures](/sig-governance.md) -* Leads run quarterly planning meetings where we decide goals for the next release, to be published in the SIG’s [README](README.md) -* Leads plan at least one annual face to face Contributor Experience SIG meeting proposed via mailing list and announced via slack and other channels +* Chairs run weekly meetings in accordance with [SIG governance procedures](/sig-governance.md) unless TLs need to fill in +* Chairs and TLs run quarterly planning meetings where we decide goals for the next release, to be published in the SIG’s [README](README.md) +* Chairs plan at least one annual face to face Contributor Experience SIG meeting proposed via mailing list and announced via slack and other channels * Members run and organize the weekly [Kubernetes Community Meeting](/events/community-meeting.md) * This SIG will act as owners and maintainers of [kubernetes/community](https://github.com/kubernetes/community) -* We participate in [lazy consensus](http://en.osswiki.info/concepts/lazy_consensus) for our decisions - * Idea and/or solution is proposed via the kubernetes-wg-contribex@googlegroups.com mailing list. Link(s) to GitHub issue proposal is a nice to have but not required - * Author will give a time period of no less than 3 working days being cognizant of popular observed world holidays to respond with questions, issues, or hold from a lead(s) for more information/research needed +* We participate in [lazy consensus](http://en.osswiki.info/concepts/lazy_consensus) for our decisions and the [KEP](/keps) process for major features and enhancements + * Idea and/or solution is proposed via the kubernetes-sig-contribex@googlegroups.com mailing list. Link(s) to GitHub issue proposal is a nice to have but not required + * Author will give a time period of no less than 3 working days being cognizant of popular observed world holidays to respond with questions, issues, or hold from a Chair/TL(s) for more information/research needed * Author will participate in implementation of the proposed idea and/or solution * We are responsible for community growth and management of Kubernetes and its ecosystem. We support this growth by creating programs for SIGs, WGs and subprojects to address mentoring, learning and development, contributors, and GitHub workflows. * We will build metrics that capture the project’s velocity and stability @@ -27,36 +31,28 @@ * We ensure communication platforms are a safe environment for discourse and maintain them and in some cases in conjunction with CNCF/LF. Depending on the situation, we will warn first and then report to Steering Committee. Platforms may include Slack, Kubernetes weekly meetings, Zoom, YouTube, etc. * Provide guidance and mediation between SIGs and WGs that are having contributor experience issues. For example, consolidation around a certain workflow * Solicit feedback from other SIGs, project areas, and contributors formally twice a year (mid and end) about our performance and how we can improve the contributor experience -* We encourage and determine where automation makes sense for the contributor workflow. +* We encourage and determine where automation makes sense for the contributor workflow * We own no code outside of the kubernetes/community repo although we may collaborate with other OWNERs of repos and SIG and WG leads * Drives consistent automation surrounding the PR workflow and issue triaging, and collaborates with other groups on implementing our design -* Leadership - * Minimum of two(2) leads, a maximum of four(4) leads - * Each lead will be responsible for a sub-group in addition to assisting with the processes outlined here. [tbu on sub-group creation] - * Lazy Consensus within the SIG to make final decision -* Changing leadership - * Candidates are nominated through the mailing list and confirmed at SIG meeting; self nomination is fine. Candidate needs two +1’s from folks representing different companies or independent/freelancers in the community to be considered a nominee - * Lead may step down at any time for any reason and propose a replacement that is already an active contributing member of Contributor Experience. They will make the change to the OWNERs file - * A lead may be asked to step down if one of the following occurs: - * Inactivity as determined by the governance of the project or as specifically described in the ask to SIG leadership. - * Inappropriate behavior or code of conduct issues - * For other reasons as determined by the leads at that time but also discussed in conjunction with the lead in question - * Leads may appoint a temporary lead if a leave of absence is desired, called a delegate that is already an active contributing member of Contributor Experience -* Process change communication: - * Socialize on kubernetes-wg-contribex@googlegroups.com and on our weekly update calls +* Process change communication: + * Socialize on kubernetes-sig-contribex@googlegroups.com and on our weekly update calls * If the change impacts a small number (<4) of SIGs, WGs, or repos, we will go to each lead, their mailing lists, slack channel, and/or their update meetings and ask for feedback and a lazy consensus process. We will follow up with a post to kubernetes-dev@googlegroups.com mailing list * In cases of impacts across a large number of areas and/or project wide, we will: * Lazy consensus with a time box of at least 72 hours to the following mailing lists with the GitHub issue link including the subject [NOTICE]: foobar to the following mailing lists: * kubernetes-dev@ * sig-leads@ - * kubernetes-wg-contribex@ + * kubernetes-sig-contribex@ * Announce at weekly Kubernetes Community Meeting on Thursdays - - -## TODO: -* Next iteration needs a breakdown of responsibilities by each leader -* Provide some guidance, like a super lightweight proposal template. Or at least ask those making a proposal to consider things like: "Who does this change impact, and how? What can/will cease working as part of this change, and how does the proposer plan to help mitigate that?" -* Add KEP proposal process info^? - -### thanks to those who have reviewed this doc and provided guidance already +## Leadership Composition + * Two (2) Chairs and Two (2) Technical Leads unless group decides that more is needed + * Each Chair and Technical Lead will be responsible for a sub-group in addition to assisting with the processes outlined here + * Lazy Consensus within the SIG to make final decision +* Changing leadership + * Candidates are nominated through the mailing list and confirmed at SIG meeting; self nomination is fine. Candidate needs two +1’s from folks representing different companies or independent/freelancers in the community to be considered a nominee + * Chair/TL may step down at any time for any reason and propose a replacement that is already an active contributing member of Contributor Experience. They will make the change to the OWNERs file + * A Chair/TL may be asked to step down if one of the following occurs: + * Inactivity as determined by the governance of the project or as specifically described in the ask to SIG leadership + * Inappropriate behavior or code of conduct issues + * For other reasons as determined by the Chair/TLs at that time but also discussed in conjunction with the lead in question + * Chair/TLs may appoint a temporary replacement if a leave of absence is desired, called a delegate that is already an active contributing member of Contributor Experience diff --git a/sig-contributor-experience/community-maintenance.md b/sig-contributor-experience/community-maintenance.md index d47b04631..82f704692 100644 --- a/sig-contributor-experience/community-maintenance.md +++ b/sig-contributor-experience/community-maintenance.md @@ -59,6 +59,15 @@ If you find that any one person is in charge of a resource it is your responsibi - Brendan Burns (@brendandburns) - Tim Hockin (@thockin) +### Community Meeting + +- [ ] Generate an archive of the [community meeting notes](https://docs.google.com/document/d/1VQDIAB0OqiSjIHI8AWMvSdceWhnz56jNpZrLs6o7NJY/edit#heading=h.2gp5yf2snwg5) for the quarter if necessary + - [ ] Ensure the retrospective section has links to the retrospective for the releases + - [ ] Ensure the demo section is filled out and demos are assigned dates + - [ ] Ensure the [agenda template and hosting guide](https://docs.google.com/document/d/1g7fR5cvCGFq15SJ4iQMclbj0QIeREKu_QP8ftnSaJ4o/edit) are up to date +- [ ] Ensure the [SIG Schedule](https://docs.google.com/spreadsheets/d/1adztrJ05mQ_cjatYSnvyiy85KjuI6-GuXsRsP-T2R3k/edit#gid=1543199895) have SIGs assigned for the next few months + - [ ] Ensure the assigned SIGs in this sheet match the actual SIGs in sigs.yaml. Double check that a SIG hasn't missed an update this past cycle and if they have schedule them for an upcoming meeting + ### Properties Managed by the CNCF The CNCF provides support to Kubernetes for the following properties, you do not need to check them, however members of SIG Contributor Experience should have a working relationship with the administrators of the following properties: diff --git a/sig-contributor-experience/contribex-survey-2018.csv b/sig-contributor-experience/contribex-survey-2018.csv new file mode 100644 index 000000000..fb63b2f81 --- /dev/null +++ b/sig-contributor-experience/contribex-survey-2018.csv @@ -0,0 +1,161 @@ +Respondent ID,Collector ID,End Date,Contributing Length,Level of Contributor Laddor,Interested in next level?,World Region,Time Zone,Contribute to other OSS?,Blocker: Code/Doc review,Blocker: Communication,Blocker: GH tools&processes (not our customized tooling),Blocker: Finding a/the right SIG,"Blocker: Our CI, labels, and crafted customized automation",Blocker: Debugging test failures,Blocker: Finding issues to work on,Blocker: Setting up dev env,Blocker: Having PRs rejected,Useful: /retest of flakes (fejta-bot) ,Useful: labeling of stale issues (fejta-bot),"Useful: issue commands like /assign, /kind bug (k8s-ci-robot)","Useful: PR commands like /approve, /lint (k8s-ci-robot) ",Useful: merging of approved PRs (k8s-merge-robot and k8s-ci-bot),Least Useful Tool/Something that needs to be automated,current notification volume and utility,Which areas could use additional automation?,Upstream supported at employer?,"How often do you contribute upstream (code, docs, issue triage, etc.)?",Contribute: code to k/k,Contribute: code in a k/* GH org,Contribute: Docs,Contribute: Testing and CI,Contribute: Events&Advocacy,Contribute: Community & PM; SIG Chair etc.,"Contribute: Plugins & Drivers (CSI, CNI, cloud providers)","Contribute: Related projects (Kubeadm, Helm, container runtimes, etc.)",Contribute: Not yet,Contribute: Other,Make project easier to contribute?,Attended: KC EU 2017,Attended: KC NA 17,Attended: KC EU 18,Attending: KC CN 18,Attending: KC NA 18,Attending: KC EU 19,"Attended: Ecosystem events, eg. Helm Summit",Attended: Other confs with a Kubernetes track (like DockerCon or ContainerDay),Does not attend conferences,How to make ContribSummits more valuable?,Attended: # of ContribSummits,Useful@ThursMtg: Demo,Useful@ThursMtg: KEP,Useful@ThursMtg: DevStats,Useful@ThursMtg: Release,Useful@ThursMtg: SIG Updates,Useful@ThursMtg: Announcements,Useful@ThursMtg: Shoutouts,Misc Thurs Mtg feedback,Most Important Project: Mentoring programs,Most Important Prj: GH Mgmt,Most Important Proj: Contributor Summits,Most Important Proj: Contributor Site,Most Important Proj: CommPlatform Consolidation/other options,Most Important Proj: DevStats,Most Important Proj: Keeping community safe,What projects are missing?,Generic Project Groupings from BN,Use freq: Google Groups/Mailing Lists,Use freq: Slack,Use freq: discuss.kubernetes.io,Use freq: Zoom Mtgs,"Use freq: GH (comments, issues, prs)","Use freq: Unofficial(Twitter, Reddit, etc.)",Use freq: SO,Use freq: YT Recordings,"Use freq: GDocs/Forms/Sheets, etc (meeting agendas, etc)",Check for news: k-dev ML,Check for news: discuss.kubernetes.io,Check for news: contribex ML,Check for news: Slack,Check for news: Twitter read first ,Check for news: A dedicated contributor site read first,Check for news: Kubernetes blog read first ,Check for news: k/community repo in GH (Issues and/or PRs) read first,Check for news: Other,Value in Slack?,HelpWanted &/or GoodFirstIssue label usage?,HelpWanted&GoodFirstIssue Other Comments,Interetested in mentoring GSoC or Outreachy?,Watched or participated in MoC?,Is MoC useful?,Mentoring Blocker? +10249522900,216437765,10/01/2018 2:16:15 PM,6 months -1 year,"I’m not an org member yet, but working on it","Yes, but would like mentorship.",Europe,UTC+03:00,2-4,1,4,1,1,1,1,5,2,2,1,n/a,1,n/a,n/a,"So far haven't been able to use most of the commands, since org membership process has met some issues.",Lots of notifications but they are useful,Pinging reviewers to either approve or disapprove PRs and issues.,"Yes, it’s part of my job",Several times a month,Core code inside of kubernetes/kubernetes,n/a,Documentation,n/a,n/a,n/a,n/a,n/a,n/a,n/a,"I would have time to contribute, but so far me asking for things to do has met only silence on Slack channels. Would be nice if mentoring would be set up.",n/a,n/a,Kubecon Europe 2018,n/a,n/a,n/a,n/a,n/a,n/a,N/A,1,1,4,2,4,4,4,2,N/A,1,n/a,n/a,n/a,n/a,n/a,n/a,N/A,,4,5,2,3,5,1,1,3,5,n/a,n/a,n/a,Slack,n/a,n/a,Kubernetes blog,n/a,n/a,"yes, for both users and contributors",Other (please specify):,At SIG Node the labels aren't really used.,"B - No, I can’t/don’t want to",No,3,Don't know enough to mentor +10248186342,216437765,09/30/2018 10:00:19 AM,Just started,"I’m not an org member yet, but working on it","Yes, but not sure I have time.",Europe,UTC+01:00,One more,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10247634817,216437765,09/29/2018 9:53:32 PM,1-2 years,Approver,"Yes, but not sure I have time.",North America,UTC-08:00,2-4,3,1,4,4,2,2,3,4,2,1,1,1,n/a,1,/lgtm triggers /approve if I’m an approved? Madness! A weaker action should not trigger a stronger action based on my social status.,Not enough notifications and I frequently miss important things (e.g when my review/approval is needed),Don’t know,"Yes, it’s part of my job",Several times a month,n/a,Code inside of another repo in the kubernetes/* GitHub organization,n/a,n/a,n/a,Community & Project management; SIG Chair etc.,n/a,n/a,n/a,n/a,Use Gerrit,Kubecon Europe 2017,Kubecon North America 2017,Kubecon Europe 2018,n/a,Kubecon North America 2018,Kubecon Europe 2019,"Ecosystem events, eg. Helm Summit",Other conferences with a Kubernetes track (like DockerCon or ContainerDay),n/a,N/A,1,2,4,4,4,4,5,5,N/A,n/a,2,n/a,4,n/a,n/a,7,"Better, clearer documentation that’s organized",Better contributor documentation,3,5,1,5,4,2,1,1,5,n/a,n/a,n/a,Slack,n/a,n/a,n/a,n/a,n/a,"yes, for both users and contributors","No, because I didn't know they were there",n/a,"B - No, I can’t/don’t want to",No,3,Not enough time in the week +10247081052,216437765,09/29/2018 7:54:55 AM,2-3 years,Approver,"Yes, doing it on my own.",North America,UTC+06:00,2-4,2,4,2,1,4,2,1,1,1,n/a,n/a,n/a,1,1,"fejta-bot, I have never seen it respark conversation",Way too many notifications with no benefits,Automation onboarding,"No, but I’m able to use “free” time at work",A few times a week,n/a,Code inside of another repo in the kubernetes/* GitHub organization,Documentation,Testing & Infrastructure,n/a,n/a,n/a,"Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,n/a,n/a,n/a,Kubecon North America 2017,n/a,n/a,Kubecon North America 2018,n/a,n/a,Other conferences with a Kubernetes track (like DockerCon or ContainerDay),n/a,n/a,0,3,5,3,4,5,5,3,No,n/a,n/a,n/a,4,n/a,n/a,n/a,N/A,,2,5,1,5,5,3,2,5,5,n/a,n/a,n/a,n/a,n/a,n/a,n/a,k/community repo in GH (Issues and/or PRs),n/a,"yes, for both users and contributors",Not as much as I should because I forget,n/a,"B - No, I can’t/don’t want to",Yes,2,Employer doesn't support spending time mentoring +10246592845,216437765,09/28/2018 11:06:00 PM,Just started,"I’m not an org member yet, but working on it","Yes, but not sure I have time.",Asia,UTC+05:30,"None, Kubernetes is my first one!",1,1,1,1,1,2,2,3,1,1,1,1,1,1,NA,Lots of notifications but they are useful,"An issue can have multiple PRs. But with current automation, issue gets closed if only one PR is closed. Need automation to check if all associated issues are closed and keep track of count.","No, but I’m able to use “free” time at work",A few times a week,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,Could not think of any...,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,None,N/A,0,3,3,3,3,3,3,3,N/A,1,2,n/a,4,5,n/a,n/a,N/A,,3,3,1,1,5,2,2,5,3,kubernetes-dev mailing list,n/a,n/a,n/a,n/a,A dedicated contributor site,n/a,k/community repo in GH (Issues and/or PRs),n/a,"yes, for both users and contributors",Other (please specify):,Didn't create issue,"A - Yes, I would love to mentor one or both programs",No,3,Don't know enough to mentor +10246539346,216437765,09/28/2018 10:23:01 PM,3+ years,Subproject Owner,"Yes, but would like mentorship.",North America,UTC-05:00,One more,2,4,2,4,2,2,4,1,2,1,n/a,1,1,1,n/a,Right notifications at the right frequency,non cloud infrastructure,"Yes, it’s part of my job",A few times a year,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,n/a,n/a,n/a,n/a,"Plugins & Drivers (CSI, CNI, cloud providers)",n/a,n/a,n/a,n/a,n/a,Kubecon North America 2017,n/a,n/a,Kubecon North America 2018,n/a,n/a,n/a,n/a,N/A,0,n/a,n/a,n/a,5,5,5,n/a,It is already better. :),n/a,n/a,n/a,n/a,5,n/a,7,N/A,,4,4,1,3,4,1,2,2,2,n/a,n/a,n/a,Slack,n/a,n/a,n/a,n/a,n/a,"yes, for both users and contributors",Not as much as I should because I forget,n/a,"B - No, I can’t/don’t want to",No,3,Wasn't connected with mentoring opportunities (reach out to us to get engaged!) +10246240889,216437765,09/28/2018 8:03:43 PM,3+ years,Approver,"No, I'm already an owner",North America,UTC-03:30,4+,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10246162130,216437765,09/28/2018 7:29:33 PM,Less than 6 months,Approver,"Yes, but not sure I have time.",North America,UTC-05:00,One more,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10246160102,216437765,09/28/2018 7:53:04 PM,Less than 6 months,Org Member,"Yes, but would like mentorship.",North America,UTC-08:00,"None, Kubernetes is my first one!",2,4,1,2,1,1,4,1,3,1,n/a,1,n/a,1,n/a,Lots of notifications but they are useful,e2e tests,"Yes, it’s part of my job",Every day,Core code inside of kubernetes/kubernetes,n/a,n/a,Testing & Infrastructure,n/a,n/a,"Plugins & Drivers (CSI, CNI, cloud providers)",n/a,n/a,n/a,n/a,n/a,n/a,n/a,Kubecon China 2018,Kubecon North America 2018,n/a,n/a,n/a,n/a,i have to experience it first,0,5,5,3,3,4,2,2,"have more feedback/discussion on PR, Pull request",1,n/a,3,n/a,n/a,6,n/a,deep dive of all components is needed,Deep Dives and Code Base Tour Videos/Content,1,2,1,4,4,1,2,3,4,kubernetes-dev mailing list,n/a,n/a,n/a,n/a,n/a,Kubernetes blog,k/community repo in GH (Issues and/or PRs),n/a,"yes, for both users and contributors","No, because I didn't know they were there",n/a,"A - Yes, I would love to mentor one or both programs",No,1,Wasn't connected with mentoring opportunities (reach out to us to get engaged!) +10245935128,216437765,09/28/2018 6:25:08 PM,Just started,"I’m not an org member yet, but working on it","Yes, but would like mentorship.",Asia,UTC+08:00,One more,4,5,4,3,4,3,3,5,3,n/a,n/a,1,1,n/a,N/A,Right notifications at the right frequency,N/A,It’s entirely on my own time,Don’t know yet,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,"Don’t contribute yet, hoping to start soon",n/a,N/A,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,None,N/A,0,5,5,5,5,5,5,5,N/A,1,n/a,n/a,n/a,n/a,n/a,n/a,N/A,,3,3,3,3,3,1,3,2,3,n/a,n/a,n/a,n/a,n/a,n/a,n/a,k/community repo in GH (Issues and/or PRs),n/a,"yes, for both users and contributors","No, because I didn't know they were there",n/a,"A - Yes, I would love to mentor one or both programs",Yes,3,Other (please specify): +10243938380,216437765,09/27/2018 9:17:45 PM,6 months -1 year,"I’m not an org member yet, but working on it","Yes, but would like mentorship.",Europe,UTC+02:00,One more,3,3,2,3,2,4,4,2,4,1,n/a,1,1,1,Auto target release assignment to PRs (to provide a priority in review/merge process),Lots of notifications but they are useful,Dashboards | Finding a mentor | Navigating code base / dependencies -> documentation or visualization.,"No, but I’m able to use “free” time at work",Several times a month,n/a,Code inside of another repo in the kubernetes/* GitHub organization,Documentation,n/a,n/a,Community & Project management; SIG Chair etc.,n/a,n/a,n/a,n/a,N/A,n/a,n/a,n/a,n/a,n/a,Kubecon Europe 2019,n/a,Other conferences with a Kubernetes track (like DockerCon or ContainerDay),n/a,I did not participate in one yet. Happy to help during the next one in Europe.,0,4,4,5,4,5,5,4,"At the beginning I thought there should be more context for new comers. Now I have mixed feelings, because that would promote being inclusive at the risk of becoming boring for regulars",1,2,n/a,4,n/a,n/a,n/a,"A place where I can find the list of items contrib-experience is working on, a bit more detailed plans and scopes as well as the priorities driving their execution. ",ContribEx proj mgmt,4,5,2,4,3,2,2,3,4,kubernetes-dev mailing list,n/a,n/a,Slack,n/a,n/a,n/a,n/a,n/a,"yes, for both users and contributors","No, because I don't think my issues qualify",n/a,"B - No, I can’t/don’t want to",No,3,Wasn't connected with mentoring opportunities (reach out to us to get engaged!) +10243887058,216437765,09/27/2018 8:34:56 PM,Just started,"I’m not an org member yet, but working on it","Yes, but would like mentorship.",North America,UTC-07:00,One more,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10243855578,216437765,09/27/2018 8:22:50 PM,Just started,Had no idea this was even a thing,Not really,North America,UTC-04:00,4+,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10243848503,216437765,09/27/2018 8:37:14 PM,Less than 6 months,Org Member,"Yes, doing it on my own.",North America,UTC-07:00,"None, Kubernetes is my first one!",1,1,1,1,1,3,1,1,2,1,n/a,1,n/a,1,I think they're all useful.,Lots of notifications but they are useful,"Can we have a tool to smartly detect whether a PR has unnecessary un-squashed commits? Like this one https://github.com/kubernetes/kubernetes/pull/68289 has 3 commits, but should be squashed into 1. It will make people question k8s's code quality (or process) when they see those non-sense commits in the main branch history.","Yes, it’s part of my job",Every day,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,Documentation,n/a,Advocacy and events,n/a,n/a,n/a,n/a,n/a,I think it's friendly enough to new contributors.,n/a,Kubecon North America 2017,n/a,n/a,Kubecon North America 2018,n/a,n/a,n/a,n/a,N/A,0,4,5,5,4,2,3,3,No at this moment.,n/a,n/a,n/a,4,n/a,n/a,n/a,N/A,,2,5,1,2,5,2,1,1,2,n/a,n/a,n/a,Slack,Twitter,A dedicated contributor site,Kubernetes blog,k/community repo in GH (Issues and/or PRs),n/a,"yes, for both users and contributors","No, because I don't think my issues qualify",n/a,"B - No, I can’t/don’t want to",Yes,4,Not enough time in the week +10243846001,216437765,09/27/2018 8:39:44 PM,Less than 6 months,"I’m not an org member yet, but working on it","Yes, but would like mentorship.",North America,UTC-08:00,2-4,2,2,4,3,3,3,2,2,2,1,1,1,1,1,"the /assign is a bit confusing. In here you need to assign to someone who is a org member.. However, in generic terms if i am working on a Issue then I would think I would /assign it to myself. I think the overall github workflow is my least favorite part. I would rather prefer something like gerrit frontend for reviews and merges. A lot of other open source projects use that mechanism. for .e.g openstack. And I think that is surely a much better way to do the review/rebase/merge process.",Right notifications at the right frequency,I think the current set of automation is fine.,"Yes, it’s part of my job",A few times a week,n/a,n/a,n/a,n/a,n/a,n/a,"Plugins & Drivers (CSI, CNI, cloud providers)","Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,n/a,no suggestions at the moment,n/a,Kubecon North America 2017,n/a,n/a,n/a,n/a,n/a,n/a,n/a,"Based on the one conference I did attend, I loved it",1,3,3,3,3,3,3,3,nothing now,n/a,n/a,n/a,n/a,5,n/a,n/a,not sure at the moment,,3,5,1,4,4,1,1,3,4,kubernetes-dev mailing list,n/a,n/a,Slack,n/a,n/a,n/a,n/a,n/a,"yes, for both users and contributors","No, because I didn't know they were there",n/a,"B - No, I can’t/don’t want to",Yes,4,Don't know enough to mentor +10243783540,216437765,09/27/2018 8:08:16 PM,2-3 years,Subproject Owner,"Yes, but not sure I have time.",North America,UTC-07:00,4+,5,5,3,3,4,5,4,5,1,1,1,n/a,1,1,"Disagreement on what some of the labels and process are, and the difference in how they are per project.",Not enough notifications and I frequently miss important things (e.g when my review/approval is needed),suggesting people to add as reviewers and approvers. We cannot bottleneck on the same 7 or so people.,"Yes, it’s part of my job",Every day,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,Documentation,Testing & Infrastructure,n/a,n/a,n/a,n/a,n/a,n/a,Make it easier to get permissions to do things. Make it easy to have people help other people and get to the point where the have the permissions. We're having massive sprawl because it's easier to do things outside of the project than it is to do it inside.,n/a,Kubecon North America 2017,Kubecon Europe 2018,n/a,n/a,n/a,n/a,n/a,n/a,I think they're good.,3,1,1,1,1,1,1,1,"I stopped showing up after the 40th version of ""here's how we at XYZ company install kubernetes""",1,2,n/a,n/a,n/a,6,n/a,GETTING MORE PEOPLE INTO REVIEWERS/APPROVERS. ,Reviewer and Approver Growth,5,5,2,4,5,3,2,3,5,n/a,n/a,n/a,n/a,n/a,n/a,n/a,k/community repo in GH (Issues and/or PRs),likely that this never reaches me,no value for anyone,Yes,n/a,"B - No, I can’t/don’t want to",No,3,Wasn't connected with mentoring opportunities (reach out to us to get engaged!) +10243694700,216437765,09/27/2018 8:01:24 PM,1-2 years,Org Member,"Yes, but not sure I have time.",North America,UTC-04:00,"None, Kubernetes is my first one!",2,2,2,2,2,3,3,4,2,1,1,1,1,1,"For reasons that are currently being debated, we've had trouble in sig-multicluster with the coupling of /approve /lgtm labels that have lead to unexpected merging of PRs. It seems that a better system is being developed through the conversation currently taking place. Otherwise, all of these tools have been very useful in my experience.","Right notifications are being made, but too frequently",I'm not sure,I’m a student,Several times a month,n/a,Code inside of another repo in the kubernetes/* GitHub organization,Documentation,n/a,n/a,n/a,n/a,n/a,n/a,n/a,"I have been lucky to have great support in getting to a point where I have a working development environment, introductions into the community and mentoring during my ramp up to contributing regularly to kubernetes (which was far more frequent than currently) so at this point, I don't feel like there are ways the project could make contributing easier for me.",Kubecon Europe 2017,Kubecon North America 2017,n/a,n/a,Kubecon North America 2018,n/a,n/a,n/a,n/a,N/A,1,4,4,4,4,4,4,5,"No, I think it's useful.",1,n/a,n/a,n/a,n/a,n/a,7,New Contributor playground. I'm not sure why it's not there but I think it's important to make sure there is support for new contributors to get up and running.,New contributor playground,4,5,2,4,4,2,1,3,4,kubernetes-dev mailing list,n/a,Contributor Experience mailing list,n/a,n/a,n/a,n/a,n/a,n/a,"yes, for both users and contributors","No, because I don't think my issues qualify",n/a,"B - No, I can’t/don’t want to",Yes,5,Not enough time in the week +10243216424,216437765,09/27/2018 4:26:23 PM,6 months -1 year,"I’m not an org member yet, but working on it","Yes, but would like mentorship.",North America,UTC-08:00,"None, Kubernetes is my first one!",n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10243001543,216437765,09/27/2018 2:53:40 PM,Less than 6 months,Had no idea this was even a thing,"Yes, but not sure I have time.",North America,UTC-05:00,2-4,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10242890962,216437765,09/27/2018 2:31:05 PM,6 months -1 year,Org Member,"Yes, doing it on my own.",Europe,UTC+02:00,One more,3,3,2,2,1,1,3,3,3,1,n/a,1,1,1,N/A,Not enough notifications and I frequently miss important things (e.g when my review/approval is needed),"Ability to subscribe for certain PRs, issues and test failures","Yes, it’s part of my job",Every day,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,Documentation,Testing & Infrastructure,Advocacy and events,n/a,n/a,"Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,n/a,Test automation (CI/CD) is just awful right now. Its UX is bad and I can hardly find why a test is failing. The flakyness of tests is an issue too.,n/a,n/a,Kubecon Europe 2018,n/a,n/a,Kubecon Europe 2019,n/a,Other conferences with a Kubernetes track (like DockerCon or ContainerDay),n/a,N/A,0,3,1,1,3,3,3,3,N/A,1,n/a,n/a,n/a,n/a,n/a,n/a,N/A,,2,5,1,4,5,1,1,4,4,n/a,n/a,n/a,Slack,n/a,n/a,n/a,n/a,Zoom meetings,"yes, for both users and contributors",Yes,n/a,"A - Yes, I would love to mentor one or both programs",No,3,Don't know enough to mentor +10242540704,216437765,09/27/2018 10:51:38 AM,6 months -1 year,Org Member,"Yes, but would like mentorship.",Asia,UTC+08:00,2-4,1,1,1,1,1,1,3,1,1,1,1,1,1,1,I hope we can send a email or notification to assigners if the PR n/a for some days.,Not enough notifications and I frequently miss important things (e.g when my review/approval is needed),I often absences from the SIG meetings due to the time zone. So I hope I can receive an email or notification of the meeting summary document or video.,"Yes, it’s part of my job",A few times a week,Core code inside of kubernetes/kubernetes,n/a,n/a,Testing & Infrastructure,n/a,n/a,"Plugins & Drivers (CSI, CNI, cloud providers)",n/a,n/a,n/a,n/a,n/a,n/a,n/a,Kubecon China 2018,n/a,n/a,n/a,n/a,n/a,I hope we can have more Contributor Summits in China.,n/a,5,5,4,4,5,5,4,I hope we can output a summary document of each meeting.,n/a,n/a,n/a,4,n/a,n/a,n/a,Nothing,,5,5,3,3,5,1,5,3,5,kubernetes-dev mailing list,n/a,n/a,Slack,n/a,n/a,n/a,n/a,n/a,"yes, for both users and contributors","No, because I don't think my issues qualify",n/a,"A - Yes, I would love to mentor one or both programs",Yes,5,Wasn't connected with mentoring opportunities (reach out to us to get engaged!) +10241906398,216437765,09/27/2018 2:12:15 AM,3+ years,Subproject Owner,"No, I'm already an owner",North America,UTC-07:00,2-4,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10241687270,216437765,09/27/2018 12:29:17 AM,2-3 years,Org Member,"Yes, but would like mentorship.",North America,UTC-07:00,One more,2,4,4,2,5,5,5,5,5,1,1,1,1,1,/lint I never knew it existed. hence did not know how to use it offline.,Way too many notifications with no benefits,- Ability to build and test as a developer the way current test-infra is building.,"Yes, it’s part of my job",Don’t know yet,n/a,n/a,n/a,Testing & Infrastructure,n/a,Community & Project management; SIG Chair etc.,n/a,n/a,n/a,n/a,"Better release management and compatibility matrix of components involved around the project (such as compatiblity matrix for kubernetes, containerd and CRI plugins, CSI, CNI, helm, docker) etc.,",Kubecon Europe 2017,Kubecon North America 2017,n/a,n/a,Kubecon North America 2018,Kubecon Europe 2019,n/a,Other conferences with a Kubernetes track (like DockerCon or ContainerDay),n/a,Last year the mentors were helping in career mentoring. Not mentoring people in being a better contributor summit. I think we need to focus more on helping people be a better contributor.,2,1,2,3,1,2,1,1,The notes writing is sometimes vague if you miss the meeting. You have to watch the recordings. May be we could do a better job at pre-writing some sections that the speaker wants to cover in the notes section so that we have more time while write live notes.,1,2,3,n/a,5,n/a,7,Offline communities such as meetups need better guidelines and toolset.,Meetups,3,1,3,1,2,2,3,2,1,n/a,n/a,n/a,Slack,Twitter,n/a,Kubernetes blog,n/a,n/a,"yes, for both users and contributors","No, because I didn't know they were there",n/a,"B - No, I can’t/don’t want to",Yes,2,Employer doesn't support spending time mentoring +10241675978,216437765,09/27/2018 12:06:28 AM,2-3 years,Org Member,"Yes, but would like mentorship.",North America,UTC-07:00,One more,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10241578617,216437765,09/26/2018 11:58:02 PM,1-2 years,Reviewer,"Yes, doing it on my own.",North America,UTC-08:00,4+,2,3,2,1,1,5,2,2,2,1,1,1,1,1,"""/retest"" why is this needed SOOOO OFTEN? Also could it self report when manually run ten times in a row on PR that there's a bug somewhere?",Right notifications at the right frequency,"Noting which line(s) in which OWNERS file(s) are seeming overworked...ie: if somebody's getting 5000 notifications via GitHub each day maybe it's not the notifications that's the problem but rather ownership and delegation? Acknowledging that individuals are buried in notifications, how does one go about understanding how to raise a priority interrupt on somebody or some SIG? Email address for direct email, Slack ID for ping, timezone, vacation/presence, etc. are reasonably obfuscated. A message of ""can anybody help with issue XX or PR YY"" in a SIG's slack channel seems in my experience to have less 50% chance of triggering action. Adding the SIG leaders or appropriate OWNERS to a @mention there similarly find low rate of success, but perhaps this is inactivity in specific SIGs. Are SIG leads using the https://k8s-gubernator.appspot.com/pr dashboard for their own queue or is it also too full of to-do items? Could a similar dashboard show thing things for example priority/critical-urgent, especially if they're ""languishing"" for some metric thereof? Could ""active contributor in area, but not in reviewer or approver list"" be tracked and suggested quarterly to SIG leadership for promotion, for example around the same time as their SIG update at The Community Meeting, where they can then announce how they're pro-actively growing their contributor base and solving ""The Approver Problem""?","Yes, it’s part of my job",Every day,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,Documentation,Testing & Infrastructure,Advocacy and events,Community & Project management; SIG Chair etc.,"Plugins & Drivers (CSI, CNI, cloud providers)","Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,n/a,"While there is undeniably friction (and important focus on continual improvement), for a project as large and complex as kubernetes I just want to say a huge kudos to those who've done work to make contributing generally easy. The number one pain point I hear about from experienced developers newly coming to k8s is confusion about the state of presubmit test automation and why things feel so flakey in CI. Things like joining groups/channels/meetings, reading docs, make a GitHub account, sign the CLA, and even the custom labeling are sufficiently clear to a newcomer who has done some development before and reads what the bot tells them in response to their actions. But when they make a first even trivial docs or code fix to validate they understood the process enough to get a PR merged...and it all fails, they don't know what to do and they can't be expected (yet) as newcomers to go triage cross-project infrastructure flakes. Overall improving CI signal so it more consistently yields true positives and true negatives is a need.",Kubecon Europe 2017,Kubecon North America 2017,Kubecon Europe 2018,Kubecon China 2018,Kubecon North America 2018,Kubecon Europe 2019,"Ecosystem events, eg. Helm Summit",n/a,n/a,"continue to hone the content toward being completely pre-canned and reusable, modulo some small bits of annual updating to capture changes in community process, repo layout, etc.",1,4,4,4,3,5,3,3,Bring more consistency to the SIG updates and up the quality by requiring the SIG leadership presenting to have materials pre-shared instead of talking rapidly off the cuff with a volunteer trying to scribe on a topic for which they're not a subject matter expert.,1,n/a,3,n/a,n/a,n/a,n/a,"A corporate focus, but pragmatic. As the project grows, one dimension of its next level growth will be more corporate involvement from the 70+(?!) vendors/distributors/hosting providers. Many of these newcomers will have little open source experience, yet they will have been tasked with accomplishing some product related goal (implement a feature, enable platform specific CI, measure conformance, etc.). They may need special guidance so they do not overwhelm or undermine the project an instead can constructively and pragmatically help their sponsor companies navigate deeper kubernetes engagement. It's also important to not become OpenStack.",Onboarding vendor contributors in a nondisruptive way,4,5,3,5,5,2,1,4,5,kubernetes-dev mailing list,n/a,n/a,Slack,Twitter,n/a,n/a,n/a,n/a,"yes, for both users and contributors",Yes,n/a,"B - No, I can’t/don’t want to",Yes,5,Not enough time in the week +10241229093,216437765,09/26/2018 9:10:35 PM,Just started,"I’m not an org member yet, but working on it","Yes, but would like mentorship.",Europe,UTC+02:00,"None, Kubernetes is my first one!",2,1,2,3,1,2,2,1,1,n/a,n/a,1,1,1,/lint,Right notifications at the right frequency,don't know yet,I’m a student,Don’t know yet,Core code inside of kubernetes/kubernetes,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,N/A,n/a,n/a,n/a,n/a,n/a,Kubecon Europe 2019,n/a,Other conferences with a Kubernetes track (like DockerCon or ContainerDay),n/a,N/A,0,n/a,n/a,n/a,3,3,3,n/a,N/A,n/a,2,3,n/a,n/a,n/a,n/a,N/A,,2,5,1,2,4,1,4,3,2,kubernetes-dev mailing list,n/a,n/a,Slack,n/a,n/a,n/a,k/community repo in GH (Issues and/or PRs),n/a,"yes, for both users and contributors",Other (please specify):,Only contributed,"B - No, I can’t/don’t want to",No,3,Don't know enough to mentor +10241066609,216437765,09/26/2018 8:13:49 PM,2-3 years,Subproject Owner,"No, I'm already an owner",Europe,UTC+03:00,One more,5,3,2,3,3,4,4,2,2,1,n/a,1,1,1,"On a day-to-day basis I benefit the least from the automatic labeling of stale issues, but on a project level it's a good thing so I don't mind it.",Lots of notifications but they are useful,I don't know at the moment,"Yes, it’s part of my job",Every day,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,Documentation,Testing & Infrastructure,Advocacy and events,Community & Project management; SIG Chair etc.,"Plugins & Drivers (CSI, CNI, cloud providers)","Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,n/a,n/a,Kubecon Europe 2017,Kubecon North America 2017,Kubecon Europe 2018,Kubecon China 2018,Kubecon North America 2018,Kubecon Europe 2019,n/a,n/a,n/a,"N/A, I think the current format is good",3,3,4,3,4,5,4,3,N/A,1,n/a,n/a,n/a,n/a,n/a,n/a,N/A,,3,5,2,4,5,3,2,4,5,kubernetes-dev mailing list,n/a,n/a,Slack,n/a,n/a,Kubernetes blog,n/a,n/a,"yes, for both users and contributors",Yes,n/a,"A - Yes, I would love to mentor one or both programs",No,3,"Nothing, am already a mentor" +10240775393,216437765,09/26/2018 6:31:08 PM,1-2 years,Subproject Owner,"Yes, but not sure I have time.",North America,UTC-08:00,2-4,2,3,1,3,2,2,4,4,2,1,1,1,1,1,"All the tooling mentioned above is useful. I wish process/tooling for development was better/faster. For example, faster build and release.",Way too many notifications with no benefits,"Local - build, release, and test - faster, requiring less resources, more automated.","Yes, it’s part of my job",A few times a year,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,Documentation,Testing & Infrastructure,Advocacy and events,n/a,n/a,n/a,n/a,n/a,Find better ways to leverage new community member's desire to contribute.,n/a,n/a,Kubecon Europe 2018,n/a,Kubecon North America 2018,n/a,n/a,n/a,n/a,"Coordinate with events, perhaps have it the same day as tutorials - in the afternoon. I like it when sig-updates/meetings are paired with the conference. For example, kubecon EU.",1,4,2,2,3,3,4,2,"Email agenda or at least sig-updates to a list, so that I can determine whether to attend or watch the session later without requiring me to go check the agenda.",1,2,3,n/a,n/a,n/a,7,"Improving build times or local development. More tests, which should probably have its own track. More on how users (not developers) can contribute.",Better contributor documentation,5,4,3,3,4,1,3,3,3,kubernetes-dev mailing list,Dedicated discuss.k8s.io forum for contributors,Contributor Experience mailing list,n/a,n/a,n/a,n/a,n/a,n/a,"yes, for both users and contributors","No, because I don't think my issues qualify",n/a,"B - No, I can’t/don’t want to",No,3,Not enough time in the week +10240715265,216437765,09/26/2018 6:01:32 PM,Just started,"I’m not an org member yet, but working on it","Yes, but would like mentorship.",Asia,UTC-05:00,"None, Kubernetes is my first one!",1,2,3,4,5,2,1,2,2,1,n/a,n/a,n/a,n/a,n/a,Way too many notifications with no benefits,n/a,"Yes, it’s part of my job",Every day,Core code inside of kubernetes/kubernetes,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,as,Kubecon Europe 2017,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,as,as,1,2,2,2,1,1,1,as,1,n/a,n/a,n/a,n/a,n/a,n/a,as,,1,2,2,2,2,2,1,2,2,kubernetes-dev mailing list,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,"yes, for both users and contributors",n/a,n/a,n/a,n/a,n/a,n/a +10240539297,216437765,09/30/2018 6:13:18 AM,2-3 years,Approver,"Yes, doing it on my own.",Asia,UTC+08:00,4+,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10240281768,216437765,09/26/2018 3:09:56 PM,Less than 6 months,"I’m not an org member yet, but working on it","Yes, but would like mentorship.",Europe,UTC+02:00,One more,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10240177938,216437765,09/26/2018 2:37:07 PM,3+ years,Approver,"Yes, but not sure I have time.",Europe,UTC+02:00,2-4,5,3,2,2,2,4,2,1,2,1,n/a,1,1,1,all tool are resonably useful,Way too many notifications with no benefits,"Cross-repo e2e tests (""stable"" kubernetes/kubernetes with another kubernetes/repo master, ""stable"" kubernetes/repo with kubernetes/kubernetes master, both master and so on).","Yes, it’s part of my job",Every day,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,Documentation,n/a,n/a,n/a,"Plugins & Drivers (CSI, CNI, cloud providers)",n/a,n/a,n/a,"Faster reviews! In my SIG, I can find a reviewer easily, but anything cross-SIG is really painful to me. Even as a seasoned Kubernetes contributor I need to beg for reviews and approvals.",Kubecon Europe 2017,Kubecon North America 2017,n/a,n/a,Kubecon North America 2018,Kubecon Europe 2019,n/a,Other conferences with a Kubernetes track (like DockerCon or ContainerDay),n/a,n/a,2,4,3,3,3,3,3,3,n/a,n/a,n/a,3,n/a,n/a,n/a,n/a,"Some ""developer news"" - often I find out that the way we did things in the past does not work any longer and a new process was established. These changes should be documented somewhere and announced on kubernetes-devel. Examples from 1.12: - CRD is now preferred for new API objects - coordination.k8s.io/Lease is now preferred for leader-election ",Contributor / Dev Announcement News,5,4,1,4,5,5,1,3,5,kubernetes-dev mailing list,n/a,n/a,n/a,n/a,n/a,Kubernetes blog,n/a,n/a,"yes, for both users and contributors","No, because I don't think my issues qualify",n/a,"B - No, I can’t/don’t want to",No,3,Not enough time in the week +10239891071,216437765,09/26/2018 11:25:00 AM,Just started,Org Member,"Yes, but would like mentorship.",Europe,UTC+01:00,One more,2,2,2,2,2,1,3,3,3,1,1,1,1,1,"Not clear what permissions are needed to issue commands like /assign, /labels, /milestone etc",Lots of notifications but they are useful,- Consolidation of stale/frozen issues - Better issue visualisation based on SIG areas - More automation on sig-release process overall,It’s entirely on my own time,Every day,Core code inside of kubernetes/kubernetes,n/a,n/a,n/a,n/a,Community & Project management; SIG Chair etc.,n/a,n/a,n/a,n/a,n/a,n/a,n/a,Kubecon Europe 2018,n/a,Kubecon North America 2018,n/a,n/a,n/a,n/a,N/A,1,3,3,3,3,3,3,3,n/a,1,2,n/a,4,n/a,n/a,n/a,"Code tour of the Kubernetes repo, but very detailed / deep dive. A tree of directories with text around them, a series of videos.",Deep Dives and Code Base Tour Videos/Content,5,5,2,4,4,1,1,2,4,kubernetes-dev mailing list,n/a,n/a,Slack,n/a,n/a,n/a,n/a,n/a,"yes, for both users and contributors",Not as much as I should because I forget,n/a,"B - No, I can’t/don’t want to",Yes,3,Don't know enough to mentor +10239602078,216437765,09/26/2018 6:31:38 AM,Just started,"I’m not an org member yet, but working on it","Yes, but would like mentorship.",North America,UTC-07:00,One more,1,1,1,1,1,1,1,1,1,n/a,n/a,n/a,n/a,1,N/A,Lots of notifications but they are useful,N/A,"Yes, it’s part of my job",Don’t know yet,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,"Don’t contribute yet, hoping to start soon",n/a,n/a,n/a,n/a,n/a,n/a,Kubecon North America 2018,n/a,n/a,n/a,n/a,N/A,0,3,3,3,3,3,3,3,N/A,1,2,n/a,n/a,n/a,n/a,n/a,N/A,,1,1,1,1,1,1,1,1,1,kubernetes-dev mailing list,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,no value for anyone,"No, because I didn't know they were there",n/a,"B - No, I can’t/don’t want to",No,1,Don't know enough to mentor +10239376480,216437765,09/26/2018 3:55:33 AM,1-2 years,Subproject Owner,"No, I'm already an owner",Asia,UTC+08:00,One more,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10239217297,216437765,09/26/2018 2:20:46 AM,2-3 years,"I’m not an org member yet, but working on it","Yes, doing it on my own.",North America,UTC-08:00,One more,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10239165899,216437765,09/26/2018 2:02:08 AM,3+ years,Subproject Owner,"No, I'm already an owner",North America,UTC-08:00,"None, Kubernetes is my first one!",1,1,1,1,1,1,1,1,1,1,n/a,n/a,n/a,1,n/a,"Right notifications are being made, but too frequently",management of github notifications,"Yes, it’s part of my job",Every day,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,Documentation,Testing & Infrastructure,Advocacy and events,Community & Project management; SIG Chair etc.,"Plugins & Drivers (CSI, CNI, cloud providers)","Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,n/a,n/a,n/a,n/a,Kubecon Europe 2018,n/a,n/a,n/a,n/a,n/a,n/a,n/a,2,2,2,3,5,4,5,1,n/a,n/a,2,3,n/a,n/a,n/a,n/a,n/a,,4,5,1,4,4,1,2,2,4,kubernetes-dev mailing list,n/a,n/a,n/a,Twitter,n/a,n/a,n/a,n/a,"yes, for both users and contributors",Not as much as I should because I forget,n/a,"B - No, I can’t/don’t want to",No,1,Not enough time in the week +10239107208,216437765,09/26/2018 1:37:53 AM,1-2 years,Subproject Owner,"No, I'm already an owner",North America,UTC-07:00,One more,2,1,3,2,1,3,1,1,1,1,1,n/a,n/a,1,"Maybe /approve, /lint is least useful, but they are all useful in their own ways.",Way too many notifications with no benefits,None comes to my mind,"Yes, it’s part of my job",A few times a week,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,Documentation,Testing & Infrastructure,n/a,Community & Project management; SIG Chair etc.,n/a,"Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,n/a,"Github notifications can be improved. For example, right now github sends almost 1 email per test failure for PRs. An email for test failure of PR that I review is not important for me, but when there is comment or a new commit, I want to be notified. There is no good way of distinguishing these notifications. Github diff tool is not good. It does not show diffs compared to the previously reviewed code either. I think improvements to Github could possibly be one of the most useful areas of improvement.",n/a,Kubecon North America 2017,Kubecon Europe 2018,n/a,Kubecon North America 2018,n/a,n/a,n/a,n/a,N/A,1,3,2,2,4,3,3,3,N/A,n/a,2,n/a,4,n/a,n/a,n/a,-,,4,5,2,3,5,1,1,3,4,n/a,n/a,n/a,Slack,n/a,n/a,n/a,n/a,SIG mailing list,"yes, for both users and contributors",Yes,n/a,"B - No, I can’t/don’t want to",No,3,"Nothing, am already a mentor" +10239063862,216437765,09/26/2018 1:06:40 AM,Just started,"I’m not an org member yet, but working on it","Yes, but would like mentorship.",North America,UTC-07:00,One more,2,2,2,2,2,2,1,1,1,n/a,n/a,n/a,1,1,Allow cc of non-k8s members (for PRs integrating with other environments or projects),Lots of notifications but they are useful,Testing,"Yes, it’s part of my job",Don’t know yet,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,Kubecon North America 2018,n/a,n/a,n/a,n/a,N/A,0,4,4,3,4,3,3,3,N/A,1,n/a,n/a,n/a,n/a,n/a,n/a,N/A,,1,1,1,1,1,1,1,1,1,kubernetes-dev mailing list,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,no value for anyone,"No, because I didn't know they were there",n/a,"B - No, I can’t/don’t want to",No,1,Don't know enough to mentor +10239007975,216437765,09/26/2018 12:40:37 AM,2-3 years,Subproject Owner,"No, I'm already an owner",North America,UTC-08:00,4+,4,4,3,2,3,4,3,4,3,n/a,1,n/a,n/a,n/a,In general all of the custom k8s bot stuff is confusing and frustrating. I’ve noticed my contributions have gone down because I just don’t understand it or trust it. Just seems really over engineered.,Lots of notifications but they are useful,Creating new repositories,"Yes, it’s part of my job",Every day,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,n/a,n/a,Advocacy and events,n/a,"Plugins & Drivers (CSI, CNI, cloud providers)","Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,n/a,Lose the monorepo,Kubecon Europe 2017,Kubecon North America 2017,Kubecon Europe 2018,n/a,Kubecon North America 2018,Kubecon Europe 2019,"Ecosystem events, eg. Helm Summit",Other conferences with a Kubernetes track (like DockerCon or ContainerDay),n/a,Less presentations more productivity - nobody wants another lecture from elite Googlers,4,2,2,1,4,4,4,1,Nope it’s really good,n/a,n/a,n/a,n/a,n/a,n/a,7,All the technical things that are wrong with k8s,,5,5,1,5,4,5,1,1,4,kubernetes-dev mailing list,n/a,n/a,Slack,Twitter,n/a,n/a,n/a,n/a,"yes, for both users and contributors",Not as much as I should because I forget,n/a,"B - No, I can’t/don’t want to",Yes,3,Not enough time in the week +10238882946,216437765,09/25/2018 11:54:10 PM,Less than 6 months,Org Member,"Yes, doing it on my own.",North America,UTC-07:00,One more,1,1,1,1,1,3,2,1,1,1,1,1,1,1,I find the toolset absolutely amazing!! I wish other projects can borrow these tools and bots :-),Lots of notifications but they are useful,Some sort of reminder to reviewers/approvers beyond say 72 hrs if they have not had a chance to look/leave comments/LGTM/Approve,"No, but I’m able to use “free” time at work",Several times a month,Core code inside of kubernetes/kubernetes,n/a,n/a,n/a,n/a,n/a,"Plugins & Drivers (CSI, CNI, cloud providers)",n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,Kubecon North America 2018,n/a,n/a,Other conferences with a Kubernetes track (like DockerCon or ContainerDay),n/a,Nothing right now,n/a,3,3,3,3,3,3,3,n/a,n/a,n/a,3,4,n/a,n/a,n/a,Nothing that I can think of,,5,3,1,2,4,1,1,1,2,kubernetes-dev mailing list,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,"yes, for both users and contributors","No, because I don't think my issues qualify",n/a,"B - No, I can’t/don’t want to",No,3,Don't know enough to mentor +10238632679,216437765,09/25/2018 10:10:18 PM,1-2 years,Org Member,"Yes, but would like mentorship.",North America,UTC-05:00,2-4,2,2,1,3,2,3,3,1,1,n/a,n/a,1,1,1,fejta-bot looks a bit too chatty,Right notifications at the right frequency,n/a,"No, but I’m able to use “free” time at work",Every day,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,n/a,n/a,n/a,n/a,"Plugins & Drivers (CSI, CNI, cloud providers)",n/a,n/a,n/a,maybe not easier but definitely more interesting lihe sig-apimachinery,n/a,Kubecon North America 2017,Kubecon Europe 2018,n/a,Kubecon North America 2018,Kubecon Europe 2019,n/a,n/a,n/a,maybe better sig representation?,3,1,2,2,1,1,2,2,n/a,1,n/a,3,4,n/a,n/a,n/a,n/a,,2,1,2,1,1,2,2,2,2,kubernetes-dev mailing list,Dedicated discuss.k8s.io forum for contributors,n/a,Slack,n/a,n/a,n/a,n/a,n/a,"yes, for both users and contributors",Yes,n/a,"B - No, I can’t/don’t want to",No,3,Don't know enough to mentor +10238560621,216437765,09/25/2018 9:41:43 PM,6 months -1 year,"I’m not an org member yet, but working on it","Yes, but would like mentorship.",Europe,UTC+02:00,2-4,3,4,3,5,2,3,5,4,4,1,1,1,1,1,Na,Lots of notifications but they are useful,Na,It’s entirely on my own time,A few times a week,n/a,n/a,n/a,Testing & Infrastructure,n/a,n/a,n/a,"Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,n/a,Well explained issues if is lookong for first contribution.,n/a,n/a,n/a,n/a,n/a,Kubecon Europe 2019,"Ecosystem events, eg. Helm Summit",Other conferences with a Kubernetes track (like DockerCon or ContainerDay),n/a,I would like to attend if have in some key cities like berlin. Ad hoc not only in kubercon. I can help to organize,0,4,4,4,4,4,4,4,Na,1,2,3,4,n/a,n/a,7,Na,,2,3,2,3,3,1,3,4,2,n/a,n/a,Contributor Experience mailing list,Slack,n/a,A dedicated contributor site,n/a,k/community repo in GH (Issues and/or PRs),n/a,"yes, for both users and contributors","No, because I don't think my issues qualify",n/a,"B - No, I can’t/don’t want to",No,3,Don't know enough to mentor +10238483974,216437765,09/25/2018 9:14:16 PM,2-3 years,Org Member,"No, I'm already an owner",North America,UTC-07:00,One more,3,1,2,2,1,4,3,1,1,n/a,n/a,1,1,1,retest bot might be spammy,Lots of notifications but they are useful,hunt down issue owners :-),"Yes, it’s part of my job",Every day,n/a,Code inside of another repo in the kubernetes/* GitHub organization,Documentation,Testing & Infrastructure,n/a,Community & Project management; SIG Chair etc.,n/a,n/a,n/a,n/a,n/a,n/a,n/a,Kubecon Europe 2018,Kubecon China 2018,Kubecon North America 2018,n/a,n/a,n/a,n/a,some sort of open discussions?,1,3,3,3,3,3,3,3,n/a,n/a,2,3,n/a,n/a,n/a,n/a,n/a,,3,5,1,3,5,3,1,2,2,kubernetes-dev mailing list,n/a,n/a,Slack,n/a,n/a,n/a,n/a,n/a,"yes, for both users and contributors",Yes,n/a,"B - No, I can’t/don’t want to",Yes,4,Not enough time in the week +10238478706,216437765,09/25/2018 9:27:19 PM,6 months -1 year,Reviewer,"Yes, but would like mentorship.",North America,UTC+08:00,One more,4,4,3,2,2,3,4,4,3,n/a,n/a,1,1,1,"fejta-bot. The few issues I've seen have been a thread of it marking an issue as stale, someone removing that designation, then it marking the issue as stale again (and sometimes repeat). It'd be great if the Netlify previews would link to the pages that had been changed instead of just linking to the homepage.",Way too many notifications with no benefits,See 9,"Yes, it’s part of my job",A few times a week,n/a,n/a,Documentation,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,Kubecon North America 2018,n/a,n/a,n/a,n/a,N/A,1,3,3,3,4,4,3,2,"Some demos drag on a little too much, but at the same time, there are others I think are too short. Maybe a stronger vetting process?",n/a,n/a,3,n/a,5,n/a,7,More doc contributions from CNCF members. It's not on the list.,Help get doc contributors from CNCF,5,5,1,3,4,2,2,3,5,kubernetes-dev mailing list,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,"yes, just users","No, because I don't think my issues qualify",n/a,"B - No, I can’t/don’t want to",No,3,Don't know enough to mentor +10238468406,216437765,09/25/2018 8:59:31 PM,Just started,"I’m not an org member yet, but working on it","Yes, but would like mentorship.",Asia,UTC-04:00,"None, Kubernetes is my first one!",n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10237728459,216437765,09/25/2018 4:26:18 PM,Just started,"I’m not an org member yet, but working on it","Yes, but would like mentorship.",Europe,UTC+02:00,"None, Kubernetes is my first one!",n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10237255415,216437765,09/25/2018 12:20:10 PM,Less than 6 months,Org Member,Not really,Europe,UTC+01:00,4+,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10237216533,216437765,09/25/2018 12:07:13 PM,Less than 6 months,"I’m not an org member yet, but working on it","Yes, but would like mentorship.",North America,UTC-05:00,"None, Kubernetes is my first one!",5,5,3,3,3,5,5,3,1,1,n/a,1,1,1,The /retest command could be better. Incorporating additional signals that can be used to inform contributors when something is likely flaky or not could improve the DX. This is especially relevant to folks who are new to the ecosystem like myself and haven't figured out how to navigate our way yet.,Way too many notifications with no benefits,Not sure; too new to the community.,"Yes, it’s part of my job",Don’t know yet,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,Documentation,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,Kubecon North America 2018,n/a,n/a,n/a,n/a,N/A,0,3,3,3,3,3,3,3,N/A,1,n/a,n/a,4,n/a,n/a,7,N/A,,1,1,1,3,3,1,1,1,3,n/a,n/a,n/a,n/a,n/a,A dedicated contributor site,n/a,n/a,n/a,"yes, for both users and contributors","No, because I didn't know they were there",n/a,"B - No, I can’t/don’t want to",No,1,Don't know enough to mentor +10236778977,216437765,09/25/2018 5:26:19 AM,6 months -1 year,Org Member,"Yes, doing it on my own.",North America,UTC-05:00,One more,1,1,2,2,3,4,1,4,1,n/a,1,1,1,1,It would be great in k/website if you could regen netlify test with /retest or similar,Way too many notifications with no benefits,Not sure,"Yes, it’s part of my job",Several times a month,n/a,Code inside of another repo in the kubernetes/* GitHub organization,Documentation,n/a,n/a,n/a,n/a,n/a,n/a,n/a,Easier instructions for building the latest k/k master for testing.,n/a,n/a,n/a,n/a,n/a,n/a,n/a,Other conferences with a Kubernetes track (like DockerCon or ContainerDay),n/a,N/a,0,3,3,2,5,4,4,3,I think it's great! Maybe a tips and tricks section for better contributing / involvement / using k8s,1,n/a,3,n/a,5,n/a,n/a,"Make onboarding and helping out easier, training, videos etc",Better contributor documentation,2,5,3,4,4,2,1,3,2,n/a,n/a,n/a,Slack,Twitter,n/a,n/a,n/a,n/a,"yes, for both users and contributors","No, because I don't think my issues qualify",n/a,"B - No, I can’t/don’t want to",No,4,Don't know enough to mentor +10236642556,216437765,09/25/2018 3:29:34 AM,Just started,Had no idea this was even a thing,"Yes, but not sure I have time.",North America,UTC-07:00,"None, Kubernetes is my first one!",n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10236528658,216437765,09/25/2018 2:24:53 AM,6 months -1 year,Reviewer,Not really,North America,UTC-07:00,2-4,5,4,3,1,2,3,3,2,1,n/a,n/a,1,1,1,Stale issues,Lots of notifications but they are useful,Cherry-picking a fix into multiple target branches Figuring out how to add Netlify to /retest,"Yes, it’s part of my job",A few times a week,n/a,n/a,Documentation,n/a,Advocacy and events,Community & Project management; SIG Chair etc.,n/a,n/a,n/a,Other,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,Other conferences with a Kubernetes track (like DockerCon or ContainerDay),n/a,N/A,0,2,2,2,5,4,4,5,Maybe a SIG of the week,1,n/a,3,4,n/a,n/a,7,I can't think of anything.,,5,5,1,3,4,1,1,2,3,n/a,n/a,n/a,Slack,n/a,n/a,n/a,n/a,n/a,"yes, just contributors",Yes,n/a,"B - No, I can’t/don’t want to",Yes,3,Not enough time in the week +10236308069,216437765,09/25/2018 12:20:21 AM,Just started,"I’m not an org member yet, but working on it","Yes, but would like mentorship.",Europe,UTC±00:00,One more,5,3,1,1,1,4,4,3,1,1,1,1,1,1,I don't like the noise that people create by posting comments that only contain bot commands. I wish I could turn notifications for these comments off,"Right notifications are being made, but too frequently",I don't know yet,It’s entirely on my own time,Several times a month,Core code inside of kubernetes/kubernetes,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,None,N/A,0,5,5,4,5,4,3,4,N/A,1,n/a,n/a,n/a,n/a,n/a,n/a,Need better guides for contributors who just start their dive into the project,Better contributor documentation,5,4,1,2,4,1,2,2,2,kubernetes-dev mailing list,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,"yes, for both users and contributors","No, because I don't think my issues qualify",n/a,"B - No, I can’t/don’t want to",Yes,3,Don't know enough to mentor +10236209837,216437765,09/24/2018 11:24:06 PM,Less than 6 months,"I’m not an org member yet, but working on it","Yes, but not sure I have time.",North America,UTC-07:00,2-4,2,4,2,2,2,2,2,2,2,1,1,1,1,1,n/a,Right notifications at the right frequency,not enough context for an opinion,"Yes, it’s part of my job",A few times a year,n/a,n/a,n/a,n/a,n/a,n/a,n/a,"Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,n/a,n/a,n/a,n/a,n/a,n/a,Kubecon North America 2018,n/a,n/a,n/a,n/a,n/a,0,3,3,3,4,4,4,4,zoom does not work on my computer. Is there an alternative?,n/a,n/a,n/a,4,n/a,n/a,n/a,not sure yet,,3,3,2,3,3,1,4,4,3,kubernetes-dev mailing list,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,"yes, for both users and contributors","No, because I didn't know they were there",n/a,"B - No, I can’t/don’t want to",No,3,Don't know enough to mentor +10236079987,216437765,09/24/2018 10:25:30 PM,1-2 years,Org Member,"Yes, doing it on my own.",North America,UTC-07:00,"None, Kubernetes is my first one!",3,3,2,2,2,3,2,2,2,1,n/a,1,1,n/a,N/A,"Right notifications are being made, but too frequently",N/A,"Yes, it’s part of my job",Several times a month,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,Documentation,Testing & Infrastructure,n/a,n/a,n/a,n/a,n/a,n/a,N/A,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,None,N/A,0,4,4,5,4,4,5,4,N/A,1,2,n/a,n/a,5,n/a,n/a,n/a,,2,2,1,2,5,3,1,1,5,kubernetes-dev mailing list,n/a,Contributor Experience mailing list,n/a,n/a,n/a,Kubernetes blog,n/a,n/a,"yes, for both users and contributors","No, because I didn't know they were there",n/a,"B - No, I can’t/don’t want to",No,3,Employer doesn't support spending time mentoring +10235937400,216437765,09/24/2018 9:47:42 PM,1-2 years,Org Member,"Yes, but not sure I have time.",North America,UTC-08:00,One more,3,3,4,1,3,3,3,4,3,n/a,n/a,1,1,1,Sometimes the stale issue robot is a bit annoying.,Way too many notifications with no benefits,N/A,"Yes, it’s part of my job",Several times a month,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,n/a,Testing & Infrastructure,n/a,n/a,"Plugins & Drivers (CSI, CNI, cloud providers)",n/a,n/a,n/a,Make notifications better. Fixing https://github.com/kubernetes/test-infra/issues/1723 should help,n/a,Kubecon North America 2017,Kubecon Europe 2018,n/a,n/a,n/a,n/a,n/a,n/a,"Instead of having just one track, like we had in EU 2018, have a lot of tracks, like we had in NA 2017.",2,3,3,3,3,3,3,3,I don't attend it.,n/a,2,n/a,n/a,n/a,n/a,n/a,N/A,,5,2,1,2,4,3,2,2,4,kubernetes-dev mailing list,n/a,n/a,n/a,Twitter,n/a,Kubernetes blog,n/a,n/a,"yes, for both users and contributors","No, because I don't think my issues qualify",n/a,"B - No, I can’t/don’t want to",No,1,Not enough time in the week +10235874254,216437765,09/24/2018 9:04:03 PM,1-2 years,Had no idea this was even a thing,"Yes, doing it on my own.",North America,UTC-08:00,One more,5,3,3,3,3,1,2,4,3,1,n/a,n/a,n/a,n/a,/lint maybe? I've never used it.,Way too many notifications with no benefits,Feels like more could be done to make sure we have the right owners (ensure files are kept up-to-date w/r/t to who is actually most involved in code and review) throughout the tree,"Yes, it’s part of my job",A few times a week,Core code inside of kubernetes/kubernetes,n/a,n/a,Testing & Infrastructure,n/a,Community & Project management; SIG Chair etc.,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,Kubecon China 2018,Kubecon North America 2018,n/a,n/a,n/a,n/a,n/a,0,4,2,2,3,4,4,3,More discussion of sig arch leads on project direction and key issues,1,2,n/a,n/a,n/a,n/a,7,don't know,,2,2,1,3,5,2,1,1,4,kubernetes-dev mailing list,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,"yes, for both users and contributors",Yes,n/a,"B - No, I can’t/don’t want to",No,3,Not enough time in the week +10235813487,216437765,09/24/2018 8:38:52 PM,6 months -1 year,"I’m not an org member yet, but working on it","Yes, but would like mentorship.",North America,UTC-07:00,4+,1,1,1,2,2,4,4,2,2,1,n/a,1,n/a,1,Stale issue labeler,Way too many notifications with no benefits,"More help in identifying issues for various groups (docs, core, etc.)","No, but I’m able to use “free” time at work",A few times a week,n/a,n/a,Documentation,Testing & Infrastructure,Advocacy and events,Community & Project management; SIG Chair etc.,n/a,"Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,n/a,"Easier path to becoming a member of the community to vote, shape structure, etc. Right now it's too exclusive.",n/a,n/a,n/a,n/a,Kubecon North America 2018,n/a,n/a,n/a,n/a,More time with core members,0,5,4,4,5,3,2,1,Make it a bit longer with better segmentation between topics,1,n/a,3,4,5,6,n/a,"Team check-in to see how everyone is doing in a psychological sense (are you stressed, was this a productive week, etc.) Having this data might help to identify burnout and what causes the community stress.",Burnout education,2,5,3,2,5,5,5,2,2,n/a,n/a,n/a,Slack,Twitter,A dedicated contributor site,Kubernetes blog,n/a,n/a,"yes, for both users and contributors",Yes,n/a,"A - Yes, I would love to mentor one or both programs",Yes,5,Wasn't connected with mentoring opportunities (reach out to us to get engaged!) +10235772397,216437765,09/24/2018 8:20:24 PM,3+ years,Subproject Owner,"No, I'm already an owner",North America,UTC-07:00,2-4,4,4,2,2,2,5,1,2,2,1,1,1,1,1,"Automatically notifying test owners that their tests are breaking, kicking out their tests if they don't fix them",Way too many notifications with no benefits,Better filtering of notifications,"Yes, it’s part of my job",Every day,n/a,Code inside of another repo in the kubernetes/* GitHub organization,Documentation,Testing & Infrastructure,Advocacy and events,Community & Project management; SIG Chair etc.,n/a,n/a,n/a,n/a,A better notification dashboard,n/a,Kubecon North America 2017,Kubecon Europe 2018,Kubecon China 2018,Kubecon North America 2018,n/a,"Ecosystem events, eg. Helm Summit",n/a,n/a,I'm happy with where it's at,3,3,4,3,4,5,4,5,Updates on releases other than the release currently under development: what is the schedule for patch releases?,1,2,3,n/a,5,6,7,Can't think of anything right now,,4,5,1,4,5,1,1,2,3,kubernetes-dev mailing list,n/a,Contributor Experience mailing list,Slack,n/a,n/a,n/a,k/community repo in GH (Issues and/or PRs),n/a,"yes, for both users and contributors",Not as much as I should because I forget,n/a,"B - No, I can’t/don’t want to",Yes,4,Not enough time in the week +10235761961,216437765,09/24/2018 8:12:31 PM,1-2 years,Had no idea this was even a thing,"Yes, but not sure I have time.",North America,UTC-08:00,4+,2,3,4,2,2,3,2,5,1,1,1,1,n/a,n/a,ci-robot,Lots of notifications but they are useful,Not sure.,"Yes, it’s part of my job",Every day,n/a,n/a,n/a,n/a,n/a,n/a,"Plugins & Drivers (CSI, CNI, cloud providers)","Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,n/a,n/a,n/a,n/a,Kubecon Europe 2018,n/a,n/a,Kubecon Europe 2019,n/a,n/a,n/a,N/A,1,4,3,2,4,3,3,2,Not sure.,n/a,n/a,3,n/a,5,n/a,n/a,Not sure.,,4,1,1,2,4,3,2,1,4,kubernetes-dev mailing list,n/a,n/a,n/a,n/a,n/a,n/a,k/community repo in GH (Issues and/or PRs),n/a,no value for anyone,"No, because I didn't know they were there",n/a,"B - No, I can’t/don’t want to",No,3,Not enough time in the week +10235755196,216437765,09/24/2018 8:04:47 PM,6 months -1 year,Org Member,"Yes, but not sure I have time.",North America,UTC-08:00,One more,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10235714842,216437765,09/24/2018 7:56:56 PM,6 months -1 year,"I’m not an org member yet, but working on it","Yes, but would like mentorship.",North America,UTC-07:00,2-4,1,1,1,1,1,2,2,2,1,1,1,1,1,1,issue/PR command,Right notifications at the right frequency,list all issues/pr that relates to me,"Yes, it’s part of my job",A few times a year,Core code inside of kubernetes/kubernetes,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,Kubecon China 2018,Kubecon North America 2018,n/a,n/a,n/a,n/a,N/A,0,3,3,3,3,3,3,3,N/A,1,2,3,n/a,n/a,n/a,n/a,N/A,,5,1,1,5,5,1,1,5,1,kubernetes-dev mailing list,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,"yes, for both users and contributors",Not as much as I should because I forget,n/a,"B - No, I can’t/don’t want to",No,3,Don't know enough to mentor +10235691040,216437765,09/24/2018 7:43:41 PM,2-3 years,Subproject Owner,"Yes, doing it on my own.",North America,UTC-07:00,4+,3,3,5,4,2,3,2,1,3,1,1,n/a,n/a,1,PR Commands,Way too many notifications with no benefits,Notifications/Communication,"Yes, it’s part of my job",A few times a week,n/a,Code inside of another repo in the kubernetes/* GitHub organization,Documentation,n/a,Advocacy and events,n/a,n/a,"Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,n/a,n/a,n/a,Kubecon North America 2017,Kubecon Europe 2018,n/a,Kubecon North America 2018,n/a,n/a,n/a,n/a,More breakout sessions,1,1,3,3,2,3,1,1,N/A,1,2,3,n/a,5,n/a,7,N/A,,5,5,5,4,5,4,1,2,5,kubernetes-dev mailing list,n/a,n/a,Slack,Twitter,n/a,n/a,k/community repo in GH (Issues and/or PRs),n/a,"yes, just users",Not as much as I should because I forget,n/a,"B - No, I can’t/don’t want to",Yes,4,Not enough time in the week +10235587169,216437765,09/24/2018 7:04:12 PM,Less than 6 months,"I’m not an org member yet, but working on it","Yes, doing it on my own.",North America,UTC-05:00,2-4,1,1,1,1,2,2,1,1,1,1,n/a,n/a,1,1,Haven't needed the stale issues bot.,Right notifications at the right frequency,Automated PR assignment,"Yes, it’s part of my job",Don’t know yet,Core code inside of kubernetes/kubernetes,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,No,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,None,N/A,0,5,3,3,4,3,4,4,N/A,n/a,2,n/a,n/a,n/a,n/a,7,N/A,,1,1,1,3,5,1,5,4,2,n/a,n/a,n/a,n/a,n/a,n/a,Kubernetes blog,k/community repo in GH (Issues and/or PRs),n/a,"yes, just contributors","No, because I didn't know they were there",n/a,"B - No, I can’t/don’t want to",No,3,Don't know enough to mentor +10235454962,216437765,09/24/2018 6:05:38 PM,Less than 6 months,Org Member,"Yes, doing it on my own.",Europe,UTC+02:00,"None, Kubernetes is my first one!",n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10235434280,216437765,09/24/2018 6:13:43 PM,6 months -1 year,"I’m not an org member yet, but working on it",Not really,North America,UTC-07:00,4+,3,5,1,5,2,2,1,1,1,1,n/a,n/a,1,1,"/kind and /assign are presented as mandatory to a new contributor while they have no way of understanding how to make good use of it. I wish the process had a sense of how green a contributor is, and would fallback to a more guided experience for newcomers.",Way too many notifications with no benefits,"code quality metrics: coverage, complexity, security, ...","Yes, it’s part of my job",Several times a month,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,n/a,Testing & Infrastructure,n/a,n/a,n/a,n/a,n/a,n/a,responding to communication attempts like design discussions and proposals on github.,n/a,n/a,Kubecon Europe 2018,n/a,n/a,n/a,n/a,Other conferences with a Kubernetes track (like DockerCon or ContainerDay),n/a,N/A,1,4,2,1,4,3,4,1,no,1,n/a,3,n/a,5,n/a,7,N/A,,5,2,1,1,4,1,2,1,4,kubernetes-dev mailing list,n/a,n/a,n/a,n/a,n/a,Kubernetes blog,n/a,n/a,no value for anyone,"No, because I didn't know they were there",n/a,"B - No, I can’t/don’t want to",No,1,Don't know enough to mentor +10235423189,216437765,09/24/2018 6:09:18 PM,6 months -1 year,"I’m not an org member yet, but working on it","Yes, but not sure I have time.",Europe,UTC+02:00,4+,4,4,1,1,1,2,5,1,1,1,n/a,1,1,1,Retesting for flakes is great,Way too many notifications with no benefits,detecting which PR broke build and revert,"Yes, it’s part of my job",A few times a week,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,n/a,Testing & Infrastructure,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,Kubecon Europe 2018,n/a,Kubecon North America 2018,Kubecon Europe 2019,n/a,n/a,n/a,"More organized networking, e.g. Open Space like picking topics to discuss and selecting by majority and discussing in groups etc",1,1,1,1,2,2,1,1,Been once,1,2,3,n/a,n/a,n/a,n/a,Don't know,,1,5,3,1,2,1,1,4,2,n/a,n/a,n/a,n/a,Twitter,n/a,n/a,n/a,n/a,"yes, just users",Not as much as I should because I forget,n/a,"A - Yes, I would love to mentor one or both programs",No,3,Not enough time in the week +10234448880,216437765,09/24/2018 4:43:28 AM,3+ years,Had no idea this was even a thing,"Yes, but not sure I have time.",North America,UTC-08:00,4+,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10234376003,216437765,09/24/2018 3:10:32 AM,Just started,Had no idea this was even a thing,Not really,South America,UTC+14:00,2-4,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10234309100,216437765,09/24/2018 1:46:04 AM,Just started,"I’m not an org member yet, but working on it","Yes, doing it on my own.",North America,UTC-07:00,2-4,3,1,1,2,1,5,4,5,2,1,1,1,1,1,They are all super useful.,Right notifications at the right frequency,Not sure,It’s entirely on my own time,A few times a year,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,Documentation,n/a,n/a,n/a,n/a,n/a,n/a,n/a,"For my first contribution, I could not for the life of me find instructions on how to run tests on the source code. Running the `make` file was failing. I found no documentation to get me unstuck. After much looking I found the `testing.md` file. Ran the commands and got failures, and again not finding any documentation that would help me move on. I'm aware that we have the Slack channel. I propose, however, that running make files and tests on the fresh source code should be a slam dunk (with proper documentation).",n/a,n/a,n/a,n/a,Kubecon North America 2018,n/a,n/a,n/a,n/a,Have material for newcomers. But I haven't attended on yet so this might be true already.,0,,4,4,4,4,4,3,No,1,n/a,n/a,4,n/a,n/a,n/a,Not sure.,,2,5,4,4,4,5,3,4,3,n/a,n/a,n/a,Slack,Twitter,A dedicated contributor site,n/a,n/a,n/a,"yes, for both users and contributors",Yes,n/a,"B - No, I can’t/don’t want to",No,4,Not enough time in the week +10232672428,216437765,09/22/2018 5:41:11 AM,Just started,"I’m not an org member yet, but working on it","Yes, but not sure I have time.",Europe,UTC+02:00,4+,1,1,1,1,1,1,1,1,1,1,1,1,1,1,"automatic merging, i think a human review is more important",Right notifications at the right frequency,deployment,"No, but I’m able to use “free” time at work",Several times a month,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,"Don’t contribute yet, hoping to start soon",n/a,i don't known,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,None,n/a,0,3,3,3,5,3,5,4,n.a,1,2,n/a,4,5,6,7,i don't know,,2,2,3,1,4,2,4,3,2,kubernetes-dev mailing list,n/a,n/a,n/a,n/a,n/a,n/a,k/community repo in GH (Issues and/or PRs),n/a,no value for anyone,Yes,n/a,"A - Yes, I would love to mentor one or both programs",No,2,Not enough time in the week +10231145970,216437765,09/21/2018 2:48:58 PM,Less than 6 months,"I’m not an org member yet, but working on it","Yes, but not sure I have time.",Europe,UTC+01:00,One more,1,1,1,1,2,3,1,3,1,1,n/a,n/a,n/a,1,I have not had chance yet to explore all the tools.,Lots of notifications but they are useful,I was fine with the level of automation.,"Yes, it’s part of my job",Haven’t contributed in a while,Core code inside of kubernetes/kubernetes,n/a,Documentation,n/a,Advocacy and events,n/a,n/a,"Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,n/a,Not really.,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,None,N/A,0,5,4,5,5,5,5,5,No,1,2,n/a,n/a,n/a,n/a,n/a,Nothing,,2,5,1,2,5,5,3,3,3,n/a,n/a,n/a,n/a,Twitter,n/a,n/a,n/a,n/a,"yes, for both users and contributors","No, because I didn't know they were there",n/a,"B - No, I can’t/don’t want to",No,3,Don't know enough to mentor +10230167769,216437765,09/21/2018 1:38:45 AM,Just started,Had no idea this was even a thing,"Yes, doing it on my own.",North America,UTC-06:00,2-4,1,2,2,2,2,3,2,1,1,1,n/a,n/a,n/a,1,N\A,Lots of notifications but they are useful,not enough experience to answer this question,"No, but I’m able to use “free” time at work",Several times a month,n/a,n/a,n/a,n/a,Advocacy and events,n/a,n/a,n/a,n/a,n/a,n/a,n/a,Kubecon North America 2017,n/a,n/a,Kubecon North America 2018,n/a,n/a,n/a,n/a,N/A,0,4,4,1,4,4,5,3,thank you for the notes and recordings: they're really useful.,n/a,n/a,3,4,5,n/a,n/a,not sure.,,5,4,1,4,2,2,1,3,3,kubernetes-dev mailing list,n/a,n/a,n/a,n/a,n/a,Kubernetes blog,n/a,n/a,"yes, for both users and contributors","No, because I don't think my issues qualify",n/a,"B - No, I can’t/don’t want to",No,3,Don't know enough to mentor +10229628055,216437765,09/20/2018 8:43:23 PM,Just started,"I’m not an org member yet, but working on it","Yes, but would like mentorship.",Asia,UTC+05:30,2-4,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10229617568,216437765,09/20/2018 8:59:11 PM,2-3 years,Reviewer,"Yes, doing it on my own.",North America,UTC-07:00,2-4,2,3,1,3,2,4,2,5,1,1,n/a,1,1,1,I wish there was some way we could auto-assign issues/PRs to SIGs,Way too many notifications with no benefits,See above.,"Yes, it’s part of my job",Every day,n/a,n/a,n/a,Testing & Infrastructure,Advocacy and events,Community & Project management; SIG Chair etc.,n/a,"Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,n/a,"Better build/test env instructions, tools, for my own build env.",Kubecon Europe 2017,Kubecon North America 2017,Kubecon Europe 2018,Kubecon China 2018,Kubecon North America 2018,Kubecon Europe 2019,"Ecosystem events, eg. Helm Summit",Other conferences with a Kubernetes track (like DockerCon or ContainerDay),n/a,no,4,2,5,3,5,5,4,5,We might consider changing the time; current 10am time is very hard for some timezones.,1,n/a,n/a,4,n/a,n/a,7,NA,,3,5,5,5,5,4,2,2,4,n/a,Dedicated discuss.k8s.io forum for contributors,n/a,n/a,n/a,n/a,n/a,k/community repo in GH (Issues and/or PRs),n/a,"yes, just contributors",Not as much as I should because I forget,n/a,"A - Yes, I would love to mentor one or both programs",Yes,4,Not enough time in the week +10229456886,216437765,09/20/2018 7:39:15 PM,2-3 years,Org Member,"Yes, but not sure I have time.",North America,UTC-08:00,4+,4,2,3,2,4,4,2,3,3,n/a,n/a,1,1,n/a,NA,Lots of notifications but they are useful,Not sure,It’s entirely on my own time,Haven’t contributed in a while,n/a,n/a,Documentation,n/a,Advocacy and events,n/a,n/a,"Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,n/a,Add extra hours to the day,n/a,Kubecon North America 2017,n/a,n/a,n/a,n/a,n/a,n/a,n/a,More people able to attend,2,4,2,1,5,4,4,3,NA,1,n/a,3,n/a,n/a,n/a,7,Better onboarding for new users to become contributors.,Better contributor documentation,5,4,4,2,2,5,3,2,2,kubernetes-dev mailing list,n/a,n/a,n/a,Twitter,n/a,n/a,n/a,n/a,"yes, just users",Not as much as I should because I forget,n/a,"B - No, I can’t/don’t want to",No,1,Employer doesn't support spending time mentoring +10228000437,216437765,09/20/2018 4:31:04 AM,2-3 years,"I’m not an org member yet, but working on it","Yes, doing it on my own.",North America,UTC-05:00,2-4,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10227941733,216437765,09/20/2018 3:59:48 AM,Just started,"I’m not an org member yet, but working on it","Yes, but would like mentorship.",Asia,UTC+08:00,"None, Kubernetes is my first one!",n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10227903504,216437765,09/20/2018 8:14:19 PM,3+ years,Subproject Owner,"No, I'm already an owner",North America,UTC-07:00,One more,5,3,3,1,2,3,1,2,1,1,n/a,n/a,1,1,Automatic labeling of stale issues - I undo the bot's changes more often than not.,Way too many notifications with no benefits,"Concept of ""PR attention set"". I often find that PRs with 2+ approvers assigned are less likely to get approved, than when there is a single approver. My theory is that people opt to wait for the other person to take a first pass, or want to give them an opportunity to give an opinion before giving a final approval. If instead there were multiple people assigned, but only 1 person was ""up to bat"" at a time, it might help move PRs forward. Likewise, once I've approved something, I don't necessarily want to follow up on every review comment after.","Yes, it’s part of my job",Every day,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,Documentation,n/a,n/a,Community & Project management; SIG Chair etc.,"Plugins & Drivers (CSI, CNI, cloud providers)","Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,Other,"PR reviews are currently my biggest pain point, both as a code contributor (receiving reviews) and a reviewer. One of the challenges is growing our reviewer pool while still maintaining a high quality bar. To that end, I think we could do a much better job with staged reviews. For example, more junior members do a first pass review before handing off to senior members for final review & approval. I believe this was the intention with the reviewer & approver split, but in my experience this hasn't panned out, and needs more automation to work (see above suggestion about assigning a single reviewer). Another way to do staged reviews is have reviewers who focus on different aspects, such as: go readability & language idioms, comment language (we have many non-native english speakers), testing, etc. However, I don't want to need 7 different reviewers to sign off on my 10 line PR, so this approach would need more careful consideration.",n/a,Kubecon North America 2017,Kubecon Europe 2018,Kubecon China 2018,Kubecon North America 2018,n/a,n/a,n/a,n/a,"Focus more on community & contributor issues. The kubecon EU 2018 summit had a lot of technical content, which while great is what the main conference is for. I would prefer to spend more time discussing the problems & challenges our community faces. This probably means heavy involvement by the steering committee & sig-contribex",2,3,3,3,3,3,3,3,"I never attend the community meeting unless I'm presenting, so please disregard my answers to the previous question. Why do I never attend? I simply have too many meetings, and need to draw the line somewhere. The community meeting is less likely to be directly relevant to me, compared with sig & working group meetings.",n/a,2,n/a,4,5,n/a,7,"Not to be a broken record, but more emphasis on improving the review bottleneck.",Reviewer and Approver Growth,5,4,1,4,5,5,2,1,4,kubernetes-dev mailing list,n/a,n/a,n/a,n/a,n/a,n/a,k/community repo in GH (Issues and/or PRs),Word of mouth,"yes, for both users and contributors",Not as much as I should because I forget,n/a,"B - No, I can’t/don’t want to",No,3,Not enough time in the week +10227754132,216437765,09/20/2018 2:10:48 AM,6 months -1 year,Approver,"Yes, doing it on my own.",North America,UTC-07:00,"None, Kubernetes is my first one!",3,2,3,2,3,4,2,5,2,1,1,1,1,1,"Stale issues feel least useful, because I often wish there were a better way of being notified an issue I created was stale.",Way too many notifications with no benefits,"Org membership in all k8s orgs, including k8s-sigs",It’s complicated,Every day,n/a,Code inside of another repo in the kubernetes/* GitHub organization,Documentation,n/a,Advocacy and events,Community & Project management; SIG Chair etc.,n/a,"Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,Other,I'm very outgoing and outspoken and it has been easy for me to find at least someone willing to show me the path. I often wonder if that has been the experience for others.,n/a,Kubecon North America 2017,Kubecon Europe 2018,n/a,Kubecon North America 2018,Kubecon Europe 2019,n/a,Other conferences with a Kubernetes track (like DockerCon or ContainerDay),n/a,"I am no sure about me, but I'm hoping to be able to roll out a ""speed dating"" event between potential contributors and SIGs to help people connect with opportunities.",1,3,4,2,4,4,4,5,"I wish the demos were less ""product show-and-tell"" and more ""general tutorials/walkthroughs""! For example, a testgrid walk through, a ""how to set up your dev env"" walkthrough, a minikube tutorial walkthrough, etc. Not every week but some weeks?",1,2,3,n/a,5,n/a,7,Detangling aspects of Kubernetes from the monorepo and greater repo cross-reference,,2,5,1,4,5,2,1,2,4,n/a,n/a,n/a,Slack,n/a,n/a,n/a,n/a,n/a,"yes, for both users and contributors",Yes,n/a,"B - No, I can’t/don’t want to",Yes,4,Other (please specify): +10227655092,216437765,09/20/2018 12:53:42 AM,Just started,"I’m not an org member yet, but working on it","Yes, but would like mentorship.",Europe,UTC+02:00,One more,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10227633920,216437765,09/20/2018 12:42:18 AM,6 months -1 year,"I’m not an org member yet, but working on it","Yes, doing it on my own.",Europe,UTC+02:00,2-4,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10227498388,216437765,09/20/2018 12:23:37 AM,1-2 years,Org Member,"Yes, doing it on my own.",Europe,UTC+01:00,One more,1,2,1,1,1,4,3,1,3,n/a,n/a,1,1,1,Fejta-bot for flakes can flood you when having /approve /lgtm,Right notifications at the right frequency,Nothing i can think of,"No, but I’m able to use “free” time at work",Every day,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,n/a,n/a,n/a,n/a,"Plugins & Drivers (CSI, CNI, cloud providers)",n/a,n/a,n/a,n/a,n/a,n/a,Kubecon Europe 2018,n/a,n/a,n/a,n/a,n/a,n/a,More cross-SIG discussions and brainstorming,1,3,3,5,5,5,5,4,One of the best communities I’ve seen in the OSS landscape,1,n/a,n/a,4,5,n/a,n/a,Nothing,,3,5,2,5,5,4,1,5,5,n/a,n/a,n/a,Slack,n/a,n/a,n/a,k/community repo in GH (Issues and/or PRs),n/a,"yes, for both users and contributors","No, because I don't think my issues qualify",n/a,"B - No, I can’t/don’t want to",Yes,5,Not enough time in the week +10227329768,216437765,09/19/2018 10:29:58 PM,2-3 years,"I’m not an org member yet, but working on it","Yes, but would like mentorship.",Europe,UTC+02:00,2-4,3,2,2,2,4,3,4,2,3,n/a,n/a,n/a,1,n/a,Fejta-bot,Not enough notifications and I frequently miss important things (e.g when my review/approval is needed),N/a,"Yes, it’s part of my job",Several times a month,n/a,n/a,Documentation,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,Kubecon Europe 2018,n/a,n/a,Kubecon Europe 2019,n/a,n/a,n/a,N/A,0,4,3,3,4,4,4,3,"Too many groups, picking the right groups could be difficult sometime",1,2,n/a,n/a,n/a,n/a,7,N/A,,2,5,4,2,3,2,2,3,2,n/a,n/a,n/a,Slack,n/a,n/a,Kubernetes blog,n/a,n/a,"yes, for both users and contributors",Not as much as I should because I forget,n/a,"B - No, I can’t/don’t want to",No,3,Don't know enough to mentor +10227062641,216437765,09/19/2018 9:00:11 PM,Less than 6 months,Approver,"Yes, but not sure I have time.",Europe,UTC+01:00,One more,2,1,1,1,2,2,3,2,1,1,1,n/a,n/a,1,"/assign and /kind are mostly abused, /approve could be integrated with GitHub reviews.",Right notifications at the right frequency,Infra (I'm talking specifically for Kubernetes/ingress-nginx),"No, but I’m able to use “free” time at work",Several times a month,n/a,Code inside of another repo in the kubernetes/* GitHub organization,Documentation,n/a,Advocacy and events,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,Kubecon Europe 2019,n/a,Other conferences with a Kubernetes track (like DockerCon or ContainerDay),n/a,n/a (haven't attended yet),0,4,5,3,3,5,4,3,"Nothing that comes to my mind, need to attend more.",1,n/a,3,4,n/a,n/a,7,n/a,,1,5,1,3,4,5,3,2,1,kubernetes-dev mailing list,n/a,n/a,n/a,Twitter,n/a,Kubernetes blog,n/a,n/a,"yes, for both users and contributors",Not as much as I should because I forget,n/a,"B - No, I can’t/don’t want to",Yes,3,Employer doesn't support spending time mentoring +10227015112,216437765,09/19/2018 8:08:51 PM,6 months -1 year,"I’m not an org member yet, but working on it","Yes, but not sure I have time.",Europe,UTC+01:00,2-4,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10226936255,216437765,09/19/2018 7:50:29 PM,2-3 years,Reviewer,"Yes, doing it on my own.",North America,UTC-07:00,"None, Kubernetes is my first one!",1,3,3,1,4,1,1,1,1,1,1,1,1,1,I wish reviewers were not assigned until after tests pass.,Way too many notifications with no benefits,Is it possible to get email notifications for specific test failures?,"Yes, it’s part of my job",Every day,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,Documentation,Testing & Infrastructure,n/a,n/a,n/a,"Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,Other conferences with a Kubernetes track (like DockerCon or ContainerDay),n/a,N/A,0,3,3,3,3,3,3,3,N/A,n/a,n/a,n/a,n/a,n/a,6,n/a,Nothing,,2,5,1,3,5,5,1,2,5,kubernetes-dev mailing list,n/a,n/a,Slack,n/a,n/a,n/a,n/a,n/a,"yes, for both users and contributors","No, because I don't think my issues qualify",n/a,"B - No, I can’t/don’t want to",No,2,Not enough time in the week +10226800235,216437765,09/19/2018 6:59:36 PM,1-2 years,Had no idea this was even a thing,Not really,North America,UTC-08:00,2-4,3,3,1,2,2,3,3,3,2,1,n/a,n/a,n/a,1,All are pretty useful,Right notifications at the right frequency,None I know of,"No, but I’m able to use “free” time at work",Haven’t contributed in a while,Core code inside of kubernetes/kubernetes,n/a,n/a,n/a,n/a,n/a,"Plugins & Drivers (CSI, CNI, cloud providers)",n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,None,N/A,0,4,4,2,5,5,3,1,Haven't attended enough to give good feedback,n/a,n/a,n/a,4,5,n/a,n/a,n/a,,1,4,1,1,3,1,2,2,1,n/a,n/a,n/a,Slack,n/a,n/a,n/a,n/a,n/a,"yes, for both users and contributors","No, because I don't think my issues qualify",n/a,"B - No, I can’t/don’t want to",No,3,Don't know enough to mentor +10226795801,216437765,09/19/2018 6:51:29 PM,1-2 years,Org Member,"Yes, but not sure I have time.",Europe,UTC+01:00,4+,3,2,1,1,1,1,4,1,1,n/a,n/a,n/a,1,1,automated issue closing,Way too many notifications with no benefits,listing related issues,"No, but I’m able to use “free” time at work",A few times a year,Core code inside of kubernetes/kubernetes,n/a,n/a,n/a,n/a,n/a,n/a,"Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,n/a,n/a,Kubecon Europe 2017,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,not sure,1,1,3,1,3,3,2,1,n/a,1,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,3,5,2,3,5,1,2,2,5,kubernetes-dev mailing list,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,"yes, for both users and contributors","No, because I don't think my issues qualify",n/a,"B - No, I can’t/don’t want to",No,1,Not enough time in the week +10224032912,216437765,09/18/2018 6:48:35 PM,Just started,"I’m not an org member yet, but working on it","Yes, doing it on my own.",North America,UTC-08:00,4+,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10223696648,216437765,09/18/2018 4:44:00 PM,Less than 6 months,Org Member,"Yes, but would like mentorship.",Asia,UTC+05:30,2-4,2,4,3,4,3,3,5,1,1,1,1,1,1,1,N/A,"Right notifications are being made, but too frequently",Issue labeling could benefit from additional automation.,It’s entirely on my own time,Every day,Core code inside of kubernetes/kubernetes,n/a,Documentation,n/a,n/a,Community & Project management; SIG Chair etc.,n/a,n/a,n/a,n/a,"I'd really like some mentorship to get started. K8s is a beast and it's very easy to get lost. I've been looking for stuff to work on for a while now, but it gets very confusing very quickly!",n/a,n/a,Kubecon Europe 2018,Kubecon China 2018,Kubecon North America 2018,n/a,n/a,n/a,n/a,"I attended the beginner track last time, this time I'm planning to attend the more experienced track as I've been familiar with it for a while! I'll make sure to reach out post that :)",1,2,4,3,4,3,3,4,N/A,1,n/a,3,4,n/a,n/a,7,I'd really like to see some focus on the developer guide. It feels like it's all over the place atm.,Better contributor documentation/developer guide,2,5,3,3,5,3,1,3,3,n/a,Dedicated discuss.k8s.io forum for contributors,n/a,Slack,Twitter,A dedicated contributor site,n/a,n/a,n/a,"yes, for both users and contributors",Other (please specify):,I've not filed too many issues to be able to answer this correctly,"A - Yes, I would love to mentor one or both programs",No,3,Don't know enough to mentor +10223602767,216437765,09/18/2018 3:50:36 PM,Less than 6 months,Org Member,"Yes, but would like mentorship.",Asia,UTC+05:30,2-4,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10222598172,216437765,09/18/2018 1:57:57 AM,Just started,"I’m not an org member yet, but working on it","Yes, but not sure I have time.",North America,UTC-06:00,"None, Kubernetes is my first one!",n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10222294684,216437765,09/17/2018 11:12:38 PM,3+ years,Approver,"No, I'm already an owner",North America,UTC-08:00,4+,2,4,4,1,1,5,2,4,2,1,1,1,1,1,n/a,Way too many notifications with no benefits,n/a,"Yes, it’s part of my job",A few times a week,n/a,Code inside of another repo in the kubernetes/* GitHub organization,Documentation,n/a,Advocacy and events,Community & Project management; SIG Chair etc.,n/a,"Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,n/a,n/a,Kubecon Europe 2017,Kubecon North America 2017,n/a,n/a,Kubecon North America 2018,n/a,n/a,Other conferences with a Kubernetes track (like DockerCon or ContainerDay),n/a,n/a,1,3,3,3,3,3,3,3,n/a,n/a,2,n/a,n/a,n/a,n/a,n/a,n/a,,5,2,1,3,5,2,1,1,5,kubernetes-dev mailing list,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,"yes, for both users and contributors","No, because I don't think my issues qualify",n/a,"A - Yes, I would love to mentor one or both programs",Yes,4,Not enough time in the week +10222070141,216437765,09/17/2018 9:27:34 PM,Just started,"I’m not an org member yet, but working on it","Yes, but not sure I have time.",North America,UTC-04:00,"None, Kubernetes is my first one!",n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10222067162,216437765,09/17/2018 9:35:53 PM,2-3 years,"I’m not an org member yet, but working on it","Yes, but not sure I have time.",North America,UTC-08:00,2-4,1,3,3,2,2,2,2,2,2,1,n/a,1,1,1,The automatic stale is a but tough to deal with sometimes. As it feels like issues are being railroaded out of sight.,Lots of notifications but they are useful,Not Sure.,"Yes, it’s part of my job",Several times a month,n/a,n/a,Documentation,n/a,Advocacy and events,Community & Project management; SIG Chair etc.,n/a,"Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,Other,n/a,n/a,Kubecon North America 2017,n/a,n/a,Kubecon North America 2018,n/a,"Ecosystem events, eg. Helm Summit",Other conferences with a Kubernetes track (like DockerCon or ContainerDay),n/a,N/A,0,5,5,3,3,3,4,5,It's actually pretty great.,1,n/a,3,4,n/a,n/a,7,N/A,,2,5,2,4,4,1,3,2,3,n/a,n/a,n/a,Slack,Twitter,n/a,Kubernetes blog,n/a,n/a,"yes, for both users and contributors",Yes,n/a,"B - No, I can’t/don’t want to",Yes,4,"Nothing, am already a mentor" +10222048043,216437765,09/17/2018 9:25:18 PM,6 months -1 year,Reviewer,Not really,North America,UTC-04:00,"None, Kubernetes is my first one!",2,3,4,2,3,4,1,2,2,1,n/a,1,n/a,1,"I've never seen the flakes retested automatically, I just wish they would be",Way too many notifications with no benefits,"Flake reporting is very manual, so I almost never do it.","Yes, it’s part of my job",Every day,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,Documentation,n/a,n/a,n/a,n/a,"Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,n/a,n/a,n/a,n/a,n/a,n/a,Kubecon North America 2018,n/a,n/a,n/a,n/a,n/a,0,4,3,2,2,1,2,2,"I don't usually attend, if I'm honest.",1,n/a,n/a,n/a,n/a,n/a,7,Managing the firehose of notifications,Notification control (communication pipelines),3,5,1,3,4,1,1,1,3,n/a,n/a,n/a,Slack,n/a,n/a,n/a,n/a,n/a,"yes, for both users and contributors",Yes,n/a,"B - No, I can’t/don’t want to",No,2,Not enough time in the week +10222047195,216437765,09/17/2018 9:37:34 PM,Just started,Had no idea this was even a thing,"Yes, but would like mentorship.",North America,UTC+13:00,"None, Kubernetes is my first one!",5,5,5,5,5,5,5,5,5,n/a,n/a,n/a,n/a,1,-,Lots of notifications but they are useful,-,It’s complicated,Don’t know yet,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,"Don’t contribute yet, hoping to start soon",n/a,"I am someone who has never contributed but would like to. Overall, I think something like Google's Summer of Code except on a part time level for full time employees where people can get support and some hand holding through processes / targeting issues would be immensely useful. Its one thing to say ""documentation is useful"" and that's great. But even after understanding the processes of merging a PR there's a HUGE leap to contribute to actual Kuberenetes code. There's historical context on why things are implemented the way they are. Then gaining enough context on which issues to target is difficult. And even further then tackling the actual code. This needs a lot of initial investment on individual contributors.",n/a,Kubecon North America 2017,n/a,n/a,Kubecon North America 2018,n/a,n/a,n/a,n/a,I would love contributor workshops for people who haven't contributed to kubernetes yet. Not sure if this is under the realm of contributor summit or not.,0,n/a,5,n/a,n/a,n/a,n/a,n/a,-,1,n/a,n/a,4,n/a,n/a,7,"I don't think this is missing per se. But I'd love to be paired with someone in the open source community that has sort of a project manager role. I have the competency to jump into a code base. What I lack is the context on what in the community is prioritized, what issues aren't time sensitive for new contributors, what issues I can take my time on, and someone to ask technical questions.",Issue Triage,1,4,1,3,5,3,1,1,5,n/a,n/a,n/a,n/a,Twitter,n/a,n/a,k/community repo in GH (Issues and/or PRs),n/a,"yes, for both users and contributors",Other (please specify):,I don't file issues,"B - No, I can’t/don’t want to",No,3,Other (please specify): +10221989907,216437765,09/17/2018 8:53:16 PM,6 months -1 year,Had no idea this was even a thing,"Yes, but would like mentorship.",North America,UTC-06:00,One more,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10221978535,216437765,09/17/2018 8:48:12 PM,Just started,Had no idea this was even a thing,"Yes, but not sure I have time.",North America,UTC-05:00,One more,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10221960887,216437765,09/17/2018 8:40:25 PM,Just started,"I’m not an org member yet, but working on it","Yes, but would like mentorship.",North America,UTC-05:00,"None, Kubernetes is my first one!",n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10221836566,216437765,09/17/2018 8:22:05 PM,1-2 years,Reviewer,"Yes, doing it on my own.",North America,UTC-04:00,4+,2,2,1,2,2,3,5,2,1,n/a,1,1,1,1,i think the retest is the least useful because I've never actually seen it work and I've had to manually re-run flakes...but knowing there is something that *should* rerun flakes makes me think I could do this better.,Lots of notifications but they are useful,"Github emails, maybe some kind of gmail filter creator that asks you what you want to hear about and then generates a filter for you? Too many emails from github though.","Yes, it’s part of my job",Every day,Core code inside of kubernetes/kubernetes,n/a,Documentation,Testing & Infrastructure,n/a,Community & Project management; SIG Chair etc.,n/a,"Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,n/a,"Being able to find good first issues to help new folks with on boarding is by far, in my opinion, the biggest problem with contributing to kubernetes today.",n/a,Kubecon North America 2017,n/a,n/a,Kubecon North America 2018,n/a,n/a,Other conferences with a Kubernetes track (like DockerCon or ContainerDay),n/a,N/A,0,2,3,3,2,1,3,1,It's nice when I get time to attend it,1,n/a,n/a,n/a,n/a,n/a,7,"Ways to identify new issues. There was talk of a `good-first-issue` label, but that hasn't taken off yet. In order to get more people into the community we need to make it much easier for folks to find areas of interest that need improving. Maybe each sig could have a standard way of identifying good first issues. Maybe I'm looking for a sig trello board. I'm not sure, but joining a sig takes a long time to get up to speed. I usually have to attend several weeks of meetings before I can really figure out what's going on/what area of focus a sig has, etc.",Issue Triage,2,5,1,5,5,2,2,2,4,n/a,n/a,n/a,Slack,n/a,n/a,Kubernetes blog,n/a,n/a,"yes, for both users and contributors",Not as much as I should because I forget,n/a,"B - No, I can’t/don’t want to",No,3,Employer doesn't support spending time mentoring +10221816526,216437765,09/17/2018 7:44:51 PM,Less than 6 months,Had no idea this was even a thing,"Yes, but would like mentorship.",North America,UTC-07:00,"None, Kubernetes is my first one!",2,3,3,3,1,3,4,4,1,1,1,1,1,1,N/A,Not enough notifications and I frequently miss important things (e.g when my review/approval is needed),N/A,"Yes, it’s part of my job",Every day,n/a,n/a,Documentation,n/a,n/a,n/a,"Plugins & Drivers (CSI, CNI, cloud providers)",n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,None,N/A,n/a,3,2,1,3,3,3,3,n/a,1,2,n/a,n/a,n/a,n/a,n/a,N/A,,3,5,1,5,5,1,1,4,4,kubernetes-dev mailing list,n/a,n/a,Slack,n/a,n/a,Kubernetes blog,n/a,n/a,no value for anyone,Yes,n/a,"B - No, I can’t/don’t want to",No,3,Don't know enough to mentor +10221801147,216437765,09/17/2018 8:27:52 PM,2-3 years,Subproject Owner,"No, I'm already an owner",North America,UTC-05:00,4+,3,3,5,3,3,5,3,3,2,1,1,1,1,1,N/A,Way too many notifications with no benefits,unsure,"Yes, it’s part of my job",A few times a week,n/a,Code inside of another repo in the kubernetes/* GitHub organization,Documentation,Testing & Infrastructure,n/a,n/a,n/a,"Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,n/a,Improve the ability to triage test failures and be able to easily reproduce locally.,n/a,Kubecon North America 2017,n/a,n/a,Kubecon North America 2018,n/a,n/a,n/a,n/a,N/A,0,3,4,4,5,5,5,3,"No, I think that it does a good job of balancing information sharing and being respectful of people's time.",n/a,2,3,4,5,n/a,7,Improving the ability to identify the cause of test failures and the ability to reproduce test failures locally.,,4,5,1,4,4,2,1,3,5,kubernetes-dev mailing list,n/a,n/a,Slack,n/a,n/a,n/a,n/a,n/a,"yes, for both users and contributors","No, because I don't think my issues qualify",n/a,"B - No, I can’t/don’t want to",No,3,Not enough time in the week +10221794836,216437765,09/17/2018 7:38:40 PM,3+ years,Approver,"No, I'm already an owner",North America,UTC-05:00,4+,4,2,3,1,2,4,2,1,4,n/a,n/a,n/a,n/a,1,The automation is byzantine and UX is not simple.,Way too many notifications with no benefits,Reassign reviewers/approvers on a timeout of a couple of weeks and no feedback.,"Yes, it’s part of my job",Every day,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,Documentation,Testing & Infrastructure,Advocacy and events,Community & Project management; SIG Chair etc.,"Plugins & Drivers (CSI, CNI, cloud providers)","Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,Other,Flowchart on the process for new contributors.,n/a,Kubecon North America 2017,Kubecon Europe 2018,n/a,Kubecon North America 2018,n/a,n/a,n/a,n/a,"1/2 updates, 1/2 free form sig discussions.",All of them,5,4,1,4,3,4,4,Please don't monopolize folks time talking about byzantine automation changes unless there is a UX change that would affect their day 2 day lives.,1,n/a,n/a,4,n/a,n/a,n/a,N/A,,3,4,3,4,5,2,1,2,3,kubernetes-dev mailing list,Dedicated discuss.k8s.io forum for contributors,n/a,n/a,n/a,n/a,n/a,n/a,n/a,"yes, for both users and contributors",Yes,n/a,"B - No, I can’t/don’t want to",No,2,Not enough time in the week +10221534874,216437765,09/24/2018 5:42:59 PM,1-2 years,Org Member,"Yes, doing it on my own.",North America,UTC+03:00,2-4,1,1,1,1,2,2,1,1,1,1,1,1,1,1,They'all are useful.,Lots of notifications but they are useful,n/a,"Yes, it’s part of my job",A few times a week,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,Documentation,n/a,Advocacy and events,Community & Project management; SIG Chair etc.,n/a,n/a,n/a,n/a,n/a,Kubecon Europe 2017,Kubecon North America 2017,Kubecon Europe 2018,Kubecon China 2018,Kubecon North America 2018,n/a,n/a,n/a,n/a,n/a,1,1,2,2,1,2,2,2,n/a,n/a,n/a,n/a,4,n/a,n/a,n/a,n/a,,1,2,2,2,1,3,3,2,2,kubernetes-dev mailing list,n/a,Contributor Experience mailing list,n/a,Twitter,n/a,n/a,n/a,n/a,"yes, for both users and contributors",Not as much as I should because I forget,n/a,"B - No, I can’t/don’t want to",Yes,4,Not enough time in the week +10221178738,216437765,09/17/2018 3:21:02 PM,2-3 years,Approver,"Yes, but would like mentorship.",Asia,UTC+08:00,"None, Kubernetes is my first one!",3,2,1,1,2,2,2,1,1,1,1,1,1,1,"automatic labeling of stale issues. Just close issues, not really help solving problems.",Way too many notifications with no benefits,NA,"Yes, it’s part of my job",Several times a month,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,n/a,n/a,Advocacy and events,n/a,n/a,n/a,n/a,n/a,n/a,Kubecon Europe 2017,n/a,Kubecon Europe 2018,Kubecon China 2018,Kubecon North America 2018,Kubecon Europe 2019,n/a,Other conferences with a Kubernetes track (like DockerCon or ContainerDay),n/a,Make the planning part more visible.,1,3,n/a,n/a,3,3,n/a,n/a,Have more Asia time-zone friendly meeting.,1,n/a,3,4,5,n/a,n/a,na,,4,3,2,2,4,2,1,4,4,kubernetes-dev mailing list,n/a,n/a,Slack,n/a,n/a,n/a,k/community repo in GH (Issues and/or PRs),n/a,"yes, just contributors","No, because I don't think my issues qualify",n/a,"A - Yes, I would love to mentor one or both programs",No,2,Wasn't connected with mentoring opportunities (reach out to us to get engaged!) +10221032938,216437765,09/17/2018 1:09:01 PM,3+ years,Subproject Owner,"Yes, doing it on my own.",Europe,UTC+02:00,2-4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-,Lots of notifications but they are useful,"The problem itself is on the gh side, dealing with their notifications is cumbersome at the level k8s currently is. I have multiple filters in my inbox, but still the volume of emails is significantly large. ","Yes, it’s part of my job",Every day,Core code inside of kubernetes/kubernetes,n/a,Documentation,Testing & Infrastructure,Advocacy and events,Community & Project management; SIG Chair etc.,n/a,n/a,n/a,n/a,n/a,Kubecon Europe 2017,n/a,Kubecon Europe 2018,n/a,n/a,n/a,n/a,n/a,n/a,-,1,5,5,5,5,5,5,5,-,1,n/a,3,n/a,5,n/a,7,-,,5,5,1,4,5,2,2,3,3,kubernetes-dev mailing list,n/a,n/a,Slack,n/a,n/a,n/a,n/a,n/a,"yes, for both users and contributors",Not as much as I should because I forget,n/a,"B - No, I can’t/don’t want to",No,3,Not enough time in the week +10216867455,216437765,09/14/2018 9:31:24 AM,6 months -1 year,Reviewer,"Yes, but would like mentorship.",Asia,UTC+05:30,One more,1,1,1,1,1,3,2,3,1,1,1,1,1,1,n/a,Lots of notifications but they are useful,n/a,It’s entirely on my own time,A few times a week,n/a,n/a,Documentation,n/a,n/a,Community & Project management; SIG Chair etc.,n/a,"Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,n/a,None.,n/a,n/a,n/a,n/a,Kubecon North America 2018,Kubecon Europe 2019,n/a,n/a,n/a,N/A,n/a,5,5,4,5,5,5,4,none,1,n/a,3,4,n/a,n/a,n/a,not that i can think of.,,3,5,2,3,2,2,2,3,4,n/a,n/a,n/a,Slack,n/a,n/a,n/a,n/a,n/a,"yes, for both users and contributors","No, because I don't think my issues qualify",n/a,"A - Yes, I would love to mentor one or both programs",No,4,Wasn't connected with mentoring opportunities (reach out to us to get engaged!) +10216171567,216437765,09/14/2018 12:09:37 AM,1-2 years,Org Member,"Yes, but not sure I have time.",North America,UTC-07:00,One more,2,3,2,2,1,2,2,2,2,1,1,n/a,n/a,1,I've found /approve to not be that useful since GitHub's improved review features duplicate that.,Lots of notifications but they are useful,n/a,"Yes, it’s part of my job",A few times a week,n/a,n/a,Documentation,n/a,Advocacy and events,Community & Project management; SIG Chair etc.,n/a,"Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,n/a,"Perhaps greater discoverability for sub-projects, e.g. those in kubernetes-sigs/ repo",Kubecon Europe 2017,n/a,n/a,n/a,Kubecon North America 2018,n/a,"Ecosystem events, eg. Helm Summit",Other conferences with a Kubernetes track (like DockerCon or ContainerDay),n/a,The unconference style SIG sessions (deep-dive) were much later in the evening at the last KubeCon in Copenhagen. We find these sessions particularly useful for SIG Apps due to the large amount of things it covers. It would be good to have these at a more accessible time.,2,5,4,3,4,4,5,4,n/a,1,2,3,n/a,5,n/a,7,n/a,,4,5,2,4,5,5,3,4,4,kubernetes-dev mailing list,n/a,n/a,Slack,Twitter,n/a,n/a,n/a,n/a,"yes, for both users and contributors",Not as much as I should because I forget,n/a,"A - Yes, I would love to mentor one or both programs",No,3,Just not getting around to it +10215312899,216437765,09/13/2018 5:44:35 PM,3+ years,Subproject Owner,"No, I'm already an owner",North America,UTC-05:00,2-4,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10214900593,216437765,09/13/2018 3:05:12 PM,1-2 years,"I’m not an org member yet, but working on it","Yes, but would like mentorship.",North America,UTC-05:00,"None, Kubernetes is my first one!",4,3,1,5,3,4,5,5,2,n/a,n/a,1,1,n/a,N/A,Right notifications at the right frequency,Unsure right now,"Yes, it’s part of my job",Several times a month,n/a,n/a,Documentation,n/a,Advocacy and events,n/a,n/a,"Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,n/a,More guided mentorship,n/a,Kubecon North America 2017,n/a,n/a,Kubecon North America 2018,n/a,"Ecosystem events, eg. Helm Summit",Other conferences with a Kubernetes track (like DockerCon or ContainerDay),n/a,N/A,0,5,3,3,4,5,5,4,none,1,n/a,3,4,n/a,n/a,n/a,none,,4,5,5,4,5,3,4,4,4,n/a,n/a,n/a,Slack,n/a,n/a,Kubernetes blog,n/a,n/a,"yes, for both users and contributors",Yes,n/a,"B - No, I can’t/don’t want to",Yes,5,Don't know enough to mentor +10214567885,216437765,09/13/2018 11:40:39 AM,Less than 6 months,Had no idea this was even a thing,"Yes, but not sure I have time.",Europe,UTC+01:00,4+,2,3,1,3,1,4,4,4,1,1,1,1,1,1,Don't know,Right notifications at the right frequency,Don't know,It’s complicated,A few times a year,Core code inside of kubernetes/kubernetes,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,Don't know,n/a,n/a,Kubecon Europe 2018,n/a,n/a,Kubecon Europe 2019,n/a,n/a,n/a,N/A,0,3,3,3,3,3,3,3,No,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10213539213,216437765,09/12/2018 11:17:55 PM,2-3 years,Org Member,Not really,North America,UTC+08:00,4+,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10213442456,216437765,09/12/2018 11:09:23 PM,1-2 years,Approver,"Yes, but would like mentorship.",Europe,UTC+02:00,"None, Kubernetes is my first one!",3,1,2,2,1,4,2,2,2,1,1,1,1,1,Sometimes the amount of GitHub notification is overhelming. It will be great to have an enhanced gubernetor PR/issue dashboard to keep things under control with less effort,Lots of notifications but they are useful,"Integration test, build and packaging, hacks/validation","No, but I’m able to use “free” time at work",A few times a week,Core code inside of kubernetes/kubernetes,n/a,Documentation,Testing & Infrastructure,n/a,n/a,n/a,"Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,n/a,Help me find a work where I can works OSS full time,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,Contributor summit is really valuable and deserve more space into the kubeconf Circus. Helps/Facilitation should be provided to contributors not backed by companies,1,4,4,5,5,4,5,5,You are doing a great work!,1,2,3,n/a,n/a,6,7,"Cncf ambassador program, I have no news about it Job boards, marching contributors careers and companies needs",,2,5,1,3,5,1,1,4,4,kubernetes-dev mailing list,n/a,n/a,Slack,n/a,n/a,Kubernetes blog,n/a,Sig meetings,"yes, for both users and contributors",Yes,n/a,"A - Yes, I would love to mentor one or both programs",No,3,Employer doesn't support spending time mentoring +10212981609,216437765,09/12/2018 7:31:19 PM,6 months -1 year,Org Member,"Yes, doing it on my own.",North America,UTC-07:00,One more,2,1,3,4,4,2,2,3,2,n/a,n/a,1,1,1,N/A,"Right notifications are being made, but too frequently",N/A,"No, but I’m able to use “free” time at work",Several times a month,n/a,Code inside of another repo in the kubernetes/* GitHub organization,n/a,n/a,n/a,n/a,n/a,"Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,n/a,n/a,n/a,n/a,n/a,n/a,Kubecon North America 2018,n/a,n/a,n/a,n/a,N/A,0,3,3,2,5,5,5,3,N/A,1,2,n/a,4,5,n/a,n/a,N/A,,4,5,1,3,4,1,2,2,3,kubernetes-dev mailing list,n/a,Contributor Experience mailing list,Slack,n/a,n/a,n/a,n/a,n/a,"yes, for both users and contributors",Not as much as I should because I forget,n/a,"B - No, I can’t/don’t want to",No,3,Not enough time in the week +10212885572,216437765,09/12/2018 7:24:05 PM,Just started,Had no idea this was even a thing,Not really,Asia,UTC+05:30,2-4,1,1,2,2,2,3,2,2,1,1,1,1,1,1,No one at the moment,Right notifications at the right frequency,Test failure guidance maybe,It’s entirely on my own time,A few times a week,Core code inside of kubernetes/kubernetes,n/a,n/a,Testing & Infrastructure,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,Other conferences with a Kubernetes track (like DockerCon or ContainerDay),n/a,More hands-on workshops,,1,1,1,1,1,1,1,Nope,1,n/a,3,4,5,n/a,n/a,Nothing I can think of,,3,5,2,1,4,1,3,4,1,kubernetes-dev mailing list,n/a,n/a,Slack,Twitter,A dedicated contributor site,Kubernetes blog,n/a,n/a,"yes, for both users and contributors",Yes,n/a,"B - No, I can’t/don’t want to",No,2,Don't know enough to mentor +10212715497,216437765,09/12/2018 6:02:27 PM,1-2 years,Subproject Owner,"No, I'm already an owner",North America,UTC-06:00,4+,4,4,1,3,3,2,4,2,2,1,n/a,n/a,1,1,"I need help sometimes as a maintainer identifying pull requests that have stalled out and need intervention or more attention. Maybe normalizing that things need help by adding a /bump command and making it super clear for new contributors, and in our bots first reply (the approve bot comment that you see immediately after a PR is submitted) saying ""Hey if this gets stuck or you are confused, just reply /bump"" so that people don't worry over how to find a nice way to get help?",Not enough notifications and I frequently miss important things (e.g when my review/approval is needed),"More comments on 10. I need help watching for: * New PRs and issues (without watching the entire repo and every . single . comment) * Separating out replies to an issue that I commented on once, or was mentioned on once, vs notifications for when someone is actually mentioning my name _right now_. Basically GH's email notifications are a fire hose and the noise is much higher than the signal. So I'm losing a lot of important things because my email filtering foo isn't strong enough.","Yes, it’s part of my job",Every day,n/a,Code inside of another repo in the kubernetes/* GitHub organization,n/a,n/a,Advocacy and events,Community & Project management; SIG Chair etc.,n/a,"Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,n/a,"I'd really appreciate help getting email notifications for relevant events without getting emailed for every single comment. GH is letting me down, octobox doesn't quite help either, I use the PR dashboard but that requires me to check, and it still pops things up for my attention that don't really need any action on my part.",n/a,Kubecon North America 2017,Kubecon Europe 2018,n/a,Kubecon North America 2018,Kubecon Europe 2019,"Ecosystem events, eg. Helm Summit",n/a,n/a,I wanted more interaction with the SIGs. At KubeCon EU '18 it was in a presenter format which wasn't at all what I was hoping for.,1,2,4,1,5,4,4,2,N/A,1,2,n/a,4,,n/a,n/a,N/A,,2,5,2,4,5,2,1,1,4,n/a,n/a,n/a,n/a,Twitter,A dedicated contributor site,n/a,n/a,Something that is announcements only,"yes, just users",Yes,n/a,"A - Yes, I would love to mentor one or both programs",Yes,3,Not enough time in the week +10212675874,216437765,09/12/2018 5:32:07 PM,Just started,Had no idea this was even a thing,"Yes, but not sure I have time.",Europe,UTC+01:00,"None, Kubernetes is my first one!",n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10212308706,216437765,09/12/2018 9:33:55 PM,Less than 6 months,Had no idea this was even a thing,"Yes, but would like mentorship.",Europe,UTC±00:00,4+,1,2,3,3,3,2,2,2,2,n/a,n/a,1,n/a,n/a,automatic stale issues,Lots of notifications but they are useful,e2e testing,"No, but I’m able to use “free” time at work",A few times a year,n/a,n/a,Documentation,n/a,n/a,n/a,n/a,"Related projects (Kubeadm, Helm, container runtimes, etc.)","Don’t contribute yet, hoping to start soon",n/a,Nope,Kubecon Europe 2017,n/a,Kubecon Europe 2018,n/a,n/a,n/a,n/a,Other conferences with a Kubernetes track (like DockerCon or ContainerDay),n/a,It does feel sometimes that the contributor community is pretty insular at the conferences.,2,2,2,2,2,2,2,2,N/A,1,n/a,3,n/a,n/a,n/a,n/a,Overall SIG processes for new or people on the periphery,,1,3,1,1,4,1,2,3,1,n/a,n/a,n/a,Slack,Twitter,n/a,n/a,n/a,n/a,"yes, for both users and contributors","No, because I didn't know they were there",n/a,"B - No, I can’t/don’t want to",No,2,Just not getting around to it +10212242335,216437765,09/12/2018 2:21:53 PM,3+ years,Approver,"Yes, doing it on my own.",Europe,UTC+02:00,4+,1,4,4,2,1,3,1,2,2,1,1,1,1,1,/label by far. There is no autocompletion. I am lucky to have the permission to use the Github UI directly instead.,Way too many notifications with no benefits,"Escalation of approval requests. Approver often do not read all Github notifications. Often it is not clear whether the didn't see the notification, have no time, are out of office or simply don't like the PR but hesitate to comment. Especially from Europe this can be very frustrating with US approvers because pinging them directly is often in evening hours.","Yes, it’s part of my job",Every day,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,Documentation,n/a,Advocacy and events,n/a,n/a,n/a,n/a,n/a,n/a,Kubecon Europe 2017,Kubecon North America 2017,Kubecon Europe 2018,n/a,Kubecon North America 2018,Kubecon Europe 2019,"Ecosystem events, eg. Helm Summit",n/a,n/a,Unconference style instead of talks. Less steering commitee. Less Sig-Lead mini presentations. More discussion about core topics (to be collected in advance and voted for).,3,1,4,2,2,3,4,4,-,n/a,2,3,n/a,5,n/a,7,-,,2,5,1,3,5,4,2,3,4,kubernetes-dev mailing list,n/a,n/a,Slack,n/a,n/a,n/a,k/community repo in GH (Issues and/or PRs),n/a,"yes, for both users and contributors",Not as much as I should because I forget,n/a,"A - Yes, I would love to mentor one or both programs",Yes,5,"Nothing, am already a mentor" +10212214310,216437765,09/12/2018 1:53:46 PM,6 months -1 year,"I’m not an org member yet, but working on it","Yes, but not sure I have time.",Europe,UTC±00:00,4+,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10212010909,216437765,09/12/2018 11:47:01 AM,1-2 years,Org Member,"Yes, but not sure I have time.",Europe,UTC+02:00,2-4,2,1,2,2,1,2,4,3,1,1,n/a,1,1,1,Labeling stale issues is useful if people care about them... most of the time I think they don't have enough time to do so.,Lots of notifications but they are useful,Squash commits (I think it's coming...),It’s entirely on my own time,A few times a week,n/a,Code inside of another repo in the kubernetes/* GitHub organization,n/a,Testing & Infrastructure,n/a,n/a,n/a,n/a,n/a,n/a,n/a,Kubecon Europe 2017,n/a,n/a,n/a,n/a,n/a,n/a,Other conferences with a Kubernetes track (like DockerCon or ContainerDay),n/a,N/A,0,4,5,3,5,5,5,5,"I like them like that, I only wish I had more time to attend.",1,n/a,n/a,n/a,5,n/a,n/a,N/A,,2,5,1,4,4,1,1,3,3,kubernetes-dev mailing list,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,"yes, for both users and contributors",Yes,n/a,"B - No, I can’t/don’t want to",Yes,3,Don't know enough to mentor +10212003967,216437765,09/12/2018 11:49:00 AM,6 months -1 year,Org Member,"Yes, doing it on my own.",Europe,UTC+01:00,2-4,3,3,2,2,3,2,4,2,1,1,1,1,1,1,"I hate it, when my PR fails on ""stupid"" ./hack/verify-* issues ... but I don't have a solution for that ...",Way too many notifications with no benefits,-,"Yes, it’s part of my job",Every day,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,Documentation,Testing & Infrastructure,n/a,n/a,"Plugins & Drivers (CSI, CNI, cloud providers)","Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,n/a,"Make prow / test-infra / kubetest / ... easier to understand, extend, and use. Make vendoring stuff easier (how can my repo vendor in parts of k/k, then itself be vendored into k/k without being a stagung repo)",n/a,n/a,Kubecon Europe 2018,n/a,Kubecon North America 2018,n/a,n/a,Other conferences with a Kubernetes track (like DockerCon or ContainerDay),n/a,N/A,0,5,4,3,4,5,4,3,-,1,n/a,n/a,4,,6,7,One thing that is also important to me: Not only focus on US (e.g. timezone wise) but also other regions,Globalization,4,5,1,4,5,2,1,3,4,kubernetes-dev mailing list,n/a,n/a,n/a,n/a,n/a,n/a,n/a,random SIG meeting where this is brought up,"yes, for both users and contributors",Not as much as I should because I forget,n/a,"B - No, I can’t/don’t want to",No,3,Don't know enough to mentor +10211956716,216437765,09/12/2018 11:00:02 AM,Less than 6 months,"I’m not an org member yet, but working on it","Yes, doing it on my own.",Europe,UTC+02:00,One more,4,3,2,1,2,1,1,2,1,n/a,n/a,1,1,1,Automatic retesting of flakes didn't seem to trigger on my PRs,Right notifications at the right frequency,IDK,"Yes, it’s part of my job",A few times a week,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,Documentation,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,Kubecon Europe 2018,n/a,n/a,n/a,n/a,n/a,n/a,N/A,0,3,3,3,3,3,3,3,No,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10211906690,216437765,09/12/2018 10:25:40 AM,6 months -1 year,"I’m not an org member yet, but working on it","Yes, doing it on my own.",Europe,UTC+01:00,2-4,2,1,5,3,3,3,3,2,2,1,1,n/a,1,1,-,Lots of notifications but they are useful,-,"Yes, it’s part of my job",Several times a month,n/a,n/a,Documentation,Testing & Infrastructure,n/a,Community & Project management; SIG Chair etc.,n/a,"Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,n/a,less SIGs,n/a,n/a,Kubecon Europe 2018,n/a,Kubecon North America 2018,Kubecon Europe 2019,n/a,n/a,n/a,"walk through real code contributions in groups, come prepared with real issues suitable for that",1,5,4,3,3,3,2,2,-,1,2,3,4,5,n/a,n/a,-,,4,4,3,3,4,1,3,3,4,kubernetes-dev mailing list,n/a,Contributor Experience mailing list,n/a,n/a,n/a,n/a,n/a,n/a,"yes, just contributors","No, because I didn't know they were there",n/a,"B - No, I can’t/don’t want to",No,3,Not enough time in the week +10211899789,216437765,09/12/2018 10:20:12 AM,6 months -1 year,Org Member,"Yes, doing it on my own.",Asia,UTC+08:00,2-4,1,1,1,1,1,2,1,1,3,1,1,1,1,1,fejta-bot is too slow.,Way too many notifications with no benefits,The membership process.,"Yes, it’s part of my job",Every day,Core code inside of kubernetes/kubernetes,n/a,n/a,Testing & Infrastructure,n/a,n/a,"Plugins & Drivers (CSI, CNI, cloud providers)",n/a,n/a,n/a,"No, i think the contributing process is clear to me.",n/a,n/a,n/a,Kubecon China 2018,n/a,n/a,n/a,n/a,n/a,N/A,N/A,2,2,3,3,,3,2,N/A,1,2,3,n/a,n/a,n/a,7,N/A,,2,2,2,3,5,1,3,1,3,kubernetes-dev mailing list,n/a,n/a,n/a,n/a,n/a,Kubernetes blog,k/community repo in GH (Issues and/or PRs),n/a,no value for anyone,Not as much as I should because I forget,n/a,"B - No, I can’t/don’t want to",No,3,Not enough time in the week +10211823751,216437765,09/12/2018 9:31:07 AM,1-2 years,Reviewer,"Yes, doing it on my own.",Europe,UTC+01:00,4+,5,2,1,2,1,1,1,1,2,1,1,1,1,1,none,Not enough notifications and I frequently miss important things (e.g when my review/approval is needed),"if a sig is labeled on a PR, members should get notification (e.g. auto mention sig-xxx-pr-reviews) sice sigs should be autolabeled by touching the code this would lead to better transparency ","Yes, it’s part of my job",Every day,Core code inside of kubernetes/kubernetes,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,get rid of Bazel - it is unnecessary barrier causing most merge conflicts on PRs forcing rebases (loosing lgtms and waiting for someone to re-review),n/a,n/a,Kubecon Europe 2018,n/a,Kubecon North America 2018,Kubecon Europe 2019,n/a,n/a,n/a,make it 2 days :),1,1,3,1,4,4,5,4,none,n/a,2,3,n/a,n/a,n/a,7,n/a,,4,4,1,3,5,1,1,2,3,kubernetes-dev mailing list,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,"yes, for both users and contributors","No, because I don't think my issues qualify",n/a,"B - No, I can’t/don’t want to",No,2,Not enough time in the week +10211753707,216437765,09/12/2018 7:58:03 AM,Less than 6 months,"I’m not an org member yet, but working on it","Yes, doing it on my own.",North America,UTC-08:00,2-4,3,2,1,1,1,4,2,2,1,1,n/a,n/a,n/a,1,Automatic labeling of stale issues is the least useful feature.,Lots of notifications but they are useful,n/a,"Yes, it’s part of my job",A few times a week,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,Better responsiveness from reviewers of PRs Reduce test flakiness,n/a,n/a,n/a,n/a,Kubecon North America 2018,Kubecon Europe 2019,n/a,Other conferences with a Kubernetes track (like DockerCon or ContainerDay),n/a,N/A,0,3,3,3,3,3,3,3,N/A,n/a,n/a,3,4,n/a,n/a,n/a,N/A,,3,5,2,4,5,1,2,2,3,kubernetes-dev mailing list,n/a,n/a,Slack,n/a,n/a,n/a,n/a,n/a,"yes, for both users and contributors",Not as much as I should because I forget,n/a,"B - No, I can’t/don’t want to",No,3,Don't know enough to mentor +10211648722,216437765,09/12/2018 6:24:52 AM,Just started,"I’m not an org member yet, but working on it","Yes, but would like mentorship.",Asia,UTC+05:30,2-4,1,3,1,4,4,4,4,2,3,n/a,1,1,1,1,"User need to remember each command, it could have been a bit easier if UI buttons were also present ",Lots of notifications but they are useful,not aware much of such other areas.. will share later on if come across..,"Yes, it’s part of my job",Every day,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,"Don’t contribute yet, hoping to start soon",Other,I came across a form to ask for mentor which was filled in.. but still I could not find any response for same.. it could have been better if someone can give a brief details on how to start contribution. different sig... their environment setup requirement. Actually these details would have helped me to choose the right SIG for me and have helped me to head start things... Looking forward for some response for form which I filled in regarding mentor.. ,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,None,N/A,0,5,4,4,4,3,4,3,I have started looking into it a couple of weeks ago.. will share these feedback in future..,1,2,3,n/a,n/a,n/a,7,There must be some spoc person for each SIG where we can ask for just some basic question(answers may be in form of email/docs etc),,3,5,3,4,2,1,3,4,3,kubernetes-dev mailing list,n/a,Contributor Experience mailing list,Slack,n/a,A dedicated contributor site,Kubernetes blog,n/a,n/a,"yes, for both users and contributors","No, because I didn't know they were there",n/a,"B - No, I can’t/don’t want to",Yes,3,Other (please specify): +10211508705,216437765,09/12/2018 4:47:00 AM,2-3 years,Subproject Owner,"Yes, but would like mentorship.",Asia,UTC+08:00,2-4,4,4,1,1,1,3,3,1,1,1,1,1,1,1,"All above tools are useful, but it's better have a bot to ping approvers automatically if the PR hasn't got reviewed for a period.",Way too many notifications with no benefits,ping approvers,"Yes, it’s part of my job",Every day,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,Documentation,n/a,Advocacy and events,n/a,"Plugins & Drivers (CSI, CNI, cloud providers)","Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,n/a,n/a,n/a,n/a,n/a,Kubecon China 2018,n/a,n/a,"Ecosystem events, eg. Helm Summit",Other conferences with a Kubernetes track (like DockerCon or ContainerDay),n/a,N/A,1,5,5,5,5,5,5,5,Timezone is a main blocker for me. Maybe hold the meeting in multiple times?,,2,3,4,5,n/a,n/a,N/A,,3,5,3,2,5,2,2,3,4,n/a,n/a,n/a,Slack,n/a,n/a,Kubernetes blog,k/community repo in GH (Issues and/or PRs),n/a,"yes, for both users and contributors",Yes,n/a,"A - Yes, I would love to mentor one or both programs",Yes,4,Not enough time in the week +10211308450,216437765,09/12/2018 2:18:54 AM,Less than 6 months,"I’m not an org member yet, but working on it",Not really,Europe,UTC+01:00,2-4,2,2,2,3,3,3,4,4,3,n/a,n/a,1,1,n/a,I do not have much experience with these tools yet,Way too many notifications with no benefits,"I am too inexperienced to really say. The notifications are many, still trying to grasp it.","No, but I’m able to use “free” time at work",A few times a year,n/a,n/a,n/a,n/a,n/a,n/a,n/a,"Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,None,N/A,0,3,3,3,3,3,3,3,N/A,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10211251973,216437765,09/12/2018 2:17:31 AM,Just started,"I’m not an org member yet, but working on it","Yes, but would like mentorship.",Asia,UTC+08:00,4+,2,1,1,2,3,1,3,1,1,1,1,1,1,1," k8s-ci-bot so simple and useful. Perhaps we need a document auto generate tool from source code comment, like Sphinx.",Right notifications at the right frequency,Messages archive? Maybe. I wish we can archive message about projects.,"Yes, it’s part of my job",Every day,n/a,Code inside of another repo in the kubernetes/* GitHub organization,n/a,n/a,n/a,Community & Project management; SIG Chair etc.,n/a,"Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,n/a,It feels great now.,n/a,n/a,n/a,Kubecon China 2018,n/a,n/a,n/a,Other conferences with a Kubernetes track (like DockerCon or ContainerDay),n/a,"Not currently, can learn a lot of content.",2,4,3,4,5,4,2,4,Not yet.,1,2,n/a,n/a,5,n/a,n/a,Not yet. Thanks.,,5,3,2,3,5,3,4,3,4,kubernetes-dev mailing list,n/a,Contributor Experience mailing list,n/a,n/a,n/a,n/a,k/community repo in GH (Issues and/or PRs),n/a,"yes, for both users and contributors","No, because I don't think my issues qualify",n/a,"A - Yes, I would love to mentor one or both programs",Yes,3,Don't know enough to mentor +10211204730,216437765,09/12/2018 1:21:13 AM,1-2 years,Had no idea this was even a thing,"Yes, but would like mentorship.",Europe,UTC±00:00,4+,2,5,3,3,3,4,3,2,3,1,1,n/a,n/a,1,some issue commands may be something that could be done manually with less noise,Not enough notifications and I frequently miss important things (e.g when my review/approval is needed),Some push to reviewers before coming stale,"Yes, it’s part of my job",A few times a year,n/a,Code inside of another repo in the kubernetes/* GitHub organization,n/a,n/a,n/a,n/a,n/a,"Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,n/a,n/a,n/a,n/a,Kubecon Europe 2018,n/a,n/a,n/a,n/a,Other conferences with a Kubernetes track (like DockerCon or ContainerDay),n/a,More information I guess,0,4,3,2,5,4,4,2,Nope,1,n/a,3,n/a,5,n/a,7,N/A,,2,3,4,1,5,1,5,3,4,n/a,n/a,n/a,n/a,Twitter,A dedicated contributor site,Kubernetes blog,k/community repo in GH (Issues and/or PRs),n/a,"yes, for both users and contributors","No, because I didn't know they were there",n/a,"B - No, I can’t/don’t want to",No,3,Not enough time in the week +10211174308,216437765,09/12/2018 1:06:14 AM,Less than 6 months,Reviewer,"Yes, but not sure I have time.",Europe,UTC+01:00,4+,3,4,1,2,1,4,3,3,3,1,n/a,1,1,1,Commands provide visibility,Way too many notifications with no benefits,no opinion,"No, but I’m able to use “free” time at work",Every day,n/a,n/a,n/a,n/a,n/a,n/a,n/a,"Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,n/a,I just want to say that the community is very friendly and welcoming - and that is a great start to get people on board!,n/a,n/a,Kubecon Europe 2018,n/a,n/a,n/a,n/a,n/a,n/a,N/A,0,3,3,3,3,2,2,3,Give the scale at question 19 - is 1 good or bad?,,2,n/a,4,n/a,n/a,n/a,N/A,,5,5,1,3,5,3,2,1,3,n/a,Dedicated discuss.k8s.io forum for contributors,n/a,Slack,Twitter,n/a,n/a,n/a,n/a,"yes, for both users and contributors",Yes,n/a,"B - No, I can’t/don’t want to",No,1,Don't know enough to mentor +10211083820,216437765,09/12/2018 12:31:46 AM,6 months -1 year,"I’m not an org member yet, but working on it","Yes, but not sure I have time.",Europe,UTC+02:00,2-4,1,2,1,2,2,3,4,3,2,1,n/a,n/a,1,n/a,"Automatic labeling is a bit misleading, but I think that's because the labels were changed recently. I'd like that if you close one issues all PR related to that issues will closed",Lots of notifications but they are useful,I think that some kind of automatic standardization checks for all the related repos to the project should be useful.,"No, but I’m able to use “free” time at work",Every day,n/a,Code inside of another repo in the kubernetes/* GitHub organization,n/a,n/a,n/a,n/a,n/a,n/a,n/a,Other,"I think that's impossible for newbie and part time contributors to catch up with the pace of the core products, however, I see lot of opportunities handling the low hanging fruit on new/incubator projects, helping with the bug triage and system administrations",n/a,n/a,n/a,n/a,n/a,n/a,n/a,Other conferences with a Kubernetes track (like DockerCon or ContainerDay),n/a,N/A,0,2,2,2,2,2,2,2,Continue to iterate and listen to the community,1,2,n/a,4,5,6,7,Centralize all that information,Better documentation,5,4,2,2,3,1,1,1,3,kubernetes-dev mailing list,n/a,n/a,Slack,n/a,n/a,n/a,k/community repo in GH (Issues and/or PRs),n/a,"yes, for both users and contributors",Yes,n/a,"B - No, I can’t/don’t want to",No,3,Don't know enough to mentor +10210970675,216437765,09/11/2018 11:26:17 PM,Just started,Reviewer,"Yes, but would like mentorship.",Asia,UTC+05:30,"None, Kubernetes is my first one!",3,2,3,1,4,4,3,4,1,n/a,1,1,n/a,n/a,-,Right notifications at the right frequency,-,"Yes, it’s part of my job",Several times a month,n/a,n/a,Documentation,Testing & Infrastructure,n/a,n/a,n/a,n/a,n/a,n/a,Need more easy test environment deployment,n/a,n/a,n/a,n/a,n/a,n/a,n/a,Other conferences with a Kubernetes track (like DockerCon or ContainerDay),n/a,-,,4,3,4,4,4,4,5,-,1,n/a,n/a,4,5,n/a,n/a,-,,1,1,3,2,4,2,3,4,1,n/a,Dedicated discuss.k8s.io forum for contributors,n/a,n/a,n/a,n/a,Kubernetes blog,n/a,n/a,no value for anyone,"No, because I didn't know they were there",n/a,"B - No, I can’t/don’t want to",Yes,3,Not enough time in the week +10210741104,216437765,09/11/2018 9:32:40 PM,6 months -1 year,"I’m not an org member yet, but working on it","Yes, but would like mentorship.",North America,UTC-08:00,One more,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10210700667,216437765,09/11/2018 9:22:02 PM,3+ years,Subproject Owner,"No, I'm already an owner",North America,UTC-07:00,2-4,1,1,3,1,1,1,1,4,5,1,1,1,1,1,Requiring this survey question,Way too many notifications with no benefits,Fewer survey requirements,"Yes, it’s part of my job",Every day,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,n/a,Testing & Infrastructure,n/a,Community & Project management; SIG Chair etc.,n/a,n/a,n/a,n/a,No,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,No,2,3,3,3,3,3,3,5,No,n/a,n/a,n/a,n/a,n/a,6,n/a,Making 1 mean I like the tool is extremely odd,,3,5,1,3,5,1,2,1,5,kubernetes-dev mailing list,n/a,n/a,Slack,n/a,n/a,n/a,n/a,n/a,"yes, for both users and contributors",Other (please specify):,Sometimes but don't think they work well,"B - No, I can’t/don’t want to",Yes,4,Wasn't connected with mentoring opportunities (reach out to us to get engaged!) +10210653661,216437765,09/11/2018 8:55:20 PM,2-3 years,Org Member,Not really,North America,UTC-05:00,2-4,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10210647774,216437765,09/11/2018 9:03:27 PM,1-2 years,Had no idea this was even a thing,"Yes, but would like mentorship.",North America,UTC-06:00,2-4,3,3,3,3,3,3,3,3,3,n/a,1,1,1,1,Not sure,Lots of notifications but they are useful,Not sure,"Yes, it’s part of my job",A few times a year,n/a,n/a,Documentation,n/a,Advocacy and events,n/a,n/a,"Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,Other,Not sure,n/a,Kubecon North America 2017,n/a,n/a,n/a,n/a,n/a,Other conferences with a Kubernetes track (like DockerCon or ContainerDay),n/a,N/A,1,5,4,3,3,3,4,2,N/A,1,2,3,n/a,n/a,n/a,n/a,N/A,,4,4,4,2,2,5,3,4,4,kubernetes-dev mailing list,n/a,n/a,Slack,n/a,n/a,Kubernetes blog,n/a,n/a,"yes, for both users and contributors","No, because I didn't know they were there",n/a,"A - Yes, I would love to mentor one or both programs",No,3,Don't know enough to mentor +10210583897,216437765,09/11/2018 8:26:56 PM,Just started,"I’m not an org member yet, but working on it","Yes, but would like mentorship.",North America,UTC-07:00,2-4,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10210532937,216437765,09/11/2018 8:17:59 PM,3+ years,Approver,"No, I'm already an owner",North America,UTC+08:00,"None, Kubernetes is my first one!",2,2,2,2,2,3,2,2,2,1,1,1,1,1,I'd like a /squash command that would take a PR and squash it for me. This would remove the one blocker from contributing to docs and KEPs purely from the Github UI.,Not enough notifications and I frequently miss important things (e.g when my review/approval is needed),Squashing via github command.,"Yes, it’s part of my job",Several times a month,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,Documentation,n/a,n/a,n/a,n/a,n/a,n/a,Other,n/a,n/a,Kubecon North America 2017,n/a,n/a,Kubecon North America 2018,Kubecon Europe 2019,n/a,Other conferences with a Kubernetes track (like DockerCon or ContainerDay),n/a,no,4,5,4,3,2,2,2,2,no,n/a,2,n/a,n/a,n/a,n/a,n/a,nope,,3,1,1,3,3,3,2,1,5,kubernetes-dev mailing list,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,no value for anyone,"No, because I don't think my issues qualify",n/a,"B - No, I can’t/don’t want to",No,1,Not enough time in the week +10210530309,216437765,09/11/2018 8:20:07 PM,3+ years,Approver,Not really,Europe,UTC+02:00,One more,3,2,2,2,1,4,3,3,2,1,n/a,1,1,1,I wish cherrypicks were automated,Way too many notifications with no benefits,Cherrypick process,"Yes, it’s part of my job",Several times a month,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,n/a,Testing & Infrastructure,n/a,n/a,n/a,n/a,n/a,n/a,Automate cherrypicking,n/a,n/a,Kubecon Europe 2018,n/a,n/a,n/a,n/a,n/a,n/a,No opinion,1,4,5,3,4,3,3,3,No opinion.,1,2,n/a,4,n/a,n/a,n/a,Nothing,,3,2,1,3,5,1,1,3,3,n/a,n/a,n/a,n/a,n/a,n/a,Kubernetes blog,k/community repo in GH (Issues and/or PRs),n/a,"yes, for both users and contributors",Yes,n/a,"B - No, I can’t/don’t want to",No,3,"Nothing, am already a mentor" +10210524466,216437765,09/11/2018 8:11:33 PM,Just started,Had no idea this was even a thing,"Yes, but not sure I have time.",North America,UTC-08:00,"None, Kubernetes is my first one!",1,2,2,1,1,1,2,2,1,1,n/a,n/a,n/a,n/a,-,Lots of notifications but they are useful,-,It’s entirely on my own time,Don’t know yet,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,"Don’t contribute yet, hoping to start soon",n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,Other conferences with a Kubernetes track (like DockerCon or ContainerDay),n/a,-,0,5,5,4,3,3,3,3,-,n/a,n/a,n/a,n/a,n/a,6,n/a,-,,2,3,3,1,2,2,2,2,2,n/a,n/a,n/a,n/a,n/a,n/a,Kubernetes blog,n/a,n/a,"yes, for both users and contributors","No, because I didn't know they were there",n/a,"B - No, I can’t/don’t want to",Yes,4,Don't know enough to mentor +10210517563,216437765,09/11/2018 8:01:32 PM,Just started,"I’m not an org member yet, but working on it","Yes, but would like mentorship.",North America,UTC-07:00,2-4,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10210505379,216437765,09/11/2018 8:11:10 PM,3+ years,Approver,"No, I'm already an owner",North America,UTC-05:00,4+,2,3,1,2,2,5,1,2,1,n/a,n/a,1,1,1,"automatic retest is frequently overaggressive, continuously testing a PR that has never passed tests automated tooling around cherry-pick and release branch management would be very helpful",Lots of notifications but they are useful,"release branch management (cherry-picks, tracking when a fix needs to be backported, when backport is complete, etc)","Yes, it’s part of my job",Every day,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,Documentation,Testing & Infrastructure,Advocacy and events,Community & Project management; SIG Chair etc.,"Plugins & Drivers (CSI, CNI, cloud providers)",n/a,n/a,n/a,n/a,n/a,Kubecon North America 2017,n/a,n/a,Kubecon North America 2018,n/a,n/a,n/a,n/a,"clarify the intent of each session (information distribution, brainstorming, feedback gathering, etc). each type of session is valuable, but confusing the intent often leads to competing emphases between presenters/attendees",4,2,2,2,4,3,4,2,n/a,1,n/a,n/a,n/a,5,n/a,n/a,making common contributor pain points visible to owning sigs and ensuring that feedback loop informs sig actions,,3,5,1,3,5,2,4,2,4,kubernetes-dev mailing list,n/a,Contributor Experience mailing list,Slack,n/a,n/a,n/a,n/a,n/a,"yes, for both users and contributors","No, because I don't think my issues qualify",n/a,"B - No, I can’t/don’t want to",Yes,3,Not enough time in the week +10210487075,216437765,09/11/2018 8:04:00 PM,6 months -1 year,"I’m not an org member yet, but working on it","Yes, doing it on my own.",North America,UTC-05:00,"None, Kubernetes is my first one!",3,1,2,2,3,3,4,4,1,n/a,n/a,n/a,n/a,1,N/A,Lots of notifications but they are useful,N/A,"Yes, it’s part of my job",A few times a week,n/a,n/a,n/a,n/a,n/a,n/a,n/a,"Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,n/a,N/A,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,None,N/A,0,5,4,2,4,4,4,4,N/A,1,n/a,n/a,n/a,n/a,n/a,7,N/A,,4,5,2,3,4,1,1,1,4,n/a,n/a,n/a,Slack,n/a,n/a,n/a,n/a,n/a,"yes, for both users and contributors","No, because I didn't know they were there",n/a,"B - No, I can’t/don’t want to",No,3,Don't know enough to mentor +10210482937,216437765,09/11/2018 7:57:46 PM,1-2 years,Reviewer,"Yes, but would like mentorship.",Asia,UTC+05:30,"None, Kubernetes is my first one!",4,2,2,2,1,4,5,3,4,1,1,1,1,1,NA,Not enough notifications and I frequently miss important things (e.g when my review/approval is needed),NA,It’s entirely on my own time,Every day,Core code inside of kubernetes/kubernetes,n/a,Documentation,Testing & Infrastructure,n/a,Community & Project management; SIG Chair etc.,n/a,n/a,n/a,n/a,n/a,n/a,Kubecon North America 2017,n/a,n/a,Kubecon North America 2018,n/a,n/a,n/a,n/a,"More hallway discussions, round table discussions and explanations about overall project architecture, goals, etc",1,2,5,4,5,4,5,5,"I think it's been mentioned previously but if SIG updates could include places where the SIG is looking for contributions or if they could point out good first issues, that would really awesome!",1,2,3,4,5,6,7,NA,,5,5,4,4,5,4,3,4,5,kubernetes-dev mailing list,Dedicated discuss.k8s.io forum for contributors,Contributor Experience mailing list,Slack,Twitter,n/a,Kubernetes blog,n/a,n/a,"yes, for both users and contributors","No, because I don't think my issues qualify",n/a,"B - No, I can’t/don’t want to",Yes,5,"Nothing, am already a mentor" +10210478715,216437765,09/11/2018 7:54:05 PM,3+ years,Approver,Not really,North America,UTC-04:00,2-4,3,3,2,1,1,2,1,1,2,1,1,1,1,1,"If I had to choose, automatic labeling of stale issues. They're all useful, but the others are more important IMHO.",Lots of notifications but they are useful,Not sure,"Yes, it’s part of my job",A few times a year,Core code inside of kubernetes/kubernetes,n/a,n/a,n/a,n/a,n/a,n/a,"Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,n/a,n/a,n/a,Kubecon North America 2017,Kubecon Europe 2018,n/a,Kubecon North America 2018,n/a,n/a,n/a,n/a,Have more dedicated face to face time with other community members (hackathon style),2,4,4,2,3,3,4,4,N/A - I don't regularly attend,1,2,n/a,n/a,n/a,n/a,7,Not sure,,2,5,2,3,3,1,1,2,2,kubernetes-dev mailing list,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,"yes, for both users and contributors",Yes,n/a,"B - No, I can’t/don’t want to",No,3,"Nothing, am already a mentor" +10210468433,216437765,09/11/2018 7:57:49 PM,Less than 6 months,Org Member,"Yes, doing it on my own.",North America,UTC-08:00,"None, Kubernetes is my first one!",4,3,1,2,5,2,1,1,1,1,n/a,n/a,n/a,n/a,"Issue commands are noisy, awkward, and sometimes unintuitive.",Lots of notifications but they are useful,ÂŻ\_(ă„)_/ÂŻ,"Yes, it’s part of my job",Every day,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,n/a,Testing & Infrastructure,n/a,n/a,n/a,n/a,n/a,n/a,Tests that don't flake repeatedly on every PR.,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,None,N/A,0,3,3,3,3,3,3,3,"I've not gone (and there was no N/A option, and the question as mandatory).",n/a,n/a,n/a,4,n/a,n/a,n/a,Reducing test flakes!,,5,5,1,3,4,1,1,1,3,kubernetes-dev mailing list,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,"yes, for both users and contributors","No, because I don't think my issues qualify",n/a,"B - No, I can’t/don’t want to",No,3,Don't know enough to mentor +10208654544,216437765,09/11/2018 12:30:19 AM,Less than 6 months,Org Member,"Yes, but not sure I have time.",Europe,UTC+02:00,2-4,1,1,2,2,1,3,4,2,2,n/a,n/a,1,1,1,"Mailing test failures is way too spammy. If you have a PR with failing tests, you can easily get way too much emails and it becomes hard to navigate.","Right notifications are being made, but too frequently",Nothing at all. All the most frequent task are automated.,"Yes, it’s part of my job",Several times a month,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,"Easier to find issues to work on. Looking by the issue tracker, it can be find to hard a right one by yourself. Usually, you first need to get in contact with SIG members and to see what you can help with with. Some ""automation"" around that part could be useful.",n/a,n/a,Kubecon Europe 2018,n/a,Kubecon North America 2018,n/a,n/a,n/a,n/a,"Not sure :) I liked the format of contributor summer we had this year on KubeCon EU, and would definitely love something similar on upcoming conferences.",1,5,5,5,5,5,5,5,Community meeting is the best meeting :D,1,n/a,3,4,n/a,n/a,7,"Nothing at all, I think it covers the most important points.",,2,5,3,4,4,5,1,3,5,n/a,n/a,n/a,Slack,n/a,n/a,n/a,n/a,n/a,"yes, for both users and contributors",Not as much as I should because I forget,n/a,"B - No, I can’t/don’t want to",Yes,5,Don't know enough to mentor +10208576582,216437765,09/11/2018 8:25:13 AM,1-2 years,Reviewer,"Yes, but not sure I have time.",North America,UTC-04:00,"None, Kubernetes is my first one!",5,5,1,2,5,2,2,3,3,n/a,n/a,1,n/a,n/a,n/a,Lots of notifications but they are useful,n/a,I’m a student,A few times a week,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,Documentation,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,Kubecon Europe 2017,Kubecon North America 2017,n/a,n/a,Kubecon North America 2018,n/a,n/a,n/a,n/a,n/a,1,3,2,4,3,3,4,5,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10208225442,216437765,09/28/2018 9:09:36 PM,6 months -1 year,"I’m not an org member yet, but working on it","Yes, but would like mentorship.",Europe,UTC+01:00,"None, Kubernetes is my first one!",n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10208136069,216437765,09/10/2018 8:39:41 PM,6 months -1 year,"I’m not an org member yet, but working on it","Yes, but would like mentorship.",North America,UTC-07:00,"None, Kubernetes is my first one!",1,1,5,3,4,1,4,4,1,n/a,1,1,n/a,n/a,"Since all my contribution is documentation, I don't find any use in retesting, though I'm confident it would be if I was writing code.","Right notifications are being made, but too frequently",Maybe importing and correlation of documentation from outside sources,It’s complicated,Don’t know yet,n/a,n/a,Documentation,n/a,Advocacy and events,Community & Project management; SIG Chair etc.,n/a,n/a,n/a,n/a,I'd love some review-able tutorials on github usage. It comes up just often enough for me to be rusty every time I use it.,n/a,Kubecon North America 2017,Kubecon Europe 2018,Kubecon China 2018,Kubecon North America 2018,Kubecon Europe 2019,n/a,Other conferences with a Kubernetes track (like DockerCon or ContainerDay),n/a,Maybe some active mentoring/pairing of new contributors with veterans to provide color during the contributor summits.,1,4,4,3,4,5,5,4,no,1,2,3,4,5,n/a,n/a,Maybe even more diversity and outreach programs?,Diversity Initatives,2,5,4,5,1,4,1,2,5,n/a,n/a,Contributor Experience mailing list,Slack,Twitter,n/a,n/a,n/a,n/a,"yes, for both users and contributors",Other (please specify):,"No, because I'm not really filing many issues.","B - No, I can’t/don’t want to",Yes,5,Employer doesn't support spending time mentoring +10208101835,216437765,09/10/2018 8:05:32 PM,6 months -1 year,Org Member,"Yes, but not sure I have time.",Europe,UTC+02:00,2-4,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10208029121,216437765,09/10/2018 7:44:22 PM,2-3 years,Subproject Owner,"No, I'm already an owner",North America,UTC-08:00,4+,1,1,1,1,1,1,1,1,1,1,1,1,1,1,N/A,Lots of notifications but they are useful,n/a,"No, but I’m able to use “free” time at work",Every day,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,n/a,Testing & Infrastructure,n/a,Community & Project management; SIG Chair etc.,n/a,"Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,n/a,Nope,n/a,n/a,n/a,n/a,Kubecon North America 2018,n/a,n/a,n/a,n/a,N/A,0,1,3,2,5,3,5,5,Nope,n/a,2,n/a,4,5,n/a,n/a,N/A,,5,5,2,4,5,1,1,3,4,kubernetes-dev mailing list,n/a,Contributor Experience mailing list,n/a,n/a,n/a,n/a,n/a,n/a,"yes, for both users and contributors",Yes,n/a,"B - No, I can’t/don’t want to",Yes,4,Not enough time in the week +10208020798,216437765,09/26/2018 4:25:29 AM,3+ years,Subproject Owner,"Yes, but not sure I have time.",South America,UTC-04:00,4+,3,3,3,3,3,3,3,3,3,1,n/a,1,1,n/a,.,Not enough notifications and I frequently miss important things (e.g when my review/approval is needed),.,"Yes, it’s part of my job",Every day,n/a,Code inside of another repo in the kubernetes/* GitHub organization,n/a,n/a,n/a,n/a,n/a,n/a,n/a,Other,n/a,n/a,Kubecon North America 2017,Kubecon Europe 2018,n/a,n/a,n/a,n/a,n/a,n/a,N/A,2,4,3,3,3,3,3,3,N/A,n/a,2,n/a,n/a,n/a,6,n/a,N/A,,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a +10204125563,216437765,09/08/2018 6:20:19 AM,1-2 years,Subproject Owner,"Yes, doing it on my own.",North America,UTC-05:00,One more,3,2,3,2,1,3,3,3,2,1,1,1,1,1,n/a,Lots of notifications but they are useful,"KEP / Features / requests for new features, specifically for new Contributors or passerbys","Yes, it’s part of my job",Every day,n/a,Code inside of another repo in the kubernetes/* GitHub organization,Documentation,Testing & Infrastructure,Advocacy and events,Community & Project management; SIG Chair etc.,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,Kubecon North America 2018,Kubecon Europe 2019,"Ecosystem events, eg. Helm Summit",Other conferences with a Kubernetes track (like DockerCon or ContainerDay),n/a,"Haven't been to one yet, but a strong focus on all types of Contributors (e.g., non-code) and having leaders from those segments available is key.",0,4,5,4,5,5,5,5,I think it's pretty great. Would like to see more around product roadmap from SIGs,1,2,3,4,5,6,7,Process around creating a better feedback loop for non-contributors requesting improvements. Triage to delivery.,,5,5,3,5,5,3,1,3,5,kubernetes-dev mailing list,n/a,n/a,Slack,Twitter,n/a,n/a,k/community repo in GH (Issues and/or PRs),n/a,"yes, for both users and contributors",Not as much as I should because I forget,n/a,"B - No, I can’t/don’t want to",Yes,5,Not enough time in the week +10203989035,216437765,09/08/2018 4:15:43 AM,1-2 years,Org Member,"Yes, doing it on my own.",Europe,UTC+03:00,2-4,3,3,3,1,4,5,1,3,2,n/a,1,1,1,1,n/a,Right notifications at the right frequency,n/a,n/a,Every day,Core code inside of kubernetes/kubernetes,Code inside of another repo in the kubernetes/* GitHub organization,Documentation,Testing & Infrastructure,Advocacy and events,n/a,n/a,"Related projects (Kubeadm, Helm, container runtimes, etc.)",n/a,Other,"less test flakes, faster code reviews",n/a,n/a,Kubecon Europe 2018,n/a,n/a,Kubecon Europe 2019,n/a,n/a,n/a,n/a,n/a,4,3,2,4,3,3,3,n/a,n/a,2,n/a,n/a,n/a,n/a,n/a,n/a,,5,5,3,5,5,1,1,5,5,kubernetes-dev mailing list,n/a,Contributor Experience mailing list,Slack,n/a,n/a,Kubernetes blog,k/community repo in GH (Issues and/or PRs),n/a,"yes, for both users and contributors",Yes,n/a,"B - No, I can’t/don’t want to",No,3,Not enough time in the week \ No newline at end of file diff --git a/sig-contributor-experience/contribex-survey-2018.md b/sig-contributor-experience/contribex-survey-2018.md new file mode 100644 index 000000000..b549cbf06 --- /dev/null +++ b/sig-contributor-experience/contribex-survey-2018.md @@ -0,0 +1,146 @@ +Please read before using the data. + +| Data | Info | +| --- | --- | +Title | Kubernetes Contributor Experience Survey 2018 +Authors | @parispittman, @jberkus, and many contributor experience members +Tool Used | SurveyMonkey; @idvoretskyi entered into the tool from the CNCF account and exported the data +Start | September 08, 2018 (soft launch on Slack); September 11, 2018 (full launch on kubernetes-sig-contribex@googlegroups.com) +End | October 1, 2018 +Subject(s) | automation, community meeting, mentoring, communication, demographic information about contributors, events, +Langauage | English +Data Processing | All personal identifiers have been removed. 73 respondents provided their email addresses for follow up. They have been scrubbed. +Format | .csv +File Name | contribex-survey-2018.csv + +Many column headers have been changed due to length, provide context, or they produced a two header column from ordinal scale and ranking questions. Changes will be documented below. + +Some values represent a range of feelings/opinions. Check the question to find out the descriptive range. (ex: 1=least useful, 5=most useful) + + +### Two header column changes: + +Columns: K-S +Question: Please rate the below parts of the contribution process by how challenging they are, from 1 (not a problem) to 5 (a frequent blocker) + +Columns: T-X +Question: Which of the following tooling do you find useful? + +Columns: Y, AA, AN, AX, BG, BO +Question: open ended questions; may need to assign values to capture trends + +Columns: AD-AM +Question: What areas of Kubernetes do you contribute to? Please check all that apply. + +Columns: AO-AW +Question: What conferences have you previously attended or are planning to attend? + +Columns: AZ-BF +Question: How useful do you find each section of the Thursday's Community Meeting? (1 least useful; 5 most useful) + +Columns: BH-BN +Question: Some of the major projects we are working on are listed below, check one that is most important to you that we carry through to completion. + +Columns: BP-BX +Question: Of our various communications channels, please rate which ones you use and/or check most frequently on a 1-5 scale, where 1 is “never”, 3 is “several times a month” and 5 is “every day”. + +Columns: BY-CG +Question: Which of these channels is most likely to reach you first for news about decisions, changes, additions, and/or announcements to the contributor process or community matters? + +### Full Question List: + +1. How long have you been contributing to Kubernetes? +2. What level of the Contributor Ladder do you consider yourself to be on? +3. Are you interested in advancing to the next level of the Contributor Ladder? +4. What region of the world are you in? +5. What timezone are you most often in? (Check your UTC offset here) +6. How many other open source projects not in the Kubernetes ecosystem do you contribute to? +7. Please rate the below parts of the contribution process by how challenging they are, from 1 (not a problem) to 5 (a frequent blocker): +Code/Documentation review +Communication +GitHub tools and processes (not our customized tooling) +Finding the right SIG for your contributions +Our CI, labels, and crafted customized automation +Debugging test failures +Finding appropriate issues to work on +Setting up development environment +Having PRs rejected +8. Which of the following tooling do you find useful? +automatic /retest of flakes (fejta-bot) +automatic labeling of stale issues (fejta-bot) +issue commands like /assign, /kind bug (k8s-ci-robot) +PR commands like /approve, /lint (k8s-ci-robot) +automatic merging of approved PRs (k8s-merge-robot and k8s-ci-bot) +9. What tool above is the least useful and why? Wish something was automated that isn’t? List it here. +10. How do you perceive the current notification volume and utility? +11. Which areas could use additional automation? +12. Does your employer support your contributions to Kubernetes? +13. How often do you contribute upstream (code, docs, issue triage, etc.)? +14. What areas of Kubernetes do you contribute to? Please check all that apply. +Core code inside of kubernetes/kubernetes +Code inside of another repo in the kubernetes/* GitHub organization +Documentation +Testing & Infrastructure +Advocacy and events +Community & Project management; SIG Chair etc. +Plugins & Drivers (CSI, CNI, cloud providers) +Related projects (Kubeadm, Helm, container runtimes, etc.) +Don’t contribute yet, hoping to start soon +15. Are there specific ways the project could make contributing easier for you? +16. What conferences have you previously attended or are planning to attend? +Kubecon Europe 2017 +Kubecon North America 2017 +Kubecon Europe 2018 +Kubecon China 2018 +Kubecon North America 2018 +Kubecon Europe 2019 +Ecosystem events, eg. Helm Summit +Other conferences with a Kubernetes track (like DockerCon or ContainerDay) +None +17. Do you have any suggestions on how to make the Contributor Summits more valuable to you (N/A if not applicable)? +18. How many Kubernetes Contributor Summits have you attended? +19. How useful do you find each section of the Thursday's Community Meeting? (1 least useful; 5 most useful) +Demo +KEP of the Week +Devstats Chart of the Week +Release Updates +SIG Updates +Announcements +Shoutouts +20. Any feedback on how the community meeting can be better? +21. Some of the major projects we are working on are listed below, check one that is most important to you that we carry through to completion: +Mentoring programs for all levels +GitHub Management +Delivering valuable contributor summits at relevant events +Launching a contributor site for a one stop shop for tailored project news, info, docs, and calendar +Discovery and planning around communication and collaboration platforms to lead to potential centralization and/or consolidation +Improving DevStats +Keeping our community safe on our various communication platforms through moderation guidelines and new approaches +22. What is missing from that list entirely? Why? +23. Of our various communications channels, please rate which ones you use and/or check most frequently on a 1-5 scale, where 1 is “never”, 3 is “several times a month” and 5 is “every day”. +Google Groups/Mailing Lists +Slack +discuss.kubernetes.io +Zoom video conferencing/meetings +Discussions on Github Issues and PRs +Unofficial channels (IRC, Hangouts, Twitter, etc.) +StackOverflow +YouTube recordings (community meetings, SIG/WG meetings, etc.) +Google Docs/Forms/Sheets, etc (meeting agendas, etc) +24. Which of these channels is most likely to reach you first for news about decisions, changes, additions, and/or announcements to the contributor process or community matters? +kubernetes-dev mailing list +Dedicated discuss.k8s.io forum for contributors +Contributor Experience mailing list +Slack +Twitter +A dedicated contributor site +Kubernetes blog +k/community repo in GH (Issues and/or PRs) +25. Do you think Slack adds value to the project for users and/or contributors? +26. Have you ever used the Help Wanted and/or Good First Issue labels on issues you file to find contributors? +27. Are you interested in mentoring a Kubernetes upstream Intern for Outreachy or Google Summer of Code? We are also looking for organizations to sponsor if your employer is interested. +28. Have you watched or participated in an episode of our YouTube mentoring series Meet Our Contributors? +29. How useful did you find Meet Our Contributors? (1 - not useful at all; 5 - extremely useful)If you have suggestions on improvements, leave those in the feedback box at the end of the survey. +30. What remains a blocker to becoming a mentor? +31. Would you like us to follow up with you about any of your answers, above? If so, share your email address here: +32. Do you have any comments, questions, or clarifications for your answers on this survey? Leave the general feedback here: \ No newline at end of file diff --git a/sig-contributor-experience/devstats/OWNERS b/sig-contributor-experience/devstats/OWNERS new file mode 100644 index 000000000..e40433979 --- /dev/null +++ b/sig-contributor-experience/devstats/OWNERS @@ -0,0 +1,16 @@ +# see https://go.k8s.io/owners + +reviewers: + - Phillels + - dims + - jberkus + - nikhita + - parispittman + - spiffxp +approvers: + - Phillels + - lukaszgryglicki + - jberkus + - spiffxp +labels: + - sig/contributor-experience diff --git a/sig-contributor-experience/devstats/README.md b/sig-contributor-experience/devstats/README.md new file mode 100644 index 000000000..28c396ef1 --- /dev/null +++ b/sig-contributor-experience/devstats/README.md @@ -0,0 +1,18 @@ +# devstats + +This file documents the devstats subproject. We are responsible for +continued advocacy of CNCF's devstats project within the kubernetes +community. The kubernetes project has a significant number of metrics +and workflows that are unique amongst CNCF projects, thus we are more +actively involved in ongoing development and maintenance of meaningful +devstats metrics and dashboards than most other CNCF projects. + +## Things we have done in the past + +- Graph of the Week at kubernetes community meetings + - TODO: list of meetings and graphs presented? +- Added descriptions to each of the devstats dashboards +- Adjusted repo groups to be generated from sigs.yaml instead of the + previous subjective/opaque groupings +- Consulted with the devstats maintainers to suggest new metrics and + new dashboards diff --git a/sig-contributor-experience/migrated-from-wiki/README.md b/sig-contributor-experience/migrated-from-wiki/README.md deleted file mode 100644 index c34a79fea..000000000 --- a/sig-contributor-experience/migrated-from-wiki/README.md +++ /dev/null @@ -1 +0,0 @@ -The content in here has been migrated from https://github.com/kubernetes/community/wiki and is likely severely out of date. Please contact this SIG if you have questions or ideas about where this content should go. diff --git a/sig-contributor-experience/migrated-from-wiki/effective-reviewable.md b/sig-contributor-experience/migrated-from-wiki/effective-reviewable.md deleted file mode 100644 index 1df0337c9..000000000 --- a/sig-contributor-experience/migrated-from-wiki/effective-reviewable.md +++ /dev/null @@ -1,12 +0,0 @@ -*Or, one weird trick to make Reviewable awesome* - -The Kubernetes team is still new to _Reviewable_. As you discover new cool features and workflows, add them here. Once we have built up a good number of tricks we can reorganize this list. - -- Hold off on publishing comments (using the "Publish" button) until you have completed your review. [(source)](@pwittrock) -- When leaving comments, select a "disposition" (the button with your profile picture) to indicate whether the comment requires resolution, or is just advisory and hence requires no response. [(source)](@pwittrock) -- Change a comment's "disposition" to "close" those to which the author didn't respond explicitly but did address with satisfactory changes to the code. Otherwise, the comment hangs out there awaiting a response; in contrast to GitHub's review system, _Reviewable_ doesn't consider a change to the target line to be a sufficient indicator of resolution or obsolescence, which is a safer design. Use the y to acknowledge the current comment, which indicates that no further response is necessary. -- To "collapse" a whole file in the multi-file view, click the rightmost value in the revision range control. This is effectively saying, "Show no diffs." -- Use the red/green "eye" icon to indicate completion of and to keep track of which files you have reviewed. The x keyboard shortcut toggles the completion status of the file currently focused in the status bar across the top. -- Use the p and n keys to navigate to the previous and next unreviewed file—that is, those whose status is a red circle with a crossed white eye icon, meaning incomplete, as opposed to those with a green circle with a white eye, meaning complete. -- Use the j and k keys to navigate to the previous and next comment. Use S-j and S-k to navigate between the previous and next _unaddressed_ comment. Usually as the reviewer, you use the latter to go back and check on whether your previous suggestions were addressed. -- Reply with `+lgtm` to apply the "LGTM" label directly from _Reviewable_. \ No newline at end of file diff --git a/sig-contributor-experience/projects.md b/sig-contributor-experience/projects.md new file mode 100644 index 000000000..ebba993d2 --- /dev/null +++ b/sig-contributor-experience/projects.md @@ -0,0 +1,88 @@ +# Projects and Goals + +*note - this is a temporary file until we can figure out a better project management solution.* + +This is a list of the projects and goals currently underway with Contributor Experience. Please submit a PR if you are adding your project to this list. To introduce a new project, attend a weekly meeting or drop a note to us on the mailing list - details can be found on our [README](README.md). + +Want to contribute? Take a look at this list and the "future" at the bottom. Thank you to all of our contributors for your hard work! + +## SIG Planning + +Project | Owner(s)/Lead(s) | Description | Q1, Q2, Later +---|---|---|--- +[Charter](charter.md) | SIG Leads | Create our first Charter iteration | Q1 +Projects and Goals (this doc) | @parispittman | Create projects.md | Q1 +de-SPOF Community Management | @castrojo | eg: YouTube management | Ongoing + +## Mentoring +Launch a multi-tier strategy test that promote all levels of the [contributor ladder](/community-membership.md) and diversity throughout the project. + +Project | Owner(s)/Lead(s) | Description | Q1, Q2, Later +---|---|---|--- +[Group Mentoring](/mentoring/group-mentoring.md) | @parispittman | Launch a test cohort that takes 10 current members to reviewer in 3 k8s repos/projects (kops, kubeadm, workload API). Develop the learning and development workshops. | Q1 and ongoing +[Meet Our Contributors](/mentoring/meet-our-contributors.md) | @parispittman | Monthly web series similar to user office hours that allows anyone to ask new and current contributors questions about our process, ecosystem, or their stories in open source | Q1 - ongoing +[Outreachy](/mentoring/README.md) | @parispittman | Document new features, create new conceptual content, create new user paths | Q1 +[Google Summer of Code](/mentoring/google-summer-of-code.md) | @nikhita | Kubernetes participation in Google Summer of Code for students | Q1 - ongoing +["Buddy" Program](https://github.com/kubernetes/community/issues/1803) | @parispittman, @chris-short | 1 hour 1:1 sessions for new and current contributors to have dedicated time; meet our contributors but personal | Q2 + +## Contributor Documentation +Ensure the contribution process is well documented, discoverable, and consistent across repos to deliver the best contributor experience. + +Project | Owner(s)/Lead(s) | Description | Q1, Q2, Later +---|---|---|--- +[Contributor Guide](/contributors/guide) | @castrojo | Make contributor onboarding easier; first version | Q1 +[Developer Guide](https://github.com/kubernetes/community/issues/1919) | @ryanj | a comprehensive guide for upstream developers to be a part of the Contributor Guide | Q2 +[New Contributor Website](https://github.com/kubernetes/community/issues/1819) | @castrojo | A new home for all things community -documentation, KEPs, Mentoring, + more | Q2 - ongoing +[Label Documentation](https://gist.github.com/spiffxp/24937d8478853054c088ffc298021214) | @spiffxp | GitHub is rolling out a label description feature in the future; this is to document the label descriptions for contributors | Q1 +Issue hygiene | @spzala | Produce clear understanding and documentation of issue hygiene | Q1 + +## Contributor Workflow and Automation +Ensure contributors have a smooth and similar process across repos to deliver the best contributor experience. Provide sufficient automation so that direct write access to repos is no longer required. + +Project | Owner(s)/Lead(s) | Description | Q1, Q2, Later +---|---|---|--- +Cherry Pick Process | @spiffxp | Design and Prototype | Q2 +PR Descriptions | @grodrigues3, @spiffxp | Automation allowing people to edit pr descriptions for tldr or correct issue / pr; release notes based (design). Define remaining work to be done. | Q1 - ongoing + +## GitHub Management +Set polices and procedures to handle management GitHub settings, permissions, security, and process. + +Project | Owner(s)/Lead(s) | Description | Q1, Q2, Later +---|---|---|--- +Establish GitHub Management Subproject | @cblecker | | Q3 + +## Project-wide Communication Channels +Build, curate, moderate, and make project wide communication channels accessible. + +Project | Owner(s)/Lead(s) | Description | Q1, Q2, Later +---|---|---|--- +[Slack Admin Guidelines](/communication/slack-guidelines.md) | @parispittman | First iteration of guidelines to administer slack for 30k+ users | Q1 +[Weekly K8s Community Meeting](/events/community-meeting.md) | @castrojo, @parispittman | Smooth out weekly community meeting and make adjustments | Ongoing +Roadshow | @parispittman | ContribEx to visit all SIG/WG meetings to deliver messages and collect feedback | Ongoing +[Communication Documentation](/communication/README.md) | @parispittman, @castrojo | Create new communication directory and include all information about our communication channels | Q1, Q2 + +## DevStats +https://k8s.devstats.cncf.io; work devstats into making it the one stop shop for all things upstream Kubernetes data. @phillels is the product owner. + +Project | Owner(s)/Lead(s) | Description | Q1, Q2, Later +---|---|---|--- +Graph of the Week | @phillels | Present at least two graphs a month with explanation about why we care to the community meeting | Ongoing +[User Guide](https://github.com/cncf/devstats/issues/35) | @jberkus, @parispittman, @tpepper | Create a v1 README for DevStats that explains each chart | Q2 +Data validation | @jberkus | Ensure that the data that running through the tool is accurate and aggregating the right information | ongoing + +## Events +Curate and produce the best contributor face to face gatherings. + +Project | Owner(s)/Lead(s) | Description | Q1, Q2, Later +---|---|---|--- +[KubeCon](https://events.linuxfoundation.org/events/kubecon-cloudnativecon-europe-2018/co-located-events/kubernetes-contributor-summit/) | @castrojo, @jberkus, @parispittman | Ensure contributors have great content at the event(s)| Q2, Q4 +KubeCon ContribEx Update and Deep Dive | @parispittman, leads | Run the 30 min update and 30 min deep dive at the event | Q2, Q4 + + +## FUTURE +These projects do not have an owner and have not started yet; however, we would like to get them on the slate for sometime this year. + +Project | Description +---|--- +Automation of new membership | Current process is emailing a googlegroup and an org owner adds person to GH org +Audit schedule | Create an audit schedule to make sure all communication pipelines are up and running smoothly eg: check that google group mailing lists have back up owners/maintainers, make sure meetings are following the calendar process, etc. diff --git a/sig-docs/README.md b/sig-docs/README.md index 9eda50c1a..408f31fa2 100644 --- a/sig-docs/README.md +++ b/sig-docs/README.md @@ -5,13 +5,16 @@ Please do not edit this file directly, but instead make changes to the sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> +---> # Docs Special Interest Group Covers documentation, doc processes, and doc publishing for Kubernetes. ## Meetings -* Regular SIG Meeting: [Tuesdays at 17:30 UTC](https://zoom.us/j/678394311) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=17:30&tz=UTC). +* Regular SIG Meeting: [Tuesdays at 17:30 UTC](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (weekly - except fourth Tuesday every month). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=17:30&tz=UTC). + * [Meeting notes and Agenda](https://docs.google.com/document/d/1Ds87eRiNZeXwRBEbFr6Z7ukjbTow5RQcNZLaSvWWQsE/edit). + * [Meeting recordings](https://www.youtube.com/playlist?list=PL69nYSiGNLP3b5hlx0YV7Lo7DtckM84y8). +* APAC SIG Meeting: [Wednesdays at 02:00 UTC](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (monthly - fourth Wednesday every month). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=02:00&tz=UTC). * [Meeting notes and Agenda](https://docs.google.com/document/d/1Ds87eRiNZeXwRBEbFr6Z7ukjbTow5RQcNZLaSvWWQsE/edit). * [Meeting recordings](https://www.youtube.com/playlist?list=PL69nYSiGNLP3b5hlx0YV7Lo7DtckM84y8). @@ -20,9 +23,9 @@ Covers documentation, doc processes, and doc publishing for Kubernetes. ### Chairs The Chairs of the SIG run operations and processes governing the SIG. -* Zach Corleissen (**[@zacharysarah](https://github.com/zacharysarah)**), Linux Foundation * Andrew Chen (**[@chenopis](https://github.com/chenopis)**), Google -* Jared Bhatti (**[@jaredbhatti](https://github.com/jaredbhatti)**), Google +* Zach Corleissen (**[@zacharysarah](https://github.com/zacharysarah)**), Linux Foundation +* Jennifer Rondeau (**[@bradamant3](https://github.com/bradamant3)**), Heptio ## Contact * [Slack](https://kubernetes.slack.com/messages/sig-docs) @@ -32,32 +35,28 @@ The Chairs of the SIG run operations and processes governing the SIG. ## Subprojects The following subprojects are owned by sig-docs: -- **kubernetes-bootcamp** - - Owners: - - https://raw.githubusercontent.com/kubernetes/kubernetes-bootcamp/master/OWNERS -- **kubernetes-docs-cn** - - Owners: - - https://raw.githubusercontent.com/kubernetes/kubernetes-docs-cn/master/OWNERS - **reference-docs** - Owners: - https://raw.githubusercontent.com/kubernetes-incubator/reference-docs/master/OWNERS - **website** - Owners: - https://raw.githubusercontent.com/kubernetes/website/master/OWNERS +- **website-metadata** + - Owners: + - https://raw.githubusercontent.com/kubernetes-sigs/website-metadata/master/OWNERS ## GitHub Teams The below teams can be mentioned on issues and PRs in order to get attention from the right people. Note that the links to display team membership will only work if you are a member of the org. -The google groups contain the archive of Github team notifications. -Mentioning a team on Github will CC its group. -Monitor these for Github activity if you are not a member of the team. - -| Team Name | Details | Google Groups | Description | -| --------- |:-------:|:-------------:| ----------- | -| @kubernetes/sig-docs-maintainers | [link](https://github.com/orgs/kubernetes/teams/sig-docs-maintainers) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-docs-maintainers) | Documentation Maintainers | -| @kubernetes/sig-docs-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-docs-pr-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-docs-pr-reviews) | Documentation PR Reviewers | +| Team Name | Details | Description | +| --------- |:-------:| ----------- | +| @kubernetes/sig-docs-maintainers | [link](https://github.com/orgs/kubernetes/teams/sig-docs-maintainers) | Documentation maintainers | +| @kubernetes/sig-docs-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-docs-pr-reviews) | Documentation PR reviews | +| @kubernetes/sig-docs-ko-owners | [link](https://github.com/orgs/kubernetes/teams/sig-docs-ko-owners) | Korean localization | +| @kubernetes/sig-docs-ja-owners | [link](https://github.com/orgs/kubernetes/teams/sig-docs-ja-owners) | Japanese localization | +| @kubernetes/sig-docs-zh-owners | [link](https://github.com/orgs/kubernetes/teams/sig-docs-zh-owners) | Chinese localization | ## Goals diff --git a/sig-docs/migrated-from-wiki/roadmap-docs.md b/sig-docs/migrated-from-wiki/roadmap-docs.md index 63f453e42..d0fed561b 100644 --- a/sig-docs/migrated-from-wiki/roadmap-docs.md +++ b/sig-docs/migrated-from-wiki/roadmap-docs.md @@ -2,7 +2,7 @@ If you'd like to help with documentation, please read the [kubernetes.io site instructions](https://git.k8s.io/kubernetes.github.io/README.md). -If you'd like to contribute an example, please read the [guidelines](https://git.k8s.io/kubernetes/examples/guidelines.md). +If you'd like to contribute an example, please read the [guidelines](https://git.k8s.io/examples/guidelines.md). Owners: @kubernetes/docs, @kubernetes/examples diff --git a/sig-gcp/README.md b/sig-gcp/README.md index 7091af2ec..98bc5047c 100644 --- a/sig-gcp/README.md +++ b/sig-gcp/README.md @@ -5,13 +5,13 @@ Please do not edit this file directly, but instead make changes to the sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> +---> # GCP Special Interest Group A Special Interest Group for building, deploying, maintaining, supporting, and using Kubernetes on the Google Cloud Platform. ## Meetings -* Regular SIG Meeting: [Thursdays at 16:00 UTC](https://zoom.us/j/761149873) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=16:00&tz=UTC). +* Regular SIG Meeting: [Thursdays at 16:00 UTC](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=16:00&tz=UTC). * [Meeting notes and Agenda](https://docs.google.com/document/d/1mtmwZ4oVSSWhbEw8Lfzvc7ig84qxUpdK6uHyJp8rSGU/edit). ## Leadership @@ -29,28 +29,27 @@ The Chairs of the SIG run operations and processes governing the SIG. ## Subprojects The following subprojects are owned by sig-gcp: -- **cloud-provider-gcp** +- **gcp-compute-persistent-disk-csi-driver** - Owners: - - https://raw.githubusercontent.com/kubernetes/cloud-provider-gcp/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/gcp-compute-persistent-disk-csi-driver/master/OWNERS +- **gcp-filestore-csi-driver** + - Owners: + - https://raw.githubusercontent.com/kubernetes-sigs/gcp-filestore-csi-driver/master/OWNERS ## GitHub Teams The below teams can be mentioned on issues and PRs in order to get attention from the right people. Note that the links to display team membership will only work if you are a member of the org. -The google groups contain the archive of Github team notifications. -Mentioning a team on Github will CC its group. -Monitor these for Github activity if you are not a member of the team. - -| Team Name | Details | Google Groups | Description | -| --------- |:-------:|:-------------:| ----------- | -| @kubernetes/sig-gcp-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-gcp-api-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-gcp-api-reviews) | API Changes and Reviews | -| @kubernetes/sig-gcp-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-gcp-bugs) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-gcp-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-gcp-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-gcp-feature-requests) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-gcp-feature-requests) | Feature Requests | -| @kubernetes/sig-gcp-misc | [link](https://github.com/orgs/kubernetes/teams/sig-gcp-misc) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-gcp-misc) | General Discussion | -| @kubernetes/sig-gcp-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-gcp-pr-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-gcp-pr-reviews) | PR Reviews | -| @kubernetes/sig-gcp-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-gcp-proposals) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-gcp-proposals) | Design Proposals | -| @kubernetes/sig-gcp-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-gcp-test-failures) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-gcp-test-failures) | Test Failures and Triage | +| Team Name | Details | Description | +| --------- |:-------:| ----------- | +| @kubernetes/sig-gcp-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-gcp-api-reviews) | API Changes and Reviews | +| @kubernetes/sig-gcp-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-gcp-bugs) | Bug Triage and Troubleshooting | +| @kubernetes/sig-gcp-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-gcp-feature-requests) | Feature Requests | +| @kubernetes/sig-gcp-misc | [link](https://github.com/orgs/kubernetes/teams/sig-gcp-misc) | General Discussion | +| @kubernetes/sig-gcp-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-gcp-pr-reviews) | PR Reviews | +| @kubernetes/sig-gcp-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-gcp-proposals) | Design Proposals | +| @kubernetes/sig-gcp-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-gcp-test-failures) | Test Failures and Triage | diff --git a/sig-governance.md b/sig-governance.md index dd28d606a..8a80302a7 100644 --- a/sig-governance.md +++ b/sig-governance.md @@ -2,6 +2,7 @@ In order to standardize Special Interest Group efforts, create maximum transparency, and route contributors to the appropriate SIG, SIGs should follow the guidelines stated below: +* Create a charter and have it approved according to the [SIG charter process] * Meet regularly, at least for 30 minutes every 3 weeks, except November and December * Keep up-to-date meeting notes, linked from the SIG's page in the community repo * Announce meeting agenda and minutes after each meeting, on their SIG mailing list @@ -9,26 +10,33 @@ In order to standardize Special Interest Group efforts, create maximum transpare * Ensure the SIG's mailing list and slack channel are archived * Report activity in the weekly community meeting at least once every 6 weeks * Participate in release planning meetings and retrospectives, and burndown meetings, as needed -* Ensure related work happens in a project-owned github org and repository, with code and tests explicitly owned and supported by the SIG, including issue triage, PR reviews, test-failure response, bug fixes, etc. +* Ensure related work happens in a project-owned github org and repository, with code and tests explicitly owned and supported by the SIG, including issue triage, PR reviews, test-failure response, bug fixes, etc. * Use the above forums as the primary means of working, communicating, and collaborating, as opposed to private emails and meetings -* Represent the SIG for the PM group - see [PM SIG representatives](/sig-product-management/SIG%20PM%20representatives.md). -## SIG roles -- **SIG Participant**: active in one or more areas of the project; wide - variety of roles are represented -- **SIG Lead**: SIG organizer +In addition, SIGs have the following responsibilities to SIG PM: +* identify SIG annual roadmap +* identify all SIG features in the current release +* actively track / maintain SIG features within [k/features](https://github.com/kubernetes/features) +* attend [SIG PM](/sig-pm/README.md) meetings, as needed / requested + +[SIG charter process]: /committee-steering/governance/README.md + +## SIG Roles + +Defining SIG Roles is a function of the SIG Charter. +Guidelines for drafting a SIG Charter can be found [here](/committee-steering/governance/README.md). ## SIG creation and maintenance procedure ### Prerequisites -* Propose the new SIG publicly, including a brief mission statement, by emailing kubernetes-dev@googlegroups.com and kubernetes-users@googlegroups.com, then wait a couple of days for feedback +* Work with the Steering Committee to scope the SIG and get provisional approval. + Follow the [SIG charter process] to propose and obtain approval for a charter. * Ask a repo maintainer to create a github label, if one doesn't already exist: sig/foo * Request a new [kubernetes.slack.com](http://kubernetes.slack.com) channel (#sig-foo) from [@parispittman](https://github.com/parispittman) or [@castrojo](https://github.com/castrojo). New users can join at [slack.kubernetes.io](http://slack.kubernetes.io). -* Slack activity is archived at [kubernetes.slackarchive.io](http://kubernetes.slackarchive.io). To start archiving a new channel invite the slackarchive bot to the channel via `/invite @slackarchive` * Organize video meetings as needed. No need to wait for the [Weekly Community Video Conference](community/README.md) to discuss. Please report summary of SIG activities there. * Request a Zoom account by emailing Paris Pittman(`parispittman@google.com`) and Jorge Castro(`jorge@heptio.com`). You must set up a google group (see below) for the SIG leads so that all the SIG leads have the ability to reset the password if necessary. - * Read [how to use YouTube](/community/K8sYoutubeCollaboration.md) for publishing your videos to the Kubernetes channel. + * Read [how to use YouTube](/communication/K8sYoutubeCollaboration.md) for publishing your videos to the Kubernetes channel. * Calendars 1. Create a calendar on your own account. Make it public. 2. Share it with all SIG leads with full ownership of the calendar - they can edit, rename, or even delete it. @@ -36,101 +44,70 @@ In order to standardize Special Interest Group efforts, create maximum transpare 4. Share it with the SIG mailing list, lowest privileges. 5. Share individual events with `cgnt364vd8s86hr2phapfjc6uk@group.calendar.google.com` to publish on the universal calendar. * Use existing proposal and PR process (to be documented) -* Announce new SIG on kubernetes-dev@googlegroups.com +* Announce new SIG on kubernetes-dev@googlegroups.com +* Leads should [subscribe to the kubernetes-sig-leads mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-leads) * Submit a PR to add a row for the SIG to the table in the kubernetes/community README.md file, to create a kubernetes/community directory, and to add any SIG-related docs, schedules, roadmaps, etc. to your new kubernetes/community/SIG-foo directory. -### **Creating service accounts for the SIG** +### Discussion Platforms -With a purpose to distribute the channels of notification and discussion of the various topics, every SIG has to use multiple accounts to GitHub mentioning and notifications. Below the procedure is explained step-by-step. +Your SIG needs a place to discuss topics asynchronously. You have two options, a traditional mailing list via Google Groups, or a category on [discuss.kubernetes.io](discuss.kubernetes.io). The main difference is Groups is primarily email-based with a web UI tacked on, and Discuss is primarily a Web UI with email tacked-on. The other difference is that your SIG/WG is responsible for moderating your Google Group; with discuss you just depend on the usual community moderation. -NOTE: This procedure is managed and maintained by **[@idvoretskyi](https://github.com/idvoretskyi)**; please, reach him directly in case of any questions/suggestions. +- Working Groups, due to their temporary nature, are strongly encouraged to consider using an existing SIG mailing list if appropriate, otherwise use a discuss category for less management overhead. +- SIGs, due to their usage of calendars, and Zoom accounts, are strongly encouraged to use a traditional mailing list. -#### **Google Groups creation** +Choose one: -Create Google Groups at [https://groups.google.com/forum/#!creategroup](https://groups.google.com/forum/#!creategroup), following the procedure: +#### Create a Category -* Each SIG should have one discussion groups, and a number of groups for mirroring relevant github notifications; -* Create groups using the name conventions below; -* Groups should be created as e-mail lists with at least three owners (including sarahnovotny at google.com and ihor.dvoretskyi at gmail.com); -* To add the owners, visit the Group Settings (drop-down menu on the right side), select Direct Add Members on the left side and add Sarah and Ihor via email address (with a suitable welcome message); in Members/All Members select Ihor and Sarah and assign to an "owner role"; -* Set "View topics", "Post", "Join the Group" permissions to be "Public" +Post a message asking for a category in the [Site Feedback and Help](https://discuss.kubernetes.io/c/site-feedback) section and a moderator will create your category for you and provide you with a URL and mail address to post to. -Name convention: +#### Creating a Google Group -* kubernetes-sig-foo (the discussion group) -* kubernetes-sig-foo-leads (list for the leads, to be used with Zoom and Calendars) -* kubernetes-sig-foo-misc -* kubernetes-sig-foo-test-failures -* kubernetes-sig-foo-bugs -* kubernetes-sig-foo-feature-requests -* kubernetes-sig-foo-proposals -* kubernetes-sig-foo-pr-reviews -* kubernetes-sig-foo-api-reviews +Create a Google Group at [https://groups.google.com/forum/#!creategroup](https://groups.google.com/forum/#!creategroup), following the procedure: -Example: +Each SIG must have two discussion groups with the following settings. -* kubernetes-sig-onprem -* kubernetes-sig-onprem-misc -* kubernetes-sig-onprem-test-failures -* kubernetes-sig-onprem-bugs -* kubernetes-sig-onprem-feature-requests -* kubernetes-sig-onprem-proposals -* kubernetes-sig-onprem-pr-reviews -* kubernetes-sig-onprem-api-reviews +- kubernetes-sig-foo (the discussion group): + - Anyone can view content + - Anyone can join + - Anyone can post + - Only members can view the list of members +- kubernetes-sig-foo-leads (list for the leads, to be used with Zoom and Calendars) + - Only members can view group content + - Anyone can apply to join + - Anyone can post + - Only members can view the list of members +- Groups should be created as e-mail lists with at least three owners (including parispittman at google.com and ihor.dvoretskyi at gmail.com); +- To add the owners, visit the Group Settings (drop-down menu on the right side), select Direct Add Members on the left side and add Paris and Ihor via email address (with a suitable welcome message); in Members/All Members select Ihor and Paris and assign to an "owner role" +- Set "View topics", "Post", "Join the Group" permissions to be "Public" -#### **GitHub users creation** +## SIG/WG Retirement -Create the GitHub users at [https://github.com/join](https://github.com/join), using the name convention below. +Sometimes it might be necessary to sunset a SIG or Working Group. +SIGs/WGs may also merge with an existing SIG/WG if deemed appropriate, and would save project overhead in the long run. +Working Groups in particular are more ephemeral than SIGs, so this process should be followed when the Working Group has accomplished it's mission. -As an e-mail address, please, use the Google Group e-mail address of the respective Google Group, created before (i.e. - for user â€k8s-mirror-foo-misc’ use â€[kubernetes-sig-foo-misc@googlegroups.com](mailto:kubernetes-sig-foo-misc@googlegroups.com)’). After creating the GitHub users, please, add these users to the Kubernetes organization. If you don't have enough permissions to do that (by default, you don't), please request **@idvoretskyi** (backup person - **@sarahnovotny**) to help you with this. If GitHub contacts you about having too many robot accounts, please let us know. +- Retiring a SIG for is covered in the [SIG Governance](https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance.md) +- Retiring a Working Group is covered in [WG Governance](https://github.com/kubernetes/community/blob/master/committee-steering/governance/wg-governance.md) +The process for closing a SIG/WG is as follows: -Name convention: - -* k8s-mirror-foo-misc -* k8s-mirror-foo-test-failures -* k8s-mirror-foo-bugs -* k8s-mirror-foo-feature-requests -* k8s-mirror-foo-proposals -* k8s-mirror-foo-pr-reviews -* k8s-mirror-foo-api-reviews - -There is no need for a k8s-mirro-foo user. - -Example: - -* k8s-mirror-onprem-misc -* k8s-mirror-onprem-test-failures -* k8s-mirror-onprem-bugs -* k8s-mirror-onprem-feature-requests -* k8s-mirror-onprem-proposals -* k8s-mirror-onprem-pr-reviews -* k8s-mirror-onprem-api-reviews - -NOTE: We have found that Github's notification autocompletion finds the users before the corresponding teams. This is the reason we recommend naming the users `k8s-mirror-foo-*` instead of `k8s-sig-foo-*`. If you previously created users named `k8s-sig-foo-*`, we recommend you rename them. - -#### **Create the GitHub teams** - -Create the GitHub teams at [https://github.com/orgs/kubernetes/new-team](https://github.com/orgs/kubernetes/new-team), using the name convention below. Please, add the GitHub users (created before) to the GitHub teams respectively. - -Name convention: - -* sig-foo-misc -* sig-foo-test-failures -* sig-foo-bugs -* sig-foo-feature-requests -* sig-foo-proposals -* sig-foo-pr-reviews -* sig-foo-api-reviews - -Note that there should not be a sig-foo team. We want to encourage contributors to select the most appropriate team to notify. - -Example: - -* sig-onprem-misc -* sig-onprem-test-failures -* sig-onprem-bugs -* sig-onprem-feature-requests -* sig-onprem-proposals -* sig-onprem-pr-reviews -* sig-onprem-api-reviews +- SIG Chairs agree to disband. This decision should follow the decision making process of the SIG's Charter. +- Send a email to kubernetes-dev to let people know the SIG has either closed or merged with another SIG. This will let SIG Contributor Experience know that they need to help you archive/deactivate project resources. + - Consider sending a [closing summary](https://docs.google.com/document/d/1qZcAvuWBznR_oEaPWtwm7U4JNT91m8r9YOUvInU-src/edit#heading=h.jsw0l2t0ra8) to the list. +- Work with SIG Contributor Experience to: + - Archive the mailing list/group + - Archive the leads mailing list/group + - Archive the slack channel + - Deactivate the group's Zoom license + - Move all appropriate github repositories to an appropriate archive or a repo outside of the Kubernetes org + - Each subproject a SIG owns must transfer ownership to a new SIG, outside the project, or be retired + - File an issue with kubernetes/org if multiple repos that need to be retired + - Coordinate with SIG Testing on the following topics (if necessary) + - Retire or transfer any test-infra jobs owned by the SIG + - Retire or transfer any testgrid dashboards owned by the SIG + - Clean up and remove all GitHub teams that refer to that SIG/WG + - Migrate/Remove/Deprecate any SIG/WG labels in [labels.yaml](https://git.k8s.io/test-infra/label_sync/labels.yaml) + - Ensure that the YouTube Collaboration links are removed +- Remove SIG Calendar and events from the community calendar +- Update `sigs.yaml` to reflect the removal of the SIG/WG \ No newline at end of file diff --git a/sig-ibmcloud/OWNERS b/sig-ibmcloud/OWNERS new file mode 100644 index 000000000..4d8ea9244 --- /dev/null +++ b/sig-ibmcloud/OWNERS @@ -0,0 +1,6 @@ +reviewers: + - sig-ibmcloud-leads +approvers: + - sig-ibmcloud-leads +labels: + - sig/ibmcloud diff --git a/sig-ibmcloud/README.md b/sig-ibmcloud/README.md new file mode 100644 index 000000000..d433e956a --- /dev/null +++ b/sig-ibmcloud/README.md @@ -0,0 +1,42 @@ + +# IBMCloud Special Interest Group + +A Special Interest Group (SIG) for building, deploying, maintaining, supporting, and using Kubernetes on IBM Public and Private Clouds. + +## Meetings +* Regular SIG Meeting: [Wednesdays at 14:00 EST](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=14:00&tz=EST). + * [Meeting notes and Agenda](https://docs.google.com/document/d/1qd_LTu5GFaxUhSWTHigowHt3XwjJVf1L57kupj8lnwg/edit). + +## Leadership + +### Chairs +The Chairs of the SIG run operations and processes governing the SIG. + +* Khalid Ahmed (**[@khahmed](https://github.com/khahmed)**), IBM +* Richard Theis (**[@rtheis](https://github.com/rtheis)**), IBM +* Sahdev Zala (**[@spzala](https://github.com/spzala)**), IBM + +## Contact +* [Slack](https://kubernetes.slack.com/messages/sig-ibmcloud) +* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-ibmcloud) +* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fibmcloud) + +## GitHub Teams + +The below teams can be mentioned on issues and PRs in order to get attention from the right people. +Note that the links to display team membership will only work if you are a member of the org. + +| Team Name | Details | Description | +| --------- |:-------:| ----------- | +| @kubernetes/sig-ibmcloud-misc | [link](https://github.com/orgs/kubernetes/teams/sig-ibmcloud-misc) | General Discussion | + + + + diff --git a/sig-ibmcloud/charter.md b/sig-ibmcloud/charter.md new file mode 100644 index 000000000..eb81a2ff9 --- /dev/null +++ b/sig-ibmcloud/charter.md @@ -0,0 +1,38 @@ +# SIG IBMCloud Charter + +This charter adheres to the conventions described in the [Kubernetes Charter README] and uses +the Roles and Organization Management outlined in [sig-governance]. + +## Scope + +The IBMCloud SIG enables activities and discussion around building, deploying, maintaining, supporting, +and using Kubernetes on IBM Public and Private Clouds. + +### In scope +- Determining and documenting best practices for configuring Kubernetes on IBM Cloud Kubernetes Service (IKS). +- Determining and documenting best practices for configuring Kubernetes on IBM Cloud Private (ICP). +- Discussing IKS and ICP tracking of Kubernetes features and releases. +- Utilizing Kubernetes and related CNCF projects (e.g. Helm, Istio) by IKS and ICP. +- Discussing bugs and feature requests recorded as Kubernetes upstream issues on GitHub. These issues should be tagged with `sig/ibmcloud`. + +#### Code, Binaries and Services + +The work to have a cloud provider specific public code repository is in progress. This section will be updated once the work is complete. Kubernetes upstream code that +is directly related to IKS or ICP issues or features can be discussed. + +### Out of scope + +* Internal or commercial aspects of IKS and ICP. + +## Roles and Organization Management + +This SIG adheres to the Roles and Organization Management outlined in [sig-governance] +and opts-in to updates and modifications to [sig-governance], with exception that the SIG only +has the Chair role at present. Chairs must also fulfill all of the responsibilities of the Tech Lead role as outlined in [sig-governance]. + +### Subproject Creation +Associated subprojects are created following the `by SIG Technical Leads` option procedure described in [sig-governance]. + +[sig-governance]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance.md +[Kubernetes Charter README]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/README.md +[SIG README]: https://github.com/kubernetes/community/blob/master/sig-ibmcloud/README.md diff --git a/sig-instrumentation/README.md b/sig-instrumentation/README.md index a3e63341f..ef81e9a70 100644 --- a/sig-instrumentation/README.md +++ b/sig-instrumentation/README.md @@ -5,14 +5,14 @@ Please do not edit this file directly, but instead make changes to the sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> +---> # Instrumentation Special Interest Group Covers best practices for cluster observability through metrics, logging, and events across all Kubernetes components and development of relevant components such as Heapster and kube-state-metrics. Coordinates metric requirements of different SIGs for other components through finding common APIs. ## Meetings -* Regular SIG Meeting: [Thursdays at 17:30 UTC](https://zoom.us/j/5342565819) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=17:30&tz=UTC). - * [Meeting notes and Agenda](https://docs.google.com/document/d/1gWuAATtlmI7XJILXd31nA4kMq6U9u63L70382Y3xcbM/edit). +* Regular SIG Meeting: [Thursdays at 17:30 UTC](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=17:30&tz=UTC). + * [Meeting notes and Agenda](https://docs.google.com/document/d/17emKiwJeqfrCsv0NZ2FtyDbenXGtTNCsDEiLbPa7x7Y/edit). ## Leadership @@ -42,25 +42,25 @@ The following subprojects are owned by sig-instrumentation: - **metrics-server** - Owners: - https://raw.githubusercontent.com/kubernetes-incubator/metrics-server/master/OWNERS +- **metrics** + - Owners: + - https://raw.githubusercontent.com/kubernetes/metrics/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/metrics/OWNERS ## GitHub Teams The below teams can be mentioned on issues and PRs in order to get attention from the right people. Note that the links to display team membership will only work if you are a member of the org. -The google groups contain the archive of Github team notifications. -Mentioning a team on Github will CC its group. -Monitor these for Github activity if you are not a member of the team. - -| Team Name | Details | Google Groups | Description | -| --------- |:-------:|:-------------:| ----------- | -| @kubernetes/sig-instrumentation-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-instrumentation-api-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-instrumentation-api-reviews) | API Changes and Reviews | -| @kubernetes/sig-instrumentation-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-instrumentation-bugs) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-instrumentation-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-instrumentation-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-instrumentation-feature-requests) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-instrumentation-feature-requests) | Feature Requests | -| @kubernetes/sig-instrumentation-misc | [link](https://github.com/orgs/kubernetes/teams/sig-instrumentation-misc) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-instrumentation-misc) | General Discussion | -| @kubernetes/sig-instrumentation-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-instrumentation-pr-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-instrumentation-pr-reviews) | PR Reviews | -| @kubernetes/sig-instrumentation-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-instrumentation-proposals) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-instrumentation-proposals) | Design Proposals | -| @kubernetes/sig-instrumentation-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-instrumentation-test-failures) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-instrumentation-test-failures) | Test Failures and Triage | +| Team Name | Details | Description | +| --------- |:-------:| ----------- | +| @kubernetes/sig-instrumentation-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-instrumentation-api-reviews) | API Changes and Reviews | +| @kubernetes/sig-instrumentation-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-instrumentation-bugs) | Bug Triage and Troubleshooting | +| @kubernetes/sig-instrumentation-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-instrumentation-feature-requests) | Feature Requests | +| @kubernetes/sig-instrumentation-misc | [link](https://github.com/orgs/kubernetes/teams/sig-instrumentation-misc) | General Discussion | +| @kubernetes/sig-instrumentation-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-instrumentation-pr-reviews) | PR Reviews | +| @kubernetes/sig-instrumentation-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-instrumentation-proposals) | Design Proposals | +| @kubernetes/sig-instrumentation-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-instrumentation-test-failures) | Test Failures and Triage | diff --git a/sig-instrumentation/charter.md b/sig-instrumentation/charter.md new file mode 100644 index 000000000..d767a7061 --- /dev/null +++ b/sig-instrumentation/charter.md @@ -0,0 +1,73 @@ +# SIG Instrumentation Charter + +This charter adheres to the conventions described in the [Kubernetes Charter README] and uses +the Roles and Organization Management outlined in [sig-governance]. + +## Scope + +Owns best practices for cluster observability through metrics and logging +across all Kubernetes components and development of components required for all +Kubernetes clusters (eg. heapster, metrics-server). + +### In scope + +SIG-Instrumentation revolves around the process of instrumenting and exposing +observability signals. + +The act of instrumenting components not owned by SIG-Instrumentation is out of +scope, however SIG-Instrumentation is there to advise any contributors with +instrumentation decisions. + +As well as giving advice in regards to instrumentation, SIG-Instrumentation +coordinates metric requirements of different SIGs for other components through +finding common APIs (such as the resource/core, custom and external metrics +APIs). + + +#### Code, Binaries and Services + +[List of subprojects](https://github.com/kubernetes/community/tree/master/sig-instrumentation#subprojects) + +- Components required for any Kubernetes cluster in regards to observability. Also referred to as the [core metrics pipeline][core-metrics-pipeline], meaning metrics that are to be consumed by the scheduler, kubectl and autoscaling. ([kubernetes-incubator/metrics-server](https://github.com/kubernetes-incubator/metrics-server), [kubenernetes/heapster](https://github.com/kubernetes/heapster)) +- Interfaces/API definitions required for any Kubernetes cluster in regards to observability. These the APIs defined in order to interface external system (such as Prometheus, Stackdriver, etc.) to be exposed to Kubernetes as a common interface, in order for Kubernetes to be able to treat metric sources as a generic metrics API. ([kubernetes/metrics](https://github.com/kubernetes/metrics), [kubernetes-incubator/custom-metrics-apiserver](https://github.com/kubernetes-incubator/custom-metrics-apiserver)) +- Well established but optional components or adapters for Kubernetes clusters, if endorsed by members. Each component must have two or more members as maintainers. ([kubernetes/kube-state-metrics](https://github.com/kubernetes/kube-state-metrics), not yet officially owned by SIG-Instrumentation, but an example prospect for this category: [DirectXMan12/k8s-prometheus-adapter](https://github.com/DirectXMan12/k8s-prometheus-adapter)) + +#### Cross-cutting and Externally Facing Processes + +- Guidance for instrumentation in order to ensure consistent and high quality instrumentation of core Kubernetes components. This includes: + - Reviewing any instrumentation related changes and additions. + - Guidance on what should be instrumented as well as dimensions of the same. (see [Instrumenting Kubernetes Guide][instrumenting-kubernetes]) + - Creating, adding and maintaining the Kubernetes instrumentation guidelines. + - Coordinate cross SIG-Instrumentation efforts. + - The interface of log files and their directory structure written out by container runtimes to be processed by other systems further, is shared responsibility between [SIG Node](sig-node) and SIG Instrumentation. + +### Out of scope + +- Processing of signals. For example ingesting metrics, logs, events into external systems. +- Dictating what states must result in an alert. Suggestions or opt-in alerts may be in scope. +- Cloud provider specific addons are out of scope and should be taken care of by the respective SIG. +- The act of writing log files, their format, or how they are to be processed afterwards. + +## Roles and Organization Management + +This SIG follows adheres to the Roles and Organization Management outlined in [sig-governance] +and opts-in to updates and modifications to [sig-governance]. + +### Additional responsibilities of Tech Leads + +- No additional responsibilities of Tech Leads + +### Deviations from [sig-governance] + +Tech Leads must also fulfill all of the responsibilities of the Chair role as outlined in [sig-governance]. + +### Subproject Creation + +By SIG Technical Leads + +[sig-governance]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance.md +[sig-node]: https://github.com/kubernetes/community/tree/master/sig-node +[sigs.yaml]: https://github.com/kubernetes/community/blob/master/sigs.yaml#L964-L1018 +[Kubernetes Charter README]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/README.md +[instrumenting-kubernetes]: https://github.com/kubernetes/community/blob/master/contributors/devel/instrumentation.md +[core-metrics-pipeline]: https://kubernetes.io/docs/tasks/debug-application-cluster/core-metrics-pipeline/ diff --git a/sig-list.md b/sig-list.md index 2ff74fe38..f8dabd8a1 100644 --- a/sig-list.md +++ b/sig-list.md @@ -5,7 +5,7 @@ Please do not edit this file directly, but instead make changes to the sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> +---> # SIGs and Working Groups Most community activity is organized into Special Interest Groups (SIGs), @@ -22,51 +22,52 @@ When the need arises, a [new SIG can be created](sig-creation-procedure.md) | Name | Label | Chairs | Contact | Meetings | |------|-------|--------|---------|----------| -|[API Machinery](sig-api-machinery/README.md)|api-machinery|* [Daniel Smith](https://github.com/lavalamp), Google
* [David Eads](https://github.com/deads2k), Red Hat
|* [Slack](https://kubernetes.slack.com/messages/sig-api-machinery)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-api-machinery)|* Regular SIG Meeting: [Wednesdays at 11:00 PT (Pacific Time) (biweekly)](https://zoom.us/my/apimachinery)
-|[Apps](sig-apps/README.md)|apps|* [Matt Farina](https://github.com/mattfarina), Samsung SDS
* [Adnan Abdulhussein](https://github.com/prydonius), Bitnami
* [Kenneth Owens](https://github.com/kow3ns), Google
|* [Slack](https://kubernetes.slack.com/messages/sig-apps)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-apps)|* Regular SIG Meeting: [Mondays at 9:00 PT (Pacific Time) (weekly)](https://zoom.us/my/sig.apps)
* (charts) Charts Chat: [Tuesdays at 9:00 PT (Pacific Time) (biweekly)](https://zoom.us/j/166909412)
* (helm) Helm Developer call: [Thursdays at 9:30 PT (Pacific Time) (weekly)](https://zoom.us/j/4526666954)
-|[Architecture](sig-architecture/README.md)|architecture|* [Brian Grant](https://github.com/bgrant0607), Google
* [Jaice Singer DuMars](https://github.com/jdumars), Microsoft
|* [Slack](https://kubernetes.slack.com/messages/sig-architecture)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-architecture)|* Regular SIG Meeting: [Thursdays at 15:30 UTC (weekly)](https://zoom.us/j/2018742972)
-|[Auth](sig-auth/README.md)|auth|* [Eric Chiang](https://github.com/ericchiang), Red Hat
* [Jordan Liggitt](https://github.com/liggitt), Red Hat
* [Tim Allclair](https://github.com/tallclair), Google
|* [Slack](https://kubernetes.slack.com/messages/sig-auth)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-auth)|* Regular SIG Meeting: [Wednesdays at 11:00 PT (Pacific Time) (biweekly)](https://zoom.us/my/k8s.sig.auth)
-|[Autoscaling](sig-autoscaling/README.md)|autoscaling|* [Marcin Wielgus](https://github.com/mwielgus), Google
* [Solly Ross](https://github.com/directxman12), Red Hat
|* [Slack](https://kubernetes.slack.com/messages/sig-autoscaling)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-autoscaling)|* Regular SIG Meeting: [Mondays at 14:00 UTC (biweekly/triweekly)](https://zoom.us/my/k8s.sig.autoscaling)
-|[AWS](sig-aws/README.md)|aws|* [Justin Santa Barbara](https://github.com/justinsb)
* [Kris Nova](https://github.com/kris-nova), Heptio
* [Bob Wise](https://github.com/countspongebob), AWS
|* [Slack](https://kubernetes.slack.com/messages/sig-aws)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-aws)|* Regular SIG Meeting: [Fridays at 9:00 PT (Pacific Time) (biweekly)](https://zoom.us/my/k8ssigaws)
-|[Azure](sig-azure/README.md)|azure|* [Jason Hansen](https://github.com/slack), Microsoft
* [Cole Mickens](https://github.com/colemickens), Red Hat
* [Jaice Singer DuMars](https://github.com/jdumars), Microsoft
|* [Slack](https://kubernetes.slack.com/messages/sig-azure)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-azure)|* Regular SIG Meeting: [Wednesdays at 16:00 UTC (weekly)](https://zoom.us/j/2015551212)
-|[Big Data](sig-big-data/README.md)|big-data|* [Anirudh Ramanathan](https://github.com/foxish), Google
* [Erik Erlandson](https://github.com/erikerlandson), Red Hat
|* [Slack](https://kubernetes.slack.com/messages/sig-big-data)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-big-data)|* Regular SIG Meeting: [Wednesdays at 17:00 UTC (weekly)](https://zoom.us/my/sig.big.data)
-|[CLI](sig-cli/README.md)|cli|* [Maciej Szulik](https://github.com/soltysh), Red Hat
* [Phillip Wittrock](https://github.com/pwittrock), Google
* [Tony Ado](https://github.com/AdoHe), Alibaba
|* [Slack](https://kubernetes.slack.com/messages/sig-cli)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-cli)|* Regular SIG Meeting: [Wednesdays at 09:00 PT (Pacific Time) (biweekly)](https://zoom.us/my/sigcli)
-|[Cluster Lifecycle](sig-cluster-lifecycle/README.md)|cluster-lifecycle|* [Luke Marsden](https://github.com/lukemarsden), Weave
* [Robert Bailey](https://github.com/roberthbailey), Google
* [Lucas Käldström](https://github.com/luxas), Luxas Labs (occasionally contracting for Weaveworks)
* [Timothy St. Clair](https://github.com/timothysc), Heptio
|* [Slack](https://kubernetes.slack.com/messages/sig-cluster-lifecycle)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-cluster-lifecycle)|* Regular SIG Meeting: [Tuesdays at 09:00 PT (Pacific Time) (weekly)](https://zoom.us/j/166836%E2%80%8B624)
* kubeadm Office Hours: [Wednesdays at 09:00 PT (Pacific Time) (weekly)](https://zoom.us/j/166836%E2%80%8B624)
* Cluster API working group: [Wednesdays at 10:00 PT (Pacific Time) (weekly)](https://zoom.us/j/166836%E2%80%8B624)
* kops Office Hours: [Fridays at 09:00 PT (Pacific Time) (biweekly)](https://zoom.us/my/k8ssigaws)
-|[Cluster Ops](sig-cluster-ops/README.md)|cluster-ops|* [Rob Hirschfeld](https://github.com/zehicle), RackN
* [Jaice Singer DuMars](https://github.com/jdumars), Microsoft
|* [Slack](https://kubernetes.slack.com/messages/sig-cluster-ops)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-cluster-ops)|* Regular SIG Meeting: [Thursdays at 20:00 UTC (biweekly)](https://zoom.us/j/297937771)
-|[Contributor Experience](sig-contributor-experience/README.md)|contributor-experience|* [Elsie Phillips](https://github.com/Phillels), CoreOS
* [Paris Pittman](https://github.com/parispittman), Google
|* [Slack](https://kubernetes.slack.com/messages/sig-contribex)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-wg-contribex)|* Regular SIG Meeting: [Wednesdays at 9:30 PT (Pacific Time) (biweekly)](https://zoom.us/j/7658488911)
* Off Week Sync (Contributor Guide, Mentorship): [Wednesdays at 9:30 PT (Pacific Time) (biweekly)](https://zoom.us/j/873813890)
-|[Docs](sig-docs/README.md)|docs|* [Zach Corleissen](https://github.com/zacharysarah), Linux Foundation
* [Andrew Chen](https://github.com/chenopis), Google
* [Jared Bhatti](https://github.com/jaredbhatti), Google
|* [Slack](https://kubernetes.slack.com/messages/sig-docs)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-docs)|* Regular SIG Meeting: [Tuesdays at 17:30 UTC (weekly)](https://zoom.us/j/678394311)
-|[GCP](sig-gcp/README.md)|gcp|* [Adam Worrall](https://github.com/abgworrall), Google
|* [Slack](https://kubernetes.slack.com/messages/sig-gcp)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-gcp)|* Regular SIG Meeting: [Thursdays at 16:00 UTC (biweekly)](https://zoom.us/j/761149873)
-|[Instrumentation](sig-instrumentation/README.md)|instrumentation|* [Piotr Szczesniak](https://github.com/piosz), Google
* [Frederic Branczyk](https://github.com/brancz), Red Hat
|* [Slack](https://kubernetes.slack.com/messages/sig-instrumentation)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-instrumentation)|* Regular SIG Meeting: [Thursdays at 17:30 UTC (biweekly)](https://zoom.us/j/5342565819)
-|[Multicluster](sig-multicluster/README.md)|multicluster|* [Christian Bell](https://github.com/csbell), Google
* [Quinton Hoole](https://github.com/quinton-hoole), Huawei
|* [Slack](https://kubernetes.slack.com/messages/sig-multicluster)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-multicluster)|* Regular SIG Meeting: [Tuesdays at 9:30 PT (Pacific Time) (biweekly)](https://zoom.us/my/k8s.mc)
* Federation v2 Working Group: [Wednesdays at 9:30 PT (Pacific Time) (weekly)](https://zoom.us/my/k8s.mc)
-|[Network](sig-network/README.md)|network|* [Tim Hockin](https://github.com/thockin), Google
* [Dan Williams](https://github.com/dcbw), Red Hat
* [Casey Davenport](https://github.com/caseydavenport), Tigera
|* [Slack](https://kubernetes.slack.com/messages/sig-network)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-network)|* Regular SIG Meeting: [Thursdays at 14:00 PT (Pacific Time) (biweekly)](https://zoom.us/j/5806599998)
-|[Node](sig-node/README.md)|node|* [Dawn Chen](https://github.com/dchen1107), Google
* [Derek Carr](https://github.com/derekwaynecarr), Red Hat
|* [Slack](https://kubernetes.slack.com/messages/sig-node)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-node)|* Regular SIG Meeting: [Tuesdays at 10:00 PT (Pacific Time) (weekly)](https://zoom.us/j/4799874685)
-|[On Premise](sig-on-premise/README.md)|onprem|* [Marco Ceppi](https://github.com/marcoceppi), Canonical
* [Dalton Hubble](https://github.com/dghubble), CoreOS
|* [Slack](https://kubernetes.slack.com/messages/sig-onprem)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-on-prem)|* Regular SIG Meeting: [Wednesdays at 16:00 UTC (weekly)](https://zoom.us/my/k8s.sig.onprem)
-|[OpenStack](sig-openstack/README.md)|openstack|* [Chris Hoge](https://github.com/hogepodge), OpenStack Foundation
* [David Lyle](https://github.com/dklyle), Intel
* [Robert Morse](https://github.com/rjmorse), Ticketmaster
|* [Slack](https://kubernetes.slack.com/messages/sig-openstack)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-openstack)|* Regular SIG Meeting: [Wednesdays at 16:00 PT (Pacific Time) (biweekly)](https://zoom.us/j/417251241)
-|[Product Management](sig-product-management/README.md)|none|* [Aparna Sinha](https://github.com/apsinha), Google
* [Ihor Dvoretskyi](https://github.com/idvoretskyi), CNCF
* [Caleb Miles](https://github.com/calebamiles), Google
|* [Slack](https://kubernetes.slack.com/messages/kubernetes-pm)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-pm)|* Regular SIG Meeting: [Tuesdays at 16:00 UTC (biweekly)](https://zoom.us/j/845373595)
-|[Release](sig-release/README.md)|release|* [Jaice Singer DuMars](https://github.com/jdumars), Microsoft
* [Caleb Miles](https://github.com/calebamiles), Google
|* [Slack](https://kubernetes.slack.com/messages/sig-release)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-release)|* Regular SIG Meeting: [Tuesdays at 21:00 UTC (biweekly)](https://zoom.us/j/664772523)
-|[Scalability](sig-scalability/README.md)|scalability|* [Wojciech Tyczynski](https://github.com/wojtek-t), Google
* [Bob Wise](https://github.com/countspongebob), Samsung SDS
|* [Slack](https://kubernetes.slack.com/messages/sig-scalability)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-scale)|* Regular SIG Meeting: [Thursdays at 16:30 UTC (bi-weekly)](https://zoom.us/j/989573207)
-|[Scheduling](sig-scheduling/README.md)|scheduling|* [Bobby (Babak) Salamat](https://github.com/bsalamat), Google
* [Timothy St. Clair](https://github.com/timothysc), Heptio
|* [Slack](https://kubernetes.slack.com/messages/sig-scheduling)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-scheduling)|* Regular SIG Meeting: [Thursdays at 20:00 UTC (biweekly)](https://zoom.us/j/7767391691)
-|[Service Catalog](sig-service-catalog/README.md)|service-catalog|* [Paul Morie](https://github.com/pmorie), Red Hat
* [Aaron Schlesinger](https://github.com/arschles), Microsoft
* [Ville Aikas](https://github.com/vaikas-google), Google
* [Doug Davis](https://github.com/duglin), IBM
|* [Slack](https://kubernetes.slack.com/messages/sig-service-catalog)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-service-catalog)|* Regular SIG Meeting: [Mondays at 13:00 PT (Pacific Time) (weekly)](https://zoom.us/j/7201225346)
-|[Storage](sig-storage/README.md)|storage|* [Saad Ali](https://github.com/saad-ali), Google
* [Bradley Childs](https://github.com/childsb), Red Hat
|* [Slack](https://kubernetes.slack.com/messages/sig-storage)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-storage)|* Regular SIG Meeting: [Thursdays at 9:00 PT (Pacific Time) (biweekly)](https://zoom.us/j/614261834)
-|[Testing](sig-testing/README.md)|testing|* [Aaron Crickenberger](https://github.com/spiffxp), Samsung SDS
* [Erick Feja](https://github.com/fejta), Google
* [Steve Kuznetsov](https://github.com/stevekuznetsov), Red Hat
* [Timothy St. Clair](https://github.com/timothysc), Heptio
|* [Slack](https://kubernetes.slack.com/messages/sig-testing)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-testing)|* Regular SIG Meeting: [Tuesdays at 13:00 PT (Pacific Time) (weekly)](https://zoom.us/my/k8s.sig.testing)
* (testing-commons) Testing Commons: [Wednesdays at 07:30 PT (Pacific Time) (bi-weekly)](https://zoom.us/my/k8s.sig.testing)
+|[API Machinery](sig-api-machinery/README.md)|api-machinery|* [Daniel Smith](https://github.com/lavalamp), Google
* [David Eads](https://github.com/deads2k), Red Hat
|* [Slack](https://kubernetes.slack.com/messages/sig-api-machinery)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-api-machinery)|* Regular SIG Meeting: [Wednesdays at 11:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
+|[Apps](sig-apps/README.md)|apps|* [Matt Farina](https://github.com/mattfarina), Samsung SDS
* [Adnan Abdulhussein](https://github.com/prydonius), Bitnami
* [Kenneth Owens](https://github.com/kow3ns), Google
|* [Slack](https://kubernetes.slack.com/messages/sig-apps)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-apps)|* Regular SIG Meeting: [Mondays at 9:00 PT (Pacific Time) (weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
+|[Architecture](sig-architecture/README.md)|architecture|* [Brian Grant](https://github.com/bgrant0607), Google
* [Jaice Singer DuMars](https://github.com/jdumars), Google
* [Matt Farina](https://github.com/mattfarina), Samsung SDS
|* [Slack](https://kubernetes.slack.com/messages/sig-architecture)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-architecture)|* Regular SIG Meeting: [Thursdays at 19:00 UTC (weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
+|[Auth](sig-auth/README.md)|auth|* [Mike Danese](https://github.com/mikedanese), Google
* [Mo Khan](https://github.com/enj), Red Hat
* [Tim Allclair](https://github.com/tallclair), Google
|* [Slack](https://kubernetes.slack.com/messages/sig-auth)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-auth)|* Regular SIG Meeting: [Wednesdays at 11:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
+|[Autoscaling](sig-autoscaling/README.md)|autoscaling|* [Marcin Wielgus](https://github.com/mwielgus), Google
* [Solly Ross](https://github.com/directxman12), Google
|* [Slack](https://kubernetes.slack.com/messages/sig-autoscaling)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-autoscaling)|* Regular SIG Meeting: [Mondays at 14:00 UTC (biweekly/triweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
+|[AWS](sig-aws/README.md)|aws|* [Justin Santa Barbara](https://github.com/justinsb)
* [Kris Nova](https://github.com/kris-nova), Heptio
* [Nishi Davidson](https://github.com/d-nishi), AWS
|* [Slack](https://kubernetes.slack.com/messages/sig-aws)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-aws)|* Regular SIG Meeting: [Fridays at 9:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
+|[Azure](sig-azure/README.md)|azure|* [Stephen Augustus](https://github.com/justaugustus), Red Hat
* [Dave Strebel](https://github.com/dstrebel), Microsoft
|* [Slack](https://kubernetes.slack.com/messages/sig-azure)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-azure)|* Regular SIG Meeting: [Wednesdays at 16:00 UTC (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
+|[Big Data](sig-big-data/README.md)|big-data|* [Anirudh Ramanathan](https://github.com/foxish), Rockset
* [Erik Erlandson](https://github.com/erikerlandson), Red Hat
* [Yinan Li](https://github.com/liyinan926), Google
|* [Slack](https://kubernetes.slack.com/messages/sig-big-data)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-big-data)|* Regular SIG Meeting: [Wednesdays at 17:00 UTC (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
+|[CLI](sig-cli/README.md)|cli|* [Maciej Szulik](https://github.com/soltysh), Red Hat
* [Sean Sullivan](https://github.com/seans3), Google
|* [Slack](https://kubernetes.slack.com/messages/sig-cli)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-cli)|* Regular SIG Meeting: [Wednesdays at 09:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
+|[Cloud Provider](sig-cloud-provider/README.md)|cloud-provider|* [Andrew Sy Kim](https://github.com/andrewsykim), DigitalOcean
* [Chris Hoge](https://github.com/hogepodge), OpenStack Foundation
* [Jago Macleod](https://github.com/jagosan), Google
|* [Slack](https://kubernetes.slack.com/messages/sig-cloud-provider)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-cloud-provider)|* Regular SIG Meeting: [Wednesdays at 1:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
* (cloud-provider-extraction) Weekly Sync removing the in-tree cloud providers led by @cheftako and @d-nishi: [Thursdays at 13:30 PT (Pacific Time) (weekly)](https://docs.google.com/document/d/1KLsGGzNXQbsPeELCeF_q-f0h0CEGSe20xiwvcR2NlYM/edit)
+|[Cluster Lifecycle](sig-cluster-lifecycle/README.md)|cluster-lifecycle|* [Robert Bailey](https://github.com/roberthbailey), Google
* [Lucas Käldström](https://github.com/luxas), Luxas Labs (occasionally contracting for Weaveworks)
* [Timothy St. Clair](https://github.com/timothysc), Heptio
|* [Slack](https://kubernetes.slack.com/messages/sig-cluster-lifecycle)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-cluster-lifecycle)|* Regular SIG Meeting: [Tuesdays at 09:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
* kubeadm Office Hours: [Wednesdays at 09:00 PT (Pacific Time) (weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
* Cluster API office hours: [Wednesdays at 10:00 PT (Pacific Time) (weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
* Cluster API Provider Implementers' office hours (EMEA): [Wednesdays at 15:00 CEST (Central European Summer Time) (weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
* Cluster API Provider Implementers' office hours (US West Coast): [Tuesdays at 12:00 PT (Pacific Time) (weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
* Cluster API (AWS implementation) office hours: [Mondays at 10:00 PT (Pacific Time) (weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
* kops Office Hours: [Fridays at 09:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
* Kubespray Office Hours: [Wednesdays at 07:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
+|[Cluster Ops](sig-cluster-ops/README.md)|cluster-ops|* [Rob Hirschfeld](https://github.com/zehicle), RackN
* [Jaice Singer DuMars](https://github.com/jdumars), Google
|* [Slack](https://kubernetes.slack.com/messages/sig-cluster-ops)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-cluster-ops)|* Regular SIG Meeting: [Thursdays at 20:00 UTC (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
+|[Contributor Experience](sig-contributor-experience/README.md)|contributor-experience|* [Elsie Phillips](https://github.com/Phillels), CoreOS
* [Paris Pittman](https://github.com/parispittman), Google
|* [Slack](https://kubernetes.slack.com/messages/sig-contribex)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-contribex)|* Regular SIG Meeting: [Wednesdays at 9:30 PT (Pacific Time) (weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
+|[Docs](sig-docs/README.md)|docs|* [Andrew Chen](https://github.com/chenopis), Google
* [Zach Corleissen](https://github.com/zacharysarah), Linux Foundation
* [Jennifer Rondeau](https://github.com/bradamant3), Heptio
|* [Slack](https://kubernetes.slack.com/messages/sig-docs)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-docs)|* Regular SIG Meeting: [Tuesdays at 17:30 UTC (weekly - except fourth Tuesday every month)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
* APAC SIG Meeting: [Wednesdays at 02:00 UTC (monthly - fourth Wednesday every month)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
+|[GCP](sig-gcp/README.md)|gcp|* [Adam Worrall](https://github.com/abgworrall), Google
|* [Slack](https://kubernetes.slack.com/messages/sig-gcp)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-gcp)|* Regular SIG Meeting: [Thursdays at 16:00 UTC (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
+|[IBMCloud](sig-ibmcloud/README.md)|ibmcloud|* [Khalid Ahmed](https://github.com/khahmed), IBM
* [Richard Theis](https://github.com/rtheis), IBM
* [Sahdev Zala](https://github.com/spzala), IBM
|* [Slack](https://kubernetes.slack.com/messages/sig-ibmcloud)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-ibmcloud)|* Regular SIG Meeting: [Wednesdays at 14:00 EST (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
+|[Instrumentation](sig-instrumentation/README.md)|instrumentation|* [Piotr Szczesniak](https://github.com/piosz), Google
* [Frederic Branczyk](https://github.com/brancz), Red Hat
|* [Slack](https://kubernetes.slack.com/messages/sig-instrumentation)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-instrumentation)|* Regular SIG Meeting: [Thursdays at 17:30 UTC (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
+|[Multicluster](sig-multicluster/README.md)|multicluster|* [Christian Bell](https://github.com/csbell), Google
* [Quinton Hoole](https://github.com/quinton-hoole), Huawei
|* [Slack](https://kubernetes.slack.com/messages/sig-multicluster)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-multicluster)|* Regular SIG Meeting: [Tuesdays at 9:30 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
* Federation v2 Working Group: [Wednesdays at 7:30 PT (Pacific Time) (weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
+|[Network](sig-network/README.md)|network|* [Tim Hockin](https://github.com/thockin), Google
* [Dan Williams](https://github.com/dcbw), Red Hat
* [Casey Davenport](https://github.com/caseydavenport), Tigera
|* [Slack](https://kubernetes.slack.com/messages/sig-network)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-network)|* Regular SIG Meeting: [Thursdays at 14:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
+|[Node](sig-node/README.md)|node|* [Dawn Chen](https://github.com/dchen1107), Google
* [Derek Carr](https://github.com/derekwaynecarr), Red Hat
|* [Slack](https://kubernetes.slack.com/messages/sig-node)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-node)|* Regular SIG Meeting: [Tuesdays at 10:00 PT (Pacific Time) (weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
+|[OpenStack](sig-openstack/README.md)|openstack|* [Chris Hoge](https://github.com/hogepodge), OpenStack Foundation
* [David Lyle](https://github.com/dklyle), Intel
* [Robert Morse](https://github.com/rjmorse), Ticketmaster
|* [Slack](https://kubernetes.slack.com/messages/sig-openstack)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-openstack)|* Regular SIG Meeting: [Wednesdays at 16:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/15UwgLbEyZyXXxVtsThcSuPiJru4CuqU9p3ttZSfTaY4/edit)
+|[PM](sig-pm/README.md)|pm|* [Aparna Sinha](https://github.com/apsinha), Google
* [Ihor Dvoretskyi](https://github.com/idvoretskyi), CNCF
* [Caleb Miles](https://github.com/calebamiles), Google
|* [Slack](https://kubernetes.slack.com/messages/sig-pm)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-pm)|* Regular SIG Meeting: [Tuesdays at 18:30 UTC (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
+|[Release](sig-release/README.md)|release|* [Caleb Miles](https://github.com/calebamiles), Google
* [Stephen Augustus](https://github.com/justaugustus), Red Hat
* [Tim Pepper](https://github.com/tpepper), VMware
|* [Slack](https://kubernetes.slack.com/messages/sig-release)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-release)|* Regular SIG Meeting: [Tuesdays at 21:00 UTC (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
+|[Scalability](sig-scalability/README.md)|scalability|* [Wojciech Tyczynski](https://github.com/wojtek-t), Google
* [Bob Wise](https://github.com/countspongebob), AWS
|* [Slack](https://kubernetes.slack.com/messages/sig-scalability)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-scale)|* Regular SIG Meeting: [Thursdays at 16:30 UTC (bi-weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
+|[Scheduling](sig-scheduling/README.md)|scheduling|* [Bobby (Babak) Salamat](https://github.com/bsalamat), Google
* [Klaus Ma](https://github.com/k82cn), Huawei
|* [Slack](https://kubernetes.slack.com/messages/sig-scheduling)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-scheduling)|* 10AM PT Meeting: [Thursdays at 17:00 UTC (biweekly starting Thursday June 7, 2018)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
* 5PM PT Meeting: [Thursdays at 24:00 UTC (biweekly starting Thursday June 14, 2018)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
+|[Service Catalog](sig-service-catalog/README.md)|service-catalog|* [Carolyn Van Slyck](https://github.com/carolynvs), Microsoft
* [Michael Kibbe](https://github.com/kibbles-n-bytes), Google
* [Doug Davis](https://github.com/duglin), IBM
* [Jay Boyd](https://github.com/jboyd01), Red Hat
|* [Slack](https://kubernetes.slack.com/messages/sig-service-catalog)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-service-catalog)|* Regular SIG Meeting: [Mondays at 13:00 PT (Pacific Time) (weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
+|[Storage](sig-storage/README.md)|storage|* [Saad Ali](https://github.com/saad-ali), Google
* [Bradley Childs](https://github.com/childsb), Red Hat
|* [Slack](https://kubernetes.slack.com/messages/sig-storage)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-storage)|* Regular SIG Meeting: [Thursdays at 9:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
+|[Testing](sig-testing/README.md)|testing|* [Aaron Crickenberger](https://github.com/spiffxp), Google
* [Erick Feja](https://github.com/fejta), Google
* [Steve Kuznetsov](https://github.com/stevekuznetsov), Red Hat
* [Timothy St. Clair](https://github.com/timothysc), Heptio
|* [Slack](https://kubernetes.slack.com/messages/sig-testing)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-testing)|* Regular SIG Meeting: [Tuesdays at 13:00 PT (Pacific Time) (weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
* (testing-commons) Testing Commons: [Wednesdays at 07:30 PT (Pacific Time) (bi-weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
|[UI](sig-ui/README.md)|ui|* [Dan Romlein](https://github.com/danielromlein), Google
* [Sebastian Florek](https://github.com/floreks), Fujitsu
|* [Slack](https://kubernetes.slack.com/messages/sig-ui)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-ui)|* Regular SIG Meeting: [Thursdays at 18:00 CET (Central European Time) (weekly)](https://groups.google.com/forum/#!forum/kubernetes-sig-ui)
-|[VMware](sig-vmware/README.md)|vmware|* [Fabio Rapposelli](https://github.com/frapposelli), VMware
* [Steve Wong](https://github.com/cantbewong), VMware
|* [Slack](https://kubernetes.slack.com/messages/sig-vmware)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-vmware)|* Regular SIG Meeting: [Thursdays at 18:00 UTC (bi-weekly)](https://zoom.us/j/183662780)
-|[Windows](sig-windows/README.md)|windows|* [Michael Michael](https://github.com/michmike), Apprenda
|* [Slack](https://kubernetes.slack.com/messages/sig-windows)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-windows)|* Regular SIG Meeting: [Tuesdays at 12:30 Eastern Standard Time (EST) (weekly)](https://zoom.us/my/sigwindows)
+|[VMware](sig-vmware/README.md)|vmware|* [Fabio Rapposelli](https://github.com/frapposelli), VMware
* [Steve Wong](https://github.com/cantbewong), VMware
|* [Slack](https://kubernetes.slack.com/messages/sig-vmware)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-vmware)|* Regular SIG Meeting: [Thursdays at 11:00 PT (Pacific Time) (bi-weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
* Cloud Provider vSphere monthly syncup: [Wednesdays at 09:00 PT (Pacific Time) (monthly - first Wednesday every month)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
* Cluster API Provider vSphere bi-weekly syncup: [Wednesdays at 13:00 PT (Pacific Time) (bi-weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
+|[Windows](sig-windows/README.md)|windows|* [Michael Michael](https://github.com/michmike), VMware
* [Patrick Lang](https://github.com/patricklang), Microsoft
|* [Slack](https://kubernetes.slack.com/messages/sig-windows)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-windows)|* Regular SIG Meeting: [Tuesdays at 12:30 Eastern Standard Time (EST) (weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
### Master Working Group List | Name | Organizers | Contact | Meetings | |------|------------|---------|----------| -|[App Def](wg-app-def/README.md)|* [Antoine Legrand](https://github.com/ant31), CoreOS
* [Bryan Liles](https://github.com/bryanl), Heptio
* [Gareth Rushgrove](https://github.com/garethr), Docker
|* [Slack](https://kubernetes.slack.com/messages/wg-app-def)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-wg-app-def)|* Regular WG Meeting: [Wednesdays at 16:00 UTC (bi-weekly)](https://zoom.us/j/748123863)
-|[Apply](wg-apply/README.md)|* [Daniel Smith](https://github.com/lavalamp), Google
|* [Slack](https://kubernetes.slack.com/messages/wg-apply)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-wg-apply)|* Regular WG Meeting: [Tuesdays at 9:30 PT (Pacific Time) (weekly)]()
-|[Cloud Provider](wg-cloud-provider/README.md)|* [Sidhartha Mani](https://github.com/wlan0), Caascade Labs
* [Jago Macleod](https://github.com/jagosan), Google
|* [Slack](https://kubernetes.slack.com/messages/wg-cloud-provider)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-wg-cloud-provider)|* Regular WG Meeting: [Wednesdays at 10:00 PT (Pacific Time) (weekly)](https://zoom.us/my/cloudprovider)
-|[Cluster API](wg-cluster-api/README.md)|* [Kris Nova](https://github.com/kris-nova), Heptio
* [Robert Bailey](https://github.com/roberthbailey), Google
|* [Slack](https://kubernetes.slack.com/messages/cluster-api)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-cluster-lifecycle)|* Regular WG Meeting: [s at ()]()
-|[Container Identity](wg-container-identity/README.md)|* [Clayton Coleman](https://github.com/smarterclayton), Red Hat
* [Greg Gastle](https://github.com/destijl), Google
|* [Slack](https://kubernetes.slack.com/messages/wg-container-identity)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-wg-container-identity)|* Regular WG Meeting: [Tuesdays at 15:00 UTC (bi-weekly (On demand))](TBD)
-|[Kubeadm Adoption](wg-kubeadm-adoption/README.md)|* [Lucas Käldström](https://github.com/luxas), Luxas Labs (occasionally contracting for Weaveworks)
* [Justin Santa Barbara](https://github.com/justinsb)
|* [Slack](https://kubernetes.slack.com/messages/sig-cluster-lifecycle)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-cluster-lifecycle)|* Regular WG Meeting: [Tuesdays at 18:00 UTC (bi-weekly)](https://zoom.us/j/166836%E2%80%8B624)
-|[Machine Learning](wg-machine-learning/README.md)|* [Vishnu Kannan](https://github.com/vishh), Google
* [Kenneth Owens](https://github.com/kow3ns), Google
|* [Slack](https://kubernetes.slack.com/messages/wg-machine-learning)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-wg-machine-learning)|* Regular WG Meeting: [Thursdays at 13:00 PT (Pacific Time) (biweekly)](https://zoom.us/j/4799874685)
-|[Multitenancy](wg-multitenancy/README.md)|* [David Oppenheimer](https://github.com/davidopp), Google
* [Jessie Frazelle](https://github.com/jessfraz), Microsoft
|* [Slack](https://kubernetes.slack.com/messages/wg-multitenancy)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-wg-multitenancy)|* Regular WG Meeting: [Wednesdays at 11:00 PT (Pacific Time) (biweekly)](https://zoom.us/my/k8s.sig.auth)
-|[Policy](wg-policy/README.md)|* [Howard Huang](https://github.com/hannibalhuang), Huawei
* [Torin Sandall](https://github.com/tsandall), Styra
* [David Oppenheimer](https://github.com/davidopp), Google
* [Clayton Coleman](https://github.com/smarterclayton), Red Hat
* [Xuan Jia](https://github.com/xuanjia), China Mobile
|* [Slack](https://kubernetes.slack.com/messages/wg-policy)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-wg-policy)|* Regular WG Meeting: [Thursdays at 17:00 PT (Pacific Time) (weekly)](https://zoom.us/j/421702434)
-|[Resource Management](wg-resource-management/README.md)|* [Vishnu Kannan](https://github.com/vishh), Google
* [Derek Carr](https://github.com/derekwaynecarr), Red Hat
|* [Slack](https://kubernetes.slack.com/messages/wg-resource-mgmt)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-wg-resource-management)|* Regular WG Meeting: [Wednesdays at 11:00 PT (Pacific Time) (biweekly (On demand))](https://zoom.us/j/4799874685)
+|[App Def](wg-app-def/README.md)|* [Antoine Legrand](https://github.com/ant31), CoreOS
* [Bryan Liles](https://github.com/bryanl), Heptio
* [Gareth Rushgrove](https://github.com/garethr), Docker
|* [Slack](https://kubernetes.slack.com/messages/wg-app-def)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-wg-app-def)|* Regular WG Meeting: [Wednesdays at 16:00 UTC (bi-weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
+|[Apply](wg-apply/README.md)|* [Daniel Smith](https://github.com/lavalamp), Google
|* [Slack](https://kubernetes.slack.com/messages/wg-apply)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-wg-apply)|* Regular WG Meeting: [Tuesdays at 9:30 PT (Pacific Time) (weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
+|[Container Identity](wg-container-identity/README.md)|* [Clayton Coleman](https://github.com/smarterclayton), Red Hat
* [Greg Castle](https://github.com/destijl), Google
|* [Slack](https://kubernetes.slack.com/messages/wg-container-identity)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-wg-container-identity)|* Regular WG Meeting: [Wednesdays at 10:00 PDT (bi-weekly (On demand))](https://zoom.us/my/k8s.sig.auth)
+|[IoT Edge](wg-iot-edge/README.md)|* [Cindy Xing](https://github.com/cindyxing), Huawei
* [Dejan Bosanac](https://github.com/dejanb), Red Hat
* [Preston Holmes](https://github.com/ptone), Google
* [Steve Wong](https://github.com/cantbewong), VMWare
|* [Slack](https://kubernetes.slack.com/messages/wg-iot-edge)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-wg-iot-edge)|* Regular WG Meeting: [Fridays at 16:00 UTC (bi-weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
+|[Kubeadm Adoption](wg-kubeadm-adoption/README.md)|* [Lucas Käldström](https://github.com/luxas), Luxas Labs (occasionally contracting for Weaveworks)
* [Justin Santa Barbara](https://github.com/justinsb)
|* [Slack](https://kubernetes.slack.com/messages/sig-cluster-lifecycle)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-cluster-lifecycle)|* Regular WG Meeting: [Tuesdays at 18:00 UTC (bi-weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
+|[Machine Learning](wg-machine-learning/README.md)|* [Vishnu Kannan](https://github.com/vishh), Google
* [Kenneth Owens](https://github.com/kow3ns), Google
* [Balaji Subramaniam](https://github.com/balajismaniam), Intel
* [Connor Doyle](https://github.com/ConnorDoyle), Intel
|* [Slack](https://kubernetes.slack.com/messages/wg-machine-learning)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-wg-machine-learning)|* Regular WG Meeting: [Thursdays at 13:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
+|[Multitenancy](wg-multitenancy/README.md)|* [David Oppenheimer](https://github.com/davidopp), Google
* [Jessie Frazelle](https://github.com/jessfraz), Microsoft
|* [Slack](https://kubernetes.slack.com/messages/wg-multitenancy)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-wg-multitenancy)|* Regular WG Meeting: [Wednesdays at 11:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
+|[Policy](wg-policy/README.md)|* [Howard Huang](https://github.com/hannibalhuang), Huawei
* [Torin Sandall](https://github.com/tsandall), Styra
* [Yisui Hu](https://github.com/easeway), Google
* [Erica von Buelow](https://github.com/ericavonb), Red Hat
* [Michael Elder](https://github.com/mdelder), IBM
|* [Slack](https://kubernetes.slack.com/messages/wg-policy)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-wg-policy)|* Regular WG Meeting: [Wednesdays at 16:00 PT (Pacific Time) (weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
+|[Resource Management](wg-resource-management/README.md)|* [Vishnu Kannan](https://github.com/vishh), Google
* [Derek Carr](https://github.com/derekwaynecarr), Red Hat
|* [Slack](https://kubernetes.slack.com/messages/wg-resource-mgmt)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-wg-resource-management)|* Regular WG Meeting: [Wednesdays at 11:00 PT (Pacific Time) (biweekly (On demand))](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)
+|[Security Audit](wg-security-audit/README.md)|* [Aaron Small](https://github.com/aasmall), Google
* [Joel Smith](https://github.com/joelsmith), Red Hat
* [Craig Ingram](https://github.com/cji), Salesforce
|* [Slack](https://kubernetes.slack.com/messages/)
* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-wg-audit)|* Regular WG Meeting: [Mondays at 13:00 PT (Pacific Time) (weekly)](https://docs.google.com/document/d/1RbC4SBZBlKth7IjYv_NaEpnmLGwMJ0ElpUOmsG-bdRA/edit)
diff --git a/sig-multicluster/README.md b/sig-multicluster/README.md index 37a438a56..62f368ccd 100644 --- a/sig-multicluster/README.md +++ b/sig-multicluster/README.md @@ -5,16 +5,18 @@ Please do not edit this file directly, but instead make changes to the sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> +---> # Multicluster Special Interest Group -A Special Interest Group focussed on solving common challenges related to the management of multiple Kubernetes clusters, and applications that exist therein. The SIG will be responsible for designing, discussing, implementing and maintaining API’s, tools and documentation related to multi-cluster administration and application management. This includes not only active automated approaches such as Cluster Federation, but also those that employ batch workflow-style continuous deployment systems like Spinnaker and others. Standalone building blocks for these and other similar systems (for example a cluster registry), and proposed changes to kubernetes core where appropriate will also be in scope. +A Special Interest Group focused on solving common challenges related to the management of multiple Kubernetes clusters, and applications that exist therein. The SIG will be responsible for designing, discussing, implementing and maintaining API’s, tools and documentation related to multi-cluster administration and application management. This includes not only active automated approaches such as Cluster Federation, but also those that employ batch workflow-style continuous deployment systems like Spinnaker and others. Standalone building blocks for these and other similar systems (for example a cluster registry), and proposed changes to kubernetes core where appropriate will also be in scope. + +The [charter](charter.md) defines the scope and governance of the Multicluster Special Interest Group. ## Meetings -* Regular SIG Meeting: [Tuesdays at 9:30 PT (Pacific Time)](https://zoom.us/my/k8s.mc) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=9:30&tz=PT%20%28Pacific%20Time%29). +* Regular SIG Meeting: [Tuesdays at 9:30 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=9:30&tz=PT%20%28Pacific%20Time%29). * [Meeting notes and Agenda](https://docs.google.com/document/d/18mk62nOXE_MCSSnb4yJD_8UadtzJrYyJxFwbrgabHe8/edit). * [Meeting recordings](https://www.youtube.com/watch?v=iWKC3FsNHWg&list=PL69nYSiGNLP0HqgyqTby6HlDEz7i1mb0-). -* Federation v2 Working Group: [Wednesdays at 9:30 PT (Pacific Time)](https://zoom.us/my/k8s.mc) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=9:30&tz=PT%20%28Pacific%20Time%29). +* Federation v2 Working Group: [Wednesdays at 7:30 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=7:30&tz=PT%20%28Pacific%20Time%29). * [Meeting notes and Agenda](https://docs.google.com/document/d/1v-Kb1pUs3ww_x0MiKtgcyTXCAuZlbVlz4_A9wS3_HXY/edit). * [Meeting recordings](https://www.youtube.com/playlist?list=PL69nYSiGNLP3iKP5EzMbtNT2zOZv6RCrX). @@ -31,24 +33,36 @@ The Chairs of the SIG run operations and processes governing the SIG. * [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-multicluster) * [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fmulticluster) +## Subprojects + +The following subprojects are owned by sig-multicluster: +- **federation-v1** + - Owners: + - https://raw.githubusercontent.com/kubernetes/federation/master/OWNERS +- **federation-v2** + - Owners: + - https://raw.githubusercontent.com/kubernetes-sigs/federation-v2/master/OWNERS +- **cluster-registry** + - Owners: + - https://raw.githubusercontent.com/kubernetes/cluster-registry/master/OWNERS +- **kubemci** + - Owners: + - https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-multicluster-ingress/master/OWNERS + ## GitHub Teams The below teams can be mentioned on issues and PRs in order to get attention from the right people. Note that the links to display team membership will only work if you are a member of the org. -The google groups contain the archive of Github team notifications. -Mentioning a team on Github will CC its group. -Monitor these for Github activity if you are not a member of the team. - -| Team Name | Details | Google Groups | Description | -| --------- |:-------:|:-------------:| ----------- | -| @kubernetes/sig-multicluster-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-multicluster-api-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-multicluster-api-reviews) | API Changes and Reviews | -| @kubernetes/sig-multicluster-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-multicluster-bugs) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-multicluster-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-multicluster-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-multicluster-feature-requests) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-multicluster-feature-requests) | Feature Requests | -| @kubernetes/sig-multicluster-misc | [link](https://github.com/orgs/kubernetes/teams/sig-multicluster-misc) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-multicluster-misc) | General Discussion | -| @kubernetes/sig-multicluster-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-multicluster-pr-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-multicluster-pr-reviews) | PR Reviews | -| @kubernetes/sig-multicluster-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-multicluster-test-failures) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-multicluster-test-failures) | Test Failures and Triage | -| @kubernetes/sig-mutlicluster-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-mutlicluster-proposals) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-mutlicluster-proposals) | Design Proposals | +| Team Name | Details | Description | +| --------- |:-------:| ----------- | +| @kubernetes/sig-multicluster-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-multicluster-api-reviews) | API Changes and Reviews | +| @kubernetes/sig-multicluster-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-multicluster-bugs) | Bug Triage and Troubleshooting | +| @kubernetes/sig-multicluster-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-multicluster-feature-requests) | Feature Requests | +| @kubernetes/sig-multicluster-misc | [link](https://github.com/orgs/kubernetes/teams/sig-multicluster-misc) | General Discussion | +| @kubernetes/sig-multicluster-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-multicluster-pr-reviews) | PR Reviews | +| @kubernetes/sig-multicluster-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-multicluster-test-failures) | Test Failures and Triage | +| @kubernetes/sig-mutlicluster-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-mutlicluster-proposals) | Design Proposals | ## Subprojects @@ -58,11 +72,12 @@ Control Plane for newer Multicluster-specific APIs. Discussions are ongoing to f | | | | -------------- |:-------| -| Recommended for Production | No code yet (discussions only). | -| General Availability | No. Prototypes only at this point. | +| Recommended for Production | Not yet. | +| General Availability | Beta by 2018-Q4. GA TBD. | | Current Level of Activity | Once to twice weekly discussions as part of Federation working group (most active SIG-Multicluster members). | | Owner(s) | Working Group | -| Where to find it? | Code prototypes in development (one [example here](https://github.com/marun/fnord)). Summary of meetings notes and meeting times [available](https://docs.google.com/document/d/1v-Kb1pUs3ww_x0MiKtgcyTXCAuZlbVlz4_A9wS3_HXY). | +| Where to find it? | https://github.com/kubernetes-sigs/federation-v2 | +| Meeting Agenda | https://docs.google.com/document/d/1v-Kb1pUs3ww_x0MiKtgcyTXCAuZlbVlz4_A9wS3_HXY | ### Cluster Registry Common abstraction for a Registry of Clusters that can store per-Cluster metadata and supports Kubernetes label selection. The Cluster Registry can be deployed as a standalone or an aggregated API server and currently provides a Registry of Clusters without any actively reconciling Kubernetes controller. The API design is documented [here](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/multicluster/cluster-registry/api-design.md) and is intended to serve as a basis to develop multicluster controllers. diff --git a/sig-multicluster/charter.md b/sig-multicluster/charter.md new file mode 100644 index 000000000..89df38658 --- /dev/null +++ b/sig-multicluster/charter.md @@ -0,0 +1,47 @@ +# SIG Multicluster Charter + +This charter adheres to the conventions described in the [Kubernetes Charter README] and uses +the Roles and Organization Management outlined in [sig-governance]. + +## Scope + +The scope of SIG Multicluster is limited to the following subprojects: + +- The [cluster-registry](https://github.com/kubernetes/cluster-registry) +- Kubernetes federation: + - [Federation v2](https://github.com/kubernetes-sigs/federation-v2) + - [Federation v1](https://github.com/kubernetes/federation) +- [Kubemci](https://github.com/GoogleCloudPlatform/k8s-multicluster-ingress) + +### In scope + +See [SIG README]. + +#### Code, Binaries and Services + +SIG Multicluster code and binaries are limited to those from one of the SIG subprojects. + +#### Cross-cutting and Externally Facing Processes + +- Consult with other SIGs and the community on how the in-scope mechanisms + should work and integrate with other areas of the wider Kubernetes ecosystem + +### Out of scope + +- Software that creates or manages the lifecycle of Kubernetes clusters + +## Roles and Organization Management + +This sig follows adheres to the Roles and Organization Management outlined in [sig-governance] +and opts-in to updates and modifications to [sig-governance]. + +### Subproject Creation + +SIG Multicluster delegates subproject approval to Technical Leads. See [Subproject creation - Option 1]. + +[sig-governance]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance.md +[sig-subprojects]: https://github.com/kubernetes/community/blob/master/sig-multicluster/README.md#subprojects +[sigs.yaml]: https://github.com/kubernetes/community/blob/master/sigs.yaml#L1042 +[Kubernetes Charter README]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/README.md +[Subproject creation - Option 1]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance.md#subproject-creation +[SIG README]: https://github.com/kubernetes/community/blob/master/sig-multicluster/README.md \ No newline at end of file diff --git a/sig-network/README.md b/sig-network/README.md index 425942705..e2684405e 100644 --- a/sig-network/README.md +++ b/sig-network/README.md @@ -5,13 +5,13 @@ Please do not edit this file directly, but instead make changes to the sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> +---> # Network Special Interest Group Covers networking in Kubernetes. ## Meetings -* Regular SIG Meeting: [Thursdays at 14:00 PT (Pacific Time)](https://zoom.us/j/5806599998) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=14:00&tz=PT%20%28Pacific%20Time%29). +* Regular SIG Meeting: [Thursdays at 14:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=14:00&tz=PT%20%28Pacific%20Time%29). * [Meeting notes and Agenda](https://docs.google.com/document/d/1_w77-zG_Xj0zYvEMfQZTQ-wPP4kXkpGD8smVtW_qqWM/edit). * [Meeting recordings](https://www.youtube.com/watch?v=phCA5-vWkVM&list=PL69nYSiGNLP2E8vmnqo5MwPOY25sDWIxb). @@ -35,8 +35,8 @@ The following subprojects are owned by sig-network: - **services** - Owners: - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/proxy/OWNERS - - https://raw.githubusercontent.com/kubernetes/pkg/kubernetes/master/controller/endpoint/OWNERS - - https://raw.githubusercontent.com/kubernetes/pkg/kubernetes/master/controller/service/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/endpoint/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/service/OWNERS - **kube-dns** - Owners: - https://raw.githubusercontent.com/kubernetes/dns/master/OWNERS @@ -60,19 +60,15 @@ The following subprojects are owned by sig-network: The below teams can be mentioned on issues and PRs in order to get attention from the right people. Note that the links to display team membership will only work if you are a member of the org. -The google groups contain the archive of Github team notifications. -Mentioning a team on Github will CC its group. -Monitor these for Github activity if you are not a member of the team. - -| Team Name | Details | Google Groups | Description | -| --------- |:-------:|:-------------:| ----------- | -| @kubernetes/sig-network-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-network-api-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-network-api-reviews) | API Changes and Reviews | -| @kubernetes/sig-network-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-network-bugs) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-network-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-network-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-network-feature-requests) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-network-feature-requests) | Feature Requests | -| @kubernetes/sig-network-misc | [link](https://github.com/orgs/kubernetes/teams/sig-network-misc) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-network-misc) | General Discussion | -| @kubernetes/sig-network-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-network-pr-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-network-pr-reviews) | PR Reviews | -| @kubernetes/sig-network-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-network-proposals) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-network-proposals) | Design Proposals | -| @kubernetes/sig-network-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-network-test-failures) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-network-test-failures) | Test Failures and Triage | +| Team Name | Details | Description | +| --------- |:-------:| ----------- | +| @kubernetes/sig-network-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-network-api-reviews) | API Changes and Reviews | +| @kubernetes/sig-network-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-network-bugs) | Bug Triage and Troubleshooting | +| @kubernetes/sig-network-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-network-feature-requests) | Feature Requests | +| @kubernetes/sig-network-misc | [link](https://github.com/orgs/kubernetes/teams/sig-network-misc) | General Discussion | +| @kubernetes/sig-network-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-network-pr-reviews) | PR Reviews | +| @kubernetes/sig-network-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-network-proposals) | Design Proposals | +| @kubernetes/sig-network-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-network-test-failures) | Test Failures and Triage | ## Areas of Responsibility @@ -87,8 +83,8 @@ SIG Network is responsible for the following Kubernetes subsystems: SIG Network is responsible for a number of issues and PRs. A summary can be found through GitHub search: -* [SIG Network PRs](https://github.com/issues?utf8=%E2%9C%93&q=team%3Akubernetes%2Fsig-network+is%3Aopen+is%3Apr+) -* [SIG Network Issues](https://github.com/issues?utf8=%E2%9C%93&q=team%3A%22kubernetes%2Fsig-network%22+is%3Aopen+is%3Aissue) +* [SIG Network PRs](https://github.com/kubernetes/kubernetes/pulls?q=is%3Apr+is%3Aopen+label%3Asig%2Fnetwork) +* [SIG Network Issues](https://github.com/kubernetes/kubernetes/issues?q=is%3Aissue+is%3Aopen+label%3Asig%2Fnetwork) ## Documents diff --git a/sig-network/charter.md b/sig-network/charter.md new file mode 100644 index 000000000..ca4e058c2 --- /dev/null +++ b/sig-network/charter.md @@ -0,0 +1,74 @@ +# SIG Network Charter + +This charter adheres to the conventions described in the [Kubernetes Charter README] and uses +the Roles and Organization Management outlined in [sig-governance]. + +## Scope + +SIG Network is responsible for the components, interfaces, and APIs which expose networking capabilities to Kubernetes +users and workloads. SIG Network also provides some reference implementations of these APIs, for +example kube-proxy as a reference implementation of the Service API. + +### In scope + +The following topics fall under ownership of this SIG: + +- Networking control plane and data paths. +- Network service abstractions. +- Service discovery (DNS). +- Service load balancing (L4, L7). +- Network security and identity. +- Cluster connectivity. +- Cross-cutting concerns such as scalability. +- Metrics and monitoring associated with networking components. + +#### Code, Binaries and Services + +- Services + - APIs for defining and grouping networking endpoints. + - APIs for defining L3/4 loadbalancing. + - Reference implementation (kube-proxy). +- Ingress + - APIs for defining L7 loadbalancing. +- APIs for defining network policy. +- Cluster DNS. +- Integration points with networking implementations (e.g. CNI integration). +- Container runtime interface (CRI) (With [sig-node]). +- Cloud provider network integrations (With [sig-cloud-provider]). + +#### Cross-cutting and Externally Facing Processes + +### Out of scope + +- The CNI specification itself, which is maintained outside the Kubernetes project +- Particular implementations of the CNI specification +- Particular implementations of the NetworkPolicy API +- Particular implementations of the Ingress API + +## Roles and Organization Management + +This sig adheres to the Roles and Organization Management outlined in [sig-governance] +and opts-in to updates and modifications to [sig-governance]. + +### Additional responsibilities of Chairs + +- None + +### Additional responsibilities of Tech Leads + +- None + +### Deviations from [sig-governance] + +- None + +### Subproject Creation + +SIG Technical Leads + +[sig-cloud-provider]: https://github.com/kubernetes/community/tree/master/sig-cloud-provider +[sig-node]: https://github.com/kubernetes/community/tree/master/sig-node + +[sig-governance]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance.md +[sig-subprojects]: https://github.com/kubernetes/community/blob/master/sig-network/README.md#subprojects +[Kubernetes Charter README]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/README.md diff --git a/sig-node/README.md b/sig-node/README.md index afad21201..13fdaebe3 100644 --- a/sig-node/README.md +++ b/sig-node/README.md @@ -5,12 +5,12 @@ Please do not edit this file directly, but instead make changes to the sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> +---> # Node Special Interest Group ## Meetings -* Regular SIG Meeting: [Tuesdays at 10:00 PT (Pacific Time)](https://zoom.us/j/4799874685) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=10:00&tz=PT%20%28Pacific%20Time%29). +* Regular SIG Meeting: [Tuesdays at 10:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=10:00&tz=PT%20%28Pacific%20Time%29). * [Meeting notes and Agenda](https://docs.google.com/document/d/1Ne57gvidMEWXR70OxxnRkYquAoMpt56o75oZtg-OeBg/edit?usp=sharing). * [Meeting recordings](https://www.youtube.com/watch?v=FbKOI9-x9hI&list=PL69nYSiGNLP1wJPj5DYWXjiArF-MJ5fNG). @@ -30,15 +30,12 @@ The Chairs of the SIG run operations and processes governing the SIG. ## Subprojects The following subprojects are owned by sig-node: -- **cri-containerd** - - Owners: - - https://raw.githubusercontent.com/kubernetes-incubator/cri-containerd/master/OWNERS - **cri-o** - Owners: - - https://raw.githubusercontent.com/kubernetes-incubator/cri-o/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/cri-o/master/OWNERS - **cri-tools** - Owners: - - https://raw.githubusercontent.com/kubernetes-incubator/cri-tools/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/cri-tools/master/OWNERS - **frakti** - Owners: - https://raw.githubusercontent.com/kubernetes/frakti/master/OWNERS @@ -48,7 +45,7 @@ The following subprojects are owned by sig-node: - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubelet/OWNERS - **node-feature-discovery** - Owners: - - https://raw.githubusercontent.com/kubernetes-incubator/node-feature-discovery/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/node-feature-discovery/master/OWNERS - **node-problem-detector** - Owners: - https://raw.githubusercontent.com/kubernetes/node-problem-detector/master/OWNERS @@ -61,35 +58,35 @@ The following subprojects are owned by sig-node: The below teams can be mentioned on issues and PRs in order to get attention from the right people. Note that the links to display team membership will only work if you are a member of the org. -The google groups contain the archive of Github team notifications. -Mentioning a team on Github will CC its group. -Monitor these for Github activity if you are not a member of the team. - -| Team Name | Details | Google Groups | Description | -| --------- |:-------:|:-------------:| ----------- | -| @kubernetes/sig-node-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-node-api-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-node-api-reviews) | API Changes and Reviews | -| @kubernetes/sig-node-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-node-bugs) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-node-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-node-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-node-feature-requests) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-node-feature-requests) | Feature Requests | -| @kubernetes/sig-node-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-node-pr-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-node-pr-reviews) | PR Reviews | -| @kubernetes/sig-node-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-node-proposals) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-node-proposals) | Design Proposals | -| @kubernetes/sig-node-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-node-test-failures) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-node-test-failures) | Test Failures and Triage | +| Team Name | Details | Description | +| --------- |:-------:| ----------- | +| @kubernetes/sig-node-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-node-api-reviews) | API Changes and Reviews | +| @kubernetes/sig-node-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-node-bugs) | Bug Triage and Troubleshooting | +| @kubernetes/sig-node-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-node-feature-requests) | Feature Requests | +| @kubernetes/sig-node-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-node-pr-reviews) | PR Reviews | +| @kubernetes/sig-node-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-node-proposals) | Design Proposals | +| @kubernetes/sig-node-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-node-test-failures) | Test Failures and Triage | ## Goals -Topics include, but are not limited to: +The following topics fall under scope of this SIG. -* Kubelet related features (e.g. Pod lifecycle) -* Node level performance and scalability (with [sig-scalability](../sig-scalability)) -* Node reliability -* Node lifecycle management (with [sig-cluster-lifecycle](../sig-cluster-lifecycle)) -* Container runtimes: docker, [rkt](../sig-rktnetes), etc. -* Images, package management -* Resource management (with [sig-scheduling](../sig-scheduling)) -* Issues related to monitoring (with [sig-instrumentation](../sig-instrumentation)) -* Node level security and Pod isolation (with [sig-auth](../sig-auth)) -* Kernel interactions (to a limited extent) -* ... +- Kubelet and its features +- Pod API and Pod behaviors (with [sig-architecture](../sig-architecture)) +- Node API (with [sig-architecture](../sig-architecture)) +- Node controller +- Node level performance and scalability (with [sig-scalability](../sig-scalability)) +- Node reliability (problem detection and remediation) +- Node lifecycle management (with [sig-cluster-lifecycle](../sig-cluster-lifecycle)) +- Container runtimes +- Device management +- Image management +- Node-level resource management (with [sig-scheduling](../sig-scheduling)) +- Hardware discovery +- Issues related to node, pod, container monitoring (with [sig-instrumentation](../sig-instrumentation)) +- Node level security and Pod isolation (with [sig-auth](../sig-auth)) +- Host OS and/or kernel interactions (to a limited extent) -We also work closely with [sig-storage](../sig-storage) and [sig-networking](../sig-networking). As you can see, this is a very cross-functional team! +We also work closely with [sig-storage](../sig-storage) and [sig-network](../sig-network). As you can see, this is a very cross-functional team! diff --git a/sig-node/charter.md b/sig-node/charter.md new file mode 100644 index 000000000..4150b6058 --- /dev/null +++ b/sig-node/charter.md @@ -0,0 +1,75 @@ +# SIG Node Charter + +This charter adheres to the conventions described in the [Kubernetes Charter README] and uses +the Roles and Organization Management outlined in [sig-governance]. + +## Scope + +SIG Node is responsible for the components that support the controlled +interactions between pods and host resources. We manage the lifecycle of pods +that are scheduled to a node. We focus on enabling a broad set of workload +types, including workloads with hardware specific or performance sensitive requirements. We maintain +isolation boundaries between pods on a node, as well as the pod and the host. We +aim to continuously improve node reliability. + +### In scope + +SIG [readme] + +#### Code, Binaries and Services + +- Kubelet and its features +- Pod API and Pod behaviors (with [sig-architecture](../sig-architecture)) +- Node API (with [sig-architecture](../sig-architecture)) +- Node controller +- Node level performance and scalability (with [sig-scalability](../sig-scalability)) +- Node reliability (problem detection and remediation) +- Node lifecycle management (with [sig-cluster-lifecycle](../sig-cluster-lifecycle)) +- Container runtimes +- Device management +- Image management +- Node-level resource management (with [sig-scheduling](../sig-scheduling)) +- Hardware discovery +- Issues related to node, pod, container monitoring (with [sig-instrumentation](../sig-instrumentation)) +- Node level security and Pod isolation (with [sig-auth](../sig-auth)) +- Host OS and/or kernel interactions (to a limited extent) + +#### Cross-cutting and Externally Facing Processes + +- CRI [validation] and [testing policy] +- Node [test grid] and [perf dashboard] + +### Out of scope + +- network management ([sig-network](../sig-network)) +- persistent storage management ([sig-storage](../sig-storage)) + +## Roles and Organization Management + +This sig adheres to the Roles and Organization Management outlined in [sig-governance] +and opts-in to updates and modifications to [sig-governance]. + +### Additional responsibilities of Chairs + +- Technical leads seeded by legacy SIG chairs from existing subproject owners + +### Additional responsibilities of Tech Leads + +None + +### Deviations from [sig-governance] + +None + +### Subproject Creation + +SIG Technical Leads + + +[validation]: https://github.com/kubernetes/community/blob/master/contributors/devel/cri-validation.md +[testing policy]: https://github.com/kubernetes/community/blob/master/contributors/devel/cri-testing-policy.md +[test grid]: https://k8s-testgrid.appspot.com/sig-node#Summary +[perf dashboard]: http://node-perf-dash.k8s.io/#/builds +[sig-governance]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance.md +[readme]: https://github.com/kubernetes/community/tree/master/sig-node +[Kubernetes Charter README]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/README.md \ No newline at end of file diff --git a/sig-on-premise/OWNERS b/sig-on-premise/OWNERS deleted file mode 100644 index 5df1d0278..000000000 --- a/sig-on-premise/OWNERS +++ /dev/null @@ -1,6 +0,0 @@ -reviewers: - - sig-on-premise-leads -approvers: - - sig-on-premise-leads -labels: - - sig/onprem diff --git a/sig-openstack/README.md b/sig-openstack/README.md index ede2636a3..78913846e 100644 --- a/sig-openstack/README.md +++ b/sig-openstack/README.md @@ -5,13 +5,13 @@ Please do not edit this file directly, but instead make changes to the sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> +---> # OpenStack Special Interest Group Coordinates the cross-community efforts of the OpenStack and Kubernetes communities. This includes OpenStack-related contributions to Kubernetes projects with OpenStack as: a deployment platform for Kubernetes; a service provider for Kubernetes; a collection of applications to run on Kubernetes. ## Meetings -* Regular SIG Meeting: [Wednesdays at 16:00 PT (Pacific Time)](https://zoom.us/j/417251241) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=16:00&tz=PT%20%28Pacific%20Time%29). +* Regular SIG Meeting: [Wednesdays at 16:00 PT (Pacific Time)](https://docs.google.com/document/d/15UwgLbEyZyXXxVtsThcSuPiJru4CuqU9p3ttZSfTaY4/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=16:00&tz=PT%20%28Pacific%20Time%29). * [Meeting notes and Agenda](https://docs.google.com/document/d/1iAQ3LSF_Ky6uZdFtEZPD_8i6HXeFxIeW4XtGcUJtPyU/edit?usp=sharing_eixpa_nl&ts=588b986f). * [Meeting recordings](https://www.youtube.com/watch?v=iCfUx7ilh0E&list=PL69nYSiGNLP20iTSChQ_i2QQmTBl3M7ax). @@ -29,31 +29,20 @@ The Chairs of the SIG run operations and processes governing the SIG. * [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-openstack) * [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fopenstack) -## Subprojects - -The following subprojects are owned by sig-openstack: -- **cloud-provider-openstack** - - Owners: - - https://raw.githubusercontent.com/kubernetes/cloud-provider-openstack/master/OWNERS - ## GitHub Teams The below teams can be mentioned on issues and PRs in order to get attention from the right people. Note that the links to display team membership will only work if you are a member of the org. -The google groups contain the archive of Github team notifications. -Mentioning a team on Github will CC its group. -Monitor these for Github activity if you are not a member of the team. - -| Team Name | Details | Google Groups | Description | -| --------- |:-------:|:-------------:| ----------- | -| @kubernetes/sig-openstack-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-openstack-api-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-openstack-api-reviews) | API Changes and Reviews | -| @kubernetes/sig-openstack-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-openstack-bugs) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-openstack-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-openstack-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-openstack-feature-requests) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-openstack-feature-requests) | Feature Requests | -| @kubernetes/sig-openstack-misc | [link](https://github.com/orgs/kubernetes/teams/sig-openstack-misc) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-openstack-misc) | General Discussion | -| @kubernetes/sig-openstack-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-openstack-pr-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-openstack-pr-reviews) | PR Reviews | -| @kubernetes/sig-openstack-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-openstack-proposals) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-openstack-proposals) | Design Proposals | -| @kubernetes/sig-openstack-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-openstack-test-failures) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-openstack-test-failures) | Test Failures and Triage | +| Team Name | Details | Description | +| --------- |:-------:| ----------- | +| @kubernetes/sig-openstack-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-openstack-api-reviews) | API Changes and Reviews | +| @kubernetes/sig-openstack-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-openstack-bugs) | Bug Triage and Troubleshooting | +| @kubernetes/sig-openstack-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-openstack-feature-requests) | Feature Requests | +| @kubernetes/sig-openstack-misc | [link](https://github.com/orgs/kubernetes/teams/sig-openstack-misc) | General Discussion | +| @kubernetes/sig-openstack-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-openstack-pr-reviews) | PR Reviews | +| @kubernetes/sig-openstack-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-openstack-proposals) | Design Proposals | +| @kubernetes/sig-openstack-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-openstack-test-failures) | Test Failures and Triage | diff --git a/sig-pm/OWNERS b/sig-pm/OWNERS new file mode 100644 index 000000000..14a17c6f6 --- /dev/null +++ b/sig-pm/OWNERS @@ -0,0 +1,6 @@ +reviewers: + - sig-pm-leads +approvers: + - sig-pm-leads +labels: + - sig/pm diff --git a/sig-pm/README.md b/sig-pm/README.md new file mode 100644 index 000000000..5a24e3e83 --- /dev/null +++ b/sig-pm/README.md @@ -0,0 +1,142 @@ + +# PM Special Interest Group + +Focuses on aspects of product management, such as the qualification and successful management of user requests, and aspects of project and program management such as the continued improvement of the processes used by the Kubernetes community to maintain the Kubernetes Project itself. +Besides helping to discover both what to build and how to build it, the PM Group also helps to try and keep the wheels on this spaceship we are all building together; bringing together people who think about Kubernetes as both a vibrant community of humans and technical program is another primary focus of this group. +Members of the Kubernetes PM Group can assume certain additional responsibilities to help maintain the Kubernetes Project itself. +It is also important to remember that the role of managing an open source project is very new and largely unscoped for a project as large as Kubernetes; we are learning too and we are excited to learn how we can best serve the community of users and contributors. + +## Meetings +* Regular SIG Meeting: [Tuesdays at 18:30 UTC](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=18:30&tz=UTC). + * [Meeting notes and Agenda](https://docs.google.com/document/d/13uHgcLf-hcR4a5QbV888fhnVsF3djBEpN8HolwS0kWM/edit?usp=sharing). + * [Meeting recordings](https://www.youtube.com/watch?v=VcdjaZAol2I&list=PL69nYSiGNLP3EBqpUGVsK1sMgUZVomfEQ). + +## Leadership + +### Chairs +The Chairs of the SIG run operations and processes governing the SIG. + +* Aparna Sinha (**[@apsinha](https://github.com/apsinha)**), Google +* Ihor Dvoretskyi (**[@idvoretskyi](https://github.com/idvoretskyi)**), CNCF +* Caleb Miles (**[@calebamiles](https://github.com/calebamiles)**), Google + +## Contact +* [Slack](https://kubernetes.slack.com/messages/sig-pm) +* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-pm) +* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fpm) + +## Subprojects + +The following subprojects are owned by sig-pm: +- **features** + - Owners: + - https://raw.githubusercontent.com/kubernetes/features/master/OWNERS + + + +SIG-PM (Program, Product, Project Management) +============================================= + +### Overview: + +Program, project, and product management in open source software communities represents a significant challenge. Such positions traditionally rely on hierarchical structure to drive work from the executive tier down to the team level, whereas in OSS there is little or no accountability other than that gained through influence and commutative trust. + +### TL;DR: + +#### We cannot: + +- Set schedules + +- Dictate features to SIGs + +- Set headcount + +#### We can and must + +- Serve the individuals and companies within the Kubernetes community by communicating the value produced by the SIGs + +In this milieu, the art of program-level facilitation requires an observational approach that gathers information as opposed to driving it. The “program” in question is essentially the assembly of a coherent view of aggregate plans, processes, governance, and aspirations. + +- Responsible for the forward-looking translation of high-level strategic objectives into project, product, marketing, and other specialized implementation strategies as defined by special interest groups. + +- Staffing of specific release roles: Release features lead, Release Marketing Coordinator, Product Roadmap committee + +Chairs: +------- + +- SIG: + + - Ihor Dvoretskyi (CNCF); + - Aparna Sinha (Google); + - Caleb Miles (Google) + +- Subproject areas: + + - Jaice Singer DuMars (Google); Area: Program Management & Release + - Dustin Kirkland (Google); Area: Product Management + - Stephen Augustus (Red Hat); Area: Product Management + - Natasha Woods & Kaitlyn Barnard (CNCF); Area: Marketing + +Key Roles: +---------- + +- SIG-PM Chairs: + + - Accountability for development and communication of roadmap and project vision + + - Coordinating communication between the community, other SIGs, steering committee, foundations, working groups, and SIG-PM + + - Building the PM organization within the community - onboarding, mentoring and knowledge sharing. Development and refinement of best practices around PM responsibilities + + - Responsible for organizing SIG [PM] meetings and activities (on-site, roadshows, conference presentations) + + - Managing consensus-building around the evolving mission and accountabilities for the SIG + + - Helps translate long-term strategic objectives (such as moving towards a stable core, adding extensibility, writing longer term roadmap plans by SIG, providing visibility across SIGs) into actionable strategies that can be implemented by project managers, product managers, SIGs, working groups, and individuals + + - PoC for analyst, press, and end user communication about roadmap and program processes + + - Review / approve marketing & PR message and blog post for each release + + - Project updates and webinar to end users (external) and community + +- Product Management Subproject area: + + - Codify end user requirements - conduct interviews, surveys, market analysis and synthesize segments, requirements and roadmap requests + + - Facilitating and running the annual roadmap process with the SIGs + + - Running end user survey and synthesizing inputs + + - Facilitate communication around product concerns between program management and SIGs + + - Contributor summit readout activities + + - Drafting, staffing, and delivering through consensus, KEPs that represent user value that may span multiple SIGs, WGs, or other sub-projects + + - Identify, organize, and track customer concerns, needs, and satisfaction + +- Technical Program Management area: + + - Features process management on a quarterly cadence (setting and communicating the process and deadlines, managing input, collecting and reporting on features and enabling the release team) + + - Responsible for creating and maintaining multi-release spanning documentation that provides overarching strategic goals, metrics, and risk assessments, and other program-level concerns + + - Helps SIGs do quarterly release planning, facilitation of team-level and SIG-level activities + + - Help teams deliver features over the course of the release (primary interface between the “features process” and release team) + + - Mentorship of those interested in becoming program managers, or release leaders + +- Roles to be staffed from Program Manager pool in SIG PM + + - Release Marketing Coordinator: + - See marketing coordinator documentation + diff --git a/sig-product-management/OWNERS b/sig-product-management/OWNERS deleted file mode 100644 index 5c66db0b0..000000000 --- a/sig-product-management/OWNERS +++ /dev/null @@ -1,6 +0,0 @@ -reviewers: - - sig-product-management-leads -approvers: - - sig-product-management-leads -labels: - - sig/pm diff --git a/sig-product-management/README.md b/sig-product-management/README.md deleted file mode 100644 index 4cdb235fa..000000000 --- a/sig-product-management/README.md +++ /dev/null @@ -1,53 +0,0 @@ - -# Product Management Special Interest Group - -Focuses on aspects of product management, such as the qualification and successful management of user requests, and aspects of project and program management such as the continued improvement of the processes used by the Kubernetes community to maintain the Kubernetes Project itself. -Besides helping to discover both what to build and how to build it, the PM Group also helps to try and keep the wheels on this spaceship we are all building together; bringing together people who think about Kubernetes as both a vibrant community of humans and technical program is another primary focus of this group. -Members of the Kubernetes PM Group can assume certain additional responsibilities to help maintain the Kubernetes Project itself. -It is also important to remember that the role of managing an open source project is very new and largely unscoped for a project as large as Kubernetes; we are learning too and we are excited to learn how we can best serve the community of users and contributors. - -## Meetings -* Regular SIG Meeting: [Tuesdays at 16:00 UTC](https://zoom.us/j/845373595) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=16:00&tz=UTC). - * [Meeting notes and Agenda](https://docs.google.com/document/d/1YqIpyjz4mV1jjvzhLx9JYy8LAduedzaoBMjpUKGUJQo/edit?usp=sharing). - * [Meeting recordings](https://www.youtube.com/watch?v=VcdjaZAol2I&list=PL69nYSiGNLP3EBqpUGVsK1sMgUZVomfEQ). - -## Leadership - -### Chairs -The Chairs of the SIG run operations and processes governing the SIG. - -* Aparna Sinha (**[@apsinha](https://github.com/apsinha)**), Google -* Ihor Dvoretskyi (**[@idvoretskyi](https://github.com/idvoretskyi)**), CNCF -* Caleb Miles (**[@calebamiles](https://github.com/calebamiles)**), Google - -## Contact -* [Slack](https://kubernetes.slack.com/messages/kubernetes-pm) -* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-pm) -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fnone) - -## Subprojects - -The following subprojects are owned by sig-none: -- **features** - - Owners: - - https://raw.githubusercontent.com/kubernetes/features/master/OWNERS - - -## Common activities -- Collecting and generalizing user feedback to help drive project direction and priorities: delivering on user needs while enforcing vendor neutrality -- Supporting collaboration across the community by working to improve the communication of roadmap and workload of other [Special Interest Groups](https://github.com/kubernetes/community#special-interest-groups-sig-and-working-groups) -- Supporting the continued effort to improve the stability and extensibility of Kubernetes Project -- Supporting the marketing and promotion of the Kubernetes Project through the [CNCF](https://www.cncf.io/) -- Working with the [Kubernetes Release Team](https://github.com/kubernetes/community/tree/master/contributors/devel/release) to continually ensure a high quality release of the Kubernetes Project -- Supporting the Kubernetes ecosystem through [the Kubernetes Incubator](https://github.com/kubernetes/community/blob/master/incubator.md) -- Coordinating project wide policy changes for Kubernetes and the Kubernetes Incubator -- Onboarding large groups of corporate contributors and welcoming them into the Kubernetes Community -- Whatever is needed to help make the project go! - diff --git a/sig-product-management/SIG PM representatives.md b/sig-product-management/SIG PM representatives.md deleted file mode 100644 index fcf84fe75..000000000 --- a/sig-product-management/SIG PM representatives.md +++ /dev/null @@ -1,40 +0,0 @@ -### SIG PM representative role definition - -SIG PM representative is a specific person from the SIG, who represents this SIG to PM group. The role defaults to SIG lead, but not limited to. Every SIG may assign a representative. - -SIG PM responsibilities: - * identify all features in the current release from the SIG - * track all features (in the repo with all the fields complete) - * attend your SIG meetings - * attend the PM group meetings which occur 3-5 times per release - * identify the annual roadmap - * advise their SIG as needed - -### SIG PM representatives list - -| **SIG** | **Name** | **GitHub ID** | **e-mail** | **Secondary** | -| ------ | ------ | ------ | ------ | ------ | -| API machinery | William Denniss | WilliamDenniss | wdenniss@google.com | | -| Apps | Dan Paik | danpaik; ant31 | danpaik@google.com | Antoine Legrand, antoine.legrand@coreos.com | -| Auth | CJ Cullen | cjcullen | cjcullen@google.com | | -| Autoscaling | Solly Ross | directxman12 | sross@redhat.com | | -| AWS | Justin Santa Barbara | justinsb | justin@fathomdb.com | | -| CLI | Joe Beda | jbeda | joe@bedafamily.com | | -| Cluster Lifecycle | Dan Gillespie | ethernetdan | dan.gillespie@coreos.com | | -| Cluster Ops | Jason Singer DuMars | jdumars | jdumars@deis.com | Rob Hirschfeld | -| Contrib Experience | Garrett Rodrigues | grodrigues3 | grod@google.com | elsie.phillips@coreos.com | -| Docs | N/A | | | | -| Federation | David Aronchick | aronchick | aronchick@google.com | | -| Instrumentation | Piotr Szczesniak | piosz | pszczesniak@google.com | Patrick Christopher (pat.christopher@gmail.com) | -| Network | Dan Williams | dcbw | dcbw@redhat.com | Christopher M Luciano, @cmluciano, cmluciano@us.ibm.com, Du Jun, @m1093782566, dujun5@huawei.com | -| Node | Caleb Miles | calebamiles | caleb.miles@coreos.com | | -| On-Premises | Tomasz Napierala | zen | tnapierala@mirantis.com | | -| OpenStack | Chris Hoge | hogepodge | chris@openstack.org | | -| rktnetes | Covered by SIG-Node | | | | -| Scalability | Bob Wise | countspongebob | bob@bobsplanet.com | bob.wise@samsung.com | -| Scheduling | Tim St. Clair | timothysc | timothysc@gmail.com | David Oppenheimer (@davidopp) | -| Service catalog | Doug Davis | duglin | dug@us.ibm.com | | -| Storage | Matthew DeLio | mdelio | mdelio@google.com | Saad Ali (@saad-ali) | -| Testing | N/A | | | | -| UI | Dan Romlein | danielromlein | dromlein.apprenda@gmail.com | | -| Windows | Michael Michael | michmike | mmichael@apprenda.com | | diff --git a/sig-release/README.md b/sig-release/README.md index 96fc31aa5..733d33bba 100644 --- a/sig-release/README.md +++ b/sig-release/README.md @@ -5,13 +5,15 @@ Please do not edit this file directly, but instead make changes to the sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> +---> # Release Special Interest Group +The [charter](charter.md) defines the scope and governance of the Release Special Interest Group. + ## Meetings -* Regular SIG Meeting: [Tuesdays at 21:00 UTC](https://zoom.us/j/664772523) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=21:00&tz=UTC). - * [Meeting notes and Agenda](https://docs.google.com/document/d/1vhsixdT58iJFfoGZbpmvI_xnK59XyAjtadu3h6hHPpY/edit?usp=sharing). +* Regular SIG Meeting: [Tuesdays at 21:00 UTC](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=21:00&tz=UTC). + * [Meeting notes and Agenda](https://docs.google.com/document/d/1Fu6HxXQu8wl6TwloGUEOXVzZ1rwZ72IAhglnaAMCPqA/edit?usp=sharing). * [Meeting recordings](https://www.youtube.com/watch?v=I0KbWz8MTMk&list=PL69nYSiGNLP3QKkOsDsO6A0Y1rhgP84iZ). ## Leadership @@ -19,8 +21,13 @@ To understand how this file is generated, see https://git.k8s.io/community/gener ### Chairs The Chairs of the SIG run operations and processes governing the SIG. -* Jaice Singer DuMars (**[@jdumars](https://github.com/jdumars)**), Microsoft * Caleb Miles (**[@calebamiles](https://github.com/calebamiles)**), Google +* Stephen Augustus (**[@justaugustus](https://github.com/justaugustus)**), Red Hat +* Tim Pepper (**[@tpepper](https://github.com/tpepper)**), VMware + +## Emeritus Leads + +* Jaice Singer DuMars (**[@jdumars](https://github.com/jdumars)**), Google ## Contact * [Slack](https://kubernetes.slack.com/messages/sig-release) @@ -47,24 +54,16 @@ The following subprojects are owned by sig-release: The below teams can be mentioned on issues and PRs in order to get attention from the right people. Note that the links to display team membership will only work if you are a member of the org. -The google groups contain the archive of Github team notifications. -Mentioning a team on Github will CC its group. -Monitor these for Github activity if you are not a member of the team. - -| Team Name | Details | Google Groups | Description | -| --------- |:-------:|:-------------:| ----------- | -| @kubernetes/sig-release-admins | [link](https://github.com/orgs/kubernetes/teams/sig-release-admins) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-release-admins) | Release Team Admins | -| @kubernetes/sig-release-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-release-api-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-release-api-reviews) | API Changes and Reviews | -| @kubernetes/sig-release-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-release-bugs) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-release-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-release-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-release-feature-requests) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-release-feature-requests) | Feature Requests | -| @kubernetes/sig-release-members | [link](https://github.com/orgs/kubernetes/teams/sig-release-members) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-release-members) | Release Team Members | -| @kubernetes/sig-release-misc | [link](https://github.com/orgs/kubernetes/teams/sig-release-misc) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-release-misc) | General Discussion | -| @kubernetes/sig-release-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-release-pr-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-release-pr-reviews) | PR Reviews | -| @kubernetes/sig-release-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-release-proposals) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-release-proposals) | Design Proposals | -| @kubernetes/sig-release-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-release-test-failures) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-release-test-failures) | Test Failures and Triage | +| Team Name | Details | Description | +| --------- |:-------:| ----------- | +| @kubernetes/sig-release | [link](https://github.com/orgs/kubernetes/teams/sig-release) | SIG Release Members | +| @kubernetes/sig-release-admins | [link](https://github.com/orgs/kubernetes/teams/sig-release-admins) | Admins for SIG Release repositories | +| @kubernetes/kubernetes-milestone-maintainers | [link](https://github.com/orgs/kubernetes/teams/kubernetes-milestone-maintainers) | Milestone Maintainers | +| @kubernetes/kubernetes-release-managers | [link](https://github.com/orgs/kubernetes/teams/kubernetes-release-managers) | Release Managers | -[SIG Release][] has moved! +--- + +_The canonical location for SIG Release information is [k/sig-release](https://github.com/kubernetes/sig-release)._ -[SIG Release]: https://github.com/kubernetes/sig-release diff --git a/sig-release/charter.md b/sig-release/charter.md new file mode 100644 index 000000000..7c8b08eae --- /dev/null +++ b/sig-release/charter.md @@ -0,0 +1,85 @@ +# SIG Release Charter + +This charter adheres to the conventions described in the [Kubernetes Charter README] and uses the Roles and Organization Management outlined in [sig-governance]. + +## Scope + +- Production of Kubernetes releases on a reliable schedule +- Ensure there is a consistent group of community members in place to support the release process across time +- Provide guidance and tooling to facilitate the production of automated releases +- Serve as a tightly integrated partner with other SIGs to empower SIGs to integrate their repositories into the release process + +### In scope + +- Ensuring quality Kubernetes releases + - Defining and staffing release roles to manage the resolution of release blocking criteria + - Defining and driving development processes (e.g. merge queues, cherrypicks) and release processes + (e.g. burndown meetings, cutting beta releases) with the intent of meeting the release schedule + - Managing the creation of release specific artifacts, including: + - Code branches + - Binary artifacts + - Release notes +- Continually improving release and development processes + - Working closely with SIG Contributor Experience to define and build tools to facilitate release process (e.g. dashboards) + - Working closely with SIG Testing to determine and implement tests, automation, and labeling required for stable releases + - Working with downstream communities responsible for packaging Kubernetes releases + - Working with other SIGs to agree upon the responsibilities of their SIG with respect to the release + - Defining and collecting metrics related to the release in order to measure progress over each release + - Facilitating release retrospectives +- Collaborating with downstream communities which build artifacts from Kubernetes releases + +### Out of scope + +#### Support + +SIG Release itself is not responsible for end user support or creation of patches for support streams. There are support forums for end users to ask questions and report bugs, subject matter experts in other SIGs triage and address issues and when necessary mark bug fixes for inclusion in a patch release. + +## Roles and Organization Management + +This SIG adheres to the Roles and Organization Management outlined in [sig-governance] and opts-in to updates and modifications to [sig-governance]. + +Specifically, the common guidelines (see: [sig-governance]) for continuity of membership within roles in the SIG are followed. + +### Deviations from [sig-governance] + +- SIG Release subprojects have subproject chairs +- SIG Release does not have top-level SIG Technical Leads. With few exceptions, technical decisions should be handled within the scope of the relevant SIG Release subproject. + +#### SIG Membership + +SIG Release has a concept of membership. SIG members can be occasionally called on to assist with decision making, especially as it relates to gathering historical context around existing policies and enacting new policy. + +SIG Release membership is represented by membership in the `sig-release` GitHub team. + +SIG Release membership is defined as the set of Kubernetes contributors included in: +- All SIG Release top-level subproject OWNERS files +- All documented former Release Team members holding Lead roles e.g., Enhancements Lead, Patch Release Team + +Subproject `approvers` and incoming Release Team Leads should ensure that new members are added to the `sig-release` GitHub team. + +SIG Release Chairs will periodically review the `sig-release` GitHub team to ensure it remains accurate and up-to-date. + +All SIG Release roles will be filled by SIG Release members, except where explicitly defined in other policy. A notable exception to this would be Release Team Shadows. + +It may be implied, given the criteria for SIG membership, but to be explicit: +- SIG Release membership is representative of people who actively contribute to the health of the SIG. Given that, those members should also be enabled to help drive SIG Release policy. +- SIG Chairs should represent the sentiment of and facilitate the decision making by SIG Members. + +### Subproject Creation + +Subprojects must be created by [KEP] proposal and accepted by [lazy-consensus]. + +In the event that lazy consensus cannot be reached: +- Fallback to a majority decision by SIG Chairs +- SIG Release Members may override the majority decision of SIG Chairs by a supermajority (60%) + +Additional requirements: +- KEP must establish subproject chairs +- [sigs.yaml] must be updated to include subproject information and OWNERS files with subproject chairs + + +[KEP]: /keps/0000-kep-template.md +[Kubernetes Charter README]: /committee-steering/governance/README.md +[lazy-consensus]: http://communitymgt.wikia.com/wiki/Lazy_consensus +[sig-governance]: /committee-steering/governance/sig-governance.md +[sigs.yaml]: /sigs.yaml diff --git a/sig-scalability/README.md b/sig-scalability/README.md index a22134e2c..9e634e81f 100644 --- a/sig-scalability/README.md +++ b/sig-scalability/README.md @@ -5,7 +5,7 @@ Please do not edit this file directly, but instead make changes to the sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> +---> # Scalability Special Interest Group Responsible for answering scalability related questions such as: @@ -13,7 +13,7 @@ What size clusters do we think that we should support with Kubernetes in the sho For more details about our objectives please review our [Scaling And Performance Goals](https://git.k8s.io/community/sig-scalability/goals.md) ## Meetings -* Regular SIG Meeting: [Thursdays at 16:30 UTC](https://zoom.us/j/989573207) (bi-weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=16:30&tz=UTC). +* Regular SIG Meeting: [Thursdays at 16:30 UTC](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (bi-weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=16:30&tz=UTC). * [Meeting notes and Agenda](https://docs.google.com/a/bobsplanet.com/document/d/1hEpf25qifVWztaeZPFmjNiJvPo-5JX1z0LSvvVY5G2g/edit?usp=drive_web). * [Meeting recordings](https://www.youtube.com/watch?v=NDP1uYyom28&list=PL69nYSiGNLP2X-hzNTqyELU6jYS3p10uL). @@ -23,7 +23,7 @@ For more details about our objectives please review our [Scaling And Performance The Chairs of the SIG run operations and processes governing the SIG. * Wojciech Tyczynski (**[@wojtek-t](https://github.com/wojtek-t)**), Google -* Bob Wise (**[@countspongebob](https://github.com/countspongebob)**), Samsung SDS +* Bob Wise (**[@countspongebob](https://github.com/countspongebob)**), AWS ## Contact * [Slack](https://kubernetes.slack.com/messages/sig-scalability) @@ -35,8 +35,8 @@ The Chairs of the SIG run operations and processes governing the SIG. The following subprojects are owned by sig-scalability: - **kubemark** - Owners: - - https://raw.githubusercontent.com/kubernetes/kubemark/master/cmd/kubemark/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubemark/master/pkg/kubemark/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/cmd/kubemark/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubemark/OWNERS - **perf-tests** - Owners: - https://raw.githubusercontent.com/kubernetes/perf-tests/master/OWNERS @@ -46,48 +46,29 @@ The following subprojects are owned by sig-scalability: The below teams can be mentioned on issues and PRs in order to get attention from the right people. Note that the links to display team membership will only work if you are a member of the org. -The google groups contain the archive of Github team notifications. -Mentioning a team on Github will CC its group. -Monitor these for Github activity if you are not a member of the team. - -| Team Name | Details | Google Groups | Description | -| --------- |:-------:|:-------------:| ----------- | -| @kubernetes/sig-scalability-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-scalability-api-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-scalability-api-reviews) | API Changes and Reviews | -| @kubernetes/sig-scalability-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-scalability-bugs) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-scalability-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-scalability-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-scalability-feature-requests) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-scalability-feature-requests) | Feature Requests | -| @kubernetes/sig-scalability-misc | [link](https://github.com/orgs/kubernetes/teams/sig-scalability-misc) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-scalability-misc) | General Discussion | -| @kubernetes/sig-scalability-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-scalability-pr-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-scalability-pr-reviews) | PR Reviews | -| @kubernetes/sig-scalability-proprosals | [link](https://github.com/orgs/kubernetes/teams/sig-scalability-proprosals) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-scalability-proprosals) | Design Proposals | -| @kubernetes/sig-scalability-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-scalability-test-failures) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-scalability-test-failures) | Test Failures and Triage | +| Team Name | Details | Description | +| --------- |:-------:| ----------- | +| @kubernetes/sig-scalability-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-scalability-api-reviews) | API Changes and Reviews | +| @kubernetes/sig-scalability-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-scalability-bugs) | Bug Triage and Troubleshooting | +| @kubernetes/sig-scalability-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-scalability-feature-requests) | Feature Requests | +| @kubernetes/sig-scalability-misc | [link](https://github.com/orgs/kubernetes/teams/sig-scalability-misc) | General Discussion | +| @kubernetes/sig-scalability-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-scalability-pr-reviews) | PR Reviews | +| @kubernetes/sig-scalability-proprosals | [link](https://github.com/orgs/kubernetes/teams/sig-scalability-proprosals) | Design Proposals | +| @kubernetes/sig-scalability-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-scalability-test-failures) | Test Failures and Triage | ## Upcoming 2018 Meeting Dates - * 1/18 - * 2/1 - * 2/15 - * 3/1 - * 3/15 - * 3/29 - * 4/12 - * 4/26 - * 5/10 - * 5/24 * 6/7 * 6/21 + * 7/5 + * 7/19 + * 8/2 + * 8/16 + * 8/30 + * 9/13 + * 9/27 -## Scalability SLOs +## Scalability/performance SLIs and SLOs -We officially support two different SLOs: - -1. "API-responsiveness": - 99% of all API calls return in less than 1s - -1. "Pod startup time: - 99% of pods (with pre-pulled images) start within 5s - -This should be valid on appropriate hardware up to a 5000 node cluster with 30 pods/node. We eventually want to expand that to 100 pods/node. - -For more details how do we measure those, you can look at: http://blog.kubernetes.io/2015_09_01_archive.html - -We are working on refining existing SLOs and defining more for other areas of the system. +Check out [SLIs/SLOs page](./slos/slos.md). diff --git a/sig-scalability/block_merges.md b/sig-scalability/block_merges.md new file mode 100644 index 000000000..fdc73c1d4 --- /dev/null +++ b/sig-scalability/block_merges.md @@ -0,0 +1,55 @@ +# Blocking PR merges in the event of regression. + +As mentioned in the charter, SIG scalability has a right to block all PRs +from merging into the relevant repos. This document describes the underlying +"Rules of engagement" of this process and the rationale why this is needed. + +### Rules of engagement. +The rules of engagement for blocking merges are as following: + +- Observe as scalability regression on one of release-blocking test suites + (defined as green to red transition - if tests were already failing, we + don't have a right to declare a regression). +- Block merges of all PRs to the relevant repos in the affected branch, + declaring which repos those are and why. +- Identify the PR which caused the regression: + - this can be done by reading code changes, bisecting, debugging based on + metrics and/or logs, etc. + - we say a PR is identified as the cause when we are reasonably confident + that it indeed caused a regression, even if the mechanism is not 100% + understood to minimize the time when merges are blocked +- Mitigate the regression. This may mean e.g.: + - reverting the PR + - switching a feature off (preferably by default, as last resort only in tests) + - fixing the problem (if it's easy and quick to fix) +- Unblock merges of all PRs to the relevant repos in the affected branch. + +The exact technical mechanisms for it are out of scope for this document. + +### Rationale +The process described above is quite drastic, but we believe it is justified +if we want kubernetes to maintain scalability SLOs. The reasoning is: +- reliably testing for regressions takes a lot of time: + - key scalability e2e tests take too long to execute to be a prerequisite + for merging all PRs, this is an inherent characteristic of testing at scale, + - end-to-end tests are flaky (even when not at scale) requiring retries, +- we need to prevent regression pile-ups: + - once a regression is merged, and no other action is taken, it is only + a matter of time until another regression is merged on top of it, + - debugging the cause of two simultaneous (piled-up) regressions is + exponentially harder, see issue [53255](http://pr.k8s.io/53255) which + links to past experience +- we need to keep flakiness of merge-blocking jobs very low: +- regarding benchmarks, there were several scalability issues in the past + caught by (costly) large-scale e2e tests, which could have been caught and + fixed earlier and with far less human effort if we had benchmark-like + tests. Examples include: + - scheduler anti-affinity affecting kube-dns, + - kubelet network plugin increasing pod-startup latency, + - large responses from apiserver violating gRPC MTU. + +As explained in detail in an issue, not being able to maintain passing scalability +tests adversely affect: +- release quality +- release schedule +- engineer productivity diff --git a/sig-scalability/blogs/k8s-services-scalability-issues.md b/sig-scalability/blogs/k8s-services-scalability-issues.md new file mode 100644 index 000000000..e67152a30 --- /dev/null +++ b/sig-scalability/blogs/k8s-services-scalability-issues.md @@ -0,0 +1,133 @@ +# Known Scalability Issues with Kubernetes Services + +_by Shyam JVS, Google Inc (with inputs from Brian Grant, Wojciech Tyczynski & Dan Winship)_ + +**June 2018** + +This document serves as a catalog of issues we've known/discovered with kubernetes services as of June 2018, focusing on their scalability/performance. The purpose of the document is to make the information common knowledge for the community, so we can work together towards improving it. Listing them below in no particular order. + + +## Iptables packet processing performance when large number of service ports exist + +#### Issue + +Iptables can be slow in packet processing when a large number of services exist. As the number of service ports increases, the KUBE-SERVICES chain gets longer and since it’s also evaluated very frequently that can bring down the performance. There have been some recent improvements in this area ([#56164](https://github.com/kubernetes/kubernetes/pull/56164), [#57461](https://github.com/kubernetes/kubernetes/pull/57461), [#60306](https://github.com/kubernetes/kubernetes/pull/60306)) - but we still need to measure and come up with safe bounds for number of services that can be 'decently' supported (10k seems to be a reasonable estimate from [past discussions](https://github.com/kubernetes/kubernetes/issues/48938#issue-243000172)). Also, further improvements might be required based on those results. + +#### Relevant issues/links + +- [#48938](https://github.com/kubernetes/kubernetes/issues/48938) + +#### Possible Solution(s) + +- Moving from iptables to IPVS may help here if that works stably. We have the IPVS alternative [implemented](https://github.com/kubernetes/kubernetes/pull/46580), but it still hasn’t gone to GA. +- For a long time the official kernel upstream answer for this issue was that nftables was going to solve all iptables-related scalability problems (both with packet processing and with rule changes), and there's now an out-of-tree nftables kube-proxy backend too ([#62720](https://github.com/kubernetes/kubernetes/issues/62720)). +- There's also an alternative plan to fix the packet processing speed problems by rewriting iptables to use eBPF inside the kernel (see - https://cilium.io/blog/2018/04/17/why-is-the-kernel-community-replacing-iptables ). + + +## Slow/failing iptables-restore operations when large number of rules exist + +#### Issue + +When we’re running services worth a large number of backends (> 100k) on our large-cluster scalability tests, we’re noticing that kube-proxy is timing out while trying to do iptables-restore due to failing to acquire lock over iptables. There are at least two parts to this problem: + +- If a process tried to do a very large iptables-restore, and other processes on the system were also doing iptables-related things, the iptables-restore might get restarted multiple times (inside the kernel) before completing, which could then cause another iptables operation running in another goroutine to time out before it ever got the xtables lock. +- The `iptables-restore` implementation is such that it grabs the lock before it parses its input, and simply parsing tens of thousands of iptables rules takes a noticeable amount of time. So if two iptables commands start at the same time, the first might grab the lock, and then start parsing its input, and burn through half of the other iptables command's `--wait` time before it even gets to the point of passing the rules off to the kernel. + +TODO: Find if there's any issue arising here from k8s side (relevant bug linked below). + +#### Relevant issues/links + +- [#48107](https://github.com/kubernetes/kubernetes/issues/48107) + +#### Possible Solution(s) + +For the first problem: + +- There's [a claim](https://github.com/kubernetes/kubernetes/issues/48107#issuecomment-398081930) that upgrading to linux kernel version 4.15 may fix this. Though we haven't verified this (current COS versions using <= 4.14 kernel version). + +For the second problem: + +- It's not easy to fix it because of the way that `iptables-restore` was written to share code with the main `iptables` binary, and no one is working on fixing it because the official plan is to move to nftables instead. If the world ends up moving to iptables-over-eBPF rather than nftables then this will probably need to be fixed at some point. + +In general: + +- The issue requires more debugging, but it may be possible that we are able to (at least partially) mitigate the problem with some tweaks here and there on kubernetes side. +- Decide to support a smaller number of backends for kubernetes officially if it can't be fixed. + + +## Apiserver spending too much cpu/memory in duplicate Endpoints serializations + +#### Issue + +Currently while serving watches, the apiserver is deep-copying deserialized endpoints objects from etcd and serializing it once for each kube-proxy watch it serves (which is 5k watches in our largest clusters). + +#### Relevant issues/links + +- [#55779](https://github.com/kubernetes/kubernetes/issues/55779#issuecomment-354452477) +- [#48938](https://github.com/kubernetes/kubernetes/issues/48938) +- [#58050](https://github.com/kubernetes/kubernetes/issues/58050) + +#### Possible Solution(s) + +- Avoid those duplicate serializations if/when possible ([#60067](https://github.com/kubernetes/kubernetes/pull/60067) was an attempt to do this, but it didn't seem to help too much). +- Moving from 'endpoints' -> 'endpoint' API change (discussed in detail in below issues) would mitigate this problem as the serialization load would decrease with smaller objects. + + +## Endpoints traffic is quadratic in the number of endpoints + +#### Issue + +Endpoints object for a service contains all the individual endpoints of that service. As a result, whenever even a single pod in a service is added/updated/deleted, the whole endpoints object (which includes even the other endpoints that didn't change) is re-computed, written to storage and sent to all readers. Not being able to efficiently read/update individual endpoint changes can lead to (for e.g during rolling upgrade of a service) endpoints operations that are quadratic in the number of its elements. If you consider watches in the picture (there's one from each kube-proxy), the situation becomes even worse as the quadratic traffic gets multiplied further with number of watches (usually equal to #nodes in the cluster). + +Overall, this is a serious performance drawback affecting multiple components in the control-plane (apiserver, etcd, endpoints-controller, kube-proxy). The current endpoints API (which was designed at a very early stage of kubernetes when people weren't really thinking too much about scalability/performance) makes it hard to solve this problem without introducing breaking changes. + +#### Relevant issues/links + +- [#47787](https://github.com/kubernetes/kubernetes/issues/47787) +- [#24552](https://github.com/kubernetes/kubernetes/issues/24552) +- [#24553](https://github.com/kubernetes/kubernetes/issues/24553) +- [#8190](https://github.com/kubernetes/kubernetes/issues/8190) + +#### Possible Solution(s) + +- Redesign endpoints API with (at least) the following properties: + - Lives in an API group + - Not coupled to service resource lifecycle + - Can track both pod and non-pod endpoints + - Separate API object for each individual endpoint + - Has a 'Ready' property as part of the object + - Port ranges and other features we’ve put off for a long time + + +## Define/measure performance SLIs for endpoints propagation + +#### Issue + +We need to measure the e2e endpoints propagation latency, i.e the time from when a +service is created until its endpoints are populated, given that all of the associated pods +are already running and ready. We also need to come up with reasonable SLOs for the +same and verify that they’re satisfied at scale. + +#### Relevant issues/links + +- [#10436](https://github.com/kubernetes/kubernetes/issues/10436) +- This [doc on networking SLIs](https://docs.google.com/document/d/1kudI8uILO13ySkpE5HgNHvIGn-yXVQatpyM3YTVVUis) proposes one way of formulating the SLI + +#### Possible Solution(s) + +- Measure the SLI defined in the above doc and come up with a reasonable SLO + + +## Master election shouldn’t consume unnecessary watch bandwidth + +#### Issue + +Currently we store the leader lock for master components like the scheduler in the corresponding endpoints object. This has the undesirable side effect of sending a notification down the kube-proxy <-> master (and kube-dns <-> master) watch every second, which is not actually required. + +#### Relevant issues/links + +- [#34627](https://github.com/kubernetes/kubernetes/issues/34627) + +#### Possible Solutions(s) + +- Avoid overloading endpoints as a lock API. We instead want to move to using the [new Lease API](https://github.com/kubernetes/kubernetes/pull/64246) (ETA 1.12). One potential challenge here is performing upgrades of HA clusters that are using the old endpoints-based locking approach to this new API approach without breaking them. diff --git a/sig-scalability/charter.md b/sig-scalability/charter.md new file mode 100644 index 000000000..ace0ed594 --- /dev/null +++ b/sig-scalability/charter.md @@ -0,0 +1,98 @@ +# SIG Scalability Charter + +This charter adheres to the conventions described in the [Kubernetes Charter README] +and uses the Roles and Organization Management outlined in [sig-governance]. + +[sig-governance]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance.md +[Kubernetes Charter README]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/README.md + +## Scope + +SIG Scalability's primary responsibilities are to define and drive scalability +goals for Kubernetes. This involves defining, testing and measuring performance and +scalability related Service Level Indicators (SLIs) and ensuring that every +Kubernetes release meets Service Level Objectives (SLOs) built on top of those +SLIs. + +We also coordinate and contribute to general system-wide scalability and +performance improvements (that don't fall into the charter of another individual +SIG) by driving large architectural changes and finding bottlenecks, as well as +provide consultations about any scalability and performance related aspects of +Kubernetes. + +### In Scope + +#### Code, Binaries and Services: + +- Scalability and performance testing frameworks. Examples include: + - [Cluster loader](https://github.com/kubernetes/perf-tests/tree/master/clusterloader2) + - [Kubemark](https://github.com/kubernetes/kubernetes/tree/master/cmd/kubemark) +- Scalability and performance tests: + - [Tests](https://github.com/kubernetes/kubernetes/blob/master/test/e2e/scalability/) + - [Jobs running those](https://github.com/kubernetes/test-infra/tree/master/config/jobs/kubernetes/sig-scalability) + +#### Cross-cutting and Externally Facing Processes + +- Defining what does “Kubernetes scales” mean by defining (or approving) +individual performance SLIs/SLOs, ensuring they are all oriented on user +experience and consistent with each other: + - [SLIs/SLOs](https://github.com/kubernetes/community/blob/master/sig-scalability/slos/slos.md) +- Ensuring that each official Kubernetes release satisfies all scalability and +performance related requirements, as stated in "Kubernetes scalability" definition. +- Establishing and documenting best practises on how to design and/or implement +Kubernetes features in scalable and performant way. Educating contributors and +consulting individual designs/implementations to ensure that those are widely used. +Example artifacts: + - [Scalability governance](https://github.com/kubernetes/community/blob/master/sig-scalability/governance) +- Finding system bottlenecks and coordinating improvement on cross-cutting +architectural changes. + +### Out of scope + +- Improving performance/scalability of features falling into charters of +individual SIGs. + +## What can we do/require from other SIGs + +Scalability and performance are horizontal aspects of the system - changes in a +single place of Kubernetes may affect the whole system. As a result, to +effectively ensure Kubernetes scales, we need a special cross-SIG privileges. + +- We can rollback any merged PR if it has been identified as a cause of any + [performance/scalability SLOs] regression (identified by the set of release + blocking scalability/performance tests). The offending PR should only be + merged again after proving to pass tests at scale. +- In the event of a performance regression, we can block all PRs from being + merged into the relevant repos until the cause of the regression is + identified and mitigated. + The “Rules of engagement” of pausing merge-queue and rationale for + necessity of its introduce are explained in [a separate doc](./block_merges.md). +- We require significant changes (in terms of impact, such as: update of etcd, + update of Go version, major architectural changes, etc.) may only be merged: + - with an explicit approval from a SIG-scalability tech lead and + - after having passed performance testing on biggest supported clusters (unless + found unnecessary by approver) +- We can block a feature from transitioning: + - to Beta status, if (when turned on) it causes violation of already existing + performance/scalability SLOs; + - to GA status, when it can be used scale. That means: + - in rare cases, introducing a new SLI and SLO and ensuring it is met at scale + - in most of cases, extending scalability tests to use it and ensuring that + existing SLOs are still met +- We can require a SIG to introduce a regression-catching benchmark test for a + scalability-critical functionality. + +[performance/scalability SLOs]: https://github.com/kubernetes/community/blob/master/sig-scalability/slos/slos.md + +## Roles and Organization Management + +This sig follows adheres to the Roles and Organization Management outlined in +[sig-governance] and opts-in to updates and modifications to [sig-governance]. + +[sig-governance]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance.md + +### Subproject Creation + +SIG Scalability delegates subproject approval to Technical Leads. See [Subproject creation - Option 1]. + +[Subproject creation - Option 1]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance.md#subproject-creation diff --git a/sig-scalability/configs-and-limits/provider-configs.md b/sig-scalability/configs-and-limits/provider-configs.md index afe183b0e..4cfefefac 100644 --- a/sig-scalability/configs-and-limits/provider-configs.md +++ b/sig-scalability/configs-and-limits/provider-configs.md @@ -118,7 +118,7 @@ proposed ### Areas for Future Work -* Leader election results are non-deterministic on on a typical cluster, and a config would be best served to be configured as worst-case. Not presently known whether there are performance impacts resulting from leader election resulting in either co-location or distribution of those components. +* Leader election results are non-deterministic on a typical cluster, and a config would be best served to be configured as worst-case. Not presently known whether there are performance impacts resulting from leader election resulting in either co-location or distribution of those components. * Improving the cluster performance loading to match production deployment scenarios is critical on-going work, especially clusterloader: [https://git.k8s.io/perf-tests/clusterloader](https://git.k8s.io/perf-tests/clusterloader) diff --git a/sig-scalability/configs-and-limits/thresholds.md b/sig-scalability/configs-and-limits/thresholds.md index a17a0fa11..e1ab959c0 100644 --- a/sig-scalability/configs-and-limits/thresholds.md +++ b/sig-scalability/configs-and-limits/thresholds.md @@ -45,11 +45,12 @@ Important notes about the numbers: | Number of pods per node1 | 110 | | 500 | | Number of pods per core1 | 10 | | 10 | | Number of namespaces (ns) | 10000 | | 100000 | -| Number of pods per ns | 15000 | | 50000 | +| Number of pods per ns | 3000 | | 50000 | | Number of services | 10000 | | 100000 | +| Number of services per ns | 5000 | | 5000 | | Number of all services backends | TBD | | 500000 | | Number of backends per service | 5000 | | 5000 | -| Number of deployments per ns | 20000 | | 10000 | +| Number of deployments per ns | 2000 | | 10000 | | Number of pods per deployment | TBD | | 10000 | | Number of jobs per ns | TBD | | 1000 | | Number of daemon sets per ns | TBD | | 100 | diff --git a/sig-scalability/goals.md b/sig-scalability/goals.md index 1f497759e..10bd51dda 100644 --- a/sig-scalability/goals.md +++ b/sig-scalability/goals.md @@ -72,7 +72,7 @@ NOTES: ## Control Plane Configurations for Testing -Configuration of the control plane for cluster testing varies by provider, and there are multiple reasonable configurations. Discussion and guideline of control plane configuration options and standards are documented [here](provider-configs.md). +Configuration of the control plane for cluster testing varies by provider, and there are multiple reasonable configurations. Discussion and guideline of control plane configuration options and standards are documented [here](configs-and-limits/provider-configs.md). ## Open Questions diff --git a/sig-scalability/governance/OWNERS b/sig-scalability/governance/OWNERS new file mode 100644 index 000000000..d43f67d78 --- /dev/null +++ b/sig-scalability/governance/OWNERS @@ -0,0 +1,4 @@ +approvers: + - countspongebob + - shyamjvs + - wojtek-t diff --git a/sig-scalability/blogs/scalability-regressions-case-studies.md b/sig-scalability/governance/scalability-regressions-case-studies.md similarity index 99% rename from sig-scalability/blogs/scalability-regressions-case-studies.md rename to sig-scalability/governance/scalability-regressions-case-studies.md index 686a2bf84..31a757df5 100644 --- a/sig-scalability/blogs/scalability-regressions-case-studies.md +++ b/sig-scalability/governance/scalability-regressions-case-studies.md @@ -37,4 +37,4 @@ This document is a compilation of some interesting scalability/performance regre - On many occasions our scalability tests caught critical/risky bugs which were missed by most other tests. If not caught, those could've seriously jeopardized production-readiness of k8s. - SIG-Scalability has caught/fixed several important issues that span across various components, features and SIGs. - Around 60% of times (possibly even more), we catch scalability regressions with just our medium-scale (and fast) tests, i.e gce-100 and kubemark-500. Making them run as presubmits should act as a strong shield against regressions. -- Majority of the remaining ones are caught by our large-scale (and slow) tests, i.e kubemark-5k and gce-2k. Making them as post-submit blokcers (given they're "usually" quite healthy) should act as a second layer of protection against regressions. +- Majority of the remaining ones are caught by our large-scale (and slow) tests, i.e kubemark-5k and gce-2k. Making them as post-submit blockers (given they're "usually" quite healthy) should act as a second layer of protection against regressions. diff --git a/sig-scalability/processes/formal-scalability-processes.md b/sig-scalability/processes/formal-scalability-processes.md index 1c1f7289c..d215d01c9 100644 --- a/sig-scalability/processes/formal-scalability-processes.md +++ b/sig-scalability/processes/formal-scalability-processes.md @@ -6,7 +6,7 @@ _by Shyam JVS, Google Inc_ ## Introduction -Scalability is a very crucial aspect of kubernetes and has allowed many customers to adopt it with confidence. K8s [started scaling to 5000](http://blog.kubernetes.io/2017/03/scalability-updates-in-kubernetes-1.6.html) nodes beginning from release 1.6. Building and maintaining a performant and scalable system needs conscious efforts from the whole developer community. Lack of solid measures have caused problems (both scalability and release-related) in the past - for e.g during [release-1.7](https://github.com/kubernetes/kubernetes/issues/47344), [release-1.8](https://github.com/kubernetes/kubernetes/issues/53255) and [in general](https://github.com/kubernetes/kubernetes/issues/56062). We need them to ensure that the effort is well-streamlined with proper checks and balances in place. Of course they may evolve over time to suit the community/project’s needs better. +Scalability is a very crucial aspect of kubernetes and has allowed many customers to adopt it with confidence. K8s [started scaling to 5000](https://kubernetes.io/blog/2017/03/scalability-updates-in-kubernetes-1.6) nodes beginning from release 1.6. Building and maintaining a performant and scalable system needs conscious efforts from the whole developer community. Lack of solid measures have caused problems (both scalability and release-related) in the past - for e.g during [release-1.7](https://github.com/kubernetes/kubernetes/issues/47344), [release-1.8](https://github.com/kubernetes/kubernetes/issues/53255) and [in general](https://github.com/kubernetes/kubernetes/issues/56062). We need them to ensure that the effort is well-streamlined with proper checks and balances in place. Of course they may evolve over time to suit the community/project’s needs better. ## Goal @@ -65,11 +65,11 @@ These are scalability jobs that would run against the PR at the head of the subm - Kubemark-500 (time to run: [~50m](https://k8s-gubernator.appspot.com/builds/kubernetes-jenkins/logs/ci-kubernetes-kubemark-500-gce?before=10000), flakiness: [0%](https://k8s-gubernator.appspot.com/builds/kubernetes-jenkins/logs/ci-kubernetes-kubemark-500-gce?before=11251) in last 100 runs (as of 15/1/18) - GCE-100 (time to run: [~40m](https://k8s-gubernator.appspot.com/builds/kubernetes-jenkins/logs/ci-kubernetes-e2e-gci-gce-scalability?before=8366), flakiness: [1%](https://k8s-gubernator.appspot.com/builds/kubernetes-jenkins/logs/ci-kubernetes-e2e-gci-gce-scalability?before=9970) in last 100 runs (as of 15/1/18) -About 60% of scalability regressions are caught by these medium-scale jobs ([source](https://github.com/kubernetes/community/blob/master/sig-scalability/blogs/scalability-regressions-case-studies.md)) and having them run as presubmits will greatly help by preventing those from entering. +About 60% of scalability regressions are caught by these medium-scale jobs ([source](https://github.com/kubernetes/community/blob/master/sig-scalability/governance/scalability-regressions-case-studies.md)) and having them run as presubmits will greatly help by preventing those from entering. ### Testing / Post-submit phase -This phase constitutes the final layer of protection against regressions before cutting the release. We already have scalability CI jobs in place for this. The spectrum of scale they cover is quite wide, ranging from 100-node to 5000-node clusters (both for kubemark and real clusters). However, what what we need additionally is: +This phase constitutes the final layer of protection against regressions before cutting the release. We already have scalability CI jobs in place for this. The spectrum of scale they cover is quite wide, ranging from 100-node to 5000-node clusters (both for kubemark and real clusters). However, what we need additionally is: The ability for crucial scalability jobs to block submit-queue (with manual unblock ability)\ ([relevant feature request](https://github.com/kubernetes/kubernetes/issues/53255))\ diff --git a/sig-scalability/slis/apimachinery_slis.md b/sig-scalability/slis/apimachinery_slis.md deleted file mode 100644 index 512548ee8..000000000 --- a/sig-scalability/slis/apimachinery_slis.md +++ /dev/null @@ -1,196 +0,0 @@ -# API-machinery SLIs and SLOs - -The document was converted from [Google Doc]. Please refer to the original for -extended commentary and discussion. - -## Background - -Scalability is an important aspect of the Kubernetes. However, Kubernetes is -such a large system that we need to manage users expectations in this area. -To achieve it, we are in process of redefining what does it mean that -Kubernetes supports X-node clusters - this doc describes the high-level -proposal. In this doc we are describing API-machinery related SLIs we would -like to introduce and suggest which of those should eventually have a -corresponding SLO replacing current "99% of API calls return in under 1s" one. - -The SLOs we are proposing in this doc are our goal - they may not be currently -satisfied. As a result, while in the future we would like to block the release -when we are violating SLOs, we first need to understand where exactly we are -now, define and implement proper tests and potentially improve the system. -Only once this is done, we may try to introduce a policy of blocking the -release on SLO violation. But this is out of scope of this doc. - - -### SLIs and SLOs proposal - -Below we introduce all SLIs and SLOs we would like to have in the api-machinery -area. A bunch of those are not easy to understand for users, as they are -designed for developers or performance tracking of higher level -user-understandable SLOs. The user-oriented one (which we want to publicly -announce) are additionally highlighted with bold. - -### Prerequisite - -Kubernetes cluster is available and serving. - -### Latency[1](#footnote1) of API calls for single objects - -__***SLI1: Non-streaming API calls for single objects (POST, PUT, PATCH, DELETE, -GET) latency for every (resource, verb) pair, measured as 99th percentile over -last 5 minutes***__ - -__***SLI2: 99th percentile for (resource, verb) pairs \[excluding virtual and -aggregated resources and Custom Resource Definitions\] combined***__ - -__***SLO: In default Kubernetes installation, 99th percentile of SLI2 -per cluster-day[2](#footnote2) <= 1s***__ - -User stories: -- As a user of vanilla Kubernetes, I want some guarantee how quickly I get the -response from an API call. -- As an administrator of Kubernetes cluster, if I know characteristics of my -external dependencies of apiserver (e.g custom admission plugins, webhooks and -initializers) I want to be able to provide guarantees for API calls latency to -users of my cluster - -Background: -- We obviously can’t give any guarantee in general, because cluster -administrators are allowed to register custom admission plugins, webhooks -and/or initializers, which we don’t have any control about and they obviously -impact API call latencies. -- As a result, we define the SLIs to be very generic (no matter how your -cluster is set up), but we provide SLO only for default installations (where we -have control over what apiserver is doing). This doesn’t provide a false -impression, that we provide guarantee no matter how the cluster is setup and -what is installed on top of it. -- At the same time, API calls are part of pretty much every non-trivial workflow -in Kubernetes, so this metric is a building block for less trivial SLIs and -SLOs. - -Other notes: -- The SLO has to be satisfied independently from from the used encoding. This -makes the mix of client important while testing. However, we assume that all -`core` components communicate with apiserver with protocol buffers (otherwise -the SLO doesn’t have to be satisfied). -- In case of GET requests, user has an option to opt-in for accepting -potentially stale data (the request is then served from cache and not hitting -underlying storage). However, the SLO has to be satisfied even if all requests -ask for up-to-date data, which again makes careful choice of requests in tests -important while testing. - - -### Latency of API calls for multiple objects - -__***SLI1: Non-streaming API calls for multiple objects (LIST) latency for -every (resource, verb) pair, measure as 99th percentile over last 5 minutes***__ - -__***SLI2: 99th percentile for (resource, verb) pairs [excluding virtual and -aggregated resources and Custom Resource Definitions] combined***__ - -__***SLO1: In default Kubernetes installation, 99th percentile of SLI2 per -cluster-day***__ -- __***is <= 1s if total number of objects of the same type as resource in the -system <= X***__ -- __***is <= 5s if total number of objects of the same type as resource in the -system <= Y***__ -- __***is <= 30s if total number of objects of the same types as resource in the -system <= Z***__ - -User stories: -- As a user of vanilla Kubernetes, I want some guarantee how quickly I get the -response from an API call. -- As an administrator of Kubernetes cluster, if I know characteristics of my -external dependencies of apiserver (e.g custom admission plugins, webhooks and -initializers) I want to be able to provide guarantees for API calls latency to -users of my cluster. - -Background: -- On top of arguments from latency of API calls for single objects, LIST -operations are crucial part of watch-related frameworks, which in turn are -responsible for overall system performance and responsiveness. -- The above SLO is user-oriented and may have significant buffer in threshold. -In fact, the latency of the request should be proportional to the amount of -work to do (which in our case is number of objects of a given type (potentially -in a requested namespace if specified)) plus some constant overhead. For better -tracking of performance, we define the other SLIs which are supposed to be -purely internal (developer-oriented) - - -_SLI3: Non-streaming API calls for multiple objects (LIST) latency minus 1s -(maxed with 0) divided by number of objects in the collection -[3](#footnote3) (which may be many more than the number of returned -objects) for every (resource, verb) pair, measured as 99th percentile over -last 5 minutes._ - -_SLI4: 99th percentile for (resource, verb) pairs [excluding virtual and -aggregated resources and Custom Resource Definitions] combined_ - -_SLO2: In default Kubernetes installation, 99th percentile of SLI4 per -cluster-day <= Xms_ - - -### Watch latency - -_SLI1: API-machinery watch latency (measured from the moment when object is -stored in database to when it’s ready to be sent to all watchers), measured -as 99th percentile over last 5 minutes_ - -_SLO1 (developer-oriented): 99th percentile of SLI1 per cluster-day <= Xms_ - -User stories: -- As an administrator, if system is slow, I would like to know if the root -cause is slow api-machinery or something farther the path (lack of network -bandwidth, slow or cpu-starved controllers, ...). - -Background: -- Pretty much all control loops in Kubernetes are watch-based, so slow watch -means slow system in general. As a result, we want to give some guarantees on -how fast it is. -- Note that how we measure it, silently assumes no clock-skew in case of HA -clusters. - - -### Admission plugin latency - -_SLI1: Admission latency for each admission plugin type, measured as 99th -percentile over last 5 minutes_ - -User stories: -- As an administrator, if API calls are slow, I would like to know if this is -because slow admission plugins and if so which ones are responsible. - - -### Webhook latency - -_SLI1: Webhook call latency for each webhook type, measured as 99th percentile -over last 5 minutes_ - -User stories: -- As an administrator, if API calls are slow, I would like to know if this is -because slow webhooks and if so which ones are responsible. - - -### Initializer latency - -_SLI1: Initializer latency for each initializer, measured as 99th percentile -over last 5 minutes_ - -User stories: -- As an administrator, if API calls are slow, I would like to know if this is -because of slow initializers and if so which ones are responsible. - ---- -\[1\]By latency of API call in this doc we mean time -from the moment when apiserver gets the request to last byte of response sent -to the user. - -\[2\] For the purpose of visualization it will be a -sliding window. However, for the purpose of reporting the SLO, it means one -point per day (whether SLO was satisfied on a given day or not). - -\[3\]A collection contains: (a) all objects of that -type for cluster-scoped resources, (b) all object of that type in a given -namespace for namespace-scoped resources. - - -[Google Doc]: https://docs.google.com/document/d/1Q5qxdeBPgTTIXZxdsFILg7kgqWhvOwY8uROEf0j5YBw/edit# diff --git a/sig-scalability/slos/OWNERS b/sig-scalability/slos/OWNERS new file mode 100644 index 000000000..5cbe0b0f2 --- /dev/null +++ b/sig-scalability/slos/OWNERS @@ -0,0 +1,3 @@ +approvers: + - countspongebob + - wojtek-t diff --git a/sig-scalability/slos/api_call_latency.md b/sig-scalability/slos/api_call_latency.md new file mode 100644 index 000000000..69af0f135 --- /dev/null +++ b/sig-scalability/slos/api_call_latency.md @@ -0,0 +1,70 @@ +## API call latency SLIs/SLOs details + +### Definition + +| Status | SLI | SLO | +| --- | --- | --- | +| __Official__ | Latency[1](#footnote1) of mutating[2](#footnote2) API calls for single objects for every (resource, verb) pair, measured as 99th percentile over last 5 minutes | In default Kubernetes installation, for every (resource, verb) pair, excluding virtual and aggregated resources and Custom Resource Definitions, 99th percentile per cluster-day <= 1s | +| __Official__ | Latency[1](#footnote1) of non-streaming read-only[3](#footnote3) API calls for every (resource, scope[4](#footnote4)) pair, measured as 99th percentile over last 5 minutes | In default Kubernetes installation, for every (resource, scope) pair, excluding virtual and aggregated resources and Custom Resource Definitions, 99th percentile per cluster-day (a) <= 1s if `scope=resource` (b) <= 5s if `scope=namespace` (c) <= 30s if `scope=cluster` | + +\[1\]By latency of API call in this doc we mean time +from the moment when apiserver gets the request to last byte of response sent +to the user. + +\[2\]By mutating API calls we mean POST, PUT, DELETE +and PATCH. + +\[3\]By non-streaming read-only API calls we mean GET +requests without `watch=true` option set. (Note that in Kubernetes internally +it translates to both GET and LIST calls). + +\[4\]A scope of a request can be either (a) `resource` +if the request is about a single object, (b) `namespace` if it is about objects +from a single namespace or (c) `cluster` if it spawns objects from multiple +namespaces. + +### User stories +- As a user of vanilla Kubernetes, I want some guarantee how quickly I get the +response from an API call. +- As an administrator of Kubernetes cluster, if I know characteristics of my +external dependencies of apiserver (e.g custom admission plugins, webhooks and +initializers) I want to be able to provide guarantees for API calls latency to +users of my cluster. + +### Other notes +- We obviously can’t give any guarantee in general, because cluster +administrators are allowed to register custom admission plugins, webhooks +and/or initializers, which we don’t have any control about and they obviously +impact API call latencies. +- As a result, we define the SLIs to be very generic (no matter how your +cluster is set up), but we provide SLO only for default installations (where we +have control over what apiserver is doing). This doesn’t provide a false +impression, that we provide guarantee no matter how the cluster is setup and +what is installed on top of it. +- At the same time, API calls are part of pretty much every non-trivial workflow +in Kubernetes, so this metric is a building block for less trivial SLIs and +SLOs. +- The SLO for latency for read-only API calls of a given type may have significant +buffer in threshold. In fact, the latency of the request should be proportional to +the amount of work to do (which is number of objects of a given type in a given +scope) plus some constant overhead. For better tracking of performance, we +may want to define purely internal SLI of "latency per object". But that +isn't in near term plans. + +### Caveats +- The SLO has to be satisfied independently from used encoding in user-originated +requests. This makes mix of client important while testing. However, we assume +that all `core` components communicate with apiserver using protocol buffers. +- In case of GET requests, user has an option opt-in for accepting potentially +stale data (being served from cache) and the SLO again has to be satisfied +independently of that. This makes the careful choice of requests in tests +important. + +### TODOs +- We may consider treating `non-namespaced` resources as a separate bucket in +the future. However, it may not make sense if the number of those may be +comparable with `namespaced` ones. + +### Test scenario + +__TODO: Describe test scenario.__ diff --git a/sig-scalability/slos/api_extensions_latency.md b/sig-scalability/slos/api_extensions_latency.md new file mode 100644 index 000000000..c5490ec19 --- /dev/null +++ b/sig-scalability/slos/api_extensions_latency.md @@ -0,0 +1,14 @@ +## API call extension points latency SLIs details + +### Definition + +| Status | SLI | +| --- | --- | +| WIP | Admission latency for each admission plugin type, measured as 99th percentile over last 5 minutes | +| WIP | Webhook call latency for each webhook type, measured as 99th percentile over last 5 minutes +| WIP | Initializer latency for each initializer, measured as 99th percentile over last 5 minutes | + +### User stories +- As an administrator, if API calls are slow, I would like to know if this is +because slow extension points (admission plugins, webhooks, initializers) and +if so which ones are responsible for it. diff --git a/sig-scalability/slos/dns_programming_latency.md b/sig-scalability/slos/dns_programming_latency.md new file mode 100644 index 000000000..bec37dfb2 --- /dev/null +++ b/sig-scalability/slos/dns_programming_latency.md @@ -0,0 +1,48 @@ +## Network programming latency SLIs/SLOs details + +### Definition + +| Status | SLI | SLO | +| --- | --- | --- | +| __WIP__ | Latency of programming a single in-cluster dns instance, measured from when service spec or list of its `Ready` pods change to when it is reflected in that dns instance, measured as 99th percentile over last 5 minutes | In default Kubernetes installation, 99th percentile of (99th percentiles across all dns instances) per cluster-day <= X | + +### User stories +- As a user of vanilla Kubernetes, I want some guarantee how quickly in-cluster +DNS will start resolving service name to its newly started backends. +- As a user of vanilla Kubernetes, I want some guarantee how quickly in-cluster +DNS will stop resolving service name to its removed (or unhealthy) backends. +- As a user of vanilla Kubernetes, I wasn some guarantee how quickly newly +create services will be resolvable via in-cluster DNS. + +### Other notes +- We are consciously focusing on in-cluster DNS for the purpose of this SLI, +as external DNS resolution clearly depends on cloud provider or environment +in which the cluster is running (it hard to set the SLO for it). + +### Caveats +- The SLI is formulated for a single DNS instance, even though that value +itself is not very interesting for the user. +If there are multiple DNS instances in the cluster, the aggregation across +them is done only at the SLO level (and only that gives a value that is +interesting for the user). The reason for doing it this is feasibility for +efficiently computing that: + - if we would be doing aggregation at the SLI level (i.e. the SLI would be + formulated like "... reflected in in-cluster DNS and visible from 99% + of DNS instances"), computing that SLI would be extremely + difficult. It's because in order to decide e.g. whether pod transition to + Ready state is reflected, we would have to know when exactly it was reflected + in 99% of DNS instances. That requires tracking metrics on + per-change base (which we can't do efficiently). + - we admit that the SLO is a bit weaker in that form (i.e. it doesn't necessary + force that a given change is reflected in 99% of programmers with a given + 99th percentile latency), but it's close enough approximation. + +### How to measure the SLI. +There [network programming latency](./network_programming_latency.md) is +formulated in almost exactly the same way. As a result, the methodology for +measuring the SLI here is exactly the same and can be found +[here](./network_programming_latency.md#how-to-measure-the-sli). + +### Test scenario + +__TODO: Describe test scenario.__ diff --git a/sig-scalability/slos/extending_slo.md b/sig-scalability/slos/extending_slo.md deleted file mode 100644 index 5cbbb87f7..000000000 --- a/sig-scalability/slos/extending_slo.md +++ /dev/null @@ -1,72 +0,0 @@ -# Extended Kubernetes scalability SLOs - -## Goal -The goal of this effort is to extend SLOs which Kubernetes cluster has to meet to support given number of Nodes. As of April 2017 we have only two SLOs: -- API-responsiveness: 99% of all API calls return in less than 1s -- Pod startup time: 99% of Pods (with pre-pulled images) start within 5s -which are enough to guarantee that cluster doesn't feel completely dead, but not enough to guarantee that it satisfies user's needs. - -We're going to define more SLOs based on most important indicators, and standardize the format in which we speak about our objectives. Our SLOs need to have two properties: -- They need to be testable, i.e. we need to have a benchmark to measure if it's met, -- They need to be expressed in a way that's possible to understand by a user not intimately familiar with the system internals, i.e. formulation can't depend on some arcane knowledge. - -On the other hand we do not require that: -- SLOs are possible to monitor in a running cluster, i.e. not all SLOs need to be easily translatable to SLAs. Being able to benchmark is enough for us. - -## Split metrics from environment -Currently what me measure and how we measure it is tightly coupled. This means that we don't have good environmental constraint suggestions for users (e.g. how many Pods per Namespace we support, how many Endpoints per Service, how to setup the cluster etc.). We need to decide on what's reasonable and make the environment explicit. - -## Split SLOs by kind -Current SLOs implicitly assume that the cluster is in a "steady state". By this we mean that we assume that there's only some, limited, number of things going during benchmarking. We need to make this assumption explicit and split SLOs into two categories: steady-state SLOs and burst SLOs. - -## Steady state SLOs -With steady state SLO we want to give users the data about system's behavior during normal operation. We define steady state by limiting the churn on the cluster. - -This includes current SLOs: -- API call latency -- E2e Pod startup latency - -By churn we understand a measure of amount changes happening in the cluster. Its formal(-ish) definition will follow, but informally it can be thought about as number of user-issued requests per second plus number of pods affected by those requests. - -More formally churn per second is defined as: -``` -#Pod creations + #PodSpec updates + #user originated requests in a given second -``` -The last part is necessary only to get rid of situations when user is spamming API server with various requests. In ordinary circumstances we expect it to be in the order of 1-2. - -## Burst SLOs -With burst SLOs we want to give user idea on how system behaves under the heavy load, i.e. when one want the system to do something as quickly as possible, not caring too much about response time for a single request. Note that this voids all steady-state SLOs. - -This includes the new SLO: -- Pod startup throughput - -## Environment -A Kubernetes cluster in which we benchmark SLOs needs to meet the following criteria: -- Run a single appropriately sized master machine -- Main etcd runs as a single instance on the master machine -- Events are stored in a separate etcd instance running on the master machine -- Kubernetes version is at least 1.X.Y -- Components configuration = _?_ - -_TODO: NEED AN HA CONFIGURATION AS WELL_ - -## SLO template -All our performance SLOs should be defined using the following template: - ---- - -# SLO: *TL;DR description of the SLO* -## (Burst|Steady state) foo bar SLO - -### Summary -_One-two sentences describing the SLO, that's possible to understand by the majority of the community_ - -### User Stories -_A Few user stories showing in what situations users might be interested in this SLO, and why other ones are not enough_ - -## Full definition -### Test description -_Precise description of test scenario, including maximum number of Pods per Controller, objects per namespace, and anything else that even remotely seems important_ - -### Formal definition (can be skipped if the same as title/summary) -_Precise and as formal as possible definition of SLO. This does not necessarily need to be easily understandable by layman_ diff --git a/sig-scalability/slos/network_latency.md b/sig-scalability/slos/network_latency.md new file mode 100644 index 000000000..301526518 --- /dev/null +++ b/sig-scalability/slos/network_latency.md @@ -0,0 +1,54 @@ +## In-cluster network latency SLIs/SLOs details + +### Definition + +| Status | SLI | SLO | +| --- | --- | --- | +| __WIP__ | In-cluster network latency from a single prober pod, measured as latency of per second ping from that pod to "null service", measured as 99th percentile over last 5 minutes. | In default Kubernetes installataion with RTT between nodes <= Y, 99th percentile of (99th percentile over all prober pods) per cluster-day <= X | + +### User stories +- As a user of vanilla Kubernetes, I want some guarantee how fast my http +request to some Kubernetes service reaches its endpoint + +### Other notes +- We obviously can't give any guarantee in a general case, because cluster +administrators may configure cluster as they want. +- As a result, we define the SLI to be very generic (no matter how your cluster +is set up), but we provide SLO only for default installations with an additional +requirement that low-level RTT between nodes is lower than Y. +- Network latency is one of the most crucial aspects from the point of view +of application performance, especially in microservices world. As a result, to +meet user expectations, we need to provide some guarantees arount that. +- We decided for the SLI definition as formulated above, because: + - it represents a user oriented end-to-end flow - it involves among others + latency of in-cluster network programming mechanism (e.g. iptables).
+ __TODO:__ We considered making DNS resolution part of it, but decided not + to mix them. However, longer term we should consider joining them. + - it is easily measurable in all running clusters in which we can run probers + (e.g. measuring request latencies coming from all pods on a given + node would require some additional instrumentation, such as a side car for + each of them, and that overhead may be not acceptable in many cases) + - it is not application-specific + +### Caveats +- The SLI is formulated for a prober pods, even though users are mostly +interested in the aggregation across all pods (that is done only at the SLO +level). However, that provides very similar guarantees and makes it fairly +easy to measure. +- The RTT between nodes may significantly differ, if nodes are in different +topologies (e.g. GCP zones). However, given that topology-aware service routing +is not natively supported in Kubernetes yet, we explicitly acknowledge that +depending on the pinged endpoint, results may signiifcantly differ if nodes +are spanning multiple topologies. +- The prober reporting that is fairly trivial and itself needs only negligible +amount of resources. Unfortunately there isn't any component to which we can +attach that functionality (e.g. KubeProxy is running in host network), so +**we will create a dedicated set of prober pods**. We will run a set of prober +pods (number proportional to cluster size). +- We don't have any "null service" running in cluster, so an administrator has +to set up one to make the SLI measurable in real cluster. In tests, we will +create a service on top of prober pods. + +### Test scenario + +__TODO: Describe test scenario.__ diff --git a/sig-scalability/slos/network_programming_latency.md b/sig-scalability/slos/network_programming_latency.md new file mode 100644 index 000000000..dc1dace20 --- /dev/null +++ b/sig-scalability/slos/network_programming_latency.md @@ -0,0 +1,93 @@ +## Network programming latency SLIs/SLOs details + +### Definition + +| Status | SLI | SLO | +| --- | --- | --- | +| __WIP__ | Latency of programming a single (e.g. iptables on a given node) in-cluster load balancing mechanism, measured from when service spec or list of its `Ready` pods change to when it is reflected in load balancing mechanism, measured as 99th percentile over last 5 minutes | In default Kubernetes installation, 99th percentile of (99th percentiles across all programmers (e.g. iptables)) per cluster-day <= X | + +### User stories +- As a user of vanilla Kubernetes, I want some guarantee how quickly new backends +of my service will be targets of in-cluster load-balancing +- As a user of vanilla Kubernetes, I want some guarantee how quickly deleted +(or unhealthy) backends of my service will be removed from in-cluster +load-balancing +- As a user of vanilla Kubernetes, I want some guarantee how quickly changes +to service specification (including creation) will be reflected in in-cluster +load-balancing + +### Other notes +- We are consciously focusing on in-cluster load-balancing for the purpose of +this SLI, as external load-balancing is clearly provider specific (which makes +it hard to set the SLO for it). +- However, in the future it should be possible to formulate the SLI for external +load-balancing in pretty much the same way for consistency. +- The SLI measuring end-to-end time from pod creation was also considered, +but rejected due to being application specific, and thus introducing SLO would +be impossible. + +### Caveats +- The SLI is formulated for a single "programmer" (e.g. iptables on a single +node), even though that value itself is not very interesting for the user. +In case there are multiple programmers in the cluster, the aggregation across +them is done only at the SLO level (and only that gives a value that is somehow +interesting for the user). The reason for doing it this is feasibility for +efficiently computing that: + - if we would be doing aggregation at the SLI level (i.e. the SLI would be + formulated like "... reflected in in-cluster load-balancing mechanism and + visible from 99% of programmers"), computing that SLI would be extremely + difficult. It's because in order to decide e.g. whether pod transition to + Ready state is reflected, we would have to know when exactly it was reflected + in 99% of programmers (e.g. iptables). That requires tracking metrics on + per-change base (which we can't do efficiently). + - we admit that the SLO is a bit weaker in that form (i.e. it doesn't necessary + force that a given change is reflected in 99% of programmers with a given + 99th percentile latency), but it's close enough approximation. + +### How to measure the SLI. +The method of measuring this SLI is not obvious, so for completeness we describe +it here how it will be implemented with all caveats. +1. We assume that for the in-cluster load-balancing programming we are using +Kubernetes `Endpoints` objects. +1. We will introduce a dedicated annotation for `Endpoints` object (name TBD). +1. Endpoints controller (while updating a given `Endpoints` object) will be +setting value of that annotation to the timestamp of the change that triggered +this update: +- for pod transition between `Ready` and `NotReady` states, its timestamp is + simply part of pod condition +- TBD for service updates (ideally we will add `LastUpdateTimestamp` field in + object metadata next to already existing `CreationTimestamp`. The data is + already present at storage layer, so it won't be hard to propagate that. +1. The in-cluster load-balancing programmer will export a prometheus metric +once done with programming. The latency of the operation is defined as +difference between timestamp of then whe operation is done and timestamp +recorded in the newly introduced annotation. + +#### Caveats +There are a couple of caveats to that measurement method: +1. Single `Endpoints` object may batch multiple pod state transition.
+In that case, we simply choose the oldest one (and not expose all timestamps +to avoid theoretically unbounded growth of the object). That makes the metric +imprecise, but the batching period should be relatively small comparing +to whole end-to-end flow. +1. A single pod may transition its state multiple times within batching +period.
+For that case, we will add additional cache in Endpoints controller caching +the first observed transition timestamp for each pod. The cache will be +cleared when controller picks up a pod into Endpoints object update. This is +consistent with choosing the oldest update in the above point.
+Initially, we may consider simply ignoring this fact. +1. Components may fall out of watch window history and thus miss some watch +events.
+This may be the case for both Endpoints controller or kube-proxy (or other +network programmers if used instead). That becomes a problem when a single +object changed multiple times in the meantime (otherwise informers will +deliver handlers on relisting). Additionally, this can happen only when +components are too slow in processing events (that would already be reflected +in metrics) or (sometimes) after kube-apiserver restart. Given that, we are +going to neglect this problem to avoid unnecessary complications for little +or no gain. + +### Test scenario + +__TODO: Describe test scenario.__ diff --git a/sig-scalability/slos/pod_startup_latency.md b/sig-scalability/slos/pod_startup_latency.md new file mode 100644 index 000000000..7c52777ee --- /dev/null +++ b/sig-scalability/slos/pod_startup_latency.md @@ -0,0 +1,67 @@ +## Pod startup latency SLI/SLO details + +### Definition + +| Status | SLI | SLO | +| --- | --- | --- | +| __Official__ | Startup latency of stateless[1](#footnote1) and schedulable[2](#footnote2) pods, excluding time to pull images and run init containers, measured from pod creation timestamp to when all its containers are reported as started and observed via watch, measured as 99th percentile over last 5 minutes | In default Kubernetes installation, 99th percentile per cluster-day <= 5s | + +[1\]A `stateless pod` is defined as a pod that doesn't +mount volumes with sources other than secrets, config maps, downward API and +empty dir. + +[2\]By schedulable pod we mean a pod that can be +scheduled in the cluster without causing any preemption. + +### User stories +- As a user of vanilla Kubernetes, I want some guarantee how quickly my pods +will be started. + +### Other notes +- Only schedulable and stateless pods contribute to the SLI: + - If there is no space in the cluster to place the pod, there is not much + we can do about it (it is task for Cluster Autoscaler which should have + separate SLIs/SLOs). + - If placing a pod requires preempting other pods, that may heavily depend + on the application (e.g. on their graceful termination period). We don't + want that to contribute to this SLI. + - Mounting disks required by non-stateless pods may potentially also require + non-negligible time, not fully dependent on Kubernetes. +- We are explicitly excluding image pulling from time the SLI. This is +because it highly depends on locality of the image, image registry performance +characteristic (e.g. throughput), image size itself, etc. Since we have +no control over any of those (and all of those would significantly affect SLI) +we decided to simply exclude it. +- We are also explicitly excluding time to run init containers, as, again, this +is heavily application-dependent (and does't depend on Kubernetes itself). +- The answer to question "when pod should be considered as started" is also +not obvious. We decided for the semantic of "when all its containers are +reported as started and observed via watch", because: + - we require all containers to be started (not e.g. the first one) to ensure + that the pod is started. We need to ensure that potential regressions like + linearization of container startups within a pod will be catch by this SLI. + - note that we don't require all container to be running - if some of them + finished before the last one was started that is also fine. It is just + required that all of them has been started (at least once). + - we don't want to rely on "readiness checks", because they heavily + depend on the application. If the application takes couple minutes to + initialize before it starts responding to readiness checks, that shouldn't + count towards Kubernetes performance. + - even if your application started, many control loops in Kubernetes will + not fire before they will observe that. If Kubelet is not able to report + the status due to some reason, other parts of the system will not have + a way to learn about it - this is why reporting part is so important + here. + - since watch is so centric to Kubernetes (and many control loops are + triggered by specific watch events), observing the status of pod is + also part of the SLI (as this is the moment when next control loops + can potentially be fired). + +### TODOs +- We should try to provide guarantees for non-stateless pods (the threshold +may be higher for them though). +- Revisit whether we want "watch pod status" part to be included in the SLI. + +### Test scenario + +__TODO: Descibe test scenario.__ diff --git a/sig-scalability/slos/slos.md b/sig-scalability/slos/slos.md new file mode 100644 index 000000000..a1ff11202 --- /dev/null +++ b/sig-scalability/slos/slos.md @@ -0,0 +1,131 @@ +# Kubernetes scalability and performance SLIs/SLOs + +## What Kubernetes guarantees? + +One of the important aspects of Kubernetes is its scalability and performance +characteristic. As Kubernetes user or operator/administrator of a cluster +you would expect to have some guarantees in those areas. + +The goal of this doc is to organize the guarantees that Kubernetes provides +in these areas. + +## What do we require from SLIs/SLOs? + +We are in the process of extending the number of SLIs ([Service Level Indicators]) +and SLOs ([Service Level Objectives]) built on top of these SLIs to cover more areas +of the system and user expectations. + +Our SLIs/SLOs need to have the following properties: +- They need to be testable
+ Ideally, they (SLIs and SLOs) should be measurable in all running clusters, + but if that isn't possible a benchmark may be enough in some situations. + That means that not every SLO may be translatable to SLA ([Service + Level Agreement]). +- They need to be understandable for users
+ In particular, they need to be understandable for people not familiar + with the system internals, i.e. their formulation can't depend on some + arcane knowledge. + +We may also introduce internal(for developers only) SLIs, that may be useful +for understanding performance characteristic of the system, but for which +we don't provide any guarantees for users (and thus don't require them to be +that easily understandable). + +[Service Level Indicators]: https://en.wikipedia.org/wiki/Service_level_indicator +[Service Level Objectives]: https://en.wikipedia.org/wiki/Service_level_objective +[Service Level Agreement]: https://en.wikipedia.org/wiki/Service-level_agreement + +## Types of SLOs + +While SLIs are very generic and don't really depend on anything (they just +define what and how we measure), it's not the case for SLOs. +SLOs provide guarantees, and satisfying them may depend on meeting some +specific requirements. + +As a result, we build our SLOs in "you promise, we promise" format. +That means, that we provide you a guarantee only if you satisfy the requirement +that we put on you. + +As a consequence we introduce the two types of SLOs. + +### Steady state SLOs + +With steady state SLOs, we provide guarantees about system's behavior during +normal operations. We are able to provide much more guarantees in that situation. + +```Definition +We define system to be in steady state when the cluster churn per second is <= 20, where + +churn = #(Pod spec creations/updates/deletions) + #(user originated requests) in a given second +``` + +### Burst SLO + +With burst SLOs, we provide guarantees on how system behaves under the heavy load +(when user wants the system to do something as quickly as possible not caring too +much about response time). + +## Environment + +In order to meet the SLOs, system must run in the environment satisfying +the following criteria: +- Runs a single or more appropriate sized master machines +- Main etcd running on master machine(s) +- Events are stored in a separate etcd running on the master machine(s) +- Kubernetes version is at least X.Y.Z +- ... + +__TODO: Document other necessary configuration.__ + +## Thresholds + +To make the cluster eligible for SLO, users also can't have too many objects in +their clusters. More concretely, the number of different objects in the cluster +MUST satisfy thresholds defined in [thresholds file][]. + +[thresholds file]: https://github.com/kubernetes/community/blob/master/sig-scalability/configs-and-limits/thresholds.md + + +## Kubernetes SLIs/SLOs + +The currently existing SLIs/SLOs are enough to guarantee that cluster isn't +completely dead. However, they are not enough to satisfy user's needs in most +of the cases. + +We are looking into extending the set of SLIs/SLOs to cover more parts of +Kubernetes. + +``` +Prerequisite: Kubernetes cluster is available and serving. +``` + +### Steady state SLIs/SLOs + +| Status | SLI | SLO | User stories, test scenarios, ... | +| --- | --- | --- | --- | +| __Official__ | Latency of mutating API calls for single objects for every (resource, verb) pair, measured as 99th percentile over last 5 minutes | In default Kubernetes installation, for every (resource, verb) pair, excluding virtual and aggregated resources and Custom Resource Definitions, 99th percentile per cluster-day[1](#footnote1) <= 1s | [Details](./api_call_latency.md) | +| __Official__ | Latency of non-streaming read-only API calls for every (resource, scope pair, measured as 99th percentile over last 5 minutes | In default Kubernetes installation, for every (resource, scope) pair, excluding virtual and aggregated resources and Custom Resource Definitions, 99th percentile per cluster-day[1](#footnote1) (a) <= 1s if `scope=resource` (b) <= 5s if `scope=namespace` (c) <= 30s if `scope=cluster` | [Details](./api_call_latency.md) | +| __Official__ | Startup latency of stateless and schedulable pods, excluding time to pull images and run init containers, measured from pod creation timestamp to when all its containers are reported as started and observed via watch, measured as 99th percentile over last 5 minutes | In default Kubernetes installation, 99th percentile per cluster-day[1](#footnote1) <= 5s | [Details](./pod_startup_latency.md) | +| __WIP__ | Latency of programming a single (e.g. iptables on a given node) in-cluster load balancing mechanism, measured from when service spec or list of its `Ready` pods change to when it is reflected in load balancing mechanism, measured as 99th percentile over last 5 minutes | In default Kubernetes installation, 99th percentile of (99th percentiles across all programmers (e.g. iptables)) per cluster-day[1](#footnote1) <= X | [Details](./network_programming_latency.md) | +| __WIP__ | Latency of programming a single in-cluster dns instance, measured from when service spec or list of its `Ready` pods change to when it is reflected in that dns instance, measured as 99th percentile over last 5 minutes | In default Kubernetes installation, 99th percentile of (99th percentiles across all dns instances) per cluster-day <= X | [Details](./dns_programming_latency.md) | +| __WIP__ | In-cluster network latency from a single prober pod, measured as latency of per second ping from that pod to "null service", measured as 99th percentile over last 5 minutes. | In default Kubernetes installataion with RTT between nodes <= Y, 99th percentile of (99th percentile over all prober pods) per cluster-day <= X | [Details](./network_latency.md) | + +\[1\] For the purpose of visualization it will be a +sliding window. However, for the purpose of reporting the SLO, it means one +point per day (whether SLO was satisfied on a given day or not). + +### Burst SLIs/SLOs + +| Status | SLI | SLO | User stories, test scenarios, ... | +| --- | --- | --- | --- | +| WIP | Time to start 30\*#nodes pods, measured from test scenario start until observing last Pod as ready | Benchmark: when all images present on all Nodes, 99th percentile <= X minutes | [Details](./system_throughput.md) | + +### Other SLIs + +| Status | SLI | User stories, ... | +| --- | --- | --- | +| WIP | Watch latency for every resource, (from the moment when object is stored in database to when it's ready to be sent to all watchers), measured as 99th percentile over last 5 minutes | [Details](./watch_latency.md) | +| WIP | Admission latency for each admission plugin type, measured as 99th percentile over last 5 minutes | [Details](./api_extensions_latency.md) | +| WIP | Webhook call latency for each webhook type, measured as 99th percentile over last 5 minutes | [Details](./api_extensions_latency.md) | +| WIP | Initializer latency for each initializer, measured as 99th percentile over last 5 minutes | [Details](./api_extensions_latency.md) | + diff --git a/sig-scalability/slos/system_throughput.md b/sig-scalability/slos/system_throughput.md new file mode 100644 index 000000000..eb3fc6afd --- /dev/null +++ b/sig-scalability/slos/system_throughput.md @@ -0,0 +1,34 @@ +## System throughput SLI/SLO details + +### Definition + +| Status | SLI | SLO | +| --- | --- | --- | +| WIP | Time to start 30\*#nodes pods, measured from test scenario start until observing last Pod as ready | Benchmark: when all images present on all Nodes, 99th percentile <= X minutes | + +### User stories +- As a user, I want a guarantee that my workload of X pods can be started + within a given time +- As a user, I want to understand how quickly I can react to a dramatic + change in workload profile when my workload exhibits very bursty behavior + (e.g. shop during Back Friday Sale) +- As a user, I want a guarantee how quickly I can recreate the whole setup + in case of a serious disaster which brings the whole cluster down. + +### Test scenario +- Start with a healthy (all nodes ready, all cluster addons already running) + cluster with N (>0) running pause pods per node. +- Create a number of `Namespaces` and a number of `Deployments` in each of them. +- All `Namespaces` should be isomorphic, possibly excluding last one which should + run all pods that didn't fit in the previous ones. +- Single namespace should run 5000 `Pods` in the following configuration: + - one big `Deployment` running ~1/3 of all `Pods` from this `namespace` + - medium `Deployments`, each with 120 `Pods`, in total running ~1/3 of all + `Pods` from this `namespace` + - small `Deployment`, each with 10 `Pods`, in total running ~1/3 of all `Pods` + from this `Namespace` +- Each `Deployment` should be covered by a single `Service`. +- Each `Pod` in any `Deployment` contains two pause containers, one `Secret` + other than default `ServiceAccount` and one `ConfigMap`. Additionally it has + resource requests set and doesn't use any advanced scheduling features or + init containers. diff --git a/sig-scalability/slos/throughput_burst_slo.md b/sig-scalability/slos/throughput_burst_slo.md deleted file mode 100644 index e579acb13..000000000 --- a/sig-scalability/slos/throughput_burst_slo.md +++ /dev/null @@ -1,26 +0,0 @@ -# SLO: Kubernetes cluster of size at least X is able to start Y Pods in Z minutes -**This is a WIP SLO doc - something that we want to meet, but we may not be there yet** - -## Burst Pod Startup Throughput SLO -### User Stories -- User is running a workload of X total pods and wants to ensure that it can be started in Y time. -- User is running a system that exhibits very bursty behavior (e.g. shop during Black Friday Sale) and wants to understand how quickly they can react to a dramatic change in workload profile. -- User is running a huge serving app on a huge cluster. He wants to know how quickly he can recreate his whole setup in case of a serious disaster which will bring the whole cluster down. - -Current steady state SLOs are do not provide enough data to make these assessments about burst behavior. -## SLO definition (full) -### Test setup -Standard performance test kubernetes setup, as describe in [the doc](../extending_slo.md#environment). -### Test scenario is following: -- Start with a healthy (all nodes ready, all cluster addons already running) cluster with N (>0) running pause Pods/Node. -- Create a number of Deployments that run X Pods and Namespaces necessary to create them. -- All namespaces should be isomorphic, possibly excluding last one which should run all Pods that didn't fit in the previous ones. -- Single Namespace should run at most 5000 Pods in the following configuration: - - one big Deployment running 1/3 of all Pods from this Namespace (1667 for 5000 Pod Namespace) - - medium Deployments, each of which is not running more than 120 Pods, running in total 1/3 of all Pods from this Namespace (14 Deployments with 119 Pods each for 5000 Pod Namespace) - - small Deployments, each of which is not running more than 10 Pods, running in total 1/3 of all Pods from this Namespace (238 Deployments with 7 Pods each for 5000 Pod Namespace) -- Each Deployment is covered by a single Service. -- Each Pod in any Deployment contains two pause containers, one secret other than ServiceAccount and one ConfigMap, has resource request set and doesn't use any advanced scheduling features (Affinities, etc.) or init containers. -- Measure the time between starting the test and moment when last Pod is started according to it's Kubelet. Note that pause container is ready just after it's started, which may not be true for more complex containers that use nontrivial readiness probes. -### Definition -Kubernetes cluster of size at least X adhering to the environment definition, when running the specified test, 99th percentile of time necessary to start Y pods from the time when user created all controllers to the time when Kubelet starts the last Pod from the set is no greater than Z minutes, assuming that all images are already present on all Nodes. \ No newline at end of file diff --git a/sig-scalability/slos/watch_latency.md b/sig-scalability/slos/watch_latency.md new file mode 100644 index 000000000..21324e23d --- /dev/null +++ b/sig-scalability/slos/watch_latency.md @@ -0,0 +1,23 @@ +## Watch latency SLI details + +### Definition + +| Status | SLI | +| --- | --- | +| WIP | Watch latency for every resource, (from the moment when object is stored in database to when it's ready to be sent to all watchers), measured as 99th percentile over last 5 minutes | + +### User stories +- As an administrator, if Kubernetes is slow, I would like to know if the root +cause of it is slow api-machinery (slow watch) or something farther the path +(lack of network bandwidth, slow or cpu-starved controllers, ...) + +### Other notes +- Pretty much all control loops in Kubernetes are watch-based. As a result +slow watch means slow system in general. +- Note that how we measure it silently assumes no clock-skew in case of +cluster with multiple masters. + +### TODOs +- Longer term, we would like to provide some guarantees on watch latency +(e.g. 99th percentile of SLI per cluster-day <= Xms). However, we are not +there yet. diff --git a/sig-scalability/tools/performance-comparison-tool.md b/sig-scalability/tools/performance-comparison-tool.md deleted file mode 100644 index 650b1f933..000000000 --- a/sig-scalability/tools/performance-comparison-tool.md +++ /dev/null @@ -1,112 +0,0 @@ -# Performance Comparison Tool - -_by Shyam JVS, Google Inc (reviewed by Marek Grabowski & Wojciech Tyczysnki)_ - -## BACKGROUND - -Kubemark is a performance testing tool which we use to run simulated kubernetes clusters. The primary use case is scalability testing, as creating simulated clusters is faster and requires less resources than creating real ones. For more information about kubemark, take a look into the [doc](https://github.com/kubernetes/community/blob/master/contributors/devel/kubemark-guide.md). - -## OBJECTIVE - -After recent updates, kubemark caught up with the setup of real clusters w.r.t. having all core cluster components, some add-ons and some daemons. Now we want to be able to say confidently that kubemark really reflects performance problems/bottlenecks in real clusters. Thus, our goals are to: - -- Make kubemark mimic real clusters in performance enough to allow reasoning about meeting performance SLOs using kubemark runs. -- Formalize the notion of “similar performance” and set up a tool for doing the comparison. - -## DESIGN OVERVIEW - -We assume that we want to benchmark a test T across two variants A and B. For the benchmarking to be meaningful, these two variants should be running in a similar environment (eg. one in real-cluster and one in kubemark) and at identical scale (eg. both run 2k nodes). At a high-level, the tool should: - -- *choose the set of runs* of tests T executed on both A and B environments to use for comparison, -- *obtain the relevant metrics* for the runs chosen for comparison, -- *compute the similarity* for each individual metric, across both the samples, -- *compute overall similarity* of A and B, using similarity values of all metrics. - -Final output of the tool will be the answer to the question "are environments A and B similar enough with respect to chosen metrics" given some notion of similarity. The result will contain similarity measure for each metric and a similarity measure for the whole test. E.g. - -``` -Performance comparison results: -API call latencies: -GET Pod: 0.95 -PUT Pod: 0.92 -... -E2e Pod startup latencies: 0.99 -Total similarity measure: 0.95 -``` - -## DESIGN DETAILS - -Performance Comparison Tool's infrastructure is designed to be easily extensible and portable. It'll allow for easy modification/extension of default logic and it'll be possible to run it on any environment that can build go binaries, and have access to relevant data. - -It'll consist of a single binary that will be able to read series of test results either from Google Cloud Storage buckets or from local disk, extract relevant metrics from those results, compute given similarity function for all metrics, and finally combine those similarities in the final result. - -Moving parts of the system are: - -- tests to compare (including the source: local or GCS) -- set of metrics to compare -- definition of similarity measure for single metrics -- definition of similarity measure for whole test (combined metrics) - -Below we discuss default choices we made. - -### Choosing tests to compare - -When running the comparison we need to decide on which tests to include and how to get their data. In the first version of our comparison tool we support only GCS and local sources for data with a well defined structure. We expect to have a bucket/directory with results for each run of the test. Each of those subdirectories need to have dedicated files for metrics for those runs in some well-defined format (like json). We'll expose a flag that'll allow for choosing only a subset of runs (subdirectories) to read. - -By default we'll use GCS source and the last â€n’ (TBD) runs of either tests for comparing. â€n’ will be a configurable parameter of the tool as it could vary depending on the requirements of various tests. - -### Choosing set of metrics to compare - -User will be able to support a set of metrics to include into comparison. The only requirement for those metrics is to have a single numeric value. - -In the initial version we'll default to the following metrics that are most directly visible in k8s performance: - -- Percentiles (90%, 95%, 99%) of pod startup latency -- Percentiles (90%, 95%, 99%) of api request serving latency (split by resource and verb) - -The framework itself will be extensible, so it'll be easy to add new metrics. In the future we plan to add: - -- etcd request latencies -- pod startup throughput -- resource usage of control-plane components - -Because performance results tend to vary a lot, especially when metrics are small (e.g. API call latencies of low tens of milliseconds) due to various processes that happen on the machine (most notably go garbage collector running), before doing any comparison we need to reduce the noise in the data. Those normalization procedures will be defined in the code for each supported metric. For initial ones we're going to set a cutoff threshold and substitute all values smaller than it with the threshold: - -- for API call latencies it'll be 50ms -- for e2e Pod startup latency it'll be 1s - -### What do we mean by similarity between single metric series? - -For each metric we're considering we'll get a series of results, which we'll treat as a series of experiments from a single probability distribution. We have one such series for either tests we want to compare. The question we want to answer is whether their underlying distributions are "similar enough". - -Initially we’ll use a simple test to determine if the metrics are similar. We find the ratio of the metric’s averages from either series and check if that ratio is in the interval \[0.66, 1.50\] (i.e. one does not differ from the other by more than 33%). We deem the metric as matched if and only if It lies in the interval. We can switch to more advanced statistical tests on distributions of these metrics in future if needed. - -### What do we mean by similarity for whole test? - -Once we have calculated the similarity measures for all the metrics in the metrics set, we need to decide how to compute combined similarity score. - -We classify each metric as matched/mismatched based on the above test. We could have more than just binary classification in future if needed. Finally, the overall comparison result would be computed as: - -- PASS, if at least 90% of the metrics in our set matched -- FAIL, otherwise - -(Note: If a metric consistently mismatches across multiple rounds of comparison, it needs fixing) - -## RELEVANCE & SCOPE - -- This tool can benefit the community in the following ways: - - Having this tool as open-source would make the process of testing on simulated clusters and claims about performance on real clusters using performance on simulated clusters more clear and transparent. - - Since performance on simulated clusters indicates the kubernetes side of performance rather than that on the side of the underlying provider infra, it can help the community / kubernetes providers be assured that there indeed are no scalability problems on the side of kubernetes. -- This tool can be extended in future for other use cases like: - - Compare two different samples of runs from the same test to see which metrics have improved / degraded over time. - - Run comparison with more advanced statistical tests that validate hypotheses about similarity of the underlying distributions of the metric series and see if the distributions follow some known family of distribution functions. - --------------------------- - -**NOTES FOR INTERESTED CONTRIBUTORS** - -This tool has been implemented and the code for it lies [here](https://github.com/kubernetes/perf-tests/tree/master/benchmark). Further, we have setup an [automated CI job](https://k8s-testgrid.appspot.com/perf-tests#kubemark-100-benchmark) that runs this benchmark periodically and compares the metrics across our 100-node kubemark and 100-node real-cluster runs from the last 24 hrs. - -If you want to contribute to this tool, file bugs or help with understanding/resolving differences we’re currently observing across kubemark and real-cluster (e.g [#44701](https://github.com/kubernetes/kubernetes/issues/44701)), ping us on “sig-scale” kubernetes slack channel and/or write an email to `kubernetes-sig-scale@googlegroups.com`. - -We have some interesting challenges in store for you, that span multiple parts of the system. diff --git a/sig-scheduling/README.md b/sig-scheduling/README.md index 750699f3a..dbfd263ae 100644 --- a/sig-scheduling/README.md +++ b/sig-scheduling/README.md @@ -5,12 +5,13 @@ Please do not edit this file directly, but instead make changes to the sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> +---> # Scheduling Special Interest Group ## Meetings -* Regular SIG Meeting: [Thursdays at 20:00 UTC](https://zoom.us/j/7767391691) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=20:00&tz=UTC). +* 10AM PT Meeting: [Thursdays at 17:00 UTC](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly starting Thursday June 7, 2018). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=17:00&tz=UTC). +* 5PM PT Meeting: [Thursdays at 24:00 UTC](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly starting Thursday June 14, 2018). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=24:00&tz=UTC). * [Meeting notes and Agenda](https://docs.google.com/document/d/13mwye7nvrmV11q9_Eg77z-1w3X7Q1GTbslpml4J7F3A/edit). * [Meeting recordings](https://www.youtube.com/watch?v=PweKj6SU7UA&list=PL69nYSiGNLP2vwzcCOhxrL3JVBc-eaJWI). @@ -20,7 +21,7 @@ To understand how this file is generated, see https://git.k8s.io/community/gener The Chairs of the SIG run operations and processes governing the SIG. * Bobby (Babak) Salamat (**[@bsalamat](https://github.com/bsalamat)**), Google -* Timothy St. Clair (**[@timothysc](https://github.com/timothysc)**), Heptio +* Klaus Ma (**[@k82cn](https://github.com/k82cn)**), Huawei ## Contact * [Slack](https://kubernetes.slack.com/messages/sig-scheduling) @@ -36,32 +37,31 @@ The following subprojects are owned by sig-scheduling: - **descheduler** - Owners: - https://raw.githubusercontent.com/kubernetes-incubator/descheduler/master/OWNERS -- **kube-arbitrator** +- **kube-batch** - Owners: - - https://raw.githubusercontent.com/kubernetes-incubator/kube-arbitrator/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/kube-batch/master/OWNERS - **scheduler** - Owners: - https://raw.githubusercontent.com/kubernetes/kubernetes/master/cmd/kube-scheduler/OWNERS - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/scheduler/OWNERS +- **poseidon** + - Owners: + - https://raw.githubusercontent.com/kubernetes-sigs/poseidon/master/OWNERS ## GitHub Teams The below teams can be mentioned on issues and PRs in order to get attention from the right people. Note that the links to display team membership will only work if you are a member of the org. -The google groups contain the archive of Github team notifications. -Mentioning a team on Github will CC its group. -Monitor these for Github activity if you are not a member of the team. - -| Team Name | Details | Google Groups | Description | -| --------- |:-------:|:-------------:| ----------- | -| @kubernetes/sig-scheduling-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-scheduling-api-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-scheduling-api-reviews) | API Changes and Reviews | -| @kubernetes/sig-scheduling-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-scheduling-bugs) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-scheduling-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-scheduling-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-scheduling-feature-requests) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-scheduling-feature-requests) | Feature Requests | -| @kubernetes/sig-scheduling-misc | [link](https://github.com/orgs/kubernetes/teams/sig-scheduling-misc) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-scheduling-misc) | General Discussion | -| @kubernetes/sig-scheduling-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-scheduling-pr-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-scheduling-pr-reviews) | PR Reviews | -| @kubernetes/sig-scheduling-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-scheduling-proposals) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-scheduling-proposals) | Design Proposals | -| @kubernetes/sig-scheduling-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-scheduling-test-failures) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-scheduling-test-failures) | Test Failures and Triage | +| Team Name | Details | Description | +| --------- |:-------:| ----------- | +| @kubernetes/sig-scheduling-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-scheduling-api-reviews) | API Changes and Reviews | +| @kubernetes/sig-scheduling-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-scheduling-bugs) | Bug Triage and Troubleshooting | +| @kubernetes/sig-scheduling-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-scheduling-feature-requests) | Feature Requests | +| @kubernetes/sig-scheduling-misc | [link](https://github.com/orgs/kubernetes/teams/sig-scheduling-misc) | General Discussion | +| @kubernetes/sig-scheduling-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-scheduling-pr-reviews) | PR Reviews | +| @kubernetes/sig-scheduling-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-scheduling-proposals) | Design Proposals | +| @kubernetes/sig-scheduling-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-scheduling-test-failures) | Test Failures and Triage | diff --git a/sig-scheduling/charter.md b/sig-scheduling/charter.md new file mode 100644 index 000000000..f3bb53830 --- /dev/null +++ b/sig-scheduling/charter.md @@ -0,0 +1,68 @@ +# SIG Scheduling Charter + +This charter adheres to the conventions described in the [Kubernetes Charter README] and uses +the Roles and Organization Management outlined in [sig-governance]. + +## Scope + +SIG Scheduling is responsible for the components that make Pod placement decisions. +We build Kubernetes schedulers and scheduling features for Pods. We design and +implement features that allows users to customize placement of Pods on the nodes +of a cluster. These features include those that improve reliability of workloads, +more efficient use of cluster resources, and/or enforces placement policies. + +### In scope + +SIG [readme] + +#### Code, Binaries and Services + +- Scheduling related features (e.g. Node Affinity) +- Kube-scheduler performance and scalability (with [sig-scalability](../sig-scalability)) +- Kube-scheduler reliability (problem detection and remediation) +- Pod scheduling APIs (with [sig-api-machinery](../sig-api-machinery)) +- Node resource management (with [sig-node](../sig-node)) +- Cluster resource management (with [sig-node](../sig-node)) +- Pod scheduling policies (with [sig-auth](../sig-auth)) + +**This is NOT** a list of specific code locations, + or projects. For those refer to [SIG Subprojects][sig-subprojects]. + +#### Cross-cutting and Externally Facing Processes + +- Kube-scheduler [test grid] and [perf dashboard] + +### Out of scope + +- network management ([sig-network](../sig-network)) +- persistent storage management ([sig-storage](../sig-storage)) +- enforcement of resource quota and other admission policies ([sig-api-machinery](../sig-api-machinery)) + +## Roles and Organization Management + +This sig adheres to the Roles and Organization Management outlined in [sig-governance] +and opts-in to updates and modifications to [sig-governance]. + +### Additional responsibilities of Chairs + +- Technical leads seeded by legacy SIG chairs from existing subproject owners + +### Additional responsibilities of Tech Leads + +None + +### Deviations from [sig-governance] + +None + +### Subproject Creation + +SIG Technical Leads + + +[test grid]: https://k8s-testgrid.appspot.com/sig-scheduling#Summary +[perf dashboard]: http://perf-dash.k8s.io/ +[readme]: https://github.com/kubernetes/community/tree/master/sig-scheduling +[sig-governance]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance.md +[sig-subprojects]: https://github.com/kubernetes/community/blob/master/sig-scheduling/README.md#subprojects +[Kubernetes Charter README]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/README.md \ No newline at end of file diff --git a/sig-service-catalog/README.md b/sig-service-catalog/README.md index 480019c21..849fb9e75 100644 --- a/sig-service-catalog/README.md +++ b/sig-service-catalog/README.md @@ -5,13 +5,15 @@ Please do not edit this file directly, but instead make changes to the sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> +---> # Service Catalog Special Interest Group -To develop a Kubernetes API for the CNCF service broker and Kubernetes broker implementation. +Service Catalog is a Kubernetes extension project that implements the [Open Service Broker API](https://www.openservicebrokerapi.org/) (OSBAPI). It allows application developers the ability to provision and consume cloud services natively from within Kubernetes. + +The [charter](charter.md) defines the scope and governance of the Service Catalog Special Interest Group. ## Meetings -* Regular SIG Meeting: [Mondays at 13:00 PT (Pacific Time)](https://zoom.us/j/7201225346) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=13:00&tz=PT%20%28Pacific%20Time%29). +* Regular SIG Meeting: [Mondays at 13:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=13:00&tz=PT%20%28Pacific%20Time%29). * [Meeting notes and Agenda](https://docs.google.com/document/d/17xlpkoEbPR5M6P5VDzNx17q6-IPFxKyebEekCGYiIKM/edit). * [Meeting recordings](https://www.youtube.com/watch?v=ukPj1sFFkr0&list=PL69nYSiGNLP2k9ZXx9E1MvRSotFDoHUWs). @@ -20,10 +22,10 @@ To develop a Kubernetes API for the CNCF service broker and Kubernetes broker im ### Chairs The Chairs of the SIG run operations and processes governing the SIG. -* Paul Morie (**[@pmorie](https://github.com/pmorie)**), Red Hat -* Aaron Schlesinger (**[@arschles](https://github.com/arschles)**), Microsoft -* Ville Aikas (**[@vaikas-google](https://github.com/vaikas-google)**), Google +* Carolyn Van Slyck (**[@carolynvs](https://github.com/carolynvs)**), Microsoft +* Michael Kibbe (**[@kibbles-n-bytes](https://github.com/kibbles-n-bytes)**), Google * Doug Davis (**[@duglin](https://github.com/duglin)**), IBM +* Jay Boyd (**[@jboyd01](https://github.com/jboyd01)**), Red Hat ## Contact * [Slack](https://kubernetes.slack.com/messages/sig-service-catalog) @@ -42,19 +44,15 @@ The following subprojects are owned by sig-service-catalog: The below teams can be mentioned on issues and PRs in order to get attention from the right people. Note that the links to display team membership will only work if you are a member of the org. -The google groups contain the archive of Github team notifications. -Mentioning a team on Github will CC its group. -Monitor these for Github activity if you are not a member of the team. - -| Team Name | Details | Google Groups | Description | -| --------- |:-------:|:-------------:| ----------- | -| @kubernetes/sig-service-catalog-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-service-catalog-api-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-service-catalog-api-reviews) | API Changes and Reviews | -| @kubernetes/sig-service-catalog-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-service-catalog-bugs) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-service-catalog-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-service-catalog-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-service-catalog-feature-requests) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-service-catalog-feature-requests) | Feature Requests | -| @kubernetes/sig-service-catalog-misc | [link](https://github.com/orgs/kubernetes/teams/sig-service-catalog-misc) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-service-catalog-misc) | General Discussion | -| @kubernetes/sig-service-catalog-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-service-catalog-pr-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-service-catalog-pr-reviews) | PR Reviews | -| @kubernetes/sig-service-catalog-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-service-catalog-proposals) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-service-catalog-proposals) | Design Proposals | -| @kubernetes/sig-service-catalog-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-service-catalog-test-failures) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-service-catalog-test-failures) | Test Failures and Triage | +| Team Name | Details | Description | +| --------- |:-------:| ----------- | +| @kubernetes/sig-service-catalog-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-service-catalog-api-reviews) | API Changes and Reviews | +| @kubernetes/sig-service-catalog-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-service-catalog-bugs) | Bug Triage and Troubleshooting | +| @kubernetes/sig-service-catalog-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-service-catalog-feature-requests) | Feature Requests | +| @kubernetes/sig-service-catalog-misc | [link](https://github.com/orgs/kubernetes/teams/sig-service-catalog-misc) | General Discussion | +| @kubernetes/sig-service-catalog-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-service-catalog-pr-reviews) | PR Reviews | +| @kubernetes/sig-service-catalog-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-service-catalog-proposals) | Design Proposals | +| @kubernetes/sig-service-catalog-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-service-catalog-test-failures) | Test Failures and Triage | diff --git a/sig-service-catalog/charter.md b/sig-service-catalog/charter.md new file mode 100644 index 000000000..6597ad827 --- /dev/null +++ b/sig-service-catalog/charter.md @@ -0,0 +1,170 @@ +# SIG Service Catalog Charter + +This charter adheres to the conventions described in the [Kubernetes Charter +README](https://github.com/kubernetes/community/blob/master/committee-steering/governance/README.md). + +## Scope + +Service Catalog is a Kubernetes extension project that implements the [Open +Service Broker API](https://www.openservicebrokerapi.org/) (OSBAPI). It enables +application developers to provision cloud services from within Kubernetes and +integrates configuration and discovery of those services into Kubernetes +resources. + +### In scope + +See the [service-catalog SIG entry](https://github.com/kubernetes/community/tree/master/sig-service-catalog). + +This SIG’s main goals are: +- Support, and adhere to, the Platform requirements of the [OSBAPI + specification](https://github.com/openservicebrokerapi/servicebroker/blob/master/spec.md). +- Provide a UX for Kubernetes users that is consistent with both the OSB API + specification and traditional Kubernetes user interactions. +- Align with the OSBAPI specification as changes are made. +- Provide feedback (bugs or feature requests) to the [OSBAPI WG]](https://www.openservicebrokerapi.org/). + +### Code, Binaries and services + +- [Source Repository](https://github.com/kubernetes-incubator/service-catalog) + - See [OWNERS](https://raw.githubusercontent.com/kubernetes-incubator/service-catalog/master/OWNERS) for who has access. +- [Image Repository](https://quay.io/organization/kubernetes-service-catalog) + - Canary builds are published on pushes to master. + - Release builds (and latest) are published on tags. + - Chairs have access to manage this repository. +- [Helm Repository](https://svc-catalog-charts.storage.googleapis.com) + - Charts are manually published after each release. + - Managed by Vic Iglesias (Google), @viglesias on the kubernetes slack. +- [svc-cat.io](https://svc-cat.io) + - Published on pushes to master. + - Site hosted with [Netlify](https://app.netlify.com/sites/svc-cat/overview). + - Chairs and interested maintainers have access to manage this site. +- [CLI Binary Hosting](https://svc-cat.io/docs/install/#manual) + - Canary builds are published on pushes to master. + - Release builds (and latest) are published on tags. + - Files hosted on Azure blob storage. + - Azure account managed by Carolyn Van Slyck (Microsoft) and Aaron Schlesinger + (Microsoft). +- [Travis](https://travis-ci.org/kubernetes-incubator/service-catalog) + - Runs the CI builds. + - Maintainers have access. +- [Jenkins](https://service-catalog-jenkins.appspot.com/) + - Runs end-to-end tests on a live cluster. + - Server managed by Michael Kibbe (Google). + +### Out of scope + +The following, non-exhaustive, items are out of scope: +- Operation of OSBAPI Service Brokers. + +## Roles +This SIG's charter deviates from the +[sig-governance](https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance.md) +roles. We do not have the Tech Lead role, and have a honorary Emeritus Chair role. + +- [Maintainers](https://github.com/orgs/kubernetes-incubator/teams/maintainers-service-catalog/members) + - Maintainer is equivalent to the standard [Kubernetes definition of + Approver](https://github.com/kubernetes/community/blob/master/community-membership.md#approver). + - Responsible for reviewing pull requests, and approving pull requests for merge. + - Responsible for technical planning and stewardship of the project. + - New maintainers may be nominated by another maintainer, and accepted via lazy + two-thirds resolution amongst the chairs. + - Maintainers may be nominated for removal from their position by a chair, + and accepted via lazy two-thirds resolution amongst the chairs. + - Maintainers may propose changes to this charter at any time, by submitting a + pull request and then notifying the SIG mailing list, to be accepted via + lazy two-thirds resolution amongst the chairs. + +- Chairs + - Chairs are expected to perform the role of maintainer, in addition to their chair responsibilities. + - Chairs are listed in our [SIG + definition](https://github.com/kubernetes/community/tree/master/sig-service-catalog#chairs). + - Responsible for project administration activities within the SIG and are + non-technical in nature, such as organizing the weekly meetings. + - A chair does not have more rights, or votes, than a maintainer. + - Responsible for reporting the SIG’s status to the appropriate Kubernetes + leadership teams. + - All decisions amongst chairs are made using lazy consensus with a fallback + to a 2/3 majority vote (lazy two-thirds resolution). + This process is used for all decisions, such as changing chairs/maintainers + or modifying this charter. + - Chairs may nominate a new chair at any time, to be accepted via lazy + two-thirds resolution amongst the chairs. + - Chairs may decide to step down at any time. + - Chairs must remain active in the role and may be removed from the position + via lazy two-thirds resolution amongst the chairs, if they are unresponsive + for > 3 months or are not proactively working with other chairs to fulfill + responsibilities. + - There is no set number of Chairs. + +- Emeritus Chairs ([Inspired by the Helm + Project](http://technosophos.com/2018/01/11/introducing-helm-emeritus-core-maintainers.html)) + - A chair who steps down may choose to take an Emeritus Chair title. This + confers honor on the recipient and allows them to remain associated with the + SIG in acknowledgement of their significant contributions. + - Those who attain this title are no longer expected to attend the weekly + meetings, share in the issue queue triage rotation, vote on policy or + architectural issues, or review pull requests. + - They are [listed in our documentation](https://svc-cat.io/community/#leadership) + as Emeritus Chairs, and we will continue to invite them to participate in + related events, such as KubeCon. + +- Security Contacts + - Are a contact point for the Product Security Team to reach out to for + triaging and handling of incoming issues. + - Must be a maintainer. + - Must accept and adhere to the Kubernetes [Embargo + Policy](https://github.com/kubernetes/sig-release/blob/master/security-release-process-documentation/security-release-process.md#embargo-policy). + - Defined in + [SECURITY_CONTACTS](https://github.com/kubernetes-incubator/service-catalog/blob/master/SECURITY_CONTACTS) + file. + +## Organizational management + +- SIG meets every week on Zoom at 1 PM PST on Mondays + - Agenda + [here](https://docs.google.com/document/d/17xlpkoEbPR5M6P5VDzNx17q6-IPFxKyebEekCGYiIKM/edit#). + - Anyone is free to add new agenda items to the doc. + - Recordings of the calls are made available [here](https://goo.gl/ZmLNX9). +- SIG members explicitly representing the group at conferences (SIG progress + reports, deep dives, etc.) should make their slides available for perusal and + feedback at least 2 week in advance. +- [Working + groups](https://github.com/kubernetes-incubator/service-catalog/wiki/Working-Groups) + can be initiated by any member. To create a new one, add the topic to the + weekly call’s agenda for discussion. + - These are not the same as cross-SIG working groups. + - Working groups exist for an unspecified period of time, so that interested + members can meet to discuss and solve problems for our SIG. + +### Project management +- [Milestones](https://github.com/kubernetes-incubator/service-catalog/milestones) + are defined by SIG maintainers. +- Anyone is free to request a discussion of the milestones/plans during + a weekly call. +- Weekly releases are typically done on Thursdays, and any member who has + maintainer rights is free to initiate it. _Friday releases are strongly + discouraged._ +- Major releases are planned and discussed among the SIG members during regular + weekly calls. +- The release process is defined + [here](https://github.com/kubernetes-incubator/service-catalog/wiki/Release-Process). +- Anyone can request to work on an issue by commenting on it with `#dibs`. + + +### Technical processes +- All technical decisions are made either through issues, pull requests or + discussions during the weekly SIG meeting. Major decisions should be + documented in an issue or pull request. +- There is no requirement that all pull requests have an associated issue. + However, if the PR represents a significant design decision then it is + recommended that it be discussed among the group to avoid unnecessary coding + that might not be accepted. +- While everyone is encouraged to contribute to the discussion of any topic, + ultimately any changes made to the codebase must be approved by the + maintainers. +- Pull requests are required to have at least 2 maintainers approve them. +- Pull requests that are labeled with `do-not-merge/hold` or have an on-going + discussion must not be merged until all concerns are addressed. +- Disagreements are resolved via lazy consensus. In the event that a common + decision cannot be made, then a vote among the maintainers will be taken. + Simple majority of votes cast (>50%) wins. diff --git a/sig-storage/README.md b/sig-storage/README.md index be5121aae..0c6322a0c 100644 --- a/sig-storage/README.md +++ b/sig-storage/README.md @@ -5,13 +5,15 @@ Please do not edit this file directly, but instead make changes to the sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> +---> # Storage Special Interest Group -Covers storage and volume plugins. +SIG Storage is responsible for ensuring that different types of file and block storage (whether ephemeral or persistent, local or remote) are available wherever a container is scheduled (including provisioning/creating, attaching, mounting, unmounting, detaching, and deleting of volumes), storage capacity management (container ephemeral storage usage, volume resizing, etc.), influencing scheduling of containers based on storage (data gravity, availability, etc.), and generic operations on storage (snapshoting, etc.). + +The [charter](charter.md) defines the scope and governance of the Storage Special Interest Group. ## Meetings -* Regular SIG Meeting: [Thursdays at 9:00 PT (Pacific Time)](https://zoom.us/j/614261834) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=9:00&tz=PT%20%28Pacific%20Time%29). +* Regular SIG Meeting: [Thursdays at 9:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=9:00&tz=PT%20%28Pacific%20Time%29). * [Meeting notes and Agenda](https://docs.google.com/document/d/1-8KEG8AjAgKznS9NFm3qWqkGyCHmvU6HVl0sk5hwoAE/edit?usp=sharing). * [Meeting recordings](https://www.youtube.com/watch?v=Eh7Qa7KOL8o&list=PL69nYSiGNLP02-BMqJdfFgGxYQ4Nb-2Qq). @@ -31,9 +33,35 @@ The Chairs of the SIG run operations and processes governing the SIG. ## Subprojects The following subprojects are owned by sig-storage: +- **kubernetes-csi** + - Owners: + - https://raw.githubusercontent.com/kubernetes-csi/csi-driver-cinder/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/csi-driver-flex/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/csi-driver-host-path/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/csi-driver-iscsi/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/csi-lib-common/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/csi-lib-fc/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/csi-lib-iscsi/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/csi-test/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/docs/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/driver-registrar/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/drivers/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/kubernetes-csi.github.io/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/livenessprobe/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/external-attacher/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/external-provisioner/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/kubernetes-csi-migration-library/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/csi-api/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/csi-api/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/cluster-driver-registrar/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/node-driver-registrar/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/csi-lib-utils/master/OWNERS - **external-storage** - Owners: - https://raw.githubusercontent.com/kubernetes-incubator/external-storage/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/sig-storage-lib-external-provisioner/master/OWNERS - **git-sync** - Owners: - https://raw.githubusercontent.com/kubernetes/git-sync/master/OWNERS @@ -49,19 +77,15 @@ The following subprojects are owned by sig-storage: The below teams can be mentioned on issues and PRs in order to get attention from the right people. Note that the links to display team membership will only work if you are a member of the org. -The google groups contain the archive of Github team notifications. -Mentioning a team on Github will CC its group. -Monitor these for Github activity if you are not a member of the team. - -| Team Name | Details | Google Groups | Description | -| --------- |:-------:|:-------------:| ----------- | -| @kubernetes/sig-storage-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-storage-api-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-storage-api-reviews) | API Changes and Reviews | -| @kubernetes/sig-storage-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-storage-bugs) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-storage-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-storage-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-storage-feature-requests) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-storage-feature-requests) | Feature Requests | -| @kubernetes/sig-storage-misc | [link](https://github.com/orgs/kubernetes/teams/sig-storage-misc) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-storage-misc) | General Discussion | -| @kubernetes/sig-storage-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-storage-pr-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-storage-pr-reviews) | PR Reviews | -| @kubernetes/sig-storage-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-storage-proposals) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-storage-proposals) | Design Proposals | -| @kubernetes/sig-storage-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-storage-test-failures) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-storage-test-failures) | Test Failures and Triage | +| Team Name | Details | Description | +| --------- |:-------:| ----------- | +| @kubernetes/sig-storage-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-storage-api-reviews) | API Changes and Reviews | +| @kubernetes/sig-storage-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-storage-bugs) | Bug Triage and Troubleshooting | +| @kubernetes/sig-storage-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-storage-feature-requests) | Feature Requests | +| @kubernetes/sig-storage-misc | [link](https://github.com/orgs/kubernetes/teams/sig-storage-misc) | General Discussion | +| @kubernetes/sig-storage-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-storage-pr-reviews) | PR Reviews | +| @kubernetes/sig-storage-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-storage-proposals) | Design Proposals | +| @kubernetes/sig-storage-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-storage-test-failures) | Test Failures and Triage | @@ -70,7 +94,6 @@ The Kubernetes Storage Special-Interest-Group (SIG) is a working group within th ### Meeting We hold a public meeting every two weeks, on Thursdays at 9 AM (PT). -* The meeting is held on Zoom: https://zoom.us/j/614261834 * Agenda and any notes from each meeting are captured in [this document](https://docs.google.com/document/d/1-8KEG8AjAgKznS9NFm3qWqkGyCHmvU6HVl0sk5hwoAE/edit?usp=sharing). * Contact saadali@google.com to be added to the calendar invite. * Recordings of past meetings: https://www.youtube.com/playlist?list=PLb1_clREIGYVaqvKaUsVyXxjfcSQDBnmB diff --git a/sig-storage/charter.md b/sig-storage/charter.md new file mode 100644 index 000000000..2d1a06c34 --- /dev/null +++ b/sig-storage/charter.md @@ -0,0 +1,61 @@ +# SIG Storage Charter + +This charter adheres to the conventions described in the [Kubernetes Charter README] and uses +the Roles and Organization Management outlined in [sig-governance]. + +## Scope + +SIG Storage is responsible for ensuring that different types of file and block storage +(whether ephemeral or persistent, local or remote) are available wherever a container is +scheduled (including provisioning/creating, attaching, mounting, unmounting, detaching, +and deleting of volumes), storage capacity management (container ephemeral storage +usage, volume resizing, etc.), influencing scheduling of containers based on storage +(data gravity, availability, etc.), and generic operations on storage (snapshoting, etc.). + +### In scope + +Some notable examples of features owned by SIG Storage: + +* Persistent Volume Claims and Persistent Volumes +* Storage Classes and Dynamic Provisioning +* Kubernetes volume plugins +* Container Storage Interface (CSI) +* Secret Volumes, ConfigMap Volumes, DownwardAPI Volumes, EmptyDir Volumes (co-owned with SIG-Node) + +#### Code, Binaries and Services + +* Kubernetes internal controllers and APIs responsible for exposing file and block storage to Kubernetes workloads. +* Kubernetes external sidecar containers and binaries required for exposing file and block storage to Kubernetes workloads. +* Interfaces required for exposing file and block storage to Kubernetes workloads. +* Unit, Integration, and End-to-End (E2E) Tests validating and preventing regressions in the above. + +#### Cross-cutting and Externally Facing Processes + +* Defining interface and requirements for connecting third party storage systems to Kubernetes. + +### Out of scope + +SIG Storage is not responsible for + +* Data path of remote storage (GCE PD, AWS EBS, NFS, etc.) + * How bits are transferred. + * Where bits are stored. +* Container writable layer (SIG Node handles that). +* The majority of storage plugins/drivers (generally owned by storage vendors). + +## Roles and Organization Management + +SIG Storage adheres to the Roles and Organization Management outlined in [sig-governance] +and opts-in to updates and modifications to [sig-governance]. + +### Deviations from [sig-governance] + +SIG Storage does not have separate tech leads: SIG Storage chairs serve as tech leads. + +### Subproject Creation + +SIG Storage delegates subproject approval to Technical Leads. See [Subproject creation - Option 1]. + +[sig-governance]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance.md +[Kubernetes Charter README]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/README.md +[Subproject creation - Option 1]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance.md#subproject-creation diff --git a/sig-storage/contributing.md b/sig-storage/contributing.md index 752e97f13..2e275e127 100644 --- a/sig-storage/contributing.md +++ b/sig-storage/contributing.md @@ -4,15 +4,17 @@ We recommend the following presentations, docs, and videos to help get familiar | Date | Title | Link | Description | | --- | --- | --- | --- | -| - | Persistent Volume Framework | [Doc](http://kubernetes.io/docs/user-guide/persistent-volumes/) | Public user docs for Kubenretes Persistent Volume framework. +| - | Persistent Volume Framework | [Doc](http://kubernetes.io/docs/user-guide/persistent-volumes/) | Public user docs for Kubernetes Persistent Volume framework. +| 2018 May 03 | SIG Storage Intro | [Video](https://www.youtube.com/watch?v=GvrTl2T-Tts&list=PLj6h78yzYM2N8GdbjmhVU65KYm_68qBmo&index=164&t=0s) | An overview of SIG Storage By Saad Ali at KubeCon/CloudNativeCon EU 2018. | +| 2018 May 04 | Kubernetes Storage Lingo 101 | [Video](https://www.youtube.com/watch?v=uSxlgK1bCuA&t=0s&index=300&list=PLj6h78yzYM2N8GdbjmhVU65KYm_68qBmo) | An overview of various terms used in Kubernetes storage and what they mean by Saad Ali at KubeCon/CloudNativeCon EU 2018.| | 2017 May 18 | Storage Classes & Dynamic Provisioning in Kubernetes |[Video](https://youtu.be/qktFhjJmFhg)| Intro to the basic Kubernetes storage concepts for users (direct volume reference, PV/PVC, and dynamic provisioning). | -| 2017 March 29 | Dynamic Provisioning and Storage Classes in Kubernetes |[Blog post](http://blog.kubernetes.io/2017/03/dynamic-provisioning-and-storage-classes-kubernetes.html)| Overview of Dynamic Provisioning and Storage Classes in Kubernetes at GA. | -| 2017 March 29 | How Kubernetes Storage Works | [Slides](https://docs.google.com/presentation/d/1Yl5JKifcncn0gSZf3e1dWspd8iFaWObLm9LxCaXZJIk/edit?usp=sharing) | Overview for developers on how Kubernetes storage works for KubeCon EU 2017 by Saad Ali +| 2017 March 29 | Dynamic Provisioning and Storage Classes in Kubernetes |[Blog post](https://kubernetes.io/blog/2017/03/dynamic-provisioning-and-storage-classes-kubernetes/)| Overview of Dynamic Provisioning and Storage Classes in Kubernetes at GA. | +| 2017 March 29 | How Kubernetes Storage Works | [Slides](https://docs.google.com/presentation/d/1Yl5JKifcncn0gSZf3e1dWspd8iFaWObLm9LxCaXZJIk/edit?usp=sharing) | Overview for developers on how Kubernetes storage works for KubeCon/CloudNativeCon EU 2017 by Saad Ali | 2017 February 17 | Overview of Dynamic Provisioning for SIG Apps | [Video](https://youtu.be/NXUHmxXytUQ?t=10m33s) | Overview of Storage Classes and Dynamic Provisioning for SIG Apps -| 2016 October 7 | Dynamic Provisioning and Storage Classes in Kubernetes |[Blog post](http://blog.kubernetes.io/2016/10/dynamic-provisioning-and-storage-in-kubernetes.html)| Overview of Dynamic Provisioning and Storage Classes in Kubernetes at Beta. | +| 2016 October 7 | Dynamic Provisioning and Storage Classes in Kubernetes |[Blog post](https://kubernetes.io/blog/2016/10/dynamic-provisioning-and-storage-in-kubernetes/)| Overview of Dynamic Provisioning and Storage Classes in Kubernetes at Beta. | | 2016 July 26 | Overview of Basic Volume for SIG Apps | [Video](https://youtu.be/DrLGxkFdDNc?t=11m19s) | Overview of Basic Volume for SIG Apps -| 2016 March 25 | The State of State | [Video](https://www.youtube.com/watch?v=jsTQ24CLRhI&index=6&list=PLosInM-8doqcBy3BirmLM4S_pmox6qTw3) | The State of State at KubeCon EU 2016 by Matthew Bates -| 2016 March 25 | Kubernetes Storage 101 | [Video](https://www.youtube.com/watch?v=ZqTHe6Xj0Ek&list=PLosInM-8doqcBy3BirmLM4S_pmox6qTw3&index=38) | Kubernetes Storage 101 at KubeCon EU 2016 by Erin Boyd +| 2016 March 25 | The State of State | [Video](https://www.youtube.com/watch?v=jsTQ24CLRhI&index=6&list=PLosInM-8doqcBy3BirmLM4S_pmox6qTw3) | The State of State at KubeCon/CloudNativeCon EU 2016 by Matthew Bates +| 2016 March 25 | Kubernetes Storage 101 | [Video](https://www.youtube.com/watch?v=ZqTHe6Xj0Ek&list=PLosInM-8doqcBy3BirmLM4S_pmox6qTw3&index=38) | Kubernetes Storage 101 at KubeCon/CloudNativeCon EU 2016 by Erin Boyd Keep in mind that these artifacts reflect the state of the art at the time they were created. In Kubernetes we try very hard to maintain backwards compatibility, but Kubernetes is a fast moving project and we do add features going forward and attending the Storage SIG meetings and the Storage SIG Google group are both good ways of continually staying up to speed. @@ -31,7 +33,7 @@ what you are proposing. We are really trying to improve our test coverage and do and documentation in your implementation PR. ### Helping with Issues -A great way to get involved is to pick an issue and help address it. We would love help here. Storage related issues are [listed here](https://github.com/kubernetes/kubernetes/labels/sig%2Fstorage) +A great way to get involved is to pick an issue and help address it. We would love help here. Storage related issues are [listed here](https://github.com/kubernetes/kubernetes/issues?utf8=%E2%9C%93&q=is%3Aopen+is%3Aissue+label%3Asig%2Fstorage+). ### Adding support for a new storage platform in Kubernetes For folks looking to add support for a new storage platform in Kubernetes, you have several options: diff --git a/sig-storage/volume-plugin-faq.md b/sig-storage/volume-plugin-faq.md index 1dc66a9a0..bae94897a 100644 --- a/sig-storage/volume-plugin-faq.md +++ b/sig-storage/volume-plugin-faq.md @@ -51,7 +51,7 @@ Container Storage Interface (CSI) is a standardized mechanism for Container Orch For more information about CSI, see: -* http://blog.kubernetes.io/2018/01/introducing-container-storage-interface.html +* https://kubernetes.io/blog/2018/01/introducing-container-storage-interface/ * [kubernetes-csi.github.io/docs](http://kubernetes-csi.github.io/docs) **What are the limitations of CSI?** diff --git a/sig-testing/README.md b/sig-testing/README.md index 2381d8b2e..385d6f66d 100644 --- a/sig-testing/README.md +++ b/sig-testing/README.md @@ -5,13 +5,13 @@ Please do not edit this file directly, but instead make changes to the sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> +---> # Testing Special Interest Group Interested in how we can most effectively test Kubernetes. We're interested specifically in making it easier for the community to run tests and contribute test results, to ensure Kubernetes is stable across a variety of cluster configurations and cloud providers. ## Meetings -* Regular SIG Meeting: [Tuesdays at 13:00 PT (Pacific Time)](https://zoom.us/my/k8s.sig.testing) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=13:00&tz=PT%20%28Pacific%20Time%29). +* Regular SIG Meeting: [Tuesdays at 13:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=13:00&tz=PT%20%28Pacific%20Time%29). * [Meeting notes and Agenda](https://bit.ly/k8s-sig-testing-notes). * [Meeting recordings](https://bit.ly/k8s-sig-testing-videos). @@ -20,7 +20,7 @@ Interested in how we can most effectively test Kubernetes. We're interested spec ### Chairs The Chairs of the SIG run operations and processes governing the SIG. -* Aaron Crickenberger (**[@spiffxp](https://github.com/spiffxp)**), Samsung SDS +* Aaron Crickenberger (**[@spiffxp](https://github.com/spiffxp)**), Google * Erick Feja (**[@fejta](https://github.com/fejta)**), Google * Steve Kuznetsov (**[@stevekuznetsov](https://github.com/stevekuznetsov)**), Red Hat * Timothy St. Clair (**[@timothysc](https://github.com/timothysc)**), Heptio @@ -33,39 +33,34 @@ The Chairs of the SIG run operations and processes governing the SIG. ## Subprojects The following subprojects are owned by sig-testing: -- **test-infra** +- **kind** + - Description: Kubernetes IN Docker. Run Kubernetes test clusters on your local machine using Docker containers as nodes. - Owners: - - https://raw.githubusercontent.com/kubernetes/test-infra/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/kind/master/OWNERS - **repo-publishing** - Owners: - https://raw.githubusercontent.com/kubernetes/publishing-bot/master/OWNERS - **testing-commons** - - Description: The Testing Commons is a subproject within the Kubernetes sig-testing community interested code structure, layout, and execution of common test code used throughout the kubernetes project. + - Description: The Testing Commons is a subproject within the Kubernetes sig-testing community interested code structure, layout, and execution of common test code used throughout the kubernetes project - Owners: - - https://raw.githubusercontent.com/kubernetes-sig-testing/frameworks/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/testing_frameworks/master/OWNERS - https://raw.githubusercontent.com/kubernetes/kubernetes/master/test/OWNERS - Meetings: - - Testing Commons: [Wednesdays at 07:30 PT (Pacific Time)](https://zoom.us/my/k8s.sig.testing) (bi-weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=07:30&tz=PT%20%28Pacific%20Time%29). + - Testing Commons: [Wednesdays at 07:30 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (bi-weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=07:30&tz=PT%20%28Pacific%20Time%29). - [Meeting notes and Agenda](https://docs.google.com/document/d/1TOC8vnmlkWw6HRNHoe5xSv5-qv7LelX6XK3UVCHuwb0/edit#heading=h.tnoevy5f439o). +- **test-infra** + - Owners: + - https://raw.githubusercontent.com/kubernetes/test-infra/master/OWNERS ## GitHub Teams The below teams can be mentioned on issues and PRs in order to get attention from the right people. Note that the links to display team membership will only work if you are a member of the org. -The google groups contain the archive of Github team notifications. -Mentioning a team on Github will CC its group. -Monitor these for Github activity if you are not a member of the team. - -| Team Name | Details | Google Groups | Description | -| --------- |:-------:|:-------------:| ----------- | -| @kubernetes/sig-testing-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-testing-api-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-testing-api-reviews) | API Changes and Reviews | -| @kubernetes/sig-testing-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-testing-bugs) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-testing-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-testing-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-testing-feature-requests) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-testing-feature-requests) | Feature Requests | -| @kubernetes/sig-testing-misc | [link](https://github.com/orgs/kubernetes/teams/sig-testing-misc) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-testing-misc) | General Discussion | -| @kubernetes/sig-testing-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-testing-pr-reviews) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-testing-pr-reviews) | PR Reviews | -| @kubernetes/sig-testing-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-testing-proposals) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-testing-proposals) | Design Proposals | -| @kubernetes/sig-testing-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-testing-test-failures) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-testing-test-failures) | Test Failures and Triage | +| Team Name | Details | Description | +| --------- |:-------:| ----------- | +| @kubernetes/sig-testing | [link](https://github.com/orgs/kubernetes/teams/sig-testing) | General Discussion | +| @kubernetes/sig-testing-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-testing-pr-reviews) | PR Reviews | diff --git a/sig-testing/charter.md b/sig-testing/charter.md new file mode 100644 index 000000000..d3cb74f0e --- /dev/null +++ b/sig-testing/charter.md @@ -0,0 +1,142 @@ +# SIG Testing Charter + +This charter adheres to the conventions described in the +[Kubernetes Charter README] and uses the Roles and Organization Management +outlined in [sig-governance]. + +## Scope + +SIG Testing is interested in effective testing of Kubernetes and automating +away project toil. We focus on creating and running tools and infrastructure +that make it easier for the community to write and run tests, and to +contribute, analyze and act upon test results. + +Although we are not responsible for ongoing test maintenance (see +[Out of Scope] below), we will act as an escalation point of last resort for +remediation if it is clear that misbehaving tests are harming the immediate +health of the project. + +### In scope + +#### Code, Binaries and Services + +- Project CI and workflow automation via tools such as [prow] and [tide] +- Infrastructure to support running project CI at scale, including tools + such as [boskos], [ghproxy] and [greenhouse] +- Providing a place and schema in which to upload test results for + contributors who wish to provide additional test results not generated + by the project's CI +- Extraction, display and analysis of test artifacts via tools like + [gubernator], [kettle], [testgrid], [triage] and [velodrome] +- Configuration management of jobs and ensuring they use a consistent + process via tools such as [job configs], [kubetest] +- Tools that facilitate configuration management of github such as + [peribolos] and [label_sync] +- Tools that facilitate local testing of kubernetes such as [greenhouse] + and [kind] +- Jobs that automate away project toil, such as [periodic jobs that run as + @fejta-bot] +- Ensuring all of the above is kept running on a best effort basis +- Tools, frameworks and libraries that make it possible to write tests against + kubernetes such as e2e\* or integration test frameworks. + + \* Note that while we are the current de facto owners of the kubernetes e2e + test framework, we are not staffed to actively maintain or rewrite it and + welcome contributors looking to take on this responsibility. + +#### Cross-cutting and Externally Facing Processes + +##### Ongoing Support + +- The [Release Team test-infra role] is staffed by a member of SIG Testing, as + such their responsibilities are within the scope of this SIG, including + the maintenance of release jobs +- We actively collaborate with SIG Contributor Experience, often producing + tooling that they are responsible for using to implement polices and + processes that they own, e.g. the Github Administration subproject uses + [peribolos] and [label_sync] to reduce the toil involved +- We reserve the right to halt automation and infrastructure that we own, + or disable tests that we don't own if the project as a whole is being + impacted +- We are actively assisting with the transition of project infrastructure to + the CNCF and enabling non-Googlers to support this + +##### Deploying Changes + +We aspire to remain agile and deploy quickly, while ensuring a disruption-free +experience for project contributors. As such, the amount of notice we provide +and the amount of consensus we seek is driven by our estimation of risk. We +don't currently define risk in terms of objective metrics, so here is a rough +description of the guidelines we follow. We anticipate refining these over +time. + +- **Low risk** changes do not break existing contributor workflows, are easy + to roll back, and impact at most a few project repos or SIGs. These should + be reviewed by another member of SIG Testing or the affected SIG(s), + preferably an approver. + +- **Medium risk** changes may impact existing contributor workflows, should be + easy to roll back, and may impact all of the project's repos. These should + be shared with SIG Contributor Experience, may require a lazy consensus + issue with [kubernetes-dev@] notice. + +- **High risk changes** likely break existing contributor workflows, may be + difficult to roll back, and likely impact all of the project's repos. These + require a consultation with SIG Contributor Experience, and a lazy consensus + issue with [kubernetes-dev@] notice. + +### Out of Scope + +- We are not responsible for writing, fixing nor actively troubleshooting tests + for features or subprojects owned by other SIGs +- We are not responsible for ongoing maintenance of the project's CI Signal, + as this is driven by tests and jobs owned by other SIGs. We do however have + an interest in producing tools to help improve the signal. + +## Roles and Organization Management + +This sig adheres to the Roles and Organization Management outlined in +[sig-governance] and opts-in to updates and modifications to [sig-governance]. + +### Deviations from [sig-governance] + +- Chairs also fulfill the role of Tech Lead +- Proposing and making decisions _MAY_ be done without the use of KEPS so long + as the decision is documented in a linkable medium. We prefer to use issues + on [kubernetes/test-infra] to document technical decisions, and mailing list + threads on [kubernetes-sig-testing@] to document administrative decisions on + leadership, meetings and subprojects. +- We do not consistently review sig-testing testgrid dashboards as part of our + meetings + +### Subproject Creation + +Subprojects are created by Tech Leads following the process defined in [sig-governance] + + +[sig-governance]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance.md +[Kubernetes Charter README]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/README.md +[lazy consensus]: http://en.osswiki.info/concepts/lazy_consensus + +[periodic jobs that run as @fejta-bot]: https://git.k8s.io/test-infra/config/jobs/kubernetes/test-infra/fejta-bot-periodics.yaml +[boskos]: https://git.k8s.io/test-infra/boskos +[ghproxy]: https://git.k8s.io/test-infra/ghproxy +[greenhouse]: https://git.k8s.io/test-infra/greenhouse +[gubernator]: http://k8s-gubernator.appspot.com +[job configs]: https://git.k8s.io/test-infra/config/jobs +[kettle]: https://git.k8s.io/test-infra/kettle +[kind]: https://github.com/kubernetes-sigs/kind +[kubetest]: https://git.k8s.io/test-infra/kubetest +[label_sync]: https://git.k8s.io/test-infra/label_sync +[peribolos]: https://git.k8s.io/test-infra/prow/cmd/peribolos +[planter]: https://git.k8s.io/test-infra/planter +[prow]: https://prow.k8s.io +[testgrid]: https://testgrid.k8s.io +[tide]: https://prow.k8s.io/tide +[triage]: https://go.k8s.io/triage +[velodrome]: https://velodrome.k8s.io + +[Release Team test-infra role]: https://git.k8s.io/sig-release/release-team/role-handbooks/test-infra +[kubernetes-dev@]: https://groups.google.com/forum/#!forum/kubernetes-dev +[kubernetes-sig-testing@]: https://groups.google.com/forum/#!forum/kubernetes-sig-testing +[kubernetes/test-infra]: https://git.k8s.io/test-infra diff --git a/sig-ui/README.md b/sig-ui/README.md index cd2582290..40c07ce7b 100644 --- a/sig-ui/README.md +++ b/sig-ui/README.md @@ -5,7 +5,7 @@ Please do not edit this file directly, but instead make changes to the sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> +---> # UI Special Interest Group Covers all things UI related. Efforts are centered around Kubernetes Dashboard: a general purpose, web-based UI for Kubernetes clusters. It allows users to manage applications running in the cluster and troubleshoot them, as well as manage the cluster itself. diff --git a/sig-ui/charter.md b/sig-ui/charter.md new file mode 100644 index 000000000..347a67906 --- /dev/null +++ b/sig-ui/charter.md @@ -0,0 +1,39 @@ +# SIG UI Charter + +This charter adheres to the conventions described in the [Kubernetes Charter README] and uses the Roles and Organization Management outlined in [sig-governance]. + +## Scope + +SIG-UI covers GUI-related aspects of the Kubernetes project. Efforts are centered around the Kubernetes Dashboard: a general purpose, web-based UI for Kubernetes clusters. It allows users to manage applications running in the cluster and troubleshoot them, as well as manage the cluster itself. + +#### Code, Binaries and Services + +- [Kubernetes Dashboard](https://github.com/kubernetes/dashboard) +- [Dashboard Cluster Addon](https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/dashboard) + +#### Cross-cutting and Externally Facing Processes + +- Cutting a new release of the Dashboard + +### Out of Scope + +Tools that contributors use in support of the project (eg. Prow, Test Grid) + +## Roles and Organization Management + +This sig follows adheres to the Roles and Organization Management outlined in [sig-governance] and opts-in to updates and modifications to [sig-governance]. + +### Deviations from [sig-governance] + +SIG UI governance is structured according to the [ROLES.md] document within the [Kubernetes/Dashboard] repo + +### Subproject Creation + +SIG UI delegates subproject approval to Technical Leads. See [Subproject creation - Option 1]. + +[sig-governance]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance.md +[sigs.yaml]: https://github.com/kubernetes/community/blob/master/sigs.yaml +[Kubernetes Charter README]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/README.md +[Subproject creation - Option 1]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance.md#subproject-creation +[Kubernetes/Dashboard]: https://github.com/kubernetes/dashboard +[ROLES.md]: https://github.com/kubernetes/dashboard/blob/master/ROLES.md \ No newline at end of file diff --git a/sig-vmware/README.md b/sig-vmware/README.md index e0c830c23..4a085a7ff 100644 --- a/sig-vmware/README.md +++ b/sig-vmware/README.md @@ -5,14 +5,21 @@ Please do not edit this file directly, but instead make changes to the sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> +---> # VMware Special Interest Group Bring together members of the VMware and Kubernetes community to maintain, support and run Kubernetes on VMware platforms. ## Meetings -* Regular SIG Meeting: [Thursdays at 18:00 UTC](https://zoom.us/j/183662780) (bi-weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=18:00&tz=UTC). +* Regular SIG Meeting: [Thursdays at 11:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (bi-weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=11:00&tz=PT%20%28Pacific%20Time%29). * [Meeting notes and Agenda](https://docs.google.com/document/d/1RV0nVtlPoAtM0DQwNYxYCC9lHfiHpTNatyv4bek6XtA/edit?usp=sharing). + * [Meeting recordings](https://www.youtube.com/playlist?list=PLutJyDdkKQIqKv-Zq8WbyibQtemChor9y). +* Cloud Provider vSphere monthly syncup: [Wednesdays at 09:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (monthly - first Wednesday every month). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=09:00&tz=PT%20%28Pacific%20Time%29). + * [Meeting notes and Agenda](https://docs.google.com/document/d/1B0NmmKVh8Ea5hnNsbUsJC7ZyNCsq_6NXl5hRdcHlJgY/edit?usp=sharing). + * [Meeting recordings](https://www.youtube.com/playlist?list=PLutJyDdkKQIpOT4bOfuO3MEMHvU1tRqyR). +* Cluster API Provider vSphere bi-weekly syncup: [Wednesdays at 13:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (bi-weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=13:00&tz=PT%20%28Pacific%20Time%29). + * [Meeting notes and Agenda](https://docs.google.com/document/d/1jQrQiOW75uWraPk4b_LWtCTHwT7EZwrWWwMdxeWOEvk/edit?usp=sharing). + * [Meeting recordings](https://www.youtube.com/playlist?list=PLutJyDdkKQIovV-AONxMa2cyv-_5LAYiu). ## Leadership @@ -27,6 +34,32 @@ The Chairs of the SIG run operations and processes governing the SIG. * [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-vmware) * [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fvmware) +## Subprojects + +The following subprojects are owned by sig-vmware: +- **cluster-api-provider-vsphere** + - Owners: + - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-vsphere/master/OWNERS + +## GitHub Teams + +The below teams can be mentioned on issues and PRs in order to get attention from the right people. +Note that the links to display team membership will only work if you are a member of the org. + +| Team Name | Details | Description | +| --------- |:-------:| ----------- | +| @kubernetes/sig-vmware-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-vmware-api-reviews) | API Changes and Reviews | +| @kubernetes/sig-vmware-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-vmware-bugs) | Bug Triage and Troubleshooting | +| @kubernetes/sig-vmware-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-vmware-feature-requests) | Feature Requests | +| @kubernetes/sig-vmware-members | [link](https://github.com/orgs/kubernetes/teams/sig-vmware-members) | Release Team Members | +| @kubernetes/sig-vmware-misc | [link](https://github.com/orgs/kubernetes/teams/sig-vmware-misc) | General Discussion | +| @kubernetes/sig-vmware-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-vmware-pr-reviews) | PR Reviews | +| @kubernetes/sig-vmware-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-vmware-proposals) | Design Proposals | +| @kubernetes/sig-vmware-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-vmware-test-failures) | Test Failures and Triage | + +## About the cloud-provider-vsphere subproject +The `cloud-provider-vsphere` subproject is now hosted under the new [SIG Cloud Provider](https://github.com/kubernetes/community/blob/master/sig-cloud-provider/README.md). + diff --git a/sig-vmware/charter.md b/sig-vmware/charter.md new file mode 100755 index 000000000..06437cb7e --- /dev/null +++ b/sig-vmware/charter.md @@ -0,0 +1,61 @@ +# SIG VMware Charter + +This charter adheres to the conventions described in the [Kubernetes Charter README] and uses +the Roles and Organization Management outlined in [sig-governance]. + +## Scope + +The VMware SIG maintains and evolves the ability to run Kubernetes on VMware infrastructure. + +In addition to the cloud provider for the vSphere hypervisor, the SIG’s mission includes: + +- NSX and NSX-T, infrastructure components that provide software based networking service, with automated micro-segmentation at application and control plane levels - along with security, monitoring, logging, and features for multi-cluster, multi-site, and cross cloud integration. NSX-T is not vSphere specific, and is supported on other cloud providers (e.g. OpenStack). The scope of NSX and NSX-T interaction with Kubernetes goes beyond the CNI plug-in abstraction. +- Desktop hypervisors (Fusion for OS X and Workstation for Linux and Windows), as supported by Minikube. +- vCloud Director, which enables service providers to provision and manage multi tenant clouds, which can host Kubernetes. +- Hosting architectural planning and discussion related to new CRDs, plug-ins and KEPs that allow the vSphere platform to supplement the existing capabilities of Kubernetes, container runtime, and OS functionality + + +### In scope +- Deploying Kubernetes of any type (standard or a packaged distribution from any vendor) on vSphere infrastructure. +- Utilizing networking and storage features of VMware infrastructure through Kubernetes. +- Determining and documenting best practices for configuring Kubernetes when running on vSphere infrastructure. +- Determining and documenting best practices for configuring VMware infrastructure when supporting Kubernetes. +- Determining and documenting best practices for using common configuration management and orchestration tools for deploying and managing Kubernetes on VMware infrastructure. +- Discussing bugs and feature requests recorded as Kubernetes or VMware cloud provider issues on GitHub. These issues should be tagged with ``sig/vmware``. + +A directory of specialized subject area GitHub teams for issues, PRs, and design proposals is defined in [SIG GitHub Teams](https://github.com/kubernetes/community/tree/master/sig-vmware#github-teams). + +#### Code, Binaries and Services + +- vSphere Cloud Provider +- vRealize Automation Cluster API Provider + +Code locations and projects are defined in [SIG Subprojects](https://github.com/kubernetes/community/tree/master/sig-vmware#subprojects) + +#### Cross-cutting and Externally Facing Processes + +SIG VMware serves to bring together members of the VMware and Kubernetes community to maintain, support and provide guidance for running Kubernetes on VMware platforms. + +The VMware SIG will provide a forum for hosting related architectural planning and discussion. Associated activities related to development, testing, and documentation will be tracked and reported by the SIG. +- The vSphere platform’s availability and resource management can create pools that extend across Kubernetes worker node, management node, and namespace boundaries. Unique features of the vSphere platform related to high availability, load balancing, and resource management (storage, networking, compute) can supplement existing capabilities of Kubernetes, container runtime, and OS functionality. +- We drive changes that cross existing SIG boundaries by collaborating with the appropriate SIGs (eg: node, schedule, scalability, etc.) +- We co-own vSphere-specific code related to cluster and machine provisioning with sig-cluster-lifecycle and the cluster-api subproject. +- We co-own the cloud-provider-vsphere code with sig-cloud-provider +- We define requirements, interfaces, and end-to-end tests related to vSphere-specific storage with sig-storage + + +### Out of scope + +The VMware SIG is not for discussing bugs or feature requests outside the scope of Kubernetes. For example, the VMware SIG should not be used to discuss or resolve support requests related to VMware products. It should also not be used to discuss topics that other, more specialized SIGs own (to avoid overlap). + +## Roles and Organization Management + +This sig follows adheres to the Roles and Organization Management outlined in [sig-governance] +and opts-in to updates and modifications to [sig-governance]. + +### Subproject Creation + +Associated subprojects are created following the Federation of Subprojects procedure described in [sig-governance] + +[sig-governance]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance.md +[Kubernetes Charter README]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/README.md \ No newline at end of file diff --git a/sig-windows/README.md b/sig-windows/README.md index 920286648..64dd783fb 100644 --- a/sig-windows/README.md +++ b/sig-windows/README.md @@ -5,22 +5,23 @@ Please do not edit this file directly, but instead make changes to the sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> +---> # Windows Special Interest Group Focuses on supporting Windows Server Containers for Kubernetes. ## Meetings -* Regular SIG Meeting: [Tuesdays at 12:30 Eastern Standard Time (EST)](https://zoom.us/my/sigwindows) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=12:30&tz=Eastern%20Standard%20Time%20%28EST%29). +* Regular SIG Meeting: [Tuesdays at 12:30 Eastern Standard Time (EST)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=12:30&tz=Eastern%20Standard%20Time%20%28EST%29). * [Meeting notes and Agenda](https://docs.google.com/document/d/1Tjxzjjuy4SQsFSUVXZbvqVb64hjNAG5CQX8bK7Yda9w/edit#heading=h.kbz22d1yc431). - * [Meeting recordings](https://www.youtube.com/watch?v=7zawb3KT9Xk&list=PL69nYSiGNLP2OH9InCcNkWNu2bl-gmIU4). + * [Meeting recordings](https://www.youtube.com/playlist?list=PL69nYSiGNLP2OH9InCcNkWNu2bl-gmIU4). ## Leadership ### Chairs The Chairs of the SIG run operations and processes governing the SIG. -* Michael Michael (**[@michmike](https://github.com/michmike)**), Apprenda +* Michael Michael (**[@michmike](https://github.com/michmike)**), VMware +* Patrick Lang (**[@patricklang](https://github.com/patricklang)**), Microsoft ## Contact * [Slack](https://kubernetes.slack.com/messages/sig-windows) @@ -32,15 +33,11 @@ The Chairs of the SIG run operations and processes governing the SIG. The below teams can be mentioned on issues and PRs in order to get attention from the right people. Note that the links to display team membership will only work if you are a member of the org. -The google groups contain the archive of Github team notifications. -Mentioning a team on Github will CC its group. -Monitor these for Github activity if you are not a member of the team. - -| Team Name | Details | Google Groups | Description | -| --------- |:-------:|:-------------:| ----------- | -| @kubernetes/sig-windows-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-windows-bugs) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-windows-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-windows-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-windows-feature-requests) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-windows-feature-requests) | Feature Requests | -| @kubernetes/sig-windows-misc | [link](https://github.com/orgs/kubernetes/teams/sig-windows-misc) | [link](https://groups.google.com/forum/#!forum/kubernetes-sig-windows-misc) | General Discussion | +| Team Name | Details | Description | +| --------- |:-------:| ----------- | +| @kubernetes/sig-windows-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-windows-bugs) | Bug Triage and Troubleshooting | +| @kubernetes/sig-windows-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-windows-feature-requests) | Feature Requests | +| @kubernetes/sig-windows-misc | [link](https://github.com/orgs/kubernetes/teams/sig-windows-misc) | General Discussion | ## Getting Started diff --git a/sig-windows/charter.md b/sig-windows/charter.md new file mode 100644 index 000000000..0c76c4a19 --- /dev/null +++ b/sig-windows/charter.md @@ -0,0 +1,48 @@ +# SIG Windows Charter + +This charter adheres to the conventions described in the [Kubernetes Charter README] and uses +the Roles and Organization Management outlined in [sig-governance]. + +## Scope + +The scope of SIG Windows is the operation of Kubernetes on the Windows operating system. +This includes maintaining the interface between Kubernetes and containers on Windows +as well as maintaining the pieces of Kubernetes (e.g. the kube-proxy) where there is a +Windows specific implementation. + +### In scope + +#### Code, Binaries and Services + +- Windows specific code in all parts of the codebase. +- Testing of Windows specific features and clusters + +#### Cross-cutting and Externally Facing Processes + +- Work with other SIGs on areas where Windows and Linux (and possibly other OSes in the future) deviate from one another in terms of functionality. + + +## Roles and Organization Management + +This sig follows adheres to the Roles and Organization Management outlined in [sig-governance] +and opts-in to updates and modifications to [sig-governance]. + +### Additional responsibilities of Chairs + +None + +### Additional responsibilities of Tech Leads + +None + +### Deviations from [sig-governance] + +None + +### Subproject Creation + +Federation of Subprojects + +[sig-governance]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance.md +[sig-subprojects]: https://github.com/kubernetes/community/blob/master/sig-YOURSIG/README.md#subprojects +[Kubernetes Charter README]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/README.md \ No newline at end of file diff --git a/sigs.yaml b/sigs.yaml index 5cbda0b33..4f46cf1f0 100644 --- a/sigs.yaml +++ b/sigs.yaml @@ -6,6 +6,7 @@ sigs: API CRUD semantics, admission control, encoding/decoding, conversion, defaulting, persistence layer (etcd), OpenAPI, CustomResourceDefinition, garbage collection, and client libraries. + charter_link: label: api-machinery leadership: chairs: @@ -21,7 +22,7 @@ sigs: time: "11:00" tz: "PT (Pacific Time)" frequency: biweekly - url: https://zoom.us/my/apimachinery + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://goo.gl/0lbiM9 recordings_url: https://www.youtube.com/watch?v=Lj1ScbXpnpY&list=PL69nYSiGNLP21oW3hbLyjjj4XhrwKxH2R contact: @@ -29,7 +30,7 @@ sigs: mailing_list: https://groups.google.com/forum/#!forum/kubernetes-sig-api-machinery teams: - name: sig-api-machinery-api-reviews - description: API Changes and Reviews + description: API Changes and Reviews (API Machinery APIs, NOT all APIs) - name: sig-api-machinery-bugs description: Bug Triage and Troubleshooting - name: sig-api-machinery-feature-requests @@ -56,41 +57,43 @@ sigs: - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/garbagecollector/OWNERS - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/namespace/OWNERS - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/quota/OWNERS # if not us, who? + - https://raw.githubusercontent.com/kubernetes-sigs/kube-storage-version-migrator/master/OWNERS - name: universal-machinery # i.e., both client and server owners: - https://raw.githubusercontent.com/kubernetes/apimachinery/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/staging/src/k8s.io/apimachinery/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apimachinery/OWNERS - name: server-frameworks owners: - https://raw.githubusercontent.com/kubernetes/apiserver/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/staging/src/k8s.io/apiserver/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/OWNERS - name: server-crd owners: - https://raw.githubusercontent.com/kubernetes/apiextensions-apiserver/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/staging/src/k8s.io/apiextensions-apiserver/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiextensions-apiserver/OWNERS - name: server-api-aggregation owners: - https://raw.githubusercontent.com/kubernetes/kube-aggregator/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/staging/src/k8s.io/kube-aggregator/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/kube-aggregator/OWNERS - name: server-sdk owners: - https://raw.githubusercontent.com/kubernetes/sample-apiserver/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/staging/src/k8s.io/sample-apiserver/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/sample-apiserver/OWNERS - https://raw.githubusercontent.com/kubernetes/sample-controller/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/staging/src/k8s.io/sample-controller/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/sample-controller/OWNERS - https://raw.githubusercontent.com/kubernetes-incubator/apiserver-builder/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/controller-runtime/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/controller-tools/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/kubebuilder/master/OWNERS - name: idl-schema-client-pipeline owners: - https://raw.githubusercontent.com/kubernetes/gengo/master/OWNERS # possibly should be totally separate - https://raw.githubusercontent.com/kubernetes/code-generator/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/staging/src/k8s.io/code-generator/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/code-generator/OWNERS - https://raw.githubusercontent.com/kubernetes/kube-openapi/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/api/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/staging/src/k8s.io/api/master/OWNERS - https://raw.githubusercontent.com/kubernetes-client/gen/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/structured-merge-diff/master/OWNERS - name: kubernetes-clients owners: - - https://raw.githubusercontent.com/kubernetes-client/community/master/OWNERS - https://raw.githubusercontent.com/kubernetes-client/csharp/master/OWNERS - https://raw.githubusercontent.com/kubernetes-client/go-base/master/OWNERS - https://raw.githubusercontent.com/kubernetes-client/go/master/OWNERS @@ -99,13 +102,9 @@ sigs: - https://raw.githubusercontent.com/kubernetes-client/javascript/master/OWNERS - https://raw.githubusercontent.com/kubernetes-client/python-base/master/OWNERS - https://raw.githubusercontent.com/kubernetes-client/ruby/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-client/typescript/master/OWNERS - https://raw.githubusercontent.com/kubernetes-incubator/client-python/master/OWNERS - https://raw.githubusercontent.com/kubernetes/client-go/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/staging/src/k8s.io/client-go/master/OWNERS - - name: universal-utils # There is no reason why this is in api-machinery - owners: - - https://raw.githubusercontent.com/kubernetes/utils/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/OWNERS - name: Apps dir: sig-apps mission_statement: > @@ -114,6 +113,7 @@ sigs: We discuss how to define and run apps in Kubernetes, demo relevant tools and projects, and discuss areas of friction that can lead to suggesting improvements or feature requests. + charter_link: charter.md label: apps leadership: chairs: @@ -132,7 +132,7 @@ sigs: time: "9:00" tz: "PT (Pacific Time)" frequency: weekly - url: https://zoom.us/my/sig.apps + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://docs.google.com/document/d/1LZLBGW2wRDwAfdBNHJjFfk9CFoyZPcIYGWU7R1PQ3ng/edit# recordings_url: https://www.youtube.com/watch?v=hn23Z-vL_cM&list=PL69nYSiGNLP2LMq7vznITnpd2Fk1YIZF3 contact: @@ -154,48 +154,12 @@ sigs: - name: sig-apps-test-failures description: Test Failures and Triage subprojects: - - name: chart-testing - owners: - - https://raw.githubusercontent.com/kubernetes-helm/chart-testing/master/OWNERS - - name: chartmuseum - owners: - - https://raw.githubusercontent.com/kubernetes-helm/chartmuseum/master/OWNERS - - name: charts - meetings: - - description: Charts Chat - day: Tuesday - time: "9:00" - tz: "PT (Pacific Time)" - frequency: biweekly - url: https://zoom.us/j/166909412 - archive_url: https://docs.google.com/document/d/1h6UTTuNRbFI81higrN3JUV2XxyzqqVjZET4Xz4WTR-8/edit#heading=h.57pbxthvt6k3 - owners: - - https://raw.githubusercontent.com/kubernetes/charts/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-helm/charts-tooling/master/OWNERS - name: examples owners: - https://raw.githubusercontent.com/kubernetes/examples/master/OWNERS - - name: helm - meetings: - - description: Helm Developer call - day: Thursday - time: "9:30" - tz: "PT (Pacific Time)" - frequency: weekly - url: https://zoom.us/j/4526666954 - archive_url: https://docs.google.com/document/d/1d-6xJEx0C78csIYSPKJzRPeWaHG_8W1Hjl72OJggwdc/edit# - owners: - - https://raw.githubusercontent.com/kubernetes/helm/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-helm/community/master/OWNERS - name: kompose owners: - https://raw.githubusercontent.com/kubernetes/kompose/master/OWNERS - - name: monocular - owners: - - https://raw.githubusercontent.com/kubernetes-helm/monocular/master/OWNERS - - name: rudder-federation - owners: - - https://raw.githubusercontent.com/kubernetes-helm/rudder-federation/master/OWNERS - name: workloads-api description: The core workloads API, which is composed of the CronJob, DaemonSet, Deployment, Job, ReplicaSet, ReplicationController, and StatefulSet kinds owners: @@ -222,11 +186,16 @@ sigs: - https://raw.githubusercontent.com/kubernetes/kubernetes/master/test/e2e/apps/OWNERS - https://raw.githubusercontent.com/kubernetes/kubernetes/master/test/integration/daemonset/OWNERS - https://raw.githubusercontent.com/kubernetes/kubernetes/master/test/integration/deployment/OWNERS + - name: application + description: Application metadata descriptor CRD + owners: + - https://github.com/kubernetes-sigs/application/blob/master/OWNERS - name: Architecture dir: sig-architecture mission_statement: > The Architecture SIG maintains and evolves the design principles of Kubernetes, and provides a consistent body of expertise necessary to ensure architectural consistency over time. + charter_link: charter.md label: architecture leadership: chairs: @@ -235,16 +204,19 @@ sigs: company: Google - name: Jaice Singer DuMars github: jdumars - company: Microsoft + company: Google + - name: Matt Farina + github: mattfarina + company: Samsung SDS meetings: - description: Regular SIG Meeting day: Thursday - time: "15:30" + time: "19:00" tz: "UTC" frequency: weekly - url: https://zoom.us/j/2018742972 + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://docs.google.com/document/d/1BlmHq5uPyBUDlppYqAAzslVbAO8hilgjqZUTaNXUhKM/edit - recordings_url: https://www.youtube.com/watch?v=d5ERqm3oHN0&list=PL69nYSiGNLP2m6198LaLN6YahX7EEac5g + recordings_url: https://www.youtube.com/playlist?list=PL69nYSiGNLP2m6198LaLN6YahX7EEac5g contact: slack: sig-architecture mailing_list: https://groups.google.com/forum/#!forum/kubernetes-sig-architecture @@ -264,46 +236,78 @@ sigs: - name: sig-architecture-test-failures description: Test Failures and Triage subprojects: - - name: kubernetes-template-project + - name: architecture-and-api-governance + description: "[Described below](#architecture-and-api-governance)" owners: - - https://raw.githubusercontent.com/kubernetes/kubernetes-template-project/master/OWNERS - - name: spartakus + - https://raw.githubusercontent.com/kubernetes/community/master/contributors/design-proposals/architecture/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/architecture-tracking/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/api/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/api/OWNERS + - name: conformance-definition + description: "[Described below](#conformance-definition)" owners: - - https://raw.githubusercontent.com/kubernetes-incubator/spartakus/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/test/conformance/testdata/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/test/conformance/OWNERS + - name: kep-adoption-and-reviews + description: "[Described below](#kep-adoption-and-reviews)" + owners: + - https://raw.githubusercontent.com/kubernetes/community/master/keps/OWNERS + - name: code-organization + description: "[Described below](#code-organization)" + owners: + - https://raw.githubusercontent.com/kubernetes/contrib/master/OWNERS # solely to steward moving code _out_ of here to more appropriate places + - https://raw.githubusercontent.com/kubernetes/utils/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/vendor/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/third_party/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/OWNERS - name: steering + description: Placeholder until sigs.yaml supports committees as first-class groups. These repos are owned by the kubernetes steering committee, which is a wholly separate entity from SIG Architecture owners: - https://raw.githubusercontent.com/kubernetes/steering/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-incubator/spartakus/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes-template-project/master/OWNERS + - name: Auth dir: sig-auth mission_statement: > Covers improvements to Kubernetes authorization, authentication, and cluster security policy. + + + "All I want is a secure system where it's easy to do anything I want. Is that so much to ask?" - [xkcd](https://xkcd.com/2044 "xkcd") + charter_link: charter.md label: auth leadership: chairs: - - name: Eric Chiang - github: ericchiang - company: Red Hat - - name: Jordan Liggitt - github: liggitt + - name: Mike Danese + github: mikedanese + company: Google + - name: Mo Khan + github: enj company: Red Hat - name: Tim Allclair github: tallclair company: Google emeritus_leads: + - name: Eric Chiang + github: ericchiang + company: Red Hat - name: Eric Tune github: erictune company: Google - name: David Eads github: deads2k company: Red Hat + - name: Jordan Liggitt + github: liggitt + company: Google meetings: - description: Regular SIG Meeting day: Wednesday time: "11:00" tz: "PT (Pacific Time)" frequency: biweekly - url: https://zoom.us/my/k8s.sig.auth + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://docs.google.com/document/d/1woLGRoONE3EBVx-wTb4pvp4CI7tmLZ6lS26VTbosLKM/edit# recordings_url: https://www.youtube.com/playlist?list=PL69nYSiGNLP0VMOZ-V7-5AchXTHAQFzJw contact: @@ -324,12 +328,107 @@ sigs: description: Design Proposals - name: sig-auth-test-failures description: Test Failures and Triage + subprojects: + - name: audit-logging + description: > + Kubernetes API support for audit logging. + owners: + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/api/auditregistration/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/pkg/apis/audit/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/pkg/audit/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/plugin/pkg/audit/OWNERS + - name: authenticators + description: > + Kubernetes API support for authentication. + owners: + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/apis/authentication/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubeapiserver/authenticator/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/registry/authentication/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/plugin/pkg/auth/authenticator/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/api/authentication/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/pkg/authentication/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/plugin/pkg/authenticator/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/kubernetes/typed/authentication/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/listers/authentication/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/pkg/apis/clientauthentication/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/plugin/pkg/client/auth/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/tools/auth/OWNERS + - name: authorizers + description: > + Kubernetes API support for authorization. + owners: + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/apis/authorization/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/apis/rbac/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubeapiserver/authorizer/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubectl/cmd/auth/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/registry/authorization/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/registry/rbac/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/plugin/pkg/auth/authorizer/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/api/authorization/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/api/rbac/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/pkg/authorization/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/plugin/pkg/authorizer/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/kubernetes/typed/authorization/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/kubernetes/typed/rbac/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/listers/authorization/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/listers/rbac/OWNERS + - name: certificates + description: > + Certificates APIs and client infrastructure to support PKI. + owners: + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/apis/certificates/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/certificates/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/registry/certificates/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/pkg/authentication/request/x509/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/util/cert/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/util/certificate/OWNERS + - name: encryption-at-rest + description: > + API storage support for storing data encrypted at rest in etcd. + owners: + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/pkg/server/options/encryptionconfig/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/pkg/storage/value/encrypt/OWNERS + - name: node-identity-and-isolation + description: > + Node identity management (co-owned with sig-lifecycle), and + authorization restrictions for isolating workloads on separate nodes + (co-owned with sig-node). + owners: + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/certificates/approver/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubelet/certificate/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/plugin/pkg/admission/noderestriction/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/plugin/pkg/auth/authorizer/node/OWNERS + - name: policy-management + description: > + API validation and policies enforced during admission, such as + PodSecurityPolicy. Excludes run-time policies like NetworkPolicy and + Seccomp. + owners: + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/api/imagepolicy/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/api/policy/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/security/podsecuritypolicy/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/registry/policy/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/apis/imagepolicy/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/apis/policy/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/plugin/pkg/admission/imagepolicy/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/plugin/pkg/admission/security/podsecuritypolicy/OWNERS + - name: service-accounts + description: > + Infrastructure implementing Kubernetes service account based workload + identity. + owners: + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/serviceaccount/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubelet/token/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/serviceaccount/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/plugin/pkg/admission/serviceaccount/OWNERS - name: Autoscaling dir: sig-autoscaling mission_statement: > - Covers autoscaling of clusters, horizontal and vertical autoscaling of pods, - setting initial resources for pods, topics related to monitoring pods and - gathering their metrics (e.g.: Heapster) + Covers development and maintenance of components for automated scaling in + Kubernetes. This includes automated vertical and horizontal pod + autoscaling, initial resource estimation, cluster-proportional system + component autoscaling, and autoscaling of Kubernetes clusters themselves. + charter_link: charter.md label: autoscaling leadership: chairs: @@ -338,14 +437,14 @@ sigs: company: Google - name: Solly Ross github: directxman12 - company: Red Hat + company: Google meetings: - description: Regular SIG Meeting day: Monday time: "14:00" tz: "UTC" frequency: biweekly/triweekly - url: https://zoom.us/my/k8s.sig.autoscaling + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://docs.google.com/document/d/1RvhQAEIrVLHbyNnuaT99-6u9ZUMp7BfkPupT2LAZK7w/edit contact: slack: sig-autoscaling @@ -366,16 +465,33 @@ sigs: - name: sig-autoscaling-test-failures description: Test Failures and Triage subprojects: - - name: autoscaler + - name: scale-client + owners: + - https://raw.githubusercontent.com/kubernetes/client-go/master/scale/OWNERS # doesn't exist yet + - name: cluster-autoscaler owners: - https://raw.githubusercontent.com/kubernetes/autoscaler/master/OWNERS - - name: metrics + - name: vertical-pod-autoscaler owners: - - https://raw.githubusercontent.com/kubernetes/metrics/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/autoscaler/master/OWNERS + - name: horizontal-pod-autoscaler + owners: + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/podautoscaler/OWNERS + - https://raw.githubusercontent.com/kubernetes/api/master/autoscaling/OWNERS + - name: cluster-proportional-vertical-autoscaler + owners: + - https://raw.githubusercontent.com/kubernetes-incubator/cluster-proportional-vertical-autoscaler/master/OWNERS + - name: cluster-proportional-autoscaler + owners: + - https://raw.githubusercontent.com/kubernetes-incubator/cluster-proportional-autoscaler/master/OWNERS + - name: addon-resizer + owners: + - https://raw.githubusercontent.com/kubernetes/autoscaler/master/addon-resizer/OWNERS - name: AWS dir: sig-aws mission_statement: > Covers maintaining, supporting, and using Kubernetes hosted on AWS Cloud. + charter_link: charter.md label: aws leadership: chairs: @@ -384,8 +500,8 @@ sigs: - name: Kris Nova github: kris-nova company: Heptio - - name: Bob Wise - github: countspongebob + - name: Nishi Davidson + github: d-nishi company: AWS meetings: - description: Regular SIG Meeting @@ -393,7 +509,7 @@ sigs: time: "9:00" tz: "PT (Pacific Time)" frequency: biweekly - url: https://zoom.us/my/k8ssigaws + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://docs.google.com/document/d/1-i0xQidlXnFEP9fXHWkBxqySkXwJnrGJP9OGyP2_P14/edit contact: slack: sig-aws @@ -405,37 +521,54 @@ sigs: - name: cloud-provider-aws owners: - https://raw.githubusercontent.com/kubernetes/cloud-provider-aws/master/OWNERS + - name: aws-alb-ingress-controller + owners: + - https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/master/OWNERS + - name: aws-iam-authenticator + owners: + - https://raw.githubusercontent.com/kubernetes-sigs/aws-iam-authenticator/master/OWNERS + - name: aws-encryption-provider + owners: + - https://raw.githubusercontent.com/kubernetes-sigs/aws-encryption-provider/master/OWNERS + - name: aws-ebs-csi-driver + owners: + - https://raw.githubusercontent.com/kubernetes-sigs/aws-ebs-csi-driver/master/OWNERS - name: Azure dir: sig-azure mission_statement: > A Special Interest Group for building, deploying, maintaining, supporting, and using Kubernetes on Azure. + charter_link: charter.md label: azure leadership: chairs: - - name: Jason Hansen - github: slack - company: Microsoft - - name: Cole Mickens - github: colemickens + - name: Stephen Augustus + github: justaugustus company: Red Hat - - name: Jaice Singer DuMars - github: jdumars + - name: Dave Strebel + github: dstrebel + company: Microsoft + tech_leads: + - name: Kal Khenidak + github: khenidak + company: Microsoft + - name: Pengfei Ni + github: feiskyer company: Microsoft meetings: - description: Regular SIG Meeting day: Wednesday time: "16:00" tz: "UTC" - frequency: weekly - url: https://zoom.us/j/2015551212 + frequency: biweekly + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://docs.google.com/document/d/1SpxvmOgHDhnA72Z0lbhBffrfe9inQxZkU9xqlafOW9k/edit recordings_url: https://www.youtube.com/watch?v=yQLeUKi_dwg&list=PL69nYSiGNLP2JNdHwB8GxRs2mikK7zyc4 contact: slack: sig-azure mailing_list: https://groups.google.com/forum/#!forum/kubernetes-sig-azure teams: - - name: sig-azure-misc + - name: sig-azure description: General Discussion subprojects: - name: cloud-provider-azure @@ -447,22 +580,26 @@ sigs: Covers deploying and operating big data applications (Spark, Kafka, Hadoop, Flink, Storm, etc) on Kubernetes. We focus on integrations with big data applications and architecting the best ways to run them on Kubernetes. + charter_link: label: big-data leadership: chairs: - name: Anirudh Ramanathan github: foxish - company: Google + company: Rockset - name: Erik Erlandson github: erikerlandson company: Red Hat + - name: Yinan Li + github: liyinan926 + company: Google meetings: - description: Regular SIG Meeting day: Wednesday time: "17:00" tz: "UTC" - frequency: weekly - url: https://zoom.us/my/sig.big.data + frequency: biweekly + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://docs.google.com/document/d/1pnF38NF6N5eM8DlK088XUW85Vms4V2uTsGZvSp8MNIA/edit recordings_url: https://docs.google.com/document/d/1pnF38NF6N5eM8DlK088XUW85Vms4V2uTsGZvSp8MNIA/edit contact: @@ -491,29 +628,37 @@ sigs: establishment of conventions for writing CLI commands, POSIX compliance, and improving the command line tools from a developer and devops user experience and usability perspective. + charter_link: charter.md label: cli leadership: - chairs: + tech_leads: - name: Maciej Szulik github: soltysh company: Red Hat - name: Phillip Wittrock github: pwittrock company: Google - - name: Tony Ado - github: AdoHe - company: Alibaba + chairs: + - name: Maciej Szulik + github: soltysh + company: Red Hat + - name: Sean Sullivan + github: seans3 + company: Google emeritus_leads: - name: Fabiano Franz github: fabianofranz company: Red Hat + - name: Tony Ado + github: AdoHe + company: Alibaba meetings: - description: Regular SIG Meeting day: Wednesday time: "09:00" tz: "PT (Pacific Time)" frequency: biweekly - url: https://zoom.us/my/sigcli + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://docs.google.com/document/d/1r0YElcXt6G5mOWxwZiXgGu_X6he3F--wKwg-9UBc29I/edit?usp=sharing recordings_url: https://www.youtube.com/playlist?list=PL69nYSiGNLP28HaTzSlFe6RJVxpFmbUvF contact: @@ -541,17 +686,101 @@ sigs: owners: - https://raw.githubusercontent.com/kubernetes/kubectl/master/OWNERS - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubectl/OWNERS + - name: kustomize + owners: + # "owners" entry + - https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/OWNERS + - name: cli-sdk + owners: + - https://raw.githubusercontent.com/kubernetes/cli-runtime/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/cli-runtime/OWNERS + - https://raw.githubusercontent.com/kubernetes/sample-cli-plugin/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/sample-cli-plugin/OWNERS + - name: Cloud Provider + dir: sig-cloud-provider + mission_statement: > + Ensures that the Kubernetes ecosystem is evolving in a way that is neutral to all + (public and private) cloud providers. It will be responsible for establishing + standards and requirements that must be met by all providers to ensure optimal + integration with Kubernetes. + charter_link: CHARTER.md + label: cloud-provider + leadership: + chairs: + - name: Andrew Sy Kim + github: andrewsykim + company: DigitalOcean + - name: Chris Hoge + github: hogepodge + company: OpenStack Foundation + - name: Jago Macleod + github: jagosan + company: Google + meetings: + - description: Regular SIG Meeting + day: Wednesday + time: "1:00" + tz: "PT (Pacific Time)" + frequency: biweekly + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit + archive_url: https://docs.google.com/document/d/1OZE-ub-v6B8y-GuaWejL-vU_f9jsjBbrim4LtTfxssw/edit#heading=h.w7i4ksrweimp + recordings_url: https://www.youtube.com/playlist?list=PL69nYSiGNLP3dXLcYbRKCbpPCN-8CDFAB + contact: + slack: sig-cloud-provider + mailing_list: https://groups.google.com/forum/#!forum/kubernetes-sig-cloud-provider + teams: + - name: sig-cloud-provider-api-reviews + description: API Changes and Reviews + - name: sig-cloud-provider-bugs + description: Bug Triage and Troubleshooting + - name: sig-cloud-provider-feature-requests + description: Feature Requests + - name: sig-cloud-provider-maintainers + description: Cloud Providers Maintainers + - name: sig-cloud-providers-misc + description: General Discussion + - name: sig-cloud-provider-pr-reviews + description: PR Reviews + - name: sig-cloud-provider-proposals + description: Design Proposals + - name: sig-cloud-provider-test-failures + description: Test Failures and Triage + subprojects: + - name: kubernetes-cloud-provider + owners: + - https://raw.githubusercontent.com/kubernetes/cloud-provider/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/cloud-provider/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/cmd/cloud-controller-manager/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/cloud/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/cloudprovider/OWNERS + - name: cloud-provider-gcp + owners: + - https://raw.githubusercontent.com/kubernetes/cloud-provider-gcp/master/OWNERS + - name: cloud-provider-openstack + owners: + - https://raw.githubusercontent.com/kubernetes/cloud-provider-openstack/master/OWNERS + - name: cloud-provider-vsphere + owners: + - https://raw.githubusercontent.com/kubernetes/cloud-provider-vsphere/master/OWNERS + - name: cloud-provider-extraction + owners: + - https://raw.githubusercontent.com/kubernetes/community/master/sig-cloud-provider/cloud-provider-extraction/OWNERS + meetings: + - description: Weekly Sync removing the in-tree cloud providers led by @cheftako and @d-nishi + day: Thursday + time: "13:30" + tz: "PT (Pacific Time)" + frequency: weekly + url: https://docs.google.com/document/d/1KLsGGzNXQbsPeELCeF_q-f0h0CEGSe20xiwvcR2NlYM/edit - name: Cluster Lifecycle dir: sig-cluster-lifecycle mission_statement: > The Cluster Lifecycle SIG examines how we should change Kubernetes to make it easier to manage and operate with a focus on cluster deployment and upgrades. + charter_link: label: cluster-lifecycle leadership: chairs: - - name: Luke Marsden - github: lukemarsden - company: Weave - name: Robert Bailey github: roberthbailey company: Google @@ -566,8 +795,8 @@ sigs: day: Tuesday time: "09:00" tz: "PT (Pacific Time)" - frequency: weekly - url: https://zoom.us/j/166836%E2%80%8B624 + frequency: biweekly + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://docs.google.com/a/weave.works/document/d/1deJYPIF4LmhGjDVaqrswErIrV7mtwJgovtLnPCDxP7U/edit recordings_url: https://www.youtube.com/playlist?list=PL69nYSiGNLP29D0nYgAGWt1ZFqS9Z7lw4 - description: kubeadm Office Hours @@ -575,46 +804,82 @@ sigs: time: "09:00" tz: "PT (Pacific Time)" frequency: weekly - url: https://zoom.us/j/166836%E2%80%8B624 + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://docs.google.com/document/d/130_kiXjG7graFNSnIAgtMS1G8zPDwpkshgfRYS0nggo/edit recordings_url: https://www.youtube.com/playlist?list=PL69nYSiGNLP29D0nYgAGWt1ZFqS9Z7lw4 - - description: Cluster API working group + - description: Cluster API office hours day: Wednesday time: "10:00" tz: "PT (Pacific Time)" frequency: weekly - url: https://zoom.us/j/166836%E2%80%8B624 + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://docs.google.com/document/d/16ils69KImmE94RlmzjWDrkmFZysgB2J4lGnYMRN89WM/edit# recordings_url: https://www.youtube.com/playlist?list=PL69nYSiGNLP29D0nYgAGWt1ZFqS9Z7lw4 + - description: Cluster API Provider Implementers' office hours (EMEA) + day: Wednesday + time: "15:00" + tz: "CEST (Central European Summer Time)" + frequency: weekly + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit + archive_url: https://docs.google.com/document/d/1IZ2-AZhe4r3CYiJuttyciS7bGZTTx4iMppcA8_Pr3xE/edit + recordings_url: https://www.youtube.com/playlist?list=PL69nYSiGNLP29D0nYgAGWt1ZFqS9Z7lw4 + - description: Cluster API Provider Implementers' office hours (US West Coast) + day: Tuesday + time: "12:00" + tz: "PT (Pacific Time)" + frequency: weekly + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit + archive_url: https://docs.google.com/document/d/1IZ2-AZhe4r3CYiJuttyciS7bGZTTx4iMppcA8_Pr3xE/edit + recordings_url: https://www.youtube.com/playlist?list=PL69nYSiGNLP29D0nYgAGWt1ZFqS9Z7lw4 + - description: Cluster API (AWS implementation) office hours + day: Monday + time: "10:00" + tz: "PT (Pacific Time)" + frequency: weekly + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit + archive_url: https://docs.google.com/document/d/10dq54Fd-xa6P5Iy3p46VY1YTFqugGMd1PygDIpuRw6c/edit + recordings_url: https://www.youtube.com/playlist?list=PL69nYSiGNLP29D0nYgAGWt1ZFqS9Z7lw4 - description: kops Office Hours day: Friday time: "09:00" tz: "PT (Pacific Time)" frequency: biweekly - url: https://zoom.us/my/k8ssigaws + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://docs.google.com/document/d/12QkyL0FkNbWPcLFxxRGSPt_tNPBHbmni3YLY-lHny7E/edit + - description: Kubespray Office Hours + day: Wednesday + time: "07:00" + tz: "PT (Pacific Time)" + frequency: biweekly + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit + archive_url: https://docs.google.com/document/d/1oDI1rTwla393k6nEMkqz0RU9rUl3J1hov0kQfNcl-4o/edit contact: slack: sig-cluster-lifecycle mailing_list: https://groups.google.com/forum/#!forum/kubernetes-sig-cluster-lifecycle teams: - - name: sig-cluster-lifecycle-api-reviews - description: API Changes and Reviews - - name: sig-cluster-lifecycle-bugs - description: Bug Triage and Troubleshooting - - name: sig-cluster-lifecycle-feature-requests - description: Feature Requests - - name: sig-cluster-lifecycle-misc - description: General Discussion + - name: sig-cluster-lifecycle + description: Notify group - name: sig-cluster-lifecycle-pr-reviews description: PR Reviews - - name: sig-cluster-lifecycle-proposals - description: Design Proposals - - name: sig-cluster-lifecycle-test-failures - description: Test Failures and Triage subprojects: - name: bootkube owners: - https://raw.githubusercontent.com/kubernetes-incubator/bootkube/master/OWNERS + - name: cluster-api + owners: + - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/master/OWNERS + - name: cluster-api-provider-aws + owners: + - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-aws/master/OWNERS + - name: cluster-api-provider-digitalocean + owners: + - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-digitalocean/master/OWNERS + - name: cluster-api-provider-gcp + owners: + - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-gcp/master/OWNERS + - name: cluster-api-provider-openstack + owners: + - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-openstack/master/OWNERS - name: kops owners: - https://raw.githubusercontent.com/kubernetes/kops/master/OWNERS @@ -631,6 +896,10 @@ sigs: owners: - https://raw.githubusercontent.com/kubernetes/kubeadm/master/OWNERS - https://raw.githubusercontent.com/kubernetes/kubernetes/master/cmd/kubeadm/OWNERS + - https://raw.githubusercontent.com/kubernetes/cluster-bootstrap/master/OWNERS + - name: kubeadm-dind-cluster + owners: + - https://raw.githubusercontent.com/kubernetes-sigs/kubeadm-dind-cluster/master/OWNERS - name: kubernetes-anywhere owners: - https://raw.githubusercontent.com/kubernetes/kubernetes-anywhere/master/OWNERS @@ -647,6 +916,7 @@ sigs: focus on shared operations practices for Kubernetes clusters with a goal to make Kubernetes broadly accessible with a common baseline reference. We also organize operators as a sounding board and advocacy group. + charter_link: label: cluster-ops leadership: chairs: @@ -655,14 +925,14 @@ sigs: company: RackN - name: Jaice Singer DuMars github: jdumars - company: Microsoft + company: Google meetings: - description: Regular SIG Meeting day: Thursday time: "20:00" tz: "UTC" frequency: biweekly - url: https://zoom.us/j/297937771 + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://docs.google.com/document/d/1IhN5v6MjcAUrvLd9dAWtKcGWBWSaRU8DNyPiof3gYMY/edit# recordings_url: https://www.youtube.com/watch?v=7uyy37pCk4U&list=PL69nYSiGNLP3b38liicqy6fm2-jWT4FQR contact: @@ -671,11 +941,14 @@ sigs: - name: Contributor Experience dir: sig-contributor-experience mission_statement: > - Developing and sustaining a healthy community of contributors is critical - to scaling the project and growing the ecosystem. We need to ensure our - contributors are happy and productive, we need to break the commit-rate - ceiling we hit in July 2015, and we need to get the monotonically growing - PR merge latency and numbers of open PRs and issues under control. + Developing and sustaining a healthy community of contributors + is critical to scaling the project and growing the ecosystem. + We need to ensure our contributors are happy and productive, + and that there are not bottlenecks hindering the project in, + for example: feature velocity, community scaling, pull request + latency, and absolute numbers of open pull requests and open + issues. + charter_link: charter.md label: contributor-experience leadership: chairs: @@ -696,21 +969,13 @@ sigs: day: Wednesday time: "9:30" tz: "PT (Pacific Time)" - frequency: biweekly - url: https://zoom.us/j/7658488911 - archive_url: https://docs.google.com/document/d/1qf-02B7EOrItQgwXFxgqZ5qjW0mtfu5qkYIF1Hl4ZLI/ - recordings_url: https://www.youtube.com/watch?v=EMGUdOKwSns&list=PL69nYSiGNLP2x_48wbOPO0vXQgNTm_xxr - - description: Off Week Sync (Contributor Guide, Mentorship) - day: Wednesday - time: "9:30" - tz: "PT (Pacific Time)" - frequency: biweekly - url: https://zoom.us/j/873813890 + frequency: weekly + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://docs.google.com/document/d/1qf-02B7EOrItQgwXFxgqZ5qjW0mtfu5qkYIF1Hl4ZLI/ recordings_url: https://www.youtube.com/watch?v=EMGUdOKwSns&list=PL69nYSiGNLP2x_48wbOPO0vXQgNTm_xxr contact: slack: sig-contribex - mailing_list: https://groups.google.com/forum/#!forum/kubernetes-wg-contribex + mailing_list: https://groups.google.com/forum/#!forum/kubernetes-sig-contribex teams: - name: sig-contributor-experience-bugs description: Bug Triage and Troubleshooting @@ -732,18 +997,24 @@ sigs: owners: - https://raw.githubusercontent.com/kubernetes/community/master/communication/OWNERS https://raw.githubusercontent.com/kubernetes/community/master/events/OWNERS - - name: contributors-guide + - name: github-management + owners: + - https://raw.githubusercontent.com/kubernetes/community/master/github-management/OWNERS + - https://raw.githubusercontent.com/kubernetes/org/master/OWNERS + - name: contributors-documentation owners: - https://raw.githubusercontent.com/kubernetes/community/master/contributors/guide/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/contributor-site/master/OWNERS - name: devstats owners: - - Phillels + - https://raw.githubusercontent.com/kubernetes/community/master/sig-contributor-experience/devstats/OWNERS - name: k8s.io owners: - https://raw.githubusercontent.com/kubernetes/k8s.io/master/OWNERS - name: mentoring owners: - https://raw.githubusercontent.com/kubernetes/community/master/mentoring/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/contributor-playground/master/OWNERS - name: repo-infra owners: - https://raw.githubusercontent.com/kubernetes/repo-infra/master/OWNERS @@ -751,25 +1022,34 @@ sigs: dir: sig-docs mission_statement: > Covers documentation, doc processes, and doc publishing for Kubernetes. + charter_link: label: docs leadership: chairs: - - name: Zach Corleissen - github: zacharysarah - company: Linux Foundation - name: Andrew Chen github: chenopis company: Google - - name: Jared Bhatti - github: jaredbhatti - company: Google + - name: Zach Corleissen + github: zacharysarah + company: Linux Foundation + - name: Jennifer Rondeau + github: bradamant3 + company: Heptio meetings: - description: Regular SIG Meeting day: Tuesday time: "17:30" tz: "UTC" - frequency: weekly - url: https://zoom.us/j/678394311 + frequency: weekly - except fourth Tuesday every month + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit + archive_url: https://docs.google.com/document/d/1Ds87eRiNZeXwRBEbFr6Z7ukjbTow5RQcNZLaSvWWQsE/edit + recordings_url: https://www.youtube.com/playlist?list=PL69nYSiGNLP3b5hlx0YV7Lo7DtckM84y8 + - description: APAC SIG Meeting + day: Wednesday + time: "02:00" + tz: "UTC" + frequency: monthly - fourth Wednesday every month + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://docs.google.com/document/d/1Ds87eRiNZeXwRBEbFr6Z7ukjbTow5RQcNZLaSvWWQsE/edit recordings_url: https://www.youtube.com/playlist?list=PL69nYSiGNLP3b5hlx0YV7Lo7DtckM84y8 contact: @@ -777,27 +1057,31 @@ sigs: mailing_list: https://groups.google.com/forum/#!forum/kubernetes-sig-docs teams: - name: sig-docs-maintainers - description: Documentation Maintainers + description: Documentation maintainers - name: sig-docs-pr-reviews - description: Documentation PR Reviewers + description: Documentation PR reviews + - name: sig-docs-ko-owners + description: Korean localization + - name: sig-docs-ja-owners + description: Japanese localization + - name: sig-docs-zh-owners + description: Chinese localization subprojects: - - name: kubernetes-bootcamp - owners: - - https://raw.githubusercontent.com/kubernetes/kubernetes-bootcamp/master/OWNERS - - name: kubernetes-docs-cn - owners: - - https://raw.githubusercontent.com/kubernetes/kubernetes-docs-cn/master/OWNERS - name: reference-docs owners: - https://raw.githubusercontent.com/kubernetes-incubator/reference-docs/master/OWNERS - name: website owners: - https://raw.githubusercontent.com/kubernetes/website/master/OWNERS + - name: website-metadata + owners: + - https://raw.githubusercontent.com/kubernetes-sigs/website-metadata/master/OWNERS - name: GCP dir: sig-gcp mission_statement: > A Special Interest Group for building, deploying, maintaining, supporting, and using Kubernetes on the Google Cloud Platform. + charter_link: label: gcp leadership: chairs: @@ -810,7 +1094,7 @@ sigs: time: "16:00" tz: "UTC" frequency: biweekly - url: https://zoom.us/j/761149873 + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://docs.google.com/document/d/1mtmwZ4oVSSWhbEw8Lfzvc7ig84qxUpdK6uHyJp8rSGU/edit contact: slack: sig-gcp @@ -831,16 +1115,51 @@ sigs: - name: sig-gcp-test-failures description: Test Failures and Triage subprojects: - - name: cloud-provider-gcp + - name: gcp-compute-persistent-disk-csi-driver owners: - - https://raw.githubusercontent.com/kubernetes/cloud-provider-gcp/master/OWNERS - + - https://raw.githubusercontent.com/kubernetes-sigs/gcp-compute-persistent-disk-csi-driver/master/OWNERS + - name: gcp-filestore-csi-driver + owners: + - https://raw.githubusercontent.com/kubernetes-sigs/gcp-filestore-csi-driver/master/OWNERS + - name: IBMCloud + dir: sig-ibmcloud + mission_statement: > + A Special Interest Group (SIG) for building, deploying, maintaining, supporting, + and using Kubernetes on IBM Public and Private Clouds. + charter_link: + label: ibmcloud + leadership: + chairs: + - name: Khalid Ahmed + github: khahmed + company: IBM + - name: Richard Theis + github: rtheis + company: IBM + - name: Sahdev Zala + github: spzala + company: IBM + meetings: + - description: Regular SIG Meeting + day: Wednesday + time: "14:00" + tz: "EST" + frequency: biweekly + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit + archive_url: https://docs.google.com/document/d/1qd_LTu5GFaxUhSWTHigowHt3XwjJVf1L57kupj8lnwg/edit + contact: + slack: sig-ibmcloud + mailing_list: https://groups.google.com/forum/#!forum/kubernetes-sig-ibmcloud + teams: + - name: sig-ibmcloud-misc + description: General Discussion - name: Instrumentation dir: sig-instrumentation mission_statement: > Covers best practices for cluster observability through metrics, logging, and events across all Kubernetes components and development of relevant components such as Heapster and kube-state-metrics. Coordinates metric requirements of different SIGs for other components through finding common APIs. + charter_link: label: instrumentation leadership: chairs: @@ -856,8 +1175,8 @@ sigs: time: "17:30" tz: "UTC" frequency: biweekly - url: https://zoom.us/j/5342565819 - archive_url: https://docs.google.com/document/d/1gWuAATtlmI7XJILXd31nA4kMq6U9u63L70382Y3xcbM/edit + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit + archive_url: https://docs.google.com/document/d/17emKiwJeqfrCsv0NZ2FtyDbenXGtTNCsDEiLbPa7x7Y/edit contact: slack: sig-instrumentation mailing_list: https://groups.google.com/forum/#!forum/kubernetes-sig-instrumentation @@ -889,10 +1208,14 @@ sigs: - name: metrics-server owners: - https://raw.githubusercontent.com/kubernetes-incubator/metrics-server/master/OWNERS + - name: metrics + owners: + - https://raw.githubusercontent.com/kubernetes/metrics/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/metrics/OWNERS - name: Multicluster dir: sig-multicluster mission_statement: > - A Special Interest Group focussed on solving common challenges related to the + A Special Interest Group focused on solving common challenges related to the management of multiple Kubernetes clusters, and applications that exist therein. The SIG will be responsible for designing, discussing, implementing and maintaining API’s, tools and documentation related to multi-cluster administration and application @@ -901,6 +1224,7 @@ sigs: systems like Spinnaker and others. Standalone building blocks for these and other similar systems (for example a cluster registry), and proposed changes to kubernetes core where appropriate will also be in scope. + charter_link: charter.md label: multicluster leadership: chairs: @@ -916,15 +1240,15 @@ sigs: time: "9:30" tz: "PT (Pacific Time)" frequency: biweekly - url: https://zoom.us/my/k8s.mc + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://docs.google.com/document/d/18mk62nOXE_MCSSnb4yJD_8UadtzJrYyJxFwbrgabHe8/edit recordings_url: https://www.youtube.com/watch?v=iWKC3FsNHWg&list=PL69nYSiGNLP0HqgyqTby6HlDEz7i1mb0- - description: Federation v2 Working Group day: Wednesday - time: "9:30" + time: "7:30" tz: "PT (Pacific Time)" frequency: weekly - url: https://zoom.us/my/k8s.mc + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://docs.google.com/document/d/1v-Kb1pUs3ww_x0MiKtgcyTXCAuZlbVlz4_A9wS3_HXY/edit recordings_url: https://www.youtube.com/playlist?list=PL69nYSiGNLP3iKP5EzMbtNT2zOZv6RCrX contact: @@ -945,10 +1269,24 @@ sigs: description: Test Failures and Triage - name: sig-mutlicluster-proposals description: Design Proposals + subprojects: + - name: federation-v1 + owners: + - https://raw.githubusercontent.com/kubernetes/federation/master/OWNERS + - name: federation-v2 + owners: + - https://raw.githubusercontent.com/kubernetes-sigs/federation-v2/master/OWNERS + - name: cluster-registry + owners: + - https://raw.githubusercontent.com/kubernetes/cluster-registry/master/OWNERS + - name: kubemci + owners: + - https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-multicluster-ingress/master/OWNERS - name: Network dir: sig-network mission_statement: > Covers networking in Kubernetes. + charter_link: label: network leadership: chairs: @@ -967,7 +1305,7 @@ sigs: time: "14:00" tz: "PT (Pacific Time)" frequency: biweekly - url: https://zoom.us/j/5806599998 + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://docs.google.com/document/d/1_w77-zG_Xj0zYvEMfQZTQ-wPP4kXkpGD8smVtW_qqWM/edit recordings_url: https://www.youtube.com/watch?v=phCA5-vWkVM&list=PL69nYSiGNLP2E8vmnqo5MwPOY25sDWIxb contact: @@ -992,8 +1330,8 @@ sigs: - name: services owners: - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/proxy/OWNERS - - https://raw.githubusercontent.com/kubernetes/pkg/kubernetes/master/controller/endpoint/OWNERS - - https://raw.githubusercontent.com/kubernetes/pkg/kubernetes/master/controller/service/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/endpoint/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/service/OWNERS - name: kube-dns owners: - https://raw.githubusercontent.com/kubernetes/dns/master/OWNERS @@ -1014,6 +1352,7 @@ sigs: - name: Node dir: sig-node mission_statement: > + charter_link: label: node leadership: chairs: @@ -1029,7 +1368,7 @@ sigs: time: "10:00" tz: "PT (Pacific Time)" frequency: weekly - url: https://zoom.us/j/4799874685 + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://docs.google.com/document/d/1Ne57gvidMEWXR70OxxnRkYquAoMpt56o75oZtg-OeBg/edit?usp=sharing recordings_url: https://www.youtube.com/watch?v=FbKOI9-x9hI&list=PL69nYSiGNLP1wJPj5DYWXjiArF-MJ5fNG contact: @@ -1049,15 +1388,12 @@ sigs: - name: sig-node-test-failures description: Test Failures and Triage subprojects: - - name: cri-containerd - owners: - - https://raw.githubusercontent.com/kubernetes-incubator/cri-containerd/master/OWNERS - name: cri-o owners: - - https://raw.githubusercontent.com/kubernetes-incubator/cri-o/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/cri-o/master/OWNERS - name: cri-tools owners: - - https://raw.githubusercontent.com/kubernetes-incubator/cri-tools/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/cri-tools/master/OWNERS - name: frakti owners: - https://raw.githubusercontent.com/kubernetes/frakti/master/OWNERS @@ -1067,55 +1403,13 @@ sigs: - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubelet/OWNERS - name: node-feature-discovery owners: - - https://raw.githubusercontent.com/kubernetes-incubator/node-feature-discovery/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/node-feature-discovery/master/OWNERS - name: node-problem-detector owners: - https://raw.githubusercontent.com/kubernetes/node-problem-detector/master/OWNERS - name: rktlet owners: - https://raw.githubusercontent.com/kubernetes-incubator/rktlet/master/OWNERS - - name: On Premise - dir: sig-on-premise - mission_statement: > - Brings together member of Kubernetes community interested in running - Kubernetes on premise, on bare metal or more generally beyond cloud - providers. - label: onprem - leadership: - chairs: - - name: Marco Ceppi - github: marcoceppi - company: Canonical - - name: Dalton Hubble - github: dghubble - company: CoreOS - meetings: - - description: Regular SIG Meeting - day: Wednesday - time: "16:00" - tz: "UTC" - frequency: weekly - url: https://zoom.us/my/k8s.sig.onprem - archive_url: https://docs.google.com/document/d/1AHF1a8ni7iMOpUgDMcPKrLQCML5EMZUAwP4rro3P6sk/edit# - recordings_url: https://www.youtube.com/watch?v=dyUWqqNYUio&list=PL69nYSiGNLP2MvqC6NeegrgtOl5s1KlYa - contact: - slack: sig-onprem - mailing_list: https://groups.google.com/forum/#!forum/kubernetes-sig-on-prem - teams: - - name: sig-onprem-api-reviews - description: API Changes and Reviews - - name: sig-onprem-bugs - description: Bug Triage and Troubleshooting - - name: sig-onprem-feature-requests - description: Feature Requests - - name: sig-onprem-misc - description: General Discussion - - name: sig-onprem-pr-reviews - description: PR Reviews - - name: sig-onprem-proposals - description: Design Proposals - - name: sig-onprem-test-failures - description: Test Failures and Triage - name: OpenStack dir: sig-openstack mission_statement: > @@ -1124,6 +1418,7 @@ sigs: projects with OpenStack as: a deployment platform for Kubernetes; a service provider for Kubernetes; a collection of applications to run on Kubernetes. + charter_link: label: openstack leadership: chairs: @@ -1142,7 +1437,7 @@ sigs: time: "16:00" tz: "PT (Pacific Time)" frequency: biweekly - url: https://zoom.us/j/417251241 + url: https://docs.google.com/document/d/15UwgLbEyZyXXxVtsThcSuPiJru4CuqU9p3ttZSfTaY4/edit archive_url: https://docs.google.com/document/d/1iAQ3LSF_Ky6uZdFtEZPD_8i6HXeFxIeW4XtGcUJtPyU/edit?usp=sharing_eixpa_nl&ts=588b986f recordings_url: https://www.youtube.com/watch?v=iCfUx7ilh0E&list=PL69nYSiGNLP20iTSChQ_i2QQmTBl3M7ax contact: @@ -1164,11 +1459,8 @@ sigs: - name: sig-openstack-test-failures description: Test Failures and Triage subprojects: - - name: cloud-provider-openstack - owners: - - https://raw.githubusercontent.com/kubernetes/cloud-provider-openstack/master/OWNERS - - name: Product Management - dir: sig-product-management + - name: PM + dir: sig-pm mission_statement: > Focuses on aspects of product management, such as the qualification and successful management of user requests, and aspects of project and @@ -1188,7 +1480,8 @@ sigs: source project is very new and largely unscoped for a project as large as Kubernetes; we are learning too and we are excited to learn how we can best serve the community of users and contributors. - label: none + charter_link: + label: pm leadership: chairs: - name: Aparna Sinha @@ -1203,14 +1496,14 @@ sigs: meetings: - description: Regular SIG Meeting day: Tuesday - time: "16:00" + time: "18:30" tz: "UTC" frequency: biweekly - url: https://zoom.us/j/845373595 - archive_url: https://docs.google.com/document/d/1YqIpyjz4mV1jjvzhLx9JYy8LAduedzaoBMjpUKGUJQo/edit?usp=sharing + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit + archive_url: https://docs.google.com/document/d/13uHgcLf-hcR4a5QbV888fhnVsF3djBEpN8HolwS0kWM/edit?usp=sharing recordings_url: https://www.youtube.com/watch?v=VcdjaZAol2I&list=PL69nYSiGNLP3EBqpUGVsK1sMgUZVomfEQ contact: - slack: kubernetes-pm + slack: sig-pm mailing_list: https://groups.google.com/forum/#!forum/kubernetes-pm subprojects: - name: features @@ -1218,46 +1511,44 @@ sigs: - https://raw.githubusercontent.com/kubernetes/features/master/OWNERS - name: Release dir: sig-release + charter_link: charter.md label: release leadership: chairs: - - name: Jaice Singer DuMars - github: jdumars - company: Microsoft - name: Caleb Miles github: calebamiles company: Google + - name: Stephen Augustus + github: justaugustus + company: Red Hat + - name: Tim Pepper + github: tpepper + company: VMware + emeritus_leads: + - name: Jaice Singer DuMars + github: jdumars + company: Google meetings: - description: Regular SIG Meeting day: Tuesday time: "21:00" tz: "UTC" frequency: biweekly - url: https://zoom.us/j/664772523 - archive_url: https://docs.google.com/document/d/1vhsixdT58iJFfoGZbpmvI_xnK59XyAjtadu3h6hHPpY/edit?usp=sharing + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit + archive_url: https://docs.google.com/document/d/1Fu6HxXQu8wl6TwloGUEOXVzZ1rwZ72IAhglnaAMCPqA/edit?usp=sharing recordings_url: https://www.youtube.com/watch?v=I0KbWz8MTMk&list=PL69nYSiGNLP3QKkOsDsO6A0Y1rhgP84iZ contact: slack: sig-release mailing_list: https://groups.google.com/forum/#!forum/kubernetes-sig-release teams: + - name: sig-release + description: SIG Release Members - name: sig-release-admins - description: Release Team Admins - - name: sig-release-api-reviews - description: API Changes and Reviews - - name: sig-release-bugs - description: Bug Triage and Troubleshooting - - name: sig-release-feature-requests - description: Feature Requests - - name: sig-release-members - description: Release Team Members - - name: sig-release-misc - description: General Discussion - - name: sig-release-pr-reviews - description: PR Reviews - - name: sig-release-proposals - description: Design Proposals - - name: sig-release-test-failures - description: Test Failures and Triage + description: Admins for SIG Release repositories + - name: kubernetes-milestone-maintainers + description: Milestone Maintainers + - name: kubernetes-release-managers + description: Release Managers subprojects: - name: hyperkube owners: @@ -1282,6 +1573,7 @@ sigs: For more details about our objectives please review our [Scaling And Performance Goals](https://git.k8s.io/community/sig-scalability/goals.md) + charter_link: label: scalability leadership: chairs: @@ -1290,14 +1582,14 @@ sigs: company: Google - name: Bob Wise github: countspongebob - company: Samsung SDS + company: AWS meetings: - description: Regular SIG Meeting day: Thursday time: "16:30" tz: "UTC" frequency: bi-weekly - url: https://zoom.us/j/989573207 + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://docs.google.com/a/bobsplanet.com/document/d/1hEpf25qifVWztaeZPFmjNiJvPo-5JX1z0LSvvVY5G2g/edit?usp=drive_web recordings_url: https://www.youtube.com/watch?v=NDP1uYyom28&list=PL69nYSiGNLP2X-hzNTqyELU6jYS3p10uL contact: @@ -1321,30 +1613,37 @@ sigs: subprojects: - name: kubemark owners: - - https://raw.githubusercontent.com/kubernetes/kubemark/master/cmd/kubemark/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubemark/master/pkg/kubemark/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/cmd/kubemark/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubemark/OWNERS - name: perf-tests owners: - https://raw.githubusercontent.com/kubernetes/perf-tests/master/OWNERS - name: Scheduling dir: sig-scheduling mission_statement: > + charter_link: label: scheduling leadership: chairs: - name: Bobby (Babak) Salamat github: bsalamat company: Google - - name: Timothy St. Clair - github: timothysc - company: Heptio + - name: Klaus Ma + github: k82cn + company: Huawei meetings: - - description: Regular SIG Meeting + - description: 10AM PT Meeting day: Thursday - time: "20:00" + time: "17:00" tz: "UTC" - frequency: biweekly - url: https://zoom.us/j/7767391691 + frequency: biweekly starting Thursday June 7, 2018 + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit + - description: 5PM PT Meeting + day: Thursday + time: "24:00" + tz: "UTC" + frequency: biweekly starting Thursday June 14, 2018 + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://docs.google.com/document/d/13mwye7nvrmV11q9_Eg77z-1w3X7Q1GTbslpml4J7F3A/edit recordings_url: https://www.youtube.com/watch?v=PweKj6SU7UA&list=PL69nYSiGNLP2vwzcCOhxrL3JVBc-eaJWI contact: @@ -1372,40 +1671,45 @@ sigs: - name: descheduler owners: - https://raw.githubusercontent.com/kubernetes-incubator/descheduler/master/OWNERS - - name: kube-arbitrator + - name: kube-batch owners: - - https://raw.githubusercontent.com/kubernetes-incubator/kube-arbitrator/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/kube-batch/master/OWNERS - name: scheduler owners: - https://raw.githubusercontent.com/kubernetes/kubernetes/master/cmd/kube-scheduler/OWNERS - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/scheduler/OWNERS + - name: poseidon + owners: + - https://raw.githubusercontent.com/kubernetes-sigs/poseidon/master/OWNERS - name: Service Catalog dir: sig-service-catalog mission_statement: > - To develop a Kubernetes API for the CNCF service broker and Kubernetes - broker implementation. + Service Catalog is a Kubernetes extension project that + implements the [Open Service Broker API](https://www.openservicebrokerapi.org/) (OSBAPI). + It allows application developers the ability to provision and consume cloud services natively from within Kubernetes. + charter_link: charter.md label: service-catalog leadership: chairs: - - name: Paul Morie - github: pmorie - company: Red Hat - - name: Aaron Schlesinger - github: arschles + - name: Carolyn Van Slyck + github: carolynvs company: Microsoft - - name: Ville Aikas - github: vaikas-google + - name: Michael Kibbe + github: kibbles-n-bytes company: Google - name: Doug Davis github: duglin company: IBM + - name: Jay Boyd + github: jboyd01 + company: Red Hat meetings: - description: Regular SIG Meeting day: Monday time: "13:00" tz: "PT (Pacific Time)" frequency: weekly - url: https://zoom.us/j/7201225346 + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://docs.google.com/document/d/17xlpkoEbPR5M6P5VDzNx17q6-IPFxKyebEekCGYiIKM/edit recordings_url: https://www.youtube.com/watch?v=ukPj1sFFkr0&list=PL69nYSiGNLP2k9ZXx9E1MvRSotFDoHUWs contact: @@ -1433,7 +1737,14 @@ sigs: - name: Storage dir: sig-storage mission_statement: > - Covers storage and volume plugins. + SIG Storage is responsible for ensuring that different types of file and + block storage (whether ephemeral or persistent, local or remote) are + available wherever a container is scheduled (including provisioning/creating, + attaching, mounting, unmounting, detaching, and deleting of volumes), storage + capacity management (container ephemeral storage usage, volume resizing, + etc.), influencing scheduling of containers based on storage (data gravity, + availability, etc.), and generic operations on storage (snapshoting, etc.). + charter_link: charter.md label: storage leadership: chairs: @@ -1449,7 +1760,7 @@ sigs: time: "9:00" tz: "PT (Pacific Time)" frequency: biweekly - url: https://zoom.us/j/614261834 + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://docs.google.com/document/d/1-8KEG8AjAgKznS9NFm3qWqkGyCHmvU6HVl0sk5hwoAE/edit?usp=sharing recordings_url: https://www.youtube.com/watch?v=Eh7Qa7KOL8o&list=PL69nYSiGNLP02-BMqJdfFgGxYQ4Nb-2Qq contact: @@ -1471,9 +1782,35 @@ sigs: - name: sig-storage-test-failures description: Test Failures and Triage subprojects: + - name: kubernetes-csi + owners: + - https://raw.githubusercontent.com/kubernetes-csi/csi-driver-cinder/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/csi-driver-flex/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/csi-driver-host-path/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/csi-driver-iscsi/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/csi-lib-common/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/csi-lib-fc/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/csi-lib-iscsi/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/csi-test/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/docs/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/driver-registrar/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/drivers/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/kubernetes-csi.github.io/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/livenessprobe/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/external-attacher/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/external-provisioner/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/kubernetes-csi-migration-library/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/csi-api/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/csi-api/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/cluster-driver-registrar/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/node-driver-registrar/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/csi-lib-utils/master/OWNERS - name: external-storage owners: - https://raw.githubusercontent.com/kubernetes-incubator/external-storage/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/sig-storage-lib-external-provisioner/master/OWNERS - name: git-sync owners: - https://raw.githubusercontent.com/kubernetes/git-sync/master/OWNERS @@ -1490,12 +1827,13 @@ sigs: interested specifically in making it easier for the community to run tests and contribute test results, to ensure Kubernetes is stable across a variety of cluster configurations and cloud providers. + charter_link: label: testing leadership: chairs: - name: Aaron Crickenberger github: spiffxp - company: Samsung SDS + company: Google - name: Erick Feja github: fejta company: Google @@ -1511,38 +1849,34 @@ sigs: time: "13:00" tz: "PT (Pacific Time)" frequency: weekly - url: https://zoom.us/my/k8s.sig.testing + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://bit.ly/k8s-sig-testing-notes recordings_url: https://bit.ly/k8s-sig-testing-videos contact: slack: sig-testing mailing_list: https://groups.google.com/forum/#!forum/kubernetes-sig-testing teams: - - name: sig-testing-api-reviews - description: API Changes and Reviews - - name: sig-testing-bugs - description: Bug Triage and Troubleshooting - - name: sig-testing-feature-requests - description: Feature Requests - - name: sig-testing-misc + - name: sig-testing description: General Discussion - name: sig-testing-pr-reviews description: PR Reviews - - name: sig-testing-proposals - description: Design Proposals - - name: sig-testing-test-failures - description: Test Failures and Triage subprojects: - - name: test-infra + - name: kind + description: > + Kubernetes IN Docker. Run Kubernetes test clusters on your local + machine using Docker containers as nodes. owners: - - https://raw.githubusercontent.com/kubernetes/test-infra/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/kind/master/OWNERS - name: repo-publishing owners: - https://raw.githubusercontent.com/kubernetes/publishing-bot/master/OWNERS - name: testing-commons - description: "The Testing Commons is a subproject within the Kubernetes sig-testing community interested code structure, layout, and execution of common test code used throughout the kubernetes project." + description: > + The Testing Commons is a subproject within the Kubernetes sig-testing community + interested code structure, layout, and execution of common test code used + throughout the kubernetes project owners: - - https://raw.githubusercontent.com/kubernetes-sig-testing/frameworks/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/testing_frameworks/master/OWNERS - https://raw.githubusercontent.com/kubernetes/kubernetes/master/test/OWNERS meetings: - description: Testing Commons @@ -1550,8 +1884,11 @@ sigs: time: "07:30" tz: "PT (Pacific Time)" frequency: bi-weekly - url: https://zoom.us/my/k8s.sig.testing + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://docs.google.com/document/d/1TOC8vnmlkWw6HRNHoe5xSv5-qv7LelX6XK3UVCHuwb0/edit#heading=h.tnoevy5f439o + - name: test-infra + owners: + - https://raw.githubusercontent.com/kubernetes/test-infra/master/OWNERS - name: UI dir: sig-ui mission_statement: > @@ -1559,6 +1896,7 @@ sigs: Dashboard: a general purpose, web-based UI for Kubernetes clusters. It allows users to manage applications running in the cluster and troubleshoot them, as well as manage the cluster itself. + charter_link: label: ui leadership: chairs: @@ -1589,6 +1927,7 @@ sigs: mission_statement: > Bring together members of the VMware and Kubernetes community to maintain, support and run Kubernetes on VMware platforms. + charter_link: label: vmware leadership: chairs: @@ -1601,34 +1940,75 @@ sigs: meetings: - description: Regular SIG Meeting day: Thursday - time: "18:00" - tz: "UTC" + time: "11:00" + tz: "PT (Pacific Time)" frequency: bi-weekly - url: https://zoom.us/j/183662780 + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://docs.google.com/document/d/1RV0nVtlPoAtM0DQwNYxYCC9lHfiHpTNatyv4bek6XtA/edit?usp=sharing - recordings_url: + recordings_url: https://www.youtube.com/playlist?list=PLutJyDdkKQIqKv-Zq8WbyibQtemChor9y + - description: Cloud Provider vSphere monthly syncup + day: Wednesday + time: "09:00" + tz: "PT (Pacific Time)" + frequency: monthly - first Wednesday every month + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit + archive_url: https://docs.google.com/document/d/1B0NmmKVh8Ea5hnNsbUsJC7ZyNCsq_6NXl5hRdcHlJgY/edit?usp=sharing + recordings_url: https://www.youtube.com/playlist?list=PLutJyDdkKQIpOT4bOfuO3MEMHvU1tRqyR + - description: Cluster API Provider vSphere bi-weekly syncup + day: Wednesday + time: "13:00" + tz: "PT (Pacific Time)" + frequency: bi-weekly + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit + archive_url: https://docs.google.com/document/d/1jQrQiOW75uWraPk4b_LWtCTHwT7EZwrWWwMdxeWOEvk/edit?usp=sharing + recordings_url: https://www.youtube.com/playlist?list=PLutJyDdkKQIovV-AONxMa2cyv-_5LAYiu contact: slack: sig-vmware mailing_list: https://groups.google.com/forum/#!forum/kubernetes-sig-vmware + teams: + - name: sig-vmware-api-reviews + description: API Changes and Reviews + - name: sig-vmware-bugs + description: Bug Triage and Troubleshooting + - name: sig-vmware-feature-requests + description: Feature Requests + - name: sig-vmware-members + description: Release Team Members + - name: sig-vmware-misc + description: General Discussion + - name: sig-vmware-pr-reviews + description: PR Reviews + - name: sig-vmware-proposals + description: Design Proposals + - name: sig-vmware-test-failures + description: Test Failures and Triage + subprojects: + - name: cluster-api-provider-vsphere + owners: + - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-vsphere/master/OWNERS - name: Windows dir: sig-windows mission_statement: > Focuses on supporting Windows Server Containers for Kubernetes. + charter_link: label: windows leadership: chairs: - name: Michael Michael github: michmike - company: Apprenda + company: VMware + - name: Patrick Lang + github: patricklang + company: Microsoft meetings: - description: Regular SIG Meeting day: Tuesday time: "12:30" tz: "Eastern Standard Time (EST)" frequency: weekly - url: https://zoom.us/my/sigwindows + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://docs.google.com/document/d/1Tjxzjjuy4SQsFSUVXZbvqVb64hjNAG5CQX8bK7Yda9w/edit#heading=h.kbz22d1yc431 - recordings_url: https://www.youtube.com/watch?v=7zawb3KT9Xk&list=PL69nYSiGNLP2OH9InCcNkWNu2bl-gmIU4 + recordings_url: https://www.youtube.com/playlist?list=PL69nYSiGNLP2OH9InCcNkWNu2bl-gmIU4 contact: slack: sig-windows mailing_list: https://groups.google.com/forum/#!forum/kubernetes-sig-windows @@ -1644,6 +2024,7 @@ workinggroups: dir: wg-resource-management mission_statement: > Designing and shepherding cross-cutting features around compute resource isolation and utilization. + charter_link: leadership: chairs: - name: Vishnu Kannan @@ -1658,7 +2039,7 @@ workinggroups: time: "11:00" tz: "PT (Pacific Time)" frequency: biweekly (On demand) - url: https://zoom.us/j/4799874685 + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://docs.google.com/document/d/1j3vrG6BgE0hUDs2e-1ZUegKN4W4Adb1B6oJ6j-4kyPU recordings_url: https://www.youtube.com/watch?v=FUUJeWIEej0&list=PL69nYSiGNLP2uTrVwZCFtdEvLQvsbG2w4 contact: @@ -1668,21 +2049,22 @@ workinggroups: dir: wg-container-identity mission_statement: > Ensure containers are able to interact with external systems and acquire secure identities for communication, integrating with external solutions as necessary. + charter_link: leadership: chairs: - name: Clayton Coleman github: smarterclayton company: Red Hat - - name: Greg Gastle + - name: Greg Castle github: destijl company: Google meetings: - description: Regular WG Meeting - day: Tuesday - time: "15:00" - tz: "UTC" + day: Wednesday + time: "10:00" + tz: "PDT" frequency: bi-weekly (On demand) - url: TBD + url: https://zoom.us/my/k8s.sig.auth archive_url: https://docs.google.com/document/d/1uH60pNr1-jBn7N2pEcddk6-6NTnmV5qepwKUJe9tMRo/edit recordings_url: contact: @@ -1693,6 +2075,7 @@ workinggroups: mission_statement: > Boost adoption of the kubeadm tool. kubeadm is a tool for creating new Kubernetes clusters easily for new users, but can also be used as a toolbox for higher-level deployment solutions. This working group makes sure kubeadm meets the extensibility requirements of those higher-level Kubernetes installers. + charter_link: leadership: chairs: - name: Lucas Käldström @@ -1706,30 +2089,12 @@ workinggroups: time: "18:00" tz: "UTC" frequency: bi-weekly - url: https://zoom.us/j/166836%E2%80%8B624 + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://docs.google.com/document/d/1KdXsLYiJYJdiRbtgZsx6qbHF4g_K-gAScB9Zs4avgzg/edit recordings_url: https://www.youtube.com/watch?v=-Xlcrm5iT80&list=PLPgAK4Icr0ehh93BiMC3djAc5KoW7WIkl contact: slack: sig-cluster-lifecycle mailing_list: https://groups.google.com/forum/#!forum/kubernetes-sig-cluster-lifecycle - - name: Cluster API - dir: wg-cluster-api - mission_statement: > - Define a portable API that represents a Kubernetes cluster. The API will contain the control plane and its configuration and the underlying infrastructure (nodes, node pools, etc). - leadership: - chairs: - - name: Kris Nova - github: kris-nova - company: Heptio - - name: Robert Bailey - github: roberthbailey - company: Google - meetings: - - description: Regular WG Meeting - archive_url: https://docs.google.com/document/d/16ils69KImmE94RlmzjWDrkmFZysgB2J4lGnYMRN89WM/edit - contact: - slack: cluster-api - mailing_list: https://groups.google.com/forum/#!forum/kubernetes-sig-cluster-lifecycle - name: App Def dir: wg-app-def mission_statement: > @@ -1737,8 +2102,7 @@ workinggroups: understand the needs of other parts of the ecosystem on this layer, and improve the interoperability of application management tools through better separation of concerns, common conventions, and common principles. - - Charter can be found [here](https://docs.google.com/document/d/1TzRwzWYRulx4o8Fii8k7ToIx4LR4MSncxxLdJ9TkOAs/edit#) + charter_link: leadership: chairs: - name: Antoine Legrand @@ -1756,7 +2120,7 @@ workinggroups: time: "16:00" tz: "UTC" frequency: bi-weekly - url: https://zoom.us/j/748123863 + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://docs.google.com/document/d/1Pxc-qwAt4FvuISZ_Ib5KdUwlynFkGueuzPx5Je_lbGM/edit contact: slack: wg-app-def @@ -1770,6 +2134,7 @@ workinggroups: features included in the scope of this working-group: diff, dry-run and prune. Resources can be found in [this Google drive folder](https://drive.google.com/drive/folders/1wlpgkS2gFZXdp4x2WlRsfUBxkFlt2Gx0) + charter_link: leadership: chairs: # TBD: We probably need more people here? @@ -1782,37 +2147,15 @@ workinggroups: time: "9:30" tz: "PT (Pacific Time)" frequency: weekly + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit contact: slack: wg-apply mailing_list: https://groups.google.com/forum/#!forum/kubernetes-wg-apply - - name: Cloud Provider - dir: wg-cloud-provider - label: cloud-provider - mission_statement: > - Charter can be found [here](https://docs.google.com/document/d/1m4Kvnh_u_9cENEE9n1ifYowQEFSgiHnbw43urGJMB64/edit#) - leadership: - chairs: - - name: Sidhartha Mani - github: wlan0 - company: Caascade Labs - - name: Jago Macleod - github: jagosan - company: Google - meetings: - - description: Regular WG Meeting - day: Wednesday - time: "10:00" - tz: "PT (Pacific Time)" - frequency: weekly - url: https://zoom.us/my/cloudprovider - archive_url: https://docs.google.com/document/d/1OZE-ub-v6B8y-GuaWejL-vU_f9jsjBbrim4LtTfxssw/edit#heading=h.w7i4ksrweimp - contact: - slack: wg-cloud-provider - mailing_list: https://groups.google.com/forum/#!forum/kubernetes-wg-cloud-provider - name: Multitenancy dir: wg-multitenancy mission_statement: > Define the models of multitenancy that Kubernetes will support. Discuss and execute upon any remaining work that needs to be done to support these models. Create conformance tests that will prove that these models can be built and used in production environments. + charter_link: leadership: chairs: - name: David Oppenheimer @@ -1827,8 +2170,9 @@ workinggroups: time: "11:00" tz: "PT (Pacific Time)" frequency: biweekly - url: https://zoom.us/my/k8s.sig.auth + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://docs.google.com/document/d/1fj3yzmeU2eU8ZNBCUJG97dk_wC7228-e_MmdcmTNrZY/edit?usp=sharing + recordings_url: https://www.youtube.com/playlist?list=PL69nYSiGNLP1tBA0W8zEe6UwPsabGQk-j contact: slack: wg-multitenancy mailing_list: https://groups.google.com/forum/#!forum/kubernetes-wg-multitenancy @@ -1836,6 +2180,7 @@ workinggroups: dir: wg-policy mission_statement: > Provide an overall architecture that describes both the current policy related implementations as well as future policy related proposals in Kubernetes. Through a collaborative method, we want to present both dev and end user a universal view of policy architecture in Kubernetes. + charter_link: leadership: chairs: - name: Howard Huang @@ -1844,22 +2189,22 @@ workinggroups: - name: Torin Sandall github: tsandall company: Styra - - name: David Oppenheimer - github: davidopp + - name: Yisui Hu + github: easeway company: Google - - name: Clayton Coleman - github: smarterclayton + - name: Erica von Buelow + github: ericavonb company: Red Hat - - name: Xuan Jia - github: xuanjia - company: China Mobile + - name: Michael Elder + github: mdelder + company: IBM meetings: - description: Regular WG Meeting - day: Thursday - time: "17:00" + day: Wednesday + time: "16:00" tz: "PT (Pacific Time)" frequency: weekly - url: https://zoom.us/j/421702434 + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://docs.google.com/document/d/1ihFfEfgViKlUMbY2NKxaJzBkgHh-Phk5hqKTzK-NEEs/edit?usp=sharing contact: slack: wg-policy @@ -1868,6 +2213,7 @@ workinggroups: dir: wg-machine-learning mission_statement: > Identify and fix gaps in Kubernetes to better support Machine Learning applications + charter_link: leadership: chairs: - name: Vishnu Kannan @@ -1876,14 +2222,74 @@ workinggroups: - name: Kenneth Owens github: kow3ns company: Google + - name: Balaji Subramaniam + github: balajismaniam + company: Intel + - name: Connor Doyle + github: ConnorDoyle + company: Intel meetings: - description: Regular WG Meeting day: Thursday time: "13:00" tz: "PT (Pacific Time)" frequency: biweekly - url: https://zoom.us/j/4799874685 + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://goo.gl/gBCdt1 contact: slack: wg-machine-learning mailing_list: https://groups.google.com/forum/#!forum/kubernetes-wg-machine-learning + - name: IoT Edge + dir: wg-iot-edge + mission_statement: > + A Working Group dedicated to discussing, designing and documenting using Kubernetes for developing and deploying IoT and Edge specific applications + leadership: + chairs: + - name: Cindy Xing + github: cindyxing + company: Huawei + - name: Dejan Bosanac + github: dejanb + company: Red Hat + - name: Preston Holmes + github: ptone + company: Google + - name: Steve Wong + github: cantbewong + company: VMWare + meetings: + - description: Regular WG Meeting + day: Friday + time: "16:00" + tz: "UTC" + frequency: bi-weekly + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit + archive_url: https://docs.google.com/document/d/1Yuwy9IO4X6XKq2wLW0pVZn5yHQxlyK7wdYBZBXRWiKI/edit?usp=sharing + contact: + slack: wg-iot-edge + mailing_list: https://groups.google.com/forum/#!forum/kubernetes-wg-iot-edge + - name: Security Audit + dir: wg-security-audit + mission_statement: > + Perform a security audit on k8s with a vendor and produce as artifacts a threat model and whitepaper outlining everything found during the audit. + charter_link: + leadership: + chairs: + - name: Aaron Small + github: aasmall + company: Google + - name: Joel Smith + github: joelsmith + company: Red Hat + - name: Craig Ingram + github: cji + company: Salesforce + meetings: + - description: Regular WG Meeting + day: Monday + time: "13:00" + tz: "PT (Pacific Time)" + frequency: weekly + url: https://docs.google.com/document/d/1RbC4SBZBlKth7IjYv_NaEpnmLGwMJ0ElpUOmsG-bdRA/edit + contact: + mailing_list: https://groups.google.com/forum/#!forum/kubernetes-wg-audit diff --git a/vendor/github.com/client9/misspell/.gitignore b/vendor/github.com/client9/misspell/.gitignore deleted file mode 100644 index aaca9b8f9..000000000 --- a/vendor/github.com/client9/misspell/.gitignore +++ /dev/null @@ -1,33 +0,0 @@ -dist/ -bin/ - -# editor turds -*~ -*.gz -*.bz2 -*.csv - -# Compiled Object files, Static and Dynamic libs (Shared Objects) -*.o -*.a -*.so - -# Folders -_obj -_test - -# Architecture specific extensions/prefixes -*.[568vq] -[568vq].out - -*.cgo1.go -*.cgo2.c -_cgo_defun.c -_cgo_gotypes.go -_cgo_export.* - -_testmain.go - -*.exe -*.test -*.prof diff --git a/vendor/github.com/client9/misspell/.travis.yml b/vendor/github.com/client9/misspell/.travis.yml deleted file mode 100644 index 36a50df6a..000000000 --- a/vendor/github.com/client9/misspell/.travis.yml +++ /dev/null @@ -1,11 +0,0 @@ -sudo: required -dist: trusty -language: go -go: - - 1.8.3 -git: - depth: 1 -script: - - make -e ci -after_success: - - test -n "$TRAVIS_TAG" && ./scripts/goreleaser.sh diff --git a/vendor/github.com/client9/misspell/Dockerfile b/vendor/github.com/client9/misspell/Dockerfile deleted file mode 100644 index 1b6486ec1..000000000 --- a/vendor/github.com/client9/misspell/Dockerfile +++ /dev/null @@ -1,37 +0,0 @@ -FROM golang:1.8.1-alpine -MAINTAINER https://github.com/client9/misspell - -# cache buster -RUN echo 3 - -# git is needed for "go get" below -RUN apk add --no-cache git make - -# these are my standard testing / linting tools -RUN /bin/true \ - && go get -u github.com/alecthomas/gometalinter \ - && gometalinter --install \ - && rm -rf /go/src /go/pkg -# -# * SCOWL word list -# -# Downloads -# http://wordlist.aspell.net/dicts/ -# --> http://app.aspell.net/create -# - -# use en_US large size -# use regular size for others -ENV SOURCE_US_BIG http://app.aspell.net/create?max_size=70&spelling=US&max_variant=2&diacritic=both&special=hacker&special=roman-numerals&download=wordlist&encoding=utf-8&format=inline - -# should be able tell difference between English variations using this -ENV SOURCE_US http://app.aspell.net/create?max_size=60&spelling=US&max_variant=1&diacritic=both&download=wordlist&encoding=utf-8&format=inline -ENV SOURCE_GB_ISE http://app.aspell.net/create?max_size=60&spelling=GBs&max_variant=2&diacritic=both&download=wordlist&encoding=utf-8&format=inline -ENV SOURCE_GB_IZE http://app.aspell.net/create?max_size=60&spelling=GBz&max_variant=2&diacritic=both&download=wordlist&encoding=utf-8&format=inline -ENV SOURCE_CA http://app.aspell.net/create?max_size=60&spelling=CA&max_variant=2&diacritic=both&download=wordlist&encoding=utf-8&format=inline - -RUN /bin/true \ - && mkdir /scowl-wl \ - && wget -O /scowl-wl/words-US-60.txt ${SOURCE_US} \ - && wget -O /scowl-wl/words-GB-ise-60.txt ${SOURCE_GB_ISE} - diff --git a/vendor/github.com/client9/misspell/Makefile b/vendor/github.com/client9/misspell/Makefile deleted file mode 100644 index 0ccf74862..000000000 --- a/vendor/github.com/client9/misspell/Makefile +++ /dev/null @@ -1,84 +0,0 @@ -CONTAINER=nickg/misspell - -install: ## install misspell into GOPATH/bin - go install ./cmd/misspell - -build: hooks ## build and lint misspell - go install ./cmd/misspell - gometalinter \ - --vendor \ - --deadline=60s \ - --disable-all \ - --enable=vet \ - --enable=golint \ - --enable=gofmt \ - --enable=goimports \ - --enable=gosimple \ - --enable=staticcheck \ - --enable=ineffassign \ - --exclude=/usr/local/go/src/net/lookup_unix.go \ - ./... - go test . - -test: ## run all tests - go test . - -# the grep in line 2 is to remove misspellings in the spelling dictionary -# that trigger false positives!! -falsepositives: /scowl-wl - cat /scowl-wl/words-US-60.txt | \ - grep -i -v -E "payed|Tyre|Euclidian|nonoccurence|dependancy|reenforced|accidently|surprize|dependance|idealogy|binominal|causalities|conquerer|withing|casette|analyse|analogue|dialogue|paralyse|catalogue|archaeolog|clarinettist|catalyses|cancell|chisell|ageing|cataloguing" | \ - misspell -debug -error - cat /scowl-wl/words-GB-ise-60.txt | \ - grep -v -E "payed|nonoccurence|withing" | \ - misspell -locale=UK -debug -error -# cat /scowl-wl/words-GB-ize-60.txt | \ -# grep -v -E "withing" | \ -# misspell -debug -error -# cat /scowl-wl/words-CA-60.txt | \ -# grep -v -E "withing" | \ -# misspell -debug -error - -bench: ## run benchmarks - go test -bench '.*' - -clean: ## clean up time - rm -rf dist/ bin/ - go clean ./... - git gc --aggressive - -ci: ## run test like travis-ci does, requires docker - docker run --rm \ - -v $(PWD):/go/src/github.com/client9/misspell \ - -w /go/src/github.com/client9/misspell \ - ${CONTAINER} \ - make build falsepositives - -docker-build: ## build a docker test image - docker build -t ${CONTAINER} . - -docker-pull: ## pull latest test image - docker pull ${CONTAINER} - -docker-console: ## log into the test image - docker run --rm -it \ - -v $(PWD):/go/src/github.com/client9/misspell \ - -w /go/src/github.com/client9/misspell \ - ${CONTAINER} sh - -.git/hooks/pre-commit: scripts/pre-commit.sh - cp -f scripts/pre-commit.sh .git/hooks/pre-commit -.git/hooks/commit-msg: scripts/commit-msg.sh - cp -f scripts/commit-msg.sh .git/hooks/commit-msg -hooks: .git/hooks/pre-commit .git/hooks/commit-msg ## install git precommit hooks - -.PHONY: help ci console docker-build bench - -# https://www.client9.com/self-documenting-makefiles/ -help: - @awk -F ':|##' '/^[^\t].+?:.*?##/ {\ - printf "\033[36m%-30s\033[0m %s\n", $$1, $$NF \ - }' $(MAKEFILE_LIST) -.DEFAULT_GOAL=help -.PHONY=help - diff --git a/vendor/github.com/client9/misspell/README.md b/vendor/github.com/client9/misspell/README.md deleted file mode 100644 index f7a2e8b49..000000000 --- a/vendor/github.com/client9/misspell/README.md +++ /dev/null @@ -1,416 +0,0 @@ -[![Build Status](https://travis-ci.org/client9/misspell.svg?branch=master)](https://travis-ci.org/client9/misspell) [![Go Report Card](https://goreportcard.com/badge/github.com/client9/misspell)](https://goreportcard.com/report/github.com/client9/misspell) [![GoDoc](https://godoc.org/github.com/client9/misspell?status.svg)](https://godoc.org/github.com/client9/misspell) [![Coverage](http://gocover.io/_badge/github.com/client9/misspell)](http://gocover.io/github.com/client9/misspell) [![license](https://img.shields.io/badge/license-MIT-blue.svg?style=flat)](https://raw.githubusercontent.com/client9/misspell/master/LICENSE) - -Correct commonly misspelled English words... quickly. - -### Install - - -If you just want a binary and to start using `misspell`: - -``` -curl -L -o ./install-misspell.sh https://git.io/misspell -sh ./install-misspell.sh -``` - -will install as `./bin/misspell`. You can adjust the download location using the `-b` flag. File a ticket if you want another platform supported. - - -If you use [Go](https://golang.org/), the best way to run `misspell` is by using [gometalinter](#gometalinter). Otherwise, install `misspell` the old-fashioned way: - -``` -go get -u github.com/client9/misspell/cmd/misspell -``` - -and misspell will be in your `GOPATH` - -### Usage - - -```bash -$ misspell all.html your.txt important.md files.go -your.txt:42:10 found "langauge" a misspelling of "language" - -# ^ file, line, column -``` - -``` -$ misspell -help -Usage of misspell: - -debug - Debug matching, very slow - -error - Exit with 2 if misspelling found - -f string - 'csv', 'sqlite3' or custom Golang template for output - -i string - ignore the following corrections, comma separated - -j int - Number of workers, 0 = number of CPUs - -legal - Show legal information and exit - -locale string - Correct spellings using locale perferances for US or UK. Default is to use a neutral variety of English. Setting locale to US will correct the British spelling of 'colour' to 'color' - -o string - output file or [stderr|stdout|] (default "stdout") - -q Do not emit misspelling output - -source string - Source mode: auto=guess, go=golang source, text=plain or markdown-like text (default "auto") - -w Overwrite file with corrections (default is just to display) -``` - -## FAQ - -* [Automatic Corrections](#correct) -* [Converting UK spellings to US](#locale) -* [Using pipes and stdin](#stdin) -* [Golang special support](#golang) -* [gometalinter support](#gometalinter) -* [CSV Output](#csv) -* [Using SQLite3](#sqlite) -* [Changing output format](#output) -* [Checking a folder recursively](#recursive) -* [Performance](#performance) -* [Known Issues](#issues) -* [Debugging](#debug) -* [False Negatives and missing words](#missing) -* [Origin of Word Lists](#words) -* [Software License](#license) -* [Problem statement](#problem) -* [Other spelling correctors](#others) -* [Other ideas](#otherideas) - - -### How can I make the corrections automatically? - -Just add the `-w` flag! - -``` -$ misspell -w all.html your.txt important.md files.go -your.txt:9:21:corrected "langauge" to "language" - -# ^booyah -``` - - -### How do I convert British spellings to American (or vice-versa)? - -Add the `-locale US` flag! - -```bash -$ misspell -locale US important.txt -important.txt:10:20 found "colour" a misspelling of "color" -``` - -Add the `-locale UK` flag! - -```bash -$ echo "My favorite color is blue" | misspell -locale UK -stdin:1:3:found "favorite color" a misspelling of "favourite colour" -``` - -Help is appreciated as I'm neither British nor an -expert in the English language. - - -### How do you check an entire folder recursively? - -Just list a directory you'd like to check - -```bash -misspell . -misspell aDirectory anotherDirectory aFile -``` - -You can also run misspell recursively using the following shell tricks: - -```bash -misspell directory/**/* -``` - -or - -```bash -find . -type f | xargs misspell -``` - -You can select a type of file as well. The following examples selects all `.txt` files that are *not* in the `vendor` directory: - -```bash -find . -type f -name '*.txt' | grep -v vendor/ | xargs misspell -error -``` - - -### Can I use pipes or `stdin` for input? - -Yes! - -Print messages to `stderr` only: - -```bash -$ echo "zeebra" | misspell -stdin:1:0:found "zeebra" a misspelling of "zebra" -``` - -Print messages to `stderr`, and corrected text to `stdout`: - -```bash -$ echo "zeebra" | misspell -w -stdin:1:0:corrected "zeebra" to "zebra" -zebra -``` - -Only print the corrected text to `stdout`: - -```bash -$ echo "zeebra" | misspell -w -q -zebra -``` - - -### Are there special rules for golang source files? - -Yes! If the file ends in `.go`, then misspell will only check spelling in -comments. - -If you want to force a file to be checked as a golang source, use `-source=go` -on the command line. Conversely, you can check a golang source as if it were -pure text by using `-source=text`. You might want to do this since many -variable names have misspellings in them! - -### Can I check only-comments in other other programming languages? - -I'm told the using `-source=go` works well for ruby, javascript, java, c and -c++. - -It doesn't work well for python and bash. - - -### Does this work with gometalinter? - -[gometalinter](https://github.com/alecthomas/gometalinter) runs -multiple golang linters. Starting on [2016-06-12](https://github.com/alecthomas/gometalinter/pull/134) -gometalinter supports `misspell` natively but it is disabled by default. - -```bash -# update your copy of gometalinter -go get -u github.com/alecthomas/gometalinter - -# install updates and misspell -gometalinter --install --update -``` - -To use, just enable `misspell` - -``` -gometalinter --enable misspell ./... -``` - -Note that gometalinter only checks golang files, and uses the default options -of `misspell` - -You may wish to run this on your plaintext (.txt) and/or markdown files too. - - - -### How Can I Get CSV Output? - -Using `-f csv`, the output is standard comma-seprated values with headers in the first row. - -``` -misspell -f csv * -file,line,column,typo,corrected -"README.md",9,22,langauge,language -"README.md",47,25,langauge,language -``` - - -### How can I export to SQLite3? - -Using `-f sqlite`, the output is a [sqlite3](https://www.sqlite.org/index.html) dump-file. - -```bash -$ misspell -f sqlite * > /tmp/misspell.sql -$ cat /tmp/misspell.sql - -PRAGMA foreign_keys=OFF; -BEGIN TRANSACTION; -CREATE TABLE misspell( - "file" TEXT, - "line" INTEGER,i - "column" INTEGER,i - "typo" TEXT, - "corrected" TEXT -); -INSERT INTO misspell VALUES("install.txt",202,31,"immediatly","immediately"); -# etc... -COMMIT; -``` - -```bash -$ sqlite3 -init /tmp/misspell.sql :memory: 'select count(*) from misspell' -1 -``` - -With some tricks you can directly pipe output to sqlite3 by using `-init /dev/stdin`: - -``` -misspell -f sqlite * | sqlite3 -init /dev/stdin -column -cmd '.width 60 15' ':memory' \ - 'select substr(file,35),typo,count(*) as count from misspell group by file, typo order by count desc;' -``` - - -### How can I ignore rules? - -Using the `-i "comma,separated,rules"` flag you can specify corrections to ignore. - -For example, if you were to run `misspell -w -error -source=text` against document that contains the string `Guy Finkelshteyn Braswell`, misspell would change the text to `Guy Finkelstheyn Bras well`. You can then -determine the rules to ignore by reverting the change and running the with the `-debug` flag. You can then see -that the corrections were `htey -> they` and `aswell -> as well`. To ignore these two rules, you add `-i "htey,aswell"` to -your command. With debug mode on, you can see it print the corrections, but it will no longer make them. - - -### How can I change the output format? - -Using the `-f template` flag you can pass in a -[golang text template](https://golang.org/pkg/text/template/) to format the output. - -One can use `printf "%q" VALUE` to safely quote a value. - -The default template is compatible with [gometalinter](https://github.com/alecthomas/gometalinter) -``` -{{ .Filename }}:{{ .Line }}:{{ .Column }}:corrected {{ printf "%q" .Original }} to "{{ printf "%q" .Corrected }}" -``` - -To just print probable misspellings: - -``` --f '{{ .Original }}' -``` - - -### What problem does this solve? - -This corrects commonly misspelled English words in computer source -code, and other text-based formats (`.txt`, `.md`, etc). - -It is designed to run quickly so it can be -used as a [pre-commit hook](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks) -with minimal burden on the developer. - -It does not work with binary formats (e.g. Word, etc). - -It is not a complete spell-checking program nor a grammar checker. - - -### What are other misspelling correctors and what's wrong with them? - -Some other misspelling correctors: - -* https://github.com/vlajos/misspell_fixer -* https://github.com/lyda/misspell-check -* https://github.com/lucasdemarchi/codespell - -They all work but had problems that prevented me from using them at scale: - -* slow, all of the above check one misspelling at a time (i.e. linear) using regexps -* not MIT/Apache2 licensed (or equivalent) -* have dependencies that don't work for me (python3, bash, linux sed, etc) -* don't understand American vs. British English and sometimes makes unwelcome "corrections" - -That said, they might be perfect for you and many have more features -than this project! - - -### How fast is it? - -Misspell is easily 100x to 1000x faster than other spelling correctors. You -should be able to check and correct 1000 files in under 250ms. - -This uses the mighty power of golang's -[strings.Replacer](https://golang.org/pkg/strings/#Replacer) which is -a implementation or variation of the -[Aho–Corasick algorithm](https://en.wikipedia.org/wiki/Aho–Corasick_algorithm). -This makes multiple substring matches *simultaneously*. - -In addition this uses multiple CPU cores to work on multiple files. - - -### What problems does it have? - -Unlike the other projects, this doesn't know what a "word" is. There may be -more false positives and false negatives due to this. On the other hand, it -sometimes catches things others don't. - -Either way, please file bugs and we'll fix them! - -Since it operates in parallel to make corrections, it can be non-obvious to -determine exactly what word was corrected. - - -### It's making mistakes. How can I debug? - -Run using `-debug` flag on the file you want. It should then print what word -it is trying to correct. Then [file a -bug](https://github.com/client9/misspell/issues) describing the problem. -Thanks! - - -### Why is it making mistakes or missing items in golang files? - -The matching function is *case-sensitive*, so variable names that are multiple -worlds either in all-upper or all-lower case sometimes can cause false -positives. For instance a variable named `bodyreader` could trigger a false -positive since `yrea` is in the middle that could be corrected to `year`. -Other problems happen if the variable name uses a English contraction that -should use an apostrophe. The best way of fixing this is to use the -[Effective Go naming -conventions](https://golang.org/doc/effective_go.html#mixed-caps) and use -[camelCase](https://en.wikipedia.org/wiki/CamelCase) for variable names. You -can check your code using [golint](https://github.com/golang/lint) - - -### What license is this? - -The main code is [MIT](https://github.com/client9/misspell/blob/master/LICENSE). - -Misspell also makes uses of the Golang standard library and contains a modified version of Golang's [strings.Replacer](https://golang.org/pkg/strings/#Replacer) -which are covered under a [BSD License](https://github.com/golang/go/blob/master/LICENSE). Type `misspell -legal` for more details or see [legal.go](https://github.com/client9/misspell/blob/master/legal.go) - - -### Where do the word lists come from? - -It started with a word list from -[Wikipedia](https://en.wikipedia.org/wiki/Wikipedia:Lists_of_common_misspellings/For_machines). -Unfortunately, this list had to be highly edited as many of the words are -obsolete or based from mistakes on mechanical typewriters (I'm guessing). - -Additional words were added based on actually mistakes seen in -the wild (meaning self-generated). - -Variations of UK and US spellings are based on many sources including: - -* http://www.tysto.com/uk-us-spelling-list.html (with heavy editing, many are incorrect) -* http://www.oxforddictionaries.com/us/words/american-and-british-spelling-american (excellent site but incomplete) -* Diffing US and UK [scowl dictionaries](http://wordlist.aspell.net) - -American English is more accepting of spelling variations than is British -English, so "what is American or not" is subject to opinion. Corrections and help welcome. - - -### What are some other enhancements that could be done? - -Here's some ideas for enhancements: - -*Capitalization of proper nouns* could be done (e.g. weekday and month names, country names, language names) - -*Opinionated US spellings* US English has a number of words with alternate -spellings. Think [adviser vs. -advisor](http://grammarist.com/spelling/adviser-advisor/). While "advisor" is not wrong, the opinionated US -locale would correct "advisor" to "adviser". - -*Versioning* Some type of versioning is needed so reporting mistakes and errors is easier. - -*Feedback* Mistakes would be sent to some server for agregation and feedback review. - -*Contractions and Apostrophes* This would optionally correct "isnt" to -"isn't", etc. diff --git a/vendor/github.com/client9/misspell/benchmark_test.go b/vendor/github.com/client9/misspell/benchmark_test.go deleted file mode 100644 index d8126db39..000000000 --- a/vendor/github.com/client9/misspell/benchmark_test.go +++ /dev/null @@ -1,105 +0,0 @@ -package misspell - -import ( - "bytes" - "io/ioutil" - "testing" -) - -var ( - sampleClean string - sampleDirty string - tmpCount int - tmp string - rep *Replacer -) - -func init() { - - buf := bytes.Buffer{} - for i := 0; i < len(DictMain); i += 2 { - buf.WriteString(DictMain[i+1] + " ") - if i%5 == 0 { - buf.WriteString("\n") - } - } - sampleClean = buf.String() - sampleDirty = sampleClean + DictMain[0] + "\n" - rep = New() -} - -// BenchmarkCleanString takes a clean string (one with no errors) -func BenchmarkCleanString(b *testing.B) { - b.ResetTimer() - b.ReportAllocs() - var updated string - var diffs []Diff - var count int - for n := 0; n < b.N; n++ { - updated, diffs = rep.Replace(sampleClean) - count += len(diffs) - } - - // prevent compilier optimizations - tmpCount = count - tmp = updated -} - -func discardDiff(_ Diff) { - tmpCount++ -} - -// BenchmarkCleanStream takes a clean reader (no misspells) and outputs to a buffer -func BenchmarkCleanStream(b *testing.B) { - b.ResetTimer() - b.ReportAllocs() - tmpCount = 0 - buf := bytes.NewBufferString(sampleClean) - out := bytes.NewBuffer(make([]byte, 0, len(sampleClean)+100)) - for n := 0; n < b.N; n++ { - buf.Reset() - buf.WriteString(sampleClean) - out.Reset() - rep.ReplaceReader(buf, out, discardDiff) - } -} - -// BenchmarkCleanStreamDiscard takes a clean reader and discards output -func BenchmarkCleanStreamDiscard(b *testing.B) { - b.ResetTimer() - b.ReportAllocs() - - buf := bytes.NewBufferString(sampleClean) - tmpCount = 0 - for n := 0; n < b.N; n++ { - buf.Reset() - buf.WriteString(sampleClean) - rep.ReplaceReader(buf, ioutil.Discard, discardDiff) - } -} - -// BenchmarkCleanString takes a clean string (one with no errors) -func BenchmarkDirtyString(b *testing.B) { - b.ResetTimer() - b.ReportAllocs() - var updated string - var diffs []Diff - var count int - for n := 0; n < b.N; n++ { - updated, diffs = rep.Replace(sampleDirty) - count += len(diffs) - } - - // prevent compilier optimizations - tmpCount = count - tmp = updated -} - -func BenchmarkCompile(b *testing.B) { - r := New() - b.ReportAllocs() - b.ResetTimer() - for n := 0; n < b.N; n++ { - r.Compile() - } -} diff --git a/vendor/github.com/client9/misspell/case_test.go b/vendor/github.com/client9/misspell/case_test.go deleted file mode 100644 index 1705cf079..000000000 --- a/vendor/github.com/client9/misspell/case_test.go +++ /dev/null @@ -1,42 +0,0 @@ -package misspell - -import ( - "reflect" - "testing" -) - -func TestCaseStyle(t *testing.T) { - cases := []struct { - word string - want WordCase - }{ - {"lower", CaseLower}, - {"what's", CaseLower}, - {"UPPER", CaseUpper}, - {"Title", CaseTitle}, - {"CamelCase", CaseUnknown}, - {"camelCase", CaseUnknown}, - } - - for pos, tt := range cases { - got := CaseStyle(tt.word) - if tt.want != got { - t.Errorf("Case %d %q: want %v got %v", pos, tt.word, tt.want, got) - } - } -} - -func TestCaseVariations(t *testing.T) { - cases := []struct { - word string - want []string - }{ - {"that's", []string{"that's", "That's", "THAT'S"}}, - } - for pos, tt := range cases { - got := CaseVariations(tt.word, CaseStyle(tt.word)) - if !reflect.DeepEqual(tt.want, got) { - t.Errorf("Case %d %q: want %v got %v", pos, tt.word, tt.want, got) - } - } -} diff --git a/vendor/github.com/client9/misspell/cmd/misspell/main.go b/vendor/github.com/client9/misspell/cmd/misspell/main.go index 3d2c2b4d1..174d79d88 100644 --- a/vendor/github.com/client9/misspell/cmd/misspell/main.go +++ b/vendor/github.com/client9/misspell/cmd/misspell/main.go @@ -1,3 +1,4 @@ +// The misspell command corrects commonly misspelled English words in source files. package main import ( diff --git a/vendor/github.com/client9/misspell/falsepositives_test.go b/vendor/github.com/client9/misspell/falsepositives_test.go deleted file mode 100644 index 445cb2d15..000000000 --- a/vendor/github.com/client9/misspell/falsepositives_test.go +++ /dev/null @@ -1,136 +0,0 @@ -package misspell - -import ( - "testing" -) - -func TestFalsePositives(t *testing.T) { - cases := []string{ - "importEnd", - "drinkeries", - "subscripting", - "unprojected", - "updaters", - "templatize", - "requesters", - "requestors", - "replicaset", - "parallelise", - "parallelize", - "perceptron", // http://foldoc.org/perceptron - "perceptrons", // ^^ - "convertors", // alt spelling - "adventurers", - " s.svc.GetObject ", - "infinitie.net", - "foo summaries\n", - "thru", - "publically", - "6YUO5", // base64 - "cleaner", // triggered by "cleane->cleanser" and partial word FP - " http.Redirect(w, req, req.URL.Path, http.StatusFound) ", - "url is http://zeebra.com ", - "path is /zeebra?zeebra=zeebra ", - "Malcom_McLean", - "implementor", // alt spelling, see https://github.com/client9/misspell/issues/46 - "searchtypes", - " witness", - "returndata", - "UNDERSTOOD", - "textinterface", - " committed ", - "committed", - "Bengali", - "Portuguese", - "scientists", - "causally", - "embarrassing", - "setuptools", // python package - "committing", - "guises", - "disguise", - "begging", - "cmo", - "cmos", - "borked", - "hadn't", - "Iceweasel", - "summarised", - "autorenew", - "travelling", - "republished", - "fallthru", - "pruning", - "deb.VersionDontCare", - "authtag", - "intrepid", - "usefully", - "there", - "definite", - "earliest", - "Japanese", - "international", - "excellent", - "gracefully", - "carefully", - "class", - "include", - "process", - "address", - "attempt", - "large", - "although", - "specific", - "taste", - "against", - "successfully", - "unsuccessfully", - "occurred", - "agree", - "controlled", - "publisher", - "strategy", - "geoposition", - "paginated", - "happened", - "relative", - "computing", - "language", - "manual", - "token", - "into", - "nothing", - "datatool", - "propose", - "learnt", - "tolerant", - "whitehat", - "monotonic", - "comprised", - "indemnity", - "flattened", - "interrupted", - "inotify", - "occasional", - "forging", - "ampersand", - "decomposition", - "commit", - "programmer", // "grammer" - // "requestsinserted", - "seeked", // technical word - "bodyreader", // variable name - "cantPrepare", // variable name - "dontPrepare", // variable name - "\\nto", // https://github.com/client9/misspell/issues/93 - "4f8b42c22dd3729b519ba6f68d2da7cc5b2d606d05daed5ad5128cc03e6c6358", // https://github.com/client9/misspell/issues/97 - } - r := New() - r.Debug = true - for casenum, tt := range cases { - got, _ := r.Replace(tt) - if got != tt { - t.Errorf("%d: %q got converted to %q", casenum, tt, got) - } - } -} diff --git a/vendor/github.com/client9/misspell/goreleaser.yml b/vendor/github.com/client9/misspell/goreleaser.yml deleted file mode 100644 index 2bd738f8b..000000000 --- a/vendor/github.com/client9/misspell/goreleaser.yml +++ /dev/null @@ -1,29 +0,0 @@ -# goreleaser.yml -# https://github.com/goreleaser/goreleaser -build: - main: cmd/misspell/main.go - binary: misspell - ldflags: -s -w -X main.version={{.Version}} - goos: - - darwin - - linux - - windows - goarch: - - amd64 - env: - - CGO_ENABLED=0 - ignore: - - goos: darwin - goarch: 386 - - goos: windows - goarch: 386 - -archive: - name_template: "{{ .Binary }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}" - replacements: - amd64: 64bit - 386: 32bit - darwin: mac - -snapshot: - name_template: SNAPSHOT-{{.Commit}} diff --git a/vendor/github.com/client9/misspell/install-misspell.sh b/vendor/github.com/client9/misspell/install-misspell.sh deleted file mode 100755 index 8e0ff5d94..000000000 --- a/vendor/github.com/client9/misspell/install-misspell.sh +++ /dev/null @@ -1,318 +0,0 @@ -#!/bin/sh -set -e -# Code generated by godownloader. DO NOT EDIT. -# - -usage() { - this=$1 - cat </dev/null -} -uname_os() { - os=$(uname -s | tr '[:upper:]' '[:lower:]') - echo "$os" -} -uname_arch() { - arch=$(uname -m) - case $arch in - x86_64) arch="amd64" ;; - x86) arch="386" ;; - i686) arch="386" ;; - i386) arch="386" ;; - aarch64) arch="arm64" ;; - armv5*) arch="arm5" ;; - armv6*) arch="arm6" ;; - armv7*) arch="arm7" ;; - esac - echo ${arch} -} -uname_os_check() { - os=$(uname_os) - case "$os" in - darwin) return 0 ;; - dragonfly) return 0 ;; - freebsd) return 0 ;; - linux) return 0 ;; - android) return 0 ;; - nacl) return 0 ;; - netbsd) return 0 ;; - openbsd) return 0 ;; - plan9) return 0 ;; - solaris) return 0 ;; - windows) return 0 ;; - esac - echo "$0: uname_os_check: internal error '$(uname -s)' got converted to '$os' which is not a GOOS value. Please file bug at https://github.com/client9/shlib" - return 1 -} -uname_arch_check() { - arch=$(uname_arch) - case "$arch" in - 386) return 0 ;; - amd64) return 0 ;; - arm64) return 0 ;; - armv5) return 0 ;; - armv6) return 0 ;; - armv7) return 0 ;; - ppc64) return 0 ;; - ppc64le) return 0 ;; - mips) return 0 ;; - mipsle) return 0 ;; - mips64) return 0 ;; - mips64le) return 0 ;; - s390x) return 0 ;; - amd64p32) return 0 ;; - esac - echo "$0: uname_arch_check: internal error '$(uname -m)' got converted to '$arch' which is not a GOARCH value. Please file bug report at https://github.com/client9/shlib" - return 1 -} -untar() { - tarball=$1 - case "${tarball}" in - *.tar.gz | *.tgz) tar -xzf "${tarball}" ;; - *.tar) tar -xf "${tarball}" ;; - *.zip) unzip "${tarball}" ;; - *) - echo "Unknown archive format for ${tarball}" - return 1 - ;; - esac -} -mktmpdir() { - test -z "$TMPDIR" && TMPDIR="$(mktemp -d)" - mkdir -p "${TMPDIR}" - echo "${TMPDIR}" -} -http_download() { - local_file=$1 - source_url=$2 - header=$3 - headerflag='' - destflag='' - if is_command curl; then - cmd='curl --fail -sSL' - destflag='-o' - headerflag='-H' - elif is_command wget; then - cmd='wget -q' - destflag='-O' - headerflag='--header' - else - echo "http_download: unable to find wget or curl" - return 1 - fi - if [ -z "$header" ]; then - $cmd $destflag "$local_file" "$source_url" - else - $cmd $headerflag "$header" $destflag "$local_file" "$source_url" - fi -} -github_api() { - local_file=$1 - source_url=$2 - header="" - case "$source_url" in - https://api.github.com*) - test -z "$GITHUB_TOKEN" || header="Authorization: token $GITHUB_TOKEN" - ;; - esac - http_download "$local_file" "$source_url" "$header" -} -github_last_release() { - owner_repo=$1 - giturl="https://api.github.com/repos/${owner_repo}/releases/latest" - html=$(github_api - "$giturl") - version=$(echo "$html" | grep -m 1 "\"tag_name\":" | cut -f4 -d'"') - test -z "$version" && return 1 - echo "$version" -} -hash_sha256() { - TARGET=${1:-/dev/stdin} - if is_command gsha256sum; then - hash=$(gsha256sum "$TARGET") || return 1 - echo "$hash" | cut -d ' ' -f 1 - elif is_command sha256sum; then - hash=$(sha256sum "$TARGET") || return 1 - echo "$hash" | cut -d ' ' -f 1 - elif is_command shasum; then - hash=$(shasum -a 256 "$TARGET" 2>/dev/null) || return 1 - echo "$hash" | cut -d ' ' -f 1 - elif is_command openssl; then - hash=$(openssl -dst openssl dgst -sha256 "$TARGET") || return 1 - echo "$hash" | cut -d ' ' -f a - else - echo "hash_sha256: unable to find command to compute sha-256 hash" - return 1 - fi -} -hash_sha256_verify() { - TARGET=$1 - checksums=$2 - if [ -z "$checksums" ]; then - echo "hash_sha256_verify: checksum file not specified in arg2" - return 1 - fi - BASENAME=${TARGET##*/} - want=$(grep "${BASENAME}" "${checksums}" 2>/dev/null | tr '\t' ' ' | cut -d ' ' -f 1) - if [ -z "$want" ]; then - echo "hash_sha256_verify: unable to find checksum for '${TARGET}' in '${checksums}'" - return 1 - fi - got=$(hash_sha256 "$TARGET") - if [ "$want" != "$got" ]; then - echo "hash_sha256_verify: checksum for '$TARGET' did not verify ${want} vs $got" - return 1 - fi -} -cat /dev/null <", ">", - `"`, """, - "'", "'", -) - -var htmlUnescaper = NewStringReplacer( - "&", "&", - "<", "<", - ">", ">", - """, `"`, - "'", "'", -) - -// The http package's old HTML escaping function. -func oldHTMLEscape(s string) string { - s = strings.Replace(s, "&", "&", -1) - s = strings.Replace(s, "<", "<", -1) - s = strings.Replace(s, ">", ">", -1) - s = strings.Replace(s, `"`, """, -1) - s = strings.Replace(s, "'", "'", -1) - return s -} - -var capitalLetters = NewStringReplacer("a", "A", "b", "B") - -// TestReplacer tests the replacer implementations. -func TestReplacer(t *testing.T) { - type testCase struct { - r *StringReplacer - in, out string - } - var testCases []testCase - - // str converts 0xff to "\xff". This isn't just string(b) since that converts to UTF-8. - str := func(b byte) string { - return string([]byte{b}) - } - var s []string - - // inc maps "\x00"->"\x01", ..., "a"->"b", "b"->"c", ..., "\xff"->"\x00". - for i := 0; i < 256; i++ { - s = append(s, str(byte(i)), str(byte(i+1))) - } - inc := NewStringReplacer(s...) - - // Test cases with 1-byte old strings, 1-byte new strings. - testCases = append(testCases, - testCase{capitalLetters, "brad", "BrAd"}, - testCase{capitalLetters, strings.Repeat("a", (32<<10)+123), strings.Repeat("A", (32<<10)+123)}, - testCase{capitalLetters, "", ""}, - - testCase{inc, "brad", "csbe"}, - testCase{inc, "\x00\xff", "\x01\x00"}, - testCase{inc, "", ""}, - - testCase{NewStringReplacer("a", "1", "a", "2"), "brad", "br1d"}, - ) - - // repeat maps "a"->"a", "b"->"bb", "c"->"ccc", ... - s = nil - for i := 0; i < 256; i++ { - n := i + 1 - 'a' - if n < 1 { - n = 1 - } - s = append(s, str(byte(i)), strings.Repeat(str(byte(i)), n)) - } - repeat := NewStringReplacer(s...) - - // Test cases with 1-byte old strings, variable length new strings. - testCases = append(testCases, - testCase{htmlEscaper, "No changes", "No changes"}, - testCase{htmlEscaper, "I <3 escaping & stuff", "I <3 escaping & stuff"}, - testCase{htmlEscaper, "&&&", "&&&"}, - testCase{htmlEscaper, "", ""}, - - testCase{repeat, "brad", "bbrrrrrrrrrrrrrrrrrradddd"}, - testCase{repeat, "abba", "abbbba"}, - testCase{repeat, "", ""}, - - testCase{NewStringReplacer("a", "11", "a", "22"), "brad", "br11d"}, - ) - - // The remaining test cases have variable length old strings. - - testCases = append(testCases, - testCase{htmlUnescaper, "&amp;", "&"}, - testCase{htmlUnescaper, "<b>HTML's neat</b>", "HTML's neat"}, - testCase{htmlUnescaper, "", ""}, - - testCase{NewStringReplacer("a", "1", "a", "2", "xxx", "xxx"), "brad", "br1d"}, - - testCase{NewStringReplacer("a", "1", "aa", "2", "aaa", "3"), "aaaa", "1111"}, - - testCase{NewStringReplacer("aaa", "3", "aa", "2", "a", "1"), "aaaa", "31"}, - ) - - // gen1 has multiple old strings of variable length. There is no - // overall non-empty common prefix, but some pairwise common prefixes. - gen1 := NewStringReplacer( - "aaa", "3[aaa]", - "aa", "2[aa]", - "a", "1[a]", - "i", "i", - "longerst", "most long", - "longer", "medium", - "long", "short", - "xx", "xx", - "x", "X", - "X", "Y", - "Y", "Z", - ) - testCases = append(testCases, - testCase{gen1, "fooaaabar", "foo3[aaa]b1[a]r"}, - testCase{gen1, "long, longerst, longer", "short, most long, medium"}, - testCase{gen1, "xxxxx", "xxxxX"}, - testCase{gen1, "XiX", "YiY"}, - testCase{gen1, "", ""}, - ) - - // gen2 has multiple old strings with no pairwise common prefix. - gen2 := NewStringReplacer( - "roses", "red", - "violets", "blue", - "sugar", "sweet", - ) - testCases = append(testCases, - testCase{gen2, "roses are red, violets are blue...", "red are red, blue are blue..."}, - testCase{gen2, "", ""}, - ) - - // gen3 has multiple old strings with an overall common prefix. - gen3 := NewStringReplacer( - "abracadabra", "poof", - "abracadabrakazam", "splat", - "abraham", "lincoln", - "abrasion", "scrape", - "abraham", "isaac", - ) - testCases = append(testCases, - testCase{gen3, "abracadabrakazam abraham", "poofkazam lincoln"}, - testCase{gen3, "abrasion abracad", "scrape abracad"}, - testCase{gen3, "abba abram abrasive", "abba abram abrasive"}, - testCase{gen3, "", ""}, - ) - - // foo{1,2,3,4} have multiple old strings with an overall common prefix - // and 1- or 2- byte extensions from the common prefix. - foo1 := NewStringReplacer( - "foo1", "A", - "foo2", "B", - "foo3", "C", - ) - foo2 := NewStringReplacer( - "foo1", "A", - "foo2", "B", - "foo31", "C", - "foo32", "D", - ) - foo3 := NewStringReplacer( - "foo11", "A", - "foo12", "B", - "foo31", "C", - "foo32", "D", - ) - foo4 := NewStringReplacer( - "foo12", "B", - "foo32", "D", - ) - testCases = append(testCases, - testCase{foo1, "fofoofoo12foo32oo", "fofooA2C2oo"}, - testCase{foo1, "", ""}, - - testCase{foo2, "fofoofoo12foo32oo", "fofooA2Doo"}, - testCase{foo2, "", ""}, - - testCase{foo3, "fofoofoo12foo32oo", "fofooBDoo"}, - testCase{foo3, "", ""}, - - testCase{foo4, "fofoofoo12foo32oo", "fofooBDoo"}, - testCase{foo4, "", ""}, - ) - - // genAll maps "\x00\x01\x02...\xfe\xff" to "[all]", amongst other things. - allBytes := make([]byte, 256) - for i := range allBytes { - allBytes[i] = byte(i) - } - allString := string(allBytes) - genAll := NewStringReplacer( - allString, "[all]", - "\xff", "[ff]", - "\x00", "[00]", - ) - testCases = append(testCases, - testCase{genAll, allString, "[all]"}, - testCase{genAll, "a\xff" + allString + "\x00", "a[ff][all][00]"}, - testCase{genAll, "", ""}, - ) - - // Test cases with empty old strings. - - blankToX1 := NewStringReplacer("", "X") - blankToX2 := NewStringReplacer("", "X", "", "") - blankHighPriority := NewStringReplacer("", "X", "o", "O") - blankLowPriority := NewStringReplacer("o", "O", "", "X") - blankNoOp1 := NewStringReplacer("", "") - blankNoOp2 := NewStringReplacer("", "", "", "A") - blankFoo := NewStringReplacer("", "X", "foobar", "R", "foobaz", "Z") - testCases = append(testCases, - testCase{blankToX1, "foo", "XfXoXoX"}, - testCase{blankToX1, "", "X"}, - - testCase{blankToX2, "foo", "XfXoXoX"}, - testCase{blankToX2, "", "X"}, - - testCase{blankHighPriority, "oo", "XOXOX"}, - testCase{blankHighPriority, "ii", "XiXiX"}, - testCase{blankHighPriority, "oiio", "XOXiXiXOX"}, - testCase{blankHighPriority, "iooi", "XiXOXOXiX"}, - testCase{blankHighPriority, "", "X"}, - - testCase{blankLowPriority, "oo", "OOX"}, - testCase{blankLowPriority, "ii", "XiXiX"}, - testCase{blankLowPriority, "oiio", "OXiXiOX"}, - testCase{blankLowPriority, "iooi", "XiOOXiX"}, - testCase{blankLowPriority, "", "X"}, - - testCase{blankNoOp1, "foo", "foo"}, - testCase{blankNoOp1, "", ""}, - - testCase{blankNoOp2, "foo", "foo"}, - testCase{blankNoOp2, "", ""}, - - testCase{blankFoo, "foobarfoobaz", "XRXZX"}, - testCase{blankFoo, "foobar-foobaz", "XRX-XZX"}, - testCase{blankFoo, "", "X"}, - ) - - // single string replacer - - abcMatcher := NewStringReplacer("abc", "[match]") - - testCases = append(testCases, - testCase{abcMatcher, "", ""}, - testCase{abcMatcher, "ab", "ab"}, - testCase{abcMatcher, "abc", "[match]"}, - testCase{abcMatcher, "abcd", "[match]d"}, - testCase{abcMatcher, "cabcabcdabca", "c[match][match]d[match]a"}, - ) - - // Issue 6659 cases (more single string replacer) - - noHello := NewStringReplacer("Hello", "") - testCases = append(testCases, - testCase{noHello, "Hello", ""}, - testCase{noHello, "Hellox", "x"}, - testCase{noHello, "xHello", "x"}, - testCase{noHello, "xHellox", "xx"}, - ) - - // No-arg test cases. - - nop := NewStringReplacer() - testCases = append(testCases, - testCase{nop, "abc", "abc"}, - testCase{nop, "", ""}, - ) - - // Run the test cases. - - for i, tc := range testCases { - if s := tc.r.Replace(tc.in); s != tc.out { - t.Errorf("%d. strings.Replace(%q) = %q, want %q", i, tc.in, s, tc.out) - } - var buf bytes.Buffer - n, err := tc.r.WriteString(&buf, tc.in) - if err != nil { - t.Errorf("%d. WriteString: %v", i, err) - continue - } - got := buf.String() - if got != tc.out { - t.Errorf("%d. WriteString(%q) wrote %q, want %q", i, tc.in, got, tc.out) - continue - } - if n != len(tc.out) { - t.Errorf("%d. WriteString(%q) wrote correct string but reported %d bytes; want %d (%q)", - i, tc.in, n, len(tc.out), tc.out) - } - } -} - -type errWriter struct{} - -func (errWriter) Write(p []byte) (n int, err error) { - return 0, fmt.Errorf("unwritable") -} - -func BenchmarkGenericNoMatch(b *testing.B) { - str := strings.Repeat("A", 100) + strings.Repeat("B", 100) - generic := NewStringReplacer("a", "A", "b", "B", "12", "123") // varying lengths forces generic - for i := 0; i < b.N; i++ { - generic.Replace(str) - } -} - -func BenchmarkGenericMatch1(b *testing.B) { - str := strings.Repeat("a", 100) + strings.Repeat("b", 100) - generic := NewStringReplacer("a", "A", "b", "B", "12", "123") - for i := 0; i < b.N; i++ { - generic.Replace(str) - } -} - -func BenchmarkGenericMatch2(b *testing.B) { - str := strings.Repeat("It's <b>HTML</b>!", 100) - for i := 0; i < b.N; i++ { - htmlUnescaper.Replace(str) - } -} - -func benchmarkSingleString(b *testing.B, pattern, text string) { - r := NewStringReplacer(pattern, "[match]") - b.SetBytes(int64(len(text))) - b.ResetTimer() - for i := 0; i < b.N; i++ { - r.Replace(text) - } -} - -func BenchmarkSingleMaxSkipping(b *testing.B) { - benchmarkSingleString(b, strings.Repeat("b", 25), strings.Repeat("a", 10000)) -} - -func BenchmarkSingleLongSuffixFail(b *testing.B) { - benchmarkSingleString(b, "b"+strings.Repeat("a", 500), strings.Repeat("a", 1002)) -} - -func BenchmarkSingleMatch(b *testing.B) { - benchmarkSingleString(b, "abcdef", strings.Repeat("abcdefghijklmno", 1000)) -} - -func BenchmarkByteByteNoMatch(b *testing.B) { - str := strings.Repeat("A", 100) + strings.Repeat("B", 100) - for i := 0; i < b.N; i++ { - capitalLetters.Replace(str) - } -} - -func BenchmarkByteByteMatch(b *testing.B) { - str := strings.Repeat("a", 100) + strings.Repeat("b", 100) - for i := 0; i < b.N; i++ { - capitalLetters.Replace(str) - } -} - -func BenchmarkByteStringMatch(b *testing.B) { - str := "<" + strings.Repeat("a", 99) + strings.Repeat("b", 99) + ">" - for i := 0; i < b.N; i++ { - htmlEscaper.Replace(str) - } -} - -func BenchmarkHTMLEscapeNew(b *testing.B) { - str := "I <3 to escape HTML & other text too." - for i := 0; i < b.N; i++ { - htmlEscaper.Replace(str) - } -} - -func BenchmarkHTMLEscapeOld(b *testing.B) { - str := "I <3 to escape HTML & other text too." - for i := 0; i < b.N; i++ { - oldHTMLEscape(str) - } -} - -func BenchmarkByteStringReplacerWriteString(b *testing.B) { - str := strings.Repeat("I <3 to escape HTML & other text too.", 100) - buf := new(bytes.Buffer) - for i := 0; i < b.N; i++ { - htmlEscaper.WriteString(buf, str) - buf.Reset() - } -} - -func BenchmarkByteReplacerWriteString(b *testing.B) { - str := strings.Repeat("abcdefghijklmnopqrstuvwxyz", 100) - buf := new(bytes.Buffer) - for i := 0; i < b.N; i++ { - capitalLetters.WriteString(buf, str) - buf.Reset() - } -} - -// BenchmarkByteByteReplaces compares byteByteImpl against multiple Replaces. -func BenchmarkByteByteReplaces(b *testing.B) { - str := strings.Repeat("a", 100) + strings.Repeat("b", 100) - for i := 0; i < b.N; i++ { - strings.Replace(strings.Replace(str, "a", "A", -1), "b", "B", -1) - } -} diff --git a/vendor/github.com/client9/misspell/url_test.go b/vendor/github.com/client9/misspell/url_test.go deleted file mode 100644 index 0cf9ce268..000000000 --- a/vendor/github.com/client9/misspell/url_test.go +++ /dev/null @@ -1,105 +0,0 @@ -package misspell - -import ( - "strings" - "testing" -) - -// Test suite partiall from https://mathiasbynens.be/demo/url-regex -// -func TestStripURL(t *testing.T) { - cases := []string{ - "HTTP://FOO.COM/BLAH_BLAH", - "http://foo.com/blah_blah", - "http://foo.com/blah_blah/", - "http://foo.com/blah_blah_(wikipedia)", - "http://foo.com/blah_blah_(wikipedia)_(again)", - "http://www.example.com/wpstyle/?p=364", - "https://www.example.com/foo/?bar=baz&inga=42&quux", - "http://✪df.ws/123", - "http://userid:password@example.com:8080", - "http://userid:password@example.com:8080/", - "http://userid@example.com", - "http://userid@example.com/", - "http://userid@example.com:8080", - "http://userid@example.com:8080/", - "http://userid:password@example.com", - "http://userid:password@example.com/", - "http://142.42.1.1/", - "http://142.42.1.1:8080/", - "http://➡.ws/䨹", - "http://âŚ.ws", - "http://âŚ.ws/", - "http://foo.com/blah_(wikipedia)#cite-1", - "http://foo.com/blah_(wikipedia)_blah#cite-1", - "http://foo.com/unicode_(✪)_in_parens", - "http://foo.com/(something)?after=parens", - "http://âş.damowmow.com/a", - "http://code.google.com/events/#&product=browser", - "http://j.mp", - "ftp://foo.bar/baz", - "http://foo.bar/?q=Test%20URL-encoded%20stuff", - "http://مثال.إختبار", - "http://äľ‹ĺ­.测试", - "http://उदाहरण.परीक्षा", - "http://-.~_!$&'()*+,;=:%40:80%2f::::::@example.com", - "http://1337.net", - "http://a.b-c.de", - "http://223.255.255.254", - } - - for num, tt := range cases { - got := strings.TrimSpace(StripURL(tt)) - if len(got) != 0 { - t.Errorf("case %d: unable to match %q", num, tt) - } - } - - cases = []string{ - "http://", - "http://.", - "http://..", - "http://../", - "http://?", - "http://??", - "http://??/", - "http://#", - "http://##", - "http://##/", - "http://foo.bar?q=Spaces should be encoded", - "//", - "//a", - "///a", - "///", - "http:///a", - "foo.com", - "rdar://1234", - "h://test", - "http:// shouldfail.com", - ":// should fail", - "http://foo.bar/foo(bar)baz quux", - "ftps://foo.bar/", - //"http://-error-.invalid/", - //"http://a.b--c.de/", - //"http://-a.b.co", - //"http://a.b-.co", - //"http://0.0.0.0", - //"http://10.1.1.0", - //"http://10.1.1.255", - //"http://224.1.1.1", - //"http://1.1.1.1.1", - //"http://123.123.123", - //"http://3628126748", - "http://.www.foo.bar/", - //"http://www.foo.bar./", - "http://.www.foo.bar./", - //"http://10.1.1.1", - } - - for num, tt := range cases { - got := strings.TrimSpace(StripURL(tt)) - if len(got) == 0 { - t.Errorf("case %d: incorrect match %q", num, tt) - } - } -} diff --git a/vendor/github.com/client9/misspell/words_test.go b/vendor/github.com/client9/misspell/words_test.go deleted file mode 100644 index 31fcf2846..000000000 --- a/vendor/github.com/client9/misspell/words_test.go +++ /dev/null @@ -1,35 +0,0 @@ -package misspell - -import ( - "sort" - "testing" -) - -type sortByLen []string - -func (a sortByLen) Len() int { return len(a) } -func (a sortByLen) Swap(i, j int) { a[i], a[j] = a[j], a[i] } -func (a sortByLen) Less(i, j int) bool { - if len(a[i]) == len(a[j]) { - // if words are same size, then use - // normal alphabetical order - return a[i] < a[j] - } - // INVERTED -- biggest words first - return len(a[i]) > len(a[j]) -} - -func TestWordSort(t *testing.T) { - if len(DictMain)%2 == 1 { - t.Errorf("Dictionary is a not a multiple of 2") - } - words := make([]string, 0, len(DictMain)/2) - for i := 0; i < len(DictMain); i += 2 { - words = append(words, DictMain[i]) - } - if !sort.IsSorted(sortByLen(words)) { - t.Errorf("Words not sorted by len, by alpha!") - t.Errorf("Words.go is autogenerated -- do not edit.") - t.Errorf("File issue instead.") - } -} diff --git a/vendor/gopkg.in/yaml.v2/.travis.yml b/vendor/gopkg.in/yaml.v2/.travis.yml deleted file mode 100644 index 004172a2e..000000000 --- a/vendor/gopkg.in/yaml.v2/.travis.yml +++ /dev/null @@ -1,9 +0,0 @@ -language: go - -go: - - 1.4 - - 1.5 - - 1.6 - - tip - -go_import_path: gopkg.in/yaml.v2 diff --git a/vendor/gopkg.in/yaml.v2/NOTICE b/vendor/gopkg.in/yaml.v2/NOTICE new file mode 100644 index 000000000..866d74a7a --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/NOTICE @@ -0,0 +1,13 @@ +Copyright 2011-2016 Canonical Ltd. + +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/gopkg.in/yaml.v2/README.md b/vendor/gopkg.in/yaml.v2/README.md deleted file mode 100644 index 7a512d67c..000000000 --- a/vendor/gopkg.in/yaml.v2/README.md +++ /dev/null @@ -1,133 +0,0 @@ -# YAML support for the Go language - -Introduction ------------- - -The yaml package enables Go programs to comfortably encode and decode YAML -values. It was developed within [Canonical](https://www.canonical.com) as -part of the [juju](https://juju.ubuntu.com) project, and is based on a -pure Go port of the well-known [libyaml](http://pyyaml.org/wiki/LibYAML) -C library to parse and generate YAML data quickly and reliably. - -Compatibility -------------- - -The yaml package supports most of YAML 1.1 and 1.2, including support for -anchors, tags, map merging, etc. Multi-document unmarshalling is not yet -implemented, and base-60 floats from YAML 1.1 are purposefully not -supported since they're a poor design and are gone in YAML 1.2. - -Installation and usage ----------------------- - -The import path for the package is *gopkg.in/yaml.v2*. - -To install it, run: - - go get gopkg.in/yaml.v2 - -API documentation ------------------ - -If opened in a browser, the import path itself leads to the API documentation: - - * [https://gopkg.in/yaml.v2](https://gopkg.in/yaml.v2) - -API stability -------------- - -The package API for yaml v2 will remain stable as described in [gopkg.in](https://gopkg.in). - - -License -------- - -The yaml package is licensed under the Apache License 2.0. Please see the LICENSE file for details. - - -Example -------- - -Some more examples can be found in the "examples" folder. - -```Go -package main - -import ( - "fmt" - "log" - - "gopkg.in/yaml.v2" -) - -var data = ` -a: Easy! -b: - c: 2 - d: [3, 4] -` - -type T struct { - A string - B struct { - RenamedC int `yaml:"c"` - D []int `yaml:",flow"` - } -} - -func main() { - t := T{} - - err := yaml.Unmarshal([]byte(data), &t) - if err != nil { - log.Fatalf("error: %v", err) - } - fmt.Printf("--- t:\n%v\n\n", t) - - d, err := yaml.Marshal(&t) - if err != nil { - log.Fatalf("error: %v", err) - } - fmt.Printf("--- t dump:\n%s\n\n", string(d)) - - m := make(map[interface{}]interface{}) - - err = yaml.Unmarshal([]byte(data), &m) - if err != nil { - log.Fatalf("error: %v", err) - } - fmt.Printf("--- m:\n%v\n\n", m) - - d, err = yaml.Marshal(&m) - if err != nil { - log.Fatalf("error: %v", err) - } - fmt.Printf("--- m dump:\n%s\n\n", string(d)) -} -``` - -This example will generate the following output: - -``` ---- t: -{Easy! {2 [3 4]}} - ---- t dump: -a: Easy! -b: - c: 2 - d: [3, 4] - - ---- m: -map[a:Easy! b:map[c:2 d:[3 4]]] - ---- m dump: -a: Easy! -b: - c: 2 - d: - - 3 - - 4 -``` - diff --git a/vendor/gopkg.in/yaml.v2/apic.go b/vendor/gopkg.in/yaml.v2/apic.go index 95ec014e8..1f7e87e67 100644 --- a/vendor/gopkg.in/yaml.v2/apic.go +++ b/vendor/gopkg.in/yaml.v2/apic.go @@ -2,7 +2,6 @@ package yaml import ( "io" - "os" ) func yaml_insert_token(parser *yaml_parser_t, pos int, token *yaml_token_t) { @@ -48,9 +47,9 @@ func yaml_string_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err return n, nil } -// File read handler. -func yaml_file_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) { - return parser.input_file.Read(buffer) +// Reader read handler. +func yaml_reader_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) { + return parser.input_reader.Read(buffer) } // Set a string input. @@ -64,12 +63,12 @@ func yaml_parser_set_input_string(parser *yaml_parser_t, input []byte) { } // Set a file input. -func yaml_parser_set_input_file(parser *yaml_parser_t, file *os.File) { +func yaml_parser_set_input_reader(parser *yaml_parser_t, r io.Reader) { if parser.read_handler != nil { panic("must set the input source only once") } - parser.read_handler = yaml_file_read_handler - parser.input_file = file + parser.read_handler = yaml_reader_read_handler + parser.input_reader = r } // Set the source encoding. @@ -81,14 +80,13 @@ func yaml_parser_set_encoding(parser *yaml_parser_t, encoding yaml_encoding_t) { } // Create a new emitter object. -func yaml_emitter_initialize(emitter *yaml_emitter_t) bool { +func yaml_emitter_initialize(emitter *yaml_emitter_t) { *emitter = yaml_emitter_t{ buffer: make([]byte, output_buffer_size), raw_buffer: make([]byte, 0, output_raw_buffer_size), states: make([]yaml_emitter_state_t, 0, initial_stack_size), events: make([]yaml_event_t, 0, initial_queue_size), } - return true } // Destroy an emitter object. @@ -102,9 +100,10 @@ func yaml_string_write_handler(emitter *yaml_emitter_t, buffer []byte) error { return nil } -// File write handler. -func yaml_file_write_handler(emitter *yaml_emitter_t, buffer []byte) error { - _, err := emitter.output_file.Write(buffer) +// yaml_writer_write_handler uses emitter.output_writer to write the +// emitted text. +func yaml_writer_write_handler(emitter *yaml_emitter_t, buffer []byte) error { + _, err := emitter.output_writer.Write(buffer) return err } @@ -118,12 +117,12 @@ func yaml_emitter_set_output_string(emitter *yaml_emitter_t, output_buffer *[]by } // Set a file output. -func yaml_emitter_set_output_file(emitter *yaml_emitter_t, file io.Writer) { +func yaml_emitter_set_output_writer(emitter *yaml_emitter_t, w io.Writer) { if emitter.write_handler != nil { panic("must set the output target only once") } - emitter.write_handler = yaml_file_write_handler - emitter.output_file = file + emitter.write_handler = yaml_writer_write_handler + emitter.output_writer = w } // Set the output encoding. @@ -252,41 +251,41 @@ func yaml_emitter_set_break(emitter *yaml_emitter_t, line_break yaml_break_t) { // // Create STREAM-START. -func yaml_stream_start_event_initialize(event *yaml_event_t, encoding yaml_encoding_t) bool { +func yaml_stream_start_event_initialize(event *yaml_event_t, encoding yaml_encoding_t) { *event = yaml_event_t{ typ: yaml_STREAM_START_EVENT, encoding: encoding, } - return true } // Create STREAM-END. -func yaml_stream_end_event_initialize(event *yaml_event_t) bool { +func yaml_stream_end_event_initialize(event *yaml_event_t) { *event = yaml_event_t{ typ: yaml_STREAM_END_EVENT, } - return true } // Create DOCUMENT-START. -func yaml_document_start_event_initialize(event *yaml_event_t, version_directive *yaml_version_directive_t, - tag_directives []yaml_tag_directive_t, implicit bool) bool { +func yaml_document_start_event_initialize( + event *yaml_event_t, + version_directive *yaml_version_directive_t, + tag_directives []yaml_tag_directive_t, + implicit bool, +) { *event = yaml_event_t{ typ: yaml_DOCUMENT_START_EVENT, version_directive: version_directive, tag_directives: tag_directives, implicit: implicit, } - return true } // Create DOCUMENT-END. -func yaml_document_end_event_initialize(event *yaml_event_t, implicit bool) bool { +func yaml_document_end_event_initialize(event *yaml_event_t, implicit bool) { *event = yaml_event_t{ typ: yaml_DOCUMENT_END_EVENT, implicit: implicit, } - return true } ///* @@ -348,7 +347,7 @@ func yaml_sequence_end_event_initialize(event *yaml_event_t) bool { } // Create MAPPING-START. -func yaml_mapping_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_mapping_style_t) bool { +func yaml_mapping_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_mapping_style_t) { *event = yaml_event_t{ typ: yaml_MAPPING_START_EVENT, anchor: anchor, @@ -356,15 +355,13 @@ func yaml_mapping_start_event_initialize(event *yaml_event_t, anchor, tag []byte implicit: implicit, style: yaml_style_t(style), } - return true } // Create MAPPING-END. -func yaml_mapping_end_event_initialize(event *yaml_event_t) bool { +func yaml_mapping_end_event_initialize(event *yaml_event_t) { *event = yaml_event_t{ typ: yaml_MAPPING_END_EVENT, } - return true } // Destroy an event object. @@ -471,7 +468,7 @@ func yaml_event_delete(event *yaml_event_t) { // } context // tag_directive *yaml_tag_directive_t // -// context.error = YAML_NO_ERROR // Eliminate a compliler warning. +// context.error = YAML_NO_ERROR // Eliminate a compiler warning. // // assert(document) // Non-NULL document object is expected. // diff --git a/vendor/gopkg.in/yaml.v2/decode.go b/vendor/gopkg.in/yaml.v2/decode.go index db1f5f206..e4e56e28e 100644 --- a/vendor/gopkg.in/yaml.v2/decode.go +++ b/vendor/gopkg.in/yaml.v2/decode.go @@ -4,6 +4,7 @@ import ( "encoding" "encoding/base64" "fmt" + "io" "math" "reflect" "strconv" @@ -22,19 +23,22 @@ type node struct { kind int line, column int tag string - value string - implicit bool - children []*node - anchors map[string]*node + // For an alias node, alias holds the resolved alias. + alias *node + value string + implicit bool + children []*node + anchors map[string]*node } // ---------------------------------------------------------------------------- // Parser, produces a node tree out of a libyaml event stream. type parser struct { - parser yaml_parser_t - event yaml_event_t - doc *node + parser yaml_parser_t + event yaml_event_t + doc *node + doneInit bool } func newParser(b []byte) *parser { @@ -42,21 +46,30 @@ func newParser(b []byte) *parser { if !yaml_parser_initialize(&p.parser) { panic("failed to initialize YAML emitter") } - if len(b) == 0 { b = []byte{'\n'} } - yaml_parser_set_input_string(&p.parser, b) - - p.skip() - if p.event.typ != yaml_STREAM_START_EVENT { - panic("expected stream start event, got " + strconv.Itoa(int(p.event.typ))) - } - p.skip() return &p } +func newParserFromReader(r io.Reader) *parser { + p := parser{} + if !yaml_parser_initialize(&p.parser) { + panic("failed to initialize YAML emitter") + } + yaml_parser_set_input_reader(&p.parser, r) + return &p +} + +func (p *parser) init() { + if p.doneInit { + return + } + p.expect(yaml_STREAM_START_EVENT) + p.doneInit = true +} + func (p *parser) destroy() { if p.event.typ != yaml_NO_EVENT { yaml_event_delete(&p.event) @@ -64,16 +77,35 @@ func (p *parser) destroy() { yaml_parser_delete(&p.parser) } -func (p *parser) skip() { - if p.event.typ != yaml_NO_EVENT { - if p.event.typ == yaml_STREAM_END_EVENT { - failf("attempted to go past the end of stream; corrupted value?") +// expect consumes an event from the event stream and +// checks that it's of the expected type. +func (p *parser) expect(e yaml_event_type_t) { + if p.event.typ == yaml_NO_EVENT { + if !yaml_parser_parse(&p.parser, &p.event) { + p.fail() } - yaml_event_delete(&p.event) + } + if p.event.typ == yaml_STREAM_END_EVENT { + failf("attempted to go past the end of stream; corrupted value?") + } + if p.event.typ != e { + p.parser.problem = fmt.Sprintf("expected %s event but got %s", e, p.event.typ) + p.fail() + } + yaml_event_delete(&p.event) + p.event.typ = yaml_NO_EVENT +} + +// peek peeks at the next event in the event stream, +// puts the results into p.event and returns the event type. +func (p *parser) peek() yaml_event_type_t { + if p.event.typ != yaml_NO_EVENT { + return p.event.typ } if !yaml_parser_parse(&p.parser, &p.event) { p.fail() } + return p.event.typ } func (p *parser) fail() { @@ -81,6 +113,10 @@ func (p *parser) fail() { var line int if p.parser.problem_mark.line != 0 { line = p.parser.problem_mark.line + // Scanner errors don't iterate line before returning error + if p.parser.error == yaml_SCANNER_ERROR { + line++ + } } else if p.parser.context_mark.line != 0 { line = p.parser.context_mark.line } @@ -103,7 +139,8 @@ func (p *parser) anchor(n *node, anchor []byte) { } func (p *parser) parse() *node { - switch p.event.typ { + p.init() + switch p.peek() { case yaml_SCALAR_EVENT: return p.scalar() case yaml_ALIAS_EVENT: @@ -118,7 +155,7 @@ func (p *parser) parse() *node { // Happens when attempting to decode an empty buffer. return nil default: - panic("attempted to parse unknown event: " + strconv.Itoa(int(p.event.typ))) + panic("attempted to parse unknown event: " + p.event.typ.String()) } } @@ -134,19 +171,20 @@ func (p *parser) document() *node { n := p.node(documentNode) n.anchors = make(map[string]*node) p.doc = n - p.skip() + p.expect(yaml_DOCUMENT_START_EVENT) n.children = append(n.children, p.parse()) - if p.event.typ != yaml_DOCUMENT_END_EVENT { - panic("expected end of document event but got " + strconv.Itoa(int(p.event.typ))) - } - p.skip() + p.expect(yaml_DOCUMENT_END_EVENT) return n } func (p *parser) alias() *node { n := p.node(aliasNode) n.value = string(p.event.anchor) - p.skip() + n.alias = p.doc.anchors[n.value] + if n.alias == nil { + failf("unknown anchor '%s' referenced", n.value) + } + p.expect(yaml_ALIAS_EVENT) return n } @@ -156,29 +194,29 @@ func (p *parser) scalar() *node { n.tag = string(p.event.tag) n.implicit = p.event.implicit p.anchor(n, p.event.anchor) - p.skip() + p.expect(yaml_SCALAR_EVENT) return n } func (p *parser) sequence() *node { n := p.node(sequenceNode) p.anchor(n, p.event.anchor) - p.skip() - for p.event.typ != yaml_SEQUENCE_END_EVENT { + p.expect(yaml_SEQUENCE_START_EVENT) + for p.peek() != yaml_SEQUENCE_END_EVENT { n.children = append(n.children, p.parse()) } - p.skip() + p.expect(yaml_SEQUENCE_END_EVENT) return n } func (p *parser) mapping() *node { n := p.node(mappingNode) p.anchor(n, p.event.anchor) - p.skip() - for p.event.typ != yaml_MAPPING_END_EVENT { + p.expect(yaml_MAPPING_START_EVENT) + for p.peek() != yaml_MAPPING_END_EVENT { n.children = append(n.children, p.parse(), p.parse()) } - p.skip() + p.expect(yaml_MAPPING_END_EVENT) return n } @@ -187,7 +225,7 @@ func (p *parser) mapping() *node { type decoder struct { doc *node - aliases map[string]bool + aliases map[*node]bool mapType reflect.Type terrors []string strict bool @@ -198,11 +236,13 @@ var ( durationType = reflect.TypeOf(time.Duration(0)) defaultMapType = reflect.TypeOf(map[interface{}]interface{}{}) ifaceType = defaultMapType.Elem() + timeType = reflect.TypeOf(time.Time{}) + ptrTimeType = reflect.TypeOf(&time.Time{}) ) func newDecoder(strict bool) *decoder { d := &decoder{mapType: defaultMapType, strict: strict} - d.aliases = make(map[string]bool) + d.aliases = make(map[*node]bool) return d } @@ -251,7 +291,7 @@ func (d *decoder) callUnmarshaler(n *node, u Unmarshaler) (good bool) { // // If n holds a null value, prepare returns before doing anything. func (d *decoder) prepare(n *node, out reflect.Value) (newout reflect.Value, unmarshaled, good bool) { - if n.tag == yaml_NULL_TAG || n.kind == scalarNode && n.tag == "" && (n.value == "null" || n.value == "" && n.implicit) { + if n.tag == yaml_NULL_TAG || n.kind == scalarNode && n.tag == "" && (n.value == "null" || n.value == "~" || n.value == "" && n.implicit) { return out, false, false } again := true @@ -308,16 +348,13 @@ func (d *decoder) document(n *node, out reflect.Value) (good bool) { } func (d *decoder) alias(n *node, out reflect.Value) (good bool) { - an, ok := d.doc.anchors[n.value] - if !ok { - failf("unknown anchor '%s' referenced", n.value) - } - if d.aliases[n.value] { + if d.aliases[n] { + // TODO this could actually be allowed in some circumstances. failf("anchor '%s' value contains itself", n.value) } - d.aliases[n.value] = true - good = d.unmarshal(an, out) - delete(d.aliases, n.value) + d.aliases[n] = true + good = d.unmarshal(n.alias, out) + delete(d.aliases, n) return good } @@ -329,7 +366,7 @@ func resetMap(out reflect.Value) { } } -func (d *decoder) scalar(n *node, out reflect.Value) (good bool) { +func (d *decoder) scalar(n *node, out reflect.Value) bool { var tag string var resolved interface{} if n.tag == "" && !n.implicit { @@ -353,9 +390,26 @@ func (d *decoder) scalar(n *node, out reflect.Value) (good bool) { } return true } - if s, ok := resolved.(string); ok && out.CanAddr() { - if u, ok := out.Addr().Interface().(encoding.TextUnmarshaler); ok { - err := u.UnmarshalText([]byte(s)) + if resolvedv := reflect.ValueOf(resolved); out.Type() == resolvedv.Type() { + // We've resolved to exactly the type we want, so use that. + out.Set(resolvedv) + return true + } + // Perhaps we can use the value as a TextUnmarshaler to + // set its value. + if out.CanAddr() { + u, ok := out.Addr().Interface().(encoding.TextUnmarshaler) + if ok { + var text []byte + if tag == yaml_BINARY_TAG { + text = []byte(resolved.(string)) + } else { + // We let any value be unmarshaled into TextUnmarshaler. + // That might be more lax than we'd like, but the + // TextUnmarshaler itself should bowl out any dubious values. + text = []byte(n.value) + } + err := u.UnmarshalText(text) if err != nil { fail(err) } @@ -366,46 +420,54 @@ func (d *decoder) scalar(n *node, out reflect.Value) (good bool) { case reflect.String: if tag == yaml_BINARY_TAG { out.SetString(resolved.(string)) - good = true - } else if resolved != nil { + return true + } + if resolved != nil { out.SetString(n.value) - good = true + return true } case reflect.Interface: if resolved == nil { out.Set(reflect.Zero(out.Type())) + } else if tag == yaml_TIMESTAMP_TAG { + // It looks like a timestamp but for backward compatibility + // reasons we set it as a string, so that code that unmarshals + // timestamp-like values into interface{} will continue to + // see a string and not a time.Time. + // TODO(v3) Drop this. + out.Set(reflect.ValueOf(n.value)) } else { out.Set(reflect.ValueOf(resolved)) } - good = true + return true case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: switch resolved := resolved.(type) { case int: if !out.OverflowInt(int64(resolved)) { out.SetInt(int64(resolved)) - good = true + return true } case int64: if !out.OverflowInt(resolved) { out.SetInt(resolved) - good = true + return true } case uint64: if resolved <= math.MaxInt64 && !out.OverflowInt(int64(resolved)) { out.SetInt(int64(resolved)) - good = true + return true } case float64: if resolved <= math.MaxInt64 && !out.OverflowInt(int64(resolved)) { out.SetInt(int64(resolved)) - good = true + return true } case string: if out.Type() == durationType { d, err := time.ParseDuration(resolved) if err == nil { out.SetInt(int64(d)) - good = true + return true } } } @@ -414,44 +476,49 @@ func (d *decoder) scalar(n *node, out reflect.Value) (good bool) { case int: if resolved >= 0 && !out.OverflowUint(uint64(resolved)) { out.SetUint(uint64(resolved)) - good = true + return true } case int64: if resolved >= 0 && !out.OverflowUint(uint64(resolved)) { out.SetUint(uint64(resolved)) - good = true + return true } case uint64: if !out.OverflowUint(uint64(resolved)) { out.SetUint(uint64(resolved)) - good = true + return true } case float64: if resolved <= math.MaxUint64 && !out.OverflowUint(uint64(resolved)) { out.SetUint(uint64(resolved)) - good = true + return true } } case reflect.Bool: switch resolved := resolved.(type) { case bool: out.SetBool(resolved) - good = true + return true } case reflect.Float32, reflect.Float64: switch resolved := resolved.(type) { case int: out.SetFloat(float64(resolved)) - good = true + return true case int64: out.SetFloat(float64(resolved)) - good = true + return true case uint64: out.SetFloat(float64(resolved)) - good = true + return true case float64: out.SetFloat(resolved) - good = true + return true + } + case reflect.Struct: + if resolvedv := reflect.ValueOf(resolved); out.Type() == resolvedv.Type() { + out.Set(resolvedv) + return true } case reflect.Ptr: if out.Type().Elem() == reflect.TypeOf(resolved) { @@ -459,13 +526,11 @@ func (d *decoder) scalar(n *node, out reflect.Value) (good bool) { elem := reflect.New(out.Type().Elem()) elem.Elem().Set(reflect.ValueOf(resolved)) out.Set(elem) - good = true + return true } } - if !good { - d.terror(n, tag, out) - } - return good + d.terror(n, tag, out) + return false } func settableValueOf(i interface{}) reflect.Value { @@ -482,6 +547,10 @@ func (d *decoder) sequence(n *node, out reflect.Value) (good bool) { switch out.Kind() { case reflect.Slice: out.Set(reflect.MakeSlice(out.Type(), l, l)) + case reflect.Array: + if l != out.Len() { + failf("invalid array: want %d elements but got %d", out.Len(), l) + } case reflect.Interface: // No type hints. Will have to use a generic sequence. iface = out @@ -500,7 +569,9 @@ func (d *decoder) sequence(n *node, out reflect.Value) (good bool) { j++ } } - out.Set(out.Slice(0, j)) + if out.Kind() != reflect.Array { + out.Set(out.Slice(0, j)) + } if iface.IsValid() { iface.Set(out) } @@ -561,7 +632,7 @@ func (d *decoder) mapping(n *node, out reflect.Value) (good bool) { } e := reflect.New(et).Elem() if d.unmarshal(n.children[i+1], e) { - out.SetMapIndex(k, e) + d.setMapIndex(n.children[i+1], out, k, e) } } } @@ -569,6 +640,14 @@ func (d *decoder) mapping(n *node, out reflect.Value) (good bool) { return true } +func (d *decoder) setMapIndex(n *node, out, k, v reflect.Value) { + if d.strict && out.MapIndex(k) != zeroValue { + d.terrors = append(d.terrors, fmt.Sprintf("line %d: key %#v already set in map", n.line+1, k.Interface())) + return + } + out.SetMapIndex(k, v) +} + func (d *decoder) mappingSlice(n *node, out reflect.Value) (good bool) { outt := out.Type() if outt.Elem() != mapItemType { @@ -616,6 +695,10 @@ func (d *decoder) mappingStruct(n *node, out reflect.Value) (good bool) { elemType = inlineMap.Type().Elem() } + var doneFields []bool + if d.strict { + doneFields = make([]bool, len(sinfo.FieldsList)) + } for i := 0; i < l; i += 2 { ni := n.children[i] if isMerge(ni) { @@ -626,6 +709,13 @@ func (d *decoder) mappingStruct(n *node, out reflect.Value) (good bool) { continue } if info, ok := sinfo.FieldsMap[name.String()]; ok { + if d.strict { + if doneFields[info.Id] { + d.terrors = append(d.terrors, fmt.Sprintf("line %d: field %s already set in type %s", ni.line+1, name.String(), out.Type())) + continue + } + doneFields[info.Id] = true + } var field reflect.Value if info.Inline == nil { field = out.Field(info.Num) @@ -639,9 +729,9 @@ func (d *decoder) mappingStruct(n *node, out reflect.Value) (good bool) { } value := reflect.New(elemType).Elem() d.unmarshal(n.children[i+1], value) - inlineMap.SetMapIndex(name, value) + d.setMapIndex(n.children[i+1], inlineMap, name, value) } else if d.strict { - d.terrors = append(d.terrors, fmt.Sprintf("line %d: field %s not found in struct %s", n.line+1, name.String(), out.Type())) + d.terrors = append(d.terrors, fmt.Sprintf("line %d: field %s not found in type %s", ni.line+1, name.String(), out.Type())) } } return true diff --git a/vendor/gopkg.in/yaml.v2/decode_test.go b/vendor/gopkg.in/yaml.v2/decode_test.go deleted file mode 100644 index 713b1ee9c..000000000 --- a/vendor/gopkg.in/yaml.v2/decode_test.go +++ /dev/null @@ -1,1017 +0,0 @@ -package yaml_test - -import ( - "errors" - . "gopkg.in/check.v1" - "gopkg.in/yaml.v2" - "math" - "net" - "reflect" - "strings" - "time" -) - -var unmarshalIntTest = 123 - -var unmarshalTests = []struct { - data string - value interface{} -}{ - { - "", - &struct{}{}, - }, { - "{}", &struct{}{}, - }, { - "v: hi", - map[string]string{"v": "hi"}, - }, { - "v: hi", map[string]interface{}{"v": "hi"}, - }, { - "v: true", - map[string]string{"v": "true"}, - }, { - "v: true", - map[string]interface{}{"v": true}, - }, { - "v: 10", - map[string]interface{}{"v": 10}, - }, { - "v: 0b10", - map[string]interface{}{"v": 2}, - }, { - "v: 0xA", - map[string]interface{}{"v": 10}, - }, { - "v: 4294967296", - map[string]int64{"v": 4294967296}, - }, { - "v: 0.1", - map[string]interface{}{"v": 0.1}, - }, { - "v: .1", - map[string]interface{}{"v": 0.1}, - }, { - "v: .Inf", - map[string]interface{}{"v": math.Inf(+1)}, - }, { - "v: -.Inf", - map[string]interface{}{"v": math.Inf(-1)}, - }, { - "v: -10", - map[string]interface{}{"v": -10}, - }, { - "v: -.1", - map[string]interface{}{"v": -0.1}, - }, - - // Simple values. - { - "123", - &unmarshalIntTest, - }, - - // Floats from spec - { - "canonical: 6.8523e+5", - map[string]interface{}{"canonical": 6.8523e+5}, - }, { - "expo: 685.230_15e+03", - map[string]interface{}{"expo": 685.23015e+03}, - }, { - "fixed: 685_230.15", - map[string]interface{}{"fixed": 685230.15}, - }, { - "neginf: -.inf", - map[string]interface{}{"neginf": math.Inf(-1)}, - }, { - "fixed: 685_230.15", - map[string]float64{"fixed": 685230.15}, - }, - //{"sexa: 190:20:30.15", map[string]interface{}{"sexa": 0}}, // Unsupported - //{"notanum: .NaN", map[string]interface{}{"notanum": math.NaN()}}, // Equality of NaN fails. - - // Bools from spec - { - "canonical: y", - map[string]interface{}{"canonical": true}, - }, { - "answer: NO", - map[string]interface{}{"answer": false}, - }, { - "logical: True", - map[string]interface{}{"logical": true}, - }, { - "option: on", - map[string]interface{}{"option": true}, - }, { - "option: on", - map[string]bool{"option": true}, - }, - // Ints from spec - { - "canonical: 685230", - map[string]interface{}{"canonical": 685230}, - }, { - "decimal: +685_230", - map[string]interface{}{"decimal": 685230}, - }, { - "octal: 02472256", - map[string]interface{}{"octal": 685230}, - }, { - "hexa: 0x_0A_74_AE", - map[string]interface{}{"hexa": 685230}, - }, { - "bin: 0b1010_0111_0100_1010_1110", - map[string]interface{}{"bin": 685230}, - }, { - "bin: -0b101010", - map[string]interface{}{"bin": -42}, - }, { - "decimal: +685_230", - map[string]int{"decimal": 685230}, - }, - - //{"sexa: 190:20:30", map[string]interface{}{"sexa": 0}}, // Unsupported - - // Nulls from spec - { - "empty:", - map[string]interface{}{"empty": nil}, - }, { - "canonical: ~", - map[string]interface{}{"canonical": nil}, - }, { - "english: null", - map[string]interface{}{"english": nil}, - }, { - "~: null key", - map[interface{}]string{nil: "null key"}, - }, { - "empty:", - map[string]*bool{"empty": nil}, - }, - - // Flow sequence - { - "seq: [A,B]", - map[string]interface{}{"seq": []interface{}{"A", "B"}}, - }, { - "seq: [A,B,C,]", - map[string][]string{"seq": []string{"A", "B", "C"}}, - }, { - "seq: [A,1,C]", - map[string][]string{"seq": []string{"A", "1", "C"}}, - }, { - "seq: [A,1,C]", - map[string][]int{"seq": []int{1}}, - }, { - "seq: [A,1,C]", - map[string]interface{}{"seq": []interface{}{"A", 1, "C"}}, - }, - // Block sequence - { - "seq:\n - A\n - B", - map[string]interface{}{"seq": []interface{}{"A", "B"}}, - }, { - "seq:\n - A\n - B\n - C", - map[string][]string{"seq": []string{"A", "B", "C"}}, - }, { - "seq:\n - A\n - 1\n - C", - map[string][]string{"seq": []string{"A", "1", "C"}}, - }, { - "seq:\n - A\n - 1\n - C", - map[string][]int{"seq": []int{1}}, - }, { - "seq:\n - A\n - 1\n - C", - map[string]interface{}{"seq": []interface{}{"A", 1, "C"}}, - }, - - // Literal block scalar - { - "scalar: | # Comment\n\n literal\n\n \ttext\n\n", - map[string]string{"scalar": "\nliteral\n\n\ttext\n"}, - }, - - // Folded block scalar - { - "scalar: > # Comment\n\n folded\n line\n \n next\n line\n * one\n * two\n\n last\n line\n\n", - map[string]string{"scalar": "\nfolded line\nnext line\n * one\n * two\n\nlast line\n"}, - }, - - // Map inside interface with no type hints. - { - "a: {b: c}", - map[interface{}]interface{}{"a": map[interface{}]interface{}{"b": "c"}}, - }, - - // Structs and type conversions. - { - "hello: world", - &struct{ Hello string }{"world"}, - }, { - "a: {b: c}", - &struct{ A struct{ B string } }{struct{ B string }{"c"}}, - }, { - "a: {b: c}", - &struct{ A *struct{ B string } }{&struct{ B string }{"c"}}, - }, { - "a: {b: c}", - &struct{ A map[string]string }{map[string]string{"b": "c"}}, - }, { - "a: {b: c}", - &struct{ A *map[string]string }{&map[string]string{"b": "c"}}, - }, { - "a:", - &struct{ A map[string]string }{}, - }, { - "a: 1", - &struct{ A int }{1}, - }, { - "a: 1", - &struct{ A float64 }{1}, - }, { - "a: 1.0", - &struct{ A int }{1}, - }, { - "a: 1.0", - &struct{ A uint }{1}, - }, { - "a: [1, 2]", - &struct{ A []int }{[]int{1, 2}}, - }, { - "a: 1", - &struct{ B int }{0}, - }, { - "a: 1", - &struct { - B int "a" - }{1}, - }, { - "a: y", - &struct{ A bool }{true}, - }, - - // Some cross type conversions - { - "v: 42", - map[string]uint{"v": 42}, - }, { - "v: -42", - map[string]uint{}, - }, { - "v: 4294967296", - map[string]uint64{"v": 4294967296}, - }, { - "v: -4294967296", - map[string]uint64{}, - }, - - // int - { - "int_max: 2147483647", - map[string]int{"int_max": math.MaxInt32}, - }, - { - "int_min: -2147483648", - map[string]int{"int_min": math.MinInt32}, - }, - { - "int_overflow: 9223372036854775808", // math.MaxInt64 + 1 - map[string]int{}, - }, - - // int64 - { - "int64_max: 9223372036854775807", - map[string]int64{"int64_max": math.MaxInt64}, - }, - { - "int64_max_base2: 0b111111111111111111111111111111111111111111111111111111111111111", - map[string]int64{"int64_max_base2": math.MaxInt64}, - }, - { - "int64_min: -9223372036854775808", - map[string]int64{"int64_min": math.MinInt64}, - }, - { - "int64_neg_base2: -0b111111111111111111111111111111111111111111111111111111111111111", - map[string]int64{"int64_neg_base2": -math.MaxInt64}, - }, - { - "int64_overflow: 9223372036854775808", // math.MaxInt64 + 1 - map[string]int64{}, - }, - - // uint - { - "uint_min: 0", - map[string]uint{"uint_min": 0}, - }, - { - "uint_max: 4294967295", - map[string]uint{"uint_max": math.MaxUint32}, - }, - { - "uint_underflow: -1", - map[string]uint{}, - }, - - // uint64 - { - "uint64_min: 0", - map[string]uint{"uint64_min": 0}, - }, - { - "uint64_max: 18446744073709551615", - map[string]uint64{"uint64_max": math.MaxUint64}, - }, - { - "uint64_max_base2: 0b1111111111111111111111111111111111111111111111111111111111111111", - map[string]uint64{"uint64_max_base2": math.MaxUint64}, - }, - { - "uint64_maxint64: 9223372036854775807", - map[string]uint64{"uint64_maxint64": math.MaxInt64}, - }, - { - "uint64_underflow: -1", - map[string]uint64{}, - }, - - // float32 - { - "float32_max: 3.40282346638528859811704183484516925440e+38", - map[string]float32{"float32_max": math.MaxFloat32}, - }, - { - "float32_nonzero: 1.401298464324817070923729583289916131280e-45", - map[string]float32{"float32_nonzero": math.SmallestNonzeroFloat32}, - }, - { - "float32_maxuint64: 18446744073709551615", - map[string]float32{"float32_maxuint64": float32(math.MaxUint64)}, - }, - { - "float32_maxuint64+1: 18446744073709551616", - map[string]float32{"float32_maxuint64+1": float32(math.MaxUint64 + 1)}, - }, - - // float64 - { - "float64_max: 1.797693134862315708145274237317043567981e+308", - map[string]float64{"float64_max": math.MaxFloat64}, - }, - { - "float64_nonzero: 4.940656458412465441765687928682213723651e-324", - map[string]float64{"float64_nonzero": math.SmallestNonzeroFloat64}, - }, - { - "float64_maxuint64: 18446744073709551615", - map[string]float64{"float64_maxuint64": float64(math.MaxUint64)}, - }, - { - "float64_maxuint64+1: 18446744073709551616", - map[string]float64{"float64_maxuint64+1": float64(math.MaxUint64 + 1)}, - }, - - // Overflow cases. - { - "v: 4294967297", - map[string]int32{}, - }, { - "v: 128", - map[string]int8{}, - }, - - // Quoted values. - { - "'1': '\"2\"'", - map[interface{}]interface{}{"1": "\"2\""}, - }, { - "v:\n- A\n- 'B\n\n C'\n", - map[string][]string{"v": []string{"A", "B\nC"}}, - }, - - // Explicit tags. - { - "v: !!float '1.1'", - map[string]interface{}{"v": 1.1}, - }, { - "v: !!null ''", - map[string]interface{}{"v": nil}, - }, { - "%TAG !y! tag:yaml.org,2002:\n---\nv: !y!int '1'", - map[string]interface{}{"v": 1}, - }, - - // Non-specific tag (Issue #75) - { - "v: ! test", - map[string]interface{}{"v": "test"}, - }, - - // Anchors and aliases. - { - "a: &x 1\nb: &y 2\nc: *x\nd: *y\n", - &struct{ A, B, C, D int }{1, 2, 1, 2}, - }, { - "a: &a {c: 1}\nb: *a", - &struct { - A, B struct { - C int - } - }{struct{ C int }{1}, struct{ C int }{1}}, - }, { - "a: &a [1, 2]\nb: *a", - &struct{ B []int }{[]int{1, 2}}, - }, { - "b: *a\na: &a {c: 1}", - &struct { - A, B struct { - C int - } - }{struct{ C int }{1}, struct{ C int }{1}}, - }, - - // Bug #1133337 - { - "foo: ''", - map[string]*string{"foo": new(string)}, - }, { - "foo: null", - map[string]string{"foo": ""}, - }, { - "foo: null", - map[string]interface{}{"foo": nil}, - }, - - // Ignored field - { - "a: 1\nb: 2\n", - &struct { - A int - B int "-" - }{1, 0}, - }, - - // Bug #1191981 - { - "" + - "%YAML 1.1\n" + - "--- !!str\n" + - `"Generic line break (no glyph)\n\` + "\n" + - ` Generic line break (glyphed)\n\` + "\n" + - ` Line separator\u2028\` + "\n" + - ` Paragraph separator\u2029"` + "\n", - "" + - "Generic line break (no glyph)\n" + - "Generic line break (glyphed)\n" + - "Line separator\u2028Paragraph separator\u2029", - }, - - // Struct inlining - { - "a: 1\nb: 2\nc: 3\n", - &struct { - A int - C inlineB `yaml:",inline"` - }{1, inlineB{2, inlineC{3}}}, - }, - - // Map inlining - { - "a: 1\nb: 2\nc: 3\n", - &struct { - A int - C map[string]int `yaml:",inline"` - }{1, map[string]int{"b": 2, "c": 3}}, - }, - - // bug 1243827 - { - "a: -b_c", - map[string]interface{}{"a": "-b_c"}, - }, - { - "a: +b_c", - map[string]interface{}{"a": "+b_c"}, - }, - { - "a: 50cent_of_dollar", - map[string]interface{}{"a": "50cent_of_dollar"}, - }, - - // Duration - { - "a: 3s", - map[string]time.Duration{"a": 3 * time.Second}, - }, - - // Issue #24. - { - "a: ", - map[string]string{"a": ""}, - }, - - // Base 60 floats are obsolete and unsupported. - { - "a: 1:1\n", - map[string]string{"a": "1:1"}, - }, - - // Binary data. - { - "a: !!binary gIGC\n", - map[string]string{"a": "\x80\x81\x82"}, - }, { - "a: !!binary |\n " + strings.Repeat("kJCQ", 17) + "kJ\n CQ\n", - map[string]string{"a": strings.Repeat("\x90", 54)}, - }, { - "a: !!binary |\n " + strings.Repeat("A", 70) + "\n ==\n", - map[string]string{"a": strings.Repeat("\x00", 52)}, - }, - - // Ordered maps. - { - "{b: 2, a: 1, d: 4, c: 3, sub: {e: 5}}", - &yaml.MapSlice{{"b", 2}, {"a", 1}, {"d", 4}, {"c", 3}, {"sub", yaml.MapSlice{{"e", 5}}}}, - }, - - // Issue #39. - { - "a:\n b:\n c: d\n", - map[string]struct{ B interface{} }{"a": {map[interface{}]interface{}{"c": "d"}}}, - }, - - // Custom map type. - { - "a: {b: c}", - M{"a": M{"b": "c"}}, - }, - - // Support encoding.TextUnmarshaler. - { - "a: 1.2.3.4\n", - map[string]net.IP{"a": net.IPv4(1, 2, 3, 4)}, - }, - { - "a: 2015-02-24T18:19:39Z\n", - map[string]time.Time{"a": time.Unix(1424801979, 0).In(time.UTC)}, - }, - - // Encode empty lists as zero-length slices. - { - "a: []", - &struct{ A []int }{[]int{}}, - }, - - // UTF-16-LE - { - "\xff\xfe\xf1\x00o\x00\xf1\x00o\x00:\x00 \x00v\x00e\x00r\x00y\x00 \x00y\x00e\x00s\x00\n\x00", - M{"ñoño": "very yes"}, - }, - // UTF-16-LE with surrogate. - { - "\xff\xfe\xf1\x00o\x00\xf1\x00o\x00:\x00 \x00v\x00e\x00r\x00y\x00 \x00y\x00e\x00s\x00 \x00=\xd8\xd4\xdf\n\x00", - M{"ñoño": "very yes đźź”"}, - }, - - // UTF-16-BE - { - "\xfe\xff\x00\xf1\x00o\x00\xf1\x00o\x00:\x00 \x00v\x00e\x00r\x00y\x00 \x00y\x00e\x00s\x00\n", - M{"ñoño": "very yes"}, - }, - // UTF-16-BE with surrogate. - { - "\xfe\xff\x00\xf1\x00o\x00\xf1\x00o\x00:\x00 \x00v\x00e\x00r\x00y\x00 \x00y\x00e\x00s\x00 \xd8=\xdf\xd4\x00\n", - M{"ñoño": "very yes đźź”"}, - }, - - // YAML Float regex shouldn't match this - { - "a: 123456e1\n", - M{"a": "123456e1"}, - }, { - "a: 123456E1\n", - M{"a": "123456E1"}, - }, -} - -type M map[interface{}]interface{} - -type inlineB struct { - B int - inlineC `yaml:",inline"` -} - -type inlineC struct { - C int -} - -func (s *S) TestUnmarshal(c *C) { - for i, item := range unmarshalTests { - c.Logf("test %d: %q", i, item.data) - t := reflect.ValueOf(item.value).Type() - var value interface{} - switch t.Kind() { - case reflect.Map: - value = reflect.MakeMap(t).Interface() - case reflect.String: - value = reflect.New(t).Interface() - case reflect.Ptr: - value = reflect.New(t.Elem()).Interface() - default: - c.Fatalf("missing case for %s", t) - } - err := yaml.Unmarshal([]byte(item.data), value) - if _, ok := err.(*yaml.TypeError); !ok { - c.Assert(err, IsNil) - } - if t.Kind() == reflect.String { - c.Assert(*value.(*string), Equals, item.value) - } else { - c.Assert(value, DeepEquals, item.value) - } - } -} - -func (s *S) TestUnmarshalNaN(c *C) { - value := map[string]interface{}{} - err := yaml.Unmarshal([]byte("notanum: .NaN"), &value) - c.Assert(err, IsNil) - c.Assert(math.IsNaN(value["notanum"].(float64)), Equals, true) -} - -var unmarshalErrorTests = []struct { - data, error string -}{ - {"v: !!float 'error'", "yaml: cannot decode !!str `error` as a !!float"}, - {"v: [A,", "yaml: line 1: did not find expected node content"}, - {"v:\n- [A,", "yaml: line 2: did not find expected node content"}, - {"a: *b\n", "yaml: unknown anchor 'b' referenced"}, - {"a: &a\n b: *a\n", "yaml: anchor 'a' value contains itself"}, - {"value: -", "yaml: block sequence entries are not allowed in this context"}, - {"a: !!binary ==", "yaml: !!binary value contains invalid base64 data"}, - {"{[.]}", `yaml: invalid map key: \[\]interface \{\}\{"\."\}`}, - {"{{.}}", `yaml: invalid map key: map\[interface\ \{\}\]interface \{\}\{".":interface \{\}\(nil\)\}`}, - {"%TAG !%79! tag:yaml.org,2002:\n---\nv: !%79!int '1'", "yaml: did not find expected whitespace"}, -} - -func (s *S) TestUnmarshalErrors(c *C) { - for _, item := range unmarshalErrorTests { - var value interface{} - err := yaml.Unmarshal([]byte(item.data), &value) - c.Assert(err, ErrorMatches, item.error, Commentf("Partial unmarshal: %#v", value)) - } -} - -var unmarshalerTests = []struct { - data, tag string - value interface{} -}{ - {"_: {hi: there}", "!!map", map[interface{}]interface{}{"hi": "there"}}, - {"_: [1,A]", "!!seq", []interface{}{1, "A"}}, - {"_: 10", "!!int", 10}, - {"_: null", "!!null", nil}, - {`_: BAR!`, "!!str", "BAR!"}, - {`_: "BAR!"`, "!!str", "BAR!"}, - {"_: !!foo 'BAR!'", "!!foo", "BAR!"}, - {`_: ""`, "!!str", ""}, -} - -var unmarshalerResult = map[int]error{} - -type unmarshalerType struct { - value interface{} -} - -func (o *unmarshalerType) UnmarshalYAML(unmarshal func(v interface{}) error) error { - if err := unmarshal(&o.value); err != nil { - return err - } - if i, ok := o.value.(int); ok { - if result, ok := unmarshalerResult[i]; ok { - return result - } - } - return nil -} - -type unmarshalerPointer struct { - Field *unmarshalerType "_" -} - -type unmarshalerValue struct { - Field unmarshalerType "_" -} - -func (s *S) TestUnmarshalerPointerField(c *C) { - for _, item := range unmarshalerTests { - obj := &unmarshalerPointer{} - err := yaml.Unmarshal([]byte(item.data), obj) - c.Assert(err, IsNil) - if item.value == nil { - c.Assert(obj.Field, IsNil) - } else { - c.Assert(obj.Field, NotNil, Commentf("Pointer not initialized (%#v)", item.value)) - c.Assert(obj.Field.value, DeepEquals, item.value) - } - } -} - -func (s *S) TestUnmarshalerValueField(c *C) { - for _, item := range unmarshalerTests { - obj := &unmarshalerValue{} - err := yaml.Unmarshal([]byte(item.data), obj) - c.Assert(err, IsNil) - c.Assert(obj.Field, NotNil, Commentf("Pointer not initialized (%#v)", item.value)) - c.Assert(obj.Field.value, DeepEquals, item.value) - } -} - -func (s *S) TestUnmarshalerWholeDocument(c *C) { - obj := &unmarshalerType{} - err := yaml.Unmarshal([]byte(unmarshalerTests[0].data), obj) - c.Assert(err, IsNil) - value, ok := obj.value.(map[interface{}]interface{}) - c.Assert(ok, Equals, true, Commentf("value: %#v", obj.value)) - c.Assert(value["_"], DeepEquals, unmarshalerTests[0].value) -} - -func (s *S) TestUnmarshalerTypeError(c *C) { - unmarshalerResult[2] = &yaml.TypeError{[]string{"foo"}} - unmarshalerResult[4] = &yaml.TypeError{[]string{"bar"}} - defer func() { - delete(unmarshalerResult, 2) - delete(unmarshalerResult, 4) - }() - - type T struct { - Before int - After int - M map[string]*unmarshalerType - } - var v T - data := `{before: A, m: {abc: 1, def: 2, ghi: 3, jkl: 4}, after: B}` - err := yaml.Unmarshal([]byte(data), &v) - c.Assert(err, ErrorMatches, ""+ - "yaml: unmarshal errors:\n"+ - " line 1: cannot unmarshal !!str `A` into int\n"+ - " foo\n"+ - " bar\n"+ - " line 1: cannot unmarshal !!str `B` into int") - c.Assert(v.M["abc"], NotNil) - c.Assert(v.M["def"], IsNil) - c.Assert(v.M["ghi"], NotNil) - c.Assert(v.M["jkl"], IsNil) - - c.Assert(v.M["abc"].value, Equals, 1) - c.Assert(v.M["ghi"].value, Equals, 3) -} - -type proxyTypeError struct{} - -func (v *proxyTypeError) UnmarshalYAML(unmarshal func(interface{}) error) error { - var s string - var a int32 - var b int64 - if err := unmarshal(&s); err != nil { - panic(err) - } - if s == "a" { - if err := unmarshal(&b); err == nil { - panic("should have failed") - } - return unmarshal(&a) - } - if err := unmarshal(&a); err == nil { - panic("should have failed") - } - return unmarshal(&b) -} - -func (s *S) TestUnmarshalerTypeErrorProxying(c *C) { - type T struct { - Before int - After int - M map[string]*proxyTypeError - } - var v T - data := `{before: A, m: {abc: a, def: b}, after: B}` - err := yaml.Unmarshal([]byte(data), &v) - c.Assert(err, ErrorMatches, ""+ - "yaml: unmarshal errors:\n"+ - " line 1: cannot unmarshal !!str `A` into int\n"+ - " line 1: cannot unmarshal !!str `a` into int32\n"+ - " line 1: cannot unmarshal !!str `b` into int64\n"+ - " line 1: cannot unmarshal !!str `B` into int") -} - -type failingUnmarshaler struct{} - -var failingErr = errors.New("failingErr") - -func (ft *failingUnmarshaler) UnmarshalYAML(unmarshal func(interface{}) error) error { - return failingErr -} - -func (s *S) TestUnmarshalerError(c *C) { - err := yaml.Unmarshal([]byte("a: b"), &failingUnmarshaler{}) - c.Assert(err, Equals, failingErr) -} - -type sliceUnmarshaler []int - -func (su *sliceUnmarshaler) UnmarshalYAML(unmarshal func(interface{}) error) error { - var slice []int - err := unmarshal(&slice) - if err == nil { - *su = slice - return nil - } - - var intVal int - err = unmarshal(&intVal) - if err == nil { - *su = []int{intVal} - return nil - } - - return err -} - -func (s *S) TestUnmarshalerRetry(c *C) { - var su sliceUnmarshaler - err := yaml.Unmarshal([]byte("[1, 2, 3]"), &su) - c.Assert(err, IsNil) - c.Assert(su, DeepEquals, sliceUnmarshaler([]int{1, 2, 3})) - - err = yaml.Unmarshal([]byte("1"), &su) - c.Assert(err, IsNil) - c.Assert(su, DeepEquals, sliceUnmarshaler([]int{1})) -} - -// From http://yaml.org/type/merge.html -var mergeTests = ` -anchors: - list: - - &CENTER { "x": 1, "y": 2 } - - &LEFT { "x": 0, "y": 2 } - - &BIG { "r": 10 } - - &SMALL { "r": 1 } - -# All the following maps are equal: - -plain: - # Explicit keys - "x": 1 - "y": 2 - "r": 10 - label: center/big - -mergeOne: - # Merge one map - << : *CENTER - "r": 10 - label: center/big - -mergeMultiple: - # Merge multiple maps - << : [ *CENTER, *BIG ] - label: center/big - -override: - # Override - << : [ *BIG, *LEFT, *SMALL ] - "x": 1 - label: center/big - -shortTag: - # Explicit short merge tag - !!merge "<<" : [ *CENTER, *BIG ] - label: center/big - -longTag: - # Explicit merge long tag - ! "<<" : [ *CENTER, *BIG ] - label: center/big - -inlineMap: - # Inlined map - << : {"x": 1, "y": 2, "r": 10} - label: center/big - -inlineSequenceMap: - # Inlined map in sequence - << : [ *CENTER, {"r": 10} ] - label: center/big -` - -func (s *S) TestMerge(c *C) { - var want = map[interface{}]interface{}{ - "x": 1, - "y": 2, - "r": 10, - "label": "center/big", - } - - var m map[interface{}]interface{} - err := yaml.Unmarshal([]byte(mergeTests), &m) - c.Assert(err, IsNil) - for name, test := range m { - if name == "anchors" { - continue - } - c.Assert(test, DeepEquals, want, Commentf("test %q failed", name)) - } -} - -func (s *S) TestMergeStruct(c *C) { - type Data struct { - X, Y, R int - Label string - } - want := Data{1, 2, 10, "center/big"} - - var m map[string]Data - err := yaml.Unmarshal([]byte(mergeTests), &m) - c.Assert(err, IsNil) - for name, test := range m { - if name == "anchors" { - continue - } - c.Assert(test, Equals, want, Commentf("test %q failed", name)) - } -} - -var unmarshalNullTests = []func() interface{}{ - func() interface{} { var v interface{}; v = "v"; return &v }, - func() interface{} { var s = "s"; return &s }, - func() interface{} { var s = "s"; sptr := &s; return &sptr }, - func() interface{} { var i = 1; return &i }, - func() interface{} { var i = 1; iptr := &i; return &iptr }, - func() interface{} { m := map[string]int{"s": 1}; return &m }, - func() interface{} { m := map[string]int{"s": 1}; return m }, -} - -func (s *S) TestUnmarshalNull(c *C) { - for _, test := range unmarshalNullTests { - item := test() - zero := reflect.Zero(reflect.TypeOf(item).Elem()).Interface() - err := yaml.Unmarshal([]byte("null"), item) - c.Assert(err, IsNil) - if reflect.TypeOf(item).Kind() == reflect.Map { - c.Assert(reflect.ValueOf(item).Interface(), DeepEquals, reflect.MakeMap(reflect.TypeOf(item)).Interface()) - } else { - c.Assert(reflect.ValueOf(item).Elem().Interface(), DeepEquals, zero) - } - } -} - -func (s *S) TestUnmarshalSliceOnPreset(c *C) { - // Issue #48. - v := struct{ A []int }{[]int{1}} - yaml.Unmarshal([]byte("a: [2]"), &v) - c.Assert(v.A, DeepEquals, []int{2}) -} - -func (s *S) TestUnmarshalStrict(c *C) { - v := struct{ A, B int }{} - - err := yaml.UnmarshalStrict([]byte("a: 1\nb: 2"), &v) - c.Check(err, IsNil) - err = yaml.Unmarshal([]byte("a: 1\nb: 2\nc: 3"), &v) - c.Check(err, IsNil) - err = yaml.UnmarshalStrict([]byte("a: 1\nb: 2\nc: 3"), &v) - c.Check(err, ErrorMatches, "yaml: unmarshal errors:\n line 1: field c not found in struct struct { A int; B int }") -} - -//var data []byte -//func init() { -// var err error -// data, err = ioutil.ReadFile("/tmp/file.yaml") -// if err != nil { -// panic(err) -// } -//} -// -//func (s *S) BenchmarkUnmarshal(c *C) { -// var err error -// for i := 0; i < c.N; i++ { -// var v map[string]interface{} -// err = yaml.Unmarshal(data, &v) -// } -// if err != nil { -// panic(err) -// } -//} -// -//func (s *S) BenchmarkMarshal(c *C) { -// var v map[string]interface{} -// yaml.Unmarshal(data, &v) -// c.ResetTimer() -// for i := 0; i < c.N; i++ { -// yaml.Marshal(&v) -// } -//} diff --git a/vendor/gopkg.in/yaml.v2/emitterc.go b/vendor/gopkg.in/yaml.v2/emitterc.go index 41de8b856..a1c2cc526 100644 --- a/vendor/gopkg.in/yaml.v2/emitterc.go +++ b/vendor/gopkg.in/yaml.v2/emitterc.go @@ -2,6 +2,7 @@ package yaml import ( "bytes" + "fmt" ) // Flush the buffer if needed. @@ -664,7 +665,7 @@ func yaml_emitter_emit_node(emitter *yaml_emitter_t, event *yaml_event_t, return yaml_emitter_emit_mapping_start(emitter, event) default: return yaml_emitter_set_emitter_error(emitter, - "expected SCALAR, SEQUENCE-START, MAPPING-START, or ALIAS") + fmt.Sprintf("expected SCALAR, SEQUENCE-START, MAPPING-START, or ALIAS, but got %v", event.typ)) } } @@ -842,7 +843,7 @@ func yaml_emitter_select_scalar_style(emitter *yaml_emitter_t, event *yaml_event return true } -// Write an achor. +// Write an anchor. func yaml_emitter_process_anchor(emitter *yaml_emitter_t) bool { if emitter.anchor_data.anchor == nil { return true @@ -995,9 +996,9 @@ func yaml_emitter_analyze_scalar(emitter *yaml_emitter_t, value []byte) bool { space_break = false preceded_by_whitespace = false - followed_by_whitespace = false - previous_space = false - previous_break = false + followed_by_whitespace = false + previous_space = false + previous_break = false ) emitter.scalar_data.value = value diff --git a/vendor/gopkg.in/yaml.v2/encode.go b/vendor/gopkg.in/yaml.v2/encode.go index 84f849955..a14435e82 100644 --- a/vendor/gopkg.in/yaml.v2/encode.go +++ b/vendor/gopkg.in/yaml.v2/encode.go @@ -3,12 +3,14 @@ package yaml import ( "encoding" "fmt" + "io" "reflect" "regexp" "sort" "strconv" "strings" "time" + "unicode/utf8" ) type encoder struct { @@ -16,25 +18,39 @@ type encoder struct { event yaml_event_t out []byte flow bool + // doneInit holds whether the initial stream_start_event has been + // emitted. + doneInit bool } -func newEncoder() (e *encoder) { - e = &encoder{} - e.must(yaml_emitter_initialize(&e.emitter)) +func newEncoder() *encoder { + e := &encoder{} + yaml_emitter_initialize(&e.emitter) yaml_emitter_set_output_string(&e.emitter, &e.out) yaml_emitter_set_unicode(&e.emitter, true) - e.must(yaml_stream_start_event_initialize(&e.event, yaml_UTF8_ENCODING)) - e.emit() - e.must(yaml_document_start_event_initialize(&e.event, nil, nil, true)) - e.emit() return e } -func (e *encoder) finish() { - e.must(yaml_document_end_event_initialize(&e.event, true)) +func newEncoderWithWriter(w io.Writer) *encoder { + e := &encoder{} + yaml_emitter_initialize(&e.emitter) + yaml_emitter_set_output_writer(&e.emitter, w) + yaml_emitter_set_unicode(&e.emitter, true) + return e +} + +func (e *encoder) init() { + if e.doneInit { + return + } + yaml_stream_start_event_initialize(&e.event, yaml_UTF8_ENCODING) e.emit() + e.doneInit = true +} + +func (e *encoder) finish() { e.emitter.open_ended = false - e.must(yaml_stream_end_event_initialize(&e.event)) + yaml_stream_end_event_initialize(&e.event) e.emit() } @@ -44,9 +60,7 @@ func (e *encoder) destroy() { func (e *encoder) emit() { // This will internally delete the e.event value. - if !yaml_emitter_emit(&e.emitter, &e.event) && e.event.typ != yaml_DOCUMENT_END_EVENT && e.event.typ != yaml_STREAM_END_EVENT { - e.must(false) - } + e.must(yaml_emitter_emit(&e.emitter, &e.event)) } func (e *encoder) must(ok bool) { @@ -59,13 +73,28 @@ func (e *encoder) must(ok bool) { } } +func (e *encoder) marshalDoc(tag string, in reflect.Value) { + e.init() + yaml_document_start_event_initialize(&e.event, nil, nil, true) + e.emit() + e.marshal(tag, in) + yaml_document_end_event_initialize(&e.event, true) + e.emit() +} + func (e *encoder) marshal(tag string, in reflect.Value) { - if !in.IsValid() { + if !in.IsValid() || in.Kind() == reflect.Ptr && in.IsNil() { e.nilv() return } iface := in.Interface() - if m, ok := iface.(Marshaler); ok { + switch m := iface.(type) { + case time.Time, *time.Time: + // Although time.Time implements TextMarshaler, + // we don't want to treat it as a string for YAML + // purposes because YAML has special support for + // timestamps. + case Marshaler: v, err := m.MarshalYAML() if err != nil { fail(err) @@ -75,31 +104,34 @@ func (e *encoder) marshal(tag string, in reflect.Value) { return } in = reflect.ValueOf(v) - } else if m, ok := iface.(encoding.TextMarshaler); ok { + case encoding.TextMarshaler: text, err := m.MarshalText() if err != nil { fail(err) } in = reflect.ValueOf(string(text)) + case nil: + e.nilv() + return } switch in.Kind() { case reflect.Interface: - if in.IsNil() { - e.nilv() - } else { - e.marshal(tag, in.Elem()) - } + e.marshal(tag, in.Elem()) case reflect.Map: e.mapv(tag, in) case reflect.Ptr: - if in.IsNil() { - e.nilv() + if in.Type() == ptrTimeType { + e.timev(tag, in.Elem()) } else { e.marshal(tag, in.Elem()) } case reflect.Struct: - e.structv(tag, in) - case reflect.Slice: + if in.Type() == timeType { + e.timev(tag, in) + } else { + e.structv(tag, in) + } + case reflect.Slice, reflect.Array: if in.Type().Elem() == mapItemType { e.itemsv(tag, in) } else { @@ -191,10 +223,10 @@ func (e *encoder) mappingv(tag string, f func()) { e.flow = false style = yaml_FLOW_MAPPING_STYLE } - e.must(yaml_mapping_start_event_initialize(&e.event, nil, []byte(tag), implicit, style)) + yaml_mapping_start_event_initialize(&e.event, nil, []byte(tag), implicit, style) e.emit() f() - e.must(yaml_mapping_end_event_initialize(&e.event)) + yaml_mapping_end_event_initialize(&e.event) e.emit() } @@ -240,23 +272,36 @@ var base60float = regexp.MustCompile(`^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+(?:\.[0 func (e *encoder) stringv(tag string, in reflect.Value) { var style yaml_scalar_style_t s := in.String() - rtag, rs := resolve("", s) - if rtag == yaml_BINARY_TAG { - if tag == "" || tag == yaml_STR_TAG { - tag = rtag - s = rs.(string) - } else if tag == yaml_BINARY_TAG { + canUsePlain := true + switch { + case !utf8.ValidString(s): + if tag == yaml_BINARY_TAG { failf("explicitly tagged !!binary data must be base64-encoded") - } else { + } + if tag != "" { failf("cannot marshal invalid UTF-8 data as %s", shortTag(tag)) } + // It can't be encoded directly as YAML so use a binary tag + // and encode it as base64. + tag = yaml_BINARY_TAG + s = encodeBase64(s) + case tag == "": + // Check to see if it would resolve to a specific + // tag when encoded unquoted. If it doesn't, + // there's no need to quote it. + rtag, _ := resolve("", s) + canUsePlain = rtag == yaml_STR_TAG && !isBase60Float(s) } - if tag == "" && (rtag != yaml_STR_TAG || isBase60Float(s)) { - style = yaml_DOUBLE_QUOTED_SCALAR_STYLE - } else if strings.Contains(s, "\n") { + // Note: it's possible for user code to emit invalid YAML + // if they explicitly specify a tag and a string containing + // text that's incompatible with that tag. + switch { + case strings.Contains(s, "\n"): style = yaml_LITERAL_SCALAR_STYLE - } else { + case canUsePlain: style = yaml_PLAIN_SCALAR_STYLE + default: + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE } e.emitScalar(s, "", tag, style) } @@ -281,9 +326,20 @@ func (e *encoder) uintv(tag string, in reflect.Value) { e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE) } +func (e *encoder) timev(tag string, in reflect.Value) { + t := in.Interface().(time.Time) + s := t.Format(time.RFC3339Nano) + e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE) +} + func (e *encoder) floatv(tag string, in reflect.Value) { - // FIXME: Handle 64 bits here. - s := strconv.FormatFloat(float64(in.Float()), 'g', -1, 32) + // Issue #352: When formatting, use the precision of the underlying value + precision := 64 + if in.Kind() == reflect.Float32 { + precision = 32 + } + + s := strconv.FormatFloat(in.Float(), 'g', -1, precision) switch s { case "+Inf": s = ".inf" diff --git a/vendor/gopkg.in/yaml.v2/encode_test.go b/vendor/gopkg.in/yaml.v2/encode_test.go deleted file mode 100644 index 84099bd38..000000000 --- a/vendor/gopkg.in/yaml.v2/encode_test.go +++ /dev/null @@ -1,501 +0,0 @@ -package yaml_test - -import ( - "fmt" - "math" - "strconv" - "strings" - "time" - - . "gopkg.in/check.v1" - "gopkg.in/yaml.v2" - "net" - "os" -) - -var marshalIntTest = 123 - -var marshalTests = []struct { - value interface{} - data string -}{ - { - nil, - "null\n", - }, { - &struct{}{}, - "{}\n", - }, { - map[string]string{"v": "hi"}, - "v: hi\n", - }, { - map[string]interface{}{"v": "hi"}, - "v: hi\n", - }, { - map[string]string{"v": "true"}, - "v: \"true\"\n", - }, { - map[string]string{"v": "false"}, - "v: \"false\"\n", - }, { - map[string]interface{}{"v": true}, - "v: true\n", - }, { - map[string]interface{}{"v": false}, - "v: false\n", - }, { - map[string]interface{}{"v": 10}, - "v: 10\n", - }, { - map[string]interface{}{"v": -10}, - "v: -10\n", - }, { - map[string]uint{"v": 42}, - "v: 42\n", - }, { - map[string]interface{}{"v": int64(4294967296)}, - "v: 4294967296\n", - }, { - map[string]int64{"v": int64(4294967296)}, - "v: 4294967296\n", - }, { - map[string]uint64{"v": 4294967296}, - "v: 4294967296\n", - }, { - map[string]interface{}{"v": "10"}, - "v: \"10\"\n", - }, { - map[string]interface{}{"v": 0.1}, - "v: 0.1\n", - }, { - map[string]interface{}{"v": float64(0.1)}, - "v: 0.1\n", - }, { - map[string]interface{}{"v": -0.1}, - "v: -0.1\n", - }, { - map[string]interface{}{"v": math.Inf(+1)}, - "v: .inf\n", - }, { - map[string]interface{}{"v": math.Inf(-1)}, - "v: -.inf\n", - }, { - map[string]interface{}{"v": math.NaN()}, - "v: .nan\n", - }, { - map[string]interface{}{"v": nil}, - "v: null\n", - }, { - map[string]interface{}{"v": ""}, - "v: \"\"\n", - }, { - map[string][]string{"v": []string{"A", "B"}}, - "v:\n- A\n- B\n", - }, { - map[string][]string{"v": []string{"A", "B\nC"}}, - "v:\n- A\n- |-\n B\n C\n", - }, { - map[string][]interface{}{"v": []interface{}{"A", 1, map[string][]int{"B": []int{2, 3}}}}, - "v:\n- A\n- 1\n- B:\n - 2\n - 3\n", - }, { - map[string]interface{}{"a": map[interface{}]interface{}{"b": "c"}}, - "a:\n b: c\n", - }, { - map[string]interface{}{"a": "-"}, - "a: '-'\n", - }, - - // Simple values. - { - &marshalIntTest, - "123\n", - }, - - // Structures - { - &struct{ Hello string }{"world"}, - "hello: world\n", - }, { - &struct { - A struct { - B string - } - }{struct{ B string }{"c"}}, - "a:\n b: c\n", - }, { - &struct { - A *struct { - B string - } - }{&struct{ B string }{"c"}}, - "a:\n b: c\n", - }, { - &struct { - A *struct { - B string - } - }{}, - "a: null\n", - }, { - &struct{ A int }{1}, - "a: 1\n", - }, { - &struct{ A []int }{[]int{1, 2}}, - "a:\n- 1\n- 2\n", - }, { - &struct { - B int "a" - }{1}, - "a: 1\n", - }, { - &struct{ A bool }{true}, - "a: true\n", - }, - - // Conditional flag - { - &struct { - A int "a,omitempty" - B int "b,omitempty" - }{1, 0}, - "a: 1\n", - }, { - &struct { - A int "a,omitempty" - B int "b,omitempty" - }{0, 0}, - "{}\n", - }, { - &struct { - A *struct{ X, y int } "a,omitempty,flow" - }{&struct{ X, y int }{1, 2}}, - "a: {x: 1}\n", - }, { - &struct { - A *struct{ X, y int } "a,omitempty,flow" - }{nil}, - "{}\n", - }, { - &struct { - A *struct{ X, y int } "a,omitempty,flow" - }{&struct{ X, y int }{}}, - "a: {x: 0}\n", - }, { - &struct { - A struct{ X, y int } "a,omitempty,flow" - }{struct{ X, y int }{1, 2}}, - "a: {x: 1}\n", - }, { - &struct { - A struct{ X, y int } "a,omitempty,flow" - }{struct{ X, y int }{0, 1}}, - "{}\n", - }, { - &struct { - A float64 "a,omitempty" - B float64 "b,omitempty" - }{1, 0}, - "a: 1\n", - }, - - // Flow flag - { - &struct { - A []int "a,flow" - }{[]int{1, 2}}, - "a: [1, 2]\n", - }, { - &struct { - A map[string]string "a,flow" - }{map[string]string{"b": "c", "d": "e"}}, - "a: {b: c, d: e}\n", - }, { - &struct { - A struct { - B, D string - } "a,flow" - }{struct{ B, D string }{"c", "e"}}, - "a: {b: c, d: e}\n", - }, - - // Unexported field - { - &struct { - u int - A int - }{0, 1}, - "a: 1\n", - }, - - // Ignored field - { - &struct { - A int - B int "-" - }{1, 2}, - "a: 1\n", - }, - - // Struct inlining - { - &struct { - A int - C inlineB `yaml:",inline"` - }{1, inlineB{2, inlineC{3}}}, - "a: 1\nb: 2\nc: 3\n", - }, - - // Map inlining - { - &struct { - A int - C map[string]int `yaml:",inline"` - }{1, map[string]int{"b": 2, "c": 3}}, - "a: 1\nb: 2\nc: 3\n", - }, - - // Duration - { - map[string]time.Duration{"a": 3 * time.Second}, - "a: 3s\n", - }, - - // Issue #24: bug in map merging logic. - { - map[string]string{"a": ""}, - "a: \n", - }, - - // Issue #34: marshal unsupported base 60 floats quoted for compatibility - // with old YAML 1.1 parsers. - { - map[string]string{"a": "1:1"}, - "a: \"1:1\"\n", - }, - - // Binary data. - { - map[string]string{"a": "\x00"}, - "a: \"\\0\"\n", - }, { - map[string]string{"a": "\x80\x81\x82"}, - "a: !!binary gIGC\n", - }, { - map[string]string{"a": strings.Repeat("\x90", 54)}, - "a: !!binary |\n " + strings.Repeat("kJCQ", 17) + "kJ\n CQ\n", - }, - - // Ordered maps. - { - &yaml.MapSlice{{"b", 2}, {"a", 1}, {"d", 4}, {"c", 3}, {"sub", yaml.MapSlice{{"e", 5}}}}, - "b: 2\na: 1\nd: 4\nc: 3\nsub:\n e: 5\n", - }, - - // Encode unicode as utf-8 rather than in escaped form. - { - map[string]string{"a": "你好"}, - "a: 你好\n", - }, - - // Support encoding.TextMarshaler. - { - map[string]net.IP{"a": net.IPv4(1, 2, 3, 4)}, - "a: 1.2.3.4\n", - }, - { - map[string]time.Time{"a": time.Unix(1424801979, 0)}, - "a: 2015-02-24T18:19:39Z\n", - }, - - // Ensure strings containing ": " are quoted (reported as PR #43, but not reproducible). - { - map[string]string{"a": "b: c"}, - "a: 'b: c'\n", - }, - - // Containing hash mark ('#') in string should be quoted - { - map[string]string{"a": "Hello #comment"}, - "a: 'Hello #comment'\n", - }, - { - map[string]string{"a": "你好 #comment"}, - "a: '你好 #comment'\n", - }, -} - -func (s *S) TestMarshal(c *C) { - defer os.Setenv("TZ", os.Getenv("TZ")) - os.Setenv("TZ", "UTC") - for _, item := range marshalTests { - data, err := yaml.Marshal(item.value) - c.Assert(err, IsNil) - c.Assert(string(data), Equals, item.data) - } -} - -var marshalErrorTests = []struct { - value interface{} - error string - panic string -}{{ - value: &struct { - B int - inlineB ",inline" - }{1, inlineB{2, inlineC{3}}}, - panic: `Duplicated key 'b' in struct struct \{ B int; .*`, -}, { - value: &struct { - A int - B map[string]int ",inline" - }{1, map[string]int{"a": 2}}, - panic: `Can't have key "a" in inlined map; conflicts with struct field`, -}} - -func (s *S) TestMarshalErrors(c *C) { - for _, item := range marshalErrorTests { - if item.panic != "" { - c.Assert(func() { yaml.Marshal(item.value) }, PanicMatches, item.panic) - } else { - _, err := yaml.Marshal(item.value) - c.Assert(err, ErrorMatches, item.error) - } - } -} - -func (s *S) TestMarshalTypeCache(c *C) { - var data []byte - var err error - func() { - type T struct{ A int } - data, err = yaml.Marshal(&T{}) - c.Assert(err, IsNil) - }() - func() { - type T struct{ B int } - data, err = yaml.Marshal(&T{}) - c.Assert(err, IsNil) - }() - c.Assert(string(data), Equals, "b: 0\n") -} - -var marshalerTests = []struct { - data string - value interface{} -}{ - {"_:\n hi: there\n", map[interface{}]interface{}{"hi": "there"}}, - {"_:\n- 1\n- A\n", []interface{}{1, "A"}}, - {"_: 10\n", 10}, - {"_: null\n", nil}, - {"_: BAR!\n", "BAR!"}, -} - -type marshalerType struct { - value interface{} -} - -func (o marshalerType) MarshalText() ([]byte, error) { - panic("MarshalText called on type with MarshalYAML") -} - -func (o marshalerType) MarshalYAML() (interface{}, error) { - return o.value, nil -} - -type marshalerValue struct { - Field marshalerType "_" -} - -func (s *S) TestMarshaler(c *C) { - for _, item := range marshalerTests { - obj := &marshalerValue{} - obj.Field.value = item.value - data, err := yaml.Marshal(obj) - c.Assert(err, IsNil) - c.Assert(string(data), Equals, string(item.data)) - } -} - -func (s *S) TestMarshalerWholeDocument(c *C) { - obj := &marshalerType{} - obj.value = map[string]string{"hello": "world!"} - data, err := yaml.Marshal(obj) - c.Assert(err, IsNil) - c.Assert(string(data), Equals, "hello: world!\n") -} - -type failingMarshaler struct{} - -func (ft *failingMarshaler) MarshalYAML() (interface{}, error) { - return nil, failingErr -} - -func (s *S) TestMarshalerError(c *C) { - _, err := yaml.Marshal(&failingMarshaler{}) - c.Assert(err, Equals, failingErr) -} - -func (s *S) TestSortedOutput(c *C) { - order := []interface{}{ - false, - true, - 1, - uint(1), - 1.0, - 1.1, - 1.2, - 2, - uint(2), - 2.0, - 2.1, - "", - ".1", - ".2", - ".a", - "1", - "2", - "a!10", - "a/2", - "a/10", - "a~10", - "ab/1", - "b/1", - "b/01", - "b/2", - "b/02", - "b/3", - "b/03", - "b1", - "b01", - "b3", - "c2.10", - "c10.2", - "d1", - "d12", - "d12a", - } - m := make(map[interface{}]int) - for _, k := range order { - m[k] = 1 - } - data, err := yaml.Marshal(m) - c.Assert(err, IsNil) - out := "\n" + string(data) - last := 0 - for i, k := range order { - repr := fmt.Sprint(k) - if s, ok := k.(string); ok { - if _, err = strconv.ParseFloat(repr, 32); s == "" || err == nil { - repr = `"` + repr + `"` - } - } - index := strings.Index(out, "\n"+repr+":") - if index == -1 { - c.Fatalf("%#v is not in the output: %#v", k, out) - } - if index < last { - c.Fatalf("%#v was generated before %#v: %q", k, order[i-1], out) - } - last = index - } -} diff --git a/vendor/gopkg.in/yaml.v2/example_embedded_test.go b/vendor/gopkg.in/yaml.v2/example_embedded_test.go deleted file mode 100644 index c8b241d54..000000000 --- a/vendor/gopkg.in/yaml.v2/example_embedded_test.go +++ /dev/null @@ -1,41 +0,0 @@ -package yaml_test - -import ( - "fmt" - "log" - - "gopkg.in/yaml.v2" -) - -// An example showing how to unmarshal embedded -// structs from YAML. - -type StructA struct { - A string `yaml:"a"` -} - -type StructB struct { - // Embedded structs are not treated as embedded in YAML by default. To do that, - // add the ",inline" annotation below - StructA `yaml:",inline"` - B string `yaml:"b"` -} - -var data = ` -a: a string from struct A -b: a string from struct B -` - -func ExampleUnmarshal_embedded() { - var b StructB - - err := yaml.Unmarshal([]byte(data), &b) - if err != nil { - log.Fatal("cannot unmarshal data: %v", err) - } - fmt.Println(b.A) - fmt.Println(b.B) - // Output: - // a string from struct A - // a string from struct B -} diff --git a/vendor/gopkg.in/yaml.v2/readerc.go b/vendor/gopkg.in/yaml.v2/readerc.go index f45079171..7c1f5fac3 100644 --- a/vendor/gopkg.in/yaml.v2/readerc.go +++ b/vendor/gopkg.in/yaml.v2/readerc.go @@ -93,9 +93,18 @@ func yaml_parser_update_buffer(parser *yaml_parser_t, length int) bool { panic("read handler must be set") } + // [Go] This function was changed to guarantee the requested length size at EOF. + // The fact we need to do this is pretty awful, but the description above implies + // for that to be the case, and there are tests + // If the EOF flag is set and the raw buffer is empty, do nothing. if parser.eof && parser.raw_buffer_pos == len(parser.raw_buffer) { - return true + // [Go] ACTUALLY! Read the documentation of this function above. + // This is just broken. To return true, we need to have the + // given length in the buffer. Not doing that means every single + // check that calls this function to make sure the buffer has a + // given length is Go) panicking; or C) accessing invalid memory. + //return true } // Return if the buffer contains enough characters. @@ -389,6 +398,15 @@ func yaml_parser_update_buffer(parser *yaml_parser_t, length int) bool { break } } + // [Go] Read the documentation of this function above. To return true, + // we need to have the given length in the buffer. Not doing that means + // every single check that calls this function to make sure the buffer + // has a given length is Go) panicking; or C) accessing invalid memory. + // This happens here due to the EOF above breaking early. + for buffer_len < length { + parser.buffer[buffer_len] = 0 + buffer_len++ + } parser.buffer = parser.buffer[:buffer_len] return true } diff --git a/vendor/gopkg.in/yaml.v2/resolve.go b/vendor/gopkg.in/yaml.v2/resolve.go index 232313cc0..6c151db6f 100644 --- a/vendor/gopkg.in/yaml.v2/resolve.go +++ b/vendor/gopkg.in/yaml.v2/resolve.go @@ -6,7 +6,7 @@ import ( "regexp" "strconv" "strings" - "unicode/utf8" + "time" ) type resolveMapItem struct { @@ -75,7 +75,7 @@ func longTag(tag string) string { func resolvableTag(tag string) bool { switch tag { - case "", yaml_STR_TAG, yaml_BOOL_TAG, yaml_INT_TAG, yaml_FLOAT_TAG, yaml_NULL_TAG: + case "", yaml_STR_TAG, yaml_BOOL_TAG, yaml_INT_TAG, yaml_FLOAT_TAG, yaml_NULL_TAG, yaml_TIMESTAMP_TAG: return true } return false @@ -92,6 +92,19 @@ func resolve(tag string, in string) (rtag string, out interface{}) { switch tag { case "", rtag, yaml_STR_TAG, yaml_BINARY_TAG: return + case yaml_FLOAT_TAG: + if rtag == yaml_INT_TAG { + switch v := out.(type) { + case int64: + rtag = yaml_FLOAT_TAG + out = float64(v) + return + case int: + rtag = yaml_FLOAT_TAG + out = float64(v) + return + } + } } failf("cannot decode %s `%s` as a %s", shortTag(rtag), in, shortTag(tag)) }() @@ -125,6 +138,15 @@ func resolve(tag string, in string) (rtag string, out interface{}) { case 'D', 'S': // Int, float, or timestamp. + // Only try values as a timestamp if the value is unquoted or there's an explicit + // !!timestamp tag. + if tag == "" || tag == yaml_TIMESTAMP_TAG { + t, ok := parseTimestamp(in) + if ok { + return yaml_TIMESTAMP_TAG, t + } + } + plain := strings.Replace(in, "_", "", -1) intv, err := strconv.ParseInt(plain, 0, 64) if err == nil { @@ -158,28 +180,20 @@ func resolve(tag string, in string) (rtag string, out interface{}) { return yaml_INT_TAG, uintv } } else if strings.HasPrefix(plain, "-0b") { - intv, err := strconv.ParseInt(plain[3:], 2, 64) + intv, err := strconv.ParseInt("-" + plain[3:], 2, 64) if err == nil { - if intv == int64(int(intv)) { - return yaml_INT_TAG, -int(intv) + if true || intv == int64(int(intv)) { + return yaml_INT_TAG, int(intv) } else { - return yaml_INT_TAG, -intv + return yaml_INT_TAG, intv } } } - // XXX Handle timestamps here. - default: panic("resolveTable item not yet handled: " + string(rune(hint)) + " (with " + in + ")") } } - if tag == yaml_BINARY_TAG { - return yaml_BINARY_TAG, in - } - if utf8.ValidString(in) { - return yaml_STR_TAG, in - } - return yaml_BINARY_TAG, encodeBase64(in) + return yaml_STR_TAG, in } // encodeBase64 encodes s as base64 that is broken up into multiple lines @@ -206,3 +220,39 @@ func encodeBase64(s string) string { } return string(out[:k]) } + +// This is a subset of the formats allowed by the regular expression +// defined at http://yaml.org/type/timestamp.html. +var allowedTimestampFormats = []string{ + "2006-1-2T15:4:5.999999999Z07:00", // RCF3339Nano with short date fields. + "2006-1-2t15:4:5.999999999Z07:00", // RFC3339Nano with short date fields and lower-case "t". + "2006-1-2 15:4:5.999999999", // space separated with no time zone + "2006-1-2", // date only + // Notable exception: time.Parse cannot handle: "2001-12-14 21:59:43.10 -5" + // from the set of examples. +} + +// parseTimestamp parses s as a timestamp string and +// returns the timestamp and reports whether it succeeded. +// Timestamp formats are defined at http://yaml.org/type/timestamp.html +func parseTimestamp(s string) (time.Time, bool) { + // TODO write code to check all the formats supported by + // http://yaml.org/type/timestamp.html instead of using time.Parse. + + // Quick check: all date formats start with YYYY-. + i := 0 + for ; i < len(s); i++ { + if c := s[i]; c < '0' || c > '9' { + break + } + } + if i != 4 || i == len(s) || s[i] != '-' { + return time.Time{}, false + } + for _, format := range allowedTimestampFormats { + if t, err := time.Parse(format, s); err == nil { + return t, true + } + } + return time.Time{}, false +} diff --git a/vendor/gopkg.in/yaml.v2/scannerc.go b/vendor/gopkg.in/yaml.v2/scannerc.go index 074484455..077fd1dd2 100644 --- a/vendor/gopkg.in/yaml.v2/scannerc.go +++ b/vendor/gopkg.in/yaml.v2/scannerc.go @@ -871,12 +871,6 @@ func yaml_parser_save_simple_key(parser *yaml_parser_t) bool { required := parser.flow_level == 0 && parser.indent == parser.mark.column - // A simple key is required only when it is the first token in the current - // line. Therefore it is always allowed. But we add a check anyway. - if required && !parser.simple_key_allowed { - panic("should not happen") - } - // // If the current position may start a simple key, save it. // @@ -2475,6 +2469,10 @@ func yaml_parser_scan_flow_scalar(parser *yaml_parser_t, token *yaml_token_t, si } } + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + // Check if we are at the end of the scalar. if single { if parser.buffer[parser.buffer_pos] == '\'' { @@ -2487,10 +2485,6 @@ func yaml_parser_scan_flow_scalar(parser *yaml_parser_t, token *yaml_token_t, si } // Consume blank characters. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - for is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos) { if is_blank(parser.buffer, parser.buffer_pos) { // Consume a space or a tab character. @@ -2592,19 +2586,10 @@ func yaml_parser_scan_plain_scalar(parser *yaml_parser_t, token *yaml_token_t) b // Consume non-blank characters. for !is_blankz(parser.buffer, parser.buffer_pos) { - // Check for 'x:x' in the flow context. TODO: Fix the test "spec-08-13". - if parser.flow_level > 0 && - parser.buffer[parser.buffer_pos] == ':' && - !is_blankz(parser.buffer, parser.buffer_pos+1) { - yaml_parser_set_scanner_error(parser, "while scanning a plain scalar", - start_mark, "found unexpected ':'") - return false - } - // Check for indicators that may end a plain scalar. if (parser.buffer[parser.buffer_pos] == ':' && is_blankz(parser.buffer, parser.buffer_pos+1)) || (parser.flow_level > 0 && - (parser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == ':' || + (parser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == '[' || parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '{' || parser.buffer[parser.buffer_pos] == '}')) { @@ -2656,10 +2641,10 @@ func yaml_parser_scan_plain_scalar(parser *yaml_parser_t, token *yaml_token_t) b for is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos) { if is_blank(parser.buffer, parser.buffer_pos) { - // Check for tab character that abuse indentation. + // Check for tab characters that abuse indentation. if leading_blanks && parser.mark.column < indent && is_tab(parser.buffer, parser.buffer_pos) { yaml_parser_set_scanner_error(parser, "while scanning a plain scalar", - start_mark, "found a tab character that violate indentation") + start_mark, "found a tab character that violates indentation") return false } diff --git a/vendor/gopkg.in/yaml.v2/sorter.go b/vendor/gopkg.in/yaml.v2/sorter.go index 5958822f9..4c45e660a 100644 --- a/vendor/gopkg.in/yaml.v2/sorter.go +++ b/vendor/gopkg.in/yaml.v2/sorter.go @@ -51,6 +51,15 @@ func (l keyList) Less(i, j int) bool { } var ai, bi int var an, bn int64 + if ar[i] == '0' || br[i] == '0' { + for j := i-1; j >= 0 && unicode.IsDigit(ar[j]); j-- { + if ar[j] != '0' { + an = 1 + bn = 1 + break + } + } + } for ai = i; ai < len(ar) && unicode.IsDigit(ar[ai]); ai++ { an = an*10 + int64(ar[ai]-'0') } diff --git a/vendor/gopkg.in/yaml.v2/suite_test.go b/vendor/gopkg.in/yaml.v2/suite_test.go deleted file mode 100644 index c5cf1ed4f..000000000 --- a/vendor/gopkg.in/yaml.v2/suite_test.go +++ /dev/null @@ -1,12 +0,0 @@ -package yaml_test - -import ( - . "gopkg.in/check.v1" - "testing" -) - -func Test(t *testing.T) { TestingT(t) } - -type S struct{} - -var _ = Suite(&S{}) diff --git a/vendor/gopkg.in/yaml.v2/writerc.go b/vendor/gopkg.in/yaml.v2/writerc.go index 190362f25..a2dde608c 100644 --- a/vendor/gopkg.in/yaml.v2/writerc.go +++ b/vendor/gopkg.in/yaml.v2/writerc.go @@ -18,72 +18,9 @@ func yaml_emitter_flush(emitter *yaml_emitter_t) bool { return true } - // If the output encoding is UTF-8, we don't need to recode the buffer. - if emitter.encoding == yaml_UTF8_ENCODING { - if err := emitter.write_handler(emitter, emitter.buffer[:emitter.buffer_pos]); err != nil { - return yaml_emitter_set_writer_error(emitter, "write error: "+err.Error()) - } - emitter.buffer_pos = 0 - return true - } - - // Recode the buffer into the raw buffer. - var low, high int - if emitter.encoding == yaml_UTF16LE_ENCODING { - low, high = 0, 1 - } else { - high, low = 1, 0 - } - - pos := 0 - for pos < emitter.buffer_pos { - // See the "reader.c" code for more details on UTF-8 encoding. Note - // that we assume that the buffer contains a valid UTF-8 sequence. - - // Read the next UTF-8 character. - octet := emitter.buffer[pos] - - var w int - var value rune - switch { - case octet&0x80 == 0x00: - w, value = 1, rune(octet&0x7F) - case octet&0xE0 == 0xC0: - w, value = 2, rune(octet&0x1F) - case octet&0xF0 == 0xE0: - w, value = 3, rune(octet&0x0F) - case octet&0xF8 == 0xF0: - w, value = 4, rune(octet&0x07) - } - for k := 1; k < w; k++ { - octet = emitter.buffer[pos+k] - value = (value << 6) + (rune(octet) & 0x3F) - } - pos += w - - // Write the character. - if value < 0x10000 { - var b [2]byte - b[high] = byte(value >> 8) - b[low] = byte(value & 0xFF) - emitter.raw_buffer = append(emitter.raw_buffer, b[0], b[1]) - } else { - // Write the character using a surrogate pair (check "reader.c"). - var b [4]byte - value -= 0x10000 - b[high] = byte(0xD8 + (value >> 18)) - b[low] = byte((value >> 10) & 0xFF) - b[high+2] = byte(0xDC + ((value >> 8) & 0xFF)) - b[low+2] = byte(value & 0xFF) - emitter.raw_buffer = append(emitter.raw_buffer, b[0], b[1], b[2], b[3]) - } - } - - // Write the raw buffer. - if err := emitter.write_handler(emitter, emitter.raw_buffer); err != nil { + if err := emitter.write_handler(emitter, emitter.buffer[:emitter.buffer_pos]); err != nil { return yaml_emitter_set_writer_error(emitter, "write error: "+err.Error()) } emitter.buffer_pos = 0 - emitter.raw_buffer = emitter.raw_buffer[:0] return true } diff --git a/vendor/gopkg.in/yaml.v2/yaml.go b/vendor/gopkg.in/yaml.v2/yaml.go index bf18884e0..de85aa4cd 100644 --- a/vendor/gopkg.in/yaml.v2/yaml.go +++ b/vendor/gopkg.in/yaml.v2/yaml.go @@ -9,6 +9,7 @@ package yaml import ( "errors" "fmt" + "io" "reflect" "strings" "sync" @@ -81,12 +82,58 @@ func Unmarshal(in []byte, out interface{}) (err error) { } // UnmarshalStrict is like Unmarshal except that any fields that are found -// in the data that do not have corresponding struct members will result in +// in the data that do not have corresponding struct members, or mapping +// keys that are duplicates, will result in // an error. func UnmarshalStrict(in []byte, out interface{}) (err error) { return unmarshal(in, out, true) } +// A Decorder reads and decodes YAML values from an input stream. +type Decoder struct { + strict bool + parser *parser +} + +// NewDecoder returns a new decoder that reads from r. +// +// The decoder introduces its own buffering and may read +// data from r beyond the YAML values requested. +func NewDecoder(r io.Reader) *Decoder { + return &Decoder{ + parser: newParserFromReader(r), + } +} + +// SetStrict sets whether strict decoding behaviour is enabled when +// decoding items in the data (see UnmarshalStrict). By default, decoding is not strict. +func (dec *Decoder) SetStrict(strict bool) { + dec.strict = strict +} + +// Decode reads the next YAML-encoded value from its input +// and stores it in the value pointed to by v. +// +// See the documentation for Unmarshal for details about the +// conversion of YAML into a Go value. +func (dec *Decoder) Decode(v interface{}) (err error) { + d := newDecoder(dec.strict) + defer handleErr(&err) + node := dec.parser.parse() + if node == nil { + return io.EOF + } + out := reflect.ValueOf(v) + if out.Kind() == reflect.Ptr && !out.IsNil() { + out = out.Elem() + } + d.unmarshal(node, out) + if len(d.terrors) > 0 { + return &TypeError{d.terrors} + } + return nil +} + func unmarshal(in []byte, out interface{}, strict bool) (err error) { defer handleErr(&err) d := newDecoder(strict) @@ -110,8 +157,8 @@ func unmarshal(in []byte, out interface{}, strict bool) (err error) { // of the generated document will reflect the structure of the value itself. // Maps and pointers (to struct, string, int, etc) are accepted as the in value. // -// Struct fields are only unmarshalled if they are exported (have an upper case -// first letter), and are unmarshalled using the field name lowercased as the +// Struct fields are only marshalled if they are exported (have an upper case +// first letter), and are marshalled using the field name lowercased as the // default key. Custom keys may be defined via the "yaml" name in the field // tag: the content preceding the first comma is used as the key, and the // following comma-separated options are used to tweak the marshalling process. @@ -125,7 +172,10 @@ func unmarshal(in []byte, out interface{}, strict bool) (err error) { // // omitempty Only include the field if it's not set to the zero // value for the type or to empty slices or maps. -// Does not apply to zero valued structs. +// Zero valued structs will be omitted if all their public +// fields are zero, unless they implement an IsZero +// method (see the IsZeroer interface type), in which +// case the field will be included if that method returns true. // // flow Marshal using a flow style (useful for structs, // sequences and maps). @@ -140,7 +190,7 @@ func unmarshal(in []byte, out interface{}, strict bool) (err error) { // For example: // // type T struct { -// F int "a,omitempty" +// F int `yaml:"a,omitempty"` // B int // } // yaml.Marshal(&T{B: 2}) // Returns "b: 2\n" @@ -150,12 +200,47 @@ func Marshal(in interface{}) (out []byte, err error) { defer handleErr(&err) e := newEncoder() defer e.destroy() - e.marshal("", reflect.ValueOf(in)) + e.marshalDoc("", reflect.ValueOf(in)) e.finish() out = e.out return } +// An Encoder writes YAML values to an output stream. +type Encoder struct { + encoder *encoder +} + +// NewEncoder returns a new encoder that writes to w. +// The Encoder should be closed after use to flush all data +// to w. +func NewEncoder(w io.Writer) *Encoder { + return &Encoder{ + encoder: newEncoderWithWriter(w), + } +} + +// Encode writes the YAML encoding of v to the stream. +// If multiple items are encoded to the stream, the +// second and subsequent document will be preceded +// with a "---" document separator, but the first will not. +// +// See the documentation for Marshal for details about the conversion of Go +// values to YAML. +func (e *Encoder) Encode(v interface{}) (err error) { + defer handleErr(&err) + e.encoder.marshalDoc("", reflect.ValueOf(v)) + return nil +} + +// Close closes the encoder by writing any remaining data. +// It does not write a stream terminating string "...". +func (e *Encoder) Close() (err error) { + defer handleErr(&err) + e.encoder.finish() + return nil +} + func handleErr(err *error) { if v := recover(); v != nil { if e, ok := v.(yamlError); ok { @@ -211,6 +296,9 @@ type fieldInfo struct { Num int OmitEmpty bool Flow bool + // Id holds the unique field identifier, so we can cheaply + // check for field duplicates without maintaining an extra map. + Id int // Inline holds the field index if the field is part of an inlined struct. Inline []int @@ -290,6 +378,7 @@ func getStructInfo(st reflect.Type) (*structInfo, error) { } else { finfo.Inline = append([]int{i}, finfo.Inline...) } + finfo.Id = len(fieldsList) fieldsMap[finfo.Key] = finfo fieldsList = append(fieldsList, finfo) } @@ -311,11 +400,16 @@ func getStructInfo(st reflect.Type) (*structInfo, error) { return nil, errors.New(msg) } + info.Id = len(fieldsList) fieldsList = append(fieldsList, info) fieldsMap[info.Key] = info } - sinfo = &structInfo{fieldsMap, fieldsList, inlineMap} + sinfo = &structInfo{ + FieldsMap: fieldsMap, + FieldsList: fieldsList, + InlineMap: inlineMap, + } fieldMapMutex.Lock() structMap[st] = sinfo @@ -323,8 +417,23 @@ func getStructInfo(st reflect.Type) (*structInfo, error) { return sinfo, nil } +// IsZeroer is used to check whether an object is zero to +// determine whether it should be omitted when marshaling +// with the omitempty flag. One notable implementation +// is time.Time. +type IsZeroer interface { + IsZero() bool +} + func isZero(v reflect.Value) bool { - switch v.Kind() { + kind := v.Kind() + if z, ok := v.Interface().(IsZeroer); ok { + if (kind == reflect.Ptr || kind == reflect.Interface) && v.IsNil() { + return true + } + return z.IsZero() + } + switch kind { case reflect.String: return len(v.String()) == 0 case reflect.Interface, reflect.Ptr: diff --git a/vendor/gopkg.in/yaml.v2/yamlh.go b/vendor/gopkg.in/yaml.v2/yamlh.go index 3caeca049..e25cee563 100644 --- a/vendor/gopkg.in/yaml.v2/yamlh.go +++ b/vendor/gopkg.in/yaml.v2/yamlh.go @@ -1,6 +1,7 @@ package yaml import ( + "fmt" "io" ) @@ -239,6 +240,27 @@ const ( yaml_MAPPING_END_EVENT // A MAPPING-END event. ) +var eventStrings = []string{ + yaml_NO_EVENT: "none", + yaml_STREAM_START_EVENT: "stream start", + yaml_STREAM_END_EVENT: "stream end", + yaml_DOCUMENT_START_EVENT: "document start", + yaml_DOCUMENT_END_EVENT: "document end", + yaml_ALIAS_EVENT: "alias", + yaml_SCALAR_EVENT: "scalar", + yaml_SEQUENCE_START_EVENT: "sequence start", + yaml_SEQUENCE_END_EVENT: "sequence end", + yaml_MAPPING_START_EVENT: "mapping start", + yaml_MAPPING_END_EVENT: "mapping end", +} + +func (e yaml_event_type_t) String() string { + if e < 0 || int(e) >= len(eventStrings) { + return fmt.Sprintf("unknown event %d", e) + } + return eventStrings[e] +} + // The event structure. type yaml_event_t struct { @@ -521,9 +543,9 @@ type yaml_parser_t struct { read_handler yaml_read_handler_t // Read handler. - input_file io.Reader // File input data. - input []byte // String input data. - input_pos int + input_reader io.Reader // File input data. + input []byte // String input data. + input_pos int eof bool // EOF flag @@ -632,7 +654,7 @@ type yaml_emitter_t struct { write_handler yaml_write_handler_t // Write handler. output_buffer *[]byte // String output data. - output_file io.Writer // File output data. + output_writer io.Writer // File output data. buffer []byte // The working buffer. buffer_pos int // The current position of the buffer. diff --git a/wg-app-def/OWNERS b/wg-app-def/OWNERS index cfe367524..6f0e80c8d 100644 --- a/wg-app-def/OWNERS +++ b/wg-app-def/OWNERS @@ -2,3 +2,5 @@ reviewers: - wg-app-def-leads approvers: - wg-app-def-leads +labels: + - wg/app-def diff --git a/wg-app-def/README.md b/wg-app-def/README.md index ea3e5c53c..b788d08e9 100644 --- a/wg-app-def/README.md +++ b/wg-app-def/README.md @@ -5,14 +5,13 @@ Please do not edit this file directly, but instead make changes to the sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> +---> # App Def Working Group Improve UX of declarative primitives in the API and/or primary client libraries and tools, understand the needs of other parts of the ecosystem on this layer, and improve the interoperability of application management tools through better separation of concerns, common conventions, and common principles. -Charter can be found [here](https://docs.google.com/document/d/1TzRwzWYRulx4o8Fii8k7ToIx4LR4MSncxxLdJ9TkOAs/edit#) ## Meetings -* Regular WG Meeting: [Wednesdays at 16:00 UTC](https://zoom.us/j/748123863) (bi-weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=16:00&tz=UTC). +* Regular WG Meeting: [Wednesdays at 16:00 UTC](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (bi-weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=16:00&tz=UTC). * [Meeting notes and Agenda](https://docs.google.com/document/d/1Pxc-qwAt4FvuISZ_Ib5KdUwlynFkGueuzPx5Je_lbGM/edit). ## Organizers diff --git a/wg-apply/OWNERS b/wg-apply/OWNERS new file mode 100644 index 000000000..129fdf5e8 --- /dev/null +++ b/wg-apply/OWNERS @@ -0,0 +1,6 @@ +reviewers: + - wg-apply-leads +approvers: + - wg-apply-leads +labels: + - wg/apply diff --git a/wg-apply/README.md b/wg-apply/README.md index d65fd61a9..3566979ed 100644 --- a/wg-apply/README.md +++ b/wg-apply/README.md @@ -5,14 +5,14 @@ Please do not edit this file directly, but instead make changes to the sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> +---> # Apply Working Group Improve the state of declarative object management by fixing `kubectl apply`, moving the logic from the client to the server. This move also enables new/fixed features included in the scope of this working-group: diff, dry-run and prune. Resources can be found in [this Google drive folder](https://drive.google.com/drive/folders/1wlpgkS2gFZXdp4x2WlRsfUBxkFlt2Gx0) ## Meetings -* Regular WG Meeting: [Tuesdays at 9:30 PT (Pacific Time)]() (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=9:30&tz=PT%20%28Pacific%20Time%29). +* Regular WG Meeting: [Tuesdays at 9:30 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=9:30&tz=PT%20%28Pacific%20Time%29). ## Organizers diff --git a/wg-cloud-provider/README.md b/wg-cloud-provider/README.md deleted file mode 100644 index 7d997f211..000000000 --- a/wg-cloud-provider/README.md +++ /dev/null @@ -1,29 +0,0 @@ - -# Cloud Provider Working Group - -Charter can be found [here](https://docs.google.com/document/d/1m4Kvnh_u_9cENEE9n1ifYowQEFSgiHnbw43urGJMB64/edit#) - -## Meetings -* Regular WG Meeting: [Wednesdays at 10:00 PT (Pacific Time)](https://zoom.us/my/cloudprovider) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=10:00&tz=PT%20%28Pacific%20Time%29). - * [Meeting notes and Agenda](https://docs.google.com/document/d/1OZE-ub-v6B8y-GuaWejL-vU_f9jsjBbrim4LtTfxssw/edit#heading=h.w7i4ksrweimp). - -## Organizers - -* Sidhartha Mani (**[@wlan0](https://github.com/wlan0)**), Caascade Labs -* Jago Macleod (**[@jagosan](https://github.com/jagosan)**), Google - -## Contact -* [Slack](https://kubernetes.slack.com/messages/wg-cloud-provider) -* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-wg-cloud-provider) -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/wg%2Fcloud-provider) - - - - diff --git a/wg-cloud-provider/cloud-provider-requirements.md b/wg-cloud-provider/cloud-provider-requirements.md deleted file mode 100644 index ca16e81fb..000000000 --- a/wg-cloud-provider/cloud-provider-requirements.md +++ /dev/null @@ -1,87 +0,0 @@ -# Conventions for Cloud Provider Repositories - -This purpose of this document is to define a common structure for the cloud -provider repositories owned by current and future cloud provider SIGs[1]. In -accordance with the WG-Cloud-Provider Charter[2] to "define a set of common -expected behaviors across cloud providers", this proposal defines the location -and structure of commonly expected code. - -As each provider can and will have additional features that go beyond expected -common code, this document is only prescriptive to the location of the -following code: - -* Cloud Controller Manager implementations. -* Documentation. - -This document may be amended with additional locations that relate to enabling -consistent upstream testing, independent storage drivers, and other code with -common integration hooks may be added - -## Motivation - -The development of the Cloud Controller Manager[3] and Cloud Provider -Interface[4] has enabled the provider SIGs to develop external providers that -capture the core functionality of the upstream providers. By defining the -expected locations and naming conventions of where the external provider code -is, we continue in creating a consistent experience for: - -* Users of the providers, who will have easily understandable conventions for - discovering and using all of the providers. -* SIG-Docs, who will have a common hook for building or linking to externally - managed documentation -* SIG-Testing, who will be able to use common entry points for enabling - provider-specific e2e testing. -* Future cloud provider authors, who will have a common framework and examples - from which to build and share their code base. - -## Requirements - -Each cloud provider hosted within the `kubernetes` organization shall have a -single repository named `kubernetes/cloud-provider-`. Those -repositories shall have the following structure: - -* A `cloud-controller-manager` subdirectory that contains the implementation - of the provider-specific cloud controller. -* A `docs` subdirectory. -* A `docs/cloud-controller-manager.md` file that describes the options and - usage of the cloud controller manager code. -* A `tests` subdirectory that contains testing code. - -Additionally, the repository should have: - -* A `docs/getting-started.md` file that describes the installation and basic - operation of the cloud controller manager code. - -Where the provider has additional capabilities, the repository should have -the following subdirectories that contain the common features: - -* `dns` for DNS provider code. -* `cni` for the Container Network Interface (CNI) driver. -* `flex` for the Flex Volume driver. -* `installer` for custom installer code. - -Each repository may have additional directories and files that are used for -additional feature that include but are not limited to: - -* Other provider specific testing. -* Additional documentation, including examples and developer documentation. -* Dependencies on provider-hosted or other external code. - -## Timeline - -To facilitate community development, providers named in the `Make SIGs -responsible for implementations of CloudProvider` patch[1] can immediately -migrate their external provider work into their named repositories. - -Each provider will work to implement the required structure during the -Kubernetes 1.11 development cycle, with conformance by the 1.11 release. - -After the 1.11 release all current and new provider implementations must -conform with the requirements outlined in this document. - -## References - -1. [Makes SIGs responsible for implementations of `CloudProvider`](https://github.com/kubernetes/community/pull/1862) -2. [Cloud Provider Working Group Proposal](https://docs.google.com/document/d/1m4Kvnh_u_9cENEE9n1ifYowQEFSgiHnbw43urGJMB64/edit#) -3. [Cloud Controller Manager](https://github.com/kubernetes/kubernetes/tree/master/cmd/cloud-controller-manager) -4. [Cloud Provider Interface](https://github.com/kubernetes/kubernetes/blob/master/pkg/cloudprovider/cloud.go) diff --git a/wg-cluster-api/OWNERS b/wg-cluster-api/OWNERS deleted file mode 100644 index 9f4deffe0..000000000 --- a/wg-cluster-api/OWNERS +++ /dev/null @@ -1,4 +0,0 @@ -reviewers: - - wg-cluster-api-leads -approvers: - - wg-cluster-api-leads diff --git a/wg-cluster-api/README.md b/wg-cluster-api/README.md deleted file mode 100644 index 355550907..000000000 --- a/wg-cluster-api/README.md +++ /dev/null @@ -1,28 +0,0 @@ - -# Cluster API Working Group - -Define a portable API that represents a Kubernetes cluster. The API will contain the control plane and its configuration and the underlying infrastructure (nodes, node pools, etc). - -## Meetings -* Regular WG Meeting: [s at ]() (). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=&tz=). - * [Meeting notes and Agenda](https://docs.google.com/document/d/16ils69KImmE94RlmzjWDrkmFZysgB2J4lGnYMRN89WM/edit). - -## Organizers - -* Kris Nova (**[@kris-nova](https://github.com/kris-nova)**), Heptio -* Robert Bailey (**[@roberthbailey](https://github.com/roberthbailey)**), Google - -## Contact -* [Slack](https://kubernetes.slack.com/messages/cluster-api) -* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-cluster-lifecycle) - - - - diff --git a/wg-container-identity/OWNERS b/wg-container-identity/OWNERS index e51715f41..769842adf 100644 --- a/wg-container-identity/OWNERS +++ b/wg-container-identity/OWNERS @@ -2,3 +2,5 @@ reviewers: - wg-container-identity-leads approvers: - wg-container-identity-leads +labels: + - wg/container-identity diff --git a/wg-container-identity/README.md b/wg-container-identity/README.md index 623f3c1b4..2e956ac7f 100644 --- a/wg-container-identity/README.md +++ b/wg-container-identity/README.md @@ -5,19 +5,19 @@ Please do not edit this file directly, but instead make changes to the sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> +---> # Container Identity Working Group Ensure containers are able to interact with external systems and acquire secure identities for communication, integrating with external solutions as necessary. ## Meetings -* Regular WG Meeting: [Tuesdays at 15:00 UTC](TBD) (bi-weekly (On demand)). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=15:00&tz=UTC). +* Regular WG Meeting: [Wednesdays at 10:00 PDT](https://zoom.us/my/k8s.sig.auth) (bi-weekly (On demand)). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=10:00&tz=PDT). * [Meeting notes and Agenda](https://docs.google.com/document/d/1uH60pNr1-jBn7N2pEcddk6-6NTnmV5qepwKUJe9tMRo/edit). ## Organizers * Clayton Coleman (**[@smarterclayton](https://github.com/smarterclayton)**), Red Hat -* Greg Gastle (**[@destijl](https://github.com/destijl)**), Google +* Greg Castle (**[@destijl](https://github.com/destijl)**), Google ## Contact * [Slack](https://kubernetes.slack.com/messages/wg-container-identity) diff --git a/wg-iot-edge/OWNERS b/wg-iot-edge/OWNERS new file mode 100644 index 000000000..a3dc9bc13 --- /dev/null +++ b/wg-iot-edge/OWNERS @@ -0,0 +1,6 @@ +reviewers: + - wg-iot-edge-leads +approvers: + - wg-iot-edge-leads +labels: + - wg/iot-edge diff --git a/wg-iot-edge/README.md b/wg-iot-edge/README.md new file mode 100644 index 000000000..3118344e0 --- /dev/null +++ b/wg-iot-edge/README.md @@ -0,0 +1,44 @@ + +# IoT Edge Working Group + +A Working Group dedicated to discussing, designing and documenting using Kubernetes for developing and deploying IoT and Edge specific applications + +## Meetings +* Regular WG Meeting: [Fridays at 16:00 UTC](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (bi-weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=16:00&tz=UTC). + * [Meeting notes and Agenda](https://docs.google.com/document/d/1Yuwy9IO4X6XKq2wLW0pVZn5yHQxlyK7wdYBZBXRWiKI/edit?usp=sharing). + +## Organizers + +* Cindy Xing (**[@cindyxing](https://github.com/cindyxing)**), Huawei +* Dejan Bosanac (**[@dejanb](https://github.com/dejanb)**), Red Hat +* Preston Holmes (**[@ptone](https://github.com/ptone)**), Google +* Steve Wong (**[@cantbewong](https://github.com/cantbewong)**), VMWare + +## Contact +* [Slack](https://kubernetes.slack.com/messages/wg-iot-edge) +* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-wg-iot-edge) + + +This working group is a cross-SIG effort currently sponsored by _sig-networking_ and _sig-multicluster_ with +a focus on improving Kubernetes IoT and Edge deployments. Community members are encouraged to share their ideas in this working group to reach broad consensus across the SIGs. Once consensus is reached, the enhancements +are then managed by the appropriate SIGs based on impacted areas of code. + +## Goals + +* Provide reference architectures for various IoT/Edge environments. +* Create and maintain conformance tests tailored towards performance and reliability requirements of the most popular IoT/Edge use cases. +* Build end-to-end PoCs to validate overall design and provide examples to system integrators. +* Evaluate and possibly extend k8s federation and network infrastructure to better suite IoT/Edge use cases over bandwidth constrained and unreliable WAN interconnects. +* Evaluate and possibly improve connectivity and data ingestion options to better support various field protocols. +* Evaluate and extend existing CLI tools to manage k8s clusters running in remote edge locations. + +It is an open and active working group, and we always welcome new additions! + + diff --git a/wg-kubeadm-adoption/OWNERS b/wg-kubeadm-adoption/OWNERS index 23b6aa6cb..7c3324b61 100644 --- a/wg-kubeadm-adoption/OWNERS +++ b/wg-kubeadm-adoption/OWNERS @@ -2,3 +2,5 @@ reviewers: - wg-kubeadm-adoption-leads approvers: - wg-kubeadm-adoption-leads +labels: + - wg/kubeadm-adoption diff --git a/wg-kubeadm-adoption/README.md b/wg-kubeadm-adoption/README.md index 5b8a5863c..4c88f8484 100644 --- a/wg-kubeadm-adoption/README.md +++ b/wg-kubeadm-adoption/README.md @@ -5,13 +5,13 @@ Please do not edit this file directly, but instead make changes to the sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> +---> # Kubeadm Adoption Working Group Boost adoption of the kubeadm tool. kubeadm is a tool for creating new Kubernetes clusters easily for new users, but can also be used as a toolbox for higher-level deployment solutions. This working group makes sure kubeadm meets the extensibility requirements of those higher-level Kubernetes installers. ## Meetings -* Regular WG Meeting: [Tuesdays at 18:00 UTC](https://zoom.us/j/166836%E2%80%8B624) (bi-weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=18:00&tz=UTC). +* Regular WG Meeting: [Tuesdays at 18:00 UTC](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (bi-weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=18:00&tz=UTC). * [Meeting notes and Agenda](https://docs.google.com/document/d/1KdXsLYiJYJdiRbtgZsx6qbHF4g_K-gAScB9Zs4avgzg/edit). * [Meeting recordings](https://www.youtube.com/watch?v=-Xlcrm5iT80&list=PLPgAK4Icr0ehh93BiMC3djAc5KoW7WIkl). diff --git a/wg-machine-learning/README.md b/wg-machine-learning/README.md index f2209abcf..931a5e67b 100755 --- a/wg-machine-learning/README.md +++ b/wg-machine-learning/README.md @@ -5,19 +5,21 @@ Please do not edit this file directly, but instead make changes to the sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> +---> # Machine Learning Working Group Identify and fix gaps in Kubernetes to better support Machine Learning applications ## Meetings -* Regular WG Meeting: [Thursdays at 13:00 PT (Pacific Time)](https://zoom.us/j/4799874685) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=13:00&tz=PT%20%28Pacific%20Time%29). +* Regular WG Meeting: [Thursdays at 13:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=13:00&tz=PT%20%28Pacific%20Time%29). * [Meeting notes and Agenda](https://goo.gl/gBCdt1). ## Organizers * Vishnu Kannan (**[@vishh](https://github.com/vishh)**), Google * Kenneth Owens (**[@kow3ns](https://github.com/kow3ns)**), Google +* Balaji Subramaniam (**[@balajismaniam](https://github.com/balajismaniam)**), Intel +* Connor Doyle (**[@ConnorDoyle](https://github.com/ConnorDoyle)**), Intel ## Contact * [Slack](https://kubernetes.slack.com/messages/wg-machine-learning) @@ -28,9 +30,17 @@ A working group dedicated towards making Kubernetes work best for Machine Learni The charter for this working group as [proposed](https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!msg/kubernetes-dev/lOeMjOLilxI/wuQayFDvCQAJ) is as follows: - * Asses the state of the art for ML workloads on K8s - * Identify pain points users currently have with ML on k8s - * Identify, prioritize and execute on improving k8s to better support ML workloads in the near, medium, and long term. + - Assess the state of the art for ML workloads on K8s + - Identify pain points users currently have with ML on k8s + - Identify, prioritize and execute on improving k8s to better support ML workloads in the near, medium, and long term. + +## Goals: + +Topics include, but are not limited to: + + - Ease source changes to execution workflows, as they are a common barrier to entry. + - Scheduler enhancements such as improved bin packing for accelerators, job queueing, fair sharing and gang scheduling. + - Runtime enhancements such as job data loading (common data set sizes in the tens of gigabytes to terabytes), accelerator support, persisting job output (ML workloads can run for days and rely heavily on checkpointing) and multi-tenancy and job isolation (dealing with potential sensitive data sets). + - Job management such as experiment tracking (including enabling hyperparameter tuning systems) and scaling and deployment aspects of inference workloads. -TODO: Finalize and update the charter after the initial kick off meeting on 3/1/2018. diff --git a/wg-multitenancy/OWNERS b/wg-multitenancy/OWNERS index 644b961a0..d96a2dce9 100644 --- a/wg-multitenancy/OWNERS +++ b/wg-multitenancy/OWNERS @@ -2,3 +2,5 @@ reviewers: - wg-multitenancy-leads approvers: - wg-multitenancy-leads +labels: + - wg/multitenancy diff --git a/wg-multitenancy/README.md b/wg-multitenancy/README.md index 92131bac6..447867014 100644 --- a/wg-multitenancy/README.md +++ b/wg-multitenancy/README.md @@ -5,14 +5,15 @@ Please do not edit this file directly, but instead make changes to the sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> +---> # Multitenancy Working Group Define the models of multitenancy that Kubernetes will support. Discuss and execute upon any remaining work that needs to be done to support these models. Create conformance tests that will prove that these models can be built and used in production environments. ## Meetings -* Regular WG Meeting: [Wednesdays at 11:00 PT (Pacific Time)](https://zoom.us/my/k8s.sig.auth) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=11:00&tz=PT%20%28Pacific%20Time%29). +* Regular WG Meeting: [Wednesdays at 11:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=11:00&tz=PT%20%28Pacific%20Time%29). * [Meeting notes and Agenda](https://docs.google.com/document/d/1fj3yzmeU2eU8ZNBCUJG97dk_wC7228-e_MmdcmTNrZY/edit?usp=sharing). + * [Meeting recordings](https://www.youtube.com/playlist?list=PL69nYSiGNLP1tBA0W8zEe6UwPsabGQk-j). ## Organizers diff --git a/wg-policy/OWNERS b/wg-policy/OWNERS new file mode 100644 index 000000000..4ef70b9f1 --- /dev/null +++ b/wg-policy/OWNERS @@ -0,0 +1,6 @@ +reviewers: + - wg-policy-leads +approvers: + - wg-policy-leads +labels: + - wg/policy diff --git a/wg-policy/README.md b/wg-policy/README.md index d1c62b299..778dcbb4d 100644 --- a/wg-policy/README.md +++ b/wg-policy/README.md @@ -5,22 +5,22 @@ Please do not edit this file directly, but instead make changes to the sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> +---> # Policy Working Group Provide an overall architecture that describes both the current policy related implementations as well as future policy related proposals in Kubernetes. Through a collaborative method, we want to present both dev and end user a universal view of policy architecture in Kubernetes. ## Meetings -* Regular WG Meeting: [Thursdays at 17:00 PT (Pacific Time)](https://zoom.us/j/421702434) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=17:00&tz=PT%20%28Pacific%20Time%29). +* Regular WG Meeting: [Wednesdays at 16:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=16:00&tz=PT%20%28Pacific%20Time%29). * [Meeting notes and Agenda](https://docs.google.com/document/d/1ihFfEfgViKlUMbY2NKxaJzBkgHh-Phk5hqKTzK-NEEs/edit?usp=sharing). ## Organizers * Howard Huang (**[@hannibalhuang](https://github.com/hannibalhuang)**), Huawei * Torin Sandall (**[@tsandall](https://github.com/tsandall)**), Styra -* David Oppenheimer (**[@davidopp](https://github.com/davidopp)**), Google -* Clayton Coleman (**[@smarterclayton](https://github.com/smarterclayton)**), Red Hat -* Xuan Jia (**[@xuanjia](https://github.com/xuanjia)**), China Mobile +* Yisui Hu (**[@easeway](https://github.com/easeway)**), Google +* Erica von Buelow (**[@ericavonb](https://github.com/ericavonb)**), Red Hat +* Michael Elder (**[@mdelder](https://github.com/mdelder)**), IBM ## Contact * [Slack](https://kubernetes.slack.com/messages/wg-policy) diff --git a/wg-resource-management/OWNERS b/wg-resource-management/OWNERS index 602218540..6fcff2237 100644 --- a/wg-resource-management/OWNERS +++ b/wg-resource-management/OWNERS @@ -2,3 +2,5 @@ reviewers: - wg-resource-management-leads approvers: - wg-resource-management-leads +labels: + - wg/resource-management diff --git a/wg-resource-management/README.md b/wg-resource-management/README.md index ade83ee5b..62d580475 100644 --- a/wg-resource-management/README.md +++ b/wg-resource-management/README.md @@ -5,13 +5,13 @@ Please do not edit this file directly, but instead make changes to the sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> +---> # Resource Management Working Group Designing and shepherding cross-cutting features around compute resource isolation and utilization. ## Meetings -* Regular WG Meeting: [Wednesdays at 11:00 PT (Pacific Time)](https://zoom.us/j/4799874685) (biweekly (On demand)). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=11:00&tz=PT%20%28Pacific%20Time%29). +* Regular WG Meeting: [Wednesdays at 11:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly (On demand)). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=11:00&tz=PT%20%28Pacific%20Time%29). * [Meeting notes and Agenda](https://docs.google.com/document/d/1j3vrG6BgE0hUDs2e-1ZUegKN4W4Adb1B6oJ6j-4kyPU). * [Meeting recordings](https://www.youtube.com/watch?v=FUUJeWIEej0&list=PL69nYSiGNLP2uTrVwZCFtdEvLQvsbG2w4). diff --git a/wg-security-audit/OWNERS b/wg-security-audit/OWNERS new file mode 100644 index 000000000..3b6ea36be --- /dev/null +++ b/wg-security-audit/OWNERS @@ -0,0 +1,6 @@ +reviewers: + - wg-security-audit-leads +approvers: + - wg-security-audit-leads +labels: + - wg/security-audit diff --git a/wg-security-audit/README.md b/wg-security-audit/README.md new file mode 100644 index 000000000..c16302783 --- /dev/null +++ b/wg-security-audit/README.md @@ -0,0 +1,34 @@ + +# Security Audit Working Group + +Perform a security audit on k8s with a vendor and produce as artifacts a threat model and whitepaper outlining everything found during the audit. + +## Meetings +* Regular WG Meeting: [Mondays at 13:00 PT (Pacific Time)](https://docs.google.com/document/d/1RbC4SBZBlKth7IjYv_NaEpnmLGwMJ0ElpUOmsG-bdRA/edit) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=13:00&tz=PT%20%28Pacific%20Time%29). + +## Organizers + +* Aaron Small (**[@aasmall](https://github.com/aasmall)**), Google +* Joel Smith (**[@joelsmith](https://github.com/joelsmith)**), Red Hat +* Craig Ingram (**[@cji](https://github.com/cji)**), Salesforce + +## Contact +* [Slack](https://kubernetes.slack.com/messages/) +* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-wg-audit) + + +## Request For Proposals + +The RFP will be open between 2018/10/29 and 2018/11/30 and has been published [here](https://github.com/kubernetes/community/blob/master/wg-security-audit/RFP.md). + +## Submission + +Submissions should be sent to the [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-wg-audit) + diff --git a/wg-security-audit/RFP.md b/wg-security-audit/RFP.md new file mode 100644 index 000000000..de4e0b425 --- /dev/null +++ b/wg-security-audit/RFP.md @@ -0,0 +1,118 @@ +# Request for Proposal + +## Kubernetes Third Party Security Audit + +The Kubernetes Third-Party Audit Working Group (working group, henceforth) is soliciting proposals from select Information Security vendors for a comprehensive security audit of the Kubernetes Project. + +### Eligible Vendors + +Only the following vendors will be permitted to submit proposals: + +- NCC Group +- Trail of Bits +- Cure53 +- Bishop Fox +- Insomnia +- Atredis Partners + +If your proposal includes sub-contractors, please include relevant details from their firm such as CVs, past works, etc. + +### RFP Process + +This RFP will be open between 2018/10/29 and 2019/11/30. + +The working group will answer questions for the first two weeks of this period. + +Questions can be submitted [here](https://docs.google.com/forms/d/e/1FAIpQLSd5rXSDYQ0KMjzSEGxv0pkGxInkdW1NEQHvUJpxgX3y0o9IEw/viewform?usp=sf_link). All questions will be answered publicly in this document. + +Proposals must include CVs, resumes, and/or example reports from staff that will be working on the project. + +- 2018/10/29: RFP Open, Question period open +- 2018/11/12: Question period closes +- 2018/11/30: RFP Closes +- 2018/12/11: The working group will announce vendor selection + +## Audit Scope + +The scope of the audit is the most recent release (1.12) of the core [Kubernetes project](https://github.com/kubernetes/kubernetes). + +- Findings within the [bug bounty program](https://github.com/kubernetes/community/blob/master/contributors/guide/bug-bounty.md) scope are in scope. + + We want the focus of the audit to be on bugs on Kubernetes. While Kubernetes relies upon a container runtimes such as Docker and CRI-O, we aren't looking for (for example) container escapes that rely upon bugs in the container runtime (unless, for example, the escape is made possible by a defect in the way that Kubernetes sets up the container). + +### Focus Areas + +The Kubernetes Third-Party Audit Working Group is specifically interested in the following areas. Proposals should indicate their level of expertise in these fields as it relates to Kubernetes. + +- Networking +- Cryptography +- Authentication & Authorization (including Role Based Access Controls) +- Secrets management +- Multi-tenancy isolation: Specifically soft (non-hostile co-tenants) + +### Out of Scope + +Findings specifically excluded from the [bug bounty program](https://github.com/kubernetes/community/blob/master/contributors/guide/bug-bounty.md) scope are out of scope. + +## Methodology + +We are allowing 8 weeks for the audit, start date can be negioated after vendor selection. We recognize that November and December can be very high utilization periods for security vendors. + +The audit should not be treated as a penetration test, or red team exercise. It should be comprehensive and not end with the first successful exploit or critical vulnerability. + +The vendor should perform both source code analysis as well as live evaluation of Kubernetes. + +The vendor should document the Kubernetes configuration and architecture that the audit was performed against for the creation of a "audited reference architecture" artifact. The working group must approve this configuration before the audit continues. + +The working group will establish a 60 minute kick-off meeting to answer any initial questions and explain Kubernetes architecture. + +The working group will be available weekly to meet with the selected vendor, will and provide subject matter experts for requested components. + +The vendor must report urgent security issues immediately to both the working group and security@kubernetes.io. + +## Confidentiality and Embargo + +All information gathered and artifacts created as a part of the audit must not be shared outside the vendor or the working group without the explicit consent of the working group. + +## Artifacts + +The audit should result in the following artifacts, which will be made public after any sensitive security issues are mitigated. + +- Findings report, including an executive summary + +- Audited reference architecture specification. Should take the form of a summary and associated configuration yaml files. + +- Formal threat model + +- Any proof of concept exploits that we can use to investigate and fix defects + +- Retrospective white paper(s) on important security considerations in Kubernetes + + *This artifact can be provided up to 3 weeks after deadline for the others.* + + - E.g. [NCC Group: Understanding hardening linux containers](https://www.nccgroup.trust/globalassets/our-research/us/whitepapers/2016/april/ncc_group_understanding_hardening_linux_containers-1-1.pdf) + - E.g. [NCC Group: Abusing Privileged and Unprivileged Linux + Containers](https://www.nccgroup.trust/globalassets/our-research/us/whitepapers/2016/june/container_whitepaper.pdf) + +## Q & A + +| # | Question | Answer | +|---|----------|--------| +| 1 | The RFP says that any area included in the out of scope section of the k8s bug bounty programme is not in-scope of this review. There are some areas which are out of scope of the bug bounty which would appear to be relatively core to k8s, for example Kubernetes on Windows. Can we have 100% confirmation that these areas are out of scope? | Yes. If you encounter a vulnerability in Kubernetes' use of an out-of-scope element, like etcd or the container network interface (to Calico, Weave, Flannel, ...), that is in scope. If you encounter a direct vulnerability in a third-party component during the audit you should follow the embargo section of the RFP. | +| 2 | On the subject of target Distribution and configuration option review:
The RFP mentions an "audited reference architecture".
- Is the expectation that this will be based on a specific k8s install mechanism (e.g. kubeadm)?
- On a related note is it expected that High Availability configurations (e.g. multiple control plane nodes) should be included.
- The assessment mentions Networking as a focus area. Should a specific set of network plugins (e.g. weave, calico, flannel) be considered as in-scope or are all areas outside of the core Kubernetes code for this out of scope.
- Where features of Kubernetes have been deprecated but not removed in 1.12, should they be considered in-scope or not? | 1. No, we are interested in the final topology -- the installation mechanism, as well as its default configuration, is tangental. The purpose is to contextualise the findings.
2. High-availability configurations should be included. For confinement of level of effort, vendor could create one single-master configuration and one high-availability configuration.
3. All plugins are out of scope per the bug bounty scope -- for clarification regarding the interface to plug-ins, please see the previous question.
4. Deprecated features should be considered out of scope | +| 3 | On the subject of dependencies:
- Will any of the project dependencies be in scope for the assessment? (e.g. https://github.com/kubernetes/kubernetes/blob/master/Godeps/Godeps.json) | Project dependencies are in scope in the sense that they are **allowed** to be tested, but they should not be considered a **required** testing area. We would be interested in cases where Kubernetes is exploitable due to a vulnerability in a project depdendency. Vulnerabilities found in third-party dependencies should follow the embargo section of the RFP.| +| 4 | Is the 8 weeks mentioned in the scope intended to be a limit on effort applied to the review, or just the timeframe for the review to occur in? | This is only a restriction on time frame, but is not intended to convey level of effort. | +| 5| Will the report be released in its entirety after the issues have been remediated? | Yes. | +| 6| What goals must be met to make this project a success? | We have several goals in mind:
1) Document a full and complete understanding of Kubernetes’ dataflow.
2) Achieve a reasonable understanding of potential vulnerability vectors for subsequent research.
3) Creation of artifacts that help third parties make a practical assessment of Kubernetes’ security position.
4) Eliminate design and architecture-level vulnerabilities.
5) Discover the most significant vulnerabilities, in both number and severity. | +| 7 | Would you be open to two firms partnering on the proposal? | Yes, however both firms should collaborate on the proposal and individual contributors should all provide C.V.s or past works.| +| 8| From a deliverables perspective, will the final report (aside from the whitepaper) be made public? | Yes. | +| 9| The bug bounty document states the following is in scope, "Community maintained stable cloud platform plugins", however will the scope of the assessment include review of the cloud providers' k8s implementation? Reference of cloud providers: https://kubernetes.io/docs/concepts/cluster-administration/cloud-providers/ | Cloud provider-specific issues are excluded from the scope. | +| 10| The bug bounty doc lists supply chain attacks as in scope and also says, "excluding social engineering attacks against maintainers". We can assume phishing these individuals is out of scope, but does the exclusion of social engineering against maintainers include all attacks involving individuals? For example, if we were to discover that one of these developers accidentally committed their SSH keys to a git repo unassociated with k8s and we could use these keys to gain access to the k8s project. Is that in scope? | Attacks against individual developers, such as the example provided, are out of scope for this engagement. | +| 11| While suppression of logs is explicitly in scope, is log injection also in scope? | Log injection is in scope for the purposes of this audit.| +| 12| Are all the various networking implementations in scope for the assessment? Ref: https://kubernetes.io/docs/concepts/cluster-administration/networking/#how-to-implement-the-kubernetes-networking-model | Please refer to question 1. | +| 13| What does the working group refer to with formal threat model? Would STRIDE be a formal threat model in that sense?| A formal threat model should include a comprehensive dataflow diagram which shows data moving between different trust levels and assesses threats to that data using a system like STRIDE as the data moves between each process/component. Many good examples are present in Threat Modeling: Designing for Security by Adam Shostack. | +| 14| Does Kubernetes uses any GoLang non-standard signing libraries? | An initial investigation has not uncovered any, however with a code base as large as Kubernetes, it is possible. | +| 15| Does Kubernetes implement any cryptographic primitives on its own, i.e. primitives which are not part of the standard libraries? | An initial investigation has not uncovered any, however with a code base as large as Kubernetes, it is possible. | +| 16| Presuming that live testing is part of the project, how does the working group see the "audited reference architecture" being defined? Is there a representative deployment, or a document describing a "default installation" that you foresee the engagement team using to inform the buildout of a test environment?| The purpose of the reference architecture is to define and document the configuration against which live testing was preformed. It should be generated collaboratively with the working group at the beginning of the project. We will want it to represent at least a common configuration, as in practice Kubernetes itself has no default configuration. It should take the form of a document detailing the set-up and configuration steps the vendor took to create their environment, ensuring an easily repeatable reference implementation. | +| 17| The RFP describes ""networking and multi-tenancy isolation"" as one of the focus areas.

Can you describe for us what these terms mean to you? Can you also help us understand how you define a soft non-hostile co-tenant? Is a _hostile_ co-tenant also in scope?| By networking we mean vulnerabilities related to communication within and to/from the cluster: container to container, pod to pod, pod to service, and external to internal communications as described in [the networking documentation](https://kubernetes.io/docs/concepts/cluster-administration/networking/).

The concept of soft multi-tenancy is that you have a single cluster being shared by applications or groups within the same company or organization, with less intended restrictions of a hard multi-tenant platform like a PaaS that hosts multiple distinct and potentially hostile competing customers on a single cluster which requires stricter security assumptions. These definitions may vary by group and use case, but the idea is that you can have a cluster with multiple groups with their own namespaces, isolated by networking/storage/RBAC roles."| +| 18| In the Artifacts section, you describe a Formal Threat Model as one of the outputs of the engagement. Can you expound on what this means to you? Are there any representative public examples you could point us to?| Please refer to question 13.|