pax_global_header00006660000000000000000000000064140574150120014511gustar00rootroot0000000000000052 comment=f29b131673ea15dcd767ea61f36b225e14225991 tfortools-0.3.0/000077500000000000000000000000001405741501200135445ustar00rootroot00000000000000tfortools-0.3.0/.github/000077500000000000000000000000001405741501200151045ustar00rootroot00000000000000tfortools-0.3.0/.github/workflows/000077500000000000000000000000001405741501200171415ustar00rootroot00000000000000tfortools-0.3.0/.github/workflows/go.yml000066400000000000000000000013701405741501200202720ustar00rootroot00000000000000name: Go on: push: branches: [ master ] pull_request: branches: [ master ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up Go uses: actions/setup-go@v2 with: go-version: 1.16 - name: Build run: go build -v ./... - name: Test run: go test -v ./... - name: Install golang-ci-lint run: curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.40.1 - name: golang-ci-lint run: golangci-lint run --tests --disable-all --enable=misspell --enable=vet --enable=ineffassign --enable=gofmt --enable=gocyclo --enable=revive --enable=errcheck --enable=deadcode ./... tfortools-0.3.0/.gitignore000066400000000000000000000000651405741501200155350ustar00rootroot00000000000000*~ tfortools examples/tmplex/tmplex examples/csv/csv tfortools-0.3.0/CONTRIBUTING.md000066400000000000000000000033361405741501200160020ustar00rootroot00000000000000# Contributing to Templates for Tools Templates for Tools is an open source project licensed under the [Apache v2 License] (https://opensource.org/licenses/Apache-2.0) ## Coding Style Templates for Tools follows the standard formatting recommendations and language idioms set out in [Effective Go](https://golang.org/doc/effective_go.html) and in the [Go Code Review Comments wiki](https://github.com/golang/go/wiki/CodeReviewComments). ## Certificate of Origin In order to get a clear contribution chain of trust we use the [signed-off-by language] (https://01.org/community/signed-process) used by the Linux kernel project. ## Patch format Beside the signed-off-by footer, we expect each patch to comply with the following format: ``` Change summary More detailed explanation of your changes: Why and how. Wrap it to 72 characters. See [here] (http://chris.beams.io/posts/git-commit/) for some more good advices. Fixes #NUMBER (or URL to the issue) Signed-off-by: ``` For example: ``` Fix poorly named identifiers One identifier, fnname, in func.go was poorly named. It has been renamed to fnName. Another identifier retval was not needed and has been removed entirely. Fixes #1 Signed-off-by: Mark Ryan ``` ## Pull requests We accept github pull requests. ## Quality Controls We request you give quality assurance some consideration by: * Adding go unit tests for changes where it makes sense. * Enabling [Travis CI](https://travis-ci.org/intel/tfortools) on your github fork of Templates for Tools to get continuous integration feedback on your dev/test branches. ## Issue tracking If you find a bug please [open a github issue](https://github.com/intel/tfortools/issues/new). tfortools-0.3.0/COPYING000066400000000000000000000261361405741501200146070ustar00rootroot00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. tfortools-0.3.0/README.md000066400000000000000000000041761405741501200150330ustar00rootroot00000000000000# Templates for Tools [![Go Report Card](https://goreportcard.com/badge/github.com/intel/tfortools)](https://goreportcard.com/report/github.com/intel/tfortools) [![GoDoc](https://godoc.org/github.com/intel/tfortools?status.svg)](https://godoc.org/github.com/intel/tfortools) Package tfortools provides a set of functions that are designed to make it easier for developers to add template based scripting to their command line tools. Command line tools written in Go often allow users to specify a template script to tailor the output of the tool to their specific needs. This can be useful both when visually inspecting the data and also when invoking command line tools in scripts. The best example of this is go list which allows users to pass a template script to extract interesting information about Go packages. For example, ``` go list -f '{{range .Imports}}{{println .}}{{end}}' ``` prints all the imports of the current package. The aim of this package is to make it easier for developers to add template scripting support to their tools and easier for users of these tools to extract the information they need. It does this by augmenting the templating language provided by the standard library package text/template in two ways: 1. It auto generates descriptions of the data structures passed as input to a template script for use in help messages. This ensures that help usage information is always up to date with the source code. 2. It provides a suite of convenience functions to make it easy for script writers to extract the data they need. There are functions for sorting, selecting rows and columns and generating nicely formatted tables. For example, if a program passed a slice of structs containing stock data to a template script, we could use the following script to extract the names of the 3 stocks with the highest trade volume. ``` {{table (cols (head (sort . "Volume" "dsc") 3) "Name" "Volume")}} ``` The output might look something like this: ``` Name Volume Happy Enterprises 6395624278 Big Company 7500000 Medium Company 300122 ``` The functions head, sort, tables and col are provided by this package. tfortools-0.3.0/_talks/000077500000000000000000000000001405741501200150215ustar00rootroot00000000000000tfortools-0.3.0/_talks/GolangUK2017/000077500000000000000000000000001405741501200170025ustar00rootroot00000000000000tfortools-0.3.0/_talks/GolangUK2017/README.md000066400000000000000000000013701405741501200202620ustar00rootroot00000000000000# Command Line Scripting with Templates Here are the slides for the "Command Line Scripting with Templates" talk given at GolangUK 2017 in London. A video of the talk is available on [YouTube](https://www.youtube.com/watch?v=UMbicEbSIjc). The slides are written using [Go's present tool](https://godoc.org/golang.org/x/tools/cmd/present). To view them you need to first install present. This can be done as follows. 1. Download and install Go (https://golang.org/dl/) 2. Ensure ``` `go env GOPATH` ``` is in your PATH 3. go get github.com/intel/tfortools 4. go get golang.org/x/tools/cmd/present 5. cd to this directory 6. present You should see a URL on the terminal window. Paste this into your browser. Click on the first link, template.slides tfortools-0.3.0/_talks/GolangUK2017/background.png000066400000000000000000003223411405741501200216340ustar00rootroot00000000000000PNG  IHDRTAWmiCCPICC ProfileXPݳlf%sAr9#3EDU$(J b@ wW^非s{`&( wp@/ " ssc@?)ߞG/[Pzx#=wۘ{HXd;:"_!2MA"byˋX[j+ ׽8ܽvp<|!9 +,xnG6 #oxH!q%0 ='Lߒ!>Z`#r35þfH}?=F8F^a`Â-48bp?k|p2;FHiyW ;"|`䏇Α>h|H͐ã `؏`h׎@h|A@<&@<0_o 0rᐒ|7_,3n._{WR@4qGy=2,_`9 p PD a )  pԂh<`</"X` |?!BCxb!^H UH2,!򆂠H$t :C%PT5Cw^h^@Kڅa8 )4`F0kq7,KeÊaհVX/l [mN焋Zp3# OgFx|߀@(BA#BLD ъ@_/wȨ <ȒJZɦ>kǑ&'ߠ Т P$RRܥئ4 ̤\BSQPyPQ]zC ֢v>E}zzEOc@Gsc-Z*ZZ[R.E:8]]-tg3033x2d041g$gcΟ\\6\\M\Xnn/>-v< <$ >xxk[g7o T <D * Nd|Jƅar¾e“"HE jiQhhXXqqGٰv 퍢UMtMn776?et;w.PdB[m>mw u(ww+۝}x?vOHFw}/X <4~Hcp݇ FF[dZ>jy,u\~}BqcdT'<}fli/>F|<˘/Z`Y~%iQnkI{io߬ h}nUjsMwm雔>|QؖO30~Uk߶·o?g0P1k3zW/q`t0wxxB#. k: d87tE4#Ph 1^,)G))h)٨DUiLi*2?`yCӒ+;ЂȲG/?8Yf9.y>AE%Qec*j,Z4:hCo gƌ{MZL*̋- ,[[fe؟q8v넻'-\b*:&V{=τDEEc bgOn%"RdSO饙H9cY\2]\]s/,F\d*(չXT~Vգ+$WktyԦUw6\HSm;.-n^m~AwC;"Eutu'O9{Z·ңc|Ǎț,ii 3Q/f^Λ,:($Z [ew+tkTI7Л̓;7^|\%6o#߫vb~ګO<>:<$_ @Sp%CJ;J:o%k'oG9@5J=7z##3<)G2:V>HdTtH_WGGWWW\|BbRc%*gՒ#45]uuuXF-&զfNVֆ6 vb<dN0ms.'F\nG<yNy=~31`)ur/aP8Uo|AsL`lb\v| $LYJ]>zz-]xwn9uRbΛܵB" .KKs/U5U<|_ zEmMصں7o4;p'%5-s9wutWܯi_8x@3$4>b4yQG/'6l=Y%|1\@B/b(^3~+Nwby}z͜+.\kv;6?UyqG6E+$r] "1*OeAnN.N.~IL,lQ#kp&^a>~CB>!"Qb)g$2%.JW\.wSBbRr;*7UoըWihjN s76P17b3ΚwY4[ZUX_ɲ=ekht\ą+t~Q{C]}ݽzz'7 <4u}xDdԥ'O/>+z^0;闩s 1bR^{SfλՅ;ME>|ow(:L+>x+~7%(9j.'xL38{? bI 3@8Oփ0>AE JzGd}^:6eB!C4!6bPdC-8( yHCLUVbHCHgqNݖ/VHU UPv>fbvBK#T3I+GN޲!ڈƘDTEeU͚^1Ωܹ 2W9[{/.o:|γAe͑[w[#ۏwvv?m{22, q_}3Nk]wі}w @4a~Bt4dC-9すbaWa} "H d$DQhUt.-F 1 Œ`OHp`;2Wy(<()Tuʖm60 C9efsr՗mÞs+ۈ7ϊ4!;aȬhX$BrNU:_&TRNNEIqQiJy؀ʀڸ wߴ1:lzywoRZZ&XZw,١qwvpޅ儉kۼWwϚW@mf\HjpOcTo''$s\9şv#]LY݌FY#9Z &/FK+&.GW9)n 93 179 1 V:@IDATxٱ 1`ѣ[i#@ @ @ b @ @ @xG @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @k@IDAT @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @  @ @ @@*d&@ @ @*~ @ @ J  @ @ @ @ @ @@f @ @ @ @ @ @!  @ @{w۶!(z *D/\! @h[ذg/c};m1J\ y?s)>5|;xTc7, @ @ @  *@  @ @ @T @ @ @  @ @ @ * @ @ @Bd @ @ @c @ @ p!`AH2 @ @ @1@ @ @r$ @ @ `A @ @ @\XPL @ @b  @ @ @.,\I&@ @ @XP1 @ @ @T.$ @ @ @, @ @ @  *@  @ @ @T @ @ @  @ @ @ * @ @ @Bd @ @ @c @ @ p!`AH2 @ @ @1@ @ @r$ @ @ `A @ @ @\XPL @ @b  @ @ @.,\I&@ @ @XP1 @ @ @T.$ @ @ @, @ @ @  *@  @ @ @T @ @ @  @ @ @ * @ @ @Bd @ @ @c @ @ p!`AH2 @ @ @1@ @ @r$ @ @ `A @ @ @\XPL @ @b  @ @ @.,\I&@ @ @XP1 @ @ @T.$ @ @ @, @ @ @  *@  @ @ @T @ @ @  @ @ @ * @ @ @Bd @ @ @c @ @ p!`AH2 @ @ @1@ @ @r$ @ @ `A @ @ @\XPL @ @b  @ @ @.,\I&@ @ @XP1 @ @ @T.$ @ @ @, @ @ @  *@  @ @ @T @ @ @  @ @ @ * @ @ @Bd @ @ @c @ @ p!`AH2 @ @ @1@ @ @r$ @ @ `A @ @ @\XPL @ @b  @ @ @.,\I&@ @ @XP1 @ @ @T.$ @ @ @, @ @ @  *@  @ @ @T @ @ @  @ @ @ * @ @ @Bd @ @ @c @ @ p!`AH2 @ @ @1@ @ @r$ @ @ `A @ @ @\XPL @ @b  @ @ @.,\I&@ @ @XP1 @ @ @T.$ @ @ @, @ @ @  *@  @ @ @T @ @ @  @ @ @ * @ @ @Bd @ @ @c @ @ p!`AH2 @ @ @1@ @ @r$ @ @ `A @ @ @\XPL @ @b  @ @ @.,\I&@ @ @XP1 @ @ @T.$ @ @ @, @ @ @  *@  @ @ @T @ @ @  @ @ @ * @ @ @Bd @ @ @c @ @ p!`AH2 @ @ @1@ @ @r$ @ @ `A @ @ @\XPL @ @b  @ @ @.,\I&@ @ @XP1 @ @ @T.$ @ @ @, @ @ @  *@  @ @ @T @ @ @  @ @ @ * @ @ @Bd @ @ @c @ @ p!`AH2 @ @ @1@ @ @r$ @ @ `A @ @ @\XPL @ @b  @ @ @.,\I&@ @ @XP1 @ @ @T.$ @ @ @, @ @ @  *@  @ @ @T @ @ @  @ @ @ * @ @ @Bd @ @ @c @ @ p!`AH2 @ @ @1@ @ @r$ @ @ `A @ @ @\XPL @ @b  @ @ @.,\I&@ @ @XP1 @ @ @T.$ @ @ @, @ @ @  *@  @ @ @T @ @ @  @ @ @ * @ @ @Bd @ @ @c @ @ p!`AH2 @ @ @1@ @ @r$ @ @ `A @ @ @\XPL @ @b  @ @ @.,\I&@ @ @XP1 @ @ @T.$ @ @ @, @ @ @  *@  @ @ @T @ @ @  @ @ @ * @ @ @Bd @ @ @c @ @ p!`AH2 @ @ @1@ @ @r$ @ @ `A @ @ @\XPL @ @b  @ @ @.,\I&@ @ @XP1 @ @ @T.$ @ @ @, @ @ @  *@  @ @ @T @ @ @  @ @ @ * @ @ @Bd @ @ @c @ @ p!`AH2 @ @ @1@ @ @r$ @ @ `A @ @ @\XPL @ @b  @ @ @.,\I&@ @ @XP1 @ @ @T.$ @ @ @, @ @ @  *@  @ @ @T @ @ @  @ @ @ * @ @ @Bd @ @ @c @ @ p!`AH2 @ @ @1@ @ @r$ @ @ `A @ @ @\XPL @ @b  @ @ @.,\I&@ @ @XP1 @ @ @T.$ @ @ @, @ @ @  *@  @ @ @T @ @ @  @ @ @ * @ @ @Bd @ @ @c @ @ p!`AH2 @ @ @1@ @ @r$ @ @ `A @ @ @\XPL @ @b  @ @ @.,\I&@ @ @XP1 @ @ @T.$ @ @ @, @ @ @  *@  @ @ @T @ @ @  @ @ @ * @ @ @Bd @ @ @c @ @ p!`AH2 @ @ @1@ @ @r$ @ @ `A @ @ @\XPL @ @b  @ @ @.,\I&@ @ @XP1 @ @ @T.$ @ @ @, @ @ @  *@  @ @ @T @ @ @  @ @ @ * @ @ @Bd @ @ @c @ @ p!`AH2 @ @ @1@ @ @r$ @ @ `A @ @ @\XPL @ @b  @ @ @.,\I&@ @ @XP1 @ @ @T.$ @ @ @, @ @ @  *@  @ @ @T @ @ @  @ @ @ * @ @ @Bd @ @ @c @ @ p!`AH2 @ @ @1@ @ @r$ @ @ `A @ @ @\XPL @ @b  @ @ @.,\I&@ @ @XP1 @ @ @T.$ @ @ @, @ @ @  *@  @ @ @T @ @ @  @ @ @ * @ @ @Bd @ @ @c @ @ p!`AH2 @ @ @1@ @ @r$ @ @ `A @ @ @\XPL @ @b  @ @ @.,\I&@ @ @XP1 @ @ @T.$ @ @ @>oa @^OOx=V,Wx\=G`҂D Z{>׉ŕK+^kV˿_),_S T쵭חrm\(ƶ.# @^oo-7K  @hB7&<;oRI&&l<&)ltqwiv=VvW(rNWnmy{cio6;xznfm:.gXsֆ-^Ziq''S)_aڻVS{mhQe-SWnW}[򯭷 ~ @ @ҿCЪ!@WK`vM6&:oo+zh۱3bx)9)Xωu_U~iBܤs}}N+SfBEX㍥b6ɽ yn 1cuo]js]Dx{__ۺ^ܵ8k/vǶbWnm}'Mwl[zmjobŢ]/O}k/܂=8-ԏy1vHw\V+qZ(-byn1[X9_Lqi_̻=.VwŘ @nOne  @-D[A{#Dڎ]?{l-~zhrm|){|h[3w^[_M.mom<˽wv|NwOZ$X>dVݓˋnbx:VGսzJkqy땫VƏb̬@W-"-qeV<[l\ڶvnQ|מɱ^6Ak\==fv]ڱ>Vʬ]=V=F vtmkqv,X߱me+|;2?v?6>w-T޶{{Sz-{gמbV޶rkvΎg @@Q-LÑ^ MZ7Ay[kIb5:6q17v?W]g4xooiڳ6W4݄:Mtޖ9}MW+[tCy+V]8*ocg{_U;VjRUYf_LP-6}]&hNjݱv/bnX]+MwqqT֮WW+bx2Ū)Ƭ6.MtkKdz==.jOYg9DTqX&K+q׆m|{$}ך/_z},Ϻiic*SK8~To}Lm/^׎{m{7uuo6iu[s"kg+&|M4wtյWY=kgxdedeŜ;vx];koci{׮_mio[_gg̕m<|ݕ}{ױ&+&w[ٕodپ΋1kXʵeT?v\(^m1kC1kOvߖSkZfٱ65I^Q{۳xmakܙMwmy˳{Q,F9ߛTWU{]ږ0B@ekzV_q֮*Ǯ/y^~V׹q{1 φ݋Ufmt/[\yί,VOsʹX][ @x.`Az@WZIp:~6@Tg7q׋_=\;^/}Q*m{~6Dx{X<-wl}=^.^8/َpÍ]cAw^b5v5{iAsמʿ8)[λ^xi_WyV>gxU-4F(g؄}ez>{Zov,׿8m8?/oqWPsm}( ΅OOYZy]}loa{\c󺷚m4w0/;__ܽ*ٲuֻm~ @:#YPyWo=wުvWgϩ"/f'Lzngj[ɟ7a滶2?ݻ9c8B9%@ @3wZx? 4Q`{Mm9D`j«bTvsO2?mmZ}I6o"*;\i"2MeP&dl{kW[)xՑg}u+=La-c>Rr>˞{.J3w"4X?۾/ loWܨʵs-yYK|maϽhmW_TLm^w^_w L[$ybi_>Vo ^;M13U[m @}淠N@EnBIMuܾMOm뽁u\-έҗ+f[}\7 x;y>絳Mulm]k8M-掏_:k[\c5y{.cտ:ןm26?5ob[-Z|h>u,o=.oϟb0ұE&o\ BȞ{W<=z-Ξw-XWq>k{S /vXcmVcu}\zǕ\ $-T&ۜz2寯-|ݧ-TV݇bEX|G @Z>[PykME#@k/ 9yt?So<=doiD3NM|Mz5VNmygkMeW_1me[{NjUXʭ q?cu϶/{}&}'ns g2uvO͸Ηر}/Ύ~6]Njʝ1VYεM{c6oqy[u<|*O˷>\gyˠ|7/o݇슛]kU{ۻ^s @jAe_XBޗ훜 c_>6Aߪ&t6Irr @^ q[0Z M^uvuԵ=>cVwu5ɠwV^;_;h;1_Z{fqGo;[Zv[s_Xn߽X)n٦y1o<'ʾ׏3ўwϝ&jm<4^U@-8U=޵M|vXM׶rko(Nm*o)kϋʞq)wx|[?;޷|{oXٔ 3G䥝m/Zヨmk\au?-"{tŜw<-ro3Rsߏ,ٟ)u2,nem @@ *BQGӗx܇ϹYii//fX_T/}hB/z}'GG>я>~E}_Q@Mv5Qyk5u-[l2~ZmK>6ԞWx}}j[ŏg-^x'g[y?_Ԧoy[qH}/w>~,6^eCM$eo gioX&p;PmrxOʶWwy:c1PO3Qd7mkWBb}ձսjꩱX^W7ʮN^֖ ȏbo)w__>oN׶z1u/9~sgZWORZյ8tr1Bs}xkk_ʾkkQ>kZʟQL S26 @^,wʾx҂|<|Ç?OO}BܗPŢ/rrQ/rK_ۗ}c==?#?rRɋT^M^zkitśc6 T^61-D򣗟oIzy4]+Iw/Vem꼽|M-ce8;_צ[}]gׇK?I2drYu`V_;-ou=ʭ=;_ގ|3Q[kc}ڸٽm//6[o&Ǎ2=>ے{[mXw @Q>gTߗQ ˾>@Aŏ'~'~~vޗs1e_Ec_hҗف~O??gnŤ/$=|?ѡ[mM4)՛қ|ل9~qKFeIKkoω[ŏ3o;lnm[5ׄsQ"9M7fd/ںY{t>^ݣ3ne_{l \Ww{|UбK+vq_=|c{͢rmg}/vdzg-Tb֗b.6צ[RRⴕV[3e~G鵳j_c;_'[j+uV}+NgS[ml~ϳycy]^o.}GhX}'h^b׆664{{V}k{ݘV>7.SO[o:4۪ߵׁ9N  @}/xTrOOyORKvޗ}Q񇏽W$?c?v[DX_&Vܟs?o ӗox?޾d<=N+#^:uhQkyv4ϭ̮5yǶ[;&6{ڻcjxVܙvwU/ƎgVkqT,_zhOm=~J{灶&gVz6ѺX>m~+f匵x\kO\Җowg;+W+_z"ٿXsY&h;_TƶwX|MtvUXm{Xʗ2՟YeVݽ(LOc;֖bTodz&a_/2*t\kOy-Y_{my7usM̬~/8k Y[ X-vYWygK/~wio'oyuz*?_68w/ogKsߡPkScikӛb @^I>S *}he_|Z>|W~A.~>|wXqBvl}oqo~--7`Iy;#&/^hBף&17kO)[y4Ĭ]M添kskgoc{7qigg΋jCo+uv<8?v8;=累r\C+aŸ91z{Iƍb4Ƌ+z<狹hrڱ+^{>Re]*wngi1eS];W&bgddnSwmh|}9X&GFM0oceֆ.ouWgy;_&bU>y}^Wo1o1;]G=nPZ _]ŭm~lת~ܶf-ǎՕUjwu=V_ox*OWZ/2WŅge϶zw?^}7T?}*fS޾ԾlzNuwcpvx/k_^G @@y_|~}=n뻾롽(/Bo'xm} G>ߺ-})?|7ÿ_@ζMG^i"I&F7 ҵsҢ&Ή;!xz|նlk}'&6q֗|g\^q˰gU}/>E=^ϫVMbЄg=jG4~lVٞ]ڻyڿI}yǬVtlӤr{`mrt9c޷ԮbW/X׳LZlv>E3y^~UewVՙR囀zMBoz.FZ^[mgOyA9̿8o +m_ݳꬮϺ߱,_6^KյvwsMm;v>[c6Խ}ϝ'ݫU\k?Q-FuvnC}mYV_Tחr)}b_ol6:_ܕs$@ *yZPCw_N~+E-ޗ>!F= _{??qcI=,DD5Ҿm)O6cy6a^Kzmr#xl%OʳǧyնX=V6a>׿y۷i/F{mk}]^[Q\獫W}vƸ?/ƹok6+o[;VMYy|/:_V_^ʯsbtgמη0=nv\[lXvw+q=l_Ugn/cכxhs孮M藷E&υ>w]m(c[mmڳ83=xԟ_M՗ݤ}mroQ->Ђ춫qcvth[n~GCN>wU>ԘZw+N.o-boe @@m{_}x܂'[g߻ݘ__z;bחcۥKʿw[L޿MTOO&:դF:\kc2^3"YֵMT}3?VnMD/c{_/m\}Z:vOg޽kgdqʷũ꨾w<7d`&&=bg1s˂h[xGjbru=z n > >WOϜ?? .壽/}KK[N6$|g~m/!֮^2T|7}F)?lxeג&vkګ&<:_+*loǵ}q{s1qsضz>߱|+ׄ[q{K=_XE{^kz:;svog3NJL?*Ӿձ{X;VSXT^TE1קzl\\W;΋I\e΅^ZXŚ-^|&;=bA[hirc*S̞ mշP3;cv;ַ&B:ڞYmɟ[CSr٭b[-lg&՝az|_gk,SV׏սX?tQVzoiܔ2)W> p ~|}{=Oϧ ߏ{O//w~Pκ j/T~י^6_ ݟ/|kiwuc/r~U>ݿwğ?#??_K9???/|?||zxE xo uIcʴh((ʗvZ<-ώ+Fmk?o]5{ݯMmՇy|gǝ/mSWWǮZm"Qw{2mϙַ}{\Ti:+{sZ;NMV:7&r>z{X_v6)Zm+cylgMw}x>sb=9+Λ)8-{;{]Y̧+W{}^Lz^d~-t#/"sI')X-*To=[\h˶bqӾo{m]zmϳq[ݖwoA`{/(6Ϳ%Ũ_կgTݢW>{2kxUBw[׷?VWyv|ܚpҹv?g|g^kG㮴ܻ^Xخ @zg}g~އ{ZS__?]}m'z{jl/J,ՍYzE N{i˿o_&O?yVb_>Ae \o%kOC__q{Ї>t;*ЗW^^_>P:$Q9m}h&X^m:zXګ~[*> ԇ}ȭݥm«{y_+COmggv}Q=Nkg{վE)w=u|şO~}jo+}m|۶ŊՖWW;o۽qw_[GWq3v=^c݇ݻY.Vy/s?xs w4Kn*ڶg{Yf{{Te=^Z{ёw]_{e~Ae|.V{-}/o -tgծ<ūCu7 _q}~r_V>S4 ӞS}k[upww|ҽjb>ߖYbt:]/vۛs/mkc^]۞-w8}janc9})o}g_}y>[4{ї}ٗ=os7W.}6=_ =c+җPza/5}7XO×|ɗ,/%S_t/`m NBQ{?_ӂ~sEuH#@%kD ~lcyf4a]&.cioac{ܚpn\)~S8g*sʹ=kvuαV;ʟ{wm:_Ǚl<5fw?:nkuݱ*vqda[yJضsdϡ}\{es2cmZRߗ_u^{s[={<ק_Oϝ 8^8y9&}*VmXhu/m}6~vrZmSݵPO]}d>:g_gWwu[mxV=o:@6jwy2hqi{^w Bh\4!^̴9a=Q]lң+"EW6&2͡276Vmyo;O֟d1j_^ϊt/w}[tߥU~[ c=qqP{X[kwmt/qս[_8vO{\zuwp$@K` {ص~q᫾nog쟽5{I_WnIgݿx  *}pnG>k|?ӷ_}Oa{_U^ڏ/֗^(r} } @<5Ɋ^CU{yz5k$wOkXq{*fdʽ Lz}쵲c=mǵ_3Lcڕ#*{ձͶV->lسc1gOy[3iޟ]_;f6/u;֏3^mg^Xg_L[Duc븲;|._m]ŪҷUnuvw_m6bXҪm_:׶ݱ8},vkW1}N;|v6g Ǖۖ籺nm۱Om+S=YCy}+[CD*E£1ݿ<[imqh=|1ԦCm]`cg{|nqۋX ]-P>+w,2~̥>۶rϣ;*F޵s7vZ k?qնM|[jO?=lʳ/~k u^zv_}mWm[>(Ez :}qU_˿/"{>?xw}oM.Mz-h5ZMw׍=uo[صYb-_{=ZW>o64mimK{quՎ{ꬭUjcZ_jcw~/ogǽ76ުkc1Yݿ [8{ݽe~yoi֮m3}j>9*|xyJϹqPsMv_;&+JxLV寎u}[^V}ʿ׶Tq$k/mwmqx-_劳X-} eZz<+on3dh+ʮ͕o޽מu*bXꨯ3_ʷ6m;Vʯ̧zVk[g\zmLfgc}OB}/L{NK˲[ti씯\Ũú^bm>Zz}ݽ|QlG=ͧ뵻v΋SZcEW-~j,_{;n>VxY_?xm?e{V9:7ʷ[PڽT}o(Vy_Ñޛ/3Hﵽo;y++o˥I+ҿ1z3?-G?ٻ^۶~T@A )0H!XĨ&OFF.F*)9T I$~~?4s{ڇђ>^9䘃E؏w󝣷-CYu]wqB/w} ϓ~)`ɂ9Փxuv\ zCB浱48ƅ9v5~-0ԕ&}4%)zNpMG6N2a1`/M[?-<wrsی[5SytҹNWƗ.6\ _{I:IU}zin{Y;H|6vo*hjCm?ZCl1^bhuJ|H,%K.閽F x˽kv-r8'١hV> Z۰GC=>d|¿o6mA~<OGڧ_~mD':*>VUGu8 >CyɵOK/]Op;4q-چ?$@Wހhs?_M ?|<ӎɕuAt Ym,9+Zv=pyؚӒ9\[;YHn^L]E{k5'܇֢`{'=_^38w޹<$9̹?Qo,Y<| -\ F!ƚCy˯G'ǭd! 7F67MǛ[GűĨX$}@{L/ǿu{fr<5:mDgy|*ۊpB[dúG_ D>j[k |f˗h$:bă< |qFxGoxhK|65Nt\vY/>y;e \6g:kE|l* ^(|A'ACL="mX驎`|L:8 OdӋ> Odcko$YkӠ? oo8l={'ˮtG.l&?|3~|vL36lmp-Xډ[:x\#V\'}̽/Q9X疝jO>o&_ mP)L5Z}tr|v90GX9n p y9^'yӜ:\ύú2ZIoE CsWFv|?yRT (;FENk`a*0g?L:\ .PE L>O._o}k(*~O؟ʫl~gvs(?GvxtA_~B??af0a"d\I ՏX\۩,S}* #\_B"x,GC5vc:~phI/|/duȍJ_|O}+UNYt+$},-㩞/@{9w/m2djSu>#q}C }l6 88I^l⡍#K{6ghdc~7~jC^8liҸN&e5HG>|:6%ҳmFo-'W?>zvؽ|]:g Tm+ϧ^/ր<ZEĨD/~Ўtb=IlMD۠/?\/߉;⠾Ka[5>KM}߼oN?bK=P~c,70qVZۿ;d!gnjp l~#ѿ˿,rG/>7 ?C?<<.\ p_* k1={xぞ~S6|dkG4զvw4ѦR f3$Sm٥~`n6jksNfܺzHWxI*[+|}d 8V ' ><&= +++ѣKځWeC%6udK]Ġ yeh,Ƣc{wQ_ Pz&c srtB,>|ܬ>:OEߍ[S]-FG/Նb #rm'hN%g/={`=`,79xы^t=/lQ;o~󛏾/7?Әm~Vf8}YhNa9>9QN<- rɧb|m@>M7⡍mx%/?e$Mn킖]YO-=zO99V_cz:(;9Rro!$Y&s@=/L[~|GLJƦ2 <1NjX8ܰ&ֶHlMwQ/ : >$>oI}7(mvP}p{|~3*7k|!, ۔3I5ŏ@!f=?\ [vE?$6: ږ~.v)|%Fl, cs~u8H;׶͗6];zK6hs}Fb@#6ňvcϏȏ,o]={`<`ʿՙ!1|5[=)OYgOկ~uᆏxml7?6v 0Egk_x_z{{/}龹yֳ\͟ԧnvbrI4\4'07Xѫ_W Y>p = Z4G/_c/ˇ(jd|[13%-l񲦻 X0ћ _y|'7Wvq:F# ?d/9e$+lίyI=k%e=(흌5[}O`4/=Pe/jyu*j %^@9:}\݄IM鴦U.gy'8|=F87^G kWl3<l;Plkl2ƳyCt6Ӆ rAOxl[#}ȎfSݚCfټ[[eV\o3{/Cs|K/yK/v590 V=p=p)*:ŴC C!h1xY$ RQN@C,^B|/b>Nh7M 6yHŒ2dTFGRniYE| ~Jm!rUEW7t@/_ Pwk!_L = xζ%rfymp-%&-f]KٗA|[,S8|<>_zXM{v ڒoVە[l4%#]fTƛ2~2¤=+͎w}_GػA8Fb]ocWm;hs(^JGx01͗y{Ce+^e1;$&|s̜c2mnYkxJrszacp$qm$yüNtk he}Mss!|a\t>6 LYA=i~I.ǽr`򵶄34?]Oj6[:NXt^f&@6}J`3eNc)p=mo[^MoLTMIMLUn+7:1R1J4e? B7pOGsYb0_13]/iڠ6i.}舆^kp5ͭ/,>;#)/;@IDAT^ƂMCFD"1b:hɇ|tڌt]?$HI8{3k'IgX|.;mI?o$ֳZ"޽c-OF@eq+bv҉~ bW^{lNtp;DJ5态oɘ4uRmc#l?A},u xO[ݵ=LOmm|F'Gۣo~zڐL:K\9<6$߉;ϡ`pv084gz׻y8'>qyKxk2OY,k _1;߆!Ϝjַqwt˭78W c>?7'Nwzگ0׾ D>>ћ]{5/;{h.3w7̅CCg?%Y-܇>˼/ ڏp]v>p;>tْG;p=A˜?0_z_h;OxOW|}hrlc?.x- ׋hc]v=ng"SK o\AB \`_Q35@Mw/KGa}b$Z?շs"CrU.է%tq߮f(@68;Y ,8&T7ۥx]k tM.;.:C JzϳYv} #[A=U![ǯ/lW+fgz, K[x ؙͯkm,i_>#Ϛռh{c^h{i*>@ח_\[ek[2)'mգG|>K[ <5#Z8hS9p̒Mn}ý60OKڅf8|hKδkQsM)c{1c#s z}!o#&a-g؈2/=G-]elK9*йb66}؄zmO?-8ɷd6g(3w_ ׆9'A6jw(y߽nW7\}ny;1:1z宻ZKܵMzy<`}_lyok=$oy[z|5g'~8=~˦e3}W }ct;zo8Xx_E҉@kH'2 .@_*l<6:z _ӟ"C>/x?|b:l %e/[[|s"6z9õfǕҺ ":FS(hu:IoxA?\r 씐kJYg : rG/ ZzXJrw={xLIN_'IN2iIpAyX}>)`/?dlg+KIVV>icymu>yni$sW\;-7Cx{&}g~Z=\8g|/Oi'${Nol}:m ۽}/oiOFV}z|ְ%wsu-$;F uT/mxw_?o2Zmo>ʢr騏ڴM_:iViSu=(򕛧KtS陮t_N?t-+?T<ڮ)W~eI R}rF;ekvo C/-`sݦwt˜ķ B/6$UdvA*™t/l߈ Aoo6gzd/Gdۂuv7(_*צCg,y~٠ܡ {/gv=ߥCdS&Y h#|CGO ]@&<ㄶ*n/m/6j?z jMm6#-k;k,W{뭞k{ڃ>GhKx}{>W~~~WWOdˍAS Q, r~s|xΫYE@:ib%O'4Y`7bL?,\^{`{@_{S}|lMU,gnW6YX ^ˋUӗr <HoUY6sO:{_v?Y'$ O^YLu;_i~r_H|3} w Շ@;hڀb;7<'va l=#Lc{>׾x<ܡFGgE6 :|m:s],yV\:hw ={,}<Х/h㱟ڲ/H2o]xzaH/,kd<9Yo~=Q/ނp(a>v 6ު0gD{EЅ_l6;X8t08(֔SI։x&kё,~c6dκ[Cq;b-F̭lk~v u{ݲ^^zы^‚]ޒѾR ;կ~v3Mkӎ=pi*UǰpĂl sRhâ@ h NbыߩwƂX0[{㖎b  =v٠cP'? 0);=p~XLd`4|'t**C4ٗYOGcf~v_J/S~vX0vzt}lȞl/Ȏٔ껞<\W\Q[>+oO5'V^ACsXuw"h?Co*Kd#Kȫ ϔQUg{M1y0`7߻! ~ڣ5Wx/6R@x~$?mD"W"?|oC=б5.蜍,ela롞< |= p5c]O̟ϒtvrp ౝץfgfxU>ef?j/z>>zd,askh WrX/69E7F:kW' ՑE&fpgl;p9#K<ჿNl&/Hw? s_QB?rpQ/ڟrϡ8I/pҔ}L  mU;Ool(yN+VuMok~7js 0V \9ZP>uq>zk^sGuy58O/:180y߿^Ѕ_y.wy碟?Q~@/74Ghoh[" GL~3 d4C<&wsȿ\|~ 6'Woa̽9ؓ.,,r6!v۔!/l/U6}_kɔw wS[ne_(3  9n6׺<ɤrqH丗gtkPW=|Y\]xKm_6觵EvMbu!,Zzm`ͥ_֧: 8.η!\k=tGCF[ۅCGq`- MTl*cME`bߺ6U ^Ig6GK_zulO:6ٸ?M~ |td_{.^|Grq Pۑ)l\<>BxȐF>GMSxbm;KnVc_ᲃl.F7lʴ,[[|ҩBЬ:.{%vh{>:|J^t'9x$Kȧ;)Fz40bjSrjWCNſ ZW8|yO/n=$;ʿhC0PڵkĪc>#t lAv=p=`3'zh=mW=¿_p+Sz aC`.1,{{@OL% k17z7!ysq@5Z8W AglPn>qik<&]%6ֆu~/?w|!|-]ӽ|$ ߴm7>b/o<}W_iߗ}S;IjC©/_7efu6ا?f@Wzkxh1 v/kLE~xj?ڂpm'ZI}vq'ݼWR |&c3~vq uR؀ξN46V_P]UL 6l<{)g}G~!G1u-m^ӻCOؘ[pΊ"!1o|Ɲxj-~{.ƴc%|gZsV|cqZk7/n7uvUoA7h{s2e.=\ ua~\e|g?He`|! =:Jvsu9}9h0>@8w)? >{bfLڢu,:k(:Ozڋ_%t,b/۽z?NZt.[]6Z<<{2yx<՗XXH6GϽأ\Zl*e2de=yEkqb< Ņ{L=9 עISz)YM4v/mq^y/|?u4%cv/.Ku6?;lgw~c1 .7գAA]/P\Н 2VWE>Ed k>I21Kb 7$N7gi6=M9xC2u'MxK j6Knt?zIpI 8xJAN>?o8 7'W'tGyu啯sf=;N#@Lf)I6Mg%#># g9Gv"xƵc<< z6PEm3.91_4AYz\AwvA`& OGh#T?0BlZ^<ŋ"['э-m /\㧝jwVvG={Ǝ9~SWNs<}8?Oyho]iv///cZ=Hc3h5Ї ^c'][t5G9p"1T›ph3u5ց;4zO/I|e/sIzO|=_/}K'z!ǵuٌ__=\ʁ 7`φ /s^W A Ox򺛎7{zX-"L&jɳ1cy/Tjb"CL|#:^>oIgF *5vYH-UwQ:>j|f6N>Tɧr w~%W^l|йW G75xHolO_'~tOOѷA=,~^L9 t ;w㏃HO[8>?lߠq]l^t)ęvA{}|lBCyVg={ cX㓱g<wN۪76sqלg<˟YRp>8m3)r\jC4[|.O[_|9x{]w=99U-k r۞2n.@E~7o9լ#'o|uޛS$t~߰q 7t~ b)ջƒI҂C{|pc{ 0'!{H4dJxB|?6*cKmH{ʦ:?ϕM˾f,$d]-{-,[_五%k/E[Yr\S^?K\=Y}'xlP!m 7g'XׇW>b!욺֞'󹶫Ďw򦿤xtRWpࢩř6G8b M߄7xo 8A9,]6Ƽ>fx?}9JT>z밄tv4y턆]hMɦCzNF' =8כ_p=_j/'Y7]ĩ6<]e#Os-kt]'|e{xk&Ͼ->ڀhܳ]jl׻v|yb]ƗʷrUn 2I ƯӀN4Nc=խ$:u[i4z.?|aCD)_^ʯmvtbJ[uY:8tjgˆtN3ac4l7{||܆:tӿ+#Yk#@ۖuZdYЅn Hy&<<m~Y0"6/Oܮ=R[!oVvNu+LzU9_K`],!u\Sb sbMm8(pNW<9X  [ԋs}<G'UcbO/5_}RfsDOAP`#}~=,o 4-|If\}<~y П\̇t+MY <8v|w3)GKC6ߤ]oՅS=~yĸx3)Ow>ح-qGYa<|ȥ>Q;-*-y}(}Y_?WC:v0&ӍXc9JoҸ?cC'K>q G>8zҸᲹp߳C"?-cy̯vRp%h٢Yed[XY!Z6bp.@+}SϗѣeyғtG>rS#yL:m!=hy OXә:atv8&PUoM맮Ԅf 0'o\=eڦ/|^,Ok˾}E{ji{vQʲن{UYj1;y_n|׋B~KF<[ΟO4ӧ;/L>祽|Jm&{$= Ər2Ǘ \s/Mi/\H=F\߰LNXxnS9fy>pʫOs ezI,C Ĺx 31mZ؀OXM#lw;q@ArzKb:Ŧo}^d<],>*׍]Y|AoN/>SƟU  ky,=ڌMᴻ8~t<28D}ndž G>6^bզ{vx4=76j 4m29?wAO}:%>+=I9yX/t lfK=Çٰ lF ޞ/aC%]BÓlWm`?|xl6Cw694b{@p$m:a ;g3_9:6$|)+gNy=A)W =pnT6 ;\V:Х'?cy5!47}E?uOoh;m!Px[9yY&:־,]T:gb÷-9;KMak92nl880ż ܟ'Bc3e jltX৭CK 4g_=%~&VYt>϶b]nlA`]sRN\JA6H1Rdl^,7>W~)kK&s.T;QO۴9]6-b }p%doWt`b?{fA&HXgҋS#كg8ܳ?4^G}N< #G?[chն|h;xCRoFo!/9lG~?|~sgb]zta:[1}xw6_)#2'~n}/`Kl-"={8L\Ud4&cwx@6E='< G~{ `̍[`,p?c^apv}U]s9V]x826VY/\woے&㫵?5G/s5bux1Fx]vPnmx{1y֮yk7[;ǬOO,5zn+ƹ^w+qLAc׿~#k(,u* 9ǵ`:g,Pዏ뿖Co ?ɋ{~d\KwflSZ^ oWRcqXƚ8Z2I2 Kxˍ\{XHkv+6Hl+~LH͔qM"NY>PvG1^h_XU~g$~yk9\>,^u(| G?F\,OH^d"x˭ڂI*ߢjeڏ?b]< ?=:=zc8pOfqA GB=kpŇrM'm:zxn KNe#+b=ހn- cK1/t#zիqcrm1 c>WfLO}j 2:41X9ڸ?O.[/{˖12ΡsPN~ȷGOtP-=Rfk3cql֡r=^c{{?a N^NKEc6Ki7kG_r7:¿XOb~_8% [?2ڄ^p}'z3?{^րp{x.!f=o >QZ'YAŽŔtVZ4X-G 'Yex,<׵Kx7x[]/|'@hlLu\fq|>^ӟC cڡ6O~ySj*&ĂDy`͓I'O1>} x/rd |v7w[=As sN#A2SyA9o Czó6P5=KAd}滟Ξ3ItTfvCص7R}Ӛe eYYx CzeoWO_tB?ffVFGH6[iLυd+Z(tٲe, &#dXt[ť\:Xa}Bxlm MtɚbC|fltշb$Kf/fG/;mг!dYlWw&ķƳw䫥r?s=uO̳inM}8Oӽya8n}ֳvӀ1H1Ը-6l^k <h4_?t}ﲹ޸cg>Hw6`c,M{p-YH`7j?7{ Ccfs?<)OY֌:? yK_Ғck;\>w_=nހwj+g}_^tbaFO{Ӗ—Sfh/_{~~m9 mDokWp+lv @K^FhW~F~w[+w:( j'N $,jVT/ v|zc7wma??L!D/u (3{ç)OQT䪵 ==Ml3ɷ(s-{ ~^>S,Y|yڳַc_6)cxd^L?eENv;< K]ٽ o|į/cئd{^f^\Z:c \ڡtLA>6>Y苻Zmi\z~_SƗ~Rө'لiɺ9HyԳݺ$KpʇXShO*+"xbC젋vֱ: ]?XO=vI :#C9%l!7=Ht#k3)e6dᣝC?rj+,z tYߒ~clë! F2`6;4l( mB3wfg|醯]2 Dٮm<mkb_kSz=,' z -b\щO>$>۪lc;gheN0ZpbMs%Hk՗~u|Q[⍇vg0>͖ۖN-#✮ԃYw5&ѳMvb$wmSv<п;of~Cb+hloOo@a3o|?FLzqÛ-Oo,ЫxɁCe'yʷą?qY[]Z]o8o7o`8TO9gW}j o87OO/ulG{nՃ~@,AǞ 7?̺y gG҆=qK9[L;7]vm5ySoښOqv (Xw}<G@dAfq¢bÑ#8uid1oвN" J:tW-JnL~rh]oթM𕑥/D&ؒʌUlk4wvo^^ Onk1??lO_,-s9}m<%J >bKYq2.1GGuu=!k'έ+X'HbnsC[įGuU=+ƼVtofyh»*ymbM;S؟}7~V%ژO|7KpW}K[GT'.'9l=fc /495k.]ogg!3o|F4ʍkx'L~drp)c2ԣ![kuh=?xf@?m>|OJf/H7A&9rmg|F&7+3tp< '|gs/{gtV?_;ٮYfX1PE?ظѦ6u$hTg#C['|Wv!%{F 2O|mLy;l3nv6`v,{C^Ŋ<8;l~L=Fwo&OK\_ivC&ӓ@IDATۄE:tBowFů&/Nf=psSX_kC!|3׾Lw s?sO oo~ N6mo{6DVw%o-a~Kjx@:-TL P dQ, r<ӧsYt:f86hz@3}/RǵݧG|.n+s^UVY>%s}wr΢ypH?ŵW-zt2Q.~lh~4?YLU>׼o{~? y<(o0 ٘?͖_~% _RkFv1N؀ qn'`:`B?T|ԃr8FH'oN{1 r|j`plXіt>gW—t遆, <٨;qtkU:f6[k#7?ʃnʬnGE|M{7C⣯m6ڦy-u0_O>kzCv?cbC'GրB$~m:.SF*WM={<_sr0Ι?lЛ[ZK恊1//,㧃c67pI>7qo^ACGGo1_o6ٌ%Ip;9ha+_^*4ovJ7?\epkp5<mҪCakc _ђ_ßZIUЛ+YH!YB~:$ܩ,yϲӧNvp'@L_6lg/^jb5bX4tt|HvnRx]|l /lOP'Wk<۰Gċ. Mɕ: …G<{ݻ/Jwuzm?ŝ<<6a_kmZ 61 ayY|$/ŀU<)<"O^Vd‘lշ_C␟O.,<,F^PXx lҟpl`;7|䖃"6S|@U؜鑎k?k"A8uXB:vs2I9[ړ}m>Rj'cFOGNɚv[k;(bϡ7[>Ytf::k5xjGm{,du_>_P:C F+voO1.O._?ǷI~b&{{BuCq%O;G:Iֵ~{Vdev={`{`?Pxw\Z[{0eqۚ=wݽ<>=y !BjS5]<[x fI6@]{Xg9@r~}|ͫӑ-!OIzy6|<LAm=y\5Y~cq[~6 w-_W.v.sSir[AlR&Q8$A3w8s uu)뢯{l8 Eb-bmq0+3r6\gx6_E3ěn,7cⅇjw#t;ArxzЗg4N}a χNg}"7_W.G/9 ;786Gn:$-:i Oxrq]Q9pć79OO.1␅OHol]+)>yR{?/Q?aϷ<4o-*zC?M6dik׮-B,'N1}a>A#w=%1?BonOgiH>e,ʘ:L^,]?Ño*[8W=C<6z]ރ8y(m gby :rE= yX#'[[ys( l>xH{k6/2=ܙ'28Wm؋ ˶bMMFK rk6J@_}Cr`gMeUpG<eJix>5?/kuuc]vV u@|Y^ݭӧ.l-ƶt_]BŢIS=\sOs 9pڑ,7m@:çTNӦ+k.*;G^~1 ʧ⭱>/#73whn\ؼ7y;B\?ub?[b FȶIO>r<)ـGk  5>{md9< a0Ql~'U_Ɓ |J80+":-Oo9?#J؀Go|l7bޜ~+ݡrPػWےKFͩ1t٠Q*!x+"JDŘѨI:zOװ}2v{Z5FSߺC X#z_\b__ lBϖ$xۧ]tp-yjl/x{r3zoċZg0p<1ⳗ;;y蜟BgJ4cL R^Y҆/iW}Ҩ/t CG+EܼPo['WúKTΔwfᗝ?Aզ>^ƒ`hP߹kg"Y[{.;ӈ1弅qycxI^CؓM(zGj/.y| c}K]Z 0?rvg^b.Fм:Kl^Ɵh#|g\z.5_c)v)c l{%-Vn]!J:6g)f]h10On셣X,,Q²'C^7Ɵ86 q J dw6ETbtaq6ɘyi+'hnR&Ky#YJ3쫽1vYֆ Ykƙ{klݚmĥ۔5% lM-:ȑYiwt>یms۞֓h{37Jc)OsX3}CD6eqP?x<kmXx꿮g bA.V 5y s[bއcW|M_ظL_ U/=<Vmsq5ǼyƇ |8m<o,&-857y27'枵y35^7Eo[|ISyš:Ж`.BO7:5x\ط*KJ;{6cwO{aK#<`%}۷}2 Y~`yJ:z{|\|;lNE'toG>=+97t?%@M_[:'8z;߹,^ (Ak& 9^=C&q/ h!hrW㡱N ƮnɃكŘ$ŧX}g߮=eXJTCtVO_ܿ[Ӯiz>w%gJهvҭq Ƙll{r`lZܻ&S:4QI'!ӝrG\k'_2lTO[cR2/4^bÌa2{SJb n2Ʉxyz^Y#Lł:tdG)R;[ɟ)Y$_pd?{n|qƛ5tl/eW0+mmanh;>,&X 2k3BCvl x`%|7l6Ⱦ`+KѣװK2 ~,JOct&㱾ѳ#tyA>v:eh| /%F?~Zetd<ZAd86\I&V>H>m]6MC\)(6?O6cI{1(ncHЕOOQl_\wG+VƟD0;M`bZ psРOĠ{tp$ ؋اGl}4e +⋽gWb B -C?z;*ƥg?e35 olƬ }k˽Yil^}mM`2{ơDsdzxu ]7]gNs\v0}Ξx:69<;:1>]%k`_~쇇g5yt9ou:7D:R+Ѻz׻:RO6=o9p?S嗿e]{!p*++KPz? Sk "_Zg xݢg^~=%gg{'Ott/O}d':`'}CW9{lxk6ad +1T/dx>y{!~O[mevgZ/`)['0ѨDObW#q?_*Nj'~ӗ/%u釯{ɟ^N-6g=[+sz%:z 7!#}돾DA:mխi2XJGd=wZiCAccpm(|Ӧ FC/]pOb׽L%|ecAlm}#6N6u p`.":`񬠿u6xYx[{ bֆ|/|aW|BDWxuG\ИgO,jEt!_Wޚ3צo?W==Џ}c %pM">!#->O-'K/܏ȏ,329oPB#7>M4r~~#p[4VLD^<ģuq恠/<DŽи&K&{~W%6leW/=h~'Z6Ruٯ6n~I)[͡ is6DGk*\~]_{dM-#:o8П3 O=M6{!ȇliaq'kgJ=ۊu_bxXR6V6Jx/3)S^< zk8"s 9ɵm\>s@Էch3 2MIƠrzh&"Š x7@@j3C}LXL*wH?]ї\}]6<][sgX-ykqrM?e+kuwqm\zx@8cy+eﺭzG\Qٗ"W'v)>ҿFekï~>尙t.{b&¾90ccm'y(Й< bspcq 7M`/zesWŖ9+¿8g«L㚌tīLn{Z&" l`^+I?IL:kK؈MY!ctdJ2KdypϏlG,}kc䲇~I/9t3la)응؅/<{;} Klr?''waKoD.=?ѕ>׉lI$ŅLl>qci}l}v;+Vy#9,Kmᣩ 36+Mw.!:IdT28<_0=-h@+Mv9v5vĺX1GbMbcnKOmbN{uڌYnG`G85&9\8ɜ17Ϛͳzss ƿg9g0wy+LJ=tO7|W{: 9̏|#˵+ෞij9kOc%4p|aIg[79/́)|gngʤAn@ La/2 m~~꧖N#,_&___jBҏ؏- oP򕳫mvd|sGE.&?3?|ph|ww|}MG󁇖q&y_r٨>,\߸O, Vz2yȖ.E'W|u1?& F2L'v %|$ R<+z$w!?0hqiÆ=laSPcC6>Om|iunk1͞D[=df8mUGKF(|4FT G)@6)l( #|Ju[~»hm}R|4;I`gxeRDuf> ֺ&Ŧ{t^0 d] k r<}ÆDڣ>J$xO; dkM8qt~@ dS"7k#%Zzsa`E؋6}soco݅-d 8E-:z}=&첡OW6=Ac!0vNnpEˮfmD'$.u t.v/d :W|;+l w'mrIٵ::Wx.o't>/:#ŧ'}GOL Zߺ>杙~b łOtZۉ[d^nLemᓮ[}uhb؇$6ֺƛ_0Og?}&cO8g8-&v޸u /:`F1C?6طK:o1vm iG`G0Nds~D֝2ǣ\d8T1OqL̵9==;@@A_? 'a~~9z''?~w~g9,?2x H??oML~BH09?2_Aa/~qyi2X|b*wL&=8|1,Lnp >f*^D1uso7=Tummz~NJx6^ϽM[׶ew?SRgOdÖoCq.xzdϧoGN9?dɶ2=]])'bսXJmt~Rg#3 F@B *2yƌLxWgy,ms@F&/{S|OL.{:zY'Yl-NI2z6 s&]›{< K<#GRnS[f% 4'Пd*^a'xO uڤپTYxӏNЕ]F_KWl7m288;[eჟD$M0DGٖ=JH[l-'/~tW ~mmNgk6uaďb]kOzȧz6ި[[~~D믿X(Ymّ֞/O5m}qqNx SV'/NޘqM^ls-n3s쓋JĞOƞ6cXg=#~py0>ezIn9 9Sm̵g5ƣ_l1/YINg[]Sd:{ v상5ѲCMY #u]0eX+̔OrSO)OLNI{r􁍜ɾ ҆_WnL7B(Od_TZ^N]7SKH"0#]ſ9dm{ƌk|v"1[r}*F-}ԡ3w3p(D+dY2}/܋7/D|Dͫ]oSK)Z~8ÑMtp%Xxl g}~|#s'ZeIJྍK-VGō55]YgЦu1i]_~{1lMDY$έUj#l OCW=mbߺr ѷu 3gyM= p#|eg3B>M:GLَ/l$y'Q?~Rћt=<:%SvAkؑ},|aDb/`FvTO:^~R//T!f}5y%E?th9v^f; k4]%lCŏ%vX杕-_`]هC0QmʫOemڪ~]jpWlVjLҗM ٮdކkܶxWwJ|bNbI' p:e4hsG}Л_][ :?9k\{ֳ}6͝>s Jtnniwc|s>+<'%s^2c0;e>'6?gpg0aس{OO/~@!?Y׷U 2{D=x-7(՛,5 L`H,<4XafE BD2 jepO~iG1&h1%MŬ!>Šumq롦͸`0Vܻ&ƚLs0gztDt||Rߙ#={P<ι9}/zO~t vu2a7Kmp}ii le;5`:M+䙛ke籒6ͧ'/adb$Is[Q5FXG'knpO/s<hzuRpaSptR4fMd7/&,EvOS ]%_R?xSc 2Yؽ>h:6/o}_J'>;%6K^m:4d䧭{zЗN-t,O6C5lo_䩇qpӏl|S/zXKi]|FZ/zYf | M?겷Jm2E'rN89iWz16pq6h];Lmxx /2Mta鮤 K]=ms:6P_f(+K6z:e:7dv(2|/:;̽w {HdnV:5e)խG 7dO8CI|Ipn6bƦX2 ){ [? #ִo4~Klq&`ž:2a.DsC,6EX' ƗVX/G> y[2KExƁ=Ƅ=ka#7!9X,L0v_ sG=<7?̻m9Pjax|3F=#=ӏ}KvYk>hԡ7n)fgZF+@ostAvHzzB@u_dAGOŽ]kˁM{zz;`4O7/s/2p=H%A:T7McB0po," '&%}lˠ2-N%|`ADhӎ@/]ċ;Ƈk:qÖI)=ЩѽُzM>ݼ^[`Z=HP#Y鞎k楲٦˵%ec⍭ƓXyHu t6,ded]2N .΋#e]g)^|E,XKeCl0Дnz9Yx~!Ķ|JzJ<ts򠍟9~ln^.řkX7lڰYӷ c4e6/UbR=mi4_ҁ?z>чO!K֨69Il }d:]))״KÛm]oN]hK^[94VɞcIq#o%fcmW6{Nhl}6PfZc:+'M6һ~6yn;C[?6ѓlf R>f#iҟnkLb.b]~lw&s₝u1e<Ͱ)'vztbƋ^l߷ĿNla"kCѓ)vĬy@8= 67_/9aM?qž{>t)c:YzFvyf'w>jC׼-\lVkt3]"`\5yNw׮Uֿx:45?5Po]j/WId~ƩM93Lt7wm4j<<4?ͯ3uyf/}i}HŠ^L?-tQϞ|3o醏I[-=OӗO~ɱ9==@Y|d4,<` P 9748$ zwAS>߾LRB$[[ }=E7Ro}ӎ [<bP{hz)롃^ǃ \&*չ/1!{2ތG=`=6Kzéܘ|Hl774GG?ަ=w VA36Ssv6C>CvÝ?Q)2x=tI'DRҟNڕE^*g,dQ8xR 6jicvgoqN]p]n6].5ơ1a Lج=,l=#}gl~" J:dųvʨ3xڸR0@|~[ׇ6p:KSX Cx.[}>?|79y6>>E-9),ƕ.t:Er1>xNV6a.tW{=D)>d>pˏd 2wo]1Wu;J!917u2δk7D|Ju? }CDǵ[x䭴eWtk\ҫvejɽ桴\{@ł5Jw}w- o_鲘zt}1?Ѱ7QX [zDS_Ś6oQb6aO?%} C.deFG?Ԡadڋƞvĩ,ĝX#VY `(dbY@IDATR{e2~J/E^?|zf,;Ilv\^5ɋOK)- vpc'|ܓ}HI6q/zz\ӝo֞9K/{Nf UOOnď(O5VU9XƁ*|`¦8_s_t4|Î1wbX!мf~h 4ǜN#####p.~GJ<{zi˿>'o*G:O}S,d8pW}'~'og؂zaSBk^V@: q_y~yS3n5//,~iG`@ V/baAYro˖{Ũ7FZ8ﺘE#E>}-%/B^ c<Ћ1}ma װsԸ4;~k92^$O}lƗ=f]yNKz39+ZZHdSu6rĕեd>(-8OPlF}10+O/"zDXdllnusML%b=Y\_J䄋gJ5S޽zSv|%}p> OmD޲g $:tr`yy1\֜`Y_|~%7K ^Fq56Ј5tɌ}Kṡ<l L^߻ llM ` tۺ ѩw-s6Sꣿd}t~Aoӕl$ew2))mtg>5$/sM#{|Ħq3>Đヂ~bxے}:6;5OC?]JلCz[)>wcћu0SI -q-_% O҆w3s}JNq(^=eʰ|7>۱g61'FoTi,>nr~####t#p*l<=P-j,&,L// ";[gqw4-< CKMɂ`"aL~BRo7[8~_􈇼EE`E}{p{kg/,b[Hi1-~=,% uZ+}YK\/5-Ofă7S"KROr_G{Cd$~CCG~2{2vi𐽠ΤO˰{.%Ɯg%%zKr.5Mjr S6֮M]8U1kf׺} 6a#| Saaݜm]h3IpEZ?YڌO+fűgS4և36O%r}i꺘kq^\{i8 +9:FxYצ,=$3=[g2>%hsMO؃.G˦9g \G\T?Kz7x1_y/L54h-z6ZNxGKpQzi7^G;t+GW/z:iۢ50!>>w<~x$A:xk!V{gzӆ%t!Cck{tbOG,;"{v,/ |p3y[3j^+>cgN>rÖeˤٺn )d|f[<#v> o:S,V,覿q/>9 f$<)Ctkbb0s ǣrnG`G`G`GA7 <;m,i_d{y!fAmbՂݢۋS/(8е>?dy RŎLi\*n k囈gVE֥[WI7 a0^fԷ1Kj_c Nc1 m[yW'kvz;}GO /F G~Q5r4NȦu\ކ8 #>he1(żFzLlk2s#|Ϣ1确5z}l h*6SqLЙm|Kop}z6366(jSҦ(L| o6ZY9) 1Ⰲm:q`CN銏W,s/HU~-}ymXx;ޱCt!Gҏ</}hO_5{t!|puuP&5_CoAI0v_S,jLEpMn6dFol# {~Sw~-6k}nxSpOw|׻޵NJm_c.D7؎ocVM>kf_m~N 0[#NXX'_&͑x67tk/*Ovqܮ-,Z m'ų/[´K,fM,UO&QZfIld/ OO2lJq8qO]/z$>؝ةK`˕{YSI7hHR_,(hJbSk U!-lH/&Sò]ֿ2nٜ!}Ń/ u%MWxl<ܣW>ٕ|ֿy'9&N;6a>Zu \kXWd/] _rGxΡq>x;u䫋m:ӏ %S> Ln}txlRf7^IrOE>a|?=okw3ӇL:Kr\wm6X7]`03؏AY0v؛^ G)ВIWߘ`ãSMG@ņ~ŏd0B{n"SJoxFö^I//~=a8G6|O_tk&%9,vJ~Zl.7G0)nMi >}cş#[Hg1bL|\L7l=7Mz,X5~O$'GgnT?z4RŻDG:EWMtu`c׺?xف }/9$x 6 93%XQj6{Ĥj̾v'>hoLottR|99l5>)&ѦȧC?@s /X/cθ }W{N;&6< p;'@c KϷ^x6/͖o/wvvvnۿuwE/_8@BBWiZj!ۢ"u LiJE2^d3eK~Zx/R^2le>/}BCH/ %cMW1/K茏s'Y_p]&y_%ď/=Kx`VYG>{ÜWsI t3_?nƄnOnN0^fㅯ{Ë<;+_bJ?;'̊+2<$?lLW{ -5 [³M746@Gl! }d|l@## ԑGg2^_)6a`/;Ȑ6#ݫf:SeS4`1:+]8''ߓcO@;Shل. g5,ag~سeX `:Ix_ C~cOP7Z?5O&)]arNo=Jd8a!Зo|{I;Ķ]Ȕ&gƬL_fl+?ĮS)݊SG @_-aSY,-/~,$<?1#7Taq*/҂lotkx8IHz84F[WϢ&) 6dhd1c}''_^D-8C EN dfEЂ+~݂۵zYE" M_.gB~6nD_KK YΗgPrɶY/}^]BWme~HoLdMmwMjW/6Ŕ-+y6 j-seWXTU/5m77?ۼ3?teo36uګ6WCvx‹xhȀI^ɯ.xOsf+.7t榍Bذ*6v"kC) uJpow?}b=Ivq tm?y՟~6JSgHe0b[FglKxLF'Epҏ"O7$ۦ>>ɇ9heZgKY=:u3}}ܣ:[+c:)ic}0|'df+yI x.tCg􂟵2}Q]=>p8ٵyBx"BТKK& S"d!'y :I꥿Z WWR >m " pQW0-LkIŭLӖtHV޲'\`]2sdK[ti >'>/[+iu&-OR*F3Rl1a/ȓOXurh}p^R~p9`c# [l]{\xEn+<Gגz =KC.>2]>FӢ?l1fmfձ3I7>=q/3ş|}Wj_÷o0C6ES䡱zGҧv%x| d.#.gglK֟.i opi4dїYpS#%>:( opO_I7tl!]j#:xv\-Ϥ^ G_f*6\m_H/OLhS]wd$};D\/ίtq7mӘ>8`/YS2؈+ӻ61Q\V/tuCoψy o`8x,!PSv-}KrH|M?,V嚞krGׇ33n9]x+ϼN7t6mY3{'e6}|pcJ7€l|Ov27I!;WxE?:=c8-qzI1ļɸ71@IX)gc:N]A7߲7a߄'ƹ`s*aPzV:x0])]G`ɯt#ТŢPnqwB4HaݯETk۾ۈ ;\*եSHEڋQY9O|˒{׽{}zɨ L_Gl45oL/e|rq&ۼw/Ka4[K]8ukDްa 9Gq, __aIcbP擉XhfvuS1I:|Ry 6`B_Oo͆x%mѳ|u>mx:=|}]y{AX2@i FE*5٥^UwǛ<&#LRGJ7oN s6Df}&kMCbL.I}2m%mh[|*'鿶 ]&# >| Iҷl4sA_wOYpxM]Xg>|*ĜlL07} -z~~w}Ot{|N"#lԻ`ol4dT`1!} :C0dPBטdI__zobkĊ=ys_#< ֱw2XVxwolӦ^hċX1:c?!* _.V>c+ orrr']GGq#vӃm!'߽]bU6s9ƛ>t՗v>_o3@[?K\ZZYr CE,eZ yyx?uU{D7 ~/A^ًlLgꦭZ[1KS,V;e{I]z/g&Wz,u >R^Rb&/2{b oN$m&ڠUǟWWWf8hk#ƦiM{bT\]Ć d8[C72I7rMO&l'%ߘD<3 6Z/, Ʈc xMl:y`MGOka>瞿dzx~|7>Zpğ|Ϸ< Ї8O'o0NGq9ekmSMß裡-')?dLA|+~_җo-kJ߿ o6=+v#׿xf=~ϘGXtt"N^0O{tꅯ0 *|P^[bZ#J7/F̽\͇T1?x-|0W| !Ql0?u>^;3\HcӼX ů2EE0:7Y8e:̧ٖLk|Sv]Mc?Yj74>\sGWŗzӸkѴ!d3K{dKa ;t\ۨt X z=Ʋ{m,NOmtuJO(&kSm~Ϥ 0q&.-bGM 7sbF,测/P[/H赋bb6.SbC l\w~K>ƫoЉ>;~r Kśҹ1m3!VB+;`xt[-6;QrF bƏ6 = vZ棛$R<ɦ-[5ꫜq$:>b>8@05yЙbVbIn^;0gXsxόO .ӝћ^~%[00n-SI_|3O~}3ݎpk!bŅRn1VyI8x,,El]i.B3)7[}nLƕk8-XD(6ߵamExn?/^tKVTT'6cʓW﫤l[{m m~_bqe I0ʏG{N z*"kOWtz?xO6ԧcqlRf'یn32^rMd'0Ąj" 6 -`/?1hռO%:lFm_z+5Nۖ&;hd4ۮ{G[CL^t#ݘMO],1 x3X'IJƑu0G>I>d1>Rc`giJO6-vZFXCxkqkl+mn\}t}B.Lͦo>6F$;ѳWj~.=62֘$]ki} A]c#SJxe3~Àa&KhUJ>?6;?t&WPpn=mϮV}[1o>wll2SΡ{zC[l]SgZ϶#LZ6)ŝq3xj9a%13 xon3CnX=җmp]{ztlQ1E>6K'h\ӦN|uOi菿)_=MHGw3|lsl 6xGke8,ޕ\} XڰB':Ov>/6xo~$G>ͷhf:%;lSFM:6.}HٞW?:+mKt :;6Qm gcq(<Ē Wq$:_x9 86U6:;@A)l:y~5.fCiݢFS9_XߊҦ|Sxҁa766_˛.ng:Q7?aW6a/.^|Ρ)8sZl7t#'_WMZwu߈qs=}|oi%XCA_fg2:<3<;U'_|x Crpf:9 Ɛ:1^&CsaKMpRܰFN)͞Sd {C᩽:1j3=yI{HLD?՘gѕ=EzJMqjx?>ao| CJɘj]~[.v v6m5㾟%3o}m&f=Fvq Ge=4񄻹/zH~2B.Ko3ص)^Z^p_VxI if1P؞ќ[ok :`|ca n՗5ijo[?X|B*OVѭv!>NGoncx;m3إ y&TJW"S~S>NOX%9^+g%6l<~M3錿Nxoamb@?wqOpF+.^nk}nt:+߮X?s?dEyEJ?I|3p6i>l,LJNV|&ؤ19t0wзZ-K; /?scgMcl1cadb0s9nh3Ƥ؂xn b-\mQ;cgPUW|t.k%9R^b6]<]߇i]/^^pu>yu渙HWȑhqC,ɚz#C/8ѹ9>Şv{0/d/%cX>w,wY\c3S)|?A;[S_&C)^|oYo|m'_y|9k35=xV]q6q!e=IpO6OUEI^s/B8Qt3l힞7vzq`hsSGfG]ŗ~xO^9Q/NB_N^s+TqQZ]苷 4&>f/n_)}]/\|Nd6Yv_d>GZeu>~k<ӏMOz{dzㅎg-{:3l*߉ٲC:°D/ft{xY ;|N~hnvzbƒ3-\z;z4|?g1/o8x)nk~F2yt}ɑF8>sFBbcp'V,bqO UY]=zdKngiWUc x6γ%pӏ]&ǘ/m*f'kI&[]gs?lI\ۡX["|嗛޾דtT_Itb/ۍ1ez䞎a@1 A}2|#ӕG2{N;<Tw<.$6:Jx߸cHUX,ꝥ׫ ȽHX{cSD>bă^ ^D /dI"mƂ &r |3"">ك~^ZI7uxkv\Fb K^dx)~ ?w}~کRzR[ yu ?Į9©2xў?T7ƕt4X9K<9R,m#tTx˰σ[3mJux<1jfOᡟy9R]hysVc19g_:x4 ?:6l`6ӌ3C+6|b\?xYuWKDzx61e/JDE7|=dOtAWcY0Szkt2İzh$ra12Gލ+y&]\KiNomblB\k6'͔6n+=Wnoձ[I=y H'_vv6ٽGUOnnb7#@&O|C|bfX^g>lȞ:kdTsla]Ȟ+ޟtvmN%.J_FgTtHأghE9秿C\~駟#}|ܣo:GsM;o)9j(6b87>4ěi&kv4\⡟xm ~#b(\}+]0)`R<%}jҗ2)>_#-}JbA <==mq,p {<%ƄWmƙ>Ʃ1 gع. B`[!)^ZDY<jg!aS[-J^,^Z0i魾:ŚE['zm=G>i 8lSµ=8zØ=xkC/2, w4/X-D»lClh\wN7^fO-%{>d,Qm)>esq,ц^4mbK/rŬD}LoӟOL5vzȒ{:eMevڰ w:*G/}'fxa#Ot"򥾲8tGx{JvT~hۨ腆KI;o3: Tvƹ7>οN?S:i+]Őw6?7{b!伟@b\[짠nb R~0)\.|pn}Mgq->!?%c!oq8Po|t$v}7koj/XtN?xn|-fao&3xe1e;_i؍qitAcJ1d>oe͛iB`!X*{KC<-h,\-h}Kd[[P-({LdA2ReKdl7Nf^-(xElJWfc%i^W,g{/L[\^J,DA{/<eٖ=2lkⷧ}^X9\̽z)]Y[+6шU/f%tt_l\҉MlKk dV~˒c[ɏ976b"^6ѻ/kxf=]abo"gN.5٫DSYz4{h ;ɵ9 JȖp2+e+{]7&\㍇~6S†.6Иmi GIV . ;ml<</z&眫'b|v}`xR7:'mtyHO\co8>V%tsYML;@}:mfF =;5=& gtxJkSb87:qUZn/?x/!K)%c?'?q3y䭟+mZq/ŝk>2Yt!b}v|d{q! ݟ@'bX7l6??6zc_Kk uIDATvV=F&霹DWcˡ8(%=aZ\a[:}AXHtᅾ>&Fd}II璱VąK룤o<`'KMGrVB`!TPTWw@!w /=¢Ezq 6<[{{64$ \"ƋQ//Y8Y6h\/o^Z|5t$YOOً6Yf}֋?((t{8(&hg4>_GW5{8o o=s^X=]4s~[kq@zA 6?1 \2O̹͝Mg?<*Sfz/+m\H`sOx#WN҆^&ٟOJNHt,hl֡9aꃗT_t6Fǒ~6}zJܪ.?ub~Azkm&dGtXk]ZUB_ݣ8xKִ0Ơ1FdK%'{ c}ſx@6ĤvЉԡSO]ݣKLā6C.d:@r`O"sћ-pbC"d[eVR_C/~_68rT$"Ϻ] KI?D6a?6Zrovv5V|wC>l^Lp !k^6N_p&~釗31͏6mfcgb0؟q/eu 3f'd?y~Az]q0uvRҗm Gsƽ*f'!erO8[?4d1,}ƩCvX#ev[Dz@]3i*VBhԹ):.6y|8Uz)%aS}ԯokd50cl5%%dz9f8v8Q+i $sX cyލHQ9^t|oY 2 <ܓWr7mdˆCxw1NWJt _e _`b!#S=zG![ g$q}«h6I{HltNn6eY?_ks:2'k+ߨxulJdz{kɎʆ20hczC$}Yg>rtsN.K#H/kpF49Fz8C'6/ݡ\}@gJ߾q@_|nJ.t)n߽v|dpb[`}C3&ÇpW*>; Zpov `M}8)Nvwm6lO3W_m1Ç k*+~bH̲\somawH)cơYJzqF_ZN_\ ![| Ho?c;<3{|{(s v.9׼ڳ@}6s|7͸0ɝ?{F5'{c|_,痥эyc1bBKfX&SpRW)yE6}-N,ȷ`±ho,kXX'I6O\qw6VmY[?ǟ1-Yo#:a1Lzr\룞 tdXtOdZAG4svzlH>;'ήzVGooӃ6 郖vXS6fF[z:Cbvz9< #MR6\Ⰴ\4mGGCt2m1=V+Ngc00 3ew|6xOyѫXj6}EO  026.^'}Ix9СǑvU|A ƙgl1l;pCܸ!K`|6W2y3u;wMv9e;;4xubK>5H޾c,?`=W}usڲ bT|6| }'ݼ/Mع<5ŌLgo2h _,XP9ʪ[, B`!X, B`!X, B`!pB!?Nwcv B`!X, B`!X, B`!X,nV+/IENDB`tfortools-0.3.0/_talks/GolangUK2017/context.go000066400000000000000000000024431405741501200210200ustar00rootroot00000000000000// // Copyright (c) 2017 Intel Corporation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package main import "text/template" import "os" type address struct { House string Street string PostCode string Country string } type person struct { FirstName string FamilyName string Address address PhoneNumbers []string } func main() { source := //START OMIT `{{ "Who's this guy and where does he live" }} {{.FirstName}} {{with .Address -}} The {{ .Country }} is where {{$.FirstName}} lives. {{/* . refers to Address instance */}} {{end}}` p := person{ FirstName: "Markus", Address : address{Country: "UK"}} //END OMIT tmpl := template.Must(template.New("table").Parse(source)) err := tmpl.Execute(os.Stdout, p) if err != nil { panic(err) } } tfortools-0.3.0/_talks/GolangUK2017/decorated.go000066400000000000000000000032651405741501200212710ustar00rootroot00000000000000// // Copyright (c) 2017 Intel Corporation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package main import ( "fmt" "time" "github.com/intel/tfortools" ) //STRUCT OMIT type stock struct { Ticker string Name string LastTrade time.Time Current float64 High float64 Low float64 Volume int } var fictionalStocks = []stock{ {"BCOM.L", "Big Company", time.Date(2017, time.March, 17, 11, 01, 00, 00, time.UTC), 120.23, 150.00, 119.00, 7500000}, //STRUCT OMIT {"SMAL.L", "Small Company", time.Date(2017, time.March, 17, 10, 59, 00, 00, time.UTC), 1.06, 1.06, 1.10, 750}, {"MEDI.L", "Medium Company", time.Date(2017, time.March, 17, 12, 23, 00, 00, time.UTC), 77.00, 75.11, 81.12, 300122}, {"PICO.L", "Tiny Corp", time.Date(2017, time.March, 16, 16, 01, 00, 00, time.UTC), 0.59, 0.57, 0.63, 155}, {"HENT.L", "Happy Enterprises", time.Date(2017, time.March, 17, 9, 45, 00, 00, time.UTC), 756.11, 600.00, 10000, 6395624278}, {"LONL.L", "Lonely Systems", time.Date(2017, time.March, 17, 13, 45, 00, 00, time.UTC), 1245.00, 1200.00, 1245.00, 19003}, } func main() { //START OMIT fmt.Print(tfortools.GenerateUsageDecorated("f", fictionalStocks, nil)) //END OMIT } tfortools-0.3.0/_talks/GolangUK2017/describe.go000066400000000000000000000033001405741501200211050ustar00rootroot00000000000000// // Copyright (c) 2017 Intel Corporation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package main import ( "os" "time" "github.com/intel/tfortools" ) type stock struct { Ticker string Name string LastTrade time.Time Current float64 High float64 Low float64 Volume int } var fictionalStocks = []stock{ {"BCOM.L", "Big Company", time.Now(), 120.23, 150.00, 119.00, 7500000}, {"SMAL.L", "Small Company", time.Date(2017, time.March, 17, 10, 59, 00, 00, time.UTC), 1.06, 1.06, 1.10, 750}, {"MEDI.L", "Medium Company", time.Date(2017, time.March, 17, 12, 23, 00, 00, time.UTC), 77.00, 75.11, 81.12, 300122}, {"PICO.L", "Tiny Corp", time.Date(2017, time.March, 16, 16, 01, 00, 00, time.UTC), 0.59, 0.57, 0.63, 155}, {"HENT.L", "Happy Enterprises", time.Date(2017, time.March, 17, 9, 45, 00, 00, time.UTC), 756.11, 600.00, 10000, 6395624278}, {"LONL.L", "Lonely Systems", time.Date(2017, time.March, 17, 13, 45, 00, 00, time.UTC), 1245.00, 1200.00, 1245.00, 19003}, } func main() { //START OMIT const script = `{{ describe . }}` // HL err := tfortools.OutputToTemplate(os.Stdout, "describe", script, fictionalStocks, nil) //END OMIT if err != nil { panic(err) } } tfortools-0.3.0/_talks/GolangUK2017/elf_dump.go000066400000000000000000000020531405741501200211240ustar00rootroot00000000000000// // Copyright (c) 2017 Intel Corporation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package main import "os" //START OMIT import "debug/elf" import "github.com/intel/tfortools" func main() { if len(os.Args) != 3 { panic("Usage: elf_dump script file") } f, err := os.Open(os.Args[2]) if err != nil { panic(err) } defer func() { _ = f.Close() }() ef, err := elf.NewFile(f) if err != nil { panic(err) } err = tfortools.OutputToTemplate(os.Stdout, "elf_dump", os.Args[1], ef, nil) if err != nil { panic(err) } } //END OMIT tfortools-0.3.0/_talks/GolangUK2017/empty.go000066400000000000000000000022021405741501200204630ustar00rootroot00000000000000// // Copyright (c) 2017 Intel Corporation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package main import ( "os" "time" "github.com/intel/tfortools" ) type stock struct { Ticker string Name string LastTrade time.Time Current float64 High float64 Low float64 Volume int } //START OMIT var fictionalStocks = []interface{}{ // HL stock{"BCOM.L", "Big Company", time.Now(), 120.23, 150.00, 119.00, 7500000}, } func main() { const script = `{{ describe . }}` // HL err := tfortools.OutputToTemplate(os.Stdout, "filter", script, fictionalStocks, nil) //END OMIT if err != nil { panic(err) } } tfortools-0.3.0/_talks/GolangUK2017/filler.png000066400000000000000000007575111405741501200210050ustar00rootroot00000000000000PNG  IHDRTAWmiCCPICC ProfileXPݳlf%sAr9#3EDU$(J b@ wW^非s{`&( wp@/ " ssc@?)ߞG/[Pzx#=wۘ{HXd;:"_!2MA"byˋX[j+ ׽8ܽvp<|!9 +,xnG6 #oxH!q%0 ='Lߒ!>Z`#r35þfH}?=F8F^a`Â-48bp?k|p2;FHiyW ;"|`䏇Α>h|H͐ã `؏`h׎@h|A@<&@<0_o 0rᐒ|7_,3n._{WR@4qGy=2,_`9 p PD a )  pԂh<`</"X` |?!BCxb!^H UH2,!򆂠H$t :C%PT5Cw^h^@Kڅa8 )4`F0kq7,KeÊaհVX/l [mN焋Zp3# OgFx|߀@(BA#BLD ъ@_/wȨ <ȒJZɦ>kǑ&'ߠ Т P$RRܥئ4 ̤\BSQPyPQ]zC ֢v>E}zzEOc@Gsc-Z*ZZ[R.E:8]]-tg3033x2d041g$gcΟ\\6\\M\Xnn/>-v< <$ >xxk[g7o T <D * Nd|Jƅar¾e“"HE jiQhhXXqqGٰv 퍢UMtMn776?et;w.PdB[m>mw u(ww+۝}x?vOHFw}/X <4~Hcp݇ FF[dZ>jy,u\~}BqcdT'<}fli/>F|<˘/Z`Y~%iQnkI{io߬ h}nUjsMwm雔>|QؖO30~Uk߶·o?g0P1k3zW/q`t0wxxB#. k: d87tE4#Ph 1^,)G))h)٨DUiLi*2?`yCӒ+;ЂȲG/?8Yf9.y>AE%Qec*j,Z4:hCo gƌ{MZL*̋- ,[[fe؟q8v넻'-\b*:&V{=τDEEc bgOn%"RdSO饙H9cY\2]\]s/,F\d*(չXT~Vգ+$WktyԦUw6\HSm;.-n^m~AwC;"Eutu'O9{Z·ңc|Ǎț,ii 3Q/f^Λ,:($Z [ew+tkTI7Л̓;7^|\%6o#߫vb~ګO<>:<$_ @Sp%CJ;J:o%k'oG9@5J=7z##3<)G2:V>HdTtH_WGGWWW\|BbRc%*gՒ#45]uuuXF-&զfNVֆ6 vb<dN0ms.'F\nG<yNy=~31`)ur/aP8Uo|AsL`lb\v| $LYJ]>zz-]xwn9uRbΛܵB" .KKs/U5U<|_ zEmMصں7o4;p'%5-s9wutWܯi_8x@3$4>b4yQG/'6l=Y%|1\@B/b(^3~+Nwby}z͜+.\kv;6?UyqG6E+$r] "1*OeAnN.N.~IL,lQ#kp&^a>~CB>!"Qb)g$2%.JW\.wSBbRr;*7UoըWihjN s76P17b3ΚwY4[ZUX_ɲ=ekht\ą+t~Q{C]}ݽzz'7 <4u}xDdԥ'O/>+z^0;闩s 1bR^{SfλՅ;ME>|ow(:L+>x+~7%(9j.'xL38{? bI 3@8Oփ0>AE JzGd}^:6eB!C4!6bPdC-8( yHCLUVbHCHgqNݖ/VHU UPv>fbvBK#T3I+GN޲!ڈƘDTEeU͚^1Ωܹ 2W9[{/.o:|γAe͑[w[#ۏwvv?m{22, q_}3Nk]wі}w @4a~Bt4dC-9すbaWa} "H d$DQhUt.-F 1 Œ`OHp`;2Wy(<()Tuʖm60 C9efsr՗mÞs+ۈ7ϊ4!;aȬhX$BrNU:_&TRNNEIqQiJy؀ʀڸ wߴ1:lzywoRZZ&XZw,١qwvpޅ儉kۼWwϚW@mf\HjpOcTo''$s\9şv#]LY݌FY#9Z &/FK+&.GW9)n 907 1614 1 c9@IDATxmv:.N;;\ć)#(ْ8d@kK# @ @ @~h @ @ @*> @ @ @   @ @ @  @ @ @ f @ @ @ @ @ @D@BH3 @ @ @@Bg @ @ p" r @ @ 3@ @ @8P9L @ @P @ @ @Hi&@ @ @H  @ @ @N$TN4 @ @ @$T| @ @ @'*'@  @ @ @*> @ @ @   @ @ @  @ @ @ f @ @ @ @ @ @D@BH3 @ @ @@Bg @ @ p" r @ @ 3@ @ @8P9L @ @P @ @ @Hi&@ @ @H  @ @ @N$TN4 @ @ @$T| @ @ @'*'@  @ @ @*> @ @ @   @ @ @  @ @ @ f @ @ @ @ @ @D@BH3 @ @ @@Bg @ @ p" r @ @ 3@ @ @8P9L @ @P @ @ @Hi&@ @ @H  @ @ @N$TN4 @ @ @$T| @ @ @'*'@  @ @ @*> @ @ @   @ @ @  @ @ @ f @ @ @ @ @ @D@BH3 @ @ @@Bg @ @ p" r @ @ 3@ @ @8P9L @ @P @ @ @Hi&@ @ @H  @ @ @N$TN4 @ @ @$T| @ @ @'*'@  @ @ @*> @ @ @   @ @ @  @ @ @ f @ @ @ @ @ @D@BH3 @ @ @@Bg @ @ p" r @ @ 3@ @ @8P9L @ @P @ @ @Hi&@ @ @H  @ @ @N$TN4 @ @ @$T| @ @ @'*'@  @ @ @*> @ @ @   @ @ @  @ @ @ f @ @ @ @ @ @D@BH3 @ @ @@Bg @ @ p" r @ @ 3@ @ @8P9L @ @P @ @ @Hi&@ @ @H  @ @ @N$TN4 @ @ @$T| @ @ @'*'@  @ @ @*> @ @ @   @ @ @  @ @ @ f @ @ @ @ @ @D@BH3 @ @ @@Bg @ @ p" r @ @ 3@ @ @8P9L @ @P @ @ @Hi&@ @ @H  @ @ @N$TN4 @ @ @$T| @ @ @'*'@  @ @ @*> @ @ @   @ @ @  @ @ @ f @ @ @ @ @ @D@BH3 @ @ @@Bg @ @ p" r @ @ pP"@ @ @ HDBI @ @k Ia @ @ @@ &T$ % @ @ &Tͤ[etC @ @7%TTIMl @ @ F4RѕH덡 @ @ @ ܔP3TSQG @ @|G%T~|whiO @ @ @79#WM @ @7'TjGIcO @ @ @ܕPNIo<[*+T @ @ @>"\ɔ},ן;fR @ @ @>*J&+L$Q_# @ @ @_YP),)sy_R}= @ @ @-J-,ɔUG׼. @ @ @>PEd{S @ @ @=NMod9ҟk܏9 @ @ @{>G3Q%=HYm=أׯ1Ҧ$@ @ @s'T @ @  |/Ӟ׸&2c[,(k>;Ѕ @ @>*IR#X$fɄ\?jdezv_lm' @ @ @_*lI\Mqb2T*_~KB%$@ @ @_Py[r𭔽M,{ @ @ @CM̉$}Kr$e5¯֩s& @ @ @?$W&TzW,Ib%[lQ2eb)+ @ @;ʄJQ#[dN?L?!K\ʩco  @ @ @o'&T;1*K俵rJ%B*cJʴL= @ @ m 7D0D(dIO5VRjֹ @ @ @_+pwBۓ Y+$j y-zxo)G"f\% @ @UBL(y[o, GIyN @ @}w DEJRU+Fb#oVaj߯lU_ @ @ @*IWkuj[}Zl%AOrv_ $gbc{{ @ @ @kJ?I<}=[GI)ALc$gDOus[k @ @ wʯ,')꾿S$R+JNd#ucu>NZuuߓ,k @ @"*sB=7,yNRlj|ko.3G"@ @ @^JJV&!oUJ03__I$Uާ$JI{4  @ @ @xWB%ɔc_k$IL}Y0X:${}ʰ%wU6޻'@ @ @'rzҤbpIRMJe+I'd7}Z%cM @ @ @iM2QOȵ}&R1#a~KS%I\S @ @ $TzBobo$i|(#!RPY^[| l6TiɸG8n @ @ @ &T HY+$oCOܰ _޿ƺ+93]ISG @ @ @A7%TnMkU"M*5>|dȚ,֐DIo'-% @ @xiB֩G$SsR q)kĤܝsMN5Wʱ~R^[beVL @ @'pSBeICHL$RLQٗ-y}?a8=`]$VޤVnxQM @ @ܔP1 I99fNoeoY[Wc=&)JƟ  @ @ @ &T~SMTH~,9[1kZ!gaq7I=z u]l @ @ @ pWB Ʉ-Q-0'HW^[~sJ9TYnI d-2F{=+{knٸ mb{G  @ @  +SɁ$R&ɐrkɒe٪n; IY;)m;[uRWGWwnY= @ @G)="If:rqG1?qUW5.~ @ @ @VK*aK`2|!z*!-R_}eom-mq[z{"'4M @ @ @_%10^-`/)7ɍ־w[-pc]\J7ᰑh9=^zY{N$V& % @ @_Pɡʼ9O2cԏL} J4T7#YISRb]ҍ=6l$xrlv @ @ CeNdW,QsnXo-r4WM 1/eG&~n̛HR#Y^{!?/]ky{3ݣ@ @ @'p7T~q~g!:'Wp<AUo㦏Ҷpt~_  @ @dSJ Եt@;D4?~ʣ%>e_J. m%g3?F7\{nrC @ @>Q4ғI|7wT#)~$o/2sRebYG(/ɞ2]{KQU957N== @ @ @ ZB,98OƷHoBxǣV|Xsd{qwogeIY% @ @\8Ju6_޶%Ujn뱹9y]dˆyWZj-7eo*ѯꦾ5үzaMCy$@ @ @O8M:蕃#s?;{j+{qicS_跖ښ򵎓W+cL @ @<[4J uWbn-/$Vjoyݺ9n$mn+JR7Jq]?ֹ 5nkqm7[} @ @ @7'T(muϛ%dj>/^DBl;k>j+ǣ+}.IlΚ;:~ b}]UgTTS @ @ @GT ?r9k*A:DZ }~ǣVU߯m1c:|Q}-kY?fO1>ϛ}h%P;f q{cXя5~MZz @ @7P;~uϟ[['YCe/M$B% *Ю>W5ָ +}uemeK_]ouiVdǯ\ @ @ >~ AS9Or8YK0g#j]AcV`cqɔŧW5X#o\b_bG% @ @|{~C%z9S@}o[tA;}VGoh^j2{=cyֱޗ{c}ҏ'MYKך8|>MC @ @%JS2мRx+޳IdgsZ\*qwKg^gHo_k`V6 >'ILuO| @ @ O |jBds@Qyx<+W߾ԧWu?'MO4|C7{2{6~z22>D3>G6$w^CCı׹'@ @ @+ ;~8{~O'% ;~{<ϟ73}OHHL17K粞彫+6;?^oYu|g}{Ū#@ @ @!% Gyz{M]ʊL]ʌh̪O ˕qR/Q'ѓu-)ku|'Wb{Lڞ]=Ʒe{pzK%ky>_I @ @_PA|cs/?ITY얫\:9co2֣c?8֘u5}O[ʌR2k [&!1Z7c9ecӦ$@ @ @!*#~5!#fy߯&eM}N~^jرk;Og K[WY{=Y[w~ګq  @ @ @sMB;I}]ŰoU3^{6\o0>asqozK'!YB3>9_@Ⱦ%@ @ @MBCCWC7Pگ12^UWT!{}s4vڟ]f}Γ(=V|J\~|w[uy_k&5{: @ @ @*M ~/Rqrpǫ=}RVSuz\LUw[mxky^=~[ռG4q9r,*˕on/?}F[=O~QcL=< @ @ @W &TͿr}t_?䯶>m/9&Xi,YZ缇7K栾`sF;#q-QRroLTW"@ @ @N*5Lo5C+_ s؝'ʪϫ:}V3):X}>m)S^}9QgՏ{\TY4Y=qsh^Aڕ @ @ ?~ [AN?]I.}r?5GĤ-e\OY}J(׿\+jG}>Ie?k7~< @ @ @N*pQ:8$ϷC<1}웬$H#o]۫}gM{qpGz]1{_=sƚ֡Gdz2c֝(I9ǎ9$UN4 @ @ @kN|Ygw݉+IQJ,oڇZo^eoVYY_Jٚ2 5n樺=q*j5D]cS/u}yxN]= @ @ @ &T~]uGʼn._}usPes3+{Џr46كn<}-ү޷ܖz5T"d9'CnYWc>5W3v= @ @zoc'@ @ @ &T2ޡoڮuH;2^Ծƚmw/kǍpY֑9z̳=zњ޸GQ[k~繲?ǜ>׿%CcN" @ @n97`Ӷww<7&2W{{HEAx5ǝ2T{4N3 EuW߫1)k{M]>XWNr;;囁ΛÇ2VꞽE]iȚ72& @ @DӄJ5Q}?}oO|󪺿YƼuyѯ25*u?}Z$U2QB ǕOޯ>B+ @ @|iB%)·s\m`MPo, O <)W&VϹX1}>e͗5?3:Σ֐n𞉧\V @ @_4!9M[jN[׭Cl el0nZ~)#>gf1|(Q~xr9l _>7-'e)S  @ @ @ w{]Vk+OZeG>[7sLΏ픷ɬ=?#ߺ${33?9K~VK31* @ @ @O)Y]S=eť-}R_sOyo2N zꪽd_=Փkc^mS/We?k{cZOsyx>֩ @ @n8MPu@zAtrokܯW~m|mWi˚GZu$ Ҟ*_ViOR=뭾yU8TYFb2~Q\En|Ϟ!@ @ @ &T:t+eWSu~U֘}9vǧc+Ͻ{˫Wz6^Ur'e<;!,v_yv%_`n @ @|iB%KU՞ԥ<~1;=R_~^orn}T]9=ǤbqJݵUWL ًWHb5,kWu @ @ P*5kpsw(cObڕ~S}U_irן}ҟ^+j+3{c|]gMշ^w%qWZSJ @ @ w%T@ꐷ7:r\Cq~ӟkKȾfzWiۋ#cdw5gTegڜG3\mgw=闲?s&@ @ @,pwB%u0[9-}z|SWq{Y^=mػPֺc2u{{J[b-}WM[\.@IDATۏggެ͗Mg^s2GsO @ @NT< Yu921)<էmOy2 Z\GiŲ\xaneƩ=ţ2N2Nqϸ9u6_ֻJ'&5VүkqZ6-h_޶]!@ @ @ޕPr5u@Rط:2oڲ< kyG͵Kr8]s4볞*k=GkZS}=zw{۞UulmSzEϑgګ{bR^9*Sw:^t  @ @PlhS&&uA2e+kZH$)Bv{챵y>RNz^wG|x)|uӞDT_e˧j/S>^ʫr}LF @ @xXBe56uP^{}ˊaoʴ2Fb7eƨ21{o"xuק>.Eq>|ϟ}zg3wfY_wǩ/}]9^icJfE @ @]a @֡웃٥rоwաmsګ.c!p?#OW=9Gec+iN~ZmSrݳ>>ǯvITa^{L-ި}'^Z)gKjls]]F @ @|*ѯ:l^pswAquX@:Om{5F)L]cz>{}U]CwWݲϼ3yS2^l=h[;9ʄü{{1β7 @ @\P t?xg9>u(oM{WrkG_Kr>'Sr0}5~Ͼ78jyվz=\s{k}a^ֺymޖ-T=fʳԏ=-u9>iKQĽJu>*53WCF8  @ @ |jB@v$+xo;15^лLBW~o||P>U5lփm9f~2U]뛸8_ /WYud]iO?c}$@ @ @+ |YB98`riI\&Wڧƫ~ejXqT_j^gZ|eI =&}{??b @ @ @; 7s7'k@_c_Ie96OU{ƻ>YK,3Zke=}z[(ש{S?xѾk=VQGou}o}3> @ @Ja?P┽-onqrؾ.5VҖ2학ۋ{d޺ֵdMYcFre6<{3G͙g5jK}43*gcL @ @H|gF:`sTI񭗥39v[S%}TS1\5jîq[X&-1NIw?H>kSOĤ=}ӞĽB}Z @ @-m*~zs@^k4J[K֑eĤ_㓒*5H,koݽ{}} )+&m=>,yJL_o=ULo}qy7~ֱVs=8K @ @A[%T7q7:'>wJX~vUu_;[ܣojuYS~}5NoM[9>9kf]s]'~s}Sm)G?goM% @ @L| 9X>3"iA闱Cc2DLj:`ϜY[S1jMQc;=uiO2F9ϐ&ܞ5V{_N|ڎIܣʬ+SS'O\fԟ'NI @ @W8M⟽~;Cz}֐:8;~ٺ;G댽v{x3p5ޟʬbz|>Ou7{6'u.;\7F  @ @ * _9Agb3}O5R뫽=dyg:\5oQ}ԤM\8Gs>}޽+6bS>{wKI @ @8MԂr/~{,٢n5TBW{LM ?'{N^1?T]uFYk~ TUK[>2_l\){M9L @ @W)R agWXg!p%Uk=㲪׸>K+1|k`/R3+}w{XTߺmU?{w{/kո~Fxu?B{L=?{|is'v-qߛI @ @,psB7kC:7֊}XW!|j=5^oTX1}g1v\RW~#q2k4<=C @ @G &TrȹwG/U~ ZK`KzxHY 7sC_7^Ƙcٵ.?l~ug{}[֑T9$e}URfy2 @ @|iB% C|L[nxa,b~M5ϑW*ck_Ie[bb*-ԎM|e}޾{h$/@om)[|G?}m5n|R~d>/~s]b{|?}} @ @-pWBrZt{LL.߮Uy~\"8bQ{ug/'}JWަv{o}9{#^uTYjS#bbR&6ey1~}[jYs 6_GM}ʴŬ]>z]DƸx @ @|iB 902Y|{5[ _u. @ @iBg:m /9݋s{V0&98ξjݶ=^7ƩUޕ{SsѺ[֚9ƚ>ɂ*cƸ'V2^>ǣ}ڞ|Ss}eM7VJLk}Q= @ @ @+N*Ry@:z^7#5n-;SgOw]}i~s߽T2~6{g={Kl[(`}z}G]ZgUkXמSp֛kk˾{-z}Şե7g @ @ @3N*$ʢ4mSѧ*뀺kz*ە>[&- _ťWx'1yNƁ}=MWۚgV,e]{}.>i?5Oy4ԯ~-7WYѼe5#ǿm @ @88Mag>s s\_۔CԘ74ķx\v2ܪ\!U?cm Y~N|eKFx{_2_Rm=_kɚ,ɺ^ܧiq&\~Oxֲ{0_%&eϩ2ɷG%Uz*S1#@ @ @#nJ:гW}z)ǵ_>t^kMBks[W{Y*}{mʁ{W> ^e3W=ľ]kݸ-17繯WY{+I|m}U2/ @ @iB%9ĈrlhJ{e3;T\3gOyU.>GFԲQ{e+{LLQ9|}OUJWzZ  @ @iB%9svyXʑY1r[1\K}|y?,c;ڏ^_}dc ŷU^nGZNQϪudm5g5~y @ @x=*Yz؏k=S/5v虃尶h@1IykO٢6k|hj~BRjz}Ky:1{FXԯ>n{p}N3vWyYGD @ @cӄJls LWԁou:^+[ѷ$LS:ڠ}է3^k|mUe֚eWw'A3QYs4YG^YC5m}jg_~s|eeGk^3Ǟ3QW<+  @ @  աgrnVqHhیw;^deMelR޳}s˘Iߔe=sKbꃹ>z"|m?VvmH}X_%Sj-T˕u[uc#$P{p7^eoY @ @O4ɽ-~0/8(>;.X鷷^*>ms}e^wt_cnzqu?R}j_NHֵj9R~~\śKҨ>UW#.2Gҷְ%SʼW-2n{I?% @ @iB%өe̵o/␲31铲J>$>˘{Q)>Wjtʌyt}xS]ȏkt(=ܻnm~߀yt3{J @ @=*9Ь"#s\f]I\;QGI41S2}e~gLmy^m{{[wտcyzq6W{\>⦅QѰXޗMysY}簿w-. @ @"pWBz[3n19nu_,1O[jӞ}Č>ˏ˯_^{}JW}hݵ3-sq~oo;9ƺgޣj^cys}Z?/kދĞ?I}  @ @xiB%9x̊r *+'{ō場f>}ktyAWǫ^o{_+{soK^Yqyo{$R?NKp%TUekT>k|Ǽl铽ƞ4ޑz7n5k]y_< @ @*!pr]U>>UGڰkyUv.5W{֑^y ̹e@:^[R?e\Qʔ)X}ǟؾފ~<oG.K}n3}Ϙef_K2 @ @8M$62){vTXm9=n׆g=MlߧS=틴m\sc->x9{-7.gq>i=}oVu>:Oך|&F>i{v9[RW޾c}15Tuesoޖx% @ @J঄!^]'2r/ uƯ1n.=~جbJ`oO.mէ'c<|Y{w{ԧQkxʱ% OZ^[}P꽭{c[\7 @ @W঄Jqˁl]=1Qs/=~;8:5*^{s0l17Ζˡ{-yq}=ʕu՚Yqq5)PVBbu}]Y=V'VcSgWkJ @ @ nN֡e^۸U=׺Ĥ~p{tYR.o'68wzkqM\ʌSeR]֖5:_J:קm iMO)֑o3q~wT~}~|7__%(,Z  @ @W>-RuxYqpYC)>Uݦ}́iC Nl9=m~*j)]B.m\)Wű&}BF0>yH\}ɵ7^ھkʾSy}6v7bՕqXЫ5d__U2k2{kq{} @ @ }>5q9h?LLQR?5Ư:,?s9^_9Xྯay).E}uUc՚ůNC=]WGVK|⪬WSz=dyכwJOojN5E͵װ3Om`ngS1|ꪵhZ=K @ @ |IB as.㐵ILw4l?FK^GfZϲǬ>ˢtYX՟?9kLgk+aPjoFUk$Zqqm^%E^c>*uU*x0{OTO2j[}>syfk*: @ @_P vYuxC 9^xXKpG2ngwhιJd+$@ @ @JU??kկ^uCӔ՞*3<>kc30zzY\;}PuL,fo#屜W|]qﱹ'&bFj]UY.ov߻>>2h֜2\[^Tu4WV^ZϬa֕5=O @ @O%*a@99ahCѽ>_kY?~>OLڷ*0 u V?W-~[+x{t/ Ky=v>OW%jF\%-T[noa>I,Q~ZL鷙|omď}~א}s<[W?L @ @x34up]hN켖Rx{]lbHc=m% *IJe^YFߗ|c-]Rce\k̻Tns/gc 5>1Gsobƺ~=~ɺ+ǥ󖱳{oi_y_k܉Z&FI @ @ |ܧ-oiNLޞ>^c/sA|ʏ%T+^oo]߫NlX=}GL%U<>^^U;`\+=L 0=9mA  @A  @A߇v_u".<ξZ4Vw )}륋[6@;YLh?j?}\J߇S:‡ܛ_S^_Ms]~[KGjPyvQ~Fog4(VGSeL\YOY3ԽuML^A  @A  @A ?Q ߿hflXOS?`ӣzl^X "}SmW )sH]^!!Od<54F z25Z:eΕA9Gg|  a.T#nV:쿍af#Æ}$/t;o"¸G4݃fN{>&ޝڧذ0S{ǽ=o}snߢ-c^C36(_/^Zu}0WW9kx-{3@A  @A  @=.T 3ncxI.LlMP6\ʧ͜rKȿOzN6֗/|g نصl*os>ҺsFf-/!L6bn) J\~M~3>9RGSSNϘ1]8Tng̃@A  @A  @8PyKZtid;lӌ][RePѪ\;mqOtӇqq3osu8>ԕ"g}W_OU_Sf}ƅgoZJAO~t>kcOZg=3E^{7M;w,4 @A  @A @.T޹\]W:k6umʧM5Yww4oMz 9?YϘ^.}1 z=aᩱf:B}־9|]+zm8q\ĽMRu>k_B9;czWL [)nRq_3}f@A  @A  C/TnL`#zib^\ nBw^ƑgmyNyQrOjZ}lߗP`o`sN3G+.;,μyk"cH҅c> />i ە}[U2C@A  @A  @҅AR?!nfu7akAuo>jmSK>Myaū6j#<|I=ʡ|LG$ڃnf.s/x2}\O^&QĞ˼m;^YJW`I% @A  @A  K*f@y68g!ݿ~Vn&Ejia8wk_KWK!u;sN>zjSuwG׻#jfk5vz}A6$vmT5uy3 fSq7*HfvKB4mƠQ%{’KZ̹4f1JV)v矵/~,`ѿ2jWT6ݎ)VW-_骿}0vi3欅Yx|"z`Յ>5XFtڪʓ ;7oEo8F Y{(g;$Y\欄V.]GL/LW=m5}OA  @A  @#Ѕ 5&'owy]4w4/$5_C0ڷ- Cr}2O.Ӳ|FX56qx|\.Qݽ(#Y]>71sYG4~[cc뙴Nwoԧܺ{5=tӘY`g@A  @A  7A [3A4 mvff=> ]hlGn<'&OY85_M9O{ُmطR=\GGT@=#~Jgʘ~@A  @A  @$^1D_˅&l70 T~Y9kNulJ鷳ɋ FhaH6Ǝ5x=q\-9:ֳ1l _1\ }F8{܊s|Ȩs95>vR_BɁ:}~w%{ 3 @A  @A  w/Th:3q;(!uт |iB˱/ѷϩ¦kgq+{rb799zTyzx|t\8b\uԃ.9J͉ 3;HlѺcssnΦKry6}Wq/ƯʏVuf @A  @A  {7"m&|nGuQISkK󶰔?놧2w>ї>8c+5癿A'3m#q+kM˔~ʟMo%;}l~̗$fA  @A  @xׅvoxεsiʠIpaQc悞Ez.(xoѫR⦌ܽ*>A zgsW]2BZ—Fdqޣ#UkS]=kxnžѣGKaЏwA  @A  @^@?{pmB9[c׼3{n<#~G5Yu;АO0eӧߌGO?_1s"_.;.JEOYγr({CN+jxuYkqv~Z9|zx=>ȯ^.5AØu!@A  @A  MP8/BlAsn>_/6h&+~WMGAzb,{bAI;AY ~:k₡H:l8r!_z j3r뷺7kʞMaAlG{fʦYz?Lgp[kl+Jo^yv@A  @A  @ <|Bn6H_dmJuWkӵ PszO_<`ٗ o|l9xf|Baլ* l ըnk oO1'ߟ Yly#֜+/XρUǔ *r[y0L,X/ du7~h;(5gb9?Z۴# @A  @A  ^xׅf6P] t7\\U_vPxr8tj vWg>g_~ŞрV^cW-*/i_d^F>]U>1 ,ɗ}\kE`wK3#]ͥ *2ܭ݉@ S~|ދ5wA  @A  @A{B)'fiV.57r}@Μ{kMEjg mX/ڰbF۽-n̯M. a>1ڽbϘ='<98sm>ǧvp՛5!RE9Nի)>8R:濇koZz֋1^މ]0f^>7Ǽ﹐wm_fYmZ۞" A  @A  @A]`|g#{3~|֋Lֹ6w)6tq\Ehn-0 ]>-9#Ӈf͵Ÿ2%q kM~9q6z(E5sY,jt=K^ j1{uSJGrΞ:Q1cɇ=v8;80I13_6o) @A  @A  އS.TIW@.Fh9fSO=/KU|X#RlȃO!t5'^?8=jAq10P3CzYzm qR/}Mޫkq'b;?gƿ3vW麊+.^G_ G~Xo~g׋'5Gd<@XeRhY[ϖ:G>]K_gՅKFPeg*CYZgVրϩ0@A  @A  @*4fNn'QMA<5a:ۼeư)X_~Z=s 4,>ɗ&hdʘ9hi+ݑ6vn7u}0E&O:WWɓޅRyVN3*z?n÷h{>[z)|zL[V\20=BM_LJh112ZӾ Ɯ7^ԧ1ﳸiy^lhϔQ 2x>˓@IDAT 6b&5G|9@yл55we-.)<'zP|uۯ}>|l1vA  @A  @A࿎ !^Ӑ41XAq45.EGW)9=|1#ϲ3IOS8O]Lm]3ż.>Qhb2ډc=h_[ݔ|\͓֖_x1\Q}:!=OfM;39W? #q5k;:uʮ? @A  @A  ]jz 2(ؚǮMZMS=(c\Go7<KY6tNJ.I}8@1/kLXSZ<Y.;[+wϙsyj?ОCfɼy=R;ló)wO飶SEgXѸ A  @A  @5>tHpd4hlJNK /U'EX3|_G|C˸Pﲬ`k&,{ZM}n»tg ﳱ;Nůzm lpf= R姹^uyO=u1BGw3NXffebn<5χwWyVm/;[:e @A  @A  *ueoWq֘:{\fL|S|WECgC6:Ɯ:-/ښӮO10?Z\מ=r7oaCL{tݵ'^-is__=33ƞϣXv"ϺWwIHI}.o @A  @A  *僋Lyǿ>٨d6ʡ1Ⱥuٵ+O\qtO;:KIi|Ɩ7nl?z~-|"a}m۞۴3QVlg16_?s4םb >?ȭS)$Gu91gjbvA  @A  @^F&+y<6|*Iٶ+--j#j7}; :>|ew: P^;y>8ӼrݝRj<`moy>x~ڸwm\*ƽERQuc6`?V.gz;c.Rl=>q9_ [`;0WhA  @A  @ pBeoƹ(64{_Ʀ+syzϹpuyӞ9:.a}Dp!|`;7k/cbq?OhgL𸄺CV?Ig[jLϼT^\~>^NJ>kNܮb=f[kz?Jx\smA  @A  @u}`i퍾 _Ts?@s6 r2ReM.mܬ.w9j[TA<8Y=L]i0 4z/Woe@~k=v3k7QqH}$歺4':a @A  @A  pAPqfй2#VmLm7+s^ Ix VX:uw}u;+2lѴ9k?'TR7"Į1^1xwktX0Gvk߱us>{~ƺk–<9?ruK~⡬~ҋ1̽i4+9'jInc —sV^gۿ'F@A  @A  *}KO3uhj+} H"Ŧrvj,_gK{NƹY3W_?y+;o5gsXWvOyjkGc%AT"?-!pi8yBߛ^|{3w)I)پu`kǣo#>*D~_IV CD٥yi6+$N=.dkk*;K A}cΥ 8!܏nmb1kuՁRMy83-g5^kϬc&^))Sʖ~?}*_y%ʻklY @A  @A ??Be6|۳|M}1UVzomikV%씮?Rawl[Af.Ә_41|$upa52gLFfL(~;:˿r{HrgN@QezwϠ_9ǽY9kLJoܛ{oo.[23s:eGrPs=? @A  @A  /Th(zSSQ1FCk}rrus76ke&G x Ӓi;k绋Z}$iO*vݯ^.=G? kea@9?k{ƔHL҉5ߑ\A  @A  @T|lç4,iVNTAa|thZ󐝍BU_3( ݊OMcc(s}5yA  @A  @A߀* kOp6&9y6 '=L4>ppmhru"wC{h_dP8VNփ5'fPx:eڳ֧Ϥ @oy Bǧ hC}n%\֘#߈=uAy3w{ ]m8c5-ȴSX{ @A  @A ?\)sv=Q$ejS3uKT\SWc_]{aZS-Ǘ=3uɏ ?;1|̘W~/ ?HM/>fȍnhA  @A  @Sȅ;ކߍQ>)64lԛT_fsױK?]O)-iR,f"P0>&$si uku\?+EumfjIUyYg3sGw5N{=fOGܦsayO:j\[PZH;"Q@A  @A  DrIfsݯf eS ʿoS?dKs]_X1h(Z?QKs Mنyl_BL(@^(P;Vk^kOl՛~,J6Y^ȣ6G`q7Qaw6+{Oz Oz?q˨=<ژke2C{xξ2.8 q.]<59D@A  @A  \|4,iRҐ\to.7S3lM}nsrڭdk>s(C_{%~KuQ2sdm=K>6b!Es&WzgN])k.L.vѣ7wzvׯ꽶zߊk[Uc=a5i|e;Yߢl _wL_Prh$A{>Zs O A  @A  @\|ب9jST{Rt_<+ uP(58h{8 :E)n|gC92̯}\׷|ל}:\P>CwEi\/mV&gicn]k~ir;%# @A  @A yB̦e7G4GoWKls/hҰlY뭼2^/?W˸W@;OPg{k~ .#XSRd\NץI3pY07/cאyL?/Ԁϼ_W9|k~~R3IwA  @A  @!>BMFLl C t6iؿSWaO{t>W<+J Y!b&)O,KI >RRy[fX ʹK% >uϙ~+3ѲUO׿ Ii틶kl>O(e :q]@Nry=g ^?zB>⼕,;z@A  @A  |Vz!6kܖU?76glb7mn@:j6|W gz^ak%Oq|YWbp7mbN^\0uk?!y{?{>}^_OVq':'IX礨/cZ8\`}XacY9g @A  @A ?O eƫ7j7ŗ˞6mʠ{Tvs^a,xL/w\^\&04zs_:Ņxx(esga1/HSwLԅVA?/mX?s4v+ەc_rvm1kb.ڸSoɜZ}&}Iڸ͢@A  @A  -w?̏d5hJ#>66.?R#ݐ^{_%4.hUGvw7gNǢ\Lo=thpz_6aG512?}HvPu}/Mٳ䵏̅ߌa}3o {c\Y~qp_7ogRXoLjhr8jAA  @A  @l hWٷ4mv>86siz{9T,جe6 J>5goM. d0-敬q.]moՃoYQYUL^@{/Zt:˹}[L=ԝXk֜vGO$U 9ݫSAK8[ #A  @A  @ *4mڑ{7W1Hoڶ}5פIط~|54_xL\ .-\ 5]óQn:|ƴp.gG[lJ^l>s^7vtLa=Z~8 x˛\u=kj!M~Йisn/ǤFI^lo>R|cxUps}|A  @A  @A{2/E!V4h5&Ϲ69:?6Kf>Nw4jGbFQJbZ ȇ:2XgP׸JJN989Z:3wQoʘ)}:cv+ks>-%b;>!Os`.v\W?Z~zz7o*=u|qjñ"4 @A  @A !ܽPwMn,&^v纛KfSbv421 S3֡& |_-Vt+zl(svQ.zȦ=s2e!c-o 1s|*9cޜI?Կ|8Aa`Ru=*.{x˖>hkɗgʽ\Yy~qؕGY' @A  @A < .TF+n\|s5 p:&fʦl 1W5Lw/'0AWiLL9_dS{ cLl/?2xs~鋖u5F8q9|~x/17~[l΂`=x[GM5ǣ ɉ *x4f]w}1+l~|jM ǧ>T19@A  @A  ދ*8i+:Xktfz5b>z ?uocp<[W>7Voq-MY^20*oi3sr.IL?9n^O?=|6-Ic3^?e3 pw kd39=6(z^< Ԍ\ndg}:s+ŏp<^/jcgԆO xx\ףF9o^m)< @A  @A  PٚUq>'`9ՐnbPv6X:]bkLWiQuun$f7I їڐ.U7нf;|[n4^Y7ŷs[Nsнs~a73ƯZTIɇ:oUZw,! c\|{nZ{WƹM9O1R+, Sds~9]#sÏ$*W_FΫUB@A  @A  {5gO Tf6Hn&ö}{*o/Kh10eȗ*6zcgج಍]9{sgW6kwy']:3F-`^c= 9!Gk+﫩wyU"}q&ugnͻ5 v+*)txc! isj k|fo.PVnA  @A  @x*4lGhFzg6v~lɟ>C~L6Gdu.S.l&*Rqnb:/zqȜlmJxU-tI^LlL~ǰyS3|>F(&a.6⒋/^YܡoϦq`/~9d{S'@Rjܦɜ>5sx8#y⋡1=}|pCˇ+{ҏnA  @A   T4lM}̈́fי2S~|П e Ձ>)oRtoğC{gqנiDb;.;!fFwǿKA{訫~T{=+Ƴ>>fL0//>߀ |`/EG5RZv}eKΊ `9>Gf=  @A  @A  *M[m:VPZbt PߵT~7*e.;xU]MΟ\PfkHQaG_ͽ؛Ζ?pj,.s S8nJ |EkZX_;6OUAw@`88ɏ&lvg 5.U𩕼Vf@ Pc7^5(}4u{>X[3?ʞA}P\0GDVvwG[$o{:ޱ/=g6BJr) FV%5o @A  @A "pBҦxF6ԡE4b1bi3^M/ug#퐗S txH߮x}0b1sp^%l9:|_g}gJ{͍[]N}QL *]Sv|+1<iOrCP-,q{oϞO,qYWScoG陫[yMZ~s%raȘ:7k:4>z/ף_|VN]/>Kqb*eB@A  @A  {bC ϶ kTfFIh|8lW,cϹky͵1[{?QM8u_k}lasyMEr]6ڡ㴙j ybط3_;ob_>c=˞1ՁrYW(92q&ZyB{%O'P/Mwմq+~eRuRR_\Be ?u_>s}e0/ayM( ggTZf՛ӗy]uKϙl}\V^[jGH`/Mo?8\޽Ds譳3}ÿ15y[m)_>zߗ;9](wx|5Zz/a+Ns}Kx].k|L<[׳+e@A  @A   pBƥ (i7pjLgaÐ2~CٴsmyćvCW)yuބbgXGK~7I+Ǐu3pP6e 2nE.#2Ɂq|_N̍J5 C]}9oOv*j>2:گ)mѯC1׾bƿcs&/-goU]ư#_ ͑kiQKI,j XwE^]uO fKJ{s_|nb -󽦻f@A  @A  RV\+jj6huj5ZwkM}@O^tWoΘ9Z~KvC})|˓"ckg\.kzi]{tn{xoizq1\&žc9~/b;ﮔ#sF6n7v'bJZ\.Fn47 mLS 󆇾>ߧ&:򹜲e>^8U6 9)[&1/y8Rz~ڦQu]O+C5 @A  @A  p*F#5 ,Xmo& .woN_&l5X{e/u8\4^W׃ͦqpm-\vګ}O]fǜi٥M?siX n_>qOW=s2<͇JP֋j56:Ϛ[̮UO9S>| _jo g'ss>Ch_OޯP=k>>7_l*N`]7/xo0.=KA  @A  @ }}qQn4Vmf3l qg=4">Cg9֟)W4ʖ+b0U 9׹_oRW}%C^Q꽊xyW~5= wB~G g7:O0p᧌f96 +M._7c2ka-nʥ`ZNtHݗh[%/XLׂ'S=f<vT3=Y y5^2GT_S/U uXz\0ɛGo:q_ߞ Z:-W_&F>XmaeDVۤ>cNO;n@W/5^h7ի2<&~m{Gw@'ey{Dkh3(1xbq]?S[=SI*xcrvqq_{jr'̋|*L*Wqy{A @A  @A  w/TPAMے"/Kc h;=6JY>z\}֌ Ǧe)]]C`DU__C?\gLޮn/ڪyZ@3}~s{^8"yl !u-qCZzpA=k~n*ʫw޷QvF/]z<ǛZy0Tl]K{+Λsvܵ3.sr9.TVk8?7oǚs@><1}x[", @A  @A \E / jD5ilXMGl6fSL[duSoL J#N\s4jb^sKW[uI蘃6^eC7ȼקr}\Q&U^#9b3g΅ ~ sQvAi({܊G-W#v_x!?԰|ӥǰ/zj?U 93o6?]^_vLu3W<"̵vM͉|G~ Ԓ3yTPkk:MA  @A  @A@uQuqAsʥ[$Ӽo5=/Q9;#Wk%քzI?R眵3w3kag͜g2T1Q.X[m#2kGrjVe>#Zc8.j~'郼*O12ޚﹹ&-vrEbrCC"Ze?rه-r_?__b^m.UŜ9taLLst~0>Vfnɴ1g A  @A  @xjZ]+h^SŸ/<6r1i7N]a<Kkw~E?T5stfׯ9SYYM[^Hw?@uEՊ3`+\Yױך }x(%g=9Ps9̸Xޤ 6De3oGc2zE> Zc*'3&^J~53rX31zqܘ^,d @A  @A Bw{6|ջEߛsk2|tsFR2n%59r>2|cO_jvoL6l(*1SfƂqyg&eCѝ8j652F딝k;/uG\ȯڕaw}Ӧ]i~v,ϳHx9TRuK;GF{E? @A  @A࿉.T&T6fՙݛ=cl\{6?Ni3YqoXFL\N&|Y8EҠƇ"CW;s:v>ڠkN}ǰQmLw#υX%2j+j•Mq3KA_uMK^Բƌu7ֱDo@G\X77|w>gPx#V {.D{ԃ>f*['|1/ѼX]âws>N{¿)ߝ*`gp+m CyfXrySƞad;;j!eNnyp~/woO^\Ç #8X(g=f.VЮg84 @A  @A A*o"c6~5hYSh3yF<}fa>:*%+^K'm?ǘ~VCD{)<_誃^{+'W/ư=zK*5nM _u՟(EF:^/}az:L9qf(muMl0GW>7SQQOTǔw]+x}`+F++Ҹ_ yYB yE1&}oZ5I;2|5Ӗ]2EMۖ]yQ+nA  @A  @*g4h-]j<6m^2WFm7Sg.G-֦e:y7AVP'vЙ37*esq,Ps_>03xK騿T[}|08jM_s:/t Mט]s~ʩiuŸ5gnI1/CGL_3|S}`r_b ir8b |֚|]]|̿,b @A  @A ̅D^s&M{y⫛rڂ9c`N#9MB@IDATJeӖ5"lE~7Dx63)p/_YQ/cE[(6<]HMg}d:}8t>\>_+r/QcĜ\}ogɽ-scu=isY矅+zΚoWkOEmt3|T]x3# @A  @Aߍ@.T_eУlY+N6 ޔ=c>&Xͽv4ߵ(p.kg#]\w/f+>SW:\C9Gdc|}~XUR(%aSux_0v&u7Gn>l_ ~$[T]A  @A  @r}g##еՐXy7JMQl9۞6CyWD4RZ 3^f%E5/Sϭ1qid=t˧^O#x%ֵw|ҵ.KE ?Ey#7C5%KV/;Uv~Kktgt'L~]qOZB=ߛƞ\t*M̎Q3ߋ^[o ӧA  @A  @.r7hB_S D' ~TqCԦ37j?4+K_#/a7C/MgiQwSj%WN/K]Dsp=˸vO8>Ls:_5i~W?޻~̯\ l\?|j|yZ8c%O'_z_raw ~O.g6}Q5vxi[܏ƕY"zzgԂ@A  @A   r}A^w4&^M^f^qio樭NAivu_:\j}̕ VAT; ΒA7rlv-V b(uG]u\0]䞉d0b AzzʿZ$*)f>Yxs-Ƶ\Kٜ/fY-`Z-u湼eYKTFH]OG7#/Kmr^u<9 A  @A  @B7oMK+<uGg4݆_{4gҖ%ºK96`m Wh^>r9r437=GuYZ2q;t >_:skZ]fr_~2D륿X<<ӝv\3Xs<s\O_:7sYg GsϪᑜvާ{zI=L^\A  @A  @ rlc7Du5tҶY8>VP_6X;M3h/ ~j6 *ȕ\XȘkB%{٠FOTP>qkߧYu_xtq٠d}岈˔b/wXb{՗L%/3YvI3|s%/5[oQʦϚXoW~3u:?~ɛ@A  @A  F *&h7EnD^7Li^iڔf|٢?hMJZw^tI;'sYnh7GPd.uÿmhL:c1?r+K~^p!tZ5̢̂WAuL.g[9x'WBv|:bpO\O%ܥm=yׂzʟn2!;TuQ'~;u#W=M%:gcO8%'FOس!fd%eҸV>bfz̜ܓwOG6n[*|ό, Գ_;~@A  @A  \|-ޟƞGF;4F EBi&k>:u䣩_4nWln'qoW Uvk}bmUwՌ篿(>OGh#[>ueĺWDIh;w1r1ĜڹO]t-6k^vZ>й9D͋1bܙi/z\sOD}QaV^Nv~n$ @A  @A '# 'osw| UfRlxvSf5Eʥ)'ܻL]mGڠyAȧ9*0|%W1s<󋜜;, :+w86lj#ksjīSs~gR_-kiss6?sv D n~+A\1MnA  @A  @B;oΉ&̮MB(9M~<3GsWf}sc0 ~&ʛGTyys(2L}0q#'xsN=:R$}3_Z8I:|z;\R=8 A  @A  \^n [4\O6e.LDѳmۄ>]ѿQ~([V|dpѣ!.Y.>xt>E^E{0vTQfk||u9nVcz{fC,nJgnj>=M 4}MSf㔵:~.t;GgX^7cY>ͧ/#ho:_f=?N7yY5Y7 ݿȑi>5w\+#2V\ƙ/<ޣxux#xu>a5/Q/J}:p4Z1_]xP[5OGGO飹G<]?3{nA  @A  # _?a6 w~]ME歋l4Є"oO//еY>|eP24>/^vv{%/|Q5oT9)F/Šj|96ܸT>=:'1ܭ}za-@_7nxpU.i达?g?V89b A  @A  @=Bj j"m>w[ܪ~6gս!9K<rޥS5^7׸ͣb 4Xh~X9qAͣpz&T\]tj~]Ҙ7oIW޼ k)u/7Z>i,QlQ?ox.n)3ާ>>?^N>ύoA  @A  @__Vfcs`L.faI}O[|ِD]ߚz&_;js o6qq뗎Y׭gz6g).RtӴ{dkK*#WePڟB?ՁAy)Ojk(7s0y{H>ו?czdm|9=b/|~L93}+%9\5BA  @A  S/Tl`XF֬zOjﱟ*)G<`NkqbrvOq;1|dn7ۇ:抏uc<@х<~qfr&cl"OAOSC9k:>Jw?4tze' p3Nʳ~+{so9wm.~c_uHľb1x]iarjWTy>m+YA  @A  =zBTݪKw4w1~y{YN1ͺ)Ȯasi^'z|ټnxiy5kۆhbyӧL95]7vᬐBb<3?s׊1u]#o!3v+Z)x m.?2sS#Wjx4 @A  @A /@M(zYv4xh-ʌ?|c_o6:sh7n^>.W3_6]A1ڷNFߵ-DmǶp?Mr .fI]e77eؕ}~߇ ȍ2۰!\/t3N˴4k|&dɫ=xsW .uDLbk~̡}'Å؃WNU19^̩~'ա*k>xabWs$/j[Rݴ$r7%Y{2ub]hfhfhfhfFn~bKl>𰁝 Φ 2.*nsJ<Ԧ#. 85XO1`0)$ܓ^` 05Շ+lʂ4-I%;7zbo u~6R*7];t9]WK֊x}bcT>3r^5uzkKkfq8Cra!ՑϞ^,-͔1A8{oY۳1 g.JX}ș0c=rًfhfhfhfhw2p\jP'tČ](J?CX@G3F)~ۋ'%3hcѶJ׋zʘTei qn\C؊Xϛ$s3畉9q|կ`6G1>TWiBۀ5\XCJefND 55bs,D5Xiz/h8Yѽrp(H^̵>p؜|x_~a{9bA=Faњ${7F./s#߾"of\hfhfhfhf5 @%74jkRFmfFf="5j.KB2hXŸ̇zh(G1ODܗr|8c,T:_^unb`nǵX$3 k0\U;[$< ǣ"|^G=rcVY_fhfhfhfh* ";fP$9k`˖SHbΨhF"FsTu' Z{kb-}#9Ă8]rMw|p+3cl?X6(No G|2*͉_6"VcĸK::k)uR_$4̘ծ36C2R_'W>u06̜(Ç 6d[c>a곹>ߢOZE + JFci{i>W#T=׆]Vs'FɩXZ1Q(Z`=[Y[߽ɝ0ԝ\uOYgk5sB?s}3>bS>{OϏy|1e3 4@3 4@3 4@3 4K@X(9S1ϦU4rCOf'En|{,q9c4zf ׭!e9#.u!٦1\{XFX`'$ V߿aҞA~Ęyer1m$xt|xo,/>UI{ gaVY4!{gX̱կ~C 2b=D,Fv&{ ɝQM|(ѢSõS37{ aie~r5*ÿ{~C_[bϚGbWwfhfhfhf߽@A@bO+`5&6kcfø< ʁy6bRW沶2ċ8Ǻ^ꏤRJZc/=c K<$=!=>ՙ絎9˧Ńt~`mpߊ> z+e}h =ϴK> {dsüG(3WzN_%`i O{d'p5Ow~?FRF¨/Wna1Ƨ_fhfhfhfh^oXSm5lGVlV52L_nr?1NMqCտss7¶"fZO5_1Ou?쳮Cw4 J|rySk헌aHOxcF~ٟMvx2^bXW,6#I񍅹]'XYbO9f쏑\sI >=&LE&6|]uqAdc PmusaTTK3 4@3 4@3 4@3 4 @VAc:N?%4jPͫ~PZiJȣՇXGZPQ:+ֿ$Jߧ_ֺdŎ뵘 ~;{ag<8،UnHڕy7}{~󁒐z>\saUogJ߯?`{?Capx!޽XkzTo^e\=y)þlŚsEƐƊmZR2|©',͇.]vԦ+8 |+)fsƆφ3|9{lC`\E.{y87CO(aoSO>'bD7:&syd~| 4@3 4@3 4@3 4@3r>PM_6kɵͪ=h˖ pŸƗm$\5ϊEͺ{ƈ#{Iφ3GZ=[sCkhtny/\9*X|>1gc#}㾖s9q=.0~ľsL@i=: &yxORSH߫r.f706/z!'-|\mOŜ\\~|b[Gaq՟Q\}߽3# Ĝtɵg@3 4@3 4@3 4@3 40ps9 (ӶJVGEpP_ezL9z8+ ?JlڣXKiuWw2jCϸ"yYÑ1r>8Y3|^4v!mXTg_s z;u8gL7GӼt%Z[`[xg؎,/'zU0Dϯ{oCCfhfhfhfh1pJm9jԉڤiϦgmZQNlCs$6`@Y88џtژIg4ԋۜ&5޹ź?ѥ?  4g%Ǚ\sS'*cy۰.R3>7ok/O[ra1}bAgy?ճG ﷔`HǗ qe,s>K{^@ V6W}%+NOƷq-nחs|)m@3 4@3 4@3 4@3 473pJ6g"l=4jk~S͆hh9ƚSi^>mSN𡉜;xf {"in'M <.bT*D Uڎbgt e3_=96'^ 󫡬k<sJ}t4~~Y|(Sľk8Q})_Ѽ5&-cjڇ^\_sd냭ڍQrxF+Hbc~kc Zqׂ*7@3 4@3 4@3 4@32pF*/?k̚FsieϞ-pܚ;ub3Φ\Ys4۞[۫_myw&b[/f~#UNAV򞉽T8rt7Gs2_!PqU>1ߋ@o8M/b#9zv%z5T~x5/5۫9_p %S])s ^Uuq83G_1OLq/;~{dfށߚʵFxGSumR#rͽ҇-9ܢ(\赩S&LQɌ{@~ՋK\)pU9_21_=ofhfhfhfx%:64FƖV6B>kCfS( +Šk䝵h$팵Kxͩ4E]EG_eY c|g 9hF~Ԏ:{cg\qff<>1O.6!Wr6F5>CYqֶ6c{qތqq沞ks\Բn͏ iCsqZ9 _9>NK i; &I8#3Μ~v{.Hp9@.?|ӻF֋:GjCeLAG3^dQ1tK#E枢{Ws\gΨ/>wTm@3 4@3 4@3 4@3 4 \}6~F#_zJWOdyY>mPa4Ǿ(ͦhh5wrXo_~J8FyM;\ &~j's%gkf`#k\צ/DŽQ%?#zT{&y1qe*0}" M~o(FNt-/F:>?1>U;s֨Zsjq/sr1ؙ|Ǫ/BCHƽ>?Ub=нkP~AMT<@2GR :$N/|K|wGJL#OYsӲhfhfhfhf6>P! M^͌4nh mQN[m_~:1T}yֶq I#&ÆXg>.ƙvV.V|-igus:8W#B\Y;$XGq13 Y55G\Zo#׉S8?$p͈SYrN߱[})6kƋs ߼}zoV=9٨\pOaAhyۑ'j ͊_ 9}>:>mC罔⾐We渴qr8vmp6}~)?xp=7 -yۧhfhfhfhTh Os9c#[璝5= k # 㲙=po񫹜#[9_\룜c9?gcO3ҏ$u\vYG}yE2̍g4@"MU[`f+g\Y9|G.pߒ'+{l6zjfhfhfhfxT& U4q߳?͞bTT[i4lbFqu>sh P17ݶF:}cg1Uwڕw ͸83fXfCxscPjb_9\yߌG>耫0[)"OuɁ.G$AM4[S;ý&oֳ)OH-؃qrwcx,We.^By_g`[}0'.c_}M;ԫK6x}M|$3œ/W} M~m7.6*~xabL |31w|z$x!XOj/9%ɚgk=_U4@3 4@3 4@3 4@32p d+64&a#4nKMڸ$α4*J3_4g_$&KdUߊ+mĠОRs7>HtQ`kF>X09-W*mC_kh2V_XތK?%8'{C^˩ OTdOrއ*џ\^͐7@%_sV&~!]Td*HVV_e`=|sc7E[:ey{`潝\.|}9POnM :☋G''ΕϷ5΃3ޘ8}~~^7ۇ}Ƒr{`;)U}#[=˝XCg9,X|q;GI۪fhfhfhfhwnm,"y]M[k#_O+^묺Kk ˍMlqc4&Z]1>bI E/ʿ Al~ȍ6=W?qZ?pRDz΍Qb.g~<#j0V#xfyGe3Į{]#kGu ڔ=q=Xr_QV,H:ĄsA%dyfBnFzRtx8ꫩpt$w|`!<]R'rC`c7 :TF]߃F!?fhfhfhfhN~Cƕ*mH kC\_k:GIKZN3\׼%՜3s]T;LU&N ׁk7ؒ+֥{:rmCi_YW5g3}϶36|As8|\Ud^/K=o\\eXfI\-re 4@3 4@3 4@3 4_*7mĬ26Ѱ~BeO#1<ِѸȵQ3ci6^HuI~mq󝘸hRk!0\+~~ت;pnܡgL.KnM\|D'>㢭~M{"?1 Q8sfTu_"#\ڑK^轪 gs1ri{H.}1;~O|-\\99Vċ>F C8;GkeΡ?#.}>_AlHې1f]ѺϜpPaSf& 6o_׫EQa e35{5ҰkLC%툨NEZ0s0CdOI%8xiϞ/v"cSOQgzmWqTlV~ڐ9s=}}3 1U@R]{[C2ٓ/s8z~yJfM|L8 =ʿS?35Dw3ifѾ+g {1yDlMos3 4@3 4@3 4@3 4,W,fʘDc\#䎆(_$gb[\m%l6BQ^뒇9~y.ɫjukZoלm]l+#lSX #Ng!eM1:i#:fP~׻ǽ5 <_rv/a+IG07tϵ~#&0{Yq2<[T{i<eCź|mƃ?ryiqAz僈iG#e-q@3 4@3 4@3 4@3 Q \}nfc64|rԴQ͗Al$ 9ԩcnUk]/E~k|]w u.)qտα3]ib}=G6\E 3Vgvl#~M=g,y>HI7̧ϯ`qO\6Rs&G3ݝ ?OKlQ*qyq#P'Rj4jjP"oG~˱P%^5|稤9dmGon,p3sK1"8RNkfhfhfhf Y~{W}2/%Ǟlv[(۹f<1ԡr>j5f@:߆A\ap?GX@_mp vKxiriQZCm5^vo{Uۆ8?y;$;?y!z¶DZ3~<"\Gذ3i&݈MߨŰ60dkt/{nUsc{uq3ϽMMjt!!_+}>hc~l2ܸfH~x2g$2jGz΢Ŋ!|Y4c7~bO䰾` {:k"B=d _CGRWSU&/W6ؗ^)yb:m-OAY#.9c>lfhfhfhf_`*#l=#.[Ѡ: 2FhhMO;xȡ^/P>% c"mf,ѡMlvO !c )La{38ȟ dE>s\RX#y6Cj'? Wbc6Cưl_W{Ա܏6 V `)w[GզgI鵺Ŝɘa͵\%Ob%*='%ܗluӶfhfhfhfhp/S86%4_ٶ {F811qզql6 nG6iE:5=l4)ՇCBf_br=+{s ~$ 윕?@>JN.Q, @"6a6a?kG|>q'>X*A;j}+*>I_U O8XWb<܂}$rLXSqn}")i[6&gI{ 4@3 4@3 4@3 4o@?PH6*rl գi9Gi_I gW1cF,HqO_'`9^<<Ў.#vN/3#w105=}i;#2qr&` }Xk[E2?(%cA<\HF܂˗'OߏgIVv^7{]rCga~$MߓRٌ_>8fܯz5ދ}=!|v~u׸֯e3 4@3 4@3 4@3 4@o8d4nj<&y[;6A0l, ;g34CS[o [~6Mʁ# 871|kc3Ś2k#]?$6N[,'[łgsʇusd/893__⟵W<0=G7/ k{ȟb֭\6GZ=n77P\X'b,{6#'za>N|Խ/隁fhfhfhf _JWކ &I Lߚ[|g,&$Wq2sXk@e)Kr_>Ec}#sc?[Ԫ\vz<lS?pýaKa%GVNaO`oH`y=OMpA]4{pOGP1F7t~';k&$b;pFѯfKyj#|OHL!%ؼ )5﨓hfhfhfhߐ~ʿF :$X.taWHߪ93rMXc~[siv♍Cϖaba,zv>a 2gz|XWLG =!9]S\ޱ{vJ=Jcu}?̉gx~֌D7TF-ɯ/ycS[6c̳bMnFru*Nj:!.}*>ϺOn߭Z,yDRj}M\bA⌰m^+r!^7Xk|Yݨ`?ޟGr#.ཱུEN':03#_`Uײhfhfhfhߙ~;?T׭㬉G@cCG#+]FC?K)[b3j9oaN\̧/ v\$7}_!p v\?ʠl<ی610x~msr l,8Ϳ?S>{ <{s{Wn cuRpۚfhfhfhf *!-[x)gc240_6TGXm bӎҞ6 V}a-$MWm#טR^4wiWxq-OlOmƕ57w k>31{yY;<}hyyx{[З/yjgA&bKI2xŪ<+ q3;`ft5ՋUe3 4@3 4@3 4@3 4oJ]x6㐗pY5v`R;rO]b1O#gBKK߽O1bLM_!i6n>[}~&/:냴я_O}眚֭X֚]58P1sԡ-6sw.G>Xy&g {r_u/ofhfhfhf] 7TlTlr݆c]f6v}8e_6 tksLOP?1~~6cY'c#W>gTto߾؇߶`/9癍dH77 1X/d< {*9̅ugPʾ|*6k5{ϗKs?/G 0g=%Ķڳfhfhfhfh>~y\w73`Zo6' ȭuyjN~Q-43l@̜<(i677|g]֫MWHyA[YU{E,UM\ԧAC̬J+v^]gas{?,^pѹos\=BC}XDPsn pt}@Ϫ)N~3pe!6%-0=mfhfhfh~8 I{HFl|mg|epll01ƊkӞ^o,NUMvx=8A^^\`]ԩ'o W{{T,G8{s =VP@KUsobس5͡%ƼRr>Ԍܽ3~5ޕ pL+ū45<|Էlfhfhfhf*xmؿ 61rez4?W_i0߾h:7gm@ooԜ>#GSݒL[ucr_)x sck̵{?iQ_G kxݚ/n:sVw= nb;/{Wϖ`k#x>ƦS4@3 4@3 4@3 4@3fʛ ?6lYWmq5_ KZ|y&Ss| hL1eBfK|K>U<C G| bP?sXkg/d0jGl)CbxֳU/V!Vzu8>.ƿCtuo,yM|ßRH\ xLZ06)pTR瞐K[Y{JK|gJ@3 4@3 4@3 4@33T~Fi[y/}YnEZQ[mtJ\cEK ?)XB_ gXс$h-c`ix =#&{d֥aAwf6ک0g֨~-G@/&s>0Bz<[ǚ}2y[Zt 8OK"9'cr~)6{C{e3 4@3 4@3 4@3 4+@eedYġȦ}=~Six?eI F|kZu9agڑ{NG3;̃CrCYsmߡg85w7㒯>$y e k!5Ֆ#ZCG*NpVs_8IwW _6ʼnO<_\'K>nށ13t?> a}wx.|U@3 4@3 4@3 4@3 O?P9 i ׷ʙTu-15MͽFM1ſgsC<|xƕ<h̅ sxXNj|lS/K"fld>Gexiio99YG쫆u^Y *Y{#vHr `` 'ױ·.1id˹w*kPX7=ßgud-tჯW9 Cﺧ hS3 4@3 4@3 4@3 Thd&'JR4n۬#ަε\5GCܵ}^10ψ`;mCki.OQ8}9e~>P;>s;f4Lo>|v~A3'Er1G<6=>`sG戅<@u "i=عxXa,7Fk$;k~ U՛[\UHo_Y?<#ku-6$ke]sx[[(A[|}n^8>>T1U5@3 4@3 4@3 4@3lbAhdm SHclN)׸cU֘9/̩ۙ:t k588MϏ/qKLWRϡrJ Ӵ&!CJ]3g2+ \ r2UWlѧZ _dڂ\kc3 sa^YZ[GЩ.90Șm:U7LO|#GrUwu{>G9GqGz`W4Zyz`=ھ{Nbí>a,2qǸf۴/;5K2>P&7Ε<{]x)K51[~k~$\sEfl=?ihfhfhfhW0>PM(lMK6b3汘euش٫_s2׷Ưscj>cCfkW;\l=`!ys.ZdXObS}iW}ʱ|㣟 zKҼ1 h¨~pgb@`ʇ 1ŗoӽh$rE.PS/l?d?D_ ϳ~3ZO?.J< Ak{qԒCq䃐p/ƌ ̌+ ( \V7@3 4@3 4@3 4?̖Mi G^+ܓ+[WèTcӁ&*:V#&'zG͓^ٴA4W4HZV͘(rgQ92%qYuҘ^e6F9J>|l[{haM'`tpV01hOp{>ަĬZګUs'?;VⴱNj|Q)?D%M6٨E>;-kr ^i{5_x/꛹{Hĝ~nFI7%ؓHEK+k1#fhfhfhfhN ||nFemp&3hs%QޒCCk:_'yg|uFUf3;&g06dJKY}:>bwR%14!Wb:7&e06r\eK? uw /ؼ{^5 :bax!d͛' :`t_|ś^ܧ^-+>d.J11UuȬ1ۿ7S<ҷ|ac/֩8h+Fb— xwYGIM˽3#\BsCPL;P86Tfhfhfhf( *ђc~m\j`@_F !k[H4Jpi|#'y$%ڴ#W e]_M:̽>ROC--rO' iް'*\68y }7C+ڌ\,3 kdOܳyqOM?A^vp-)^Z8K6=[t:{hc8vmG9לԁ;d/R c85&#|'!f<̇| >7`.@>bSj|>b\̟AyK+}wK3X;hfhfhfhm^@epiCm#I{iLݘdyi֘;d>֫K62h 4rKþ9WÆ 4Fʑ}FGgZW5NR_8 5'luhr6ױw7rӐ*=5O[U@;>5>u!\9\f3.Y?^$! :%Z+y'<1 .kaOG$>>fJ`jŒ ݯq45fn{{J]0'L̆Ij^P9k엿!#qc>n|ueͣb\orfhfhfhfwxlҔF6D)O36Fh謶\7PFFoOsI Y;n`9C(Ҷ%{14̑5Æ^[k6 .#N:A3zu$ΨgK5HCLS$vbQ? r!STނX-8lsx/u5ߚigCS[1Č3ﵸ̞赩E61˅O٬#Cʹ?~$g8 6wjrW0ɓ\o|ϦUki[VXDg>Hym ^s3r6#d8luƱqa~C|V9{Q\߃~+|ǻSHg4.k-t⾔ ,~D&ސXkCs;5p4E&wiih|=l"l=luB/Vlf}d>sEDyb. >ֱ"ch:3Oe7>$:t=d1a1}G%y߹kGӮq` QPuUu3 4@3 4@3 4@3 4`ٔfMpa\msJd8SC]%찭ך氉ɚVfw쁜cm_Z!m~Zd}/W'Gubφ0r k 5CLVҸQg2>QH1{97OԘyHH~&qrFk !n&nbgyfL12W/CenxI+[J]S%l^2xs+1' sbuo!3s!;+~E]p|'_Ӿ/f,!Wjy3 4@3 4@3 4@3 4`lDç$m8(g ][mέkꪬvSak"G w'b8uͯ +3洘Y9s0?cB΁?xꜰK5>b_,J|5=t^[kW|r}-ߋEW߫YGNåw k[+KQ7[~-W׉g+b.pUu? y)qfւ#~=2!p:=#gd*ý Gԅ<vabn\M@3 4@3 4@3 4@33pJiذڈsS4ٌ$Ҳɖ _:uN|O ,v}Kk="A\%ZNgv1z|?ewj:7VI3&+~ïԙ5v1PFզrf bŪ,fmg+9r$S$ yW /s|"ou_zx|#ǵƧO1mCw䘹#XLEʚG ^. BWNYaAn=G]}#˛9{|7jfhfhfhf@ferb/4#h:ؔpߥfđ<\InYPi\ {~Tek׾\3bũ~m=e ksM1A9$y*bƿ?=tyes:>y+ܟ@뚲Y 8 cs:PR }> <Kk */>`2{$߻ٞjs̹[^={ ^>˚Cھ5#N:Gy}: Y~Ŝw6`r{>}~#bg3S{yș9/JjfhfhfhTP>>ᰱטԔS;\4rUk:^X?HiAYO#OHt6e~`T9+ǖtjW :;EtM̫q{yLx'!6kܴ11qy75}|'Ơf^~ֽOt__$ 9ccq-'Yu hC^C>cq+96,ec{:M.^$g7kzy \qk*_'=j@7b.W^9/v[jfhfhfhT mSnkb|X(lvDCdoTJsaOݒo\J,\kT$8|7}`?A֚k3t'&s|v\y,/}^o Ӽk{I\al;k7p?ʍTRF_mp&νEW}́L}77x0OQR<7^]̱ݦ{sGrqD? ^Llcame}-o[R;TEsqRwxKOH~iy!cLx"/ݨ]QA0<@3 4@3 4@3 4@3o2pk`PJlL"Fި9/sp :4Y_f/4/y|6?#an0iSQ?-5cJs)/sαƛCHsf*k:gl(i[0"v$WZؽ/?t _k|GkuOԻ/^09 =YsG^BɽQ8v'#[ {#xpWě^ׇ) =<S^2N^ך`o/ą|AyރWn>[&'7s{{}KoypxVMV~|x(1 hfhfhfh~n~r ՏCc#C}qgk0g55':E,zXu՚|eKl1;údg4mm^dZy9k}i=_bdJ)!kNBejTG5u͓-hD2ƿrhxԫ53EӶ-ƌ4SY߆9yC{8w5=r^ W%sI—c M,'?^5w^Y$c!g:^k.i'g&qB<ɼڤw[гz\XGr1LRx|?6KVsd7π<>ەĦ-L >Λ?Q8U&';kZk5s\G|s*c^c?2s%vo/u!i'yF]|s(ɵt6Te W و7=|{].VC!o;k!1#J=Tfhfhfhfa*u4.DӅfE6WEi\^ؘhÌÚX{Vm*-ԑ9p(|dq[ʩxv|?D!_2} U0'+"̞wŞq6<5{vg:#9)Sz'q>{xԥ+fbN8c-;p?wZ?0C}C_wZ|)}{Z3cKCx5v   ~\Hqwy|ȓMb(tZ2֨{CoRρ}~{ hfhfhfh>T3 4Phĸ֘hd/9yqM mkub8ʌ տfs7Ub/ӿ'lɊ5}ђ/C ƳfK]{p>Ys\61n3tFa#燁}٪3x~c9&d1¨^?{]?mJռu'\$SoӸ[sN3tνR~AGqJ6ݫ~nI Qk/0U,XyT<2k k r?!S>.\%R5xo{\e!q/0ȉ޸w;X878[`p>#+l#zOe/culr'况7@3 4@3 4@3 4@횵p *k髍V548*+u}[ǭ)#6$7J' I=ִ}igħ?g^k/acp?s>[L?>ԎA~[퍵!+^Je`>ʁPk~^{\썇{&1V3W~_mY'5Y&w AJmFɟ7.c7Ė )'5f88^>$!NJF6cp~=3ߔñuS+k\;D|7b[=D>\;uO!\^|?B(uO9jm?DY'dx=^~| ^6@3 4@3 4@3 4/`B4KѦ;l34Zk\|2c3>8n7H$WrdnUa䃿X7R=-f>ꀙs\̫T3*yw\J\gS?~ف84^=^\SY?pyj#>G<\7.|qNkϏ,g\|A>.DO s` 59٥Ӎu_kyV@3 4@3 4@3 4@3o1p(+=4l)ל6?}ɍ?MZNƚC]=|#Is3? (r ךO 5N L,C~5HgELJMյVO=Ɣe&4s⨓eo؈MTk*ӏ1]i.d6ƸY#qklE>i¯ڰLA_rSm>̦ٔuzy&G۲%vm4e)!G\:Op$W dy҇*yv} upޓkMݗk̥5{c|}%z[| c7V3F63 J_lfhfhfhf{@62h/34Giœ͹v~͇yD]5Lȷ+PaEQm7_3w8gO]1W9"vOwW@IDAT1u†d</绾/WzJ3fk3f- V3ḱr5w_W,?1q9ц>sv1ʚtH̚78{b4e=g|'kQY{3<~He~;+Xx;-7n]8x;(N6Įҳn'>%x..R3@K`sOކS\7[~s#lEU1|y`ؿ[n=T|UQjjخbu9<+ImL}G"OXg 1]lCc_sQ ;eklm?z{[jڡK4<=com:զhyAoNO<{*'K^ůI-L?ɿ4Æ]68=sG!kK\!8ArOP{sO SϯfkNCH*8 *G>j[ .tBgup}Fx+<Ջp0y\f۵~4! UfhfhfhfO1Ѕ bF-rGR?^p_x€W?tY>R|d'H{6ȦxL^ Iڈ,G8q[8CNZ\1 E5>~FQ5<lSc9۽Z/ڎ9GoLq#X;m۴̩z*3ztƨkO {7?Y/0aֺ&2L{:8 f2NL<Sć͝K..5ܟJy>LNl}q'fl{I?˧Tfu+.N ew9~Vu1ii>//!6y$e#&B|:KxBfl9y$>U884cֽ5>:__5@3 4@3 4@3 4wf ; cV|Bc7nC=x?uᰭ"cù6[iG<Г#פ((}LpM< /Ekik?J5?#856׏hp]~N"jkqm ;:f}f {}ڒ 1sk0n %36?IK!w>9؋mg 4 ͓l15=8(Y</xFC'58pa31/z_s10guxg|ZsRv\.EPNAfhfhfhfxBEka-JWCjkk3g,Ĭ~65:|ORa^^4lg E^vvds$ u?b(Ks_ACLLr,\Oۣ_m#-XC1b(_:㠉ar.WM49>eּi0#G|Y)k|a6O_#ޙ2oŸY#b͞ cJӟ^\?se.tKR}SFdz!MrY9b_kgs"}A9R+~-سy;o{0{= E969Y*eQhfhfhfhc r"g[Qb Eۮʝ~B9KFM;֎#w^mWvl?|j)[?ONzw4sOV-׾$gňl%^kϾSm.bRGisjJxb`\|1'`>k8I1/c kg_1૮y׸k]uOmx,x#˧wCCZ%o[|I.RwbI]4x``<\pQؿKT?xW#O<\|?D,!)77OiߋIy%yw}x@ 9*gW Sx ;;):^3 4@3 4@3 4@3 y zG^-NԱ=?YJ5خNܘڪW>IYsXLo+_==ʜuJG1iOϾ7IY/YmָW=sAZ$kLu+l#d(~zؐe7\յ`?p .+lsԌkhZ^iŅ^YG),/T}џqė=t, ~`gw'n~0/cpf=lO_cp#qy8u+'<`lfhfhfhf B%eQĂ ? hKaL? -1آxuڌcnN^5~ə<^s*{1;}X^IUq]zͬm83W[dcN3Au^s!'4[sի DJ^!5zzlxN>53`*^_\a)X.DmlMńm쌗yMClа6EYƬb0s1w-|u_>sWo4G;޵<+x]tkj& 4@3 4@3 4@3 4̀ |ɅJ&ʼnY8Je"bH\lYa6eV\Z8g[Z#a.0سoT[}/r2XD ̛1. ?+fG':؛þF&WKӮ!нxK < #Cί:T]a5a e{O#.Xh{ypa/8'//qw;d{k:[. _'5Xޮvgb <>cpur߱8_zU8kyq.xh9s-+KE0OY]Ocx1<1NO *:ރCV\<p f~ =>g~O97cߛg'^fhfhfhfx?BeYD`eȮ5cb:_uտ{=xd|9mq=ȇ^et+o+mls[6}2mQuόQG/vJ\(#':iPH=7ԘF9G\'=fOq>^lO!n̓B[-F{ȷl#*Vˤߴ8>BdQV Θ{õE_G'W1&(kܚʿj;~[>ρX.W#s\ 4@3 4@3 4@3 4e^ԥYHR{ӾXج>=0˜֞ rz j6>k\}MgXحm^yŢN̵SFL~g䱑S<=o="Z.X+ERckjw4{4 1Ϧb="{1 סSٳ3==*.m8䈧'OSOndmXqjcaɉG#^Ӝ>GܳFn:Q UeAj9'?"V0W1'nfA>csfhfhfhf[1m.T`e-\0_=u1[m,bٵ@=G'O@>8 :픭_XˋI³{ ~_׾@3 4@3 4@3 4@3>Յ˼V} LGpoj[W g)q mlgZ.u 3||ю&?ۋq2FnCN2c[/5^z>׷EcTG7K{Y=Z {9'GnnoZ*+1DO.١9XE<"9(2`xW$Ֆc׳^ccl ?IW1}wbXC;#'W8Oa 4b:.QSr/03_䢑葁+M/p~?Bⓖ3 q15 Rxe _{xϴ*2qk+W; kaٓx !;ܿ=ua=hfhfhf3/Tؠ,(l5Yo\akQZql;[a^ V_u/򈣚3mß-_cb'ķX5r!($x-WuدC1f#rZn7y؏s>.I8dq\G1!y̕3ooM;"|\8VLmA#ρO{{b'qE 1f ך8 xõXG:|iƴ?rlcW^F(瓫s #0/ӊ-~ݚfhfhfhf{0G\@A[hcs[,$R@< o)v%Q>ů)2Q܋8+3(j|Ym`r*뺘co<3&N揸klbir΁?L_eKM"o$ٞ&$}:;Q0~Je]wgOf[[3 r8-ze{cHgflo'q˭Z+ ^ly+ޞ_>ecc=?ByL䈳OkT]}3<5fhfhfhfaPCl.׊{:jhBYkBjÜ.O:/sBWƄt`j~z5׆qFx/2 YpKkQSzc0~epfOF} 1ھu%0g؋[>oI{K_'kyI!1sL\O mk3x)Bl6/{Uꓟ(_hHbOaZχ#k /Sl8&c</ѿ 6d܈YUYeXG1"l/ډfhfhfhfP91QL$k-DYl)joq.EP*--k[pg2/j.ӆ}I݋/bӔ' 7a.k]w'`Q6572/[ĄXhՇӍ|5rMǾbE7OlC풼$v #]b +ޘב^a*o΄y٘fhfhfh}^7 o  6 v}ZDnqmu+iا,|ps׈VNNr/8:ŦuVqs/w3b,gGƎx) CL9㓣N\n~f̓a\~˭g![ZNFj{r-lG>y,Ubs\q'߸Zm$uz3ȕc}X7H~n?'dNLsɶ@3 4@3 4@3 4@3e ʗQ݉"^A.Gcez,YX"#c}rL}ɕIE[t7 4%;2 /@@fjbtmڽ b_2S'rˊpFl},nɛ>ÖmQ ;OӜU7@3 4@3 4@3 42*_wgkNe*qklh>s?V% h˷ن9vu.f6_ .c# p!菜ׅ!I{#6]oϴf[r#cssQ3Z NXc /69+\.BV}ڏ=9XP~)/΂+O<-bm)9gY X8/=ofhfhfh/c/TN [98VYj)(/"i, FAV]܁+?Q #6>Ņ̆Yk+W:$S8Rn c..e`B7d^,}<1Kl(2~`'MepC2g Wd2o``8 ;Z~ќbx|"2I/$g~u+xzoj}3 4@3 4@3 4@3 @_U[64jᓱ[hn1P~znž6"#Kesq@|*D]U&'3Z)kF$lX?#_>axBp}KG:j7p^ch12u϶L>iD$vm)q^<6ܫr%ջs_~%KLFڞy~y焹2"=\ܬywp>@3 4@3 4@3 4@38}8g Pb,VZģИűR ^;c͹d|ZP/"Arli#qk{->|*Y 1rZV,ܑ<)k\')c> ryf 鑽)l9/Qtgӧ*^Ǯ%h<ɷrgNü_zbb]_˛fhfhfhf {`-(nS-2Xܳ03L0idUf9[Yܴ> /)揺/`+Ď_yun| YD1" x1U>/&mpc"OlKX~_b FW`qYO^6 =@@-wbWN3jS#OEPPޗ{FzV" d%8 ;fVgt HUr\c5yrBVvy3 4@3 4@3 4@3 Py?ǿ-C"3EY)hk.QvO15yj:.pfa ?~{(J/i ^rMؒc$ǬqYY\7,qS 9Mc}j;y:Eн\k(/\õxDVQj׳>${}Sڻ6ms*g> =ly)=y"ɹn|`ΏLodueXߑ#r`yֵpKB~ogݣH#kLމ#qk.p0N[`,茁&I⚫Îb:>qq3W66c>O?t|2?"(G7cZ - pD{I_"> 3bqqyX;1c$ѻqH:7c|.kQ 4@3 4@3 4@3 4P}ܿ-3s 1*PhD ŝRةgt孥;_ѣf1jSm}8X82 Z[|XKAe]OʒmVrmZd>vX((AN^b*Nע葯M}(sc 86c]N<>1$f9~w1{8rO"6xVߞ>q1miGv&cA9\["Lc0^[qp7tC?f=+a3 4@3 4@3 4@3 <@_\ UYډ ?kS}~9g==xmfhfhfh"}Z\XZDaL0i/Ol( zc1[-zzq.3bU[|\ {GQ v9׼&q;+ׯ3<;rr hGg]#'9^6|WCXz8ϲ_8č#78-c;b#Yr䍇v{{]%or/ȟ=Kqݳw6@3 4@3 4@3 4vBv8K{DE*.6> ij0rT3ҟEFYN}bO339a{ Fh`oY ŗ[ggAظE, Z61Aƶ}5+F'gm'*i*qK=,W2_mC=gb1nٳs ?d!#.1#؁*Ę}$>/|'G,kCS9X:Zv}m,73&sGk!>p 7 pE]:>l.>8;JĖ ~%ذ.UR+n%_0+n/{̲q_'|o^fxQ=A/J-jA (D5$C߶ZO3r)/ .>%bi~S~7\i3|냍v9ofQ?*xY~ag<6^ ]G0|-2vM1ZnG%)W&5Ҏ\13Ȟx+[Dn^ujuL ~@]˲k4>yNʫ*4§_1ņ\1>3/SOy^Ʉc'#Ϳws !WɧA L˰yy>lyMx 7Kω+ײ ^cO4ydĤj _g_fhfhfh0*u7*,jtqY )AQ'k쵔~Ơhhc, ^R9Ho'NF!nڏ"mjEl@=fهA߸k 7c[m('l?7/l_eA]kL_;m[?'6x 5䞗ț%9Ǟ2smMQ hb3qKߋ>l܇yGx#Ə4]/:·G-woNAs܃żyފSXO0k|1{T@3 4@3 4@3 4P]T5 1fn7dZ$6GQPɢ 6L3@COaF˵89v60bP^ w-# (7=yCkM{>whfhfhf1*_(jD%c+fЏ90,P6q]`ٜf°L(l[~cbu\O$;3OH)Y _2Ʃ6g!:{36쉳S}Îd F%dךf^[q红0J[1[ʉ6ʝǸε1V]ӯ}B,Y=|EFgX ўŵyzk"ȁe8}4?؝_? &u`Rbg#)v_p&1D"W?/S^Y||%/8_3VL#|U/3s/y9tݮW N 4@3 4@3 4@3 ! mTfWFOq^Y { *)Wק> +!6i<2(ԨӶFglcFmR'| QNL;Vglx49 5X#q/r-F,xEn>5rW-sȘWWudgz `c?6Ѷd4]=lk~C|RDgC 녟:m@oce{=y}߀^XGܯ@+NX[-\'stS &cr#Nz3ە~OMgwH; /@3 4@3 4@3 4P A" # :C>Q 6L{TNF5xcثOsۇl֠Y]8s ֞xg,SGebι0٩nֽ>cy#r"õG䓞Uf#x[ կK}asȯ ?cNCD;}>t~n٩Cߋ5scq5GFpOd|˵|G:qd8r欸lrK.gsѯPqg#3pF3b-~9_ȏukfhfhfh}BeKk1ڎ8Y[j qa/W|ڇAndӮ&g%ζ?>UVU/\M.b>~M Aז96Mȍf:'>?Hڎ(y豳Q{v}Z,e_\…]\ϹOWmH? UEX)ėc=s3s ?̵wY 1Nů8Xҗ{Wzο޼g]cn񚘙 mq8}ϲaQaѿ"YZȱʞK3!wϰgn,)x%Kb4xӝqb"n.|x8[ #{r/6>B}H򲝰Ex0xeqe7/,~:./L)l?r38c{-C\=d5W=U@4bgY+O^(j/wJ߈bq3 4@3 4@3 4@3 oCE QȂG`Ғ_u9l8E8l!5ZՖB1oĆva(@}H>F"\gxu s{7+?NdgbFb1nH#61uig\2b`OH`t,➦C?ߩgV}[e9ɉ5lԥ/"TF8őM,=~Oemj e+.hr<<y3>m>ؽfdsD~?}o[ w3y1Q#1uac4~d)\W2&Gˋwy߾/sxofhfhfhf@_|RK3(lX|˔Q񋁅 z⬭Ն#1T/H)qA?7ƁlEafJL*ċ]}A8)xI~ź!#5'/!lڇ[Kou>c;90-yg̱Ʋ팋߈U;__lWr<ޑM&Ż.k7tK)(⥩\W X@cSm֧n-q̙cq^\$@IDAT̑6#j |R 9XX{kLυ __59ȅF|D>ZrqoXa$90pUM^(7L,YY{XG̜?.rV6bcL#o^5@3 4@3 4@3 4BBnj`0 Y(P ؄=bl}ƥ(6b!SLgI#b4lLjz^⃜'~' Zs؂?}P14ZQ# ?kc=918{ҦŃG Bf/ su'g+*纆vv<ؿI|1Ԝgp y ?ZXv˞殽|YӗܬA|āqcU!¶\X煼Ȉg>㳛WQ?xg7yEZl9|!h+δ y ZwSx읍mm\&/pARގ=EfaNH^:{<ȉa7^]ɥa~7u/sS/k@Y[j!O}޾b흣hfhfhf8P97ǰE?!N=Hjam/~X4*v[\Ӟ^l 0f9Aߋuv'XӅ<&䝹8ױՇqcx7~B-쭮{0#5}A98*ʓvNY\k ź5tzp`,$E XC;0b9T@< POb y45zfklaoˋ.⢹W4x8sOJ.<P^<غW|5-qc>ߝЊg`!Eyo4x%PybEM>4rr{]{ z 4@3 4@3 4@3 4W |?ŖpQڮP룜>ak O;(.a 9vR9Mx*1h/v450c313קbMLK{>Ʋ7o×~"XOuGKς0gcXL\ʎl՟ٯ=GuMcrQ^φz}kbGkgǹpOxY9M_tcyy<\^VxEY%q -c"{ƌH,%S{?0*dY{4s.2&>]!]g$ 9X[{ ޸sqN|0f/&^!㹰K^p) $ =g% >gAXO*g'x@3 4@3 4@3 4PC74LQ؂ӵ"~MXW1h>E3mЅa:gH5 vsc_:3&0f9fO<̏k;:+lѰEə72rzhٛjMz|4nNb`<{uv~\̿W΁ʓE,Čb9#c2&}"Ƴ8[0^jQ0JxI "G_ =}<7}-Glr=^;|ڠwd 9^kfhfhfh ʿh_(֌vg* V>)9_c?}MEܡW,Ơ(iDϴ =2c/$#*>栐XOS&|*nhg3΂o,r.<$C-fqNF.Bq9kpI 'ïٖc FPyO |Ą 8w*2ndLD#_$V$sbWF}us`c,߫` b +8=:/?/dF~=4hݛ5&XK?6]g+7^]|\fhfhfhfd/TM,45L JMWROllf1MwQFFI2sJuSy]si,͸@la29}ֻ[3N|cO2_j^9|#k35SXs<q\4X)|<ģF;psث3b".9?ǁb>D%_?Wz3@!{ELZmiZ|hlEcL#kGq rb;/w |_y9G2E7@3 4@3 4@3 4 ʝDfjN"E{HRddFV#7ep}fyNl|ɋWLsXsY$u >'1'Fp8"N9q?m-c($񄎶pI_ӏ!W qF/0[CM٦Yج3zĕsiŤ-sΎB=먹r{uE{ZtWN }{Ǟ_b]bҴ&o1aկ{cG=|/=|+N,>B#N7GM9yE|`3᳝s$Fiԃfhfhfhf8d/T((P(#yɠ?#lcce+./BNlfļ侰XI[Fi5F%Xة3f4>ߴӔg\p"ۿvF~|XMGM.V}1XWSTO6`3D2ⱚO㨁 8ؙ<:YO:̷=2>WjO~q )jH.Vߌ<hNd2a/k؛={d=D5\G[\ʪ޵ȴ-k;i |c<cƽs /Ʈ 'UXTz6Y#KR/:m9-ȋ櫶x%Pla\/7COy`\f^1fhfhfh}oуP8]+`uxBg,>QT,9kO1~^^P<˸3AI/%W0XFE9p1Q ߰/tid/mĜXf~WUO(8G !hp~j`n|712n`ߑ;k=B̫ f]E~NҚ qe1Og&p؇)X?_Bo[(_{cqrs,OnT <ƵWs܆O K_/scK/~&_B] GH/wLӄ>\| myFӍ8+g4b}"xԏTrt~po~0Ξk>3^5@3 4@3 4@3 4P]acvOTnacT=,G1EгfĴ+\;IJս6X1N7} ./<†v#~N}ZnSjvշbJ0kěAR/ŷڽc,E*00%I <cL,4x{:|7Lpsy,c{5wrZu=XS6E%ؑj,rU2> x_վ\S ơ&O]g-z3[ XGv;rcr=n<߉9zݣq0˧Ͻ ]= kXkU2ß"3:}{ .0}fhfhfhfOf/T{{-jP Ykԗ>4^#5csd(Ty'.M6^ͫ=śDb|I|eĩ [mU[G9bZʇ [>l"oAj湎9EoChgr.x?EgKA0priEbdw4UXCq3xxF_` /5*{uӞV'E<]Kr{r}:pƁ-=!h} 4@3 4@3 4@3 <@_<ؿ~2B9ǹ%c,Y _./7鿣msѡυȁ¾fldx>lY[)>YC7\U gzl;x/|ƦOBzZm/*8H6t'08PGcƸc?x|xc<4y*bKF{X0?y\/qsyi&>x{aႄ.lVbC J1w\<=bcLsqƸY\8^>|7G?v;eYؽLoeBSw1n@3 4@3 4@3 4@_i;NԓFƂ(}( } ;*0m>ƵU*g|MWm9Oy[]ݣcH R5ڈ16ŸR1NxbGLWX[b"voW'sSȴe|b۴9Pd|}S j(ybR䵙O\'WϯQ Rmsf=]|'{[g0&n;˔9o<0|`޵rMRe\n@3 4@3 4@3 4wg/Tf|Yšj6SU3>cڢXf>ڲst+,FoCW)٘XT?);6fq V}.Ea .Wcؓ9 '^Ŀb嗸wk_q^ *SwOoWl0iL$C.ⰀK<^:9./y`ygd'^#1 9/EOr؏3gN1?,P=,1!kRl=?/hvo+G ~سD-.!W: Sի3< Wyx0O)cO'*7GZϵ?|6] *ϒu#}1yM?Wq1gCd<38sa͇kx97ѽ犣@3 4@3 4@3 4 ʳ̵>Q,oo@?gعSgߣVuusט`c9tHW oV04Ob Tt-hgB411ƞ=HaGQ\sF._䎧0rENϐaL\ Ld<xO|=1}Oh:oU{z :{#5mjU9"9z䎳=8䉞5/*Cj#'xh8ʃ J|BO7姾 nNFy@3 4@3 4@3 4 ÔC3e XYH{d4{YR^>k{ rT;lJ}<-g5b5ya+߳!XULOf<W9v%1pآ.m,V9+1bp8^9C+g`z{$,,8K; y;ggjØ߬F^G 5.Ua?Nyڂ;P3 4@3 4@3 4P&̀. [cΫ^jOLk5<ʸ h70ɓüb>?]dž8-Ӱb?@T 9 !8Ǯ?b:U^P|bO sųN[~ڿ'7ܛ3slIStcTΥtw?ۃr\b3}pybyNNgyk-}>Z^Mu@3 4@3 4@3 4W2*_vj0,ٯ/ br̫/>,QH9~'Wt/dF<+,,_ zL[cs1ӣz#0{ !?% Вb5'ν [<_=8a\L.8$ -ָGwGlYc9u&c^8gI$5~1=qŶbuMz#_'>r|j'g5b[ȹ5qx+w{>U\cǥ?s 9ț9$׵<.s/% 4@3 4@3 4@3 |BE#i |*Ĕ' ȩ~_oŹ0E^ u%gF9CZyu46źk[c}(K:Hz+oUע|Q'`qZ?kh]Cͷڊy1E7ϯLbK\(Ѓ)bn?_(S7@I`.SML~Y؟3W^ۻg|S1ݚfhfhfh@_|םi\,Q0Y[-ơ^m:E83^ɵQH%.:>k {l9I!i׬/}]'ЯMz9U31d=DO(yH &s/8yr|?6\,5, Lb /1s:F:LF(y)xs8{p[̯+ʪsٸp3ݣkx=sc?-zͭ]Ì3[+8lk~6q=OP# .lG[ 4@3 4@3 4@3 <@_nF*CO |3+ ]=e=E^19>j8#WGps ͟1wXW"|; j|cy8͟1<F,.Vx_͜K<'7W X^8_ Uw@3 4@3 4@3 4`/T64fh֢:zXS9 }!HE|cbK(ьi/R 37G0C##V},i,F|)sI`$ňol?]IFؙ㹻a` Ōصy(ęsrLَ/{BrSu;/j>y>O(`p\m%μ6繫'Zc{B_AP/Kz.ޘ޼'+6]㛟8 n"Yu ifhfhfh@_ 41`a΢QO D}ʍc Я9q7:fLuD,D'DC2زJ<'.S^jP=]_KZHxW\w~dsJ,QЮ'^&t/G{/3296'|ƺw.>Nz򘓨UE~_Nssಥ W]~#qt 4@3 4@3 4@3 <@_7-&{8-c˹y!q#cL26@Xa|Jw& nʒv{DR,R")\=\"`ͻ S^N.A+%kMV/oa*RGiim+Taq1*:]PƉWopcl:pI\?we~UR M$#[ Ǝk'g 2O@a 0@a Bf1p/Ț}˻$7PIHD}`~2 Ua ;֙-ַ`:$1~2 u1dg,[G1iO*)-+9[|9w_ol]gmڟC!6Qs$Wmp&:,y`L5Ͼ8n72S),8…Gxi8Ɓܱ"6^G|oWڲ*f}+>&\D-M(XuG#@a 0@a`PRd@ K-<r'X'7* c(%gIKX$},uΌ˖.ݧǞC{Z2yHf,Y#ܙ׾=f5\_kg氏M'sW03,x8I:ƍ`ZӑvF͝eC^[ֱmGq2Z)cm U:6s.;xe~vg\|9aó\cvԈ0@a 0@@.Tv0>3N5V9Fm*#醌pCnZH% IP%OK߶|qeեd5u^bqxHKBrsSYQ6oYlyM|8>c2²Ѳ$p]~o?s>+}βCk`:<23-l\boɅp0>=^]c:0/yfG-D c]n+0wʯ+쟱?Q؞u\I?% 0@a 0 B c# OˀiNVVIOmr+yʘ7|zmfb#C9˻Eϲ|X -{ֳxOWPוWcXMeć-k7_,7VjK3cm0{mY)<%xn{EuŁiEcҸ1K`c.=]:g[]mw㵏l㌧9Z:e7gs|`@a 0@a 0 R2ŀxO;MRn$FYYg%Iy0Z9R0ɤk`v_s*UJ_ǦkG݄24c6X {kc;!>0-- Gw0uy{|WƏYSޮ2~p[J?5BFa 0@a 01 c|E: ?%+1KB=ns։;颏}I.'j2ص&˓՛.\:t6T5CCX8=\S单^q:xˠ#d}HԷ'摅W 1+ Sy60j9`=VD@a 0@a1 O!k F%adw,sr;=yu'ܛ-R@4jc1㤢R$GE׉ǥ=]k;/$9'^b'xOl+wш]yANG`mJOn|1?ydӊRv̶C8?StT…lWau2wƈg TL[_ֶh}oyڿPxKO4o*1-?(l}mK}cg|)a 0@a ?\1[a \I7'msc} BYv9dH1&j!hu3l]}zhPjL%XNM.Oÿ 0g,\cR|kmOoӧ{>,; /MRXU0>gW둁I}dk{軀b̞j"{|8<^k핷~Mќgׅ}mCoigX> oȁJGE_p41SSh,`uaQa 0@a \۟ZQJNiUoJ[+܍П-,l/ְ[k/ʟ+8+LqIKFmy~Wݲ$BsNdc_ NY`жG䰾>Xg ~A' .g0-ݛH/%<=;{׻ޞt>#P"檌)fBVM.y8N.C?{g|DGq=xs%O Za+a 0@a 03 }_[ CbhiL=} ]bMK>%֥ ,݋*?E{1{4onGt 6D]lD s67m'y2G}3b".]ոCѳ:s>xe셁0@a 0?@.TNa gܜ4,3kInYxD^ٸ%G=qD"c H_Tt=HJ>2Y$'I]dM|x+h%7lcw 7+>R2j3.~^#źp ~8_pSXAˡ[pœ"q׷Z{=>Mg9Ng7JJVF)s7Wv9W꣝1M!/ku۱Jg|}Tpz\Ga0@a 0@;ȅ߱" 0VsN,9jHⴊ疺$Uo=Q)c}Frº^w5]˭w 5)>=]8#%s]]ǂ?/͌Ətk؆ء]WZ~hN\~չVMe:Fay.6xs"|䈷f͠~}+tΚ9sH˛Cg}6WZYoy3 /8ⵠ.|1ZG≯0@a 0@;ȅ߱" J)1W E/T'RmddѝKOJjCtc<0.fcjc^'iq Jk܌;K o ?Z,-gƈ/6JPI|5ǜ颠="¥LOw}[ظhj؁Em._x(3o<fV)s?Yk;{K xكuEtV5.*ty;'+x<#xЦ0@a 0@8@.T20ime˜8]vNU•/g}~aO{]}||S_+b0@a 0@| BI0 )G\ ʜ s._šu<.I$uZ)9eNo.tlڍ'3EYẖj<]}bC}8&Eu+ʉ䨎:ڼW~)7:f[7.ZꚌeg!2c緭F5=o3\~3\í?!xy=0m<ħ«W/܃@IDATZc3J@a 0@?P80H9yy'P{uz.ǔe-5RznNNcNx7f:/=~-g[]JA о\yT$?W`cO}>U.r"ޛ_uo[.S|Vгoٽ\ җcBrkN.ƶ1~.p2i@a 0@a a *{XLa`'0KkC.1$g?7IBKc[6 :~HN7+ZUұO}^K| |1qў씿4c2݇,m +C%G2&Ͽe/eJGm+.Wcǁ=]&֘8Ɂ y\˙=5_XK#Gh©e՜0@a 0@;ȅ߱" O <' oORo+d!6I-yjJB*_-}m}`K9-qQzkJc"=VwU~;|(|RǏ}>iS@a 0@a <@.Te0a znNou_[g:S;R$ m`˛ XI{^&e^%̛JA~wx0~ur@a 0@a 1 7. a \΀ê2,}}dH%}1vKϩM'ecBGQ uj˗jbNpT(Ym܎ƘK͒:jfx} rU=.PO\Њ?WR7gl)<ҫV'<_S90@a 0@wȅ]z@x'"dt˽=9)#)19HN&I2x=/,#yʡ.u=n[W\!ga$Of:^>zb=x+,N-!h?/CpZ|.S<-,j@WX_8׭ߟʇ83_]nP?ޓ /U#]ˊ-}^Is6TH0@a 0@.T]L a |zN;VbO-n[JKiPh+u X=- c֥uyQmფ5:8>9rp_UUF*}{[˅lW'pv8v{}s|ݲT0]ǁ] /@a 0@aa *^'0> [ E'Õ,JFVK*kB QɺF1vzyE_8/K-wO2B.0O,ƣXhFak]ENI2Wh }[X6\0΂` Z#x簫cN1?.h)?%1W:\as-q\Vp3 b=M=sZ_賽&ܞs臁0@a 0d *s_* t95sP:U 4v&MDG7Ct7mÌ4O):Ƅ*3{J|ѯQۭ1{DG{58_LH}bpݒcD׵7olZ.mN=wjx=5NSLo:q4=ѕKLG7u'ҧ2/;c+0@a 0@0raTQa>=1Gݽ-}\M'aHz Lg=Ǻ-$UE]۱M̭5ň IssOc8)jw^XZ8~?:rI<\xs#:[c͆~QU2~Egw9iW}dwyPվ۷1ɺ_*eZ9I%MSI?U}'}xn"3A<#1ٖ[y]?}l߭lq67[}ر=s ss Z'k;]l[?xVȈ's{yDZMv cQDCXjVkSlO 38tq\@+ڵ=-Lżo=V7- g2}.u+N0q3La 0@a 0<PyXa <̀N@bP ϺTC2UBÙڇ[\kiptDǏ5v,S2>+Jp pmpk[ml-ْtrŦ+e¤juǀ@Ǥ$}%ܪItt0`,8)/U3 k#lӲweTmKos~.qxc#&0_F={U,G U=.SE?Cd@a 0@arr @eu8ń*_ ,u v.o=k"ŭvK̑X$\kyԟ`p,Tm09 |l;Flo!ا׷?b^S¹ט6WcdQ7B (k~.胡}ceAm%8nsvXd>*ʛv%1pl;I_T7x*fuZ3 d7=~@a 0@azrr=@SjdA$Qx6$+!1bo~ɜ*G?)B?Њ1yuN_ٓpf5;zOvMvg_可wK.W7/҈qY=- Q)>4ysa=GjD_0W=d!H, 򁯊귝;χO .~?(%Fp蹨:ﯟ2M;7K0@a 0 BZ>c- 0p9Nޑ#iG뢹J2pQiN%X%H|*I]:Zo$,CDmK:$Bk<9krZTd+w?7}z3]2` >֊𩷅@t.R\*F Y|(Ks[m [{' 8Q?ڂ~:  \a7Q̑.L)ֵKM^a ( l13|r"<#FaWuɳ vwG11Õ9q00}$:3@a 0@0 H0G1sm|;GSsMP"gY'eb|M}vFCX{_.9Lxh8Vqk(ץ(?٫Ht opŏc]C/\0'LLS|{Wl#F>_pu7`R~gXĂo۾{ƟƎ3tqu',vuFY>-uO'u(l3mYXk|;%=Z̃-W}~m.pu[jzKUo?=l錀>(ZspJe?ehxxiuGv{ո1lvL1k$}cLI23T1tK;c*]F| ~6Ʒ4-<5;Ii꫿=_8 0@a 0>P<{$a SĜSQIGNeNS2&GpgA ";,S-hy FmPc .IYتK+f]r 窉'?lkf͇7n_p-ver,9b} _ݚZ0u,9ckhZ' J2_ dow-{ ;k}|0筝}6Ujj'/)ckg}oEiZ Rrnf}}B10@a 0@ BoQ03ܻ#Ț$]%YD+W㣉TMLV&k\(.e]pA-)c+UbZ-KU|Q!L5%=k5~Ͳ⺴5^Xj RJIڅ١8*LL¿l&pPpMcf^!3BLf3 Te:SKclz/cvVӷ/U؉fKԮ7Zb2bd/U85WhPa 0@a  BY a |fsRttwo*}Z=:A(Yf3ذ=n#qb͌,Y8Z4^.AI^Y7K/]Yeg͞egu3'Q"plYnw ?ßt5Eq$prOa-P`UgYp,.knY{vEgn㖱ӛ7pZ} 6o?B./786wq) 0@a 0e *20'b'z]Q)1,\{{mkne,[#1*ݑ H<}PIJl/IiV,/!Ol)v{ƻ,t~(GĽ(`1^~G~Ǽz}]eqNڞKޔNm2Α x 5) o(UsNscJglu3@įA/v+vXa 0@a Frɏ0+ ׋x}o%0)Ĭ5W"DmHCH:_ʳїq/l^w;W|y~'lŃ_}↱ -tZ=ʇ#Ge&]1w03a7L =^zܓ?xNy3k0(XU`?󄢹,˔WcT\>fX>'hJa 0@a ` *'HJaOa's`%T)dR#+ɍ옷 @:,$#cj@Un.$.qy]0˛dGBu\/0,_% U*;]g7k'7]GK]h ?/ n.y1~ΛEh>5]RS`͠x]Ûg``a?^} ׫Mo?|< 3}0@a 0@\ BsGЄ0.ad2䫓z$!r_$=J, b_\=gׄicaI}RxTި>]~?_n9m#ca R \etk1`S#+ߜh^_:캬u1NP+OU~ecqkg[7.!_Z"Cf5 j ļJi/ GFj6Aϸu?n|0@a 0ȅʋ0f^ $}kb&k#Ir/(!{#i躏؜%\ccڧS{Mj .{KQqY 3s 5WپӼC>kKea^0}Mm+3)WcgMF gkŸopuVү2wޡMsd|WG/pΤ5f3g?H' 0@a 0N3 E1 0g3Г]H*G5 lGģ\t}Fʑؖ]ۮ1sU%9kobL! Yر/y˼+_*W~z6 _iU _#\bg:R }tk_^aݲK|dc>}}2ykf⒮l:ysGCǫs`#}y9,\ع_E#kȁɔ0@a 0@cȅU@zJVTw$Y$,q)aX}W -rlض1k۰e,L+Дa6h[?G[Eo=?Xx[9w;Gؠ/᝶>D&WqctiA\l=|C'W٠et)UH'/' m=ly)p"?ct s_怘}917˿7WY\ g솁0@a 0 BzNc1 00@RMicJ̮0,֙?[Ϫ]u\je>boasسr?_s0}m%._vjnC1;(xa$dGo"w6Qfnpq.2 9}clF>_ŘF޶:nY̘؄ q8gx\3&gj}qƫqxM!fπXӆ0@a 0~rH0*t I *A8&PEz&E ɩ>Oi`W{l]p׊۫}+z^&twٍ EW\K;$Kb[~Xny`a݉'=v1fiG,K#cl9ANTPF̝q=#<޸u6)XǮ7D*+;'N_.S\HlsDD+ 0@a 0~7P;a ZrĠ$ҫ(4qXHdLQv$5v[֝,2e﹔LBW1X_e/,,rghA+|~Ӥ;uY`loͳlvXX/̟-u{Ǝq;ݷв7L*)^uXwdc19co]GT [ړ,xx̩1Ukg _7WE4\=2N/'/IsQ a 0@a  BiQ a m ̉(ErNX2d*+UO7dHDŶgy/5Ok#FEY1VcV܌XD7`ރ"5/79Z~KP+9[InFi$GvG.b-{X97ڽeR`wIcy6t[t9;rVgL輠8v_2\)kD^[vQ\h퍽:#Ja 0@a 0p\ܥ'a J))XaT2݉R'KFS#K"$)N*PSxtJy''HtWWv§{"k}cV9'y-l}kzlOت3>7kB l-vdgnJoerƵ_$X^KYorWKxC#s#YA>23 >GU)33 0@a 0a *ϰ0_̀dl% 1?'G'浒<dΝbe`J?lXԷ/6۸6tATʠ5Pd3ѡj^P ~Ӄ2QTh fǏI~߇.,(`5ƫdauaEUX3卪7:^xFe9oWhWq H;^[sO_~νOiȄ0@a 09rrh0z$9_E%G M%7k2Jr2^Yg[na$1,0fݺe蒴$LBX)ljWd%?9B:m}*kq,[<-SUF7>WvBvtq޴bzapi,O(:Z%}KG=%8rR?Whߌ.KrJ;G= Ή@'yg{gNx$rT͹0r-gJ׷sVpex|BgIP*`v̓\ot,Q۾+~|%ǃ%g ꌳ~ZxyW9*Kơ߽ɋxsl_T<,%~z~spuff}S/}S@a 0@arr @k )GUE9Vn__Gw\5t0]9b2*:K;;J޸|_.Iǚ=% W.V%ITGn 28ݽﰋ\]]|87Ņ ޖ*>wݤ]ix4y/o*~%~b \Jp" OQLO^87>XαY]܃QL}on޴hRLa 0@a/b *f&0d=Yy吱=y%?2)'KY^0@֕#NZ'ԝ hd.X,p2|Euf[@܋ָB,W^Sٛo߾ioAt3Enl:R}KW؟xM0>/Sg_,{ݹ`b=/F60@a 0@@.Tv0@@O:aiyQY|T^n엃~W%#}=~/W2$P_U!7[mv .Vml%=(?Q{1 [] Nswp~hBs*]T7vOKcW }?t1ong{c_0̉{ظ j9c<)p6;=_@a 0@\|֝ 0@O)H0v9>4}E"QcD _?(!\"̵T4W>sK`RRݸl?*?xnZ_m׺`f = S+ 03~c~ޠ)a Uc-`݃ݽkC OS)%߱ JGeɼ.DYl;褒yCIQ a 0@a ; B9Y a } tIW'CV>/%,1ER|>o\at?q-(>.B [I sւJ 1ob,8i`q i9~ +:pɱ&{3-:fM0Or}3s:ٲWT|xl[3j `ό8(y DV=S޳,_9:{̷̥V 2Eoxȇ0@a 0>rH0H-*N[cɲ^z*˜ŞFۓ0Vrq%{#h%S-(`zɐ^+JU~4sN"ẻw|R})q>2pQTY>хH'IbtRɎ:ZYOl I` |KLaY|~Ԛvx^V+pT\k*l3!j}v-俱Go b ~U)>;B0@a 0?@.T٭Oa  $ɽ*k7H+a]* =Iօ5$\cM>Ңc_jAouu*ػjp]gsZC_>/`V­}Vv8uTnta 0@a \@.T. 1&@a'J=sk}-N`wٞ$Jx\&T2`Hָ/,ǏdYrm'b,$h+LRܒR+Vo65,ZŖrI[`9ȢDJ)7 EkFfPP:z+.g}~34~C`\г-Z)4T?XnlK_QU wWK..(ر_?e;鍋 ln(j\صpRU~nOrR|l^5=o8L a 0@a l3 mn@00'm+x7KBR*Uu“9'-e4?{1DC%%xwⱕ+po51t6 6%֪O˘-MjznGziS^!n`Kɱ2?bcJ\ 㜝)˗5𢂽6'kи}|FGwS|5aWkEiLyv^͝)?3³hJa 0@a \a 3@HsNyZfe !9۩$%GBrNZ2xL2t[nmۛ1[.2n 鷆H= ?y=KfhSfcKo .78v~ J7jY̫0w/>?wǑ~a 0@a_eexU wa 'Hx$yJb^=o<=I% p.I"q5do_vyމgc#[a]1.ȣ<5ot\\MƲϴ‰uy~{1| sj 9g[1&ߜzSeO[}g esF0yƎ`뀁\h ^-8ǗQ)">qqߘ5%,}q(1@a 0@ȅ}@3pҏH*™FI995.G2 Ѫ$(˶ID3}Wnlٚ.%02$Gf]MW7RH?_\JGkeZbj(0,5p nkl|bK,5{LNڋ11׾sO ^?roޙ䪖⯒ʏ ;+=W}>W,2ۡ˲ҕ='oȅ.b* 0@a 00 e9 0e`-Y\OJ9%$o~ѕ3_ [%.-akF4w ަz;s]ZڃӸ@ؼ>pþe|N}21! 2KƩsΛc:+.>ty1q1g[.Rtij^¨KG.,l*___fL?a 0@a @.T>[a L$6{~/[IN_(ҕ\֯_(K[ݡIVƺDO o%wk eى{f^z9XItS$h:}}` >XƔҿ噷Rf^|PN䵁o]f[ܕKk >7c容.Eʸ3 Kc/'\g}mV _P_Q9#v]}q~" a 0@a d * xa rĞN3.jiZ0춐t:Lk2YNK.(@˺ c0$;0 juS~HS|cW'vO|N;yU7 q3nqusU3xf8Wq^د( ˊW:jC'xy*=zuuIÁy9?a* j<'!~6$6@a 0@Krd$0@- dz2ZRN .3IΗï|uSRB璲X;F dzB,Sw,.|R;b{rWkrmjZw;xQnI .1|1{Ϫ$_0Ax\.>j➿o8vOԅ 4ZMg!)mڧɼb(YRu30<N0@a 0A80@3Ie{t5WI|?ZN+_q+\띏5_+rz37*sk:H! 8occY }*A=y6f\ oP4_~xC[cGњzn9g%h[:>–y<)u=iR5~R[l^63̛a[Չ:6*2{gޮk0@a 0>\|8q@Gpr ή^M8YĆ$퇄$GCڽO$%}Ji$^uy\W3W%w`z\/) [-u9-|X-C!i=ⱏ戀 ZHD~J{<먻'W?~"pˊEwJ*.M6\.ur#{~`oqo'Q}NsUlzu~@IDAT7fB%Տ՗q狗Ug a 0@a BD@+pBy<^-NR-]"KкkHv2xiobo4>Emկ%Bt,O}Ⱦ7u,b'q_Cdu"9u2{ >$/:)Hc_%L 9^u7GnUN7tn\ccz|cxܭkb_nSˁt v ݏ|xp _gxgsFK1N0R},ma>v[I@a 0@$ BlD`0$cVIy'GQo$rMXے ;'?CGIjk7`y땲xlsT5 jc.3?hs^^7ny#:TrX#{X[%OD$i|26ޙ/!ls1}e)٫EdR1>OO9SӥC839,}2|s|إJ/*L\_SXDnpJ/h:% 0@a 072 qWSa/`@ƕ8Hܹt'PtZY>6lҟqТlg0*)AYظac_uYZvfW@n'݃2$sݿތ5d[o#։Cv8vĬ}(\`eo^ bo;bEv?ʘ3jKy3L\`Kgo0:_1I 0{hعq,a-|8aؚha 0@a "@?$x2L{ǯJ)ȑDDWЮ s9g+)NZ6Za=bSQ-mKdڗr#v ( sҦ$ Yb?ނ,?].a6w(,xE^ [rqQ#?%8w}1paKZg[8ڋ&v]5jo3޾}g-p;gō| }o}>u+pc^8ϸT,V:80@a 0'd *pS) 03IH'|IBz ^[#yi{A!D9rW2֖%Ļv|`Jr0|Ԭe<~'xp;!Y]1$D~嘗~F _~)))S]Y:5d+XHHF_c3Kca+\r7?S<%3E,"y PYǯߖ+fF^=Sj'zsZ5΄~J뫙F>Rb֍}t/D^24r>=N6$Ƥ.YF_+|"+GwJᄋe("aHTE}Y uӺ+<8(콧${?0x?"`] 5o>PR~+!e ([.L{Tk%SgaxT>|ù*3^? #,y)0@a 0ʀwӟ?@ae'@+1IJUVPzˑQpi{6eLcJ6}E ґE7yE;iwai$z0{ˈk5Xsn25^g{$n9lV̱9j[/iችMf *=_=/c0͗=.< k 0@a 0~3Pa 0pe‘z8.j.@Vꣃ)/T,oJ.]KFbp䄧5'l_AmKDQxu}*cR֞}畉${/3ؖo<:_\pn.,$gd_l뎍KVҸ:k΋+߾}:#lӐ7[{=ma 0@aOe *wa c'&J%Jx$c1Z}gxeBI[ld5e1ann'i$Q[r?zb֘:3ךWx~y퉋gcoA1JQ/s@-nR pZ9Sz;űɛ3>psIpZL z01D}~ 1@a 0@` *d: 0|HQ4V$T+D;b{buGK~kMQ.3?ZO;XC݅ۺDs է,8b߸,c &Qlnqnx}k$یuΥ0. ๪T[+㲯u~EUgjnK]~Y߫ xf:K+v"Uv59.SPVs'@a 0@Pv110 $sB-7$Vek] ITeUVb,&1Nfo/_z _ „a5r7-eG%qI2!>m= 4O#{wqbeW78z]`Ŝ⽲h8#u!gXoe!3gF?:Ͼמ9|̗<\*#UXg:FRMJa 0@aoc *ێ&0@N9gZoml3.O2Ro7X>-3$WI_b"\59 PTAu\8:].0 uc ~~8ˎ\?Y~ggarv&Ν `7p勃)W 7w\~Y? L>g7♞d/$VԌVoWyomqk|9ma 0@ar { a Oˀyn$eYs]yLYZ [ƭ5`vѥ9m7SCn~w~㚂9Z('-cN o!LVcb^O OI"ZsGp TM9ivoþ8a\<+0` $ cvJ5 )lTi?cp=13rڲg'@a 0@W0 +X0@# mH_DgOzpl%>x<^$B]Wd(IQ3=+|a~])_e+#:46JЃ>{`ދkJ).T\HbZ@7g]Q}zvݼк<ˑ3_+oP/qNoϴ=DW5&ElġXo?n>.Tg >_=#a 0@a ?\);a 0<$J+VHBbPC'O$Ymvl.1Hǖ=v٣n71u>lKn{$8)n.TǼ7ً/$R񯟵GzH(R\kLoo{mo {)dW {_YGc:Uk| pe1 ?b]?}Ʒ9K_s\qڶ a 0@a e *g^a sBV ȺXymu2кn'iؓ -kNu/&^7|:nDZfDI{Y6<"s}Mh1'5']eW)&(.)_O3>ʾ}M!b+Uֳ8OLAl1sZ ^`ܴUe'dur7/ F?z߉!g#ϧ a 0@a .r򻘏0@m t⎖JnY<ۇeo$~>OvdѲ%M8_\.}.4`OINOK}ۨ9z@|שSeyP.tnJ#c5=4ʌ̕Oke ;*'tz(b/V(v൬I{$?gH뽢fq@a 0?@.TMOa ru.ϺywyEz$=)_巭3]YvQgMks >X̚sUڇK`JV0΅e>/e]{߮3,;s|!Hl&PiB{LqTcc+2+?bxe -(9\1}2$;cyɺ~ 8@a 0@ȅ? 8 0`I;t$#{'&5Y[s}!ʿWS5Zb%͚Xwe%GD&c0+t\%?VM$)ꑽұO)J<}qUcI{q8%붰^WL7tk=wˍ ͫeh_U璖1nR=ơ5~=JWن 0Yoѷ ?;K<&6 0@a O@.T>Va pNHtўgD['|a;">v-,f,NZJ$KGtV>1v^kvaN8DzHH#{i ț;݆~3W]W3ΩˇX06L.T/ڧ['sN]oXmПGQ_lmw5o# 0@a 00ȅJBa X:!I߅Ľyu|Ɂt]&^Y>nU+<`nu{Zza^7.l_>ϔ:]X? xjx86 I_j{nOXQwEGg|8eJcŶQ%pP9.h)l۴#]޻ O3:*U,e_ޮ5YGa 0@Pv910]HQI)iW5Sɺ)Q䥒#$߰ J:$ZBѭ-yN8j̬3nw쎷o:έ눜n 9^#ܱ?10?:$98]p}ꆦ9WoCms@6^p$-1Q:ϔ0 ̘hXo(ux E[=oUǥ_XO_K? 0@a 0*r*fc7 08SKNqIQhC^ӛ 5šK991/\]'-f,Ϝq{<> ĢxZb8ITsi?$7ׯi<0$̅# N!ཌٛs|GI炳Itv+awiFhX/ZڧqaKqb>o C7+Fp=, a 0@a trH? 0`'Iy "(ɾr˾ySx)Õ?:qQrz֎$ 6HVR#}橶 ^Cg;䯤]xv)U.57Z3w`CDui@19#J \{ŹPY.{}]%%a_߱gLŕ z^^ްN` Mcʌ 9ڵ/`}:kW7S杍em(u @a 0d *sޓua \a$"#Nx5Ke[C8uhuS^8?rZm^l2k;tғ =ZCy6L/}73?bՅ_g>ney,cl^T$L_7Z\f+rshY_[GK>_LcKrྣ\R{rρtF8~v@a 0{3 a 1P2bd ~K1mn{ulܿ[\wpWތS*g GSCHE}sїr5ZWc!7wtM< zj3s !娯^1=YM7|)Y<i͏|+cjy=g@zܰnM<%GaNO,^ޤ?|c/@a 0@ dCa2a G0Pdi-9z)Uؔ EC>i -_n^oU5Ҿnp91JK-|u~Bw@xSF +~ςͣpj6nc2UyӸAaݸރK~(቎7|]k^60p~Ol?G\9":q]kjJ#sŸ_ Rv^^k=/3׆1%y8dZ ī# 0@a 0@@r: 0>6w}Kł#5GKc,"(];}kxb"Nᡭ0mwѮ|*>ա\7bա'q 5zfY7jcz£F7ךUs͞%Utfcu|b\o$v;ae(apNc&j$?[ֺ_oKL<'.|'|0`f U< @a 0@Xc *k̤= 0>={.']mn.3jmMj-.k!|_1Ȋ`;ʟhnyچ7x(LX\pl.f6 q1FLl:vŬ3ţEu0u0lRn˖G׊I:(La.+ K aF V4O>kkͧnn y O&(ua 0@a dC|'Za |@,Bv!r,K$ }-wGvk)K6u> ۮ춵baԱ]ٻl0+WFnB5][$c~m|Mac=~DD7 %Wmؔcy?'}T#s7%hT܎=q|+U 2#.x+$Mף>.0~O]E>= b6SNjF S@a 0@f *a @.9\@9-r C Cf EIb:Ŏ PJžM#1g^(1Fg6ܺh|ᛃx=m9ks 8g᪭͋EudXX|or8;Vbk_<7OEkciaO<"51:xm9K\^^_`?8߷<R0@a 0@6Tp0?߼ nASeY$Z""rPquow-$_n_3-ܱ2-hqݱyoǘ!qh^#Unc E[S1;5f,rgs^X/j̭ډc_>T_|kfJ5W?i}L+qYu]u=6'@a 0@Ȇ%v@a`+JF/öd}~@'Kw?Ft<=}ob)|mʭʥq)c᫉\Un. U 82Z7u ;gu/zZT6y]qtjXP8sa 0f ,},%Z"qׂkȾ2K{?xRt_c,~p"͍H_i_},ؤ7`|;/rv"E] K|di66Ӵ ֿ/OWxoa 0@a "X߈\?l-a{}I0@a 0` *Ga 0i@2_- {HDᲳy+a:I-\Zq+lƕobҦſtx୘#Te>I΁D \'f *lẐùJ_3#.|&9>z\-9e÷%? d ro C4}spuHձļX~5-Q4moq|Pa5#u tmCeZc^wK?x gkm-l|yp~V?q`.(xn;: >x=i7ڹmS0@a 09Ȇd@G10N˜'o爍鵨yV1L@tMV.U+z @N#~w(5WQ.y)c%K}r\5ptoԂ,p|`3e<ea 1o]t ! "۹ŶnùF8hh1s>RvZNŞ9ڜcxḗE!K0q=1a!wxlڍy*^z]7Fg~g0cƆDGLK8jS߿{Et]QE~@'In[-gӫpkݰv&X`&Xoџ@a 0e *wya H8R!0W5ETSSn_OCCXoéݮׂU>mߕ!KޅqɎ|)K}MyT]gmÑJ8?SOc`)ۓ9#w)m_i"xC֏?NOlPg, 7Ӷm>s|ZGg3Os\`]s~r]/o^%(57`z!:kwv<2Vi#!4<8o|7P!a 0@a @6T"2n@a ,1&:Pk;H {ׄ;yB>ρ(6{O|Fѳ[VsaAވVym,EкkSk 罾.Yb:'=2xT\(kf~jӐ9*[B!~ǫ 9uߛxD׍{kao>^365q@6ݖs|<b0@a 0> dC}"H@ab@LbrqݘjO10?< ^X9[XTOۼ*y;`7Ճgl]8؁[зDye0`<{c⚢.L{<nu)jw9s@a 0Ȇ9N0@ Hx+Qn2IC"8,FnG@-"_/nBmF񈡘9B[v|=K玏 yFhݰ{kX}} mx !Ƹ8X 3X8:-|GmqGǔXsfVPb[a"a<-|8lɃxiz1ݶq9>c?Klbimĵ}'8ך5om1wz.%^c]rx \_w03w^<5ݿe!+0U͝V,QkoxJ\0@a 02 wnYa JCxBe [׈uclW xYq!np{DQ ʻ0PxΞ*o3c`p5|<ٻ6 I>^r+Fu?Ryk'Oϸi?q~3jq:֖6/+6z`wqJ]8改=%[dŕ 7S]?eDvR'X쿑B) ja?*-Bɱ(6 qXa#8}=qf9Ѽ ǹϱs3s|t{}aY'3Y: K>o9q~(X2RȣJZ*OJLUs[yNadx][W{rͱMa 0@l|ܹ 0@` MNp0gWBo[$ww=O/YE4oC.3ᓂ ]gsuש~;m98wM]qyj߃>$F m{f>y,?[py3J)=U3-""Ffί[*=M<=W`sBgaq{06c2o8JZB<`l0@a 0@6Tu"0@FEe;ɤt\m\ |C-!b>ᘸ;n]vfO8~ ;p97=qZģO{99)nBcb ^~ .yoO4Aۿqݡ]^[`yy'Gm.j~ʡQ83 KYx!o5V43VwwSFNV7U 2|"΋;CY\d|j?}gis@a 0?@6T M:a 0xP@Z`GKDԛ}CWvC|2Xo;oZ =uRyΔ̑ǘ[bui` ^ 8ћs]?KNadůn|c8Bi3muƺklt=]Z܏֫Zl6GYafD-c+x7{E07>#S% m;Ox(O ߵ69=Vj@a 0@ dCCN[@0ȀJ% <^;j@@E;\豈:CNc+ςk3=?%[QE9AΕڇD%޿qKڬX5a7J x5A'؞8>mxOLpWa. Xpn:0˜9Ʈz=p")).07H+ MvOk;Wֲ7a}N{Ja 0@6P7م0`1nNDuO6bvzMB[ ~? a-y]m^vn7\7|!S7G`81^Қ`a O1x=q{Nlo/piS .;ejOѓ2uZ~FOVWaWz<72j?Mæכ')^<(aq매xZkZ/e ߇ a 0@l|Oa 0 X ERX)1;.!XKNbul{ƏE3Cb!h[0&mފΥ\.03ma^\O3#n=m q\/%x`a."DQiOłY5>Øy w/`_W3Sp%oж7\0@a 09Ȇd@o΀:rXWž<-k5>(}~8z}=}(_ş;y5q8룇ZڎzX.'궝1૏5F,pddg6<K!=Ru2Fl!+ep-7|_Y1xRK+ٽ11xC]Cy`*U&0Z}Dų1O?ן.^wdcؙo"Δ0@a 0^@6T^{0@IC+q"+u/Rlf肭q$,&k;l'Q]72Z=oW! M>)yZx'5 G|){nؓ;~zl[fDGm+J; imU_/qM \OԘs>r#V9\) ¸]#&ќ+xi!Ϩ5T|T,z=QBHz xYp;qNQh9j~ zaLJa 0@l|Na 0 !!ֹ̅:[ ܇=~^;W)@IDAT6Jy[N/}K yg{Gδ{ÂsKCaȪ׳+~]Wbl1?q}.!5kk+8s*]L Niy>"͔Cqz ^etOj{\k Gp5;up1a93֛yCܗi:S)a 0@a |y:03p&5aoIDk6[S(Y1ѰOun SG1%{jҭ%jSCȥǒOcĆbY|k#/S5YU ?/9fRN|\ C2YK^5i:cm"|ӥq{hNXY#pM=eq+< 9'D#_tkX|i0kip/θ46׈:ڛY~jZa 0@a dCߜd@6ʋk{nvpc#!P8}spFY-cO8۸Ui# Z(l|xY]ի\8vߞqQ :[KqlP^r,_jB"/&^>v}.8qD kf~{bΧPQw|u; nV{S4⏁f rj={"Eݘ: 0@a f *o==@aĀEF7{ qs ;ECDIq~O#"0㻵v|\}+jh}#76kȽbǁݚOk3hZ=7)ȱ|*&^#fNqޙDhp99rkR6Cs[;O=_|)N\ֲۭ:^a+ X{ǁi=y5N Uf.:LQ|8R m}neHa 0@Ȇr@a8IBJP$5$)kB$蕭jVi;6<%(6:Ԋ'`d2%U#ࢸMW>_U#&ID@[Bb\>՗]SLxt 9*)p9qtnV ^ 9<;ly} wLZhU{1XwT͌ jg`Qi=1L^w;<6~>^'~#ȁ@a 0` *Y a 0ޘ.!"4"KD` ǙE5.sC+\9^_KZC#"u5\'%,=o梿.3'Xu]2зZ\<\-?&?G1Gu^_ # 0@a |Qf*8@a3`m8l(s[([DEy)__F$-.Ux͖~ V#vLj9_35 bqpB3-59+vdJgDaI/-wr`QB72NwP*ys !r};'0y?U7X^bW` "t=@`kAp9e U\ 9y.NFIp0@a ls @ag͂5Zx Qefxt}xnߵ &tKg;k>6£Po__y)3gw^(v;RϝZp[=/HxCRs}υMɁ /Ds6Xc#1{w_ܑ?xuO%9 |o:Y؈{q㧜qܱ}9<Sa 0@{Ȇ^b@a@60Z⤋S_ﭯxp;mqipm'^v>,D*7UR>AV}=AOp!ar1R9%#ڼ Xo'İXNӱ}%lPx]OBŷ =u3r?9u]׺(ܝp7[nc 3%j(8g|쀱jJl(K3}ȩ~ĕze!ܗhux! .85 !5|hèhp{\RfxRߒ3rH0@a 0Ȇg@4wg1,LR#R,ޝo@#zjsX_ӆLT1}judm9VA8T؉=Qz"7i>5[nX'j=MOl; M^<5{mzrOAy}WԜ޶>6s|Z5^cvf}$a 0@a`#PHT@a |[= r;=I+nwe?-R[wL޸=pkKqRL"/21̃36M9SG;U>-\E9[{>DWk^WGNӳWKjsFo ^.ZYF.Ц'V}0o8C^q5wb ^WΓSV_Ja 0@@6Tc" 0 ICµĸYLn>f U>$ ~qr>3?"N־>NRbB-dfO?w(~|鱟8R^Lga XtCC󵇜ﺪ>Kl.l>|XN:zo5Qq\|Xuxn`CsPK,^c ~aN.2pzuUUs)>z,mأj̞K+gX>=Sm`yS^@.Ts>x_<9sZɘ]XKpk9ަ0rQsmbL?rRcc *@a 0er0@0 X4t}|R+%VbO3g.ձ Ⱥb(sᖶ '`I.u8ysc% 0dWy>st+ yM)mLb.pt4MsG|M]&Yc X)~YV~{ )v{UnlPPeR,QxGkh/~:. 0@a dCe'a1a 0 XCh|Pp>Z ]q>{Xr  OT/zfB5CBy"w/,}<l[j6o Vo@T (bPYGfcOnt~}Ǽ,88~Kd̹1<+1ͥZVz`#Ow98gظ (4jke8 0@a dCe3U1 a 0qXJ̢&^ZPo)I-v{k#n#ZKdoqz%`FV5x,/^kírxuW:9r [&>XB9ͧQV[Mx^(!R3rX}#SӮ5Y5(^sO-,w5zșu;6oݛ{d3kӿ_vya 0@Of *O&<@a  mSgV-ZnK}sڟ!&zp[YʩV|[%$Ȗ]N8[bCu :74sCIx}>⟕«xs X΋ MIG| dc3esKe'c]>+ 8o8jZUߺѹC צX}qiW6x@a 0@Xe *Ԥ# 0#ŵۨ]۰_jw%|m~^=qj$!X8Gc/g>|X!4; ;g7z¹V^Sv~u=9P?Osr0Fm ^qq){{?PFtT˦lJKĔj<Y˟\a%dx0Qs4acך6gӦ> li&~ Qk-և,M]D&? ʃYUi1x8apЦJa#yu͋^UXg|C:sPq@a 01 a 0p<$ʗHhqVgn` Z/אJXEH15aiqJk1z}KSI1iik>5UsKAW{*_U pkָ`NQՔit=" >ߗ:mGoRxm(bk3y ՏpƄ0*z2ww 8.G6ӽ˼5s9;8qbaK%cVp OC, noqJ l{kϕt>r7Ο,[0"{S욗RwyĴ&jD?7i3u2x9`ZGs.捱WrDqOfƜW\Omoa[^J:jmi a 0@a@6T@a |",I}mQ *z{kˁL%m+)׊kq-,1^[jXmo3#^מٖzOu^l Gངy9VrBĞes0Y c?_V&a@;lD^7g6/C8 K{_~j>ߩwSy_U ׄAQzM{0/\^aↁ0@a - dCe K a 00@RZJl7-}|ᯥ-!,"(,.ֺVIM"䎿&Vc,¦91\#ScX7Ǩq{۸kI=53kw 5_`M⎂u]6[F ^aL⹸ܛ Յх&^$ҏu8YF?p^vZap<Y80u`Qc]b,1@a 0@PBa 0 y-u켑D{XCxk5,/+`o>ܱmE"//"nk~9mZ-3~AUly=^Oe?2ݤR1 #+bUVǗZoHy#% 0@a |vW@a 00@,C8HDl4އp#D7Ǔ "Dρ"3.mp9DM0] /wets_G)^ B،ct-/wGsƃu>gΑ+it!OXwmdpn;Yq8J a 0@l|Oa 09-tM8wAX`[ 1:αۯŴ%;XycKnlQ $|\hny7Vs`4g\}̝o\?v릍0X-n~t[8OLsL)^Z Z9)J9~EW0!x uV&usD9ç6ϪxDa 0@@6Tyv- 0@@D\BcYSx}wQ}{_i毜vx=EPY?} sO'.Aυ7|Sa_vrPsn^ʱhoS[F<)"h{ ߡ6BGz⨮6)~x9qR؍Kymk헂[nKsṔ_EZkԾ7uϔ0@a 0Ȇg@a Kے(6 l\sqkXco[hoq'<'k~ "#dzKO px@%n.8 qUJ5޵W܊ɽ^ 뉊ˏ6n>]k: !.6jݸoEilpx}Nc@78;kmmo!֧/ =Y3Æc5y%k@a 0da 0 ϖKܑO`C!6v֑.s,E4D8/KXo ~U?R/:EA5G ܰVDj)Nl)Œo2|!8 ?^6ؓ[}NΌx.͈ۛ)yKVhRXR[_Z|c kbj\ph81a 0@a2 O:I; 0- YXch}LA!JmsϹc8F]ݮqo `##R\ߖFݜ+)u$:Vj b#YN(j렀c w>;x}Gn ^d38|Ȧ:M ''SjbI^k6mUMאA 4rv]ypj6!,zv_w칧ۮ_oмvi}e6ʛTfpiNhmw~gwiS}ǨiDVֵčaa35pyv0#.{P}CRkg&`1x{#ݏ`H a 0@l| 0@7.ul-;uOv}UyB<3MU[4oP414=8<e#V{%B<v pێvC 47 \.6~-OB@wmmx!ـA}ff*7kUcS}F\ 煝Z/) u/~x ; +Y#nDYa<@a 0gd *q֓sa VxU4]C0Vݦ#PJB4ld{N<y!B \b8-f'b1K~zx"MV=x09I} 'sx>{׆8?js1m1W͔A9;?3^r?Op=M kJ*:ڱiOϛFٸfmaG3 1) ݳ`n6}cojfo3[ez]-XFL7b@a 0>Ph3a 0^눏gyb"}=vnq7k_u^lΝ'1}()űZRx@4uhza(kso#tҼnhBl^8>Fˢ-,ܨ8#gG5cc6;'18jĞ~|koh&owbj~lީ'oԓV/8ͳ7^_؊G4U`} +/MxsOߍě Tx>Aga 0@x a 0>^gqB6Ԉ#Z>صs۫yAB$#Z$ҵmnZ]#:&DFŁ0K#\.ÇsCo)6}W~yZǶ`|D9AL<.G|̧s;z농#_cZvb0x6^z?rnI'0# #rv!9m NAS]Þsw:v|3+/f䘆0@a a *o3@ac0 oob-!Q$xQYC`uY5 v_k cS 5v8\\W2~60Wj諯㲁/D^u񅟹ARe_\F_?\[dxp퍔5΍Zk5el,=mZ H _U͔6æ75 jcȯ܎q_χ: a 0@a}ȆM0@xOJ$"""QMjI-c0AhDY ]X!RVqgߑc-SqU=|m3nךŽ7| Wm{U(Ⓧ:z̽<_|z >QQspoxŦ_.FaZ {nf!/ 66.MF6,TZVoe~sfU]ȕ:? _^ZQu>&oqL@a 03 7 a 0Qȇx&hmڰ3;RT%3!u^hx8KwsEXdig)m]tIZ cdIGِܮ zy'bDW4Y/յ۟Y[BxN|__eb~U4tj_ v = fcFMpDpH nҦVqj y7VKku­{.Fo;p@a 0Ert0@{@ikD|]lKKC\ԆJ]ij@?7dIn5tsn10XܜzQ6.p55ou>Eõf 7==z>+c>fӆ5z68"^p"NhyME*;LOo /uϛcS. X0¹q+u<sT,zZkmfXCވ@ a 0@x&a 0,!je-(cpE8 %2k.TDЫdb5=C?ܒw~inQsɑ}'|u_MR'0iPEk۪3a 0@a ȆNJ 0@ Xh3jGo)Uc맚'r= Rg8;r폵sCsH5%)a 0@aȆ;J00@ Ikݥ *"ҨXrLxG^+XznK27%`>7e'5KJXFLV5pWYu8QX."&& g1uT\d'ka儭rXgg㒵ES<{|3~iVoi~PK_{eksr`>ig2lR8O a 0@@6TmF' 0g {>&Q,RcGM}qWjIC8qtP8,y)/B:ц]OcYpMaq|Yظ ZTd[6NalDh3u9x͟j{ty [jlM".?kΟY<э>y2k3]%L EKGpips?ݹ5}n[ cW,c]V箴.@a 0ތlلNa  e-2V݋7ie?/dq笮43_;k[uLs[_11AJ]?FG-wZ\6z܌\Ϧ;Zp7\^0?$s~}GJֆIim9Cklɟf) 1;yZg-S>վT5왯?È?,_+U0@a we *:3@a3H6/hIdSOc n|ZӲ|vX8.\58]/ŞCO1X+ ;b7sYtlwi>8֗bfz> <|?uc^sKXONKF' 1r`󢮟\p}ZwM*Zaجq.ۺf1GZOc˾680씞WT?le~%i a 0@/f */a 0@,J,omㄘ8o \ 1ɴi(T,@ZZi3Էgɷۜc'y !v .l)c s8-ų8?3Z.KFM6SP޶ĸfʽrl~'kk㎮P qṭyY4օs7bǮSCq󚟵vp1͋s25#]+1ŏ Jg<'5by_=5fܽ86=C|<^&o+kNTN5yU1Pa 0,YH&z@IDATjM |IKe hkk { 9} 9N<4m]ا֝kYySo~4k5vt*Oo{nk$`Z#'c–sq{qu c>l}jl%h>g\Ms0p<%x}Oj/W%`XUsNQ,?Z3L^Zy ?rн7P7k3-% 0@a |$f+X@a |`,%¶EEjl(:n򏟊W&ظB = #1©{SƱAS)*>#pIAU iOQ+OUv j^n00*yd}znف =z  Ľxnȑz?ډ(kq=gk+qs0Dur6j7X_NU{݋>0b{f։e;G_%}G( rs9)a 0@a#2 8k@a2` [k n>"e$< _+/Axt.Xșh\Y+6Bc]`4xЬ< :eublqT>GíaQ|_,rkEQ:ؽ[16j7o=Ǯmn' 0@a le *[]a 0p7iJ,M"I#:7nK|1>jKiï|lr4\? x{8aN/ }3>y %b."9vA;, =sKʣjo/<|TL~U~um͹s"GI]GLxfa`Ά[ O1]܎^NLܻ1s1/w>30%Fa 0@xPy@a ,2𗨆XYBRԷ _kűL%vc0ja]5ƙS/76TfQL'bM*O%fg0;Di?99kce㈵bSύ^V(ȅ] ZkO;Z6ؑϴR<NEؼP"sS\ \Mk9^$ v.^go}v6_s؏]00@a |n?ه0@x:mHlLHzePj §EMۨcy7oDEv6G c96B;/b? S̓qG4f|68S~gG6Ya$e~}m.~?lnkyfMl+\ CX%q+84F5m~/rs[5h7>r/7D:@3 0@a )PyӉ 0@:D%vnӫzh5?[~l f[n#6/X Sy6f 1,6xsZeq'o޴\I-:֥[̗De>)fi܊q?gG{C*Yyfʦys5 ^˷rqK!Xlڈ>-C<0PO۪}k1'y]_ 596_yxbkaY u6y)ua 0b *k6 0?π.JZsF.O"Ĵiˡv€*+$BЩ~=QMԊ= z%XUq 5,|G7O,ʑCqNnݾݸg20s|m9}Ts_}CuK;=rHQ۸i/qހ_qF`xYAC^ F(]YC# 0@a d *; ya 0X&9ayX `a 󱗮-BiUR7c;^x}ζ qϱT2\(ls=1b56oOW6#-4#Aƫ{z{Koە7T&. zX_<*aOiB[r֚!:*LN 5sOM.uh\n=7|W{ڝ"Ua 0@Xd *1 0@x%f ,x%"j$v6kQesVƵ!zFT9s* C1OO<1$+|ݽs"~,籔㽸Xjʙ|]bq%6.0E`x/ oq"΃&AQE'Onvc}Q59s߱/֬krsȇٹѝ`uXcfJhgh@a 03 aa @_D%޼fL6[Mb#\w\m0Fd JxjrQſ.*kn.@$#<k;5OQ8x8$8T.)s6Hʜ`G8ջfyM*9ӓ \q[FQ8o`}h uߜ߇a_ 'Y䰀cBߧ{}|! 0@a}ȆM0@ Lb`0ac.PK-i :jD cd,b}c՟_Xaӝx:^|"nv&hQS##1_W5!*nay\vJ|0cb;νcqgp'8p{7xƚd-*;uZ|?`33??J}v摓19Y9l&7q 1;}`3 ܬ{#0>tߌy8٧E%15o>3+ ƧE;kf_u j^nXX˺'*ĸwbhs;ܐ׶N]!@a 0 @eHa 0K0`k B/[d^-̦m(R|!DKx_n{TN +دkuAk=XOZٗD9c݋S7`@T.2|o'_CO~`t+̿)kpc.Y&0I1^o}^ZgmYoxs>HLÊK5Gz+_wzWknnq!xqXz\<9o?^!Fs +;KOHM+sg2Taug}S ~\ʓz*ek|p-2l2}=}].'@a 0ޛ}a D5b Âs% a\1X/kޣ߱Csq4.d|[6oqpb=_uY>5}%VY@[}^  ";'\Gǽ*pVw$ns97yOݞW( c0o8 ay fS18s.7ش]+s a 0@Wȁʿ҉3 0aKWI]ȝ]~uB=(xmuLvPJ|m5:f{-rIsgIWio*_`@?ùŞ l[k Z˺jp4WaCzǯ.ϻwظ8@r X9xkHiH[~i*~ YKaʶo0ԩ oܯ㞝 Z:ƳR_Ia 0@a3Fa 0K3`Qm%Y [b/ZJHoՇ" q?(~Qȱ  "#5v4~İh^GSG3yOp ,9\px c[{k 웑# c>q2pc-،S1|ƈ.sSYk:{e;WObK3[1(p^v(<ޤ _5{Dϼq1ǂ1zCt~0@a 0pb%ma 03 r%Uz$RX^n):p+Eb'w,?zcܔI/M?:2z[6wG511}f_f8í\8>{}߿scrxWv458k懁0@a |Mr55Q0@ 5Q@-%,JJpJ9=dPs]enO|Ua[CmW&8rfգlxj_^!=YX>|+WbŇ,!9q_ձ_mY Uf#ӵrp~r.c+%SDW/iw6"󹴶l~?,]})φ}L'0@a @T:)0@/_T?/E:433C]o@G>S9^""U#c8c]{%9s-wsTYR6j*A~75:fl?񅟖̥wGccaz^3"X_Iz#u&&dqHό8|@&0^N^~Oqtj*;Ap»:!ua,=q-qMuƷS/6u5 W~I@a 0tr%0@a|OdnqhGMml{OtCA#X۸l|.6j"PµOc{Xb)'m{(m7xtǯsL֝w㯀|FltrL>t!'d<X`=a|W{0ؗ?c3U %*R^X US8"4gj/k_P~(k=ƞbMr?kʖyϐr0X$@a 0I5 0@xuꂞj ,1Ʃ/$. o" 3ǮoP\4 cٓ똙oy!9#'ρ4q8ɇ#$޻_SeSA\/تb9;Oᖰ\9͡S^rKQ~oOɇY *?CwY{֭zqX|G\*S?6N.J }CqppV9>~ >\6^rl֤X_?,@a 0IrO.{a 00Hpօ=z%ѯ*B"gs wLhSc/vw!9r.ۓRb}awfʹ qkvgxo~p!ܟ򹥏5~,lzsg`EW;HcN7(&sl98u^zh*VT&yXu~n}>86l0xlCVs_qqi{sH@a 0XrX- 0@x $DDC#i[<(nzXvrɌhs-zsCW-rۮŜ."Zr^A,{d>F\-[3Lk}WeE0O+Քv}>]T9qЅ=Gs ~XX8W^ oPXӡHuj3֣Hχަ/^bwGqM̎;%b:>OIa 0@_|L a 0@g@",Nk ]>#6 YHt>lCbM['C_@m\ᶑsۿŌ^p ȱONx/1 w̻똌m~^zOmߩsܢvkQv3־֜>j58p!_*0l\Z?zCr͸{=jqRP.sϣ_K8|q=) 0@a`a * a 0dqu%f("W}(f ]M}S.v6|HUM`J]x[Z'eX5#ḧeks|=ƺ8)^{T?ް|2yS~Ab9W|}0 3!s{k`כ "0B{(K.M\n4R7hkl>s\`1?΍zRa 0{2\a 0.`"ZB"1*q\ |{ ^l_) Scx[UE1' \j[p-sag;p7jtXW`WimwM#>t8H:gluqa\N3^7+>Tٜ2;.@c}Xڅ/F0a.OT׮ˎ7ثfץ탛7G{^c*.{P =)0@a 9PyE 0@a`KBEOBcʅpDݤN60v}-#o{:eLstc؍.9"r"!/,ʅ}r͟~ P}>ظeqơ9Dn~FKu'>Wm׾d~.T{b_״5>1޿[Øj{D̵K_W:,/ژmɹHzwcۣi{Vۏ߹ph{܇cM̟ciƺ1vg?ձA{W=l)0@a Wf *:@a lfV7hGi.Qovk2!1}qj,EV0i︨_"mN`$#`WxeOU|`zH cSu)7ӗ1{抹<qxr$ɍkX1ee?̹C`jͽ&$zm8Xd~nx }bULA=|K_ X}oEp@a 0 r@a 3 4,MٲxXdc>ШB@] =Aq\W4ڶ m$,1'5N5*kv}*&/צ͟uu,}BΏ{̵f u .ʵ?|7hj9Gt=7~.M}T#"jڟǏso x}z˧2``?9:|WLv3ON"tY|0@a 9Py 0@a`JZ ea#.IDs<.s^>5_$:!Ԝ-}Yۆ?>ȏ{%_8~ɕX;*+Ҡ0<4;|օ{;_ERmWI C87ƹk 8<z@_{9-=^kWs~p2%| zW_!'qtF e!3x'ު9sO{&u#'![q)?myߘ{Զohjߙ9?.Zu'`xhg q\K7k {:l{ [ʐS^1ߟljž a 0We *_ueWa 0p]t"HZ6. 7h4.A$@ 6a+uaMvSt0ZJ[=\TkxȽv6s'wl>.|0_m?) '뤷qjߏ$>o>)̬-!<o{jcgH</<~O {;a 0@10@ahBŰEfݣ,eX ߫$Rt|w&t@AhǞ ӇK4/}}Ǜ!Bw"˥>8j̳ :Pe pg/coخ3qvu.:hXůCay8bŃ:Tq[oa 0@@T^wm, 0@HhwB4p6,^y+A0u\k}<}‰~A= k`/PfHpfu9yuYu=s|o P'}H7! [`<>P`o.0s {F##e3~{"1w'd^ȉxÛ#oya 0@@Tc2 0@ؑ meQLBX-ٕaƸ{fI`Bd ̼ q.anx->BBfU?qb Ӿ9al뽺c6~.}Q||^ן!.iXg מ6'^zS yD69{΍lg edk_vFTNs-FoI=bS>bHS?Aa 0@Gȁb@a 10)(QXpO;k>8>䳄B ALoVmYV .o{8·wxB1b׏>׎}a*>5U5 蜸ū)`󺀑ue턽FÕ.p{֠x_GGWi|7PkZ?{̋z=,:&-78LM}}WɍX0@a |ErW510@0P"d8ĸ!Hpo j!J׊kl]~Ôk1:'vP>cmkh2bֆbi~pv\j#Ov4r]`ֻCY,_ki;9c I_ W}Qߚ&aNk)V|'̅(q"K8ߋ=rה\@MLCGL)f<#.6_,Pc2N$ezQf{$A cnt({ÆIssK\!W?p soj]rpدZ\FYQqjϦjӛT/ʍ*#$QUAߒwքrl: |baNa 09P˘ @a =U%MH5dAvvX_ڔcڶ;1$AlQ?e./OXe^8}_J!)>/rn?8*1*UU n#"|m1{i-(!탪] ^V8wߵ'ץ{/{){}+-0n*=:\cxٶ!Xy+ 9-cRG{{ØᇸȵUVJ^q;N<1!&fb1+,a 0@\Yf0@_ PKY$ZY0f-'‰o'c3^O 9vX8lA' ~2,Gr5>u*mb[cuv4=:u|ǫ$.zc .} ؂,|1 W~tPo`=װ/-nW<[q(⢼ 8Y/WANoբu>6/M(\۷nm Km|[{'%H$|K J_hc5e1}믟c?;w| 6DqױWM<|UVm\zl}@}G26qWp@|.Nٯ_a1cQ|ֶڟ{k(c=)uB|KܨctN|`/) 0@a:rr_@a C B$9'yVɢg1fPDFH+ώbk axw oa'x(QtՅFzz :S >ѸCxd51ac 4 W#4?# (;;9ǴW~X[lqXnzrxjG8~CPs͡+x m>U}Hk.f@g0>.@a 0p99P a 0A r`$XC>E?DF=}#Rxu=0!9q+vNm,_{ m9ON:swT<suǗF5XZ_%u!*+QLG& |>p4U((lQ^};Nж򴐳.]0c8玛 z.T1_v0' a 0e *_viXa 0p> (au!`"q᫗C}f5M FW@Ceb÷Ob_(z/Hs5ANb~ϩw \kHP1 67 #sca@=K^u.Ls`{a=&.=oPsoÿ ُyßm=*'zꍫQ|8;zܔYf֨ڜ吭0@a g *ǹIOa 02 o ZBZdjc%/@IDAT讙D15%1Qn6s [on=z1Ўxxϯ9ReXR(ܖ=8ӛk7't ksjc\;Np-#NJrO֚7S81w`WUpS'#6.Vy~۸{0;8 q"v9}kxǣ6rpq`=guC-{{~IRa 0 @r22 0@ F!P ъT$j]{Y.d믟v(!9_D]SǶ:ʸ}90{{rsl b@tHQomlk9<ú`KvL[zkN~O0@a |rV110@cBrLYW @F"y̹]r,!}l W.rаZlڶ,Ydu]ƺnRX6YюoqOoHUeö}=_^R|V]Z#n.KHGD'+koa^<+^xnv?,orx a 0sȁsx0@a( "Jj\+_'+,ebX=VgD0e1]6g4D`sع^舑 ns=?sI*O`- |#fֆq6뷙 esṡ9dMWV0|lDYW?|Vټ}\gͼ~go~ȱ=d~1wq1_p/~Գ{'}oey|^9gL9 0@29PW?0@(ɲ3bb/Dv(&kX",ѵ&˅|VIg4P,u@Dklݚo`7v cƁ5}ywi<LP5u@E\$Rinjα«=lwğ-\+΂KT\@峕մ ;EKyyPc2k]s1Ƨ*jO<߻YX:mT쫞N*b~#wrq\}!͵h}Ǹ^@a 0p&=a 0@8$R!tUBZ_yck=íiکs"[mK"16.s|Q܎8~.yV]b뜯S^oX uk9Œ)vKbw!`"YoYZί;Da~ayWU/g[:"}1 ~hg,N^Џb[ث1i ?QʌU#._ :1W^g|4,m7^[p`>@a 01lna 0W|m&vJ—E.] a|Ύ6lCDSٹ>I;#\ șpN'; g׽'>,ʿ@5Qu`\?f=\q+.ttM<3kO_rUO͠ƶGڮ-4cO,8*N9c!EqU 5Ws^$7n:>xW.'S__rbeqŇmj~}gX5u=5|RW}_gcX0@a ȁ$eHa 0:H} ,}XrqՆ^UfE)'}G9"#+`.NܡW]lk }%!3yu'v!N}1P(kw('-ck3k?Ɉ'ڟC_{3<{ 9{,1Z[.$&%^萻lKھ5|kovk?% a 0@8@TN0@a c QbQaj^{t1;_WAls rm8l_oXLvF*BEgo'8r^kk݌[ؙtg␆q1^pW9g~$ ^k}==c+܎6IZڏC9F|#`M ^(C{YSio6-2Wv_1nO_eQ9^_^A":[(+.֌xB%({Jk%bv;o`-lχ O_uф|0@a \@T,@a 0p9,Y#c o%!!)/W EvoqÔ.[o[Td:o| n|12 1v)-"fK%k/#6v|ϻ{^@0r x^8X _V{~)ٯC|g?ΙglƳO܃/yKcDa-tR9=6G0hQz~:m}ssNǪ1a 0@0]h0@a f]eZkص& %IЭcE uƽU`n^NirVsi:(M 󵝏gƨTaG5Fk ;nO_5fKPS!狖,NiQk߇n{a7;Nrm9fr8P>~?$7[ec!_5l a 0@8@T0@a BYDcBƖIO;Ju+5?F~ |Yʐ"sgu'8XXt=)5{sMLbxc_7>f!`m y*okc}!۾‘[Pm{ưN.ph9!_eтtmw+6:F^;,hbpCε:݇%ƈz7;5_ KZW?xHӿ QScSǣ> c1+βC:gͫ'PoxW0sSJߘF\=o\S?x#ܟ'뽲Cy]=Ǿ\_f'qVίW=W*@a ȁތ^a 0S@C]% onFpx$UθWwd,寄DD_u aڂcJTu߂qצO(I6esZ׊#o\~!^c׹O܈?Fl_&ڳUKS1K0.R{Z0q02{Fu@w8pҌat*fM9h"i2~t QnE㷘INɶuN?~ ګDlo/Y@ԼK]2N~~da ^px;UfL k_CzZX_;jkf60s{UfU&c{i@4iXXg,m4o Wg6Klb J}TSȏHHDN}rvn>C ç>h.Mf$cVG2|u1v 0vI?iE<;VsѮ4ڷvG7ϼ߱;lOKo8ǚ(֊<6f逾Ia 0@xwr+a 0[2ЅPoJ\Es``cŲGՍ]bq fv(sՈbjUT ?>,<)1H+!a.MQWvsi5cPhc>ZƒXk6/'9/ܱ^?;yo9Z!lnq@w0Zк@ x'ր $$q]̼z>73o'd9/ꞧc/:6֊uFɽ?0@a 9Py 0@a@|"[h?&ICɘoݣou4~R֏;}S u+.Jt1:F%ywe|=X",,6X Oa , "hKG?I_U8D;w闅azޑ}xW~ E1ǐ8\ҚU~֍㟾|޲͹טXUՒx=3kue~kU^vW=9džǹsΙgfq)Ʊ.3kn<{>@a 0ȁJ##0@a <D&JkM G2t̎/\Q߇Vn%f{rS /LwJ:o#>  7:8Q<zo{ԺZ1}Lm.{lկȲq܎<=~?|h=5֭˜صcutax[aٚoSv~SsguTUe9gWmώ/@a 0p 9P a 0I]BIJBX%HW.W9I-_aӺ:~LU$ʾy8 |`tl@Za֪;ך1\Oŭj헿߂daN|kĠ kx>r;cGLU0C'0~T<$rrs/:lbmkV΁oNnw+g>5G~^ũkޏm-?@a a *VA@a |,‘KHoS,,z:| _[suR4ł'9-|m;`!XZy!%v"чݽ)L{8ds65a$mKui[:ZKa 0@xOra 0W`$W b0=}E0D[+QSCT`SД{f)b kG!jN'Sl%< ׎w9r\LP|=}Q7}G/n]f<e_}^{ϺQ/Lziw}mkr#0O|܋YﻤlQY/M&loo}-=k}msG~Kb6gvot\/l8q5xb:is_W^ޕ׏S a 0u @:2: 0@10P_Q;Q: p b4/=c!/x$R#c(.k>t$,?xR>)#DԱֲl_ojok[b!}M-?^bݰѯe::P{J=Fӽ0b|hߕ]汩/5` ՚.:N vq*oto^`b:5\u9cy61ĠrnMО}g>^W懁0@aȁ;Z00@oπ/E&-1xJ!_e6o!b"_/ c[r-{hO}8h*|cٹ#_9xn enNZ {;S]{`?DWw 7V#վ5v^mk C)mX}7.= o\o&''x-!{†۶˜0@a |%rV30@oE1 C;{k[3pwJ?#8[KjH#ós%xcqEȵNj:d}fΉczt5 }0apA+g=-x~`lM3^ Y{Zޡ5rx/?32>y$b|lԵf;IpFZj˳VO+}{Ľ $0@a0# 0@x[`e1X0D4Yl޽%fAo&KBDM¾1H|KTUqy g1ߊv̊q*z`%N{7/Liuۯ|cwg 0`mC.{su}CǸ!xma可r߿ΫSc5cףN߿ʹzp5 0@/@T^~0 0@@fA ,B+$YL2Fp!wFr%Kg72%Tr\ <\pnr9b3;bBSx;¿4;Fqp0^N~ vqx=z|8߼_ww0cOO~޹S:f?݈~tٜkMZ}E|ѕQ0@a @Tv4@a 0?fkuP-?%]Jx WSݷj:"^?GY^A>LPs*>lES-ꂇ_\B1l ~uK>n]r)i9i$U1FձųwHo'=gFx\UXgM~ 0@a ȁʚ@a 0b !z"! egǠ"lv,f>JμV&fbXK Cмc5{N9b*=c2k¡%@ӛMʤ{1ReW8+.}7o;x?96~{xY߰瘋 _V 0V||x5ꉘ/<XS;i XEex~Hνοb̉) 0@x-rZ4a 0@ XH_(ӁvL408j^`NCxMc}`x(ql`tX18u޹g3Do%,S3΋b8ErrW猧l7+l@y.;u =U.u8yn|u]mKl~ޤ`RyYW|L5F9}xXjoA, 665qNx>}$n*(>uga 0@؁@bL0@a`oT.Wi=ny刟دM UˊAc[}J8kwYx7@I.73`:8" RPQS,fG6@_ǩ.m?+D{Luu5a_ }M20ڱ\|6)j`o S|b_nW=+x&^5!vXY(>+_ھj^sNLz@a 0p 9P a 0@B`CжiqܢI[s%^#qүbZE[ĬŇ|Nx{N mb67 &1Y`P~ݭfcM'Oe b0/I^(cCc>Y}xZi_ga>ؽ(@=O:P{q`KȺvGǂ=lކh9bMh>R;mu{s c˄muG_j(|0@f *^a 0,Mmjn,0! oQN %t򆊄`e +?$u̜D+;;s܏>Jr {c{\c]}= 9{ K."%{`K[c4'&<@g%~eO(V=F׳XCd18snս^mN%s ~ga 0prr! 0@1H;6Wuie=*9'"$]z["$A?eI}G+By4cXSIo^Sgm{k~p \'(eb"9k<.~ql ;5?L'{~G[?+|š̩rŭj1`a 0^ޚQa 0>1`Sc̯y2R6usѢ%1^ 4!Jcv.7H7=2_[>xa 0o/͙5I7Fƾl+pMo1돌Y9 AMX,lUY%@!s-86 5wsv&4.ߒK:cқe;pȱm׼cqN>y]/Չ[yCoo"ے2jsSqn޹~ab _Xz~&^CN;[fܺoO._e+|_94oےacW$c^m40=Y5^ԡUoԐ0@a lf *0@a < MN]1z- t,HJ* ]$&Ͱ<=rذL(!!7ӯC콺huwُK a 0^ _a 00@dbģjG|rŪOcV,Xf ˶Maʧa~dw T,*;ur/Uf;fwvC校0J纄ţ:&f{퇽"@2m"y?;s 1@i 掻\ެy]$r{KK·z{8+e LL +QM̀7c 0dmtץ=XgxֶRa 0r a 000D%HB=3Чb"-IqoX^9nN|9F?<:Oh3yb* 0@GȁQj@a eB@E׿'@IC90LJr٢msla3v |c\+To1MohpR .Uk_ƓjaxOa9gls-̵X "=?8Lu4e11nݞ^~IK?cϋw777x0/W)}>qrCa ݗM3ξq'a 0#ȁ#X0@a ܁ Z Y%dAc"")gkԷ$A_M|#ax@>1csWvnW_K:C$v 'FinKJg/=F' CAQA3VCa|=>Jnon}b}ߺm3_IwW?쁻V^|ekJ U?)6x\8Oo1};=]u߲'[cߺ~ a 0 @R2. 0@/Ā$rB]OBWiKq; cX2-ނYN t]PeAy[1^S7p11.q?qH8ms{a'~![kMXWZai5~SFZs*n}^'xl=~rn_Gw͗=P'9w;v2W{$yVܑ[MIc=zo#@a @T&0@a3`ѫ YM%`1rbS6ǨM ƑXx=3׸/ ("h$[;`$E_cɳM8z)%bf]F>7FXxC8q>k`= X7^]$p=l.R8>9e{ɚ 8=}+{a 0 @eoFc/ 0@fb Ѽ1ʝ\C bۺ nYs4QoUݽ=㱈H!q0x\ףxda̟n!RGp=f x +WusT/%1\=y}6Lz߫;GJX[ָ\+ZU/_oA{WyҺR a 0g *_~`a 0>@0Eb8 {\]͎-I wE=w>\8~ V {-ؗ|W3nhs,"{[t8Q|E^8_-uf,rqbwrlλ rVV5eU}CweoYvكU߂"{r\\qQ]H=A%{Ia 0@xgrΫa 0@.<1q]hj[6 z:[ ~/ui5h MZDC܌7c= >̣{v̟}{1'թWuxNqqn;>:FEի]ܱ٫س+gJo?V?oձۜhckpZw!cuǞh/ : Tymꯜ&*72<5[0;>|6`WYG}=7ܗ^W{8㮂{q2@5w@a ȁu|eta 0ފCҨ# łѱOZw޵Ŀb߽`_ߞ$a*0yC՘{UMo_puTH}y5l[^3Xppaoʖ9&(.w+Cgp, 0@xar‹ha 0@."!M Qqy6۫C_G9W忢s1*/S0?~IΉkr[m$l[fƘ';Ѷgv7a\V{aSR8?<}e9\4<]z(ץw HjwUrb>xۈA#FSflaY1PfvL#Wv?is4k?XQ>lS͵400@a0# 0@k, HY$ǪӗKE aA!4yeD[עߕ7%Vq|9#:rJƁ=6$w|.u0$&R_ :0 _79ʫ_X,_{!m$l*_CXɜ]\eo~zo*|UքCj+g_gڳO;TxCV {w2~ P@a_a *J'0@ac`{m]xM8]T+UwY_jg*מq Dt`UMK[tlί2}742cQ$Z^WS;}3rݻW̳W@IDAT?c*Acyvzz}\a 017[ a 0^ X#G"p،4#D'c }}W6qqDbǠx*YIJmWTfj|u m<@b0NZ `w|]5փ cD&[xUY/UE4TY֡JWq"|3]SՏ1Kq?)= 0n$#&xJ+{~n5Fϝ*nX{gtjUZo5Ei}K}". :qG.w͍W\k\{aN1mW0@aȁI0@a XdQw4f8G'Jk°.M,⁘q#Ȧ(S[u?+χm=F:L<ڷyoյ7i;\;kaId~-A̓{c.}z9s;*gM_vm-^Ϻ&˒, 2g^?{#_|Q tWTFcf555M͠0@aȁ/aa 0 X!d|?IQa*4Z(a#K.DNx Џbn)M096N=1¥x1ARG,q'eҏ+~_I{gW{8giݘm\S<1 K/RLWk~>#OwlANWo' [7jc_ȧg'0_KWO.wkm?g)u>_@?{ol[U/( ҉"$TJSTRIoN-F$*DEil(;~Ϟ:c}޵g?g̵:cVNȌnn5=hEs0}@!PC*[f%q!P@!PFgPvQq9Z[ \31$cqQ+;Bd |N ϐjc 886X-v>q3yhg.:u[#HC5~^t (xf9מnS@_s㐾t-3e]гu`AH|r@eV`E=[ú$Bۚ1jvq$wGLrEҀ5|l˺6RNbG }P؉яGgtB( BT@e[/ B( B`F9LcΧpQpȲwCJeGi 笫SΪ&[6=&Y]B4)3)[>܃p53a8C"z r7/j&l֌]޶ zP: dQDήic72e͗6ț_ֲZ.{צ2Eutwj^Fvi˅>ڢB;^cy۟1A[K.Z$>b~>gToiKVsG^Sԕ9n( B(.Pٺ+ B( BX38xp(8 s}SѳówICiU&;ӑO%kMU66\.'@؎ T lOM_eB6a9=f-yn㹼>I4eNjcuH m0<ťOzֱ Hhf:Ҷ|nu԰0ݵbAF6DOl2fd{8 uۆ&AW8>H8ciX1e|s+=qcSL@ &J^aV( B(.Pٺ+ B( BXr`c&EI8Ir>ˌU_Jϻo+;9N-#K^t҄5~8¯mv9dF!i m+= Me=/<}ߠ}o=h ZQ%ʒX϶xig@udL-s{>,GǼ]m;uEhxdQW` A6@1 ῑs{<Saٮ+2H;q.⻼Zw[ozjXjm]ruZwe5gI( B( @* a( B( A@NdgVnߛd̑ nщ _dy:px5f+k d߇mT^"n"5c<[,&Mv}4L+{Zct^x{̷@ [6HفDznjKzS_::_ISϣ6kBXh-HA6%R;oحú6,~ne< ^0ffkmR!P@!Pl_*}m[@!P@!*HZ$I$;&]zvʽ;pX gWvA*pnM8h҇uXn轗\C`LR=r -1^Mp5YF$BY!l#Y~vJp 4n_Bi;!biĦͺQJ "}z8XvŮŧ'ɚ>Cc5APv?fm,EJ<))>}$sFR!P@!Plo*[@!P@!0reT=aN+x{k)y H&jˤiL=Fɀq8T9("7δ rAbɀ2GA(۹˚\Bvhl#L9oZh6\"o#vxW1X.yʼ6N 2ע!>P33{"Y W8}x]_kݍ~63[,^aL^( B( F*x+ B( B`";C '1vKQO헚;zjreڇhk091p %66=&=v w(y<2㣢l;=&E2Qm~댝պ4+ B( ,mJB( B( B0:9V"Cr͊_vO97fDMO1s#oC4-P&IU$3S&M}T9F.$]VÂ~ :nvR!t-׫+?7d=1v:P\g<-Rwz|`mûETAxE`s&Zo@$^!WDO4ik9zhVYBqKx9Z}@!P,,,Z@!P@!Pl3A-;pY Ǭ3Iy>ۂup9:h?6 ]|`oRS^]unG X3|Hv#;;3}[DkBv':i'zi]7zCaO5Ckcԗ!(Ȟ4a{~`%.8WiVD8,FR!P@!P ϢV@!PBr8vLSGd1\\:\xx 9Sm9ls5v$X@!P "V@!PCask8zs#9;{1Q#qf:|([aDڰ I\8N`Gy̼scov$"I腛׺DAXϒSn@3xTDѡ9:597@eYؙe-bn`Fyxtm&/2kVJX>@ԔgRDÐf/:[׏Z)͕$tbHc|\fٶccл;X8V*@!P1-@!P@!Pl;\}vȅ3οA'&q'RRmGyErAdu3[c<9LE~z,umiK`#B[#5H(+^r޷v2ꌱ.lRޯf=.!dSצ9_LA#06'Myvr?t^{m i3~=i^;щ=N|$Ti |߱= k4ۊ4}ؽa'WqH]}W9ߛ _@!PC*ïf@!P@!#SHΠ(rx5֎6+aY3Oڜ( K[d#+egs.z`Ia-Q6c]N8#"yeu9f̘|H׆:/|f~3~]NrJ=Y\9Y `Z)G7c x J.lKOe!ԃ:iG8+$!cPYk;S/cy0}u8^̣A"IYWBqŚ$|d;ƛ;te4v"#znC9dh^q V@'˼a^fPstv2as놲SmT{40Rx[Ƚ~L~+ĶQJ >Ʌ)-$O#j^3ڲ\M_u-2ms ~C_ d]{s :Y7l[#ٚV@!P>P7-}=|E>{\@!P@!PK( !5r5V .p%zav{_ gӍmuqn7 Mc6"ܱcҞ^C9-P?oVe.9oJʹlgց6of56ZgPYη1fƛ87BD\՜wsk>Eyʹβ,> ~dpv{NcnvAYzזlkR B( B`g*nc7NM7c〃oo!P@!P@h'j/SsdG|O&'WܫiEyŽ_}ɯL!$r ތ-'@۫j;IPF?}r!:(>}{wpfyl?~w~{wm)mܞo.Һ( B(U䌊a3j>(r^ 'XOeZ0rK̕{8ŞGĉs 8%_d ub!onf&Yre֛q1q&$YVnzQ| ZCY&̩6%Ch'65la9 ֡qY'c0V f1/pǺm}W B( B(#V>iq6;y]Nuu=c΁9+;LL.;y}'9I2 lXf?ʋ8[33ۆyLV̻!_qxNsCn-gSr|.u4lk<c,Mn[jO( s,ʑ,ӨVy@C lLj۱ۮx8ɘ#Z:S?k#jЌCǴ\( BGҏnq#O;{s1ډB;AEC[nE}S-hF#nã<#vq Qbr. _BT, B( }U !):唸➌{="<-"ٸt#ay9 6此{Z"_gyM_x4y|ckMǼ6rB{Opݿ2J߶&i xd}sٸ:X:׹ir}/c l`1lvۿ=v9ǪӲ,!Bt{R+v4΍KݬB:Gj. Y}Q( BW;Th#%= OЎ;pnIw])PH7<\Qn9lEd+_[h#> \ctey$hzK{B( B`"ew83?_F((x(W^yeww\sMe,]bLҺyƁg>i^җu+G~]tE⢛U@!P@!PluF]qcgNs{GtV21<st#0' OOe|#ݛ&yJ@!P@!P,p=0Qf\b,<37>Z8q skr<}d%ks6j eb[8Xu;qd{Js_9|>}Xgf'wrPQ}S\}6n,-R;  *|{r캿30҈As={#w?CwWh /?n\7!J&׾xطnK.`1( B( B`~G9G\\o:]v P_˵fwGs\5V lhPDa^ Gˣq'Ad])o^]kҩa=k%yQReEH;zѪ5pMn? eN !Fj} /ZztDUp+hVcvj0{}\fvy` A^km#8y'ôNw@ϟJE( BXvvaH3E9Ѓ=!>w_|ލrBf<6m䜮%'AS)l6;.kHmkFl~=dh8{-y-߃6j0~C/tp^+eBv1jϹme u%CvD9 eшy:N|=B( B`";TJ I ;S뮻tA׍ ~r-jӟ{[ޢP9xO~ݍ7ިlۖn͜oCZnkCw)_l[ KB( B`ux%|m纜N7~;j}z^O.·<3YNg]G6p尜GqLU s'g1:=.RNCh$Rв {p=+F8i5s.3i9,4D. ۛ~IIm[9ηCg gz*wswwaLdn:^qAZ/*YB( B`X _駟ޝ}rt_{zO~]W.t@Գ!଄4x|=.ܠ|+hrgu]}{S<N;OW¯7jx??_n԰7u؛~[oMoK5?\kR!P@!Pl+vȌ98[:_󙻑2eOdhDܓژ7ϔ儏dl䉹t[ $ڬDbm-X$I3@u;b7Q4o $gmtn=+]Z6ց\n[Kn>'AC;}.WQV~7h^lGgRz6Mֵl]ӹAIX4XeX2̢ m8lGg7 h1oR"LT@!PlG2…u1悌O~rw衇jG?=s'<;^t=ps-vȰzTj N{'?OC]ve P>ꨣodVʳ<#{t]Z/7Gu{7,{d#aOؒrB( B?vw|˖4qRi7KZ48̋\Xndf#t3Ccu>\o6dIk7Sm"7-歶N9 G$wef8esݺ љYV^@!PlE.E]$gqg y΁{5j;8;v Y|;g.r#w!u/9 rz /9Y5~Kƣ;vmUBЊ9Fn oҎ?x`G9nN4cf?9r]ι˖qrXF`2DA8s'yFֳ#dFU-;əz?o A9r|clsrur_#yyj˦Y[-B?xr>iͪ?*`a#R8לh1N5usy =ilE(G2vnj j?ֻvR9>/;9x G?zD]Q@!PB"qߔǔI',i|sQg|内ep=4c]7sM=SmR4f/ڒt"%Gͣ mIrd@mvamKYc#3feC}-qכּ(9ߧTKЖl/c46r0!\f$йFC}<5|H iI i_ǂi/Q'!㨤ꏏ_̹;/iY@!Pl * <;P^W).& PcF09 ?)[ >NrޱAnЁ =8yW&}X69A!d5N~MMY^}[ȬV[_M*3jv12cx*A+֚&cєSRSoC&[ܰª7{ǚ`ܟʹrkB|di4kĹ(Aה4K B( C`Ї>}K_R@wk@;K;ONp5LYpXui=;餓ja ܀.A[%挹Ƕy2 <#rCU_Ɣn#x 0Ǝ!e~ c xMU@!PkEk;r!ס9Fy 9**Y֞*f}hӿ$Hkv aerB]-@= /y^}9 :A`\V/.IƟ>( ]&^w zLb.>#6qe:ɳ^a[;^a'`h26~ʘ4C_ŊIhDƌ`ux7^ NdyZut盜n%ﭩB( B` 0.ػv._jNjU#^Wh?q@g?ǂ=΄E|.3`Ho~ϓO>{K_ڝ}z 3 /(2w#vNGz8ѷGcɍ&;,x7”ɱ/"PG XT@!PH\3N;fs9L򽂇kCG$X4>wZnj&c{h[)#W9BV 4%O[ذ8q 4K;] ngk{ >;dYl}'3i/>?د7OyvM*g1^ ۆhlqr?.ӗ4hFF5iW@5ʃy(6 L^档4OqB vr1 eӬ( B.,D@'8mv~._z17,8y4NpM7}}}>y󟯝*>_ԡ8H5yMԧ>U (^|𶷽MW<|#Г~Jhl1BO @ JK>W2>- Zd/$x kiz/*%N!P@!0/i1"{.D<2oݾqu;Y-pvBx8w߬Yҵ˸eܝeGOQGcZzeڻ:~(iCӟv/hom|akchtpf>ȉ~d]rkhvdccZǤ6gzZo} $L2Ic".{h{VW0&˨s)ȼXs[s<;%igXBÏSru[VB( B`".H|"4lwr`["!ilX}Yl< Omdfth|r4'rkL&襵46蓄fd㏲ ckv M/Q >goU/ B(PS>Q_dTw]N"}{g /'Gww|#鮻?vw_+{lw'v~n%A=!レ+ ]='}#y@IDATh®QxaE]}% 4æ_D{8ޅ&K z# zcuv%0Ic6nܠ vzԣCwtDFvN cJc6Rů( B`LrLjƓk$ '%>hW m n;ʚ#q#ȩ=RٓB~1BG)'oB&:=j67ˇM$wrD4G|d1c<g>YgJk&C)qKr$ ]7v}c@_3qG$wb@i<j߅yIPpfn>D zGQNߤO_Ix_#x=CgdE榟j.4ctd^Ũ> B( B`lz@G7;SN=T0 [V78qK}y;Sp6sc'|&dU{w0E p cl״yCӆ1}iQX{Y.UXȕ:7tM!~4mp/ B( P!x£p8}ӻR$=+zxC2x8q Oӿ[]pq/;(k^㜿owqI<.G!㾘dtIK^NR}wwݰ`NqzLb vƖ$\0a umCudةn,E F*@N/veBJ@!PvGkt-\띨pP`̨*&[ c}s(d$ *{~c7IOl9yfP0]Hym2d< =ץ9kzF-ʹ' `HClEiy8_MIO]SGysA'?zٓ_=IdyKʜܸI}ܲLI8]!ez&y143kzsR>c:G0k\w?;?]rUk0l>z|hMư.n>G7DӹcYN^KyQzK2,MYɲ;1z53]k'yn^[ʮÌ0-2CjCü<6rPL`N ơ34>tW6vsO;O7O>Ht=~( x˓yYבq$c<-#wڲ]-97lOl &DAlZaƛ& c9v7E }E~ZB.;w*#2ง6]8rb6C YӼXKN w\wuw|[%.pƙN0?^7޹G?Z|rijI8yΝ;e}sr?g`˝?7]wm!93g=Y ==у6UГyC+P@  p#.NA:(rrNJ "1x Oas1d=)Yr'8{δ6*wZFɵ|l0i*tZړ=pCzm|78oݕ@!PsC`S*hcB(ZcqF:7tS'ۿro.WAUz~/yuxߨ]r'4Z.8yutB~6= j R$!-ٙS4VG9;&` 3@ ?z4~n8B`D+v# 8Q'v==,$D|`#8BAl;^~Dzz߮ щ u/\pd"(,"vUWww^ @:1 /`T[ns;wj}e7}CxtANhg;{`,k@ \+&% ;N8؆ Η&dY*/ B|pkL\$U}r>ƮAC'qqW֐:Txtgғr]4g5m`"ҤYN$7Xz8[GXf7h^`luk9~Nҳe&z=66fBۂ/pE 0N'Occ6sEhIX6R?]{򾖌qh].+X1˦m[3ZɣuߟbV( BPɅЉ '8p# ṃ};;zT}]vYo|DV8u]Qϻ+pҏ3z8ґ8qE."K_Ra^Z އ>P`gW l-u£ ^؅wxN^[_^ю !(Mk!@;) x"AÁk_ZN:~E6<&D z |Z[r&LC@ x,ACx#X6 B( B`*8qxA/uA y/1]s=(qJG-FΣpG@a.]8c A322~SO=UgK/TYu7qy}ܔ m'=#<O~xDgW __>Okv:s;5uD ! 8ဏA@`kb9Mc>ţúeG0菺TȀ>FLK>{ӟ?c 4pDwmƫoq&e?5y꫺7:Bg֤&/|:tɰۍmkLƁu !c?>G>+c&J@!P!.8qV>cp̉7v$&8qRSs:';r s%Þ tΝrڱc,<3S>xką~xdq~n8>V&I`Üm1 5sT H&l:NP;uv?83B0~dc}WuGA e?[G8lvcA@Ǎs@:A69˗%Zk 蓠2'Z&̥\#@0#dܵk#nWù Yѕ8db`fG/8yJэ6WXv)oy[3/}B( >qGF: |z\FntʑuCddw1Z{nKChf7mև|iWYt(CZL;Gg79Y˹)aupR`٨XbϥZ_bSDѥR!P@!0o6=/q 8 p1wwM-Vfᢊ1x߯]\\7t*8A88qAWNl{px䗝o^p|P!PЬ4zbp%_.x cI < ox{EЌGx]v]؋GAy61^8`N~^sNc,A!>]|WDz. ~C;IXw`ch9h^Mʼn`lpn k /X(dx ݏ8C@--ԧ:KۏcWjGPdZ^ ZTK9g4U30rۓ>)Q:>zAdNC[3m T@!P,PYzUW)k׮sϕS&S.N0D}3m_.un6 qpc2{޾/w#D_'H}bk'nslg7}2ew0 A.7vDЄ vY\p>Т-'d'wKbWg=;Q'*Hcx,24ȁ?|aGʴv+b]2q^"a;|a'KghϳNI#e@i( B`[F} !_0uC49%!?zh C"&h٬u82㏉yF|kegzkXy$[k);Mjsߢ͑.s;k5'3c򼕖MoLt H!$I]ete'sV3F)AN(]?jPFEt1~,c杼v-˒;o~!P@!6="~u}~O$.8-;Qî?{ ,(o-8rȱ}a4ӛw A'mlG0F!'v29(|]uzXK2!;+<N>d$Q`ˮ yd'HcVI<Ln pZn${k-2tҎiB@|YnaQGս/>^g+Yy~ B( R_obʩ qؘ8z8nnD攙e-e}$EMe(Yܦ2:S)GF.Xيy)Znݾ|G d^<Z8CY4ZW(>.=61dKs>O1?_3{p4yb{nmKfϡf>˺yg—qۃi\Zk$7kٿok}on*@!PD`* G?=wGq~v-8R7;q%^jN_㬮Vڙ G=;=%eO";#׳Gx}CtPfg[ΦлKz ~docN7v!^λB^*ȷs ./T@^ezCަ{mV2l{9XNy0|tOꖛoYI2V[!P _79rr󜨨n}Qe˓e5lLސ1|\)c6d}3~ doq]|>^6f9+iXnV:놾ޡ9O`A;Z_rd쌛,涊1!\J@!P@!w6=M7ꫮ{a5l=}|;Iػzk':$ysAM*1vJ&?vLñIQvf0'֔?#=#k 9oY:wN@[aZZ3{ ܌>#+;Nxg=K;餓n\q"ewjb.k}ז}NԎ}#~e'I9=C"6ۘۇfVG. l''OGFvue{,shsh'濩z+KyʹeKGC8jq}*פ,hnC='el7q~5@!PPAnuc}s9GK뮼J aGo4[A7 8kqF#CNx3Wz}~ίqDdz#\q%yD!ƌǽakv1WkI:!=7Ѕ/>5]Y;8yզiΟa# _<yxԕCwi-7c1_kSdVB2?K_ROoH{"ntajڼ- #Lכ;[$cA 7DׅP(Uyk)erU{߷5fB}2e1av}Mjҫ( B`!*\p^| E/u=Nw?r}kzW>19J8yw>|c#1Mrn 9sȤ?Ndp);)4ajYEsPǶp{?wvDTtؓf:h&@r ;.g,ozӛdI2_lu[/qL :y~Ơ+Yym{D".{`H3;Bnta4ۻxN>'b^ÓB(\| !_gmbe;*FcQHB9>4lEzjy0g^FHl1qd;~X#HFJ܃*%;2~s_G!BLxO9c|Ž7,~Mwᙵil=oc4{ʫ9l߷]PmωvC#89Cks:tUNyI ۷3ƦI( B`A`!* Cu~p7d/Rw{XZhfA=As'-co'X 9qZΔoY+>OtnIᅘ9z"lcSN9EЀYvڥpUW]C877|C5A``'p˭vx M >Mf_GkgȂ%sn 0` p1X;=z\ݐ&A>h5x5px!.3LgJ#76UWڦavN&E*/ B\|=*W#/ΙKG 4U|+$2FvqXYrT<Ё>j'lpj`԰^7{<ۆyHe#g}~ tQSzG[oSV.Gs㭧e[0¯[!E'Nj#e\Ě?ך,fs[./ХulN8,z>fװH]Cv~k,6AWmhESO @!PS,L@Թhs1??q{TPL~auGyTS(1m8qS\pLU@%vPƁOv P⠆>i_Wԧ>!RՌRoFD/9~'v߽]v`J8xAC/ztZ=wܩ5 k)wx&pGHԑǽ׺SG|ּS:m.7Q[I9 љyumIGyԣ]r%(7:q|ɚGP"tc42`>{U#S裏|M\xtprcGΘJ@!P|ZV\\'1z;zZmzXvZu{EK?e'قk<>Yy|Ոey7LCc8o8gE-^]nsңyFuty?t0<%aCݖ3G˜w¡X9Au3q}-r1H޳[X_ڮmQPm$sr9M Pb݈>5IZ( B`A`ἇ84qP/ywiɹ̯;Z:K%\fu;x>;wv]ve v`Cltg7sၣ_谦7 8?2<s}+o}x@i ч)^ȌlaWs 't'|:vBw!C ʼZO?:}`ZAO] 7wx:qG>'} bM{z6E~+hLB( }qG.ËʑnףaYn;,9JR`@6%r]:1<My^n>ef^rKe&'U7{ԓ=({sn[m. dFyːNk_cȡ [.S8 ۆ1q g C$ݾWf5`.?7>rTl3_d Zc }svڜhYD B( 0^*?)'8q2x;H4YiDvaK0'3sG-'Rp:ENx;w wv&熕GRgww` ޝr饗NOx 矯GN|v;Vc擟 mpӾk.=M/\97j<w@}{Y4 K_Rx:A>t` <)?F`u{U㼧9{S?Govu~ lB?6$vSH@@Sa ?&t&xZ'? zꩲ)1˅`@&< X9l#ƻ8 }Cvܩ]tlĨb!P6FkGN|4!iLg/U}-ȇdE$̎b0tqX9=G jߌ[,X[/{ңF0I6z)kLkH`Z;Fgl0m6/ZIy/vƹck=&#drY3/`y`f~WB( MdIjp 7)E$Tߴ rsh&HN1iB@ؿP'(L >4Ҟ/??lX#D`D 9,aX);1\k`+cy=nËbd1쩯_įnt-ŞaQ=+6?tu]7k[ύ7I|+>졁!6c+!x;Ba I7 a+Qy+^wpwlw]c(HVqoo}[ΐmwRu8tɴWU(2wX/+$Hp~s 'peP.$9$HF]?x@!P)0!WӵOש~S{3‡nD靼{Vi!~=~w,Fʡδ B(."""\|CD0'   (s&A/~uO`w 5U5{S>$52?D„s~ z7v[$txW\X;;|3buF2$y.dD6zi@+{~H-!ϣ,fjP$._J aEc~ IӏDߑ>7.yĜ\87y>cӕ7yt%/Ga`N" L|+܉B},e1DQ+OՅ@!Ptfp@z ,5:mjFbL_ϚOlNlh%[vZ-&rDG˅b+w{1TwPĦ+(:9Q'~Ƶu =V_^`];~)zw% "k6͑OhI^5O/52֮ wmr}6p OLetT[2>S]Է=8&rB( J;"_"Gf-͋ 5s9,Oǫ< (7]w](I.68 ,b]IRpG"9]L#ps ;#mARk2?ţ'䈄+/Q,NW{hmmV-8 ';?O Z~y72Q+zRzOk4qdgik/<IG"m9]?\~g4D]d'eƪ.SB k:6>M~di,ޓ>i{(<|5b{іutV愮ֆ=8(~N@IDATB( `0^`5p{a볳W%! $ X;' O5%}_x_x=o֘ǝJ_s`"q3S56aA{l3xN#d!yC71 LD'~iPs76!f|]Np0` !Ҝ,3cX'*ا~sW Kky|]Y$/M&s1OYGl;weR@!Pluה&tmNFVG@Wc׿ˆaC\mV&BOm]E4}~Bw^Ew>b/ 0W(xq׿Wmw{]Ϡ1SC>q,/c~7|ϐP:SЏ}1c:~ӹߩb%Յ@!Psy:`[+@u2(N $珜Z͏171,tQF6dG~ !:Hv!P3:8ƚK$H\p ?$Q5pY1;['>~k )9L;0o%I|H-2G?đz߿~nX@!PI:ѯ^zmVk3uX;=b^ؿ+{09ugwR +>~I˱>Su󺮛w鮝>}a0'gC9;5vccQʱvڿ?vöЗGߏ*—&u0?yڅ@!P P•/k.7(G M~$q,'1smQa{ yґmsβuܙOrc0Ny}Ԃ,<oN3wj,q'f6q|loQ\co<7~:M}'!?|ߏw  6;а:.f`L%[p,GT) B\ʥk]yAV^!nq?x@pD57!qc#$ΧLJB |̟=ڪLe5s)>vǮlk8ƠO%D9@!P@떅@PlgNL5qNxNhoI1dEA9&=%L!7D~7So_YM^sSzF9Y􏺡iF>y|q屿z7iir}>umVևu1*FGںCz#˰|=5#X$d*W}E8sKyyS+.pVu/KIקMd^ʦm2}[B( *f;!״G(cH/L"X qS'QSv@>}栏C\ȣ\Q#9L耟w \y_Cc~l ~e->qx) /E3Aa>QǺacNȹ3>Gb ܴw9<>?7p> B(*pP.ڇf; Pu*BK<.Nsž4mQ'VRh`B!u3ooCLC${1gh%6HRX+zo15i<}hcua}Xok"pJj b_ώ~/_E@ }ցb6VoFp=ei~$%+e~u8cΡmNu9~Zl3R_Źڶv&Ns;wOjo/ B8,⅌c rt%{xSs>/>E00\IVO3|u'xNcxӞ@CP=^ /'>񉱷HX|?w}!o{oo[v=я^=Y|_ 6~;joo]|$OHr<[Ww߾馛& [җ40>I7/_}I|E/zQ$XgBB _ G>DU B( ou5ǐ;Ϣ0)8z8`Wh?}v7YZqH[7 ٕd46][ki+z# /ʵׅiA֞[5nhwnsŪbqF6C6&}}FGuc2,ǿQ<26:Y\i4VS8z|FՏUmos 3i8ɾzObXk_;[ŕ\N>_u!PE` +_B ׽u-~4-\ /re=pX<4U.?/G2#YSX|3 {{^,_~#'#(I\{qI:)I4{o$9GLr77 ~g=ko!OyS"8$3߄NdpB;;_<ܭA  $oŹ~0@/~N.;zb}.$,^ۿH` MI ;L'l8y !s\J…[[%dO7VB( B0pXW5KhF%mnmm叽umCe)PO[zS;O rB |+eG={Fř ebmf(n oM|G^xm"jF~0߱Lj'뽪|tnOiYme1am~KE[#iBMqzeI^*scV~7(U[8)?'/=@!PE`' ~P~k^D0 +X 4: @<@5`mĝ) x-/{UַFn!.|!Id |'K!plFqd6j?Ag]Lg=S> (ñN'Y[-%?wG ȃ\gg~h9C?m O[ #C@?,t` xF2?I>A'0ޖb8$TKÄ@B_M?쳃lf=\rG؟_R(-XU}1`fiIF=ٌ}]?*ZGk¢9`|w=9GqUo 8o-9ҕsܙK^ qԹ7cs-=3j}NwP@h=+e--bgQ@!vP!I*I.˿˸%j bꞿ/ rgDSy$X_%ś+5 ֚`v/IH!8IP-&K:AkpUpcU6 c@u$@ u&Ay֌dXg֝! MǞCk#xL';{;=1#[z{},F?.9^NH`3?p$)1bNQ&5G&d)'+$=8o._gery`ne>&k~'w$:{뱢B0֎TY{N4@!Pg$Tp=ֹrW͋|yl\)_W#|+w܉׿>?c?RBܟɟ\q"6<yzk@B1xn `/~) }{#?aw8`3\z?H/mHNEdq 7D`yyo1c!1ǧ?;<&NH'Z99%y1UlaQHѣyG $ (ߩ>- 17m'ŝb|3c.{TcNtekA7: $|C軷%u,fF'1 &&]Lְn?uu]s~B( B 5 1gʈخo8Y4α|(kv!kcg|1mg8]~v9Zcd`7dd֍{d?[ 1[Σv89v3ڛCWDfy#ex͞3c-dW KCBM3 i@dC:ч>gIm5AŽ,`K6;#DLv`~ ª6G!Pg$T@ t'?H~;߹;#KpOO/^ǏI& K4ƸK;K8GYh~ c`_'B†]h<2zt=- xrwA_  LbyvUg ֏}F2`bڃ/~1u$+{GjQ/؇'ˡ?q|%?@6.$-vJĹ֣l/h>*k2v@1–9svr]Nj!'{Z>gنl^{ة|}<&2\/~fvѐ6$j f}~1&qw2<ʔudr]3$lQފ}گzrCp+vLbt>2KzWl~l(mh}~m( B6;K }Ɋg?x"4)[n%=}o^ox+^ox*ȀW:"}kmS?S1$F~y7:(#A L_ӟ3D A\z?2G'W sFO YցG!Ij=w?b҄@?ho7FSxCy$Nd@#y$Hl&A$y@fi$rZby'@~Nwy,.j8&Al#qBA/IF܍MQ qM7waCmɸ=w9-$QN> OSUK,J!P@!pryHGhkSڷ됝4G8|Nd,⊟ᡯmsqy냁G}¦={`۾DkuDN_"m9k9Gg_3xfz͚n$$2ڤ5io`_D5μ'T^ }qʲUT m@#3ڍϚձb2EqN161a>C cJhG!Pi#?l^E|eǝ`Ip7 "aAB;: z^`MK4c[ 'KM>92+}ލB;Ms w0FDzf桇;/H{/ L'؎S Z ZHM@tX{l<3{6DYD&Cj5c`9OHPא Ga =~G|˗/ǻVH@!mC&&ݚ9l,l<$6`]0CdPsͺ/?shÇDF&B…qYI@!PFk&׾\h'M^+8&IjeRkD8Wұq?tԃ={KҸ|v}Fߤ닸w_n>kMx#9isy,YuV11Hu3nwt~c5vO 8Bo hwÈߩgWWF|ϴ9;*-w-9M;cꤽ<BvpEA`e/tXg>:4o JqO~(( N*~@|?I =/E(cA3c 5ajuAB_3G> B`-lvxы^G|.lA6.^DΝpˡ 7eUڵch\#9Aww #X/ ;Ś{7CRⳟlEA^jq51>82؃<|w $(@!PD ZMz]bp0Ywtk6O b#ލB(h[֛ԋz#}ut/HvlcvΦjuX\΋VѼ5㘵YKV1ַ>yK<'cm\ ؖLʕ'-R:YY@;o9Ck O%hUj)g,Vcy1s9RQ@!Pl%TN˿*} qwРpC`*e` ظk#{Sx iM0Hp thQ"9MCy\F &RiH&pGkGB2: 5I/ţH<9ω) $z2R͜¾aO uK}od9ܱ& w:^lNя0IA7v#r{ ?#HH ,YC t|1I ?21$ $Lf9꨺( B8.\6SsPq 虿1F` |1w٠3]g?mEK'ym쓹e,/f;HN !˿wA'ۧ68w賲7QOza 1_sŜs ~#0έv|Ƒ3 }Q['#𡜨ێo;rN聿ZC%9Ypv|A ߛRұ'hMwe?Xύm-CgF`8m5~cY|T) B`4O|2> }^Y_&_s!ᮁ/|qyw p%`Ed)/BG/GEp#y}&XNo;bw{ToƜʠ𾻽Sŋ'eJW9Hp=:;3ֈD+>GD |ڠOsG ?C^/[u<9W6$j/co!#g.Ill r)! LJFFj5$_W&$z }O/W薆J|CyI|"al |_Q@!Pl M\(^y3GGH:slW>!YF_~>_X#lޑ_j5 מ'?0X̅ٚMf'|8EJqI+\Kl.~ONk\ȗG[Ou41ڿwVAo-t&Ngz]ԉܟN:wNžm{ƵNeέm=g6Lt1lu8߶+O!!KY/6/$ CO~n}$s$U<&`__*3_t"_fjoE#$XgV& 0>םy$3`BG'~`LI/:H`a\3~j rl*,[>|eJk7ldo>#3dAۨI`{։d0./4a ra}ar~SB( BpPs8<м&e)uɭSS0_٬' _!ֲ}Yg-';OĀDZ??rB &;uXDlK6e bd;5x`r8Fb`Nێ-g&&XS_Og =}4N8[&݈VHOZ? miU] VҨ1P3Ȥg̛ێo{m vڲZsK}csa#_ #j@!Pl$T/馛" #AⁿR'h~ppq-,Fr4//1v+yZ/_[#7iO}*3<&.zHW˅OЛ@3w#U׾64pAl؎n`F{H@yk^H`ٟMp旷$ ǜ3}17Ƹ8y(ٗi΃?ӝO=-5,uhuu7:_~㗖d7SlU( B\6ye-]αrBg͡U2eg1v}rǂ6cGdbNk?Rs?6 ԍNJаthE(_JsA`zc˩K|tHڵ:|`ͺ/ҏ[OC;vִ+}u# ީ &aRcNe쫬ގ5]iכv68ks\i\y5V(c?j_yq8Qؔ&I~js@]J!PIB 4ҝ-HIA_w<1o{",D$?ƈe܍BDb.ylcQ_" ]4_s t#ww}cA2;S-#Gʺ)Wα>L欛w٣37nmn.\'@!PȿhsF*myKz9MA $cڨ^$͖\qΗWRk'uxy.eNtǣtuwv:z.bqW6NM"M]R*fBƜ,mѤP7IF]`a~sϴ1pco®!olc 7=σCZg5ئ;^?;(b ;HoumG;tYm-/5,In]4:/,ʡc6J!P!p7ԿyUr#xi; "㙸p38q@Kd 1럹|lO|"ŝ(<ɝwh{" xI$>H`Sx"C"Čzx,s >,^{_"C J!P@!PFt9GGa=er7R+|YQ> !M*~F=hm:)7?H¬wnF#H"a턊טqׄu=d5sg-߉:C&~>{)ni;,ImHϴ]x{#9y|8OhwgsմǢ'y}3t?,~έJ!PC`' `AB;bnG<ӏ.f[( B( BD`!4QmdԷ ٮ:oS:rkĶ1}G-FCYrTa~ۮ_J.i_Oi#7hxs]GK~{ڥ9N/ڍV+3N;ѩ3,\i3Ow6{s;e|eL PxZ1A$} L'o rP8ce͡}5_v vBK:uvtx)z~flwvX絢.u6K>grͥv [}٦lcoFߒO4ƠU) B(ޭGU@!P@!P@!ph , ielo֩lh|O8m>Џ+F&:Y!fEd \A 'Ʋmg< ,ϔްSeJ;.y8w\C/fmL6v%34ӗ0Q=wbKpI9tZ؅Mi= ϊm>qxrq &˃ťvPLajh_:+ˬfl̴,g2ֳeGyVC~!YPxՅ@!P\TBj^( B( B`>e8d)e/'= zru~ Sj6]K`BMϲMr<%~eߴk+'Jcq}E;;g\vY}CcY4F}]܏cm5_qģѶ]IfLơ}12=Rgz'M>O]i Zg:.P옶GbUOqm &{`< *#o Cǒ'0QXU@!pU!P jB( B( Fqr2>z-"2Qws+@nx&-wL?kabe{¹mVf;G_igDOIg)# oyqlkPk{&_ ïK+֜#qڝḑ{$m>݅ΣwVyݷ씦u`-'~NQ-&NmڋYУ4{;5ĘlK.]ރ)T^@!P\L*r1׵* B( B8GF6܈҃>=|&z S؛=}rj`rÇEj/1Mk` ܄mgsO4ڬL֞}uG-.u#v;Z:ǹu3Ε5rX,%|>@a tI?5;nyo~7P[oF=.i=߶6R_s>_S$Ҏ(#F_?MnV{E2 5A91> BTB/pW@!P@!pv >A#3fFV p>'2Qs,(ڦ=ԎeLc]sb-GyDq;X?J_Iagdn8cAuf ZCL]K;1S5nO!IsځH$Bh 6fq,sljMܯ֣[i$iY6y:'`ΏZsH?*M>O_" Hx',<ȴ>b.v0w'8hSՅ@!PJRY@!P@!pu#` ! C"=8m*=02[ù!D |@ /G#-@tv:2M:6goS{0ocdW!OK%n?hݧЯq^Kv>ѯ i';hZ-_kz"6ZO6IhIucλH1ę2fNn8w$Jᙵݮ@ڦAWZ҄zGwgVh1!A0#<ҹ'mf= W2t;HZvZՅ@!P\D*rW|* B( B8hVPG` ,3YfH:s㗲,eltzԟlVXz)l@iYYֈ\ės{ɸOu]iϩ`IN8uv{n0vqh 8_<SIgCrl'cҭ7yi+ko)iRZ^ヰ6<֣z[Tl|c"{}Nzr{qפ l_8|<_ӮmCY79O$Niy9$&t)fLc-rhktmjiJȴFO~7:͇Iǎ5tOz!V) B"P V!P@!PEF`r P8>zevL3FAkQȳ:}-׹c/]m^݂߰YƊ$sm޶ z&DE }ģEGbۚ;(XTƽ5Ɏu6mSw.*u>8HInsu{ЁnJf`> r8@:HV7L:\^p< ՎYtqc3¦uïKI7in Dե=oFM B8TB/a9P@!P@!pǀAtƂE6>d icه9uc#,`mڗ6֯i Y" WꄽsѓG7d<)/+r :[/M7r;#5ec1/>o4A0s>koIDAT>4DY U`uoƭ=tֆ߇ejBeP@!P\L*r1׵* B( B8D/G#{|lu+3)71Z=^$usl;'NqنܞǸ\W>dLӱi:}?owy4}1k񱖎,i=:݄tb6FF#q`q}cЙte޹ymlG71=G}ሤJtIlh'uaj$Ov%ޝMZbNi=N۠kkEwHdǣ!AVƒ<*@!P\$*rV|) B( B*ضx (ƶIw?f. BjA*WJ@!P@!PlhhlPJҨs_\Iڣutǭq_u=a vOn;N-֌S;.f;9Wힾ} 9q7Ek?ηBe?c[c59ձ vm]1٢CX@:ش>%ϑ/h'/]{C|7XǼ6ǷQ7 l_zczQ<穎cO2lB+ BTBC!P@!P@![VB3m^iߔm9hlϒka:笛f=7o4^Iٞ9Zsɕ3&ۡߤA.|C6otm ou
 func fprintTable(w io.Writer, db []person) error {
    const header = `<html>
  <head>
    <title>Important Contacts</title>
  </head>
  <body>
    <table border=1 style="width:100%%">
      <tr><th>Name</th><th>Address</th><th>First Number</th><th>Second Number</th></tr>
`
    if _, err := fmt.Fprintf(w, header); err != nil {
        return err
    }
    for _, p := range db {
        if _, err := fmt.Fprintf(w, "      <tr><td>%s %s</td>", p.FirstName, p.FamilyName); err != nil {
            return err
        }
        if _, err := fmt.Fprintf(w, "<td>%s %s</td>", p.Address.House, p.Address.Street); err != nil {
            return err
        }
        for _, num := range p.PhoneNumbers {
            if _, err := fmt.Fprintf(w, "<td>%s</td>", num); err != nil {
                return err
            }
        }
        if _, err := fmt.Fprintf(w, "</tr>\n"); err != nil {
            return err
        }
    }
    if _, err := fmt.Fprintf(w, "    </table>\n  </body>\n</html>\n"); err != nil {
        return err
    }
    return nil
}
tfortools-0.3.0/_talks/GolangUK2017/functions.go000066400000000000000000000024221405741501200213410ustar00rootroot00000000000000// // Copyright (c) 2017 Intel Corporation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package main import "os" import "strings" import "text/template" type address struct { House string Street string PostCode string Country string } type person struct { FirstName string FamilyName string Address address PhoneNumbers []string } func main() { source := //START OMIT `{{.FirstName}} {{trim .FirstName}} {{trim .FirstName | title}} ` p := person{ FirstName : " shamrock "} funcMap := template.FuncMap{ "title": strings.Title, "trim": strings.TrimSpace, } tmpl := template.Must(template.New("table").Funcs(funcMap).Parse(source)) // HL err := tmpl.Execute(os.Stdout, p) //END OMIT if err != nil { panic(err) } } tfortools-0.3.0/_talks/GolangUK2017/go_list.html000066400000000000000000000001171405741501200213270ustar00rootroot00000000000000









  
         go list
tfortools-0.3.0/_talks/GolangUK2017/head_tail.go000066400000000000000000000033061405741501200212450ustar00rootroot00000000000000// // Copyright (c) 2017 Intel Corporation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package main import ( "os" "time" "github.com/intel/tfortools" ) type stock struct { Ticker string Name string LastTrade time.Time Current float64 High float64 Low float64 Volume int } var fictionalStocks = []stock{ {"BCOM.L", "Big Company", time.Now(), 120.23, 150.00, 119.00, 7500000}, {"SMAL.L", "Small Company", time.Date(2017, time.March, 17, 10, 59, 00, 00, time.UTC), 1.06, 1.06, 1.10, 750}, {"MEDI.L", "Medium Company", time.Date(2017, time.March, 17, 12, 23, 00, 00, time.UTC), 77.00, 75.11, 81.12, 300122}, {"PICO.L", "Tiny Corp", time.Date(2017, time.March, 16, 16, 01, 00, 00, time.UTC), 0.59, 0.57, 0.63, 155}, {"HENT.L", "Happy Enterprises", time.Date(2017, time.March, 17, 9, 45, 00, 00, time.UTC), 756.11, 600.00, 10000, 6395624278}, {"LONL.L", "Lonely Systems", time.Date(2017, time.March, 17, 13, 45, 00, 00, time.UTC), 1245.00, 1200.00, 1245.00, 19003}, } func main() { //START OMIT const script = `{{ table (head .) }}` // HL err := tfortools.OutputToTemplate(os.Stdout, "head_tail", script, fictionalStocks, nil) //END OMIT if err != nil { panic(err) } } tfortools-0.3.0/_talks/GolangUK2017/if.go000066400000000000000000000023771405741501200177400ustar00rootroot00000000000000// // Copyright (c) 2017 Intel Corporation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package main import "text/template" import "os" type address struct { House string Street string PostCode string Country string } type person struct { FirstName string FamilyName string Address address PhoneNumbers []string } func main() { source := //START OMIT `{ "phone_numbers" : [ {{- range $i, $val := .PhoneNumbers -}} {{if ne $i 0 }},{{end -}} // HL "{{$val}}" {{- end}}] } ` p := person{PhoneNumbers: []string{"11111111111", "2222222222"}} //END OMIT tmpl := template.Must(template.New("table").Parse(source)) err := tmpl.Execute(os.Stdout, p) if err != nil { panic(err) } } tfortools-0.3.0/_talks/GolangUK2017/index.go000066400000000000000000000022531405741501200204420ustar00rootroot00000000000000// // Copyright (c) 2017 Intel Corporation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package main import "text/template" import "os" type address struct { House string Street string PostCode string Country string } type person struct { FirstName string FamilyName string Address address PhoneNumbers []string } func main() { source := //START OMIT `{{index .PhoneNumbers 1}} {{index .PhoneNumbers 0}}` p := person{PhoneNumbers: []string{"11111111111", "2222222222"}} //END OMIT tmpl := template.Must(template.New("table").Parse(source)) err := tmpl.Execute(os.Stdout, p) if err != nil { panic(err) } } tfortools-0.3.0/_talks/GolangUK2017/loops.go000066400000000000000000000023051405741501200204650ustar00rootroot00000000000000// // Copyright (c) 2017 Intel Corporation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package main import "text/template" import "os" type address struct { House string Street string PostCode string Country string } type person struct { FirstName string FamilyName string Address address PhoneNumbers []string } func main() { source := //START OMIT `{{range .PhoneNumbers -}} {{.}} {{/* . refers to a slice element */}} {{end}}` p := person{ PhoneNumbers : []string{"11111111111", "2222222222"}} //END OMIT tmpl := template.Must(template.New("table").Parse(source)) err := tmpl.Execute(os.Stdout, p) if err != nil { panic(err) } } tfortools-0.3.0/_talks/GolangUK2017/macho_dump.go000066400000000000000000000020501405741501200214420ustar00rootroot00000000000000// // Copyright (c) 2017 Intel Corporation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package main import ( "debug/macho" "os" "github.com/intel/tfortools" ) //START OMIT func main() { if len(os.Args) != 3 { panic("Usage: elf_dump script file") } f, err := os.Open(os.Args[2]) if err != nil { panic(err) } defer func() { _ = f.Close() }() ef, err := macho.NewFile(f) if err != nil { panic(err) } err = tfortools.OutputToTemplate(os.Stdout, "elf_dump", os.Args[1], ef, nil) if err != nil { panic(err) } } //END OMIT tfortools-0.3.0/_talks/GolangUK2017/promote.go000066400000000000000000000033161405741501200210210ustar00rootroot00000000000000// // Copyright (c) 2017 Intel Corporation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package main import ( "os" "time" "github.com/intel/tfortools" ) type stock struct { Ticker string Name string LastTrade time.Time Current float64 High float64 Low float64 Volume int } var fictionalStocks = []stock{ {"BCOM.L", "Big Company", time.Now(), 120.23, 150.00, 119.00, 7500000}, {"SMAL.L", "Small Company", time.Date(2017, time.March, 17, 10, 59, 00, 00, time.UTC), 1.06, 1.06, 1.10, 750}, {"MEDI.L", "Medium Company", time.Date(2017, time.March, 17, 12, 23, 00, 00, time.UTC), 77.00, 75.11, 81.12, 300122}, {"PICO.L", "Tiny Corp", time.Date(2017, time.March, 16, 16, 01, 00, 00, time.UTC), 0.59, 0.57, 0.63, 155}, {"HENT.L", "Happy Enterprises", time.Date(2017, time.March, 17, 9, 45, 00, 00, time.UTC), 756.11, 600.00, 10000, 6395624278}, {"LONL.L", "Lonely Systems", time.Date(2017, time.March, 17, 13, 45, 00, 00, time.UTC), 1245.00, 1200.00, 1245.00, 19003}, } func main() { //START OMIT const script = `{{ tojson (promote . "Name")}}` // HL err := tfortools.OutputToTemplate(os.Stdout, "promote", script, fictionalStocks, nil) //END OMIT if err != nil { panic(err) } } tfortools-0.3.0/_talks/GolangUK2017/qanda.html000066400000000000000000000001171405741501200207530ustar00rootroot00000000000000









  
           Q & A
tfortools-0.3.0/_talks/GolangUK2017/rows_cols.go000066400000000000000000000033141405741501200213440ustar00rootroot00000000000000// // Copyright (c) 2017 Intel Corporation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package main import ( "os" "time" "github.com/intel/tfortools" ) type stock struct { Ticker string Name string LastTrade time.Time Current float64 High float64 Low float64 Volume int } var fictionalStocks = []stock{ {"BCOM.L", "Big Company", time.Now(), 120.23, 150.00, 119.00, 7500000}, {"SMAL.L", "Small Company", time.Date(2017, time.March, 17, 10, 59, 00, 00, time.UTC), 1.06, 1.06, 1.10, 750}, {"MEDI.L", "Medium Company", time.Date(2017, time.March, 17, 12, 23, 00, 00, time.UTC), 77.00, 75.11, 81.12, 300122}, {"PICO.L", "Tiny Corp", time.Date(2017, time.March, 16, 16, 01, 00, 00, time.UTC), 0.59, 0.57, 0.63, 155}, {"HENT.L", "Happy Enterprises", time.Date(2017, time.March, 17, 9, 45, 00, 00, time.UTC), 756.11, 600.00, 10000, 6395624278}, {"LONL.L", "Lonely Systems", time.Date(2017, time.March, 17, 13, 45, 00, 00, time.UTC), 1245.00, 1200.00, 1245.00, 19003}, } func main() { //START OMIT const script = `{{ table (rows . 1 3 5) }}` // HL err := tfortools.OutputToTemplate(os.Stdout, "rows_cols", script, fictionalStocks, nil) //END OMIT if err != nil { panic(err) } } tfortools-0.3.0/_talks/GolangUK2017/select.go000066400000000000000000000033061405741501200206120ustar00rootroot00000000000000// // Copyright (c) 2017 Intel Corporation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package main import ( "os" "time" "github.com/intel/tfortools" ) type stock struct { Ticker string Name string LastTrade time.Time Current float64 High float64 Low float64 Volume int } var fictionalStocks = []stock{ {"BCOM.L", "Big Company", time.Now(), 120.23, 150.00, 119.00, 7500000}, {"SMAL.L", "Small Company", time.Date(2017, time.March, 17, 10, 59, 00, 00, time.UTC), 1.06, 1.06, 1.10, 750}, {"MEDI.L", "Medium Company", time.Date(2017, time.March, 17, 12, 23, 00, 00, time.UTC), 77.00, 75.11, 81.12, 300122}, {"PICO.L", "Tiny Corp", time.Date(2017, time.March, 16, 16, 01, 00, 00, time.UTC), 0.59, 0.57, 0.63, 155}, {"HENT.L", "Happy Enterprises", time.Date(2017, time.March, 17, 9, 45, 00, 00, time.UTC), 756.11, 600.00, 10000, 6395624278}, {"LONL.L", "Lonely Systems", time.Date(2017, time.March, 17, 13, 45, 00, 00, time.UTC), 1245.00, 1200.00, 1245.00, 19003}, } func main() { //START OMIT const script = `{{ select . "Ticker" }}` // HL err := tfortools.OutputToTemplate(os.Stdout, "filter", script, fictionalStocks, nil) //END OMIT if err != nil { panic(err) } } tfortools-0.3.0/_talks/GolangUK2017/sorting.go000066400000000000000000000033121405741501200210150ustar00rootroot00000000000000// // Copyright (c) 2017 Intel Corporation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package main import ( "os" "time" "github.com/intel/tfortools" ) type stock struct { Ticker string Name string LastTrade time.Time Current float64 High float64 Low float64 Volume int } var fictionalStocks = []stock{ {"BCOM.L", "Big Company", time.Now(), 120.23, 150.00, 119.00, 7500000}, {"SMAL.L", "Small Company", time.Date(2017, time.March, 17, 10, 59, 00, 00, time.UTC), 1.06, 1.06, 1.10, 750}, {"MEDI.L", "Medium Company", time.Date(2017, time.March, 17, 12, 23, 00, 00, time.UTC), 77.00, 75.11, 81.12, 300122}, {"PICO.L", "Tiny Corp", time.Date(2017, time.March, 16, 16, 01, 00, 00, time.UTC), 0.59, 0.57, 0.63, 155}, {"HENT.L", "Happy Enterprises", time.Date(2017, time.March, 17, 9, 45, 00, 00, time.UTC), 756.11, 600.00, 10000, 6395624278}, {"LONL.L", "Lonely Systems", time.Date(2017, time.March, 17, 13, 45, 00, 00, time.UTC), 1245.00, 1200.00, 1245.00, 19003}, } func main() { //START OMIT const script = `{{ table (sort . "Name") }}` // HL err := tfortools.OutputToTemplate(os.Stdout, "filter", script, fictionalStocks, nil) //END OMIT if err != nil { panic(err) } } tfortools-0.3.0/_talks/GolangUK2017/table.go000066400000000000000000000032731405741501200204250ustar00rootroot00000000000000// // Copyright (c) 2017 Intel Corporation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package main import ( "os" "time" "github.com/intel/tfortools" ) type stock struct { Ticker string Name string LastTrade time.Time Current float64 High float64 Low float64 Volume int } var fictionalStocks = []stock{ {"BCOM.L", "Big Company", time.Now(), 120.23, 150.00, 119.00, 7500000}, {"SMAL.L", "Small Company", time.Date(2017, time.March, 17, 10, 59, 00, 00, time.UTC), 1.06, 1.06, 1.10, 750}, {"MEDI.L", "Medium Company", time.Date(2017, time.March, 17, 12, 23, 00, 00, time.UTC), 77.00, 75.11, 81.12, 300122}, {"PICO.L", "Tiny Corp", time.Date(2017, time.March, 16, 16, 01, 00, 00, time.UTC), 0.59, 0.57, 0.63, 155}, {"HENT.L", "Happy Enterprises", time.Date(2017, time.March, 17, 9, 45, 00, 00, time.UTC), 756.11, 600.00, 10000, 6395624278}, {"LONL.L", "Lonely Systems", time.Date(2017, time.March, 17, 13, 45, 00, 00, time.UTC), 1245.00, 1200.00, 1245.00, 19003}, } func main() { //START OMIT const script = `{{ table .}}` // HL err := tfortools.OutputToTemplate(os.Stdout, "filter", script, fictionalStocks, nil) //END OMIT if err != nil { panic(err) } } tfortools-0.3.0/_talks/GolangUK2017/table_fmt.go000066400000000000000000000045251405741501200212740ustar00rootroot00000000000000// // Copyright (c) 2017 Intel Corporation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package main import ( "fmt" "io" "os" ) //START OMIT type address struct { House, Street, PostCode, Country string } type person struct { FirstName, FamilyName string Address address PhoneNumbers [2]string } var db = []person{ {"John", "Doe", address{"19", "Nowhere", "BP9", "UK"}, [2]string{"12121212121", "214345677"}}, {"Jane", "Doe", address{"1900", "Somewhere", "SK12", "UK"}, [2]string{"987654331", "172846281"}}, {"Joe", "Bloggs", address{"1900", "Zig Zig", "W10", "UK"}, [2]string{``}}, //END OMIT } //FPRINTSTART OMIT func fprintTable(w io.Writer, db []person) error { const header = ` Important Contacts ` if _, err := fmt.Fprintf(w, header); err != nil { return err } for _, p := range db { if _, err := fmt.Fprintf(w, " ", p.FirstName, p.FamilyName); err != nil { return err } if _, err := fmt.Fprintf(w, "", p.Address.House, p.Address.Street); err != nil { return err } for _, num := range p.PhoneNumbers { if _, err := fmt.Fprintf(w, "", num); err != nil { return err } } if _, err := fmt.Fprintf(w, "\n"); err != nil { return err } } if _, err := fmt.Fprintf(w, "
NameAddressFirst NumberSecond Number
%s %s%s %s%s
\n \n\n"); err != nil { return err } return nil } //FPRINTEND OMIT //START1 OMIT func main() { if err := fprintTable(os.Stdout, db); err != nil { panic(err) } } //END1 OMIT tfortools-0.3.0/_talks/GolangUK2017/table_templ.go000066400000000000000000000040341405741501200216220ustar00rootroot00000000000000// // Copyright (c) 2017 Intel Corporation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package main import ( "html/template" "io" "os" ) //START OMIT type address struct { House string Street string PostCode string Country string } type person struct { FirstName string FamilyName string Address address PhoneNumbers [2]string } var db = []person{ {"John", "Doe", address{"19", "Nowhere", "BP9", "UK"}, [2]string{"12121212121", "214345677"}}, {"Jane", "Doe", address{"1900", "Somwhere", "SK12", "UK"}, [2]string{"987654331"}}, //... //END OMIT {"Joe", "Bloggs", address{"1900", "Zig Zig", "W10", "UK"}, [2]string{``}}, } //TEMPLATESTART OMIT func templateTable(w io.Writer, db []person) error { const source = ` Important Contacts {{- range .}} {{- range .PhoneNumbers}}{{end}} {{- end}}
NameAddressFirst NumberSecond Number
{{.FirstName}} {{.FamilyName}}{{.Address.House}} {{.Address.Street}}{{.}}
` tmpl := template.Must(template.New("table").Parse(source)) return tmpl.Execute(w, db) } //TEMPLATEEND OMIT //START1 OMIT func main() { if err := templateTable(os.Stdout, db); err != nil { panic(err) } } //END1 OMIT tfortools-0.3.0/_talks/GolangUK2017/table_templ_hl.go000066400000000000000000000040641405741501200223100ustar00rootroot00000000000000// // Copyright (c) 2017 Intel Corporation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package main import ( "html/template" "io" "os" ) //START OMIT type address struct { House string Street string PostCode string Country string } type person struct { FirstName string FamilyName string Address address PhoneNumbers [2]string } var db = []person{ {"John", "Doe", address{"19", "Nowhere", "BP9", "UK"}, [2]string{"12121212121", "214345677"}}, {"Jane", "Doe", address{"1900", "Somwhere", "SK12", "UK"}, [2]string{"987654331"}}, //... //END OMIT {"Joe", "Bloggs", address{"1900", "Zig Zig", "W10", "UK"}, [2]string{``}}, } //TEMPLATESTART OMIT func templateTable(w io.Writer, db []person) error { const source = ` Important Contacts {{- range .}} // HL // HL {{- range .PhoneNumbers}}{{end}} // HL {{- end}} // HL
NameAddressFirst NumberSecond Number
{{.FirstName}} {{.FamilyName}}{{.Address.House}} {{.Address.Street}}{{.}}
` tmpl := template.Must(template.New("table").Parse(source)) return tmpl.Execute(w, db) } //TEMPLATEEND OMIT //START1 OMIT func main() { if err := templateTable(os.Stdout, db); err != nil { panic(err) } } //END1 OMIT tfortools-0.3.0/_talks/GolangUK2017/templates.slide000066400000000000000000000066561405741501200220370ustar00rootroot00000000000000Command Line Scripting with Templates 18th August 2017 Mark Ryan Software Engineer OTC London mark.d.ryan@intel.com * .html title.html .background filler.png * An Example .code table_fmt.go /START OMIT/,/END OMIT/ .play table_fmt.go /START1 OMIT/,/END1 OMIT/ .background background.png * Generate HTML with Go code .html fprint_table.html .background background.png * Generate HTML with a Go Template .play table_templ_hl.go /TEMPLATESTART OMIT/,/TEMPLATEEND OMIT/ .background background.png * Template Primer Pipelines and Context .play -edit context.go /START OMIT/,/END OMIT/ .background background.png Loops .play -edit loops.go /START OMIT/,/END OMIT/ .background background.png * Template Fun Facts There are two template packages .link https://golang.org/pkg/text/template/ .link https://golang.org/pkg/html/template/ Fields operated on by templates need to be exported .play -edit unexported.go /START OMIT/,/END OMIT/ .background background.png * Template Primer 2 If statements .play -edit if.go /START OMIT/,/END OMIT/ Indexing maps and slices .play -edit index.go /START OMIT/,/END OMIT/ .background background.png * Template Primer 3 Functions .play -edit functions.go /START OMIT/,/END OMIT/ .background background.png * .html go_list.html .background filler.png * Scripting issues - Keeping help up to date is a nightmare .link https://github.com/golang/go/blob/master/src/cmd/go/internal/list/list.go#L25 list.go - Extracting information is either too hard or just not possible {{range $i, $v := .Deps}}{{if lt $i 3}}{{println .}}{{end}}{{end}} - Converting to JSON is a pain - Cannot count elements that match a query - Cannot output the last element of a collection - Cannot sort the output - Pretty printing the output is also a pain * Templates for Tools Package to facilitate command line scripting with templates .link https://github.com/intel/tfortools https://github.com/intel/tfortools The package provides - Automatic generation of help messages - Filtering - Sorting - Data extraction - Conversion of selected parts of the data to JSON - Pretty printing of data .background background.png * Help Messages .code undecorated.go /STRUCT OMIT/,/STRUCT OMIT/ Undecorated help .play -edit undecorated.go /START OMIT/,/END OMIT/ Decorated help .play -edit decorated.go /START OMIT/,/END OMIT/ .background background.png * Formatting Table .play -edit table.go /START OMIT/,/END OMIT/ Select .play -edit select.go /START OMIT/,/END OMIT/ Sort .play -edit sorting.go /START OMIT/,/END OMIT/ .background background.png * Extracting Filter .play -edit filtering.go /START OMIT/,/END OMIT/ Head and Tail .play -edit head_tail.go /START OMIT/,/END OMIT/ Row and Cols .play -edit rows_cols.go /START OMIT/,/END OMIT/ .background background.png * More Formatting ToJson .play -edit tojson.go /START OMIT/,/END OMIT/ Describe .play -edit describe.go /START OMIT/,/END OMIT/ Promote .play -edit promote.go /START OMIT/,/END OMIT/ .background background.png * ELF Dump .code elf_dump.go /START OMIT/,/END OMIT/ * Guidelines - Allow users to tailor the output of your tools - Always document types passed to template scripts - These types constitute a public API - Apply templates to entire collections rather than elements of collections - Avoid interface{} in your public types .play -edit empty.go /START OMIT/,/END OMIT/ .background background.png * .html qanda.html .background filler.png tfortools-0.3.0/_talks/GolangUK2017/title.html000066400000000000000000000004331405741501200210110ustar00rootroot00000000000000



  Command Line Scripting

  
  with Templates


  


  
  
     18th August 2017

  
     Mark Ryan
  
     Software Engineer OTC London
  
     mark.d.ryan@intel.com
           
tfortools-0.3.0/_talks/GolangUK2017/tojson.go000066400000000000000000000032751405741501200206540ustar00rootroot00000000000000// // Copyright (c) 2017 Intel Corporation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package main import ( "os" "time" "github.com/intel/tfortools" ) type stock struct { Ticker string Name string LastTrade time.Time Current float64 High float64 Low float64 Volume int } var fictionalStocks = []stock{ {"BCOM.L", "Big Company", time.Now(), 120.23, 150.00, 119.00, 7500000}, {"SMAL.L", "Small Company", time.Date(2017, time.March, 17, 10, 59, 00, 00, time.UTC), 1.06, 1.06, 1.10, 750}, {"MEDI.L", "Medium Company", time.Date(2017, time.March, 17, 12, 23, 00, 00, time.UTC), 77.00, 75.11, 81.12, 300122}, {"PICO.L", "Tiny Corp", time.Date(2017, time.March, 16, 16, 01, 00, 00, time.UTC), 0.59, 0.57, 0.63, 155}, {"HENT.L", "Happy Enterprises", time.Date(2017, time.March, 17, 9, 45, 00, 00, time.UTC), 756.11, 600.00, 10000, 6395624278}, {"LONL.L", "Lonely Systems", time.Date(2017, time.March, 17, 13, 45, 00, 00, time.UTC), 1245.00, 1200.00, 1245.00, 19003}, } func main() { //START OMIT const script = `{{ tojson . }}` // HL err := tfortools.OutputToTemplate(os.Stdout, "tojson", script, fictionalStocks, nil) //END OMIT if err != nil { panic(err) } } tfortools-0.3.0/_talks/GolangUK2017/undecorated.go000066400000000000000000000032051405741501200216260ustar00rootroot00000000000000// // Copyright (c) 2017 Intel Corporation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package main import ( "fmt" "time" "github.com/intel/tfortools" ) //STRUCT OMIT type stock struct { Ticker string Name string LastTrade time.Time Current float64 High float64 Low float64 Volume int } var fictionalStocks = []stock{ {"BCOM.L", "Big Company", time.Now(), 120.23, 150.00, 119.00, 7500000}, // ... //STRUCT OMIT {"SMAL.L", "Small Company", time.Date(2017, time.March, 17, 10, 59, 00, 00, time.UTC), 1.06, 1.06, 1.10, 750}, {"MEDI.L", "Medium Company", time.Date(2017, time.March, 17, 12, 23, 00, 00, time.UTC), 77.00, 75.11, 81.12, 300122}, {"PICO.L", "Tiny Corp", time.Date(2017, time.March, 16, 16, 01, 00, 00, time.UTC), 0.59, 0.57, 0.63, 155}, {"HENT.L", "Happy Enterprises", time.Date(2017, time.March, 17, 9, 45, 00, 00, time.UTC), 756.11, 600.00, 10000, 6395624278}, {"LONL.L", "Lonely Systems", time.Date(2017, time.March, 17, 13, 45, 00, 00, time.UTC), 1245.00, 1200.00, 1245.00, 19003}, } func main() { //START OMIT fmt.Print(tfortools.GenerateUsageUndecorated(fictionalStocks)) //END OMIT } tfortools-0.3.0/_talks/GolangUK2017/unexported.go000066400000000000000000000015651405741501200215350ustar00rootroot00000000000000// // Copyright (c) 2017 Intel Corporation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package main import "os" import "text/template" //START OMIT var test = struct { name string }{ "Markus", } func main() { const source = "{{.name}}" tmpl := template.Must(template.New("table").Parse(source)) tmpl.Execute(os.Stdout, test) } //END OMIT tfortools-0.3.0/defaults.go000066400000000000000000000057571405741501200157200ustar00rootroot00000000000000// // Copyright (c) 2017 Intel Corporation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package tfortools import "text/template" var funcMap = template.FuncMap{ "filter": filterByField, "filterContains": filterByContains, "filterHasPrefix": filterByHasPrefix, "filterHasSuffix": filterByHasSuffix, "filterFolded": filterByFolded, "filterRegexp": filterByRegexp, "tojson": toJSON, "tocsv": toCSV, "select": selectField, "selectalt": selectFieldAlt, "table": table, "tablealt": tableAlt, "tablex": tablex, "tablexalt": tablexAlt, "htable": htable, "htablealt": htableAlt, "htablex": htablex, "htablexalt": htablexAlt, "cols": cols, "sort": sortSlice, "rows": rows, "head": head, "tail": tail, "describe": describe, "promote": promote, "sliceof": sliceof, "totable": toTable, } var funcHelpSlice = []funcHelpInfo{ {"filter", helpFilter, helpFilterIndex}, {"filterContains", helpFilterContains, helpFilterContainsIndex}, {"filterHasPrefix", helpFilterHasPrefix, helpFilterHasPrefixIndex}, {"filterHasSuffix", helpFilterHasSuffix, helpFilterHasSuffixIndex}, {"filterFolded", helpFilterFolded, helpFilterFoldedIndex}, {"filterRegexp", helpFilterRegexp, helpFilterRegexpIndex}, {"tojson", helpToJSON, helpToJSONIndex}, {"tocsv", helpToCSV, helpToCSVIndex}, {"select", helpSelect, helpSelectIndex}, {"selectalt", helpSelectAlt, helpSelectAltIndex}, {"table", helpTable, helpTableIndex}, {"tablealt", helpTableAlt, helpTableAltIndex}, {"tablex", helpTableX, helpTableXIndex}, {"tablexalt", helpTableXAlt, helpTableXAltIndex}, {"htable", helpHTable, helpHTableIndex}, {"htablealt", helpHTableAlt, helpHTableAltIndex}, {"htablex", helpHTableX, helpHTableXIndex}, {"htablexalt", helpHTableXAlt, helpHTableXAltIndex}, {"cols", helpCols, helpColsIndex}, {"sort", helpSort, helpSortIndex}, {"rows", helpRows, helpRowsIndex}, {"head", helpHead, helpHeadIndex}, {"tail", helpTail, helpTailIndex}, {"describe", helpDescribe, helpDescribeIndex}, {"promote", helpPromote, helpPromoteIndex}, {"sliceof", helpSliceof, helpSliceofIndex}, {"totable", helpToTable, helpToTableIndex}, } func getFuncMap(cfg *Config) template.FuncMap { if cfg == nil { return funcMap } return cfg.funcMap } func getHelpers(cfg *Config) []funcHelpInfo { if cfg == nil { return funcHelpSlice } return cfg.funcHelp } tfortools-0.3.0/example_test.go000066400000000000000000000371031405741501200165710ustar00rootroot00000000000000// Copyright (c) 2017 Intel Corporation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package tfortools import ( "bufio" "bytes" "fmt" "os" "strings" ) func ExampleGenerateUsageDecorated() { cfg := NewConfig(OptCols) help := GenerateUsageDecorated("-f", []struct{ X, Y int }{}, cfg) fmt.Println(help) // output: // The template passed to the --f option operates on a // // []struct { // X int // Y int // } // // Some new functions have been added to Go's template language // // - 'cols' can be used to extract certain columns from a table consisting of a // slice or array of structs. It returns a new slice of structs which contain // only the fields requested by the caller. For example, given a slice of structs // // {{cols . "Name" "Address"}} // // returns a new slice of structs, each element of which is a structure with only // two fields, 'Name' and 'Address'. } func ExampleGenerateUsageUndecorated() { i := struct { X int `tfortools:"This is an int"` Y string `json:"omitempty" tfortools:"This is a string"` hidden float64 Invalid chan int }{} help := GenerateUsageUndecorated(i) fmt.Println(help) // output: // struct { // X int // This is an int // Y string `json:"omitempty"` // This is a string // } } func ExampleTemplateFunctionNames() { cfg := NewConfig(OptCols, OptRows) err := cfg.AddCustomFn(strings.TrimSpace, "trim", "- trim trims leading and trailing whitespace from string") if err != nil { panic(err) } for _, fn := range TemplateFunctionNames(cfg) { fmt.Println(fn) } // output: // cols // rows // trim } func ExampleTemplateFunctionHelpSingle() { cfg := NewConfig(OptCols, OptRows) err := cfg.AddCustomFn(strings.TrimSpace, "trim", "- trim trims leading and trailing whitespace from string") if err != nil { panic(err) } help, err := TemplateFunctionHelpSingle("cols", cfg) if err != nil { panic(err) } fmt.Println(help) help, err = TemplateFunctionHelpSingle("trim", cfg) if err != nil { panic(err) } fmt.Println(help) // output: // - 'cols' can be used to extract certain columns from a table consisting of a // slice or array of structs. It returns a new slice of structs which contain // only the fields requested by the caller. For example, given a slice of structs // // {{cols . "Name" "Address"}} // // returns a new slice of structs, each element of which is a structure with only // two fields, 'Name' and 'Address'. // // - trim trims leading and trailing whitespace from string } func ExampleOutputToTemplate() { data := []struct{ FirstName, MiddleName, Surname string }{ {"Marcus", "Tullius", "Cicero"}, {"Gaius", "Julius", "Caesar"}, {"Marcus", "Licinius", "Crassus"}, } // print the surname of the person whose middlename is lexographically smallest. script := `{{select (head (sort . "MiddleName")) "Surname"}}` if err := OutputToTemplate(os.Stdout, "names", script, data, nil); err != nil { panic(err) } // output: // Caesar } func ExampleOptFilter() { data := []struct{ FirstName, MiddleName, Surname string }{ {"Marcus", "Tullius", "Cicero"}, {"Gaius", "Julius", "Caesar"}, {"Marcus", "Licinius", "Crassus"}, } // Print the surname of all people whose first name is Marcus script := `{{range (filter . "FirstName" "Marcus")}}{{println .Surname}}{{end}}` if err := OutputToTemplate(os.Stdout, "names", script, data, nil); err != nil { panic(err) } // output: // Cicero // Crassus } func ExampleOptFilterContains() { data := []struct{ FirstName, MiddleName, Surname string }{ {"Marcus", "Tullius", "Cicero"}, {"Gaius", "Julius", "Caesar"}, {"Marcus", "Licinius", "Crassus"}, } // Count the number of people whose middle name contains a 'ul' script := `{{len (filterContains . "MiddleName" "ul")}}` if err := OutputToTemplate(os.Stdout, "names", script, data, nil); err != nil { panic(err) } // output: // 2 } func ExampleOptFilterHasPrefix() { data := []struct{ FirstName, MiddleName, Surname string }{ {"Marcus", "Tullius", "Cicero"}, {"Gaius", "Julius", "Caesar"}, {"Marcus", "Licinius", "Crassus"}, } // Print all the surnames that start with 'Ci' script := `{{select (filterHasPrefix . "Surname" "Ci") "Surname"}}` if err := OutputToTemplate(os.Stdout, "names", script, data, nil); err != nil { panic(err) } // output: // Cicero } func ExampleOptFilterHasSuffix() { data := []struct{ FirstName, MiddleName, Surname string }{ {"Marcus", "Tullius", "Cicero"}, {"Gaius", "Julius", "Caesar"}, {"Marcus", "Licinius", "Crassus"}, } // Print all the surnames that end with 'us' script := `{{select (filterHasSuffix . "Surname" "us") "Surname"}}` if err := OutputToTemplate(os.Stdout, "names", script, data, nil); err != nil { panic(err) } // output: // Crassus } func ExampleOptFilterFolded() { data := []struct{ FirstName, MiddleName, Surname string }{ {"Marcus", "Tullius", "Cicero"}, {"Gaius", "Julius", "Caesar"}, {"Marcus", "Licinius", "Crassus"}, } // Output the first and surnames of all people whose first name is marcus script := `{{range (filterFolded . "FirstName" "marcus")}}{{println .FirstName .Surname}}{{end}}` if err := OutputToTemplate(os.Stdout, "names", script, data, nil); err != nil { panic(err) } // output: // Marcus Cicero // Marcus Crassus } func ExampleOptFilterRegexp() { data := []struct{ FirstName, MiddleName, Surname string }{ {"Marcus", "Tullius", "Cicero"}, {"Gaius", "Julius", "Caesar"}, {"Marcus", "Licinius", "Crassus"}, } // Output the first and last names of all people whose middle name ends in 'ius' and whose // second letter is 'u' script := `{{range (filterRegexp . "MiddleName" "^.u.*ius$")}}{{println .FirstName .Surname}}{{end}}` if err := OutputToTemplate(os.Stdout, "names", script, data, nil); err != nil { panic(err) } // output: // Marcus Cicero // Gaius Caesar } func ExampleOptToJSON() { data := []struct { Name string AgeAtDeath int Battles []string }{ {"Caesar", 55, []string{"Battle of Alesia", "Battle of Dyrrhachium", "Battle of the Nile"}}, {"Alexander", 32, []string{"Battle of Issus", "Battle of Gaugamela", "Battle of the Hydaspes"}}, } script := `{{tojson .}}` if err := OutputToTemplate(os.Stdout, "names", script, data, nil); err != nil { panic(err) } // output: // [ // { // "Name": "Caesar", // "AgeAtDeath": 55, // "Battles": [ // "Battle of Alesia", // "Battle of Dyrrhachium", // "Battle of the Nile" // ] // }, // { // "Name": "Alexander", // "AgeAtDeath": 32, // "Battles": [ // "Battle of Issus", // "Battle of Gaugamela", // "Battle of the Hydaspes" // ] // } // ] } func ExampleOptTableX() { data := []struct{ FirstName, MiddleName, Surname string }{ {"Marcus", "Tullius", "Cicero"}, {"Gaius", "Julius", "Caesar"}, {"Marcus", "Licinius", "Crassus"}, } // Output the names of people in a nicely formatted table script := `{{tablex . 12 8 0}}` var b bytes.Buffer if err := OutputToTemplate(&b, "names", script, data, nil); err != nil { panic(err) } // Normally you would pass os.Stdout directly into OutputToTemplate. Here // we're outputting the result of the running the script to a buffer. We need // to do this so we can remove the whitespace at the end of each line of the // table. The test fails with the newline present as go tests implementation // of output: for examples, trims spaces. scanner := bufio.NewScanner(&b) for scanner.Scan() { fmt.Println(strings.TrimSpace(scanner.Text())) } // output: // FirstName MiddleName Surname // Marcus Tullius Cicero // Gaius Julius Caesar // Marcus Licinius Crassus } func ExampleOptTableXAlt() { data := []struct { FirstName string Mask uint32 }{ {"Marcus", 255}, {"Gaius", 10}, {"Marcus", 6}, } script := `{{tablexalt . 12 8 0}}` var b bytes.Buffer if err := OutputToTemplate(&b, "names", script, data, nil); err != nil { panic(err) } scanner := bufio.NewScanner(&b) for scanner.Scan() { fmt.Println(strings.TrimSpace(scanner.Text())) } // output: // FirstName Mask // "Marcus" 0xff // "Gaius" 0xa // "Marcus" 0x6 } func ExampleOptHTableX() { data := []struct{ FirstName, MiddleName, Surname string }{ {"Marcus", "Tullius", "Cicero"}, {"Gaius", "Julius", "Caesar"}, {"Marcus", "Licinius", "Crassus"}, } // Output the names of people in a series of nicely formatted tables script := `{{htablex . 12 8 0}}` var b bytes.Buffer if err := OutputToTemplate(&b, "names", script, data, nil); err != nil { panic(err) } scanner := bufio.NewScanner(&b) for scanner.Scan() { fmt.Println(strings.TrimSpace(scanner.Text())) } // output: // FirstName: Marcus // MiddleName: Tullius // Surname: Cicero // // FirstName: Gaius // MiddleName: Julius // Surname: Caesar // // FirstName: Marcus // MiddleName: Licinius // Surname: Crassus } func ExampleOptHTableXAlt() { data := []struct { FirstName string Mask uint32 }{ {"Marcus", 255}, {"Gaius", 10}, {"Marcus", 6}, } script := `{{htablexalt . 12 8 0}}` var b bytes.Buffer if err := OutputToTemplate(&b, "names", script, data, nil); err != nil { panic(err) } scanner := bufio.NewScanner(&b) for scanner.Scan() { fmt.Println(strings.TrimSpace(scanner.Text())) } // output: // FirstName: "Marcus" // Mask: 0xff // // FirstName: "Gaius" // Mask: 0xa // // FirstName: "Marcus" // Mask: 0x6 } func ExampleOptCols() { data := []struct{ FirstName, MiddleName, Surname string }{ {"Marcus", "Tullius", "Cicero"}, {"Gaius", "Julius", "Caesar"}, {"Marcus", "Licinius", "Crassus"}, } // Output the first and last names of people in a nicely formatted table script := `{{tablex (cols . "FirstName" "Surname") 12 8 0}}` var b bytes.Buffer if err := OutputToTemplate(&b, "names", script, data, nil); err != nil { panic(err) } // Normally you would pass os.Stdout directly into OutputToTemplate. Here // we're outputting the result of the running the script to a buffer. We need // to do this so we can remove the whitespace at the end of each line of the // table. The test fails with the newline present as go tests implementation // of output: for examples, trims spaces. scanner := bufio.NewScanner(&b) for scanner.Scan() { fmt.Println(strings.TrimSpace(scanner.Text())) } // output: // FirstName Surname // Marcus Cicero // Gaius Caesar // Marcus Crassus } func ExampleOptSort() { data := []struct{ FirstName, MiddleName, Surname string }{ {"Marcus", "Tullius", "Cicero"}, {"Gaius", "Julius", "Caesar"}, {"Marcus", "Licinius", "Crassus"}, } // Output the names of people sorted by their Surnames script := `{{tablex (sort . "Surname") 12 8 0}}` var b bytes.Buffer if err := OutputToTemplate(&b, "names", script, data, nil); err != nil { panic(err) } // Normally you would pass os.Stdout directly into OutputToTemplate. Here // we're outputting the result of the running the script to a buffer. We need // to do this so we can remove the whitespace at the end of each line of the // table. The test fails with the newline present as go tests implementation // of output: for examples, trims spaces. scanner := bufio.NewScanner(&b) for scanner.Scan() { fmt.Println(strings.TrimSpace(scanner.Text())) } // output: // FirstName MiddleName Surname // Gaius Julius Caesar // Marcus Tullius Cicero // Marcus Licinius Crassus } func ExampleOptRows() { data := []struct{ FirstName, MiddleName, Surname string }{ {"Marcus", "Tullius", "Cicero"}, {"Gaius", "Julius", "Caesar"}, {"Marcus", "Licinius", "Crassus"}, } // Print the surname of the first and third people in the database script := `{{range (rows . 0 2)}}{{println .Surname}}{{end}}` if err := OutputToTemplate(os.Stdout, "names", script, data, nil); err != nil { panic(err) } // output: // Cicero // Crassus } func ExampleOptHead() { data := []struct{ FirstName, MiddleName, Surname string }{ {"Marcus", "Tullius", "Cicero"}, {"Gaius", "Julius", "Caesar"}, {"Marcus", "Licinius", "Crassus"}, } // Print the surname of the first person in the database script := `{{range (head .)}}{{println .Surname}}{{end}}` if err := OutputToTemplate(os.Stdout, "names", script, data, nil); err != nil { panic(err) } // output: // Cicero } func ExampleOptTail() { data := []struct{ FirstName, MiddleName, Surname string }{ {"Marcus", "Tullius", "Cicero"}, {"Gaius", "Julius", "Caesar"}, {"Marcus", "Licinius", "Crassus"}, } // Print the surname of the first person in the database script := `{{range (tail .)}}{{println .Surname}}{{end}}` if err := OutputToTemplate(os.Stdout, "names", script, data, nil); err != nil { panic(err) } // output: // Crassus } func ExampleOptDescribe() { data := []struct{ FirstName, MiddleName, Surname string }{} // Describe the type of data script := `{{describe .}}` if err := OutputToTemplate(os.Stdout, "names", script, data, nil); err != nil { panic(err) } // output: // []struct { // FirstName string // MiddleName string // Surname string // } } func ExampleOptPromote() { type cred struct { Name string Password string } type u struct { Credentials cred } data := []struct { Uninteresting int User u }{ {0, u{cred{"Marcus", "1234"}}}, {0, u{cred{"Gaius", "0000"}}}, } // Create a new []cred containing the credentials embedded within data, // iterate through this new slice printing out the names and passwords. // The cred instances rooted at "User.Credentials" in the data object // are promoted to the top level in the new slice. script := `{{range (promote . "User.Credentials")}}{{printf "%s %s\n" .Name .Password}}{{end}}` if err := OutputToTemplate(os.Stdout, "names", script, data, nil); err != nil { panic(err) } // output: // Marcus 1234 // Gaius 0000 } func ExampleOptSliceof() { script := `{{index (sliceof .) 0}}` if err := OutputToTemplate(os.Stdout, "names", script, 1, nil); err != nil { panic(err) } // output: // 1 } func ExampleOptToTable() { data := [][]string{ {"Message", "Code", "Occurrence"}, {"Too many GOSUBs", "37", "0.1"}, {"Too many REPEATs", "44", "0.15"}, } script := `{{with (totable .)}}{{select . "Message"}}{{select . "Code"}}{{select . "Occurrence"}}{{end}}` if err := OutputToTemplate(os.Stdout, "errors", script, data, nil); err != nil { panic(err) } // output: // Too many GOSUBs // Too many REPEATs // 37 // 44 // 0.1 // 0.15 } func ExampleOptSelectAlt() { data := []struct{ Integer uint32 }{{255}} script := `{{selectalt . "Integer"}}` if err := OutputToTemplate(os.Stdout, "names", script, data, nil); err != nil { panic(err) } // output: // 0xff } func ExampleConfig_AddCustomFn() { nums := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} cfg := NewConfig(OptAllFns) err := cfg.AddCustomFn(func(n []int) int { sum := 0 for _, num := range n { sum += num } return sum }, "sum", "- sum \"Returns\" the sum of a slice of integers") if err != nil { panic(err) } // Print the sum of a slice of numbers script := `{{println (sum .)}}` if err = OutputToTemplate(os.Stdout, "sums", script, nums, cfg); err != nil { panic(err) } // output: // 55 } tfortools-0.3.0/examples/000077500000000000000000000000001405741501200153625ustar00rootroot00000000000000tfortools-0.3.0/examples/csv/000077500000000000000000000000001405741501200161555ustar00rootroot00000000000000tfortools-0.3.0/examples/csv/csv.go000066400000000000000000000031361405741501200173020ustar00rootroot00000000000000// // Copyright (c) 2017 Intel Corporation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package main import ( "encoding/csv" "flag" "fmt" "os" "github.com/intel/tfortools" ) var code string func init() { flag.Usage = func() { fmt.Fprintf(os.Stderr, "Usage: %s [-f template] file\n", os.Args[0]) flag.PrintDefaults() fmt.Fprintln(os.Stderr) fmt.Fprintln(os.Stderr, tfortools.GenerateUsageUndecorated([][]string{})) } flag.StringVar(&code, "f", "{{table (totable .)}}", "string containing the template code to execute") } func applyTemplate(path string) error { f, err := os.Open(path) if err != nil { return fmt.Errorf("Unable to open %s : %v", path, err) } defer func() { _ = f.Close() }() data, err := csv.NewReader(f).ReadAll() if err != nil { return fmt.Errorf("Unable to read %s : %v", path, err) } return tfortools.OutputToTemplate(os.Stdout, "csv", code, data, nil) } func main() { flag.Parse() if len(flag.Args()) != 1 { flag.Usage() os.Exit(1) } if err := applyTemplate(flag.Args()[0]); err != nil { fmt.Fprintln(os.Stderr, err.Error()) os.Exit(1) } } tfortools-0.3.0/examples/elf_dump/000077500000000000000000000000001405741501200171555ustar00rootroot00000000000000tfortools-0.3.0/examples/elf_dump/README.md000066400000000000000000000010751405741501200204370ustar00rootroot00000000000000# ELF Parsing leveraging templates By default elf_dump just dumps the Program Headers and the Section Headers as well the symbol table However what makes this interesting the ability to use templates to do interesting stuff An few examples You can filter the symbol table to extract information in different ways ``` elf_dump -f '{{tablealt (head (promote .Sections "SectionHeader") 3)}}' curl ``` ``` elf_dump -f '{{range (head .ImportedSymbols 3)}}{{println .}}{{end}}' curl ``` ``` elf_dump -f '{{range .DynamicSymbols}}{{println .}}{{end}}' curl ``` tfortools-0.3.0/examples/elf_dump/elf_dump.go000066400000000000000000000036711405741501200213060ustar00rootroot00000000000000package main import ( "debug/elf" "flag" "fmt" "os" "github.com/intel/tfortools" ) var code string //The format string func init() { flag.Usage = func() { fmt.Fprintf(os.Stderr, "Usage: %s [-f