vegan/0000755000176200001440000000000012122077231011347 5ustar liggesusersvegan/MD50000644000176200001440000007223612122077231011671 0ustar liggesusers4118da91bd5fe845079424bf0750a660 *DESCRIPTION e4c6f26e26e7f8e31b4e4a30d13d467e *NAMESPACE 4b8531b446af54510e5fb31f841aed2f *R/AIC.radfit.R 5c5fdbcdc2a38e2cbafdb8f2c5eb2e08 *R/CCorA.R 6592cf7dc692f87b4a147eb625e18624 *R/MDSrotate.R 1a95c5873b1546683487e17aae4fe511 *R/MOStest.R 99bc778c8ff99648bdc120dd80e5d998 *R/RsquareAdj.R 219c239766ce490b895cad668309bbcb *R/SSarrhenius.R b16c440e6425bb8275af82740c88b06c *R/SSgitay.R 5c50828bd1466847e54ffd44ddf62df0 *R/SSgleason.R e4754677764163b028ce3237d9b4a11b *R/SSlomolino.R d80688d78aba3cd9367ffaaaec6ec252 *R/TukeyHSD.betadisper.R a7e4a96ac08502dc4cd7023d0510e94f *R/add1.cca.R bc63dc46c564df2dea69d90f25e52ba3 *R/ade2vegancca.R 3fea698281bc0b4c3a5ad26f4d44d0e2 *R/adipart.R ca2eae68396cb5a16355751efb906557 *R/adipart.default.R 05387ee9e552fcec123b4b922e837eaa *R/adipart.formula.R 39805e701d7a10abe111056a5b8afcfe *R/adonis.R 38726b7dad817378b3fc41094c11595a *R/alias.cca.R fa03b3668c0435eebc778b9def908be9 *R/anosim.R a4f23289c4a5eab2a3587292b306d497 *R/anova.betadisper.R a3767eb78bd5d62341ff198fbf65d1b1 *R/anova.cca.R 363461c0bab2687ece5bf521398db928 *R/anova.ccabyaxis.R 350cc1a6e930a195c80b5c7aef0d9b7e *R/anova.ccabymargin.R 145b004abb6a5dca32fc8f60338af590 *R/anova.ccabyterm.R 97cbe54d0f4f7adee7a20b6c982d1ecf *R/anova.ccanull.R 7fab08bcc596df60a22c4b04c8507121 *R/anova.prc.R 6fb2bf929aed44ef41bfd4dfc6e010cc *R/as.fisher.R eee49f0fce625a3b8266b82f05c86aac *R/as.mcmc.oecosimu.R cfaa7dc7d3f45c29e59e83326f1371d4 *R/as.mcmc.permat.R ee820c6d748d3aaa26d7412ea11128aa *R/as.mlm.R 1d5f7f86bb0ed985c087814c83af64ed *R/as.mlm.cca.R 0e281c0ea391184e4fff1dd90dc5129a *R/as.mlm.rda.R a7f01bd69394d5554cf10279a2690080 *R/as.preston.R 50aa2e700cc26301885d9ef7ca7f12c4 *R/as.rad.R 124345e75a121a5d750d1b306156614a *R/as.ts.oecosimu.R 251aa91b87e2f964f24fe61791eedac9 *R/as.ts.permat.R fbec6d133dea10372ce082c7035a8ab2 *R/beals.R d25853e603f6af59234db7714c55f71f *R/betadisper.R 92d22ad6b8870005ed86940cd90f2077 *R/betadiver.R 46ae3f75a0b483fecab589637d72a307 *R/bgdispersal.R 4603ea944d470a9e284cb6cab6d75529 *R/bioenv.R 4018f8ddbc314125dbd17d44f710147e *R/bioenv.default.R 82a17642aae8182c9345a03a846a853c *R/bioenv.formula.R 875d40515bf55ee65dc7fcdefb9f52d1 *R/biplot.CCorA.R e83522ded9481ebde69e61419d0033b7 *R/biplot.rda.R 0999bb90f22b72fade2ca6adbd01758f *R/boxplot.betadisper.R f5abc1a3e5417e53a78cf2054f46d0a6 *R/boxplot.specaccum.R cbf54233db3c2839101f98e02eb538dd *R/bstick.R 14ba8e7ffce8b0b0cc9e8a8f3160acf3 *R/bstick.cca.R 229bb1ed02b171c8ce0a2bdfb3b37ef6 *R/bstick.decorana.R b5a4874f7763f1793b3068eec4e859d5 *R/bstick.default.R 4bf61eddbdd1cec0bd03150cd478f3d9 *R/bstick.prcomp.R 2ad6f2071ad822c631e04705df2b245c *R/bstick.princomp.R b3ec7384552e94c46102d26e38c40538 *R/cIndexKM.R a6df607186ceb18d204494b6a33816d4 *R/calibrate.R f093f401495379d30354e6424606190a *R/calibrate.cca.R f56b52d53b17c7dc8d8c9accd5a3401a *R/calibrate.ordisurf.R d2de008e9d603d4a7fdc1e2fcccecd51 *R/capscale.R bbff0e97ac052b1742a0e4ba082bac68 *R/cascadeKM.R 2e09a82ec52e211afc2ac6e8d4b40898 *R/cca.R 22fd69d812ee7dbaf9b23d6774ab0883 *R/cca.default.R e01e3acecdb9ac8d9195937e9879d126 *R/cca.formula.R 6102056b628e02085c3bfe779a67c633 *R/centroids.cca.R c66d8fbe69ccca94f2ee8f777ff16ae2 *R/checkSelect.R c6c6a44746c586dd8b75204efa17b531 *R/clamtest.R 365fa22c822e835218740e858d256526 *R/coef.cca.R 8ed92f141523fe0cc4c3bb51807b8b07 *R/coef.radfit.R ea10763445cb76b219d18bb274109df5 *R/coef.rda.R ab87ce0f23c88b6b40207a7597fa9b64 *R/commsimulator.R 722959743928d23213409c778c6acbc2 *R/confint.MOStest.R 17c08a04de98c78868754f0040e4528d *R/confint.fisherfit.R 490b90477d595160757812bc06d6a70b *R/contribdiv.R d0f10f160ac99ba936824a49c608868a *R/cophenetic.spantree.R edee3aaced61290b219985d0ce69155c *R/coverscale.R 1b1a6343072d69c5ccbf9a72ba068cbd *R/decorana.R 1169ef2aa4cd76c33c6166b1b253a665 *R/decostand.R 72e1985e74ccaf8785e7d6b6f2005018 *R/density.anosim.R 4a13947927b175862e2266ff9589f2a0 *R/density.oecosimu.R b18236e376b3e0fb38faa1cf10139f30 *R/densityplot.oecosimu.R e5b54fa580331ab24d28dc59110c45fe *R/designdist.R 8fb0105cb21a5e425f72e0085fa669a2 *R/deviance.cca.R 52f41185396ddd9acdcee9df7298d65a *R/deviance.rda.R 1898b0d7b1ee3f860ab52aeb525839b8 *R/dispindmorisita.R cafeabc2133997b3381c9edf6a971abf *R/distconnected.R 51c2b04636ee7131d379d5aa2b3c7877 *R/diversity.R 00136d6f9d6dd5ca16db7633eceb4e92 *R/downweight.R 064822fa2240075d55e6f19fa10fc07b *R/drop1.cca.R 79c66a10794aacaf08f1d28192228bea *R/eigengrad.R f969318c513ddbc66982b7e7da8f3769 *R/eigenvals.R 17a62527ee103c09bfba0c851ab12560 *R/envfit.R 6e63b5fff3b7e834694b8adbdb6c6070 *R/envfit.default.R fe12ea2872df48afc72f59efd3c50c4f *R/envfit.formula.R f443552fe39ec3d6a259f953f4c3af1b *R/estaccumR.R 81098475867f802dea0565fe426c9fc5 *R/estimateR.R cf0a0bf7116ef7a21e090d0c1a76f8d0 *R/estimateR.data.frame.R fde991da12a66144a0cd1aa30150e258 *R/estimateR.default.R 1df3194c88598964282c114cb8db5513 *R/estimateR.matrix.R 8fadb18ee25d5c3689f437a4d3db0360 *R/eventstar.R 5ad3db71edac392b0513ccb96700af0d *R/extractAIC.cca.R ddc17af5f1e4d952cdf0c54048fdc7c0 *R/factorfit.R 7e304b1c384c4d8588e5dbedd9459c73 *R/fieller.MOStest.R c9a0a434a146ba9ebe25a9e72f36439c *R/fisher.alpha.R 05bd12db4d832b01b37b15294e6fa15f *R/fisherfit.R 6baa91137f90af022902e047bde687ce *R/fitspecaccum.R 1db8e420fdd54103774d745d356333b8 *R/fitted.capscale.R 8fc0cd4954e2976b71fe4995291d2fab *R/fitted.cca.R 0080b65cfd48bac5e53961b8e12682e5 *R/fitted.procrustes.R bdb5429c7c23d1f730c5c7c938fb5e09 *R/fitted.radfit.R 30ff7806ee2f3e93b436fa3d1c00fedf *R/fitted.rda.R 57c9a7ccff6a9c066b2aba3475f2330b *R/goodness.R 681e6b2273eac6f1724d13ce51ad3cf2 *R/goodness.cca.R 7af5f06020065621d8466decb16e0aa4 *R/goodness.metaMDS.R 4188d434bdb95c56734b5e76319bf55e *R/goodness.rda.R 8a767726c40223a58d4055759bf41efe *R/head.summary.cca.R d17f4f6be45b52e01cd605b09b56a80a *R/hierParseFormula.R 3d19236ee5dd2f1c678061773895e86f *R/hiersimu.R 5c12aa3da8e9ed06db19bad2f1eea41a *R/hiersimu.default.R edf53c3358944421756412b991432bd7 *R/hiersimu.formula.R d02fc9c672a9b2c4a31065702a3381be *R/humpfit.R 1637bd10b39801c14b65656f29dafcf1 *R/identify.ordiplot.R ba2579e418e11343a471548b2f2bc44a *R/indpower.R 6d30d57bbf47d448d0c267964ad7233a *R/inertcomp.R bf423cb7cf07abc3a4c64229bcc8fc14 *R/initMDS.R 3e3b885b1b13cd00a947c06a6689e773 *R/intersetcor.R c63972a171f76f92652feeb2daf30e82 *R/isomap.R 1e167e69edcee4aa651d97bef81b31e9 *R/isomapdist.R 5abdcd58cf3811e482543d5207114331 *R/kendall.global.R 814a92ded8985a249d4f5973f2c1fd6c *R/kendall.post.R 14f4282484b5ff091f36b30e190693f8 *R/labels.envfit.R 131b9e9e84f94acdf044430143e19ac8 *R/lines.humpfit.R f1d30acca998f0fe17e8363203f1b920 *R/lines.permat.R eb4e11e71eeefa6ec64e4a2580b8af75 *R/lines.prestonfit.R a5d9b7fa31477efc0a1ff76a62988a8e *R/lines.procrustes.R 39604c069428cda7c9d2ed199ac4e28a *R/lines.radline.R f58c42977c7b03c9d2252295068b8846 *R/lines.spantree.R e0f782c5a0cb558189b5b15a5bea072f *R/linestack.R 1dcc7e0504b5468a3bb2253924901e50 *R/make.cepnames.R 106633a42f577ab3e266b146ba4447e0 *R/mantel.R fdb2f4786b31866197c80d827584edaf *R/mantel.correlog.R 6ba992d75c8ec43717adf957c8ff2427 *R/mantel.partial.R e054f13ad65a7f2616561c73557b412b *R/meandist.R 57cb748570098b7e5a5aedbddb39fb84 *R/metaMDS.R 26b26e400ead4cf3de31d7eab29c6984 *R/metaMDSdist.R b4f488ea5456f4f58079691705ac729b *R/metaMDSiter.R f63315501ad2f3a96dee9ee27a867131 *R/metaMDSredist.R 928df675822d321e4533ba2b7cf0c79f *R/model.frame.cca.R 9406148bd2cfa3e74b83adfe24858c46 *R/model.matrix.cca.R f746e66be6ac3ccc3be9cb4b4b375b4d *R/monoMDS.R beae6832197823e4ade3569c021b1693 *R/mrpp.R 0c8ef224eeeb965c8b60bb63d5adf10e *R/mso.R 7e428f1adfdae287a1d64a79c6f2c3bc *R/msoplot.R 7c219818ce5841e957db47f16986080b *R/multipart.R dad9c4679ae4febe6d17af0829b282f0 *R/multipart.default.R 4f3e2c82d5783c04f9a50761c82e2f02 *R/multipart.formula.R f5e79cb1c2dc1fcabb6e6b5cb4dc0828 *R/nestedbetasor.R 85d4744650c1e2a0edf16809b77f7ab4 *R/nestedchecker.R c15884dd28790c7521ecb33175c86e5c *R/nesteddisc.R e65023174f4ce8874a2f88f332af5a37 *R/nestedn0.R 917143cda17f75f9219e7263b79b1fab *R/nestednodf.R cf4c7acbbf20366f629dee40c9203764 *R/nestedtemp.R 74b2723851155de631716fa479f8ea38 *R/no.shared.R 47973ff187f68836a19d20ea37c60868 *R/nobs.R dfc5c85777c1dbc55b850dc1ccbf115a *R/oecosimu.R 7b3988a207ecfe1ea574c5857ffcd2a3 *R/orderingKM.R e3d108eed97633040fa22c2b384e19e4 *R/ordiArgAbsorber.R d2d5d94504676e6b1edf25b0c024edf3 *R/ordiArrowMul.R da71b576fb9908051a545375e14a80e0 *R/ordiGetData.R 99c1ec285e2afe4fb8beccbd507a123e *R/ordiNAexclude.R b78b985ccd7179b59e031bce191354da *R/ordiParseFormula.R 119f2a2cb24ca7a63c8ee591b50d8ecf *R/ordiR2step.R 7757339f5b8899cb54f13da274abda66 *R/ordiTerminfo.R e06d56a6e7d47767b9e71a73cbd3a80b *R/ordiarrows.R 76020bb8174d580dd0f4866df2172339 *R/ordicloud.R 793f91b9bf7c35f335949121d6f317c9 *R/ordicluster.R 7160bf241bdbe59c1145160435b274ae *R/ordiellipse.R c253906529c77aead16b293275f1afc3 *R/ordigrid.R 9ca9cd415622e47453a06897e2fde751 *R/ordihull.R b8841b7492a95f04da5952d06da72e3f *R/ordilabel.R 20a6f500c31e6640de535f0730b69a55 *R/ordilattice.getEnvfit.R c805e6801ef30758b9f7718269cabdfc *R/ordimedian.R 55d2f18681d065ea6dd29e0f1e64772e *R/ordiplot.R 58a7e6f3453b1d95e1984c392577d4a8 *R/ordiplot3d.R fc7bc36cc7cf7f4280f071c831a8a6a6 *R/ordipointlabel.R 9d2a860c9143446f950755327af2f7ce *R/ordiresids.R 601554e97800197af1bc50993406d9ef *R/ordirgl.R 41949d4c859f08bc5a978791d387d1a4 *R/ordisegments.R 6766b4753ea23da33975045e3943262d *R/ordispider.R bfabbea279d3586a727ab576c981d028 *R/ordisplom.R 2d233485d1aa0b604f1949c2a3691f61 *R/ordistep.R 9511ac94227ca4c517afcaa335ccf510 *R/ordisurf.R 1951a3f4c16c9d500145a17b293083cd *R/orditkplot.R bc3671e5b7a30e2849d3b59f65783c97 *R/orditorp.R 7148d283d2447ac65146d5e3237b0a9a *R/ordixyplot.R c53e9402a842833d80a8df39c0adee6f *R/orglpoints.R 56c4036863990ae0ec88a8d459540fd0 *R/orglsegments.R 7ea9d2eb332869c020abe77e3ac6e416 *R/orglspider.R 647cd6f0ffa48070eeaa095bb9057884 *R/orgltext.R 9fe401c201c03826754ec5613f6ecd71 *R/panel.ordi.R 94ff61e031b751b9594400a51decc13b *R/panel.ordi3d.R 3bab50920d7e58e2bf0b96a6b874cd9d *R/pasteCall.R 8a81288380543076a5a9fefe5ffc7502 *R/pcnm.R e08110689dfeb1098cb4d9194f084c66 *R/permatfull.R 26a9634c5ad6bc16e2e24c283e33b761 *R/permatswap.R 909306255cee4f36d2ba7ba13d376e90 *R/permuted.index.R 7aedada06df1c5e0dff74f77e4479fbb *R/permutest.betadisper.R 4764a3d49455270e5217b72aa4d68787 *R/permutest.cca.R b4e77b98f86c4b567d687b64e3aa8812 *R/persp.renyiaccum.R 011a26868189ef4f3516a1b1931a2ea1 *R/persp.tsallisaccum.R f7c8d52c791489d956a7fd833913f242 *R/plot.MOStest.R 5334397cbe3c0188928c4bd3146e118d *R/plot.anosim.R 58d63201c7f61f455b0394b7a0e1235d *R/plot.betadisper.R de416206dba5566d70080bc14e86382e *R/plot.betadiver.R 9023fd332556779fe9405e0714ec5dae *R/plot.cascadeKM.R d6efc684c3506870243a337fadd85ed8 *R/plot.cca.R 38ccde16c9eb9028219d27f14d343b3e *R/plot.clamtest.R 8c043a9b7262c33ec2054045cdaa1811 *R/plot.contribdiv.R 0ab3b62ac155ede193867f43640dbd34 *R/plot.decorana.R 090911b19b4659e69ba80dab85bc7ff7 *R/plot.envfit.R 10bf121300b684a8173f680de54f452a *R/plot.fisherfit.R 9a4f1746e6e5b80b48994f404e72eb74 *R/plot.humpfit.R ed258eefbe3facce3533a16395217fab *R/plot.isomap.R 55a0851dbcb231f65f8da29e2b904780 *R/plot.mantel.correlog.R 45b6355daaa38bdd65f98fca234869ed *R/plot.meandist.R aeddafb96f777e9905a1c4660ed3cadc *R/plot.metaMDS.R 2574a84757435e0594f89434a9f4ec82 *R/plot.nestedtemp.R fdfbb536547823f1c25bcf756c33d19d *R/plot.ordisurf.R da30b6ae5fd0e30543f18064cf19b54a *R/plot.orditkplot.R 7e136913597f9f78ac069be6a5a3f465 *R/plot.permat.R 90fd0b03484169b406eeac09c33cb75e *R/plot.poolaccum.R fdc1beae72f52a43883861a8b56bf289 *R/plot.prc.R 6cd9c1a91d03a8afb8f9148f0d369cad *R/plot.preston.R 31b95161a7558e111e3c01778b9d17db *R/plot.prestonfit.R 5159170150e3c6d1ed92b5c3ec984b75 *R/plot.procrustes.R c7e5c6d58944d75ab6dac163e051769f *R/plot.profile.fisherfit.R 02ff38f3fb337a63534356255b8641a9 *R/plot.rad.R fc2dc1b63ae6f50067a7a376c736394b *R/plot.radfit.R 97e04e44547a38580a988bbd684e4cb3 *R/plot.radfit.frame.R 360dec911e8d4e772f888d89b8e0f6f7 *R/plot.radline.R 8da525de886af7ced0065ecc8add6fa9 *R/plot.renyi.R fc8b4dc932acc72ed789278055077b88 *R/plot.renyiaccum.R e71b966111f99c7048ebbe26c1aa6a12 *R/plot.spantree.R e449c6ef786f8802c9806b51248b66cc *R/plot.specaccum.R abc96c8853871035d494dfa9086d4d6e *R/plot.taxondive.R 6104fadf391072e78a8f2825ac41ceb2 *R/plot.varpart.R 00d109fe7fc29440698b9f1a4bbc876f *R/plot.varpart234.R 4c9de900b73bb0c12950b9f2b96a9901 *R/points.cca.R 3fbe4782d2c376d98f23db8890c42b3b *R/points.decorana.R b5661457c540b56e77eba97b8b290a91 *R/points.humpfit.R a0e1e2d579fa8c1992a26a2e8d435750 *R/points.metaMDS.R a54bcddf1b7a44ee1f86ae4eaccb7179 *R/points.ordiplot.R e352171f478eb27cf4a875cc3a1693fc *R/points.orditkplot.R 7409704e2e94cd051524e8c5af3bdcb4 *R/points.procrustes.R 80d9cee7ff1fa7ee8cb18850711a14b2 *R/points.radline.R b4fbbb0786258e1e83c4262e0db2aa43 *R/poolaccum.R 91aa7fd2fbd99f8e325932d59886dac7 *R/postMDS.R f9dcd972e5c81ce936c9ec5b296d484c *R/prc.R 32a52d09ade017e52d96eb56c05904c3 *R/predict.cca.R 049f41cca1b39bf0a221723855cffcff *R/predict.decorana.R e9107f2a97c429ff8e45c62a3671c281 *R/predict.fitspecaccum.R 06cca728e43d29da2528b01dccb26962 *R/predict.humpfit.R 3eaaaf25580077e7dff217c3f237e37a *R/predict.radline.R 35a61b21f7ff4d24451aff811add56d7 *R/predict.rda.R eb223fbfded71ae4f0b374c1e92c3f2e *R/predict.specaccum.R 4f56d16f5bf8f9af3477c23137a70fb5 *R/pregraphKM.R 32d5ccabf03e23941fe3dcb2182b5c8f *R/prepanel.ordi3d.R 0bb3fa9e3847051a28ceb186023bb952 *R/prestondistr.R 7db2fd99abc08bf5e1341e5b74fb4617 *R/prestonfit.R 953d32321b6e12a30209a8cda78244c9 *R/print.CCorA.R 3a1584c7d991683a61271fb2fc002b73 *R/print.MOStest.R 1e07dd6a9eefb1d0af31a4db98c94305 *R/print.adonis.R 15b31674cb74df69467902853a9254d1 *R/print.anosim.R 7c99a949e155f76c3a223741afb39836 *R/print.betadisper.R 2945b0c68fb04cb2c7dc460a419c5478 *R/print.bioenv.R 528c225f34769670a4a3049a0e29ae59 *R/print.capscale.R f757010a0187dc81e9b844df25c58640 *R/print.cca.R 6d0cd7929afcbe0d192c980dc5196555 *R/print.decorana.R 65e888e34fa8a8e1d5b577fbadb3161a *R/print.envfit.R ff355b68b19f8d8c29917ca33d4e8b8d *R/print.factorfit.R 53efa849e48c5c91a51f42282237253c *R/print.fisherfit.R 6da316510cb840a6a9dd8d31d0e205af *R/print.humpfit.R b31dbaa6493fdda1f865f95b3e889aab *R/print.isomap.R 6263b03c7eb5ae61f917888597abc4fd *R/print.mantel.R f92fd82d10ce91e2cba2239e756e1332 *R/print.mantel.correlog.R 9d6b6102e251f155c0b9af98d37a5f49 *R/print.metaMDS.R f221ea2ab4e8903ca1ae735038bfba04 *R/print.monoMDS.R 8bd5bbb931a97ddada79e4552bd614b8 *R/print.mrpp.R 946b3b708190211e9eb1acc94ffa102d *R/print.mso.R 7c074bf7870cb4c306c6181769b28a19 *R/print.nestedchecker.R eed481e994c01ec4d7b443fb8cafad46 *R/print.nesteddisc.R 91c6a9b43c8b045d11a4b8834d1c9d47 *R/print.nestedn0.R 0f8e3935f95b67b96e066435743bbee0 *R/print.nestednodf.R 2f1732fffc2fb487420a910a1d3f5971 *R/print.nestedtemp.R 58402a74333f1bd193dc7706f930a1b9 *R/print.oecosimu.R faf2620b1fbaec410af7b6e3159510ce *R/print.permat.R 575da3562c07c6324e84288ac603b011 *R/print.permutest.betadisper.R f0c12622e4f250aacca5b7fabe54cbd1 *R/print.permutest.cca.R a01e4eeb80a020c9e516f47f559baa98 *R/print.poolaccum.R c0f0559d9f53c8635bba01f1f90b7cc3 *R/print.prestonfit.R 4abe25d64d3e55ef83ece3691f77f900 *R/print.procrustes.R d971f6b79980b918b6b39772c53bedbd *R/print.protest.R 480adb7c75b99e469b5600c62aa8d12d *R/print.radfit.R 8b1a0e667c16cbd376a88962cb3baf19 *R/print.radfit.frame.R a589e795a078e79a758c1c848b728be3 *R/print.radline.R 4e452412505b056333b97c8f5fcdc439 *R/print.specaccum.R aacebed613c7a8b259424efc39b4e061 *R/print.summary.bioenv.R e5b625997dd416b43f2635501e486712 *R/print.summary.cca.R ce329fb389fbd69d5e212ae7f504bafe *R/print.summary.clamtest.R aea75769140cba757b5363d87a1ad2ab *R/print.summary.decorana.R 7ce80bbbf0f63ed74b3d9cf7d84944f3 *R/print.summary.humpfit.R 59e34aed90403b18e80cc89f75edd9d5 *R/print.summary.isomap.R 8b2f5e8d922b8372e2515bdf0d083ab2 *R/print.summary.meandist.R b3eb24e4b56838e9db1811c07d37a571 *R/print.summary.permat.R 55399e1d3a3bc601466c9706b9caf1dc *R/print.summary.prc.R 0e4bd2b0b5395b17365888876460fe85 *R/print.summary.procrustes.R 148aa3651ac7d6a0fcc2b5f3dfb98d9f *R/print.summary.taxondive.R 0511b5e09f1af985431cac7c1b74a8cf *R/print.taxondive.R 46680885c99c48e4bc5d84203c40d4b0 *R/print.varpart.R c80f3931f05ab3066dfe93b98e737856 *R/print.varpart234.R 189ac58ee6b91e4e40ef0b89012b8ed6 *R/print.vectorfit.R 8917f5ef5398c984e0e2675c83e74c5c *R/print.wcmdscale.R 083d526f54611d40ce749ffe95f169ae *R/procrustes.R 819af0297e5d0a907f7fa91319c67e96 *R/profile.MOStest.R 8159854c33821cea4cb77e34d882d79e *R/profile.fisherfit.R 2f6b69115ea549102dad9b1b22c88034 *R/profile.humpfit.R 4e28e2b84d11d8f8b0ad6755bcbe2ef1 *R/protest.R 9169bd797963b5b121684de528651170 *R/rad.lognormal.R b129148e6efbbe1c45482c93d66f959b *R/rad.null.R 949aca6b5bb7954a91819b17e515e396 *R/rad.preempt.R 5a7e143e1292681c3d9b1e7b1b792aa6 *R/rad.zipf.R 6780818aadc7b8c92c8f9a26a84b7dc0 *R/rad.zipfbrot.R 23fd677c0c8d6f4a8e6c6444d2cc8601 *R/radfit.R 235a5213c266f1b2101c767ad1528888 *R/radfit.data.frame.R 2f6d8082f39540bbe7cf0e0cf3c666c9 *R/radfit.default.R 1241d5e79bd4e9a9fbeb6a4bf4c86023 *R/radlattice.R 33e294ffd0c75b25d36d18d4a3ad9884 *R/rankindex.R 0a7c015a3700b34f29cb6bb0b94f68d2 *R/rarecurve.R 6be7a6edec618f464dd7c783eca371f0 *R/rarefy.R bf743ab0025f40797f607ce38b6e3636 *R/raupcrick.R 8116cefb40383fb571abb9fb82091087 *R/rda.R f9008aa5cf3109a3607aca9ac6bfe8d7 *R/rda.default.R 90b562e8a94febce8430a344392a2943 *R/rda.formula.R eefe337541bf9dce01852dceeac12e1c *R/read.cep.R ef65ea5fb624aef7e34284d932503876 *R/renyi.R 80b6ecc82b39e2feeeb9059764a9a2c3 *R/renyiaccum.R 90a897e14094cc1eba66c5f59a5bb79c *R/residuals.cca.R 38df11064481bc21f8555152cfd3d115 *R/residuals.procrustes.R 4ee8534c438c824f1cf4ea62337e259d *R/rgl.isomap.R 9134d94e86e79778b460a4e522fd7c04 *R/rgl.renyiaccum.R 4ffd3879dcf18d0bdef8ffc8bf5b8ad3 *R/rrarefy.R ed66f1e11f53f7fbdbd8663de2b7f5dd *R/scores.R d46cc2163dbc117a978f64d54df7bbd4 *R/scores.betadisper.R 341ee43f8524dccb5e369513a16923b1 *R/scores.betadiver.R 66a78103e2797044c3a7d3ba15d43811 *R/scores.cca.R 447810692c53fab8cd6907ec920e0852 *R/scores.decorana.R 2673ef1fe5912531497baaa07bfd9920 *R/scores.default.R 6415eb8600a7e516ae6c053832c45357 *R/scores.envfit.R 7609ff8ca8b5d96e69f1933e4f90c483 *R/scores.lda.R f60983f80088428cc3ce955a975fa6b3 *R/scores.metaMDS.R d07740764d55fbfe7560ad101ea495a1 *R/scores.ordihull.R f146575a3f60358567dfed56e8cbb2cd *R/scores.ordiplot.R 512cedf50891372019cae370b240a742 *R/scores.orditkplot.R 4755a38c8b83b76f123b8e84cf47b700 *R/scores.pcnm.R 1a806bf5c7f715aaf5f4841cfcaed35d *R/scores.rda.R 42e3e9222d18a33abb561bac1db5bc6f *R/screeplot.cca.R 71a7f620655b068c3a53561fc16bfd39 *R/screeplot.decorana.R 3fe910b739d447ba5026f077cb0c670d *R/screeplot.prcomp.R 66d8c6dfecb51ca1afdf309926c00d08 *R/screeplot.princomp.R 95f15a952493d1965e59006be7f0b8d1 *R/showvarparts.R d634237d94bc2d40dd8e5f2170c49353 *R/simper.R b35ee7d9cdc86eecefb5dcf478fc8abf *R/simpleRDA2.R 73367e17a66ffeca6410771f0ca8d1ef *R/simulate.rda.R 9f235c650efc4217a3cc88996b627e1d *R/spandepth.R 3bb1adac8b593f81ebf4c2146ee112b9 *R/spantree.R e1857ce9bf27f6a66ab2d0f7a2c05478 *R/specaccum.R 3c94a17c2602903234a65cb244053130 *R/specnumber.R 6e382a42402a7bc206b6eb6b6c278d77 *R/specpool.R 77cc19684e9ceb27500ca7f802923328 *R/specpool2vect.R 2cf0545588fb2bb86185f71c21bda1c5 *R/spenvcor.R 33d884aae53dcc5fa80d9e9ffae4515e *R/stepacross.R 30cd106b7947532f7eb5969d7a864f40 *R/stressplot.R a61ce658c68a8b17e094f7b0040e4efe *R/summary.anosim.R 7145185243348b4a1be616329b87b9ff *R/summary.bioenv.R 772628c3a5de67f983d6ba15d8274b40 *R/summary.cca.R 7bbf5652f229c2e7920c43192bb2e7b1 *R/summary.clamtest.R bf8be2e9b02c1a3cd5f3ad0005e8354c *R/summary.decorana.R 4c9fc84fd70c4555d5b5bfc1768dc5a8 *R/summary.humpfit.R 51d3b042e199d201235f10f3d4a57f70 *R/summary.isomap.R 76171bbaa9984ffbb31cbdd9e1771f4c *R/summary.meandist.R 76587e48a9cc631cf4e9f2e369099fce *R/summary.ordiellipse.R 27c7f052d2d9674d898f0aa3d741a8c4 *R/summary.ordihull.R 7d5283ea3d2741f317cb59df17bdc4df *R/summary.permat.R 3ef798c28399894f4bf0ba649360e69e *R/summary.poolaccum.R 71609e72f80900e7c461440336c98c97 *R/summary.prc.R a8c1bf3d3f371f3ee5a3de3c39a4113a *R/summary.procrustes.R 6674c4a162593066795d89bba5abe409 *R/summary.radfit.frame.R 25e8a947666bed660358e359730160d9 *R/summary.specaccum.R 8f34602692f6a5476bb4a6d7b2a269fe *R/summary.taxondive.R 7c55757d8187363116d3561d53cbc5ba *R/swan.R f1530a301997e88e27e2eb072e295515 *R/tabasco.R 62bc8a0693a71adb1457b0a102d8951a *R/taxa2dist.R 90ec6192eb43f8fd29bc93485f4ef293 *R/taxondive.R f94b7781111e04de4ae1f7df67003ca2 *R/text.cca.R 1f4d9ba97695c0fa99456f427114b049 *R/text.decorana.R 6a6e426f6e464bb7bdaa75d92674562c *R/text.metaMDS.R 974bdc93cd9b352d30debf3e93111136 *R/text.ordiplot.R 846003f5f9de23241805042ac459ed1d *R/text.orditkplot.R 0fc7a75cf414d76cc751cc33ed5d6384 *R/tolerance.R 207fe2c0d2f5da03f65e287f93ea2d15 *R/tolerance.cca.R 4c4be7182a861de34673afccd1bd372c *R/treedist.R 350a6ba06c34f2efc74c6aa503f8a7ab *R/treedive.R cf0f2cbf17bbd944d455f71918ab88eb *R/treeheight.R 4f9be34a32cdc1e7694bbbdc9a1fd6d3 *R/tsallis.R dacccbf53e46fe0d4d98af2cd45c2569 *R/tsallisaccum.R a0682e3051c01f8f5823b158c018d18f *R/varpart.R 8d09b6b6390c2866234763beae855cf3 *R/varpart2.R 77fef5d5355715c9928edd3b9995d415 *R/varpart3.R 7f4f5d715a9b3e1a916f72ffbfebcc19 *R/varpart4.R 06b069e905a89610adc3ff8aa4878c73 *R/vectorfit.R 7695b046ee79a9b3140a22d2bed6e048 *R/vegan-defunct.R b43aca5a7abcce2f36629ed4036add72 *R/vegan-deprecated.R 722ab25ac95b6c419b29a94347916f23 *R/veganCovEllipse.R c33a08b31fabd66594d97a4362c85534 *R/vegandocs.R 5be53abd0d608c314dc6a9f071bd676d *R/vegdist.R cbf0bc1d54508fe56afcc8bd789abd77 *R/vegemite.R 5d6047d7f63f04ae9ff40179c534aa0b *R/veiledspec.R 1f6deab4b61a9be48be43e80703cd4b6 *R/vif.cca.R 322254f8bc3b02f7a971058cbdfa9edd *R/wascores.R 860e4de36a01011c639b9eafd909b673 *R/wcmdscale.R ecfd48e2f4df6bcd683a87203dd80e12 *R/weights.cca.R 76c939e9fe7776e51eeabc1d44be83cb *R/weights.decorana.R 73babeed9df14635d99b1a619a1286e4 *R/weights.rda.R 4138f57726620d493f218e5e3da0013c *R/wisconsin.R 17cbf4b5c186fe577cf361f0254df1d6 *R/zzz.R b92ea8ce0eb1f5860d535645fd5286b7 *data/BCI.rda 31eb8ea8153321cb2a5e9040ef12d50f *data/dune.env.rda 51793132b98f7dd3c963f2500a190eaa *data/dune.rda 4ea1caae5860aea35328b4d7102e55cf *data/dune.taxon.rda 442171925629c4ef13f9d70601ca9cb3 *data/mite.env.rda c51905bd025ccea2737527b6fca4a081 *data/mite.pcnm.rda 272a07c3f4162668600425cb1a043e10 *data/mite.rda 91993cf999f1d254da6b660fdc667af8 *data/mite.xy.rda 89b86c533283705a67a0d1f65c69a485 *data/pyrifos.rda ee3c343418d7cf2e435028adf93205f1 *data/sipoo.rda f87df84297865b5faf31e232e97a0f94 *data/varechem.rda 82153b3e47807b926b77cef49900f422 *data/varespec.rda bf2ad7c62163afdaa41ea336bdaeb88c *inst/ChangeLog ab9b7fd3e8cac85ace5c94673e9382b0 *inst/NEWS.Rd 9abfab8b05c34dd283379a7d87500ffb *inst/ONEWS 47feb16ee49ec7e6483eebb881fae159 *inst/doc/FAQ-vegan.pdf a901a5efa50b13f8ce50b95bada4a1b8 *inst/doc/FAQ-vegan.texi a712f5f699b09276e523f83ce3b731ae *inst/doc/Makefile 262d0bb9e1efda623933fc1a42fd4b96 *inst/doc/NEWS.html bfad8283cb33e6e2837f62360671a014 *inst/doc/decision-vegan.Rnw e4946ba807e8c7db84096c9320a9b36a *inst/doc/decision-vegan.pdf 027057d32bd1bb6baf990ecd9845711e *inst/doc/decision-vegan.tex 51f01c074c07c22f3da55c597ca05d9a *inst/doc/diversity-vegan.Rnw b97571ad2b3609cd358903b951c1f869 *inst/doc/diversity-vegan.pdf 50b65b4730835c95babdb6e5ed974868 *inst/doc/diversity-vegan.tex 53ffe702420a71c3cbc8b8287b25fbfe *inst/doc/intro-vegan.Rnw 3272a98bf658a5a396a0e3fb9182f52d *inst/doc/intro-vegan.pdf 3d58488f31e30b1c80ac9755d7530784 *inst/doc/intro-vegan.tex a1c35ea488b715441cd2269eb6998945 *inst/doc/partitioning.pdf bafe698f5c543e20d4c52659545677bf *inst/doc/vegan.bib 8790e1afcfbf88c374d6c87928eab54f *inst/doc/veganjss.sty e2d32a2a53e75e8be60574c7e1cc3239 *man/BCI.Rd 33db614085aa448f4241cd79ddc62461 *man/CCorA.Rd 525d1213753747626c919c22d14073f5 *man/MDSrotate.Rd fd218be03aa2591e5123d11780ccba1a *man/MOStest.Rd f2823a48acb6f861404b6682b3f52a45 *man/RsquareAdj.Rd eb6df0e2eba46d2bbdc056baff276481 *man/SSarrhenius.Rd d7499407f3dd1cc977ea094eaa2af35e *man/add1.cca.Rd f7a0445e698dc21782cd113d867f7142 *man/adipart.Rd 88eaec1454840ff74dc06a22da6da672 *man/adonis.Rd 0443d02a7f37af2e14e745c3c1eb3aee *man/anosim.Rd 427787a2ec7a1cd49df31a08cfa1d74b *man/anova.cca.Rd c57af27fa11dadcd48981fcf42b2d221 *man/as.mlm.Rd 8e3718248ff8d48e724654ab17caa2e2 *man/beals.Rd 362efe66c82eee9e301f516cfb8ab25f *man/betadisper.Rd 1336f0afb69a05bee9f6e7706d81d038 *man/betadiver.Rd b04c2fae35dba2d97cb248814d5e2fe9 *man/bgdispersal.Rd 890f6ec54dcf7962cbaa197ef7be8339 *man/bioenv.Rd 1eab4a6369fa1d203a4a3f41f4ee4c06 *man/biplot.rda.Rd 88602656153ee95f10335487273e132d *man/capscale.Rd d3c1067cb5e4dc6f6b9a1c7d94e70ab5 *man/cascadeKM.Rd 01df6d53d022485e95f39e7c29d2d61d *man/cca.Rd 97385598d1197eeaf8c987bf34329013 *man/cca.object.Rd 0a27f941c844520672e5ca370fda6719 *man/clamtest.Rd 335d0f7691ad9d0c48fffce9f9db6201 *man/contribdiv.Rd c41033fb9c572365490cc23b9870c950 *man/decorana.Rd 00a34002a7464d1008b2ba63526a4afe *man/decostand.Rd 5a48fad137cfbbc09ff287edb5170542 *man/density.adonis.Rd 22e3451a1cc9e294c2ad0e1a4531b136 *man/designdist.Rd c01e0664652fbc8ef4963059bee4e422 *man/deviance.cca.Rd f58b474141a1b0fdf438bfe6dd8da0c9 *man/dispindmorisita.Rd f3f742efa7511a4c33108a00b512ebd9 *man/distconnected.Rd b9e1c696647b4029f944e830184eb2c9 *man/diversity.Rd 31a227bd7e2dd4cf92c9b936e1f49963 *man/dune.Rd 5bdeafda9c2d62feec3bde6b4cd49e3b *man/dune.taxon.Rd 5f5f8c7df063606ccde6124c5dbe8add *man/eigenvals.Rd 516c0b3d11d2746d15ead8919a35803c *man/envfit.Rd 919976c144bda3a083af284255ea3695 *man/eventstar.Rd 5b7ba3db111582ad3e1f646bc8061ea8 *man/fisherfit.Rd 841b3f32510ed2c3f64186d623f858ae *man/goodness.cca.Rd 4d5e44b51132481ab920292b2651041c *man/goodness.metaMDS.Rd 81f199c3ba2c65a7b6f81cbb7cc9886d *man/humpfit.Rd c8fea575af3da292987d4f8c4aa831b0 *man/indpower.Rd cebefbf4e3090e7f7605c2f5ce303da2 *man/isomap.Rd 5f2c36639ab3e98a5fbb03bb8c8adda9 *man/kendall.global.Rd e473a6d2589993b85fc1176866fdde78 *man/linestack.Rd a83cd418e2a052ea32ef431bce2e3787 *man/make.cepnames.Rd e8a27e8ace7bd56776794ebfd8391d64 *man/mantel.Rd f5db928e02639d251389edb1cd36ff13 *man/mantel.correlog.Rd f0f939023236abf04e5af5e2a3652082 *man/metaMDS.Rd 4cfb02239809fa03b28e10ec8e8c9c6b *man/mite.Rd 0d0876437491b3701e4d20cbbf0d1b6f *man/model.matrix.cca.Rd 09bf57e9d9ae0178eca8facf3f9d20b7 *man/monoMDS.Rd 6ebc1e9be42fd2ffc21f4d8a81512f91 *man/mrpp.Rd 382e99ee5b67d89f2f9ad440236929f5 *man/mso.Rd 56a812e640082ccf928224114330130b *man/multipart.Rd 646fcb9015f0f3dc520ab2be0db5c042 *man/nestedtemp.Rd 2907c7465be1247d2ed930025b877403 *man/nobs.adonis.Rd ba28e7e71d0637fd962d53d1e23488c0 *man/oecosimu.Rd 3e6f6e4c473e4ea91c18d34bf487ff0c *man/ordiarrows.Rd 03aab4cb7ca71141281d2abd3e810231 *man/ordihull.Rd 8f8a34c5fcfcc1fe9f88ca16e84a1da6 *man/ordilabel.Rd 994cfc973f88c682b741e48377e1b9b4 *man/ordiplot.Rd b88713c8f69a6a0e677d406b51d2062e *man/ordiplot3d.Rd ca2ed47e3adb6f4ab9aa861872b07e4b *man/ordipointlabel.Rd d4d27a34b2e7d9d1b732a0d06cb9d9f4 *man/ordiresids.Rd 6bd225981e288d67974938ac56fcc7cf *man/ordistep.Rd 7b62153e759a450cfececacbd385cd63 *man/ordisurf.Rd 42dfa56db8adbd0a44e716086dee6d7d *man/orditkplot.Rd 8785cc44c56d1b24fbcbde8de9e325d5 *man/orditorp.Rd d971701b3c6f89b3a6b358a3966a43d2 *man/ordixyplot.Rd 59c7d8943e1e82c1ed771ee91eef3e66 *man/pcnm.Rd 864ed25d069da12a2226310240f1f740 *man/permatfull.Rd 807092c467db330149046d1dc9e9ab91 *man/permutations.Rd fb24c58ca61caf767ced5bd79dbff57e *man/permutest.betadisper.Rd 47898b675bb6d36fce6961e6a70d8d57 *man/plot.cca.Rd 9f296f0830397598ee4849fc006762d1 *man/prc.Rd 165334d6ad139cadd36957afd6d10923 *man/predict.cca.Rd 80aa98f140babc312081f0a01ad3a77d *man/procrustes.Rd 01a6ca946df5ad493adfb54003ad8e00 *man/pyrifos.Rd 26f6e755b8b18407ed6c30dbf7887533 *man/radfit.Rd 3e70bfa0a8ae5d4c3c60dba77500b584 *man/rankindex.Rd 64342c9ea7e7b2607d433c3346f9726a *man/raupcrick.Rd 2867f5f71a47da498cbadf9aaa01b2b6 *man/read.cep.Rd c1ffd9ca78ad968e1da11fdba007cbe8 *man/renyi.Rd 5c25a88ca55fabce5783509c706faad5 *man/scores.Rd 9732a76d9f971df9db16b97d5746615e *man/screeplot.cca.Rd 947c357c856ef350340eb54673c0bc5c *man/simper.Rd 45cd418b2264b4eb6abc89cc11a7877f *man/simulate.rda.Rd b34910fa6ed6c9bfbd90a7f7443a135f *man/sipoo.Rd d7dd63e022633049766cffdaf6cac723 *man/spantree.Rd 8d9d2fe132aaa595df4d7652dbe68c54 *man/specaccum.Rd 53818a4edb1d52d425065bea76963021 *man/specpool.Rd 5b9e51c85395f80f8504954e4175f877 *man/stepacross.Rd 0aac5f5c8f58fc8fe1cb6c0ba819b196 *man/taxondive.Rd 85f77fcf89b48586502c00baef8e5561 *man/tolerance.Rd bfe306a0cb659930e17e46d191f7629f *man/treedive.Rd 5a1c08a3f35d82027259b3000e94cd2e *man/tsallis.Rd 033dd7d7917185cea81e4d7afcd59df9 *man/varechem.Rd be68944c43a32540e71a0e0b215be64b *man/varpart.Rd 699122da39bdbbfbfeb6a1f8f078242c *man/vegan-defunct.Rd c8e9610be158d93af56d7db754e560d9 *man/vegan-deprecated.Rd e8d8b52de649979b17b484d03775c5c0 *man/vegan-internal.Rd ec9c7e972e815897f61fb3fdd16a008b *man/vegan-package.Rd f6f284ceb3b9a39e7b079936f9400cc2 *man/vegandocs.Rd 197fe8ed2fe66db294381cb3c08325e1 *man/vegdist.Rd 982fdb71847d8b7338c7effc5432027d *man/vegemite.Rd c3209a8eff0fe638d3a43b25ea5bec16 *man/wascores.Rd 7d16b5020895bf5ead253010c733e7e5 *man/wcmdscale.Rd dd4512521b5b7a678f87c7f27d6b986c *src/cepin.f dd22a1632081402e62320a4c0d6b2aa9 *src/data2hill.c 7703ffdb64c5f31de56bfd8253877ad6 *src/decorana.f 87b05dd087e591f1f8e92ecbf1983207 *src/goffactor.c e19f79f4b3fef915a3ece2db284475f6 *src/monoMDS.f 9eec9972cea872032eb9310491b93ab2 *src/nestedness.c 0299086afe16bd7a4b57835d1b11f6d8 *src/ordering.f 31bdbe9b08340e1662a62cf6e61ade6a *src/pnpoly.c b9b647fcf8a3e59e10b9351fae60ec06 *src/stepacross.c 87233fad519f344865adfc74c92c2a1a *src/vegdist.c vegan/src/0000755000176200001440000000000012122046457012144 5ustar liggesusersvegan/src/vegdist.c0000644000176200001440000003763512122046457013773 0ustar liggesusers/* * Distance measures for community ecologists. The measures here were * recommended by Peter Minchin, since they have a good rank-order * relation with gradient distance. The standard distances are found * in standard R library mva in function dist (distance.c). * * The calling program defines the index by a number (internally and * factually). Extra care is needed to get the numbers right there * above when calling the code. * * Number "99" is an extra case: It is not for vegdist.R, but for * something simpler. * * (C) 2001-2005, Jari Oksanen. You are free to use this code if you * accept GPL2. * * Oct 2003: Added Morisita, Horn-Morisita, "Jaccard", and Mountford. * May 2005: Added Raup-Crick. */ /* Standard R headers */ #include #include #include #include /* Indices */ #define MANHATTAN 1 #define EUCLIDEAN 2 #define CANBERRA 3 #define BRAY 4 #define KULCZYNSKI 5 #define GOWER 6 #define MORISITA 7 #define HORN 8 #define MOUNTFORD 9 #define JACCARD 10 #define RAUP 11 #define MILLAR 12 #define CHAO 13 #define GOWERDZ 14 #define CAO 15 #define MATCHING 50 #define NOSHARED 99 /* Distance functions */ /* Manhattan distance: duplicates base R */ double veg_manhattan(double *x, int nr, int nc, int i1, int i2) { double dist; int count, j; dist = 0.0; count = 0; for (j=0; j 0 || x[i2] > 0) { dist += fabs( x[i1] - x[i2] ); count++; } } i1 += nr; i2 += nr; } if (count == 0) dist = NA_REAL; dist /= (double) count; return dist; } /* Euclidean distance: duplicates base R */ double veg_euclidean(double *x, int nr, int nc, int i1, int i2) { double dist, dev; int count, j; count = 0; dist = 0.0; for (j=0; j 0.0) { numer = fabs(x[i1] - x[i2]); dist += numer/denom; } else { dist += R_PosInf; } } } i1 += nr; i2 += nr; } if (count == 0) return NA_REAL; dist /= (double)count; return dist; } /* Bray-Curtis and Jaccard indices: * * Jaccard = (2 * Bray)/(1 + Bray). If Jaccard is requested, Bray is * calculated in this function and it is left as the task of the * caller to translate this into Jaccard. Actually, Jaccard is * redundant, but since people ask for Jaccard, they get it. */ double veg_bray(double *x, int nr, int nc, int i1, int i2) { double dist, total; int count, j; total = 0.0; count = 0; dist = 0; for (j=0; j 0.0 && x[i2] > 0.0) sim++; if (x[i1] > 0) t1++; if (x[i2] > 0) t2++; count++; } i1 += nr; i2 += nr; } if (count == 0) return NA_REAL; if (t1 == 0 || t2 == 0) dist = NA_REAL; else if (sim == 0) dist = 0; else if (sim == t1 || sim == t2) dist = M_LN2; else { J = (double)(sim); A = (double)(t1); B = (double)(t2); dist = 2*J/(2*A*B - (A+B)*J); for (j = 0; j < MAXIT; j++) { oldist = dist; dist -= mount_fun(dist, J, A, B)/mount_der(dist, J, A, B); if(fabs(oldist - dist)/oldist < TOL || fabs(oldist - dist) < EPS) break; } } return 1 - dist/M_LN2; } #undef MAXIT #undef EPS #undef TOL /* Raup-Crick dissimilarity: R code supplied by * Michael.Bedward@environment.nsw.gov.au. * * Here his original comments: * * "Attached is a little function to calculate the probabilistic * Raup-Crick dissimilarity metric for presence-absence data. Rather * than the permutation procedure used in the original reference (Raup * & Crick 1979 Paleontology, as related by Legendre and Legendre in * Numerical Ecology), this function uses phyper() for a faster and * more precise calculcation. I subsequently found that the same * (obvious) idea is in the literature under a variety of other names * (or sometimes no name). * * Compared to other metrics for p/a data, Raup-Crick seems to be very * robust for small samples." * * This is a direct port from Bedward's R to C (Jari Oksanen, May 2005). */ double veg_raup(double *x, int nr, int nc, int i1, int i2) { double dist, J, A, B; int sim, t1, t2, j, count; sim = 0; t1 = 0; t2 = 0; count = 0; for (j = 0; j < nc; j++) { if (R_FINITE(x[i1]) && R_FINITE(x[i2])) { if (x[i1] > 0.0 && x[i2] > 0.0) sim++; if (x[i1] > 0) t1++; if (x[i2] > 0) t2++; count++; } i1 += nr; i2 += nr; } if (count == 0) return NA_REAL; J = (double) (sim - 1); A = (t1 < t2) ? (double) t1 : (double) t2; B = (t1 < t2) ? (double) t2 : (double) t1; dist = 1 - phyper(J, A, (double) count - A, B, 1, 0); return dist; } /* "Millar dissimilarity" is unpublished. I found this in the lecture * notes of Marti Anderson over the internet, and she attributes this * idea to her colleague Russell Millar. The index is basically * binomial deviance under H0 that species are equally common in the * two compared communities. This could be easily generalized over * to, say, Poisson case. */ double veg_millar(double *x, int nr, int nc, int i1, int i2) { double dist, t1, t2, nk, lognk; int count, j; count = 0; dist = 0; for (j=0; j 0) ? x[i1] * (log(x[i1]) - lognk) : 0; t2 = (x[i2] > 0) ? x[i2] * (log(x[i2]) - lognk) : 0; dist += (t1 + t2 + nk * M_LN2)/nk; count++; } } if (count==0) return NA_REAL; if (dist < 0) dist = 0; return dist; } /* Chao's index (Ecol. Lett. 8, 148-159; 2005) tries to take into * account the number of unseen shared species using Chao's method for * estimating the number of unseen species. June 2006. */ double veg_chao(double *x, int nr, int nc, int i1, int i2) { double ionce, itwice, jonce, jtwice, itot, jtot, ishare, jshare, ishar1, jshar1; double dist, U, V; int count, j; itot = 0; jtot = 0; ionce = 0; jonce = 0; itwice = 0; jtwice = 0; ishare = 0; jshare = 0; ishar1 = 0; jshar1 = 0; count = 0; for (j=0; j 0 && x[i2] > 0) { ishare += x[i1]; jshare += x[i2]; if (fabs(x[i2] - 1) < 0.01) { ishar1 += x[i1]; jonce += 1; } else if (fabs(x[i2] - 2) < 0.01) { jtwice += 1; } if (fabs(x[i1] - 1) < 0.01) { jshar1 += x[i2]; ionce += 1; } else if (fabs(x[i1] - 2) < 0.01) { itwice += 1; } } } i1 += nr; i2 += nr; } if (count==0) return NA_REAL; U = ishare/itot; if (ishar1 > 0) { if (jonce < 1) jonce = 1; /* Never true if got here? */ if (jtwice < 1) jtwice = 1; U += (jtot - 1)/jtot * jonce/jtwice/2.0 * ishar1/itot; } if (U > 1) U = 1; V = jshare/jtot; if (jshar1 > 0) { if (ionce < 1) ionce = 1; /* This never true? */ if (itwice < 1) itwice = 1; V += (itot - 1)/itot * ionce/itwice/2.0 * jshar1/jtot; } if (V > 1) V = 1; if (U <= 0 || V <= 0) dist = 1; else dist = 1 - U*V/(U + V - U*V); if (dist < 0) dist = 0; return dist; } /* veg_cao implements Cao index (CYd) of Cao Y, Williams WP, Bark AW: * Water Envir Res 69, 95-106; 1997. Anderson MJ & Thompson AA: Ecol * Appl 14, 1921-1935; 2004 use different but equal formulation. */ double veg_cao(double *x, int nr, int nc, int i1, int i2) { double dist, x1, x2, t1, t2; int count, j; count = 0; dist = 0; for (j=0; j 0 && x[i2] > 0) { dist = 0; break; } } i1 += nr; i2 += nr; } if (count == 0) return NA_REAL; return(dist); } /* Simple matching coefficient. This is not to be called from * vegdist, but must be called separately. */ double veg_matching(double *x, int nr, int nc, int i1, int i2) { double dist; int j, count, matches; matches = 0; count = 0; for (j = 0; j #define EPS (1e-6) #define IND(N,a,b) (N)*(a) - (a)*((a)+1)/2 + (b) - (a) - (1) void stepacross(double *dist, int *n, double *toolong, int *trace) { int i, j, k, nacount, oldcount, ind, ki, kj, inew, *newind, ndist; double stepdis, steptry, *newdist, limit; limit = *toolong - EPS; ndist = (*n) * ((*n) - 1) / 2; if (*toolong > 0) for (i = 0; i < ndist; i++) if (dist[i] >= limit) dist[i] = NA_REAL; for (i = 0, nacount = 0; i < ndist; i++) if (ISNA(dist[i])) nacount++; if (*trace) Rprintf("Too long or NA distances: %d out of %d (%.1f%%)\n", nacount, ndist, 100.0*nacount/ndist); newdist = (double *) R_alloc(nacount, sizeof(double)); newind = (int *) R_alloc(nacount, sizeof(int)); while (nacount > 0) { if (*trace) Rprintf("Stepping across %d dissimilarities...\n", nacount); oldcount = nacount; inew = 0; for (i = 0, ind = 0; i < *n; i++) { for (j = i + 1; j < *n; j++) { if (ISNA(dist[ind])) { stepdis = DOUBLE_XMAX; for (k = 0; k < *n; k++) { if (k == i || k == j) continue; ki = (k > i) ? IND(*n, i, k) : IND(*n, k, i); if (ISNA(dist[ki])) continue; kj = (k > j) ? IND(*n, j, k) : IND(*n, k, j); if (ISNA(dist[kj])) continue; steptry = dist[ki] + dist[kj]; if (steptry < stepdis) stepdis = steptry; } if (stepdis < DOUBLE_XMAX) { newdist[inew] = stepdis; newind[inew] = ind; nacount--; inew++; } } ind++; } } if (oldcount == nacount) { warning("Disconnected data: Result will contain NAs"); break; } for (k = 0; k < inew; k++) dist[newind[k]] = newdist[k]; } } /* stepabyss and visitabyss implement depth-first search for * connectivity of dissimilarity matrix with threshold * limit-EPS. Algorithm is directly taken from Sedgewick (1990), * "Algorithms in C," pages 423-427. Macro IND and constant EPS were * defined above. */ void visitabyss(int k, int id, int *val, int n, double *dist) { int t, ki; val[k] = id; for (t = 0; t < n; t++) { if (k == t) continue; ki = (t > k) ? IND(n, k, t) : IND(n, t, k); if (!ISNA(dist[ki])) if (val[t] == 0) visitabyss(t, id, val, n, dist); } } void stepabyss(double *dist, int *n, double *toolong, int *val) { int k, id, ndist; double limit; limit = *toolong - EPS; ndist = (*n) * ((*n) - 1)/2; if (*toolong > 0) for (k = 0; k < ndist; k++) if (dist[k] >= limit) dist[k] = NA_REAL; for (k = 0; k < *n; k++) val[k] = 0; for (k = 0, id = 0; k < *n; k++) if (val[k] == 0) visitabyss(k, ++id, val, *n, dist); } /* Function dykstrapath impelements Dijkstra's shortest path algorithm * for graph traversal. Return matrix outval contains shortest path * distances. Function matrixpfs() in Sedgewick, 1990, page 466 * (priority first search for dense graphs). */ #define UNSEEN 1e8 void dykstrapath(double *dist, int *n, double *toolong, int *trace, double *outval) { int i, k, t, min = 0, ki, ndist, nacount = 0; double priority, *val, limit; /* val[*n] is a sentinel: length needs be n+1 */ val = (double *) R_alloc((*n) + 1, sizeof(double)); limit = *toolong - EPS; ndist = (*n) * ((*n) - 1)/2; if (*toolong > 0) for(i = 0; i < ndist; i++) if (dist[i] >= limit) dist[i] = NA_REAL; if (*trace) { for (i = 0, nacount = 0; i < ndist; i++) if (ISNA(dist[i])) nacount++; Rprintf("Too long or NA distances: %d out of %d (%.1f%%)\n", nacount, ndist, 100.0 * nacount/ndist); Rprintf("Stepping across %d dissimilarities...\n", ndist); } for (i = 0; i < *n; i++) { for (k = 0; k <= *n; k++) val[k] = -UNSEEN; val[*n] = -(UNSEEN + 1); for (k = i; k != *n; k = min, min = *n) { val[k] = -val[k]; if (val[k] == UNSEEN) val[k] = 0; for (t = 0; t < *n; t++) if (val[t] < 0) { ki = (t > k) ? IND(*n, k, t) : IND(*n, t, k); priority = val[k] + dist[ki]; if (!ISNA(priority) && (val[t] < -priority)) { val[t] = -priority; } if (val[t] > val[min]) min = t; } } ki = IND(*n, i, i+1); for (t = i + 1; t < *n; t++) outval[ki + t - i - 1] = val[t]; } for (i = 0, nacount = 0; i < ndist; i++) if (ISNA(dist[i]) && outval[i] == 0) { outval[i] = NA_REAL; nacount++; } if (nacount) warning("Disconnected data: Result will contain NAs"); } /* Function primtree finds *a* minimum spanning tree for dist. Vector * dad returns the vertex joined to point i (the first item is 0: it * is the link from 0 to 0) and val the length of corresponding * edge. If the distance matrix is disconnected at level toolong, * returns a minimum spanning forest where the missing links are * marked as NA. Uses Prim's method (priority-first search for a * dense graph) of Sedgewick, 1990, page 466, function * matrixpfs(). --- I didn't intend to have minimum spanning tree, * because I think it is pretty useless, but this just appeared when I * tried to implement Dijkstra's shortest path algorithm above. */ void primtree(double *dist, double *toolong, int *n, double *val, int *dad) { int k, t, min = 0, ki, ndist; double priority; ndist = (*n) * ((*n) - 1)/2; if (*toolong > 0) for (k = 0; k < ndist; k++) if (dist[k] >= *toolong - EPS) dist[k] = NA_REAL; for (k = 0; k <= *n; k++) { dad[k] = NA_INTEGER; val[k] = -UNSEEN; } val[*n] = -(UNSEEN + 1); for (k = 0; k != *n; k = min, min = *n) { val[k] = -val[k]; if (val[k] == UNSEEN) val[k] = 0; for (t = 0; t < *n; t++) if (val[t] < 0) { if (t == k) continue; ki = (t > k) ? IND(*n, k, t) : IND(*n, t, k); priority = dist[ki]; if (!ISNA(priority) && (val[t] < -priority)) { val[t] = -priority; dad[t] = k; } if (val[t] > val[min]) min = t; } } } #undef UNSEEN vegan/src/pnpoly.c0000644000176200001440000000534012122046457013633 0ustar liggesusers/**********************************************************' * pnpoly.c: Find Points in a Polygon * ********************************************************/ /* Function pnpoly is lightly edited from the function of Wm. Randolph * Franklin by Jari Oksanen to work in R and for a vector of points. * The source of this code was at * http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html, * and the original copyright notice is below. This version is Friday, * October 13, 2006. */ /* Motivation for yet another point in polygon function: There was * none in base R, and I wanted to liberate ordisurf from dependence * on non-standard R packages. I think there should be such a function * connected with chull (in.chull) to make this unnecessary in * vegan. */ /* License to Use */ /* Copyright (c) 1970-2003, Wm. Randolph Franklin */ /* Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: */ /* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimers. */ /* Redistributions in binary form must reproduce the above copyright notice in the documentation and/or other materials provided with the distribution. */ /* The name of W. Randolph Franklin may not be used to endorse or promote products derived from this Software without specific prior written permission. */ /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ void pnpoly(int *npol, double *xp, double *yp, int *np, double *x, double *y, int *c) { int i, j, k; for (k = 0; k < *np; k++) c[k] = 0; for (k = 0; k < *np; k++) { for (i = 0, j = *npol-1; i < *npol; j = i++) { if ((((yp[i] <= y[k]) && (y[k] < yp[j])) || ((yp[j] <= y[k]) && (y[k] < yp[i]))) && (x[k] < (xp[j] - xp[i]) * (y[k] - yp[i]) / (yp[j] - yp[i]) + xp[i])) c[k] = !c[k]; } } } vegan/src/ordering.f0000644000176200001440000001115412122046457014126 0ustar liggesusers Subroutine Orderdata(mat, n, k, rowscore) C23456789012345678901234567890123456789012345678901234567890123456789012 C d = a distance matrix C n = number of objects (rows of the data files) C C Based on Pierre Legendre Fortran code and Table 9.5 and 9.10 C We compute the principal coordinate of the first axis only. C Set the precision level for eigenvalue estimation Integer mat(n,k) double precision sumrow(n), sumtot double precision rowscore(n),colscore(n),toler,epsilon epsilon=0.000001 toler= 0.000001 if(n.gt.1000) then epsilon=0.00001 toler= 0.00001 endif if(n.gt.10000) then epsilon=0.0001 toler= 0.0001 endif C Centre the distance matrix (Gower's method) call Centre(mat, n, k, sumrow, sumtot) call TWWS(mat,n,k,sumrow,sumtot,rowscore,colscore,toler,epsilon) end Subroutine Centre(mat, n, k, sumrow, sumtot) Integer mat(n,k) double precision d double precision sumrow(n),sumtot do i=1,n sumrow(i)=0.0 enddo do i=1,(n-1) do j=(i+1),n call SM(mat, n, k, i, j, d) d = -0.5*d**2 sumrow(i)=sumrow(i) + d sumrow(j)=sumrow(j) + d enddo enddo C fln=1.0/float(n) sumtot=0. do i=1,n sumtot=sumtot+sumrow(i) sumrow(i)=sumrow(i)*fln enddo sumtot=sumtot/float(n**2) C do 16 i=1,n C do 16 j=1,n C 16 d(i,j)=d(i,j)-sumrow(i)-sumrow(j)+sumtot end Subroutine SM(mat, n, k, i, j, d) C Compute a simple matching coefficient from a table of K-means results (integers). C The 'n' rows are the objects; the 'k' columns are the partitions. Integer mat(n,k) double precision d C a = 0.0 do kk=1,k if(mat(i,kk).eq.mat(j,kk)) a=a+1 enddo d = 1.0 - (a/float(k)) end Subroutine TWWS(mat,n,k,sumrow,sumtot,rowscore,colscore, + toler,epsilon) Integer n, niter Integer mat(n,k) double precision sumrow(n),sumtot,d double precision rowscore(n),colscore(n),epsilon,oldS,newS,toler, + oldrowsc(n) niter=1000 C Step 2: Take the column order as arbitrary initial site scores do 4 i=1,n 4 rowscore(i)=dfloat(i) oldS=0. C Iterations starting do 20 it=1,niter C Step 3: Calculate new variable scores (equation 5.8, p. 119) do 6 i=1,n 6 colscore(i)=rowscore(i) C Step 4: Calculate new site scores (equation 5.9, p. 122) do 8 i=1,n rowscore(i)=0. do 8 j=1,n call SM(mat, n, k, i, j, d) d = -0.5*d**2 d = d-sumrow(i)-sumrow(j)+sumtot 8 rowscore(i)=rowscore(i)+d*colscore(j) C Step 6: Normalize the site scores call NormTWWS(rowscore,n,newS) if(newS.lt.epsilon) then C write(*,103) 0 goto 52 endif C When convergence has been attained, check sign of eigenvalue. C If ALL rowscores have changed sign during the last iteration, C this is a negative eigenvalue. C write(*,*) 'oldS-newS', oldS-newS if(dabs(oldS-newS).le.toler) then C write(*,105) toler, it goto 22 endif do 18 i=1,n 18 oldrowsc(i)=rowscore(i) oldS=newS 20 continue C End of iterations for estimating eigenvalues and eigenvectors C write(*,101) k 22 continue C Save Eigenvalues, % variance, cumulative % variance C write(*,*) 'Eigenvalue =', newS C End of main loop on axes 52 continue C C Normalize the principal coordinates to variance = eigenvalue do 60 i=1,n 60 rowscore(i)=rowscore(i)*dsqrt(newS) C write(*,*) rowscore C 101 format(' Convergence not reached for axis:',i3/ C + ' Increase NITER or lower TOLER') C 102 format(' N. iterations to reach convergence for axis',i3,' =',i4) C 103 format(' There are',i4,' eigenvalues different from 0') C 104 format(' Eigenvector',i3,' is complex [multiply values*Sqrt(-1)]') C 105 format(" Tolerance is: ", F12.8, " NIter is: ", i4) C 150 format(1x,1hR,2i3,6f10.5) C 151 format(1x,1hC,2i3,10x,6f10.5) end Subroutine NormTWWS(rowscore,n,newS) Integer n double precision rowscore(n),s2,newS C Normalization for two-way weighted summation algorithm for PCA C (ter Braak 1987: 123) C On output, vector 'rowscore' has length = 1. C S = eigenvalue*(p-1) = contraction of vector rowscore in final C iteration C s2=0.0 do 10 i=1,n 10 s2=s2+rowscore(i)**2 newS=dsqrt(s2) do 20 i=1,n 20 rowscore(i)=rowscore(i)/newS return end vegan/src/nestedness.c0000644000176200001440000002167012122046457014471 0ustar liggesusers#include #include /* Utility functions */ /* Random integer 0..imax */ #define IRAND(imax) (int) (((double) (imax + 1)) * unif_rand()) /* 2 different random integers */ void i2rand(int *vec, int imax) { vec[0] = IRAND(imax); do { vec[1] = IRAND(imax); } while (vec[1] == vec[0]); } /* * Quasiswap or sum-of-squares reducing swap of Miklos & Podani. A quasiswap * step takes a random 2x2 submatrix and adds (-1,+1,+1,-1). If the submatrix * was (1,0,0,1) it is swapped to (0,1,1,0), but if it was, say, (2,0,0,1) it * is swapped to (1,1,1,0) which reduces sums-of-squares. We start with a * random matrix with given marginal totals (from R r2dtable) but possibly * some values >1. Then we perform quasiswaps on random 2x2 submatrices so * long that only 1 and 0 are left. The function only does the quasiswaps, * and it assumes that input matrix 'm' (dimensions 'nr', 'nc') was produced * by r2dtable or some other function with given marginal totals, but some * values possibly > 1. */ /* row & col indices to a vector index */ #define INDX(i, j, nr) (i) + (nr)*(j) void quasiswap(int *m, int *nr, int *nc) { int i, n, mtot, ss, row[2], col[2], nr1, nc1, a, b, c, d; nr1 = (*nr) - 1; nc1 = (*nc) - 1; /* Get matrix total 'mtot' and sum-of-squares 'ss' */ n = (*nr) * (*nc); for (i = 0, mtot = 0, ss = 0; i < n; i++) { mtot += m[i]; ss += m[i] * m[i]; } /* Get R RNG */ GetRNGstate(); /* Quasiswap while there are entries > 1 */ while (ss > mtot) { i2rand(row, nr1); i2rand(col, nc1); /* a,b,c,d notation for a 2x2 table */ a = INDX(row[0], col[0], *nr); b = INDX(row[0], col[1], *nr); c = INDX(row[1], col[0], *nr); d = INDX(row[1], col[1], *nr); if (m[a] > 0 && m[d] > 0 && m[a] + m[d] - m[b] - m[c] >= 2) { ss -= 2 * (m[a] + m[d] - m[b] - m[c] - 2); m[a]--; m[d]--; m[b]++; m[c]++; } else if (m[b] > 0 && m[c] > 0 && m[b] + m[c] - m[a] - m[d] >= 2) { ss -= 2 * (m[b] + m[c] - m[a] - m[d] - 2); m[a]++; m[d]++; m[b]--; m[c]--; } } /* Set R RNG */ PutRNGstate(); } /* Trial swap: try 'thin' times and swap when you can. This gives zero * to many swaps for one call. */ void trialswap(int *m, int *nr, int *nc, int *thin) { int i, a, b, c, d, row[2], col[2]; GetRNGstate(); for (i=0; i < *thin; i++) { i2rand(row, (*nr) - 1); i2rand(col, (*nc) - 1); a = INDX(row[0], col[0], *nr); b = INDX(row[0], col[1], *nr); c = INDX(row[1], col[0], *nr); d = INDX(row[1], col[1], *nr); if (m[a] == 1 && m[d] == 1 && m[b] == 0 && m[c] == 0) { m[a] = 0; m[d] = 0; m[b] = 1; m[c] = 1; } else if (m[c] == 1 && m[b] == 1 && m[d] == 0 && m[a] == 0) { m[a] = 1; m[d] = 1; m[b] = 0; m[c] = 0; } } PutRNGstate(); } /* Ordinary swap: swap if you can, stop after you swapped, or repeat * thin times. The data matrix 'm' must be binary: this is not * checked. */ void swap(int *m, int *nr, int *nc, int *thin) { int i, a, b, c, d, row[2], col[2]; GetRNGstate(); for (i=0; i < *thin; i++) { for(;;) { i2rand(row, (*nr) - 1); i2rand(col, (*nc) - 1); a = INDX(row[0], col[0], *nr); b = INDX(row[0], col[1], *nr); c = INDX(row[1], col[0], *nr); d = INDX(row[1], col[1], *nr); if (m[a] == 1 && m[d] == 1 && m[b] == 0 && m[c] == 0) { m[a] = 0; m[d] = 0; m[b] = 1; m[c] = 1; break; } if (m[c] == 1 && m[b] == 1 && m[d] == 0 && m[a] == 0) { m[a] = 1; m[d] = 1; m[b] = 0; m[c] = 0; break; } } } PutRNGstate(); } /* 'swapcount' is a C translation of Peter Solymos's R code. It is * similar to 'swap', but can swap > 1 values and so works for * quantitative (count) data. */ /* 'isDiag' is a utility function for 'swapcount' to find the largest * value that can be swapped and whether in diagonal or antidiagonal * way. The input is a 2x2 submatrix 'sm'. */ double isDiag(double *sm) { int i, sX; double choose[2]; /* sX: number of non-zero cells */ for (i = 0, sX = 0; i < 4; i++) if (sm[i] > 0) sX++; /* Smallest diagonal and antidiagonal element */ choose[0] = (sm[1] < sm[2]) ? sm[1] : sm[2]; choose[1] = (sm[0] < sm[3]) ? -sm[0] : -sm[3]; if (sX == 4) { /* Either choose could be returned, but RNG is not needed, * because sm already is in random order, and we always return * choose[0] */ return choose[0]; } if ((sm[0] == 0 && sm[1] > 0 && sm[2] > 0 && sm[3] == 0) || (sm[0] == 0 && sm[1] > 0 && sm[2] > 0 && sm[3] > 0) || (sm[0] > 0 && sm[1] > 0 && sm[2] > 0 && sm[3] == 0)) return choose[0]; if ((sm[0] > 0 && sm[1] == 0 && sm[2] == 0 && sm[3] > 0) || (sm[0] > 0 && sm[1] == 0 && sm[2] > 0 && sm[3] > 0) || (sm[0] > 0 && sm[1] > 0 && sm[2] == 0 && sm[3] > 0)) return choose[1]; if (sX < 2 || (sm[0] == 0 && sm[1] == 0 && sm[2] > 0 && sm[3] > 0) || (sm[0] > 0 && sm[1] > 0 && sm[2] == 0 && sm[3] == 0) || (sm[0] == 0 && sm[1] > 0 && sm[2] == 0 && sm[3] > 0) || (sm[0] > 0 && sm[1] == 0 && sm[2] > 0 && sm[3] == 0)) return 0; /* never reach this but pacify a pedantic compiler */ else return 0; } void swapcount(double *m, int *nr, int *nc, int *thin) { int row[2], col[2], k, ij[4], changed, oldn, newn, pm[4] = {1, -1, -1, 1} ; double sm[4], ev; GetRNGstate(); changed = 0; while (changed < *thin) { /* Select a random 2x2 matrix*/ i2rand(row, *nr - 1); i2rand(col, *nc - 1); ij[0] = INDX(row[0], col[0], *nr); ij[1] = INDX(row[1], col[0], *nr); ij[2] = INDX(row[0], col[1], *nr); ij[3] = INDX(row[1], col[1], *nr); for (k = 0; k < 4; k ++) sm[k] = m[ij[k]]; /* The largest value that can be swapped */ ev = isDiag(sm); if (ev != 0) { /* Check that the fill doesn't change*/ for (k = 0, oldn = 0, newn = 0; k < 4; k++) { if(sm[k] > 0) oldn++; if (sm[k] + pm[k]*ev > 0) newn++; } /* Swap */ if (oldn == newn) { for (k = 0; k < 4; k++) m[ij[k]] += pm[k]*ev; changed++; } } } PutRNGstate(); } /* rswapcount for "reducing swap of count data" is a minor variant of * swapcount, but it tries to change the fill: you first make a matrix * with correct marginal totals, but possibly wrong fill and then you * run this to change the fill while maintaining the totals. The idea * is similar as quasiswap for presence/absence data. */ void rswapcount(double *m, int *nr, int *nc, int *mfill) { int row[2], col[2], i, k, ij[4], n, change, cfill, pm[4] = {1, -1, -1, 1} ; double sm[4], ev; /* Get the current fill 'cfill' */ n = (*nr) * (*nc); for (i = 0, cfill=0; i < n; i++) { if (m[i] > 0) cfill++; } GetRNGstate(); /* Loop while fills differ */ while (cfill != *mfill) { /* Select a random 2x2 matrix*/ i2rand(row, *nr - 1); i2rand(col, *nc - 1); ij[0] = INDX(row[0], col[0], *nr); ij[1] = INDX(row[1], col[0], *nr); ij[2] = INDX(row[0], col[1], *nr); ij[3] = INDX(row[1], col[1], *nr); for (k = 0; k < 4; k ++) sm[k] = m[ij[k]]; /* The largest value that can be swapped */ ev = isDiag(sm); if (ev != 0) { /* Check the change in fills */ for (k = 0, change=0; k < 4; k++) { if(sm[k] > 0) change--; if (sm[k] + pm[k]*ev > 0) change++; } /* Fill does not change, but swap to bail out from * non-swappable configurations */ if (change == 0) { for (k = 0; k < 4; k++) m[ij[k]] += pm[k]*ev; } else if ((change < 0 && *mfill < cfill) || (change > 0 && *mfill > cfill)) { for (k = 0; k < 4; k++) m[ij[k]] += pm[k]*ev; cfill += change; } } } PutRNGstate(); } /* 'isDiagSimple' needed for 'abuswap' */ double isDiagSimple(double *sm) { int i, sX; /* sX: number of non-zero cells */ for (i = 0, sX = 0; i < 4; i++) if (sm[i] > 0) sX++; if (sX == 4) { return 1; } if ((sm[0] == 0 && sm[1] > 0 && sm[2] > 0 && sm[3] == 0) || (sm[0] > 0 && sm[1] == 0 && sm[2] == 0 && sm[3] > 0)) return 1; else return 0; } /* 'abuswap' to do Hardy 2008 J Ecol 96: 914-926 */ void abuswap(double *m, int *nr, int *nc, int *thin, int *direct) { int row[2], col[2], k, ij[4], changed, ev ; double sm[4]; GetRNGstate(); changed = 0; while (changed < *thin) { /* Select a random 2x2 matrix*/ i2rand(row, *nr - 1); i2rand(col, *nc - 1); ij[0] = INDX(row[0], col[0], *nr); ij[1] = INDX(row[1], col[0], *nr); ij[2] = INDX(row[0], col[1], *nr); ij[3] = INDX(row[1], col[1], *nr); for (k = 0; k < 4; k++) sm[k] = m[ij[k]]; ev = isDiagSimple(sm); /* Swap */ if (ev == 1) { /* fixed column sums */ if (*direct == 0) { m[ij[0]] = sm[1]; m[ij[1]] = sm[0]; m[ij[2]] = sm[3]; m[ij[3]] = sm[2]; } /* fixed row sums */ else { m[ij[0]] = sm[2]; m[ij[1]] = sm[3]; m[ij[2]] = sm[0]; m[ij[3]] = sm[1]; } changed++; } } PutRNGstate(); } #undef IRAND #undef INDX vegan/src/monoMDS.f0000644000176200001440000010456612122046457013643 0ustar liggesusers SUBROUTINE monoMDS (NOBJ, NFIX, NDIM, NDIS, NGRP, . DISS, IIDX, JIDX, XINIT, ISTART, . ISFORM, ITIES, IREGN, ISCAL, MAXITS, SRATMX, . STRMIN, SFGRMN, . DIST, DHAT, X, STRESS, STRS, ITERS, ICAUSE) C C Subroutine for multidimensional scaling. C C 1.00 March 28, 2011 C 1.01 April 6, 2011 - added argument STRS(NGRP) to return the stress C for each of the NGRP groups of dissimilarities C i.e., from each separate regression. C C Written by Dr. Peter R. Minchin C Department of Biological Sciences C Southern Illinois University Edwardsville C PO Box 1651 C Edwardsville, IL 62026-1651, U.S.A. C Phone: +1-618-650-2975 FAX: +1-618-650-3174 C Email: pminchi@siue.edu C C Starting from a supplied initial configuarion, uses steepest descent C to minimize Kruskal's stress, a measure of badness-of-fit of one C or more regressions of distances onto the supplied dissimilarities. C C This routine is very flexible in the form of the dissimilarity C matrices it can handle because dissimilarities are input as a C vector (DISS) with the associated i- and j-indices in parallel C vectors (IIDX, JIDX). There is no need for missing values, as C these index vectors specify which pair of points each dissimilarity C belongs to and missing dissimilarities are simply omitted. Another C element of flexibility is that there can be more than one group of C dissimilarities and a separate regression of distance on C dissimilarity is done for each group. Local or "row conditional" C scaling can be performed by inputting each row of the dissimilarity C matrix (minus the diagonals) as a separate group. Hybrid scaling C of Faith et. al (1987) can be done by inputting the complete C dissimilarity matrix as group 1 and only those dissimilarities C below a specified threshold as group 2 (and also setting input C parameter IREGN to 3). New points can be inserted into an C existing ordination by inputting dissimilarities from the C rectangular matrix in which the existing points are rows and the C new points are columns. The parameter NFIX is then set to the C number of existing points (rows) and these will be the first C NFIX points in XINIT, which supplies their coordinates. Normally, C when NFIX>0, the scaling parameter, ISCAL, should be 0, so that C the coordinates of the fixed points remain unchanged in the C output ordination scores, X. C C========INPUT ARGUMENTS: C C NOBJ = number of objects being ordinated C C NFIX = number of fixed objects (< NOBJ - if NFIX>0 the input C dissim matrix is assumed to be rectangular, with the C first NFIX objects, rows, remaining fixed and the rest C able to move) C C NDIM = number of dimensions for the MDS ordination C C NDIS = total number of dissimilarities among objects C C NGRP = number of groups of dissimilarities (a separate regression C of distances on dissimilarities is performed for each C group) C C DISS(NDIS) = vector of dissimilarities among objects C C IIDX(NDIS) = i-indices of objects in the dissimilarity vector C C JIDX(NDIS) = j-indices of objects in the dissimilarity vector C C XINIT(NOBJ,NDIM) = initial coordinates for NOBJ objects on NDIM C dimensions C C ISTART(NGRP) = index of starting position of each group of C dissimilarities within vectors DISS, IIDX and JIDX C C ISFORM = Kruskal stress formula to be used: 1 or 2 C C ITIES = Kruskal tie treatment: 1 = weak/primary, 2 = strong/secondary C C IREGN = Regression type: 1 = Kruskal monotone, 2 = linear, 3 = hybrid C (Kruskal monotone for the first NGRP/2 groups, linear for C the remainder of the groups - when this is selected it is C assumed that NGRP>1 and NGRP is even) C C ISCAL = scaling of final ordination: 0 = preserved (output raw scores C with no standardization), 1 = normalize (center and adjust C RMS distance of points to centroid to 1.0) C C MAXITS = maximum number of iterations - at least 200 recommended C C SRATMX = maximum average stress ratio (iterations stop when average C stress ratio exceeds this value but is still < 1) - a value C of 0.9999 or higher is recommended C C STRMIN = minimum stress to stop (iterations stop if stress falls C below this value) - a value of 0.001 or lower is C recommended C C SFGRMN = minimum scale factor of the gradient (iterations stop if C the scale factor of the gradient drops below this) C C========OUTPUT ARGUMENTS: C C DIST(NDIS) = distances among objects in the final ordination C C DHAT(NDIS) = fitted distances in final regression(s) of distance C on dissimilarity C C X(NOBJ,NDIM) = final ordination coordinates of NOBJ objects in NDIM C dimensions C C STRESS = final value of stress C C STRS(NGRP) = vector of stress values from each separate regression C C ITERS = number of iterations performed C C ICAUSE = reason for termination of iterations: 1 = max iterations C used, 2 = stress fell below STRMIN, 3 = stress ratio C exceeded SRATMX, 4 = scale factor of gradient fell below C SFGRMN C C---INPUT ARGUMENTS INTEGER, INTENT(IN) :: NOBJ, NFIX, NDIM, NDIS, NGRP, . ISFORM, ITIES, IREGN, ISCAL, MAXITS INTEGER, INTENT(IN) :: IIDX(NDIS), JIDX(NDIS), ISTART(NGRP) DOUBLE PRECISION, INTENT(IN) :: XINIT(NOBJ,NDIM), DISS(NDIS), . SRATMX, STRMIN, SFGRMN C---OUTPUT ARGUMENTS INTEGER, INTENT(OUT) :: ITERS, ICAUSE DOUBLE PRECISION, INTENT(OUT) :: X(NOBJ,NDIM), DIST(NDIS), . DHAT(NDIS), STRESS, STRS(NGRP) C---ALLOCATABLE TEMPORARY ARRAYS INTEGER, ALLOCATABLE :: IWORK(:) DOUBLE PRECISION, ALLOCATABLE :: GRAD(:,:), GRLAST(:,:) C DOUBLE PRECISION :: STRLST, SQRTN, SRATF1, SRATF2, FNGRP, . STRINC, COSAV, ACOSAV, SRATAV, STEP, FNDIM, SFGR, SRATIO, . SFACT, TFACT, DMEAN, CAGRGL, SFGLST, STPNEW, SSFACB, SSFACT, . PARAM(2) C C ALLOCATE THE TEMPORARY ARRAYS NEEDED C ALLOCATE (IWORK(NDIS), GRAD(NOBJ,NDIM), GRLAST(NOBJ,NDIM)) C C INITIALIZE SOME PARAMETERS C SQRTN=SQRT(REAL(NDIS)) SRATF1=0.5*(1.0+SRATMX) SRATF2=1.0-SRATF1 FNGRP=REAL(NGRP) STRINC=1.1 STRESS=1.0D0 COSAV=0.0 ACOSAV=0.0 SRATAV=0.8 STEP=0.0 FNDIM=REAL(NDIM) SFGR=SQRTN C C PREPARE DISSIMILARITIES FOR USE IN REGRESSION(S) C DO IGRP=1,NGRP I1=ISTART(IGRP) IF (IGRP.LT.NGRP) THEN N=ISTART(IGRP+1)-I1 ELSE N=NDIS+1-I1 ENDIF IF (N.GT.0) THEN C C PRE-SORT IF NECESSARY. NOT REQUIRED FOR LINEAR REGRESSION (IREGN=2) C NOR FOR DISSIM GROUPS > NGRP/2 IN HYBRID REGRESSION (IREGN=3) C IF (IREGN.EQ.1.OR.(IREGN.EQ.3.AND.IGRP.LE.NGRP/2)) THEN CALL ASORT4 (DISS(I1),N,IIDX(I1),JIDX(I1)) ENDIF ENDIF ENDDO C C COPY INITIAL CONFIGURATION TO CURRENT CONFIGURATION C CALL MACOPY (XINIT,NOBJ,NOBJ,NDIM,X,NOBJ) C C INITALIZE GRADIENT (WILL BE USED AS THE FIRST "LAST GRADIENT") C CALL MAINIT (GRAD,NOBJ,NDIM,NOBJ,SQRT(1.0/FNDIM)) C======================================================================= C C START OF ITERATION LOOP C DO IT=0,MAXITS C---Reset backup counter NBACK=0 C C SAVE LAST STRESS VALUE AND SET STRESS BACK TO ZERO C C---Jump back to here when a backup if required 10 STRLST=STRESS STRESS=0.0D0 C C Normalize the current configuration (unless ISCAL=0) C IF (ISCAL.GT.0) THEN CALL NRMCON (X,NOBJ,NDIM,NOBJ,SSFACT) ELSE SSFACT=1.0D0 ENDIF C C MOVE CURRENT GRADIENT TO LAST GRADIENT (WITH APPROPRIATE SCALING) C AND SAVE LAST GRADIENT SCALING FACTOR C CALL MACOPY (GRAD,NOBJ,NOBJ,NDIM,GRLAST,NOBJ) CALL MAMAS (GRLAST,NOBJ,NOBJ,NDIM,SSFACT) SFGLST=SFGR*SSFACT C C CLEAR CURRENT GRADIENT C CALL MAINIT (GRAD,NOBJ,NDIM,NOBJ,0.0D0) C C COMPUTE DISTANCES C CALL CLCDIS (X,NOBJ,NDIM,DIST,IIDX,JIDX,NDIS) C----------------------------------------------------------------------- C C LOOP OVER THE NGRP GROUPS OF DISSIMILARITIES C DO IGRP=1,NGRP I1=ISTART(IGRP) IF (IGRP.LT.NGRP) THEN N=ISTART(IGRP+1)-I1 ELSE N=NDIS+1-I1 ENDIF IF (N.GT.0) THEN C C PERFORM REGRESSION OF DISTANCES ON DISSIMILARITIES C IF (IREGN.EQ.1.OR.(IREGN.EQ.3.AND.IGRP.LE.NGRP/2)) THEN CALL MONREG (DISS(I1),DIST(I1),DHAT(I1),IIDX(I1), . JIDX(I1),IWORK(I1),N,ITIES) ELSEIF (IREGN.EQ.2.OR.(IREGN.EQ.3.AND.IGRP.GT.NGRP/2)) THEN CALL LINREG (DISS(I1),DIST(I1),DHAT(I1),N,PARAM) ENDIF C C COMPUTE AND ACCUMULATE STRESS C CALL CLCSTR (DIST(I1),DHAT(I1),N,SFACT,TFACT,STRS(IGRP), . ISFORM,DMEAN) STRESS=STRESS+SFACT/TFACT C C ACCUMULATE THE NEGATIVE GRADIENT C CALL CLCGRD (X,GRAD,NOBJ,NDIM,DIST(I1),DHAT(I1), . IIDX(I1),JIDX(I1),N,STRS(IGRP),SFACT,TFACT,ISFORM,DMEAN) ENDIF ENDDO C C END OF DISSIMILARITY GROUP LOOP C C----------------------------------------------------------------------- C C COMPUTE OVERALL STRESS AND ITS REDUCTION RATIO C STRESS=SQRT(STRESS/FNGRP) IF (IT.EQ.0) THEN SRATIO=0.8D0 ELSE SRATIO=STRESS/STRLST ENDIF C C TO PREVENT FIXED POINTS BEING MOVED, ZERO THEIR GRADIENT ELEMENTS C IF (NFIX.GT.0) THEN DO I=1,NFIX DO IDIM=1,NDIM GRAD(I,IDIM)=0.0D0 ENDDO ENDDO ENDIF C C CALCULATE SCALE FACTOR OF NEW GRADIENT AND ITS DIRECTION COSINE C WITH THE LAST GRADIENT C CALL CLCSFA (GRAD,GRLAST,NOBJ,NDIM,NOBJ,SFGR,CAGRGL, . SFGLST) C C IF STRESS HAS INCREASED APPRECIABLY, OR THE ANGLE BETWEEN THE NEW C GRADIENT AND THE LAST GRADIENT IS APPROACHING 180 DEGREES, REDUCE C THE STEP SIZE AND BACK UP ALONG THE LAST GRADIENT C (BACKUP PROCEDURE IS PERFORMED A MAXIMUM OF 3 TIMES PER ITERATION) C IF ((SRATIO.GT.STRINC.OR.CAGRGL.LT.(-0.95)).AND.NBACK.LT.3) . THEN STPNEW=STEP*0.1D0 CALL BACKUP (X,GRAD,GRLAST,NOBJ,NDIM,NOBJ,NBACK,SSFACT, . SSFACB,STRESS,STRLST,SFGR,SFGLST,STEP,STPNEW) GO TO 10 ENDIF C C UPDATE AVERAGES OF STRESS RATIO AND PREVIOUS DIRECTION COSINES C SRATAV=SRATIO**0.33334D0 * SRATAV**0.66666D0 COSAV=CAGRGL*0.66666D0 + COSAV*0.33334D0 ACOSAV=ABS(CAGRGL)*0.66666D0 + ACOSAV*0.33334D0 C C COMPUTE NEW STEP SIZE C CALL CLCSTP (STEP,IT,SFGR,STRESS,COSAV,ACOSAV,SRATIO, . SRATAV) C C CHECK WHETHER OR NOT TO KEEP ITERATING C C IF STRESS IN SMALL ENOUGH, TERMINATE C ITERS=IT IF (STRESS.LT.STRMIN) THEN ICAUSE=2 EXIT C C IF STRESS IS DECREASING SLOWLY, TERMINATE. C ELSEIF (ABS(SRATAV-SRATF1).LE.SRATF2.AND. . ABS(SRATIO-SRATF1).LE.SRATF2) THEN ICAUSE=3 EXIT C C IF SCALE FACTOR OF GRADIENT IS SMALL ENOUGH, TERMINATE C ELSEIF (SFGR.LE.SFGRMN) THEN ICAUSE=4 EXIT C C IF THIS IS THE FINAL ITERATION, TERMINATE C ELSEIF (IT.EQ.MAXITS) THEN ICAUSE=1 EXIT ENDIF C C COMPUTE NEW CONFIGURATION C CALL NEWCON (X,GRAD,NOBJ,NDIM,NOBJ,STEP,SFGR) ENDDO C C END OF ITERATION LOOP C C======================================================================= C C DEALLOCATE THE TEMPORARY ARRAYS AND RETURN C DEALLOCATE (IWORK, GRAD, GRLAST) RETURN END SUBROUTINE monoMDS SUBROUTINE ASORT4 (X,N,I1,I2) C C SORTS THE REAL*8 VECTOR X ASCENDING, SIMULTANEOUSLY PERMUTING THE C INTEGER VECTORS I1 AND I2 IN PARALLEL. C C ADAPTED FROM SUPERCHARGED SHELL SORT ALGORITHM PUBLISHED ON PAGE 488 C OF THE MAY 1983 EDITION OF BYTE MAGAZINE. C C Adapted by Dr. Peter R. Minchin C Department of Biological Sciences C Southern Illinois University Edwardsville C PO Box 1651 C Edwardsville, IL 62026-1651, U.S.A. C Phone: +1-618-650-2975 FAX: +1-618-650-3174 C Email: pminchi@siue.edu C INTEGER I1(N), I2(N), I1TEMP, I2TEMP DOUBLE PRECISION X(N), XTEMP C IF (N.LT.2) RETURN FN=REAL(N) NLOOPS=MAX(NINT(LOG(FN)/LOG(2.)),1) M=2**(NLOOPS-1) DO II=1,NLOOPS FM=M DO I=1,MAX(1,N-M) IF (X(I).GT.X(I+M)) THEN XTEMP=X(I+M) I1TEMP=I1(I+M) I2TEMP=I2(I+M) X(I+M)=X(I) I1(I+M)=I1(I) I2(I+M)=I2(I) IF (I.LE.M) THEN X(I)=XTEMP I1(I)=I1TEMP I2(I)=I2TEMP ELSE DO J=I-M,1,-M IF (XTEMP.GE.X(J)) EXIT X(J+M)=X(J) I1(J+M)=I1(J) I2(J+M)=I2(J) ENDDO X(J+M)=XTEMP I1(J+M)=I1TEMP I2(J+M)=I2TEMP ENDIF ENDIF ENDDO M=INT(FM/2.) ENDDO RETURN END SUBROUTINE ASORT4 SUBROUTINE BACKUP (X,GRAD,GRLAST,NOBJ,NDIM,MAXOBJ,NBACK,SSFACT, . SSFACB,STRESS,STRLST,SFGR,SFGLST,STEP,STPNEW) C C BACKS THE CONFIGURATION UP ALONG THE LAST GRADIENT C C Written by Dr. Peter R. Minchin C Department of Biological Sciences C Southern Illinois University Edwardsville C PO Box 1651 C Edwardsville, IL 62026-1651, U.S.A. C Phone: +1-618-650-2975 FAX: +1-618-650-3174 C Email: pminchi@siue.edu C DOUBLE PRECISION X(MAXOBJ,NDIM), GRAD(MAXOBJ,NDIM), . GRLAST(MAXOBJ,NDIM), SSFACT, SSFACB, STRESS, STRLST, SFGR, . SFGLST,STEP,STPNEW,FACTOR C NBACK=NBACK+1 IF (NBACK.EQ.1) THEN SSFACB=1.0D0 ELSE SSFACB=SSFACB*SSFACT ENDIF FACTOR=SSFACB*(STEP-STPNEW)/SFGLST DO IDIM=1,NDIM DO IOBJ=1,NOBJ X(IOBJ,IDIM)=X(IOBJ,IDIM)-FACTOR*GRLAST(IOBJ,IDIM) GRAD(IOBJ,IDIM)=GRLAST(IOBJ,IDIM) ENDDO ENDDO STEP=STPNEW SFGR=SFGLST STRESS=STRLST RETURN END SUBROUTINE BACKUP SUBROUTINE CLCDIS (X,MAXOBJ,NDIM,DIST,IIDX,JIDX,NDIS) C C COMPUTES EUCLIDEAN DISTANCES BETWEEN EACH PAIR OF THE NOBJ POINTS C WHOSE CO-ORDINATES IN NDIM DIMENSIONS ARE IN X(NOBJ,NDIM). C C THE DISTANCES ARE STORED IN THE VECTOR DIST AND THE INDEX VECTORS C IIDX AND JIDX HOLD THE I,J INDICES OF THE POINTS IN THE ORDER IN C WHICH THE COMPARISONS ARE TO BE MADE. C C Written by Dr. Peter R. Minchin C Department of Biological Sciences C Southern Illinois University Edwardsville C PO Box 1651 C Edwardsville, IL 62026-1651, U.S.A. C Phone: +1-618-650-2975 FAX: +1-618-650-3174 C Email: pminchi@siue.edu C INTEGER IIDX(NDIS), JIDX(NDIS) DOUBLE PRECISION X(MAXOBJ,NDIM), DIST(NDIS) C C INITIALIZE DISTANCES C DO I=1,NDIS DIST(I)=0.0 ENDDO C C ACCUMULATE SUMS OF SQUARED DIFFERENCES ON EACH DIMENSION C DO IDIM=1,NDIM DO K=1,NDIS DIST(K)=DIST(K)+(X(IIDX(K),IDIM)-X(JIDX(K),IDIM))**2 ENDDO ENDDO C C TAKE SQUARE ROOTS OF TOTALS C DO I=1,NDIS DIST(I)=SQRT(DIST(I)) ENDDO RETURN END SUBROUTINE CLCDIS SUBROUTINE CLCGRD (X,GRAD,MAXOBJ,NDIM,DIST,DHAT,IIDX,JIDX, . NDIS,STRESS,SFACT,TFACT,ISFORM,DMEAN) C C ACCUMULATES THE NEGATIVE GRADIENT IN GRAD(NOBJ,NDIM). C C Written by Dr. Peter R. Minchin C Department of Biological Sciences C Southern Illinois University Edwardsville C PO Box 1651 C Edwardsville, IL 62026-1651, U.S.A. C Phone: +1-618-650-2975 FAX: +1-618-650-3174 C Email: pminchi@siue.edu C INTEGER IIDX(NDIS), JIDX(NDIS) DOUBLE PRECISION X(MAXOBJ,NDIM), GRAD(MAXOBJ,NDIM), DIST(NDIS), . DHAT(NDIS), STRESS, SFACT, TFACT, DMEAN, SOTSQ, RECIPT, . DELTA C IF (STRESS.LE.0.0D0) RETURN SOTSQ=SFACT/(TFACT**2) RECIPT=1.0/TFACT DO IDIM=1,NDIM IF (ISFORM.LE.1) THEN C---Kruskal's stress formula 1 DO K=1,NDIS IF (DIST(K).GT.0.0) THEN DELTA=(SOTSQ-RECIPT*(DIST(K)-DHAT(K))/DIST(K))* . (X(IIDX(K),IDIM)-X(JIDX(K),IDIM)) GRAD(IIDX(K),IDIM)=GRAD(IIDX(K),IDIM)+DELTA GRAD(JIDX(K),IDIM)=GRAD(JIDX(K),IDIM)-DELTA ENDIF ENDDO ELSE C---Kruskal's stress formula 2 DO K=1,NDIS IF (DIST(K).GT.0.0) THEN DELTA=(SOTSQ*(DIST(K)-DMEAN)/DIST(K)- . RECIPT*(DIST(K)-DHAT(K))/DIST(K))* . (X(IIDX(K),IDIM)-X(JIDX(K),IDIM)) GRAD(IIDX(K),IDIM)=GRAD(IIDX(K),IDIM)+DELTA GRAD(JIDX(K),IDIM)=GRAD(JIDX(K),IDIM)-DELTA ENDIF ENDDO ENDIF ENDDO RETURN END SUBROUTINE CLCGRD SUBROUTINE CLCSFA (GRAD,GRLAST,NOBJ,NDIM,MAXOBJ,SFGR,CAGRGL, . SFGLST) C C COMPUTES SCALE FACTOR OF THE NEGATIVE GRADIENT IN GRAD(NOBJ,NDIM) C AND ALSO FINDS ITS DIRECTION COSINE WITH THE PREVIOUS GRADIENT, C STORED IN GRLAST(NOBJ,NDIM). C C Written by Dr. Peter R. Minchin C Department of Biological Sciences C Southern Illinois University Edwardsville C PO Box 1651 C Edwardsville, IL 62026-1651, U.S.A. C Phone: +1-618-650-2975 FAX: +1-618-650-3174 C Email: pminchi@siue.edu C DOUBLE PRECISION GRAD(MAXOBJ,NDIM), GRLAST(MAXOBJ,NDIM), . SFGR, CAGRGL, SFGLST, FN, FACTOR C FN=DBLE(NOBJ) SFGR=0.0D0 CAGRGL=0.0D0 DO IDIM=1,NDIM DO IOBJ=1,NOBJ SFGR=SFGR+GRAD(IOBJ,IDIM)**2 CAGRGL=CAGRGL+GRAD(IOBJ,IDIM)*GRLAST(IOBJ,IDIM) ENDDO ENDDO SFGR=SQRT(SFGR/FN) FACTOR=SFGR*SFGLST*FN IF (FACTOR.NE.0.0) CAGRGL=CAGRGL/FACTOR RETURN END SUBROUTINE CLCSFA SUBROUTINE CLCSTP (STEP,IT,SFGR,STRESS,COSAV,ACOSAV,SRATIO, . SRATAV) C C COMPUTES NEW STEP SIZE. BASED ON J.B. KRUSKAL'S STEP SIZE ALGORITHM C IN THE BELL LABORATORIES PROGRAM "KYST". C C Written by Dr. Peter R. Minchin C Department of Biological Sciences C Southern Illinois University Edwardsville C PO Box 1651 C Edwardsville, IL 62026-1651, U.S.A. C Phone: +1-618-650-2975 FAX: +1-618-650-3174 C Email: pminchi@siue.edu C DOUBLE PRECISION STEP, SFGR, STRESS, COSAV, ACOSAV, SRATIO, . SRATAV, FACTR1, FACTR2, FACTR3 C C MAKE A WILD GUESS FOR INITIAL STEP SIZE (IT=0). C IF (IT.EQ.0) THEN STEP=25.0*STRESS*SFGR C C OTHERWISE, UPDATE STEP SIZE. C ELSE FACTR1=4.0**COSAV FACTR2=1.6/( (1.0+(MIN(1D0,SRATAV))**5) * . (1.0+ACOSAV-ABS(COSAV)) ) FACTR3=SQRT(MIN(1D0,SRATIO)) STEP=STEP*FACTR1*FACTR2*FACTR3 ENDIF RETURN END SUBROUTINE CLCSTP SUBROUTINE CLCSTR (DIST,DHAT,N,SNUMER,SDENOM,STRESS,ISFORM,DMEAN) C C COMPUTES KRUSKAL'S STRESS (FORMULA 1 or 2) C C Written by Dr. Peter R. Minchin C Department of Biological Sciences C Southern Illinois University Edwardsville C PO Box 1651 C Edwardsville, IL 62026-1651, U.S.A. C Phone: +1-618-650-2975 FAX: +1-618-650-3174 C Email: pminchi@siue.edu C DOUBLE PRECISION DIST(N), DHAT(N), SNUMER, SDENOM, STRESS, . DMEAN C SNUMER=0.0D0 SDENOM=0.0D0 DMEAN=0.0D0 IF (ISFORM.GE.2) THEN DO I=1,N DMEAN=DMEAN+DIST(I) ENDDO DMEAN=DMEAN/DBLE(N) DO I=1,N SNUMER=SNUMER+(DIST(I)-DHAT(I))**2 SDENOM=SDENOM+(DIST(I)-DMEAN)**2 ENDDO ELSE DO I=1,N SNUMER=SNUMER+(DIST(I)-DHAT(I))**2 SDENOM=SDENOM+DIST(I)**2 ENDDO ENDIF STRESS=SQRT(SNUMER/SDENOM) RETURN END SUBROUTINE CLCSTR SUBROUTINE LINREG (DISS,DIST,DHAT,N,C) C C PERFORMS LINEAR REGRESSION OF DIST ON DISS, PLACING THE FITTED VALUES C IN DHAT. THE REGRESSION COEFFICIENTS ARE RETURNED IN C: C C(1) = INTERCEPT, C(2) = SLOPE. C C Written by Dr. Peter R. Minchin C Department of Biological Sciences C Southern Illinois University Edwardsville C PO Box 1651 C Edwardsville, IL 62026-1651, U.S.A. C Phone: +1-618-650-2975 FAX: +1-618-650-3174 C Email: pminchi@siue.edu C DOUBLE PRECISION DISS(N), DIST(N), DHAT(N), . AVDISS, SSDISS, AVDIST, SPROD, C(2), FN C C COMPUTE MEANS, SUMS OF SQUARES AND SUM OF PRODUCTS C FN=DBLE(N) AVDIST=0.0D0 AVDISS=0.0D0 DO K=1,N AVDIST=AVDIST+DIST(K) AVDISS=AVDISS+DISS(K) ENDDO AVDIST=AVDIST/FN AVDISS=AVDISS/FN SSDISS=0.0D0 SPROD=0.0D0 DO K=1,N SSDISS=SSDISS+(DISS(K)-AVDISS)**2 SPROD=SPROD+(DIST(K)-AVDIST)*(DISS(K)-AVDISS) ENDDO C C COMPUTE SLOPE AND INTERCEPT C C(2)=SPROD/SSDISS C(1)=AVDIST-C(2)*AVDISS C C CALCULATE FITTED VALUES C DO K=1,N DHAT(K)=C(1)+C(2)*DISS(K) ENDDO RETURN END SUBROUTINE LINREG SUBROUTINE MACOPY (A,MAXN1,N,M,B,MAXN2) C C COPY MATRIX A(N,M) TO B(N,M). C C CAN BE USED TO PACK AN ARRAY BY PASSING THE SAME ARRAY AS A AND B, C WITH MAXN2 SET TO N. C C Written by Dr. Peter R. Minchin C Department of Biological Sciences C Southern Illinois University Edwardsville C PO Box 1651 C Edwardsville, IL 62026-1651, U.S.A. C Phone: +1-618-650-2975 FAX: +1-618-650-3174 C Email: pminchi@siue.edu C DOUBLE PRECISION A(MAXN1,M), B(MAXN2,M) C DO J=1,M DO I=1,N B(I,J)=A(I,J) ENDDO ENDDO RETURN END SUBROUTINE MACOPY SUBROUTINE MAINIT (X,M,N,MAXM,CONST) C C INITIALIZES MATRIX X(M,N) WITH THE VALUE CONST. C C Written by Dr. Peter R. Minchin C Department of Biological Sciences C Southern Illinois University Edwardsville C PO Box 1651 C Edwardsville, IL 62026-1651, U.S.A. C Phone: +1-618-650-2975 FAX: +1-618-650-3174 C Email: pminchi@siue.edu C DOUBLE PRECISION X(MAXM,N), CONST C DO J=1,N DO I=1,M X(I,J)=CONST ENDDO ENDDO RETURN END SUBROUTINE MAINIT SUBROUTINE MAMAB (A,B,L,M,N,MAXL1,MAXM,C,MAXL2) C C MATRIX MULTIPLICATION C=A.B C C MATRIX A(L,M) is multiplied by B(M,N) to give C(L,N) C C Written by Dr. Peter R. Minchin C Department of Biological Sciences C Southern Illinois University Edwardsville C PO Box 1651 C Edwardsville, IL 62026-1651, U.S.A. C Phone: +1-618-650-2975 FAX: +1-618-650-3174 C Email: pminchi@siue.edu C DOUBLE PRECISION A(MAXL1,M), B(MAXM,N), C(MAXL2,N) C DO I=1,L DO J=1,N C(I,J)=0.0 DO K=1,M C(I,J)=C(I,J)+A(I,K)*B(K,J) ENDDO ENDDO ENDDO RETURN END SUBROUTINE MAMAB SUBROUTINE MAMAS (A,MAXL,L,M,S) C C MULTIPLY MATRIX A(L,M) BY THE SCALAR S C C Written by Dr. Peter R. Minchin C Department of Biological Sciences C Southern Illinois University Edwardsville C PO Box 1651 C Edwardsville, IL 62026-1651, U.S.A. C Phone: +1-618-650-2975 FAX: +1-618-650-3174 C Email: pminchi@siue.edu C DOUBLE PRECISION A(MAXL,M), S C DO I=1,L DO J=1,M A(I,J)=A(I,J)*S ENDDO ENDDO RETURN END SUBROUTINE MAMAS SUBROUTINE MAMATA (A,L,M,MAXL,B,MAXM) C C MATRIX MULTIPLICATION B=A'.A C C The transpose of matrix A(L,M) is multiplied A(L,M) to give B(M,M) C C Written by Dr. Peter R. Minchin C Department of Biological Sciences C Southern Illinois University Edwardsville C PO Box 1651 C Edwardsville, IL 62026-1651, U.S.A. C Phone: +1-618-650-2975 FAX: +1-618-650-3174 C Email: pminchi@siue.edu C DOUBLE PRECISION A(MAXL,M), B(MAXM,M) C C COMPUTE B C DO I=1,M DO J=1,I B(I,J)=0.0 DO K=1,L B(I,J)=B(I,J)+A(K,I)*A(K,J) ENDDO B(J,I)=B(I,J) ENDDO ENDDO RETURN END SUBROUTINE MAMATA SUBROUTINE MANORM (A,MAXL,L,M,IOP) C C NORMALIZE THE ROWS (IOP=1) OR COLUMNS (IOP=2) OF THE MATRIX A(L,M) C (I.E. ADJUST THE SUMS OF SQUARED ELEMENTS TO 1.0). C C Written by Dr. Peter R. Minchin C Department of Biological Sciences C Southern Illinois University Edwardsville C PO Box 1651 C Edwardsville, IL 62026-1651, U.S.A. C Phone: +1-618-650-2975 FAX: +1-618-650-3174 C Email: pminchi@siue.edu C DOUBLE PRECISION A(MAXL,M), SUMSQ, FACTOR, SMALL C SMALL=SQRT(EPSILON(SUMSQ)) C C NORMALIZE ROWS C IF (IOP.EQ.1) THEN DO I=1,L SUMSQ=0.0D0 DO J=1,M SUMSQ=SUMSQ+A(I,J)*A(I,J) ENDDO IF (SUMSQ.GT.SMALL) THEN FACTOR=1.0/SQRT(SUMSQ) DO J=1,M A(I,J)=A(I,J)*FACTOR ENDDO ENDIF ENDDO C C NORMALIZE COLUMNS C ELSE DO J=1,M SUMSQ=0.0D0 DO I=1,L SUMSQ=SUMSQ+A(I,J)*A(I,J) ENDDO IF (SUMSQ.GT.SMALL) THEN FACTOR=1.0/SQRT(SUMSQ) DO I=1,L A(I,J)=A(I,J)*FACTOR ENDDO ENDIF ENDDO ENDIF RETURN END SUBROUTINE MANORM SUBROUTINE MONREG (DISS,DIST,DHAT,IIDX,JIDX,IWORK,N,ITIES) C C PERFORMS KRUSKAL'S MONOTONE REGRESSION OF DIST ON DISS, PLACING THE C FITTED VALUES IN DHAT. C C ASSUMES THAT DISS HAS BEEN SORTED ASCENDING. C C Written by Dr. Peter R. Minchin C Department of Biological Sciences C Southern Illinois University Edwardsville C PO Box 1651 C Edwardsville, IL 62026-1651, U.S.A. C Phone: +1-618-650-2975 FAX: +1-618-650-3174 C Email: pminchi@siue.edu C INTEGER IIDX(N), JIDX(N) INTEGER IWORK(N) DOUBLE PRECISION DISS(N), DIST(N), DHAT(N), DNEXT, TOLER, SUM, . DHATAV C---Tolerance used to test if dissimilarities are equal TOLER=SQRT(EPSILON(SUM)) C*********************************************************************** C C CREATE INITIAL PARTITION: C C PRE-PROCESS BLOCKS OF TIED DISS VALUES DEPENDING ON THE SELECTED C TIE TREATMENT (ITIES) C----------------------------------------------------------------------- J=0 DO I=1,N IF (I.LT.N) THEN DNEXT=DISS(I+1) ELSE DNEXT=DISS(I)+1.0 END IF IF (ABS(DNEXT-DISS(I)).GT.TOLER) THEN C---NTIE is the number of DISS values in the current group of tied values NTIE=I-J IF (NTIE.GT.1) THEN IF (ITIES.LE.1) THEN C---Primary tie treatment: sort DIST values within this tied group into C ascending order, permuting the index vectors accordingly. C Initialize fitted values, DHAT, to be equal to DIST and make each C value an intial block of size 1. CALL ASORT4 (DIST(J+1),NTIE,IIDX(J+1),JIDX(J+1)) DO K=J+1,I DHAT(K)=DIST(K) IWORK(K)=1 ENDDO ELSE C---Secondary tie treatment: set fitted value for all members of this C tied group to the average of the DIST values for the group. Make C the group of tied values an initial block equal in size to the C number of tied values. IF (NTIE.EQ.2) THEN SUM=DIST(J+1)+DIST(I) ELSE SUM=0.0 DO K=J+1,I SUM=SUM+DIST(K) ENDDO ENDIF DHAT(J+1)=SUM DHAT(I)=SUM IWORK(J+1)=NTIE IWORK(I)=NTIE ENDIF ELSE C---Initially, make each unique (not tied) value is DISS a block of C size 1. IWORK(I)=1 DHAT(I)=DIST(I) ENDIF J=I ENDIF ENDDO C*********************************************************************** C C NOW START THE MONOTONE REGRESSION PROCEDURE C C ICURR is the block we are currently examining. C C WE START BY LOOKING AT THE FIRST BLOCK. C----------------------------------------------------------------------- ICURR=1 C----------------------------------------------------------------------- C START OF PROCEDURE FOR THE CURRENT BLOCK. IT IS INITIALLY UP-ACTIVE, C AND NEITHER UP- NOR DOWN-SATISIFIED. C C UP-ACTIVE (IACTIV=1) means we are comparing DHAT for the current C block with DHAT for blocks to its right. C C DOWN-ACTIVE (IACTIV=0) means we are comparing DHAT for the current C block with DHAT for blocks to its left. C C UP-SATISFIED means that DHAT for the current block is less than DHAT C for the block to its right. C C DOWN-SATISFIED means that DHAT for the current block is greater than C DHAT for the block to its left. C C NSATIS will be 2 once a block is both UP- and DOWN-SATISFIED. C C----------------------------------------------------------------------- 25 IACTIV=1 NSATIS=0 C---Compute DHAT for the current block DHATAV=DHAT(ICURR)/IWORK(ICURR) C----------------------------------------------------------------------- C ACCORDING TO CURRENT ACTIVITY, CHECK WHETHER CURRENT BLOCK IS C UP-SATISFIED (IACTIV=1) OR DOWN-SATISIFED (IACTIV=0) C----------------------------------------------------------------------- 30 IF (IACTIV.EQ.0) THEN C----------------------------------------------------------------------- C CHECK WHETHER THIS BLOCK IS DOWN-SATISIFIED. IF NOT, MERGE. C----------------------------------------------------------------------- IF (ICURR.EQ.1) THEN C---If it's the first block, it is by definition down-satisfied NSATIS=NSATIS+1 ELSEIF (DHATAV.GT.DHAT(ICURR-1)/IWORK(ICURR-1)) THEN C---Current block is down-satisfied NSATIS=NSATIS+1 ELSE C---Current block is not down-satisfied, so merge it with the block to C its left and make the new merged block the current block ICNEW=ICURR-IWORK(ICURR-1) JCNEW=ICURR+IWORK(ICURR)-1 IWORK(ICNEW)=JCNEW-ICNEW+1 IWORK(JCNEW)=IWORK(ICNEW) DHAT(ICNEW)=DHAT(ICURR-1)+DHAT(ICURR) DHAT(JCNEW)=DHAT(ICNEW) ICURR=ICNEW DHATAV=DHAT(ICURR)/IWORK(ICURR) NSATIS=0 ENDIF ELSE C----------------------------------------------------------------------- C CHECK WHETHER THIS BLOCK IS UP-SATISIFIED. IF NOT, MERGE. C----------------------------------------------------------------------- C---Index of first member of the block to the right INEXT=ICURR+IWORK(ICURR) IF (INEXT.GT.N) THEN C---If current block is last block, it is, by definition up-satisified NSATIS=NSATIS+1 ELSEIF (DHATAV.LT.DHAT(INEXT)/IWORK(INEXT)) THEN C---Current block is up-satisfied NSATIS=NSATIS+1 ELSE C---Current block is not up-satisfied, so merge it with the block to C its right and make the new merged block the current block IWORK(ICURR)=IWORK(ICURR)+IWORK(INEXT) JCURR=ICURR+IWORK(ICURR)-1 IWORK(JCURR)=IWORK(ICURR) DHAT(ICURR)=DHAT(ICURR)+DHAT(INEXT) DHAT(JCURR)=DHAT(ICURR) DHATAV=DHAT(ICURR)/IWORK(ICURR) NSATIS=0 ENDIF ENDIF C----------------------------------------------------------------------- C TOGGLE ACTIVITY FOR THE CURRENT BLOCK. CHECK IF IT IS BOTH UP- AND C DOWN-SATISFIED. IF NOT, GO BACK AND KEEP TRYING. C----------------------------------------------------------------------- IACTIV=1-IACTIV IF (NSATIS.LT.2) GO TO 30 C----------------------------------------------------------------------- C ADVANCE TO THE NEXT BLOCK, CHECK IF FINISHED C----------------------------------------------------------------------- ICURR=ICURR+IWORK(ICURR) IF (ICURR.LE.N) GO TO 25 C*********************************************************************** C CHECKING AND MERGING OF BLOCKS IS COMPLETED. NOW PUT APPROPRIATE C AVERAGE VALUES IN ALL ELEMENTS OF DHAT C----------------------------------------------------------------------- ICURR=1 40 IF (IWORK(ICURR).GT.2) THEN DHATAV=DHAT(ICURR)/IWORK(ICURR) DO J=ICURR,ICURR+IWORK(ICURR)-1 DHAT(J)=DHATAV ENDDO ELSEIF (IWORK(ICURR).EQ.2) THEN DHAT(ICURR)=0.5*DHAT(ICURR) DHAT(ICURR+1)=DHAT(ICURR) ENDIF ICURR=ICURR+IWORK(ICURR) IF (ICURR.LT.N) GO TO 40 RETURN END SUBROUTINE MONREG SUBROUTINE NEWCON (X,GRAD,NOBJ,NDIM,MAXOBJ,STEP,SFGR) C C COMPUTES NEW CONFIGURATION, CHANGING EACH CO-ORDINATE ACCORDING TO C THE NEGATIVE GRADIENT. C C Written by Dr. Peter R. Minchin C Department of Biological Sciences C Southern Illinois University Edwardsville C PO Box 1651 C Edwardsville, IL 62026-1651, U.S.A. C Phone: +1-618-650-2975 FAX: +1-618-650-3174 C Email: pminchi@siue.edu C DOUBLE PRECISION X(MAXOBJ,NDIM), GRAD(MAXOBJ,NDIM), STEP, SFGR, . FACTOR C FACTOR=STEP/SFGR DO IDIM=1,NDIM DO IOBJ=1,NOBJ X(IOBJ,IDIM)=X(IOBJ,IDIM)+FACTOR*GRAD(IOBJ,IDIM) ENDDO ENDDO RETURN END SUBROUTINE NEWCON SUBROUTINE NRMCON (X,NOBJ,NDIM,MAXOBJ,SSFACT) C C NORMALIZES THE CURRENT CONFIGURATION IN X(NOBJ,NDIM). THE CENTROID C IS MOVED TO THE ZERO ORIGIN AND THE SUM OF SQUARES ADJUSTED SUCH C THAT THE RMS DISTANCE BETWEEN POINTS AND THE ORIGIN IS 1.0. C C ON RETURN, SSFACT CONTAINS THE SCALING FACTOR WHICH WAS USED. C C Written by Dr. Peter R. Minchin C Department of Biological Sciences C Southern Illinois University Edwardsville C PO Box 1651 C Edwardsville, IL 62026-1651, U.S.A. C Phone: +1-618-650-2975 FAX: +1-618-650-3174 C Email: pminchi@siue.edu C DOUBLE PRECISION X(MAXOBJ,NDIM), SSFACT, FN, FMEAN C C CENTER THE CONFIGURATION AND COMPUTE SCALING FACTOR C FN=DBLE(NOBJ) SSFACT=0.0D0 DO IDIM=1,NDIM FMEAN=0.0D0 DO IOBJ=1,NOBJ FMEAN=FMEAN+X(IOBJ,IDIM) ENDDO FMEAN=FMEAN/FN DO IOBJ=1,NOBJ X(IOBJ,IDIM)=X(IOBJ,IDIM)-FMEAN SSFACT=SSFACT+X(IOBJ,IDIM)**2 ENDDO ENDDO SSFACT=SQRT(FN/SSFACT) C C SCALE THE CONFIGURATION C CALL MAMAS (X,MAXOBJ,NOBJ,NDIM,SSFACT) RETURN END SUBROUTINE NRMCON vegan/src/goffactor.c0000644000176200001440000000312012122046457014256 0ustar liggesusers/* Helper functions used in envfit for assessing goodness of fit in * permuation tests. The functions are really minimal, but they are * the bottlenecks that need be hidden in C code. */ /* * Goodness of fit for a fitted factor: Sum of weighted variances * within factor levels. */ #include void goffactor(double *ord, int *f, double *w, int *nrow, int *ndim, int *nlev, double *sw, double *swx, double *swxx, double *var) { int i, j, k; for (i = 0; i < (*nlev); i++) { sw[i] = 0.0; } for (i = 0; i < (*nrow); i++) { sw[f[i]] += w[i]; } var[0] = 0.0; for (k = 0; k < (*ndim); k++) { for (i = 0; i < (*nlev) ; i++) { swx[i] = swxx[i] = 0.0; } for (i = k * (*nrow), j = 0; j < (*nrow); j++, i++) { swx[f[j]] += w[j]*ord[i]; swxx[f[j]] += w[j]*ord[i]*ord[i]; } for (j = 0; j < (*nlev); j++) { if (sw[j] > 0) var[0] += swxx[j] - swx[j]*swx[j]/sw[j]; } } return; } /* Weighted centring of a matrix. Needed in many places in * vectorfit. R implementations has one apply and two sweeps, and is * probably much too slow. */ #include /* sqrt */ void wcentre(double *x, double *w, int *nr, int *nc) { int i, j, ij; double sw, swx; for (i = 0, sw = 0.0; i < (*nr); i++) sw += w[i]; for (j = 0; j < (*nc) ; j++) { for (i = 0, swx = 0.0, ij = (*nr)*j; i < (*nr); i++, ij++) { swx += w[i] * x[ij]; } swx /= sw; for (i = 0, ij = (*nr)*j; i < (*nr); i++, ij++) { x[ij] -= swx; x[ij] *= sqrt(w[i]); } } } vegan/src/decorana.f0000644000176200001440000004270312122046457014075 0ustar liggesusersc Decorana: the classic goodie by Mark O. Hill c Ported to R by Jari Oksanen, September 2001: c * Kept only the numerical engine: subroutines eigy, cutup and c yxmult, and the subroutines eigy calls. c * Changed to lowercase so that it looks prettier. c * Changed to double precision throughout, with c 'implicit double precision (a-h,o-z)' for automatic variables. c * Changed 'ifix' to 'int', since g77 doesn't know 'ifix' for double. c * Removed all write statements (they don't show in GUI term -- c else it would make sense to add a `trace' parameter.) c c ORIGINAL INTRODUCTORY COMMENTS: c c Cornell Ecology Program Decorana - written by M.O. Hill, July 1979 c Source code and accompanying documentation are available from c Hugh G. Gauch, Jr., Ecology and Systematics, Cornell University, c Ithaca, New York 14850. c c Performs detrended correspondence analysis; also will do reciprocal c averaging as a special case. c c **** further modified by Dr Peter R. Minchin May-June 1997 c - changed tolerance to 0.000005 and iteration limit to 999 in c eigy - strict settings of oksanen & minchin 1997 c - corrected the order-dependent bug in smooth c - added parameter statements for maximum dimensions c - changed max. dimensions to 5000, 5000, 330000 c - updated handling of file names retrieved from command line c - moved character data to character variables c - now accepts relaxed ccf format, with maximum number of pairs c per record on line 3 c see: Oksanen, J. & Minchin, P.R. 1997. Instability of ordination c results under changes in input data order: explanations and c remedies. Journal of Vegetation Science 8: 447-454. c c subroutine cutup(x,ix,mi,mk) c takes a vector x and cuts up into (mk-4) segments, putting a c segmented version of the vector in ix. implicit double precision (a-h,o-z) double precision x(mi) integer ix(mi) mmk=mk-4 maxk=mk-2 call xmaxmi(x,axmax,axmin,mi) axbit=(axmax-axmin)/float(mmk) do 10 i=1,mi C--- iax=ifix((x(i)-axmin)/axbit)+3 iax=int((x(i)-axmin)/axbit)+3 if(iax.lt.3) iax=3 if(iax.gt.maxk) iax=maxk 10 ix(i)=iax return end c subroutine trans(y,yy, 1x,neig,ira,aidot,xeig1,xeig2,xeig3,ix1,ix2,ix3, 2mi,mk,n,nid,ibegin,iend,idat,qidat) c this subroutine is the crux of the whole program, in that it c takes a set of species scores y and iterates to find a new set c of scores yy. repeated iteration of this subroutine would lead c eventually to the correct solution (except that the scores need c to be divided by the y-totals adotj at each iteration). the c calling program eigy is made lengthy by some fancy algebra put c there to speed up the calculation. essentially trans is the c standard reciprocal averaging iteration with either detrending c with respect to previously derived axes (in the case of detrended c correspondence analysis) or orthogonalization with respect to c them (in the case of reciprocal averaging). implicit double precision (a-h,o-z) double precision x(mi),xeig1(mi),xeig2(mi),xeig3(mi) double precision y(n),yy(n),aidot(mi),qidat(nid) integer ix1(mi),ix2(mi),ix3(mi),idat(nid),ibegin(mi),iend(mi) call yxmult(y,x,mi,n,nid,ibegin,iend,idat,qidat) do 10 i=1,mi 10 x(i)=x(i)/aidot(i) if(neig.eq.0) goto 200 if(ira.eq.1) goto 100 call detrnd(x,aidot,ix1,mi,mk) if(neig.eq.1) goto 200 call detrnd(x,aidot,ix2,mi,mk) if(neig.eq.2) goto 90 call detrnd(x,aidot,ix3,mi,mk) call detrnd(x,aidot,ix2,mi,mk) 90 call detrnd(x,aidot,ix1,mi,mk) goto 200 100 a1=0.0 do 110 i=1,mi 110 a1=a1+aidot(i)*x(i)*xeig1(i) do 120 i=1,mi 120 x(i)=x(i)-a1*xeig1(i) if(neig.eq.1) goto 200 a2=0.0 do 130 i=1,mi 130 a2=a2+aidot(i)*x(i)*xeig2(i) do 140 i=1,mi 140 x(i)=x(i)-a2*xeig2(i) if(neig.eq.2) goto 200 a3=0.0 do 150 i=1,mi 150 a3=a3+aidot(i)*x(i)*xeig3(i) do 160 i=1,mi 160 x(i)=x(i)-a3*xeig3(i) 200 call xymult(x,yy,mi,n,nid,ibegin,iend,idat,qidat) return end c subroutine detrnd(x,aidot,ix,mi,mk) implicit double precision (a-h,o-z) double precision x(mi),z(50),zn(50),zbar(50),aidot(mi) integer ix(mi) c starts with a vector x and detrends with respect to groups defined c by ix. detrending is in blocks of 3 units at a time, and the c result calculated is the average of the 3 possible results that c can be obtained, corresponding to 3 possible starting positions c for the blocks of 3. do 10 k=1,mk z(k)=0.0 10 zn(k)=0.0 do 20 i=1,mi k=ix(i) z(k)=z(k)+x(i)*aidot(i) 20 zn(k)=zn(k)+aidot(i) mmk=mk-1 do 30 k=2,mmk 30 zbar(k)=(z(k-1)+z(k)+z(k+1))/(zn(k-1)+zn(k)+zn(k+1)+1.0e-12) mmk=mmk-1 do 35 k=3,mmk 35 z(k)=(zbar(k-1)+zbar(k)+zbar(k+1))/3.0 do 40 i=1,mi k=ix(i) 40 x(i)=x(i)-z(k) return end c Function segfit is identical to detrnd, but it also returns the fitted c values z. x is respone in input, and residuals in output. --Added by c J. Oksanen 1 Oct, 2010. subroutine segfit(x,aidot,ix,mi,mk,fit) implicit double precision (a-h,o-z) double precision x(mi),z(50),zn(50),zbar(50),aidot(mi) double precision fit(mi) integer ix(mi) do 10 k=1,mk z(k)=0.0 10 zn(k)=0.0 do 20 i=1,mi k=ix(i) z(k)=z(k)+x(i)*aidot(i) 20 zn(k)=zn(k)+aidot(i) mmk=mk-1 do 30 k=2,mmk 30 zbar(k)=(z(k-1)+z(k)+z(k+1))/(zn(k-1)+zn(k)+zn(k+1)+1.0e-12) mmk=mmk-1 do 35 k=3,mmk 35 z(k)=(zbar(k-1)+zbar(k)+zbar(k+1))/3.0 do 40 i=1,mi k=ix(i) fit(i) = z(k) 40 x(i)=x(i)-z(k) return end c subroutine eigy(x,y,eig,neig,ira,iresc,short, 1mi,mk,n,nid,ibegin,iend,idat,qidat,y2,y3,y4,y5, 2xeig1,xeig2,xeig3,ix1,ix2,ix3,aidot,adotj) c extracts an eigenvector y with eigenvalue eig. the algebra c is a little complicated, but consists essentially of repre- c senting the transformation (subroutine trans) approximately c by a tridiagonal 4x4 matrix. the eigenproblem for the c tridiagonal matrix is solved and this solution is plugged c back in to obtain a new trial vector. c after getting the eigenvector, the scores may be rescaled c (subroutine strtch). implicit double precision (a-h,o-z) double precision x(mi),y(n),y2(n),y3(n),y4(n),y5(n) double precision xeig1(mi),xeig2(mi),xeig3(mi),aidot(mi),adotj(n) double precision qidat(nid) integer ibegin(mi),iend(mi),idat(nid),ix1(mi),ix2(mi),ix3(mi) c strings to print R warnings character*64 warning character*2 axnam tot=0.0 do 10 j=1,n tot=tot+adotj(j) 10 y(j)=float(j) y(1)=1.1 c---tolerance reduced by p.minchin jan 1997 c tol=0.0001 tol=0.000005 call trans(y,y, 1x,neig,ira,aidot,xeig1,xeig2,xeig3,ix1,ix2,ix3, 2mi,mk,n,nid,ibegin,iend,idat,qidat) icount=0 20 a=0.0 do 30 j=1,n 30 a=a+y(j)*adotj(j) a=a/tot ex=0.0 do 40 j=1,n ay=y(j)-a ex=ex+ay*ay*adotj(j) 40 y(j)=ay ex=sqrt(ex) do 50 j=1,n 50 y(j)=y(j)/ex call trans(y,y2, 1x,neig,ira,aidot,xeig1,xeig2,xeig3,ix1,ix2,ix3, 2mi,mk,n,nid,ibegin,iend,idat,qidat) a=0.0 a11=0.0 a12=0.0 a22=0.0 a23=0.0 a33=0.0 a34=0.0 a44=0.0 do 60 j=1,n ay=y2(j) y2(j)=ay/adotj(j) a=a+ay 60 a11=a11+ay*y(j) a=a/tot do 70 j=1,n ay=y2(j)-(a+a11*y(j)) a12=a12+ay*ay*adotj(j) 70 y2(j)=ay a12=sqrt(a12) do 80 j=1,n 80 y2(j)=y2(j)/a12 c---------removed write statements-------------------------- c if(icount.eq.0) write(*,1000) c 1000 format(/1x) c write(*,1011) a12,icount c 1011 format(1x,'residual',f10.6,' at iteration',i3) if(a12.lt.tol) goto 200 c---maximum iteration limit increased by P.Minchin jan 1997 c if(icount.gt.9) goto 200 if(icount.gt.999) goto 200 icount=icount+1 call trans(y2,y3, 1x,neig,ira,aidot,xeig1,xeig2,xeig3,ix1,ix2,ix3, 2mi,mk,n,nid,ibegin,iend,idat,qidat) a=0.0 b13=0.0 do 90 j=1,n ay=y3(j) y3(j)=ay/adotj(j) a=a+ay a22=a22+ay*y2(j) 90 b13=b13+ay*y(j) a=a/tot do 100 j=1,n ay=y3(j)-(a+a22*y2(j)+b13*y(j)) a23=a23+ay*ay*adotj(j) 100 y3(j)=ay a23=sqrt(a23) if(a23.gt.tol) goto 105 a23=0.0 goto 160 105 continue do 110 j=1,n 110 y3(j)=y3(j)/a23 call trans(y3,y4, 1x,neig,ira,aidot,xeig1,xeig2,xeig3,ix1,ix2,ix3, 2mi,mk,n,nid,ibegin,iend,idat,qidat) a=0.0 b14=0.0 b24=0.0 do 120 j=1,n ay=y4(j) y4(j)=y4(j)/adotj(j) a=a+ay a33=a33+ay*y3(j) b14=b14+ay*y(j) 120 b24=b24+ay*y2(j) a=a/tot do 130 j=1,n ay=y4(j)-(a+a33*y3(j)+b14*y(j)+b24*y2(j)) a34=a34+ay*ay*adotj(j) 130 y4(j)=ay a34=sqrt(a34) if(a34.gt.tol) goto 135 a34=0.0 goto 160 135 continue do 140 j=1,n 140 y4(j)=y4(j)/a34 call trans(y4,y5, 1x,neig,ira,aidot,xeig1,xeig2,xeig3,ix1,ix2,ix3, 2mi,mk,n,nid,ibegin,iend,idat,qidat) do 150 j=1,n 150 a44=a44+y4(j)*y5(j) c we now have the tridiagonal representation of trans. solve c eigenproblem for tridiagonal matrix. 160 ax1=1.0 ax2=0.1 ax3=0.01 ax4=0.001 do 170 itimes=1,100 axx1=a11*ax1+a12*ax2 axx2=a12*ax1+a22*ax2+a23*ax3 axx3=a23*ax2+a33*ax3+a34*ax4 axx4=a34*ax3+a44*ax4 ax1=a11*axx1+a12*axx2 ax2=a12*axx1+a22*axx2+a23*axx3 ax3=a23*axx2+a33*axx3+a34*axx4 ax4=a34*axx3+a44*axx4 ex=sqrt(ax1**2+ax2**2+ax3**2+ax4**2) ax1=ax1/ex ax2=ax2/ex ax3=ax3/ex ax4=ax4/ex if(itimes.ne.(itimes/5)*5) goto 170 exx=sqrt(ex) resi=sqrt((ax1-axx1/exx)**2+(ax2-axx2/exx)**2+ 1(ax3-axx3/exx)**2+(ax4-axx4/exx)**2) if(resi.lt.tol*0.05) goto 180 170 continue 180 continue do 190 j=1,n 190 y(j)=ax1*y(j)+ax2*y2(j)+ax3*y3(j)+ax4*y4(j) goto 20 c-----------Removed write statements, added 200 continue-------- 200 continue c 200 write(*,1010) a11 c 1010 format(1x,'eigenvalue',f10.5) c if(a12.gt.tol) write(*,1012) tol c 1012 format(1x,'*** beware *** residual bigger than tolerance', c 1', which is',f10.6) c R version of the above warning. You must change the length of c character*n warning definition if you change the warning text if (a12 .gt. tol) then if (neig .eq. 0) axnam = "1" if (neig .eq. 1) axnam = "2" if (neig .eq. 2) axnam = "3" if (neig .eq. 3) axnam = "4" warning = "residual bigger than tolerance on axis "//axnam call rwarn(warning) end if c we calculate x from y, and set x to unit length if reciprocal c averaging option is in force (ira=1) call xmaxmi(y,aymax,aymin,n) sign=1.0 if(-aymin.gt.aymax) sign=-1.0 do 210 j=1,n 210 y(j)=y(j)*sign call yxmult(y,x,mi,n,nid,ibegin,iend,idat,qidat) do 220 i=1,mi 220 x(i)=x(i)/aidot(i) if(iresc.eq.0) goto 225 if(a11.gt.0.999) goto 225 do 223 i=1,iresc monit=0 if(i.eq.1.or.i.eq.iresc) monit=1 call strtch(x,y,short,monit, 1mi,n,nid,aidot,ibegin,iend,idat,qidat) 223 continue eig=a11 return 225 axlong=0.0 do 230 i=1,mi 230 axlong=axlong+aidot(i)*x(i)**2 axlong=sqrt(axlong) do 240 i=1,mi 240 x(i)=x(i)/axlong do 250 j=1,n 250 y(j)=y(j)/axlong c it remains to scale y to unit within-sample standard deviation sumsq=0.0 do 260 i=1,mi id1=ibegin(i) id2=iend(i) ax=x(i) do 255 id=id1,id2 j=idat(id) 255 sumsq=sumsq+qidat(id)*(ax-y(j))**2 260 continue sd=sqrt(sumsq/tot) if(a11.le.0.999) goto 265 sd=aymax/axlong sd1=-aymin/axlong if(sd1.gt.sd) sd=sd1 265 continue do 270 j=1,n 270 y(j)=y(j)/sd eig=a11 return end c subroutine xymult(x,y,mi,n,nid,ibegin,iend,idat,qidat) c starts with vector x and forms matrix product y=ax implicit double precision (a-h,o-z) double precision x(mi),y(n),qidat(nid) integer ibegin(mi),iend(mi),idat(nid) do 10 j=1,n 10 y(j)=0.0 do 30 i=1,mi id1=ibegin(i) id2=iend(i) ax=x(i) do 20 id=id1,id2 j=idat(id) 20 y(j)=y(j)+ax*qidat(id) 30 continue return end c subroutine yxmult(y,x,mi,n,nid,ibegin,iend,idat,qidat) c starts with vector y and forms matrix product x=ay implicit double precision (a-h,o-z) double precision x(mi),y(n),qidat(nid) integer ibegin(mi),iend(mi),idat(nid) do 20 i=1,mi id1=ibegin(i) id2=iend(i) ax=0.0 do 10 id=id1,id2 j=idat(id) 10 ax=ax+y(j)*qidat(id) 20 x(i)=ax return end c subroutine xmaxmi(x,axmax,axmin,m) c forms maximum and minimum of x(m) implicit double precision (a-h,o-z) double precision x(m) axmax=-1.0e10 axmin=-axmax do 10 i=1,m ax=x(i) if(ax.gt.axmax) axmax=ax if(ax.lt.axmin) axmin=ax 10 continue return end c c subroutine strtch(x,y,short,monit, 1mi,n,nid,aidot,ibegin,iend,idat,qidat) c takes an axis (x,y) and scales to unit mean square dev of species c scores per sample. an attempt is made for longer axes (l > short) c to squeeze them in and out so that they have the right mean square c deviation all the way along the axis and not only on average. implicit double precision (a-h,o-z) double precision x(mi),y(n),aidot(mi),qidat(nid) double precision zn(50),zv(50) integer ibegin(mi),iend(mi),idat(nid) c Use monit so that gfortran -Wall does not warn for it being unused monit = 0 c---common block added by p.minchin feb 1988 c common /lunits/ iuinp1,iuinp2,iuout1,iuout2,iuout3 do 200 icount=1,2 mk=20 call segmnt(x,y,zn,zv,mi,mk,n,nid, 1aidot,ibegin,iend,idat,qidat) call smooth(zv,mk) call smooth(zn,mk) zvsum=0.0 do 50 k=1,mk 50 zvsum=zvsum+zv(k)/zn(k) sd=sqrt(zvsum/float(mk)) c we want mean within-sample square deviation to be 1.0, so we divide c everything by sd along=0.0 do 60 i=1,mi ax=x(i)/sd x(i)=ax 60 if(along.lt.ax) along=ax c--------Removed write statements---------------------------- c if(icount.eq.1.and.monit.eq.1) write(*,1000) c 1000 format(/1x) c if(monit.eq.1) write(*,1001) along c 1001 format(1x,'length of gradient',f10.3) do 70 j=1,n 70 y(j)=y(j)/sd if(along.lt.short) return if(icount.eq.2) return c mk=ifix(along*5.0)+1 mk=int(along*5.0)+1 if(mk.lt.10) mk=10 if(mk.gt.45) mk=45 call segmnt(x,y,zn,zv,mi,mk,n,nid,aidot,ibegin,iend,idat,qidat) call smooth(zv,mk) call smooth(zn,mk) zvsum=0.0 do 100 k=1,mk azv=1.0/sqrt(0.2/along+zv(k)/zn(k)) zvsum=zvsum+azv 100 zv(k)=azv do 110 k=1,mk 110 zv(k)=zv(k)*along/zvsum c----------Removed write statements------------------------- c if(monit.eq.1) write(*,1002) (zv(k),k=1,mk) c 1002 format(1x,'length of segments',10f6.2) az=0.0 zn(1)=0.0 do 120 k=1,mk az=az+zv(k) 120 zn(k+1)=az axbit=along/float(mk) do 130 j=1,n C iay=ifix(y(j)/axbit)+1 iay=int(y(j)/axbit)+1 if(iay.lt.1) iay=1 if(iay.gt.mk) iay=mk 130 y(j)=zn(iay)+zv(iay)*(y(j)/axbit-float(iay-1)) call yxmult(y,x,mi,n,nid,ibegin,iend,idat,qidat) do 140 i=1,mi 140 x(i)=x(i)/aidot(i) 200 continue return end c subroutine smooth(z,mk) implicit double precision (a-h,o-z) double precision z(mk) c takes a vector z and does (1,2,1)-smoothing until no blanks left c and then 2 more iterations of (1,2,1)-smoothing. if no blanks to c begin with, then does 3 smoothings, i.e. effectively (1,6,15,20, c 15,6,1)-smoothing. istop=1 do 20 icount=1,50 az2=z(1) az3=z(2) if(az3.eq.0.0) istop=0 z(1)=0.75*az2+0.25*az3 do 10 k3=3,mk az1=az2 az2=az3 az3=z(k3) c---bug in next line fixed by p.minchin jan 1997 c if(az3.lt.0.0) istop=0 if(az3.le.0.0) istop=0 10 z(k3-1)=0.5*(az2+0.5*(az1+az3)) z(mk)=0.25*az2+0.75*az3 istop=istop+1 if(istop.eq.4) goto 30 20 continue 30 return end c subroutine segmnt(x,y,zn,zv,mi,mk,n,nid, 1aidot,ibegin,iend,idat,qidat) c given an ordination (x,y), calculates numbers and summed mean-square c deviations in mk segments. zn(k) is the number of samples in segment c k; zv(k) is the summed mean-square deviation. (we aim to make zv, c zn as nearly equal as possible.) implicit double precision (a-h,o-z) double precision x(mi),y(n),zn(mk),zv(mk),aidot(mi),qidat(nid) integer ibegin(mi),iend(mi),idat(nid) do 10 k=1,mk zn(k)=-1.0e-20 10 zv(k)=-1.0e-20 call xmaxmi(x,axmax,axmin,mi) axbit=(axmax-axmin)/float(mk) do 20 i=1,mi 20 x(i)=x(i)-axmin do 30 j=1,n 30 y(j)=y(j)-axmin do 50 i=1,mi sqcorr=0.0 sumsq=2.0e-20 id1=ibegin(i) id2=iend(i) ax=x(i) do 40 id=id1,id2 j=idat(id) aij=qidat(id) sqcorr=sqcorr+aij**2 40 sumsq=sumsq+aij*(ax-y(j))**2 sqcorr=sqcorr/aidot(i)**2 if(sqcorr.gt.0.9999) sqcorr=0.9999 sumsq=sumsq/aidot(i) c k=ifix(ax/axbit)+1 k=int(ax/axbit)+1 if(k.gt.mk) k=mk if(k.lt.1) k=1 zv(k)=zv(k)+sumsq zn(k)=zn(k)+1.0-sqcorr 50 continue return end vegan/src/data2hill.c0000644000176200001440000000324112122046457014154 0ustar liggesusers/********************************************************* Changes a data matrix into a form used internally in Mark Hill's programs DECORANA and TWINSPAN. There was an R version, but profiling showed it was a bottleneck. Using this C version saved 30& running time in all matrix sizes tested (although it matters only for large data sets). The original R function is at the end of this function as a comment. **********************************************************/ #include void data2hill(double *x, int *mi, int *n, int *nid, int *ibegin, int *iend, int *idat, double *qidat) { int nr, nc, i, j, ij, now; nr = *mi; nc = *n; if (nr <= 0 || nc <= 0) error("zero extent dimensions"); now=0; for (i=0; i 0.0) { idat[now] = j+1; qidat[now] = x[ij]; now++; } } iend[i] = now; } ibegin[0] = 1; for (i=1; i0, 1, sum) */ /* iend <- cumsum(rcount) */ /* ibegin <- c(0,iend[-nr])+1 */ /* nz <- iend[nr] */ /* idat <- rep(NA, nz) */ /* qidat <- rep(NA, nz) */ /* sp.index <- 1:nc */ /* for (j in 1:nr) { */ /* hit <- x[j,] > 0 */ /* idat[ibegin[j]:iend[j]] <- sp.index[hit] */ /* qidat[ibegin[j]:iend[j]] <- x[j, hit] */ /* } */ /* list(mi=nr, n=nc, nid=nz, ibegin=ibegin, iend=iend, idat=idat, qidat=qidat) */ /* } */ vegan/src/cepin.f0000644000176200001440000001214212122046457013411 0ustar liggesusersC ************************************************************* C Based on my standard cepin module. This had to be vandalized, C since R cannot interface with character arrays: It can handle only C a single character*255 variable. So the routine had to be broken C into pieces, and assume that the file opened is still there when C called repeatedly. C C I feel really bad for this. C C Since the subroutine had to be split, I split it completely: C Each file type is read in a separate subroutine, so that I can C get rid off static work arrays. C C Jari Oksanen, Sep 16, 2001 C C ************************************************************* C C Read the file header. C The file is left open (that's magic...), and everything C needed is the format, the `kind' of the file, the number C of items in a record (`nitem'), and number of records for C `kind=1'. The `kind' is interpreted from number of I's in `fmt'. C subroutine cephead(cepfile, kind, nitem, nst, fmt) character*255 cepfile, fmt integer kind, nitem, nst character*80 title integer ni, nbrac ni=0 nbrac=0 open (unit=1,file=cepfile,status='old') read (1,101) title 101 format (a80) read (1,101) fmt do i=1,80 if (fmt(i:i) .eq. 'I' .or. fmt(i:i) .eq. 'i') ni=ni+1 end do kind = ni+1 if (kind .eq. 1) then read(1, *) nitem, nst return endif nbrac=0 do i=1,80 if (fmt(i:i) .eq. '(' ) nbrac=nbrac+1 if (fmt(i:i) .eq. ')' ) then nbrac=nbrac-1 if (nbrac .le. 0) goto 6 end if goto 8 6 ii=i+2 if (ii .le. 69) read(fmt,'(t69,i2)') nitem if (nitem .eq. 0) then read (1,*) nitem else fmt(ii:80)=' ' endif 8 continue enddo return end c c Open CEP format (kind=2). c Zeros are skipped, negative entries stored c Stop when negative site (row) index found. c subroutine cepopen(fmt, nitem, maxdat, nsp, nst, idplot, idspec, X abund, work, ier) character*255 fmt integer nitem, nsp, nst integer idplot(maxdat), idspec(maxdat) double precision abund(maxdat) integer id, ii, j, ier double precision work(nitem) nsp = nitem nst = 0 id = 0 ier = 99 20 read (1, fmt) ii, (work(j),j=1,nitem) if (ii .le. 0) then ier = 0 return endif if (ii .gt. nst) then nst=ii end if do j=1,nitem if (work(j) .ne. 0) then id = id+1 if (id .gt. maxdat) then ier = 1 return endif idplot(id) = ii idspec(id) = j abund(id) = work(j) endif end do goto 20 end C C Condensed CEP format (kind=3) C ALL entries are stored in condensed format (except zeros) C subroutine cepcond(fmt, nitem, maxdat, nsp, nst, idplot, idspec, X abund, work, item, ier) character*255 fmt integer nitem, nsp, nst integer idplot(maxdat), idspec(maxdat) double precision abund(maxdat) integer id, ii, j, ier integer item(nitem) double precision work(nitem) nsp = 0 nst = 0 id = 0 ier = 99 40 read (1,fmt) ii,(item(j),work(j),j=1,nitem) if (ii .le. 0) then ier = 0 return endif if (ii .gt. nst) then nst = ii endif do j = 1,nitem if (item(j) .gt. 0 .and. work(j) .ne. 0.0) then id = id+1 if (id .gt. maxdat) then ier = 1 return endif idplot(id) = ii if (item(j) .gt. nsp) then nsp = item(j) endif idspec(id) = item(j) abund(id) = work(j) endif enddo goto 40 end c c Free CEP format (kind=1) -- or error! c Get everything but zeros. c subroutine cepfree(nitem, maxdat, nsp, nst, idplot, idspec, X abund, work, ier) integer nitem, nsp, nst, maxdat integer idplot(maxdat), idspec(maxdat) double precision abund(maxdat) integer id, j, i, ier double precision work(nitem) nsp = nitem nst = nst id = 0 ier = 99 do i=1,nst read(1,*) (work(j),j=1,nsp) do j=1,nsp if(work(j) .ne. 0) then id=id+1 if (id .gt. maxdat) then ier = 1 return endif abund(id) = work(j) idspec(id) = j idplot(id) = i endif enddo enddo ier = 0 return end c c R can handle only a single character*255: c Names cannot be read in one time, but they must be c handled line by line. c subroutine cepnames(entname) character*255 entname read (1,1100, end=666) entname 1100 format (a80) 666 continue return end c c Stupid, but needed c subroutine cepclose() close(1) return end vegan/man/0000755000176200001440000000000012122046275012126 5ustar liggesusersvegan/man/wcmdscale.Rd0000644000176200001440000001203512116653256014366 0ustar liggesusers% Based on: % File src/library/stats/man/cmdscale.Rd % Part of the R package, http://www.R-project.org % Copyright 1995-2007 R Core Development Team % Distributed under GPL 2 or later \name{wcmdscale} \alias{wcmdscale} \alias{scores.wcmdscale} \alias{plot.wcmdscale} \title{Weighted Classical (Metric) Multidimensional Scaling} \usage{ wcmdscale(d, k, eig = FALSE, add = FALSE, x.ret = FALSE, w) \method{plot}{wcmdscale}(x, choices = c(1, 2), type = "t", ...) \method{scores}{wcmdscale}(x, choices = NA, ...) } \description{ Weighted classical multidimensional scaling, also known as weighted \emph{principal coordinates analysis}. } \arguments{ \item{d}{a distance structure such as that returned by \code{dist} or a full symmetric matrix containing the dissimilarities.} \item{k}{the dimension of the space which the data are to be represented in; must be in \eqn{\{1,2,\ldots,n-1\}}{{1,2,\ldots,n-1}}. If missing, all dimensions with above zero eigenvalue.} \item{eig}{indicates whether eigenvalues should be returned.} \item{add}{logical indicating if an additive constant \eqn{c*} should be computed, and added to the non-diagonal dissimilarities such that all \eqn{n-1} eigenvalues are non-negative. \strong{Not implemented}. } \item{x.ret}{indicates whether the doubly centred symmetric distance matrix should be returned.} \item{w}{Weights of points.} \item{x}{The \code{wcmdscale} result object when the function was called with options \code{eig = TRUE} or \code{x.ret = TRUE} (See Details).} \item{choices}{Axes to be returned; \code{NA} returns all real axes.} \item{type}{Type of graph which may be \code{"t"}ext, \code{"p"}oints or \code{"n"}one.} \item{\dots}{Other arguments passed to graphical functions.} } \details{ Function \code{wcmdscale} is based on function \code{\link{cmdscale}} (package \pkg{stats} of base \R), but it uses point weights. Points with high weights will have a stronger influence on the result than those with low weights. Setting equal weights \code{w = 1} will give ordinary multidimensional scaling. With default options, the function returns only a matrix of scores scaled by eigenvalues for all real axes. If the function is called with \code{eig = TRUE} or \code{x.ret = TRUE}, the function returns an object of class \code{"wcmdscale"} with \code{print}, \code{plot}, \code{scores}, \code{\link{eigenvals}} and \code{\link{stressplot}} methods, and described in section Value. } \value{ If \code{eig = FALSE} and \code{x.ret = FALSE} (default), a matrix with \code{k} columns whose rows give the coordinates of points corresponding to positive eignenvalues. Otherwise, an object of class \code{wcmdscale} containing the components that are mostly similar as in \code{\link{cmdscale}}: \item{points}{a matrix with \code{k} columns whose rows give the coordinates of the points chosen to represent the dissimilarities.} \item{eig}{the \eqn{n-1} eigenvalues computed during the scaling process if \code{eig} is true.} \item{x}{the doubly centred and weighted distance matrix if \code{x.ret} is true.} \item{GOF}{Goodness of fit statistics for \code{k} axes. The first value is based on the sum of absolute values of all eigenvalues, and the second value is based on the sum of positive eigenvalues} \item{weights}{Weights.} \item{negaxes}{A matrix of scores for axes with negative eigenvalues scaled by the absolute eigenvalues similarly as \code{points}. This is \code{NULL} if there are no negative eigenvalues or \code{k} was specified, and would not include negative eigenvalues.} \item{call}{Function call.} } \references{ Gower, J. C. (1966) Some distance properties of latent root and vector methods used in multivariate analysis. \emph{Biometrika} \bold{53}, 325--328. Mardia, K. V., Kent, J. T. and Bibby, J. M. (1979). Chapter 14 of \emph{Multivariate Analysis}, London: Academic Press. } \seealso{The function is modelled after \code{\link{cmdscale}}, but adds weights (hence name) and handles negative eigenvalues differently. Other multidimensional scaling methods are \code{\link{monoMDS}}, and \code{\link[MASS]{isoMDS}} and \code{\link[MASS]{sammon}} in package \pkg{MASS}. } \examples{ ## Correspondence analysis as a weighted principal coordinates ## analysis of Euclidean distances of Chi-square transformed data data(dune) rs <- rowSums(dune)/sum(dune) d <- dist(decostand(dune, "chi")) ord <- wcmdscale(d, w = rs, eig = TRUE) ## Ordinary CA ca <- cca(dune) ## Eigevalues are numerically similar ca$CA$eig - ord$eig ## Configurations are similar when site scores are scaled by ## eigenvalues in CA procrustes(ord, ca, choices=1:19, scaling = 1) plot(procrustes(ord, ca, choices=1:2, scaling=1)) ## Reconstruction of non-Euclidean distances with negative eigenvalues d <- vegdist(dune) ord <- wcmdscale(d, eig = TRUE) ## Only positive eigenvalues: cor(d, dist(ord$points)) ## Correction with negative eigenvalues: cor(d, sqrt(dist(ord$points)^2 - dist(ord$negaxes)^2)) } \keyword{multivariate} vegan/man/wascores.Rd0000644000176200001440000000454411603334547014257 0ustar liggesusers\name{wascores} \alias{wascores} \alias{eigengrad} \title{ Weighted Averages Scores for Species } \description{ Computes Weighted Averages scores of species for ordination configuration or for environmental variables. } \usage{ wascores(x, w, expand=FALSE) eigengrad(x, w) } \arguments{ \item{x}{Environmental variables or ordination scores.} \item{w}{Weights: species abundances.} \item{expand}{Expand weighted averages so that they have the same weighted variance as the corresponding environmental variables. } } \details{ Function \code{wascores} computes weighted averages. Weighted averages `shrink': they cannot be more extreme than values used for calculating the averages. With \code{expand = TRUE}, the function `dehsrinks' the weighted averages by making their biased weighted variance equal to the biased weighted variance of the corresponding environmental variable. Function \code{eigengrad} returns the inverses of squared expansion factors or the attribute \code{shrinkage} of the \code{wascores} result for each environmental gradient. This is equal to the constrained eigenvalue of \code{\link{cca}} when only this one gradient was used as a constraint, and describes the strength of the gradient. } \value{ Function \code{wascores} returns a matrix where species define rows and ordination axes or environmental variables define columns. If \code{expand = TRUE}, attribute \code{shrinkage} has the inverses of squared expansion factors or \code{\link{cca}} eigenvalues for the variable. Function \code{eigengrad} returns only the \code{shrinkage} attribute. } \author{ Jari Oksanen } \seealso{ \code{\link{monoMDS}}, \code{\link{cca}}. } \examples{ data(varespec) data(varechem) vare.dist <- vegdist(wisconsin(varespec)) vare.mds <- monoMDS(vare.dist) vare.points <- postMDS(vare.mds$points, vare.dist) vare.wa <- wascores(vare.points, varespec) plot(scores(vare.points), pch="+", asp=1) text(vare.wa, rownames(vare.wa), cex=0.8, col="blue") ## Omit rare species (frequency <= 4) freq <- apply(varespec>0, 2, sum) plot(scores(vare.points), pch="+", asp=1) text(vare.wa[freq > 4,], rownames(vare.wa)[freq > 4],cex=0.8,col="blue") ## Works for environmental variables, too. wascores(varechem, varespec) ## And the strengths of these variables are: eigengrad(varechem, varespec) } \keyword{ multivariate } \keyword{ univar } vegan/man/vegemite.Rd0000644000176200001440000002202312110164631014213 0ustar liggesusers\name{vegemite} \alias{vegemite} \alias{tabasco} \alias{coverscale} \title{Display Compact Ordered Community Tables } \description{ Functions \code{vegemite} and \code{tabasco} display compact community tables. Function \code{vegemite} prints text tables where species are rows, and each site takes only one column without spaces. Function \code{tabasco} provides interface for \code{\link{heatmap}} for a colour \code{\link{image}} of the data. The community table can be ordered by explicit indexing, by environmental variables or results from an ordination or cluster analysis. } \usage{ vegemite(x, use, scale, sp.ind, site.ind, zero=".", select ,...) tabasco(x, use, sp.ind = NULL, site.ind = NULL, select, Rowv = TRUE, Colv = TRUE, ...) coverscale(x, scale=c("Braun.Blanquet", "Domin", "Hult", "Hill", "fix","log"), maxabund) } \arguments{ \item{x}{Community data. } \item{use}{Either a vector, or an object from \code{cca}, \code{decorana} \emph{etc.} or \code{hclust} or a \code{\link{dendrogram}} for ordering sites and species.} \item{sp.ind, site.ind}{Species and site indices. In \code{tabasco}, these can also be \code{\link{hclust}} tree, \code{\link[cluster]{agnes}} clusterings or \code{\link{dendrogram}}s. } \item{zero}{Character used for zeros. } \item{select}{Select a subset of sites. This can be a logical vector (\code{TRUE} for selected sites), or a vector of indices of selected sites. The order of indices does not influence results, but you must specify \code{use} or \code{site.ind} to reorder sites. } \item{Rowv, Colv}{Re-order dendrograms for the rows (sites) or columns (species) of \code{x}. If the \code{Rowv = TRUE}, row dendrograms are ordered by the first axis of correspondence analysis, and when \code{Colv = TRUE} column dendrograms by the weighted average (\code{\link{wascores}}) of the row order. Alternatively, the arguments can be vectors that are used to reorder the dendrogram. } \item{scale}{Cover scale used (can be abbreviated).} \item{maxabund}{Maximum abundance used with \code{scale = "log"}. Data maximum in the \code{select}ed subset will be used if this is missing.} \item{\dots}{Arguments passed to \code{coverscale} (i.e., \code{maxabund}) in \code{vegemite} and to \code{\link{heatmap}} in \code{tabasco}.} } \details{ The function \code{vegemite} prints a traditional community table. The display is transposed, so that species are in rows and sites in columns. The table is printed in compact form: only one character can be used for abundance, and there are no spaces between columns. Species with no occurrences are dropped from the table. Function \code{tabasco} produces a similar table as \code{vegemite} using \code{\link{heatmap}}, where abundances are coded by colours. The function can also display dendrograms for sites (columns) or species if these are given as an argument (\code{use} for sites, \code{sp.ind} for species). The parameter \code{use} will be used to re-order output. The \code{use} can be a vector or an object from \code{\link{hclust}} or \code{\link[cluster]{agnes}}, a \code{\link{dendrogram}} or any ordination result recognized by \code{\link{scores}} (all ordination methods in \pkg{vegan} and some of those not in \pkg{vegan}). The \code{\link{hclust}}, \code{\link[cluster]{agnes}} and \code{\link{dendrogram}} must be for sites. The dendrogram is displayed above the sites in \code{tabasco}, but is not shown in \code{vegemite}. No dendrogram for species is displayed, except when given in \code{sp.ind}. If \code{use} is a vector, it is used for ordering sites. If \code{use} is an object from ordination, both sites and species are arranged by the first axis (provided that results are available both also for species). When \code{use} is an object from \code{\link{hclust}}, \code{\link[cluster]{agnes}} or a \code{\link{dendrogram}}, the sites are ordered similarly as in the cluster dendrogram. Function \code{tabasco} re-orders the dendrogram if \code{Rowv = TRUE} or \code{Rowv} is a vector. Such re-ordering is not available for \code{vegemite}, but it can be done by hand using \code{\link{reorder.dendrogram}}. In all cases where species scores are missing, species are ordered by their weighted averages (\code{\link{wascores}}) on site order. Species and sites can be ordered explicitly giving their indices or names in parameters \code{sp.ind} and \code{site.ind}. If these are given, they take precedence over \code{use}. A subset of sites can be displayed using argument \code{select}, but this cannot be used to order sites, but you still must give \code{use} or \code{site.ind}. However, \code{tabasco} makes two exceptions: \code{site.ind} and \code{select} cannot be used when \code{use} is a dendrogram (clustering result). In addition, the \code{sp.ind} can be an \code{\link{hclust}} tree, \code{\link[cluster]{agnes}} clustering or a \code{\link{dendrogram}}, and in that case the dendrogram is plotted on the left side of the \code{\link{heatmap}}. Phylogenetic trees cannot be directly used, \code{\link[ape]{as.hclust.phylo}} (package \pkg{ape}) can transform these to \code{\link{hclust}} trees. If \code{scale} is given, \code{vegemite} calls \code{coverscale} to transform percent cover scale or some other scales into traditional class scales used in vegetation science (\code{coverscale} can be called directly, too). Braun-Blanquet and Domin scales are actually not strict cover scales, and the limits used for codes \code{r} and \code{+} are arbitrary. Scale \code{Hill} may be inappropriately named, since Mark O. Hill probably never intended this as a cover scale. However, it is used as default 'cut levels' in his \code{TWINSPAN}, and surprisingly many users stick to this default, and this is a \emph{de facto} standard in publications. All traditional scales assume that values are cover percentages with maximum 100. However, non-traditional alternative \code{log} can be used with any scale range. Its class limits are integer powers of 1/2 of the maximum (argument \code{maxabund}), with \code{+} used for non-zero entries less than 1/512 of the maximum (\code{log} stands alternatively for logarithmic or logical). Scale \code{fix} is intended for `fixing' 10-point scales: it truncates scale values to integers, and replaces 10 with \code{X} and positive values below 1 with \code{+}. } \value{ The functions are used mainly to display a table, but they return (invisibly) a list with items: \item{species}{Ordered species indices} \item{sites}{Ordered site indices} These items can be used as arguments \code{sp.ind} and \code{site.ind} to reproduce the table. In addition to the proper table, \code{vegemite} prints the numbers of species and sites and the name of the used cover scale at the end. } \references{ The cover scales are presented in many textbooks of vegetation science; I used: Shimwell, D.W. (1971) \emph{The Description and Classification of Vegetation}. Sidgwick & Jackson. } \author{Jari Oksanen} \seealso{\code{\link{cut}} and \code{\link{approx}} for making your own \sQuote{cover scales} for \code{vegemite}. Function \code{tabasco} is based on \code{\link{heatmap}} which in turn is based on \code{\link{image}}. Both functions order species with weighted averages using \code{\link{wascores}}. } \note{ The name \code{vegemite} was chosen because the output is so compact, and the \code{tabasco} because it is just as compact, but uses heat colours. } \examples{ data(varespec) ## Print only more common species freq <- apply(varespec > 0, 2, sum) vegemite(varespec, scale="Hult", sp.ind = freq > 10) ## Order by correspondence analysis, use Hill scaling and layout: dca <- decorana(varespec) vegemite(varespec, dca, "Hill", zero="-") ## Show one class from cluster analysis, but retain the ordering above clus <- hclust(vegdist(varespec)) cl <- cutree(clus, 3) sel <- vegemite(varespec, use=dca, select = cl == 3, scale="Br") ## Re-create previous vegemite(varespec, sp=sel$sp, site=sel$site, scale="Hult") ## Re-order clusters by ordination clus <- as.dendrogram(clus) clus <- reorder(clus, scores(dca, choices=1, display="sites"), agglo.FUN = mean) vegemite(varespec, clus, scale = "Hult") ## Abundance values have such a wide range that they must be rescaled ## or all abundances will not be shown in tabasco tabasco(decostand(varespec, "log"), dca) ## Classification trees for species data(dune, dune.taxon) taxontree <- hclust(taxa2dist(dune.taxon)) plotree <- hclust(vegdist(dune), "average") ## Automatic reordering of clusters tabasco(dune, plotree, sp.ind = taxontree) ## No reordering of taxonomy tabasco(dune, plotree, sp.ind = taxontree, Colv = FALSE) ## Species cluster: most dissimilarity indices do a bad job when ## comparing rare and common species, but Raup-Crick makes sense sptree <- hclust(vegdist(t(dune), "raup"), "average") tabasco(dune, plotree, sptree) } \keyword{print} \keyword{manip} \keyword{hplot} vegan/man/vegdist.Rd0000644000176200001440000004047112031100650014053 0ustar liggesusers\encoding{UTF-8} \name{vegdist} \alias{vegdist} \title{Dissimilarity Indices for Community Ecologists } \description{ The function computes dissimilarity indices that are useful for or popular with community ecologists. All indices use quantitative data, although they would be named by the corresponding binary index, but you can calculate the binary index using an appropriate argument. If you do not find your favourite index here, you can see if it can be implemented using \code{\link{designdist}}. Gower, Bray--Curtis, Jaccard and Kulczynski indices are good in detecting underlying ecological gradients (Faith et al. 1987). Morisita, Horn--Morisita, Binomial, Cao and Chao indices should be able to handle different sample sizes (Wolda 1981, Krebs 1999, Anderson & Millar 2004), and Mountford (1962) and Raup-Crick indices for presence--absence data should be able to handle unknown (and variable) sample sizes. } \usage{vegdist(x, method="bray", binary=FALSE, diag=FALSE, upper=FALSE, na.rm = FALSE, ...) } \arguments{ \item{x}{Community data matrix.} \item{method}{Dissimilarity index, partial match to \code{"manhattan"}, \code{"euclidean"}, \code{"canberra"}, \code{"bray"}, \code{"kulczynski"}, \code{"jaccard"}, \code{"gower"}, \code{"altGower"}, \code{"morisita"}, \code{"horn"}, \code{"mountford"}, \code{"raup"} , \code{"binomial"}, \code{"chao"} or \code{"cao"}.} \item{binary}{Perform presence/absence standardization before analysis using \code{\link{decostand}}.} \item{diag}{Compute diagonals. } \item{upper}{Return only the upper diagonal. } \item{na.rm}{Pairwise deletion of missing observations when computing dissimilarities.} \item{\dots}{Other parameters. These are ignored, except in \code{method ="gower"} which accepts \code{range.global} parameter of \code{\link{decostand}}. .} } \details{Jaccard (\code{"jaccard"}), Mountford (\code{"mountford"}), Raup--Crick (\code{"raup"}), Binomial and Chao indices are discussed later in this section. The function also finds indices for presence/ absence data by setting \code{binary = TRUE}. The following overview gives first the quantitative version, where \eqn{x_{ij}}{x[ij]} \eqn{x_{ik}}{x[ik]} refer to the quantity on species (column) \eqn{i} and sites (rows) \eqn{j} and \eqn{k}. In binary versions \eqn{A} and \eqn{B} are the numbers of species on compared sites, and \eqn{J} is the number of species that occur on both compared sites similarly as in \code{\link{designdist}} (many indices produce identical binary versions): \tabular{ll}{ \code{euclidean} \tab \eqn{d_{jk} = \sqrt{\sum_i (x_{ij}-x_{ik})^2}}{d[jk] = sqrt(sum(x[ij]-x[ik])^2)} \cr \tab binary: \eqn{\sqrt{A+B-2J}}{sqrt(A+B-2*J)} \cr \code{manhattan} \tab \eqn{d_{jk}=\sum_i |x_{ij}-x_{ik}|}{d[jk] = sum(abs(x[ij] - x[ik]))} \cr \tab binary: \eqn{A+B-2J}{A+B-2*J} \cr \code{gower} \tab \eqn{d_{jk} = (1/M) \sum_i \frac{|x_{ij}-x_{ik}|}{\max x_i-\min x_i}}{d[jk] = (1/M) sum(abs(x[ij]-x[ik])/(max(x[i])-min(x[i])))} \cr \tab binary: \eqn{(A+B-2J)/M}{(A+B-2*J)/M}, \cr \tab where \eqn{M} is the number of columns (excluding missing values) \cr \code{altGower} \tab \eqn{d_{jk} = (1/NZ) \sum_i |x_{ij} - x_{ik}|}{d[jk] = (1/NZ) sum(abs(x[ij] - x[ik]))} \cr \tab where \eqn{NZ} is the number of non-zero columns excluding double-zeros (Anderson et al. 2006). \cr \tab binary: \eqn{\frac{A+B-2J}{A+B-J}}{(A+B-2*J)/(A+B-J)} \cr \code{canberra} \tab \eqn{d_{jk}=\frac{1}{NZ} \sum_i \frac{|x_{ij}-x_{ik}|}{x_{ij}+x_{ik}}}{d[jk] = (1/NZ) sum ((x[ij]-x[ik])/(x[ij]+x[ik]))} \cr \tab where \eqn{NZ} is the number of non-zero entries. \cr \tab binary: \eqn{\frac{A+B-2J}{A+B-J}}{(A+B-2*J)/(A+B-J)} \cr \code{bray} \tab \eqn{d_{jk} = \frac{\sum_i |x_{ij}-x_{ik}|}{\sum_i (x_{ij}+x_{ik})}}{d[jk] = (sum abs(x[ij]-x[ik]))/(sum (x[ij]+x[ik]))} \cr \tab binary: \eqn{\frac{A+B-2J}{A+B}}{(A+B-2*J)/(A+B)} \cr \code{kulczynski} \tab \eqn{d_{jk} = 1-0.5(\frac{\sum_i \min(x_{ij},x_{ik})}{\sum_i x_{ij}} + \frac{\sum_i \min(x_{ij},x_{ik})}{\sum_i x_{ik}} )}{d[jk] 1 - 0.5*((sum min(x[ij],x[ik])/(sum x[ij]) + (sum min(x[ij],x[ik])/(sum x[ik]))} \cr \tab binary: \eqn{1-(J/A + J/B)/2}{1-(J/A + J/B)/2} \cr \code{morisita} \tab \eqn{d_{jk} = 1 - \frac{2 \sum_i x_{ij} x_{ik}}{(\lambda_j + \lambda_k) \sum_i x_{ij} \sum_i x_{ik}}}{d[jk] = 1 - 2*sum(x[ij]*x[ik])/((lambda[j]+lambda[k]) * sum(x[ij])*sum(x[ik]))}, where \cr \tab \eqn{\lambda_j = \frac{\sum_i x_{ij} (x_{ij} - 1)}{\sum_i x_{ij} \sum_i (x_{ij} - 1)}}{lambda[j] = sum(x[ij]*(x[ij]-1))/sum(x[ij])*sum(x[ij]-1)} \cr \tab binary: cannot be calculated \cr \code{horn} \tab Like \code{morisita}, but \eqn{\lambda_j = \sum_i x_{ij}^2/(\sum_i x_{ij})^2}{lambda[j] = sum(x[ij]^2)/(sum(x[ij])^2)} \cr \tab binary: \eqn{\frac{A+B-2J}{A+B}}{(A+B-2*J)/(A+B)} \cr \code{binomial} \tab \eqn{d_{jk} = \sum_i [x_{ij} \log (\frac{x_{ij}}{n_i}) + x_{ik} \log (\frac{x_{ik}}{n_i}) - n_i \log(\frac{1}{2})]/n_i}{d[jk] = sum(x[ij]*log(x[ij]/n[i]) + x[ik]*log(x[ik]/n[i]) - n[i]*log(1/2))/n[i]}, \cr \tab where \eqn{n_i = x_{ij} + x_{ik}}{n[i] = x[ij] + x[ik]} \cr \tab binary: \eqn{\log(2) \times (A+B-2J)}{log(2)*(A+B-2*J)} \cr \code{cao} \tab \eqn{d_{jk} = \frac{1}{S} \sum_i \log \left(\frac{n_i}{2}\right) - (x_{ij} \log(x_{ik}) + x_{ik} \log(x_{ij}))/n_i}{d[jk] = (1/S) * sum(log(n[i]/2) - (x[ij]*log(x[ik]) + x[ik]*log(x[ij]))/n[i])}, \cr \tab where \eqn{S} is the number of species in compared sites and \eqn{n_i = x_{ij}+x_{ik}}{n[i] = x[ij] + x[ik]} } Jaccard index is computed as \eqn{2B/(1+B)}, where \eqn{B} is Bray--Curtis dissimilarity. Binomial index is derived from Binomial deviance under null hypothesis that the two compared communities are equal. It should be able to handle variable sample sizes. The index does not have a fixed upper limit, but can vary among sites with no shared species. For further discussion, see Anderson & Millar (2004). Cao index or CYd index (Cao et al. 1997) was suggested as a minimally biased index for high beta diversity and variable sampling intensity. Cao index does not have a fixed upper limit, but can vary among sites with no shared species. The index is intended for count (integer) data, and it is undefined for zero abundances; these are replaced with arbitrary value \eqn{0.1} following Cao et al. (1997). Cao et al. (1997) used \eqn{\log_{10}}{log10}, but the current function uses natural logarithms so that the values are approximately \eqn{2.30} times higher than with 10-based logarithms. Anderson & Thompson (2004) give an alternative formulation of Cao index to highlight its relationship with Binomial index (above). Mountford index is defined as \eqn{M = 1/\alpha} where \eqn{\alpha} is the parameter of Fisher's logseries assuming that the compared communities are samples from the same community (cf. \code{\link{fisherfit}}, \code{\link{fisher.alpha}}). The index \eqn{M} is found as the positive root of equation \eqn{\exp(aM) + \exp(bM) = 1 + \exp[(a+b-j)M]}{exp(a*M) + exp(b*M) = 1 + exp((a+b-j)*M)}, where \eqn{j} is the number of species occurring in both communities, and \eqn{a} and \eqn{b} are the number of species in each separate community (so the index uses presence--absence information). Mountford index is usually misrepresented in the literature: indeed Mountford (1962) suggested an approximation to be used as starting value in iterations, but the proper index is defined as the root of the equation above. The function \code{vegdist} solves \eqn{M} with the Newton method. Please note that if either \eqn{a} or \eqn{b} are equal to \eqn{j}, one of the communities could be a subset of other, and the dissimilarity is \eqn{0} meaning that non-identical objects may be regarded as similar and the index is non-metric. The Mountford index is in the range \eqn{0 \dots \log(2)}{0 \dots log(2)}, but the dissimilarities are divided by \eqn{\log(2)}{log(2)} so that the results will be in the conventional range \eqn{0 \dots 1}. Raup--Crick dissimilarity (\code{method = "raup"}) is a probabilistic index based on presence/absence data. It is defined as \eqn{1 - prob(j)}, or based on the probability of observing at least \eqn{j} species in shared in compared communities. The current function uses analytic result from hypergeometric distribution (\code{\link{phyper}}) to find the probablities. This probability (and the index) is dependent on the number of species missing in both sites, and adding all-zero species to the data or removing missing species from the data will influence the index. The probability (and the index) may be almost zero or almost one for a wide range of parameter values. The index is nonmetric: two communities with no shared species may have a dissimilarity slightly below one, and two identical communities may have dissimilarity slightly above zero. The index uses equal occurrence probabilities for all species, but Raup and Crick originally suggested that sampling probabilities should be proportional to species frequencies (Chase et al. 2011). A simulation approach with unequal species sampling probabilities is implemented in \code{\link{raupcrick}} function following Chase et al. (2011). Chao index tries to take into account the number of unseen species pairs, similarly as in \code{method = "chao"} in \code{\link{specpool}}. Function \code{vegdist} implements a Jaccard type index defined as \eqn{d_{jk} = 1 - U_j U_k/(U_j + U_k - U_j U_k)}{d[jk] = 1 - U[j]*U[k]/(U[j] + U[k] - U[j]*U[k])}, where \eqn{U_j = C_j/N_j + (N_k - 1)/N_k \times a_1/(2 a_2) \times S_j/N_j}{U[j] = C[j]/N[j] + (N[k] -1)/N[k] * a1/(2*a2) * S[j]/N[j]}, and similarly for \eqn{U_k}{U[k]}. Here \eqn{C_j}{C[j]} is the total number of individuals in the species of site \eqn{j} that are shared with site \eqn{k}, \eqn{N_j}{N[j]} is the total number of individuals at site \eqn{j}, \eqn{a_1}{a1} (and \eqn{a_2}{a2}) are the number of species occurring in site \eqn{j} that have only one (or two) individuals in site \eqn{k}, and \eqn{S_j}{S[j]} is the total number of individuals in the species present at site \eqn{j} that occur with only one individual in site \eqn{k} (Chao et al. 2005). Morisita index can be used with genuine count data (integers) only. Its Horn--Morisita variant is able to handle any abundance data. Euclidean and Manhattan dissimilarities are not good in gradient separation without proper standardization but are still included for comparison and special needs. Bray--Curtis and Jaccard indices are rank-order similar, and some other indices become identical or rank-order similar after some standardizations, especially with presence/absence transformation of equalizing site totals with \code{\link{decostand}}. Jaccard index is metric, and probably should be preferred instead of the default Bray-Curtis which is semimetric. The naming conventions vary. The one adopted here is traditional rather than truthful to priority. The function finds either quantitative or binary variants of the indices under the same name, which correctly may refer only to one of these alternatives For instance, the Bray index is known also as Steinhaus, Czekanowski and \enc{Sørensen}{Sorensen} index. The quantitative version of Jaccard should probably called \enc{RužiÄka}{Ruzicka} index. The abbreviation \code{"horn"} for the Horn--Morisita index is misleading, since there is a separate Horn index. The abbreviation will be changed if that index is implemented in \code{vegan}. } \value{ Should provide a drop-in replacement for \code{\link{dist}} and return a distance object of the same type. } \references{ Anderson, M.J. and Millar, R.B. (2004). Spatial variation and effects of habitat on temperate reef fish assemblages in northeastern New Zealand. \emph{Journal of Experimental Marine Biology and Ecology} 305, 191--221. Anderson, M.J., Ellingsen, K.E. & McArdle, B.H. (2006). Multivariate dispersion as a measure of beta diversity. \emph{Ecology Letters} 9, 683--693. Anderson, M.J & Thompson, A.A. (2004). Multivariate control charts for ecological and environmental monitoring. \emph{Ecological Applications} 14, 1921--1935. Cao, Y., Williams, W.P. & Bark, A.W. (1997). Similarity measure bias in river benthic Auswuchs community analysis. \emph{Water Environment Research} 69, 95--106. Chao, A., Chazdon, R. L., Colwell, R. K. and Shen, T. (2005). A new statistical approach for assessing similarity of species composition with incidence and abundance data. \emph{Ecology Letters} 8, 148--159. Chase, J.M., Kraft, N.J.B., Smith, K.G., Vellend, M. and Inouye, B.D. (2011). Using null models to disentangle variation in community dissimilarity from variation in \eqn{\alpha}{alpha}-diversity. \emph{Ecosphere} 2:art24 [doi:10.1890/ES10-00117.1] Faith, D. P, Minchin, P. R. and Belbin, L. (1987). Compositional dissimilarity as a robust measure of ecological distance. \emph{Vegetatio} 69, 57--68. Gower, J. C. (1971). A general coefficient of similarity and some of its properties. \emph{Biometrics} 27, 623--637. Krebs, C. J. (1999). \emph{Ecological Methodology.} Addison Wesley Longman. Mountford, M. D. (1962). An index of similarity and its application to classification problems. In: P.W.Murphy (ed.), \emph{Progress in Soil Zoology}, 43--50. Butterworths. Wolda, H. (1981). Similarity indices, sample size and diversity. \emph{Oecologia} 50, 296--302. } \author{ Jari Oksanen, with contributions from Tyler Smith (Gower index) and Michael Bedward (Raup--Crick index). } \note{The function is an alternative to \code{\link{dist}} adding some ecologically meaningful indices. Both methods should produce similar types of objects which can be interchanged in any method accepting either. Manhattan and Euclidean dissimilarities should be identical in both methods. Canberra index is divided by the number of variables in \code{vegdist}, but not in \code{\link{dist}}. So these differ by a constant multiplier, and the alternative in \code{vegdist} is in range (0,1). Function \code{\link[cluster]{daisy}} (package \pkg{cluster}) provides alternative implementation of Gower index that also can handle mixed data of numeric and class variables. There are two versions of Gower distance (\code{"gower"}, \code{"altGower"}) which differ in scaling: \code{"gower"} divides all distances by the number of observations (rows) and scales each column to unit range, but \code{"altGower"} omits double-zeros and divides by the number of pairs with at least one above-zero value, and does not scale columns (Anderson et al. 2006). You can use \code{\link{decostand}} to add range standardization to \code{"altGower"} (see Examples). Gower (1971) suggested omitting double zeros for presences, but it is often taken as the general feature of the Gower distances. See Examples for implementing the Anderson et al. (2006) variant of the Gower index. Most dissimilarity indices in \code{vegdist} are designed for community data, and they will give misleading values if there are negative data entries. The results may also be misleading or \code{NA} or \code{NaN} if there are empty sites. In principle, you cannot study species composition without species and you should remove empty sites from community data. } \seealso{ Function \code{\link{designdist}} can be used for defining your own dissimilarity index. Alternative dissimilarity functions include \code{\link{dist}} in base \R, \code{\link[cluster]{daisy}} (package \pkg{cluster}), and \code{\link[labdsv]{dsvdis}} (package \pkg{labdsv}). Function \code{\link{betadiver}} provides indices intended for the analysis of beta diversity.} \examples{ data(varespec) vare.dist <- vegdist(varespec) # Orlóci's Chord distance: range 0 .. sqrt(2) vare.dist <- vegdist(decostand(varespec, "norm"), "euclidean") # Anderson et al. (2006) version of Gower vare.dist <- vegdist(decostand(varespec, "log"), "altGower") # Range standardization with "altGower" (that excludes double-zeros) vare.dist <- vegdist(decostand(varespec, "range"), "altGower") } \keyword{ multivariate } vegan/man/vegandocs.Rd0000644000176200001440000000575511630473022014377 0ustar liggesusers\name{vegandocs} \alias{vegandocs} \title{Display Package Documentation} \description{ Display NEWS, vignettes, other special documents or ChangeLog in \pkg{vegan}, or vignettes in \pkg{permute}. } \usage{ vegandocs(doc = c("NEWS", "ONEWS", "ChangeLog", "FAQ-vegan.pdf", "intro-vegan.pdf", "diversity-vegan.pdf", "decision-vegan.pdf", "partitioning.pdf", "permutations.pdf")) } \arguments{ \item{doc}{The name of the document (partial match, case sensitive). } } \details{ You can read the following documents with this function: \itemize{ \item \code{NEWS}: most important new functions, features, fixes etc. from the user's point of view. These can be also read using \R command \code{\link{news}} as \code{news(package = "vegan")}. \item \code{ONEWS}: old news about \pkg{vegan} version \code{1.*} before September 2011. \item \code{ChangeLog}: similar to news, but intended for developers wit more fine grained comments on internal changes. \item \code{FAQ-vegan}: Frequently Asked Questions. Consult here before writing to Mail groups. \item \code{intro-vegan}: a \code{\link{vignette}} demonstrating a simple, standard ordination analysis. This can be also read using \code{vignette("intro-vegan", package="vegan")}. \item \code{diversity-vegan}: a \code{\link{vignette}} describing (most) diversity analyses in \pkg{vegan}. This can be also read using \code{vignette("diversity-vegan", package="vegan")}. \item \code{decision-vegan}: a \code{\link{vignette}} discussing design decisions in \pkg{vegan}. Currently this discusses implementing nestedness temperature (\code{\link{nestedtemp}}), backtracking algorithm in community null models (\code{\link{commsimulator}}), scaling of RDA results, and why WA scores are used as default instead of LC scores in constrained ordination. \item \code{partitioning}: Detailed description of variation partitioning schemes used in \code{\link{varpart}}. \item \code{permutations}: a \code{\link{vignette}} in the \pkg{permute} package giving an introduction to restricted permutation schemes. You can also read this using \code{vignette("permutations", package="permute")}. } } \author{Jari Oksanen } \note{ Function \code{\link{vignette}} only works with vignettes processed by \R, but the current function also shows other \code{pdf} documents. You can extract \R code from \code{\link{vignette}}s, but not from other documents (see \code{Examples}). The \code{permutations.pdf} document is in the \pkg{permute} package. } \seealso{\code{\link{vignette}}, \code{\link{news}}. } \examples{ \dontrun{ ## Read NEWS vegandocs() ## Alternatively (perhaps with different formatting) news(package="vegan") ## Read a vignette vegandocs("intro") ## with vignette() vignette("intro-vegan", package="vegan") ## extract R code vig <- vignette("intro-vegan", package="vegan") edit(vig) ## } } \keyword{ utilities } \keyword{ documentation } vegan/man/vegan-package.Rd0000644000176200001440000001001711550646073015113 0ustar liggesusers\name{vegan-package} \alias{vegan-package} \alias{vegan} \docType{package} \title{ Community Ecology Package: Ordination, Diversity and Dissimilarities } \description{ The \pkg{vegan} package provides tools for descriptive community ecology. It has most basic functions of diversity analysis, community ordination and dissimilarity analysis. Most of its multivariate tools can be used for other data types as well. } \details{The functions in the \pkg{vegan} package contain tools for diversity analysis (see \code{\link{vignette}} \code{vegandocs("diversity")}), ordination and analysis of dissimilarities (see \code{\link{vignette}} \code{vegandocs("intro")}). Together with the \pkg{labdsv} package, the \pkg{vegan} package provides most standard tools of descriptive community analysis. Package \pkg{ade4} provides an alternative comprehensive package, and several other packages complement \pkg{vegan} and provide tools for deeper analysis in specific fields. Package \pkg{BiodiversityR} provides a GUI for a large subset of \pkg{vegan} functionality. The \pkg{vegan} package is developed at R-Forge (\url{http://vegan.r-forge.r-project.org}). The R-Forge provides up-to-date information and mailing lists for help queries and bug reports. Bug reports can also be emailed to the function authors or to the package maintainers. The \pkg{vegan} documents can be read with \code{\link{vegandocs}} function. In addition to \code{\link{vignette}}s of basic usage, you can read \code{NEWS} on the new features and bug fixes in the release version (\code{vegandocs("NEWS")}), and more technical and fine grained \code{ChangeLog} (\code{vegandocs("Change")}). Several frequently asked questions really are answered in the vegan FAQ (\code{vegandocs("FAQ")}). The discussion on design decisions can be read with \code{vegandocs("decision")}. A tutorial of the package at \url{http://cc.oulu.fi/~jarioksa/opetus/metodi/vegantutor.pdf} provides a more thorough introduction to the package. To see the preferable citation of the package, type \code{citation("vegan")}. } \author{ The \pkg{vegan} development team is Jari Oksanen, F. Guillaume Blanchet, Roeland Kindt, Pierre Legendre, Peter R. Minchin, R. B. O'Hara, Gavin L. Simpson, Peter Solymos, M. Henry H. Stevens, Helene Wagner. Many other people have contributed to individual functions: see credits in function help pages. The maintainers at the R-Forge are Jari Oksanen and Gavin Simpson . } \examples{ ### Example 1: Unconstrained ordination ## NMDS data(varespec) data(varechem) ord <- metaMDS(varespec) plot(ord, type = "t") ## Fit environmental variables ef <- envfit(ord, varechem) ef plot(ef, p.max = 0.05) ### Example 2: Constrained ordination (RDA) ## The example uses formula interface to define the model data(dune) data(dune.env) ## No constraints: PCA mod0 <- rda(dune ~ 1, dune.env) mod0 plot(mod0) ## All environmental variables: Full model mod1 <- rda(dune ~ ., dune.env) mod1 plot(mod1) ## Automatic selection of variables by permutation P-values mod <- ordistep(mod0, scope=formula(mod1)) mod plot(mod) ## Permutation test for all variables anova(mod) ## Permutation test of "type III" effects, or significance when a term ## is added to the model after all other terms anova(mod, by = "margin") ## Plot only sample plots, use different symbols and draw SD ellipses ## for Managemenet classes plot(mod, display = "sites", type = "n") with(dune.env, points(mod, disp = "si", pch = as.numeric(Management))) with(dune.env, legend("topleft", levels(Management), pch = 1:4, title = "Management")) with(dune.env, ordiellipse(mod, Management, label = TRUE)) ## add fitted surface of diversity to the model ordisurf(mod, diversity(dune), add = TRUE) ### Example 3: analysis of dissimilarites a.k.a. non-parametric ### permutational anova adonis(dune ~ ., dune.env) adonis(dune ~ Management + Moisture, dune.env) } \keyword{ package } \keyword{ multivariate } \keyword{ univar } \keyword{ models } \keyword{ spatial } \keyword{ nonparametric } \keyword{ htest } \keyword{ regression }vegan/man/vegan-internal.Rd0000644000176200001440000000707112023317071015327 0ustar liggesusers\name{vegan-internal} \alias{ordiGetData} \alias{ordiParseFormula} \alias{ordiNAexclude} \alias{ordiNApredict} \alias{permuted.index} \alias{centroids.cca} \alias{ordiTerminfo} \alias{pasteCall} \alias{ordiArrowMul} \alias{ordiArgAbsorber} \alias{veganCovEllipse} \alias{hierParseFormula} \title{Internal vegan functions} \description{ Internal vegan functions that are not intended to be called directly, but only within other functions. } \usage{ ordiGetData(call, env) ordiParseFormula(formula, data, xlev = NULL, envdepth = 2, na.action = na.fail, subset = NULL) ordiTerminfo(d, data) ordiNAexclude(x, excluded) ordiNApredict(omit, x) ordiArrowMul(x, at = c(0,0), fill = 0.75) ordiArgAbsorber(..., shrink, origin, scaling, triangular, display, choices, const, FUN) centroids.cca(x, mf, wt) permuted.index(n, strata) pasteCall(call, prefix = "Call:") veganCovEllipse(cov, center = c(0, 0), scale = 1, npoints = 100) hierParseFormula(formula, data) } \details{ The description here is only intended for \pkg{vegan} developers: these functions are not intended for users, but they only should be used within functions. In general, these functions are not exported to the namespace, but you must use \code{\link{get}} or \code{\link{:::}} to directly call these functions. \code{ordiGetData} finds the model frame of constraints and conditions in constrained ordination in the defined \code{env}ironment. \code{ordiParseFormula} returns a list of three matrices (dependent variables, and \code{\link{model.matrix}} of constraints and conditions, possibly \code{NULL}) needed in constrained ordination. Argument \code{xlev} is passed to \code{\link{model.frame}} and argument \code{envdepth} specifies the depth at which the community data (dependent data) are evaluated; default \code{envdepth = 2} evaluates that in the environment of the parent of the calling function, and \code{envdepth = 1} within the calling function (see \code{\link{eval.parent}}). \code{ordiTermInfo} finds the term information for constrained ordination as described in \code{\link{cca.object}}. \code{ordiNAexclude} implements \code{na.action = na.exclude} for constrained ordination finding WA scores of CCA components and site scores of unconstrained component from \code{excluded} rows of observations. Function \code{ordiNApredict} puts pads the result object with these or with WA scores similarly as \code{\link{napredict}}. \code{ordiArgAbsorber} absorbs arguments of \code{\link{scores}} function of \pkg{vegan} so that these do not cause superfluous warnings in graphical function \code{FUN}. If you implement \code{scores} functions with new arguments, you should update \code{ordiArgAbsorber}. \code{centroids.cca} finds the weighted centroids of variables. \code{permuted.index} creates permuted index of length \code{n} possibly stratified within \code{strata}. This is the basic \pkg{vegan} permutation function that should be replaced with more powerful \code{\link{shuffle}} in the future releases of \pkg{vegan}, and all new functions should use \code{\link{shuffle}}. \code{pasteCall} prints the function call so that it is nicely wrapped in \code{\link[utils]{Sweave}} output. \code{veganCovEllipse} finds the coordinates for drawing a covariance ellipse. \code{hierParseFormula} returns a list of one matrix (left hand side) and a model frame with factors representing hierarchy levels (right hand side) to be used in \code{\link{adipart}}, \code{\link{multipart}} and \code{\link{hiersimu}}. } \keyword{internal } vegan/man/vegan-deprecated.Rd0000644000176200001440000000213411626473631015623 0ustar liggesusers\name{vegan-deprecated} \alias{metaMDSrotate} \alias{vegan-deprecated} %------ NOTE: ../R/vegan-deprecated.R must be synchronized with this! \title{Deprecated Functions in vegan package} %------ PLEASE: one \alias{.} for EACH ! (+ one \usage{} & \arguments{} for all) \description{ These functions are provided for compatibility with older versions of \pkg{vegan} only, and may be defunct as soon as the next release. } \usage{ metaMDSrotate(object, vec, na.rm = FALSE, ...) } \arguments{ \item{object}{A result object from \code{metaMDS}.} \item{vec}{A continuous site variable (vector).} \item{na.rm}{Remove missing values from continuous variable \code{vec}.} \item{\dots}{Other parameters passed to functions.} } \details{ %-- Either: %There are currently no deprecated functions in this package. %-- Or: %% explain *why* it's deprecated, and \code{\link{..}} to new Function \code{metaMDSrotate} is replaced with \code{\link{MDSrotate}} which can handle \code{\link{monoMDS}} results in addition to \code{\link{metaMDS}}. } \seealso{ \code{\link{Deprecated}} } \keyword{misc} vegan/man/vegan-defunct.Rd0000644000176200001440000000315011631630555015146 0ustar liggesusers\name{vegan-defunct} %--- The following functions were moved to the 'permute' package and % removed from vegan, but here we document only those that were % renamed and are not documented in 'permute' %\alias{permCheck} %\alias{numPerms} %\alias{print.permCheck} %\alias{print.summary.permCheck} %\alias{summary.permCheck} \alias{getNumObs} %\alias{getNumObs.default} %\alias{getNumObs.integer} %\alias{getNumObs.numeric} %\alias{allPerms} %\alias{print.allPerms} %\alias{summary.allPerms} %\alias{print.summary.allPerms} %\alias{permuplot} \alias{permuted.index2} %\alias{permControl} %\alias{print.permControl} %\alias{permute} \alias{vegan-defunct} %------ NOTE: ../R/vegan-deprecated.R must be synchronized with this! \title{Defunct Functions in Package \pkg{vegan}} %------ PLEASE: one \alias{.} for EACH ! (+ one \usage{} & \arguments{} for all) \description{ The functions or variables listed here are no longer part of \pkg{vegan} as they are no longer needed. } \usage{ %-- Removed from vegan 2.0-0: now in package permute getNumObs(object, \dots) \method{getNumObs}{default}(object, \dots) \method{getNumObs}{numeric}(object, \dots) \method{getNumObs}{integer}(object, \dots) permuted.index2(n, control = permControl()) } \details{ The \dQuote{new} permutation functions were moved to the \pkg{permute} package, and they are documented there. The \pkg{permute} package replaces \code{permuted.index2} with \code{\link[permute]{shuffle}} and \code{getNumObs} with its specific \code{\link[permute]{nobs-methods}}. } \seealso{ \code{\link{Defunct}}, \code{\link{vegan-deprecated}} } \keyword{internal} vegan/man/varpart.Rd0000644000176200001440000002642512031100650014070 0ustar liggesusers\name{varpart} \alias{varpart} \alias{varpart2} \alias{varpart3} \alias{varpart4} \alias{showvarparts} \alias{plot.varpart} \alias{plot.varpart234} \alias{simpleRDA2} \title{Partition the Variation of Community Matrix by 2, 3, or 4 Explanatory Matrices } \description{ The function partitions the variation of response table Y with respect to two, three, or four explanatory tables, using redundancy analysis ordination (RDA). If Y contains a single vector, partitioning is by partial regression. Collinear variables in the explanatory tables do NOT have to be removed prior to partitioning. } \usage{ varpart(Y, X, ..., data, transfo, scale = FALSE) showvarparts(parts, labels, ...) \method{plot}{varpart234}(x, cutoff = 0, digits = 1, ...) } \arguments{ \item{Y}{ Data frame or matrix containing the response data table. In community ecology, that table is often a site-by-species table. } \item{X}{Two to four explanatory models, variables or tables. These can be defined in three alternative ways: (1) one-sided model formulae beginning with \code{~} and then defining the model, (2) name of a single numeric variable, or (3) name of data frame or matrix with numeric variables. The model formulae can have factors, interaction terms and transformations of variables. The names of the variables in the model formula are found in data frame given in \code{data} argument, and if not found there, in the user environment. Single numeric variables, data frames or matrices are found in the user environment. All entries till the next argument (\code{data} or \code{transfo}) are interpreted as explanatory models, and the names of these arguments cannot be abbreviated nor omitted. } \item{data}{The data frame with the variables used in the formulae in \code{X}.} \item{transfo}{ Transformation for \code{Y} (community data) using \code{\link{decostand}}. All alternatives in \code{decostand} can be used, and those preserving Euclidean metric include \code{"hellinger"}, \code{"chi.square"}, \code{"total"}, \code{"norm"}.} \item{scale}{Should the columns of \code{Y} be standardized to unit variance} \item{parts}{Number of explanatory tables (circles) displayed.} \item{labels}{Labels used for displayed fractions. Default is to use the same letters as in the printed output.} \item{x}{The \code{varpart} result.} \item{cutoff}{The values below \code{cutoff} will not be displayed.} \item{digits}{The number of significant digits; the number of decimal places is at least one higher.} \item{...}{Other parameters passed to functions.} } \details{ The functions partition the variation in \code{Y} into components accounted for by two to four explanatory tables and their combined effects. If \code{Y} is a multicolumn data frame or matrix, the partitioning is based on redundancy analysis (RDA, see \code{\link{rda}}), and if \code{Y} is a single variable, the partitioning is based on linear regression. A simplified, fast version of RDA is used (function \code{simpleRDA2}). The actual calculations are done in functions \code{varpart2} to \code{varpart4}, but these are not intended to be called directly by the user. The function primarily uses adjusted R squares to assess the partitions explained by the explanatory tables and their combinations, because this is the only unbiased method (Peres-Neto et al., 2006). The raw R squares for basic fractions are also displayed, but these are biased estimates of variation explained by the explanatory table. The identifiable fractions are designated by lower case alphabets. The meaning of the symbols can be found in the separate document "partitioning.pdf" (which can be read using \code{\link{vegandocs}}), or can be displayed graphically using function \code{showvarparts}. A fraction is testable if it can be directly expressed as an RDA model. In these cases the printed output also displays the corresponding RDA model using notation where explanatory tables after \code{|} are conditions (partialled out; see \code{\link{rda}} for details). Although single fractions can be testable, this does not mean that all fractions simultaneously can be tested, since there number of testable fractions is higher than the number of estimated models. An abridged explanation of the alphabetic symbols for the individual fractions follows, but computational details should be checked in "partitioning.pdf" (readable with \code{\link{vegandocs}}) or in the source code. With two explanatory tables, the fractions explained uniquely by each of the two tables are \code{[a]} and \code{[c]}, and their joint effect is \code{[b]} following Borcard et al. (1992). With three explanatory tables, the fractions explained uniquely by each of the three tables are \code{[a]} to \code{[c]}, joint fractions between two tables are \code{[d]} to \code{[f]}, and the joint fraction between all three tables is \code{[g]}. With four explanatory tables, the fractions explained uniquely by each of the four tables are \code{[a]} to \code{[d]}, joint fractions between two tables are \code{[e]} to \code{[j]}, joint fractions between three variables are \code{[k]} to \code{[n]}, and the joint fraction between all four tables is \code{[o]}. There is a \code{plot} function that displays the Venn diagram and labels each intersection (individual fraction) with the adjusted R squared if this is higher than \code{cutoff}. A helper function \code{showvarpart} displays the fraction labels. } \value{ Function \code{varpart} returns an object of class \code{"varpart"} with items \code{scale} and \code{transfo} (can be missing) which hold information on standardizations, \code{tables} which contains names of explanatory tables, and \code{call} with the function \code{\link{call}}. The function \code{varpart} calls function \code{varpart2}, \code{varpart3} or \code{varpart4} which return an object of class \code{"varpart234"} and saves its result in the item \code{part}. The items in this object are: \item{SS.Y}{Sum of squares of matrix \code{Y}.} \item{n}{Number of observations (rows).} \item{nsets}{Number of explanatory tables} \item{bigwarning}{Warnings on collinearity.} \item{fract}{Basic fractions from all estimated constrained models.} \item{indfract}{Individual fractions or all possible subsections in the Venn diagram (see \code{showvarparts}).} \item{contr1}{Fractions that can be found after conditioning on single explanatory table in models with three or four explanatory tables.} \item{contr2}{Fractions that can be found after conditioning on two explanatory tables in models with four explanatory tables.} } \section{Fraction Data Frames}{ Items \code{fract}, \code{indfract}, \code{contr1} and \code{contr2} are all data frames with items: \itemize{ \item{Df}{Degrees of freedom of numerator of the \eqn{F}-statistic for the fraction.} \item{R.square}{Raw R-squared. This is calculated only for \code{fract} and this is \code{NA} in other items.} \item{Adj.R.square}{Adjusted R-squared.} \item{Testable}{If the fraction can be expressed as a (partial) RDA model, it is directly \code{Testable}, and this field is \code{TRUE}. In that case the fraction label also gives the specification of the testable RDA model.} } } \references{ (a) References on variation partitioning Borcard, D., P. Legendre & P. Drapeau. 1992. Partialling out the spatial component of ecological variation. Ecology 73: 1045--1055. Legendre, P. & L. Legendre. 2012. Numerical ecology, 3rd English edition. Elsevier Science BV, Amsterdam. (b) Reference on transformations for species data Legendre, P. and E. D. Gallagher. 2001. Ecologically meaningful transformations for ordination of species data. Oecologia 129: 271--280. (c) Reference on adjustment of the bimultivariate redundancy statistic Peres-Neto, P., P. Legendre, S. Dray and D. Borcard. 2006. Variation partitioning of species data matrices: estimation and comparison of fractions. Ecology 87: 2614--2625. } \author{ Pierre Legendre, Departement de Sciences Biologiques, Universite de Montreal, Canada. Adapted to \pkg{vegan} by Jari Oksanen. } \note{You can use command \code{\link{vegandocs}} to display document "partitioning.pdf" which presents Venn diagrams showing the fraction names in partitioning the variation of Y with respect to 2, 3, and 4 tables of explanatory variables, as well as the equations used in variation partitioning. The functions frequently give negative estimates of variation. Adjusted R-squares can be negative for any fraction; unadjusted R squares of testable fractions always will be non-negative. Non-testable fractions cannot be found directly, but by subtracting different models, and these subtraction results can be negative. The fractions are orthogonal, or linearly independent, but more complicated or nonlinear dependencies can cause negative non-testable fractions. The current function will only use RDA in multivariate partitioning. It is much more complicated to estimate the adjusted R-squares for CCA, and unbiased analysis of CCA is not currently implemented. } \seealso{ For analysing testable fractions, see \code{\link{rda}} and \code{\link{anova.cca}}. For data transformation, see \code{\link{decostand}}. Function \code{\link{inertcomp}} gives (unadjusted) components of variation for each species or site separately. } \examples{ data(mite) data(mite.env) data(mite.pcnm) ## See detailed documentation: \dontrun{ vegandocs("partition") } # Two explanatory matrices -- Hellinger-transform Y # Formula shortcut "~ ." means: use all variables in 'data'. mod <- varpart(mite, ~ ., mite.pcnm, data=mite.env, transfo="hel") mod ## argument 'bg' is passed to circle drawing, and the following ## defines semitransparent colours col2 <- rgb(c(1,1),c(1,0), c(0,1), 0.3) showvarparts(2, bg = col2) plot(mod, bg = col2) # Alternative way of to conduct this partitioning # Change the data frame with factors into numeric model matrix mm <- model.matrix(~ SubsDens + WatrCont + Substrate + Shrub + Topo, mite.env)[,-1] mod <- varpart(decostand(mite, "hel"), mm, mite.pcnm) # Test fraction [a] using partial RDA: aFrac <- rda(decostand(mite, "hel"), mm, mite.pcnm) anova(aFrac, step=200, perm.max=200) # RsquareAdj gives the same result as component [a] of varpart RsquareAdj(aFrac) # Three explanatory matrices mod <- varpart(mite, ~ SubsDens + WatrCont, ~ Substrate + Shrub + Topo, mite.pcnm, data=mite.env, transfo="hel") mod showvarparts(3) plot(mod) # An alternative formulation of the previous model using # matrices mm1 amd mm2 and Hellinger transformed species data mm1 <- model.matrix(~ SubsDens + WatrCont, mite.env)[,-1] mm2 <- model.matrix(~ Substrate + Shrub + Topo, mite.env)[, -1] mite.hel <- decostand(mite, "hel") mod <- varpart(mite.hel, mm1, mm2, mite.pcnm) # Use RDA to test fraction [a] # Matrix can be an argument in formula rda.result <- rda(mite.hel ~ mm1 + Condition(mm2) + Condition(as.matrix(mite.pcnm))) anova(rda.result, step=200, perm.max=200) # Four explanatory tables mod <- varpart(mite, ~ SubsDens + WatrCont, ~Substrate + Shrub + Topo, mite.pcnm[,1:11], mite.pcnm[,12:22], data=mite.env, transfo="hel") mod plot(mod) # Show values for all partitions by putting 'cutoff' low enough: plot(mod, cutoff = -Inf, cex = 0.7) } \keyword{ multivariate } vegan/man/varechem.Rd0000644000176200001440000000201011256342562014205 0ustar liggesusers\encoding{UTF-8} \name{varespec} \alias{varechem} \alias{varespec} \docType{data} \title{Vegetation and environment in lichen pastures} \usage{ data(varechem) data(varespec) } \description{ The \code{varespec} data frame has 24 rows and 44 columns. Columns are estimated cover values of 44 species. The variable names are formed from the scientific names, and are self explanatory for anybody familiar with the vegetation type. The \code{varechem} data frame has 24 rows and 14 columns, giving the soil characteristics of the very same sites as in the \code{varespec} data frame. The chemical measurements have obvious names. \code{Baresoil} gives the estimated cover of bare soil, \code{Humdepth} the thickness of the humus layer. } \references{ \enc{Väre}{Vare}, H., Ohtonen, R. and Oksanen, J. (1995) Effects of reindeer grazing on understorey vegetation in dry Pinus sylvestris forests. \emph{Journal of Vegetation Science} 6, 523--530. } \examples{ data(varespec) data(varechem) } \keyword{datasets} vegan/man/tsallis.Rd0000644000176200001440000001111711431214223014061 0ustar liggesusers\encoding{UTF-8} \name{tsallis} \alias{tsallis} \alias{tsallisaccum} \alias{persp.tsallisaccum} \title{Tsallis Diversity and Corresponding Accumulation Curves} \description{ Function \code{tsallis} find Tsallis diversities with any scale or the corresponding evenness measures. Function \code{tsallisaccum} finds these statistics with accumulating sites. } \usage{ tsallis(x, scales = seq(0, 2, 0.2), norm = FALSE, hill = FALSE) tsallisaccum(x, scales = seq(0, 2, 0.2), permutations = 100, raw = FALSE, ...) \method{persp}{tsallisaccum}(x, theta = 220, phi = 15, col = heat.colors(100), zlim, ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{x}{Community data matrix or plotting object. } \item{scales}{Scales of Tsallis diversity.} \item{norm}{Logical, if \code{TRUE} diversity values are normalized by their maximum (diversity value at equiprobability conditions).} \item{hill}{Calculate Hill numbers.} \item{permutations}{Number of random permutations in accumulating sites.} \item{raw}{If \code{FALSE} then return summary statistics of permutations, and if TRUE then returns the individual permutations.} \item{theta, phi}{angles defining the viewing direction. \code{theta} gives the azimuthal direction and \code{phi} the colatitude.} \item{col}{Colours used for surface.} \item{zlim}{Limits of vertical axis.} \item{\dots}{Other arguments which are passed to \code{tsallis} and to graphical functions.} } \details{ The Tsallis diversity (also equivalent to Patil and Taillie diversity) is a one-parametric generalised entropy function, defined as: \deqn{H_q = \frac{1}{q-1} (1-\sum_{i=1}^S p_i^q)}{H.q = 1/(q-1)(1-sum(p^q))} where \eqn{q} is a scale parameter, \eqn{S} the number of species in the sample (Tsallis 1988, Tothmeresz 1995). This diversity is concave for all \eqn{q>0}, but non-additive (Keylock 2005). For \eqn{q=0} it gives the number of species minus one, as \eqn{q} tends to 1 this gives Shannon diversity, for \eqn{q=2} this gives the Simpson index (see function \code{\link{diversity}}). If \code{norm = TRUE}, \code{tsallis} gives values normalized by the maximum: \deqn{H_q(max) = \frac{S^{1-q}-1}{1-q}}{H.q(max) = (S^(1-q)-1)/(1-q)} where \eqn{S} is the number of species. As \eqn{q} tends to 1, maximum is defined as \eqn{ln(S)}. If \code{hill = TRUE}, \code{tsallis} gives Hill numbers (numbers equivalents, see Jost 2007): \deqn{D_q = (1-(q-1) H)^{1/(1-q)}}{D.q = (1-(q-1)*H)^(1/(1-q))} Details on plotting methods and accumulating values can be found on the help pages of the functions \code{\link{renyi}} and \code{\link{renyiaccum}}. } \value{ Function \code{tsallis} returns a data frame of selected indices. Function \code{tsallisaccum} with argument \code{raw = FALSE} returns a three-dimensional array, where the first dimension are the accumulated sites, second dimension are the diversity scales, and third dimension are the summary statistics \code{mean}, \code{stdev}, \code{min}, \code{max}, \code{Qnt 0.025} and \code{Qnt 0.975}. With argument \code{raw = TRUE} the statistics on the third dimension are replaced with individual permutation results. } \references{ Tsallis, C. (1988) Possible generalization of Boltzmann-Gibbs statistics. \emph{J. Stat. Phis.} 52, 479--487. Tothmeresz, B. (1995) Comparison of different methods for diversity ordering. \emph{Journal of Vegetation Science} \bold{6}, 283--290. Patil, G. P. and Taillie, C. (1982) Diversity as a concept and its measurement. \emph{J. Am. Stat. Ass.} \bold{77}, 548--567. Keylock, C. J. (2005) Simpson diversity and the Shannon-Wiener index as special cases of a generalized entropy. \emph{Oikos} \bold{109}, 203--207. Jost, L (2007) Partitioning diversity into independent alpha and beta components. \emph{Ecology} \bold{88}, 2427--2439. } \author{\enc{Péter Sólymos}{Peter Solymos}, \email{solymos@ualberta.ca}, based on the code of Roeland Kindt and Jari Oksanen written for \code{renyi}} \seealso{ Plotting methods and accumulation routines are based on functions \code{\link{renyi}} and \code{\link{renyiaccum}}. An object of class 'tsallisaccum' can be used with function \code{\link{rgl.renyiaccum}} as well. See also settings for \code{\link{persp}}. } \examples{ data(BCI) i <- sample(nrow(BCI), 12) x1 <- tsallis(BCI[i,]) x1 diversity(BCI[i,],"simpson") == x1[["2"]] plot(x1) x2 <- tsallis(BCI[i,],norm=TRUE) x2 plot(x2) mod1 <- tsallisaccum(BCI[i,]) plot(mod1, as.table=TRUE, col = c(1, 2, 2)) persp(mod1) mod2 <- tsallisaccum(BCI[i,], norm=TRUE) persp(mod2,theta=100,phi=30) } \keyword{multivariate} vegan/man/treedive.Rd0000644000176200001440000001242012102424365014221 0ustar liggesusers\name{treedive} \alias{treedive} \alias{treeheight} \alias{treedist} \title{ Functional Diversity estimated from a Species Dendrogram} \description{ Functional diversity is defined as the total branch length in a trait dendrogram connecting all species, but excluding the unnecessary root segments of the tree (Petchey and Gaston 2006). } \usage{ treedive(comm, tree, match.force = FALSE) treeheight(tree) treedist(x, tree, relative = TRUE, match.force = FALSE, ...) } \arguments{ \item{comm, x}{Community data frame or matrix.} \item{tree}{A dendrogram which for \code{treedive} must be for species (columns).} \item{match.force}{Force matching of column names in data (\code{comm}, \code{x}) and labels in \code{tree}. If \code{FALSE}, matching only happens when dimensions differ (with a warning or message). The order of data must match to the order in \code{tree} if matching by names is not done.} \item{relative}{Use distances relative to the height of combined tree.} \item{\dots}{Other arguments passed to functions (ignored).} } \details{ Function \code{treeheight} finds the sum of lengths of connecting segments in a dendrogram produced by \code{\link{hclust}}, or other dendrogram that can be coerced to a correct type using \code{\link{as.hclust}}. When applied to a clustering of species traits, this is a measure of functional diversity (Petchey and Gaston 2002, 2006). Function \code{treedive} finds the \code{treeheight} for each site (row) of a community matrix. The function uses a subset of dendrogram for those species that occur in each site, and excludes the tree root if that is not needed to connect the species (Petchey and Gaston 2006). The subset of the dendrogram is found by first calculating \code{\link{cophenetic}} distances from the input dendrogram, then reconstructing the dendrogram for the subset of the cophenetic distance matrix for species occurring in each site. Diversity is 0 for one spcies, and \code{NA} for empty communities. Function \code{treedist} finds the dissimilarities among trees. Pairwise dissimilarity of two trees is found by combining species in a common tree and seeing how much of the tree height is shared and how much is unique. With \code{relative = FALSE} the dissimilarity is defined as \eqn{2 (A \cup B) - A - B}{2AB - A - B}, where \eqn{A} and \eqn{B} are heights of component trees and \eqn{A \cup B}{AB} is the height of the combined tree. With \code{relative = TRUE} the dissimilarity is \eqn{(2(A \cup B)-A-B)/(A \cup B)}{(2AB - A - B)/(AB)}. Although the latter formula is similar to Jaccard dissimilarity (see \code{\link{vegdist}}, \code{\link{designdist}}), it is not in the range \eqn{0 \ldots 1}{0 \dots 1}, since combined tree can add a new root. When two zero-height trees are combined into a tree of above zero height, the relative index attains its maximum value \eqn{2}. The dissimilarity is zero from a combined zero-height tree. The functions need a dendrogram of species traits as an input. If species traits contain \code{\link{factor}} or \code{\link{ordered}} factor variables, it is recommended to use Gower distances for mixed data (function \code{\link[cluster]{daisy}} in package \pkg{cluster}), and usually the recommended clustering method is UPGMA (\code{method = "average"} in function \code{\link{hclust}}) (Podani and Schmera 2006). It is possible to analyse the non-randomness of functional diversity using \code{\link{oecosimu}}. This needs specifying an adequate Null model, and the results will change with this choice. } \value{ A vector of diversity values or a single tree height, or a dissimilarity structure that inherits from \code{\link{dist}} and can be used similarly. } \references{ Lozupone, C. and Knight, R. 2005. UniFrac: a new phylogenetic method for comparing microbial communities. \emph{Applied and Environmental Microbiology} 71, 8228--8235. Petchey, O.L. and Gaston, K.J. 2002. Functional diversity (FD), species richness and community composition. \emph{Ecology Letters} 5, 402--411. Petchey, O.L. and Gaston, K.J. 2006. Functional diversity: back to basics and looking forward. \emph{Ecology Letters} 9, 741--758. Podani J. and Schmera, D. 2006. On dendrogram-based methods of functional diversity. \emph{Oikos} 115, 179--185. } \author{Jari Oksanen} \seealso{ Function \code{treedive} is similar to the phylogenetic diversity function \code{\link[picante]{pd}} in \pkg{picante}, but excludes tree root if that is not needed to connect species. Function \code{treedist} is similar to the phylogenetic similarity \code{\link[picante]{phylosor}} in \pkg{picante}, but excludes unneeded tree root and returns distances instead of similarities. \code{\link{taxondive}} is something very similar from another world. } \examples{ ## There is no data set on species properties yet, and therefore ## the example uses taxonomy data(dune) data(dune.taxon) d <- taxa2dist(dune.taxon, varstep=TRUE) cl <- hclust(d, "aver") treedive(dune, cl) ## Significance test using Null model communities. ## The current choice fixes only site totals. oecosimu(dune, treedive, "r0", tree = cl) ## Clustering of tree distances dtree <- treedist(dune, cl) plot(hclust(dtree, "aver")) } \keyword{ univar } vegan/man/tolerance.Rd0000644000176200001440000000263211625737155014407 0ustar liggesusers\name{tolerance} \alias{tolerance} \alias{tolerance.cca} \title{Species tolerances and sample heterogeneities} \usage{ tolerance(x, \dots) \method{tolerance}{cca}(x, choices = 1:2, which = c("species","sites"), scaling = 2, useN2 = FALSE, \dots) } \description{ Species tolerances and sample heterogeneities. } \details{ Function to compute species tolerances and site heterogeneity measures from unimodal ordinations (CCA & CA). Implements Eq 6.47 and 6.48 from the Canoco 4.5 Reference Manual (pages 178-179). } \value{ Matrix of tolerances/heterogeneities with some additional attributes. } \author{Gavin L. Simpson} \arguments{ \item{x}{object of class \code{"cca"}.} \item{choices}{numeric; which ordination axes to compute tolerances and heterogeneities for. Defaults to axes 1 and 2.} \item{which}{character; one of \code{"species"} or \code{"sites"}, indicating whether species tolerances or sample heterogeneities respectively are computed.} \item{scaling}{numeric; the ordination scaling to use.} \item{useN2}{logical; should the bias in the tolerances / heterogeneities be reduced via scaling by Hill's N2?} \item{\dots}{arguments passed to other methods.} } \examples{ data(dune) data(dune.env) mod <- cca(dune ~ ., data = dune.env) ## defaults to species tolerances tolerance(mod) ## sample heterogeneities for CCA axes 1:6 tolerance(mod, which = "sites", choices = 1:6) } vegan/man/taxondive.Rd0000644000176200001440000001430311625737155014432 0ustar liggesusers\name{taxondive} \alias{taxondive} \alias{summary.taxondive} \alias{plot.taxondive} \alias{taxa2dist} \title{ Indices of Taxonomic Diversity and Distinctness } \description{ Function finds indices of taxonomic diversity and distinctness, which are averaged taxonomic distances among species or individuals in the community (Clarke & Warwick 1998, 2001) } \usage{ taxondive(comm, dis, match.force = FALSE) taxa2dist(x, varstep = FALSE, check = TRUE, labels) } \arguments{ \item{comm}{Community data. } \item{dis}{Taxonomic distances among taxa in \code{comm}. This should be a \code{\link{dist}} object or a symmetric square matrix. } \item{match.force}{Force matching of column names in \code{comm} and labels in \code{dis}. If \code{FALSE}, matching only happens when dimensions differ, and in that case the species must be in identical order in both.} \item{x}{Classification table with a row for each species or other basic taxon, and columns for identifiers of its classification at higher levels.} \item{varstep}{Vary step lengths between successive levels relative to proportional loss of the number of distinct classes.} \item{check}{If \code{TRUE}, remove all redundant levels which are different for all rows or constant for all rows and regard each row as a different basal taxon (species). If \code{FALSE} all levels are retained and basal taxa (species) also must be coded as variables (columns). You will get a warning if species are not coded, but you can ignore this if that was your intention.} \item{labels}{The \code{labels} attribute of taxonomic distances. Row names will be used if this is not given. Species will be matched by these labels in \code{comm} and \code{dis} in \code{taxondive} if these have different dimensions.} } \details{ Clarke & Warwick (1998, 2001) suggested several alternative indices of taxonomic diversity or distinctness. Two basic indices are called taxonomic diversity (\eqn{\Delta}) and distinctness (\eqn{\Delta^*}): \tabular{c}{ \eqn{\Delta = (\sum \sum_{i 0}{d[ij] > 0}. The results of \code{stepacross} on Mountford index can be very weird. If \code{stepacross} is needed, it is best to try to use it with more metric indices only. } \seealso{ Function \code{\link{distconnected}} can find connected groups in disconnected data, and function \code{\link{no.shared}} can be used to set dissimilarities as \code{NA}. See \code{\link{swan}} for an alternative approach. Function \code{stepacross} is an essential component in \code{\link{isomap}} and \code{\link{cophenetic.spantree}}. } \examples{ # There are no data sets with high beta diversity in vegan, but this # should give an idea. data(dune) dis <- vegdist(dune) edis <- stepacross(dis) plot(edis, dis, xlab = "Shortest path", ylab = "Original") ## Manhattan distance have no fixed upper limit. dis <- vegdist(dune, "manhattan") is.na(dis) <- no.shared(dune) dis <- stepacross(dis, toolong=0) } \keyword{multivariate } vegan/man/specpool.Rd0000644000176200001440000002000211625737155014246 0ustar liggesusers\name{specpool} \alias{specpool} \alias{specpool2vect} \alias{poolaccum} \alias{summary.poolaccum} \alias{plot.poolaccum} \alias{estimateR} \alias{estimateR.default} \alias{estimateR.matrix} \alias{estimateR.data.frame} \alias{estaccumR} \title{ Extrapolated Species Richness in a Species Pool} \description{ The functions estimate the extrapolated species richness in a species pool, or the number of unobserved species. Function \code{specpool} is based on incidences in sample sites, and gives a single estimate for a collection of sample sites (matrix). Function \code{estimateR} is based on abundances (counts) on single sample site. } \usage{ specpool(x, pool) estimateR(x, ...) specpool2vect(X, index = c("jack1","jack2", "chao", "boot","Species")) poolaccum(x, permutations = 100, minsize = 3) estaccumR(x, permutations = 100) \method{summary}{poolaccum}(object, display, alpha = 0.05, ...) \method{plot}{poolaccum}(x, alpha = 0.05, type = c("l","g"), ...) } \arguments{ \item{x}{Data frame or matrix with species data or the analysis result for \code{plot} function.} \item{pool}{A vector giving a classification for pooling the sites in the species data. If missing, all sites are pooled together.} \item{X, object}{A \code{specpool} result object.} \item{index}{The selected index of extrapolated richness.} \item{permutations}{Number of permutations of sampling order of sites.} \item{minsize}{Smallest number of sampling units reported.} \item{display}{Indices to be displayed.} \item{alpha}{Level of quantiles shown. This proportion will be left outside symmetric limits.} \item{type}{Type of graph produced in \code{\link[lattice]{xyplot}}.} \item{...}{Other parameters (not used).} } \details{ Many species will always remain unseen or undetected in a collection of sample plots. The function uses some popular ways of estimating the number of these unseen species and adding them to the observed species richness (Palmer 1990, Colwell & Coddington 1994). The incidence-based estimates in \code{specpool} use the frequencies of species in a collection of sites. In the following, \eqn{S_P} is the extrapolated richness in a pool, \eqn{S_0} is the observed number of species in the collection, \eqn{a_1}{a1} and \eqn{a_2}{a2} are the number of species occurring only in one or only in two sites in the collection, \eqn{p_i} is the frequency of species \eqn{i}, and \eqn{N} is the number of sites in the collection. The variants of extrapolated richness in \code{specpool} are: \tabular{ll}{ Chao \tab \eqn{S_P = S_0 + a1^2/(2*a2)} \cr First order jackknife \tab \eqn{S_P = S_0 + a_1 \frac{N-1}{N}}{S_P = S_0 + a1*(N-1)/N} \cr Second order jackknife \tab \eqn{S_P = S_0 + a_1 \frac{2N - 3}{N} - a_2 \frac{(N-2)^2}{N (N-1)}}{S_P = S_0 + a1*(2*n-3)/n - a2*(n-2)^2/n/(n-1)} \cr Bootstrap \tab \eqn{S_P = S_0 + \sum_{i=1}^{S_0} (1 - p_i)^N}{S_P = S_0 + Sum (1-p_i)^N} } The abundance-based estimates in \code{estimateR} use counts (frequencies) of species in a single site. If called for a matrix or data frame, the function will give separate estimates for each site. The two variants of extrapolated richness in \code{estimateR} are Chao (unbiased variant) and ACE. In the Chao estimate \eqn{a_i} refers to number of species with abundance \eqn{i} instead of incidence: \tabular{ll}{ Chao \tab \eqn{S_P = S_0 + \frac{a_1 (a_1 -1)}{2 (a_2 + 1)}}{S_P = S_0 + a1*(a1-1)/(2*(a2+1))} \cr ACE \tab \eqn{S_P = S_{abund} + \frac{S_{rare}}{C_{ace}}+ \frac{a_1}{C_{ace}} \gamma^2_{ace}}{S_P = S_abund + S_rare/C_ace + a1/C_ace * gamma^2} \cr where \tab \eqn{C_{ace} = 1 - \frac{a_1}{N_{rare}}}{C_{ace} = 1- a1/N_{rare}} \cr \tab \eqn{\gamma^2_{ace} = \max \left[ \frac{S_{rare} \sum_{i=1}^{10} i(i-1)a_i}{C_{ace} N_{rare} (N_{rare} - 1)}-1, 0 \right]}{gamma^2 = max(S_rare/C_ace (sum[i=1..10] i*(i-1)*a_i) / N_rare/(N_rare-1) -1 , 0)} } Here \eqn{a_i} refers to number of species with abundance \eqn{i} and \eqn{S_{rare}}{S_rare} is the number of rare species, \eqn{S_{abund}}{S_abund} is the number of abundant species, with an arbitrary threshold of abundance 10 for rare species, and \eqn{N_{rare}}{N_rare} is the number of individuals in rare species. Functions estimate the standard errors of the estimates. These only concern the number of added species, and assume that there is no variance in the observed richness. The equations of standard errors are too complicated to be reproduced in this help page, but they can be studied in the \R source code of the function. The standard error are based on the following sources: Chao (1987) for the Chao estimate and Smith and van Belle (1984) for the first-order Jackknife and the bootstrap (second-order jackknife is still missing). The variance estimator of \eqn{S_{ace}}{S_ace} was developed by Bob O'Hara (unpublished). Functions \code{poolaccum} and \code{estaccumR} are similar to \code{\link{specaccum}}, but estimate extrapolated richness indices of \code{specpool} or \code{estimateR} in addition to number of species for random ordering of sampling units. Function \code{specpool} uses presence data and \code{estaccumR} count data. The functions share \code{summary} and \code{plot} methods. The \code{summary} returns quantile envelopes of permutations corresponding the given level of \code{alpha} and standard deviation of permutations for each sample size. The \code{plot} function shows the mean and envelope of permutations with given \code{alpha} for models. The selection of models can be restricted and order changes using the \code{display} argument in \code{summary} or \code{plot}. For configuration of \code{plot} command, see \code{\link[lattice]{xyplot}} } \value{ Function \code{specpool} returns a data frame with entries for observed richness and each of the indices for each class in \code{pool} vector. The utility function \code{specpool2vect} maps the pooled values into a vector giving the value of selected \code{index} for each original site. Function \code{estimateR} returns the estimates and their standard errors for each site. Functions \code{poolaccum} and \code{estimateR} return matrices of permutation results for each richness estimator, the vector of sample sizes and a table of \code{means} of permutations for each estimator. } \references{ Chao, A. (1987). Estimating the population size for capture-recapture data with unequal catchability. \emph{Biometrics} 43, 783--791. Colwell, R.K. & Coddington, J.A. (1994). Estimating terrestrial biodiversity through extrapolation. \emph{Phil. Trans. Roy. Soc. London} B 345, 101--118. Palmer, M.W. (1990). The estimation of species richness by extrapolation. \emph{Ecology} 71, 1195--1198. Smith, E.P & van Belle, G. (1984). Nonparametric estimation of species richness. \emph{Biometrics} 40, 119--129. } \author{Bob O'Hara (\code{estimateR}) and Jari Oksanen.} \note{ The functions are based on assumption that there is a species pool: The community is closed so that there is a fixed pool size \eqn{S_P}. Such cases may exist, although I have not seen them yet. All indices are biased for open communities. See \url{http://viceroy.eeb.uconn.edu/EstimateS} for a more complete (and positive) discussion and alternative software for some platforms. } \seealso{\code{\link{veiledspec}}, \code{\link{diversity}}, \code{\link{beals}}, \code{\link{specaccum}}. } \examples{ data(dune) data(dune.env) attach(dune.env) pool <- specpool(dune, Management) pool op <- par(mfrow=c(1,2)) boxplot(specnumber(dune) ~ Management, col="hotpink", border="cyan3", notch=TRUE) boxplot(specnumber(dune)/specpool2vect(pool) ~ Management, col="hotpink", border="cyan3", notch=TRUE) par(op) data(BCI) ## Accumulation model pool <- poolaccum(BCI) summary(pool, display = "chao") plot(pool) ## Quantitative model estimateR(BCI[1:5,]) } \keyword{ univar } vegan/man/specaccum.Rd0000644000176200001440000002563412031516374014373 0ustar liggesusers\name{specaccum} \alias{specaccum} \alias{print.specaccum} \alias{summary.specaccum} \alias{plot.specaccum} \alias{boxplot.specaccum} \alias{fitspecaccum} \alias{plot.fitspecaccum} \alias{predict.specaccum} \alias{predict.fitspecaccum} \title{Species Accumulation Curves } \description{ Function \code{specaccum} finds species accumulation curves or the number of species for a certain number of sampled sites or individuals. } \usage{ specaccum(comm, method = "exact", permutations = 100, conditioned =TRUE, gamma = "jack1", ...) \method{plot}{specaccum}(x, add = FALSE, ci = 2, ci.type = c("bar", "line", "polygon"), col = par("fg"), ci.col = col, ci.lty = 1, xlab, ylab = x$method, ylim, xvar = c("sites", "individuals"), ...) \method{boxplot}{specaccum}(x, add = FALSE, ...) fitspecaccum(object, model, method = "random", ...) \method{plot}{fitspecaccum}(x, col = par("fg"), lty = 1, xlab = "Sites", ylab = x$method, ...) \method{predict}{specaccum}(object, newdata, interpolation = c("linear", "spline"), ...) \method{predict}{fitspecaccum}(object, newdata, ...) } \arguments{ \item{comm}{Community data set.} \item{method}{Species accumulation method (partial match). Method \code{"collector"} adds sites in the order they happen to be in the data, \code{"random"} adds sites in random order, \code{"exact"} finds the expected (mean) species richness, \code{"coleman"} finds the expected richness following Coleman et al. 1982, and \code{"rarefaction"} finds the mean when accumulating individuals instead of sites. } \item{permutations}{Number of permutations with \code{method = "random"}.} \item{conditioned}{ Estimation of standard deviation is conditional on the empirical dataset for the exact SAC} \item{gamma}{Method for estimating the total extrapolated number of species in the survey area by function \code{\link{specpool}}} \item{x}{A \code{specaccum} result object} \item{add}{Add to an existing graph.} \item{ci}{Multiplier used to get confidence intervals from standard deviation (standard error of the estimate). Value \code{ci = 0} suppresses drawing confidence intervals.} \item{ci.type}{Type of confidence intervals in the graph: \code{"bar"} draws vertical bars, \code{"line"} draws lines, and \code{"polygon"} draws a shaded area.} \item{col}{Colour for drawing lines.} \item{ci.col}{Colour for drawing lines or filling the \code{"polygon"}.} \item{ci.lty}{Line type for confidence intervals or border of the \code{"polygon"}.} \item{xlab,ylab}{Labels for \code{x} (defaults \code{xvar}) and \code{y} axis.} \item{ylim}{the y limits of the plot.} \item{xvar}{Variable used for the horizontal axis: \code{"individuals"} can be used only with \code{method = "rarefaction"}. } \item{object}{Either a community data set or fitted \code{specaccum} model.} \item{model}{Nonlinear regression model (\code{\link{nls}}). See Details.} \item{lty}{line type code (see \code{\link{par}}.} \item{newdata}{Optional data used in prediction interpreted as number of sampling units (sites). If missing, fitted values are returned. } \item{interpolation}{Interpolation method used with \code{newdata}.} \item{...}{Other parameters to functions.} } \details{ Species accumulation curves (SAC) are used to compare diversity properties of community data sets using different accumulator functions. The classic method is \code{"random"} which finds the mean SAC and its standard deviation from random permutations of the data, or subsampling without replacement (Gotelli & Colwell 2001). The \code{"exact"} method finds the expected SAC using the method that was independently developed by Ugland et al. (2003), Colwell et al. (2004) and Kindt et al. (2006). The unconditional standard deviation for the exact SAC represents a moment-based estimation that is not conditioned on the empirical data set (sd for all samples > 0), unlike the conditional standard deviation that was developed by Jari Oksanen (not published, sd=0 for all samples). The unconditional standard deviation is based on an estimation of the total extrapolated number of species in the survey area (a.k.a. gamma diversity), as estimated by function \code{\link{specpool}}. Method \code{"coleman"} finds the expected SAC and its standard deviation following Coleman et al. (1982). All these methods are based on sampling sites without replacement. In contrast, the \code{method = "rarefaction"} finds the expected species richness and its standard deviation by sampling individuals instead of sites. It achieves this by applying function \code{\link{rarefy}} with number of individuals corresponding to average number of individuals per site. The function has a \code{plot} method. In addition, \code{method = "random"} has \code{summary} and \code{boxplot} methods. Function \code{predict} can return the values corresponding to \code{newdata} using linear (\code{\link{approx}}) or spline (\code{\link{spline}}) interpolation. The function cannot extrapolate with linear interpolation, and with spline the type and sensibility of the extrapolation depends on argument \code{method} which is passed to \code{\link{spline}}. If \code{newdata} is not given, the function returns the values corresponding to the data. Function \code{fitspecaccum} fits a nonlinear (\code{\link{nls}}) self-starting species accumulation model. The input \code{object} can be a result of \code{specaccum} or a community in data frame. In the latter case the function first fits a \code{specaccum} model and then proceeds with fitting the a nonlinear model. The function can apply a limited set of nonlinear regression models suggested for species-area relationship (Dengler 2009). All these are \code{\link{selfStart}} models. The permissible alternatives are \code{"arrhenius"} (\code{\link{SSarrhenius}}), \code{"gleason"} (\code{\link{SSgleason}}), \code{"gitay"} (\code{\link{SSgitay}}), \code{"lomolino"} (\code{\link{SSlomolino}}) of \pkg{vegan} package. In addition the following standard \R models are available: \code{"asymp"} (\code{\link{SSasymp}}), \code{"gompertz"} (\code{\link{SSgompertz}}), \code{"michaelis-menten"}) (\code{\link{SSmicmen}}), \code{"logis"} (\code{\link{SSlogis}}), \code{"weibull"} (\code{\link{SSweibull}}). See these functions for model specification and details. Function \code{predict} uses \code{\link{predict.nls}}, and you can pass all arguments to that function. In addition, \code{fitted}, \code{residuals} and \code{coef} work on the result object. Nonlinear regression may fail for any reason, and some of the \code{fitspecaccum} models are fragile and may not succeed. } \value{ Function \code{specaccum} returns an object of class \code{"specaccum"}, and \code{fitspecaccum} a model of class \code{"fitspecaccum"} that adds a few items to the \code{"specaccum"} (see the end of the list below): \item{call }{Function call.} \item{method}{Accumulator method.} \item{sites}{Number of sites. For \code{method = "rarefaction"} this is the number of sites corresponding to a certain number of individuals and generally not an integer, and the average number of individuals is also returned in item \code{individuals}.} \item{richness}{The number of species corresponding to number of sites. With \code{method = "collector"} this is the observed richness, for other methods the average or expected richness.} \item{sd}{The standard deviation of SAC (or its standard error). This is \code{NULL} in \code{method = "collector"}, and it is estimated from permutations in \code{method = "random"}, and from analytic equations in other methods.} \item{perm}{Permutation results with \code{method = "random"} and \code{NULL} in other cases. Each column in \code{perm} holds one permutation.} \item{fitted, residuals, coefficients}{Only in \code{fitspecacum}: fitted values, residuals and nonlinear model coefficients. For \code{method = "random"} these are matrices with a column for each random accumulation.} \item{models}{Only in \code{fitspecaccum}: list of fitted \code{\link{nls}} models (see Examples on accessing these models).} } \references{ Coleman, B.D, Mares, M.A., Willis, M.R. & Hsieh, Y. (1982). Randomness, area and species richness. \emph{Ecology} 63: 1121--1133. Colwell, R.K., Mao, C.X. & Chang, J. (2004). Interpolating, extrapolating, and comparing incidence-based species accumulation curves. \emph{Ecology} 85: 2717--2727. Dengler, J. (2009). Which function describes the species-area relationship best? A review and empirical evaluation. \emph{Journal of Biogeography} 36, 728--744. Gotellli, N.J. & Colwell, R.K. (2001). Quantifying biodiversity: procedures and pitfalls in measurement and comparison of species richness. \emph{Ecol. Lett.} 4, 379--391. Kindt, R. (2003). Exact species richness for sample-based accumulation curves. \emph{Manuscript.} Kindt R., Van Damme, P. & Simons, A.J. (2006) Patterns of species richness at varying scales in western Kenya: planning for agroecosystem diversification. \emph{Biodiversity and Conservation}, online first: DOI 10.1007/s10531-005-0311-9 Ugland, K.I., Gray, J.S. & Ellingsen, K.E. (2003). The species-accumulation curve and estimation of species richness. \emph{Journal of Animal Ecology} 72: 888--897. } \author{Roeland Kindt \email{r.kindt@cgiar.org} and Jari Oksanen.} \note{ The SAC with \code{method = "exact"} was developed by Roeland Kindt, and its standard deviation by Jari Oksanen (both are unpublished). The \code{method = "coleman"} underestimates the SAC because it does not handle properly sampling without replacement. Further, its standard deviation does not take into account species correlations, and is generally too low. } \seealso{\code{\link{rarefy}} and \code{\link{rrarefy}} are related individual based models. Other accumulation models are \code{\link{poolaccum}} for extrapolated richness, and \code{\link{renyiaccum}} and \code{\link{tsallisaccum}} for diversity indices. Underlying graphical functions are \code{\link{boxplot}}, \code{\link{matlines}}, \code{\link{segments}} and \code{\link{polygon}}. } \examples{ data(BCI) sp1 <- specaccum(BCI) sp2 <- specaccum(BCI, "random") sp2 summary(sp2) plot(sp1, ci.type="poly", col="blue", lwd=2, ci.lty=0, ci.col="lightblue") boxplot(sp2, col="yellow", add=TRUE, pch="+") ## Fit Lomolino model to the exact accumulation mod1 <- fitspecaccum(sp1, "lomolino") coef(mod1) fitted(mod1) plot(sp1) ## Add Lomolino model using argument 'add' plot(mod1, add = TRUE, col=2, lwd=2) ## Fit Arrhenius models to all random accumulations mods <- fitspecaccum(sp2, "arrh") plot(mods, col="hotpink") boxplot(sp2, col = "yellow", border = "blue", lty=1, cex=0.3, add= TRUE) ## Use nls() methods to the list of models sapply(mods$models, AIC) } \keyword{univar} \keyword{models} vegan/man/spantree.Rd0000644000176200001440000001331011277451711014241 0ustar liggesusers\name{spantree} \alias{spantree} \alias{cophenetic.spantree} \alias{plot.spantree} \alias{lines.spantree} \alias{spandepth} \title{Minimum Spanning Tree} \description{ Function \code{spantree} finds a minimum spanning tree connecting all points, but disregarding dissimilarities that are at or above the threshold or \code{NA}. } \usage{ spantree(d, toolong = 0) \method{cophenetic}{spantree}(x) spandepth(x) \method{plot}{spantree}(x, ord, cex = 0.7, type = "p", labels, dlim, FUN = sammon, ...) \method{lines}{spantree}(x, ord, display="sites", ...) } \arguments{ \item{d}{Dissimilarity data inheriting from class \code{dist} or a an object, such as a matrix, that can be converted to a dissimilarity matrix. Functions \code{\link{vegdist}} and \code{\link{dist}} are some functions producing suitable dissimilarity data.} \item{toolong}{ Shortest dissimilarity regarded as \code{NA}. The function uses a fuzz factor, so that dissimilarities close to the limit will be made \code{NA}, too. If \code{toolong = 0} (or negative), no dissimilarity is regarded as too long. } \item{x}{A \code{spantree} result object.} \item{ord}{An ordination configuration, or an ordination result known by \code{\link{scores}}.} \item{cex}{Character expansion factor.} \item{type}{Observations are plotted as points with \code{type="p"} or \code{type="b"}, or as text label with \code{type="t"}. The tree (lines) will always be plotted.} \item{labels}{Text used with \code{type="t"} or node names if this is missing.} \item{dlim}{A ceiling value used to highest \code{cophenetic} dissimilarity.} \item{FUN}{Ordination function to find the configuration from cophenetic dissimilarities. } \item{display}{Type of \code{\link{scores}} used for \code{ord}.} \item{\dots}{Other parameters passed to functions.} } \details{ Function \code{spantree} finds a minimum spanning tree for dissimilarities (there may be several minimum spanning trees, but the function finds only one). Dissimilarities at or above the threshold \code{toolong} and \code{NA}s are disregarded, and the spanning tree is found through other dissimilarities. If the data are disconnected, the function will return a disconnected tree (or a forest), and the corresponding link is \code{NA}. Connected subtrees can be identified using \code{\link{distconnected}}. Function \code{cophenetic} finds distances between all points along the tree segments. Function \code{spandepth} returns the depth of each node. The nodes of a tree are either leaves (with one link) or internal nodes (more than one link). The leaves are recursively removed from the tree, and the depth is the layer at with the leaf was removed. In disconnected \code{spantree} object (in a forest) each tree is analysed separately and disconnected nodes not in any tree have depth zero. Function \code{plot} displays the tree over a supplied ordination configuration, and \code{lines} adds a spanning tree to an ordination graph. If configuration is not supplied for \code{plot}, the function ordinates the cophenetic dissimilarities of the spanning tree and overlays the tree on this result. The default ordination function is \code{\link[MASS]{sammon}} (package \pkg{MASS}), because Sammon scaling emphasizes structure in the neighbourhood of nodes and may be able to beautifully represent the tree (you may need to set \code{dlim}, and sometimes the results will remain twisted). These ordination methods do not work with disconnected trees, but you must supply the ordination configuration. Function \code{lines} will overlay the tree in an existing plot. Function \code{spantree} uses Prim's method implemented as priority-first search for dense graphs (Sedgewick 1990). Function \code{cophenetic} uses function \code{\link{stepacross}} with option \code{path = "extended"}. The \code{spantree} is very fast, but \code{cophenetic} is slow in very large data sets. } \value{ Function \code{spantree} returns an object of class \code{spantree} which is a list with two vectors, each of length \eqn{n-1}. The number of links in a tree is one less the number of observations, and the first item is omitted. The items are \item{kid }{The child node of the parent, starting from parent number two. If there is no link from the parent, value will be \code{NA} and tree is disconnected at the node.} \item{dist }{Corresponding distance. If \code{kid = NA}, then \code{dist = 0}.} \item{labels }{Names of nodes as found from the input dissimilarities.} \item{call}{The function call.} } \references{ Sedgewick, R. (1990). \emph{Algorithms in C}. Addison Wesley. } \author{ Jari Oksanen } \note{ In principle, minimum spanning tree is equivalent to single linkage clustering that can be performed using \code{\link{hclust}} or \code{\link[cluster]{agnes}}. However, these functions combine clusters to each other and the information of the actually connected points (the ``single link'') cannot be recovered from the result. The graphical output of a single linkage clustering plotted with \code{\link{ordicluster}} will look very different from an equivalent spanning tree plotted with \code{lines.spantree}. } \seealso{\code{\link{vegdist}} or \code{\link{dist}} for getting dissimilarities, and \code{\link{hclust}} or \code{\link[cluster]{agnes}} for single linkage clustering. } \examples{ data(dune) dis <- vegdist(dune) tr <- spantree(dis) ## Add tree to a metric scaling plot(tr, cmdscale(dis), type = "t") ## Find a configuration to display the tree neatly plot(tr, type = "t") ## Depths of nodes depths <- spandepth(tr) plot(tr, type = "t", label = depths) } \keyword{ multivariate} vegan/man/sipoo.Rd0000644000176200001440000000177610712320274013556 0ustar liggesusers\name{sipoo} \alias{sipoo} \docType{data} \title{ Birds in the Archipelago of Sipoo (Sibbo)} \description{ Land birds on islands covered by coniferous forest in the Sipoo archipelago, southern Finland (landbridge/ oceanic distinction unclear from source). } \usage{data(sipoo)} \format{ A data frame with 18 sites and 50 species (Simberloff & Martin, 1991, Appendix 3). The species are referred by 4+4 letter abbreviation of their Latin names (but using five letters in two species names to make these unique). The example gives the areas of the studies islands in hectares. } \source{ \url{http://www.aics-research.com/nested/} } \references{ Simberloff, D. & Martin, J.-L. (1991). Nestedness of insular avifaunas: simple summary statistics masking complex species patterns. \emph{Ornis Fennica} 68:178--192. } \examples{ data(sipoo) ## Areas of the islands in hectares sipoo.area <- c(1.1, 2.1, 2.2, 3.1, 3.5, 5.8, 6, 6.1, 6.5, 11.4, 13, 14.5, 16.1 ,17.5, 28.7, 40.5, 104.5, 233) } \keyword{datasets} vegan/man/simulate.rda.Rd0000644000176200001440000000623411600172064015006 0ustar liggesusers\name{simulate.rda} \alias{simulate.rda} \alias{simulate.cca} \alias{simulate.capscale} \title{ Simulate Responses with Gaussian Error or Permuted Residuals for Constrained Ordination } \description{ Function simulates a response data frame so that it adds Gaussian error to the fitted responses of Redundancy Analysis (\code{\link{rda}}), Constrained Correspondence Analysis (\code{\link{cca}}) or distance-based RDA (\code{\link{capscale}}). The function is a special case of generic \code{\link{simulate}}, and works similarly as \code{simulate.lm}. } \usage{ \method{simulate}{rda}(object, nsim = 1, seed = NULL, indx = NULL, rank = "full", ...) } \arguments{ \item{object}{an object representing a fitted \code{\link{rda}} model.} \item{nsim}{number of response vectors to simulate. (Not yet used, and values above 1 will give an error). } \item{seed}{an object specifying if and how the random number generator should be initialized (\sQuote{seeded}). See \code{\link{simulate}} for details. } \item{indx}{Index of residuals added to the fitted values, such as produced by \code{\link{permuted.index}}, \code{\link{shuffle}} or \code{\link{sample}}. The index can have duplicate entries so that bootstrapping is allowed. If null, parametric simulation is used and Gaussian error is added to the fitted values.} \item{rank}{The rank of the constrained component: passed to \code{\link{predict.rda}} or \code{\link{predict.cca}}. } \item{\dots}{additional optional arguments (ignored). } } \details{ The implementation follows \code{"lm"} method of \code{\link{simulate}}, and adds Gaussian (Normal) error to the fitted values (\code{\link{fitted.rda}}) using function \code{\link{rnorm}}. The standard deviations are estimated independently for each species (column) from the residuals after fitting the constraints. Alternatively, the function can take a permutation index that is used to add permuted residuals (unconstrained component) to the fitted values. Raw data are used in \code{\link{rda}}. Internal Chi-square transformed data in \code{\link{cca}} within the function, but the returned data frame is similar to the original input data. The simulation is performed on internal metric scaling data in \code{\link{capscale}}, but the function returns the Euclidean distances calculated from the simulated data. The simulation uses only the real components, and the imaginary dimensions are ignored. } \value{ Returns a data frame with similar additional arguments on random number seed as \code{\link{simulate}}. } \author{Jari Oksanen} \seealso{ \code{\link{simulate}} for the generic case and for \code{\link{lm}} objects. Functions \code{\link{fitted.rda}} and \code{\link{fitted.cca}} return fitted values without the error component. } \examples{ data(dune) data(dune.env) mod <- rda(dune ~ Moisture + Management, dune.env) ## One simulation update(mod, simulate(mod) ~ .) ## An impression of confidence regions of site scores plot(mod, display="sites") for (i in 1:5) lines(procrustes(mod, update(mod, simulate(mod) ~ .)), col="blue") } \keyword{ models } \keyword{ datagen } \keyword{ multivariate } vegan/man/simper.Rd0000644000176200001440000000716111742521643013725 0ustar liggesusers\encoding{UTF-8} \name{simper} \alias{simper} \alias{summary.simper} \title{Similarity Percentages} \description{ Discriminating species between two groups using Bray-Curtis dissimilarities } \usage{ simper(comm, group, ...) \method{summary}{simper}(object, ordered = TRUE, digits = max(3, getOption("digits") - 3), ...) } \arguments{ \item{comm}{Community data matrix.} \item{group}{Factor describing the group structure. Must have at least 2 levels.} \item{object}{an object returned by \code{simper}.} \item{ordered}{Logical; Should the species be ordered by their average contribution?} \item{digits}{Number of digits in output.} \item{...}{Parameters passed to other functions.} } \details{ Similarity percentage, \code{simper} (Clarke 1993) is based on the decomposition of Bray-Curtis dissimilarity index (see \code{\link{vegdist}}, \code{\link{designdist}}). The contribution of individual species \eqn{i} to the overall Bray-Curtis dissimilarity \eqn{d_{jk}}{d[jk]} is given by \deqn{d_{ijk} = \frac{|x_{ij}-x_{ik}|}{\sum_{i=1}^S (x_{ij}+x_{ik})}}{d[ijk] = abs(x[ij]-x[ik])/sum(x[ij]+x[ik])} where \eqn{x} is the abundance of species \eqn{i} in sampling units \eqn{j} and \eqn{k}. The overall index is the sum of the individual contributions over all \eqn{S} species \eqn{d_{jk}=\sum_{i=1}^S d_{ijk}}{d[jk] = sum(i=1..S) d[ijk]}. The \code{simper} functions performs pairwise comparisons of groups of sampling units and finds the average contributions of each species to the average overall Bray-Curtis dissimilarity. The function displays most important species for each pair of \code{groups}. These species contribute at least to 70 \% of the differences between groups. The function returns much more extensive results which can be accessed directly from the result object (see section Value). Function \code{summary} transforms the result to a list of data frames. With argument \code{ordered = TRUE} the data frames also include the cumulative contributions and are ordered by species contribution. The results of \code{simper} can be very difficult to interpret. The method very badly confounds the mean between group differences and within group variation, and seems to single out variable species instead of distinctive species (Warton et al. 2012). Even if you make groups that are copies of each other, the method will single out species with high contribution, but these are not contributions to non-existing between-group differences but to within-group variation in species abundance. } \value{ A list of class \code{"simper"} with following items: \item{species}{The species names.} \item{average}{Average contribution to overall dissimilarity.} \item{overall}{The overall between-group dissimilarity.} \item{sd}{Standard deviation of contribution.} \item{ratio}{Average to sd ratio.} \item{ava, avb}{Average abundances per group.} \item{ord}{An index vector to order vectors by their contribution or order \code{cusum} back to the original data order.} \item{cusum}{Ordered cumulative contribution.} } \examples{ data(dune) data(dune.env) (sim <- with(dune.env, simper(dune, Management))) summary(sim) } \author{ Eduard Szöcs \email{szoe8822@uni-landau.de} } \references{ Clarke, K.R. 1993. Non-parametric multivariate analyses of changes in community structure. \emph{Australian Journal of Ecology}, 18, 117–143. Warton, D.I., Wright, T.W., Wang, Y. 2012. Distance-based multivariate analyses confound location and dispersion effects. \emph{Methods in Ecology and Evolution}, 3, 89--101. } \keyword{multivariate} vegan/man/screeplot.cca.Rd0000644000176200001440000001242712031100650015133 0ustar liggesusers\name{screeplot.cca} \alias{screeplot.cca} \alias{screeplot.princomp} \alias{screeplot.prcomp} \alias{screeplot.decorana} \alias{bstick} \alias{bstick.default} \alias{bstick.cca} \alias{bstick.prcomp} \alias{bstick.princomp} \alias{bstick.decorana} \title{Screeplots for Ordination Results and Broken Stick Distributions} \description{ Screeplot methods for plotting variances of ordination axes/components and overlaying broken stick distributions. Also, provides alternative screeplot methods for \code{\link{princomp}} and \code{\link{prcomp}}. } \usage{ \method{screeplot}{cca}(x, bstick = FALSE, type = c("barplot", "lines"), npcs = min(10, if (is.null(x$CCA) || x$CCA$rank == 0) x$CA$rank else x$CCA$rank), ptype = "o", bst.col = "red", bst.lty = "solid", xlab = "Component", ylab = "Inertia", main = deparse(substitute(x)), legend = bstick, \dots) \method{screeplot}{decorana}(x, bstick = FALSE, type = c("barplot", "lines"), npcs = 4, ptype = "o", bst.col = "red", bst.lty = "solid", xlab = "Component", ylab = "Inertia", main = deparse(substitute(x)), \dots) \method{screeplot}{prcomp}(x, bstick = FALSE, type = c("barplot", "lines"), npcs = min(10, length(x$sdev)), ptype = "o", bst.col = "red", bst.lty = "solid", xlab = "Component", ylab = "Inertia", main = deparse(substitute(x)), legend = bstick, \dots) \method{screeplot}{princomp}(x, bstick = FALSE, type = c("barplot", "lines"), npcs = min(10, length(x$sdev)), ptype = "o", bst.col = "red", bst.lty = "solid", xlab = "Component", ylab = "Inertia", main = deparse(substitute(x)), legend = bstick, \dots) bstick(n, \dots) \method{bstick}{default}(n, tot.var = 1, \dots) \method{bstick}{cca}(n, \dots) \method{bstick}{prcomp}(n, \dots) \method{bstick}{princomp}(n, \dots) \method{bstick}{decorana}(n, \dots) } \arguments{ \item{x}{an object from which the component variances can be determined.} \item{bstick}{logical; should the broken stick distribution be drawn?} \item{npcs}{the number of components to be plotted.} \item{type}{the type of plot.} \item{ptype}{if \code{type == "lines"} or \code{bstick = TRUE}, a character indicating the type of plotting used for the lines; actually any of the \code{type}s as in \code{\link{plot.default}}.} \item{bst.col, bst.lty}{the colour and line type used to draw the broken stick distribution.} \item{xlab, ylab, main}{graphics parameters.} \item{legend}{logical; draw a legend?} \item{n}{an object from which the variances can be extracted or the number of variances (components) in the case of \code{bstick.default}.} \item{tot.var}{the total variance to be split.} \item{\dots}{arguments passed to other methods.} } \details{ The functions provide screeplots for most ordination methods in \pkg{vegan} and enhanced versions with broken stick for \code{\link{prcomp}} and \code{\link{princomp}}. Function \code{bstick} gives the brokenstick values which are ordered random proportions, defined as \eqn{p_i = (tot/n) \sum_{x=i}^n (1/x)}{p[i] = tot/n sum(from x=i to n) 1/x} (Legendre & Legendre 2012), where \eqn{tot} is the total and \eqn{n} is the number of brokenstick components (cf. \code{\link{radfit}}). Broken stick has been recommended as a stopping rule in principal component analysis (Jackson 1993): principal components should be retained as long as observed eigenvalues are higher than corresponding random broken stick components. The \code{bstick} function is generic. The default needs the number of components and the total, and specific methods extract this information from ordination results. There also is a \code{bstick} method for \code{\link{cca}}. However, the broken stick model is not strictly valid for correspondence analysis (CA), because eigenvalues of CA are defined to be \eqn{\leq 1}{<=1}, whereas brokenstick components have no such restrictions. The brokenstick components are not available for \code{\link{decorana}} where the sum of eigenvalues (total inertia) is unknown, and the eigenvalues of single axes are not additive in detrended analysis. } \value{ Function \code{screeplot} draws a plot on the currently active device, and returns invisibly the \code{\link{xy.coords}} of the points or bars for the eigenvalues. Function \code{bstick} returns a numeric vector of broken stick components. } \references{ Jackson, D. A. (1993). Stopping rules in principal components analysis: a comparison of heuristical and statistical approaches. \emph{Ecology} 74, 2204--2214. Legendre, P. and Legendre, L. (2012) \emph{Numerical Ecology}. 3rd English ed. Elsevier. } \note{Function \code{screeplot} is generic from \code{R} version 2.5.0. In these versions you can use plain \code{screeplot} command without suffices \code{cca}, \code{prcomp} etc. } \author{Gavin L. Simpson} \seealso{ \code{\link{cca}}, \code{\link{decorana}}, \code{\link{princomp}} and \code{\link{prcomp}} for the ordination functions, and \code{\link{screeplot}} for the stock version. } \examples{ data(varespec) vare.pca <- rda(varespec, scale = TRUE) bstick(vare.pca) screeplot(vare.pca, bstick = TRUE, type = "lines") } \keyword{multivariate} vegan/man/scores.Rd0000644000176200001440000000650211722445261013721 0ustar liggesusers\name{scores} \alias{scores} \alias{scores.default} \alias{scores.lda} \title{ Get Species or Site Scores from an Ordination } \description{ Function to access either species or site scores for specified axes in some ordination methods. The \code{scores} function is generic in \pkg{vegan}, and \pkg{vegan} ordination functions have their own \code{scores} functions that are documented separately with the method (see e.g. \code{\link{scores.cca}}, \code{\link{scores.metaMDS}}, \code{\link{scores.decorana}}). This help file documents the default \code{scores} method that is only used for non-\pkg{vegan} ordination objects. } \usage{ \method{scores}{default}(x, choices, display=c("sites", "species"), ...) } \arguments{ \item{x}{ An ordination result. } \item{choices}{ Ordination axes. If missing, default method returns all axes.} \item{display}{ Partial match to access scores for \code{sites} or \code{species}.} \item{...}{ Other parameters (unused). } } \details{ Function \code{scores} is a generic method in \pkg{vegan}. Several \pkg{vegan} functions have their own \code{scores} methods with their own defaults and with some new arguments. This help page describes only the default method. For other methods, see, e.g., \code{\link{scores.cca}}, \code{\link{scores.rda}}, \code{\link{scores.decorana}}. All \pkg{vegan} ordination functions should have a \code{scores} method which should be used to extract the scores instead of directly accessing them. Scaling and transformation of scores should also happen in the \code{scores} function. If the \code{scores} function is available, the results can be plotted using \code{\link{ordiplot}}, \code{\link{ordixyplot}} etc., and the ordination results can be compared in \code{\link{procrustes}} analysis. The \code{scores.default} function is used to extract scores from non-\pkg{vegan} ordination results. Many standard ordination methods of libraries do not have a specific \code{class}, and no specific method can be written for them. However, \code{scores.default} guesses where some commonly used functions keep their site scores and possible species scores. If \code{x} is a matrix, \code{scores.default} returns the chosen columns of that matrix, ignoring whether species or sites were requested (do not regard this as a bug but as a feature, please). Currently the function seems to work at least for \code{\link[MASS]{isoMDS}}, \code{\link{prcomp}}, \code{\link{princomp}} and some \pkg{ade4} objects. It may work in other cases or fail mysteriously. } \value{ The function returns a matrix of scores. } \author{Jari Oksanen } \seealso{ Specific \code{scores} functions include (but are not limited to) \code{\link{scores.cca}}, \code{\link{scores.rda}}, \code{\link{scores.decorana}}, \code{\link{scores.envfit}}, \code{\link{scores.metaMDS}}, \code{\link{scores.monoMDS}} and \code{\link{scores.pcnm}}. These have somewhat different interface -- \code{\link{scores.cca}} in particular -- but all work with keywords \code{display="sites"} and return a matrix. However, they may also return a list of matrices, and some other \code{scores} methods will have quite different arguments. } \examples{ data(varespec) vare.pca <- prcomp(varespec) scores(vare.pca, choices=c(1,2)) } \keyword{ multivariate } vegan/man/renyi.Rd0000644000176200001440000001204711715417167013560 0ustar liggesusers\encoding{UTF-8} \name{renyi} \alias{renyi} \alias{plot.renyi} \alias{renyiaccum} \alias{plot.renyiaccum} \alias{persp.renyiaccum} \alias{rgl.renyiaccum} \title{Renyi and Hill Diversities and Corresponding Accumulation Curves } \description{ Function \code{renyi} find \enc{Rényi}{Renyi} diversities with any scale or the corresponding Hill number (Hill 1973). Function \code{renyiaccum} finds these statistics with accumulating sites. } \usage{ renyi(x, scales = c(0, 0.25, 0.5, 1, 2, 4, 8, 16, 32, 64, Inf), hill = FALSE) \method{plot}{renyi}(x, ...) renyiaccum(x, scales = c(0, 0.5, 1, 2, 4, Inf), permutations = 100, raw = FALSE, ...) \method{plot}{renyiaccum} (x, what = c("mean", "Qnt 0.025", "Qnt 0.975"), type = "l", ...) \method{persp}{renyiaccum} (x, theta = 220, col = heat.colors(100), zlim, ...) rgl.renyiaccum(x, rgl.height = 0.2, ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{x}{Community data matrix or plotting object. } \item{scales}{Scales of \enc{Rényi}{Renyi} diversity.} \item{hill}{Calculate Hill numbers.} \item{permutations}{Number of random permutations in accumulating sites.} \item{raw}{if \code{FALSE} then return summary statistics of permutations, and if \code{TRUE} then returns the individual permutations.} \item{what}{Items to be plotted.} \item{type}{Type of plot, where \code{type = "l"} means lines.} \item{theta}{Angle defining the viewing direction (azimuthal) in \code{\link{persp}}.} \item{col}{Colours used for surface. Single colour will be passed on, and vector colours will be selected by the midpoint of a rectangle in \code{\link{persp}}. } \item{zlim}{Limits of vertical axis.} \item{rgl.height}{Scaling of vertical axis.} \item{\dots}{Other arguments which are passed to \code{renyi} and to graphical functions.} } \details{ Common \code{\link{diversity}} indices are special cases of \enc{Rényi}{Renyi} diversity \deqn{H_a = \frac{1}{1-a} \log \sum p_i^a}{H.a = 1/(1-a) log sum(p^a)} where \eqn{a} is a scale parameter, and Hill (1975) suggested to use so-called ``Hill numbers'' defined as \eqn{N_a = \exp(H_a)}{N.a = exp(H.a)}. Some Hill numbers are the number of species with \eqn{a = 0}, \eqn{\exp(H')}{exp(H')} or the exponent of Shannon diversity with \eqn{a = 1}, inverse Simpson with \eqn{a = 2} and \eqn{1/ \max(p_i)}{1/max(p)} with \eqn{a = \infty}{a = Inf}. According to the theory of diversity ordering, one community can be regarded as more diverse than another only if its \enc{Rényi}{Renyi} diversities are all higher (\enc{Tóthmérész}{Tothmeresz} 1995). The \code{plot} method for \code{renyi} uses \pkg{lattice} graphics, and displays the diversity values against each scale in separate panel for each site together with minimum, maximum and median values in the complete data. Function \code{renyiaccum} is similar to \code{\link{specaccum}} but finds \enc{Rényi}{Renyi} or Hill diversities at given \code{scales} for random permutations of accumulated sites. Its \code{plot} function uses \pkg{lattice} function \code{\link[lattice]{xyplot}} to display the accumulation curves for each value of \code{scales} in a separate panel. In addition, it has a \code{persp} method to plot the diversity surface against scale and number and sites. Dynamic graphics with \code{rgl.renyiaccum} use \pkg{rgl} package, and produces similar surface as \code{persp} with a mesh showing the empirical confidence levels. } \value{ Function \code{renyi} returns a data frame of selected indices. Function \code{renyiaccum} with argument \code{raw = FALSE} returns a three-dimensional array, where the first dimension are the accumulated sites, second dimension are the diversity scales, and third dimension are the summary statistics \code{mean}, \code{stdev}, \code{min}, \code{max}, \code{Qnt 0.025} and \code{Qnt 0.975}. With argument \code{raw = TRUE} the statistics on the third dimension are replaced with individual permutation results. } \references{ \url{http://www.worldagroforestry.org/resources/databases/tree-diversity-analysis} Hill, M.O. (1973). Diversity and evenness: a unifying notation and its consequences. \emph{Ecology} 54, 427--473. Kindt R, Van Damme P, Simons AJ. 2006. Tree diversity in western Kenya: using profiles to characterise richness and evenness. \emph{Biodiversity and Conservation} 15: 1253-1270. \enc{Tóthmérész}{Tothmeresz}, B. (1995). Comparison of different methods for diversity ordering. \emph{Journal of Vegetation Science} 6, 283--290. } \author{ Roeland Kindt \email{r.kindt@cgiar.org} and Jari Oksanen } \seealso{\code{\link{diversity}} for diversity indices, and \code{\link{specaccum}} for ordinary species accumulation curves, and \code{\link[lattice]{xyplot}}, \code{\link{persp}} and \code{\link[rgl]{rgl}} for controlling graphics. } \examples{ data(BCI) i <- sample(nrow(BCI), 12) mod <- renyi(BCI[i,]) plot(mod) mod <- renyiaccum(BCI[i,]) plot(mod, as.table=TRUE, col = c(1, 2, 2)) persp(mod) } \keyword{univar } vegan/man/read.cep.Rd0000644000176200001440000001053510667741210014105 0ustar liggesusers\name{read.cep} \alias{read.cep} \title{Reads a CEP (Canoco) data file } \description{ \code{read.cep} reads a file formatted by relaxed strict CEP format used by \code{Canoco} software, among others. } \usage{ read.cep(file, maxdata=10000, positive=TRUE, trace=FALSE, force=FALSE) } \arguments{ \item{file}{File name (character variable). } \item{maxdata}{Maximum number of non-zero entries. } \item{positive}{Only positive entries, like in community data.} \item{trace}{Work verbosely.} \item{force}{Run function, even if \R refuses first.} } \details{ Cornell Ecology Programs (CEP) introduced several data formats designed for punched cards. One of these was the `condensed strict' format which was adopted by popular software \code{DECORANA} and \code{TWINSPAN}. Later, Cajo ter Braak wrote \code{Canoco} based on \code{DECORANA}, where he adopted the format, but relaxed it somewhat (that's why I call it a `relaxed strict' format). Further, he introduced a more ordinary `free' format, and allowed the use of classical Fortran style `open' format with fixed field widths. This function should be able to deal with all these \code{Canoco} formats, whereas it cannot read many of the traditional CEP alternatives. All variants of CEP formats have: \itemize{ \item Two or three title cards, most importantly specifying the format (or word \code{FREE}) and the number of items per record (number of species and sites for \code{FREE} format). \item Data in one of three accepted formats: \enumerate{ \item Condensed format: First number on the line is the site identifier, and it is followed by pairs (`couplets') of numbers identifying the species and its abundance (an integer and a floating point number). \item Open Fortran format, where the first number on the line must be the site number, followed by abundance values in fields of fixed widths. Empty fields are interpreted as zeros. \item `Free' format, where the numbers are interpreted as abundance values. These numbers must be separated by blank space, and zeros must be written as zeros. } \item Species and site names, given in Fortran format \code{(10A8)}: Ten names per line, eight columns for each. } With option \code{positive = TRUE} the function removes all lines and columns with zero or negative marginal sums. In community data with only positive entries, this removes empty sites and species. If data entries can be negative, this ruins data, and such data sets should be read in with option \code{positive = FALSE}. } \value{ Returns a data frame, where columns are species and rows are sites. Column and row names are taken from the CEP file, and changed into unique \R names by \code{\link{make.names}} after stripping the blanks. } \references{ Ter Braak, C.J.F. (1984--): CANOCO -- a FORTRAN program for \emph{cano}nical \emph{c}ommunity \emph{o}rdination by [partial] [detrended] [canonical] correspondence analysis, principal components analysis and redundancy analysis. \emph{TNO Inst. of Applied Computer Sci., Stat. Dept. Wageningen, The Netherlands}. } \author{ Jari Oksanen } \note{ The function relies on smooth linking of Fortran file IO in \R session. This is not guaranteed to work, and therefore the function may not work in \emph{your} system, but it can crash the \R session. Therefore the default is that the function does not run. If you still want to try: \enumerate{ \item Save your session \item Run \code{read.cep()} with switch \code{force=TRUE} } If you transfer files between operating systems or platforms, you should always check that your file is formatted to your current platform. For instance, if you transfer files from Windows to Linux, you should change the files to \code{unix} format, or your session may crash when Fortran program tries to read the invisible characters that Windows uses at the end of each line. If you compiled \code{vegan} using \code{gfortran}, the input is probably corrupted. You either should compile \code{vegan} with other FORTRAN compilers or not to use \code{read.cep}. The problems still persist in \code{gfortran 4.01}. } \examples{ ## Provided that you have the file `dune.spe' \dontrun{ theclassic <- read.cep("dune.spe", force=T)} } \keyword{ IO } \keyword{ file } vegan/man/raupcrick.Rd0000644000176200001440000001124212031516374014401 0ustar liggesusers\name{raupcrick} \alias{raupcrick} \title{ Raup-Crick Dissimilarity with Unequal Sampling Densities of Species } \description{ Function finds the Raup-Crick dissimilarity which is a probability of number of co-occurring species with species occurrence probabilities proportional to species frequencies. } \usage{ raupcrick(comm, null = "r1", nsimul = 999, chase = FALSE) } \arguments{ \item{comm}{Community data which will be treated as presence/absence data.} \item{null}{Null model used as the \code{method} in \code{\link{oecosimu}}.} \item{nsimul}{Number of null communities for assessing the dissimilarity index.} \item{chase}{Use the Chase et al. (2011) method of tie handling (not recommended except for comparing the results against the Chase script).} } \details{Raup-Crick index is the probability that compared sampling units have non-identical species composition. This probability can be regarded as a dissimilarity, although it is not metric: identical sampling units can have dissimilarity slightly above \eqn{0}, the dissimilarity can be nearly zero over a range of shared species, and sampling units with no shared species can have dissimilarity slightly below \eqn{1}. Moreover, communities sharing rare species appear as more similar (lower probability of finding rare species together), than communities sharing the same number of common species. The function will always treat the data as binary (presence/ absence). The probability is assessed using simulation with \code{\link{oecosimu}} where the test statistic is the observed number of shared species between sampling units evaluated against a community null model (see Examples). The default null model is \code{"r1"} where the probability of selecting species is proportional to the species frequencies. The \code{\link{vegdist}} function implements a variant of the Raup-Crick index with equal sampling probabilities for species using exact analytic equations without simulation. This corresponds to \code{null} model \code{"r0"} which also can be used with the current function. All other null model methods of \code{\link{oecosimu}} can be used with the current function, but they are new unpublished methods. } \value{The function returns an object inheriting from \code{\link{dist}} which can be interpreted as a dissimilarity matrix.} \references{ Chase, J.M., Kraft, N.J.B., Smith, K.G., Vellend, M. and Inouye, B.D. (2011). Using null models to disentangle variation in community dissimilarity from variation in \eqn{\alpha}{alpha}-diversity. \emph{Ecosphere} 2:art24 [doi:10.1890/ES10-00117.1] } \author{The function was developed after Brian Inouye contacted us and informed us about the method in Chase et al. (2011), and the function takes its idea from the code that was published with their paper. The current function was written by Jari Oksanen. } \note{ The test statistic is the number of shared species, and this is typically tied with a large number of simulation results. The tied values are handled differently in the current function and in the function published with Chase et al. (2011). In \pkg{vegan}, the index is the number of simulated values that are smaller \emph{or equal} than the observed value, but smaller than observed value is used by Chase et al. (2011) with option \code{split = FALSE} in their script; this can be achieved with \code{chase = TRUE} in \pkg{vegan}. Chase et al. (2011) script with \code{split = TRUE} uses half of tied simulation values to calculate a distance measure, and that choice cannot be directly reproduced in vegan (it is the average of \pkg{vegan} \code{raupcrick} results with \code{chase = TRUE} and \code{chase = FALSE}).} \seealso{The function is based on \code{\link{oecosimu}}. Function \code{\link{vegdist}} with {method = "raup"} implements a related index but with equal sampling densities of species, and \code{\link{designdist}} demonstrates its calculation.} \examples{ ## data set with variable species richness data(sipoo) ## default raupcrick dr1 <- raupcrick(sipoo) ## use null model "r0" of oecosimu dr0 <- raupcrick(sipoo, null = "r0") ## vegdist(..., method = "raup") corresponds to 'null = "r0"' d <- vegdist(sipoo, "raup") op <- par(mfrow=c(2,1), mar=c(4,4,1,1)+.1) plot(dr1 ~ d, xlab = "Raup-Crick with Null R1", ylab="vegdist") plot(dr0 ~ d, xlab = "Raup-Crick with Null R0", ylab="vegdist") par(op) ## The calculation is essentially as in the following oecosimu() call, ## except that designdist() is replaced with faster code \dontrun{% oecosimu(sipoo, function(x) designdist(x, "J", "binary"), method = "r1") } } \keyword{ multivariate } vegan/man/rankindex.Rd0000644000176200001440000001014611603334547014407 0ustar liggesusers\name{rankindex} \alias{rankindex} \title{Compares Dissimilarity Indices for Gradient Detection } \description{ Rank correlations between dissimilarity indices and gradient separation. } \usage{ rankindex(grad, veg, indices = c("euc", "man", "gow", "bra", "kul"), stepacross = FALSE, method = "spearman", ...) } \arguments{ \item{grad}{The gradient variable or matrix. } \item{veg}{The community data matrix. } \item{indices}{Dissimilarity indices compared, partial matches to alternatives in \code{\link{vegdist}}. Alternatively, it can be a (named) list of functions returning objects of class 'dist'.} \item{stepacross}{Use \code{\link{stepacross}} to find a shorter path dissimilarity. The dissimilarities for site pairs with no shared species are set \code{NA} using \code{\link{no.shared}} so that indices with no fixed upper limit can also be analysed.} \item{method}{Correlation method used. } \item{...}{Other parameters to \code{\link{stepacross}}.} } \details{ A good dissimilarity index for multidimensional scaling should have a high rank-order similarity with gradient separation. The function compares most indices in \code{\link{vegdist}} against gradient separation using rank correlation coefficients in \code{\link{cor.test}}. The gradient separation between each point is assessed as Euclidean distance for continuous variables, and as Gower metric for mixed data using function \code{\link[cluster]{daisy}} when \code{grad} has factors. The \code{indices} argument can accept any dissimilarity indices besides the ones calculated by the \code{\link{vegdist}} function. For this, the argument value should be a (possibly named) list of functions. Each function must return a valid 'dist' object with dissimilarities, similarities are not accepted and should be converted into dissimilarities beforehand. } \value{ Returns a named vector of rank correlations. } \references{ Faith, F.P., Minchin, P.R. and Belbin, L. (1987). Compositional dissimilarity as a robust measure of ecological distance. \emph{Vegetatio} 69, 57-68. } \author{Jari Oksanen, with additions from Peter Solymos} \note{ There are several problems in using rank correlation coefficients. Typically there are very many ties when \eqn{n(n-1)/2} gradient separation values are derived from just \eqn{n} observations. Due to floating point arithmetics, many tied values differ by machine epsilon and are arbitrarily ranked differently by \code{\link{rank}} used in \code{\link{cor.test}}. Two indices which are identical with certain transformation or standardization may differ slightly (magnitude \eqn{10^{-15}}) and this may lead into third or fourth decimal instability in rank correlations. Small differences in rank correlations should not be taken too seriously. Probably this method should be replaced with a sounder method, but I do not yet know which\ldots You may experiment with \code{\link{mantel}}, \code{\link{anosim}} or even \code{\link{protest}}. Earlier version of this function used \code{method = "kendall"}, but that is far too slow in large data sets. The functions returning dissimilarity objects should be self contained, because the \code{...} argument passes additional parameters to \code{\link{stepacross}} and not to the functions supplied via the \code{indices} argument. } \seealso{\code{\link{vegdist}}, \code{\link{stepacross}}, \code{\link{no.shared}}, \code{\link{monoMDS}}, \code{\link{cor}}, \code{\link{Machine}}, and for alternatives \code{\link{anosim}}, \code{\link{mantel}} and \code{\link{protest}}. } \examples{ data(varespec) data(varechem) ## The next scales all environmental variables to unit variance. ## Some would use PCA transformation. rankindex(scale(varechem), varespec) rankindex(scale(varechem), wisconsin(varespec)) ## Using non vegdist indices as functions funs <- list(Manhattan=function(x) dist(x, "manhattan"), Gower=function(x) cluster:::daisy(x, "gower"), Ochiai=function(x) designdist(x, "1-J/sqrt(A*B)")) rankindex(scale(varechem), varespec, funs) } \keyword{ multivariate } vegan/man/radfit.Rd0000644000176200001440000002677012031100300013655 0ustar liggesusers\name{radfit} \alias{radfit} \alias{radfit.default} \alias{radfit.data.frame} \alias{AIC.radfit} \alias{AIC.radfit.frame} \alias{as.rad} \alias{coef.radfit} \alias{coef.radfit.frame} \alias{deviance.radfit} \alias{deviance.radfit.frame} \alias{logLik, radfit} \alias{logLik, radfit.frame} \alias{fitted.radfit} \alias{fitted.radfit.frame} \alias{lines.radline} \alias{lines.radfit} \alias{plot.radfit.frame} \alias{plot.radfit} \alias{plot.radline} \alias{plot.rad} \alias{radlattice} \alias{points.radline} \alias{points.radfit} \alias{summary.radfit.frame} \alias{rad.preempt} \alias{rad.lognormal} \alias{rad.zipf} \alias{rad.zipfbrot} \alias{rad.null} \alias{predict.radline} \alias{predict.radfit} \alias{predict.radfit.frame} \title{ Rank -- Abundance or Dominance / Diversity Models} \description{ Functions construct rank -- abundance or dominance / diversity or Whittaker plots and fit brokenstick, pre-emption, log-Normal, Zipf and Zipf-Mandelbrot models of species abundance. } \usage{ \method{radfit}{default}(x, ...) rad.null(x, family=poisson, ...) rad.preempt(x, family = poisson, ...) rad.lognormal(x, family = poisson, ...) rad.zipf(x, family = poisson, ...) rad.zipfbrot(x, family = poisson, ...) \method{predict}{radline}(object, newdata, total, ...) \method{plot}{radfit}(x, BIC = FALSE, legend = TRUE, ...) \method{plot}{radfit.frame}(x, order.by, BIC = FALSE, model, legend = TRUE, as.table = TRUE, ...) \method{plot}{radline}(x, xlab = "Rank", ylab = "Abundance", type = "b", ...) radlattice(x, BIC = FALSE, ...) \method{lines}{radfit}(x, ...) \method{points}{radfit}(x, ...) as.rad(x) \method{plot}{rad}(x, xlab = "Rank", ylab = "Abundance", log = "y", ...) } \arguments{ \item{x}{Data frame, matrix or a vector giving species abundances, or an object to be plotted.} \item{family}{Error distribution (passed to \code{\link{glm}}). All alternatives accepting \code{link = "log"} in \code{\link{family}} can be used, although not all make sense.} \item{object}{A fitted result object.} \item{newdata}{Ranks used for ordinations. All models can interpolate to non-integer \dQuote{ranks} (although this may be approximate), but extrapolation may fail} \item{total}{The new total used for predicting abundance. Observed total count is used if this is omitted.} \item{order.by}{A vector used for ordering sites in plots.} \item{BIC}{Use Bayesian Information Criterion, BIC, instead of Akaike's AIC. The penalty in BIC is \eqn{k = \log(S)}{k = log(S)} where \eqn{S} is the number of species, whereas AIC uses \eqn{k = 2}.} \item{model}{Show only the specified model. If missing, AIC is used to select the model. The model names (which can be abbreviated) are \code{Null}, \code{Preemption}, \code{Lognormal}, \code{Zipf}, \code{Mandelbrot}. } \item{legend}{Add legend of line colours.} \item{as.table}{Arrange panels starting from upper left corner (passed to \code{\link[lattice]{xyplot}}).} \item{xlab,ylab}{Labels for \code{x} and \code{y} axes.} \item{type}{Type of the plot, \code{"b"} for plotting both observed points and fitted lines, \code{"p"} for only points, \code{"l"} for only fitted lines, and \code{"n"} for only setting the frame. } \item{log}{Use logarithmic scale for given axis. The default \code{log = "y"} gives the traditional plot of community ecology where the pre-emption model is a straight line, and with \code{log = "xy"} Zipf model is a straight line. With \code{log = ""} both axes are in the original arithmetic scale.} \item{\dots}{Other parameters to functions. } } \details{ Rank--Abundance Dominance (RAD) or Dominance/Diversity plots (Whittaker 1965) display logarithmic species abundances against species rank order. These plots are supposed to be effective in analysing types of abundance distributions in communities. These functions fit some of the most popular models mainly following Wilson (1991). Functions \code{rad.null}, \code{rad.preempt}, \code{rad.lognormal}, \code{rad.zipf} and \code{zipfbrot} fit the individual models (described below) for a single vector (row of data frame), and function \code{radfit} fits all models. The argument of the function \code{radfit} can be either a vector for a single community or a data frame where each row represents a distinct community. Function \code{rad.null} fits a brokenstick model where the expected abundance of species at rank \eqn{r} is \eqn{a_r = (J/S) \sum_{x=r}^S (1/x)}{a[r] = J/S sum(from x=r to S) 1/x} (Pielou 1975), where \eqn{J} is the total number of individuals (site total) and \eqn{S} is the total number of species in the community. This gives a Null model where the individuals are randomly distributed among observed species, and there are no fitted parameters. Function \code{rad.preempt} fits the niche preemption model, a.k.a. geometric series or Motomura model, where the expected abundance \eqn{a} of species at rank \eqn{r} is \eqn{a_r = J \alpha (1 - \alpha)^{r-1}}{a[r] = J*alpha*(1-alpha)^(r-1)}. The only estimated parameter is the preemption coefficient \eqn{\alpha} which gives the decay rate of abundance per rank. The niche preemption model is a straight line in a RAD plot. Function \code{rad.lognormal} fits a log-Normal model which assumes that the logarithmic abundances are distributed Normally, or \eqn{a_r = \exp( \log \mu + \log \sigma N)}{a[r] = exp(log(mu) + log(sigma) * N)}, where \eqn{N} is a Normal deviate. Function \code{rad.zipf} fits the Zipf model \eqn{a_r = J p_1 r^\gamma}{a[r] = J*p1*r^gamma} where \eqn{p_1}{p1} is the fitted proportion of the most abundant species, and \eqn{\gamma} is a decay coefficient. The Zipf--Mandelbrot model (\code{rad.zipfbrot}) adds one parameter: \eqn{a_r = J c (r + \beta)^\gamma}{a[r] = J*c*(r+beta)^gamma} after which \eqn{p_1}{p1} of the Zipf model changes into a meaningless scaling constant \eqn{c}. Log-Normal and Zipf models are generalized linear models (\code{\link{glm}}) with logarithmic link function. Zipf--Mandelbrot adds one nonlinear parameter to the Zipf model, and is fitted using \code{\link{nlm}} for the nonlinear parameter and estimating other parameters and log-Likelihood with \code{\link{glm}}. Preemption model is fitted as a purely nonlinear model. There are no estimated parameters in the Null model. The default \code{\link{family}} is \code{poisson} which is appropriate only for genuine counts (integers), but other families that accept \code{link = "log"} can be used. Families \code{\link{Gamma}} or \code{\link{gaussian}} may be appropriate for abundance data, such as cover. The ``best'' model is selected by \code{\link{AIC}}. Therefore ``quasi'' families such as \code{\link{quasipoisson}} cannot be used: they do not have \code{\link{AIC}} nor log-Likelihood needed in non-linear models. All these functions have their own \code{plot} functions. When \code{radfit} was applied for a data frame, \code{plot} uses \code{\link[lattice]{Lattice}} graphics, and other \code{plot} functions use ordinary graphics. The ordinary graphics functions return invisibly an \code{\link{ordiplot}} object for observed points, and function \code{\link{identify.ordiplot}} can be used to label selected species. Alternatively, \code{radlattice} uses \code{\link[lattice]{Lattice}} graphics to display each \code{radfit} model of a single site in a separate panel together with their AIC or BIC values. Function \code{as.rad} is a base function to construct ordered RAD data. Its \code{plot} is used by other RAD \code{plot} functions which pass extra arguments (such as \code{xlab} and \code{log}) to this function. } \value{ Functions \code{rad.null}, \code{rad.preempt}, \code{rad.lognormal}, \code{zipf} and \code{zipfbrot} fit each a single RAD model to a single site. The result object has class \code{"radline"} and inherits from \code{\link{glm}}, and can be handled by some (but not all) \code{\link{glm}} methods. Function \code{radfit} fits all models either to a single site or to all rows of a data frame or a matrix. When fitted to a single site, the function returns an object of class \code{"radfit"} with items \code{y} (observed values), \code{\link{family}}, and \code{models} which is a list of fitted \code{"radline"} models. When applied for a data frame or matrix, \code{radfit} function returns an object of class \code{"radfit.frame"} which is a list of \code{"radfit"} objects, each item names by the corresponding row name. All result objects (\code{"radline"}, \code{"radfit"}, \code{"radfit.frame"}) can be accessed with same method functions. The following methods are available: \code{\link{AIC}}, \code{\link{coef}}, \code{\link{deviance}}, \code{\link{logLik}}. In addition the fit results can be accessed with \code{\link{fitted}}, \code{\link{predict}} and \code{\link{residuals}} (inheriting from \code{\link{residuals.glm}}).The graphical functions were discussed above in Details. } \references{ Pielou, E.C. (1975) \emph{Ecological Diversity}. Wiley & Sons. Preston, F.W. (1948) The commonness and rarity of species. \emph{Ecology} 29, 254--283. Whittaker, R. H. (1965) Dominance and diversity in plant communities. \emph{Science} 147, 250--260. Wilson, J. B. (1991) Methods for fitting dominance/diversity curves. \emph{Journal of Vegetation Science} 2, 35--46. } \author{ Jari Oksanen } \note{ The RAD models are usually fitted for proportions instead of original abundances. However, nothing in these models seems to require division of abundances by site totals, and original observations are used in these functions. If you wish to use proportions, you must standardize your data by site totals, e.g. with \code{\link{decostand}} and use appropriate \code{\link{family}} such as \code{\link{Gamma}}. The lognormal model is fitted in a standard way, but I do think this is not quite correct -- at least it is not equivalent to fitting Normal density to log abundances like originally suggested (Preston 1948). Some models may fail. In particular, estimation of the Zipf-Mandelbrot model is difficult. If the fitting fails, \code{NA} is returned. Wilson (1991) defined preemption model as \eqn{a_r = J p_1 (1 - \alpha)^{r-1}}{a[r] = J*p1*(1 - alpha)^(r-1)}, where \eqn{p_1}{p1} is the fitted proportion of the first species. However, parameter \eqn{p_1}{p1} is completely defined by \eqn{\alpha} since the fitted proportions must add to one, and therefore I handle preemption as a one-parameter model. Veiled log-Normal model was included in earlier releases of this function, but it was removed because it was flawed: an implicit veil line also appears in the ordinary log-Normal. The latest release version with \code{rad.veil} was \code{1.6-10}. } \seealso{\code{\link{fisherfit}} and \code{\link{prestonfit}}. An alternative approach is to use \code{\link{qqnorm}} or \code{\link{qqplot}} with any distribution. For controlling graphics: \code{\link[lattice]{Lattice}}, \code{\link[lattice]{xyplot}}, \code{\link[lattice]{lset}}. } \examples{ data(BCI) mod <- rad.lognormal(BCI[5,]) mod plot(mod) mod <- radfit(BCI[1,]) ## Standard plot overlaid for all models ## Pre-emption model is a line plot(mod) ## log for both axes: Zipf model is a line plot(mod, log = "xy") ## Lattice graphics separately for each model radlattice(mod) # Take a subset of BCI to save time and nerves mod <- radfit(BCI[3:5,]) mod plot(mod, pch=".") } \keyword{ univar } \keyword{ distribution } vegan/man/pyrifos.Rd0000644000176200001440000000372311744720622014121 0ustar liggesusers\name{pyrifos} \alias{pyrifos} \docType{data} \title{Response of Aquatic Invertebrates to Insecticide Treatment} \description{ The data are log transformed abundances of aquatic invertebrate in twelve ditches studied in eleven times before and after an insecticide treatment. } \usage{data(pyrifos)} \format{ A data frame with 132 observations on the log-transformed (\code{log(10*x + 1)}) abundances of 178 species. There are only twelve sites (ditches, mesocosms), but these were studied repeatedly in eleven occasions. The treatment levels, treatment times, or ditch ID's are not in the data frame, but the data are very regular, and the example below shows how to obtain these external variables. } \details{ This data set was obtained from an experiment in outdoor experimental ditches. Twelve mesocosms were allocated at random to treatments; four served as controls, and the remaining eight were treated once with the insecticide chlorpyrifos, with nominal dose levels of 0.1, 0.9, 6, and 44 \eqn{\mu}{mu }g/ L in two mesocosms each. The example data set invertebrates. Sampling was done 11 times, from week -4 pre-treatment through week 24 post-treatment, giving a total of 132 samples (12 mesocosms times 11 sampling dates), see van den Brink & ter Braak (1999) for details. The data set contains only the species data, but the example below shows how to obtain the treatment, time and ditch ID variables. } \source{ CANOCO 4 example data, with the permission of Cajo J. F. ter Braak. } \references{ van den Brink, P.J. & ter Braak, C.J.F. (1999). Principal response curves: Analysis of time-dependent multivariate responses of biological community to stress. Environmental Toxicology and Chemistry, 18, 138--148. } \examples{ data(pyrifos) ditch <- gl(12, 1, length=132) week <- gl(11, 12, labels=c(-4, -1, 0.1, 1, 2, 4, 8, 12, 15, 19, 24)) dose <- factor(rep(c(0.1, 0, 0, 0.9, 0, 44, 6, 0.1, 44, 0.9, 0, 6), 11)) } \keyword{datasets} vegan/man/procrustes.Rd0000644000176200001440000002272612104765233014641 0ustar liggesusers\name{procrustes} \alias{procrustes} \alias{summary.procrustes} \alias{plot.procrustes} \alias{points.procrustes} \alias{text.procrustes} \alias{lines.procrustes} \alias{residuals.procrustes} \alias{fitted.procrustes} \alias{predict.procrustes} \alias{protest} \title{Procrustes Rotation of Two Configurations and PROTEST } \description{ Function \code{procrustes} rotates a configuration to maximum similarity with another configuration. Function \code{protest} tests the non-randomness (`significance') between two configurations. } \usage{ procrustes(X, Y, scale = TRUE, symmetric = FALSE, scores = "sites", ...) \method{summary}{procrustes}(object, digits = getOption("digits"), ...) \method{plot}{procrustes}(x, kind=1, choices=c(1,2), to.target = TRUE, type = "p", xlab, ylab, main, ar.col = "blue", len=0.05, cex = 0.7, ...) \method{points}{procrustes}(x, display = c("target", "rotated"), ...) \method{text}{procrustes}(x, display = c("target", "rotated"), labels, ...) \method{lines}{procrustes}(x, type = c("segments", "arrows"), choices = c(1, 2), ...) \method{residuals}{procrustes}(object, ...) \method{fitted}{procrustes}(object, truemean = TRUE, ...) \method{predict}{procrustes}(object, newdata, truemean = TRUE, ...) protest(X, Y, scores = "sites", permutations = 999, strata, ...) } \arguments{ \item{X}{Target matrix} \item{Y}{Matrix to be rotated.} \item{scale}{Allow scaling of axes of \code{Y}.} \item{symmetric}{Use symmetric Procrustes statistic (the rotation will still be non-symmetric).} \item{scores}{Kind of scores used. This is the \code{display} argument used with the corresponding \code{scores} function: see \code{\link{scores}}, \code{\link{scores.cca}} and \code{\link{scores.cca}} for alternatives.} \item{x, object}{An object of class \code{procrustes}.} \item{digits}{Number of digits in the output.} \item{kind}{For \code{plot} function, the kind of plot produced: \code{kind = 1} plots shifts in two configurations, \code{kind = 0} draws a corresponding empty plot, and \code{kind = 2} plots an impulse diagram of residuals.} \item{choices}{Axes (dimensions) plotted.} \item{xlab, ylab}{Axis labels, if defaults unacceptable.} \item{main}{Plot title, if default unacceptable.} \item{display}{Show only the \code{"target"} or \code{"rotated"} matrix as points.} \item{to.target}{Draw arrows to point to target.} \item{type}{The type of plot drawn. In \code{plot}, the \code{type} can be \code{"points"} or \code{"text"} to select the marker for the tail of the arrow, or \code{"none"} for drawing an empty plot. In \code{lines} the \code{type} selects either \code{\link{arrows}} or line \code{\link{segments}} to connect target and rotated configuration.} \item{truemean}{Use the original range of target matrix instead of centring the fitted values. Function \code{plot.procrustes} needs \code{truemean = FALSE}.} \item{newdata}{Matrix of coordinates to be rotated and translated to the target.} \item{permutations}{Number of permutation to assess the significance of the symmetric Procrustes statistic. } \item{strata}{An integer vector or factor specifying the strata for permutation. If supplied, observations are permuted only within the specified strata.} \item{ar.col}{Arrow colour.} \item{len}{Width of the arrow head.} \item{labels}{Character vector of text labels. Rownames of the result object are used as default.} \item{cex}{Character expansion for points or text.} \item{...}{Other parameters passed to functions. In \code{procrustes} and \code{protest} parameters are passed to \code{\link{scores}}, in graphical functions to underlying graphical functions.} } \details{ Procrustes rotation rotates a matrix to maximum similarity with a target matrix minimizing sum of squared differences. Procrustes rotation is typically used in comparison of ordination results. It is particularly useful in comparing alternative solutions in multidimensional scaling. If \code{scale=FALSE}, the function only rotates matrix \code{Y}. If \code{scale=TRUE}, it scales linearly configuration \code{Y} for maximum similarity. Since \code{Y} is scaled to fit \code{X}, the scaling is non-symmetric. However, with \code{symmetric=TRUE}, the configurations are scaled to equal dispersions and a symmetric version of the Procrustes statistic is computed. Instead of matrix, \code{X} and \code{Y} can be results from an ordination from which \code{\link{scores}} can extract results. Function \code{procrustes} passes extra arguments to \code{\link{scores}}, \code{\link{scores.cca}} etc. so that you can specify arguments such as \code{scaling}. Function \code{plot} plots a \code{procrustes} object and returns invisibly an \code{ordiplot} object so that function \code{\link{identify.ordiplot}} can be used for identifying points. The items in the \code{ordiplot} object are called \code{heads} and \code{points} with \code{kind=1} (ordination diagram) and \code{sites} with \code{kind=2} (residuals). In ordination diagrams, the arrow heads point to the target configuration if \code{to.target = TRUE}, and to rotated configuration if \code{to.target = FALSE}. Target and original rotated axes are shown as cross hairs in two-dimensional Procrustes analysis, and with a higher number of dimensions, the rotated axes are projected onto plot with their scaled and centred range. Function \code{plot} passes parameters to underlying plotting functions. For full control of plots, you can draw the axes using \code{plot} with \code{kind = 0}, and then add items with \code{points} or \code{lines}. These functions pass all parameters to the underlying functions so that you can select the plotting characters, their size, colours etc., or you can select the width, colour and type of line \code{\link{segments}} or arrows, or you can select the orientation and head width of \code{\link{arrows}}. Function \code{residuals} returns the pointwise residuals, and \code{fitted} the fitted values, either centred to zero mean (if \code{truemean=FALSE}) or with the original scale (these hardly make sense if \code{symmetric = TRUE}). In addition, there are \code{summary} and \code{print} methods. If matrix \code{X} has a lower number of columns than matrix \code{Y}, then matrix \code{X} will be filled with zero columns to match dimensions. This means that the function can be used to rotate an ordination configuration to an environmental variable (most practically extracting the result with the \code{fitted} function). Function \code{predict} can be used to add new rotated coordinates to the target. The \code{predict} function will always translate coordinates to the original non-centred matrix. The function canot be used with \code{newdata} for \code{symmetric} analysis. Function \code{protest} performs symmetric Procrustes analysis repeatedly to estimate the `significance' of the Procrustes statistic. Function \code{protest} uses a correlation-like statistic derived from the symmetric Procrustes sum of squares \eqn{ss} as \eqn{r =\sqrt{1-ss}}{r = sqrt(1-ss)}, and also prints the sum of squares of the symmetric analysis, sometimes called \eqn{m_{12}^2}{squared m12}. Function \code{protest} has own \code{print} method, but otherwise uses \code{procrustes} methods. Thus \code{plot} with a \code{protest} object yields a ``Procrustean superimposition plot.'' } \value{ Function \code{procrustes} returns an object of class \code{procrustes} with items. Function \code{protest} inherits from \code{procrustes}, but amends that with some new items: \item{Yrot }{Rotated matrix \code{Y}.} \item{X}{Target matrix.} \item{ss }{Sum of squared differences between \code{X} and \code{Yrot}.} \item{rotation}{Orthogonal rotation matrix.} \item{translation}{Translation of the origin.} \item{scale}{Scaling factor.} \item{xmean}{The centroid of the target.} \item{symmetric}{Type of \code{ss} statistic.} \item{call}{Function call.} \item{t0}{This and the following items are only in class \code{protest}: Procrustes correlation from non-permuted solution.} \item{t}{Procrustes correlations from permutations. The distribution of these correlations can be inspected with \code{\link{density.protest}} function.} \item{signif}{`Significance' of \code{t}} \item{permutations}{Number of permutations.} \item{strata}{The name of the stratifying variable.} \item{stratum.values}{Values of the stratifying variable.} } \references{ Mardia, K.V., Kent, J.T. and Bibby, J.M. (1979). \emph{Multivariate Analysis}. Academic Press. Peres-Neto, P.R. and Jackson, D.A. (2001). How well do multivariate data sets match? The advantages of a Procrustean superimposition approach over the Mantel test. \emph{Oecologia} 129: 169-178. } \author{Jari Oksanen } \note{The function \code{protest} follows Peres-Neto & Jackson (2001), but the implementation is still after Mardia \emph{et al.} (1979).} \seealso{\code{\link{monoMDS}}, for obtaining objects for \code{procrustes}, and \code{\link{mantel}} for an alternative to \code{protest} without need of dimension reduction.} \examples{ data(varespec) vare.dist <- vegdist(wisconsin(varespec)) mds.null <- monoMDS(vare.dist, y = cmdscale(vare.dist)) mds.alt <- monoMDS(vare.dist) vare.proc <- procrustes(mds.alt, mds.null) vare.proc summary(vare.proc) plot(vare.proc) plot(vare.proc, kind=2) residuals(vare.proc) } \keyword{multivariate } \keyword{htest} vegan/man/predict.cca.Rd0000644000176200001440000002306312104765233014602 0ustar liggesusers\name{predict.cca} \alias{fitted.cca} \alias{fitted.rda} \alias{fitted.capscale} \alias{residuals.cca} \alias{predict.cca} \alias{predict.rda} \alias{predict.decorana} \alias{coef.cca} \alias{coef.rda} \alias{calibrate.cca} \alias{calibrate} \title{Prediction Tools for [Constrained] Ordination (CCA, RDA, DCA, CA, PCA) } \description{ Function \code{predict} can be used to find site and species scores or estimates of the response data with new data sets, Function \code{calibrate} estimates values of constraints with new data set. Functions \code{fitted} and \code{residuals} return estimates of response data. } \usage{ \method{fitted}{cca}(object, model = c("CCA", "CA", "pCCA"), type = c("response", "working"), ...) \method{fitted}{capscale}(object, model = c("CCA", "CA", "pCCA", "Imaginary"), type = c("response", "working"), ...) \method{residuals}{cca}(object, ...) \method{predict}{cca}(object, newdata, type = c("response", "wa", "sp", "lc", "working"), rank = "full", model = c("CCA", "CA"), scaling = FALSE, ...) \method{calibrate}{cca}(object, newdata, rank = "full", ...) \method{coef}{cca}(object, ...) \method{predict}{decorana}(object, newdata, type = c("response", "sites", "species"), rank = 4, ...) } \arguments{ \item{object}{A result object from \code{\link{cca}}, \code{\link{rda}}, \code{\link{capscale}} or \code{\link{decorana}}. } \item{model}{Show constrained (\code{"CCA"}), unconstrained (\code{"CA"}) or conditioned \dQuote{partial} (\code{"pCCA"}) results. For \code{fitted} method of \code{\link{capscale}} this can also be \code{"Imaginary"} for imaginary components with negative eigenvalues. } \item{newdata}{New data frame to be used in prediction or in calibration. Usually this a new community data frame, but with \code{type = "lc"} and for constrained component with \code{type = "response"} and \code{type = "working"} it must be a data frame of constraints. The \code{newdata} must have the same number of rows as the original community data for a \code{\link{cca}} result with \code{type = "response"} or \code{type = "working"}. If the original model had row or column names, then new data must contain rows or columns with the same names (row names for species scores, column names for \code{"wa"} scores and constraint names of \code{"lc"} scores). In other cases the rows or columns must match directly. } \item{type}{The type of prediction, fitted values or residuals: \code{"response"} scales results so that the same ordination gives the same results, and \code{"working"} gives the values used internally, that is after Chi-square standardization in \code{\link{cca}} and scaling and centring in \code{\link{rda}}. In \code{\link{capscale}} the \code{"response"} gives the dissimilarities, and \code{"working"} the scaled scores that produce the dissimilarities as Euclidean distances. Alternative \code{"wa"} gives the site scores as weighted averages of the community data, \code{"lc"} the site scores as linear combinations of environmental data, and \code{"sp"} the species scores. In \code{predict.decorana} the alternatives are scores for \code{"sites"} or \code{"species"}.} \item{rank}{The rank or the number of axes used in the approximation. The default is to use all axes (full rank) of the \code{"model"} or all available four axes in \code{predict.decorana}.} \item{scaling}{Scaling or predicted scores with the same meaning as in \code{\link{cca}}, \code{\link{rda}} and \code{\link{capscale}}.} \item{\dots}{Other parameters to the functions.} } \details{ Function \code{fitted} gives the approximation of the original data matrix or dissimilarities from the ordination result either in the scale of the response or as scaled internally by the function. Function \code{residuals} gives the approximation of the original data from the unconstrained ordination. With argument \code{type = "response"} the \code{fitted.cca} and \code{residuals.cca} function both give the same marginal totals as the original data matrix, and fitted and residuals do not add up to the original data. Functions \code{fitted.capscale} and \code{residuals.capscale} give the dissimilarities with \code{type = "response"}, but these are not additive, but the \code{"working"} scores are additive. All variants of \code{fitted} and \code{residuals} are defined so that for model \code{mod <- cca(y ~ x)}, \code{cca(fitted(mod))} is equal to constrained ordination, and \code{cca(residuals(mod))} is equal to unconstrained part of the ordination. Function \code{predict} can find the estimate of the original data matrix or dissimilarities (\code{type = "response"}) with any rank. With \code{rank = "full"} it is identical to \code{fitted}. In addition, the function can find the species scores or site scores from the community data matrix for \code{\link{cca}} or \code{\link{rda}}. The function can be used with new data, and it can be used to add new species or site scores to existing ordinations. The function returns (weighted) orthonormal scores by default, and you must specify explicit \code{scaling} to add those scores to ordination diagrams. With \code{type = "wa"} the function finds the site scores from species scores. In that case, the new data can contain new sites, but species must match in the original and new data. With \code{type="sp"} the function finds species scores from site constraints (linear combination scores). In that case the new data can contain new species, but sites must match in the original and new data. With \code{type = "lc"} the function finds the linear combination scores for sites from environmental data. In that case the new data frame must contain all constraining and conditioning environmental variables of the model formula. With \code{type = "response"} or \code{type = "working"} the new data must contain envinronmental variables if constrained component is desired, and community data matrix if residual or unconstrained component is desired. With these types, the function uses \code{newdata} to find new \code{"lc"} (constrained) or \code{"wa"} scores (unconstrained) and then finds the response or working data from these new row scores and species scores. The original site (row) and species (column) weights are used for \code{type = "response"} and \code{type = "working"} in correspondence analysis (\code{\link{cca}}) and therefore the number of rows must match in the original data and \code{newdata}. If a completely new data frame is created, extreme care is needed defining variables similarly as in the original model, in particular with (ordered) factors. If ordination was performed with the formula interface, the \code{newdata} can be a data frame or matrix, but extreme care is needed that the columns match in the original and \code{newdata}. Function \code{calibrate.cca} finds estimates of constraints from community ordination or \code{"wa"} scores from \code{\link{cca}}, \code{\link{rda}} and \code{\link{capscale}}. This is often known as calibration, bioindication or environmental reconstruction. Basically, the method is similar to projecting site scores onto biplot arrows, but it uses regression coefficients. The function can be called with \code{newdata} so that cross-validation is possible. The \code{newdata} may contain new sites, but species must match in the original and new data. The function does not work with \sQuote{partial} models with \code{Condition} term, and it cannot be used with \code{newdata} for \code{\link{capscale}} results. The results may only be interpretable for continuous variables. Function \code{coef} will give the regression coefficients from centred environmental variables (constraints and conditions) to linear combination scores. The coefficients are for unstandardized environmental variables. The coefficients will be \code{NA} for aliased effects. Function \code{predict.decorana} is similar to \code{predict.cca}. However, \code{type = "species"} is not available in detrended correspondence analysis (DCA), because detrending destroys the mutual reciprocal averaging (except for the first axis when rescaling is not used). Detrended CA does not attempt to approximate the original data matrix, so \code{type = "response"} has no meaning in detrended analysis (except with \code{rank = 1}). } \value{ The functions return matrices, vectors or dissimilarities as is appropriate. } \references{ Greenacre, M. J. (1984). Theory and applications of correspondence analysis. Academic Press, London. } \author{Jari Oksanen.} \seealso{\code{\link{cca}}, \code{\link{rda}}, \code{\link{capscale}}, \code{\link{decorana}}, \code{\link[car]{vif}}, \code{\link{goodness.cca}}. } \examples{ data(dune) data(dune.env) mod <- cca(dune ~ A1 + Management + Condition(Moisture), data=dune.env) # Definition of the concepts 'fitted' and 'residuals' mod cca(fitted(mod)) cca(residuals(mod)) # Remove rare species (freq==1) from 'cca' and find their scores # 'passively'. freq <- specnumber(dune, MARGIN=2) freq mod <- cca(dune[, freq>1] ~ A1 + Management + Condition(Moisture), dune.env) predict(mod, type="sp", newdata=dune[, freq==1], scaling=2) # New sites predict(mod, type="lc", new=data.frame(A1 = 3, Management="NM", Moisture="2"), scal=2) # Calibration and residual plot mod <- cca(dune ~ A1 + Moisture, dune.env) pred <- calibrate(mod) pred with(dune.env, plot(A1, pred[,"A1"] - A1, ylab="Prediction Error")) abline(h=0) } \keyword{ multivariate } vegan/man/prc.Rd0000644000176200001440000001324411625737155013220 0ustar liggesusers\name{prc} \alias{prc} \alias{summary.prc} \alias{plot.prc} \title{Principal Response Curves for Treatments with Repeated Observations } \description{ Principal Response Curves (PRC) are a special case of Redundancy Analysis (\code{\link{rda}}) for multivariate responses in repeated observation design. They were originally suggested for ecological communities. They should be easier to interpret than traditional constrained ordination. They can also be used to study how the effects of a factor \code{A} depend on the levels of a factor \code{B}, that is \code{A + A:B}, in a multivariate response experiment. } \usage{ prc(response, treatment, time, ...) \method{summary}{prc}(object, axis = 1, scaling = 3, digits = 4, ...) \method{plot}{prc}(x, species = TRUE, select, scaling = 3, axis = 1, type = "l", xlab, ylab, ylim, lty = 1:5, col = 1:6, pch, legpos, cex = 0.8, ...) } \arguments{ \item{response}{Multivariate response data. Typically these are community (species) data. If the data are counts, they probably should be log transformed prior to the analysis. } \item{treatment}{A factor for treatments. } \item{time}{ An unordered factor defining the observations times in the repeated design.} \item{object, x}{An \code{prc} result object.} \item{axis}{Axis shown (only one axis can be selected).} \item{scaling}{Scaling of species scores, identical to the \code{scaling} in \code{\link{scores.rda}}.} \item{digits}{Number of significant digits displayed.} \item{species}{Display species scores.} \item{select}{Vector to select displayed species. This can be a vector of indices or a logical vector which is \code{TRUE} for the selected species} \item{type}{Type of plot: \code{"l"} for lines, \code{"p"} for points or \code{"b"} for both.} \item{xlab, ylab}{Text to replace default axis labels.} \item{ylim}{Limits for the vertical axis.} \item{lty, col, pch}{Line type, colour and plotting characters (defaults supplied).} \item{legpos}{The position of the \code{\link{legend}}. A guess is made if this is not supplied, and \code{NA} will suppress legend. } \item{cex}{Character expansion for symbols and species labels.} \item{\dots}{ Other parameters passed to functions. } } \details{ PRC is a special case of \code{\link{rda}} with a single factor for \code{treatment} and a single factor for \code{time} points in repeated observations. In \pkg{vegan}, the corresponding \code{\link{rda}} model is defined as \code{rda(response ~ treatment * time + Condition(time))}. Since the \code{time} appears twice in the model formula, its main effects will be aliased, and only the main effect of treatment and interaction terms are available, and will be used in PRC. Instead of usual multivariate ordination diagrams, PRC uses canonical (regression) coefficients and species scores for a single axis. All that the current functions do is to provide a special \code{summary} and \code{plot} methods that display the \code{\link{rda}} results in the PRC fashion. The current version only works with default contrasts (\code{\link{contr.treatment}}) in which the coefficients are contrasts against the first level, and the levels must be arranged so that the first level is the control (or a baseline). If necessary, you must change the baseline level with function \code{\link{relevel}}. Function \code{summary} prints the species scores and the coefficients. Function \code{plot} plots coefficients against \code{time} using \code{\link{matplot}}, and has similar defaults. The graph (and PRC) is meaningful only if the first \code{treatment} level is the control, as the results are contrasts to the first level when unordered factors are used. The plot also displays species scores on the right vertical axis using function \code{\link{linestack}}. Typically the number of species is so high that not all can be displayed with the default settings, but users can reduce character size or padding (\code{air}) in \code{\link{linestack}}, or \code{select} only a subset of the species. A legend will be displayed unless suppressed with \code{legpos = NA}, and the functions tries to guess where to put the legend if \code{legpos} is not supplied. } \value{ The function is a special case of \code{\link{rda}} and returns its result object (see \code{\link{cca.object}}). However, a special \code{summary} and \code{plot} methods display returns differently than in \code{\link{rda}}. } \references{ van den Brink, P.J. & ter Braak, C.J.F. (1999). Principal response curves: Analysis of time-dependent multivariate responses of biological community to stress. Environmental Toxicology and Chemistry, 18, 138--148. } \author{ Jari Oksanen and Cajo ter Braak} \section{Warning }{The first level of \code{treatment} must be the control: use function \code{\link{relevel}} to guarantee the correct refence level. The current version will ignore user setting of \code{\link{contrasts}} and always use treatment contrasts (\code{\link{contr.treatment}}). The \code{time} must be an unordered factor. } \seealso{\code{\link{rda}}, \code{\link{anova.cca}}.} \examples{ # Chlorpyrifos experiment and experimental design data(pyrifos) week <- gl(11, 12, labels=c(-4, -1, 0.1, 1, 2, 4, 8, 12, 15, 19, 24)) dose <- factor(rep(c(0.1, 0, 0, 0.9, 0, 44, 6, 0.1, 44, 0.9, 0, 6), 11)) # PRC mod <- prc(pyrifos, dose, week) mod # RDA summary(mod) # PRC logabu <- colSums(pyrifos) plot(mod, select = logabu > 100) # Permutations should be done only within one week, and we only # are interested on the first axis anova(mod, strata = week, first=TRUE, perm.max = 100) } \keyword{ multivariate } vegan/man/plot.cca.Rd0000644000176200001440000002021312114162713014113 0ustar liggesusers\name{plot.cca} \alias{plot.cca} \alias{text.cca} \alias{points.cca} \alias{scores.cca} \alias{scores.rda} \alias{summary.cca} \alias{print.summary.cca} \alias{ade2vegancca} \alias{head.summary.cca} \alias{tail.summary.cca} \title{Plot or Extract Results of Constrained Correspondence Analysis or Redundancy Analysis} \description{ Functions to plot or extract results of constrained correspondence analysis (\code{\link{cca}}), redundancy analysis (\code{\link{rda}}) or constrained analysis of principal coordinates (\code{\link{capscale}}). } \usage{ \method{plot}{cca}(x, choices = c(1, 2), display = c("sp", "wa", "cn"), scaling = 2, type, xlim, ylim, const, ...) \method{text}{cca}(x, display = "sites", labels, choices = c(1, 2), scaling = 2, arrow.mul, head.arrow = 0.05, select, const, axis.bp = TRUE, ...) \method{points}{cca}(x, display = "sites", choices = c(1, 2), scaling = 2, arrow.mul, head.arrow = 0.05, select, const, axis.bp = TRUE, ...) \method{scores}{cca}(x, choices=c(1,2), display=c("sp","wa","cn"), scaling=2, ...) \method{scores}{rda}(x, choices=c(1,2), display=c("sp","wa","cn"), scaling=2, const, ...) \method{summary}{cca}(object, scaling = 2, axes = 6, display = c("sp", "wa", "lc", "bp", "cn"), digits = max(3, getOption("digits") - 3), ...) \method{print}{summary.cca}(x, digits = x$digits, head = NA, tail = head, ...) \method{head}{summary.cca}(x, n = 6, tail = 0, ...) \method{tail}{summary.cca}(x, n = 6, head = 0, ...) } \arguments{ \item{x, object}{A \code{cca} result object.} \item{choices}{Axes shown.} \item{display}{Scores shown. These must include some of the alternatives \code{species} or \code{sp} for species scores, \code{sites} or \code{wa} for site scores, \code{lc} for linear constraints or ``LC scores'', or \code{bp} for biplot arrows or \code{cn} for centroids of factor constraints instead of an arrow.} \item{scaling}{Scaling for species and site scores. Either species (\code{2}) or site (\code{1}) scores are scaled by eigenvalues, and the other set of scores is left unscaled, or with \code{3} both are scaled symmetrically by square root of eigenvalues. Corresponding negative values can be used in \code{cca} to additionally multiply results with \eqn{\sqrt(1/(1-\lambda))}. This scaling is know as Hill scaling (although it has nothing to do with Hill's rescaling of \code{\link{decorana}}). With corresponding negative values in\code{rda}, species scores are divided by standard deviation of each species and multiplied with an equalizing constant. Unscaled raw scores stored in the result can be accessed with \code{scaling = 0}. } \item{type}{Type of plot: partial match to \code{text} for text labels, \code{points} for points, and \code{none} for setting frames only. If omitted, \code{text} is selected for smaller data sets, and \code{points} for larger.} \item{xlim, ylim}{the x and y limits (min,max) of the plot.} \item{labels}{Optional text to be used instead of row names.} \item{arrow.mul}{Factor to expand arrows in the graph. Arrows will be scaled automatically to fit the graph if this is missing.} \item{head.arrow}{Default length of arrow heads.} \item{select}{Items to be displayed. This can either be a logical vector which is \code{TRUE} for displayed items or a vector of indices of displayed items.} \item{const}{General scaling constant to \code{rda} scores. The default is to use a constant that gives biplot scores, that is, scores that approximate original data (see \code{\link{vignette}} \samp{decision-vegan.pdf} with \code{\link{vegandocs}} for details and discussion). If \code{const} is a vector of two items, the first is used for species, and the second item for site scores.} \item{axis.bp}{Draw \code{\link{axis}} for biplot arrows.} \item{axes}{Number of axes in summaries.} \item{digits}{Number of digits in output.} \item{n, head, tail}{Number of rows printed from the head and tail of species and site scores. Default \code{NA} prints all.} \item{...}{Parameters passed to other functions.} } \details{ Same \code{plot} function will be used for \code{\link{cca}} and \code{\link{rda}}. This produces a quick, standard plot with current \code{scaling}. The \code{plot} function sets colours (\code{col}), plotting characters (\code{pch}) and character sizes (\code{cex}) to certain standard values. For a fuller control of produced plot, it is best to call \code{plot} with \code{type="none"} first, and then add each plotting item separately using \code{text.cca} or \code{points.cca} functions. These use the default settings of standard \code{\link{text}} and \code{\link{points}} functions and accept all their parameters, allowing a full user control of produced plots. Environmental variables receive a special treatment. With \code{display="bp"}, arrows will be drawn. These are labelled with \code{text} and unlabelled with \code{points}. The basic \code{plot} function uses a simple (but not very clever) heuristics for adjusting arrow lengths to plots, but the user can give the expansion factor in \code{mul.arrow}. With \code{display="cn"} the centroids of levels of \code{\link{factor}} variables are displayed (these are available only if there were factors and a formula interface was used in \code{\link{cca}} or \code{\link{rda}}). With this option continuous variables still are presented as arrows and ordered factors as arrows and centroids. If you want to have still a better control of plots, it is better to produce them using primitive \code{plot} commands. Function \code{scores} helps in extracting the needed components with the selected \code{scaling}. Function \code{summary} lists all scores and the output can be very long. You can suppress scores by setting \code{axes = 0} or \code{display = NA} or \code{display = NULL}. You can display some first or last (or both) rows of scores by using \code{head} or \code{tail} or explicit \code{print} command for the \code{summary}. Palmer (1993) suggested using linear constraints (``LC scores'') in ordination diagrams, because these gave better results in simulations and site scores (``WA scores'') are a step from constrained to unconstrained analysis. However, McCune (1997) showed that noisy environmental variables (and all environmental measurements are noisy) destroy ``LC scores'' whereas ``WA scores'' were little affected. Therefore the \code{plot} function uses site scores (``WA scores'') as the default. This is consistent with the usage in statistics and other functions in \R (\code{\link[MASS]{lda}}, \code{\link{cancor}}). } \value{ The \code{plot} function returns invisibly a plotting structure which can be used by function \code{\link{identify.ordiplot}} to identify the points or other functions in the \code{\link{ordiplot}} family. } \note{Package \pkg{ade4} has function \code{\link[ade4]{cca}} which returns constrained correspondence analysis of the same class as the \pkg{vegan} function. If you have results of \pkg{ade4} in your working environment, \pkg{vegan} functions may try to handle them and fail with cryptic error messages. However, there is a simple utility function \code{ade2vegancca} which tries to translate \pkg{ade4} \code{cca} results to \pkg{vegan} \code{cca} results so that some \pkg{vegan} functions may work partially with \pkg{ade4} objects (with a warning).} \author{Jari Oksanen } \seealso{\code{\link{cca}}, \code{\link{rda}} and \code{\link{capscale}} for getting something to plot, \code{\link{ordiplot}} for an alternative plotting routine and more support functions, and \code{\link{text}}, \code{\link{points}} and \code{\link{arrows}} for the basic routines. } \examples{ data(dune) data(dune.env) mod <- cca(dune ~ A1 + Moisture + Management, dune.env) plot(mod, type="n") text(mod, dis="cn") points(mod, pch=21, col="red", bg="yellow", cex=1.2) text(mod, "species", col="blue", cex=0.8) ## Limited output of 'summary' head(summary(mod), tail=2) ## Read description of scaling in RDA in vegan: \dontrun{vegandocs("decision")}} \keyword{hplot} \keyword{aplot} vegan/man/permutest.betadisper.Rd0000644000176200001440000000651511625737155016610 0ustar liggesusers\name{permutest.betadisper} \alias{permutest.betadisper} \title{Permutation test of multivariate homogeneity of groups dispersions (variances)} \description{ Implements a permutation-based test of multivariate homogeneity of group dispersions (variances) for the results of a call to \code{\link{betadisper}}. } \usage{ \method{permutest}{betadisper}(x, pairwise = FALSE, control = permControl(nperm = 999), \dots) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{x}{an object of class \code{"betadisper"}, the result of a call to \code{betadisper}.} \item{pairwise}{logical; perform pairwise comparisons of group means?} \item{control}{a list of control values for the permutations to replace the default values returned by the function \code{\link{permControl}}} \item{\dots}{Arguments passed to other methods.} } \details{ To test if one or more groups is more variable than the others, ANOVA of the distances to group centroids can be performed and parametric theory used to interpret the significance of F. An alternative is to use a permutation test. \code{permutest.betadisper} permutes model residuals to generate a permutation distribution of F under the Null hypothesis of no difference in dispersion between groups. Pairwise comparisons of group mean dispersions can be performed by setting argument \code{pairwise} to \code{TRUE}. A classical t test is performed on the pairwise group dispersions. This is combined with a permutation test based on the t statistic calculated on pairwise group dispersions. An alternative to the classical comparison of group dispersions, is to calculate Tukey's Honest Significant Differences between groups, via \code{\link{TukeyHSD.betadisper}}. } \value{ \code{permutest.betadisper} returns a list of class \code{"permutest.betadisper"} with the following components: \item{tab}{the ANOVA table which is an object inheriting from class \code{"data.frame"}.} \item{pairwise}{a list with components \code{observed} and \code{permuted} containing the observed and permuted p-values for pairwise comparisons of group mean distances (dispersions or variances).} \item{groups}{character; the levels of the grouping factor.} \item{control}{a list, the result of a call to \code{\link{permControl}}.} } \references{ Anderson, M.J. (2006) Distance-based tests for homogeneity of multivariate dispersions. \emph{Biometrics} \strong{62(1)}, 245--253. Anderson, M.J., Ellingsen, K.E. & McArdle, B.H. (2006) Multivariate dispersion as a measure of beta diversity. \emph{Ecology Letters} \strong{9(6)}, 683--693. } \author{Gavin L. Simpson} \seealso{For the main fitting function see \code{\link{betadisper}}. For an alternative approach to determining which groups are more variable, see \code{\link{TukeyHSD.betadisper}}.} \examples{ data(varespec) ## Bray-Curtis distances between samples dis <- vegdist(varespec) ## First 16 sites grazed, remaining 8 sites ungrazed groups <- factor(c(rep(1,16), rep(2,8)), labels = c("grazed","ungrazed")) ## Calculate multivariate dispersions mod <- betadisper(dis, groups) mod ## Perform test anova(mod) ## Permutation test for F permutest(mod, pairwise = TRUE) ## Tukey's Honest Significant Differences (mod.HSD <- TukeyHSD(mod)) plot(mod.HSD) } \keyword{methods} \keyword{multivariate} vegan/man/permutations.Rd0000644000176200001440000001357711405774641015174 0ustar liggesusers\name{permutations} \alias{permutations} \title{Permutation tests in Vegan} \description{ Unless stated otherwise, vegan currently provides for two types of permutation test: \enumerate{ \item{Free permutation of \emph{DATA}, also known as randomisation, and} \item{Free permutation of \emph{DATA} within the levels of a factor variable.} } We use \emph{DATA} to mean either the observed data themselves or some function of the data, for example the residuals of an ordination model in the presence of covariables. The second type of permutation test above is available if the function providing the test accepts an argument \code{strata} or passes additional arguments (via \code{\dots}) to \code{\link{permuted.index}}. The Null hypothesis for these two types of permutation test assumes free exchangeability of \emph{DATA} (within the levels of \code{strata} if specified). Dependence between observations, such as that which arises due to spatial or temporal autocorrelation, or more-complicated experimental designs, such as split-plot designs, violates this fundamental assumption of the test and requires restricted permutation test designs. The next major version of Vegan will include infrastructure to handle these more complicated permutation designs. Again, unless otherwise stated in the help pages for specific functions, permutation tests in Vegan all follow the same format/structure: \enumerate{ \item{An appropriate test statistic is chosen. Which statistic is chosen should be described on the help pages for individual functions.} \item{The value of the test statistic is evaluate for the observed data and analysis/model and recorded. Denote this value \eqn{x_0}{x[0]}.} \item{The \emph{DATA} are randomly permuted according to one of the above two schemes, and the value of the test statistic for this permutation is evaluated and recorded.} \item{Step 3 is repeated a total of \eqn{n} times, where \eqn{n} is the number of permutations requested. Denote these values as \eqn{x_i}{x[i]}, where \eqn{i = 1, ..., n}{{i = 1, \ldots, n}.}} \item{The values of the test statistic for the \eqn{n} permutations of the \emph{DATA} are added to the value of the test statistic for the observed data. These \emph{n + 1} values represent the \emph{Null} or \emph{randomisation} distribution of the test statistic. The observed value for the test statistic is included in the Null distribution because under the Null hypothesis being tested, the observed value is just a typical value of the test statistic, inherently no different from the values obtained via permutation of \emph{DATA}.} \item{The number of times that a value of the test statistic in the Null distribution is equal to or greater than the value of the test statistic for the observed data is recorded. Note the point mentioned in step 5 above; the Null distribution includes the \strong{observed} value of the test statistic. Denote this count as \eqn{N}.} \item{The permutation p-value is computed as \deqn{p = \frac{N}{n + 1}}{N / (n + 1)}} } The above description illustrates why the default number of permutations specified in Vegan functions takes values of 199 or 999 for example. Once the observed value of the test statistic is added to this number of random permutations of \emph{DATA}, pretty p-values are achievable because \eqn{n + 1} becomes 200 or 1000, for example. The minimum achievable p-value is \deqn{p_{\mathrm{min}} = \frac{1}{n +1}}{p[min] = 1 / (n + 1)} A more common definition, in ecological circles, for \eqn{N} would be the number of \eqn{x_i}{x[i]} greater than or equal to \eqn{x_0}{x[0]}. The permutation p-value would then be defined as \deqn{p = \frac{N + 1}{n + 1}}{(N + 1) / (n + 1)} The + 1 in the numerator of the above equation represents the observed statistic \eqn{x_0}{x[0]}. The minimum p-value would then be defined as \deqn{p_{\mathrm{min}} = \frac{0 + 1}{n +1}}{p[min] = 0 + 1 / (n + 1)} However this definition discriminates between the observed statistic and the other \eqn{x_i}{x[i]}. Under the Null hypothesis there is no such distinction, hence we prefer the definintion used in the numbered steps above. One cannot simply increase the number of permutations (\eqn{n}) to achieve a potentially lower p-value unless the number of observations available permits such a number of permutations. This is unlikely to be a problem for all but the smallest data sets when free permutation (randomisation) is valid, but in designs where \code{strata} is specified and there are a low number of observations within each level of \code{strata}, there may not be as many actual permutations of the data as you might want. It is currently the responsibility of the user to determine the total number of possible permutations for their \emph{DATA}. No checks are made within Vegan functions to ensure a sensible number of permutations is chosen. Limits on the total number of permutations of \emph{DATA} are more severe in temporally or spatially ordered data or experimental designs with low replication. For example, a time series of \eqn{n = 100} observations has just 100 possible permutations \strong{including} the observed ordering. In situations where only a low number of permutations is possible due to the nature of \emph{DATA} or the experimental design, enumeration of all permutations becomes important and achievable computationally. Currently, Vegan does not include functions to perform complete enumeration of the set of possible permutations. The next major release of Vegan will include such functionality, however. } \seealso{ \code{\link{permutest}}, \code{\link{permuted.index}} } %\references{ %} \author{ Gavin Simpson } \keyword{multivariate} vegan/man/permatfull.Rd0000644000176200001440000003141511431214223014564 0ustar liggesusers\encoding{UTF-8} \name{permat} \alias{permatfull} \alias{permatswap} \alias{summary.permat} \alias{print.summary.permat} \alias{print.permat} \alias{plot.permat} \alias{lines.permat} \alias{as.ts.permat} \alias{as.mcmc.permat} \title{Matrix Permutation Algorithms for Presence-Absence and Count Data} \description{ Individual (for count data) or incidence (for presence-absence data) based null models can be generated for community level simulations. Options for preserving characteristics of the original matrix (rows/columns sums, matrix fill) and restricted permutations (based on strata) are discussed in the Details section.} \usage{ permatfull(m, fixedmar = "both", shuffle = "both", strata = NULL, mtype = "count", times = 99) permatswap(m, method = "quasiswap", fixedmar="both", shuffle = "both", strata = NULL, mtype = "count", times = 99, burnin = 0, thin = 1) \method{print}{permat}(x, digits = 3, ...) \method{summary}{permat}(object, ...) \method{print}{summary.permat}(x, digits = 2, ...) \method{plot}{permat}(x, type = "bray", ylab, xlab, col, lty, lowess = TRUE, plot = TRUE, text = TRUE, ...) \method{lines}{permat}(x, type = "bray", ...) \method{as.ts}{permat}(x, type = "bray", ...) \method{as.mcmc}{permat}(x) } \arguments{ \item{m}{A community data matrix with plots (samples) as rows and species (taxa) as columns.} \item{fixedmar}{character, stating which of the row/column sums should be preserved (\code{"none", "rows", "columns", "both"}).} \item{strata}{Numeric vector or factor with length same as \code{nrow(m)} for grouping rows within strata for restricted permutations. Unique values or levels are used.} \item{mtype}{Matrix data type, either \code{"count"} for count data, or \code{"prab"} for presence-absence type incidence data.} \item{times}{Number of permuted matrices.} \item{method}{Character for method used for the swap algorithm (\code{"swap"}, \code{"tswap"}, \code{"quasiswap"}, \code{"backtrack"}) as described for function \code{\link{commsimulator}}. If \code{mtype="count"} the \code{"quasiswap"}, \code{"swap"}, \code{"swsh"} and \code{"abuswap"} methods are available (see details).} \item{shuffle}{Character, indicating whether individuals (\code{"ind"}), samples (\code{"samp"}) or both (\code{"both"}) should be shuffled, see details.} \item{burnin}{Number of null communities discarded before proper analysis in sequential (\code{"swap", "tswap"}) methods.} \item{thin}{Number of discarded permuted matrices between two evaluations in sequential (\code{"swap", "tswap"}) methods.} \item{x, object}{Object of class \code{"permat"}} \item{digits}{Number of digits used for rounding.} \item{ylab, xlab, col, lty}{graphical parameters for the \code{plot} method.} \item{type}{Character, type of plot to be displayed: \code{"bray"} for Bray-Curtis dissimilarities, \code{"chisq"} for Chi-squared values.} \item{lowess, plot, text}{Logical arguments for the \code{plot} method, whether a locally weighted regression curve should be drawn, the plot should be drawn, and statistic values should be printed on the plot.} \item{\dots}{Other arguments passed to methods.} } \details{ The function \code{permatfull} is useful when matrix fill is allowed to vary, and matrix type is \code{count}. The \code{fixedmar} argument is used to set constraints for permutation. If \code{none} of the margins are fixed, cells are randomised within the matrix. If \code{rows} or \code{columns} are fixed, cells within rows or columns are randomised, respectively. If \code{both} margins are fixed, the \code{\link{r2dtable}} function is used that is based on Patefield's (1981) algorithm. For presence absence data, matrix fill should be necessarily fixed, and \code{permatfull} is a wrapper for the function \code{\link{commsimulator}}. The \code{r00, r0, c0, quasiswap} algorithms of \code{\link{commsimulator}} are used for \code{"none", "rows", "columns", "both"} values of the \code{fixedmar} argument, respectively The \code{shuffle} argument only have effect if the \code{mtype = "count"} and \code{permatfull} function is used with \code{"none", "rows", "columns"} values of \code{fixedmar}. All other cases for count data are individual based randomisations. The \code{"samp"} and \code{"both"} options result fixed matrix fill. The \code{"both"} option means that individuals are shuffled among non zero cells ensuring that there are no cell with zeros as a result, then cell (zero and new valued cells) are shuffled. The function \code{permatswap} is useful when with matrix fill (i.e. the proportion of empty cells) and row/columns sums should be kept constant. \code{permatswap} uses different kinds of swap algorithms, and row and columns sums are fixed in all cases. For presence-absence data, the \code{swap} and \code{tswap} methods of \code{\link{commsimulator}} can be used. For count data, a special swap algorithm ('swapcount') is implemented that results in permuted matrices with fixed marginals and matrix fill at the same time. The 'quasiswapcount' algorithm (\code{method="quasiswap"} and \code{mtype="count"}) uses the same trick as Carsten Dormann's \code{\link[bipartite]{swap.web}} function in the package \pkg{bipartite}. First, a random matrix is generated by the \code{\link{r2dtable}} function retaining row and column sums. Then the original matrix fill is reconstructed by sequential steps to increase or decrease matrix fill in the random matrix. These steps are based on swapping 2x2 submatrices (see 'swapcount' algorithm for details) to maintain row and column totals. This algorithm generates independent matrices in each step, so \code{burnin} and \code{thin} arguments are not considered. This is the default method, because this is not sequential (as \code{swapcount} is) so independence of subsequent matrices does not have to be checked. The \code{swapcount} algorithm (\code{method="swap"} and \code{mtype="count"}) tries to find 2x2 submatrices (identified by 2 random row and 2 random column indices), that can be swapped in order to leave column and row totals and fill unchanged. First, the algorithm finds the largest value in the submatrix that can be swapped (\eqn{d}) and whether in diagonal or antidiagonal way. Submatrices that contain values larger than zero in either diagonal or antidiagonal position can be swapped. Swap means that the values in diagonal or antidiagonal positions are decreased by \eqn{d}, while remaining cells are increased by \eqn{d}. A swap is made only if fill doesn't change. This algorithm is sequential, subsequent matrices are not independent, because swaps modify little if the matrix is large. In these cases many burnin steps and thinning is needed to get independent random matrices. Although this algorithm is implemented in C, large burnin and thin values can slow it down considerably. WARNING: according to simulations, this algorithm seems to be biased and non random, thus its use should be avoided! The algorithm \code{"swsh"} in the function \code{permatswap} is a hybrid algorithm. First, it makes binary quasiswaps to keep row and column incidences constant, then non-zero values are modified according to the \code{shuffle} argument (only \code{"samp"} and \code{"both"} are available in this case, because it is applied only on non-zero values). The algorithm \code{"abuswap"} produces two kinds of null models (based on \code{fixedmar="columns"} or \code{fixedmar="rows"}) as described in Hardy (2008; randomization scheme 2x and 3x, respectively). These preserve column and row occurrences, and column or row sums at the same time. Constraints on row/column sums, matrix fill, total sum and sums within strata can be checked by the \code{summary} method. \code{plot} method is for visually testing the randomness of the permuted matrices, especially for the sequential swap algorithms. If there are any tendency in the graph, higher \code{burnin} and \code{thin} values can help for sequential methods. New lines can be added to existing plot with the \code{lines} method. Unrestricted and restricted permutations: if \code{strata} is \code{NULL}, functions perform unrestricted permutations. Otherwise, it is used for restricted permutations. Each strata should contain at least 2 rows in order to perform randomization (in case of low row numbers, swap algorithms can be rather slow). If the design is not well balanced (i.e. same number of observations within each stratum), permuted matrices may be biased because same constraints are forced on submatrices of different dimensions. This often means, that the number of potential permutations will decrease with their dimensions. So the more constraints we put, the less randomness can be expected. The \code{plot} method is useful for graphically testing for trend and independence of permuted matrices. This is especially important when using sequential algorithms (\code{"swap", "tswap", "abuswap"}). The \code{as.ts} method can be used to extract Bray-Curtis dissimilarities or Chi-squared values as time series. This can further used in testing independence (see Examples). The method \code{as.mcmc} is useful for accessing diagnostic tools available in the \pkg{coda} package. } \value{ Functions \code{permatfull} and \code{permatswap} return an object of class \code{"permat"} containing the the function call (\code{call}), the original data matrix used for permutations (\code{orig}) and a list of permuted matrices with length \code{times} (\code{perm}). The \code{summary} method returns various statistics as a list (including mean Bray-Curtis dissimilarities calculated pairwise among original and permuted matrices, Chi-square statistics, and check results of the constraints; see Examples). Note that when \code{strata} is used in the original call, summary calculation may take longer. The \code{plot} creates a plot as a side effect. The \code{as.ts} method returns an object of class \code{"ts"}. } \references{ Original references for presence-absence algorithms are given on help page of \code{\link{commsimulator}}. Hardy, O. J. (2008) Testing the spatial phylogenetic structure of local communities: statistical performances of different null models and test statistics on a locally neutral community. Journal of Ecology 96, 914--926. Patefield, W. M. (1981) Algorithm AS159. An efficient method of generating r x c tables with given row and column totals. Applied Statistics 30, 91--97. } \author{\enc{Péter Sólymos}{Peter Solymos}, \email{solymos@ualberta.ca} and Jari Oksanen} \seealso{ For other functions to permute matrices: \code{\link{commsimulator}}, \code{\link{r2dtable}}, \code{\link{sample}}, \code{\link[bipartite]{swap.web}}. For the use of these permutation algorithms: \code{\link{oecosimu}}, \code{\link{adipart}}, \code{\link{hiersimu}}. For time-series diagnostics: \code{\link{Box.test}}, \code{\link{lag.plot}}, \code{\link{tsdiag}}, \code{\link{ar}}, \code{\link{arima}} } \examples{ ## A simple artificial community data matrix. m <- matrix(c( 1,3,2,0,3,1, 0,2,1,0,2,1, 0,0,1,2,0,3, 0,0,0,1,4,3 ), 4, 6, byrow=TRUE) ## Using the quasiswap algorithm to create a ## list of permuted matrices, where ## row/columns sums and matrix fill are preserved: x1 <- permatswap(m, "quasiswap") summary(x1) ## Unrestricted permutation retaining ## row/columns sums but not matrix fill: x2 <- permatfull(m) summary(x2) ## Unrestricted permutation of presence-absence type ## not retaining row/columns sums: x3 <- permatfull(m, "none", mtype="prab") x3$orig ## note: original matrix is binarized! summary(x3) ## Restricted permutation, ## check sums within strata: x4 <- permatfull(m, strata=c(1,1,2,2)) summary(x4) ## NOTE: 'times' argument usually needs to be >= 99 ## here much lower value is used for demonstration ## Not sequential algorithm data(BCI) a <- permatswap(BCI, "quasiswap", times=19) ## Sequential algorithm b <- permatswap(BCI, "abuswap", fixedmar="col", burnin=0, thin=100, times=19) opar <- par(mfrow=c(2,2)) plot(a, main="Not sequential") plot(b, main="Sequential") plot(a, "chisq") plot(b, "chisq") par(opar) ## Extract Bray-Curtis dissimilarities ## as time series bc <- as.ts(b) ## Lag plot lag.plot(bc) ## First order autoregressive model mar <- arima(bc, c(1,0,0)) mar ## Ljung-Box test of residuals Box.test(mar$residuals) ## Graphical diagnostics tsdiag(mar) } \keyword{multivariate} \keyword{datagen} vegan/man/pcnm.Rd0000644000176200001440000001167711467215117013372 0ustar liggesusers\name{pcnm} \alias{pcnm} \alias{scores.pcnm} \title{ Principal Coordinates of Neighbourhood Matrix } \description{ This function computed classical PCNM by the principal coordinate analysis of a truncated distance matrix. These are commonly used to transform (spatial) distances to rectangular data that suitable for constrained ordination or regression. } \usage{ pcnm(dis, threshold, w, dist.ret = FALSE) } \arguments{ \item{dis}{ A distance matrix. } \item{threshold}{ A threshold value or truncation distance. If missing, minimum distance giving connected network will be used. This is found as the longest distance in the minimum spanning tree of \code{dis}. } \item{w}{Prior weights for rows.} \item{dist.ret}{Return the distances used to calculate the PCNMs.} } \details{ Principal Coordinates of Neighbourhood Matrix (PCNM) map distances between rows onto rectangular matrix on rows using a truncation threshold for long distances (Borcard & Legendre 2002). If original distances were Euclidean distances in two dimensions (like normal spatial distances), they could be mapped onto two dimensions if there is no truncation of distances. Because of truncation, there will be a higher number of principal coordinates. The selection of truncation distance has a huge influence on the PCNM vectors. The default is to use the longest distance to keep data connected. The distances above truncation threshold are given an arbitrary value of 4 times threshold. For regular data, the first PCNM vectorsshow a wide scale variation and later PCNM vectors show smaller scale variation (Borcard & Legendre 2002), but for irregular data the intepretation is not as clear. The PCNM functions are used to express distances in rectangular form that is similar to normal explanatory variables used in, e.g., constrained ordination (\code{\link{rda}}, \code{\link{cca}} and \code{\link{capscale}}) or univariate regression (\code{\link{lm}}) together with environmental variables (row weights should be supplied with \code{\link{cca}}; see Examples). This is regarded as a more powerful method than forcing rectangular environmental data into distances and using them in partial mantel analysis (\code{\link{mantel.partial}}) together with geographic distances (Legendre et al. 2008, but see Tuomisto & Ruokolainen 2008). The function is based on \code{pcnm} function in Dray's unreleased \pkg{spacemakeR} package. The differences are that the current function usesr \code{\link{spantree}} as an internal support function. The current function also can use prior weights for rows by using weighted metric scaling of \code{\link{wcmdscale}}. The use of row weights allows finding orthonormal PCNMs also for correspondence analysis (e.g., \code{\link{cca}}). } \value{ A list of the following elements: \item{values }{Eigenvalues obtained by the principal coordinates analysis.} \item{vectors }{Eigenvectors obtained by the principal coordinates analysis. They are scaled to unit norm. The vectors can be extracted with \code{scores} function. The default is to return all PCNM vectors, but argument \code{choices} selects the given vectors.} \item{threshold}{Truncation distance.} \item{dist}{The distance matrix where values above \code{threshold} are replaced with arbitrary value of four times the threshold. String \code{"pcnm"} is added to the \code{method} attribute, and new attribute \code{threshold} is added to the distances. This is returned only when \code{dist.ret = TRUE}. } } \references{ Borcard D. and Legendre P. (2002) All-scale spatial analysis of ecological data by means of principal coordinates of neighbour matrices. \emph{Ecological Modelling} \bold{153}, 51--68. Legendre, P., Bordard, D and Peres-Neto, P. (2008) Analyzing or explaining beta diversity? Comment. \emph{Ecology} \bold{89}, 3238--3244. Tuomisto, H. & Ruokolainen, K. (2008) Analyzing or explaining beta diversity? A reply. \emph{Ecology} \bold{89}, 3244--3256. } \author{Jari Oksanen, based on the code of Stephane Dray.} \seealso{ \code{\link[vegan]{spantree}}. } \examples{ ## Example from Borcard & Legendre (2002) data(mite.xy) pcnm1 <- pcnm(dist(mite.xy)) op <- par(mfrow=c(1,3)) ## Map of PCNMs in the sample plot ordisurf(mite.xy, scores(pcnm1, choi=1), bubble = 4, main = "PCNM 1") ordisurf(mite.xy, scores(pcnm1, choi=2), bubble = 4, main = "PCNM 2") ordisurf(mite.xy, scores(pcnm1, choi=3), bubble = 4, main = "PCNM 3") par(op) ## Plot first PCNMs against each other ordisplom(pcnm1, choices=1:4) ## Weighted PCNM for CCA data(mite) rs <- rowSums(mite)/sum(mite) pcnmw <- pcnm(dist(mite.xy), w = rs) ord <- cca(mite ~ scores(pcnmw)) ## Multiscale ordination: residual variance should have no distance ## trend msoplot(mso(ord, mite.xy)) } \keyword{ spatial } \keyword{ multivariate } vegan/man/ordixyplot.Rd0000644000176200001440000001407611256342562014647 0ustar liggesusers\name{ordixyplot} \alias{ordixyplot} \alias{ordisplom} \alias{ordicloud} \alias{panel.ordi} \alias{panel.ordiarrows} \alias{panel.ordi3d} \alias{prepanel.ordi3d} \alias{ordilattice.getEnvfit} \title{ Trellis (Lattice) Plots for Ordination } \description{ Functions \code{ordicloud}, \code{ordisplom} and \code{ordixyplot} provide an interface to plot ordination results using Trellis functions \code{\link[lattice]{cloud}}, \code{\link[lattice]{splom}} and \code{\link[lattice]{xyplot}} in package \pkg{lattice}. } \usage{ ordixyplot(x, data = NULL, formula, display = "sites", choices = 1:3, panel = "panel.ordi", aspect = "iso", envfit, type = c("p", "biplot"), ...) ordisplom(x, data=NULL, formula = NULL, display = "sites", choices = 1:3, panel = "panel.ordi", type = "p", ...) ordicloud(x, data = NULL, formula, display = "sites", choices = 1:3, panel = "panel.ordi3d", prepanel = "prepanel.ordi3d", ...) } \arguments{ \item{x}{ An ordination result that \code{\link{scores}} knows: any ordination result in \pkg{vegan} and many others. } \item{data}{ Optional data to amend ordination results. The ordination results are found from \code{x}, but you may give here data for other variables needed in plots. Typically these are environmental data.} \item{formula}{ Formula to define the plots. A default formula will be used if this is omitted. The ordination axes must be called by the same names as in the ordination results (and these names vary among methods). In \code{ordisplom}, special character \code{.} refers to the ordination result. } \item{display}{ The kind of scores: an argument passed to \code{\link{scores}}. } \item{choices}{ The axes selected: an argument passed to \code{\link{scores}}. } \item{panel, prepanel}{ The names of the panel and prepanel functions. } \item{aspect}{The aspect of the plot (passed to the \pkg{lattice} function).} \item{envfit}{Result of \code{\link{envfit}} function displayed in \code{ordixyplot}. Please note that this needs same \code{choices} as \code{ordixyplot}.} \item{type}{The type of plot. This knows the same alternatives as \code{\link[lattice]{panel.xyplot}}. In addition \code{ordixyplot} has alternatives \code{"biplot"} and \code{"arrows"}. The first displays fitted vectors and factor centroids of \code{envfit}, or in constrained ordination, the biplot arrows and factor centroids if \code{envfit} is not given. The second (\code{type = "arrows"}) is a trellis variant of \code{\link{ordiarrows}} and draws arrows by \code{groups}. The line parameters are controlled by \code{\link[lattice]{trellis.par.set}} for \code{superpose.line}, and the user can set \code{length}, \code{angle} and \code{ends} parameters of \code{\link[lattice]{panel.arrows}}.} \item{\dots}{ Arguments passed to \code{\link{scores}} methods or \pkg{lattice} functions.} } \details{ The functions provide an interface to the corresponding \pkg{lattice} functions. All graphical parameters are passed to the \pkg{lattice} function so that these graphs are extremely configurable. See \code{\link[lattice]{Lattice}} and \code{\link[lattice]{xyplot}}, \code{\link[lattice]{splom}} and \code{\link[lattice]{cloud}} for details, usage and possibilities. The argument \code{x} must always be an ordination result. The scores are extracted with \pkg{vegan} function \code{\link{scores}} so that these functions work with all \pkg{vegan} ordinations and many others. The \code{formula} is used to define the models. All functions have simple default formulae which are used if \code{formula} is missing. If formula is omitted in \code{ordisplom} it produces a pairs plot of ordination axes and variables in \code{data}. If \code{formula} is given, ordination results must be referred to as \code{.} and other variables by their names. In other functions, the formula must use the names of ordination scores and names of \code{data}. The ordination scores are found from \code{x}, and \code{data} is optional. The \code{data} should contain other variables than ordination scores to be used in plots. Typically, they are environmental variables (typically factors) to define panels or plot symbols. The proper work is done by the panel function. The layout can be changed by defining own panel functions. See \code{\link[lattice]{panel.xyplot}}, \code{\link[lattice]{panel.splom}} and \code{\link[lattice]{panel.cloud}} for details and survey of possibilities. Ordination graphics should always be isometric: same scale should be used in all axes. This is controlled (and can be changed) with argument \code{aspect} in \code{ordixyplot}. In \code{ordicloud} the isometric scaling is defined in \code{panel} and \code{prepanel} functions. You must replace these functions if you want to have non-isometric scaling of graphs. You cannot select isometric scaling in \code{ordisplom}. } \value{ The function return \code{\link[lattice]{Lattice}} objects of class \code{"trellis"}. } \author{Jari Oksanen } \seealso{ \code{\link[lattice]{Lattice}}, \code{\link[lattice]{xyplot}}, \code{\link[lattice]{splom}}, \code{\link[lattice]{cloud}}, \code{\link[lattice]{panel.splom}}, \code{\link[lattice]{panel.cloud}} } \examples{ data(dune) data(dune.env) ord <- cca(dune) ## Pairs plots ordisplom(ord) ordisplom(ord, data=dune.env, choices=1:2) ordisplom(ord, data=dune.env, form = ~ . | Management, groups=Manure) ## Scatter plot ordixyplot(ord, data=dune.env, form = CA1 ~ CA2 | Management, groups=Manure) ## Choose a different scaling ordixyplot(ord, scaling = 3) ## ... Slices of third axis ordixyplot(ord, form = CA1 ~ CA2 | equal.count(CA3, 4), type = c("g","p")) ## Display environemntal variables ordixyplot(ord, envfit = envfit(ord ~ Management + A1, dune.env, choices=1:3)) ## 3D Scatter plots ordicloud(ord, form = CA2 ~ CA3*CA1, groups = Manure, data = dune.env) ordicloud(ord, form = CA2 ~ CA3*CA1 | Management, groups = Manure, data = dune.env, auto.key = TRUE, type = c("p","h")) } \keyword{ hplot } vegan/man/orditorp.Rd0000644000176200001440000000704412101431651014255 0ustar liggesusers\name{orditorp} \alias{orditorp} \title{ Add Text or Points to Ordination Plots } \description{ The function adds \code{\link{text}} or \code{\link{points}} to ordination plots. Text will be used if this can be done without overwriting other text labels, and points will be used otherwise. The function can help in reducing clutter in ordination graphics, but manual editing may still be necessary. } \usage{ orditorp(x, display, labels, choices = c(1, 2), priority, select, cex = 0.7, pcex, col = par("col"), pcol, pch = par("pch"), air = 1, ...) } \arguments{ \item{x}{A result object from ordination or an \code{\link{ordiplot}} result. } \item{display}{Items to be displayed in the plot. Only one alternative is allowed. Typically this is \code{"sites"} or \code{"species"}. } \item{labels}{ Optional text used for labels. Row names will be used if this is missing. } \item{choices}{ Axes shown.} \item{priority}{ Text will be used for items with higher priority if labels overlap. This should be vector of the same length as the number of items plotted.} \item{select}{Items to be displayed. This can either be a logical vector which is \code{TRUE} for displayed items or a vector of indices of displayed items. If a logical vector is used, it must have the same length as the scores plotted.} \item{cex, pcex}{Text and point sizes, see \code{\link{plot.default}}..} \item{col, pcol}{Text and point colours, see \code{\link{plot.default}}.} \item{pch}{Plotting character, see \code{\link{points}}.} \item{air}{Amount of empty space between text labels. Values <1 allow overlapping text.} \item{\dots}{ Other arguments to \code{\link{scores}} (and its various methods), \code{\link{text}} and \code{\link{points}}.} } \details{ Function \code{orditorp} will add either text or points to an existing plot. The items with high \code{priority} will be added first and \code{\link{text}} will be used if this can be done without overwriting previous labels,and \code{\link{points}} will be used otherwise. If \code{priority} is missing, labels will be added from the outskirts to the centre. Function \code{orditorp} can be used with most ordination results, or plotting results from \code{\link{ordiplot}} or ordination plot functions (\code{\link{plot.cca}}, \code{\link{plot.decorana}}, \code{\link{plot.metaMDS}}). Arguments can be passed to the relevant \code{\link{scores}} method for the ordination object (\code{x}) being drawn. See the relevant \code{\link{scores}} help page for arguments that can be used. } \value{ The function returns invisibly a logical vector where \code{TRUE} means that item was labelled with text and \code{FALSE} means that it was marked with a point. The returned vector can be used as the \code{select} argument in ordination \code{text} and \code{points} functions. } \author{ Jari Oksanen } \examples{ ## A cluttered ordination plot : data(BCI) mod <- cca(BCI) plot(mod, dis="sp", type="t") # Now with orditorp and abbreviated species names cnam <- make.cepnames(names(BCI)) plot(mod, dis="sp", type="n") stems <- colSums(BCI) orditorp(mod, "sp", label = cnam, priority=stems, pch="+", pcol="grey") ## show select in action set.seed(1) take <- sample(ncol(BCI), 50) plot(mod, dis="sp", type="n") stems <- colSums(BCI) orditorp(mod, "sp", label = cnam, priority=stems, select = take, pch="+", pcol="grey") \dontshow{ ## example(orditorp) should not set random seed in the user session rm(.Random.seed) } } \keyword{ aplot } \keyword{ hplot } vegan/man/orditkplot.Rd0000644000176200001440000001745511256342562014631 0ustar liggesusers\name{orditkplot} \alias{orditkplot} \alias{plot.orditkplot} \alias{scores.orditkplot} \alias{points.orditkplot} \alias{text.orditkplot} \title{ Ordination Plot with Movable Labels } \description{ Function \code{orditkplot} produces an editable ordination plot with points and labels. The labels can be moved with mouse, and the edited plot can be saved as an encapsulated postscript file or exported via \R \code{plot} function to other graphical formats, or saved in the \R session for further processing. } \usage{ orditkplot(x, display = "species", choices = 1:2, width, xlim, ylim, tcex = 0.8, tcol, pch = 1, pcol, pbg, pcex = 0.7, labels, ...) \method{plot}{orditkplot}(x, ...) \method{points}{orditkplot}(x, ...) \method{text}{orditkplot}(x, ...) \method{scores}{orditkplot}(x, display, ...) } \arguments{ \item{x}{An ordination result or any other object that \code{\link{scores}} can handle, or for the \code{plot} function the object dumped from the interactive \code{orditkplot} session.} \item{display}{Type of \code{\link{scores}} displayed. For ordination scores this typically is either \code{"species"} or \code{"sites"}, and for \code{orditkplot} result it is either \code{"points"} or \code{"labels"}.} \item{choices}{Axes displayed.} \item{width}{Width of the plot in inches; defaults to the current width of the graphical device. } \item{xlim, ylim}{x and y limits for plots: points outside these limits will be completely removed.} \item{tcex}{Character expansion for text labels.} \item{tcol}{Colour of text labels.} \item{pch, pcol, pbg}{Point type and outline and fill colours. Defaults \code{pcol="black"} and \code{pbg="transparent"}. Argument \code{pbg} has an effect only in filled plotting characters \code{pch = 21} to \code{25}. } \item{pcex}{Expansion factor for point size.} \item{labels}{Labels used instead of row names.} \item{\dots}{Other arguments passed to the function. These can be graphical parameters (see \code{\link{par}}) used in the plot, or extra arguments to \code{\link{scores}}. These arguments are ignored in \code{plot}, but honoured in \code{text} and \code{points}. } } \details{ Function \code{orditkplot} uses \pkg{tcltk} package to draw Tcl/Tk based ordination graphics with points and labels. The function opens an editable canvas with fixed points, but the labels can be dragged with mouse to better positions or edited. In addition, it is possible to zoom to a part of the graph. The function knows the following mouse operations: \itemize{ \item \strong{Left mouse button} can be used to move labels to better positions. A line will connect a label to the corresponding point. \item \strong{Double clicking left mouse button} opens a window where the label can be edited. After editing the label, hit the Return key. \item \strong{Right mouse button} (or alternatively, Shift-Mouse button with one-button mouse) can be used for zooming to a part of the graph. Keeping the mouse button down and dragging will draw a box of the zoomed area, and after releasing the button, a new plot window will be created (this is still preliminary: all arguments are not passed to the new plot). } In addition there are buttons for the following tasks: \strong{Copy to EPS} copies the current plot to an encapsulated postscript (eps) file using standard Tcl/Tk utilities. The faithfulness of this copy is system dependent. Button \strong{Export plot} uses \code{plot.orditkplot} function to redraw the plot into graphical file formats. Depending on the system, the following graphical formats may be available: eps, pdf, png, jpeg or bmp. The file type is deduced from the file suffix or the selection of the file type in the dialogue box. Alternatively, the same dialogue can be used to save the plot to an editable \code{\link{xfig}} file. Button \strong{Dump to R} writes the edited coordinates of labels and points to the \R session for further processing, and the \code{plot.orditkplot} function can be used to display the results. For faithful replication of the plot, the graph must have similar dimensions as the \code{orditkplot} canvas had originally. The \code{plot} function cannot be configured, but it uses the same settings as the original Tcl/Tk plot. However, \code{points} and \code{text} functions are fully configurable, and unaware of the original Tcl/Tk plot settings (probably you must set \code{cex} at least to get a decent plot). Finally, button \strong{Dismiss} closes the window. The produced plot will have equal aspect ratio. The width of the horizontal axis is fixed, but vertical axes will be scaled to needed height, and you can use scrollbar to move vertically if the whole canvas does not fit the window. If you use dumped labels in ordinary \R plots, your plot must have the same dimensions as the \code{orditkplot} canvas to have identical location of the labels. The function only displays one set of scores. However, you can use \code{\link{ordipointlabel}} to produce a result object that has different points and text types for several sets of scores and this can further edited with \code{orditkplot}. For a good starting solution you need to scale the \code{\link{ordipointlabel}} result so that the points span over the whole horizontal axis. The plot is a Tcl/Tk canvas, but the function tries to replicate standard graphical device of the platform, and it honours several graphical parameters (see \code{\link{par}}). Many of the graphical parameters can be given on the command line, and they will be passed to the function without influencing other graphical devices in \R. At the moment, the following graphical parameters are honoured: \code{pch} \code{bg}, \code{cex}, \code{cex.axis}, \code{cex.lab}, \code{col} (for labels), \code{col.axis}, \code{col.lab}, \code{family} (for font faces), \code{fg}, \code{font}, \code{font.axis}, \code{font.lab}, \code{lheight}, \code{lwd} (for the box), \code{mar}, \code{mex}, \code{mgp}, \code{ps}, \code{tcl}. These can be set with \code{\link{par}}, and they also will influence other plots similarly. The \code{\link[tcltk]{tkcanvas}} text cannot be rotated, and therefore vertical axis is not labelled, and \code{las} \code{\link{par}}ameter will not be honoured in the Tcl/Tk plot, but it will be honoured in the exported \R plots and in \code{plot.orditkplot}. } \value{ Function returns nothing useful directly, but you can save the edited graph to a file or dump the edited positions to an \R session for further processing and plotting. } \author{ Jari Oksanen } \note{ You need \pkg{tcltk} package and \R must have been configured with \code{\link{capabilities}} for \code{tcltk} when building the binary. Depending on your OS, you may need to start X11 and set the display before loading \pkg{tcltk} and starting the function (for instance, with \code{Sys.setenv("DISPLAY"=":0")}). See \code{\link[tcltk]{tcltk-package}}. } \seealso{ Function \code{\link{ordipointlabel}} is an automatic procedure with similar goals of avoiding overplotting. See \code{\link{ordiplot}}, \code{\link{plot.cca}}, \code{\link{ordirgl}} and \code{\link{orditorp}} for alternative ordination plots, and \code{\link{scores}} for extracting ordination scores. } \examples{ ## The example needs user interaction and is not executed directly. ## It should work when pasted to the window. \dontrun{ data(varespec) ord <- cca(varespec) ## Do something with the graph and end by clicking "Dismiss" orditkplot(ord, mar = c(4,4,1,1)+.1, font=3) ## Use ordipointlabel to produce a plot that has both species and site ## scores in different colors and plotting symbols pl <- ordipointlabel(ord) orditkplot(pl) } } \keyword{ iplot } \keyword{ dynamic } vegan/man/ordisurf.Rd0000644000176200001440000002402512031516374014256 0ustar liggesusers\name{ordisurf} \alias{ordisurf} \alias{ordisurf.default} \alias{ordisurf.formula} \alias{calibrate.ordisurf} \alias{plot.ordisurf} \title{ Fit and Plot Smooth Surfaces of Variables on Ordination. } \description{ Function \code{ordisurf} fits a smooth surface for given variable and plots the result on ordination diagram. } \usage{ \method{ordisurf}{default}(x, y, choices=c(1, 2), knots=10, family="gaussian", col="red", thinplate = TRUE, add = FALSE, display = "sites", w = weights(x), main, nlevels = 10, levels, labcex = 0.6, bubble = FALSE, cex = 1, select = FALSE, method = "GCV.Cp", gamma = 1, plot = TRUE, ...) \method{ordisurf}{formula}(formula, data, ...) \method{calibrate}{ordisurf}(object, newdata, ...) \method{plot}{ordisurf}(x, what = c("contour","persp","gam"), add = FALSE, bubble = FALSE, col = "red", cex = 1, nlevels = 10, levels, labcex = 0.6, \dots) } \arguments{ \item{x}{For \code{ordisurf} an ordination configuration, either a matrix or a result known by \code{\link{scores}}. For \code{plot.ordisurf} and object of class \code{"ordisurf"} as returned by \code{ordisurf}.} \item{y}{ Variable to be plotted. } \item{choices}{Ordination axes. } \item{knots}{Number of initial knots in \code{\link[mgcv]{gam}} (one more than degrees of freedom). If \code{knots = 0} or \code{knots = 1} the function will fit a linear trend surface, and if \code{knots = 2} the function will fit a quadratic trend surface instead of a smooth surface. } \item{family}{ Error distribution in \code{\link[mgcv]{gam}}. } \item{col}{ Colour of contours. } \item{thinplate}{Use thinplate splines in \code{\link[mgcv]{gam}}.} \item{add}{Add contours on an existing diagram or draw a new plot. } \item{display}{Type of scores known by \code{\link{scores}}: typically "sites" for ordinary site scores or "lc" for linear combination scores.} \item{w}{Prior weights on the data. Concerns mainly \code{\link{cca}} and \code{\link{decorana}} results which have nonconstant weights.} \item{main}{The main title for the plot, or as default the name of plotted variable in a new plot.} \item{nlevels, levels}{Either a vector of \code{levels} for which contours are drawn, or suggested number of contours in \code{nlevels} if \code{levels} are not supplied.} \item{labcex}{Label size in contours. Setting this zero will suppress labels.} \item{bubble}{Use \dQuote{bubble plot} for points, or vary the point diameter by the value of the plotted variable. If \code{bubble} is numeric, its value is used for the maximum symbol size (as in \code{cex}), or if \code{bubble = TRUE}, the value of \code{cex} gives the maximum. The minimum size will always be \code{cex = 0.4}. The option only has an effect if \code{add = FALSE}.} \item{cex}{Character expansion of plotting symbols.} \item{select}{Logical; specify \code{\link[mgcv]{gam}} argument \code{"select"}. If this is \code{TRUE} then \code{\link[mgcv]{gam}} can add an extra penalty to each term so that it can be penalized to zero. This means that the smoothing parameter estimation that is part of fitting can completely remove terms from the model. If the corresponding smoothing parameter is estimated as zero then the extra penalty has no effect.} \item{method}{character; the smoothing parameter estimation method. Options allowed are: \code{"GCV.Cp"} uses GCV for models with unknown scale parameter and Mallows' Cp/UBRE/AIC for models with known scale; \code{"GACV.Cp"} as for \code{"GCV.Cp"} but uses GACV (Generalised Approximate CV) instead of GCV; \code{"REML"} and \code{"ML"} use restricted maximum likelihood or maximum likelihood estimation for both known and unknown scale; and \code{"P-REML"} and \code{"P-ML"} use REML or ML estimation but use a Pearson estimate of the scale.} \item{gamma}{Multiplier to inflate model degrees of freedom in GCV or UBRE/AIC score by. This effectively places an extra penalty on complex models. An oft used value if \code{gamma = 1.4}.} \item{plot}{logical; should any plotting be done by \code{ordisurf}? Useful if all you want is the fitted response surface model.} \item{formula, data}{Alternative definition of the fitted model as \code{x ~ y}, or left-hand side is the ordination \code{x} and right-hand side the single fitted continuous variable \code{y}. The variable \code{y} must be in the working environment or in the data frame or environment given by \code{data}. All other arguments of are passed to the default method.} \item{object}{An \code{ordisurf} result object.} \item{newdata}{Coordinates in two-dimensional ordination for new points.} \item{what}{character; what type of plot to produce. \code{"contour"} produces a contour plot of the response surface, see \code{\link{contour}} for details. \code{"persp"} produces a perspective plot of the same, see \code{\link{persp}} for details. \code{"gam"} plots the fitted GAM model, an object that inherits from class \code{"gam"} returned by \code{ordisurf}, see \code{\link[mgcv]{plot.gam}}.} \item{\dots}{Other parameters passed to \code{\link[mgcv]{gam}}, or to the graphical functions. See Note below for exceptions.} } \details{ Function \code{ordisurf} fits a smooth surface using thinplate splines (Wood 2003) in \code{\link[mgcv]{gam}}, and uses \code{\link[mgcv]{predict.gam}} to find fitted values in a regular grid. The smooth surface can be fitted with an extra penalty that allows the entire smoother to be penalized back to 0 degrees of freedom, effectively removing the term from the model (see Marra & Wood, 2011). The addition of this extra penalty is invoked by setting argument \code{select} to \code{TRUE}. The function plots the fitted contours with convex hull of data points either over an existing ordination diagram or draws a new plot. If \code{select = TRUE} and the smooth is effectively penalised out of the model, no contours will be plotted. \code{\link[mgcv]{gam}} determines the degree of smoothness for the fitted response surface during model fitting. Argument \code{method} controls how \code{\link[mgcv]{gam}} performs this smoothness selection. See \code{\link[mgcv]{gam}} for details of the available options. Using \code{"REML"} or \code{"ML"} yields p-values for smooths with the best coverage properties if such things matter to you. The function uses \code{\link{scores}} to extract ordination scores, and \code{x} can be any result object known by that function. User can supply a vector of prior weights \code{w}. If the ordination object has weights, these will be used. In practise this means that the row totals are used as weights with \code{\link{cca}} or \code{\link{decorana}} results. If you do not like this, but want to give equal weights to all sites, you should set \code{w = NULL}. The behaviour is consistent with \code{\link{envfit}}. For complete accordance with constrained \code{\link{cca}}, you should set \code{display = "lc"} (and possibly \code{scaling = 2}). Function \code{calibrate} returns the fitted values of the response variable. The \code{newdata} must be coordinates of points for which the fitted values are desired. The function is based on \code{\link[mgcv]{predict.gam}} and will pass extra arguments to that function. } \value{ Function is usually called for its side effect of drawing the contour plot. The function returns the result object of class \code{"ordisurf"} that inherits from \code{\link[mgcv]{gam}} used internally to fit the surface, but adds an item \code{grid} that contains the data for the grid surface. The item \code{grid} has elements \code{x} and \code{y} which are vectors of axis coordinates, and element \code{z} that is a matrix of fitted values for \code{\link{contour}}. The values outside the convex hull of observed points are \code{NA} in \code{z}. The \code{\link[mgcv]{gam}} component of the result can be used for further analysis like predicting new values (see \code{\link[mgcv]{predict.gam}}). } \author{ Dave Roberts, Jari Oksanen and Gavin L. Simpson } \note{ The default is to use thinplate splines. These make sense in ordination as they have equal smoothing in all directions and are rotation invariant. Graphical arguments supplied to \code{plot.ordisurf} are passed on to the underlying plotting functions, \code{contour}, \code{persp}, and \code{\link[mgcv]{plot.gam}}. The exception to this is that arguments \code{col} and \code{cex} can not currently be passed to \code{\link[mgcv]{plot.gam}} because of a bug in the way that function evaluates arguments when arranging the plot. A work-around is to call \code{\link[mgcv]{plot.gam}} directly on the result of a call to \code{ordisurf}. See the Examples for an illustration of this. } \references{ Marra, G.P & Wood, S.N. (2011) Practical variable selection for generalized additive models. \emph{Comput. Stat. Data Analysis} 55, 2372--2387. Wood, S.N. (2003) Thin plate regression splines. \emph{J. R. Statist. Soc. B} 65, 95--114. } \seealso{ For basic routines \code{\link[mgcv]{gam}}, and \code{\link{scores}}. Function \code{\link{envfit}} provides a more traditional and compact alternative. } \examples{ data(varespec) data(varechem) vare.dist <- vegdist(varespec) vare.mds <- monoMDS(vare.dist) with(varechem, ordisurf(vare.mds, Baresoil, bubble = 5)) ## as above but with extra penalties on smooth terms: with(varechem, ordisurf(vare.mds, Baresoil, bubble = 5, col = "blue", add = TRUE, select = TRUE)) ## Cover of Cladina arbuscula fit <- with(varespec, ordisurf(vare.mds, Cla.arb, family=quasipoisson)) ## Get fitted values calibrate(fit) ## Plot method plot(fit, what = "contour") ## Plotting the "gam" object plot(fit, what = "gam") ## 'col' and 'cex' not passed on ## or via plot.gam directly plot.gam(fit, cex = 2, pch = 1, col = "blue") ## 'col' effects all objects drawn... } \keyword{ multivariate } \keyword{ aplot } vegan/man/ordistep.Rd0000644000176200001440000001631412056671653014265 0ustar liggesusers\name{ordistep} \Rdversion{1.1} \alias{ordistep} \alias{ordiR2step} \title{ Choose a Model by Permutation Tests in Constrained Ordination } \description{ Automatic stepwise model building for constrained ordination methods (\code{\link{cca}}, \code{\link{rda}}, \code{\link{capscale}}). The function \code{ordistep} is modelled after \code{\link{step}} and can do forward, backward and stepwise model selection using permutation tests. Function \code{ordiR2step} performs forward model choice solely on adjusted \eqn{R^2}{R2} and P-value, for ordination objects created by \code{\link{rda}} or \code{\link{capscale}}. } \usage{ ordistep(object, scope, direction = c("both", "backward", "forward"), Pin = 0.05, Pout = 0.1, pstep = 100, perm.max = 1000, steps = 50, trace = TRUE, ...) ordiR2step(object, scope, direction = c("both", "forward"), Pin = 0.05, R2scope = TRUE, pstep = 100, perm.max = 1000, trace = TRUE, ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{object}{ In \code{ordistep}, an ordination object inheriting from \code{\link{cca}} or \code{\link{rda}}. In \code{ordiR2step}, the object must inherit from \code{\link{rda}}, that is, it must have been computed using \code{\link{rda}} or \code{\link{capscale}}. } \item{scope}{ Defines the range of models examined in the stepwise search. This should be either a single formula, or a list containing components \code{upper} and \code{lower}, both formulae. See \code{\link{step}} for details. In \code{ordiR2step}, this defines the upper scope; it can also be an ordination object from with the model is extracted. } \item{direction}{ The mode of stepwise search, can be one of \code{"both"}, \code{"backward"}, or \code{"forward"}, with a default of \code{"both"}. If the \code{scope} argument is missing, the default for \code{direction} is \code{"backward"}. } \item{Pin, Pout}{ Limits of permutation \eqn{P}-values for adding (\code{Pin}) a term to the model, or dropping (\code{Pout}) from the model. Term is added if \eqn{P \le}{P <=} \code{Pin}, and removed if \eqn{P >} \code{Pout}. } \item{R2scope}{ Use adjusted \eqn{R^2}{R2} as the stopping criterion: only models with lower adjusted \eqn{R^2}{R2} than scope are accepted. } \item{pstep}{ Number of permutations in one step. See \code{\link{add1.cca}}. } \item{perm.max}{ Maximum number of permutation in \code{\link{anova.cca}}. } \item{steps}{ Maximum number of iteration steps of dropping and adding terms. } \item{trace}{ If positive, information is printed during the model building. Larger values may give more information. } \item{\dots}{ Any additional arguments to \code{\link{add1.cca}} and \code{\link{drop1.cca}}. } } \details{ The basic functions for model choice in constrained ordination are \code{\link{add1.cca}} and \code{\link{drop1.cca}}. With these functions, ordination models can be chosen with standard \R function \code{\link{step}} which bases the term choice on AIC. AIC-like statistics for ordination are provided by functions \code{\link{deviance.cca}} and \code{\link{extractAIC.cca}} (with similar functions for \code{\link{rda}}). Actually, constrained ordination methods do not have AIC, and therefore the \code{\link{step}} may not be trusted. This function provides an alternative using permutation \eqn{P}-values. Function \code{ordistep} defines the model, \code{scope} of models considered, and \code{direction} of the procedure similarly as \code{\link{step}}. The function alternates with \code{drop} and \code{add} steps and stops when the model was not changed during one step. The \code{-} and \code{+} signs in the summary table indicate which stage is performed. The number of permutations is selected adaptively with respect to the defined decision limit. It is often sensible to have \code{Pout} \eqn{>} \code{Pin} in stepwise models to avoid cyclic adds and drops of single terms. Function \code{ordiR2step} builds model so that it maximizes adjusted \eqn{R^2}{R2} (function \code{\link{RsquareAdj}}) at every step, and stopping when the adjusted \eqn{R^2}{R2} starts to decrease, or the adjusted \eqn{R^2}{R2} of the \code{scope} is exceeded, or the selected permutation \eqn{P}-value is exceeded (Blanchet et al. 2008). The second criterion is ignored with option \code{R2step = FALSE}, and the third criterion can be ignored setting \code{Pin = 1} (or higher). The \code{direction} has choices \code{"forward"} and \code{"both"}, but it is very excepctional that a term is dropped with the adjusted \eqn{R^2}{R2} criterion. Function uses adjusted \eqn{R^2}{R2} as the criterion, and it cannot be used if the criterion cannot be calculated. Therefore it is unavailable for \code{\link{cca}}. Adjusted \eqn{R^2}{R2} cannot be calculated if the number of predictors is higher than the number of observations, but such models can be analysed with \code{R2scope = FALSE}. Functions \code{ordistep} (based on \eqn{P} values) and \code{ordiR2step} (based on adjusted \eqn{R^2}{R2} and hence on eigenvalues) can select variables in different order. } \value{ Functions return the selected model with one additional component, \code{anova}, which contains brief information of steps taken. You can suppress voluminous output during model building by setting \code{trace = FALSE}, and find the summary of model history in the \code{anova} item. } \references{ Blanchet, F. G., Legendre, P. & Borcard, D. (2008) Forward selection of explanatory variables. \emph{Ecology} 89, 2623--2632. } \author{ Jari Oksanen } \seealso{ The function handles constrained ordination methods \code{\link{cca}}, \code{\link{rda}} and \code{\link{capscale}}. The underlying functions are \code{\link{add1.cca}} and \code{\link{drop1.cca}}, and the function is modelled after standard \code{\link{step}} (which also can be used directly but uses AIC for model choice, see \code{\link{extractAIC.cca}}). Function \code{ordiR2step} builds upon \code{\link{RsquareAdj}}. } \examples{ ## See add1.cca for another example ### Dune data data(dune) data(dune.env) mod0 <- rda(dune ~ 1, dune.env) # Model with intercept only mod1 <- rda(dune ~ ., dune.env) # Model with all explanatory variables ## With scope present, the default direction is "both" ordistep(mod0, scope = formula(mod1), perm.max = 200) ## Example without scope. Default direction is "backward" ordistep(mod1, perm.max = 200) ## Example of ordistep, forward \dontrun{ ordistep(mod0, scope = formula(mod1), direction="forward", perm.max = 200) } ### Mite data data(mite) data(mite.env) mite.hel = decostand(mite, "hel") mod0 <- rda(mite.hel ~ 1, mite.env) # Model with intercept only mod1 <- rda(mite.hel ~ ., mite.env) # Model with all explanatory variables ## Example of ordiR2step with default direction = "both" ## (This never goes "backward" but evaluates included terms.) step.res <- ordiR2step(mod0, mod1, perm.max = 200) step.res$anova # Summary table ## Example of ordiR2step with direction = "forward" \dontrun{ step.res <- ordiR2step(mod0, scope = formula(mod1), direction="forward") step.res$anova # Summary table } } \keyword{ multivariate } \keyword{ models } vegan/man/ordiresids.Rd0000644000176200001440000000512011256342562014567 0ustar liggesusers\name{ordiresids} \alias{ordiresids} \title{Plots of Residuals and Fitted Values for Constrained Ordination} \description{ The function provides \code{\link{plot.lm}} style diagnostic plots for the results of constrained ordination from \code{\link{cca}}, \code{\link{rda}} and \code{\link{capscale}}. Normally you do not need these plots, because ordination is descriptive and does not make assumptions on the distribution of the residuals. However, if you permute residuals in significance tests (\code{\link{anova.cca}}), you may be interested in inspecting that the residuals really are exchangeable and independent of fitted values. } \usage{ ordiresids(x, kind = c("residuals", "scale", "qqmath"), residuals = "working", type = c("p", "smooth", "g"), formula, ...) } \arguments{ \item{x}{Ordination result from \code{\link{cca}}, \code{\link{rda}} or \code{\link{capscale}}. } \item{kind}{The type of plot: \code{"residuals"} plot residuals against fitted values, \code{"scale"} the square root of absolute residuals against fitted values, and \code{"qqmath"} the residuals against expected distribution (defaults \code{\link{qnorm}}), unless defined differently in the \code{formula} argument). } \item{residuals}{The kind of residuals and fitted values. The argument is passed on to \code{\link{fitted.cca}} with alternatives \code{"working"} and \code{"response"}.} \item{type}{The type of plot. The argument is passed on to \pkg{lattice} functions. } \item{formula}{Formula to override the default plot. The formula can contain items \code{Fitted}, \code{Residuals}, \code{Species} and \code{Sites} (provided that names of species and sites are available in the ordination result). } \item{\dots}{Other arguments passed to \pkg{lattice} functions. } } \details{ The default plots are similar as in \code{\link{plot.lm}}, but they use \code{\link[lattice]{Lattice}} functions \code{\link[lattice]{xyplot}} and \code{\link[lattice]{qqmath}}. The alternatives have default formulae but these can be replaced by the user. The elements available in formula or in the \code{groups} argument are \code{Fitted}, \code{Residuals}, \code{Species} and \code{Sites}. } \value{ The function return a \code{\link[lattice]{Lattice}} object that can displayed as plot. } \author{Jari Oksanen } \seealso{\code{\link{plot.lm}}, \code{\link[lattice]{Lattice}}, \code{\link[lattice]{xyplot}}, \code{\link[lattice]{qqmath}}. } \examples{ data(varespec) data(varechem) mod <- cca(varespec ~ Al + P + K, varechem) ordiresids(mod) } \keyword{ hplot } vegan/man/ordipointlabel.Rd0000644000176200001440000000703511760065660015437 0ustar liggesusers\name{ordipointlabel} \alias{ordipointlabel} \title{ Ordination Plots with Points and Optimized Locations for Text } \description{ The function \code{ordipointlabel} produces ordination plots with points and text label to the points. The points are in the exact location given by the ordination, but the function tries to optimize the location of the text labels to minimize overplotting text. The function may be useful with moderately crowded ordination plots. } \usage{ ordipointlabel(x, display = c("sites", "species"), choices = c(1, 2), col = c(1, 2), pch = c("o", "+"), font = c(1, 1), cex = c(0.8, 0.8), add = FALSE, select, ...) } \arguments{ \item{x}{A result object from ordination. } \item{display}{Scores displayed in the plot. } \item{choices}{Axes shown. } \item{col, pch, font, cex}{Colours, point types, font style and character expansion for each kind of scores displayed in the plot. These should be vectors of the same length as the number of items in \code{display}.} \item{add}{ Add to an existing plot. } \item{select}{Items to be displayed. This can either be a logical vector which is \code{TRUE} for displayed items or a vector of indices of displayed items. \code{select} is only used if a single set of scores is being plotted (i.e. \code{length(display) == 1}), otherwise it is ignored and a warning issued. If a logical vector is used, it must have the same length as the scores plotted.} \item{\dots}{Other arguments passed to \code{\link{points}} and \code{\link{text}}.} } \details{ The function uses simulated annealing (\code{\link{optim}}, \code{method = "SANN"}) to optimize the location of the text labels to the points. There are eight possible locations: up, down, sides and corners. There is a weak preference to text right above the point, and a weak avoidance of corner positions. The exact locations and the goodness of solution varies between runs, and there is no guarantee of finding the global optimum. The optimization can take a long time in difficult cases with a high number of potential overlaps. Several sets of scores can be displayed in one plot. The function is modelled after \code{\link[maptools]{pointLabel}} in \pkg{maptools} package (which has chained dependencies of \code{S4} packages). } \value{ The function returns invisibly an object of class \code{ordipointlabel} with items \code{xy} for coordinates of points, \code{labels} for coordinates of labels, items \code{pch}, \code{cex} and \code{font} for graphical parameters of each point or label. In addition, it returns the result of \code{\link{optim}} as an attribute \code{"optim"}. The unit of overlap is the area of character \code{"m"}, and with variable \code{cex} it is the smallest alternative. The result object inherits from \code{\link{orditkplot}} result, and can be replotted with its \code{plot} command. It may be possible to further edit the result object with \code{\link{orditkplot}}, but for good results it is necessary that the points span the whole horizontal axis without empty margins. } \references{ See \code{\link[maptools]{pointLabel}} for references. } \author{ Jari Oksanen } \note{ The function is designed for ordination graphics, and the optimization works properly with plots of isometric aspect ratio. } \seealso{ \code{\link[maptools]{pointLabel}} for the model implementation, and \code{\link{optim}} for the optimization. } \examples{ data(dune) ord <- cca(dune) ordipointlabel(ord) } \keyword{ hplot } \keyword{ aplot } vegan/man/ordiplot3d.Rd0000644000176200001440000002514112031516374014504 0ustar liggesusers\name{ordiplot3d} \alias{ordiplot3d} \alias{ordirgl} \alias{orglpoints} \alias{orgltext} \alias{orglsegments} \alias{orglspider} \title{Three-Dimensional and Dynamic Ordination Graphics } \description{ Function \code{ordiplot3d} displays three-dimensional ordination graphics using \code{\link[scatterplot3d]{scatterplot3d}}. Function \code{ordirgl} displays three-dimensional dynamic ordination graphs which can be rotated and zoomed into using \code{\link[rgl]{rgl}} package. Both work with all ordination results form \code{vegan} and all ordination results known by \code{\link{scores}} function. } \usage{ ordiplot3d(object, display = "sites", choices = 1:3, ax.col = 2, arr.len = 0.1, arr.col = 4, envfit, xlab, ylab, zlab, ...) ordirgl(object, display = "sites", choices = 1:3, type = "p", ax.col = "red", arr.col = "yellow", text, envfit, ...) orglpoints(object, display = "sites", choices = 1:3, ...) orgltext(object, text, display = "sites", choices = 1:3, justify = "center", adj = 0.5, ...) orglsegments(object, groups, display = "sites", choices = 1:3, ...) orglspider(object, groups, display = "sites", w = weights(object, display), choices = 1:3, ...) } \arguments{ \item{object}{An ordination result or any object known by \code{\link{scores}}. } \item{display}{Display \code{"sites"} or \code{"species"} or other ordination object recognized by \code{\link{scores}}. } \item{choices}{Selected three axes. } \item{arr.len}{'Length' (width) of arrow head passed to \code{\link{arrows}} function. } \item{arr.col}{Colour of biplot \code{\link{arrows}} and centroids of environmental variables. } \item{type}{The type of plots: \code{"p"} for points or \code{"t"} for text labels.} \item{ax.col}{Axis colour (concerns only the crossed axes through the origin).} \item{text}{Text to override the default with \code{type = "t"}.} \item{envfit}{Fitted environmental variables from \code{\link{envfit}} displayed in the graph.} \item{xlab, ylab, zlab}{Axis labels passed to \code{\link[scatterplot3d]{scatterplot3d}}. If missing, labels are taken from the ordination result. Set to \code{NA} to suppress labels. } \item{justify, adj}{Text justification passed to \code{\link[rgl]{rgl.texts}}. One of these is used depending on the version of \pkg{rgl} installed.} \item{groups}{Factor giving the groups for which the graphical item is drawn.} \item{w}{Weights used to find the average within group. Weights are used automatically for \code{\link{cca}} and \code{\link{decorana}} results, unless undone by the user. \code{w=NULL} sets equal weights to all points. } \item{\dots}{Other parameters passed to graphical functions. } } \details{ Both function display three-dimensional ordination graphics. Function \code{ordiplot3d} plots static scatter diagrams using \code{\link[scatterplot3d]{scatterplot3d}}. Function \code{ordirgl} plots dynamic graphics using OpenGL in \code{\link[rgl]{rgl}}. Both functions use most default settings of underlying graphical functions, and you must consult their help pages to change graphics to suit your taste (see \code{\link[scatterplot3d]{scatterplot3d}}, \code{\link[rgl]{rgl}}, \code{\link[rgl]{rgl.points}},\code{\link[rgl]{rgl.texts}}). Both functions will display only one selected set of \code{\link{scores}}, typically either \code{"sites"} or \code{"species"}, but for instance \code{\link{cca}} also has \code{"lc"} scores. In constrained ordination (\code{\link{cca}}, \code{\link{rda}}, \code{\link{capscale}}), biplot arrows and centroids are always displayed similarly as in two-dimensional plotting function \code{\link{plot.cca}}. Alternatively, it is possible to display fitted environmental vectors or class centroids from \code{\link{envfit}} in both graphs. These are displayed similarly as the results of constrained ordination, and they can be shown only for non-constrained ordination. The user must remember to specify at least three axes in \code{\link{envfit}} if the results are used with these functions. Function \code{ordiplot3d} plots only points. However, it returns invisibly an object inheriting from \code{\link{ordiplot}} so that you can use \code{\link{identify.ordiplot}} to identify \code{"points"} or \code{"arrows"}. The underlying \code{\link[scatterplot3d]{scatterplot3d}} function accepts \code{type = "n"} so that only the axes, biplot arrows and centroids of environmental variables will be plotted, and the ordination scores can be added with \code{\link{text.ordiplot}} or \code{\link{points.ordiplot}}. Further, you can use any functions from the \code{\link{ordihull}} family with the invisible result of \code{\link{ordiplot3d}}, but you must remember to specify the \code{display} as \code{"points"} or \code{"arrows"}. To change the viewing angle, orientation etc.{} you must see \code{\link[scatterplot3d]{scatterplot3d}}. Only one kind of scores will be plotted. See Examples for plotting both species and site scores. Function \code{ordigl} makes a dynamic three-dimensional graph that can be rotated with mouse, and zoomed into with mouse buttons or wheel (but Mac users with one-button mouse should see \code{\link[rgl]{rgl.viewpoint}}), or try ctrl-button. MacOS X users must start \code{X11} before calling \code{\link[rgl]{rgl}} commands. Function \code{ordirgl} uses default settings, and you should consult the underlying functions \code{\link[rgl]{rgl.points}}, \code{\link[rgl]{rgl.texts}} to see how to control the graphics. Function \code{ordirgl} always cleans its graphic window before drawing. Functions \code{orglpoints} adds points and \code{orgltext} adds text to existing \code{ordirgl} windows. In addition, function \code{orglsegments} combines points within \code{"groups"} with line segments similarly as \code{\link{ordisegments}}. Function \code{orglspider} works similarly as \code{\link{ordispider}}: it connects points to their weighted centroid within \code{"groups"}, and in constrained ordination it can connect \code{"wa"} or weighted averages scores to corresponding \code{"lc"} or linear combination scores if \code{"groups"} is missing. In addition, basic \code{rgl} functions \code{\link[rgl]{rgl.points}}, \code{\link[rgl]{rgl.texts}}, \code{\link[rgl]{rgl.lines}} and many others can be used. } \value{ Function \code{ordiplot3d} returns invisibly an object of class \code{"ordiplot3d"} inheriting from \code{\link{ordiplot}}. The return object will contain the coordinates projected onto two dimensions for \code{points}, and the projected coordinates of \code{origin}, and possibly the projected coordinates of the heads of \code{arrows} and \code{centroids} of environmental variables. Functions like \code{\link{identify.ordiplot}}, \code{\link{points.ordiplot}}, \code{\link{text.ordiplot}} can use this result, as well as \code{\link{ordihull}} and other functions documented with the latter. The result will also contain the object returned by \code{\link[scatterplot3d]{scatterplot3d}}, including function \code{xyz.convert} which projects three-dimensional coordinates onto the plane used in the current plot (see Examples). In addition, there is a function \code{envfit.convert} that projects a three-dimensional \code{\link{envfit}} object to the current plot. Function \code{ordirgl} returns nothing. } \author{Jari Oksanen } \section{Warning}{Function \code{ordirgl} uses OpenGL package \code{\link[rgl]{rgl}} which may not be functional in all platforms, and can crash R in some: use \code{\link{save.image}} before trying \code{ordirgl}. Mac users must start \code{X11} (and first install \code{X11} and some other libraries) before being able to use \code{\link[rgl]{rgl}}. It seems that \code{\link[rgl]{rgl.texts}} does not always position the text like supposed, and it may be safe to verify text location with corresponding points. Function \code{ordiplot3d} is based on \code{\link[scatterplot3d]{scatterplot3d}} which does not allow exactly setting equal aspect ratio for axes. The function tries to circumvent this by setting equal plotting ranges for all axes so that the plot should be a cube. Depending on the dimensions of plotting device, this may fail, and the user should verify that the axes are approximately equal. Please note that \code{\link[scatterplot3d]{scatterplot3d}} sets internally some graphical parameters (such as \code{mar} for margins) and does not honour default settings. It is advisable to study carefully the documentation and examples of \code{\link[scatterplot3d]{scatterplot3d}}. } \note{The user interface of \pkg{rgl} changed in version 0.65, but the \code{ordirgl} functions do not yet fully use the new capabilities. However, they should work both in old and new versions of \pkg{rgl}. } \seealso{ \code{\link[scatterplot3d]{scatterplot3d}}, \code{\link[rgl]{rgl}}, \code{\link[rgl]{rgl.points}}, \code{\link[rgl]{rgl.texts}}, \code{\link[rgl]{rgl.viewpoint}}, \code{\link{ordiplot}}, \code{\link{identify.ordiplot}}, \code{\link{text.ordiplot}}, \code{\link{points.ordiplot}}, \code{\link{ordihull}}, \code{\link{plot.cca}}, \code{\link{envfit}}. } \examples{ ## Examples are not run, because they need non-standard packages ## 'scatterplot3d' and 'rgl' (and the latter needs user interaction). ##### ### Default 'ordiplot3d' \dontrun{ data(dune) data(dune.env) ord <- cca(dune ~ A1 + Moisture, dune.env) ordiplot3d(ord) ### A boxed 'pin' version ordiplot3d(ord, type = "h") ### More user control pl <- ordiplot3d(ord, scaling = 3, angle=15, type="n") points(pl, "points", pch=16, col="red", cex = 0.7) ### identify(pl, "arrows", col="blue") would put labels in better positions text(pl, "arrows", col="blue", pos=3) text(pl, "centroids", col="blue", pos=1, cex = 1) ### Add species using xyz.convert function returned by ordiplot3d sp <- scores(ord, choices=1:3, display="species", scaling=3) text(pl$xyz.convert(sp), rownames(sp), cex=0.7, xpd=TRUE) ### Two ways of adding fitted variables to ordination plots ord <- cca(dune) ef <- envfit(ord ~ Moisture + A1, dune.env, choices = 1:3) ### 1. use argument 'envfit' ordiplot3d(ord, envfit = ef) ### 2. use returned envfit.convert function for better user control pl3 <- ordiplot3d(ord) plot(pl3$envfit.convert(ef), at = pl3$origin) ### envfit.convert() also handles different 'choices' of axes pl3 <- ordiplot3d(ord, choices = c(1,3,2)) plot(pl3$envfit.convert(ef), at = pl3$origin) ### ordirgl ordirgl(ord, size=2) ordirgl(ord, display = "species", type = "t") rgl.quit() } } \keyword{ hplot } \keyword{ dynamic } vegan/man/ordiplot.Rd0000644000176200001440000001131511622667317014264 0ustar liggesusers\name{ordiplot} \alias{ordiplot} \alias{identify.ordiplot} \alias{scores.ordiplot} \alias{points.ordiplot} \alias{text.ordiplot} \title{ Alternative plot and identify Functions for Ordination } \description{ Ordination plot function especially for congested plots. Function \code{ordiplot} always plots only unlabelled points, but \code{identify.ordiplot} can be used to add labels to selected site, species or constraint points. Function \code{identify.ordiplot} can be used to identify points from \code{\link{plot.cca}}, \code{\link{plot.decorana}}, \code{\link{plot.procrustes}} and \code{\link{plot.rad}} as well. } \usage{ ordiplot(ord, choices = c(1, 2), type="points", display, xlim, ylim, cex = 0.7, ...) \method{identify}{ordiplot}(x, what, labels, ...) \method{points}{ordiplot}(x, what, select, ...) \method{text}{ordiplot}(x, what, labels, select, ...) } \arguments{ \item{ord}{A result from an ordination.} \item{choices}{Axes shown. } \item{type}{The type of graph which may be \code{"points"}, \code{"text"} or \code{"none"} for any ordination method.} \item{display}{Display only "sites" or "species". The default for most methods is to display both, but for \code{\link{cca}}, \code{\link{rda}} and \code{\link{capscale}} it is the same as in \code{\link{plot.cca}}. } \item{xlim, ylim}{the x and y limits (min,max) of the plot.} \item{cex}{Character expansion factor for points and text.} \item{\dots}{Other graphical parameters. } \item{x}{A result object from \code{ordiplot}.} \item{what}{Items identified in the ordination plot. The types depend on the kind of plot used. Most methods know \code{sites} and \code{species}, functions \code{\link{cca}} and \code{\link{rda}} know in addition \code{constraints} (for `LC' scores), \code{centroids} and \code{biplot}, and \code{\link{plot.procrustes}} ordination plot has \code{heads} and \code{points}.} \item{labels}{Optional text used for labels. Row names will be used if this is missing.} \item{select}{Items to be displayed. This can either be a logical vector which is \code{TRUE} for displayed items or a vector of indices of displayed items.} } \details{ Function \code{ordiplot} draws an ordination diagram using black circles for sites and red crosses for species. It returns invisibly an object of class \code{ordiplot} which can be used by \code{identify.ordiplot} to label selected sites or species, or constraints in \code{\link{cca}} and \code{\link{rda}}. The function can handle output from several alternative ordination methods. For \code{\link{cca}}, \code{\link{rda}} and \code{\link{decorana}} it uses their \code{plot} method with option \code{type = "points"}. In addition, the \code{plot} functions of these methods return invisibly an \code{ordiplot} object which can be used by \code{identify.ordiplot} to label points. For other ordinations it relies on \code{\link{scores}} to extract the scores. For full user control of plots, it is best to call \code{ordiplot} with \code{type = "none"} and save the result, and then add sites and species using \code{points.ordiplot} or \code{text.ordiplot} which both pass all their arguments to the corresponding default graphical functions. } \value{ Function \code{ordiplot} returns invisibly an object of class \code{ordiplot} with items \code{sites}, \code{species} and \code{constraints} (if these are available in the ordination object). Function \code{identify.ordiplot} uses this object to label the point. } \author{ Jari Oksanen } \note{ The purpose of these functions is to provide similar functionality as the \code{plot}, \code{plotid} and \code{specid} methods in library \code{labdsv}. The functions are somewhat limited in parametrization, but you can call directly the standard \code{\link{identify}} and \code{\link{plot}} functions for a better user control. } \seealso{ \code{\link{identify}} for basic operations, \code{\link{plot.cca}}, \code{\link{plot.decorana}}, \code{\link{plot.procrustes}} which also produce objects for \code{identify.ordiplot} and \code{\link{scores}} for extracting scores from non-\code{vegan} ordinations. } \examples{ # Draw a plot for a non-vegan ordination (cmdscale). data(dune) dune.dis <- vegdist(wisconsin(dune)) dune.mds <- cmdscale(dune.dis, eig = TRUE) dune.mds$species <- wascores(dune.mds$points, dune, expand = TRUE) fig <- ordiplot(dune.mds, type = "none") points(fig, "sites", pch=21, col="red", bg="yellow") text(fig, "species", col="blue", cex=0.9) # Default plot of the previous using identify to label selected points \dontrun{ fig <- ordiplot(dune.mds) identify(fig, "spec")} } \keyword{ hplot } \keyword{ iplot } \keyword{ aplot } vegan/man/ordilabel.Rd0000644000176200001440000000510311612561542014353 0ustar liggesusers\name{ordilabel} \alias{ordilabel} \title{Add Text on Non-transparent Label to an Ordination Plot. } \description{ Function \code{ordilabel} is similar to \code{\link{text}}, but the text is on an opaque label. This can help in crowded ordination plots: you still cannot see all text labels, but at least the uppermost are readable. Argument \code{priority} helps to make the most important labels visible. } \usage{ ordilabel(x, display, labels, choices = c(1, 2), priority, select, cex = 0.8, fill = "white", border = NULL, col = NULL, xpd = TRUE, ...) } \arguments{ \item{x}{An ordination object an any object known to \code{\link{scores}}. } \item{display}{Kind of scores displayed (passed to \code{\link{scores}}). } \item{labels}{Optional text used in plots. If this is not given, the text is found from the ordination object.} \item{choices}{Axes shown (passed to \code{\link{scores}}). } \item{priority}{Vector of the same length as the number of labels. The items with high priority will be plotted uppermost.} \item{select}{Items to be displayed. This can either be a logical vector which is \code{TRUE} for displayed items or a vector of indices of displayed items.} \item{cex}{ Character expansion for the text (passed to \code{\link{text}}). } \item{fill}{ Background colour of the labels (the \code{col} argument of \code{\link{polygon}}).} \item{border}{The colour and visibility of the border of the label as defined in \code{\link{polygon}}).} \item{col}{Text colour. Default \code{NULL} will give the value of \code{border} or \code{par("fg")} if \code{border} is \code{NULL}.} \item{xpd}{Draw labels also outside the plot region (see \code{\link{par}}).} \item{\dots}{Other arguments (passed to \code{\link{text}}). } } \details{ The function may be useful with crowded ordination plots, in particular together with argument \code{priority}. You will not see all text labels, but at least some are readable. Other alternatives to crowded plots are \code{\link{identify.ordiplot}}, \code{\link{orditorp}} and \code{\link{orditkplot}}. } \author{ Jari Oksanen } \seealso{ \code{\link{scores}}, \code{\link{polygon}}, \code{\link{text}}. The function is modelled after \code{\link[ade4]{s.label}} in \pkg{ade4} package.} \examples{ data(dune) ord <- cca(dune) plot(ord, type = "n") ordilabel(ord, dis="sites", cex=1.2, font=3, fill="hotpink", col="blue") ## You may prefer separate plots, but here species as well ordilabel(ord, dis="sp", font=2, priority=colSums(dune)) } \keyword{ aplot } vegan/man/ordihull.Rd0000644000176200001440000002007311760064522014243 0ustar liggesusers\name{ordihull} \alias{ordihull} \alias{ordispider} \alias{ordiellipse} \alias{ordicluster} \alias{weights.cca} \alias{weights.rda} \alias{weights.decorana} \alias{summary.ordihull} \alias{scores.ordihull} \alias{summary.ordiellipse} \title{Display Groups or Factor Levels in Ordination Diagrams} \description{ Functions to add convex hulls, `spider' graphs, ellipses or cluster dendrogram to ordination diagrams. The ordination diagrams can be produced by \code{vegan} \code{\link{plot.cca}}, \code{\link{plot.decorana}} or \code{\link{ordiplot}}. } \usage{ ordihull(ord, groups, display = "sites", draw = c("lines","polygon", "none"), col = NULL, alpha = 127, show.groups, label = FALSE, ...) ordiellipse(ord, groups, display="sites", kind = c("sd","se"), conf, draw = c("lines","polygon", "none"), w = weights(ord, display), col = NULL, alpha = 127, show.groups, label = FALSE, ...) ordispider(ord, groups, display="sites", w = weights(ord, display), show.groups, label = FALSE, ...) ordicluster(ord, cluster, prune = 0, display = "sites", w = weights(ord, display), ...) \method{summary}{ordihull}(object, ...) \method{summary}{ordiellipse}(object, ...) } \arguments{ \item{ord}{An ordination object or an \code{\link{ordiplot}} object. } \item{groups}{Factor giving the groups for which the graphical item is drawn. } \item{display}{Item to displayed. } \item{draw}{Use either \code{\link{lines}} or \code{\link{polygon}} to draw the lines. Graphical parameters are passed to both. The main difference is that \code{polygon}s may be filled and non-transparent. With \code{none} nothing is drawn, but the function returns the \code{\link{invisible}} plotting data.} \item{col}{Colour of hull or ellipse lines (if \code{draw = "lines"}) or their fills (if \code{draw = "polygon"}) in \code{ordihull} and \code{ordiellipse}. When \code{draw = "polygon"}, the colour of bordering lines can be set with argument \code{border} of the \code{\link{polygon}} function. For other functions the effect depends on the underlining functions this argument is passed to.} \item{alpha}{Transparency of the fill \code{col}our with \code{draw = "polygon"} in \code{ordihull} and \code{ordiellipse}. The argument takes precedence over possible transparency definitions of the colour. The value must be in range \eqn{0...255}, and low values are more transparent. Transparency is not available in all graphics devices or file formats.} \item{show.groups}{Show only given groups. This can be a vector, or \code{TRUE} if you want to show items for which condition is \code{TRUE}. This argument makes it possible to use different colours and line types for groups. The default is to show all groups. } \item{label}{Label the \code{groups} by their names in the centroid of the object. \code{ordiellipse} and \code{ordihull} use standard \code{\link{text}}, and others use \code{\link{ordilabel}}.} \item{w}{Weights used to find the average within group. Weights are used automatically for \code{\link{cca}} and \code{\link{decorana}} results, unless undone by the user. \code{w=NULL} sets equal weights to all points. } \item{kind}{Whether standard deviations of points (\code{sd}) or standard deviations of their (weighted) averages (\code{se}) are used.} \item{conf}{Confidence limit for ellipses, e.g. 0.95. If given, the corresponding \code{sd} or \code{se} is multiplied with the corresponding value found from the Chi-squared distribution with 2df. } \item{cluster}{Result of hierarchic cluster analysis, such as \code{\link{hclust}} or \code{\link[cluster]{agnes}}.} \item{prune}{Number of upper level hierarchies removed from the dendrogram. If \code{prune} \eqn{>0}, dendrogram will be disconnected.} \item{object}{A result object from \code{ordihull} or \code{ordiellipse}. The result is \code{\link{invisible}}, but it can be saved, and used for summaries (areas etc. of hulls and ellipses). } \item{\dots}{Parameters passed to graphical functions or to \code{\link{scores}} to select axes and scaling etc. } } \details{ Function \code{ordihull} draws \code{\link{lines}} or \code{\link{polygon}}s for the convex hulls found by function \code{\link{chull}} encircling the items in the groups. Function \code{ordiellipse} draws \code{\link{lines}} or \code{\link{polygon}}s for dispersion ellipses using either standard deviation of point scores or standard error of the (weighted) average of scores, and the (weighted) correlation defines the direction of the principal axis of the ellipse. An ellipsoid hull can be drawn with function \code{\link[cluster]{ellipsoidhull}} of package \pkg{cluster}. Function \code{ordispider} draws a \sQuote{spider} diagram where each point is connected to the group centroid with \code{\link{segments}}. Weighted centroids are used in the correspondence analysis methods \code{\link{cca}} and \code{\link{decorana}} or if the user gives the weights in the call. If \code{ordispider} is called with \code{\link{cca}} or \code{\link{rda}} result without \code{groups} argument, the function connects each \sQuote{WA} scores to the corresponding \sQuote{LC} score. If the argument is a (\code{invisible}) \code{ordihull} object, the function will connect the points of the hull to their centroid. Function \code{ordicluster} overlays a cluster dendrogram onto ordination. It needs the result from a hierarchic clustering such as \code{\link{hclust}} or \code{\link[cluster]{agnes}}, or other with a similar structure. Function \code{ordicluster} connects cluster centroids to each other with line \code{\link{segments}}. Function uses centroids of all points in the clusters, and is therefore similar to average linkage methods. } \note{These functions add graphical items to ordination graph: You must draw a graph first. To draw line segments, grids or arrows, see \code{\link{ordisegments}}, \code{\link{ordigrid}} and\code{\link{ordiarrows}}. } \value{ Functions \code{ordihull}, \code{ordiellipse} and \code{ordispider} return the \code{\link{invisible}} plotting structure. Function \code{ordispider} return the coordinates to which each point is connected (centroids or \sQuote{LC} scores). Function \code{ordihull} returns a list of coordinates of the hulls (which can be extracted with \code{scores}), and \code{ordiellipse} returns a list of covariance matrices and scales used in drawing the ellipses. These result objects have a \code{summary} method that returns the coordinates of the centres of the ellipses or hulls and their surface areas in user units. With \code{draw = "none"} only the result object is returned and nothing is drawn. } \author{ Jari Oksanen } \seealso{The functions pass parameters to basic graphical functions, and you may wish to change the default values in \code{\link{lines}}, \code{\link{segments}} and \code{\link{polygon}}. You can pass parameters to \code{\link{scores}} as well. Underlying function for \code{ordihull} is \code{\link{chull}}. } \examples{ data(dune) data(dune.env) mod <- cca(dune ~ Management, dune.env) attach(dune.env) ## pass non-graphical arguments without warnings plot(mod, type="n", scaling = 3) ## Catch the invisible result of ordihull... pl <- ordihull(mod, Management, scaling = 3, label = TRUE) ## ... and find centres and areas of the hulls summary(pl) ## use ordispider to label and mark the hull plot(mod, type = "n") pl <- ordihull(mod, Management, scaling = 3) ordispider(pl, col="red", lty=3, label = TRUE ) ## ordispider to connect WA and LC scores plot(mod, dis=c("wa","lc"), type="p") ordispider(mod) ## Other types of plots plot(mod, type = "p", display="sites") ordicluster(mod, hclust(vegdist(dune)), prune=3, col = "blue") plot(mod, type="n", display = "sites") text(mod, display="sites", labels = as.character(Management)) pl <- ordiellipse(mod, Management, kind="se", conf=0.95, lwd=2, draw = "polygon", col="skyblue", border = "blue") summary(pl) } \keyword{aplot } vegan/man/ordiarrows.Rd0000644000176200001440000000741211655241124014614 0ustar liggesusers\name{ordiarrows} \alias{ordiarrows} \alias{ordisegments} \alias{ordigrid} \title{Add Arrows and Line Segments to Ordination Diagrams} \description{ Functions to add arrows, line segments, regular grids of points. The ordination diagrams can be produced by \code{vegan} \code{\link{plot.cca}}, \code{\link{plot.decorana}} or \code{\link{ordiplot}}. } \usage{ ordiarrows(ord, groups, levels, replicates, order.by, display = "sites", show.groups, startmark, label = FALSE, ...) ordisegments(ord, groups, levels, replicates, order.by, display = "sites", show.groups, label = FALSE, ...) ordigrid(ord, levels, replicates, display = "sites", lty = c(1,1), col = c(1,1), lwd = c(1,1), ...) } \arguments{ \item{ord}{An ordination object or an \code{\link{ordiplot}} object. } \item{groups}{Factor giving the groups for which the graphical item is drawn. } \item{levels, replicates}{Alternatively, regular groups can be defined with arguments \code{levels} and \code{replicates}, where \code{levels} gives the number of groups, and \code{replicates} the number of successive items at the same group.} \item{order.by}{Order points by increasing order of this variable within \code{groups}. Reverse sign of the variable for decreasing ordering.} \item{display}{Item to displayed. } \item{show.groups}{Show only given groups. This can be a vector, or \code{TRUE} if you want to show items for which condition is \code{TRUE}. This argument makes it possible to use different colours and line types for groups. The default is to show all groups. } \item{label}{Label the \code{groups} by their names. In \code{ordiellipse}, \code{ordihull} and \code{ordispider} the the group name is in the centroid of the object, in \code{ordiarrows} in the start of the arrow, and in \code{ordisegments} at both ends. \code{ordiellipse} and \code{ordihull} use standard \code{\link{text}}, and others use \code{\link{ordilabel}}.} \item{startmark}{plotting character used to mark the first item. The default is to use no mark, and for instance, \code{startmark = 1} will draw a circle. For other plotting characters, see \code{pch} in \code{\link{points}}. } \item{col}{Colour of lines in \code{ordigrid}. This argument is also passed to other functions to change the colour of lines.} \item{lty, lwd}{Line type, line width used for \code{level}s and \code{replicate}s in \code{ordigrid}.} \item{\dots}{Parameters passed to graphical functions such as \code{\link{lines}}, \code{\link{segments}}, \code{\link{arrows}}, or to \code{\link{scores}} to select axes and scaling etc. } } \details{ Function \code{ordiarrows} draws \code{\link{arrows}} and \code{ordisegments} draws line \code{\link{segments}} between successive items in the groups. Function \code{ordigrid} draws line \code{\link{segments}} both within the groups and for the corresponding items among the groups. } \note{These functions add graphical items to ordination graph: You must draw a graph first. } \author{ Jari Oksanen } \seealso{The functions pass parameters to basic graphical functions, and you may wish to change the default values in \code{\link{arrows}}, \code{\link{lines}} and \code{\link{segments}}. You can pass parameters to \code{\link{scores}} as well. } \examples{ example(pyrifos) mod <- rda(pyrifos) plot(mod, type = "n") ## Annual succession by ditches ordiarrows(mod, ditch, label = TRUE) ## Show only control and highest Pyrifos treatment plot(mod, type = "n") ordiarrows(mod, ditch, label = TRUE, show.groups = c("2", "3", "5", "11")) ordiarrows(mod, ditch, label = TRUE, show = c("6", "9"), col = 2) legend("topright", c("Control", "Pyrifos 44"), lty = 1, col = c(1,2)) } \keyword{aplot } vegan/man/oecosimu.Rd0000644000176200001440000003330211674346677014265 0ustar liggesusers\encoding{UTF-8} \name{oecosimu} \alias{oecosimu} \alias{commsimulator} \alias{as.ts.oecosimu} \alias{as.mcmc.oecosimu} \alias{density.oecosimu} \alias{densityplot.oecosimu} \title{ Null Models for Biological Communities } \description{ Null models generate random communities with different criteria to study the significance of nestedness or other community patterns. The function only simulates binary (presence/absence) models with constraint for total number of presences, and optionally for numbers of species and/or species frequencies. } \usage{ oecosimu(comm, nestfun, method, nsimul = 99, burnin = 0, thin = 1, statistic = "statistic", alternative = c("two.sided", "less", "greater"), ...) commsimulator(x, method, thin=1) \method{as.ts}{oecosimu}(x, ...) \method{as.mcmc}{oecosimu}(x) \method{density}{oecosimu}(x, ...) \method{densityplot}{oecosimu}(x, data, xlab = "Simulated", ...) } \arguments{ \item{comm}{Community data.} \item{x}{Community data for \code{commsimulator}, or an \code{oecosimu} result object for \code{as.ts}, \code{as.mcmc}, \code{density} and \code{densityplot}.} \item{nestfun}{Function to analyse nestedness. Some functions are provided in \pkg{vegan}, but any function can be used if it accepts the community as the first argument, and returns either a plain number or the result in list item with the name defined in argument \code{statistic}. See Examples for defining your own functions.} \item{method}{Null model method. See details.} \item{nsimul}{Number of simulated null communities.} \item{burnin}{Number of null communities discarded before proper analysis in sequential methods \code{"swap"} and \code{"tswap"}.} \item{thin}{Number of discarded null communities between two evaluations of nestedness statistic in sequential methods \code{"swap"} and \code{"tswap"}.} \item{statistic}{The name of the statistic returned by \code{nestedfun}} \item{alternative}{a character string specifying the alternative hypothesis, must be one of \code{"two.sided"} (default), \code{"greater"} or \code{"less"}. Please note that the \eqn{p}-value of two-sided test is approximately two times higher than in the corresponding one-sided test (\code{"greater"} or \code{"less"} depending on the sign of the difference).} \item{data}{Ignored argument of the generic function.} \item{xlab}{Label of the x-axis.} \item{\dots}{Other arguments to functions.} } \details{ Function \code{oecosimu} is a wrapper that evaluates a nestedness statistic using function given by \code{nestfun}, and then simulates a series of null models using \code{commsimulator} or other functions (depending on method argument), and evaluates the statistic on these null models. The \pkg{vegan} packages contains some nestedness functions that are described separately (\code{\link{nestedchecker}}, \code{\link{nesteddisc}}, \code{\link{nestedn0}}, \code{\link{nestedtemp}}), but many other functions can be used as long as they are meaningful with binary or quantitative community models. An applicable function must return either the statistic as a plain number, or as a list element \code{"statistic"} (like \code{\link{chisq.test}}), or in an item whose name is given in the argument \code{statistic}. The statistic can be a single number (like typical for a nestedness index), or it can be a vector. The vector indices can be used to analyse site (row) or species (column) properties, see \code{\link{treedive}} for an example. Raup-Crick index (\code{\link{raupcrick}}) gives an example of using a dissimilarities index. Function \code{commsimulator} implements binary (presence/absence) null models for community composition. The implemented models are \code{r00} which maintains the number of presences but fills these anywhere so that neither species (column) nor site (row) totals are preserved. Methods \code{r0}, \code{r1} and \code{r2} maintain the site (row) frequencies. Method \code{r0} fills presences anywhere on the row with no respect to species (column) frequencies, \code{r1} uses column marginal frequencies as probabilities, and \code{r2} uses squared column sums. Methods \code{r1} and \code{r2} try to simulate original species frequencies, but they are not strictly constrained. All these methods are reviewed by Wright et al. (1998). Method \code{c0} maintains species frequencies, but does not honour site (row) frequencies (Jonsson 2001). The other methods maintain both row and column frequencies. Methods \code{swap} and \code{tswap} implement sequential methods, where the matrix is changed only little in one step, but the changed matrix is used as an input if the next step. Methods \code{swap} and \code{tswap} inspect random 2x2 submatrices and if they are checkerboard units, the order of columns is swapped. This changes the matrix structure, but does not influence marginal sums (Gotelli & Entsminger 2003). Method \code{swap} inspects submatrices so long that a swap can be done. \enc{Miklós}{Miklos} & Podani (2004) suggest that this may lead into biased sequences, since some columns or rows may be more easily swapped, and they suggest trying a fixed number of times and doing zero to many swaps at one step. This method is implemented by method \code{tswap} or trial swap. Function \code{commsimulator} makes only one trial swap in time (which probably does nothing), but \code{oecosimu} estimates how many submatrices are expected before finding a swappable checkerboard, and uses that ratio to thin the results, so that on average one swap will be found per step of \code{tswap}. However, the checkerboard frequency probably changes during swaps, but this is not taken into account in estimating the \code{thin}. One swap still changes the matrix only little, and it may be useful to thin the results so that the statistic is only evaluated after \code{burnin} steps (and \code{thin}ned). Methods \code{quasiswap} and \code{backtracking} are not sequential, but each call produces a matrix that is independent of previous matrices, and has the same marginal totals as the original data. The recommended method is \code{quasiswap} which is much faster because it is implemented in C. Method \code{backtracking} is provided for comparison, but it is so slow that it may be dropped from future releases of \pkg{vegan} (or also implemented in C). Method \code{quasiswap} (\enc{Miklós}{Miklos} & Podani 2004) implements a method where matrix is first filled honouring row and column totals, but with integers that may be larger than one. Then the method inspects random 2x2 matrices and performs a quasiswap on them. Quasiswap is similar to ordinary swap, but it also can reduce numbers above one to ones maintaining marginal totals. Method \code{backtracking} implements a filling method with constraints both for row and column frequencies (Gotelli & Entsminger 2001). The matrix is first filled randomly using row and column frequencies as probabilities. Typically row and column sums are reached before all incidences are filled in. After that begins \dQuote{backtracking}, where some of the points are removed, and then filling is started again, and this backtracking is done so may times that all incidences will be filled into matrix. The \code{quasiswap} method is not sequential, but it produces a random incidence matrix with given marginal totals. Function \code{as.ts} transforms the simulated results of sequential methods into a time series or a \code{\link{ts}} object. This allows using analytic tools for time series in studying the sequences (see examples). Function \code{as.mcmc} transforms the simulated results of sequential methods into an \code{\link[coda]{mcmc}} object of the \pkg{coda} package. The \pkg{coda} package provides functions for the analysis of stationarity, adequacy of sample size, autocorrelation, need of burn-in and much more for sequential methods. Please consult the documentation of \pkg{coda} package. Function \code{density} provides an interface to the standard \code{\link{density}} function for the simulated values. Function \code{densityplot} is an interface to the \code{\link[lattice]{densityplot}} function of the \pkg{lattice} package. The \code{density} can be used meaningfully only for single statistics and must be plotted separately. The \code{densityplot} function can handle multiple statistics, and it plots the results directly. In addition to the density, the \code{densityplot} also shows the observed value of the statistic (provided it is within the graph limits). The \code{densityplot} function is defined as a generic function in the \pkg{lattice} package and you must either load the \pkg{lattice} library before calling \code{densityplot}, or use the longer form \code{densityplot.oecosimu} when you first time call the function. As a result of \code{method = "r2dtable"} in \code{oecosimu}, quantitative community null models are used to evaluate the statistic. This setting uses the \code{\link{r2dtable}} function to generate random matrices with fixed row and column totals (hypergeometric distribution). This null model is used in diversity partitioning function (see \code{\link{adipart}}). The \code{method} argument can be a function with first argument taking the community matrix, and optionally with \code{burnin} and \code{thin} argument. The function must return a matrix-like object with same dimensions. But be careful, blindly applying permuted matrices for null model testing can be dangerous. } \value{ Function \code{oecosimu} returns the result of \code{nestfun} added with a component called \code{oecosimu}. The \code{oecosimu} component contains the simulated values of the statistic (item \code{simulated}), the name of the \code{method}, \eqn{P} value (with given \code{alternative}), \eqn{z}-value of the statistic based on simulation (also known as standardized effect size), and the mean of simulations. } \references{ Gotelli, N.J. & Entsminger, N.J. (2001). Swap and fill algorithms in null model analysis: rethinking the knight's tour. \emph{Oecologia} 129, 281--291. Gotelli, N.J. & Entsminger, N.J. (2003). Swap algorithms in null model analysis. \emph{Ecology} 84, 532--535. Jonsson, B.G. (2001) A null model for randomization tests of nestedness in species assemblages. \emph{Oecologia} 127, 309--313. \enc{Miklós}{Miklos}, I. & Podani, J. (2004). Randomization of presence-absence matrices: comments and new algorithms. \emph{Ecology} 85, 86--92. Wright, D.H., Patterson, B.D., Mikkelson, G.M., Cutler, A. & Atmar, W. (1998). A comparative analysis of nested subset patterns of species composition. \emph{Oecologia} 113, 1--20. } \author{ Jari Oksanen } \note{ Functions \code{commsimulator} and \code{oecosimu} do not have default \code{nestfun} nor default \code{method}, because there is no clear natural choice. If you use these methods, you must be able to choose your own strategy. The choice of nestedness index is difficult because the functions seem to imply very different concepts of structure and randomness. The choice of swapping method is also problematic. Method \code{r00} has some heuristic value of being really random. However, it produces null models which are different from observed communities in most respects, and a \dQuote{significant} result may simply mean that not all species are equally common (\code{r0} is similar with this respect). It is also difficult to find justification for \code{r2}. The methods maintaining both row and column totals only study the community relations, but they can be very slow. Moreover, they regard marginal totals as constraints instead of results of occurrence patterns. You should evaluate timings in small trials (one cycle) before launching an extensive simulation. One swap is fast, but it changes data only little, and you may need long \code{burnin} and strong \code{thin}ning in large matrices. You should plot the simulated values to see that they are more or less stationary and there is no trend. Method \code{quasiswap} is implemented in C and it is much faster than \code{backtrack}. Method \code{backtrack} may be removed from later releases of \pkg{vegan} because it is slow, but it is still included for comparison. If you wonder about the name of \code{oecosimu}, look at journal names in the References (and more in \code{\link{nestedtemp}}). } \seealso{ \code{\link{r2dtable}} generates table with given marginals but with entries above one. Functions \code{\link{permatfull}} and \code{\link{permatswap}} generate Null models for count data. Function \code{\link[labdsv]{rndtaxa}} (\pkg{labdsv} package) randomizes a community table. See also \code{\link{nestedtemp}} (that also discusses other nestedness functions) and \code{\link{treedive}} for another application. } \examples{ ## Use the first eigenvalue of correspondence analysis as an index ## of structure: a model for making your own functions. data(sipoo) out <- oecosimu(sipoo, decorana, "swap", burnin=100, thin=10, statistic="evals") out ## Inspect the swap sequence as a time series object plot(as.ts(out)) lag.plot(as.ts(out)) acf(as.ts(out)) ## Density plot: needs lattice require(lattice) densityplot(out, as.table = TRUE) ## Use quantitative null models to compare ## mean Bray-Curtis dissimilarities data(dune) meandist <- function(x) mean(vegdist(x, "bray")) mbc1 <- oecosimu(dune, meandist, "r2dtable") mbc1 ## Define a custom function that shuffles ## cells in each rows f <- function(x) { apply(x, 2, function(z) sample(z, length(z))) } mbc2 <- oecosimu(as.matrix(dune), meandist, f) mbc2 } \keyword{ multivariate } \keyword{ datagen } vegan/man/nobs.adonis.Rd0000644000176200001440000000221011556057103014627 0ustar liggesusers\name{nobs.adonis} \alias{nobs.adonis} \alias{nobs.betadisper} \alias{nobs.cca} \alias{nobs.CCorA} \alias{nobs.decorana} \alias{nobs.isomap} \alias{nobs.metaMDS} \alias{nobs.pcnm} \alias{nobs.procrustes} \alias{nobs.rad} \alias{nobs.varpart} \alias{nobs.wcmdscale} \title{ Extract the Number of Observations from a vegan Fit. } \description{ Extract the number of \sQuote{observations} from a \pkg{vegan} model fit. } \usage{ \method{nobs}{adonis}(object, ...) } \arguments{ \item{object}{ A fitted model object. } \item{\dots}{ Further arguments to be passed to methods. } } \details{ Function \code{nobs} is generic in \R version 2.13.0, and \pkg{vegan} provides methods for objects from \code{\link{adonis}}, \code{\link{betadisper}}, \code{\link{cca}} and other related methods, \code{\link{CCorA}}, \code{\link{decorana}}, \code{\link{isomap}}, \code{\link{metaMDS}}, \code{\link{pcnm}}, \code{\link{procrustes}}, \code{\link{radfit}}, \code{\link{varpart}} and \code{\link{wcmdscale}}. } \value{ A single number, normally an interger, giving the number of observations. } \author{ Jari Oksanen } \keyword{models} vegan/man/nestedtemp.Rd0000644000176200001440000002141612062575412014574 0ustar liggesusers\encoding{UTF-8} \name{nestedtemp} \alias{nestedtemp} \alias{nestedchecker} \alias{nestedn0} \alias{nesteddisc} \alias{nestednodf} \alias{nestedbetasor} \alias{nestedbetajac} \alias{plot.nestedtemp} \alias{plot.nestednodf} \title{ Nestedness Indices for Communities of Islands or Patches } \description{ Patches or local communities are regarded as nested if they all could be subsets of the same community. In general, species poor communities should be subsets of species rich communities, and rare species should only occur in species rich communities. } \usage{ nestedchecker(comm) nestedn0(comm) nesteddisc(comm, niter = 200) nestedtemp(comm, ...) nestednodf(comm, order = TRUE, weighted = FALSE) nestedbetasor(comm) nestedbetajac(comm) \method{plot}{nestedtemp}(x, kind = c("temperature", "incidence"), col=rev(heat.colors(100)), names = FALSE, ...) \method{plot}{nestednodf}(x, col = "red", names = FALSE, ...) } \arguments{ \item{comm}{Community data.} \item{niter}{Number of iterations to reorder tied columns.} \item{x}{Result object for a \code{plot}.} \item{col}{Colour scheme for matrix temperatures.} \item{kind}{The kind of plot produced.} \item{names}{Label columns and rows in the plot using names in \code{comm}. If it is a logical vector of length 2, row and column labels are returned accordingly.} \item{order}{Order rows and columns by frequencies.} \item{weighted}{Use species abundances as weights of interactions.} \item{\dots}{Other arguments to functions.} } \details{ The nestedness functions evaluate alternative indices of nestedness. The functions are intended to be used together with Null model communities and used as an argument in \code{\link{oecosimu}} to analyse the non-randomness of results. Function \code{nestedchecker} gives the number of checkerboard units, or 2x2 submatrices where both species occur once but on different sites (Stone & Roberts 1990). Function \code{nestedn0} implements nestedness measure N0 which is the number of absences from the sites which are richer than the most pauperate site species occurs (Patterson & Atmar 1986). Function \code{nesteddisc} implements discrepancy index which is the number of ones that should be shifted to fill a row with ones in a table arranged by species frequencies (Brualdi & Sanderson 1999). The original definition arranges species (columns) by their frequencies, but did not have any method of handling tied frequencies. The \code{nesteddisc} function tries to order tied columns to minimize the discrepancy statistic but this is rather slow, and with a large number of tied columns there is no guarantee that the best ordering was found (argument \code{niter} gives the maximum number of tried orders). In that case a warning of tied columns will be issued. Function \code{nestedtemp} finds the matrix temperature which is defined as the sum of \dQuote{surprises} in arranged matrix. In arranged unsurprising matrix all species within proportion given by matrix fill are in the upper left corner of the matrix, and the surprise of the absence or presences is the diagonal distance from the fill line (Atmar & Patterson 1993). Function tries to pack species and sites to a low temperature (\enc{Rodríguez-Gironés}{Rodriguez-Girones} & Santamaria 2006), but this is an iterative procedure, and the temperatures usually vary among runs. Function \code{nestedtemp} also has a \code{plot} method which can display either incidences or temperatures of the surprises. Matrix temperature was rather vaguely described (Atmar & Patterson 1993), but \enc{Rodríguez-Gironés}{Rodriguez-Girones} & Santamaria (2006) are more explicit and their description is used here. However, the results probably differ from other implementations, and users should be cautious in interpreting the results. The details of calculations are explained in the \code{\link{vignette}} \emph{Design decisions and implementation} that you can read using functions \code{\link{vignette}} or \code{\link{vegandocs}}. Function \code{\link[bipartite]{nestedness}} in the \pkg{bipartite} package is a direct port of the BINMATNEST programme of \enc{Rodríguez-Gironés}{Rodriguez-Girones} & Santamaria (2006). Function \code{nestednodf} implements a nestedness metric based on overlap and decreasing fill (Almeida-Neto et al., 2008). Two basic properties are required for a matrix to have the maximum degree of nestedness according to this metric: (1) complete overlap of 1's from right to left columns and from down to up rows, and (2) decreasing marginal totals between all pairs of columns and all pairs of rows. The nestedness statistic is evaluated separately for columns (\code{N columns}) for rows (\code{N rows}) and combined for the whole matrix (\code{NODF}). If you set \code{order = FALSE}, the statistic is evaluated with the current matrix ordering allowing tests of other meaningful hypothesis of matrix structure than default ordering by row and column totals (breaking ties by total abundances when \code{weighted = TRUE}) (see Almeida-Neto et al. 2008). With \code{weighted = TRUE}, the function finds the weighted version of the index (Almeida-Neto & Ulrich, 2011). However, this requires quantitative null models for adequate testing. Functions \code{nestedbetasor} and \code{nestedbetajac} find multiple-site dissimilarities and decompose these into components of turnover and nestedness following Baselga (2010). This can be seen as a decomposition of beta diversity (see \code{\link{betadiver}}). Function \code{nestedbetasor} uses \enc{Sørensen}{Sorensen} dissimilarity and the turnover component is Simpson dissimilarity (Baselga 2010), and \code{nestedbetajac} uses analogous methods with the Jaccard index. The functions return a vector of three items: turnover, nestedness and their sum which is the multiple \enc{Sørensen}{Sorensen} or Jaccard dissimilarity. The last one is the total beta diversity (Baselga 2010). The functions will treat data as presence/absence (binary) and they can be used with binary null models (see \code{\link{commsimulator}}). The overall dissimilarity is constant in all null models that fix species (column) frequencies (\code{"c0"}), and all components are constant if row columns are also fixed (e.g., model \code{"quasiswap"}), and the functions are not meaningful with these null models. } \value{ The result returned by a nestedness function contains an item called \code{statistic}, but the other components differ among functions. The functions are constructed so that they can be handled by \code{\link{oecosimu}}. } \references{ Almeida-Neto, M., \enc{Gumarães}{Gumaraes}, P., \enc{Gumarães}{Gumaraes}, P.R., Loyola, R.D. & Ulrich, W. (2008). A consistent metric for nestedness analysis in ecological systems: reconciling concept and measurement. \emph{Oikos} 117, 1227--1239. Almeida-Neto, M. & Ulrich, W. (2011). A straightforward computational approach for measuring nestedness using quantitative matrices. \emph{Env. Mod. Software} 26, 173--178. Atmar, W. & Patterson, B.D. (1993). The measurement of order and disorder in the distribution of species in fragmented habitat. \emph{Oecologia} 96, 373--382. Baselga, A. (2010). Partitioning the turnover and nestedness components of beta diversity. \emph{Global Ecol. Biogeog.} 19, 134--143. Brualdi, R.A. & Sanderson, J.G. (1999). Nested species subsets, gaps, and discrepancy. \emph{Oecologia} 119, 256--264. Patterson, B.D. & Atmar, W. (1986). Nested subsets and the structure of insular mammalian faunas and archipelagos. \emph{Biol. J. Linnean Soc.} 28, 65--82. \enc{Rodríguez-Gironés}{Rodriguez-Girones}, M.A. & Santamaria, L. (2006). A new algorithm to calculate the nestedness temperature of presence-absence matrices. \emph{J. Biogeogr.} 33, 924--935. Stone, L. & Roberts, A. (1990). The checkerboard score and species distributions. \emph{Oecologia} 85, 74--79. Wright, D.H., Patterson, B.D., Mikkelson, G.M., Cutler, A. & Atmar, W. (1998). A comparative analysis of nested subset patterns of species composition. \emph{Oecologia} 113, 1--20. } \author{ Jari Oksanen and Gustavo Carvalho (\code{nestednodf}). } \seealso{ In general, the functions should be used with \code{\link{oecosimu}} which generates Null model communities to assess the non-randomness of nestedness patterns. } \examples{ data(sipoo) ## Matrix temperature out <- nestedtemp(sipoo) out plot(out) plot(out, kind="incid") ## Use oecosimu to assess the non-randomness of checker board units nestedchecker(sipoo) oecosimu(sipoo, nestedchecker, "quasiswap") ## Another Null model and standardized checkerboard score oecosimu(sipoo, nestedchecker, "r00", statistic = "C.score") } \keyword{ univar } vegan/man/multipart.Rd0000644000176200001440000001403112023317071014430 0ustar liggesusers\encoding{UTF-8} \name{multipart} \alias{multipart} \alias{multipart.default} \alias{multipart.formula} \title{Multiplicative Diversity Partitioning} \description{ In multiplicative diversity partitioning, mean values of alpha diversity at lower levels of a sampling hierarchy are compared to the total diversity in the entire data set or the pooled samples (gamma diversity). } \usage{ multipart(...) \method{multipart}{default}(y, x, index=c("renyi", "tsallis"), scales = 1, global = FALSE, relative = FALSE, nsimul=99, ...) \method{multipart}{formula}(formula, data, index=c("renyi", "tsallis"), scales = 1, global = FALSE, relative = FALSE, nsimul=99, ...) } \arguments{ \item{y}{A community matrix.} \item{x}{A matrix with same number of rows as in \code{y}, columns coding the levels of sampling hierarchy. The number of groups within the hierarchy must decrease from left to right. If \code{x} is missing, two levels are assumed: each row is a group in the first level, and all rows are in the same group in the second level.} \item{formula}{A two sided model formula in the form \code{y ~ x}, where \code{y} is the community data matrix with samples as rows and species as column. Right hand side (\code{x}) must grouping vaiables referring to levels of sampling hierarchy, terms from right to left will be treated as nested (first column is the lowest, last is the highest level, at least two levels specified). Interaction terms are not allowed.} \item{data}{A data frame where to look for variables defined in the right hand side of \code{formula}. If missing, variables are looked in the global environment.} \item{index}{Character, the entropy index to be calculated (see Details).} \item{relative}{Logical, if \code{TRUE} then beta diversity is standardized by its maximum (see Details).} \item{scales}{Numeric, of length 1, the order of the generalized diversity index to be used.} \item{global}{Logical, indicates the calculation of beta diversity values, see Details.} \item{nsimul}{Number of permutation to use if \code{matr} is not of class 'permat'. If \code{nsimul = 0}, only the \code{FUN} argument is evaluated. It is thus possible to reuse the statistic values without using a null model.} \item{\dots}{Other arguments passed to \code{\link{oecosimu}}, i.e. \code{method}, \code{thin} or \code{burnin}.} } \details{ Multiplicative diversity partitioning is based on Whittaker's (1972) ideas, that has recently been generalised to one parametric diversity families (i.e. \enc{Rényi}{Renyi} and Tsallis) by Jost (2006, 2007). Jost recommends to use the numbers equivalents (Hill numbers), instead of pure diversities, and proofs, that this satisfies the multiplicative partitioning requirements. The current implementation of \code{multipart} calculates Hill numbers based on the functions \code{\link{renyi}} and \code{\link{tsallis}} (provided as \code{index} argument). If values for more than one \code{scales} are desired, it should be done in separate runs, because it adds extra dimensionality to the implementation, which has not been resolved efficiently. Alpha diversities are then the averages of these Hill numbers for each hierarchy levels, the global gamma diversity is the alpha value calculated for the highest hierarchy level. When \code{global = TRUE}, beta is calculated relative to the global gamma value: \deqn{\beta_i = \gamma / \alpha_{i}}{beta_i = gamma / alpha_i} when \code{global = FALSE}, beta is calculated relative to local gamma values (local gamma means the diversity calculated for a particular cluster based on the pooled abundance vector): \deqn{\beta_ij = \alpha_{(i+1)j} / mean(\alpha_{ij})}{beta_ij = alpha_(i+1)j / mean(alpha_i)} where \eqn{j} is a particular cluster at hierarchy level \eqn{i}. Then beta diversity value for level \eqn{i} is the mean of the beta values of the clusters at that level, \eqn{\beta_{i} = mean(\beta_{ij})}. If \code{relative = TRUE}, the respective beta diversity values are standardized by their maximum possible values (\eqn{mean(\beta_{ij}) / \beta_{max,ij}}) given as \eqn{\beta_{max,ij} = n_{j}} (the number of lower level units in a given cluster \eqn{j}). The expected diversity components are calculated \code{nsimul} times by individual based randomisation of the community data matrix. This is done by the \code{"r2dtable"} method in \code{\link{oecosimu}} by default. } \value{ An object of class 'multipart' with same structure as 'oecosimu' objects. } \references{ Jost, L. (2006). Entropy and diversity. \emph{Oikos}, \bold{113}, 363--375. Jost, L. (2007). Partitioning diversity into independent alpha and beta components. \emph{Ecology}, \bold{88}, 2427--2439. Whittaker, R. (1972). Evolution and measurement of species diversity. \emph{Taxon}, \bold{21}, 213--251. } \author{\enc{Péter Sólymos}{Peter Solymos}, \email{solymos@ualberta.ca}} \seealso{See \code{\link{adipart}} for additive diversity partitioning, \code{\link{hiersimu}} for hierarchical null model testing and \code{\link{oecosimu}} for permutation settings and calculating \eqn{p}-values.} \examples{ ## NOTE: 'nsimul' argument usually needs to be >= 99 ## here much lower value is used for demonstration data(mite) data(mite.xy) data(mite.env) ## Function to get equal area partitions of the mite data cutter <- function (x, cut = seq(0, 10, by = 2.5)) { out <- rep(1, length(x)) for (i in 2:(length(cut) - 1)) out[which(x > cut[i] & x <= cut[(i + 1)])] <- i return(out)} ## The hierarchy of sample aggregation levsm <- data.frame( l1=1:nrow(mite), l2=cutter(mite.xy$y, cut = seq(0, 10, by = 2.5)), l3=cutter(mite.xy$y, cut = seq(0, 10, by = 5)), l4=cutter(mite.xy$y, cut = seq(0, 10, by = 10))) ## Multiplicative diversity partitioning multipart(mite, levsm, index="renyi", scales=1, nsimul=19) multipart(mite ~ ., levsm, index="renyi", scales=1, nsimul=19) multipart(mite ~ ., levsm, index="renyi", scales=1, nsimul=19, relative=TRUE) multipart(mite ~ ., levsm, index="renyi", scales=1, nsimul=19, global=TRUE) } \keyword{multivariate} vegan/man/mso.Rd0000644000176200001440000001365012056671653013232 0ustar liggesusers\name{mso} \alias{mso} \alias{msoplot} \title{ Functions for performing and displaying a spatial partitioning of cca or rda results} \description{ The function \code{mso} adds an attribute \code{vario} to an object of class \code{"cca"} that describes the spatial partitioning of the \code{\link{cca}} object and performs an optional permutation test for the spatial independence of residuals. The function \code{plot.mso} creates a diagnostic plot of the spatial partitioning of the \code{"cca"} object. } \usage{ mso(object.cca, object.xy, grain = 1, round.up = FALSE, permutations = FALSE) msoplot(x, alpha = 0.05, explained = FALSE, ylim = NULL, legend = "topleft", ...) } \arguments{ \item{object.cca}{ An object of class cca, created by the \code{\link{cca}} or \code{\link{rda}} function.} \item{object.xy}{ A vector, matrix or data frame with the spatial coordinates of the data represented by object.cca. Must have the same number of rows as \code{object.cca$CA$Xbar} (see \code{\link{cca.object}}). } \item{grain}{ Interval size for distance classes.} \item{round.up}{ Determines the choice of breaks. If false, distances are rounded to the nearest multiple of grain. If true, distances are rounded to the upper multiple of grain.} \item{permutations}{ If false, suppresses the permutation test. If an integer, determines the number of permutations for the Mantel test of spatial independence of residual inertia.} \item{x}{A result object of \code{mso}.} \item{alpha}{ Significance level for the two-sided permutation test of the Mantel statistic for spatial independence of residual inertia and for the point-wise envelope of the variogram of the total variance. A Bonferroni-type correction can be achieved by dividing the overall significance value (e.g. 0.05) by the number of distance classes.} \item{explained}{ If false, suppresses the plotting of the variogram of explained variance.} \item{ylim}{Limits for y-axis.} \item{legend}{The x and y co-ordinates to be used to position the legend. They can be specified by keyword or in any way which is accepted by \code{\link{legend}}.} \item{\dots}{Other arguments passed to functions.} } \details{ The Mantel test is an adaptation of the function \code{\link{mantel}} of the \pkg{vegan} package to the parallel testing of several distance classes. It compares the mean inertia in each distance class to the pooled mean inertia of all other distance classes. If there are explanatory variables (RDA, CCA, pRDA, pCCA) and a significance test for residual autocorrelation was performed when running the function \code{mso}, the function \code{plot.mso} will print an estimate of how much the autocorrelation (based on significant distance classes) causes the global error variance of the regression analysis to be underestimated } \value{ The function \code{mso} returns an amended \code{cca} or \code{rda} object with the additional attributes \code{grain}, \code{H}, \code{H.test} and \code{vario}. \item{grain}{The grain attribute defines the interval size of the distance classes .} \item{H }{ H is an object of class 'dist' and contains the geographic distances between observations.} \item{H.test }{ H.test contains a set of dummy variables that describe which pairs of observations (rows = elements of \code{object$H}) fall in which distance class (columns). } \item{vario }{ The vario attribute is a data frame that contains some or all of the following components for the rda case (cca case in brackets): \describe{ \item{\code{H}}{Distance class as multiples of grain.} \item{\code{Dist}}{ Average distance of pairs of observations in distance class H.} \item{n }{ Number of unique pairs of observations in distance class H.} \item{\code{All}}{ Empirical (chi-square) variogram of total variance (inertia).} \item{\code{Sum}}{ Sum of empirical (chi-square) variograms of explained and residual variance (inertia).} \item{\code{CA}}{ Empirical (chi-square) variogram of residual variance (inertia).} \item{\code{CCA}}{ Empirical (chi-square) variogram of explained variance (inertia).} \item{\code{pCCA}}{ Empirical (chi-square) variogram of conditioned variance (inertia).} \item{\code{se}}{ Standard error of the empirical (chi-square) variogram of total variance (inertia).} \item{\code{CA.signif}}{P-value of permutation test for spatial independence of residual variance (inertia).} } } } \references{ Wagner, H.H. 2004. Direct multi-scale ordination with canonical correspondence analysis. \emph{Ecology} 85: 342--351. } \author{ The responsible author was Helene Wagner.} \note{ The function is based on the code published in the Ecological Archives E085-006 (\url{http://www.esapubs.org/archive/ecol/E085/006/default.htm}). } \seealso{ Function \code{\link{cca}} and \code{\link{rda}}, \code{\link{cca.object}}. } \examples{ ## Reconstruct worked example of Wagner (submitted): X <- matrix(c(1, 2, 3, 2, 1, 0), 3, 2) Y <- c(3, -1, -2) tmat <- c(1:3) ## Canonical correspondence analysis (cca): Example.cca <- cca(X, Y) Example.cca <- mso(Example.cca, tmat) msoplot(Example.cca) Example.cca$vario ## Correspondence analysis (ca): Example.ca <- mso(cca(X), tmat) msoplot(Example.ca) ## Unconstrained ordination with test for autocorrelation ## using oribatid mite data set as in Wagner (2004) data(mite) data(mite.env) data(mite.xy) mite.cca <- cca(log(mite + 1)) mite.cca <- mso(mite.cca, mite.xy, grain = 1, permutations = 100) msoplot(mite.cca) mite.cca ## Constrained ordination with test for residual autocorrelation ## and scale-invariance of species-environment relationships mite.cca <- cca(log(mite + 1) ~ SubsDens + WatrCont + Substrate + Shrub + Topo, mite.env) mite.cca <- mso(mite.cca, mite.xy, permutations = 100) msoplot(mite.cca) mite.cca } \keyword{ spatial } \keyword{ multivariate } vegan/man/mrpp.Rd0000644000176200001440000002333112023322311013361 0ustar liggesusers\name{mrpp} \alias{mrpp} \alias{meandist} \alias{summary.meandist} \alias{plot.meandist} \title{Multi Response Permutation Procedure and Mean Dissimilarity Matrix} \description{ Multiple Response Permutation Procedure (MRPP) provides a test of whether there is a significant difference between two or more groups of sampling units. Function \code{meandist} finds the mean within and between block dissimilarities.} \usage{ mrpp(dat, grouping, permutations = 999, distance = "euclidean", weight.type = 1, strata) meandist(dist, grouping, ...) \method{summary}{meandist}(object, ...) \method{plot}{meandist}(x, kind = c("dendrogram", "histogram"), cluster = "average", ylim, axes = TRUE, ...) } \arguments{ \item{dat}{data matrix or data frame in which rows are samples and columns are response variable(s), or a dissimilarity object or a symmetric square matrix of dissimilarities.} \item{grouping}{ Factor or numeric index for grouping observations.} \item{permutations}{Number of permutations to assess the significance of the MRPP statistic, \eqn{delta}.} \item{distance}{Choice of distance metric that measures the dissimilarity between two observations . See \code{\link{vegdist}} for options. This will be used if \code{dat} was not a dissimilarity structure of a symmetric square matrix.} \item{weight.type}{ choice of group weights. See Details below for options.} \item{strata}{An integer vector or factor specifying the strata for permutation. If supplied, observations are permuted only within the specified strata.} \item{dist}{A \code{\link{dist}} object of dissimilarities, such as produced by functions \code{\link{dist}}, \code{\link{vegdist}} or \code{\link{designdist}}.}. \item{object, x}{A \code{meandist} result object.} \item{kind}{Draw a dendrogram or a histogram; see Details.} \item{cluster}{A clustering method for the \code{\link{hclust}} function for \code{kind = "dendrogram"}. Any \code{hclust} method can be used, but perhaps only \code{"average"} and \code{"single"} make sense.} \item{ylim}{Limits for vertical axes (optional).} \item{axes}{Draw scale for the vertical axis.} \item{\dots}{Further arguments passed to functions.} } \details{ Multiple Response Permutation Procedure (MRPP) provides a test of whether there is a significant difference between two or more groups of sampling units. This difference may be one of location (differences in mean) or one of spread (differences in within-group distance; cf. Warton et al. 2012). Function \code{mrpp} operates on a \code{data.frame} matrix where rows are observations and responses data matrix. The response(s) may be uni- or multivariate. The method is philosophically and mathematically allied with analysis of variance, in that it compares dissimilarities within and among groups. If two groups of sampling units are really different (e.g. in their species composition), then average of the within-group compositional dissimilarities ought to be less than the average of the dissimilarities between two random collection of sampling units drawn from the entire population. The mrpp statistic \eqn{\delta} is the overall weighted mean of within-group means of the pairwise dissimilarities among sampling units. The choice of group weights is currently not clear. The \code{mrpp} function offers three choices: (1) group size (\eqn{n}), (2) a degrees-of-freedom analogue (\eqn{n-1}), and (3) a weight that is the number of unique distances calculated among \eqn{n} sampling units (\eqn{n(n-1)/2}). The \code{mrpp} algorithm first calculates all pairwise distances in the entire dataset, then calculates \eqn{\delta}. It then permutes the sampling units and their associated pairwise distances, and recalculates \eqn{\delta} based on the permuted data. It repeats the permutation step \code{permutations} times. The significance test is the fraction of permuted deltas that are less than the observed delta, with a small sample correction. The function also calculates the change-corrected within-group agreement \eqn{A = 1 -\delta/E(\delta)}, where \eqn{E(\delta)} is the expected \eqn{\delta} assessed as the average of dissimilarities. If the first argument \code{dat} can be interpreted as dissimilarities, they will be used directly. In other cases the function treats \code{dat} as observations, and uses \code{\link{vegdist}} to find the dissimilarities. The default \code{distance} is Euclidean as in the traditional use of the method, but other dissimilarities in \code{\link{vegdist}} also are available. Function \code{meandist} calculates a matrix of mean within-cluster dissimilarities (diagonal) and between-cluster dissimilarities (off-diagonal elements), and an attribute \code{n} of \code{grouping} counts. Function \code{summary} finds the within-class, between-class and overall means of these dissimilarities, and the MRPP statistics with all \code{weight.type} options and the Classification Strength, CS (Van Sickle and Hughes, 2000). CS is defined for dissimiliraties as \eqn{\bar{B} - \bar{W}}{Bbar-Wbar}, where \eqn{\bar{B}}{Bbar} is the mean between cluster dissimilarity and \eqn{\bar{W}}{Wbar} is the mean within cluster dissimilarity with \code{weight.type = 1}. The function does not perform significance tests for these statistics, but you must use \code{mrpp} with appropriate \code{weight.type}. There is currently no significance test for CS, but \code{mrpp} with \code{weight.type = 1} gives the correct test for \eqn{\bar{W}}{Wbar} and a good approximation for CS. Function \code{plot} draws a dendrogram or a histogram of the result matrix based on the within-group and between group dissimilarities. The dendrogram is found with the method given in the \code{cluster} argument using function \code{\link{hclust}}. The terminal segments hang to within-cluster dissimilarity. If some of the clusters are more heterogeneous than the combined class, the leaf segment are reversed. The histograms are based on dissimilarites, but ore otherwise similar to those of Van Sickle and Hughes (2000): horizontal line is drawn at the level of mean between-cluster dissimilarity and vertical lines connect within-cluster dissimilarities to this line. } \value{ The function returns a list of class mrpp with following items: \item{call }{ Function call.} \item{delta }{The overall weighted mean of group mean distances.} \item{E.delta}{expected delta, under the null hypothesis of no group structure. This is the mean of original dissimilarities.} \item{CS}{Classification strength (Van Sickle and Hughes, 2000). Currently not implemented and always \code{NA}.} \item{n}{Number of observations in each class.} \item{classdelta}{Mean dissimilarities within classes. The overall \eqn{\delta} is the weighted average of these values with given \code{weight.type}}. \item{Pvalue}{Significance of the test.} \item{A}{A chance-corrected estimate of the proportion of the distances explained by group identity; a value analogous to a coefficient of determination in a linear model.} \item{distance}{Choice of distance metric used; the "method" entry of the dist object.} \item{weight.type}{The choice of group weights used.} \item{boot.deltas}{The vector of "permuted deltas," the deltas calculated from each of the permuted datasets. The distribution of this item can be inspected with \code{\link{density.mrpp}} function.} \item{permutations}{The number of permutations used.} } \references{ B. McCune and J. B. Grace. 2002. \emph{Analysis of Ecological Communities.} MjM Software Design, Gleneden Beach, Oregon, USA. P. W. Mielke and K. J. Berry. 2001. \emph{Permutation Methods: A Distance Function Approach.} Springer Series in Statistics. Springer. J. Van Sickle and R. M. Hughes 2000. Classification strengths of ecoregions, catchments, and geographic clusters of aquatic vertebrates in Oregon. \emph{J. N. Am. Benthol. Soc.} 19:370--384. Warton, D.I., Wright, T.W., Wang, Y. 2012. Distance-based multivariate analyses confound location and dispersion effects. \emph{Methods in Ecology and Evolution}, 3, 89--101 } \author{ M. Henry H. Stevens \email{HStevens@muohio.edu} and Jari Oksanen. } \note{ This difference may be one of location (differences in mean) or one of spread (differences in within-group distance). That is, it may find a significant difference between two groups simply because one of those groups has a greater dissimilarities among its sampling units. Most \code{mrpp} models can be analysed with \code{\link{adonis}} which seems not suffer from the same problems as \code{mrpp} and is a more robust alternative. } \seealso{ \code{\link{anosim}} for a similar test based on ranks, and \code{\link{mantel}} for comparing dissimilarities against continuous variables, and \code{\link{vegdist}} for obtaining dissimilarities, \code{\link{adonis}} is a more robust alternative in most cases. } \examples{ data(dune) data(dune.env) dune.mrpp <- mrpp(dune, dune.env$Management) dune.mrpp # Save and change plotting parameters def.par <- par(no.readonly = TRUE) layout(matrix(1:2,nr=1)) plot(dune.ord <- metaMDS(dune), type="text", display="sites" ) ordihull(dune.ord, dune.env$Management) with(dune.mrpp, { fig.dist <- hist(boot.deltas, xlim=range(c(delta,boot.deltas)), main="Test of Differences Among Groups") abline(v=delta); text(delta, 2*mean(fig.dist$counts), adj = -0.5, expression(bold(delta)), cex=1.5 ) } ) par(def.par) ## meandist dune.md <- with(dune.env, meandist(vegdist(dune), Management)) dune.md summary(dune.md) plot(dune.md) plot(dune.md, kind="histogram") } \keyword{ multivariate } \keyword{ nonparametric } \keyword{htest} vegan/man/monoMDS.Rd0000644000176200001440000001763112062575412013744 0ustar liggesusers\name{monoMDS} \alias{monoMDS} \alias{scores.monoMDS} \alias{plot.monoMDS} \title{ Global and Local Non-metric Multidimensional Scaling and Linear and Hybrid Scaling } \description{ Function implements Kruskal's (1964a,b) non-metric multidimensional scaling (NMDS) using monotone regression and primary (\dQuote{weak}) treatment of ties. In addition to traditional global NMDS, the function implements local NMDS, linear and hybrid multidimensional scaling. } \usage{ monoMDS(dist, y, k = 2, model = c("global", "local", "linear", "hybrid"), threshold = 0.8, maxit = 200, weakties = TRUE, stress = 1, scaling = TRUE, pc = TRUE, smin = 1e-4, sfgrmin = 1e-7, sratmax=0.99999, ...) \method{scores}{monoMDS}(x, choices = NA, ...) \method{plot}{monoMDS}(x, choices = c(1,2), type = "t", ...) } \arguments{ \item{dist}{Input dissimilarities.} \item{y}{Starting configuration. A random configuration will be generated if this is missing.} \item{k}{Number of dimensions. NB., the number of points \eqn{n} should be \eqn{n > 2k + 1}{n > 2*k + 1}, and preferably higher in non-metric MDS.} \item{model}{MDS model: \code{"global"} is normal non-metric MDS with a monotone regression, \code{"local"} is non-metric MDS with separate regressions for each point, \code{"linear"} uses linear regression, and \code{"hybrid"} uses linear regression for dissimilarities below a threshold in addition to monotone regression. See Details.} \item{threshold}{Dissimilarity below which linear regression is used alternately with monotone regression. } \item{maxit}{Maximum number of iterations.} \item{weakties}{Use primary or weak tie treatment, where equal observed dissimilarities are allowed to have different fitted values. if \code{FALSE}, then secondary (strong) tie treatment is used, and tied values are not broken.} \item{stress}{Use stress type 1 or 2 (see Details).} \item{scaling}{Scale final scores to unit root mean squares.} \item{pc}{Rotate final scores to principal components.} \item{smin, sfgrmin, sratmax}{Convergence criteria: iterations stop when stress drops below \code{smin}, scale factor of the gradient drops below \code{sfgrmin}, or stress ratio goes over \code{sratmax} (but is still \eqn{< 1}).} \item{x}{A \code{monoMDS} result.} \item{choices}{Dimensions returned or plotted. The default \code{NA} returns all dimensions. } \item{type}{The type of the plot: \code{"t"} for text, \code{"p"} for points, and \code{"n"} for none.} \item{\dots}{Other parameters to the functions (ignored in \code{monoMDS}, passed to graphical functions in \code{plot}.).} } \details{ There are several versions of non-metric multidimensional scaling in \R, but \code{monoMDS} offers the following unique combination of features: \itemize{ \item \dQuote{Weak} treatment of ties (Kruskal 1964a,b), where tied dissimilarities can be broken in monotone regression. This is especially important for cases where compared sites share no species and dissimilarities are tied to their maximum value of one. Breaking ties allows these points to be at different distances and can help in recovering very long coenoclines (gradients). Function \code{\link[smacof]{smacofSym}} (\pkg{smacof} package) also has adequate tie treatment. \item Handles missing values in a meaningful way. \item Offers \dQuote{local} and \dQuote{hybrid} scaling in addition to usual \dQuote{global} NMDS (see below). \item Uses fast compiled code (\code{\link[MASS]{isoMDS}} of the \pkg{MASS} package also uses compiled code). } Function \code{monoMDS} uses Kruskal's (1964b) original monotone regression to minimize the stress. There are two alternatives of stress: Kruskal's (1964a,b) original or \dQuote{stress 1} and an alternative version or \dQuote{stress 2} (Sibson 1972). Both of these stresses can be expressed with a general formula \deqn{s^2 = \frac{\sum (d - \hat d)^2}{\sum(d - d_0)^2}}{stress^2 = sum (d-dhat)^2/ sum (d-dnull)^2} where \eqn{d} are distances among points in ordination configuration, \eqn{\hat d}{dhat} are the fitted ordination distances, and \eqn{d_0}{dnull} are the ordination distances under null model. For \dQuote{stress 1} \eqn{d_0 = 0}{dnull = 0}, and for \dQuote{stress 2} \eqn{d_0 = \bar{d}}{dnull = dbar} or mean distances. \dQuote{Stress 2} can be expressed as \eqn{s^2 = 1 - R^2}{stress^2 = 1 - R2}, where\eqn{R^2}{R2} is squared correlation between fitted values and ordination distances, and so related to the \dQuote{linear fit} of \code{\link{stressplot}}. Function \code{monoMDS} can fit several alternative NMDS variants that can be selected with argument \code{model}. The default \code{model = "global"} fits global NMDS, or Kruskal's (1964a,b) original NMDS similar to \code{\link[MASS]{isoMDS}} (\pkg{MASS}) or \code{\link[smacof]{smacofSym}} (\pkg{smacof}). Alternative \code{model = "local"} fits local NMDS where independent monotone regression is used for each point (Sibson 1972). Alternative \code{model = "linear"} fits a linear MDS. This fits a linear regression instead of monotone, and is not identical to metric scaling or principal coordinates analysis (\code{\link{cmdscale}}) that performs an eigenvector decomposition of dissimilarities (Gower 1966). Alternative \code{model = "hybrid"} implements hybrid MDS that uses monotone regression for all points and linear regression for dissimilarities below or at a \code{threshold} dissimilarity in alternating steps (Faith et al. 1987). Function \code{\link{stressplot}} can be used to display the kind of regression in each \code{model}. Scaling, orientation and direction of the axes is arbitrary. However, the function always centres the axes, and the default \code{scaling} is to scale the configuration ot unit root mean square and to rotate the axes (argument \code{pc}) to principal components so that the first dimension shows the major variation. It is possible to rotate the solution so that the first axis is parallel to a given environmental variable using fuction \code{\link{metaMDSrotate}}. } \value{ Returns an object of class \code{"monoMDS"}. The final scores are returned in item \code{points} (function \code{scores} extracts these results), and the stress in item \code{stress}. In addition, there is a large number of other items (but these may change without notice in the future releases). } \references{ Faith, D.P., Minchin, P.R and Belbin, L. 1987. Compositional dissimilarity as a robust measure of ecological distance. \emph{Vegetatio} 69, 57--68. Gower, J.C. (1966). Some distance properties of latent root and vector methods used in multivariate analysis. \emph{Biometrika} 53, 325--328. Kruskal, J.B. 1964a. Multidimensional scaling by optimizing goodness-of-fit to a nonmetric hypothesis. \emph{Psychometrika} 29, 1--28. Kruskal, J.B. 1964b. Nonmetric multidimensional scaling: a numerical method. \emph{Psychometrika} 29, 115--129. Minchin, P.R. 1987. An evaluation of relative robustness of techniques for ecological ordinations. \emph{Vegetatio} 69, 89--107. Sibson, R. 1972. Order invariant methods for data analysis. \emph{Journal of the Royal Statistical Society B} 34, 311--349. } \author{ Peter R. Michin (Fortran core) and Jari Oksanen (R interface). } \note{ This is the default NMDS function used in \code{\link{metaMDS}}. Function \code{\link{metaMDS}} adds support functions so that NMDS can be run like recommended by Minchin (1987). } \seealso{ \code{\link[vegan]{metaMDS}} for the \pkg{vegan} way of running NMDS, and \code{\link[MASS]{isoMDS}} and \code{\link[smacof]{smacofSym}} for some alternative implementations of NMDS. } \examples{ data(dune) dis <- vegdist(dune) m <- monoMDS(dis, model = "loc") m plot(m) } \keyword{ multivariate } vegan/man/model.matrix.cca.Rd0000644000176200001440000000335311264571402015552 0ustar liggesusers\name{model.matrix.cca} \Rdversion{1.1} \alias{model.matrix.cca} \alias{model.frame.cca} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Reconstruct Model Frame and Model Matrices of Constrained Ordination } \description{ Function \code{model.frame.cca} reconstructs a \code{\link{data.frame}} with the variables used in the constrained ordination method (\code{\link{cca}}, \code{\link{rda}} or \code{\link{capscale}}. Function \code{model.matrix.cca} creates a list of design matrices used in constrained ordination. The items of the list are called \code{Conditions} and \code{Constraints}. If either partial (\code{Conditions}) or constrained component was missing, a single matrix is returned. } \usage{ \method{model.frame}{cca}(formula, ...) \method{model.matrix}{cca}(object, ...) } \arguments{ \item{formula, object}{ A constrained ordination result object from which the needed information is extracted. } \item{\dots}{ Other arguments passed to the default method of the function. } } \details{ The constrained ordination method objects do not save data on model frame or design matrix, and the functions must reconstruct the information in the session. This will fail if the data sets and variables of the original model are unavailable. } \value{ Returns a data frame (\code{model.frame}) or an unnnamed matrix or a list of two matrices called \code{Constraints} and \code{Conditions} (\code{model.matrix}). } \author{ Jari Oksanen } \seealso{ \code{\link{model.frame}}, \code{\link{model.matrix}}. } \examples{ data(dune) data(dune.env) mod <- cca(dune ~ poly(A1, 2) + Management + Use, dune.env) model.frame(mod) model.matrix(mod) } \keyword{ models } \keyword{ multivariate } vegan/man/mite.Rd0000644000176200001440000000354411016553773013370 0ustar liggesusers\name{mite} \alias{mite} \alias{mite.env} \alias{mite.pcnm} \alias{mite.xy} \docType{data} \title{Oribatid Mite Data with Explanatory Variables } \description{ Oribatid mite data. 70 soil cores collected by Daniel Borcard in 1989. See Borcard et al. (1992, 1994) for details. } \usage{ data(mite) data(mite.env) data(mite.pcnm) data(mite.xy) } \format{ There are three linked data sets: \code{mite} that contains the data on 35 species of Oribatid mites, \code{mite.env} that contains environmental data in the same sampling sites, \code{mite.xy} that contains geographic coordinates, and \code{mite.pcnm} that contains 22 PCNM base functions (columns) computed from the geographic coordinates of the 70 sampling sites (Borcard & Legendre 2002). The whole sampling area was 2.5 m x 10 m in size. The fields in the environmental data are: \describe{ \item{SubsDens}{Substrate density (g/L)} \item{WatrCont}{Water content of the substrate (g/L)} \item{Substrate}{Substrate type, factor with levels \code{Sphagn1, Sphagn2 Sphagn3 Sphagn Litter Barepeat Interface} } \item{Shrub}{Shrub density, an ordered factor with levels \code{1} < \code{2} < \code{3}} \item{Topo}{Microtopograhy, a factor with levels \code{Blanket} and \code{Hummock}} } } \source{ Pierre Legendre } \references{ Borcard, D., P. Legendre and P. Drapeau. 1992. Partialling out the spatial component of ecological variation. Ecology 73: 1045-1055. Borcard, D. and P. Legendre. 1994. Environmental control and spatial structure in ecological communities: an example using Oribatid mites (Acari, Oribatei). Environmental and Ecological Statistics 1: 37-61. Borcard, D. and P. Legendre. 2002. All-scale spatial analysis of ecological data by means of principal coordinates of neighbour matrices. Ecological Modelling 153: 51-68. } \examples{ data(mite) } \keyword{datasets} vegan/man/metaMDS.Rd0000644000176200001440000004155212116326046013716 0ustar liggesusers\encoding{UTF-8} \name{metaMDS} \alias{metaMDS} \alias{metaMDSdist} \alias{metaMDSiter} \alias{metaMDSredist} \alias{initMDS} \alias{postMDS} \alias{plot.metaMDS} \alias{points.metaMDS} \alias{text.metaMDS} \alias{scores.metaMDS} \title{Nonmetric Multidimensional Scaling with Stable Solution from Random Starts, Axis Scaling and Species Scores} \description{Function \code{metaMDS} performs Nonmetric Multidimensional Scaling (NMDS), and tries to find a stable solution using several random starts. In addition, it standardizes the scaling in the result, so that the configurations are easier to interpret, and adds species scores to the site ordination. The \code{metaMDS} function does not provide actual NMDS, but it calls another function for the purpose. Currently \code{\link{monoMDS}} is the default choice, and it is also possible to call the \code{\link[MASS]{isoMDS}} (\pkg{MASS} package). } \usage{ metaMDS(comm, distance = "bray", k = 2, trymax = 20, engine = c("monoMDS", "isoMDS"), autotransform =TRUE, noshare = (engine == "isoMDS"), wascores = TRUE, expand = TRUE, trace = 1, plot = FALSE, previous.best, ...) \method{plot}{metaMDS}(x, display = c("sites", "species"), choices = c(1, 2), type = "p", shrink = FALSE, ...) \method{points}{metaMDS}(x, display = c("sites", "species"), choices = c(1,2), shrink = FALSE, select, ...) \method{text}{metaMDS}(x, display = c("sites", "species"), labels, choices = c(1,2), shrink = FALSE, select, ...) \method{scores}{metaMDS}(x, display = c("sites", "species"), shrink = FALSE, choices, ...) metaMDSdist(comm, distance = "bray", autotransform = TRUE, noshare = TRUE, trace = 1, commname, zerodist = "ignore", distfun = vegdist, ...) metaMDSiter(dist, k = 2, trymax = 20, trace = 1, plot = FALSE, previous.best, engine = "monoMDS", maxit = 200, ...) initMDS(x, k=2) postMDS(X, dist, pc=TRUE, center=TRUE, halfchange, threshold=0.8, nthreshold=10, plot=FALSE, ...) metaMDSredist(object, ...) } \arguments{ \item{comm}{Community data. Alternatively, dissimilarities either as a \code{\link{dist}} structure or as a symmetric square matrix. In the latter case all other stages are skipped except random starts and centring and pc rotation of axes. } \item{distance}{Dissimilarity index used in \code{\link{vegdist}}.} \item{k}{Number of dimensions. NB., the number of points \eqn{n} should be \eqn{n > 2k + 1}{n > 2*k + 1}, and preferably higher in non-metric MDS.} \item{trymax}{Maximum number of random starts in search of stable solution.} \item{engine}{The function used for MDS. The default is to use the \code{\link{monoMDS}} function in \pkg{vegan}, but for backward compatibility it is also possible to use \code{\link{isoMDS}} of \pkg{MASS}.} \item{autotransform}{Use simple heuristics for possible data transformation of typical community data (see below). If you do not have community data, you should probably set \code{autotransform = FALSE}.} \item{noshare}{Triggering of calculation step-across or extended dissimilarities with function \code{\link{stepacross}}. The argument can be logical or a numerical value greater than zero and less than one. If \code{TRUE}, extended dissimilarities are used always when there are no shared species between some sites, if \code{FALSE}, they are never used. If \code{noshare} is a numerical value, \code{\link{stepacross}} is used when the proportion of site pairs with no shared species exceeds \code{noshare}. The number of pairs with no shared species is found with \code{\link{no.shared}} function, and \code{noshare} has no effect if input data were dissimilarities instead of community data.} \item{wascores}{Calculate species scores using function \code{\link{wascores}}.} \item{expand}{Expand weighted averages of species in \code{\link{wascores}}.} \item{trace}{Trace the function; \code{trace = 2} or higher will be more voluminous.} \item{plot}{Graphical tracing: plot interim results. You may want to set \code{par(ask = TRUE)} with this option.} \item{previous.best}{Start searches from a previous solution.} \item{x}{\code{metaMDS} result (or a dissimilarity structure for \code{initMDS}.} \item{choices}{Axes shown.} \item{type}{Plot type: \code{"p"} for points, \code{"t"} for text, and \code{"n"} for axes only.} \item{display}{Display \code{"sites"} or \code{"species"}.} \item{shrink}{Shrink back species scores if they were expanded originally.} \item{labels}{Optional test to be used instead of row names.} \item{select}{Items to be displayed. This can either be a logical vector which is \code{TRUE} for displayed items or a vector of indices of displayed items.} \item{X}{Configuration from multidimensional scaling. } \item{commname}{The name of \code{comm}: should not be given if the function is called directly.} \item{zerodist}{Handling of zero dissimilarities: either \code{"fail"} or \code{"add"} a small positive value, or \code{"ignore"}. \code{\link{monoMDS}} accepts zero dissimilarities and the default is \code{zerodist = "ignore"}, but with \code{\link[MASS]{isoMDS}} you may need to set \code{zerodist = "add"}.} \item{distfun}{Dissimilarity function. Any function returning a \code{dist} object and accepting argument \code{method} can be used (but some extra arguments may cause name conflicts).} \item{maxit}{Maximum number of iterations in the single NMDS run; passed to the \code{engine} function \code{\link{monoMDS}} or \code{\link[MASS]{isoMDS}}.} \item{dist}{Dissimilarity matrix used in multidimensional scaling. } \item{pc}{Rotate to principal components. } \item{center}{Centre the configuration. } \item{halfchange}{Scale axes to half-change units. This defaults \code{TRUE} when dissimilarities were evaluated within \code{metaMDS} and the dissimilarity index has an upper limit of \eqn{1}. If \code{FALSE}, the ordination dissimilarities are scaled to the same range as the input dissimilarities.} \item{threshold}{Largest dissimilarity used in half-change scaling. } \item{nthreshold}{ Minimum number of points in half-change scaling. } \item{object}{A result object from \code{metaMDS}.} \item{\dots}{Other parameters passed to functions. Function \code{metaMDS} passes all arguments to its component functions \code{metaMDSdist}, \code{metaMDSiter}, \code{postMDS}, and to \code{distfun} and \code{engine}.} } \details{ Non-metric Multidimensional Scaling (NMDS) is commonly regarded as the most robust unconstrained ordination method in community ecology (Minchin 1987). Function \code{metaMDS} is a wrapper function that calls several other functions to combine Minchin's (1987) recommendations into one command. The complete steps in \code{metaMDS} are: \enumerate{ \item Transformation: If the data values are larger than common abundance class scales, the function performs a Wisconsin double standardization (\code{\link{wisconsin}}). If the values look very large, the function also performs \code{\link{sqrt}} transformation. Both of these standardizations are generally found to improve the results. However, the limits are completely arbitrary (at present, data maximum 50 triggers \code{\link{sqrt}} and \eqn{>9} triggers \code{\link{wisconsin}}). If you want to have a full control of the analysis, you should set \code{autotransform = FALSE} and standardize and transform data independently. The \code{autotransform} is intended for community data, and for other data types, you should set \code{autotransform = FALSE}. This step is perfomed using \code{metaMDSdist}. \item Choice of dissimilarity: For a good result, you should use dissimilarity indices that have a good rank order relation to ordering sites along gradients (Faith et al. 1987). The default is Bray-Curtis dissimilarity, because it often is the test winner. However, any other dissimilarity index in \code{\link{vegdist}} can be used. Function \code{\link{rankindex}} can be used for finding the test winner for you data and gradients. The default choice may be bad if you analyse other than community data, and you should probably select an appropriate index using argument \code{distance}. This step is performed using \code{metaMDSdist}. \item Step-across dissimilarities: Ordination may be very difficult if a large proportion of sites have no shared species. In this case, the results may be improved with \code{\link{stepacross}} dissimilarities, or flexible shortest paths among all sites. The default NMDS \code{engine} is \code{\link{monoMDS}} which is able to break tied values at the maximum dissimilarity, and this often is sufficient to handle cases with no shared species, and therefore the default is not to use \code{\link{stepacross}} with \code{\link{monoMDS}}. Function \code{\link[MASS]{isoMDS}} does not handle tied values adequately, and therefore the default is to use \code{\link{stepacross}} always when there are sites with no shared species with \code{engine = "isoMDS"}. The \code{\link{stepacross}} is triggered by option \code{noshare}. If you do not like manipulation of original distances, you should set \code{noshare = FALSE}. This step is skipped if input data were dissimilarities instead of community data. This step is performed using \code{metaMDSdist}. \item NMDS with random starts: NMDS easily gets trapped into local optima, and you must start NMDS several times from random starts to be confident that you have found the global solution. The strategy in \code{metaMDS} is to first run NMDS starting with the metric scaling (\code{\link{cmdscale}} which usually finds a good solution but often close to a local optimum), or use the \code{previous.best} solution if supplied, and take its solution as the standard (\code{Run 0}). Then \code{metaMDS} starts NMDS from several random starts (maximum number is given by \code{trymax}). Function \code{\link{monoMDS}} defaults random starts, but \code{\link{isoMDS}} defaults to \code{\link{cmdscale}}, and there random starts are generated by \code{initMDS}. If a solution is better (has a lower stress) than the previous standard, it is taken as the new standard. If the solution is better or close to a standard, \code{metaMDS} compares two solutions using Procrustes analysis (function \code{\link{procrustes}} with option \code{symmetric = TRUE}). If the solutions are very similar in their Procrustes \code{rmse} and the largest residual is very small, the solutions are regarded as convergent and the better one is taken as the new standard. Please note that the conditions are stringent, and you may have found good and relatively stable solutions although the function is not yet satisfied. Setting \code{trace = TRUE} will monitor the final stresses, and \code{plot = TRUE} will display Procrustes overlay plots from each comparison. This step is performed using \code{metaMDSiter}. This is the only step performed if input data (\code{comm}) were dissimilarities. \item Scaling of the results: \code{metaMDS} will run \code{postMDS} for the final result. Function \code{postMDS} provides the following ways of \dQuote{fixing} the indeterminacy of scaling and orientation of axes in NMDS: Centring moves the origin to the average of the axes; Principal components rotate the configuration so that the variance of points is maximized on first dimension (with function \code{\link{MDSrotate}} you can alternatively rotate the configuration so that the first axis is parallel to an environmental variable); Half-change scaling scales the configuration so that one unit means halving of community similarity from replicate similarity. Half-change scaling is based on closer dissimilarities where the relation between ordination distance and community dissimilarity is rather linear (the limit is set by argument \code{threshold}). If there are enough points below this threshold (controlled by the parameter \code{nthreshold}), dissimilarities are regressed on distances. The intercept of this regression is taken as the replicate dissimilarity, and half-change is the distance where similarity halves according to linear regression. Obviously the method is applicable only for dissimilarity indices scaled to \eqn{0 \ldots 1}, such as Kulczynski, Bray-Curtis and Canberra indices. If half-change scaling is not used, the ordination is scaled to the same range as the original dissimilarities. \item Species scores: Function adds the species scores to the final solution as weighted averages using function \code{\link{wascores}} with given value of parameter \code{expand}. The expansion of weighted averages can be undone with \code{shrink = TRUE} in \code{plot} or \code{scores} functions, and the calculation of species scores can be suppressed with \code{wascores = FALSE}. } } \value{ Function \code{metaMDS} returns an object of class \code{metaMDS}. The final site ordination is stored in the item \code{points}, and species ordination in the item \code{species}, and the stress in item \code{stress} (NB, the scaling of the stress depends on the \code{engine}: \code{\link[MASS]{isoMDS}} uses percents, and \code{\link{monoMDS}} proportions in the range \eqn{0 \ldots 1}). The other items store the information on the steps taken and the items returned by the \code{engine} function. The object has \code{print}, \code{plot}, \code{points} and \code{text} methods. Functions \code{metaMDSdist} and \code{metaMDSredist} return \code{\link{vegdist}} objects. Function \code{initMDS} returns a random configuration which is intended to be used within \code{\link[MASS]{isoMDS}} only. Functions \code{metaMDSiter} and \code{postMDS} returns the result of NMDS with updated configuration. } \references{ Faith, D. P, Minchin, P. R. and Belbin, L. (1987). Compositional dissimilarity as a robust measure of ecological distance. \emph{Vegetatio} 69, 57--68. Minchin, P.R. (1987) An evaluation of relative robustness of techniques for ecological ordinations. \emph{Vegetatio} 69, 89--107. } \author{ Jari Oksanen } \note{ Function \code{metaMDS} is a simple wrapper for an NMDS engine (either \code{\link{monoMDS}} or \code{\link[MASS]{isoMDS}}) and some support functions (\code{metaMDSdist}, \code{\link{stepacross}}, \code{metaMDSiter}, \code{initMDS}, \code{postMDS}, \code{\link{wascores}}). You can call these support functions separately for better control of results. Data transformation, dissimilarities and possible \code{\link{stepacross}} are made in function \code{metaMDSdist} which returns a dissimilarity result. Iterative search (with starting values from \code{initMDS} with \code{\link{monoMDS}}) is made in \code{metaMDSiter}. Processing of result configuration is done in \code{postMDS}, and species scores added by \code{\link{wascores}}. If you want to be more certain of reaching a global solution, you can compare results from several independent runs. You can also continue analysis from previous results or from your own configuration. Function may not save the used dissimilarity matrix (\code{\link{monoMDS}} does), but \code{metaMDSredist} tries to reconstruct the used dissimilarities with original data transformation and possible \code{\link{stepacross}}. The \code{metaMDS} function was designed to be used with community data. If you have other type of data, you should probably set some arguments to non-default values: probably at least \code{wascores}, \code{autotransform} and \code{noshare} should be \code{FALSE}. If you have negative data entries, \code{metaMDS} will set the previous to \code{FALSE} with a warning. } \section{Warning}{\code{metaMDS} uses \code{\link{monoMDS}} as its NMDS \code{engine} from \pkg{vegan} version 2.0-0, when it replaced the \code{\link[MASS]{isoMDS}} function. You can set argument \code{engine} to select the old engine.} \seealso{\code{\link{monoMDS}} (and \code{\link[MASS]{isoMDS}}), \code{\link{decostand}}, \code{\link{wisconsin}}, \code{\link{vegdist}}, \code{\link{rankindex}}, \code{\link{stepacross}}, \code{\link{procrustes}}, \code{\link{wascores}}, \code{\link{MDSrotate}}, \code{\link{ordiplot}}. } \examples{ ## The recommended way of running NMDS (Minchin 1987) ## data(dune) # Global NMDS using monoMDS sol <- metaMDS(dune) sol plot(sol, type="t") ## Start from previous best solution sol <- metaMDS(dune, previous.best = sol) ## Local NMDS and stress 2 of monoMDS sol2 <- metaMDS(dune, model = "local", stress=2) sol2 ## Use Arrhenius exponent 'z' as a binary dissimilarity measure sol <- metaMDS(dune, distfun = betadiver, distance = "z") sol } \keyword{ multivariate } vegan/man/mantel.correlog.Rd0000644000176200001440000001510212031100650015472 0ustar liggesusers\encoding{UTF-8} \name{mantel.correlog} \alias{mantel.correlog} \alias{plot.mantel.correlog} \title{ Mantel Correlogram } \description{ Function \code{mantel.correlog} computes a multivariate Mantel correlogram. Proposed by Sokal (1986) and Oden and Sokal (1986), the method is also described in Legendre and Legendre (2012, pp. 819--821). } \usage{ mantel.correlog(D.eco, D.geo=NULL, XY=NULL, n.class=0, break.pts=NULL, cutoff=TRUE, r.type="pearson", nperm=999, mult="holm", progressive=TRUE) \method{plot}{mantel.correlog}(x, alpha=0.05, ...) } \arguments{ \item{D.eco}{ An ecological distance matrix, with class either \code{dist} or \code{matrix}. } \item{D.geo}{ A geographic distance matrix, with class either \code{dist} or \code{matrix}. Provide either \code{D.geo} or \code{XY}. Default: \code{D.geo=NULL}. } \item{XY}{ A file of Cartesian geographic coordinates of the points. Default: \code{XY=NULL}. } \item{n.class}{ Number of classes. If \code{n.class=0}, the Sturges equation will be used unless break points are provided. } \item{break.pts}{ Vector containing the break points of the distance distribution. Provide (n.class+1) breakpoints, that is, a list with a beginning and an ending point. Default: \code{break.pts=NULL}. } \item{cutoff}{ For the second half of the distance classes, \code{cutoff = TRUE} limits the correlogram to the distance classes that include all points. If \code{cutoff = FALSE}, the correlogram includes all distance classes. } \item{r.type}{ Type of correlation in calculation of the Mantel statistic. Default: \code{r.type="pearson"}. Other choices are \code{r.type="spearman"} and \code{r.type="kendall"}, as in functions \code{\link{cor}} and \code{\link{mantel}}. } \item{nperm}{ Number of permutations for the tests of significance. Default: \code{nperm=999}. For large data files, permutation tests are rather slow. } \item{mult}{ Correct P-values for multiple testing. The correction methods are \code{"holm"} (default), \code{"hochberg"}, \code{"sidak"}, and other methods available in the \code{\link{p.adjust}} function: \code{"bonferroni"} (best known, but not recommended because it is overly conservative), \code{"hommel"}, \code{"BH"}, \code{"BY"}, \code{"fdr"}, and \code{"none"}. } \item{progressive}{ Default: \code{progressive=TRUE} for progressive correction of multiple-testing, as described in Legendre and Legendre (1998, p. 721). Test of the first distance class: no correction; second distance class: correct for 2 simultaneous tests; distance class k: correct for k simultaneous tests. \code{progressive=FALSE}: correct all tests for \code{n.class} simultaneous tests. } \item{x}{ Output of \code{mantel.correlog}. } \item{alpha}{ Significance level for the points drawn with black symbols in the correlogram. Default: \code{alpha=0.05}. } \item{...}{ Other parameters passed from other functions. } } \details{ A correlogram is a graph in which spatial correlation values are plotted, on the ordinate, as a function of the geographic distance classes among the study sites along the abscissa. In a Mantel correlogram, a Mantel correlation (Mantel 1967) is computed between a multivariate (e.g. multi-species) distance matrix of the user's choice and a design matrix representing each of the geographic distance classes in turn. The Mantel statistic is tested through a permutational Mantel test performed by \code{vegan}'s \code{\link{mantel}} function. When a correction for multiple testing is applied, more permutations are necessary than in the no-correction case, to obtain significant p-values in the higher correlogram classes. The \code{print.mantel.correlog} function prints out the correlogram. See examples. } \value{ \item{mantel.res }{A table with the distance classes as rows and the class indices, number of distances per class, Mantel statistics (computed using Pearson's r, Spearman's r, or Kendall's tau), and p-values as columns. A positive Mantel statistic indicates positive spatial correlation. An additional column with p-values corrected for multiple testing is added unless \code{mult="none"}. } \item{n.class }{The n umber of distance classes. } \item{break.pts }{The break points provided by the user or computed by the program. } \item{mult }{The name of the correction for multiple testing. No correction: \code{mult="none"}. } \item{progressive }{A logical (\code{TRUE}, \code{FALSE}) value indicating whether or not a progressive correction for multiple testing was requested. } \item{n.tests }{The number of distance classes for which Mantel tests have been computed and tested for significance. } \item{call }{The function call. } } \author{ Pierre Legendre, Université de Montréal } \references{ Legendre, P. and L. Legendre. 2012. Numerical ecology, 3rd English edition. Elsevier Science BV, Amsterdam. Mantel, N. 1967. The detection of disease clustering and a generalized regression approach. Cancer Res. 27: 209-220. Oden, N. L. and R. R. Sokal. 1986. Directional autocorrelation: an extension of spatial correlograms to two dimensions. Syst. Zool. 35: 608-617. Sokal, R. R. 1986. Spatial data analysis and historical processes. 29-43 in: E. Diday et al. [eds.] Data analysis and informatics, IV. North-Holland, Amsterdam. Sturges, H. A. 1926. The choice of a class interval. Journal of the American Statistical Association 21: 65–66. } \examples{ # Mite data available in "vegan" data(mite) data(mite.xy) mite.hel <- decostand(mite, "hellinger") # Detrend the species data by regression on the site coordinates mite.hel.resid <- resid(lm(as.matrix(mite.hel) ~ ., data=mite.xy)) # Compute the detrended species distance matrix mite.hel.D <- dist(mite.hel.resid) # Compute Mantel correlogram with cutoff, Pearson statistic mite.correlog <- mantel.correlog(mite.hel.D, XY=mite.xy, nperm=49) summary(mite.correlog) mite.correlog # or: print(mite.correlog) # or: print.mantel.correlog(mite.correlog) plot(mite.correlog) # Compute Mantel correlogram without cutoff, Spearman statistic mite.correlog2 <- mantel.correlog(mite.hel.D, XY=mite.xy, cutoff=FALSE, r.type="spearman", nperm=49) summary(mite.correlog2) mite.correlog2 plot(mite.correlog2) # NOTE: 'nperm' argument usually needs to be larger than 49. # It was set to this low value for demonstration purposes. } \keyword{ multivariate }vegan/man/mantel.Rd0000644000176200001440000000764412031100650013673 0ustar liggesusers\name{mantel} \alias{mantel} \alias{mantel.partial} \title{Mantel and Partial Mantel Tests for Dissimilarity Matrices } \description{ Function \code{mantel} finds the Mantel statistic as a matrix correlation between two dissimilarity matrices, and function \code{mantel.partial} finds the partial Mantel statistic as the partial matrix correlation between three dissimilarity matrices. The significance of the statistic is evaluated by permuting rows and columns of the first dissimilarity matrix. } \usage{ mantel(xdis, ydis, method="pearson", permutations=999, strata, na.rm = FALSE) mantel.partial(xdis, ydis, zdis, method = "pearson", permutations = 999, strata, na.rm = FALSE) } \arguments{ \item{xdis, ydis, zdis}{ Dissimilarity matrices or a \code{dist} objects. } \item{method}{ Correlation method, as accepted by \code{\link{cor}}: \code{"pearson"}, \code{"spearman"} or \code{"kendall"}. } \item{permutations}{Number of permutations in assessing significance. } \item{strata}{An integer vector or factor specifying the strata for permutation. If supplied, observations are permuted only within the specified strata.} \item{na.rm}{Remove missing values in calculation of Mantel correlation. Use this option with care: Permutation tests can be biased, in particular if two matrices had missing values in matching positions.} } \details{ Mantel statistic is simply a correlation between entries of two dissimilarity matrices (some use cross products, but these are linearly related). However, the significance cannot be directly assessed, because there are \eqn{N(N-1)/2} entries for just \eqn{N} observations. Mantel developed asymptotic test, but here we use permutations of \eqn{N} rows and columns of dissimilarity matrix. See \code{\link{permutations}} for additional details on permutation tests in Vegan. Partial Mantel statistic uses partial correlation conditioned on the third matrix. Only the first matrix is permuted so that the correlation structure between second and first matrices is kept constant. Although \code{mantel.partial} silently accepts other methods than \code{"pearson"}, partial correlations will probably be wrong with other methods. The function uses \code{\link{cor}}, which should accept alternatives \code{pearson} for product moment correlations and \code{spearman} or \code{kendall} for rank correlations. } \value{ The function returns a list of class \code{mantel} with following components: \item{Call }{Function call.} \item{method }{Correlation method used, as returned by \code{\link{cor.test}}.} \item{statistic}{The Mantel statistic.} \item{signif}{Empirical significance level from permutations.} \item{perm}{A vector of permuted values. The distribution of permuted values can be inspected with \code{\link{density.mantel}} function.} \item{permutations}{Number of permutations.} } \references{ The test is due to Mantel, of course, but the current implementation is based on Legendre and Legendre. Legendre, P. and Legendre, L. (2012) \emph{Numerical Ecology}. 3rd English Edition. Elsevier. } \note{ Legendre & Legendre (2012, Box 10.4) warn against using partial Mantel correlations. } \author{Jari Oksanen } \seealso{\code{\link{cor}} for correlation coefficients, \code{\link{protest}} (``Procrustes test'') for an alternative with ordination diagrams, \code{\link{anosim}} and \code{\link{mrpp}} for comparing dissimilarities against classification. For dissimilarity matrices, see \code{\link{vegdist}} or \code{\link{dist}}. See \code{\link{bioenv}} for selecting environmental variables. } \examples{ ## Is vegetation related to environment? data(varespec) data(varechem) veg.dist <- vegdist(varespec) # Bray-Curtis env.dist <- vegdist(scale(varechem), "euclid") mantel(veg.dist, env.dist) mantel(veg.dist, env.dist, method="spear") } \keyword{ multivariate } \keyword{ htest } vegan/man/make.cepnames.Rd0000644000176200001440000000477712031516374015144 0ustar liggesusers\name{make.cepnames} \alias{make.cepnames} \title{Abbreviates a Botanical or Zoological Latin Name into an Eight-character Name} \description{ A standard CEP name has four first letters of the generic name and four first letters of the specific epithet of a Latin name. The last epithet, that may be a subspecific name, is used in the current function. If the name has only one component, it is abbreviated to eight characters (see \code{\link{abbreviate}}). The returned names are made unique with function \code{\link{make.unique}} which adds numbers to the end of CEP names if needed. } \usage{ make.cepnames(names, seconditem = FALSE) } \arguments{ \item{names}{The names to be formatted into CEP names. } \item{seconditem}{Take always the second item of the original name to the abbreviated name instead of the last original item (default).} } \details{ Cornell Ecology Programs (CEP) used eight-letter abbreviations for species and site names. In species, the names were formed by taking four first letters of the generic name and four first letters of the specific or subspecific epithet. The current function first makes valid \R names using \code{\link{make.names}}, and then splits these into elemets. The CEP name is made by taking the four first letters of the first element, and four first letters of the last (default) or the second element (with \code{seconditem = TRUE}). If there was only one name element, it is \code{\link{abbreviate}}d to eight letters. Finally, the names are made unique which may add numbers to duplicated names. The CEP names were originally used, because old \code{FORTRAN IV} did not have \code{CHARACTER} data type, but text had to be stored in numerical variables, which in popular computers could hold four characters. In modern times, there is no reason for this limitation, but ecologists are used to these names, and they may be practical to avoid congestion in ordination plots. } \value{ Function returns CEP names. } \author{ Jari Oksanen } \note{ The function is simpleminded and rigid. You must write a better one if you need. } \seealso{ \code{\link{make.names}}, \code{\link{strsplit}}, \code{\link{substring}}, \code{\link{paste}}, \code{\link{abbreviate}}. } \examples{ make.cepnames(c("Aa maderoi", "Poa sp.", "Cladina rangiferina", "Cladonia cornuta", "Cladonia cornuta var. groenlandica", "Cladonia rangiformis", "Bryoerythrophyllum")) data(BCI) colnames(BCI) <- make.cepnames(colnames(BCI)) } \keyword{ character } vegan/man/linestack.Rd0000644000176200001440000000307410672453742014407 0ustar liggesusers\name{linestack} \alias{linestack} \title{Plots One-dimensional Diagrams without Overwriting Labels } \description{ Function \code{linestack} plots vertical one-dimensional plots for numeric vectors. The plots are always labelled, but the labels are moved vertically to avoid overwriting. } \usage{ linestack(x, labels, cex = 0.8, side = "right", hoff = 2, air = 1.1, at = 0, add = FALSE, axis = FALSE, ...) } \arguments{ \item{x}{Numeric vector to be plotted. } \item{labels}{Text labels used instead of default (names of \code{x}).} \item{cex}{Size of the labels. } \item{side}{Put labels to the \code{"right"} or \code{"left"} of the axis. } \item{hoff}{Distance from the vertical axis to the label in units of the width of letter \dQuote{m}. } \item{air}{Multiplier to string height to leave empty space between labels. } \item{at}{Position of plot in horizontal axis. } \item{add}{Add to an existing plot. } \item{axis}{Add axis to the plot. } \item{\dots}{Other graphical parameters to labels.} } \value{ The function returns invisibly the shifted positions of labels in user coordinates. } \author{Jari Oksanen } \note{ The function always draws labelled diagrams. If you want to have unlabelled diagrams, you can use, e.g., \code{\link{plot}}, \code{\link{stripchart}} or \code{\link{rug}}. } \examples{ ## First DCA axis data(dune) ord <- decorana(dune) linestack(scores(ord, choices=1, display="sp")) linestack(scores(ord, choices=1, display="si"), side="left", add=TRUE) title(main="DCA axis 1") } \keyword{ hplot } \keyword{ aplot } vegan/man/kendall.global.Rd0000644000176200001440000001610312031516374015270 0ustar liggesusers\encoding{UTF-8} \name{kendall.global} \alias{kendall.global} \alias{kendall.post} \title{ Kendall coefficient of concordance } \description{ Function \code{kendall.global} computes and tests the coefficient of concordance among several judges (variables, species) through a permutation test. Function \code{kendall.post} carries out \emph{a posteriori} tests of the contributions of individual judges (variables, species) to the overall concordance of their group through permutation tests. If several groups of judges are identified in the data table, coefficients of concordance (\code{kendall.global}) or a posteriori tests (\code{kendall.post}) will be computed for each group separately. Use in ecology: to identify significant species associations. } \usage{ kendall.global(Y, group, nperm = 999, mult = "holm") kendall.post(Y, group, nperm = 999, mult = "holm") } \arguments{ \item{Y}{ Data file (data frame or matrix) containing quantitative or semiquantitative data. Rows are objects and columns are judges (variables). In community ecology, that table is often a site-by-species table. } \item{group}{ A vector defining how judges should be divided into groups. See example below. If groups are not explicitly defined, all judges in the data file will be considered as forming a single group. } \item{nperm}{ Number of permutations to be performed. Default is 999. } \item{mult}{Correct P-values for multiple testing using the alternatives described in \code{\link{p.adjust}} and in addition \code{"sidak"} (see Details). The Bonferroni correction is overly conservative; it is not recommended. It is included to allow comparisons with the other methods.} } \details{ \code{Y} must contain quantitative data. They will be transformed to ranks within each column before computation of the coefficient of concordance. The search for species associations described in Legendre (2005) proceeds in 3 steps: (1) Correlation analysis of the species. A possible method is to compute Ward's agglomerative clustering of a matrix of correlations among the species. In detail: (1.1) compute a Pearson or Spearman correlation matrix (\code{correl.matrix}) among the species; (1.2) turn it into a distance matrix: \code{mat.D = as.dist(1-correl.matrix)}; (1.3) carry out Ward's hierarchical clustering of that matrix using \code{hclust}: \code{clust.ward = hclust(mat.D, "ward")}; (1.4) plot the dendrogram: \code{plot(clust.ward, hang=-1)}; (1.5) cut the dendrogram in two groups, retrieve the vector of species membership: \code{group.2 = cutree(clust.ward, k=2)}. (1.6) After steps 2 and 3 below, you may have to come back and try divisions of the species into k = \eqn{3, 4, 5, \dots} groups. (2) Compute global tests of significance of the 2 (or more) groups using the function \code{kendall.global} and the vector defining the groups. Groups that are not globally significant must be refined or abandoned. (3) Compute a posteriori tests of the contribution of individual species to the concordance of their group using the function \code{kendall.post} and the vector defining the groups. If some species have negative values for "Spearman.mean", this means that these species clearly do not belong to the group, hence that group is too inclusive. Go back to (1.5) and cut the dendrogram more finely. The left and right groups can be cut separately, independently of the levels along the dendrogram; write your own vector of group membership if \code{cutree} does not produce the desired groups. The corrections used for multiple testing are applied to the list of P-values (P); they take into account the number of tests (k) carried out simultaneously (number of groups in \code{kendall.global}, or number of species in \code{kendall.post}). The corrections are performed using function \code{\link{p.adjust}}; see that function for the description of the correction methods. In addition, there is \enc{Å idák}{Sidak} correction which defined as \eqn{P_{corr} = 1 -(1 - P)^k}. } \value{ A table containing the following information in rows. The columns correspond to the groups of "judges" defined in vector "group". When function \code{Kendall.post} is used, there are as many tables as the number of predefined groups. \item{W }{Kendall's coefficient of concordance, W. } \item{F }{F statistic. F = W*(m-1)/(1-W) where m is the number of judges. } \item{Prob.F }{Probability associated with the F statistic, computed from the F distribution with nu1 = n-1-(2/m) and nu2 = nu1*(m-1); n is the number of objects. } \item{Corrected prob.F }{Probabilities associated with F, corrected using the method selected in parameter \code{mult}. Shown only if there are more than one group. } \item{Chi2 }{Friedman's chi-square statistic (Friedman 1937) used in the permutation test of W. } \item{Prob.perm }{Permutational probabilities, uncorrected. } \item{Corrected prob.perm }{Permutational probabilities corrected using the method selected in parameter \code{mult}. Shown only if there are more than one group. } \item{Spearman.mean }{Mean of the Spearman correlations between the judge under test and all the other judges in the same group. } \item{W.per.species }{Contribution of the judge under test to the overall concordance statistic for that group. } } \references{ Friedman, M. 1937. The use of ranks to avoid the assumption of normality implicit in the analysis of variance. Journal of the American Statistical Association 32: 675-701. Kendall, M. G. and B. Babington Smith. 1939. The problem of m rankings. Annals of Mathematical Statistics 10: 275-287. Legendre, P. 2005. Species associations: the Kendall coefficient of concordance revisited. Journal of Agricultural, Biological, and Environmental Statistics 10: 226-245. Legendre, P. 2009. Coefficient of concordance. In: Encyclopedia of Research Design. SAGE Publications (in press). Siegel, S. and N. J. Castellan, Jr. 1988. Nonparametric statistics for the behavioral sciences. 2nd edition. McGraw-Hill, New York. } \seealso{\code{\link{cor}}, \code{\link{friedman.test}}, \code{\link{hclust}}, \code{\link{cutree}}, \code{\link{kmeans}}, \code{\link[vegan]{cascadeKM}}, \code{\link[labdsv]{indval}}} \author{ F. Guillaume Blanchet, University of Alberta, and Pierre Legendre, Université de Montréal } \examples{ data(mite) mite.hel <- decostand(mite, "hel") # Reproduce the results shown in Table 2 of Legendre (2005), a single group mite.small <- mite.hel[c(4,9,14,22,31,34,45,53,61,69),c(13:15,23)] kendall.global(mite.small, nperm=49) kendall.post(mite.small, mult="holm", nperm=49) # Reproduce the results shown in Tables 3 and 4 of Legendre (2005), 2 groups group <-c(1,1,2,1,1,1,1,1,2,1,1,1,1,1,1,2,1,2,1,1,1,1,2,1,2,1,1,1,1,1,2,2,2,2,2) kendall.global(mite.hel, group=group, nperm=49) kendall.post(mite.hel, group=group, mult="holm", nperm=49) # NOTE: 'nperm' argument usually needs to be larger than 49. # It was set to this low value for demonstration purposes. } \keyword{ multivariate } \keyword{ nonparametric } vegan/man/isomap.Rd0000644000176200001440000001376012031516374013715 0ustar liggesusers\name{isomap} \alias{isomap} \alias{isomapdist} \alias{plot.isomap} \alias{summary.isomap} \alias{rgl.isomap} \title{ Isometric Feature Mapping Ordination } \description{ The function performs isometric feature mapping which consists of three simple steps: (1) retain only some of the shortest dissimilarities among objects, (2) estimate all dissimilarities as shortest path distances, and (3) perform metric scaling (Tenenbaum et al. 2000). } \usage{ isomap(dist, ndim=10, ...) isomapdist(dist, epsilon, k, path = "shortest", fragmentedOK =FALSE, ...) \method{summary}{isomap}(object, axes = 4, ...) \method{plot}{isomap}(x, net = TRUE, n.col = "gray", type = "points", ...) rgl.isomap(x, web = "white", ...) } \arguments{ \item{dist}{Dissimilarities. } \item{ndim}{Number of axes in metric scaling (argument \code{k} in \code{\link{cmdscale}}).} \item{epsilon}{Shortest dissimilarity retained. } \item{k}{Number of shortest dissimilarities retained for a point. If both \code{epsilon} and \code{k} are given, \code{epsilon} will be used. } \item{path}{Method used in \code{\link{stepacross}} to estimate the shortest path, with alternatives \code{"shortest"} and \code{"extended"}. } \item{fragmentedOK}{What to do if dissimilarity matrix is fragmented. If \code{TRUE}, analyse the largest connected group, otherwise stop with error. } \item{x, object}{An \code{isomap} result object.} \item{axes}{Number of axes displayed.} \item{net}{Draw the net of retained dissimilarities.} \item{n.col}{Colour of drawn net segments.} \item{type}{Plot observations either as \code{"points"}, \code{"text"} or use \code{"none"} to plot no observations. The \code{"text"} will use \code{\link{ordilabel}} if \code{net = TRUE} and \code{\link{ordiplot}} if \code{net = FALSE}, and pass extra arguments to these functions.} \item{web}{Colour of the web in \pkg{rgl} graphics.} \item{\dots}{Other parameters passed to functions. } } \details{ The function \code{isomap} first calls function \code{isomapdist} for dissimilarity transformation, and then performs metric scaling for the result. All arguments to \code{isomap} are passed to \code{isomapdist}. The functions are separate so that the \code{isompadist} transformation could be easily used with other functions than simple linear mapping of \code{\link{cmdscale}}. Function \code{isomapdist} retains either dissimilarities equal or shorter to \code{epsilon}, or if \code{epsilon} is not given, at least \code{k} shortest dissimilarities for a point. Then a complete dissimilarity matrix is reconstructed using \code{\link{stepacross}} using either flexible shortest paths or extended dissimilarities (for details, see \code{\link{stepacross}}). De'ath (1999) actually published essentially the same method before Tenenbaum et al. (2000), and De'ath's function is available in \code{\link[mvpart]{xdiss}} in package \pkg{mvpart}. The differences are that \code{isomap} introduced the \code{k} criterion, whereas De'ath only used \code{epsilon} criterion. In practice, De'ath also retains higher proportion of dissimilarities than typical \code{isomap}. The \code{plot} function uses internally \code{\link{ordiplot}}, except that it adds text over net using \code{\link{ordilabel}}. The \code{plot} function passes extra arguments to these functions. In addition, function \code{rgl.isomap} can make dynamic 3D plots that can be rotated on the screen. The functions is based on \code{\link{ordirgl}}, but it adds the connecting lines. The function passes extra arguments to \code{\link{scores}} or \code{\link{ordirgl}} functions so that you can select axes, or define colours and sizes of points. } \value{ Function \code{isomapdist} returns a dissimilarity object similar to \code{dist}. Function \code{isomap} returns an object of class \code{isomap} with \code{plot} and \code{summary} methods. The \code{plot} function returns invisibly an object of class \code{\link{ordiplot}}. Function \code{\link{scores}} can extract the ordination scores. } \references{ De'ath, G. (1999) Extended dissimilarity: a method of robust estimation of ecological distances from high beta diversity data. \emph{Plant Ecology} 144, 191--199 Tenenbaum, J.B., de Silva, V. & Langford, J.C. (2000) A global network framework for nonlinear dimensionality reduction. \emph{Science} 290, 2319--2323. } \author{ Jari Oksanen } \note{ Tenenbaum et al. (2000) justify \code{isomap} as a tool of unfolding a manifold (e.g. a 'Swiss Roll'). Even with a manifold structure, the sampling must be even and dense so that dissimilarities along a manifold are shorter than across the folds. If data do not have such a manifold structure, the results are very sensitive to parameter values. } \seealso{The underlying functions that do the proper work are \code{\link{stepacross}}, \code{\link{distconnected}} and \code{\link{cmdscale}}. Package \pkg{mvpart} provides a parallel (but a bit different) implementation (\code{\link[mvpart]{xdiss}}). Moreover, \pkg{vegan} function \code{\link{metaMDS}} may trigger \code{\link{stepacross}} transformation, but usually only for longest dissimilarities. The \code{plot} method of \pkg{vegan} minimum spanning tree function (\code{\link{spantree}}) has even more extreme way of isomapping things. } \examples{ ## The following examples also overlay minimum spanning tree to ## the graphics in red. op <- par(mar=c(4,4,1,1)+0.2, mfrow=c(2,2)) data(BCI) dis <- vegdist(BCI) tr <- spantree(dis) pl <- ordiplot(cmdscale(dis), main="cmdscale") lines(tr, pl, col="red") ord <- isomap(dis, k=3) ord pl <- plot(ord, main="isomap k=3") lines(tr, pl, col="red") pl <- plot(isomap(dis, k=5), main="isomap k=5") lines(tr, pl, col="red") pl <- plot(isomap(dis, epsilon=0.45), main="isomap epsilon=0.45") lines(tr, pl, col="red") par(op) ## The following command requires user interaction \dontrun{ rgl.isomap(ord, size=4, color="hotpink") } } \keyword{ multivariate} vegan/man/indpower.Rd0000644000176200001440000000506011715417167014256 0ustar liggesusers\encoding{UTF-8} \name{indpower} \alias{indpower} \title{Indicator Power of Species} \description{ Indicator power calculation of Halme et al. (2009) or the congruence between indicator and target species. } \usage{ indpower(x, type = 0) } \arguments{ \item{x}{Community data frame or matrix. } \item{type}{The type of statistic to be returned. See Details for explanation.} } \details{ Halme et al. (2009) described an index of indicator power defined as \eqn{IP_I = \sqrt{a \times b}}{IP_I = sqrt(a*b)}, where \eqn{a = S / O_I} and \eqn{b = 1 - (O_T - S) / (N - O_I)}. \eqn{N} is the number of sites, \eqn{S} is the number of shared occurrences of the indicator (\eqn{I}) and the target (\eqn{T}) species. \eqn{O_I} and \eqn{O_T} are number of occurrences of the indicator and target species. The \code{type} argument in the function call enables to choose which statistic to return. \code{type = 0} returns \eqn{IP_I}, \code{type = 1} returns \eqn{a}, \code{type = 2} returns \eqn{b}. Total indicator power (TIP) of an indicator species is the column mean (without its own value, see examples). Halme et al. (2009) explain how to calculate confidence intervals for these statistics, see Examples. } \value{ A matrix with indicator species as rows and target species as columns (this is indicated by the first letters of the row/column names). } \references{ Halme, P., \enc{Mönkkönen}{Monkkonen}, M., Kotiaho, J. S, \enc{Ylisirniö}{Ylisirnio}, A-L. 2009. Quantifying the indicator power of an indicator species. \emph{Conservation Biology} 23: 1008--1016. } \author{Peter Solymos} \seealso{ \code{\link[labdsv]{indval}} (package \pkg{labdsv}) for the indicator species analysis of \enc{Dufrêne}{Dufrene} & Legendre. Function \code{\link{beals}} estimates individual cell probabilities of species occurrences. } \examples{ data(dune) ## IP values ip <- indpower(dune) ## and TIP values diag(ip) <- NA (TIP <- rowMeans(ip, na.rm=TRUE)) ## p value calculation for a species ## from Halme et al. 2009 ## i is ID for the species i <- 1 fun <- function(x, i) indpower(x)[i,-i] ## 'c0' randomizes species occurrences os <- oecosimu(dune, fun, "c0", i=i, nsimul=99) ## get z values from oecosimu output z <- os$oecosimu$z ## p-value (p <- sum(z) / sqrt(length(z))) ## 'heterogeneity' measure (chi2 <- sum((z - mean(z))^2)) pchisq(chi2, df=length(z)-1) ## Halme et al.'s suggested output out <- c(TIP=TIP[i], significance=p, heterogeneity=chi2, minIP=min(fun(dune, i=i)), varIP=sd(fun(dune, i=i)^2)) out } \keyword{ multivariate } vegan/man/humpfit.Rd0000644000176200001440000001613512031516374014100 0ustar liggesusers\name{humpfit} \alias{humpfit} \alias{summary.humpfit} \alias{lines.humpfit} \alias{plot.humpfit} \alias{points.humpfit} \alias{predict.humpfit} \alias{profile.humpfit} \title{No-interaction Model for Hump-backed Species Richness vs. Biomass } \description{ Function \code{humpfit} fits a no-interaction model for species richness vs. biomass data (Oksanen 1996). This is a null model that produces a hump-backed response as an artifact of plant size and density. } \usage{ humpfit(mass, spno, family = poisson, start) \method{summary}{humpfit}(object, ...) \method{predict}{humpfit}(object, newdata = NULL, ...) \method{plot}{humpfit}(x, xlab = "Biomass", ylab = "Species Richness", lwd = 2, l.col = "blue", p.col = 1, type = "b", ...) \method{points}{humpfit}(x, ...) \method{lines}{humpfit}(x, segments=101, ...) \method{profile}{humpfit}(fitted, parm = 1:3, alpha = 0.01, maxsteps = 20, del = zmax/5, ...) } \arguments{ \item{mass}{Biomass. } \item{spno}{Species richness.} \item{start}{Vector of starting values for all three parameters.} \item{family}{Family of error distribution. Any \code{\link{family}} can be used, but the link function is always Fisher's diversity model, and other \code{link} functions are silently ignored. } \item{x, object, fitted}{Result object of \code{humpfit}} \item{newdata}{Values of \code{mass} used in \code{predict}. The original data values are used if missing.} \item{xlab,ylab}{Axis labels in \code{plot}} \item{lwd}{Line width} \item{l.col, p.col}{Line and point colour in \code{plot}} \item{type}{Type of \code{plot}: \code{"p"} for observed points, \code{"l"} for fitted lines, \code{"b"} for both, and \code{"n"} for only setting axes.} \item{segments}{Number of segments used for fitted lines.} \item{parm}{Profiled parameters.} \item{alpha, maxsteps, del}{Parameters for profiling range and density.} \item{...}{Other parameters to functions.} } \details{ The no-interaction model assumes that the humped species richness pattern along biomass gradient is an artifact of plant size and density (Oksanen 1996). For low-biomass sites, it assumes that plants have a fixed size, and biomass increases with increasing number of plants. When the sites becomes crowded, the number of plants and species richness reaches the maximum. Higher biomass is reached by increasing the plant size, and then the number of plants and species richness will decrease. At biomasses below the hump, plant number and biomass are linearly related, and above the hump, plant number is proportional to inverse squared biomass. The number of plants is related to the number of species by the relationship (\code{link} function) from Fisher's log-series (Fisher et al. 1943). The parameters of the model are: \enumerate{ \item \code{hump}: the location of the hump on the biomass gradient. \item \code{scale}: an arbitrary multiplier to translate the biomass into virtual number of plants. \item \code{alpha}: Fisher's \eqn{\alpha}{alpha} to translate the virtual number of plants into number of species. } The parameters \code{scale} and \code{alpha} are intermingled and this function should not be used for estimating Fisher's \eqn{\alpha}{alpha}. Probably the only meaningful and interesting parameter is the location of the \code{hump}. Function may be very difficult to fit and easily gets trapped into local solutions, or fails with non-Poisson families, and function \code{profile} should be used to inspect the fitted models. If you have loaded \code{package} \pkg{MASS}, you can use functions \code{\link[MASS]{plot.profile}}, \code{\link[MASS]{pairs.profile}} for graphical inspection of the profiles, and \code{\link[MASS]{confint.profile.glm}} for the profile based confidence intervals. The original model intended to show that there is no need to speculate about `competition' and `stress' (Al-Mufti et al. 1977), but humped response can be produced as an artifact of using fixed plot size for varying plant sizes and densities. } \value{ The function returns an object of class \code{"humpfit"} inheriting from class \code{"glm"}. The result object has specific \code{summary}, \code{predict}, \code{plot}, \code{points} and \code{lines} methods. In addition, it can be accessed by the following methods for \code{\link{glm}} objects: \code{\link{AIC}}, \code{\link{extractAIC}}, \code{\link{deviance}}, \code{\link{coef}}, \code{\link{residuals.glm}} (except \code{type = "partial"}), \code{\link{fitted}}, and perhaps some others. In addition, function \code{\link[ellipse]{ellipse.glm}} (package \pkg{ellipse}) can be used to draw approximate confidence ellipses for pairs of parameters, if the normal assumptions look appropriate. } \references{ Al-Mufti, M.M., Sykes, C.L, Furness, S.B., Grime, J.P & Band, S.R. (1977) A quantitative analysis of shoot phenology and dominance in herbaceous vegetation. \emph{Journal of Ecology} 65,759--791. Fisher, R.A., Corbet, A.S. & Williams, C.B. (1943) The relation between the number of species and the number of individuals in a random sample of of an animal population. \emph{Journal of Animal Ecology} 12, 42--58. Oksanen, J. (1996) Is the humped relationship between species richness and biomass an artefact due to plot size? \emph{Journal of Ecology} 84, 293--295. } \author{ Jari Oksanen } \note{ The function is a replacement for the original \code{GLIM4} function at the archive of Journal of Ecology. There the function was represented as a mixed \code{\link{glm}} with one non-linear parameter (\code{hump}) and a special one-parameter link function from Fisher's log-series. The current function directly applies non-linear maximum likelihood fitting using function \code{\link{nlm}}. Some expected problems with the current approach are: \itemize{ \item The function is discontinuous at \code{hump} and may be difficult to optimize in some cases (the lines will always join, but the derivative jumps). \item The function does not try very hard to find sensible starting values and can fail. The user may supply starting values in argument \code{start} if fitting fails. \item The estimation is unconstrained, but both \code{scale} and \code{alpha} should always be positive. Perhaps they should be fitted as logarithmic. Fitting \code{\link{Gamma}} \code{\link{family}} models might become easier, too. } } \seealso{\code{\link{fisherfit}}, \code{\link[MASS]{profile.glm}}, \code{\link[MASS]{confint.glm}}. } \examples{ ## ## Data approximated from Al-Mufti et al. (1977) ## mass <- c(140,230,310,310,400,510,610,670,860,900,1050,1160,1900,2480) spno <- c(1, 4, 3, 9, 18, 30, 20, 14, 3, 2, 3, 2, 5, 2) sol <- humpfit(mass, spno) summary(sol) # Almost infinite alpha... plot(sol) # confint is in MASS, and impicitly calls profile.humpfit. # Parameter 3 (alpha) is too extreme for profile and confint, and we # must use only "hump" and "scale". library(MASS) plot(profile(sol, parm=1:2)) confint(sol, parm=c(1,2)) } \keyword{models } \keyword{regression } \keyword{nonlinear} vegan/man/goodness.metaMDS.Rd0000644000176200001440000000712412031516374015534 0ustar liggesusers\name{goodness.metaMDS} \alias{goodness.metaMDS} \alias{goodness.monoMDS} \alias{stressplot} \alias{stressplot.default} \alias{stressplot.monoMDS} \title{Goodness of Fit and Shepard Plot for Nonmetric Multidimensional Scaling } \description{ Function \code{goodness.metaMDS} find goodness of fit measure for points in nonmetric multidimensional scaling, and function \code{stressplot} makes a \code{\link[MASS]{Shepard}} diagram. } \usage{ \method{goodness}{metaMDS}(object, dis, ...) \method{stressplot}{default}(object, dis, pch, p.col = "blue", l.col = "red", lwd = 2, ...) } \arguments{ \item{object}{A result object from \code{\link{metaMDS}}, \code{\link{monoMDS}} or \code{\link[MASS]{isoMDS}}. } \item{dis}{Dissimilarities. This should not be used with \code{\link{metaMDS}} or \code{\link{monoMDS}}, but must be used with \code{\link[MASS]{isoMDS}}.} \item{pch}{Plotting character for points. Default is dependent on the number of points. } \item{p.col, l.col}{Point and line colours.} \item{lwd}{Line width. For \code{\link{monoMDS}} the default is \code{lwd = 1} if more than two lines are drawn, and \code{lwd = 2} otherwise.} \item{\dots}{Other parameters to functions, e.g. graphical parameters.} } \details{ Function \code{goodness.metaMDS} finds a goodness of fit statistic for observations (points). This is defined so that sum of squared values is equal to squared stress. Large values indicate poor fit. The absolute values of the goodness statistic depend on the definition of the stress: \code{\link[MASS]{isoMDS}} expresses stress in percents, and therefore its goodness values are 100 times higher than those of \code{\link{monoMDS}} which expresses the stress as a proportion. Function \code{stressplot} draws a Shepard diagram which is a plot of ordination distances and monotone or linear fit line against original dissimilarities. In addition, it displays two correlation-like statistics on the goodness of fit in the graph. The nonmetric fit is based on stress \eqn{S} and defined as \eqn{R^2 = 1-S^2}{R2 = 1-S*S}. The \dQuote{linear fit} is the squared correlation between fitted values and ordination distances. For \code{\link{monoMDS}}, the \dQuote{linear fit} and \eqn{R^2}{R2} from \dQuote{stress type 2} are equal. Both functions can be used with \code{\link{metaMDS}}, \code{\link{monoMDS}} and \code{\link[MASS]{isoMDS}}. The original dissimilarities should not be given for \code{\link{monoMDS}} or \code{\link{metaMDS}} results (the latter tries to reconstruct the dissimilarities using \code{\link{metaMDSredist}} if \code{\link[MASS]{isoMDS}} was used as its engine). With \code{\link[MASS]{isoMDS}} the dissimilarities must be given. In either case, the functions inspect that dissimilarities are consistent with current ordination, and refuse to analyse inconsistent dissimilarities. Function \code{goodness.metaMDS} is generic in \pkg{vegan}, but you must spell its name completely with \code{\link[MASS]{isoMDS}} which has no class. } \value{ Function \code{goodness} returns a vector of values. Function \code{stressplot} returns invisibly an object with itmes for original dissimilarities, ordination distances and fitted values. } \author{Jari Oksanen. } \seealso{\code{\link{metaMDS}}, \code{\link{monoMDS}}, \code{\link[MASS]{isoMDS}}, \code{\link[MASS]{Shepard}}. } \examples{ data(varespec) mod <- metaMDS(varespec) stressplot(mod) gof <- goodness(mod) gof plot(mod, display = "sites", type = "n") points(mod, display = "sites", cex = 2*gof/mean(gof)) } \keyword{ multivariate } vegan/man/goodness.cca.Rd0000644000176200001440000001376011274337021014771 0ustar liggesusers\name{goodness.cca} \alias{goodness} \alias{goodness.rda} \alias{goodness.cca} \alias{inertcomp} \alias{spenvcor} \alias{intersetcor} \alias{vif.cca} \alias{alias.cca} \title{Diagnostic Tools for [Constrained] Ordination (CCA, RDA, DCA, CA, PCA) } \description{ Functions \code{goodness} and \code{inertcomp} can be used to assess the goodness of fit for individual sites or species. Function \code{vif.cca} and \code{alias.cca} can be used to analyse linear dependencies among constraints and conditions. In addition, there are some other diagnostic tools (see 'Details'). } \usage{ \method{goodness}{cca}(object, display = c("species", "sites"), choices, model = c("CCA", "CA"), statistic = c("explained", "distance"), summarize = FALSE, ...) inertcomp(object, display = c("species", "sites"), statistic = c("explained", "distance"), proportional = FALSE) spenvcor(object) intersetcor(object) vif.cca(object) \method{alias}{cca}(object, names.only = FALSE, ...) } \arguments{ \item{object}{A result object from \code{\link{cca}}, \code{\link{rda}}, \code{\link{capscale}} or \code{\link{decorana}}. } \item{display}{Display \code{"species"} or \code{"sites"}. } \item{choices}{Axes shown. Default is to show all axes of the \code{"model"}. } \item{model}{Show constrained (\code{"CCA"}) or unconstrained (\code{"CA"}) results. } \item{statistic}{Statistic used: \code{"explained"} gives the cumulative percentage accounted for, \code{"distance"} shows the residual distances. Distances are not available for sites in constrained or partial analyses. } \item{summarize}{Show only the accumulated total. } \item{proportional}{Give the inertia components as proportional for the corresponding total.} \item{names.only}{Return only names of aliased variable(s) instead of defining equations.} \item{\dots}{Other parameters to the functions.} } \details{ Function \code{goodness} gives the diagnostic statistics for species or sites. The alternative statistics are the cumulative proportion of inertia accounted for by the axes, and the residual distance left unaccounted for. The conditional (``partialled out'') constraints are always regarded as explained and included in the statistics. Function \code{inertcomp} decomposes the inertia into partial, constrained and unconstrained components for each site or species. Instead of inertia, the function can give the total dispersion or distances from the centroid for each component. Function \code{spenvcor} finds the so-called \dQuote{species -- environment correlation} or (weighted) correlation of weighted average scores and linear combination scores. This is a bad measure of goodness of ordination, because it is sensitive to extreme scores (like correlations are), and very sensitive to overfitting or using too many constraints. Better models often have poorer correlations. Function \code{\link{ordispider}} can show the same graphically. Function \code{intersetcor} finds the so-called \dQuote{interset correlation} or (weighted) correlation of weighted averages scores and constraints. The defined contrasts are used for factor variables. This is a bad measure since it is a correlation. Further, it focuses on correlations between single contrasts and single axes instead of looking at the multivariate relationship. Fitted vectors (\code{\link{envfit}}) provide a better alternative. Biplot scores (see \code{\link{scores.cca}}) are a multivariate alternative for (weighted) correlation between linear combination scores and constraints. Function \code{vif.cca} gives the variance inflation factors for each constraint or contrast in factor constraints. In partial ordination, conditioning variables are analysed together with constraints. Variance inflation is a diagnostic tool to identify useless constraints. A common rule is that values over 10 indicate redundant constraints. If later constraints are complete linear combinations of conditions or previous constraints, they will be completely removed from the estimation, and no biplot scores or centroids are calculated for these aliased constraints. A note will be printed with default output if there are aliased constraints. Function \code{alias} will give the linear coefficients defining the aliased constraints, or only their names with argument \code{names.only = TRUE}. } \value{ The functions return matrices or vectors as is appropriate. } \references{ Greenacre, M. J. (1984). Theory and applications of correspondence analysis. Academic Press, London. Gross, J. (2003). Variance inflation factors. \emph{R News} 3(1), 13--15. } \author{Jari Oksanen. The \code{vif.cca} relies heavily on the code by W. N. Venables. \code{alias.cca} is a simplified version of \code{\link{alias.lm}}.} \note{ It is a common practise to use \code{goodness} statistics to remove species from ordination plots, but this may not be a good idea, as the total inertia is not a meaningful concept in \code{cca}, in particular for rare species. Function \code{vif} is defined as generic in package \pkg{car} (\code{\link[car]{vif}}), but if you have not loaded that package you must specify the call as \code{vif.cca}. Variance inflation factor is useful diagnostic tool for detecting nearly collinear constraints, but these are not a problem with algorithm used in this package to fit a constrained ordination. } \seealso{\code{\link{cca}}, \code{\link{rda}}, \code{\link{capscale}}, \code{\link{decorana}}, \code{\link[car]{vif}}. } \examples{ data(dune) data(dune.env) mod <- cca(dune ~ A1 + Management + Condition(Moisture), data=dune.env) goodness(mod) goodness(mod, summ = TRUE) # Inertia components inertcomp(mod, prop = TRUE) inertcomp(mod, stat="d") # vif.cca vif.cca(mod) # Aliased constraints mod <- cca(dune ~ ., dune.env) mod vif.cca(mod) alias(mod) with(dune.env, table(Management, Manure)) # The standard correlations (not recommended) spenvcor(mod) intersetcor(mod) } \keyword{ multivariate } vegan/man/fisherfit.Rd0000644000176200001440000002375312031516374014413 0ustar liggesusers\name{fisherfit} \alias{fisherfit} \alias{as.fisher} \alias{plot.fisherfit} \alias{profile.fisherfit} \alias{confint.fisherfit} \alias{plot.profile.fisherfit} \alias{prestonfit} \alias{prestondistr} \alias{as.preston} \alias{plot.prestonfit} \alias{lines.prestonfit} \alias{plot.preston} \alias{lines.preston} \alias{plot.fisher} \alias{veiledspec} \title{Fit Fisher's Logseries and Preston's Lognormal Model to Abundance Data} \description{ Function \code{fisherfit} fits Fisher's logseries to abundance data. Function \code{prestonfit} groups species frequencies into doubling octave classes and fits Preston's lognormal model, and function \code{prestondistr} fits the truncated lognormal model without pooling the data into octaves. } \usage{ fisherfit(x, ...) \method{confint}{fisherfit}(object, parm, level = 0.95, ...) \method{profile}{fisherfit}(fitted, alpha = 0.01, maxsteps = 20, del = zmax/5, ...) prestonfit(x, tiesplit = TRUE, ...) prestondistr(x, truncate = -1, ...) \method{plot}{prestonfit}(x, xlab = "Frequency", ylab = "Species", bar.col = "skyblue", line.col = "red", lwd = 2, ...) \method{lines}{prestonfit}(x, line.col = "red", lwd = 2, ...) veiledspec(x, ...) as.fisher(x, ...) \method{plot}{fisher}(x, xlab = "Frequency", ylab = "Species", bar.col = "skyblue", kind = c("bar", "hiplot", "points", "lines"), add = FALSE, ...) as.preston(x, tiesplit = TRUE, ...) \method{plot}{preston}(x, xlab = "Frequency", ylab = "Species", bar.col = "skyblue", ...) \method{lines}{preston}(x, xadjust = 0.5, ...) } \arguments{ \item{x}{Community data vector for fitting functions or their result object for \code{plot} functions.} \item{object, fitted}{Fitted model.} \item{parm}{Not used.} \item{level}{The confidence level required.} \item{alpha}{The extend of profiling as significance.} \item{maxsteps}{Maximum number of steps in profiling.} \item{del}{Step length.} \item{tiesplit}{Split frequencies \eqn{1, 2, 4, 8} etc between adjacent octaves.} \item{truncate}{Truncation point for log-Normal model, in log2 units. Default value \eqn{-1} corresponds to the left border of zero Octave. The choice strongly influences the fitting results.} \item{xlab, ylab}{Labels for \code{x} and \code{y} axes.} \item{bar.col}{Colour of data bars.} \item{line.col}{Colour of fitted line.} \item{lwd}{Width of fitted line.} \item{kind}{Kind of plot to drawn: \code{"bar"} is similar bar plot as in \code{plot.fisherfit}, \code{"hiplot"} draws vertical lines as with \command{plot(..., type="h")}, and \code{"points"} and \code{"lines"} are obvious.} \item{add}{Add to an existing plot.} \item{xadjust}{Adjustment of horizontal positions in octaves.} \item{\dots}{Other parameters passed to functions. Ignored in \code{prestonfit} and \code{tiesplit} passed to \code{as.preston} in \code{prestondistr}. } } \details{ In Fisher's logarithmic series the expected number of species \eqn{f} with \eqn{n} observed individuals is \eqn{f_n = \alpha x^n / n} (Fisher et al. 1943). The estimation follows Kempton & Taylor (1974) and uses function \code{\link{nlm}}. The estimation is possible only for genuine counts of individuals. The parameter \eqn{\alpha} is used as a diversity index, and \eqn{\alpha} and its standard error can be estimated with a separate function \code{\link{fisher.alpha}}. The parameter \eqn{x} is taken as a nuisance parameter which is not estimated separately but taken to be \eqn{n/(n+\alpha)}. Helper function \code{as.fisher} transforms abundance data into Fisher frequency table. Function \code{fisherfit} estimates the standard error of \eqn{\alpha}{alpha}. However, the confidence limits cannot be directly estimated from the standard errors, but you should use function \code{confint} based on profile likelihood. Function \code{confint} uses function \code{\link[MASS]{confint.glm}} of the \pkg{MASS} package, using \code{profile.fisherfit} for the profile likelihood. Function \code{profile.fisherfit} follows \code{\link[MASS]{profile.glm}} and finds the \eqn{\tau}{tau} parameter or signed square root of two times log-Likelihood profile. The profile can be inspected with a \code{plot} function which shows the \eqn{\tau}{tau} and a dotted line corresponding to the Normal assumption: if standard errors can be directly used in Normal inference these two lines are similar. Preston (1948) was not satisfied with Fisher's model which seemed to imply infinite species richness, and postulated that rare species is a diminishing class and most species are in the middle of frequency scale. This was achieved by collapsing higher frequency classes into wider and wider ``octaves'' of doubling class limits: 1, 2, 3--4, 5--8, 9--16 etc. occurrences. It seems that Preston regarded frequencies 1, 2, 4, \emph{etc.}. as \dQuote{tied} between octaves (Williamson & Gaston 2005). This means that only half of the species with frequency 1 are shown in the lowest octave, and the rest are transferred to the second octave. Half of the species from the second octave are transferred to the higher one as well, but this is usually not as large a number of species. This practise makes data look more lognormal by reducing the usually high lowest octaves. This can be achieved by setting argument \code{tiesplit = TRUE}. With \code{tiesplit = FALSE} the frequencies are not split, but all ones are in the lowest octave, all twos in the second, etc. Williamson & Gaston (2005) discuss alternative definitions in detail, and they should be consulted for a critical review of log-Normal model. Any logseries data will look like lognormal when plotted in Preston's way. The expected frequency \eqn{f} at abundance octave \eqn{o} is defined by \eqn{f_o = S_0 \exp(-(\log_2(o) - \mu)^2/2/\sigma^2)}{f = S0 exp(-(log2(o)-mu)^2/2/sigma^2)}, where \eqn{\mu} is the location of the mode and \eqn{\sigma} the width, both in \eqn{\log_2}{log2} scale, and \eqn{S_0}{S0} is the expected number of species at mode. The lognormal model is usually truncated on the left so that some rare species are not observed. Function \code{prestonfit} fits the truncated lognormal model as a second degree log-polynomial to the octave pooled data using Poisson (when \code{tiesplit = FALSE}) or quasi-Poisson (when \code{tiesplit = TRUE}) error. Function \code{prestondistr} fits left-truncated Normal distribution to \eqn{\log_2}{log2} transformed non-pooled observations with direct maximization of log-likelihood. Function \code{prestondistr} is modelled after function \code{\link[MASS]{fitdistr}} which can be used for alternative distribution models. The functions have common \code{print}, \code{plot} and \code{lines} methods. The \code{lines} function adds the fitted curve to the octave range with line segments showing the location of the mode and the width (sd) of the response. Function \code{as.preston} transforms abundance data to octaves. Argument \code{tiesplit} will not influence the fit in \code{prestondistr}, but it will influence the barplot of the octaves. The total extrapolated richness from a fitted Preston model can be found with function \code{veiledspec}. The function accepts results both from \code{prestonfit} and from \code{prestondistr}. If \code{veiledspec} is called with a species count vector, it will internally use \code{prestonfit}. Function \code{\link{specpool}} provides alternative ways of estimating the number of unseen species. In fact, Preston's lognormal model seems to be truncated at both ends, and this may be the main reason why its result differ from lognormal models fitted in Rank--Abundance diagrams with functions \code{\link{rad.lognormal}}. } \value{ The function \code{prestonfit} returns an object with fitted \code{coefficients}, and with observed (\code{freq}) and fitted (\code{fitted}) frequencies, and a string describing the fitting \code{method}. Function \code{prestondistr} omits the entry \code{fitted}. The function \code{fisherfit} returns the result of \code{\link{nlm}}, where item \code{estimate} is \eqn{\alpha}. The result object is amended with the following items: \item{df.residuals}{Residual degrees of freedom.} \item{nuisance}{Parameter \eqn{x}.} \item{fisher}{Observed data from \code{as.fisher}.} } \references{ Fisher, R.A., Corbet, A.S. & Williams, C.B. (1943). The relation between the number of species and the number of individuals in a random sample of animal population. \emph{Journal of Animal Ecology} 12: 42--58. Kempton, R.A. & Taylor, L.R. (1974). Log-series and log-normal parameters as diversity discriminators for Lepidoptera. \emph{Journal of Animal Ecology} 43: 381--399. Preston, F.W. (1948) The commonness and rarity of species. \emph{Ecology} 29, 254--283. Williamson, M. & Gaston, K.J. (2005). The lognormal distribution is not an appropriate null hypothesis for the species--abundance distribution. \emph{Journal of Animal Ecology} 74, 409--422. } \author{Bob O'Hara (\code{fisherfit}) and Jari Oksanen. } \seealso{\code{\link{diversity}}, \code{\link{fisher.alpha}}, \code{\link{radfit}}, \code{\link{specpool}}. Function \code{\link[MASS]{fitdistr}} of \pkg{MASS} package was used as the model for \code{prestondistr}. Function \code{\link{density}} can be used for smoothed ``non-parametric'' estimation of responses, and \code{\link{qqplot}} is an alternative, traditional and more effective way of studying concordance of observed abundances to any distribution model. } \examples{ data(BCI) mod <- fisherfit(BCI[5,]) mod plot(profile(mod)) confint(mod) # prestonfit seems to need large samples mod.oct <- prestonfit(colSums(BCI)) mod.ll <- prestondistr(colSums(BCI)) mod.oct mod.ll plot(mod.oct) lines(mod.ll, line.col="blue3") # Different ## Smoothed density den <- density(log2(colSums(BCI))) lines(den$x, ncol(BCI)*den$y, lwd=2) # Fairly similar to mod.oct ## Extrapolated richness veiledspec(mod.oct) veiledspec(mod.ll) } \keyword{ univar } \keyword{ distribution } vegan/man/eventstar.Rd0000644000176200001440000001107711630735112014434 0ustar liggesusers\encoding{UTF-8} \name{eventstar} \alias{eventstar} \title{ Scale Parameter at the Minimum of the Tsallis Evenness Profile } \description{ The function \code{eventstar} finds the minimum (\eqn{q^*}{q*}) of the evenness profile based on the Tsallis entropy. This scale factor of the entropy represents a specific weighting of species relative frequencies that leads to minimum evenness of the community (Mendes et al. 2008). } \usage{ eventstar(x, qmax = 5) } \arguments{ \item{x}{ A community matrix or a numeric vector. } \item{qmax}{ Maximum scale parameter of the Tsallis entropy to be used in finding the minimum of Tsallis based evenness in the range \code{c(0, qmax)}. } } \details{ The function \code{eventstar} finds a characteristic value of the scale parameter \eqn{q} of the Tsallis entropy corresponding to minimum of the evenness (equitability) profile based on Tsallis entropy. This value was proposed by Mendes et al. (2008) as \eqn{q^*}{q*}. The \eqn{q^\ast}{q*} index represents the scale parameter of the one parameter Tsallis diversity family that leads to the greatest deviation from the maximum equitability given the relative abundance vactor of a community. The value of \eqn{q^\ast}{q*} is found by identifying the minimum of the evenness profile over scaling factor \eqn{q}{q} by one-dimensional minimization. Because evenness profile is known to be a convex function, it is guaranteed that underlying \code{\link{optimize}} function will find a unique solution if it is in the range \code{c(0, qmax)}. The scale parameter value \eqn{q^\ast}{q*} is used to find corresponding values of diversity (\eqn{H_{q^\ast}}{H.q*}), evenness (\eqn{H_{q^\ast}(\max)}{H.q*(max)}), and numbers equivalent (\eqn{D_{q^\ast}}{D.q*}). For calculation details, see \code{\link{tsallis}} and Examples below. Mendes et al. (2008) advocated the use of \eqn{q^\ast}{q*} and corresponding diversity, evenness, and Hill numbers, because it is a unique value representing the diversity profile, and is is positively associated with rare species in the community, thus it is a potentially useful indicator of certain relative abundance distributions of the communities. } \value{ A data frame with columns: \itemize{ \item{\code{qstar}}{ scale parameter value \eqn{q\ast}{q*} corresponding to minimum value of Tsallis based evenness profile.} \item{\code{Estar}}{ Value of evenness based on normalized Tsallis entropy at \eqn{q^\ast}{q*}.} \item{\code{Hstar}}{ Value of Tsallis entropy at \eqn{q^\ast}{q*}.} \item{\code{Dstar}}{ Value of Tsallis entropy at \eqn{q^\ast}{q*} converted to numbers equivalents (also called as Hill numbers, effective number of species, \sQuote{true} diversity; cf. Jost 2007).} } See \code{\link{tsallis}} for calculation details. } \references{ Mendes, R.S., Evangelista, L.R., Thomaz, S.M., Agostinho, A.A. and Gomes, L.C. (2008) A unified index to measure ecological diversity and species rarity. \emph{Ecography} \bold{31}, 450--456. Jost, L. (2007) Partitioning diversity into independent alpha and beta components. \emph{Ecology} \bold{88}, 2427--2439. Tsallis, C. (1988) Possible generalization of Boltzmann-Gibbs statistics. \emph{J. Stat. Phis.} \bold{52}, 479--487. } \note{ Values for \eqn{q^\ast}{q*} found by Mendes et al. (2008) ranged from 0.56 and 1.12 presenting low variability, so an interval between 0 and 5 should safely encompass the possibly expected \eqn{q^\ast}{q*} values in practice, but profiling the evenness and changing the value of the \code{qmax} argument is advised if output values near the range limits are found. } \author{ Eduardo Ribeiro Cunha \email{edurcunha@gmail.com} and Heloisa Beatriz Antoniazi Evangelista \email{helobeatriz@gmail.com}, with technical input of Péter Sólymos. } \seealso{ Tsallis entropy: \code{\link{tsallis}} } \examples{ data(BCI) (x <- eventstar(BCI[1:5,])) ## profiling y <- as.numeric(BCI[10,]) (z <- eventstar(y)) q <- seq(0, 2, 0.05) Eprof <- tsallis(y, scales=q, norm=TRUE) Hprof <- tsallis(y, scales=q) Dprof <- tsallis(y, scales=q, hill=TRUE) opar <- par(mfrow=c(3,1)) plot(q, Eprof, type="l", main="Evenness") abline(v=z$qstar, h=tsallis(y, scales=z$qstar, norm=TRUE), col=2) plot(q, Hprof, type="l", main="Diversity") abline(v=z$qstar, h=tsallis(y, scales=z$qstar), col=2) plot(q, Dprof, type="l", main="Effective number of species") abline(v=z$qstar, h=tsallis(y, scales=z$qstar, hill=TRUE), col=2) par(opar) } \keyword{ optimize } \keyword{ multivariate } \keyword{ utilities } vegan/man/envfit.Rd0000644000176200001440000002452212014462227013714 0ustar liggesusers\name{envfit} \alias{envfit} \alias{envfit.default} \alias{envfit.formula} \alias{vectorfit} \alias{factorfit} \alias{plot.envfit} \alias{scores.envfit} \alias{labels.envfit} \title{Fits an Environmental Vector or Factor onto an Ordination } \description{ The function fits environmental vectors or factors onto an ordination. The projections of points onto vectors have maximum correlation with corresponding environmental variables, and the factors show the averages of factor levels. } \usage{ \method{envfit}{default}(ord, env, permutations = 999, strata, choices=c(1,2), display = "sites", w = weights(ord), na.rm = FALSE, ...) \method{envfit}{formula}(formula, data, ...) \method{plot}{envfit}(x, choices = c(1,2), labels, arrow.mul, at = c(0,0), axis = FALSE, p.max = NULL, col = "blue", bg, add = TRUE, ...) \method{scores}{envfit}(x, display, choices, ...) vectorfit(X, P, permutations = 0, strata, w, ...) factorfit(X, P, permutations = 0, strata, w, ...) } \arguments{ \item{ord}{An ordination object or other structure from which the ordination \code{\link{scores}} can be extracted (including a data frame or matrix of scores).} \item{env}{Data frame, matrix or vector of environmental variables. The variables can be of mixed type (factors, continuous variables) in data frames.} \item{X}{Matrix or data frame of ordination scores.} \item{P}{Data frame, matrix or vector of environmental variable(s). These must be continuous for \code{vectorfit} and factors or characters for \code{factorfit}. } \item{permutations}{ Number of permutations for assessing significance of vectors or factors. Set to \code{0} to skip permutations.} \item{formula, data}{Model \code{\link{formula}} and data. } \item{na.rm}{Remove points with missing values in ordination scores or environmental variables. The operation is casewise: the whole row of data is removed if there is a missing value and \code{na.rm = TRUE}.} \item{x}{A result object from \code{envfit}.} \item{choices}{Axes to plotted.} \item{labels}{Change plotting labels. The argument should be a list with elements \code{vectors} and \code{factors} which give the new plotting labels. If either of these elements is omitted, the default labels will be used. If there is only one type of elements (only \code{vectors} or only \code{factors}), the labels can be given as vector. The default labels can be displayed with \code{labels} command.} \item{arrow.mul}{Multiplier for vector lengths. The arrows are automatically scaled similarly as in \code{\link{plot.cca}} if this is not given and \code{add = TRUE}.} \item{at}{The origin of fitted arrows in the plot. If you plot arrows in other places then origin, you probably have to specify \code{arrrow.mul}.} \item{axis}{Plot axis showing the scaling of fitted arrows.} \item{p.max}{Maximum estimated \eqn{P} value for displayed variables. You must calculate \eqn{P} values with setting \code{permutations} to use this option. } \item{col}{Colour in plotting.} \item{bg}{Background colour for labels. If \code{bg} is set, the labels are displayed with \code{\link{ordilabel}} instead of \code{text}. See Examples for using semitransparent background.} \item{add}{Results added to an existing ordination plot.} \item{strata}{An integer vector or factor specifying the strata for permutation. If supplied, observations are permuted only within the specified strata.} \item{display}{In fitting functions these are ordinary site scores or linear combination scores (\code{"lc"}) in constrained ordination (\code{\link{cca}}, \code{\link{rda}}, \code{\link{capscale}}). In \code{scores} function they are either \code{"vectors"} or \code{"factors"} (with synonyms \code{"bp"} or \code{"cn"}, resp.).} \item{w}{Weights used in fitting (concerns mainly \code{\link{cca}} and \code{\link{decorana}} results which have nonconstant weights).} \item{...}{Parameters passed to \code{\link{scores}}.} } \details{ Function \code{envfit} finds vectors or factor averages of environmental variables. Function \code{plot.envfit} adds these in an ordination diagram. If \code{X} is a \code{\link{data.frame}}, \code{envfit} uses \code{factorfit} for \code{\link{factor}} variables and \code{vectorfit} for other variables. If \code{X} is a matrix or a vector, \code{envfit} uses only \code{vectorfit}. Alternatively, the model can be defined a simplified model \code{\link{formula}}, where the left hand side must be an ordination result object or a matrix of ordination scores, and right hand side lists the environmental variables. The formula interface can be used for easier selection and/or transformation of environmental variables. Only the main effects will be analysed even if interaction terms were defined in the formula. The printed output of continuous variables (vectors) gives the direction cosines which are the coordinates of the heads of unit length vectors. In \code{plot} these are scaled by their correlation (square root of the column \code{r2}) so that \dQuote{weak} predictors have shorter arrows than \dQuote{strong} predictors. You can see the scaled relative lengths using command \code{scores}. The \code{plot}ted (and scaled) arrows are further adjusted to the current graph using a constant multiplier: this will keep the relative \code{r2}-scaled lengths of the arrows but tries to fill the current plot. You can see the multiplier using \code{vegan:::ordiArrowMul(result_of_envfit)}, and set it with the argument \code{arrow.mul}. Functions \code{vectorfit} and \code{factorfit} can be called directly. Function \code{vectorfit} finds directions in the ordination space towards which the environmental vectors change most rapidly and to which they have maximal correlations with the ordination configuration. Function \code{factorfit} finds averages of ordination scores for factor levels. Function \code{factorfit} treats ordered and unordered factors similarly. If \code{permutations} \eqn{> 0}, the `significance' of fitted vectors or factors is assessed using permutation of environmental variables. The goodness of fit statistic is squared correlation coefficient (\eqn{r^2}). For factors this is defined as \eqn{r^2 = 1 - ss_w/ss_t}, where \eqn{ss_w} and \eqn{ss_t} are within-group and total sums of squares. See \code{\link{permutations}} for additional details on permutation tests in Vegan. User can supply a vector of prior weights \code{w}. If the ordination object has weights, these will be used. In practise this means that the row totals are used as weights with \code{\link{cca}} or \code{\link{decorana}} results. If you do not like this, but want to give equal weights to all sites, you should set \code{w = NULL}. The weighted fitting gives similar results to biplot arrows and class centroids in \code{\link{cca}}. For complete similarity between fitted vectors and biplot arrows, you should set \code{display = "lc"} (and possibly \code{scaling = 2}). The lengths of arrows for fitted vectors are automatically adjusted for the physical size of the plot, and the arrow lengths cannot be compared across plots. For similar scaling of arrows, you must explicitly set the \code{arrow.mul} argument in the \code{plot} command. The results can be accessed with \code{scores.envfit} function which returns either the fitted vectors scaled by correlation coefficient or the centroids of the fitted environmental variables. } \value{ Functions \code{vectorfit} and \code{factorfit} return lists of classes \code{vectorfit} and \code{factorfit} which have a \code{print} method. The result object have the following items: \item{arrows}{Arrow endpoints from \code{vectorfit}. The arrows are scaled to unit length.} \item{centroids}{Class centroids from \code{factorfit}.} \item{r}{Goodness of fit statistic: Squared correlation coefficient} \item{permutations}{Number of permutations.} \item{pvals}{Empirical P-values for each variable.} Function \code{envfit} returns a list of class \code{envfit} with results of \code{vectorfit} and \code{envfit} as items. Function \code{plot.envfit} scales the vectors by correlation. } \author{Jari Oksanen. The permutation test derives from the code suggested by Michael Scroggie. } \note{ Fitted vectors have become the method of choice in displaying environmental variables in ordination. Indeed, they are the optimal way of presenting environmental variables in Constrained Correspondence Analysis \code{\link{cca}}, since there they are the linear constraints. In unconstrained ordination the relation between external variables and ordination configuration may be less linear, and therefore other methods than arrows may be more useful. The simplest is to adjust the plotting symbol sizes (\code{cex}, \code{\link{symbols}}) by environmental variables. Fancier methods involve smoothing and regression methods that abound in \R, and \code{\link{ordisurf}} provides a wrapper for some. } \seealso{ A better alternative to vectors may be \code{\link{ordisurf}}. } \examples{ data(varespec) data(varechem) library(MASS) ord <- metaMDS(varespec) (fit <- envfit(ord, varechem, perm = 999)) scores(fit, "vectors") plot(ord) plot(fit) plot(fit, p.max = 0.05, col = "red") ## Adding fitted arrows to CCA. We use "lc" scores, and hope ## that arrows are scaled similarly in cca and envfit plots ord <- cca(varespec ~ Al + P + K, varechem) plot(ord, type="p") fit <- envfit(ord, varechem, perm = 999, display = "lc") plot(fit, p.max = 0.05, col = "red") ## Class variables, formula interface, and displaying the ## inter-class variability with `ordispider', and semitransparent ## white background for labels (semitransparent colours are not ## supported by all graphics devices) data(dune) data(dune.env) attach(dune.env) ord <- cca(dune) fit <- envfit(ord ~ Moisture + A1, dune.env, perm = 0) plot(ord, type = "n") ordispider(ord, Moisture, col="skyblue") points(ord, display = "sites", col = as.numeric(Moisture), pch=16) plot(fit, cex=1.2, axis=TRUE, bg = rgb(1, 1, 1, 0.5)) ## Use shorter labels for factor centroids labels(fit) plot(ord) plot(fit, labels=list(factors = paste("M", c(1,2,4,5), sep = "")), bg = rgb(1,1,0,0.5)) } \keyword{multivariate } \keyword{aplot} \keyword{htest} vegan/man/eigenvals.Rd0000644000176200001440000000641611625737155014414 0ustar liggesusers\name{eigenvals} \Rdversion{1.1} \alias{eigenvals} \alias{eigenvals.default} \alias{eigenvals.prcomp} \alias{eigenvals.princomp} \alias{eigenvals.cca} \alias{eigenvals.wcmdscale} \alias{eigenvals.pcnm} \alias{eigenvals.dudi} \alias{eigenvals.pca} \alias{eigenvals.pco} \alias{summary.eigenvals} \title{ Extract Eigenvalues from an Ordination Object } \description{ Function extracts eigenvalues from an object that has them. Many multivariate methods return such objects. } \usage{ eigenvals(x, ...) \method{eigenvals}{cca}(x, constrained = FALSE, ...) \method{summary}{eigenvals}(object, ...) } \arguments{ \item{x}{ An object from which to extract eigenvalues. } \item{object}{ An \code{eigenvals} result object. } \item{constrained}{ Return only constrained eigenvalues. } \item{\dots}{ Other arguments to the functions (usually ignored) } } \details{ This is a generic function that has methods for \code{\link{cca}}, \code{\link{wcmdscale}}, \code{\link{pcnm}}, \code{\link{prcomp}}, \code{\link{princomp}}, \code{\link[ade4]{dudi}} (of \pkg{ade4}), and \code{\link[labdsv]{pca}} and \code{\link[labdsv]{pco}} (of \pkg{labdsv}) result objects. The default method also extracts eigenvalues if the result looks like being from \code{\link{eigen}} or \code{\link{svd}}. Functions \code{\link{prcomp}} and \code{\link{princomp}} contain square roots of eigenvalues that all called standard deviations, but \code{eigenvals} function returns their squares. Function \code{\link{svd}} contains singular values, but function \code{eigenvals} returns their squares. For constrained ordination methods \code{\link{cca}}, \code{\link{rda}} and \code{\link{capscale}} the function returns the both constrained and unconstrained eigenvalues concatenated in one vector, but the partial component will be ignored. However, with argument \code{constrained = TRUE} only constrained eigenvalues are returned. The \code{summary} of \code{eigenvals} result returns eigenvalues, proportion explained and cumulative proportion explained. The result object can have some negative eigenvalues (\code{\link{wcmdscale}}, \code{\link{capscale}}, \code{\link{pcnm}}) which correspond to imaginary axes of Euclidean mapping of non-Euclidean distances (Gower 1985). In these cases, the sum of absolute values of eigenvalues is used in calculating the proportions explained, and real axes (corresponding to positive eigenvalues) will only explain a part of total variation (Mardia et al. 1979, Gower 1985). } \value{ An object of class \code{"eigenvals"} which is a vector of eigenvalues. } \author{ Jari Oksanen. } \references{ Gower, J. C. (1985). Properties of Euclidean and non-Euclidean distance matrices. \emph{Linear Algebra and its Applications} 67, 81--97. Mardia, K. V., Kent, J. T. and Bibby, J. M. (1979). Chapter 14 of \emph{Multivariate Analysis}, London: Academic Press. } \seealso{ \code{\link{eigen}}, \code{\link{svd}}, \code{\link{prcomp}}, \code{\link{princomp}}, \code{\link{cca}}, \code{\link{rda}}, \code{\link{capscale}}, \code{\link{wcmdscale}}, \code{\link{cca.object}}. } \examples{ data(varespec) data(varechem) mod <- cca(varespec ~ Al + P + K, varechem) ev <- eigenvals(mod) ev summary(ev) } \keyword{ multivariate } vegan/man/dune.taxon.Rd0000644000176200001440000000175110756042712014507 0ustar liggesusers\name{dune.taxon} \alias{dune.taxon} \docType{data} \title{Taxonomic Classification of Dune Meadow Species} \description{ Classification table of the species in the \code{\link{dune}} data set. } \usage{data(dune.taxon)} \format{ A data frame with 30 species (rows) classified into five taxonomic levels (columns). } \details{ The classification of vascular plants is adapted from AGP (2003), and that of mosses from Hill et al. (2006). } \references{ AGP [Angiosperm Phylogeny Group] (2003) An update of the Angiosperm Phylogeny Group classification for the orders and families of flowering plants: AGP II. \emph{Bot. J. Linnean Soc.} \strong{141}: 399--436. Hill, M.O et al. (2006) An annotated checklist of the mosses of Europe and Macaronesia. \emph{J. Bryology} \strong{28}: 198--267. } \note{ The data set was made to demonstrate \code{\link{taxondive}}, and will probably be removed after a better example is found. } \examples{ data(dune.taxon) } \keyword{datasets} vegan/man/dune.Rd0000644000176200001440000000340110756042712013351 0ustar liggesusers\name{dune} \alias{dune} \alias{dune.env} \docType{data} \title{Vegetation and Environment in Dutch Dune Meadows. } \usage{ data(dune) data(dune.env) } \description{ The dune meadow vegetation data, \code{dune}, has cover class values of 30 species on 20 sites. The corresponding environmental data frame \code{dune.env} has following entries: } \format{ For \code{dune}, a data frame of observations of 30 species at 20 sites. For \code{dune.env}, a data frame of 20 observations on the following 5 variables: \describe{ \item{A1:}{a numeric vector of thickness of soil A1 horizon.} \item{Moisture:}{an ordered factor with levels: \code{1} < \code{2} < \code{4} < \code{5}.} %\item{Moisture}{\code{1} < \code{2} < \code{4} < \code{5}} \item{Management:}{a factor with levels: \code{BF} (Biological farming), \code{HF} (Hobby farming), \code{NM} (Nature Conservation Management), and \code{SF} (Standard Farming).} %\item{Management}{\code{BF}: Biological Farming } %\item{Management}{\code{HF}: Hobby Farming } %\item{Management}{\code{NM}: Nature Conservation Management } %\item{Management}{\code{SF}: Standard Farming } \item{Use:}{an ordered factor of land-use with levels: \code{Hayfield} < \code{Haypastu} < \code{Pasture}.} %\item{Use}{\code{Hayfield} < \code{Haypastu} < \code{Pasture}} \item{Manure:}{an ordered factor with levels: \code{0} < \code{1} < \code{2} < \code{3} < \code{4}.} %\item{Manure}{\code{0} < \code{1} < \code{2} < \code{3} < \code{4}} } } \source{ Jongman, R.H.G, ter Braak, C.J.F & van Tongeren, O.F.R. (1987). \emph{Data Analysis in Community and Landscape Ecology}. Pudoc, Wageningen. } \examples{ data(dune) data(dune.env) } \keyword{datasets} vegan/man/diversity.Rd0000644000176200001440000001720711672360245014453 0ustar liggesusers\encoding{UTF-8} \name{diversity} \alias{diversity} \alias{rarefy} \alias{rrarefy} \alias{drarefy} \alias{rarecurve} \alias{fisher.alpha} \alias{specnumber} \title{ Ecological Diversity Indices and Rarefaction Species Richness } \description{ Shannon, Simpson, and Fisher diversity indices and rarefied species richness for community ecologists. } \usage{ diversity(x, index = "shannon", MARGIN = 1, base = exp(1)) rarefy(x, sample, se = FALSE, MARGIN = 1) rrarefy(x, sample) drarefy(x, sample) rarecurve(x, step = 1, sample, xlab = "Sample Size", ylab = "Species", label = TRUE, ...) fisher.alpha(x, MARGIN = 1, se = FALSE, ...) specnumber(x, groups, MARGIN = 1) } \arguments{ \item{x}{Community data, a matrix-like object or a vector.} \item{index}{Diversity index, one of \code{"shannon"}, \code{"simpson"} or \code{"invsimpson"}.} \item{MARGIN}{Margin for which the index is computed. } \item{base}{ The logarithm \code{base} used in \code{shannon}.} \item{sample}{Subsample size for rarefying community, either a single value or a vector.} \item{se}{Estimate standard errors.} \item{step}{Step size for sample sizes in rarefaction curves.} \item{xlab, ylab}{Axis labels in plots of rarefaction curves.} \item{label}{Label rarefaction curves by rownames of \code{x} (logical).} \item{groups}{A grouping factor: if given, finds the total number of species in each group.} \item{...}{Parameters passed to \code{\link{nlm}}, or to \code{\link{plot}}, \code{\link{lines}} and \code{\link{ordilabel}} in \code{rarecurve}.} } \details{ Shannon or Shannon--Weaver (or Shannon--Wiener) index is defined as \eqn{H' = -\sum_i p_i \log_{b} p_i}{H = -sum p_i log(b) p_i}, where \eqn{p_i} is the proportional abundance of species \eqn{i} and \eqn{b} is the base of the logarithm. It is most popular to use natural logarithms, but some argue for base \eqn{b = 2} (which makes sense, but no real difference). Both variants of Simpson's index are based on \eqn{D = \sum p_i^2}{D = sum p_i^2}. Choice \code{simpson} returns \eqn{1-D} and \code{invsimpson} returns \eqn{1/D}. Function \code{rarefy} gives the expected species richness in random subsamples of size \code{sample} from the community. The size of \code{sample} should be smaller than total community size, but the function will silently work for larger \code{sample} as well and return non-rarefied species richness (and standard error = 0). If \code{sample} is a vector, rarefaction of all observations is performed for each sample size separately. Rarefaction can be performed only with genuine counts of individuals. The function \code{rarefy} is based on Hurlbert's (1971) formulation, and the standard errors on Heck et al. (1975). Function \code{rrarefy} generates one randomly rarefied community data frame or vector of given \code{sample} size. The \code{sample} can be a vector giving the sample sizes for each row, and its values must be less or equal to observed number of individuals. The random rarefaction is made without replacement so that the variance of rarefied communities is rather related to rarefaction proportion than to to the size of the \code{sample}. Function \code{drarefy} returns probabilities that species occur in a rarefied community of size \code{sample}. The \code{sample} can be a vector giving the sample sizes for each row. Function \code{rarecurve} draws a rarefaction curve for each row of the input data. The rarefaction curves are evaluated using the interval of \code{step} sample sizes, always including 1 and total sample size. If \code{sample} is specified, a vertical line is drawn at \code{sample} with horizontal lines for the rarefied species richnesses. \code{fisher.alpha} estimates the \eqn{\alpha} parameter of Fisher's logarithmic series (see \code{\link{fisherfit}}). The estimation is possible only for genuine counts of individuals. The function can optionally return standard errors of \eqn{\alpha}. These should be regarded only as rough indicators of the accuracy: the confidence limits of \eqn{\alpha} are strongly non-symmetric and the standard errors cannot be used in Normal inference. Function \code{specnumber} finds the number of species. With \code{MARGIN = 2}, it finds frequencies of species. If \code{groups} is given, finds the total number of species in each group (see example on finding one kind of beta diversity with this option). Better stories can be told about Simpson's index than about Shannon's index, and still grander narratives about rarefaction (Hurlbert 1971). However, these indices are all very closely related (Hill 1973), and there is no reason to despise one more than others (but if you are a graduate student, don't drag me in, but obey your Professor's orders). In particular, the exponent of the Shannon index is linearly related to inverse Simpson (Hill 1973) although the former may be more sensitive to rare species. Moreover, inverse Simpson is asymptotically equal to rarefied species richness in sample of two individuals, and Fisher's \eqn{\alpha} is very similar to inverse Simpson. } \value{ A vector of diversity indices or rarefied species richness values. With a single \code{sample} and \code{se = TRUE}, function \code{rarefy} returns a 2-row matrix with rarefied richness (\code{S}) and its standard error (\code{se}). If \code{sample} is a vector in \code{rarefy}, the function returns a matrix with a column for each \code{sample} size, and if \code{se = TRUE}, rarefied richness and its standard error are on consecutive lines. Function \code{rarecurve} returns \code{\link{invisible}} list of \code{rarefy} results corresponding each drawn curve. With option \code{se = TRUE}, function \code{fisher.alpha} returns a data frame with items for \eqn{\alpha} (\code{alpha}), its approximate standard errors (\code{se}), residual degrees of freedom (\code{df.residual}), and the \code{code} returned by \code{\link{nlm}} on the success of estimation. } \references{ Fisher, R.A., Corbet, A.S. & Williams, C.B. (1943). The relation between the number of species and the number of individuals in a random sample of animal population. \emph{Journal of Animal Ecology} \strong{12}, 42--58. Heck, K.L., van Belle, G. & Simberloff, D. (1975). Explicit calculation of the rarefaction diversity measurement and the determination of sufficient sample size. \emph{Ecology} \strong{56}, 1459--1461. Hurlbert, S.H. (1971). The nonconcept of species diversity: a critique and alternative parameters. \emph{Ecology} \strong{52}, 577--586. } \seealso{Function \code{renyi} for generalized \enc{Rényi}{Renyi} diversity and Hill numbers.} \author{ Jari Oksanen and Bob O'Hara (\code{fisher.alpha}).} \examples{ data(BCI) H <- diversity(BCI) simp <- diversity(BCI, "simpson") invsimp <- diversity(BCI, "inv") ## Unbiased Simpson of Hurlbert 1971 (eq. 5): unbias.simp <- rarefy(BCI, 2) - 1 ## Fisher alpha alpha <- fisher.alpha(BCI) ## Plot all pairs(cbind(H, simp, invsimp, unbias.simp, alpha), pch="+", col="blue") ## Species richness (S) and Pielou's evenness (J): S <- specnumber(BCI) ## rowSums(BCI > 0) does the same... J <- H/log(S) ## beta diversity defined as gamma/alpha - 1: data(dune) data(dune.env) alpha <- with(dune.env, tapply(specnumber(dune), Management, mean)) gamma <- with(dune.env, specnumber(dune, Management)) gamma/alpha - 1 ## Rarefaction (raremax <- min(rowSums(BCI))) Srare <- rarefy(BCI, raremax) plot(S, Srare, xlab = "Observed No. of Species", ylab = "Rarefied No. of Species") abline(0, 1) rarecurve(BCI, step = 20, sample = raremax, col = "blue", cex = 0.6) } \keyword{ univar } vegan/man/distconnected.Rd0000644000176200001440000000725310756042712015255 0ustar liggesusers\name{distconnected} \alias{distconnected} \alias{no.shared} \title{Connectedness of Dissimilarities} \description{ Function \code{distconnected} finds groups that are connected disregarding dissimilarities that are at or above a threshold or \code{NA}. The function can be used to find groups that can be ordinated together or transformed by \code{\link{stepacross}}. Function \code{no.shared} returns a logical dissimilarity object, where \code{TRUE} means that sites have no species in common. This is a minimal structure for \code{distconnected} or can be used to set missing values to dissimilarities. } \usage{ distconnected(dis, toolong = 1, trace = TRUE) no.shared(x) } \arguments{ \item{dis}{Dissimilarity data inheriting from class \code{dist} or a an object, such as a matrix, that can be converted to a dissimilarity matrix. Functions \code{\link{vegdist}} and \code{\link{dist}} are some functions producing suitable dissimilarity data.} \item{toolong}{ Shortest dissimilarity regarded as \code{NA}. The function uses a fuzz factor, so that dissimilarities close to the limit will be made \code{NA}, too. If \code{toolong = 0} (or negative), no dissimilarity is regarded as too long. } \item{trace}{Summarize results of \code{distconnected}} \item{x}{Community data.} } \details{ Data sets are disconnected if they have sample plots or groups of sample plots which share no species with other sites or groups of sites. Such data sets cannot be sensibly ordinated by any unconstrained method because these subsets cannot be related to each other. For instance, correspondence analysis will polarize these subsets with eigenvalue 1. Neither can such dissimilarities be transformed with \code{\link{stepacross}}, because there is no path between all points, and result will contain \code{NA}s. Function \code{distconnected} will find such subsets in dissimilarity matrices. The function will return a grouping vector that can be used for sub-setting the data. If data are connected, the result vector will be all \eqn{1}s. The connectedness between two points can be defined either by a threshold \code{toolong} or using input dissimilarities with \code{NA}s. Function \code{no.shared} returns a \code{dist} structure having value \code{TRUE} when two sites have nothing in common, and value \code{FALSE} when they have at least one shared species. This is a minimal structure that can be analysed with \code{distconnected}. The function can be used to select dissimilarities with no shared species in indices which do not have a fixed upper limit. Function \code{distconnected} uses depth-first search (Sedgewick 1990). } \value{ Function \code{distconnected} returns a vector for observations using integers to identify connected groups. If the data are connected, values will be all \code{1}. Function \code{no.shared} returns an object of class \code{\link{dist}}. } \references{ Sedgewick, R. (1990). \emph{Algorithms in C}. Addison Wesley. } \author{ Jari Oksanen } \seealso{\code{\link{vegdist}} or \code{\link{dist}} for getting dissimilarities, \code{\link{stepacross}} for a case where you may need \code{distconnected}, and for connecting points \code{\link{spantree}}. } \examples{ ## There are no disconnected data in vegan, and the following uses an ## extremely low threshold limit for connectedness. This is for ## illustration only, and not a recommended practice. data(dune) dis <- vegdist(dune) gr <- distconnected(dis, toolong=0.4) # Make sites with no shared species as NA in Manhattan dissimilarities dis <- vegdist(dune, "manhattan") is.na(dis) <- no.shared(dune) } \keyword{ multivariate} vegan/man/dispindmorisita.Rd0000644000176200001440000001071512036544727015634 0ustar liggesusers\encoding{UTF-8} \name{dispindmorisita} \alias{dispindmorisita} \title{Morisita index of intraspecific aggregation} \description{ Calculates the Morisita index of dispersion, standardized index values, and the so called clumpedness and uniform indices. } \usage{ dispindmorisita(x, unique.rm = FALSE, crit = 0.05, na.rm = FALSE) } \arguments{ \item{x}{community data matrix, with sites (samples) as rows and species as columns.} \item{unique.rm}{logical, if \code{TRUE}, unique species (occurring in only one sample) are removed from the result.} \item{crit}{two-sided p-value used to calculate critical Chi-squared values.} \item{na.rm}{logical. Should missing values (including \code{NaN}) be omitted from the calculations?} } \details{ The Morisita index of dispersion is defined as (Morisita 1959, 1962): \code{Imor = n * (sum(xi^2) - sum(xi)) / (sum(xi)^2 - sum(xi))} where \eqn{xi} is the count of individuals in sample \eqn{i}, and \eqn{n} is the number of samples (\eqn{i = 1, 2, \ldots, n}). \eqn{Imor} has values from 0 to \eqn{n}. In uniform (hyperdispersed) patterns its value falls between 0 and 1, in clumped patterns it falls between 1 and \eqn{n}. For increasing sample sizes (i.e. joining neighbouring quadrats), \eqn{Imor} goes to \eqn{n} as the quadrat size approaches clump size. For random patterns, \eqn{Imor = 1} and counts in the samples follow Poisson frequency distribution. The deviation from random expectation (null hypothesis) can be tested using criticalvalues of the Chi-squared distribution with \eqn{n-1} degrees of freedom. Confidence intervals around 1 can be calculated by the clumped \eqn{Mclu} and uniform \eqn{Muni} indices (Hairston et al. 1971, Krebs 1999) (Chi2Lower and Chi2Upper refers to e.g. 0.025 and 0.975 quantile values of the Chi-squared distribution with \eqn{n-1} degrees of freedom, respectively, for \code{crit = 0.05}): \code{Mclu = (Chi2Lower - n + sum(xi)) / (sum(xi) - 1)} \code{Muni = (Chi2Upper - n + sum(xi)) / (sum(xi) - 1)} Smith-Gill (1975) proposed scaling of Morisita index from [0, n] interval into [-1, 1], and setting up -0.5 and 0.5 values as confidence limits around random distribution with rescaled value 0. To rescale the Morisita index, one of the following four equations apply to calculate the standardized index \eqn{Imst}: (a) \code{Imor >= Mclu > 1}: \code{Imst = 0.5 + 0.5 (Imor - Mclu) / (n - Mclu)}, (b) \code{Mclu > Imor >= 1}: \code{Imst = 0.5 (Imor - 1) / (Mclu - 1)}, (c) \code{1 > Imor > Muni}: \code{Imst = -0.5 (Imor - 1) / (Muni - 1)}, (d) \code{1 > Muni > Imor}: \code{Imst = -0.5 + 0.5 (Imor - Muni) / Muni}. } \value{ Returns a data frame with as many rows as the number of columns in the input data, and with four columns. Columns are: \code{imor} the unstandardized Morisita index, \code{mclu} the clumpedness index, \code{muni} the uniform index, \code{imst} the standardized Morisita index, \code{pchisq} the Chi-squared based probability for the null hypothesis of random expectation. } \references{ Morisita, M. 1959. Measuring of the dispersion of individuals and analysis of the distributional patterns. \emph{Mem. Fac. Sci. Kyushu Univ. Ser. E} 2, 215--235. Morisita, M. 1962. Id-index, a measure of dispersion of individuals. \emph{Res. Popul. Ecol.} 4, 1--7. Smith-Gill, S. J. 1975. Cytophysiological basis of disruptive pigmentary patterns in the leopard frog, \emph{Rana pipiens}. II. Wild type and mutant cell specific patterns. \emph{J. Morphol.} 146, 35--54. Hairston, N. G., Hill, R. and Ritte, U. 1971. The interpretation of aggregation patterns. In: Patil, G. P., Pileou, E. C. and Waters, W. E. eds. \emph{Statistical Ecology 1: Spatial Patterns and Statistical Distributions}. Penn. State Univ. Press, University Park. Krebs, C. J. 1999. \emph{Ecological Methodology}. 2nd ed. Benjamin Cummings Publishers. } \author{\enc{Péter Sólymos}{Peter Solymos}, \email{solymos@ualberta.ca}} \note{ A common error found in several papers is that when standardizing as in the case (b), the denominator is given as \code{Muni - 1}. This results in a hiatus in the [0, 0.5] interval of the standardized index. The root of this typo is the book of Krebs (1999), see the Errata for the book (Page 217, \url{http://www.zoology.ubc.ca/~krebs/downloads/errors_2nd_printing.pdf}). } \examples{ data(dune) x <- dispindmorisita(dune) x y <- dispindmorisita(dune, unique.rm = TRUE) y dim(x) ## with unique species dim(y) ## unique species removed } \keyword{ multivariate } \keyword{ spatial } vegan/man/deviance.cca.Rd0000644000176200001440000001027211641520655014726 0ustar liggesusers\encoding{UTF-8} \name{deviance.cca} \alias{deviance.cca} \alias{deviance.rda} \alias{extractAIC.cca} \title{ Statistics Resembling Deviance and AIC for Constrained Ordination} \description{ The functions extract statistics that resemble deviance and AIC from the result of constrained correspondence analysis \code{\link{cca}} or redundancy analysis \code{\link{rda}}. These functions are rarely needed directly, but they are called by \code{\link{step}} in automatic model building. Actually, \code{\link{cca}} and \code{\link{rda}} do not have \code{\link{AIC}} and these functions are certainly wrong. } \usage{ \method{deviance}{cca}(object, ...) \method{extractAIC}{cca}(fit, scale = 0, k = 2, ...) } \arguments{ \item{object}{the result of a constrained ordination (\code{\link{cca}} or \code{\link{rda}}). } \item{fit}{fitted model from constrained ordination.} \item{scale}{optional numeric specifying the scale parameter of the model, see \code{scale} in \code{\link{step}}.} \item{k}{numeric specifying the "weight" of the \emph{equivalent degrees of freedom} (=:\code{edf}) part in the AIC formula.} \item{\dots}{further arguments. } } \details{ The functions find statistics that resemble \code{\link{deviance}} and \code{\link{AIC}} in constrained ordination. Actually, constrained ordination methods do not have a log-Likelihood, which means that they cannot have AIC and deviance. Therefore you should not use these functions, and if you use them, you should not trust them. If you use these functions, it remains as your responsibility to check the adequacy of the result. The deviance of \code{\link{cca}} is equal to the Chi-square of the residual data matrix after fitting the constraints. The deviance of \code{\link{rda}} is defined as the residual sum of squares. The deviance function of \code{rda} is also used for \code{\link{capscale}}. Function \code{extractAIC} mimics \code{extractAIC.lm} in translating deviance to AIC. There is little need to call these functions directly. However, they are called implicitly in \code{\link{step}} function used in automatic selection of constraining variables. You should check the resulting model with some other criteria, because the statistics used here are unfounded. In particular, the penalty \code{k} is not properly defined, and the default \code{k = 2} is not justified theoretically. If you have only continuous covariates, the \code{step} function will base the model building on magnitude of eigenvalues, and the value of \code{k} only influences the stopping point (but the variables with the highest eigenvalues are not necessarily the most significant in permutation tests in \code{\link{anova.cca}}). If you also have multi-class factors, the value of \code{k} will have a capricious effect in model building. The \code{\link{step}} function will pass arguments to \code{\link{add1.cca}} and \code{\link{drop1.cca}}, and setting \code{test = "permutation"} will provide permutation tests of each deletion and addition which can help in judging the validity of the model building. } \value{ The \code{deviance} functions return ``deviance'', and \code{extractAIC} returns effective degrees of freedom and ``AIC''. } \references{ \enc{Godínez-Domínguez}{Godinez-Dominguez}, E. & Freire, J. (2003) Information-theoretic approach for selection of spatial and temporal models of community organization. \emph{Marine Ecology Progress Series} \strong{253}, 17--24. } \author{ Jari Oksanen } \note{ These functions are unfounded and untested and they should not be used directly or implicitly. Moreover, usual caveats in using \code{\link{step}} are very valid. } \seealso{\code{\link{cca}}, \code{\link{rda}}, \code{\link{anova.cca}}, \code{\link{step}}, \code{\link{extractAIC}}, \code{\link{add1.cca}}, \code{\link{drop1.cca}}. } \examples{ # The deviance of correspondence analysis equals Chi-square data(dune) data(dune.env) chisq.test(dune) deviance(cca(dune)) # Stepwise selection (forward from an empty model "dune ~ 1") ord <- cca(dune ~ ., dune.env) step(cca(dune ~ 1, dune.env), scope = formula(ord)) } \keyword{ multivariate } \keyword{ models } vegan/man/designdist.Rd0000644000176200001440000001204312031516374014553 0ustar liggesusers\encoding{UTF-8} \name{designdist} \alias{designdist} \title{Design your own Dissimilarities } \description{ You can define your own dissimilarities using terms for shared and total quantities, number of rows and number of columns. The shared and total quantities can be binary, quadratic or minimum terms. In binary terms, the shared component is number of shared species, and totals are numbers of species on sites. The quadratic terms are cross-products and sums of squares, and minimum terms are sums of parallel minima and row totals. } \usage{ designdist(x, method = "(A+B-2*J)/(A+B)", terms = c("binary", "quadratic", "minimum"), abcd = FALSE, name) } \arguments{ \item{x}{Input data. } \item{method}{Equation for your dissimilarities. This can use terms \code{J} for shared quantity, \code{A} and \code{B} for totals, \code{N} for the number of rows (sites) and \code{P} for the number of columns (species). The equation can also contain any \R functions that accepts vector arguments and returns vectors of the same length. } \item{terms}{How shared and total components are found. For vectors \code{x} and \code{y} the \code{"quadratic"} terms are \code{J = sum(x*y)}, \code{A = sum(x^2)}, \code{B = sum(y^2)}, and \code{"minimum"} terms are \code{J = sum(pmin(x,y))}, \code{A = sum(x)} and \code{B = sum(y)}, and \code{"binary"} terms are either of these after transforming data into binary form (shared number of species, and number of species for each row). } \item{abcd}{Use 2x2 contingency table notation for binary data: \eqn{a} is the number of shared species, \eqn{b} and \eqn{c} are the numbers of species occurring only one of the sites but not in both, and \eqn{d} is the number of species that occur on neither of the sites.} \item{name}{The name you want to use for your index. The default is to combine the \code{method} equation and \code{terms} argument.} } \details{ Most popular dissimilarity measures in ecology can be expressed with the help of terms \code{J}, \code{A} and \code{B}, and some also involve matrix dimensions \code{N} and \code{P}. Some examples you can define in \code{designdist} are: \tabular{lll}{ \code{A+B-2*J} \tab \code{"quadratic"} \tab squared Euclidean \cr \code{A+B-2*J} \tab \code{"minimum"} \tab Manhattan \cr \code{(A+B-2*J)/(A+B)} \tab \code{"minimum"} \tab Bray-Curtis \cr \code{(A+B-2*J)/(A+B)} \tab \code{"binary"} \tab \enc{Sørensen}{Sorensen} \cr \code{(A+B-2*J)/(A+B-J)} \tab \code{"binary"} \tab Jaccard \cr \code{(A+B-2*J)/(A+B-J)} \tab \code{"minimum"} \tab \enc{RužiÄka}{Ruzicka} \cr \code{(A+B-2*J)/(A+B-J)} \tab \code{"quadratic"} \tab (dis)similarity ratio \cr \code{1-J/sqrt(A*B)} \tab \code{"binary"} \tab Ochiai \cr \code{1-J/sqrt(A*B)} \tab \code{"quadratic"} \tab cosine complement \cr \code{1-phyper(J-1, A, P-A, B)} \tab \code{"binary"} \tab Raup-Crick (but see \code{\link{raupcrick}}) } The function \code{designdist} can implement most dissimilarity indices in \code{\link{vegdist}} or elsewhere, and it can also be used to implement many other indices, amongst them, most of those described in Legendre & Legendre (2012). It can also be used to implement all indices of beta diversity described in Koleff et al. (2003), but there also is a specific function \code{\link{betadiver}} for the purpose. If you want to implement binary dissimilarities based on the 2x2 contingency table notation, you can set \code{abcd = TRUE}. In this notation \code{a = J}, \code{b = A-J}, \code{c = B-J}, \code{d = P-A-B+J}. This notation is often used instead of the more more tangible default notation for reasons that are opaque to me. } \value{ \code{designdist} returns an object of class \code{\link{dist}}. } \references{ Koleff, P., Gaston, K.J. and Lennon, J.J. (2003) Measuring beta diversity for presence--absence data. \emph{J. Animal Ecol.} \strong{72}, 367--382. Legendre, P. and Legendre, L. (2012) \emph{Numerical Ecology}. 3rd English ed. Elsevier } \author{ Jari Oksanen } \note{ \code{designdist} does not use compiled code, and may be slow or use plenty of memory in large data sets. It is very easy to make errors when defining a function by hand. If an index is available in a function using compiled code, it is better to use the canned alternative. } \seealso{ \code{\link{vegdist}}, \code{\link{betadiver}}, \code{\link{dist}}. } \examples{ ## Arrhenius dissimilarity: the value of z in the species-area model ## S = c*A^z when combining two sites of equal areas, where S is the ## number of species, A is the area, and c and z are model parameters. ## The A below is not the area (which cancels out), but number of ## species in one of the sites, as defined in designdist(). data(BCI) dis <- designdist(BCI, "(log(A+B-J)-log(A+B)+log(2))/log(2)") ## This can be used in clustering or ordination... ordiplot(cmdscale(dis)) ## ... or in analysing beta diversity (without gradients) summary(dis) } \keyword{multivariate } vegan/man/density.adonis.Rd0000644000176200001440000001060112023322311015332 0ustar liggesusers\name{density.adonis} \alias{density.adonis} \alias{density.anosim} \alias{density.mantel} \alias{density.mrpp} \alias{density.permutest.cca} \alias{density.protest} \alias{plot.vegandensity} \alias{densityplot.adonis} \title{ Kernel Density Estimation for Permutation Results in Vegan } \description{ The \code{density} functions can directly access the permutation results of \pkg{vegan} functions, and \code{plot} can display the densities. The \code{densityplot} method can access and display the permutation results of functions that return permutations of several statistics simultaneously. } \usage{ \method{density}{adonis}(x, ...) \method{plot}{vegandensity}(x, main = NULL, xlab = NULL, ylab = "Density", type = "l", zero.line = TRUE, obs.line = TRUE, ...) } \arguments{ \item{x}{The object to be handled. For \code{density} and \code{densityplot} this is an object containing permutations. For \code{plot} this is a result of \pkg{vegan} \code{density} function.} \item{main, xlab, ylab, type, zero.line}{Arguments of \code{\link{plot.density}} and \code{\link[lattice]{densityplot}} functions.} \item{obs.line}{Draw vertical line for the observed statistic. Logical value \code{TRUE} draws a red line, and \code{FALSE} draws nothing. Alternatively, \code{obs.line} can be a definition of the colour used for the line, either as a numerical value from the \code{\link[grDevices]{palette}} or as the name of the colour, or other normal definition of the colour.} \item{\dots}{ Other arguments passed to the function. In \code{density} these are passed to \code{\link{density.default}}.} } \details{ The \code{density} and \code{densityplot} function can directly access permutation results of most \pkg{vegan} functions. The \code{density} function is identical to \code{\link{density.default}} and takes all its arguments, but adds the observed statistic to the result as item \code{"observed"}. The observed statistic is also put among the permuted values so that the results are consistent with significance tests. The \code{plot} method is similar to the default \code{\link{plot.density}}, but can also add the observed statistic to the graph as a vertical line. The \code{densityplot} function is based on the same function in the \pkg{lattice} package (see \code{\link[lattice]{densityplot}}). The density methods are available for \pkg{vegan} functions \code{\link{adonis}}, \code{\link{anosim}}, \code{\link{mantel}}, \code{\link{mantel.partial}}, \code{\link{mrpp}}, \code{\link{permutest.cca}}, and \code{\link{protest}}. The \code{density} function for \code{\link{oecosimu}} is documented separately, and it is also used for \code{\link{adipart}}, \code{\link{hiersimu}} and \code{\link{multipart}}. All \pkg{vegan} \code{density} functions return an object of class \code{"vegandensity"} inheriting from \code{\link{density}}, and can be plotted with its \code{plot} method. This is identical to the standard \code{plot} of \code{densiy} objects, but can also add a vertical line for the observed statistic. Functions that can return several permuted statistics simultaenously also have \code{\link[lattice]{densityplot}} method (\code{\link{adonis}}, \code{\link{oecosimu}} and diversity partioning functions based on \code{oecosimu}). The standard \code{\link{density}} can only handle univariate data, and a warning is issued if the function is used for a model with several observed statistics. The \code{\link[lattice]{densityplot}} method is available for \code{\link{adonis}} and \code{\link{oecosimu}} (documented separately). NB, there is no \code{density} method for \code{\link{anova.cca}}, but only for \code{\link{permutest.cca}}. } \value{ The \code{density} function returns the standard \code{\link{density}} result object with one new item: \code{"observed"} for the observed value of the statistic. The functions have a specific \code{plot} method, but otherwise they use methods for \code{\link{density.default}}, such as \code{print} and \code{lines}. } \author{ Jari Oksanen } \seealso{ \code{\link{density.default}}. } \examples{ data(dune) data(dune.env) mod <- adonis(dune ~ Management, data = dune.env) plot(density(mod)) library(lattice) mod <- adonis(dune ~ Management * Moisture, dune.env) densityplot(mod) } \keyword{ distribution } \keyword{ smooth } vegan/man/decostand.Rd0000644000176200001440000001204512031516374014364 0ustar liggesusers\encoding{UTF-8} \name{decostand} \alias{decostand} \alias{wisconsin} \title{Standardization Methods for Community Ecology} \description{ The function provides some popular (and effective) standardization methods for community ecologists. } \usage{ decostand(x, method, MARGIN, range.global, logbase = 2, na.rm=FALSE, ...) wisconsin(x) } \arguments{ \item{x}{Community data, a matrix-like object.} \item{method}{Standardization method. See Details for available options.} \item{MARGIN}{Margin, if default is not acceptable. \code{1} = rows, and \code{2} = columns of \code{x}.} \item{range.global}{Matrix from which the range is found in \code{method = "range"}. This allows using same ranges across subsets of data. The dimensions of \code{MARGIN} must match with \code{x}. } \item{logbase}{The logarithm base used in \code{method = "log"}.} \item{na.rm}{Ignore missing values in row or column standardizations.} \item{\dots}{Other arguments to the function (ignored).} } \details{ The function offers following standardization methods for community data: \itemize{ \item \code{total}: divide by margin total (default \code{MARGIN = 1}). \item \code{max}: divide by margin maximum (default \code{MARGIN = 2}). \item \code{freq}: divide by margin maximum and multiply by the number of non-zero items, so that the average of non-zero entries is one (Oksanen 1983; default \code{MARGIN = 2}). \item \code{normalize}: make margin sum of squares equal to one (default \code{MARGIN = 1}). \item \code{range}: standardize values into range 0 \dots 1 (default \code{MARGIN = 2}). If all values are constant, they will be transformed to 0. \item \code{standardize}: scale \code{x} to zero mean and unit variance (default \code{MARGIN = 2}). \item \code{pa}: scale \code{x} to presence/absence scale (0/1). \item \code{chi.square}: divide by row sums and square root of column sums, and adjust for square root of matrix total (Legendre & Gallagher 2001). When used with the Euclidean distance, the distances should be similar to the Chi-square distance used in correspondence analysis. However, the results from \code{\link{cmdscale}} would still differ, since CA is a weighted ordination method (default \code{MARGIN = 1}). \item \code{hellinger}: square root of \code{method = "total"} (Legendre & Gallagher 2001). \item \code{log}: logarithmic transformation as suggested by Anderson et al. (2006): \eqn{\log_b (x) + 1}{log_b (x) + 1} for \eqn{x > 0}, where \eqn{b} is the base of the logarithm; zeros are left as zeros. Higher bases give less weight to quantities and more to presences, and \code{logbase = Inf} gives the presence/absence scaling. Please note this is \emph{not} \eqn{\log(x+1)}{log(x+1)}. Anderson et al. (2006) suggested this for their (strongly) modified Gower distance (implemented as \code{method = "altGower"} in \code{\link{vegdist}}), but the standardization can be used independently of distance indices. } Standardization, as contrasted to transformation, means that the entries are transformed relative to other entries. All methods have a default margin. \code{MARGIN=1} means rows (sites in a normal data set) and \code{MARGIN=2} means columns (species in a normal data set). Command \code{wisconsin} is a shortcut to common Wisconsin double standardization where species (\code{MARGIN=2}) are first standardized by maxima (\code{max}) and then sites (\code{MARGIN=1}) by site totals (\code{tot}). Most standardization methods will give nonsense results with negative data entries that normally should not occur in the community data. If there are empty sites or species (or constant with \code{method = "range"}), many standardization will change these into \code{NaN}. } \value{ Returns the standardized data frame, and adds an attribute \code{"decostand"} giving the name of applied standardization \code{"method"}. } \author{Jari Oksanen and Etienne \enc{Laliberté}{Laliberte} (\code{method = "log"}).} \note{Common transformations can be made with standard \R functions.} \references{ Anderson, M.J., Ellingsen, K.E. & McArdle, B.H. (2006) Multivariate dispersion as a measure of beta diversity. \emph{Ecology Letters} \strong{9}, 683--693. Legendre, P. & Gallagher, E.D. (2001) Ecologically meaningful transformations for ordination of species data. \emph{Oecologia} \strong{129}, 271--280. Oksanen, J. (1983) Ordination of boreal heath-like vegetation with principal component analysis, correspondence analysis and multidimensional scaling. \emph{Vegetatio} \strong{52}, 181--189. } \examples{ data(varespec) sptrans <- decostand(varespec, "max") apply(sptrans, 2, max) sptrans <- wisconsin(varespec) ## Chi-square: PCA similar but not identical to CA. ## Use wcmdscale for weighted analysis and identical results. sptrans <- decostand(varespec, "chi.square") plot(procrustes(rda(sptrans), cca(varespec))) } \keyword{ multivariate}%-- one or more ... \keyword{ manip } vegan/man/decorana.Rd0000644000176200001440000002272011625737155014207 0ustar liggesusers\name{decorana} \alias{decorana} \alias{summary.decorana} \alias{print.summary.decorana} \alias{plot.decorana} \alias{downweight} \alias{scores.decorana} \alias{points.decorana} \alias{text.decorana} \title{Detrended Correspondence Analysis and Basic Reciprocal Averaging } \description{ Performs detrended correspondence analysis and basic reciprocal averaging or orthogonal correspondence analysis. } \usage{ decorana(veg, iweigh=0, iresc=4, ira=0, mk=26, short=0, before=NULL, after=NULL) \method{plot}{decorana}(x, choices=c(1,2), origin=TRUE, display=c("both","sites","species","none"), cex = 0.8, cols = c(1,2), type, xlim, ylim, ...) \method{text}{decorana}(x, display = c("sites", "species"), labels, choices = 1:2, origin = TRUE, select, ...) \method{points}{decorana}(x, display = c("sites", "species"), choices=1:2, origin = TRUE, select, ...) \method{summary}{decorana}(object, digits=3, origin=TRUE, display=c("both", "species","sites","none"), ...) \method{print}{summary.decorana}(x, head = NA, tail = head, ...) downweight(veg, fraction = 5) \method{scores}{decorana}(x, display=c("sites","species"), choices=1:4, origin=TRUE, ...) } \arguments{ \item{veg}{Community data, a matrix-like object. } \item{iweigh}{Downweighting of rare species (0: no). } \item{iresc}{Number of rescaling cycles (0: no rescaling). } \item{ira}{Type of analysis (0: detrended, 1: basic reciprocal averaging). } \item{mk}{Number of segments in rescaling. } \item{short}{Shortest gradient to be rescaled. } \item{before}{Hill's piecewise transformation: values before transformation. } \item{after}{Hill's piecewise transformation: values after transformation -- these must correspond to values in \code{before}.} \item{x, object}{A \code{decorana} result object.} \item{choices}{Axes shown.} \item{origin}{Use true origin even in detrended correspondence analysis.} \item{display}{Display only sites, only species, both or neither.} \item{cex}{Plot character size.} \item{cols}{Colours used for sites and species.} \item{type}{Type of plots, partial match to \code{"text"}, \code{"points"} or \code{"none"}.} \item{labels}{Optional text to be used instead of row names.} \item{select}{Items to be displayed. This can either be a logical vector which is \code{TRUE} for displayed items or a vector of indices of displayed items.} \item{xlim, ylim}{the x and y limits (min,max) of the plot.} \item{digits}{Number of digits in summary output.} \item{head, tail}{Number of rows printed from the head and tail of species and site scores. Default \code{NA} prints all.} \item{fraction}{Abundance fraction where downweighting begins.} \item{...}{Other arguments for \code{plot} function.} } \details{ In late 1970s, correspondence analysis became the method of choice for ordination in vegetation science, since it seemed better able to cope with non-linear species responses than principal components analysis. However, even correspondence analysis can produce an arc-shaped configuration of a single gradient. Mark Hill developed detrended correspondence analysis to correct two assumed `faults' in correspondence analysis: curvature of straight gradients and packing of sites at the ends of the gradient. The curvature is removed by replacing the orthogonalization of axes with detrending. In orthogonalization successive axes are made non-correlated, but detrending should remove all systematic dependence between axes. Detrending is performed using a five-segment smoothing window with weights (1,2,3,2,1) on \code{mk} segments --- which indeed is more robust than the suggested alternative of detrending by polynomials. The packing of sites at the ends of the gradient is undone by rescaling the axes after extraction. After rescaling, the axis is supposed to be scaled by `SD' units, so that the average width of Gaussian species responses is supposed to be one over whole axis. Other innovations were the piecewise linear transformation of species abundances and downweighting of rare species which were regarded to have an unduly high influence on ordination axes. It seems that detrending actually works by twisting the ordination space, so that the results look non-curved in two-dimensional projections (`lolly paper effect'). As a result, the points usually have an easily recognized triangular or diamond shaped pattern, obviously an artefact of detrending. Rescaling works differently than commonly presented, too. \code{decorana} does not use, or even evaluate, the widths of species responses. Instead, it tries to equalize the weighted variance of species scores on axis segments (parameter \code{mk} has only a small effect, since \code{decorana} finds the segment number from the current estimate of axis length). This equalizes response widths only for the idealized species packing model, where all species initially have unit width responses and equally spaced modes. The \code{summary} method prints the ordination scores, possible prior weights used in downweighting, and the marginal totals after applying these weights. The \code{plot} method plots species and site scores. Classical \code{decorana} scaled the axes so that smallest site score was 0 (and smallest species score was negative), but \code{summary}, \code{plot} and \code{scores} use the true origin, unless \code{origin = FALSE}. In addition to proper eigenvalues, the function also reports `decorana values' in detrended analysis. These `decorana values' are the values that the legacy code of \code{decorana} returns as `eigenvalues'. They are estimated internally during iteration, and it seems that detrending interferes the estimation so that these values are generally too low and have unclear interpretation. Moreover, `decorana values' are estimated before rescaling which will change the eigenvalues. The proper eigenvalues are estimated after extraction of the axes and they are the ratio of biased weighted variances of site and species scores even in detrended and rescaled solutions. The `decorana values' are provided only for the compatibility with legacy software, and they should not be used. } \value{ \code{decorana} returns an object of class \code{"decorana"}, which has \code{print}, \code{summary} and \code{plot} methods. } \references{ Hill, M.O. and Gauch, H.G. (1980). Detrended correspondence analysis: an improved ordination technique. \emph{Vegetatio} \strong{42}, 47--58. Oksanen, J. and Minchin, P.R. (1997). Instability of ordination results under changes in input data order: explanations and remedies. \emph{Journal of Vegetation Science} \strong{8}, 447--454. } \author{Mark O. Hill wrote the original Fortran code, the \R port was by Jari Oksanen. } \note{ \code{decorana} uses the central numerical engine of the original Fortran code (which is in the public domain), or about 1/3 of the original program. I have tried to implement the original behaviour, although a great part of preparatory steps were written in \R language, and may differ somewhat from the original code. However, well-known bugs are corrected and strict criteria used (Oksanen & Minchin 1997). Please note that there really is no need for piecewise transformation or even downweighting within \code{decorana}, since there are more powerful and extensive alternatives in \R, but these options are included for compliance with the original software. If a different fraction of abundance is needed in downweighting, function \code{downweight} must be applied before \code{decorana}. Function \code{downweight} indeed can be applied prior to correspondence analysis, and so it can be used together with \code{\link{cca}}, too. The function finds only four axes: this is not easily changed. } \seealso{ For unconstrained ordination, non-metric multidimensional scaling in \code{\link{monoMDS}} may be more robust (see also \code{\link{metaMDS}}). Constrained (or \sQuote{canonical}) correspondence analysis can be made with \code{\link{cca}}. Orthogonal correspondence analysis can be made with \code{\link[MASS]{corresp}}, or with \code{decorana} or \code{\link{cca}}, but the scaling of results vary (and the one in \code{decorana} corresponds to \code{scaling = -1} in \code{\link{cca}}.). See \code{\link{predict.decorana}} for adding new points to an ordination. } \examples{ data(varespec) vare.dca <- decorana(varespec) vare.dca summary(vare.dca) plot(vare.dca) ### the detrending rationale: gaussresp <- function(x,u) exp(-(x-u)^2/2) x <- seq(0,6,length=15) ## The gradient u <- seq(-2,8,len=23) ## The optima pack <- outer(x,u,gaussresp) matplot(x, pack, type="l", main="Species packing") opar <- par(mfrow=c(2,2)) plot(scores(prcomp(pack)), asp=1, type="b", main="PCA") plot(scores(decorana(pack, ira=1)), asp=1, type="b", main="CA") plot(scores(decorana(pack)), asp=1, type="b", main="DCA") plot(scores(cca(pack ~ x), dis="sites"), asp=1, type="b", main="CCA") ### Let's add some noise: noisy <- (0.5 + runif(length(pack)))*pack par(mfrow=c(2,1)) matplot(x, pack, type="l", main="Ideal model") matplot(x, noisy, type="l", main="Noisy model") par(mfrow=c(2,2)) plot(scores(prcomp(noisy)), type="b", main="PCA", asp=1) plot(scores(decorana(noisy, ira=1)), type="b", main="CA", asp=1) plot(scores(decorana(noisy)), type="b", main="DCA", asp=1) plot(scores(cca(noisy ~ x), dis="sites"), asp=1, type="b", main="CCA") par(opar) } \keyword{ multivariate } vegan/man/contribdiv.Rd0000644000176200001440000001034311500463657014567 0ustar liggesusers\encoding{UTF-8} \name{contribdiv} \alias{contribdiv} \alias{plot.contribdiv} \title{Contribution Diversity Approach} \description{ The contribution diversity approach is based in the differentiation of within-unit and among-unit diversity by using additive diversity partitioning and unit distinctiveness. } \usage{ contribdiv(comm, index = c("richness", "simpson"), relative = FALSE, scaled = TRUE, drop.zero = FALSE) \method{plot}{contribdiv}(x, sub, xlab, ylab, ylim, col, ...) } \arguments{ \item{comm}{The community data matrix with samples as rows and species as column.} \item{index}{Character, the diversity index to be calculated.} \item{relative}{Logical, if \code{TRUE} then contribution diversity values are expressed as their signed deviation from their mean. See details.} \item{scaled}{Logical, if \code{TRUE} then relative contribution diversity values are scaled by the sum of gamma values (if \code{index = "richness"}) or by sum of gamma values times the number of rows in \code{comm} (if \code{index = "simpson"}). See details.} \item{drop.zero}{Logical, should empty rows dropped from the result? If empty rows are not dropped, their corresponding results will be \code{NA}s.} \item{x}{An object of class \code{"contribdiv"}.} \item{sub, xlab, ylab, ylim, col}{Graphical arguments passed to plot.} \item{\dots}{Other arguments passed to plot.} } \details{ This approach was proposed by Lu et al. (2007). Additive diversity partitioning (see \code{\link{adipart}} for more references) deals with the relation of mean alpha and the total (gamma) diversity. Although alpha diversity values often vary considerably. Thus, contributions of the sites to the total diversity are uneven. This site specific contribution is measured by contribution diversity components. A unit that has e.g. many unique species will contribute more to the higher level (gamma) diversity than another unit with the same number of species, but all of which common. Distinctiveness of species \eqn{j} can be defined as the number of sites where it occurs (\eqn{n_j}), or the sum of its relative frequencies (\eqn{p_j}). Relative frequencies are computed sitewise and \eqn{sum_j{p_ij}}s at site \eqn{i} sum up to \eqn{1}. The contribution of site \eqn{i} to the total diversity is given by \eqn{alpha_i = sum_j(1 / n_ij)} when dealing with richness and \eqn{alpha_i = sum(p_{ij} * (1 - p_{ij}))} for the Simpson index. The unit distinctiveness of site \eqn{i} is the average of the species distinctiveness, averaging only those species which occur at site \eqn{i}. For species richness: \eqn{alpha_i = mean(n_i)} (in the paper, the second equation contains a typo, \eqn{n} is without index). For the Simpson index: \eqn{alpha_i = mean(n_i)}. The Lu et al. (2007) gives an in-depth description of the different indices. } \value{ An object of class \code{"contribdiv"} in heriting from data frame. Returned values are alpha, beta and gamma components for each sites (rows) of the community matrix. The \code{"diff.coef"} attribute gives the differentiation coefficient (see Examples). } \references{ Lu, H. P., Wagner, H. H. and Chen, X. Y. 2007. A contribution diversity approach to evaluate species diversity. \emph{Basic and Applied Ecology}, 8, 1--12. } \author{\enc{Péter Sólymos}{Peter Solymos}, \email{solymos@ualberta.ca}} \seealso{\code{\link{adipart}}, \code{\link{diversity}}} \examples{ ## Artificial example given in ## Table 2 in Lu et al. 2007 x <- matrix(c( 1/3,1/3,1/3,0,0,0, 0,0,1/3,1/3,1/3,0, 0,0,0,1/3,1/3,1/3), 3, 6, byrow = TRUE, dimnames = list(LETTERS[1:3],letters[1:6])) x ## Compare results with Table 2 contribdiv(x, "richness") contribdiv(x, "simpson") ## Relative contribution (C values), compare with Table 2 (cd1 <- contribdiv(x, "richness", relative = TRUE, scaled = FALSE)) (cd2 <- contribdiv(x, "simpson", relative = TRUE, scaled = FALSE)) ## Differentiation coefficients attr(cd1, "diff.coef") # D_ST attr(cd2, "diff.coef") # D_DT ## BCI data set data(BCI) opar <- par(mfrow=c(2,2)) plot(contribdiv(BCI, "richness"), main = "Absolute") plot(contribdiv(BCI, "richness", relative = TRUE), main = "Relative") plot(contribdiv(BCI, "simpson")) plot(contribdiv(BCI, "simpson", relative = TRUE)) par(opar) } \keyword{multivariate} vegan/man/clamtest.Rd0000644000176200001440000001334612036544727014251 0ustar liggesusers\name{clamtest} \alias{clamtest} \alias{summary.clamtest} \alias{plot.clamtest} \title{ Multinomial Species Classification Method (CLAM) } \description{ The CLAM statistical approach for classifying generalists and specialists in two distinct habitats is described in Chazdon et al. (2011). } \usage{ clamtest(comm, groups, coverage.limit = 10, specialization = 2/3, npoints = 20, alpha = 0.05/20) \method{summary}{clamtest}(object, ...) \method{plot}{clamtest}(x, xlab, ylab, main, pch = 21:24, col.points = 1:4, col.lines = 2:4, lty = 1:3, position = "bottomright", ...) } \arguments{ \item{comm}{ Community matrix, consisting of counts. } \item{groups}{ A vector identifying the two habitats. Must have exactly two unique values or levels. Habitat IDs in the grouping vector must match corresponding rows in the community matrix \code{comm}. } \item{coverage.limit}{ Integer, below this limit the sample coverage based correction is applied to rare species. Sample coverage is calculated separately for the two habitats. Sample relative abundances are used for species with higher than or equal to \code{coverage.limit} total counts per habitat. } \item{specialization}{ Numeric, specialization threshold value between 0 and 1. The value of \eqn{2/3} represents \sQuote{supermajority} rule, while a value of \eqn{1/2} represents a \sQuote{simple majority} rule to assign shared species as habitat specialists. } \item{npoints}{ Integer, number of points used to determine the boundary lines in the plots. } \item{alpha}{ Numeric, nominal significance level for individual tests. The default value reduces the conventional limit of \eqn{0.05} to account for overdispersion and multiple testing for several species simultaneously. However, the is no firm reason for exactly this limit. } \item{x, object}{ Fitted model object of class \code{"clamtest"}. } \item{xlab, ylab}{ Labels for the plot axes. } \item{main}{ Main title of the plot. } \item{pch, col.points}{ Symbols and colors used in plotting species groups. } \item{lty, col.lines}{ Line types and colors for boundary lines in plot to separate species groups. } \item{position}{ Position of figure legend, see \code{\link{legend}} for specification details. Legend not shown if \code{position = NULL}. } \item{\dots}{ Additional arguments passed to methods. } } \details{ The method uses a multinomial model based on estimated species relative abundance in two habitats (A, B). It minimizes bias due to differences in sampling intensities between two habitat types as well as bias due to insufficient sampling within each habitat. The method permits a robust statistical classification of habitat specialists and generalists, without excluding rare species \emph{a priori} (Chazdon et al. 2011). Based on a user-defined \code{specialization} threshold, the model classifies species into one of four groups: (1) generalists; (2) habitat A specialists; (3) habitat B specialists; and (4) too rare to classify with confidence. } \value{ A data frame (with class attribute \code{"clamtest"}), with columns: \itemize{ \item{\code{Species}:}{ species name (column names from \code{comm}),} \item{\code{Total_*A*}:}{ total count in habitat A,} \item{\code{Total_*B*}:}{ total count in habitat B,} \item{\code{Classes}:}{ species classification, a factor with levels \code{Generalist}, \code{Specialist_*A*}, \code{Specialist_*B*}, and \code{Too_rare}.} } \code{*A*} and \code{*B*} are placeholders for habitat names/labels found in the data. The \code{summary} method returns descriptive statistics of the results. The \code{plot} method returns values invisibly and produces a bivariate scatterplot of species total abundances in the two habitats. Symbols and boundary lines are shown for species groups. } \references{ Chazdon, R. L., Chao, A., Colwell, R. K., Lin, S.-Y., Norden, N., Letcher, S. G., Clark, D. B., Finegan, B. and Arroyo J. P.(2011). A novel statistical method for classifying habitat generalists and specialists. \emph{Ecology} \bold{92}, 1332--1343. } \author{ Peter Solymos \email{solymos@ualberta.ca} } \note{ The code was tested against standalone CLAM software provided on the website of Anne Chao (\url{http://chao.stat.nthu.edu.tw/softwarece.html}); minor inconsistencies were found, especially for finding the threshold for 'too rare' species. These inconsistencies are probably due to numerical differences between the two implementation. The current \R implementation uses root finding for iso-lines instead of iterative search. The original method (Chazdon et al. 2011) has two major problems: \enumerate{ \item It assumes that the error distribution is multinomial. This is a justified choice if individuals are freely distributed, and there is no over-dispersion or clustering of individuals. In most ecological data, the variance is much higher than multinomial assumption, and therefore test statistic are too optimistic. \item The original authors suggest that multiple testing adjustment for multiple testing should be based on the number of points (\code{npoints}) used to draw the critical lines on the plot, whereas the adjustment should be based on the number tests (i.e, tested species). The function uses the same numerical values as the original paper, but there is no automatic connection between \code{npoints} and \code{alpha} arguments, but you must work out the adjustment yourself. } } \examples{ data(mite) data(mite.env) sol <- clamtest(mite, mite.env$Shrub=="None", alpha=0.005) summary(sol) head(sol) plot(sol) } \keyword{ htest } vegan/man/cca.object.Rd0000644000176200001440000002643212110161667014417 0ustar liggesusers\name{cca.object} \alias{cca.object} \title{Result Object from Constrained Ordination with cca, rda or capscale } \description{ Ordination methods \code{\link{cca}}, \code{\link{rda}} and \code{\link{capscale}} return similar result objects. Function \code{capscale} \code{\link{inherits}} from \code{rda} and \code{rda} inherits from \code{cca}. This inheritance structure is due to historic reasons: \code{cca} was the first of these implemented in vegan. Hence the nomenclature in \code{cca.object} reflects \code{cca}. This help page describes the internal structure of the \code{cca} object for programmers. } \value{ A \code{cca} object has the following elements: \item{call }{the function call.} \item{colsum, rowsum, rowsum.excluded }{Column and row sums in \code{cca}. In \code{rda}, item \code{colsum} contains standard deviations of species and \code{rowsum} is \code{NA}. If some data were removed in \code{\link{na.action}}, the row sums of excluded observations are in item \code{rowsum.excluded} in \code{cca} (but not in \code{rda}). The \code{rowsum.excluded} add to the total (one) of \code{rowsum}. } \item{grand.total}{Grand total of community data in \code{cca} and \code{NA} in \code{rda}.} \item{inertia}{Text used as the name of inertia.} \item{method}{Text used as the name of the ordination method.} \item{terms}{The \code{\link{terms}} component of the \code{\link{formula}}. This is missing if the ordination was not called with \code{formula}.} \item{terminfo}{Further information on terms with three subitems: \code{terms} which is like the \code{terms} component above, but lists conditions and constraints similarly; \code{xlev} which lists the factor levels, and \code{ordered} which is \code{TRUE} to ordered factors. This is produced by \pkg{vegan} internal function \code{\link{ordiTerminfo}}, and it is needed in \code{\link{predict.cca}} with \code{newdata}. This is missing if the ordination was not called with \code{formula}.} \item{tot.chi}{Total inertia or the sum of all eigenvalues.} \item{na.action}{The result of \code{\link{na.action}} if missing values in constraints were handled by \code{\link{na.omit}} or \code{\link{na.exclude}} (or \code{NULL} if there were no missing values). This is a vector of indices of missing value rows in the original data and a class of the action, usually either \code{"omit"} or \code{"exclude"}.} \item{pCCA, CCA, CA}{Actual ordination results for conditioned (partial), constrained and unconstrained components of the model. If constraints or conditions are not given, the corresponding components \code{CCA} and \code{pCCA} are \code{NULL}. If they are specified but have zero rank and zero eigenvalue (e.g., due to aliasing), they have a standard structure like described below, but the result scores have zero columns, but the correct number of rows. The residual component is never \code{NULL}, and if there is no residual variation (like in overdefined model), its scores have zero columns. The standard \code{print} command does not show \code{NULL} components, but it prints zeros for zeroed components. Items \code{pCCA}, \code{CCA} and \code{CA} contain following items: \describe{ \item{\code{alias}}{The names of the aliased constraints or conditions. Function \code{\link{alias.cca}} does not access this item directly, but it finds the aliased variables and their defining equations from the \code{QR} item.} \item{\code{biplot}}{Biplot scores of constraints. Only in \code{CCA}.} \item{\code{centroids}}{(Weighted) centroids of factor levels of constraints. Only in \code{CCA}. Missing if the ordination was not called with \code{formula}.} \item{\code{eig}}{Eigenvalues of axes. In \code{CCA} and \code{CA}.} \item{\code{envcentre}}{(Weighted) means of the original constraining or conditioning variables. In \code{pCCA} and in \code{CCA}.} \item{\code{Fit}}{The fitted values of standardized data matrix after fitting conditions. Only in \code{pCCA}.} \item{\code{QR}}{The QR decomposition of explanatory variables as produced by \code{\link{qr}}. The constrained ordination algorithm is based on QR decomposition of constraints and conditions (environmental data). The environmental data are first centred in \code{rda} or weighted and centred in \code{cca}. The QR decomposition is used in many functions that access \code{cca} results, and it can be used to find many items that are not directly stored in the object. For examples, see \code{\link{coef.cca}}, \code{\link{coef.rda}}, \code{\link{vif.cca}}, \code{\link{permutest.cca}}, \code{\link{predict.cca}}, \code{\link{predict.rda}}, \code{\link{calibrate.cca}}. For possible uses of this component, see \code{\link{qr}}. In \code{pCCA} and \code{CCA}.} \item{\code{rank}}{The rank of the ordination component.} \item{\code{qrank}}{The rank of the constraints which is the difference of the ranks of QR decompositions in \code{pCCA} and \code{CCA} components. Only in \code{CCA}.} \item{\code{tot.chi}}{Total inertia or the sum of all eigenvalues of the component.} \item{\code{imaginary.chi}, \code{imaginary.rank}}{The sum and rank (number) of negative eigenvalues in \code{\link{capscale}}. Only in \code{CA} and only if negative eigenvalues were found in \code{\link{capscale}}.} \item{\code{u}}{(Weighted) orthonormal site scores. Please note that scaled scores are not stored in the \code{cca} object, but they are made when the object is accessed with functions like \code{\link{scores.cca}}, \code{\link{summary.cca}} or \code{\link{plot.cca}}, or their \code{rda} variants. Only in \code{CCA} and \code{CA}. In the \code{CCA} component these are the so-called linear combination scores. } \item{\code{u.eig}}{\code{u} scaled by eigenvalues. There is no guarantee that any \code{.eig} variants of scores will be kept in the future releases.} \item{\code{v}}{(Weighted) orthonormal species scores. If missing species were omitted from the analysis, this will contain attribute \code{\link{na.action}} that lists the omitted species. Only in \code{CCA} and \code{CA}.} \item{\code{v.eig}}{\code{v} weighted by eigenvalues.} \item{\code{wa}}{Site scores found as weighted averages (\code{cca}) or weighted sums (\code{rda}) of \code{v} with weights \code{Xbar}, but the multiplying effect of eigenvalues removed. These often are known as WA scores in \code{cca}. Only in \code{CCA}.} \item{\code{wa.eig}}{The direct result of weighted averaging or weighted summation (matrix multiplication) with the resulting eigenvalue inflation.} \item{\code{wa.excluded, u.excluded}}{WA scores for rows removed by \code{na.action = na.exclude} in \code{CCA} and \code{CA} components if these could be calculated.} \item{\code{Xbar}}{The standardized data matrix after previous stages of analysis. In \code{CCA} this is after possible \code{pCCA} or after partialling out the effects of conditions, and in \code{CA} after both \code{pCCA} and \code{CCA}. In \code{\link{cca}} the standardization is Chi-square, and in \code{\link{rda}} centring and optional scaling by species standard deviations using function \code{\link{scale}}.} } } } \section{NA Action and Subset}{ If the constraints had missing values or subsets, and \code{\link{na.action}} was set to \code{\link{na.exclude}} or \code{\link{na.omit}}, the result will have some extra items: \describe{ \item{\code{subset}}{subset evaluated as a logical vector (\code{TRUE} for included cases).} \item{\code{na.action}}{The object returned by \code{\link{na.action}} which is a named vector of indices of removed items. The class of the vector is either \code{"omit"} or \code{"exclude"} as set by \code{\link{na.action}}. The \code{na.action} is applied after \code{subset} so that the indices refer to the subset data.} \item{\code{residuals.zombie}}{A zombie vector of the length of number of rows in the residual ordination. \R versions before 2.13.0 may use this vector to find the number of valid observations, and it is provided for their use although this is useless in \R 2.13.0 and in \pkg{vegan}. Currently \R uses \code{\link{nobs.cca}} to find the number of observations.} \item{\code{rowsum.excluded}}{Row sums of removed observations. Only in \code{\link{cca}}.} \item{\code{CCA$wa.excluded}}{The WA scores for sites (found from community data) in constrained ordination if \code{\link{na.action}} was \code{\link{na.exclude}} and the scores could be calculated. The scores cannot be found for \code{\link{capscale}} and in partial ordination.} \item{\code{CA$u.excluded}}{Row scores for sites in unconstrained ordination with identical conditions as above.} } } \section{capscale}{ Function \code{capscale} may add some items depending on its arguments: \describe{ \item{\code{metaMDSdist}}{The data set name if \code{metaMDSdist = TRUE}.} \item{\code{ac}}{Additive constant used if \code{add = TRUE}.} \item{\code{adjust}}{Adjustment of dissimilarities: see \code{\link{capscale}}, section \dQuote{Notes}.} } } \seealso{The description here provides a hacker's interface. User level functions for further analysis and handling of \code{cca} objects are described in this section in \code{\link{cca}}. Also for a hacker interface, it may be better to use following low level functions to access the results: \code{\link{scores.cca}} (which also scales results), \code{\link{predict.cca}} (which can also use \code{newdata}), \code{\link{fitted.cca}}, \code{\link{residuals.cca}}, \code{\link{alias.cca}}, \code{\link{coef.cca}}, \code{\link{model.frame.cca}}, \code{\link{model.matrix.cca}}, \code{\link{deviance.cca}}, \code{\link{eigenvals.cca}}, \code{\link{RsquareAdj.cca}}, \code{\link{weights.cca}}, \code{\link{nobs.cca}}, or \code{rda} variants of these functions. You can use \code{\link{as.mlm}} to cast a \code{cca.object} into result of multiple response linear model (\code{\link{lm}}) in order to more easily find some statistics (which in principle could be directly found from the \code{cca} object as well). This section in \code{\link{cca}} gives a more complete list of methods to handle the constrained ordination result object. } \references{ Legendre, P. and Legendre, L. (2012) \emph{Numerical Ecology}. 3rd English ed. Elsevier. } \author{ Jari Oksanen } \examples{ # Some species will be missing in the analysis, because only a subset # of sites is used below. data(dune) data(dune.env) mod <- cca(dune[1:15,] ~ ., dune.env[1:15,]) # Look at the names of missing species attr(mod$CCA$v, "na.action") # Look at the names of the aliased variables: mod$CCA$alias # Access directly constrained weighted orthonormal species and site # scores, constrained eigenvalues and margin sums. spec <- mod$CCA$v sites <- mod$CCA$u eig <- mod$CCA$eig rsum <- mod$rowsum csum <- mod$colsum } \keyword{ models} \keyword{multivariate} vegan/man/cca.Rd0000644000176200001440000003133112110161667013144 0ustar liggesusers\name{cca} \alias{cca} \alias{cca.default} \alias{cca.formula} \alias{rda} \alias{rda.default} \alias{rda.formula} \title{ [Partial] [Constrained] Correspondence Analysis and Redundancy Analysis } \description{ Function \code{cca} performs correspondence analysis, or optionally constrained correspondence analysis (a.k.a. canonical correspondence analysis), or optionally partial constrained correspondence analysis. Function \code{rda} performs redundancy analysis, or optionally principal components analysis. These are all very popular ordination techniques in community ecology. } \usage{ \method{cca}{formula}(formula, data, na.action = na.fail, subset = NULL, ...) \method{cca}{default}(X, Y, Z, ...) \method{rda}{formula}(formula, data, scale=FALSE, na.action = na.fail, subset = NULL, ...) \method{rda}{default}(X, Y, Z, scale=FALSE, ...) } \arguments{ \item{formula}{Model formula, where the left hand side gives the community data matrix, right hand side gives the constraining variables, and conditioning variables can be given within a special function \code{Condition}.} \item{data}{Data frame containing the variables on the right hand side of the model formula.} \item{X}{ Community data matrix. } \item{Y}{ Constraining matrix, typically of environmental variables. Can be missing. } \item{Z}{ Conditioning matrix, the effect of which is removed (`partialled out') before next step. Can be missing.} \item{scale}{Scale species to unit variance (like correlations).} \item{na.action}{Handling of missing values in constraints or conditions. The default (\code{\link{na.fail}}) is to stop with missing value. Choice \code{\link{na.omit}} removes all rows with missing values. Choice \code{\link{na.exclude}} keeps all observations but gives \code{NA} for results that cannot be calculated. The WA scores of rows may be found also for missing values in constraints. Missing values are never allowed in dependent community data. } \item{subset}{Subset of data rows. This can be a logical vector which is \code{TRUE} for kept observations, or a logical expression which can contain variables in the working environment, \code{data} or species names of the community data.} \item{...}{Other arguments for \code{print} or \code{plot} functions (ignored in other functions).} } \details{ Since their introduction (ter Braak 1986), constrained, or canonical, correspondence analysis and its spin-off, redundancy analysis, have been the most popular ordination methods in community ecology. Functions \code{cca} and \code{rda} are similar to popular proprietary software \code{Canoco}, although the implementation is completely different. The functions are based on Legendre & Legendre's (2012) algorithm: in \code{cca} Chi-square transformed data matrix is subjected to weighted linear regression on constraining variables, and the fitted values are submitted to correspondence analysis performed via singular value decomposition (\code{\link{svd}}). Function \code{rda} is similar, but uses ordinary, unweighted linear regression and unweighted SVD. Legendre & Legendre (2012), Table 11.5 (p. 650) give a skeleton of the RDA algorithm of \pkg{vegan}. The algorithm of CCA is similar, but involves standardization by row and column weights. The functions can be called either with matrix-like entries for community data and constraints, or with formula interface. In general, the formula interface is preferred, because it allows a better control of the model and allows factor constraints. In the following sections, \code{X}, \code{Y} and \code{Z}, although referred to as matrices, are more commonly data frames. In the matrix interface, the community data matrix \code{X} must be given, but the other data matrices may be omitted, and the corresponding stage of analysis is skipped. If matrix \code{Z} is supplied, its effects are removed from the community matrix, and the residual matrix is submitted to the next stage. This is called `partial' correspondence or redundancy analysis. If matrix \code{Y} is supplied, it is used to constrain the ordination, resulting in constrained or canonical correspondence analysis, or redundancy analysis. Finally, the residual is submitted to ordinary correspondence analysis (or principal components analysis). If both matrices \code{Z} and \code{Y} are missing, the data matrix is analysed by ordinary correspondence analysis (or principal components analysis). Instead of separate matrices, the model can be defined using a model \code{\link{formula}}. The left hand side must be the community data matrix (\code{X}). The right hand side defines the constraining model. The constraints can contain ordered or unordered factors, interactions among variables and functions of variables. The defined \code{\link{contrasts}} are honoured in \code{\link{factor}} variables. The constraints can also be matrices (but not data frames). The formula can include a special term \code{Condition} for conditioning variables (``covariables'') ``partialled out'' before analysis. So the following commands are equivalent: \code{cca(X, Y, Z)}, \code{cca(X ~ Y + Condition(Z))}, where \code{Y} and \code{Z} refer to constraints and conditions matrices respectively. Constrained correspondence analysis is indeed a constrained method: CCA does not try to display all variation in the data, but only the part that can be explained by the used constraints. Consequently, the results are strongly dependent on the set of constraints and their transformations or interactions among the constraints. The shotgun method is to use all environmental variables as constraints. However, such exploratory problems are better analysed with unconstrained methods such as correspondence analysis (\code{\link{decorana}}, \code{\link[MASS]{corresp}}) or non-metric multidimensional scaling (\code{\link{metaMDS}}) and environmental interpretation after analysis (\code{\link{envfit}}, \code{\link{ordisurf}}). CCA is a good choice if the user has clear and strong \emph{a priori} hypotheses on constraints and is not interested in the major structure in the data set. CCA is able to correct the curve artefact commonly found in correspondence analysis by forcing the configuration into linear constraints. However, the curve artefact can be avoided only with a low number of constraints that do not have a curvilinear relation with each other. The curve can reappear even with two badly chosen constraints or a single factor. Although the formula interface makes easy to include polynomial or interaction terms, such terms often produce curved artefacts (that are difficult to interpret), these should probably be avoided. According to folklore, \code{rda} should be used with ``short gradients'' rather than \code{cca}. However, this is not based on research which finds methods based on Euclidean metric as uniformly weaker than those based on Chi-squared metric. However, standardized Euclidean distance may be an appropriate measures (see Hellinger standardization in \code{\link{decostand}} in particular). Partial CCA (pCCA; or alternatively partial RDA) can be used to remove the effect of some conditioning or ``background'' or ``random'' variables or ``covariables'' before CCA proper. In fact, pCCA compares models \code{cca(X ~ Z)} and \code{cca(X ~ Y + Z)} and attributes their difference to the effect of \code{Y} cleansed of the effect of \code{Z}. Some people have used the method for extracting ``components of variance'' in CCA. However, if the effect of variables together is stronger than sum of both separately, this can increase total Chi-square after ``partialling out'' some variation, and give negative ``components of variance''. In general, such components of ``variance'' are not to be trusted due to interactions between two sets of variables. The functions have \code{summary} and \code{plot} methods which are documented separately (see \code{\link{plot.cca}}, \code{\link{summary.cca}}). } \value{ Function \code{cca} returns a huge object of class \code{cca}, which is described separately in \code{\link{cca.object}}. Function \code{rda} returns an object of class \code{rda} which inherits from class \code{cca} and is described in \code{\link{cca.object}}. The scaling used in \code{rda} scores is described in a separate vignette with this package. } \references{ The original method was by ter Braak, but the current implementations follows Legendre and Legendre. Legendre, P. and Legendre, L. (2012) \emph{Numerical Ecology}. 3rd English ed. Elsevier. McCune, B. (1997) Influence of noisy environmental data on canonical correspondence analysis. \emph{Ecology} \strong{78}, 2617-2623. Palmer, M. W. (1993) Putting things in even better order: The advantages of canonical correspondence analysis. \emph{Ecology} \strong{74},2215-2230. Ter Braak, C. J. F. (1986) Canonical Correspondence Analysis: a new eigenvector technique for multivariate direct gradient analysis. \emph{Ecology} \strong{67}, 1167-1179. } \author{ The responsible author was Jari Oksanen, but the code borrows heavily from Dave Roberts (\url{http://labdsv.nr.usu.edu/}). } \seealso{ This help page describes two constrained ordination functions, \code{cca} and \code{rda}. A related method, distance-based redundancy analysis (dbRDA) is described separately (\code{\link{capscale}}). All these functions return similar objects (described in \code{\link{cca.object}}). There are numerous support functions that can be used to access the result object. In the list below, functions of type \code{cca} will handle all three constrained ordination objects, and functions of \code{rda} only handle \code{rda} and \code{\link{capscale}} results. The main plotting functions are \code{\link{plot.cca}} for all methods, and \code{\link{biplot.rda}} for RDA and dbRDA. However, generic \pkg{vegan} plotting functions can also handle the results. The scores can be accessed and scaled with \code{\link{scores.cca}}, and summarized with \code{\link{summary.cca}}. The eigenvalues can be accessed with \code{\link{eigenvals.cca}} and the regression coefficients for constraints with \code{\link{coef.cca}}. The eigenvalues can be plotted with \code{\link{screeplot.cca}}, and the (adjusted) \eqn{R^2}{R-squared} can be found with \code{\link{RsquareAdj.rda}}. The scores can be also calculated for new data sets with \code{\link{predict.cca}} which allows adding points to ordinations. The values of constraints can be inferred from ordination and community composition with \code{\link{calibrate.cca}}. Diagnostic statistics can be found with \code{\link{goodness.cca}}, \code{\link{inertcomp}}, \code{\link{spenvcor}}, \code{\link{intersetcor}}, \code{\link{tolerance.cca}}, and \code{\link{vif.cca}}. Function \code{\link{as.mlm.cca}} refits the result object as a multiple \code{\link{lm}} object, and this allows finding influence statistics (\code{\link{lm.influence}}, \code{\link{cooks.distance}} etc.). Permutation based signficance for the overall model, single constraining variables or axes can be found with \code{\link{anova.cca}}. Automatic model building with \R{} \code{\link{step}} function is possible with \code{\link{deviance.cca}}, \code{\link{add1.cca}} and \code{\link{drop1.cca}}. Functions \code{\link{ordistep}} and \code{\link{ordiR2step}} (for RDA) are special functions for constrained ordination. Randomized data sets can be generated with \code{\link{simulate.cca}}. Separate methods based on constrained ordination model are principal response curves (\code{\link{prc}}) and variance partioning between several components (\code{\link{varpart}}). Design decisions are explained in \code{\link{vignette}} \file{decision-vegan} which also can be accessed with \code{\link{vegandocs}}. Package \pkg{ade4} provides alternative constrained ordination functions \code{\link[ade4]{cca}} and \code{\link[ade4]{pcaiv}}. } \examples{ data(varespec) data(varechem) ## Common but bad way: use all variables you happen to have in your ## environmental data matrix vare.cca <- cca(varespec, varechem) vare.cca plot(vare.cca) ## Formula interface and a better model vare.cca <- cca(varespec ~ Al + P*(K + Baresoil), data=varechem) vare.cca plot(vare.cca) ## `Partialling out' and `negative components of variance' cca(varespec ~ Ca, varechem) cca(varespec ~ Ca + Condition(pH), varechem) ## RDA data(dune) data(dune.env) dune.Manure <- rda(dune ~ Manure, dune.env) plot(dune.Manure) ## For further documentation: \dontrun{ vegandocs("decision") } } \keyword{ multivariate } vegan/man/cascadeKM.Rd0000644000176200001440000002146112031100650014217 0ustar liggesusers\name{cascadeKM} \alias{cascadeKM} \alias{cIndexKM} \alias{plot.cascadeKM} \alias{orderingKM} \alias{pregraphKM} \title{K-means partitioning using a range of values of K} \description{ This function is a wrapper for the \code{kmeans} function. It creates several partitions forming a cascade from a small to a large number of groups. } \usage{ cascadeKM(data, inf.gr, sup.gr, iter = 100, criterion = "calinski") cIndexKM(y, x, index = "all") \method{plot}{cascadeKM}(x, min.g, max.g, grpmts.plot = TRUE, sortg = FALSE, gridcol = NA, ...) } \arguments{ \item{ data }{ The data matrix. The objects (samples) are the rows.} \item{ inf.gr }{ The number of groups for the partition with the smallest number of groups of the cascade (min).} \item{ sup.gr }{ The number of groups for the partition with the largest number of groups of the cascade (max).} \item{ iter }{ The number of random starting configurations for each value of \eqn{K}.} \item{ criterion }{ The criterion that will be used to select the best partition. The default value is \code{"calinski"}, which refers to the Calinski-Harabasz (1974) criterion. The simple structure index (\code{"ssi"}) is also available. Other indices are available in function \code{\link[cclust]{clustIndex}} (package \pkg{cclust}). In our experience, the two indices that work best and are most likely to return their maximum value at or near the optimal number of clusters are \code{"calinski"} and \code{"ssi"}. } \item{y}{Object of class \code{"kmeans"} returned by a clustering algorithm such as \code{\link{kmeans}}} \item{x}{Data matrix where columns correspond to variables and rows to observations, or the plotting object in \code{plot}} \item{index}{The available indices are: \code{"calinski"} and \code{"ssi"}. Type \code{"all"} to obtain both indices. Abbreviations of these names are also accepted.} \item{min.g, max.g}{The minimum and maximum numbers of groups to be displayed.} \item{grpmts.plot}{Show the plot (\code{TRUE} or \code{FALSE}).} \item{sortg}{Sort the objects as a function of their group membership to produce a more easily interpretable graph. See Details. The original object names are kept; they are used as labels in the output table \code{x}, although not in the graph. If there were no row names, sequential row numbers are used to keep track of the original order of the objects.} \item{gridcol}{The colour of the grid lines in the plots. \code{NA}, which is the default value, removes the grid lines.} \item{\dots}{Other parameters to the functions (ignored).} } \details{ The function creates several partitions forming a cascade from a small to a large number of groups formed by \code{\link{kmeans}}. Most of the work is performed by function \code{cIndex} which is based on the \code{\link[cclust]{clustIndex}} function (package \pkg{cclust}). Some of the criteria were removed from this version because computation errors were generated when only one object was found in a group. The default value is \code{"calinski"}, which refers to the well-known Calinski-Harabasz (1974) criterion. The other available index is the simple structure index \code{"ssi"} (Dolnicar et al. 1999). In the case of groups of equal sizes, \code{"calinski"} is generally a good criterion to indicate the correct number of groups. Users should not take its indications literally when the groups are not equal in size. Type \code{"all"} to obtain both indices. The indices are defined as: \describe{ \item{calinski:}{ \eqn{(SSB/(K-1))/(SSW/(n-K))}, where \eqn{n} is the number of data points and \eqn{K} is the number of clusters. \eqn{SSW} is the sum of squares within the clusters while \eqn{SSB} is the sum of squares among the clusters. This index is simply an \eqn{F} (ANOVA) statistic.} \item{ssi:}{ the \dQuote{Simple Structure Index} multiplicatively combines several elements which influence the interpretability of a partitioning solution. The best partition is indicated by the highest SSI value.} } In a simulation study, Milligan and Cooper (1985) found that the Calinski-Harabasz criterion recovered the correct number of groups the most often. We recommend this criterion because, if the groups are of equal sizes, the maximum value of \code{"calinski"} usually indicates the correct number of groups. Another available index is the simple structure index \code{"ssi"}. Users should not take the indications of these indices literally when the groups are not equal in size and explore the groups corresponding to other values of \eqn{K}. Function \code{cascadeKM} has a \code{plot} method. Two plots are produced. The graph on the left has the objects in abscissa and the number of groups in ordinate. The groups are represented by colours. The graph on the right shows the values of the criterion (\code{"calinski"} or \code{"ssi"}) for determining the best partition. The highest value of the criterion is marked in red. Points marked in orange, if any, indicate partitions producing an increase in the criterion value as the number of groups increases; they may represent other interesting partitions. If \code{sortg=TRUE}, the objects are reordered by the following procedure: (1) a simple matching distance matrix is computed among the objects, based on the table of K-means assignments to groups, from \eqn{K} = \code{min.g} to \eqn{K} = \code{max.g}. (2) A principal coordinate analysis (PCoA, Gower 1966) is computed on the centred distance matrix. (3) The first principal coordinate is used as the new order of the objects in the graph. A simplified algorithm is used to compute the first principal coordinate only, using the iterative algorithm described in Legendre & Legendre (2012). The full distance matrix among objects is never computed; this avoids the problem of storing it when the number of objects is large. Distance values are computed as they are needed by the algorithm. } \value{ Function \code{cascadeKM} returns an object of class \code{cascadeKM} with items: \item{ partition }{ Table with the partitions found for different numbers of groups \eqn{K}, from \eqn{K} = \code{inf.gr} to \eqn{K} = \code{sup.gr}. } \item{ results }{ Values of the criterion to select the best partition. } \item{ criterion }{ The name of the criterion used. } \item{ size }{ The number of objects found in each group, for all partitions (columns). } Function \code{cIndex} returns a vector with the index values. The maximum value of these indices is supposed to indicate the best partition. These indices work best with groups of equal sizes. When the groups are not of equal sizes, one should not put too much faith in the maximum of these indices, and also explore the groups corresponding to other values of \eqn{K}. } \references{ Calinski, T. and J. Harabasz. 1974. A dendrite method for cluster analysis. \emph{Commun. Stat.} \strong{3}: 1-27. Dolnicar, S., K. Grabler and J. A. Mazanec. 1999. A tale of three cities: perceptual charting for analyzing destination images. Pp. 39-62 in: Woodside, A. et al. [eds.] \emph{Consumer psychology of tourism, hospitality and leisure}. CAB International, New York. Gower, J. C. 1966. Some distance properties of latent root and vector methods used in multivariate analysis. \emph{Biometrika} \strong{53}: 325-338. Legendre, P. & L. Legendre. 2012. \emph{Numerical ecology}, 3rd English edition. Elsevier Science BV, Amsterdam. Milligan, G. W. & M. C. Cooper. 1985. An examination of procedures for determining the number of clusters in a data set. \emph{Psychometrika} \strong{50}: 159-179. Weingessel, A., Dimitriadou, A. and Dolnicar, S. \emph{An Examination Of Indexes For Determining The Number Of Clusters In Binary Data Sets}, \url{http://www.wu-wien.ac.at/am/wp99.htm#29} } \author{ Marie-Helene Ouellette \email{Marie-Helene.Ouellette@UMontreal.ca}, Sebastien Durand \email{Sebastien.Durand@UMontreal.ca} and Pierre Legendre \email{Pierre.Legendre@UMontreal.ca}. Edited for \pkg{vegan} by Jari Oksanen. } \seealso{\code{\link{kmeans}}, \code{\link[cclust]{clustIndex}}.} \examples{ # Partitioning a (10 x 10) data matrix of random numbers mat <- matrix(runif(100),10,10) res <- cascadeKM(mat, 2, 5, iter = 25, criterion = 'calinski') toto <- plot(res) # Partitioning an autocorrelated time series vec <- sort(matrix(runif(30),30,1)) res <- cascadeKM(vec, 2, 5, iter = 25, criterion = 'calinski') toto <- plot(res) # Partitioning a large autocorrelated time series # Note that we remove the grid lines vec <- sort(matrix(runif(1000),1000,1)) res <- cascadeKM(vec, 2, 7, iter = 10, criterion = 'calinski') toto <- plot(res, gridcol=NA) } \keyword{ cluster } vegan/man/capscale.Rd0000644000176200001440000003020312104765233014170 0ustar liggesusers\name{capscale} \alias{capscale} \title{[Partial] Constrained Analysis of Principal Coordinates or distance-based RDA } \description{ Constrained Analysis of Principal Coordinates (CAP) is an ordination method similar to Redundancy Analysis (\code{\link{rda}}), but it allows non-Euclidean dissimilarity indices, such as Manhattan or Bray--Curtis distance. Despite this non-Euclidean feature, the analysis is strictly linear and metric. If called with Euclidean distance, the results are identical to \code{\link{rda}}, but \code{capscale} will be much more inefficient. Function \code{capscale} is a constrained version of metric scaling, a.k.a. principal coordinates analysis, which is based on the Euclidean distance but can be used, and is more useful, with other dissimilarity measures. The function can also perform unconstrained principal coordinates analysis, optionally using extended dissimilarities. } \usage{ capscale(formula, data, distance = "euclidean", sqrt.dist = FALSE, comm = NULL, add = FALSE, dfun = vegdist, metaMDSdist = FALSE, na.action = na.fail, subset = NULL, ...) } \arguments{ \item{formula}{Model formula. The function can be called only with the formula interface. Most usual features of \code{\link{formula}} hold, especially as defined in \code{\link{cca}} and \code{\link{rda}}. The LHS must be either a community data matrix or a dissimilarity matrix, e.g., from \code{\link{vegdist}} or \code{\link{dist}}. If the LHS is a data matrix, function \code{\link{vegdist}} will be used to find the dissimilarities. The RHS defines the constraints. The constraints can be continuous variables or factors, they can be transformed within the formula, and they can have interactions as in a typical \code{\link{formula}}. The RHS can have a special term \code{Condition} that defines variables to be ``partialled out'' before constraints, just like in \code{\link{rda}} or \code{\link{cca}}. This allows the use of partial CAP.} \item{data}{ Data frame containing the variables on the right hand side of the model formula. } \item{distance}{The name of the dissimilarity (or distance) index if the LHS of the \code{formula} is a data frame instead of dissimilarity matrix.} \item{sqrt.dist}{Take square roots of dissimilarities. See section \code{Notes} below.} \item{comm}{ Community data frame which will be used for finding species scores when the LHS of the \code{formula} was a dissimilarity matrix. This is not used if the LHS is a data frame. If this is not supplied, the ``species scores'' are the axes of initial metric scaling (\code{\link{cmdscale}}) and may be confusing.} \item{add}{Logical indicating if an additive constant should be computed, and added to the non-diagonal dissimilarities such that all eigenvalues are non-negative in the underlying Principal Co-ordinates Analysis (see \code{\link{cmdscale}} for details). This implements \dQuote{correction method 2} of Legendre & Legendre (2012, p. 503). The negative eigenvalues are caused by using semi-metric or non-metric dissimilarities with basically metric \code{\link{cmdscale}}. They are harmless and ignored in \code{capscale}, but you also can avoid warnings with this option. } \item{dfun}{Distance or dissimilarity function used. Any function returning standard \code{"dist"} and taking the index name as the first argument can be used. } \item{metaMDSdist}{Use \code{\link{metaMDSdist}} similarly as in \code{\link{metaMDS}}. This means automatic data transformation and using extended flexible shortest path dissimilarities (function \code{\link{stepacross}}) when there are many dissimilarities based on no shared species.} \item{na.action}{Handling of missing values in constraints or conditions. The default (\code{\link{na.fail}}) is to stop with missing values. Choices \code{\link{na.omit}} and \code{\link{na.exclude}} delete rows with missing values, but differ in representation of results. With \code{na.omit} only non-missing site scores are shown, but \code{na.exclude} gives \code{NA} for scores of missing observations. Unlike in \code{\link{rda}}, no WA scores are available for missing constraints or conditions.} \item{subset}{Subset of data rows. This can be a logical vector which is \code{TRUE} for kept observations, or a logical expression which can contain variables in the working environment, \code{data} or species names of the community data (if given in the formula or as \code{comm} argument).} \item{\dots}{Other parameters passed to \code{\link{rda}} or to \code{\link{metaMDSdist}}. } } \details{ Canonical Analysis of Principal Coordinates (CAP) is simply a Redundancy Analysis of results of Metric (Classical) Multidimensional Scaling (Anderson & Willis 2003). Function capscale uses two steps: (1) it ordinates the dissimilarity matrix using \code{\link{cmdscale}} and (2) analyses these results using \code{\link{rda}}. If the user supplied a community data frame instead of dissimilarities, the function will find the needed dissimilarity matrix using \code{\link{vegdist}} with specified \code{distance}. However, the method will accept dissimilarity matrices from \code{\link{vegdist}}, \code{\link{dist}}, or any other method producing similar matrices. The constraining variables can be continuous or factors or both, they can have interaction terms, or they can be transformed in the call. Moreover, there can be a special term \code{Condition} just like in \code{\link{rda}} and \code{\link{cca}} so that ``partial'' CAP can be performed. The current implementation differs from the method suggested by Anderson & Willis (2003) in three major points which actually make it similar to distance-based redundancy analysis (Legendre & Anderson 1999): \enumerate{ \item Anderson & Willis used the orthonormal solution of \code{\link{cmdscale}}, whereas \code{capscale} uses axes weighted by corresponding eigenvalues, so that the ordination distances are the best approximations of original dissimilarities. In the original method, later ``noise'' axes are just as important as first major axes. \item Anderson & Willis take only a subset of axes, whereas \code{capscale} uses all axes with positive eigenvalues. The use of subset is necessary with orthonormal axes to chop off some ``noise'', but the use of all axes guarantees that the results are the best approximation of original dissimilarities. \item Function \code{capscale} adds species scores as weighted sums of (residual) community matrix (if the matrix is available), whereas Anderson & Willis have no fixed method for adding species scores. } With these definitions, function \code{capscale} with Euclidean distances will be identical to \code{\link{rda}} in eigenvalues and in site, species and biplot scores (except for possible sign reversal). However, it makes no sense to use \code{capscale} with Euclidean distances, since direct use of \code{\link{rda}} is much more efficient. Even with non-Euclidean dissimilarities, the rest of the analysis will be metric and linear. The function can be also used to perform ordinary metric scaling a.k.a. principal coordinates analysis by using a formula with only a constant on the left hand side, or \code{comm ~ 1}. With \code{metaMDSdist = TRUE}, the function can do automatic data standardization and use extended dissimilarities using function \code{\link{stepacross}} similarly as in non-metric multidimensional scaling with \code{\link{metaMDS}}. } \value{ The function returns an object of class \code{capscale} which is identical to the result of \code{\link{rda}}. At the moment, \code{capscale} does not have specific methods, but it uses \code{\link{cca}} and \code{\link{rda}} methods \code{\link{plot.cca}}, \code{\link{scores.rda}} etc. Moreover, you can use \code{\link{anova.cca}} for permutation tests of ``significance'' of the results. } \references{ Anderson, M.J. & Willis, T.J. (2003). Canonical analysis of principal coordinates: a useful method of constrained ordination for ecology. \emph{Ecology} 84, 511--525. Gower, J.C. (1985). Properties of Euclidean and non-Euclidean distance matrices. \emph{Linear Algebra and its Applications} 67, 81--97. Legendre, P. & Anderson, M. J. (1999). Distance-based redundancy analysis: testing multispecies responses in multifactorial ecological experiments. \emph{Ecological Monographs} 69, 1--24. Legendre, P. & Legendre, L. (2012). \emph{Numerical Ecology}. 3rd English Edition. Elsevier } \author{ Jari Oksanen } \note{ The function produces negative eigenvalues with non-Euclidean dissimilarity indices. The non-Euclidean component of inertia is given under the title \code{Imaginary} in the printed output. The \code{Total} inertia is the sum of all eigenvalues, but the sum of all non-negative eigenvalues is given as \code{Real Total} (which is higher than the \code{Total}). The ordination is based only on the real dimensions with positive eigenvalues, and therefore the proportions of inertia components only apply to the \code{Real Total} and ignore the \code{Imaginary} component. Permutation tests with \code{\link{anova.cca}} use only the real solution of positive eigenvalues. Function \code{\link{adonis}} gives similar significance tests, but it also handles the imaginary dimensions (negative eigenvalues) and therefore its results may differ from permutation test results of \code{capscale}. If the negative eigenvalues are disturbing, you can use argument \code{add = TRUE} passed to \code{\link{cmdscale}}, or, preferably, a distance measure that does not cause these warnings. Alternatively, after square root transformation of distances (argument \code{sqrt.dist = TRUE}) many indices do not produce negative eigenvalues. The inertia is named after the dissimilarity index as defined in the dissimilarity data, or as \code{unknown distance} if such an information is missing. Function \code{\link{rda}} usually divides the ordination scores by number of sites minus one. In this way, the inertia is variance instead of sum of squares, and the eigenvalues sum up to variance. Many dissimilarity measures are in the range 0 to 1, so they have already made a similar division. If the largest original dissimilarity is less than or equal to 4 (allowing for \code{\link{stepacross}}), this division is undone in \code{capscale} and original dissimilarities are used. Keyword \code{mean} is added to the inertia in cases where division was made, e.g. in Euclidean and Manhattan distances. Inertia is based on squared index, and keyword \code{squared} is added to the name of distance, unless data were square root transformed (argument \code{sqrt.dist = TRUE}). If an additive constant was used, keyword \code{euclidified} is added to the the name of inertia, and the value of the constant is printed (argument \code{add = TRUE}). } \seealso{\code{\link{rda}}, \code{\link{cca}}, \code{\link{plot.cca}}, \code{\link{anova.cca}}, \code{\link{vegdist}}, \code{\link{dist}}, \code{\link{cmdscale}}. The function returns similar result object as \code{\link{rda}} (see \code{\link{cca.object}}). This section for \code{\link{rda}} gives a more complete list of functions that can be used to access and analyse \code{capscale} results. } \examples{ data(varespec) data(varechem) ## Basic Analysis vare.cap <- capscale(varespec ~ N + P + K + Condition(Al), varechem, dist="bray") vare.cap plot(vare.cap) anova(vare.cap) ## Avoid negative eigenvalues with additive constant capscale(varespec ~ N + P + K + Condition(Al), varechem, dist="bray", add =TRUE) ## Avoid negative eigenvalues by taking square roots of dissimilarities capscale(varespec ~ N + P + K + Condition(Al), varechem, dist = "bray", sqrt.dist= TRUE) ## Principal coordinates analysis with extended dissimilarities capscale(varespec ~ 1, dist="bray", metaMDS = TRUE) } \keyword{ multivariate } vegan/man/biplot.rda.Rd0000644000176200001440000000645011221704470014455 0ustar liggesusers\name{biplot.rda} \alias{biplot.rda} \title{PCA biplot} \description{ Draws a PCA biplot with species scores indicated by biplot arrows } \usage{ \method{biplot}{rda}(x, choices = c(1, 2), scaling = 2, display = c("sites", "species"), type, xlim, ylim, col = c(1,2), const, ...) } \arguments{ \item{x}{A \code{\link{rda}} result object.} \item{choices}{Axes to show.} \item{scaling}{Scaling for species and site scores. Either species (\code{2}) or site (\code{1}) scores are scaled by eigenvalues, and the other set of scores is left unscaled, or with \code{3} both are scaled symmetrically by square root of eigenvalues. With negative scaling values in \code{rda}, species scores are divided by standard deviation of each species and multiplied with an equalizing constant. Unscaled raw scores stored in the result can be accessed with \code{scaling = 0}.} \item{display}{Scores shown. These must some of the alternatives \code{"species"} for species scores, and/or \code{"sites"} for site scores.} \item{type}{Type of plot: partial match to \code{text} for text labels, \code{points} for points, and \code{none} for setting frames only. If omitted, \code{text} is selected for smaller data sets, and \code{points} for larger. Can be of length 2 (e.g. \code{type = c("text", "points")}), in which case the first element describes how species scores are handled, and the second how site scores are drawn.} \item{xlim, ylim}{the x and y limits (min, max) of the plot.} \item{col}{Colours used for sites and species (in this order). If only one colour is given, it is used for both.} \item{const}{General scaling constant for \code{\link{scores.rda}}.} \item{\dots}{Other parameters for plotting functions.} } \details{ Produces a plot or biplot of the results of a call to \code{\link{rda}}. It is common for the "species" scores in a PCA to be drawn as biplot arrows that point in the direction of increasing values for that variable. The \code{biplot.rda} function provides a wrapper to \code{plot.cca} to allow the easy production of such a plot. \code{\link{biplot.rda}} is only suitable for unconstrained models. If used on an ordination object with constraints, an error is issued. If species scores are drawn using \code{"text"}, the arrows are drawn from the origin to 0.85 * species score, whilst the labels are drawn at the species score. If the type used is \code{"points"}, then no labels are drawn and therefore the arrows are drawn from the origin to the actual species score. } \value{ The \code{plot} function returns invisibly a plotting structure which can be used by \code{\link{identify.ordiplot}} to identify the points or other functions in the \code{\link{ordiplot}} family. } \author{Gavin Simpson, based on \code{\link{plot.cca}} by Jari Oksanen.} \seealso{\code{\link{plot.cca}}, \code{\link{rda}} for something to plot, \code{\link{ordiplot}} for an alternative plotting routine and more support functions, and \code{\link{text}}, \code{\link{points}} and \code{\link{arrows}} for the basic routines.} \examples{ data(dune) mod <- rda(dune, scale = TRUE) biplot(mod, scaling = 3) ## different type for species and site scores biplot(mod, scaling = 3, type = c("text", "points")) } \keyword{hplot} vegan/man/bioenv.Rd0000644000176200001440000001134512031511006013667 0ustar liggesusers\name{bioenv} \alias{bioenv} \alias{bioenv.default} \alias{bioenv.formula} \alias{summary.bioenv} \title{Best Subset of Environmental Variables with Maximum (Rank) Correlation with Community Dissimilarities } \description{ Function finds the best subset of environmental variables, so that the Euclidean distances of scaled environmental variables have the maximum (rank) correlation with community dissimilarities. } \usage{ \method{bioenv}{default}(comm, env, method = "spearman", index = "bray", upto = ncol(env), trace = FALSE, partial = NULL, ...) \method{bioenv}{formula}(formula, data, ...) } \arguments{ \item{comm}{Community data frame or a dissimilarity object or a square matrix that can be interpreted as dissimilarities. } \item{env}{Data frame of continuous environmental variables. } \item{method}{The correlation method used in \code{\link{cor}}.} \item{index}{The dissimilarity index used for community data (\code{comm}) in \code{\link{vegdist}}. This is ignored if \code{comm} are dissimilarities.} \item{upto}{Maximum number of parameters in studied subsets.} \item{formula, data}{Model \code{\link{formula}} and data.} \item{trace}{Trace the calculations } \item{partial}{Dissimilarities partialled out when inspecting variables in \code{env}.} \item{...}{Other arguments passed to \code{\link{cor}}.} } \details{ The function calculates a community dissimilarity matrix using \code{\link{vegdist}}. Then it selects all possible subsets of environmental variables, \code{\link{scale}}s the variables, and calculates Euclidean distances for this subset using \code{\link{dist}}. Then it finds the correlation between community dissimilarities and environmental distances, and for each size of subsets, saves the best result. There are \eqn{2^p-1} subsets of \eqn{p} variables, and an exhaustive search may take a very, very, very long time (parameter \code{upto} offers a partial relief). The function can be called with a model \code{\link{formula}} where the LHS is the data matrix and RHS lists the environmental variables. The formula interface is practical in selecting or transforming environmental variables. With argument \code{partial} you can perform \dQuote{partial} analysis. The partializing item must be a dissimilarity object of class \code{\link{dist}}. The \code{partial} item can be used with any correlation \code{method}, but it is strictly correct only for Pearson. Clarke & Ainsworth (1993) suggested this method to be used for selecting the best subset of environmental variables in interpreting results of nonmetric multidimensional scaling (NMDS). They recommended a parallel display of NMDS of community dissimilarities and NMDS of Euclidean distances from the best subset of scaled environmental variables. They warned against the use of Procrustes analysis, but to me this looks like a good way of comparing these two ordinations. Clarke & Ainsworth wrote a computer program BIO-ENV giving the name to the current function. Presumably BIO-ENV was later incorporated in Clarke's PRIMER software (available for Windows). In addition, Clarke & Ainsworth suggested a novel method of rank correlation which is not available in the current function. } \value{ The function returns an object of class \code{bioenv} with a \code{summary} method. } \references{ Clarke, K. R & Ainsworth, M. 1993. A method of linking multivariate community structure to environmental variables. \emph{Marine Ecology Progress Series}, 92, 205--219. } \author{ Jari Oksanen } \note{ If you want to study the \sQuote{significance} of \code{bioenv} results, you can use function \code{\link{mantel}} or \code{\link{mantel.partial}} which use the same definition of correlation. However, \code{bioenv} standardizes environmental variables to unit standard deviation using function \code{\link{scale}} and you must do the same in \code{\link{mantel}} for comparable results. Further, \code{bioenv} selects variables to maximize the Mantel correlation, and significance tests based on \emph{a priori} selection of variables are biased. } \seealso{\code{\link{vegdist}}, \code{\link{dist}}, \code{\link{cor}} for underlying routines, \code{\link{monoMDS}} and \code{\link{metaMDS}} for ordination, \code{\link{procrustes}} for Procrustes analysis, \code{\link{protest}} for an alternative, and \code{\link{rankindex}} for studying alternatives to the default Bray-Curtis index.} \examples{ # The method is very slow for large number of possible subsets. # Therefore only 6 variables in this example. data(varespec) data(varechem) sol <- bioenv(wisconsin(varespec) ~ log(N) + P + K + Ca + pH + Al, varechem) sol summary(sol) } \keyword{ multivariate } vegan/man/bgdispersal.Rd0000644000176200001440000001025112031511006014677 0ustar liggesusers\encoding{UTF-8} \name{bgdispersal} \alias{bgdispersal} \title{ Coefficients of Biogeographical Dispersal Direction } \description{ This function computes coefficients of dispersal direction between geographically connected areas, as defined by Legendre and Legendre (1984), and also described in Legendre and Legendre (2012, section 13.3.4). } \usage{ bgdispersal(mat, PAonly = FALSE, abc = FALSE) } \arguments{ \item{mat}{ Data frame or matrix containing a community composition data table (species presence-absence or abundance data). } \item{PAonly}{ \code{FALSE} if the four types of coefficients, DD1 to DD4, are requested; \code{TRUE} if \code{DD1} and \code{DD2} only are sought (see Details). } \item{abc}{If \code{TRUE}, return tables \code{a}, \code{b} and \code{c} used in \code{DD1} and \code{DD2}.} } \details{ The signs of the DD coefficients indicate the direction of dispersal, provided that the asymmetry is significant. A positive sign indicates dispersal from the first (row in DD tables) to the second region (column); a negative sign indicates the opposite. A McNemar test of asymmetry is computed from the presence-absence data to test the hypothesis of a significant asymmetry between the two areas under comparison. In the input data table, the rows are sites or areas, the columns are taxa. Most often, the taxa are species, but the coefficients can be computed from genera or families as well. DD1 and DD2 only are computed for presence-absence data. The four types of coefficients are computed for quantitative data, which are converted to presence-absence for the computation of DD1 and DD2. \code{PAonly = FALSE} indicates that the four types of coefficients are requested. \code{PAonly = TRUE} if DD1 and DD2 only are sought. } \value{ Function \code{bgdispersal} returns a list containing the following matrices: \item{ DD1 }{ \eqn{DD1_{j,k} = (a(b - c))/((a + b + c)^2)}{DD1[j,k] = (a * (b - c))/((a + b + c)^2)} } \item{ DD2 }{ \eqn{DD2_{j,k} = (2 a (b - c))/((2a + b + c) (a + b + c))}{DD2[j,k] = (2*a * (b - c))/((2*a + b + c) * (a + b + c))} where \eqn{a}, \eqn{b}, and \eqn{c} have the same meaning as in the computation of binary similarity coefficients. } \item{ DD3 }{ \eqn{DD3_{j,k} = {W(A-B) / (A+B-W)^2} }{DD3[j,k] = W*(A-B) / (A+B-W)^2} } \item{ DD4 }{ \eqn{DD4_{j,k} = 2W(A-B) / ((A+B)(A+B-W))}{DD4[j,k] = 2*W*(A-B) / ((A+B)*(A+B-W))} where \code{W = sum(pmin(vector1, vector2))}, \code{A = sum(vector1)}, \code{B = sum(vector2)} } \item{ McNemar }{ McNemar chi-square statistic of asymmetry (Sokal and Rohlf 1995): \eqn{2(b \log(b) + c \log(c) - (b+c) \log((b+c)/2)) / q}{2*(b*log(b) + c*log(c) - (b+c)*log((b+c)/2)) / q}, where \eqn{q = 1 + 1/(2(b+c))}{q = 1 + 1/(2*(b+c))} (Williams correction for continuity) } \item{ prob.McNemar }{ probabilities associated with McNemar statistics, chi-square test. H0: no asymmetry in \eqn{(b-c)}. } } \references{ Legendre, P. and V. Legendre. 1984. Postglacial dispersal of freshwater fishes in the Québec peninsula. \emph{Can. J. Fish. Aquat. Sci.} \strong{41}: 1781-1802. Legendre, P. and L. Legendre. 2012. \emph{Numerical ecology}, 3rd English edition. Elsevier Science BV, Amsterdam. Sokal, R. R. and F. J. Rohlf. 1995. \emph{Biometry. The principles and practice of statistics in biological research.} 3rd edn. W. H. Freeman, New York. } \author{ Pierre Legendre, Departement de Sciences Biologiques, Universite de Montreal} \note{The function uses a more powerful alternative for the McNemar test than the classical formula. The classical formula was constructed in the spirit of Pearson's Chi-square, but the formula in this function was constructed in the spirit of Wilks Chi-square or the \eqn{G} statistic. Function \code{\link{mcnemar.test}} uses the classical formula. The new formula was introduced in \pkg{vegan} version 1.10-11, and the older implementations of \code{bgdispersal} used the classical formula. } \examples{ mat <- matrix(c(32,15,14,10,70,30,100,4,10,30,25,0,18,0,40, 0,0,20,0,0,0,0,4,0,30,20,0,0,0,0,25,74,42,1,45,89,5,16,16,20), 4, 10, byrow=TRUE) bgdispersal(mat) } \keyword{ multivariate } \keyword{ nonparametric } vegan/man/betadiver.Rd0000644000176200001440000001350712031511006014354 0ustar liggesusers\encoding{UTF-8} \name{betadiver} \alias{betadiver} \alias{scores.betadiver} \alias{plot.betadiver} \title{ Indices of beta Diversity } \description{ The function estimates any of the 24 indices of beta diversity reviewed by Koleff et al. (2003). Alternatively, it finds the co-occurrence frequencies for triangular plots (Koleff et al. 2003). } \usage{ betadiver(x, method = NA, order = FALSE, help = FALSE, ...) \method{plot}{betadiver}(x, ...) \method{scores}{betadiver}(x, triangular = TRUE, ...) } \arguments{ \item{x}{Community data matrix, or the \code{betadiver} result for \code{plot} and \code{scores} functions. } \item{method}{The index of beta diversity as defined in Koleff et al. (2003), Table 1. You can use either the subscript of \eqn{\beta} or the number of the index. See argument \code{help} below. } \item{order}{Order sites by increasing number of species. This will influence the configuration in the triangular plot and non-symmetric indices. } \item{help}{Show the numbers, subscript names and the defining equations of the indices and exit.} \item{triangular}{Return scores suitable for triangular plotting of proportions. If \code{FALSE}, returns a 3-column matrix of raw counts.} \item{\dots}{ Other arguments to functions. } } \details{ The most commonly used index of beta diversity is \eqn{\beta_w = S/\alpha - 1}, where \eqn{S} is the total number of species, and \eqn{\alpha} is the average number of species per site (Whittaker 1960). A drawback of this model is that \eqn{S} increases with sample size, but the expectation of \eqn{\alpha} remains constant, and so the beta diversity increases with sample size. A solution to this problem is to study the beta diversity of pairs of sites. If we denote the number of species shared between two sites as \eqn{a} and the numbers of unique species (not shared) as \eqn{b} and \eqn{c}, then \eqn{S = a + b + c} and \eqn{\alpha = (2 a + b + c)/2} so that \eqn{\beta_w = (b+c)/(2 a + b + c)}. This is the \enc{Sørensen}{Sorensen} dissimilarity as defined in \pkg{vegan} function \code{\link{vegdist}} with argument \code{binary = TRUE}. Many other indices are dissimilarity indices as well. Function \code{betadiver} finds all indices reviewed by Koleff et al. (2003). All these indices could be found with function \code{\link{designdist}}, but the current function provides a conventional shortcut. The function only finds the indices. The proper analysis must be done with functions such as \code{\link{betadisper}}, \code{\link{adonis}} or \code{\link{mantel}}. The indices are directly taken from Table 1 of Koleff et al. (2003), and they can be selected either by the index number or the subscript name used by Koleff et al. The numbers, names and defining equations can be seen using \code{betadiver(help = TRUE)}. In all cases where there are two alternative forms, the one with the term \eqn{-1} is used. There are several duplicate indices, and the number of distinct alternatives is much lower than 24 formally provided. The formulations used in functions differ occasionally from those in Koleff et al. (2003), but they are still mathematically equivalent. With \code{method = NA}, no index is calculated, but instead an object of class \code{betadiver} is returned. This is a list of elements \code{a}, \code{b} and \code{c}. Function \code{plot} can be used to display the proportions of these elements in triangular plot as suggested by Koleff et al. (2003), and \code{scores} extracts the triangular coordinates or the raw scores. Function \code{plot} returns invisibly the triangular coordinates as an \code{"\link{ordiplot}"} object. } \value{ With \code{method = NA}, the function returns an object of class \code{"betadisper"} with elements \code{a}, \code{b}, and \code{c}. If \code{method} is specified, the function returns a \code{"dist"} object which can be used in any function analysing dissimilarities. For beta diversity, particularly useful functions are \code{\link{betadisper}} to study the betadiversity in groups, \code{\link{adonis}} for any model, and \code{\link{mantel}} to compare beta diversities to other dissimilarities or distances (including geographical distances). Although \code{betadiver} returns a \code{"dist"} object, some indices are similarities and cannot be used as such in place of dissimilarities, but that is a severe user error. Functions 10 (\code{"j"}) and 11 (\code{"sor"}) are two such similarity indices. } \references{ Baselga, A. (2010) Partitioning the turnover and nestedness components of beta diversity. \emph{Global Ecology and Biogeography} 19, 134--143. Koleff, P., Gaston, K.J. and Lennon, J.J. (2003) Measuring beta diversity for presence-absence data. \emph{Journal of Animal Ecology} 72, 367--382. Whittaker, R.H. (1960) Vegetation of Siskiyou mountains, Oregon and California. \emph{Ecological Monographs} 30, 279--338. } \author{Jari Oksanen } \section{Warning }{Some indices return similarities instead of dissimilarities.} \seealso{ \code{\link{designdist}} for an alternative to implement all these functions, \code{\link{vegdist}} for some canned alternatives, and \code{\link{betadisper}}, \code{\link{adonis}}, \code{\link{mantel}} for analysing beta diversity objects. Functions \code{\link{nestedbetasor}} and \code{\link{nestedbetajac}} implement decomposition beta diversity measures (\enc{Sørensen}{Sorensen} and Jaccard) into turnover and nestedness components following Baselga (2010). } \examples{ ## Raw data and plotting data(sipoo) m <- betadiver(sipoo) plot(m) ## The indices betadiver(help=TRUE) ## The basic Whittaker index d <- betadiver(sipoo, "w") ## This should be equal to Sorensen index (binary Bray-Curtis in ## vegan) range(d - vegdist(sipoo, binary=TRUE)) } \keyword{ multivariate } vegan/man/betadisper.Rd0000644000176200001440000002703412031511006014531 0ustar liggesusers\encoding{UTF-8} \name{betadisper} \alias{betadisper} \alias{scores.betadisper} \alias{anova.betadisper} \alias{plot.betadisper} \alias{boxplot.betadisper} \alias{TukeyHSD.betadisper} \alias{ordimedian} \title{Multivariate homogeneity of groups dispersions (variances)} \description{ Implements Marti Anderson's PERMDISP2 procedure for the analysis of multivariate homogeneity of group dispersions (variances). \code{betadisper} is a multivariate analogue of Levene's test for homogeneity of variances. Non-euclidean distances between objects and group centroids are handled by reducing the original distances to principal coordinates. This procedure has latterly been used as a means of assessing beta diversity. There are \code{anova}, \code{scores}, \code{plot} and \code{boxplot} methods. \code{TukeyHSD.betadisper} creates a set of confidence intervals on the differences between the mean distance-to-centroid of the levels of the grouping factor with the specified family-wise probability of coverage. The intervals are based on the Studentized range statistic, Tukey's 'Honest Significant Difference' method. } \usage{ betadisper(d, group, type = c("median","centroid"), bias.adjust = FALSE) \method{anova}{betadisper}(object, \dots) \method{scores}{betadisper}(x, display = c("sites", "centroids"), choices = c(1,2), \dots) \method{plot}{betadisper}(x, axes = c(1,2), cex = 0.7, hull = TRUE, ylab, xlab, main, sub, \dots) \method{boxplot}{betadisper}(x, ylab = "Distance to centroid", ...) \method{TukeyHSD}{betadisper}(x, which = "group", ordered = FALSE, conf.level = 0.95, \dots) } \arguments{ \item{d}{a distance structure such as that returned by \code{\link[stats]{dist}}, \code{\link{betadiver}} or \code{\link{vegdist}}.} \item{group}{vector describing the group structure, usually a factor or an object that can be coerced to a factor using \code{\link[base]{as.factor}}. Can consist of a factor with a single level (i.e., one group).} \item{type}{the type of analysis to perform. Use the spatial median or the group centroid? The spatial median is now the default.} \item{bias.adjust}{logical: adjust for small sample bias in beta diversity estimates?} \item{display}{character; partial match to access scores for \code{"sites"} or \code{"species"}.} \item{object, x}{an object of class \code{"betadisper"}, the result of a call to \code{betadisper}.} \item{choices, axes}{the principal coordinate axes wanted.} \item{hull}{logical; should the convex hull for each group be plotted?} \item{cex, ylab, xlab, main, sub}{graphical parameters. For details, see \code{\link{plot.default}}.} \item{which}{A character vector listing terms in the fitted model for which the intervals should be calculated. Defaults to the grouping factor.} \item{ordered}{Logical; see \code{\link{TukeyHSD}}.} \item{conf.level}{A numeric value between zero and one giving the family-wise confidence level to use.} \item{\dots}{arguments, including graphical parameters (for \code{plot.betadisper} and \code{boxplot.betadisper}), passed to other methods.} } \details{ One measure of multivariate dispersion (variance) for a group of samples is to calculate the average distance of group members to the group centroid or spatial median (both referred to as 'centroid' from now on unless stated otherwise) in multivariate space. To test if the dispersions (variances) of one or more groups are different, the distances of group members to the group centroid are subject to ANOVA. This is a multivariate analogue of Levene's test for homogeneity of variances if the distances between group members and group centroids is the Euclidean distance. However, better measures of distance than the Euclidean distance are available for ecological data. These can be accommodated by reducing the distances produced using any dissimilarity coefficient to principal coordinates, which embeds them within a Euclidean space. The analysis then proceeds by calculating the Euclidean distances between group members and the group centroid on the basis of the principal coordinate axes rather than the original distances. Non-metric dissimilarity coefficients can produce principal coordinate axes that have negative Eigenvalues. These correspond to the imaginary, non-metric part of the distance between objects. If negative Eigenvalues are produced, we must correct for these imaginary distances. The distance to its centroid of a point is \deqn{z_{ij}^c = \sqrt{\Delta^2(u_{ij}^+, c_i^+) - \Delta^2(u_{ij}^-, c_i^-)},}{z[ij]^c = sqrt(Delta^2(u[ij]^+, c[i]^+) - Delta^2(u[ij]^-, c[i]^-)),} where \eqn{\Delta^2}{Delta^2} is the squared Euclidean distance between \eqn{u_{ij}}{u[ij]}, the principal coordinate for the \eqn{j}th point in the \eqn{i}th group, and \eqn{c_i}{c[i]}, the coordinate of the centroid for the \eqn{i}th group. The super-scripted \sQuote{\eqn{+}} and \sQuote{\eqn{-}} indicate the real and imaginary parts respectively. This is equation (3) in Anderson (2006). If the imaginary part is greater in magnitude than the real part, then we would be taking the square root of a negative value, resulting in NaN. From \pkg{vegan} 1.12-12 \code{betadisper} takes the absolute value of the real distance minus the imaginary distance, before computing the square root. This is in line with the behaviour of Marti Anderson's PERMDISP2 programme. To test if one or more groups is more variable than the others, ANOVA of the distances to group centroids can be performed and parametric theory used to interpret the significance of \eqn{F}. An alternative is to use a permutation test. \code{\link{permutest.betadisper}} permutes model residuals to generate a permutation distribution of \eqn{F} under the Null hypothesis of no difference in dispersion between groups. Pairwise comparisons of group mean dispersions can also be performed using \code{\link{permutest.betadisper}}. An alternative to the classical comparison of group dispersions, is to calculate Tukey's Honest Significant Differences between groups, via \code{TukeyHSD.betadisper}. This is a simple wrapper to \code{\link{TukeyHSD.aov}}. The user is directed to read the help file for \code{\link{TukeyHSD}} before using this function. In particular, note the statement about using the function with unbalanced designs. The results of the analysis can be visualised using the \code{plot} and \code{boxplot} methods. One additional use of these functions is in assessing beta diversity (Anderson \emph{et al} 2006). Function \code{\link{betadiver}} provides some popular dissimilarity measures for this purpose. As noted in passing by Anderson (2001) and in a related context by O'Neill (2000), estimates of dispersion around a central location (median or centroid) that is calculated from the same data will be biased downward. This bias matters most when comparing diversity among treatments with small, unequal numbers of samples. Setting \code{bias.adjust=TRUE} when using \code{betadisper} imposes a \eqn{\sqrt{n/(n-1)}}{sqrt(n/(n-1))} correction (Stier et al. 2012). } \value{ The \code{anova} method returns an object of class \code{"anova"} inheriting from class \code{"data.frame"}. The \code{scores} method returns a list with one or both of the components \code{"sites"} and \code{"centroids"}. The \code{plot} function invisibly returns an object of class \code{"ordiplot"}, a plotting structure which can be used by \code{\link{identify.ordiplot}} (to identify the points) or other functions in the \code{\link{ordiplot}} family. The \code{boxplot} function invisibly returns a list whose components are documented in \code{\link[graphics]{boxplot}}. \code{TukeyHSD.betadisper} returns a list. See \code{\link{TukeyHSD}} for further details. \code{betadisper} returns a list of class \code{"betadisper"} with the following components: \item{eig}{numeric; the eigenvalues of the principal coordinates analysis.} \item{vectors}{matrix; the eigenvectors of the principal coordinates analysis.} \item{distances}{numeric; the Euclidean distances in principal coordinate space between the samples and their respective group centroid.} \item{group}{factor; vector describing the group structure} \item{centroids}{matrix; the locations of the group centroids on the principal coordinates.} \item{call}{the matched function call.} } \note{ If \code{group} consists of a single level or group, then the \code{anova} and \code{permutest} methods are not appropriate and if used on such data will stop with an error. Missing values in either \code{d} or \code{group} will be removed prior to performing the analysis. } \section{Warning}{ Stewart Schultz noticed that the permutation test for \code{type="centroid"} had the wrong type I error and was anti-conservative. As such, the default for \code{type} has been changed to \code{"median"}, which uses the spatial median as the group centroid. Tests suggests that the permutation test for this type of analysis gives the correct error rates. } \references{ Anderson, M. J. (2001) A new method for non-parametric multivariate analysis of variance. \emph{Austral Ecology} \strong{26}, 32--46. Anderson, M.J. (2006) Distance-based tests for homogeneity of multivariate dispersions. \emph{Biometrics} \strong{62}, 245--253. Anderson, M.J., Ellingsen, K.E. & McArdle, B.H. (2006) Multivariate dispersion as a measure of beta diversity. \emph{Ecology Letters} \strong{9}, 683--693. O'Neill, M.E. (2000) A Weighted Least Squares Approach to Levene's Test of Homogeneity of Variance. \emph{Australian & New Zealand Journal of Statistics} \strong{42}, 81-–100. Stier, A.C., Geange, S.W., Hanson, K.M., & Bolker, B.M. (2012) Predator density and timing of arrival affect reef fish community assembly. Ms. in revision, \emph{Oikos}. } \author{Gavin L. Simpson; bias correction by Adrian Stier and Ben Bolker.} \seealso{\code{\link{permutest.betadisper}}, \code{\link[stats]{anova.lm}}, \code{\link{scores}}, \code{\link[graphics]{boxplot}}, \code{\link{TukeyHSD}}. Further measure of beta diversity can be found in \code{\link{betadiver}}.} \examples{ data(varespec) ## Bray-Curtis distances between samples dis <- vegdist(varespec) ## First 16 sites grazed, remaining 8 sites ungrazed groups <- factor(c(rep(1,16), rep(2,8)), labels = c("grazed","ungrazed")) ## Calculate multivariate dispersions mod <- betadisper(dis, groups) mod ## Perform test anova(mod) ## Permutation test for F permutest(mod, pairwise = TRUE) ## Tukey's Honest Significant Differences (mod.HSD <- TukeyHSD(mod)) plot(mod.HSD) ## Plot the groups and distances to centroids on the ## first two PCoA axes plot(mod) ## can also specify which axes to plot, ordering respected plot(mod, axes = c(3,1)) ## Draw a boxplot of the distances to centroid for each group boxplot(mod) ## simulate missing values in 'd' and 'group' ## using spatial medians groups[c(2,20)] <- NA dis[c(2, 20)] <- NA mod2 <- betadisper(dis, groups) ## warnings mod2 permutest(mod2, control = permControl(nperm = 100)) anova(mod2) plot(mod2) boxplot(mod2) plot(TukeyHSD(mod2)) ## Using group centroids mod3 <- betadisper(dis, groups, type = "centroid") mod3 permutest(mod3, control = permControl(nperm = 100)) anova(mod3) plot(mod3) boxplot(mod3) plot(TukeyHSD(mod3)) ## try out bias correction; compare with mod3 (mod3B <- betadisper(dis, groups, type = "median", bias.adjust=TRUE)) } \keyword{methods} \keyword{multivariate} \keyword{hplot} vegan/man/beals.Rd0000644000176200001440000001442512031511006013475 0ustar liggesusers\encoding{UTF-8} \name{beals} \alias{beals} \alias{swan} \title{Beals Smoothing and Degree of Absence} \description{ Beals smoothing replaces each entry in the community data with a probability of a target species occurring in that particular site, based on the joint occurrences of the target species with the species that actually occur in the site. Swan's (1970) degree of absence applies Beals smoothing to zero items so long that all zeros are replaced with smoothed values. } \usage{ beals(x, species = NA, reference = x, type = 0, include = TRUE) swan(x, maxit = Inf) } \arguments{ \item{x}{Community data frame or matrix. } \item{species}{ Column index used to compute Beals function for a single species. The default (\code{NA}) indicates that the function will be computed for all species.} \item{reference}{ Community data frame or matrix to be used to compute joint occurrences. By default, \code{x} is used as reference to compute the joint occurrences.} \item{type}{Numeric. Specifies if and how abundance values have to be used in function \code{beals}. See details for more explanation.} \item{include}{This logical flag indicates whether the target species has to be included when computing the mean of the conditioned probabilities. The original Beals (1984) definition is equivalent to \code{include=TRUE}, while the formulation of \enc{Münzbergová}{Munzbergova} and Herben is equal to \code{include=FALSE}.} \item{maxit}{Maximum number of iterations. The default \code{Inf} means that iterations are continued until there are no zeros or the number of zeros does not change. Probably only \code{maxit = 1} makes sense in addition to the default.} } \details{ Beals smoothing is the estimated probability \eqn{p_{ij}}{p[ij]} that species \eqn{j} occurs at site \eqn{i}. It is defined as \eqn{p_{ij} = \frac{1}{S_i} \sum_k \frac{N_{jk} I_{ik}}{N_k}}{p[ij] = 1/S[i] Sum(k) N[jk] I[ik] / N[k]}, where \eqn{S_i}{S[i]} is the number of species at site \eqn{i}, \eqn{N_{jk}}{N[jk]} is the number of joint occurrences of species \eqn{j} and \eqn{k}, \eqn{N_k}{N[k]} is the number of occurrences of species \eqn{k}, and \eqn{I} is the incidence (0 or 1) of species (this last term is usually omitted from the equation, but it is necessary). As \eqn{N_{jk}}{N[jk]} can be interpreted as a mean of conditional probability, the \code{beals} function can be interpreted as a mean of conditioned probabilities (De \enc{Cáceres}{Caceres} & Legendre 2008). The present function is generalized to abundance values (De \enc{Cáceres}{Caceres} & Legendre 2008). The \code{type} argument specifies if and how abundance values have to be used. \code{type = 0} presence/absence mode. \code{type = 1} abundances in \code{reference} (or \code{x}) are used to compute conditioned probabilities. \code{type = 2} abundances in \code{x} are used to compute weighted averages of conditioned probabilities. \code{type = 3} abundances are used to compute both conditioned probabilities and weighted averages. Beals smoothing was originally suggested as a method of data transformation to remove excessive zeros (Beals 1984, McCune 1994). However, it is not a suitable method for this purpose since it does not maintain the information on species presences: a species may have a higher probability of occurrence at a site where it does not occur than at sites where it occurs. Moreover, it regularizes data too strongly. The method may be useful in identifying species that belong to the species pool (Ewald 2002) or to identify suitable unoccupied patches in metapopulation analysis (\enc{Münzbergová}{Munzbergova} & Herben 2004). In this case, the function should be called with \code{include=FALSE} for cross-validation smoothing for species; argument \code{species} can be used if only one species is studied. Swan (1970) suggested replacing zero values with degrees of absence of a species in a community data matrix. Swan expressed the method in terms of a similarity matrix, but it is equivalent to applying Beals smoothing to zero values, at each step shifting the smallest initially non-zero item to value one, and repeating this so many times that there are no zeros left in the data. This is actually very similar to extended dissimilarities (implemented in function \code{\link{stepacross}}), but very rarely used. } \value{ The function returns a transformed data matrix or a vector if Beals smoothing is requested for a single species. } \references{ Beals, E.W. 1984. Bray-Curtis ordination: an effective strategy for analysis of multivariate ecological data. Pp. 1--55 in: MacFadyen, A. & E.D. Ford [eds.] \emph{Advances in Ecological Research, 14}. Academic Press, London. De \enc{Cáceres}{Caceres}, M. & Legendre, P. 2008. Beals smoothing revisited. \emph{Oecologia} 156: 657--669. Ewald, J. 2002. A probabilistic approach to estimating species pools from large compositional matrices. \emph{J. Veg. Sci.} 13: 191--198. McCune, B. 1994. Improving community ordination with the Beals smoothing function. \emph{Ecoscience} 1: 82--86. \enc{Münzbergová}{Munzbergova}, Z. & Herben, T. 2004. Identification of suitable unoccupied habitats in metapopulation studies using co-occurrence of species. \emph{Oikos} 105: 408--414. Swan, J.M.A. 1970. An examination of some ordination problems by use of simulated vegetational data. \emph{Ecology} 51: 89--102. } \author{Miquel De \enc{Cáceres}{Caceres} and Jari Oksanen} \seealso{\code{\link{decostand}} for proper standardization methods, \code{\link{specpool}} for an attempt to assess the size of species pool. Function \code{\link{indpower}} assesses the power of each species to estimate the probabilities predicted by \code{beals}. } \examples{ data(dune) ## Default x <- beals(dune) ## Remove target species x <- beals(dune, include = FALSE) ## Smoothed values against presence or absence of species pa <- decostand(dune, "pa") boxplot(as.vector(x) ~ unlist(pa), xlab="Presence", ylab="Beals") ## Remove the bias of tarbet species: Yields lower values. beals(dune, type =3, include = FALSE) ## Uses abundance information. ## Vector with beals smoothing values corresponding to the first species ## in dune. beals(dune, species=1, include=TRUE) } \keyword{ manip } \keyword{ smooth } vegan/man/as.mlm.Rd0000644000176200001440000000603011256153704013606 0ustar liggesusers\name{as.mlm.cca} \alias{as.mlm} \alias{as.mlm.cca} \alias{as.mlm.rda} \title{Refit Constrained Ordination as a Multiple Response Linear Model } \description{ Functions refit results of constrained ordination (\code{\link{cca}}, \code{\link{rda}}, \code{\link{capscale}}) as a multiple response linear model (\code{\link{lm}}). This allows finding influence statistics (\code{\link{influence.measures}}). This also allows deriving several other statistics, but most of these are biased and misleading, since refitting ignores a major component of variation in constrained ordination. } \usage{ as.mlm(x) } \arguments{ \item{x}{Constrained ordination result. } } \details{ Popular algorithm for constrained ordination is based on iteration with regression where weighted averages of sites are used as dependent variables and constraints as independent variables. Statistics of linear regression are a natural by-product in this algorithm. Constrained ordination in \pkg{vegan} uses different algorithm, but to obtain linear regression statistics you can refit an ordination result as a multiple response linear model (\code{\link{lm}}). This regression ignores residual unconstrained variation in the data, and therefore estimates of standard error are strongly biased and much too low. You can get statistics like \eqn{t}-values of coefficients, but you should not use these because of this bias. Some useful information you can get with refitted models are statistics for detecting influential observations (\code{\link{influence.measures}} including \code{\link{cooks.distance}}, \code{\link{hatvalues}}). } \value{ Function returns an object of multiple response linear model of class \code{"mlm"} documented with \code{\link{lm}}. } \author{ Jari Oksanen } \note{ You can use these functions to find \eqn{t}-values of coefficients using \code{summary.mlm}, but you should not do this because the method ignores unconstrained residual variation. You also can find several other statistics for (multiple response) linear models with similar bias. This bias is not a unique feature in \pkg{vegan} implementation, but also applies to implementations in other software. Some statistics of linear models can be found without using these functions: \code{\link{coef.cca}} gives the regression coefficients, \code{\link{spenvcor}} the species-environment correlation, \code{\link{intersetcor}} the interset correlation, \code{\link{vif.cca}} the variance inflation factors. } \seealso{\code{\link{cca}}, \code{\link{rda}}, \code{\link{capscale}}, \code{\link{cca.object}}, \code{\link{lm}}, \code{\link{summary.mlm}}, \code{\link{influence.measures}}. } \examples{ data(varespec) data(varechem) mod <- cca(varespec ~ Al + P + K, data=varechem) lmod <- as.mlm(mod) ## Coefficients lmod coef(mod) ## Influential observations influence.measures(lmod) plot(mod, type = "n") points(mod, cex = 10*hatvalues(lmod), pch=16, xpd = TRUE) text(mod, display = "bp", col = "blue") } \keyword{ models } \keyword{ multivariate } vegan/man/anova.cca.Rd0000644000176200001440000002065712034242624014256 0ustar liggesusers\name{anova.cca} \alias{anova.cca} \alias{anova.ccanull} \alias{anova.ccabyaxis} \alias{anova.ccabyterm} \alias{anova.ccabymargin} \alias{anova.prc} \alias{permutest} \alias{permutest.default} \alias{permutest.cca} \title{Permutation Test for Constrained Correspondence Analysis, Redundancy Analysis and Constrained Analysis of Principal Coordinates } \description{ The function performs an ANOVA like permutation test for Constrained Correspondence Analysis (\code{\link{cca}}), Redundancy Analysis (\code{\link{rda}}) or distance-based Redundancy Analysis (dbRDA, \code{\link{capscale}}) to assess the significance of constraints. } \usage{ \method{anova}{cca}(object, alpha=0.05, beta=0.01, step=100, perm.max=9999, by = NULL, ...) permutest(x, ...) \method{permutest}{cca}(x, permutations = 99, model = c("reduced", "direct", "full"), first = FALSE, strata, ...) } \arguments{ \item{object,x}{A result object from \code{\link{cca}}. } \item{alpha}{Targeted Type I error rate. } \item{beta}{Accepted Type II error rate. } \item{step}{Number of permutations during one step. } \item{perm.max}{Maximum number of permutations. } \item{by}{Setting \code{by = "axis"} will assess significance for each constrained axis, and setting \code{by = "terms"} will assess significance for each term (sequentially from first to last), and setting \code{by = "margin"} will assess the marginal effects of the terms (each marginal term analysed in a model with all other variables).} \item{\dots}{Parameters passed to other functions. \code{anova.cca} passes all arguments to \code{permutest.cca}. In \code{anova} with \code{by = "axis"} you can use argument \code{cutoff} (defaults \code{1}) which stops permutations after exceeding the given level. } \item{permutations}{Number of permutations for assessing significance of constraints.} \item{model}{Permutation model (partial match).} \item{first}{Assess only the significance of the first constrained eigenvalue; will be passed from \code{anova.cca}. } \item{strata}{An integer vector or factor specifying the strata for permutation. If supplied, observations are permuted only within the specified strata.} } \details{ Functions \code{anova.cca} and \code{permutest.cca} implement an ANOVA like permutation test for the joint effect of constraints in \code{\link{cca}}, \code{\link{rda}} or \code{\link{capscale}}. Functions \code{anova.cca} and \code{permutest.cca} differ in printout style and in interface. Function \code{permutest.cca} is the proper workhorse, but \code{anova.cca} passes all parameters to \code{permutest.cca}. The default test is for the sum of all constrained eigenvalues. Setting \code{first = TRUE} will perform a test for the first constrained eigenvalue. Argument \code{first} can be set either in \code{anova.cca} or in \code{permutest.cca}. It is also possible to perform significance tests for each axis or for each term (constraining variable) using argument \code{by} in \code{anova.cca}. Setting \code{by = "axis"} will perform separate significance tests for each constrained axis. All previous constrained axes will be used as conditions (\dQuote{partialled out}) and a test for the first constrained eigenvalues is performed (Legendre et al. 2011). You can stop permutation tests after exceeding a given significance level with argument \code{cutoff} to speed up calculations in large models. Setting \code{by = "terms"} will perform separate significance test for each term (constraining variable). The terms are assessed sequentially from first to last, and the order of the terms will influence their significances. Setting \code{by = "margin"} will perform separate significance test for each marginal term in a model with all other terms. The marginal test also accepts a \code{scope} argument for the \code{\link{drop.scope}} which can be a character vector of term labels that are analysed, or a fitted model of lower scope. The marginal effects are also known as \dQuote{Type III} effects, but the current function only evaluates marginal terms. It will, for instance, ignore main effects that are included in interaction terms. In calculating pseudo-\eqn{F}, all terms are compared to the same residual of the full model. Permutations for all axes or terms will start from the same \code{\link{.Random.seed}}, and the seed will be advanced to the value after the longest permutation at the exit from the function. In \code{anova.cca} the number of permutations is controlled by targeted \dQuote{critical} \eqn{P} value (\code{alpha}) and accepted Type II or rejection error (\code{beta}). If the results of permutations differ from the targeted \code{alpha} at risk level given by \code{beta}, the permutations are terminated. If the current estimate of \eqn{P} does not differ significantly from \code{alpha} of the alternative hypothesis, the permutations are continued with \code{step} new permutations (at the first step, the number of permutations is \code{step - 1}). However, with \code{by="terms"} a fixed number of permutations will be used, and this is given by argument \code{permutations}, or if this is missing, by \code{step}. Community data are permuted with choice \code{model="direct"}, residuals after partial CCA/ RDA/ dbRDA with choice \code{model="reduced"} (default), and residuals after CCA/ RDA/ dbRDA under choice \code{model="full"}. If there is no partial CCA/ RDA/ dbRDA stage, \code{model="reduced"} simply permutes the data and is equivalent to \code{model="direct"}. The test statistic is \dQuote{pseudo-\eqn{F}}, which is the ratio of constrained and unconstrained total Inertia (Chi-squares, variances or something similar), each divided by their respective ranks. If there are no conditions (\dQuote{partial} terms), the sum of all eigenvalues remains constant, so that pseudo-\eqn{F} and eigenvalues would give equal results. In partial CCA/ RDA/ dbRDA, the effect of conditioning variables (\dQuote{covariables}) is removed before permutation, and these residuals are added to the non-permuted fitted values of partial CCA (fitted values of \code{X ~ Z}). Consequently, the total Chi-square is not fixed, and test based on pseudo-\eqn{F} would differ from the test based on plain eigenvalues. CCA is a weighted method, and environmental data are re-weighted at each permutation step using permuted weights. } \value{ Function \code{permutest.cca} returns an object of class \code{"permutest.cca"}, which has its own \code{print} method. The distribution of permuted \eqn{F} values can be inspected with \code{\link{density.permutest.cca}} function. The function \code{anova.cca} calls \code{permutest.cca}, fills an \code{\link{anova}} table and uses \code{\link{print.anova}} for printing. } \note{ Some cases of \code{anova} need access to the original data on constraints (at least \code{by = "term"} and \code{by = "margin"}), and they may fail if data are unavailable. The default permutation \code{model} changed from \code{"direct"} to \code{"reduced"} in \pkg{vegan} version 1.15-0, and you must explicitly set \code{model = "direct"} for compatibility with the old version. Tests \code{by = "terms"} and \code{by = "margin"} are consistent only when \code{model = "direct"}. } \references{ Legendre, P. and Legendre, L. (2012). \emph{Numerical Ecology}. 3rd English ed. Elsevier. Legendre, P., Oksanen, J. and ter Braak, C.J.F. (2011). Testing the significance of canonical axes in redundancy analysis. \emph{Methods in Ecology and Evolution} 2, 269--277. } \author{Jari Oksanen} \seealso{\code{\link{cca}}, \code{\link{rda}}, \code{\link{capscale}} to get something to analyse. Function \code{\link{drop1.cca}} calls \code{anova.cca} with \code{by = "margin"}, and \code{\link{add1.cca}} an analysis for single terms additions, which can be used in automatic or semiautomatic model building (see \code{\link{deviance.cca}}). } \examples{ data(varespec) data(varechem) vare.cca <- cca(varespec ~ Al + P + K, varechem) ## overall test anova(vare.cca) ## Test for axes anova(vare.cca, by="axis", perm.max=500) ## Sequential test for terms anova(vare.cca, by="terms", permu=200) ## Marginal or Type III effects anova(vare.cca, by="margin") ## Marginal test knows 'scope' anova(vare.cca, by = "m", scope="P") } \keyword{ multivariate } \keyword{ htest } vegan/man/anosim.Rd0000644000176200001440000001161412031511006013672 0ustar liggesusers\name{anosim} \alias{anosim} \alias{summary.anosim} \alias{plot.anosim} \title{ Analysis of Similarities } \description{ Analysis of similarities (ANOSIM) provides a way to test statistically whether there is a significant difference between two or more groups of sampling units. } \usage{ anosim(dat, grouping, permutations = 999, distance = "bray", strata) } \arguments{ \item{dat}{Data matrix or data frame in which rows are samples and columns are response variable(s), or a dissimilarity object or a symmetric square matrix of dissimilarities.} \item{grouping}{Factor for grouping observations.} \item{permutations}{Number of permutation to assess the significance of the ANOSIM statistic. } \item{distance}{Choice of distance metric that measures the dissimilarity between two observations. See \code{\link{vegdist}} for options. This will be used if \code{dat} was not a dissimilarity structure or a symmetric square matrix.} \item{strata}{An integer vector or factor specifying the strata for permutation. If supplied, observations are permuted only within the specified strata.} } \details{ Analysis of similarities (ANOSIM) provides a way to test statistically whether there is a significant difference between two or more groups of sampling units. Function \code{anosim} operates directly on a dissimilarity matrix. A suitable dissimilarity matrix is produced by functions \code{\link{dist}} or \code{\link{vegdist}}. The method is philosophically allied with NMDS ordination (\code{\link{monoMDS}}), in that it uses only the rank order of dissimilarity values. If two groups of sampling units are really different in their species composition, then compositional dissimilarities between the groups ought to be greater than those within the groups. The \code{anosim} statistic \eqn{R} is based on the difference of mean ranks between groups (\eqn{r_B}) and within groups (\eqn{r_W}): \deqn{R = (r_B - r_W)/(N (N-1) / 4)} The divisor is chosen so that \eqn{R} will be in the interval \eqn{-1 \dots +1}, value \eqn{0} indicating completely random grouping. The statistical significance of observed \eqn{R} is assessed by permuting the grouping vector to obtain the empirical distribution of \eqn{R} under null-model. See \code{\link{permutations}} for additional details on permutation tests in Vegan. The distribution of simulated values can be inspected with the \code{density} function. The function has \code{summary} and \code{plot} methods. These both show valuable information to assess the validity of the method: The function assumes that all ranked dissimilarities within groups have about equal median and range. The \code{plot} method uses \code{\link{boxplot}} with options \code{notch=TRUE} and \code{varwidth=TRUE}. } \value{ The function returns a list of class \code{"anosim"} with following items: \item{call }{Function call.} \item{statistic}{The value of ANOSIM statistic \eqn{R}} \item{signif}{Significance from permutation.} \item{perm}{Permutation values of \eqn{R}. The distribution of permutation values can be inspected with function \code{\link{density.anosim}}.} \item{class.vec}{Factor with value \code{Between} for dissimilarities between classes and class name for corresponding dissimilarity within class.} \item{dis.rank}{Rank of dissimilarity entry.} \item{dissimilarity}{The name of the dissimilarity index: the \code{"method"} entry of the \code{dist} object.} } \references{ Clarke, K. R. (1993). Non-parametric multivariate analysis of changes in community structure. \emph{Australian Journal of Ecology} 18, 117--143. Warton, D.I., Wright, T.W., Wang, Y. 2012. Distance-based multivariate analyses confound location and dispersion effects. \emph{Methods in Ecology and Evolution}, 3, 89--101 } \author{Jari Oksanen, with a help from Peter R. Minchin.} \note{ The \code{anosim} function can confound the differences between groups and dispersion within groups and the results can be difficult to interpret (cf. Warton et al. 2012). The function returns a lot of information to ease studying its performance. Most \code{anosim} models could be analysed with \code{\link{adonis}} which seems to be a more robust alternative. } \seealso{\code{\link{mrpp}} for a similar function using original dissimilarities instead of their ranks. \code{\link{dist}} and \code{\link{vegdist}} for obtaining dissimilarities, and \code{\link{rank}} for ranking real values. For comparing dissimilarities against continuous variables, see \code{\link{mantel}}. Function \code{\link{adonis}} is a more robust alternative that should preferred. } \examples{ data(dune) data(dune.env) dune.dist <- vegdist(dune) attach(dune.env) dune.ano <- anosim(dune.dist, Management) summary(dune.ano) plot(dune.ano) } \keyword{multivariate } \keyword{ nonparametric } \keyword{ htest } vegan/man/adonis.Rd0000644000176200001440000002443112031516374013677 0ustar liggesusers\encoding{UTF-8} \name{adonis} \alias{adonis} \title{Permutational Multivariate Analysis of Variance Using Distance Matrices} \description{Analysis of variance using distance matrices --- for partitioning distance matrices among sources of variation and fitting linear models (e.g., factors, polynomial regression) to distance matrices; uses a permutation test with pseudo-\eqn{F} ratios.} \usage{ adonis(formula, data, permutations = 999, method = "bray", strata = NULL, contr.unordered = "contr.sum", contr.ordered = "contr.poly", ...) } \arguments{ \item{formula}{a typical model formula such as \code{Y ~ A + B*C}, but where \code{Y} is either a dissimilarity object (inheriting from class \code{"dist"}) or data frame or a matrix; \code{A}, \code{B}, and \code{C} may be factors or continuous variables. If a dissimilarity object is supplied, no species coefficients can be calculated (see Value below).} \item{data}{ the data frame from which \code{A}, \code{B}, and \code{C} would be drawn.} \item{permutations}{ number of replicate permutations used for the hypothesis tests (\eqn{F} tests).} \item{method}{ the name of any method used in \code{\link{vegdist}} to calculate pairwise distances if the left hand side of the \code{formula} was a data frame or a matrix. } \item{strata}{ groups (strata) within which to constrain permutations. } \item{contr.unordered, contr.ordered}{contrasts used for the design matrix (default in R is dummy or treatment contrasts for unordered factors). } \item{\dots}{Other arguments passed to \code{vegdist}.} } \details{\code{adonis} is a function for the analysis and partitioning sums of squares using semimetric and metric distance matrices. Insofar as it partitions sums of squares of a multivariate data set, it is directly analogous to MANOVA (multivariate analysis of variance). M.J. Anderson (McArdle and Anderson 2001, Anderson 2001) refers to the method as \dQuote{permutational manova} (formerly \dQuote{nonparametric manova}). Further, as its inputs are linear predictors, and a response matrix of an arbitrary number of columns (2 to millions), it is a robust alternative to both parametric MANOVA and to ordination methods for describing how variation is attributed to different experimental treatments or uncontrolled covariates. It is also analogous to redundancy analysis (Legendre and Anderson 1999). Typical uses of \code{adonis} include analysis of ecological community data (samples X species matrices) or genetic data where we might have a limited number of samples of individuals and thousands or millions of columns of gene expression data (e.g. Zapala and Schork 2006). \code{adonis} is an alternative to AMOVA (nested analysis of molecular variance, Excoffier, Smouse, and Quattro, 1992; \code{\link[ade4]{amova}} in the \pkg{ade4} package) for both crossed and nested factors. If the experimental design has nestedness, then use \code{strata} to test hypotheses. For instance, imagine we are testing whether a plant community is influenced by nitrate amendments, and we have two replicate plots at each of two levels of nitrate (0, 10 ppm). We have replicated the experiment in three fields with (perhaps) different average productivity. In this design, we would need to specify \code{strata = field} so that randomizations occur only \emph{within each field} and not across all fields . See example below. Like AMOVA (Excoffier et al. 1992), \code{adonis} relies on a long-understood phenomenon that allows one to partition sums of squared deviations from a centroid in two different ways (McArdle and Anderson 2001). The most widely recognized method, used, e.g., for ANOVA and MANOVA, is to first identify the relevant centroids and then to calculated the squared deviations from these points. For a centered \eqn{n \times p}{n x p} response matrix \eqn{Y}, this method uses the \eqn{p \times p}{p x p} inner product matrix \eqn{Y'Y}. The less appreciated method is to use the \eqn{n \times n}{n x n} outer product matrix \eqn{YY'}. Both AMOVA and \code{adonis} use this latter method. This allows the use of any semimetric (e.g. Bray-Curtis, aka Steinhaus, Czekanowski, and \enc{Sørensen}{Sorensen}) or metric (e.g. Euclidean) distance matrix (McArdle and Anderson 2001). Using Euclidean distances with the second method results in the same analysis as the first method. Significance tests are done using \eqn{F}-tests based on sequential sums of squares from permutations of the raw data, and not permutations of residuals. Permutations of the raw data may have better small sample characteristics. Further, the precise meaning of hypothesis tests will depend upon precisely what is permuted. The strata argument keeps groups intact for a particular hypothesis test where one does not want to permute the data among particular groups. For instance, \code{strata = B} causes permutations among levels of \code{A} but retains data within levels of \code{B} (no permutation among levels of \code{B}). See \code{\link{permutations}} for additional details on permutation tests in Vegan. The default \code{\link{contrasts}} are different than in \R in general. Specifically, they use \dQuote{sum} contrasts, sometimes known as \dQuote{ANOVA} contrasts. See a useful text (e.g. Crawley, 2002) for a transparent introduction to linear model contrasts. This choice of contrasts is simply a personal pedagogical preference. The particular contrasts can be set to any \code{\link{contrasts}} specified in \R, including Helmert and treatment contrasts. Rules associated with formulae apply. See "An Introduction to R" for an overview of rules. \code{print.adonis} shows the \code{aov.tab} component of the output. } \value{ This function returns typical, but limited, output for analysis of variance (general linear models). \item{aov.tab}{Typical AOV table showing sources of variation, degrees of freedom, sequential sums of squares, mean squares, \eqn{F} statistics, partial \eqn{R^2}{R-squared} and \eqn{P} values, based on \eqn{N} permutations. } \item{coefficients}{ matrix of coefficients of the linear model, with rows representing sources of variation and columns representing species; each column represents a fit of a species abundance to the linear model. These are what you get when you fit one species to your predictors. These are NOT available if you supply the distance matrix in the formula, rather than the site x species matrix} \item{coef.sites}{ matrix of coefficients of the linear model, with rows representing sources of variation and columns representing sites; each column represents a fit of a sites distances (from all other sites) to the linear model.These are what you get when you fit distances of one site to your predictors. } \item{f.perms}{ an \eqn{N} by \eqn{m} matrix of the null \eqn{F} statistics for each source of variation based on \eqn{N} permutations of the data. The distribution of a single term can be inspected with \code{\link{density.adonis}} function, or all terms simultaneously with \code{densityplot.adonis}.} \item{model.matrix}{The \code{\link{model.matrix}} for the right hand side of the formula.} \item{terms}{The \code{\link{terms}} component of the model.} } \note{Anderson (2001, Fig. 4) warns that the method may confound location and dispersion effects: significant differences may be caused by different within-group variation (dispersion) instead of different mean values of the groups (see Warton et al. 2012 for a general analysis). However, it seems that \code{adonis} is less sensitive to dispersion effects than some of its alternatives (\code{\link{anosim}}, \code{\link{mrpp}}). Function \code{\link{betadisper}} is a sister function to \code{adonis} to study the differences in dispersion within the same geometric framework. } \references{ Anderson, M.J. 2001. A new method for non-parametric multivariate analysis of variance. \emph{Austral Ecology}, \strong{26}: 32--46. Crawley, M.J. 2002. \emph{Statistical Computing: An Introduction to Data Analysis Using S-PLUS} Excoffier, L., P.E. Smouse, and J.M. Quattro. 1992. Analysis of molecular variance inferred from metric distances among DNA haplotypes: Application to human mitochondrial DNA restriction data. \emph{Genetics}, \strong{131}:479--491. Legendre, P. and M.J. Anderson. 1999. Distance-based redundancy analysis: Testing multispecies responses in multifactorial ecological experiments. \emph{Ecological Monographs}, \strong{69}:1--24. McArdle, B.H. and M.J. Anderson. 2001. Fitting multivariate models to community data: A comment on distance-based redundancy analysis. \emph{Ecology}, \strong{82}: 290--297. Warton, D.I., Wright, T.W., Wang, Y. 2012. Distance-based multivariate analyses confound location and dispersion effects. \emph{Methods in Ecology and Evolution}, 3, 89--101. Zapala, M.A. and N.J. Schork. 2006. Multivariate regression analysis of distance matrices for testing associations between gene expression patterns and related variables. \emph{Proceedings of the National Academy of Sciences, USA}, \strong{103}:19430--19435. } \author{Martin Henry H. Stevens \email{HStevens@muohio.edu}, adapted to \pkg{vegan} by Jari Oksanen. } \seealso{ \code{\link{mrpp}}, \code{\link{anosim}}, \code{\link{mantel}}, \code{\link{varpart}}. } \examples{ data(dune) data(dune.env) adonis(dune ~ Management*A1, data=dune.env, permutations=99) ### Example of use with strata, for nested (e.g., block) designs. dat <- expand.grid(rep=gl(2,1), NO3=factor(c(0,10)),field=gl(3,1) ) dat Agropyron <- with(dat, as.numeric(field) + as.numeric(NO3)+2) +rnorm(12)/2 Schizachyrium <- with(dat, as.numeric(field) - as.numeric(NO3)+2) +rnorm(12)/2 total <- Agropyron + Schizachyrium library(lattice) dotplot(total ~ NO3, dat, jitter.x=TRUE, groups=field, type=c('p','a'), xlab="NO3", auto.key=list(columns=3, lines=TRUE) ) Y <- data.frame(Agropyron, Schizachyrium) mod <- metaMDS(Y) plot(mod) ### Hulls show treatment ordihull(mod, group=dat$NO3, show="0") ordihull(mod, group=dat$NO3, show="10", col=3) ### Spider shows fields ordispider(mod, group=dat$field, lty=3, col="red") ### Correct hypothesis test (with strata) adonis(Y ~ NO3, data=dat, strata=dat$field, perm=999) ### Incorrect (no strata) adonis(Y ~ NO3, data=dat, perm=999) } \keyword{multivariate } \keyword{nonparametric } vegan/man/adipart.Rd0000644000176200001440000001756112031511006014037 0ustar liggesusers\encoding{UTF-8} \name{adipart} \alias{adipart} \alias{adipart.default} \alias{adipart.formula} \alias{hiersimu} \alias{hiersimu.default} \alias{hiersimu.formula} \title{Additive Diversity Partitioning and Hierarchical Null Model Testing} \description{ In additive diversity partitioning, mean values of alpha diversity at lower levels of a sampling hierarchy are compared to the total diversity in the entire data set (gamma diversity). In hierarchical null model testing, a statistic returned by a function is evaluated according to a nested hierarchical sampling design (\code{hiersimu}). } \usage{ adipart(...) \method{adipart}{default}(y, x, index=c("richness", "shannon", "simpson"), weights=c("unif", "prop"), relative = FALSE, nsimul=99, ...) \method{adipart}{formula}(formula, data, index=c("richness", "shannon", "simpson"), weights=c("unif", "prop"), relative = FALSE, nsimul=99, ...) hiersimu(...) \method{hiersimu}{default}(y, x, FUN, location = c("mean", "median"), relative = FALSE, drop.highest = FALSE, nsimul=99, ...) \method{hiersimu}{formula}(formula, data, FUN, location = c("mean", "median"), relative = FALSE, drop.highest = FALSE, nsimul=99, ...) } \arguments{ \item{y}{A community matrix.} \item{x}{A matrix with same number of rows as in \code{y}, columns coding the levels of sampling hierarchy. The number of groups within the hierarchy must decrease from left to right. If \code{x} is missing, function performs an overall decomposition into alpha, beta and gamma diversities.} \item{formula}{A two sided model formula in the form \code{y ~ x}, where \code{y} is the community data matrix with samples as rows and species as column. Right hand side (\code{x}) must grouping vaiables referring to levels of sampling hierarchy, terms from right to left will be treated as nested (first column is the lowest, last is the highest level, at least two levels specified). Interaction terms are not allowed.} \item{data}{A data frame where to look for variables defined in the right hand side of \code{formula}. If missing, variables are looked in the global environment.} \item{index}{Character, the diversity index to be calculated (see Details).} \item{weights}{Character, \code{"unif"} for uniform weights, \code{"prop"} for weighting proportional to sample abundances to use in weighted averaging of individual alpha values within strata of a given level of the sampling hierarchy.} \item{relative}{Logical, if \code{TRUE} then alpha and beta diversity values are given relative to the value of gamma for function \code{adipart}.} \item{nsimul}{Number of permutations to use if \code{matr} is not of class 'permat'. If \code{nsimul = 0}, only the \code{FUN} argument is evaluated. It is thus possible to reuse the statistic values without using a null model.} \item{FUN}{A function to be used by \code{hiersimu}. This must be fully specified, because currently other arguments cannot be passed to this function via \code{\dots}.} \item{location}{Character, identifies which function (mean or median) is to be used to calculate location of the samples.} \item{drop.highest}{Logical, to drop the highest level or not. When \code{FUN} evaluates only arrays with at least 2 dimensions, highest level should be dropped, or not selected at all.} \item{\dots}{Other arguments passed to functions, e.g. base of logarithm for Shannon diversity, or \code{method}, \code{thin} or \code{burnin} arguments for \code{\link{oecosimu}}.} } \details{ Additive diversity partitioning means that mean alpha and beta diversities add up to gamma diversity, thus beta diversity is measured in the same dimensions as alpha and gamma (Lande 1996). This additive procedure is then extended across multiple scales in a hierarchical sampling design with \eqn{i = 1, 2, 3, \ldots, m} levels of sampling (Crist et al. 2003). Samples in lower hierarchical levels are nested within higher level units, thus from \eqn{i=1} to \eqn{i=m} grain size is increasing under constant survey extent. At each level \eqn{i}, \eqn{\alpha_i} denotes average diversity found within samples. At the highest sampling level, the diversity components are calculated as \deqn{\beta_m = \gamma - \alpha_m}{beta_m = gamma - alpha_m} For each lower sampling level as \deqn{\beta_i = \alpha_{i+1} - \alpha_i}{beta_i = alpha_i+1 - alpha_i} Then, the additive partition of diversity is \deqn{\gamma = \alpha_1 + \sum_{i=1}^m \beta_i}{gamma = alpha_1 + sum(beta_i)} Average alpha components can be weighted uniformly (\code{weight="unif"}) to calculate it as simple average, or proportionally to sample abundances (\code{weight="prop"}) to calculate it as weighted average as follows \deqn{\alpha_i = \sum_{j=1}^{n_i} D_{ij} w_{ij}}{alpha_i = sum(D_ij*w_ij)} where \eqn{D_{ij}} is the diversity index and \eqn{w_{ij}} is the weight calculated for the \eqn{j}th sample at the \eqn{i}th sampling level. The implementation of additive diversity partitioning in \code{adipart} follows Crist et al. 2003. It is based on species richness (\eqn{S}, not \eqn{S-1}), Shannon's and Simpson's diversity indices stated as the \code{index} argument. The expected diversity components are calculated \code{nsimul} times by individual based randomisation of the community data matrix. This is done by the \code{"r2dtable"} method in \code{\link{oecosimu}} by default. \code{hiersimu} works almost in the same way as \code{adipart}, but without comparing the actual statistic values returned by \code{FUN} to the highest possible value (cf. gamma diversity). This is so, because in most of the cases, it is difficult to ensure additive properties of the mean statistic values along the hierarchy. } \value{ An object of class \code{"adipart"} or \code{"hiersimu"} with same structure as \code{\link{oecosimu}} objects. } \references{ Crist, T.O., Veech, J.A., Gering, J.C. and Summerville, K.S. (2003). Partitioning species diversity across landscapes and regions: a hierarchical analysis of \eqn{\alpha}, \eqn{\beta}, and \eqn{\gamma}-diversity. \emph{Am. Nat.}, \bold{162}, 734--743. Lande, R. (1996). Statistics and partitioning of species diversity, and similarity among multiple communities. \emph{Oikos}, \bold{76}, 5--13. } \author{ \enc{Péter Sólymos}{Peter Solymos}, \email{solymos@ualberta.ca}} \seealso{See \code{\link{oecosimu}} for permutation settings and calculating \eqn{p}-values. } \examples{ ## NOTE: 'nsimul' argument usually needs to be >= 99 ## here much lower value is used for demonstration data(mite) data(mite.xy) data(mite.env) ## Function to get equal area partitions of the mite data cutter <- function (x, cut = seq(0, 10, by = 2.5)) { out <- rep(1, length(x)) for (i in 2:(length(cut) - 1)) out[which(x > cut[i] & x <= cut[(i + 1)])] <- i return(out)} ## The hierarchy of sample aggregation levsm <- data.frame( l1=1:nrow(mite), l2=cutter(mite.xy$y, cut = seq(0, 10, by = 2.5)), l3=cutter(mite.xy$y, cut = seq(0, 10, by = 5)), l4=cutter(mite.xy$y, cut = seq(0, 10, by = 10))) ## Let's see in a map par(mfrow=c(1,3)) plot(mite.xy, main="l1", col=as.numeric(levsm$l1)+1) plot(mite.xy, main="l2", col=as.numeric(levsm$l2)+1) plot(mite.xy, main="l3", col=as.numeric(levsm$l3)+1) par(mfrow=c(1,1)) ## Additive diversity partitioning adipart(mite, index="richness", nsimul=19) adipart(mite ~ ., levsm, index="richness", nsimul=19) ## Hierarchical null model testing ## diversity analysis (similar to adipart) hiersimu(mite, FUN=diversity, relative=TRUE, nsimul=19) hiersimu(mite ~., levsm, FUN=diversity, relative=TRUE, nsimul=19) ## Hierarchical testing with the Morisita index morfun <- function(x) dispindmorisita(x)$imst hiersimu(mite ~., levsm, morfun, drop.highest=TRUE, nsimul=19) } \keyword{multivariate} vegan/man/add1.cca.Rd0000644000176200001440000000755712031516374013772 0ustar liggesusers\name{add1.cca} \alias{add1.cca} \alias{drop1.cca} \title{Add or Drop Single Terms to a Constrained Ordination Model } \description{ Compute all single terms that can be added to or dropped from a constrained ordination model. } \usage{ \method{add1}{cca}(object, scope, test = c("none", "permutation"), pstep = 100, perm.max = 200, ...) \method{drop1}{cca}(object, scope, test = c("none", "permutation"), pstep = 100, perm.max = 200, ...) } \arguments{ \item{object}{ A constrained ordination object from \code{\link{cca}}, \code{\link{rda}} or \code{\link{capscale}}. } \item{scope}{ A formula giving the terms to be considered for adding or dropping; see \code{\link{add1}} for details.} \item{test}{ Should a permutation test be added using \code{\link{anova.cca}}. } \item{pstep}{Number of permutations in one step, passed as argument \code{step} to \code{\link{anova.cca}}.} \item{perm.max}{ Maximum number of permutation in \code{\link{anova.cca}}. } \item{\dots}{Other arguments passed to \code{\link{add1.default}}, \code{\link{drop1.default}}, and \code{\link{anova.cca}}.} } \details{ With argument \code{test = "none"} the functions will only call \code{\link{add1.default}} or \code{\link{drop1.default}}. With argument \code{test = "permutation"} the functions will add test results from \code{\link{anova.cca}}. Function \code{drop1.cca} will call \code{\link{anova.cca}} with argument \code{by = "margin"}. Function \code{add1.cca} will implement a test for single term additions that is not directly available in \code{\link{anova.cca}}. Functions are used implicitly in \code{\link{step}}, \code{\link{ordiR2step}} and \code{\link{ordistep}}. The \code{\link{deviance.cca}} and \code{\link{deviance.rda}} used in \code{\link{step}} have no firm basis, and setting argument \code{test = "permutation"} may help in getting useful insight into validity of model building. Function \code{\link{ordistep}} calls alternately \code{drop1.cca} and \code{add1.cca} with argument \code{test = "permutation"} and selects variables by their permutation \eqn{P}-values. Meticulous use of \code{add1.cca} and \code{drop1.cca} will allow more judicious model building. The default \code{perm.max} is set to a low value, because permutation tests can take a long time. It should be sufficient to give a impression on the significances of the terms, but higher values of \code{perm.max} should be used if \eqn{P} values really are important. } \value{ Returns a similar object as \code{\link{add1}} and \code{\link{drop1}}. } \author{Jari Oksanen} \seealso{ \code{\link{add1}}, \code{\link{drop1}} and \code{\link{anova.cca}} for basic methods. You probably need these functions with \code{\link{step}} and \code{\link{ordistep}}. Functions \code{\link{deviance.cca}} and \code{\link{extractAIC.cca}} are used to produce the other arguments than test results in the output. Functions \code{\link{cca}}, \code{\link{rda}} and \code{\link{capscale}} produce result objects for these functions.} \examples{ data(dune) data(dune.env) ## Automatic model building based on AIC but with permutation tests step(cca(dune ~ 1, dune.env), reformulate(names(dune.env)), test="perm") ## see ?ordistep to do the same, but based on permutation P-values \dontrun{ ordistep(cca(dune ~ 1, dune.env), reformulate(names(dune.env)), perm.max=200) } ## Manual model building ## -- define the maximal model for scope mbig <- rda(dune ~ ., dune.env) ## -- define an empty model to start with m0 <- rda(dune ~ 1, dune.env) ## -- manual selection and updating add1(m0, scope=formula(mbig), test="perm") m0 <- update(m0, . ~ . + Management) add1(m0, scope=formula(mbig), test="perm") m0 <- update(m0, . ~ . + Moisture) ## -- included variables still significant? drop1(m0, test="perm") add1(m0, scope=formula(mbig), test="perm") } \keyword{multivariate } \keyword{ models} vegan/man/SSarrhenius.Rd0000644000176200001440000001222411523760420014663 0ustar liggesusers\name{SSarrhenius} \alias{SSarrhenius} \alias{SSlomolino} \alias{SSgitay} \alias{SSgleason} \title{ Self-Starting nls Species-Area Models } \description{ These functions provide self-starting species-area models for non-linear regression (\code{\link{nls}}). They can also be used for fitting species accumulation models in \code{\link{fitspecaccum}}. These models (and many more) are reviewed by Dengler (2009). } \usage{ SSarrhenius(area, k, z) SSgleason(area, k, slope) SSgitay(area, k, slope) SSlomolino(area, Asym, xmid, slope) } \arguments{ \item{area}{ Area or size of the sample: the independent variable. } \item{k, z, slope, Asym, xmid}{ Estimated model parameters: see Details. } } \details{ All these functions are assumed to be used for species richness (number of species) as the independent variable, and area or sample size as the independent variable. Basically, these define least squares models of untransformed data, and will differ from models for transformed species richness or models with non-Gaussian error. The Arrhenius model (\code{SSarrhenius}) is the expression \code{k*area^z}. This is the most classical model that can be found in any textbook of ecology (and also in Dengler 2009). Parameter \code{z} is the steepness of the species-area curve, and \code{k} is the expected number of species in a unit area. The Gleason model (\code{SSgleason}) is a linear expression \code{k + slope*log(area)} (Dengler 200). This is a linear model, and starting values give the final estimates; it is provided to ease comparison with other models. The Gitay model (\code{SSgitay}) is a quadratic logarithmic expression \code{(k + slope*log(area))^2} (Gitay et al. 1991, Dengler 2009). Parameter \code{slope} is the steepness of the species-area curve, and \code{k} is the square root of expected richness in a unit area. The Lomolino model (\code{SSlomolino}) is \code{Asym/(1 + slope^log(xmid/area))} (Lomolino 2000, Dengler 2009). Parameter \code{Asym} is the asymptotic maximum number of species, \code{slope} is the maximum slope of increse of richness, and \code{xmid} is the area where half of the maximum richess is achieved. In addition to these models, several other models studied by Dengler (2009) are available in standard \R self-starting models: Michaelis-Menten (\code{\link{SSmicmen}}), Gompertz (\code{\link{SSgompertz}}), logistic (\code{\link{SSlogis}}), Weibull (\code{\link{SSweibull}}), and some others that may be useful. } \value{ Numeric vector of the same length as \code{area}. It is the value of the expression of each model. If all arguments are names of objects the gradient matrix with respect to these names is attached as an attribute named \code{gradient}. } \references{ Dengler, J. (2009) Which function describes the species-area relationship best? A review and empirical evaluation. \emph{Journal of Biogeography} 36, 728--744. Gitay, H., Roxburgh, S.H. & Wilson, J.B. (1991) Species-area relationship in a New Zealand tussock grassland, with implications for nature reserve design and for community structure. \emph{Journal of Vegetation Science} 2, 113--118. Lomolino, M. V. (2000) Ecology's most general, yet protean pattern: the species-area relationship. \emph{Journal of Biogeography} 27, 17--26. } \author{ Jari Oksanen. } \seealso{ \code{\link{nls}}, \code{\link{fitspecaccum}}. } \examples{ ## Get species area data: sipoo.area gives the areas of islands example(sipoo) S <- specnumber(sipoo) plot(S ~ sipoo.area, xlab = "Island Area (ha)", ylab = "Number of Species", ylim = c(1, max(S))) ## The Arrhenius model marr <- nls(S ~ SSarrhenius(sipoo.area, k, z)) marr ## confidence limits from profile likelihood confint(marr) ## draw a line xtmp <- seq(min(sipoo.area), max(sipoo.area), len=51) lines(xtmp, predict(marr, newdata=data.frame(sipoo.area = xtmp)), lwd=2) ## The normal way is to use linear regression on log-log data, ## but this will be different from the previous: mloglog <- lm(log(S) ~ log(sipoo.area)) mloglog lines(xtmp, exp(predict(mloglog, newdata=data.frame(sipoo.area=xtmp))), lty=2) ## Gleason: log-linear mgle <- nls(S ~ SSgleason(sipoo.area, k, slope)) lines(xtmp, predict(mgle, newdata=data.frame(sipoo.area=xtmp)), lwd=2, col=2) ## Gitay: quadratic of log-linear mgit <- nls(S ~ SSgitay(sipoo.area, k, slope)) lines(xtmp, predict(mgit, newdata=data.frame(sipoo.area=xtmp)), lwd=2, col = 3) ## Lomolino: using original names of the parameters (Lomolino 2000): mlom <- nls(S ~ SSlomolino(sipoo.area, Smax, A50, Hill)) mlom lines(xtmp, predict(mlom, newdata=data.frame(sipoo.area=xtmp)), lwd=2, col = 4) ## One canned model of standard R: mmic <- nls(S ~ SSmicmen(sipoo.area, slope, Asym)) lines(xtmp, predict(mmic, newdata = data.frame(sipoo.area=xtmp)), lwd =2, col = 5) legend("bottomright", c("Arrhenius", "log-log linear", "Gleason", "Gitay", "Lomolino", "Michaelis-Menten"), col=c(1,1,2,3,4,5), lwd=c(2,1,2,2,2,2), lty=c(1,2,1,1,1,1)) ## compare models (AIC) allmods <- list(Arrhenius = marr, Gleason = mgle, Gitay = mgit, Lomolino = mlom, MicMen= mmic) sapply(allmods, AIC) } \keyword{ models } vegan/man/RsquareAdj.Rd0000644000176200001440000000505212031516374014461 0ustar liggesusers\name{RsquareAdj} \alias{RsquareAdj} \alias{RsquareAdj.default} \alias{RsquareAdj.rda} \alias{RsquareAdj.cca} \alias{RsquareAdj.lm} \alias{RsquareAdj.glm} \Rdversion{1.1} \title{ Adjusted R-square } \description{ The functions finds the adjusted R-square. } \usage{ \method{RsquareAdj}{default}(x, n, m, ...) \method{RsquareAdj}{rda}(x, ...) } \arguments{ \item{x}{ Unadjusted R-squared or an object from which the terms for evaluation or adjusted R-squared can be found.} \item{n, m}{Number of observations and number of degrees of freedom in the fitted model.} \item{\dots}{ Other arguments (ignored).} } \details{ The default method finds the adjusted R-squared from the unadjusted R-squared, number of observations, and number of degrees of freedom in the fitted model. The specific methods find this information from the fitted result object. There are specific methods for \code{\link{rda}}, \code{\link{cca}}, \code{\link{lm}} and \code{\link{glm}}. Adjusted, or even unadjusted, R-squared may not be available in some cases, and then the functions will return \code{NA}. There is no adjusted R-squared in \code{\link{cca}}, in partial \code{\link{rda}}, and R-squared values are available only for \code{\link{gaussian}} models in \code{\link{glm}}. The raw \eqn{R^2}{R-squared} of partial \code{rda} gives the proportion explained after removing the variation due to conditioning (partial) terms; Legendre et al. (2011) call this semi-partial \eqn{R^2}{R-squared}. The adjusted \eqn{R^2}{R-squared} is found as the difference of adjusted \eqn{R^2}{R-squared} values of joint effect of partial and constraining terms and partial term alone, and it is the same as the adjusted \eqn{R^2}{R-squared} of component \code{[a] = X1|X2} in two-component variation partition in \code{\link{varpart}}. } \value{ The functions return a list of items \code{r.squared} and \code{adj.r.squared}. } \references{ Legendre, P., Oksanen, J. and ter Braak, C.J.F. (2011). Testing the significance of canonical axes in redundancy analysis. \emph{Methods in Ecology and Evolution} 2, 269--277. Peres-Neto, P., P. Legendre, S. Dray and D. Borcard. 2006. Variation partitioning of species data matrices: estimation and comparison of fractions. \emph{Ecology} 87, 2614--2625. } \seealso{ \code{\link{varpart}} uses \code{RsquareAdj}. } \examples{ data(mite) data(mite.env) ## rda m <- rda(decostand(mite, "hell") ~ ., mite.env) RsquareAdj(m) ## default method RsquareAdj(0.8, 20, 5) } \keyword{ univar } \keyword{ multivariate } vegan/man/MOStest.Rd0000644000176200001440000001755711625737155014005 0ustar liggesusers\encoding{UTF-8} \name{MOStest} \alias{MOStest} \alias{plot.MOStest} \alias{fieller.MOStest} \alias{profile.MOStest} \alias{confint.MOStest} \title{ Mitchell-Olds \& Shaw Test for the Location of Quadratic Extreme } \description{ Mitchell-Olds & Shaw test concerns the location of the highest (hump) or lowest (pit) value of a quadratic curve at given points. Typically, it is used to study whether the quadratic hump or pit is located within a studied interval. The current test is generalized so that it applies generalized linear models (\code{\link{glm}}) with link function instead of simple quadratic curve. The test was popularized in ecology for the analysis of humped species richness patterns (Mittelbach et al. 2001), but it is more general. With logarithmic link function, the quadratic response defines the Gaussian response model of ecological gradients (ter Braak & Looman 1986), and the test can be used for inspecting the location of Gaussian optimum within a given range of the gradient. It can also be used to replace Tokeshi's test of \dQuote{bimodal} species frequency distribution. } \usage{ MOStest(x, y, interval, ...) \method{plot}{MOStest}(x, which = c(1,2,3,6), ...) fieller.MOStest(object, level = 0.95) \method{profile}{MOStest}(fitted, alpha = 0.01, maxsteps = 10, del = zmax/5, ...) \method{confint}{MOStest}(object, parm = 1, level = 0.95, ...) } \arguments{ \item{x}{The independent variable or plotting object in \code{plot}. } \item{y}{The dependent variable. } \item{interval}{The two points at which the test statistic is evaluated. If missing, the extremes of \code{x} are used. } \item{which}{Subset of plots produced. Values \code{which=1} and \code{2} define plots specific to \code{MOStest} (see Details), and larger values select graphs of \code{\link{plot.lm}} (minus 2). } \item{object, fitted}{A result object from \code{MOStest}.} \item{level}{The confidence level required.} \item{alpha}{Maximum significance level allowed.} \item{maxsteps}{Maximum number of steps in the profile.} \item{del}{A step length parameter for the profile (see code).} \item{parm}{Ignored.} \item{\dots}{ Other variables passed to functions. Function \code{MOStest} passes these to \code{\link{glm}} so that these can include \code{\link{family}}. The other functions pass these to underlying graphical functions. } } \details{ The function fits a quadratic curve \eqn{\mu = b_0 + b_1 x + b_2 x^2} with given \code{\link{family}} and link function. If \eqn{b_2 < 0}, this defines a unimodal curve with highest point at \eqn{u = -b_1/(2 b_2)} (ter Braak & Looman 1986). If \eqn{b_2 > 0}, the parabola has a minimum at \eqn{u} and the response is sometimes called \dQuote{bimodal}. The null hypothesis is that the extreme point \eqn{u} is located within the interval given by points \eqn{p_1} and \eqn{p_2}. If the extreme point \eqn{u} is exactly at \eqn{p_1}, then \eqn{b_1 = 0} on shifted axis \eqn{x - p_1}. In the test, origin of \code{x} is shifted to the values \eqn{p_1} and \eqn{p_2}, and the test statistic is based on the differences of deviances between the original model and model where the origin is forced to the given location using the standard \code{\link{anova.glm}} function (Oksanen et al. 2001). Mitchell-Olds & Shaw (1987) used the first degree coefficient with its significance as estimated by the \code{\link{summary.glm}} function. This give identical results with Normal error, but for other error distributions it is preferable to use the test based on differences in deviances in fitted models. The test is often presented as a general test for the location of the hump, but it really is dependent on the quadratic fitted curve. If the hump is of different form than quadratic, the test may be insignificant. Because of strong assumptions in the test, you should use the support functions to inspect the fit. Function \code{plot(..., which=1)} displays the data points, fitted quadratic model, and its approximate 95\% confidence intervals (2 times SE). Function \code{plot} with \code{which = 2} displays the approximate confidence interval of the polynomial coefficients, together with two lines indicating the combinations of the coefficients that produce the evaluated points of \code{x}. Moreover, the cross-hair shows the approximate confidence intervals for the polynomial coefficients ignoring their correlations. Higher values of \code{which} produce corresponding graphs from \code{\link{plot.lm}}. That is, you must add 2 to the value of \code{which} in \code{\link{plot.lm}}. Function \code{fieller.MOStest} approximates the confidence limits of the location of the extreme point (hump or pit) using Fieller's theorem following ter Braak & Looman (1986). The test is based on quasideviance except if the \code{\link{family}} is \code{poisson} or \code{binomial}. Function \code{profile} evaluates the profile deviance of the fitted model, and \code{confint} finds the profile based confidence limits following Oksanen et al. (2001). The test is typically used in assessing the significance of diversity hump against productivity gradient (Mittelbach et al. 2001). It also can be used for the location of the pit (deepest points) instead of the Tokeshi test. Further, it can be used to test the location of the the Gaussian optimum in ecological gradient analysis (ter Braak & Looman 1986, Oksanen et al. 2001). } \value{ The function is based on \code{\link{glm}}, and it returns the result of object of \code{glm} amended with the result of the test. The new items in the \code{MOStest} are: \item{isHump }{\code{TRUE} if the response is a hump.} \item{isBracketed}{\code{TRUE} if the hump or the pit is bracketed by the evaluated points.} \item{hump}{Sorted vector of location of the hump or the pit and the points where the test was evaluated.} \item{coefficients}{Table of test statistics and their significances.} } \references{ Mitchell-Olds, T. & Shaw, R.G. 1987. Regression analysis of natural selection: statistical inference and biological interpretation. \emph{Evolution} 41, 1149--1161. Mittelbach, G.C. Steiner, C.F., Scheiner, S.M., Gross, K.L., Reynolds, H.L., Waide, R.B., Willig, R.M., Dodson, S.I. & Gough, L. 2001. What is the observed relationship between species richness and productivity? \emph{Ecology} 82, 2381--2396. Oksanen, J., Läärä, E., Tolonen, K. & Warner, B.G. 2001. Confidence intervals for the optimum in the Gaussian response function. \emph{Ecology} 82, 1191--1197. ter Braak, C.J.F & Looman, C.W.N 1986. Weighted averaging, logistic regression and the Gaussian response model. \emph{Vegetatio} 65, 3--11. } \author{Jari Oksanen } \note{ Function \code{fieller.MOStest} is based on package \pkg{optgrad} in the Ecological Archives (\url{http://www.esapubs.org/archive/ecol/E082/015/default.htm}) accompanying Oksanen et al. (2001). The Ecological Archive package \pkg{optgrad} also contains profile deviance method for the location of the hump or pit, but the current implementation of \code{profile} and \code{confint} rather follow the example of \code{\link[MASS]{profile.glm}} and \code{\link[MASS]{confint.glm}} in the \pkg{MASS} package. } \seealso{The no-interaction model can be fitted with \code{\link{humpfit}}. } \examples{ ## The Al-Mufti data analysed in humpfit(): mass <- c(140,230,310,310,400,510,610,670,860,900,1050,1160,1900,2480) spno <- c(1, 4, 3, 9, 18, 30, 20, 14, 3, 2, 3, 2, 5, 2) mod <- MOStest(mass, spno) ## Insignificant mod ## ... but inadequate shape of the curve op <- par(mfrow=c(2,2), mar=c(4,4,1,1)+.1) plot(mod) ## Looks rather like log-link with Poisson error and logarithmic biomass mod <- MOStest(log(mass), spno, family=quasipoisson) mod plot(mod) par(op) ## Confidence Limits fieller.MOStest(mod) confint(mod) plot(profile(mod)) } \keyword{ models } \keyword{ regression } vegan/man/MDSrotate.Rd0000644000176200001440000000333211636647312014270 0ustar liggesusers\name{MDSrotate} \alias{MDSrotate} \title{ Rotate First MDS Dimension Parallel to an External Variable } \description{ Function rotates a multidimensional scaling result so that its first dimension is parallel to an external (environmental variable). The function can handle the results from \code{\link{metaMDS}} or \code{\link{monoMDS}} functions. } \usage{ MDSrotate(object, vec, na.rm = FALSE, ...) } \arguments{ \item{object}{ A result object from \code{\link{metaMDS}} or \code{\link{monoMDS}}.} \item{vec}{ A continuous environmental variable (vector of the same length as the number of points).} \item{na.rm}{ Remove missing values from the continuous variable \code{vec}.} \item{\dots}{ Other arguments (ignored). } } \details{ The orientation and rotation are undefined in multidimensional scaling. Functions \code{\link{metaMDS}} and \code{\link{metaMDS}} can rotate their solutions to principal components so that the dispersion of the points is highest on the first dimension. Sometimes a different rotation is more intuitive, and \code{MDSrotate} allows rotation of the result so that the first axis is parallel to a given external variable. } \value{ Function returns the original ordination result, but with rotated scores (both site and species if available), and the \code{pc} attribute of scores set to \code{FALSE}. } \author{ Jari Oksanen } \seealso{ \code{\link{metaMDS}}, \code{\link{monoMDS}}. } \examples{ data(varespec) data(varechem) mod <- monoMDS(vegdist(varespec)) mod <- with(varechem, MDSrotate(mod, pH)) plot(mod) ef <- envfit(mod ~ pH, varechem, permutations = 0) plot(ef) ordisurf(mod ~ pH, varechem, knots = 1, add = TRUE) } \keyword{multivariate} vegan/man/CCorA.Rd0000644000176200001440000001544211625737155013365 0ustar liggesusers\name{CCorA} \alias{CCorA} \alias{biplot.CCorA} \concept{ordination} \title{Canonical Correlation Analysis} \description{Canonical correlation analysis, following Brian McArdle's unpublished graduate course notes, plus improvements to allow the calculations in the case of very sparse and collinear matrices, and permutation test of Pillai's trace statistic. } \usage{ CCorA(Y, X, stand.Y=FALSE, stand.X=FALSE, nperm = 0, ...) \method{biplot}{CCorA}(x, plot.type="ov", xlabs, plot.axes = 1:2, int=0.5, col.Y="red", col.X="blue", cex=c(0.7,0.9), ...) } \arguments{ \item{Y}{ Left matrix (object class: \code{matrix} or \code{data.frame}). } \item{X}{ Right matrix (object class: \code{matrix} or \code{data.frame}). } \item{stand.Y}{ Logical; should \code{Y} be standardized? } \item{stand.X}{ Logical; should \code{X} be standardized? } \item{nperm}{ Numeric; number of permutations to evaluate the significance of Pillai's trace, e.g. \code{nperm=99} or \code{nperm=999}.} \item{x}{\code{CCoaR} result object.} \item{plot.type}{ A character string indicating which of the following plots should be produced: \code{"objects"}, \code{"variables"}, \code{"ov"} (separate graphs for objects and variables), or \code{"biplots"}. Any unambiguous subset containing the first letters of these names can be used instead of the full names. } \item{xlabs}{ Row labels. The default is to use row names, \code{NULL} uses row numbers instead, and \code{NA} suppresses plotting row names completely.} \item{plot.axes}{ A vector with 2 values containing the order numbers of the canonical axes to be plotted. Default: first two axes. } \item{int}{ Radius of the inner circles plotted as visual references in the plots of the variables. Default: \code{int=0.5}. With \code{int=0}, no inner circle is plotted. } \item{col.Y}{ Color used for objects and variables in the first data table (Y) plots. In biplots, the objects are in black. } \item{col.X}{ Color used for objects and variables in the second data table (X) plots. } \item{cex}{ A vector with 2 values containing the size reduction factors for the object and variable names, respectively, in the plots. Default values: \code{cex=c(0.7,0.9)}. } \item{\dots}{ Other arguments passed to these functions. The function \code{biplot.CCorA} passes graphical arguments to \code{\link{biplot}} and \code{\link{biplot.default}}. \code{CCorA} currently ignores extra arguments. } } \details{ Canonical correlation analysis (Hotelling 1936) seeks linear combinations of the variables of \code{Y} that are maximally correlated to linear combinations of the variables of \code{X}. The analysis estimates the relationships and displays them in graphs. Pillai's trace statistic is computed and tested parametrically (F-test); a permutation test is also available. Algorithmic note -- The blunt approach would be to read the two matrices, compute the covariance matrices, then the matrix \code{S12 \%*\% inv(S22) \%*\% t(S12) \%*\% inv(S11)}. Its trace is Pillai's trace statistic. This approach may fail, however, when there is heavy multicollinearity in very sparse data matrices. The safe approach is to replace all data matrices by their PCA object scores. The function can produce different types of plots depending on the option chosen: \code{"objects"} produces two plots of the objects, one in the space of Y, the second in the space of X; \code{"variables"} produces two plots of the variables, one of the variables of Y in the space of Y, the second of the variables of X in the space of X; \code{"ov"} produces four plots, two of the objects and two of the variables; \code{"biplots"} produces two biplots, one for the first matrix (Y) and one for second matrix (X) solutions. For biplots, the function passes all arguments to \code{\link{biplot.default}}; consult its help page for configuring biplots. } \value{ Function \code{CCorA} returns a list containing the following elements: \item{ Pillai }{ Pillai's trace statistic = sum of the canonical eigenvalues. } \item{ Eigenvalues }{ Canonical eigenvalues. They are the squares of the canonical correlations. } \item{ CanCorr }{ Canonical correlations. } \item{ Mat.ranks }{ Ranks of matrices \code{Y} and \code{X}. } \item{ RDA.Rsquares }{ Bimultivariate redundancy coefficients (R-squares) of RDAs of Y|X and X|Y. } \item{ RDA.adj.Rsq }{ \code{RDA.Rsquares} adjusted for \code{n} and the number of explanatory variables. } \item{ nperm }{ Number of permutations. } \item{ p.Pillai }{ Parametric probability value associated with Pillai's trace. } \item{ p.perm }{ Permutational probability associated with Pillai's trace. } \item{ Cy }{ Object scores in Y biplot. } \item{ Cx }{ Object scores in X biplot. } \item{ corr.Y.Cy }{ Scores of Y variables in Y biplot, computed as cor(Y,Cy). } \item{ corr.X.Cx }{ Scores of X variables in X biplot, computed as cor(X,Cx). } \item{ corr.Y.Cx }{ cor(Y,Cy) available for plotting variables Y in space of X manually. } \item{ corr.X.Cy }{ cor(X,Cx) available for plotting variables X in space of Y manually. } \item{ call }{ Call to the CCorA function. } } \references{ Hotelling, H. 1936. Relations between two sets of variates. \emph{Biometrika} \strong{28}: 321-377. Legendre, P. 2005. Species associations: the Kendall coefficient of concordance revisited. \emph{Journal of Agricultural, Biological, and Environmental Statistics} \strong{10}: 226-245. } \author{ Pierre Legendre, Departement de Sciences Biologiques, Universite de Montreal. Implemented in \pkg{vegan} with the help of Jari Oksanen. } \examples{ # Example using two mite groups. The mite data are available in vegan data(mite) # Two mite species associations (Legendre 2005, Fig. 4) group.1 <- c(1,2,4:8,10:15,17,19:22,24,26:30) group.2 <- c(3,9,16,18,23,25,31:35) # Separate Hellinger transformations of the two groups of species mite.hel.1 <- decostand(mite[,group.1], "hel") mite.hel.2 <- decostand(mite[,group.2], "hel") rownames(mite.hel.1) = paste("S",1:nrow(mite),sep="") rownames(mite.hel.2) = paste("S",1:nrow(mite),sep="") out <- CCorA(mite.hel.1, mite.hel.2) out biplot(out, "ob") # Two plots of objects biplot(out, "v", cex=c(0.7,0.6)) # Two plots of variables biplot(out, "ov", cex=c(0.7,0.6)) # Four plots (2 for objects, 2 for variables) biplot(out, "b", cex=c(0.7,0.6)) # Two biplots biplot(out, xlabs = NA, plot.axes = c(3,5)) # Plot axes 3, 5. No object names biplot(out, plot.type="biplots", xlabs = NULL) # Replace object names by numbers # Example using random numbers. No significant relationship is expected mat1 <- matrix(rnorm(60),20,3) mat2 <- matrix(rnorm(100),20,5) out2 = CCorA(mat1, mat2, nperm=99) out2 biplot(out2, "b") } \keyword{ multivariate } vegan/man/BCI.Rd0000644000176200001440000000276612031511006013011 0ustar liggesusers\encoding{UTF-8} \name{BCI} \alias{BCI} \docType{data} \title{Barro Colorado Island Tree Counts} \description{ Tree counts in 1-hectare plots in the Barro Colorado Island. } \usage{data(BCI)} \format{ A data frame with 50 plots (rows) of 1 hectare with counts of trees on each plot with total of 225 species (columns). Full Latin names are used for tree species. } \details{ Data give the numbers of trees at least 10 cm in diameter at breast height (1.3 m above the ground) in each one hectare square of forest. Within each one hectare square, all individuals of all species were tallied and are recorded in this table. The data frame contains only the Barro Colorado Island subset of the original data. The quadrats are located in a regular grid. See \code{examples} for the coordinates. } \source{ \url{http://www.sciencemag.org/cgi/content/full/295/5555/666/DC1} } \references{ Condit, R, Pitman, N, Leigh, E.G., Chave, J., Terborgh, J., Foster, R.B., \enc{Nuñez}{Nunez}, P., Aguilar, S., Valencia, R., Villa, G., Muller-Landau, H.C., Losos, E. & Hubbell, S.P. (2002). Beta-diversity in tropical forest trees. \emph{Science} 295, 666--669. } \seealso{\code{\link[BiodiversityR]{BCI.env}} in \pkg{BiodiversityR} package for environmental data (coordinates are given below in the \code{examples}).} \examples{ data(BCI) ## UTM Coordinates (in metres) UTM.EW <- rep(seq(625754, 626654, by=100), each=5) UTM.NS <- rep(seq(1011569, 1011969, by=100), len=50) } \keyword{datasets} vegan/inst/0000755000176200001440000000000012122046275012330 5ustar liggesusersvegan/inst/doc/0000755000176200001440000000000012122046457013077 5ustar liggesusersvegan/inst/doc/veganjss.sty0000644000176200001440000000171311713257123015461 0ustar liggesusers%% macros to typeset vegan vignettes with jss.cls %% jss.cls does not collect toc info, but we redefine jss section and %% subsection commands to add contents line. Line of pdfbookmark can %% be removed, since toc is used for the purpose. \renewcommand{\jsssec}[2][default]{\vskip \preXLskip% %\pdfbookmark[1]{#1}{Section.\thesection.#1}% \refstepcounter{section}% \addcontentsline{toc}{section}{\protect\numberline{\thesection}#1}% \centerline{\textbf{\Large \thesection. #2}} \nopagebreak \vskip \postMskip \nopagebreak } \renewcommand{\jsssubsec}[2][default]{\vskip \preMskip% %\pdfbookmark[2]{#1}{Subsection.\thesubsection.#1}% \refstepcounter{subsection}% \addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}#1}% \textbf{\large \thesubsection. #2} \nopagebreak \vskip \postSskip \nopagebreak} %% use inconsolata fonts for code and examples \usepackage{inconsolata} %% smaller examples \renewenvironment{Schunk}{\par\small}{} vegan/inst/doc/vegan.bib0000644000176200001440000000545611631657064014675 0ustar liggesusers@Book{Sedgewick90, author = {R. Sedgewick}, title = {Algorithms in {C}}, publisher = {Addison Wesley}, year = 1990} @Article{MiklosPod04, author = {I. Mikl{\'o}s and J. Podani}, title = {Randomization of presence--absence matrices: comments and new algorithms}, journal = {Ecology}, year = 2004, volume = 85, pages = {86-92}} @Article{GotelliEnt01, author = {N. J. Gotelli and G. L. Entsminger}, title = {Swap and fill algorithms in null model analysis: rethinking the knight's tour}, journal = {Oecologia}, year = 2001, volume = 129, pages = {281-291}} @Article{AtmarPat93, author = {W. Atmar and B. D. Patterson}, title = {The measure of order and disorder in the distribution of species in fragmented habitat}, journal = {Oecologia}, year = 1993, volume = 96, pages = {373-382} } @Article{RodGir06, author = {M. A. Rodr{\'i}guez-Giron{\'e}s and L. Santamaria}, title = {A new algorithm to calculate the nestedness temperature of presence--absence matrices}, journal = {Journal of Biogeography}, year = 2006, volume = 33, pages = {921-935}} @article{Palmer93, author = {M. W. Palmer}, title = {Putting things in even better order: The advantages of canonical correspondence analysis}, journal = {Ecology}, volume = {74}, pages = {2215-2230}, year = {1993} } @article{McCune97, author = {B. McCune}, title = {Influence of noisy environmental data on canonical correspondence analysis}, journal = {Ecology}, volume = {78}, pages = {2617-2623}, year = {1997} } @article{Braak86, author = {C. J. F. ter Braak}, title = {Canonical correspondence analysis: a new eigenvector technique for multivariate direct gradient analysis}, journal = {Ecology}, volume = {67}, pages = {1167-1179}, year = {1986} } @Book{Legendre-Legendre98, author = {P. Legendre and L. Legendre}, title = {Numerical ecology}, publisher = {Elsevier}, year = 1998, number = 20, series = {Developments in Environmental Modelling}, address = {Amsterdam}, edition = {2nd} } @book{Jongman87, author = {R. H. Jongman and C. J. F. ter Braak and O. F. R. van Tongeren}, title = {Data analysis in community and landscape ecology}, pages = {299}, publisher = {Pudoc}, address = {Wageningen}, year = {1987} } @Manual{CANOCO4, title = {CANOCO reference manual and user's guide to Canoco for Windows: Software for canonical community ordination (version 4)}, author = {C. J. F ter Braak and P. {\v S}milauer}, organization = {Microcomputer Power}, address = {Ithaca, NY}, year = 1998 } vegan/inst/doc/partitioning.pdf0000644000176200001440000017211510667741210016311 0ustar liggesusers%PDF-1.4 7 0 obj << /Length 121 /Filter /FlateDecode >> stream xÚŒ± Ã0 Dw…~Àêe¢z/„Žý†™BÈÿ/U]‚‡R$8ñîtÄP2”µz׫›<×${pé‚ßh Ú:?Ýáîiˆ_îk•Û–INû ÑL2µ¢¥½ KXó±jê$?u£›;O(êÖüÿ’WÔ6endstream endobj 6 0 obj << /Type /Page /Contents 7 0 R /Resources 5 0 R /MediaBox [0 0 611.9985 791.9981] /Parent 8 0 R >> endobj 4 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./varpartv1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 9 0 R /Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] /BBox [0.00000000 0.00000000 612.00000000 792.00000000] /Resources << /Font << /Fcpdf0 10 0 R /Fcpdf1 11 0 R /Fcpdf2 12 0 R /Fcpdf3 13 0 R /Fcpdf4 14 0 R >> /ProcSet [ /PDF /Text ] >> /Length 2587 /Filter /FlateDecode >> stream xÚZKÛ8¾ûWpn ’шoi¾ìc€½ fv ºû ÛêŽ'¶äØêÍöžÿ±U|‰²e‘IMºªXE~U¬*iõeõÛjõeµúëýê§Ÿ7ÇísI(-jrÿ¼¢¤„”(Up¢dUhIî«wïšÇ÷ä=¹ÿñÐ+–ŠBÆ<Ÿ#ò몪15¹#Ãמ ÍzßžIÿLÚÿ÷M× ýéü·9íÌFä?îî]%guª®“ªò GBѺ`2¢FE?Úö»Uå².¤ßÖMRWZ¨˜%¡¬*tL Ê>÷¯§\]»cuQƒ½ªd…’ä0Nкà¥&ŒªBÀ§‚ ©`žÖ5¡nVv·¬ùH @= c»0¸ YÉ¢F/@j@”+øáfåUð3^E/à†ÍêÓêßh¬SNLóÞ4) ™ÆxUT±iŒ"ÓXY*2-ŒýÂ~bÔÌ šÛ"Óœ À©Lmð¦Q!ì¨Òl%pQ‰‚JrjdôuFhY°3´ÒÆÌ²thžæÀ˨ƈl=O&XÁ&â6ót`¢±½,¸ëÃvBèõ­ y¡.Øk™îÀ„ήÀ¨pEË®¹v$Ê(ú¬÷#óï‘ã±z ŒÉÉ]äTœæ…ªÐÖÃ8QÕ¸µ²‚Y y€A‹hËzü<œë‘?ŒíÀà'„Ù²&^€ä2æð#t)«€Ÿ :þ ‚KUeQêØ0?á S¼Ðåh¼,61Æb4•ª¨c ~ìW^5' ¨î–ˆŒsJ ¯¤—0µ"¾(œ /ü„d…DÕ8œ6nðiTÃ@Á!8nº›ÁÀFõÈÆÜGB?A(\/€×ʘdð#0Ì)~÷ :þ B´`6|qÊ€¡‡P¤Ê ´(A¦V‹ÁB–´Õz!¤ÀÀ­µ*,™>Yxx™¥s†a"‹!|žȹÑ."l—VöVd(û(!ôód„·bW¤l–´Ô0qˆÕ*"åsú\žƒ¬R3QŽ‘öÓSNXzá.¡9Xʈ|%5Èf=„1g®jaBuU‚}°!¥ €Ê¸Œc–3Bpv<’àÇv ÷cÐhˆçÇpAÙ¸‚c$²:ø™ ³“0µ!D‰Ú9¿·Ìƒe¶¥-cpUW‘]yË2²«.­sz»Ü8ØåÇ^+Ç´6ò#«Üúáw¯¯çŸè¬®ÚP•æó0ÎhÐw \á'Ü$fŸ™M=üØj*qÇÝ ž$„±[Þ±™×Àé%P°ŒÖðcÌ—¬Âké$\Úaí[ oZáù ºår€Ã""¦»â sK*ô–Û!Î.˸Ɣm!Ä1i’º˜ðyaÝX¿ó/ˆ.<ÈË r 8&Wé(g¢í%í0§0ŠP@£’ßèÜ&Võeƒ;Osë6R ÔóŸ 㢹ñ0I“EeP»Ü ¤&7—âå1ø¥v7RaØÕÉÞþqó¬Jtå~ø|ƒP.‹r¹õþJ°jdŠy‡%ÔEt]Îá3‰Å;… MGG$²î"gªö·ÄCR-l¢¥ñZ›DàP·»ëÖˆ:æ(ш™„¹²ºjɦï†Óný:ìúÎÉÎ ÒœZXöxjÏm7´[²~ƒÚ¿5ŠS»šîå¢Ð¿ÙO1uæcUN5Ç2¡ž\¥µq“ J“0Û¤«? ñ¸m{µM ]ê…pL#:jC'\ÚÊmMvéã>2KЧàæÂêûksv¸›»î…L—¼ÒœáÈz±1Wä ZLNšC?]ƒ_3Á5"b¦ÏËk ÕÄrXÈi¡\îˆ+y=¬Ûr?ŸšÚ_fYÊ’rß͞ؿµçݶ€/¿ôfüOäéÜZQdÝ_Û¶›“Xç& ;#®°¦yø&ü—᪻u3#„rl Æu£þvÍʼn ôq% ¸%*Üo§ÙÀeˆá<>ÑK"¼š(L±¯y¯V¯R#O9/¼™¨Mße™EÌØžÌ•Ê– @*±ˆ¹À£ü3ë„ú’Æ»#~˜5¾ÄŽ­‡y9O&•éÔzªEašyÀÿ8Oeú½)*û"ƒÊZ™¢âƒ)*l¤©4þž¤ª0åJQ|T-ÒD¶ O·–¨×xtž¬’¦õï©ø’°”f6‹KRa—#×ÊËxaÀlŠ›¤Ò9«ê€™‹*AÄ ÔéãfPŽWñq³šº)*+,©™Ê0{âLæZ™ ‚+GePñ €¹Ì4I¥2Æh•0ÛÎKñ*}Ö¶ÀJ9­-RÀ Kª%s,´ejÚÄt‰2]öéC’Šç KÈt ƒ.¸ùX’HaÃ-yÚ¶\KÝÈL³äÝîD%Õ9‚òþ‰]ºTƒ.MsÐeŸ3%©Dº 0Ë@—)n“W»žšøaþFPÓ­ÿ0ÿ KNÕú°Ð:J­È}×™íØNÆ9A5i¨Š:1öq.-¡¶·eiUÙÊÇNì/«|i.k…íÜ ö~’ü •ÏO›¦ƒ*seTdû·óE!æ™™t=‚¦ÛBQs~]® #í—ׯQXíwm»m·³2¨ðYøÐ“ö<ìÍК~€ ïî\?ëVa!öÙõ}¶Xƒ aK—°äãû±p,æÔ“u¨,š'‚v>lìç±ÙΦÉÑìLEÌŠª¸oÂöBmI0·Ý’çþDλ—n÷ ;ÞmÚYfÍÇ—F8¹>r„:þ^³ïïçíQÜÛþ³?ª‡õ ìú!Rê íߊ9:Q;DV”þvìú¸g´ü.ôˆ´bÂ>´dÛ mE.÷—ñÕˆ:^|¹¿,J[ürÀÔØé̯߈}røÚœÀ½ÿXK÷,ß¾‡h^ühpo_öK6’ ‚$ü‘“®9±Gãñ‰ì:³1ýëp|PÊñÔGq¡ ¤jtzxì# ß¹U,Œ¸Ô~ß5 tý¡í6ûfx…(d…}ÿOÛuáð˜[ý*ÛYkendstream endobj 9 0 obj << /Creator (Canvas\222 3.0.3) /CreationDate (D:20020223175104) /Subject () /Title () /Author (P. Legendre) /Producer (Acrobat PDFWriter 4.0 for Power Macintosh) /Keywords () /ModDate (D:20050821141706-04'00') >> endobj 10 0 obj << /Type /Font /Subtype /Type1 /Name /Fcpdf0 /BaseFont /Times-Bold /Encoding /MacRomanEncoding >> endobj 11 0 obj << /Type /Font /Subtype /Type1 /Name /Fcpdf1 /BaseFont /Times-BoldItalic /Encoding /MacRomanEncoding >> endobj 12 0 obj << /Type /Font /Subtype /Type1 /Name /Fcpdf2 /BaseFont /Times-Roman /Encoding /MacRomanEncoding >> endobj 13 0 obj << /Type /Font /Subtype /Type1 /Name /Fcpdf3 /BaseFont /Times-Italic /Encoding /MacRomanEncoding >> endobj 14 0 obj << /Type /Font /Subtype /Type1 /Name /Fcpdf4 /BaseFont /Symbol >> endobj 5 0 obj << /XObject << /Im4 4 0 R >> /ProcSet [ /PDF ] >> endobj 21 0 obj << /Length 121 /Filter /FlateDecode >> stream xÚŒ± Ã0 Dw…~Àêe¢x/”Žý† ™BÉÿ/U]‚‡R$8ñîtÄP2”µz×ÙM–-ÉAºà7ˆˆ¶ÎOw¸{â—û6Ëõ™INû ÑL2µ¢¥½ kX·#bÕÔI~êF7vžPÔ­ùÿ%/Z86endstream endobj 20 0 obj << /Type /Page /Contents 21 0 R /Resources 19 0 R /MediaBox [0 0 611.9985 791.9981] /Parent 8 0 R >> endobj 18 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./varpart23.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 22 0 R /Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] /BBox [0.00000000 0.00000000 612.00000000 792.00000000] /Resources << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 23 0 R >>/Font << /F1.0 24 0 R/F1.1 25 0 R>> >> /Length 26 0 R /Filter /FlateDecode >> stream xÚ½]ßs9r~Ç_1—«$Ú“I À`ÆUªTe/~J¥önäR¢(j$1I/Eïž«öŠÒÌàzì}°­-ã4úw7¿dÉ~Éx•É|ÊUžU¦´šVu]—™bZɺ®²m“ýw¶Î®~|áÙâ%ËÝ/‹ý~üÙþ•åÙÏ?fù´àen~ñì·¬È>oÍOrYUe‘ ‘}^°|Zš5k»¬]eÒú»ù­%[¬²ýœÕûÿ]gU^gœgŸWÙÕ'>Í3óLJìâ§ùc“ý}þßìß>»M ¯Ëöëfýue15ߪ5X,Íð'{K«jZêº`é̓[›ü졵«|ªêšíµÙëg¿µ9Os R–U Ù8ì'ßþçùój³m>þ´ÝÅw<‘gEá ûv¹Þ5÷ÓVÓ¢¢Páß¿®ï—i´ây9奮êýòZ½ÁUok3.øTs¡9øôõæ×fu·MÔ†¼ÓZk# >B‘ç*ô…ý~c °:/?*ùQäïÄ7VDûH§<3vŠ›±2º±´ÿtÿwöœýNm³ ï­²ÿ»YÅhœcf2¯§Ú.7h&­PȪιªÙyÊøít2YõéfôÈrnuc›p¹. ™µÒY+Ò—–YG %c»2JÂG{Øl“x³ë¯ºûmÓÕR¢(T-bÏ£Ò»hþþåy¾žï6Ûo¬ªÒªÒùgº¦ ‘é~¾›÷õnUTž—*¡ÙÍïž›—wÃkØ_.ª¼Œã/#š–ÁXf2éÒKœU¤¿È3C¯Àg»F¤m¬ÍƒÎ:ب„ß–»§Žg÷z‘Ì«} v±âH<"N™„ÑiH:´¨K¥4ðX˜¸#’ýj•£åÝmæ=“³|+¦2«ÂÓxkHÊ5bÜ"P‘°0ãs—ùLj½ Bö²Jä þz5½±™‹cüõË «à`#¯ó>sýÇ×Õ]³Eǩ¤0(~L$‘¡~6Ûùº/ÛK´&¼Ð̇’Bì"€`Âx7>ÄbþüÜÜûB,Ê£ðqnæ·I1‰ÑvíU_^ë¦D#V²ßÜߦkAžUoÁ,]øAâìs¶Ÿ¾4Áßb¾{ót²¿°Þmˆ™}Eê‚»§8SÑIÍóêïAÕ°h0¯ĶyÜ6//6ä ³\+Š]l¶Á‡~ƒ‚[°Å|mB#Ê]¨2×UU±~´BPÆ.={ézÒaA×Ðæ– úc÷4ßE 7{õÐw=Ím­(Èn“”•‹Þ5ÔÞà¤ÍêË×]s?mÙ¶h' .úúúÝè²Uyž,°¶¬ý›ðû‚F©’œ¾È±£"ìX(v\äN',BÔ¢ÑUþ¦æÛfØKðê€lÖÏߺ‰ž$¢±¢@(F&uëzù@ˇˆŸ…jBÄkÆœï:=9u¡÷(ì˜ë|^ú­Ÿ» 1ØËòq½|0b³^ +áóM t2Æò²TmóÎfR¡£¹[~yÞìHESB©é‹fg7çSLˆb릹·º?©xq.ûzÿǽ4FF3Ƚ.»8¯ø´Üõd>UùsW³õ€þÚ¼,ï¿ÎŸ{Qs‹™Ÿr°þÜl—¿î*T•pWo¡-dµØ4J­},fve\ð®Q‹Rkïþ€4"6Õ×kƒÖ&(ó$])PΈÎfÕÍÑEûú¯2ÊáúîÀúëªÙÚä¡iSZŸ$]¤©žÊ§–ƒÌb”Œ(atÍÎÕƒÑ5kA¾ú¦<&¿ÏK€q3¿¼» X¨‰^\¶yn¼ƒÓgÐÙŸýåè³#ÄßÏýÃìÂЪƒ YÕá#\f¤›èU+¢#-.5;šk:󤙟k2¾4„¾oÉÆÍÝå¢Å´‘AZxn¥ÅÓÈël°ìãÌ.ФÁDZÒ`hE& >¹4ô!zÅ•xiPÕqiH,Ë ‹LÇ"èœÏÆZ‡w‰`$¦®Ðm’Á,xLªRi´Ù…èËCZÜɃójZÁâyJööÂŽHDd*\Úö7+‘^ì—Uçë2ñ„ÊÛ­èëùå›H3‚¢asĪ3[èȉQ¸óˆÁ†æßóeeü®é5Bq^JYG7BÁ£YlžŸ—ëf¾]î¾5¡E׿Ðù#!‹Yµë#µû{AéÔ–‡°~ù2©íÑêXÿ뻕ÆÔxÂiBÄiB¿@À#¸F[ˆõ ¬ëQúMbBâÂåQ<Zc7òŒŸü;RNg¸>ÌÍâ6-¨¶y+‘Te-±ú÷‚W6Ðêvs߬7«åz¨Ù)Rw($ ìx³SpArÖ§h#ÀöQ½ôZS¢ÒƒÃKÂóçÅ×çý½|:âWÊÇbý½èû$¯•çnè~ú0¥½ôa|ÉØ_`JÉ™ú»_><4Û¦×G‘rî^Ý-à–îšÝoM³¦¼¤¯!W¯›—÷þ]’$ºØ3w_"W›ûæyƒ“Ê%ÜÒKÓ /ç×h’ŸìâçÍÿÍŸÓ}XY¶Ðñaÿ)-úò]~Ý<=?PšGÃ0fvÁëŠSÞ¤Wœ#þâu­úm.iU%5ÚQóËWOE'f«mWÐ8¼œr9% Ä Jéµ%|îÜu9ÑVÒ¤ÊÀ]—X‡Bù,ì®KĽb+@þŽzƒGҤǜLíÕ7?u»mSº©Dg}ÔL•—5/j¡«È¢= ³}šêjÅg?\Íö Ñæwç4›µ–Ì@°1SO“~:Ý£¬G_×?a Ó²5€˜í3eW6kr5Û·ÑhX8Þí3DäfÄ3ÉȆ÷È‹82†6kh1;ĵW+±'ä;…GÆ´ Ö–ŒB"2žË‰°> Wï“0ÒZ°Ø-‚°$´4seTK²ñ©( â‚ŠŠRNE ò|7‹ySÛäÝ•ù¾Õj¢À¡˜B îâñ GÆbÌ>@±—u]™Ñd"ÍòAáëz©Qm ±¼«áIN;ÆÂa»§ÍKC‘ `­{ŽèŒ:£%ŽÒ,l•‚0Æõ#ÌœXWЬ?"ÖಷÙ2g¥Ðàˆ>a,Û±Î"Ÿš@_ût›Þ¯d>X½´8;wÈzØŒáÄð”uš •ª;f=þB¥·4»Ð4Ùð÷•àóψ‡^,Ð aÑfÃm‰ í¼QëÁï"Á³‡WðÝ=;k²Y+EÊ"g ƒuÝ´u–l–ZÓÖúúMÒ<ÛT V œ·¨µ¿èƒt®§µUmX–ý+þ×[{¢1âÈuÔ‘=FSZ±ãÀkè:‚¢ŸºPÆ»ŽÎhœ¹ë‰|ð:ÀhO^§©³h ÃÂÚQców ²Ù©~ÔØZ»§ã?{ÛÅÏÞn;-7}…² ÑÄ™Øvü: ÚaþzÒ(œLV^u*aþú‘୪Λ¿Uo±Q•ô>pÄ¿‹€|¬1毻‡0«ï2Ý,=¬1毫íüu'9ˆr#Ì_×ÉÒó×K¡O’.Ö•RðT>‘¦¤Ï=þr¥wÊX\ g¤·¯l¿ À:T”)GR?ž¹ˆê³íd.ZC쇄úéÄÞ ¸|¸|¼MDd¶î-ÎÜíƒËæòé6‘X¬ß86&Ùã¤4 WÅf?ªØ‘ŒjÅ…ßI/›Á9k˜ý`óžE5Ì>|l bh˜}bú¨ä>ˆcÞ{üicœŒd0°#v ÃC‘’qd¢ÀSíß$ƒE:)f?ÔÞ‘ŒL2D1ºdø9kzí°dH1ºdHáK† – æË™C~ ‘ ‰‡¿Ý!RÌ·O— ÆÍlÛ“ŒL2¤]2¤cÀ½YXÉ,æÉ‡3CÉãO>°äQíN4”ôg_îu`W<’Ç…»÷æý]IÙ• pöS;á;…¨ b_èÓçðÄý›´Ü…üpMxãC•h+™^ T•ðå……=X ´~¡¯o=qÞ‘黀¬Õ~Ýà_:Gã–ªO²?Pޤm„¶ŠAãðÂóvƹŽÇTL,ÕÊÚ‡snprüÖ½çgUL©ŽMÃ=Åo,Øû8{³h©˜tƒ¬ü0žA.!ÑVŠ@AV—ÚgœŠ_oTLwþYšUÙ«˜R±3TL¼£Ë±½ Þ4,Z*†È‹ÑÞ!—·Ë‹Ñèż & •#x1ºxÞÜ‹Ñåè^Œ±*‰¼˜¾¼ŒàÅ€¯/.W‚Ü‹A¬5†Séã^LB íàÆTFJ‰ÆÂ´L¥ñ°ÐŽž!{¶â !>Ť,ºÏ‹€e{ãw-½Œ^®UÍSrÏ•|&Ôy){ÏyÑp;+M kå‹IßyI,0ÙA¡èóm€ôª]AÉÊòí8L]ü@è=é±Ôè©Í‡Û¤ûèÎ7©½ûè~†%ql§“ízà ̇GVv·ZÊG |úÍÎö ØÅJ=ýVæõÈO¿Ë›"ijŠáM°îþõâ¤éìe î„æ,}«åMƒÃpÍ“bÚ¶åM°ÊG/,oˆ•êÛŽn(‹üxãnâehÑC@ÏF]¼Gëjn“xÞñ&Xø˜ÞŒ­­œ}¬ÕxB–7;›7C=!7aõ&I9ÞF'ãÚt€`yS¤Út°®-À§ÛôöÂl(ß@`ÓÁ^+âT6 PÛtÂØôrrVÙoئËbl›.A§ˆø'Ût]['°é²ø>6] פÉlº,F·é>„µéœÄ¦+1¶MW¨W£ ÅÚt]Û6]‰ÓyZ ›®ú%Èlº£ÛtVo’4•¥<®7Ÿò±ÌYJ¨ }¦t{a¡W¡Ce«‚$ºy¢,\8F-åxïÚÖðHÍ»•„Ò»V¿Ò“N†?Þ¼kǦáßõ’Õ‰Å#˦>}ò‘%¾zÝ^–%±éP×½eS KÞwICǦZjé-›ú–M‰¥¯F¿vÛ…xwC?”ýŸ%G@§c.¤VxÙΈÔAL†M‰~Ú–!6­ÊÑÙÔ‡°l*)ŸDâ™Î½[MðwÚ‹5²¶@g]¬Ž-kVÚ‡b³‹*ò­ÞöL@¬Ž‘G*V;Ðçš²HZH0úUÒd—ØŽòÛã°#ÏCž×VÂÀµf´—€¾’Ø8Àܳô·¶jH2Ò("‡ë»g©·šŒˆðÚŸ°Þm]ñ‘²¯`Ñ¡¢Xk´…Ýo›Ð Ó,hÎéÏ‹î´þòìâo]–o½¤Óì¢>SÍ2¤fy=ΓèVÍò:N͆ŽÎ’0ã¨Y‡3²š…{OÍúp‡ð‚FÍú$#W³þÚáÉè&ëGk5ãyçU¶d%ëÄQäìXäõø› ÷z|ŒqÄQäã‹ãÀ^ÆG‘…Q4â(òÑÅÑßB;Œ"òzTñ½ŒÂëñWݬ›ÐÃõzž%Nàô(°…¾Ó“0s´® y6@Z:Ø)]UœhôÉS<u¢žvPU±T©ÆçûB•UºþN&”ãyœÒU°@ë+\‚ñ<€j ýQÞÛ¹:}öiÌkëU¢Ýå #‹ÌxëܹæEÿ­Ç´±îœ3€³ïMën…Ñ_ý:Èo`gc)Žû 4P)Nx@çý؉?J£ŸeqÂXŠáFZ’â1 uñl¢ßHKhpù–‹^<’,ŒŽ/`+WòCÊNµ_}Œ›Â-ÇF-ϳŒ)¨åp0ú#Fý8a¬À h.é…±RìxÏo’0Vj|a¬Ô÷°Œ•_áNîÇÆJÜ* (F.Œþ&ú­Ò4ÂXƒ \Ñ c]²ã¤IÂX—ã c]Ï6Óc]Ž/Œp'# c]fƒý·4ÂèSŒ\ýM´ûoÉ„±ÊÁýG^’ £ÁaÇ;gS„ì‚\Ænêe\aÄ;'fXÄ Ç€bÔÂ6Ño8N~ØÁˆHáUÊ>õÆ^ÇÍ‹-ÁÚì¢yÙ-WóþPòósÂÌS)(„óþ¥ýĆ<§S| ›ûöuŽø§ {k3®êäjÒ*êssÚg¼ VŸ@­ðº÷i’{_AX_ƒ$$€Y§è6qMXçq*ʇXñ®1í3—P¶¯“zûìø@õœpH…ùjé"½—ž9 »ñU#ˆ—¯w»ÖcôŒ v˜€ЌګÕÞµ0tÓPT¬ړù˜×"œÚ“9˜z×ܦ_‹°súÁ&¤PC"u²º:#Òq’°× ¡ê5د?j¯ØÂª ¹§åÔÞQVœúÍI¯e•Ãôóõz³#|NÉD:ˆx·-¼[Þ‡Ôh3öa¨æ¾ß^Ü„tãu¯¸™ÖNâÞ¹@7$µM«^óž„S¯àó[6KR¯ÕYŠzj‚«ÞAàÅ­àY¥Äª×‡Nâ#E½ú„¢ˆX[½ú[X‰ ÅÔp§^²j¬zõÍÉ3Z%z“a„FP䥴‰AÁ&ºìSVfÁeB#(Àè5‚N\<:qîÙd¯Ehï¥O°RøHu/í$u^”Zä*ábä·Ã¸ºÙé“Îî±Wº‹‹Ë“gØ[È ßð²WZœx•¸#‘,N"}ŠÄ¬“H}¢5%11ë$R‹*IÂÇaByßPذ[ûo˜Ì Â;!Mxúý ýè(:M…®Ç§Í!ýn “—ÎÒ"]s¹øÖ¿¦L·;Ííc¸´Ü$ŸäéÙÙQ¯mF ­ÝpW³(‹r¢5‘s¢*нVðrøÕÑa"i9üÎÚ,Ye{o+X•íÿöíÖdIp*»’´Ž¸ÓÑþ¢iƒ»Œ‡€P^&tõQÀ/ƒ·—‚Ÿò=æ¢V Ï®˜]<룲7•Ÿïð‚‡yÁƒYOŒ¦Ó”!‘‹ï*¯õ¡ÿÞõPV?ˆ`NÿiÖ›Õr=ôölì{lœ;þölðèiˆõ)ÁJ{j<«s¯‡äsëÙvŠg LðP^m­q)ƒ|´=¶0%ÚѤ§ÈŒSJÇgëÂw¸ýÔi²÷aø«ÁpAe-c_µ6ÛÛ˜½‡,W+ã0\ÍÞ¦5vzÇü¸ÿ4ÈAƒXCPQ‚¾¿™lŠ-AE}*)ƒ È– ôN¼5ç\­Š=Aï™ZŒ@P•‚.èY±UùèU *ûÖ”e34{‚îŸÁ<TøåeUk®ã Zr(ò¤ïïÕ‡”¨öp€1ëö‰_­äž²‹UåTդꂚªºŸªº€T]´¨ªõªjªVjSrªVb|ªVªÔ6U˃x§j ¨šçe]&¨ÔZhRººM×r\Âr…0fý`ìj¥÷¤}'¬ö›Ö|cËs^"ÊR„h/ߣf ©dlÙÊĵÃRÓ’Í¥²Tû„,4|2Bz|BÉûê;R AFHQOHœûÅ2„iùÎx.k(‘¤_ì.åI§Þ˜SYľge¢W„±“-Õ«»`ד©YæšdÔ,óñ©Y暎šò5 ð=“©©9Ž9ɨ©ùøÔÔGœŽše‹7OxGÉÔ¬ H͆ŒšU1>5«R³9ð&ÿ^¼Y ¾“Q³ãS³8x?èMþô¦ÑàšdzS`Ìö½¯’^„Izb¥ñ^xá'¦Ÿš¨æP›¶‚(›õó·¡AÎ,.5`l¬›ãÅÒ‹odËkˆõл"vúŒXØs9l¾moؾ Š+Òîž6/Mú¤²VG]·³{šïH Ú ã,æëö¥¨ÄÞn«É,Ê©îîÀåCQFŽus·›/×í[ƒ1e£Á¹_n›Ån/£,º ÓÕ®¹‘å]6 Ë—µ¬˜ ¡l›Çmóòòz݈¨.)ä¦_iMën°…ãfÞ¬—‹öDü˜n`WßÁ_¾LßWÿËÿ2ävendstream endobj 22 0 obj << /Author (legendre) /Creator (BBEdit Lite) /CreationDate (D:20051128165431-05'00') /ModDate (D:20051128165431-05'00') /Producer (Mac OS X 10.4.3 Quartz PDFContext) /Title (Varpart2-3 procedures \(65%\).txt) >> endobj 23 0 obj [/ICCBased 27 0 R] endobj 24 0 obj << /Type /Font /Subtype /TrueType /BaseFont /FFYBXK#2BMonaco /FontDescriptor 28 0 R /Widths 29 0 R /FirstChar 32 /LastChar 124 /Encoding /MacRomanEncoding >> endobj 25 0 obj << /Type /Font /Subtype /TrueType /BaseFont /ZBLSFD#2BMonaco /FontDescriptor 30 0 R /Widths 31 0 R /FirstChar 33 /LastChar 34 /ToUnicode 32 0 R >> endobj 26 0 obj 7226 endobj 27 0 obj << /Length 33 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream xÚ}’OHQÇ¿³%B¬e&RðN¶Wí`ŒÝõoʶ¬k¦²Î¾ÙÞÌn%Bˆ.AÖ1ºXÑI:†‚b]"è(‚—í73»îˆÚƒ7ï3¿ÿ¿ß{@](mšz€yÃÉþ(»;>Áê7P‡A+­Xf$‘v™lqdí}…䜛áãõÿ] ‚U€Æ¬ÇמöxÀáû¶iO:¬äÒb“¸M¤’1âWÄg³>žöq†[ ñ2ñMÅ'"()Y'æ±ld4ƒä—‰»2–’'&ßÀSg^™öÐ}8õ¹&›°€åwÀ¥Öš,Ô \V:k²Ý¤;©iÝR;;\‘Œu?ÊåÝV þ°ÿ¼\þûº\ÞC9¾u¥(J•IÒÀëÃ]ýÜàBS˜s_ QP5ûFz¼Úë׋Gõ%«t{3qW°D÷0vz ¼ü \}\ø$€Ôu¡ºmþÀÍ+˜…–ÍÙ¬C–;XØ9:Y„^g±BÞ,Ú\°ACioci]g®©Å·¸(ñL;òz±Úï9ÚAnŒŽÐIó ¨Üê­°4“I÷ÐÝ x#Ã{zwA¼¨j}ƒÎ…Ðþ¤Š¾Q¥óš=˜ò8Ðmèñá Ã(Äo{1±cÚÑd5¾Ué­ÊgÒ·t¶üÆlaȱi"ßÐ\.5æ±”šËÅâ^Å8tph0èk€!‰~D† TÒhd¡‘”»6‚ØÂì±–:>f¤ß&Ÿm×çŠäíxÝA4Ž…¶ƒLþ&ÿ–·ä%ù­ük±¥ªiÄ”¦¬?ûCqÌÕ¸m¥&/¾By#¤Õ‘%iþ 'ËW©¯:ÕXl©Errð'ñ=_—Ü—)Œi7Ò¬›©äê,úF|ÙNšٮͯ6×rm^™Ü ®ÍšUáHWü «Ãÿ5;¿?ÿͰhendstream endobj 28 0 obj << /Type /FontDescriptor /Ascent 1000 /CapHeight 769 /Descent -250 /Flags 33 /FontBBox [ -144 -422 748 1223] /FontName /FFYBXK#2BMonaco /ItalicAngle 0 /StemV 0 /Leading 83 /MaxWidth 600 /XHeight 553 /FontFile2 34 0 R >> endobj 29 0 obj [ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] endobj 30 0 obj << /Type /FontDescriptor /Ascent 1000 /CapHeight 769 /Descent -250 /Flags 5 /FontBBox [ -144 -422 748 1223] /FontName /ZBLSFD#2BMonaco /ItalicAngle 0 /StemV 0 /Leading 83 /MaxWidth 600 /XHeight 553 /FontFile2 35 0 R >> endobj 31 0 obj [ 600 600] endobj 32 0 obj << /Length 36 0 R /Filter /FlateDecode >> stream xÚ]PAjÃ0¼ë{LA¶(9AIøÐ6ÄídimõJÈòÁ¿$»)ô0‚Ù™YFËÏí¥%ß‚ÓF,™€³[‚Fèq´ÄjÆê¸³òêIyÆS¸[çˆSKƒƒ¦aüžä9†oÆõø’gŸÁ`°4ÂáûÜ•I·xÿƒR„ŠI ‡´î]ù5!ð=¶&é6®Ç”ús|­A^o•´38{¥1(‘5U%›ëU2$óO[ v§¨åQ+™¨;N¯%þkÌ›òŸ õB*WÎRZå>–ðy9ï|N<”sUendstream endobj 33 0 obj 706 endobj 34 0 obj << /Length 37 0 R /Length1 19156 /Filter /FlateDecode >> stream xÚ| `EöwUõ=gÏLæN23™Ü!I€@HÈA¹A#áw$œ Ñ+Ê©Q9A á0P”UÖvWýœ„3p</j>#>Ò‹ `’˜R¦‘9ÍúØL¶Š}ˆ¯}¥Îi3µ5€låÀ†¡*4F±= ¦m†ç#àŠ§B_£ð6¼Oq’N$‹ô#I©&¿1QÌ0f83Ž]%4ª)êõZ›ÐVÖöLÛ 0R²+Â× r—’•²SO¤},š€&¡@ý|´¨ßt…ïáû|Ï ªËèŸ@×o@™£ S×è‰'àyx nÄGð»ø,þ_Àßãk¤?ÙDö£ä2#23˜¹Ì*fsšù‚ù¾×˜›À›ÄŽàî¾É©›Ô?©?µýf-Æ6U£eh-Ú 3ÖŒÞA'ÑYô˜‡K0†ËèÌ`3–a .EÎÅÝà[„Ëñ<OÁÕ0šZ¼¯Ãõ0¦F|Æô3ላ”“Udy™œ#_Ø’˜"˜‹R×6挥¾E0'Õì2¶ŽÝΞæærÿàea™ð5èÆit G·ö mÂq瘥FàÐô,HÀmÆf =ìIÔ ãóáÙ8—’.è<ö£û‰¯Ä'ð@G´yÄ2"ñiýFMø ©à6£ë¤"äû,‰…ž–ƒo»ñíÍz&þæyuóÈÍÁ¡zNù[€V¢¿1O³>´=‚²”ÎÙY™éÒRS’“âƒq¿/6&Úëq»œ{”Íj‘Í&£A¯“DçX†`Ô©$XZéoH¬l`ƒ}û¦Óóà8¸0î¶ • ~¸Tzg›¥ÖÌgKZNú·–J¸¥ÒÑËþTÞÉ_ô7œ)ú›ð˜»GAyuqp´¿¡U+ÐÊl¢vb„“@î𗸦ûp¥¿¤¡tþ”º’Êbèï°,Ô¥wB‡Ø@=í¹õ·hŠ 2Ú¢¤Á,.ip‹µ:&¡dÜĆÁw*)ö£Ó;5à>‚ãP°wƒ9-r»ÖsƒÐ§ï]û§RÐJÿ¾NoÕ­j’ÑøÊ4ÃÄàÄq÷Žj`Ʀ°¤58ƒÅ Î…-®ôNMxç°Q RŸ&Œ†:Œ4% LJU°„^©œæo‚½ƒSê¦Uç=u hÈ‚@£Ç£“æ)ñ×  4yƒ£ÇGï‹BuCìw+~÷5é»÷ã§÷JïEó×âpþí£áëyK¯µ;ñäý‡tðÓûÁÐüü0€QA7z¨ê†ê&tƒfðò©À‘Ê:¹;å,— ýu¿ ˜Ì`ë?î¼2.r…OA´H§¼Cl ¾½Ü–Öš 3³T“C+Ô.ä¥wšßà ÖÈþ/° wîž ÌèÄ­lRÐx8iXr÷¨ð¹÷6"%3mt©¤5oµ×؇Ӛ%í5·WA&h0ÁÞ &vü™e‡­dJ÷ìøßTWiõ¾X £|5ø¢D‘>³\ Cšð6Å ÐDÇ 1 òHC°[lÆ0F®´ò•‚¡‚òUš¡¢9T¢‡ì¬l K€©%’sÔ!øU^Þp#:ŒgÊb—Ãó¼à%Uª ¶z†5{À,˜<‚ęܢŽ39ôFÎd7ȬÙn°`«Ý…lvƒÙz²¹E/²y„hlu‹1ØêÐDzf‡ÞÇšÝ"ËyÕ0鎫ÝnÝî«Ç#`k ²5áGÚÍlŒ‰ƒ’’ ôzQˆÇív8ì:³©À>öM6üÙƒQ0Öãö/{Õ•æR]ZÜW \r¨‚æÈäÂ7|F„‡\FÚ"ùÄŠ ͰŚŸO“ùß>ÙY¶¼[ /`Ëahʱ™€=Àm4u Øe'îWÿŒ‡Ï{zö.|úÁ]TãuËìusÕïï_7³ »f©ÿƒ·­Âõ+ñµ„¦•jÕ*µo£ ®ƒO'mgÙ÷ùB@=Nàuøøo•ÜS ”!8ÇÆÙc±E0Ç"'†’Q¥Ì@v,N¦Å¢œ(¥$A)еÆ"Y„ƒƒb±I‡,F,ê‡Î±É±85(-òÁí…¥¸wÃãór»8ãx{”#§s—¼ÜD&Nû¿ÔáîOíØñÔS;w>uwyù݃û÷oÙÎ&ìPO¬|µéÑ%»žt×½…½ÇôçåÏ÷¾òÙg¯ìý|QýŒêúúêõ× ùê›§?Ü~ì³3¯¿úií¦ù>\÷Ȥç4ÜÞ>q€-òÑ»Jç»D»ÃÌÌ  ìÎb\\ 33Ù*Šq»S¢£) fÐuM`ôѼޥÖû›pŽbèt¿þo¹÷óîºšoÉÏtµ¢"×ÖüLk¾5…)#m·èÄ Ó‰'VȦaîwÉë’”!YXΘ؅ÍEÉr"0ÑÔ)eHbIך%%§à®Ë„ŠLIDTÄoqx)|L8Ÿ''dà¼ÜBœ£±TÀ…¤'Ρ%[BMbPã¯Ó!៙YþXó©z[‡ ¿wJ]ó¬F<Þ,ñÍÑ¥?þz·jþÐQwUº x®:ýWk{?öÈ”~ÿ<Š…–ÉûT4T®««:½B½«³òrTvfï_Wªe¾*Û]Ü«¢æîôŠ©ºÿsû<ŸAí ÆGíY aKÑã«„ ÌÜG86óãOCùùÀµì, zGö<6g¾†h££ê*6 â R”T^Çëy3/Ûuv¹D_bMFó:d±I ¢lI@Vq¡q(ë¶v«L‰6­z®ÀñˆäåZQ‚g‰=ÊÊ:Ù,õuÙ… €ígÕöîÅégÕU^ŸûñG|;­›mÿRÿì3õñFi4 -0‹6žb%CÒIzÉ,ÉG.×—›Gü(ý(³A”Œ0Æe…-DnëŒqá1…î“EV{A\^—xk^.‰OÚ‚í¸öÂu™úÃYœþÊ+êGgùj«ú½šøãj¢ú½¥>êŸøÁÏ>ÃþËãÙNÖ²É Ïô’R*c¤X–Yg‘0„§fÏ'[9ά7’le½ÙÄ–µôúD#²TÙ**¸ná bL†&œwP’,É"€Ð¼Cƒ¯x—ˆ]m7£àc®Ü„Sg>M𤛍¤ƒ¹¥…{¶Cô$?Û¸¤tÜ•cr˜§ 6"ØÕ‹8G=S½ö£¸O}çÞ§~é!kñ=o¼¸aÓÖcø^uû±­›6¼ø†ºèÖ|Kmi¢¥«BB æ«XªÒ11[ÅäOé`[P‘–¯íKÐ&Þ’ca—«™›ÕL|v3©çø¬š©Éè.u “€ŸIŠÐX}?Nï¹ ¦Ù¢ÛÚ¹û4ÊÐuë*²y…$O³^šÚ™ ¾ýÓ+Fï5laåu`­­¬zÀÔ‚’±O-¾ÿí:*CHó9zàQ 8l<‡Üì±½´ëù”9 DRÀ~‚¤úz:®·ÛÎ2v½nÅÀ× ½tã6´§USîÖ(x2©Oå¸Þ½ÇUfVö);¶¸OeX~`ÿ^yaP‘â!ÇX5«ˆ?bõ„e<q³MxоMš£…iS Nd€²äwø'ØîÏ_gÎïˤË´—2è{¹æßì(G)»ÜF· ¬+žt:‰Y8‹ôzŠÅX!åÂ@q¾›Ü#Œ'àqdšp¿8Õ0Å1Ï& „EâZ²™Ý,®Õí4í~;úcñœîÃ߬ŸDÿ$^Ô]¯D§·w€È4ÃdãdÓQÓ~Ë~×Qï;VSPC«Óå„6Fë‘{#ÎÓ›7jg¶˜!ŒÇoò°„%·ïÀg+´rÐjqæk ù 1#ÍÔá+³\n¼\L%v N¹œflT°ÉhÑÛ*Q4ë©D.Ñ£ ‘lÕÉ•aOˆÓÀVSs½Ü ª€¸Ï"£€vd hÆK˜ãX°ÙVK.™„%ìP/©¿ª×Ôï±3‰¸sP^zU$ C?¤Õ”¼ñ<_¨öQW¨©}ð1¼/ÀÇn,fúUôRW«zm òÍÆ~ý ˜dž§¶td2à:#zD)Òañb/ñ2^‚dRÊààåx#ÞHvâä*gáfò<ƒY¶X c1#°:c½Á k‹ö‹Òx#ͱ@À4,:ˆX̺MÍØááUgA‹¦u tEÀÁˆ¬ Y òºtͱ°Ê#݆=Wwþ…f<ïæðzöÕ>÷eïªXw}¥&ëh=Œ[9 ¢#ÊÐ)%z·‹IäùD!Q,µõ Œ´L‹ž3-všoF`÷ÿ€°À[]³0v¡oA`“ë™è—bOz¿—¼nÑm•8.Îæ0ù%މ‹öèMMøè~ŒkÂG=ÂýÏRäI€óÀë¶¥Ø?z]X­Z4‘¸Ò&§•š30s(œegPÈN·ÁèJ0:õ 6¸M ¦NyéR˜èŠÍÖ/¥žzæX Úi&p`•›Ã»l>ÍÿyÉóóWO{`qhÈ‚÷&<Ü0»òžž\ÚÓ{ãÑ‘3——N¬ö»ì(H´ó¾©}eÖ}÷î}øôè[àS":«Ì)·Œôˆ›f9Åž1ž ~Æž3~üÑx|1¬ˆ)—ë.äšú %ö1QÓÑDûCè!až}ž»-³/s?‹žÖÛ÷ íöíî&ñô>e?Ï·_â. ±< )ÆawÇpÅÇHö(§! ðñ€$Å—Y¡ÐèäÈC¼Ñ<Ä3Ÿð$ë›ðØ×íK‘;©¡WZ4»v‚ó­-Q®¢ˆ“ NdϪèš`^¸ŒñÉñkÈ&ü7 Ä%>uq׳§þ¦þ:ùÉ·_ýÃÚo¼ñö~6û™ueê±6TþZô‰¹GÖ®k®mú¸åûʾ|rZs¿ä¹Ï?§¶8±OÈÚÐhÉ$Å÷¥?cø»|lÄϰëŒÄ`4ާÉ21ö!{Dq"˳ÎÀ4žÓ™b6ežø´@þ¸ ä,R¢Š¨ïqœœÆ.’?W1{š= â°<¬©…±`òv¨š¬=‚}ê×GÔܸ™9~³p³: $»B£Â˜æyŒÑƒê”Ü|}{ ©aêÎãJ°wr•Ê#äéæ…æ…®:s½y§¸Ç¼ÓqH8i¿n–õfÑMd›§ ;ÀqFÌú‘ý³6:SN£‘0L™sˆä‰f¹ñ-5»½U ’ZçÃh€6TÓÕj‰ÌP…M# Ç`>Ø`\R5adÆŽ2U¡á~<O{Z½ºaÃ¥á=úåûÔ6µ‰I"ßïhó]ë†Wô{/£Çˆ#ž:EçaRÄw¸PzG)ïáìâíÛß4ÐÙ?¶ÜD4ÏCóðz´ïßáß?4\0X½æ4}š7Í—ïæ¸×7Õ<)a9û¾þ<9ÏþÍÜ’`F~·Í® ¥4ÓÿšŸøý:;•T™sÓ‹AÑó¢,ø…,¸|>}ÅüVýM=ŒßÅcñ2üvÆÑAê#êùЌч«ÿp裛þ¨ÉÉvåE '.´C)™nL7{išTË× µb­T+?Á?Ã?#<#n’O2çøsÂ%þ’ÅKgµÉ&2y 6Yo… 6™c¤£2Á gTH ¢/ˆÁãqycü?H'ëˆÎíÝΔ+`1¿©Ð|h]…°„Qa$ö¦j.˜ hDy´b-"]º*£ZÍ›±‰Ä`\TÞÜíÅî½³nžg¾è±>>8ebeöÊmÇrù§ýGÏ;R[¾øÏÙÙO¯ÞuhÝJ w,Ù²ã¡15•—»!êáú¡1hdژ̉üî¸3Î?yÿý7çÅN¿¡ßðoäo$N'¹’, žDobR>Sì-.)M(M,N*M+Íæ=,qXÒð´á™UÞªèi¾iÁªÄª¤éÉÕ)Ó&fÎÈ®î<=g®n–wVô¬ÄYI “kSj³k;׿,ÓÕe×›_2F‡ñarØó…üyçÏs.F_Œ¹˜}±óÕ´«™…^”lfÓ*—NåÑï0¢d’ë5“¬øØõó˲†ØÁÛEÌõæù&éçyNŠïHoëßñþ…œ“>4·J—l6ÆŽÜae¯ô?O•]¦ZÞ¨ãÂ:oÔt9˜ì¬N>\\Ü”‚‚Ñ“dSð¤€wâ÷ÐLk~&0Ù’_1 µCÅ[­*fÆÝ”Ë('¬ã`Éað÷·V9v…u{¿Å26ª/« 븺¶]Ç™nÓWÌûxÕ_q™š¯¾ Öª=3 ċܮÝtÿêCmÐtœ„ã¶V[CJV솫@£û}f©†aÌnW$$°Þ*‡G}g`Àü^Ðç߃¦ª#l€¹Ã>v9ãÔÖ#Sn}³‘Ìšð›‰pÈ# `V§ðcå«4~¹ÚªE\y4±Ëog ogœõõê6 ñ Ï@b@ü¨Z©$æ‹ùÒ;SÅVq Œ¬e‚UyÎíñF‹~«)Bdÿ̤&ü¶Ðs¼(±zD·2X¿~¨ó7«ÕRï¿¥6áãŠÎ‡°¬aAY<įûÓë ò–¯Ìo™5Ëñɡօ ]\—VJn(M´u¿°†PÐA™efL8ßÎ=üTô A…Ö¸ÞÃ\1òà‚ç¿úaSïeIúÞ½Çð¸98tæÃzÛÒ†N¹«tFfñ1¯?½¦¾øî~fOÊPÃ{ô6´ `µÝó _„ÜhµRð ‡Î Ùh–a–q¶û {P<#ýÈü(I¢ñ‚Á`Î×1î 9󉡎y¼¶Þíé¹6bè"p ŽdXÐè¼ê—ŒdOd, b¢ƒ±¥!Y‚CçLCVÁLÑkdÝN‹W¶ƒÁˆ§Ë&ñ9aÿÅÓ¥쮬òjÝ!õÏ/ï›ê^}aëƒï.\|âç^´öz/ý×ÏxÉÉ^MÛÕ·›©om­ s3ÏÖjXËŽæ(™o›ÿÎ~â.L?Y†Å+M+­$M4\@ö¾˜ QÎá×;íúxŒz:™'~¡«¿€PµFȉelb¢)M°&%9 Û8˜C²pQ·£Ñ˜«³ƒ.·ðÁ$ÐLk^nàõz\£þZûèeuçŠ3¯õµýÈF^Þ§>ûËwê Çö<™–/// ÇÎÀp¶Œ_BeJ2Ï%‰¢ †M"t¬k„ç…á-¦ž•`ÐnÝѵ·/Ëh© nQRáuù0 ¤é3<4 íçåÍ¡ŸëC]àyçáyx‡2öCtÎ5áEÆDDåââæ>}[ÿß Íåeg%صUŽÀÍæÓ{öðòõúðøCGšÐ %e•a#û¬aË®gw3;Ø=Æf#gH¡X—M±êõÖÂ7áZ%^¯G¢vE/,±˜R¦“<2czzM)#Ømî¹(2’ù¡ WÁ mŠ'ÂzVB¨­ \FÚ VN c¤@Ð’ƒ9I0Ú Nrân͇HBÇ57‡.õgyùƯÏ>ËJ¿]f®m{!Œ×€†ûr ©Jr³þ¯Qÿˆb‡“EG_ÆÐ×d" !¢5Ç/¾%q½ é锯€è\­ ²CQlD|¢¹(]¢œÀ'˜õÖ4ÅY ±E2¥!›`/장`ºt¤ùQÂRÙÑÜg ˆžÆüxnîfõûŸ†Œl|Ýôù’•e9I/$£ÑÉe‹·ÛhuË«Ád6Ç[ £AF%Yd3Äd4bÑ Êž3&iË“F<؈¯ÇÓ5âöŒÙvmTPܽRÌæ ÑÈ‹NRåÕ2€í+=t©’·0j£+!~ΩK´Û¬z{vrÀ¬(É’†ô«Å!¸ 1JÓ–¨oñÝÎB€"f; Æi=·¾÷ÖÔÒ‡æâ?^V«NcïØŠ¬­g7’µ¡j^ºkܘCO*¡4²vs=«—ÞÑØ÷åÑ»Œw¹Æ¸ªÌ s}5þ†âŸ/%êE³( qB0Ñ›àïÏŽæÆ'y'ùÉÁó²IÏqN)Èе˜X_´_ÇÑ>_¼U§3ø¢ :ÖÁD]PlÓ¬Ž| ƒ/(hš•É—´*Áõ¨®;Ç&;iÌ¢HÔÆd-0ÖȨä}ÓÓz{¹}¥X‹´pq ›ÀPN…#_MÀ2I<8›HÜ@¡šq„ãÞ-—O Ù0`ÚÓ“&«—ÿ…ÉÎú=/.ݺpìÀqCÚÔëê—÷¾xcvÑü’»Wƒ‹yá§×~Êz¥÷ã•cçeöÈÚüªêÓxØû ¨`±mÃAÌŒQb¼ Šq&ù‰´R¹Å·ÃüðÊ*5e0hÏRF°šÉV«\Õž=`rÀÞDâV;ªQ’¾2]Œº*^•~1qi¢>ß"éu)F£ÁãÄ$ÞðÍÑaDäÈ6¦ ÇžceNX=AÖbÎJ ‘d¢‹™Qp¸ÍØ£ [Ž%*‚m‰ Ã4ËâÓ}V³ºOóÒŸ{úï³yù&wj퀡û®0{oê¿ø¥vÆçØC×H/¯À¸EtR‰ß/|$|+2É(‰¤2I\Ÿ,.@pÔôsÄ \SÛ¥R`ˆaBR¬´Še˜x(pñ,Æ(B=¸œø!¼Á?€&ü¬Ò„ÂCÂáˆðƒ ?³¬ÌƳ¹ì\v;{€maEÖ-õØÞõ¬p U´VÐŪ°áíમX¤msB–¶ÂDw›VÈâ‰H(šƒéF›³+óÃq5îŒêûßÝ)‰—» &öÄs[n“=:¬<Ú•{”{V¿“{—ãx;¥.L¶+WÊ”²ý¥þº)üáqî]ò.wŽÿF¼J®I0õ<£ã0ÏJ"XIFÇ ¥X1­ÑÅCLÉ <Ï‚€é$ ø!êže}ÒXéIi«ôšÄI£ a¥Û@.=WDbÉ;6wWp:ötØðö­æßA çhAŒÉ_ðIuÒEœ‚³>R'áÓß«{˜4r1ô=q†Rož$ÓÃ>1è~F›ë=Ê–]Æ®ew°çð9á{|IÁp3fÎÌ/!K˜'¹'ù5d ³•ÛÊï$»yxÊx+f9L8ê3–xÅ Ïq ø êPsÈŸ™Þ¡MdÊÍ7Bµ½Œ ê*¶Ž¯ý.R,¼ †!Xæ¹YAß×(ÄrÉÐÔ-ÎêtKõäÈ‚'$mžÁ)x“ZKªÕUÂ×›Á}ÔUÌ4í9]•hxÇÇ Af™L¬› ³ýB[dë¤@ÓêŽDúÏ£f„™vó RZËW_óÕó/oûüIm_³÷±Õ( ¢… ʽ'í…+ƒž`w{ÞÎùX£„}`D»Ã«wxaL²Õê³ÚlÉ®Xs‰+¨× 6«.¶;£G6‡5Îj›êðÉæy5VlõÄyÓkx̻߶ Y¹ötmC·€öü°®‰‹:4òÃNÑãŽéOŒa½ÙÈ-ySQ4› HÍ•AK—¢~Ã(VŸ?Ž-g}Ä^Žýv £¥ÞQÈ­¹Jm7â +N‡ì—3˜ÈXèâQd×vÁðŸ&®úrݵ×ó¦Ëþ#©ÇÆ Ã÷^\4xä_n¬úÃ?¯ÇÙûô„¹ùÃéÅ÷âZü¥G½zqçîÊËÕm—Ù{øÈ‚bÐ1¥ÿÜ^ç§ÎK\«ðwìÖ~é„DXÊOÆ› Ú¬ˆñÚõ.›Œ¼ÝÁ¬³#õ.]ŸÅæ“3ÍÏ›‰Ù›±ø®Ð˜GE¨€zQ„M‘õrÃC¹ä€-Ö•‚=¹9oö¿q)„'{˹hb-G1ÖÿäŽìsšKJL$éÆ4ö‡m¸lÄW}µþÚë¹3dssÕðÝß.<ò,3^cúe?ðfW5àÁÒ7/íjËòvµ2ˆ¯]h‹2p¢~®~kÚ¡?ââ±b£|Èv ê}æ}ñ|Þ |Ö¡CÊÅÏç˜åÜFn#ÿ÷Ž»Ä]ãÅÏøEò'oâžáÉgü·<˜ý:n°G<ÂÞƒPä¦ ‰¼N v.Š_Ç3<à ‚Ï*‚rÄã.XY†•ðWËÐk ™Ž‰Î@‰Ñù0ŠAŸùþß+è.¨E¦1±³€)ªàï2—&KZ&B„7›ªúì \1k6 pØr¦™¸¯…¾#‰m(ô5økáB7B»È¨Ð.Í-~ÿhP%€4V£0«ÅÌw€o}xš‰¾D r‹M¸û¾Oo‰’üù<§Æ¦ƒåïªDÄ\ãæë´wÂïÕ¢@ 5ô oœ7؉éÄvŠëœ(L'š'ÊÓ=Ó½ÓƒÓãç sŹæ¹r­§Ö[¬_&,—™—Ék…µâZóZy‡°CÜëÙ|ÓófðŒçož<×=׃iñ^Ã&ºó®î&XP>!&&:Ú¦³5჊¡¯ÅoÅŠÏÌÚ„Ï5F÷¡×}%¯?+Ñxf4ަ}ITì Š“8à0:Væ æ_­˜5« `~h¾¬•æ‡\([Ñ%:™¾õB×Á;T!*|·©”´uqKٶˋ˜Ø«ï¤m†x{î…›»;sæå±mh[íÃó &=Üá¡›ÈûJâ·6…Ö“ëërW† ûÍh>öÉv{`q‹L”ÝÒRo7茟N¯¯‘ÖHDò8‰=bÿݵ¶ÛYÅs¢,³±I²„-AZÄXm,gc-圕‹*G¶¨;-úí‘íÛ7^ì1lÅ•¥OO}ù·ÿ°#SÍìÑìVFn ϲϊtìI|’œdOr§„Sâ)Ý)ý)ã)Ó)ù”å¤ídÔIÇIg+nåZ„ýM|“û—ð/½««h ò‚!ˆôæô K·=½†ÁŒÛ5pò¢}£ÈNÅN£Þ G¬G(iÒ¤3¤Ò7wSé;¼àYX«†"˜’â(.ipÙ£PRä ºèD&_V¿ÂþË?a¿úÕOëÖohh¥jkÃÕÆ¶6u_ýwïþî»Óï}Gã u {ÐNñä åîÒ[ÒYòq ˜–¥®½®¿¸~àþ!|ã¼!ˆaD‡‘e´Ãå6²D)Xx@—zÙä~«Ù'Ë™–ç-ÄâöÝŠ2ä[a††/ÿ¼¤ÈSŒ‰)²Ô0æ—…—èNx©mÝfXþâ u oV“o‹4(&¨a‡5)%…΋€½Ù:À$€½£Y=E"^&„Ù½z‹Ë\BÃ/"1½Åd³_ÌŸ+ =bÿzËa³I›…È»í‘P…_Ój^nRb&IL oÀ¶¯‰;>ìp†ÑÑ®šë#WׯÄÌQ–~Ø¥ë'?í¾éÅùË»ç/]üJié—¿|Úã~=î)N÷û3=9w—¯kÌÝÝ{haA||fFQyùÌ§Ž„ýR%Ìi/î8r¡ZÅV‡VpÏ¢õÜˈs‹ˆqIcÎ?¨“¥D³® oTtŽ £GSý5ádzÑê3ßù軥îƒo[1¿RA_Öþ'§%P7ÅÚ£¹;kÍF6Þ‘Â*ˆ#Ú•ó"/-Óˆ'Á±½ßuÞñ ô Ñfü³jV¦÷[±>½«}LC>^«…õj¯3s‡‡éyèéÌV€Ÿ}ZÉ=-|a#>ÅÂkžÖzÞVo'>Œß¤kNƒÑ§×é2¥‡¥­#¯}%btåoÛ¾._TpË×Ò¥yêkõµè÷|-K}-þw_‹AÕÚ ,Úwéja;7ùëýã·)àk³Æ]ÎVÜØöK]ÝÔ=×HMhxÛëÉJÔ¾V´ñh»’²„YÃ<Ï\b®3\I¦àÉÜ.À€ßp×ÐUN9‰' }ù5µ­R’(ú¸"Ÿ•^äxÞ§½éÇs,KæÁÌ ‚YžkÆ b°¢˜Áüa7`»…%o-È·þ–ã ßj3^·%¼ê}?ŒW4«N¶âæ*fîmṊzš€ú@ÙÒþÿ䬀$lƒÕ­s½ÖD)ŘlÊ7–Ç'á d†~ŠažMC°-Ç›ø æwÌ—¸Kü7¦oÌ¿q¿ñ¿š~5lj&Ñ\JJ™OuŸéÏÖ"ɬÑ@xAoà0o3¿Ë+Ó¥b£‰E¶™†‡ ÄÐbòk_oÀ6_ÙLô0¸¯%z¥b~kÅÍP¨Õª›YjiÝ™™=3]Ôw„-‚Fz“csvµ…LI ÌéC¯L‹ö6¾t*èœþäÁW?ã|ÍlEhÔsÏÑ—éñÆ6òÁs[BY”7ÝèðFN*«)·1™KáS„T1_˜D&3“Ù9ÌvÙMvs/ó/ MÜþ°pŠûœûVÿ«pUï ryÜd2‰{Œ,ãvrŸ‘ïDé¿m]ø"[¾[[|xëB×¾u!yŒ¯iû”Ù²ø¿Û± ØâŽ ógøuuÒPô~¤Öâ3?©{I?¥>©¡ø˜&~5C“w+úDYóz½Œ>cXÔFO :fû÷„uÚÄlä7 /3{Ù—¹&æ0{˜;Åžâγç9»RSÊ@†X­¬ÁjŠè’Â[YÖgåè›àˆ±F”Áª3%³•§„<.âqc¹™Ü“Çy¢ ˆ2Á6`c„ù»6Z#tË“‹üsÝÉ ÿÞSOˆ‘ªðÚw»‚ïR⮤Kèæ\GQ=ñë‰á}”ŽY5וÎfÝlfJoüS}ýsóvWic/úÿ ö¶³¤IûÿŸbf>¢o1tƒƒ]õñ­ ŽðK€¹!öm™|õokú§ý¶Ãëg,k.øƒµ§Ÿ7÷¥;;rÜ_ûw)òkÚ}"RÚÞQÏ·mãR;jÚ?}Ø3h-K£ò3¨  '|rš¶@ڮû ¿ùÛ"íi›õž‚”i?)rÏòÈ}oGÚ~i>¤úp?è<¤Å"}l‰ô±8Ò?-çÂý ïéwu¤ïÙôR¤Lû|ÒH "Ï£×FFî¡m®C¢4TBz2òŒ(HÝ ùÙ3ÄüèßàWÉ òù3ã`žfÞ`.³:6ƒ½—‹ç–ðQü!AŠÑâ&išÎ¤ë«›­»®Ÿ¡ßÀ:þ`¸d|Ú”kšhzËÜÝ|HŽ—GÉ[2,oX»XÛÛvE͈ú»Ýoß`?í˜ëøÊyŸóŸ®Å®OÝoy’=<ªwU´)ú¹è£Ú,õAw! ¤ÿ› –V¦¿§!|ÇuéÁÚÌZ#sÉ##B¥¥£{êŸ6`æýã&Ì ÿ|Úö£zô{Ÿ>Ú»©üÿÅ/„¸‘GûUäGqÚ¯~¤ L”rnû]ú«…HAŨ•¢2ÔT¾`á]0úAh0º ACÑ0í7F¢Q`Æ {нh¬ÈøðÀ×2^›ÌfNÏ\Ÿ5ýƒé¬¿<Ïì™Õóƒžö¼Ü“kÂÓÓ»øŽá_ðUp¨>|·4Æù÷òâ9À€ËÚ±ÏE5–@ú ‹üp\é2$ †c$‚VœbgßÝ¢ÝgÔçø>Ç'‰Ù>†dûšðÛ‡âݾ· 5áÌF-;N³^Fü&>‚–³á#"†ühäüHc÷¥¾£¸ }øp£/îjjL\ ÙëÝ»Aå!¨ ÷lôõÓýø€Öö@c|4Ú×Ooi8´Ô'*GðNª¾a’›pjczº¯—Ç¡ñ8î DòXdñ!ßE_Ðw¡{‹¯ï«`¹ï h}8Xäk vñí€òöô=¾mC ¾Ñ÷âx-{!œm 6aÈž 6Ñnêƒ%¾áâò`ßýá6ÂÙÐðý}ÃõeÁ2_Ÿ`“WzµŠ”ñM8¡Ñ—n¾˜@3Eï‹ öñ Åhç=|Ã]’KZó€°¦RX3HX£k …5Ùš,aMš°&UX+D‰VQ0`u¢(ò"+Ò7½¢šÚ¾RÒ4ÂË4ãYzdµ²Lÿ7L“xL_B È^c”?ª¤²ØuÌÛòÕŽùE®"k¡%¿´øw•‘cÚ­ëV÷¼à(0}àh<$ø¾|å­ê?jÖh5khÍšï…5áWLÆþCG5¼3º¡3-´ÅŒîßðÜPÿ½£ã]xgIñaüÍF:ÌlÇ»J†ÐëÌöâÑÍàa» J§m¶ùh3äc¶ÒfÀÒp»xüm—C3hçVP¼Ö.Þ­ÜÖnßx_Iñ>ŸOkãTÐx­Íxg¸n3$Ú¤§km:/AC´6C:/ц5Nk B“îA­ >‹‚Z“ >«uÃà[m’ÂmL··1=þmò·MÚÿùSÕ{ÏEÓ×Óß–¨ –TAªlX9Š«aÉx¿ßôE‘H¬?a ÍÇU5, V7Lû÷õ\ÿ;ÕëiuÏ`ñ>´¾dب}ë•ªâÆžJÏ’à¸âÑû3œ|dzžèxÖÀÁ¿ÓÙ`ÚÙ@ú¬ŒÉ¿S=™VgÐgM¦ÏšLŸ•¡dhÏ*™:´÷£zÎÜysæÒ|΄þgæSendstream endobj 35 0 obj << /Length 38 0 R /Length1 4236 /Filter /FlateDecode >> stream xÚ…V T×¾÷ÍìÎþ,ˆ²€8³?X@M8Š «ì‚шš@šœì‚+D]%IL«bª5Òn±ZòsRÌ/i3,Æ.jcÓ$’ÚÄôä4Æö­æÇžxjzÔc¢ìô¾YÄØÚvÞ¾¹ïÞû½wÿÞÎ{€0ÚAWCÀ× ±PJ’?POihkUk~äy³'¯4¯ki5¡‡øtâ³›ô7?´gÉ â«,E$Càñðˆ¬0ލEF2k%(VäSÏïÀ8Fý§‘Jã”5é`H‚7hæpíéýÔ*àÔz`ˆz)ÀUxØs‰8~—q€Æ Ú À^Âô‘ý<Ø„‰0£B’'™6’n‚¼û#nˆƒYpk<sáþHÚ{a#<Ýð¼‚ñèÂr â;Ædó >€ÇÄ!ã%²£@>yµÛôå0a–à “4Ò ¿À°Ð*v Æ£F‡ñ!$’f ÉWQ›ÌöŸà8‹eCB¯0y-rÚ¨1ZŒMFØ8ÉÅÐjú±ƒlôÂ>3 Gàoç.üZð }b¹Xm8F²`PŽUpR °î„a=vdaÐ*t }Âp\8Eí²p•2 ˆYâ–¥W-‘]‘÷"ÿ0Þ¢ªÝB¾5B¶ÂðUl?üÞcðÕáïäÃy¸ˆŽGù`'/fâ­8‹Z).Ä;±›0@Þü·àì!ŸB8D>}Í,Ìβ.¶ƒ½Ì>e§È§,¡”jQN~õ WÈ—¹ÔJ©&q«Ø!î‡,­–¯¬6i«tŠþCð:†ï>}Ð+&?Ÿ¢*…(C}ðKÚÌŠ­>ñ8Gþ)ø NÆrV'P…µ,;ñm¬dS™YG|XéŸ!ãQv¯åIø–p c´¿±)´Ò6ÚÁ½W¾¸Ú#¤_=Ù*>gdº¹².•éÖ2ZZ½Ÿj®° ê½9cVh+|÷Ôê‚¯Ž›ˆÏÑ“4·žôÈ»37ŒÏ/«ÕcÊÂËj!ÅhïOnw»ëF‘ž®ôg„ÖYF¹ÏßQN¹ê\e½œóuñtÙóÉ>wš ůy¸Ä»JÕc´ùZSÇ*/e>¥C‡ê ŽPJŠk>i)µcY­æÐKSµ:Ÿ{r"tToHv©É7jœ¹ƒöMs”¸Aç<ç%Ûáà…ë » ž½}im”W¡>5®üœ:y¹æÐ5ÍÄå\Ó~M3:ݫўÜkÂu9sô7Þ6i‚§©HÇIÿCí7õ¤côµ!@gµx\1’5 EKšÀÂØëJ c>V”ÒH‰±XÓ&Ëû1ì9•¶ Å‹‡‹+m—8ÒbÛpñ0M/˜†ñÉïÙìÓ‘jüÕ¶óÊd0íUÐf›¥•Nhu% ô-Ó,˜ ²´Zߣ/ÒÇ–€5&ŒoºÆIr¬`d¢ÅbíY­äÈn0~ N͵çØ.ã¶mÔŠ‹ãf“?ÃÅ—’/|fßž—#o´½½]̳›ƒépb ¦1ÇmâÜáöù•ÃÂr¦ü:Œtôõôôð›ML¤K|Ÿî)±°Ù•eµZ$ EAc‘|HK°Z%†È©Åj¡3.¥0>çJ CÂI ÈVkœœ2FLŽ»µgëŒíóä„Ùù I³éöüÅçâi°Ý’—3Ž»g!÷ˆ"÷úlÛ‘í6™œE ¥¬ŒtLÔØOz"Ÿüt&NÅÜŠz"]BgáÎÀÕãVýIºŒøÌ¬”c0ëN´»þ{÷/¾H…3?õoö;“Féµ(*#g Q"tƈG#'Œ^Kö¨æÚ#ŠGá êÔcx'ýÕà ¿mšhî Û•TaF70̾¤;£y;¤ž0²¦ÆÜ=ÿŽšrwÎâuk} ëLŸùc ð»çMñúÐåȯÜ\ùjÞ«bþêüî‚Õ¬þ ûüjk~IAÉ%–œ/±„qUÈY¨¼Žñ]ö¼€gBS•ªy©ØBNœ7ß^l…fêíÔORA¥wúyêTÑ[§ÎðkW’å3ESN…Et¥*'µ…Ê„ÔJ•°V¨¥·šô!åWõ&y6JžÑÂHäi-Ì—éÑ<Êöèp›6GYÅ4DIMtþ‚¨¾B«PÊ´°L’ùš©˜VÆŒrKfpâŠS¦jeŠƒzšÉÏQ–Ûcì1Á‡¤ W .‘‚.)8W N—‚R0G fKÁ)R¢œ Ûäqò9V–e«,ʌtËvåð—HŸ9"V‘¿Eslc`ÞRÍËPft£%ª‰t¶ÛÑØöø¤¶R{iÂÜøÙå¼#ïœëýúUm8HI_CWÇî“”³’²PâªE5¤ šš ×ÏJÁ¨Æž¦ï\TS«¿œV§Ïà#­n‘þtzOí ¾ˆÏ{܃ø'uµƒÂ|ÑSÍåÂ:à¯ÁÈØ‹''ö (Šð ‡QJ£¸t|ãfrB¸d¤›¸ôd×wpýõŠÇݯ(&&‰SŸÅÈQLµ“0N§‰™ÑÕ&¦zF»é–Ï„hAŠ4‚Ç@3!3—ð:&+Š÷Ø5̸Çþ3û¦˜œÿÿøç”l\ÝÍï1^Íã§îÕ;Ûè¾Ö^¯ªý«7Ž\p2½õ MœúüúFÍïÖWknµ¿¤û&ên®.ÑÜýÐíYVÛßíò»C%®æs× äUU6Þ`ëÇ£¶*«n²X_¬’ÛÊk¼‰º‘«ó¸­Fn«‘ÛÊså™¶<÷×ÌÿoQ·´®oiå´¥à_¨°V“endstream endobj 36 0 obj 229 endobj 37 0 obj 13955 endobj 38 0 obj 2934 endobj 19 0 obj << /XObject << /Im8 18 0 R >> /ProcSet [ /PDF ] >> endobj 45 0 obj << /Length 123 /Filter /FlateDecode >> stream xÚŒ± Ã0 Dw…~ÀÊÉ’«x/„Œý†BÉÿ/Q‚‡R$8ñîtBˆÊ`]w5é¹$Zƒ#È.ø:ÂÌ~¹Ã]SæE Ýßé‘è²ß”¨r«Õ©JábÞ>? W˜ÓRSv9{7Ÿv¾¡°kóÿK6ü6µendstream endobj 44 0 obj << /Type /Page /Contents 45 0 R /Resources 43 0 R /MediaBox [0 0 791.9981 611.9985] /Parent 8 0 R >> endobj 42 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./varpart4.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 46 0 R /Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] /BBox [0.00000000 0.00000000 792.00000000 612.00000000] /Resources << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 47 0 R >>/Font << /F1.0 48 0 R/F1.1 49 0 R>> >> /Length 50 0 R /Filter /FlateDecode >> stream xÚ½]Ms#7’½ãWÔNÄÆÊ¡§ð tD_Ö^Ÿ66<ëÞOH:P"%QæGŶÇÿ~"EV²HPôÅ-·ð(äË ‘øgõ×ꟕ¨+j&´®kF+ÍùÄkM%µœk­ª¶óêïÕºúË÷o´z|«êæÏÛãþßÿìÿJêêçï«z¨ríÔ´ú½bÕ—­ûI-ŒQ¬æ¼úòèÀê‰r­[à[¹iýÝõCZAWÕ~©ìþÛŠÖ’U”V_VÕ_~¤××êËSuõÓôy^}W}y­þëKcÅpÃdßp4läÄõV­Ó¦ Üç iZÓ‰Ònè¦7OMÛäb·Ûf|"­m7MöM³S§k÷=W*zØßaȦºþÃt¹ÚlçŸ~Únž·ÓÕjþ–ùx=áÚ¸>†XËéÃæÓOÓín±[lÖ‹õó;I5&Å„[#40lÓÕfý<™L>ýßÛ|û±6u€Èˆ+9Ñ5cЬzþ¶˜Í?ýmºýêìySLhÿO´±Î×íæq>ûæÜö;2Ú”„Ž j¦¦6ÄÝ•’ÿ~÷]ÊX昴t"™ÐOvÿÚµ§s­­‘ŠqÛŸÏ‘ãUWŒ²]¬wóÙ§¼©¥Ø„9?c²p˜Zÿým=[¤ Ò‰¦Ô„*÷¡Ih3y€r:Ñ”k ÎzóÛ|õ°Í%YË'VëZ¬®ež0ß\Ð:UŸ¤ùTó“ ¸è$]\Чºr‘ºßXyʵþw÷? ËêçøávÍPÿ[µ¢í–Þvhì\–ôð_CaØ;‡0¶¦Ò’qdüJî‡ýñs4µ˜zîm`­™n-u•D„ôµÅò—wíH.…„ÀH„UÜhO›mÄ-®uêÐ)€ò­‹¢9cÒòÑÃFÞ½°dþ¯¯ËézºÛlÿ-JdJ¦$6›î¦G²çcà O›³NTÙM–ó·ŽŠáœrS«Àp®[nnºãÅ™óK“8\ÎWë>ÀoG #qn¹Î÷Û&W4ê[G ¯",Ðûß»—”o04„±¢=÷°JJÜ­ ~óæçÓŸOz{økÇ»;¹ü½S—:*†êÜ”^úâd”× âÒqî‹úä‘cåØôâ7okGˆ«"ÇÌK»oÎOÊ1Ï÷K? ’71"è++ŽéŽ‚ÊxÌ‹#ÂÐ!ID9@b’ñ±LIÆ/¸$²]vz‰ LjzîÛĸM¬ô¯L°ªûŸo«‡ùqÈP6OÝÇ4€f !ž¶ÓG/Yß>E+Ö˜!cÀ¢ “ͨ„ìyœ.—óY‡Íbm©W~§Ïf·ÓûÄÕ09Ä/h„&“ ¦³ûø‚Ü~½Ÿœ‰ñÑrÑ—ªôÐò¿u?oæZŽ·ÞEãb=[ŸmVƒÚŽ$ìãR®‚A[lç;Ì5„£M§cª±1fðÄڙņ£BŸdï2)]µ Þô“ÞX­™•ŽÖÓvˆ5âÕöõüúùúåú×ëåõúzsŸu–ÓÐòpýx=»~º^\¿^¯®¿Þc^CoáèÝ]Ñ»ïzãÇ”æµL<în'´mötwÕÃnê~%Ñ>#ÊËÁë컦®ìÜÒ(—IÝå¢?<ÿ˜°(—!ñj q³yÞÌeÿ¹WÞerŽÐ—i£_z—ñ³êÕÍ©—IËÞeBÃî®Ø°Ë”Ðé]&Äñ.ÓC‡Kr']ã2 ¹è2‰Ë³ÆeBƒ:ûÖÉ{aTÙ*ÉeH|”Q6tº IÐ*8ì¼}tûÙÍdÿ±ã£ÌÐ-q.óà\fî\ÆÏ«H—!#¢LˆywÅ.Cr¢LÇe¼Ô]¦7†g£Lä¤k\&´*ÊeȈ(BtŽ’s¨©».Cò¢LÿðÓ»Œ©C—IÂŒ »Lr;kæñ«›Éç\†Œˆ2ˆw™Ç†ŠŸÝ¼úzßYämï’ÆeBÌ»+‘(ÌÈ— q¼Ëôưãª9Q¦…FP¢LGi6.c SŒ(céù(“™ëÀÛ'¡fÜe¹`ZdlÓØ ã°™Íû¹ür”]×Éß=å5…,¼õjíõtŽù C¬»+Ùó e)s³ÆäxPˆ³_Ú€CŠ¢×ைª× hØJ"xR][È™þ„éL>Ïê?½>JN’³Jóy‘§þ“h2ˆMJãm„6ðÞô"ƒáø  4 ¨÷™ûÚ#‚³ÍåÉ€@Ø^‡. ,Ú¬»+5L©‹6gOàb‘Áµ(†­t© @ýwdÀQÈÀ¹ka28!´É@ “AˆâÈ`vØ£[”%Û+ì§dbÝ]édâìÉR42hPË’AhØJc‘AÇ™ ‘ÐG… ˜(MLÛ·èÊ D¹=-y “€í½æ¥„XwW¦„8ûí\pHÑÈ A-K¡a+ƒEg*D@ÿ–2à²4œÚd€­ B”Ûý–ñSye`{=ý\‚ B¬»+[€ Bœ=€CŠF jY2 [Y,2è8S!2úϰ”P¥É@(à” B”Û}–Â,ìýN[ r³"=„XwW´.À!ÐþØ S46hP‡Ù 7Ñ ¡ƒÐ²­±ø ãO…ø0€cñÔçù`Dj|½ Ñ9Qè/ŒJ“žíuŽÈ^ ¼w¼BF øY Jq%ôó¥”ÑFÛ&//™¤:TRZ°ï&–£…½ë†æ­è¥ô©˜ké¾Nׯ^xÏ›L==¯Eÿ‘ãáÂuç|>õô¼bÊ\¸ÉÉ ƒåaÚ]nCÜ@Ò cÆÉGpÿX‚FYnPfˆf…¹A™à†Ð¼eXÜúUnèXÐæ ÚçmÁÃG|nÐ\Ü7ð%¸A p”à†èýü±47hûÜš·¢‹B¿*À  ŽÜÀ±¸ÁÖŹÁÖàñ>7„@‡ûà Êú+À Èô£¢7Øzè¢47Øú¸Á•p7„~U€:ãI7ø¼¨ÛñéÜЂèí7ì°ŸÎéÉòyßqäÄúg¾ø`ìí=dÜÐìtôä1×§"ñþ©§ÀœÓ–Ã0Aäo„yçmƒ†èØlæ®(JF£wý)¦L]ôn¤Ô°×GŽ ù{‡ï)èn°ëow Ü;¨ÂB@`ƒÓø‘¤íVÎExá~½Ûn–K_1ß³SÖ)Ž˜r¼¦¡V7ë9æž7ÇiתÁ–ãé²kÂÁÑɯºGºÄÌ”ÚÏöÌMgW ‹Až%×퓯Ôú[ ®Ï)§yG‚Û#.ÞH6i%„xƒy•ÎQRˆA€ë§iUDÉ€¾ÌÚÐfB`Üm6œs˜w›—Cc7*ñh%°ÿ,äܧ™‚œ9Rp>¯Pë<6#€DªûW3¼UD Ê/׿ÞçWÅl(&4%Šbb zŠ2þ–Aöг¡¤ºÜäÔ„ ÅV _×=Q I¿à@’c7!F]lÈ"i(æÂŒÈ,ZÛPLqö:A1aÓ7˜Å¨…>C¯Êgr¹Rr¢ ¥Ÿ˜HY®¡©Š›,ïóE_C1-„R*4bøî‚Š ñULƒœ»ÞŒ£b¤®Ô²DS1! ºŠ ÇnÔ%…s#UqÐJ « YÛ*Fnå{-¾ÂR1¡)è*F›ø…ŽŠÑ¦¼Š­*m…£búäpÑL4saF`¨˜âìBiŒŠ ›FW1ágXQtc€“oVP1Æ‚õ¦§…R®Ši!”R1 ×®TLˆˆ¯b̘ºF8*ÆØ¡âY‹ ¥1*ÆØâ*&»Q·«ÎQŒ±ÅUŒ±žC@P1¢ÐÅW1ˆÀ%í–H*0[ÅÃW¹PṮ¬Š¬ŠY(e¨˜’´êó-±TÌ¥ bˆ³w¶F¨ il|†•ÀV1‚åCÃW1P*_O ¥L#—±U dĹ¢2ù*@DW1¹°PŠOAR1€YÍ^ Š~jU¿HÚ¨º1ƒê«é}Iýb ‡(r‰4F¿p  ãô ç$$¯Â×Xú%4]¿p¿DÂÑ/œ—×/ Ugޫ䒣_ú$‚\"3`r¹0r•‹'—âì∌ —°éÔ¥‡>@äAõå"€\& (—è°ÈÇ:Ej#”R. ³Ké¤9ÊE”Ï… 0."!(!Ê*q> &÷m„†]Âawy}xçˆ\úì™/Q6˺ÿI(àšÉÚEGn·³ý³XÚE©âÚE8¤ÆÑ.J•×.J;ABÐ.J•Õ.J×.!ÄÙãé1ÚE©âÚ%üøgGBÕ˜* ]´w[ £\íÒB(¥]´U£ A»„ˆøÚEëqy¼ÚEë²ÚEëâ».á¨*ÃuŽ\œz)½ë~os55 —¼ˆÀGX¼€)èÊŘø…Žr1ås_`«ÎL#(cÊ*—Ks!³JbÃ.ÆŒ«ê5âHhûùHø½Céøüø¦­¤õ¹«fqŸƒD^„À¯šÅÝi¨ÕÝïè=ÍÔÏ '²¿jö†ðžâ°áÔÛû'FúYÚ'QB£€ãYd+ê÷9t悾Ҧ¦Ú˜Ô(Eå€Ã×µobLöEWÏÉ@Ï)ÏO…yÆ>c>²fhE»6 I}Ž2»m“0'Þ˜=>ÜTS¸ÿu´¿F^Ú— xˆYØ_3®í8Íiñó}>³9%€iþ:t-Ûûkˆq¶lÛMLŽ¿²JÏhþzi|1ü•ÑsuÎòüµÓ6É]¤õ7gwºoÑ£+ònx]9”±ò‚]9+]A † °ÞÄšãx+xéÍ[9+ï­œ«Xšç­¶Ëx+Ð}ƒî­8kæß[%ô4 š–¢¼·J1ª´Ùja9ðL ž–¢¼·†íZ`yÞÚi»†ú¯…PÄ€3|-¬$°‡ÿ„¥…•,¯…•©…#ŽuqüU ¼$ò„毗ÆÃ_C <-Üi»Ltº¯Ñ£«R-8Ç®!ŽóÖVtÕª|tÕj¤Ž(F‚ã­ZÁÞº@óV­Ê{«Vå´p§í2Þ t_¡{«Ž¹À÷V aay«5å½Õš‘ûÂ[­ßåÁ‹­Ö”÷VkÊí [SÜ[î£ÇVU·Ô¹D÷VÇßÀ@òÖ}ëe½²àüÊõ£v…ží½mW@@÷VmåÚm»ˆ·BÝGßV 8så ß[Cç­¯XÞÊÊŸ¹B\R Úàx+«ao}EóVVþÌÀ@SÂݶËx+Ð}‰î­:ÃÑøÞâø<;,oåÏp .ÅÖ9Ãzæ½u†w† à{«`åb«(~†uý GIà22ÇÏgpü},o•¼¼·\Z·~Ì.г½·¢í2øÞb ­[»m—ñV ûè»LJA'®ß[Cç­hJX•?q…,¸t‚óAJX Ø[ñ”°*â ` àtÛ.ã­@÷eJNøÐ1•2jlNxúãHéæ„g?6o5dÐîe;ŸC9âÉ/JqæRŽxìk'ZBÍÿ‚ú„×Ð׸»ý,¶ÌŽš6ÀÁ×}>‰p ÎßÏC/Ô%Ý2ª9ÜÿëÈ7ÿ2îíqÏÜ5z }Ä]#ȶˆ×ÊÂk†M”1Áýùœ{G¤©ñâôÈ1œí÷»HFA†^ÛøY=Mƒú/°³z”nM :À6i=OëAHêqlC#âØ&6©Ç³Mˆñ1lÓàfжc«!¶y@c›KÓƒmB <¶é´]ˆm þsl¶Ñ5ç >Û@¾ˆ4ÛF ³ €ñ!l³Ç-Ë6C¶}Û8xˆm±Øæâô@`mºm—a°ÿ m(§!x¶¡aÉúÛP[žmBŒaj˳͠mÃ6ÔBl3Ccj˳ µå؆ÚòlõŸF?fóê{¥EpÁñÇíôq·Ø¬O{O)ê l{þ¶[¬¦»ù¬½¿œ¼³y¬±@¨‡?0w6¹…Ìyûö°;ŒövZ€Öl§ üí4À¬Û9ÒvÐögćœ› (\2"¿¢Yé3?€¶ ²Ü‰æsÞ&Ÿc¼mßð¹¸ð´}ZH"m:ÀUò›NA¾Œ÷!ÎOÕ„Fý Ðh÷~ÛÐÉZìÞ~¥%wô8]¯7»¶"ȤXa=P_<Ì£l‰,Jç©(4fç"Æ|Ö?ê=il’J¯Ð¸ Ÿ MòƒøûÁ'‡mº}B(‰ÖЫdÅéUBÙZOXô*Yyz…,@§W ¦Ž=¡Ñ«dÅé54aÅn:% sèõìTM¥×°Ñ»‚¢V@ª˜P½ ŠyD±×a*|·"½’é…âID¹ŒhˆBA‰bHQ¨à”åÖ{5»†( ’Ê®’3D¡À¬µg¬²«±_:£ì*ð-Æê°á4rÞ€ÄJ@£5v–šÖ@–šÐà ¶Ô45è#¼! }!Imtœ!QhW!ÊŽ3 Qè /Mdî+5DYpßÚWBÙ€ ¿„'Š—ôª¤KZ” QhqiÁ–Qà4h$EGQ„£^ç|'Q  ‰0‘;;dQ„@·‹ûüýφ(LPoâ3bæ]C@÷› 8D¶ŽOèDÑ€D±@# #‹EÑ_zä…‘ˆ"u|¢°@-a EtûŠEV'  ûÍ V¢°ª§ž‡€”*ÁjVP7uþlõä´Ÿ¹+KÁN£ïÊ $dJŠ¿+뀂]Ù%Ò®,`ÄgÌ쎆ñ¨x¶åÁRÕE #/–¶=ãÁF PvÃxÔx ã> endobj 47 0 obj [/ICCBased 51 0 R] endobj 48 0 obj << /Type /Font /Subtype /TrueType /BaseFont /ZFNYZM#2BMonaco /FontDescriptor 52 0 R /Widths 53 0 R /FirstChar 32 /LastChar 121 /Encoding /MacRomanEncoding >> endobj 49 0 obj << /Type /Font /Subtype /TrueType /BaseFont /RHUJEE#2BMonaco /FontDescriptor 54 0 R /Widths 55 0 R /FirstChar 33 /LastChar 34 /ToUnicode 56 0 R >> endobj 50 0 obj 6081 endobj 51 0 obj << /Length 57 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream xÚ}’OHQÇ¿³%B¬e&RðN¶Wí`ŒÝõoʶ¬k¦²Î¾ÙÞÌn%Bˆ.AÖ1ºXÑI:†‚b]"è(‚—í73»îˆÚƒ7ï3¿ÿ¿ß{@](mšz€yÃÉþ(»;>Áê7P‡A+­Xf$‘v™lqdí}…䜛áãõÿ] ‚U€Æ¬ÇמöxÀáû¶iO:¬äÒb“¸M¤’1âWÄg³>žöq†[ ñ2ñMÅ'"()Y'æ±ld4ƒä—‰»2–’'&ßÀSg^™öÐ}8õ¹&›°€åwÀ¥Öš,Ô \V:k²Ý¤;©iÝR;;\‘Œu?ÊåÝV þ°ÿ¼\þûº\ÞC9¾u¥(J•IÒÀëÃ]ýÜàBS˜s_ QP5ûFz¼Úë׋Gõ%«t{3qW°D÷0vz ¼ü \}\ø$€Ôu¡ºmþÀÍ+˜…–ÍÙ¬C–;XØ9:Y„^g±BÞ,Ú\°ACioci]g®©Å·¸(ñL;òz±Úï9ÚAnŒŽÐIó ¨Üê­°4“I÷ÐÝ x#Ã{zwA¼¨j}ƒÎ…Ðþ¤Š¾Q¥óš=˜ò8Ðmèñá Ã(Äo{1±cÚÑd5¾Ué­ÊgÒ·t¶üÆlaȱi"ßÐ\.5æ±”šËÅâ^Å8tph0èk€!‰~D† TÒhd¡‘”»6‚ØÂì±–:>f¤ß&Ÿm×çŠäíxÝA4Ž…¶ƒLþ&ÿ–·ä%ù­ük±¥ªiÄ”¦¬?ûCqÌÕ¸m¥&/¾By#¤Õ‘%iþ 'ËW©¯:ÕXl©Errð'ñ=_—Ü—)Œi7Ò¬›©äê,úF|ÙNšٮͯ6×rm^™Ü ®ÍšUáHWü «Ãÿ5;¿?ÿͰhendstream endobj 52 0 obj << /Type /FontDescriptor /Ascent 1000 /CapHeight 769 /Descent -250 /Flags 33 /FontBBox [ -144 -422 748 1223] /FontName /ZFNYZM#2BMonaco /ItalicAngle 0 /StemV 0 /Leading 83 /MaxWidth 600 /XHeight 553 /FontFile2 58 0 R >> endobj 53 0 obj [ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] endobj 54 0 obj << /Type /FontDescriptor /Ascent 1000 /CapHeight 769 /Descent -250 /Flags 5 /FontBBox [ -144 -422 748 1223] /FontName /RHUJEE#2BMonaco /ItalicAngle 0 /StemV 0 /Leading 83 /MaxWidth 600 /XHeight 553 /FontFile2 59 0 R >> endobj 55 0 obj [ 600 600] endobj 56 0 obj << /Length 60 0 R /Filter /FlateDecode >> stream xÚ]PAjÃ0¼ë{LA¶(9AIøÐ6ÄídimõJÈòÁ¿$»)ô0‚Ù™YFËÏí¥%ß‚ÓF,™€³[‚Fèq´ÄjÆê¸³òêIyÆS¸[çˆSKƒƒ¦aüžä9†oÆõø’gŸÁ`°4ÂáûÜ•I·xÿƒR„ŠI ‡´î]ù5!ð=¶&é6®Ç”ús|­A^o•´38{¥1(‘5U%›ëU2$óO[ v§¨åQ+™¨;N¯%þkÌ›òŸ õB*WÎRZå>–ðy9ï|N<”sUendstream endobj 57 0 obj 706 endobj 58 0 obj << /Length 61 0 R /Length1 17680 /Filter /FlateDecode >> stream xÚ{ |EöUõ=gÏ}%™™L2! ¹á II€ ‡È­‘p„;®(\ ¸¢ˆ <8äRC8 ÄeW¼PÐUÜ(î"$ÿ«žI×ýýÿŸÿÌTWuwM÷{¯Þñ}UÝ#„ h b2±||s}޼åäÄÊy»Iû!¼!æòäŠ)åY÷çÁ)nì˜2sÁ俊مT€PöSËÆOj,Ù: ¡^èÔe*0ì%¯ÁþhØO˜Z>ïämñ5°_û×fΚ8~áÏ÷uD(oì/.ÿ@…XÉ}û—a?pßøò²sñkd„òí°ï¯˜5wïç7À~gØßT1§¬âþ-CÎÁþÇ@S8†å‡rÄ£7é5ÐØèú!PÄ"j HDÒ!=ô6"2#YÙ9´þNtóãBnØzn9â…âC1(ê8JÜ-u< Qn¡$F{†QꀒQ JEQJG(e¡N(uF9TV¨+ꆺ£¨'ÊE½€¼ÁÈÏË(J:[×F­§¡|Ckupë7|9B*Œ)Ê(§o¶ÓUƒàÛUÁ·„R£Û‹§ã#­õô›‡žD×ð^hTÙÚŠú£}ÐgПŽc;ÈâöÑ ÄR ¢Å¨À{ÔV74Š[g£Cðl?ܱ®°×3óØU­[n­nýÆÀ†ÀñéÀÅbƒ}è#ô9Ñ‘“Ìf椺_=ßzWëÜÖÅ­õ­_Ó/ð0O£ãi¸Çft@“ ô?Àçzü SÆìb‹Øa­i­Sà­ ‰< h‰æ ùh!ü¯CçÑ5tûqNÇ}ñ¼¸9Cü¤7Ä$1ELs’õ³lû _Þòµ:·ÕÔZ :•  GehP±=¦m€û#Š §ÀµFãÍxþ â"I&@“2RN~cìÌpf3ž]%Ô©ÉêFõZ«ÐÚ¯õÙÖR:+Â×z–z” ú’w¢Ñ>MD“ÑLà¾-îׇáûø¾ßSèàêúðõp&5ðD</Áuø~ŸÆŸàóø| $ëÉ.r˜\bDf&3YÅìbN2Ÿ3ßÀ÷Ó ð³IìHîÎfN]¯þUý¹õ/0j€¶)¨-Ckбô:ŽN£a. —ÐÌ`3–7P‘;ãnðÍÇÅx$ƒ§âr ¦ /ÅOã ©Ÿš~!q“b²Šˆ¼­Köx–ŒiïY¸*Úûô®%‰Eã˪‹@V+ûGvKéÞøUT\î ¸?%š2a¥,TH”NÔJ¡>¡©ÕÓKAòÞêZ4lA°ÎëU‚Kóª‡kó}¡1ã böØQõ°{=JÀsû™´ŽÝ‹{ApÓz§õ¦uÏ {q¤þîO‘ã¾­×úûêÃÚe‡)!¡@zm`bú»ÑMY7T=±tƒÏ œO‰”VË=¨d¹D9¨¾‚`0CMÿ¼ýÈøè>Q¾‚h“y»ÚÀù¶vmjjmJ Œ<ŒR –§ÈIëXYë UÈZˆ  ÿÓ#„ Ò[Y¯  °S»äÎÑ‘ýšà«CJFê˜ZRJϼÝvÆ1‚žYÒv¦ýï¥!ÐÉ}DpÔŠáöŸYvÚ §ö¨ÅÎÿåt™v^ÃkX”C¬fU*’ÀÇb–‹eH=Þ¬X–èX!–A^‰ãc öˆ ¸#ÆÈ:X¾œ;¨%w°|•V(?WnÉm¡›¬Ìdl AK)o “³Ï¨Ãð«¼üÌêk8DZO³ïóy]€A’ ö|§t>ÄSE¯Çou»}‚1¿¦ãE·G²ù_ AD¼>Æí0{³R}wøS³¯úëñÛŠÙs‡äHd®š%OçÎ]4²5µ4yäFwKS“Lkwø!w~n>œ‰lWpé©‹äcY™î¾ ”a8ÛÆ9â°E0Ç!†–Q­Œ`VN ¥Æ¡ìXh%'AËÎZã,ÂÆI qؤƒMf =uL€M§¸q8% ”ýà¶ÆR\‚;'äCñáœÎ]\ñ¼ÃîÌîÔ%§s˜ A0ù/çp'·n}òÉmÛž¼³¸øÎ¡6na·ªÇV¾Zÿ§%uÛŸrÇ=y}ÆäåÏv¿ræÌ+»?[T3³¼¦¦|fÍõ<¾¼ùä[Þ8sêõW?­Z_ù§‡ªž¼‰"M|"¡pƒÜŠ_%aæ^±ÚÒ½;ÊoÊÊÄ!&Hv=2 `¾¤†Ñau› ØÍ‚%…×ñzÞÌËC.ÔšÇ1¼YlR¢([‘U\h¼‹õX»UEG¤ ®™ß„­Ý»Ã•Kp"9­(ÑÁ³Äa·².6SýQ]vþ<ÄOÇiõ£Ý»qÚiu…gú ŸÅ.ëÛ¿ÕGÏœQýÔ@ÏF Ç¢ÑS ¤K:I/™%Ù«óÊÅúbóH2’­m6ˆ’è‘.+P´y¬3ÇGhj¹&‹¬;A\N—kNg’´;pÕùóê2õÇÓ8í•WÔNóåVõ5üÓOjXýÁRcÿ~àÌüÀ¿m@O?„Øå,Õë°bו!!óe¬•é˜X‰-ã ò§—ÁBQ¾VÁ=AKÈÌ Z²-ìr5cƒšOo 呟V3´±Ú®fpð™¤8pÓàôø‘›hš#z¬¶±#Ã¥›.Ó¡ËÉ#9š&eS­2Á5úL+=¡÷ð…¥[ÕÁU¶~僦åŽ{rñ}G«©,Ï“$æGrôÁ«p,؇<ì»é¥åoQÆ –¬L[NÐq@CRM ¥ëhëiFÂ.à×£ø ¤—îe<†6rš4%ânRÁ“É}KÇ÷é3¾4£´oÁ¸q}K#ãð øå+^‚q¬•f:Ä0ô`Â2^ŽxØz{9·'ƒ¦ô*ýàÚË5_ã@qØ®l÷=&§ËéN …Žb&Î$½„^bVH±0XŽï$w ãĉx<™.Ü'N3LuÎÁsÈa‘¸†l`7ˆktÛL{cŽÆ|,žÕ}bøÒúIÌÏâÝeñrLZÛ¥q"™n˜bœb:lÚkÙë>ì{Çjê+ †¾V—Áî‚>Fë•û ÎÛ‡7j{¶ØaŒ7`ö„%ßM†%ƒšÀ»j²¸ºkš õ 1=ÕÔî·2Ý1ØêãbK±Gp)Èí2c£‚MF‹ÞVŠbXo)r‹^™ˆ¬`«N.x%œ*çÒ_êRpI¨°¡Ò$m˰Å‹Ý)á8œÝÉjéL&c ;Õ‹ê¯ê5õìJ"žìû•—_É–S+ ß|ÏSûª+ÔGÔ¾ø H8à7n,f”ôVWÏ÷~†ÈÍuàd^ >ld Ä#zXÉ×añañ1>€4)âFr ðr¼¯#Ûð6r•³ðŠxžÁ,Û×ÊqÇbF`uƾzƒAWí¥ FZc†]´±˜õ˜p3(*ë®ÜFÍêÀèòA‚Q]A³K-&,ätéšm :‚9¤ÛðMÕç^lÀó›GÔ°¯ö½7k{ÉÓ×Wjºù!bУ:¤Ü•,%Çìp3a.̇…°Xdeœ3=vzÜtÿÌà|î~þ~a¯*¦*vaÜBÿ‚àz÷³1/Ç÷ý ùIJèg…F‹c R Fó0o%?,èí ¯Çã^w,Ež¤6^nÔlìr$TZ»g¸5©R‘và@ƒè ž]Ò5'’ƒ¡œH#ê“ ÎMˆƒ8†‚ñá'/lîÄ—ê¯Sž8úêŸ×l}óÍMØwfγ+ªû©o´¢â×bŽÍ;´æé†š×fŒ_^²§ßWOLoÐaÞ¦ gÕFgdž'tm#؈¬d²âÿÊ€Ÿ5üÃ@>6âgÙ§Ä`4N°2 ËÄØW”ö°âB–5""f%h§33ÄlÊ8öi®üqn‹+W¶tÏ LåÓØãÊ89•]$ ¡bÎl4g6`µ¬™…±`r´¥œ¬9„ýê7‡Ôl\·9Òœ·A ùþö–Ñ‘Ø ã<hô¢j¥sw}OG©`ªÎëNtttÉ#åæ…æ…îjsy›¸Ë¼Íy@8î¸n–õfÑCd›·¿±ãŒ ¸õC{ fmt¤\F#a˜~®a’7†å&`´ÔìñµT®65UÂåÒÑ‚0\M–è•Ø4²ƃ Å'åP–:Ÿ<Ì”µŒ@Z;ý)õê3Ï\ñá˜1;ïU[Õz&‰ü°Bü÷MÏü´bÀ{é=Gnùä :“£±ÃÑ;JqOW_ϸ¦Á®qã'¡Ix>š×¢µx›øÿŽøá¼Áê3§êS}©þî¾áÎ{üÓÌ“—³ïëÏ‘sì—æÆD3 xlM)¥Y×$Ð9¨¦Êœ‡ 錶ؗd! d ŒàMB!HIB™b M - ‰¡~nðŠN6Œ™FÆè ×cמ¶hÑRù~‰D­HÀé”@|„§<@›µ£PÄéwr9ÂÔßcMLФ¸'ôÿdÉ‚Ï稾S/©ÿÆ#qÂÆ§·­ù —\?jÍ£ïßC>›±¢ò£U_ªñ»x^†¦¢>¬žk™9æ`ùŸ|´ný_4=Ùº¼ôĶ*…"Óéæ(M—ªø*¡J¬’ªäÇøgùg…gÅõòqæ,V¸È_ì¼$qV›lÒ!“×`“å V8`“9I:ê! zÁ ‰cAõe1x½®aaŒÿédÑy˾s!öBÖ…NWS¯fäùP3› R}¸4ª§u )q>3ÉLˆ{I_Ù/s˜Í›“ð[Ù/e˜ÇÓ¹ûöDͳ©ò²;WhÃш–nÑB @8)kx*!Ä—z´¤ߢ.mÏ’ð{ñý½|xný¤ô»W _3ùòå+— ÷x¿eS+æO˜Éª×^½¿|÷éd¦ÐÓéèüšsw½TÚçÁ÷õ}àÕ™ÛýnW+î3cuÞÀé_T5¨ñ½=ÓVWO)û @í›bÃÉQû>¡Œ Çå¸úÆ ‹›Ž¦ã…h!Þ€6àâÛ!~¿ë‹ø‹ t”n$ظxl5ûÅD}¢¯‹ØÙ—㟬Ÿï=.¾#Õ¿ãûœ•>07Im6Æ<c/ ¼@]¦V^§ã"6oÔl9”ê* Í=Zz:´%$…£7É®à  žð¾ƒ7ÑLS÷ ²¥{É ¦vo²¶›8¸A 8*e”±qðƒNŠä0Äû›çöˆcßwXÆFu§úEÄÆÕ5m6Ît›±bþÇ«¾ÀýÔîê‹j•Ú+ãÐ`¼Àíš1õ÷=~à£g4'‘<€­ÒòùŠÃPah6à¸×,U0ŒÙ㎦Ö!ר¾=1`þ(Ièûûd)kO`ì°Ÿ]θ´9‹”ƒ€[ߪ#³„züd"òJ˜Õ1r[ùj.Í_®6iW-ìòGؼGWMº™B<ðU•  Ÿ<èq%÷ ‡Î 9h¶a¶qŽg?»_<%ýÄü$Ié¢ñ¼Á`î®c<çru'@{òúlÙ¼ÇÛkMÔèÄH® ÆLža£á³€ìd$G˜M´$Ša'cK…ä6vÎ•Š¬‚™¢µèœ†Ï¦‚$Ðt9!;â¯yš2Ã@ve•W«¨Û¹wª¯~õÅçxwáâc÷ozÉÚû(^úï_ð’ã½ëK¶¨GÞPß~¾„êØÜpr×.^¾^¡1\â&Z¡$¯2¬cŸ3lfÙµìf+»ËØ`ä ÉÛ±ÉV½ÞÀàF"Cøz\¥$èõHÔŽè…%"“ûé$¯Ì˜ž€«&÷#Øcîµ(JIeK‰;÷˜61ÍÜcGœ J˜K›¤Ë+X95‚ ‚!K6ve'µ!œäÂÝÄ\Žkhh¹8åå¿>÷+ýv‰¹¶ùÅ>½™S»ÐeÌVãVËNÛN×øG®QhÔ_Ç×¹+Âý¯¶_]¦e¦•òJû2çS¦òFûSΣ¦÷ä÷ìG’/ØM_È_Ø?tZ»ŠÖîuôèSP2Ú²Ù¶ìvˆ‡Âw º_­…ï~E-Œç}0žäDÓ” ú/ìÿ´3„ÃDgÆÐßd" !¢5; ¾-q­Ðéå’/ƒ]-¡vDlÔ”b8».,'ò‰f=峿a‹dJE6Á‘×nHK!ÁtÚH‹¡„¥v¤…Î`/<‰þéì¼ ê?uèÀ„×TuéÒr’—güí¡µªº²füélºi>»è6ƒ·»¬<øˆa›î˜tLwÌpÌö‰ô‰î[£Ô¨k´]°%>h|Ýô­ù¢•e9I/$£ÑÅe‰ÇhõÈ«Ád6'X £AFžþŒ%Yd3Äd4bÑÊ‘=vãF<Ôˆ^Ÿ'ÐùâñŽ}&Ö¨Ñx(r¥xÍÝB³.ª°¹T:Ôã„h›å¡Óu´E p.]Øb³ê Ë.YR‘Þ`µ8wF©2\ëù¡[E0ƒæµ¤8ãq'ñóï½=­èÁyø/—Ô²“Ø7®$óùÓëÈš–r^¾kûø±žPZRÉš g.ìU¾T³ë¶œM@¹{8ÈÉj÷³à.DÈnzîãpDÐPŒ³ÈϤÂ#ö|¨ žFf©K{¤yuE«l¹šÎ•íÚ®üF4ßr  %ékÓûUñªtÅÄ¥ŠzLøîI¯K6 ^& €Îvg G§èå–HÎuÚvsXLdAl‚¬ËÜ•ä!ÉD'áì°¹Åi£[¶ÅM¤ÀGØ#ð²ødß•#Æ>Þ·a雞úÇ^næN¬tמËÌîfýçWªf~†½tnäò Ð-¢ãJÂ^á#á;‘递H “Ä%ñÄè~ŽºpŽ#¢€x«o«” LH²•žb&œÀp,‹1ŠÐDD¡£'~ï‡ð0Š¿è…T¡§ð °K8$ü(Â/,+³ lgv»…ÝÇ6²"ë‘z>£M"‚ž j)i*¡I>U6ªnrnDÍV,:¶"ÝM«Ô¦cô'‹Ç¢)T6¦“õ®®ÌGÔøSªÿ|gÇ$^þí¸Êc›6Þ¢ ztPùSWîOÜsúmÜ»ÇsØ%uaº°]¹"¦ˆ( ÔMå§ rï’w¹³ü·âUrM‚¡ç‡yV‘ÀJz$0:^@(ÙŠé]äB¬Àó,(˜N’@¢NàYñØ/“žž—^“8Ék”!ò¨¢Ñ)Ó’häŽðÙ®ài6eÖ Ÿ(Š †$œ­ýB“ñquòœŒ3?R'ã“?¨»˜Tr¡åâjIi>NfDb[gàûYm¬w)#Yv»†ÝÊžÅg…ðEA§Ã˜93¿„,ažàžàW“ÕÌóÜóü6²ƒ7AÄK°b–Ä£±O`XÌðÇ€ÿ¤AEœ°·"áF ¢"Üë} @`D#<^ö‚ñºAѽðÚä ða52uÊQfEà–ÓæµøgÑÅBÔNð<úïj6ùÓ§e=™ÚüfK'm~¢ºŠ­æËÁ¾ó /H„ac –y.V@V°÷ÕŠ±\èêgw¼izrt¢ Í6)Hâ <‘IjYCÊÕUÂ7~Å}ÕUÌtí>]•¸ ÇÇ"Af™XL¬ÛFû=mktÊ?W³êöD¯ŸCÝ3½ùsRÞ²†/¿æ¯áwnˆÄîÉ­ß°÷²åÈŽè¼rÏqÇá²À ÇØÞ7¥³~Ö(a?x‡DÑátÇé> I¶ZýV› !Ùg.t‡ô:ÁfÕÅõ`ôÈæ´Æ[mÓœ~Ù<¿ÂŠ­Þx_ZyOpðâ[f°5/×¶ G}P~nÝØš¸¨=ïqè^O,h8–õe!äKA1\\ .wJ4 .]Š _ XýL8®˜õG180PK==¢ÐYsó‰Ô]Ava…ôÂåtÿr…ÂŒ…NzDr!fÁˆŸ'­úêék¯ç̇RŽ8Gì¾°hè¨o¬úó¿®ÁY{ô„iþñäâ{pþÊ«^½°mG-•åã­—Ø»ùÁÈ‚bÑÊÀǸݮO]¹&á7î:ø­½Ò1‰°TžŒ/Q´YãsèÝ6ùz0‚YçAêÝš¸¼~‹Í/g˜_0³'.}ñ͘¨ ªPîü¨˜¢ó¼^§—JÉ)X¼¬; »G òp¾¬ßI)”'ûйb-F±Öÿ”’6/äÔPy|R8 ¡Óœ1’ã~#š´êëµ×^ï'õ·Ô`hÐÄ”ì‰e¬H¼Å°•1ƒ”ô`41’3ÅÊœ LǦ+ø¨ÔRqn{Þ¦#a‘ŒÕâjˆ¨+F,„ÍýêÝu?=ñèågÞý¥Y¿©lßÙI{¤böÖâéÏ`×óÏbïFµQý¬Ã¼·KÀ/û{ikÄF^†˜ù(OŸƒ,Sb%ËzÙÐ ]ä"y„¼_<&J¼€ &;Së•8ÄBSÔB0Ò±Øï´émvbê!énù²Ü ¿O¹§zÄ2´l5õ %”“MÚu=Óx„Ÿ¿vmÒéÝ?òdŘGáCj!SVÓùËõíÉì³¶®Ms?æ.U ~Ä£tô›ÞÖ¡Qø6îŠÀ>ƾ!Õ¹Þ—>OûYú1îGÿÈÀõud E[}ëu%Ûíô01 !Ä„;ê’Í…aH:‚âÇ„œæø¿mšÙ›é)LŽèÆmú¯-Ñ4F  ‰vOH×½(oÝ`|;%¥ÆíV ýÁ¸ ËáT69 Å:âS°Ý–$%§ ®c ÚcRP!œ¢­‡jË¡©©)K—¶™IZ:&é¸c1›FBÅ8=ô{‡ùŸQEæ…›+]ºTþ_ìÆlé ž?ùÞC¾›9b}FFüÆ›‹ê·‹”µ»§îrW—ììsoÚÖæqòÀ׸ÐÓJæ1$ÍÛü"ãtadëÁ .“ŽZÑX¡_­'z¯‡¸ü8þçq·y϶ðŒEßÉZ¢ÎÓ >I/éE=Ã[ÂVÁœziËÒS¢29sÖVÌÙ9g1r8YæVW’ ®C‹)t‚2­ÎtY™,5 Cÿgö¸~µÁWÖ„oðƒ[|KŸ_˜sCËj²âÅ)}VµÌ`•M1ïhXȆò›å‚ h˜exž H'^0Õã_ÿ=ç'ß#½ìDt‰´¥ñrK;*Òe F@‘·M3ÂðáÕ“øîÚrid8iäȤðHæHMs^ w)?/~y”†Ýj:³O{Æ$=¨8t&üŽù{î{ã±Äø.8°(QËÔéu<’ÍÖ n ê€àGz¯×cÛmE?î­ƒxTÛî·‘¨YqÔ(ÔfoéÒ-k6…¹DÖ,¤`ÞȤ ˆ÷Æ%³mt—f`”™ªß­¬ìÞ0£äáj˜<ýÈ›[ïÇ+F$% E-~5½÷so1÷Ö4§¨_– GÚY]8:´ tH‡(K~4_É1˹uÜ:þeîeþ,w‘»Æ‹gøEòW¯çžåÉþ;BZ5·KØ%âßÞƒ4«YD^'gçŸæžaÁoÁq|åÎ[Y†•ˆÅËðY"ÀM+0£ócJŠAŸñþ?JèʤE¦sU®\ ©ózG¹TYÊÕ*²×9ÔÍ)™Ì¡ZFÁ{[N5ϵ–ïI¸µ|XDG¸–-ÛÉè–í¯ @—þ¼ ¨¯Dš¡ˆú0ßv÷ã!hú 1È#Öã{>½i&ò?å¶ëu¤íêô®ZGD\ÂÕm¸>H{N ò PJt]AŸkðÅûB™ŽlÇøŽ¡IÂ$q’y’<Ã;Ã7#4#až0Oœgž'Wy«|U¡ª„eÂ2q™y™¼FX#®1¯‘· [ÅÝÞÝ¡·¼o…Ny¿ôþè½î½JMðé61؃w÷0™ :ð‰±±116­ïW ý-+V¬xàñz|¶.¦,=nì/ù1X‰Á³bp =ÑŸ$‰ýýÁ)„ÄcPûìanåÕ’Ù³ss+[*e­UÙâFѼ‘N#ÊôIº Ónæ±8Pm¼ÅÔ¡Öý6Z^pçÄ`ɤÞý'o6$8:ߟ·¡‡+{~[ÒŠ6W=4?wòChÞGnÜ[˜ð|}ËZrýéÎu+[ŒÄHÍ×iøá‰6_gñˆŒÝaéA¹wtFƒ_§×WH«%"y]ÄõuÎÿîëÀ梾Nd1Ñ–c6I–ˆ—Kz9«ål¬¥˜³röbd³ßîåðïˆ.©þÞÉM|©wÔű%——>5mçoÿáßF^¬Œ®›ìPF=CžcŸŸÑ±Çñqrœ=ÎNˆ't'ô'Œ'L'ä–ã¶ãöãÎã®&ܤM´6ãfîß¿õ5Ä †Ò›Ó*ÀÝx=Ž´ 3÷à)·á£ÿ˜GM¡ó¨CKƒÇ&!…Σ¦ÐyÔ:šrË<*ň\<Ò 2rØQRô)ºfG¦\R¿ÆK?ã€úõÏkkk×>S[ FÕÚŠ«u­­êžšïß;ùý÷'ßûžæNê`önàbåcÊû¤·¥ÓäãXp-Kݻݺäþ)|ëº!ˆ=ÅDPsŒÓf÷˜5Z,< g½lòD¨€Õì—å Ë bñøofPòÍJÃÎÿ :SÔŒ)~Æ5køù¿@gŽBgt;tÖV6oO¡,ÿ?9”:˜7«nÉ¢0ºNŸ;9YÐ\%ß(#FoÔ‰<Ñé1‚AðñK’èµ ¸Sõ­¡·?«Mäka&#Š5ÐaÌdf93k,æLœ\ŒÌò­*Þ¦ß.@c¾Þ0ê›ê²²½¾©š]ý˜_-o·li¹_³Õí ÓÞdp "'zSÁaPôl™†<)é¯DŸH)‰šUe#øG€ÛùMÍÞ&L§žèÜS»–uö&q6¯-&qIB&–B°‰3îÏêÉÄ|˜ÍDb‚.܇¤‹•ý™(Îo6i£ mÚÓUy I™9“Â$œY:¬ :ì.§;]X°½âú¨Ç«bcç*K?èÒõ“Ÿ÷¾PÿRåòÝ—.~¥¨è«+Ÿö|g@Ï» Ò oö…ªë:ïèsW^nBBFz~qñ¬'Eüo)ŒioîäñUŠ­­àžCk¹ˆóˆˆqKNc=î¾_'Ka³®¯StΣGÓËÔãG³Ñê7ßû) ò zˬ÷åú¸ªöÌxcÆkÈaä`­YÈÆ;³Ú Pt§G!PdÕ.’…±½ÿTÙuþ‘‰t§ÿ¢š•V¬Mëê[[Ôà#j^Ú{ŬÎ#"ü<ütbK ž<¥t>)|n#~ÅÂkÅvQEï ~Œß¢ó.ƒÑ¯×é2¤‡¤ç%F‚˜òJÔ¹ÈíQ¥mn=?÷fL¡Óë4¦ SÐÅ–Æüû˜‚ÁÔÚN¼wéja;5Œýâ¾ ›ˆ)™¾)fKnl¾R]=m×5RѲ¢ÊÁÇÉJÔ6ß¼ñh‹’¼„YͼÀ\d®3\?2ŠLÅS¸í€u¾å®¡«œ$rO†°,ªo]¥t@€†üVzãy¿ö”ϱ,!˜7ƒfy®+ˆÁŠbˆ\‹Yì–¬»9©Þô™R4§%RÁÈÜ+áUßûø!¼¢Au±%Í«˜y76GÆÊüÔ?6ôwecÛ[ެ€$|ƒÕ£ó}Ö°”lì`ên,6Ž5NÆÉLýTÃ|<‡<Ž`9ZŽ×óϘß1_ä.òßš¾5ÿÆýÆÿjúÕ/šDs)b>ÕÑŸ5¬E’Y£ð‚ÞÀaÞf2N•%V¦Ó½F‹l³ ˆ¡Ñä7V~¾"Á€mþ~³ÐCα]þôrIeSIsKK“»¥$âf©§õddôÊpkÖ•ñëÙL¶ÍÕÕÙ0!&)$0'¼2=ÆW÷ò‰kÆû_ý4žó7°%-£7m¢ÞÑíÍäï›6¶dRÙt£ë =:®YH» “Éf ;—™Ë®';Èn'¿S¨çñ…ÜgÜwú_…«zoˆËá¦ÉÜ#d·;C¾¥ÿ¶üà.?øo.?ð‘å]Ûòƒä5¾¦­9DÑdtÙáÿmÕÆÐÛÌgðëê䟠éûH­Â§~Vw“Ä®>†ïoQ[¶â74ý¨éš¾[Ñ'ÊêÇгh':ðhƒCÕÌ*ö1î1ëz´žYǯv2»Ù\=s=È`OpçØsœC ¤ C¬VÖ`5EíÉ á­,ë·rô)dÄX£Æ`Õ™B’ÙÊÓE>çsC¸qÜ,î Žã¼v¢B° Z•@÷ö•—AMÑÅÐÍ&L‹"«+¸EÇ"kšâ117ºØ™¿n3Pä1ž<Ü•tii>…kðèCêÇ~=6¢ï ¢±«æ¹ÓØÌæ¦èÆ¿Ô×?3oqÕõFÚ»?¡Ê¯¿Ëgν‚ÁcÓÏ[{Ò~l¯ Hð}íqy©ýmc¨E¤"´‹=¥žkÝÌ¥Üòrä“ÇžBkXšAžB„=…CMËF(ý`;Ôç¡> u0rL;¿Ê“P2£}'CÙeyôG£}+¡ÔD®ÎAY=^½FfôX0Úî ÿußè5^w”‡¡¼mÓkn‚²Ê)( ¢×¥ÇGEÿw ¥¿ÊÑ{Ø¡tƒBß ïßëØŽïÁ[ð„¢û˜.ÌSl˜ý+çåVñé`lUb@+.¯J#¥?KtnÝ&ÝuýKú é†íÆãSÆãÆ«¦ æŽæ-r¦ü¦Åi9k½Ãúgk³mŽm›}¨ý°£‡ãoΰKv=àúÖ=Øý…ç^ÏO‘±AyèÄ¡Áô]*ðˆ2ê„ð=×rW¬õ°FÇ‹GF„Æ 3vPê Y÷Ÿ8+ò9|Z÷¢ôGŸ<íùE1únùïß,wjï’{7úöx@{?<eDßω¾ NßÏC *@…¨²âþ`’ÅÛî@ƒ€î!h(º CwiïB£Á\Ç¢»Ñ=)ÁŒÁ ~-ýµ)lÆŒŒµ™3þ>ãïk/Íà3zeöú{¯z]êÅÕãéui]üoà+ø*Ý?T×c©ÿ0nÀ??>XçÏÕ×…—Bõz]npòœ ÿÙ_çï »{ñ>­ï¾º„tè´§.þ¥v_ÒR¿¨ÂÛ¨iFX®Ç)uiiþÞz&àDøO0ZÇ¡‹ø/øCþó=êY¬øü_‡ŠýoB|}¨‹+´·¤íòoçëü/MЪ#Õó¡z Õ¦P=½LM¨Ð¿"Ò\êé¿/Ògb¤º+òÿþ‘óýBýü}Cõ"éÒN$O¨Ç‰uþ‘ÞáÈÁDZ)z|¨¯?%VÛïéá–ÜÒêû…Õ¥Âê!ÂjEX'¬ÎVg «S…Õ)Âê8Á.ZE‚µAÔ‰¢È‹¬HŸŠ²×·~­¤j—iųtËjm™¾7¤i:¦(Št¯Î°–¸‚{n]þ¸³2ßoͳt/*øƒMit›zóã¾Ùć.8 BŸ‰Øþ±@O ¼ άÖά¦gVÿ ¬ŽœqÇÖ>3ð®Ñµ;cÇÔv¢ÖØ1k7ݸgôA¼o+,8ˆ_¦Õ˜Ñ™-x{á0zœÙR0¦½Ül;tCi´¢ÝžG~Ú ù™çi7i¤_~™ö˦ôó((Aë—àQné·g‚¿°`߯õq)h‚Ög‚+ÒGŒô–}ÒÒ´>– aZŸa–hd׺„BÐ¥GHë‚O£Ö%„Ok—aðÍ>I‘>¦GÛú˜ý>Ýÿ°OêÿýSÖgo¯E3ÖÒw“KC…ePJkWVNu×.™ì™±(úÒr¸tÂÄ©´_V»(TVP;#TØÓkíœ^KO÷ ìAk ‡Þ³V)+¨ë¥ô* /³7}èà)·Ýë±ö{ úJ/6˜Þ+}ÊœžBO§Ó{M¡÷šBï•®¤k÷*œvWŸÿÆõÜyóçΣõܹý† Jendstream endobj 59 0 obj << /Length 62 0 R /Length1 4236 /Filter /FlateDecode >> stream xÚ…V tÕ¾÷ÍìÎ$° lÂÌ2ù‘$›ÐùYÈn‚ !ФG» K"°MˆbƒB±!¶ÛJ(4þü­“ Ò  "µ*±T±ÇS•öü¡•Sì Ùé}³I”–¶óöÍ}÷Þï½û÷vÞ€qи¾ˆ…r’üzjc{›ºìGÎS4þ@¸°ª¥)0ãÞ2bÅ¿¿¿iíÆUiß¾ ïÀšý¾•gŸ9»–@EÍ$7À6¿—øŒæ@Û}o„¯ˆ‡xÛÚõ>lÇ)ÄD|lÀw_‹<Çò ϯ®óüŸNlˆ‰WZÖ·¶ƒÐC|ñ9-÷ø[îÝ»äñ5–b’!ðxxDVˆ'êF‘‘ÌZ ŠÕÔóÅ;@0ŽS?Åi¤Ú8e DºX’á5šùŒ>=p€Z<@­†¨÷˜²\GŒ0—ˆeð3¸Œ4fÐn°ö¦ìçÃfL‚ p’<ΰ‘t3ôàÍØqCÌ†ÛØxãn(ƒ£pTø#iï€Mð(tÃð&  +1ˆo·ÍCx7‡ŒÈŽäÕÓ—#„Y‚wƒLÒ|XH+üÃB›Øe4ÆûDš%$_MQl6#Ø‚Y,z…¡È+‘ÓÆ2£ÕØl„“¼Q m¦;ÉF/ì7³p>¥8wãׂ_è+ÅZÃi4‘ƒr¬‚“b¨‚p+Üà~šwNÀi¸ ߢ‚Ù˜¸ï§hþÌ6-²…J!$ ‰ŠX úÅZÃ'#­F¼¡ƒf‘ËÁëÉ‹Íð e˜gôÙÊJ2æÐZuØ‹/àY,™å±Bv3«f~`ßIÂra…໤Pdzä‰ÈeC2ªŒ=ÆÓä)‘2%C L…l˜…PD»~å‡û~'4Â*XKÑ·Ã6Š~7ÅqˆÚÔÞ¥v Þ§¨ÎÃ?)®o(2™¼‰FWDñ݆¸;0„ñm<Žâi<‹—Ù"¶›õ±Cì¼ k…6¡K膄…SÔ. W)Š˜-ÞjYzÕÙy'òã ªÚ ä[`+</PÅÀïá-8PþF>œ‡‹(à´‘vòbÞˆ³©•ãB¼ë±ä͸wbùÂ!òékfav¶u±ìEö ;E>e åT‹Jò«W¸B¾”Q+§šÄ­b§¸W²´Y¾²Ú¤­Ò)úo Á«p¾ÿôA¯t„ü|‚ª¢ õÁ/i4+¶úÄ·àù§à=8+Yœ@Ö±TÜob5›ÆÌ:â}‚Lÿþ A±;,÷,€K£ý}œM¥•¶Ñî½òÅÕ!ãê‰ÈVá¡«5Ã=™ößFØ~.*ð<…®™3 òy¹9ÓoÈÎÊÌЦ9Tejú”´Ô{òäIIlâÇ‹‹‘%«EBžG«ôªz–W³´ œœ×|$ð}OàÕUU^‹ÑU¯ S¯Eº¹êß®(Ò5†D›Z%Î<Õ£©ú1·¦†ñKëhü¨[«Wõsæx±9³Lf<1ÍP=öf·ª£Wõè•íͯ›Ötñª3\ÇW֡·©ÙN„#OIœS˜<‡~`/X|.Û-ù¹ñÜ= ¹G¹ïÔçØŽn·Éä,j(egÆ c’Æ~Òùè§³pÆàVœØéví \ýت?N·‚Ÿ™•r f݉>ܶÚyç„’‹T8óSÿz¿óïct4J JàÈÙBT†1â±È £×’3¦}DñEß—½E‘]ñY^ÊhÈaÌ 9ʼ8œ ˜Is#t*h"îW>S4åtqXDWšrR[¨¼FèA­\ kEÊ34ÞëìSzkIR~Õ`’§£ä)-ŒDžÔÂ|™Í£l·is•uQLc”,‹Î_ÕWiUJ…–I2_3Ó˜Rnˆ¢³¢ÂLN\qÊ4­BqPO7ù¹Ê {Œ=&x¯ôJÁ%RÐ%ˤà )X(s¥`Žœ*%ɉ²MŽ—Çɱ²,[eQft÷L¢[¶+—o¼$ú̱Šü-šcó–jî\†2£}(IM¢³Ý>ˆÆ¶G'·—ÛËËæTº¯óò޼s¿{ìß qQÍÆC”ôµôqUpü~I9+) %®Z´Œ4ASäšàY)ÕØÓõ]‹–Õé/¦×ë3ùÀH¯_¤?¹L½½nŸÇg=îA|Ž“úºAa/>ï©åra/ð£02ö<ÁÀÉ ‡= ‡"<Åa”Ò(.Ÿã¸Yœ.Å&.#Åõ=\ƒâq÷+ЉI¦ÃÇÄ4$G1rSë$ŒÓibfv@­‰©Ùaºå3!šFbÍ„àqÐLˆ†ÇÍeü“ÅÄ?2Љä?0s®‹Éýÿþ@é¦5ÝüãÕ<~ê^}G;Ý×:Tµͦ‘ N–·¡±™SŸ_ߤùÝúÍ­ö—v_GÝÍÕ¥š»º=Ëëú»]~w¨ÔUêÑ|îúüšê¦klýxÌVuÍu«á‹Us[ùM×Q7qu>·ÕÄm5q[ù®|Ó–ç®eóÿ[Ô­mZÛ8mmøEÝX‘endstream endobj 60 0 obj 229 endobj 61 0 obj 12896 endobj 62 0 obj 2935 endobj 43 0 obj << /XObject << /Im12 42 0 R >> /ProcSet [ /PDF ] >> endobj 66 0 obj << /Length 123 /Filter /FlateDecode >> stream xÚŒ± Ã0 Dw…~ÀÊÉ’«x/„Œý†BÉÿ/Q‚‡R$8ñîtBˆÊ`]w5é¹$Zƒ#È.ø:ÂÌ~¹Ã]SæE”îïôHtÙoJT¹ÕêT¥p1oŸÐ+Ìé ©)»ˆ½›O;ßPصùÿ%—6¶endstream endobj 65 0 obj << /Type /Page /Contents 66 0 R /Resources 64 0 R /MediaBox [0 0 791.9981 611.9985] /Parent 8 0 R >> endobj 63 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./varpart4.pdf) /PTEX.PageNumber 2 /PTEX.InfoDict 46 0 R /Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] /BBox [0.00000000 0.00000000 792.00000000 612.00000000] /Resources << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 47 0 R >>/Font << /F1.0 48 0 R /F1.1 49 0 R >> >> /Length 67 0 R /Filter /FlateDecode >> stream xÚ½[MsÛ8½ãWವviÌàƒørÕ^&»9mÕf*žÝ©ç@Q”"Df(z3ù÷P”IM›‚ÈI.1á¡^7^Ôïø'ü;Ž ¦:¢„F±â<Ò±1 %"mŒ‘¸ÌðÿpŽß½?Pœ0©ÿÒãƒ÷ŸÜˆàOï1‰•vBñ7ÌðCiŸXkÉçø!µ`$’vtãÜ(wŸí<„‰QºÇ?>`süµÁ”†)Å{üîì\ñÃß|L6¾ÅOø_uããÀØX‹ÈÎV£³¡@;üi<Ývê>E$íŽtzÖ öÚ6,hó¯¡mØ&‡æÌ­Ñeµþe‘ìÃ>}Ù¡:t¹£œS®‰Äa\!¤XŸ§8³k©„z b@kBq¶›|»Þ¦IžfgÛcN(evÓꃡ›»»óx¬÷‰Ýžs)j–E{eñÃãM²È›Å—Åo‹Ý"_·L óÀúÇY0ÖΓ8”0»#ö!ÝF~í…óùÝž>Þ¾³¿X.ÒÅj±^lO‹ýâëgû,¿£wî×g1·<Ëß0€ç¥˜CwÛ×<£WxÆcy®±ÐÛ<‡Úe˳NMçY8–gvä9©yvKðd å™Õ<£)ô\OÍn‰”p€èÔÎkcÁݼÞô¸mÇ €cW4€aíd©æ'ª—–êÌRíÖ¡¥šÏ@5ªW5ô“Ÿ–jlzª} Ëh/ KuÜR֒ߨuh©Ž=ª¥±6BiNµÝС2½l࿼dÝ[”¥CrtÚz­„Ñl00K½8RïÊÉS‡ráìåÁ›rÙŸYMyú2³§‘”hˆò>èÔ*w”ûM‰³”ËÓ^¹²kÑR.gP¹+F€ÊWÍþ½Mù%*÷A§Wy£Q9˜¥\µödÝ¡\Í r¡•·um;‹Êû s¨ÜÇh³”ëSMwå¾¥\Ï ri@+¸ªg6—Ê}ÐéU.  òÀ,å¦5‡›åf•k¨üèý/+,—¨¼êSn›njä5*÷1šÝq JZë’uâë\k bÂunè€gI;›ûÔZ× †‰Õ“;7tÀ· çÈoºÎU—x¿Õ<¬vwX9—S&^§x4L¼<µâ-ñF§ë ž\c‡x6½âå âÓ â/P<<¹â= tóÒÙÏOF¦C<ŸAñ,p1s+žÅó+žÅNæâ_ZÔñ@_ª•±;ØU<ƒ5~NÍ;Z¸˜UóŒáuªü+ä7Mj‡z¿?UÜH!Ôš ¬ònFù¥:–ÊÇð8ÖL Ãh` )AÔ×a8÷¢9'îû»’¶`‚‹X„KZzÇ¢¼êÂÖÝÛù£V_În N,ÐÄшËZa¤<×]¬ ¡"TwݬË$uw臞Äæ²·ZÒh ²–yU»Ý6ßœ ­ûØk>ª ´ugåQH‰AAyv&ÚW–~ ˆÒW²Ü÷QÉÊ Ë/? ¯ºüš¡\A×xYÎcæùÝ¡Jªí¡Ú¦‡Qây÷3¹¤Ì | ÌÌ8SÓæË¡*ŸÓ*[…h¡Cg÷ pºló)sÒ~ö­º‰\òh%´"ZÀBÔŠCýKÝdŸÔÀ¨¡AaK¾÷_AÑLóP_„™!ð}î‹#@áw‹.k:ã#Ø&M,«¾PÇ;ÜÚ P~:­h,&5®æMo€Q'7ÆfÀƒ™Ï Íh´)Ì´ôߊó½ .˜ęänähb70œ,“º0]æs s»A¡ÜœÉ 0E4±Èž‰Ý€¬7»0 °=7ÐÔç`;À™"Ù+Ï(¸ З0iÀ±Ób¿ÜæÍFúw¡d Ñ•í²}–WIù}JΘó°£Hë8˜Ð«% `!·Ï\gÊÏ®oêͨ*¦ôbuƒæƒüZ|>#q~Qwd€Ê’|ÂïWp®Â2»úÜ∆¡p »ôy—Ø.ì‡)[¤X‚^>Wg-Òu–5Ö']¡ÞÚäE¨_°Eb úËsÕy©ˆáÉmƒÜôGJJ®eh)s§¿yÁ¤Éó!6á—g¤„‹¿Ýb†š/·úRªu"˜î+]Š4B’(­ßöýC·Ð ¦XVÉ6‡JKŽÒ,9ß',9Ö%Aє٦Ì»•Eà{ÁG ±ÿÅÚ»—?­øéO`? endstream endobj 67 0 obj 2200 endobj 64 0 obj << /XObject << /Im13 63 0 R >> /ProcSet [ /PDF ] >> endobj 8 0 obj << /Type /Pages /Count 4 /Kids [6 0 R 20 0 R 44 0 R 65 0 R] >> endobj 68 0 obj << /Type /Catalog /Pages 8 0 R >> endobj 69 0 obj << /Producer (pdfeTeX-1.21a) /Creator (TeX) /CreationDate (D:20060601135554+03'00') /PTEX.Fullbanner (This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) kpathsea version 3.5.4) >> endobj xref 0 70 0000000001 65535 f 0000000002 00000 f 0000000003 00000 f 0000000015 00000 f 0000000322 00000 n 0000004138 00000 n 0000000208 00000 n 0000000009 00000 n 0000060653 00000 n 0000003363 00000 n 0000003591 00000 n 0000003705 00000 n 0000003825 00000 n 0000003940 00000 n 0000004056 00000 n 0000000016 00000 f 0000000017 00000 f 0000000039 00000 f 0000004520 00000 n 0000031949 00000 n 0000004403 00000 n 0000004203 00000 n 0000012176 00000 n 0000012404 00000 n 0000012439 00000 n 0000012613 00000 n 0000012776 00000 n 0000012797 00000 n 0000013605 00000 n 0000013841 00000 n 0000014232 00000 n 0000014467 00000 n 0000014494 00000 n 0000014798 00000 n 0000014818 00000 n 0000028863 00000 n 0000031886 00000 n 0000031906 00000 n 0000031928 00000 n 0000000040 00000 f 0000000041 00000 f 0000000000 00000 f 0000032335 00000 n 0000057546 00000 n 0000032218 00000 n 0000032016 00000 n 0000038845 00000 n 0000039071 00000 n 0000039106 00000 n 0000039280 00000 n 0000039443 00000 n 0000039464 00000 n 0000040272 00000 n 0000040508 00000 n 0000040887 00000 n 0000041122 00000 n 0000041149 00000 n 0000041453 00000 n 0000041473 00000 n 0000054459 00000 n 0000057483 00000 n 0000057503 00000 n 0000057525 00000 n 0000057933 00000 n 0000060585 00000 n 0000057816 00000 n 0000057614 00000 n 0000060564 00000 n 0000060731 00000 n 0000060781 00000 n trailer << /Size 70 /Root 68 0 R /Info 69 0 R /ID [<98B70A8F13A6A009B4580B016140665B> <98B70A8F13A6A009B4580B016140665B>] >> startxref 60984 %%EOF vegan/inst/doc/intro-vegan.tex0000644000176200001440000005370312122046447016061 0ustar liggesusers% -*- mode: noweb; noweb-default-code-mode: R-mode; -*- %\VignetteIndexEntry{Introduction to ordination in vegan} \documentclass[article,nojss]{jss} \usepackage{veganjss} % vegan settings \usepackage{ucs} %% needed for R output: signif stars etc, quotes \usepackage[utf8x]{inputenc} \usepackage[T1]{fontenc} \usepackage{sidecap} \usepackage{amsmath} \renewcommand{\floatpagefraction}{0.8} \title{Vegan: an introduction to ordination} \author{Jari Oksanen} \Abstract{The document describes typical, simple work pathways of vegetation ordination. Unconstrained ordination uses as examples detrended correspondence analysis and non-metric multidimensional scaling, and shows how to interpret their results by fitting environmental vectors and factors or smooth environmental surfaces to the graph. The basic plotting command, and more advanced plotting commands for congested plots are also discussed, as well as adding items such as ellipses, convex hulls, and other items for classes. The constrained ordination uses constrained (canonical) correspondence analysis as an example. It is first shown how a model is defined, then the document discusses model building and signficance tests of the whole analysis, single constraints and axes.} \Keywords{ordination, correspondence analysis, non-metric multidimensional scaling, CCA, RDA, NMDS, fitted environmental vector, fitted environmental surface, permutation tests} %% misuse of the address field for revision data \Address{$ $Id: intro-vegan.Rnw 2346 2013-01-07 11:42:36Z jarioksa $ $ processed with vegan 2.0-7 in R Under development (unstable) (2013-03-19 r62316) on \today} \Footername{About this version} %% need no \usepackage{Sweave} \begin{document} \setkeys{Gin}{width=0.55\linewidth} \tableofcontents \vspace{3ex} \noindent \pkg{Vegan} is a package for community ecologists. This documents explains how the commonly used ordination methods can be performed in \pkg{vegan}. The document only is a very basic introduction. Another document (\emph{vegan tutorial}) (\url{http://cc.oulu.fi/~jarioksa/opetus/method/vegantutor.pdf}) gives a longer and more detailed introduction to ordination. The current document only describes a small part of all \pkg{vegan} functions. For most functions, the canonical references are the \pkg{vegan} help pages, and some of the most important additional functions are listed at this document. \section{Ordination} The \pkg{vegan} package contains all common ordination methods: Principal component analysis (function \code{rda}, or \code{prcomp} in the base \proglang{R}), correspondence analysis (\code{cca}), detrended correspondence analysis (\code{decorana}) and a wrapper for non-metric multidimensional scaling (\code{metaMDS}). Functions \code{rda} and \code{cca} mainly are designed for constrained ordination, and will be discussed later. In this chapter I describe functions \code{decorana} and \code{metaMDS}. \subsection{Detrended correspondence analysis} Detrended correspondence analysis (\textsc{dca}) is done like this: \begin{Schunk} \begin{Sinput} R> library(vegan) R> data(dune) R> ord <- decorana(dune) \end{Sinput} \end{Schunk} This saves ordination results in \code{ord}: \begin{Schunk} \begin{Sinput} R> ord \end{Sinput} \begin{Soutput} Call: decorana(veg = dune) Detrended correspondence analysis with 26 segments. Rescaling of axes with 4 iterations. DCA1 DCA2 DCA3 DCA4 Eigenvalues 0.5117 0.3036 0.12125 0.14266 Decorana values 0.5360 0.2869 0.08136 0.04814 Axis lengths 3.7004 3.1166 1.30057 1.47883 \end{Soutput} \end{Schunk} The display of results is very brief: only eigenvalues and used options are listed. Actual ordination results are not shown, but you can see them with command \code{summary(ord)}, or extract the scores with command \code{scores}. The \code{plot} function also automatically knows how to access the scores. \subsection{Non-metric multidimensional scaling} Function \code{metaMDS} is a bit special case. The actual ordination is performed by function \pkg{vegan} function \code{monoMDS} (or alternatively using \code{isoMDS} of the \pkg{MASS} package). Function \code{metaMDS} is a wrapper to perform non-metric multidimensional scaling (\textsc{nmds}) like recommended in community ordination: it uses adequate dissimilarity measures (function \code{vegdist}), then it runs \textsc{nmds} several times with random starting configurations, compares results (function \code{procrustes}), and stops after finding twice a similar minimum stress solution. Finally it scales and rotates the solution, and adds species scores to the configuration as weighted averages (function \code{wascores}): \begin{Schunk} \begin{Sinput} R> ord <- metaMDS(dune) \end{Sinput} \begin{Soutput} Run 0 stress 0.1192678 Run 1 stress 0.1183192 ... New best solution ... procrustes: rmse 0.02026651 max resid 0.06495143 Run 2 stress 0.2341212 Run 3 stress 0.1183186 ... New best solution ... procrustes: rmse 0.0001039632 max resid 0.0003313083 *** Solution reached \end{Soutput} \begin{Sinput} R> ord \end{Sinput} \begin{Soutput} Call: metaMDS(comm = dune) global Multidimensional Scaling using monoMDS Data: dune Distance: bray Dimensions: 2 Stress: 0.1183186 Stress type 1, weak ties Two convergent solutions found after 3 tries Scaling: centring, PC rotation, halfchange scaling Species: expanded scores based on ‘dune’ \end{Soutput} \end{Schunk} \section{Ordination graphics} Ordination is nothing but a way of drawing graphs, and it is best to inspect ordinations only graphically (which also implies that they should not be taken too seriously). All ordination results of \pkg{vegan} can be displayed with a \code{plot} command (Fig. \ref{fig:plot}): \begin{Schunk} \begin{Sinput} R> plot(ord) \end{Sinput} \end{Schunk} \begin{SCfigure} \includegraphics{intro-vegan-006} \caption{Default ordination plot.} \label{fig:plot} \end{SCfigure} Default \code{plot} command uses either black circles for sites and red pluses for species, or black and red text for sites and species, resp. The choices depend on the number of items in the plot and ordination method. You can override the default choice by setting \code{type = "p"} for points, or \code{type = "t"} for text. For a better control of ordination graphics you can first draw an empty plot (\code{type = "n"}) and then add species and sites separately using \code{points} or \code{text} functions. In this way you can combine points and text, and you can select colours and character sizes freely (Fig. \ref{fig:plot.args}): \begin{Schunk} \begin{Sinput} R> plot(ord, type = "n") R> points(ord, display = "sites", cex = 0.8, pch=21, col="red", bg="yellow") R> text(ord, display = "spec", cex=0.7, col="blue") \end{Sinput} \end{Schunk} \begin{SCfigure} \includegraphics{intro-vegan-008} \caption{A more colourful ordination plot where sites are points, and species are text.} \label{fig:plot.args} \end{SCfigure} All \pkg{vegan} ordination methods have a specific \code{plot} function. In addition, \pkg{vegan} has an alternative plotting function \code{ordiplot} that also knows many non-\pkg{vegan} ordination methods, such as \code{prcomp}, \code{cmdscale} and \code{isoMDS}. All \pkg{vegan} plot functions return invisibly an \code{ordiplot} object, so that you can use \code{ordiplot} support functions with the results (\code{points}, \code{text}, \code{identify}). Function \code{ordirgl} (requires \pkg{rgl} package) provides dynamic three-dimensional graphics that can be spun around or zoomed into with your mouse. Function \pkg{ordiplot3d} (requires package \code{scatterplot3d}) displays simple three-dimensional scatterplots. \subsection{Cluttered plots} Ordination plots are often congested: there is a large number of sites and species, and it may be impossible to display all clearly. In particular, two or more species may have identical scores and are plotted over each other. \pkg{Vegan} does not have (yet?) automatic tools for clean plotting in these cases, but here some methods you can try: \begin{itemize} \item Zoom into graph setting axis limits \code{xlim} and \code{ylim}. You must typically set both, because \pkg{vegan} will maintain equal aspect ratio of axes. \item Use points and add labell only some points with \code{identify} command. \item Use \code{select} argument in ordination \code{text} and \code{points} functions to only show the specified items. \item Use \code{ordilabel} function that uses opaque background to the text: some text labels will be covered, but the uppermost are readable. \item Use automatic \code{orditorp} function that uses text only if this can be done without overwriting previous labels, but points in other cases. \item Use automatic \code{ordipointlabel} function that uses both points and text labels, and tries to optimize the location of the text to avoid overwriting. \item Use interactive \code{orditkplot} function that draws both points and labels for ordination scores, and allows you to drag labels to better positions. You can export the results of the edited graph to encapsulated \proglang{postscript}, \proglang{pdf}, \proglang{png} or \proglang{jpeg} files, or copy directly to encapsulated \proglang{postscript}, or return the edited positions to \proglang{R} for further processing. \end{itemize} \subsection{Adding items to ordination plots} \pkg{Vegan} has a group of functions for adding information about classification or grouping of points onto ordination diagrams. Function \code{ordihull} adds convex hulls, \code{ordiellipse} adds ellipses of standard deviation, standard error or confidence areas, and \code{ordispider} combines items to their centroid (Fig. \ref{fig:ordihull}): \begin{Schunk} \begin{Sinput} R> data(dune.env) R> attach(dune.env) \end{Sinput} \end{Schunk} \begin{Schunk} \begin{Sinput} R> plot(ord, disp="sites", type="n") R> ordihull(ord, Management, col="blue") R> ordiellipse(ord, Management, col=3,lwd=2) R> ordispider(ord, Management, col="red", label = TRUE) R> points(ord, disp="sites", pch=21, col="red", bg="yellow", cex=1.3) \end{Sinput} \end{Schunk} \begin{SCfigure} \includegraphics{intro-vegan-011} \caption{Convex hull, standard error ellipse and a spider web diagram for Management levels in ordination.} \label{fig:ordihull} \end{SCfigure} In addition, you can overlay a cluster dendrogram from \code{hclust} using \code{ordicluster} or a minimum spanning tree from \code{spantree} with its \code{lines} function. Segmented arrows can be added with \code{ordiarrows}, lines with \code{ordisegments} and regular grids with \code{ordigrid}. \section{Fitting environmental variables} \pkg{Vegan} provides two functions for fitting environmental variables onto ordination: \begin{itemize} \item \code{envfit} fits vectors of continuous variables and centroids of levels of class variables (defined as \code{factor} in \proglang{R}). The arrow shows the direction of the (increasing) gradient, and the length of the arrow is proportional to the correlation between the variable and the ordination. \item \code{ordisurf} (which requires package \pkg{mgcv}) fits smooth surfaces for continuous variables onto ordination using thinplate splines with cross-validatory selection of smoothness. \end{itemize} Function \code{envfit} can be called with a \code{formula} interface, and it optionally can assess the ``significance'' of the variables using permutation tests: \begin{Schunk} \begin{Sinput} R> ord.fit <- envfit(ord ~ A1 + Management, data=dune.env, perm=1000) R> ord.fit \end{Sinput} \begin{Soutput} ***VECTORS NMDS1 NMDS2 r2 Pr(>r) A1 0.96474 0.26320 0.3649 0.01898 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 P values based on 1000 permutations. ***FACTORS: Centroids: NMDS1 NMDS2 ManagementBF -0.4534 -0.0102 ManagementHF -0.2636 -0.1282 ManagementNM 0.2958 0.5790 ManagementSF 0.1506 -0.4670 Goodness of fit: r2 Pr(>r) Management 0.4134 0.00999 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 P values based on 1000 permutations. \end{Soutput} \end{Schunk} The result can be drawn directly or added to an ordination diagram (Fig. \ref{fig:envfit}): \begin{Schunk} \begin{Sinput} R> plot(ord, dis="site") R> plot(ord.fit) \end{Sinput} \end{Schunk} Function \code{ordisurf} directly adds a fitted surface onto ordination, but it returns the result of the fitted thinplate spline \code{gam} (Fig. \ref{fig:envfit}): \begin{Schunk} \begin{Sinput} R> ordisurf(ord, A1, add=TRUE) \end{Sinput} \begin{Soutput} Family: gaussian Link function: identity Formula: y ~ s(x1, x2, k = knots) Estimated degrees of freedom: 2 total = 3 GCV score: 3.965441 \end{Soutput} \end{Schunk} \begin{SCfigure} \includegraphics{intro-vegan-015} \caption{Fitted vector and smooth surface for the thickness of A1 horizon (\code{A1}, in cm), and centroids of Management levels.} \label{fig:envfit} \end{SCfigure} \section{Constrained ordination} \pkg{Vegan} has three methods of constrained ordination: constrained or ``canonical'' correspondence analysis (function \code{cca}), redundancy analysis (function \code{rda}) and distance-based redundancy analysis (function \code{capscale}). All these functions can have a conditioning term that is ``partialled out''. I only demonstrate \code{cca}, but all functions accept similar commands and can be used in the same way. The preferred way is to use \code{formula} interface, where the left hand side gives the community data frame and the right hand side lists the constraining variables: \begin{Schunk} \begin{Sinput} R> ord <- cca(dune ~ A1 + Management, data=dune.env) R> ord \end{Sinput} \begin{Soutput} Call: cca(formula = dune ~ A1 + Management, data = dune.env) Inertia Proportion Rank Total 2.1153 1.0000 Constrained 0.7798 0.3686 4 Unconstrained 1.3355 0.6314 15 Inertia is mean squared contingency coefficient Eigenvalues for constrained axes: CCA1 CCA2 CCA3 CCA4 0.31875 0.23718 0.13217 0.09168 Eigenvalues for unconstrained axes: CA1 CA2 CA3 CA4 CA5 CA6 CA7 CA8 0.362024 0.202884 0.152661 0.134549 0.110957 0.079982 0.076698 0.055267 CA9 CA10 CA11 CA12 CA13 CA14 CA15 0.044361 0.041528 0.031699 0.017786 0.011642 0.008736 0.004711 \end{Soutput} \end{Schunk} The results can be plotted with (Fig. \ref{fig:cca}): \begin{Schunk} \begin{Sinput} R> plot(ord) \end{Sinput} \end{Schunk} \begin{SCfigure} \includegraphics{intro-vegan-018} \caption{Default plot from constrained correspondence analysis.} \label{fig:cca} \end{SCfigure} There are three groups of items: sites, species and centroids (and biplot arrows) of environmental variables. All these can be added individually to an empty plot, and all previously explained tricks of controlling graphics still apply. It is not recommended to perform constrained ordination with all environmental variables you happen to have: adding the number of constraints means slacker constraint, and you finally end up with solution similar to unconstrained ordination. In that case it is better to use unconstrained ordination with environmental fitting. However, if you really want to do so, it is possible with the following shortcut in \code{formula}: \begin{Schunk} \begin{Sinput} R> cca(dune ~ ., data=dune.env) \end{Sinput} \begin{Soutput} Call: cca(formula = dune ~ A1 + Moisture + Management + Use + Manure, data = dune.env) Inertia Proportion Rank Total 2.1153 1.0000 Constrained 1.5032 0.7106 12 Unconstrained 0.6121 0.2894 7 Inertia is mean squared contingency coefficient Some constraints were aliased because they were collinear (redundant) Eigenvalues for constrained axes: CCA1 CCA2 CCA3 CCA4 CCA5 CCA6 CCA7 CCA8 CCA9 0.46713 0.34102 0.17606 0.15317 0.09528 0.07027 0.05887 0.04993 0.03183 CCA10 CCA11 CCA12 0.02596 0.02282 0.01082 Eigenvalues for unconstrained axes: CA1 CA2 CA3 CA4 CA5 CA6 CA7 0.27237 0.10876 0.08975 0.06305 0.03489 0.02529 0.01798 \end{Soutput} \end{Schunk} \subsection{Significance tests} \pkg{vegan} provides permutation tests for the significance of constraints. The test mimics standard analysis of variance function (\code{anova}), and the default test analyses all constraints simultaneously: \begin{Schunk} \begin{Sinput} R> anova(ord) \end{Sinput} \begin{Soutput} Permutation test for cca under reduced model Model: cca(formula = dune ~ A1 + Management, data = dune.env) Df Chisq F N.Perm Pr(>F) Model 4 0.7798 2.1896 199 0.005 ** Residual 15 1.3355 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 \end{Soutput} \end{Schunk} The function actually used was \code{anova.cca}, but you do not need to give its name in full, because \proglang{R} automatically chooses the correct \code{anova} variant for the result of constrained ordination. The \code{anova.cca} function tries to be clever and lazy: it automatically stops if the observed permutation significance probably differs from the targeted critical value ($0.05$ as default), but it will continue long in uncertain cases. You must set \code{step} and \code{perm.max} to same values to override this behaviour. It is also possible to analyse terms separately: \begin{Schunk} \begin{Sinput} R> anova(ord, by="term", permu=200) \end{Sinput} \begin{Soutput} Permutation test for cca under reduced model Terms added sequentially (first to last) Model: cca(formula = dune ~ A1 + Management, data = dune.env) Df Chisq F N.Perm Pr(>F) A1 1 0.2248 2.5245 199 0.005 ** Management 3 0.5550 2.0780 199 0.005 ** Residual 15 1.3355 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 \end{Soutput} \end{Schunk} In this case, the function is unable to automatically select the number of iterations. This test is sequential: the terms are analysed in the order they happen to be in the model. You can also analyse significances of marginal effects (``Type III effects''): \begin{Schunk} \begin{Sinput} R> anova(ord, by="mar") \end{Sinput} \begin{Soutput} Permutation test for cca under reduced model Marginal effects of terms Model: cca(formula = dune ~ A1 + Management, data = dune.env) Df Chisq F N.Perm Pr(>F) A1 1 0.1759 1.9761 1399 0.03429 * Management 3 0.5550 2.0780 199 0.00500 ** Residual 15 1.3355 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 \end{Soutput} \end{Schunk} Moreover, it is possible to analyse significance of each axis: \begin{Schunk} \begin{Sinput} R> anova(ord, by="axis", perm=500) \end{Sinput} \begin{Soutput} Model: cca(formula = dune ~ A1 + Management, data = dune.env) Df Chisq F N.Perm Pr(>F) CCA1 1 0.3187 3.5801 199 0.005 ** CCA2 1 0.2372 2.6640 199 0.010 ** CCA3 1 0.1322 1.4845 99 0.210 CCA4 1 0.0917 1.0297 99 0.370 Residual 15 1.3355 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 \end{Soutput} \end{Schunk} Now the automatic selection works, but typically some of your axes will be very close to the critical value, and it may be useful to set a lower \code{perm.max} than the default $10000$ (typically you use higher limits than in these examples: we used lower limits to save time when this document is automatically generated with this package). \subsection{Conditioned or partial ordination} All constrained ordination methods can have terms that are partialled out from the analysis before constraints: \begin{Schunk} \begin{Sinput} R> ord <- cca(dune ~ A1 + Management + Condition(Moisture), data=dune.env) R> ord \end{Sinput} \begin{Soutput} Call: cca(formula = dune ~ A1 + Management + Condition(Moisture), data = dune.env) Inertia Proportion Rank Total 2.1153 1.0000 Conditional 0.6283 0.2970 3 Constrained 0.5109 0.2415 4 Unconstrained 0.9761 0.4615 12 Inertia is mean squared contingency coefficient Eigenvalues for constrained axes: CCA1 CCA2 CCA3 CCA4 0.24932 0.12090 0.08160 0.05904 Eigenvalues for unconstrained axes: CA1 CA2 CA3 CA4 CA5 CA6 CA7 CA8 0.306366 0.131911 0.115157 0.109469 0.077242 0.075754 0.048714 0.037582 CA9 CA10 CA11 CA12 0.031058 0.021024 0.012542 0.009277 \end{Soutput} \end{Schunk} This partials out the effect of \code{Moisture} before analysing the effects of \code{A1} and \code{Management}. This also influences the significances of the terms: \begin{Schunk} \begin{Sinput} R> anova(ord, by="term", perm=500) \end{Sinput} \begin{Soutput} Permutation test for cca under reduced model Terms added sequentially (first to last) Model: cca(formula = dune ~ A1 + Management + Condition(Moisture), data = dune.env) Df Chisq F N.Perm Pr(>F) A1 1 0.1154 1.4190 99 0.09 . Management 3 0.3954 1.6205 99 0.02 * Residual 12 0.9761 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 \end{Soutput} \end{Schunk} If we had a designed experiment, we may wish to restrict the permutations so that the observations only are permuted within levels of \code{strata}: \begin{Schunk} \begin{Sinput} R> anova(ord, by="term", perm=500, strata=Moisture) \end{Sinput} \begin{Soutput} Permutation test for cca under reduced model Terms added sequentially (first to last) Permutations stratified within 'Moisture' Model: cca(formula = dune ~ A1 + Management + Condition(Moisture), data = dune.env) Df Chisq F N.Perm Pr(>F) A1 1 0.1154 1.4190 99 0.38 Management 3 0.3954 1.6205 99 0.01 ** Residual 12 0.9761 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 \end{Soutput} \end{Schunk} %%%%%%%%%%%%%%%%%%% \end{document} vegan/inst/doc/intro-vegan.pdf0000644000176200001440000051251112122046455016026 0ustar liggesusers%PDF-1.5 %ÐÔÅØ 56 0 obj << /Length 2355 /Filter /FlateDecode >> stream xÚåYI“ÛÆ¾óWàV‰ ÑE7yd¹¢TœŠ4ñEöbHD$ÁàHsñoÏÛº±]QU–à ÀÞÞëïí¡·ñBï‡E(Ïïî7ïâÜ‹Ò@EF{w^¤u'™—ª(ˆtîÝ­½OþOË\ûÕ¦XFþáõr¥óܧ÷å*N_–qä÷0Ð60úëSÙ×ð³‘8Õðkƒ«Ö8yÀì²_îÞ3#Q£ˆ±RÞJ« цy›ÚÏÒþ_áý3üuÄKE ÁA‹ïïÿ\DpÁЋ¼,ò'Àáå~ñé—Ð[Ãø{Ï3ï ­Ú{Zãú÷qñ7Î$@"òD%ÈšJóÀä©—ÄÈbʬ½¹GVðN-ü+Êžx™vó.´ŠLÄ<³@§tÐÝöWpÅ8ñ×›JýFN{>,Uxò$^¹+‘È¿‡¥‰_u<ÙãÂ'>â\Yìàÿ+œJ‰IÜáßN(}Y¦%Hi' ”ÜghºÀOtMZÒ<ðóiUd§§-Nø¸Ïd‰Ûy:E2Úÿ;¯,€A¹ÖðD5H޲Á©P[a¯—+£Â‹ç#måþ ¯ŠˆàÂBžÕW\‡hw£é5¾[*ÕÀ‹PA”›¶åõ°“ÄÒ¸UøRVB‡øØ=‰:ÔÝhXN;|éP®+¾'­LKÀ0Oü=ÚÉL-Të½%Ý àHw°ŒYè„ÌD¯#嘰K¶ —E ƒ[2U£ßÖtá•!Vº?w¬Ã•(7úK‡NÒ Ö/­7\…—N¨öQ ÔyâAÊë×o™ )µ*~…‘ŒÕ9Ê2Ú¡%È•Ôàlse¨jš©gÝ¸Ú Ù ãµϾ~øaáéX)*¢äjRÛÌìÍ,€ú ØH VÅÔ ,D¡Šý·ç¹öHCJ+í–‰5Y,PçÖ±\%¡¢xêð0ax>ø»—|ƒÃ¦âEà?ÅÁíÕÅb’Üúc%ÿxÍAÂ{—ƒ8Q»˜Ò9w3+&g(Üþmx};1½`sàsÂr=ÍVyéÔÃoØÕ*ÎDR‰SG ‚uÙ=gqŸV*‹cíÇÏ™šeg¬jlh·(´ÓØ ·#C›äò`=i”þG‹óörMÑ/2E56Å7Ó?«1$sj$ajÇIØ,][œý÷Éí创?`›3c¶Íw`?©V3J(˰é‚ÌîyœÓ $1¤uq/ÈW¿e»Ê$éŒqT‘1ošy»‘îúY9äëWu¨Ý–ç™H’<öÓßë@ôØ|DZ”í×’ñS¦è’T›ñwCs'1Ùÿy¹2ç/rzì>n¹8¨Gáº9ŒÜ8uW(É´v‰ Þ×ú£tãÓids]qixÑiÄQÛêø§eF_;нëmóàzhgü ”XÞ|^ÝP%gü¼HÎVh–*õêi¾*mQÜljWG È’z8ލ™~¨æ0žöUÚ´;çW„ßi£w҈ğÂ&i'ÙTÊõ'e 7„°›Š½«ë‘ §9Ý=é‹nQ·ÞåSïÕeX³…½¨?.®­'œ WÅaæÊ Ë•“—%«°fËíblÜm…‰g»/xï(ú]+xäq9º…¬º§6]]2¸Ê€ÐRd›AÜPÛ n§Ò:"Ž'Ês˜´5¤×´„&©=w¡%A š¨x¨†óX“ñ{„¢oÚÁãœÃšà§E×ážß˜îííÍX^? ¡ÆÓ@ʸúsÛ÷Ç×77e4§Ý)x¨o~ýGÑÖÍ箸iŽUên,¤¨³¾(á¶Yß<¢‰÷'à?8®ž’Pšmf—A“jê“£^¡°¡ø,ø±³í‡ !Œ\+ g©GØV<±¶|¨ƒµ«†e"ûÌ}Zµ‚·-gY¡rßB5²AúÌ:ùâ–€BJ'˜¿¸ÉÕ&•¶AÒŽµƒÉ3ß#c±'þ±¶}ÀҪǽ³cÛÇæO,ÅNÂÕ‘2­~Ü8Œ¹3µ»hãÌ6ɧ6Ϊ/yoxÍÜbl¡Ÿ30ÙÙjI#„Ž­P17@ðp²MºaW7´¦zîYðùþnñ/cQ8o endstream endobj 69 0 obj << /Length 2575 /Filter /FlateDecode >> stream xÚ•YKoãȾϯÐQF½ýb“$œñN°6 v½ìæ@‹´,¬H*¤8ÿûÔ£›lÊ”í9Øj²KÕÕõüª$Wû•\ýãÃßï>üð%[))r™«ÕÝÃ*S«4IEn’Õ]¹ú}­7ÿ½ûç_’‘2©Ht ,ˆæ·MfÖÕ¾h6jýi³µÖ¬a½5ƬðªÙèl}†Eíf«Óu9Àr‡ï õÄgÞÇe‹´¥ßoŠˆÄù ½ø²oƒ\[“ˆÌ9–nGrµøï°ƒÅDÔ†¤©ð­pWÁ¿ž·‹®âžýˆ¬‰TÎ5‘‰LŽšøŠWE&¨ "Ÿ h”È]ˆ‰éþø  ·¯ú¨ÂdMb—¼Õ·µ—¦}¸”Šë¶?ãJ“šjà¨(© ¯¾ê´DšH¥¤˜J‘¦5)›³œ¨£¡¹0é -Ut,®~¿Gªėz Æ£O’ø¾¨×%»šd¨ÙÞO«Îä+e…±N“¦S-t¦ço$É”€[åùúßè\%» ^mr•â¹h#œRÌåîªuµ™Õï7®U.“1w¸àŸ›Ä¡]áÖ©¡ë‚hðžlÃñÁ:Ý5xĵ^ïZÔJMÁm·´WWÞ >¼#Dbÿ¼Yð@îÆA0r¢o‘Uƒh·hH gdÇ–#/I¬Ð`‚™“ü! ‹¾ÂÖœ)Ë:”Õ•Å‚B•Æ4F[L ìT.25Fᩃk–Lä@pÈX÷ÀuMøx_ô‘K$1‹$Îö,~Y8$ÒŒ¢€Z°úÈ|ÉøhŒŽÒ¦ŒòÑ>&gª§Ró’Àû²l”k·{[¡±h ¹L’4JÇR•¯ ¾e0:‡¼fæqq)_ªy‚w®]*M„Vcø•Õ®íÀ#.f!š›]lkTG–~©õÞ 8yw˜ùI€¾­Çb±£ªCYw¼]cx Ç(RÞ!Ú¦}žâ î¹â„0ß¿~a:‘N9¤®ÎÅÏ·¿.9r&T¦/,)ØÖ‘Ú‹þe“Ùå$¾œM¹~=8µ7O¯UKWRBûº_ÎyÕcRä€bá¢*ÃÙ­ ªÞ7—I¤z #šÒZÊPGi¶ Rr-“r(ÿPx‘ãÓÁËqäç{Ê”?6dä%ê«ÒR¥„ʽ<”B6t Á@é§ûXíÜ’òoCŠ%ÂÀÚs6N†µÎ\Ö2SÓ1ÒfÊ.q¾ù¬šýù±÷7@ ¥×˜J9ÏJô2IÃM³Ì¼3ްïL JòE’ê™w¨QM® nü'`ǵ_܇ޥò t2.K¸†‰H¯+*þÜ­|¥ Ù¡OìÔ?ËÁ×f–ì4k½aàúxðyÙ÷±Ti2éÖ7;ÿrð³œÃ¬¥ä™%¾¢í' ° èyæuÿHÃÐ瓇&6Óëû¾JÏxõvàrð÷ªécWSóÞSèûyŸP}]_¯ä&IÁ#ÇÔÕ@Ì9Ε¤ë AJ’¨kC¹¹k[á€r˜ž+­úp6õÌØ{ºtÖ’ÁcÏ-HHÔ.#0ð·AŠ7o£œœ9"¢°ZªöF‹tÊ׈1l:˜Ë¾?ͦ¾ÿ\€¸?ò•‰ ]‚¼¸où†ÅàÓÖcÚù#c‡ãv6ö•ž_>ò+Z^aÒ‹ö,šµ»]pÍ>£ÄŠ_ÄhÒƒ33=³Ñí¶4á!Œš)€_õÆ„pàNŠç@„ˆÚš1mO—Çg ¯ýÛ0m¹çYêw–oV«„Kt<>@}©ŒÚKø¸g„uºîDZJæ.Ü‚£¤Ø˜ «â×I9Œ„Y4} E`;`lg•ïeëHñ½Ïʸ~¼»¼PÉ|òe´NºùèkÏÓÄ…±š×r‰zÇÜpIýؽ-bÝ6íõC\¦*·ҷí§ Ç©MŠ;–ÜÇ a¢\è"I(Mí`äþŠ0&fš8ñTV†ÀYR¨2/ùó þºÈ7:ϯOÇ^›B=ú‚“÷«&ß,Ï„µÉÛ^¾µR‹L]Ì÷Ñdœ?ž(]Ÿ¦I NŸ}Záqvð~rKræš·xƲ¥¹IHü>-Ð0/<ø4G— v4f sk:¶ç´YìlX6歷Ä5rƒÁR.U •Í;*cCXMÃû±3XaB2kÖÏyÃ.ÒÀBöjC‚°HiÊ8V9@ ’Ä/$Àÿ©œ="P<:9ô!ê0Ü ìsˆ¥‹Ðtè"¶ß9åEüfcÈB§Qúó{çY9Aú˜¢Y-ÊÀúauæÉËÁc„ë—l…8·ÙÛ¦ÇyêT(aO@•Ü.3#ˆ¬I?ðb†°2¿uÿmÍoh&Eú_Ænwxfõ‡Tv?Мr>»ùˆã|ì¹êSàN]F–™ÍE~µ›ÿè³`®-˜+³YüÔµ»nèÏ‹P E2å”Én:›Æh:u#–nO=¿(¢©–†òŽ÷nâr·gBrJR+v˜ôÕ‰%ár⳩CœxP[ÏÏgMõLÛ·Ô2ÌÔŒEY'W§d€뙿Ãöå¯sΩf¿‹ 6â™ß8KÌSþùó<±tçnÂZ°öÍ …Q tÄ4P–¾ôçЀL(£šoñ4*>¬åÍøÜÉõPññs´ô…gñ´ñYý° ?ØUA°i Òù3—º¤ïÿ­(—cÈ>W;‰ËŸ^>Í~1Ÿ?Þ}ø?R{ð endstream endobj 80 0 obj << /Length 1777 /Filter /FlateDecode >> stream xÚ½XIoÛF¾ûW¾T,†ÃáÔÚ¸ mûR$J‘#‰0E $Ùýõ}ÛP¤B9E…as8óæ­ß[hw¶ž¹³w?=\¼¾ â™rÄMÔìa5ó"×qƒYDN¢ƒÙC>û4¥æiŠ«…Özþ,á·ÅýÊÀßêêχ÷¯ïÆœå$È!).\üúNdzÄIB/DÒ…ï«ÙBN†Lþñ‡«EàºóºÉyñý‚Ÿ[Ó¥nï?»›ï+O…œë 0Òr_1½Ë¶kLÛÊ–£Tâ…Ql/*T48¹¨¦/ÆîN]t‡©~5^,MÛ “ºÜwE]½xo×ÔY³o;Ó¾áfÛ+Øõ\/ ÁÖ…rÑ é“И¶È{¢ÐOåëíò¦ìò´¯<å½xQŸuHŽ.†ÿ‹C\W¹: µ÷²K\Wk¥ÝxÒ)¯^½bÂ{«pH³É'q5ÀåðØãã·iY¾™’4€mVo·Ìä†_áX;‰R|o]ÖË´dºû²+òbkªTµ»÷YZÕš_öm¿ÜÖU GL™çmÚ¥àQÏÊžÒ÷¶h»´ÊŒx~Ù¤ÏSêÝZmlˆ&!tO±"§A3"e^ÝóN­®ùy0飜¦ºÿp¨™ ««/¦Y›êqÂ{Uï+IºêL3‚xלá.¾[3`ÞÀ«(÷û[AOÝ¥(I¶7i¹Ê6iµ[Z‰×ûÉŠíæi—V¹Éíµ<#ÑH[»m!ûò;®Â:™)ßÑ~èamU¾ëèÄ›™Ù¸yP³%˰˜7yE<…?®«Ž‚ùÏpw·Áí¬(ó‹^×D ®ðËŒ±O+=/¨{ÀÒŸWu/ê.@ºæÝ%¬÷¨¿¦ü8\y¬áÏ3ó©WüÌQ¬@b&ÐÉE`»ºÆ]àÁ·ŠˆŒ^' ÒÀ [ÛñêX row@ÎMfïk* bDÚɪ®Ž†ÒºìÓHi'ðÉrVÒ:‚¤ð‹fjoŽeã€&Ð镃¿¨a[ó nwr_/x½ÛPäù˜#ïë=ÞÉy#B‹%ÛÈÜñdÈ6Õ‘SMžZdÛÝ»–-Ps*n8kzä¨0fÓdS‰áÒYCÑØ‹u¸U”‘;D¥€>¾ÚŠtjRѰŒ•%ÎÒjÂ|Ò ´+-Ôž‰«8íPˆZ~O%ã±V¡£U/iW‚§§'ÇŽêÔ[ŒkZÙi‚¼Ý‰‹ÖŽÌVðã³G,^~|w1ûÕž«Ñøl1&oz£˜—@:‡zÜ×lÛCQ:DÊv¬å±AÄLWÒ †+ô…®›òŠNGßvJäG眺T-ZB|ÌM ‚$S, ãþ¸fôŠD +"ëN”zÂ$Žâ£ÑÐQö¸a_Ò K€z%bf»“–{ó‡ QÐuò%•ªMä&`–›‘­V7–ƆÖŠnÛ"+I:Q˜ê;Ü+¬Ò[Ñš«ü‘OTVŠ Õ³È·¦úç ô¼­±ÐáÚ–‹Ý‘šÿqk,mD—ÑǯkÔœ‹L#p*rë£``m@ìF A z‘i—Èñ™×­U«;6¸©\ “a…9ŽP2k^î.'’+ˆÐï«¥ †ç{ðhvj`}Š!ª \gâ¹réT%?vbIÎjÔÑÈ=Uº(Ë3Oâ ˆ‹¯(„±ß¤üuðršq¤ÁÛª.ù„G‰ù(®ö<¶ áǧ­ºåmê ’ ñgWù"†‰˜8‡v²rC'’¯ò*ŒÔÒ; …ÀåD˜†ê^'„é³^¯&½îƒüþ“*< ékM Žé&ú¥y΋áHTبÑåVÜÖWTÙ3;úCjÓÜÎ>O틘÷4 ,ìÕÞ2»©IU‡á¾…LƒU"`Ýfž¦zÑÂWز¼qÀ¥{T2OÒØóæ¿€¿ü@ʕ̚ø>šiý`%<%(ÑùI…”ÒeøÄ¦#¹H€-¼­ë­Ü>q aýÄå‚(2#‘eRd¨-ʘÛ+RÒ€× %åSå·¯kôï£4ëSO´ãïÁ˜º¢F3 ÿ›u¼©YîN;g>ïsÎõéÇè1ƒ†í£™X.„Ä1Ÿ¼hw%|LXµEgÚËkûYù4:uXNvÙæÆ³ßÂY]Þ\6&·×–ë›ËgS–õá›z!¬ÿVð9:P꾇²—åÞô¢zwÛçÏÿòù  endstream endobj 86 0 obj << /Length 2228 /Filter /FlateDecode >> stream xÚµYKoãȾûWèHfO?Ø|ädw2Á‚E¼ l²9Ð-)+‰QZÛ9ä·§^Ý$eÊöÌb1ð¸ÙÏꪯª¾jëÙj¦g¹ùæîæÃ§rf´ªtefw³ÒÌ _¨ÊùÙÝrö¯$›ÿûî¯>ùÑ$ã åm[Мç¥KšU½Ÿ›äó4Ë\íÔ9—l k?·er‚Æ~Úyj‹dy†æûpB+“O<ŽÍç.e|_f‚87ZÄ¿ü}q—ÔØLp“ÔæN¹Ê±¸Ÿd³ÕiþgDæø?5J·…ŸÓ[ÂÀ°M8µÅ^5)ÝŸïn 4ôÌÌlQ©,«fY¥UV³Åîæóò¹Érš1hÒPX'¾Û™ÙÇöæ{øwyJ˜š†3ÒÁ!“vÎ| J©X)ÚÒÉØ…»Peiƒ­Ec¢–ÐÜ4{´­3Jk&³â&aűֲd‡›œÖ=$ ÕáO°³žC߯ø_Ãókü•Óh®_àÞ?k“a›Åqc¤æ¥*«(ýa vz)µõ ¨,Lz€ÍÎû €¢qÓÌëä»= Y/(F³n'U¨s•ç_§CR†(¦g38®¨à÷˜¥®„-,€Þ)Ÿ‰U{µË™©ÓôÇð&Ìé÷+œ¼ý”f§s¢©—›+ÚÍrUeñò¸ëšÅ¢óè.x>|ÿ²§6øo­m²ƒkÃç3Ñð>T³¨3Vóª&øM¨Y«Ü¿ U =­P½Å±2é(’¡|k1ƒ…#|Áv ö›Ò PDdíî0%¦UEjo§6Ê•îÑ»Ø-»E½m¦ á3&R¸^Níg1n„i›®ýÛǼ)x‡ÍóWˆuJç_`ë{Ýàž-8Á'g±ÑŸNá{Ï’löÜ/Iã ¯èð¿{ñ‚gžTO£r¡ïÅ~åå¶÷óÔgÉš è-£#Ó¥Êí…—vmŸÿ¢k@byF%µg\à€$J¼_×LÉ[å*Óö=âÊæÑ{ ŇZÉDˆ+úÆ¡ÇMð‹±ü ’9гÏ!\ɺŸµ×ÓÁºRE]òÐnö§îòÊ7\"÷Ñ%NÍÓdÔ7-¾`›Í²ÙŸ6ÏSÚt*wÑà~&°09Êa@(”1Yà eö®0K°*‡=®¶SXUê| h>£6á«›òM8ÄT 8oò ¸@á«¡WÖù~™{ðŸUC÷†ûr†9¶C—[òá4º|av·¡è‰:Šè9¢Ï4iÇ|÷Äcƒù‚6Y¡˜õa-û/dï“8©Þx }æÂÛìEÒ@/šÎ{ôQS=s€$È‚GÐÈ9´$•Œ8n;t5/?–-v­¸/S ž¯€al'§=ðÙâeÎê3º[NÔ`Þ’ð€f-ѬÍ:ËÔy,!ÞÙ¢>š#†œI9 jŽÜ„´E4Š˜Ý6P¿ç.‘Bݲá%„™Ò;ü܇øÑöXÔïà’ãˆuJnY±üí-ÝRN’Y+ÉÜ¢áØ¿S¯uò-îs¦­‰Ž5‹ÂÊ‚©¦¨e ÑÜßÅK íöí¸ƒÚp»}w¢Ù9¥Šv¿Âž. -±È±ë­a7£ÕQ4¬«¹‡lp\É8!û¼C› ÃäÈ9åXþÌsjÂNHT—2xà5«S>@êdL ,±A¨ Äøè¾z .9ƒ…à{ÚŽ$é¼é£IËÍItQ°¨™­P{A‹I¯Ì À'ÁÂ…)ˆòST«¼Ub}¼E?ÎaTõHÎŽ Œ¦õs¥°ÆÏ+o MmZ¨¼r#߈kvïð41ô½‚[5SÕ¦·Êç¯+è{îšžL€ªq<ìx¤=ÔŸå5¨ážûPÙÖŽT‡1!êk·°aÓ·›'ÑRh|‚&/k˜ŒÖô$/&°†8á}´O 0ùE/dP^@yšçWh.eò ¥ñr‚3\¼¼ÐkÎ!°uˆx¹NæÆÒ!<ÑPŒ«ï·r“/AFöõ18ƒ*áü‚—M ¦^hü1§öx˜Ž…™ÉÞ ÑôÁ3|Çr¼ëÇ›`Ï Ý3øŒß¸ÿ´îI ñà ô л ~/ß}äoÏáŒ<¹°³<é ¥¶äñ8àA›Ù<„Л ¿2ðHD¤$¯íìÿÎõJ¾Š¹ÞXÿˆË^ýë×ÿ]¾ endstream endobj 75 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpAlTV3K/Rbuild34677effd016/vegan/inst/doc/intro-vegan-006.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 89 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F1 90 0 R/F2 91 0 R>> /ExtGState << >>/ColorSpace << /sRGB 92 0 R >>>> /Length 912 /Filter /FlateDecode >> stream xœ¥W¹ŽG Íû+*´aˆ"Yw*ùH€<80ÉR°X ðnàß÷cß»7–­`¦‡Ã~U<Y, ï‚„»ðÏðŸ×¿ÿö&¼½ LÌöß—·ðoÍáßáÏ¿‡¿ ïð¹Ä^©•;q _CìB¹Ïâ}¸J6/ý,îô“¹«~³~š]<^프*jÙ¨‡”:„‹DªÇœ:Æ7¦XHu×)˫ᑠ•rD«cxéÔø6¯æV0$)$Kãº_Äùq?¿üL\^¾Œ]õ»{‡bõ›)N‰úðþç‹8œÅOÔï¼Ê²€. Àİ7;æjÅ6?>‡?·ï;Feö0\B&Mx“§‹y&q”̾{³ êëÃêáÿÃ5ý<YÕ—–)5Ĉ©ŸØ=Âø5ú»ò‰Ý#ˆXHš޾Þcè…R?8‡œà¬lggCÜq”Ÿ NXE¬ãúÃnÙ† ’¨×3aOTázGóÊ'ਈŠBòäLàa5#r<—Z©òÄû3ðÖ©LÌ«§\„miÎÄu+SMÕ<¿ñ Í¸J²ƒøD¯ÈÖ %!ò'«µå»ímøÒéå¸Ó·§~mêMxÀÈ69÷Ó­.ŠÉab8æ„*†+EL¸[9» –ô©e©ƒ—> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 99 0 obj << /Length 1950 /Filter /FlateDecode >> stream xÚ­XYãÆ~ׯ æ‰V½ì‹‡ à ;† A6c†ÉÑ(¦H…¤vvüàßž:º)RÓ{$;$û¨ª®úê«j%Ñ>J¢ï6¾ß¼½³y$Q$…Œî#•%"±Qf3QhÝ×Ñ/ñ[—ü9lwZëøoðúüq¼kào·ýçýoïÖ’¬…=$ÃâŠMâ_?ßÝo$¼$‘Œr™"&Ë¢ê¸ù÷FØTš”&¯4å·¸·ßUô—~ówøçû%;»[È¥“¯Ì…ƒ +Md•©a£ïèÌ2ÞŸñôÍê›í.µ2þv»3:= ãGWðÚ·ø‡?žáOËëhY} ?Ç&'µ'¯y; ªMÁ:O¸¯ŸÀÓY?ÃÇ:xhx`Ä( y ô3§íNªC·U9­ßàDªÝ^^ÒTN?ˆè/Ý™0Фè£Ó(‚|{]¸q§t*¤,¢6B ýUÉdµýÊùðšg¹ÇÊ#èWy—g§»?Î^«jzµ?“Â@ìÜþ~¨'ðÄÔ–M€fVSH¿ü¤ž12Õ"2¤¿Ÿ@3|Øø<:·ãÌ<²¸§<âýOQ†9 ; ¯ñ‡1 ìUšFД,gZÔ±S…åØyK†uÜvÒâ‰ì:|ä-Ž^PšpÇwþ¾ŽëÓå³å= ¿Z‚æTÜ?·ÌǘxÙBm‰§ÿ€($gÔΘy”àŒÀ<–Ég{q+\9ˆì”Rÿ3¬tab#N“ÝZΡw&†0fáu…±é·fêk|Ù\äÏâ ñNEˆáw^!ÿ=3z4`àå †Ë^§:{œá{[ò¾¦½Ì£!ÀEôâ$GH€'#2«X®ŒoFø!±hO,:Ë–¸NrŸGž~!œyÉŒ"®Éá{þ˜±¿°†ËÝääyo`ÎãC}7OíL*㟷¹vê "ç²ãwŸ}'NáÑ9c¼ˆù°¼Ö)qÖANˆs±Û$œõÌÖ“$ñ~(OJürÅ׆ B“#ò²“ –Ù¶S#T’yyL(O§:º˜Ñù&$<6³kÑõc@”4`ÿ•(ÌôP³ …Rú’\Á‘ä³²Í!Dej‘ê9aM¤A¯6®4I…™\_UX_ø«vΟ³ÿ—eÀ(MTgþb‰‚WQôÙÕ£AÌþ?‘Ézà'YŽJ©qL>-è;NÿTV-8>E Íâ̳ïC@IDš®‘mÕÌŽƒÓ÷4g¸ŠOÃ¥,Q&ŽëRü\D{L«¨BhøJÁK.T¡X•BFPL â÷-¶>tÈ?”rÀqä/O;™…€ù±ôe”hæNÄuLìŽdyVà•ˆL¦lÁOÛÜÄ; õÈ@´‰QÞ-T ÀcTQx®É ça1Æg°¢=Ñ,Á^Êš" +:Jì)ÿ‘˜ï¸*ø´ÉÕ›ó„ß„àÙù˜FÕ²b°a/Þ=‚þä•8Ž0wî¸WýîëbfT‚ö¸.ªwƒOL®X³Ñê’²%°+6;#D;KRhàÁ÷hQWyD÷]¨¸+0IærYÝŸÎm¨w4.5³ »Ø™\±Es£óY¦€°Âˆç×ÝL(ÀºÝÌ4m{8MÀ  ›g×FA£ yÍJ¾BŸøFV§ )Âå`â ‚èPó4Jn>xï^°‚„“fË]tG¬YõTexšp¦§Ò¹Çñ0 &7<Ë÷ŽÒ5¿:ͽ܀«  iWÑO‡º½˜Ég·VýCóàaä{i \žêlíµ™ ã«.wò73ª×·ê•ÐôµP†Úר94µw_Eéõ–÷ï|÷¥3Ð-vü¢OÕÓ­’ŸÐü°¿½yGôÏ~¤j>ÞJ¡½ò«„Á`ÛËëûÎ]ëêeÏpa÷ ·ÚzÑj¯.}ƒï…pèÅßáahG‹ü8únÄåSM?-Õ®ê‰Û瞆ŽA.OWýTµç1ÔBéTètf2à°èO¯„æÂ*µd¤œÏbÑÌ^N«ã#éØyÚIá¦%_ÓÎÑ× <±ÒôSÛ‰±[ÔVœñ¿ 4È£JÅŸvŒ„$ΓٰNCª/&~ºçÃÜž‘ úƒÄ\ˆìREÛC׌!ÇCwT˜Ï^ùÅ?¨»?^hµ©ÙªÃêÒ©èƒþ'^^×s7ü}Õ‰,Žtê2_ †þ9t> ÕÙØ«Þ¼õ}XãŠÉçÕY§YýÚ06è†)¤0-àf4Û6ÿ h#dì狈k­÷ÃÁ•à‘—}Þ™@Xõ ü ¡áFSu ÿ¾»ßü@ÐrÐ endstream endobj 77 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpAlTV3K/Rbuild34677effd016/vegan/inst/doc/intro-vegan-008.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 101 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F1 102 0 R/F2 103 0 R>> /ExtGState << >>/ColorSpace << /sRGB 104 0 R >>>> /Length 1184 /Filter /FlateDecode >> stream xœ¥XKs7 ¾ëWð(Œ|óh»i;ž$“XšöàÉa#˶lÊú¾¹;ÂtFŒø:ýà¨c$ÂDîããaçl£a¾ž»Ëm“*4N0§£#éÀiÊÚà™’©bÉÜO©ï¹ÉqÝû «cˆ MUyfRÁ“¦=°‚×dG•®ŒcÆO‹Üg w¸‚ŠÕ 4TºO«¥Äùê'Ðõ™äÿð’þ+‘뀈bó©Ï×å~}x«¼iÏõ@-Jʆ‚Þ?î·›»\{¥4×!ÊXÕÓõüò„(IÌŸ·ßê—Û“¯by™ã;¶ô-|å­ =z=f»CUp•ÜmØ ±Æ|O/HÏ"?:8uJV¸Âª\ï‹2k"½Hœé_Øþêù±X­³íiÐU©Uªß?6«²8fçŠzjäëUÇy£Bw¦ùs>ºšZ·^BפösUloË"¿ô·ž j4¯ç›~8œ¤¿ósM½”o14´éºt~ÿÞæø&ßE¥+:irý°ÞÏÙ k«yÊWÔÓ­Lq|>¡9\ÌwG®•ì8ˆfè`¢¥ÁÆ¿ôSL(]‚…iŸZWÝ1/Šrõü”»«h¸]`ô5í_Ï—'\ÏbÞÎf|PH©wìUÕ—„7¼ÖûlTˆ–ºm•m»›]öñ ”ñT!±á÷EQòú™ö&)JÍ&:±ÃÙêþq“Ï>]™è–Ù`Ü&üØâ‘ †r†O‡Ä5÷ë¢ü–Ï5¾Š†ú‚5×}“$ ®¬ÅÝþ ¤,g+åšø?—EYl³×ç›'÷Ū=VÙ¸;<ó×ç…S_ÕiNú°ÓWÿ*T‹zÆ<+wwëìø‘f[èì’ýùaw¿k×ÿ2ûa²ª endstream endobj 106 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 110 0 obj << /Length 1575 /Filter /FlateDecode >> stream xÚWKÛ6¾ûW½TÞF )J¤4Ò$´@Ú41ri TkË^£¶äH¶Ó\òÛ;R¯¨mP,¤†Ãá<¿Ë`Èàåâ‡Õâám()r™«`µ 2ØÔŠ\§Ájüšå﫟Þ¦#&¥­Hc "ˆçÝ2Óa¹+ª¥ -£$Ñ!ì#­u¸RµŒ³ð ›þëeÛpsíiÈP;æ3Ÿã¶FÞ;¯Š'¨³N}¿Nlˆ¼~Q¬ˆsgÊ­²» ðò³]M.Ãg5ix]‚b%œü&¤&¼GâåüÄ̆-lÏd(*W4æÅk ™× ‚ è Ò$ç—K/Ÿ?¡Œr¥–Ü„’xÏ žžöî²Ab~ôºÝ1“÷L±kŠ#³lçŸ~…\U±ÃËÇÒ…\“>å ¤^ËÔ}Å+€Ã(5nÅ(/V ¨ ¶¹HàÙ$—"±6X"5*1Ä1ØÒ‘¿ç<êày½øþ¦ñõ¬‘#¸è–ŨOáäkXéRÉ{ç¶½¯AºY´]…‘’Ĺã‚ µùˆK¦ñMBÇ §S÷–ÂY{ ZÒ{ƒð³h†n@Ê¾å•æmÙpž÷èAïdÕ,~"v]{SéÚÞ‘ÌÒcÔSYÍ*7-“Ã@o¶}ÐØ\3Šèæ…ÿlW_b ´°þ?ð¶o/Ív&M+2£yŠ)òñÞºÆh`Ø`® ~p N™ç1DqÿIÅ Í|¦á(• kº²9îÖ_j§Põé¨zàÓu÷*ÖɑǵÚ'˜#Óµ%­jn©Åd˜]^ï1.ŽÍÒ$Ú(…K WÂB•À×öêO—–îúšÏ¢¡3t§döö䇳ªë°0qí])ܳ ªé%·ùSö0hÍ7ŠON¨‡çr=U*Tëÿ:¤m[Ÿ·8ðˆØNzà-—j2AÏ 2¤Ÿì§ôî…¥ºËÒ5Žî‰±¾|ñ##óÉ܃ïÀ1ô2sJ(iD>è us¼йbÑ"Î̸98Ä¡ñºÏ7˜ÅS©:\DUÀ0ZëÓ`´©«ÂÞŸø¸3® H–­ë& ;~9$é¤5B³$DßUî,r a~ù ¸Lf.Âq×¾bh¢¡a2Ž(7Èö#Uѹƒ¶É&Ä¥ë¦*Š  &6¡ t•8֣ܛ'èE‰•$0/èãûˆWÎ,,4"}æå©âõ;^^Ño Ϙ°)ÎÅãÍ¥*Èp´SÙ+)%aÇr%ræS]ËPÝ›››w/ž­~yó–Ná(—ôO`ö Çϯž¿å Â} îÃ}|<|Ý AOšN‹ÈK!] ‹ñBbšÄ&þ#6:–þœ™û½TYžñÇÍœmQÍ‘ßîwÕ~+øâºÞ”í#§¦{å°øÛî©:jOìh=)u$Ñ‘</Ž<…×|v-DAÜßméâùFWAÇ>¬—sq†FÛŠ.f}@À€Û§²G£Swü ’FÝM˧‚ú2¢s?þá'èß3sû endstream endobj 96 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpAlTV3K/Rbuild34677effd016/vegan/inst/doc/intro-vegan-011.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 112 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F1 113 0 R/F2 114 0 R>> /ExtGState << >>/ColorSpace << /sRGB 115 0 R >>>> /Length 3551 /Filter /FlateDecode >> stream xœ¥ZM¯dÅ Ý¿_ÑËdÁ¥ìúÞBB"$ÈŒÄ"Ê&$Y ÷Â,ò÷sŽíê[Ý4ïÍf<õq]öñ±ËÕrùú"—/ÿ}úÿ}þáoùâòå»§t¤”.ûÿß}ù-þµ×ËÿžþþKºüëI._㿟„.ß®2ŽÞ®ãK¼Žç”YÎýC<Ç÷žß¿Žñ>Î÷ÇçûðÃOOŸ¥0Æûÿ\Dðÿ¹,*GÏè}ß¿\þðY:ê/ï|úó{Ûýãˆ*º-ÇØ+VÏz´t³úßξÛj9¿íí‡ ØÍÅ<ôèjv»7ƒ†xŽ+>”Ûu<Äm|ö£–sÜÅs<>¸Æ·ïï§ÛŽôÙvÒ"„ŠH=rþ¨g>º^S9ÒG]óñ圦ùæ£Ës/G˜~*ÒY!ò¼Äøã9&߉kò;‹ðOÅîÀ!tuK}ûÍŸÞÉ+‹¿Î¶vYèÚ*^vµsíDlüñó¿/ß_~zÌRò»YJ9.E6aRÉéh uúþùIšðSÚ•<ßͧµAwüË0þyyÒ (OðYãɰ‚§…¦ý3dmG†á²ޏ]ÏsŸGQfæ/Oybb¤Ö£$ÌÈ]ø­éP®1H9ÉQ3dèªÝbÜDMíà©QŽ>mù¾½aÂýBM'bú©×£¶ þ±ˆ­/GÃ(Î5;a–0-Ca¡%žïVs¿åˆ—éÚ¥ÍJð͔~1¹LÈ9Ì9SnF,&+çCÌŒÀÀäø\ó;=¢Ý>ã2¢ŸŽ.Ã9£…\èXÎåz 8gW Y]®.c¢º\Mξ_¥o\F˜q¿ÑM6Æ£,>.܈ßвé;m¿2ÎqXÝÎ[,ßñ¼ÝåοÐÃç·£wÈðª¯TºC›†>ÅÓí{%f ³$;\±Ž•ìü újM_E0Ÿm¶>Oò‘b[]f_L³@ <öÏkà_¡?rŒf“«ÉŠm|¿B”ªÔ>žÉ!ФZV äÄlçÏ®Ÿ`šïŸ¨˜¦ûcãA¹:ÛQfà"(Ä죃pf&ÃnIQ 9d,”qÝa‰ù£†>%Po߇ⰯôÄ !žjÈÌ“ðoöý ìGüÖÿÒê)WÊzÎ^„þKÛ8ü§m[_«óùÚ0 Ù¿Øißô#Ìò¦?`Vòv>øÛýçÌjßìÙýö#ìt³/dNj۟ò˜§¸>·Óü^ÚüK}îê«ãÄæ—? ³RN|1L_ÍåÆm¯ø$¸>Ž_ò{i'¾ñ¤zâ_Zxõøħëãñ#ˆçÚÎø’Þœ#þ„,\Îø°°ó‹Ç¯ £±k|Ë”à'Açüåü s.>sþ@Ùë|ü’:iéäϵ'?!Ó¦¾ñ—¦Àoð›^ùÊùnõø ~„›\ßàÏ\oùf ¾tþ…YdÉägâilücÍ´ñ;ñÛ7þ¯í”™ðÇuþ™?,‹ak¥M±“¥XÄ%˃ô#0"€2+….®1© ЦG ¡ wFpu+€Ô#½{Dñ¨™òd>¶ÄO„‚!Œ±hî‡Ä^¦Éjˆ£xâGD´f0 ªF!0=Ϫf†¦Lu† «¬°b 2\iãøÃæÃÕÜoÖRÌÛÃ2BJÎ –ÇaÁ¤‘·1@ ⟻!)Õ"¢ E2ê °Ìèü^Ü[([ÀÏ:ã‚ ±HïMen‡áAÝT{˜º†]ìÔ<Ú,´T&͈+†P/œ€ðÒ-C¸>ˆøCU#ãj‰ÎÁxˆpÖ–š#"èj #Žð¨‹Èh´‰s1pd¨ÈBj2Ù¾Åc¿iãÎÉ ?f`F”†#¢¡ùG`XËxˆ†áÁñpÌôóz!Ôm¿úÑ‘bös{¦¨È»G„°ìfopÈæ¿²¾ã9b­ÇóÚÖ4¾†ñŠ)ôCÆuFý9­mçÃgO~~2˜gH·Æ›ýÈxyžöe†ÖÍþ„eª§XýŽqúOF‹ íþ%ã:C»ÿ Û¨8 dhϸŽÂØñãø"£{Æuü1ÃçU!òê‹ Óñäøe†pû:¾É?ÎèŽfϬÜ?\æxñøbEàñäñÇŒåÙ㓟õ èñËŠÁô‰ø¢¼Æ?‰×üü ~™:ù£6¯Å/µlüCFN?ÕÈð‹¿ [<,~Ã|Iÿ1qÈÆ5*ÚÅŸÐÇõ~…þ’7þ­Ã+þÅÏ8ïÔ¿aËP‹ßa?Y²ñÿâ㕊óÃmþ`F)„n·‹¼˜L„ccÐBjU«É-bó4Ó³f¯.wB5¾Y0ϸSDͧYD‘Q,¢­GÆ"Ååj9|DFÊÃ/£@xó›\£ëy3f/6y³k¶ÐtØ\±š&ÓT¸ Bm³xF²Åe7™ˆO‡G\F ¨f0‚Ý r¶â2K 6ƒ ǧß9²Ø1“ÑL?±ƒdmŒB¥Ÿg4¤2v£°­1¦â¼°w^wgj˜ÇšÙ'#P-C(\óe8Î=Šš§Rž‘yY™—\5”­’QêCXqÓV;ÁžÙ^Àúº"öÿ‘HuZ!/FBªM/áÓš[‹ÔCû âýN‡‡#3ðá5'©çñœšõ òªPêpTî)šÕŠQ“½†2†àü¹jDÚrñšÒŠß‹;c¦a©OÔœvy£¾×šxPŸ5[ÝÎçŒ û±mÈ;ʺãÑÞpõææ8K¹²­'#ȶ?`Wtû~MOK?Àpê¦?Üèwü8_‘Uóúù±­á}Ù‡W¹Ù/¯š:ì ·çºÙŸ@ßüÃŒ›7ÿÖe÷¯¬ þg3©løHÍãaá°o«‚cFÄ2g(Ç{¹Q16—… ›+~uŒ¨Hß µìŽøWÞIÓŠcxçÇãÇzéŒ/öD¼Bôøã2çOmQáFüêÂwÄ7{ Î/ÿTÃãÛù5ºÙ'øƒ=Ùø…,‹¿àö ªœüÄ;@Ýù ǶÈâ7ÈZ7þCbž;?R–?1ßâeñ+ïŒsãß=€Åϵx†[üÍ;öÜø,müÏ«L6ÙóŽÑzÈgþ°Ö^5‹YÎêlíU+v,gƒ’š<Ç{¯Žò®€[¤Z’9LœÁO¹µ°ð𙋳”­¦³Ði&[ ÄÐÉ>¿8ÃÛõÙæûxâÑm¿/þ=«é²Z“‘²g8±Ð“+B’µŸx÷_i¦É–1™šæ°ó;Oñšdz†$b³w=ŒámîÇÅ" PfMXëÊ•Šðrk51¡hë5îLU¼¦H®?#,º ÁÙŠë‚xÍ’ì¼%º€¬y*å°7k$k‹#T ØLðšç-Ñ;5†fû ósÔH‚ÔPgsû€m ž¥«3^×–¸Z»ã ¯ÙAí¬Ya½ëGð¼¼sxÆ<¨ #ëºåŽ/Ɔ!Øe’¨XØ•€"Â;š#³†…[½+€ƒ²Æ’¼º*ÃðÉ aD`)Ñ{æA‰OÀÀïˆÀ{ŸCDƱTÀ«CÔì™—AIqG¾Ž—Õ…Œõ뎹öÏ«‹äßOwÈÐ/]»¬®Z5tœr–íüìîö9e·_’Èðaß$a°?d¿“„ OÞýÇzßüëW«Óÿ©D×(ð{xFüðªU6|ÁžžiÕÈOIÿÀ¯HÜßð§ÇOàwD¯é#>°Mm[üȈøˆøb)mñ§Q1®øÄg=£EüjDÄ7›‰²Å?¯cã>–´?rŽ 4ø0p¾ þÁ1Œq?±+Õ6þ <¿–ÿ•|üÈ.eÙø“͹¹ñkMÞƒYü{Í8ÁÏ5*ÜÅßÌ(cãwf”ºñ?ïh>¿®;ñÇmþ`F‘ßó4½} €÷˜ËÝ#ã1ãæìьۇ1Έûì´y¹Ü=t=˜q÷ôõhÛdzG{Ü>·ýŠÖÇðN1Z÷±›âËåöÁìÁ„»·3îÞàíqûŠ÷ð+7sfÜ=åqFh¶g®—ËÝc܃ì¿DHæÇ{Ü=ð=˜qó@øH‹Û'ÇzZŸ™“Ý^çN~ø¨ÞÿooÑŸö{eÕoªùƒ£CÜåç«,qY]ó—üO>gÿ2ÚnßÈÏçqÝöÿgë ²q¿'øâ«õÂýø V‰·®LWvÒ’Ÿ¯2 UW«É·Bþ]›7½F㌺þõ7te @ædÝœP¼½X…ü|•%FÖü%¿]WÖÕ™1× -ÿñÀoèš#=Yy]«§CrgÉ9è}Í_ò'èŠ-Xx¨]õ©ë»¯Þð+‡»ÐØ>¿Bãw僻аßiˆ«§ÿ|™Ì>Xïaµ9“%Ñø•Ç3UÇðûŸ¯?óøõålW©Z ¿ñxÕröƒU¬ÄHoø:ïliXW7~N󺯫_am¯_ÞíµxXõðzÃ5#K{B|÷YòÅvÚ‹æ«—³Ióu{ö}½ÙÁ#µÚsßèo1»%:¾M @xýòj ûñÄ–óG ì,ó'‰oÁ Ó³·yä-_OÉ<ùÀ«?”*+Ó×/ïÞÓ™V¿Ay+<؉)oáŠéo(~ {S´²> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 123 0 obj << /Length 1734 /Filter /FlateDecode >> stream xÚXÝoÛ6Ï_aôerV©¢D}M¶¨»ëV¤Y_Úc$ÚfK†$§ÍËþöÝúp•¦Kâñx<Þýîƒñ›…¿x}öâúìÉ*JÂ÷2?‹ëõ"H|ÏI”xY-®‹Å'çíR8ªG¹tÃ0t~‡Ï¿á×"½Òð¬–^¿}²šJŠ„—E°ÉHãÌ矬Ât‘yYÄÈêJ)nyiöwªR½×U÷bµt#ßw\ß“Q(û/üe‚[|‚˜ 9‰Z°M8Æb“ 6ÈŽØWÏØÎ»ºÃ]ë¦xl(EÙ^>jËN?ê‘{¯™µ„„e¿ÇSÒ,^-Sé+kZ6ˆUw´NF^ Úr~‚=Êöجg6‰&Ò2’U §Þ“x­ ¼hø ÁdBNÌü ³í!¿µÊ[À ªiïkù?Æy p"%L𛀅œÇ†PÇ…D³@ˆô°@b½6É$ = €+B/’™9ûx}8œ¬ck†l¹PÏêÀÒU7¬k-‘8ôœs¸4¶F߀¿uŒðe±å±Øf¹Ã[þ'x»†Ù,Ê-z¦H.ø`qy}õÇ«1àGRVj_îî. ïFÛ¶TÕ\`üZVs…8V9æ.^TáËînRbXx ‰n§.æ’æYýyµ¨ýW«ó×€?xÇKUu×Þ¸Ouu[6u…õ†5ó¿Jq“§QúlF·WmWîUg³t¡7Ö§µHE½¿˜Ûϖ®îÔn¢f8[l_~䓿u£YA˜#è?ØåÙBH@^¦^š€Ëeì…)BžKßKŠD,Fš¢0µ‘D¼e¥8Ëzè• e·ß –’ýós™Þ¨¹ö*Pì3 ~Œ7– ‚Ìé¶œY´6„½Í[H*P‹8GáZßyMi¢ã•ªäÄ®!>s¦ŽÒX1ÌÄüz¶¯WIç3tX*))ƒ L} SÁ#œ@Jè+ìô%Vª…”ÖµIPl€I‚"ÉjwÇÍi‰yLˆÀ^c>D­òÞ³e!Í ïõÙ>ÏÕ\â8Äá(ñ`ÒÀ„œ¥Æð…ݬ µÆ ‘FVC* dÉÉf8‘ž?P¾DŒmmß_7ŽŠÊ‰¢dUæƒ\JnSl[á¸7&Í,ÃÈ ö4äè¤=òãƒNˆâþ|S'Ü{¾4…VµÇw®m®vz®> stream xÚËŽÛ6ðî¯ÐQÖ Ÿzh4ͦ)ÐCƒm/IZ[öµ%Dz7Iùö΋¤•uÒÂ04ä ‡óž¡Ê6™Ê^Ï~º›=»­3­ŠF5:»[gµÎ*_õÙÝ*{—×ó¿î~}vë'DÚV…7° š?çµÍ»MÛÏuþ|¾pÎæ/¬µù¶ú¹©óGøó…©òÕÀ%î!Á Ä'Æ#8 íJð}{A âÌ”ˆ¾_é°ò-Œ1EåJóV˜lÎȼûâ@VÛØü7OòïV ðˆBwKÜYh‹ô#´ËÇ}ÔeÀc² q_ œ ˆRx×°k@´ËnUšÈaæ—_,Q¨åøÿM&$2™bXó÷…æïÙ üCÆT*¯¼bßÙ©ï*Wxïƒï€Mi $7¤ËB×¾p¥›ªÄþ]xeó%šnÕð¹-WF‹ºãP¨R(àáÕÈhÔ¿¿¡ðX»éö]Šž+æÜ¡QØO;2΋Ix¼º›iT¦3S5…ƒƒ®Q…«ªl¹Ÿ}˜¾ÔHq*œ“goö.ûy˜ý¿¯ƒ/.‹‹K(ÁÀMÑ”¦”s¾.ÃJÜ §v‡ªƒËL¡µ·I°Êu[*ê­‹ÆKJ¾úñtl·=Å*TEU5µT…-ëR0îƒ?úå% ­è:k½,J«`HÇ›¾;ž¶-IžoGþî»¶ghüpnÝŠpÛiÛoº~ù9ltëõv¹íúèXc‹Fkæýj ´íîÜ ß5&ŠpJrãFû©ŸíŠÆ¹¯,õ„  I M “è¾r,©ëÊóMª0¶ÒuXhkt6e=Ñä¿9÷ßQÅ€,ªY¤x½äTG™Ql„\„|„ÊUb1“+’º¥QÆE}•©ë¸ÒÞ”¥Nê;ÈøҪñÉUÓÔ&­Ê²‰fSØTOµ {ÑH‚¾*:&6.þ{*hNI å@«$›ÕeuRºª0ÂJ—.é¤êÊ&œr•¾VF1JH|qá](ñÐKŽ¡ ŸwÒxFF,¹þlò{ê//H8\¶)Üýz×§ª¯S« ~…ÏŽ›,€o_ϲwÔªý¤f‚œRßÇjä [YÖèílƒÃn8áÍÃqE‡ÿ§)Žb_åm„ëØ iKðjçƒ v¨Â7 Û2~4&ãîÈÝÈ–6`Ï’›ú¶KœÚ~Å"º4­pJtbÛH~/FžMhyGžrÀqÇÐ'Ç>ø(çé@ubØOš&6 Û88HÉñö~-拤±Ûñdsz˜ŽO.)´¸gSàÂç-*¹ê¸W#–ºz˜¾ƒÎ-^„ÿÏLæ5d!|‘Éþ@ÆA„.….x©FLáÈTh ¡áE(¢)Æ‹É%ÙE>(¾ÉÍA+ÒzÄoí! b‘ÅfÑ :°k‡h™ÚñBCȇ^ðÄ™†Ž+gMu7S°ã5Þ¾•ðŒéR@p™ ÁàŒB¥4ËGÒ“>âUħ™šæ«ËéÑ—¥/m1Šx°tÑÓØDb‰ML1 Dà… ¥F€—án—?©%?{Þ‹J{ª-K€Ó$y‰Ó%…íVÆã “’s ŸÉ@¦ŠÕ­Ch ü^µ[Ðkdœm;šKG¾g ±'!†r _òb?Š5íä „à%8˜áJŒ¿WÐÖðõs™v¥p²ÂòÌ–CpÒ `2PxŸ'O-Áàz"¹=2"ä42ÆKÄ8È÷Â8’m¥úöC j‘7æÄÄ÷ê`•hìb™‰HrA)P±ß±Û’„WìE™V ÁýuGˆì˜ýxõ…I >â:˜h¹/<¦zMÝJ¥Ž‰Ï‚Ø\RеÉá®0—(|”˜áþÔ€ök¾*f2¤º0‰Î`ÛâËéÌi`Ìê[Ƈ®UÁÜJUãÔFŠ‹˜·Œ›Î&¦ÂëX=Y¹‹l¤bù@5ê$%ô|qqíqj`j+• /O—÷ç]{ež°u¡kè®* ¼ýk/‹™N,Ëe‹í|u†I_øSÜðwÕžÚ[Àfš'O?x`þ ^Èö endstream endobj 120 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpAlTV3K/Rbuild34677effd016/vegan/inst/doc/intro-vegan-015.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 133 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F1 134 0 R/F2 135 0 R>> /ExtGState << >>/ColorSpace << /sRGB 136 0 R >>>> /Length 2486 /Filter /FlateDecode >> stream xœ¥™Ko%Ç …÷÷Wô2YL»Hv½–'N`` 8àE…áL ¤2 ?ç°ª»yY®ÒU©»^äáGV]Y¾_dù´üûò#~¾ùú×?¿_¾½»¤5¥´Äßwßþ€ÿÖ¼ü÷ò·¿/iùÇE–ïñóé"|aùp³5×%÷5mËãb­¯¢³ù°Ü=}¾7emã¹J[k9žïÍã¹%[ûvŽ?›çó8á9ÿñüýýÜß/_ŸÙß×_>_¾ùNaŒû.¢ë|0~¶¨¬Õ¬ãÞ?.¿{—ÖüûåþÓåO÷>úË݆Ú4tdz7ôîy-éª÷æ¶ßµÐ[ι‡ÁDë* vMkºVu»=}îÍó¹b"+ÇóÙ Ï{]óv>Íóùœpæ» [zvº ¥"’W³=óbMÛš^tÍËÝ!8M/ùæÅîV·ÕÚóΙš¾lRVÙCäao·ùò“æþòGøoÅèÐ!Ö:,õÇ?ÞÉ6‹?{ÙGÙÐ},q‰Ë¶\©ØùñåãòÓòù·QÊ—(s‡Ëý—%¯ºáÍ4þKk©‹limÕ×÷Àµáñý—c‡¿Þ][óMŠÐoî.½¬½9hò ³o «FÔ¾v»avÝVµEµ¯MßÞ½ÚºµÈýÕmÍØ9Â^n˜[Rg2@²Þ`¸šVéˆÀFæ¼¹·•NîèÖÈ÷ÌÞÖ" ´ä†îŒ”¼(ö`7tWËkFÈâC¶foeÝ:pÞ×zËìIÉ1 +ß`ùÅÖE³Ý$:«u5.^ÖrÃìÌ74ÛoaE­M¾ÅïˆÖÕ!æËsÁ±(gUudk+em_VRÓ˨2mê1ñxyòÚæj‡ÍJæ•_Ë)òÚœÂԧͧØFüó)åùÞ½­v¨»>üüùç}|üøù?ï¿{ý0$? ›V×ãüå ã(üÒ°§ä™àzœ>¼aœ$¤‘€Æõé8wÇzäÙØ'Óª(©.ˆ AP0”Tè.³ZJ£0@ÙÒ@^Áý‹ýCœ¶°ˆhà²Á8}Ýèíf«vh•’±)ì$[ç.H<( I$Il–5c;¥­]Ø4æ”ES©3Á›¹Ž°jä\†uàÕføÿ»½Vø®P§þËÛiiã¨:òbËa<ì y¶£.˜I ‡žWÜ ¡Ôú±´7·Ìn71a {ŽgöÝ-ÇÉš|<-nÝ”8i¢t§½°'0xLP%óy&cÙÎìzXP HM˜s}EX²§ "ÌW„˜ØÈ©6 BI^ 3Ó4C¨K%ÀØV.U±ðÊç€: £VÉh4 ?ºUþ÷aªJs¾G4STjJw‚©Ø¼–:EÖ¨b…"†È õ£ø"3.X1â›îˆæ%™¥9 Ý‘¬YåºÈ2KQÓU…µ#¾àUè$=uRލ³Ldî"N`³BNJæ‹GIqLQ&%qNgï-„ŒâùTMÆŽsP N\PÁ©L„:Faï^f›ª8T´~¨f³µn§jç*a—Í +êÆÊl3ëî:b€T9•ËŠc—ÁLuìÚa\•vŠgÆ™\u´ó80O5‰ª+d×tˆQ† šQgºïW6v<$ÅâõšA1Ã~0LçQ%ïQWÈn;¢Îàáp¥.“^÷õ0˜ØB·4Z½¨bøbÆÇåZQ¯Ó(FOÕ‡H£6Y¶C¡ªžÛü@W²ÜÉF@x†¨ƒ| ´@:VH§¨¾·@6J§É©XJL"ð°' ¶ÅNcÇ_m»F3ÝsjgŒàµ¤³½EÒá5’Žç°H¶–]s‡Fy½ÐÆ6ËXóžm7Å©Ñêâ=5 ó–€7g’ŽWì§ùxóˆphÁZñEUŒ“|¦ ÑãŒùÁž¨'_ØTgäÞ¡QTs¨OŽ7x øûØ(5xh1Ñ©ÑÍk† QÖÌ~¬_ç]yðuE“0†FG6 ™Q5fGåbY4‹Þ–zªkÊ#n†NÙÃ\‡‡NA:Ù‚N7·"+pO4~‚ ¤UX¡Ò*H'¬º%Ö.Y)§È:å%­ €g­H«¦NÆ]µ5Èãa §‚\%sF1ÿÝ}<<è¤Jç’òPX9¦èœ3† ”1…‰‡S“8ª”@REuÒ9¦Ö@ι—²lžM*ª“Hª8h §ªÿ¡AZ¼95ºWµËµ^§9H7Ôÿ<ã.9’å-|HU5?²óä2O´êk0œ]¶ƒ||cܘïº2tMtÒ½»®h.§»ŒŠÀÔh®Cgò¤@>C‰Ì³ÏN:ij É6®!dTò¤@>"ÄùŒ§ûzªÌ@šHÇ/ƒx6X¼>0Ç"ùúTÝ®²îÅí©²>n •8ä‡×~EɇöH>tÔHºæ_n*qh~q ù§ :Rùõ†°ÆìÃ>Ô‹gÖ„×}•Š8»ñ`á¶t•SCÕ¿páa‡(¤zEu*‚I¹ ‡Ͼ,gS Ày /ÖPÁa¨YÚ¼òkœα@#Xy,Ïû”]0†Òœc2)'_Î%%Çð ò0¤y¬Ü5`6î]w ̨¡ëÜÇtNä1D>êúC†ðÊ4†…ö@š3 •Ög[yøb†¡æçZÈ¿²äÍ-´\[ìu>Î~hæó«,<½ÂÛÓ™ü¦æbZò|ö†Håm‘ê •à¤!2ÇŽü¢ÔQ°êÕ_gU^%b~÷Ôæ?^þ g< endstream endobj 138 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 142 0 obj << /Length 1149 /Filter /FlateDecode >> stream xÚ•ËŽÛ6ðî¯ÐQF#.¢(.Ðé&[$@Ñ4qNM¬L{…ØÒÆ¢¶ÝK¾½3|H¶W(Pg¨yÏhfh¶ÏhöËêçÍêæ^Ö£DSͲÍ.ãŠ*3%ÑBf›möGþ~Írs‚G».„ùo~…ÿ€÷…g·þsóþæþR’dDKÐãeh¤XѨøú|»Y1hƲše¥¦¤T*kŽ«o+"+VVþåè_%–xqóî(³7ýêwø%Á‰¤±Å™\ïù…¹à‘¬Ì$­‰¿B«ï½Ó,ßè¾ý.o×EIëü b;t„ÇÁ­ ^ñüaø÷ß!SDDä †ÌÁÿdZ6³ÅÈ€‘J7=òz¥Èò2°¸õñFi6dÃà­A½Ï˜”;‹hßÜ‹:ÓDW¼BO .¹wµ%ºïÌáÞIJó¦1_¨¤»þt&ÜýŽíùöÐ÷p¼fáü!¿öíàÆ“½¼4ÙÛ£íÜÅõça"KÀЉEL çUTkÜK;ˆížÀNæ¹+MxYpA4‹Ù{×Ù“k#ã‡SÿØ AôøGÓ}õœEb=×¾é„ iÎ cR@¸¢KßAv䵃ŒœzZIŒ”(F«uÁ¼¾$ásלË`Ô³UŒ³I¯u¥«%.·C8ÖD§‡o£9¡lŸæ¾sm··]óœ.ìn×6-&jAö§þh'Î`¦‹þ¶)åæÐš!iøË6fLYvöùšºépš‹G±êÀ¼±ÛšÎM©¥—Y}Û‚ÉOæ0Ú¨êôʬ¤ßüc‡[/ƒ•D—åUÂî°x},ä3(f°œA9ƒÕ ª¬gP‡ÊZÒ -¨RL)%£#Lé: E¡³ ‰có…ØˆšÔ*¨-¡Y†ÀøÉ›Ÿ_(+Ó5ØåU™;lûƒóS׋Uô|zaÈ¡ÃT±™?­y#ÇÞ,fî2‘F3Ž­S¿†óÇÝ6Ì8ÔpôØ8ŽH6¢ÆEbl¨HèÒ° F† ˆ™N/ÂÌBt~¢ôÎÆ±&¾ïwá\šà› S®(9Í7(Û¾0ÂãÇÖ zšÙ*F¯oëך0‹•‹9‡ësÜv°£ .½}‚W0Y¥ÕE¦± ¯p;½OçBfìr±4.²ÂJNç)-¦ëŸÌÒ^¥ V§äù.ÉòW(ZE§‚÷0³}±¯x OàËÊãWÎÚ!0ûÝâH¿ƒø¢×)!*%i†v*”¸¹iQ,â'3Wkyëɇ´ÈÜN!š7—ÐX_ÏÇŸbÏÀHaTûÓöjjL´,,3ÎÌóßÙÁ]ÏÆ¤¾´µñÇQ“šÓ±ßÚÃâ" 쿤µž endstream endobj 128 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpAlTV3K/Rbuild34677effd016/vegan/inst/doc/intro-vegan-018.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 144 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 145 0 R>> /ExtGState << >>/ColorSpace << /sRGB 146 0 R >>>> /Length 1386 /Filter /FlateDecode >> stream xœ¥XKs9¾ó+tÄ+j½u4.gS®8•ÄTöÊa‚±kx,Æ»•¿Ý’f¨hv0ˆžnµ¾~ Ø-öÂþ}ÁϻׯLØõýHp!ë~ß_ÂaÿŒ¾ÿ`‚=Œ€Ýâçeô»YÇA0¸ÐlÉT°ÜÚ¼¬Ùý9¯€ûD¥¸€–Ü,÷ôày{z^¶ti5÷ª¥7Ë–®TT¾Õ./÷ô®º{í[údšÁ™½ö€ó:[Þ½—ˆäô‘䙾ÒÚ .-îËA²é’/图Œn¦Qôy^–ƒë2Ãæ`¸ fQÎ+-p#:¼öUÒq ÞVAq%;¼ªáM!Hö2ÛK¡µ…‰v:¦Gæe‡n-Éoéi¹§K%¹T-=/;tt?Ð{zZîéY¡†Þѯ{öÎ/;8hàÎ2DÀ¸3žr–P íϸÊYn)=÷á´¯œgyâ´³œeV%½%!šs¤C¡M+Í2?êüòѲyù>æ¸ÿÉR·¨1¹ iz}}5䤸3ØFHæo‹ ²®ÒÊ8 üØÎÙŸlUš¥Óv˜GE¾>rõ ZÇ×ûsnîQR„óPúC$ã>pGm¸LFŸÌëÍ|Ûf¿¶=ÁU‘ÿf¹Y-žJùÁîqÌ.ºû÷ñí.Ùømõ3ÿx¼øÁ¦·%Ò$(1íJ«ðL—îŠÅ)¸BqÞs›•»Z…b6øËç¸*×NYŠ,p’C í›z¾©êb¬´£|$eàÆFþ¯oËj6/æŽK³ƒÕ‘ÿÛbVW»R~)Ò‹Š ŽI¡q.GWjEõpmÒqªÕc]•»F„ӛ֨׋®>d¥¿ËÕq¨ŽŒžl³¸¿Z#?”ËŽ…§s”èXçëê­e…΋Á¶µIÏ ;€ñzGÎRª`ÁÖå¸C9Õð]«¢ïzŒ¬T¯«zööZn,Iå—òŒ•I›)ê@¡Ù¸Îb¸V€ÆRËd­z¤nç›ù8 f¶ñðñÕj·~X—gCÏ žQJ˜ï«š(E SÕo§9¤Öájö¼\”g£¨ç€yKÙ|×"R/µN¡*V›hôçyUÿ¡˜Õ)a —Þ¯ApèXAsm3œO›m±9À+Ú˜|W&8?×U]­Ê¦á Ïï•hާíë®|ã¹ÄònÚvìãzHq%üÒ=ÖT\¯êõÓ¼\tñü!œÉvý¼îîÿ›î«WªòÜ¡“9ÏÌé©¢¿‚¥ ˆýÎý©ÂKcChcS.L…X8-ÖÍ#Ør÷Ñ¡iŠËY…¡:-±¾9º?Y©¦pÓž/‡)±eT…ˆÕÃDÍ¥b{±fÔtåU+¶¼èJ!²oK§4gÕØ FÞÞ‘§¨@w T3³‡C9ÈX¡‚ŒS^Î.¡)ôEL qÛ|Ür)‡!éÔƒõoAÆZî 0ÙØV#¥pØQša*ƒÔûAqø(Ç%…zž )Ñ [ä- ©,Ñ@!!Õºc7a¥©§çn,ÍJíp%1”•ð”$5^XË5* 4¥£åè踶>2 ¢áuÒ·uɼЕ+¶ª"¡¿WOÞù> stream xÚíZIsÛȾóWôÑ:¤÷uJ5U²ϸ*OYNe2* ’1¦‹ÊsÉoÏ÷@Š›$’åT’ñj4ðúí+ Å$sÌHæ™5,±™’L)Ë”aÊ&FW10˜ÆOE¦MÂ%ÓÁŽ´f:áÏ=3žî0ƒ›@iéŽaÖa±ÌFÅL`Na™Ã¥UÌ=²šy‰¼·8dY4‡X Øyð†,HkpcÁž‰@Æœ¶ÌW¢NÃFN3• ð¦eÀj™ÖJ1ïˆo›.æ ‡‡÷½‡ô؇`HêÀ=ÄPrèD¤ nŠ‘ù± i€ˆ Ï‚%Á±'eb$¡ƒ qØ@™Ðˆdû Õ(â\Ä>I¨"%Ŭ0Ô…ãØCY ú¾­Z"î›!¸…´$¸õŠAë¥) O•d$eI Hd3IJN%´Ó%¬š˜“’´*Pƒ¨¦•ãX臜ƒ $ržl¯ àù|Â%0Lþá(l¼ôd%OVÌżÁ %.È00®7ÉüÅ;2!ÜÈ{r5ðî#NÀ¸Ì'pÛù¹Œ$þ(8R “ ®´%Ç´,˜@L`ÒHÏ‚`` gé8.‚'o™’¤;€I–HÁËqŠM”°"ŸƒÛàÂA+0‚*£•ft|ÌÄ?Ôk&NÙ«¶È»²®¸:bß?zõ¾—UFwŽîƒö— è;øÓ¢kŠj\ŒY^7MÑNklª¼`Y•M~oËv=CóS]ýé¨ÊœÝô“®—7EÕ$›°6Ï&eu}ô(ëz“uvÝdÓOe¾¸¾“áͤﺢ ÓIÝí:4§v2µkVvÅM˺šÕKêa™£03oË®# Eu[6uy;{›5ev9)¶œ·s®ëªíš¬¬Àw½ŸÕìÄgåuU^•yF–êŠv‡ÐöNhЗtk É¦YÓ•`z ùsD€d˜€¸„ãøx$>þ>-˜ø9».F(;ˆÞ"0 p$>mÝ7yÑR*îüµ—Ùëú ;—”Û“ãš‚Ý*ÓÅxàÂo}RUP?;§¼K”­›-~¶„ÙgK'g‹š-z¶Ìw3,~†åb´&Â@k$ÎúËnØÿ¥¬>Äkè£hfå…øQ¼oÎÕ°!éòŽ;ey@P›à8 Hjž•˽S€;aÛõ…Øp ’R;WÞ-Ùð«hfã~xY^¬äåcÁ‹M<¨Ý¬è—den¥À’_²¢%w.mµŽ~y `s‰J¾`CŽ$¿K%úkXÇ— Ñî«ânN¾‚q´ Ü"8¼8Ï­÷[c¾*rƒv`Á†Üè­\د`)y4+ʉG§wƾ¬‹H¸%:©h¸AKwÇ‹Jš›vóò¸“—gGœÄÉ@\œ‰¿}xG¿WŸºnúyÎë~Òó«Rüë7”äús›‰zZt}+Ч|ªÇⶸΪ®ïê†OÇWGÏf=‚sIímD) fßóY¿§¸5ÿQÆWªõ/ÿø$NøUbU?™\<…®Ö !é¸öu}°÷[ªoiÞÀW½œ_£cVóKÔ~¯ç×Xü]Ï€±ÊÏê/°ŠŸ›:?+ 2ô§o™øX|é6+òFSáÓfSáÃ3šŠ¥è>5(ôÿ(ë4rìs!p‰u˜6Š›M¢Ku¯ª5bÐxH­+Yª0˜>fÀpaQ}”›ªñ ~.ÌØ þ%;1‹2hêŠc&uЬäbh{0g]•×}S¼dæ¤l0[bXãžæz…‚ҦЖYo¶q±–3á*!íãžkP4á#iºGãwÕ‹VœkÕqVjéhÏuœ{ƒ@´ÏÙ7M1L&§YW°W§ßi‰ùÛ¨„á:>Òzüè³e7Á“ì‡ù@ÉÞ÷Ý´ïŽÁÆ}^4ôÔ ÿ”GsZ5Ý:Z—”¹âtSÄOÙ =ÃÕë¬-…‹_³éÕ)ÆÂˬkŸ€C¯âø±˜Ü¦»‘øs•×ÜšÌRÎÅ»7oxÌҠ׋"wð3t‹Óâïeu‚y|ùø´¼ºÂÈ\‘y0j9qSV}Ë’ÿì뮘W½…ãlÛR`$¿-D–÷]!ò²Éû›«IñEtåd\ˆ›,Ç,.›08’å9,)Æ%H´e+8k\\‰´E/˜L²ÅÍO}u5ýÍ$ë;Q_c8ý,òŒðµÓ,/V?º}ÂcJYt3 ýÊ3½YÙ;„’çáÌüXPã"¨~yùeÂúîØoé^Lá D6fåo!8½·¼ƒJú?RX)1maèDµ–¨”¶†^ÐÌ‚[˵Ù(”i¯>nÊ`Ø50–3èvÀR&ðcÙ–"@ú´Ò»Ì÷o—äõì¡!û!Ùƒ¾el¤z=þ­^˜,”(Y¨ð«ØôÉf@]ƒ;pMŸÒŠÔåøáÀÙ'èî—z .mî—VO .¥ÝFu¦OUÄ}©zÉAÊxž†ï‘†;úºg¹µŽ¹è1¬nMÍ/ø>L;Ã‡ï… Ê@]@¶¾Ðj.ÃÞ> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 152 0 obj << /Length 1715 /Filter /FlateDecode >> stream xÚíX[oÛ6~ï¯0ò29«YR%«@ ì–!:›1`X”‘eG€m¥º¤ÍöÛwn”e×íÚ­@±b‰(òððð\¾óÉz²žèÉ÷¾^¹”ÍNi£»SqGµʲ|ÎãX™yžÂ:bò\ŽÖJkÇçç¤\ªý©l«eï7,cDÖ(k;Ïf³Sj~®Ö»j¥Äõ`jû8XÀs/ÎÏÏ¿fkm†Ùýä0·Ÿs^¨a*ñC¦ gîA₱Siš°‹È)ˆz Y¹ê)UÒW<Íà2xÄD›{œN£¾ÅÍK–y…9î[>ÒKªà@©¿«ï¼‚<”XL‡P!­ù]àËZ†®]œKέž2¡ULZ~EƒøŠr¸ÛP³†‚\žÄ‘2'Û{¤íÊÛNƒÆ“Øt_!ñÞÐf kî¿F ¶þõ©v‘©Ø §ä)&K ËÑl ~Ï5:DÀ#ó˜|áÕCJ‰/÷ˆ®âtÅ©k.œõ¼–ë^6«Œ€êªÛK´PжbW^݆ںÞìÞ‰ 9Ñs_ ªæÕRÎÝŠ^ŠÜ-ŽE³a  þß“H¤‰Ò™ô«'L&.±jêf)üïúþ⬃èœÉ;Fª¿ª5P¶CUÈíú€Q7t%€¨w?åA¿[–2ה˾Àž€/["|'(Ø´·bërÄÛòeŒµòœ!ú[5ádô$>7¾íì¶ “ìÓòg—¨,w‹?ŸÒ&6"Y*é äÙʼnûpò¼¿¨ì°A·sNÝ:›ëÐsó7ÌÜý·™ùÒÏ|~Œ58% ýcïÆl ßÂâae¤ØŒ€Ž©yøª!ä3Î3(ª€HÑñL7²€›ÓÿïyrÃkHû‚-]hJ#b×XαÅÁ­™Ã”ÌC<¼%œCéÉ7/¹ÕÓ§7T(ñû<×$v ÆlE Q Y¡løälÃ6LÏrÃБ5W˜µƒ"j·B©F»k^ø"¾„."#C·(øþ!Ç6ñ¨sƒ ¯‘Bƒ;è.ÇwÚ7 ¨ ñ×kÇÔÝ’%¾Yô|ÃË%’¹2$ 4 ¦[pëçÆ& L{ñ¯_ÑËÝ늧Žõ˜è 4s3ÆÙ¹¶¾9û$ê):m~[(W«²è¤q¡kù<ìeŸC'¢õÚŠLæò€ïy–šú6ÏĵI,/±Ô‡çÿͽˆ C¿#1ã‡Ba©lLìU~šh?Œ½¶ïøãšã ´ç†üëJâ]à`Þ @W;æµî­´öóøyuøI9<¿[<ø àö‡º endstream endobj 157 0 obj << /Length 1721 /Filter /FlateDecode >> stream xÚµXKoÜ6¾çW,réÚÍ*|ŠRPpݺh€¤Aêžša$íZÈ®äèáÄ—þöÎpH=ÖŠ“zX‰‘ß g†ÃËV»[ýöèç«GO/u²â,JYÊWWÛ•0,bze´‰R©WWùêïõ‹¾¶ <Ê“”rý4?À¯EyUÀ³:ùçêÅÓË9’æQªAÃà‡Ðµáh†PÅ1ªFP[Dq¬Ø*g_A•Ǩ\ Ê#•(°J`g*tLƒGMc"5÷Á¤™ƒy/¾)Ú2ïíÞOÖDJ­—”o6›%ñŸå®*·ÍÎê¼hŸÍ${wzzúÃ`-ãƒt²QäÍy ¢0ˆ^^Ì’ :’a¯êaÖŸ0=ͺƒ„¼†_A]Û£ >`²v%<3’cö{|dðè\zÃ¸Š¾~BÀº ™þ„¤ï{7Ú1¼`ÄôoüÔÌ"þîF õÁ›QoiÚFœ†ösáö©-=ÄÞ+„PÇa%·'"YMP¯3Y·Å¸îúØ!š°c|0³ÆÛÛMì†Yð5˜ƒ˜h^ñ„¤¶‚NNí2,Ÿ¯?É®?±æ;çnÉa³Ñ8AŽïHlIäÖA!„Gáœã‚.ç%EH$jÊMÑ¢ƒý¼ÊDPÂ@ç[–\{;ó`¦í÷aipÙŒ {Ë4sÀóC¬1_&±FoD¢"kò´JIïNƒXoSÞ'ØÖ.6èËÝ5­Õ Ø£ÝZv”(LÇNéJí(w‰S øŒVn¼Yjƒ]ª“Á©+r¯qîöf”:SB’´d´!6Û|JÉñ»›çU}r8µ·t`“” ŽÊ ³Þ!TˆÛQ ʰ=$„É›Tl·¼íäzG'§­âÆ9A¹íÕ]S'l’²¥þÍPë· v„žÃ×È'bº¢Š(|ù‘Pt… óŽn°«X®äNg€Ñ°HÚ÷м±®í‡X¿çÃ7¹²#Š ‹Œ1dÅù¤nd5: í¼ ëЊ°‘±²åÞ}•=.}‡Â;ùšB’ÿ'k—ù~Øõ,BÕq>?´“2d}½´vãèDÐ:D¯¦õ~¶¡ºMPÓŠ^Y 7Øu/¥|•óå÷vMŠÅ²Sp'3φ¢3Rt²ŒLìCýæ9…è?mü±˜Y,ynv‚éuîÏ´éõŒßàÝL|éÒ•u…/ë²íúÆeàúžÛΞ!vTT·.3Žé©mþ³3]zfa÷ûg3c·usè÷–dg^Ów/`‰Ä|Ãrîi--N#qÀ`²#èïUÑt¥Ÿ÷º©oêUPÿ­>P%3§ö\Õ'AÈò8×ÒS(àSXëZNIJb‘„‰ÀßR¸¢\â^Ðv-ÝÞ÷š³tPHÈܵdÁ_U6…ðL/51 TŒÜ­D,aÌ|†…߇Âz¯µ{Ø–y vUWV»¢Êî‚ ØnˬÄXùÂñk Coí¾/<,dÓ4š 8­Û[+®¢T©#G9ªïü@ü<4åØ$mfÓýÑ‘©…,eÅLx^;¸æÚ =–ª8ÖoŒPbìi£ÕÐS‰ácŽ¡DÜ_eØyHbX/›|lЇÀ$g:”ÁEHŒª¹Ð#Y*Œù:ÿ¿ „ÊQ•ÎÖfBpÝiῸÓE±d (Äï-ãß™ÿ|}r•@X†Ò¶Ä@pÿ0ðø8B­ŽXÏO2”ìà+gÓ[Œ3ís—•n²˜/ؘbŽÕçK÷'Î3‘ö‰q ¼pËkÿ}H­€Ï ÷ýˆ@cOM2g{Óh9VçâSS'¸Ö«{"”b=»ÞIòÛ®òˆ0KIɈ»ƒŸî^÷¦NùÊÇ¿œ°¶ªoÝ '­?ÑÞß=îà>òØ÷ñnréY=å¯á{ßÙñ늶;®£™ u(/¼ ªuŸ…bt€«ø~©ì_º/f6ÏÃð¶øØCìJà¾Â;P6AsWÓ{oÛîÈp¨1!åAçÿA#¾™=L MªçîøeëÏ‹ë²ýè«ì%¼Š0T Úç—Øf ͯdúg•”GЧlúÿLø‡¾G³ÁÂû׫Gÿmp¨ä endstream endobj 161 0 obj << /Length 1015 /Filter /FlateDecode >> stream xÚÍVKÛ6¾ï¯r©ä®¸|èE M뢶¶nM TkѶZYÚè±›½ô·w†CÚrêžrÉÁÖp8üæ#g8CìüpõíúêfU‚3͵ÖÛ AžæL«4XWÁûPÈèõÛ›Uzf%É4˜r2ú5*Thve‰pÅI¢Bc¥TXƒªdŽ ô]Ë<¬@œà·AtÎlj]2ÖZÎ,ÎwüoVª4Ó™ÌVìyÅ*eE–»»²-wæ`Ú1Šç> stream xÚ31Õ3R0P0U0S01¡C®B.c ˜I$çr9yré‡ù\ú`ÒÓW¡¤¨4•Kß)ÀYÁKßE!ÚPÁ –ËÓEÿƒý ñÿÿæÿÿ?0°ÿÿÿƒÿÿÿ? òÿÿÿJþÿ!êD‚âÿH"Ð @˜ ¶l%Ør°3À‚8 äH.WO®@.E‡Þ endstream endobj 178 0 obj << /Length1 2262 /Length2 8496 /Length3 0 /Length 9701 /Filter /FlateDecode >> stream xÚveX”k×6)¥„tÝÝ Hw—"ŠÔà 00tƒÒÝÝ---ÒÝ Ò%%R Â7îý<öûþø¾ã;æÏ}®µ®µÎu®u_÷0ÐhêpH™CLò°'·(@ lC! '77ÜÄÃÉÀ kíþˉɠt„ZCÀ¢Âd&Np›¬‰þ©+ø0'@š@á%œÁæ@G€“ £¤ аÿLþ¤¨Z›ÁP ;ÀÊÉÉ^”‹ jæhmïå„Zƒ8áe¹4äUá•ÿTàæàü§?V èøßnþaú—Ü<¼<æÿ$µ€»,þjjÁ :q±À•’›Ë@ìì€`'(&7ÀÜÚÌ ` ´´crýI¥ëfðÌc5'GkW€!7'|(î?¿žÞÀ)™CÀ ·ûpu; €KYKÚ@C™íáäÿ‰–†¸<8x€×¿SišXÿ‡ ÷ýI%°ÀÃó7esgûÿÒ†ý½6æÿ¬ àßÉÔ!NpµÌÿß+ðÿ;öÿ÷QÿOÊòÎ Ð_R2?Ðð™ØYƒÜþ¯a/€1gVš[;Ûý¯$:É,ü7Rr2Y›I-Aÿ(o •·vškZ;™Yœ›õþt ²5!Pë?o(|žÜÜÿçkemf B¡ÿ¸L p1œÂ¼c \çó‘ƒ7bþg ¼‚GG7Lnø>ò Г®Ö}?{ §< ÿvüSÞ3dµzN힨œ¿“•#ðÁœá}:¹@€çp~á3€=€pÕ\ì<ü´ëOïöüוcæì—Ì鯯 ü>ú/¶°†ß@ +Ð sab&hSØzU%Eî±=*>óR¤;ƒ-gy«¶.FÆíQNÙTADåëôc¿áõßÀÚ«j }¬“]7¾Í'à ­£Hÿ†qg”Pí¾%û–0÷Â##Šî®`n7&ójà ×Èè+,}­…ø&¬„1€$V˜rÐÛdƒÛ°ö“>ï$¬‰eÁKQð§=¿IÛ‚¬æÈ¤ wöÄs¥Çd‡Í°Øóàß`ÒY?JåöaX\^,E9«íGX=j\‹}Ï”š­® ÉI¡MX¤d_ü«2éÒ’K IQ7eG×{ÎxP›û>k¡1<4݈žÊqOql\ÒŒ·=íëœt?#ª¨ÈñäžV×ãFáŸ\è!³Âš"ðOÔ\úÒÛõ™eºJ˜ò‹ôæÏ™©KFù‹„_&û:]0y›Ì§‚² 垢g¬ÚSD19ºK½&ÞÊ:Áðj¿¤KÈI¿ÀŒOa¯3°%Ì^†~øÍ¾!rçV«õ}Š—ùÁckݘg§û-IÉÜ”ðmZȹ`·DïÙ¶#*Ö~©×ÏÔ8ú 9£å!ž›àÃdئ]íGd)®±´6*XEv3’h^ã öªäá%–_Z°¼Mu¯IV(.µï=BF½,Yµ²9Q&<*úºAZTØZÓÇ }JmLuà§„GgÍw¶^AÉ‹¶T“G«²’‡üÁ1šY½•µƒû ‚3Ò¨\/œ¢1H÷Yö}IízÏlk ¸‹'Ø_æ›ü³wj7Äúˆ®cD;ûž¥ÞôÚ¬>õÒNR¼ô“ PŠ­ >í¾ž‡ÁÏ혹x uˆ„¹;3–gÊ5_lž‡oÿ%» SÛ¶ªŠ“£çEk ¬¶AܲTËu'·_|§ÃË&™Äë0ìvãÕIþâTnæs~¼I Âo"ð€ß¹£,uÈ8ë¢ÛËÀk%fÞΓá‘RÌɶÉ]ON~?M‰ŽwÇ&/ë­þä*¹Yf~\æxï^žnS³àtu³dŒZ~NLFHXØó%RŒc ¿ÄXâËv;ïú‚6„òô{«iüsÞjq–ý!Ø v*txcß~ÿÔ(½ž–ð'n¿áºë#>eyOÃa‘QûD‡MfVÙð-Æ6Oow7eIœ`FLþÓx¼ ó˜„ ùåÞù™ô9ºWZ/U0GûFË4Uª^uÙœzÍLËûV¹Â%CB@äS7ž~g?€—S‡8êšé]tÈ ‡ (¾UˆžÚÍ®ŽßŒ6Æ?š ™Q;O#N³-ƒ°ÍC„=¢‰ê.”d–£j§ƒðôÌãx)¥Uýt´Ša)"¡•|’8Æ:õ“½@•ÒqÛûƒø ö£ŠìòIã"7ƒ6ã…Èè×ÖÎ"AÐYÃ[åS¦¤ê*yãEEÂhcµŽ—‹X»÷ðHøŸôQæd@öŒ\õ& «++ê~;êÏÕ¢•’0¾ª|EønЬSt“|,˜&ìµbÃôâ·¶ JÛÂ4èûl¤ÚBE~ÍŽL4JJ£ü¢uo¡y<8p†°=áK´WÓ15‡‘ÌÇpRËÎeè·5tµ!Fß5š½Èu—±RãàTrKÔûJ/;ßþ1‘\²è·˜–¨å©o%|Iu¶C¦Á¡ý:iÜßñ¬œ $¨»X¼/ì•tʬܘmí.ÚãçÎNsZZÓ~…E‰åDI*ö_ß°n7ã|ÄO”|¥!òÆË¦ ÜCIUðcåKÂ4/‰u¶Aâ©#Ù7жH3ªSP˜ˆíKf:i)Mö"ò\l's‰æ~+3mS*Šçç·™Ðz˜Çµ˜Jn‡R©Ú‹p‹‚rçöÁ©©ËQ…rík g{gÈ©¢¦âѦ.ƒ=»¤J÷Ôd=¦iî¸°Ž–6_ûxúƒ A–e”&—&žJáNƨê]ë"ƒßZuÐþ"µÇ(ÿÄÇX<±m{Æ-¦éWÜæˆJ9˜+=»£/|…Ô©”Ð¥TG€¯¸ö‡‹,ÍŠ…ÔyÈVÕá…³­XÜV™ÏÚx–R$“©·Jv ’b†QÄKbuòÌbê «Gí,µ¹vÛ>×€­ÀÜOûכïb™de|ºŽpúTÉÁžÏOí?•+A‹ë"4í]_#‹©(¡—±o& F¥G÷¥pj àðˆ‚NÃÃ:hôݧª\øâgAã×AÉç¼Â.y½T=¸ ,ݪNÿmÍ3C[D3Å‘"9½y´³"¯&L21‚Ì]MÑÖ’d ·= ökÄ$Z‡•_&°sñ#qѦ߿C,ÞÉ·Ÿ|„¥ýŠXñ(ž­?¢³õ° –/0²ÏÿZ­›C¼C²–ÕH­‹ØíÄ¡ÜD ¸°0XíüYJAÀè’¼#1“J;ojÞ¶i*îà@AçËÕԸιÊRn¬YùðȵþLxÞ2tˆ)™ ‡©i³üƒ'ÄèTìñÊþWðhðöIDäËâ‹ñOõ·‹U=òñ\Á©bbx8ÞJŒ»½µ'–õ3—ý¼ÁGÙ™_>NÚš5Eòqü´ì£2 œbVÍÇã&ätxã±Á]Y€Ð¹GtÒfßõ+Iñ¿¤…jŸïã}VÞØhÅÑ ÖL¬^‚ÁæZÓA;Æ—‘E1¸7ØÕ¿/SE\YµB’Sͱb]—2«kbzHŠ¥âÞZÝŽv|bMRd#‚)žÊ<éÉÏ!“hÖ®Ø,Çlw¨¾~1$H§î¡ÁÈ$0â˜Uê‡ÞK§ØÅ§ëHÔó'c˲žý´$ ,"“AaVhÅ1œ±ˆÇAÚYžiÛÙGz…§5Ëy! Êá2rç UÍÈèì/QSGè¤:á¬ýE_‘² ŒЦÕä²¢O÷4æ+×+¡3ê$ø;)i§wkÀh§;e1~TvÍñÃTÒùÎÌErR>»{0‰ϳ;«fP]lè&îÒ:Ô-ý®&…Jg˜´\Åœs¾Àv„aõשlaqE½88¹Y¶•æÇY5cä(?º²ÉÅ&eb?…—¤Œ,,EL+·‘˜éî4T4Œ;1öëT=U—aðÝlöq`Gó K¹N,ÙàÀ<${Ù7/´~a{Õݥ܌…Ö©%¹}órå(­ Κ5éÉ:z?Û­òBÎäÌqx•üãÊ\PÖoÿëánzá·­y¯±,kÙæ·88¿Tþ¢0ªâSD-æØ ;œ_<5Ô¸]q°ncḔ áÞrC?I ç8ö7£µ¼§0zdÞlÓ|}žÿ伸×wãs6ÜË75}=ÀÄ”rDšOJQØò&´»›&#ù3€qëJZºëL?ð«•3%ùåû×x{ÔCïêKŠ×‚&³9‹:2‹è†—!Iý‰y¼üoŒßÇ[¹ Ùã}WÎ8Ýþ()–È“¸Ò~µ/;n§ùÛ(ñ§n"*’ΆTÚP 3¿±%a7€ ŸÉïÊîë‹ÛG}Ç韶Î-ø9‚#¾(4KµË*qhˆç7`ù‹šŸakc¥ô|gCÓí|ä‚AÑ-¯w9³Ùè­lx5ou¼Ç^·V"F¹!Ô$¡ZÐ!ŠáÕk{Ì#ãŠòU)w„–…nÔ*’ôXŽšgWÔ;Œï˜¶~ËbÅJuñRãó“Æø_ãd©åùúû¬£Úh#SUô~ éÈOªŠ]¸›.ß\IœïßNP‚ϯœ”õ¤ŒÊŸèQ*”œ™Òçµëä {wuëÿrB ßP7ý|bt‚S²D«ÕÑ€°l4™¡£´Ð€¸¦àµB —€Á±í],­R¼›¸L«üái(gedʾ˜¥øå­¡¯–”ê«ÿÛʼàóíwM·+¶=Ï´žèÙ•ÎcR0k¨I=Szû&OœÑ‡„*¦-AsŠÖtû½ @]v8ºôy¿è”+‘¶ù»6 B6UC´ 'žì6^ÐðAÌÀË•ðÇàíÌÆ°ÛòÒçç8ŒDé½5}Q|\'[µ.únœ?qí²^=R0PÚFœ0SÈèÌá´ædIzµƒü|V›Ìœ—ÑÛ:©R¢Þ|Û½šósY~,¾eå¬0H•-^à\ð%浫A¾žEº§¦bÀWÃ}#“è¹öܹg9¸…’¸•Ñ'h:–Ô8/F{P¾|çYFDºµD0®ÛO;az²Ék{‰…žmjí–Ž2û¡!&à÷‚–_»š¤Z½Aq=—¬JÍÌœ;n.¾dx÷{Qª—hqXn¹§nã²GUÈ'«›,ÁC.+ë÷Òn=XæñK¦\ÛŸ+PD³ÙSQ¬‚m:½dp·â:>Î+i!ç«ñ¢à*Úܹаâ[â6º!Õ_1}g<6 þ°=uCdóYo1ŽùêOò`Weox’HèDšÇ°+ÕñGçg-U‹Î·!d`ýOü²C\ºŒ¼«ë/ª YìUxŸèKRƾqíÂE˜­Aj©§÷ö¾ÖžùxÖIz{WVœ¡=‰ÉÙ>‰ìÝçþE_´Xs]¥t×;ÌÒäãµKxV&ëžòêÍ71h—*¸æ‚p]‰ÅÔòê9Œ±°¬Mîû( ÆíW¤ƒ ~¾ùxb@ñ4ô¼e½(Àì¹1H1|ÑUáFôiMI¾Jß.hÞ¦£÷ÑZb'ìÃB‚Tæf=‰æœ²¶\™tv¡ ÑHë×!z2¾À¦®~i4ùÙ¼w[Yï~'ð·GÇ´ Ö¯»ÙŒå™ž¾°O̰¦Œ.¶­RfâÛ~^gÍVôÁL$Àˆ*öÖ s!ΕT‘Iµ×ÔȘÏú„¼Ѓ w²¹M5-È/xljïyëî|mxÜ”­P‹kgPÛø4¤P÷éæ¡ˆô2ô­]6Æøþ ZÁ{ˆ€"…–ãÎë±Sï‰jµ©±peúGS¯#/µ­2ìÂjI¯¤ø Bst@Èœùöh•«iäÑ*Ò&C]‚ÓU,©³æ™Sf•Ù¤¶2Y~nÃd}˜Ž^×ÉrŸÀr;Œîš8B_Òüü©¥ÌÍ«&üý`$`$Ÿ¿ÝjËëhHP»YN˜õ‹Fë Î$Â)ðífCrA³Û~?N¢B5À1‰mþÉ(¦¤¤ZàcÎ>p¶Ú¤kMSD¤ƒÕ¶S ·”¸3“U^TèÌ‘:øýÕÇ×V…?úB†CWüëwãš}SˆæçOÄÞ—©ŒQâŽìGà#{)¯²æ2jòîñpí×i‹Œ¦)‹þ¶ãûuȜчÅ\}©:à2Ž]c_ÙÒ.På‹yG•‡‡½¤[Æ»ÅxaRJÎúŽ>‹gõË‹wÙ?¨&‘¨XûÔ%Ï<ÂN *¼¤ÙS­b0ù‘‘jù£ìØBd}ÕÎt ‹Ðžÿºs XäëëÃ9Íìü ½ÕþZÅsâ]kº›”ƒ~ŒÝ°\ÿu6Ø€ ?YÅÁìò±š)Ñ´ÃÒ³ƒþ4Ôî!Ú ØÂ”ù·=+¤yOºçç\ͺêZ¢ø¦=2TkÏO¼ÑFØ{`“ò1SÃϹ©°Š½M¨…ïQy?Ù>ÊXÒÆw¢Mÿ˜m…g¬Ýòq“Ùë¥é>õÐWºÑ§­nÌ+¸h”ãs4MòǨ(L'—yç7†©ùñ&3ýë<¤ƒ?>c º5‚jCõÒ·ÆRµVã {ùóÏr7Þû&@>Ü:þö"8§hx£EøQµÕZfþç2]éý†ô¨+ƒIeHIÿÖpE£Qb)®¼BrAè±–w—EfÏ¢âà;ßÁ÷š>¾ŽJ;$¢ú)2mL‡ÖE«§þuÈÇY_É)Oìz°@E´ Ða>¡‰ˆÏM܇èÞ]zk´¡øÅýýÑO-·G¾(ß§gÁ’åàSÑY OJöÔnê5Ø{+D ^B'‹Ñûæb«)l–øIò:Mq‰Çê–|šÍ²þ‘æ®7¥ zÓš…Ò4|K3È-9ÄmNŸ¿3! Ádý[C¥¬!Ölýã•JC((ßTÌãW<Ó{÷–Ì­¡$ÅXrñΟ]ik5¶1ì,ð6n݆ ÈüX>ØjvÝOEz6¤Êô·ò›/¡ s‹¢š¬*rsÚG²hGD*2VÛØ½"^iÄL¾[OLäúWl|tÚàrZ0N}G”]ã Ï8Ï™LÓÇÜ2öpVÎÝ Ï\dÉÒµuySÐû4X>Э/þLgø€ª¥-`ÄAø“¸-Ì´ä…ºøŒúp@㘴ÌÓ1!³,þ;çõŠÝ΢7l–NyoÚÍÂ'¶ÁÕNóDþfù"‡”t·Ò}>y–t_uMMÊü]Q ŠÞä…Å™eüdÔþÎÝž÷|JzSRÃÀ®þõÌæ»>ŠV;:ù‘Æ]¨3›F¡:t4s‡ÆÊ@‡¼ììX²ÃNjz«Ñîíq÷X2êŠpï _e@,ÙÝÁ‘IÚþÙ¥ÖmÍÍ$^™IϘ\h÷¶Ð}v² ‡WÄÚ.J¾èP/ÃsŠ–_•óži \0f_CÎ=«Ç"„ÄÇLDμx§§§e™H¥´+‚[u†N¦}ÂÒ¿1½Þ}¥Œ²T)y-2 ´‹Ñ"¾¨öÝkxÇÖiÃ\ÁÞ\‚?ãêôóÜæÍaѴǧWªñ.ÈßÖÈã¨ÐYgó÷#ÅC³ßšê)*7ÕBz4œ›ði9éH‰Åó=»·ßJ=Ò¦y¤J]~íB¿N‹<ɦmîO:tñ±ÇaJÌ nR©ÇGsä÷™z^€²å«*JõkßRe¡"mƒ#K+äûÌÙ;c¢Ñš—Î#Oòv=B®rɆûS¨YÕ[âõT²§\›Æå©+ĺ#QòuV¯_«ä0h›EzÈäáî;ìù”<Ñ/'4dÐò<¹‰oª «|ðõE$î’6PٙǠT¤Yžb€´‡Ù£Æía>$?–]o……ù#§GÉùÕj¾¬Œ~åÌÇ‹ØÅ% e®óBºè~Oð‰tçWÙÇÖØ¶ý§í¡g Ș7ƒ ?šæˆå3¬¨ãi˜Ù¼úÝ6âÉÑ磅….¥dÜ5Ð P8–ªËU ®ål»â3 ÇßÅ^ž\N÷¶nî]Ó !2ÛcÂåd1MÀÕÇ]©ŽŽÁ¯FRô$B^;OÜæ`óòuñúF"»ô‹íkCé?\‚Èm¼¿&i±3-sáMià>­÷Œ30¾ÔBy»zõeCxÈ–n-uFwTÕn>Z]µ<ýãî×—­ØB| ªˆaï¿Õµ¸p£+!íá9Ù³ÛàØôÒ£ Ñ”bêgÁ½Y§EÇ3¯í8Á?öA4ÞB´Î"QZ󜄞ÃÐÁq+ÄØV¼ì}È¡å#@ɪßË´mÑ,Ÿ7”"Îo È`í32û¦ Î@VQž¥éÂh”"™W¯ÇY`ÀÓwIæoÆí>÷ÛÆæJ ”I×r_ò¨¦Y³S†ÔMŠ^BC¾Ÿ³#U¥hÝœôŸóÅ÷·l“–ÝN'S6p|ÝÈ™•ì?Ž0Õ§®@wÕ¾pWUú8vk´@Xž*ÏáUZ–vœb‚–öÓ6“eæ'/¬c•vêÊãI@ö&R[ân¤Ò¤z°(®`%é¾r3k š°Õ))ŸG;1þï›]§zU1mÄ’¢Çloãû"Flq.,>Й?_;n=Í´Yf:iÏG7“öIÍ´‘ß6öã1Îl¯ {§òþ'^v+Ó|Úɇ1^ä.ƒä#Ô]5õÒ—É)IüMk7Š¢ˆžó02ž¶i¥‘Ñô¨ðÆI²º ϪQ]Ën²È÷2 Ñ×-S„Q‰ã¶c†z£|w>ú¤íóÏÇþÜiN§À¥:f4©%Ç]¬8ؾ‰ë7tø2«sZ¼¯Ç&/ªæ‚t4V£t_o¿<÷íÉc|ÝÓE³„ºéþ¤X^)9(U$íBËqhäl¨n ‚<Ë}(ªªhpdœò´%HÈúì[¡ÑH{·)òƒnL9ñ}`u›Ç{f¦ÍDðw¯–æFž)m‘1%!#gÎïSÖÿ(½á¤È,HÕ¸Ô…Á­\zìû®¸šv2C£jC’í—º1…" Kƒ S–H‘AuúÒ')±lE‰è|·™á\ ¹qw…²Å¼YOôØíÈ›â½E˜‡»T”UÎvêì@zä¨ÿ~ÝÞï¨Vþ+÷Œ2 j‹ë¢—';—gE•žs3Vƒr·wiˈ½ kª»3è*.*äýmJˆŠ° ‚¹½cåo~Iùá~¼ÑLšè{óŠsŸcîñÀæÈ«Ç_Lט•¾Ù- ~"TLÂkGd™’˪¼bQ¿[ëÓ^c´ÚÑœ¸•E Ö8“}Þë'aô֥з3ÁK#|¾^¡š Kç×˹ô…1ïò¶dŒwù1nãòÑd 0è—ë@V‹ÖÒáÃL?í0Ä‹¿‡œ:¯°Ì{ rÐgå à–|fŸÄÀ–`‹Ý/  @¢ŒéÐØäoÙqs#ÛD XyEòPãÄÓ™”¨ä¨\Óƒ…Nþ±‰°mà›ZsÝûD°@þÀv­3sµjaEz­ s=ibú²w©¹+Ù‘–Oï6úµÜXã=õ†Ób†­Á¥!!™q.Bû$…ñ–5ÂÀ¸˜3­´‹Y’lyZ/rGc¥FÞ€ñ£ PàÞä«Guì„Y3Oƹx ¾1—GŠ2jî/áá]2=7¬žµCïs…î‹/ÕÂ¥Câ`†K~Ä +ç…BYF„¦ç„T¸MEá:„]¯È¤œuÓºy/6…ñ~çEŽr9jÆÅ¯•²!à×y= ­xšÈ.“þeÅ9Ò\‘1š‹Q&ëŒh`²ƒf%¬*!€¢¦ÏÐõÔÿc–Màlðç¼H¦žá[ªL-@v»E=I%KÇ«ü~©Ù„f¤†“¦Ós{ª€@Œ–­iªþÛYtã¸ñ;öþ«ž>ÖO]ÒŠ'‡7IXÞëNÉ.d Ÿ¶k&#^Xfž#ý–ˆX;='劤~_0“öD˜þZQ=BØÇnz[-¨ÜùZ¨ºxÄ^,àÿ¿ŠL¸ endstream endobj 180 0 obj << /Length1 1651 /Length2 9138 /Length3 0 /Length 10197 /Filter /FlateDecode >> stream xÚ¶TÚ6,Ò-" 2tÇ€t#ÝÝ5  3t#‚¤Ò- Ý’’Š„tw#Ò-]zÎ=Ç{ÿ­ï[³ÖÌ~ÞÜÏ{ †6‡”Â"‡€»r9¹…ÏU¥Ünn^Nnn,¨+ ò·‹AâìEÀ…ÿ0xî ¹ÞËd@®÷vª8@É ò€üÂ@ann7·Ð ÎÂ;Ô  Ê PBÀ!.X ÏŽ^ÎP[×û4ÿ9˜Á, ûow€”Ä Áª W[ˆÃ}F0ÐF€¡W¯ÿ Á,jëêê(ÌÅåááÁ rpáD8Ûˆ³°< ®¶-ˆ ÄÙbøE r€üÅŒ‹ c uùK®°võ9C÷ »Ü{¸Á­ ΀ûämE€º#þ—±Ê_쀿krÿ ÷·÷¯@PøogŒppÁ½ p€5¨Ë©pºzº²@p«_† ˜ âÞä‚Â@–÷¿oÈIi@÷ÿ¦çv†:ººpº@a¿(rý s_eY¸Õs„ƒîê‚õë~2Pgø¾ì^\uÖŽð€ûü ¬¡p+ë_$¬Ü¹táP'7ˆ¢Ìß&÷"¬e6W77·?q@<Á¶\¿Âëx9B~+‹ïøù8"Ö÷$ ~PkÈý– Èpuvƒøùü©øo„¬ `W€%Ä Çú7ú½bý¾o¾3Ô`Ì}?{@÷¯Ï?'Óûñ²BÀa^ÿšÿî/—‘ºª‚¢2Û_ŒÿÑIK#<>ü<>nû>½ÀýÁï¿ÃüS€ÿÿ-ÕAÿ¾ÜáÖ€Ð_î‹÷îóß+Ãøï jˆûY†˜ÿ}n>nðýðÿy~»üÿÍý¯(ÿ·Ñÿß É¹Á`¿ÕÌ¿õÿ5È óúÛà~”Ý\ï×Bq¿ðÿ5Õ‡üµÊÒ˜Õÿê]A÷Ë!·ýSD¨‹Ôb¥uÛþ5AÿéÁ}pÑ@¸@=5 7÷ÿèî× lÿœ¸Üwê· r¿MÿRFXýZ;>~ÈÙä…ußø{ÄðÞï§Äó÷`¸8á×{À=9?€5ÂëW?ùù\R¿D¿‘€€Kõ$È àÒþñ¸ôþAB÷– ‘€ üúŃËêpAþ€÷amþ€÷7€þ\°?à}d‡áý°sÁÿ€÷‘@—ãð€ËùxOÀõx?ˆ\®¶Î?.¼OíþþW‰ÁnÎÎ÷/Ï︯ÿðïgñ„€±f&`‘ »ª æ‹ ) ޵A±1†5ýŸçOnWxè‰,Ò—œÏ¤{ÚͯÈ2ŸJÎRßøì4Ô ‡6Æk6]ûþ4ÕYkš&îÊÛ‘ªþJ…IÉ¡#¹î{ãä«`Ü€Ô¢Äåä&ˆ§‘CxáÑ!ïYýµd®?drMsý¿2öÏ’QŽHÝ“€Âq†lËw¤´h®T¬x⟞=κ£VŠeÃòÛäÍ÷1úÆu9á½ð^‡Çå =™)òéãþFéÍ$%’)Ÿ¢‚ˆ%±© ðèîÙ Ž¸ e=2Ú¤ÎAÅbi/UZé¿dz€Óœazà!5#u5†O0C‘¼u|9]O‘ù;J¨ÿå •vœ’Û§Ö§_v÷u[ظð/夆µq>2>J7ÒyÙ*“?/š‘a}µ@~-x3ƒÄ$Ò2â*œI¨.cgAÝYǃñ­¸â®ÁBȳ`ü‚©¿òç«t·ýGïy|CÒq@æH°F+é^&*”5äå` ’¶ýׯKùOM_ˆNÀCê „.ÌŠõê÷“€ü:å‘\ù°Ç?¾;èv‡žô~®w'}…w*µo êõÔÖ’À\J{äÌñ çg@„ú\ÁÈ‹ÈU7}„ûÂ^ä ·I0%wÞaÿ‚sr|ÅA§ÈÄlêÄ7Ý6Œ‘â•LÞ2ºÜ"^œ¤ZâN±É%ï›ßDýP’Ûií£8/\Q°‡og |³š ¸3 ð£¡]n[,u"Âg…„ >Ì9´eìºèXɤ -£5úmÎ'ŠÌW@S× È\Éy“2”Ýt×åmê9Ïnóyßv¤» >ÂwI^/öß"à~è0¸ 4üNrM¾ö²Ñ~_öS^—s®…Éù´Úˆ» õ¦ü΄8qd KĽµlöÚ‘?Çy¢ï€No#ÑëÖxà6?RÜœLXAwq59êN‡’6öôLƒ*’‹•è:¯`;U8eu`϶»Áˆ˜4øû∭yšïÙ1µP#ÞMèCò×­L'úÖÕúóå£DÈnáѱ]ÚObÍ &—¨Cs]Vì1™n¶N×xZýü¾"¦Ja;°Ou¥Ï¾³ïQ®:[¼MÙE#±)vc´ÚkÊ´§lÂÒ$ÏáïP±ƒ¼Hú¼½„M€çT~eJM [¨ ð£$È®¿úõe¸u9DÉI¦$£/é¿þaïöÝG^¨¥.n˜%.œLz!E¼Mè[…[çEö¥#\ÃÑœIý€Ë¥·Ö˜8'Pé¢×âËö’D‰JÑ]-Ë+Ÿøûk=N¢'¶„ ‚wÌä_m`z–—ëè‘_Ϊ/Æ[Î%•öUp4SñËøbÊ­nVTö,3\:Í‚­m %ƨäoªXnÔ8ÌÅ’å‡×ê ó¡ÿøÕW4rh—®'{º'-nw=z(‚Úfí¥ˆ1®›LÎ}óÕÕn¾=C àß‹Ìd-!M°]k~h|Œ§<^ŒlA¯µ‘ïŬIéP´¥U^Ç8(ºæó®ï%)ëuÕ>D´uþS¥Ÿ¥r±‹‡r}òš*ÇÔ\]žÃyóûš.;^ìóSÉŸR´ów.+¸¡I¶7ÛõŽÏ,¢ø”Qׂzhûôß9×,½ÓÖå ãD«¹ùRã;sÈ(#Îawõ¼m¤ZMk—™Ã­üv£v‹º…ë}xHF“=˜ÒÏOâèY§f¿÷Ó‰š>’4ÒÀòssÒƒ ³öW¾jùþc€fzÌ,gº\ëÛóZ~qö“e4æ^-ùàQËà°¹{–ólè…Yk²"ÎÖœÎA¼­F#É"ý†\‹8DÑZÅ ò̸±ëËG<Õ%”äÄ&Ž7͇…2(03=~ÿ¶¦ÍúGäA± cÆOד Ò¿ cyòq!…"›ÑH7œ W¤.ßI®¨œR/‘nûe¡XS ô;.èí"ˆÚÛA‘&–¦||/hò´å ¾ž/w b¸ÁB%oþ‘ùÛ]szrÄñd[Œt}L¾i>E÷¢.§À$ööêe ¢~uô5vwÛ½üýFÊVL®t;lùVÐÙ1ÃÞt&µòcò»6ï;ÓËšA^šÊ4 ã@_¶«À2”:ºÍ7¦á§zÙçI 76Pñoht“Æ)¤‹ï]2RR9nüfB>k¦ Ùâš|oƒeA‚<+Ò®±t襖ŽÔf¿ iŠÄZµÙ=1÷)s¹Í°a|u­ 'myd =Ï9Ôxi=…ÿ”¥¶σœõ¦ËE=Ñ=Ǿlšo…y¸ÝKÈïÔ¤ Ÿ¨añWãQMq~*:‡vF™ºÓ¾§Bâ÷MÚK›¹(”bÉœ·-³êAÜ‚ºÓÔÂúÞ_&Ëò k9âÈðÇQ^“ ¿Í—õr|î:ïì’çi…¡Zòx¶Û†GN‹=ÔÙU{”h¸0(“öê׺ŸÃS3ÄF>äó­üfOwQ壳Á¦Þµ“¼R@@ðÄÍ´fêdή뎧 ÜÆò‡èËé¥wx@39ò¨/4lÃ¼Ä ´Y–˜FÜ—å #e¡qˆŒ™˜©˜bK¬|ÆÜeSAž®F;QÞy—§Ù9ð¹-œ“îœ_×Ãqg[ÖB–ÒÜë³ î øÜ®¼³°C'¿Ç E ÍDBr}fÿvv>&:BHÌ–°!*&x$ð2‰àf®ÇÞõ˜%ÐÎ 9pk×rº×áÁùRâ œESqäÀ4òYù8ÏÑ\ÕØüOÒysþ™,(#>tи*q)Úœûðcçy÷wffº·¼‘Ÿï„‹åóˆv“Ú‚¿‰)Þ±“^“o‡êÑL†É‹°> po²—¤ˆCaÅ-ßìÄ7ðìj,ʦƒR?t&¡Q³Ž¼eûñœ?±¬tG y‚ESº”»ãû÷FVk+±À/ c&2ùÇ ÅÇh¦yW‰Õô÷e“ݨ}SaÞ8†*á :ì`b!X¡V‰U•¾øæˆ.¯Ñ‹[ ƒ­T ‘o‰Ù »¼†ô·y-\Ô^ø¡8eögÍ má‘k‹çÛ3•WÍò»yY L$(ál šÇʘØÀWì„DŠß¾–òr™-q)½6gÁ&-jE,¬3äóÇÆYqòP‹@©RIHÕ…š ƒø¸©Fç:¢ä……þN©Z‡¿lªuÇTå}?¸ü½úµSÀë A„¢È˜z` ³AešNlòÙš¿P¯P‘ò£·øÜ˜®Ìa®ÒxbÔžîòùF‰ÛÌ z$X¨î'ê8êâ/ÏZÁ˜¶H&ÂZoJÇÜNv÷Wˆ±¥vÅÑÌ ù—\’ƒóEºóâø|]t‹}ès•õ]`g™ê–I ,f+ÑNÕø"¼q.@ñ±à¬Ô&] ]ËdÃ9Õ…ØÏî+™îÒ«GœnñMR°1.¹}ÝZ™+£¦Ïc€îPªúþYÒr}Àº¼Î‡%‹W¡¯Ö?)Ž;Þ j[½«¸ó‰è†]à¢V8½Ü0 •%êè. Ý¢ßÚ(;ìq .¤ß¾‘”Œ´o*nŽ~šW\,wü`áÕåu^ýÀ†èã¯`´Ø1lý#í¹Q²‰åòtî›QÜôÖÒÈTw@žK§g²“.È¥kË5Cäk(#«µ-&!ßyjèP‚°ÒªÕ\SrIíê8Rz<¤¸}cENĺN B,âtP¿€öÛf6ï|©6À‚iüšî{©Q2‡ï±ƒo¿§Ûä¢ÞP°Í†ÂúŸâôÇ_vŽ¢Á$ŸR÷©-Õ¤ÇÑã/ k&Ö=ú"·Ä5‰{+Ér“ˆâB3ŒþCK<Þ%5 xƒž{ 58ÙoŒn–C2JcÖ¿e†üéò¹±6,ÿ¬4·) v©ÂòÊ[*d;^Ô§k;ýðüŒçô”×çÕ«-ƒöîu$ǧ—áG‰×/Ѐï„Ömx´xì ©î¯|Leª¤åMa96Ÿá’¾c¢ Bâ]H’Åž™k¾ ªY²¨í´Ïö›ÈnÊï|Jî!°vî”ÁþÁp¿Þ9¾©‹{í´Ø÷(zzŒÄG`³N'3ÎÞ.93ü bç6„äM Ì K{{ë™lOnÝuïñTK‚›ƒ`QåK Øõ'’¡,­—ȵ…õX‰¢8}OªCÆø[{—{o÷ûK(ãAVº¢WÞó:ÈÚÍ_½/.aÃ×¾RŒ݈Iû·«&o†ÑZp~NÑ!Ûfw,pïík9 4©&jXÝÒµÁ&S‚²?³ÞÐä¼ÅŸF´ËØ­GO(4œ®$|̇N}šÝ º ¯›ïVƒ¦ÍïE™Ü±;§?,f˜®‹[’| Ð+q0Ž$OKÍÞíŸHnI’Q)lŽÖœóÎþàµÑ$ +ûI†4j(³e\o8ïNáܰ•ªm Ú »XŸøù lœKhF/b03Ü“øÉsÇ0%ýƒ0ðãë±PéËQû4Ü¥g¸“XbA´J§gÍh‡‹†aÏ{½ ¹Ïê æ_(v+ÓGˆŒ‡†›[ÐÚŽ­Ÿî¿¾y@üùÃ÷ }<79£>?¢ƒ‡ûB#¯‹q=UGHúc©ä›|,iN²\)æ/Z¸w IGÄ*&ii•ß{.9ð‹ºÙ7Ö÷+B±« †ÓŽùûY;ªM]Q p€)êã[¯ß$Î_Úù|ñ¥>×Ä+¨Ã̹:{ós òfW}Ä Å=3Ý·õŠ*¦†¢ÅI’žöˆt”!ËÝ–&)2šÞÀ¶?•}ާI)ñi— ³O+–󧸕y-¾¼†;[[úâê˜îÊÑ,4Z^ÕÀLÒv»¸M;|ñ<<´:\Ë·:ý“U*«žä¾`B®¬N4)ã;&ãq 7ÇrÛÉt2¥ÎqÊÉ1¯Xîç§ki”¥Ì=9d>jR<¡'yBuŽœçô9€:P%.ñº<RÈödÓZ|ÄnµÉ'9QöÊ[°p á%–àÈ·šÎ†† ·û¹W~]Ù¨A5Íq’ÜÛV¯­í¤ºlüw"xX2l4ËñFûìö¾àáGFíuvñå÷HPõ'~Ò{ɽ.<5ôE€R…:ã‡ÃH²Ñ3%cR‘rÉ‘®ØõÏsÞÜޝ¬Òâ3¡òHËØæä›èyŸkƒ»š6QåÇBüŸåc¢=e¢·úñµW¾’ù&“kÝk‰‘TF¶Ÿh÷R1‡-þêQ}ô¢*nìÐÚ™8G¼*ô˜;reå˜ô4îG›î[ÍËÊ=Õ4ëá³ØÏ´ãÚ )%˜jlk{¢§QÓ.¿Æ£“Ì;”<Êó$ɦü’ˆ8Xà ÿ»AçJÙ;±¾°pü±§µ£&ȵ9FüÝ2bYdOrðŠŽÖ{¯ˆÎ–qõdç8ü,}jgƒg©F¤·\Ž.e^šÐZÔ’䀇†Gù#©DZB}‹#;ß÷>Á|×v|UWКE¹Ís„êdÿªh'jÄ[Ìã ëQDX±ÀôûìdÕïÕaýŸCà ä-2KYhº"lp§¤Ê·Â’¢Žå–EWR‘ã–V Èí«z2r;FK>ŒlP 憥ÎîÑ`õ>‰QQG; Ña7j‘ÕB²rÑð^}dÁX·ï™cølsØcŒîTHÛ?pšÓa[‰ñ™ ü ʇõyδ3èlg¾]A 0y½fØŠY0Rù6Ì¡õrÒŸ4÷¥„¼G_døù¥}ü.Ø¥Æ7¥Ø4—]Pu¦¯ ­‡9ïÉu?&ûÈ€¤õPê é\y9ŠsyH×àE¸àk䆯yþÇz¹ß?;Λ¶˜Žo…žqHÈ*ÙÌ–x30U~ñ&T-˜éºº½°óß›(â?¤0iP &|R'"OÇil£/ ¶ûdI´ k%­#éRt¸þTûˆ<†å›säÅdDZ¼BYÁ4Íð®³:09G…y7à}¸þÀìºÃ¸y*!·|†ŽZ¹bf¬é0 3…¦Æev®GÁ¼‹ÛtYJó³óòŸÕ>‹èp«¿äfé%nè¶7͆<Ö!¥Qö+Sr ½kg>h¨»ö×ÿºN?5"™¤y‚ì*Sn’ Œ"¤åöm|aó²ˆ-!Vq“žüsmšß ª2"ÑqÝf׸6*ú˜µäSæG1±bò‚,•ªFµ‰a{‡–Ï/IÓ|B#{™ úh¥ƒluE%« $,ÌnܧÄwS¢¹8:%3‰¶ )C¤1l¾áL¬¸¤œ=„èô³Ì‡¿¶êkŸ™û€æ}¶uÞ4«˜RmqºršëØèU«]E¡šnÞØ S‰k!kV% n ;ÉM#y˜|+ E)t¿°“²kA½0'”{’o$çZu+:¡°E+Föp«eÂÙ›8é½7ýíìlÛ%ðÒycQ߬Z4Í5JÚà|u^Zþ £ÖÑ"ºJ2á]£FTž{ø¶v/›i™eG³Rò¬n÷Ûè4Ϋ¹F廯4Æ’ªyRLšÍc—Þ %öœ†}R,Z¶ 3rË4Š Ù´€õýý®ËËÀäøÁ‘Ük­NŸ‰ã¡¬¸çÕŠ G‡Ù·g»˜õ®ÊH2bê±IL¢5˜ž3ËM JÈ}9nÄê9.‹4­‘°æÌ´ìD‹l‰÷Ó8¯íù«Öóm°–¸‹³AœK*“‘¡¸>¢›¿@c'߯þf‰iV{W4E‡à“²Ý¾ëÜîyâó½¡.†×ç¢^iýd_ÓŽü s¿Yä¦À¦7…-nE‚^dMLÊ\TCY)À3[ÏpÝôy§/:x×õFs;ªNR™ÄIi`ˆY>‚Ž:+}ªÃ•æ]CyÆgþ‚ÕôììMTk8G_,2-ø®;ÓIÍwz6ß-_ɲ’¯ägZôÀ,ç »›øê G;#+¢Ê¿À•ÿÚÀLÈɬÅ6Ðúƒî~á)Ì­,• ÅÉrã,CPÐu§µ¯<Ö…¾EÜ\rÂIPK GºQõµ =/£CƒËÞe£5Üq¿µÑ¯HÑÞªò}v‚M“müU×ÒG£Bs%ÌÓáÇ~Oj$Î÷å4fÅ´Vÿ#†Q£°´ð¨MÎG }ßè0èäÕ;µø w!5[ø–õípëânÈñW6²º%^/ígñg ùÎÈ”høE8þ᜞Lý:+ûÒ†RúݧÞþô¦^IÔ]‹zæäíple{˜¾Mˆàq<‡;!)r#ÛZ^*ð4Ýó\-íA#SàM¿¶úÃ/­³‘Jž­y©°H6s ¨ØÞBLRv:›KŽáQ ÷&øSyGˆ$M¢ôÞÓ8 Õä’߈¥ä­%¿Þ\ä™6b©™‘+k£ÚËAcqÈJQõSór€º°éo a^² ù-¨ÖzÌÈ <ä+ôñÈìÌìLI~:gtòcÀUË7ßj~à[ÍëfK8ìó¥jÝ 9qâÖNÖ8»H9TCJ¤šçn>(P½r¶À_ ©-o¦ÚèY]Lœ+ác1#Žª|f+|ÛôÕxï!²²øöáð,zª¨IäþìÊ­Q˃No|.ô6±âÁW«ÚÓ6Cäںȷ°üdKiâ •Ë*qÚ„}¹`>”2(t™fÚi_Êc-úøjÇ’ ‰Nèçl%ËèæŽnXXi-mBÁ%¾9#Ô¯se…M>-T’Ü~/$ÆQFËA-«3Ú,!¬Lßtõ>œŽu×Uq!íóÏUÂ\ÖWOZåq{XjITcækžZ¯º JÊ ±ðY/NfìÐJ;Âv‡õl6½¥‡SiÄ–œŸev Xù–M©¹ÄÇs‘4P9föÛJ×Ls˜8»vzØ‚“§#ý^—‰¨%Á úšŸ’ÒkÝÆ"µMJ‘1ÛÛ 5VŸ&[ù9è§`Ÿ 8%ø]&0QP 55WÓŽ­àÚ‡_5ô¶tY¢ö½Ø9zøÕÌÓ¨7EtHäÑ`|ú£xrsS–Àü¼nI=Sb_“÷Yw¢š|¨Ll¯^‹œøp#S~ó(1Rò “r‘h2&ÀBЇ¸|»p#õUEuœÎWM¢D G¼Fß# Ôï)ŠFŒ‘ìc•è8ÐÜ]Ng£ž}=ÖÝÊ„.pì«þGrJã'ÙJxûá5Ê5·vöƒÏ÷µ^©{uSTh2h›ˆ jå´B¶5ðG§<öqa½Ê×.œKíÕ/¾ãmNÌ3–¼;âÕöÞöÅP@ ûÍÙƒW›ázÜu†{Lៜ;ësŠ›«x Óy~è³ %p7âúŒ4os¯zR¢Kú`4ž½(a·x‹5òÅëî훌ÂC¤‡î™8 CÑ*rÕÏÜfs¯ªÑ*´P|ÆF@¹28f핹 (˜S™‰7HÛ´÷QuËânÑbïÇ=w½\ÂSëòþ?6'ठendstream endobj 182 0 obj << /Length1 1787 /Length2 12433 /Length3 0 /Length 13556 /Filter /FlateDecode >> stream xÚôPÝÙò c Üí@pwîÜw—àîÁ îA‚»»»»Kpç1sçÎÌý_Õ{EÕá·º×îîµ»{“Ë+Ñ ƒ b G:&zFn€°¬:#€‘‘…ž‘‘ŽŒLÙÜÑ ø_;™*ÐÞÁdÃý/†°=ÐÀñÝ&bàøN”Ù¤œ¬L,&vn&nFF3##׉ {n€ˆ³¹1@– ²:À‘ ƒlÝìÍMÍßóü÷@iD`âââ ýó8@Ðhond`5p4Z¿g42°(ŒÌŽnÿ‚’×ÌÑÑ–›ÁÅÅ…ÞÀÚdoÊGE p1w4(€öÎ@cÀ’rÖÀ¿¤ÑÑ”ÍÌþãP™8ºØï+s# Ãû'c =à=;@IRðÕhó²Ì´€¿.ÀDÏôw¸¿NÿÈÜæÏÃFF k[7sS€‰¹ðUL†ÞÑÕ‘``cüÑÀÊô~ÞÀÙÀÜÊÀððgé1A€Á»Â¿ô9Ù›Û::Ð;˜[ý¡‘á0ï×,jc, ²¶Ú8:ÀýQŸˆ¹=ÐèýÞÝþj®¥ ÈÅÆã¿ÈÄÜÆØäÆN¶ *6ævN@I‘¿8ï&¸l¦@G###;'hº™1ü‘@ÙÍø§“éó»/[-Àä]ÐËÜøþÎÃÁÀp´wzyüÛñ¿މ `lnä0ššÛÀýýÝ 4ù~�¹+@‹ñ}ü˜Œüýý¥ó>aÆ +·è¶˜AFâ]­ Í_’ÿv \tlì:f6F;+€ãýÃëãü}ÿUÿ§UÞÀü¯êþQÒÆàúˆ÷Ûû¯ç¿&ƒò¯µ¡üo9Ðû<”ÿŒ¿6#£ÑûÓÿç%øóÈÿ¿Ùÿ#ÊÿëøÿߊĜ¬¬þôSþ‡ðÿã7°6·rû‹ñ>ÏNŽï»! zß›ÿKUþg¡…@VÆÿ×'éhð¾!‚6¦V_£¹ƒ˜¹+ÐXÞÜÑÈì?Côß.¼·2·ʃÌÿxptLŒŒÿÇ÷¾sF–ïŠÃ{¯þtßWêSŠÚŒÿØ=æ÷¾ØÛ¸Á½·þ±<˜Þ—Ôèúçlèm@ŽïGïâ¼& {¸?:ÊÎ`üÃôÄ`þq0ÄþA\†¯#®w¦Á?ˆÀ`øzgýþPÅ`ü/È`þ ÙX &æÎÿ20¿@Nöÿ:ðN1ýd0˜ý ¾ 0ÿ|¯Äê_ð½ëàû¶0Øü ¾—ú²¾sß_ð¹ßK±ý|Oü¯²˜Þ;üSöè üwtvƒã?„÷\ŽföÀ)}/ÆÑô¯ïµ;ÿ ÿ§ÅFNööïÏߟKøÞÿÿâ?ßZ Ðh·82â ´¨l¹¯Äs¡Ûû2M¶«–BEç±hßêôø :‘ª2ÝÝþV0q° ye[”òF`‰èÅ㸱:¸)^¡ùÉóY/Vqr·na³o<ïX°¦—ŸNY`ÏóÅÎSÕϲ¼]Š,ÛΉó“|.Ú½K¸kMoÉòÈ·¹]…½Jviøç’)ºH•m¿Â²ÃŒYl’Žt0Ô¨®H37·Ó¨YãoDR±4p^'‘,ùšÌQ³î«eÊÌ8¤8šØ7¨#“äBIRXóEë_æ39B£–{âf¥UqH¼å±í‹é¾¤ùÊ´£‘vd¹¥Ù[©ËÈ)ˆj`<‚ÈŠÄMâ+>éeà›û<¼|&PŠS7¦ií$ì89Si§öŒ‹ÆæfŠÜ³&¼ý‚¶Õ–áÍþüð‘¡Ô`R\æC¢ ØÚç%¹¯˜S£J9^¢Šƒ‘µyZ½o9ôwtÁžŽÖÚkÜ=ð®œXòcO†òµñç§/ùí1fƒZuUè7Èzm\!ێ̯,ñ¿8~ÒJ2c }:-ÍàJYgœE·vÀWP›Px4V?!ÆŸìåÿ4ý’ÑvZ¿¬p†zÂz T —ˆ„×™£OµõÑ›ÅçO÷Ûá<Ëär׫à:å‰ÄkjY§ê2 ÔM¯ìù̱&ÃÔY]³ÄÍbî:Êðz“©}*s‘1à2E•‡é´3ÛTðý>–Ùaá\1It®ãðÓN‘äe¢²?èós 𬃠>ñá僦´¼ÄE¬½Xï¨TnõÓw¼Iz9ïãb_Õé*;)½I‹éÚ-8ÇW géÅ\¢V ¶LªÌ…‚]¯jœ¤à\îÑ—A ´Þù‘˜H=—øgÕæüg˰AÇzQ|O÷ÒvÍ\ó4žL¹Ÿ_¥‰8qH.`&‘‹%—8ÚæøùHJ3d`9ž$ ºðPOî†X±Á·Ã‹‰! ©í<2)¿öBä1S×à}œÕÇ‹àäViò»´R)Å…n”̽æ×r)…ÀÝ1‚%×Ü×/Ä™,Îj[«Bp0–Š$S`6P;ì NMø)sÍlä…#û-iEÄ’&™V35?› Ak$B3Ârœ(Žë¢P~–Á²@ù ~{œ5˜AâÊØugö²tÝIK`Ékó`‘d.nÐX2V”–`Ѿ§³×ëLßéèÚƒQ {g)Ú©a•[YàeLO”‚߯鿎I„ö)øBT,½Y'‚haS)I↮Œ‡°"òËóž¼%'¤ûÆ’ïÀ<£¥kñ ͵*âØ°Ñ©‹¯àÛäϸmê¹j£C†{Gâó® ¢O3¢8á4Bn¯‘Uqßùø/Bw%a‰zcÈŸ2‘EìPI#޽DÚ+:êÙV¦3C­–q:TsPö‹78)ΛøÖ78$²²›õÁ{¢ [|(z~Q¡ØÃ5mýšŠªÉœ«„ÈÏ…ÔôNÞO† W¡‡B nÞdÉúà5g´Iê)ÜE‹-#~ð~Öru­°é¶û\÷YÙ¼‰ùÚü^mžá·ù.u¿´þÒ`fNòâ ޛס)ÏX{l5RY¼@^kßœD¥oYçñÓÃyñ²µ ×Sê#]ðÝnöF±rxÙi/b7¾£< K¯ìªÛ–{Aàí&¿æE½ÀÞ£"º¼9ßÕÎÄqþùɲsˆªØ¬¶ ™åOPʯŠÈéœPD!R¡ÎÏ©?¶÷„ÊIâ*8r±B¸7¿…²ÎßYû!l8©D2ŽÖ uú3¡ßxÏGU(MwoÖ(óô¿2'‡7¾äa/»²|`܆¾¡ÃVV­òh©„½×“8 × Öj¢Y õom!&G<³FÈýìt<†`6òñµf²(ÄOÐ}§`t›\?-ÆÎŠú|#£`„Y_ ÁãÐ~ Bu¼`«XÁa‰LøBÕ=Ö‚³Ð…U„Ô5ç©¥ø}ó'›Ÿd$Z`I†}ý ‚+²Y…™ñ¶¥ê°Ò@G°$ü½²Ù€rü ú*èxÐï.0вAÍØAEòþ˹Îãt*²¬çô‡ï±ÆR÷Ú%ŠŸJÅÝ|‘êY)‘×墷ñé„€-R]AŸaù±µÈšK¿‚s):|«gI U„\ÆÄSoö•~°,;ÎÙàhCi7™‡C…lÄ’r[AHHÿÌÑ2Ï V´k©ÎW;DB±o”D,õèT¹*ØsÅmüÜÉ{WŬԲݙUz:/ãUZ­i,ƒówQ‚O ZøʬƳîB,Ý©Ü"¥W ül<ýU¬šy)†AÞT Þp—€B~üR\ï‘tMHÖ2ÀÙYݹò(Ÿ+ÏÚ§A¸Bït#†l‰ƒñR¨2!ëÃ_t˜™Jß™Ï_¾QÿîMèÙò´‡Ì63ì¡D5±i!È Ï!ƒ:ñê•.W`ŠsÄBªù¾´ ÿ^à¼øF“™e¼Nþ™‘htŸàè¤U;­0:ò$ªÒOŒÝ;¬M´ã€æ"úvu_V¹xÂÞTª6 ÿ Mñ´†ÌՊܯnîºùÌ[ÈlëˆXmî: ³v£íŽÏôO{ eÑ'+±}êÞ0 ŽçÅÈ¥ý<øŸ¶Jüd æžÃ᎞`Z0w˜†¼x²_Ò§8°'lêpý'M–¸0³®!Ïu3ž‰xkQU>@›²æ°¼¬Š“ƒ1ØÊt‘!%,ò”·8Æï!‚'sƒG`Û!¡?ty¹È~Ç@aó€Í/óýÁHoXœ¼mA¬¹%Àž·‡èûêî6g5CõöBR X¾¸‘ÎAßèXU±M¥žÁ,2çA${Qùflï»Çopãð¢ü¼;¿Y{ ‚Íu]ô gîˆË ¹ )/q\òŠ.Ÿo½vØ…ªy ׿>Xkà\}ÙnÓ“="ì1ò½𬣵G×דîüÖƒÈæ£ÕH§'{ZIÈÿžEž ÞÕ„nÑFKv†©B>¦TVˆt”ŠQš¢T>jÚ¦½ÝÐõ–z¼: EcÆIŒNƒwšJ“ë±0$‰Ô2äï¼Cë™?a .ýwtó{Y_0Ù ¦¨,¾,`z uAn/‘ºÙ¥Sä\hëÉ¡70ûý¥d¹í¼¼.[E_,ùÆ —_-Êä=ñ-o1}Xˆ½ž|sð¢Vé^.°(L½2²ÕññNåäíØŽéLaùõâq—9#ØŸ,œ‹Cnì‚ÔÝ;F·«3 ‚ÏZ¦[Fn›ëÎ-ô¸¦çÛ À`žêã8‘Ê3•=ÿèØWKF¥ «â-sÉyÔ¤zcã"ŒËgB$=Ew<Í'*»Í À#Úí§³m¥“õ´}yŒ ‘¡Þ8×Tœ0Ó'=0ñdsÉ]»1 :¼3 ž“‰pï9“´/vé­õèR=¥e"ÄšËm³Ò"xƒSFwG”»¼¹êØý1ØôD‡ˆ,˜!ý`AÅRÑ7]ò÷q‰Ÿ‡ £iŒT6K ”•7Á)3©ˆ~=‹Jë/“Õv\¾*…ÓK÷–d‘{rػ̊¿à,¤=f’n¨†NÊå´-¼ZYO±Û1kK~óÙHŽhZm?É# 0`¡êˆ—ã8â¨!‚šÙdâ(Þ“®u§åÁ^ÅFÑ‘9¢ *ò““ab¹ub…”¨«%˪.Vy >g˜¶›Óh/Ì_mðj3ôœø.תçb”ó³ÇÆÏº7Åõ^×|³Ÿç¬/â n6ŸÈYSN/f$+>̶͈dêЃßíÈ_™PQœ8?³†—vŠJ©úŒiqµ[çó@„œØÇ|²‡ ŽžŒžðÔºêN¬È¤Œ¤–ÅZp¨}N«™Šû8 0?T3Øß$¤*Né³a¾ƒ¥µ#Y¨&È+Ðp°ö¥Šý–¿íÐ %‚QyH¼ø5ÇQÎA†íflì0V†èÊ)Œ. œ}ÎTÏùNf”/ZÙЗë-IU+MÌ¢þ{Ì¥LFánÕã®3Åq ˜@wkÔ§MS(˜%˜ÒIÆ"‹4ˆæ¹Z½½ Ì+¶½þ逦Ë)Í”òäFmÊpÞS´ÄQv¤@à5GײH0êyQs–·ÅX.wUWïû ! â‡ê¸]A™Ý„/’2Úâ¤Q"lhþH H>°5(\‡"9pÐ!O®\ÞÒI·¼:íRª•9w;YÓ{µ¸NQœÿÅ{¾ ¸iœ…±g¨/íÄJ3…î\q#Ø^“þA‹ÓBgS’@ü,…„¥EŽ0_†½wmÔ‹óá’‡7͸‘ª»z}«Op‘âŸSÀÍMAéØiå®â»‰QòŠý¨ q÷y — ›ODK8¯'öw'‹¿=+¸¹ë‘U?ÈÅ}íTqÿ4¸"axa ^)"ñ©ò”””ÕQ¦¥¹Rʼ®EòLN[x.ݮ΀^:…¶¯ÏW8Î Î*†ƒ"ÓÚ$ž¼4ÄÔ»YÌ´gþ:TŒ²ëDPhݹ ”÷ÏJ…`â =`œyiRæÌ`áÉ£±t€ó™„îÀè—\[»<¹A.”Uo´ëÄ{É0ÂØ6¥æOû©×‹ç8¬;«ªÂBB~Å2ûO®£LzÅe8”ÚÌCÛš;mšôÓ+pâüw«[x~G@ÜŒˆZ§_¿8‘X6l“ž9QDìhãûÚÈïW‘´Xd®7>ö8Î1 —t6(#ðìŸÅ=ýBæÁHÐùéĸ ýa6OáYë‹»ïëP¾|µ´°Š]œe6XBÀöçqtþ}ËÆ*xD*YØß§OâøŠ„Uýj’ˆD$Š…j¯Í+S`ÓGs}UÇ¡ç©ÛŒ4c5³Ê«rÊýü×XyËg~ÍR¥®nÞœ8N¶u¹žˆMülçU8o¤ZT/rƼŸ£*'6UJeg(9' S EÛŽ%Pw?";Òw™°ïãžÌåt« ¬±”à|1ø¡ÛäãŒ-¼­órµSäKÄ<…Eb.\´­²-&Å9ùÒý22ÈìqÝ^ e„ŒÂÑk®>Ú–ˆš»éÑ^~ ¹„*–;;TÄ(ž‘Þ²yðõÇO9xîÃÙ¦À€:1–•Ì‚L=JÎLnn}W7UMR¼¬Ø§P«a¦b3¿öWÒüJ(h•£Oþ&®ù®¦Á“€Q²Zÿþ„„Á³|µË§µ,ê¤vÀuxÓKÃ@˜iRžéÉË›tûB@md½ =|@ú½ÛC¹Wf.£œZ›8™ ‘nÔÚ»ŒÓè—ŽÓ¯lûd¤]OAjºš;[~BÔj2ÁAÜ”Žç‹IZÌ3fº2*çð@ù-ÞÞòçÆtF÷™Â8ES¬ý¶/+~IŠôµH™nécë~‰XaØ–›€»(Á7PNr¶ÊqÅ —†=ƒ’ çJ#C3XNí7ï­O…9(yÂ’r¶)ß§ô#vψ©Þ85ŸKêÏ\‹²Ý¾]ÇSôùhYúÛtua>@Ç·¢ütÐèpí éòwR¢ñkP¬nóžûaÞ®‹ì}¶G&/üYÊ ÝþSœ«Ì¬Ÿž9vá‹»øÙ Õ‹ÁDåʱWW;r¢_àGGìÂ.¬¥G—fòÌpë%…ÅWG•C1ï芔žºj÷x9ñ€WÕD_¨êX›÷º£»ùÔ8'±ð‡ÜE¨ UàŠ¡j|<×eɇV#®”Ú*çûЇñ,ÖCݺúíc+EN¨r£„W_ÇÑ)Š:š·0v0Ø™l3\çËä™AÈ`Û ¾L§S£tÆN¦ö 2¡áÀT[‘a´ÄlÕ>\\¦$âOhFU62µß9¾R#`ònÑÓ*‚ÃÄ÷P~*™ë…¯(\1bЀ‘ÑwV´EõË&ߔі´7»=™[x= Ó¸€¹LŠ™pù¸¨ÔÝ?F¦–êœy u6cvíyW*juþè¢d —=wL^»âM!Û±R˜œâÏ g™(_úM¹³Í¾÷òŒRÈÍ K±{‰ÜCfÞå™@¸ÖØÏ¶Rï½@vÛ"×ëBР8@µ&c›]qÚ.Ó=3QŸ;6D#$x*|²³¥“´åû¤÷¢¶ö^*ÇSK^[®ùt ɱ9C§g¥(fH?•öö}©ÏªJTú Ê?x“áºÀvIÓÛ‹Ì8âEl¹ëfîd‚=tjCÖSƒ#m‰Í_Êv;û]®Ø†üÚó 2%ż‚Ïã”×=šžnÛ²’xpŸõ'–Ýu~qnú v^ê7 bÓÓˆ >+¦¥Ý‘ýdÁ1Ξôâÿq/ö ­›1³!h~&¿cµ c1í‰Ú…¹!Àî´ŒÐÙ¶ë¡*šK¾°á+B%²è‹7’ºU;f9*­IÌéDä®ýé€õ=`hy=^Th¦ Ô²ã|j—÷64$±Ú¯ÃôÁ*{úÃRë…Ø/“å»(%¬fg ×jÐc,>j <(!¦ :ÏÒ²MtŸWWèe-«¡HL&ëÝè®MD6$BÁÁ…óøÑ1Eä×ó,¹°NkÓvkÎûüùM 7ŽZ9æËãs²l°ù’÷¯CêsÛßcˆªÓÖ•“ú”1i²Š/_}0ŸŠèÉÊ-kšÀ¼]+UMr~Æ6Ã2OÛí·/Å#`D£ˆPÑÁ]xi!}Í)(ßæëÌ5°»jº LdDŒPÈ[Et=h¼HêáqHZß/\øæú>bÍ©Àç9´¡ÿ:c~.ç&w;ÇüÕ#ië×goE¹ømöxㆫ×ÐצŽ-ñÄ•®âª„ÐMpëûGÔ"b?$´Jn~jqô{IaM©`n /„ƒÞH·rÖW÷3DØÕë¹ ­ò·JѵEíÙpå!ÿàBcÁ)®üܺ“Ú‚LÊ@èã¡2Âp}Ÿ 꼦³F ÁU4c·/`†ƒo’¾»WkÖ>ºrÁðý=ü ¡q¡º;­ß N³#!ã¶$­, l–¢F»Ê˜§¼ Ÿ·ÁJ1‚Ûm8ä$uQ¬ž_ý?œx‡+c.'“ òÙ [ö ‰É•€Æ(ÎÚ.Tâ”kÅ·­_·JÀø­‘ýéA9BâÆÒõËãzâ¢=ÊâÌlÖtLnî]JüÜô½6W©g«/V;·B=±=—Ž}":¦8‘ºþ—uyzƒè®[þ¬ÀÖ§bCÑ•z:…0¡IÛ˦ƒæ+œâ|)Ë#5°%;"ä_ ulÁú|åt®<îttáÌex::Ð|I«R ýçW”¬  4ìÈŒ•¥!îÅ®æöN>ž‚:£„Fçz¬¢øÏNˆ—`˜k ãh¸0.RÖ)ý@øîˆðBp6—x^ÛÕÜ0袒µ\aÚTd0t¶yçyÓ{÷½voÌÛ={çÙî½»°Þw.€²-ÚÔî ©”üYaŸôMZ.„µEjTc˜ä^z¹ôZÊ’®,M”¦šÃ¬!ØuÎÉ8Ìó=Q³ug@/Ýr€úË”v¤"Ìæ6xÚ‹"öñ~¢k¶½ÀX¸üöøtÌÖ Ôžr¶µÚJŸ­3cϾ¢÷o—a²½À ¯‰ X8Ëï]³’$œG ­ÃÔ¿f^?\7ut»j*H†ü¼bCÜVß³µ*í™Ø×¶ä/pU@cy>hËŒ5eáêÕRùDv¥Z·¦*æ‘Yò*N'*b£ è¶ShªCë·,leeÓÛwTê{S;óaØH«3NVÿNá wÕx ‡w0&’ÕÛh`æRû(Vìn…HÝš%b˜Ê…Kžò0 D¥èÎ<#ÜåtAÍ´~öI¯ƒd™$°ow …\Ô¿-Ãr–½6kÂïe:Ú©%ut›ÄG©ïf SôÞ©7#ØR®*h Sño±Ž$¸”µÆM6‘n°ˆFrPœJ'á]ˆv´N?òëvËÂ/Y{~$6W0Œ³‚åc1˜]û&f½@fš#Y*ÿÔ)Û ŽÙ26`f=B " fµaœ>£;¦1ÙcÖ³ÆAà¸ùY³1 ÈgÃ1)ܨ³LþÈA@wµY,£ÊûB<ÝŽíœØHÂû Uj½}€.mÿò&¢»l‰ïÙ=¼ü'ñø!£°íœªeVc ¯<²v²R•²ÉJ¸±0þh&ûLBå3jüµh×Ô9>Rø Öʽ@S J˜‹Åˆ\ð\Álù ÕCÐÝðÇ FZF²ÇI õïU‡ÑÕ8ºÂÿëÓ=ÿ×Ùî>Ÿ{rcPN†”²NÈWDAº!› ùÞ Z¨$äj°ÁP¥6ÑíÒ šñ)6\2U5†‰r’ÕZª6î(*Qàs ›Ç«äšåþLÈ*žÖ¼:ªèç6ÊædXißÈ‹än«™vx¤¾…Êc¢µÓHäšh]ûŠÚp+>x<] ¡a_$Áµgqr!ÎâV½•f®¥&Ã`ʲˆ=ô/Ü× è̲¶À'¾]b°JEÞsžKÙäéI*l!f$¿´Ö#­-‡üR.o¾(úT¡ë‘S¼ùd'ÅŠM4=œúí Á3Ð<¯òŸ³b?×Õ4è DcÀprf/ÁFTÇhS—þø¬ð"DFDÕ«7‘ù•×ÑùåœBÑ Ÿ­ÕxN·eÐY@Ó(L1š?6òÈûm^'¸O"ƒ°‡u%àe%1~?bÄàð ¹.Gï‘ÖÄõ‡µ ÚçkèaR”§åo(Qp²áÙÝK.÷Ì¥,ÐÝìiñŒ„g´O*zh³غÕŽÙmȲŒÜØ×O±®1™æuÞ•ÃZÐØý}:‘†ü//LX¶|а··.iC„ôR L£JE½P“¾1Ö¾ÑÔ|Ëu™éoìl y>ƒûÝÚÊ<ŒB?d[X<ªd‰Žº—I Ú8õ¶­YÌÀ€TPÅtà^ðžÛÀ£„,¾‘0ÁMgªLジu]³Ð±tù+- Ñr¯ P¤K˜&Ø‹­Êã{ÀAÎD!ˆÌÓ]2iëiõv«+Y KÖ£†’-sRƒ.;Mkk]¯Óô»äü­Ø„ÒCæ· ©ëncýÊÙ&¬óV‘¢Ÿü¤ê›*Ohê¢FÖ0žÙ™¸–¡‡Øo¾0š9™Å¿=·É‘wÏÕ+H -Ú–6ûf©Da ›ãT9ô+ŠJ~'LJ"›l.í²|g‘Ä4äH_!cÈÅ„}ý{x9 wÜ:޼嗍nOþœ^ýÔBÑ…¢È6ª\µÌçhi‡ §l+¾èmô²³g{˜1ªð äZ €Ìõ•"J ='â¡åî0ƒa9'ËrÍ1m±Rd°Ÿ  ,ãžžVã3êã眒×q•ÛÎx“ãÑÄi.ž-ëìqŠœŒ®Áκ·„0Ó,FG®çÏÔº\½ÁǼ,­þLͨP´¦µ1ÑõEÔ£˜<˜”Éã`Žt*½mµ Nzyöȱ‰qB»)(M1¤fkÓKÞÑ¡îaÚD]óԠǾõIŸ !¾ô(‹<1œ1AÒŒük‰ÄæÒÞ•T|"Ø×ÖXu z×µ£BÉ5üéI¬Ë‚M›õ@õ–©Ä6|Œ‘WéB÷+lÌ÷³“½çtufÞ4y¿^ ؃š`ûo¡¸Í&9™‹«uIT]O»M¸Õl›8Õo˜Z_:r$û)2‡zü’¾³Ùž4ÿ¨ÄûÜÞ9ôëÎÏ¡î¢ •A w /\µi|t"b­s±Š?2Ad參8· 8”\júѲÉÛœÔcÓŠ8KÜ3g zäqF°d|ÿºz½Ÿªÿ:ŸÄðV#û «SSÃËóX)#]‰´ÂQÎà€üYÓjÅlÐê¼Å½äÎØ‰÷ù¹xigËS³Ëy&4=¬¡s‘Cö¨é|QÎ#CÞŸD'œ¡Ö측1U«ß+ð}Þ²K4½Ã‰º†„ãsby“²l%2Þƒpy"$ÂÌ¥cSw… ‡œý:Ž•I%âÇ>¡-³R°“?†1¾¯,d‹ a¾Ý(Z׃'5gì4q®‡‘&1Ý4„ð ¹ÍïÆ=n|¦œZÜ/ÄÃÖ—~£à¿ãPà”aw\,¨ÔÛ˜ ÖÖyQÉÃ0°)Üs'u>.Èá2ÆS Ï* Í÷¥.~þ™eà ü…¡†#Ä'¥·Áâ¶ g„òìð€pPÉ€Û%\¦¨á.;Ün;o*Ë¢W]P‘'GAоIÜcÐGê'Ûªã1/º¥GœGöuߪ­`äbq³ÉeÛl´úÜøtIßrX…‡øKøBpÓ´%Ø~íQÈ{…HÏãmêgÊÚgc‰MDh曟 Õãɬ€l±†QÚ„•ü³!镲»Ó6S ‰‹‰º¡üD)¿ÙîE^’ÂàÂ݆2oÈFOòGÚ+ á†·× ê~±è¶¶ ½ l˜êר¤›y ˆ§I-ÊÇ{øÉ­¬Â¿ìí3^‘GŠ‹Œhá:¨ç5.„'/Çâ{Ú9?øgý*û*·b§ƒùÊÙc-Dç{íÞz° ÓlHónŠFŒAçdÏ£s‡ìõÓ)|íÚûA4³où¦8áüt€ €mòòC/BåðOôÑÊ£§Kz‰ f®€›÷“')D²ûöå:8Î:+rŽÕl[´AOÌDQXwêÆKpæl@{ÛÙ´ Tÿâb¹¾‹•y×Çý„t÷j²µi¢ž_§‹ô8—šðUúCOÓzÎ:TÙ91{•ÃóâU‚„¤^C°Ô¯"¡¤Ž³›g.¾WeËf ô=í„â ,¸ Þ“‚[“dÇr?'ÚæÖ AŸ¼h­ ?’6”§µ-.ÞÖJ‘)v}J¯ÿŠ46ÄŶ&Rø¼;£t1é]©†”i$C­KBá‹TJmïÀ±Xì‡N†ü´,3P§Yi#äË]’Oñ6]j}ºŸaÖÔjÖ„VùyÞ46±ÇÉwuº*'h¤…°Åú¢u)'+Ú S³îâÑFýФà‰¤€¿_#’ay±8¥òtÌ-è=Æýð™BÞŸ¿o MéSƲ%½ØÅ]z…ºÒiΆù²vtžž ì"W¿ém˜RëÒkÇÕì;ý¨aÃ#ØÁì¡ÇÌ4V=Ñ2‘¸ty‰Ü—Ó1LÂÀ²ØÄ=Æßà°¦‰-xºž½ËK°p™Òô\/(:‚+VmÆÊ%2‘¯Ö>^9R-Yú&Ï…&*þbÓ›|àñw1¹GfÍô‰!5%¡‡ðKümZY Ëz±~œ MVäG'–ý‚á—˜ú 7å· Ï»…³)–a™Tut†P…Ì{Ó8­²TvPùÊÄÂIÚm±ä±åu69è;ÔòÙ†îëÀ¨N¢nVR )©GxÀS¬wz7ôñ­¤R^-%3ñm”‡e¯¿LÌ&4Œù¬÷'€èÂÖ½ !ESí©€ éÔµs¥Ö†îˆ"b*E8 ½¼/aÚ)g?šó<›®Ý8Oât˜ÏçÅ(„‰^ßLÒX,Qk¾î@k3&çGÚªíj ¾yÙ²íX»F°Ê]n~>I‹F3[Q™·úr‘Àa‰Ïù3GÕ3J_íVm©l%‹CöÐM!Ê“ó·GJ·Á“ £”f_¥ß¡ÀšŠõo¼`ÍÌ3탤Œx FÄä)UÆlKóxa•7ª³ã‚Pլɣ!\ÒB®%ÀSÝ fì„‚[º]‘š>×6|c€<Ë3R²ÓW݇žÖ‘KŽ“u–¹”º5`âPÑËz«¤0!!R±”P­ÃÉ<[×Ü#€Îðɤ;ƒ}ü€.õ-8§ëÀ–¿ïJˆ„‡’ð3—O™ ’Ai’Æ}Óƒ +wKš Íßgè ´ù%‚O„–ǃr™¬(Yn*Ƶ><=‡Y„ã °í­…ùN¬f\–]Û+{é¶0ÊÓv{q²úSS™ÿJíUoÛÜE›ÕKgQúè– ¯ðå }( ¦`½öFºN‡Âó ¸B¾½J :â)nÇÕ¡¯F‚ÝѹhN;)•´ x@+CB²OlÅw(ÆQbÏÓ‚ôçhÅŸÃúþÍÆ#‚_yšÀ=‹Ä®sH¬Ùf(­(Aúw@L§Å¨˜»ŒJ¹‡Y’DÇ.´†Ø`|¯9 î‰à®ðòD#ß©v/O§rH¨ÅÅÝšoá{v”‹ÃdM ÐNÖóÆk¢ƒ:Ž[ „»zóµ Ñ€—wDöoŠEy !u’€ß`ü?>£§¤»)†Ò´!TÀÎÓüöKt'þI?v9€+ ?z<€á"G¦š«Ýü’p9YìíûÜ0fi:œ˜Mµ¾V4öígÚ¬ªHÃ' –mÎqÕ¥$á$´<1L…Ceèœ%;°ãÚSkX™^ªŒr?ƒw·T×¢ý…îÔí$ëÆ©G.x1ó —·­Ö=À`†oû^þšok*œâ*·mcƒ¸_Ô X-!žÐà“;¸í +,ÞíÏU¸‹ò-ù>]kŸ³$†¹pîxÌãG>¹;X}\}ºKÁûÔlÚ0™Ç·JǬ±|$‰W›ä´¯Ÿ­û:ß÷AÍÇ^HÃá*~C‘ÏJëy<ß»ðð2÷-f>ÒæDG)~Ÿ50òdžµ¥]b3iô¥gvž+D´p"¢o,ÅÕpQ ’Ym.|Ô Ê’«NFMg@ð,XºŽã‰žgçkUŒg.Ëe # <ÔØ}x‘!jÌŠW'Ñt/g&Òp¶ Úu£L%´8Z­žþ~ì­B ^•Ú²äíÁy–m•³nÆ]V¬MA×éÊ•BúHŸ=ã¢rµÞɵ(œèv–‡vœêÆšy/šøEy¹õë¸éw¦È×ûJ̬Ûr±Ì‘e©{˜M£¹3ËY3á˜ôâw"…7ÒÙGÖè^är{ÔJØ:y‡ÇêFT Ÿðµå¡€l*L#,Âo=*Ϧ¢ßz‹qáT_U¤hb[êŽ|”`897Kx°Ò†JÕv1˜¾=HýžÀ1gë=7I{˜#àAï^ûÞˆG„‚v¼´20â-ÄQ‰}fÆõ_1‘Œ|†V·ËGøX…÷ÉÜ«;Î…Ì!‰a:©ënOøc¥,pøi{¿Ú¯éG-­ÐG;Þ†!{Ø ÁaT.tLÃE´(ŒMŠUÈKâ\¿¤‰ÁoÓRæ„Í4ûkßï‘Ò<ÚtCîÑvd~»§ ±·J¹f‡¥/êÒ¹ç”`°óèMcöuW_ÄV¶~‰FÎÉ÷cÆŸÿº÷ÿÁ.\& endstream endobj 184 0 obj << /Length1 1938 /Length2 12108 /Length3 0 /Length 13301 /Filter /FlateDecode >> stream xÚµP\Û- ÁàNcÁÝ%<¸»6Ð@hÜÝ-X‚»w wÁÝÝåqäžœ{ÿ¯z¯ºj÷ÓÇ\s®MC¡¬Æ,jfk’²…81³³° ÄÄ´Ù9llœ,llÈ44ê`'kÐäÈ4š G°-Dà_â  Ó‹Lèôb¨` È:[Ø9ì<ì¼ll66þÿÚ:$€.`3€ @ÖrD¦·µsw[X:½äùÏ+€Î”ÀÎÏÏËô§;@Ôä6B @'KÍKFS 5@ÍÖ rrÿ¯tB–NNv¬¬®®®,@G[ az&€+ØÉ  r9¸€ÌP(m@ScA¦¨[‚ÿR¨Ùš;¹@€5Øq|qq†˜/Ùj2ò%;ä/cù¿ ˜7ÀÎÂþO¸¿½ÿ†üé 45µµ±BÜÁ €9ØP’’gqrsb!f­m_ü.@°5ÐäÅàÏÒ)Qð…áßüMÀvNŽ,Ž`ë?8²þæ¥Í’3q[ÄÉùú$À Ó—¾»³þ}¸V[Wˆç9bfþ 3g;V ØÞ$#ñ·Í‹ù·Ìäàfccãåá€ì 7SKÖ?¨»ÛþT²ÿ!~áàíigk0¡ò›ƒ^þ=. €“ƒ3ÈÛóߊÿFÈìì3°©Àd† ÿŽþ"™ÿ…_ÎßìÐc{?vÛ¿Þ ^&ÌÌbíþÛüÏ#fU‘×Pgü›ò?J11[7€'37'€™ƒ›ÀÎÎÉàåfxÿwœ:ðöJ•à¿«cûQbn àÿ‹ÄK÷þCÄåïÉ û{mèÿAÑöežAºßã¯ÏÆÍfúò`ÿ^‚?]þÿfÿ(ÿ×ñÿߊ¤œ­­ÿÔÓýeðÿÑmÀÖî[¼Ì³³ÓËn(ؾläMµ@-´˜­µÙÿêdœ€/" ±°þ§`G)°ÈLìdjù×ýç^‚[ƒ! e[Gð€™ít/;gjõr©8¾œÕŸ*ÐËJýwJIˆ©­Ù»ÇÁÍ:8Ý‘Ù^Œƒ›àÉþ²¤f ·?gÀʱuzq¼ó˜Û: ÿq¢<ÜVÑ?D!^«øoÄ`•øñ²X¥~#.«ìoôb©øñX•þA|œVµßˆÀªùâÉü^¢˜üF/QLÿAÜ/:S[ë—6ýGòG·XÍþÙ¬ ßÀjþíþ´uvø—ùKYÿ‚/|,ÿ\/]±t·³ý;Ý‹ ü/øRºÕ¿àK}Öÿ‚/ÅÛü†ì/¥þ+Ô˽Àjû;Ù‹íË—ã_ê—bí~«_:f÷²(¶ÿâÊþRí¿¸°¿”æø/øâáô›úK2'KÐï/³Äêäjû/‡.Îÿ‚/\\þÕÉ—îÂÿšEÒO`·¤È„7>üªÕ×[Žõl% M\5þJîÃзeÙvôçnůû¦" †B[·ïP_­ÌÚ«o:Í™ëÆ£S>ÈvB`åî#¨8Ô²+õ¾ì÷¤‹™`‰ •*@ØUñV¹ áÙ´D ¡×ʤ#5ãEa(»fbfŸ¼ÆeŠÇŽ‚ßº†)`”—Œ‚¨$$ŽÙÓK8µ>çt„³ ·Ë²àñÌ–O‘ %©*ôPÖ 9Ж*üÀýš€ºH•*\¯û¡óÊ2»¿–1Iãɵâùtù¡†:v£{lMUK‘EŒN-ëÀ€†„¢ ]Ø"÷Oì4ÿˆöÀšgª•(‘ôã‘°:pàNµ—N£0¨i;öûüD{ÊµÝ ögŠ1JÒÅsþꪀ·¼ºgÞEi‹±Œû `M½ä$"x›Zæ6†åõŽ®|êù/šºÌ åÉSZ r vµ¨GÙ uY>êÎ×y'3JûÕì¸q¥·þ$>ÀÔ7¼\¹Ûpw'Ú{˜Þ61kJá›nqöpVþà³êA±<0‚;„·nÆÝ… Æ.S6kê¯;~ Mµ œdè%Sg˜ ŒMqg’?<Šß+plq;”ËÇœ älTçöÝ­”µ û¬<™fbÍ*#®„cS˜ó +ïUx#Jå]• ÃÍm%aÇ×%!l"r}n!åó½Ò@d”%8„»%´zMˆ*$Ìôާܰ¤ZC¸Âç5Ö’=,?~‚t3ŽQãèT(|"ÇMK¬M xëv$Êá[|ÑÁE°nÉÑÐ’Èhô0ßš².´ÍN,<• HBùb<¥0Œ§‰8îË-¾Ë[KÉ#mº^÷ØÅ›$:~¢‚m|3î¡ì%m®b¸fnlŠ˜TmñTøJI2Ù«è’¶zLý¹)í,‚¦²šòÔ‡yk††©!b’Zfa»~Þ«øù¦ûšsº_ˆûTÿ°¾¼½,Àj6KfÏ`õ¿XP0áü@n]ôŽÊBWaèd§mæäàNЋQÕ¥²Ì_rMj%?½çRÅþâjiÒîûþ–,éP«‡‘gsàq¯Š{CM:ù£'™Éå‰üÝÎC•Uëv©Ù¿h$·UûÙÆòs1ÈüŒ¶¥Áo[Ï>µ¾‘%}FœÍ™D#ûšô õMñæO&Ñq$WfJF®jê¥<á‰ÆÜ¤·Tå wr Z¯Z$Ã+œ`ú™e[¿ü@1!É Í9×5‹9)² Mˆ­ŠŒù.ì¦xX”½d·ã“ŸÞ(-ï7¯”g)|ž1iu1¹ŸY˜NÔµ +x"˨oƒÛùÅ箈ô<;‹ÍõÊt1¦'ëb‘!!á̚ߊ—£Ž'ÄÉÙAJn0qúV¥$LürìN—Ào^™T}ÿœ×¥ŽVç7dú ¡„ã .ÆÿÁ]B_¡æµÿû¹•¨–étó éÃ}nîÐxªõy\½`ÑzÜm<¹ µžÂ]aÞ4Tꬔ«oß1ˆ›6ÚàÌ·F·Cy˜Ì®:zv¶.ß¡B¤O9Ô1"ÿ™–†¸yÔ÷uqäâ5§´wž:4á6mÊBV ¤ƒªÏPøUÌDæ m&sj¬ß’ߢÔM›«‚’zl…„£lÒ  qSÍ]g 'Ò½«úR[ýG¹&a\¹¢ãòDôý†oXà‚ådzŸÔ$³L«çÂ[¡Dç¶»r‰ ”ïÓG+Ч02 %#b˜…ü´²ßèꎛI¤ŽŸ•™²+ËüŠ]½f±ÎT™‚þÐ/Eó!£P¹™ý¨ÙÄ£¿ü›–ß’£\}Pcïs&ÊEVNŸœï‚÷W ¼Ù¬¼eom™·Uiü"¶V $²bu$ï [ÐÏ<¢l»]–8ªRü•ê3¨ž±tÙo’N¨—ƒc}/,Û‰®Ÿ/cž?tl#f ÎÐÄJ½Â× z^“^ës©€1VXÙÙ©öÕõcÜø®ñ§–@}Ìü%¤s­éK¬+»ø±ô*zgr¥mu&oú®Š„8ökÚŠ…ôÔ|É<(+!æcÆ J9VQ@ ª²+±d-Áå(µbsЂPöcásåm¸fmG˜G¢¹=ÉŠšƒôiùÊŠsÆT h Ñð¸ÑW¨L"œXën¼ §lW«yO<ʆz Œ;†DL×mD¬Î|ÀG*\ªöñH•÷´Õ‡R°¤¦ðPT“•ÿåNòÁðë÷/?>‘ÖBÇö’ÑO¨ùŒÉéˆâÞ)³ÁÅÀË*ãùÐ ûð¯½éÎ[ré\3|¦D „k£o ÕæÞ&~k £8TÄœ«*¢‰b‡[›qg_´pÙöãâ©æõ‡·Oñt^«xñØù!{M‰‹´°g¾Íä×ófnc´S–Ô™ûÙVõæåé›cÏsW=FÝÙOÙö ÈŒ«ïPŽ×m LË ’æ2¨6(…ªÒ¤°e5:è|])7ŠÁø…9Ïér˜ÄßsÅ(Š{ðEüdq#Ž·igEY®¬:<…”ûºE6©YM²×iLUküCV!-° ëg)Yü88|䋊ÎFêé{)ìu¨äoŽà@¹Š†o œe¼.oƒŸgØŠj)QP cÍðÕNÊJºxÊ5\/•(%gï}IÇNÎößJÅt õ’gbŒëQ»±á@½^DI¾Ôõô ˆê¾X"g "@=äüA[§‹TÓ9l¤±0Cóiö5YߑӚ*Ù×Èô9ƒ¾ÊŽPLɾb’ŒŽÀHÛ¯¬…ë¶ËVM×sB:àY­Å2Ç}p`<‚¯™·2QÚáÒ´p±µL›bưwƒÃñ?Šøvi2™ùAëS æ—:‘¨«vÐà(ðuJø6ŒÉg8êx†KÔPq¡ÜJx‹ô?ÖSCò0Í2h‡‡å$Qhí>o¢'É®Ä_ãC³Ï˜¡£? <%%ѹ(Ûó…ôöúK½áxýxiæš’·ý¬X9dê¬ÂiË \aL„†Äâ±®¼~ê¬Å¡”·[wHyÎ3á^¥måñ#cÓ2 Zï“äèÚÛ¿«4Æ 'À¬NhuÖG¤¡ýÆr8Œ'vN©mûüneJk„ã›áÁM,4º‡tÅᬘ91RòøènÞj¤öL9/|Ïba|E$Æ#½üØ·/OöÐg¦}[‹sݨ-é õ-í08x ¤…Õl´“am­R„Íó¶- òÿ$%TKÄ9•ü  óôkM‘oIÞÐu„àW`d·gêɲÙVoá»Ä§)$b…ßêe¼òâ‘3|¦R+ÌåŠÀVny€˜#N›ÚÊ$çÝ|µÍ¡²jsžoýºCóûoûŽ á º›¥Å,°OøÙBu¸–ôC€n¯Ts½÷¸ÅÖ‹!œ?ýô–C=zÑ{XðÇ:Í L;fã¡úçí<¶QI‡Ss;D’]|PÒÓz˜Øèæ5îïüxµõ2Q1#¡vͰ´hyšeE ï¥/eYQ¨}ÄI£)jÖ¼3ÑÖý`äªQDëu®2 Û:Ñââl½q†Ê¥T²–"Õ>â}®W¶TCÀÙZpi|LÑÈWCó•,×ð^9‘ên)ýèŒÌ¢*Ô¹|¶VGy,À³ï3’|ƒø¦ì>d¾Vé ”<±"µ´Ï[FàH+0‹õn6¤™®ù¹f`òٿزa´o‹t-Ò:Aƒ"ç#´8è–´æìT¤:U1ÅçƒÜR'èåt•5=¹†„kèu*˜mî«´%?-™×„#ŒÕº üúE5ˆþÆ`G¡I0•¡ž'îòaÍP¡kÂý^Ú¬ñRž¤€‡¢Š†LnÉn%Ž)eb׉G&ï£%Áèå8`¦%ÍS^åÎŽ`R‚ƒ Í''WEõýˆw|›sšÙ3Ž‹‚6"š {>E ¿JŽ+Èâ#!7 =¸h ›?&˜ãjâvÞ²HñÔ¥Åjß5ÐÞKœ(¹ÒÂîtŒ‡#Žïb€Ì©0}ÂhÈs=7zmùµ§¢FÍWfE^½!?àŽÃ=€Ù¡xª‚¥6ÌÀ¤ÜÅA°u•;üâÛZ“GL,qÓ®ÒFZm£ fËØ>g†=£)JáÅÇ äÙ úýTœûpG´„Hî$Xh zykÿC=kÜ¿áOÁÝÀ ¼6XrøœïÞ¬[?µñú]o­×Y)ÅÂ˽áPè¾Ô©¹8mÅŸõjŠÚï7iÊ *™™ ƒûpfŽëbÑ´øí,º lä3ß<–ÖBåûíçfðjЦ‹‡Û…Jûû\ßZúr²ï ®Nž¼QõB§„ì|Þò'?-p&ÿn„ [F-ªè_0áAè »Os1ÿ¬«ùÊ`12/ ‹œZ;“&A!ÒÂoÉŽ{†7G0,ð|W‹„Ñžw=)‹Ëu¼Uå‰4Œª˜Ä¶œWBWfÍ{­…®u¸*¥4Ø„é!î\bѾõ,`õj 4ô®•±SC6m€i4É15¼« È Æ F€å®ï»…#è¢N”?þ³ÂIüç¹7]C^>£K¶¦@Ÿ‘dªå1s.N­§è&ÓÏ%rPH8øùÃÔƒ‘yF‰\È~¬Q™€éY7ì|ë"GéEž]³5+ÙÐWî]€6B%“=1<"A‹ “ šð„¶úšÅdÎýA*þ8牗Rî#:y:Ký¦ÃRµ1ÕCÿYeÀ§ê°owIIKr$ãþÁ;ä±ÅMÚ½ü§ÄÏ&mí&?/,0$7tv`c]WjELuöb²¥ÛΖÎ$—÷i-ƒË¯bÜ+ÈäWßãbƒ÷’¦ïžìð»BáùðÚ OJž:ì+Üx¿¨ÔÃ+ýrø*=¹1&[É=FÁö¡_‹%C'‘(,!Ìô¸ °bëGfÍûZçãmßð!Mè=(Jžù#Ú“!Z"Òð¸K¹îîZ€Š*üÓPd5ÔºôÑ8߃ÚÞ†mO0ý¡<Œ¥q̧]TƋЯ5ë“3t”H(ÆøÕܬ—5ÌmžÐ|F‘׎ߡ &ŒÛZº÷Ó~ÍNf)}#¼Pßök) ЇÂu×ÑJIƒ˜ÐÕ²¹odxõdHqV;Þ á.|“>ðQÉ@-Ú}‡ŒôãÀU‡ ¥äêÚh† –®Ž‘ FRÕmÓ{õzûœ¼¿•G™‘ 19k,k®ñyÚˆýk¯ùƒ /ažÔÅáY¢±¦Ôúj’<—¹Êþñ, >Yk:{û— ·š¡%à®Ü¬<×¼äòO¹U‰&ìýã/î=RpV |¥el¯Ã«¿¾F»Þ¢øù„Ç)œ-Œä\ ÏóÄú]»¬ìëçV­èÄUÞéR¸ÛÄ'%©”rOêl* ù‘]‘žÂhu´ÒH_£ÏPqkê"Ô"H<r’+‡y^“^W¦ò{)$N€µ‹9Ò—¬KTÖ ‡°LDê^)/ÔLÇ´´Äõjê-^¨ðè£#sæö'ÑöÇ÷J X×§~Z›z(TsiÜ1îKÐ+–“•¿…ózáZ¥í]xÀúFˆ”;õ:&N" (Ñ[޹dò|xØËE‹®ižàι¾ç¨+†R%½ QúÊÞæÃùXŒ8e/¶Ç|4ꔿ‰õ€”¯m=¯£§·g²U¡Ÿ¸cs  Q¨«¿sy“_è“Ñä×T¢ää¼Ç–äµûƒ&wÀCãë§¿:\v¯æåi¸Ï¤Çì]º2yUÐD¯>ù«•‰5·²zANQÞûü¼–CÑîþŸñè¹·‚)Lñ«L—_ÅÜU3qmˆv•t4û”î•w¼ÍuP4HÑ"!vpIP@î~Þ:yq==}õæ)î`B,Ù)_þ=¾?vÖkóô0Ëò´4_G\¿hüÔœÿz<1ËjœÕNi& Ç&©‘Äý¾*¢ò°î.ê‘oüÓµêµD»eX7É–íþ] ŒZ*¦7=öÀðÊà%T.sÊ1³Öt%.4+lO¾Ç*ɳQ Ålw’etW$•—]0XÀÏËkó›£.´sÅQS©–ÂâÒ){¨ÖÅOr1s¦Î×XÙÐ>bÉA¸¾×6–ÐgH¥8²³[ï}µ[ H.,1]— Û²¹…Î^¯FÐÅ6šk öõ5_††ÇÖ‰‘†"¿GzÌÎ3!œÌLÕ‰ :a ì·5ŽQO«iÓ 2¨íJä©‚ôÈöæÇ™'Ø=]!šÄ¤ ëÚsgŠ@'=¹ÊOê&û_X†¾[}t©Öü"ß5‚!’(ï #ý•¶ÊºÍx­¯·E»èºg|¸«rF „_ÏíUaï℘®@vF¯‹Ïv=Ï©¨±L¥¡A¦äη™±o· ®»/ÀžK&§¯ÛZþ*Ÿî=ßó¹Õgí6ÛÑÀçDFLbЯÛ;ênpÀ*×`Ëô¹Ö|ÑÌ­Øž\èAÌ:$ä”õNYµi«¼nL{aérõå%vŸºÅWg{Ãù˜ÓËðhÃبñ¬;Sêõ_œ+¢7‹·î«Š¨¹(Þ*,QVÉOâ¶p“Á}Wݨ ­‰Ô[º%Ù§LqP˜'ö„Iž¶l{Kì?[Æ®9A#no~JKF.Éçvœ¾·yeÍÿÊ5£e‘¡–Z㋨K,.uǬ+y4*ö¹Ý&â“oQW•{Ÿü/ÈÁfÁ×&zwáŒq%Rmx[ŸÒ`ÅêS~MÅïC.‡bß[]RPœô/·u ¬žuBÂ?@¥<:…)÷> ߪif‚2°i\-Õd†Ié¼±tÍ×aYül.ª.Â8¡k™#9˜óV®È‡ú¡6ŠïsÙ#hKî*›Ò:;zÌw¡WW©ùîðõ}u;³f‡&ÝS:½ f °¤~˜Qß«‡hª·ôx2䈭üp#R•§ž&ËÄÃBÑ’ñ2kS E¬5Õ•HÖ󯿨RFæÜq.q„S@.ž‹ŽµúŒŸUàp¯o‹Fú]¡ZŸ-~©ô¡™M kèWò 'Xƒ4óщ+û’{}‡µn~gé#&™¨ÇVÎéœ&|±.df>œV0½ëà{=FÅT\<‡‡Ë¼çd˜Òónµ}Îu†ØZ<-&oK¨f³eXF¿,Ž<¶0«/ŸÏšìº^&"¸@ÁKM›åAéüt\͘–Ú! #•]|¶ÜZó fU:BïNÉ>"lãü«„w×#fˆZñïpò6í {£÷R½– @§|¯\¾9[?—,A-,”%äYyÀI"­…¸Ñ_ÔÚPl‘]£r$g(U<"¡¡§åÊc\”ÆÞ ò«e¼£Ü¸`BÛMùúÉIð‰ëv=Néq‚wEÓÿ »8duö-Åkç~Ø–<¾Õ£ÛÚHbSëár†ÂÏãÀHFT®§göäÉþ®Ž_QlJf—mÏ•8öÿ›|á_…ÕÝk˃XÍMµu{ÂfÚžŠ8Xå4ÈAn„Œ4!»û‡cãq¯õYƒ\ÈSäd”ŠŒÆ0¥-ÏÞóöÙ‹„Ï:.V ~šÁj E0 Vor ^6ÔrÓê!‡,¼u&­žœïÞ·}•]@iÞ󉦒m4$OÃú"täE¾$Qƒ@¨ð8o—ãÁ&¶‚b‡îUì lÌ8Ç#‹ÔÊøé +¥ Uˆê~.šƒ÷+SLK꺤s_bþàËù^#ۜҞ&Ÿý£Ô³KW'SÑÉFÕr­ñiÕ7_$·$ÏòUR¸‡òu¾©HhT%ÚÉ ]”³L#×oÕ[(YŸ{Ža1eÕÈ2Ð@OÙÍÙ4X¨ ÌEoöÎzc\”süàpΩûzü‰[*v 6 ‡P†»ƒö„‹Â…9EÌà•%=Œ¹±äöTÝè8DÇŒó­ôiL¶1>ë `kpøöPs¢!%zG+ƒe¥ø5jVw°þÁ¾ƒo¼ØC L\UþP’ Ï{‘@J£ÁÇ^½Ê‘ZéÁ€¦D›äÃÖ·ÚÞ‡Úšûé+Ô°¹äÙ_t$F ˜GPû`…VçQï¾a5w»‹#um$+}ŒPwOãׇÿ<'†cvžÉOWàÍyâ®uÁŒÎcåüƒ+É/C"ê~öG¯àèM~÷)ÎÆº-²Pƒ;Cï.§ìÂÕ ZUÜ ½7MVå™Ê¶V«í{p¾XÙ6 »í¹áŠ2öÉôö}»©'šç(ˆ²d>”—œ^AϾ×nQV:Ÿ'ýØ"g¡£¶0˜œ³pì>a"Tè»(Pµ»ô¬:Ì&å±íÔTvÞ ¹Ñu|oÕˆ4Þ›€Í@[³v˜l){I'~0ŠªÇ¢à-©3ÙñOD>/\ßJ‹~L[1Fx¸õÜQç¿p`”i|“å?Ñ®ÐR±¶8?Á9É.õš—Ë-)ÞÐng'nFš:Tq†å>ŒÆŒ¢²§®ˆo¨ýìFÌØÕ\tÊãZÚˆHfV°¦‹à5Œ$Øh%k‡Hm5Ú»ËÙ0ý#ïŠâG7|öV“IÈWg_½Öûu4ØôH™)óþçEëþrJ–ÛòzK í0\œpyîüB›{%±á@¸ýBñ–=b„³®3†ýÉ#SÀ–/"Ø–¥´MõØò9>ÿžR¢|&O4…gx}l‚H|Ïj¦1+²¼Ø† KÙÔ¬«Û\ÚEø ÊZ‡C&SÏä;$¥ÝÕìÜ‹'SjöüWFQ,Ôˆîk,Ê”äË´—MWÆ gîå³›_«"¯¥Ð +Á¢ÌDôOÑ0 Õ—/‡ØoÎzþP˜‰Ÿˆ.XêçÉ@âlØ’®äðBÈô7˜ž¼ >dïâmnæ­=n ¯8íÕV}W*Û2#ÿlU¢@¨E8Öê°úyg‚ÈWÚAOÔT½Òî’4ËQ2ä–öô#€,;bOÐ>|¤(¡K³‚@9Œj“†E¨ŒP=µý°`4üÆ1Í…†bþi-(9²®£!Tun¿ 3ßToŽÃ%úd“ì•Éò¬¨!§Ý ‹ÇƒŸ_³•8WüMÄ ¿^ª])çÔÓ_™ÒØ©ÃyžCqztmÓ">•.zýK("'z%Ûý5ÃŽã:-XVV/‰äj½ ©(âë~óA éL²ŽÐO:þkÛzÚâh.‡ÇUoÑcÄc¶ÒW”ï” ßV5zÞG'i_VW0«·K<åWøhÇÜ1ݰ¨Èçô”t ]îÓªªž‘ÓϨ\«3íÐ?wŸÅI%¨jß_®îäܶL V^Ó’¬í8)ëkZ ÆÖ'•ë.¯$UUð ’ÿIÌPè¼áÞEMÅE»gT¾¤ °¸‰ è6ê塼×çag¹M/G&;¿çE_Ñ£+{^l–s™×ð(ˆ5ì'Ó……_w1ÇmY ^]8ÑüÄÓÓ«’^¬ªüìÈ 0¢68x¸%Ö¦$:ð®<­‡&vÒê¼¹=«í¹9·º D'?ûÄ,ç=[ãÖ7ϼ€-Ã9h#6F¿öìDÚ´ iŸ?=yVHlÚ¦„É€›é^ðËx•\ÜY®îà ¡kÎÀNî Jö†kÿ÷쀺µçx nØ ÜÍ`¶S3‡ë2˘8W¢"ÔÓž&Ñs˜ºÒëÚQ›Jœ¬˜Ç#ö‚ {'|2Ò€/º-{¤ ÓxU{ăWÓ¨h¡æ(d—©–‹¾¹Ö>Ì–N¤å&ïZ ®Íø8+宺'[aXÒ„ônFßûmò äˆÉ˜;êZ<Š!饻$³ ÇïDÍ9X°H[z±8è§(Æ·—• íŒ\®4¾q*kÁ*1­2É­uÜÒ5 É­mæK¹š#¯™"vèÈ ü›´BŒW®cÏÃù"Xµ)«Â%kåöÌT §¹4& ^KÒkžÏÛ¶‘£² jçéw“cWO³ŸE/¸ëþܾ%;—Q®‘É%´ÊÆ3^Ò<š ×ö ×lÿ¤Æ¾¢°éUW«§O:i”t¢ÏQ3ãq>É’çù¾ýËRó³m#>’e/ÉYi&î¼"Þù8}Ù ÍíáÐn°Àä$LiHc·,Ïçñ¥g{¸qfÌ(wåÕ,ý<n?·¿«äæíƒëîë0ðõtxia¿§áñØœãj¥úˆ*fzY»?£Ž“¶"óâI¾Nñ¿Èî. /~ÌL ‹ùÒmmäÖДö1–jr—¬£JUmüÞXñƒt¹µÁc4膨Ú^<“‘Ê·J,g Ò>•Kß²ìP¿Õ/ÃÄÚ‰‡S-ùÙ«ÌõQl%rÇ5Þ%_1gÛBÁ§øÐûÊ©‚^mò0€Õó+ N »cç”û§Ë䓾²Âfö@ fCN±ÜpÇ@>þû¾ØïGù®{«°²q'BÊ!q2ÜéïÌSZŠOÎ{ér*JzÆ ŠÝ 6×¥2Ë»›A.‡Þ±'ÐѲ96ÊT1æ$r¤ÚP7ƒâ¬dzȳü…×Jçmhdå+gì¤wkâ'3RͶäˆù™c"|z++@úO#:¤MHÌÁ¯.tì3Ä®¶7Ñt¶O‘¸Œ^Eè&Zf^®tÝû¯®0·Ð¼Áúgʽۑk_h'Ãw’ûœï‡<;]rcçÑ…_â6A~_‡þ0‹ónµú-@üþuchiÒN¯¼®¡ ìU,œÿÁ2£Ó »*JÙÜ;)±ûÉÒAã {*j¹‹éÁYÚ¼·ôVéÐÈ6¶§Ü¸˜‚aµv#n¢þ“·£Kx¦ösÜ7’,V–ùUÛQwtý–c£Ýªn¨rÙYé¯ D ÂÜ;;·Æoa‡h´¨+ýMD;´…e+s´ßûdÂÐ8ðM§g…ÄÞ! ^v;9B„rWu™>Ö¬eVísø¼º ç|æz×–aq¢Ypß•¥ìQN”9?UÏp¦¶,\^ÆJP¡QÕ©éY½ÕóÕÊ6œ îoÀÜü8³áøY¯¸÷ñ³Ó\ëI—ß\Mòx$?^ a.ëC4¾všc}Ñ0(íŒM™Ùsåìç´½ŠQ—Yû·Ã{ÀëX°eú¡æÿ©^  endstream endobj 186 0 obj << /Length1 1491 /Length2 7186 /Length3 0 /Length 8177 /Filter /FlateDecode >> stream xÚt4œÓ6]¢“,!Ñ­Þ{ï½YË.VÙUÖê¢ ¢G‰(Ñ¢“ ˆ½÷^%º ˆ^ónòoÏÿù¾sÞ÷ì9÷Þ3sÍüæšß\7 £Ž>—,aUBÀ‘\¼Ü@1€¼¦¼¾†9‚­Ð€ß½ƒJ²º0šâŸݬ]aÎH7n7˜ã/’<¿Ê ç¬‡È#œœ p¤Á¯þ`®Pkôà½xþº_8Âîó·iƒCl~¸;óÂa.îPU…?AhÁ?>[( ò .¨§µϯ# ¼œ¡¿ƒ¼¿Üh~>Îg€ šÔfEÿø¸QPÒÕêçóŸ[¼¼Ì °‚ÚÂàÿTG»¡6Øèp…yÌ€è äýþ~³@/wôúþû–ÑÃQ•Óçø‹óßQ99„'À‡WÀÅ'ð……Âè¿×ù{±ÿíÕÃþìî? ªÂm€_'übß_LP.ëŸÒaüû-z§¡Ö$`Z£¼ÿg!üNùÿíÿ¯*ÿ»þ»%%wGÇßÖ?ÿìsôú‚^jw$Z š´Làÿ 5†þ!kM(æîôßQU$-Y¸­ãß³„¹)Á<¡ÒÚîMúë*Ðåap¨ öëÃàâÿ+†–žµúã↾°?B`7´‘¿ïö— E+íß-(­_’ä€]]Á^è}@[‚èõ@kõü½ðn8‰N éúl®¿nYTÀþåúÃðXÿmýêò&:êô‰^ø˜‚·ßæ¿´vwuE3ø½Vèîÿ²@ PO¨5ÁìÂZ<ľ2¤ñì,­×Úö^ê™ ×PÞS§˜¦ˆë0²“åèÅ \;1tè¢HZð¥!¶ú,ľ+Ûg=Q* «…6j}jyW˜®Aõ@ÔhgYùѪÇ`MðèÞã¬e§Øà•æ)ZiLêŸÎ <*H–ºûz¾vеFª¡‚Öö™Ã¤Šâ=p+Œ¾äܽÊ*@m§‘ùX)“ËlC:‹9É×|¡¬v£E£žK1ói¶PÅW»yGÐÅÔ¾êÛñà1nŒ0oÊ’ÛVºu ì,ÉdŠ·Ôöû6ìB•žllx¥qÖ‘gÍ–FAÛ+}úZ«äqBe!öSCDò²w]¼;{}°(îC†µ+e–‘÷ÁÆ龋W>ú½Á³‡ÓÑOÀx¥#E•'/2Û¾¶\…XSTì< &ßS+xáUÝÛ~øC‚é $ÄG{’çä 7Ò)%^‘MMµ#UÅ^;‘Æ–z³cTï3 R]“¾â>’áè¶æ§UK}0Ýõ½m‹qieqqá‡Jê I’GÄ쪽åÓw9Ñ0癸¤!*ˆÊ®(–ÿËRÀZ…ûMõ½ñzVŠS‘´Lïû_œ½4_ng¼¥y“#/Â-ës¼qwòð¼j…æA¥±ÉG½›™ìâzDHpváÀàø–±¥€ÕÒÅêâ½Ñ+ÐÍD3…NÃ&å‡ßMò#úÓrTÊÆO:<¨€á#zz»l½Ç¾SÐópfEšw%ìúß,_Ǽè¼zpß39Pš,ÛÙCóþ´hõçŠÉçß‚`aŠÃrÝ)îÄŒ bë±ØI©óßC@)‚ø†ŸÂ¶µNi(–%Õ2ˆtÊ ¹øl‹‚7îϻͭ_yÇ„~Ã}¼w:šã¯)P1RÕéÚ0Ð0(P“Ä,÷z bVÝ\¯io?h¥yèz‰¼(ÎLbÈÞyŸ%÷Ò2>J|¨ÔpʸN8ŸOãŸí‹/¿¥lqRr®­ìÒÇíV›£îÆ>>þYÖóZ¾cèKˆ‘c”:"“ƒ“PÇŽ súš'ÿH”þy/º :k€”£‡õÑ5 C?òÇþm‚PÀ¸†=cdXöéH~XCj®É|â2 +8P 6nšˆ½ì…¹§B£â3Âz&.­¹@“ëÈuo†Ï¶l4äõO 8¤.Šùì¤ìScÏ··T}ûÊB®~VFCu. —s:]™,ʧ¢É°ó4gûN,ÃiAíIxXcù&_ww…_Ñã´è•4ûñ¨d;/†÷h&+Y£^¨É~m#û~<+Mg¨Ü5Yð2zcJq£œ2AjKçœsœ’á&]Õ‹‹™K2u<•F=*L°qØ%^sµ,¨}V58<ÒÛ mé;ž8Á(¶Tì‹°»)ÆI­†Ë{Þò·‘@U¯á†íÇ®Lg« !ˆ†{@Nú¦ða7¡êÝ>qQ‡û'˜[KÃŒ'y‰üYAãýs ]B®~¼ÍÞÚ³´ir=-â’€çð"v!Ôg ÉìêöðÀxÛ“8Š1K9?<¾?ŸàJ]¶X›£Ì2ŽKôªgŒVËj¯‡]ÊÎ9|O-ÉP‰”¡ÌÄen,¿›çFoWCN2§È>#ìûjÕðtÜFuâùýl fX|cÓº"gAi¨Ì cÑ·³UÊQ¯$p§®]~@7˜ÅLP«ßDk—;*UNþh‡ ‡åŽ ßÈÑ…–Ŧ³òTýá»Z'?ú½‡m§#]G3>Ï‘ÙÌñDîþôžÉ•|evË÷hY¼y“q¨L±Á¥°œÎ?{ÇÈûr¡qåÁæÜóp <²™&ú…³gë)y¬¯5žO²Šå90©Pëäz £LˆîW1ªN ÑMS—xðüs¤²µ§€ã8ÒC Åî¶Ý½?Q”ß ÿÙ/ntÏ·;ïR\o/7™<ÕQ7k–´¹“—ÿØÔ½`Áxô„ÓRH—€4WGìqñ;ûÛ˜š-ä×Ò¶äÞKãöÉDYc çù·Ðh’,eµïòhév/³AîKÑû" á&`Uw/dJ—¯îíÀÚÅèKi RF•GÚeÎŽ?Xe´&´l‘üYf£/ô‹ªwÉ¥ªÞF»²ô-\ßl‘3öF1ÛlÞºª*âs‰ u¿ìñèê8«h¤«rǦmÕ‹Äeÿ%²¤<Žd':Þ­â„'WYâeS†â>tçø¾2Ët™Kå æ6dÊv|ü­Ÿ6sÒßbã>kàÄYX†…31^êË‘êË/Îd–ýjL~ÇI§اRЬ«Ä°^Y}]Êdž÷8oL~‹;2¬G=Ip,_]“ìJmhWb(qtïk›õ‡·°Ìî U ÌɧHv‘Òàæ~ÍÏA4¿&ÅÚ(;ƒFy‰µPjGS¹|²’YŸ.)è…b¼áþ‰úhA1Æ4¶roùvhò6ÙmŒŸôŒ#±¯GLdqR¬»‹SÂŽÓ3æ#©D]DƒÂIŽO.^È qÞUÛ´vÔ%Ê.7 )N²®w“Ï/)SlÄÃbƒÉªèá~rŽ`e=级üÊså¥Üå.ö0Xn‡‡é3[¬2ѲÙâ nòŸ„RuôƒD¹®ã¾E]Ï Oeæ}}ù,””|,s}º>´Ÿ†d†,¨?\‰:|¯©•*±yCË oÖVè×Ç6OjòÜïªA¼]|2ÇË'¯Íq_¼ic£¥$~KvnÆ&éH†Ê*ÄÏ Ç bêqÁõðU¸V¸Ô§îÑæ»cPßè@7¿ã×"}6 ©Qòlúâ’Ò cœD<}›ÏÅI#g«Ý_šMñäž(E•äcϘ¨eõ,¸ös´]`9à¯øôí[a²,•¾É_?›aô€ŸÎ? czzÃ!üÞé§2Ÿ."qž@Œ1²BßæXͦÂÕ´ò*Ìúœ)4ÏÒ¼m¯6¬J•3’?dZæpÚ06¯­Ý×`m¯ùYNŸÃ¦~«é¶½U yp¦²Fs/øi‡3ñ8õ}«ê­Þ~IJ¢xµmDó£º'% E€³o±ï ½hýé`ƒÚ …ʸ DK¤*._ÈPI¼K¹1êLt®,ÚóÜÆc(lã·>¶kÞÊS̺F¬M}m[Y”5±Px³ÊguëYÉxÑÅÖ¹lãÊsc©†Y«ú Oƒõ›7-ô¤©£ϼ3&‡Ç§£;± n1PÑO‡aÏÀ.,2I†˜È1ž¾8ad›M½;󮔯LÑ ‘®\½K9èzž=,´(Å º5X͇­ e¾Eù[€y"þçä@GÛç·“ÄVýë6݉e•J©ÕA  ŒqdÎ’4,˜øH'„.]ƒw'2ᘄD[*ÊÌÁÖÞ j4Îò&Ml0ºâò& öZw3¤jñë=ɉÓ÷”HÂÔ}ØØãæÓtºôù~Ò»Ιh)¬6ȸ:ØM›È##²¹HðÆJTí¾ÞÎ8ޏ»á·îÒTi§Ê$½[4ݯ,¿íŒ±ABE¹ÈíÀÀ]¯ÏDc³¢¥ä9\I¹{æœãá2*?¸çÂbµqÚZU‰µkÝŽ’å<Ê‹#—Óõìa¼U°‡ÌJ¯É‘jf*~2NDÚÈ~ùbìõC<÷÷¸x;ë[T)tµÎ©CîáZrÜå-"7žKjõ*ä ‰Ú¾Fà&M—Ù†:;­¤8å´t„7òpš˜• [2臎^ÆR‡ë1Çð6dm÷ú§*ed±Gh¥³üq«8_Æ…iMIëË„yê®mq"ÎJòÅ|õùixì™Lœ+O`xÂbÑΊUõóÊ/Ò]×Ï GqLÆàÛM±œ2½™+š zMɤîº}Â΂ÚM×½«sjaR=ýYe•ûUNö×Õ§ªgÁ*ïmõ‡ñ‚&ý:¿/„Îôx–Ý5MŒZ¹MÉQ¶m†RìðšU`cql"¢Ø9]Ïcˆ|*¯:ϱ^Šñ³îÀÒÄã3öiaÁðN„…qØ6¯î°N:«ü›32L&Ü ÝÁBxçaÇøtuñ¨†Ó;ËÜGàõ™·öø½¯ÃÍ7 Ö^_ûå]ÕTocmÀv=ƒÝ.0?âˆ[”UFi­Ç Î&džqôù$JiúbàZÓ+qÈ•ùn´¦`%Òé×°<›ƒ0^ Z¶wØ™²Ý¦QKvµ`‚\œ Ÿ†3ìQÉÕÑçA ?™|q:4vqƒ ßÜz“¼±$LVò„«k=¢¦]Ï !vËh×)6VœåTÚ%Ššöx|` ›òr­úë’ô©õFíª‹*E̺œV¿b€c†ü ‰d!Lx-Ø{FÚKh KÚÚÙQ¨ÄéPºf ë2Ò1Û-ûc»b¡JwK0BYÈÚBŽ|æ4î•÷Ûv¹šL+Ñw ‚I®§Ì+³¥x.ë5Šu._ãUžË]³ÔŒé— ÞØeøÆm=e[‚¨åðˆÝúL'sª?ך0Ræoỵ2=É×o¤"°m;9oÝ&Åê>«Ç Í"K /^Kûpy\ÆLXCƒò#O¿d‹â9qjv Ís-Üh"•ˆzÓ:гÎä QÚî6°lvN7I¯šKLQóY&¬Â ºqU'žð±¬Iø.›²ŸlÀ]9 ÕKØâW¡IÌl'Q½{„$·q³f¡È­Q\ÞÍ!(ù ž»ZXÝ“|/°ŸÐ53 æè wýdá㎓ÿH”Ülú¨¨¹_‚ð(HÈlvRDP¥IŒŠûò„O’Øü`¹dÒ&x>@Ø|{!dÐGS±í\Ÿâ!¢ßy€”ÕÝÉ;,â#0Õu º(¨R+ÿ07\,S-‚)Çü:Ôò½¬o„žEò£[ü…Í3cLõËJÏÍ Äu=ÓµÅf7_¢õí úñÙ¼îÛ,C–~š2ˆ5Md8œRr màk{ä¦m˜¼Ûö±ÝEe'¿½Ž–ëØ+ÉeÍÆ!]qZJS¬0íœôQ%Ž6&2û‘žGBç@ƒÖæQÉx?P «$lE*Š-?ž¨[YÌ ßBß'Téì=Á”'Î{úoB2a^ßnueÓ@|>¼½Sδ][Ê~ElÔÎÙõi=m,I3èxDoºYËÛa(Ë©—v~Mõí±‰uà T:þà‹„q;VAçÏ*0yćï[_9½;HE‚Ój°5ϵGõ¥ƒ×¨ ~TYÙv6ÎØ¶GG4o¶_…J¿ìÃÔ« à}ùøíQBά.u^Æmµq‡bÓò)ÏœK\AŸ ðÃTÊ19¾m³4)!agÃØV¾‡ââæß$—ëHâñF°>×ñX½ h|T/AáW€Eøƒ{žô±B².ÕS êôéÚ§]6 éLb¥*å¢ãòÜ{~̯í/²ä˜–)ê=7'›Éhk"¬zižè½Çž76ÿxùê^_Y¨–ÒevIsZ²N϶{ø§ÐÛxb¢ î^ „e˜Í…óë€5),ÏÄÙ œœ$fû“q#Æ”ºœr†¡ÖÐûœ– ’ÕŸ]F‰s¯3î÷tK4³’œwñÒIÒ:.¾É4Žlß°2U[Š™ØÝ¹µq6äˆò“ÿZÝïSßxv§q(S|ùd3²˜ÍWâÅpr+O»êÍ;¡š]Ù” ‡m'û±áiy]=1FÓ}üœ<¹ï ¯Ý“Ñ–¥õ¢SËÖI ˆõ±ËIÂCOËK&Ìñ~ì´ùÔGꜺ„£ä!§ŠŒî¤Þa9d8@aÓ7™TêzE'jß8y?4„t˜ì’ƒé,yÌÄïp>Q±{’4’©c¦íiã#gs¶U{/=QEù¥Êbêx„Ÿ;Ù>Æõ¸;cÏÖVž6h戚*ºY¿øÁëXìí&qjÊUdóí:†O1~:º'÷–ÉkDìÍÁ9†‰t ¢¥,¬QùvÏ1ΡTÎA,ÿ`ÁÓ2&ïÄs¶Ó —Â:%8­Úµ&›Žâø’X¡ðTÕ1HÊIPúeárixî<žLû˶§_FuOªìµò”ßôš¿ôµ¥2/°xø£V·Ë–6QÍ¢ûÈbçÞØ‰rÆÐÛÚ+Ü’YÇñ+Q,£å{‹co0…§ÓU»ûáW™ÅHÈñ¬œ [?á´5Gì| /ò ñ'£{›ÜU3yxèïxë™2B¢¡3‡jé´s"õÔ¯sÔÃã#¨ –ÄnrÖ•óÒší Èœ½»õ•ò«›+à ‹!vÔß<®ªwXÜ8%nà a“„ÿÚ5£5_O — ±Nnq¹£Ï÷¶:ÞüòSWZa,ÐP†YNÆ…¿oÜÿ*«€æKòÔû¤Å‚<ëìzÒV^îl¤gSvéÀÛºXÖ ‡ÜÈGñ“®ßTœ¹˜>ÄÅP´ÞDzâsš¡QJM\Bú 8óe¢`€ VJ›Ssf±G¾Ý¦x—xÞˆê` ÐT6æwŸ2†¬è;Ž SŠ|¥×©Úú•5<‹(÷K &š>tvááð,|œ¥îXæŽ7tÙ–,¶hŸo˜K;x“ÕÞýÝÆÙ·m3ú4Œ1 ¡ÞÛ±¦Êµˆ„È/@Ë^ô)Í}ÃN®cÁªæméõtßÈ_ »ì>\ÿˆb!]0cìÊÆ'VÑ™-öcUá·4³>/:ÎÄñ¢ìJRÌrÐ ñÜÖ½&´ Ã_cHÜ%Šô…êtˆìö¡¼»Í&²’:Ö3iÕ“•‚B[KØ?]Ùd^[TgÙâ*Š¿K˜1ýü½Á(`þ+Êî>hÇCÊ2«‹¡˜±]·_‹rê žEŸjÓÉƺÿ“zµåE6 á’çÏ•‘æ  ·|2³K²)œãÄógšç4(ª4mWoIðù…"”£¼îLqäÂÖeBܾ ø Øã\¼·—š,Ï…³‘žw?'"YtÔYú¿¼y>ÙÆ‘ë¹õY[QçE­¡q7U¶¾^“ÎáØ9S˜’O7e­+:`$jÜiw#_6¹Ç³ÐGêA‘—Qbmb `fPÀÂ}8Î轼̟þ1¬³,t·]±µÒ?]E•Ê{©(~[Œˆ—Í´Fc#˜ÔC*™vP©Ý.z˜5E8¸__›wι®/ÝÞB6Nm_é¢÷†ï‚¥Aûc@ w`–ÃܰÀ›ZQ-2,‡-ü^Îkb›ÛÎl¸ôyßúîEZêÆšûa)ò¦Å«{bæ=ý¡Ú}½¼Ä¡µ~(ÎÓµ'·º}:.ÙDm~óêÖgw¢v,ýEÛÜaC³ß^åìçqýxüÔíJºç0/ˆb;{dA€êY{wÌ;^˯Ÿnq>\mÀ>Kœ.%Å£¶ºpÄ/jæÕ§³”"¹Jàãxúm5¯p`Ú1Àm÷<«u‚\ð{ä Yà¡L»ðâ'ð0¸|žÑŽlû‚?þì endstream endobj 188 0 obj << /Length1 1420 /Length2 5888 /Length3 0 /Length 6851 /Filter /FlateDecode >> stream xÚwT“ÛÒ6Ò "U¤JDàPšHï½WB ”$$¡…"HoJïMºÒ{¥ ˆR•R¤¨(½|±œ{ï¹ÿ¿Ö÷­¬•ì=óÌÌ~ö<ó®7¼×ŒL…•a(;¸ ‰‹€d€ªúúÚ`ļ¼fœ üo;€×ŽÁ"PH™ÿ@¨bàÁ¦Á€ú($PÇÝ‚¥dÀ7e@  tëo #Tƒx `@}  ÇxUQho ÂÁG¨ó÷È‚oݺyãW8PÙŽA@!H >çw%T„B\€¦((ŽóþG ~9G-#*êéé)qÅŠ 0 7€žœ#ÐŽ…c<à0àOÊ@ˆ+ü5/ÐÌýí0EÙãÂìA ,¡g¿],aq¿Úûs'ŒÚ?Ï¡Ž„¢`?gRLR Á` Þ‚$;I ˜0¼0¸×/ÍEE(!Hàì´Ga?-) Eºƒ‚ý´þ‘êŽÁŠÿ¡ðßû_Ç{Á¡€É T6Ø©&¸õ°J™ÝSxeHŽl+õð¶˜ðPÁ}J\·úˆÍb¼iVæ”î3É.°Æ}§v·Ãì¹÷;>˵\uÞûÂ\k\v±çûÆ|8¸'h›ˆžX&«\•)ÆtqFÑuP)ºMyi}ÿªéüàÉÇT¢qS'¤Õ ­£ª$S™ã–Åç&¸f»>³É]–¿r>º>Zо‘bέ+×vˆ÷¬¤[èíïâ|¨ãñpåO(Ž^]¶CM‚¢Òb&ïÒœbÍt;MF¥MXwé¼@òaÁ¶ãòö¦õ5þÄŽ›Ž¶‰öÑàÏø#Nzô “J*&756ÆEÒØ«p€µèLCh½š+ÿÈ鬢ë=5Ö9¼ðÃ]7EÛêmO0ÿ ýxù³²åÏ~õ¼/b<ìC‰[þªJ¦_VbÎØð³ÊëáqÉšÙç³³’Nul5S(š¹Üp›^\œÆ‘Za~I´þS/Eá}¼ÄYÞN[› ß”[e2†!¿P;ã›^ðäx ,úºšV­Š÷t]Ü÷­ôZ´ÖëuEú•ã[]%¿,¼§’re?Ýh Žai‰à.Ÿ^ê ß»ZF #*1È-=Þ d~Óƒj%x”FoâO7‰Ótžì™ÑeY‹‘v©Þ¼njb…ÉçßZR t$\•Aƒ§&â Í‚L}>mByÌ-Ë ·èCî+oõ— •hý„§ùÑöåbk‰| ¥È­§Ÿ27wÅØÙv2å/qYµÙpÛ£l.Sá°(˜?îy8@ѰmÉÍõ…•x¹!+ãÕd{uWk'œXÀ»ÛnöŒ6x^>ª¥°§æ·÷r:+®ûNÒ¥Ö/uÕ`§»A%—ÈÛÁvmÍ™:Ï ¾¶mŽ1Åv^zÞ Ú‚Zñœ¿ÕÜ&ºé}è`Lud5m Éã#{àÇ€>Ù°Ÿ¸„œLغÙ]$ðë;kH“…vN›¸Re­ 1Þ79.É!ÒxkPàQoZ†J¨é£y¬øÛÇsoܶ‹Oÿ†h¦„P„Hب/m0’1Ìœô ƒ·„†§èG/Ð~¶¬¯ëG£2ÕN2K#HÚ¼úíßkÕ[qY›©ï¿tJ7é‹ô:¡^^fÞ¦§ÒͺH/ãoÏÄ£kvs2²´®YÌ®5ÈÂ$òòÍ i'%en,{0]‡ê>œ™¿½Lq;º’Oã ¼R`<:ïÙ­q뱓ZÇh7éÒñ…(ÂßÄɇoØ77È}sÒýñh”ǹÉeŽ×fוǚ.íÖ’pWPîÊgˆÞÀ¶™£T³·F`ŸwŒlLÈ܈GãÙS>vf/[íÉC?~É-÷‰ÐÙä ïèôßκµÔ_´p|ðµ~^A1qj¹Î,÷C꫉gúè¢ ìj¼y ºMѲÆÉñ’…ÙûäKÓ%¿àÜ0ÜêÔí¼ î›Ûn¸àûc¿†ÕáDªPiRS“ÑÛIÞWä2±ubNI†÷[ƒZèx;.>6Ïj YðQ‹Í-«|ªêŠš_ ñ–ù=AO_}òqd–Pˆdˆ¤¸ï©VôM n¼ »ÔE²AÀî ß_Pj¯W¤D_DˆËrÔªt7+sÂON®öîî]$æ.×…®¯Ú» ?^ÿ0C Ër06½8ö.˜¼Žf$çI3â€ÔdI‹Ý—aÉjdï“»£9ì><‡Zh³V‘HñÛ`ô¹#p!°€€ Ùg›¡bÖPdq_bç\~‹ó &í¹‡÷t¥ã}Á—Zº“Õ¾÷v?܉ðd¬gÓßÌ¿!Xßé!é'ò¬ðVÑ•ªn)Hký%øõt¿X©§b~ºA ¯6UÌCÏ£)¦E‹¥:ü"@ÛÎ*ñá=g._<ãçnoÈ}ÔºSÕCêåÁð‚Ñ/`YC˜'ƒ;ÃŽé=ÞYÍØÄ'[Û{iÝ© ©+Ë™zÙ€u_¢|”\â(mw¾væÜIY0ÃÖa$ÌøYu Ñ'ÙÀ*cs®`U´ÝÚ%ÙÃNU¢[ðu> +þ(@ޣأ"Å!– Qä—Ô֛݊ ú{CJ˹wÄK%9%îG Ùƒ¸gÑø ¾Jɽ‹¯GJŽêÇ?PV Ïëݱ¸ûÌî³Äíl«Aû ³‚ú˜sM@͵ÛÝz±m ‡OzãÌSªö3–€úa.ÇfZ}È‘3ïŒ.¸yOÏùlˆ2éLf$*DœkÈך Xi¶¼ÊŽoœ5¨àKbKÔ7+Õ‡ŠˆÞ"–íÖ¾°ñVŸÈSÔ`þAT—˜Äå½½”—ÛB.'•7 ÆÓ¯ú¡––h­ ïñ´]’sBå;ÕÞ(¯w N_S¼òkL_¤’Üó®@^QlɶX{¨ÓÀzõˆ\ˆ«Ý’kÅŒŸ´O­`Hyo¯-8keÏ*O¬ÏÀ,>*ÀÛúýi]‚Û³ŠC~²ö{Âw¯E³^ÍÞÔéh p`Œ÷cë9%÷ó˜±Øéù‰* I:3|f97öÌ3<»É,ù#ü:»LÒûyæ6ÌzFŠqõ½ýW T+VMõ÷Ç[ã4S I—è{Þ„¯\\ù..øÞéºeg–Ú†ôZÏö¨ïvöµFÈùþÁȦ3¶õ)½Y›˜q²Ž6OCKrç>þ,Ì®&nkŒù:V,ñþöt$·n$—JÕ~¼b>Îõ÷R?ß|ÊazƒLüX1ˆ’zgBy¬{ÞÛ…ÿá’Þ…æ·¸ç¹\$[æ± _?¯Qu°–º*2ŸÄš1ÝŠVo&.´4tžJžxM[¥µŽ^e¹Ñ"¿ÊMy_púŠNtdôj°º“™O8b<dVd¡w:"ém©ë‹ÙYJùæ;Õ€£(pR­‡XÈWà'ŧ:Ì&tü[W­jÚêÏÆÅmO=rÏÐHLùE} Ëgû"ŸïãÖÒR׫ÊkÄðYãßã‚ ‰Âr¦R8p½K׬ís»ôÕH¢œ"íMæaN¬»i;c6p:õK¦8šBs¨äç7ª‹JQQÝ’t½^zjoÚ•S#œvq¾3¡êE}É´ïñZSãO~8ˆÌ­™šÈœFÌÄ<{;ü4KÓ9ÙôñX3GYEruGÝê©0IÙiãç½KkA%øÉ+1d´ #<…*ϨõˆE#c?É4©0ï'æÞóh²g Ý¥@ÖXÛ@@ün’ozK5³DÎ|1ÿú7•šSazçÖçÍÙ=ÉÎ…‹»'Ïu¯V¸FÍ*ÍÙ(ÿµú¾ãnËhå 8•똚IyLG Úà[Å·jòÛ3 Ê§Ò®ÊøÉ½O™¤°6Yîå4òáø’6ô|ë~Êå&VUÍ¢K ïrªuÍûÊu)¾JÑu(ÏŒõÚÚ.·9ɈR_!º[û8àü̼ˆWðXŠýÞ‡•ÕÅ„©8¹þ£h4‰Sy@GϺg'.DQ2‡¨(Ðy6–Ýøc øÂ¼°{àvíNK–Sˆ_àÞ+œ–êÅVÿÑÕ4Q€Úâ ðy?•Þµt1¤LîI%{ÛÆÛSßW">)Ъ0—CУüpþb橪”©B_ßp4qLÞm:Cóù¾ÓAŠiëxÔŸÅkhŸ Ì_™+'+ÃÍ›¬ 2\x@¼^Î×NUÓdn­²~îçì¯7¬ôéKÙ+šMù®û¥Ž6œ+3šTÒv£q‡JØûW½4ÏEâB)i7Y BÓïF}uª\Ò`2›i}Gsƒ²Äf2]uŒµO¬Ë/øpÏ5ê FU ­>  \' x©¾f·uCµÂm§“/ôô6ã¦v~FÏX*)æÅ½é†W_Ÿ<1£l=â[0°+hÅÏoÇ**3íÇU‡.“W?h¶$ÛG‡Ží8“ç õ)çrÑñOZë/³¾§§¥¢cÚŸ‰½X>»”ùqJ)äZrƒÿ²ÕèuiÙ‹žl×ï`I9sîoTÉ;¨~Ë‹« œU½©éð¨9õè5» 푊ü-ž=Šï½›,<‚Rq{Ç}ŽÚ½kAT\ð2ÙµK#–Ý"%0ÿÍ3zêâQÁœx¹¡0Æ QiñÌíbÜ`Seib9Ýú“CÁOoëù‰{™3X17ׯgŠÙ" uŽ÷e}ööÌš%Ò…vä¼z\l·5F·@Þæ¼¹Ð[ðz©í¨.ßT^hošÅwøÑ´|Õ~xò%Cl–µâ:MaiÚÙF·UU `<ê~êÝlnè¼@Kx#©ï`/}ØìÛzÛh,×âE7ÿ:~nxÃÕÇãÅ£Nœ`Îà÷t(‘ZZõ [<µ,ÎylN8#kC‚“·¸¸L£äh+õâáì—¶ $ʆ9ü¡Ø×öÕ¼ü3'è!µi-n1>²Tat$µî–U„ÝÒ®ø5ywõãõÄJþM59ÙZ§ª®þÆãùIí•#1,g^Ãü‰rC¨fÂÓÞHhØØ–÷‘ÐÙ¥›ãªî«ªä.F­U1ÉÏbb‡m“·™2]ÜÊùŬgÛÓ àìYºk‰ ZÎÏŠÅ#hpòÁwêû1©Û—˜.ÓÛù›žsÉëΞ+ª­ê²gdðÕ íDäcîñˆQñX½õš@‹·m~¼cþ¤Ì-ˆ¬^Ø6|z L]ž`.ÝÓÛŠDc/rѨî»8Û)!…veM⢑ÙñbÞoC+™ƒ'ü®>_Ó]ÿ kat½Tšm1:; ­.ÓæÙŸ•=̬e NÈé,ë”×Þ[(Öéµýö:ñ¶€‰×Ö\üz,I—•ä°È”cÉuÊ5-ÖœIP1´Þÿe3³NáťЦ­ÀB7Ræž>GoÝÙº3 Y¹;ç9ïB~øwún—6ÎSÑ3bÚO‹¸*·”»ì6Z{óëN–]Êx]ð» tˆ?öS‚š‘ª„î½†ÙíUEõëßM#IÜ‹Î×gsvã•Ls}u¨Îwµî‘²“3ùÝHñ0WT“HÞ².È8-øšôü[|ÙǹuÍw½ô/ȈÓÍxÖ´õ÷½£ˆÒ¥™%Dõ9}«Û¯çÈÛJ±õ“Åáh‡¤û¯"òÖÈå쎒2sš/–rXÂ…®ÊÊÓdjN?x€—¦»iŠAó…ÖðD8ï-¿QZ¢¬/J‚è„¿J¾Ât½¿î{’ºkWùñjõEœ^˜ôp5(¥?Ü÷íèF›áUy·w+tI8ªdÃâ|y¯šÂ–n²¨)šE6«Ýòç t§B)•#†·VB•ýYžÜ£^ô¾O{CÞË&úe©9ÙóÇóO¤ )ÜT¦–¤Cƒ?­¨‘=!Šã°z´ë­–8ÙNájYds=Þ. ržìë)@¯m»@[Þ‰€@|!=ØÂ":Yfhnñ>e%¾Uo¥_˜?Ž>%'!îHF‰î?Æ ³Q{Q'íì 2 ÞlØÒzksh,·ËöÀ4™]¨v—LÝÆ'k=ª‚9[¢o®¸y›ŒÈõ^]ô¢–ßÎô'ý¡ù–ɯêNóW<4ml·ò­°‚ø»«ÅÄ<™^zò’¥CÔÓ g˜!yÑjÚv>°†™Ÿºõ÷Vñ'óŦ¼|úMÞ1ùwT ©ìŽ–šŠb„¨”=/ëæ^9Êã2©òÕ¥–9],1aräg‡úý6lÖfáiþ¥zTrž({œBÞe,&>xIê+\Õ£# Þ­3#¥ÏùŠ÷'β}C¾‰Ro0Ðìf©´ÿƒ°Øë©# =í.I¯¤¹.7pÕt¿hrÔ9i,z™Ë‘Çïsn·"È,ï‹‹f¿I1tƒ\·ªêÞ`å,Z<‰ÊzÁ#‰O¸¹k°m§—tN×Ñ?À£$ƒú gJkae$têNúù:™~ ï).8| ×,¢ª›_š2µU½Hôð¦Ü,½€¹XήÆÕ4ÎTáÌ, mC9F¾IˆzñxÅ{}¢ÿþèðvknÙ€ƒ´®&“ÍWPíµÀ Ô.¾È2èÛàB¦—ܲUh›4E·¶µýÇ„©ç§§X·0³²6LJR˜©m½>Ë;‘]­iqÀ%‡gõz0…èˆ0b]Š ¥ññ{_M d¤Ÿä3ÿå@º^4Oi®8'°í½í)ùF”{`Ñ×9­„ÎÊ#Ê2§SÚ¦IÝ´pµwïe6HuÝ=l¶ÎÛµ½rAØ$—_¡Ppè˜j¤äsŸ˜d¸cëÚV‹¯¶ˆ¤ûK[c£üƒ‰‡¶ßŸ¦÷6¬óÿ 8HdIª½_4üI¾ÎI)©)h«øÆDC¿„f¡3àl|ÐaéѺÃ~jžIrFÔ&Ù¦…•4Ç}ÑíÚd°Òx7¹QÕ©t4ðt*ýÅÞ/µ~Írs0{¬~¹¡G»yKêðÆ‰¶ÙKž°˜³!ïŒÉ°¯ ´’шæÕs ¨c¶5‹ ßôüÎY™æWt†ë<×û")¯©É”EÑ…ð S0AX–2ô½Nûz¹môRŽ9^ÁeÂ&@[bÖ7½ø?·H ©+Œ¤[9DH=$9³±vr{j­õŒCA[‚‡ º_’Þ 5*)ÀE„§PÏF¯©²V°Ò’&?é pé§Ûê¾çÏj"t™Ç£•¬V˜6å:Oyæx´‘»á ¿øI͉YÜܯÀçV8MZòuó…uœ¯Žýp©ˆê?älŸ}Wv¥k¨p³×%ÑÂK|Ï,ëÙÅ}^=;<¹)~´N%;núé|áék$¢?~uY• RžÁ÷Qÿ~¤&̃ÂÀÇg“wJØ*z)[8U(§™A¥Ä1•®÷¨rÈ_-œcý' œ“¼MáÞPŸ“9¢D,1ŠÚc/ë*Ù`XÌ£¦ 3O{Åõø,x©ÎÈ·<¹Bÿa´ E‹.ì‡WùîÓ6eÉH80öRm×»ç[±}4{y—As8hÕà>©DS*⦑¾ƒ ‡×pöp,2]ÏcãSºYóá²÷øÛâIýZz}­±ŒÒ {ù|ëØ»÷|Ö{™Ük¥(HòY;ÈüBsi&S¼6§¿ÚüCâM– endstream endobj 190 0 obj << /Length1 2407 /Length2 20235 /Length3 0 /Length 21627 /Filter /FlateDecode >> stream xÚŒ÷PÌÒŠ"ÁÝ6ÁÝÝÝÝeãîîÜ5¸; N ¸»‡àîä’ïHrþ÷ªî-ª`¯–5Ý«{ 'VT¡2µ7ŠÛÛ¹Ð1Ñ3rDä”™ŒŒ,ôŒŒÌ°ä䪖.6À›aÉÕNΖöv܈8\Þm¢F.ïqröviW €‰›‰ƒ›‘ÀÌÈÈõŸ@{'n€¨‘›¥)@Ž mot†%±wðt²4·py?æ?T&Ô&..ÚÒB¶@'K#;€œ‘‹ÐöýD#€Š½‰%ÐÅó(¨x-\\¸ÜÝÝéléíÌù©iî–.e 3ÐÉ h øÝ0@ÞÈø¯Îèaɪ–Îÿ²«Ø›¹¸9ïK ó{†«)Ð ð~8@EJ à´ûW°ì¿hÿÖÀDÏô_ºgÿ&²´û'ÙÈÄÄÞÖÁÈÎÓÒÎ`fi(ˆËÒ»x¸ÐŒìLÙ8Û¿ç¹YÚ¿üS¹@\H `ôÞà¿Ûs6q²tpq¦w¶´ùÝ"Ãošw•ÅìLEìmmv.ΰ¿ëµtš¼ËîÉð¯ÉZÛÙ»Ûyÿ˜YÚ™šýnÂÔÕAÍÎÒÑ(%úïwì›9ÐÀÆÈÈÈÁÅ:€& ¿éU=€ÿ8™~›ß;ðõv°w˜½7ôµ4¾ÿ€õv6r\œ\¾Þ;þÁ21L-M\Æ@sK;Ø?ìïf Ù¿ðûð,=:Œï»Ç`üýõßOzïëejogãù'üŸù2HŠjÈ ÉÐü«ãÿú„…í=Þt¬Œ:f6FÓï%ãxÿàû¿4ÿà?ÍÿcU4²üwq1JÙ™Ù¸þÕûxÿéÃíßkAõï+C øßäíßw ú³úºŒlŒ&ïߘþ?_€Rþÿíýo–ÿ·Õÿ¿‰»ÚØüã¦úÇÿÿã6²µ´ñüwÀû*»º¼_ 9û÷Ëa÷C5€ÿºÊr@SKWÛÿë•r1z¿Bvæ6ÿ•ÑÒYÜÒhªhébbñ¯úÏÞém,퀊öΖ¿ÝûÀþïý™X¿?(Îï³úÇ|¿Oÿ{¤˜‰½éï‹ÇÌÆ0rr2ò„}ý;bx3½ßPS Ç?« ` ·³wyO¼·ç 0³w‚ý=Qv6ƒÐoÓ¿€Aäâ0ˆþq0Äÿ æ÷-üƒX RÐ;‹ÜôÎ"ÿqþ‹8ß9ÿ wNå?èSåb0¨þAïU«ýAïœZÿE\ïœÚÐ{-FÐ{-ÆÐ{žÉÛ»ÏÄÞæ}ÿ±°²þ¶ØÚþÉÿ=!Ó¿ €ø‡ýý³Þ[2ûßÃÍþ‚¿–ÒY~C·?|L¿ 6ü¿Ãí]þb0ÿ ¾×kñ§úw,<,€vE¼Û,ÿ‚ï[ýßµ²þ ¾ bó|WËö¯VÞ•øÃÌöžj÷¾°ùß{µÿSÌ{²ýÿ¸ß›qøã~'sxÿídg4û£+Ó¿­Nÿ#*ë{Õï/‡ý_ƒø-•ãŸÅý\Îÿ\«ÿN›ù·ÑÞhjló?ǰ°þqüïILL﮿ôfz—ÏùOÏ¿Ðí/}ÙÞÃßó? ï¥þ¡{ý\,œ€ÉÀü;ÀÒÆô¯%z—ÂÅÝþ/Žwi]ÿ‚ïSqû ¾ ëþß{ö_ç3¿Ÿèù|—ÀëŽïL^@§õ?Љ«Ó»ê.ÿ<ûï/Îð?¿Ú@  ìò‚½ OˆU}HÇÃ!—±¾ÕMò]›s(‹6î¨zÁoÁìòoÆßÒ..Šp,XÄ ³Â¨ò3Åz"ò×ã(•xêMsÁ ›Õ˜ô¢åžD²‰ÛlK—ƒdŬR½?k†#uƒ<­¹ éÏÔ«ÕÚãÙ •ˆwO¢èÆš‡„ƒCû¸îL¶ï*+…õ1íÕ/ªÝÃ…‡c·T9Bò#º”r»2$„¢ÀJîwæ{aŒIOU…݈m›ã4TùžvÆ»KžÝi+¤DÉ)‹—åúey?ù,ë-‰÷â| ÄŒ¸m`®ïTx ÏB^‹%ÏÚûNjÐ9ܬ~ùŠ+Œ§¢úP@êµ Ò»83¾C<:½CæmS­[ÊÚ×àa‹Î·I  ^Ü ø|½ÁGùjÙ²®æ.Ô¸‚_—97Ü8û L ÕɈÎ?q" (*§ÌZ—-¦A[HʱÚöÊ|"Šká«qÖ­_G¿å ­äÓíÖ%ÛW;‚™Ú{fOÉñÈW²¬Äû‰³kYK¾œC¼8 +Ë ‚U§“óåf§ØŸš8Ú,T3Úä% d‡wž}¨>.õRM‘E,Ÿ8„Ž»…eóuJQ©–b¹¯^DzDÚ¥„¢×›2ž½–4P}ªwªûx~Ar/é:Š¡|Q|ÑÜDœ-9ÎýR%œÌ§ö-Ð^‰wb" nÚÐï+o6!c¹tÆoû¡íycóãRÖú°ÅÅz^ÈFõatSÓ—/™Ã8†×©Ç˜pcy:)]לм¬Ló×|.“’ +H<ì­-¾N2®L‡,¿>«‰€@X~Æl”t©®Ÿžõ½óÄ&\xõ3!$×Ýp<ÐmkÛcU`u#ÖÉ4¸—j+ørÞPûŒ1°g…˸APy%'ý(—«ÅX5çæÍ¾¼ ûÐ sÊuþL‚Ãwžœ­:£%C¿*ƒ}4LÝC‹%1"ãm.¢-,‘Ó KHàùƒ 1R†2¬—YqV=­†]J‘ŒÌæ×áSU ]Ö¦N7öñp|8êaGfl‘‚™Ü<Ù¸ÖëÓ½ôN­«½Ÿ\s¶×ºkbFÞ§9öŸÛ?– ôG¨œ~ãú6Q¶!ÐW(“ŒiB=:y¿¥{ažëRM!P¾;ÙwóËRõؽ3i¯ƒ,ÏT^W¤%³hbEánaR°XƒÙƒè€Ó‘XÖt¦fÏþØo—I!zH˜O°îæé”˜1±G+ßÞë‘ìôqê~0€¼¯úÛô0†ûÖú³ž}Eï ÆàE@ÊbÉõ _ØöL‹»‰ z)Õº|È“ý>¨{e@ ŽP‚-kǦråNQNw<û¥6GÂ롌ë›oˆ2q—jì¥CêÙBþ©qÁ{W€˜Î.ëf2o‹aÙTÒM1D"wrdÛ'ج1V]Tm»jLθœññÉðó1T_~ÒFƒÙmo¶M'¹¢s>7¡ºµŠ°,ÃoæZ…HŽPáÆ}¶ O÷h7iÛ’&„8d" tH:H§·ò’}"JOŸ*ծƘ±Ð«¿Œ½œÚÂlšÊÆ+~B'‚ç®ÜÁ{@e^~网K´ Óq>C6ˆø%QòWOBÒŒ$9¹Å)‰~í—5pÛª·6¯ÉhqHT›ŠÇJ’ïÒü5ÀKêÂqÂø¾ûêÔñVU†~XâÐæŸ®—ž+£b¶`w¶‹Ç ‚Wt*fÓtÊ~˜ðxøP‚m 3¡©Ž‚5x}£”W‹ ªøvëœ÷ ¡Mtx]Á vò·HzjIrżŒ‰6¤±ñÆ…¾*Ý/Äša±³àJn(¹M{á¨c|ÉGЮd"üX±;ƒZ'G3hìÆã½V1X­Ä‚y ®Î³”ß1>‹ˆ€Z£@¯³iIÛÁÉY¹@|ÒjžË§Ë·)H"¾ù$#þ šoü+=¡K=0Ö†ÊÆ¼¦'{Åx¦:f¸å b>u~TwëåшU‰ 뢠’kÛQ½¸¥t¬è¬o}Zàl›i‡è•Ð U]¸_Ľ€/›ã…£‹rQáY\Pì&/Ú%'ÁÁE&%kùJ‘$´dŽ·egÃî úI&N\¡éŠWæç±âx‘B¬öˆ[X’ÿúŒMÅ~ÓƒÖÏÅFÊå •©ŸÁÝŒ2€WŒÏ –0–Ë3®0Æ9¸ßE`9û¼„$‹çsY@a=é¯tò|qÔý’Ö'ŧØ qP5±‚“ë×è‹Y™àîy$ÉhÊú&~Pm%Á $©åMòÂÝ·Ô¬n2jŽ>Š®ç<‹ »lø:œC-ʹFß¿ªö^Rj:ùÏmd0ØØ¥€KËæcÂAS¥ ÂÖïçN}†­n’'ð–oÚøq¡oi¼þÝîÈóÔP¶¶Pú‡Q‘Z>hk¿÷s8ªÛö¹ìÆjÛ^kÒ S:™?š“­ÐÛ™s ú÷ë+;í ðí|å÷#ηö™èÆ‚Þ ž pÐÄ""DQÞX&ÐôþÚ_OÎ ÷±ìà6BÍÓMÉè¦uïj'æ2)dy¾}@mA²Aƒ÷iõËlä0¥Ndœš°É?pU8ð3sH· ¿\793€ŸE~5§º)÷ÀP¢Etá×©ÙæO’pîo ä&R&ãÒcG§²õ¬¡¶l‰t>´ú~§Q%Û§,¬O ,ldóíØ£Á oQ+›»žM®´öÃÆÞÙôóH(´Øöj¤&<ÿ²_ VE¡›ýËùľë†ÉgÇ¢øC» Jš­d’¥ûHc.REÕ0þCóôËZø—‚Kv•N©È7'v«ß¡ºžw\„ä!èdìR£Ò Ö1õ B˜£'6ùå`ÄñÄ~™:-“þ´~ÁìûÚ³JT›ÐËŸ|`óMÉ!! ·²À–º;ìköcSñC ” %¼~ë-÷®Ëé:+Á#tʆ`1*F‰ž‰6ŒJŽ`±åƒÉÖª”­9È<9¼ñŽxvK»®.6²"LIš}¶qÜ4XÇ„Å>Ç™â@ݨ)/&šnüBE¦^?Bà0˜ ó8K¥tªÜÊHHŠ Õål4apXé'ƒ­ƒ<› ¨Æ 0Ò‡º÷ÇÒºQ¤djõ¦vël-«kŒšï·þ¾ýÞ›2Ht5À4ñhªVÊÉÈ#ñ¨ôœÖϲÙ\ò“b±Ú–Â_™|ÂËcRzx*L÷ÒëÙ6 Ä1¥0Y‹ -ºŸA~*N¯žFl9E-‰òù)B®1øzʧ±´@0£BÙ×6¦©pa²øá²{ƒ›‡E%­> ï8c8ay¬¦ÂîÑç_™Z¨­ÍŸ´N«Y±éã¡H­%åÝ_ùüå Om6½+î•iØ<Ø,P°#e"¨"I‘ÊûÑ‘xöèf‰˜-„¯»£^WÁÒmT-DìéÙ±Ã}9KƒžcB\èq‘d<)÷º±Å`æË²‘šyH,Ùu¥ ù=<Kdðø5ŠçàSýÄ•¶t‹[>b} Þ*),Ù2TÒJ @¶ Þì‚öÓÑ/=—‚IÕØÙ0ŸªèÐ3„üM"Ãmì5@娮â @šKI.NÙiy[ý0dñ±s#¨1l£”²É{ñ߬#þÙøœ;«ø}äÄ;¹R¬6ýœoÂÁè@.pÉâXÁÜ0»ù,sÇáá ¾šÓÕs•Ìé*uí:ÅÖÌ×ı—†­ÇÓøeMo>û ï¡ûQ¶´Ë%zÏ’[ò*¯K!´ïUP!ð@\½ëÕq “¿Êõ`³N‚;|ë²Ï+8'4SR[—jVy…ˆ–»³ÜQ?gæÈ- ò[QójXîÊu„ó¿- ¿ùm7OÕE¥ç}ÒÚÚ4‘|§KEœ"‡°T‡„†à̰_ÀÒ “}y "If;dîfI'TóšÅïŸt÷q_îõç’À pÁáx2`º}Ž”¢º}A’®sìoJý/Sé”ÙJ,CÆ<¤-±D,×D*cÜVÆ(§?È[\¤ øGòÞβœÔ׿ãxè}i…ìà§Þ>ÏíiÒ °É~g³ïBÖÙÏŸçA¦•§(£D³,Ô­“Wꑺ’œ¿™"êPå>\?ÇÚ—ƒƒRÑìYc¬ã­¢n·ØÔX€ ìd5km¶ˆûA¿Ô  F­¯1MGjçîûB ®-ß"†1%zS{§£ lòú>wwÁÒ1£ ûuÉåôõUk‹Í0KÜÏ Ó£'&\-Ç'ŠR3±iðSˆ„ ’Ú2»œ.QFÈþêÿ3÷°ºÁ/°aþù®RŒ¾˜³Mº$ÞKÐç,j+^—î»âYfàcËE¡·Še#ÔbñáœHAÏjÅYOîÔ5æh‘£ŽsÜ›¦V¤Å­µ«áPŽƒpÅYÎöt­‚‰°2àq;$Õ>JSŸÀö*ž~´¯¼œ}Bƒ| ûdçUÐ"‹¹Ì*æm;J¿ ±œÇ-\¨À1÷ñá$,è4˜6/%=Kgé®6`Vã_ašœ¬`º<±Su¯–W1oq–S©”ž!Cx /,”ÝKwÔæ iì%2K†÷ãx  ÎâšF±ÊOŨñ¡ Êà>̾Õ'¬†©™1±sæ¥)IEެZÂS­]aºzñaT1¹„E½ÏCÂÛ¹d¨ z—Ìä¼J­{Û~{àú[„;‡c'_ü IW½MKܧC@,Ÿ,ˆì¡¹œ’ÆÕ¼í¼F}ÙUô®ù vN1#šTJªJÅòÊ:¥‘÷ öE/ ìô¦[Õ¸‚Äû‹iBú¸5Xû2p5«"Í<ä.«c ¡í {*4-=:-hù„cxë IaRãYFX"?‰G81žØ ¡Œòi3âÝ7»¦öý¢Kž "Í’,JvÛ?aÇviÇ-t0E(`¾öç‚Xæú¼¾^]6‚#HYé¢Hk·k÷+„c β¤Û“ER£Éð%­Î .ΚæÇ¦ïfWz!Sñ¢Tw­ZŠè m”¢95¾@ ºE7§ƒi7¥ÂspØÛV#‚`ïÞISåË~ üÒK3‘Çz%¸E²¡›ò5j‡ÐäpÄ´Kƒ{]é’¤s~l4€”Cû<„I)¿¼óà—°ãVŽø.ìíÝBý Ö]±‘Öiz£b€Ý02¬Pxóâ¶< ö‚¶wE sÚðÄ*àÑŒÂÚÈqÇÒ…šˆ^’-·~vÅŽÈ&MyŸÍî(®e“}wÏñ'yø–>HêÂBŽ"´1üÂ#¿·‹÷B1Ÿð†Í™’"³¦NÃöL4—õ¦T¿ï‡ÈõvBFÍ)Jaº‘B…í8z›ÎˆL½³×‰:ë:KgYÃ4>HI…*§ÀÖÁQ± ‚Î /¶:Í%×w•Ž5mlw¹`²¥”qÇ2Öb²Ú¶{œÁ—KàÖvÄDÛë²ñ B¸Õ6ÏDíü±°é(Î!$eN¤†«0«Uï~¸©t+˜ÏX¢7Šë£¦s}fÆ)t÷ó/¹r¶œÖûò\1p(e€/x •6×âI³‘H/¾â«£¨Ñ=æÐ©ˆÍD¨¿¥b_Xµƒ½Mñ¹ƒW; g7LsØÉƒ±t˜%‡} zu°Vz™]sÎbYŸ;¸°ˆe&uÍÉÉöim<-Å”¦ KÅmsE¸aÏ $þË«ç³tWœ_4Ö5Â+Þã;€Ä×Mw–vµþ`vàר¨âPF¥vâ̼0…óÕ$ºá@¢Ìy(Ám_*2|koIÉ1^÷ÎF›ÙƒýÓͼZ û¾ëýb/«úGí{¨’µ>¢t†YX—@ÚƒÏ ¥#‡U`ÐA×xññ“¤=VÓÃÖ£{¡rqœhSàE}Ë¥ÙL¯ÛupX¿»‘ÁqÛfÌ@‰J­šŠc„~#¡r½§ÌÞñÇ…]q[ç>£öð:´ª-´`UÍË—ð©„¢znñEhE»l(m,©¬âå̪^ÑãÊݵfÔCÒów@p¦m~XnñxdMùÂU_¾ý“ÇMdO¸é†0.LºßëΰSRض•WïWtv'—®"B#r)Hñ:ÏiU6œ7¼–Jä8òNâ—%óÍZ¼_$ÈìåIßeP¥Ò‚ãï?~ÕÔlÑv'›Ê `‰ç:˜ÖÖÑ2| ëÄ*3PñJöN£‹83‘OÍ6—dÍ|€ƒ ™ÇŠpЋv¯,ËS{(Øá§b•öʺÇ/„ª4yq–šwÊò K;M(©¬·…E5iVYìÒïø¼ëOÎ0 ÷©/Y5`¯µ'CWá#*æ¯iõåïð,\&mQ|¼Áƒt¿:lRÕ–Ø­Ï—‚%YCu´AܹaGöf æ–LQÆ\W¸HOjz=Ý‹ƒbx®/±›-LlÙˆ¤n‹»D§|t½m:sôü!Ü.šŒÈ&B¦‡â%«O¶L#÷>QP“Û$%¢Bo–Re5X*Tñ[¡²å;8>ÉáæDû­'S™"ÖlwýjÚ-"¸T‘+ÞIƒÇ*¨÷€R˜•ÑÜõQ^5ýÆ‚kON©ì— ëíŸØÆ‰5æ™seü³“"Ú%øÆOøÛ$܈þ·X+’s¶íÀø`ú+ž­ïeqF^ôº¾båãø ¨èúd>žÔ¸ë/] rZì<¾”&¨Ç¶mËÖŸ›ŒÆÙ¸a‹ÙùË› mkrÔ9‘ì3É`_4¡TŠ9*($Š@BÂ_\açúµ¶µf¨h̼7´FKÔ6^ì-Ì-Æ€‹sípSa %­nuk¸¸TYÃÄvj·ãùæ ˆßÚe*ŒMÏ7ì„úªˆÄé\¨¾¨‹Í¼’Ç 5Îcö.™åêPƒˆ»qÃí%ιb7n f@"Ól[ 4< ì…þr#»Ý¾xü¹«…½ÑšUº+c\9q‚Sš'gj¦úJ,rƒßê_T5AÐÕ¡òaï®Ò4 îÔD’÷‚çè§úv”‘‡ó j çMB¸ð6ŠNLì±dªeUKd²Ömæ ¤%ü£+ ’”]à,ÓP>mmÕåU ¬ùfƒ_ánZÿ¾{\Óõ-ü$È)¨Bæa»E•\Ù© „Ü’v–$Ùmî\&OìÉF{ ç§¬O­"Û6ÓUóM7ê+µŒ øi ½M^ømµ{=T…ß’.pE‹÷*È}ƒŒÉ½AÝÒ†êI`ÈÁ^ç>ËBÐWE࢕áóI`kI8·Äls:r×™aJ}± ™!\ý°UœN×PwœÅaçŽË7ùÕKmY d—æ Åæg*˜‰ ¹àâ#hbøÍ>r¯×¦õ¾ƒúÉx0©çÎmo<Þ}>£j2úI,Ý «Hµd[nåZŽ#+Ýr” ¿uàa×Cˆ÷(>Ž4È>€ùèFë1?ãå8¥âShHY%ÃOúÚSç{QÚãÕê•þŠXõx Ä䃺øºˆ’Øÿ1dKeÿ0êZæ-0*Ýñ+~ÔÄõƒ6’ êt  §¤>¶ÝµžV{š'æ)3‰}l¯Û}ÌB°™òeÓ¢—ªµ&ã‰%;:‘õv®¸ó¹Lö 5 é´€%™ ‚dØn¼ÈríPDF]’y^1Æ®sFÍýa¶ñ…§Çl• ‰G¦• _i©pWН!q€yLðvqpf±Óq’ØF³º@Ü?ð+*+Ð2ú[w]ùJ-ª¾çPb,vI9°±Ä¨Â¬k×Á4Z´é0,GŠÆvyJS’’8yÒ¸Ðe±0Ün‰[¦•íK¼ÊýÙ§ZÉaFíˆ ¶ŸÛ¿`+³Yl‘Šà™K´µÝGŸµ„ûïà4D‹íZlÍž¥§m½3iaövöͬË/‰óéw.¥_>/‹N‰w½~ÁXz¾ÑÃNsüHæ)úá{-î®?“1~œ0¤öÅGñBRæ;Õœ7ñ—É«é¡ Õ/ÍV¢Øý…E´þÊhÆbi´‚"Èòœ6C” &&éç röÇ»Ùö‚iá©-Pì6xWàšYjSÎM³Rì5^N.T.±rsÞùŠ|ˆõÃÆa_4è֧׿YÜã_Ÿ5P_æy8ü, J  µ"•ö\ 0þB)º¼3bk,´ˆvP½G@*¢°‰•€ Ý€Z­,v1ŽgÀkß—=š0QsQbؼzó0ÜmÍûIHû!Ù¤&ð^…>Kfû¾Y¤Šîœ/ª|¿'¢Â*7é.Ô:ùæ{Ð&ú'#§Ì!Slñ¹±OaTœÀ…’˜¸ÍïЖöe€Ôà©0ާ-$ÜA®ªYº‘:(Øi>SNRï_÷ùd\,Çv~ee+‡3ú9´DýB‚©Ÿ•áãþÇÑQ6Ž8í_“Ë8 ué#üë§.xŸ~ý::Gâ4«G˜¡¹Fpd”¼O´Šp¹ç\­-HôžF†`/’21C%/ š¼”U;X f>¨¨uë,J+.ÈÛÚˆ4yBdD¡6UGX[~µe ñžæÅiv«™Gb[4sgèöOhm ô;ÔÉzÿ÷–¸>3R¦Æž/9V7þ;®g¡²˜ ³áhÂÝë83LJdˆ“EV~5¿/‘ Š1¢­>áÞ°cgk–'kA ’q†§2¹ÀaTè\ïþâÐãË8HœøìMIéÊ3Ë­èÒ€•íÚnõt廇Ä"?\Çûüêb°–†DI‡æf÷¡Š1¤Úô‚l¥ašHáј.Öž­–î»Hv¯Žßî€%¤áV´ÕvЉ¦7l_3c£=Ä<º ÊíÚfõâÚ0÷ÖÎÅØ'ù–ëBø©xâ¡×£¿~ižðÛ/ÈÜ,j°m„¥€Ï~mŠôn¢‡GYBþ±‘ì*eçVªûÑö0O° ùj[}™â\ K]úÍbLÔ’åÀwŽù l.–w —(Û;„y+, ý¹ ¦/Bh0Y‡K¤S|·yÔrQ‰6š‘Ù#è×Èi?â,VQf‹òc–)‚†wzu>C‹aí¸K_îȯ¤‰äVø©á@ƒ9ÉÌÚzN§3¬ 0vòi䔟F 30§S| QL\zYž ¿>ѯN8ó =2©\íbÑÅPI$yØ×˜†´T9r¦WK¾Ô³hH6 ÞJÇÉ‹"]H\*°qª³";ÓpHÝ{ć×m£ÜîÝ@P[î–ñøyz¸~úw¸J½`lþx‹þiJÒþ€L*æ>à. ±?¥6˜Š‡-/†.úRëÚP5…Wf©%óµ“D!G é U÷QÒ¶=š2=Ñ"· z÷ƒªÒ]sòAX˜gšÅvÌœÖ^Å÷€d° þ4Oª¿êuwUŸ¥nŒ]º’ˆâè‰ÞD#SÓDï¢pì¢Dl‚åÍÝŽó¯ø¨e>ñhÇgÛAóå¹Ò(L¨ê%-?Ö‡qù:]¶nX‰7a‡«‚”°ï’© žoVG«ØÎØ=mä ´W:ØÒýúŸŸ·°‹à ¤êVt c‰•£ß²©ºwºYäK»-kUõwrî±S„z¾­Àé6 ;‡oÌa²ŸßöO;¤Æô]&Æâ`@÷YêP­#Dš 2ä©?Ò#{ÝE’Á„`@×)Ó8+DÄlcŒ¿×v:O$½çr‰õBç‡+ïvZS~ ŠÇ6Ø#Ь†gi ‡#Ýw—£go^5§">x¾à:~Øìh±húîøAw)z¦"ú×ÕÜW@9›å5—vÈŒƒ½!§û†mˆý Ù…"em¾ƒ.áN?'.^~…<Þéålßí“>Z"ûÛªñV¾aå ^Ê)³IÅ•,qUëˆQL[rš‚¤ n—p¤ó©@ÀÜXìPdrY¦ƒ—HÏ…w³ù£XjÏôæ>æ>‚íHMšY·ªæG¡TY»5_ rà«EÍ B÷T9<|ëÙ*IÞv5¥£…} Pù2EPÍrolÅÇRäz˜¨ÏÖ%™!ˆ‘^¾¸Èát¹UA(´¤I:5¬|‹‹ÏÏ)ņÕÝdÒ™–0¬¶9ùâ¶£'¬Pó”<)­¹ý»âÔ¤¶×›Tq;¸pmÄa²ÊQ:Ó½8R)6l(„`±–c\o„GF…DÛ5¥ØšG'÷'4Ç–h?Nåã*@ÜìgzÁ3tÐoÞšywh?åv+Cb’áð“Æ<Òe"¦Ï·RLfœ}ʾYÓè@Ìà íïÛÂÆ¶'ß,»GwÍ”±ÄÑ£|ejÍ œYX3Æ2è/N5 Ýü‚t …§aËï~=Åí®ßåËßyŠíìgÙݽƒ„à“SDùÅ×¶}I «çcNɼø4ÙE»bê§/÷?yÖ6¹+qóUô oñÇK^•­Ñ®ÀLa|'RPX©óe»6zªºë¤õ'ô¿` !ªìÇ0ÆÔɳv,eÝ–•4<ˆëh~ô¾xxN!¶£E.QLM»–3^1¯š±ÇŸ³‹>öOíãÁ‹­&’(§¾ SÓûãfÍD,‹ž?'õ×ÅaS£!àC?;Ø4PîMû-¯ÌpP„@¾é1à©OѳYR†nOœ䦪fïÖBÎ5a°)Êäâö,×PÑÃÅJ[’`ÛŸCXëEÅ<  ;“G}Jf.ªŸ ã‘ ®¶=Y¼+ÏçS*#íŸßÉ¡sQŸ YpÓóOiåy¦ö£¼ÎÓº¶&™‚>ÕŒç~ÜÎ,ÎH™ÌE¹w ¦Yg'~†Ül×yV8Z]±Ü^fÕá@¿§ï¯€PnÁ<Í1F%æµµ|)NÁ!(K­4W@ãE—ïþV¦œFBrB㤶_³õÞûøEƒ›|š¿JÂÔð…úhsŒ5#ÍRä\Yß¼-¬~ÇÓ Í*Ø=͆#0½î–°ÛìÁˆ±v¼Ððêm\J…@=ßï[³¼Ä׫Ȥ޳}•¾LKMëœÏ±Úc¸‚Ã$&»AòßFá=Ÿ”u"0¡r$‡GÃD¤Ù¤ÛäuúQˆ7)d©Ñ·Çe`ñ—ƒc¾›v½=¥¡grlðó¯Ñ€vñŽ,^,æéHÍ!Ôx‘¦ÌŽì$DãËKõ˜î*s¦M„ fŽD™”YÁŸ¸Å^ûÕÛ©„2\7ª8{¥±á‰è8wÏÏ ¹ó£³%ƒˆ¥9ŸAÌh³ª"íÑ–¦à›¼`!‘¦¶ðÔ•TЉ¯7üæ‘T(¯9øø¼]¦/ð¹aØâ]œ¹ÊöoÕGùåÕ8Læž[cg!9¿¡¨Yv»yó0ô‰¡C§¥ÅÄVr€ÎÁ.ãÈ#÷ÙÂVH2_5ñÞc;æÝ4ê¨Éžå<ûM^ÅAªõÇh¶V{I¬ê“BåL¸½É­ÈAˆùý³²FjJ’'µoµÁ~LÅL8Ï7Ù¥/èÆ2Áq9éð5p,`òýê ¥‹¾ytî3öe Ìùï"ÐÌEâ!éHo]‘ökCw/Ë£¬$iAuS †½Šˆyׇô³˜$‡ñ‰*3 $à¬âöÍωê*AÐV’¬M^n)W»ü§½ ЀKhY2=ÈZ§V»ŒòážÑÙ£‡æ|uý»ïʉÙé¹*Ÿs~‚ÄC²ž/caîøìœÈ}ŒrjUL²Ì×—è™ÄÖ›uº„3(; 9TçÍ_· ØÅoš!ÀhGßpŠ}µ¾°RÝu€”±2o öÛY‹‰†©Ë#=X#×ŵ¶DÆ]÷.ÿ$¹ WìW# vΙž™{nÑ_þ=’ÄrÞK]ª “¡¿³YºÚdM“—ÅK8L–­¬M´åË7á5Ùfv“„Á=ÉÒ„šf8GPrszëÙ«š«ÕTG“à›^—]7½ŒÅ”2/™ù·SëdŸÍ®ðê¯FPÔÅÝ•¼xÍŽ¸ZòžñÆ^Añ˜ ƹ›cá!w6gXý¾ù—¨…D5¤AYª| \ÆMº(®g‚¤5åÛ4{:ß0Ó#ÍÍÒŒ lUÃbqz‡(ÚlóÑòSé\n6¨)“ê7¸ŽïO¯@UÛMé×Ê-™LzR]0äj[åC$¿‰c_’YLÑÆ(«öTY33’˜_Ú êÛ“¥T‹|šH6±0ý”õmoqeƒÔ]¸ „,iz¨¢Œ×!ôÉGЃù:¼ùÁl"Q¨ÉOÎw–™‹ 5¼ß‡X9Ù-i›ÌÅP;J2ªx$“€n¶º¢½cB½HÖ\<ÈÓÝÆê`Æ.0ødv+áìƒÁ1ð-Oôm×±Íã»ÄM‚a ªÈü‘¨‚H>ìRËËxM@ëT€µÁ¬¯ãǃ„Q.t BaB±éi°è¶Ï5ê7^––-»›(þ&`–Ô˱vÓî­í‡D ‡¥“Å]¬Q%VD älðS¬˜4çƒZìLDŠRúmʆsý<( ¨œÛÑQ †åØkÖݦ°+ exd׬ÅããA £¨ÓÈü’ÂvYÊó½JßÐs7ÌH׋cîÀH¾ýàç1©"9•Ñv Ž”Íe»Ÿîß}0~`P@Ù¿sR'eSp×aûPF²6qò’7’÷Œã¾-|!µcJ"Ìù'Vµók¢€ëaÖ|Ê_à4ú…[K2(ÇW(@v¤®~]…0I6 v¸»\ÃD ¢J»+´CœÉ¥úõ¶WsFœ s¸³ÂÈÏüAôòCûgQ ´¼“'<"Y+埥5ú˜®Á˜Rª¤Éê0Ñ-[Íèm"DÎ> 0"Vé­ªŸChEzÁÇb øRTê{æ:õ£`ÕŽ†´ýj(h zœj„ªQt¨7L>g »Ö¸·Íú 8Èru)ü¬êodMÜ'¢ºbà!òºÊÀ§ûVºäâeè©zój%]RÑçD°Õ:Ť+ÕŸÑÀÁ¼¦k­-†Å§rËy ‹JùkÊÆ¹+Á ~P«f›7‰ø²’^MõèMÃPßï’Ì ‘’ðšŽÞtäðº»[ ¦]ÖN?$ŸI@¿úVók4t°…˜ðô›¡þÞvd}õì½ ‘»Ÿ2:1ÍHO©[é‰è7óÄÙ%Íç`¡®1suÉžó]Çz9=ȨÞW-ÓÔNÔ%„B>´yŽî]¥è×—÷¬Rx»¦Î3ŸMo<³¡®ËíXýMÿRÑÛû„’Rí«Ù宨A c&;9uˆÃ瞬O–M«_Á¾TùfÛ ½|ª¦mw˜@ä»Öm …K…kaYu?&ë‚ôÕi®ÙêÝìˆ:'÷ëÕçí#ßoñz„&£œäT7Nöᵋ\‰„ùéAŽd ±ë¯X”½<'7sK'D 2©ñòâÖ>'O*ŸyfsŠbôj^I|ÑDÐ¥Éõ£8ç~†Â·#A‹HM@pƒ€ÛGy9¼h9“ë«Ô$@:ŸÉð94d(¸xq„Ýurà¼"ºõ (…¦5~^ö¥~ríD\’£Ào<#ÈÝix©|®-Ÿë>0ì¥aþVvý$ð<ÓxݳT‰Y6o92K|Åà+{Š•WÈ|¼L¸VåýйZ-@B ÿNYš–S®ms?r¾1Ý~i±mÓ˜æ¸2Ê2B‡6çÙŒ *kØÃ5…Ò"ʦ³é~ãÂ>öfÓxšS4©Ú¦féµ>>ºôgÔÚR£è‡Å3ÓïÎǾ˜H>œý•œ çÂCŤ5vƒgÍ<÷]¢–[ögŒj~k ¬î l !N ¶»Ç7ë+>ŠÎØÆô¦<aImîÃR‚e;ÄQĨ8ã_„¡&à\‹¶Y°á<|D+?8øõäUgyå($“ÐR±ÊÍ6°ê'6æ¨ y¦%‘’Tä[SÖ暌²´{^( :¾ÆòXµ}KÊf÷óÇÛnKEô[eAÚÒhxŒ°O+­„AÁdwbô§7‡¾óöo¯#ÍQ]Ëf5ÚÖW±Äuá³ÿO–l~¥XâI„[}âˆÂтѮSd°ˆðÿÊ5íC–Þ6°‹®F9’§uáÔh»Ð${Qdód¬W§ò~ªWB­f˜›Dh)þS±Ù—’Se¥°ü 5ªlÂxÆ¡AÎe{ä’,Xþ9Ú d¤]ìãjÀ-­yÝV\É÷¶¸5ßÞþy úíÿ)T{;yÅ-<·ËŽbÃÝ€þwl=}dB@TÁsTOòãìLÖráûa°«Í:jˆ¾¨#‚«-LãjÃ#¬0Þ«LÜ8+½-Þ»h#$]Ã}Ž•æä’/i^ˆ1¢ü…)}¼Ðž“4âñ½_úr„&ƒ*Þ£ÀóWÑõ9 K¶<ÜÎ 3€n}›ù‡­hÏó¡ýC{g-ú±…‘)c›Ú<ëtî쪿zžIe'ß.× ÁIWoîÉž@jnÈŸ»ÅÚ!‚¿6ã=6}Ñ_ ¾qÕpóòŠÍ_ö8m²OãÿÖ TÆÒŽç¼(Uò Ÿü|kÅUâøýH/]y¶³daü»S[•=,¿?e3iœÖ-`¬†“©íú9;ÔS7`þl´ ÙÃÅÇãÀÃ2t'mF«Ü}N‰>ð~'€E+Ä}>‚ù\åîû»š'mÆËšPÎ=ÆæŸ…Ý9„{ГŒ5U‹Ÿömx×8ú)|5-ë–O6]5zƒóù=zñ³à)6ZizTß4ΤVo!CÖÖ˜:rôÏYwVý¥áï•…™Äa¿EiÉ}}Wè÷m$¸±µÙ§¾Ëj°•‘J¯/ópsí7w¶~·\Žˆ¸ö Óë"qŸ·îêz?ÚyŸ@õAXùô¬Ù‡AG;*•ÿOsÓM¸$°nPÏÆiöÚ\ 묠¶9ÂR`¾»îXì'š²Ž~AŒ)w=Õíáuuc€ÈŸëÏv¦ì_ÅV¿7³»¹Ü?0ó@â3†LÅÖNÜ»å}˜o'âÙ¡IŸÊ1”yzÀ-ÇÐdz1RŠLò>Ù®FLjf鉡´6hÙÇÜá˜Ü›yý%ù`@-ÄFíû—ca]Ù*së"B†Œ*û&¼|¼å´b"„g¼ˆ¾ð`Òɹ•Ú‡á‹öˆK‡˜ÊNé @êýeÕRï©f™m­F-ù3^'›<Ô’ÈÝØrÆ€‹ ¥÷ŒÿîQçtèÚ%SU…ÛÖCõ‡“Ú¶? ÖÍ^¢Ç<—Jñ€\aFmV!™1HdN!·ª¾2Û Öž“µ^åQ&^NíDžÆß!‰i»áiw±ÞÉ­u‰×Oùߢ’¾ÂkUâ ¼Am]èââãûò@êྠ´ãŒº=íÖ™ƒ5±ýÀ´~íCþóÝ›AñîMR×)Q] Z›· èžÉõΙN7]JغC¹ý®Mtüš,P1íw·„#T¡1ÐÖIt»Zd4…°„ó×/@­x˜ÅFó8!Á›Äµ1 ©_Ð(>³5—KÑGr„%Ï©QÄ·Î N)þ jîˆ5Š%’ròÅÙÃ4`cYå_ÿ;ÚnÈBØ Ö„àÌMÌ“KÒ3fº1m—8» Ïˆ÷5A û4Úu€óù„ý8Û@È’ ¶M§Ûsª¥ö|]Ä2Ü^õê8BE2@”ø2ÆóÜXjWà…¹d#­i.ºBÖ}hï÷¦ƒœÌ“f¯çšHûÖ8¯÷¢ƒ3P%¾‰ç†Ë>òbŸm½CF©®ÝRªêôœûÚýé ÊKÀÁµñ2IîjJù)&ƨæ‡Y6Ь©]—¦tJ%>u¾ŽU5ÎèàÒ=¤4Íö¡ÔÊ"¹«¢Ç‚›Y€mÌÍ6ì˜Èª&]ënèŒeâ@½¼õæó¡8óDݰ’;Èi‰ˆg™Iƒþ@¢ÉÚÔ õ6yP¨pŒ‚ÜãôºóÖb½xà¨i1µœ´¢°Ðù/{x$Iž¬ˆñôEî…Zy©<¨„îâí…fåõÿ½ˆ™ÕÄ,. „Cç„xƒAÞu…õ¿¸·å‰ÉŒ^Á¨:æ.šOWB‡‡¨Fú]ÐÌŒfߓ²”X:Z|–hh¤×ÕóØœ–K«‚L6í:ƒª~Uæí"þÁx63=´)þA4RÊæBVüëîùÚÔü& é§t™D ñ`ôc :öÒ—«¿lséï§„Z:v ÷™E î›Y‚¬ÈÝ;êÖ_’¤À#‘9iïC¾ÊðSFçäÏQﵩ îv™{ ¡áÆLC1HÉìe·ÿ}Å[ÝÞƒ]è±™å}é±þ€ñÎ6´È’·ˆJ謜η|+ˆ7ydJ<”+­úÔkW€Ýd+ {©C¸_‰ÍN×À%¹qµ×ûDO0‚$$žâhØš“Äδ‡F3BÊ£ˆ5Øæ[Ic›{ýg<ŠØû;kŽ$+hà›IC“Øä‹'vÛpò ÅKæW¯Ò?‚É9OQÀ2#ÚŠ$ iþíf}÷¡wì…dô_*^=’‚‡b‡“>Ï$rfÞv=Ôu¾6ãoMã”í¿UµšŽ­—­OápNC©šq&ò®d^û¾ÇÖˆÀôÒè³îñçEðCŒ›.aGƒ3)gͤ“qÙƒît¶~S¾ÎêÖá`—ÐÍÁ¶Æÿí‘KÄÍ îªm„6 Eel\C¿yÝÑ0Žfk~žò’{È7\Ä)5+áSpD½X"+»ì­žœª¾lÖlw[ nLŸíÍJ‹çË¢z-8yQT§Õõ©ÿ69™Q«ÔHœ6;f犫Î7üNeu7dŸ¾›jã ê"þ>—?Ò[Ù86I Šh¤Á€ìCÄöÄï¥Á}c~A}±#ê»ÝD:¡”«ÔÁÖ¶æÝKl!><–).["øëÅ€Êà%YŒ9L§ž¾W ü?•(î"Ïùo ™jÁRP°¼ŽÖQSY/ö·uÉO•<Áê¥r¨àЪp­@òᔄâ|©¸Û|€Ÿôã ×ô£Î>òùþÊyÚ[½*بp$¥âí>ÌÂì80ŒMwŒ/–v„ßΚ$ÙyJòÏò™¯ŽRò㨠“€€ÑJíLddCŠXŠàºÁÓÛºU䜂µ?ß {åÓyŸˆAP’ š¿QÜ|ô> V÷Y_åÚŽø…l†Ê¹ Ö´Ž_´ J®tÀ®j-Hƒìñ_,µX>ål{®w ZRâ’Í­~kSUÛ'Sä[´ß¢·åÀ'àüÅ ’Éâ§âŧ¸d1-çA£„Q¤.gK>¶*6ª€¨×îï¸jέ­á1¤1"õ´î܆(Ÿ­ᙫã”O¹Ïx<érýEñÏÿ¿üÐÎ4Ê;3úÀô+‰(W€ÒÑd¡µÑîée*· h’¸ÔÏ·Ø«8*ŸÝŸ®’þQ€Æ7»êC†þ~Ø€ËiÓTs«ÜžÎìÂJO=µDÙwÊÍP:7{lmc£1b>®gcgš†Ðõ< R‰sê0<¾¤¾I‘á€ÊÂ`R_$ì7wTëGýIθ9쉣æ£áàE±þ8b¢˜£?9d_ƒüèã%êÜ×9x÷‹óËG>ÖGm¬Ämagçð ¥ö*in:ÄP®é¬Äš€Üï¨^x©”PVašC/"°d9ç%ohPÌÁ›ÔÅv|L(.R‚{ä S¦I öPŸ]k9_»ÖĨ±G¤ÿóŠpQyí2Œujôu‘°whfØæï-ÁÃi73Žék#ì#Ç_ ]aj=ÞŸ§è’ç”çÒç•.7[ôâzq ¬y1;!#P‹Xã{I®M}Ÿs¾¸Ð¯ìÌÙçH—ˆA>ºH“ .p;&pŸ9Cͧ“yÐÄõE<Ó²Fà,ŸY}æEÜèvåÌÏ/‹xó‘c~µìxià/8Äîsb¯n¢iÜÈ «.®-é+=ãì9ü6lyšMÚòñÓȱÞÉ(î'åxÊù8Eÿ)&Àޝ$ûBfKJ—× =å»À[™ÔƒP ³œù÷·kpeÁAÉÝ"0‚ÔŸñûÖ‚ÓȈ?[Ù½þ(좆v!Š÷Í‚U<«†ýR&ØY$éM2TÞJ´Y?ð+“=an××çÓ‚p! ä ýмàzÂóÓvï7â€Z-%"ç±ís‰hm=¡õ ŽLMhhÚ¢•B=bØT±Oí üúY‚eh\}¨_Ê´'‡’0r=,³c+É™#üérîg»MywU;¢²>߯©’BöÕøž<ƒèÞ®£gbΕ÷®(F‘ãIö,¥uóÂŒ¾T¸4¢m†BxÍ#yÓÎëœ°ß …t“À^‚Hcœz”÷3 rîç<Çü‘=ed‹>®;ÕR[Rœv¾§r5"Ž¡ÎHÛ²ß#AøÁ”¸í¬%[ ³íËþ!èØª”ê¢áÞ~8$3øj²£š<ˆ‰ñ4â¢U®MVÒà˜½TÿgŒ²ØÇßÿTÝüòÛbq@xƒ¯ÊÎ…¤V‘!‰íÉRy9X&lõ+%‚1Á¨ëÛQŠ;ž«#i‹ãCîDA „-Ïòq 6lW¾ŠÈËÌìÛ`¨v&•RÚÊ$2+,R… ~×ËV1…ÌŽ[®ÓƘÀm7`C±8Z¦aÿsî%e/)mïï‡3:æÂ^\žú“zQ'»‰Pœ7 J'÷·|Ž_ÀÏÉ9³8c¬0ú'Z‘lò­±ù4«ÃL³L¦ZãÁlúÅ–12Å’]ª[£¢•-fbã¯FÈŠ÷‰XÉŠb÷M/ä²=@°¤ç2Š¥ÏìŒ  éÏ$ì¨ú#H~Gq‚©è_ Ž£X¸™Ž¦æmyŠï uåJÃmXœC¬¢ÕtI«Òi æ|-.fs.à¨Fq&ºÖ̬-Æ(¥vž%NW¡Hñb1Ën‘_—¡Ú|ïªZÓEªMÄd\·°ØPÀOÕHˆé¾>e1Ê7û€s©wZ_ߣTeÐö£” 熾~ì¤eþüÞ‚"ʲU±p\Æ­Æl`w™N4QP kíøX(…Oü»˜™½†å8qwl™JFC!™!à®›þ®ƒª7ÛBÑâ³gŠ^:t;H&íg%ï2BGa#ª#…j£0‹ÊlSGgpR9ä¶Ú^Ïáê'mØuU„˜~±žïs™©ö0üVd endstream endobj 192 0 obj << /Length1 1636 /Length2 9155 /Length3 0 /Length 10207 /Filter /FlateDecode >> stream xÚ·P\6, 4Ò©ÀÒÝ´„t#µ° ,± »tJƒt7"H—´4Ò‚ Ý!%ÝHLJO½ÏûþÿÌ÷ÍÎìžëÎsÝqf–žF]‹] 3ËàNìÜ\"­×Ü\..^..Lzzmˆ“øo9&½.Ž€À "ÿ²ƒN2Y Óƒ¡ Pr¶pó¸D¸E¸¸<\\ÂÂà"Y  Pá(Á `&½ ÌÁ±²vzÈó÷ÀdÁ àdûà e†C,€P€ ÐÉlÿÑhЂY@ÀNîÿ‚IÌÚÉÉA„“ÓÕÕ•hà€Á­$˜Ù®'k€&†»€A€ß”ª@{ð_Ô80éÚÖÄŸ -˜¥“+<ì `(âÁÅ ÃÙZНj`èŸÆ¯ÿ4`üU7÷?áþòþýÃha³wBÝ!P+€%Ä P“ÍáäæÄBA¿ v؃?бš?üqu @^J|`ø?„âà„à@@ì~säüæ¡ÌrP ÌÞ uB`þ¾Ÿ,¶x¨»;ç_͵…Â\¡ž#Kdù›ÈÙS qt+Êþeó ÂüÌ ìàçââ€`7 kÎß ´ÝÀ(¹‹8x{:À–4ÀÞKðæ'è8ÁÁÞžÿVü7Â俀 Ns°ŠùŸèb°åŸø¡ÿpˆà ×Ãøq¸~þ9?Lµsÿù-æTVPÓRÕcý‹ò?Jii˜À“]€ÀÎÃÏàææá>¼ÿ;Î?ø›ýRu ä¯Ûý+¢"Ôþ“ÄCõþ&âò×d0ýµ6Ì€ÿΠ {˜g0€é?ãoÄÅÏeñðÅýÿ¼¸üÿÍþï(ÿ×ñÿßÉ;ÛÙý¡gúÓàÿ£ÚCìÜÿ²x˜gg§‡ÝP=lôMõÀ.´ q¶ÿ_­¢ðaG¤ VsÎ.ÌÁ'𧂇¸Aê' ë?Géï^<¤°ƒ@Áê0ä÷³`çæâúÝÃæYØ><-ˆ‡Žý¡?,Ö§•ƒZÀ@¿7‡_„Ãî˜ð€øžÜ« »ý1áN(ÌéÁð@Ñ` ƒcþî« €Sé·èO$ àTû 8uÿA‚NàЃ¥Å?ˆ_èÁìHü-ùÍ…ô/È àÿ ò8­þùœÁ‡T¶ÿ“Îù¯È»Å û|`ÿ|…ø|ààô/øÙùø_U´p†ÃÞ™?¦ý¡Äã?50Ø l93 ³ ´© l¾ø$õÌ•}}ˆ‡§çøÝ)ºÞš¹Ë††¿ŒØå onø´TûøÏðË;<…÷õ¶ú$\¶&K^©á"$35ÍO,ÍWÙ¼† įv¯y~*·µšñBAV$Ÿ5û\O%ǘIÙÖ'2¶^‰1|.?/³>@c¬ÛåÀFŠ G#âÅFl‘Êh)—®”oU|8–Ú‹§”ߺLíàá_é™-fC‚,§>ÛÞÆqP>ÍØ–HÙì P6ŒÑ¯uÈ‘]Ç0ùŸ6ú1™#¾i½¤ÍT\>V8ÞÏÔ¯Á»‰¹|͆‡U#ÌhlÒWS&jç]SéŽU± ?8'îUàk°×4›xŒ®v¦cÐ!¹ b³zâd\âÅûë ±ë%©¡N@7£žÝè\©úÐè”JY!$ùç$' NP÷t†XÙ×"£h/,¦üÌÐRùBèÒÔ˜òþ‹]˜>º/¤Žâ#%Njj]b0>/ò ‹ùžSKf… š/pí7à‰©^÷ºjã6lö¥÷Vx࣢šFjTÚP7‚®Ÿ&Óúød‚3ÌÑŽ³Gª Reþ©)çÇœæ}îvájXÕH¤ÆÕÀÙ§ãŒ\³ÞÊ-Êùbžy `uàDwÜj,õÁr=Wº#ãƒÚyq«ÊÆkÁwišêd~v¼;á%æ¾|’£8ü~‚y ?>-[»ZÄh–·¯ˆØ-\jô€‚Y‘fà"ºE²Ì¶*- /³7gùñb0M}VËòü/¶«W R ºœå+oí_ëÕ›4h›¼¡ýós‹ØÚJÇÜN.éžeÝ,h'/)#EÆ<öÊî©nAÕžîÝ$cò7Fð—é¿À¦3n'±¸Ëb—ƒ†Äo˜;Ø*èÓ£±Ò9Ç’7£n5­·7Z‹T†LaæAnû Q®!1û»Ÿd6õÍÍ:‹úl“¢70–k¢xžÞÏK4.<¾Ž.teb‚¨j„;Å`ÊÚ¡ß7 *µR¬ùe­kÞÛûezȹbIÖöޛ̤™ÆKÍþl.R¢Q%“b_ç¹á3!k1p0ÏRUê‘ÄÔ5¸ÕÊÊö‹$‰Ö/Æ ’@8D`è³Çï Çdà HÞM½ì%è’3ŽvU½µéAÔs¾‘ixî„ÊÏíCë²ÈŒeãÆ#¿5¶šW¾¡c/òß1ÉÑn‡¦RwÔ·­ŽGÔ‚øòÀ³ù!3t°/Š!ûai?c±²s‹‘©ÚÔø6^¾ÇZ `êüþƒú­¥(‡ˆÞåôÖË»ji‹ÔƒtÑ"¬â‘…#ò†(Á•ñÑ•@/½qû™€Ý B»oÜ–•{ó[Umƒsb°t*ÖMý5îÏCZž›Ö‰Gnj»ŒÃ°r,ºm%Fdµ^¤¦ý ”µÒ";¶%¹7“éycÕª\ŸB0ýŒqÙ·¯Ì6Û®H±B?Úw$‘ƒ¬¢'Wæëï0øi|cvõÒ†‘ÛWâ}ˆóO‚gÓ5n—ž~|«‰.•j¢=¢=gÝß ÀÈnÍ{5ø‚çËÏCwºÿóÁfÛKåFi^´úvbÎ{Æ;,ÆãóèKZ‡Üö¿œ7Á_s)ÂÀ_´9,#¨ŠÞw?’Š ùJÌ©×dC'#-ÍB =¹ œn iÙ)å¦#D¥¯Ç­ÈVwÜ;K|½ýÊԲϻC™Ûô|¬šðÈ¢œðËM) @‚I À_3´ŒP¹§½–¥tzà•¯ ÙøŠüÈ—ÞFm/%ãšæj½1~‚øZ·o‚µ†«nÕOò…Ÿ5Ð{ktã#”]«c“¯ÀYòkŒk¬C•WRnL0Ô4»ÆíêÉäMͲº·„ºÓl] ÷ñbméÐ8iÄæGG·öÜQ ¢Ì ©O˜H:f ¦—£ßu[oÙG|«â=„‡mùÒ®GŒ®GÈy röJ°h†q”PÄõžÞ:!6`pòwî‹s,1Í&´—Ö¤‡µ ‡(†{ R#fš£"‰ëû|®3ÖGåìfSì#ûz{¦åoŒ‰Ôm†©êçÅîQ|*IK"©•2 6Cy‘~ï\K)h%ÙaÜOgKÍ+-Î/¦ö]eÜbôÏØÆŽº=ÅP§ŠGF-Á²ÔíÏ3Ú°ÕüKYs5‹ðKvTQ$PXâô}Q ¥6–#Âeß ™@¤X&¤¾ûÜYäe8=“oiYþ¹“¬ŠÍ>O»a¥‰×ü¹T\Z,Y튮\ñr‘…ÜQlüQN6ËèzHÈæÉ~µJEü²ýx›‡³×FÚLÙaا\ûËÎñ1r ѳi±Fµ‡ï1:‘8iaæ«—[ˆ)滹ô$n4Q/LÅC;í^ާ²1öñóÆ ƒžÝ²%äF¬‘¡¼Ž{#ÒíЛÖû˜£RèˆÂ Z{up¹íPOÂ-”³ 6,1u“ƒ "rY”ß«‹¾®ÊP›úœ¹ÎRÕÇ¥Þñqf"Ù…lóXˇB²IRûyd°Ûc¼¿•É$‡5ü!èÙ†›ú4ÀÍQPŠöË’ïL½V<ƒŒg£mÁNøç‹æ_Õ’‘`¢ÕNaúdrö¯ €{ŠD†áŸ(¯ŽM’rIª/á‰z¡”‘TÁŸ‹±œÝºos×Â]ªFzÄpH<ß#ô ûzë’ËÏ&hÜÌÃݲVŠO±4¶s7ÕCL1u•BiyvSMÙ‰VÝ·Ï~˜xÒ–6iEk½Ï^J›mšØ7–ÆSóÃK½zÒˆüÙ›ðf>ãÃ+Ÿ0χ5±Ö«} I™ê•Îe"¿‰uJb Hè¥ãœÇ””Ëci€Ãé͉eÁT€HÅè^EÐVZ»ã’y¿ÅM y]Á| )ϳÜ6÷bÓÍgÁAº7Õê3¾ý.'x“—· u©‹¼wDýPw=ÙŠ+p{§Ñ¼ìT(“Œï¶ÂëW<%°Á\ˆÁÊbZp–±{,¢Þi-I3û˜€&î…¿› ?"1ðRrÆV&Âvt' _söl6@Ûµ?ªs“ÝKqÈlk…°ÚªÄÌÄÙ¤§´ºæ¹ÛIŽ£‰<:‘fd{­@‘»ng£:ó|5Çp]:Î-_ä‹Çùµx®Ýjo.º¿¿ñ2FW®.è[!p½(ôFø'zÁrOž‘HÓ×1w¯åîP·šöß“ÀœÖ'[­IóZŸUoÚžZ Å2=ÈÜl‘Û^~z¶‹Žf©#ïŸjmòJî?y»l u–öTõ%†ªvÿòtIŒÁûic?ú¶Uœà䵸[“þ›ÄQ:FÚø;Ž<ñŠb©ÝÊDH‘šÓdcÝûûQ†”Ï{aógoCl²­ß>U@²õ/¹¹QX<#OɸÔgew*¶¶l%áÝܪêõ–ì^Èßô糧P ¥sT†Ÿ¦2ýìm†{ä’E,x<ߘœQFðkõû„ÒÂ×ñ¾AlVÌÁBýᨧ<1‘66©5>‹GéÞã›%05Çù¤sŠ­UD[þžœiÁ~â;@Éj8"šó¤ØŽ= öÓ;Éþ>ù4×V™ë‹– /!°]t ¼¯˜kùáîa®r8åN¼Šý} 3ãÊÿ4SÑ)ô/P7¹ÄÈ(±Bj–ygÍbÅ6gßÞï@DI¼bÌê1nb»dJ ý‰šWg,ñžÊ¾Ù1¤œç¶"Mù ;¢£‡™`¨r,­ã[óFü„r”Wž1·âc-Ô/@k–œ¬cÞž7N‹!8’“¶!wg–ê½F£—;qå'Ò^0RÁä>²-Ö›yð“Ö A±7`ÉdG¥¯óN‰˜Ø%¯kd.ÓÎV·íØŒÀzvB/u%Ò?ÔÚv ™6lúQÊþYÃßPÍ8+¶Læ;éiÚ—œýó5Ý¢Œ™ýaE"oѨ‘Ü…ù½Õ!é+b-¡ŽÕ¾ßŸi eïúÑs!ã2(ˆáá*¡ÃêQ§¼D%®ÅÉ<7uŒrªn™ÊP49çO÷€Û¥0Šxû1OíK½È5;Ü­í9§ ¤Kzt]ï>.‚(RGN:+5}ÏâM,JÂOæ¿GÅŒiÞöŒ^Xß©Äg×øÄ¿Í¹â%¾íç‹¶l“)ïSIŒo¹žUåÊÓ÷ÿÐ>º½Û9Å-äc á–ýD3;ÂtÛ`~K¨ ¯¶¦~Øâ­SÙÔ[@šY›«üÆÝ¯yO*ï…Úu;™îS)ßçH@‹ˆÇ_P"W òí)£rJn ËB ÇzHtô4s¦6Š9}Ȭ¯.™α©JPü~ƒ¿î9í*ÚªbKøí>Dd­|E¥$ϳ¿Ör˜Œ`›¶ž™þø¶C•|Y0/¦»ºY‡²ë>å0ç“\]ªC»;ö}.6÷°½@¥õt /%C÷ ¥oÖJfeÜ`æãƒ-"¥9³ÅÒÙ$µ‘uÊi]]cõTÞØC2µûÔ23"‘62íƒàw”VÙ&kPM^AÉÆÞèÁËuw|ü¸œ)K»“@ÊüGYOðà & ÜÒ ëV’è!Áý+#‚áúxTf'ZÏEzA#'7±PÁY ÒWx»¦ÒÔÆ½1Ùï3èØES›ˆñÛ5­×éfF†t5Œ›g6Ëñ›ïð¼Í4îw{|Cæœ3”´¸þ«»Ë>㈷ð¤ájP~p©|t£`]w\³Æ¸0÷P”fXj˜‚+ßþãD.c†ÖE×n8™o9uë©·Ç©¸IJ}ç7aža ‘«¬™/ëÚD:áâ„¥¼NYõ8’ä#PÛ†¶°bâATuÓ~°…øÓ¹½oFu¶L›l¸žï0‘<ÇPJM°ušÏŽ(¡9ÜûrÄp8t$–ÂMðCŒœ¡Ó¬& 8L={¼ÓÅäÓâà"¡· L¼mìꄘúó$ބӍ‹Í¬¤ûô&á4c0ŽÜ—º¦ø¯D„#Þ=±{óE„ŠÊ׈ðÛˆ±ŸÇXVÂT§ƒ¤öˆj?ÂHÏ—l'Rnàûõ‚æ¯ân=)=yß)û.|ݹOmY–c¬ üˆúQÚ6é³2ï¿IÉ™i.€×àŠ·“8ù×øl_ÖQ¿îÖ;ÓãÁ‡¬{¿ Α%§‰lÊÛçÓ—'hÒèNx*_W§æ´óÏ(˜ön¨ö¶-Ë&ÉÞKâ8ñBù(©q9 l,±û›Pc+ÊLT+ŠY3ËVpó¾zdûÇŽ”ø[$èP8a¢1‹Ó {q\_søž4ŽºÇ!Ϻ3¯×gËã“TÞÝl¶¼Û:Òr“Ä.üÙ1¯½Š¡<€Ô^õ+¤!_Eô €ã€©Úõïs8¿ÍŶ¸ã&û ÿÂpšø#4Úº(À—I•Gަ¢y[ÇAɆʢ-v÷ò)(%GA‹ºÈ" «A¸i°K†SÀDº±ð"Q$©ùž1 Òi¬'jGþÔ“/ÔMN|c&Úñ¹{vE“Ô­¤nâê8®vgÓ‹^÷*À[µè®ñ¯ƒ®C°eyºúH’ȰhàÄ 1/mmw 'Bø–oôÅW¿;«Ø@FI‘³P§Aà RCÝrkµ).œÐÂÙëË€}n^±[¹6äµZ…f5;!†®ÐvÕO2ŠF/H>×ñ3`ŽH‡Ž4_¾a¾Ù•Ñ—J^Vz‘cÖ¤+òÃÿ[oRƒºZöy:ñ˪áFš¸»2Z‡=ð•O¡4e»J…9 Ê«æy›‡5Ñ;ùÙA=ZS§€¼´§S¾‹ØÓó<רPÌ^·è#}Z{)µ+1;tfÿýä­ýà3U,·?ŸùcëYó’ç'Yù1²·¶7kMù1n<ÁE£WëœÚ~R@™&âÓ%ŸËa/x2^áä¦GAÆ/Viß„tÐâ}r¯4e¡Pô>—æ}´ò>o§s²çÜJ\üη,Ƀ£`^¾°$X'°Í¢%—IН~5˜Ôš ÓR…6d…|Šw ž4´Œ`£fÎÙÁ {¯Ù–úµ©~=vð@ŽB™}¶§@ã’\f-n ÃþÛ›’(£r,Ìï=-iÌK…²=UèÆ6²ÆÔ!.üeÄ´ Žçl:ÅÄ}§¹C-&KdÉ·Z*™o’ÕH[¨Gi9»kè*x ëŠmŠk(¯¿ w<28-Opîϼ­Š]N˜ûìw##x[ð‚,ÆþÑM(9'¹IÏÚÕÈIÖ[Q@™™ÒX<Ó Œ&¶¼f|ÏAØƒåˆ§Ê ïÁkmh'2Uúä9yÌ£é °ÒÕnQCOw°NÄ®óâ3íû=|ã^Ìt³-ôä¤ÛP•I¿ógÇ«tÎø$îW´\|iöÞeéáI3‚À…¬| `Gü aÍê`GY±œï— NФ.ßÿ^t§ò»“fîÈAv¯‚¥¬ ‡´9GîÙû½ÈDq dÚAÑL˜Q?:ï/Š›JP=Šâfg~ñ]0•£1Ô«‹~³ä:Oº2|}dTeÛübÚâ…ÉÒçúf …O×ÍLbN™4~X†#Sñ/V5«T–y²ÕªXñc¬¢q~YµêÖ¨ÙhÓÅ·£šºw¶£‹9¨yëŒ%ª˜vãŠñ‘  Ûïfè­cR¬åÖtÑVƒÔ÷(ùô?)µÎÁF›t¸í=Ä8NŽÓ›°æNó¯/Jdð1ò“ô)áo\l|/ÚOy·³…½Ž&$Ú#8IÖÊF¨„«’zò× eeþ* 7jX¿´pgòâC-œKŽsY¡¾(v2*.Þ²èB->žgqä ”vÙʲ͔ƫˆNBƒ ÿ_˜fú*fóxWõg)ÂK¦Õ©ŠôþjñåÐÇêgmŸúÌï ×lÒõ3ÌV/¹y¿60#y½ÃÜßgtWõ£þPm]¿ê¼%I¶W>]êÉ>¡h¬Æyj<ö½nÐø¢Ú^¶«TýÆ Õ.­iiÉé£Ìb#œ#S$"Ú¨©kû{l•™ ï 5»cj1#’Æøþˆ~ä’H3ÅzÉïÎÛð'’¤[‹Q.Ñ^¡=­a‡ÆxR3,Ò•ÁÈ¢Nïû 'ߪÇ}í/xŽº´u¢ëèúÂ"´ŒÒøý½xßwÛûUï;"FEvZÅ­mx ±YãÓ°·9ºCŒ«…çè;dkU÷CÌ ELþa²Ûà6Ö[Þ`t]´ÓKõ‘ó“Ye~‹_ßï®Ð>°ê–z< ­ªFÖåÊç‘qXêøÚšÌô–²æñÇ»c?uÍ~ ÜdöùŒ5‚9·£—n£W¿ô¥î¼¯îÅ~ˆàÒ“Ïï>•¥F‹Tn], ÄÛ%ŽMßbÆMK¢Q?OÁñ¥NÚéè7;÷@aŠçž—kENá ¾å³„Õ)94DÏÖ¿“óx™ã¬Øæƒ¤ØKLbI³w+§Ê¨z È,†pᬊOȤ×bÙ—~‰Z,½yÏGzÖ1°Z†0½5‰8] )5szðlŸ¶kžÉßFîæ‘yâ«5í2^ö#ªü(aÌ>\Fè˜s˜ØöÜ÷tÓa’Éå8ÁÃ¥uÙék“÷ØÙeÒhÅjšés>SARºo}ãÔvâm(|ÄËDØ£ëžFßÞïâgqfì²µ´|TDÚÓ!\(³ i¢´,¯AC.ŸKC¥›ê€s©%‘Xî°(š'fJgO“ ôGðµÍ7»ëÕåÀ ÂcCéŠsæ|ÔX}½È‡2ÎÅ#Ùƒê "ŽÇ9—óϸ̳Õá±àâÕx¾ç)¦I9å~ï¸t”ú·Ä4júÏÅ=øÖ†p” j¿#$™Øµ+ˆݼXgô·€Â"ß >šV¿§wç°ÙÚÑv…Ê܈æÏ74ÇUˆ=~aïÇHjÍ–èV¢~zû1¥­øÝXuF¦+ÊÙ8åó³A+¤Vƒ \-Š/€Ö0ý·‘ ú§s §ÙëîFË cBfZ<ùr<8ºìîû0¹¨rÛ9Á̯•rfñ6ø>o/ì×¹Ôºý®"k“NÑ‚r[ËÏ~ïmYo/‰Zxý–öQµÊRr–V3Mß»¨wÓ>¯2òõ9QŒoh¸@¡3$y&nÃítRUù6Z*…ͧö„wŠg´§­×?Ù SÜ纭–\¨DkÍíÌ¡;%¨FÚæ-é×®<Ç‚×7Ÿ$Âi¹rbÉ”™Î©ïÓñ+ɺ È‘âŸRü€?J[ØïebÈ™‚Xh­¿ÑÊ¯ä¢ vŽ0‰ÏUힺFWeG• ¶5s—õêNê?c¾WD;³i]ð%ÖŲ JçËÚ?©ÜµÈž‘»ºysŒvøv&ÙO‡J» ¾Œ»„‡²4txѼdöpûQãѸ¹Û÷ÕjHŸåä™*œvÐ |nwô‚ÀQSògkƯ]‡n‚ŽfgWŽ'gÖ22ªz×ÉR#¾qŒLè¼4~«ˆ8rš*A#áJÚ³ƒ4âÀÅAÀ)¤/A6ÏåºSxŸ©P@š P­°Ý1<;1; é–‹¦oàØ,-Éîekûæ’^°ß½’d¬ÕÈ.Ã33µ ©¥m•öóÅŠ$ì]LMZ\ÌX—ôÿT{Y<_¬ÅÀq=2BÑÈ)qgs3çØ5nîpo-Šáÿ(£©cÃC©Cžó¶‘ÿpŽ´¶—4[-Ÿ~¸ŒEíx—8úœÌpCB7]WÞ)#íëÝô#“–O²‰üy„õÒîåÜåX·{ýT¶ùUß²áâ¤>©5¼WÍMÇ@sï¿eZ*ÆOºúÕ•äÛ4­h¶…ïÆ/ÂïŒÎ‡rwÝL´9|Šæä³Ú¹5¢žš9C3gì—ëNî¨.ŸäåkÜ„ò!Õoò©=¦â4S2…–óRh(Ê¢´Ä :צ[NѱnƇVmd–ŽÚ\28eg†ØÅGˆ¨‚¾SŸÉ ÀûÞ™¬¦ˆí’r{^V`-}¬9ô1ÒÁÏi€7ÜZÎðªpµ7Ô&^`‹HïµO¢gN›>_»I÷HÆè+²)Æ€bí{GãJ<µ´ Ì*Ì™‚jÁK»\ËMDNttV¥w¾Éø\ƒÙ÷ºí»[zÉÆ4¿rŵqûal] öæHr‘nöÇuôþeta¼G= Ùœߺ0’]^Qö[ð £ç¬gg¸(ûêÐÂFeL÷*­Æ‰9ÓÔqX“¸â–ƒ»8{íEzs±ÃÐSØFhª,yIz_£§ÓÄ%MC¾#Z3L˜d rñ›_˜ÔUG”VfgMDè°ª'ÓSmõ+B“…äl,‚þc® svZò¨T=[1¼œCM,A½ã–ñ~,¶Ø?eòeóȾg¯ÕQ¤> ZRd(Üx€ã^;ñë‚$؆¡ÙäQÎ~¡ {!bª…ê;©a……˜©_ér©V?Œ(ÿÃÏ<óŸ¾/9¹&'ÓØÙ¸O^zòÏšT :}-°â®ÝËÌ{#óŦÐ#L#~¦"G,´Pes®š‹îN_u^Ó?Åÿî²ÀkîûÇ7èÛ˜=‰å»o{æ†ôL@‘×z…†¤À·Ïc#oç“OD†Ð^šÛ!?ÓΤcc!*ÛæM/dJ‡1®Žãî<é'=tž"ø=x‰]Ö b‰Ï²Lu."æáÈÃuu8e(‡,éäÊã¥2^Þ/bKí›tñAc‹LÓš¯ê.K]àoÇQÒ ú~)•ü&«ö^Ò<$ä£î¾WQ9­A@滃8<`¢³@¬wžF¾†¡ûÍÊGà€Æk‘<r æ¸p÷´%7r3؇Ť̢ „‘ ƒ£Š¸8kn”²ìI6ÇÚâf!¶Ÿûô6À"¾Ðèe•G½(¡QOLçï„ÏO«./…i;ò%š`[ ü¡&~ ­—²ƒ±ÌÖÏ,Ÿx§ï¥<]Cµ~Ã×ÒÒûÌçpA 8kANŒß:+_¿/‚l™ ùÄF.¾=Þ¯„«ýŽ Íð’ÿÕ>šA+û> stream xÚ·4œ]6,z'ˆŒÞ½5!zï £Ì`FoÑ»¢F%jô :!„½—è½×È'yÊ›÷ýÿµ¾oÝkÍ}_»\çì}®}Ö&: m.k˜%XEpñrÅrªÚÚ¼@ÈÏ òa31é@ŽàìØLz`W8û#BÎ BÜÛäAˆû@U ìæàåð ‰ñ ‹> PôŸ@˜«@䱨r”aP0›Iæìå ±µCܯóÏ'€ÕŠ À+**Ìù; ãv…X UÂìt¿¢È  ³‚€^ÿEÁ*a‡@8‹ñðxxxpƒœàÜ0W[)6N€aÐÃÁ®î`kÀ¯’j 'ðߥqc3tì ð¿Ú0„È ¸78B¬ÀPø}ŠÔì ¸_ ­¤PwCÿ Vù+€ðws¼Ü¼ÿÒýý‹ý ²²‚99ƒ ^¨-Àâ¨+ªp#<œÔúW ȻϹƒ Ž Ëû€ß[e4 û ÿ®nå qFÀ¹áÇ_5òü¢¹o³ÔZæä†"àØ¿ö'q[Ý÷Ý‹çïÃu€Â< >ÿ ÔÚæWÖnÎ<ºPˆ‹XIþï˜{öl¶`@Šù`ØÓÊŽç×:^ÎàßNÞ_æûü|œaΛû2À~ðý Ûr®n`?Ÿ?ÿ°yyÖ+Àl bÿ‡ýÞ ¶ù ߟ¿+Ä` ¼—/øëù÷Ëô^aÖ0¨£×Â1žª¦‘º2Çß%ÿ딕…y|¸„x\|‚@€¨¨(@XPà÷ß4ÿ6àŸâ[5@¿7÷¡Ôý«†ûæýS‡ûßÂ`ý{jØÿ½‚ì^Î`ëÔoZÝÿðþ?ÏÀï”ÿ?éÿbù¿ªÿw¤èæèøÛÏúWÀÿÇr‚8zýq/g7Äýh¨Âîú¿¡úà¿æYl qsú_¯t?"2P[Ç +B<ÁÖ„•Ý_*úçîé!P° ùuã¸xÀÿñÝ•Ãý­¿?­ß.ðýLý÷’ P+˜õ¯áã€\]A^ØÀ{…ñ |xï§Ôìù[Ün( qŸ¸/Ï`sÅþu¦"|­_¦ßè^2£îâúYjvjf¦¸£D¢`|°2@¡ÜÑ«OÚ§UiŒÁ¤ƒ)²yHZrß;šQ‹{§›âª“Š tMѰ´j[ùFÅŒ]ôò- )!çmæ6ÂPÙ×é+ðIo|¾¡ãô+\&,å.¤ø.2{úÛo«ÿ¼¶I‰.W,÷Å©=Ÿ†±0$(å¬"xú¡œþ†*ó¦¨þ'…È`9aÀV}|ÆÁ[Ípœzdà‰þ®A $paƒñ¸÷<¬_(•ºú5îc2ùÇ›m"ûÛ%¹ž¢c ¹§Ÿl7_ g1jÞ¦«úKï(Á3ÊD³7×Ïú_ÄðEZz’VÕõïä?1_}’êeJº4mºp‚dæÄ±|0×¢U1GŸXúj 蹸6¦çhkgÛ*®ªf:_0Gˆ4ûb…Ï ¨³|ÉW„?•J9T7^YǶOu'ʸ’ñÝv;7²!0Ïrš upu¤eÅÕbk]‘·èÙ!`E´¥÷b,ÍÏy_&‰É‚#°,ÎëA`€Ù¸á¸c“ô±ÙjN…®_TeOu)ØœªÓjÜêl—rHm"§ò©Ï^}úg7Ûú;/ × ŽÌ—Üy® üõ*‰ïS¶&ì‡CeR9®œõ¦Øj:,>j‡JùÊ[í’nï¸ã}AŽZåâhõX™žÙt«yÔcmLç·¨ U=ºJLÜwmG*¬Cj~×a¯\\»é°÷Žý­u ˜€¶ƒc|4Ë/@«°ý‹ tû3ˆÊýó¬"ó–Þœ¡µ}A¯·‡ôYKþ6Ðï 3`î” A–<‡ª“xÇ”.žâ̧)£ÿ<ÄEø\ˆ¤Ö>Û†bFZþ {•÷ËNpý©Sú~ˆ¦xbEXêUнÒι©Myçà ³âd1Í¢1ª4æ=B©S5íª82䨚Q“¬§†z©œ§ù9" `FêŽÀ9l•¡“‘ù>(oÞ†‹Ø»"$©Ö¨ŸøÂûÝW›€qÏ)_oÉ>·¬£ÐÏRÕÓ^ã²ñv+@Ì©‚å: ƒÉå,pÕä¦ã•! ™ÙËjrD“ô‹ŸÌêóáþB½™è$ˆ¯”xs˜ú !‰_lcôüªyoöÁ·P˜b×Ô y“rA@_‡ØVQ¸! ÚÂÁíØÒϲ0›‹3Níâ¦:”æö;ѾÓ×0#ŠŽùçÚ ‰o#ëœ q)ƒyÎEDÔÕ_‹IÖ±ï˜èFà§é5Fó¸‡xãÕçl{›’쓱%­ _‰nöºj*“ Wð芤f¶d´nK¿ }r~ºPºˆä Ü¿mEF8êðZûÑjÞkÒ¡!Òw52IæE$Üt.IïÄø4n±Úmß\·R±`[€›*G³<ö ]&íå ¥_šÕ­C(»£ d’ØÑæáYlV¢Šf“²Åsž»Ð$¦žŠÚîÿ¬À”’îþ–4„0³={/Ìç™æŠ'½ å“dmØ2ÏÇ2õàV®Ï9…c%?¡·³\ÍQÖCl>&J˜ ÏOd é8´ä;–ýD³5©ioë¡æ³í¢R¡ä©YÖm•£¥µ²Ê铜? ü–‘eøI.— {×$—g™/&v1¥^´è†´^l‹ñ0€ÆŽ"vÖ'DXN$>®IQmŸGžU*“ùò‘†;"o¡íÞBl¥hsVðÅ,27üij¤NI ]ں传9Ö §XxgÕô¨ŸNŸø›ž^„}9!ós,XÑI n¯¢«S:0‰S8ßqÁ^ûü ƒj8G'ˆœ(ºXAó¤ëŒæ(ã¬dBÇÙÞrêM¦W3$§Û e†™Íq'Fûot^ÄÉà„?J°›âhý09Ôê®B¤9-9¾;¹XÈ…2”5Q½ËE¦4bË¥&î~4&-QÎ=sµIäv«E¬v3Æ{{ªž’ðPÍ«òó±@¹¾±Pg8 1¤u÷pû%üéñϤÐW o¹öÇÉê}G9Y¸J½=¡ÒÓ|q"â#ü¸tÈEo—k0ËìâÒ=0×u˜:~7—Q$nŸÜØ+^®­ñDo§7 OÉØ‰]ki38mÑÚ„æÁÊ^§´A,ÚÁFlD<œÊHÞð^í7™ª­ÆžêÏûSÑxí "Iö®ÕK®°R¶DsµÍO}Kê,ö ñm6jo¶ÑÓ MòVýø+Þöuét$TxO[XÏQ¸Uû •¹Vê§|3ãåagýJÈö¤í1±œR‘:YÓôê&¼â¨4U6R(îÖk…î…QvÅñ"¡;t”ûãì]³ÈÕ$– z{Öœ…œ9{(Î[ß g‡ÆÚöÛ xc3Ï}[W)=Îa8zxÓý€Sè9a³m¼ô7µA±¸L¢†BYð‚â7lf¯Äs7ƒxÁf +–Gä[o  ‘C Í>åfŽ)¶ ø¨ÏܱéC mH×*e¦É†!»'ý[ß7ïb›çAÑ> fÄÕìV3•N ýTû…¨¿%ñ¦VºSG‰ßt7e\0t½ŒÓo1¨ ?~T’­ô3wBŠu×ò‚Œ¹;­Ö¼lÃo²N\XY;O<äì.8ó–ìÇœ¥»‹•ÈÔM¦šæÛgq›v%-¯j‚Ào‚C38·ÊÆÍøµ½¾s¸û»“;¶ŠŽqºÞô­j}”/€‹M|X5À÷(àƒM¸á–‹ýB¹Ÿ8¶Ee¬0‰¯/l ªTžyÌ€&,ùéƒê£A?¿GUåjÉBGy~öÁw¨­c³ÍKänºË€ ’ŠsêzD!N-gkß™Á믚¯ó”f2-ÞØ×“‘hd×x?<) ˜¯B&i,Û¼|q»¹¯Y<§eœË–ÐæHþÞvÖéˆSùª<,Ue&W_ñlîÚÝ/f9ëoå@y™5ñGð^¿ŒÂƒÎæ+õwX•ô ô—véb™£fÂj§ˆùåǸÑWAtðG†§ä¸½%_|•Šñë"ìä>> ©Ó9ÅAÈgëHÿ˜V ³0µkZDo_Ã@­ÕJ'(ðÛ{â‰v6À×òÉ&kÏp)ø‰yö­³I×㢭~Z…y&Òw—ña½½™ ò±ª¡¦ŸiÕÏ‘>ôô‹$ Çgø’B‚mŸ&ºÊUºv$ŠRžÌw|ñ­Ïƒ_óá» ¼’ËÂÌ8ù#íÃ<ÊÁ¢ì®tK[+ò‚îç£í>„ÊàÇT%_n¦Û^„×~ &ÚÝ^ñ€ ^ZÆ öxšé ]UÙÏ^Mò6£@»–):*E±¿zcòþN"€K䮹X$´Að?{Xd§MçÃÂñwxÑk¤¢îŸ™Ç¶®úŸ¶ÜÔM¯(îÔdö§hĪd·šâ³Éc·—å&+š7Ðð'.GxV²,Ìè‰qh„L˜ï—yº§HSÆH¦ ÀR:kL„ß ïšiÙ„ýpò.=µ(w¾.ƒê$\¶1ŽÑCÔmè5I•¤´&LÊÅ¡íçFƒ}:yý ¯m.ëãéIÑ\¤%´G ¾ãÇ\^Ž=ª7Cœ«HL|¦Gsq>ô-­!¡yWó1Ýøk½˜Œ´RÌ4IyôS’ªeª/bCUÀþG#ÛTg–Ð)%äë9€.ÓbEÛ´ZNïõ§¤>…õÌ`~=ˆ%ñW4°2O’€6ºÿ6YöˆÏ>¸&KÉLÂæ³I¢º3„ þžƒœÒ½w y&ÚdP¤§ÙU€øES@/‘¥Û spöûèhÍom'ûS$'äX‚Ûv›P膔EŠ •¾2Zôq£’ÕŽÒ?Œ™ ˆ4Ɵ榓J8–sÌ|ž,kÒ"(Î(³,Û¡…ùÖ¿QJŸH/ÜÜ#ç5N¨€Ë«˜Ò%Þñoë\¡ž=1ÖYj²£>cåÜó Ë‚DW(;V|#B N¿xI(§GI÷Š2i »þ_ñ¸Rð”N¼Ž¡×}¡&àå­-‰Øcu8œm÷ ã@Ý|^¹Ø’‡¸‚¿ylQ×g° ¿bít¤‚¡ ü±Ÿ_íò¶ë~ÌŸQšâL¾}8huÉmYxå½çáLÔŒÚ¾ÙÆY@:–;p=”H6M]Ç=ÔðÛÄV ßÏA±|8ÏêËN:rfÇwê‰ñ÷äV îʹ0UºÉôДaÿŽ©l¹Þ„Á–4œ¬‰4üæÍÂeJ³è¨tb>A«´0“aÆ5ýêû·u¶‹¾?m.Û·OB‚Nݵ$ʵÇQ¨L„©@Rkj£¹ÎŠ2Å{ʸéÞç¬ñ¥'œFH=—丶ô+©{EîEfQN&>Gå6ÍÑ%¢¤].hìRjvK~ø^|h² Õ*ܬ;¥ÓÆäðz².(¨äÔÈÑ܇•\¿ê(’«?ˆ+½ÜøØÈp-µ_AJV~ÜTºG4#ˆoAŶ&Å<ŽˆoÙ1Œµ_„B/vOŠ6Z%7ÖIzß ˜ZªyûCª?!ìMЮµ¤¼O´N\î!!ijP_ª6^¦¢ˆ§)ÞÜËê2âs÷ãg0Žyö6/I´ÛÅiÍ ~ò¦Ásv~1‚€ëR®Wˆî Úô$dñYªW\Buûq€C¢Ñ™Ö]Fw¶Gpš.QCLÒíŽé”ýôžiD‰ÆÉôE%ÏV6Šç;ëi}Î $m'ph䑇’—3r-\°W‚²(‘!¦ÍÎ5œEs‰R¯ò9Å©†ê¦¤¦ m 5&W切{Ý•ô÷P\AÊ%]}[ñƒ¶¨áãÎYãîÎñf©”²7¶™Jœ¯cxØõù&Áw´âöFH‹ãkrß™<%ΕĦHÜï0U““êbí=åO:µ.m^€3•ÝÔ[­ñv »wŽPWŽíŽËÙ+8ßÿÌ?íŒÀDjFcIŠúg·VœqåÞ=íHÚLÀ8`B¦¡„± ÊÖ=hÌ››(4ÒÖâxéÆÈ¢Úù— Ì˜Ò҆Ò0©s¼QûûMŒiw°†ÀÀ¬q¬ìGL´öÕ1Q8ŒÁ¬:ïE±¢P#§¤ÌTCœ±®’'V?o@ßéÖÉ &s²ád¯ã‡•Ë…w~$Œö ºâz ¸]h•%à8Ökå–™ÙŸsÛVî%’¸îm=O%ÕöL¡t ¾¦´ö×*a6ó[œ‰\œiå$ W˜/çò%q?ÍÏ•ÒI¼ö/EY]Þ< ñ¸ôßz抣œ„zݽôH}RŒo5Ëø«¿À¨ËÓUÒÞo–”T,$röj .Äv¢Ý ìéõlNµ¬‘pNººWø³•3etòŠØºŠûIÙ›¹·ëëS7x6fåÁ.•´<;±Ü…^RÁ„®‘Q·¼ú=F·[LS(èã>È´Ê—%zF­a°‚äIí?Ù©/'ûÓRÆE fVe"™~žnÖ¨1ç5Óו G?`9ÁZçÒd¿™]Zœ*áϾn’’w-æMX'rRWe8A¾Ša½‘ïáÚäýJl£ÙÝ©Ñ>ßÇxû“fü‹Š²øslCÒt¾LúI¡‡ã• ë¡6Ù|“ï_¿ëB/ËÑEfX¼ž5D4ø¬ÊÛÖàÖîBvI0‹e9¹QËC2ÙCã!æe ³a*Z£Ë¨"‹ µŠÄ}™ Ø2¹<‘éAÛ•Ø;—Du&½±k!ñ (yÝõ‡¨‡§/8[ÈOo‘ÛŠ~ÒÊòWÁÉ /2º^ž£¸5‚‡Ÿ*-ÄÏgݪèqy5Mj|åg4GûáÎ~$3×yrð®’)ŽlrŒÖ~ÞÅÐßÄTžOýò5±ÛP Só¦Õ€Áó›¸ ·µ‡ã˜ÝC…"xÇ Uï£JÃÔÌú¾˜(ÒV†ôùϪ!eb êÅ@µ:¥1ÜÅczYY'%‰ÓÆC#ÔåŽÚë/5ºŠþSgùT½qr6/ XÌ9Ñ0þxä¥ü ?LdgS,º/úèòóè5VÕš‘Å8 s™Í= äBU®Öþ¨Ð¢EQA·è¢®ƒ†dܵëºÊ¯°Ø¾Šuuýöˆ)íåç»BíbÕmÖÅ8·p#w~qmWÖÓþð)IæVFÆ´NMë7.7oZð)«§rö¿ÃšªŠØ•™5§˜ÈuÌ#¾ôÓhÑ?["3Ä5©˜Ð.ú1c›wd±-ç·ËÅPãÈk;XŒžåÀ_5-†%Â|Íüø2?OwOEä`~‡íFA0'BKCv7mýÛéý?lÓt#êÄi[GOï.™˜êiËÝeʺ’m…ÓÌ!€\Ÿ/@̺²ÚMœø ÿ‚}x‘E#Á;z¶º§Ò\µçÇôû„ ôÉí²#Œm²Þ·¦®6œRr<¾t[Oé2J8½°äƒqå\â¤&¿’¯°f„¤¦¾oÿÑ X(¹$g>ŸDvt{‘dVDò’lœå͈6±´ú–ɬV=<†Ô‹¬•wMÜ@´x½ ª‘µ”H3Åg@iwWoÛO²ì(J ™ù©Qáµ? É9À°(ÚêXi¦[mÜ(ë ;‰ûAo-j°wz(¦ËÿC•IâêR65œ«meµ÷çK˜QH»Ž©‰¥«ÜÚåòòˆ'?ÓŽÔ¹ô†‹LæùãŸQT?ú”KáÅùÁмÔ¤Sd]Ï=}Ñ0m×%ImµCÞ ¤™§>á x™ëCbg’QÚéŸûÝc<¯ÖîâëÃr¿vÿÎÁ²›óÇ;‡ÍÚw¦•Â:Ʀ6¯Í”˜ñŸÎ }#ÜŠpph8‰Zf´d A´ªÌ8xlt#”`A’S.(¶#Gª½* Ãry=H¶­OÃH¶LLD¦Ëˆ‘0$Ï0k‰j8"Kcé¾O¶Ñ€ÏŒ³)Ò »X;nCMÍ^óQºðêøãÆ£Syy‰;UU÷}lGH¸ É04éN¼D=SýTÿô%g>S–/¬vª[þãÝ„aA ¨Ýèn0<,ö©‰ù‹GU&¾ÞÍucFŽŸªº)\ð›—³Lee‰¶ãIó†#"¥Ú´§FC ’·³„~^sЏ}Š.ÔØv÷ Ê‹6“ Sã¥É99’ !$jyí£*Œ9c攜’ñÉa¸û”wëz€a0¬ð³y{§õ ¾®f£ØHÃÝK—Kå`†Øð%OváAßɱ VÝ1¡ý ÝÇôÖZó)£¾LçA"»i×vןÔ%»|LìÐg¾ž¯K%3¥Ä±ÙUWÝ·½%WË~_~²¸ãòÞ»žÈ=ßEÚíIqT:š¶-îí2Û\i‘ä› SD¡ô𨸓V%ûíÅá­cŽ‹fêK:î^ô0ü‘g#dõŸîL=?ÖãrZH€¡ë Sò¤òô•˜{¦óã52)ø§}­»K%wÁxUcÉdJ!®¹Ý2¸¢õ‘8[‰ü}h¿…»O=ýª<…_­™“æ‡WgÚKüXBç/d×Ä-&5ƒ^r›Uï]Ì‚Öü>ËðÌé×U‹{¤O·¾s>3G[{ÊõªsÉâ}KqœƒàÓBñ׺hGbŠü1w2_¶ {§K3£åØÊ ÕŽ™Ú æû§íZë±iìÖ9O ¥bžÒe|¡nqB ²YsÒÏiVnˆ¶yu\wcÆ5Ÿ[–1í7,t%ßÒ嬫ҟÜ利¢ÄëauBÇp>ÄÒÅ'pPÒpUrƒLËÇŸ ¦¼¨¼ã¡D ) ¶°²‘z§Bø¨H”5+RbHÊ¡Û|{Oã%†×i¾œëÕRJ´W’ˆú¤=+•1ŠÂœ/,S«°vòWn²}M’ˆíÆÐö«‚šD®ñÌ*åhäu<ȱa¯œÆÊú”Lémí•÷‹GZFi@+òì yÌÀ=ÚM‡ùžË‹FÙ ÉÔašý]…Ø·­EqQ9º×Ô¥U+”ü5_µÇvÕ»xã5tø}{Øä)}¤cgáœåEaÌ3ÑÛÒ®ô«B]­[BÉÞßžM[[tMUùTÛ-s“1§œ:˜bÔx£¢¿êevdZÅüT)’ÊwìÇÑSK«MÌžÐR]Í…¶9¼HÐFà&&zÿªÖSÿyGµœ§>øœ ™º …Q‡˜,o"ƒÌ:ÅAK‚âÝ{5ec¤¯ê8³Òù¡è+Ž(Á©˜´gŽu4?I h&É……Ɔ™O,õH_29%&sîÔ±ŠØíHíµøbª‚¯æŽeîè^]b¯¬0LÏä݆XfDhZ–ó(Ô%Uº Ÿ˜*Y?`4ðnL^j98Z‡Ž‚Äçßéq‘§þŽL·°›¦—Ÿl€iÅü ¿=e½Oû5AÓ´8u\=/;øYÔ¢áUÙt†¸°SÊ×òôjŠ¶É '2÷ÃU».Io1ÏÑkbz¿ý´õROѧ“ãÞ¸µ$’Ì~mûdÆîóÞqF.þï‰ì$µÃÄ¿®7dämO‘—aí]@ß@ƒ8=™¾]!G,ûuc½Õ¤ªK;Tp§›Ï÷’öÍ1{ÍÔÞá‚Û”—p”¢5ŒŠe~íÎ^$ÚF™§ö>ÝIóª¤éEÛü*ù]Ô¢„{E£‘V£në䳨QhCïúÜ<ý|±Ww…¾2;}uÆ•j@D¬ð'ìðØpw¾T#vvÎ2¼æDR¶ª¾,-)=*ßxƒ´²ÔE¶òà1SEüO®iø’©u·Ê²jóÕ3ÂQÆŸ¿Ô&R·­vwûpòq"vžK‡®³õôL«sl>òûºODA—…£éS¬ÛU¼®ý­Þ×øŠ®Ñäê›8Ö3["„ë}UþÎ-àPq ÂÅüŸ§Œ9qÁ‰2ãõ<ÁIîö¸ „‘æåÐ3r á ÙÃÓe¿êˆ$^dToÕ]äa¥„„2 Q„Ç¥¾Ž|õòôKztò»çn7%¯5/o¢Œ»Î¹>‰›–@çÅ“¼é­y¢/¢…*zºçè+[3&žZuˆÙùâÔRbs9“1Hš§dC) ˜RVSíñTl¸ŒD^`±N&AøÌ/Ü¿Ö{J(ª`Ìu”5¤ˆÒ—c† µ-¤«ÍSeÖÄñ®V9^ËhQ¥ô…¹é‰r ñ§ìð¶œFg… ½°—tŒ™ʤ¾r¶Â_ì]·Ù‡k5[Jtñyžæâ7oV¨t^[Þˆ§róNy®ê kÏð$Ññàéò_ oå·FªÅòÙgtLs\oZ•ÒBQl¹»þQÖ€ endstream endobj 196 0 obj << /Length1 1622 /Length2 10106 /Length3 0 /Length 11156 /Filter /FlateDecode >> stream xÚ·P›ë.Œw÷\‹»S\‹»$\‹K⥅âÅ­¸‡Bq-´Xq‡—-çœ}ÎÿÏÜ;™I¾gùZï³ÞùÂD§¥ûBÖj R„Bà/x¹xÄrz*¼<~.>L&&=0Üô/9&“ȆBÄþa!çŸdò@ø“¡Põpðòx…Äx…Åxx|<<¢ÿ2„º‹äž`[€@ Á0™ä ®>î`{øSž=Xmؼ¢¢Âœºd]@î`  „;€\ž2ÚºP0îó_!X%àpW1nn///.  Œ ên/ÅÆ ðÃ: ÈÝd ø£e€&Ðôwk\˜L=0ì/….ÔîtžÎ`öäâ±¹ž²tUÔ¯\A¿ŒÕÿ2àü=/ï¿ÃýíýG 0äOg  ÔÅñCìv`gà•¢:ÜÎ Blÿ0:àOþ@O Øhýdðgé@€¢¬6øÔáßýÁlÜÁ®p ìüGÜ„y³ÄVêâ‚Àa˜Ô'vÙ<Í݇ûïÃu‚@½ ~ÿBv`ˆ­ÝmØz¸rëCÀn ù¿mžD˜ÿ‘ÙƒàA>È ò¶qàþ#ž+èO%ïâ§ü\¡®»§6@`;ÐÓ¦ è ÀÝ=@~ÿTü7Âä娂màk=‚ùŸèObÝ_øéüÝÁÞSž'úñxþøüûÉü‰a¶Pˆ³ÏÌÿñ`ýýÍxylž¾xÿŸ—àO—ÿ?îÿåÿJÿÿ­HÑÃÙùO=ë_ÿ=Ðììó·ÅŸ=àO»¡}ÚÈÿš‚þZh -ØÃåµ*pàÓŽÈBìŸxþ‚W€‹Gà/9¦öÙjá6qé_‡ñ”à iAaà?î'/žÿÑ=­žÓÓÝ{:²?U §Íúï¼ ¨í+È'(º»}0Ÿð„~¼O»j òþ“ân.þäxê1`uÇüã`…ÜjˆþD¢Ânà¿ÑõpÛþò¸Aÿ€ünûÀ§Hà@·óà]¹!ÿ€O¡ ÿ€n÷À§P°@!7üð©HÀ§Džÿ€¢n¯ÿ@¾§D>Âÿ›‡»ûÓÍò'¿Ÿfú/üç5yƒl0f¡6âa޵am×Õ²T^/~Œó à œÆœ£n)Pxnk‡ÈIÜœñçÇÎËvÍüŒ½Y'Üç+ylr2"åq²Xóψ#]¨oC±³ÞäôŸ$”¼Ý‡©{ðýTëì4±â‡ØÚ“5ë|ñ:—™f#ãt;ùñ-sWI‚¹ùÓU¥ÃKã/.l¤ñ¸X4r~l¤°vÙÌöO/kd§g:Ta§2ãÉ4Š»7ý#|‚ßË8ÁT{{8®jç™{Rïvz„(Õ¬&ÓL[= äwoYCÎÛÂ^³ZÃFu¥ijT¶&O•O·âTt웕בûÓ‘åÖßÒ¯cÈf{[³|·gï”/ù³ªWèË/ÈRÖS^®D$©ˆÕ7¡8õ+¬–+›@Í_½fh*ÉB–š5QÈ9ò¨QK÷ÌoŽwÊc$6Ô=Ìù²f3H'ácšãœ³åJȼF¿ ­O‹‰/æäîù>CˆAµ¿ÐÄᨒ(8—$}ôŽ»…»å a÷>BÍ!Å`¯ímt–÷l Ïp$ÖR)ªo³'úc ÛSÞˆ¬{›ö¢¤˜<Ï~»12~Úº!ãGÁœZ:i<}‘e­‚ê¿”#˜ÛMß·lRDš?†ÕI E‘ûþ®ù~üæœul˜þN£_3j—ƒU0‘ëgaÃ.S‘êU7"Ôx´&£ªÛY[ÖWçyÁ˜Rw®£g<©}õ3ï=m¶Á‚v¢ô>ÂÊ:Âiy¿P™GbÉȸUa­G`~mÂ÷ç•›ùi¢?zkÆ4$KÐ츬 O§¿”oRµâ(=ŸÆnÚ/ýµõ:w†^6ŸŠpñ6»,TÉ0Ó¬cïØ9ÖÎY:`G&ïS DÅ'&¤à1aeßýfäIÉnø·¯õìaò ÃÁèA_œ²«H+l4øUÉ/M#Ãw[y«So/õ±(U:˜¬ïŽfã=ªæ7u‡ÊOEw*pÒ|ÐÚ&1sÇ6§¬Vã5žÎÅñ/M @°¨ÆÆæäöŽœ~Œ¶7½Ä›äŵ@M‡Ê&ž#«ÅHùÊë‘ñn‡'‹lñDî“K£†œ’L „ÏØ^&¶Õ`þ£ƒØŒŸôŒ¬‚ßpý¹Rt®ã­æ•LËI¼'æ©5DãÂänLèì’sçLÉ÷Ùxè¾IùªüвLû2orâ¿Ò®Ÿ}µåF*7ÿhÖ÷:„oär°HÂì.ši-2aÈJ,è¡BºÆüuÕ6_£Àΰº ^nž~cŽÒ±ÇÏG{d}º[úÅ©aJ70øÕEé§œæ«û]‡u#˜’,}Ý&Ó6^âÀX:ý”Ãa«ÄcC¼°0á'†œTª 4½‰‰˜\8ö3u9ÄçöY3Ÿutîùó–4l¬zNÓ î_g(•V™q;LAÜÍg½ëD³Àdމ“ýŒ7Ù[}X8ƒ—¶¥“æŸKóK¤ŽÙ‹ß$ Œ@q°³§Ò¶_° Dƒk®§}¥oa(D”g?a,kË$üîãc– (}…P €ïçCÿ6K[ÖëœûdªœCÉ9›þù}>B£ X¼´n0¾;_Ób8A<Ç™ùAGÿ°'iED훵ýù¾îIsl}\2‘ÀÑñ­8bÀÒéµ@$=J°à¶8Íig‹¸ãü¦jèÇõ| 4‹.v»¬˜Í'‰ËB‚}j/ûqÆÂ^ÓÙ@ìd/Lkù–µ€ø–vÊ‘‘ëíM"‘ÜÙÔ×k[÷-‚.ã\ßþ”1yJ zZÖ»•2Ÿ¤R鲪¥[X9BL>ŒþI๠5šõõõÌo7›Â¼bƒÂwMû«ƒ}ZK#*,: ËŸ‘ïžS·#Bè\óÀ­oœÝ”Y ’¤bøn/pÓ:Ñke_M8'‡ñ•ª ’oQ±M[©FÞúh¡yØŸïäá§w»À-5šàñ t±€üvQns»ƒVT£g»Óü·Šãþó€^c–,ï)y„ö@*^57߃@—d÷ýÖÒ=n‹ôi[ƒ—Øè¦À!‚Uߺf垬-’àšIݦ%ènc+4{6Aâá²]1³ê¼lãw¥vºÔ€hÍ7÷^D›¬z`ƒ½oÙ§5(ÅÄ;F™(s¬¼ŠlíF…s­óúC‡ú>„ù±v_sE|•ùÜNߥºŸêãþôr Õ^/fö·î~âùÄÏìzæ. -æ1¨öΫýœ"7èÙy9 ‡"|¬ KÖqâø„Ðš¡Q“‹¶«`?j»'&ªHÉlGºˆBÛ{\‹$!ÃÒ¨ò¬'؉[’R]A»S.ÑÁˆ ¾¹š‚¿£0) °q¿žqŽ0òqÓ àŸÙg åÒ2±é0 [¯ˆ,8–æ„ ¡%Ѻ‘|hpCQÐ~!G‹3KSkšy”]yÚ`V"©ÃO6Drk+Eg¼4¿/Úª¥]‹:žÊmðͶnã"úJÇÃËíe$’ªC æP•“£ej• ×,Ù‹b"ö–R@/§!JuïÕé¥%^A5¾S‰!߬ó8¸S‡ƒc©¥ž}±úþ|£Çý³s_Qé#‹úiŸß5¬â¹|5Ë{ç£/毅+ÉúÍñ/^í¹W3k§Îñ˜v|˜’Õ0ÿh÷Íè§t£·ùóXpËuÆÏcˆ¾ÔíÑë¼e¦áæ{Ö©.=éDŠÐŒ1.b ¯ú3®z¯ÆQ00"|U¹²üa÷ŠA.î…•½$%Ú'»6L½äZ¥ˆ »H2ÐâP¨´"•=Ö´`F7L´,1¡—.ø|RÉØ½7„q6÷'à(ûL}««ÿš¸]$ÙAlß‘Œ‘)ÿÆ:RĉšëúÐù ªÏßÙŸ€ »´Ž»üzù½8K+Ÿ–¹ÆäjºfæÓÙ¬Oî÷|ðºX~êÆ›LÿÓ°Ÿp’YADÐæˆ|q -ˆàN!zb¬–1·°(:õº'O0Bû¹4سR*΀ƒŠøÛµ‘ƒi4pýh¢Ó}ˆM\U¼åýTÔº*_ÃÞWs.ÞôMPÞžím³’=Bv¸uÂkû®µE—=÷þYÒÚRvb8ÜHÊCY6e?d¤¤°ÿåŒâgñ£Z.øY}Ñ ç­‡NÓJkÑáæÕMR÷°Vt&5Êõ£A®Í¶ø_Ö"}zyr~1œZ$¢XϘè1;>ðŽõÍ&8·QÓ'PYòm)É^ز»Ù¨…m“"t²”f(‚½”˜ù†­ )ä%Œð.&•ǯ:‘=g¦CN±¤ŒÒ"NÉ©úg˜7èáæžúü§Cn¹-=oANë&IÖÏùn‚Ž[\”£yÜî[Ë-µøHýW€"¿ ‡£FFjµ6. 7E–ûÛ‘ø¿¨¿KJþ ‰Ã8Ë(ôü0“y‡V>´¶4&r­/hÚb9»‡Õ=Ŷ{B•tÞ¸{¼oæ‰Ã·nB‘/½' Q´ŠDží¬ä¹²ÙnÚ‚äé,‡v©\F¹Öû€u¥G}Ý@Éuº¶n§ spÌ#Žv–ªPüFA†þ[™ïäd?´­ÉÄp‚ñ¡SC[Lk¢m´Ëì°kܫ貕ûÌSƱYrüqÝR=U&¢ðªÌ«Wók3jX€â²­‘8zKâpÌ¡WìàÏ£q¦Ï@›Þœ }î¼CêkëçAj$>ð¹­–ÛÙh‡Ä‡áw[¡<£Ç„ì«ãÍA¹c"X¼â¶±Ð+,Ø ‰òR€µ%…™QÑÐÆ“»˜ ÜÔ<çC> ¶zfÑ-I(Ç|}øU‡ýCþ‡(¬ûǰ½ºZûzœ`»^i·:¯Öhø\¦ZžÉ·;øÕ3ÊR§Â=Ûwãwœ¾ïnú}c';ãPÐ~U1ñÒ¥ æ4V×EÒ»zLü¤¸œuÜyKÖ6Ýÿ®&’‘‹dŲÈjÂ7n<êXðEÄŽ©Á ü¾uâÙ¿¬»£ÿ¶V|u$owM·¾&é›Tª=‡‰¼)öû$™µÃ4¦7°D‰ æùÜ1(c8Ù©\ Ëžz“û˜¼Nuïìò­¥¹>ÂóœÆîTß=Údl½#NFƒÒ)QDZÃ%“µ†ó„G|šÇ "ÁïkMÅð°o#Ún£Ÿ2¾*9ÙŒ_núdaøë|¾AºWGÄÇÚ!0'ö”“uØaÀcÌõ•Ù—îáñŽ\àV—}‰ŽÎÕ~õ[ÖSZ:6=%g­õÒfK¢LÒÙÓzu"IdÈ¿öK¯Y»%“ßñ×’:)ff_j4’Ì‹j\Ã[ƒvÝ[°¾lÜ‘A>Ç Âtãù€$ì¶ ¥‹ß;Y I;u¼ÇÛ:?6ËBÁ격¬iwYÅ3‰p‹êPø(ØŽ@­­ŽÖš+ï›Ã;éG)yhÜàèÞ êèˆþ!&% r½Õãž]hf6zŒŸ*\É]Ò‹ç”Ñ ÷*Çz¸*¡È>¬.óýÒ6]¼N:±ç úv…޼â”d#é;x|ܺQ¶úfÅH–v)ÐGp‹‡9»N¨¼ d‘ÉÍG7|4¼Ÿþ½=îA-ÈnÝŒF.ú[óûr\=óLUÀbC;ú2æ¬ðm„äv$·ÿmƒ\¡_fð̈!i—lú/*§/C,z2ºS!aqŸÚ´Dì(Ê[¤¤ËwÎ*ÃG?ôø‚Õ¸6¶;Õ:Íp¤ÖhâÓg†bææjÔu5q{%WÙ¢èæDAþCócÉ3ö5©¨–šŸfµ‘š‰.–Å(sK²ŠQ2“—ÌôewÆ£ØJÈX’ ׯ|:ÆÜ0×ÈYô…? i¸¥5€ÚU£æækÌ÷½À.Ý;½ê#Ź—6EMS9NRIÊ*•äbµeUåÝžñ1wñ²ò1“òº]t²y%!6}øâ¬à[Q…ɯ„|z}h£Í_~ÊÕÇ¿j1¨ûFôiúçô+‚ýd¤Ä±ÌzŸºÀ€E'rÇ·b’EœÈ:1x×qù»ï—E>MÞû¶?~ë5Eæ²zßÃÜšŽÍ»¶ñ×,+6¨sþ‘ßðŒ>εeŒí^uÏ…¤uHJ+n®Ó}˜ÆÔy(D°\¿}@;l»ik« ï-´ž¾¸.!äšOâ%&Ív\+÷þº ’eÚýÕ,#`CÐ-m¤²Qí ý•ÑëÌ>3>·¯݉~.rWõ[|ÃWß³x²V>-¨LÒÛ¦ËC•ívSzVµ¸Å ¹¢ŠoËÏ= (óßÞøNraØ«Bj„?-<¡Ø^yaÙ¢sÄòÅêiY¡ÂCy OùH}`Âöe ×žõB?žºŸ}¶âØ…š@{ÈQ”ø}{'ckÞ+èÝ®jú>’gXŒ}‘F1޲g”ZvGÑݿ~î«Û„Þ[N÷¹EÑ…aÒ—£$å‚xø¸=w‚ê¬åRõš õh©ÌUÂéÔC-0K:+Fë÷ÖüÐE¶ªfäc¸ÅDGö€{±6þždGöÕÖoŽîÌ}Ç•jXŒ ºæT\…œù˜Û)[Þ[ˆkâú(ë'¡p¯0г=ÿöoF=â* .í¢›øöŠöþ˜BAã´‡í#w¾‚-gí;ÙA^‰…ßÔš!^³™*LäÔœR°•õ¨¶¯Ë{ÚþnK(Úà»bØËI™°•¯FA7R¾%Ì4³]ÊJrìbã÷^f‚ܳ8:H‚Ô^ßV¹è›­¨º‚I^ JMÚË/ n¥rPNõˆÞožkJ檯{æ$"ƒû;ºj;ü²š×-Mv¨'yI~?ºeW@óe™úiצoÒ×ܵ¢åKq }a|—tÏhÒTÕ ÷²ó²©ó sæ61%a´N`‚¡×Kºüó¤«;ˆù€‡Š —±¹²'Ñrm»¸>ýà;ÚóÐõ7šäÝË(„-ǧ"&VØWPû.$ýL²~é %@9Ô™ÆV$﫯™[ë<‡B <ÊÝ`Õ!]%œÚß««¤u:”\€™(×ËàuÊ¥}°}~ï[‡zOÚé“©¿M0$о*Á‹Ð_~!ô ´´»Ðò™C…´n ~LghGá5pØä"«9Ú¬¾q¾Ù‚|oòÍxJ}éÕIQÁ•j…v2u—"2£„Ñ`›‹Æ«çÕÏ&)p3iëHe!¦¨Sb]‰ €£§T{"ÈOˆÛóýt”¨rL‡—BGuŽ-»‹ÔÞo¦¥¬¥CjU*’^… @±WÏ¿¿R-9¾*¸¬{ØŽsOŸ™–GŽ‹yîÔòÀ'I®—ñìóV»ÈxC¥ån7¬î¥Â.Šj³{›‰5épõ+Ýñ™@7EQ›/ ×Eå66éŸg3:lÕ ¬yÒF: b߯:ô›Ì×ê„«¤Øg”ʰ(6ýÄåX@Î*6F.ÎÌùH¡¼Ù æïy .égŠgq\:J›c² Ú²0„Áþ‚]¾ CL5ñô´Ò)À')dï·õwt7$yñƒØ8Xc²3âUWóƒ1¸Ö›ü8yÜ|K Q066 ¢’åg—àËÒ´ÕØL^þù ëyÚÀ§Aê„ÄæZ{Ú©Zgîî~#dŽI;ë0¿\‡ql…ܨsÁPSçóçUr9œdm/¿! ѳk†šÌ4 ¥Û§T­²[ÕKÿ^z‹–U¨#‡%ÖúñôŒMý›‚ü"~Ïò×#J]Ýq(%ü•u4F™Ù{4=Iî…»ó»`Ø—©þ‹þ.ÚØËFx¹´\Q–"YñåûŒe.àA«Ýü¢¼u÷:õèT…RoÊG¦ƒæ)ãƒþž#5Ãû$ÞÓq«iÛ¹ÜÆNp™Ž.Ñ ÁÓ/‰^mÖ ]ä ÿ‡Œ>l„*}Ë„Q›’¾ÞJ &64åî3ñ ±½#9å ŠÆ~ùÖŠ<ª—äGÜ Ö;”y¿¾ÅŠ×äS[ƒ¤p•§÷;lú5åIäŽWg‘À´»°ä©ãͰÆTòÚ(¤‰*BY¡”5 ª4…+%W£39—›9–â­”[4dÜpKæN¬¶ÚOf›!é9YR™ä’ìʼ¨¬Í¥ü­S¿R„m+]5Ê/ÎdùmùNæ¶I¸&|£;$›‚ÚXPº¾i§]޽üÞ@⨉}aeýÝ•æñÙ€cLè ¿áÏ.²gwRç 9¸Öáv¸Cfl~V­ zv$ˆý+A—¯YŸ}D ÿ8 }Ir(]·7ø²ó«Dn!Úo§ÖÛÛ· ÄÅÏ—$`iXÆøw8ßqóæT^ó)Ë/¤xù/ê?I›¿eü‘+7Ø\á9´i@µv($2šqRyá¡(£îOBUÕ–1þNªÀz©'ë®W$="ç¨aWåõ~’ùo!ò;‚½.W¸ߒãG­Pß—iýq†+¿œù÷ÊÍë‚â¤æO“bj=üyÂuØûøƒ©3¤¢§iõ›±*ÃJµŠ¹À±Ÿ6û‡{VêøYðÞï'•¼µq ¤ÿNÌɳL5•S®\ó_Ãoì:¨)„·ú0Í•Ê"ªáêL¬*¼;àƒ´šW+T»þ•Ê(æÏ ¾dN‡Vòö®¨3ë@’å³{[s‡þ ~ñÐÆ©1Iƒé‚”µÃôÊZöjêÊâ7’øp½‚)`Øé$¥3ÃåÚËvi?_8"•å¢~¤Ïoò¾Q¾T娊é'] xPît1±ÕUŽ3}‹ž¸Îi;HD›—}É œÀœôËÖD08˜‡u, ñ1Ûiw‚ìy”¢F`[ur•¯lÔܤð‹†A‹öǺ£ï`… ¯°"mU—ð…­qa•X’oHòFjƒñzdøì®ÞXÍ¡JÉtËà“V7‹›Vé`?Gx§~e±Ie7ß=·³X¬úÉ|Cd'Ÿø‹ÆÅD¥jë4’ó‡**a•4úA*¼ºÔ!„ßí­è­$LNˆ™Ô+Qî×özÑž åÇ.B'ÔAAà}—Ö£ZñÕжÓ1±~f ó-ÝÒzöoÄé©Ä‚;Àäi™ˆbî³çŒ™„‘vÝ*’â÷h9×(éÝÍ÷œGýÏ×70婿­!7ÛZƒ>8¾b­5&ÄAZjäaÄa¨TPy%]¾w^–Lô-€–…qÜ Õûð Û°d>ðöîeô/C¿­vš%i©eË\A¥ì¡[FŒÇò% 5V½æ6’Ò­¸Ý/BËUn6Ü*Ì/†ªÍèzØú’g9ÏRÝ”êPÛMÐ ‰ì›k“ûzÏÙ~±t­ÂÖ&+Ut˜ÝôwuYœà?.nt¤eí¯2uÙ²eíé0UêƒäO½`‰óśɗIʬ5 ¥=ž;% Ëï¬hçßQJvVM¯§“$9¦ØÐV2墚àÍ¢­2$éU’G)Õh} ±ïÔ©‚©“\v‰§ýæ×h†n¶ ùÄ•9<؇ø^c;”/þZÈÖߌA=ûMƒú8×Õ¾ÆÃ4éO¡±›ºÝ’'°ßXP$É‹uÅkè q¸Ry÷EʵÏxüªÝkØÅÁq×€\°nVtûeé‘7æ' ùëvÛëj¥„á5╃•3ž|Īӆô3¯x>ÞQ§I(0¯[̯åDÇ ãc`ÕïŠZÌgS„U5ã?\òóöêI+m³Ê½ÄgüòUs„¿"éã^ÊZ›#WDêÉ»Uÿ=eºgl;…\ª±UëêvõžÔDš_¿Dùü–(ýµç—J”Ì€÷éôQ›÷†±ÿu¢X…ÆÐ~ûŠOè nèW¶ÔË bE0rÆ×ÞMTm3…ÞÂ)cÉm(òE:~®”Ϲ„Ò !Ö¯¨µà«åW~Øœ`¶¯íxEF8ÃÒ Yw)èm<”löÇg¤n2\fìÙnœ˜÷·7ð‡‰eÅuþ%ÿų†O äµ²‹[Ÿé=Ú4r:sI’ö¥wÒ^è­ŒÆ}…¾M±–/SüÚý§U]&K={¿˜SéjZHUÑù$®Ÿü•æBþ}2ùVf6ÙÐEpæ¨0%+â»héŒÒ:ÉÑèIŸwŸÔ…^'#`á¡Þvï‹ô ˜æ|=€~ïrjÐD·[”¡ºÛâ5ƒéïójŠ­Ü²Žª«¸V+Á°O}òW;_ãÎýÞR›üxÙª}[reêY{+óã4 R‡Õ/VsüÒñ вs¾¦z—…… "]½ù†Ó •ß+1Sh%ÞâGuò Ÿxh·¤É-ßáî ¥’7ê2c'Œ‡XcB>ˬʲP‚ƒŠbß3Ê…ÝZéY5UÅÞi0}cÞiJ“ýÙ!gIç¤ÓåFM('µ0Žyyèÿž† UpoÞóRæl5…ŒãV}G„moNc±×ª„š#‚kÆ]-Ú!¸ÞíýËö'!8Âòíx¡Þi®WJÎ!*=ÈÉtG<&~7OMm)(æÍŸé¢FPù’®á‡’«â=¿£Ï#7Ι¨tÌÊç^äÑ¥%ò¯w|1CaB"ñÖǯ#6…m¨L™^EÉ)UW¼”äH&}\ö‰êñv²?O*pg„aJqMЏ½±nͨäÍA,í“H¡#Ç씸¾ô(0#Œh2U}=¼¥I£þS°Öùòš|ϲV!R¯¿Ógîæf"ç2sÔɇЀ ‡8Aç=IÉjw¾.;æ»` EY©ÆÀƹ“æˆå}”Bw_Šk<½á—7»Gq°:%ÒOE÷Í^{µ€QÑO¡~¿PqÜXÐ/fDìp£vpáe+8Hà[÷ɘªàkâèŸÓQ¥.$ Â:ö ›?°Žeˆ¼È›˜¤`›HY;›×ºZ ®æÒ_óÊ ÌsFl{oEšÖ¤]Û›àêÕ2Ê\·œç‘ %(ç+¬¡ÙÄðˆmѪW0ß©1 ɤ?T'GÛ/˜Ýn®å?ÿåÚŽ½Ãi×›|­lh¼Ã;Ô¿ü¾Ã~ÇÅ[ýÄá‡Áä ÉÆ—’äo"šYà¯Q& œ‹KÔ}ã¤ív†4Ríi­÷ñ9£„›£&[ñ'ñ³· ¢¾CtÅÈätòA0¬€k;š6&gúæn;^Ï—û†«-]Ù1æSCìñgÂù;¢=«NÓšêEØ‘û¡»ñhQ鬿S5]J¼¡°ßúË]$ô‹1­ ÁÝ$ÅXŽ×ÞCaz"Ò}öÉ=a¼oM*CQH&L—ó}û¡gSωxuUJ_æUy“’ÝdŒåÙesÊ ÂÑ‘5ø#æq= V‚Ÿ9”£ÑgU0vÞ‡RÊp|$Qpvú6éV3 Ø;,I•r„9³°ÞÑšÚyŸp`™šAŠ×Œãâ%²2!«>ÒýlºÇßF˜Õe©ÓpyV¾ú2S=AÇ¥?tPãP±Ì’)Ö+>åì…{ÑA›¨²à€Øféyñ:õome‚q„Ÿšf§2$"‚$7œK´\9ÂS¨ÆÃÙœæNñ²èkPZËw}rØZFbæëÜLÒêög‡dÌt`RŽU´gRÀRïOfå—5ªF¦Ò9|JMØ©rB—ï5e›ç½û?2×ñu©v#üdPÞOQZâ¹±5%¡6VzéˆÄ£b´ât>ÈÌ)Vˆqª×<Æô$‘ƒÝï¨f“Ï.lÕç±2Ÿ¶XV¬±’rd:ÇJSRù\æÒdz7BZØïLWc¹ò“«î´¾nœ¹½¡’âÿùú{1g¦AOÕþÅ;úãáwÓlMŒl•?[G!.Ø3ÕC{}mÐ7{ô]y"€‘‚xƒ$úlB[›‘‚ï‰â}¡Ë„øÌ¬ÖöŠfÕÝ$6SÇÅù¨2ލP¼Áo:%åú~ál€ÆªˆÀåÌëFÛâ˜QjŒxäÙ§€c f¶ÊZQ;ŒúêpûÇ#ΜJ§ë³w±ÀÝ_*«AžŸ­–øxM„+æy‹H\\ZT£(ÉÍ,Dö³Y¢ÚsÕgGe–{Ÿ“ôísŽ_p Ãý¨¬¨u0ý:†K¯nóõ[Ë­Še_—6Ó뢪âvÌfiR¤~gû>k˜õ‰M‚“D‡æE@'3FŒq·AqB¢¢"9ÁÖ샲ö]mø|•£²æ9ÖÎÊ»üñ°„L:‹ØË#˜ÚÄûÀdVõ‚ñØÀSëìë[‡~Ék\ænú/þÁÕïsËõp¬®+dlY—â÷u_¦†sñ1*‘WÈê¾´ÁÕQvz43 §ž¸à”s·N&Làõu¥Œ]”h`_.ìèÔ‡L9™4öà Œýª¿Gäߤaòhd!ÝíÎu^ þÖð:s¶îT]ú[Í[g2l×­T7½¨ý³ï°Úýé)žBºŒê˲«Á™Qq-© Q×T1|é 5h‰tUzȤòf¦…íL† Þ3¡;Og ’9;b})×Eçó^ã²ÒøÁO5Ó(³·Y~ˆ¥RǺÈiêÖÜÞ8÷G ËåãoYZñ\®‘»V󛦳z„M™Zïë®ð,œE·l¬6¤¾¦Œ­ÄË~Æx¸ù™­½#™m¹FìGv—[£k{69ÑXù! ¶ß²àa`­$Œ¸qÆ@…§‚îhö.ñ:œ+•$¢—¯®ž/”³…!b"€ì#»›J¦Ú+%èJÞlDÛ‡7W%xøB¡îŽqÀð¡ÏÃïßFüx± 3XŠ[A©Ìá“5º]=œµ»ö¾=<‹mñT™›QØÙ•  _C?ZðTD@@,¸–+¾A<4:áak'ç£YùÉLrŒ¸´Š“Ï‹µ|zMº¸A–ÌÜ&‰*\˜ŸzUñ Õ€Ïi³è­Ž#уjæ-ÚüÃô3ö«Q˜Ú ²›7zÔ°¯TùBV‚¡ÿÃÒ¹¨þ1ö1‰IÚåDoŒ³E§Í Ú½›wÑ|® ç<ÒêmhÃ3¹ )Ùá¨5µ›˜‚••²„29àœlíl•ÃyÙ’KÁF¶Ø&¢>‘èÇ\·”97C•dhÀÒ$$±R±‚{2ÚÕ¦" ÖÆ&;sžd:¢q¿ŠÃþÆHÓº<ÇÏAÂFÃihûËŒ­- endstream endobj 208 0 obj << /Author(Jari Oksanen)/Title(Vegan: an introduction to ordination)/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.13)/Keywords(ordination, correspondence analysis, non-metric multidimensional scaling, CCA, RDA, NMDS, fitted environmental vector, fitted environmental surface, permutation tests) /CreationDate (D:20130319133405+02'00') /ModDate (D:20130319133405+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-2.4-1.40.13 (TeX Live 2012/Debian) kpathsea version 6.1.0) >> endobj 149 0 obj << /Type /ObjStm /N 72 /First 620 /Length 3411 /Filter /FlateDecode >> stream xÚíZ[sÛ¶~ׯÀc=Äf2ñ¥>¹Øq'MšŒ™–™È’+Jir~ýÙ]@$HIv”xÎSÛ˜ÁÅ^¾]ì$„¶,cB+&e΄òLæ†)ø—yèΘÒðkÓÖÁ¯bƹÉX.°?gV øuÌI5€Ñ.—pk˜Ïà7Ϙ÷ðû2¯àŒ ŸÀ„‘Îá/ô‚P¡…h¡ñ.·(W DN‚‘ ÒixdA‡zYɤp0‚þÄ «™ô  m°9SeZË´”ØðL;- ŒÆ]µt TÀÐY°PdçY®44ÀÜl(–{²¼ë6,³YÁlîÕÌs™t 4rÂhv; Ò@M§3´G3g@Nä : `€AΠàËgZ²\3vOšJ€V 2ó†ð|ås©põ9È“½E¡‡J`å3Ë$:%7€+8%“èhØá/L3 Âe¶e Çf¦=¶:a2ƒ¡™ux†#|Ž}àøÏ dì…[%ÈèäÁãÇþúÛmÉøïÓÑ첚Žü ¨ËÕão«éþ´®ÚÇGÕÕU9/§£²f˜6ü¦š.k0ÿ½œ-ÊIyµ€pÑür¶˜”u]ññ¼øRòb´\”|TÍGË›«Iù•/ªÉeÉoŠÑ|6åç%ÐÀb4*§ ~Yˆºªùp:[\–W|²ù¨¼¬&“¢é¼^NÇÅ|y3)– >Ϧåg>*_}[ŒÊ‹Áo¿‘…GìƒÐ&Õ+ÆßýõY› !ަËÉd+™rr˜Cœ)†àõ;iÁ»ÈC+ztdzé‚=~Ìø1£ŽFYhB@ïØö–¡  BÛÀ‰¿;ûø©NOoÀ£B«g/ç³Ñy¹gð—GÇŒ¿.¿.X£@ðîËb\ø!(èÖì‡ø«²ž-çèJL Ôu ³¯ìvo†æ«Óðºiø~AQä æ~„[4R`R4,Î娦Œ¦Îd»n²ùY“óï ª$¸Ü 3°ú!åGÑl»høŸD#Ï6¾×ÊÒÚ¡»H¬E1~¾ü¸ [ìTþ¢¸ÁgÖ=N‹Å¼B+‡™@ñðÿªu(¹S9ü»HC3úJ=½œØi|\ÍëÅáu1‡"žøI‘Þ½­.×5UYB½É¸Xn©i‘M…7býAƒ;ØÅÆÄÝÉÌ „pi Ç,Ö '(¦Ã°x0^ ¡”J=„ºhK¨Áf¥PS?Ñ©L‚`M49=5Ôou>´‘&ö‡ÐÎÃ(Cþù+ämè‰Ëèj‡oŽ<¼&ÞÔŽWò¥sCˆ¨|I =¯š8#4ñHÛ*#`Lè• yH⯉_è±¾ÙR‡«,.Y‡tºˆ1×ÑÃm,YL×Ðc!³ÚÌ!V’zsò¢ýF"…ÓÀéˆ;!ëãè—¤ñ }46rW9Ž L#¤3¸NxZ˜4¨…°&™NÌ"”I;’zÈØ+[NQ`™.u Pž $°Up'>@‰òß¿ÿçß=¨§q¼¼=Äé)EØ*Èi‡©âÐa Ú0‰¼š0¹BOò2 7¶:˜òFÄ¡w…i ‰`Õ㣥l¨…¶h»6t՘蒧¸ ”&D¨Âe`¸*¦*À×Rj1[¯N{l£O­F¨h¤³«çøêð ý+ÞCvbAb í–JÓ½N(Mën ¿ç9&š‘Jà$ +Þ[­÷8A‚0rà‰þ¦"AÔÑž,t0×aÆ[¨‹,GÇ3b,w$¶ò´ 1NR(i¢ó„a.c3\ÃÂ=b€¯¶Äf‹ŒÎ©È?Ño(N‰±·ãu¯(b[¯Ð¸†6<×õКÚ-= …6]û›Ã£²Í«ÛÅlvzakøìƒ¿ÎžýúvTÓz6)<ãšétCøH°GøêÒ¬6…û5¾µ‚tìaÛVÜ>)«ñ5ܪ 6eex#€ÉÓE1©FûÓñ¤dðð|QÞü åpÀßÅ1Úäa燻Ê_ø>?à‡üˆÿÎùøþ”ŸðSþ‚Ÿñ—ü?ç¯ùþ'/xQª*¼Qƒ]f9¯êÏü#ñÑl2›Âõæ¦à—¼ä$„—/‹ ¿âWÕ—’_Áv–ùx^0_óëo·×å”WüÿÌ'_âñ>åÓjZòŸÁõ–ßâ[|×Zsâ{ ‚g—üv²¬ùßáuàåÇIû^0´íœ×¼.¿€ ºúÊëIQ_ó_\ÏË’/þ™ñ%ÿÂÿá_ù7þßr>NgD²üp\~ºô Ä}Î}vúäéó_OD¶Ù­â$U>!°æ%ŽõºãX—§ŽõÛ+2—xVë®gOÁè»yf €OçÀ;o°øÒ1Ùe»˜|ò¬=A“ßm³ÙäÑf|3ð 6 }‡Í‡Çg`óÇhu× !ÈÚI#£‡ˆÜ‘?~?|s‘[QˆˆÀ¯"þ¢À߉È`òŒætˆ‡vÞ„Z|š™ù¹TœxˆW}뢥wAëìøhÿàÐ:¦µWÛ ÒÙÊ ÌÿŒAm½ò[ÍYÅ3Vª~ú‹¿ïDw¿*A=º¢p§œ0ÙöŸšÀÿîZ„e¨¬È[Õ£¶ÁͦbÔL!ª§½bDå¨ã/¿SN~þäìüÅ[ð×ùɽuHHõSè›Üî±gà£P…Úœ3¦ƒé%d”e×Þ2¼‡5Ø{¾Õ^ìõãÓo7o¿#>íöªûjUwÈÆOMµ+»6î”'ßþçÚøz{V1Oõe•Ümuês^$‹ŠÄ‘ÇÝ’à7$Ð-ß”næ ìÁÓÕÜÆ)جDiA¦{œËqv†e_ºÀ£)S.LAÊ”h•HS4d ʲ°› ‹Ô°¬ YXŒ¯¯ža¿Ó. ™“íºóý:] Ä…ɧ¤æÞBVIñ„¼À„Ì“EøÅzäô>G‰ð¾‡õ—¦8cx$‚¾µŸ“ŒH¿& ×~M²jsÜÞ%½¿Jì‹W}ñÚoŸï.¾¿$ë‹7}ñHÕŠ—"ow¿¶ÆéË·}ùÞvÌ7É·<·»üþФ/Þ¯9ß%âM~þ¾ï­zÂýZä‰NäÉä;¦5»Kï×¾xu§íBØD|¶»ø~iê‹_‹<׉<‘~Åõ?àù^Õè‹_ Û£#¶IأõIh‹¯ÇÛèõ(Þƒòa—jµ’·"Ù¬éR…ÐÂ,åïáñΤÃ",:épJªžß£ÓÅ›ôÑ{ Íš>u9Â}4êYõ ¦Û&KÛíÞ**Z/?6ÜŸÝÐL×@KtèS¯ëÛ>—8@ø5)¥HµÖ¯ÉH³¡è׬/©?¤Q-T ˆGx*þê»Bxs(Ü@‹ç}תî!T÷Él<µ«-‡«²”Lr Ç0.Og—%S—m ;»-§û¤ÓM"ùã{¨ endstream endobj 209 0 obj << /Type /XRef /Index [0 210] /Size 210 /W [1 3 1] /Root 207 0 R /Info 208 0 R /ID [<705D7F5F3846AF9ADA504D1EB310E974> <705D7F5F3846AF9ADA504D1EB310E974>] /Length 538 /Filter /FlateDecode >> stream xÚ“»SÓQ…w¯‚ hD|á‘ " B4>¢’‚TDÁ÷+6tZQ::ãŒ2³•ÚYØÙÑ8Úª…ÿ€ãŒ ­%æ;Í7gÏÝÜÜ»÷üÌÌÖ’Y2·wõ†ÚWCŒ¢$°ï4jXúðN¡ê@=Â;‰ÚÀq¼ªlx'PM œÁ£9m›Á5¼c¨ ØBÉ â(e ØJɦQ¤lÛÀv°ì»Àn°´vв t¼›e4cû@—‡€æ2LK7jE_êuk\Ò{Y84œ~¼·|Q«ƒn¥ÏRì—úÝZÿ©äI7šÕ°[ÛˆV¹~0¤¿,€Ãà(ºõM¨¯â6ûGj”Ü ?UŽ=”^PO«7/»U~«å¸ ¦Ü¦Ë»΂sà<¸¦Ýªcj¹fÝߨœ3n ?T^åà:î=pÇ-rZ¸æÝžüUy\7ÀMp Üv{ñ– ˜¡$>p{='O‰}ªà^-Ù>š§ç j!˜QçöI“ b€$FƒÛ²^&kÂhvûR–G0#ãöõ¥JòÊ© R¤.H]è;"zAô‚èÑ ¢ínßžj—·•_RY÷–¬T§ûä+©.÷ÅU©n÷·U©÷å÷R9OMšsä=V¤z=ÍK)zÄ"ˆE”AðúA®B¢¾<SžžÍÔfµ4dÿfký endstream endobj startxref 168495 %%EOF vegan/inst/doc/intro-vegan.Rnw0000644000176200001440000003532012072532254016022 0ustar liggesusers% -*- mode: noweb; noweb-default-code-mode: R-mode; -*- %\VignetteIndexEntry{Introduction to ordination in vegan} \documentclass[article,nojss]{jss} \usepackage{veganjss} % vegan settings \usepackage{ucs} %% needed for R output: signif stars etc, quotes \usepackage[utf8x]{inputenc} \usepackage[T1]{fontenc} \usepackage{sidecap} \usepackage{amsmath} \renewcommand{\floatpagefraction}{0.8} \title{Vegan: an introduction to ordination} \author{Jari Oksanen} \Abstract{The document describes typical, simple work pathways of vegetation ordination. Unconstrained ordination uses as examples detrended correspondence analysis and non-metric multidimensional scaling, and shows how to interpret their results by fitting environmental vectors and factors or smooth environmental surfaces to the graph. The basic plotting command, and more advanced plotting commands for congested plots are also discussed, as well as adding items such as ellipses, convex hulls, and other items for classes. The constrained ordination uses constrained (canonical) correspondence analysis as an example. It is first shown how a model is defined, then the document discusses model building and signficance tests of the whole analysis, single constraints and axes.} \Keywords{ordination, correspondence analysis, non-metric multidimensional scaling, CCA, RDA, NMDS, fitted environmental vector, fitted environmental surface, permutation tests} %% misuse of the address field for revision data \Address{$ $Id: intro-vegan.Rnw 2346 2013-01-07 11:42:36Z jarioksa $ $ processed with vegan \Sexpr{packageDescription("vegan", field="Version")} in \Sexpr{R.version.string} on \today} \Footername{About this version} %% need no \usepackage{Sweave} \begin{document} \setkeys{Gin}{width=0.55\linewidth} \SweaveOpts{strip.white=true} <>= par(mfrow=c(1,1)) options(width=72) figset <- function() par(mar=c(4,4,1,1)+.1) options(SweaveHooks = list(fig = figset)) options("prompt" = "R> ", "continue" = "+ ") @ \tableofcontents \vspace{3ex} \noindent \pkg{Vegan} is a package for community ecologists. This documents explains how the commonly used ordination methods can be performed in \pkg{vegan}. The document only is a very basic introduction. Another document (\emph{vegan tutorial}) (\url{http://cc.oulu.fi/~jarioksa/opetus/method/vegantutor.pdf}) gives a longer and more detailed introduction to ordination. The current document only describes a small part of all \pkg{vegan} functions. For most functions, the canonical references are the \pkg{vegan} help pages, and some of the most important additional functions are listed at this document. \section{Ordination} The \pkg{vegan} package contains all common ordination methods: Principal component analysis (function \code{rda}, or \code{prcomp} in the base \proglang{R}), correspondence analysis (\code{cca}), detrended correspondence analysis (\code{decorana}) and a wrapper for non-metric multidimensional scaling (\code{metaMDS}). Functions \code{rda} and \code{cca} mainly are designed for constrained ordination, and will be discussed later. In this chapter I describe functions \code{decorana} and \code{metaMDS}. \subsection{Detrended correspondence analysis} Detrended correspondence analysis (\textsc{dca}) is done like this: <<>>= library(vegan) data(dune) ord <- decorana(dune) @ This saves ordination results in \code{ord}: <<>>= ord @ The display of results is very brief: only eigenvalues and used options are listed. Actual ordination results are not shown, but you can see them with command \code{summary(ord)}, or extract the scores with command \code{scores}. The \code{plot} function also automatically knows how to access the scores. \subsection{Non-metric multidimensional scaling} Function \code{metaMDS} is a bit special case. The actual ordination is performed by function \pkg{vegan} function \code{monoMDS} (or alternatively using \code{isoMDS} of the \pkg{MASS} package). Function \code{metaMDS} is a wrapper to perform non-metric multidimensional scaling (\textsc{nmds}) like recommended in community ordination: it uses adequate dissimilarity measures (function \code{vegdist}), then it runs \textsc{nmds} several times with random starting configurations, compares results (function \code{procrustes}), and stops after finding twice a similar minimum stress solution. Finally it scales and rotates the solution, and adds species scores to the configuration as weighted averages (function \code{wascores}): <<>>= ord <- metaMDS(dune) ord @ \section{Ordination graphics} Ordination is nothing but a way of drawing graphs, and it is best to inspect ordinations only graphically (which also implies that they should not be taken too seriously). All ordination results of \pkg{vegan} can be displayed with a \code{plot} command (Fig. \ref{fig:plot}): <>= plot(ord) @ \begin{SCfigure} <>= <> @ \caption{Default ordination plot.} \label{fig:plot} \end{SCfigure} Default \code{plot} command uses either black circles for sites and red pluses for species, or black and red text for sites and species, resp. The choices depend on the number of items in the plot and ordination method. You can override the default choice by setting \code{type = "p"} for points, or \code{type = "t"} for text. For a better control of ordination graphics you can first draw an empty plot (\code{type = "n"}) and then add species and sites separately using \code{points} or \code{text} functions. In this way you can combine points and text, and you can select colours and character sizes freely (Fig. \ref{fig:plot.args}): <>= plot(ord, type = "n") points(ord, display = "sites", cex = 0.8, pch=21, col="red", bg="yellow") text(ord, display = "spec", cex=0.7, col="blue") @ \begin{SCfigure} <>= <> @ \caption{A more colourful ordination plot where sites are points, and species are text.} \label{fig:plot.args} \end{SCfigure} All \pkg{vegan} ordination methods have a specific \code{plot} function. In addition, \pkg{vegan} has an alternative plotting function \code{ordiplot} that also knows many non-\pkg{vegan} ordination methods, such as \code{prcomp}, \code{cmdscale} and \code{isoMDS}. All \pkg{vegan} plot functions return invisibly an \code{ordiplot} object, so that you can use \code{ordiplot} support functions with the results (\code{points}, \code{text}, \code{identify}). Function \code{ordirgl} (requires \pkg{rgl} package) provides dynamic three-dimensional graphics that can be spun around or zoomed into with your mouse. Function \pkg{ordiplot3d} (requires package \code{scatterplot3d}) displays simple three-dimensional scatterplots. \subsection{Cluttered plots} Ordination plots are often congested: there is a large number of sites and species, and it may be impossible to display all clearly. In particular, two or more species may have identical scores and are plotted over each other. \pkg{Vegan} does not have (yet?) automatic tools for clean plotting in these cases, but here some methods you can try: \begin{itemize} \item Zoom into graph setting axis limits \code{xlim} and \code{ylim}. You must typically set both, because \pkg{vegan} will maintain equal aspect ratio of axes. \item Use points and add labell only some points with \code{identify} command. \item Use \code{select} argument in ordination \code{text} and \code{points} functions to only show the specified items. \item Use \code{ordilabel} function that uses opaque background to the text: some text labels will be covered, but the uppermost are readable. \item Use automatic \code{orditorp} function that uses text only if this can be done without overwriting previous labels, but points in other cases. \item Use automatic \code{ordipointlabel} function that uses both points and text labels, and tries to optimize the location of the text to avoid overwriting. \item Use interactive \code{orditkplot} function that draws both points and labels for ordination scores, and allows you to drag labels to better positions. You can export the results of the edited graph to encapsulated \proglang{postscript}, \proglang{pdf}, \proglang{png} or \proglang{jpeg} files, or copy directly to encapsulated \proglang{postscript}, or return the edited positions to \proglang{R} for further processing. \end{itemize} \subsection{Adding items to ordination plots} \pkg{Vegan} has a group of functions for adding information about classification or grouping of points onto ordination diagrams. Function \code{ordihull} adds convex hulls, \code{ordiellipse} adds ellipses of standard deviation, standard error or confidence areas, and \code{ordispider} combines items to their centroid (Fig. \ref{fig:ordihull}): <<>>= data(dune.env) attach(dune.env) @ <>= plot(ord, disp="sites", type="n") ordihull(ord, Management, col="blue") ordiellipse(ord, Management, col=3,lwd=2) ordispider(ord, Management, col="red", label = TRUE) points(ord, disp="sites", pch=21, col="red", bg="yellow", cex=1.3) @ \begin{SCfigure} <>= <> @ \caption{Convex hull, standard error ellipse and a spider web diagram for Management levels in ordination.} \label{fig:ordihull} \end{SCfigure} In addition, you can overlay a cluster dendrogram from \code{hclust} using \code{ordicluster} or a minimum spanning tree from \code{spantree} with its \code{lines} function. Segmented arrows can be added with \code{ordiarrows}, lines with \code{ordisegments} and regular grids with \code{ordigrid}. \section{Fitting environmental variables} \pkg{Vegan} provides two functions for fitting environmental variables onto ordination: \begin{itemize} \item \code{envfit} fits vectors of continuous variables and centroids of levels of class variables (defined as \code{factor} in \proglang{R}). The arrow shows the direction of the (increasing) gradient, and the length of the arrow is proportional to the correlation between the variable and the ordination. \item \code{ordisurf} (which requires package \pkg{mgcv}) fits smooth surfaces for continuous variables onto ordination using thinplate splines with cross-validatory selection of smoothness. \end{itemize} Function \code{envfit} can be called with a \code{formula} interface, and it optionally can assess the ``significance'' of the variables using permutation tests: <<>>= ord.fit <- envfit(ord ~ A1 + Management, data=dune.env, perm=1000) ord.fit @ The result can be drawn directly or added to an ordination diagram (Fig. \ref{fig:envfit}): <>= plot(ord, dis="site") plot(ord.fit) @ Function \code{ordisurf} directly adds a fitted surface onto ordination, but it returns the result of the fitted thinplate spline \code{gam} (Fig. \ref{fig:envfit}): <>= ordisurf(ord, A1, add=TRUE) @ \begin{SCfigure} <>= <> <> @ \caption{Fitted vector and smooth surface for the thickness of A1 horizon (\code{A1}, in cm), and centroids of Management levels.} \label{fig:envfit} \end{SCfigure} \section{Constrained ordination} \pkg{Vegan} has three methods of constrained ordination: constrained or ``canonical'' correspondence analysis (function \code{cca}), redundancy analysis (function \code{rda}) and distance-based redundancy analysis (function \code{capscale}). All these functions can have a conditioning term that is ``partialled out''. I only demonstrate \code{cca}, but all functions accept similar commands and can be used in the same way. The preferred way is to use \code{formula} interface, where the left hand side gives the community data frame and the right hand side lists the constraining variables: <<>>= ord <- cca(dune ~ A1 + Management, data=dune.env) ord @ The results can be plotted with (Fig. \ref{fig:cca}): <>= plot(ord) @ \begin{SCfigure} <>= <> @ \caption{Default plot from constrained correspondence analysis.} \label{fig:cca} \end{SCfigure} There are three groups of items: sites, species and centroids (and biplot arrows) of environmental variables. All these can be added individually to an empty plot, and all previously explained tricks of controlling graphics still apply. It is not recommended to perform constrained ordination with all environmental variables you happen to have: adding the number of constraints means slacker constraint, and you finally end up with solution similar to unconstrained ordination. In that case it is better to use unconstrained ordination with environmental fitting. However, if you really want to do so, it is possible with the following shortcut in \code{formula}: <<>>= cca(dune ~ ., data=dune.env) @ \subsection{Significance tests} \pkg{vegan} provides permutation tests for the significance of constraints. The test mimics standard analysis of variance function (\code{anova}), and the default test analyses all constraints simultaneously: <<>>= anova(ord) @ The function actually used was \code{anova.cca}, but you do not need to give its name in full, because \proglang{R} automatically chooses the correct \code{anova} variant for the result of constrained ordination. The \code{anova.cca} function tries to be clever and lazy: it automatically stops if the observed permutation significance probably differs from the targeted critical value ($0.05$ as default), but it will continue long in uncertain cases. You must set \code{step} and \code{perm.max} to same values to override this behaviour. It is also possible to analyse terms separately: <<>>= anova(ord, by="term", permu=200) @ In this case, the function is unable to automatically select the number of iterations. This test is sequential: the terms are analysed in the order they happen to be in the model. You can also analyse significances of marginal effects (``Type III effects''): <<>>= anova(ord, by="mar") @ Moreover, it is possible to analyse significance of each axis: <>= anova(ord, by="axis", perm=500) @ Now the automatic selection works, but typically some of your axes will be very close to the critical value, and it may be useful to set a lower \code{perm.max} than the default $10000$ (typically you use higher limits than in these examples: we used lower limits to save time when this document is automatically generated with this package). \subsection{Conditioned or partial ordination} All constrained ordination methods can have terms that are partialled out from the analysis before constraints: <<>>= ord <- cca(dune ~ A1 + Management + Condition(Moisture), data=dune.env) ord @ This partials out the effect of \code{Moisture} before analysing the effects of \code{A1} and \code{Management}. This also influences the significances of the terms: <<>>= anova(ord, by="term", perm=500) @ If we had a designed experiment, we may wish to restrict the permutations so that the observations only are permuted within levels of \code{strata}: <<>>= anova(ord, by="term", perm=500, strata=Moisture) @ %%%%%%%%%%%%%%%%%%% <>= detach(dune.env) @ \end{document} vegan/inst/doc/diversity-vegan.tex0000644000176200001440000010151112122046442016732 0ustar liggesusers% -*- mode: noweb; noweb-default-code-mode: R-mode; -*- %\VignetteIndexEntry{Diversity analysis in vegan} \documentclass[article,nojss]{jss} \usepackage{veganjss} %% vegan setup \usepackage{ucs} \usepackage[utf8x]{inputenc} \usepackage[T1]{fontenc} \usepackage{sidecap} \usepackage{amsmath} \usepackage{amssymb} % \gtrapprox \title{Vegan: ecological diversity} \author{Jari Oksanen} \Abstract{ This document explains diversity related methods in \pkg{vegan}. The methods are briefly described, and the equations used them are given often in more detail than in their help pages. The methods discussed include common diversity indices and rarefaction, families of diversity indices, species abundance models, species accumulation models and beta diversity, extrapolated richness and probability of being a member of the species pool. The document is still incomplete and does not cover all diversity methods in \pkg{vegan}.} \Keywords{diversity, Shannon, Simpson, R{\'e}nyi, Hill number, Tsallis, rarefaction, species accumulation, beta diversity, species abundance, Fisher alpha, Fisher logarithmic series, Preston log-normal model, species abundance models, Whittaker plots, extended richness, taxonomic diversity, functional divesity, species pool} %% misuse next for scm data \Address{$ $Id: diversity-vegan.Rnw 2346 2013-01-07 11:42:36Z jarioksa $ $ processed with vegan 2.0-7 in R Under development (unstable) (2013-03-19 r62316) on \today} \Footername{About this version} %% need no \usepackage{Sweave} \begin{document} \setkeys{Gin}{width=0.55\linewidth} \tableofcontents \noindent The \pkg{vegan} package has two major components: multivariate analysis (mainly ordination), and methods for diversity analysis of ecological communities. This document gives an introduction to the latter. Ordination methods are covered in other documents. Many of the diversity functions were written by Roeland Kindt, Bob O'Hara and P{\'e}ter S{\'o}lymos. Most diversity methods assume that data are counts of individuals. The methods are used with other data types, and some people argue that biomass or cover are more adequate than counts of individuals of variable sizes. However, this document mainly uses a data set with counts: stem counts of trees on $1$\,ha plots in the Barro Colorado Island. The following steps make these data available for the document: \begin{Schunk} \begin{Sinput} R> library(vegan) R> data(BCI) \end{Sinput} \end{Schunk} \section{Diversity indices} Function \code{diversity} finds the most commonly used diversity indices: \begin{align} H &= - \sum_{i=1}^S p_i \log_b p_i & \text{Shannon--Weaver}\\ D_1 &= 1 - \sum_{i=1}^S p_i^2 &\text{Simpson}\\ D_2 &= \frac{1}{\sum_{i=1}^S p_i^2} &\text{inverse Simpson} \end{align} where $p_i$ is the proportion of species $i$, and $S$ is the number of species so that $\sum_{i=1}^S p_i = 1$, and $b$ is the base of the logarithm. It is most common to use natural logarithms (and then we mark index as $H'$), but $b=2$ has theoretical justification. The default is to use natural logarithms. Shannon index is calculated with: \begin{Schunk} \begin{Sinput} R> H <- diversity(BCI) \end{Sinput} \end{Schunk} which finds diversity indices for all sites. \pkg{Vegan} does not have indices for evenness (equitability), but the most common of these, Pielou's evenness $J = H'/\log(S)$ is easily found as: \begin{Schunk} \begin{Sinput} R> J <- H/log(specnumber(BCI)) \end{Sinput} \end{Schunk} where \code{specnumber} is a simple \pkg{vegan} function to find the numbers of species. \pkg{vegan} also can estimate series of R\'{e}nyi and Tsallis diversities. R{\'e}nyi diversity of order $a$ is: \begin{equation} H_a = \frac{1}{1-a} \log \sum_{i=1}^S p_i^a \end{equation} or the corresponding Hill numbers $N_a = \exp(H_a)$. Many common diversity indices are special cases of Hill numbers: $N_0 = S$, $N_1 = \exp(H')$, $N_2 = D_2$, and $N_\infty = 1/(\max p_i)$. The corresponding R\'{e}nyi diversities are $H_0 = \log(S)$, $H_1 = H'$, $H_2 = - \log(\sum p_i^2)$, and $H_\infty = - \log(\max p_i)$. Tsallis diversity of order $q$ is: \begin{equation} H_q = \frac{1}{q-1} \left(1 - \sum_{i=1}^S p^q \right) \, . \end{equation} This corresponds to common diversity indices: $H_0 = S-1$, $H_1 = H'$, and $H_2 = D_2$, and can be converted to the Hill number: \begin{equation} N_q = (1 - (q-1) H_q )^\frac{1}{1-q} \, . \end{equation} We select a random subset of five sites for R\'{e}nyi diversities: \begin{Schunk} \begin{Sinput} R> k <- sample(nrow(BCI), 6) R> R <- renyi(BCI[k,]) \end{Sinput} \end{Schunk} We can really regard a site more diverse if all of its R\'{e}nyi diversities are higher than in another site. We can inspect this graphically using the standard \code{plot} function for the \code{renyi} result (Fig. \ref{fig:renyi}). \begin{SCfigure} \includegraphics{diversity-vegan-007} \caption{R\'{e}nyi diversities in six randomly selected plots. The plot uses Trellis graphics with a separate panel for each site. The dots show the values for sites, and the lines the extremes and median in the data set.} \label{fig:renyi} \end{SCfigure} Finally, the $\alpha$ parameter of Fisher's log-series can be used as a diversity index: \begin{Schunk} \begin{Sinput} R> alpha <- fisher.alpha(BCI) \end{Sinput} \end{Schunk} \section{Rarefaction} Species richness increases with sample size, and differences in richness actually may be caused by differences in sample size. To solve this problem, we may try to rarefy species richness to the same number of individuals. Expected number of species in a community rarefied from $N$ to $n$ individuals is: \begin{equation} \label{eq:rare} \hat S_n = \sum_{i=1}^S (1 - q_i),\quad \text{where} \quad q_i = {N-x_i \choose n} \Bigm /{N \choose n} \end{equation} where $x_i$ is the count of species $i$, and ${N \choose n}$ is the binomial coefficient, or the number of ways we can choose $n$ from $N$, and $q_i$ give the probabilities that species $i$ does \emph{not} occur in a sample of size $n$. This is defined only when $N-x_i > n$, but for other cases $q_i = 0$ or the species is sure to occur in the sample. The variance of rarefied richness is: \begin{equation} \label{eq:rarevar} s^2 = q_i (1-q_i) + 2 \sum_{i=1}^S \sum_{j>i} \left[ {N- x_i - x_j \choose n} \Bigm / {N \choose n} - q_i q_j\right] \end{equation} Equation \ref{eq:rarevar} actually is of the same form as the variance of sum of correlated variables: \begin{equation} \VAR \left(\sum x_i \right) = \sum \VAR (x_i) + 2 \sum_{i=1}^S \sum_{j>i} \COV (x_i, x_j) \end{equation} The number of stems per hectare varies in our data set: \begin{Schunk} \begin{Sinput} R> quantile(rowSums(BCI)) \end{Sinput} \begin{Soutput} 0% 25% 50% 75% 100% 340.0 409.0 428.0 443.5 601.0 \end{Soutput} \end{Schunk} To express richness for the same number of individuals, we can use: \begin{Schunk} \begin{Sinput} R> Srar <- rarefy(BCI, min(rowSums(BCI))) \end{Sinput} \end{Schunk} Rarefaction curves often are seen as an objective solution for comparing species richness with different sample sizes. However, rank orders typically differ among different rarefaction sample sizes, rarefaction curves can cross. As an extreme case we may rarefy sample size to two individuals: \begin{Schunk} \begin{Sinput} R> S2 <- rarefy(BCI, 2) \end{Sinput} \end{Schunk} This will not give equal rank order with the previous rarefaction richness: \begin{Schunk} \begin{Sinput} R> all(rank(Srar) == rank(S2)) \end{Sinput} \begin{Soutput} [1] FALSE \end{Soutput} \end{Schunk} Moreover, the rarefied richness for two individuals is a finite sample variant of Simpson's diversity index (or, more precisely of $D_1 + 1$), and these two are almost identical in BCI: \begin{Schunk} \begin{Sinput} R> range(diversity(BCI, "simp") - (S2 -1)) \end{Sinput} \begin{Soutput} [1] -0.002868298 -0.001330663 \end{Soutput} \end{Schunk} Rarefaction is sometimes presented as an ecologically meaningful alternative to dubious diversity indices, but the differences really seem to be small. \section{Taxonomic and functional diversity} Simple diversity indices only consider species identity: all different species are equally different. In contrast, taxonomic and functional diversity indices judge the differences of species are. Taxonomic and functional diversities are used in different fields of science, but they really have very similar reasoning, and either could be used either with taxonomic or functional properties of species. \subsection{Taxonomic diversity: average distance of properties} The two basic indices are called taxonomic diversity ($\Delta$) and taxonomic distinctness ($\Delta^*$): \begin{align} \Delta &= \frac{\sum \sum_{i data(dune) R> data(dune.taxon) R> taxdis <- taxa2dist(dune.taxon, varstep=TRUE) R> mod <- taxondive(dune, taxdis) \end{Sinput} \end{Schunk} \begin{SCfigure} \includegraphics{diversity-vegan-015} \caption{Taxonomic diversity $\Delta^+$ for the dune meadow data. The points are diversity values of single sites, and the funnel is their approximate confidence intervals ($2 \times$ standard error).} \label{fig:taxondive} \end{SCfigure} \subsection{Functional diversity: the height of property tree} In taxonomic diversity the primary data were taxonomic trees which were transformed to pairwise distances among species. In functional diversity the primary data are species properties which are translated to pairwise distances among species and then to clustering trees of species properties. The argument for trees is that in this way a single deviant species will have a small influence, since its difference is evaluated only once instead of evaluating its distance to all other species. Function \code{treedive} implements functional diversity defined as the total branch length in a trait dendrogram connecting all species, but excluding the unnecessary root segments of the tree. The example uses the taxonomic distances of the previous chapter. These are first converted to a hierarchic clustering (which actually were their original form before \code{taxa2dist} converted them into distances) \begin{Schunk} \begin{Sinput} R> tr <- hclust(taxdis, "aver") R> mod <- treedive(dune, tr) \end{Sinput} \end{Schunk} \section{Species abundance models} Diversity indices may be regarded as variance measures of species abundance distribution. We may wish to inspect abundance distributions more directly. \pkg{Vegan} has functions for Fisher's log-series and Preston's log-normal models, and in addition several models for species abundance distribution. \subsection{Fisher and Preston} In Fisher's log-series, the expected number of species $\hat f$ with $n$ individuals is: \begin{equation} \hat f_n = \frac{\alpha x^n}{n} \end{equation} where $\alpha$ is the diversity parameter, and $x$ is a nuisance parameter defined by $\alpha$ and total number of individuals $N$ in the site, $x = N/(N-\alpha)$. Fisher's log-series for a randomly selected plot is (Fig. \ref{fig:fisher}): \begin{Schunk} \begin{Sinput} R> k <- sample(nrow(BCI), 1) R> fish <- fisherfit(BCI[k,]) R> fish \end{Sinput} \begin{Soutput} Fisher log series model No. of species: 94 Estimate Std. Error alpha 34.823 4.4404 \end{Soutput} \end{Schunk} \begin{SCfigure} \includegraphics{diversity-vegan-018} \caption{Fisher's log-series fitted to one randomly selected site (10).} \label{fig:fisher} \end{SCfigure} We already saw $\alpha$ as a diversity index. Now we also obtained estimate of standard error of $\alpha$ (these also are optionally available in \code{fisher.alpha}). The standard errors are based on the second derivatives (curvature) of log-likelihood at the solution of $\alpha$. The distribution of $\alpha$ is often non-normal and skewed, and standard errors are of not much use. However, \code{fisherfit} has a \code{profile} method that can be used to inspect the validity of normal assumptions, and will be used in calculations of confidence intervals from profile deviance: \begin{Schunk} \begin{Sinput} R> confint(fish) \end{Sinput} \begin{Soutput} 2.5 % 97.5 % 26.97514 44.48423 \end{Soutput} \end{Schunk} Preston's log-normal model is the main challenger to Fisher's log-series. Instead of plotting species by frequencies, it bins species into frequency classes of increasing sizes. As a result, upper bins with high range of frequencies become more common, and sometimes the result looks similar to Gaussian distribution truncated at the left. There are two alternative functions for the log-normal model: \code{prestonfit} and \code{prestondistr}. Function \code{prestonfit} uses traditionally binning approach, and is burdened with arbitrary choices of binning limits and treatment of ties. It seems that Preston split ties between adjacent octaves: only half of the species observed once were in the first octave, and half were transferred to the next octave, and the same for all species at the octave limits occuring 2, 4, 8, 16\ldots times. Function \code{prestonfit} can either split the ties or keep all limit cases in the lower octave. Function \code{prestondistr} directly maximizes truncated log-normal likelihood without binning data, and it is the recommended alternative. Log-normal models usually fit poorly to the BCI data, but here our random plot (number 10): \begin{Schunk} \begin{Sinput} R> prestondistr(BCI[k,]) \end{Sinput} \begin{Soutput} Preston lognormal model Method: maximized likelihood to log2 abundances No. of species: 94 mode width S0 0.9941697 1.8317765 23.7539289 Frequencies by Octave 0 1 2 3 4 5 6 Observed 17.50000 25.50000 19.50000 15.50000 8.50000 5.500000 2.0000000 Fitted 20.50087 23.75381 20.42975 13.04252 6.18057 2.174024 0.5676345 \end{Soutput} \end{Schunk} \subsection{Ranked abundance distribution} An alternative approach to species abundance distribution is to plot logarithmic abundances in decreasing order, or against ranks of species. These are known as ranked abundance distribution curves, species abundance curves, dominance--diversity curves or Whittaker plots. Function \code{radfit} fits some of the most popular models using maximum likelihood estimation: \begin{align} \hat a_r &= \frac{N}{S} \sum_{k=r}^S \frac{1}{k} &\text{brokenstick}\\ \hat a_r &= N \alpha (1-\alpha)^{r-1} & \text{preemption} \\ \hat a_r &= \exp \left[\log (\mu) + \log (\sigma) \Phi \right] &\text{log-normal}\\ \hat a_r &= N \hat p_1 r^\gamma &\text{Zipf}\\ \hat a_r &= N c (r + \beta)^\gamma &\text{Zipf--Mandelbrot} \end{align} Where $\hat a_r$ is the expected abundance of species at rank $r$, $S$ is the number of species, $N$ is the number of individuals, $\Phi$ is a standard normal function, $\hat p_1$ is the estimated proportion of the most abundant species, and $\alpha$, $\mu$, $\sigma$, $\gamma$, $\beta$ and $c$ are the estimated parameters in each model. It is customary to define the models for proportions $p_r$ instead of abundances $a_r$, but there is no reason for this, and \code{radfit} is able to work with the original abundance data. We have count data, and the default Poisson error looks appropriate, and our example data set gives (Fig. \ref{fig:rad}): \begin{Schunk} \begin{Sinput} R> rad <- radfit(BCI[k,]) R> rad \end{Sinput} \begin{Soutput} RAD models, family poisson No. of species 94, total abundance 483 par1 par2 par3 Deviance AIC BIC Null 77.2737 353.6126 353.6126 Preemption 0.048132 62.7210 341.0598 343.6031 Lognormal 0.97341 1.1723 20.4770 300.8158 305.9024 Zipf 0.14073 -0.84897 39.7066 320.0454 325.1320 Mandelbrot 1.9608 -1.522 6.7247 9.8353 292.1741 299.8040 \end{Soutput} \end{Schunk} \begin{SCfigure} \includegraphics{diversity-vegan-022} \caption{Ranked abundance distribution models for a random plot (no. 10). The best model has the lowest \textsc{aic}.} \label{fig:rad} \end{SCfigure} Function \code{radfit} compares the models using alternatively Akaike's or Schwartz's Bayesian information criteria. These are based on log-likelihood, but penalized by the number of estimated parameters. The penalty per parameter is $2$ in \textsc{aic}, and $\log S$ in \textsc{bic}. Brokenstick is regarded as a null model and has no estimated parameters in \pkg{vegan}. Preemption model has one estimated parameter ($\alpha$), log-normal and Zipf models two ($\mu, \sigma$, or $\hat p_1, \gamma$, resp.), and Zipf--Mandelbrot model has three ($c, \beta, \gamma$). Function \code{radfit} also works with data frames, and fits models for each site. It is curious that log-normal model rarely is the choice, although it generally is regarded as the canonical model, in particular in data sets like Barro Colorado tropical forests. \section{Species accumulation and beta diversity} Species accumulation models and species pool models study collections of sites, and their species richness, or try to estimate the number of unseen species. \subsection{Species accumulation models} Species accumulation models are similar to rarefaction: they study the accumulation of species when the number of sites increases. There are several alternative methods, including accumulating sites in the order they happen to be, and repeated accumulation in random order. In addition, there are three analytic models. Rarefaction pools individuals together, and applies rarefaction equation (\ref{eq:rare}) to these individuals. Kindt's exact accumulator resembles rarefaction: \begin{equation} \label{eq:kindt} \hat S_n = \sum_{i=1}^S (1 - p_i), \, \text{where} \quad p_i = {N- f_i \choose n} \Bigm / {N \choose n} \end{equation} where $f_i$ is the frequency of species $i$. Approximate variance estimator is: \begin{equation} \label{eq:kindtvar} s^2 = p_i (1 - p_i) + 2 \sum_{i=1}^S \sum_{j>i} \left( r_{ij} \sqrt{p_i(1-p_i)} \sqrt{p_j (1-p_j)}\right) \end{equation} where $r_{ij}$ is the correlation coefficient between species $i$ and $j$. Both of these are unpublished: eq. \ref{eq:kindt} was developed by Roeland Kindt, and eq. \ref{eq:kindtvar} by Jari Oksanen. The third analytic method was suggested by Coleman: \begin{equation} \label{eq:cole} S_n = \sum_{i=1}^S (1 - p_i), \, \text{where} \quad p_i = \left(1 - \frac{1}{n}\right)^{f_i} \end{equation} and he suggested variance $s^2 = p_i (1-p_i)$ which ignores the covariance component. In addition, eq. \ref{eq:cole} does not properly handle sampling without replacement and underestimates the species accumulation curve. The recommended is Kindt's exact method (Fig. \ref{fig:sac}): \begin{Schunk} \begin{Sinput} R> sac <- specaccum(BCI) R> plot(sac, ci.type="polygon", ci.col="yellow") \end{Sinput} \end{Schunk} \begin{SCfigure} \includegraphics{diversity-vegan-024} \caption{Species accumulation curve for the BCI data; exact method.} \label{fig:sac} \end{SCfigure} \subsection{Beta diversity} Whittaker divided diversity into various components. The best known are diversity in one spot that he called alpha diversity, and the diversity along gradients that he called beta diversity. The basic diversity indices are indices of alpha diversity. Beta diversity should be studied with respect to gradients, but almost everybody understand that as a measure of general heterogeneity: how many more species do you have in a collection of sites compared to an average site. The best known index of beta diversity is based on the ratio of total number of species in a collection of sites ($S$) and the average richness per one site ($\bar \alpha$): \begin{equation} \label{eq:beta} \beta = S/\bar \alpha - 1 \end{equation} Subtraction of one means that $\beta = 0$ when there are no excess species or no heterogeneity between sites. For this index, no specific functions are needed, but this index can be easily found with the help of \pkg{vegan} function \code{specnumber}: \begin{Schunk} \begin{Sinput} R> ncol(BCI)/mean(specnumber(BCI)) - 1 \end{Sinput} \begin{Soutput} [1] 1.478519 \end{Soutput} \end{Schunk} The index of eq. \ref{eq:beta} is problematic because $S$ increases with the number of sites even when sites are all subsets of the same community. Whittaker noticed this, and suggested the index to be found from pairwise comparison of sites. If the number of shared species in two sites is $a$, and the numbers of species unique to each site are $b$ and $c$, then $\bar \alpha = (2a + b + c)/2$ and $S = a+b+c$, and index \ref{eq:beta} can be expressed as: \begin{equation} \label{eq:betabray} \beta = \frac{a+b+c}{(2a+b+c)/2} - 1 = \frac{b+c}{2a+b+c} \end{equation} This is the S{\o}rensen index of dissimilarity, and it can be found for all sites using \pkg{vegan} function \code{vegdist} with binary data: \begin{Schunk} \begin{Sinput} R> beta <- vegdist(BCI, binary=TRUE) R> mean(beta) \end{Sinput} \begin{Soutput} [1] 0.3399075 \end{Soutput} \end{Schunk} There are many other definitions of beta diversity in addition to eq. \ref{eq:beta}. All commonly used indices can be found using \code{betadiver}. The indices in \code{betadiver} can be referred to by subscript name, or index number: \begin{Schunk} \begin{Sinput} R> betadiver(help=TRUE) \end{Sinput} \begin{Soutput} 1 "w" = (b+c)/(2*a+b+c) 2 "-1" = (b+c)/(2*a+b+c) 3 "c" = (b+c)/2 4 "wb" = b+c 5 "r" = 2*b*c/((a+b+c)^2-2*b*c) 6 "I" = log(2*a+b+c)-2*a*log(2)/(2*a+b+c)-((a+b)*log(a+b)+(a+c)*log(a+c))/(2*a+b+c) 7 "e" = exp(log(2*a+b+c)-2*a*log(2)/(2*a+b+c)-((a+b)*log(a+b)+(a+c)*log(a+c))/(2*a+b+c))-1 8 "t" = (b+c)/(2*a+b+c) 9 "me" = (b+c)/(2*a+b+c) 10 "j" = a/(a+b+c) 11 "sor" = 2*a/(2*a+b+c) 12 "m" = (2*a+b+c)*(b+c)/(a+b+c) 13 "-2" = pmin(b,c)/(pmax(b,c)+a) 14 "co" = (a*c+a*b+2*b*c)/(2*(a+b)*(a+c)) 15 "cc" = (b+c)/(a+b+c) 16 "g" = (b+c)/(a+b+c) 17 "-3" = pmin(b,c)/(a+b+c) 18 "l" = (b+c)/2 19 "19" = 2*(b*c+1)/((a+b+c)^2+(a+b+c)) 20 "hk" = (b+c)/(2*a+b+c) 21 "rlb" = a/(a+c) 22 "sim" = pmin(b,c)/(pmin(b,c)+a) 23 "gl" = 2*abs(b-c)/(2*a+b+c) 24 "z" = (log(2)-log(2*a+b+c)+log(a+b+c))/log(2) \end{Soutput} \end{Schunk} Some of these indices are duplicates, and many of them are well known dissimilarity indices. One of the more interesting indices is based on the Arrhenius species--area model \begin{equation} \label{eq:arrhenius} \hat S = c X^z \end{equation} where $X$ is the area (size) of the patch or site, and $c$ and $z$ are parameters. Parameter $c$ is uninteresting, but $z$ gives the steepness of the species area curve and is a measure of beta diversity. In islands typically $z \approx 0.3$. This kind of islands can be regarded as subsets of the same community, indicating that we really should talk about gradient differences if $z \gtrapprox 0.3$. We can find the value of $z$ for a pair of plots using function \code{betadiver}: \begin{Schunk} \begin{Sinput} R> z <- betadiver(BCI, "z") R> quantile(z) \end{Sinput} \begin{Soutput} 0% 25% 50% 75% 100% 0.2732845 0.3895024 0.4191536 0.4537180 0.5906091 \end{Soutput} \end{Schunk} The size $X$ and parameter $c$ cancel out, and the index gives the estimate $z$ for any pair of sites. Function \code{betadisper} can be used to analyse beta diversities with respect to classes or factors. There is no such classification available for the Barro Colorado Island data, and the example studies beta diversities in the management classes of the dune meadows (Fig. \ref{fig:betadisper}): \begin{Schunk} \begin{Sinput} R> data(dune) R> data(dune.env) R> z <- betadiver(dune, "z") R> mod <- with(dune.env, betadisper(z, Management)) R> mod \end{Sinput} \begin{Soutput} Homogeneity of multivariate dispersions Call: betadisper(d = z, group = Management) No. of Positive Eigenvalues: 12 No. of Negative Eigenvalues: 7 Average distance to centroid: BF HF NM SF 0.3080 0.2512 0.4406 0.3635 Eigenvalues for PCoA axes: PCoA1 PCoA2 PCoA3 PCoA4 PCoA5 PCoA6 PCoA7 PCoA8 PCoA9 1.6547 0.8870 0.5334 0.3744 0.2873 0.2245 0.1613 0.0810 0.0652 PCoA10 PCoA11 PCoA12 PCoA13 PCoA14 PCoA15 PCoA16 PCoA17 PCoA18 0.0353 0.0183 0.0040 -0.0042 -0.0194 -0.0369 -0.0429 -0.0536 -0.0602 PCoA19 -0.0828 \end{Soutput} \end{Schunk} \begin{SCfigure} \includegraphics{diversity-vegan-030} \caption{Box plots of beta diversity measured as the average steepness ($z$) of the species area curve in the Arrhenius model $S = cX^z$ in Management classes of dune meadows.} \label{fig:betadisper} \end{SCfigure} \section{Species pool} \subsection{Number of unseen species} Species accumulation models indicate that not all species were seen in any site. These unseen species also belong to the species pool. Functions \code{specpool} and \code{estimateR} implement some methods of estimating the number of unseen species. Function \code{specpool} studies a collection of sites, and \code{estimateR} works with counts of individuals, and can be used with a single site. Both functions assume that the number of unseen species is related to the number of rare species, or species seen only once or twice. Function \code{specpool} implements the following models to estimate the pool size $S_p$: \begin{align} S_p &= S_o + \frac{f_1^2}{2 f_2} & \text{Chao}\\ S_p &= S_o + f_1 \frac{N-1}{N} & \text{1st order Jackknife}\\ S_p & = S_o + f_1 \frac{2N-3}{N} + f_2 \frac{(N-2)^2}{N(N-1)} & \text{2nd order Jackknife}\\ S_p &= S_o + \sum_{i=1}^{S_o} (1-p_i)^N & \text{Bootstrap} \end{align} Here $S_o$ is the observed number of species, $f_1$ and $f_2$ are the numbers of species observed once or twice, $N$ is the number of sites, and $p_i$ are proportions of species. The idea in jackknife seems to be that we missed about as many species as we saw only once, and the idea in bootstrap that if we repeat sampling (with replacement) from the same data, we miss as many species as we missed originally. The variance estimators of Chao is: \begin{equation} s^2 = f_2 \left(\frac{G^4}{4} + G^3 + \frac{G^2}{2} \right), \, \text{where}\quad G = \frac{f_1}{f_2} \end{equation} The variance of the first-order jackknife is based on the number of ``singletons'' $r$ (species occurring only once in the data) in sample plots: \begin{equation} s^2 = \left(\sum_{i=1}^N r_i^2 - \frac{f_1}{N}\right) \frac{N-1}{N} \end{equation} Variance of the second-order jackknife is not evaluated in \code{specpool} (but contributions are welcome). For the variance of bootstrap estimator, it is practical to define a new variable $q_i = (1-p_i)^N$ for each species: \begin{equation} \begin{split} s^2 = \sum_{i=1}^{S_o} q_i (1-q_i) + 2 \sum \sum Z_p , \quad \text{where} \\ Z_p = \dots \end{split} \end{equation} The extrapolated richness values for the whole BCI data are: \begin{Schunk} \begin{Sinput} R> specpool(BCI) \end{Sinput} \begin{Soutput} Species chao chao.se jack1 jack1.se jack2 boot All 225 236.6053 6.659395 245.58 5.650522 247.8722 235.6862 boot.se n All 3.468888 50 \end{Soutput} \end{Schunk} If the estimation of pool size really works, we should get the same values of estimated richness if we take a random subset of a half of the plots (but this is rarely true): \begin{Schunk} \begin{Sinput} R> s <- sample(nrow(BCI), 25) R> specpool(BCI[s,]) \end{Sinput} \begin{Soutput} Species chao chao.se jack1 jack1.se jack2 boot boot.se n All 203 227 12.96148 226.04 8.022369 237.54 213.6789 4.123431 25 \end{Soutput} \end{Schunk} \subsection{Pool size from a single site} The \code{specpool} function needs a collection of sites, but there are some methods that estimate the number of unseen species for each single site. These functions need counts of individuals, and species seen only once or twice, or other rare species, take the place of species with low frequencies. Function \code{estimateR} implements two of these methods: \begin{Schunk} \begin{Sinput} R> estimateR(BCI[k,]) \end{Sinput} \begin{Soutput} 10 S.obs 94.000000 S.chao1 129.000000 se.chao1 17.243915 S.ACE 132.601934 se.ACE 6.153456 \end{Soutput} \end{Schunk} Chao's method is similar as above, but uses another, ``unbiased'' equation. \textsc{ace} is based on rare species also: \begin{equation} \begin{split} S_p &= S_\mathrm{abund} + \frac{S_\mathrm{rare}}{C_\mathrm{ACE}} + \frac{a_1}{C_\mathrm{ACE}} \gamma^2 \quad \text{where}\\ C_\mathrm{ACE} &= 1 - \frac{a_1}{N_\mathrm{rare}}\\ \gamma^2 &= \frac{S_\mathrm{rare}}{C_\mathrm{ACE}} \sum_{i=1}^{10} i (i-1) a_1 \frac{N_\mathrm{rare} - 1}{N_\mathrm{rare}} \end{split} \end{equation} Now $a_1$ takes the place of $f_1$ above, and means the number of species with only one individual. Here $S_\mathrm{abund}$ and $S_\mathrm{rare}$ are the numbers of species of abundant and rare species, with an arbitrary upper limit of 10 individuals for a rare species, and $N_\mathrm{rare}$ is the total number of individuals in rare species. The pool size is estimated separately for each site, but if input is a data frame, each site will be analysed. If log-normal abundance model is appropriate, it can be used to estimate the pool size. Log-normal model has a finite number of species which can be found integrating the log-normal: \begin{equation} S_p = S_\mu \sigma \sqrt{2 \pi} \end{equation} where $S_\mu$ is the modal height or the expected number of species at maximum (at $\mu$), and $\sigma$ is the width. Function \code{veiledspec} estimates this integral from a model fitted either with \code{prestondistr} or \code{prestonfit}, and fits the latter if raw site data are given. Log-normal model may fit poorly, but we can try: \begin{Schunk} \begin{Sinput} R> veiledspec(prestondistr(BCI[k,])) \end{Sinput} \begin{Soutput} Extrapolated Observed Veiled 109.06813 94.00000 15.06813 \end{Soutput} \begin{Sinput} R> veiledspec(BCI[k,]) \end{Sinput} \begin{Soutput} Extrapolated Observed Veiled 121.08212 94.00000 27.08212 \end{Soutput} \end{Schunk} \subsection{Probability of pool membership} Beals smoothing was originally suggested as a tool of regularizing data for ordination. It regularizes data too strongly, but it has been suggested as a method of estimating which of the missing species could occur in a site, or which sites are suitable for a species. The probability for each species at each site is assessed from other species occurring on the site. Function \code{beals} implement Beals smoothing: \begin{Schunk} \begin{Sinput} R> smo <- beals(BCI) \end{Sinput} \end{Schunk} We may see how the estimated probability of occurrence and observed numbers of stems relate in one of the more familiar species. We study only one species, and to avoid circular reasoning we do not include the target species in the smoothing (Fig. \ref{fig:beals}): \begin{Schunk} \begin{Sinput} R> j <- which(colnames(BCI) == "Ceiba.pentandra") R> plot(beals(BCI, species=j, include=FALSE), BCI[,j], main="Ceiba pentandra", xlab="Probability of occurrence", ylab="Occurrence") \end{Sinput} \end{Schunk} \begin{SCfigure} \includegraphics{diversity-vegan-037} \caption{Beals smoothing for \emph{Ceiba pentandra}.} \label{fig:beals} \end{SCfigure} \end{document} vegan/inst/doc/diversity-vegan.pdf0000644000176200001440000113315712122046457016725 0ustar liggesusers%PDF-1.5 %ÐÔÅØ 80 0 obj << /Length 1935 /Filter /FlateDecode >> stream xÚÝXKãD¾çWøèHظ~qãµ E‚e'‚ÃÂÁãx²I<Ä™…åÀo§^m·³žà4šÄqWWW}õî$ØIðÅ*‘ïO6«ŸÙ4Py¬UjƒÍ] Š"Î äZÅÊ–Áf¼ ¿[—&lÖ*ÜUðqühÙ² ›ºƒ_{üصðQWûudrnÛ7k£ié‡öŒ?ß®Ü<çãT\¦©Æãò4.“<ˆ¬Ž3X¡Óžã!§–y}Ï?ÁO'#Ë#òY}¾Yý¼R E¨ PA–SõaõêÇ$ØÂûçA›²~!ªC`-Òշ$Ò4(ã2ÓJ¦ó2NË<È pÑ9‹öñ-Šÿç|Tõ™d¹döá³Âc©4‹MßElARb´y¸³È¤I¸íÖ‘ÎÃÞ<XKøy†E @ÿ /î몥¥qþ~³ÖEØ @=þ<ãÏ·¼Ž/Úx–§-/|BðÁ[Ç“¥:²­2íbLœ kÀ§’Oµ¯´¶q™gŽ6F‡ÉXéÆ @¢‚ $au5h‘ö‡D¥äBƒ$ ¼†)ã3AÓ×nË-pÍÂß~€(fauõ­ ò ÿDþ?? EÏb–îˆÂX> µ›-ÿ mH|à}Õiä±MqdêîÎ~d’Ö=šðÐy[It¤%óî§"V²£=^ÈÐ’ªDKªìÉI D‘xBÏ©vMV°ÉhmA9ÙóT\v-Âé{ç<Úé¿—ÕmÃ{êîp ð˜n+R¾A_³ï£7:°&+òÂ`0à|b¨ï$꜑ĺ: ï*<¹ÝËRCî4Fw(dË6ø°/XŽ‚Ù,GÄÓ‰TtXšè°¿gïªÝi=3­nœ2$|ÝðûÃèãd¦%¬jÎ(ÏyÅÄ;§|!p{[~ ךã:…E!!kr:KhU÷th7H„ÑaU‰) Ü^`(‘ND" ¹GvuÛŠÔ܆L¤'½ó¾EEhñÀa»„ìÄïi30‘0¡w=EF$NX0ãßÅs8 !c a&Éí2MÖPæ\RÒ^P#¯ÜËG4mw¸ý›óÈ}ðy •šÐŒ q±;ó3ñÀs]ú§=Õp”ñÃo¶>ùa.ø”35À˜<6ꯕæf•@É/•FS@‘MKHéiœ—Òm|%ñûþ<™j”Kø{»mÛtæ# þý²róAú²7›Ô„7Cf%<ôZ‡7¸—ŒÒ‰¨_âömÖ6×á`í·®P}éœyÏ%ûˆ»|• 8nÙôb,iDŒë™öÍe <²ª#.‚K¤Lì¸D™æÇWgÊ’óE¤mz%C¦ÆmžJc…ÄP˜dD9P‡Ïœæ]'ܰ¿wæyœÌ’ ÝŽ j]#qàTMë=Ó:aDʨÅÓ™Au±H¹^—9Gä'dI]-fœ‹$N…ÇKàcÙ÷Êל|­vUWQÕõ3w?rûþµ§Ùá§¡x²÷{Nâ1°gÈÎäœ[ׯhnÿ$)ç„)5нÛHü%$:o%EsÆÓwêµÕl6ò3ÑÈbâE^Þ›ÏÒïÌ6ÏbÓÄÂ`˜~l ý!#:ƒüUfÕ@f€OY# ó“$$0?Ÿáô„û! cpp»ZG%4(Ÿ1Œ8y©É(JÅ…öº “^& ø‹Óà´ ÜãË/VÁ«H—eiC=?Ðp:s+±æƒ_¢N.¡´Ý0B=Êú)“„fž¹dÃÌ7kèëÙ‡¤Lã÷ôò*<ßI¿È^Òº-ä"Áö"ö‚è:I–˜0È{Q+Œ``Ͼ ãTˆ?XGArEPV?DçºF€ qÆÔåWcj¹§žOIgè Ñß±Yaÿ¶8?>ŸýÜ1OÜï|¥IòèÚ{S2Ét }q…-w:;üRú@”­‡²”Ÿa°/N—-Ë€ôÙëÇè‰v¯‘ê<ƒ,ž2ö'¿rMmÓàúßÁíoa9ìÙ#w—©H<ÞÏ–ƒö†ûaˆq¨Z.Í¢ûßzñ¹8ka¨þÁoˆ¹”iR^ {-(Å]¬”Tú{7ðº÷(ýñ w»áªy”ÚäŠÙ–“,õ˜,̯jê!ïõ%™~è=¶2 2íi.“œÜÀ0­k4£´xºöXvñÂS,þIxÖÒÆƒï?ð¥^;Þ‹Z«±GÒË㪠GT^/®e¯è”§e©Âä}ëkê‡òÍÜÔ‚Ñ\_™MxF}çò$*“ì©ñ"‡*ÀT²¨Ì¦~ô~BS\µèFŧíþëŽçŠ)•Þìzló»N>1 ®wè*…M•æ} læGå×xÁXLî'Èg¸}â4sì¹?â,#×Z3×i¹ùŸ9ÒB¿ÈBeØÌÑ˜ð†‰–§_ Ô߯’zçz׃T_¸Ý´};ÜÀøö”¢o³å†X6’!Œ3Äã7ÒÔ0N“{¹B½ !jX[kŸnê\žçG’ËïÏ7«?mǼ< endstream endobj 91 0 obj << /Length 3059 /Filter /FlateDecode >> stream xÚÕZKs¹¾ëWð¶d•^3˜­8ïÆ±½µ‰c©’TíîaDŽ$®ùÐrHËJþ|ú $(ÉëJUræÕh4º¿nt7XŒnFÅèÏg¯.Ï^¼v#Yˆº¨åèòzä䨲•¨µ]ÎG?Õä—Ëw/^—vH$K%Jm€Ñü}âô¸½iÖ9þv25žfp¿YnnpÅûf9™j­Æs|ñi¢Ü¸ÝÂ]‡;||À‰Î /ØTÓ0ãT[áÊ’ç½¼…Á­P é•VË O´("Q'Ìu!dañ ;›¨jüqbËqsÓN¦ÊªñmÓñ I{|¡Ç+1™Z;þu³eZýêÊñfS¯qÀWì•Tà@x·‡ç%~`Åà”¨˜E³£Å;Òl³|ðÃ^’Ÿ [ÀãªYÐÀþøÛ™ÌÇf‡w¼…A.ç(›ÎsÔÈhj%è·EkaMͪXµd9¾Å•Vã9Í?U¦_#»-ßãëE¯ãmçײÃÕ¡4¦Ì.Fn®ùs-H0Û r{=­^ ¼¶ÈI€&¥e$,¢xsYí‘C»Fñvüñ&BГƒx$Çbh(T _7Î= ónC—DW;¦6’ß¶|¿$å{© ñ qY—ã¿â sÏrÝ ˜Ó8šE):þDððìg”6êÿÍù¯…n7@/æ=Ó.muP/äÍš]“Ù\ãµLÖ7ï £[¯µ§>Tbg¿>P)™NkÍžåCãžÜ¡×!/ )¯¼lHô—Ó’¾×¬¤ù!hxîÇŸ3ý«Íß ¾yC:mxÈpøû‰ªÁc”ž˜J±Ax‘ôõ‚Ü >Ú¢ø’ó67è—]Š "*-ûG\hÔÎf}fÖßO¸žvàKHÜy»Ñ›`Þ&0'85žÜÃïg›=[ÚyKÓ[´+^C°ð!šGØopm‚¢P!êÒÇÄÌ‹<ºvžÃ}pé[ U&ŪVšX6»†¿zÉ1‡Ö¶Cs*mº éîî¨÷»¥—˜d7ûø‚¦$å)D•Çäªé:~µÙ2E)ïpU„ÀÑ3[Qdô4s¤ú ây?!#5£’Œ•*ÉV*ëñ‚—Jðñ&"öË@Z0)\‡»É•ßZþD.ú¯Ö›ÕÝZÙ=A2îϨߪfq†£â+~¤ýÀä÷#|Ɉ^Õ<ÄGÿÜ1 ˆd–l^I¸¥ÚzÜ]#sº4^—¦à0ßò^B/0ü"œ€ë– ~¼óÊÛ xøøJl‚GÀý+Ò÷vÃDßñ¾FÑÅë _¿íbœÂ¬¬¢WkŠ%Ë€6ÒÃú†‡v!Þ‘(ø¬šW(¾±lg®uªq w hDÊ‚¤"¾‡ï{ߌ¬Nn#ßr¦UU£ZÔ¥*1ÓI•N± þȃȹ\\m›íf3Ÿ0‹¤ %,LŠ:˜<ÐCxkøÕwoé‹×T#´<T«D· Za+?ŸDU×õø{Žo œv¬hUFpÖv™dqÚ³†•ØB3ë×gŽ÷´ €ÁpcÁeÈ5ç‹O Âb÷™¦©””?Ò„m¬Ë¶ï:°0È›(õïBæ4üdÎæ·Tn3B‘·©’‰F@Ũ ú¨<ßd$•¨]Ÿf¿ô¬LBi»´qÍEá©ÔJ’ª`"+´ƒašV¢¼ðd‰ª§V°÷NµP•7Ó?sìDãКÆãlÁT²P)á\oŒ—2§*¸® µÄñ|VWŒ@ú*™/µ¾u=ArœÞ0…âȃü*'š…z®E¢Sr¹'媥P.ì‚6OÊšÒ¸ÿ}¡mbb Á£„,(”+2:í¤‚š!g:ðÿ>cZPÝMeD€ÌÈZ‰ªÔ£ÑKŒU.Ð@¯º6OC­ò%ÈSÏCžü/A/áÄ&6¶LRÜ'RAЭ„*äi Hk@ ñT@°Àˆs×ù",Þ¨ê¤Å• [p­ xègY¼Jd?añjeFÊ WJøªÝ-gº<ûí ›Å¤ª0RLúÖj4[ýôK1šÃG؈„ƒßéj¤aŠáËÑÅÙ߸‡’ 0Ó5È-ý²Þç À"Ã.w¶>' ŽÿZXHÐÀPÙÇQQQeݨ(¤} ö)1ÌcëÅÓù„ ÝiÚX>!Å* ݧà´¥¨ 'm„ª=vïoCEÝæÖ®%èGŦΣ¸<½,MBÃpë`¼¿£¤Ï7|¶¡KAédé+,¸v¾ráâaæ»YËA.X9ÁÐ`u 8çÌÅws¹þ˪m9ãI¡¥‹Óe×HYô~…ÿ¯úElVè 3ÌmäÓaæ[VÃR58¥­Cfä„ Iâÿ×ü.ôÀ$Ý‚´6cyÎÈ6ª€mç íæ‹Ùœ!‘Soô«Ì„PQÚ±Ò±D©¸Âm:ÿÀµ¢Ž††{ª_÷æ‡[_ýÓý:pÞo¹µDV”FR”˜1 ÄÐö5†sOª¤×~I ð3×;W,Œ¨OB}á¾5j¢Øox~íú†/˜úÒ4tGõib8ä$l§÷¡{MÇ·, VÑåN’Ž!®0)×ÚX'Æ^¶ý1LTê[@™3”оìÏx Ÿñd¶"i{,jû®vUP+ëÍŽ+ïÛAUÀŸzJm ÙKDí°ÁL¦¦††çîó…–ºlÁ„Mhã-eíððÃÅîçE ñ9ö¥4>ø#µy¯ùÚG!êXùpî‘`ø}Ø Ìûo¢aÚÞ T=ÑâóÑê‰>ê¿Ëmß…Ê–Öòti}*¢YŠh.‰h[P i.™î`ßÚ»ˆ¥+ø7*'V{ú±ô¤f'dÃÞѺl¨©Ùw<<ò÷Œ0†—ólj阢ò.S—zø›°\Iw×ÎÖûÕU»øúþ~*uM{DMÕ»Sœ'×&€L©:ÊÛ¨«G—®¯Ë–§ŽJ-˜²®ŸTZǬ:{Ã]GúµŽq,Ûµ:‘Söë ôãUÈ+Ƭ©¬ÀaS†®/Z÷ѽì3îÒöëwÈUßÍ÷Jn·ñT’fÁõøNOBAô@ä Êv.»pÚ²ìyêÌüàÔÍÅgw‹AÃﱃºDj>=f²\jÉD—mr"aXæ[‡ÊZP~ÉÍC—Æ&•–ÿ¥K²í&›àÑI¶Må¿ê©ò_¹‚~_ dЗÿÊkMZþ§Y_à¥!‹T*iP¥M§J¸ªÎôœäAp¯cøÏ¯ ^AA¢ëB©ñÖ¼Êô'Í«&”|Oµ«J¼·Ãv•OLl1¥š#–>+£Ÿ785ŒXø8#ߨ×ãr~³þÚâ)õøMØŽ–<’c]ø=ôm8Æ9RKiÀ}-÷—ŒJÀî¥ý=^AmÐöóÝ©YÃ~¨ŽÊŸC‡¬Ÿœû„ÉÔ¨p VjøÛÒj¬•“ýJˆ¾ÇCЙ¹È$Ãâ}ÒˆÔ m¡DNO\éLÙ( éwe•Øßç÷ª.žuf\%Äs`ÀÄ;Ѐe¢Å"ŸÝ)UŵŒÕîùiÔy6Ó¦®ž’Ø>ÙyG‰;ïà·BÎWËçå§_\qg×*66Sžgõ•æéÓŒS=nõät¤Nt{ÎÓé®䓲< $öË­j„<›5Ö!ÐÕAMrpÆeìà°Ï«æs¶ä(….õ×·r5$2œ©Ç—\þ ‚®'ü¼“¨ endstream endobj 109 0 obj << /Length 2243 /Filter /FlateDecode >> stream xÚ­YKsÜ6¾ëWpOáT™0Þ]›’¬ãä°Ù(ªÚ­²} f(Êó9–eï!¿}»‡ 0–•M©4CM4úõu£‡Wׯ~:ûþâìùKk*ÁYË[Q]\UÒqÆMåŒc­2ÕŪz]ÿ²u7ÀÇÍ¢QJÕ¿Âã;ø?àü®‡ÏÝâíÅ/Ï_úl'#Xk€í¡âŒGÆóï\œ xà•¨¼¨tË™v®ZnÏÞŸ1c…¶´8y¤¥ôJœxþóVT?îÏ~ƒ¿´q"i`Ûf²/IžcFèÊXɤ÷áÔ/IhQ_ß¡øýâÅ¢±­¨ÏÒ×o¸T íd4 ]ý9èH[¯ðµHÖQU7âný!ÐÜÐ{ðèÂú§0=Zá£AÁñG‹¶XÁü~»ÏϋƴœÞìqÜ/áYô«°r ϸ°ÇÉ[4B S_¬‘$RÄ寸¶¾C*8Ú„§nÓ‹…Wt,b´‰b€6¼¦ó"³5Î.iZ×÷7ñ8ë0îõ•uKÞÔ}ˆ'Õ[¶/p¿ÂC §ë¾[¢N×atHLÐÉ"åÇh½ÛÌ5žøßE“)%ƳàóhSéð,L’«ð¤§á0é"æ0!‰ë8ý) 4à`[¶Æ‘…ª·ÁÞ°1ÌÂŒLN…‹E®C:ï˜Lc–ÅfÕH#)¥™3"p]îÑfCИpÑ€2÷t”À¢ÔÉõ<8v8L‘Ë«¨†h <Âpˆ3Q9HI^Òh‘b¬Â)¦œMàò*Ј¶ÔrœHZÆ­Å1«\ âB*]Mˆ¾Ý´®ÞìAðË7ÜðÒ”`bÄ¶ß ;¦„O°‹xV”C0oýcb´™â„*£ÄM2/æJ“&ãÖÐ(ølOëL2¸ÞL¨Š²9få-$¿ÎB™>-ÚÎK‡GÅU"*˜ØeÔž)¥+Ï„—á• ž¨$˜#ÝmAXôo§š²J9!‚@wŒ‹õ7 •„m¸±S×j´DèY]U1¯å—­>7DÉÇ@PÙúG-Ñh…èarÌz²E¶Ý§’02¸ï¶ CTt.LI`4¨&D¨GH"Z«úâÐÍÒ\B϶p-À¡ïþ*PX®YÑi 6Ò£àï 'ôÌ·:Ð9^”vu3eaµI¾õª —‡@ò¾[b{nãJJƹGPóÁ²íX…I먺ÒB3-°Èzý–W+Xƒ Æ´²Õ=Qn+©ÇàÕ¦új5ªÅr©Æ½¸f2;mîl€1þ+¢‘(…ºg@Z&Žî yÑ(¨˜ Áo8;—wþá¹2ƒÃÚ£Ê*›å‘üla‹Wˆ>§ÝJ»1ï5RA|ˆÌï3˜ô£Û}+Nšµ¿x*ƒOÅY xd¸Î är¼2x¿Ð,ÚßN$&éd®×%SjˤГ´Ê!0 Æ.¹)À à§§`2j‹jÂÈÒÔËPÂÅ뀅Œ…Bf•(Bm¸Ÿo·û]Xù *ª‡é²?»R‚¹ûÿ«ÇÜפA¸œ-¹ß¶€!þñxrrÜæD]x¡ž˜üÅ_$Ø©ºFÿ™º†œàDb•ˆ>æiśĿ¦HMŠKzçô•ÀYèa|ì™ÂÄUègÈ/ÝÛqyÞÑoì©%Õe[‹ aã«=sñùw‹Æp^¿ _oÂ÷¡ÛÞnzÔÑnØßã÷÷?üo6¸~T¶B]R³ýÎóý†~÷ù&nóúݳ·GGÍl„‡3pKu¹ö¥¼íithxŒ÷Ïa•&¯©=± d~ÙzÚɈ;m÷ÃqP®â".\…ÇȶÞ_—cG ‡_nAâ‹Ä,š~Úe¹I-«Èkr>êà]SÏh›n'eÄÞ½µKÅõxË™µ*žF=¦Ær‹:Vä‰Þ+ïêÔ?еØèð°”ZX©~ƒ©ØoL³Ë©qpý.9glI)ï³N˜ÝVj„Q•Ö «Ñs³ôn™7#Hßn@ÚBÑ`á.3a{ðù.Sd죌cãp"T_bëZ¸ø(Ež\º¿ ¦˜>våî6$Y¨º¥×ó{8áÐØ×N­?øc¦®«ôxþÓYõ®Ã:¢÷ØŒ°»†drÐoó†ùnbˆªgó†dWñ=)>…*g<;± Y¯ÛØ N;Å>:ÍaôÑoÒm^†¾øuC-ÐaTÒ¤VjVè„öx,lºHÚ=è äèxl Œw‚þÓ ¨l,Ü~ÊpÙmn×]qW7‡u?0Z™fØWÓ•Ki¨ÜPg\ÊÃånO.õ$6;Ú¶>ïRW=´ ~»?ñ“N3n¥±"Ý$R;•¸L¿pHçê!)BÓ:Ædˆ«)H—d“ïSo}cK":T(HÃÿÅ18—„Omq\LA/ê‡hÞÝr AYñä ‘°K?«ÜeYV¶ÔJ'Ì¥ñè.8XvÁaèL…&þåè*dVrx¼§'­ôÑÉ&ýùúíæØÔ?ªºW&üVCE·&œÛoŽù& ±·¥)Žïþ’vF1bï'/n“°i—!‚nF¦Cúµ<*®O¡ýf,>Tˆ½ð“Î.X> /ExtGState << >>/ColorSpace << /sRGB 120 0 R >>>> /Length 2657 /Filter /FlateDecode >> stream xœÅ›MoÜȆïó+x´ávW_½Ø1 Èa±§ýÖ Ääß§Š]o7ef¦[ÜÕAcSd ûm6«ÖKÙåýb—Ë¿NßëÏ»ûÓ7_þñ—wËO_Nf5Æ,ûÏ/?}:}ógâ˜û_·_-–äóOõŸú¿F>¢˜5øåþãòÛŸûÏÛ…Âòæ—Ï_~û÷ÿÞþ¸Ü¿?}wßΩ?K°k ÅEù´üòOÌkLËç_–.Ÿ¾Б~{wf¤wßþ›ÂòßÓ?.fùùd—÷üóád·QþíTÏhuaù¸ø°æ [ËîMe%ÓöÖ­¾×š¸ßvëæn¿£5羿nîö‡²&êûëænæ©H}Ý”ýW©Êíu›âJeñyMQ®Ñ¾|o—ûrUä»o NaVƒÃh°5´ú°E»ñS[*òO?wˆ«u[´Ÿ8w¦µdn瞸}Ο$ø5¥…œ¬z9ÇÀøBZó£Ð•æ&ñÝbEg¿» ¶·‡»Pº=Ôš°šýiý@¬åذ‹Í±Äi‚örã@0g·¿LnD±çÛf¯8ŽHæìæ÷Sý×O¿~µ~¯§à')×:“râÅ·8Þz&ù¦5HFs«/ËÇSLkä&/kðá”x“÷Æíò>œ2oòçܧ’Öä·‹ŸoZÃÛ[:òÛ¦åÛÀ-ÑHjãMJ’t‹ö²éÒZÜÌj·½ž7“äA/ßlC^ ->nyútw²»›×6‘¼—3öÁ¹úàÓjânðE–y<_„âûàK–»¾ >Û•r|âë`úàùzxÓãê}|ôRweð篞o»¼<’ÓqYTmôY/ªŽž•o_ÝGø·öÉúª«j[óV×ürÿy‰2zŽªÿá\Z*‰øDÞ<Èrç½÷ŸÛó|4O$OÒ½¥ñè´­]›Üêòx4O/¸î›ñèVË{yúm–Ëò—l c<šó*CRÊ€ƒ±h ’7b‘»u<ÚYLœ6B˜ˆfÊr~áµ>¥›¯•ãsÛ5Ó} ±>“œïΠ4É¥,íX/yãQgJAŠË 5ü JÁ8Ÿî¾uœÏœüÌä54¢¯êÕ*æ%I‘áLQï©'øuÀô>3ìÇÓk990= <ªˆRXx‘O¢MR ¦QÊ5Ñ,#ZÎ(\/§ ‘¸ÒøK7¯D—Ï>d·¼¾ÃG:–/üñSÚz¹¯ĉ:Ó@’4?í4@?™&? Δǭ€t¤L6Ž Ô£VáM9®fÖ̤ã”äâ$@:ÎH:…#餯I€t\º‚9/º¿\fD(ͱq $ŒmݲÑýðlt7mtsmô€mƒ#àÛàˆnÜà878¢[78Þ ŽèæÍí9à Š–»6šNÑÄh}§hg¨¶ù”¢Eú| hG¼;E;™×(Úùmz@ÑŽ¯í"I í’ÛZ¬JÑŽÇÄÜ{¢›¥è¦@)º)PŠn ”¢¡­ @Ѫ­ @Ѫ­ @ѪàEC( @ÑPІP4€¢UA£h•ŠV  h•ŠV  h•p(EK•)qkŸN(|ëŸzu‘ÇÂ?ƒH5Fø„cávËÚ²|òL8êj›À`©7œ²xqÎ@´TâG"ZíŠ:¾OÅÛuòÈ6Í9@Z¨Eêåx´t§8$IÇãÑ ß¼Ò8‡ÙsíÛCïrÆ>Kx¯Ñ—Ï>ÑŽ¢ä›D[{(D_øÙ&·-k(Ø #ÄÏÆ¾¿´¡›ý¥ âTKý¥ ÝÜíg>°¶ï¯›}¿³A²öëæn¿$úþNŠnîöWó¤í¯›§îÆé;ÔìuœŒCl–£êV|«åèü¶¢`9Ê:sÝ/¥ÌÉÐvË‘BVK´ZŽÄ¨’wž#ñ-šl7ÉqBsÝu$ge,Ív$*Û,_±|…‹ù´]B–çý&AÇu |NÓ]SÇ#7{ \n³ßI`‚pa'!éät |¹|ÚIàâìNÿ:ګƯÐyÙIu q£&A¸Ìv d7–nø×´óÜ…q¬ÙIH[7¥KàÅÊNBÔ‹ <Û÷èþ:þÎû‹¶]m¦|hm¾<ðóý—‰â|„KÑÚÚÿßõ p8¢w pZ8¢÷ ôˆÖ,Ð#vÝvŽèý†Žèƒ{Þ˜úΗÅÃÈК œk»ùÐŸš ¼¶½‡ÿÖDÃ¥ïâø› ܼR0ô×&çz¬ÍÔ§nrË"?ÖCjø¨þEÃGõ/>ªÑðQý‹†ê_4|Tÿ¢á£ ÕÁhø¨FÃGõ0®âcÓ¡øØt(>Bð:€ª£á#t¡øÀGè>Bð:®á#t¡øÀGè>Bð:€Ð|„à#t¡ø‡â£šJ³ø¨¦’ࣟà?5•d _`*9ÊS5•人™ðj*QÊS§®’Ô¨©ðj+QpSï•©¯$7ÉÙ·ëo3–äžJóÎICý¼ê{Ü„ð¡^/Ÿý%ÞRÙžî:>ÆCéñò¸Ÿø#§ïOÿصcF endstream endobj 122 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 126 0 obj << /Length 2636 /Filter /FlateDecode >> stream xÚíZmo7þž_!(NÂE[¾s·=HrI¯‡^ˆ¢@ÒdI¶•ZZG+ÅÎýúÎ ¹Ë]SŠórw_†µ\’g†3Ï %F—#1úáÑÓ³Gß¼(GR•¨äèìbTÊ‘·¾¨´-F¯ÆfòÛÙß¿yál:I:U8m€ÍùeRêñòr¶™Èñ·“©1ð6‡v}]_®à‰íÙõdªµ/°ãÝD•ãåZ ¾îðõ=.ôHÆ\MãŠSm‹Ò9^wß½‚ÿ%önÜà2kz±ã Òܯñó|2U&Éñ–Çê ~âÚ›|0OðÄ—=q‹ÄŠÉÔz9~Í;ø¿iéÌqåå"] :`1x±¦O—\6 Üœñc^¯‰õý&pDDƒ(·Ù©¼Òà3pr#õš5¦d*@"Ô…5KîgžÓ“1Ž—>êwXç(Á4­â¬MŽŽ($XQ˜qLƨ´ MƒÍ·Hlж¶MUYx[2‘å™Ê¢4&Â<ÏóNÃ<5 ö‚¦¹Â•NvÚfº,œó£dÒI†”t…­JÀi×_Ñ÷8³… Lu¡¼æy¿æÈ¾7Uº06 ‹fÉ*™¥Š²ÔQš'2'pD‰l‰2pÿZX¦*Ó›« ©Zå¼BduLÍ8ëm†wSÀR©PWÆÀR@ É$`KæÖ3…2í¿ËmÑ’’ÃŒ[:ô[:ùj,§ÒŸÍ½+Œ”9“ðá[i‘A]ª¸K¥r|•…У)| Õ;…÷4¤}õqºËÚ½žÙäð¹BKîA)×;!ƒV…‡ ÒÙv§š-HA¸¾Åq „Ý$ý'¿Ç~ *súwe¡¬Ê27Pk%‹J: ØÓ˜`M>Úçhj”‡ÓÄáFø‡™X‚ÐT‰;lw°°`»s m8z¦OC©÷: ¨ì¸‡¢–¢MÖÊBzÕ¹ëÜ1ö¶5µÇL>=£Z =eQvG¾5àTm¥ª\_Õ ®XÓ4Ø«5xLlUµkȼOWH®ìÀ!AžsÆè¹jÁ Ê·!„ZÇb¤xߢ¨·ü$’©¤‡ ZNOE·84Ã÷ÄÙâ•ïGkš¹D"бÔ&¶¡ÿŠ5²Y7Y»te¡¥<±+ðtqü‘KC(³qâÏYB•µ‰¥(@e„ Yzàaz˜ŸvÇü4dÒe1YNQ3ؾ!d";ŸT‚8dµ /ˆÉ”m¢\g;~inXƒ(üÕ2jëÞQ² È.Vçyí6¼hO&8¸T<\kõVïrq±‚3Óâp¦6G.÷[æ<@KÜùŒÍl}6½d›ÓÀ·vUßæÈJ­c€þï¼ÃCÀxÌ®.™v‚iéÆg¨‹x­oÏ$,µˆvÑ5tÖäô=¿°Þäa)@éÖy/´ÚÎ>†Vˆe¥ý¡Õ¥íˆïa²Ìƒæ‚‡I,¨ê|OÈŸ¶~An¬™ y„æ°U jøph°›Þ`.êÀMêXáõPÖY—§ àD=0¿fÎé’NG¨9°rôæ1Ò*ñÂ}S/8/=»êh¾›3\dENj¾ÆZ·4¶D‹Œ‰½8ŽÞåjûég1”çð(€Ø.fw4¼o )5¨Í&©,Fðà,¦É¬“¦Œàôs=l‡ãÝ=½ø[jÀ–ãPjüg~¨ iAJUœÄù/›ÄÉÌâø8rn”RÊ/¨!÷|®µ¿ÊR¸äͲiãZ¸¤Ì!Lxýÿ Kékº¿œ¥PØSõç¬hz+¾ÉæEeÁ½…¼ÈÁ£Sy$/úO¥Eæi‘< 4 þÉša^ô¥ðA OðƒH½ÉmÔ0)HždÙnÔæ\§*T™MÿÊLúg ,Vßî2®ª7¡d …m±rÉÍ—?<½¢Pöªš¡s6Ÿpº°§X8!…`£Ð®XÐB áfL¯¹û ¸ÙÜ8cˆñ­£Üì;±oNt)î]ǽÆÈâ%Ñ;qµ Á®ìa× ÔçL?ØQ•øÉËlÚÀŒb‡lU'¸Hñ ”ïë»Ä¾=úÂzÌéYó)ÞÆgâîV†d6ß±—í8?Z#J¸û5'µÜ6zRë-®dŠI¬µâƒ¥µO/Jä ÀÿcíPkÓBì³"Rü%§¾Tú õ™Oð´ßM¦Òù,IJ€tÎå–;4 )zÔªó¨:Te§Úƒ?±(Eã/lREî½Vðx7ÙD0ºW¼$z®e3H€ú>~_äñf<€X~¹ë½÷XápX%¥ÌУ]¼„äÎ !b¶Ù­®—(m}{º_7Ø|úìG”E+Ü•1S_ƒJ„²±eÛ>O}ŽÇðñ5‹4Ò}aÙ…ˆh# ÁœQµM€± ٖ妠èŒbqg’•àÎÐ…Ü %}K(iê“dE(XÊFÃV”êm6; ­ÃÕ².[q VybÚ¢  ÍcžëdÈf!!DºÍò˜û <Å´Z™ò:–ïƒsßzµ9¬áîšã˜\_rz‰â™ÍL1UU9ž“Mr«á®ú"Z?Í©8º/¹M¦šŽ…/ÍÂ{ Rµfü¦½½ìÕÈ@}îåú¬T­þ°M·º”TóiB¥\÷kdÔ!H[¬lù»]…¯È¦Ã5¥í*d+H¿u[wµWЛFûÁâÂuö„ZÇt_Šñßj\•í"ìÄŠ•IË6KÀèwþz½]Ä…îá[×›¸ƒ­á0ÝewüQßl]G¡h3œ1ØA(0ÀÿCÂVìÃí%²i+$´Y:†»ÊÄ!›Âƒ*&QïÍà Ì©,ÚðÅw\ÐA:ìõI8Ïqþò.¨Ž–\wž|>kº—ôL®Cµ;á–6zøþž*6ÑE…¶¾£ŽÕ ØQ®»ÊKwË<ðçÀOÕ‡O¿zØ §ð–@úÛXm¿…Àš.5zëègßM°­þ|"¾-’¨w+ØW™Û Í5ïe” …»Äm3™û‡— îC"íKtv}M¾øÇ':X† 8xrÅFU/Nö)¾’¿ñìO~:}þaüƒ\×’ 6ÐýìôhJ™Ê ^¦àG½‡d@£Ñ;b»g–ÆF!ã^BÜJü€_[Å&Õè±'Á£s\òhr@ºÎ¤ŠÉþŒ/;‘Ü)ŽÐ÷rNjï›2þ¶s“M÷ÛŸ&¨›h}w܇j«·ñB Žy½Ø^e«&&–ïÛèžMçJH˜ZØû× Æhye Qe¶L*­O!jÈUؾZ†ñ23…'b‡2:šR’×u³ëä²èÝ®Ò_=­‚Ï|ú :Ì©¬LáC¶1> stream xÚÍÙŽ#·ñ}¾B~ÓÀžvóè+ˆl'›Ø@ÄÀ¶z¤lI=VK{ ?Ÿ:Iv«5»q°Ø›,‹u±ªÈ|±Yä‹¿Ü|uóù«²X˜ Ëe·’±nˆx×lL°üi¼²Yþ8çQõ„JïD´¤öAˆÏ"- 4]ŠMÛÝoÈ`’#b~7Ñ&üŠ¢F3¹M½ü†È'YõaðØ´³D]mxsí[¶oø³'NŠi‘Ük·|Dš+™(ÒßñØ:Û¥•²“ËÆaàÜ+²mÓqG°h«Lö;¥@§÷ü;ÏÚ„Aâ8™ÏÈ›¼Çí½l¹À-#©ÜfmDZÄ’lhx=r4ÉÞUBŒ*_h#‡.®°“ Å£‰ö€Ã߉kX n⌠¤¿pzÕ¡h‹:º!9=!ÎwüAøgµ(õ>¶®—8«E*ÔbgÜ1AU¼qbãŽ'cw6(ߨui¶)Yµpj§<{³Ä™d°HüN ‚§Ãó gÉÕùop9êd Dǃ´±¿øë’žaÑ3®Ó‹ã8N%öJR¹jô#÷Œ§rAîq&ËkñÍfÄ–óü}>ZlЙÄSžÐ!‹³B-~G/ÝnD-uú@L"+“n\ç‘›tšãžu‰“*Ü0ããa/ÖdÆñ^ƒ#Çðõ)a°è ˆ‡* í-²´=Ê)C &ä|Ê6xÍNïŸò"'{Ë 4¬s˜ÃªœV¬êA·Ae*[qê ræ…0.kªœøã-ÄuÐt }Q*€t3œôYåðÐN CBEͼ³…Í,œ£°hr ¸ ª]½üB¯F± Ïj@jªÌË3þq{gÊ ~Ü&´"´¯ÁLæU;·üE MŠØYYÁ¦¬•0ò“|eVôÉJW ¶Yd@Ãìí,2 qñÙ.àMm>Ñuóçû›ßn èt¾0‘×Ào³(ò:+@¦«ýÍ?ç‹5 ‚ŸÈ¼+ot¿¨€qyÍÝâû›rx?&Ë6 à|SgΈðæ¢÷œO­Á;©ÖÌ&}f½S Áb} QÃ^mD“ç3KqSØ2fk²²©ê‹Ð,Êÿ[³ðU•S´YŒýS]dXê«åûA‚hþ3AüNÌ›Ú\ mÐ%ÈÌìØ.L´ 'j t£§·š§óÑ:ðùêMIg3åí(xt“æÅÞ!âÆvˆÓ; 3¨ïõmQrHxî"Œ–0rBˆ–½Ù ºAC°ŽS Ð\Ó8†wû}ÈØ±º€ý›>DL÷ô~J(Ó/·9ŸèÀ^|ðyÛ¹|TaÆa0S:ƒÄÐEøË¬ç3¦Tܸñ/¡kÀQðOæ´ÃÀI¼È&š:æKÒžËâ`(†,í!Í’a¨Ýø¿šˆ£ýl–ÔRöÀË·ó‡GQ›9RGâJ  …¸“÷^®ŸS¸“_?3¡Y7>J^"U”·ËÊz,nN˜ZËÁ_ÒTÏÂïƒäåTkPJiè-ÁYŒ¯inÈ;ŽÞ½Ï—?„úe$8mT“}ÿ«}H;n­ÒbNgµæÓ'¨Æ ¶2×Jμ>'Ø´vdMTh-Øæ’P`éÈ%Lp쉇³ißWA6SqŒ+^ùÓÙ³9§ð5B‘¯p‰¯p‰ÃqAT[uNXšÒË×ZöyØ©› 54l’ ¨ Å¾¨ãMq6ÄŠyŒ”'^ ÆÄÇ‚ ËÚ‹?>Æ…ÚcºhÌ}HáÐ4E1*RÌ׳êœ>Nkbk|”ºP¿çï+1Àwçª4íxH 3HW)Ÿ]Õ€¸Kð±GºÎ»$%Æ\y·kjߤ¦³f}ÀénWˆKÕíaâ5üËŠÅq³Ðæw¹™lØæú&'[1£Ò÷dçuVWåhçj0@NzxÎÅÜï8\9|~ω#Zóñ¢RÛrTT¯XIß\caf56ðf>§­\ŸJR`ÉÒ»!‘é¾=Å„žô ­…£ŸˆE¬8…^XŒL&)à¦)÷äü )·Nœ¤Üƒ&óùØé0‰€dãZL4ž8fj›¦¤d¤(Í4Ëû»¬€)I2>?• dz•‹˜ËEª ‹QÈ1Ù ló½ ÍK2 „U&jh@§•‰70…ÊüçÑuh‚=Ä¢Ñ%_Õôg½©°Ç•žW ‚4ôÆ`Í O|Pmü¸Âsþ‰ud&*W‡©¦\;âµ-–÷Ì.~ôÆ Ó+‡1§·ë/ãHˆfHe r¦ïù‹!-Ž#Dä-~]ò–ûå¤ KtŽKíåc.Îã‰Ò4t{3^Ñ$Z8Ã*Í-@¼‰© ÷Dï¸3„•e(ôZþ¡·+¹ˆ¿R5àÀ±¾ T×£L®º~¹ C—|eÇXháY…G@‰†G0¸§%¶¤ ç=ðÌШ5y™»±m57é0p3V÷ûçð¾cÐ0 ’K1ȘBtL0ÍZ_^”ê½!ކ R’=}±1HÞª7ž6ŸeWt#ÍòËøÖW™¼µ`™‚‹þŒSa¬ :„ÍQ^ö ¹d\¿ŸÕ¢•^Š£¦V9›3òŒªYÆD„.yHC€"äÎÝæ`ÿŽÓ9&žzÂEÒx¼¸÷Å¥OjÅùÈÿVœ±tôÆd|UΣj€—ó¢8ð7nãÈcG#a+öû›þ½Ê/rHœT4̱}? +)êð^‡ØÔi¡–{žÆ÷¼ÐCÛÖË`ú–k7›è*‡u?Zo=ªåáÄC/Cûö×d!¤ ÷£î|_ÑÌ>ªàG“Žîu,$Ò¯·r.òi2Ìi˜XØNÏúÉS›vü*eÞÚðε‡–³³÷c¼± )Ö¤< ¤CPVŠÀ_¡Í]\_SœQ² _f6¡È “­õöu7Œâu¢M«gä˜È^ö£w1TȳWŠPäÍ• Uè¿úŠ‚OUr&ÔŒŠã]Y—Cl]$Ûjíz :ÿ¾mqòæXÄ‚’7œ5×.+½» zž,ok"ý(68#W¬ º!|¾±ºÈ€vmðƒO¦kM>ŸCÿú"†³ýlƒƒ92ü¨æ‚Äñµ€ ]ƒþ^à¹ðÜÚ:înwÆñìÔ@7´9æbì˜õôêÄ–%Y ùKÞÄÞQàüyÇG±–Ü›+Ð<ˆŸ.ËKå“à_‡t‹¸t±‘:iüêkhÃíµ¨º¤˜[iGæ–CþhC=\6ìáØûkXUæÆ%,ûR ïY2[‘ƒ(ô:Œª×ésÄ„iZ„⛕3G¿#5ÖRîÓ²,¡MyüI‹å±‹|F»–à-8½—Ä'¯D<›ì-~¤÷wcNLG„þQ9ïì¼ÍŒ÷ÓJ„kêP‰0U ßÓ[Êrô¦ªJJç]±>$ж76©-‚<*¬”¥ç”ØPe©Ö›Ìû¤xm~ôÖ½e·a'Z 'ËžžWêéÛhqnˆÏñ¬92²•<á:†ÚQ wbq3quBœ)‹¬Šu’ïg诳ª 'Æc/qI#)œœr”; aGpì¶ázmxƒaÎ}Îq«tÖ"ðñÓ=ÌP욬rå´ÌšR\‚Í…BËvHy§•'ÐñŠ˜É«•ü§Í®õQ;(>¾(Ë£Qެ7Ñ<Ú)´>Òg³ž%Ø&RD#ô–x xÛ ½ÜTÐùéÍôü”kW`ª<¾i­±¤µwU¦ÏMì‡èì—‘Ó9ϯS½Åg¦ô³—¡µ\xXŽÏ\ÀG… °–VúT0¸|<5]ÖÝ3†Ežª—׬WYƒ—ÁÚ!y‚Šü”Écöá-Æ5=ÿ†¸w#¯á°¹Óû¼“œ^ã3i‹F)•O‘'_ ÑÇ£\™’êÆ#eúºöôž3Wû(ðV÷Ž‘‹BµSê @ò‚Ø›äzž^‹^F~ “!€%}E‰KD‘ýJ/J†@þœèÈžQY¨#W Oí<ÙBÐð`,¶·Qñ³‘/Ÿþ‚oÿ7kΈ‹ endstream endobj 150 0 obj << /Length 1882 /Filter /FlateDecode >> stream xÚ•XK“Û6 ¾ûWhr’§1W¢¨W§í¡“l'½5uÛCÓWÒÚš±%×’7»—þöâE=lmÒŽIAà ÀÛy÷ÓêÇíêî>óÂ@åAzÛG/ ½4NUÅÞ¶ôþô“õ_ÛŸïî“xÊ&Z%‘Äóû:‹üjg›uè»Þ£èöÐîjøGÚÖ›(Ò~‰OkùÕ¨‡=_ð U йÿ+í6îäræ)+pBPÐî‚2«4h‘$©¿]gÆ·Ï-*ÖYPÏ|I Zÿ!_<Ì=°FȽ#©<Îùèo˜m¦e‚ý2o3a{D ÎÈ wHce¢f„¡†=*fŠ3¿¼ÝŒãc…6,ÛµNýÏ‚3¸Íªõ&s;ÙZotâ·5I=È×ñ’ò\‘*Á\”X³U§«ö( `³8Á· ýKÅ"M7{äÚZï¬ M² ãò[˜Œß6% ¤{/jƒ&» °O÷1Y@útLÊNÖñÌsöt¢¨„J?ãÒ‘ìT1¹eó) xß O(˜,2ÞmEà'q#ÍN ÍÔ âHEIâb™¸ûpÔÞ»võ ü®CѱnÜ›É!$@æ*Ot"@bâLåaÈwûøxiø¥í-š­¼4ÝÆY‚&N^çU=òÍŽx¾˜Êºcú»Í0g5ÌösQoyõÉž»¾:}¿ýøÛû¯I?¶åè¶)ë§Ê‰~;UÉ»»7±Çò4š¤›@eqÄÒ#|PM¯J›ï×yž_ 3Ô-:¡åˆÒØ!WNb´_ƒ“¼0øÒéÄ¿¯÷¸£Ç)CÑŠÿ'r)@ v¦ ê…{B‰jÁeA{ª ÎXû F4‰}¦ðj1äê‚çK‰Ð'Œ¤k\aÀ•ݨ2Ò¹µzå0Üá8tòª/+ÐKðT°pó^t(PÊžG‰^Àè6Ûµ~l‘&,.Gáí<Äcð¶FîÏ YŒÌ&ãÄqozM`É)SíxÔ1†S&­‰K!†ådñȤþ#åˆB妛Sš…µ/%8\\Äd¾ƒÌ™ÉIÕ‰É#“ûö<^o€ ²ÅŠšñ}&¯=m–`U\ÏÃ=:[xœtç!=ˆƒÓ¬*Çå–É“­…—M/œŽ[¸Ãí‘l·ãÑÌî—‡ã(÷4WÇç”a(?v.í9Ûº8´&’! ì´¨G±y[Y¼²%aˆÑÔs“ wrÛ çy)Hˆ#DŽ,ëÖölía©™,MX)~¬ :Ñè6:1ì|Óª™K4ÀSÍo1ªõŠ[‘øZ,{à1i…§IŲ`Bô[(6:rlÙéœk(bWÇP!x;öz˜ä9WÃt> /ExtGState << >>/ColorSpace << /sRGB 156 0 R >>>> /Length 753 /Filter /FlateDecode >> stream xœµVMo1½ï¯ð„˜zfüym¡H•¨‰ÔâBI%ªh"Äßgfmo’6”ÍF²›—ñ‹=Ïž7FseÐÜ›‡îƒy0>ƒuõÉ>R{­æÆ|ïÎ6ß›‹YgÁZkvŸ³‹kù5zó»ûôÙXóµCs%Ÿûu€yßÏ»³K”éæwúX›.ÉH[¾g°hÈ"ä`æ+óbùÒÌï%<_woçcé9ƒŸ@çÀ@l(Xöx:F™Vè™ ¥ ‹OY¥crèxzÈÀVŸ!NÈœ¸,K÷@Sè"xŽB'莎 Êìœ Nȼê΢ŸÇrO@è„A5c΀þ„3‡Àro³S_¯“ †#ø ‹¯Ê;k'Ì^÷õÔM)˜š»“× Òy yÂâëÆ1øCf!^zšU¢Íº7ʼnW"2Aæ —fö8Þ BªñDz®‡x…Cœ¼×¢mñ‡¸ž)ç‡xƒC|oAÛõ qÕ¯Ïÿvs ÿÍ­t’KªòÔ@yŒÖ«™1kóQƒ > stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 2 0 obj << /Type /ObjStm /N 100 /First 799 /Length 2196 /Filter /FlateDecode >> stream xÚåYKoÛH¾ëWô1¾4ûý‚’x= °;Ävv (©es#‘Š ’ýõûiÉ”l=+—]ÀF7›ÕU_WëÑ’L0Ë´`ŽYÁ" ‚IŒ†Iͤ€?'™ôLFÇd` dJ2ìH)¦µÇ ÓƒcûTdÿàh@©53ï ³`bk0fÈ$sÊŒŒbÎP3G‹ŽyᘉÌë’·’YÍ|À“a°¬gÁ |d¥9О9Í"-µŒàhq q€n°˜ÒF<œ0\Ä‘|€H¦X{LZ=òŠ)ñ¬™28˜Ç¹,˜xËÁó 0‡cG¨ ,´Tð˜V šQРh­í(Bç‰X·úÀÞR`ÝI… 6: ´.ž0PTh¾R@F$(ÒïFÖ0Jh:*&ÀNŒ†š$,d°»,T 1V5^1^yPB® dXIF‚Á7 ð4!$, ³A¤‚ÖéæušåÝÒnZÝÓ~Ê¿Veµ(&,/§lÖ–ÝÛ|Φ+±O°hÇk.+”|Ö_²³ü&aiÙäå$±jÆîêê.ÕMñä9†Œïsñ¤—¬¹Mì67·Í€ç7ÖÔ)í>²é9^Þ¥ ij|Ü–ÓÖ¢š¦ù~@[ÿIlVW –c^Þ̆&àpÿU|¨«q>.æôÕ‘ÃE"LËÛâî+¤Á>²ì¢h®‰Á«W£ìÓ·»Ä²ðÿQö¶*›T6KJ} eÓ²jk|̾»•¤i‘¿©¾²+"±ÊFFò¯GàSƒ ¡§~]–Ø]Q"ÉHBÝàúÁ÷Cè‡NåŸný ú¡î{.¾çâ{.¾çâ{.×£suFÙe;nºç¿åçQö¦ª§©îN ®³wÙûìí•ìèÈ“†]Yi¸GpÕ!pAV)#¥uÏ…Ùk¶?ž…\#®Q¸Èµ´{a¨ŸC+n‘ Ö0`uëâ^ú”0,·Èj89÷j  EðžFñ8œ *ÂÀ=„çq—<Î'µªNõÀ ‹ ‚#Á﵎ù *±¾ú å4×ê JÌO1öœ*³5㸉ò0–SšGŽ¢D„ÓÔ"ÃN§ÝÈ©'RˆàM€Œ qz !y”bOkœ{,Þqaã‹ – ïc9½q¤ œ*ï5ëwûìFÑpZh whĸëA¸ŸbDgÌ¥¹sê0uz,ȹèúÖH„ãA…ÃH6RÏ úùã_Rã½À·ÀÊv>¿ÞE…Hk.ðÝn] Nêd_ í «¢ ÍR0÷sô½ö~Šn2¸Õ\£Qïæà”¡|›\&õ×ùË>¥¯Ív³U˜E¹]˜…)ÌŽÅ1JÙ ¢Kˆˆ°¡÷’ѧ…4`‚GÍp©‰\Iw©tðÎ\©?ŽHûh°wXoh%¸™~Âb¨.ãʨCc+Éâj/ºü¸¢‡ÐèWsì ÷sYŒ«uºÜÐÏq)â¶ÐUÅs*tºÙ( ßÖ©k¹Îó&±ç/éVHh »kmåUÓï> :™Ù¯u~w[L–ì÷¶¹k›³î¸Óv‚¶ oa.ÎîeU´t¶yn²Õ rТe¿å z‡Ù›|™:{fæw³s4Pã¼Y~5äñ.Í¿¤¦˜ä£ìo多‚]wtÿÉ\eïß¾%ê)V»Æäz fµ£g¸ÞŸý³(_—Ëâáõy1›%¬vÅŒÍEÙâÓvÙ_mÕ¤yš5ý&›VÐárYd7uþ%eù¤mR6)jtóyúš5Å|š²E>©«2× 4Ø‚nöͦD,‹eÆaßiše5dgøÆ|ž¯oÛò&¯ÛÅr¼u(í9”¶Ïs(Ýß?Ñm}?šS:˜ˆ„Þ DiT¸e áñ0$¬cŸ.¶ßͪª¸tÚª…;ýFâ 7Ö=ÔÚˆl6rÂ’_Û€TA¿L®º›.t7±Æ¡ f_®PÛŸ›vG}nd’¹2«ÒQ:Q‡è¬PÜ©^ŸZ»ãˆM<ªH b“WêWÙþ€·‰Ñ@Yúí ùÊu­Ü+óÉj£BÞHP»’ÒŽ2z=†iXšo$´@¿­QKÿ¼XbÝ€K~¼ÓÚ[L«=Å´úß*¦­jå–nÈòòÛb\Í·KqþŸJqú^M<*² ÉÉxtHøNqñâ¿á†]. endstream endobj 164 0 obj << /Length 1899 /Filter /FlateDecode >> stream xÚKs›Føî_Á­hÆlØ,ž¦‡¶q›Ò6ñLi:ƒ¶™HB'—þö~]@2Š“ŽÇbÙýö{?I£Û(~9ûñêìÙef#™Š"-dtu©<©r›‹BÛ誊ÞůV2.;øiV‰Ö:þ –à¿Çý] ¿»Õû«WÏ.Ý&+EaáÈâ,õ„Ÿ/®Î$,ÒHFNF¦H…Éóh½=ûçLØLšŒgK: WüƳ—[ýÜžýqIm2ÃK’° ‚ +MdS'h ¹¾$¡e|{â×ÿê‹URÈlÜïïpϾëW‰ÍŠxëö6éÃ>BÕþì¯TšÞñµVñ6¾¶¨à4‘À…)˜z»#@ÒyGº®t‹4>ã¶Š{ăïõz†/ Í( nSx“),$,ÄA¢DYEò'ÚgäŸÉIvOT®FQ‘h×xêþ¬Ü1'¸þÏéŒ$Ý-bÁݶۢ”>Ø’Z`W$$ tïÎ`oÈý` 7«Êó‹„šÖoƒWʱ§ðO,Ý´¿¹‡gº ¹`¦òŽî‰%blí5^5>F†  <2R„àÀ1ƒ-V¡+~ {#„c“%6MãK¶©(å6.Q¯iûqd~• —ÆÿrÇü’±‘_Fím„'›càØÒç|8ð Zןà%(íÈ!whû-þ^“Úƒp¯½™œv?®g:WÖ‰/ò™¨ñߤÊP ‚.ÛãŒÌ©‹L@j=ÈÖ§Ò±–Ò±æé^âø²£Š_/1nD!óƒ,Áä†à°îC*ªÏ—¨€›;óeCJaŠ1-G´ùŒSÌÖÏ—ùµ“- VP¡Œ:Bú˜ÊŠ Oš.kOäEñ„ås‘Ê ô—«Ä¥Åé.mzª!CeS¡ÇEɰ›,r#•I¡3yèG§;¯½?W¤âÖLIß§bø6t`ðŠîn£°|ýØ;iëÃ&¥†Ë¬èe Q`ÂòUÝé“Ö›¸YøÀï~öåv¿©‘]×>àóÇŸ^"Òs>—c.Ä&‡Z’C|7 hù%îÔÝM3xlï>œ¿ÿ*,þ|Æô%¡bM{ëY®»†:hXoÛªÞ,!~ÝúæC˜níë5\»à·ÂpQç„%}™}ÑͶj|;TÑ‹®ï`ûûks‚åf^#;f5Qá‹ƤæD×e§"õç Yl›¤æ¬BM[Yac/¡±/1K>,ÅJž ûtÁÁB:6-eï ñã¸Êð¨ÀU‰ùú9PˆÑ9¨˜9" +Êœ]RkÞ⋉ÛkŸ¿Êf–öñJZa<ûÑN¨û“Üý >¡c™«?ñØÑ|0Â/Õac¡yB- ØÞŲË!ô¾=2–)Ÿí[ÿÒùÝv?¤ÝPÉUóqe3Vž”×/m–¿s“9èêÒ1år\ v´Ç’dJÛ}£ih'©IÆF×nxONë'šMøÊS‡! E¾=[úÈùßÐ× endstream endobj 161 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpAlTV3K/Rbuild34677effd016/vegan/inst/doc/diversity-vegan-018.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 169 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 170 0 R>> /ExtGState << >>/ColorSpace << /sRGB 171 0 R >>>> /Length 1292 /Filter /FlateDecode >> stream xœ¥VËj\GÝ߯èe¼H»«ªŸ[;`H ‘ ‹•¢@ÄXÄ!äïsêô;WF30x¡Ñœ©ªîª:õh ƒ„ÇðyùoŸùá&¼»]RL)…ýçí»Ÿðk+áßå·ßC ,>âïqW?.µÇÚB1åð)X©Qe…‡pû•xEû”JN±ÔM|„›\EcΛüOòž£éI¾ÂMþ“w›üæn þþù•àŸïŸ–·™ºû3àêU0?&®%ZfQ4Ü} ߥ7áîqyÇ“/› ¬zßÙÊÆšJlmg¬×·kÙÛÆ–G,ûóf<ÓÜ4jC²'ÊIã0&û+1I˜è$Áéi¯p'¯5¶|’Ox’«X}“¯p'¯UOò OrK=æºÉW¸“äýäß Oò5Ü£|ý>³»t~¿Ër–ت÷LÎÓE[‘¥Ñ¸\o\Ú…R¼h­©E“i}ýÝZr,åB%_´¶„cZ_·WtºÔ—­fJÖåe'¬cgÉÎÊqÊŽpýw8VÎKxT¾å„þæ9¥i¸—îê‡/ŸÿyxºÿïŠxñu€)Ùâ½ýûáþ¯‡çãp4ì·Ò|F¬ÿ¾<„_ÃÓ>Œ¢÷Ôñ9Ð… ã[VÑ&ëg”!•|ßàꛥ ïäPТH8…½Æš÷ÂVbéS60¦m/ÃÌ›2Aá¡tvÂܢ棰û¶ÙûÓ¼L§PJÌi/Ôî«d uøtß á|YeV†} i"&Ëg…=;s*YÓs† g ;îç GŽùLŠìôrF†DÕôºÌþqÆÅ×Á뎾ZPâëe+(°ÞÑÑ(ñ¾õÿs[vÔÒ5šU¬B”H 2Ä•zħ·wñ@ßj̼4‹»äïøØý^1ñ=|`ÁoÑì>;Î~‡ •’ˆYI‚m–üpñwÿÜ…8ÇÚËj/-ècû »€N–0F´ ³Ík×!²­\ DÐ4 eŸx–eÿ‚03]5˜!}Ì@Ö[ç»Î¡y…£&2/B7 è®Ì0JòÑÄeÞ‹ä x³¡*b—C'0& äIg¶¥ZÔäPy2ª Cù˜À:ÜÀDeTje[Q«Î‘Wñ„à ÅgáQ8³ŠCáQpÏ&݇»Ãá94Æ ^±åçQàk ÒxmÝ!TÏ¿:d…ø›M¡\ýÙw`äá°zø N½×\)(õ6¯“QõRàX´¡°Q BkuX…°yø€™÷¢Ì„ÊJeêáÿñ°õZž„*õq—½fO)`£25*Ï‹ 3 Xè3mTf®ƒ?‰Ãy/žJe¥2E‘ ò—•Y“ Bre³&_¤;œ^y–Ôá ÜU*“¡}8dm(ÊO¨\¨ B­2"Z¨œaaø¶2ˆ–ITæ0êá›·€ÃÂj|Ã.þXôðýd›«Ó=„ÅwX;G£Íð „6*³€MÙŒ3a÷g][‡‰ÐÌÅÂÖ0:·se ´s"žŒgŠP¹Ó j»Ì¤ÐBåN[Ú¹8W ¯²DeæÙ7¹rô6Þ[}‡2"Ú¸˜X*§9Ív¶–>zGy†©Ì¹a ´qàWzBÇT¦W˜ Â5R™ö9OšÎ"4Z§2“B;•ÙÝþ<*^ä3¹*u¾®–ÿ@¹û# endstream endobj 173 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 176 0 obj << /Length 2841 /Filter /FlateDecode >> stream xÚ½kÛÆñûý })"!Özw¹ä’R )zƒÆqâCZÔvJäTI¤,R>Ûùó×ò¡£“CkÔ€Í}ÌÎÌÎ{VÖ³»™ž}õÝÍÕÓëtf´Êtff7·³ÔÌ|ìUų›bözž.ÞÞüðô:‰‡@&±*‰  ˜_i4/ïòjaæÏKç`¶†q½¯ï¶ðÅq¾_,£ÈÎ \x¿°é¼<Á¨Ái‹ÓHèJ cO¯½Ÿe*Kl‚—â2ŠUš$L÷—?/–±Öóu]Ýn«öŽõí¶ÙÀ× ²™q*spÆÂ™XÎXó¡?-–¿™ïWðÐ2œ2FeÝ©De>6ŽS.u6bьħšWN„÷.w*ñš-ŠåóUrHâ9ˆf ÓªF)H:°z¨p~^ÀZ)K( :“ÌɦäñeŠ{Ï× 8·aA›9þ-‘ÜH¹;[óð†„ÁI _õ4ð$°Ö ×'„"ö\´ú¼ wÁÕ¼à#õ-B¸F€–yHª ©Øe,˜æ÷LØJˆR÷Ñ|…·øÈã[ä÷ÞÁ?g$X ÀÍü €¥nÎ$§y»lŸ£²­Ðà‚D¼cRHaLJYã¥ò¦` +3&6o:“5WwB'Ÿ:ñ*¿m˜\ΟSî×Ò•²ÂÍ£\u™Ê=+ÑÌïIžlä²w–RÉÙxxÀÛ@ÿÝ9X˺S8ƒ®zùÕ9ކWŸJƱ®qz¨+TF¡‚7Ú([aæ0@JVLt:þHŸç=irÂZö¬)0z'x"‘/RÙ’~N_‚Và{\>7!Êä/Áü[10œ¬ÎDœ'µ@€3É&v_ðnÞöÃ}`™\ïV°©î:^éØóun:¿ƒ#6õÈ{7¦XxnPËæ^pÑ ä„Ùr e$wVK»µ˜GØ…0#è;fq*Þ^1„"›&Ã:Å:ʃ`g3§L²ÀñT6-Fâv".BJI|@É‹I”Z%Yr²Ø6íiiC¤í²Ëzé"È^@jdA× °4Vã@Éôz÷¸+e*îYEñ7\Â&qʃ¡õ»Øü‘áV!HV}´„ °­ãQl¯Î»È>æÈÇØN’Wb§"xsY0•ûÀÄF#Þ+Û;á bÓ‰K‰¯c¡¦t.Îì$:oûT…ÁìCLÈÁî^ÄUË>”ži/h»Á4…[=ÊTå¡éÁ6¹l½ ¤ÚèØHçÇ}§ž áFèe(OÈ%KJ S!Š”ýï|Ͳö£¶‚[戄·B)‰2. öh‘–ü}˺yd†.‹Sâ½ãmݱŒ'VMˆïP+Žàø.§§Ô¸×H½ÑPñ°›VHð}..ƒ–;Žþt2ôÛ)AÝÆ(…è>Èæ2K[§A¤Õ®‹é½‘“dã$ýÃ|š7©t&É) ‘ˆ Ó&?È(DJ‹¯2İ© £ íˆ«ÏpA{dr‡AX<½•¬Ï¡îzP;I=`QØ:;úfóTæ&Ç0PeÐ'™Ëlœa*êLJCãbå³GÆÃT¥®]SºÍ è£á &#šùÀ£l\ÈtXŽÀR-§wÁ†Ê#/tº‚ñ~mhº Í8Ûv¼´ÚAOq‘)†\+¥ëí7FŽ=66….@"Ž8'?BÊ‘V&{lÒ1Ç6SŽ îBd$½ ‡üÃ0ú~ ¢4¬SÇ—6èFOu&¸ŠvtÉ ·M_–I±À $Ë”vöÂí‡VPŸ©tÊú‚½ ƒ;Þ(ˆ£×iq\XZ•aÃÃÎû`L¢ª´ä#7ƒÍ‹R*ZaÝ)ÎŽ{PáÑËzHHŸCùžïƒÜaUâæd-Ë‘DÄvê ×þBvþÝ_ž÷ek/Ø‘’•ÆÃŠë³X*Œ» ±ôQº4š`×Lv ©¢†Áªï7Ähj©‡U`ßšké¯ý¸'Z1’€{¼Þ=yÛõæzÜ–¿dp> ÖG²Çé¡.@æA–ƒ®üDzÝÔÅ3Ê?lÛO¨k±ݕûí¦®eÞÖnË£|u®Š¼ZCdâ–0û¢V †i¿Í±\o)mÓ«£C6Si ÄF ½"·Õè~[`WæðÀ+-AÇ'û1-pîÌ™$ó²ñœQid¼Oä]û8ÊlšI…«²ÔM!z}*ßË ä3«üýiÝæïK:ç3åµ¹ Œ¹)Ê×Ê7‚ÐK‡Ìc¹EÂL¡úiÕ”§÷AüÐïÀGk¹A<œ™l4í¥Ã‰ì$JóŸ)u]oÛiÓ“4ðIýP|©‘™VÎf^D ž ¡*‹H”I¡K äŒwÚÊ“`L|¹˜=ÀÅ3¦nÅœQÎ¥Ì ú¾²œ ðì/9ú×nžD‘ÈC O-'˜5m%/}WÊ-i;Lž™Œ2Ö2Åo1×Z̃¡G=õbàjL½ÇQkAgCüÉwDO!§*B@Y ÊGvÔÖuQÛº!½ÁÃÑá®4? sÆù «Ð”3+kæq"Ú†Â6³º×!UöO5¸G±¾ ¹Ap#®q'¿ËC1F%p†]E©[™LZøNWæd™µóŽêØ& îPÃxG— ŠÉä‚=C r0ôzÕàþS×'Å„æ‡ Oµbc-EgWÁ4OPýþsžK@©u–p‰IÞèSAHAÂðoÅàN!üVž‚òzêÌ—HËKìþÅ,„òâN^•iûؽD6£w˜ÿêQ VP凒 ûé8‚ø¡»çP4Ü|4ÝLè ŠªQ#‚EFC E*b¯áYŒ^·¢+¹ÈZ÷‚üÞ¸¤ñF܃â¯Oí\ÊÉúE57.åo÷tMhò^JÏ8D*Í"z“O|Ä×þ Æš¡d–P߯ÝSI. v†/5š›åÌŠPKrŸª}!©¤y{ o¦¨«¼ØHâñ úeá¯7Wï® ð g:Hð‰”Míl}¸zýVÏ Ø+QP¿Ïî ò€…NŒ:ÝÏ^]ýÌ¿—\PKw e<ä/ùøÕÄ¡Aó‘™QÜCŒm+é8 2ýÇ6­¬óTx#¥×ŽÁ “èÁ Ã±&þ› < ˆÔw¦=)ó !múHØ1åiár&yŒ<¥mô{ò ¨†âÜMðÙ²¼þ\*Œap;ÕlÖ•x~Ëy–vÙãPð×Õ¢ E‹™K›*d_Êýc Ùÿž!÷ï«/°:¤æbê‡'ƒ—Q|bm¥»ð ÓÄ©¦¦á ’E“wÐf› i8°ÒhÆŠ ÃÆ# ÝË´gidÇ#35S÷‡ g«ãŽØ1¼+–‡ãE12²„xl `øƒ£ŠCù›D`°àG~Èy - Œ³;ÁIlT” To“©gÌÊa EÉ×üù#áGE“$I€áè·PüøØi8ÈÂ#-$½ ¤é$ùrZH¾¤C&½CN˜¡††0|ŽãÌö¿pLØz -ql¦9ˆÈvöð^·· “O€Nâ ¾1êfÐÀ ÝçŸ[*ñ!w¬)?ð—ØÊ¾´¦þ÷àBS:דqj—¡ÕêiY[gÿ KºÎ?¾þ\L5£âpʃ¼KRí#4j"H Ø¤Ojô·©ïÞ³Váç¦öB×i`£û¯á ÀÃ=¶ endstream endobj 187 0 obj << /Length 2420 /Filter /FlateDecode >> stream xÚ¥ioÇõ»~Å~ ˜ã¹w&- Øq\8HÒÔP n ¬(’"DrÙ%åÔ)ÐßÞwÌìA #§…aivæÍ›w_’Õº’ÕŸ¯^ß\½|ë]¥¤ˆ2ªêfUéZ éªÚÕ"WÝÜUfß\«YÓÁÍõÜ3û ,àÿ÷÷Kø¹¿þùæ›—oÓS":x‡pD„¸’éáóß_ß\)XÈJUAU6JaëºZì®þy%œWÖÓáhIGùJÚxùng«7íÕ_á_FœAæ€v>ÂKœOÈÆ„S¶rZ o™è·Ä³š­‘ûåì—×soåì}³'è0[Þ]Ï­9ÜÂÎ#nß‘Tx4m –ã ~téãö~ÌQ(@ß\ÁÛ6ò£§ÑîAÚÚÍvíõ\ׄe¹%©Óö A:^7ü«£—°ÝñÎÖÛö„vöwé$é ÎfÕLIØT°!J”ÜÜ3¨ó[ ÂÏ–¨rDlM颭ûæÈ äá~Éëm{ `¿°@d(JNŒNÙ(”îm¥Aö“R^X3˜˜˜¨W!}¨àUëÄÃߘïòŇ³Ô¬uÏm‰½F^”xaTñcI]R¸Çe9ìÑ6wøó–lŠõu™_ݳ˫ٮÙòÎ*Å(j¨>}Ùε 5½É!ãÄÐmˆCWA¢³ÕCGºN9rÀšcî™läxt@fZÖlÛM_/Pw®”Ð!L³kG‘iê; «´ßÛ9LÖ^Ø’1'‚ì 4fŠ/U|ÆQ¼aѾ€Å W›g±Ø‹1E,þY§Ð¢\‹^úZ”-{¿©{Á$k.Æ"¡¢Ïp‹¢¥™áµ¦’Ò(ŽàgÊNlE»ÁÒ@úÖì–9ÌvÉXá;,-›ÚË=œg^‘ P´ô¢VÉß¡ùÐ;³ÅcNú펞ÿÄ ´ËZ2j’ÇŒ%ßìÓ'¬w t ñÛÿŠÒ? ¼èFZ’¸³"¸ú,œåºóÐã“\·ÏZX6wL92<ª‘rN»@¡’QĨÿÿll…s¡Ç×½’1²À³Y¤8cBú<dõÚTGñ’n5Ç» BdÝÀ"cÞäpcõÄ ó­5°ÕÛz×Ü­6§[ !{žY‘ñ6Y>ßòï_°£Üñ66IK÷|qìJpÜvT÷æ\Fù¶KU îß‘³5XUz5W°Œˆq6øøG*Y´ÊheœŠvÑî¯määGˆQpÎPœ¦“ µ‘=cÕ<&ÞÓõUKÂ9²^+¸cå,Mѱڇ,@°Q,™³Cè¦ÏYDƒh r;^S%× «¶#²ènÃÇå@ÙšKªˆK…wªÔûö#WºðO¸ª[WyùêÞPÉÛ™Ä û/{3òÚ£õÀkÚe*½öþO×s'%Z/þ8ï7Àü˜×_½ûððâg™éÅîÎ=ÅŽ'¼zÃç»ön¹E/ÀU³Ûl?ñúÐnHGÜßc¯‚0Eð÷ñ Ë]üˆ6a;µ'4R\‚‘î!À mâ§ ”)+z5ô£HYT*…¾¦SXd M§Á/ ,q÷Íòãf@õêÝW ú5¬È”3Ö É[ EÕx¥®…®MÍ÷Á†…Wÿ§_®è–ËÝá´A»Uø tå6($F¼ë!Nh, ‘Uгǿ­4EE}Û®÷mGå£r„5Öp;}A"®5pîðCS¯œ_Råò ÒA$Ò¶ôÂO›èÉ2ÉÊÊÚ$æ€r KpDQKŸ%¡‘=gó—À©,¡ÿÜo¹½í°§%´pæeH @6pZ'ÕArÖ¶N'Q7ã×Q£È5Á™´²eÑŒ-¼]çi„µ'Õv!Š[xÚ|F¯…3}´h)|pysÄö\öu® cìà©ÆÈazÍ{Íö” ÜnŸÃ×q¶\‰ ÎW×Îq»ÍÃŒ/2bI³Dö#õâðò=BP!é¯_ „¼¦(ÿ‰£|¢©až‹Nð4“îWCG3®þm³Ež”œr÷¾Áü¡uâ¹Ä1MXBìkB¼wKy˜Æ2ð•±mÛõùœ0ɵJö³¿gØ€¯î©çó§ sÈckจ|DV©ï°Nø¡ÿœŽ?ÕY/qŠ3ûјˆL?Aü„´"i+þ.waûÔGÛö’kHÛƒwáxáô|}iF€SR[½ÑÔíµ¾02‚L.Ãÿ41:óiš< zJ‹spp%Í¥dHǵãj"ý0j¬°}3rûÔ„áÿû»~XNb¿MI¦=›ngÏ{2Ý&§N#ñâU/ëÅÀ.–:úöÁ—FéÉ ~®¢¥¿ÏLf¿¯@q¿³@áéeËÙ~ÜOö%À¸§´CWȇ˜êSº9²Æ¬ï5Fir’|RBªKV\˜ÈѬAç&{9ÄãL!7F?æÊ‚:¸ã¨D±OÿsÏQenà)ø÷Ù ‘ZsØçÊ$•\6GþÝOHù N•F"hÍ:æžJ”Çõ}ÂúH¸³¦¿½Q\#àþa•è@˜5’SxÔ)ýè0 ›ˆt š5Ͷøg»¯o®þ ¼G™Š endstream endobj 184 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpAlTV3K/Rbuild34677effd016/vegan/inst/doc/diversity-vegan-022.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 191 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F1 192 0 R/F2 193 0 R>> /ExtGState << >>/ColorSpace << /sRGB 194 0 R >>>> /Length 7023 /Filter /FlateDecode >> stream xœÅ]M¯ÇqÝ¿_q—ÒÂãþþXda I!6‹€6 Kr`…¤ÊFþ~Ꜫ¾w(>=ñV?J ’juŸÛ3==ÝÕUgêÄËg—xùöò¿ÿi>yñðëïÿ¯Ÿ\¾úþ!!„Ëùïï¿zýðëI‚yñ—KL‡Uè_ZN¡y^¼º|ôû/_ÿÏÇ—ß>üó‹{{8ýì¯N½År4i1Ò1:ºøâ£ßüùcéøòÑ?^ýå믾ùø—Ÿ­þN.5%_R GŽ—ã‘ê%ÖzÄpyóÍå—××Öz‰Ÿ~þÈ%~þéïäÿözù¿‡/þx —¯âå3ùóíCäåýö¡Î#¥KóñòêbÅY2.//Ÿ?ŒpÈÕ^ë­x«!qÞ¬ò©EJG§V>µ(ùˆíÔÂʧ­±žZXùÖâyÃÆ\zÉÒKéGo«ˆN¬¾–£´[½Oõ}â)]ëµx«Ï!ýöûV<Õ§qäÛï[ñT_Ó1ç­^‹¨¿ç?x#øwjGšrÇòOá‘þÖ /t 6ÙïF÷zÔhèt/:‡pÄuåùnt*G_W^îF—y”`èz^Fî{­ß™Á5Hïï9ƒy±Ñ.öòâÍ¥­JË ÿQûÑdµ|ÔÁ+}‰ë”Úo®·úzM^Ü&×^è‰ižKÀÛr7Z:íÒwÎÇt\y‹x…sk^߇–Õ{ð=LÑ–KÎ~tÁ g™bÁ1æM`è;b¶ÝîG~ô8¢ôeÒtZÍ.èŠw7ºnc^´¼•Òw˜®yÞÓ‘“Œ¾ëÑcÞe+J—4^ÔûѲ›v?ºu£ï~Tôa_Ü0³Üè‰)êE‹IÔý}ˆ-'‚¹-+Sò£36j7ZV¦èG×c6?ZV&é[¦\Ÿô8Bó£eeò÷=L[7:bq£Ó‘6úÎØÜè#6ɆT»ìüèG7˜nt‡AêF£nô=± xÑQ¬aùÇ—µ)lÀLÕ$Ç“è0ø¢‹FØ€—cìô.ëÓNïí˜;½ž+Üð kÑ —ÃDÜè]5q§÷„ÔÏ8Rùá.!?¼ÂêóÃÛ‘ç¼¥lÀÇQvzŸG•Þ“¬—£;Ê‘¸Î x<ÚNïéh;½ç£ïô^°©úárÎÙé½c§÷~ÌÞÜWn¸œéÃFï9a§÷„C®žá õÃË‘vz¯GÚé]«Þû‘wzêHóÂ'<Çnx Àùá8?<Áç‡gÑýðGž^áÉóünxç™× —Åj§÷yÌÞ«,V½ËÆvz—Åj§÷ž^áÒûQx<:nÎò[ðê,oçß,3H†áÕC£_3g ¯<´„áaîÅŒ#'\ƹ È OF÷,2J‘eã•!‘bÃ)/‹1‰í8¶ÁqX;Ž&µ‘±5)ΣK­kµJ±Fq""RŒqå¨A¥‡žŽÚ G®3œ.YLìFl(‹ÁžñËr6—‡ëQwrèxá¤8`ÖçÀk•âdM:×l‘=96¥ˆ"#ˆM4 fq–áÄí 3ÑDÆFAä#Éiµ³VNëbOÞ¶¥CÔvØwRä}ÃOX‰•V¨ÕHÞØ<²Î‚Õýåà <‚ÎŒ¤ifͤLþ…Ù$ÿ—ÏHZÁ šŒ­H±Ð¬‘_LèWz€™"ý%b͹šDì !×Êg$·³@î$¡ß¨q%¸«bg™QÎ$ã Ë ?“d˜bd93˜%£´}Á%&dÎ/aèË#™Zßh¹Ë›Zß¹=É•åÁý¦W}”8áa‘çßy}2°#Èôhìõ Crâš-“+/ó ‹0üäü}™nò$S›výðœK½Lä©õ A ¸´™¼õ—2§\’·„“ Æ|@ýy`'!ÃöNòF6^ŸØÏx»ëÄ4C¹ÀŸj·ñ‘-£¾Ùý‰ÉšQ_õqÁ…ã[–¨>YteËŠ—3Ë“ÎéjV#ÜÍÅæÌ@8Qeÿb×Á%Œ¥¢±œéä-ëþ2#… 1ûS »’˜CñÛLö<3lÊÍÆMÊ^) Mé¶³?1à¢Äej='VJŒ©¼\ó$âý¾¶ _6Y¸úOò(7:ïä±>¹Q¸ãbÖ7ûl8ù+~Òe&ÓRç¿ œ`‹Ê‹H”—hðze åÁÄÉ×åÌE[Þ—ªí9Q£ÌgòàºÔËüÑç+V?«ã+~èÉ„Ëí}¡íGÉò*ÊŒÈ-®ÐçoþíÓË?]2®ô¥~VÁã!ÞÏ çNÿæjËÕô­h°ÜôÚà†¼w˜evÓëBß­~ß ý‘Î?Á»FZ–RzemËùÝ?^¾ü#ü#þöƒ)Bc÷óh¢,¥˜_W†Š•Oy9Ê™Ãbå[‹$ã'»ÀµÅ*ŸZÈ:TNtU>µ%žZXùÔÃv¢ô¬ò­Å6$š—è ĸƒEeÓoÓ=Y²d‹9¡Ë=hÙGdA;¡Û=hYEeÕ:¡Gøá¼ÿ!ä=æç‡$„D±MÁmp2B¢ 78)!xIÀnprB¢˜7 78I!Q¬%ðœ¬(ÆWô;¢¼vÑÏ*ÁVš²›ÅÒL~nGÄâî'–D9{€åàä†D1£‹ŸÞÍpÃlI/Á#Ê™¡úÙ%0©ZrD°¸6?Ç#Êù¨ûIQN[}§÷A+ÛIµˆØñü<(çʹѻàæN'a"Êa8ø¹QŒƒè'{àœýl8;O7nøØá=Ä9wˆ)µÜðÈ“™žxsÃ3Ï}nx!ûÁ ¯;ô˜‚ÍϽHð›íô>ÈþvÃiž»ábÿ ?õ#‰:ýÔ\æNïe‡þdcß ?¤Øvèð±lÐ’ØDô‡'óFï8†lô{p§÷D?²žéwvà ýÔnx¥_Û o¤?¸áô7|þà†Óóï†Ë lƒþrÜ¡?ÀéºA€ fƒþ@ðNïm‡þrß¡?À¿wzŸŒ¢xá…w?<êÇN^xÚ¡?¤’wèˆDlÐR©;ôÄE6è³lÐàfÛ ? è³A@ iƒþjÜ¡?`‰;½gÆõÜðÂ0 ^5tÃûý!Õ±C@lrƒþ€Pçý‘Ó§è? OŒ§ºá™áW7œaS?¼2¸ë†7Æ‚w˜#±Gò= I¦¯àyáC60gkà\ÏöBÊG^ñNîQ_°r¡ÜHúÈü.åNÖ‡X2ä“À¿ ÚGš퓼Ô-þ=‰ ~2þ:âÇø€Uã÷ƒ¼ R2㹃9­xû¨üÂ:ã zÁIÑx1h•.R2+àyÿ#fåpÀ•H¤å%åCŠ û¿¼ÆºÂ°øû$Ü­Ï0–Á6¼ßYpa¤›ð~gÅ£ß$k}SÈÄåÎo f·xôüX`®x½4J#!Nœgq•eY@a¼n’©\‘ õEé ]ùðD„ñh¸È1¾|äƒ$¯ãðŸ”ï‘ËS?nJzÁñ|n| œ·³~üL~ˆEþÀçHåLj6¦¡Ör­A%j,WžÚÀ4@¹ñ8 S?i}çž×,S&6±ÆO4PžÜ•^”‰XóÈÁÁû†¬À…÷ ¢Aæ‚NþŽ^XÙe{™Z_É‘Ý*ñ~¦Ü;ÉòÁË>Háe <È»bjý$³µ¿'PUÅh*yQ`|Éûص>Ñš’÷‘$*‹‹Â>%› V6րܔU•r%4­§§?CþìbðArTþ~ns¹¬¢õ“~ðÄ8§”Å…c;UåGáÂÈR,ʇ€±HÚaRZn„<€ǂr¡sXËÔúÆ­ï£Öwî]‘+!ʃ›‘L‹Æñ›V¸mX/ŒÏÁû«.Ð@šʉ>Mõ¡œé¤ ÆG±¨1ÜäƒàA“•‡"Nt6­ïÊé8J¡<”Ò”ÿƒ‰Ô½Ð™õøœõI×CL¼ÞèbçzЉ)/6–™¨õ™|y¹b"O “ÿ‚-bjleh}×PrÒõ”/†ŽH#Ñ)0ŒÅõôø%¸™ïLHåyVúÃOÄŒ%@üB“§{÷sL03Ú[$“ÿxóÍ7¯þö÷¿~÷úCŒõ{qM°|ÏŸ!g h…ýÌñ°òÁ‘ñí݉ã±Ê§²b·SÞ–U>µ5©-«|j!o];åmYåS‹AìÖÂÊïæmy–É£ë÷–À%Ë;9ê9ƒËj±R¸¬·.«ÅJâ²Zܲ¸X‹kkqÊã²Z¬D.«Å-“Ëj±R¹¬·\.wLªI ý)C05£?g ªäOû,ù³† à˜ýiC`-f?Ã\äâç—Àv-þÌ!àIW?ÖtõóK`˜ƒåà$ˆ ÈÞü d[¹ÎO¼ Z†Ÿ_&ýðgÁjú8‘M?üàï$?ÇÇÍègx`“;½+Þ Wʼ“$Áï@ü œì³ŸáoTÊNïƒÇ7|î°àõØ`9ðcžÞYnx&ËÁ /šãÎ ¯d9¸áüþÀË3€»kú9ØæFïI¿ùpÃ#Ynx"ËÁ §gÀ/d9¸áu‡å›hƒå/ìËÝË!«Ê ×OŠüð¸Ãr€Ã»íôž5ã…ó+$?¼î$´A0 û99w²ÜðA–ƒ>é0÷Âå77z/i‡åKÞa9Àñ±ÁrÈ¥î°ð¹òË!—¾ÃrÈe0Pá†OÆ5¼pÄ 6z¯‘Q7<í°ðeáË!ײÃrȵî°rm;,‡\ûË!×±ÃrÈuî°à¬Ú`9 °Ár€§-ìô^isÃëNB›,ÝFB›ÜúNB›ÜÆË!·¹ÃrÈ=ì°r;,‡ÜÓ“,‡Ÿ„gDÝðÂø©Î8žÞ4:ë…÷ÌuDਡCæÀAžg:j6‚Á($thœåJBG^ðÑHè—„¸_Iè˜à3¡ñäÂp’Б0€/ïÏ”VŸà5f’pÇÄF(arÔŠJ(i¼äËdÁ‘ƒÃ²Sëý#X&G/iƒ„ŽºžOž*½Ð”`ÈÆñHX@”¶ZÍJhÁ‰ÆWMJxÂ+ ,BÅ3˜IžY©¹¡z¿bu3Á‡`F3ÁG³ñŧÞ]y´¼_dvÒ!$¬Àrš Dçr/%V_ÉtoDç7²#%X‚¶¯ô%gKH{,i}^20Øê2“0£ÌIÞ ï™T ,ú¼dàá`ÍÁ®W <¦iØýɃƒ T¦EÒúLŸf²/0+औiÇ*ê¡…„!lüp#§¥¿§Ú2íƒâ}+ËöÚa HˆÇ—à‘}þ2‘§Vt¼ð­väaÚ¿l8H"ˈÕ3 BJÔúÿxdAËœØ ˜â@2ˆâ™y<=Àò`À2V#T=AKÜ|, ²(]•.ž‡ ðtÌøQÖÂ/Dyºw?AÄ2WÝ"_|ôïßý÷ëïÞ||ù•ôðÑ«/_¾#½ócþ^DÍ_RI>|’&òŒÙR¿‰Îhé¦)3˜HlÕjéVËtS7Å+žê3—½k½Oõ•tÖk½OõƒôÆk½ŸOÖ‡‰×t¸—ÄQá9ç¦p´jµt«µL_«ÚЧzÍdu­×â©^35]ëµxªW%£k½oõ÷,;&%©Ì,&ÛuÒËùL@b>CïÉÃo>aïÉ‚lcˆþ_Á÷$aAª-XžWð;9X~úõûð<üß-ÁCž¤ƒ‘¢<̺â–àÁ -n žØøõÌýhJð`áèŽØ¸Jð¸Ñ´y‘¢¬º%xÙlxú¦ÍÏÌ-º%x˜:Î-ÁãFS‚Yz‡[‚ǦRøEǘ«zÆ\%xÜhJð¸Ñ”àa"uG,^%xÜhJðxÑ*ÁãFS‚)/=<;•àq£y~v£yús£ys£)ÁƒD¥É±¨Í4¥^´Jð¸Ñ”àq£)ÁãFS‚ǦÏìùûÁ<ÖxÁüìÆ ¦þŽLù/˜ê;N°‰ï¸ÑÔÞq£ù]—,MÍ“bL•wÜh ï¸ÑÔÝq£™_צêŽÍo½hÕÜq£™qÒ¦âŽMÁ7šz;n4åvÜhªí¸ÑÛq£©µãFSjÎIO>4UÚq£éÒw£©³ãF3_µM•7š";n45vÜhJì¸ÑTØñ¢U`Ǧ¾ŽMy7šê:n4ÅuÜhjë¸Ñ<5»ÑTÖq£)¬ãFSWÇ‹VY7š‘7šß"»ÑÔÔq£)©ãFS¦ ŽM=7šún4Õt¼hÓq£©¥ãFSJǦ ‰Íœ ?†~$–ŽŽ¥Y::Èh¢Ò8ÔÑAžñrÓщ-jÜWutà[%í@ut¨.ÁŸbº̱zÓÑÁ«¦*;ÔÑÁšAЇêè˜ÒÆÒÑá:ÌZêè`Ca¼Wut°·‘ž ::Ø(U§i ±ivÕÑ¡ùpÓÑ-n::0‹È¬Ð,4v¤::4÷(«CØŽ ›«ŽÌXUÊa¸61±ÔÑÍ$ ª£[Ÿ!tÕÑÁÁaÜttp !¡Hutp¤a‚ÕÑç á§TG'®ôª£ƒ³Šêèà G.êèðTÈ"s\ È[Pœ8y‘ª£WâÕÑÁY¸ª® ut¦]¤EÓæU‡*:H׫)¢ƒó¿jðPCg6“xQ iSÐQ7ÅU@G.½Ÿôs¤¨émT>gYÂÔsôì«xÎLJÅ1íœiL“ΙQ‰¦œ3-±‰ 猩´ ÓÍSÓN˜lަ±¾ªæ@‘HEq˜=gtÓ€QÍœ%Pd‘E$àÖ"¿mÕòë¿Qí~U/gTes˜\Î(K‡j9øºYÅsHŠ‚+RS+gdI•ÊFd1¥œa¼+ÊAÞÕÑ¡NŽLú¦9…ðð"U%g»}ÉauÄ7wW&‘ÇðI!GŠLèb9}¤êãt[d,ÊÚ‡eRuœÞ•+bâ8RÌúSÔÆéKšG¥qúÊT¤Ê8šmÿ*ŒÓ«åmR])’Õd²8šÙÿªŠ#‹‹&IRQœ^l>«&N_’R*‰ÓójLEœž—€qzÖ|2Ϧ‡ƒ¬%á-6 &a}V6Ê“áÖLj`ùÌŸŸŠòdçr8S™Jc…ðþë¯ûËà¹ðG³ÁÜA=yNuœ+ËA‹'„æ »ÖkñVoù°V½OõšïéZ¯ÅS½æ3ºÖkñT¯8×z-¾]?odµUéF¢±úÅ¢±úÆê¯<kp"Ò¬‹I³Zܨ4«ÅâÒ¬72Íj±Ø4«ÅN³Í&aF´RIWþAúÓ=9ŠTùRt¼>ƒ§ûá™›½Âóýp˜ÏëâËýp$ò[ÿÃeö=ÞΟA ÈKM1- /7Å´€¼äÓò²SL ÈKO1- /ÃÄ´€üpZ'^†ŠiyI&¦ä‡3Ç¥—¤bZ@^ž‰iùá´ƒ½LÓòéäeª˜—.bZ@~8µ€üpšþ^·i¹áªä‡S ÈçW?^æ†iùáÔòéä‡S È; ÓòÂM ȧN- ?œgQ?œZ@~xÝ cX¢S7šJ@n4¿¡s£™:Ñ‹V 7š*@n4“éºÑeƒŒa@ntÛ c˜=6È&ÿãE«ú7ȦýãFSúǦKΦðMÝ7š²?n4UÜhŠþxѪùã b™ä6È&øãF— 2†Éý¸Ñ}ƒŒab?n4µ~¼h•úq£ùU©6ȦóãF— 2†©ü¸ÑmƒŒa?nôØ c˜Â­?ntÜ c˜¼ͯ™ÝhŠû¸ÑÔöq£ûÔ}Üè¹AÆ0]7:>EÆøI4U}ÜhŠú¸ÑÔôq£)dáFSÑg‡Âb‚>ð¤ˆÅ{ô1ŸÖUÐÞE娠µUËô·ºŸ}bcfÉ« OlÉâÕ*读UÐ1`ð¡Û›dö¯‚>ˆ>«€ ú t­xô!ií$èOâT<5¤2º¬‚>'Í“ Ã÷ú{dï 8¢ý© ¨÷Öˆ\\ùgLдƒxôI!i=}@i(*àCAð`TI}Èàõ« Ý:Ú~h d © ¸á$èæ† ¨ x* £‚>ð6¨àŽ ú v_•˜R,ÿŽ ú€r’O‚>`¤ý= ú€¿b‚?ô™Óô€TÏgZ6“ó™F²på¬&.£b> Õ¨µ|f6)•òÁøj±ÁŸq ÷Ä0-‡éøÈÃSY•ñÃTZTÅgXŽñÑ´òW ŸQmUÂGæ•* ©‚ϰñ7Ÿaé6L¿gD“/RùžL=FÕ{Àä`G*ÞÓ§¥&RížnÒP&ÝÓåc¡[dtâ/«pO¯¦ £º=++ŽÉöô¥ò¤ª=àLð¡¨h¼Ùz‘ªÙ£q¢«dO·„#¦Ø³òå˜`²”¨žõzÚ’£Ñ4Nm,5ªõ å‰6¦XOëÊ>1­žfR`&ÕÓª%vR¥)†“PO+oéô´lY™T¦§e» c·dC§"=-ÚX©FO‹&!¥=²]©b*ô´ ‚[&Ѓt<ªŸC}žjÙaLž9fxUªÎƒ'q¤êQmæä‘Þ¹2™4Om¦¬¥Ê> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 205 0 obj << /Length 3050 /Filter /FlateDecode >> stream xÚÍi·õûþ Á_"¡Ãk†œ´PuhQ{ÑpR`,ÍîÊ‘4²»ú÷}9ѸҦNÃX‹C>’ïâ»H9ºÉÑw7/no¾zéGJŠJVjt{7òjä '*SŒnç£7c%'?ÝþðÕ˲H¡Té…ôÖ  N¼7÷õz¢Æ_O¦ÖÂ× Úí²½_À/¶ëådjŒÏ¡}&Ú›-´vø¹ÇÏ#îu#r'˜Mã¦SS_–¼õªLµ£U›%ü÷%î¢i‡5o¸ÁÍ·´쌨–Üu ‰‹ÔUó÷® ³vü½ ¨ÿ<žþ‚–Æ¿–¾m¬ÝÖó¾oA6Ä f…ß b¾ã]ÔX0·-pÛ cK”—•²º½Ð.È¥ ài!åøõ–ƒEf Z >œ`£Ùa51‘^¤!Z¤ÖÔ±žsû-¯€ 5ÏŸ/>LEÒ½ÇÏ#£7”KDOQFô^Ô Ií0³¶×(‚Ùþ[!¹}`-"‡@§bsQÃæÜÞáú%+Ú¢éax[ž²€¾â±åˆíˆÉüÈp3þ5³¥nB{&.‚f4;Ö9‹,_Ìpà$w`èóTQØŠÙ3À=J e¾gÈ™ÒLÜõŠÝn‡*uäî}¯l„IzEœmzˆ‡Ð^ã£Þ2.á< ‰ø{ ²‘¯Íš{Ξh«UQ¶©FŠÂÛDQÕ'kë*²Â­—»Œ&ÂξÊË:¨;ÓÁ ôºÛR›¬Ò\:±Ü&=X-âô-OÜ·<º–§Á“^'FÒTE¯(Gž8ÐGZ)íÉ8£ô±s˨áLJ(^ïzdðӣ޸¬Ž(éˆwÉ1Fæ-‚ÖΈðz ˆ¿”~|Ëò6¼Fd'­×°WÀa2’Žü2n°]§–âC4Â0•£!ü[ÂsO¥dØõ,0ë½Ïú>ì>#ŽNSîõ9á2NDpb1´ÐQt~¤(œ„O2ñ¤µÛ“ñ#O}¨7AUK–F€i¹x T Äb]˜WG6…±œº Ì,!~IS×ä±VgH‹œê|†љӖä {‰Ì¯LOi2ÍHÚ4¾ ˆÇñu½$Ã<6™C9; SôåU—¸#ª»aKyêØ”—ªÓÓ9+wÌ©tP$†ûf@G -"Ãç2±íVƒmKlÞ‡“Ï"ŠÝ?ÊB†˜þ‰b´ÅЈ›¯¾»½Qc7ˆ™`w˜£xvÐ!«m4$dÑil±ŽrCòáãh§ãê”ÿu’p ù"ðÖÄåþ ­ ‡ ×X‘åèN z,¢ŸxÑô’íF†…l:f%¦Á•´Bj“¼ðVó¤ÿ°O€îAب…+|t §Gè:I`¥(}…À¥ ‘å:ãa¼(K7J€žg–R¥(ªr䔯 wtÌ g3Qa¸ç–BEW¶P ¶`0U%`Zxob@þ\eWÈ xIðBý  Ú`µPÀGÁ¤Ìñ–›j“A¾#ö„c‹ fF¯S¶’g6´Bƒ°Ã~̬T’€dêÞøÔeƒpÚUúöÕUìKa•Ê)…;á~¡ P*ˆÖ@¥Ö9Ä Í1 ð#äß‘‘qþ)2êy—%ÒØ§Ç’®ÊÑ)ÕÚ ŽÈ ¡ès5Ò 1B [Pær ñ"ö{˜“ô_âÍ9k€ûN"65ƒ Q·¡VRx`Èt(/°Æj¬ª¨ž#0lÀ8ÉO%\dË5½CM(¯‰D]Õ;'¤²£P—ª¦!|ÞqÀ¥ÆäfšÓßÝ?˜s:¥PÝY›ü‘Fs+£©&ðçͦ˕aô‹UtÓŒ]¶‹Iˆtf!e9ÍjÚ$}ß}ÕXïá|Àñ5l{È»2†³ ØhE!ƒFè,¯äâÓêy–1|È?Ù¤ AT'ñS µúuì´:³ÓS­õøü£3kÃѨÌgáO `T–£t¥ü†lÍ`ÃwÊúñ7‹ìª%hi/lY=ÉΧ&f›AÀŠJŸXƒw¹Ð@¨ ­ÊDÒ7¹½y£(nT#£­P¥-X_ÍV7o~’£9 B&,lñ‘@Wy¸½¾ù× O,Y\Ì“âûuÀß><©þOµÏH€Ã@®’¡úñ>#/AÑ5°× S][øKˆk=ECBßeµŸžŠ×£0§1Vν»BºÊºw-3îÝàCÌÓÜ;4«.½r Ýð@ûî¡ÿJÁBÊ}eÚTj߯ìr˜åwãì×”ªìjBTâÙ3L(2Pþã$„MXàɆ¶Ö—₽ O¡Ï’¢tsÜA·íÒ°{ÑrÜCHS)Ì'E¶]¨ÛA¦–Ô8„Üvƒ·1eßüœn3H´¯„ùrTÊÙÅÅô|ZÄ‹')úÔJËL®1•–† -\û¢ÛƒPÓ™óè[=rûU/Ëe(ÚP—¨ÏC¶ŒU Ý—‹æ©k™C¸ÇB¨¹RMËþ®D€k´W³Å>ˆãB± H ‹ÿ„²¥žL%.ÞÃ<Ä…~cìz¸¿§‚BZ 3Ä>C]¾iVáª*Ûb¬ÂFg/V ªÁ!~¬`P¦GøZÁ ü]#${½`à¸`à‡àžâ‘Ýõ‚¹V0(IÁÀ<1Œv— :§O/øóœ8ÌŠÈQŽ}&!"Æ”ÆÁRÉJ'Œs¢ÀlÝ‚Þ^Ž`Àú‹L\Ë@ج« ™;d` É|æ>sC §ªa†m@<•s%ë…äÓ«Uñ¸ ”, ø/‚jë‡a‚z$L(ªsƒsXÄT›;ô4`¨(Ÿmzø3XS~Þä h¿í\ßã)­UÄåBJ›@}&)-¤‹Þ]³$pý­*$2‹:îAÁܯ)Øjâ}`‰;žQa#WÃ@HŠÃVìÛÛ5Ua|ÏÓ*I·*É·*‹Aá›|:©›ò`ÖLõË£«JÐÛSç® @Ú.¼C² ‡èÄà°ÐãÍ6 J¶áJìÈc¬çË áг«W›¯ÚpÁñ’ùÚÂÒ1j¥ë’zF× g¦;I°J ØæM,ií"‹Vu¼ÃIX ýÄÛÐüõEw]‘o»P­¿+EXã6)ºi,s&iÎQe_·b¸³Ðí‹~ŒîX Í[uwQƒX(¥—¤¢×´Àšq‘½5êB"½á¢I ×êV¸Xp}õ _äï-jüi:6Í ïSWˆÌ‹o¿ïì£$ZåpͲÝ#(,ô%÷ÌbÜ4ÏŸmÚåñ¾]?ëûgíòù³c³\¶ŸõÎþüåäá—Ĺ.|Ԍʾp9yWð¯ÉîÃ_ýsxËA­äKµîB1ˆœöDã‹Ô ´|{x…ö®Þ¤ºdIâ]»õIø-)¿ ç{Ï=²¯É^}\sOw3+U¤"ÞÆï==¾ñ^f"?sA3bî2±:|nð;«»W7sî¡4"5v\{5æí˜4Å…|(Ù«9›ï¡ˆ¶mÃ?ι§KH’Ú ‡û:RâV9jzÞ³úe8õ8»ÓGJ "¥'<…¥ëÓz.DZã’váxgaì‘ØÄEÿº[áY÷´ÁòýüÖËM” O=Ý“-|I@ùEwèpÆE9Ò.;öËø”ÁÆÚD&3ìÌÄ7IÈr*Ïç~ûÎÍtžåfºg’Š;TFÓèÒ»aN½¤ÇHtŽ ËµW+tŒŒoÿXáÈ€‡È\¦{?I²sÞwGÄÂþ2nä?j ã…Þö.§J÷”Óô†Æ–¬Ý3š–²d²‰ŽñËM'1ÉF›À31Q¢¡WyQWÒ÷w‹äeŠ[nq.Ø­‰z3‚šSg|5ƒoûxNúoÿé"€õ'$è)ŒÍÚU÷سɾÌHžÉÕáU[Í[”_}.œú>bà+ã/¤DÿTå Ñ endstream endobj 216 0 obj << /Length 1944 /Filter /FlateDecode >> stream xÚÍYKoÛF¾ûWðH¡åfŸ$7mzHÛé¥hì¢7Jbd!åˆR\úÛ;3û"•µ (’–û˜ç734/6/~¹x~uñäEm Á™åVWo ÙpÆMј†YeŠ«uq]þºew€¯í¢RJ•¿Áð-|Fœzø¯¯~}ò¢Q2‚Y÷ !pË÷7Ÿÿþ|u!`À Q´¢Ð–3Ý4Åjwñþ‚™Zèš'CZ GüÄ“—;Sü´¿øþá°¥²Õ„.‰>ã$cFèÂð–Ѳý‚¤åæ„ò÷ÿ˜§‹ªÕ¢¼¼]T².û®÷¤‹Ê(Yv+œ9í²-OïP?GOa?¸´ŽÄþÆ==j¬\®­»ô n?8]ãñ¼Ú=>‡á/ÝxM´»ïðI–Èć©ÝÄ®g÷ÀkS®aÄfF(*i$É\)ÃŒ¿ý*\gT¹¤“$ßÑͼ%k#MX¸Ü$Ê7 ýþNÈrÿæü<±Š“šÙzéEy½‚Ž8ó1Ýî%qçÚ­íý¥$çó0Ó´;xÀé=]ÿÎM d2Qâïà‰ûCcÆ¾ÄØàìrv[íÑâøéW^ä`y´ÑÃŒ[¿Ønâ/n¸ )¦ÙZ¦l"è2c S"n2Â솵œyO‡Fsš'müüÁsºÂuÜOA=zöngJRdH2Y/N‘8•µ0uN.a“í„o¡²²qag²‰òiŽ\%¸fÂÔèÎL×m¤ª3T-k<ÕgYî„„IZ¯dØ7#†‡èIüåE­ã­ùTR©çLi­Ò&Îs÷Ñ0Â颦‘Ü)[”R’†Ð)+©5«›Ö«Ã9v–ÞP‡îÿ´Þ?­Næ…¹]ß Þû­9ˆ³œÖIøTˆ¬öaض:©¿R-¹»öŽu˜Ü„χÀ‹v)Èó5ìÝ/¸môV{¹!ÈPºÃüäM@%ºb¿éIê ‘.E-™•Í<ΗîÚw·ð±Aœ7z#ЯkH#­ç ñ²„ƒ[©@Eù-Ì·ÚÃ,l1D4È…ÛI½¯DóÅ w¯&&ä»Cïî×áËß‚>q:N8C£{ÞNØ¢‰U7¸ANº¡'ˆÞzìûxoJ; Å$îðw_BªÞÉðïœÈ8É•j9SÎøÅ|²érň‚a£5«0:Ø09¥%RŒÞñ¶_ §ÝæÓ Œaë°õi¤f™­eMP UËT«(.•hÜÎW?€‡p^<0–Ÿÿø#ù >§K'«éñXå~DÐ9‘®ékñÚ¯BÑÓa3l㑚…j'¦þÚœÙ&à•ü~RKÀ3ÅaS„á+¨,®+£•æõÆ5¨crZ·{KJ™ðÙžrë)?¯ºësØ#²m#J”°Cñˆûq+Jhp±«.ðÈlº÷VˆJ2-Ì#µ0 S²I»®AÞï±È겂ë—ßÜS§â{™ï<ÚæQ­ýlµ…úõœŒf2••ϲîªM”Vz—²–¬4ø¾Uó¸Ìë[éöñ6¡~XËI…y ÍJú¼–¯¿€Æg9ç´Aœvî¦sÜœIçP­è-«ÔÃná’<æØûk»ñ¾f®¢N@^„º©ý¯CBrÕ¯ÏJøÊ+½Á’ªaÒÖ…äP#Öô†êú5/Ö°™i²;Úº+êšÕÔC½+./~Ï¼È ´„ÙLÃ+–Õ¶yÌÅ׿Ç¡…| -LB‹l3Î k(Õ¿¨!‡:.ï‡JÞª‰þON¤Ä7ŸãD]ä ¤f>”õŸü~Íþ#$€º‘s˺—'*½<јí¡a« cÄÀH}‘o[$T}“á¤nÅÇË¿¸Ò_ã £/ÎL*Zè-ÕH¸¶v=·¯1w¡“޵è ªË¿¥iC± =jÏqq7øŠ8ï—qš <5ë]p⪭a“ëÀ!ÓJÛÏlÁÒëöK[ðJsü7ÂÙ˜¿ûÍz;s(!X›ŠŸY7yg¬Ð>º™uxsÜe{vOnÖW‡–}Ù;7úÞ·áž-ß©ë·m¸íÙÕ«?~Žn†U8ŠuF14ýHyº7ÛÕƒ7+kyc²ÿX`øj¯ôG endstream endobj 202 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpAlTV3K/Rbuild34677effd016/vegan/inst/doc/diversity-vegan-024.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 220 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 221 0 R>> /ExtGState << >>/ColorSpace << /sRGB 222 0 R >>>> /Length 1324 /Filter /FlateDecode >> stream xœ¥VËŽ\E Ý÷WÔ2YP©²ë¹MH‘@‚‰E”„ 1šD‚‰ŸÏ±]u¯i…ˆI3ݧ}]åÇññÍáeÈá.üqùÏ~üöyxqsI1¥üÿ›ßã×^Ã_—W¯C ¿^rx‰¿»K–Âw—Vc¥PgL%¼ %Qœ¼à}¸¹2/”ã0kf–S¶yÃÃN)Å2û†§½õ8ûi_ð°3×Xêaßð°ÿ+Ü3úÃþüvçÍÃGŠóðæýåÙ7„JÞþ2Åe°†ÅåòçÙ"5ç\gëQOq$tÊ·kÓN]™µƒ†Nk.%R9Ì žvÊ=¶qØtö™%®Ãnð´¯p¶ÝEç3wé~åªPrì-€À¥ý7S>雹ÇÚ¯Êö¿½)!Û¾ˆöîÅÈæþ·sE­êbêUÏ×t^Jn1·­-®ûõðÜߨÐ}ñ8ág‰lô¼ùýÃÛ‡G$‹¯µ"Ž¥È¯ž¼}0jOþþù͇§¯ÃíK9¡>×.D[¾ ?…÷g"YƒÏ׉|‰¦wŠÔC,­ywéˆ"#êi¢–£jÃѱ"…ž+¬ð}§Tˆ†Š×=Žlê<{LU0J ýNU"€3Ç {Kv>J;‘â®þÐ Í—¸¨?6¥ÆO…aCÓûJ\hS8,m€Z§ñŠvã`F;ªÞo+‘{±z¾ˆÇ&Öó0·h#÷&a FàX}X}h¡,ƒ]ºÍ ó »Œ{R<ÔP,Yp®êî4ñgÊSc= _(«ök­dÝîよ}Äjx˜ÿ”­\«úÏ$a£˜% ³žÂdô mRþI¢SìÅê!6±×uVÿ.òŒ ¤þ#6©ïz%(H›ÆGðz^~îéܶƻù2«ñcó áø†~h¿6Ñ/ãÛâë\ùm>£¿£9¾Kÿ³›\[¦›ð‡²›'ˆ”ù¯yÿ ¹yD[l¾Ö¼ŽlõÞó ¾k~{Þ;ÂèNÐÆÁN/:[þ[Oz6¾m½‘6§Gø¹V§WM¯9õ zÑšÓ;h?5§‡p+Ãée™¦'[Oñncú»ô–Áçtê1s¶ù4¹fl$Ý“&朳ݾ¤ÍUçµ 5»­ Ù‰UJÿËþ!ÉõØMK¿C唉koÈà¶3ø¶áâÌÅx·ó <Þ]ž w«® CöuBÞª;»ŽÐ}³¯:ãc’ëCM¦«»ORgr}¬{O¬>CçmÏ,È«³ßè«Å·x]žg‡µGŒ‡méìæ©ðh:ãZö{ães´æ:^››èxênŽ„×~o l›ƒ5‡˜ *nN¡ãöüšcÌ‘îí=çhªêÚÖÌaò:Ÿµ_ÇÞ˜¶IRv§CÙî?tŠDϽ2š.­½!ºâ÷†èNq{C¨ÛüÞhâæöF·¹9öF_{eïa¯5ÇÞÀÞm^ç¡«ä÷ÀšÛë=ÐË?ƒF ¹ endstream endobj 224 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 228 0 obj << /Length 2316 /Filter /FlateDecode >> stream xÚÅkÛÆñ»… (ug®—Ëåcƒº@Äû¥…{mÄ @Q`•Ið¼ÿ¨Wë^%t¦ošÍíë«÷ÿ&‰wœÁ¡„Ï|s÷ ^ó..k<ô Çæ¢º”yç}‰r™Ü+F°ÄÉW¡IMý0œ!¬b„CSd2?„ÐæbqQ›ø×1ú«‰iç!¦sÁö.Ä—åHb@S]øå)•ÄÚ8÷À2½äqnÑô¹ .„×&äµù|‹‡ÿï,ÆIÆKaüøUþå˶ù}h|ÌhÁóïMõ*pœ)oíþÌûªçˆøPÛž‹08z1éq¤>ðbb½Ý®w„éeév[}¬]VbõaYïÏy­.êËêbqÙ…–?ô¥‘·LÒð±\×›ôqƒú^ý$ž\qú´Çä½}óÜ{Ðôž¸±sÑYÐyw£Kî2˜?xÑ{׿ùøu†ƒÃf1DËøh×Ûçxk°ö°·«ÍY`.ZB?_<ïú÷çZ^§ñù•{Ùß ƒ‹rxh"ÓÁ7=UIf™üß0wÙ6œe`Ê‹ß._n›Aúq–z¥¶Kº)Á?I2³éRDÔ´/y¿òi#ŒûýŒ.Ùʉ»î¨lØ zÞüˆ<í1õ¹ãL›x@Òm+œn׌†ÙyPõ©©dù/×H26fSdA†ñSGI„Û»ÕyÒR¿Ñ2ªEÕú$‰ï&‰úƒìEÅÌÉ£H£–,K™R¯™Pý§"¶*`O TmH F'ªH2PE¡’¢dUüÊÞd’°8S¥MÀ§Tޥ톩íÊÆ×S˜ (2 ésðŸÆÌ (-4ƒX•ˆU™÷½Ÿ¢UfÊvà0"@òwÃl'ãFÓõ”Í­†”ʸ‘{¥:t/Wv˜ö-g’'}Ë>å[ÉÀ¹ä²3*_'ËIÚùO4‰ä5‡}WT²ŽQ¶ñižå¬ÞSŸM¾åN•¥{üLÊÜP[QZ]’”Ð;·æžmŸ#N0÷Ç>M:µ£Ü ‘Q‹²´u'{“¥².ÿß{“Sý5 œ«<7Ü1Ë\Øg»çÏ㉶ۛÞ½ìJ€‡*è·Sµ;®7˜#èûÞÁ2w!iý-ú,%™eÝZAkFpA+íJA2$«!‘JMi¥t†$®tPZX?µ $;iÞM³´HJí§™Ó9¨íé"äÊ»˜“<èþ¡ÌZ•&æÑ̪$¥.„˜J’Ž.9Ÿ¢Q@ÞØ»ÅtVázß­«îšÀÊÄiºl¨ƒku6`A÷yŒ×¼||æ…Uð“BËLãÏIòî½zËåÕtb$>ÓñW&î,þÝR&S·]¢\×â)ðäÉèQï³Ï°–Ê•-ÄÌoñÎyNd‚•]aÃÀlo§÷E`,¼ÆL1xqròuN¤YoJͦ¡ÛìKË:öG‡y .G¿\!û^1‚Ýy%Ü0®ƒ/¸Ù1ä†5½æTµbª†Kh ü^Wµ`ÜSž¤|Z7z øA,5º+>`¸“_(`Ho~nvà µO'Z2¡<ýËL…'ÀUx†€®¬^lzr¸-LßPèz&~ØoºZökï)¯,} ¡ÂÜÁÊxâ4q} ÿ"‚aMOC3UÅS ’€[7}þ¸7ú™²ç§áÙµo;˜žo«]µB°m`Àišòçv€Æ?lÇî5ÜJñm‡m#jÂV‡> stream xÚ…V[oÛ6~÷¯ú$Ã;©`tõÚÍ.ñÀmª¥¸Âlɳd·ÍÃ~ûÎ!)‹Z”AÄó‘‡ß¹’4M¶ M~\Ü®W+­FINs–¬n(¡*1Ê\¨d]&¿§ï—,-Žð©—™"ý Ä¿à¿Ãù¦‚o³üsýþje'LŠ‘\ÇÁª,h°üßñÍzÁ@  K,KdN‰4&Ùì/ˆÒLj·‰niØ&®ÞíuòC»øþâA%Ú,âu¡Oü…Ȉb2QÒ#¬w{å¢féö„ñWÿèëef¹HoµKnÒ/ËLqžv8Ñ»¤¸‰öG‘~\f\§®~¦ ”ç%·i…´ÂáWLø›1ðEæÞ‡=f¸èNð=¢X¥’0ãG¤þT…9ti$.¶a¾C%Ü[°Z(uaûTQ_=Îât0m“|¨ßãL…QJ ÀÃ<#„ŽQdÌp¢¡&Á8o3™Ð¹k¡l3λ &¢êpÉúŽ« ¯·Ù•Àç5êÆN›ÞÃDr}êfÛ:ËXj7—Á‰‘fˆð~&(]Ðx5›HNÓƒÊæ· Ã8a†zI ±ç%>ÝЖZ'Y¤U»£A«ôCÑø‚ï}ÜÓâV6;×>O­«ŒÉ Ëù4ذBð´<ùqÀ·^é:ý32É)¾ZÁaÊI®¹F¡úÜ¡L¢¬öÄ¿~}OiZ}ÍVžšÊ5ËP¼&Ôóº¤jÎßÒôÃw™?V}QÖçê8p¼ôó/_|‹iß–S®Ïuÿ)våel¢;xaª€%¨ší<±¥ŸÚÂe‘«àzâPápï¼m÷í¶jªºÿêuÝ}‚{N»¾>Ǻè«+çEW·M¨î…:…1Ï÷ºØí®ç<Ѿ y qlíé0Y™F6DåLx w-™zúsÛÕàjðòM ᜋݩꂌÏÕá Í]µ-þÆÌør¥ww_ÈO_4›€úÖˆäØÖåµÛΠ‰¹šVév…ר¾„»A¸_….Þ DPK½Jàäƒ,%Õƒ,´P3ŽGáy͇ö²ùº½ñRñcǽxòÄÔ:ªÁ5̆-<’E$ËHV‘¬#ÙD²äÜ/Inù4eŒh%quAZkè(!ä#GÀ­#àR]Ól\¡–lT«Ùöqñj°ðˆÈ¨è˜Ø9À7¡"¯™•¡32øX.G/Þ$€zš>Ÿƒ¨HlºŒ;-·þ‘ !5¿¼ùÞ%\k9}í®}gôîÏÈøN™ú¹6|Yº›ý¡?ðþyŽsÖ endstream endobj 233 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpAlTV3K/Rbuild34677effd016/vegan/inst/doc/diversity-vegan-030.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 239 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 240 0 R>> /ExtGState << >>/ColorSpace << /sRGB 241 0 R >>>> /Length 750 /Filter /FlateDecode >> stream xœ¥VÏoS1 ¾ç¯È˜$ÎÏëMÚ$h¥Ô iÓºië$þ}’ØÎ{-…®â’×ïù³óÙ/vjõ¹¶úN?©/úI‡ÆóŠ!uòx¾ÑWúA½ß|ýt¢OÊ€1FÏ×Åé¥rà‚þ¥¾}×F_+£ÏU­l#è • ÔÎ&HN¯µõb|¯[ÐÔÝuƒQ ÛY„h´5BiÞŒ£…º7¿q¾4ïÁpˆàóV|ŠZ˜4 ˆ, nt"LñˆÀ¸(!–°VœH,$ÿm8Ø‹}Õ‹®%í¡¤*Á¹ˆ‚–¬DpI'×ÖªŸaÍÏSÁè…+¹É‡lØS0› $ñœu Ãì#wåCÖŠÓaEeaïb¡ï+˜órM!F(¹JÀ*¡ž=Ƈ æR†Ò>Iß`œÇ å7Þ¸ö t¡)û³d.:ðf±„öƒqHŒ)"1wåÄ*ÖŠsU‚Eƒðwñà﫺L½é¹nÅSoú×Ô Û6:(¾9´®ö_ìÎüëôqb iÞí²a•\[o¬U®G°Ç#ûŒ;ƒb µh”h, „¿‹Ñæã¡ñ·Ó.;ãçM×Q‚³ù%vòV»;Ãaç³(vþµá´ÿ°Ÿ,9¿ÕfO~›Uþg®^ËŸšNœ ŸÈ::[3`»0–kýæäì­^Þ©Ëû€sÎ-ÉùóÎ.:Oâ|yñzg ¸-{1v¦ZÕfÅvÊø^Œuѱcî•$4Y­‹m(Š™áÌž#˜2Ù NöÖ½~ Ïp²c½ òŸáÌNr‡}R?¯Ì¬ïfUòRìySe긯®ÿô¶6vwÇ»§ÔºŠÜñhw‡I>«¼{m2/âÃÑîêèñQÜÛ$9¢Ùþ²CýYjy²‡ûn7/?V7úåQ¯n^žo¯ç[þ×ðšÿ3\+o#Ø(³K ?…\'©ú ·` endstream endobj 243 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 246 0 obj << /Length 3144 /Filter /FlateDecode >> stream xÚí]sã¶ñÝ¿‚í“4 yÄ7xëÃeziòp3Íy:æò@K´­FÑ>÷úë»»He9ç´N_,\ì.vû¸Ìn²2ûæâíåÅ«w6ceQ•Ë.¯3Ë2£LQ •]®³L.¼üîÕ;­b(¦mQZ 8è/K+ÍM½_²Åëe.%<­`ÜnÛ› üâ¸Þ.s!Äb c|÷iÉí¢9À¨ÃÇ{|üŒ´.JÏÜ«wˆ²¢RŠ#ÑIP”¢`†Ÿ§Ñ˯C¬¤ÀÞ «¯ñÇm´v»õŒ­Æ< Ÿ) ÅùØ¢ÝJ…Û!žñ¦û _‚Yï“ú׬ƒ9=¡+d€¤½Û¢“ü)ð.ê­{¦E<¸ýqMÀ«zïA¿„êaéÆ:Åw”½@ö7[¿M§R*œX“Sb,Ö·­Ç(Ëjq,î'*¡¥á׺ë%0nzŒdÿì¿Í™,~C áïÃ~9E|3ãMñÓf`ã@.¼Nr=P‡Í&Y{,|t¼ ã¨ÕYvPÛõ¡9Ï™¢G¡ß¤·N }ȃg’&j鳟O[°ñ=2 ɤë•ײ£‹JrÇŽÛÀûã35©À#éó6/×ÕÓÞÏY9ñèÝŒ¯Û­‡mê±wc°¦ÓÊ$ðâ—a`˜p…Ít;¢€•çw„O3îR*ŒÄÐëµ\p‡á~OÒ´O5…©FDߤˆB¦¦˜zÖ Û$±°D@¿K“‡ì|½õË»v`àec‚È‘€ˆj÷b‰Ìr]Ø0›QæùÇË‹Ÿ/,¡Ì€ZÅ SŠLY ëÙjwñÃe¶†° ü=è.c`ß³ámöáâω¬ºÇe€%Ë#f¦ S…T½ûO­ +ÙHŠqÙ£c¼öþ3¶>=o}๠×0mÈÿ[ßÈúlÚøô~¥_Ù¼yÚg™§8ažl‘«Sæ) ¬Ìió…ÅË‚35oŸît¥É<Å ‹<å]m¡D‹œì9A£ZêÏs |Ø4#Þ+¡hWE¬OÔ£Q=çhR1fO;ë)åTqEûo• ’Êt ¶¾÷õŒKx±3óŒCð•r0YˆJåÁÌ9̼3çx03ÞN1&¬â ¥…=ªµè•РЖT9à®Æù¨DÈ!šaNJ.=²¿¦h%̃è*áx+@mûdûMÊk‚ ¬´È[|•T°æ°¹¾<`ÃN㌀â¾áD”e¡‡íüË’”#’/½caR‰=jShß§ŸÈçеW¡rpÊpŽ–¦ú6™‡¤ÓVlÒ\ClYÜ{ÀI}H(q˜Ä ;©Óq;¡ è}ÛÀ²SmüL}4Ëí¾Ší¾‰¥ð‰Fœé ô¼/0 žÒrt‡ãÖ÷"ÓFÙˆ÷£¶6Å­õ}D­A\8¶ól8‘ O?2K(l…´«¨§¶ó3©úÞ˜ÔÁ®†÷}žý‘wžç.t ñeí¦·4A.jO`WïÝ9=¥v÷ÀL˜ëj깇¸IÖ?¯r¹4"ìÛÑ<¢ ¥µ˜;¹ŠûHäÉ£$îpªkèÞ:±˜…“9½˜6®9¬ÓA[Z}Ý·Ï6þP¿x·qñ5™Á׫ ¸Æµ•)1Ôù¡ÝEÜ…EŠþaM¬Ô$*=âwçÔéÀê.%˜AG]ÍfhÝÕ¾ ‡Fߦ‹Ö!ÁCªt¹¯·½b­\$[›—Q·ïÓRi·ñpv·J‡Ž!úê¶Ïm>€ùšTè[Œt_§“7SðÒbë®»¤ÓgLPèW'}¾ö‘_1>+ÄŒ38§N 3Ç>ŸâÉR´*8ö¶(K/íoT¡Æ2£jF&ª) èLàùŠÖ'[t¡ó:.1ß™P òU‘¤x:§¸ì³ƒùEúI­1¥GZKƒ”´týÏgˆ0UVT'â%Dˆgt‚%˜´*c3YºV½­ˆ´­`–ž3°ÁÐ6ý}BjPêþxõñ6$ƒÉôTX¨¤øDQÓÚ@—}bñfFþ†±Hþsç8Ëd_(ØëçÈ¿,JJ*f+òY¬‚³8ãÉZv—æq9TÕPHhp? ¨Íª±÷”’ïé\§  ôžŽ»¢f|÷±dÒ@Š„¹«ÌÃ!™|"!ˆp@ëšÊ‚µ#„0ðmLð8÷s5B`P0µøÈ„ìâsM‡¢¥Sîß&-¬‚ÚLô¾àîS”¢5ERišq øÌ$Q¦xïn›¼Ì⯓'|›á$pr²µ_µ ù85‚ö9E8ß…4v¹K:¦)ˆ ȼPQb8Ód\ÎÎÅ4>ªfß$Œ‹iÌZÉ bY¦ú °!Hª!j½Ov'$Ø6ÀA1m~¥îÄ´‚¦Fí‰CRhœ«„ÐF\å%õTrL.Æ\Ûà4ð¦+óD£c<Ã÷±Q¯#åü•†øÍ-C˜/t~ˆÌ2ïÂí°÷3æÁÁUq]°°„ß̤F ƒÁüÕvî¡ÎÆÓ;BÊ¢âURc¶”!G';Þ‰2åämHLèÖßq^,¹» $YtÆ”¯È/­sJ”CË¿>áØgpìLWàpÐ,C€Ù>ôGök÷­¯ºŽ.cY›ÞœsÁ|èx¹\=P +Wpû; A"Ôãžép§)¤d“ë/ý-½-á¤Ë((Ô5)ïPÖ-ÉŠGR'CxeÂk@> stream xÚ­ZY¹~Ÿ_ÑÈK$Ä¢y³;ˆx ;ñ"ȱž‡¶ZRgb]+i<ðþúÔÅ>¤žÃ^0ÓM²X,¿:X=ºøTèâo?]^<Ca´ªteŠË«Â&­t(RHªr¡¸\ï'?OͤÞß›éÌ97ù¼~†ßöoø»™~¼üùù›rÀ)UX‡x˜€$ZV~þ&¥¢RU´igÞ¥S(f.¨2Fžón×,nšÃtfƒÖ“Åu½ÎŒ–Wuh¤õ¿zñÙLg!¿ÒˆÍ#V¦Ï·Û#ŠPÌ ¬ka)ƒòÉ_®VBgm`^ÖEupÜ‚÷P¹*ù BÉïFt°6$U¦¶Û‰e´´°õ ›4\¥êv²aÇI@dé”%üÈâzDóX8•ªÄSß^ÁÖ’Ÿá ®á·áfs8Ò‘šÉºÎoÛ meÊq²ÅÆd»â¾þÖñÙ#jÏL¾b›ÜM‘|Ÿ!ò zËȽ2»¯··ð§-¹óSsäùÇž”‡zaòe",8•ѶA®Ã=5Âz/½ ”¹jÒ7¨Ë8|ÅêBº+:ˆ\âÚøŽìêÏ½Žš{2‚%*oÍ=(Æíù7$tZ²7ëštÖ­ÄöFؽC m¤Hÿ áÄÍd~Ûq¦)7™ÄMn:ê=Y-J±úÚcß-v3?3„‰²ÊjÇ:ùå¯ ·?þ2“f½Þ­”i³ßÞáó§Wo‘ë3 %²’{pn‚‰ï¶Û•Ì}xö±’í´/Hë¾Ý#˜QÀÝ£føˆŸÐNÈ­M¼–± ?ãÅ4­J{~/•¶àOªìÀMÞz1•2╱Î;“ÕÇ'ãÁC“ VŽæ;/N2 *‹xÒ¿§ˆ68m$ÙPÂäÍoˆ*°†«}F+4j~Uo>­{y ¬¹ÇÅhå‚g!.³Gý(`•)G|Ü#Áo:SeÂ+Äè-¶ïšœKìlšeyb‹*Á´fµ¼ŸMcK¼Ï#{rM8·3§ÔYà>›!,±——)Në&Ó²ƒle*[&µ0%osâšd±R)Eö@‚±¾06 >çvžkNî$ƒÃ[2¢'ò5͆{ì·›…¬ˆƒ¬P«[™ÝÔ d|Í#tØÈ§E@îd¼¼‹pÒ ¯FL®n)øô}à!ò°è±±Ø2¡eýú°4™,ñå‹0ZÞfyx6æ¦ë GXÐ}»å€’r~BíF¢7²Uà@Z ÐÉ…ŠFð!‡Gª"'çOà'ZoXpš> aè塹“8X/„)æá}Ýe_3éŠ`”wcʃ§8ýköý›NJ÷‚Pé!³2ÑJ.«Ùvó9眳ªí%k™iPž““}5"]"ƒBéJ¡z9µšÉë1ÅXe`b¥L²)|^å{Š©G–*Å8PŒ9׊ƒ½Æd~ŒVZfß«•×÷l6’›ouòA›0Š ‰ªWAKºjG4là¦îM1ë‘ÝõòÀ‘õg&E1ެ Òö'm«ÌÛrºÝÖð¤ÑœÈê2í tª%ÈàOtàª6À~øq¦©R¥2þXØP©²t…­ ²›ø ,œ*É}Þo,™YiAéâ­þ9"ˆè)ŸIðè)`•Ù±þTÀÉá÷¨^Üã0xÔ!=Éy£tH;ɧßé23_©àÒwZúeãÑ •ºêç@°Ü 5œÁeÖcä’,ë¿#Ñd‚yxHܸ„Ís™,¡C°ýÂŒ0-ú@mâwÚÏП$ì æ?m›#ÄyHAâS`ì!KõՃģ=Qü­=ñö0RUZÓÃ…™8Û&ÿT–Æ;Ä,DŠ‚¼pwÏ:77¥CxⱦÁ±ž¸¾¢GÔ»Bâí"êA5šƒ;$vÀÅiDÀ,¡Ëi¯Ft¿UÀ“žo¬Ï¸úš¯ê(Ýê ]‘ª‰¤ïôNWALÝOJ8F%Þ¨ï»#IÿBLû߈F¾öÚ¢›G Jê€`Þ¿W›ùûýé€MÊk÷ƒòàR•¦êçÁ¢Ã±uÁM:û¤u³ ,éáç ŽP È3_º>â°ÙÖ¥J:,>’ý¹ÜÏös#…¹OÎãõ'Ÿä$!H9ׇƒ\nQÂ>¤I·q° Úä8<˜˜}S7Ze 0Ÿ}y@x;¾‘’^þü²ïjB÷)Nµ®Ë ÊÖ3g­Lê>u9käS—ä‹=¼Ž•s—2¥Ùe‰¸?Wm¯ü*,jùETl=Š•`ýÃú®þaMûYJ$ÙìNÆD4¬†[G¥0Z_ÚWãkª­@O¯þ‹«·eqnßåZÍj¬œ(ÎYJ:š¯R˜ Òü¨¶ß’ø‰K•ŸfÖ*pÅõ b®»*{#_5à½Ý7ÌÝ¡BöÛl”*?ÇV—åDLiÄß36©Á5¦%7޼$¾v_×í¹2×~%ÏA[q ÝÛÉ?`ó}­Jha}¬Å„œ‡Mwe͆ºøÛ%•Í`ÖWx½ñâCo²d0Êö×§­ â0ÕUᘃÆñ»kù^Êž©Ì÷U½„é[6Yê¸ÉÅ7’åSkü}‰irØGn+Ô µPh?HžÞa!¾&ÈL Îêª|°´U>­¶e¿¯¶õÈj´ã™z¨Ü0³vnü–m€”>„Ô“ÿ´> stream xÚµkÛ6òûþ #Ÿd`ÍŠ¤žÁíM‘-rè¡Eº×šäƒlɲR= IÎfûëo^”䬶è—K°&9Î çMù›rão~¼yópóÝ}²Ñ¾JýToŽ›Doâ0V© 7ù惧£í§‡}w…K,%ÊO AH¿mëeÖnµ÷z» X`ÞÕ]YÁˆó¬Þ^s„}ÙšÄ+z˜ ¸qù„¼n|îÉvŽéΆ*‰"fýx‚ÃD¦`A^²FaêäüUPÌnû„©(Ú*²Bñ£oäÎWìa lˆ(ö·Õ)H¯½SÁó/¾Ý™ØËñÎ"½<á5G†v=ް¤m†_a~†Ók 9ïµxöÒàïžè°Ù ­#Ãâ,2,DÀlœ…ËGÕ5ôCwÆU†¡ &[¿ žH…±qB änÑ|/kó5²ÀX+ƒî­ ƒÔ´v]ùa;ò¢xéIñ6ò½G„ç?µÝ…&õî·Ià]`¾yE-]ËLâøŠ‹6ÊL—øRTu‘gÐåsÂT2 ZfQª†µÈŠŸ®ªZv@*{ ÿ]ÃHxšºfÐG_ÂÎy‚ a"!Ï@øã\»òN'Z™$¸¶Â¹/†±kójû5['*Žwù®_Õ¥U¾™O«qM—p*8õr˜Øåu†8•¼¬³Irkâ¥<%oA‰¼ª Ö9™,ãEÖÏ¥¤)´–}*°÷SWîÒ!rCæóÍd*$Pã5Q§‘²6¹VnCÂvÖIU™5îov&PÆ—DöþŸ+¾¿ðxÌK'Àõ›Þ}øãöÆ6Å7ÞÐ’bñöëØgç,‚^iæÏû¡è¿“âò7bAgu ÒO«4tÕÆO•%ÚÊé4P>þ“¥e—µ+–¬_e!úÿGl£¡2mÖÅ6±ì’%ÀÕù¬áz6UÖ¹H„¾f%‰_Оüì³=:eÍ. €n‡^'îSð!KÈúPx :p³øžv)P0gªóJ@¢z|•¤1Kó¦à$ÅÕ.€A\½[&·¶äMòÉL0ɉ©ð aŸfBèÎe‰ôÀ9o9 ãTTñNDúÈc/çÊ ¦ø­þüF¦)ÄqqÜj.½N>êHZ—¸¹<€âã(ñÞÎ_–L,Ë‹Ü%ëñÈŸ…è'ô…Ý–…‡õBxð½)F;d[.£<ˆSŽr,ØA*)¦'ÖIº¨þEË…Ea§EàìNˆ Má,ærY•éZ#½”ŒöèL}@ŸÖ4C”ÌUŠÆeÃÕOZ=² @iuø*‡©]1Æ;t¤ÝœW,ì3Ü¥gPÕò˜ ©)§SϲaŸe>`Á=Í\+çlÃ\Ö§ýË¢fûzÞ™Oòóv‹‚6Ö÷p*–*’Tq&³ï‰6ª'nÔÿRZ?"œ™“³ú úBÄl|é@å*캶²apâ”å-‰Öð¢»ê#þšûµ}8$ãàÑ®e¼©Yƒùl15i)R‰5¬&nÛþFÏ„ ÚÈ5û"«‡•Œfq.ûÇæ,á[4\Ýá¢Ä«|ç®~•ò*éʵ⠉C‘^¯K”:qò$±Ô(WŸVÒ1¼x˜ÐQ1;w¸ {ÊG8·<& –áˆÛkíjÎ[g1_·g÷œ‹ »'â`›p6ûEÎô¤ÈÃ̇z8ÂÜî•ÆÏ>á¶þ¢–lì”,‹F6zî°œäkyˆ ÉmX ˜–úˆ5¿ØzÁ9fÍòâü<Òg˜É ±äõ‹””'áÙÖËÅÌõ9EÈ]&1=£óYÒŽ§dlR_W9Ÿ±§Ð«â’޲ÂfòÖ5MÍ-¤ñòŽý‘»qÎdÓÚÝ«˜{ÌÓõ’ÒhYÈɵ§(bŠmž%„—š <#ïÓ{×M(ùPÿU¸éñ{Oßÿx³ù@ â«o ó£ô¯úáo‚õóu¨>žªÃ %9tu›5ÅUØÆÝ¯~(ª}¦ÎE;B ôÙ«eç¹l§sÝHm™ n%c@[ÃÝgYWí¡¾äÅÝý÷?ýúé {ÜÛÏŸdÕdU{Çb‡IÁøZgû»W¿ôéU]O Æ¡âºï‹öP¸Otàç>§«ë–î¦*Š%•¿umg‡M ö£ãÉ•"hX¿`;ÂV¶}½žu¬"0Ùw¹|l²¡—¿üAI{;Þà¯S þÞSÚÁ× Ž=cƒHf¾¶ø¬óõΤõkmô;?Om&JûÇÀ}^ïÂ)yrb¤cnÌêhù§õô¶,éá£|AØ»H÷+­Ä(O,J4E'ß¶CyžU7 %ú$2\·9ìÈ ¤I%v§Sæ÷‹ ˆ4#wòêü·SŒô‡´©Syº"­«tãÛ‡›ÿv\óÒ endstream endobj 270 0 obj << /Length 283 /Filter /FlateDecode >> stream xÚ…QMSà ½ó+ö Y(«Æ±Ç™ÜÕ~èhõêoHÒI{é0À¾÷–·h؃†;¶¬YQ9Ô*è€PïÀx­4'¯‚%¨7ðÄWùºË»ÖZþÃ8Ò}»k+žëUQ-N”U X'k O¦ÇÊçûmÍ0&”Ê•¯ ûfŠ–.'gaNM”ñ¢¸o<Ütì1ŽIx‚È(+gºÙúÉ{£3EX‚E£ Ö«ìùþ7ùßþù+!ƒÓ|™NëÏÜI!nMŒ;!çÝámdµ‰™ò†ïRºÚäì¼.:£,u”ÿEáëÄ9a$Æ7–a@~  í!Ħ?2ά•N9¦ êÒOü™~v# endstream endobj 262 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpAlTV3K/Rbuild34677effd016/vegan/inst/doc/diversity-vegan-037.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 272 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F1 273 0 R/F2 274 0 R/F3 275 0 R>> /ExtGState << >>/ColorSpace << /sRGB 276 0 R >>>> /Length 798 /Filter /FlateDecode >> stream xœ¥WKOÛ@¾ûWì±=tØÝÙçT*!õA‰CÕCA…PUÕß{í8)¥xö€áóçY;¯5êLu«šsõ |íÊ}cûÛv¥.Ô¦9züúáXÌ Zk5¾ÎN>Ñ£W¿šoß•VWQgôwÛ~@}lŽçÍÑ©!wók¾lU—èIÝý0!2„¨æwêÍú­šß:ß6ïçÿc£3#½$CÊÓé6HFN×F¾vKÂ9±sã<`’:7.bì>Èu ’;÷ ¼—;O‚£­×áÓé–ö܋מ2˜\áÜËrá"x¹s´”kÉ’=+ön¢eå¤áî[¯Rár†,¯2ˆ‘V¬»£UWЃãB,¦{¬øv×F¬8hH:-9ŒB’Ç'Œ©)’&)§5 Ð õ&-oA‹óÅRWv5¹øÓÅtšœ¸Ær¡Ñrç膯«ª$檉ÄfðQ\%£”÷6Ê2+_º‰‰g éÒmÍéµÝN¬n.êÇjó´Ø\mJ Íž¦dÀ.Y¿lï/—7ë›§ßêþZÝ/—?·ÛÕf¹š %ý¤†luèµüü×[Λ?M›ù´ endstream endobj 159 0 obj << /Type /ObjStm /N 100 /First 874 /Length 2074 /Filter /FlateDecode >> stream xÚíYYs7~ç¯Àcô‚kË•*GŠWín\¶«âDå‡19R¸¡H…GÊù÷ûõ’‡‡†C’ÚMò ˆi>¾>Æfe9ÅFYN*á&žY9ï•Fq"<­òA~“ò Ï`T²O¯2» AeÐQTÖPÀ¼ ‚ °ØZ챊°½xå°Îa9ÆD€e…üN¼ãM ñ2-<ü… 3Ø<ÉYþ<6Î8ßÈÒŒKÈ…lfETÓx ¼•Š8Fìœá çQ`Ù4A–‚'JAö‰Ê‹s·^f ’Æ(Ǹ- A¬0A¹ÓÀáfÑa%Hc Œ“ ÂÁb€Wôìðô2!܃¬WŒ›ƒYÈ„Y²ŠÙša ì‰Â¼•+âUÄ1dñ*AŠd£ò{.æW6aåUVÞr- äöàÞ;ÊÂ^ž} )ï…˜@Øö‰A^èK ×ó™åUVÁ0DŽAì…Øª@^fƒH‚ Zlè0ãñ‹1á¡K\:܈c 2a¯B2²$YT†,C9,v¢qØË£Ùâ´heÈ,ŠÑ.E Ä2ð2Td\Ÿ|RÑCž°ëè¡_Âc€& ?b`ñ*Ô†€Õ‰kQ1G¡ °xð…E©$l9Õö„»'ÊP0œ#9¹nÄ+i¬5ùì/^ Š ueY<î*Þÿð#CéQ3î0]M&_~ùå¨3¾Ew9›.Õ‹ª¸„ëú5ý¥ø£ÛŒqç¼Ùç®×cޱCìéž®šÖ48¡xÿÝÇÿTÃõ ¯nIxxx÷z>¾­–êJ¯/.Uñ®ú´TŒ½ûí®Â‹ò¦ç`²š.pÚúÈAñ¦ZÌVóaµ¨±¡žúW5—_Í>©+ƒ Ÿ½¦i³Õ)Àiå[€<­É_N§3ìxU£°ôpòù¼*—ãÙô¢\Vê‹‹À;q@眧3œ4=úîÝx9Á›7ê›yy÷Óx¸Pß­–w«åY}ßÑjXÍå­ÓV›³ÍY3™:Û¾¸èeP¼]}\Ö?eÒŠ—·òŽÅW墪uW|[M~­–ãa9(¾žg£ñô¦FX¹%¶¼*^Ÿ õ³µ’>4޹_±Þða}ñýxúrº~}1¾¾® Aù £¸OW ˜CñËj¶¬&ÕõRð·ÍpÿÅb\ÜÌË_«¢®–U1χ«ÛëIõ©XŽ'£ª¸-‡óÙ´ø8¯@ƒ%åpå£1ŽXŒ…†nFÕu1ÇÙÅŠLʇɟVÓ›r¾º”«e1»™M«Ÿ‹a)û-îÊaµcAµž’üçxú3n;›ªym)æCñmñª8¿²õ±-좆ڻ“ ÄkøYí¬ÕËڦߪâ›Ù»™‚¿}q=¾YÍ+íÎĺn\à ÑÀ"÷½µIæRÒ‚ç “o¥…g³#í3µÓ±‡ÑI˜Nš9<†M×o BÓÃ~ù~¨™c+:죀$¶ ݇‘Ÿ‚ QEßIK[dˆ8™uFxl¥ó†t|@m©é qÈÚ Jw#ö¤ÊêFì¼ÎÀánÄ6k6§ǂã¦út$à ZãzÙMŠ{v³f¿GôØÜíÿ(zØfôø±¼»¾Ê~,—‹g@k=ïF µ6ÿŽ@"‰Z*¨HÚIÝc=ð[Ê<£k A¼‚6Ù1pk’ÕÇ ƒXØ”O Ö€ßlŽx}ÓÓ›ˆÑ–B¢ŽJÜÈø] 5¬ôÍ•ìÄìæZRà­Ÿv$úª88ê‘’ ¼ÒòœÁf:hÕ/«”4騴¾j´§’­d„*k¨³óÁ¸vNĺžGA'}ÏŠsY£–íÈ ™çã$'x'ò«9×] mŒæ1m2bŸQ$6"U R—jv’º²ŽÒ™‰N£6oÿƒÒÌè€Ûd(ÎÅ(§sbGíd–6Iz 8š¸˜]Д¤Ÿä%ÙåºöIZ-¤ G¹%ÉŒŸ˜=[$nv8Ë~ Ú½LZZ;½ÀP:J5èY:!3r-™‘ûŸ©«¥m¶ŸÕñßYMç C@DJAG+Mad9¨ÞÀ <Šô|‰ð¬3j’ò¹nx:-ýhbÖ'2"8a;U[d.£Sz¬Îß¡Ed‘F®Gˆ;ÐîÛ&øGŸ¤í©í.¶Mß¶ª>Ÿ³ö ß HöÂ%J{¸D¡/.­o* êgLƘi„ ¢µDÅŒð¢ŠjÁ…?Òž¥Ã#͈DB%«å‰Ô)µÅû°kÊ;™r“Œ£­-p­#¥ ƒ.ý¥ú³B¯&¹ýÐçN }ä¶šH†ðÆ‡ÚÆÄ©¶±¶ëånÊ¥ä!÷LíÄò59ªù(Âb2¡€7\èp_nÀCýý¶wñ¾wqïÉp7­ð6fX‚݈}$} §{˜Vr…CUÃAbƒm;±Ô#ÆJ]jh'vˆ:,Å EíùÏЩ–¯»¨þtΡGÓ®;U0ŸKž§šßëéÊ÷×~†æ;µË¶Éä‹p†–]; Õc@˜„ÝØptSK^ˇìÓüÿ±þûé}¹-ÍõVVØï½÷e5Òºð¬½5¤kBÊÆ-såŠÏõ3?’Îm²¨¸›E…n]“°Ý_ð.i³ G½ótÄŠþ¢Ù×_ú½r&nÉ™øOõ±„b¼—ÊnÒN endstream endobj 279 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 302 0 obj << /Length1 2360 /Length2 8708 /Length3 0 /Length 9954 /Filter /FlateDecode >> stream xÚweXj×. ­ÒC‡Ä€4RÒÝH 9ÌÀÌÐHHIwJ#-HƒtJ7"HHˆ´gÜû}7îïûqÎu®ù3÷Zë¹×½Özb†…AK—[ÆjR€BÜ|<@1€2Ä CÁ–Kˆ4ñqYXô`пœ¸, Ü û#L²D mr–d´®% ²øøÅ€Å ø@ÑÿÆAabK{€ÈÝÁe‘…ºxÁììb€¿@6+¯?CnpˆÀÞ€z@( XBl¿å+@av ž³ü÷ëï¼B2ñt@`%™Â b‚ö €®²@Óå(ùM Ps°Aà .€=á"ÆË ·†9¸ à…z|¸ùÜ|ÂÂA¤‘Ç‚¿SiY:üG ðn¥2Ä àãû[²›Ëe»ÿ½mìÿÙ6€“i@ÈnØÿ¿·ÀÿïØÿßGý?%+¸Áµ’ýþ¯ Kg°×ÿ5Ìô—rvuƒ›óÿ"Ñý«Í"#e„%ØÁZbþ§ópO–ÂÚ€€¹þ6ëÿ®ìiAá¿O(rž@àÿðéÙ;X;A@p8@ð?.K8²€ÿß„ìó¿õÈ# ±ù=~A!€% fé… DîG~AA€ÀÉì y"¥ðò@ ä€‹Â€Ü渿·„ €Wæ·éo$à}z‡„¼²wHÀ+w‡D¼òÿ a €Wáñx•îÐc¯òðªÜ!d>µ;„̧~‡ù4î2Ÿæ?H™Oë!óéÜ!d>Ý;„̧w‡Õêß!dvƒ(’Óä!µXÞ!$ rÖ0k7çìü¿íÌîtŒnu‡øfiíBÞß¶ˆ;ûã쟔ÈJ­ÿA‚H2k(¹]þÉ)ðÛâì|§î÷>âµù"S‚îU‚þ•Aè·ßÕÍüÇd!¶wKÚlÜÿàøí†ºÁþX€ ±»cDúíþº-þ A µ¿“l½½—‹=òGÒæðD*uü"GàôDvâN±²dðïƒrçGöín2|È{’÷.• ’ ‚<`ø‘M€Þ©C.†þˬÈåÎ$s±„ ÿ¡ß¬ÿ ò‘åuÁþ:·ÿ„ ýes€ÞIÙA°Ûð!-®w4Èö¹ºA‘°ÕƒâCZÿè1²ƒw ‚¿Èý "ÃáÈç蟤Hmp°%Üþ ¤´;¡‚Èšö0гGÖŽð€þ±ÉáöDÎÅýˆì¤ÇDÞ[¼ž@$½×Ùeï¿à¿.5k7²«ˆ¿Þ-ä÷_l뀼eA O5îÂ,ÔZ<ı6¤õ¼Z†Úƒ{ó£äÄO‰éÄýSŽ¿Z ébLÂ]È”Saa5TLáAü>áÀµ{gui€Cªççýù$ÂáuŒ½§7îÀ¬RºƒíçTûi›à—„Td¯{*YE:-¨üZ£¹e†¢4³ú‹ÊÌ´QŸE–²¾ ˆ¡ò·ü 4­k3àŸtoâXðSºp°l_Ó´EæNH)ï)Âöî¹nDÆŸ†ß@(å‚hU ¹Fã øï+ÉÛobÞïUç]ì¢ÜŒjeJM±oºOIµ\Í”‘ZjJ‰±!÷qÖ{Â÷£¹¿C ãcèAõUI ÂwôØË0'Ýôuy‡HÒë@UU•çË?®i ˆ%>:Ó¿ÇéÞM|¤îÑŸÙiÀ.Û]ÊVP¬?‡zÚhÁ.D_úT°Hº4ÙßåËßd3õ2·H!‰;kÕ…†$– æ-cFþ%çǯó'ãXRþhæNHb×;c'ÒÜOð@Ðì32W z] afÌ!ŠΗu zü­žç¥sS"·§B=’}'›0Œû»e~é Ì/åÍ?½æ»Ÿ1M@‚Üuj‚ÈìDY25—×> US]O€%›×¸ÉýªøøI–\BnÓ½kSKÊ\ú@Ð~vœÚ¹<èI>•ýݨ`m:<íéïŠýÊí…glï î<’>]µ£¼À\ýÂRÃötKÌU9éo8…ágqZ9(}UuC»IB3O1x ÷¯q(w¿7rìR:÷8Õ ð–盂s·ê>‹÷“]ʼnuõ?I¿îs\%òÓMÒÉFhBÄAöЀÎ@ßoáRÎì¼ü¦ºd"À®¬O3®o5œmœFmÿ£ºTß´¯NgæGk ©±Eýb§žïMí²ªËÿH6&…ßuÄëÚ¯‹ÚðX~¡£ Ñ2 å† 2t “£gð\ô2 ¹Rfçï:-íHpÊJí~xÄrC”ö:Ѻ¼¯æò¥§ôF¹Í÷bH8w˜wmT¦cíâüzÙãí)9)iQïR<´ßXaá%kUDà£ÛyOCÆ‚QÚãÃV«D)þ nŽÝa÷k¼tøÈç]—ÝcóÌê8¡ö«†£îÓ7x·]—.Pt7Y/¶a6A[¢dË™ ᢑ[¯sn)¦&L¥9–ëKÀá}mö{ß3:GÖÚq?)~o_ãˆþÒÇgv°–¬r˜¹É½ÄsôÙÖwU,†îƒ~™ñ§qã/™|³îdƒ=±ëà½ûÍæ¥'{'zõZá ¡X/iéÚ;zèO"äÓã§ÊøØtæÔO{2vk7$‘z(¶Õ¼XŸ¨@ψ2MÝ=ñ( ¡¤ é$pó²;’ÏÙ‰©Ç™BÿÊnœÀPý®‘2·¢$&mØ*cI‹oêþ®häT–‘Ö|w¬‘Ë)üÓÄêTò]9íúõÙЯ›ÁhYm6EGH©@òæ3Þ_ýäÇR‰ |Yõ6¦û¯©¬«ÞaÅ9½ÑßÞN[–œWhOuÇýNAuÏhŠp‡úäé)¶_F]8wçç–iºtýšò9,†™–°Vù¢eSR@ ‘߀›1zÀÙñAcÍê×ëˆkn!*pb«03½—ó;kƸà×X÷èQu2k&hµg‘VacùˆrE71ý…S¬ó´_9ë¢ø|_އÂÕÚVqìä"$µS’Ç8§.¸ %=ia›^œx×x˜•¹o'-нŒÛ-b^›9¸‰¾„ÏšÞª³¥ÔT+X,ú,’¾¶Pÿ`D²x»~‡A!ð°Ÿ6/ þbÇÜSÒ8I¨¦ªòÝ Ì`®«ŒrդʄôiŠªKlƒz,œ!ÒLéýôâ~ûgZ§¢ xX.XZk¡² vKÒ],VF³bغ³Ð<2CÚ™´”ïÓ‚¥ç± R˜Nj;Û¡ß8ÀWßÇx¾¦Äâ*¶ÃØ&G­ÒÜ;–þ"殟[àò€L>Uì™W\Gl¯ÊÔ~écã”wNÃVá¯t3€‡„önÆÒôÝþ‹g.Êhºåö^ìŽßœÏ:çNކòZZ3/Ç"cEAE y1ŠÊ]˜Ù­1çf3~=q²´‰¦è3?ÇÂ(e5¡ú*#Ò ?ÉõGCäS ærÏàí1Öt…VàHQ'#v¦§2,Z\ÅÔùxÉæûk+:©ÓÛlxƒ»Ï•¸-±ÖÒT¯®+ÔF×#ÕKÌ ¼|â¬é°Ð{C%[N‰Ó`ãz÷´——Ñ+Á‚EÂ#³ L.}lÉ Í] ¾ÖèåÑ…oÑ£¯å4Òë¡ö ¸UúA(4g¶Æ«]eÌ8$¬°ˆÔ-É™tÆy«W¶ØíV®®ÌÑLl±Më<»à•ÆÚ• Lφ‘y»WÃl©TølMo1Y|¡æÇâVvˆ¿B>†WpM¢Þ+%„·3q³–œ·5Üâ,V÷*$ò†ûऋ‹jâû+³n÷ÕÙ5Ìüà?ÉÎ^ªŸt²~ÿÄËh¢µÕ‰[ïœ:/î*µ¿7Wݧ²vwmó¦Ã8¦Üáë!ÈR N«}-Ÿ''•±¨Ô€ê¿Î+&XÇÎaú>ï+.´/±.®y[[k“1ªteN}Ü]UØ‘Ü=AMê´[5Á#øXkàã›Þ™&õ–6©Bh=ñé°ª7âIß¼iøÝ(aä} rB:ÙB8ß‚÷•æÆ¢ùÌ|šôƒÄéàxÌrMüN­ã–Ô8L„ÆãñáÝ9€Ws˜LO­÷aU”ÄKQm ýüOÞ66ÚswA´Ò«WEˆ6Ê4@È™Õ(¦Ø'Žàó5^Í%ëÚPº¨'§vDjº J¼çrvMmüA/E‰LÂsûÛ1Òmœ)JÈ/‘ìÃÞ‚<*Éf‘Êm¡·¸®5W†ÃBL>š¬/G=XsÊ‚°ûèß(u?Ö $ëS=Êq˜­ÙQ…SÉ¢sŠ(¶â›ÎØ&â£m}šißÚE3!Ôžˆ¹Âg‹òš{s3ªeeu ‹ªk tÑñÔý¸Ï\™¶ J‰e4ïås¢SO÷6“(7(cé&#”uÒÉ{4ݧ»äp~T} špW»` Ü[8±ÍKk ÷öa³˜åvUÏ`x82MüÊøÀ¢agt>)b^6æí)î–·ä¾%âÞp•þ(²+¡¸ÿM+™ø'Ϊô£v0òïφç-ƒ,‹¹$ï_‹‹óñNH€GHòÉãȆ`½÷*ëßT¡É9ûº<ÔÝ`,Á4¬"/S¨aè¶í·tÖÓy—£"Ý“1ëþ¼0°¿ ÍÉ:¹R”¼¨H„ü¡•ÕU‘à~Éàâ0ZµQ@r0`\V`Ý’P<5£GÀ/_¢HxiÚÅ¢kséšw1P¥’‹ÅÑÐê?÷ž•è|™Ô¦Qte‡gKuñ…÷"æçU ÷æ/|i¯OߢտWçÜ2æ=* Ë«ô¥Ü´˜NËz[@‘¼÷ÔRˆéQc "*DîrÑßW¡èpKâÙ¾nß+’Èt-Âz´oqûF- † îsra­/Y/Ël|¨¶ÊÙP™{\Ðr*œP2¬ÁÓëÏ©ŽW²•cM_>Qû ÎõËâ&Œrhg J†MÝʽåRqÇÁ’>O7Ê‹+ð† iÒ£…ÍÔ°à©­LâhÇ„ŸG8„+™¸)"¬ø³æ({aŸðâˡśPªOíqfÙâ¡ÿ âÝk ®3h”²õùƒºò¢U{“+¿ƒ<ÓÉ]WÑÉb‚œ-ʆ?_i9²J0B>LÁnjCj¹M·ò2” áMô¿º(åÉ(”0M ûE_¼qC+ð¡Z[‡aT{OQc”»…"»bÐýÎ:ûs²¥Å¾é/³\K°„'vbŒµ«*FQó6ÿDŸÅ@Xo&–áN¥*¢î®ЧÚìÏ•——ÁÑáú&åóñR6”éÙ„GÊ×îØº?-‰¾² × ·’¦Û.¢9W wEH&¿Év ]¸a¬r…á—ØÎøŒV®q±R”cزev¤Çg ÙÄòÖâz¢\MðY ›j{‘ë–׎}ªw¯ÕÔ¨a. ÅšÐYE=RkìPò¬õû8ï£s¢ >H‘:üx¢*ªmüñôæÁ[ ßã´èÎÏÿæ’–¸žøBÿ¥úÅ|ÃØ’‡äx4 B¿Ñ&zO @lVBËÝœ¯x vlV!öÙ?sÑ=ÃÓ©²€ËâÛP»k˜ÀPyXm6¯vÄbÓõ=A£À¶¹¨gùïë÷’žæ1®ËÝûñù¼ìd^Ðí(N¸e0ÎÕTíŒÿ–ŠyaÃú­æ /Î÷U&s‚.oàÞë¶‚Ü:Êj«nÍíÌ‚³Röþ{ÜàêDbà 6ƒß}Œ€e†T°¾¤•àË®ªWÌO'gsn´gɧ\Wo_<ôÑ0oXÿè…ÿ¥I¡9ò$úž‡ì VWýgTAÜÇ–ÑÇ]Ö ªÄt*ès!K|:ٙɞ]~˜Z?¤2)Ï`l´ÖœgÍM¬=¦~… Ú¥ð&1ãÞpÂÛpkzÚ[º£h}&Ä€#£gŠD³G~Z›‡µÿ #åÍâó¥cpé ktí´ßLëî¤ñ^juÑêï\Ž5)Zz#£†'Ø<¥|F8É45Ž]À£Ó:Ý«·Ï×<ü¾}î«Þ5`¡/è [Ðèý6åšÒz„Ô]ZT ©LüUJCÏÉ¿aˆ»LÖó¯HléÅ…¾yw‰nŠBû€? ü æGRªJ»_1¹ëaåbv®ñ‘¯öùU6M‰ÁþvÏ罡֓U? úôVäÞi$å§W×hõ̶Ù|{@¬: TÜØð©…Õr]›Ð_yA$ÌB?™÷å‚[°TºúV®•Ä‹‹ÊÚl³4ÃÛžœåiH—0Dµ¢‰¿¯µfõ¬º(© '[{§3Æ:èÜè(óö%ž£LGNrj‚"¿•~pR÷þâg:ÖªÂöç}œ®¾¨[Ü’¥×žO ;›îØ£ˆÓí³Ï/ªnD­eØÀ$Û^ÃuŽ•-ÚrFÐ&n£étÄìXIž H¡Â}ùïm}Óz÷ùÀ)\€`°qbÐd¾kÍÞ¿£–±•ØØk´¸hjù¬ºƒÖ»Ò.Ë%²mr ó0Ý`Zs“hôǯrœà/ü^z•MO”Þ§ôuéÑWÌrE3böÈpO]uP|ÃxŽÆ¬M«u’zu~õÁbR¶ê]*Ég£»šSºùNb@á¸L¶0­eQnn>úÔ ô7ñCìb)2ööÒš¥„â%:ÁC¿ÞÉ2Em[é9Žæ½#o®Rç³ÆÊ¿Ž#Q¢m“O‰Õ§û8Xä3‹[ÍÚ-D˜¬ã8×É·?¦ÿ…¥EyCGtƒA;eÓÑñ9ÌWôjƒ›xÜ))¹md]…§ßyôú"@~ÿ¶OU¡d“®â²óªI%™Uí»“ëvAªü0ºÆ4&7¦„®‹;ô§@iƒ¶þ™gý)@,¥bð«™”ÙÞ·]é°JÑ9=˲Å_Õ˜âFÎ -‚ÀPoÞ*ƒ“æóø\Fê¢EÓ ‰=Ævjkêc—±l^-ûð¦Ý¯-JZhN³þoŠÃ»èoœr8¾M)ÿH{¶­”’\Ó8þà+>.WÑ>X÷^6ôµHP…ä a·iéœvòÒ%´xC•ûýk‹Kjò‹Ày6rù’ÆO¶éÜ-^òë<·à\¡§ì*×SñfÕO+/_-E¾¢/›Z÷¹'îR>o.–Lï¡“E«—þá-ôÂ]Ö™ t©Ê÷пD½D˜iJ“B£×Lm‡9l~ðöE'†#ñ}à ó³/xÄ}áø.\”o)¡püGþƒOß`œ5Âá]1 %ÉÇLS‡b$µÇç¿Ç "6ñh°ÿ¶×”œ×(3·M¡ãy®ÅùD½ˆ+ç;‹eaöMÚ£ŸK’®ÉõFß³_Ql ãoŸ¡KJr]ƦŒyòeÄÒÍß ºǘ_–i߂ɢ‹¦ë_xÐä òrØÕ}õò¹-øüÞÞuÿmp ?¾A²¯n»èu—±à…²ÁM€ð`ž9Qé*'Ö{c. ;ÔD\\ïí]ð õ`\mn|…BvøÁs´H©Ÿ !*Ο£ò=%†Amm#Ärø¶tØßºåFçJϱøfL;ŽÅhÚÖdY“Žo3›À¿;T8ÔeÈ÷ɉR‹é•0ê;ÍTÀ¨¢«øÓä'|1æˆÃX6]cèV>O4íýBkM4Ê.#ã›2šêQ ÿ‰5\I¿2xÚû¨_åë/Ù6ŽP¥¤]ÛAR•"ÒnÛSz¿&?£Ý_«æ0BY’Êó¬¬ûíDï[8&qeŠÆ$5Eûå}FûZÚÇ[ ö'®(àœH“±×PGÉ•³u6TÆÎ&åWÑÃÓ6€%ØÑÍÝ•#®n› öm\µd~¯qÞt;Vo:[ïëðàœRF¶SøgA»®UŽH–ïDR#m ‡ÙRøt§[æT–—Oòýû€-KÄx§ ¤,_¯ èÝå¤êszUëXD¹§Ò:u.?›È²E0üew×àŸä“<aÃGÁ¾¨Ü¶ªOß%®¬%I“¢J4² Óâu‘ìr6FFa׎pCUdWÒ$øO)¯zÌ¡­%fÔ œÌ²´æo1¨eF…ïgµÚôo\#:¶ÑÔJÐåé?ÚôÁQu‡I±O\ÞÇ&«…ÉC/ýú¢ÉfN^@g‡‰/ >¡S8 ¼ö•.¶­¡qœÜ~ñJVÏÆüô +k° Æû ù¸iCÐåv¿{·sü‡i¹Fg-ýèæ+¢3ôdz)Ãp<*üaŽËs‡ƒóâ±o‰S [:Ý#©fÝðßÏLf çÓØ:b¤ÚÚWÚ¤Ó{$%TôËܶVú7•ºÓHs?‹Se™XÝgn¼Ùʵ„Ü3a¡ËƯíT¢e ŒâáIn!×Ã#Žb¢ž qSÌ©ù„ÑŸ=¯ûi!êúÒѹ=!h4FðŒˆ.eéÍ>+‹TÖÇ(m;+íƒ[kÝjb:zGmÖ+x‡ÜyîÉiumXIÇT`ÔÝÕw5&dYsã%ú*Ð>þ&"¢Öõ“LúŠrìÃU~‘ЮÁ”ݘŸN8ÔÝÞ¤Zǰ@g~ÊUNŸc<”/ãAéþ=a1Hg H%â<:ÏP9-—êê„aMÎÒÂñ †·ëõecú󥸙 bÈtM; Jä¨zýW m¾¦¸sáYÍsÑWÖ_qݺHôŽYؼ•9*÷M›1ü¹-\þòqȧî˜Þºáœ–-W¹l¶Œ'kžK5R8Ï;y¦7K»ÜžIÞH™²/yæ·AW¾'a³õZ.œ¾³>æ²XId!˜<ñ%ËX|íˆ"3õ”¡Rl[ejV|ö kƒ.˜¾úž}ì…Û'É!YFýÓ_åµMÍA…LÒ9ŸDtõÕñóêœÎ.Oó´çX©1gÊgq<[<˘Y˜ŸWEä¿OqGºõRKlÊqÓp?á‰Á›U¢Þ‘¹.bmñWxåѪƇQzÓ-xPlç¼²™±ì«B-_Úà#ÙÙƒZ ’qüêá={Ìõb­˜É©ôÄ™zô¹b…šÃ»¶ûl_[—sú½xðBÉ­hŸË€}@€uDèË›yÏŠa ¢–ö®ì¡sg™\h•ÚRMÈ)‘ Œ$ª¥Uw’ž‰ͫѴ–‘*]@2^Ãèž{Vúø *)éË'y)gû.diÄKJ]mÙ5¦ÁMŽBé=‰—O:’`Û´Ê»1__ʆâ¤$|9¾¯§Ãk›wÁ U+QZc­ÐEÑP‡•»+“©%=hI;Œóëu:fÛ—²ùD?ßr.äM0ç´.¢4MþE©/g1œi'`,½Ãš}.IŒMÙî-0Gñü Ç­°v¡¬5õgô×,;箤÷zHjÏ#éO×^$ehäÿH.æÉëeÖ·ííše¿Â;H2ßK:î³ß¸c¾íÈuš!jEŒ¶/د€\"Ò2‡Aç>d‡r<ÝšV·Wì“&l÷§­oîö]xõÚÎ6HŽ”F<8ß‹M«¼-$qKŠ5ÉCÛ÷n ]þÖ2Jþ-âȃƒ™rؘsb’FIå¦ú±å•d¼$Vg-zÅ­°˜ÒE…ÔMI*aâ¨r‹ÄäÂh¡?; •úiÚŠ3nHÆRd<|¯²FnìZÁ˜—mß0Ôc†1MóÙ¹Ó2èä¤>©ñ]Ä Ý;ûG°°™w!A‰[’Ý^j—ªZä¯L…”ÌSBªaV+†¡p†fË~©ýéuma ß`[ í÷²ff5¦ªÃ¯ì ½…ӱϾS#*ÌÜüRZ£•ÔL šâAßF4”³´G?C°Ç›åÅI˜¸°ZE»¢”Ÿ'fmLÍáĦz­Tj’êú½pPŸ›#Š|^Єûÿòß~ÕÊø¬Z’j•æ§¡Ip)œ‘–ãÊCñ¥—ïmî÷–Ó”;^«p0'³Í DQùÖCö òŸq[óÈmÛu³}p…¿:e™OC…× ÛçÖµdŸ“óNgúN认/Pñ,¦ÃK•¯öï׎D£±s©‡2Ò¸p'–ë~yZøø`—9:C½$¶ðÍ+ÎÍeGœ 2>Œ&;v³&F‚§ÇøÉÄÜALΪC.ÏLÈsë„–+=zX?¸õ ØvÔbX`”ñº’-£ñ” õxH!n3?-ðüÙ¯ÄÅ&â,.Y¹Î}¿má '?òÕ^”/YëRF)l©(F4G„J4ºƒ=4ÑMeL­fO=TxH ögJ)Å=F{^ùukýÕRäêkà>.Æ TºlI¼÷n<¦ÎüÇíq³“(nׯIZ£G G–9yEJ0šÁ?Ù78 ÷Ö¨ÍHÁ–ç1žq”–®°ÀA.‹]RÙ®÷õC2Ó»“‘çò7ôq}붦úàSÅT¨(é­Ü~àp]lšbñ9÷|ŒqR#½Äè§îºÚ³XñÒ,MŸåFÆõï‘UÕôÝV» 2ZYèÃZ“­Ý'Ù·0¡ô@Ëõ‘CÇ…Æ•O¼ ÎÙìƒíXË'å=Ž—E^R[bÆgžûAÏP“æ|È3b°¾?Ô“&(¹9.H{Tø$u=±x!ž&Êå üiÁæèõiM~4’HŒ§£qRµ¸$QååûH‹E7#va¾`œ ?zú:äQ¤}3¥4ʯ:§Ëf:‹Ê÷Õ:¼©†eÖ¿}‹¨Sw7y±%ÐB;KGöÔ÷!yˆ¦.#ý˜KóçÞv­{õ5¢Ù¶M‰,Ê„.˜Ë$…_u†:)æ6ŸWh?JÉ"k1ÎxOa4{xM7û ÇÖ~LJ»,Ï| 6<»_ì°š]øìá Oþuý86BEçÊH.K÷9k(ú»œa^ é´5ÇxÙŠS·°øã‰ókì –Û§jàžùr»vÕ MýiJ5xx‰¯ƒ^¾¥çé£Èzà‡]ɪPü‘J÷,T5Ü”ÒÃç[‰¡—Œè_§ûêÆ0*¶©Ç;w½Y¹¯Ê»#`/HMz€³–£89Bl/‘x]Ì^LÄNTqÄ#&Åå)¯³¯ÒË܈ò…y¤5Ï)NügÏ£{£l¬9ÔϪ˜T÷ù¹€Às~ë±/^EaË‚r`lÆ%Š ²> stream xÚv4îÛví=ª­­bo*fí]{o"‚‰›Ú«FÍR³µU)EQÔjíM©]EmŠÚëÕþÖÿ÷ÿ¾sÞ÷äœä¹÷}=÷u?'lLÚz|²¶(˜ ‰æñÅòr â ÙØôáhìO5!›!ÌÍŽBŠÿ‡ƒ¼ ‚¾Ñ)@Ð7~($@Í @`qˆ8ÅþrD¹‰ žp[€?@ …„¹²É£\|Üàöè›2œP.HLL„÷w8@Öæ‡B Úæ|S AôPP8 í󯜒h´‹¸€€——?ÄÙåf/ÅÅ ð‚£º0w˜›'Ìð 0@â û?!@ßîþ‡^e‡ö‚¸Á7  CºßDx man€›â=Uu€– ù‡³ú¼€?ïâýîÏè_‰àÈßÁ(åìAúÀ‘ö;8ÐRRçG{£y¤í/GÂuñ„À›‡ßCJ²:È À?á¹CÝà.hw~w8âD_innYi+rv†!Ñî„¿úS€»Á 7×î#ðÇd(/¤ßŸ‚ik÷ „­‡‹€îêSUøÓåFEøÎ†@0sÀ¼¡¿Òëû¸À~«oø¹ \v7 `p;ØÍ¡Ÿ;Ä@»yÀüþÓðo‰ØÂ¡h€ ÌŽ$ü'ûf÷‡|3|7¸7À xÃ=øëó÷Éâ†^¶($Âç÷ßóPRÔ‘3Òäùñß699”7À,à@À›ò"7‡€§ùûþÿ[« ÿÙÜdTEÚ¡b`¸¹¼¿pxþI Î?W† ðï š¨.ÜÿPß( „Þ|þÏ ð;äÿÇû_Yþ7êÿwCJÄo3çoûÿc†8Ã>:ÜPÙ}³¨›å@þ·«ìU–C!lÿÛ¦Š†Ü,‡,Òñ÷%ÂÝ•àÞ0[m8êðƒþšÁMr ÓF¹Ã=5>ø_¶›uƒ:Ý<'î7“úm‚ÝlÓ¿K*"¡(Û_k'( @ÜÜ >„7ƒ¿‘„~ ›ý´…yÿ&6@€‰Bß„nÀìPn„¿æ) þRý–ÄD¿¥ú`ÿ! ìÿoˆ'€üQ àù[üWƒP7·›½ýM ›îÿ’?0˜7 J85‚J„9¾ k:©”¥óâ[|8ƶb”ÎÅç7åÖìqFŠ—Êõ&+dÁíH6µ§|vI‘óPfšñÒo³¡/ò}²Nã¹ÿ…U¢îÈJ#á—aÊΡ‚MÙêO ô|ú2ßý/]ý ƒ°0ZÔØ^¸zˆ’jçÝ9ñú¨ì]ýéÕLÄÄŠÎ÷7àGD¯Fùâ b̓‹ÇÙ^Úd¦fÆEó1àsSüð&?<£ÈºfTKä! ØŠ*ô3ý*úÙwîµ¾ {+ +)5Ö!Eÿ»ŸÜÚ35ªI¿’¢Ø…‡“9"ÑO»§Ã>&}~dHÃüX›Ú-¬”ïafzËÖÖ\/h¦Â:¤ `ç`¬Æ÷ g+Q¶K®`é)±Ê¦‡ž^²0è%cØò4·ÝoÝÚ1há ;U’Ö; ~ÇNž:nªÔ¦P8+™“cw6G{.z9…Á!Ñ=‚Ͻ£¥àhÍØY'ˆÿµ´òºÁZÌ»hü„£¿ê"4KÝcg“üµ D1Ä cñÞV®Aˆƒ{k1Üšª}ç‰ÙBáý=‹Ç"’“#ȈúÛb§s–¥†õ;Ï@`ýŠÊ8BÅ…é7gƒîÈŸ½ê=©CI‡ʜîõzëéJ,d’»ñ= !¾ŽÕš)y·ìa„òœÛn„‘4ЦçÏ:ïœðOŒ/9ë—˜[NþôÏrˆb§ U(XÄSš'M’ÑLÝ,5?Šy÷U2;­ƒÙ)žÿäÖoôFÎÀWÛÉàk“à&æÅöù2×{d£°¨RQÌÜ]ŸN"XùK°Ar$íÞy¯šbIèŠ)ïcmÓ‰ê$°Êí—žÀR­idkl°âuΡ9âiúÉ_ßÀ’c‘†gxH˜O|Hªçz­›TMtîD9¸÷ˆ‡‰¥+ÁàDo¬uÓø^ç¸Q@I ±WÏÉÝ-вé9R›ã• ×…>.m¨h€vrEWãþL|îf&^ÎËŸ›Z u„?óò ÒvÇÉ EÔO üÅîeÆG,¥¾Ëè˜ðuuᾈp’³D×$¤(P«žìóØ—8˜T~7¯TU Ë•|½Î®3ö"Šƒ”–4•}Àf$ÛµÑc«œ{°§ýò´&«ûv b©cÈö±+xÈ‚±«0Õö02{#9pϼée eW)>ÐÒè äñØ–u~pw(Å{…¤T­tÚ£ìc÷L€£³ž•Œ8†TðÀ;–èçj× Š? Ør=†'Þ9¥E¶Œ—¨™¿ÅÍéà~ú<¯™.V„ dþÁ†%V0q¢@ßÍ{®]Ñ®•÷àªPèùÇ,Qr2÷´ï¥ë·˜¾YãÓ“oTçw¢7£¢‚Þ;í(6t¹å[›Ññtg\SÞü,E—Î;Æj§øre?ï8Õ@¿÷ý½'mÉ  0FÒ’F\Årr61êÉ‚ý2jìþ‘6Cœν=Æ$Ò¢ ñô/8ÛÅD ¦àaêð[μó#V™þGŒb줗‘˜´OÚ¤9~ÙUÍVŒÞÃòˆ~šØ`n~Ø4g~Š3”3ÓeË›ëáàzNª[Ùö—°P‹ÚD4וÉcfÛA·é—ݬŸ§oáRÙºñÛœt:Ò×™2ÇÈlg¢0ª~”PïF€”¹ež½v_"‰|æà|¹QâòÀ:^øÎJXsŸQ¶[ÍB̘ž‘$j(N’¬ g$wæÑÐÇ#®ë…Ú©uWNs‡ùÚ(`ÇQÇyƒâï}¤¦«=±rò?“X¹'§¿õ³HZ˘‰x¸"ƆyMú«B[¾ý`ú2f™÷¥B÷«|-XŠ÷ç")·›¿ðºÈY1â˜k”;·DE&±&Õ†õÚ‰î­_‰UÐá8>ù¸°§· øçª=‡Ít`{DúÇý#¦ÕÙÔB"_9uµÛƒ‰d˜QÃnû$¬k§bw$¾n:O’BÚPejpYÚc*Sþôz;ýðyÌØOG8¡ï›q‰#>¦›DNjµ&‰öïR¢l4)Ýå:äêœkîŠ#%LŸ‡Îž'PB÷̀˯ÞxÕ²9¯må=zìEÓ–¦JG¼~„dq–j¯Ñ~f‚wI«K¡j§nwdö¾«õ1©ÆvZj#_Ì@Ó^q‘¶6ÂÒØÞ¸VON‹–Ø0fæu×åû³¢¬Vc¼BoaŒH,K&¹†CñÊŒÅk™%õCÆê€ØvtƒÁý.s†›T&¨{8s aá ®2s…JŽÿ®wÐ&ü!I¸Ø«çQ_iÂÎù½ù’_Zt½K»Jh:Äóa¬ # ôõéåc Ýÿ”¸µáÙ@ûz5}½N!_®±˜M˜rsÉq²˜J©ºÆŸø¦'”mqZ3(ÄTµ9…kmâÏsòX^ß éÒ"úÐðåñ³¹K{¸‚ÔW\– ³têù×î9é|—S‘»tÒqHÌ¿µ#^À¼+2Ï õYeƒ÷5§E[qu$í>Ùoý´ò+w¿ÊðàBWEDS·;Àóö´ƒì&QáãÍ/4瓱^Äôà ¸k¥zæ9•^âîð 84Kv¯aþ‡@û~MiaŸ^N˜¥–뎷Jê·5æSû™xì]J™¼ç-ÓZa@Qƒ/ŒâF¾­å…ŵ|ÉÆ àD;ÎÀj±á×£Ðò^¾]Ç݃½ ÚÝ(Aï‡è¸/1õ·4ÉSMæ2Coþ‘ ^ ONQšúÑζ-ïoá(?}éµð­’åÂo¡.¿èdüHãï:ÿx?h楼‡·˜UvM ²T¢oeâ ^õ¢La~aC`Z D©»/®¾S)LBåL%L6 T[•sfN+iX9Š ´;îwy[ƒäü,Ç`/—Í EkEz+ŸÆ€ºè±cEgñGUâÂÀ zx.úeòóéÙ„§±búPž”Uɇ¢û"AÏn_Îô8¡¸B}°B† ·l¾Ô‘8ßúÁ¤\FyB¼9§j!å•’I;­œä=š¯‘XXãM=kPxg!‡vß/KŸJ6åc¾ë<îþÆÉÉò\(îõx©rÁ½­gíá­4U¯y©Ïi7" ™&¢÷•%¸ï{6:ÉÐ%as“T¬u K{‰v½/{É@ aÄt£bÒ´‹»âù!N}U;FâDÜ%d*[Èßô! ¹TÔ]O- ˆÇŸŠËÇú1Ew×å©‚Ǧ2Zz9ë5ê‘ùVüŽ…¸PÛ[ñ¢pJ±ÛˆbÝW¶ o¤fF „L_i¯gHK|M}ɶ%dÂzUÐ"ÀèCI\.ítÔDÇÖ·2¼1UuÖ¤¼…_ð✃ ;šgNç è(”÷Î=Õ¯ŸÊ„øJ,öÔžƒš^ >‡X×JXÛå(޹pà”Ü‚3¤³SQk‰5ÂÉH2Lõ%i‹‹]3´É1í¢ƒk= A >%ïž¾yºü©SħUøv¬ªÄ˜VH§Êí$ú:\ýÄv¬3š}°X¯X‰#ùs2 š3êÖÙýLÁÍû[ÂþñRöSƒ!^)ÖÛÇ©ú.d‹¦Ó¶Ž †¹¸nLÙxƒÇÏ­¥]J"Ù-©T\«;nà÷´ðB‰î‚$aw}Ô|žóLU}WÔM!±e¤HÐÇ}oóíô$úýL°*…è´ì.KKËDÛ.-ÃÉËî3…î²·W’Aéå³pc3ÚÀúº•4»ŽÀ`(CoçèÙb}ðweý7 ÄÖ¡‘¡ß›UÇ].qôl³+¯ýb»'$8•.÷‚V-"ï}ì.‘\g]_-ßëq /dÝ‘_}–†±c!e…w˜’TZªtpk.ôô¼ ~`U’â7qŒÈh_oæV¼bjŸ2‹çZ<ÕN‹á$xê:âFóó]ç‰;VÙÊbÍí öÈrm‹yÄ7Áì0ÂÌjM÷÷éùÔŽu|é=Aj’¾±WmJWü1.)x@pÇU“ˆ1O o¡l;`Î"yÅàµþä¨W¹ó·DãÁ˜èoYöù8—Œ"Ëa¶¨þûÄýɧ݃#wp2÷û4j²’XÉæ°tRMêÈ[•&H®d¸.Sq"Ü™¦Âñ~èJ%»g—®²ÇHpÂÓÆX™ùdâ5ù¦[¦hï/›é# Êò3§ê\¡¾²É’~E„Y{ÇG‚‡‡‚>Ÿ^= AÜì'q|ÍAÑû©çqA¯DÖ­zµxm‰iì˜-½Ëà¨bJç:0‘š»æ` Ú{¦H45ÓtV-*±`]Ûi-õ2àsþpcaç}Z/‘•c×Þ7&;õnÉ]¼D+‡¥þûO¿ ÒPù‰¬µ³èç&99¦åF·¢6¯"¨bB~rut´i#¶•æñÐÛ“-)΢%UAtøˆUÆf‘Xª"±ºAXÒµÅõ^„©’Ä}w«#ÆÀm½‹½W;ý¯è“!¶’g¾³9úXzM^Ÿ|ONÃçþ²ŸÙµow£&œŠŸK/›Ç ã6´_L2•`9¼ü8ܹ·£ëŒÒaø\Ãí‘¥Í1ŸU¼xÔ¿$I2> 1‰íPpüþô³JÃáRÊ»BäÞdóôvØ “TÝl·&K‘×(=›×!Z5~©\‰Z~Bgû°¯âj] Ep]ÖùÅ]ž{Áu©^/gq+½ÌY“.•Ý;ÎÕÈ"†”ñ3WÉMm¡4rçÁ‹<“väôdbc¢çhsÂ.¦FX›Š oqˆ¥ƒ×œ;ÒÏHÁ²ºÞgô"œÄ»©n‘²ížIðIU³UMê×$?¹yŽ=Çâû¢r6"‘ûUŒôÊGØ‚ÕèÇѧûyw^gß 7ãf™†Ô–P/$tÆìç‰BI,ᑼ :!ïavô?ä6§ŒëmŸšÁ°Ùê¡àƒCßYuqÌÞ×økµ›Gó±H™Áµº;Á8‘žI–Vø›Ï³ÔX6w'3©ÆèZ¿ðªëº<ÅÚ`t0©>¥‹²òü¾“6Vrgª :íyhËßxd·½R·IVÒ,|‰¡!§ýåD5FWyÝ%Zö-ò>ϬӇ ùÙÚ¥â[v".ÁÐ!ÒÔWÄÊmÓ‘Ñâþ àrð°3{M¸Ž¥*qð3Ïöås;GY¶.ûÀÍXA®{ Òѽ>ÇíVR²¸øíÎ.á¾`i†þÔfà àwñÉY? Ò!Öi–<Eõ/W&!#oãŒÍ™×è8/æ:d|iy™Œ\$§àWhnè{¬íj\S}£<ø _¬—"’ƒÕöǧ^åXì«B¾]¯ þ³ršTÇ Õ|bžä3òÖrøI\$Ë̹­3u†rYŒ·´t@}˜ô£Ýà¹ÎiÕ¶F¦ÝðQâæq=ȤB#±Ž»#™3/,¸^$à àÛlcäÕ«¢Þî·‹ó6ý0Ÿ8ûÆoçõŒ(Šri²Âúœô¬¬ˆóõ·Ó¥³3+#ïCú\B–­uùT•ko‡ÈÓ5a²áªLŽÖ¹^¯½uÛ‡ß/vâ0c¨ ï@çqØhõ(ÌŽ!ÏÚÍü†}?4Høe¸!.Ÿ+Ù7ãÎ¥òì‡}QÑÚ)dkGͱjóL‡…º¾ ¹›GZ²ÿ½÷ìÞÑ"‰¡â ÿn€_ítø4Ãè­¬–Óѹ{¹§æLw¬k©vó CãàØ;¢ -‘þ¥q¯{É%²ÛÎêŠÚ^Ðoîã¸:…öÇø>ôŠ·íÇFÕÝ£ùòúå@‚ –Æ·ê¨þ‘ÑEÊÖ*l)¹e\L]±ö$“²ëQÏâ”%—0hIʪD”v4¼Ù.Oe@GVó£2¦·™{ï&¨káî2Fèóš¶(êbغ ø.“[ƒ÷êv¼óL¬ {±œBŠóûó>:ÔÄáà€>€ ~圱èà;%žíP©Lœ¯˜´ÂæL‡¼ÉæÓ šðSçI+{õÅEŸ:%o݆º×ø§—Zd ñŠjLõuáöpÜ=cì‡!&b‚Ø0t1eïRÏTT`»UDt žD‹>Ájx? ¦0̧xýà à‹õ—D©6øŸ´¢šýìè+_6ŽªOS¾4#Õ;Må䄤 ðøf$-ÓÒ rnÃOó+$¸œnùWvމís£'ß|g»Ti d+·ŸâŒYmL ï¿%ÌÊ‚•7Ê“@¢²FÝöæL3}´` ?s7˜,<èk¾>ãS”e´1ˆ«8&`/fq}odÔ57-rþ€UäÚaá³ôÕÐR>.¶ÿB^vÇTCSdCŒs–SS.zÛÓàTë颡¼x…µÞ<7ß«1ã;ÁDZ´¥XŸvÈ/2ò»Rð/É¿´2ÎI‚C|Ç…7Ôʽ­+l¬õT*bŒIRèÂbÓ{ÒlI&Žzo›3Ê 6!Q^Ãå#ý¶­zÒ*ñsP ¶çF8s©ÑâÛë¥0M!gJÞà‰ÅÓÔ qÃ<¶øê~’*ɤ@Ž©ƒÕÖ¦¤ëž¡óé¶ìfwþqHjò›ƒ•­Ÿy>³9Êû>Ú1Q¥RR¾]íûüqÿÊy¶èE_¼þ<ˆù`ÇóqTÿ5•ä[1›$ÿnÿ[ÑWÈéÜøî‘xc2É:ë!°à5-G4ÉÃ|樵©Ro š`™q£×: ÷ã4?©í¸¤2r¨5ê>.-™Ð¤gñ£² ‡–É\WåÑD=¯dÛä³·’ ?ï’{ïÈîŸRDT8«Ò(ž÷JR{7L ÑÎʈ!Ðt›×$SNüÝœéÒƲ&NÁ´Î <“,‹‚6ÑÕLÁÔ×°`gI‚ó´{’ Ï}1½§€UˆÞ~–7ÝíG¯I1MZâ0-Ë«ûR¨ѱÀ0¶fÖÓÕ@ŠíC»åkT•2× Ì­Í2·`Cª»ž±¤t¾eú/À3·»H7Ëò)Ê×m7"]7)GLL‚ú³Y1`¼À”PãÌòím¹Xaôþ¹œY‡"T¤øâ‹Gðf<©§Ãg‡ôÊš[6o:ÕÌPmï‚‚Ö·0’W\]Æ›šß4D½=¸‘UŒY üû4–îÉùb F¤+•·a( [õc×HánžjÙË­¨dœ¼̬ç¡%c'ñçG¼šU±Ó¤™ýœ—ßóñ'Q`[sÇ^v”Ïû¼äÉ|Q̉tQið0ÜôÛÇQ_u¾»†¾Â›,5Ù×Uÿ ÓÇÈßpôÔhm™(oô³•ÜÀ¾­õ®‰êK=[®"®V&¶Š²KNøRGWy¹bc^ƒtPf¢ú<ýscß‘“U§œÞl°$?ž$Žwʼn{SÆÇ,+…rÌЂ”3|7þO>Ñ¿OŒñׯ{‡é#³0q%òå£[:ÃSZzÂHQh[+ïès\Žá w¤.ÕÂkÄëÚ‰sƒ÷¦áÍ_é²Ï¿Mí÷NÃÖ°ÔÖûåK¯ŸÞᯫc|ZTšµû9×ë8Áñ¡°Š>'ÁÄçÝTÙmQ.9Ä"åtrAÌš¤¬Åõc)Dÿ´¨¤!ør÷±»]ª/+cÁ³aöSA9sw:ííî—·'¥1ôŸððË»†žXÕØ»ß=Y‰®Òœvù\é¼{%l§1¬¸ÖUJÞtŸ2ŽÙ&±_šææÇfœ¹”òX£ôÝÉãäžPö¨»œÆÓÿ³gEd endstream endobj 306 0 obj << /Length1 1846 /Length2 13296 /Length3 0 /Length 14451 /Filter /FlateDecode >> stream xÚ÷PÚÒ ÁÝ%Øàîîî‚08 Ü!Á‚»»{€àî,8Á%¸?ŽÜ{Îýþ¿ê½šª™½Ú×îî]5Td*êLbf`4ØÞ…‰™• ¡$®ÃÆ `eå`feeG¤¢Ò°r±ýGŽH¥rr¶ÛóÿËB ty“I]Þ •ÀöyW[€›Ÿ‡Ÿ•ÀÎÊÊ÷C°?@øÉÊ  Ä Ûƒœ©$ÀNV–.oyþsКÒØøøxÿtˆÙœ¬Lö% ‹%Èî-£)Р6µ¹xüOZAK~777f 33ØÉB˜Žàfåb P9ƒœ>ÌP(í@ScF¤hXZ9ÿ¥P›»¸@€7­•)ÈÞùÍÅÕÞ äxËP—S|pÙÿe¬ø—#àï˰1³ý7ÜßÞ²²ÿÓhj ¶sÚ{XÙ[Ì­lA€ÒŠÌ.î.Œ ½Ù†@[gð›?ðÐÊhòfðgé@€´˜*øÆðo~ΦNV.ÎÌÎV¶pdù#ÌÛ5KÙ›I€íì@ö.ΈÔ'iå2}»w–¿›kcv³÷ú2·²73ÿƒ†™«‹¦½•£+HNòo›7â?2 €‹•••‡›r€ÜM-YþH ááúSÉö‡øƒ—Ø`þFäcezûAôr~\œ\A>^ÿVü/Bdc˜Y™ºL@VöˆÿDƒÌÿÂoýw²rè±¾€õÏOof¶·õøÇüϳH+è**|`ø›ò•ââ`w€7€‰‹ÀÆÆÍ ày;øüoœÿÞÀØÿ)UZý]Ý¿"ÊÙ›ƒ|‘x»½ÿùô÷dÐþ½6t€ÿÍ  ~›g€öŸñ×gåb5}ûbûÿ¼ºüÿ›ý?¢ü¿Žÿÿ­HÚÕÖöO=í_ÿ?z •­Çßoóìêò¶Jà· ±ÿ¿¦Ú ¿Zlköur.À· ³·°ýï5Z9K[¹ƒÌT¬\L-ÿ¢ÿtá-¸­•=Hìlõǃ`bceý?º·3µy{Tœßzõ§ ô¶Rÿ›RÊÞlöÇõèäô@|kýâx±½-©ÈýÏÙ°0Ûƒ]Þ\oä|æ`'Ä?:ÊÍ`ûCôâ°Hþñ²XÔþAõ'€E㿈Àü½E1ùñXLÿ‹þàÈbö/È`ý ¾¥4ÿ/äzKinõé=×j°«Ó¿Þê·ú|Kmû/ø–Ûîø¶,,öÿ‚o¹Áÿ…œo¶oø¿ÔoÉþßÿ+1Û[bç {S:¿íñ?jn‹Ë?ê·L.–N 1y+ÅÅ ü/‡·+tý|#òéÈþfþ¯èìoñ<þ©üÍÖäôW°ÿ™SW'§·—óÏý}ÿà?ŸiÈdЏ´6¶® #tcÚš¥ÚÕN¡còZrúæú€ —DW¸ît#–4܃¾º-E{-ºLúìuÔÚ÷¥-AµýÑûÉ(Nmz·ñÇîÀdÁ‘X}?1“†èž÷³£·V€Í»VÈ.yªGW^T•<¬;·>÷úþ²•±Ï »ª{ÕÜ HOe3LQš‘úÅsT¹&™óøä°.LÄðô˜çîhs×7³˜Ù“¯¤òq ˆ>ÇQ…^ºìÑ÷óžkìÎÝ”ºøÄï®1Ǧ©½Ä÷“åñ½JŠ"×…³xÂb†–ƒûâç´È}Uð‚K™„Òý»°(»³ÝLÓlµL'•Ô4¤õð^!T%2æ UÃ%F™DV~÷ÏÄêñ:f ß¾“tŸjvÑ{ÇÇàó³Eýš°#¹ÂÚêÌôå~º‡e)NË(Â$™Cü¤XVþ€;3®žë#¥6ìÕPà¥×ÿšË\tËdýÎú‹w‘‹þOþ>$w^<•‰G•†ý„³“ç®XËa½Æìkœ )t£N¾Ðí)öŽ„&ž‹`F9v:Æ&Ý¡ÕÅøÆð@¼÷á þÖ|­¾l€ïáG,£›ÒÑø†øG,Sªn4_Zl²eDùO‹Î¨h>)ƒ|Ž n{S^Û9ÜŸ1«&œ'0”‚Sî¨U™zÑ„Q‡§*Q×ñ4`´b$»è®?Bë;ûys%)·p‘×ÒwV£u/ ÖDN$IFGÖ3¶+^š[3$Æt~ë…¼9ÊÎ$wgí¹µ¤xW¾îª'ºì³¹¿D¾„8l&'EÀ°îÚ3ØëÿÄüÝŽ§á,ÞFêûGÛ¼ê"³/ÌL y¤_õƒ×±Ip~EB¤¥ Û¸’(ÖöÕräØ:_‘W%›¼ï¨;rC{¯m„÷­2;z–ŽÑ!°±Ük"LZ]{D‹>OׯSÏ´Z3=»“žvÅLQüÚQdHf‘óMmKÎ&›H<Õ%d›ÍÞÕ*F•pCg&¹ôw“êC­Léä ÙZ̽ùfoð‘nÚi醗æ¬Mx}ƒG6;§Ý²/®Ã¦¯‰à ±m«i&º>[fx¡ª0ï®oºÄ¯¯ˆšÌÐ(Rí›Ù0> – ûä¾â-)¬¸ ²û‰'=÷±q÷*û GŠF «6fô+«;íE– «]ú ãåá¬Ü>ô¥gÂWŸ ‰®¸:´ŠÑ‚o‘ ²ÕþßïÏJWììùÆØR˜¾Üîæ<â”ê¡ÇCAVœô£ô"ÿr±æA‚çèWZóØò, ÞcÜÑ=oÝ{PÃV·¾Ü™:*<;^ùª%=¯/fiS Niª‚Ù@Ïà…&……J…>;£‡í S–{¯ú©˜ʳý5ŒsñÖ. `ÏKG,™y¸nb0¸”÷*x6®Ik±{ýãþ'mñö¯­Ïø+ž&0¬ÛH£×LøZ5^ÕwF²g±†_ô:AX¶âƒ[[(_£‰Ÿ8#•/B;Ý¡¸­ÂÂ]B ìbÕ„)¦4Véõ“RüìhŠkyxm+üúZ(!þc¦Ë9WÕ*GT¢itïDÁ6h¼´žo=µ´ÍZa®¹(¬à²L§ækdwtË*K²m­Qõ¡*ž/rHw–C@„kì5ðÑpÀmp4m²¶™³¦ÜЙÁÃl*º’÷,LZœ™üþÇ25Ôr´fN3Zôuå˜m¢/r\Û{ýp€ÍP¯bêäٹؙÐäÓ5@kÇÐï†~×Îýšt[Aô[H`¤†ìþ%§W¼)˄תuZe!U©´æ[Cd%æâ-L+D‡è”ºA§³Räß5¶Ë4¤žÅ˜48A?3ÆjÃYîÂ]óLF•n‡‰ïó*›5Þ6žÆ+a+¤PØÐ¦ZÀ°+¸>#Sy&H´½Æs?Ó¸ZO\úKçOFEª9;M¢ŒŽ}¬q=e ©=Ø}“C€~Ýs©EÙ©—§÷=ò9$Å\S€€ó%"ª.‹@Öºõ2þ!¸>.Ö¢ý ©Å×uðÏU2*bÍ÷ØÝ–a…¥í«´s™öëýÖÅìú®Ú ¼bFÀfÃFê·øzS¡ñFú"ÑÚ.£‚C!,­QÈä{jD•vk=UÙétU7¥ØéRÑúNCÚlÈßg§ãÁ‰…SXÛ aKtâcáçú¢Ë‘“ò"v)GÇ¥Äà+^NÃ…é‘-´®iÉì&"àòvAK÷”Wåpq:f¹.Yƒ‘1“Ó²íR ýY»#d`:~ÖÑRÛð\dhE H‹D~{y„ÐŶ>ǘ÷‰ƒN¿¬¹ ûøÞ•)«iÕË£ýªäálü޵¯£:Þœ¬Áú8ä:ä²à—L²ŠÇ9б-èH®í"®/+Vrcð”ŸCRwMhŽ?ìæáá-‹ëuøYÓWжk ø¢tA “‚ Ñéqê¼²ØúcÍhº£ïqb^Xz"¢ïkø§xÕ/ÃÖhÙ/ï¡âª2¹q¨²LýßQ ú6Æ"} ý°ƒò5÷…¸¤Î–ö{ô°×#äŠâlhEŽpâÑà˘Øä‹ q^ﻥ6oÜÁHølMİ4T¡`…¢Ê…–1"Tf=ú$õùÂDƒî­-‡<ês½p£ÛÁÚ§ÇúMoJT±òÞ ]ÁûO e#°ÕŠ;íI %Ä+¼P1ØÉD÷Ìî3KÙÔ]š%I>Kúr»ïCH3GFðä-‘3»7ù÷V$Eðß—ŽâáhÓ¿ÇøÎœ|LÌ¥£†l̲òð­Ä ŽÏ¸Šw-&b«oYS’Z1pÌÛhþ…y¸"'þðpC}÷«&Õ˜À»mEdqqãS›©ž]´FýPY5”qréÔÃôš/Þ«“g®¾»ª–å6]Ÿ8µàf r q0´Û&2y/Jýz8°¢!1æ?>þˆc:Q^¢õI!öAšO`¾ŒÓ¶*ÇÌ Aº‹•¿÷ËÐ}ÇY8=mɲ‡ÝÆ}¨W‚¬ˆ¾pŠnùNجü{¾4W:,±NX¨ýâïyS8elV¶Ùn5+é4ø.ÑÅU¯aVu|ìQJsŒ¿TŸôg¬3–›Ôëå]EõÒ1w[¹öbÒg,U^”“zAd*w[êÂbÄ…«JôS_qË-¡ 醼urvýVÆ¿ÙZQ'm ª­ô/úþð0 ýcÃW¹)gfc ¹7G$2}5ùþýºb ñø¹¥õg3è G©Va4¨.5Å2„À…¢”ÞK’Ú•©³W,*Êõ°†SIô¬ ×;}Ï«Ít>³ïªä”,Èg(¹x/Œ:-Ê%œÙ%y2³Ñæ³Dà'Ú'&érö’B9"? ®²Q@ö€ÛÊ“[›ñpäHuL3Unø†5³òà¿w û9Ÿq†¹‰g鬉?-q}@C°Çs”aNù 5Öú×°kø_ƒåTy]‚‚n[%B6"‰ïV^¬E+T¼‰lnpý8ó¥_Ž?;ûÐë<÷þP(².N½4u0ðóMåìÝŽýžÂÑ”oݺ˞ù%* ’GyâœÒÓ7Ö°ç{8”°b¯¢ò6ß­GØQýw‚ÏÇðà"ì$©æ$³ÈøÄ_Gfµ9§Ú {ÙYô´Nkë ¼ š‘š'!¼î˜+ãæ†àëõžÃr[ýx=ý— ΆäH¼;,/üìq|ÕÂמÝXUÁ9pߘùT„ï‚yºcÆ·flù¾ò I2Ý•ÎyIÂáÓï·‡´»‚y:øƒ±øÌ™û¤S²­(²¸¡ƒ!¥ò1×=ïTxîâ“(FIbÔZL57ˉ546!i³èH›ž¤ ÍV¨ºÉ¿¨G0+ô—eS{ó8~q›—y&ø‘þE¹¡6­œÛùãÅÖn†Û‘]_î³ßÆ×ȶUˆñ®ãòPQ ]b¤2Ͼ†1˜Ê™kXM„š Ïã;^h™ŽöW%­¥‰Òñ{ÒñÑL‹®ýRsjÆ!ý g—‚ú,}Çþ+ :y8•"ÜñàÉÓÞM£—Ÿþ9O vç Ä7µíÇʶd´³K™Égjs’óYL_ owT.ÍéhŽ?=q†O–—’×ò›Ðãë²+€ =vŠEu‚"‹ 4¸Μ­*¥Œ¥TÄYóhR¤×ÏÄÃÎÂ%.ŽÔ¶‰kÉÐúmXíàéíÈk‹ жìo§ Õp߈TcX@`DR¢hŒÈ”aæ°*;+r]/ALÄ)’^º†3ECr/X}z€BTÜJU· äùÊÑ5(qè\L¸}ÃD‚PT½ÝÅôºýžâ2Jd&¼1Ðg‚/ËKùNÁ¡„6Œå½V·½*(u¸ªuÆÁ2äU`Kyô ·`I<ë+Yæ©8T ZaëY%šö=kR(D Z©t×Ñ €’‡ðD Ew߬bÌo"•È›nñ3¨“tµÃÒ¾î;‹×¡É‡œ ¨¿V¯ldØ\žô¨7(žyÿ4z±¾MQ[l<Ûük‡wbi.ÿŽ—n÷}Õƒxû§B>#Nl›K]…B! Oy±ïÊ´9‡æ·€`ºY+):toÝúÖ€ØÍ¯¨‡‡ªú‘ëÆY⤎çK–ÝÁ‡ûâU˜•YT¥³kÄT¼YDý’¾D­ŽÈ¥mGPÒ˜–Ÿ¶™ÇÚ —é yú¿ŒªäÒ+Hh:ÆÛä@$mSLb‹ü²i­AB¡SB¸8y”!R#©Ô–C!%WûÈs^¬ýÒ¾:1{¸0Psv–ºÍÊ :Q?¯±¦¬1(r…Y°rl—/w÷ðmå%ruhÌóFiá:«!x¥Ô£s~V6̤ˆ®žÚ8Ð,Wš£åB!I5‘êR=’ÅÜ…Ewaî1çþõþx!·W{ì'G0ß°ÍÏ_bÛàùr§ÄŸ”}ÜR¢dÛ(t[Zžwú¹÷yl˜Ý몫Hσ-(gÁRg8¬" 3oÓ««r_n9S:oa¤„U&3£;tsÿC~­2‹É|[pP£4ÇjVQ–-o?¿±»‡–.%avÜ#,ôZ¸…ô\Ó¯ÕôÀ YU½Jì©R’ ²:°ÿZ:9-§Ý*ŽÀÊå®°*ôŠT`ˆö¾ôÁu? I–ye–· `òÍ31½UˆÝ6Üè>ev¯—F¿âBf%½>Y: Ó¸o/A0¨áðhªßLCf±™7_yJúÍ|Ї¬-ƒÐ—*¬T`Âbu\Ùùžös‚“MíÆlfï©ê%$M6[œÓ¶?'QÙ`ŠÂ•d…aù÷_eÒʼn[¢žR„ÄŸÁ¹_s4÷ͪáù>Š;‰´¨kBñ®¶²´Cä6|6ðÝB-ÎÅ(SÞØwHÙH›1ŽÜ=%£{åÕ}*k>u/Éñø|•@Ôoê§ghßÓCŠ{—ð #?Øùc·óÄû*ºqÀ¡¡ÈwZ,}­¨ºNß…|«®è¾§{T*òØN¨ñîŠóÂFV„¨ž2§Ã¶ÏÀ©êÕ#Ÿž.л©AÑü ž¸»â´^=¦¸_çF¿ý¦±þà¢9t íS•Ò×Xç™ ,ô¢•äÕ„©ƒÇ³yg8¾[HO0t‡tÀ_‚¹‘«‰ÔR ]ïç½®D=²vy©ÞY½¨z0P:Jxo½æÑ3èW-yÌbU‰–¦kZ¦HJé ’^*vêêÁª¾‘‰ûªåT¹E°MF$Ÿ…¦ÌM÷x¾Õ³áZ©ó¡ROï½Fñ̸¼M¡© "Om)ƒ¯W þÑr_¬©èˆ£bˆÊ)ûM_ú²Í8û³%dmªYÌÇ8 2òÖ¹ðj¡ð<µ§§0;ÿ‘ŸY…‘½Ow•¹y—¦¡ÑŒÒº‹­†ŸÄÜ™ÙSºG>×?{ÜÎb˜cŸŒãl«¹úî©ô¸åÒ¸büÜûè×H<“,—¸«ò–ŸùsÐC\úÝ;Q?ãŽKYð/ Þ/&ßàã‚`Ùg4J× k‘é”D³›nkp?T¿«Ï,â'Ɇ_ïUƯli¼{:'.ç·qâÜò»ä„4^†L^S@ ?¢pN»gÐþ ¨%xý|âVO@ú»ù)â²*l˜Hië—ýaDPú„øÇ#;’Ð ×Cù^D»·{"÷Þ$ëKnul¤ÜÚh7\ÉÖf9¡SAaÚ¢ÎÔ-^€+Üy댰¨Ó‡ÒÞÕížÖŸ ã™&ôÏ:u¹N§µ!s[¨U{ìZá—.n¿Ã?ºRؽ7P×!Óêið%dÞÇiã,ž×bÌú-Ñ´°Ï ­¼êsu >ff*Î3bŒÊzÆDtåy¤ü[¾¬n\ÖŸ&ÏL½£µòçl^v$q¾™”ºÌñkŸý•KÚ m›Þþ2û~ÂÀa§@°©/P!g˃‰Üw aHã³íǾړóèÆ°  xEÊšîE¨”TJé¬îLÇ”ûÚ¿¶2½T&™ïCÊUéK°ÊFµ¤±î–¼“]Wˆä¸WåQÊU9‡§9_òdŸ+š“Ф‹ùbÒ³{÷îÃepï m7ÞáÑL‚*Ù̼ã¡àÕ±­'oŽ\ m0 t²˜ ªy–tªiüM +Ö [h`ׂ‰DU®¹›U…ɰÒ8ït1²u¾ûþ{öýæµÃ?¦+d+¶¢²'CÑégœ,‡DÏ8!‚ƒ+«€9j–Ò¤eá¾ÕÉË¢ùÎLõ¥`.rñ6Œ®ëV0ö+}ó»†JXˆ½Fé’Wå ¢OgQÈ&eô±l_+òÀªIJÂéÇÕØ1gùW0jX‘ÐK{èP‹,½”:â",ë­ìa9üx¤‡3ÐtÙRâšäeÞjÅ¥`ŒLúq%77óÐúI7cpH¬§¬Ýóœß3Sߥ÷®Íeé³¥ùÉ®ïåá°ä’C£Ž óÔÃÚ”5…ôðóÞ%Á›¡ëd 1¯5-Ä(eºæ‡ÒxD×Ís„¨!…ÑìäÔÿ¥uÏìV®G¤K5®û€ïµ¨`¨|åŸNát7Ç} if犎ª«Ë°#N {T0³®!,ÃOˆå‚N c$¤Ãܨ˜¹ñËþ~@æ=-µ½€î^Ç8yê¡Ë6VU„1jv·¯^™‘eš^ˆ-ü “kudÍ+¢õê‘Ôº„#ëf³Üª5÷|ó£=¼GÝ—,Òˆ8Qe¿ŽD4‘Í~,Ï ’g—°Ä"}úBæW!»¶Z‹Ùù»ámjç[ÜÕ.’Úa½® Ô]GÔP9Œ+µ^!ß9¤Ÿ­…™ÌÒ´›*1™"ÆÌJƒ&¬ “ݪ韃„¡žØdH]y•¶ç1à·Yí¡$ B!ØçGž8VXWØ –éTúnýY-¯oÞ“¸Ъ+ªDéʦï±IØHâIN¾ÀŽ=›u&âûЬKqçDí‡p}ñ³‰äè’{G'ªu¬½“Rz”st¯XÝA_ü¥ÝÇ­$0ˆœjíÅÁˆ=¼Rá±I> åÆòîÑÕq‚ªïDåXü—äÂo¨ f3Nˆ‰ß@õãÈ„J_…M°âL{,_ûN‰¢gËÌåÔ3däÓÞ,\@ü¥‹é:ίç/ÓN&L2Ž&³°~ñ¼ÜŠoÄC,h»øAe8Ü;„pâ0,õcÜ4WL´ œ}ûÍYoPœLXG×íx…™³.¨]OäYlN˜ ÖíU×4§ûuQûR6 ¼d^ 7üY{à>8´À%`gSë)ܶ%$ÙÁÒb;õ½VÓ’Plªˆ¦ÙBA`б'C‡çõ±Rü "¨góÔ´Š/G³±,Ô QÛùc\xP?šòBBË<ƒZ´™§ ¬²ã„æ„ë÷ä$Úþ…l÷ŒÝ8œ¥bê:½6àw„¶©ã>Ï‘Ø=8ïFˆšeù±fO;EU9Ý‚~óCç‚2ßB.«E6NW©ão°Ý¹cj÷àD¦s‰+ÐyÛ˜o.}™Â”ÙNÑì„$Iÿ¦s¡0+¶x΋‚›ç„„ÆMú–ð¹ÇYœ 똥!<|Ï"ÔFÉñ¶Êöォ?¢Æ¿œÌ(l¼ÓœËŽiÙ“z]ÛÆ>KŒ+ãÂ3ßwVZƒ6IJzE–|ï?#ÝÓ¶vŸÑ:¬ûtò{7Lì!k»+/õMÏ ‚-CÅ“ËòG{.>yV·ù;t¥.ƒO;£lNXË›0‚DjÅÀÏUUk–Éß¿ ·q‘¨Oã“f+W|$LϳTã=l¿áóh˜Î¨|$S&—D—}dÀKª„×µ{ÍYhJ?ÂO^o¶'4Õ‚«þ ÷ ëÙÂ{ÑÙJ¼ƒF#òÎGY9…¿âEÓRñ,Œj/1°èKñV^yðbSAˈæ”mó‹%íÄ#¤`†2F)Ø^¤Ë]˜WV…˜ÉíÃ*¸—Àô?my~O£¡+Ó”ï¡;±Çs!¾ñ¨q¨ô|ÎúRMƒbG•yQÏávj}+Ì1VšE$œ|¢ýaÔ¢ÇKï˜ZU•¥Wîª9Ñœá܃‚Ì¿ÛAü L]’¬«¿Æ%…R|œxYØÅ™ 7³j˜^½ÅÞþ ·8E‡Ø½mû™Gè¢ ɬOJ²?“FCfÖ;0Þ‹åêi_ú´4ч±}T"tÙÄã·vEQè,UË#Ø´4ÊÊxj|>ßT–¦ÚÄÚ9ue¢&kš»9fy̬=À¾/jBW™àv/§^SS ‰l‡äGó÷`TÚÜOù8dþtÅû¹ÃÜAU7Mø_,t­„ÛXô¨¹ÍF7õ\®‚„YLg©2êbýš9?Š>‰¡È„3¸ÕÒŽÝØŽOÎþÊúŒAìµ~t²½ÑªpÇävl-¶‘KBôøè» 28 ³ i`eÇ$3¤Æ&g4J(‚2ŠOMºdá8€QH“ÄÕ»új¬–M…êļ>y2ä¼SÈš%‰éßrPÿ¦ÝXV)7åC#Ã"¤âº—oŬÛu%S.‹g¼U;‹…éßwUëî€a1éð``_8í£–ÝLaÚe$ŒhD)-à¶r<|‡á9J“<Åp{Ù}Pw:’Cb-˜{¯åÄhDî¶M2ÚM¡«3åg;_•ßzMyzšºPtù­S[èlµü‘•Bƒû‰Âï€á†ø’•ʬ€€v£Ø üÝ Ùqù^¢‘: EÜî ú]r ´Bÿç~ØïÌ„ý O^‹ ’”‡¥Ú¯OÛL„5ð¢sÄœ\S;ë´  e|‡×™ Nn¨ÍPˆÇtYŠ447;ן•¡Rk^çF]4HF±Ú¼ºbé 0Ñ+eDÄ^š(/7îi¾ß§M¯ô¸Kãi»0 Ä¢D•T¤J(V•ØÙLJâk—³ÇšLH.¦%Ò V[l¸ÛÞzhcÞÛd£ë8"£˜B¦r5Ú3¾Ë=Uïýé³…kCP92_›°kG¹M¸÷Ù7¡Ô³í.™ލÎì˜> 9’{nwÓÕ‡þL¦I§0'Nn(//­ußî#ŸJÝ”™a|iú¬j–Ï¢êÞåç$ÕÕaC“Ö¬û¬§×ß–SÄççä:éLŽ ®J&7m1Ë”/§Œo¯Ës·ó0êjâêLÑÔ%‡ë¶9²×¡—Žú;¶%Ⱦwy ?|ࡉ¡»ÃeÛ2ª4}²ø²kÁj›šŽJ%¦·4<Ó wçÂøë37Ƽ¡zëœû…¢µüsÐuÝqMáìêc>‘'ù¨ë©V°£þEAàÔâ^¶±ž£wtÈ¡ƒÅ^|YL©^‚C®Òj–w¼âc|V*é/æ>â¶c>*àj†úCv/´a,.à :ºã9ÊÀhmé—dð!zòPÔ¥ØFê$ú’õ4Ã>tKÜ0eûÒ4Àfç3Ç“<¿· •èUÜöoDb«£û€ï*¯‘dB"/¶O—V–jLOàF FâÇ×xŇwAörB$îTxä×Wv Ié‡pµB¢Ù?¸Â8f,Oâòžvh=bÖåÚ“D.¥ãçQ~gÕ9Jn¾ƒ¡uâtM#SÈ€ù$[P>ß –ym*ÔÁyc‚§K ¤’c‚ð´±sú¥~7ØO‹(®§G [Ž9Ä%m¡§ oÂ-p¾8è2± A mÛ6pv‰Áo §mS§ëôau¡`fš$ÞÉDôäXCÕ*ClÆ­jD½JßÀ¿^œå¼¯*ß¿Õ$Ý«ÿð'Iª5i_ øP·ì1ÙÝ–ÑÙ¹Û¨RÐ*æW`6±u»ªwo‘´¢ô O¬ÌOZ;ç7àjwpÃëLáÓ˜i3bÄ»H)0%Ú4:…(Gaš!å‘[´h4J˜À›änÇpb^¨%(V˜<ù2Cò#R=W¯¿“úökþÊËÍs@àð؈ú€¾í­î\¤{ò„惒AñAá}í5Îyú*ó"%î1ƒ«]=d¨Ãë@ÔhuÔ¼^æów}ùoÓQd ™§:eÙ ¾T“>Ë´sê` òR~€%ªAœU\¿d!¼þ ³ûÜK$WÒ^î#X­UâgM‰0µ +C‹ã- Wl0Ó¼Ÿ®Æ93àát½³ïÄpTO‘¿4Wîwc^l˜Å®ñ†ïH¾¡}rÿ³­ÎУPJ÷„…dŸ(™’r‚n¿©ÒÊa®b§†¯ùšÊªœc欷ÉwºŸäÅ:YÁ/îG¦AƒÞÊ»Y™÷·S.Ñû¸áM;Øí`4%šÙ+Csn“_\ÔVŸ/V6À%çé×0òù øãF%¨¬+·~ hI½•€ô¾áh ë÷‡½—L”–YèÚB‡màÉj² h(ʺ…9ŸÆ©ÆC ~.e&ÍÏ(*ØÐ°ì~ì…¸ÔóÒí Q¦S- Æ$"³ "+‰<%;?‹†ÚàЛ®žÚýrŒ,¸*¹~7哟¿©âÁväY Í'›ÎƒZªƒ¿oN¸ ¡Å÷¾2]  #“¼¹XlŒˆòÓäÀÇ?¢V¸jÆ:é5$ò|3±ú Ø›yÎÇïgx¿˜¸V™¥š †6A×Á+KØ —˜ýò,²O¹üޤ†ÿœ«» 8X—Ö(ÂøÔÕI;n@ªÁÿµþs ØPY±&Q‹,`¢ù^¬±@q'Ùd®Äîõ¦ ~í¢ÄrSÝ#*VlÀ:Éx†qòèS^Z$›;ØCÜ™úµ–‚!xã9îFF°"ã`+ºù'y Éö(í|'ñ†Á"PôÜPåí8úµbÉÛ¯o‡5‰eßgâNzyššH™uLãA}Ð%ì²i&+ß/õfÜê0=ý܇¤a­k÷^·Ø¤äS¶¾áúIŒ\r®©;`Ã5éz7=r«_£ÏK N–¤@Þ[!êW÷A¾³P7µ¿ü+¼±¬ŠþÁÎW“§ Rlšª,– ÀV‰é5¬/!ÌÖ7ÛOTHü½P¢wiJ‘"ªûŸ¤ixEˆ¶°=GCÆoŸ"üéjäI±ò ^›·£r]rHcS¤/_Sƒôù’‘%ÎO&wÄ-`bÂ:bÓ>¸Ù‡Þ“ÿh¹²Tk%øÐ=œbÙ¾PÍÎUV 6êZ¾BÆÞ(¦°x%;=2ÞD¶pþ2^açW!ý¦×SßÕQ# ´P뇽CyG–°1eGî¥=ü»×ЙÙsG‘ƒÌ8$Þlà vÊ.èv;CöÞñgSÍRm48÷I6§Í0þ”ˆ¬…_5:ê¶ î½…J6“ˆÔs&H1ÞñTºSBb´ Ö§Wòb)*ÖКE«mt1™c^ÿÒ_ÆÂ‰v!M"ãô 7PÐ{7®‚ïúÞ0ƒ°ì©ûRß‚ Êйh‚)ÿŠp&ö êGIeQ‘~„$…G÷ûóh ÁãÂMŒu¹‘kºHAÇéÓv`­ýžT3k¥wv« ÕÚyË]ýèhÍ}‰oÈ¥†åË ˜v»EΆu¬<S&}œŸ7⛊GÏYžÛ;NlŽs—™Ì;wlªß„éÚ,òÍðwè÷_Æ,)ý4»Q:n©”UºµÑ2@ÅÛV×¹Õ„˜ÜÓ}r±[ٛ糋Ïñ“¤'œå'2%{a8]¥Q)ý*‘_Øží³‰ÕºäZú‘ìç 'SøO{Nƒà/S}üC+<%ä97wU/í6¸ ì™®9‚DV¤Y.–­©ç0®Âᣠú{êt+)Ô½€¶>늢_]ÂFËžt" 8nrÆ¥ýZn3P`d§o] w7ú$dØo¯Å¾{ØÑÏ0-À9– {ÖÇï,ãõŠ8C –ÞOȉɈþÉíÕ¥½Ü·™,×Þ©U6ºÄŠ#Hk«MŸ¬Ï1–ØM 瑹^é|;ßFFú‚Óœ˜® Ø—N÷šêü9Mè–°lì¡~ å$ ÅÚš2Ö¸¾s2b1»lî dŸl¯\¥]zµ,h•Ìw—´›—Ï¿ÆØÉ‰mAébzKÿt&W¤Ë 0zšoö!c½£]o =‚ q'>m¥ñ/t¤Op0rb d`!¸-±«r‹ì£{¦Ã݇„|Õ·ÜÜÁ-p<0”žÞè–?¶öšQ”,ï=…ðýòN–nÈq\ï< Cr3žc€.(üCk6‰(¦Âñìã·ÌÆÇû3‹ #Џv®õ÷{b)-b‹Ê%Ú¸ç’Z(*SàPÒÈëx’tÂvRô·R½ðáÕÊ¿?Bø+Ë/¨§­H:On¦øx¹yœÒöe5Ãf²ª¨äÓ[_,vZx»˜²m¸îO²A:àòÔòÍ·E¤7u"ógÔu‘SˆÇã„ £Ušwù¤€=?.Êôû³G6ªlY=]_Ï›À C/\ÿÑÎUß™OK5íuaÎk-NÛÙ¼ŠŽ(Žê— Kš¬&U=ùnôCgã É&Å3‚ì¬îŽúÛy0½¿S¨JiƒCšè7”øÉ½&$Ò{ À áæÑß¡KÎvÐ^µ‘g‘'æ[=Xsr¸dv`̨m¡È»íðpŽu£@»“_ !]ÎÆ^~v%b¿µVƒüOn˜1¸š²Öt¾ <î‘wÐU·+ :Ûâ4åQycÕ¤/³Õà~UÕ R;÷>íÚ‹i•è8~“¶Â1Œ,æ~$¯â9ÃW h ÓUöËwR9øð”,D鸞Sõf׎Y)i­‰*RÛz-\+ŒÂ%zYŒÝä°TIDè0ºÛ$¹äø'Û [B”È x"ï1¬­37¶1&Œ®÷k3¬•,(¹Z£ÝII'Ò)iy[`2½6Ú²“l`î(v%Z0׋WýfîFÛ°Ñfó¥ŽvÌz#é…ûsެF/ ¡?ÏÊrÈÂuÅ`£ôê’ 8+~ãõOÏ×%s.WßSñæJóœU냧YæÈnö®Ì^[ƒGåÅôÁ­ÒÔKz|ÈF~ˆ”qHc‰~°²£OàC)·Tz³…îïâšy•ü|’ɳ_c(ÞQcô†Zo¬Ùu/d,«Î0r½Œ>¬÷Çú‚Ë‘b^žPNjÛ“,Ý¿%åÛŠ¶îh.ã:4âCóÇç©ö0þo¤Ëª}ÅlŒg9¸\Dú@ÓVôSbž}Yصg—\ÒH0Òýû‹ÀLÄTµmÙ©¥¿MC[À-C5“ü;Ä•Ô2Äšm¢žÿW!°V|Á3 Î"ZUÙAhèJ¢5NQCuÙI$J½vž¨Íå4ôȲY–W¥‰ÃAÞ®˜Ò…Z7¥ÆKÕ Ò,Rû—ÑN‰ˆ®Þ·”@+D[ª©S<ëÊ/ ñ mJO/#ê.9¶B£;ÙqÙÖ¾1MG‚í>)(¼©òÐÓ©$Ù{ù%žkâYÎÜ”Ò%ÿTM/& endstream endobj 308 0 obj << /Length1 2038 /Length2 13452 /Length3 0 /Length 14683 /Filter /FlateDecode >> stream xÚöP\kÓ #ÁÝwwwî® îîî$8wî– !¸œàî—s^Éy¿ÿ¯º·¦jf¯ÖÕýt?{(I•ÕEÍL@Rö®Œ¬L,|q1mV6 ; <%¥º•«-è?rxJM³‹•ƒ=ß?,ÄA@×w™ÐõÝPÁÁ ëf `e°rñ±ró±°ØXXxÿcèà̺[™˜²ö xJqG/g+ K×÷<ÿyИÒXyy¹þvˆÚœ­Lö «%Èî=£)Рæ`jrõúŸ4–®®Ž|ÌÌL@;&g !Z€‡•«%@ärv™þ* ´ý»4&xJ€º¥•Ë¿jæ®@gà]`ke ²wywq³79Þ³ÔdäJŽ ûËÿË€ðïæX™XÿîßÞ²²ÿÛhjê`ç´÷²²·˜[Ù‚JRòL®ž®  ½Ù_†@[‡w ;ÐÊhònð7u @JT|¯ðßõ¹˜:[9ºº0¹XÙþU#ó_aÞÛ,io&î`g²wuÿ‹Ÿ„•3Èô½ï^Ìÿ>\{{Ÿÿ s+{3ó¿Ê0ssdÖ°·rrÉHüÛæ]ÿGfrp²°°psñ@N§©%ó_ Ô½A+Yÿ¿×àçãèà0/ägezÿ÷qºƒ®În ?Ÿ*þÁ³²̬L]& +{ø?ÑßÅ óá÷ów¶òè±¼+€å¯ÏŸ Þ'ÌÌÁÞÖëùßG̬¡#­¢,Aÿï’ÿ«sðø0r²Ù8Y¬¬ì¼nN€ßÿÆùoþSýßRe Õ¿Ù±ü‰(coîàýWïÝûO!îÿž š¯ -à3(:¼Ï3@ógüõY8YLß¿Xÿ?/Áß.ÿÿfÿ¯(ÿ¯ãÿI¹ÙÚþ­§ù—Áÿhgeëõo‹÷yvs}ß ‡÷ ±ÿ¿¦Z -´˜ƒ­ÙÿÕɸß7DÔÞÂö¿m´r‘²ò™)[¹šZþkˆþs ïÁm­ìAÊ.V]8FV–ÿ£{ß9S›÷KÅåý¬þVÞWêSJÚ›:˜ýµ{lœ\ ³3Ð žå}ÀØ89>¬ïKjòü{¶ÌLö®ï.€÷âüæÎð('€Yô/Ñ¿€Yìâ0‹ÿA<f‰ÿ"n³ÔÄ`–ýƒÞ-ÿ ^³ÒÏ»ŸòÄ`VýƒØÌjÐ{Lõ?è™æï;3àôžÏäzÏgú_Äù®3u°}oï$u™ÙìÀ ú|§dþÇý’¹•û=ç_j7ç8¼›Xü¾Ó¶ü|ï¯Õ?à;q›Àwv¶ÿ€ïÔíþ@Öw¢ÿàý~›0;ür¼Û¾¿oþ¡~gæøGýÞ/Ç÷õrøG¥¬ïÔþAœõšËŸÂÞ•.ï7Ñõ{×?ê÷䮖Πt⫇Ã?Þksû|¯Íýd{7ÿGt¶÷x^ÿ€ïä½ÿ†ÿ3ݦnÎÎï7ÿß÷Ïûèÿÿýšbû©²8 >e%ñ²á1%æD†ó-B](@'Ž:Òž%ŠÑ‰ÍQÜ£ ñ ”í©ðxS•-J±‘[µÜn\ô¼îÒéV£Bx•î½lï˜êÙ/Î!ƒ6®'Êlß?Û‡ÞÐCwïGì§.p-â ðúOS7~~ I\d3ÉwÕëóz"tCpß_øMLHÛÃæè]«ëœ©O‚ްZ’æòCŸäh Ö ¿Ù”š‚³þY·.Ûãüö]1çÈ4DxÙP`÷AbcÁI}Ç-tѬB4—iÍ'ÛgÿaTî)šœM­à«^òÑ@¶˜ ºðÏ*ð`‡ÐzîÚ2 °(5ª€¿5ÂâºôN™ˆo¼qª|:áÀ¬VÌì³ï”LÅäiØGCH”šÊ ¹„Äkv%»VRaoÓÏÉ«Y&l®…šY"tu<…‘c²&¡Pg\¼*Åà!¬œTÄ­ò,¡]ë¾[Ë‚‘&útWÚ·‹møçFŠ„ßß'·ô7µ™Ä‹i4§õÏww 󺾵²£!CÍŠ _Ú¡ºô•+„+·ÜU tÇy™«y•mÎ÷˜l }7æu#rŒ¼UÞNøªè戹˜äùÍ1¦ä),SÏö ìBwÜ´ |šÌ`t]h®ÅLN¹_³™ à3ôÞÏhÒ]ù,à´½Î:UIÑ| µ˜#¦àØbHåùÜ2šsA/Pó;yZomYªHM_xû¡tu³ˆì|MqB#ê‚F‚eôíÂÁÂýí3’wNoóðXôñ^Ì峜?,ÎHé Rêó‡]^;‰ËªîE‡ä¥ùA½¼K”Ög^‚ôÌ\lª•"‘>ô‚WÆòãQuF¥,´}£àCÿÒtOæ3…ã9Fé$ÑÊoC¬*@[÷Ò¯üËJ‚ý‘7( WF/ã>´]c7ÝúvïG &ÅR²¦„.cmj_MƬֲ\ªcS-âiAks¾¿ºÛ]ñù¼ÒQ+VbéC¡?0‹Š›£(d*ö`eºg†A°~´BS Çt—}€ýë(ÞÍ‚å±Ô ´mÖž¨=lÂ:0s§)¸åV±wi¶‡ï<¿T/ƒb,׌oÒÊk>ÃúEüIí·ñONçùø+¾BÜß EÃÕÝcþ¯¦yè ÆpeQ¤æ¼FBʇµ~°REå·ÕBP‹»é)Íé0;°ID<Þ  XzYܨ<4—— E¾yîÆ´Äߘ$ Ùó—vSä(Rð0 ÷á2: ìõ™©Ó«.ß³%p:6fTߢ’Š¿©#5þ4­ƒ©d;N ¡ zö’ÐWhDSãý¸x®ò©s.ÛÙüZºÔðYŸ“3"…|{ÉK/Lg¢‘k[î·Z±!a£¿}[Fµ¾öU!7iÐŒâ5m5ÁЕY =hÑk¢' §·öªŠ£UE·vIp ,LK¢ÓL¨Ãt¸¬›å¸”‚oÊBQþ,ÿfï[uKîEÆÕ#÷ YžDY{tÝÛ¹$W7ÜtúÎï-è„–G~QÎ\‰ eµ&hk@£8Û¨‘PËØzërȽtCT­lóŠU·±Åj§Þ¨ÿx2ƒ¸Æ;̘LûÐóäVßëFiÛhvó›£é Õ»ÜTÞ%" û^]ZªÊ}ÿ9l7VX+Jñ>F‹®é«"”ÕÙ©¼ù•¹Ô,s©0B!ØÏdÔñŸFÀ1Ò¼¤-±CWƒï`ý.œ,¨ªµdUæ gŽ¢£ý#l…DzTì9°¬)€á3'uœÁe@£n¯ò±ã0xÜÂBs‰s­ð°r0te\>‰š’`~ ­"fåŽ]Ú¯Xo:s9?Þ¾—|ØP"~:ož:1«õCàZàŠÔ}·‡‚’zB­„‹lú¨ A{ãc_ˆ ÜSP—úZwË5[&^b¢ËútÜÓ%J@7¥XȲeìå/ †Í+¡ÜÝü+‡¹´e²ÙµÈ³(y€ÖJ¶q1Ô21njÙ:šæ³¢¡¬©ËjSVe™Õ„Í;&Û<•Ypë)JëÜ2åFxÖÓo¶‘š:­À5z;¹–жÁ!s²fvÿÂþZþ§ÛTîfî¾jÁQÆ=UÊÀèÝ ûTBY±fBû]ð7.Q–ƒo–½˜ªR¼_sÕç}h ¨ÒÏ)ÖÃøF¯-{ðïÞnâÞ¬{÷`Êr Ž)¤ p4Cß–#¥·†Ý[‚¡…Õø6ŽødAŽªƒ?›GPî¶x³*ÁbóFWtîôì‡Óš«¯‡Ö âŽ`1g6º7çCx){ÈÉ@°“‚ès6DDækæ¡ù©ñ±¹£5èåÁˆÊ’M¼¥7Š¡Ë/eo‘dÖÚPÚ./ Îø‹‡’µÇÙsòÏdû¤Çtæ¸ôY¤à¢Q‰? „ÙÑ{·=¹S/¸È zÞ€¤WÑ‚‘ÛäÃO/#)#nÅ81&­ÌIëÒ= +ä€ÊwúåúÆ&›Ûs·Î‚Ý´c Ì%øw¼qYb¨‡GKÜ5LyœåÛ¸bÍÛª2€Œ†b^ ®&)Æ6‘'«ÅnéQ•SºMŠ`jøq,#@—µ3üSmçêG½³šÌßR@Èv5w‘éB«ƒf½i/ò³Ì7ˆo£gᨔ.?Öý³ô!AQ÷34qgËð|;—@¶ö"á)Œ•Ÿ°¼méÜùX‘z¾Á|ÛªÇà.ÏþR·tû´f´yǵ,ZgþJ÷QñOpã¶Ó8FáÓ~Æ«#lhi?5 b /âݦâB³õ™GêKmšW˜Ôazèšã÷F6b̶¤~?ºµF1ñ !/áL%£p¨NŽ4ôg¾­”:ɽæG*â~•f?za‡ný·Hk!9:^r§n:bÍ• ZN{fè ©Ò‘O¹Œ˜iùX.Žœ0GMeþ´ÞkPó›~=‘ðF˜r žkþ½9oW¶Öàï%ïã$ª¦:mIAÃç­¨&+¿êEhm˜ÓŸ<ô™¨ ZVÛŸFÈŸw‹ê{ñš{ß–álT7mW„6ç %¤ât0Pu±¾œò+ÔÖ¼;4늅»ð^ WwÐÇÛDì#Ò׫&Åë—>ë‚-%¢².Ì¥n“Õ·¢¶Oà®ùR—^—» ;7Tg>W*zôºÑ²Ÿ œZáéÛ6EζíìÖ­ì%ÍeíÊT¥‰j5>T7ê ×ò|˼W Ã)+|Ë–Cæ#0è/#­ÀQ”ÅŠ>Û£^eºµéõPþ–&¼CÁlR°MiªÚ¾ißIú.dû23Ÿ“'šdEÅÍH=û0“µ‘„ê” T¤hHUê&ã{óJÿ6ÏRÞD†À‡ž`†£s^]ù«FÃãF‰Lrá)€hòüòHP*þ»À IÊ”Y˜' &Úö BÆ®Oð§ï×k$L¡¸ˆ'<£CÔͺp}cF@J 3$ÿŽ€“í}9­ÙÊ#<ïðKðÛ‚˜ŠÙá· 2€IЩÜ„­Póó^õ¦évax/=³­XÞ”?&¤wØãnB·"Ô-, -ÓçøIŒƒ°(œXá€oš fàúü%U®„ꪽ”˜ <}Ç­“ò¹.:>Qä÷!>Àr}kþ ûbT³¹Ôccr’ˆ©ÔŽI;ˆÀâÛ#q4pÖy3däçÏ@II䲞½Ã‘*?(î@nÊÅöŒ½@f6™f›(êêRHŸb)è·¾Cü:[‰5=¶½R>‹ X·_v‹yá1¨„Bl uœD¾cGábŠÇ|=e@æÂ[ö½ÔÀÛ¯×c*÷¹oý¹³ësmÔ@ý>ܶÙz½47é+’UÛa _¨åH™X\h«ŠPÍÏoæf¯¸S ãl§ì3K!~6Ó>Mh¼‰kÓ–ô«ûr¶ ÒBï0ÚϵµU)Çàz¶r( ú,%ЀÏ>›ñ¬ ùºº¥H‰½¦mè1Ž»óÝ'‹J²:–¯ÀF€u@p‘I(VV×"ã[œŸë?·œUk.WneãY ˆ?õî³kj ̰?.5øÛØÀ«2´l;w|¬;rI]ŽZ~Ö-Ý©ª`ú`ðÚg€S @ÚŒeIûðÝ7Ë\ï#V…íJ8û¯ zëÞƒÈÌèÒ³—ÒŽT†}³©ý«.‡Oé'µ³‹½ûmø’ßxÀ¤çôP§1ÍK½D¹µõòQcÀaÌе¨¹:dEËž¤od™Ï(üʼnâH·üò¶?(È5 ˆ¶èòÝæáu÷!%&:øaþ¬‘RÉ_ã‹Q‹ÅNjQ¶TƒÁß]vo{ÉÔ(´jç©Ä]>kä20¼K>—ùù½³*)Ä %Œ.SU oýr«™ìŒ òÈ<ã–ªú)|©I.Lž@‘·AÚ_8ÞÌg~\ï i„ƒïü1óæÌ[aÙ:1¼K´Uhß5M‰ ç/°2꙾åæT$¿P1Åá™´ HÕ3* þVÝþꥡק`¶wr¤ÒñºfÞ3ÙäÁ·ºJ>ŠLe°¯ÐΟEוxó¼e¨ðmÚëIÚ¬íFž°”‹´ž’XnÍq#‘!sÛÞ±›XÞ_K‚Þ×凙–4WM½+ŒI%&Œ6”œtq=yÿ)÷Ôû£36*j"™=Ò¸hªìÕ:tÊ& ?“?x¼„ÜøèŠC°nÉ$¡‡‰çUçvésè7-f»”o?z Ò$7:Y]ϰ1ÅqÜ àÙcæÎé ¹î'î,sºIÕd6äÕ[Kp‚Ù¼‚-a1`*fk™>D˜Ô¸;ówmrF]×mµ{Ç'´(ýþÒÔf‡Ú9yÄžëDC¯DĆPvš±pM{”e€ùå‚”Ùþ…VÞÄ6(SÁPÏ«5pìsØwàoìî$Ð…ý~Ì»¿´q`F<l·™ÉÄ¢jü h’›ÕÜ]wS. 5Eí*ö;”5gµmŒŒŠaØógÍ HZ¼Žß ìäó¨^ªOÀЧ s¹5¨³Å£#¤ƒüï,ØYG7gΩT}‘É ùûÞv}§H.JÝHú0Cat«)DƒJ§½ñœ%°Ž(¯—Þt5! VbŠƒóI(´ó(SbÌÃõ™3q?WÓ5¨Æ„º™·aËàZF„ꜜÅû©ç±6ÓÊ-(3!)`ÚM¥;{~èĽت»{è õ¡é¹Ÿ“ ¶U•Àtò‡~‘ x¨Åe¹0ë‚1^í Â5·¯OA&¸G'dÆ¥Ôœ>ÍÓY.’»˜6Zhöî-QF4Xë0}–îóûÐîÜÆ/=ܾ«º~ãÕһ¼Tàþèô9Æt!1Vð(2å(p:RSƒ²NBRò–™qÖÄ¿&¢Mø¥TÉÓÝé"›3¯¿y?´C€õ&{sR•Š<{ºeU׎ÛC¼+ÃiŠ’Õ³•“¿^ùbƒP.,1Èïú…ArÒàÌÍ<™¤ì¬¦ 6GzÆ‘š„}¥¢eÛƒø÷19Níwc+%½ß©¸I!îÇRS]þéÝVõ÷4K bHªà~b]jB‘Ç‚¥Ô`Lâ­ÁãoéþvМ§¤Èˆµ­q7.¼o#姦¼œ n¨ºË‰îĨWZgŸòÉ ñ1ŽóÙD‡« ¦°Ò"/°ÐžlŽ:Ro“NI¿ºæí£Uòj~WõAŸ=ÍÊl+‹ÁЉŸü5³ª¥À‹I7€÷"¹uo±Vµ5Té1ñf¿,V¾­œ¢ÿƒ£w‰µ`)H–nÒ­®Ï%“°1g%žÒ“É}™uÈ8£Ÿ,úG_Bé4ÚìÒ ÞqùŠÌrRUåô–?ÿð©g¸(W–ÄÀú±QHXýŽß8ñ@u[s'"¹¼9[RÙkˆÿ¦Æùºæ=Ÿàœ1q׿:úÙã`v™w‹>øma‰œá§{"¬®ñz<‹}…µ—ºHU'‹ sHR¨ÿEŽCzönûƒ[=ƃŽÈLÉ‘…ñ±PW/kì2½ï Æ‘oÛdx•QY ­Å´„ÝkÜöU(Ëó<툵hy4Öå2êÁ™ZT“Ù"‚”3õ• íz×oZæmóOj !U5Jø(š„r¹šXzïY¾$Cé΂ݲý!ˆ¹úo§ÚÄóEƒVN{me¾|¸¯§»É_¹ÉU˹ͨ_ +ÈiΞ'„݂ń^Šïãù¡ø ç¨w`S]Ä"+æ"ÓÓŸmë» ¾®[h†Ÿ…Õ¬1‚ÿÆ—SîÀ-°¸‡2© ÿãžä(€iÎû”á»~ç 8§+ççú=W$\Jˆ#ÛÀ[¥)J>}IDµµDë=áîe¯‡1üù¡Ú6Åž·Ÿƒþë ¶Éô¦–ñæžé=ßmo°f8sú‘Ymç¨Ãª´½¼`Õ¼`p+3;¦¨rÅÎvÏ—AV‚UÅ•„ #ÁþÛsÛþ1gÄÅ’ u˜15\I€|V0‘Ý;ÁáªBk<99 nXižÖÍ©îæ{¿9Ì¢Eqýç³ÖIÜŽsÇ ÌBSƒøOTÊŠl‘ãÖ}º€•«ÅõJ*¨Xî¯Tˆ÷ê/ŠÜ鱸m;JÉtM[®÷ä\ŸSc[{ú¼š©§,â>àþ.Þ,ÚÛõ^K%¹!}‰ „Ѓo4n{“œˆrAAððn)²fSõ¸×–}‹ÅžÑdà0Rk;*\Äq羂£R6`¨ÖnXóZÿ!s¢ŒÁ!=Œgja·øqº|HÔö¦×˜mî€e.R‡VÏ'˜µœÇ ëÊ¢åt±WÒ”3^%Ò°1õЧOQ Kò¹¿ìf÷ùN׊ UbC—‹?‘ÑÉdÕ¦n §Âòý±Þ [ma«¼=ôûæR$Ó«Ë :ô'- m'Q›ÏŸEñ(õ›“¿òVÍE¹J1 ÏíȲáSt¢–Ag¹­v>¦z]È’€³ò…\aj _m]-$¶Yû‹àdÀS*n·œò‰Ÿëo£1Y3ÚYæZ• ¸Å˜+E ÝsÈ)eòé¢\ÂãÏÌ;úÉ£”<šVäF ´©¿pŽ‹<åR.pN7j“]ȇó“Š-·ý¤ìfÀT(Ú…Â}ÆðL¡šÓGp'³¦W§Ðã"­B—äCîi®núñó;¸ƒ>Š’`§>xwt°VÞ£º¶-ÂmƒZ)½Æ}](`xÆâÛ§/'p¸±g³Ÿ§ˆGnV%ù‰xx²ZΙ ÎÚ[ó(;D"Å>ûË¥¥!‰ª<î{„¿2AHÿ8…ž„fXö˜è@ðÑÔ·s` ý°Àu ! Pµ™È#Ó­=,§p¥²(1#.˜Éßè•u3 §!¨ŽîÜúŠiïn™È(Ê2«xeW0£„—úûjÎøÇwÎr"qAiBÇ[Å/JI‹ë“Q§ÙŠé>æ¡‘Vã‘ËÆ¹@ Ì971òýƒzP{&¦„,Zn#`1™5®1-ÌȬ¢­ý |õ&¡“7àAŸ+1òérá… ¼C^dí嬵Xwø:”ªïúç³¾æ9Ó¨\SdPé‰ ë0%ÇX¹M²‚p„#6_T Ù:zÑqVµwug‰­‚œcr[i¹ ¼ý±XÎ' [êŽO¹RæV{’GÀÏ’yÌ&!|$s"˜"G2É1É95ªî¼"а\ =Õ«+þ ’¿å³-VSmCjw+bSjmÃd%½òF“?XhOÅE³IQ”F‚¯_Ø!êcSZûŸ¸7/°¼˜wWÈ“NJOc8¾CÚ!+Yá¯N¶»ñBiÌÁ4gÍüN6ì¯3kæðý& óÀ“±sFX:ø¾ªuº?›+Ž9]J‹?J¶‰Þæ¿ëÜ…ëÕÎà~»¶åw¤×G葪ÖáËáèQÕSöK!^ÆóaýA‰|øßN¾“S™wIÅæ’.LQÓYϼƒ¢´:ãcù@!…Ù‰{z™ÎÂQ ÞàCÚEX3Áòe±o—UANláÓ'êh†|è;'•$‡eN9_µ”Æy*Ä'»HÈñÜÎv0k¦n‚œ—ÍútT[Þ™±ê¨t ¦ÎÙw¦»ÃcpÛó[^}Ö§2äç¿jÖ-àQ·c£mШ#9m\çb¿”ÙÃôæ”õ¦:¬ª<ÞûÅnœrc÷K§¡6Ø~' ˆ7ûN­hª–ûÅØ6ßÎü'1YÕ¯GjÉéKfºîgý>ó;U?cýÂÖcòy8‘\ÌõÝ;æ [ë·UCæ,Ng ^g@1Š™0ZÇÒ—ØQëè€èâüYÊihç_­8àu÷ÚQÀ:A&)þ„·Ö×_`ÌI¾3».ë©)GÙIJN”xI.A\Ss¤0›)E>‰¶öÑAkíq­ûŸa¬–‹RÁ~ŠptÔi&èI,Ö%³o¬vw/: [˱ó„›QZ•ðBÊÐk„|ެ,—<¨.G.¼’V«eÔ²Eõœ;µl9ÕÎ »Ïnq/Ö™éo¾9Ö8¶;^]6Ô͸§“õd’Ë4¥Œ@ãA¼îú-)úC3¾¢M3¨42’@©ª6y½ï’5?*Ay¨“CtbOÎ’ø2%¨¤",gy–u}=†…ã^½Z’šhñÚ.äê_‚_K¶©¦Ñ ÇÁ©$tJ%ùÑüd£ü[Å ôÕ•‰A½dѪ4ôü`jóälx/<.Ã*P;ïÖIæ%ÞWé¡=¨J%,ï…Þ¼R[r¾÷*­ÎnÍ£šŸ›Ä%$ õ“ú}ï´€UøÔ2Ð [‹³2è"NûAçݲá6Ǻçz#»C9uííW?Ši´`?²5S’2q”ÆÂZŸvÓ^.ÛuNMŒCè½ÉÛ$²] Î,ÿ8$–BtGŒ•\/qQ…0íà*Wòò‚ÊAÁ{Kõàæí4ÇC|Ø‚NÌÅÖ(þI‘§qÙ¼²Ä¯s&Y÷2רÁ*a}<¡"}ßèäX'³ °Ÿ¯¼Ý ˜šºÐ| ™ }¨–ûd´©ÄÖ{TiŽñÚ@±„–J>Ú!¡tnqÃQ< .7øÈK#‹ÆØß3E÷»‚lÅ32VÐÊK¦w¤tiŸ 5[ydѡŸJxÓøjÝbO&)23=ï‘}é{ ï§òßó—ÚÀ»|Ú Bµº^ê'ÛüA(‘bËà×su a‹4A,Ø^³×à)õ|Åþ³Ö šF`Èõ"¢Wq+»wôsv‰'Ó›˜‰}W>ŠÒ·ÇéÙpåz*ÛcœÊ|ÉCRw%Ÿo‚[ئÎU¶T?Åê—Bã…™„œ%|ªçº^*¤Â'›UÐe$º’À3¢p™ocvïk¥€Œc†f]ë[;·)A–¢†bèÒ5'¢¼îOF¬·©µW ad#è°¡Cò ÷]Ýý§ÓEŠà*‚§eÝ ŠwÃDÖ;§dÂ鵊ðòøiQ¥]@Ý Ðsž Ò L<R4®5«çPR¾þy43Þt÷’©zx9ùšáúôc‘šdv’T*%ú[Àsÿ—ž{>†O‰ d„ñùÁ·ƒ2»‰BHZ _x݉$Æ%4ô ÷ð:q…*sº~L§eo‘Žë/ÐÆ¬På]¸K’¤l¦3¨O°MÅ[_õb%J–ƒçŠ=¶þ*ØÓó“ƒ`²GSÖ cgáÜ% `©of_½H·my¶¿5AY´ŒnHP8,ìŒU6¤ºä³¶…à ٶ£ïßÈg‡Hs~c_±Ñ¸ x >vƒ1ñŒ8_‡='‡´gÒsAŠ]+ªnBêü¸*ì–©AwÚ|\’êzøYjÓó“¬Ücô«8.=ãq} Ìõ|îh¡d)¾Ã=û#|Ã3‡æIÊì¶û'õ`¼¼³ ÇqFGGo†C‡ª$D%ýeƒ~+Q0ø7Ùð€ÞzÃâÜ‹•Õééò¨ÕL"óÚ@¿°'ïÒ|`Tj}[ï¸Ñ\4e¸paÜÑxÆOf…åc¶AòþzSÏìp€'e$Hçæ›…D×äÃ}àí 7éçÒžÌSE¨OÊö¸Ýúl®]'=ô ]Ê(Gë¹OÇZåÖ õ~”n¨ 7;ž1gê®ÏrwVkBFÆ z eè×­9øÑH„KX0kQMï ;Úƒü‹Mù“_ ç–”à #ŽèzšdÀWØŒ‹žŸózb%`dõ¼\ òöÒ›Û9½Vð ezÌ˳a'¾½A=ˇã´fçvu ¯ { ²øåhfÍ]¥-Ã>†¯Ó©ˆ†&·YÖ'°®qqãƒyd|ó”YÃÂOÙ …1"§UXP“ûí9àÇÈ`mç”òÑa4ˆs¥kQƒK½lƒ­“ãábŸ3õЮ› Ša|´S«ˆ¯$4?,×Èc¼{>¥xdŒ©‚2s¿•¶S­wøAE _ë‹W¸Ë¬¶Ûs³Ž¾-ta²Å:ÍC÷Е¸dóÛ–œòÏ»–c‚Ö3WjåV÷¤ÿaɲ6ƒ4â6ŽK?j¤ÐÅœ,{’O8!N{ø@ýzò›w>b÷0ï¶$2(?uÚ‡Ž“d3’Ýqð— !(“8n†ød¨>Ô.¨yªš[+7zàJÑ6hã0éŽÏ?LË1G†¤OÇÉŸ$a¿ÿɨªdò t»Ïz‚dRŒ´lnc°Id\Ø'j)e҆擥Ì]Ø+DÊt¤n²s€'mO¨ÒEöüÂT`²BÂïkrFÇ(¯íeñ+@h®“ý´ ³ª,‰, ÀŸy€v¢¿#ùxHìó)_¥·9h¡\m¹© á!ãô þn®¿ºTç'ýh.!•èK‰œ™'Ö¸1bøÅp^ ˜x0¨‚MSg£ÏëýÌX.Ò/•99ŽÃºÓÜXu%¨Ãò õñ)¿f‹4„»üG*$×Z“d\–ûfm$rJݶ’ûœŠ4ì¿H3Ù9îÃðÞÖ±ñ×3øÛnòŽâö)¡1½Rä (b=Š£ÉW ÚÎÀA¸ZõC‡¾qi£btÝÝæ÷AÌÍP¦àDQ“å”j¶´õÜãS¼9¾ìœ\å„ ,É•-í[8¶Ð|ÜZñä`‘¥©„ÐIïÖC?‰…Jf4¬ƒËâÔumœ¸t8¸äÜ%-t$G~\¿<…mÑꆰæW }RL`tå~Ó„ÃÔ|?¹ýêÂ$K0Kûrx,VRb3R‘ÑòÓŠ§¬ÿŽV_Ågj™Qb‰«+c` €ÓVoì»ÐÛ /müGݬEM½9Ó¼’‚AÇÌiŒZ6&H²‘¢ØËø6o†ÅÜÙYægÂFÞ“rŒ,[C~â÷ÆãÕ'nZ–0 ² G”­}Õ%4Gî#+æÜ`w6>Xƒ"®ÞHjÔòöÙÏwK+÷†ŸU{g@Jî™ÆOhë›$âqs÷µxNZÓ¯ê)A|ê©,`gëç!4ªª·9j(¯!.ÓÚM6+‘˜Ï85¯”f ‹šÆÁãzâtÙ‹¢9Þ# ÔDT.F…~ÆSw±Š°:àÚÝA=S‚"Ëú‘Ü Z HQUbë\ »_‘Róø[{»–{‚ Nlp÷™Éàvð•gÙ˜ ®X ík4;üYƒ«_¦“ŸSOêŸÉ+<N\D[€©ÜÐz¨~ê>ÕDTθãJ9Æ<ûݤòžU6 T»Ü;ô,ÚËçý®ºq’—ð<Â¥eØxÐá*ô ½ÉaÈ=¬ù ÞV!¦iÜ0ÃÇÖ–N øÜó›ÅU–\¼­›ò*c–Òªµiá@CO?B ‰c¢~pg¾•k¡.xo5”]z¶Ô§S”†HO˜¦bÔ»83¬qéd×ÏÂÀV‹KaVúë]Û"À.ï«‹¾ž) UÕv‚4ÙÞWi/g @üèwT²í†r“’9m P‡G»œòÙ|)ì,MKHD¾˜³P¯hVô쎺´bR#^ަÆÝϘ emè?=À£Pï©4¸W©yªÚ¼Ê$DšÌMÈ3hï…ÖÞtG›Ð©éuC/¯XʉXTŸÃ?ˆi¶~¡Æà®'­ Ö—‹D$gÔùÚ £wp=SÕsõ×çÇÓ¿??ŒŠ~iÕkp¾’ûÜ™xÿË2áH8¦‰'sžãQ Ê ÑE…)Où+(OñQåëm¾S}ÞÁ@¼çܪ;÷t»³3UŠ"«[—®ªÌ/rlgs¬o=ޤ„šj²Ž'Æï¶ß}‡tðÊ9À»úÌóO‘øA»0ðú:Ów>èVùûݽçسˆìŸ¾œ I:;¯Šû>†ˆh C¯gi7ö·µÛÊ{”%LúzËHþ´êV\u­ëË´à_`f8¿$äª0Ýòkm,Q“–’ئ޹×~ÿ˜V}ZVƒ—]ríÄ<ŒÂ”òÙIn!i 2©>Ò¦9¼ˆôƒ'´þñÍ]þÛ†SþXŠ8õ×_|:>ÄÁ¡é¥ÿ‘›Ô endstream endobj 310 0 obj << /Length1 1475 /Length2 6793 /Length3 0 /Length 7777 /Filter /FlateDecode >> stream xÚtT”Ó6 4JƒˆÀ‚€4Kw7Ò! ,» ,±K,K#„RÒ%!Ý©„tKƒ„t£" ¾«ÿzþÏ÷ó¾gϹ÷ž™kæ73¿ëºYµõ¸å +¨2ŽäæãŠ4ôø€ P€ä'`aч! X ¡.®0\ü? .PíS!ÑHM îæàð ‹ó‰ˆ~ Pì/ ÂE BÁ M€:u%`Q@8yºÀll‘èƒþz°Ù|bb"\¿ÓrŽPh‚¶PGô‰`@†A‘žÿ*Á&i‹D:‰óòº»»ó€]y.6Òì\wÒ  u…º  À¯¡Z Gè_³ñ°ôma®DôÖHw €v8ÀÀP¸+:Ç ºÐÇôÔ4Oœ ð?À¸nÀÇÃ÷w¹?³‚Á'ƒÀ`„£î ƒÛ¬aPÀe ¤’ ‚C~A®t>‚9€¬Ð€ß½ƒÊr:zÄ?t»Àœ®<®0‡_Còþ*ƒÞ³¢€pt„‘®¿úS„¹@ÁèÅ{òþu¿öp„;ÜûoÓ‡XÿâæÄk‡9»AÕÿ¡]ÿøl H€PTDÈ€: `[Þ_Gè{:Aù~¹ÑSøz;!œÖèA ¾0k(úÀÛ„‚.nP_ïÿ üÛ"àã@``$À jƒüSí†Zÿa£)àó˜Ñ äýþ~3G“ ‚€;xþÿ}˼ZªŠ:&O8ÿšù屮<ÂàÍ'àæø€""ô‹ï¿ëü½¿¦ÿíÕÁþìî? ªÁ­€_'üš½¾¿&AýI¶?¥Ãø÷Z4§¡¶$`‚Ѿÿ³~§üÿøÿ«Êÿ.ÿnIÙÍÁá7€íOÄÿ9Â<ÿ„ Ií†D D– ü¿¡FÐ?d­ …ÀÜÿ;ª†¡…"·qø{—0We˜¢ C‚mÿ`Ò_W.ïƒCµ®°_7ø_1´ôÀöè‹+úÂþ\Ñ:Dþ¾Û_6­´· # ¿$É/$ ¹¸€< Ð|@[Bhz µ zü&<€—Ž@¢Sèq}Ö‚_·,&àýrýa‰x­þ±Ä¼à¿->4Uy¡ÿa xa¿Í5vsqAwü›Fènÿ²0 P(˜`ö,lWÜ|V)Gëν1,‰½—|fÌÏ=œ÷ Ù­4n±§—‘>÷¸Xy¶‹Où™]«–¼óYæâô¡÷z C­§à 7ƒò¶ ƒU̧Ÿ'˜“ñÞ§˜>¿ÃÈ6J”§/péÆÐ¦‹$iרtë±û<ªîœ‰wg¥(TQiÖúÐVY˜®Aõ@ÌðÛª.ò½UŸþ†ÐѽGY«ŽÑAkQfáIZ©L%?œĹW,÷ôÍ“vѵG¨£7ö™C‘¤J}q+ çsî^e ¾¦’y[©Ë~…ts‘oø@Ù†K†}—âf]2ì!J)»yGÐ¥äÚÛ± qŒP/Ê’ÛV:ïâ9XÉ”n©ïlÙ†(?õßÚòLåzG~œ5[ q-ÜpWQ[&ʦö7dàj˜½ ¯—ÛˡѺ%¡ ´•«FìäÜ-‡ñ€hÙO;E¿h‚úè–¶tÉr¿]Ê?<Üñco§Âó¡®_ÖäÞÿl§üa¥AÙý„Ê\ü§†’ÉëþM‰ÞìÍ¡¢˜º °$e–¡×¼Ps°ÌÀEФ·ž>doèìáô˧ ¼ÒÑ"ûꓨ̎•6’«`0EÅ·§Aä{꥓’Q®‘µý‡?$™žB‚½ŸLñž âF8¢"% rÉɶ¤JÑ׎dÑ¥^¬,Ö¹©A÷_ò(º`QØG‘ì8œ:TÖFcŠÇ÷a(ãii4͵ í°ð¥ªûÜnïõcŠe/jdcTÅãÛ~“bœq¿T9Ù«Z§Dé¹ÌÛ Ãƒl®Ä2 Þg ’¶Ÿ÷…¨®ISxŽd9{Á´êɦ{¾wì0.¯---þPM"Ip?€]u¶}ønAN4Âu¦*iŠ ¤²-Š˜_öߨ丩½³7ÑÈf-Xq*ššéE3ïä©ùúkÆë#7·ÊD¯`’ÁPÛh³¾uk¿ó„{kFÇ:6zL*v*{=%lûó$ûß}žØ:]kØô/Ì#^$¯dQ„Âùq6‹ ï`‚ráEBMbì6jèDÏ#UDünÒTÞ5u4 JÛmò½¯/\Õã› £Òæù²Ò!9§V\@|»cÁ¶‚ɽ¹„±Í™ÐEÏ~î0–ã\#­j~\wϺ7ž O”‚­4Q‘`SHŠ2§lèa(žDz+E3~h‰(ñ‰ìHd^òtŸ øzc8Ì‹„I¿ÖÜ ilÁ¹Ñi¿þ8. 6©u›3/Ü5ësÜ‚QoâÈ‚Z…æA ¥‘ñ{Ý÷ÛÍ™ºDHP váÇ¡‰#KA«å‹õ¥{cW7“­ÚMg˜¼–u}>ß¶ÉèOËQIW?ßáA ÒÓÛf‹ê>òùÔ=cVºuWÒvðÍ*0íUT åGb€ Y¶“»&Í´Xí犩_a¡J#ò½In‚ÄŒ â[›ÑØ] É ßƒ-’„ð/ >„~Õ:½O±*¥žA¤]NÈÍ`S$´E³à:¸yåõ*ä ӱ?MÁŠÉX”’è˜vÏ–¾†~ºf¹çUÓÚÖFM;»!+ˆÓ—Kü %™0†D–°n–ÜKËØH‰5 rÀ1ã:î|!U`v ¶hâN¤ŠùI‘…ËËz‹µ]ú˜ÝZÓcÔÂèGÇ?Ëaž«w |è¯äå‡Èäá$ÔÑã"\>„f‰?âF~Þ{Ùƒ?õ‘”³íÑ5 C/âÇþmœ°ÿ„†cÄ`höéh~hSr®ñBü* +(@06n½ê‰¹§z_Õ{”íLBFsñ~®÷½~›²±à´ŸpÈ»Hæ{°“²9Œ}_ò©öU„]|­ ‡ß±^¬æt»0™—zI†§9;pbFkÑ™ ‰‡5þÖxewW$…§M·¤Õ—W}T0Ûi)¬O3QŒŠR—[é û~<+Cc Ô3UðúåÖ'¥­rÈ$© SÎUPR†«5V68úÒï=ì8í9šñ~ÌfŽ%ª»ûÓk&;D*Åô–ÏѪDë&ãp!ˆb‹[q5]`öŽ¡×åbóÚƒí¹a‚xd3-~ô‹gÏ7“òØÒ4^L±‰çÙ3©Rkçº ¡Œ‰hjÕ¦…ï OS—¸óþw ²±£€b8Óƒ ÄïvÜ´¨:QRøö³-VÂðžOoÞ9¤¸ÑN~*ñSä±i«”õ¼·LÜ ÆN¸,…5p HsµÅWÚÝÆÔl#7¿®±!÷Zž°K$*Èo:{ ݉&ÉrVç.¯–Nï*;„FšÞi`7©¹y"“z|tn4,½¼”1'eTeµRæôÑ᛬֤– RÀ?ËTrìýe( ‹‚v òCí.¹tMåØK–eýƒë›¯GäŒý‘ÌÖÛ4‘W5EüίBÜ.ûÜ{ºÎ*šéjܰiÛu#p9&桤1–”ÇDç/zµ‚1ðä«K<­ËP<‡nœß×f™.s©|2<ÆCLÙ¾ ÒfNù™¯cÐðºLž…f˜›ó:ã%ß±­½œw"³Tçdò=N8­ãø”ô€®`Sõ• á%‘¡ÕÊr&ó‚ûysb>îè§ ]ê)‚c…ÚúDjÛÉ£{+¦Ôuù°ÌÞ-5 ì"ÉÇÑÒ ÖA ë+Þƒ—šc å%`áä®–r_øT5³]B`”R¬ÁþÉãDsбP¦ñµ{«·;,¦ncÝÆøIÏ86j,wŒ“î-N =NÏX sf ´'9R:¹ˆ’溫¾ vÐ!Ê.]0.N7º*¼-)SjÆÇb‡É©èâ~p g¶Èz À}O%Ås­ŽRþr{$ÿ—é3{´ ѪÙRùOBéwôŸ¯cV†#¯çD¦‡3óV^?·ÈJ=’=€>Û^„OC2ƒ¿ˆX‹<¬ÒÔJ–ܾ¡å±kÕ†Vè5F·Ni ¿ßï©GTŠ-=ããWxÂI#ѲµÕV»#77cb!Keì«ßg…GñéQÁõÈU˜V˜ô7.£íÊcw‹±½+EzìæÒcäÙôÅ%u2Mãö\D¼Û/$H#fkÝ^›Nñæž(G–¼Å$ž1VÏê\täì¸:Á²Ç_óØ·ÂdY$*³ø¢pý|†Ñ~:Cü<”éÙ §H•ã~Dü8cD…žõ±ºu… ª9p-å-ˆíSHž¥YÇ^ChW„@ð´ÞÌá´At^G§þÆ0^ëóœûm½v“¯vVäA™*Ò­ý g]NÄÔ48Vµ;ýƒ¢R”D7ðPj›ðVÖwOK‹g_¢«=iýè`COº Up‰–IUçÉP |˹¯ü3ѱ^™wæ¸N ½¢°‰Ý|ß©y+O){ø±ñi¥c]tIÎØ\±êfßêÖ󒉢‹s¹æµ+ææR ÓöÇ'¼Mà7o*8ÛèI“ÇÜ ž{eLLL¿ìÆ*¸Åø‘Š~’<¬¸{ÆpažI2ÌDŽñ,ê„‘}6ùîLe)™’+">L¥v—rÈå<{DxIšÙâÖP-?zµ²”oÍËó¶äñøŸ·l^ÜN[!ô®;t&WU«¥“TUÕ†€Æ¼0ÆÑ9KÒÐ âÚÁté|ß"âŽIHžH¿„2s²wv[4ey‘Å7^q {‘@†úÁ½ ÉZºOsbô²»&ñ‘k·±)9Ë¾š¢”ºít6…7[gd˜L¸[:… á݇]ÓµÅcŽ•–¹¬ Í™|;üþ´0³­‚´kß¼«úÚmb¬-Ø®Gëæ{ +ý²êH"­³ÍX¡ÙÄè°#Î"ïxiM ÜCðýc僃"Nù2Ÿ­ö$¬8R:½z–çs†Ã DÛ¡Ð7¦¸l×iÔûRÇ]-˜ÐgGDÜçÅ‘ ;TbíËóÀÅŸL>8]»8ŒA„on½IÜZ!+yÊÕ…µ^ß©«½c¸kÀ-Ár*ãIM{<±A°ƒM y½Q»²,s ÞjXwV£xµ)¯5¨ä%™(Œ o€û/BIû õÕ£IÛ»» •¹|ýK7ôåœG»f¯å~LaW,Öè¬c …«ƒÍåÉgNcR¼ò;åë3­Ä*„\Në̪³¥y/5Ї´/ÓðªÏå¯YêÇõJ† nl3|bvž±/CÔsxÅo}¦“=‡ 7žkMš «ðJ´ñßZ›žâ4Tüj3±îfs›Õe†f‘Ň¯‹§~ð¿<.¢‹ ¨¿ò%O¿dä=q l±'Ës)Øo!•Œ|Óò±o“É^£´ÓõãªéEݽZ.1EýgÙÐ Oè×ð«Ú<‰¸÷eÅ8HÂÊ8ÊA²1OõT7nG@õ~‚Pf'‰ÚÝ#ì@ù­› s%âÐnAÉ €xîjq}OªJÊ?®gf ÄÙEîòÁÜÛ ç-«¹éôQQë $áQ °é씨 4R“;÷õ ¿±ÙÁjÉ¥uЂ¿ˆÙ×Åào€û_“ÜEõºrºwò‹ø Ltœ/ jÔËëæFŠekE1å™ÓB,«ä|ú$uÍYo ¶ÎŒ35®*¿0…7¿ë£˜n(6½ÑŸ©gG0ˆÏîIc½ Yþi Þ2™aJÉ=¼…ÿ¤Ø=7)p˸ò«·Í.*;1ÿú¥|×^I.£Ål Ò§­4É ÓÖQUòþãñâÖdæ ÒãHø¨ßÞ:&ëk‘Ä&[“ŽdÏÆ%êU×4×óQ>«"øäSEÿEX¶ ÔóË­žìûïºü;åL_J9®ˆ ›@9»Þí§Í%©ú]¬ô&Û |]r\ºY¡ç×T_郞R Òñ·ó’FXÝ?k@äáußwV¸¼ºHE‚Rë±5ÏŸŒéÉmPü¨±²énž±é|ÞºÝy"ózS'¦‚€ïõ£ü£¸œYE\*꼌ÛêöÅ&åIÒ9—¸BÞ9 ‡É”ãòü¯žhœ¥J ‹8D·ó?”0 ÿ"µúŽ$o«Îè¯U¾3k£$…o‰?ážÒGЉ:TÏ€¨ÓgvÙ¤3ñÕj”K«sU˜+QYòL«ÛS­d´õáVý÷Ÿê WaŒ,˜¼1{™ro ,DKù2»¤55Q»ï«·[؇&o›Xbw¢ ž~ „e¨õ…Sšÿ†4–GülNN³ÝÉ„!cpÒ{ N9÷áö.ËE©ÚÏÎcĹ×4}½’­l$ç=|tÒ§´Ko2Í^F4ƒnؘj-EŒmïÜÚ:v@ù*¬Ôz—Æ6ŸÝiÎÔ]>ÝŽ(f÷‘ŒIlçíT»©ô½¿+—4iÿÕÑn|dZAGWœÑd?' PîsÃ'HWg<Ö¶¼YtjÙ>%¾9~9ExèayÉ„91¨ºÌú˜KC‡pŒ<øT‰Ñí#©Wh'PÄäMæU÷cÝ¢“º†7Ž^ ]Æ»ä :K^Ó‡þ±ßô¹žªÚ>MÍÔ|eúÄÃä•·¼õÙNýôxå|>ÄÄá?wªs\ òQoçž9lÈÔõ©èfQBââŸC±—«ä© w‘õ—ëWüJ±Ó/ûrë°ŒÓÑ7çÆ2mˆ¶²Ðf•Û}Ç8‡Ò9?„°ü‚„N˘¼âÏÙO' £´KpÂÛŸ4kl;HàKa…À“ÝÕÆ!I'é—…«¥a¹ x²¯;žÍéœÔØi婼é7{ícCeV`þðGƒN m¼ºy=ö‘ù·{ã'*ÂùuOÖ.x¤²Ž·b×"YÆÊ÷–Æß`  M§«9õ¯1‹“.’ãY92¶Àéh™ÿö%¬ÈxÔPœ.?±§~:òðÐÏáÖsed¸dSwÕòi÷dò©o÷˜»û{‹2X‡mðYOÎk0ûA‘Go{ŠJÊÍð@Ö‹!zÌÏ,¦¦ƒoDÂøIš Âñ&?Í%£µÐH — 'vFBîèñç×¾…·¾þðŽ;µ0h Ë,¯ãÆß7LÉ*¸?Ÿø©*a© œÝHÚÎgA;áQïX]ú1ÿ]4[…}nkì”ËU'n¦ºØâáWí4XVüŽ3÷•“ã—‘~‚N†™(à‚ÒúÔŒYœÕ§×ï:ˆ4‘{õƒg@CN¬ÒžsÒ„â­rBº¡qmÏ<Ï;ýA~ŽaޔŪ(ýfuBÀÆ)E^ËÑø°PQ/Óã Åù¾‚3Úo“¹I/QåÂØF† ÅIøu¨Ì¦crωó± Ò~QÇ3ïuá¡rãÒ?=ŸÅö4‰‡Ýq4’M;eMÆb‹™ÚC½Ÿéç«d·ñkxø_ÄÞö‚ŽÅ._ì¸ÍEqì 6}¿î¨¯“Q•”ñÌžÁ¤¥Q¯d•)!ã+)ÁCQ’¨²9æþ4Ð7O:éÙ ŒjªSÆ)â¼Ësð;ÖýM¶X¬B8ï–q "™æÌÁ3¡“xrZ˱ä–„¯q;G³®Ê²{ž\öðq$.¦D¾Éb¶› w,µ38›ÒÛ!}m<ñ›<} D¹ÞJ6>2ò.Ë® z]²Fyõ=õƒ7ÃRq õ‡Íùâ>à‚#çC=Ìô¨æ=‘dî¹LF‘¦Jm¤Ÿ¯oº »CƒP}7!³o/QJÃç‹9zÌwÔjßÕ ðTÜè®ØCï8;\›ó¤ͨ*£x§TÇL~m]gfò®R`ÿÖê ßõÀÃĤÀÝ :ßÝ+s#Œ|F®,ô2жß3Þàu $ŒNQŒu”èçÈ3þ1O»ú(NýbùeOnf÷ô²9nvägGóºÕÛ&EJ î»×¡Ñ£'郢Õñ¦Ö?ý[Í_žE<KCç>x\PýH°¨¾€4q£_KŽùžåÓ;–ˆ€Ø¾÷’Ú½A«8úÓgÇ>lWÅTÅPt¹´{àÞæá‰£æùÁoÑGÑaöÊ Í%Ñf*J[pQç–•§sf`Y¿,oY·;«ÎX ”2?ô‹„gsZÓ Æe]Þªiœšã—<ü{±?ú½Lÿ[@þm«ƒ13<ÒB…À kð&¡Pà[6_²•7êˆÅ/ÄŸáۯƩ€µ_€ S/:ùýY8Ó¼c7¨û±2Á/÷%¾&ûÉA°83ä¹ï½À:åÝlSos îœÅêU¼Rk´UõiyÖâ™B950©Pß«V‰–¼ã¦ÿàvñƒÔɯÎ_>¿éºÊèm¨œÉÂSoíTUŽû.åŸf¦*LÉClìÖ‰•¿(Y&Jà Z!«ÈìÊ2d +ÓgRjÄ©ÔEü3¢°d©‡”©åb õAùÆ&Ô]׸3 wÁÁÝ&Jº…ÇpðDQ)|Á^—Ã>g¯ª„+I·Þê÷EIg9ó1ñYŒÏä®Óï¸hÎŽnu¼ª×ëujì­~Üy³%—à<ñŃÊÄlUËÄ\ÞŠ©ÀhÏ*áË`ûþ4[68¾<á€Õ` ¹Ã·šÏÃjn“Y°ÈáL¸ç¹ý"¯Õ`‚Hÿ+gO Ê=b¢`3u¦ƒØá&P6GŒŽ×Ï]õe¡ø¦;¯â}«®ª?u.:gÞ‘Šš*²É÷/ÉK±2­*±*<|ü±ñ›æó¦lr©(,X8–š©³ÔóõöŸXí¡v!QòµKS~ëe_âSýðs=U¨Û•—aDöÛïúmßòõ¶÷=ƒ±ÁÍÌÔ˜;G Ç^Ôå¥+éÙ›qfå™Cü÷(ù_Ûê€f iá/$æS‡ç,/ö}®èé>hWå‡?q%£oAZ×h8ɬK øS[拾±è]×:֜ܽ?æzt™íøN½çN/«]ºlሩÄp•þWëršýD§>ƒQXi'ö¾S[ ¬2‰ÖîÔŠuÓ‡’ýâ´±ù ,:`U?“œ'Am4©Ÿ—cá–¸ˆØ )‘Z/³P¦Mâ]ànN»KB.á}‡.“½ç{÷ –¤2ð³"Y endstream endobj 312 0 obj << /Length1 1767 /Length2 7909 /Length3 0 /Length 9004 /Filter /FlateDecode >> stream xÚ¶T”Û6N#-) 1tà ÝJw  0Ä CKw#RŠ4H§€" "’’ÒÒ)‚”Ô‡^ï½Þßÿ¿Ö÷­Ykæ=ûyöÞç9{ïó ƒ¶œ-Ü¢ ‡!y@¼@q€‚†’1x@~\}(Òò·—Å‚p‡Âaâ00òÖ¦FÞ5à0ÀgH‰ˆ~ Pìo"!P{Bm¼€pÄ—EîꃀÚ; oóüý`·á€ÄÄD¸¹ä\ ¨ Ð# .·mÀÎ=¸ ‚ôùOvI$ÒUœÏËË‹ìâÎ GØKsp¼ H€.Ä‚ð„Ø~Jh‚] ¿¥ñâ²ô îzp;¤Üœ¡6˜û­‹Ì‚Üfè©©´\!°¿È긿âýî·÷Ï@PØ/g° ÜÅ óÂìvPg@KYéä€a¶?‰`gwø­?Ø u[ß~m P–Ó€oþÖçnƒ€º"ÝyÝ¡Î?5òý s{ÌJ0[¸‹ †tÇý¹?E(bs{î>|¿‹ëƒ{Áüþ^ÙAa¶v?eØz¸òÀ n5Åßœ[î¿6{ ã@Üo¾Ÿ ô}\!¿@ÐOó­?W¸+ÀîVÄj¹ýÁõs{BH„ÄßïOà¿+\` µA¬!öPî¿ÑoÍ»¿Ö·õG@½fÀÛö€??ÿÿ‚À?@$Äù ùO-m<·›Cþš·ÛBÿ½þu¯B ÞÜ™I¸D˜c]XËYÜ}/žµ!©O,kF<~3ˆV„Ø©Õ/B'r©}]wçV”Øe?Ó_ùí4ÕcG¾}ªÓ|ñøÒò‰îèZ3îôÅûá¹W=´84<ú²ë¯Ü;¡7¡¶?`Éuó%ÔÎ'=óz§âýª§löcÄäšÎzµðC¼Ë²1žxƒ8óàâq–<ë¬ JF,$íN’o¢ñã“O$9Ã7ôžpáúïÆ ù™.ñ'œOøÎWèó»wP1S™RÒ¢“|eõ“ßL{poʯ¤h¡`œ!ÁÎõFEÆìD?éäñ‚MˆB _:4ã­’ï“OÝ•‡S >Âï¨HzåìÜ?®Pа}ˆMƒÁjn¢ïÇäYAàÒhÁRy«°˜‡Ï"`ÖSþ\$N '‹BœÕC3ÏB~焯pèÚó¢‹äKšÈ5Be->L'S´—NÁO}ËŸqŠ{xz=GW<qfÏ:[ap¹OÆ¥Xi$WÔ³´8þŠnvµwB;Ë[¢€Å‘E,[¸„Š}“Cœ§‚Zµ´·`÷ã`ØŽèô¹ŸgвÆ÷ü³À³/¯3*60“·½ž{V|é¼&5ì\¿ÛQCAÁwy`ìDã„‘@6±Õ#"WÌŽZ |o6`wu^yľ÷U‚|Ì+dYÒèJËxî.N …kÉs@Ö,…W^ïÔ²ìSt›ôR65òѽ”í$ù>¯ƒk{8¬<Ô ˆåRG±íá»,ØÇ°´µD&–KJuíê*~Ѝ7ÖÅ–»”é0Cîñ§¤4¡­Žfãäªu㯠Ã5’­E‹µ§ǦòkÏÙÏ6¡ËEv/xZ‚Ì´qT 9:ƒÎ¤0,q¿Æ/ùꎶ­³õÓ;ÊIš+cM~Pó=U /­ñaNÏgF`â×ߟáå«õvȼ‹}<»¿,ê+M½ÞJ$vª9ú“çó¡gÁÇ¥¾~"'m³šºN£MÍ—’Ykï)éÓZBÿÖ¤*Ö-ñ¡)g‹ ºÝg£pñׯë#· •žÆVBg‹÷Ìå¥ _Dõš¥ó­)éJ|ø¦»/‘BÈø^˜½§ôÕÃû2 ƒÒömø*য8b0RúùÉÙ{ëYì¤ô’ŸQ£â3ï?æŠàðŸÐ~?IÆÏZZkK—ææbs¹È´¢FèP׸ٽ¦|Q»à‰Ò{…A›=ƒF[ÝøøØ¯È†>ÊÎÇ3^Xuѵcá©)óm>Ö”d8º_“Im¿Š Õ\lΫï¢;\» Ý5ñèó­Õv+´rƒ}•@“ Õ×®(ÿ°:N®¥ÿ‰™Ì“ÀóþÿôÀO"š³=<ÈcŽÂGåJjìæ’5̈c­ovôíJÌÚvÚïøÎoùåÎá!î*LòWµ›Ù|Qè)ìÅ,ê© «D;·[»ºwî9«Ôß·×—·Ÿyd÷6L‹¬Ð¨/ün›ÀÃyûWPƒÍé§éû'çšMáIS©g$/éOÝJ@Óz¼“ù\‰-Àђ˧Å=³«&]°MO÷‹rûð3«é/¤Z LˆXu¯ý*øgçZ6Ùv4´}µ‰Öñ¹N…–¡”ŸKGWîlÕ\SäÜë(¥\Þa뢽'_hð#<Ðx8Ÿdyra9óN<¯ß.‡nÚ34-‘÷[-Ì#°\kÅâp’Vµ*}Ñýt'zèa…HÜ2FÆTbÒÑé{úw%>ÔlîVr™ &Éq¢Ð¤¶ßq É}uû÷=ÜHMï´™uJ µdtá›™úÚÞyùÉÁ#6¿¸KmÃõyòÜ™  ©­þEü„?DBJö“ÈìGµ0îcªœã º9n%âà܆!\ýÍ,ÕG–„òCoEØ9ð".½É ?K¹tëêÖ¹: už¿W…ó²ÏÊmoÜç+4çÈR«  Cd‹ì‹ÆC†v¡v÷mJ;É~%àfU¯ÓiûúâwƒªXE: zÍX1†5 Q<ÙÏ‹Ïă†+X·yÙCÀ×%vN ´ØdfÁ9UisÞTqólRÞFª‡¥xÐ\wÂâò« ¯Èóøø‚WZ…­A†ÛUQáÐÌñêK”Ÿ~°$§RùMøÌg )£P]2ŠãVMƒÌæ®»¿f™À&ÝÃ!ÙË<Šk¼i‡/l¬–i =ÌÙ+YjŠÓïËËØòÞ }=QT‰ÔÃz§Ã<äŠz¿l"¬[Xòfã¬&û€Qq«Ý~"D¶DÇàã=ª ^–ž3Éj A£6~ÁU5<²]Sy2ÞÝÖ)nw¯Ü˜X£sn—0/„¤8‰à÷nó»M W™•ªÍ“UO2Æ\#è ëö+ è´Îw)%Xœ6‡š˜Bâž{î2ℼa™Õ(íÂKžŒÐô ÿÀò6Õ"žRñ¢ÎJb]Zm§åÕzÁû5ûF†y zÐÍéî ¸ÝH¯ý½gJq¸@®O­ÁÁ|þÔ98“¢Ss—íéR´]¹ìræ3Ïé/1צWÕŽxšòu¡Ed¼>o ÇFÝ8B~Qq˜QH%îoM™\Z”'Xå2@Aßü.ëjMÃj`DP* õ¸=«…çz¾ðö‚]˜¯°ÍHŽ}ÙãÐThßHwb,x"@O¶¯“åÔ5˜âN˜ŽZ•¼Ï$Ø%xÇ*Î[ñýÁ;T¸¸Ò$r–ÎO#L˜I<2=¢ê¹…ׯBöq¦‚\Yv*›£EžÔÅÅCÁ(Ìï´ûJrÝR…µCâZãà÷c\†Æ}f+/­¹çi]À3œM1”ɃÂbé¦15ý…Í-Q¡«­èú‡eÈ(b‘žß”7󽦇üïGhé£é&ùVyVеäÔd9Ø¡%,÷³cµžÉ¶CHÒ¬"ÐB˜ïƒít“žö¾ûQ÷7+/»] €‹ÇDŸð¦é;bÄÙh'ˆ¢å­ óJ"¨æ"û•Œj¼æ½×~K½{ëè÷sÞ«¥Ï19Cë¿nú¼zzoæó ‚tQ²I•5Fwçî “añçH^½JK†ôÎ> ŒNT[ %(]š"‹[³À¢ýLYÓÉ®|t*^£š7<élB œ¦ª¸O¥ùð„:¦ƒJ—²0!á|‘0‰Õ¹0éÌ} Cô—Ø£.ÙjˆÑu|‚Qs6k×êÛhÐ^,ÅX/ „•oÉ¿õÆ ‚ÜÅ?‘é:h9bž…SÜ ?7?Í”÷±ñ"Ìð¥È"|ßï¸ ihøôIuJ&©g‹¤'Õ õN™ëÖG¥¢ÍÕ—ä¼N½jO«–lí%'·šï­ÎÊo¿=7Ý1oG“'§+rÉB4FQ)䆑Û>"íñ*ëŠA›6¼väK`óãS2ÊôlãZXYÖR”š(±EµéPÍ·†¾{e¼à¦ cË%¾w”i¦'8Ne/ãǵ’­ÞgRò`ø‘,輓°ÃîàgPG}9©£r)ßãVæ³]Í §eT¡–érÄaèr’ƻUïlÍ®l":¨Büc±vO°†·‡¢Gx¥Î¢D²¶.™ÌZÖïc_¡=*¯^AŸt¼ãD½à}žp:ßüF{Jw©–jDn¹0£÷ûÓ]qÇý5Üz¼¢á"“ÕŽ‘Gºž´ˆú-Ìú{šg“†cj£3¾ †—Þ²´å¶†&n*ÖϲfÑcz “õnžX™†.©èZÑé§Ú ìªv .gM±BêX•Í;eq½._ Z^¸Kìøx¹Id¾Ô¬ª©åFDüÀ~Kp,pok©Àïœ1nMóÎ7ìù_?Oón};ÂDÿ¾4B¯7;ñ!õ¬}«–¥×•Ô+v—ÜqÈ ^Ý–+ªá©GJË@Ñ»¼Z;ºnw•oCÖ#Ûº&üË狼|øm£¥0Þ„Q5¥~ÃȃìíL_6¡ˆFÈrJrÊ4¬®3'&ñîúäXh;$ÜÓœ)‘~t êþºŽ0!µß¯«ÑH¨×íýÂKH²Ý‰ûÝÒ¸ozhµ¹máÁ&·èê!å ¶2Á–v‹«´Û~:m3½›LÐþ¢œBðb4òæNHÊñ·/ô›Îòûö¾ZF†w9>ŠåYe3ƒÂ|ȵL ĵV¯Çe RÊ‹“Ú|%”àå²»ÅþI|–™ú2³ƒÎ®^܈˜qôŒôýî3F3±%¶õ:¥*f=ý¾È$©é±‚É êZü« ¦ZKeâÜ ¯“¯ Ș9?;˜©w±  ÆojE|ocâ*ôyš&Ì8"­«ËC,ÎÔg¬ÎÒn’MžŸÔ§m[^Ém¶€uYQU©œ¯¿[e?`l2RÛÞ*^HëL5÷Û«<¸iq`ñ;fCR`ÏÐÉ“Õéô¤²†þP¾qí/šç5Š]ÛIo<ÙQnVÎ ÎxÚÁ£S¨dÔ2¢¨Tç;*äžÍÄ«¥º« ›©¨¿`ž÷ç EpnU¥fgž`-TX·¿0·P*ñtÇ~Ü-£î¯+LЪ*¿†ö*ÇGÇx§²‹Fû‚–ÏÉmC»ˆzaãðfQX1¾¨ayxçT(¼[¬Sáñ©íƒU´{‚y®HÇž˜î' )"S‚cqßUR«ÐC6£×øtÁL‡d8‹² `r úëC¥Zà·ÊÎL´1l™jsÀ²µIá§ÖÈSµÐB—þôc^’^+oªC®iÒ§ün¦âŽ+µ/·F”­5Ë$Þ‹V¿)÷ß}—ÕíÒîVò6ÁÐSÀ­p NFa†S²‘uKÅ)1qvãâ·æª-iëˆîP}_¹B—_ „âORZ»àtº@/מ÷·òj[ÕGÙø"€ë“s(Cž^μXçg#!{´çó´= U&éé¾™“ŒW¡Ê‹NºƒÏ'†Ö¸+Ÿ[9-³Äf¨yXƒ/aæ×ºŸ#=(m©0 Å‘s2¯kvM^ê%ü¸Èã32v¦ÐÚJ$¬²èô+qLÂí¨µKO²Œv}œ²¶-eª•ÙËþ•«ìÊjG÷­AÀó£t‘"¶w> µO–[΂ê'ÆÃv_ðç(²™uó‘!Up)ì »¾¹9Ï0ª'ã7;‰ËLbi¥¿'¨Ç.M •‹%ªB¼ò «6í¯6iåÒjRæBvçÔ‰m‚›•À+5ø’ˆi½G„Ï0Jqç&ÁÜV¯’ТßgDˆšï6v•‘®gR£å6ÅJyñ²m)*ßµ·–r¦úp¡E³ŽãÕï+‘(ùpï¥ñ#Ü‘Â/¬‰&ªç|½4tå ×1×ï=”‡wËVºPˆêÍè{8ðÔâ‡åyÐäX­üäÝ;x·0çŒ"»»üT³|øî¶LìWwÎñNž»&µ5Þ ž ó=}וÁO µä)|SèÜíVVŠõìõjx|·ÿZ¸Ïdhû‡b³^ÄßY¾v]/âòýdæ±b̳à—cÐ÷òïû ™Ñ¢`‹«€×âNÌY‘Í>I-\ÈHó °&6΂#‘­ðXlb]Õ\]ÁsCm3Á)b?”×»m7nAÉL¨ ËQ˜ty̦ζ¡Îሲ†Þº±ð݆8{ŽZH§yåeƒ£_™ß“ìhÀ|1œ$ââ!Dî>h)÷ˆ²éYd}lNR|ê<€‡blsó/ÓiCåDB¸¬-ü¬%PÔŠþfX¢ƒÂ’ýáÍyÞªÕôHso¡ ¯žÎî·ƒFúHR”’õ”e›ç’öÛ&¾TR"ÎGÇ,N?//"ݵNáVÅWD ‰¨^,É“°×¸²Ô+•"±J©`“5¤%·:o¼Xy¡¢Õñm0Ãߣø­1Š“§ôH¬ty?LPŠ‚éq‰ÃUÀùBªà¡.–¥TõØÚGêÇ«ˆÀp ›1qÜî:ë6ôZìFé.pØYÆrn{1µQÌÍ‘-3tèëF]øJà»S€ AÝ ùÆòÕ¥V£©¡q‚+Á„¹Ü»fuúºú>?˜ˆŸy³œò/ˆ}£6"¤ÂXni?Ø©4Ô!¿¿Ð(™Œqã}“ñIÇV0L:7¥ýËͽ.ì”÷ªGÅ!þ¤ÍrÚ>h ñ&ëMô6?õÖgØ]÷“ûŸÓ<(ig6¨nŽWÒäˆB'n4øBc7ç[E`­ç„rÜ‘ 󭶸š„Á'ÉâýŒ›¨Üð휃͕ò…I¡àºXxî ÔBÒÁÛ¿©B£%Y«¯zõä=PÿÔÕø@Î3QwÎbÅm êâ}œyUÒàV}êuœ„VB®iÁµdm€ Ú÷ý¬hOI)FcoQåݰÖ-Û=)w˜ÐŠöwãE©Âeø§¤ ¤3«‘éCÝ:½ ô¾IÒ^ã[¯BIY.˜&ÝsQsŽ43¼pƒ¹WKlÕ¥Q£?Œ¼ª#“+¾{ Õ/ª #«l¶!¸QSÐx@„ÌêÔ]Ëo¢R¦cëC<ÅÍÏçHxã°!ãn4æ’¤• 䓤þX­Wç"ï LÜûCã9ùbÄÆýÍ·\ÀYmî*øØlCî“ÝÃ:Ä{š ½Á]^‰ôkÒ†_DPÔøëøõ«{mX†|½Wƒõ?>°½É²1BàÙý|8)>¦òšiCQ oLü=ÓP¯( Ãw" /¾¦g/ÇÌAëù lÕ¯`ú´~çmŽ“\R<¹.âYl&˜Æ3l¬uFéÄ©¸âÊo×'<Õ^òžW낼-Çú׿%|­.$[PÂ]fî,tC÷ùÎôdÜ–$?†á‹%™S&¦ór\¨¸ãªîô dvAÊ…¾ƒFö”›qûèáRMß- K–âQÿW_o¾oL^Óå޲ä>åÝ|*‹n}lôYÒ³ðÞó7èŸ<ÑØÃZ:¶Çâ¥ØÜ¼.Bµ{‰¹ëµûì›á†ìx‹1Qwhò,ENïtmz÷/~ É å,õ¿yá’‹Ä¡ Ÿjê©K}ó²Á·‰¤Y6S!·mGÂJv3×íÊú cL|ˆøÓswƒïx*³.ÿ(ÇéjVïd¤0WÞ$­kÐfv£·[öH‡Ú¸µªôõø # ¤fïÓËņ¨g椙Ï[˜Õ@²ðDÌVĪ¡x¤Q¸H©Â·Á:Ѓ3ï2·’ ” Õ] ¼­;½I’,ºõ@Šay‹Ê\œôZôª4õbš´ŽUåÌÛwg!Úg¢#·ö÷¦UåÄ^ȧm›µ}MË•ðrÂÊÚÏ&ãKn”€=¯$A>FcôÞ]•’ÞkÓ|Û)™=^¯…‡V|¤4Uq@Q ì–*¬·ÍÀ\T‹¹*j½ê×fýï®Â›ÂOql;ÞJ`Ì `߃?ê6k¨î:ó:û’!ÕOpçc®¶eìÔ#&dž?bâŠG¥}°×¶fcä/ & JD° «Ü¬–ö£Ù$‚Óì?ç2ƒÅp›£vÕkÐwï­;;~Fø ;}º3µO¨6sæyÈ;Õ&ž»œú¥]ÎÖzû@­ê¨${v"$[XЈOÔ¿-‹ÀPÄ»òÂál¨>à'A_Ò/ ³ïìî5õ¦´·ÊJ_š_a¾èNk=h´«Àá;e݉}Ǫ¥žÝ*1)_^v…ΚÐÓØÍä7Úœ¹„ºž¼¥âŒ{5¸™™æã'ž84ãkl6#a©~^¶qn2k‘bI@gï{ËJùÂ`ç~ýðîæðrÒ2lñq¢§õZÏ΂mI‚ì@±¡ò"îês 5y\¶Bq ´K´ex1ƒ²5àËœ÷&™®’ªjáIÙX•¦<0à•sáÔ÷u_·í\ÓsxUÂ_êêcRU[ùÒ9lâˆì`¬ÿ7ç4»@xD.¦MXa¶8–’0ë¯ã'‹È³™Ãyc¾ÖlìšGöAËîhy |ZŠyuÂÑ@!BÕû~s¿§kË$rºÈD8$QXJœ±øêK˜ 6¨< 7q¿×Î*\¿µIÃG(HÅX8†S$V)S1Xyf€Çjÿ¥½' ©Æ¶¸y®O?Ä!­t˜ü°beðåçÚO`ˆg‡´¥bB ‰ •&5KÝ=»Ë¼Éø)£1Ú{gD =9«&¾2.%e<Ìg÷BiG/ŤˆYÞ09Ó`Ü·²&À˜öâ2ÂÆ ·&Íunpo­©0ån¦ŸÑ'Ë•øÒ½1Ђޥžá7…NϪ審!f_úÈ|õ{.?ðoÜÔ×å*çÝ¿{ç5&Ãj÷›Ûk|擈Míp£7%¬ Ô•µ?d+îb&úTiÚò‘ù^zÈŽM‹Ç3 >u7@ù¤³Ò—ÐÚÕ\ŠéžõLÿ)cÅ9£|'vï»ÅÄê†`BGf/–k/ºq˾WEJ eß_'z7ZÀ¦6.5°hU[*ž;pB™ˆ,°°B·O Á¨g — g¨“ÎâüØ*–/|Kq¾‹Þ™oQ|0µKŠzªÆ’â–b¬0\ÀŸÖcŠÂÓ×î„+¨Zòü„çÞý˜dÑ+¾è-ú;CBQ‹…’ÙÙfÎUùê8]zŒõWy“m:ºÄ–=¨™Z ð±–@û«¡Ã=¡†ø @×€°h"`ÂC .#27¯ûUŒÒä1vÂx×tˆ.@(óp^~Vݰ±Ä+H©ÍØP%¨½qŸ™‚´µ©ÛµâmVä}ª*ʤ’qn:V](ýFÚÀo¯jh;¾/¹À gÜã]8jR§«¿u”[`Ք᫉42Ölwà UßÑûú™BÅ:=ÆR’`gQwý Ϩ쇪'Ñ«”A=ÓñåH¢P•B¬ÙB;§úœ Ž'ÈÚL¦`•"Õ7›äØ ë7ÿ§t¨€ endstream endobj 314 0 obj << /Length1 1928 /Length2 12731 /Length3 0 /Length 13942 /Filter /FlateDecode >> stream xÚ÷PØÚŠÁ !8;»»»Þ8MC7î,¸&8ww‡÷w‚»\fΜ™9ÿ{U÷UÐëóµ÷úv54jš,âŽf G0Œ…•M ©¬,ÏÎ`cãdecã@§¡Ñ²ÙƒþkG§Ñ9CmÁÿŠt™ÂžmR¦°ç@eG0@ÁÅÀÎ `ç`ç`cp°±ñÿ7ÐÑY eêjcPf(8‚APtIGˆ‡³•5ì¹Ï?èÍìüü¼Ì¦Ä@Î6æ¦`€²)ÌäðÜÑÜÔ éhn‚yüO z!k "º¹¹±š:@Y­D˜n60k€ rvYþ  P1uýE emýCÓÑæfê <ìmÌA`èsŠ Øä xîДW¨B@àÿ+ý'€ð×áØYÙÿ.÷Wö…lÀ&›š›;:@LÁ6`+€¥= *£Ä s‡1LÁšÚCŸóM]MmìMÍžþÝ #®0}fø?¨¹³ e…ÚØÿÁøG™çc–[H::8€À0(úóIÙ8ƒÌŸÏÝø×åÚÝÀ^ÿE–6` Ë?hX¸@€Ú`'¼Ô_1Ï&ôlV €›—“r€ÜÍ­4Ðò€€þt²ÿa~æàãq„,Ÿi€|l,AÏн ¦® ÌÙäãõoÇÿ"tvv€…9 `²²£ÿSýÙ ²ü~¾gw€Û³üØlüüýéý³Â,Áöÿ„ÿyÅ@M%M-5]¦¿(ÿí”ptx±prX8¸Ùìl\|Þç>ÿ[çïø/û?­j¦6M÷¯Šò`KGÀ-þ`ñ||ÿeâú—4èÿÚÀÿ¶Pq|4@ÿþ Ù¸ÙÌŸ±ÿÞ‚?Sþÿ‰ÿ*ÿ¯úÿ¿ɸØÛÿé§ÿOÀÿßÔÁÆÞ㯈gA»Àž—CÙñyEÀÿ7TôŸVYظ8ü_¯<ÌôyIÄÁVÏBgaçbeãúÝ*cã²P³™[ÿGLÿ½çö6`š#Ôæ‡ç9‹íÿøžwÏÜîùq>ßÙ\¦ÐçE„ýy½`ÐóªýïÒ`sG‹?v’ƒ›`êìlêþ,‰gÄ ðb^^ ûŸšYÁްçÀ3g€¥£3úÍà Jþaúâ¥þF¼ì ì?ˆ”ûq€ ÿ ç<•¿ç³tÿAÏ>½¿?¨ÿzînú7z^# ©=Äú ÿs®Ù?þç Ì@°¹ù@ó¿÷èù ùWA¶ç Ëàó\V¦ÿàyö[ýñ¾?‹àŸ$nÐæ_´ý|ÙîoÈñ\ÀÁå_ žéÿ†œÏ @Vÿ¦øœùgäg~çÝp´ø§âswÈ¿Úÿ1´Ó¿àó¹ÿkVöçhè?¹Ï³Am¬þMðùH¡ö¦Pëâóˆîÿ‚Ïyþ ÿGWæ.ÎÎÏÂûóAxÝñŸ?ä2GŸŸs4 ¶­ n»­'vcÙB:I½Õã`Ë7B…õKO¯Çkf|^P,‘™ïc—1²íT‘pºÍ\ù~áµUK^çÁuÍB.³kEn;÷t ?“àuCB9÷ª .G7Y‚L Ð¹N4» MÔª_“æ•7]Mï7Z¼"^…6•Ž®ª¢ÏJø$ü:‡°f³¯ZÛÜ—tY1A›Q†á)*锊B¿ÐãÝ*±×‡¾.áô‘vG(¸nŸR‡Âp¤¿’Hq¡Tê,åbýÎ*t=HÇõ2“}-v`Ñ_ºÊ|[£rn½u~ðž‚>±‹×Ú$Ñ2ŠýÐó)d O"Õ9;o'Âb13ŒüEã H T§7ÍF®g¥|ƒÔN!,DÑca¦wrí·‹bмÁø@0=³r¼ðcÙÖ¡O=M{´«e(B ]U2Ζ4þg†}Ë ÜjûŒ¥kú]¾Të6-‘/KüÁ-þz8œœ˜®6©ÚXÀúŸƒ(﮽<¹s/::$hœ*#ÁѸQžkµKÞéù9w'ìÀouæiÕQ’žnë×Þ•îëï• |Ê=Û¸Ö¾ã|ŒrgïwFG°¶„S–/nö}¸"+Cˆµ€+RÉ.½» ÀplƒãDw- ˆº;ð|8@H¨ Cê<‘JÔÞêLuZñ æöc ˆÌ3?‰´¤¨ú+p9ˆ³-'r%åsuŠº˜×ÿ. «í¨®šÝV¿"Ȫ ¹“ݬ£ù³B‰©·I‡ut¡™C·Û» sZ6ÛÄÓ=8^[+ôשքš!¹´H~>¸G–©}Ë9#€éýœ1z?±=—§ÎÞÅ.Xãb­“Ô8$VYˈàé—¤kÃÚÈ?Âðq0í“D¨æÇU(çxLŒ]6³Q”Y|ú©çp3ª)Æp—±òæþk$Ü¥û±;ö¦ÉœiøW‡ºõ5CÇÏR÷ŸKÃ_t¸‹ Y~—«½3 ¯%}Ým›®ñ5ÂÈt±µ…¿HOÅ^¶çÛòÔ[ЇÔ\f}ʣйY °h hð´àÊÍÓ*x5Ï-À¼yçŠGe®ø4'Èä9þE/ª×Óð6_}zÕ­_ÄÔiÀŒg›=Zþ®yL›6D41{'üaß²¹AèÔVñ÷Çij»&ûëãKê÷Øiü›,}AÙÛoíL•†ýˆ–~¥j«±{M¼&Âg‡œÍ”Yð2Óji³DÝ8Ê.÷ Wš: ýÐÕ…>¤—Á¿9ôeíîæ¸~UD4àõÂVVö¯ŽÇnéÓëèadŸ@Í'èÀs´ð–]R’n|û£&,Ÿàì0ØÎ‚^nP %¯ÿ¹,xÍòΧ wg2‘¡*”QScZ/Éã-®Ðgh‡m’ªQÛzP 6M×Ë팖5/‘™h`vYe±¤ƒãê6ÛM™Odñ­ÅO/k|.‘Ü#7©/§b õK ¬¾û¦6ï&ÖÄ:ëEQ!/m8Ij$ú›ÅIA÷÷dƒ—W/_LR–+šïí££_Šüþö[ËqR8Ÿ‘äuÓ·á;|ÿy*Èkdê4í1Ó/þ5þÜêúœÄ_…ÞÉNz±ß>™ëÈV½à¡7vV¦¼ ‡…Xøû-—¨„r¼7·1]¿æºx>!uNkuõX¬´6bì–Sœ¯ö6¼üñ.Üíu=‘òA'3c}_„+·kIÿ—·UY”<¦mu8X w{é>±/xŠ9|ƒØŽuªðÇZ£PG€…<]¾ÃálçvñíEÜâWôö…6äÞEW º»â¶¿öñß’a¡þDùÉ ‚¾ÞÓNJ]à &X;ˆµg›ßÔ—a‡±¥BxÍU>Ìõ+írµvéÉVœñ“‰ÕT˜zIu ý—Ÿ‚ÃUê˜ÚäÁ’³ÝQ1ÁÛ^I8~ЭŒ}$zîï_±¿¾ˆŽD;ÃE¥¶µ_V„ àLYª¢ê®L le¹üb[¾‰‹¶ÆWÐVr_½ü6Uô«~öZ@5˪Ò;ý³C.½Lƒ6—[|é»ÿ ½þ.¥ØŽ†ÛœÁ8픪ëO›å0û;-9’¯à©GO} í§ßÐqĥώ!œäcÞïÉ•ïÓ¶vˆ=›–U*h“ˆegµÙÅêCYü‚ƒ“òðûã2ž‰Ô_:üµ^Ø·äqwZË&Eó@¯qó©”“Ö2ÒÜ-š%Ù%Tþ~Wíáè>Ñ`[qœâžW£ÙžúÂУžüV´%Sg7P¡ì2ùWb;Ól|Ï¥ËÔjÜ”ï–òŒË–„ÂʸøœÓ 4mgÅØ N% ªôH†,úQ„d™ ½èr $Îê×±õ¤êÜ×y~ZfJ>@‘1n;ÜC‚au·\ÕG^|îߨˆ’¾3çjã+©‰ÆÕ½U‘¬ØÑT¾žµ9™Å\I¿ù°ýrûŒ“ñ»-•no†Ô>ßn$õù´÷y&E£LÄêÐHDÓ#ÑÞ‚R‚ ±º…z²‚ÜEë",u›bÄ¿ÕÂã]”nF(ÐUµbYHžëŽzU%·Ù!À2•C&£D5ôÌèÁNM“KÛê ye°‡_°iU'é(=Lq{è*z{úO]l¦œz/4ÀPòm%,öBt„+<ç9º´æ|Ûv j:êg9M\³!`ç í—Ê:º%Ÿ®Y¾~ÇÛMKÝ«*¯áð̘=‹ .€ CÒä±×Û÷-›´š¥ïDÀeµÀÉàO’3dè§]̃°¥±4a˜ÚæÜ‡£’ëb‘ŽýÜØƒîJR£â© ~ý*_H'4PJ‘GŸ-Üw8¤è“GÀÙ5 sŸm–¢KÆ'‹£ ˜½ómÑAw¬Î+¨U/È.¤ ŠY^”=4^aíx¶'oÇ8W ½Ú_›¢.(ÁPBFÄþh’À¿Ì­|§õ—%Μcwáa{5 @¿LòNoI ¯ÆçÊZ-¤ß;•¨y`Á±kkmÎH¶+X¿¼oU$«pˆ\[1ΧÛùÞ¥ß2Ý…‹ÊL­Bs˜‘2xQÝ ñ>­8 Ç@Ö[Jàs÷œ¿úùÑ¢CEr+Í—y2¾¨²Úvò¦‰PRö –‚ÊDVÕǾUoA€"Ê1v—øêÍÌ ‰ÉV‡­á-œ~mŒÿÓ£öÆ;bà ;ë qBCûÛjQÔ¶åþ]{n½°&›¢›Š|…’™ÌÆß3€ví‚þáSèî»– ÛŸ\tØœä>ÊÉÐ/²4 ºÔú6 uÍËÔ·ù2íE™PN%qÇþøƒw«WŠyU˜ý-ÛǼô…ø ~’¨©LÇ£$M$óúMjí¶iá«:jé’x¹h8†Õ·+ùœHe°Um›OöÔl4îv’iþü{?ÇXZ}ì|•&Å~•õ`Ë ÷•ZÿØg°«üÔlƒÆg6w+5z{ë.ûÄŠúê€@õ&4]?òضrSOk©m“™Úô$ˆHc±êj™X——ÿÃÐÁß܎ݱšiÇ5ldgÑ¿[z?Ìì$’Y²Â颗6ôAïõ|Þ§™TDçvÃņžÀoO÷ G×øõg‹·ÑÃñ™ŠÊÏ–³’co«‹çšu‘®!¡3vȹAc_ųɱéçß+o~Çy…†w½kP>9«šTm¿<>á!LrYdäÉ-@èIý8l~´Â6l§‰i?E°.t†b„´0ARMx´‹lk‘•¶ž¡Ý}È{½VAl’”±)ÆI‘êh(¦”`ª•ò^†qøÊ³³’Žˆ±ûF[0”Ez’h;$Á±UËlc¹“{«²±ów;Gb‡Hé¡¢»goÁÚ7cX!iù§½Ø ïIÝï4ØòF„w¤ãÄ*[YO8ŒÖœk ²èIåDÊ@» j#˵3‚•7?¿çû8è~Þc9«W^ó„š@Í|b3£æz¡MbxÆ Ð6 BJæ¦Ì‡ÎàWªñÒ=¥)öÇ‘+Ö†²&fðצd|ùéÔô+ç_´9_W:¥×Í\l^H"Q–>¹vF6]Ù>âÀE‹¦fÝ- ‹“N7îp³A:Þ ÊqT„´×ˆÚwÖÕ˜ãán=©Ü\R€Pó÷Y`쉀ƒqfB¡I Kv÷Àm¯Uä½ÉDÇOcÙ¯ƒcF^lðÉÒà„CÆÚ¾ 4*Ÿ L'Ýz¨Í5ýˆ¹)Jâ3[Ø’"6ÄB(’|·¤Ð¦©ø_úåœ×=]@I³Œö«„­$Osãê–Eí|÷DŒ6~ŸÐæìûü¿¾\Be8ö£÷b—G²˜WÖêcsê¯oį~IóS_¡œ Pbl䉻ºûjíüêŠ"T&¸;Œå?¥ÛÏZdá{#ûÈ&º>†—¿"ƾÕPínS¡Sâô2n¤©²4±{òÓ*_ÞÍãýêœáç%(‡“Ãñ£h&ëņ»kA¯«+­f®@ìЮ¬ž˜B•Ü“ì5仃µ>‹5÷nykiáÁ Âïãß;´â»|0[Žåï>q,VPa„!¦=î÷ U¥ ÏÆ›»áì€;Øx§Sæ„Tψ`’í (¾Ç(OÐæìwŒe„@_’ü”.¸¶·+4«3]ŒjÄE3ãÃ9<ÆC+ñƒç|ÈZw÷~(êhQ•ò­Ge&A¤:܆22'ñ¥Íq1²zËz…å¯ö MN¿%ê1h¸Ÿ¬ÄïžèsGãžd]°.¢Bm‘’#ÜÏšgûŠ`^ïÛÝŒ¯Pðr3´é$ @À ૵‡ârÝ£Œ Ð»§¬‰ß¾½Þ祫h38¯/µ€Î_È+OÄûÌöÛóêî·ìËhì=/ÙÒM}¡?¤Ô$U¸ –ÏwD¥©Î4ÀS7I”ûëvTËY—ñbšÙwÞ  O—r†ˆÄÈx>̉S®Ú¢RB þÃÉ'ïó?=ä'µžÆ—m¬ìÉN ât' Á5¦kQïÊ+_¯{DÂ¥óás•I½«;©²„Mxˆâ`˜¯Çøì†Èlrw‘…Ì~%}Îj†GßÌ"øÀD&(Œù QvÑÏÏ“›WÓBZCnwµ5*¶‰Zÿ%5ÒTÙÿCOò[<ª¡÷}ê¥YåYÆK˜Rßd5[ÊÐïñéýU2†U§‰ml™$Z²jBž°{MAK?Räæ/Æ;ýÂO ØL)•SªüÛ¡â>#9†ëF¯˜…Ý£ºKµ‘ZcºVsxTQÃl%6ùDCDƒnK!µFÃÅ‘|¼ôJœïDqÐýbLoiú”ìíÆ€#o²öª¼×ÆÔÔÛtÚΪ¡¡äü*.F»ã!Ö~„¿1DFAèJv^ÇÀ&‰0Ü1’.®˜FðyNäÆoÕ…. Ø]¡ªþÍAZðµ‹v³Ü)zлd¹ÕAvºÞm')¡A²uw áK–ϮˎãùT½k>ö4O›¹¬ga°A8sЙ[¥/SJOÞÔµŠ,†tV¿ê¤e—Ñò‘~ÖÆ™³Z¨ICB«Üä÷N2?Íì×fÓ—h&4q·7Šyè7í’ò¸ÏhyÒ<[¤öºÎaBÈ\·ÊCÆDïµ>¤ùÒ¥ºV’Þ‹ª{ Û®…Ldæ¯'úuc¤z³T™+a#_Öi!âd{ú~ÅÁAøüD¬tGÊ;SP.ˤß5œ%U½ѹ/Ü„ÊH; Å[ÊçëK•:µ6ÐiŸÔÃGþ¦¼¦¿½ÉZá¾ñKw6I.½mô“Ù6#¾°7,Š˜Ù|* ·ŸÍ¾ñ¤ªn*¤ÓâW6È>•x“CÎH#CtžÂRÔ»Xû ÇÏÓ‘;èkÁRi­EÙ li¿„û!Ú^¼ÀÈ…ù·~Jͬ¢luË,³› š&’/áy@Zéùø…Bf¬¦qeª ¦¥«jJ2uÊŪêNíïþçìã­^avÙ°Ÿ¢,žñ1[-EÀœã¥çÝ Ó‘aAdÝ6¦sÄÅÚ¶ÎßsZˆn?‹¡NaZeÖ<Î ûçJ ´ºï"úÚÒâ›V%ùõJ"QáaŠ(Ÿ0Åî9g 5Uøròðé¬÷¾¬¢j‹®0lÍh˜ÑLÞ/8F5ú§îŠDð`nö ú2¤¢©Æ£—ê¹q)‡×½íÒŠèA„Ô@‚…ÒYŒ¦µ²Á«îL6å+G*kȤÖMßù6<‹F6½HãØÚTÑáWîÖm»'-Þò¬Ü.Ý&êjy7s &gÅ)êêƒ {ô¿Qn¸¸ ’j ƒV‚ñ”W+?¢rË2šˆŽjÈ(a®õú?ÎŽXm~܇tY.¬"€_<Âup°¿²(ËoŽ;Rì;À5PB÷hrB«“èj î£#ü0ijG¡{°†>{'ý¦a@¾ù„ç–ù^^«›:,úqÌãÓ|Øq¼\2ĦyçIÇÜ:ó==íâjŽLï²@s¶jþ5Õ×T )"¸H¸JV¾BLÎð·Â>˜4ô%Ô`zCíÚë˜,U¶`ºŠúèðk?{×ôõ¢78+A„=9§Š¬8Åø—·µk¤w å5ÝyèvGs8+¼l®ô1ª¦Â¸îpÒH ‘ ¦8¢þƤsȯMŠoŽGMø‡ù”YAz2S½,·ç ÙˆÔFï°Ö«½mbÅâˆÜOÂ8ªVû£’`S>OÆ2ŽqÐ#OþÊû™@²Ï s:MCy€w ó÷i§©7`%DL¿ÛÈ ¹-O>b¾ˆÎßasouꇠ))¤¹¬ÃÝ»Ž»o £o1zŒÀ’ž¿¯ƒ £”‘ÅÆ™„ÈYé—ÞO\ºá¸[ˆ¥§~²NòX4˜Ï‹/¢K»ïx …ë±óUð.æùÑTh0ŠÀ ¦_çµí¬š¢4"ðbÜIûî±fH\Öìíl1&BHÇ·òÒ5” :42«Æ³25Âë°r›ÚŠK|lϵ¯Ùy9x4Ñnêþ]]ža5¸=6MˆßôùËÛ5+¾j;×S¾ÎÊïœÙ=ä·(–GU,S3]vN¿¯:9Y¯âR/+‘“+áòüÂcôZu‰JŽp¢~&ç7¢ø“íùÂŒj^!žÞù1hƒP™^9Àþ¤‚Ð2å¾ÚýLTºï%:Eæ©1 Wë!S4}¯Öj§·-ûdcòº¨Nc0–±ß/–r{çY¹Xß¡ÞèïC8Q.ñ‘bw#°™a²žñ2Òd}`ñ!µóõ(M¯!pt’ýË×—W¥Ÿ9¬ÚmpzYF±'µ—–¸ÜãU´‡Xâ¢Eº_åRܨdGo²8´ë~Ë?ÉÍìÞó9ç6Twy¦È• – Cl~±¤%·¼+×0—wf¦ë1lÚ7…P ÜÏËepM÷[^“4¬ö»q‡xÛŒ(ðÂÅ ¼ö2,f™Ú¬† _ÖÖäýœè£.¾oí‰ÄÑ Ížzy ß½âcð ûL J}÷P墾jŢަ)Mùhƒ¸$’”€¶k¡$QV2ùH¹@½dNxÌYOðê¾þtÕÙÉÕ=™ª§o¾¾öÛ±o@^ò »Cr¸†®J7yÙ^õX×GÆLö~ µQnðœnÀ†’6Oö´ƒ“~† ZŸ_µX–Že¼9ã·1ïaFÄ»$ùHlÀ,Þ÷ &X ‘9;™¦2§\ÍÌþõ*ºÛþôC:áÃÕ¡Ód-»¤Ü ¾ÓE2‘Õ2´¥è#||“ßT±2¼dŸÞ&|3zg¢÷¨ÿJBæÜrÍCMÍ‚ú‹¥?!Âc†q@çK§&Çš’–sV¢oqpuáï ‚3ˆÔoÜ$Õý鉎ŸHŠ2³2ÆÎWÖöçk×v+û#“O2„á8b©ÝŒl»—1ÍùM–ÉÒ·'ìJÒ €[bßF»z~º!Œ¨ð€OÅ1«nxÀùàføQ+a£Ÿ«—V˸w¼sv1„„­æûØSo  \UcÐÈfàªØ.qs$k¼ªmØ/Šù‚\«-¬8qM¯[ãËwÔ¢- Ë(÷Ÿrù·ì.™R/^úbGpÜnÄÏ,U×>ºÜÕ- Ìb ¡ÃKEò(‹,Õíîuqe ±Y ¨sëÊ9(ßÃà‹tbfÃа3ZF¸CS)zÉ>˜¾žlSkàf‘s2° ‘ŸêBî FÌŒ¡HG‹S5¸fu—-ŽàQÿJm¥[­¥(Aš‚§àžä¡¤l (/çàb)/÷œâ[n%4u+ä°Í¶ÍC´e‡ŸˆcK›úü•¬áÒÍ~ ¨au™hWcCq逞P!±ÙÍ*í•¶æSÄѸßa뼊AhêþDŒ>ÐuI7¯Ï¯‚ßQd#²ÐÜÏ6ö£å¾SM²©W ³†XÔa‘‡ŒŒ °-%Ì'1zŠÓ¾±­À—ôdV,˜—:À8‚£KUgmy¦ý…Kk¢’ÐPqJ'£fɵ™à'm ŸpÅø|2;X v½®ê¾.?­K ™¹xv¬åûÆÚšrÜÀ>RíœÿO]9ò ²9Û÷'A‰1/¿Ø£;PËÃ9žòÎmŽ_¢vŒ.ØV´0|T‘Nµue·»–ë­'R¼ç½s?ÙåäÏü- 5 „äÍŸô'I þ:+‘Ç•pÇÏ%°2&«ÅŸçAŒuM<òü¨"­s+Æq}/qH}ã»8ŽÞ]I·¤q ”»wò}íb+¤¼Ö8«ûˆÞXØçC $ù5²WöHV¨wV÷sgB›ÈDçW÷‹¿!E9¨›¸8zxÖ¾©FY Ê]!M½*8¯ÆÐ=osDÔ𵌉¾Š•µæïîx–R$ ‡’¹³¨NýÊ«« Q<ÖmªîÕT£ @ì•KOš}ßkûÍ›åL¶Ò ‹Á¼ÐVWèu_þ®r¬ã ñe$ƒšÉv~)ZM·H˜½)…¥¿ ÍڑĦ%ÎÙ‹dKÉ•¼JøÅØWØzF~ûµü]~kHÁ€ß¥aÓÔh.s¬ ;“Ôsl.¥•Ùòð¶ò£=VB(ÿÜè²Ø¶V®à‰rož›¦l$UAX¥ÛÊŽ¶§á³}JS($Ç"™ü a?«ô~M¦GȪ6û@Šjí„ùWRÇc3ŠrIÉm)û‰‰òÀ™ß5]CR ÂØŽ #Y‡çBPù1¯2ïù6ñ:ó¶îÕFHu:T¸#bT5“çÚ°¥B*8ëJ.«â|¨Ã—”r—ˆ¡^ÃJцÀ½’$ôzæ*›žïÐ0¯žR|ùÊ-&~¬ù#ÞÕðÇžý†5jÖ㎂6~FQ¹RúÑÃÑ¥e¡†íõòí ;l¤B¿$Át ¨8=gúãvN*r“ä6?{føµJó®¥úÚ|#Éä.«Q¯2ðýˆP=½Ë ß­é7åá×)ç°Ñ/€¥4¸§õáÛÇMoIÇû„$š‘>9_Í«zf®cò:3ý$š¨Ë½D'Ë÷dÞ­¯ÉoøÒ‘ú&“F—¡­HT*#Y¡nï­ø'=_‡Ô÷Îm.BRv.Õ…Q?]2õb‘^ðó¡°ÿ(¡1³×«Z$¡èÎD÷2Ôo¸RÚ­P§Ûš;H¨üµ[ìRBˆ=þÚ2w¸Âç­ÜÔÝ]÷MEoêJùÂIôIÒtØ»¶~ŠÄŸµ{Øë6ËžXt#+\ "®gù‘š¥m˼†$Ì{ Eùˆ G.VôÌ•v±»ñ[éX@K÷,Um@BÚ¨BÖ€ÞV«!¶GøSyŸ¥Ú®þD êÒžWêP=_2†k˜‚êO•U2ýõm ¡–ñP·üx¾åHV?ˆ÷’B‡½‹bêáQ§ÖkoÉ]piUww3Ä•eh}üÌž1ÃhÏW_ix®Œ)À5Çr)â׎dmæÕÖl™ýœôjU,)ÀrîðqEÉà‘ ®býÄîIúžîNù×mãR„$©j¯» Å ÓÊ‚)G³9æÁBa¢l–ê`×&ÿE%Ê,g xêAw6/ÊìÚ©9øáصke?ÐfÔþ§ºc(±ë¦t¾X_> Ïõ,˜nj‚õƒl‹¶‹óbo¾¨rn›¡XfÒz„¡½5g•–¹Ó&á–z'((ѳë¶Ùq¾»›E+n|6óQ4ƒr–Xi¬×0ô®/®tfêP›£õÑ7¿Ï؉@ú€ã¨'Ÿþ=€{úÝú÷»ç×áeÑòõ½Y±ìuòî€nÓwë”ÊÄ‚.!n.¬€,°K¹ Eù$3’Bd†0W0Øx³(d¸pâ÷ãî÷ãÏ+?¬Y‚vÌŽhÐLù"ôË?c=áCZö¼OªØÒ0×,Ë˲ §5•«gpÛ Åö¸'”Ž.·CvÖGJXܧ“™}„Ò⌠óï%°^ó%ÄpôÕµDá¾wœ@ç¸ÈÕ6¨Ê}•Áú}5E&KN•%Uìu$ °C‚»¶ÆVv¯üT:мá3ø¨»{÷Kµ½Ü>]ØYøCø1™äOs9¶æ[#>êIý+Ö£<}°„ò–¦ð7•í íG ¯-ûñBê»Ù—‘MkÕ7±ê!êjÖÉíŠÖ뵆zÁ~<ŒÔRPÄp ¯îŒG­öŸâsž,cÕÛ S2¥ƒÅÉÝ_nɳ,N~û=¹ÄÀÒ¾U6º"”˜ã.~©ÓÓQ®Ì4®åüÒ°Íòv{›|4æ›oÜœeŸp¬sYö3ôic¯’~­þDpt»,£.q"b§ƒ÷\Kÿ’ªAÉLŒ=h²ýcQ4ZV«£"<ÜßB5kÂLßLõJšj&ÂÂ(Mìâ§´~Ó¦tÙ;ÆA“Ë~-­¡ØüƬ¢x¯( ^x³Žö!Ig©ˆèU(ÚæÑÞâ, S[QD¤íwñ%OŽ£Iuš¿ù¸I¨n?Æð€˜_I÷„»í`6¼ñåíöB-Œ—yY‘·Šy•Ú}p¾ñæ-¬ŠHE©òu…wiÁ7æ^žâWVúñ¨µ÷n*óU»ù¢tí˪.¾‹Ù¯â)à÷Ý#"43ké>,i"¾‚ÓÖ*} Èd,C®¡)À‰ïfÓÐ?üXbzú±å“ê|s¡×6=_„<³×"Pm¦Ì3Ðu¡ƒ pÖ²Y«4_¥Ø>!_:L’åœõ–Tûmõ‹Tì&ÏŸswBfæHª/ã¤òÚrìiÉ1Ë÷/ãßß ù'ýhƒa\=ZYGj5YÃwµRSn9íæl´§¿â5Z¬oýæÚÚŒÆñpéýö|Q¿«u`caËÆ t Qkœjœ”!ÃÃbPYb=c<ä£K»fL¹MñðhgyIƒ$? •ž¸’ˆÁ„Îóé‰5”®êî‹5ùÚ•?|m'wOáÈ^ ÇèbÉÙH´ð$ÔgœßšgQD¯Uªž×ˆ{ØÙ#ë ‘›„IéO,UªˆS…"ó¥³èJj97x*:Ìg´åv7ª["Uj ŠoG2zuœ™ÄªïQ«‡Ø³t˜ÏŽ˜k’†’)¼fÊ‚øžì©­3éª`S¥O '…﹃|áY7s[F}n¡÷>(ˆ˜|ŠØëk±g탑EmAƒkq\CéÆ3LÂWm<½çGo𗦢&¨ ðœø¦ïxô µ ^h.©S^Î4Du·ÿ,…ìûj`‚œg O§½ÿê-’rOäÒù ÿÄ 8—KlœOfØ78?ek˜S6|«ä}¬¹>zŸ>¨ú¸?-¤Å0lé ¾¨¤£íÖàDË‚¹D³P^±0ÒeŒÝl€ˆÜÞ®wÊ(æfÈŒŽEcÏé>õzKÖNoáûz}Êv¿eHæ…ÛGõzÞE+Õááõ%)RQ“qÉ¥ûü Dz NME90àÔôoùZŸr6 á·æ`Œ_æã–€g¼Ýj§DÝ'´ó89¯”-W„3!Wù²ŠFÍ3ÔÁþŽ`¯«ÎJ²<Á;Ò0ìÜŸx<¥Ëªí–E°ÎÍËÛΞ`9=ŸžRTþw’p“<§ÈBd4J‰¢Æ,ÔvXsÜF©wóy›[:~„b¼)xôE™ÿ†878ÒI#Ø¿LËý±$X§½ Ýèï³-6qì.]Ï/¸$ºÙóŽ'5]A¸¶®ñ¿KöZ MÔ£o3^â[V¡aˆ«?Zû»;™YÈ;”¸‘+ÆFQÌmÑðV@è=lU Ãý Pb¨™(ÃWÙàê·IéÑݯÍ[rV!¢°7Â}4º'B.TðQ:Aõ¾wvŠê)ir:'NPM-øn–iƒMõ‡H=ihµÕnÛ‰95/·n¬{Ÿ¥'& Åz}I"i9š´q9{Éjãr¡NÚÙ«ä.ÆÖ¸W²ã9â0òpÞÒ¤V3+™C£Å¡=mwׂ”R$™ÂÍË)ï+É|1Ó7ì™ztvÍ¡áyòXoü–ßDY]¦ˆä¼(4: ‘Ž&H$&J}ÀÈQ£ßä¦ÕxZ¥ êñxY­JO/.°M<ãnMÕ©KÃò4Â3­öË­{Ssû?䈈€‡nO@;T݉s_‹µupB½fHò7 e@ZÅÁÛô®8?„ÎF÷Óཕ3BÌÆ&u{Âà&s6J]Áò¾»¬þDÇxý¨×Ó/H‹Ï¾'0Ðòã|£ôonÙݶ›Ï&;爊‰Õ_4xÙÅ6~™ýCÑuÿJ°:FÅ~OœäÛ™no˜ ¸ZŸ›Õî7Ñ^¶Ö$†»óÓJw#·_¤Õ¦3ŠBž¬ƒˆQMíëTx?¨Þ2½óå5|—8Ò1–PkŽÒ$‡°þf§h¼1˜ÀQV“þú`÷wCÒ!å׈#=…7ð|,¤-1СÃÌʢjÒ ÕœWˆÕ3¾~o¯½z*©ÌëÄYøÓäÞÒn¿5*{”[gž² aOÄKðLSÿŽÇÚ‹hšf糞:~ÇÚVZo¹þƒ‹%–7#o:Ö?8†éÞzzk8,:Úâ’Kq¦Ëɳc1ͽ7EÊ€}×*|í÷„ ‘vë*zÞLRl øªCò‚¥Ð넆ZU/B¥ˆãç0E_ê2÷ 9r}‡tXŽRç„$…òÒïåÚÛ/Ihíæå‰’@“Yö/¬&‡ï<pïåcí ;ð5™åäŒ2¾:O žid×CÛTª"œ[|&ߪP‹ùІ«üBh~ã7nª`Bj ÜCF¿€ÆT™ÿÎ;Wx“»±)ìuv±åäCvÿ.Å` `O}ÇZ"Ùì¡ç€#uɰo³¥¾Úöy@_E“ôª˜º–ÇŽÉ¡Q'Ÿ@×™àvÖ×$ªìDó𠣟nÒè¬ ¿¢èʆ}]›¤i¤Ï‡g»ÝcÆqTY!"a²™àZšOŒc(Úùâmõo߃ëa¬8`Ûœ‹XHÀ)ƒ¼èÿÐ@= endstream endobj 316 0 obj << /Length1 1437 /Length2 6462 /Length3 0 /Length 7431 /Filter /FlateDecode >> stream xÚtT”íÖ6¥´(Ý % 5CJˆä )  ÃÌCÌÀ0tI)HwwI+%HI#Ò% J(%% Rߨï{ÎyÏÿ¯õ}kÖzæÞ½¯{_ûæf×ÑT€¡¬à`#J”´´Ô$@ ¨(BÂÍm€À8ÀÿR“pÁÑ.Rú?”Ðp«S†`°~Z($@ÝÕ€$¤A’Ò@ @”úÛ…–(CÜ0€–@…„»p+¡œ<Ñ[ ¶ÌßG/”’’’øPp„£P ÁØÂ±¡€> Š€c<ÿ‘‚WÖƒq’vww‚8º¡Ð6r|wÆ w£Ýà0À/Àmˆ#ü2!n€-Âå^eq‡ á¬Â…#]°®H Àè«i:Á‘œ5ÿ8þºHô¯tEÿJ„@þ†@¡(G'Ò´X#à€‡`M!ŒFAÂ~9B\PØxˆá±Â:üî+è X€Ás¢N!„Ã/ˆÂ¿Ò`oY SB9:‘’_ý)#Ðp(öÚ=…ÿLÖ‰rGzÿ%X#0ë_ `®N†H„³+\Mù/¬Šäß:8 ¼+)z€;àP[á_é <à¿¿ÕX¾ÞN('€5Üa Çþ‘x»@Üà ÚîëýŸ†J$ †€bVp’äßÙ±j¸õ;|4Â`ÄrþúýëôK/ éàùo÷ßóÖ×Ñ5U4âÿƒø_6EE”ÀPD‰ˆ’؃ï?³ü ÿߨku ˆ¿zþ;¡Òÿ`À^Þß8Üþ¢ï_+Ãøg m–Ëpï¿©oB±Ðÿy~‡üÿxÿ+ËÿFýÿnìêàðÛÌûÛþÿ˜!ŽÏ¿°TvÅ`×B …]ä»Ãÿ¬²†puüo«‚]¤ –â‚ 1! Ø=ÂŒð€Ãt¨í"ý= l ®ƒrAüzq°Q@àÙ°[µÇ¾*.؉ý1A\°+ˆù=Ü_2»dÿìC EÁ~m£ˆ¸‚FC}3®å˜‰a½¤€Ó*ŹCÅ+ùÔž,ï™ÛúäG]76ýFP/ô’÷í¤ùå³ú‚ÍgÃo “(¯f ÂH2V¶X*WŸ~‹Üá¦YÆ ‚öí?6Ïg;ò³±Ý¨¢‘ð>ü$0 šÇ¬›X²~& ‹¶­(|û9Ÿ¬‚¢’t¥‘Mš§¯?ám ˆpyÜéÍŒÑäû (Ø]þx7öE‹Æ4·y/_:RÈ”+ä ß;^Šd¯P>þ· øÑDjCµdœi׌uåEÞ'2©âÊ3ÎâΊîY9ì¹w¨oô¾¹È̾ i©ôŸ¿ÕÙf—“ôö,D0Î/2€½Õô6íRPú§ÊïÞãzQäòë)!…ç½Qk]Ýo‘mÑ÷·Á-?/ÃØ¤×`æ¾%C}Ub¯·¥’(s2³M†ßŠ!$ެŽ|>9ÀX©ÎÜž)vôôPkˆa{lÇEùÞlR\…>üˆÇâ^¶Ñ†(S™Ú÷|\‚T"¾ž2Rt]›N]×®E¦Kº‡ç¶óy1˜ÝàQvp•~¸‰{O©É/°ÍŠYCFžœïKñðà .î” {P¨N°LÀrh±ºoæØEB;¡nEê&:[ŒKM“r.ù]ÄSÖùCírȽÚ#ä“#픋V×|8×Ü„nB¬nÇ]颋·6ê4™€öÜ[øY˜íQÃ¥W4o„ÖIl¯B=tÜ5s½Ö"žµ_vq¥ =ü~¾ˆ'ÿ$Ppšªj“ÀYĨúä€fjç<¸ˆ«cjr_|'‚€ã{ØE³~ðE›Gܪ;Z7ýˆ 8±ÀÔ{…»žÅÿ~tŠÖåOr¸K¶Šó¸š_ÂF`XøÁ‡œ4ö›Ö-€%µºóœ¡˜8óSÐ.5÷ƒ8RWTvØÙÜò“.lŒ•nè×ëkT'0ƒÖâ «`Ê,YM³DgªÖ&éõÊ›5¦ŸÈà‘¾L²xï#ßÌôŒúE‚3÷ ëú+Œú©ã‚ÀÌZÜÄxJî/Sm­\éÛÖéQ_ûž´ì…ÜX07ªÙáåöÔdz©­&YðM®ÞxJ³“nÓ{h·’òìJu”Œoâk£ƒ8YWØÆºDn©µÎ]sÃá™nºrœ¦tûŽ:É _ÀH±³Ñæy¡u÷ƒ5¸áòVÔ\©jR)g\ØÝºè¹ðc¦«-!ƒØ¢euFö=ıÌ-Á5Åј½­”q–Ê=g_ ‰–Y{Œ{ÕúwH¦”Yþˆ_¸œvùÏŒ8‡ÍÁCVO‡ëׯìÌéÊ/jVÅìAÓ6zšðw&cð¾âï "~¦sgÒ†‡Ê•_cKÕ ¸`Üjdrõ¯…Ь¸RN^n0äÚkìM?×{„& ³6ͧR{ •’å!îÏ"&ÅÕQ¸õ‰ÔÃé\§[Œ…S©Æ¯÷´Llϸ«Uåó4ý„UEÞgøÃÞÚˆg1j»"³€½Tì ä–çÉÚ {»™7Ÿd<Ïî±+õ£ú,ö LÞÈ%"ßçn…B aPÞ¥ÌÖ‚WzBÏç®M¶Ÿ~Þ, ½ ËOÙ¹ý“Ê$ë‘Dò÷’óöºù(–ÛÝC³Çy}£šâÜL?mU‚íèÄz8› ïä_ðÀÞ7ôÛ0¥Õ„dUçm³Ùr-¼5Ouœ7sÖþ|CVÈ~•ùA¤LÎÏšÍ,oWÐl:½Mw3ÂÝ~Á)ÙEêM&Xÿ0¤ëíò±sŸ~gE;gL%ºè† Á-oÎ V뫆•O Å~&Êj‰ÜåÒ–,Ž h-áiµ»¡^ü¨wQ=Íá ý%ž?5÷GÕFêb„MÖ ¬Š´Œ7/ܾ`¯úQÇÀ×ua/ô3«y»^Ìuÿã"ª“ÆhKÉæ§>CôÃÕ[]ƳX½×¹’®ÔÛ«®d•qÊÝΛ‚²Lú{? ,ëìIœ¨m‡åóLwMEÓç†Q>XÐï¹M¿?ª`%0÷œ³‚ ¹8’ЕS .Õ¦¯+#M_jGÔW-|¹Óõ?Åv¶Ås@ ¦YoŸê[Ý·ÅBæbØxu£Á'™É&…ïÇ¥B©j‡CßJŒk8¾VMZuK[Ó•™ÜÒjï¡9P‘;ŸÑ¶Nëa§Á©¢N~¸PÁÇ‘ªµMüY§žœ4º/ÔwWJÀt1‹üEùl3 ¹BQt rLA„2†G-­µSªv>)P~<Ö×´°ÍØ–°LS¶ô2Ø;úá[f¿Düfc¶¥‹øvNÅÒ1ÊRCþ†~1EóÞ\<ÃÆ„NÁIsœ'ËS»zËr½dfSiÆbW¯ïe«ŸƒÎcYœèŒVØ<¡¯?÷f)¾ð:]­¦›edŸØ*|ÃöTø~ìPð\¬>ÂË5«ºkUs@uGàšl̘áË—ãDÓÜ)âúŽOwû}e;žÓ<$E?=žpÊ–Å×EÎÓÒjüºva ^]äL{1£<õèìÐ>¬’И`°fØQ%æÔÚ„û%–4=*']Wk§±yÔ_Nœ`Ÿ}ßÞý{"z*¼«‹p’ú¬¯Ò®ˆC‚nAƒŒ æ¾ÿzî^éñ¤€å’ÕXøÖ‹B¾lƒ¡ÍÊép™lÆÑ–Z…îÈâ•MR1»ç¡¬„†DöÞ…YuN3G*žF™v` ]=ùa|°¤ó‹­ðÑ[õ³öêZ6?ói’„g;%Çf”àôPÂÒ¨o+×˯`¤ÐX˜EG,ŒŸgø)då·’Ö)Åî²ÇâÖ;¾ÃÞœ'ãºé1¾±Îã§åm­n)^ ìsaiœ±YCƒ­t\§—9 k£TEéÆü×1`){—ìaí¢$GEËò(>ƒï>ðgRq3P¼¸ÐÛVmQ…ŒÆyiÞ±…†LÜydžNþ+%JédVª^²+ÂD|ô`˜ ÿx>ñ M%|/Z`m°ìy G½š¶J¬ó]ÞM.Æ_ýšë§’¬È`z‹LM¨ÈÏôǸÚÀf•⮵6™Ã÷MØ×£qݰTÚ2v¥Iºï­ÉŒ’O©“@ñ©Ð&Sã‚÷U˜ÚOM–´É—‹Éj€R’ä¡´Xu—æŽOq#jjÙXÌbn‚£’X¸„"T¿4ÄzvpBf…ËðjÃtÀD:1·(¦°áFýŽÑ¯^í k€£TÔz–÷„‚Ô¦TöúuËOl„‘MJò6ì%þûýnƒWê*Ô.ñÕᬋ`Õ,ŒIàÐ(ÿÝñ¼lŠgÏ6JßW‹½§#¬,¤ŠÉ(šËÊíR·íÝò:Á‹6ëcH½÷½¥4ŸzÓC¿dm‰YIÚ3iö•uƒî«#›~+Â÷l«ï¾ ¬´Ì꘱ì­Q÷ Âåvv±’i!G‹OžŸ:khÎ¥?wÖ¼ŠAäˆÒQÅ%ŠJ†é§pÍ“ =;£Ñš‘ªÛ±Ðäd! ý"~5VcYh7ÿ¦¶ÅKÑ׿‰±¨?ÝÆªgá±…LéB?â¥ðÒ}"yðOPÏ-ôð@>ñ ² ‰¯¨õHH÷÷Ú ×ZòÄMö]\õó+2ÞÒ™jwêœD©-—ý!¡Bs¼;U<„µ¡ÃŽÍWŽ…ñºŒ¦Oò•!öu6 ?üŠE#*a>K…ŽƒÈ÷©V*Óv-G~Š´«X&¥}ÇáÂ=i6n\ÕâvŒ^%R»ÇŒ,ú¸?¦O‡›õð]1Ù+ÁJZb'ðO粉¨¯‹ÍíÍOß<创@¯=Õ ÚL¿ H²6LÈ—¦5 ÷»ÞGÒ'äÖ™ÕH :p”¨ÍdxÕã)W¦Çâ‡ÆßvrC…þEm'€y®4©–X’¼‹m¤9¥5Ë/š‹|»ÐvÇd¸³0kÕ©Uä¸ÔŒ©q¼ÅÞïyâêëGw‡®W6ÿ˜Ó‚*£®Y‡³ú®çqÆyÜß{õÃ40R®B æ©@q2Ñî³N†1& o„)Í#¦ϳUbñ p»ƒwÎcW}?LY(5¢B_G"¦?~Ù¥qµÖËÛ@–B)è×·³Kk‚/y½‡h·glt¾;å eÁ~Èñõœ‡ÄŽf¸DÖœãdñnƃ/ê…F=JO«p¿ßŒ ªÍH}FÑ–W9Û;¼ Ó»˜$¬ LÉRHü‘A¿”Úéë¡ßs ¬ðRç '°j}îAP’?˜Ód£t\Ö¾¹Þ59»§ó$ÉSΟY Vè~ûü`g‡GŽ%Åÿµ«Ðš;íàäâëЩ;Ç”ž·½×>¾1¾%•¶Ï蹑x’£•:€#{÷èŠzÀõ‰ü,¼ð+½éHk²4ÞÁi½×«}&ÒI¢ÃˆQ?þær·Ì0ÇÇ­PÎ?šF63Q—swOhýöY¡ƒ ågÃ¥6É@ÆuÁgç ,ŠêõÇTeÞ­âä«áRÈÓšùZºfX6Îìí3SÄAž.H“ÒQš&§à\dCþ?©§ßƒ¼´³Ôj ×õÑÆn´ÚP®P:+\ÉÛa%ûx4Õ¢_KÇu!m…&Ÿ;ÖFƒr8êÓÓ=< }½„þȽdñ”˜¶9×¶è¸ÛÂÈì´sC†mÐQ±óŪe,´„ô¬‘ ú\>_r²;ß­¹­ZW†›rq6v­¹»·]³©pU:p)Õ>ÐrÇÈ–ù«~†Æötw¼hvàé)ò ¸e¹¹$æ´!×Ô²AûxùIT³îg…°ü—>%9»³é?zmÁ$ªÛæMí%}ŸèjìŠ%ºK—KÌÖº1–ÅVqOôˤrˆ|J??»íêHÛYËÃ/8vÒ#~-öÖž³ }^Ѳ–mCoŒ,ô+I™î¤^æ(§^Þ¹Z¦ÀÉ%ؤ—';,Cú~¤Câûn¼uTõ’ƒ§L}tçB„Úý¾0Z­0—H̬ô€’_R´X'QÍË)šo.‘!xæƒäµ+ÛÖ3²,ÌàþÆ#JžãªæGãc[(u Ë{%ÂblæêÛÚOpÓ“º®Yéá¿ÉU½ôM€“š§)0ƒF&­@9ˆä¬K n —9ů¼‹m¬Y])Žº"O‹ÌJv¾ÐÖÑϯ.F$ôî5²˜Ú5-à/†¥NY\$d{›íM÷—ŸFÎà˜ç2HËi™’¸}îH‰.H¬ÄS«~kþ@fˆË_-e†€r?Â,aºcf׋“Ur‡»k{æ;åÌ¿@ù7sà镈[®2Ø]Þür{Ä( ù ¡ôÄÚõ¨]ÒlLJ&>Ê¢-9yÖÆÏT”£ ·;l-fEj®áÍÒ׃U,êØùŸ?¼cPWȆg5–§b¤šÞÝg³?xÜÏãb)Hº®`ª©|­í1Õ¦˜™DUá–uZ·Þž¿ŽOÓ][>WËô³"2„IJA¤¢×âJ¦®Y­«ß‹wΓ܄;jN«+¸ (ûßζ?Œ¢0H2›»ÑGÅ©‰s»u¦/Þdàß9 ‚fƜ秈_Åòé£4Dï†z£:šn•I~ÈX¯šÊˆ|Ý&=ýhL®wPòXõqËÒI™ãÚù ë)_øâŠjÅÍEë o>lU—ó«2²ªêlO×§kõÜÎ¥›_Ø7¬7䡇ƒ^/=XÛ™>­½Ò\Šÿ¼1Øhl$¢&Ýd| #¤<ö ð»Ëë#[Äÿ2ynÐ-›XIT•œWRz#ÒÝ2Ê®Äx öªþF^Lȹ`fÐú6µßÅhi‘¯µ…ÙûB‘Ęi®OßF­^½cãµk`õƒVahxà2jõeêµ\h9mfƒKx±Vmñ&u¦W7T6Ç ÉåmÓ”âA‰EaÆT*`åµzý ú;zUfÖè‰ åTž'3Ái-‡ãjß„~јv€ðÛÌ€-­]¨µês¦\¶Ae\'n{xð3yë ¾7ZÄÊ Üú—£s-QÆ,1Wu#¯ò!D‚¾%4a$ãà‘rê^ê‰ÿJR¬¢ð[\|¾bŽìÂÁçEº¬FD2wͪ4»÷¦Ä†úÞpßœÉHtŽÆ©Y;ßN­ :Tá àhQmêÞ}îz¥¢|Ì}w ¢AALi˜"ŸúÛÌçdμ†ÌëûG!Ãu¨À\^ ±ÿ'8Ìæá¬kÃãø¼¬9Ô-R’7Úˆ,åü^vðN›¼|`ѳ#ÜÄ^DY÷@1Hrù™ËÀœ£”bi4ç(šdÜ1fž¬²pJ½+aw¢¥aºÁÀ©‘ýþžŠžâÀRQôÞM¼¼ÖS9°[ŽØÜâÐk÷.Y“„'Zè9š` ­8Ж¾Qè³pŸé£¡I•<û¶¯gäWå°ÕI9E›Ù‚ü¬u¥mm±f_Ð["[U‚þz‚¡ZgÊüB¯¦I¿!bèR+?^àlìXÒe¬¬å »Z~gú‡Í›È~º³’]¡¢K” XÁ•"õè)Û)L¿&ìˈu"gäw^ÜêUá霠í#úAÈ^ª9A–OózÖü¡M€ã»Èª^H!n29Õcñ-g-z…ÏÉúS2Qá œÊ²iÈ’¹±|ÌIA!‰@:¾/¡˜Áö³¹†œø/§L.tÊ{mÊf î^v‘9xq{û-ðjB‰_à ˆ4ŠQ»Þ8Ïú†0É n*›[¼—~w¸éñûùëʦÀh±c‰ïG'ïhöWÞsÝ+÷¥Z¯lu¯6HfYöYì:j ¿¸|›ùé|OV|Ó£™æ>Ùb™°þ“DtkïS+Oøâó:_¡¾TÝq]î>µk\¬K5øQ¾н2Xp¿›÷5Óî½b6£x|öÓr÷ói˜«†»Vã`ǧ/UL÷©m-ø Õʾ=Ò–ly÷Î-LŒñYk ÷ýû^.e„èm&ÏVáйFÿpÝ» Á´µ?׳¶€5¯è ’k²Æ)ò $9T‰‚¹YÙ‰üÀ7¬ÉÇ^y´Û>—ÕN¨©Z!Fç~Rgäš—o£MáTU=è ¿!ÐÕˆ½°}ääOîIð˅“aj§%ªC :ÆK{¦ VRßg©{¹½AÒT|ìmqîÔdÌSþ¹àí¯zÁ³é0é~ʨðaQŽrØpÉ-»À}^>ïž%Ú9b„×õ¶œÇ…Ñr.ìî´ÔÓj¥Ü|ó#nf½Eϸ›zùŒÕ˜ˆµài:·RØî-5}FrG¶8£Ëd~¢«ºÆôª¼§ò?8nrXÑ«¶>{óæÅm‚y´¦9¬_^["Õ ,®Gïvbg¿›ú nQÎÁKcËú qnï@?òqqµƸ|'JCóÜmL}dszZâLð]_›Ý[g>»'á€p™”¾V¼½ñ êGyÍ78-îLm)fã(}}k¯ì iž(‚ÖPüœpÏí5ãôûÊ=R9 !lA¥»kus  ïýð]8á>$oHÂÈ-ä\i.ƒù´×ÔJs9·¾‰÷8+ D£¹7œ©e;¿} ¦#™ ÿ`(‰|îûñ±Ð*Σ‘‚°(rfŠgÚþó¤‡Ï˜&>5x¨µQ:7/O÷¶³ PÇ5nlY¯irì‘‹µ&¼&•)ôU&¾¢­¦°$v 4ú™RF4Ó¶í;辑¾2pó®D&H¬ÐŠSÉzÕáP'öyÍu±†Ô?ÚíO†ó mõ“Œ‰.Ódlv}¨Ô»—ÚýßÁ¹ %È͈,ò¬Ä‡9BDÈ?ð€Â¯öÇhÓ´Ý&EM8qwoù'½¢ÎØ eØ_I£Ç(ÿãjß endstream endobj 318 0 obj << /Length1 1669 /Length2 9538 /Length3 0 /Length 10625 /Filter /FlateDecode >> stream xÚ´PœÛ-Œ„ 8Áep‡Ü‚»»‡Á™'¸[N€àÁ5¸k‚k 8A‚»…GŽÜsîýÿª÷Šªá[Ý«{w÷^½i)U5XÅ, f`i(Ä…ÄH()Éñ€@N6 •–VÓÆÅü—•Vì ³BþEp›º<Ù$M]žxJP@ÞÕâ€x@¼@ €äÿ›uHšºÙX”ØòP†J+uôt¶±²vy:æïOƒ9#ÄÏÏËòG8@Ììlcn (™ºXƒžN47µh@ÍmÀ.žÿ•‚AÈÚÅÅQ€ÝÝÝÍÔÆu¶fd¸Û¸XÔÁ0°³Øð»a€²©øÏÎØPišÖ6°?íPKwSg0àÉ`oc†Àž"\!`gÀÓá 9E€Š#ò'YñO à¯Ù@l ÿ¤û+úw"ÈÁ¦ææPGSˆ§ Ä `ic¨H+²¹x¸°L!¿‰¦ö0èS¼©›©½©ÙáÊMÒbjÓ§ÿjfîlãècƒÙØÿn‘ýwš§)KA,$ `ˆ õw}’6Î`ó§±{²ÿy³v¨;Äû/`i±°üÝ„…«#»ÄÆÉ,'ùåÉ„úÍ ìàòñròqÀN°‡¹5ûïôšžŽà?œ ßæ§|¼¡ŽË§&À>6–২Þ0S70ÀÅÙìãýoÇ#T`acî0[Ù@PÿÉþd[þ‰Ÿ.ßÙÆðø¤=øûï?_†Oò²€Bì=ÿ¡ÿq¿ìZârrÊRÌvüŸ¸8ÔàÍÊÁ`åà@ Àûôáóßiþ3€¿›ÿêjjóWqÀ2ÊA,¡€§,4ñ4½¿qûK í #à¿P†>‰ `øGû@n ùÓèÿyþùÿþï,ÿ7íÿoAÒ®öö¸þðÿܦ6öžž´ìêò´JЧí€ü/Uüç.+-l\þ×+çbú´b«'³‚¸Ø€\Úm`Ò6` Usë?•ô÷]»òoÓèI"ìÿAü¼vÓÐÓì?ä°[þŸ­Lþ¡ó<ù­~?šOóý'ˆÀnó/È`·ý|:ÏîŸ@»ýïQümàxÊèàúýI­ìA€ú/øÄvü|*Ðé_ Àþ¯º~§öúþ×pÍ]Ÿ¦ÿÇNwæ½YKQçÉuÉJ!½cEaö~öñ~:ÁûŠ”j³ .G'Yœ\ È¹N•, «EĪOƒó-}MÏ|‚;^±4¯|H«r{gUq†">)¿öÏuu—f³AÍ-îsBú¬u‡Ø hƒˆå4*¡öÔx÷J¬ÕáÁ%ì^²®¨y·À­cšPl)ÁARI.äJí¥\Œû¬"·ý4o3\ | ¥JuBÔA‰ÜÄæ#Bƒ{jd]ÛŒëÔ}B̶ܴÖPÿ”Nîî ¾”¬iª0«Ho ¡eiuÿöæ¹°áI‚«¤ÕáM{´Îñ† ê·Öåŧ~¾#bQ¶©æú¬l:ÙàYÜœ^&ws ÚU³ (EÈ#³/ÿ4µ=D@ËpÅ÷ZíŽG1åÔÓ„Ü´øy,&+‰«œÝ6¶˜[VWŒkŒFôÚ›ÐÕbÒÚÖQ¤¯6ÂÎKqÈ#f7ˆè¤æègÅŠÂø‹½+•#ã|û^N#_|"Çã§€a¼–Í´ sò6[¥ØÀÑóÏ‚¥v¯&H½ˆ½¦ aò‚̰–÷´Ì;³bA¨ …•çB>îDÀÂéètùÎZÈà° Ïï¿!TÕ\r~ÎIMibïè0©–À~ÏÉ{®mO5쿸ûþòÆ ©t†@¬J&ªÐ‚¬mž©Ì'iÍÇ_ºw‘›í赑¦x”.ýÑÏpf3µµÕá ‰ÞýeÎÎÍLaOâàì2ÒøÔZÛdNt ¹ùðe¡´I¨×1ËÛMäê¥i‹LGŠáõîn†°$…Èå šV!õ¯#¾/A,‹wà¶ÜVã,Hâ‘‹z‡}¦AÜ7¥4qG2JÎìů‹çÆh<,ï^ .EAYÆ•/ä”2lßß»iCá¶h±­sŠÕlàÍéܺBßûKËí€iŠ$AÁ½(#—ØŸ¿Åã­# ™Æ7ß© ¤×Ý™‰f"8PÃÑ_lœ-YŽÕE}¢o^pS2žÚâ&Ë dsºÓ`}'»-À€…%moïýÀ }›ïž9Qÿa¦”ö=]‹ªò§»¶{ Pþï/Œ«¤Z×H-Oƒû1U±Qv©‡Õ\œ:]…ÍÌ4ÃæY3\Ô£œêÌÖ¾ðžðœÜÕë\ Á% Au—[{Ë:^l$¹V[”¶1bψsÞN¹½ãOc?sºYî÷”~ãÔ½€Ùß‚`o‚º{¹U—±MËh;ù¡†(l_TERœÌQSjõc"ÉQs»Cô…»÷›³C²NæCÉ­Ñœ ®¿dÙÍ·SÁµÞh–‡O{ âzjÜœ©Ï}:ÕxÛaꀖ‘·\d¦½ÍQwä•á¯ùæJ@IÙzGuúSAûYNj2G…âtÄ b (nD,€ƒÌ»Kµ_dvÉîfø!¦KÁµW‹añU±_ ·¨ñ˜¸i*ÓÒ´·V|klzë@Ó2‚Lnh¨K‘$‚[«S¸{7,¼§¤Nð~sÄhá”yeÊ"4H¡žœ4Ù-^¤ç·`œS“œÝØ<} ÌÕ.ÒyuËd¨["r‡.rõ‚ NA¿)<(ÎVT>ü½Åe]·¥>`§Ih cþæó~’Ý6–÷åŒU!+ÇÁÉ)ĹWÇayÚ Î…ß4+T/깕¹þþ´t˜e™ä[ûâ=Å÷z7]â¶WVŸnCªÒ‹|L*72ª¬iÒ¶iÒb5eûXqè…z¬Œ¥u½6¯F¯î:¨cß|$hôE}mP,u¹y1Uf6€Œ„‰¼¿PºæN´\÷Îó,çvü¥·e©oƒ;±–R0Ïý \qŠ@„Å܃ý¾ïUt¹Ð¥*q œ;A¹‡ì;cBZv‘ÆÙž(sîgC§ò·ˆ_äÆ5}é° nãP”ž{-Ùi0„Ãß4EÊçM€Œ´l7ÍvÀA<dÌ•"Mg蕃œt›¬ÇRmº§ìoZòܺҽENÚ£-©÷ZüÏ—˜aÒïG}€Å jY•„K¹úX$”£¾;\´WþßV±HW¥±ïd>M`)ßsìkEÄóʽŸÿáOÆÍsJ½qWþZÿ;7}èåb¥vH—Uù›?|1Öj[Öe}4¦‚f¦I<™rûB]CヤoMüûìeÖtço†6k.Oë²Ø|ºØ½‰ óßÏÚV4 LaSáÓ¨¹IMNi·‘®öëe‰Žt#üð!e¦å¿™zОõ¯|T2GéYïm n=T¾œÃž¶(#Õ#|K”pT&t®‡…/…¥’/$ÆJó¬æ=ýÐrt–Š~ñM»¸œÄ³Í@¿ª·îÑ|kµZéSÙgùê¢Õ¢lâY>ÅÏ ¢yrƒ9†ó4ƒUŠû~‘5ž nÇk+ˆmÒÉMr¨ƒÎîæÑb—E‹;‘Gijˆ¨æ~JÄfXe/»J èÄëZËöE–+²¬Ójš;û’ÂßH¤É©6FÖ ÓÏêÎ[|å© O6:ŽBˆ»ŒS_ítÕžó >Íötˆú<›N·úüÂãó󬣨D¤÷äç/<³CínÚ§í÷àÖÕÑ“ÌÈÝA¦ ¿hb¸ÏZ÷ðÄDäÕ[7f7̉7܉"¿" ËÞæPÙRÅ@¹K¨€ÇTµTIþî!µ)Ñ¥gØèò<ÆÉ• %‰dõ9œ‹Líjû#}%Ÿ¼æû·ñ‹¨ŸË¸ø£‚cÉŽfp–NN2õ¦JF!xéÁ+aVƪÁ¢çüÚ‰ÏI§˜ cÜmѧqG¬®G“ˆ’£¡Š[]´z¾úJ#]ô‚̺÷M£/[útÂBÆŽ¯Úr¢ñ2wZ)U)ÛÇìc@@oé.—=zݽü̸– ½RJˆs|“k[.³#á ÷pYjœvúÅh(©áßÓ÷r¸j²ÆmŒùñÇÈé<óÂaÃöbÓÃ)œLáë¢v,¢o=:7—سƒ&¦†“çUf…ÄBº‰°uϵg´£Ÿ „„ÚÚvsÙ«ÛáÜbz8½ÏÌ7Ø}À²gž R!i½‘NÔëD0Õùr(ëôq/§ÆÀ>s…Wؼ„éN,U@þÅò¾*^Æ ƒ×)8l£K‹oŸª­÷ã8¹èÂÏtø`ý +Öh)18ÃŒq”ûž{õçÈ7r6t·G¹=Ùç‹Q”]F«îŠ ú†µ¬{ŽÏêÈrÍç:(ìEZôQkŒ Ú x™úKà> @Ž¢Ûx4î×´Y%OaùƒÎzf»YˆBÏ«ŒM»²Ûó sê°zÔ;x—›µÑ£íU“Úù‡+ò[\Ø»†"K¶ˆ²ndÈOkóò‘Çâ\È™wŒ>W,5 ò½'}gaã§^¥¯­…¾¡§yVÓ—æSÕvŠëvß°­½`£"*n©-ð@%´Óo?¯^§¥…Ã5–v”/R}]ŠØ­‹ÈÍjëMg|³ "6ãõñ¢ -£æ2´$Æ"æf¨²*yùü j§$«!n|ö”`uœJ_ª:Ïi{ÂØyÊž84T0/>”üŽ‡Íž‹½¥‹õש£±EJíºÆÀ&ÇÖŠi›ê;(£—©O¨°ßâàT;™£y_ÉTîŽîi¨0‚¨¡˜\»ƒñdCB9ÊQï!ie~©|~U ôg¤Ñ³¡x‡Æ±PrhT{”ãr€¼ŽhsÅ(m_Êòr¦ÏU3tsi*ÆŸé"Øfée™û`]dÓÖE—-d+\­Ã¥·m^Eú^˜š[UK žJwa/½iô.|‰]Ü見16:IBC9‰Ip$Ûõ}y'?øb£®Å²kÖ™evÓŽ|-ætt‰ª:xÿÈ©íš9v/‚É/Æi󼑌ÇNUŒ®Pi…øÐ¢$¡‘áZ^«×‹Sæ.E®*PJh.ŽÚ-'ÔhòÒ <™´qBòÖGô¥m1úœC‹¢{§)줗¶n[×]AŒïðkq¸«N0¦0Æ£Z‰ÐÀogHmú:HìM\±ƒØ£¶‘ -®ÂÆóµšŒFH¬ä!wŸ´p}å&©Wãðç•Whzh1êHàz¯îéËcÎÖkX™£ÿømÍËÃŽ/ê²"l€ÇÂ,ê.fe¬n‚”Ûe°°êiž3á·3¹AZOÂýÑgp%Ö²ª‚ŠÞu ®ê…î†iïÆ¯³1zÇo zT­ƒ ¤JVl¢³v °‰˜pÄ="$fÇ?P—Œ2øNR¿îï"‹C¿Hèé×5(œõ\UûÚÀ½û³ÔøÁ‘N»;BC~ÖöusºÑù̲½ëî2’;ƒºm{;<'>‘’`‰é£E=šl„Ô¡?—o©õ´ÌÛ:ãxéÚ±G<¬t-×Wyd31DôU¦ö°rtláqþrviqâ`E!ÔøÎ˜£Q!tìÊ³Š®áyLx¤Ûüïl ¾ˆ.2g÷ÛlJLHõ]׌úIÙÚyÖµœÄirR¼lw•QBÞÅš¦îÕê3É/½Ô4{ÄòÑGÐõ˜÷­rv•,žÎ›¾ŽPp7 GDI¥~,C‰bó›±[Ãh%;í<_Yc œt[°½ ¢(C]1PGN÷xÃEHtYáÔ½ãjÆ€ßô‘y:«·Û8 ÄV²åwO`®~ËOd¥3ìò‘Ç–ª-Ø64¨n¤Ã•ÂR¦+Ñ­êù"»Åàœ¯©"¢8—ÝjÐ[b”ÂÓ™À±ì†æ6Ò㑹—Œs›ÎþW2]wà‹éj‡y–|4jùl!.’óÌçã¶æâëȲ…õ1Dú>Â}bqž°ÈOã*Æ(1\æ&’×ÔìÖHRïrÛd}Ê€îfqVQ¡cºðã¿°p„©J¾ÊÕ•<ÊHe"ÖŽW~Þ@dA³°Ÿmö‹HX–Ѷ¿Z|ù5àé [à¤B3“­‚)ÿyhRp¼é¾.—˜®Ú€¨ÙŸÊOˆAæYB„Èšù­oqŸ8ÝÊe'ùÑÒûævJJEŒEA10#=vŠæâ¾bx¿škM`kÙí/'Ãý­ÜYÔ˜ RIŠè 2¨ßÛA½Lõc©ÌÝë§áT «°+òüOß^QÀI¦JóŸ­3³=t“¥½úܺoÄèLW|ׂýiÆSs—u³ªþîÓ}Iò·•þè{»¦ùûžºÞ‚z6S5öiò…¤G–ˆŽh— ƒ8öùëò—¦kX~I ›u V̵~¬Ç®ëŠ*†¾Q™¿” ÛO½¾ñJ©!±ÎV{‰ƒ’5i{j÷Þow‹vÈ^–ô ¹øæQQ!ïX Љ<à$‰ç/é¢3Ê ôX¦)úTÖϔ႘¼–µW¾f“ÿÚõl–ÆÕöKÉì~\¡´¢îç¼#eºÐį–èwA׬õ:µéDÛQ¨Êb‚ùå´ëI±²8¥ÌJÀírÝb“]3ûxm ¢Y=1EpòïéJPû^»­/~î^V¶4OÖô­;ú–Ì‚1Ëx‘ûõ‹Ô½óp4a·Íø¹É $OÒæ÷½ÉÐåûÆgoá  ·UäˆÒÍ%¶Çº84«7ƒ¦{6ÂÚ Ç•øØuåYGFÈž1`‡pj’=Öx'iËÝÓdaèD‰ ¨¸¤èÃr|™$²ŸmµˆmXjkRh¶D4n^¢{ç×Qx!‰X¡÷©!hb‡™Ð°>—,â*S‹àŒêÏ/›ëz!À2”@ª! LÓ‰1wïl(ûPWM¢„2ƨpn^çÝ¥Êr€«iíS‰mœÚŽÊǸ»Kò¦zE0$jys7ç(̱ó2¦¢pnRsý…IÒ¾³ùB¿˜¦/Ü—sBãËÂ`BØŠ[:qPZØØ‰-h`m¹š¸^À+›b*q‰žúÝ)•T°¶†ðíu^¾z®l°+WÁqãeEC–6ŽBL!ßœÍM¥e<¢:ðúê'<¯!¤ÿ̳¢ŸðþÓ¤N·ù ±’†ä®gö&É…ºs'á›×ÞUL6<»YØ Ë…4«¤GUÐ̘ éFO²|ß³ñÅŠ/œÇ.F`Aæð{âZž‚ßK‹Ð׹޲.• †£ðWŠrº ùÊÐÍãTýc> ejÌæ"âjÂ’š Ô8dÐB9Š…î2§í·`ÂoßLée`ð¡­ŸµQ…g >©Äw­Eô~3kš\ëÈ7Ž3v©÷—²·$c„á#Ûܪ—y1ÝÍ'Æ@5mºD:ìXVÇæK°QÉy@&1ÎUܘÅXÿí'7£­zÚøõlÃ…ŒÞáâãÙN'U©_¹çæý5[äµéªoKAè/ÃB$¥”÷ÒÝ Åk¶Â¶¥kÎBö޹ð¾OXeæ]oóIÆŽD'\/TÎHÕŽ|]’ˆå­=ÓÞQn 5ãú¹Žçbˆ{ÎÎw=¢[™I~ÌéîšTñômæÇw8Õ$ÆPŠŠ‡!rnožÆHë—|âéÉ?å—Ü£xW¾›ÿR´Ÿr4G…SÑÉgÔìôÔ9¯ˆH!©Lü1}³,CÊ:·T—ì+¶53·2ȉ+¹BæŠÜY؉Ç[-ï’¹ë/bkÝùs4[—J¿rš&w%ÉN¬{ÏQà}t6  µˆôüœ†úóî w³1ö¢ŽÍî3£i<î Ù,§YO^YTœ?Â×E7ü೎`ƒ¥‡5ÑCú¤H½`å*_A :eÑ›xºÛ&0JÄbóo6o+?ãØY•^’Êìï Þüúåk7ç:»k2RFoj΀YŒ]ݳ{z`·°Ïb†ÔæT¤5 ½©“‰ëùò»k.¤{áìˆ76>ä“\=]6.äçv^ ã ŽS®º}OÃS¢¿I–m«´þ×E"*u‘Zþå°~ìÝlöù:£a†„]&Þ‚Uñž³ÖOµIÄA9ï[²tÚϲÌȳåºuZt¾Šê?'BÑÕ;ôŒIØ“îâ÷Ï«£*)" ]¥®gãym!VkÙ5³ÅÕ”ó` é`ߦÏLnt)Ð_ÔSÏeS\Û¾{a;ç!dsb‡ïÖ¡į̂zBi·Yö.—5´”…(v(Þt Q=_Ü@¥>€Y5ˆn‰°¯F{ÅßÁÚλ[¥°BÖ!7ÜÞuº¶ï„¨-_ʇ®G0+ÌJ,+b…ײÔ{µø€ïtשµ&Üõf“þRI¸F2ÁhÞŸ7æa¶p³ë¹Ê"Æ¡oþ¢Š…¶¦á,E«A;ÜoB«Wrùl¯¹Çè§)S:—•_ šiÍÀùù”ɸ,’Ë2Þ¥0"¢S†=#Åt80o;ˆIáÊÄ»oÇ?DiÉå#.wXS6×dmeÛë°ñJÜúÈ3¥—QÑâNÓü+0g¾ÜÏËŒ•ý9çú›Q¤×L:Uë/ú„àõˆf¢©§muíûáE–RMû¨Ré¡×XGYD4R¨9‚ŸÊc¿ wõ*Ô²ïO’auHAÚíÞœƒ´Ú2@, !_e1^¥(°«I‡ã=Ó,y.RŸQuŽ<ÜGÕ˜nï‚Ý7cöùý,…¶ zâ´l×g•þßeùù?¤ä¬"®›ÿàS9Ø¶ÕØxTAæÄXTôVæ¡Îj²ÅL1ôs[¯õÿĉ YДõ¤ã°¤¢\ÛÄë}hˆ4^x38ú+IËÖLƒâÚ•?)â4¿—ÐÆ^ûúYç ½ æ‡ÊÔüÙ¥ääCê—FŠ\J¦’Üv¡«)j¦Æø]Ÿ²ât¬ñ0âf†?A/7ÍÞ˜(ðò]Å'LšÙMcÐÜVKHîß[Òò“²·Ñ’Èy1±ƒÙhLU¦f³ÈŸsÚܪ[µ_ˆâðÄÿüú¢ _…0øsêQV¥÷ÁµQ®vÞôˆV–tV>ÙÎ&”AþÒØ‘«é&; UŠ}}wg¦ [¨WÙ©;Eä[(¼'}¯ .nÆBabD°µdk°Is|Î=µa»X¬¶Óä¯O‹mºVûexh6YlfNÇy¨”_Å;ŽñK`§fD„ú­ìhûÁukÁf»Ád!>iÕYy˜"­âMÏàÄ„•jbö싃žt–oÇ,ÈR¿Ð\Ë9Ýð3ÄqF=¿ƒË²'á:³©k,S·Å:º×šNuƒÜz5Öa¶¼úU¿zQûÂy¿esüꥻt Çd¡#»XLpÁgîô¼’&Òq‚¬‘;´ó¾E%©Êµÿ×»p'©`~JI¾‰Îv¤wd“Á×°.’aÍA…Üp’¬"wÁ•¥Wîâ¡&ŽÖEPPo,.ƒPK…>j;FË2 è?î00öºZ;Ø. ì‰1<¡¥UoFÌ?LfcnŽf'D)âæ[šr4ª2[ Û”n3È;U¢Æ[ºSbuÂ×9Ŭð|®—µø¼OÛÇKwn*íuÆ+6‡|4ˆ¥Õ“GMŧT«ß›îá;’¦Ùä³ “ƒ‚ ŽÜW1íŸ^ËÊ6ÙÆ ½3âPQ «©,Ùr •xœ²´EÇŒ+´§±îáh.ÌàÁ³w³•n^‘!TéêäÃy1¸õ€¾ ¦=ý‰ŒÕŒÓÊZ¢u ùV¤jF -#ÐØWŸqˆ&°Û•68$5Œ]þJo¹Èe¡¸?Ò–º›‚EÙ4µvåkäIiΚ&ŽšÅü:ÁéÝKT[:7•þøï«8ž @Ax¼9mpa¯BE §öû¥ü˜¶ëжr¥‘žY5îȹ„-W{Û®‚£C6Ô/+‰áÌ­€û¼At¸S×(AQÐ ªŒí¯â…€SØ"Æ×s3NõfëÆÕO ‰ÖÇv‹R¯öL”È,ÊU^ÄUƒ>˜÷Ú Ó›1ÏV‹#¡i Ü ‘d¸·ºMïnLhl¦:ôÄ‘1æ“K„Áýôët¸ödS‚2²åÂÆ¢úÕ)íJØGd0Ö ¯Îæ ˧x,‹u°/,²/¬2ï*ÌÒÛž•GÎMæÌÍ'd't•ŠÐú³fñs›|Åð9‚ä^ 8ÛT`/ÓkœyJ½øi¿m{0–*Iú&ÉJ•¬'AÀû–›(}}öð=OZúÿÏF¡F endstream endobj 320 0 obj << /Length1 1422 /Length2 6269 /Length3 0 /Length 7236 /Filter /FlateDecode >> stream xÚtTÔk×/-!) â‚ %!Ý’Â03À303”€´t#¢€tw7ˆ„Ò Í  ‚JÇ7ê9ïùÎ{ïZ÷®Yë?Ïîý{öo?œ¬z|ò„ TGó ò%ŠÚÚê P˜"åä4„¡ ©I9¡H —ü_ŠH(Õ)ÐX?m áæ>“B@ Äߎ¤$@ 䃴ù8EÊ©ˆpñBÂììÑØ2Ü`€ „„Øýßáyg(ÁÚ ´=Ô[ r À0(Úë_)¸¥ìÑhI~3Š´“á¹ð€¡í ((Ò ü Ð9Cÿ ã'åÚÃPô[´ `N00ŽÂF¸Á!P$[` ®ÐuÂÿ8kýq¸øën‚ü‚ÿI÷Wô¯D0øï`ŒpvÁ½`p;€-Ì ÐUÑâG{¢ï@pÈ/G ¹ƒ`N ¬ÃïÎAy} ð/x(0æ‚Fñ£`N¿ üJƒ½ee8Dáì …£Q¤¿úS‚!¡`ìµ{ ü™¬#á÷þK°…Á!¶¿@@Ü\Œà0W7¨ºÒ_.Xé?:;( @]PO°½À¯ô†^.ÐßFÁ_j,_o„ À ê ³…bÿH½Q w(tƒúzÿoÿ%RAAFl v08é?Ù±j¨í;|$Ì`ÄrOüõûÏÉK/îäõûïù ¨È?ÒT5åýƒø?6„'À›OHÀ'$ ÅDb؃ï¿Óüçþÿ[«‚ýÕðŸŒêp[6ÏØÛûˆû_¼àþkgxÿ.¡ƒÀ’ àþ‡û@Q ûüÿÞ€ß!ÿ7âÿÊòÿâþ7¤âæäôÛÌýÛþ˜AÎ0'¯¿°\vCc÷BÝø»>†þÙem(ææüßVu4»òp;,ÇùEøÝ. ¥ó„Bô`h°ý&ý= l 'ª‡@Á~=9Ø( ð¿lص;bŸvbL vÑ¿‡ûK†b·ìß}(ÃÁȯu}!‘ /R,!°’(À[»·¨çoÂøá46€Åì °E IY\ `ðKõ[ ~‹ÿªvC"±mü&¶…¿åß/ê “ÎM#Àƒªƒ[+åoyðmŒJñæ=!F÷)[­&deÎk«Ìõ ª½Û‘T$²»>NJŸ»Õ=³‰\´…*b!­:í•…™ZôÌÆ;kÐM6ƒ†¢?îæ¬9Ç­GY„§è¤³iJµŸ&xTP­ .P÷ÞîŠ ÐpÜøÆñM­üpYIäZ…ñÂ+Šóœ7î_Òi¼mToÈ}ô•,ó$WëØc¾X²ÞsíÍn`è%ÞÉ×RMx–ž3” 7_ù=Þbº4¾Dë)8Ú!ë˜ëïYÁ8lsò<(DAXS°<«¤çø²:W¾‹ÍxCàÄU)tàÙ×TÚab÷`É>u¿ßÎÀ‚GeÖ‡kàÉ%Þmžû/#Ç¥I ޲ƒôD˧–¶µH²qˆ˜#ãôä?“úÙ”ÚMÝTÆÑ=8À¤Ü+Z©Ÿ <#ᅠ¾¾½­M8B~ô:ð~÷iuû'P(Á§¯úB¸¢’¨êíc¬© ÛmÚÓÉõÓé¤t[À `éS j÷Ï3Å=.ãÉ:JŸŒÓLøéoÀRêƒXçÃ0Ò-fnjÝ›ø(‘HÜÎxúäÃyñ<ŒD1‡Ï»yañGɈjwT^Ió {_ é7¸8òîM½Tî M¥ªŒ¥Œ[†¾½f‘­àvß@QpßTQë½$»×øL>>Cê$Ò3“eR÷Ñ«(L³%âÅŠ|é­m¹­ž=š2/Ê»'õ:ä²rœÚfMYiYt·–†-ZÉçËýq¹üÔoÚªT˜Nê¥OHð8íeljËn1ú@MßÝ]âVô9*› ü <ÄMãO Ь¾šÞɤuåÜö‚o{G©™ÛëøspÒ¤§Lò¸9Ŧå¯Ïô—Üÿ9¤·«Y\ FżãÆ4ðÙK2” ›ÖœÜ ³rÿ´›2Qxã´å~ƒiè&í§«ô¾w ›‡@;î¤çC#1ÃzSû÷¼lk¸a7XuÂW "‰‹Õõ_妣 †«2b…S¤­¦î×V­»ßi»¢àUøkZÐݗ̹·QÒ§ Ž^ù´›g $x–ÕRk&\óW—Sö ]ÉüÉÖ’ó¨âMjÅ!þ‰3•1ôr»ß‘{¥6™î…úê¦É’v‰2!ô{=×ôç2š½&º.¨à-ªCᥛ·LØó~„ZÄÊ&ß(/K×Àaî&ÞftÏ|µåeÌã§£«E|5Q·nDzI@t“7ù%Û^ÚÀ•òç¾íæ·3áêY´Ý¹{ƒ'D}‹ h¹’6yj\ÍQ EÂwÒˆúû>y/±²ÍC®ƒÓy…¤0¡%rÆLMwÇz"­w6ù!x7 ÉIu9„ãï^º¬;Ç©,nµQrtDC—B^KqE%ÖÝßr¡ü°øúµ<>{ïœã€Æ[|ºw…$§Ï Í!Yëœ=À•Ï2þA_'â²~Ó¢Ýó4±²óÊþ*!ſ6žóüÈ_Ÿ;„šÿÖŽé¾kIƒ, ÉNPà¶]»ù͆dë7[ÎõôEP|ÂŒâ¸1ae‹»>ÉMFÞ uW~ÿÔ%Q¥B̼Bˆ¦Ý{¾b¼’©ä,LW“£<_î-k.9׊ ‚‡%GNd~ùÀ¾>‰ûê6åç[^‹Ê& úGçK ;ÇŒ,ÔErîßótÄo[¿<=¼|>ýì©Íw7DðDø¨\’¿'æa‘¤z0€á³R°Ê¼ ŸµoYoÜ’¹Wó‡·÷“DkUo¯F«Ø×:ñIù[ô7‚E^›ù·ä„Ì.Ù­W×PN¿ÖÀy*½Vkž{¿qÉijÁΣ£’ùÙ¥‰Pí”Ð7Ž4z>J²G|úvôG»{ÜwICÝÂîïޏôãÅ®t¢§D×nÁ‹õÕtÁñë?ŽoeÏ´Uü¼VHr$×|SHÂ/( ¨I•̸CMoÈAôEûìë?®Ì6½ÃÔúáãcfÆñó§1'Ô7§Ï–ƒ.×È¡Ç7%IòZñö0Åå\“\õFkJ_N®G–“¼ã²Ö³œ—R¤WÚþ,TÑfe‹ËV÷m‡8Õ³ëzZ./¬P`MÖO1fQ~U`ÝÊ-m­»sK\ï’·V½Ì¼éé­´)!ÿåAqwƒq© ©¥±k»†L1Œmø“ ÒZA™2y^ ¢B·ÒÎGÛI´×¯âyW».¡ 1 Šnq.”’äfá_¹xzšæèðÎ|ýÞüÓZ3g‡ÂßVê¥cžè2@:¡úÙ[és~a`JÑ¡Ï ‹ño Å©VP¥R;ŠŽ%€‘L¸Èï€}ŠŽîuHÍ›/@4 ‘}VÅO¿™èM—y!d¹ýTSòÚ&C[ÉÝ—xÆP[ GL+øñ@S¬ ¸lNsçqÝdáÌÑñšfÿõ^ó/Û)úí²óÔò"É~Üá@ tèèLMÈðd$HÊ3ÒU,QŸ¸jFŸÒ‚÷l3(jÒWŽÁ‰\÷›êÆi¾ÊÅ9–^ʼnîé¬ål>̶²"™½>9²6)·.yê¶ÿ#Z#Ìu4VR€W-ñ'õW•aÎ0ûüƨË­jf} ÷,IFeÎSÛ9lU‘š×2[Ë:icÊÙƒØC¤$góOµ†å›Ïo~t £c®”Jn8TÄtéÑéÔ;Á‹)ÌÆ·Gžû™^ôEØzŸò7Y¨O½ªá¿‹Š%èÉ¥)Áá') f•"Û%‰uW¦[xóÜ·mÃòºãÂpç42PÎ$&˜ÐÁh,T}<79̆û ¡!3Îà µ¸WyÓ±†¡ËðãkX6Ìjèzy’«Âlúˆêjógqž§ÄRÆe~U IÁ˜aA´CÊvUL7+sòês‘ôYcA«¨#?B(ÂåsdY9>cB,ЬTlãã@Ǹôqñ±8}›JêÁB¥ð(±ék6ÇÙ÷.È^kKcX¦ýÌL¾ç4ÉNÔ©ÿªe@•õEØUÊz#ŠÏOÖCÈ H~Îy2[«kSµ=þZ®%¬t¶lehxÏj…Ã@`BF‚íJ}Ƴ̋£9Uì|W¶öp&›ú¢qà™1è“+V´™#ɹàȸBqJ·ä­¯Øà”Uã¢?pø ¾èÜIcF£ÂBìr<")•2™¹×€÷¥ýÒçŠáÛ„UaFX©R¾T…œËK“UÇ\z^Äޭ߯pƒªÍ<ÕM¿;Ñgak9û€¿RE«(?f›Fâ´¯ M–ÀöðܲüubñQ>ü½ÝÇ=É‚€Ý¯ÒÉà%ޏYu+ÖF a<æ—… )yþÕ'ø:nÒÕú=Ók Ÿ'ËŠµPk);7£‰h% ö§0¾a:OIÂŒÕ@9Ë´yŽÕË=¡³X—Çhj¨ç=”}üœ®¹B^ IûƒøÔ; ¶{;úèÔžNµ*Æè1|T¾â ¢5uv׃wl9g)ç…Z¶»š8,=ÆóZ^&ˆHŸ™°µQÄÃÓ11•ŠßcÝ?ñíŠI¼ùÖ7T"—Â:qÈ@íöè´o p&OæØ'VÇçß9$T3z›Tt)Ü?Ó>»|FË +NBõ ð1CPm§zÉL鈄®Å†¼ëž.i{oN¿ß(ªÝ™–ZÏV,¥$ÇB²u½ºkøá´çļd ê%(2’qHõ" ¦5±ûbz\"+¥¢FTngO*Ä]}-EŠôBôÁ­• rè«ýrj–z†Tú ã¬t²?©\µP"{ wa¤êZG~ y€ýtb±Mc MÑò&šÍ P޶­ô²Æ‰% ø¸BrálØ¿¸‰¾¸åü­‰ ?¨æ¼În¯ÐY¡OÈ~+i£R1Ñš‡2èG·ã¦zŠïg×þÅÀùÏ¥²ŒŽ¹n¶ÌsúD‹Uùš¢5ðZ  k•é¨ a6Ë”h2’$ûÓàLê5渷©•MOƒ7ADîØ&Î蔯Ðg¨,p0£((™{nº ä´o¢½E£Ë—L»vÅ@ÉéhxÓâ³›ÿÑ%…Œ¿djDa7&§ò 1lQ}7œê£Ú~FÙœÆè«q³##Ìö;ü©ã—÷† Oò¢~t¶Ëö;³[v0K =§žhŽ•–o52xÑE(sí:^§§-˜î¦o|9Wm$…šZ}é–Vs]êrúÈõ¢|ó 5ߎÛÅÆãàæhù*¹Km)#-¦€dB2êï×Xߤ\Ø3÷±T:)?[¾;@Ì{Pì™Jqÿ¤@d:…$pɉzœ›*!z¬ò;xõö9ć~]D§½âŒþUÒ ò¾ª¯dZ¥ÞY6Œ™¶";nê+&Àn6)Ñt÷Âõ{:r11`¥^³³»Ù,YñÅ,¶à­Ù ٭̬ŸæDHæýúÛ!ä÷0ä.u^Èh!9¿Ág²HMÃí0<þ$­¶Ïø±'Ölÿádz÷ûÞz˜t€ò ªIU"ËÞ43ëݹÑ2Ú3q‚}‡|ÂПýîÅq•¿]Sãj‘±]º+|1ô0+¥'Ÿ•LE·A}‘Bæóõ›ãZ.Ï×fà·yܬŒ!„EÎHGðYÏE%vCí»OÈ×ÖõI Ó8£eNF=Ç5„‚ µê**! 3»’áxME¯‡dŽ9ϺrúÍ{Û?=(Ó`T™½¡öÞ\EÁuŠ aFúøüs8SÙ5…¿+.èÛÎ’u½|ýJª¾Hèª _½»R ㊎ ´ŒJ*P¦+Xdà´H „ds¼ëHÉääç t+2€Q1–ܹe Œ;ü3k&(VÃË‹»¤Ü@È_x£‚ã¾ ¤Ù[7‹Ñ¶ yÜ*Û3æ. ‘­œ©NŸÀ¹˜:rÔ±dqMü×Ù%|ó6–òfâ ;l¦g]éߢó« ~UI‚€ŒÛš>Ðã#íA M ›9†;¤Òü¢ô…1ª`ö()ñâ@í¯ºÜ-\²È¡^M2'…I”ü&zj"öþb'ÿü#3)ÂG‹l§êE¸îJáVÕ£ ÚBþTW¤†PÚ4°URÝUÒ—.Ãápütʲ=Sô›q‘­é“ôÖ§áðø•÷¬ÞÁ{á›ËšOK âî~$k“@ö·{ý𳚴J6ú¢de[å¢#ËÆ‚Ú MéY®(¢t7qͱ‚Ñ«Ý+ÎÏ<‡ZâFr«S%ìvB:ë9?Ýi£¼Â|Ýjý)Úó’\kîMð§¡ÇøÛJÞµYÝ/[´ü§h=pV2%ø?U+7YôPÄ‹âZ νM]ªóÒDR¡¼wVÞyz*í.îTZ;ÛwG—½9w(7+EÝg50AnòZV:•¡µa}K{wŒ1{ëG‡BìÐcÞ´s¯BÚÞú±¤Éõ×TÞ”Z,¡ef¾m6ìsxow¿È¹+V®ðâÃ|‘{¹áìGób”±w“î&^jÍÓ®’ã(…„+*5œJ-¼‡×n[ù3לE*ßïòè“#æ2]?è†hOxo8ʾU‰2 UëÚ™Éí¶¹6ÉèÐ=êa­ºæ¹O$ßJÞg\þ(ˆV‹rÿܨÎtÄÝ S™—‰]ûª3ÇÄæK¹»1§Çà›Ã×ô³¦w°×H×#®ø9ÕùÛoƒé|{^¿ÚÝë^NŸ£þõÓjny™ð°Yk×àQê©É·¹IRõÁ9áäçl€¤aî|©¶5êrÙí«R®;nx%êy¯‘¦c•e»­z^úO¹(‹³'¾$w’«¥FKœÂFJØØ¤:‚ó.À Qrn¸v£H ©)Ål‘òJ¬íDâÉjËyíˆV½Üs%¤–ò“Ez¢\>e£6¸ž‰ËòòR‰¢"d•ÃB—Á|áPóî´Èí²ƒiÇJjÝg\{§ºä]zb koJšÐ'ì쑈+wÓxLì6Ç;ÌžužOTvT)!Ÿcâ‡]JžN|°v¥–fÿù)‰f^õSÔlv|,£T/ÉõP›ÉëmÚ‹á/†Û+ž›çmÞ&ÿZ#yƒÿÊ€ðæD7«ÜðÚ{íŒÞ÷†&q‚riÄ™@÷mG-LäX:ãc b+’…¬Mz&7izÉy…(XÛÁ:“ií食-y]¢±¢¢ c¦|Ÿ/Eƒ†zs§M\ßZÓ;ú¶)¿Jx§³Ò#Ü:"~9íPùUÞ•êÆî 'Õ+¾ré†ÚE’ N(aøŽÊ x…e"¸Ù¡©ìèá¥û4hx9T^:éh—‡!Šc§f.|Šr^‘¸Éö–ÕÅÖ ü ÔÄž‰[Vyje3ŽÔíI“ˆ«së€å"sá–G¼ÎY$âN¾çÓË,çÅ·Øm¿ N·ŸÅÙ“ŸÇ åP.–ªyÀÏÞø0ÓyâÐè[4Þå/MåŒfº6·g²&›ÝÆ£WO<èTu/üê¦èX%ÎÀ·¢+º:qä(f¹]t-ÉVóɹúWÈÌ$ïabÄ‹å¼Ô5û‘v`ÏÂicíœÚ‰ÝC–gÑઘR6/•ø™¯f|À@G¿ˆwÔj£è-»rÈÏåëüµ–àeÇ3üÄP'åFŸáÿAŽ endstream endobj 322 0 obj << /Length1 2778 /Length2 23458 /Length3 0 /Length 25019 /Filter /FlateDecode >> stream xÚŒúuPœió ãNÐà2w·àîNpÜ]ƒ»‡àÁ!¸Kwî.Áƒ;g²»ï&ûû¾ªsjª˜çêî»ûj»ŸùJ2%UFaS{c„½ #‰… *¯d°°°1±°°"QRªYºØ€þ#Qj€œœ-ííxÿ0u¹€ebF.`;y{;€Œ« Èrò¹xYX¬,,<ÿ3´w∹Yšä™2öv g$JQ{O'Ks p˜ÿ=hLh@.†¿Ž„mAN–&Fvy# -8¢‰‘ @ÕÞÄäâù4ü..¼ÌÌîîîLF¶ÎLöNæ´ wK € Èää2üJ `d ú;3&$J€š…¥óßrU{3w#',°±4Ù9ƒO¸Ú™‚œààUi9€¢Èîoc¹¿ ÿÔdþëîŸÓ¿YÚýuØÈÄÄÞÖÁÈÎÓÒÎ`fi(JÈ1¹x¸0ŒìLÙ8ۃϹYÚƒ þbnVü'=g'Kg&gK›_)2ÿr®²¸©¨½­-ÈÎÅé?1K' ¸ìžÌwÖÚÎÞÝÎû`figjö+ SWfu;KGW´Ø?&`Òo™9ÈÀÁÂÂÂÅÃ9@&̿ܫy:€þR‰Áøz;Ø;ÌÀI€|-Í@à/$og#7ÀÅÉäëý§â¿ ˜Zš¸ŒAæ–vH¿½ƒÅ ³¿1¸ùN–ðì,¿>ÿ>éÇËÔÞÎÆó·ù_ýe×’y§ª@ÿwÆÿêDDì=ÞŒì,FVð×q|ÿëæßü/ù¿¤JF–ÿûã´™=€çïÀÅû_nÿŒÍ?+C øo{ð,ƒ4¿G_—…ƒÅüøÿyþ:òÿoîyùýÿKHÂÕÆæ/5Í_úÿµ‘­¥ç?àQvu¯…¼=x9ìþ¯©&èïU–™ZºÚþ_­´‹x=„íÌmþ-£¥³„¥ÈTÉÒÅÄâïú_Àîm,í@JöΖ¿.#¸aÿG^8kð…â îÕ_*xŸþRÜÎÄÞô×â±rpŒœœŒ<‘À­#€7¼¡¦ ¿FÀÌdgï>§ç 0³wBúÕQN³ð/Ñ߈À,òq˜E#n³Ø¿ £ßjðXþ‹¸XÌ¿ØZò7b0KýFlfé߈À,óÉÉþF`rrÿ"ð19#[cÓß ¸Àtå#0]…ßÌNñ_Ä f§ô…åo¦§òã¨þF`zj¿˜žúo¦§ñÉhþ‹xÀµ#°î7m ˜š‘ xä~ëÁŒŒ#pñŒŒL¬Aà·–™Ëo9Û¿ò¿wì_Ø¡Éo¦lbédâjkf…ÿ‰9À1LìmÀc÷? û/Cð5û3ð<2›þÁL~³3è?¬`Jà 5r¶ø=¿Î8º‚÷ú·pÍ~C°Ùý´üÃ'ÿ†l¿ ÛoÀ_‚ßÎ9~™Û»:ý l`þûÿÍŽÜA O Ý`ÙñYÀiZýÁ½³þ‚ËøgjàÒÛþ YÁdlLœþ(2|_3ÿ†`ovà=ÿC.‡ýo~`ö¨YÁáìmþ,0ðW…~Ÿûw¿çíþ3+ìÀ¤ÿvpnà;Øþw“ÙÁår°quþÃ?Xâø{œÀÑ]í]@¦Æ6ÿ ÁÆþ[ñß(l<ÿhþ+þjõ‚ëþ;,ø3ÈÖò¿3ÊñËäöG»8ÀNœ-=þpÎéwð ‡ÙÅ ôG…YXÚ˜þ1Éàš¹¸ÛÿáÜ×? ¸ên@05÷?üOÿŸÑó®—×ïê‚=yœþõŸ{ÜÄÕ Ü—¿Þ´àúþë×ä2AZ˜µ7á ¶ª n¿­&tgÜ{;E¹£™FËè½àôÅõþ|2mUfàšÓµpòà7ôå-qš+¡EÒ'ïÖzø°ÖDå¶ŸGƒx•É6¤ù œ¾ñ‚Cáº^bD"F5¡]Ÿ'Gkèȯ2”¹Ž®Ü¯”>aݺ÷HzÔõ–-„Îî(ïVqÊ"?–}gŒQÖ (ž¦Ì3ΚÁ{çÂHŒ@‡yæ6}u=…™3þB*Oä{ÃVè­½Î{7ãµòYÕ¹Ÿ_ú sd’Ê[d?Ewλ¤p¹oÞ£…¿4•!u™iŸ5£ÊR%Ê®©»Æmd¡¸› ¦&ìÃÚN¬)mÂ6pz£øºªÍ Ë¥†ÍD¼ßa&²Ò~­Ñef•J´Èó½î0ªeqèßÜåýPï¸28ÔÇxšÚz;Ø4´Õå«Y,Ø+HdЉ\^âÍ N…-s…êÔIc£3,º%s?Â…ð{þ¹'n°°hsÃvCŽpäúüŒõ­h8SèXŸÆ˜³qÇÔ z âTx1þšzvV€oÁ&n˜J“—!Þ‘·G­ÌW j˜*c>[¯Àa+õ$•KØä˜ÿÙOQÈ.-Ù½3W9©èiuÇ“Ït¢Q¡Þö#_™lû(Šqt¿!`@$(¤‡çÚtóº¼\Dÿõ{»³ ÷p‘ÁØ 5®à¼ˆÿœNgÅtIá(¨¢›­™nDcòc572Û¦84Mµ·÷[£Eî eÒb”Ô… ò½²?øÃ|ôæÅ »ñ«ý…p"®šüYk¿(ÞÒ@ d¢¯ÄRfî.A“|lÒøùL B¨ªvû‰Ük¢{îûèÙðä…·M…n1{O3€#:Ú&žŠlnËÿãÅÚ[šèÈg³ÈæUuwáúE¢šŒé>ÐÚÑÀŒ9ü6l±#)@A)uæª\!=öËlb¶Õ¦W–Ð=i\óÛJgÝÚUì+þò·ºZkb‚áꈻœÉ9ß=$ó”íúË ?Fâo[VQÎ&e“ÍM"ɱBàÖèdĸÜ*ô£%‹6 yˆ`²…±Å?C=P—òSK‰M<,˜‘·ƒcýyBø• ZìBO­¨Ì„ŒKU·7ÜÎ$ò‰î‰ÎÙY©ÂÄ‹(æÒ¡Wsæîo$8’âܪ†SøT½Ø+óí¥"#O¾oäÏ"²”ú ¤¿ð·ý°=­oº›Ï\´8[Í ^«øáÐÐP]!8ˆo(xÁ•rˆƒl0’ «“ÜqÁí¡ÄÏœ!¾xë2~+±ˆ†ÊÇ™ÞÒìë$ë üÁöðQ]Öò#N½”KEíä”ïµ'Éìó{JÝ5ÇSÝÖÖ]vEv72 ƒéÖOÕ§uU¯ûvM¢XÖˆËÏåeîäs´X>Ĺys®á%ÍêÞv œr?¾aÃ{”¥ö]K–iYï`¶‹WrHÖÛ(\T[D2û  ±çÍ«HYêÐnVE–)ÔJNi% ›‡÷Ÿ›q×u:ñ§A£ƒQ·ýø²#sT¬”æIÆU^a72#øé ®öïå?³öày­º&¤ç†MsÒ}l£+Bíý†Z>ùÂóu¬dM°'_6 Ç„oxüfC÷Ì<Ç¥‚J°t+v¼çòÁNíÐýKân;E®©‚®hsFÁØ¢âõì¸P¡&«é>·#™œé÷Ê-BûÃ÷Û@ æè‘·B5—÷Çd, ]Zyö^wÇw7ýþ”=_'_»o¬n°êÙ—u¯* ž¥-†Ñ\÷óDlO$àpy€¯æSLJ<9o;WĨ%ÁxrvªçîT¥Œ‡SÕUÙ’^·%<xo¨¶iFžÚ¥-îëg½·1¯Ò€Ðrn&3¶¯a-Š:©ÞÈØö5i΄VàTØ.S²,¤ÁÒÝ~<„ïÉK\Kd6»êβùB©$ΚÇK¢!L«*"ǼË_†sÂU&š-œ¿v“eÃWé=܉LCÞ:ÿÖN.á BDD0··Ê¼}FW.Ͷ攱𳟬½<²ÖìTª&ÆÚ3QüTÏmùýNÿòÜý/7F.Ù¤BŠÀÃ<æ,‰Ÿ¤Ilž$äé[&hòòs’½ÚO+:жŸ_Z½Æ£%üà1mÊîÊß|“¨ÁÌkˆÄiŠùîiÐ~€YVX²ÄgÈ; X->UÁÄiÆ)üÒ&Ó]öE)‹iÿ‹̤¿Ç-LžÎØ;p Üþ‹KåÜ*T5¥—+· Ü;$ÐC‚Ãó"A“ŸEâ}s¢+ÎÏÁцô6Þ7 å›ÙBf¸œlRkJFn“^øê£¯ ªsF±û´Ë$teÛý1˜UqòôýÆþ¡|Þ+e#ˆÊl8û|óyí£áS¯P1+™³×-Ú¹¹ËgI‚ŽºCCÌsÞê¾]z#±~/+q«–güß¡kCcc^Ù•µhü½"f…¬y¿l&efXwãéΈ]ˆ[=òPγé¨QØ\þäl›a÷Ê+¾ ¾"¯€w–H.Û _/ã¬Ì 9²ðSY›‚XG”¼$…´œå3U¢ð¼9ᆠ§'d˜ bœ„bÃ9¿,âΡÒhb¬°0Þ[h¢ßêw›OT{ ·Z;sõÔ cš‹;ATŸXdÏø¯?2["Z.|wE4Î&ø&ŠÄÝßã%,U8“ÉäÉt®“ëѲ¹âv­(ËBqgÒaÏWg5vO¢7¸”œ(€ð,ˆÄFjW{ߤ“‘¼ß.ç£çrÐ-p÷ÀÇÔÚ”DÒ_á¯]ÞO|I”c°Ü’"Ùp³qö߆DŦ kòh¸ÌíÊtáJ²µðæþB€ïŒÁÏk°~’ɾ­j-×z€%Í9cvS(á1~2½Ÿº0¶iðÐð¼jXĘÌz£Gîõ/µØÁí¼ 5‹84>ýz¾·„ÉI„'‚âµ]³–h…(ð¾Ç¥ÌTˆü¦„bÂZ!l:J¶2wŠ/¿ó`:Ñ&@âžy>Zá"²’o}£Ðôùó·‡cÈ„ ôÇ5ºöHþ¾¢¼ä­^¬`¬2hçÎ"þÉ8TQqß,Ö¿ öP¾VN“(´WúÒ³9‰äGQöáË›I6¶ö%ž9ž#ígž0Hjí Ô#§EÍ;^…¤Â£ç©«þ¤&R!8³ ”L}bÍ•*VvwÌR/ä]ŠiVÍS¬Z÷•¾#Eã—ü7ŠE9XC£šÝt˜z+ÌE†žeÑÊ5ˆáƒIºÊÉß%èÊ–-Õp~Æìë+®M òå ƒ BU)ÕêZe¹âªèUÒgtœ 3´®z±ŽµA¾í5óD(…Q7óZaJ÷—Hcê⟎.ž£Ï¦dƒ:gФ¢©k µ•…ÆÐ¤Ö](ó·_R2;uJh¹z¨:s-Æì²PjðhQO/}kTëþIýÎÉoz-ÙÎÀ.ZF.&E©v/wxâ#REƒ±·¬DÃÚÒ™¾u†ñê7»ƒ÷8džrUùzKFêy-½Þá˜n›§rkË­»ŸØ/i~XN¶Â/'ÎÉØßú.Îí´× éÒÛÞ–Þ 9_Ùg` yÇ{Î"#‰Š’Fyãš 0iúi7’ì²àÚ!¯;„˜;+¥™R0Nê^WMgPÉñ;|…ÁlF³ÁBñiyŸQϽÏ4Ø“ÒHo6ÖïåYâDºaP+âU9–zÉ*è6ÝŽupÑ~5ÖýÒ(ŸŒ¦À)e) ÏÜ}  á–kGQKÈSUïýϨôŠ;{‘ÙŸIS²ÜÈXîö›"%’QVÖîOJÅ׌tÂÍn•<Øý¥Br_ûÀk>Öó-I’Ìb£ka½a¹äX¸xܽÝÒ}3U®w LK?6áP¸å)s`å’iyºhpf†>‰l4§¹,õx­ÌðÊE@§r“{4QÒ¹·9€—T…‚G›*üÞÖ³’Ö²?Òmð‡Õ·kÍ’(¹}b#›¯‡u¹sZY¼µòÅU0k»'Kا‘ðX±mh „~%ÌV!ë½ yd¾«†I'‡bTšDþeÛ³ÊïZ(à¤ÖŠ÷ÐF\¤ *Úýf˜´ˆ~ ÍÛ½.wJA7¸<²[ø†€Ú¡ø¸å"¬Ë(‡j—•*k°Š£o²dŽÐð>§/Ž/Ƥzâ¸DV$lõŒÔÓØµLZߌ$´oóUÙ!>” ü“ßmghcÖ]Cá9s ¼*>5Š~Ëï¶ ŒL•жGy]8 ‹äßXëë%eG¨ØÒþ$k5ê–³lt¾lþŽ„vóÛ®.6r¢ÀÄw=ŽQ‚T$Çø¹Çï…‚ÛQ^@QUúN¢|%`÷{Ð ”*ë(2[¹LŠüâPp² ÍÏ© ’VРò³­ƒ‡,¤æ(Ò‡¶{i~Õ(R*¥b]»eªŠÝ5FÝ÷koÏ^÷e ¶:`’l8E+ùèâŽlRaZk§d*_–rߤP¼ªùˆä!ã­Èˆ´¡¿*ð@~1ÕŠañjDG9T΢L‹q'ð½ªÓ³§@^IK²tf‚„&†H¦tW '*DˆÃ?aem’†é63^9«;¨iPLÊ*ìú–ók§×Ë)H»Lß'f«ªòÆ­S+mzø¨RªÈù÷?VŸƒ>КMnKxe6õ7 ~Ú’6R•¢JámO8¹ÙApcdIéniÔ”±õ^U“yz¶oñþœ¢ÇÎ6!Ë÷8ƒM 4—žØ`6óe[KÉ8.êßz#Yš‚Q±Gm&ï< ?MúNSýÉ÷ñº¡©Y«§!FÙzŽÒj´ŸLªã4JQêap4–Ôà®1Šo?¬vìÜ/~S¦Ù-ïUm€Þ29Å|Úµ¨…`G:°*ÞqÛñpu×O¡Ä ¼,ÄFŸëý±Ó…ýL"CØØkBÖËÓœÇÁ9A4“/ÎMØiy[-²ùØ@¹W¶RKÛä>ù­×íÔ?æ]M)}:òNú'^•vúvÌÁh_9`ÞâPÑÚ0«é$cËáö¥‚ÛÕs™Âé˜Ø¨¤³ åEèØ”ï #M“òÒn…Î!W\&ÝiÒàëcAÒIï%¶‰¥>þíƒ{›V ý—§ÏÚ¼c§{=ã½™À¯ç 6~  NÂ~HC×[!(˜ÏG¤¯g—Ã÷ë?öé/rž0g{N>åa  FêTE¢~ïÏÎÿæNÐ{dDBˆ’çµky.gŒ‹ék5T½7(ô¹ãÛëç¶{ªÙ Ÿ¾cæ›ÆbG÷ÊûU• v©×ETòf”@ó÷1©£Ü$Õ@þô©¬¡À°¾„ò›aʧ“•¯ƒÎe‚­nÃm}úºt ¯gŸ”‡6JŒÍBè—Ú;Vƒ³íß Æ,«#¶{M^˜˜mÇ~p­—ÈLçïÆzwï¹Ò\öyêž®jÀüú…]ð«Þ·ì%RG?eÌÔïšp”Ù×f¦©_¼G¹)LH˜à8¢í+¸H—²û ÕZR!Ìõ懷X¨ ?3«Ë“|oÿåóN‘ÿƒ5ô»Ë³üÒÌIèÍ—ñ§z¬…¢wâGÅ)èLdÝoèd–T¹^u.j‘T!íÞZ-¡S}_Þ—A¡/ß ÿÚÒ†€¹ˆùö*E!o‡‚Ó­V•@M #‚| ¯R.õ…}¬ødO0bœúúè¦ûÎO×TCRn–~ÇùõgÉç‚u}ææRÇún˜ÁkH‹è^´ÏwwÚ$Ÿ½‚ÅJ]„PØn@˜3röåç…¬hù5- ·åÛÃ^æ> ¾¼ß­kˆÉÌø¤¶¶¾Có,uŠÀíSØG6Ã{‚JËOHRòåƒ|3Õ.{=E>¯–ÛôJâæ^wàéF:š˜™/±Óç@ ¦Ûˆ*å:Íù¢Üû4‘F¥Ì6`ÌçAÞKÊvAª:Â[feŒq¼DÙì"Ï,0”§ør’I줱ð ßC¯º®]€vó4§«AÏß&ëšÃ¾]g/oB‚Aª„˲4R·FA¹Kú\jzôr‚´SP÷Xh^âwOá^õ]× K ÿgÚ6‹uÍY¸€/ìf-bMqKLóujP´úª°“Œ$!vî¾O ÈáÚ Íâ¯'D!/«nµcT`A ^ߦ¯ÏØÚ¿ë"5λ??kmpÆáJ¼7ÈðèŠ ‚VÏö‰¢~—ÐÐ,)„¦>‹Î)¬Kš¼·|-ðÈ;¨að5(0SÄC'Íâ‹3Õ ûÆ{þ5Â)›ú¢WßÏA×m‰L3è‘…‚+¥µ’!ZñáÜhê…™÷î´•gæX‘ï§y×M­È [ª–_‡[À;ö#f¶;Û£2¶% ÉBKrÅm½©ðQžƒÚ-»ßhŸ{9û„úæ÷ÈÍÔ«bEòú›•ÍØ¶f;›=SEfíy‹?«SgÚ4Ÿø(“©»\‡CRAtŽcr´ˆçÿx‡æ7ìÒaœìËÞszŽ|]Ù9YùŒ?"ãöA–Ôñ¼>dßîÓ¾ŽŒNÜ ÑÇV sªèÖò*ä/ ¥ÂuJå6•%4dðEb´@rzéÛœ£J—å‘Ù6fØ]UúfÍ.Tf¬<ê!Šõ˜”¹ñ é{É;dq¾Ø2’t…Ôïí¯;/·Míoï,zÅæ=!E›¤Ø”í6wFü·F^YèàˆR¡"6öæ@Xæø^R_£§«¥Ù®kŸà.ÒÍp,­ŒZ;¦}”^_IR¦&L·WË®g6Âl7DœØˆ9Ò¼–@ä·¹¸ñ3—jäC±UåHCy/e0"j£Tÿfªtü§JBC¨Hé\–]aØ]v‰U7Ê\ü®@4íçC#‡a9Ÿ×ž¨#½'œ뮺o(ªh4EÚWÎÏ…Ë©|ŒŠ‘å¿Ós72}bþÞìd}eúy‹öX»Ü‡îÁ@ðÅL‡Os5æ+ß;LŸN†WÕsÃÝfåëÎKÔ•·¯Ì¡jß„ûs{ÉéÇóòLÁ‡娕R„ÌI‡ìÌ×!ôìœÉî€ 2²¥Ôê¸:Q¡Qïo¼âB ÓÇ~¥·¤è¬qÁÏ~Þµ±T"Ëñ,”—)fÈÙN2€H9MܺQR[@Z× -º«[J÷O6ÖÚk©¯_ó´ªßÏ Šªî $zŒOFë±j­rÝìèu)ôoEw6‡³Ñ™§q˜gÈIC?uᓜ¨jijŽpísÒ÷e'…ç­…óßèÅ…*x’Ùf!N²Ü=3ó%â< š?÷@jŠJµBGþ¤¬GØaçoÜkás–#*4V•%ƒìL‚…ùN&ËBaQsÊ1yó66¾†æ³ŠD[^ÜÍ×JöÒ!{ÂÂŒ—¤rÔJnTùËÁÈ´’«ð4T¨$UѰÏ< êÏÂ%‰"nå ±š:¦T%ÌèÄ~ÊÑZ\“ù:äǰg˜°¦û}ˆÞ*q†Ô>_Ê\ZõéË©<õæ’‹¸ ý¿ÅOŸî0¥1/úd?.Û·?¯J¿”H‚5䙾­áÓ‘{OÄ~Æ\n%zY.oXÝx.é ÆûSlbèáÔn¿; ÞÂ×Èñ<}´ö¬›35ÖlÜŸ›…`IklŒ{}ù¬¸&G„Ù²D¤°æ‡¨šÓ6¯»SäÔªjÍ}®V,ûr.0÷dl¢8—&bͨ¾_:,q!~X‡ä+Ó¸MÐî3~oz¢ºkW²õšþÁÑ |µ¨F.fkÿtúS-S'‘¥´V¬ÌÌ…÷I yrb>9Ï÷ëê‰i!1­Tî´öøgQqoŽe—4¯ DßíFR#¼H¸µ™ÛM󵚀*"•’âF´¦œ¬Õù¯våq„*˜ŠU—ÝÍsŒú*vîü A#¶ã5Ow—Ù'ë.éUbBËçãúU=nåÐ÷„CZGåÀ „GÿïP“GÄ9™¬xÈšUmÝÄbÖ#ïæ¸n¾ónlÜ4%ÒëáÊâUùRÄpÄ/®ÓÊö(¤úóª÷@6Ä·©ó)áש5Øã ¯¾:(¸v)Ò—âò¤¯WiÄÊ=rÏב±.kÂóà×1 5|˜dc™`“àõáVGo tÃÌÑzTF²› tˈî…ä%¡8ÁPžÙªŸE:[¦+Ò Y©ÎeÕäG„uU‰~þÎ`ñ3˜Ø©ÀÓOº‰ëS+!˸õÐG½Åyü.&*^V&/ÿ2ÿÿ:™Áüí„~£¹FìÉšŽ/vhz¢å¡L°Á ³šÑtW&PcA¦(òúë6=WPÛ‡†”ð¨çCð%¡Öd- HQDQ+ïâ쵘@¶,¤ 0QµK°ƒxîá…AvãÓ%XÓOÄßåö*CÏ#„ýå퀣U‘H%ûý®µÎÜïÅ¿æ$<1Öq¯¸€ z 3© ;ô¥§ßNªiÇ\~ Õ-öÔ_ž÷Þ­‘ FA¨hË)ðÎ,Uh¹ÈvÌà±— T’´Â,΂J.[Eà¤G¼¦Âê—…DÌúÃMÞérĤ7J}ŠÇîh<ŸˆºFÓ{|ÄjVÄñý´g/ÂCÆó9pZ·®„ÑÌ«?±Ø? º9O2Ìåä0PBŠ«±óá-q ¾¸I±L‘†ð§š!‘ã¦HtÕw­X+Eb2+™p[¡9’‡Žáž§¶¹œð“8 "캱²=5"Zýmìû\'CW´–ç$»€¡–éP`loŒ¼oOy‚bš>¬ ¤“Å"Ü7Eäî̓®yL2™PåùwU,©maH­0©‡é/åè–%)L6îƒa¾ñSžÆñr¾sΣ÷f—ýŽü:þÖPÂQ(æ±×' Ô•ÍLÕØQW­Zú†æt¾¤ 6µ>x¿ 1ÄoëQûvßš ¦ÕTÔÜ{˵ͣKXµ"þóªNÂ>­% OSsôµÎ/ŽMäÿ¾Xop‚p\Jg96aŽ‘)Ž9¾°/ ¢#të[ŸÍRðxa#3îŠÛv0‚ ä’mË^Ê,yÜ5Hj‡ŸÃ{îLKÈ3— F‹•€´;ŸDuù!8äü·¾ÞÚí Øøï,‡ØÐÛL¼”Ù5ÿ„÷n _CêI”RÃÇ Ú{ŸòVôa$wth*|ìám)» ל[‰C]1*‰¸«côO:™etü÷>¤9¯¿r‰Àq¦>ÆT e9¯(=ãØCéø×½õ&  Å—¡Çø=G¨Ý'îäTG—³Ð$åã„%ZýÖb;°È"Ö©š ßgUö3ßó‡*B…såú£ªT@æQ Ÿ&Ý|\¢y¥Ûpý“óÈ0§xÍhÉàµMá5sü»f ÙÆWz‰\ Ê`Ì×U×µ²X?ûówkç‡Z½<¦³cîìшôõNªµ3Ê™(Ø/HTgp«Hùr ?½rÙ®Ã&=k`f Ê$­´Ä×{Â~®Â¤¸ ¥ð6ÖÁß#:&éGöjÚ*´?ÛÄóðh0uF"!õ.¡½½£ÙÕÝ­Iq m4„&•g2ö—²ìîY#J÷Ÿ}þåëäEµßù%T}®ÛǼx/ .“Ëê¾p[ÒHO'&\—p²}¤tÓLug‚Ëî‰ðþÉàIœÍI< ,GB¸ÆIÓªëŒãä(’о¦q­GO©üóoÅ–0kç¾f”¸b¼7(sÆX•d?GK‡8q¨™­‹~ÁºùIÛÙ¬£ëáéZÂ;MäjÜá#¨‚¼¥”/7×aJüÔ?ÐÿÑKäˆvl×ÖÚÙû2EÅ91©å{Ep1a.νÿgHªÈrg€P¾x,7ºÚAmRPA/ˆK¯/ë°ÔÞo|ÞÀ#ÆÓ®Hu±}A$ˆ¤0Ns%¢/·üp ôj¾¢qˆê“õî ”jÀúÜ#OÃÝL‰<»7è©õôþ5³ç¹-w¿it­]Ö% 9ãˆÿ?ãFîÇ蜒qï6ƒuÇ\î×*Ï.gDËù̈ " Ƚþê †2PHNyfù( r™¼9ÈÄŽšðžåòÉŽ%*%,þîñ¹ë8.—uqÞoFøßêöTͨ䨰W—ûz (p_Á~´ùõ ;Ù‡qgl´ø”ÕêqôÉ’ÀØç¾›j»´Ê” –æo‰p›é@¾@¬Ü™ç‡™úù*ùä’_éõµCRŒ>H·?Ng¨Ái p‹~~‡Y³ªlzà>(|íÞ‹c¶×䚃0÷ú¡H÷÷œðÊÊßÄ·ø-\OÓ‡£¨–’¾'|æ$0¿Ó6Js€pB1—Aš…¸àÇ]Ùs|,P[êD€Õi‚ˆöÐ2W˜yÐ/’nqQà)l»o ÂÚJzÛum –6"Q~¾-ÇÃ#Îèî•'Œˆl)>bàÄÛµxó@¾ŒàëÜîÊ%<2ÿePÍãÔÕû=“û´£ÌƒV132¾ïv´•ƒ cùÖËl!ìlû6we&^ìºi™àjv‚x/ùæ;ÍKA:t•4³< (Aûð©H• iò½¾8­ˆk§NSH›i¸ ÏB´âÖt'iæ…ËB8ßY]C5ãŒ'.¼§"Áœï&–â¨ýð'Åöès•›É£‰}²Ùæ$CÈl€°P¤O;œIõÝ0‡ל÷9ذí)­0Èk_ð©§ž£Û(Mì÷•‰E_%y«pï6²hl<×zPœ±=“ò4Úy>þ4FyZD$„'Äód-,5T?SgyÑ4ª+uŒè7C?)j¿ËíqÌãmÝéù’Ã1¿²êXòŠ”U°–¹Eˆ‡®­À=Ä·wÓ3 ù¸Yœid*UÞ’œ2g¶Ó4zÚw¡Ð‘ž€žˆ0Š_,KhÞÆ„†Úq2Ç[š™<BO…{T¼õ°Ê¿0¥ù¹Àl‰˜}•Q²èŽÜBد“ÚIZÈÛIE8\ɡÊw‡;ÃwQ½õI- Ó°î}y•ZË:dá'(ZÅCÉS’rw,ÒþMéƒû[9ÿ™ü÷Áš)ï.çŽç|ê¯!HAk¾[Ž„Fí­™ÉNû’ÖqþÙu9GŠœ½íÓ†ÒÓ_žÊcnL5ÈV];Æ_¤ÉÄ5dñXR…Ó,6 0—F ªùïStG®æ)¤ëKÒ2Äà+­,6zv¢;)EIÄd9à•w²i:gÃ÷IQ{éX^È£Ê``Ã9¥Œ•&ÅÔ—®/45TT†)&³Ê©&…¿\¦ÞF ´dì_L3à­2zdÖªŠ&„ (=¶©’aÇÓ“9…i+ÿh;æÏæ"RiÎÜ]å¯Ç…@SAgãºŽÛ ¡ÖkÝê%×od‹Ÿ}T­(1sØ×¸Ð‰nžúüú;W…Šx% éXÚÃåû}žgÛh‹¤"E]Àµ7«ä‘ÂÏ»šÏ9 Äm!û ¯ôÜÐö•óY‡tÃN‹n–œ!PB3fYÑï‹O®ùé_4!üͦ"„1TiŸ•;ÃAŽõB|(‚aáè)¾æÎâóËïík'Õ¼»(ê§ëq5zo…`𧵡F:3¯^m– ×©Å£R樂nNÍ Ûo¡ÅL·ÉìÃhA—Pf,×_…sù×È1m¢¿í¤y߇·aü¡0©9×3ЊûIZ´ûeѸøu™œe&cë¸Xyž ÕËúàMH¢Œõ9ä†Ò%eðð {ã”=µÉà3Ùò« cìEYï­ëZ³D&§>…„a´†ÂÄËÒȯÓsŒŸÌ¸¨J¨×0®Ì‰YÌhñæuÝ”9Åo­Å[FæÂ) ã]íÇýõjÝvQ•ñF}%‹rj(¦›phÍ‘U©Xd¼8[r Z‘æ’¦'yÉãö~ºô%7ö ‘+üx×aÀjÉÆTA ЖJÕ=wP…!6x@Žô–ÅX¤ï¦·K²œ•otèÈùƒö­(}*iÚŠóOl˜,‚7±Î–£€C6 мQ•´ò3{~nLdajΗOítVÅ58^i”ö ’œx¤˜Ä¬ßdÏqŠáFÀ&ç%äA–]V÷ùÜ™^Òõ¶,(,’ÎD¿pí忦À˜梗aß©VëÙèÝÀ—L#ç$ãש›×è›âæ—µÅ.7§Eì¬ßðôc‹¬t$¡–éÔ#IÞ½V$x `ZËó̦’ÀÞܼ#ô™ZÅ÷`[Ãψ€sÊÐ)ëXr^˜–:¨ èƒJwßpìtx0£Ü±O"ö;çðĶ÷"ê½ë¬.6¤ü j†F5˜8}z+üìÜΦe䤵Ê9ì*&jçm–QNŽ‚KÀfÀhù3ŠÏ]y6£Ö6«:vl·Þk– ÅT:?Ù¨¼‰ïùö-yÌY‚V]®íÏfGŒé×,! ³™Í”8•·N˜Égxñ5÷tG™7•§uf ”‰ð7óÀ= ÂìÀ–—™Ú1ºÆié¨gñšÙk¤~wø· KÖ›•g‚‰HýÆÂ <lú*? Õk¯WiïẲ•}²|ܤ’SjôÁ ƒÏ²4åý/"f~ß=b[º »cXη©6q¸‰GÀÛu¸áÙ-;Ù£ÁØæÚý>,BETW¹O~(3ÎucPêâå ee¯Ýi‹ãMÙqóu•®Îe6&é$ü¿)•˜†³ŸÀPµ x 6¼}¹ªY¦4u›¿0çô—¨‘÷Ç@xµž ‹,P‰1Ö¿ÕùÑMÖ„=ŒXÐï·(¿7ÏJ2r9æ­³;D§ç„"_~3?^mdõ4&²4C[„1-¤4Ý% ³ãüåÙ=&:pÉ~B«A‹Yj€\ù±0È–*?퇞TÓ£ò²ÚÌ^»Íy‰œ¤ãfÁ8ÈžCÚ[„ÎЬÓåÒK!E­g8L'¹söåMpLc(ønM¿~ÎŽ`ZV l°î¬DÝBO"PŠ›‰Të½4jÊ’€6ÀJæZ@«Vf£Fë«A¾yÂ7"ê‘ÆÕ.ã¾ÅžNIV¨•Šìc|à$ý¤B3²ÿ‘ÿ݇‘C*­Ìû,óf¼™+ˆ‚“šÓò»ÉLze?ˆLjÊv=«‰Ý7zdSɶ)fÄ M·Z¸)̲­¾çIÆf©ôY2­µ>¬1â^Yˆ‰)Á’•'¬÷@£ÅÏn[ÍTAºfO.M­É_f¼&>k ”kµÎ¡’'SÚÀr˜äÖI>^Vª(JGœ'+µ!»*dÎù¢??î÷ž›:2¥•øÇK¹Zîym]Ú‡´Õ†¤Öñé¡ßSë‘r¯dOz~¨11dL#qRÔ¹ôâ&,á80´RŽp#T}¾¸3°aã±­pÎ^ £æ‰ùÙÑP=8yEbµZ ¤‰q›ô,.µÆ,\…{ ujc=Ã*O4>vÉÖ b3fGk«jbå Kù™Ôd#&æ=?† tVÇ%5RcдqÊ@`ïàúæñ²Jž °¹5,’i•×’ñ~ª$ÖMy¥;Yyî;ÀëÂu›â"°ò¼ómf†úĸÏì”Ý* æÕަI¹V…°AtÔ„^‘¨Kþîävu?ÖÆ-T楕éaK^›å»œR›z~sÐd\åPîq%Ë·YÙâЗ ‡j+R¿],û+øeùq!czÜØÂ@º$Rfƒ}©…¶k³ Ÿõ²Tð6¨Š:T©;bƨ(Éç¡=lšÇ‰¦@ç“ÌÈFfuyœêè±ÌKf’ô†•mTŠ2ùkª’Êl`¸më½­‡îªÍj°‰ €¹ Úoй ‚¾užjü˜yî°±]ø®Â|¨÷Q’ü (CZÀD³°6}ÀX¨Š;ãØ[*M|Ç Ï;ìÛì5œØ¾ÖrÏ(W£8Fm‰»Ù!1S[ºç^§c—ïüv§A"+»(tg–ÖIô”eò¢8Úô&÷à=;p–ϨÎó <Óø÷zS{b€· ÇŸþMEÆÍ·¦WÅɦ“ù°Ürq‰g3óô_í'xë8Uå6å¤Ü´­ñÒý5Á{4Üs {=¶^…¯*ògíkœ€ýÝåÒóÇÂ7ƒIön!¹I—H×¥ìÙ™m"€jÙwÁ­ý¶ê­1òÔÃV´Ž,ˆ™hÊ^.|Þtkš]ç¸$Áþ:=³ç¡:U~cÇÅ ®€]•âõT¸¬ $?Þ¢ú§F« nÖ–Âôë -ü÷‚ž·\gý½ËÃŒáz×Ô°´:‘H+kºkíLÜTâiù?j2›TeVv÷ª³KNiw‡†]Ûp®b.Ñ"8UÊÂW0+~ˆ;H¶_‰>¨‹p¬¯öª”ÊE+zÁÍËÈäí¥Õ†¸îCÄ¡è™gì˜ß¯ÍVüÀÄ“Íö]‘ôÆH•xÀ6”0@2`aÃ&ßΔÙ>ÙkæP¢št‘›xTçµzo®gѲsý¨ðŽDŒÃ}oï‘åi¶8;Ö°Aâ5äh~¡sÆxsGûMª\ï]à‡ïf}‡­ö9ìõžÏïËÓõ—âÒ §h*3ØÜÏÓ·­ôa;¾ùA˜Gäƒu£»ªO2£Py}ík™L´04(ª%bhL+‚9FQƒ8‹Byá…3 èXqÔã‘׫Fs±ÔÉlD{f±øUOGøë­˜‘‚áDf+'5H©ˆêÙ _4ƒy¶u¦¥pj0äÅÂå04m¨ùÁV”ˆ±n¸Î[I­¢/âZffµüâAySüÌž:&‘¶Ã‰ u¾Ô{Œ™çóúÂI†irp¯Û®2/)ξÁ! æ¡®í Š¥˜Â¥ø}à¸xÝ'FH™×~¬´÷¼ëýþ¹qJ‘Ýó™î i›Ì;Ÿ÷ÔíØRÃbÖW®¹°÷ôxâŒS:|~ËÅÆ¨öÙE@ X£¨Í i1'7*òIŸ~呺"–”8póÎxäû"¶Bѩܞ’@‡#'S>îgžˆ#SÊÖQϹ€#aΜKÜQã MšrÜÃ8ðÊA¥ow%å¤^ÔJÅmo0 WæҞЬ5‡ü5ÿG/©á‰.Ll0LÇùåСÏdcÇyx¼>(lûÓ•ÝiNóf¸fõŽ>Z[5{é¼I3õÿ†öb Š´É©5ût‡n•ªïKvð^AÓÀ3dÚL²¼1껯͟ ýÏÆÞ´vÞPëE›BôO)§î:(R¾Ð7õBÜßdÝ_N]gJÑÿ0ÿ³RkXÐ6ºO¦Ì³sˆ¯(A‰¤:U•‡y‚ÿ±õq‚“LRQ¶­d˜ÙÍ(ÿÙWîäÇr™ÓŽ2¹ðƒ à ¬ààxwÅYƒbû¹ÊSŽžÇ5.û¤Ø¢*¶—;Kc#‘÷Õ­zrhÃ@ã†þãú%JuÖ¥pçeQìç×­¶’£0Ö®of¡%ömE&“„"þŸË4àÊkKsf‹¼m¥ W>B?àïðÜ=¦ÇjÌçG®E 4BAŽDÉÂpÚ}¶ó¯!ï­ð52#&"l‚! HíñDyÐYˆ#8m:Ø´ß­ôIr±O|çžÛ/ê³0˜Êˆ;ˆÎõSƒ¸ l8²´sMò”ØÅ?»ôþé T9åÝ^«ùqò®`·¥¤=O(™l,4§ýqxdÑoÞ\Øú4Ìï.2žRB9›[ÀàžšÝ¦sØ߀ZLŒ |˜:ÅHÍhN«à5øÑÖÔŒÊío}ˆ«( aSÊ… ´Æ‚<¬EQ;*™®Äõ^ê—ª“fdD¸zcYãOœp·ÞZÍ´®>+F÷`æL]}pi°JyÌCʆ‘1H1åUÑ/ŸR–lµ›|æ¬.©Úk«Þ¿ôùÿÙ˜-AW ´6S:>[ž!%ÞÅšw¤ê<¹LýõÔbDÑ\é@Sl7ºƒþç3q?œ³¨æI WµÁثӫ¯„xy½ªš&M¦ûÉó¬PSñÒ½dzæ¤MqUöYÀàGbÇ—´Ë Ü£5ôõvBúº Õ‚ÊfK“ËþñÁ½w÷hÜg”ñ `%ß·–¡Í l¯6' ½i‘^ ï#;¹5é•`­“ªÄae$€ìùߤ`!=¿x .ˆZBÞ @0›HŸ\[”²åß¹n´B1¹cÀ¦ Ù®8e.úB\…è«}QZý„G<àÃÔúJÊ .B·}ßJy`¯¨yVJÏ,kW]Ó D’YšækÝÆ3ï ¿À«œ³Ú&ä £¹uµÀ,æÂº‡¶dr¾Áš «ˆ]ãº@õE±ª¢×5³pI]™¶Æ*Ä#pK÷-Æ“˜ëZ@^HŒX¨qødÕu$ØÄë5F^µw¹¿’ãËÄë‘þÍqZúIÙÄ÷ [}ÒËHtr`³®T¿)4–n-a/8•–}ßÑÀaH«öÃ%´X7â‚«yKˆy¸—”¼¼φ֞êKfàˆÛÚè™ýXŽuvô°éï¯ê§ˆÑ¡pͯ y=š™A^fZ˜8x2Á0®õ–±‹R“ì”®-@Ø2J…#ÑæÝJKOùȸs<½¥’uÑÆ' OÕÃÈ]üÂqô{ák™‚K²ødFJ|)½+­Ãÿ!ë{¸4 ¦ìüÀF“UËH`@V°gÑüøÉ:"V¼áÜÜ s¾´Å±qö2ÝßA­†fcÅspªÂ}ÃÝÜéÌ2ásT·“q}{VðHU×j·€Ð̓SÅŒu_~[Æ÷¶snlÛGIÝ:åP³ØËÖhQ3kaØ#Â×›• ÿ‹Þúì›Æm´ÖóJNEoÜ…÷ ó,Ù&=S°Ç%½¢Û¼¨'{þß±]«v@ì|§q… :J4a*BIo4X.‚Ìùclbôî=ÍZ±ÿ{?ҩΖQ‹¿êB©¼˜0"ò­Ëò´ƒs¿Æ±*6àD¼",~°ÃÔÁ¶~¡’㪠ÜI‚Äe¥YIugõÙå´ô³%g{xÓ]hƒV p(¸,"w‰0OÓ»E÷:+hmS¥ÊU"°ø6 à¨Ð<|Xd¨þœC*çgކFë sU'¨oÛ÷‰*y¶3º«ž! ¥§(28á ÍtxˆsÍ‘ûÏ›:A{s'pm6 k鯔±½aX±È'šMÊÂ-_?ÌLúܤج_å•ݵò¼á’+1¼&…Rx߀ٺhŸè™W“mûÝX‡ûAX á±¥ =e˜o&}Buyy˜]–ËÏOP裞ʙ7ž'ɽ_H‚‚ýìÆoysÛÆ`cÕž‡Ùd²ôݜ˜\È5!7UÝ{òél¯MkÒöPŸ˜&6söhЃ[Ly2bd³™4i%ê´’åÛôG¶vQ4™ì’R“‰‡"†Œ_:L’oÇéÔTúIÐà0´«v#ÿöòÍÒ!ž°ŸZÕcL¯Öžd8[“ió%&m3ƒ<|,7?˜MF,1°`ÎË?èåÔÁ­(ŽŒáád¤;ô­sž«²PÑ÷îí=ÚËWKm ®´ ×,å2ò,ᇲåïz—Ô¹¯ð#”Së&r XG72˹íàÜ9)^ñ©^‘kÉW` ‚ËôÖFçrÙÆqD#×Dõ/'ñuN ¥>³Šq·Üæªö)HÍYAgQà›ò¿±Äamå%¾ÑSìjˆ$>÷h]¤( ±º±< ÿÔbÁ¨Ïš²ÃŸ0)áñ+">k€Ëod¼]¢#dª>ÓgF‹¯9¾3Ô±~º}`Sv’Aöê|Kz™a¤q®¦ò+¶hŸïay‹¸ß,Ð)±™Áí¾|!Kdâê§È§µŒÞ$ï ¢]O ‘úÊ'͘/©À…u†e‰Ö¯ç.Ž”«z“„43Æp ñ Ž !ßù‰ÞZd‡¼i]¨yA=*Y̪ÛÔÔÑsõAå¶tÃýÙg„ˆe /]—ã‹×öøÐF‰Ü•Ëó[ÝÓX˜¨ãÐb£×•–G…ÍÍE¡‚@a ë–øØZ–ÐïÛ‡Uò„(^úë¤ÁcDÍŽýCð&7ã0 ;ñû|ùF³7¯Eƒò9¹oçÀÅÕéálûC¶>|š+T¡‚sí‡à¹Ûæã=.síË‹±7-Ï5$ ¯¤BLéEq°ŽWñjë\Ò×Ìi´––€ÆµÔ™Wypl8ÿÿA±ñÙáMVÓŽ&áð­>9„ɇ©ÃÑÿ„í*¨Þ@ôçíá c2¢®úÇH[R)H'°qC!—AsëjçñÏUýö 7-p£¼IklÙ6}ásèWv—ÿ–‚¸×:@Z8‚@JòÈ·`Qà Ì-i‡ŸÄÄN¬õ%XË[XÎúþëDoè‰à:dɿʓ’xÓÓõjš­·“ô#ÒÈe*ûAÛP ZEù7këí@vKÒÚŠ¶0gm´üaß›“ÌcG[»Œ-Øìú@¨k1oÚý¿©½WÄ5¢>·A‰ûsVØVi!Ë3¥oeÛ,mÈÌ}™Ä$Y{⟽{«!æŒý|Q Õj³ BvÊQà÷‹$CÎ"xøŒ–;iY»ãómoØ·‡±njxZ¾}>ÝŒ 7Qó«k~'±kg:‚hßü?ž7m”ðo(Õ¹•£d…Wí¹Bm T²RB¡ò&¸n xÜêŸFÇq“½/kO=ñ°ŒÚXá~»lš’‰Õ6°V¤8¿×4ÊÄ)6ÅA¤M»š%·å¶[y& Buý™qDZ’Ø€,z¥Q"”7o®ÓEŸÌÍpå¯ÝxË=‹¨MœÅ/´Ï 4ø®òigz©Ãƒ©4½žà–ÔËM5$èþÈ\VÂȘùùBî´øgŽ$€~оÿè`'Ÿž01åY³ÂNuÁB©Ü=áÃ$Qmóé ôý,²\äyÉSpÊ›YÜUÄí©Is[€”¯V%8K~sÊYAú÷lêv^“$„bÌLëW®ÃBY4‘g¡ä\ÿ?fjþc {ÁÊsz·ûJö‡'2J±‹¾Hnò´ÌT'KûÎw³Hå9[ ¶U/;UTíÿ›kT¢ë:›ÅãË·»b¥ØP_Ø—æä8¾Ôv/)?êkCÿ7AÎêÔD¥Ú•Æ­÷‡iMGLýSêkßsû392è4Ô—axøy²žp«pÒvÁ*«¾ ÷¾Ëª¡‹¤^÷ës¡³kV¥Nì³HÚ0·‰"ãw¬n?tä _lª}<䌶ŸTÍèU•Ü» Ö[b =zLj2Ãq³´\vÝö;É.Dhªêšú™ÄŽ/Oæ¥-Ʋ\Ÿœtí=ñ¼#¢_:$äŸ] 9Þ§p´}~aMÑ>>é´Zmâžâ*ŽÈv ~G…ÆWúª<º¤ŸŽÚ&Ä7x ‘aƽ;BÇÄpñbô{+¸„pY)Lîóœòßôž:6² ½ÍaÒ‰Åô ælØAq+#ãwFÖ¨¹å´¯@PLu]·ÙAnÿ1 šGð¢óæ?)(Pñº@µžkÆ4›Ã*ƒªbdÐÚO¢¶ßàx|©1%fµ¹NågZÔ`iT„O …?Tåýùâ´Jè h {ŸÙ>vAµ“.àcàŠ~vú‹=IXà“sÐ~Ôä:‰TåýúÑ ™§“ö¢Iñ5!ð%˜€ï›ÿâ°mÛcÿ3ÅJ.ºA§ôy¼ú*üš5°Å붇GÁ£—‚+ºoþuÅX`™jš ìä|$L`”xó6'üÏ Õ­Ð$^~½×k*¥[|¡!z;KÔxHƒ›ß0ÏÄàÒ€² ì’ø ^ì+sš››ãˆE|)÷ñð9×^›‚£¢s¶,zu0SDß·ÓŠŽ£2€njŸßär·`œb¬’$Þ3õ/EOê²Tù‘´KmŸØ¼l•7+xaÏÀìÐÎÇÇÌ-l½Rýeý(ïL–»_ê4Ǹ¨˜*Á5)s©O'Ϊ1ÞÚY¼þ±B}ªG>ûýFH¨üdùgK4Ï¥P¶I6â²ÖŸ\©œ«s‰{ØöF†fÕÎâí[?ÇÁQ¨æ²øÎ!½kuÌy@Ñ—j`£²{`'ìu«‚cYßǚð6§ŸçG¨ v*”Ö¡ª ’uÂñr#Œ­™ðôÅ‹õP£2öíU¯³–@{IÒ' á/ß¿ Ð"ÒtÈpó3aþr…Ìô1þµ`V©”qVÝߟ ÆÿX"°ÿ÷JFQ1ÎHšž)“rŽi¹æâ-ÅÕÂÔ jÝÔ$!Ã,€o®M‰Í–y¥fPB-lþˆvéNë!ͦGl»½8;˜•¤3_ Nýh•¶ÃB±Ø «QòÎñ¤tl·Ñèvì”G?@œ’<$wÈšdåi\u³ë²¨Bõ‰ œÕ›,‹*1«f©6.ÜiT%þÄU/Hr-.{ö~ÖÔÙBÖK­EÈOlE’í@ N-JÌ–qöTݸӺªÇ‡±_Î_…w9ðBMGímÚ4Ÿ½U,Å5ÄÅôzˆT ؈‡ëx0ë·“%8ʨM¦²Í&LâoEnÐdR§„„M‘ªÆN阘^ñtFãK0uÎL42p_ÇѤÚYì¥þMO›ÕK.üÙ>¶æleÛœœæ î”óïŸóïeÇÔpõÖr;Ú:`øgæ±ú±ôÖ¥þFVêN•#ZzW×÷ h1픣-òæ/¶BE,q†MÁC7ê€2€ì—4€ÄV89 EÑ1¯C}ˆI­°Ûæx§ ²ôçô`@ ¡ÃZ ó/êá¤Ã猆)#¢üßkûÿÅ|¬pUE-7zãðAs¦EÿåxrYvèS’]x—«ÿµÑ¦âƦ3(e›N¹4"«9æ ]®Óèn4kI O`ªì þE—kÔr5 §pˆO©%mioº=Ayw~Äò x2$×›¥â<£»DC+€šT3­äD‹uð_Zt:œ”À¹$K!U³!§(žÂA1>®W䚌¨ ŸU %‘˰œPr|Åf>Ûj±ˆ#h`3]ºg_DQgæ±ÅK.t,Xúíõ^Á!WHEµÜ®ÀÂóRX¢tÖƒbË··êÐ?±FÔ^ÕˆÖÞ±äâbKÑÆ>VÑ,8 çX÷ô:RLÚœ¥ŸŒ½Ô¡÷ب»ŸM5_l¤H¼W÷å,„„¢> ?!u—â°1Ìßð#Á@·:{Õ¨n<èQ$»ýêümןtüò7é@éaGu1ôzs#[qò^ÆåÝÓã#hÖ#þÇ9ª†n±†–+Û!ÞæNß·“&7`\7Ž@ƒÿÝé?ù²¿»zÊõÚn ²¤ªp Þ ¤­ž¢*EÇ^80p,àš¶ø#,þú¡XìlâïîÏ/3gmTfû[È:›iÉÀ9P²ÛѼ;YßÞgãr‹­Îˆ1 –+ijgæI=‹¼ð)&÷Ü9£2_´W `‰‘—&U’PÈG\ƒ~¡bר–÷q/òâ¬}Ie0¢:Ñ€mIÈ`i†þxù½Ö“9n@|”Oëù:gOå5˜É{Ö}p'âoP-ög.þ=Mº/ y²x×ÉjézjêÑ ‡RÉ1 ’‘ÔÍHD‹Ë ¥mÂmñÜÕ‡þ9 Se@óN)€ÿqç×óô\ЇQv\’Í0Ö$DΟô7|íÁ¿Þø5– 'È.Ü%Y½ƒ÷.V^„@˜"ýïb5Úˆ¥‹´¤¿Ï’ 9 ‚ }yŠl²G&]WØgqÚ5Á4¥,•ë± tEågi 9º¯€€i~¢šë|¦k}A 2áCÙZvCXkQËBoµsU»ÒOÿ×aèbjOsÇö·”qµCmS1†:‚ÃúPï ì³ã£ìòoCô¤¢‹o— ºD÷ÜG &6¯>^mp0q{9HPªVö½-ZÑRq]Ùcç0¢§Té¾²øË¢€ÈëôË?ˆ(‚êª~~ÓZg`ÌV é­M!Ë÷ oa1Ãc÷0“û¿·A]ÜO»S…“d/‘þÑtBâcó¼ý,?Õå×[ikˆ€K]M³ì?]=DÙå÷‰·‡z®¼dCr^­)"äÕ‚jù¬• ÔL~kìª}J’ü«1kO²ÊVÅä ¦îÏYJxDÚù²-cÒ˜[:ô»ÓPìqFyœeÑTts™:qœj8úÅ%ɤ#|øƒqqZCmÔï¿E«]Tᇀôü…xÀGQý•@é‹ì½ÉHby½´¥c¤îíÃb+ȼ+6¡š@[h|âI]Da8%7ò°)¡^^w·…¹F80‡ØV;flZT¤ ]èeÚ=/xAˆa¡¼“)ʽßÖ§ÌïÍMâÉ6˜Ëí…ºØöñ®JCJ¾ª~PƒÈ3îU8xTƒ¶Ë;¢ìXˆÑ.^(µÇ yin,ks* /ÈksùÁ Å3]ú§HŸ.ºe˜[¤\Ç| 5“3v«fé{ÉAH”—i‰TJÒ£úö×{œëý+ÐË m¢l; aüE¨J‘sýk-_“!$×» «w£~ËMHƒ%Á<–}Ò]ÂèZ süV­æ¥»r^ÑË9U1Çj¼•Z|. QlÀÔ øC§:;óHúálŠÒ ¢U '^›îÜ â€2»4{’gÅ·2„ß CŠøÌØ¯mõ³…µž9XÿZPÌï &®ýš Ty!gø‚¦!ù åeAgÃN­4z=÷+ÛlQ)á¹3³A?¥¶wÕÛIƒ‘qQ©H`/À"ÈA ‚È{#‡1zÊÁŠP"xùd"wï»x½!«¾˜8Ž|óKzfWy{ež÷‡RqØ®c—‘s@¹¯Gé? Çø1 8bÝ6¹¢TÊS%éZ½E ²ßLÊ»¾›¯Ÿ°¦Ï~Ô0üMÞózŸR%y7 ¨D\œìóG0k^Xù7\Ôk0ïG¡p#kF'IÚYÃÕ¿'Цý.iwE$™|LMw@â#ð^îw¯;¥½¸ÏdƾÖC²ËǺï˜33B^Ñ¥ZóçÉ=¤GH-ô¨ÂVCFØt.9á)„±Ô‘£ ±ß¾À¢  7PÔ Za^Ѿµß‹-th("`¶¼#Œ‡àÐ-º3½M%¨zÒn‹wZ%Î'ƒq¯´B )!m4ãèª/ýâºÌ,~ÌÏ7nj@47‹ÁÀ?r@â¿$A@À±”±PéMi'‡Ð¡“l›Ý”Wî^κH‚І3Âÿ¶X\S*]iªdYË> stream xÚWTì»§SºQaÄèÝ]Ò JL`ƒ1`t—„4‚ !ˆtJ‰„J7H§Ò! !q§_Ýïï9÷ž³½O?¿÷ù=ï9²ó+9Àí êp’_H$ PÑ5€@" 0hEºBþÐÍ O(&ýßì*‰Ö©‚‘h7]8  åå ‰K IHƒ@aHê/G8B  ö†:tZpÄ“¨w÷E@œ‘è*\öÜ!)) ¾ßá%7j†tÁHgˆº¢=Ø` ·‡B¾ÿJÁ%ëŒDºK úøø€Ý<à'yn>€é 0‚xBÞÀ/¸=°ä70" ÀÄêù‡Úîˆô# ´Âjy¢¼`]`¬©Ðw‡ÀþpÖùÃðçÕ„„þN÷gô¯DPØï`°½=ÜÍ 󅜎PW@_]G‰BòÀ0‡_Ž`WO8:ì †º‚íпԕ `4¾?ÑyÚ# îHOO¨ë/„‚¿Ò /Y æ wsƒÀžD¿úS…" öè[÷ü=VÜæÿÇÙ spüÁÁË]Ðõð‚hªþéVý£s‚ b HBR ñ@Pö΂¿’›øºC~…~©Ñýú»ÃÝŽh@¨#ýCäï ö†/H ÿ7ü["8@í‘;ˆFôOv´âø‡Œž<ŠX‚ÐÄ€~}þ>Y£¹å‡¹úþãþ{¸‚÷M´,ÌLyþÛ¤¬ Güù…A~a1@HHJ >þ;ËßøÿÂþ[k†þÙ蟌š0G8@êè»û †÷Ÿœàús]¸ÿ® Góàú‡öV 1=úKèÿMþß!ÿçeù?hÿŸý¨{¹ºþ¶rý2ÿ+Ø êêû§Íb/$z#táè½€ý§«9ä%Ö…8@½ÜþÓª‰£7C æäú÷%B=Õ¡(ˆƒiïüþš:½+1€{B=3~!è?lè]³wA?%žèIý6AЫôï’j0{¸Ã¯€°/zðhI à/„^Nê7¯‚08@à 8ÂD¿æ)*D?V¿”¿etA¤ü·ü¯Bö^zù~ÝÅ_òïM‡@P{¢¹i¸½LÄ£ºˆ¶³¥Û>ük#r“À5ó§Üüþsˆ·^¤øéÜÕ9a+ˆJéýïÈ¿¨q(Î3_ùo·4àG·¦¾ùpi“l4¾ö†hvŒ¶g´h[©¾û.á~Åõ€+³PìÌ-`¾‡—$©A!Õ™Ï T}wÙÂPÔôšázµ¸6ñeÙ‚i¼UhÉG`]î=+’ÿ.åŠìãÉIʼÑf­d^¢À‘b‹UáÄó)¿¥ aÏNv ú»Ø'”CãþÊZt3þ¯ŠWC™S´o‡?¹¥ ¹npù­é!6¿?äŽJs1Ð bSkÆÅ¯´ÞKq+aIÁÍ=XÔZAi~—h±óäÓOÞè»JÔáTL¾dY·£¾³Gûp{e}¼a„KMžT¤)£/»&ãz(ýžð¬Xß8¼ð“1¾Â{©¶üÑ•¹O«™Ç5”ygñÌãwø¯£q–âù|è%1t< §›ÕÒˆ=îÕ¸ƒŠä£I{׈6ø›ÒëõF2QÈÊìYúœT^k§äš-*‹Ôý‘×$WpOŸ²Ô CÓPîœ&ɸª>ðãÏJÁ½Þò¨ž„ƒ÷ÂÚl`sA¡Yq ûÌ7‹ÁqÆÈìÜÇ·&´Ûè%b„Ûs+UžÏBA4nB^ aátS¢±ÖÛßæŸV; ߨ‡,º»mQá7›RV“97çOÖåu1°û[Uk9àKòvç«É•tÞ½5 š%'&ª§ó4,EÃãß«Žr/ìN<ÁKÜ —Mxͽt¿IRz \Æáß#îsqà%·÷6Úã<¦I’}ø±U?\F]»¨ ÉH%ë›ö?–ãÉ£¶“½ÌE¿ü7MãcL‹€œíKç/ñž¼«<© ¦ü9ÕÌ+dV®¸îtÉ©Z:p+^.q!'Ül¯æRbuç2•äÎÅôØ_Ñ fºT’9—¯  ¸Sü–Û¢Ï~‘f¦-N.0)}T¼ó!ÖO'Äë£#î½jw”Àq'>«'Ëù´ñ+÷Ù:o= ‚¾L_Éô ÀìçÑ‘c´Ô6»nU%{›c›5ýõÎq>æ^6]_¦ÄßYÒ6¦È5%šõZßyPÞ,¬l#ªlíÞâ~,¨m”Ö‘Û[Æ-Ã.ˆµÃ´‰¸ioD dˆµ>ŽšípëG­ËgÜšzÚ Ÿ{AASÓÉtŸÅòKØÜl>N¢íy¿7Žã÷€ÀOFI„¢¬q´xAÜx^4»Þ·VÔØM˳ڭâ^›ËlÇ?gœÐUÞÃ>]\²—Tià¢Ð=ìûÆ÷&F4²•J÷ÇÒòÁ`ЇœŠ;à€.£YÑa®«·)è¨_IÈP2L‰?`%ÖNÈÖ¯²ö !)cá奅y¡@/b¿ôV~Ð×^ÏŽ,Ö×v[tÖF¾YYYˆ>U¹³N¶ñ÷V…Ÿ¸îºÜçLªkVÎ}ýŒëôýú 󦳓OÖÈά¾Iù>`nû£îüã{Â~¡:9΃¤¾é%çÒ÷ßÃ]zžÌm«8ªå„Š]¨[?‹óÍ€9Ür  ÃÇäêâ¸þÖiPS¬,õZå/Et¾¼EøHÿé”O*“bTŸ@{grW‡þé"Ž÷ê{|ñÔò‰‘ÇñwøÄÒ°XyU{šÎ:²ÖøJ¼âëZï´^K}[[èHÚ£ >}$Ë"è*\þ"óÝ×­1ÆžôÚN§3Ì”^Bº5BêåIÍçÚ£öVÇ9;úÌ—¹%Q“I&[§4K?©¤rï¨NpmÚcMJí<õ„Ì0DæúìEKJ,±ÔÔÀ“=SZèíi·‚” õŠ ˜ÏºîÝwêÆgS®ŽÐ0%KžG¥C?祵¤í_:/h¤¥%‹§I\“ eʱN'p:Â*ù…sL ÜM½ë/”Ì{BEdOð=Oo´òàs²Þ›j{¯‘Ä7¥f¦µ™æ«•ª(+ã½=VÍÄ*¼uoÒà Í¡2Œ… ņØ6\g™¿%cކãÝ´‰L.ÛžóCÁ/mšuþ>¢Ð§ú`ÖŸ7ö­¨òV[€þüg¼¶å’KŸeÞ;X2ö1aÝ^¾Ê;2ç¤_=pRÂL^eÇöîôbQ¥ÊÑ*– |©m|JÆ6KÚCüW´¸w‰ç¬Œï\“ê`êf\¹%é²]En>xÜЖS>Î>–¿S²uŒs»'à¥xKVóZVRß'Ôš™M¶]5ôx¢óK~DÌêtµÃ. …ŸàVÑÅŠHÑê#šä"žN®»Z˜ϺÙ9«‹*•¾šœ56Ý,C±6vÛ= µ¾O:ÕºžÒ~z÷©T•”‰ìÛyÏ´·°_DöåIÑZjú?5¸g #5ò²çàÚ+£ý1 Z,óÎ¥¨;ÌÏ“9ðß¹Bá¾± ´ãØåAÌó÷(Ê …!ƨUÌ0I¦å·á;YŸüÞtn6mäàuøÀøÌ ò©«üžaeÄçÈLóÅ #͆ï~‘&¶šðzÙªœŽß½{dÊ¥â݃í£po†ðò&C5¯ˆ…ܽ˜ o½x¬fbÙ‡"Ã(ŸL¨‹(n ã®ç]mhÊ"Ë#¨íGE‰&5–’&‰kÞsª«MsFÎÂêìÖo°r­ÒIq¶ÇÚ¾´$-ÓtÙ2˾^V%ôÊ'gã]ؤ—‚ããV콆ÖÓRr9ùйÇF7ÿôoïÅ'¶x;ÂlKßÊ}ípâgîį“dWœç~ú“Á×jÁËɨDœ`²ß;ÒY¡ðúZƒî¥œ”©ðRÉú§pÚú•š«—LGIS÷ˆ?wÁÝœçó8êÆÛý¼$¦oûÙÏ{GZ©ˆ[œeæÇ41 ‚ðCG2ŠÂ¤™àªg}¦o+éÕÊÏÕ›}á2 ùë» Ë  ncòŒ¬ƒl½é=5$Ô‰&bZ,<ŒgÁktçÆtŠ%ºël’Ó;ü/KÎó}Ca¤ž-Ÿ§Nˆ5ÕhDÔš,O}ì0 Æ?¦$:-ÏÜå5Ǩ5¶dÔßr¡I6psˆÝä£(çM3£ïº*94Ù)ˆr9ó=!7’e'¦þºBøIøLÀ1ñ£™6/tV®XåcþýšOz#$R´leuŸƒztãNNrMj;”ýh¾Ï·äR×ù•—ÎXSRyÆ•™lO(Dd‘Fjð÷.Œ¤t;BÖü*׎BÖ¸EÈ’²÷tÛ~àß«|ŽºýîÆŒ?¥X€kÒ³æBfu0`ÅOß$oê9þýí )[& ܈[—ìæsEûᇠãrŽjÀEúŒ ‰îªÅKnÇ~}¸¥Ó¬?µÐDÕ½ž.ÆõëŒÖNãÅAiÒ˜¹ùà×Jë¶âç»Ïˆ^–=0kg+8ÿÜڜݢ{Yx`ýòŒ§·pæ…ÔŠä9½Âmþ3§Ú „Î>’]X’¾4Áë' ”S€=¯§>ÎU‰?óa‹6û¥~¨°ñ¦¬x:Ì>_ˆeM©Åï¶Ù˜Ñí ššYo¶fëxM\:átRUO¤ÉVúÍ­Îc¼“ȱ|C”ÄhÒÖ{Þ9}Çp´Vx$Î}ÓƒzVæ»À¢÷D¬0ΉoRZ87.;fO=¡øÍkJÍv¯jcRyìsJÀµTÝ•ÍÑ@ú0ûh8,7Œ:Nïå‰ÙèFíÂó¢Q¥>e^¬wŠýœ£ãO£<ß…GµFÙÈ´âgU4Q?ö8á²)½jΕÞm˜“æÞ £e²'dTÀ±»Fv è¼Ä èüh0çÖø®S0Æ«z•MB‰Õ´ü=wc„‰ÕŒjû ^¸Ÿ7þa,xî}ø6TUÄÅ4ýزsb†—‘o»¼nú===ß 6>ñ®(p%š—êçew­ … eÃuc\2έøË®©¾Bo¹–ýÀͨf•˜²œ_[ñ¤<ÍëÇO°SË’ø@j¸¨}šÐz«¾ñ¡r#‹ƒ>øv¥µ9ЩÓ~Í$ÿ{Îr^c©μnŒpWËC½GÁ{¤]–zSŠéù<¯Ü]—asv^Ô–øÆ&,S­²ÔXö³V˜ÄG…òIub2ë$seƒ¯j¹VÛ°]ð»X‹ˆ3 Šbå©öW™çq‰ci¾ƒÞ!éRâšÜš¬„ì,ɦ_¿–l?§púmu5P„›¿°%%“e>§fñgxœ«ñr¬ ÒÆ¾Î¥Vï¥Tó·aÌuÃÄÞË2ƒø,ýѴܵl¼Ã©<á3QààQCpE 0¯Âp¯u‚¶ZP¦+9?i>ùíq„±È"tmRk]UÆçž}# aìÇ¥™Ñ#c{Ù›”X/Jš&ïÍÇ«»|(´õ­ÓÝ=ÖæKuâN%èjr=œž¾ÖVqÔìTÜn!óD:$2hÊ•âÿø‹œ‹G¸ºâ@ SˆìkÎì2§´ ÷ô²µ(óß¶8Êþ›ÎœR-8|î!Ké±)F]l k¾ísægŸ‰ús‚äŠGUÆD",ÛB’W˜‹4Ï/Lôg Iˆ Ãoh˜Ÿ§ù.r«Ñðtþ”ï¨à\‰^ ‹!ar& Ž0 É\²åÛ8ñFˆ˜ÜM4™ô_¹y+B£ß¾pµŸkÓ˜(»=1©ºÃKXrƒ¹ìL³Ì['ÂD5F%ûi *°uàsQºfr„½@X•+´éê¥\yå^ù$“6¼"×…=·²¤ƒG&Vol8Àf®NÌGÍXzÊ6ñ³~ƒ‚[44°Ða¡ÐO×ÏvÄfx’Oy8úŒ¹°† ^[O‰w? ŠsË>öK~½£ÍUG¯9F9ίù8œ{djµç†Þ*…D§R]êÃUÞ…ì_ò ‘IP öøÀé0ÖV§úÏ4«ˆk£e³êÔ Êx˜gV8Öýœ×_5e«¶iÅ,Ñ$ý·g`Tíµ8üLÑrc%Ùª=]IívÎþ™o)ËdÒ© DÌ'˜p°†â*m½ý$dΣ±€$6Ûµb²Î{‘ž‹Ù^¬ð&W÷Î*8†üéÌkmHß+²J*–a>ÿëææeù÷ë Éñ- ΄G ? ÷®{pžÉ¹_“›±¥vyIË¿u´%eµQÎ…ÃÒX|ôÚ3‰G}UÄ^Œ"ìæ1žHüQ|¡Ài&7Å4º}{¶ª²€H9>R¼uàÇ.üÁûCà+ÅÒ,ÜM¾E庇Ÿ¥±õºµp¨;ž߀Ž$”F¯” ’§JÕDóûý”*7–IÍŸ †¾m§ï͹[´žºËõûçÁƒß túcã,;©÷Ò¥ØH4©]ýþ>½Ç2ÌéHÓÿ½ƒŽ’^JO0a öÈN” º‰R³µWî´wWhy‘ÇRj’¥ˆì¨¨®²I;¸i¡÷Ö²¹r©B%jµP„µQ¥ ïiú’­^AüäFîÕÂ|Ê g7¾C Õ¦—™Ä%Ïw±QZ~Ö8U^SèÉ&Ó6ïÓ÷c8S¸xœ€2áð&2î,`>G9µK2­ýÙ"kö÷Ý G™2&üx ÅÚ¢ÔŽ1ÜŸó§÷¼8Üæ²eªõf4°(yž1’ô™ìœÅËmY’ÓZÖwY"¶ýïÃöYAõ¯—gofÓø\¿Ñ-žæ¥¶éaU._Cö @¨¥¼¹ÑÖ£x-©ùÞ fúîQR7Ìûü7ß5ðÞ͆äÄR¥ÄôTn HV@#ˆ8·ú¦:嘨ø@fwI ð#Pd±X3»ä’×E.J’TÅ\á;Í>Ë Ê83‘îr÷Eí0ÄáJg øj?Ë„èUzF›¤Q[ gm[_™Ü. §ëì ÄMž›³Ùù®U ]„ }&Om»Å©¿Õ²6ôfzÀ]zoÓ§&•¬›þøš½eÓ]ªÿýÛlÙ쨵~ì(rz«Ñ– ‘dòˆòË’eRfÒJ=[×xZ#ŠÃô®Š{ FõS¡2µ”{ΕE-‹9!ïoÑI—W ÁÈ‘\[lŸo/'eNj“$ž¬ÜÇÆíæÓÀ&:Í›ê‚\3ŸÌüü&H÷_(å”Ê endstream endobj 326 0 obj << /Length1 1627 /Length2 8394 /Length3 0 /Length 9455 /Filter /FlateDecode >> stream xÚ´TÔo6L—tIÊÒ¹tHII#%Ý ,,»ÄÒ-Ý%Ý„¤tJK‡ Ý!¢¤ä‹þÃçy¾ïœ÷={Îoï™kfî‰knZuM)K˜9H…s9¹EÒ*Bnn^Nnn,-0úK‹Å rrà"ÿK;Ìà:3øƒ™ Pt€¼ €PP„›ÀÃÍ-ü!ÌI cæ ¶¨paP3ƒ4ÌÁà lm¸åŸ#€Ù‚dÿí²9-Ì 3¸ ÈþáF 3@fÁ=þ+ó38ÜA„‹ËÍÍÓÌÞ™æd-ÎÂpÃm g“+Èð«\€ª™=èwaœX -°ó_jM˜ÜÍÌ xP@À ¨óƒƒ Ôäx¸ ©  PsAÿ2VþË€ðwk@Nà¿áþöþ ýílfa³w0ƒz€¡Ö+0P“Sæ„»ÃÙfPË_†fg؃¿™«bfþ`ð;q3€œÔK€ÙC}Wçláv€;s:ƒ!¿*äúæ¡É²PKi˜½= wÆú•Ÿ Ø dñÐu®ßcµƒÂÜ ^­ÀPK«_%Xº8piCÁŽ. ™¿-TXtÖ 8€Ÿ››[P9@î6\¿‚ky8€~ƒ¿Õùûx9ÀV%€|ÀV ‡?,/g3WîäòñúOà¿%, ` ¶€ÌAÖ`(ÖŸèjÕ_òÃäÀîîâÜ¿~ÿžŒ¸e ƒB<þ˜ÿ.—œÖKµ—úl¿ þzþæðâàpððs€Ü‚ÜÁ‡ƒÏGù·þjÿ­U7ÿ÷Ÿˆ P+@ø¯z÷O®s‚ùïuaü÷ ª°ƒÌhoÈÍÏmñðþ?“ÿ·ËÿçEù¿Ðþó‘s@~£Ì¿àÿjf†xü?°Øþ°*°‡½€þ¯é+Ð_K¬²»Øÿ/ª7{Ø )¨5äß&‚åÀî Ku0ÜÂæ/ý3ƒ‡ð0¤sÿzf@nîÿÁvÍÂîá)q~˜Ôoô°Jÿ}¥,ÔfùkçxøfNNfXƒø^À‡å´¹ÿæ5€‹ ƒ?¸ÊóXÁœ°~ÍS€À%õKõ—$à’þ# ¸dÿ•„0³?’€Ëü_éWæ\–ÿ!\ ?q~IŽ.“ýGÃÏಂ¹8ýñ>€þ+ò=Üüð„þ‘y\çÿ°çpýq`ÜÆ ôÇã¡_\p7Ø8<¤ïò'àCúž §¿ðÿj¨…‹“ÓÃ#ó›ðÝþGþý¢@î ¬ùY˜…hmmPÛeµ¥Çö˜Ø4Ãö«T¯y§v—+\ô$–ªÌ׫NçRICð—6e™Ï$hn½¾6×£‡¶$¾l½ö¾1‰×˜ÜnÅú¹1ù¢ˆ©5Ÿ*“YX_ªoÔì»Æ ×È gx^‘0à¿.»$y߆©¥pM›V‘‡v|¾Þß×Á,PÂÙH0nnê š m}Æ¢RÙ²ù É~%ºTtd79ž*¯ÒGÍh¤¯9F¼ûÄ^=Ðj”¯z¦……:ÕG%që1Ö¤.†PÅÁV(…Å q~÷´vÄ·lcU Ùvx’+L/~‘Na€µNߔǤ«A…(hXÓ'‹Ê´%SfOàóÄ3+²ŸxÏOvcÈg&–ì}:ÌüJ¼f'¼P;H|òȧ ¸-åfcç0çuk~w)ˆä“5·¿À%8üêùi½ ™ª©èntú-…¶Ç­–ÃU|îº)&ü»ÉM_é®™À”siBè.)-ÚŒZ€~<õt¥ÎpMêÄÁéiœÿ›RC¼aHXn˜èRè`ip4|±ëF¥…hl¹þðä‹2q&lÛ3yò”MÇàÛ5Zâ ýÛì ¥ªk'C·³¼¶?†#“Út9ãG-Èb[ñ{ÄI3Yƒ!Ò!Ví© s‹uâm/‘‘Æðà’§Ã½ÏšC¥êoÈÖŽ< v¶e&ƒS™‰ÎA>Uû"d²ã²þÁgÖ¤Øb'Ý {ÔæçÜtÁÕŽZjˆFÊh†þXÄR#—“hS½*£‰g*1IÁ°ršwå–ŽÈð)_—¡'F­&““ »8ˆÄœCe’ÓOÒ)#¸`—ˆýÙ O) ò—ôØ_„Duô),ˆó¤Ïc³|ͽiyûîqgQ}Ÿ¯g¤{”@g±Ÿ}b0)ºî¹œNÄ›siY5wÅ+,[9ûâ rÝ¡vä<ªO¡‘B Ô‘ _’½6]Ð{p"ƒ- X·EK‡A æÛ«Š;ï‹1ÉÂÞI‚|*Û¯RVÂï;tnÌOóê0 …´®-kmÉøh¿è´µ¤njÏœ"ô]gôÙA:ÅS!(ÜXúHˇ¯úä Ñ~ºÞ/Bê‰|¿õχUð;)‡ú8bh»ÚÛJÏn—›«ôŠXg¯v÷„žcöê¨}%íì&.”á=©¤÷žô°¿ààå`þžùÈ*XîÜýÕnt{yûûhç&]ÚhGŽØ <¦#¢Û¼¾Ø…U:à@?ûI‹³ûÐ{Í‚”ŒÞÌKB{:ãC[ÁmÞLÙ®:hiiÌ(ùZÆGJçùvQ߇¾¥O'p®‹Zz±|ZwÀxnóƒ¯b/ÖEókmùҺȕ}b‘è3jç×5´XECBº£lŒ|ç¶i$[ä çjÆmÀš"-×h™`ã”8âÞ^tš¨ôEœS÷§©ïÙ¬ §[î ñäy;‚ÝUbä@MqÊc'’+ÊPOßÚ*·Ñ=NJÁ¨nZ°tñÊð Ñ~7&¹j‹‰ó=¿‹L…ñ“Äæ*æ­-È‘ôr½ûꬻº™è1FûÏéÄù—².V îö˜íé0Ÿ?b6wrÔs$wA4+Am=0ß‹@Vè ˜›˜_)R£:ÿRŠÄ±í0äÓ'½¤ïß^Ú1{“L|0¹ðÓ,à¾2KÔù9ÈÀ[p¥Ó扡­8(±£¶á){’WƲ‘dͨ˜÷ôˆ¦„˜Àf˜}m`ÑVÓˆ„ñ#ð@Îqb„upŸuqH75&\ ý¡i¥ú†(ÅËQŸ ³Š Yr`Íå ¡nòº¥Sê•9ÍG¼ïKÇœåƒ/jéÅâ=N¿×õ᳽Ćt›J¾!ЧÒî}ÛÁU$eÑÂ:A„ðVªÛZTuÚ«†ïþ0ï…ÿ¬b«K¹ª{^ŒV‡ŸóQG–¢Òú55i‘ãë-Í4dV&+±l\‘Ž!¸¢‰O€šÙ¹ÿ<þmº\¼Ø÷jQVýœÖè •îÜ|yXèK6fN†]êé`ü$uæçþ!ÞÃhzúÈ7ð>ô¤ãb(ø /‰ÐäVɇ7Rp1˜²Û“–׳ðw4×6œ)*â“Ñ市+ýO9¤h&pŬrÇ´ntÅÓì¼7v.ƒÏ=jéÙʪß_(›}5ÿ¨x³ž–þ=ðl»ÿÑ+sšj#–—Ñs¶VPôØa›ümxešè˜aÜRÔ¹È>»WXm­Ø-²"žl Á«w2-^2}‚K­ÔÂÝç”LŠþ+ÙÛ×ôÀÓq mŠÈ$”í U>Ÿ}®oœ=‰d›Èâ|ÇÛ¶üZNá^ëÅZì ª`Ó„ót×ÌŽ¤¯o·Å¦9Ív<•BbÃ+=Tžÿ„Ò¶kºØy¸Òñ×,ÊxbÍ–,Q2ñQ ]¬Ž!½ôÆaœ-mìšnlÑ ³àµcœn›WÌÍÅæ³Ã91øÜe8hã=fDIÄ¿µ:‚%¬Ø0ÝüdðìÓì4w%î§Íë[äÝ&XTnÐõN¯/m/¥Q¡È%o›å­^$G¡Ëâü¬Æ=‰‡ùõédÝ7nû·ñ‰0‡b njêÑ ;?ë¬ËmZKîQm–XÃRÉÄ>ÄùÂTýѤ#]‹Å^ÚÐÕaú²Œ¿¡*Íd–\‡àžÓEJuøñ‡X¾w“pÉ›½"—ôüS½ÕÒÁÖR÷ëþ'Ђ^ÇõŠ®Øwò#ß ÇÙ+ìk‘6eKö›„Å“¦oJ_„PH¥|"kMžVzmN¼Ë–ЙV-`wP?×J\Œå<²²ÎU¸k_íN’ȧK[|>=;-ã1Q‹­| "Ž%»ÌÞÇgQ<Ûíý‹Â'7 u[ìj·š¸aÔÄ\éˆçæ©-âÚxûÈøÕж”Žà;÷—¾ ú#YÅ+.~D žlÛŒ•Üú¨$’ÞLº#‰¥wKÛÃfn2Ô¢ZÊœ¥ X°#8KßùLülŽ<"(§Â¿%Pá8É…ŠßHš°Â+1ÛŸîÛ‰Ž:KDTHéWÕ«é磓)È–p{uà:Ž!´ºl·¾ôö;í`'YÎÇCw€˜ þŸ@ÂÌú/ÙFÉÅ_igm}Ë¢%|‰ñÍu S›çÀ²‘¼‘‰ÜãíoÇb^ë |*–=̯“ÞfQŠŸÙO¬Yÿ¹ì+g‰¢j]ÄkÙa8GN@ (}óþ`q|e«o1è±Q÷xe­œ8l$À­]‚z¸SVQ“=â”ë~i• DYëkL6Lú¶/ù¡-c—ia›¹/ŒªÁ8*J–e¢î–¡©†ÛJÑ3|dÓøÉ£Œz¦¤ºZ ¤ãF @=ÏhlˆYPé@`þ‘!îlˆ~SÞé­>Uàô¤u°e¦¶ð4צwÞé´Îx»– !é2#ÅS“Œ Ò`1`Úµ'јüœüºûÀ6R8]mCq•ÜÅ µ´î;k|tÕãÏçxóôszßas"«fŒq¶ÒËdƒU}E.‡dgJí¦eÕÃ.bP&È\ç™.Wnf²ðèì6=„ÖßçõI\ù£õÛìfĨ›`ÛÏ¡!™a¤%L¬ ›m¼hÎ'6Ä¥¢Ñ6h*E°þÏU±xãç}îWÌ4Çà.²·GM$?UGš\6’>ãœ?Ñ::È+El0褥Þ>­E‹:6 J°ŠÛ;œ=H¾’4pžµCð»à³Sl=–äz§©V6ÕS4¤³¤Ø>òôæÕ¡RF¿y‡š¹ÍŠŒ¦x£t4ŸàÂÜ‘íp“&šm ò 1"Ùšt´ËW¬pVéÅTÞ˜7+î•$‘ ²Ò1Ò"øeU^F3>ýî%ÿó¨8VÂÒŽŸÓSÆ%Êèí¢‚KÖ‚~ÙÕ“mxž«©‰![€« ;¶Ûã¼ ëTͦŒf”4EÄŸÒL> ŸÕ'¯œ$MiH²ÈÌð[·g?€bŸF v v´ÑQ³žÝ•"{3«2gõ\—!§™¥3 µ–MÙ&‹KG¤Y¥‡ÒKW³â0ˆÍá×N¡¶H)¯;.àþ `šgŽ–ëÓznGçøéõõK$Àþ@6ɲ­@SŸâ)(›]o3æÁ´RÎÛs‹3ó5¢leÒ -D%ñзša› V;ÂéÕ¯‘€Ã:Å SIÎ>Vס½¿E8¯ÞßJYl‹öFNd¤n9ΊÓÀî›—ià«á›¹–mJ3ÆñÈǤ_¬àw®tr¤êBß¼‰Ø=}U:ÙÄžû…«\¸Y¢_ˆó_¯ß…F P¯–ûI-¤+(F2ÅzqHAjŸÚˆ~³§¯|Ùô„ŸÆÒ’›Â…—­ŒfVÚ" ìLw2rÆØù¼×Ht¯a=G+ìIuˤOGär@Ûþ‰ëi\N-ºšñÿÑâ.Õþ™^…áø¨4{Ž~wɤéűÎS<má˜QªT±ÒóæÉ©là¿ÖŒ|¶¡¨Ëò(‹ÏZVNÔ»ã¨#[Hñ›72ïņL³1|Âç›—X¼Âo‡œø§Ž«Ÿiz¼74×2@>«wôëw© xÆ4jæN½Ø ØG®¶rŸº¿óŽÓ:ï%Ÿ¦\Œšù‘ªJÂà¢X¼)ý£¸IÀþØô?|{EdKIÛÐY}ÑvwÚ†ù2ðž„\ R¶Ýk^¨ 6XE4±ÌòÙdkÇ-%Hù†/èÅ5ôh‚*)š¹¤þl¶§’_yI§¹wnÌ­äê:óSJTaej^¬!¨‡ $_ê3×»ˆ8`6¥œ<ÎH(8ÌÇVÙºÍäD«LÍtC¬¼q7ÒÖŸ?ÍB`1BÍ$DÙë¬4¨«lßãß2üXT2ˆø<ÿž*|•‡oˆî›}áŠRf¥ò½,ëó/öo©–Üå/[°UÛ°ç<£·jug¸c{²ªÌÏ—›äqý¥S#š>&åDÓ¹)&˜mýÔ¶Œ¡½p}özn¯ÇÉq;G±:+ 3®öu5^wÀîÇ òmô‹)ïL—Ð4½“ΘÌHh Îgõý9Ÿ»* òyùŽV1ɾy Ù:/^]þù\[ÀúCTÑçpDN9ƒß 裻—Õ*!:þb j•Z]U–Ádz%à¥G8' € ØŽxüÑg%àLttÌP3¢$+Yñ‘á1Z_áKºô­•“C™“·á‘1-$!S;͇´a¢Ü¤%¶¦œoi“ö™ ×.mÜXbÒ–¼áMæ2@ì<§w„mXÆe©‰w¡‰yr°”ß—7XR_[¿‚xCý1”?Õb~ß”‹•}1•aè a¢¼Ç J&n^ÿþml;ÎåzS@û-¨¸ïÆïHþÝóhcì%•‘ð¬5êë¨tÐéÍ2j¶ÿt@ü× ˜¿GÄrškno“þ$Sý[—½G*ÿ–ä‡ì)’¾ã/Ž­Ú¦£X?ùq·ú½ïL>vù^MDt#òb¹nùn8hZwê¡ ™CkuܨrZ"+P0Gð,pŒmyÓ-37Ë$ ˆMWõ$DgLùK—–‚„ÞàN&¹‹M¿Óšui‹Ù›PLR¸£ØOü]±ª;‰+—]>_A3[ùû·nˆ³É!…ßҪoÍ…>{ ~éñÛÛ7!J"ìE”ú1ðžÇY\òÐé³] ãSèöÌX(%´r¾Óôš8r¼ÍRIFÕ*8—¦jËO€»ßŸ¾•Q ñ¬ŽOxõÝÈôÝÙè᦮ü;5í{Í*@á·ÙLéŒrQôÇÚãë’:Q§íÝN(?Aª,+ð’ôºe£#ø§Ù^ÔæëÑg;Ð:ê¬éþµ7#‹4ÞäëÒLjæ·ÆãŠ'DOËo7DÂx" |`Τ$N_B†@·¶I‹zy÷ÂZ²¿E¢Ô¥¹Ôõ‡a•òW5¯— •²wÊ¡·\ÀSݦŽ5 U¯ÚS$èŽGpkA°¡(ö³› Ð5X Ð×ì ‹½¦éþ£ÿè˜hÏx·ìY Ô/Ý>fÈ7üÐpÚÓˆ˜,¢Øcãó Ÿ´Æ‰Ã»LŸ 73ÃëulcÏË•ksy~Ì ¢{ך•÷yL@B=õJAa¶7a½ðú]hÐÐ/ –5g¹Ä†¼È‘ÈÉÉÇÜ’®Be©¹drpQ Û“¦ô õhc.¡{JdX•¥*ŸŠˆæÙ*‰®N×™Îì>¥É(»8~Õi0Ó’ƒÿˆl±ì¥ïWq ô>éòÞ‹·ÍõFÜôÆÅÌuBý7bç6ŒŽ>ûÚÇaý.E¶èõðZ¬±gƒõdhÀW–9ZoÖÚ÷  œJΛî„qýäµ%!6ßÖò¡nÄÅ5É&!±}磌):Æt:HÔh±ì6…ù+g•?ïÕø¬ïôpžkî`µ²pNU†ýx~íGã Ha¬¸xóY¢_«Zƒñ›º•ÎêIÔxìEo[Aof…áKÓÉðyôð¬)róÛ¬Ÿøï3Jç´˜O&Ÿ+·wÚª6iÕc®nV4z1/Õø9Åõ2ž:H¦¸‡´X ¼Ç¥“*x—åºçU²Ù›VØ%·ŽaÆÔŒ´ÇÆÂ rÿ>G$‹±EòƺóÓZu‹¨8tŽºˆX¶èÝÌÆg‚Ê'†la—~Ë"Î¥•vcÚ}$7ÒvÛ¸¥h¼"wèGɳ§I:hÌõLq¯Ñžå£œ±¢ú:ÓK•øI9ÄO-ÈŸÏù™ª`Üz;Œ÷ó×ÿCöc”¼ .„±ÑÅJú[süíŸûÛßÖú±>è±íŸôGŠl,"Ea¿C‹zàʱÉóÜû-Ĩ_]Unwj_cÑ͹=¥aaE˜¨®el‹/ècÛUx N[”»­À~)™1Tì¦ìÊ’Ðâ©ÆFŸ<>pLϸ‹ªµû~wì‹Èþv.fG)‰zX–Ôn‹:ÇÄ?¼˜dÉ­†ãÖh.]¾¾­kGáQÔÞ£´P—ÿk‚×D5”Õh*Kɺ6úXvKÃy¢‡“û“/¤ptÆó+Mì è‘ä‰XÔùÚúåûøUÚ&ëVÈIZ]«ØŠÁaD®ÇÊ[ÔºÓÜöæa‚]eµß0:'bsýqFP¹Ow μdÛ0Ý âj«®p£&k0›—¬“¦6;Òê).Ñ^!u Œ!hŒQ´²|ÑÖÈ,dy£6r°ÁOTqÂgò]Ðõ`T²Qól$gîëSĹŸÖZ<ê>ìF§#–€2pÍ ×J)uЖtü¹¿árÕxœ|JÒ‹á­Ñ³Äwvb)á —Co¾³1po'·Cjrt®R4“é@aÕ•ær _×7æ¡”œIŒ™^”5ò“X³ß7êíúıw?¥E¨<3³Ê.óî%¹ùU˺Õì r¹VC;øz@4¬öÅ…÷ý—»'¢w:±Ö>R¾ÓH1L'YÃogy©ƒ‹Whð0ƒóÁš™²i‰ˆd7 Ë(Z¼ãÓ—Ûcδ‘L²À“%6ñ÷•›‘¨(QS@«×<3¶qo£­pºæ?‰X4ÔQ®ƒ¬æQ/}÷¬3²6)eSqÐáL‘Z éÙÇçÜ8«dÉùfÒëÌt߇^/—¤ü–`(ˆñvøe™vòàaK¹WOO*[NF@W(XÌñDz§¯ñB'óTH‰Œ/Kú–Źüö ïÅ!”Vˆ››ÄÛC¹!øSsº[) ] ï/ÐDûÊÃÑ©KÃeq܈\™ts¶?“bN33ªOï‘w8“ŒîŒCB3M2‚,Ê´ÅæöÚ¬YNšˆM A}š@êH™ï#8}Oó»‰%ãù±‡5;m«½t¢«ÏwlÍ“”àëŒÇ,?×K”„÷üy%@©³ážœ]•1míç}s‘^*¨'å9ëÏ>Ïm…Á TcŒàn‹ ïe=}B´ â°õÙßÔèyàÞ Wö>K6»c¥2æ•ì\˜`‹æ&CÝ>Ƕ¢ùù!Ç ç–¯ÛhëN°ž ™~šw…cP¥1ÿgu‰"æM=º×48va£Oå%eýÊcmÇŠžD ¼Òç3<~k^dœ†WÄ?¥$ÃþJ^¨È¤{Zûã½"~¸@öòÔ4.’HP–Oɺ¡ªÚý“õÒÅÚHÜß$Û°Ø'b“?·(mÓ8S‡\}h8[Dõôô|Å»mý<£EAùÚ&E`9zg)jWâ¦F 0º¶ÏleÛlŠîKmõ%à’ÈÎZ’+~Åi*W‰7òyõ·Væø³c.FçàC4¼W~(Z‹ò+9Uò3ªAýú—»Óª¦ôñ|«‹ä^~TbÌÑÂ[¢ä]š%³ÚB¸Â_ÛÊïŠú•eÊ5Þh÷È6˜3iîæ­ nŽ~ðnÏ9ˆc*Æ@vJãE3¶¸5…ÛéFËFë.M¤dqÇ„W…௤Ž]½X° ÝôBŸi„hnì «Ú×øwºœ×‰¡ÆÑ&Ǹu‘Ó8›t¡ êÒù뙂ç,C›ö¾plÝYµ±b®m¨3+è˜_ ÷Z&›ΖyÅñÔ‘¥`"/ô) q]1LjY°êFê5£­lëφFâŨ¥åMʔҠýpè‰ØeUÖ’Æ—Öøž:¹Km²/£mâþG‚Eÿ;RT÷Z%ö„hœ έyîå¢áWUÚ §÷.8ØÕ˜iËKmtv¿IîëÌšøË™+È?â‘ã}¸q ÅnÅ¿©oHðde»Î\/ZÈ^—1úiãLñ+ÔeÍÁ˜›Y_™x¢G/ã!©be¾«q×}D6ÙÉ¢—Ih/§2ÕÚdÏ©7\TVѽ–;>5EÐ@ä—¥v»~¶=ˆ{ÀjzBÚë›"¹Ü{›w» ûÕͺrÛƒ(éséŠ|L<_GlÉTƒÊFÉ¢ÈÇHÏÛNxI.É ˜Ò¯8pÆö®]‹‘ÒñÙÆ‹;\¨BÍ&eÐc8,‹Ö4ñ[È[lTY±™ñEU‰àBò–¤öΧZ_͛ğwWëB@’B:\Ô“¡ŸgzƉÕãTÔ¡K Èä¹NÕ£ [K@£·x'ÊÓ°tÕ¢×ki—ó#$³Il†¿s‘'@ID¥Ãû™4]ñúFê’Ÿ]u$üµBI[ÎPpÒ‚ÜeI#Þ¬H°EoÉÆ¹ ù­ƒ"ª>ñ·9z>äzÛÖ³d‚$à<FjÑ÷òÒÙ³»î„³‰4Ü%¡ØÔ®êËÏšÅå<úÆýú‹«æ¦`cáxßÜJª­Œ¾„êi×ÉpYÏq0ä^@åÞÖ¼ºAÜHÍÖ,™_ø/!y[:´—ÌŸÎ\ÕÙAxT#t~CÐûíÅ`ZXÄÇ«©Ïœ:ú÷B€›­” Ȼٖaó0–ïíxíãe/†É¾‘ž´?ói|\ª|!ÎJ–ï=¶HÛl,Fh}Üs2Jg«M~%ù•k2\ùÏh$[[E*Ø;ÇYÂT“õ­Éÿ‰Jä endstream endobj 328 0 obj << /Length1 1904 /Length2 13431 /Length3 0 /Length 14604 /Filter /FlateDecode >> stream xÚõPØÖ ãܵqww‡àî. 4îNðàÜ]ƒ»·àîÁ‚‚=fæÞ™¹ßÿW½W]Õ}ÖöµÏÞ§)I•ÕEÍLRö®Œ¬L,|qU^ ; %¥:ÈÕø—Rèìr°çû—^Ühâú.“0q}7Sp°ȺÙXÙ¬\|¬Ü|,,6Þÿ:8ó$LÜAæ&€¬ƒ=ÐRÜÁÑËdiåúžå¿G-€•——›áOw€¨ÐdfbP0qµÚ½g43±¨9˜€®^ÿ‚FÀÊÕÕ‘™ÙÃÃÉÄÎ…ÉÁÙRˆ–àrµ¨]€Îî@sÀtŠ&vÀ?‰1!PÔ­@.‰Õ,\=Lœ€w-È hïòîàfot¼ç¨ÉÈ”öËÿeÀøOk¬L¬‡û÷@ö:›˜™9Ø9šØ{ì- [ @IJžÉÕÓ•`boþ‡¡‰­‹Ã»¿‰» ÈÖÄôÝàÏÂMR¢*“w~ÿaçbæ rtuarÙþÁù0ïM–´7w°³Ú»º üQŸÈhöÞu/æ?¯ÕÆÞÁÃÞ篳ÈÞÜâ ænŽÌö '7 ŒÄ,ÞEÿÈ,®Nn^6Ð ô4³bþ#¸º—#ðO%ëâ÷úý|ï€~ àû‚‹‰;àêìôóù·â++Àdæ 0Z‚ìþ‰þ.Zü…ßoÞä Ðcy‚ÿÅ>ó@ 'Ð aeÑÁŒ?ĺ>¤ã¡V”ÀƒqRpŽr_+–ÑgŹÓí72l2mMVЖó½hòHêú®$ÍÈ*É‹Ïi[#lØ·D•ö'ßg£xÕ™ýv„åiìïSE§¢ ƒDð„Œê"¾/N¾š6màݲ”yNn<ÈÊÒž ƒåkãŸ÷Uj¸äŸËgc4¢õKç)óM³pÉ`\‰àèЯäDxLlhóõ ±ççÉz\NǧÉÈa[ï_løóÃc4PNL-µõ?ø6'vòSM·%WèÏ1YЪÀEÍ̵_Á³+2å1,ŒänåšÏ/–_be™Àmcbü.ú¼ÈVíª{HÈWK=Mg9r*ê½Ò©z¹¤&Qœò™2Ÿ7ˆtÒEGå~CaøX”­l}J㮞#ùÿ·#”EÛû•f| Se>¢Ç‹¨MZlª™V×"ë»mDe«àtá1XôKÀeñ7„!Gr ɼÐÓØæoq)” Ðkr§:!\Ÿ;%•×2™ ™²›†-Òl‰}¦ßeÎqî¡ÝòÂØ%·¸#kèüu¯”††A9™_„ÈbxDëú?ƒÇFwmʽ¢[5Öjͯ;Lô­Óh}=e€·âsäB»ÄmveWU2ŸŒ˜2ìάc—ÃìygäœîtiõYÚ6=à­ñµAK—Y[OyŠK©Wj‘u°ºfS¥&jâˆø‰ñ$i•–|q̓浀³´|†ùµ¹ 벿!GdG‡èç©w7Dʤ+n¹!šû¸VI2~y+Àë>E,A3cnÅ;Å@å 7Ã1 Ü­ 4Äœ÷Ã&¼ìŠHj†±©ÌᎠåÈ¿•ee?Ÿ#DŒÜ”AùÒC¦² mÒÅPãGREæ+"á /rBÌ8 ¡}ø©åŒÑÍ Û9†¨è#¿ÂG_+ÔÿR|CÙ?‘’r×ʧ;vK{jõsL tÃuuùD±5+’JN5#»_zr!ɺ:¦š£.ݺ±C“?fótûaÉV ê{cw )ýü¢®AÉ-Í9™¶}¨²&8©TgèFQP«ÝXÇ &’©mìyµý.ò°Æl™3hDøcႊ¦qœF‡‰çN·[Ó7*Šž[t&È£¶9áië¸ i»Ö«£ cm–ý‘Švy—s™LIÃ1ÃwÄ®!_¶þ½üS3•$ñ5s^Ã)xƒ&¬—õ/°›8›< ~³'oP¿Š:ŠZÝT"sg£Wœ™­å§®;¢Ek7«„EB&3œ&ïj4;iŽMîÀÈ+x¼¶5ñ8>ÒjõËüNài¶i‹˜P}ºóå¿ô†¡ÿ˜9î_¬G — ýbçöÍc€4JO#È­L`yœadRˆ¶_q—g€ËF_$N™WSð3Åüµ€]¢ø¨P~77nRÙù´$wø"ðj«äFEd²ùMøÝ]™Eÿcàf‡=ö§ü –»ÜOõÔ³=Ò­=`Ÿ/ ÞŠJm+‡ŠÎ ü)å¹zïy]Öéí‹ÝÉ+@(K@ýˆGíP¿bŒp;ÄØ¼iïǪAzÅ#äÓPV_ô¾ÈP—úº 5&õ‘Í¡n–rçíϸð›Cç×Â,ÐØAæ\ê+Î?dÅŠ±¸!úhØüΦç#£’W´!{^®b¡ƒdK/ÊÓWTÃUOî;ö Na¶ÑéŽL>XÓÑ"§jþ•œÛÏ?û»Ý‡H4ÃÃ"÷â^Ëv>`%N\rZaÎÍAåQè ®žž«mJ/A\Ôž>áK`W3“˶¬G+ zfÑRí–›«0åÇ[eµ)òÆGÚðh£ÏC˜LF@æ…õÀçLwlÿ!䤨ÖF¥ùõíE XüŒ©¤¬€8㤲##Ðÿ¬Y3îi£¤ÚÎc¶T:˜«— [U' éø#¯eDlÐã ë8ˆxD«&µ_Fø{jÈ`Ãp Áç¾ä+~¯¹ KìÇ•ÒouOíÖ˜ ÃVƒâ*­'•ê>/£n.<¹<ÖïF"X}Œ=QãVG”ZùJÅØðŠ¡!ȳVÿ:­òr QÁ•ާ`I_ª5`¯"?`P’-áñý´sA}9uѶ0Ô¯Tï`I3ÐîyôC|Ëò<©†ÃO™ˆˆBå`ÛË’0ú‹ºçC ¥¿ŽÐïIÍvE‡³À¡å¨[ÛïÈpÖ9‚üž—ѯU·™£}ì(û´0+¤Ò7®õí˲x¡4pw£l>ë´ gÖæó,ÁaVQKÇ¥¤q«cW¿Û]çÖfHCFúÈÉ 0ÓÝÇO¶kñœLÈÝu¼&¨êpq"‹´EýÄèy¤]¨FæÔ¼ð õܸ&ôý¹ßÈù$#.yÂH«êÞ„†œÚ>»¹T/ùS³ó÷ ‰OËQ=Pt¥±ÿ"„€BVŽŒ4Š€¯„òöÍ]45ÊÍÓtäRòÃílF¦lìFëm½ë¬trÈ•‰™)#èæÜ£QwªÙ ƒF˜¼¥ú”|¢òêŒ{bí3†Ä‚y>xJëNåÈÒ™¶àÚO\‘h³Äh’êÐIÄDa'¡½(Ò³}îLjqÕ)¤z¾ÏŽÄú47ÎÒšu2P£MVìÁ¥5(¬ÉFÁ+¸ùa Ýs!·Ã*.¦îí®á3ýB^‚§Œ?|#+%ºIÖ?ŠU¼~'ncfîÛÛØ‚¶œ±[|„VÀ‘zT"@•ìµçžÜ<ÓØŠÔH<±XÙ(XêDF™ö|©²+nïïú¼:o”þºT¢HÕä”péa˯w’nAðâGûVòÛKÂÙÐÑö]É’ë ÑÄ!ö ®cKÛ7ÎÍ:0À9™F×ⓘzíêÙ2ŒbеØ;k ‘H¥¹X T)9޾ö®¿Á"¥M÷ÔË*ÜÜà¤Úíy%Ò'A6)µüùLÎ9Ia<Å¿Hb áù•Ö7}p_µÄÑžNGj,ù#F 2>c0 ]Ða×  C´÷é>²Mˆ©Í¡»p¸¬º¤7Ë–¶‘¥Ù¦úF·d×|â„ÅñscšN*"¡ö…1ojêjC‘ lÔÇ·3ÁѲea‰™Àù[ƒšÇûŒ}øýnìŒ7±!iaìz²F2ÿ2×Y^É5\ÚaôÙA±=O>““P‹#¸š( ªT#WšÜwo™Š)òÔß(çŒXŸºÕ!wª¹x!½¥"[m£^éoQ‹{B~’Wl§¼Ô<€ŽÛLºk¸$VbÙ {ªÍϸ˜Ãè'~½BñðÈx8öºóV$cO ŽÏ§7ѹ”!#ƒ×‹øªÑåÁ!Ý·–B3¹³“Ó°\ƒ{Ça. Õ jt4„þÌù ´rzBöÄaló@ª¯Y7¹½º‚q^ýü†Q¾ZFb’ù“.S“Þü¨‡Á#9oè‡f©]^cܧŽÑ™×yÚó_™=¯¬bÿ– „‚/o¢”1,öÖ@¸°fXv ”rd‚(A"¹«ùr]?Z1Ð>¹×/3(YªS›·ÅÿWËe-è |I=U"HtþyÚ"œßêR:[“Á½,n ˆ8òá°ê©›c±g±¿ˆúIm¹!§h¾¨ÊRqDÌ–îO†yKÐüâjÝ}9N–lU¤Àœ·Ñ˜~Tä=?)B—›¼asQˆË! —ÅvüE°Õ€Þë“_òä=e¥A´ññ4T»[ºœŸÕÞ°T£#<ÿ¨òË´Hù ªøÆJ×H©l¿HS…<çD– ¯|œÕ‰kYN;PÅâëè8üó˜j™@Ýï´çcåVóé«TÙÏ„AqÐ> Žì𪈎ƒ,AX"o&wÆ¢5XÔkÊMD>usLÈóÆAU#Á×b®DÞ#% Âjäf3Øð]@,ì;Õ¶øj¼‚1Ækc0Ëþ~Mž%¿ñCŒ]"pü‹ï®=Kœ2aäµ~L44§©„­Þ¦V+j{–õ±ì¾Û5MœêzÙötê`X¿ÂÓE°†TíôùVÓ×åv.3ך›ž1âž»c?Z;+øvŒÆcŒo fVçí pûÚ,•œKÿ´åÆîž†É®Sæ$Ÿ“ö›¢øçí:¬pvþ)ŽXË[†ºéƒýÜìÞôÞµss¤ƒ›p¢³P#5ú`¯(ð„Ú’Ðk!Ÿe‚+‰bL9vÈAFBo jñÐ/çá ñ¦¤„_‘?ZèÈ‹Î|zq >\Äa9_c²Èˆe³¿3s`ˆª¶Üà¬q!ÿÜzï{bWù ;¶?ë {ë8ð1úZ¼±ÅÁÍñœ½èU™Õ{„K¥þÁ¦·€ôÊFØ1>jŠdy ¸á 5±sòG^¶Íh#BaÛn¼z',ÕÉDÏÀjwõK­•ŒÁ–—¨‘žR££Qä‰à¤ÿ¾Æ‰ëq÷Ð4›Á!Ø9ÏE¦àí›c°&*Kk Ÿ˜ãìM'cŸR“+nx¨B*Ó‰^Šƒ­¢™U{•¹­[ÿŒnɶºðEõsÑÿ$œXtj7²”éµÔBMr<Ï­?”½vnSª Q”¨<À0ú.ž®/(3Äé8Eÿ·ÚÅÎ=þþ TœŽŒÛ™®¶K•0"ñ8kQO÷Ít_‘4tµyÍ¡xÙ­"…¬e9ôo{y—=1'Qk¼ä&‹W±UçÓØÈ󻟠.ܱÎzGµh˜Š^ñ†ú<'>„ H^^O Œêœ·xdØ7a/¥oj‹LôÛêäÆÏ²tAteÕJÎK|ˆ¬ŒõÒ&¨dRÚ¦°liƒJRô€]"å8GÌ!uZ0“ Í79b°âºvÝ„™üñ˜'‘ðð.%¾ìú=ç:ÃØ>…^—r¤×ÐÜ'‘:‰„ß:iF¨þs`2¦Bâ×@½‹Ø6‘éRÊ ¢’ár9î(’ìù“ßGêÖñY6l¢™BûT„Á†õGxªÞ3‚hÇ)´–Ö¢‰Ôža¦bÊæ5»Å†³± s¤(ýùî ûvˈ²¤ñutÕuÌjõÃ}‚ ã¼~ÚDzkªì;¿EÙèƒÍOÉ~¸ƒIqÁKÞ%è]2¡äOÎé**Iíö’XábEú’ _É qÎF1qÒÈíüÆš¢‡ýLÏÑîµ R†µ ;-¶p¡§CÒÚ‘t_IÄhüŒ‘=OZ\ÊèûõNUSÁ™ ÞœÍ:æW…G5?÷[UÌ9 %“1ÓýÏ®=‰Ƹ×Ãþá9G÷qö¬ûV{ï™5 jöv¹ý£Ýæ¦R-ÄëÊg\>%7:Å¡d0O³Èìô7ÍÂù^ÞÊ}N<µl#EShìד?.ù/dÞ3ªeÀÐãˆP¡tFÆëÌôd›jmå“(n;®`™ô_°$XÄuØÆmØ·Ï!HJÄ 5:‰;ó]×Þ¡íÏŸ© B îÅaþÏÖj"€Äæñ!Ž·×XnáoQq}%ØÍÖ«ŽÔÝ*GG³þžÑè«©ÂA2| .€¥ œZ¾ÀqØÛÿ-ÈêqŠLv\asÅ/³=ø8½Â¼bÃåËÙ°P¨J£"¢QÒØ¬m+j!¨*Ô|Íã.®•É×FQ"ŒjeYÙˆõ¤S½83Žèˆâ:Íä¡Måt|0öºiðœÝ¯=ª¬cÁª÷ƒö„ ìï ƒà1ÄÝ%»„ö»ÜÍ74¦ ƒÍ§P®´<þäi~H{&ájgõb §;"KxP¡cëêРSxÅÞÈúZÕf¶€Õ{ 0ÝrÇ㜗40À=‡éxÅsTòÚç‹  |SGaXËuÌ¡­nI4 ©d“€œëÈÇÅ™QFßî ÙI×¶ûŠ[œçF3ÌÁ–°ã™&TõYeÇ jÙàªte¼)G.ÐÏ‚íÚÃT¡í‹†ÞA)t(p¢‡E€®€²H-)"mÏßþÕFø£@j)ßuüAÔ©§¼éL ûc^<ÞSo•}ŒÖ8I…2jÓÅÆÌtBÊð©j3E¸^*¬ÅžQ»ûÛw¦Qy¡Ÿé > œ›4A죈:ÍíÃ5ûY}»FLbÉâžáù¨ÁÙó &%+\´û!òêr˜vëNR2PSÙ*úY剻¹qÜf¿+O±Þô]âÅhÌ]uw¿ñFƒD¼|7š»]—¦ËMºø‘Kuú TÆoè°eª´ÌVM7Ó©¨êÌ&ùsœM}+"¥ƒæÄA/–&¿¦´_ÀµšCÆéˆÕãÐMhªƒƒ2¾{Ýcº/V‚“BƒgVÙGá}4ôýYZóÊZ/ðpZ, ÝÍ·*¹¢çìø„Z>­¸Ž¢:ÊIÉ ¸n@(ÿƒÛ¢¨‰5¸§…\1u¼~)Ü¢ƒè¯¦X¸r7þôn™©W˸GáÀæ8ìÓLØÁjº’€˜ B¦˜æ·aÈ$úº·ï1µjøŒñ6ùzƒBaìeF8ÊQ׬týÃm1óέºJ¯b¨/îvZ?u¯ìlb@Ù!5äž§Ç= š#¥ê¾´Ú¬ §xÇ$3*mOVPÈJÖ:Ÿ©õAÑ¢å^!QfÄgsýÔ¸¹UgïCÍ ¤¯÷â®Y1'Xãùa(™™[Y/ïæ–¡ÈVy›ÎÅï%áæÓŽ5gæÐ6×Â^dƒ’Üšó–G^h$HÝðôáÁ"vˆ<¨ÚïQj åc¦g©lç7‰>MUÌ2¥¦ËÏpá–ǽþ£”³ãþöW=:ð(m|ZÒçÅž‡ò' e_X…u›úçûîfPw•Üæè¬ýȹ¾½rcã¥ßóLúq£‡úò+¦ç¹ Þ`Å‹3jÆc~_`59zî:¸N³Ð¤0Ü-Ífµæ~åNêÁýu0búYnO7ꢔY`ž}ñhµv±:sš#öªL\RÞx0ê\t€f½¿=O»Ù1XÌ?+Œ?{ƒ½CÉ zôÖëSëàè$Ì“Žý™ÖIzbÎCÃËvᩈ"[%ì°Ó‹zyû‡íùõª¼£µÝž’¨ï^ «eO±xQ-‘cE¤Æ+ StB íÕ}ô…iî´Íiãº"BûH«Æoçrú°"T]l&™b±Ã¾íš5±X£<ä0l_°ôŽÁÍ›RÀ£Ç(«jÏFJæ^Æé]|!ðÆ¿ùd >G=9¶-JimzVSu`Ñbúã-2ìê¬n‘“=Ý¥¹¹=/ XîÑ};ûŽ¡ ž¹L‡CÙ‚òfjp6åÔZ$?ÓC½ØØ`f–vÙeíÊ©©qjÎÁdÔ¼G*ó|ÛóK¼ªPƒ¦B à 1¶8¤+ŸyvâGAÃ#¤ >Ê$†l¸­¹a žQbŸ÷Ã9ÙÅ\7" ïlx´xÛU[›“ìmS¯ƒï¡CùêÂúºMYûÅÝÛúvàÀGćT¬ä~!‹åKª^äÙJJdT þ«Z€+Ss‡6RÄÒ±…›8E¼Àœ/ä5f ¸yâü¯.ù÷˜[›é<Éì¯ã©¢û¯x¬|v3;?cŸÅÏMŠ0ÀeF–³õ©¶Ð¬ ?·ÔžNëdiT«ÇHÚ4'Á¸h £3‰øëÆW…Xoˆßã꙼:ÖõªŒsH1Ø’}íĘӶ¼2ùýƒ»œ<÷ö‘«–Ëð§0#†â|…ýUDÝõ1€JE‚Q-ÈÞ-^(þíÁŠø«ÃÌ®¿Ë*|ázw‹ †vÉ·ÚÐ\'1S–SwG“8†Ý;«Ä›6F˜roñ%úS$âX8s¿CÐŒ ¿¦¶ t!êÀ~íýÓºçöþþÅ›É £~¦‰N¨òcòTÎÈ.2f¾ÈýQ¡ÀÖ¬:|«ÂT.:­8cà…•R$%Õuç·¶ÔºðèÀæÅ7¦õÛ_¹sžfT’¡ÂDaÚjÁþþÐà•Ç‹ÕgŒ& ð²‰"ì®o¬c¿¹» é¼Ì26´:Ò1eÇ÷4k¨?UHwq2eŠ‚WI@v´¶ÕëÕ­?W¸Î‚ºm§:ä$ÏéÒOš¤ý M~ÿú-E9„ü\?ó{&8#ÎcW¯sû®NÊ^”Ä–EˆÈOx‹²ìP–/HRµÚ뤧JãòÎaÚµÒ‚äKô lÖú¢ý¨²ÕcgÜðŠîÙƒW/Ñ,„^r·†&ÍYp¶$Fì·Ͼû˜ Á„o_—Ã'žnœîëðåŠ*/"7OU¸cØ$­ ³u:3ÊC*¬›Ù$r:@ç? ¿83f¥©Ð”îÓñG±¯Nã+]ð ®kÕÑ· KQ|.5E™$Ÿ7º-,xƒL{šòùsE?˜†J"+ ­dö¼‹uº]ÆŒ fÃÒÅïÌŒ u,›‘¥êÅùÐvdÒOŽÕUs^BÁ¬Üè4OÌÇ/V×Ç ¿ŠÌe—ÛŸ‡ä¼šÍ ôÜO )Jæœ1‡¶*]â?Çs ê^¿ÓK£1,#Ë‚k.n+ „Å Ìš^WÂÛ<Ç‹ã?”CãI¸öZßÚM‚ŠrÁ@ ØiÌ Ä÷†Qý0ÌkwžÙYtÝ&™Bá©È‚-Ž=·¸>fâ–‹Ê4Íu6)^lÔ³üå‘&m|ïb—]ò…²ðó ®D-G\ |DV ”î£öM”ÍQ:»&çH rĦü±¬qBஆÕ~ª<I´€ÀYŠc¡|R9·)^æ +úµ<•)–WB'dâU„+™C&úÅ×T× fT•¥-ÁPˆé˜·¼ÞgB´ vÓ¸”yx猚K¶z“«ÓUÒ÷)…¹³?\SÕ‡(S€¬_ÒRú4P]úËÏ­ÄxîmèÄøÖ¯|ʧzžÖ.dCÅF` ¯ÏýxWncÝþóιMÊú¼Àƒel<èä>ˆ`Ðt'†mqVV”ŽjP' ŒõZ+âTêÑâi§­I¡ñ#U±ÿ†4úzÚ”¾&TéDßwÄ•Ó[NcR޽þ˜?ƒÊç#z„¤F-ê»R¶}1ÑëÆÞ ÇŸ•š(~áûààNt*€'‰!±*$Y®HBóˆîÜ4ÿ´ÐâJ€}ΰ§P[|–²%WðÇ¡WÙ‘«ZÆ&ý&Š®Šà©Ÿ³‰þaBÉ®5p+$?ô zwuØaæµÀ…7Iz80RÐvÈKKÑ y#_,½¢OʰPéèa´ú;ª&æfÝ,G9ée¼ œ>ߘ…„2>ÃÚGЉ_„N¦¥žÆ¥C+Jr´9ð”©0ƒ}3¡Aáfòs†êÍÈÜ+˜\Häœï/Žùþ½oö6¦ ˜ÚIÅ`¬¥–øÑBNs!À~MW8êA°øÆÑe»À2Ûç2ã¶ÞmàÓJç¦r)™ã4”µÓšÉÉËÞ÷d¦c]0ªÆë©;Cª)ÔÛô´m þ×è{šª£ndí±}M2ç„$ÁîGõr%#ÁûþÖ‘j’á(¶( kjaÉ‹ŒÄyÜi½8ryd{Ì£ø–qðlãÏäÌHúçr.w²‚Ù:!bÇçœ ¡Ï¾æ5ôñ pÇõ—À“ÁE«0å;áGÅmöÌ3„ê"0³š ×zßçðlj¦"VЪsÇ(ò–ÒkHd«ºÐ­ ?T[]sÌñ/ÙñWú<õU7_¨]°ß÷«H…? /­0R† ÏL(&k<²¢múûîýŽ´º¬+×ÎõO;Š&äýjþŠa«ñ±¿þ‘#e€WY¾%¦>.,ö$Èo"ü‹¸µŒü´f¤{Ÿ†Knó=Ò·òêU&dJ÷k' Çož3¿Ÿ˜ú¡á/éÙ£\¾hŒçÆ|ˇ|ØxØõJ¦ÄØ8)$ˆ.¹™ÑËÞÄ%ßCÀ-­òv$ã ÖCKWÉÂìÁuùRI¸ÒðMÒ³m•7+ü Å­¨‡x›ÎÐz¬kØ!Í·ÛʳV× Ù£^‹®ã4…ŒOàÂêF = 7)†ºÚW üWR56E¯"ppºéÕš`~1È™¡Uîžû5Q6¨‰WÅN'È „pÊØæBÂiî GÇ‹È0…;c„y?Ö9G%Ã6«ï/˜ >"xäI󖳘JlMÕc"Unµ&ëœ6=óY¯‘£ÊZŽ=¦vª€As6`4%ž°ÔGnòLÎu;H¯Æ*è-4¿Ì£Ý¦?šŸ©5Ôaǽs`¦^“®GHš=r8Vï=?ö¶ÕmUÅHl¾îlÆ?òǃE‡¬LR†Ó(¼G)30Sö¡¨hF¸Œ ‘~»$‘ýÔP‚̺·ÑX9Ç•mÛ Ç/ú[ *§›v©Í S7†`&º«ãÔþ;oãètðŒÒÕÕ襑Ÿw>&§8I†šÌxä‘ËוõEÝ]: £ÙT>s˜ÕXVŸÔì¤(ÍPÜl/ˆŸ5ˆ‘E ¶þ;á‘mQr²_†iÀ†–¨€Çž@Æ9ÙçIêÀ²Ïi›xšnF“^¹ë\Í´»ï¶s±B-’DÇà`bÒêûgÁ±Ì¥mV¢Ôc£­¬ŒÁhÛ=¸åP‚,ó¹17ÚÒ«"¹à©""( ²•û‡ÓÎ= 3/ÌûÏi—tS^²ÝT/한1ÔÙ¹OMêVD¡®v>bÌñ%O .šƒ®ÚJs‚§{z{µ^É­gBË;>ÇÁ†>9·á&åi2qAÛPµ>’ŸAN¾;iß#wbî·€Ùà}w$gß™ ´b÷ ˜‚S„DÑ»<2y”qÏŠlù+öq+‹|í ΠB¿[û3ÆŽR%=ç´c ÓóÁR1íßKŠ: îðƒÒuÿHž{VáÎZˆkÙ[ϰ¬¿Pž¡v#fç犥¯}‘€“üœ!œ.W¸‡•T¨x³0!£9.±t­ë Õ‰ÖÕ&Èñ9é÷55À½OÍ5LIW6Ö¬žÃ)¦‚¯§ÀÓäЊt#龸â4ûZHDþéK¸__«GÍËìÄs8ÿ YdžcÜÏ|ñlˆq&ì¡öӉݤ!9/òvòй(ѵŸ—´d~_ª¨ÚqD7ø£  *®bbåVÌ›£œ o¥âxûABJj˜nûOckɧ·ä]þϩÙÅ0-ÄÅ;´!¦:µàf¹Áeq}âä *ÛÉø„ ÊÝÕI½dw]·ó{y ´{z‹×‘›‡«²¾·“àûзJOë® J øÓÕ.ÅGüþeon阺Ԭ´,d›¦þÄÖ‡ãl)0¶ÞÊäÑÓXthåšlÏCÌ”œz!AúÏÚ,±ÙUiDë¿ÈðH Å­”uªE’ñ´ÇÓ¯…ÝÆr¼ã'£Yƒ•)jÞ|~R²˜O|e-ÏU媚͡°WXN€)–žÖ÷$JåÀ"Æ¥+[ü˜ùõ#íÀ"O’7ÅŽQ¦W„„öjsÞ'ëÐà^Uô,ŽVøˆÁo‹ÏÑ%yu¨©æ§= áH+=¯Þºd›ÉÏ«_8îѽÓJÈ9ŠªàB²Ýâ„sþ:­È1ÝeMÓè«àD\|òPÅ3øèÆý¼dCF0PUÚ$ä-dß̱Î,t©³q•BƒR×ï¾3*_º.>£ü%Ò¶1KcÚ  P#¼( ì75ìÑ(¢­íÆc™7¥ÎÐe 7Ð2‰'ð¿½ÓǺ -=U1:¬÷¥--õÜO7ƒI̹wÌ$j"_Áų)½‡VÂxwœ@áaFH ‰©gZÇù6e‡„·23Ò—©ï0]10Ÿ•šìH}`Òd̾ni)"L!b|’9ÑåJÑ%76‡Y’pDfz„|tEºsÞÓçÃåÚÔø{¢ÂeKwmáä—Ý«Ì8_¢EÔÙÇot“«nÙšðøòoÞ¬x6vewæà›Š+8Ùòœ™¢åuâ ¼–†™`äÊ —þ›Ÿp)x‰È¢ÐÄJáœYžoÊN±† ¯-­ÆæBÔk”ØÌôvõž‡ˆÏ~çKL“Û–vª Žƒ7ƒL˜ñŠJ°0çz¯ÍÅ6:µì‰Ä*Î%ïG"4ÇC’ÄvèÌ|‚µYÔŽ~ìƒ)³?lËÉßX²¾i+uí ™Oòû¡Ìéšw»˜WÔt QØ;uõÂc”ÿà{cVò s˜Q ê«õCýpKM¾Û¹]4.‰LÐLžhò+]ÁPù4I굎ö u,Ë„(ñeª §ó{€ô®ô.åÀ¦6eXrºwXš‰é–ÜÒ\BÐovªPhÿ´²ÛGžº–lª". ·îßd©žhO¤âM°²M‡Üà‰Mš’ÀàÕP£P9£ånD¶\Ìeqv{Ĭè+« !é{çaàq­è$›WåekÓëþ,ꬰ¡2ëµkS™þ'ÎÕ¸`ã°&¼!|Ê䃡«²^Ží¡3<Ÿ5‚ =wEfõ!nBrRDj1jå—{àrÈ=)»¢Øè);œgSoûÙkZç•ÛlÜŒej æý…¡ Ìpõ|ÊöN’0$¶ù5åÖÒ\g„µÂÀf •Eéo‡ºg@8ôkÉi›â½˜Ö±%6µgÕDé¼±ÞréO,nÞʼO27Á‹ÇHð‘ðt¶]ºP¨WíJ€<©Óƒ&$Ö:çÒ/ÄÀ9|7g›äž5Ïß'iÔ¹‚Ô'TF:#8"RIBZp0ï•zøX>ðU?÷{¢WïM  Ý«ÄÉ0T_ÝÚp~9ZøÅ› n\>p}Æ‚£Î=&M ~д5ùÀfÞZÏZ7¿"Õ¯GÊ—¤M‰:O¤ÑHÉ=Þ&w'Ç@R‚¸„ŸŒX>;jíOÓt3;æÓ]¥}[Ï bÙE: ‚>-]péGÏ^aq‘FÂêâxè ¡I‘ªj²»·«c¨‰ª¦z·ôáI©…ïí— ׳$:ÛªoFß ‰E·(l˜z[rB ?ÉoôÊiJ*¾hëNýtlôˆÞ1²ÞŒÃÐñ3Èc•p¤¿E¸˜„ÕKô\àG}¬Í<‚ÒD¾à #>’Æ{óñ>ëÌ~^øaý=M½ õ‘àÏ]K‰ô•]{²B®ÒñM5,¿¢V _u¨ÙÂýLвžòó‡1C¥\rh—~ÑàÅqÚÒÌ)]-· “ÐúhÓ2ꗗѪ -®l ÀG S~åÉú3Z|³]…$¦…v——LJwtdŠ­o<#¶õ­_´ÑCˆaÐíhïÓ> a^0ÂAÔªÕe*Uòœ=”fM¥¸ñ/ós!»¦ÙJ¾!¹ÑÏBŠ_,˜ôt=\‡´å=AÿpçcB©'>çæ ÎØÊA‹|}}ÃÜm¸6| ÚŎφ˜®qB£È¡4‹¦úDí÷Ìœaý`~[ºðT€ÛÐߤbwìeçÖVújîP%Ÿw“oÌ ¶×ÍíŠH·0GŽÔ´%ŽVZ›QžÐ€·>Áž>‚ÊL¨[0Öýþï(ˆ+µ9TÑ„x»ÜP3A½Ò6ªgažm[#Ï$\I‚°CÙ¬Ps§”hWà¼{·éC˜Ä—–(û$‘æu1`>Þ¶wÙþ©ê”•n¬2ˆ'-çå ÷SÝÖ¯Øå W‘îüE…dŠïÕ)Ü ¹Ç”™LW»(ö Û¢‚‡)Ä.™ˆHe“bŠí»zè tïZO`™ ð[*Q‰ÒÐ|# ì"Eg¥­Šý16é¿ÁD]V‡iz?§ò~¿9»FY/ü1_9u|¹,‰HSa‰8>e9b¾L½§ ´x­“ˆxèž<ìv/:Ç¢äè êhXµ†^HJãƒP˜6hÀ¿ËãØe&qÄ‚6šd¨bI©½i˜¶œ: ¶—4ÆÔó;iž 4¡+À'_ØMm”âΜaVû¼h*cLgí] óíÿŽ4Wò endstream endobj 330 0 obj << /Length1 1666 /Length2 9572 /Length3 0 /Length 10643 /Filter /FlateDecode >> stream xÚ·P\6Œ€ %",%ÝÝÝÝ¡Ä ,± ËÒÝ(Ý]"Ý!Ý©tIƒt)R>õ>ïûÿ3ß7;³{®;ÏuÇ™Y:* mVIK¨9H ³r²q¤UµU89Ül\ètt:`¸=èo9:æ †B„þe! á2 üÑP (¹Ø8¹œ|BœüB.Á¿ ¡0!€ Ðl Pe(A! gt:i¨£ lmÌó÷À`Áàägùà é‚-€€*nrxÌh´hC-À ¸Ç…`±Ã…ØÙÝÜÜØ€ÎlP˜µ# À ·hœA0W%à7e€Ðô56t:€Ž ØùO…6Ô î„{°âüèâ±ÁÙÚŠ*uGäOc•? XÀÉÆùO¸¿¼CþpZX@0Ä`¶ÔåTØàîpbùÛhï }ôºÁö@óGƒ?®ÈIj€ ÿâçl;ÂÙœÁö¿9²ÿóXfYˆ¥4ÔÁ;£ÿ¾Ÿ ²x¬»û_͵ƒ@Ý ^#+0ÄÒê7 KGv]ØÉ¤(ó—Í£ý?2kÀËÁÁÁ/(9@î6ì¿èx8‚þPrþ?rðñr„:¬i€|ÀV Çt/g +‡¹€|¼þ­øo„ÎÉ °[Àæ k0ý?ÑÅ «?ñcÿa`wÀkŽÇñãpüþüs2~œ0K(ÄÞã?æ´˜]EYÒHZ‹ù/Êÿ(¥¤ î/V>.+/€““‹Àÿxðùï8ÿTàoöH5€à¿n÷¯ˆŠ+(@ðOÕû›ˆë_“Áð×Ú0þ;ƒôqžA†ÿŒÿ^‹Ç/Îÿç%øÃåÿoöGù¿ŽÿÿÞHÎÅÞþ=ßÿ=Ðlïñ—Åã<»ÀwCú¸!ÿ5Õý¹Ðª K°‹ÃÿjáÀÇ‘„X?Î9« ߟb°³Ød©†[Øü9J÷â1…=Ò€:ƒ?;VNŽÿÑ=nž…ÝãÓâüر?T ÇÅúï´² ¨åï äâåa0 úã<"^€çãªZ‚Üÿ˜p; tp­yuË“÷kK¶Z=ØÅ› }æ7Bõn†.¾=?Iµ­Ý£]®Ž–‡‹6‡Ïõf¬A’yVÛAØR=™yê—¥ª»*üïÒµ4HZ칿Eh–™ûñHLµ8bñð;XñhÛÙtžÊöñ¹ƒIN“1*R _Å”"ITØÕ¦§ã¡¾_G^ ¥jÌn¿C\þÁòKÞ2’øLÖJÞGç‡ØvÝêwø—¡å¥UÌ]¥3N¸k†WÅn?ê¹øË(¡iϕÊŠ;Ë:¯*~¢i¹ÈÛ70ñŒÌ  Ó÷ó8ìu‘ëQ#Â×+Œ=,Ut1ìÓ){ÑwZ6»%j#†·æ!îG‰Ñn‘a±Gß«¥÷ ÌÍzK>=±KŽÙE[¯æzzò°*Ö²òBð&¦Ø¬¦E—±G }hÃCQê Û ÈÞÖzpð%Éò”#pÃø8ø`²n𠹏ÓV¢D¦F"ɺþV”ë–Ç„¤ÝЃÏ<[Mi@]'Ü„ïN;W 7 Š(F'¢l=DÌÙ1M¿”5áÛD¬Àyvα3Ñ»ŸsâƒÄ‘}²Æ1njw¶Î쯥›‘¿<„`\£o@ª¤-ãÝ­ê*?#[Éf=c˜†Ò ]…WP ¼MÃý(þiÅ(mÌœû¢“5où%i0M.ëHé÷ðb¹¥#HC6‰±LüLT7PSa¿mcäæ*ï=ƒ,õAxeOcçæLdÐGKžÐbpa˜á ´[1ìèmúNFn~)"E§:Ï®xÆjÓÔ\ïø¥¿•0›þZ rFÇõ}”EÚq†p FéäÊ)is4ÿîÆÌÔF°·þŒÃBÐ÷+|ûzìöóH;5ÃKBTÆmã öÎ 5×mDZ‚»úwú è¹-)͆Ž=¢úà“Ö£+¤­ò{–¯²¯g{3 ¦ÉêÔ8ªÃÐŒ±Y~™íuþ&ÆsúàÐk˜Lji4›´±ÜxÆKåû]?}±k#Á—°põ²ë·ÚÒÈA‰Ë³‘ÂÏoÆ‚ÛÃÚ¿•LqÒà£Ð5bWå*Í8LÿLR9·‚…´1Ç}{™ßJ>]‡jQ‰ß}[â'cà Ô /&ÁW®ÁêúÈT>?,ïgË@2³!7ùÔu°EÇ[ɸ¾­Nš/á£ûÿG£M÷º§…‚/šé|4ûqù”ÝêâRnœ‘2¤7h7'ªò‘’î P”cTû–TºÙvÄ=­Š|½y–>…‡‘Î dgÈVº&¡9Ûéég4²a´™å9#QÏÄôzj\¯ãŽ•~Ò¯6ÁSpÂŽ'ýfòÍÍ$)·áûÃ2 ª ,%$Qýçwpç](ŒôÇêSl› õµ ±ØÉÇW'HF‡+’“fZSBIÛGŸÅ‹õ&z“‚° |€|ÀŠE€ÞŒm+eD¢l„élôIùã{'ZBÄÔ'/æEZÔëÇcu£°¾¤¿5ß,ºÞwžc¼_ÊHæDöFW<±×d{.ëГ€¶lœ8êÕ/SFú†9*œÛI3óÃÀId†ý³ÖíOŒÑ©4o‹:½{8Ü¿QÎ`@W*™F›¿2ô“‚ð"ó™”s4„Uj2•§çš²¶™j?qhô|XøR¸îJ²Í~¦aŒE&Ñ*¡Cꎌ³¡°1›ì¸…;ù¹ë®1pwâ—¤îþê·Ð¨ðJÚ«Å®ï[DÓUã:‰(A¤Z¯ ] )ëçÀYÒ«µˆê—¿ÎL’ó‰ê®aIú /£(B ›J1\<‚úïÎò·‚}jo‚õ aà„gedl6e×M&¨œŒý2ÖŠÏ1´Œò÷uc ± »5éö½s­¹If=Ík&^Ôå­ÚÑgÚ9¹_Ó»ÆfOÓ-Ž{4¶úQ,AÙ¡8sÍzû×" -ÁÞ‚‰ù“_SÃéVÑa]Ø ¥}ƒUÒ! È  ÅÔ,Aå6isša“Ù÷ÕñΦÚ«O‚˜U 6Ó_šéšÉi\k:ùdˆ¿ÿÌþ®ÌÇlÛV;O5'S2t—ˆÚL|½œùŽËñ™G+oK¤ãWÞ'K, éºÞu‚€2K›Ô¤"Kq>ú%Ï<¤Ôë3)€ãñ혉UÑ\PÕÔaUÈ~z—ÓWó!‹Û`Ò†¢å`b®ù¥¦{/BCônë4ü†\Ï?¬ù–‘v ôi‰ƒz¢×4DÝÎ÷ãˆÝßi¶í†Â‹¥Spݷ¸]âKçøvyϊјyÂL‹~f~?–P~ë(K1ùšvN’#Þ-Dœz+¹`*`:yDl¹xµ¢~·œ!4¸Ë© ’0ÚY;[ï× gaíÒ½´¾áºÿ–Ouz.+ÈÂÏ¢¢@–¿mo«¶@~„òÞh[*Þ="rÎøMÁÅëÜYXàåÏ[$®hLn!u¢%rjþ© Ý©!¼§ë[£Ér¢Ï’ü†|•'ëÇê¥N‡ƒ¹ðÑÑ®x¬žÁRCÈH3>`£0ï[È­àγ¢õ‚7B­Ÿ{D< ÜVßÇúÕuÆxž·cu<ÝïH^&ÖnR»í|n3ÍÉò$q·Cì¯~ñýª•®\`š‰¼l/i«L0e¶ÎZšÆ×Wµ]•h£ó†–NCÏìÉ(dùgo$AýZt#b»hé3ïØ D«J%›õj’À%êðÙ–†-Öœ)üæú@¤¦Ã·Ë?ýÃlsmüŸ+ìŠ\ÑÄ{ýTRŽÇà !¿ •<¿%®#QwSˆ/ïrS8ðI.¸¤Š™Z"Äðj&Uy{/ÌĹ4ìrÅ·¥)ú, °øuŸý±¼»ŽÊ1I5$×`p‰‹l˜ÂV¾1ÑÍÎM]Oš÷’iš»20Áï´‘'ï‰&‹ÌÓ`9(Z ,%ábÀøS†¢Ÿ¦€ç|À𔲙Àni^AS˜R²B¦è´ù(xª(ãèÅÞ<“$>“ר¼º×Órlù©ªSý¨Hó\emù™éO˜¬¾ýœjžUV¬Þˆ#R}(Å£RïU'ž§3ì vŒ#<óI"W<Éwg”‡:ª‘ÚyqzršeAf¥lL”y§•IIÔqɽ( ÙtX ž#VÀ´÷.ç½3Yc„£îd¥í”'¾0:ú_N;Œæ¡m²*}a»o'/’ñ~} Å”§lá…÷JÛÁH'[,uŒäL3u}²Øù†Í—Ôý0$ í³ÆShâj Ó.܈~á 2{y”²©p«:Ý'ZPHç &óø%ˆØó,áê—|·³$ßRwé·^I¨| :ªeîTwq/ȵeÛ%ò9¯ô‚Ú-f¯Ÿv»U÷à‡ª¥ö5OsÕ“9ÂMÌñáÞÌ ïó,E“'áw8Áz)ÅDîo’ª$§,ãm˜¬Y–º† (³7Œ™ÝÁÆ­,× ‰Ô;( Æb9mNa•\y˜¾ŠT• ¬Î=Œxc5£$é=#m» _”£½ Œ9‘µQº6LØ™§}ø¼ná«aX³va÷?­Ž5ßL]‹¯<—ò†ƒñfí0^/ƒž†uTñ‹¼aI¤8©š(}®Z†'¡c–©ÔK_§ÿÜ<°?fyÒ·×ËÈûh×w9%`Úö¡Y`­œ-&¢I3ÐHÝ8;®Bzœx‰8½{ëèrKïƒ0=^ÖÐÛ!TÊ'ü‚¼Þ O 1¾¢LÌ9Zè gí[¸’|ë:Êæé&¦ËìÙ |BÁúˆ•uiê ¯kŸ{~yÜêR8W<”Cɦ½t®õ£¶ì±÷êeáy–É×tÏô|>qàE;±ó5X«ûx•îa¼Ä¯6ÿ1:%bLå?4ue}y¯š[ï›àÿþ7áÝ'\š¸«NéÊOªIq¢í7‹jù 0º¡5Ó»ûoØÅ<ôaœ2#@T£éStGCéD£݉‚ú–ÆI»;¤Aõ XåÉÂÖRÍçÖ±œ7JßÝlb†oÜ''a¡ xJ3I¶óDœ÷¤XÏ@{Z‹<¯`´±®lIð½mm¢"ÿøî¶×¼›p‡ªþÈC˜Ð6Kå†jY×ÐТÕ Þu##ÝÙ]é:Al]›î˾‡Ô“P¬jÙ†4Ç.̇|LÎ 3:¾›ù`}î—TŽý/ý²7²jâG³÷ ”–˜ÌV'‰“ñÔ'·ukæõôŒ=·Ó¸ãNHÔÏÒ*Ì<Ï…:ItÎ Cß½´Î5Ù‚hqóK´ ÆŒ^o{PáâÆ¿Ÿ³²?~Yˆýæ¬JÆ@†]rÓA3Æ´¶<Éa€Cav®M.4héüî.ο¨I,ŒóÝTŠÒx067('“†U8­•·KËf›farÌ™¦ž~ï§m²,¯ù7.ÿ,ã!wä[—÷cÉ«Û?úû2OY±‹«ÁÍ¿FåF¿VNímëÍh5SçŸSMHNq:|˧ÏÔ¾êûAâWIÙqáãy!j’ÚØ;"È5!&ô+»]º{[‡@7BŸìªœžÝˆ%Aj1 ±kî|[J8Š¢a:²}¾t8ò¦ÁŽaï ùÑ09šRZ¢|97²rf’êä°ûôÕÉØ©Hf'Þšé«^³úl܉·Ïrgz]MªWGŸzÒ …ß½ÚeàîìeÕÀG7˜X$jq›CYmc&F;¢6‰ Òœ†²åǺ6´&|&ÀŸôˆ;\.!ïRT¾qޏ‹œÞ9ư¤¸å#vp® Àòg9—t=lµMz—öëKêËùÍ9œsàêÑæ?_i±cZµ. p$BêÜ£ËÎz‘”5ÓZmÁïf± opYºñ¶Q\>ot¡Ã­ŽÙ ~æ_,!IIÚ“ u(¤«LÔ¢Òûâ¥|S—VpÞÅ» `:¸¥8<°ª˜%É‘Àr á†ð¼¤ÄfdzµÂLjE‰«ª0QS¬*eΪØÀZ-øì™7Yh‘¨K&`‡ Ǯο:ŒçøüžçiË”G¼sÒÏþ¬›íÅÊ„dÕœéÛ½öwû§ÚÅ;ýhË:›hÊÃOºj„5ª ±3Ô¹Ýà4EðÚ^ˆ¶ì±nð®L¤‹" R7DºgUœL… öÏBRZŒ”…Ûí‡{<äR‘ÊNCVõùz„,­Ga¦¡®™ð¾/oŸ ®D›s™<¹ˆóBé)œ{Zï²ÇŽkÌ@ýmféUѤ%¯ƒØ]TËÍþç|äª7ÚC‘jhÿã3·•›0LnǾODÉ$T0pR¦ˆ·çŽî»…s\«×ú'¢›ã.ª¶à)â$cÄl”yKб‘^¥úVxñâÍuÐ'·ÈæR'âÖG…6õ@{W}á]DjÕÒŠoh‰šx_¡OJ…϶]¿f¹ý.k ™²>¡ƒöÞ¬UOh-pd0¹Ùñ™zîe¡xíD Uü}³ÜÕ{nŸ&¾€ þÌtŠ÷³¥Õ³Yê-xêÕSâ$à@8—ýv;…ùΧ­ŒȤ,N‚ë©‘7ˆ…È(Î:IvžJÁÜy‰§,œ¶Y_~3ãìð˜jÀþÌ£PžzP«Ê˜ áV÷º+Àø28Û䨣¥[DZÞÅÕ+×Gèåu™oì*emX|"~þñZò»ØâØO‡ñs‡Ñj`hþPªqÛ‡ŽŸm_½ªeä¦Iü-À,¯·Z cݹBK¦Z~m³ëH¥[M/¾úæ­¿¥åÊ”ÇÊψÏ\mR¿ë¡Æ©ö¨´f#‘ ’Kq#lÖíuÏ]:KßùU${²-Ë—…ê—£Z´ç3Hò4n†ÛP [©R‡mÎqOÃ’ÇÖqƒÌcÕÍÙ{^é=hu¦}î}Ò¸7z,K¦Ìº8P¤yM*½Ž¿…æ0òº,úM%úøð@;^:ã×b™Úgƶ2Æ”a®¼„Ô–=ä,ºDDýæ9Ã-fËdH÷ÛkoSÔ‰Ûñ(]¦¨ÙûëéN«¸ ÛŠŠ†[H*#„=†•‰®À£ÿÅÚ¸õÄ¥¦€[iþ»"Z’X„ÛpR*/R“­_“çÙþ€ 3¥é†(U\eýÌ¡£ !0à Göi§£¹‹ÀT©ÚköŒKË‘o£¯Ë¢žŽæx›€U—¶‰:ç×x=Ãl_áYJò]¸êlÀ勳M\ "_Ô<é>UÉ`36¼à•ìB OÂ-~ý Êh[E©¬_÷8;š¼áy‰äuÎàU¯qÖ7Yð÷› PIk£1ö©W¬CÞ$ÂXÞ ´9jC,•«€/ŒÄ"I|¶û¹P&ÔJov·‚Õã3ßhVñy Ï7ÜéÐ<ÊÊJ$kìïDƒ}>ü iºCb8.`èq ×ÊM¶Éûcßá¦"``SÀª¯Ðޕ߮)ÐÅ‚¼œŠ~%ï@ú”5L»W.‹Çù ¼Fõ˜º¾_!r_Ó ~QÇy i‘Ô+¼õ'r«)gcGFãØ?¤«r i1J[M‰ÀòÎ’ÿØJÒÆ»ZË|EÔw ”Ø÷iªÂèν„Ä3Èì²u¥â…³ñ}Ù/%Ó ³5þÑx‘‡ÄO4…L|ýè ¹µŠ!ÁaœJ‡ŽSÑ®^©M¯ÿd˜ó‹mÂ&¦ƒY¸cnÒKâ~¿ìëéiH)|òJ‚œGþâÒãK]}>EðúÄ8=Ï‰Ž©¤(†‡cÒv* …G'1ŽK3Ž9"× É w†æÜ,¤lToô«(A-÷äˆÝ=5'ăȒêw9ZIÜ"TŒ£O˜íq‘“kL±dß×½tÌ1F„ $Ñ<³;‹ê|é‡Ü¾_Œ6À•ÌKFÁzì¾RtˆC›‹T.±@à™|7¹¹Á:2ðÀ—«œB¬sU9äèðBF©a ùâw½€ „â üWˆ¢\­ “ž% ôJ–èB%Ø|ÈÎŽÅhÀ‘Ô²n2ÇÂ2„ÆÊe¼DŸß™‡w’èêç%X3t¢ Œ¸™6#|ÎxK˜£KX½ JœåxÃ@Zz*½÷@‡TÃ41WÖ+y•à[®ãT#.:8ÐØÀÚì«©ÅPȲè4/[4Ùò“ÒF>ÝõF‹Su·Ë¥¼sÑž»¬Àê+¡ ?!RfÞ÷¡´ãðNBÑêg¼˜©/ô&DÜ $‘U7)ªªÍZ˜š tƒ©e5¹Ú‚‡J£ïªù$dü¦&-ÜWÍÛG"Ìg8òœÒc|òO½™ÈV¥x§ ;M›¿Ö½œpM/Ã[Ø'æÔíjDÈçñ†¶—+~"J¦éÅHBõ#õõ¡ù©ƒiÌ€Ì|}Ò]é’­EòÚ6ebþ„BÅdG-­{)°œöu↚\¡ˆF'7œö‰ ÿÎXÈ8îhxJÌæúŽ ÕÿpÛT¼R3˜<Ϙ}X§+ÒÏ +x}p°zðÉ–áÇœ!¨?wJÿ] !üuþú^~*ÈRÃ[\¢X„ºU¸ä#9"Šâ'”5Öfü„±/š-¯VÿñÚz³UÍÿ&º±Üd·º—fÜ6þ N#ÓmèâH ‰ H–Û :KcA_ºBçRŠ[‚/޸심ôª§G! å¾Ü“VNri¦A‘Uù°Q~ocG<ä9àjYh¸Üöp]; -æy¨ϸ-Ý2PÇ“©ÿ€-YnÜ|Á•íNèJ‹W¶R±ÅBÃÌd¢-=…U„¨ÁJ *tãD*RkË,F½RÕFÑ6ŸPæÉ ÷¿Ô×#çÀx3«çÄN7uUhVÃ}–ëû¢IxÁŒB¢*V~¾£~‰¸ãXèÔÀÕ¶š¶W¹‚¥rJ·„ÎôÉÏÓÃëñx>Ýo®9«†?œìMøä2åyÜæÞðs þ¨›þ!îÛ{Å1¸6£uÆ®;µûyÿpç`R­:ê †Å C逕mÊùæw'[7š)k%Œ•è0+Íl]Æ5+”^@ìkýà ܎7Gµ"X9ßáðÇ}丟#S){nw¿öpèÈ. V=‡A_41Mòò˜× š÷õ5ÅÜ8š±å©ù²]0«áG‡øÏŒ#WµlïóMŸAÃØfÜÌŒ? –묘tƒÄöy¬›>a±«ŒÂŸšHÿª!x»ÀªtÜ‘XÑéÛŠñà·-®Ž:ÐÈ`Ì€‘-bõ>5 @ŠFØ_&ÙÊv1N‚sÉ ƒR@‘÷*ýÖûAókó®&õ}úB6S’¼j‚Z^{éUx®ªÅ“úÔãn£-;U¥wêKC5ˆþÑ„h.ムœþ9VR¦n¡$’v•¢ˆîvÕÆ×F‚â§mKý§É²tƒ øÙð-Ñäônœ2ñ2ô{­±Ö5Óå¶÷Žw™ë „ Þä$)Xc9ᙌºÍã ܈qJ¾bE•Ævø\ùÁ É…>FšÝp}БËïlÙkhˆ…G¾¸óˆûˆñHa.@ÚÈwzNKÙ¹Ö§qGØâLSóy§£•Šzùý\âhy³í©"ýNWµ`’¾`S¯¦Ái¼ŠYQ› ´—X'@™¤aàpq\;ò!+ªÊ–ÜÐ{!ëëˆ)59¦PPÐ}1üäa *ˆÿ 0ICbO—÷ˆ£™Ì•1Ù4Œ§sMŠ}bÎ$ä6_ν&!ÐìZnãëGBz¢d#”K{ùèÕêä iÑ w+Qk€é~·’5~. !ä ½‡íÏ¥tcl”¦ÇÒjùÄxïšàx}ì â N0ke—´úÄéa‹",iwùþïh]DÔf‹u ‘?î9“‰Íz©«î½ØõfÃú'ˆBöc˜–nqvïÒ5Ê÷áèýŒn–¯Ùbµr"‘IØd÷$‡ÄîO}ë®Cgù·8Ÿ£ ®—ß=͵"ï綺×ä"µ¡ˆ]^Ç2há"´yÏ<» I-OdIâÓk:Öèè¯óðºû]Çí¤¦†\^yáÙB’–îMO®ý¥žXå;bÿSH½­”NjUÐÉš\ìB­—ßF³Ÿñj 9÷{w–œÅYaL#˜p`÷rú¢øeWb–9x)ýzë\›_v®¥¾uà«BýV<‹{ðý§ú·ú>]Ý ¤$ìH$ÐrMòÂﶨ«iß÷ï+r˜)Ń;µžVÄD"j)g«Mµ_ۘÞFXqYÛwýB]?ÛÕ ïÎUµ¯%,£ûÖòÝÀõû=ÝÀç/§½ž‹å—µ÷¬å‡b·nisJÅ !—ZHiŽ7f€Èì/†ÂY—¼ ŽÈa.Ï.,®}ßk"Ÿ6“›Úüië¾òŠãÊ*G3Ô¼ìxŸ°«•eŒ*V¡Š¼˜ÿcJ•ÐKmõ6_9Ÿ6,…¾c*¢©|û0‡•²(º;Ø”:Z¿[GFXÏeÅE H¶;š Ò5‘öiÂïÚé›[OŸ¯àÞ/¢:kÛóM=£¥qõdÉpjÔsTÛ[_=ò\4Lû9oµSuÖ°‹[ÎVøñ÷iŒ’Ÿ%rÄèÆPÀ{¸RâÍN™ÉËj \áÐÔ]ÞJp‚^<ºSÔ“}¡;%Üò¬Ø:çQê³ã|ÒQ.¾ágë‹y"¯M–Š”¤ £ Þ¸o¶ûˆ M*¿þ%]Póf•Þ^G§Jü‡òpÆÇÑXº@ fDª_é|‡ ›8º„ii±}µDÖ›ch€2GJ+†²BÅkëù‘æÙt×.ä7ý}Ô]¿b«ìl‚ŽtD‚7S«VÈÕiÊãX.O™S~H7»IíßÝ£ªhÔ"ƒ>J˜áµk®Ó LÁ&ìîîWNDË­)¯äç¤Ü^Çú½n¼ýNd‚¬ÉwtµÙ#oèšç^<~S_¼«O›á×ü)›Òw6ò'ûa­\`Næ\Q^ׯ,'æ$ÞçÎÎúØ”cnߘXk*ôè—û{Gwœ}†öQûF)M DL õ¥6FñtþQ×ÙZt†÷]/‡•†C°Wôm7ÉÑù¯†>ÕÐaèV´ãRj'ßoõ€%½Ð~×Mc ñÛ©ýùÓè·i‰¡8˜©“»¹—×¾Oi\ñc‰è«¼n üµ• (ÎÍÖÏU1•7#û€N.5~ô§òYp"¼XhÒÙ+a¹"ËÜm±aBÔµš‚¶¹S`þ^–Sƒ§ëué¼ë­Âû¡p ¬* ¢hâñ“‡¸€ÐÜH¯õ°â5gÒðÚŒ*¯²XæxŸ¯-ª4Òˆ&(hœ3:Dx½±æ†\¨ïêÁ¨ò°?óþêGáGDŽÍ U«“—k¯6|óK¨˜|£e^áÆ´9®!OøZLVâà†àµ‰n·zVyåòš»ÐGÞãz³ãí”mm$˜²œ© 7¡’RÑ«øRx•C÷d,L´W3úÚŽÿ€=v楒Â!­}}Wák oŒÎ¥GÒÿŃßÿƒÅÌœeodõ)ÒåºIÞ¶‡f?Mãå¢ÄµÍ맱ğӌÂf÷T h9<Æ/~‰[=÷.£ Ú±Íÿø9õÿ™Ë endstream endobj 332 0 obj << /Length1 1448 /Length2 6354 /Length3 0 /Length 7321 /Filter /FlateDecode >> stream xÚwT” ×." ¡€tóÒ C7HJ·„ä0 0Ä Ì ]Ò%(‚tK*%H(Hƒ ’RÒÝ! þèñœï?ß½kÝ»f­™w÷~ö~ö»Ö°1éò)Ø!l¡ª8šO$(i ‚H˜Âgc3‚¡] ëñÙŒ¡H —ú_JH(}­S£¯µp@ÃÃŤÅ¥@ @’üÛ””Áž0;@›Ð@À¡(|6%„›æàˆ¾®ó÷#À á%%Åy‡ ®P$ †Ú`´#Ôõº"ì" 0(Úç_)8eÑh7)///~°+Štãâ¼`hGÀŠ‚"=¡vÀ/È€Øú?>`äCýe0DØ£½ÀH(p­pA pÔuˆÜŠ®«†êZ€®þ—³Ö_¼ÀŸá‚ü‚ÿ¤ûý+ þ; \ÝÀpܰ‡¹@]U-~´7šÃí~9‚]Pˆëx°'æ¶½vøÝ:PUÐÀ×ÿàCA074Šsù…QàWšë1«Àí”®®P8…ÿ«?e ¹ž»ÀŸå:Ã^p¿¿%{ÜÎþ ;7p˜»T]ùϵ ÿ?:(@ aê@½!Ž¿ ù¸A©¯1ø¹!ÜûkИ=ôúßö„h¤4Àïþ-á v0°…:ÀàøÿÉ~­†Úÿ%_ï óÌA×ô@¿>ÿ!Q1ŒD‚}ðA× ü¯¯Ôêý›Ü€?¾®áö$þ¯Š‰ ¿TI Ò?’¸ä5×þ‘$„ƒÿHb€€ñoé_í@<Èë[ýM™ë^ÿ–¿ Po(r‘sªk:«R õâ[þ„3·ÐýÔ¬+JÍþ%×ÏQëVúýawE»rª¾½‰Òˆ¡qZî³o‹¶ÌàÙdµ4†J×¢â_^ï÷Ã6(ƒ‚ÆaP<%zñîn‚>=‘9–9G¢Éøe¸x»ðjÅJÁfÔêCÉMÀ(:!fJ¦EÇ)d7obÆš1±. ?šYÇ“ ÍS=ŒÔ þÀŒ…ÅŸ*6=¦þî³hŸöñëמÌî®áƒ|ÍŽJ±òRj2_ ¦ì¾g¨É25êQ슢'J¥‰Â»£¹}q†·nØêwég¥xÞŒ¾yë-Äô&ͦq]Ò£VÃc\ )„*——¬-ÿ¨­«¤{ò]|uòÝ~i‘Ž ŽfÂ[ÿ˜Ç£§ÝB³Øª1_€ìgV"°¸—E™+).ˆüFpzUÎæófSüúÙ}‰ýÄH—Zê>.¯âÒà($+}rm}ÁÀZ’r\:ùXÉÞdU›}MÒäƒJt¨’8°^÷4ã†è¥þ A&èÐdËô19µ¿E×}Q$,–J_ýü6¥2ÝZ‹ÄÎFiž·ähJÞú¦ß&¾‡ÿ-7)zÁw³º3ßÑcšD«ÌsµÞG…¢m½)ªj{7_ܳ^¼—ê‹çN12i9{ˆ bç½=d{c¦É b†9˜n ê:=7gæiiåZ/©ªf;YØ£$Iýñ"§Et9>½xYL8‘Jó£v(²²–k‡öJ’õ[Æ’ÃF^t}p¾ì(îìùlßÂ×äà„_‘?çÝ&!Y7~4…à¶£ÄÅfÃÜ•ô"2ÅmXuÙ´Ozß™Ñbê•ÔÚÖ%Äšµ¦-Á…lC›ÝSöè-”´>ô8éNþìäZùäès “Õäž÷•ï­ Œp¥Jæí딾õq§AÕp…TžïnýÆÜ»5m6ï Ãåü•![f›žw>aÆ,òñ4{}›œZó¨!ï²3g ˜Ö‡kïOLÜzê!Ù$QT‹Ñú²>ÊI£äÍšóöKîB»`)Cg—ZÔpv@^Që9-<ä0îg­çÇiUöuã3 z§4¢n_/ù㦠€Ýö ™#64eò –QbXð[ºtŠ›¾‚‰f˜»ø‰Ù§{ê)yåÌ[ÜUb¾OÚ¡uG®é;ar¸Ò‰©Ë´ZNê›'–öåíwûl¬J’¥ô‹GiÓØ·‰åŽt Ãhã)1cj†-²ï›§ò½È•‡²Ò?rÍàk ýxáw3³0RÂÁÔ‰–¥]¦¿çêõ¤«¶cÞ>Ù£y¾Ô”sb[Km’­ml8·ïy·:§ "v$|°§´%Ã=[¶­¦+ßV±ÛTIŽ6ÀqS¾šE\LZÙʸ¹m¨Ø &Ýšßè¸wó;áƒý妦¨–vÛ–«î”ûjáz”k‡‹©ÅÙ4hÑâ¢í™Ìîù2¤Oñ)@aQs°·Èx*6 æ/ç(Ý¡{HIL×ûõJÛº;ç˜h×W,ÂTµc¢ßúFAPH@›ÔzI¤öìîåèüϲûÓc^Ã’¶Ú›­W’=Gϩ۾jÖ'F׺ݦ 8‘ÐÕ}.%_T˽iñ Š0͸>8VÀ3²ÏôTwÆ¡û]’S2¾L¢]Ñ3ɵn¤¾J ÈìÛ¦b¹©uƒËWKDØÜèÂg_Ía8kôn@(‰‡wŸ’/æ?§ xY£d]L–ÁÏäžôÒYJHï¯Õ¡°ï¼™–ßú®r8ÛkÛ¹Èý‹“’™ü«ÚMgŒ©B7öWT6µ3D’.¡x*8)G:WÓ!1õHÒaç§h®œ|çHrÈÚÊáøµ¸wòŽü"\HF”³~Ýúž¥¿F]î /ù´•ãû MÝÌþ}¢Œµø èP–NÀHµiÛK2]“šVX§´œn•”Ó §JͶk©¦~õF±OÃ9ý ï‚@s–La²³yøö9ÙÙqÖÀÂññ+F³†?O7¤XÀ£ûQ›+ã‡2ï—å¨A ªšÑÇÕý”þB‘.˜!Ø[—09ÆÜo„R6Á«n ³5rGdEî-J>7°]Þˆ§÷Ùøf×téMžìZ}ŠøtHàRðÍ(¾µŠ©V}×"^ådÓy)ôÃ-ÚiÐ “"f¢bø\›©=–§Œ·’m‡`cݵ;™YÇŒšî(–Da5ÃÐ_’¸AÔ~¯@Iž â8%ÆÓ:üöË@³§-ˆá¨ôàêðt6WrÎRöŽöe&ÍÃ!1®•D2¨LÌÅÚ#HoÁʱ¶ö6ž îŸ’þL –PHŽìW4þqµAÊKÐö?:”ð§{5pÓx‹¯?ÏêôÌ389Hÿt+U"~‡ÊÜç©(ÊPïžñfwP¾º¹+·ÁÎüZhÚœÃoÛíò¦qØ»«qQOQ´•Í^Þy3¢PµÞÇÚUý±`g"vüNël½ ËݱxÆñŠ+ÑZgíCϼ.‡“ÊÓ{"Ì œ´"‹üo‰Âý…=£ÅFm ^¡“6v3ÇÔÕ~eÈJ“”+AnÎÏÄ\ó&ð.Ó!Û -¹Ãe}ŸNâï<•–UJ:ú%›fÛ4ñ‚8Îm¦åÛçJ5‰åbG¾Þ5Ça‡$n>Cª_í®ÄsÂãzû|ñÙgFV´^¼cÙ¿{Ñyƒ›WL“¸ËÍá©üˆN¿T|I}.±"tVuŸÝ'ñÄÃô©h£„ƒœj½=0ÛèWnå’âPOˆ¥æ‰ÏÜnêbO±\©0I9 " Û:ì]§~ÿºq ß:Žý¶/#¾f«šíÕ84@»WŒ~$IØ,µÒ“>Fú¢ó]Æ)Kå“x“&ÓÚȵÒõÞ¼q9Î-ÛS!JÌδ7Öe«Û4µÒâªøùÒaǧ(Ñ©BÊ3¶žî‰‰e†,ýBµø5ÇÒà¦g5!ÐLçÐð Þõ²1+!CŸh.ogrÛzñAç~fÏ芙Á§~åÄ‰ÔøÛES—äAoí#ÍÖÝTʤñm*»ÅÉüý³D-´¯”ÙÇ  ,Øâ²1Þj“÷W•ë &Šíç8;…^a5N7ÎSy•e“éTGIQ —Sã{÷°4èk&YCÒÚ٣˵=ØÜ ã4ëLŽŒ!OòtÃTk$M‰Üz¡-ÀQUfñ½íóû«–9ô£iÞºK%p~VMÐÓ}Tw@Æ ñn{c)ÄO÷eÆé Nucó™cºÔxÖp›¸ÎúëÝíØàï!LQ(r³#ªÛÝ¥Ÿü5‚Jk£ê•Þß «5:"@+g…Éÿ˜Ta²‘±t|7‡Óº| ëA:QÏèö0oìã>–ø¦öÙÛfó¡÷¬s.Ù-:NYçLÒ*¬³0–ÜsE¤·§2¨F«†ÄÞýL«ÖÄxÛÕ+ýV”2’åS ¾Sšä"ß«å}É›åÉB§#=^Âúw_Žß)=+ÊŠWÞ7Ü«¹CÓ_œÓ‘në¡*èÔnõ#TåÒÑ–Š|º˜D¯nø÷ÌZvú½º»L!éù‘}tý{Ï.ëýæ ‹ÚÉoª›5Y½)†æ}qZ€â†ë»x—ª¸¥/¬«Ø„ãgCß²m¬˜Io?d³`V½b]è$K‘§y,›Ö‡Hi¯±ÏÄܲØ7°øáêûêȦÜí¼ n”PpÖÂ:Ê ¿Q»jüN®4¥9á‹2I<öN^,Ô¯]0N|ymÁ䎱ÃiZBkìØçÐ+aÜ……¸ý:+ô‰–ÌøGflw·=ÿ¢á2†—5ïãpÌ?×I)È«·!,“4†?$iÛ¦ú£WµõL™4pM´g‹]Q€o†}>˜²l¾ZV+?ÿÔ£²ò7TØfKúªŹ#KÄÛ{™,ʸ/äÚƒ…P¤a'ãò[#3ÄÚ¸&]ÊÅLéÜ>€©I€×XT€ô4Ç °°d ø ¦|kQ.ÁNÓ ƒ¯ëÉÔÉ¡ ¹¶`—–­w7™4$œ‹‹Ô?³ÚôðcQÖí3ßï<mN8ÉÏ$—p ä’¥™¬hÑ$*Í*>ùpâÐ dR“KøP¦"€Ìjš—øÎ¥ãvž³@8ƒD}Vž—®\F%Eñtù²Ù¾h&üDµ†f#˜&Ø_wbÀf~ŽeÞœÇÒglÙÿ³\ëîJDœšmÙ&#¿.S=ý«HzÑÚj©´ yBJY˲ˆ)ñJx©¥ýýôÞ¹Ñ2ȰˆKk`˜wÛ'"[¡qàR1B‚Þ|¤M¬dLÍôŒ&iôÝ9õÍ뻊·¨|hüùcfð'jq"AÁÉ7Ó¥QÛœÎ{Sà.¸‡ß3wª0$tÄk¾.g—çg»g?-â&:ÿ^É÷-ÁVã½÷/¦‡Ô'xA…wû!gü¶EçÙ¾Û^n$!Øà‹ ‚YŒ¥]äžL²e‚äÊí=½€5|­ÈÜ›6À[‘“ì®Ñœ¤}7nB×®ÇÞü*¤¹§–ÚY^ú ÜK¸¶Û‘ïnq% &ëßÌÌœ=Ki”–O|AMÔì'/NÀ&Bœqμøºð®ÑFñÒýÆWR;NIð‰«¦D¥Öxj­‰ -XjÍ›X¾ãâÙ,é®2~7¦×¹ËBé »GQräc²vÒ©!x¾r·øÈb_¾/IƒégSu±õŸp KµŽÈù<Ÿ°?@:“_`sj©|ñ ÕžAΉÅÇW9^¡i6·Iê']nÊPL8Mn[F•êNžV Üàä¢ÖÜ\Iëqci'k9DÁ£÷½Ô]IøÜ0ß D»ehŠY·8"#9ôçiŒ+5©ô´×dõEƒípù*‡¼<[˜¾Ë/…ߥ™`â ½Û3xpÁ;m>Ëß>Ö(·™R–é¥Îûü±j½·q°Ð裴ÓCŒ¹±e¥%6o™u© 2Ï+\íä¤ÚÇ@k—sù½vƒ3ûGÐ, Ýf»;[f›ûXß\ÊT0¹+x_ÿ|qÔ…‹ÒÅ“• Ìi®8æßÏ»ºß–´–@Øw"†É@ƒàîC—­x1X7¾£ÖK¸ò“ÀçÁcE,ÇÀÒ›S–ŒŒ‘ˆ$\ú\_U¬Þ^ sÆM¼(({ /‡<ƒÍ”Ñ©úq )k(§Ñk7I¼¬è 9+í07¼ïÉã‹WáÁ/Ô*‰&ór䬘G”+E¶¿'Žõ¢ýÎ÷¸œmV$â90næW˜Ú™ñØÐè&‘¹ìn>IP¤0ôN¡q¦?§±4(e·òŠ˜›Šž›j ¦ŒTùZ.$æOæyô"OÎ`(ñÜ_d¬!9»¸æu¸®†$ÐÈŠ Á:ïœ'×ý"%´˜mž‰ v¿¿HÑ=bKCËA¦ä¤£âÞGê(Ù©Â^Çåú†3úÅËTûŒpºrªŒIYÿêNRÎÚiÞåÊÊÄÏ{«òP÷JFÍŒ8~º±'´±sŒ=¬uŸ^s¯á& Ëjæø·ÊA­ÃÊe‰Þ1Ë·8ÁÊNuç’A½i)c’¦S‹ Ñl?ÖjtØJò™kËÅcopâ­ðés]LÏÏM” ‚K¦Ÿ¿“SF–&¬¸jDj³b€^‡<æ<Rîâ[üL jaØÚ¬1.¤ÏTó"~œÁcùînç@‘ă„ª—{1¯"t¬z–@*lÔißTL„«a2eRõº% ZõÑÛsæÌŠŠ®ê2G {±ÚÞœªi 8qü‚¶;^ÉÙþI‡5/6€~Š9ÿ"D/ÀÓÍ€é“ ŽòWœ"Hµ~t øDam$û–X›¯¹7&¼xNRÔ#¶¸c·>ùöòymågD\OÅŠ®IkÔ„á‚æ–X{«—TFu‹]C Á%ê¡§°´!’ó¨7rB–½™•5­]ß.Óý¢ ³™…¦z"wg ñ®ª$+Qƒ]‚ÊÈ:ZäS/ƒ³Ú<¥Ùm󡺨qÃR±SVqùû6J[|,5.‚qý%8ÙÎÂU“Rxìçìtg/òlkIì~ÝäºPÍ2ÐSÜÊÁ^9ºþ‡m™þ>qÒÁÅÛ·Cáqõ¤íÖMmé†ÊQÖ 2 ’²k€­€·Çßš<âœãÐKð®îª´Öîú1ù:açËFÙþ­ ÊîBK¤=¯œ’€?Óú}¦ŒR^üYåÐÛJîñr_>ïS}ãÌKÙK}Ýúf5'RzFÅ~2Ó=èâñ(ɪ˜ì åÇ#.†!CRyÝu‹iƒ:Ôc ÊfÁeiSÉ’•*4–^ö|"Ä)ãù*TËN’m[q‚BØÔO½ Ÿ>YÞ>–9ÞDÛ·F¦Å†Õ²6¦ÃøÌv’¦ÛG{R„h³É|?SLäkù¶Ø}Nð)âaX«‘¥…-RiùlaaÈ[˜mSîÄ~ÁG©ðˆŠîg í —RLTÉ‹PUÁ·:ò©e‡¦·?6®ÃŠ,…ƒaØk‘4ëÔ{AOòüÈ-2^µæ-yå¿q<ý|·< 5°½¿ì¢Ëšns¯ÑðʲRœîaÛèÄÚ¹UŸ:;áýiq€|„x=ÊÙ¹Aä0fÕ–…ÝJ¬5åìeF´jÚ‰VGP‡ÈN¸ßtÚ×îÖJTÊïÂph¾A¶°™²‘KL–ÎÿŒÄ±jeÔFgO;ÞôWûh¤2öÆê´™?f; àã¶¼Çb[h+ÔO¸ðÚ>>z½W4W WÜh×tÑØÒDÑ¿ó⽋Ǡ޼°ñÙ Ãg.3–Žù³œ>c…Ó¶´œß—HêÎAª`¬†ÔëP¶Fœކ._†d<ö‘+Ã(ÕJç¸`Ǭ¡BJ4…Å {T¼¾_A3U¥ž¨[НÙOg'ÂjôwÆÂ7ˆN‹mì ìV႘3èClvMqñv¶¡—´ºK—… $¹Ï¼M…ÅÌ}1"b€Éª÷\_691½ëbX?¿•(ñÅõÞÑàÀÇÝ!å¬'Aú;^âàÐõ>MNêîQˆ-dô?‡ÑÓŸ¼4¶8{óíÍ#|ê”.Êç§h‹[Ø´½KÌÓ^ ª2~àÜK„½EOÏ=Tî”·åí+–Œ“éŽÙ¡9ÇMÜð—¿;½{ ß4Ž*X¡åP‰ï.ÈkŠÈœž9W"5©ˆWs9–n7²éÏå¬Ch!?ã¸×´4³ƒÖÐŽùÆnÛ6Î%D`xYG”[Oº®ˆ§Š»±÷Ê>‰mÿ…G¢÷Ϧôãjk‘Ÿw|*vš¼-hh¼"Wì ù˜ðb3ÖsÐð%§_>^nátQ)µÌ¦‰w¶/ª„­¾ë;+¤ðìÞD!³™Ü>GQ«¥½Àmíb£3 ö@¼è¯¤¸B…Ûï©à®ðVñ¼:UNo/ˆ3l`CаÉÛîh‡?iTÒÚª{59lÜ.Q:¡ö~¥æ§Ýü!Û‘]Vº•E)¡ù®¿6C3ÆïÑp Qˆ0bœD¡pµÌ¾´èÊ7Ó¶E Gî.u[8Yz•‰ŽKf™±lú“Ò|Ï{L+µ×8ùnOϱ¤¿‹ ®8“Hï„õI6s*W%gÕÊ=ËFó!?Ú~Í×ekmÇ#$jÔ ë¾MòúºõôUò´ÞXÇŽlË#œR7ò?CÃ(Ç endstream endobj 334 0 obj << /Length1 1466 /Length2 6419 /Length3 0 /Length 7414 /Filter /FlateDecode >> stream xÚxT”ÝÚ6Ò t8 ÝÒÝ Ý%9 00Ì 3twHw ‚tH·’ÒR¢ %"à7úúžsÞóÿk}ßšµfž}ݵ¯}_÷žYÃʤkÀ+o·«ÀaH^ Ÿ€@QËÀ (âÄge5„ ¡à¿q|Vc°;‡Iü‡‡¢;؉”l‘(G-8 ðÈ €"@Q € €€øßŽpw €’­'Ä Åx‡ø¬Šp7wˆ£UçïGˆåùw»C@¶0€–-Ò ìŠª²… à éóRNH¤›?¿——Ÿ­+‚îî(ÃÉð‚ ú`ØÝløE më þCŸ`èAüe0€; ½lÝÁ…€À0*Äfv ª Ô5:n`Ø_Κ9ðþÈüWº?Ñ¿A`¿ƒmA ¸«›-Ìs8@ `€ŽŠ&Òɰ…Ùÿr´…"à¨x[O[ÔÖåð{ë¶y=€-Šá~;Ä ‰àC@ ¿8òÿJƒ:fe˜½"ÜÕ C"ðíO â¡Î݇ÿOs]`p/˜ßß+ÌÞá {7~#ä‰X]é Âÿ7æF„ÄED„ðØäÄÿ«€¡ø·ñ7Œâàçw8 h€ `Ô¾ÂÖ @º{€üþÓðÏ>°‡€;°#†ÿïì(ìð×Õwˆ7ÀB%? @à×ë_O–(…ÙÃaPŸ»ÿn1¿¢™ž¢‰"÷Êÿ2*(À½~¼‚â^qˆŠ þ™ç_'ð7ûߨ®-äÏîþ#£:Ìÿ‹êôþ&âùGƆðÏ Úp”žÁŽËÿ±€°õü?ÁïÿŸöeù_åÿß;Rñ€BÛ9þrøì¶®¨Ï”ž=¨ÙЂ£&öß®&à¿Z lñpýo«:Ò5#ò0G”Îyùþ…C*o°½. rúKK7U uáȯ{% ð_6Ôè\Pw Õ²ß&0j²þYW‚ÛÿAAa€­»»­>J¨•0ÀˆšU{°÷o‰øù`p$*€âp€»ãÿj¬ 0€ßÖÍÍî ~âjÊøð»B`ˆ‚(ÀŠ„¸¡ ÿ(ÔÝÖþwû~ÿØÈÃÝ5½¿5„Ú÷ßëßWì á/ÎÁA’áίÂ;/ëäé¼x7ǰWV»c’Ì¢…‘lóÏýœ4qrT§Ÿ(ØØ×Pfê.TDNÍùÓq^Ž{?~“²œ¡V€DSXW8æ-þ~úÆÌh§uœÍŒY'=JÖc ¶±À´`O5™»ŽíÚzù¥ø¦±e.¾p”ž“0eÐ!ãåó»÷Пš1±¬"GÌ“$¹[dyªMÜ ?…$\(tÆÑ|÷Y·HÈùôémÞà@¦ÐI‘F_­HM$9Í=ßGLù£)C4ÉyZhl ÂçŠéIÌ4%®‘lË6¢Ë?fŠ;’‡„<šµCîê¾köh€ ÏIç÷.ŸÐ[oä~ç'¤nM‰qâ©ËdQ`­µG;É:ª‚ôaR2°º—~jÍÀËÊ/Ì4Ñ?4ÇᆠY}™¤¾´‰ÏI Z¦KCņ>¿PÑ…2º:˜|¸–JÓ²’ëªch39¯zŒ>àáûöbRez?v¶Ýú¶s¤7êÎrÈ@1’dÚ•³×¿›Ü¢.|þžÔ˜KYY¯1ï±æLÌOœ Ò/ÈÇÔíèV•4—_˜dN4".4$7ÔÜBËÒÆ3“ˆž!!"w9¬`xù¡ZäÝséÐVét±`À¥Éã;Jzû‰$õëwõz¿cY%Ù¹ó âZit›;Ù”i³?B>L‚4ï%]o+˜M‡‹Î-(ÜY“—>.pˆÿ‘ðmë¬é¨ÀT¾!Ú“Ö3´nýâC—ù`}ÖëÉý¾.öô-oµ¦«sÌcr»U‰!æðhUs¢p»â§AŠ#‹A[ÍγV\÷ÞwÍgß €’7Bܬ¶›´Ü~T>QP³/Dˆ ­×h³‰ûaD)~##´l œƒñ¡994ão@e5>PíY°ï£ÿDÞ^OÏÿhÈtQª"öÃSWèãg~S‘·>òðžúÃÀ½-K“'tJ¡ZmØÑfWÊN#[I‹Ìgß™ê*kÞ®[ ¶Ý­i«€«¥û᩼§iî ï²÷tzÐøwÀ /ϯL´ï3èç(§”d·%ΠŸý`K[Ï‚ÞWùIù8H“]ß ø’Q%ßîkiÍDw”PñÒPZ²ÔËNïé0 ãv˜ ÎÓÚ;¸ßp•¥q-G3ÖXéW±¬tÜ y) רÔžN`R¿÷jæÕ-êoú¤·ÖÈÉìžw_³†<ä8T"¹Þ•‘ÏÜ5zžçç¿þí›^€­Ð¦J9#½ûT̳š§x™¢f"_Þ[³&ÙÀôÁxyò–P±}ä^˜1¼!sɳ=?E¶·!í¾dZ^½ôèGžðÁõ²ªîÇÌUß›Ós¨¦ô°<õÓJ0óô”œðiˆfä¬yò‡(Góˆ»\È(ãí [òê—ºVè• Ù^‹9ä¥öêÃj¾.  ¡0ïIŒ±Ã!û#Fºê ~ãcÚ‚Ã1³ÚÎÂþ}Ï7‰…m?[5Yu åö²ÕÂ"Sɤ–uÙ½] òLžådidv2*Ó’=kØ“]Muãš õ$š§’^Ò"ÖU‰S劵S„­Ž…Òc 7ÄÚ#´>z¥Qam:œá„Õ¢3_¦Y‰"ðÂU НRô}_Ÿž:ìøEMZ‘*9}<“Ú(òËÎ^SHÝ ¸z=¸˜t`W<õY^«³z9óRÎÄ(–Z£}ÂFóåŽFôõCiªƒÛ*¹9#@JùG(Ï']¸òÓeª/.èï³¹ˆDqŸ`X|`ÂÞ¿¸j_Øžy ﵚgia‹Û<=±$ƒ¦'n´ ÚØÂÃßð'­­Yqæ0nöÛž¢¯V.N6¬R†t0J&n§_{X¡ÄàË Ÿd‹(H“.y–² ×qk²ë':™#¦.*È-ù±Çxƒü¢§‡å f2¸ŸÒç@ˆîÜT€lÇÝ`ÃKë3Ÿgý* µ+BÑŽœXß+wŽóhmó«ÚÅ”¡›ÕÆ6ƇÂzl+r,϶egyÐNì…ÐÔ,'‘äŸ:Ñž½ÖeØú;ïÄ“ VºLznxo’è.ÚÜE.:ßH–4˜gl÷ nx.0Š»ø&P6©¥ø¸IÒ* ϯRi€y“Çúá–ÕŸrí|Ue™YCýÁŸJ¼˜¶ë3ÆDâGKôu·Y¾´´IüìzÏ9Ü• ü`a»Äž½ºo³‡Ž·­™à­ ?Ý€õkB@Ôb]ÜÂG*×шZókÚþ"M"±‰×g‹ñ ÑÓ¦ ø½EôêØ\Mµ’÷íÏN›ó9³¾á<Éçž_™ù¤Œu”äÞÁ'·ÖzwcÃ+×€#@fŒ}CÇ~–7Q?y^4(.&¶—ýToJIÎfÑá¢mÒdöú@eAj[! !cÇ¥a©gEÿ€ãÃì„•à+‰ºüõ;kxZÜ8ñÔß5 >óv¿â!Þf;EMx¡Ï3rÿÔÄž÷ÉŽ¸“Š ûÓ”›@ ï_-b¤h îÍóל3Pî!"0®ÕÀ9‘‹ºŠ;žÚ‡[̪"¥û„‡8ù–MÀByª¤×qiÜþ[umƳ_WbUË«¡¢¡t&÷|—Ý ¬¤¨2û±W>4Õ”rôP÷¥×GÑøòlh^ôÖì3÷o‹QºÃ8ø—øûª€ò[s,­¹ÁUë©üÐjT5ntÃÛUš…Vù´¶7]Hhwý¸ÚM¡šaˆ7b\«ˆ!B7†«ñ9\‘XêPÚæåò!ŠšñR È)Š[žaŽŸì; e`X¸ i¬ê3–…ô‘Åøžn‰ ø÷”ÈØÿtö1̉ék2vú’¹Jó¤ì£âMòiòÑÂëöœ;â¾X›†ÑŠËAüýÈÀöä¬H¬28×A¦xÜ ûĬúÓB¸s­ÑÆ9¹·sa;öØ%·°nîÕW‚>õ\¨’摞9†PÈE³./ ~ÖyÒÅ.5iÖµ‚ æÝò_ň†Äq) ?È´úZ OÈð³T¬”a¹ÅPÁóudšŒæzoG›ÁrŽ}Ï«ý#ä`¬d¬~"–8 á¥çø)Þ- hENÊ7ýl¼w¯ž@Ó8&ðìíÏëKWÂ{PÛqBKÖ{û|Ì¥6IÖ/õZ ôA´n¯ÏGpp)èÂ>|¦a‰ôÓc/9¿~¡/2,<@+=·j¹TU½‹uþTU„Kð¥ªT}ɰzÿILKâžm…‰Þ«oø õ£Wm ¦Å´E½BHuþî|˜3b,R3„)=P~šâæV«ÂUUþ­~9ËóÈ]gÆ~& »[L:á ÆUK·o*ñ­{Kf¨3G‚klY“Á},ž¢O<…Í6ÅY’›Á¢C sòƒ|Šc_×nˆ©F/ú’q3»ï¢ùé;y†œx°Ãó‰» ³†i¤}ÙIKšã+DöŽNv¬” å7¥Ç©g[{™¾Þ[6ŠºòÏEËx€ý]Ø8|ÏaÊ(v÷‰nHÀÅõ´¿ôϸÔï™^aÝ>ìmDŽø×2Æ„€ÍT.|nG7ù`ž:ž7ÒþÎU‚¤ŠÃ¡¢¹ßf RŽ2j›2èI‚øvøUÊéè†ÛFŠ2úy«í±è|Ìô^`'Zš"Ýàçà9W·“ÃGQðF¹ºúµŒŸÖÇ»òÓABekz;= ŒÆg,ÇâÊEí”IÎÒøO-eUÛÏü¼°j­‰…….JTgz>SÈÞÞÈÝ—/¯"[ízòjâx”øþÊë婇M8±ŒQÅI“‡À—ºÔïñªOyæ  DÎÖ;±èŸ»—Y$zãió™ ³©þG<ÕYO÷…*ËϺð’Ý ¾€Â¶ñ»ïÒZÊ©>Nt«Œe§êês’C¥©kÞ80QݹÏ5ÚUɇͿå…Ý£/ÖÎ!·¸ø4Ç—ÔÚ%קͦÿé…Œ)Ó[×tð×¹q(%‘ÉOæicEµíËgbï]¨f“±¤|.ó´=mÓpvKÊ»øJБÚ%ýÑPÁW$­.òê–QœTZ—ÄAÍE_~še,šhCã±±³gÙʹ¬†’Ù¯ArhÄkÔ×l-ÃþR+ãř݌S´ud?w+¹Ó@D5ÁÍR…>ì®û©l£q7&ënô2½Îß6ØKµsUV±²dˆÐÊÇ^;[6’ÁN…LeúÊ.*Kk_FÜ鲃2Äû=¡²3ãa^ãÚ~Ú=<æRî#t _‹½Dû>Q[ï%LTòZk»´,&è¢K¢Ø³î§œB1RÒ÷Ô+d‘f5›”…Âxuˉ™wîëÂââÂbùp¯–óäÐZxUKÒ¡ˆi’!w2zúCèÙy¦Û}¨^íóT½/Ù1˜v«åün§wšNŸÓ¦>éV™ô¾•'Méí‘ë½ÇùY䪑àÇæ+)5Û“âz²n}7AÙ¸—÷â+;åÍÓ`Ã;°¤ÝlœË ?®l… + gþè„ÃY[íAúêZѥώõZÖ~•t$eLzŒyülˆï¶3‡-…*îêY÷§GÊ+GÈ©Ž:ôñz/X®X^Iߣý:Ÿ'»k/'â$±ª¤Í Ú¥ŸEcåÒ P£ï£ÍÞ)É—T´±š…5ìîÖES¼ç|S BJKÒ Š@0 ÓTÙ/Ög´»qbÖpžcßæYßÏ!-⬟åh»Ê-iº«¥ÕŽßÔNødГ­¹väBqeSH­YÓÑàe¨ëá—L‰èlŸ¨»ÔÍÊÍû¬¦¢Ðèif½Ê7£K]æñÈHîªÎi³n°(¹¬@Gú9.ÄžŽ.G³QÒÑGü ‡™:oRÔæå·CI›YŠ­/ò“¸j/Ÿ¯š©1ØS›Ö:Ô†üZ½Â†ô­Ì¦rhˆx🳨”¿ÏPSZ<1¦•u;Áñ™Êl»§»Ìª"ÝÚ;4¨…}¾x^¨ª± ëÔ¨ÝhÑŠ©>b½¬ˆ{lHé»<퀷…'5“‘wrÇæ!ê[Y8÷ˆ½ófõ‹M€>6q(· ÇåÁ¤kÚ‚.E¶§pG¢BÏ‚HvOÕw¢e¬B1" üsœÛE}SÐD\Æ!# ¢@2yÙß|&„Œj®úÙ^è\YÚçÏ\Öøåì0i¿`hØ‚bF3Ö©=ÁŒŒ¢s.,êB±r›ú€5G-å1Oµ÷¸ÿ¢á}P¢–/¥¢Aº¾µ€5vàTv·Í\d’:Í•gyÊÉ€×Äœ,‘cü5{KÝňtùÆG/íÍg ¶ÐJ‰–KáÝp¯>ëÉeX&e¡˜ÉQf«Í©ïŽOnÅê”9$ݘ¥oG@ó|¹.ªˆƒYÅѽõX<ï_÷lÈFpËÜR²üZWÊÕE¨34n1ø½êž¹Þéú8bðžå¥ÞÆ)Eͳ¢ÓäVJï,/¼ÏÝ¥ *­Ë¹Xl„ÌáÊ©2c‘þÍ’6˜Äž?X/ï¨5´8Ía[…‚Ñc™U3hãWª°Ã}b‘žÞ³özÉ”æ>Ö÷^Ú3§V¾°ãÞz£i¹­õþÌ.âu².búJ‘¤GIƒQ‡æM”C.‡£œ—¥C©qöh¯ÅnPà^Påû£±¼g5ÞКN®çt-}³àO|ß«MÃÖå«QÅO÷ìœçÞ±Èõõ™H™eÁ«—\f…3íõå÷m8"äü’¤±|LdzŽ£7d®’k·|ä¾ ül3Z½Âýý—BŸšäÈ/ãXÊGÁN´ÊÄæØ~Œ%Wõþ(—×¾s©Ëcc÷1Zïú欠 và &™%¡ñT}/¬f_¦QsÎfóúµè$¶ÕéÌ] ’è—÷6{¿ÝÞý­7€{æ¥à8™¼ÖycpÓ‘ŸË<_ ͵;>÷•l«ÏR÷™}¬<õft7ÆÍ½ÜE‹ E[®Ìöú¹Pz´o$ipñ¥Ÿ•!ä€s›ßMèryñu%3µ`“~–28Eø’»±Qf~ÂN‹{¯¾­ì[Öç-»h½W´gÇuP²çs@ ­/Ž' ÉrðZ +¹†ïcí{…±á[×ë”Ê»8<ë`cÁiRi-*89ç=ÞG !ãÏÅÓ´F‹‚S­2ÃÀèù·©ÌÄ=z&íÏÃtn¾M%?äÒñýÑÎj=u¥U™±]¯|\X˜ OÜß•Þ%K3£În<¿|{¼Ë#/ Q_Q‰MçÏ“½~›½Jhi‹àkÔæÚzeØÞ˜Oú9Ö,+mÈ8Mû™yÛuÀXíxç¹{剧ý'modÿ‡Òò³Ü{½Öå½Ûžøc>_éÉW³l¸wMdá˜ö’ÁU/é›ÙòÑÞVÉ?Sï³q!­¿<ƒùxyçÒ† t ÷ôÇ—Î𾟂’cÔù<»Íº"¸4 â1ÿ¾“òÉ“¦^j_–ð›žã­T:¸Rp&’‡ÖIä‚nà¡8¸žZúñÎå ¹è²;H5y>‹JQÓÅ.#ÞÖºÓ¹÷R)%õ9/‰NVﺸ5P—qí“.´Þ=‹aX9ÇŒÎOî05\’„dJ˜X×–lVÏê6Û—`Æj7lþ=™—©æŽŽ,–*OÚIp»ºðЩr4·Ý͆d‚kóŸL4¼|ÀìN·è=®zMýöA¯¢Ž¥ýwºm²¬˜¬DjMWT|Z­CÅÁ>u-þ?k ã¸s¿t*BíG(h0Žå}§Rî/îX 7Ï1Æ[JJ]6㽂ã„c·›Óšu4q,Ëñú9î¢mtûjª©ÊÐXK$Ø0EZ(HOä:f¢Ð²W2JŸ£?%ºdpdç~¿z.ï¹;[À#ÂS6ž)v ¬ssngkk*ðàåéa:XþUú¯&®¼SÜë_“< þ)QÚµL?•ñ ýú˜ùÉ}ËWdãb¤u·>›ÔNa?>Þ\t+Ñ2¼º;µúíXÐÉÕVd}ü†CᲦB‚†dÐh4Ñè”Ũ wѦj~ËY¢(dɳÂ)¸Ÿ"±€ƒEdU•Î,Îv.Dâ­ÛwüNú'Yõë„óOÅïœ`¾<Ù캬IÕ껵r!’QîéÂÉwÃü/n¡.w_쿉˜ŒäxV½T/}SɬÓB]`?·~&h †Þz1}u{¿w8à•'Ë%¯® çËzô®lùmvÖá ƒg`º™÷çùÆ$Îæ—ã–"Û8B#l:wÌy¥üƒ5v½ú v_n§ùl‚eè?f(H.ÜÑ'2ãï§9kì>‹žÔ_Ç /kYs6ÎgºH™äp¼"ÜTã< ¨v9åuÂ=d–¨σ¼‚4r2"Û–þ¦6^| endstream endobj 336 0 obj << /Length1 1392 /Length2 5904 /Length3 0 /Length 6856 /Filter /FlateDecode >> stream xÚvT“ÛÖ-Ò«4Ò!$ôª"½÷ŽB ")@BAéUz/"J—"½*½HoJSé t)ÔsîùÏ}oŒ÷FÆH¾½Ö\kí¹÷œß7‡¾‘°"mSE£°Â` H ¤cd! Ä€ (7·1‹€ý&ã6…¹aàh”ìÿ(¹Á X\L‚ÅátÐ(€¦;€%eÁR² @’ùˆv“(C<àP€ ‰FÁ0dÜJho7¸£7æïGŸ=?,##%ô» ˆ„¹Áí!(€ëCâ&ÚC#´=†õþW >y',ÖEVDÄÓÓAb€h7ÇÛüBO8Ö `ÃÀÜ<`PÀ/Â]ö‡Œ`ìÇü‰¡°ž7@Àía( ®Â…¹pÃFÚ=êXû@ð×ÙÀ@ðÚýUý«õ»boFº@PÞp”#ÀŽ€ôTµX/¬‚‚þB4®â# v8ÀïCªŠŽà_ô0önp,ˆ#~QùÕwÊ*(¨‰„¡°²_ûS†»ÁìqÇî-òçfQhO”ï_ 8 êð‹ÔÝEÄwu‡i(ÿÁ…Èþ‰9° Œ¤¤¸æ €yÙ;‰üjoìíûÿ ãøûº ]80¸ ÷Cæ‹xÀX7w˜¿ïÿNü{E p{,ÀæG‘ýÓ†9üYã.ß î°á´€~}þót'/(…ðþþû~EÔïi¨¨þaüŸÜ½{h/€¯°8@XF\'WQ€”´$Àÿß]þÃÿoî¿£úø_{ýÓPå€Èü¡€;»¿ixü¥ ¾¿Ãø÷]4NÊ0ß?Ê·I€ìq_àÿoýÿ.ù¿ÉþW—ÿ—òÿ{CªîÄï4ßïüÿ‘† áï¿8%»cq®ÐAã¼úo¨ì“u`P¸;ò¿³XΊ(GœÂ…Áâ@øŸ8£ ÷‚AõáX{§?:úû*p3pLÿzáàª@ ÿÊáLgïŒ{©`pö;ÃyêßsUPöhè/ó‰JH nno2Nc¢_0Î¥P˜×oyD€(4WÀqô8 ÝÈ~]+ ‚„£Ü1¿¢dÿêlïîæ†³ÝoàÆþ½þíqÌ fO6;…¶— ~XÜü½R‘ÅSxeˆhq¹5"΢+\Ë3ýÌ×I›8CmÌõž-´ìú@ªþÌ«ÐÑ)?¯ß‡½¬;²/¤¨çbñTº>ßÛÎëûqÐá» Eßp|/•ñ™ö[¼µ­¡o¢ÙÔYˆT§ØZùêóóVÌš¥Ì xqLтQÌiݲีŒí·°¦‰½æf•æn¬aòþ? {r¯9šù‡÷g«ØôþùùÞ¬î®T±ý|­·’e¡tÌô>š9 =Ì ñYšu<ž{ÇJ¯’ã8™ ‘¡< Ȫ 0+ë­ØwÌ $ ˆõá€"<üJ‚›ú3…›ÛËšåã‘S/}’76F²‹ôoçÒC,íÏ =}ïÓéY⯕ÚïX‘¤2YÀU+¸ö¾û”¸¥àeŽvÑ\nÑ4@Šyâ°³çq´( ð‰ü£¡Ú="÷Vݰª"R­¬5'›åÑcÓËCÞÆ9W"‡žLÏ—^¨êM¬å»ò©k™õ»ožãKr=¢Ki6,y¶Šü®¶œÔΠ̃èP&GÕ5úõX/ð‘n˜‚ç'€®(G«ë\„LJgݱ”Px•l­¥“¦kUZõ#ùrqÝ\–:|¤å¥Dȳ!eù{ošìRy)UÃôÚÓZ›Ø›E•¶åHÖïpû¹µyß,ÚI×`ûD5Š)Kvî¢ÊÄV=ÝŠ2r§8z%ˆ/“7B¾”,©|bE•'ìL|bFE“¸/;üi âsÕ×,‡C¼kÉÛ2:½LB˜0èáõ¶ˆ ë­uííe›ö)ùëá}ÑŸ]trL;üGÒBܲ¯¿ê~¡ØBY™NÑÖÝ‹ˆýBÐr'HœAŒ½ÆYY¨”¥m•­±¹ï†ìÜÚß_m–ù™Æ]voø,wÀ’ _~ÉNÏ'@¼¼ÒT ¢»uøf©›O›§mÖ2è(³™sÜ};Éå ÿcÞkddŠ‹0Ö½ž]•+éabtøöqsqZ*‹Š4nªô­UDTeoTÎÒ–À[M‹|Òe§4½ô2K£Í•ES¼`2ÖÂ7Á"Þ÷V>úÚ8ACÎî¿.3v¹éÖ›`—|f¸,ÀTKT§ùBRÌØÂÃ'¥³²q¢ã»ÂÔÿÖð,ÂÅ—Žc—ÂD“QyÝ‚dår„OÝ­‡…¥y\ëÔß–^¼L6½[ðax »˜dÙ««t { =ΣÁfŒîÕ;âæøNßÖ\GXu7’å†êu6-ׇê”~?í/~䆞!‘·ýóv{²ÉåÓB;ëçä1ŸšÞTA•³sƒ9.F¹(H+3#[Jyòd‚Žu+g7C9$²R¬ï© ¨‡®çÅNi#;¹)ð.‹£ß¼Ð̖ۚײ3˜}jšÙ´Ç¾ipä¥z’ñ¥öÛ3šÙmê D/ÍáQßöpà<y£ˆEëZ¥ü†¬zTñE ¹œØTÁVI¤)åÅÛ 6dèóØ{þßN‚NW;¢”Åͤ§é{'xÎm÷[ƒÐFx¤üæÌÛ'™äpš›Þæ?ͰR>é«ÄAžp`Ø2Õ ¢í)×ì_;7c~²¯éËlï ¤tC1¥u³Ø[=÷ɵ¾ßÞXŽ\û.m‡øp•uã°üc¤¤NÅ63Vž CÎûJ_rVå)ÑdªkþÓ> 4ŒY½¥(ô¸ 3 ða™–8 ~ ÑÕÍbϤßm³ÝT®±'x2ªÌ—E’æ(¼ýt*éÝpûǦ°<1Éë7ò}£ÏûÈ„$*%ˆv nø ±võ%©ÑÔ¾LX.—TÞô:s~_1Cý%”?kZ Ë( ¬üíáÛG?›&æ(­2½îR³Tv‰$_Ìå³3«ˆáŒšåÊ Ý̧ÿŒ¸K 'è›~î‹Tâ{£¸* w#•à÷ýzúm½à§c܆QP'ôÈ€ä¾bŸǰ"ë!YóÎÁì±oÊU¹¥Åý¯sÞÞ-¾÷)¿ý¾{á´Ý)BÁQZJà ûW‚êY³VÄ `ªæI·§bÅù¥É“ÇÏ’¯éÆÞ²•úù&5íuR!¶ÃeÞô©lRTªm1¢èù»'P…ë=Í96.®Ó"½.ðê²Hg­Y¢Ö©jXeh}_rêIøÊô,J—~§Ê÷Ráa6¾ò½Ú¥¡ñ ‘h™‘ådCƒâóVé¾®“-ÿÌÒÝ ;¿ÊÀ+j 6î$ûG~¹ŠœŸ{¦¡ëµ‰ÁÂmu׳4yb>µÝþÆ §7¼ò6 omM]{Âc¢þ8츧Ëô6‹uëÑF˜ÐDXF)"?æ­¾í'¹Xt×7=ûü]´\ÓΕO¾ª”<ü´ P¿°²Ä­]Uíé“ãšû·êm¤³÷ ¹Nnб‘6À‹BhºÙ–Œ“Uì'ÉË„êBí®T¶˜z§ä»8d B¤Jõ[ª¶¯(4r™Žà]'9 SdàfZ°Îí ceYø9Ëz *¼ïƒlÞ:9›ªk©­»÷]ÊZ]”å_e­¯×XÒùrª{ ¼âu"ÝÛ7)ójý_ó‚«šÂ-¦ fµá®~ZSo¤Ž7TIJ9ÎA.B¾°Éµñpù—^“hYö=§ß§éˆaÊ¥h»šÐi¯5c ÒRrÐEÂZÖH(³XÐV·HGÍÅsâIa}0àã–ÑÛ—þÙoɆQ½£ú6Fþ«ßÇœöˆ+FsæÅ·.&RÏÌúXoû}˜qIûlº¿´I,m†.l”6Kq®ˆ†6GËIðÙzM'¢™!yR–HªŠœ¬CAýL²¤DbªY'"*2…—Z p+ËF×¾$WbÕ0û›ŠÜê3ÏÞ@í+%› möß è© ùÀ¹ëu²Ð]·Ycü ‘ÿl¤ÆØ6¬(&þ9{í~ ýÙý} ôžÜFK÷'˼NJԵZR»JŽ‚ÀðÄ/’5°»öŸUÚÎ6Á£´Qo‚ŽBÛn ×Ó†ÑïˆSÇî Zfµ9ÿñYÑ»·rï?‘vØØßÉ\"¡¯>p tl¢ŸŒYìL а¨áˆ´-8!’G&7ºãá…1æý(|A(³PEâj+xHþnNïVû*Ç%O­Nf¿¸–‚3àe©_’ØÏ"¾Bu«ìЇóåvù@·Ù«µ7ðØç̺ ,5Õ$Øì“wÜåê\¸Dr:é§V^:ÊQß° uâßJ8ìP4ØÒ'¤ûäEÿD©£ßÉ¿Z'D)Ÿ7/4 9™%Ø»4h¯–Ÿwdg°\šÖm=Ó©#¬ç`ŸäP–|R²Î}Þí}cþaþ†ëý®hl…V.dNŸŽ³‰–qÝ"hY)ܘïUð‘ÍÓüÈVÏŒÎÓþdÏé!óðAkÁ$X%Qñ­Úje%³Ò€Š«œJ•ƇŸ{w±òâG¼mÓÄIý(Þ=²™¢H¦ueQŽzAô5…üí˜Æ‰½¼³¸‰àk>´ØGÊÚ©s†ã”´ÔR¡ä®œ]âkx¢.±¦M@ä?Š“å[ùó\xBK¢gÝºgÛe>]ù´ UsEÙ¸Dg•ÉZ¯>|६Ày¼¡1Su©Çº˜Ô#—ÿôz¯å$û\ê—!äB‚x|8ÉÁPÁN…G¿Â4eyŸ^#l$ZªZîU6øºÙ¡²špj^â6çõœUÖ$æ”-‰–\ñ$çZôrxãÏLð£G¨\žûuA7æÕ¸œãJçm¶ÖÖÕ£¡™ƒx›‹ =µ®g'þ ×-÷×/šN'Ø·—FÂßjc ¼jGïVæöe“Áz(L}‰Ô£‚>pO)`e¹l‚`4½sSvV¯DS@Ââ}o™„l¦G+wÌÀrj³~™I'"Ñ§ÎæfÖtcSTmµ¸¬ÔÒ°ùZÎwDÕTö,šŒ”š7š½Pg¿ ¡üyk(æÉB³LÌjGNé{ÂçÚ÷Ðnx±Ç Äx‡ÚIK‘Ö6ÂíËV–Úz†ùžYuÝ—ãí "¿–ÜxÙûã fýíRÌ¥–0Ÿý3d¶ð…ÚT»í¢ÂW{íŸÚïÃ1ïÓÓÇ>"¯Ç5c~P [å|¯EN¥00,513¿•7™$“I E¶a`F™™±uP±fê §+sF·P®‹z*”Ì£S±9)=¦½;ß¾îPÔÿI¸“¹õÖXÊ…ß_Ú¼~˜´f:¬$EÿE;õ;Á°ŸÐ…þpóKÌG¥ëZLá¯>©z[—iHò2~ßLZója ñÿ­gÐãØ¹KI›ù……¾*w~‹0_»m`ðKí3$Ù÷äâdc2Ú}‰'~ª|ƒ6d×Sòýµ6 éa½’ß:“KŠÏ3Ç.¾øì'‡“Jž˜º¼vÙ¬å]Œ<àz·2"1ºZmÍ+0?}*%Úü@“X<÷ÖþU ùBÌü[Ä,éˆÆ•¼GìÔ—È)ç¢tâ,÷ëø/§hÌQ*ÕM#D0Ö‚·¦½ræÛ§ˆi€«ËbS’1x=–'ÆáÙ£g½ÏVÙ‚~€ &_·¼ÃŠ3©«6+¢¾ùE¾áÃŒëj˵M9£j Ôj^!ïË‹¡×(ÿ”Ü2¦äÁ7ì›Â¿rÿ‰Ð_Bgîzü •-ÛÏmDÁ–Wöh*ʤ\žåeð´ÎëSHý6{ƒæâ¨´•¦c™¿RcaßYùUWbú ”\Ž%´”u cíÌxyΛÉ+J‘S˜Ê‹PY¨È·Ücü½Rq‡¹q ƒ Oß*÷¹½©Ýk’¶IÄéÜ ?¨šu€ÎiN‹ŽñVõãÒÈ®;µ”ÜÄ!¤‘>wImŽz¾8è‚öŽm >’ÈÌ—O}‘lp”ñ7RÉ’¹Þ`€Ì÷øâ]B}2t´—m9-QyÌ€2™ÿax3¢´PŽÏ`åù¾:&TÂ$†Qºg€R`³Ã6O6ø€§@2ɹË2вìÃPcE~gòvЋ⇔`b²·k¤ÿÕHéZu秨Éꟙ'Íõ 4¯>~-"¾¤9¾(psü]–ä—fak0ûñçàÇŽëÏéñe§•IRåò{­irOÛéÞ1R;¾@×çÌÌC,CŸl¨`‚îJbö©²}me?áaÇšEK:¸„^@ÉYücŸ‡‡µG÷誗0 ê¿ éܨ¯l!Æ—vL÷HC_ìð³SÔ'ª¸ t<~Ý­<6N F¼@ÇÝÀE±sèä3°úöæàmBDf¦#lyÉyâù`¨@q69 Ô¢K<È\Ø —ⵘÑMË‹§ ð¦1}LÊÁ -$ nŠ$Ì…½ 2Ÿ‡¿ÓUŸzYÉûA*<ÊQ4W×Ñg¿{JñÙ*ŠV¨¾A㥵åòCm*YøTœßíxŸ½°ãu²Õm¶@Õ*l\ÒZ9»ãiÃŽaŸÝÊCh±7õÂÈ12ÆæçSަuÞˆ¬@ú €ñé5æ À#o~ÿãÞfðš{êtWʆì.=¯¨Gm¤0S¦Ñ7¢ªWÅ.Îw’ÞÅ 3LÍÐûœ]§¿²½Ô]“/é­±Y¥ ¿ýa3©sÛ”óhDïXhBMïqá!æåùô'y ¡¬™¢å$q¡ÖjæÏJU«$äoýýùæ O¾þLì{jjÕCG}ͰÊã§¥{1‹´.¤ÜMû‹sh^ÆÎi3ùŽp)Jdb‡3Y¨sǾ¾§=¦óú†„ªB—cÓ¯UzóœðY;Ñ@Jf)™bÃ;£Õr—ø 4AvqK1½üc“Nýu ‡´ø`¼aš¡ÎÀªÊf1YÜ_2Í< ´ÔWk ±Ùätàp–â²bsnÕ ˜‚ÿWz'USMÆjÊ„¢ì.ps?É:QTþFã#^)§w‹Jt«yß`„Œ_=mr¬‚Ç5Y;¤¥ÓMÕksƒ4+á;¢€O‰œ»E_õ^;¯´Âl«É™b¡ ›K¯KŠfÖÝ€·o0¢j±šaÕoçFŸi°¤)==™'š)ŒPèÍžÂrx¾ ÉãÕý¹_帞 âSÎtÉÛ?ÕûZ€±Õç èì;9•ó1£}U³Ãð½æø.´¡ÈØçÞÎÁVŸ±Û‚採)ÚQ޶¬²x‚õØué|‘°‘¨Í­ žìa.šÇ Ï ²¬çØš4döÉ.Œû<Úï¶e´¤ýLÀøáó¾{)åù12ìâØ‹œq5Å^ä^åõ&t­àC»ü-C‘ŽmÒÚ‘–Ok™ëä¶>۟︺·¿|ÿ‚Ô¿šy`¾Ú¥”µMµ¿¿*ƒýÎY=Ų+s&¿B$ã¼ìG›e#O_µHH««~g–áäE÷yVëItv­xWp5¶ Æÿ8Ê蹋QûVœ*ónqÍAoë Cóè|Ñ®IÕÎ¥Ti³š-S34×°˜UTei5×ÐøUÇ}?¼dQº¥‰†øé–'êî‹Î6q•® ³:èûñ4Ù÷ꢶ¤Kêvt“Õ£%»|Q%÷œÑ,®\{§Š/çI#ÃÇ8^ìjJØ×tú$¨pò‡:Ä­«Å’A‰:ލ)3fû÷fó+ÁKØoNšn‚u ­Õ”ox…»¯,oý`éÃ,Rɲ°‹ÝßðÎò à\<ºAïêãgxŸ;˜=Ú¦^rRØÍóuïàØ•½æ9&ÕQö¾ÖÞØ{ÖVKÔw»kf–y̬ۙÃd³²nÏ–…ÛÅë“Q‰]“4sXýÄŒ¸·DiaX>¯tòpÆ:“Pûθ¯€¢ð¾ƒÌ0ÞNî„n•·óÂi³Ò¼…Gµ‰rŽôõ0zN¨}Þ˜UÆlE±ap@Èd·ØÕ“òÜW£ã5!Nyy°x¾ž4îî5uüÍ×;;¢÷ufeæ+Ccs‚­“éõî¼W-QúLís»]¡™F Í/Ð"ÿ¤%ÌZð ØP¬¼p–>rAø¾Ë@/F0» ‚Нö%f ’#ƒù*ÝÏj€Äœ_ޝÛw‰{ôŠ[>àv¾ûúµ¸õÿŽC endstream endobj 338 0 obj << /Length1 1456 /Length2 6402 /Length3 0 /Length 7390 /Filter /FlateDecode >> stream xÚuTÓíÿ6-N‘ e„tw‰¤´4HêØŒØ`Ý"ÒRÒ "¡ !)Ýþ§>Ïïù?¿÷=ç}ÏÎÙ¾÷õ‰û¾îÏu}÷€Q[G‚°„>FÀÑ<¼ü’@M=cq ?¿/?¿ àÁ}Úú x`E¢`¸äÿJP@BAh ¦Bcò4p š³=P@( *) &ÉÏäç—ø;”*‚\` &/P ‡¢ŽîH˜µ ³Íß@v0P@BBŒûw9PΊ„Ap &muÀìÙõ`íþ¯ìÒ6h´£$Ÿ««+/ÈÅ‹@ZËpp]ah .Eº@!À_„O@Ð?Ìx€ú60Ô\a…v!¡@ `Cá(L…3E1›õT5€ZŽPøŸd? ÜÀ¿î(À+ðŸvUÿjƒÿ.ÁGÜ·ZÁì¡@­Ç¼h747‡üJÙ£˜z f²Ä$ü>9øXNÂü‹ Œ„9¢Q¼(˜ý/Š|¿Ú`nY Q@88@áhà×ùaH(síî|&kG¸Â=ÿZXÁà«_$ ÎŽ|p˜“3TUñ¯ ø³†¢"ü¢¢Â@¨ê¶áûÕ^ßÝú;(ð Æ0ðötD8­0$ Þ0+(æà‰¹@h¤3ÔÛóþ½!00h µ†ÁÿtÇÀP«?kÌð‘07 )?F{@þ_Ÿÿ<™cäAÀíÝÿIÿ=_> =  ®?Œÿ“—G¸=y„ø<""@q ˜˜Ðûßmþs“ÿjƒ`ŽÿŸŽªp+PâÌåýÍÃå/Y°ÿeà¿wx‚Àh dÿGúfü"ü`Ì—Àÿ·~—üßtÿ«ËÿKúÿ} ÇÎöö¿Ãì¿ãÿGä³wÿ+#eg4ÆšŒ9àÿjýceM(æìðßQU4c9¸5Fâ<¼üÂpê1Ì Ñ†¡Á6„ô÷(0{ØÃàPm ö냩âçÿ¯Æu`;Ì[…Øïcªï«# ¿Ü'(" !‘ w?Fd‚x `l ºýÖ7Ž@cJ€ŽÞ@+ðk¬B@> ƲÃLÁæWð7ŽÑ Žq 3¿A~ Ÿ îŒú'KÈ爄a.ïò¯ƒ‘HŒmësê¿×¿ßP¨ ˜B€¥‚l«ƒšO+åè\y¾ ,~i 5îA³N¿ö´Ñ¸‘ª<î$ÿRvw I{¦(dlÊ‹ŽsçtØÍ¬=Ý!Q% ¥Ô½,¿Ç“ÝvÐn ½AÐZˆ%…/“î¾Ô¹GüÜÏ”í•ÑÔe°X‡ÐZùjÞU+jÍDbèÌ?&aL¤C¿ËlÝĉ4fdù‚þ`lFM†4MvÖW5¹Â‰„EŸÈ7GÑœ¹/›F§|˜ŸïKïéNÚÏQï¬- !§¡ðPc̈륡|™®VÂb•9V(Jˆe¢y㺀 êîœ5•h|¿Ѥßx±ûòðqýcF‚¦“JgÛl«iî¸K™ð>9t«+!M4 Õvtr ?»F­wBuðÜ™¾†wž÷ mÎ1`­Fãiy‹À™õüÌ:¨¢÷Šìmh JÛãzÖ[X_ê)0{Õè2o›ö&ºþÄnz`gàVâþ/L&µ9 "×IT÷?5ãzwR[ -%ðø>úî1Ú9s+èÕ>Ò£bs× ûxNš¨qú”káMñÐ3е¬qäÒ'Aî ƒ?üÎ*w_ë9²‚ÖPvy‚ô'h8Õ/ ŽózøÇ€_ƒrT:l†ˆ0°îüèñ/õÀ°‰ì–‘ßáÃ)<ÿðNåõÂ@Õbÿ3†š“ ºšo;¼ ú¹ð†áÁÌihÒèÙ³eÊ¥M²"Sç=ø›lø¾á¨Ž„p:‘÷UN ®ckœ2û–CĪXú,¾i€£ÅÃø(™Mpm€)à!Ó­O{üÊgÖTî_^=B>ZøÄF&<3­ ii#M TôHkw¤µèm0˜×ÀI ¹Ù( AýÙü?lâòº…Ì¥šlj\®c ë-/ÎREÂ= Âì´‡Ihó„%¿ÄS“‹„ˆñìÊ‹¶PêL†Ñ _ÎâùK_8}¡o'‰`‹>!ÿâà[íg/æÎoÍRóÝ_JÅ ÷̾Ÿ”óA"¿ð8Wš€)›¼«1ޏµÐms‹ç“·‡“Hý>Ð:ªxÕå0™ºâ•C]&¶Ñçòt‡@'F-lN4ENàÊ(p-³~Á[ÞW4ù^¦4‰ÚókM†ÊË=Ød9jŸH«¤]×üÀ%Ò9m5ýPx¦ÒwîÞí27Go rq³uœÏ<3Ô¼‹_úd“•Îf0®9–¬iˆ 9scÉ„Ã:±M­ý dmE ¼fK€—êgX:º¢È[&Ÿ#˜/{6=zÎõ;¥C9Ý©Ìåg²ßº] ð>½ßŒëÄbÒ:tÊ >$œ+(¬Í‹ùRärSÅ/U€3§=ùí*t!ˆ-à ®E‹èÔˆÑÀp[Ù6‘™±ÃcÝGoÜ›R•"Ùq¤[êsG–S? ŽêªMqUp$‡•ik}€æ—]8~m¾Xe4©·‹Á™O&ê¢ÖˆLüóÁí„0`¼OSQPtŒþb%Ö½‘Ò ™<ÌEʤ¸ ”"w`Þ?Hí`ÃjJ1RP›¹£XïÚ z›ûÊ),GR7Ú~>ó_ÙZY IÒ=ög¨(ßkpØc©®î1ß Í‡Üí箼am¾#Êtõsú寱âtùñþÉÌX•ñ,2–ž™þ¹òÌ}E*×YÝKÿ^?“PлLŠoâ]ËíÚ¨Â9IŽÓ(¦×J¢C¢Ì ®…ÖÍ>§™,Þs¢—ª(ºB"‡nqý÷êA],qKãì×·Œ÷ð]e¿v¶ Ù˜vÄ÷4¶Üdi; :¾k N©p´2ò.Ýk¢]ÿ8f\ÿüK1x˜ ?In¡#€×µàÑÝÊp*9z@.ËyQi4i™VAìXfÄ}F›–|æ$6ôt©U'Q+‹ý~äÀ5q¶Ûq¤]»„NGì ìòPø’úмٳ!®Lzu„Èëžõ:ͦúÓÑûˆBÇàíéˆÜJßI°GÚ¬'Y§ÁmSÉ7ºŒ j9‡ü=8Ž`p†|—¡:®!c¡~YǪ}`W°ñÛ|UÒ‹È0û·ßÝ9ÃoN¼Sóÿ 4oŠ*Œ.°Ç•›œœјx&KJcì$óÚ—Æ­ ï_fÂzN’ÖgñôŠâûL2©_ÏýJ‹õ¬xªµüØÈï²jR§é^~€]–×1ÒenÊóí1†áøô8ù0>íæiuVÎh|1Ž^ÌÚ…ýÀãn‡±b!žÖJüàÉ ÌŽuB€QÙ±Oæ·¿ wCøU꾞¢Óú–¶"ãÚžS¬©ðbŽ¥*FžÿL/+ QÇ0^$‘”.¾Õ&Ýœ=¢Ôd.ϧMñ1jGÖ¶½'?µv¦rVP‚tŽ”ïè³Ê(%ŸóŠ®lÚ܈¦Zš/Õ@0›²5R,·[¾ˆy¸Ž­'Sì8 ´œqŸT8îÓdó3fNS©Œ¯k{*C¢ó—Öe—ùúçy÷½WƶCÝãì—è‘oâb¥¿FÖ·`©.åÎ=LÑA ‡yA •Î;¶Ø¢–9ãJÍ­ŸxË¾ÖæÇñ+Ö¼q;¡¬PÜ:ö Gx=ºR7UÍ£8/–s6>„S5«Îv‡ñûÔó}¿¶3ͤP³µú\qÄFÐ Z¾öëf+å#›éåְتL¿ìh"²<ÊëÏy2—o‡ƒTÚâRóŽMᯚpjzñæÊr}P ¼ã)²•çÍUšv䃹^[,†ÛÖ¬Zë`)`Õ9ÂMæBÍ =*-8#õ"cÒ­_©ÇÊÆ¤ïéZä`þð®`eDêÊguñ<“˜6LG•ŽÒâ-lp¸·/U¡¹Q¬dŒpjÿ«Cs×½ÖLeˬ9Š93öÅSW,Á0K´gÑ×Ï¿¤ìn,÷Ð)¬è)a¦˜º~Ø£/³%^Z'ì+‚ Óð§vŽ?”ªjÁ–øêÜE¸Ä×ÒEÕ,ÂD]Š÷äP_Wi§FùJ:û ’kétÝúƒµídw%}>ªãÓ?ŠfjAgÃ'cˆuˆ²å=úY4Šœ¼• "’¬—á}—€/õëG‹JúÛÒ».å³à3‡Èo&NȪ¶4á»…”/'é΂æû8´)ÍÖó-ÓÊ[à_¾Qß{=~„M·8ÝÝ]|H¥/ï8±ôG ÜuÅDhIÇŽÔµÄÏËlkšYö,¬7ênåN­?…®ßbtv)A%z“£N#ËgŸö´q)¯úaåZ“Ú(& ?¨«‘{Œ÷Jé#ÿ½:Šô[­gA2)yÓ§„ºk+ÒÄ®ãÍY^L.½XºWúÛ#€ëŸIä×M7¨ßHÊjj¬P¡»œ:I«yA¦¨ø¹¦ûQCrAík†¦eÜ.ê#Ó‚™•E•qãQZ3íŸ!¼°úÀ8öú„‹€ŒÉØIPsªEÕÓî­¯‹B?/„ª²_È‘éOîTX¸'IZ!Ü ¸\?HǬæß iG†è˜ž7¥SžÓ?£f†_¹Ëß{*5µõÄ6Ó¥Ûî¶d°þòÜ@ΟT’:f}^sDËaŸ …*st`Ø^D!Kja9ËJª½u œëFÜà1G)ÙƒM¾ƒÕoŠwÞ<ò1Á¿Y{,Óèœý, Y´Ášûærc£¦c÷-Oï§‚`‡\q‡ÜêkA É ÐŽçDU©ï¡ëÈ®±JvåRpm\ÀBbv¬³H“F‚Â΀Ù(zLOÙ «õ’™Eð¹*£¢­Ÿ‡Ùq·gp« o÷š¯¿’/L’z~E#¿|\Ùúî™ÑLja –Í…»ELUÛieòÍòºŒ`"êdpÀÚ¬²Ó@ö‰Kn õ óIŸš®W*œƒ€Ä6ó^…ð¤Ï÷'‹t‡mM?Þµó·ó¡,eŒçcÂߘŒ;Ås¤»uuž±×oø{Ÿ´p6ÝúLKˆ`åhš_…Sñ%áׂü¢ÄÌ([ÎÑ9Fö¾qï²(¿ff•æ —è€ïè |²‰ÜJ•ŒáÃk¿5¬3|t÷½cܼŒ\ö3éºc}Ÿ¼>}q¿¤PŸPSF³WÏ“—Åíôòãü¶,|Þðv5×do y+Á¡,ë á˪Ùú.3¦ m¯ä:£R öšXre¹½u™ü‰Ë=Ûæ)=¹íz‚5:›jwÕŽ 5ñ‰°ÕVäb¬¼îIæ«v‘ÉSrÞÁWîDágÓ(ŽÏsã2˜ùðîûKL+¾®0í"§I¿eyOÏÅyvÀ:ôqä$|Æ«álò¾{\u‚;{\±—ª˜2}«9,Hz8Vן9šŸ=ºZÑÁg~¶4à5­ƒÚ®çðEÄ{§¬dkq}v5'©§&Ÿ½å\Qúº°–/ -ëcRÚ7¿-'?²ûx¨v…fÈ[“ö&¤êûÞ/‘'yº@ô²P\qŽ1MÇ•áþô®¬« ¸“wü­¡ºéÓaƒªº›£¦Ÿ®]³”‹Þï@Û©wÕ“?ؼ§>å>oœÔÐß¼-zÃbHá]ÿ!û4¸7Å’€ûao£è›CŽ?m¯$äÚݦ‘)&ÑhS·csŽ=˜ÂùJéò£Q”°ðð\û7ÞNÂç“wóºJ1vű„H‹fì7w&ÀÛýá…ÑÃÒ%gšŸßÎ îçL“ž 2[¯¥ÏQ³¶9g  UQa1¾/Dìz;Ì|`ýû ËesoFú‰·cWj= K2v œp¡‰g)¸}˜ p– ã»Ü,ì.!aT “œ'‡ª$u2=¥~É\a$ׄ!U·¸ñ½òJd8WÛ‡- ;ÞÕ~WÕèrVÞ’ìˆsçÍ–áL]“wôN‹Çò¨ÛiÖØ{xM±ãÛO{~wㆥ\óA]VÊ-ÙÀ§-LϪÚê÷=BzÚFK3G†¶ó$¦KJ‡ôÉ5Äå¾ ñ÷Æç¯^ŒÝÊ¿+NWï«&ýóãünPöý%ý+&‘­ 0ÉÌžÜwr«;Fu]7PÚî9qí–󤣹òÖÄôqêü’ªkcæ:QåRlßPãL¹Ì•åv{n%Òo_×ÍMk=ûô‘sÞå-¤v{õÃÎPoÞ†ÿ×ÞpN~1Ü'ÞJÏÏä±dYD§ŒŽ'‚Þ~]ý|,eòMRW‰´ì¾ D $Ç[µA;„ÐÍ«/Çú íPÝ±ÑØÝ«kðÙà}Ý{^ ÂüŠÊÉlùWw­pŽö‰ZúCgßëˆX˜Õç!7åq£¢ókê^ú£É[çï¡®ïd:Nƒ‰`D7h’s䤨D¦ábõ$OO½hÃ]óË)vç‡à|gEJ{ì{G-ì†û~u#¾lŸµ_Ýö? z<¦¢Aå}1h&GKì\²K(-e¼Ç“véÁ) ó¯$,S&ãpsû”ù2ÊÀ´“›Ò=Ò4¨œŽÍ´åbÅ¡{ q®·Êkñ©¶R¨§eBÇM(ð}\ï¼ñ±Â½ÓœµýÛûEõ¾ :ZN$iªd»Wzí«•Ù6¾˜XßÇnË,_Ã'Z7­8+½í|PBïc1žÇ¸F³(Iô„ÿðÚÖ„dï^ß-~Íäi3G;®Ì …éÒ¨ö ^ùãæã|eS¹8­¶|ჟn,F‘@Í•Ç!§Ö_‹‘tNß8àˆhLŒr)Öf àdËo"œ27jXÖbõÎ’9¹J–Nb±µíëÈõ¼°ÖoÝ[l­ §,wQæâÍ;]>[o²‰*ªmÓñò'œ#òÄjßó—]]ü¡hÈ篆þ„ äjÙ{XRú„'Ï5–‹— Ã&eîº2a'l :Sðè8ÆÚèU™Þ¼Kß+:~ ⨕žÑžùtá€O&ëP!»úz>Î"3.ó˜²,…ä%ZÍöM÷õ­g¡´éz`ürV>!âH¬´uBÞ,ÝOæëÊh7WG–ã—ÑˇzccoË5‰ª#ÌCËëë-¸Ù›—7B…oh×(ø8°èêY90¡âi‡2½ŽÀÖÁ{¤MÐÐM¬–ÀÔé¬läÆ]u\MNÄG‚F½%ÄD5*h‰MÉž ªXÕ+{UiVÕÐjõ£Á㈨jK„Eüyé;·¦óo h·è®orI^M¨X!ªb‰4tS÷ÕáĤ_8r‰-ÜS°Úߤïj„::õÑy7ɲ@ÞW¢ ÏvC-ú,p¢?Œ×ZuE.†’ß3¹kÆP¯i@î>²(¿WwWع·m¨°«âåÚ!Ñd÷d¼n çó ÷x—¼ù{Is)PÞP)õÒþzfSzÈxéúxoëš§©j‹Þ|[Á£UuQ”&˜ÞY¢1®±Sülï…ñ43qEˆ">ãvfbÖšÚ‚z¾0µÞû†q‹˜þEÌ€vØ+°jYí±µbY°CçöìØüå$Öåï“e'¶ŠÎïÖlj†S={ßžŠc3YðÏ´Ì',ª¿zÓêo„,Ò¿ÀªMˆŠPþy’Òíf^º fû–‚Ÿý<3©(oh¿¡Þãô=Û˜YâÍ2Ñ©­&¼Ýž¥Ïx®ßP 6mi‡ŸcE‘9èrçsß~5_?ü|¹/ƒQé ÖÐcŒrTu9àiÄÑ{ËÔY.˜W^’Ùû?uKc© endstream endobj 340 0 obj << /Length1 1605 /Length2 9961 /Length3 0 /Length 11004 /Filter /FlateDecode >> stream xÚ·PÚ.Œ»»‚»»Cqwkq$Š{¡Å‹w×R(.¥xq/ÒbÅÝGî½çÞÿŸyo2“ìoé^k}kÏ„‘V[SÖb T„€aœ¼\æ ü—ƒÑèAÀbÿ°sZÁžeòV°gC  êá àåð ‰ñ ‹ñðøxxDÿeqÈ[y‚l\UÅ`”ƒ¸ú¸ƒì`Ïyþu°Ø°xEE…9þtȺÝA6V`€†ÌèòœÑÆÊ ±a>ÿ‚EÂsãæöòòâ²rrAÜí¥X9^ ˜@º{m” дrþ]#@ßýK¡±ƒyY¹Ïg  }vñÛÝÏÙz*ê-W ø/cõ¿ 87ÀËÅûïp{ÿþÓÙÊÆââjöív g @KQ æ ãXmÿ0´r†Bžý­<­@ÎVÖÏ^Ý  («°z®ðïú 6î W” rþ£Fî?Â<·Yl+qq‚aPŒ?î'rÚ<÷݇ûïá:!^`¿!;ØÖî2l=\¹ À 7 Šüß6Ï"ŒÿÈì0€ ŸèzÛ8pÿ‘@ßÇø§’÷ñs ~®W€ÝsÀðùÃjå ÀÜ=€~ÿTü7Âà娂l`k =ŒñŸèÏb Ý_øyþî oÀkžgúñxþøüûdöÌ0[ØÙç?掘ÛPõ•¼±ûß%ÿ[ùò%ÄàÇÉ/àääðòò „ŸÿçßøWõJµ­@ßîUÀv€è_EìOðy³þ;¯ØbûÇ ò ¬ÜÝ­|0žðŒ~¼Ï»j ôþ“ân.0öìx®1`qÇøc°BÂn¹?D"aA·Ú¿‘è³Îê?HÀmýoôÇ]¹mÿyÜÀÀç@ ÿÀg²rƒÿŸ!ÿ€|n×@·û?às(è? €ö( àöúä{Žìó'ü¯.Ùx¸»??$Òù¹…ÿ¾Z@ 7Ðcab#æXÖ~]+KéÅùsŒO{à4æÍhKÜs['DNâæŒ¿ v^¶kúWìÍ‚}¾Ò§'c'ó5ÿôX1’…Ævd;ëMÿ ÉÛ}¨ºß/µÎÎW–ü`[{’£Oº_½Îe¦XI9ÜN~Îdí*I0}ª¾ªr8BenþÍ……0‹J&"Â…öE6ëKõË:Ù©éè©ÌØAÒ ÅÝ›ôþa>ÁÅrxÐz:åÞ¶«ÚyÖžÔ‡! 5Ë ÀãVÙÝ{–óö°`k舞4½x¶ÊÖÄ©òéVœŠ®ý'åÁˆýiˆr?ÞÓÿ@—ýèmͼa.ÎÖ)_ú9f!E¿È—_¹¼§¢B‰PR³o]qòwX=×G|5õº¡ÉDs}hJöTzÇp&a³¶Þ™ßï¤ úpl¨{<ˆãå—›º¡p9q¨ŽsÎ+!ã°:ƒÂö^\eLFZܘ“;ê}úÃB*¡ñÃ%QPqÚÈw;3wëW‚Dî}¸ºCòÁ^ÛÛ\È,ïÙ@ŸÑp¬…RTß,FOtN–§:«¢Þm*gi Y¾ývsdì´m]Æœ)¥lÂdê"Û2Z#Ô)Š? ²›zhݤŽ4{ k@ˆ"ó½¯û zÊLuÎ>6J{ aP7b—ƒY0žçgnÃ.S™âÕ0,ÔóæhM:FU¯³¾¼¯Áó‚!¹áÔ@ÇpR¯õ#?ƒæ£á‚N‚ô>ÜÊÜiE%¿P¹G!|éð˜eA½Ç›‚úv¸ êªÍ‚TыΟ½uô£’¥¨v\Ö§S_+6)Û°•¨§°ZöË~oçMÓ©ÑP,Þ~,OX©¤›j6°uìëä.°!‰÷) P àó¼baÛ1ö¤`3z Û×Fz\W£;?ˆSqõ[Ñ~Dð{ƒª‘î»­<€Ù©¿Ž›ráXœ"DÚw÷b=ÅcFÝ¡ªºøNF€÷8‰ºIÄÔ±Í!«Ý|«{qü[ÓG$ª±¾9±½#g‡£ãMg#ñ6iqí¦CU #Ï‘åb¤|ÕÏì‘ñn‡'‹`,ñî“Kã¦ÜÒ, ¸ÏpX^¯lkAüG=†±é¿èØXgpü¹’u¯ã-ç•^W{ÏSiˆB™š…ÉÜÑØ$çšÏ“>â¢ù&¨ò+Ê2î˼wÊÿNóãì»-wB…YŽýY_pßðå`±„é]4ãZx܈%”HÐC…déûªm z¡Qm;¬Â,íÆ ¹cŸæÁút·,Ù¡iRïMÖEYuöS²åîÃc¨’,]Ã&ã6nÂÀhݤÃa›ÄSS¼¡°0Aµ}n =e:ªþøxL I]žÚ>{ú³®îþR€†M€eÏijBáCpºRY)·Ã$ØÝlÖ»A”>Dê0ÑÏpóq«{°óÒ¶lÂpݬº¹¬À¤T꘭äm¢ÀX&°ƒ¥˜=¥Ž}Fá¶*LóGêWQºVú"xy¶†Áòö,‚ Ó<@©¨\¡žŸÝûlY¯sî“ÉbP.ÇlÚ猸f!!A±xi½ ²_Ï·B²ic·ËKX}¹Ì%Ñ&÷>>M›Ûk:Šì…)c.ß²ÝÒL:2p½¿I ”["’ú~më¾…ße’çÛß<*OaNGÃr·Rî“X&]^³t ­€‹€Ê‡‘Áª¨©PÕ¨®¯§ïÝlŠòK ‹>´ì¬öi/ «0?ê*8,D¼£¦j ‚Óº€Ú:ß:»)3&JÅ ðÝ^à¤v¢Õ/Êj;'…ñUj é“nQ°^·Qg@»h ùXèpŸïäa§w»V[j/‚ÆÓÄð¾ˆrk,˜Ù´¡/8ÛpÞ*ŽùÏzM˜²¼§d:)¸µÜ|"=âÝŒŸme{ÜæiS¶†/±Ð^[ áªú6|RNæy瑽ET7¡×²yËmb‰ÊlÏ*Hô­|WÌ´6Ä÷£I²»ÒÚ”V€hÝŒ{¯¼MöN£U“½oyõ„|üƒL”™f~åGÝíf…síóÆ#‡Æ>¸ùÑ/¾fŠxÄ*óy¾K ;¿ÔÇüéäj½^þÊêÿR´[ÍSÍÏäzæ. #æ1¨öÁëË9;Xnúgçå, —Ó"–fÕÀíBcŠJnB&røEýYß}<>^Cò†Ôv¸‹0´=¡ÇµXüMEžå+aKRª+pwÒ%:~Á7OSð> €¢ çûÇ07Ý.Ñ™]`ÉG¡<FV]ÆoÖ+" Že¹¡B¨‰4.GÄ™Mnhà :œr4Ø£ÐTµ–é'ùàªÓ&ÓÊI]~Ò!â[[)Z“¥±ø}Ñ6(z”±nÃÛ†õjx´•öÇ—ÛËÄ57FäL¡*'G!ËT*®Ù²%„l­e€^#äÚÞ|ÊÓK ÜÂZ|§R#¾Y%¦Ÿq0§bvC †2 }ûõýùf¤s_Qé#óÆ)Ÿû:ñÊ<¾ºåƒ½óÎùë7ÂU¤ýfxÁ£{îU%L:)s<¯;2'e5ÌrìfŒI7{›QÇ‚Z¯Óƒ ¤n‚ó—¿}z`™ìÒ—N Må"¶âUGâjôjYE„¯*WU<î^ÑËÅqZÚKR¢VÛ­°bè'Õ+(EÞE’3U<ˆB!ÒŠ”ö˜S‚éÝPÑò„w8´AçJ&î½! ³y¿GÏÔ·ºú¯‰¾ˆ$9ˆí;¾¡gÉÿ´¡Šq¢âº>t>¨éÁõwöÇÇOÀ*kஸ^ÎgNgáÓ6“@__MÕM_c8›öÉÝÏý+HY›ÅìÏ9 ñ 'ž„nË—$Óñï¢ÇGëùÓpŠŠó©R®ûxòSÀ4ŸË‚<«¤Þ±ÑÚ°Qàï]›ÙùFÞü8ïtbWo͘Œú¡Ê×´÷ÝÇŒ‹÷mŽ˜ÿ–™g{δt@ã LŒê]°}×ÚÀÀŽ"»KÈž{2ÿ,I} f¬Fé¡‹¨N“‹<‹·2\ZÔÿrZþ'Rüˆ¶ ^vŸC4Ðyë±óu•µè·O«7šºeîamhŒ6ï °wïvtDÿ“’ºÞêsÏ.|b2~ŠŸ*ZÉ[ÒçÑ ÷ªÀ|¼*›&ÿxX[îûµ}ªäÉøž/pæ qÅ)ÑFÒwðøÂjëFÙrÆ’4õR ÿc<öò‚’y73 ÍèÉèaòÛýö˜• ›u?"*™è½æÆb\#ÓtMÀb }6Ú2Ƭðm„äv$·ÿm“\‘1_VÐô°I­—lÚoJ§¯CÌú2z“!aqÕ_œ´EìÈ+Z¥¤+vΪÂG?õáø‚Ô¸›Ö·;Õ:M±¥Ö^Ä1¤M/ ÅÌÍÔ©ëib ö(J®²FÐÒωÀý‡æG“¦íëRP,4«gu>^,‹Qä•f— g%-™ÈÞwÆ#ÛJÈX~k\©>ÆX7 ×È]ô…="h¸¥6¿¨FÍÍ×™í{\ºwzÕ‡Kò.×mŠ5Z&s¤•Uªˆ%P*‹š:‹»=“c8îB¢eåcFåq4»è$³@ ,ºðuøYÁ÷ì¢ ß øôûPG>}ý%×x¯Õú:¢a†°zêûô;œýd¤Ä±Ì>uóNÄŽ™0‚yœÈ"þð®ãŠ—Å>-Þû¶?ïõ["óX¼ îMÇO»¶ëñ×Ì+6(sþ‘3¸Æ9síé£{@­î¹ÔIiÅÍ´™óºEpæo~Ü>¢¶ßutÔ…÷ÚN_\—àòÌ&Špg;®•{ßÊ2îþþ${+`ƒß-m¬²^ë ùÞëÌ6•;6·¯ Ù‰¦¹‰«¹WÁÝð5ö,ž¬Õ‡OE ½Q´JÔߦÍG‘ívSBªYÜâ_QÆ·ä—ûoo l_õªãM ¼ùRuaѬ{ÄüÕòaY¡ÒCy _ùH}`Üö y ÿ%ì…|>Mšô÷©=$òžfÆ­¦nçq›8Ád:r¹DOo¼$zup˜œ6zˆþé!|Xp5ïFlJûz«ÈéYQ•»ÏÄ+ÅöŽä\”ÓÉ››øåÛ*ó){\’žpÆYî§åýúëȃÉÌ'á¶rñ¥p”§ö;lú5å‰åŽWg@4»Ð¤ÉãͰæ²ú(„ñšW"²BÉÉj¯4(S]®”\s¦s/7s-ÄÛ(¶<^rÃ,˜:1Ûë«M7CÒr³¥²ž:È2“íʽ(­Í¤ü-Ÿî©2F†¡ÛJWÍò‹ÓÙ~[¾¹$í®ïf(ÅŽI'!6æ®o¿Ð,Ç^n4;jb]XZo¸¾xBpŒ =á7úÕ¥KŠt'uþ¨‹cn‡3dÊêgÙÖ¤oG ß¿xÌ⌔ƒž3 }I|(ݰ7ø²ó»D^ê½SÛíí{z"ôê% (@š>¶ã{+nö)E…×lÒâë›uÜrN„ÆêQiÓ±÷ ?óâ?UzmR®]'‰Ì‡¦ŸU8=eÔý‰)kÚÓÇ>HZ/õdߕ∤Eä5íªï'š=òæ ~Àßër5jÅ»—;j«„øÆ¸LŒÑ_ùÝ`ÏG¸PlöXç£hü ú.žÎè!ï3*”FÎêI"›q«ÀºK…ؘ¡ ÿFþ²ö#È÷´p%cNfgLO ™¥‹° 3FGïÍ-g<æL‰ÝÔ¯ ÞÝæ©$Lµh¼ògÎbòT#M&)Ë:Ý+`Q¸D^'•~ý;Á„îÚWã’Š)ì*ï Em2Ô(æÜ™H½FµTn¿]Dà ¡g…*Kñr,v;çÚU¨¬®Z"ÔLÈâ8çPïÕû¡ðfHˆ®¼œ,b\hKˆSA\×B,móiÂôÖZ ÏÙg ¡‹–s\Ãr aÑpô F_’ýq³Ž ¶wGé¢ù˜yãh¨Ä Øt‚J{Œgë=šH¦Ar€qRó§‰1õþ<áºMl}üÎATéRÑðS4Ÿ0«ÂÊ´‹¸@±Õ›ýßzVø™q3öKßÛ8…€Óîró-S^Ë)W­ù¯á5wÔÁÚ|çÊdáÕðŒtÇWàÕ†oðÛîæ¤Hh·´Cˆ‡š-uÞjYÉ'iºì"‹ûÚ›á"“7µ\” .B²^Hé“à™¥ PIœÛ J.6F±IÆOL°šÒ=ôEVhõ涯kú×(èn—®¬Uâö•Ö¤ ad(G™cuy©72XJf/ (joÄ»=z ÚÈ„{—?_…ÍeqãFIÎdt«Òôó]ðršèxHÈŸGI¼3(ˆO>çw‘)Æ‘vâ?硚¦@†aD×O)½Îb Ñð*(óÌS½mhõÖUB敆«žüt“×óß¿•JÆNܲ`ÞÊØæè0',tÈÛŸfÚôcYÓ‰{jlÑÂŒBG/§JÄWˆ#…™YZO_ÀÊ—=4øIÄ4¶{ˆ“¿êë+NV¤ýdë™=‘Ѷž½f9ŠèáºXDÔ3ª^\˜û,š™Ç†œvTÌ•??õ%K¿â·ð*Ÿï“ú£ÉXºª£°T:u©³:Ú«Jåi? ¢Ê£av#]¶èËß!§ò!SÒeŒ|®™*‰búú½Ì…œtqšÆïÉHÍ hD†vO‚á›æEš¼GAt[pöQÀˆÏ¯úîÃNƒïÔï»êòÖ¶º?hÕ¦5œ¥ Ö]%OØŸ@&~é rp|ýfÈÃ~‚±§tSõö\ÛT¡ m‰+?›®U´Å"ñÀ\9%´+Ùü6\Åf Hï8Pµ¸ím‹ÄuY<Û¥1f§v-8i™Éº“Ù¨N~‰Ó¾„²1™Æ~{”«oçIÍŠC ËM±ð%uí95 _rhxNŒd¥Uwx:ú&»l§ƒ”Ïàr7§hq]IÌÀ!~¥d– ñ!¢Q ñ«Žé"N‰š¾Â®ÐK=¼¼~M£¤FÕsBAä˜/y ™0}sXbSšõ4$\د„¨WBèµûò·ÏóŸ9>Ò‡a$´BÅ÷z£È¾ŒÅŸ•G- ;¦»åúÄÃܱ)¯ðHkñó^°Wá[gP ‡¥öŒÀ»!å(IèÖ}Ë;ß•ü‰%ü»;8È9Ö¹*B™´ëæþÅBXÎyͱ¡,dÂ’tس¼ÃnÞÎu ÷ÿt÷²ÜìöÅ{Íþ¿ËJéÖútZ¡ùÃ:¡eIÈ :ç÷ÌÒ-øz_TÃÌ ˆŸÖ€šãV|¡Š”§Ó¯¼m¼xR=šŒ>¿œL/R~Ô÷áÔÊMïÁw2Ml¦2ÄÔ-¿c¯eí×ë{c¯b‘¹íù¤XJª}ShK³›Zs+þ~IWófØ¥ Uú¨þãµ²$¦õƒ¾·ü9î÷ñãqTZŽ™áë=ãáwL(Þ,cu¬A·âivGuÉMЬbr*ùœbš l#z6\ÄhTªàLéÉÏ)V¬‚°ˆs¥•®éÖ7uV¯û%¥³¦‘ùÜ*H±ñE.Œ'Ž ¾4ÊwŠ{ì“&’ ®^@ÃYœi­æ*’{“\ã@Q›³ê]*ç©ùذHX‰)L°ÙIý‚£AgÃØÑßî‚¢9,ÍÝ4‹€h`ýÈÆ¸tííU£Þ—ŒmG}ïËd1åUÌûÁ”¯l(öäò$8ßKÉ0šŠ<5än*ÌhuÛðJ[Œ#¨':ãàªÊPSÔ„*ui‚v%ùÃ'_ÜB$Ä߇É<5uoß¿õ›57À?& Ž&¢Ãô™1zï켿×x°F«»d³W ¦Ü8)õjK\÷dL¦:8¡ËFc䨿tÚwÄÉ&‡VðO7nµ16*Ýï½ÂÃḩ:µ¥VxÁĈ%*p“âô¯›0ïÂŸŽ£"z Ó&8åŒ8 ?óc©£JIhhˆÙfÇ/ùäM ä eî…!EèЖ2U±¦¤%¹«Þûª{}“‚yéÝi(Š Ç ZK õäý Í/ÓrK>ŠÕ Qb"º’Q»N±ˆã2÷AY )›=ôC€žù“•cÂw®8iÎðaê>YùN÷ßЙ žy¶Ö/Çì¼KK+Ôë®ZÈ&wa§W öT[’.Ÿ'âür^oçXnÃ~¯’ǸÁ‰÷ªT32(Wà˜ÄƒsçŒKì õ‰éê‘ôuaàÏúö³\þÓâêš±,ìeGM›FJà ûdÁO…¾Uyfùï$mðˆ»~„¶¤fGÍ%ÁÕ{²ì4„Üð2çyõMT¨¹è’,?{àgûVæZLödHäÏÕ|3n´’‹`ÓÛÌ,,9ßE/ä¦à^Ÿ¶å¥½û€Ë Ø7Ñá@Rc7RGàž/÷ÂFçšhw|cTj“UzƒE;ßÖëilÏÇ+5¯átAñúçS” IÜ)wY. J÷ÓÀ´â­¢Ö8Â5°ìš5ìŒÎ“v騩 #Îh±¥o›/l§Ž)'Ε\b×׉Ÿ¢!8üØ\6@-…¥÷Vøv9˜‘Ó$¦Ì°5|7^t9!š2Ì0Õò•­Í%#i“yêà$Ê-¼B=ѵ™ýë+Fý0•ÄÏØ[ëúOÿúT2äc¤+ ƒÖ–Qq¡¨òü mŽB§Æâ;Æsù—±«K‘ý‚ûõðSyíâ)<1º¿Ý£ 5»¶ƒø¶ÀíË­@§r𴉄—÷ÒÝ¥y„Í}ˆYVþTn äc4Û×&¹rïX´Àž¨JzBûݱÒïWÙœ‹«#'<,µf³I׊„"¾Å‹¦yvƒ±ˆle«ž½©™‹äƒó¬¿¬o‹æÂï %RµªX/âî6¹B…—${ûì“ế´àzŒ¤ð9‹” ·íXù— Ež~(înt1Ÿ x¢Š¯'ku{<Íê,87K³¤d¾MÁè¾Kì-å}›æŒÕÉkºåï0íظO©?Ã7g§§ÉzYÛ‘•›ß›U±Îri}ÆŒ‰D•OYŠ fà÷èßôÖõš¬ä25Ã}ŸîŸ{9¶Ë Sr8û> stream xÚtT”k×6!Ý %ƒt*Hwˆ”80 13Cƒ€C7HHJww((Ý]‚´„(¢z<ç}Ï÷ÿkýÿšµžy×¾¯ýp²éƒ k¨*ŽÊt@ :"@(&ŠsrÁÐNпíÄœ¡H —ý/„ F_Û”Áè_@ éæˆHÊŠHÉQ Pæo ) P»Ã !€&Es*!\¼0;{´,àŸW /@DFFJàw8@ÁŠ„Ù€á0Úê|]Ñì!l`P´×¿RðܳG£]d……=<<„ÀÎ(!ÒNŽWàCÛ ¡((Ò ü¢ Ð;CÿP"æÙÃP9@[´ \œ`6P8ê:Ä "×Õ m€ž þXû/€àÏp"B"ÿ¤ûý+ þ;lcƒpvý`p;€-Ì ÐSÕB{¢`8äì„B\ǃÝÁ0'°õ5àwë`€ª‚|Íð?” æ‚F ¡`N¿8 ÿJs=f8D áì …£QÄ¿úS†!¡6×s÷þs¹Žp„Üçï“- ±ýEâæ"l ‡¹ºA5”ÿ`®MÄÿ±ÙAÑ  ˜ˆŒ´ê €zÚØ ÿ*`äåýíüm¾æàçã‚pØ^Ó€úÁl¡×Ä>(°;€FºAý|þÛñﱈ³A¬¡v08ñ²_›¡¶¯ï ó˜¯å'þúýófy­0îäõøï+ÖW=ÒÒäÿCù§¢"Âà# —¼–«˜˜@äZ׿§ùg“ÿmÕÃþ4÷_ 5à¶€Ô_®‡÷7÷?Âàù³5¼€WÐE\Ë àùú-€@›ë‡Èÿ÷üù¿IÿW–ÿ§úÿwGªnNN¿ý<þ?ØæäõBÅÍ Šüßè_[¬…ÀÜœÿ·W ¾^ ¸Ó?メTažPˆ> mcÿ—v~Û¡×+ñïX¸ òkwD%$`$ìE ¼ˆ¨„ÀGäzÉ PÏßÚ Áè뀋Ú`‹@ÿº1€°Ý¯/‰@‚]\O¨«Ó/ ñ¿êظ!‘×;ôû*¯›øûü{a¡PO¨ ñü ÂænCMPÛY•“‡àæÈýIÎM“¼‚>óÈv· r‚$ÞÊŒg+ÈS…¤þ7”Kë*<'X¯|öšëB[ Z/}¿[ÅŽo¶Ïѽ}µ§Pûö6³ Ñƒ-ß+Wß‡Ž¸ÍØšœÙ®nÒäú¹4g=jžµoK‡Bf6 ¶*%µH¾—LFGZNqæX¿œf¸ƒ¼MÈGýÙ“bêät’:kô'«f?±ß~”X¾Ùªhôù´÷r™‘(ª‹‘ƒÑŒá6î õÐ8—âN²&ý¬OQþÒ»9Ï&”Cé|5 o>Õ½|çyjŠ»uD84ÉÌ7ú,r g»~ì96™rX UzÐw¦Ë9‘ÏX¾Èèʽ ¶œ&$‘ÔÌë.«†°hÍ5¿;m'+k@%]'B'½¾Cç”vòæxqtÜ“ ‚Þ±q,²æš™L—€¸~ÓNO!·cy©ªìi…g½)­§_¦šH÷kù9þÎë»vC/(c#Á¬´·H(–õŒ^‘Ž—|B$ ªðàÔ6ˆÖ(°Vâ–[ɆVY¯ä¤Wct6Ñ«!‡«bú¥{²4&?Žù´Cϱe†gnø5’~ñû·š)sÇpq¿Å‹úNèÔÙ^¡7t|+ÍëSµù@ÿÞiQ‡Aˆ™Zâºíâ»Â87—ýnqtÿZ-w)°R6~m“/°Þ¼ÏD$¹ù:= )TúÁ…JiÞ1‚ãuĽÀEÅ2` ã&ߎ{¿ïc¯¾>LÆÁ¼ 0;‡¢YØ`Ð@8d.–?ÐG}3Ü”êÆ$_ÆÆŒBG¶ƒ’ÙÉž›’œÃrƧ>t›+30b×÷æ˜Z7IÙK¢÷ ‚:,|„Ø™–M*ÊË ô ™Rßñ€¨t~ 2žQIÛz³Á8Û®?gúMNEk‰‹qä1)Þ´ ëiâDŠGjÂÆ|¡“”^ÝÆõÓîxÊ"¹?­–è~ƒ^4Ë…™Ã'éLd©wCÛieº(﹪H³®ü “*w —8Õf\)VÄJ[i ÑT*JtoHGš»Û—ð­íÆ‘U b‹÷ô)ò8qÚæz!‚›+Ïðƒ<ÜBìèÝZÙëdÖqy´ dáø²xž®0Þ©ÉUÿœiպNJqgúÇžPA²h\¸Oåe„ªÒ–Íì“[&  ‰Â_±B º“¯â‡5nK­ªÕFdLóæ{aãÆ+n¤4ªˆêzĘpˆOfhÃβ,¿±v³œ¯æ…eE—Ìû¡.4Þñg/‡¤=¹¢ NŒû‰Ê/þF¡ žuÉóh%’–­L¿Y—õÓGŸâ!“bÓ«¢úΙZdÂ×mlÿK¡ÇÖVIrÝOÌî~51̸"+ùEãÐtDPÃ|‹ªJºs$ÜTö€\ÚE¼¬>#>’\ø2WÚ¿mfðæåšzÞ ã‰~¨Äqmö]>—=µ¹ô³­1G9ðÔÔÊ15®Åï´ªXE1Ì= ËEx^DVz¦4â5Œç­h¯%®õ\A9Ô‘yà±ù˜Âª7‡KºñaLÁV™©N³ ?.Ã÷ïðIHÁmP¢*¬toGûà +õ¦VÎ)–ô§<ÊM&³kºCß•¬„‰b°ÝT¤¿²ÇϽӷޅ¦ˆ ÈWhæñ^Á-ž:vηxe÷óe Íãäï”®T½¥´Šà{åj’‘ÍÈ2¬/êéãDz&V.ÒjZ„~G3üRº²q—BϨz2»BñÅ%;iëè@+kÕ…þÓ«ë<8îEf)MªïÂ.;³¹øMŒœ?y«*Oå¸Gïøß,–ˆÓz—ò] &¬ðÈU‰)Œäõc ë×›´]ÒÁeþìM–Áˆ»·A¦‘ûïƒÙ¬ØÒ¥1ñàÆ eƃ7gÅïïGÐR½Œo7îc‡LZÈ?ç<ê›ÝËŽzì­k°sï5œÔ‡aض­Í²ÉÃÔŽÙÿäYØÙ‰ŽnüÀ”fï[Yc£œüôÕ/¯Òœ®>‘&ç±.ÕÛ¹)È4TKSuf·Fø¬èà]Xy}ÜvLZÇò¥!òz¾9BYtKW¹sûýeåž0moFÉkðߣNå¨Jlð‚‰!Ó'^ ]t±÷å섚+¾^É¡# ù‹£ ;êGÄ»¶Ôí1·Îk3Ù°ˆj†õ‚o¸3ßT˜[;c}‡“çÂÔEnZ_]hkÌJOPa»ÌKlÿL²Jï•c › ü$†g" e&Ñ`G'ƒ¦nªM°;ï°î*”¾Ôo\¸¸[coûÅte†õ,7µõ"yçÀ#§192oL¦æØ²û)ÔJìóVëÇH ÖÖ÷ßÜ žQÔYbU5”T0¸ó¾°ý¡w€1Õ1• cæO#’~{„ݔԡ^¼š'&‰€¤ VÃ1ÿ ¤ø{ưʟ¬üâ_ÀÛ²‡?¿‚ ¢ׄIJA÷œ7ø>Œ¨ÍV"=9‡÷Œ™¼/cɵU#•‚u;š6UûÀ‹…5jŠl[sþài%N6þE ^£°Ñ¦¨—hÛŽöÉçÇÎåï?£âlqbŽÖ É\° ²šâ\OPq=ŽgÒì§ó_Ú= Œï¦q‰–‘}݃闥d˰ö ^±råú¥»éîæëfµ«¯%ÏÉòƒH•sÖ èrŒ \2‹ßOsÈ~bz‚¶ÑŽU÷þøŸLgNï”Ä4º+}õªèQÞ” Õ7W¾E½QA<ÑÝÞªŠCa—Á²AÆ¿^>ûÆ¥@|gÄ-ýCá¥ègeÅÛLË)î‚´A{](˱ì¨Èþ,þº\ˆ!PqÂÆ÷mwÖÞ+¾ÓW©G ²5ýwßLß S­ºø@4‘¶Þ@L1”.†!Þzk´ä‡oÛ‰S³íê«køˆ!â=¡¦ ½<)†Èò³(Æðm*®ÑÐXùÖ—írþgÇl¬åެ4¤Q! µÛ±Úñ#÷½ÎèDq¦ìÛñ\¦ëÇ1’ƲyRª!»_¹R!{I'S£kI00Ãak¶Ùl*V³î¿àˆõû”7Í=2ß—<Ì?hUG ¯µ¥ødÉ©ž–¶Û½ûÔ­=ã9·•lú›¬¦xª€]¥»‰v“ŽÁ=l–…ùt)Ç8‹á^ØæÇè"9yÑ2¯4'÷ák^Qï Q-2²‹W† —Îù«õdyŠ®‚Û#‰mdø?2lM螨߽Z šá3ÓžÊB[<Öp´3Z¥7Ñ mt'`ÖÎÛ_dP84© öS»Ÿ=±; ÕQ199€qL‡§L’æeÁ—e«ÛÚ ™Qš²ûSß™©GkŲãv`©R6˜³i§÷æNÉЀ{cÑûa[W v¾NõÏxu‚HT§õÌV1ÎKWÔ‡3×Ík47ø÷G¤h2®C(>“ËWš¬–r&TöÅð)KL){yÞ\)«pi9™:ó¤:qã£[ê冤 È(¤”$¨*UídIú]ª{è~È«?/-ÒŽ=ÙO_©Õ;z¤Ôµ”‹¾A¯6:\Ã=Ch¨¶¶Uw#žúÕK<ìû²¶l^¦@X¹9ŽB7óÐçzËÉ:WvU- ( î-I”Î{ù©Þ8T`é÷îõtгÿMž„ȉíP}¹TYU­|0¹&³'IË1enÛ7•Ÿrp¨Ÿ> ¯h 3{X9ø,}„¦QMy4rƒ¢…}3B8,q_²ð­ô0e²PnÝÚ½9»,ûõEWr²˜µ>hB+Mô,å«Õ6QÛ›,£o ¦.“qAY? h`—›x÷k7ØìŸ^9DˆˆG‘XŒŠ½Þ]Æ(/©Âî9•ñØ%ƒPå]⻯êgŠoDß爑õ}¯YWõêÊÆ ¶ž¤ôõ¾%ŠoH³IGs¶'~¾³Mg¦‘±-1úDÙë~{Ê‚o‘¯°qNZ»‚gÁ™øcÙÙñKß:%Àþ%åYÀ*äqm¸9çŽÄçlœÈ]!níCUÞ¾ˆ[xO/.€Áj`l.ýÍ7 C¦¯^‰¸!„áô'®{álBf\¥™x…$(kO—¥`…Æ(^ CGÌ]ºèÙ-°ÁŠ2çWhü5`ÿª· )Dàå™PÇi…°eØwÍ ÒñŽS×`µä…S•2Ÿ-Z2"Ò ª•Û¥j÷Dunorl^:—Y‘|4ym¥nÜÛ'Ä8šÞØhœã•KHY#èL0h?ôÔg- gœ«ƒ3Iáís(ˆö/guo¬Æ9«Ð¶˜öœ N&~²¤™ûRÑQrÇ9.Å1¿«ႚ»Ãî-}qÞ¥ÿÁž¿@³®£!áõîeGCDî“Ѧyy„•ùD$ŸÔü€ÉŽ/4ò„¸e$&=øíV'­fT\¼,ù1'g’Üݰ†¸ø7å,V¢X»QÞ“‘nîÁEpyÅ·ïøx±‹Eµ Šñǯ̺Å:`wh¢] Ì­ÀœÓ%"_ë³_¾´œÏÙMbâJGóçefZH½2 /úÌw›P†(¶{}M»¹^ˆÄä„F×yi¢!#1]Ùù}þÓíMÓD—Ÿ5§Ëý«§1ƒø³¢ÍAïØCúewÆœ—±&à¦v„k¨Kñu¾.êÆQ6¢Ô<IÿYüR¨${Î a“Ð^{G*б'êqH6ÑÃÙ-ÿ±ÌÊÙKù§ä¥ñì–»d‡÷QÏï•£Ž”°‹ðóWÑ£ZÄ6›ïµ¨Ã”;ßêå7ž…jÏEûZœgvgˆ^à*q)z\4}$ÓÝ€ãÌnE Ëârù÷-èëõL=;'X=þ°’ÒÞ©7#°&î0ñŨcZ„â9u4ü‹Á0n¦¥÷AšÕ«‘©›ã#ýýŽÕm¥JZK|XtEH§„ö݃굃Žã´V7~¤Rj~)³^"h‘aŽœ2¢vµ\¬ÝL¡Ç¤Ò6ºÃÄý‚|±raqêÙ׊@Æ0¾³(ç»+ç$àíÊ ¼Â)q7š¤GÃCä¥U}÷‰àw‡G‰¢¶ó»±Ç2‚—åøvMZ•0š<\ð«|6ƒcU ~³šÚ“ê°ú.°m'WŽMžï,@TAS‡cçp1Ü)Å‘“ ¡ˆ’bºg¨y¯â<T™ë/À§¦Ó‹¾«Ö U4ñq QŠõІ´XÃ!"çš& ¤fåþ-7çŠ-´ÏcÛ›:¡Ù]S+pÙ+´AزŸ8ÊÞ? kX¿ùi$™Zeí®Ÿ¨P¡L5¨æ˜˜ÈŽø˜–Ë*Tçà>j¶^Ï·øXœ,±FB§f¬š+DëÌ8X·õ}¬ÞÏŒøˆÍ»øœrÃn{\è˜ { ÷°÷SE¢ŠB.éŸG¼˜’z»!}a½¸à‡^“³Oìc:Ý,Šö݇»±ð6¥=R;´eq1¥ Y÷¬ÚàÒ8sË(&Äg”)víÊÓï³…gtfRž»0˜nÎïã;º‰vYtuØJ’5b½ÜÖã0m%ïmx&õ出Ððd§NãbZΙ†”ß%Úì½Ç4ÓX©pžÙÁI»J]mdlSi;°Ýü–?ÇÐße·~gy¹(îqÃå­‘;Ïɽª~=µ,Rp‘ò$nä¶Ù.ñŽ2*ܵU&«ÛÍ÷ ˆ_Á.H-$5ªŠß,?š)%zÂD{XšÖ3>©ú£Åì’Äÿ³°Å»ýãT…oþã%ulié}ÞM[;ÞÔbÂì. ãC¨ÄÙ\2¥o_(-†$"ó”qyC65ÊðiDÑ‹Ûo«Òê]´2cÝ÷0YvÌ©âhóŸ7뽑ž,QÓ™ØÙ¾„ö¤*]5Æ‘»öL‚·'ùKlÆx¡Lÿ>QɃ†o¡mÕ¨;Iþ­ÏñšÂ’üYž‹,ÅéÅùD™d&M<æÖ²®{îó}Eˆ”¼v1ÍTàå¼ÚÂõz‡Ì|ø7ÛZLL¾̱2ÉgRv®`á§î¤ >`9û¶7Á{ÌÓõd‘òc‘–bèûϒО5§)#ú×CA´ ÿ5ICdp³\ÕÂQÌÔ¢¼n¸mä½3RI{ŠûtêAö¼Iº·r‡¢¡Öú)š(µ= 0¹S«ÂO­ÍZ8]½pÞ¹'œh;N9„rûb¢ïuF‰m[göªÚëÞ†å"OîÐ%£5Ù9—ݮϊlfÚ±~nʤæëê1Xw»c:;¿þ4–§ïŒk°Ã]I©@SôÈxå–E°S¿GCe°VÞ ëŸ—í 3¤=ãžj-gÝŠdò9G‰¦˜$¶e©Âs·œÛ7z÷Mˆˆ‰cxCi«VezÈ}ÇÞ*¡™lC ÌB ­ÁÁóýHpû¹\0¦h÷ž wùן+ªU&¨“Ad~õ75®à-GŠ{„Oøœâ¸›Œ‘ïzèÒÌúZÂóK:]ŸQÄ9މGH¬a´pÐïŠôæê§.drâŒ–Ž‚XZäº,Ð!HØTÛrËÛÁ§6sŸ$Ðö­éca#] œ±CA³¾— $5*¹o•·|¨• Ùƒ÷ƒp™«[Lüã"n:ªt æ;½˜1ð.ß‹³3fгPà„e¬ø[HÛÆãR5Ó­I°Vo÷^õÎ+z„TÐÇ¥bŸ5òcjÙyF¹é–kAs…¦ ±GÍIR0\.²aIÍš¸P<#”µâ½)T!,ÅâΡe“Ö¯-Õy9ömsŒz+hâ›~ûèÀ—-8eÇB€ª­]ÂÅì!·ÒuºÆ#_#*'8ñð‰é¾¼˜íí„–Q•ñW/TP£ÃQ39a@MssÓ'+£J…7a}FßÜJQ¹Ge†•/ñí;*É?{î >ê\2ö¹ Òëh;oZ°\¥-@>a³Ã…O«_Bûn©>Ì~´a'er5’«íCsÃzàõ;&ûhF]0å' B¸/Þ›¢ñÍ+ Ã8í:^!g£)­ªq —¢±ЏjØ×áŽ^5½ÒZãÒô=u÷¬Wõv‰õå1+Ø7%ç§ #. 6ƒIF©;ŸÉscŽÞ 8ÔU¼¸JbB¨oÚ§«xåÍŠIZ$‹YGÈC"¶ÁÕ¹ß;4û+?ÁņÓ”@u¢C¹)¬;’OvNøÞv[{³³,ÔŒà îƒzIb’ÍÝÖÙIJ:ÕáW˜zübÛq®´¤œê0 –ǦÔÌÎ’¯ûŠçæÏsޏ>HÊóŽ¿8M:¸H;ßùèæ¯ÄŒ·”Ó%3ÏíVæO:¼måjþ#Ga5éòT–«Ç¥ïæcŽ.±ž;¾¾¼ëk%·ó™›@ÛSê Úïs:óô5Cù°ãç.¯Ex¨–. åÛMK n÷‡ƒÅ/jˆÃ¡Ùf±·#Riy†X&kIß³gû_6ÒÔ®cÉÓ¿´8Ž\/Õê•N[“aQqZ~Þ´ŸR*ù¦¨,Ýg •M¤¸ë°ò´æãqt·” 7”hd³ªŒn€Þ™‰üë|$½šYžˆ4ýSB'iVˆí+²N±E!;_¡‚Z¥Û …ì·Ð^¼&øÇäøªa4+tÄÝϪ“cUÄ'ȱQ~6®<,)Ìžñ¡?Fàž,¹![y SéFƒË­@®5¡»“ù,¾ïŸßÂë·j­+e/ Á„}UÕôUéñÚĵy©r.éSŸp騅fÕéÒ~#)6ø!Sö82幦¹›™øÛÐÉê–˜¸Ùâ¼Isn:õÌ–ö/SV”KÒÖS<ÞÖÒ“æebM‰Øö÷ûÛG-ÊŸÆÚ8Ÿ6ö™c÷ùuÚ > stream xÚí<[sÛ¶Òïþ|l¦ƒ¸33;Isq'N'™>È2m³•%W’Óäüúo/’¢¹þÞÎ$Á%°÷],@IÊÛ¢,”wEpñ…,ñ* ­M¡œ/´×p …‘eaÜYX-᪠,\uáƒÞSÁÒÈ[Hkq„+¤C”P; 8Žt !±Ñ$:šdKÓ£BºØÑ…ѾÜSðØD«è€´…ÑÖK CáJ…Ócá”t€£,\€çº”…×e„0è…Ž-C:E0Víáãà5<\±ÌZê"* c‹èœŽ/bô8x.%ˆ­•„ž%iPˆ,‰À„”xÖ ¤•¦,÷´‚ÒY ƒ‡°h˜¡$°«®T9Ô0C9Lw3 Ìþ³)©*ÖÆ fuˆq”Ž +€ö­µ–ÐS IÐ4dýIc‘0(HçÊ$G»ÄAl2[‰ €¥¤•Îì—€†P±6 ³àÐ7Àdè] `àC“ØÌ= ¤5X]üüCF4~ùeO¼ûvSâélºÜ'·gKºE Ü¯F×øLѢÂ1…xVM¾TËzš.êõãÇõÅE5¯¦ãjQ|.Œ×õôvŽ þ¾-«Iu±DÇç³å¤Z,jq9}©Äh|»¬Ä¸žo¯/&ÕW±¬'畸糩8›W0¦ŒÆãjºç5XÔ ±?-Ï« 1Úb\דɨ^ÝN/GóÛëÉèv)f—³iõ—ßâf4®þ@©QÂÇÅgåHâBœ~üT@6{ïCšÞN&ƒÃtû4á½6o&½ÿò £@ó¬§#‰»N£ÿcfˆÓ×gVcžñüÚCfUͳãùl|R-A›âøñS°sõuY¡ÏÞûýðÇÞg'õ¾†” i8Ê} éÎìC$XxŠYqßΜÆéRí+œ¥èyŒøZI}G²x«zø 2´¾ÕÊ’¤‹ašÆÀ H-Ð7ÐZ!ÄÓ˜¨-‰–B¬V&£œb¦wŒ‹”!öLôгÒ.c‘ã4ÎñdGž-¦|ú 9æ’å>æfà 䎃-ðÁœ°‚zò¤ †Ä$ªQ Ìȹå!L4ïç#sÅ%"ùS èZØþM›óÆ-Ó2Ðשe‹îA¸FèÀ7…À` IhœF%«FòäŽfDÔ ãáyŒ™[Ö ÌKØyµòä¾j!ÏÕÐï·”ˆ“ݨçÑ£Ööö2÷``¥îаµÉÏaÁ„? ½dªæ À}j1‚újju@%*ôj‘ëHôÔ—f+Žc\äxAÿPCð¯Æ)ãâ¾±(Ÿ¥(%µ„x0ŸX)ñ‰+1JJìË2b˜x‡b8‰AˆöB±Kš¦ÔÁ‰Z¸ Ê¡’""÷¡ž¶úýi¡ü!‚4m×É?„:]†Ÿä´ÛOZSÛ0g" çvË$¨~ÀŽ êèî}•ú9 wkOÞ&{”è<Ü2ÄGtoƨó¨²/º%&ysµ¦Œ€#u@¸5Ê’»j€DpјÆ$Ì„!õ:˜…4®•D—Zp<Ù°"seôû-UbŽ’¼¯a…ñ­1IÙ w˜®’zŠÂcòñ<ÆHc`?B­^QÁX²ƒ©•·©%úýÖ^wuÃcâTœbÖŖ–óµÝÜZ^‰¹Ípæ­‡š1ÿƒµÈçÒjlJÀäÙ,Î$ý 4g¯•œ¢Ò…'µ£ð¯•óڈƴi|ÂÝÐX'%rWÜžÐMR;)6¤å˶»’&DÒ£`¬C­4¬[ÖB›Ü–KÜ0 ¶+t}HË—rÈÚ\¯<¬{Œ'¯ÃÊÉ(¬ŒÃè@6¸\ãúŠ©ü¼péH”‚£¤ºË`<¸Ò/’– s§iM±´€DCkUJ‘V!­(ÒTƒA³E£ê%ÔöeCÄßkŠZ¸,I’’$M,OP‡ÁSì@= rzE+ Dú-Hf¨­ûYN„PôÀÓ”¤h™6uèÐeIõö …—Xú:jÁ‚DÅcíá$eJ¬t)åm[oxª`ù¥*Û!k(CEEå_IËÕ dwí¸¾¦ZÆjª<ºª&0&•£¸RªMØ/ÉŸ"jMM„EZ’’=¯¬1Pæ²äo†v´IU÷mYöz?Ò’§Ûô÷ãÓ~)5›¡+zkH6x}Ÿg§C•·iä@N,á_Z¸®£$*թ͘djtQȯâÂý˜3º`‰¸ë ´ãݘc<°¥tömªÄ21¨’ê*2#-´ØCå%9"ö-ãÃ!&E‹‹£’•–ßï, ™ÊRêëµ+ísáV5®cÅc/-O˜¬±†ÕäÞŽ aÏxKÚ4jOÎì(d°$×–‹~×,ᮤ‹&†1aù¿Ï0 4*!¸¤QåÎâS§h.È©iûéƒBæk‡:sT v\…•ŒÍ<ðGþÔw‚Íj´2— è6^ªi¯§å'¬}p´ b°É)  fhËi™ %UŽ,í„ñ™·4Ž ©€zwA5… ¯‰¨KIÔÑSײ2·k­pÑ…;MG© Œ&Œä±†ìlrj¼OvÔ|ðÂãS’Åc`L”&P²+5ù £4*é8Ã%!-i¤§#K ¢á2Ôa¿«þ÷·óh9÷îÜÇó’)%HôpÞ÷½¢³3G c <’Úé|#ƒ¬N&)ð%kƒû²9Ì!PûÐßúŽŸ®aù„*ËKÉN|ñ¸ Ÿ¢Z©¤”¤i„^Ív\w‘kášCÍ¥z^óö,©‘J/r<Ž%ÃR¯ã&¬ýªå ŽÙþ÷®`’C2yû»~ŠçÌ7{Ϧ‹Ùd´ÁÓÉèrQvp0ûZ|~(‹‡Kp‰¹Šcñh/hñÐhOŽnžUõåÜêrO %|3ÉóåhRM/'UO–Õõ{X€öÄišc,Ü^æøîó'ñHˆCñX<OÅ3ñ\¼Gâ7ñJ¼Çâ­8ïÄïâ½ø$Fb´×5¿I†þ²š×‹¿Ä™8›ÆUK|½êÏ‘‹ñl2›B{}=ç¢Ä€¨þ¾MÄ…¸¨¿Tâbv;—âr^£¸Wßn®ª©¨ÅŸâ/1ø.[\‹©˜ÖÓJÌÄ Úq3šWS¢H=¦wSÍé%6\ëÙ¹¸™Ü.Äßüvüül"æb!ÕÀ½¨¿ŠÅd´¸K±¼šW•Xþ3·â‹øG|ßÄÅ«ùl:£AØ0OkP¨.ÕêµþXûé“7^ý|øÛ,7Ûüþ¡¢…FJ\b2KGÓ²tp¹¥ã¥e2S“›ú=±eOÅ—¶Pf'¡^~:zù…:’ʺ$~å^¤’fPªGà¼ì¨#ðÆ19Zî\5x:ÐÊwÈÀº¶'˃ÝÛªq»¨æ÷¿¾9~̪QªÑ¨<ÙÖñž ·¨†cû)DuÑ8>» »„(¬)ørµ¥¨Úª½¶êÂ.ª{õìñ›èU‡'‡n%Í*V¼o«ÎÊŽêôZuå€Þ¼ÊÔ¦e®6VN%ê–<²ÜEžÓW/^ýúäy2% 剸ù*cñj-)syòïÊ!Œ(KÑgõåe+M É§uû&»;«Û7—Yîm¦­îòÛ³ºsw)æ£óz<šà´ÔÅA”n¶¸…cYϦçõâf2ú¶,«¯Ë¶UvJÈ'G'ïŽ?€U~{>dÝdd¾ z[€>DŸü®«atþ ë.Æç‰8åuvrs….xV-G¤¸|^ˆË^W %¯×·¡×Õåh¡75¬z¦—0º¯à”;¥ü“ã7ŸÞ“ÚÜæÐ”IiÊÈ{RZ°ƒJ«!)ýÝg·4}ðüù«'$NØš´€Éò¾œ ʃ¦Gƒo¶1W@dh02š¶cÊòìÓGo_þú‘d²Ç&ÍÚû’Ý Ê~"-iÔNYöÉǧ'X`½ gS®¤)ã¿‘f]JÇAYVËíãj‘‹õ¯©¤~ EõÑèúì|ÔÔÖÇWuV_àȧkn/©×Ÿä¨®§çðM‘ÿkAÿqŸ¬×øN¥}½úPh«ÖæxKɽ¡Ô¦Q«HwÜå:üºfö×ySQÐT7UämGÙ)ñŸ¾{ñéýïè(nÀëW~‚'¿?Áa~‚zùÚâìVƒ¿{óúÍ'g i×qy/âx·ÅíÁÙ1‘²ã¡“M¹tD瘷Êž1wÊßO^½Âåèí@ ÓM Óî~¤7ß úç×ïZUõ:.9ëTW¯ªêí…A²\@[Y;%ü£—>b!zrôÝM¨TÿÊ÷ÆF_ÃIòd?Üä»Ë´ß@½°ä_:2ë–…×OŽßŸž Ì'ƒ2§Š%F\â°Èxû#¶ìÂAæ·â}[¢ò×áÇ7‡Q¢ƒÛ pzÚMà7N¼ÏÀ¤w[·q2´Gº¹™Ï¾r°Ó7 D™,ë›É·UEß–v§ôöìàù“goHÚt õYÄïà×}|p÷ «.ÒI¾¶8;å«££“£OG$ÎPº†Õ¿©$eÀžÄû°ÝpÂ^ÞÁ– 2Òô¢žÖËoÉŠ7óúºj˺SºyÿâÓãStÔwÃ;,Û¤sO¦ [vX/›µ©N™—sÌ?cvÊ1ÇNN_¾øù·“G¿ ЇÆÑ÷ÈèãL:—SårZ[~ÿ¼bK,¦ýÂl¾ Êvì™ ™fà{EÚ4u[¡ýêDho^¬šS`ZãyÅKUeZǸzÌSWÕO*¨P Ò”Ne©äB–ŠPZ# Wò.ˆÓM·p6?¼†]6ÛPª¬°‹ ÖUvK(³³âºˆº]_gGÜEô­E^½ÿÌÎÅnÒ>{™ªôý§ÿU²õÈ:'Ä-o£/O¢åÄÓz¾X¢½ <<¥È{âC}¾¼Zз27zïVê£Ü.yß%oBN^Ɇ<~tgòÝãÒ.ùØ#ß’^©Œ¼Ü|ïȱC_Ê.ýèsú¥]k?Ü~÷ˆ°K^wÉ—-ÛëÌöwP~÷(¬K½çzR(_ñ×ðv$ß>RêRïyi{³ôüÕ¿]¯}Ô%ßó<¤7 ü,ß9„éPW=¿ -ê2÷;µ;õΡI—zÏíÚvw™èñNßÚˆwi÷œÎÄŒ8.“àþjoíš»´ûÉ®­uŸ¿ƒàíMk—xüN´ÉŒø¢­» ì×=³C‰`gòÝýX—|Ïå\ì!s¹`v§ÞÝ;u©Ûíy6õ;D[g/Ó%î·Ïýýjïì;º¤ã6Òx í;”Ý}@‡¸éyœóƒw‡Pßø9‹n}Ñs;m³|r’õüã<±»gè*¥ÏPžþtn’ +þñè²ZÀ¾`v‹[Œ=¸ŸcñŽ?ê@h_ÖçPâ;þÎ<— ôë#tåÔ ëœã«I¿Tp 2‘>ádß-ΠP\[ŠSî6vˆ†Ò ‡IW›h¸DÃ}—LèŒ,$8¾*Þñvæ¾¾]N`G²Hæ);hü! ºY)f5±†]Fá’«?‚¤Ê½$ÒjÖñ¼úRØv|ÓLë›™fËLNJâþ|+7 Ñ šr#š¹‰W3kÍÔÆf¤Ó¤˜?¤™ÄOÒÌCÝÁoüªßeèÍ™L£T6Î$™ŒéÏÔRµÙ"S:OxB.`â'™Þ´Tbêu[õ+ôL+ôÙTê•Û8“ë"òÌF©JmPænÓ¶`â‡L$TdÛ+ôLkƒoÉÆÒlœIŒ© ¶—Re¹EÀܹWJcù;,Ÿ*·É×Xa›ÿç‘,ÒDnFB[>€GL˜~z<?4¬tWp·¯@ÃÊ„>Ü!<öá (e‡‹9ëÌD(û„PÃVõà5lu޶¦GEÙ¾ å†aÎ:3z‚\Ô—·sNC2É@®"çoƒÐïClÐ ²lк—ŠÖ´×ã†D«­âî*@œµrw¾'Çu9*[sP•«\ÃT¢öœÑfX1~€^iZ4P|rJïZœ¡4>ç‹*»GMËžm’«A›™B›¨œ'LB:g “ˆÍécöp6`Úð9ÌÇ!lä¨a(åàÿÓ«#„ endstream endobj 366 0 obj << /Author(Jari Oksanen)/Title(Vegan: ecological diversity)/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.13)/Keywords(diversity, Shannon, Simpson, R\351nyi, Hill number, Tsallis, rarefaction, species accumulation, beta diversity, species abundance, Fisher alpha, Fisher logarithmic series, Preston log-normal model, species abundance models, Whittaker plots, extended richness, taxonomic diversity, functional divesity, species pool) /CreationDate (D:20130319133406+02'00') /ModDate (D:20130319133406+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-2.4-1.40.13 (TeX Live 2012/Debian) kpathsea version 6.1.0) >> endobj 357 0 obj << /Type /ObjStm /N 9 /First 70 /Length 352 /Filter /FlateDecode >> stream xÚ¥S=oƒ0Ýù7–¡s>¤(RÕlýTÛLUš¸RÒCÿ}ÏÆDÁ¤,ÐOïî½;ÛH b@JA(Á˜*É_ 2#Fd1eabt¬I1e$H) ¦Ó zÊwº‚«J¯ê¢Ü߈[¿Â‰IB˜ô Aˆ>%CH¼:âNÔ§TÒöZÑC±+jÏùL¸ f³~Àæóäo´¢ë}ÎsV‘ xiôÉäÏzžì² <ë%ð’ù%c£(S@ÃÊX]àyù”DP~SrŠp_¬YRÙÎØžcê°)v(|§y¹º~«ócÍ&ú»É;‹¡%®:”É¡Ë@©ïñUlš£]eçñïM(7©“±‰ÿj6×kÍ;ãâŽ|ÿ9hˆîò:ß–› zÉ7|ú(í‚蹩·ÅÞ2Ô2íõ0Ôþýc¹ÖÑ¢Ò˜Ëzk@Õ¸ý7Ï> endstream endobj 367 0 obj << /Type /XRef /Index [0 368] /Size 368 /W [1 3 1] /Root 365 0 R /Info 366 0 R /ID [<6D730997D858C88E34A6FC020714289B> <6D730997D858C88E34A6FC020714289B>] /Length 907 /Filter /FlateDecode >> stream xÚ%”ËOUw…÷>çððˆòPä*oD)(*Š(* õ"¨7éÄ8iRÃÖ8rà¤IÓ¤;uÒÄNÚ&jLût ¦ƒ6MÕè¨D4:Ñû-'_Ö^ç÷¸÷ìu¶™ÙÛÄ,1·K‰¡vtÍ”ƒŒãF¥ 'ñN¡Š@1˜ÁûUJ ή™¥\Vâ9Þ å*°oÞIÊ2PŽ·ïeXƒ×†7MY ÖâåðŽS®UxxÇ(«A ÞÞQÊZ°ïÞå°ïÞÊ:P·€w˜²l`3h[@3Ø Z@+ØÚ@l;@;è ÇÍ*Ô….ÐÍ•}  ‚°`É ×­ämÓâa°ì£`ôƒ=¬ë»Àn¼Q`Ô­a\GéøA·ª•c@ëö?ÆÀn¼! ã÷‚a0â–ëÔ@ïù [ßOòI {„£FPꛪNŸG݆gµM‰P¤”5…ð4{÷½ø¢ÛÌ2;B)žs›šÔÀ<8Ày°–ÜÎ\5÷Ü}í-uûäg)‚©Ûå"•ä9”çÕÜ{ŧ|Á%n×ue(ån7«$ÏA€C&¶¡ØÖhpû*Õ:µn·‡U’ºhä¶(˜Ø†bKX£ÞíÇ7ZLƒ8q â­n¿}«§.šÜ~ù\% ‚3fÐÕÐEä%hm ‚.·_h ’¼öè= ô¹ý9­u$"FÁÛ³?äáÏŒ£ ±X¾¦$"ÆÜþPy€%Ä'È_¿ØÆÝ^ÿ­%Ì’8ìž]Vɧd-øØƒ4i ÒÄ'˜4A®bÖ½²XÛHS0æ‚øÄ¼{K™˜s¯{ªò?(êô¢{ó7sLÇX$,.âé^âÙo ¹êW J@)XVMBEª ”ƒ  qX Ö‚u@3¢ TƒP Öƒ `£ûž‡º²ÎýR»T½ûgóR î÷Þÿ Mî/ë¥=©Z–ÚìÉÀ—RMž\¹)µÅ“[ÅRÍžüðVj«'îJµxÚÿ¯T«§ÓÏ¥¶yúé1©6Oï<–Êyúû_RÛ=}õŸÔϪ¤Ú=ëþZªÃ³©Rž]ûXª hpO‚³`̵Gãú>= par(mfrow=c(1,1)) options(width=72) figset <- function() par(mar=c(4,4,1,1)+.1) options(SweaveHooks = list(fig = figset)) options("prompt" = "R> ", "continue" = "+ ") @ \tableofcontents \noindent The \pkg{vegan} package has two major components: multivariate analysis (mainly ordination), and methods for diversity analysis of ecological communities. This document gives an introduction to the latter. Ordination methods are covered in other documents. Many of the diversity functions were written by Roeland Kindt, Bob O'Hara and P{\'e}ter S{\'o}lymos. Most diversity methods assume that data are counts of individuals. The methods are used with other data types, and some people argue that biomass or cover are more adequate than counts of individuals of variable sizes. However, this document mainly uses a data set with counts: stem counts of trees on $1$\,ha plots in the Barro Colorado Island. The following steps make these data available for the document: <<>>= library(vegan) data(BCI) @ \section{Diversity indices} Function \code{diversity} finds the most commonly used diversity indices: \begin{align} H &= - \sum_{i=1}^S p_i \log_b p_i & \text{Shannon--Weaver}\\ D_1 &= 1 - \sum_{i=1}^S p_i^2 &\text{Simpson}\\ D_2 &= \frac{1}{\sum_{i=1}^S p_i^2} &\text{inverse Simpson} \end{align} where $p_i$ is the proportion of species $i$, and $S$ is the number of species so that $\sum_{i=1}^S p_i = 1$, and $b$ is the base of the logarithm. It is most common to use natural logarithms (and then we mark index as $H'$), but $b=2$ has theoretical justification. The default is to use natural logarithms. Shannon index is calculated with: <<>>= H <- diversity(BCI) @ which finds diversity indices for all sites. \pkg{Vegan} does not have indices for evenness (equitability), but the most common of these, Pielou's evenness $J = H'/\log(S)$ is easily found as: <<>>= J <- H/log(specnumber(BCI)) @ where \code{specnumber} is a simple \pkg{vegan} function to find the numbers of species. \pkg{vegan} also can estimate series of R\'{e}nyi and Tsallis diversities. R{\'e}nyi diversity of order $a$ is: \begin{equation} H_a = \frac{1}{1-a} \log \sum_{i=1}^S p_i^a \end{equation} or the corresponding Hill numbers $N_a = \exp(H_a)$. Many common diversity indices are special cases of Hill numbers: $N_0 = S$, $N_1 = \exp(H')$, $N_2 = D_2$, and $N_\infty = 1/(\max p_i)$. The corresponding R\'{e}nyi diversities are $H_0 = \log(S)$, $H_1 = H'$, $H_2 = - \log(\sum p_i^2)$, and $H_\infty = - \log(\max p_i)$. Tsallis diversity of order $q$ is: \begin{equation} H_q = \frac{1}{q-1} \left(1 - \sum_{i=1}^S p^q \right) \, . \end{equation} This corresponds to common diversity indices: $H_0 = S-1$, $H_1 = H'$, and $H_2 = D_2$, and can be converted to the Hill number: \begin{equation} N_q = (1 - (q-1) H_q )^\frac{1}{1-q} \, . \end{equation} We select a random subset of five sites for R\'{e}nyi diversities: <<>>= k <- sample(nrow(BCI), 6) R <- renyi(BCI[k,]) @ We can really regard a site more diverse if all of its R\'{e}nyi diversities are higher than in another site. We can inspect this graphically using the standard \code{plot} function for the \code{renyi} result (Fig. \ref{fig:renyi}). <>= require(lattice, quietly=TRUE) @ \begin{SCfigure} <>= print(plot(R)) @ \caption{R\'{e}nyi diversities in six randomly selected plots. The plot uses Trellis graphics with a separate panel for each site. The dots show the values for sites, and the lines the extremes and median in the data set.} \label{fig:renyi} \end{SCfigure} Finally, the $\alpha$ parameter of Fisher's log-series can be used as a diversity index: <<>>= alpha <- fisher.alpha(BCI) @ \section{Rarefaction} Species richness increases with sample size, and differences in richness actually may be caused by differences in sample size. To solve this problem, we may try to rarefy species richness to the same number of individuals. Expected number of species in a community rarefied from $N$ to $n$ individuals is: \begin{equation} \label{eq:rare} \hat S_n = \sum_{i=1}^S (1 - q_i),\quad \text{where} \quad q_i = {N-x_i \choose n} \Bigm /{N \choose n} \end{equation} where $x_i$ is the count of species $i$, and ${N \choose n}$ is the binomial coefficient, or the number of ways we can choose $n$ from $N$, and $q_i$ give the probabilities that species $i$ does \emph{not} occur in a sample of size $n$. This is defined only when $N-x_i > n$, but for other cases $q_i = 0$ or the species is sure to occur in the sample. The variance of rarefied richness is: \begin{equation} \label{eq:rarevar} s^2 = q_i (1-q_i) + 2 \sum_{i=1}^S \sum_{j>i} \left[ {N- x_i - x_j \choose n} \Bigm / {N \choose n} - q_i q_j\right] \end{equation} Equation \ref{eq:rarevar} actually is of the same form as the variance of sum of correlated variables: \begin{equation} \VAR \left(\sum x_i \right) = \sum \VAR (x_i) + 2 \sum_{i=1}^S \sum_{j>i} \COV (x_i, x_j) \end{equation} The number of stems per hectare varies in our data set: <<>>= quantile(rowSums(BCI)) @ To express richness for the same number of individuals, we can use: <<>>= Srar <- rarefy(BCI, min(rowSums(BCI))) @ Rarefaction curves often are seen as an objective solution for comparing species richness with different sample sizes. However, rank orders typically differ among different rarefaction sample sizes, rarefaction curves can cross. As an extreme case we may rarefy sample size to two individuals: <<>>= S2 <- rarefy(BCI, 2) @ This will not give equal rank order with the previous rarefaction richness: <<>>= all(rank(Srar) == rank(S2)) @ Moreover, the rarefied richness for two individuals is a finite sample variant of Simpson's diversity index (or, more precisely of $D_1 + 1$), and these two are almost identical in BCI: <<>>= range(diversity(BCI, "simp") - (S2 -1)) @ Rarefaction is sometimes presented as an ecologically meaningful alternative to dubious diversity indices, but the differences really seem to be small. \section{Taxonomic and functional diversity} Simple diversity indices only consider species identity: all different species are equally different. In contrast, taxonomic and functional diversity indices judge the differences of species are. Taxonomic and functional diversities are used in different fields of science, but they really have very similar reasoning, and either could be used either with taxonomic or functional properties of species. \subsection{Taxonomic diversity: average distance of properties} The two basic indices are called taxonomic diversity ($\Delta$) and taxonomic distinctness ($\Delta^*$): \begin{align} \Delta &= \frac{\sum \sum_{i>= data(dune) data(dune.taxon) taxdis <- taxa2dist(dune.taxon, varstep=TRUE) mod <- taxondive(dune, taxdis) @ \begin{SCfigure} <>= plot(mod) @ \caption{Taxonomic diversity $\Delta^+$ for the dune meadow data. The points are diversity values of single sites, and the funnel is their approximate confidence intervals ($2 \times$ standard error).} \label{fig:taxondive} \end{SCfigure} \subsection{Functional diversity: the height of property tree} In taxonomic diversity the primary data were taxonomic trees which were transformed to pairwise distances among species. In functional diversity the primary data are species properties which are translated to pairwise distances among species and then to clustering trees of species properties. The argument for trees is that in this way a single deviant species will have a small influence, since its difference is evaluated only once instead of evaluating its distance to all other species. Function \code{treedive} implements functional diversity defined as the total branch length in a trait dendrogram connecting all species, but excluding the unnecessary root segments of the tree. The example uses the taxonomic distances of the previous chapter. These are first converted to a hierarchic clustering (which actually were their original form before \code{taxa2dist} converted them into distances) <<>>= tr <- hclust(taxdis, "aver") mod <- treedive(dune, tr) @ \section{Species abundance models} Diversity indices may be regarded as variance measures of species abundance distribution. We may wish to inspect abundance distributions more directly. \pkg{Vegan} has functions for Fisher's log-series and Preston's log-normal models, and in addition several models for species abundance distribution. \subsection{Fisher and Preston} In Fisher's log-series, the expected number of species $\hat f$ with $n$ individuals is: \begin{equation} \hat f_n = \frac{\alpha x^n}{n} \end{equation} where $\alpha$ is the diversity parameter, and $x$ is a nuisance parameter defined by $\alpha$ and total number of individuals $N$ in the site, $x = N/(N-\alpha)$. Fisher's log-series for a randomly selected plot is (Fig. \ref{fig:fisher}): <<>>= k <- sample(nrow(BCI), 1) fish <- fisherfit(BCI[k,]) fish @ \begin{SCfigure} <>= plot(fish) @ \caption{Fisher's log-series fitted to one randomly selected site (\Sexpr{k}).} \label{fig:fisher} \end{SCfigure} We already saw $\alpha$ as a diversity index. Now we also obtained estimate of standard error of $\alpha$ (these also are optionally available in \code{fisher.alpha}). The standard errors are based on the second derivatives (curvature) of log-likelihood at the solution of $\alpha$. The distribution of $\alpha$ is often non-normal and skewed, and standard errors are of not much use. However, \code{fisherfit} has a \code{profile} method that can be used to inspect the validity of normal assumptions, and will be used in calculations of confidence intervals from profile deviance: <<>>= confint(fish) @ Preston's log-normal model is the main challenger to Fisher's log-series. Instead of plotting species by frequencies, it bins species into frequency classes of increasing sizes. As a result, upper bins with high range of frequencies become more common, and sometimes the result looks similar to Gaussian distribution truncated at the left. There are two alternative functions for the log-normal model: \code{prestonfit} and \code{prestondistr}. Function \code{prestonfit} uses traditionally binning approach, and is burdened with arbitrary choices of binning limits and treatment of ties. It seems that Preston split ties between adjacent octaves: only half of the species observed once were in the first octave, and half were transferred to the next octave, and the same for all species at the octave limits occuring 2, 4, 8, 16\ldots times. Function \code{prestonfit} can either split the ties or keep all limit cases in the lower octave. Function \code{prestondistr} directly maximizes truncated log-normal likelihood without binning data, and it is the recommended alternative. Log-normal models usually fit poorly to the BCI data, but here our random plot (number \Sexpr{k}): <<>>= prestondistr(BCI[k,]) @ \subsection{Ranked abundance distribution} An alternative approach to species abundance distribution is to plot logarithmic abundances in decreasing order, or against ranks of species. These are known as ranked abundance distribution curves, species abundance curves, dominance--diversity curves or Whittaker plots. Function \code{radfit} fits some of the most popular models using maximum likelihood estimation: \begin{align} \hat a_r &= \frac{N}{S} \sum_{k=r}^S \frac{1}{k} &\text{brokenstick}\\ \hat a_r &= N \alpha (1-\alpha)^{r-1} & \text{preemption} \\ \hat a_r &= \exp \left[\log (\mu) + \log (\sigma) \Phi \right] &\text{log-normal}\\ \hat a_r &= N \hat p_1 r^\gamma &\text{Zipf}\\ \hat a_r &= N c (r + \beta)^\gamma &\text{Zipf--Mandelbrot} \end{align} Where $\hat a_r$ is the expected abundance of species at rank $r$, $S$ is the number of species, $N$ is the number of individuals, $\Phi$ is a standard normal function, $\hat p_1$ is the estimated proportion of the most abundant species, and $\alpha$, $\mu$, $\sigma$, $\gamma$, $\beta$ and $c$ are the estimated parameters in each model. It is customary to define the models for proportions $p_r$ instead of abundances $a_r$, but there is no reason for this, and \code{radfit} is able to work with the original abundance data. We have count data, and the default Poisson error looks appropriate, and our example data set gives (Fig. \ref{fig:rad}): <<>>= rad <- radfit(BCI[k,]) rad @ \begin{SCfigure} <>= print(radlattice(rad)) @ \caption{Ranked abundance distribution models for a random plot (no. \Sexpr{k}). The best model has the lowest \textsc{aic}.} \label{fig:rad} \end{SCfigure} Function \code{radfit} compares the models using alternatively Akaike's or Schwartz's Bayesian information criteria. These are based on log-likelihood, but penalized by the number of estimated parameters. The penalty per parameter is $2$ in \textsc{aic}, and $\log S$ in \textsc{bic}. Brokenstick is regarded as a null model and has no estimated parameters in \pkg{vegan}. Preemption model has one estimated parameter ($\alpha$), log-normal and Zipf models two ($\mu, \sigma$, or $\hat p_1, \gamma$, resp.), and Zipf--Mandelbrot model has three ($c, \beta, \gamma$). Function \code{radfit} also works with data frames, and fits models for each site. It is curious that log-normal model rarely is the choice, although it generally is regarded as the canonical model, in particular in data sets like Barro Colorado tropical forests. \section{Species accumulation and beta diversity} Species accumulation models and species pool models study collections of sites, and their species richness, or try to estimate the number of unseen species. \subsection{Species accumulation models} Species accumulation models are similar to rarefaction: they study the accumulation of species when the number of sites increases. There are several alternative methods, including accumulating sites in the order they happen to be, and repeated accumulation in random order. In addition, there are three analytic models. Rarefaction pools individuals together, and applies rarefaction equation (\ref{eq:rare}) to these individuals. Kindt's exact accumulator resembles rarefaction: \begin{equation} \label{eq:kindt} \hat S_n = \sum_{i=1}^S (1 - p_i), \, \text{where} \quad p_i = {N- f_i \choose n} \Bigm / {N \choose n} \end{equation} where $f_i$ is the frequency of species $i$. Approximate variance estimator is: \begin{equation} \label{eq:kindtvar} s^2 = p_i (1 - p_i) + 2 \sum_{i=1}^S \sum_{j>i} \left( r_{ij} \sqrt{p_i(1-p_i)} \sqrt{p_j (1-p_j)}\right) \end{equation} where $r_{ij}$ is the correlation coefficient between species $i$ and $j$. Both of these are unpublished: eq. \ref{eq:kindt} was developed by Roeland Kindt, and eq. \ref{eq:kindtvar} by Jari Oksanen. The third analytic method was suggested by Coleman: \begin{equation} \label{eq:cole} S_n = \sum_{i=1}^S (1 - p_i), \, \text{where} \quad p_i = \left(1 - \frac{1}{n}\right)^{f_i} \end{equation} and he suggested variance $s^2 = p_i (1-p_i)$ which ignores the covariance component. In addition, eq. \ref{eq:cole} does not properly handle sampling without replacement and underestimates the species accumulation curve. The recommended is Kindt's exact method (Fig. \ref{fig:sac}): <>= sac <- specaccum(BCI) plot(sac, ci.type="polygon", ci.col="yellow") @ \begin{SCfigure} <>= <> @ \caption{Species accumulation curve for the BCI data; exact method.} \label{fig:sac} \end{SCfigure} \subsection{Beta diversity} Whittaker divided diversity into various components. The best known are diversity in one spot that he called alpha diversity, and the diversity along gradients that he called beta diversity. The basic diversity indices are indices of alpha diversity. Beta diversity should be studied with respect to gradients, but almost everybody understand that as a measure of general heterogeneity: how many more species do you have in a collection of sites compared to an average site. The best known index of beta diversity is based on the ratio of total number of species in a collection of sites ($S$) and the average richness per one site ($\bar \alpha$): \begin{equation} \label{eq:beta} \beta = S/\bar \alpha - 1 \end{equation} Subtraction of one means that $\beta = 0$ when there are no excess species or no heterogeneity between sites. For this index, no specific functions are needed, but this index can be easily found with the help of \pkg{vegan} function \code{specnumber}: <<>>= ncol(BCI)/mean(specnumber(BCI)) - 1 @ The index of eq. \ref{eq:beta} is problematic because $S$ increases with the number of sites even when sites are all subsets of the same community. Whittaker noticed this, and suggested the index to be found from pairwise comparison of sites. If the number of shared species in two sites is $a$, and the numbers of species unique to each site are $b$ and $c$, then $\bar \alpha = (2a + b + c)/2$ and $S = a+b+c$, and index \ref{eq:beta} can be expressed as: \begin{equation} \label{eq:betabray} \beta = \frac{a+b+c}{(2a+b+c)/2} - 1 = \frac{b+c}{2a+b+c} \end{equation} This is the S{\o}rensen index of dissimilarity, and it can be found for all sites using \pkg{vegan} function \code{vegdist} with binary data: <<>>= beta <- vegdist(BCI, binary=TRUE) mean(beta) @ There are many other definitions of beta diversity in addition to eq. \ref{eq:beta}. All commonly used indices can be found using \code{betadiver}. The indices in \code{betadiver} can be referred to by subscript name, or index number: <<>>= betadiver(help=TRUE) @ Some of these indices are duplicates, and many of them are well known dissimilarity indices. One of the more interesting indices is based on the Arrhenius species--area model \begin{equation} \label{eq:arrhenius} \hat S = c X^z \end{equation} where $X$ is the area (size) of the patch or site, and $c$ and $z$ are parameters. Parameter $c$ is uninteresting, but $z$ gives the steepness of the species area curve and is a measure of beta diversity. In islands typically $z \approx 0.3$. This kind of islands can be regarded as subsets of the same community, indicating that we really should talk about gradient differences if $z \gtrapprox 0.3$. We can find the value of $z$ for a pair of plots using function \code{betadiver}: <<>>= z <- betadiver(BCI, "z") quantile(z) @ The size $X$ and parameter $c$ cancel out, and the index gives the estimate $z$ for any pair of sites. Function \code{betadisper} can be used to analyse beta diversities with respect to classes or factors. There is no such classification available for the Barro Colorado Island data, and the example studies beta diversities in the management classes of the dune meadows (Fig. \ref{fig:betadisper}): <<>>= data(dune) data(dune.env) z <- betadiver(dune, "z") mod <- with(dune.env, betadisper(z, Management)) mod @ \begin{SCfigure} <>= boxplot(mod) @ \caption{Box plots of beta diversity measured as the average steepness ($z$) of the species area curve in the Arrhenius model $S = cX^z$ in Management classes of dune meadows.} \label{fig:betadisper} \end{SCfigure} \section{Species pool} \subsection{Number of unseen species} Species accumulation models indicate that not all species were seen in any site. These unseen species also belong to the species pool. Functions \code{specpool} and \code{estimateR} implement some methods of estimating the number of unseen species. Function \code{specpool} studies a collection of sites, and \code{estimateR} works with counts of individuals, and can be used with a single site. Both functions assume that the number of unseen species is related to the number of rare species, or species seen only once or twice. Function \code{specpool} implements the following models to estimate the pool size $S_p$: \begin{align} S_p &= S_o + \frac{f_1^2}{2 f_2} & \text{Chao}\\ S_p &= S_o + f_1 \frac{N-1}{N} & \text{1st order Jackknife}\\ S_p & = S_o + f_1 \frac{2N-3}{N} + f_2 \frac{(N-2)^2}{N(N-1)} & \text{2nd order Jackknife}\\ S_p &= S_o + \sum_{i=1}^{S_o} (1-p_i)^N & \text{Bootstrap} \end{align} Here $S_o$ is the observed number of species, $f_1$ and $f_2$ are the numbers of species observed once or twice, $N$ is the number of sites, and $p_i$ are proportions of species. The idea in jackknife seems to be that we missed about as many species as we saw only once, and the idea in bootstrap that if we repeat sampling (with replacement) from the same data, we miss as many species as we missed originally. The variance estimators of Chao is: \begin{equation} s^2 = f_2 \left(\frac{G^4}{4} + G^3 + \frac{G^2}{2} \right), \, \text{where}\quad G = \frac{f_1}{f_2} \end{equation} The variance of the first-order jackknife is based on the number of ``singletons'' $r$ (species occurring only once in the data) in sample plots: \begin{equation} s^2 = \left(\sum_{i=1}^N r_i^2 - \frac{f_1}{N}\right) \frac{N-1}{N} \end{equation} Variance of the second-order jackknife is not evaluated in \code{specpool} (but contributions are welcome). For the variance of bootstrap estimator, it is practical to define a new variable $q_i = (1-p_i)^N$ for each species: \begin{equation} \begin{split} s^2 = \sum_{i=1}^{S_o} q_i (1-q_i) + 2 \sum \sum Z_p , \quad \text{where} \\ Z_p = \dots \end{split} \end{equation} The extrapolated richness values for the whole BCI data are: <<>>= specpool(BCI) @ If the estimation of pool size really works, we should get the same values of estimated richness if we take a random subset of a half of the plots (but this is rarely true): <<>>= s <- sample(nrow(BCI), 25) specpool(BCI[s,]) @ \subsection{Pool size from a single site} The \code{specpool} function needs a collection of sites, but there are some methods that estimate the number of unseen species for each single site. These functions need counts of individuals, and species seen only once or twice, or other rare species, take the place of species with low frequencies. Function \code{estimateR} implements two of these methods: <<>>= estimateR(BCI[k,]) @ Chao's method is similar as above, but uses another, ``unbiased'' equation. \textsc{ace} is based on rare species also: \begin{equation} \begin{split} S_p &= S_\mathrm{abund} + \frac{S_\mathrm{rare}}{C_\mathrm{ACE}} + \frac{a_1}{C_\mathrm{ACE}} \gamma^2 \quad \text{where}\\ C_\mathrm{ACE} &= 1 - \frac{a_1}{N_\mathrm{rare}}\\ \gamma^2 &= \frac{S_\mathrm{rare}}{C_\mathrm{ACE}} \sum_{i=1}^{10} i (i-1) a_1 \frac{N_\mathrm{rare} - 1}{N_\mathrm{rare}} \end{split} \end{equation} Now $a_1$ takes the place of $f_1$ above, and means the number of species with only one individual. Here $S_\mathrm{abund}$ and $S_\mathrm{rare}$ are the numbers of species of abundant and rare species, with an arbitrary upper limit of 10 individuals for a rare species, and $N_\mathrm{rare}$ is the total number of individuals in rare species. The pool size is estimated separately for each site, but if input is a data frame, each site will be analysed. If log-normal abundance model is appropriate, it can be used to estimate the pool size. Log-normal model has a finite number of species which can be found integrating the log-normal: \begin{equation} S_p = S_\mu \sigma \sqrt{2 \pi} \end{equation} where $S_\mu$ is the modal height or the expected number of species at maximum (at $\mu$), and $\sigma$ is the width. Function \code{veiledspec} estimates this integral from a model fitted either with \code{prestondistr} or \code{prestonfit}, and fits the latter if raw site data are given. Log-normal model may fit poorly, but we can try: <<>>= veiledspec(prestondistr(BCI[k,])) veiledspec(BCI[k,]) @ \subsection{Probability of pool membership} Beals smoothing was originally suggested as a tool of regularizing data for ordination. It regularizes data too strongly, but it has been suggested as a method of estimating which of the missing species could occur in a site, or which sites are suitable for a species. The probability for each species at each site is assessed from other species occurring on the site. Function \code{beals} implement Beals smoothing: <<>>= smo <- beals(BCI) @ We may see how the estimated probability of occurrence and observed numbers of stems relate in one of the more familiar species. We study only one species, and to avoid circular reasoning we do not include the target species in the smoothing (Fig. \ref{fig:beals}): <>= j <- which(colnames(BCI) == "Ceiba.pentandra") plot(beals(BCI, species=j, include=FALSE), BCI[,j], main="Ceiba pentandra", xlab="Probability of occurrence", ylab="Occurrence") @ \begin{SCfigure} <>= <> @ \caption{Beals smoothing for \emph{Ceiba pentandra}.} \label{fig:beals} \end{SCfigure} \end{document} vegan/inst/doc/decision-vegan.tex0000644000176200001440000006624312122046437016525 0ustar liggesusers% -*- mode: noweb; noweb-default-code-mode: R-mode; -*- %\VignetteIndexEntry{Design decisions and implementation} \documentclass[article,nojss]{jss} \usepackage{veganjss} % package options and redefinitions \usepackage{amsmath} %\usepackage{ucs} %\usepackage[utf8x]{inputenc} %\usepackage[T1]{fontenc} \usepackage{sidecap} \renewcommand{\floatpagefraction}{0.8} \renewcommand{\cite}{\citep} \author{Jari Oksanen} \title{Design decisions and implementation details in vegan} \Abstract{ This document describes design decisions, and discusses implementation and algorithmic details in some vegan functions. The proper FAQ is another document. } \Keywords{nestdness, matrix temperature, community null models, scaling of PCA and RDA, WA and LC scores} %% hijack Address for version info \Address{$ $Id: decision-vegan.Rnw 1709 2011-08-10 15:48:21Z jarioksa $ $ processed with vegan 2.0-7 in R Under development (unstable) (2013-03-19 r62316) on \today} \Footername{About this version} %% need no \usepackage{Sweave.sty} \begin{document} \setkeys{Gin}{width=0.55\linewidth} \tableofcontents \section{Nestedness and Null models} Some indicators of nestedness and null models of communities are only described in general terms, and they could be implemented in various ways. Here I discuss the implementation in \pkg{vegan}. \subsection{Matrix temperature} The matrix temperature is intuitively simple (Fig. \ref{fig:nestedtemp}), but the the exact calculations were not explained in the original publication \cite{AtmarPat93}. \begin{SCfigure} \includegraphics{decision-vegan-002} \label{fig:nestedtemp} \caption{Matrix temperature for \emph{Falco subbuteo} on Sibbo Svartholmen (dot). The curve is the fill line, and in a cold matrix, all presences (red squares) should be in the upper left corner behind the fill line. Dashed diagonal line of length $D$ goes through the point, and an arrow of length $d$ connects the point to the fill line. The ``surprise'' for this point is $u = (d/D)^2$ and the matrix temperature is based on the sum of surprises: presences outside the fill line or absences within the fill line.} \end{SCfigure} The function can be implemented in many ways following the general principles. \citet{RodGir06} have seen the original code and reveal more details of calculations, and their explanation is the basis of the implementation in \pkg{vegan}. However, there are still some open issues, and probably \pkg{vegan} function \code{nestedtemp} will never exactly reproduce results from other programs, although it is based on the same general principles.\footnote{function \code{nestedness} in the \pkg{bipartite} package is a direct port of the original \proglang{BINMATNEST} program of \citet{RodGir06}.} I try to give main computation details in this document --- all details can be seen in the source code of \code{nestedtemp}. \begin{itemize} \item Species and sites are put into unit square \citep{RodGir06}. The coordinates for $n$ item will be $(k-0.5)/n$ for $k=1 \ldots n$, so that there are no points in the corners or the margins of the unit square, and a diagonal line can be drawn through any point. I do not know how the rows and columns are converted to the unit square in other software, and this may be a considerable source of differences among implementations. \item Species and sites are ordered alternately using indices \citep{RodGir06}: \begin{equation} \begin{split} s_j &= \sum_{i|x_{ij} = 1} i^2 \\ t_j &= \sum_{i|x_{ij} = 0} (n-i+1)^2 \end{split} \end{equation} Here $x$ is the data matrix, where $1$ is presence, and $0$ is absence, $i$ and $j$ are row and column indices, and $n$ is the number of rows. The equations give the indices for columns, but the indices can be reversed for corresponding row indexing. Ordering by $s$ packs presences to the top left corner, and ordering by $t$ pack zeros away from the top left corner. The final sorting should be ``a compromise'' \citep{RodGir06} between these scores, and \pkg{vegan} uses $s+t$. The result should be cool, but the packing does not try to minimize the temperature \citep{RodGir06}. I do not know how the ``compromise'' is defined, and this can cause some differences to other implementations. \item The following function is used to define the fill line: \begin{equation} y = (1-(1-x)^p)^{1/p} \end{equation} This is similar to the equation suggested by \citet[eq. 4]{RodGir06}, but omits all terms dependent on the numbers of species or sites, because I could not understand why they were needed. The differences are visible only in small data sets. The $y$ and $x$ are the coordinates in the unit square, and the parameter $p$ is selected so that the curve covers the same area as is the proportion of presences (Fig. \ref{fig:nestedtemp}). The parameter $p$ is found numerically using \proglang{R} functions \code{integrate} and \code{uniroot}. The fill line used in the original matrix temperature software \citep{AtmarPat93} is supposed to be similar \citep{RodGir06}. Small details in the fill line combined with differences in scores used in the unit square (especially in the corners) can cause large differences in the results. \item A line with slope $-1$ is drawn through the point and the $x$ coordinate of the intersection of this line and the fill line is found using function \code{uniroot}. The difference of this intersection and the row coordinate gives the argument $d$ of matrix temperature (Fig. \ref{fig:nestedtemp}). \item In other software, ``duplicated'' species occurring on every site are removed, as well as empty sites and species after reordering \cite{RodGir06}. This is not done in \pkg{vegan}. \end{itemize} \subsection{Backtracking} Gotelli's and Entsminger's seminal paper \cite{GotelliEnt01} on filling algorithms is somewhat confusing: it explicitly deals with ``knight's tour'' which is quite a different problem than the one we face with null models. The chess piece ``knight''\footnote{``Knight'' is ``Springer'' in German which is very appropriate as Springer was the publisher of the paper on ``knight's tour''} has a history: a piece in a certain position could only have entered from some candidate squares. The filling of incidence matrix has no history: if we know that the item last added was in certain row and column, we have no information to guess which of the filled items was entered previously. A consequence of dealing with a different problem is that \citet{GotelliEnt01} do not give many hints on implementing a fill algorithm as a community null model. The backtracking is implemented in two stages in \pkg{vegan}: filling and backtracking. \begin{enumerate} \item The matrix is filled in the order given by the marginal probabilities. In this way the matrix will look similar to the final matrix at all stages of filling. Equal filling probabilities are not used since that is ineffective and produces strange fill patterns: the rows and columns with one or a couple of presences are filled first, and the process is cornered to columns and rows with many presences. As a consequence, the the process tries harder to fill that corner, and the result is a more tightly packed quadratic fill pattern than with other methods. \item The filling stage stops when no new points can be added without exceeding row or column totals. ``Backtracking'' means removing random points and seeing if this allows adding new points to the plot. No record of history is kept (and there is no reason to keep a record of history), but random points are removed and filled again. The number of removed points increases from one to four points. New configuration is kept if it is at least as good as the previous one, and the number of removed points is reduced back to one if the new configuration is better than the old one. Because there is no record of history, this does not sound like a backtracking, but it still fits the general definition of backtracking: ``try something, and if it fails, try something else'' \citep{Sedgewick90}. \end{enumerate} \section{Scaling in redundancy analysis} This chapter discusses the scaling of scores (results) in redundancy analysis and principal component analysis performed by function \code{rda} in the \pkg{vegan} library. Principal component analysis, and hence redundancy analysis, is a case of singular value decomposition (\textsc{svd}). Functions \code{rda} and \code{prcomp} even use \textsc{svd} internally in their algorithm. In \textsc{svd} a centred data matrix is decomposed into orthogonal components so that $x_{ij} = \sum_k \sigma_k u_{ik} v_{jk}$, where $u_{ik}$ and $v_{jk}$ are orthonormal coefficient matrices and $\sigma_k$ are singular values. Orthonormality means that sums of squared columns is one and their cross-product is zero, or $\sum_i u_{ik}^2 = \sum_j v_{jk}^2 = 1$, and $\sum_i u_{ik} u_{il} = \sum_j v_{jk} v_{jl} = 0$ for $k \neq l$. This is a decomposition, and the original matrix is found exactly from the singular vectors and corresponding singular values, and first two singular components give the rank $=2$ least squares estimate of the original matrix. Principal component analysis is often presented (and performed in legacy software) as an eigenanalysis of covariance matrices. Instead of a data matrix, we analyse a matrix of covariances and variances $\mathbf{S}$. The result are orthonormal coefficient matrix $\mathbf{U}$ and eigenvalues $\mathbf{\Lambda}$. The coefficients $u_{ik}$ ares identical to \textsc{svd} (except for possible sign changes), and eigenvalues $\lambda_k$ are related to the corresponding singular values by $\lambda_k = \sigma_k^2 /(n-1)$. With classical definitions, the sum of all eigenvalues equals the sum of variances of species, or $\sum_k \lambda_k = \sum_j s_j^2$, and it is often said that first axes explain a certain proportion of total variance in the data. The orthonormal matrix $\mathbf{V}$ of \textsc{svd} can be found indirectly as well, so that we have the same components in both methods. The coefficients $u_{ik}$ and $v_{jk}$ are scaled similarly for all axes $k$. Singular values $\sigma_k$ or eigenvalues $\lambda_k$ give the information of the importance of axes, or the `axis lengths.' Instead of the orthonormal coefficients, or equal length axes, it is customary to scale species (column) or site (row) scores or both by eigenvalues to display the importance of axes and to describe the true configuration of points. Table \ref{tab:scales} shows some alternative scalings. These alternatives apply to principal components analysis in all cases, and in redundancy analysis, they apply to species scores and constraints or linear combination scores; weighted averaging scores have somewhat wider dispersion. \begin{table} \caption{\label{tab:scales} Alternative scalings for \textsc{rda} used in the functions \code{prcomp} and \code{princomp}, and the one used in the \pkg{vegan} function \code{rda} and the proprietary software \proglang{Canoco} scores in terms of orthonormal species ($u_{ik}$) and site scores ($v_{jk}$), eigenvalues ($\lambda_k$), number of sites ($n$) and species standard deviations ($s_j$). In \code{rda}, $\mathrm{const} = \sqrt[4]{(n-1) \sum \lambda_k}$. Corresponding negative scaling in \pkg{vegan} % and corresponding positive scaling in \texttt{Canoco 3} is derived dividing each species by its standard deviation $s_j$ (possibly with some additional constant multiplier). } \begin{tabular}{lcc} & \textbf{Site scores} $u_{ik}^*$ & \textbf{Species scores} $v_{jk}^*$ \\ \code{prcomp, princomp} & $u_{ik} \sqrt{n-1} \sqrt{\lambda_k}$ & $v_{jk}$ \\ \code{rda, scaling=1} & $u_{ik} \sqrt{\lambda_k/ \sum \lambda_k} \times \mathrm{const}$ & $v_{jk} \times \mathrm{const}$ \\ \code{rda, scaling=2} & $u_{ik} \times \mathrm{const}$ & $v_{jk} \sqrt{\lambda_k/ \sum \lambda_k} \times \mathrm{const}$ \\ \code{rda, scaling=3} & $u_{ik} \sqrt[4]{\lambda_k/ \sum \lambda_k} \times \mathrm{const}$ & $v_{jk} \sqrt[4]{\lambda_k/ \sum \lambda_k} \times \mathrm{const}$ \\ \code{rda, scaling < 0} & $u_{ik}^*$ & $\sqrt{\sum \lambda_k /(n-1)} s_j^{-1} v_{jk}^*$ % \\ % \code{Canoco 3, scaling=-1} & % $u_{ik} \sqrt{n-1} \sqrt{\lambda_k / \sum \lambda_k}$ & % $v_{jk} \sqrt{n}$ \\ % \code{Canoco 3, scaling=-2} & % $u_{ik} \sqrt{n-1}$ & % $v_{jk} \sqrt{n} \sqrt{\lambda_k / \sum \lambda_k}$ % \\ % \code{Canoco 3, scaling=-3} & % $u_{ik} \sqrt{n-1} \sqrt[4]{\lambda_k / \sum \lambda_k}$ & % $v_{jk} \sqrt{n} \sqrt[4]{\lambda_k / \sum \lambda_k}$ \end{tabular} \end{table} In community ecology, it is common to plot both species and sites in the same graph. If this graph is a graphical display of \textsc{svd}, or a graphical, low-dimensional approximation of the data, the graph is called a biplot. The graph is a biplot if the transformed scores satisfy $x_{ij} = c \sum_k u_{ij}^* v_{jk}^*$ where $c$ is a scaling constant. In functions \code{princomp}, \code{prcomp} and \code{rda}, $c=1$ and the plotted scores are a biplot so that the singular values (or eigenvalues) are expressed for sites, and species are left unscaled. % For \texttt{Canoco 3} $c = n^{-1} \sqrt{n-1} % \sqrt{\sum \lambda_k}$ with negative \proglang{Canoco} scaling % values. All these $c$ are constants for a matrix, so these are all % biplots with different internal scaling of species and site scores % with respect to each other. For \proglang{Canoco} with positive scaling % values and \pkg{vegan} with negative scaling values, no constant % $c$ can be found, but the correction is dependent on species standard % deviations $s_j$, and these scores do not define a biplot. There is no natural way of scaling species and site scores to each other. The eigenvalues in redundancy and principal components analysis are scale-dependent and change when the data are multiplied by a constant. If we have percent cover data, the eigenvalues are typically very high, and the scores scaled by eigenvalues will have much wider dispersion than the orthonormal set. If we express the percentages as proportions, and divide the matrix by $100$, the eigenvalues will be reduced by factor $100^2$, and the scores scaled by eigenvalues will have a narrower dispersion. For graphical biplots we should be able to fix the relations of row and column scores to be invariant against scaling of data. The solution in \proglang{R} standard function \code{biplot} is to scale site and species scores independently, and typically very differently, but plot each independently to fill the graph area. The solution in \proglang{Canoco} and \code{rda} is to use proportional eigenvalues $\lambda_k / \sum \lambda_k$ instead of original eigenvalues. These proportions are invariant with scale changes, and typically they have a nice range for plotting two data sets in the same graph. The \textbf{vegan} package uses a scaling constant $c = \sqrt[4]{(n-1) \sum \lambda_k}$ in order to be able to use scaling by proportional eigenvalues (like in \proglang{Canoco}) and still be able to have a biplot scaling. Because of this, the scaling of \code{rda} scores is non-standard. However, the \code{scores} function lets you to set the scaling constant to any desired values. It is also possible to have two separate scaling constants: the first for the species, and the second for sites and friends, and this allows getting scores of other software or \proglang{R} functions (Table \ref{tab:rdaconst}). \begin{table} \caption{\label{tab:rdaconst} Values of the \code{const} argument in \textbf{vegan} to get the scores that are equal to those from other functions and software. Number of sites (rows) is $n$, the number of species (columns) is $m$, and the sum of all eigenvalues is $\sum_k \lambda_k$ (this is saved as the item \code{tot.chi} in the \code{rda} result)}. \begin{tabular}{lccc} & \textbf{Scaling} &\textbf{Species constant} & \textbf{Site constant} \\ \pkg{vegan} & any & $\sqrt[4]{(n-1) \sum \lambda_k}$ & $\sqrt[4]{(n-1) \sum \lambda_k}$\\ \code{prcomp}, \code{princomp} & \code{1} & $1$ & $\sqrt{(n-1) \sum_k \lambda_k}$\\ \proglang{Canoco\,v3} & \code{-1, -2, -3} & $\sqrt{n-1}$ & $\sqrt{n}$\\ \proglang{Canoco\,v4} & \code{-1, -2, -3} & $\sqrt{m}$ & $\sqrt{n}$ \end{tabular} \end{table} In this chapter, I used always centred data matrices. In principle \textsc{svd} could be done with original, non-centred data, but there is no option for this in \code{rda}, because I think that non-centred analysis is dubious and I do not want to encourage its use (if you think you need it, you are certainly so good in programming that you can change that one line in \code{rda.default}). I do think that the arguments for non-centred analysis are often twisted, and the method is not very good for its intended purpose, but there are better methods for finding fuzzy classes. Normal, centred analysis moves the origin to the average of all species, and the dimensions describe differences from this average. Non-centred analysis leaves the origin in the empty site with no species, and the first axis usually runs from the empty site to the average site. Second and third non-centred components are often very similar to first and second (etc.) centred components, and the best way to use non-centred analysis is to discard the first component and use only the rest. This is better done with directly centred analysis. \section{Weighted average and linear combination scores} Constrained ordination methods such as Constrained Correspondence Analysis (CCA) and Redundancy Analysis (RDA) produce two kind of site scores \cite{Braak86, Palmer93}: \begin{itemize} \item LC or Linear Combination Scores which are linear combinations of constraining variables. \item WA or Weighted Averages Scores which are such weighted averages of species scores that are as similar to LC scores as possible. \end{itemize} Many computer programs for constrained ordinations give only or primarily LC scores, following Mike Palmer's recommendation \cite{Palmer93}. However, functions \code{cca} and \code{rda} in the \pkg{vegan} package use primarily WA scores. This chapter explains the reasons for this choice. Briefly, the main reasons are that \begin{itemize} \item LC scores \emph{are} linear combinations, so they give us only the (scaled) environmental variables. This means that they are independent of vegetation and cannot be found from the species composition. Moreover, identical combinations of environmental variables give identical LC scores irrespective of vegetation. \item Bruce McCune has demonstrated that noisy environmental variables result in deteriorated LC scores whereas WA scores tolerate some errors in environmental variables \cite{McCune97}. All environmental measurements contain some errors, and therefore it is safer to use WA scores. \end{itemize} This article studies mainly the first point. The users of \pkg{vegan} have a choice of either LC or WA (default) scores, but after reading this article, I believe that most of them do not want to use LC scores, because they are not what they were looking for in ordination. \subsection{LC Scores are Linear Combinations} Let us perform a simple CCA analysis using only two environmental variables so that we can see the constrained solution completely in two dimensions: \begin{Schunk} \begin{Sinput} R> library(vegan) R> data(varespec) R> data(varechem) R> orig <- cca(varespec ~ Al + K, varechem) \end{Sinput} \end{Schunk} Function \code{cca} in \pkg{vegan} uses WA scores as default. So we must specifically ask for LC scores (Fig. \ref{fig:ccalc}). \begin{Schunk} \begin{Sinput} R> plot(orig, dis=c("lc","bp")) \end{Sinput} \end{Schunk} \begin{SCfigure} \includegraphics{decision-vegan-005} \caption{LC scores in CCA of the original data.} \label{fig:ccalc} \end{SCfigure} What would happen to linear combinations of LC scores if we shuffle the ordering of sites in species data? Function \code{sample()} below shuffles the indices. \begin{Schunk} \begin{Sinput} R> i <- sample(nrow(varespec)) R> shuff <- cca(varespec[i,] ~ Al + K, varechem) \end{Sinput} \end{Schunk} \begin{SCfigure} \includegraphics{decision-vegan-007} \caption{LC scores of shuffled species data.} \label{fig:ccashuff} \end{SCfigure} It seems that site scores are fairly similar, but oriented differently (Fig. \ref{fig:ccashuff}). We can use Procrustes rotation to see how similar the site scores indeed are (Fig. \ref{fig:ccaproc}). \begin{Schunk} \begin{Sinput} R> plot(procrustes(scores(orig, dis="lc"), scores(shuff, dis="lc"))) \end{Sinput} \end{Schunk} \begin{SCfigure} \includegraphics{decision-vegan-009} \caption{Procrustes rotation of LC scores from CCA of original and shuffled data.} \label{fig:ccaproc} \end{SCfigure} There is a small difference, but this will disappear if we use Redundancy Analysis (RDA) instead of CCA (Fig. \ref{fig:rdaproc}). Here we use a new shuffling as well. \begin{Schunk} \begin{Sinput} R> tmp1 <- rda(varespec ~ Al + K, varechem) R> i <- sample(nrow(varespec)) # Different shuffling R> tmp2 <- rda(varespec[i,] ~ Al + K, varechem) \end{Sinput} \end{Schunk} \begin{SCfigure} \includegraphics{decision-vegan-011} \caption{Procrustes rotation of LC scores in RDA of the original and shuffled data.} \label{fig:rdaproc} \end{SCfigure} LC scores indeed are linear combinations of constraints (environmental variables) and \emph{independent of species data}: You can shuffle your species data, or change the data completely, but the LC scores will be unchanged in RDA. In CCA the LC scores are \emph{weighted} linear combinations with site totals of species data as weights. Shuffling species data in CCA changes the weights, and this can cause changes in LC scores. The magnitude of changes depends on the variability of site totals. The original data and shuffled data differ in their goodness of fit\footnote{Or probably differ: The randomization is done while generating this article, and different versions may have different randomizations.}. \begin{Schunk} \begin{Sinput} R> orig \end{Sinput} \begin{Soutput} Call: cca(formula = varespec ~ Al + K, data = varechem) Inertia Proportion Rank Total 2.0832 1.0000 Constrained 0.4760 0.2285 2 Unconstrained 1.6072 0.7715 21 Inertia is mean squared contingency coefficient Eigenvalues for constrained axes: CCA1 CCA2 0.3608 0.1152 Eigenvalues for unconstrained axes: CA1 CA2 CA3 CA4 CA5 CA6 CA7 CA8 0.37476 0.24036 0.19696 0.17818 0.15209 0.11840 0.08364 0.07567 (Showed only 8 of all 21 unconstrained eigenvalues) \end{Soutput} \begin{Sinput} R> shuff \end{Sinput} \begin{Soutput} Call: cca(formula = varespec[i, ] ~ Al + K, data = varechem) Inertia Proportion Rank Total 2.08320 1.00000 Constrained 0.15677 0.07525 2 Unconstrained 1.92643 0.92475 21 Inertia is mean squared contingency coefficient Eigenvalues for constrained axes: CCA1 CCA2 0.09762 0.05915 Eigenvalues for unconstrained axes: CA1 CA2 CA3 CA4 CA5 CA6 CA7 CA8 0.48818 0.28764 0.22823 0.19523 0.17686 0.11253 0.10810 0.08657 (Showed only 8 of all 21 unconstrained eigenvalues) \end{Soutput} \end{Schunk} Similarly their WA scores will be (probably) very different (Fig. \ref{fig:ccawa}). \begin{SCfigure} \includegraphics{decision-vegan-013} \caption{Procrustes rotation of WA scores of CCA with the original and shuffled data.} \label{fig:ccawa} \end{SCfigure} The example used only two environmental variables so that we can easily plot all constrained axes. With a larger number of environmental variables the full configuration remains similarly unchanged, but its orientation may change, so that two-dimensional projections look different. In the full space, the differences should remain within numerical accuracy: \begin{Schunk} \begin{Sinput} R> tmp1 <- rda(varespec ~ ., varechem) R> tmp2 <- rda(varespec[i,] ~ ., varechem) R> proc <- procrustes(scores(tmp1, dis="lc", choi=1:14), scores(tmp2, dis="lc", choi=1:14)) R> max(residuals(proc)) \end{Sinput} \begin{Soutput} [1] 3.115295e-14 \end{Soutput} \end{Schunk} In \code{cca} the difference would be somewhat larger than now observed 3.1153e-14 because site weights used for environmental variables are shuffled with the species data. \subsection{Factor constraints} It seems that users often get confused when they perform constrained analysis using only one factor (class variable) as constraint. The following example uses the classical dune meadow data \cite{Jongman87}: \begin{Schunk} \begin{Sinput} R> data(dune) R> data(dune.env) R> summary(dune.env) \end{Sinput} \begin{Soutput} A1 Moisture Management Use Manure Min. : 2.800 1:7 BF:3 Hayfield:7 0:6 1st Qu.: 3.500 2:4 HF:5 Haypastu:8 1:3 Median : 4.200 4:2 NM:6 Pasture :5 2:4 Mean : 4.850 5:7 SF:6 3:4 3rd Qu.: 5.725 4:3 Max. :11.500 \end{Soutput} \begin{Sinput} R> orig <- cca(dune ~ Moisture, dune.env) \end{Sinput} \end{Schunk} When the results are plotted using LC scores, sample plots fall only in four alternative positions (Fig. \ref{fig:factorlc}). \begin{SCfigure} \includegraphics{decision-vegan-016} \caption{LC scores of the dune meadow data using only one factor as a constraint.} \label{fig:factorlc} \end{SCfigure} In the previous chapter we saw that this happens because LC scores \emph{are} the environmental variables, and they can be distinct only if the environmental variables are distinct. However, normally the user would like to see how well the environmental variables separate the vegetation, or inversely, how we could use the vegetation to discriminate the environmental conditions. For this purpose we should plot WA scores, or LC scores and WA scores together: The LC scores show where the site \emph{should} be, the WA scores shows where the site \emph{is}. Function \code{ordispider} adds line segments to connect each WA score with the corresponding LC (Fig. \ref{fig:walcspider}). \begin{Schunk} \begin{Sinput} R> plot(orig, display="wa", type="points") R> ordispider(orig, col="red") R> text(orig, dis="cn", col="blue") \end{Sinput} \end{Schunk} \begin{SCfigure} \includegraphics{decision-vegan-018} \caption{A ``spider plot'' connecting WA scores to corresponding LC scores. The shorter the web segments, the better the ordination.} \label{fig:walcspider} \end{SCfigure} This is the standard way of displaying results of discriminant analysis, too. Moisture classes \code{1} and \code{2} seem to be overlapping, and cannot be completely separated by their vegetation. Other classes are more distinct, but there seems to be a clear arc effect or a ``horseshoe'' despite using CCA. \subsection{Conclusion} LC scores are only the (weighted and scaled) constraints and independent of vegetation. If you plot them, you plot only your environmental variables. WA scores are based on vegetation data but are constrained to be as similar to the LC scores as only possible. Therefore \pkg{vegan} calls LC scores as \code{constraints} and WA scores as \code{site scores}, and uses primarily WA scores in plotting. However, the user makes the ultimate choice, since both scores are available. \bibliography{vegan} \end{document} vegan/inst/doc/decision-vegan.pdf0000644000176200001440000104560512122046454016475 0ustar liggesusers%PDF-1.5 %ÐÔÅØ 54 0 obj << /Length 1991 /Filter /FlateDecode >> stream xÚÝXKsÓH¾ûWè(W¡A3£Ñco!Xv¤ŠËA‘£Â’³–=ìoß~,'Nb[µP©XR«§Õóõ{â`ÄÁËI,×gg“§'.t¦ŒvIpvèØ(—åAf´ÒIœÍ‚OáózªÃ¾Ÿy7læÂRª¦‡_$/»éIXÂC7cž¦…‡Ër¶u7µ:\Ã-r¬yÍHÔºI ÔtÓÏg¯A³DeΨSèŒÕ¹šZÖsFŒ¼ àqÀ Ûˆ´QiD ^R^ö¹W Ëÿî¿â®HDíåL^œMþšh@ĹR+À"¨ÚɧÏq0úë V¶Èƒkâjƒ$AþEp:y? »ƒp…*R“¢f&+”+² s•ÄðÑ9ª‚8¬pWÕšt¹-ìéI>i—*›Ã¦$èì‹àˆ0Æq8[N#“…P6-ï×@,ŠpÏu_1*:<j YI/QÚœØÙæÞÀ~p÷¹Ó°D£½§ïáâ¾Þê"þ€rñ\ÂäìøÓ?[‰rgrÜóåJ6µÆÝEä‘NT‘€…Ùè¼û™*X þ!nE>%:XKR:fè—¤Ó¯P—z^Ê»‹ ñ°õÈÃu¨¦Q’X@¹f¾KÔlyÉÀ­˜v2ÕÚ„GˆóûíG{~YvK”ˆûðü´Xi#¡"¸(öì4ƒ¨TE\h2»`Í,\ÊyÛ¿Ñ>txÿ×–¡=¯ÍÇK“T%}•VýÜÿç÷kB\â Ç>A…LØ’iþo@qéE=lZì·Á»ZÖ¡ý—m‹x$›5n놥ÐñÍb„4l2ÚBü ¡.yYnŽÜy¸¼`1ï€v|Ä4ï6Hÿðå=aO‘mGÚ*ç3ÚG1Ù‡œMñæ˜ ôUòºº÷v¸“œÕÊwhfrm¢l’R’2)Ds‘I–ª<‘ävÌ¡%ÙRò¦XÉØtžÓúÈ:•¦²^O£Â¸ðw¯üºž‰èý0·Û Ë ±z[à3ÚÂJàÐádÊ«yào?¼œŸ"“hàÖ;ë–ãiHT˜¡ÎX'N«ˆe¡àØð-y‘óol Úÿ]?C‡„ð+Ò”ÂrÎöâ gÜ!î½Àù¶[î±€¶`p½·dÀ£žP7‚ú³²Â8ùêc3ªŠ¸ Ä[ž$?3Àpn{OÙ¾·&WyaØ0†Ãö”ó݌Ȧã+e¤™E0Åquïé’å/ÒÅ®)´ “µÑeÆšYÖìã´€0læT½|tJ)1I]áæïU9—Âz+ÑP§LT®˜R-±”àÂsÿ®äæPê4ðôÄ$ÉøÁÝhÈDi˜~o&²ãLäKÀé¸pé^IÑÓøRIÛæch% νÙÊõN_¬õ‡zûm ïË8vœqN¦yBí-@#íOÅ}䃚m“JÕª(²Ÿ%«<Îrø9`¯ã‡Á»¶ð éjá{s?„…û2ç&ì@ô¡Öê{ýnW$ÊY˜]m¡²¬ 0}mÔŸa‚ì†æ &âñMÍuf0´¶<*@ºœm;³[¢’7t…ƪ"“Éè”rL`Ð*7ôûMå“e:ü¼+¨»F¶¡g\û²ãçzÍ]3ñšy$´ÃD³íçwEïŸØ%k/%UþŽ«= “iåÆsúX-•†wH×yíµ^A]Äi ÞÖ<ˆA’©Çêí(auB _jù8Rº†ãcùÐÞÒeâDÅz(GßY»"—šð•Ĉ$«!#"f¹ÞBµ’½ = ezH(Ú„Æ=î[JÍ®^&ýº²·ß|q6ù Ë endstream endobj 76 0 obj << /Length 3203 /Filter /FlateDecode >> stream xÚÍZ[ÛÆ~ß_!ô‰B¬ñÜ8$ ø¡Aâ4Ò"ñ>HòÀ•(YñJÜHÚlýí=—¹‘š¶…±»äÌáÌœûwÎX.v ¹øêæóÛ›—oÚ…’¢“ZÜn­Z4u#:S/n7‹ï+½üñö¯/߸.'êZáT +ÉKU gøµ‡ŸÝq¹2ÆT\ã`˜gœÒUÜðŽà×ý€Oøë¸ÔMu‡þ?ˤ½‡Ÿ3Oìé3Zð—¥n«a×ñÐ7Ò3þÎ8]y.VJJÑJÃ̼ |<žpéWË•…¥¿ g:á쯰Ÿ’tÐá¿–+872p"¢G|ÂI¤SÕù8yI6ù!”3¢Õ*ˆòͲiª™[/k]ø Э”µí˜ôì·¹ó?t˜øÕŒY넪]ØeZ«¶z» àùGíª·0ð˲vUÂ5ßááïIAþ³d-á}3â4¼(ø#ø¨~ŸÉIoß±$\-«5I†õÄ#{Ö$>Òn~ø©,êù^mWݳ–aËU£;0"<_âÈD=AòîÞ~×tt48§«ÃL‰ªz‹üž‰‚îPÂn³Î<å§YZŽþ3ʾgeÃ+‰#;FT‰¹¿‡/-¨éÎÛ ½x#¶µ©‚Ì~}|ðöåªáÄÄä.Û ¿¬É¶H4§éªZ•N‚kï½ô´÷6”:>£Ô½(ðõ>––-¹zO¬ þktË}¿‘ªÏ?C†üªã¶tŽû ÞsLF VžY­ÑÂê&Å™k»VZDçÙÌ8(Kgr<‘àw念¿²ãŽ,~0Ê Û„vÉÂŒ# ˜·5hÂéþ4bàz›¨-òK?æ²ÑƒMÃvŠ"X“œI#ë‹°QÆ”©ko-)Ô0 3ë>¢´B_7q”\0ÎDÿóÆÆŸiÝ}eµŒ®­ ØŽ2ößÃÉSŸ‘úOHц0H«…íög~¿>sÁd8VĨ”hœ Rz,ŠÎDA¿Fsöþ\Z®*å·Íë’åi)¬‹Š nÿò ˆÒg#9ì m͈®î&ét¦aÕ@Ę̀‚éY™ÜŸçñ OB1B¯_5F˜nn«19¡©tMˆ¾¦sÕ]q &(ív.nϤ݃Ÿßò_JC¤ñp,ÒøùUI¼³§9®9Ê®4Ø…F2i\c3ðhn”¦Í“‚6yxòkœøo7ߢp–§½ßÐÇC‘[£óXˆ¯3óÏÆ—·7„äB-tÓ [ØÌ£iëÃÍÏ7¢vÊ:¢Èi*|ç^~}P‹/Æ›oáß¾ÒUØc•mRr¶nEçÚ©MiØ;G”R‡|}ðV9qç„îbpõ)bÇÂÙnÜ«n1:ú#eÎ ÅÑGfŠJ´€À¾:ç˰¹ -_o˜´­£K>íSlB†Èøˆ'ÑÕ€Ù½§ý™C%ãcî)ðcöz\ûÈ ë°q>úB„…‰-}sà—Ñ› †:–'eïwªƒèQÏo‡ß÷‡3â3eDV¸&'†MÛè˜ðHz:“cÂ9¦¸~z¦õžÛ pNơ螤–½wXBç`ÍðOÔ‹Ón¿CÐ< hºUµ“¦&¾pveÛN‚Û×|à‹Ï;#Ïìö@"âÜ¡^Ö#• !\ô—d^à$‚f†”?^9$X°O³›h%Zý@ hðO¦é³±‘öq€g½-îáËyÒÞY“ÇŸó’éz`Âu²[OÃÈjîVÆB½ÐêOó+@46ú•˜ëRO*&Ój!!‹‚Ñ ÕZŸú´’1¶‰¡áí¤Z"CÄ€Ù8e=]…¢ñ’ÏûŠ Ÿ¸âg•CÝ8ò<ŠîèÝ i¦£rNÃ4÷?c÷‹ïUõÝHIuû*DDÚ,M‹YHKª‘ƒßV_ù£žØuË”¶Ñ\æ6|’·}šý¡0©ŸU¬å#ÑJZJ7¡öðCªŸ€ÏÀm3ëO›ÌúK(\˜(¯T§˜¨«!D“*§b,º;ðºO¸a“­$opádÏÁ0§ESÇ=ß{;ÁÏêë¤,¬i"6,nT [GŠW¥ôf·©Ø›‰H¸."Â×%©ZH7I“ea+(£“0ß™’)s¾Fµ¶UñPªMÛ$æVÊ5üÇ…·ÒIµ²‹2Á’¨Sä•#ëŒ"Xi3æ¢S2·>{>¦ïÎNpö‘»[{÷©*V Ãóz<…*èä=¬æÊbNÉF åȶY(³g£–“º¸·ÀeŒO@Þó"òÝTýâX^ýÒi{ÏB´yú’’3Ç<Õk °žâÜ~¹.™¸.³šr,PlFþ{/üð~”á«UÝ1 ÉÞs`¯§8}gØð”{ÊGŸðpšJ œæ`P™þÛî¯÷{ôGÜ+À,އd`£™Ì¡œÇ-m {>!I£ZeÇ#€}ØLÇ‹_’ê`»žÇ¸çr%¢-‚ÓCØšø:íÁ !üB‰a†PÅr)û­¾{® æ¶)ØgÛ¦²{&ŸûÔ E”Ïõÿ0›Ö¤‚žÏy.§ÉÐmmEÞE8øOú€À‡à윫š’Ç€Ž;ðm-\g{}j¦çr“½.${\ð7¬®)߇dßeɾÀwžì‹Í¸?Œ>‡`•WÅPa´ÃÊQÈÆ†þ1Sê Ý×”uVñcªŸ ©¡¨2¢×~©fÖC1†Žaœßò…-WµhÍ å‚}3Y×hcºû©°V’ñþê pÔ5ãVLã°(ZyKßÿTèØ8¨ÐDõºœU5°ß-@•M7=öd5˜†ª ¶´“þÏt±U B0 xÓ-Û®™„*Ê~’zôÿ£zÌÇÔãþõÈr³ïKrí<‡1±C§g°v 1[Ø\_CÌ™=ÐcB¿×gD—Dô6Æu¥žij)œt»™riA)Pù9FÎ¥Jë‚Iuh%¾m…µ “ýŵ#"L­fšjg½V›\-d̦MÀ«HJÁºç‰CŠ}j[¾À[$S=åˆÑ|¥?û3/ñ0¿„ñßq%ÿtù æ¿E¡’i‹%]¡Êãe™ç¥• >iÕÌìç†hLDÑ}Æl‚U^OÎÖ³vmH%]í/²<Ú¢‘ÐÍ!Ê q’¿sdgÖÚü^‡ÎãÔL¿¸_j[܆‡»x=…tܶñN„pÈÊ™t]€TCDr—„WxjÚšì<çzH_¥j …ÕD;«&&„ϨׄËSxÖÓ‹]Âuhéø‹6Ç´†/c—ô{é@·ÅÒÄÄ»ºxWèüq“ÿTºO2‰åÁßZ21µ¨øwï[AåKÝá>”,a¬ËWO©} ~*žê}ÉÏ4ôž3h=dÃÜ!üº M3½Ê¤{8¼cÊA:CÅ!ïeîB'´^ŒhJ´Éß/E7¦+1JÇüN3dΊÁR"šŒï„ýáÈo°XÚv¢‘æê¶Ä`fb0±¼%.AÇUÑq¬¿— ÖÍ=“ŸÇP\Å#•¿oö—ßH—’/ëz¦\‡Ø?äWvD÷1ì\}—š’ÿuŸÌÿçNÆ:£OUÎoœ÷7›^¥ìzZ»ÐkÒBI•î2qÇ⥧FìW=íZ§ÖÏgÏ\œºÔb»[_]ò 4Ç:7ÇúêÊ„e3ýß0båìÞ,Ý€¡È@Nê”õáæûåbã` ºvñDT€­Žn5åâ~ñöæ[¾÷Ò2’°©Bë µŽÇXVafwˆwøáÿý1޼‰mCçaÜiL˜•>5Nt) p{~ŸK»´€Ÿc{¯­²–ô…œ¦b}Éiÿú”)/Caªv“FŒ@}ú~Y7ô¶ó:³–!–5„ÏljGœ†µW! úÿæÆç-O^Þ¥ÅÆwá:¶'c CB½’©œ6™öç@öõßà×7^¶®ºÅÇ/ÑÑo :¨ Ú6çð4ú=O=_K‡Ãl/`!T·ÔüˆwR!ˆµ±`}t’2Æ1ò.[Hì,Ë  7x}» C¾ãÕüÈißÏ‚}ð M _Kÿ3l*] \]$gî÷o*ÏJ€ endstream endobj 47 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpAlTV3K/Rbuild34677effd016/vegan/inst/doc/decision-vegan-002.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 95 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F1 96 0 R>> /ExtGState << >>/ColorSpace << /sRGB 97 0 R >>>> /Length 3762 /Filter /FlateDecode >> stream xœAäH…ïõ+êãŒH»ÒW !;Äiê öÀßÇvD®–|“uØ™É}ílûK—óÅëêòüݳ<¿{þëñÇøï¹ËZóOß^K±þ׿ÿþüóóŸ_|ÿ§ßþòùí÷²¬ëú\ôç÷ßþóñãú³¬>˱´zÿ#µW[ZÚÑ–— ­”¶l»½-uUâÖSÓ)ç|V5Ÿr¼–CMÈÊky© ™¿–]MÈÎ3ZÕ„ìõZLMÈŽûZŒE/ûr¨ ¹ïKSòm_v5!íKUòc_üË íûRšÀ Àéø-À‰Š1cÔ¢bŒ C€Dx¥8Æ §0†§0F1DbŠcS£˜âÅÇ(Ò·-¥o[`›âÛÇØ¦8Æv<ù—_¯%˜:÷¨ÃÚÛÐÐñä 4»)l³dŒmŠc@i [š‚€9Å1Ì8…1â)ŽQÀœâÛÇØ¦8Æ6ÅlÛºÔ×¶Q1Æ6´1¶¡Ma›%clS$@ÇSÇûª˜Â ¶Q"°Mq (Ma Û,c‹G¡ûõø(x¿E€Ÿâ|œÂx9¤8µÎëRÄrmæá#*Är¸µ¹å%b9„8µ¢dj9DÉÔr¸KÔrqj9DÉÔrˆ’ñrHq ~ˆñÌ!ŽaNQ`â ¶G]^›À6´l£bæ™9*¦ž™³d sŠ3Y2†9Ål£dêá#Kfq”1Ì)ޱMqŒmˆÛÇØ¦8Æ6Å1¶)Î`[Ö²´cêé#KgqÁsˆ ÝTgœ{Í ¼½ffÇ×kjq¤ZGa*ÝŽÕ,èñDÍbf?™5SÊ^3^|œ™—^3^K][Lથ(–Í ¾ZŠr³ÖU±VòÖÔi#Ë-U…÷J¦[WÈ+Ùn]p®d¼uU·’õÖU™o¢Bž\!û­ÓVÐT+äŸ ʼ­Ök¦€+d¬áqæî²…l8>ÎÌ£p¯ —y×.kæî²…|»® è 9w]‚ÞÈ»3°éRÐu†žœ¡ýfä´‰SnhÀÙ¼×Ök²6ï¶õšߢ×dl8œ…‚ÓÈžëª€Óæ ºâëRwgˆÎi÷Å·%S®D¯ §*@NU€œª@6Ô¹»lÖLÝe³F€œª@6ÕW-k¦lµ^#Muêù4kÈ8 ·ƒ·–¢|´²NžYWœèù¼–5 YŸ7Ãz‚“Œ¯®ÎÁI†ÎQÂIFÏbN´Õ*8h) 8+¹e±JXWœ•ü®® 8+z[m¬JŽ•¸\•Œ,q¹*ù[xg%ß««ÃJÎWW§ÞÖ7²¾62¹6²³6´³6´³64®6´¨64£6´64˜64˜¶7¬¤ ­¤íÿ›Fâb¢i$f¡€ÛÐÚÞ°‡.Ô\w‹ ¸[TÀÝ¢.T\¨ ¸Pp¡*ànUª.Ô©;\ÖLÝá²Fax«s—¬¦Jo´bŽøF«f1'FÁ0õ…¯7²\Ã\8}2ǹ0¹U0ºU0»U0¼U0½U8¾ÅI- eLeŒeá›ãZ”Ì*Í*œÍâ'®0\U8]ÅA*ÌL‰SþQ*qÊp¦ÂY̽Ucôª`öŠg1µá¤V#˧‘åÓÈòihî4´qÚ8 mœ†6N{ÃÆioØ8 mœ†6ÎbÊ,ohî4´qÚ8 ›†ÖL»O¤.βîp·( Uª.T\¨ ¸[UÀ¥:u7Ìš©»aÖÌ5sÀÝ5¸Pp¡*àBUÀ…*€£ÀRÁĆ“8‡„‘£Â™#ŒÎq”ˆSC˜`nH`‚q¢‚y¢‚"œ£B ƒF夑QÒÈ(Sd”2L¦‡ sB†‰ ûŠìÏOO¹}EöGœ6§aöÇ0åc˜ç1Lîftì4ŽaÇÞHãØ vKŠ 8°[R”À‘ÝÒÕ™ˆp¯™É÷š1œ© »ª€#k¦« 8²[R•À‘±ÒÕ1p]Uh‘YbW˜AýtFŠ¢D!*ˆR¥*îZ©Š»VªŒP© 0R`¤*ÀHU€ê”×k.© \R¸¤:u'¢t‹QºÅ(Ýb˜n1L·¦[ Ó-†9ËabÅ0±b˜M1N¡Œ1ÁlŠq ….µB‹³)8Ç)à(±b”X1J¬fS S(†)Êa Å0…b˜71L–'KÆ—ë+ò&âr) 1Ybo$Kìd‰a²$O¯ì‹pd_tUGöEWpd_¤*›·/zÍŒ}ÑkÄÝÐɨHUG–DWÅÎɒ誀èjâ«ø|Š¢D!*ˆR¥* JU@”ª€(TQªâ®•ª¸k¥*ÀHU€êܳVÖL½MfÍÔ]+kZ©N½M^M|ÕóLQ¢.D\ª¸Tp© àRÀ…ª€KU—ª.U\ª¸Pç€Ëš)à²f ¸¬À¥:Y”1J€&@  † ÈaÄ0b˜1L€f= S†©ãü†ÀÍÌoØI ÛÉ’ØÉ’ØÉ’ØÑ’ØÑ’ØÑ’ØÑ’ØÑ’ØÑ’ØÑ’ØÑ’ØÉ’—z'£/—nG£bG£bG£b'£Â®ö·Š‚§( Q@¢‚(UQª¢TD© ˆBU¥* JU@”ª¸¥:eIDÍT¢¢×ˆR¥* JU@tµ´U1EQˆ¢D© ˆR¥* JU@ª‚(UQª¢TD©Š·³PÕÝ%Õ©·³¬¸¤:ed‚ˆ¬J>% “†ÉÃäƒaòÁ0ù`˜|0L>f Ó †¹Ä‚qBA@„&çDhdddhhhhhhhhhdŽÿo(|q©2º*Ð:Ð$8È$ðì€Ç¥8†(EQWÇuu QWÇuu Qª¢®Ž!êꢮŽ!êê¢T.]¹õš™Ì}¯™iÓôš™œ_­gÕLQw‹ ¸[”À…ª€ Uª.TÜ­JàBUÀ…ª€ UªîV§ü§^3ã?õš1†]×Uq×¢„‚SBÁ)¡à˜PpL(8& Ž Ç„‚cBÁ1¡à˜PpL(8&³ŽY &ü„‚Ø) ˆ ì€DFv@WDFv@WDFv@WDFv@WDFv@ª "£-~W§ 2Úøwu "; E‘ƒ¢‚ÈÉ誀ÈÉ誀ÈÉ誀ÈÉ誀ÈÉHUAädtu "'; «s½–MÅ„STÝ¢‚è%D¡*ˆBU…ª UAt«¢PD¡*ˆBU…ª ºU Q¨ ¢Pç ŠQ¨SQ’À)Ià”$pL8& “ŽIÇ$c’À1Ià˜$pL8& “Ž™#à˜@LÔƒ5¥œÒNéÇt€c:À1à˜pL8¦ÓŽéÇt€c:À1à˜ð7:þŽæ|£-þF[ü¶ønñ7Üâo¸Åßp‹¿áÃ-þ†[ü ·ønñ7Üâo´Å廒·ímÛb´™ˆ]­\çMQ@¢€(DQª¢TD© ˆR…ª JU@”ª€(UQª¢PD© ˆR¥:QÖLAD§Ž¿SÇß±ãïØñwìø;vü;þŽÇŽ¿cÇß±ãïØñwìí;vñ»øŽ]|ööDÔñwêø;uü;þŽÇŽ¿cÇß±ãïØñwìø;vü;þŽÇŽ¿cÇß±·ï_ÑÛÿ"ìí+ˆh‹ßh‹ßh‹ßp‹ßp‹ßp‹ßp‹ßp‹ßp‹ßp‹ßp‹ßp‹ßp‹ßp‹ßp‹ßh‹ßÕ9ˆÞØâ_­\¥MQ@¢€(DQª¢TD© ˆR…ª JU@”ª€(UQª¢PD© ˆR¥:QÖÌ@T©ã_©ã_©ã_±ã_±ã_±ã_±ã_±ã_±ã_±ã_±ã_±ã_±ã_±ã_±ã_±·_ßèâ×7ºø•ºø•ºø•ºø»ø»ø»ø»ø»ø»ø»ø»ø»ø»ø»øûõ;ó;ó "Úâ_¿Á9~9ó¯¾y¬_|o~õ‡óÿ¾¶çùës}þíQž¿;ÿûîQ®<ÿ?¿ºùó£–y}˜}ä‹2ì/þfæWI¿9ÛÝ®Ï|ÞÛua>?ö#> Ü®/ÿñ8Ïj~ø÷ëšOóø´ïs*åk|¼÷vxó“»×ë:}œ¨÷Ø|y½®q)ñÙÝÛ²·{Üîqݯg‹sl[|N÷yÌ{ì÷Ì®˜üz¿Þø¤îº´ëT•zOÎÎI•õoŸÕ½¦¾¯©lK¹¿ÞÅu‹ï­œ_èU–<^+1~Å·SZ»Ççü›_ãóû¼ÇÇõs¶[-b—õ¢öãþœŠ{|\Ÿ„òqÁ5®÷ÛÞÇýsâ÷øXüûÌóü”{œ‘Ì×Ò®óuýÀÜ5ÞKÿúy¦{¼-[»Ç1¿ó’•íï1¿—-Û5{Åü^Ûu÷ºÆ1¿W^Lk1¿óÛŽ¯wÄüZ]ìúþ|ù/{µ{ókçñ®ùx‰ùåZEçØJ<$ž»Ö»ÞZŒ·Å®ùùyáó!ò¸¿^µß÷Ïk|\ãºÞ`žãmqYì:Ÿ¾{Œm©÷ñ^kŒ½_1îó?¿‘÷ø(1>§QîqëããßÂ5Þã|Öb}l±ø•í_®³ë¶òËO_üæ\ÏOÿ8WÚ§Ÿo ‹ÙùÏ5ÿeëyÅög9ÏèIè§ÏÏŸ}üüùé»ûÅ_úa¡>í:c'[,Ùþ‹ÇÅüùù¼Y”k§éùÍïü°¾­Ü로Ëà|ø|®åX'ýþº_}4ò¹¢ì<Ÿ÷ê'¯x\ïY÷®f…wÞ…ÿêqØ endstream endobj 98 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 118 0 obj << /Length 3781 /Filter /FlateDecode >> stream xÚµZ[sÛ6~÷¯Ðä¥ôLÍ/`gö!i2é>ìnã·¤´DKK¢JÉuÜ_ßs@‰rÜév2±8Îå;ÈfËY6ûpõãíÕÛ÷U3˳´Éš|v{?3u–få¬.ë´±åìv1ûœü|'íÖ×7ÖÚä?P|€ÿlßuðwwýëíÏoß»¥2O›æ!{\e2ñì¦ÈmZ›zvcËÔUwš÷×7¦Nú üþú¦¨‹äîÊG(üäɪãò¾_—<¬iöòLÈrüUFcùAÚ_ÃNŸ®‰àjTÏüišªL¾ä¶˜ãwà/ì¹ßÊzÝî°æ¥ùpÿ_²¼À º…ˆJVŒ¶OÄ£AsÕ)¦ÍÛGšEÛ$šºc9GÚk˜Éb3Î0áÂ"DXìiJîI¤ÖHi¿!r 8]8£ì®ßˆ›1—A‰L¬E7Pvµ›Ý˜<5µ(ä“g§£âA2FTïv¶tÓâš6r°QýüH› k”Ýø÷ñÀ\§J´ýñ©îDsãWœ™þÓø*^÷“¶FÈÚ öž¥µ«y7Ϧƥu­»ýj—#]Ì…h12K6­€¦ôþ’eÙA.†Nhå&ÍaÉg´N¶1"öubº*5¶ŒfÓÉÌ ¬pQŸ"5……¿eVp¿ý¡"­«Œkè¨åÍ 5S»0¥-<_§æËK“ùÙŒhȌΠ&¾iR—Õãs$©T -FŃ·Ãö<ÔªÂ&E,¨v¿¡ØzÍ"‘-²ä€MËew¸æ$µÐýñùECMýþ¶šÈyóå×XgYÅ+œÊ”©þ>¶ub6ˆO`¼ S$…Ør°ÆUÀàà7[€^ ÇØP&­¨,–bφmøNº¿÷Žw·`SIdŠ»0˜L>´íÐþà m±pܪíïù÷0¢=Ç¥uÚe`R]/µß‘ã-<úÈ?óþQäk1å‚3«Ø ÒiyÇëè,°¡+–'ê+;̵þ„›ë#`Á%òZô]©-ƒ‰zßð:УBïßU‹ðÏlI¾õ;©ËbÖ;þ=àÙé¡b§bÄ¡SY Á±ºÔ ;WÔiæ¼5¼`§7(Âà B`&ʽd0› •Òn˜Úz¼†e“M#~®=zù± {è%Ó’PîX¤ ˜€Ì‹L#òJb††i÷Ô±Ý*ßà§¶X›Ôt¼ŸdVQ[í°VŰp"Š)æbÕØÈVUZùÉé¡Á,EñZ”ç²ð{Ås…°¿£k#anôDDº zÀ=R‰YÓJEz¯£Ñ(ÆwŒ¢éh‚É.Yéq‰ûAµy,üe¥îå½Èý2}Ù—yξmÇ–yIô©ðïÉý´ /Ÿ%øÀ¦h^:Êb©úä(‹¬NîÉ¡ a,æãVÕ~M¦kTûü"¹]ò„r?|ÑW8jÛ’ýÐÓùu—C˜gëïx¾Oø§dŽo:÷äªâ‘Ü$C!¤§îËÿ%‚Ç`màôúÝëâ<\BÞ4vR?èëz2Ð$dµ÷޹1 1ó.˜*$¸×yPgÝ«Bæž8û÷1LGF ŸØ‰ o[fî_‰ÆËrQe4ËÖ;Z²PKÒº•U‰*÷.š£ è ÷n,ÔY“pÍhJÜ]'r_Ÿ$­¸¾Ñˆ4ÎaöP½€"Þ¼£L-©<ù¨sä'¨§fV޼ì‘;¥bÒijQ#ÂycãÍáÔ¥LÅó´Ì×–eŒ6%@±(•Ù pÃFs\ËWÿþØÎ"]… ¤'›£¤Êþñ@ÿã•UsO~…Xn´W@=Ó:ˆi«æñ1`ç\ÐÔgDÞ ­&vÜHGFêù¸\IS ŒZ^¾FÆ[;?b}æuN¢þjÌ<³Îà!ÙùcX  &‚†&‰–¦òÕÍİå!d`1@ØØ!½¢ *ެ{5…(ÅLÅ}¥ €X“ #•(åyÕM@ãÆš,-›iç?å¦K"Y¼ÒO›ÈO;ðJ}jé.+}=ãOtÞ˜ÐmYU]N£A))ô|„*+êXðÈ·ªX5 õå;`P|à–Xë¡Ê惜É$òÏ@Á”G‹I1­³ ñ­âŠA‡îgy`/YÓ_B˰ÿ&u¶sù2zþ‡ÍÙG<> óG™UI 8¥ñ0Æeàs1•¼P|B¦pîã>JæÁØšñ•*Úa‚;b9æQ¢ž÷@¹?²2t*ub:Ì_Àm/äÎp²?nà5n;ÛEý÷®5Ì·A@ÞÛ±é§ÐÖÁýû@‹E¥½×Ñ…ØHõ«&ÍjœIÄ ¬h'¯ÏêÔ†¨2åe†ñ[S–†u “Ù ^¢¹ÔŸÉ…­ o³,ù‘„j`óäáÈ®Y«'Ñäh%lmn™îÞ/lSaÙú;áF|ùåŸüQ¦‰/HO¢·>ºÂ& ·½5£¦WÈÙĺ^^’eç_öÈÍ´!„¯–­-Wtd5p)ذäˆR­ÙvR±5;Ð8¼‹B=­Ø~QÛœí~ì͸¾©ëÒcìTü«Þ=­UÙ–n$¡eÉlq|`Ρ}ÐLØ’rœÇïBw óÈÓ¼áþ´Ì5]Ê®¸‹ßJ“h‚žæèøs+ ñA»-ïÒ/äc†Þg9·h:C Û»ñ퀓„†”Ÿ4Ëåûv}ˆwï²Öà Ú¶bÐ:iÆŒhéê¼u¨UÐc¥É«7îÕÇ Ð1e9ÉÛ7/ˆùÉå-Ë4kŠ™Kà˜3æ%·êRçÐH„îÄ.Y]Ë?Iåžex†¿ W¥m$/ p¸|dig@80W>&*¢[f1i¢¯]ËGIz‡é¯á[œš§†~§Il¨ÐÒƒ åIº3$Ø…á÷ÆT!¥âiHdê-<ÔÃNþB‰èP껱᠋fJÓ'–Ð[]± $5\Ä ?E)¥¯Üâ§–× \”ëlàWÏCˆç¿çNˆI˜‡¸uåÈ<Æ*ç¶Ü—âáƒtlŠÑ4¼ÆÊŸ9´Ï×û‡|ˆÐö  ÞÔÓõ4] íÒ5Îo ?Ÿ?6îzþ%6Sè3lG×FžH?N\{R‡/ÊKýéC ¡{'+ Œ:ÓTa¥‡Œ:n/çÞéNO ‰Íóµ+ØáŸòéæçwš}!A%韇»fÑéÄÈÆû;~ø:2uÐKòöc;ßàù´=.ñnÉÉIš?ˆ×Ëw«0é‡^9¶a˜ÎKQ Ô~ŠCíËN[è½î–ô’G^õ/^Æ[®½Å±˜ &{ó̵•ÄÅÉk‰~ !=ma¿52W²Æ®mx,½”P¡ %'€d.8ï·[ºHi7¹ž$Ìj8°ºÛpÇM‡Ä®.äçHÐù¶¤("FèţkX=†‰ããð”d”LÓÀNÞ–¨Wj—ÝáÛ€X33ÆØËöÒµÆþ_qÙi gCÒW{'¯ÏâýÇÑÒ“×n¦,`Y LZdòÚ-OO%¡Òmt—xôkJòl#k¤I²è^ó,ÃÖ ñjg4¤û”§Ce-ÃR·Øn4g§¬½[G\;ú¸Zî?ž¬(ÚKQ§Ó”Í{Cb šÙØ“ÎØy'0Vß+8ΑIfç[šè"{áEöSïàš0»sþES+äÆÞ[ЙүŸ´9Xl!w"ôXý"Å'5dñ87¾ G’(ñwä;ú»öN·¢¶!„öçñ«ÏHùY6WK.ÁVÌ¥Û58ëµHèZý†O$zSéôÒHï‡`mpŸsÍ»8NO}Z±”¡±Dáž ÷O^1PnþqT]Á¥w1Ú}åvì"ñ*¯Xð¾8Á†–«ŒTÉ®wÒóž¿xß~ÎYˆû#ÈOžÄ‰1ÌY¯ý[LåU0?ùøºA'“ÄUzäÁÓbG#: þ+Y£¹Ô¼À %¿/_ÆL+ÙC²çÉË á¤‹uÉ»Smy³sÿ:²;A8Ä 7æ@”Øf†(ÒÓnƒ†,ÒF¢­fq‚ zŸÙŒ¥±©£GP9á.>IÍã'©ã%7N˜¡‘Αý‹U ñ‡ôÐQÈÈ`‘¦ßGN˜3‹Ôü1|sô(×o&Šo¡e¯ÞÆ#ÕÝxåÓhG玘ç¿‚õo'VAñcÇ÷ÓíÕoW9Áµ|†îÜd©1Õl¾½úük6[@;LšÂJfOÔkK—=°?(ofŸ®þÇÙM6+!F®+J¢Û´0å,Ç•ÖE$¿}°Æ¥MUK§™i06v™Þ²Bp‹ü·â§%m ìóSÇ™‡¼&«´ï'±ƒàlÜ~Ô™pM–|è8* -qäá˜Y@MyHÏÜÐú{wÒxµÒÎÒK(„•yÿ¡g#Ù¨óè“Ç=F¯Ê(;°ŠÆ÷wÚ<˜_׆lsÔYnÇ[Ö%]4å˜ëç\לa¡¶Jn8Þœ$ïÆ¿ T¡Ú{™ endstream endobj 129 0 obj << /Length 4464 /Filter /FlateDecode >> stream xÚµ;]s#¹qï÷+X~ Uµœf€ùHÊ/Wö¹Ö¶+§$¾TeDŽ(ÞŠ¤Ì¡vWùõéO3%í]\W·Ðhô7zÌb»0‹?}÷ÃíwßÿØ.¬):ÓÙÅíý¢µ‹Æ7EWùÅífñ÷¥»ùïÛ?ÿcÝ¥@][ÔÖà ò‡»Føgÿo7«ªª–ì\c§Ž#•Ëþ°áöîŸàŸÇ[øÏá¦l–ghôç0-YF°÷þy`GÓhÁÏ7e»¶ý‘þÎÈ!õï줫ÖeS-V•/ں泔Ådêâï+×uËÛÜüfå|³üÙX‡< ~<4µK<)a¸Xê8>1®Øñš|Nú“ÒÄî/Ü~ºY޼<éWX÷4µ^ÞÌÀ?ú ‘gÿ¾ì‘‡ã3µ¨wø íõÀp‚û–=e£ûOH……­€ìb½ë˜@ë#—ÝËÅàFÇsÏ7b—ô–åòg[¹ú5bÿI°9ÅŸ;¢Úïà¦ã‹ï™;áBì@}Àqù¶ÜsÒª´j”V8ÔãÄ ·µa˜­†“î¹Iä²èôGa4&ÍH41SrôˆÊ&ც®¨9|Ávyí*qè|”¿Ì.[ž™”¸ú/G^ö¤"u<á¡jhÜó¬š.^¸w·úD‚ñÄÌ€?oˆ”B¡ˆÜÓp1ÿ ¨ ýH2Y#oçh›áJpøÊwâŸfŽ? þÆ_âoA >€µË;ácœt x @²À„À¸/óRÜ|¯—ÉŠB°D€6J·^{ßözÁp#8ã–® †hÇç=þ«òôK‰"j”NÚ˜K4xʆG¯1 QßšoÎ?ÒOŠ8ÀïãaàÆ™UKÕX‚!Mpzed6ï—!Æ õñ@×`ÝöYö`L—/ Sö’±ûØ$¦ëÐäDˆîµd’÷£üêé«åöÈÈÒ¿›é˜ÊìÀ?Ÿ”:Ÿwz`¤£ ÈK¦óc¹ƒ6©Òjظ#†N<Æ\Z½vw´{^™*P Ö"ü6Ϫ‰eîw³>å(¤W ÈóI¸­D6Mr”&j!i;ˆÉâ{œV€صzî³(ìAX7x`©»ØÌÁFÚdÃHFüòl¯{º…!YdH„2ÙúÏ8× Þ@†,ê]°âx¹i鋲ŒÚW/ 9ÌBƒôXÉR{$vQ-jÛ?ñS_Ïîò6-XA (¬2J€íXÇíØ} ¼å”ÒL8~n‡ƒR¬Œ'äBjçÃu@žV)‡]±Æÿеd¸Ï"ð/lá‰>û!5‘:(9sjc«hNËpfhÞG‡Mæä—WŸ%5¦0:<2Ù%¹ -›.vÒà¿Â/Nè«qóßÑe[þ$¼»Ù’O… FáJÜÂütBÑv™y‚j’ öˆ½YXWT®.Ñ™l|a|·Xù²0­ú’bÂYþ´î‘êsUn+4‰á7χMOJþ…{éG/¤{ƒoB»O=Ykʰ^¬JW˜ºâíowÆU“€ÄøéÌ\Ý-;/¸úšD•(-3TαMýcê8B/ªFeqM抃Á]Ïr ât"#Á °yR·AÉ¿#ÆBZà0ý ÝÑ7“S‘6ÇÆ“0U0”»'ž“‘†õqÏÞ Z1±ƒÂÒ;a÷S4ð÷ê©ì eîpþ‹0ü³¢ ö’®¬šÜYiꢮ¡Np÷—k»¢ëj… Njùx’MgU¶pM©³4&¢É—[TÐl°Þï©–Ѷb–îj;àîhÙeÛò”¿!ATf×;¢+«+&(-†qBfº$3¹{ÞDÇÁ8\ZKÑ„Îø¤žðIZ3a×*'ÜúQ–$6†¿cÐ=ÏLêþ|ƒ!Å=CÆ·ãP7e)ÝûØ2è­ï´Æ¤WÐÔ…©B4s?orÌЮU¨ ‹VÎUËÑô‘[Ÿ“h;Ãvµ-:_~ ×É]äXØ6Â=è®3VU€˜#'‹£‹«ŠÚ7oÒ¥, k«©ˆÿEÂXâ1šœ$gžx;0LàÛ£ªÙ«ê9躢i»©|áCœÝ´ iÓD~D ›ÿˆÆzäÞAS·»À !á~% ®œÇÑÙ”/ œ›ð…FlæÝ) ×\MY¸FÓ /Bqä8ìÖÔ‚ÃLõ9øzÔñtÒ×ñH_z§uÍüŽÀ¯%™tY–h¼í×ÌÏØ3ïoÒÛgZK² qÃ.SäýP¶ôK¡ÈÛƒ<6¬åýÃË ÛŽÎ°Ž9×V^>ô¥ž±6Ó•{þ¹Q~èsë}¥7Á’O9$2/FðÈOO ñ…$9‚¬²ÏTÄ,üì–¤½›2)@1O[›yÝDÌôü”Ñ»[¦z××e(>À­˜™b:•q9E€ãIÅD<î½Ê ¾– Ì<™9E‰ Æ*˜ŸÿÈGm§h}á4’…yàÛ¬ia¯&F<¦Êl×M›ŒÌZ¶ÓK ´£ý5>SÓ øØXúò[[ˆmyŒÝîF7AkìÖz•^ó5¹„Sk BëÞ“5«Ú.I'¢&âlè[.l%zˆÚ¢GÒ wúNÎcc(ÿAâ"Ötñ[Ò~É{~TfèÛ1½Ä8çL/ögSúì]`Šè­P¼©* #zdÈ{UY›”þäw¤v‰ØêUóI53ø¾½0øÜ{Çar.àš¢ñINø* ª7i€]MJƒkŽcòZó³³.9ÀìÞÙ׳c¥ËD™íÈy7áå\J ä2(­CÞ«¶> c®„½]‹lMù³ü¯4[,¼@·;ª]«ô¦¸ê+£R-«)W#‹ì&Î29àŒ§L縺éyÏm²l®Òœ7µ32X ‡C6Eë꜋Þpfºþ¥Ù“Õ€‘b ‚rUüóéªö˜T$–ÿœLí[j¢}MD*oßç¢éûGxOœ;fÖºw%t€ã&[µSùh*ÜËøZ3½—†ÔÏ,ºOý>:‹ž|x)"9ðØØïâeß^&†8F~÷_•_ž “ÖÆõ;Y²çAò·N¡4T9k'ø4©’ð’GD¨ÖŽEÓæœ9>šL Rmy…)rîbð4hûY48e0ÈWôN3>-Maê àþóJšÜÝÅÔå[TELù×À„ͨ޴*}¬7E¤CEŽС,](àICn¢º-øûEK§HCQÅ ×ÊyüXö n> PR|ÅÐiÍL |¶×G ¸‘º-¼ñï|ýÏ•ó±ªÔ1ÂÂûXÈ Ù8SyüA‰3ˆ„ämÊ}ËÖyWÓµsït5_MÕš¢nêTs½öÄP”Ñßþiµ¹µ¬›f²ó)Òd\«ÉÁ·D“A%á»§æÁ!uCq¢š6ìgU‘% u”¢eÒfñ–)Ë4Ñe•]&Lpß÷¸§íÄAxû‰æƒÞ<} Ÿß]5çW]æªÁ÷i&î7¹Ìøz4q'É"×™X<Ô™ îå(ÕÆ8NõÝ$õGÓ9U”r:Oy€ HÊŽ•YðPÓ5úQÝ– ¹~Ý.ÿåfÕÙ:MV`¦ÂµÝÓ dŠ–n3Ñ1ןMŒ ñPÅ;UÝ掠%&yz`¹n vúøêÏN¶Ì$EËVqÚ&Ù‰Y"C©:~TÙOuüµ K1ëúÛJ1?0ØF Zˆ¹ ·–A›ä›²•š!þø1òŒU²MP÷eæBÙZßÌV¶s@ÎúºIq¡zR1ID[uk‚ÓpÞ!ëc’uüIü¹Û%Á¹~¸æj/ŸI½¶¬® åÚÊ¡ vÏóc*Ê{ÈõB÷!ž©©ÒÒž@/š‘ͦNÕão)L4R8vQ˜xñßHÖ¹\R]øªû¦TRó®l˜Ÿ†”>[ÔÍŸ\^É'í²¹+Pwµ§Œ’Ÿ†“~Z®ÓtïØÆöÝ%;'%µüFµbeÓìÉ:›ûô˜™Öyé§è²ö³ïq01’}pïåž9ûXàzå¶­UË­w‡+×X7CøÙ2ðTç{*·ñk’· ÁMÑvÝEåü 1EjΟ Rë|<£y©9°ÙO½ÿxûÝÿLØÞå endstream endobj 138 0 obj << /Length 4517 /Filter /FlateDecode >> stream xÚåÉ’·õ®¯à‘S%ÂØvŇØ;ò!‹=•‹íC‹äpÍ’#YŸ÷–š ‡–Æ²ã”Ëš^ÐÀÃÛ7OV>ùæÅ—×/>ûÚvÁYÇ;1¹¾™HÇ7gë”™\/&?L¿½Ó~ÿ¬¯fJ©éßáò ü¿Çç›%ü»¹úéúÛϾöÕLF°ÎÀ:4‡Á/x\8ýÌ´ðdZ‡q×W^Mû×0çü¿„™ŠÏ¯f‚3ý3><à gÓ(1}{%}ŒPÍû»øf³Úãc=½Ùî‚óLa ó<ù[\I µÅ:!Ó¸GÜÿr榅ÂêÑíù \âÐÍÇqÛ aŽæWÕ°C&l^áa7ßÞ?4Q–yáÓ°ç[´æ“‚Yc†éÖ›jŬ²iàK€Ü›4/íïv_Nfª³¬ó~2Š™È ´'Üq§#bâ·Ý€›NÜ,#¢„ÀyÖuyKš«þc)Ø—Îà†qýyb†í¦… ؤÒ•›æÌZ1B,m¢¤*Ü>À%2àöa×\’Œ¼{ÝooˆUa'ﮤ ïâÞ;[‘¸ßq—–ý 'Âo¯fðòͶ…¼Ò¥ö4Œ–Ø7ÑNòr¿´@Jc˜‘"Rw‘–»(b·DUº½qšicI¶.¤ð|ÄW?rÜRŒ¹ZwƒØ„!rúÅqa™Ô€`ι0jý¦±cÏ8W“b¬(ÂÚ‰T Äõ!Ð*ÝÏ3jÎAÚqà‚ !5Lç0üûjfü´nàê#pŠ—öˆ¾Õrƒ<òö ´)­Ç uè–qú#—¦‰Veul LP9¢; &÷xÿ¾Îtßè€ÆGÍvÇP˜e·%ÝXÑ[‘˜øV ͤÔ5ßî‘/ít9O‰ˆ$3|"Šl"øtÀ¾Å}¡7üðÕInÖ¸5o`ßd!ï¨S#“4t.S^NŠAïìjfŸ¾jê0Ù1¡ŸPbé® e®ØfšwÓ/"È휳²b €42Za¹ræXiîQ@ƒM!£þ—ëÿyjìêD)Ç`cÖÃ;9™ß¿øá'>YÀ»o'œiØí;y?±pk“w“ï_ü3ø"µŠ‹S·{=pg“.ÀZØ 6S©Îɯ8oáŽ.Ó A$i Bf„€GCÿÑä°8`rfŸ3¢ª.UYJjd•¯H¹íHø‚ l7‹ìýv&û¼»KÁI`ƒZ˜PŠ‚…Ÿ®Ð Ѧ4Ì·îh§•ùÆÏúæ[óL«u9åDÉÝß">Î@ÃßrcørÙÏqìm°ežÒüŒ|¾[G#—ŽJb‘Œø¢€ˆÖíÇÎEMjIŒ¾P-¸ÓjÁ“ˆƒˆáÓ®¶¸Á=‚‘ä¸wi?·‘¨NžYöýö>º0àÃ÷¸×Eú,ì ­¼R2ø›}|D„¥áÕ=^?ÆÅÓ—ÉÙ&/#+2Ú­mðIÂ%A—\ß[÷¿Ÿo£µÜ·mAü¸{æÈ£ÝtYÞUƒ&|2s„§Êë¨AÆØÄ8˜LI9À ôµºœ¯!ÜäidYlî9»¦bëº @ŸqÒ¯%ü•/RrÎ<*#Ð]\é2Âa8Å#M&€/?Ì…+aòáÐÑr'Mˆ”ž9á&V¢ÎVçlˆ4 xF6d$™y2@½7Ïk ZÓ€·kÐ6èÄÞ­ZE†wèÅY+ ôÒ^Ýaž¬Øá/54#6•¬“•­ùoxĘXpªƒñ PÞg&²ßBöõfõ…hz3êcˆÚtG-ÄÍiòÀ{ð:@Ñ1­=Gˆ*;Ož4ÄA|êŒý€/ZE£®.sQÔ¥.J3š¨¹ß¹E=\>)HÁ=m©zÍœü˜¬†… ¦ûðŽ˜5528 ÖœbjÙĽ´ÌùçЪp©‘ú¿¬»q$ü¤Ì)p ¥=Íá/,òQ2—&3]H}cÿÿÝØYˆÎF®Ö§¸ZPÕRº ¹Ú¸ºŒIÉQQø€‹§‚RGA©>«Ð;0Æ[Ö©gPè4™sà‚‰K èÏ3WLÂøß†»üEÜåŸC¹`öÚê •‹o)—ŠK$¹³ÏÂ%¨5 8ßÏÂ%y² ¹D]Ä%òË$ d¸{°†›?…?'òu5~µ`±Æ¾<ïWÚu·M8fNã`œ;këÀs KFsu:%M&˜J1ǯ•ºÈ&úq8¤‹tîo’½«-³gjÌQ¦F%Gë–.±d†T¶hÅèa°×¦ÊùŒÃk¦ýÒ¸gÊ ˆS™£ì‰3%AW"›( \àNTe¥öSùùÕÌs9ý½¤ÚĔà[¬HíŠÚáq½|kÊ`œôî?™Òs«GÊdQqâ–YoZÉÄ.l’Óå*¤´yI5ã@u7ÚÉj×(ª€ø¼.ºá“4 ô»e¸Xþ'Vv0Å–Fnë¶û8ø†J‹÷!“'Äâj\£Ëì®fÊúv4$¦l7T2ad».É€A Ÿþ A¤_UìÁïœô}JR¡Ä%ÁŒ_¾Û‡¢ ðNLî6ó¥‰9qqkÒ®".½IÉÈ ²ÍÉðƲPY®,ÀžoSÍíž–”†vžqÑÕˆ?¹!Œ,N»oÖÑ(öÓ‰0žW{ƒÛ}+ÜÒvòî.\Pýpz/šõC´Þ7ËÖCà©[NB©Gb•3†9—Õ4è-yÔ^Ò~˜+1†•'A”"üäjA— ˆ«éŸË¡}»òGļ÷M…$ÑYÈ é°=°9,Ù(ÞI¦¤-K›1Óƒ$ëΞ¯ÞÍ´ÔT,Û+¢ŠÚ¦¬{fSpJ4|-t* µ’îÂ2 "G]9ƒÔU¨ œ ëÄvb#/CR›Äã JÔ›eîÕ¢™à’93r À‡$¬ß„bN£–Ù1/,3ÕGÇxŒ°¶´|\53Ïe ”3å'-gÚO3”„Â:à…ñ½*rGë*ÏA§<×¥túC”k:ƒ1Ð\ÖJÝKåŸjOá2@/[3‚>‚‚\x‚u´MŽô¨§AÍØ×v#WÏ…ÉFwºðÞhnÄ•Ì@pŽQ lsŽQÒ\ØYÆÅÿ£|*û^Gu¿’f µHçä™¶·™'ò­j±P§©6Q1110“éBµ _)0<ž{:<—"D+§?²ü˜æ’Èžò×/?:1HõætUu@4 ¦¦›óR½ðÓy®4WcƒcºsŸWµG}†îúù莇„m=Ì{ƒ˜¢îÿ9¼ 7/i.p¾r¿Ô}“ð(&/%ÙÓ ]N²´M•8J KŸ€—GË× ²Ú N¶Ö¡„BTr ㈺ÇQtŒ¯úðÓ ë‡˜c؆϶Åý!|<,Æ„¦ Ô™Òï‹lšÀ§1¢ØÆAËЇB)wôM g àèêâG?“³œš=bÇstÉ ßý&-¤T†ó@Ÿ¼ 5‹q@£½–†²à‚0!†§{ ûc¿Á2ÀX"ªìëÛÔžƒm±Z¦ðIë zô—šœ…;ê÷…GïÐ˦èê}x@=ŸZ5Ù‡·¹³è¼Âѹ?7~™Ã°b²¡EW‹”Á—C‡Þ•™j–tŽÇÍ…/—uS-Rò1w%Ú”á}^¼r¸Z0ï]äcàhã¨9~Cr?ä²iÄ. 9Çú±o_L¿ÆZÈ6~±Â!ýÃmüpNœÍý‘£Ø–W@´§š)ÝEú,Ò‡†bL›Ì%<ÿ‘ ýóð4ixC¸¾«<ìÃÈx hÄfª3Õ¨˜7¿O§Œt¦f4hQénÃåÀ–ùhRVX$É:Ѐ~Õ¯s"1Î~äoàSÊŠw¥¾G2ÀD×·q­}Îï…ú¦hf¯ãù©ÿ®™‹djHÏ0‰çä:&PFÎàEgÕDY´~½~¸Û¶*cÊ0ãͨ“^Z™«K¶tԖÃè„ÂýPƒHïþ'‹¶i9,²N¾Ò²ú*<ÊÆþîý•ר¤3ÕZƒUE€òyƒ»÷a½Êâ?àn•Ùa ‚÷2 Þ9¦ýèDŠË#Ñ<(tCþe°yp·Nt<åqå¶ûÊM$wQã<ÙÀ«¨HéAOhD^u¶›^C)Ú¹³+¾9Í® ó3ò—´þ’3¤’©AN›„HwS‡´8Ùip¾¦I<* ñ”è™xxÆäcÉù¾Ž@”Ñ” €?›dÈãÂ;’›U”#}xS§@²É2º¨¼oÃ2îÂûìöžX•ª Æ1wÐßÇ›BåÔéW¦ZÅB©¨ûî– œ—+š1Þ)1Z'Â÷á}-‘‰X!ñe#blI¥g2˜óvy(Ѷ= ˸|®C1¦ìüGz SY ^ƒü½U ?ý¡ÇŽY¥t[à ín{`ð.c`¢ÁSض½ŸÑ Ç}ñ£B3?nöh‚”|Jàzø€ñÙ§„é8UÌI&÷MÒ>ðê¤é—ÜRBýš~Å|É”Ý]T—p±O[ˆY|–úÂÈ„Q¼9l”eX•AïΊƒ‚”ÙÅeFòÏRÃST¤ø’üÑ>; *6ø¨!ÊYçœjW«FŸ"ËBÓà ôõ€h, tOþP~Ycôã °`ÊêÁå†ôÙl8L™‚„3Ýô¯E¨9x½G;iÁê°—q8ŒXò„Æ?þ×ÙÌ XïÒYì£TxŸmW…0ïÂícÈ=§O…ÐaI)iQù¢‰{uú„©(çLMt³H~Ç:%ÝáÅ8‡hÕjú*Ηi!àTP(¢Ó²O³f¶®·vÌÙJŽì8"€Â ò_úé„×±J‘NœÀFõóAo¥¦ãmìbxŒ÷É÷Àë„}¼ntÄ]›6S<†ŸÓÓ^‚%^˪@|ÐæE¡ç§Ö+ú¹hÊ©ÆÂîVËÊŸ˜i”yP*ê†T-H]ŒÑIÚÞý*Køˆ†µ~ Å‚Jàç3øË1ç%,5ý¸¥6”ßà?f&»Õ$]~÷Í‹Éô¬*tå/F´ÚzÁ?ù/ ß endstream endobj 151 0 obj << /Length 3218 /Filter /FlateDecode >> stream xÚ½ZKÛF¾ûWè¶Ñ$›ÏìiáŸ~•–Ë<4';Ì›z°uÿGîx a4áo«´Zv»¦G¦ßIJÉÉ×ÂýÚäQU¼‡0C´ôWYyä¦ ²„mÍö"—Çï +5ËLqÆ-v-¿4ÈÚ3ŽiðÏ‹?PõÈâé(ɘ–vÛðË^ŽÂÄÉÆhµ. c¹|R‚)ìIdÒñq%qìoÙ¤Y”—¥²û[Ë”hÒ4ª“TÉ6ÃYf6ïWë´€%˜ç¡§õèåy`ÙÁ¬ Ú¬Œ²ª^¬åYÍó º§ñM‚AšªZö4ÙÚ“îP$dÊR%$ä÷ð|¦©S­c±B[¥ˆÝ8õÀ­Ã“ðù@jUË-pLbV¢Y$&Ê©6Q "¨cÛÌ3)"SdJc9'âFV^êƒÇ/›,CÆš“·~-‚†Mž‡‚Þ–tå4šž þeôöš÷˜.[í= éìZÙjááhEªðH¸—5_ÎZNް#}¥Y‘«f×¹ÅOŽZµãÑ¿Æy,œn¹åW€9ìäzjý£%¨,AßyÛ×u¾#áÅ¡Ôì°ΩUÂç é•u=¸‡ý v•Ëq`’þ–KþÛr›ø%|${v´çÃA wÇ'=\œÐn_6Œw.ˆÆ _´w8ôÒºWièêëzlJ•YáéqÔvÛæ¼?Íès+œISF¬‚™áIH˜5PGòÔêHž^jvž¸Ó tüLÒßÎŒÜÁÖš'Ö’kÊŽ³ô¬é¨MªÞ4¹¬2lÕŸ÷Ê#,õ̤ÌP×ŠÊ 1€ §´hö챂ތ†©à1q¨:t€s*´ÅG§Nb#N»P4´Vö3=©}=ñŒäf`i .\Ü&ÒÉ>ÈÑ^(½8ª“ ‚¦¤Þ2ŽU^-S>¿¿ÆI¦œ³;Gsþþü!ßà!5ã¨("šÝ?)xl̨ãåµ`QÍ<4Ô¼4Ù£ÄØà‡'ÛK£v!FV™JŒú2 ¶B²§àIÏã“sû´O 5Ûs;»Dû`1‘ fdCg?nØ()ÏGa:•Q¿aAS÷G ~9yá/´Ñ8qá`Ü!ž Ÿ΃ö¬ñádó‘§%˜Î-=žðÕ;q¥…E{į>wè+žÈ€_¸…V=)$šÊÌ, Ã1üeÃg³éZ‘R¢ùTÆž9)«ðŒÊŽÜŽ'~o~÷ö\2XÏ*‘½X}É";óÓ@w “ºCÙ ´ŒÖ6iª“:¡$d™øiU5œN5]~¡M¼IOjâÕ­¶Ö™S–£¶å┯ëŽÛÐþ؆> ™B½Î8l•Þ;·‰ tÌRÉ…;±\xô†¦÷61úûj‚ä÷6Ùĺu‘VófFµ6ÃÁùÞ>pRdöE%¡¤ʀΊéŽm‹0‘àÿZðÃü`è¢ ½˜„E)ËÅÀSµý6l‘NÙ×n¥Z$×7=# {ƃz½ ½¾XÏ Ï´•ñ$ÞâÔñçã–&š³à»ï´_ºÛœœ" WÚXG÷"r{°!ìíû’°,2Y‘"~Ê⨪1í¬¢<‘´Óðžò8^þ¼ª “»ûº2~@,ÈA(¹…?lÀ¹‹b,=ô#›";(3:uO^“SêAðÐÓ9,ÝÀ·VŽSx©aŽoI„£J±MekvÚ6æY|#xP] ÀŽ$ÿ(H—h›‘/–ìmºG=1ÔÀ–µ"‘Þ\Z6£ÉßÂëí Û:-}áUy?Ó^ÏŠlˆpƒJ’æ°ÀT¨Y|ÊçÐ"dl×,^$qV±‹‘èŠñ …~ôP}ËM4ÒÜtü¾aÆQÞ2Àøå‹#Føñóo¿ˆ¶™üI¹y Š(׆҈¤®Š€õ×WW¤a?á.›ý×þV«Ít5II¾Ÿ~ÒiFNú\DEžJ.“&ñkÕ"x¬ÊJ3Ÿ·& ¹øûѪ#-·`qpl÷³€_|££–gõfªüØè¢`±ÜÛ|NWá(jê™ÌK ¢Ä½¦4G›ÄjjjD¹¬‰½ëY·}¯•º1zUÌk‘ú¬®þ9ÿ¼J’tyƘKß «ÌzHñÄêy€ìf UGnŽ=iWäj€F¥½¡JÄíº’qµÜ7I‚…Qþ4áúçþ©û ­ îñÉj‰väÇBôc\ÅHa‘0t 8Tc½$‘f³§,é}ZFiiÄhfí{>A%U¬áÿ¼ò< 4u‘Û8…§1×#‰©’ë‘D&¢¬@DO ?à‹² :}°Ú½’M•„ç é¥á\v?59›=I–~v©m¶üô@µ ÒBjø‰ÐÛ^9\â/#wµ>>6ƒœEZ}“ç'Jk|£Åõ_q¢” ”Ë¿óU·ò¦RBƉ<…?k”æ\¡)Ï¢¸¬mey3[0­£¬°4._T_ã¨(ÿ¤öLe+q™ÂJ‘„hη¨ÊÐéYŸ"— “u C× ~Áé5hž7*7QÛQp¢yªW0*[[=±%Z¸ÔæàÀ™cޱd`j. ¼ð‹zBò;ØpùwÐZ5 qBÇWt-œèíµÐ)ø·Ò¢(…6— ýäŠnÏÇ_š¨žZEŒ\mÌ,49ÍJöŽ Õ@²Â«kgîB÷Šï¶F ÃlåS"¬ûùþG`Fj¹Ôêec¯hZ-ì!]Îô¶X›ñÅWÉ«âÑÙq¤ßª|s°É×õº¾R`‚®*Ì¡µhv²*€w€Y¼üÄ9„Å9¼L2чÄH‡Ë.òŠš1“Œ««jàDÌÓ~Ì~lî÷¾ÕL‚g ®š¾¿Âµ…1ihvìѶ)ÒÒ9üUhSî’Øé'áÿ1¬}§å>JIÁHmn5JãWJ|á4I&‡ LÒºRúß{õÎã ÏÀ§D§wÔ]^1QNÐb}ž™‘ÞËrâ²-«'½ƒ½šC á€ò´ð+ñN—Däá®tiriìj q½ì‡ [ç–‘ÙÉ´:¨PìHƒe¬î sVh¶°FK§)“¨ülþP+™ƒÂ·eÂI‰ ®|Ä™jy³G JÊS¾¢ HÌþ˜ŽûxùiZ^RIZi‡jüNHÚ¬ªÅ™á¨Ð:¥ü™„7P|¹Ç~2Ñë®azˆ§l¶^‰ÏK||Ì5VêÏ¥8‚°•ãݘï—ötýW²YâR­uäÐz`ah6’—Þ•auQ=…nñùîNOÊ‚$Þi쀑\ó=:¦À¥Í Ù´Œ£$¶_ü„M¢4·p𼉗Ó{ þÔ‚7•Agy ßNËP_‹ælÝDtT¤˜D¦HÂuÇSØbEñ-}%â>Ytb ø T©2±÷š¦È@%|D ôDÙ´Z÷ØñJSˆ‹#Ý!k£ùù£ ¸·‘›0\燘"sÈW= £<‘ˆ´ç=ð{;ð¯ý~žƒï'®À‰ ¿ jm&õxÞ4¾UXÉøÚÁqË´?» DêÌõE*è6%”‘{[ͽk_ìÒ«aúîK>×â _Ų ~žDužSý<¦D£Lk¯tž¸úùG,ár]ûËfPŸ2º*¹ý8('Zà8h¼eGåò¾±ß ñåÜ¥Ý;i-KÆÐ¡øc0øe›.X:ìØÜŽÆWîÞêi/|AßííÍ\Ø@óYßIªqé•<ârR4Ž¿)!Ù´N}ã s«fã×^êbþFeFMéf­›Íö¼räÑÿ¦F/TF áçðû¿TÑñ^oç:/sö> …€×:Z"£ì`|°«?‰³üû·»7ÿÒ.Ó· endstream endobj 2 0 obj << /Type /ObjStm /N 100 /First 810 /Length 2532 /Filter /FlateDecode >> stream xÚÅZÛn9}×Wð1~¡X,^Á‰³Î˜Éq€Ãm©“ÑF–©½›üýžb·nŽe%qGFà°Õ]$O‹ÅSÕMÊ(¯Ø¨ |VøçEä±"KÜøe4IY‹?RÖ§µèq©ØYeƒâˆgY9ôÅŽbV.dœìÙ Ÿª)äÔd¦õøf6®f£/À[M¿,'Ëýݹíþ¯zòáoh©ªÿㇺhŠëj¡Fóë«É¬qµÍõýzóJïßNÕyWÕ¢V¿µƒn;4L§ÙY5jæ‚b¶„5&³æP¿N¥Óùl4½YâÞWòð&£ÞªáÙ¤¹á§OÃw_>ÕjøÊ†èÛÔ˜IÁc 8¾­—ó›Åº ’”;¿×ãIõ|þY] ´Ùkqw¸ºNùr€q@ÛJ?›ÍæîB¤Ì ¿-Mj›\gÚ†ÚÆ¶ ·k›¸kGqmw×v¿ìhR¦ Ïo®šò ðq0|>_ŒëEÁl.‡¿_ O/¨ü%Gº@ד#¨iJEÖêŒàé\֔䞩ûwLO0¼öÐÌaú„±†Á°°swÃøz÷õ‹Åx-gÞ LåR<ŒÅö‰¥]ŽAû¸± Î(í‹ëí_žŸÃEpT®aø CŽ÷ÂàþWa\3BÿgÍÎZî×KŒ68ט€aËKؒ·½„û]ž ˜8Ò×XŒÓCéq‰D}…òe„H,•M:ƒmR°ÚÄ»Íò~òÇäÃ\f ¨¡ö…ûz ~Å!è\xhÒÞ¦;AŒ&M­Ÿ5×ÕâMÕdî XÀ­¡d«£,(Þik…ÁDÞø ØÍîóv>~9Y˜Ð”$,ü5ÁCmiP@qþ> ['üŸÿþ ŒLÖà\V3p·Ë}R`µÌÚ€ë×’£„º°#vfQ9Iõ±£! ô>u×IÒµî6ˆ»YÝõo‰F¾YÌGç5¬ÆòâL ßÕŸ›Ûà•‰á6•‰îATÆ·ÐBËEB«KhÕH-] ­&±•Ìm[5|ר]òrº¨ ;|Q5µzòâÖ O`ÊÄHsèhçã½ÏÞMš)ž¼U/Õ§¿'£¥úã¦ùtÓœ‹oFõBž"ìksÒÍ5—['»¦“UÚra¹IƒáëêZžáêyµ¬ËJÿª>½â}U5KãbøêôTU.¦¸ì#„Â!‹¼ÒYÍHë$€8äp΃ìÙ¿¾ŸÏL×ke’9∓„6kä® BFÇpÌhá2U¦5!…µ‰1#LÈíàÔ룖pÞ¹|L(Èô±u#N}@0%#ÖÞ 4ç¨@8!Wà 9ë ˆ¸ƒM^*Ñbs¾yFû(‹CŒÙ‹MXK‹gíaª? È iƒ$ƒ,ÆÇ@’0±‘:¢Š•"Ÿ.…l$wTîaÁI Î¥P1~ ˆ@ü&ò±-…s Ç=D¥z¯lÄùe$Ï@‚Ž÷É":úXJ‹:Z·ŠlS)öÝA?Jí¯»¦,Zݦ%Ã3NB{ºûV%»êëTâÕ5î‡ÕuTiÅ€ÀAÓj^Ë*­æ²FåÕ˜RÍ[“ÅkÖtèÏ?®þ# )Ú¼º&åâC˜QºM•¤°ù®[[H‰·P VÜj)õݶ¥®í¤ w­ëZßµ¡kcצ®íÆ£n<êÆ£n<⇊nÅVFJ<ø\B®½©DD&MßKÙû‰­ém”ðž¼f°ƒHðÿìŽ %É”(–¨ììG€ÂØõ΢›”Ì⼂޺¯’÷ÓèZÐòÂaŃe¦£@Ù%Ó.qIý}tÅÂ$±Ç§°—ô_àè5ylµìs‡£°j< cè¸U1‰¼–Yñ8÷2ÇÇc¥œÂ#—÷ERáb©€ö¨´€ÁŒß@qØÃòžê(Pv½váœE‘òˆÔ_q°:éŽUDË õÞ+äž:âÐqAjÎ¥D—9j<…•—k$HD³¼*>>›àŸIJÎðV2Rìì(oÄF¸ÊK$çÓé䟳ÆôXi=Ä Ž³ƒçV´e¯MyåNÚÈ·”€Î:‰T.lŸ…Î &ì”õÈ}êH´ëµ!kcݱWÉEc×p¼a8‘ýq8àýòAÁ7¤;bb–o]œ¿_Ü^N­œø \‰á†û¶Ôd;ÙJSvÒ‹­Ôd_ª±²?´ö®œe+—Ù®ÎÞƒühraóWÉ…J.ä‹–ßwù ½ò|pµ \ ±6ËW.ð+™2”EÞïªçõøCý¿Éèc6}nÒòQË Œ$IÈ‘Àì7¢ÆI¤<¡ÔÝ@)3b­5Ø&þîBWS]Moʲ3lú¦½»#¶ÿ…Åm9„íÀ.¿/ÿßÞûö‰ä®ò5Ô[qO¦¿½··ëö;M5àGwÂóÃRxê^ïôô™…œÏ®|ž¦ lÀ®uáy)Ýã9ö¶çð·Eým1²;ÚªhqÚ8wHXj¸ ½œûÃwê]ÿØçE;!y¯m…áÒÑA'Úvºu¨öuÕŽC¹ü0‡ê>ô¡îKê>õ¡î[ê>ö¡îkêªZÔ}ösÙW&ÁÐ@¥3’35Cš^’@¦{¨ÈóEU}L}’z+¤>o8!õù1xdYÉndyã{È›jz]/zMÍ»÷\+$«÷\ß åÿÊÎg endstream endobj 167 0 obj << /Length 1492 /Filter /FlateDecode >> stream xÚ­XmoÛ6þî_!d_$,RDJÔ˰dIÓµ°-3P i?È2m µ-O’äKûî…”-Íi¬lѼãñx÷ÜÃSBgé„ÎëÉÏÓÉÅM’;" ò0ÎtáÈ4 Bå¤* òH9Ó¹sç¾õ„[4ðUy~Eîï0üŸç·¾·Þ‡éÛ‹›l`I‰ W°ÙHQcšÇÏWÓ‰€Aè'Nœ‡Aœ¦N¹™ü3 T"â„„GCÙ%fââÍF:×õäOø³†­Šfý#»tò»p°@‰ØQaÐz}C‡îrÇןäwž‹ÈýíÊóe*ݶ„éšd-ÏT ^]]ò ^ð³ÙJ›¹Æšö12à¤/À8çÉL±ÆxKwŽqÆÅE0ˆâÅM”9y'2ÁøRI:‚ÅA "²tû£ç«0t×Õ¬)šÇ÷¡ ïõ²ØÂ@ô;c¦ÔP^t)nwº|‰~¹Ò›çôë¦Zòè{ŸŸe9Ø'?ñãrÍÏoùñë9?Ç›rbL‚H%6›Yìî·Ȳ3ѯ r£ÁºX™Ê-tÁ¯SðƒÈjTG% Ž• ¥¡VíÞ“™‹åá?a1Ìú‚Ùc!ª¢$tßyBH÷ˆèP\´,A èe¿†o1Fª@Køy´{}äÁ‚½ 1Ö¹†+¬k˜|H=Ô$`€nL3èôÕea rš¥c‡·¯'ÎDZ+Èg‚Îgów(L{¤‰"n·®;Ü‘gð3¯ÚÙáÙº<;?›íÎÐì3h2@~‡Õ\`è¢㚺5E}Ž3Ê]av&¢[žÃ„`"¢„"ʰX ËËzƒù™YAq€iËH%ø¤€ƒ™AÀI‚êF‰œÒÅ•M8ä6Õ—ÐU£F¦FÄOèÄÒHŒQ4Tu´óM²ÿcëeÎÁNFGŒö“GéåÒD3¥nuº4¡‚,í«¤-6»µÆ >‘´8 dÒ—òŒÝYS ìN»Â°÷‘i™v-]ã˜N87§(uûò|‘„ˆc@9`5仃ïÛ¦~sísüÙ®ö‹Åg ô®:ÿðIÔìÿ¦ÃŒeÀM˜Ï ƒ ŽsWa¥&T6¿™³ôA Íc¢,To ÑМØT†}H†ûÛí #¤Ål°¸Å„0ç,¢tAB# g(CHswà3Üû…\”æÂžä"K À²9YI-™ÑO•ÉxôZÐR>ª±ÈÅÔÝXÒ³Jd’ÂãÕä¸ óU™xþäñî`aL.Ge µeº¨Ï$Ž_Ìì‘=fß5uÙìÛN·ø«ßy4b|${ÜÄLô¨¦N(~Á¥`ZŒéª$]rÄñBÎ3-æ X¯yÒr âÔ¬3$¨íŸíRôl]“¶<¬5Ú®ØÁ·a^Ì3J̵€ØÇ“¤r«ÑꈟɋG–]n ®Á(1ûcÐnáç5âìr@Yãf¶µØ*æŒ%¾P"÷ &±SÃçK°£ž®Dÿ¢ Ù·>0¶Ç&øòƒ.âS|àe0¸#î´zc¶5zT»ÍN Y»™ÿï¶÷©;âåé}Ãëj±ÐÞvGκÚ.?·#O~öx_ùR2eÇýg0~ï©ÜA[ÅÌÀŒHJ˜#ð¡(2I:èxD oðjðn2Ç=øEÓ·òA‰î> /ExtGState << >>/ColorSpace << /sRGB 173 0 R >>>> /Length 860 /Filter /FlateDecode >> stream xœ¥VKoA ¾ï¯˜#jÆöNQe#h£{„€•<¨Û»R"S¸è487³9ó‰1q¿‘3Ÿ5‚áÅz%~ïÎâÝÌ¿Ú×àïž6‚º{œÞ¼#ÉÔþ§B‚Ê(_… Æ(f@Rûõê‚^«ýýôvŸ_}Z-C ^Ç•‰©M‡ã?©ÌÓãhÅO*­ÍVÉëtM`æC#ëãÐòÿœl·yý÷8’´“Ksîv—çD*?£k/©ús°â êfëÓ ÔÇïê‹z]¥Åœ´¦Þ^ª«^¯Iëš}{1¶äÙli+•áy&3‰²Ø¤Ú¬#PI†­DnêFZ¼õliU´ãº¬U„1U"7›ÖÅ^²F®•ü°®•ÔzñÙ€õE—GuIgÔJÕ©£‰qܮ˯°ú¼¹R¶ífŸè¹j× ÛÕ,É+°Æ;\_’…ÀV¹–‹Ù3RåÁ‰Ù •*;ÇËbò  =›+pS×ea‰ZWÝá–dk3ZJ•})ÑpWp˜W'•n¶J1OËPr¸¶ì8?¤=b v¸>lBÒA¡ZÛáò°LËôÉu+˜øw¬”×›§–¦áùIgK3ÀsC›•m+8NZf¾¢âpC‘\ª‘¥'1m䬻 4ÛC ËZ|6RÚ:ó³nø6 XÔe?£Ë$† +Û)ÃÎ¥;;ý#¦•Ä”Ž8LKÞ¤M™ÐwýÎt‰Ë•’V*ÚùT§r°ù„ö+ ¡9†Hºà{† —á €8û®xtÜR~.g\Õ&&í8ßI:߯çc‰^£²†²’w)~Ô=è®*I ìzÔž½H<çbc‘¨,”& v¹ :/^HåJwË}Q$ºûâfú ÛÎ endstream endobj 175 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 182 0 obj << /Length 1424 /Filter /FlateDecode >> stream xÚ­]oÛ6ðÝ¿B2V3¤HQR ÈÒfè6`[ê=µ}P$Ù&K©d'KúÛww(lü´øq½¸ºM%E&3¬7Aª‚$ND¦ã`]ïÂtùaýóÕ­ÍæDY*¬ŠA‘¼Zª°৆ÿm»\i­Ã=¦kDEaÞ–nƒÐýü4îð§]FIx€M~Ùf ƒÐþ‡¨‰>.£4¬¶y‹F/$;é×3OWìÅ*2™HqÎÜz?Ž=*ü¬_.WqbÃ_o@E–…úÔõëH·a̵ßK• gÉPØ?,Wವ‹˜&­”±ÉœâÒ;‹ë_¯ 62PA”d½ɤ0IûÅÇ…ˆ­2–(f[By>\½ÙëàU·øþÎcãIW^Çj¦äb–+E¤8KîÁîãÜÌbº½ºéޏ(³>pÎÂ<ù‹lÜùžÃD‡c‹áÂl@Y9ž¶SÄñãöîýZ¸Ó†ÞÜ\;¥_³eŸØ’úDOæ~j£E%>ÓŸ*Ÿ(÷P-ãîøNÂcŒPväj˜©Eî¼w ‹n¿¢4Xé423§Ù€­ÛÓ:À|³6ç}}9tFTG‰ä‹€”¤Lüe:jJ@<Û0÷ú–LMŽï|óØÈð­K{€`擟[Ö…Š,w/åîà«×ò­áfví[Whêevµ´LVnÉ 2ñ…ù†M©Ys`Wä­Ã¡•ùq˜$(fÇ™78¢š‰©À:ŒY¤Bˆ‡1*\όڣÌmë/ ƒTVŽ“.ä+Z¨ÕqðQ2¼k¿h‡Ë<îQg~Ͼ6ÎÐôì%i‡uð¦1óYîˆQŸ‰uêÖ3]ä<¥]#0‘Ô“L²±á_h‘H>§-Y"Ð誟æD;H ŒÑÛŽÚý–¾ÐÞUhÈY×\áOÄA¿ üö„ʘ}‰tÅ/S¡L@ ˆ9Öú¤5ŸW½H4”óD-\kÐi‰ÌF–¦ŽV‘H;ZXËýóî(&)! õÖÇ|Ž¿É›æ¥#)Šü½Œå¦ë÷Ç&w°ïÝò]lx€z£Óg·\7nýÎ-¿¼pkIxÆ\ìª=Wd‚ÍÀŸ”ì@ÿÐŒ7mÕjæû½ï:8â€Æó]Þþå:šçT bÁ¬»Cî,‘a$dª#¸.dS@rL´Ë ´¼CŸ×-õ}dĉd%3Âø‰Ò˜1Ñ%¶Å\„’¤ÎÊ$E$‰ ‘:‘a/¸ oZ÷UÎN·’¯¦k5´¬¶xö€j³©‹ºj³[õÑ|]écÞ+ w: šÌF@þw5¼$˜Iú,N7׊}€­‹ÄêÚÊÔ ”B©8:1ê›VÛ±KÂ(>3 í¢@£Y~§Çwñ¸³ã.w©sé’ ð)œðNEFêñ 2›M‡$U“ïq$³)©‘þ‰iÍxHb›\J,,À·»îɇ¡k¾qVM‡âÓpõAr}-†Õð±öäåö0쎛Íïïjnþ—N1ªNNx"ªkÔâòݔ˅ÎÒà‰¨öJ,œñ©Ôoá]JOÍH1tá„f¦…[W8ò3kÃW·´@š[ãº/¾åµH%wßß m2!~`ôüÜÓ”q+Ž·g‡?8Ex¶û)‡}NóG% ±^bi‡š¡-Rk긖#xôäß ðY9åÔjfÙ:)‡Ùs9¦§'aÁ^TpM¿ªF#Gõ“Wüi•Áø#1¸¯ú¡žÉèÍ‚èg®: qǪ“Ó`Ûy÷ÁÖ¸èÔ¨ê+¯Q_FÊùñÁŸy*tϨKßn³û‘ò² endstream endobj 159 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpAlTV3K/Rbuild34677effd016/vegan/inst/doc/decision-vegan-007.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 185 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 186 0 R>> /ExtGState << >>/ColorSpace << /sRGB 187 0 R >>>> /Length 852 /Filter /FlateDecode >> stream xœ¥V=o1í÷W¸„"Æ3ãÏ2‰)¤“(U€"ºD‚ü}ž×^¯ï²9QÜZsãç¿ù2©+EêNýš®ñ{óøùý…º¼™Œ6ƨþ{sù ÿ§þL_¿)£¾O¤®ð»›(oP'5“rI«î•¸ =Wq¯nŽÔU"‹–¬ÑÎ7õ"6=ëÄM¿ˆ«>:ÍaÕW±éÜY½kú‹]½üíãÆåo¦7ïLí~*˜®Šò)²'-A‰hbµ»W¯ÎøµÚÝMowóѧ±XàLã`6I»ØÍ °‘t’û»â¬æÔaÛ… É1eÅ}¥\BÔNfªÔsŠ´j tÚÐÔU\õ ³Qš¾Š«^Œ×›¾Š¾¸Óô«wýŻ۞u$XÒÁ«Èšã‰PŸÈór"Ö'Ñ,FÛô|°O‚Åp¾ò³Ñ> ¨+³îZY“%P½ò~벯›ÄeóÍÜ„þ»™I{x¬¥$æååùKnš[‹_©øvY8¨z§s#AæÖå÷õE=Œ¶ÑbNðÙn¨G©^Iër}»).ä>ÓÕ[6¨Œ‡LÎbÎR‹%Ñ’¬,[Dnb“×&΋¥›F¡l­ùÖTÍÚa¬ÀWRd …’äÃXŠ1G†ht‡9þO³Æê˜ôÓR˜aØj¹¤ÈEM…(Çz—-¹î†=vˆåÆ[; o¶’-¨¤˜AÙ*Õ^ÇoëµÏX›stŽÏ0–eNì9LÅgOG\7&µ¯vý¸Ï1Wœ°\ì›õAGÄÇ#¡Kli¸ ˆ0“0_‰Z»ÞìbÛ»¹9E£¹b‡CœÉ‰!ùMR¢Kãe€99*è@•)÷9¥üa,¦Vý°Ý\Î!Aâ’Uã .›4WnM*¯!”n (%ÉÅ?S5\DÄàÝT¥‚mùØÏ z25ʬ¨½¾ a¯æòÛ–‡”°Ë/Ƚˆ—Ðt´2^nÈ?·Ÿ<|Ÿœ VýЂ\SÎY¡ýƒ3w@–²1¿®ó™[טá"œO0ìJ?ß¿àmŠ.ƒÚ!"%>t|{>?ÇôöT®C$¡ƒbÒtC÷p ¯c|KÙqˆYÏXw¼¢Úè·xê§ØoXÛ=1mGwÆõô©šÇÇ endstream endobj 189 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 194 0 obj << /Length 1504 /Filter /FlateDecode >> stream xÚ¥WYoÛF~ׯ òD&Í]îò0š© 4M\äÁÉM­,6"©”å¼ä·wŽ]Š”¨ ‰³×73ßÎAEÞƒy,~»]\Þ$¹'¢0ráÝ®=™Fa¤½T§akïvåÝù¯—Â/:øª–AÇþ_ ~‚OóïfùñöõåM6CÒ"Ì5è!Œw,"«øôùòv!@ˆ<áeÂSyª4õÊzñyêD¨„'"-¹#vâòU­¼ßÛÅßðï€Ý–`ƒ .y>3 µPž–"L}C> ÿaÞ›¯êjˆ(Öþví2©_¢Ÿ=²1¢%HdN“í€ ¦mx¥]ã3óÿ¼FRÀ¾@€n•³Ò[RHJ¥þÚªhk__Ãàˈ¥TÈЊ.tnyºhV,ô›%hÜÃÒ:8§õC$4ª\áKEFáìÖ.oâÌËÃ<‘ 2ˆL†iš±1LÚ`yÕ˜n¨Še £ÈÓµ»†è9ŽßÍ'Ò$y˜Z 0HìÑÛv »q§ £,–PÁH„þ†O]·M?tEÕ éF¡ÐIšÚ£Ω–ÚŽä9ˆšr ¢Ia.¹T©¶øRœ™ù]õü¬Ma=ï?ï‹Î¡ƒº¡jLS~qf½®ÊÊ4ƒÃ–À©Œý²‚½Åvo,îâÃ!Í /žLEB…¹R'd]¿Ö'™ŒàÜF`-OɘXr©e?2lß|Ï4"©­ÆÄšF–á>4ÌIñ(©QÒ£”ŒR:J™ujªbtJe™ÈœS2K5d&c7¹ž Ò$KÆú¸e")Êž Œ‘ŽÞmÚƒ£¡m¶öÖ­%˜ÂÄÏvËØ·84GÂWœ)»|ARe¬ýÖžÚ -Uñ-|¾pšc’o°fUO¼_‚‡X[°ÎÛJdkÎ*{~ËÛïöÄ7¼ˆŽÂÒŽJÕ=–{V%|²•NÍž3t¡Ò¦ÄkÞ ±±‚ï t>÷ñz÷ÄàÆ¾#²ç!7ï¹çsc° —ðzµ„—), ‹µØ ‘Z”Vã$L˜¦¬c®ûQ³-mCÁÑþ¿hW9±e´y˯?í'>3¦1˜¦ñ4ñ€­±[Î ÉÓk£òƒ™ˆ.”æb²Û¦&l@~«Â/'õ !6­Ã]ñ$í¬mðîáØ€h'Éþ}í°«ÒÆ#®e¹wTb»âJ<{?ÂJ ï’Ú¾L¾ý•KøPïl}ÿ%àg·*°Î= B¿3%O~åGxÁO\,7¦vUÿ´ËLÐåwÑ懲ÿKîk˹œéöý@=)êKh$¡§|UõÏŸmËgvXnÚ깸 •Ù¹Ù9ùç~dh]> /ExtGState << >>/ColorSpace << /sRGB 200 0 R >>>> /Length 1549 /Filter /FlateDecode >> stream xœWËn[7Ý߯àÒY„!9|n“>€-šZ@AV® $ˆTjÑßï9C^é^Ŭ»ðcÄ™!çqÎŒ¼yo¼ùbþž>àçÍá÷Ÿßšw·“³Î9³ü}ûîW|Z’ùoúøÉ8óçäÍ{ü|™<Ì/Sm6$“šuÑ<)ÐnCüjnÏŽ‡ämí§9gñx·„ãù,ÏÅ9Ýéö!žÎ—Ï9½îxþv7‚¿;<üáîqzóS@¦vì8迺\ƒÞˆXÌîÁܼ¯ÌîËôãN]_¶õ)Øê–ÆþåÆ!d›ëÂØ]aÛŠuea{Ž’‹ia{ ¸'Ù‡`SC®»]¤"s}~®Eââ¼ÛÊ鼋§óÅJ:žñt.xY‰Çó!žÎǃæóÅû–±/~½ÈCô¶dã}""ž/÷eëš­— õ¾h²"àÙ‚_4Qx<[ñ‹ÆØ*õ©’tMÑ#²ðVÊ¥s557Ñt¦ÑïDFÍõwúÊdñ“¦£2ˆÞÿè;aŒBHª1iÀƒBµÉwŸ)Ûà5’ÐÇ/¸u)ÅÊð™*[”˜Tð¹Ö€mÅ»KÔ‰ª±ÇÎSÂÄ3öd·æÄè±'Í_öšéL2â  Œ‘ôðN [¥vʹh¿´ñN8c¾ªØ¤u_khÌEýŽ[mцq†ËÀÆ|§F&x~ìu@GÕ@@|çJCåìt稡¿Gü„âÅÊwÂCpZþù¸µàN]ãk œcª{•‡¾S²­Ù4,¡b&4K`ûè+£f $h}Q[’­»óZë$5NÁ*nž±ô°Qަ=ìµ†Ê “P«¢Y!”5°z¥C(g•[À£¶`×!´Ð€ŒÚ£\âç6òX3A"D´äE·伤QòF–£ªÏµäÔËY5úv”(øÙÌJ¥IôŽØ} ÛKªÀìLgðà™]ú”Òó+)PPò¬ù§9Ë0SK¹h ñU+´Ò€ nL:^ÝhM8ƒ{:›¶f¶åË€|!qú\­úZ²þ#;øÙ*ƒ ²Ã5ØË½F’3ëNê$ ¦3 ȵg/ÛÔa)±’¼4²ó çXp@82Öod}îQ×\5Ÿ+ Èùô˜uø#Vn·^;ÅPÆÆÎ¦œk"lü4Vès­Y7J=tŒl4§¤Õ’æ3²3P1æóéù‰Ú0Ÿ+‰ s#íew ËÈ뙤uG5;3Ž$Íùªês­¡ öV›ž×“™œb; 6.òLh›ž3'ÀG掠†b“8B KÏ'yØ5…dÐ^ê¨ð0 š*X$ Šð¹ÖPAÓÑ:õ[œ€yJ^–xêO§-!1)kMg@SÑCõùôþ¢«”û˜ÙíM"yA£ÿÃiîROiߨ¿r{ÂñnÜÄ.˜%A;ºÁ¼o}†_oŽ¥G;]æ¯×™Û¤Tî-nçÍM‡¬s[nŽD¹áöÌÂstÊ–Ô9ö¨ÌyÃí@`N[¬½2)çŸß’¹¦_89 cÚ`NVæ„ò\â®6ìE5÷×6Ä•x¤éV}½ySž’¤›Þ†Ç7¦œ*mÀ+Ù€óR8ç®7Ç@ζèMmƒºWѲé´(ºŽ„ s[ß÷žñMgÃíøÎж‰ºî}oþaú&%² endstream endobj 202 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 211 0 obj << /Length 1840 /Filter /FlateDecode >> stream xÚ•XKÛ6¾ûWè(#Š¢DE¤É&)ºE’ºè¡íA±d[ˆ-¹’¼›½ä·w¤${µI‹ÅÚäp8œÇ7áCoç…Þ›ÅËõâùñd(²0“Þzëé¥:™ÒÞºðþôe¸ü{ýóó›$›rÉ0!Bfzµ”~ÙÁGÿ»z(¥ü‰$º•¦îp)òóºàR'ø8”8*ëedü†y?ì™H£¤à¿ãœÖ,íw—»¼F•¡µÑ}_8‚H%"ʬ½7Ίs‹'~Õ«%p*í¿‡iÛ,ƒ(õÑ(\=£a}ɺ$QFÄæ‘ú¸ÒlñÛø¿ü„º>TBÇڡĦe/JGƒUZú_¡Y/˜Žrˆò÷%icµã-pöÉìdÊïô>Ã`Ì)ðW(5žnÃRþ¹¸ðãëõB ô¤¥™ˆaoœ…"NSos\ü³:‘qB“!-¹}–ðüÝQ{¯šÅø»Ž’c ÜÁä‚«†e)2­#‹×8¨*Ö(P\Dø± tB<3åç0ßôìã@¥±¿A(‚Ñs¸XÕKÅNíîPgE¡Ðö„w=€ 3äÖ’`Û1b’ÓjÊØ([ÆF”ø9±ïJ"Иâ_o¦0H¾ßOøI<Îx~‚¯ÄG!íÖÁçÈgml²ñmî áäæ'Òp¹iµDˆtŽ}g5¯mÆÙƒ›ºœbÈ&êOœ¨tˆŽ·»ó®cúÝR'~N Í?ÙŘ%.#³mèÜ®·ÉfÀú€¡M¤¿v9ÌäƒÖ Øï‰ÇËå”p„ÆT2Ö¦/Îû‰À‰Ö•5‚ –°ëQÌEäÅpð\‚®(ä\µÈ7œ]ð'´×î<7üøf;~æêQ8R¸žqjö +¿$¿äŸÝªâÀ®jš¬—FYqÊòºFÎkA{efÒ n*.é¯8[ ù2‘%Qâ²E‰P¥lùÇ9¡¦ähuq®9ØÎK”ËO󊲾{ÄŸ\òwçã1of·¨X®ò£N/j1n¼mª®?·%‹¹Íë|WÂ-ÔcáÂï€H}^B69 Œ1—šßV5 R⦠‹„ CK’«$¢œ—7+e…¿Í¶Uy(p¸ÂU2ç )@?œ…• ÀdG«ØÊ~{³Ò£ìS–­Ì šsàmYT‘‰Þ±ˆÙñ*²²½åXöû|â2”! E©Ëøq>©ÿÛ Å±òÍ\'$f5{½^ü ÂÉ endstream endobj 164 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpAlTV3K/Rbuild34677effd016/vegan/inst/doc/decision-vegan-011.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 213 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F1 214 0 R/F2 215 0 R/F3 216 0 R>> /ExtGState << >>/ColorSpace << /sRGB 217 0 R >>>> /Length 1103 /Filter /FlateDecode >> stream xœWKo#7 ¾Ï¯Ð19,W¤Þ×Ý>€-º{JS`ƒ$‹Ú-ú÷KRòŒ”Mža?“”¨/ÍAó`þž>ñûýé÷Ÿ?˜·“k­é?o?þÊ¿¦`þ›>1Öü9¡¹á÷Ä¢`~™²‡äM(`½y2.ˆØà£¹}!n!W):D³ø yFHv‘78ËÉYÀ<ËÏp‘§ 1,òg¹£èï\äýq–ÓÍò‡FÞÝéòNwÏÓûŸˆ™>üe  êGÅ)A±†dOæê]¼6‡‡éǃ.½n‹ÁåÞØo0Nrìércâ™ÅØn°eu¶öuä ÷tm8°KÔ³53]££h=µX{Ë^ñ ±Æ¾¢EŠèÁ§YÜ`'%,ò 9!‚w³¼ÁN΂‹¼ÂEîlWfyƒÝ?Ÿ¾~{6¸QþZây­q™9%˜ÓsäB’6ÔÇ{ó‡y¾t îcÁ8F¯ä×gâ9Tß·œ&ézÎ8ð‰4 ¶ö?r̳w4v@b°ôËY•u¹å 8‹=ŒA:ψuøžÖ…™µà‹jô¸j”Z„ê“hôX50 Ã䩺?bÕ fÇJRë%‚C[¬ö‰¢ X׈êæIºôˆë2g{,³®Ñc]ƒK’ïFXÑq½ìèíHj·8 EUÎÖL5ö®Œù*çÏNëq=K/qàÞ”ô,=ÖKQô)ä¢1bõƒÀ5%W¨+X2ûE‚ð5âzñ"Ý59ðª1`Õðì9uÏÙ©®—;+)IÂmŸ¼m»yà+SXœÜ‘7›“Õ‚ «Õ·c÷¬»g¾¯îp^¶åÀ#×~Ž;vçÉ#.YÚa~nñ\íª¼Íœ“7³óÙ ƒ;ÒÆiýðE¥ÝP¶™sÝ9)P'Sr³¹ãæ %“Ô‰íg—îLâö¿csâñå½Î¨¸#ko+GO(-j»¹wÒ„O²Êvs™¬ÈIg¥«í8{;î{Â.³P&GßïÙg¹/Z1¸£ÕÉÿ1þ?E|a ~ßî…ãNAß›šþ² ™ª endstream endobj 219 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 226 0 obj << /Length 1964 /Filter /FlateDecode >> stream xÚ¥XKoÛF¾ëWº”*šûà+€ 8NœÄH›4CÓE­%!©’’]!@{ç±Ë‡B·‡"ˆ¹\ÎÎÎÎ|óͬBoí…Þ›ÉËÅäê.Î<Y˜ oñàÉ$ ÂÈK¢$ÈTä-VÞïþýLøy ¶³¹RÊÿïð¿ÁùÒÀßröÇâþê.hŠDE°éE&¡Ýùòùz10=á¥ÂÓYè$ñŠýäÏIÅBÇô±7¤On‰¸z·½WÕäWøç;‘9¨÷ôÒÑöÂÉ‚Hh/’"ˆ5[}G‡þú„Ç7Ç/fó,LüøZÍæ2ñ žÐGifó(Ö~]á[~´ë«§#¿zàÏŸgBHÿ]ÖÍì¬3Þ²)P¾vºRÉ‹ày{{ƒå?¡VT½á<„ü¹ªÕø§Ìw8‘Zɔð%‰Yaˆ¥¿"ëó`´«;•zYÅ2F‡Íe$Écs[YݧŸ`·0ô»êø%ŒÂªÞ®ä©Õ¶9ìòóõô)ŸÚ©ãù`®§‡j[›)ˆ‹ÖBÄN4TYÕ¨a»2õ…â¢Ú]Ok³úO Gó׈Q×Ó¢œöU-w'Óêº@ h–q„Š5/6Ö× ‚!î†Q?*ø“…0Q®\:­Xði0ÊñÏ™'0àø\mm’v¸„%x»rÍ"5f_ƒÑÛYýÖV‡³aUãhOëÉÔxD9 /9j@ý ɃCd“JzÌæZjÿgœÙ:Àãֵὠ2 n»ä;5pž Dºã„ÿÎ̤yIîQ)CHVå4Êi©V A™=žM¶gƒá1… ýòˆP#µËô%Z‚à‘™tfÑ¢‚<ŠºnIn3Ýçj°2Äìp’mÌÁ¡‚Hìœ]œV†…mkžxÄfm.©Føª„ˆº…aM™v"‰‡î–J6Åðx_õ^P̥¾€S´ÖþòDï$ÜÛ¼U`CÐt[Ñþü Ë o蟂§ Ó•Âga÷ªœÆ&õ¿¥7ŽJñX`Iewþ”…VL³Ú­=„és¤¥“K Ì:,€·0¾½ l”âiùA…Aâ<«0Š#‚ürK¢S®q’A(YÇû[Ø5e&(ÚÊ ÒüaxP•KøÒ#\†„oOÏÛ51¾Cé±8nw!.0+ò2Ð „,Jz‚)Ó1±+²é#y÷À™E;˜n ›ýÀOdG‘Ç>£4ñß=Œ„匫ªèåæŽ2/’]¦ì1QcÌ $°%6u¢­çP‰Óˆ'¤‰ÖàG öš¬Ú›þÙ±À¢ªÇYCHP,_¢9Ä͘Š"¦Š/ â“Úa$qÆ¥Ž—”‰Äð†­k·ñû>ßGªúÊ‰äˆØ¬MJ¥Òv/œ'Z*]:×¹« ܤ.=I…KOÒÑð³i+ÊŽù‹WUÝê]A(5Ãþgœ.ríîÌ/ ›ªiì1—„HtfrÕeNy mÆ&‘TpH Gýdù3íê܉™‘2agëjÊÇi{ ã¾Ð1FêSq; ‡š#xÚb`‘pPóH·ëyë!zÒô¹­ã =|³=f –šÑÝC'LÕ-@Ø;ìÁ²ÀvOaw8³=Csûž²%H™N‡žf佺*I=ô±-º|­ü·Tž™Î8¦hËÜ·ö¹4µf×üNÖ~u™ÔðäÈj¦ÚmAæ®Ý¸¨0\öðKÓ/‡Vš»ŠÊ¶êNªÇáJZÇóL1µî4Ò«5:P:¦Z#R$±‚Š= —{]J N޲h½þÝëþ2ho±ÁGe7Žãö”ÚP>ÛÃð#õ­Ç¶p‚—{×Qк¼„ñ«A Y¦¨žpƒ÷ ,Ò G)+qß©îÊ×É”±â£Ñ‡®hÉ®Ëe)ñ” CÏAQì-påŒ8æäðV•íæˆXöÓ ø4¶®v­±`ja,ý*“ë=E‚J®±ƒÜÆ…wÛ²y@} Å9Nú±Rd×6 cDØSbÛUøX£ª|$­µ›U—Ú¬?d>ðžv(ŠGô¸ëIÝ£<¢JÔ7pg0Š0Ht¸*¥)ôògoˆo\fG­[p¥ ý_î[Rfþëasán-kYyóž—YpÉ0¸„Î\¿¹Î'?°tKj :HÍ6Ð+Qýºª·½®ÛT\fÊbd–# »tÏ%Ïi»¼PÁÿà5¸6Ôî°qåökKrßáÍñãKኒ.ùm7÷CÓq`E)ô,¢2hXõ¿àI0ž¨øÿ˜HøŸÁ* ’4¾€\n¾I°ñX‰D©–CXÝ»–q½Ï1áNûé-êK˜á‰6`ü’²ЉÜâ²;Ëið•ù·ä—Å,UV§åSžÿ€ >±‚–ÚÒ¤E߈ÃeJ´íÎùŠ^A8Àvü+ÍÙ‚Äþ„ 2Íä„ãÞ^¹)ôÇ3‹¹_v‚*Ð*gÇ?:PåA= Ã(Šq§Vφþ> /ExtGState << >>/ColorSpace << /sRGB 232 0 R >>>> /Length 1578 /Filter /FlateDecode >> stream xœXËn\7 Ý߯ÐÒYD•H=·I@€M=@AV© $°ÔnÑßï9”æuëž»°=I‰ÏCŽ£{ç¢ûâþZÞãç»Çß~zãÞ^/Á‡Üéïë·¿à´f÷ïòᣠî%ºwøù²D ¸Ÿ—’}).w’»sÚ³W™ä­»^±'}ܨÑç~`ïÉ#¿WŸåÈŸä/E}Êþž<ðUº×v´n’Gþ©¹Gëü7»œOOçñÓýòÝ‚HîþtQüdŒ_ƒÎÍ7qª>ŠÛݹ«×úÊí¾,?ììêçu£$FþDY.PîÁ—vª_®,%Pí¨^®«R|8µú‚wµGßO>8<2ƒø–‘¨Aj)>WKÔšoœä ¿4_Û‘?È#_þ$| j:ð'yÂøGûN}?qøõIRôµ¸ŽèÅg²ý¬r,ˆ_z&ÝÏj ºÝñÍ|?¯ŒÖÔøí„?«¬è[IOe|væ’bñq#·{rþ¹Â+r/|m ÷’VÖYœiUœFÇÚidŠõ [?\ýúðÊIpW_?=üóø÷Í£»yØŸàoÌîêñÕG·{÷® É œ"1ß¾»¹üüõÞ]Q|ìe×ù5‡Ø"î4Fš«õûøópã~w÷/ N¼ ÝA==ž†è}ªþßz“sÒ{«ùSá+¢¤æ20tlÃ÷“NO8ãu2Ÿ×‰w-ø,Â×ig³4kl ‰Íœ$ÅIò™%¹’—Ëh̲SxC^³øÒm|a¼d¼Q|‘9ßšÁ €ËJÂø¥‚Î^Æ‚;cE1bR*ïl€šjù.jbƒ«ÉNà8î<—­öf@·«ÝIÖqR|"zÅœ h¬#¨•¡xµ'žàÎs ÐÍ÷jthÃ÷h-ÍIÒ‰È"Á'¼ |Ë3ž¢Ô!p@ñ<—ma“ŽÚ’á;J ŒWÚ)90,£/:îL•ˆ+ìØÊ;Ï%F–Ig¦Êîd",ÉÁ÷Z}…ݹpñ4'y,žç q•“Íáa§X„[5 ¶ò9jôi'NPÔŒN2;Ï%A÷ ‚°Æ:ïTŸñ ÐG,ï(hEkàFev"} 9`´ó\4r$F##v'=Á êÓ¦¢5It¯ŒRR Ð\MŒÞÝrΉ‚7³Èí¾¤|JP,Öš´¹*èn¤ßZ-ðÛn\I,,|7S#1Ì’ò°Q°Â 7”Ê·Ç‘H!%1d¬£3 УÇëž «fÉ씣bÖƒœdÉNÚÈû™„å(ÂNÖNLjVKh´Ü-Gʱ 1jä(Xoïñx%a´òK@á8}d…I„njµTرX9 ße쉥ÎZ:“‚Å kÌ7 ƒdZèM”¡£ê¾–ì$[Ä#çÛJÂ&U«‹Žvrn”‘#ÁAú%Ö&vbÀ"94‡¯.+ Ж#º3çÛÓ ŒíRq.dn÷à2†Äø@Àw¢ ˜‹Ô-×'°w‡UìÛêì’:ëwƒ:;! ¡¨é/W猴ÙÌÏŒæ4a9êã;ÓmhY6¨ãÙ¬éæ—™ËÔ£œ¥-ï¿S\¨>@%šdƒ:ð!È{ß’÷dÿaKŶÅx@òžtãë…øÌ`R]®Îí5_l×Þºn  6Þuµªãpß’wÄŒ¡õ y'’͹¶¨ó{G¯‡--“9H‰³eKÑm5YÃÖMU—¹p*nòß °¸rΛ6Xanµ§Šöýò¿L9) endstream endobj 234 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 237 0 obj << /Length 1437 /Filter /FlateDecode >> stream xÚ½WKoÛF¾ëW=‘@¸Ù—ËõÍvâ A¤©‹mz`HZv#‘Š(Åp ô·w»”dHm.- ™ËÝ™Ùy|ó Læ‰L^Í.®gϯªDIá¥WÉõMR©ÄY'¼±Éu›üž*ýqýæùUé÷©”,„„-ÉD/2•v#ü»ƒß¼ÏrcLÚâfƒ›ñdèG<ÒiÝ·¼ÀÝå þ-:\u}¦«tËz3ñìI£Ü]Àoä|íYÚ7äîæu*Ïd°1>ŸšGrmJ¡}°÷*Z±]ã¹³,WVºôíe–We‘¢1Ͱf‹ig¸Á§%½oqŸ_QãmOï ¨+#láùž%\·C¦]zŸå…uiKF×øR¥[´mexoÀõâ©Më›ý¼­èµÝX³¿bñªutgZàŽ8ðÜË뙂…LT¢H*¼…sI³œ} [ª¢$н%E¾°ñüõÒ%/†ÙÏð÷4.OŸ‘5wæ{—la½°Þ°™ï0>—Ûà9pÑ*½àÇ'i%l*ï,œkïÒOʯûORY ò!sCÜ’Œì¸7 ¿Æ>`¼~ Y“g)°“CëS¶Ó5‹"XÃãV÷Ĉ"šHûÃzójj†·‡Ú!;ߣҜÂξáØP?D0þý2Úí»Q{a”Ž ý²É¬N:d¨@±8ßXa'¦gA®Ü§(Ei‹Há@LuDŒÒ ¦ØÉ¡lÖ¥rºÔFMç$÷…ð ó¸U°ô=¤^,ÑI˜ ^ >âÒìÅßìâï¼¥ø¿Ç¸o²bÎ\1¯yod©w=?;.:\„ú3„ªäRµÙÓ‚*FÛ…¬ƒ¢â r\‡r|5ö[fK hDϼãB‡ˆB”ÔPÀ‡žð¡ö˜ò\§Ž¢ˆ4nB†@YØ¡èÀ¢´ÆWÿZŠF‹VöQk#O¡Ey%¤´.%3È%-{Ii@ˆ6™©*\Hjè¢ï˜\¯knIÚ3eá4µSxÂÙù3^ÿBi=…áX¯ïBúÃù[xXñ¨¥,wx4%×£s&í1R÷¼®sŠè]×í’÷7äyZ6Ãfš$ÕœŽoÛëO“à‘Ï}DÉxND»œ€D`¦ ¶eŒ%ª—“Õ„¼X°TúX*Ð/£¢ëˆéî „_ÃÿM÷÷T>±9ÂË //â ‘ÙXãÛßêÕí1¼*U@ßñÿŠX) 4§kž ÖkõcÖ)¼ ¢¥9Ä+âªC´Î»{öÄá ËûÀÎÜÕ89aêX K%ªmç™¶˜95ôYZàÈ8hÁòòˆ®®˜²p\:=oÛàþqCÚǬ* ¾‹€»‡¬2éÉœu•€pXâcU5Á aê/üv‰`¸âõä†j?µ\A©uJ(êÖÄ.mÕA½\Q?R,/»bgÛJzQq‚eÓ=¯»8RÆq!äN³a_ÓÕž–áü6_·ñF3ÐJË% Œ OÍ‹ÛH¬S c4Í*A Éœ¼ØÞq^ÒÆt2“BœãO÷„ Æéê¿î %ˆq?Ú”*Ý£R0F2‡¹Jx â€.¼(aîÏ­N–1¶pƒUeÈÙÜÞ…,p¢‚»uì‘Xhú³# áðí Å,öuË]ÇøÝ‡Ñ$¥Ï©ù`À ºùÅ‚J¿L•“žWZ*•Ë 9” ‡ö¬¨Î°“¨ßxçÏ©ã _ð€eYÉtàÍm¯ázOåŸÙî§Î‚ô*…ÛQ3™;~›>¾<”Ÿ#ß¿ö»©g÷7L‹aõdb¦¸…Ü¥~ ÕŸ©bP.ï7 ºBèð|UC•;âøùŽÜ çm€‰Ƨ(ëh%‚¡¿^Èó endstream endobj 207 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpAlTV3K/Rbuild34677effd016/vegan/inst/doc/decision-vegan-016.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 239 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 240 0 R>> /ExtGState << >>/ColorSpace << /sRGB 241 0 R >>>> /Length 633 /Filter /FlateDecode >> stream xœ¥V=oÛ@ Ýõ+8¶C˜#ï{LŒ¶@€Hm CÑ)mà ÐzèßïîÓª HÎ`ÉÏOO<¾#y&x‚#üÃçöüõÓ=ìöƒ@!ô×ýîKøÕjø;|ÿ~ás(>Ÿ£PÐ…‚Æ¡£ O°ŸÐºÄid[éo4z×ø +ÏdÐøÊØxcQ‰ÆgXyI©ñ6¾O§eWùûC6ïé¥Sù–]o]ç×Mg£¢h¼á¨\ª™E9‘E¡—ŠfYú8ܪfQΡÍÃö/”ͲÜx$7­›ÕrIå|EtiCÊE>©Ú<§æ •©{*0ßNùá ,ïÇ#á̓™Ð„5£L¶ÛÝц\ÃWoÊK²ž‹>,úEKmc#çÛŸ_ð ^×j)œ —ùãmÒÑÙ´®¥ç bî¶3Â]:9BŠ/ 3Æ¢O%Ës6Î)elo¡ZµLÕ*×JÉ2IÏÛ¨U×G5«£æT]™ ›•Õ¤ÙZ›_®ŠEӖ붯–hTÎŽ‚Y¥vÑÖÎ]²×Û»=,ŃwÔÎŽŸùd*ê ^í0‡¹öS œzÙoZ ‚ÖïN©àšìêâÿÏb^mS“ª¼à7ôÍj›X†¿¥<:\þϬ]Ï¥°µ‡p=ià endstream endobj 243 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 246 0 obj << /Length 380 /Filter /FlateDecode >> stream xÚ…RMOÃ0 ½÷WDœ‰dq“´ 7¾†@H©à0º²M°u¬CÜøíØN'm UMl¿g?Û­3aÅUvVg£qXmQ¿Š¼´ÆQ†ÒDD=òFœlðX(휓wh¾áÛS|Õâ¹RÏõÍh\T `b@®Ž(™”ß—uhX¢‘Go ¢Yf™ ø‚Á=“¡]Ê]/+qÑe÷øì ï(Ë꽺<úA¿8™ àñŽÆŸÚóÔ gŸ4û](]”§JûPÈ'p¾_gJðFéPY¹~G§Ûâq”hM·â%!¥ÙÉ›ÑN°= (íc’|P9 ¸²à7k÷ ’ò»6dnäZé¼”,EÝ,’3oÏSrŸR8Ãì‹_ºž„\Ü9s·¹IQrçãK¡a/ä§fÛْΕÊ+æöÇ„UyHÏ ÙRHÿµí°Kçò”74…¿÷>ÝíoÂËä‰Í¿×€8ªó endstream endobj 223 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpAlTV3K/Rbuild34677effd016/vegan/inst/doc/decision-vegan-018.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 249 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F1 250 0 R/F2 251 0 R>> /ExtGState << >>/ColorSpace << /sRGB 252 0 R >>>> /Length 1155 /Filter /FlateDecode >> stream xœ¥XMo7 ½Ï¯Ð1>DI}£-`4\/CSš1ìµ[ôï÷Q£ùØõÌbg|Øõr(r(Š||2™CæÞüÝÝâóîù_ß›ë»ÎY眙ß]ÿާ)˜ÿºOŸ3vdnð¹ïH˜]*6ŠuÞ<A|0w'ê&‘ͽ–¼·9êAõŒ·Põƒ8éS°&}G½xg³ŒúAõGáNÑú÷‡–œ/Ï Éyþò£{÷ #“‡o†Ø6EÿÕˉm"#b‰ÍáѼyËWæpßý|¨®ÏÛ’dëdnL—3¶’ãÌØm°EÔ”g¶Þ+’lp3Û öŽmæ™­ ¶ýÅhCÄ1õ’¬‹õ˜NÔõøziÒ’àqÕMœéK²ì&}/NzŽlú&Nzá¤Ï}gú>ÜQ?E?OÌ,ogIòdSÔ}§setÖ˜8hëutÞá¢3W é¬1#p´íj%5öÚÓ«¥tÞ8mø…Zj-ßyŠz °±ýyh‹OÄañ]EÏWc3Ùˆˆ­ô‡{}ýÓ–4ág‰ƒ“f?f šyÐ’6WûóôÕ|4?.Åÿþu‚¯åIpÒG-i³FZFó!¹æîdÒÔ½SËœ9<™`ÙCãúœfŒJ¶ÔWæƒîêÃÓ˜ºuslèÊbe‡¹6„¨T§ßn.¨OÒ=ˆMeÇÛè^0/³•¼Ãœ£•Rg»©‹Nqš)زçí€^:yëÃsØaÂ$·ËZ¤wâF`Ø{Ö”‘°Níæ:5Ð>êdßžxÝ´`„Ä=5›ðÚ`ˆ¼"ÆvsÓ\'ï*yocT ¸§âEœ­g¿Ãš}±j`%íØ9KÑ~ñŽf²±h’-@ª |[j7Z„]òIYÅl}Rr ÀBTŠ-¥g·ÎUÁàÉc#BcÒSOm„8k£³Ê]¨ëѹý}ˆˈ5©qô“8Ð%Uøm¸þbãF’¥åHõ&%-†å·ˆB›–,§å½@’2ì¶àÅVv„n Ë.p€1 *s%Œ|âqî}0ˆÐKàªÄ:Å‚A’û¼ì#e-œKkÇB¶dÅ[·v,0ö&Óp*/7+ )ȉw+ÅA BJZÞ fŽMYx‘•C©µGyä¾kä‡.%?Ä®Òml{8ÿð×÷çþ}úºáÒA¾Þ+• xwädÃ탑0dFi¦çNü–«x2„”œ„ÁÉË4i·724²'eh+â§VÞÚÝú5 `®'+:­@%‚¨G¦ÊNO}2f:Ì%ôuÈR/!%ê)?vÇzˆQÖí¾ôWou”ÉW~Q'…z> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 155 0 obj << /Type /ObjStm /N 100 /First 884 /Length 2614 /Filter /FlateDecode >> stream xÚíZ[o\·~ß_ÁÇø¡<œá½0ØR»hÃ6Ð4‚Ö«#e›Õ®»—Àý÷ý†<’ÎÞä•×iÑX€ÄÃ%‡3ù|¼œCÎ+£ÈE6ãÇ„gRŽ¢"ÏÊ{ôeå³WlU°½Y…ˆg*‘SIå`Y‘I­"ŠàÑKVGàäP ü'ü' 8{iFw–Q2uô+®„ha”‚bGyì²´$ÅžP‰“pàîœd:ÄYD$‡ŠHNFYcü€²U–¼HÊ2š)GeqN¨ÈA9†˜\t‡Á³--YåŒ8“å,Älƈ'‚dGðvðôé y÷ï­jžM§³å y»z¿,¿ÿ6žþ:hžÏæíüÌ 1Íyó²yÕœàáÇ yÓŽ–ꌣÑî³1h¯&h ›’NÁƒî™zúT5oUóÝìÝL5§ê›ÑxÙê×ÃÉu;Ïö‰úöÛþŽWÅš¨-báVKšàËÿ*D¤=âQ¤ƒ@·šB 6í"íWåûÑÉjÚæøUñNçîT‰I;ÉÏQåTø‰°7ªùé?+€TD º¦«Éä|/)ï¼ÎH„OÑïµ`ÚÝ‹ÙtY”|ÀÈ•þr Sëˆk¬ÜýBÚ‚S­ƒ=r£Ö“äØM]ð冥jyÍëùlô¶…åTóúô…jÞµ—ê|ݯ‡Wí 9Zít¹PâZ “/f«ù¨]”£4}ß^Œ‡ÏgUqÖ.ÍX’#X Æ=œƒ…’%ª7/ œ:µ©S:ueí‘ç­F'óv¸Ϧ§Ãe«¾9ý3¬g¥ D²žž@ƒÙÅÞ¾wãå=oÔwóá‡_Æ£…úqµü°Z>)v¸XÚ¹ô"zµyÒÉšIÓ“uƒˆ‡zÁ)4h~^K#N‡‹¶x±yÙN~k—ãÑpÐüe:š]Œ§Weq–ÙƒåYóêäD¨/ÐZLxÞs3¢2¼ßü}<}6]ŒïºOÇ——-,+®8ÃÂÖ\§«öÍ¿V³e;i/asçš‹æ¿XŒ›«ùð·¶ŽV˶ç£Õõå¤ýØ,Ç“‹¶¹Žæ³ió~Þ‚C†£œÖ\Œ!b1^4>»h/›9d7#8|2Þ6þ²š^ ç«ëÉpµlfW³iûk3 ¿Å‡á¨=ÿÜ4§òã6Í~È›HB‘ׄuÊf§É;³ür|µš·šÁšu%œë`ÎG€5Îh¬F„=XÓia¿ ˜{.{1§-vÇV;ëŠVÄ|ŸîËiý¡fìHH<âeÉ:ŠgÄ#>ܧ…ß„\ì Ü>™MUœgˆwûà´¡=híè~ üéÇ÷ÿ”© §Wײ9JGhÅæ5MæHù–)íË”ÁòÐÜ”¡,mÎÍPP2áèˆSœNv7B¼¼œÍ–·U’w7¹ò‰ôì“ö¦YNH;Òs“6GíåìÇFGvÜÝ¥,vIY%³#ÅqJÊ7u‚²Ý“â²ÍG¥xv[)žùÈÏæÿ-Å©Ÿâ??\ž"Þ—‹/ ²‰î`â@–v'Ë?=ŸM.vóíÁ~„Ÿƒá'm¡CI`Î^q2ظܻ5›ØÓ%ë§°§OfSÖ.gå-öˆ›ÄØlv;&Ú¹6: äÖJT’K«ú Ý3=Ç.à ôûíÚ·0=î[¿Ë1Y› ×»Y{+7É [Æ ‡µµnÿ]Î_gÓ«ëá4Å/yÛf´\öÞè‚“–6lÿKºlœµœ×Û(¤¶XŸÈcGr»5öx÷ê—Ô‚ƒ6r “‘· ÇN8KNæ)ݧCÚu¹¦?Ô×ÈȬ~7¨oñÄV7 nÆî&û·iýä}Cy;ãŽZ8l- ì>gQxú5 ·ö÷ú;¾} ·îkzI9ö¥qŸ¬œLMÜŸÆkjo÷‰»4rіוÑÚˆd<ŒÖ Lè0¾ØDéìÒa´˜£³|Ä}Ô]J÷!`;½ºâQéí¶wîA;véq± ~çJ•Þ¶Ò»•Þ!ä-Î*ÙØ­žÛ)"Ÿ¸ØRä,Õi'¡NšäÛí”—v­‚ ®´:kXËñRhBéõ¥=º cGÓµµê¨Ê3ßq+åùàÌHßóÏQFÕI¹±Ô],ÚA¯ÏQÊ cko4 Ò¹Ç'ä2kÌ4ª}Gq†¢^µŽƒeùŒIf•L)£ößìÜ­Œ®$™-'áPfsWëÍËNžd„+<úukŠ=Å¥•‹>\ø»Â¯¶Ä|7òŽº–¶Ì̦âà :u¤„T´M˜Ç‘þïÄ©ôaÏ :'‘+Öˆä…"àà¯RNÒR(¢Ïâ]øÛÝÔƒ—yGPH,ˆÏsÖ¾´È‚Tß• Yò —+±•÷–’TÐċĮ+¼–³¾›YìKF¾à*Í•y-+IÚ¯÷)åPìÊNH¿Ã·cʾnµ¬²\3ײ¶Ô©cѽ›4Žú¡ôÁ€N™I¡³bd.ŒÈb“Ê§Ž«œkYm"îªÜ+])É “ךBaÞ7Ãv}ÍHòj­ú­Ô$?{þŽÔÙUt¿Ó­Zw”µß¹xò’-ÕU·=uµÞÑŠd‰yªH´Q¢Ç¹Šl¤~%Ä´|›‰›ªuoIÛõCJ2eeØCĺ{ìïéË^ïYºÞ\ÉãRÞ3HŽoš:-¥`£ïʺ±2¢D)+EU(†‚¥ìO¡JNNPCÐZ>"•äKL¥n þÂñS0¿&ñœ)|m a¢FÂ’@egWOØC,`¹“!Њ{t_,‹Y |Ä¿“^´ŠFÖƒˆÃqX›ívÙ·_íê—}Ç8D8we‰=D"DK`Öe¦I¶è½§¤º‚P]fê²ETbý¾GÞ1ÊÈuÝâ´Õ²6‰¹ÛeY”±çƒÿƒò†Ú endstream endobj 266 0 obj << /Length 155 /Filter /FlateDecode >> stream xÚ31Õ3R0P0U0S01¡C®B.c ˜I$çr9yré‡ù\ú`ÒÓW¡¤¨4•Kß)ÀYÁKßE!ÚPÁ –ËÓEÿƒý ñÿÿæÿÿ?0°ÿÿÿƒÿÿÿ? òÿÿÿJþÿ!êD‚âÿH"Ð @˜ ¶l%Ør°3À‚8 äH.WO®@.E‡Þ endstream endobj 280 0 obj << /Length1 2252 /Length2 8257 /Length3 0 /Length 9474 /Filter /FlateDecode >> stream xÚweX”k×6)¥”4ƒ€ÒÃСtJ#)H0Ä Ì Ý!!Ý­HJÒÒÝ%Ò )) |ãÞϳq¿ïï;¾cþÜçZëZë\çºîuèñœKÊf–‡A‘\ nQ€ÔEÀìÍf” ăÏ¢ AÚƒÿåÄgÑÃTô08Ø ‰²Éš!QÑÏÍy°9@âåáåðòðˆü7h™9ÚTÀ.0ŸEæè‡XÛ E€-æî†œ¨5À‚À\¡$ f˜A-¿éËÃàÖ`îgùïãﺂfâhíÁfT g¨%@ڀϕTêŽÿƒÉïÔˆŠslHGQ a‡8"܈=7ª,P]^Uùw.a.^ÁømUCÁðÿvóÓ¿¤àñ‚¬ÿIj…rYýÕŠ FÙPJÉA-e``(âXB,s°5ŠüJÛÝ ,ÁVcU3$â0äáF Àóû÷ÏÓK%KÔÞý6\ÍÌ *<“•VQãøsòÿDHKÃÜž\ HH €¢ Ì'ðþw* 3ȨðÜžT‚ZÁ Ðß”-ÿKÛåïk`ýϵaü;™ ‰RÀúÿ}þÇþÿ>êÿIYÞÙÞþ/)YÿÐð™9@ìÝÿ¯az࿘³ª‚-!Îÿ+Éó¿dþ)!Íì!RPkû”‡ ä!n`K Ò€„;ƒÿ6ëüîÖkÀßo(jž<<ÿçm±°ƒ‚€À\f”H€0ïߌÒùß|äPXþ¯€ À 7sÇçAÝG^€'Aev€ÝPT€ÜPuàèŒô ®9þï+!(Jý6ý@é[$ÊÜ"aPö‰€rÿ !Pþñ€Š·ˆTºE¨zÊ·UAõ¡*¨ýƒ„Q95nÔ¼E¨ Z·Uáù-âµoªžÎ?HUÏìâEµ‹‚š‡½%ø6 ÅÃü¡*›ÃÍ,ìÀ¨l…¼µóýcÿûªÿã@Icñ@%³€Ù£æý_ ?ÿo‹ƒÃDPhùD•¼¥ƒš+ü¯ ‚¿ýNÎföA)bu{ÅÍ âòGŽßn˜3ü¨ëÛŒ(¿õ_¯ûŸ!(¢6·´QJÚ¸;Ú€¡D l? J^»? ªõ[Š‚¨í_í[?J(‡[ˆÚlÀÛܨ\PÔ+ñµô€PgóßËËú¨„ݲDå„ýq BuæxëFÕp4ƒƒ¡ÿ%?è?Ö’%¼#ÝŽ†¥š£½óM€P§[’(Éœœa¨­iþÇp@(뺂PÜføÀ.È*€ G ¾!·PDni  Ø"màà?¦‹ê é ûãJ<ç? j.@”F®¼¨ÓC}îÁ- g8J ä_ßÔú/¶‚ 6ì¶ÀŸ›†YˆÙV5ýø(Eëʵ1,=ñVd:qùòÖG¥‘|>*~›>hÂ./ï#LT¾J7nŸ¤÷—KÛÇJr_HŠÛêþl"ÉÀ ö®ô• Of!ý·-šýT€eÀ+Š˜ÎÒGÂm¦4ÞM‘\Rýê™=ùEFšè/à RÅ Óõû˜­òV6ëòŽ»Ô³Íy+ ^8ò›µÌÉj [añdI(í*Àw1ÖÂãNC¯ Ô}²þtÏò8âˆy ål6ît©ç{ž(5 Ûü4¤¥šGÔPÓ|øø†)=¥Ð{MvxÞu ÄnèiÕ#bAŒè^ÏâI‰l]wÓÉ7¼«‰Ú­èÊÊr ìãòâèûGg:˜ì.õ‘÷T]{2ÚtYe>>Î-ЙA?­3ed(çΓïépÅç­·œx••/ŸHŠ›¹äø€,ú1ÜCʈrýížwÛùÑÄ졌3¼ „TÎ*;ò¬/ˆV€ÿôK 'yÕJ?R’Œ¨4O¼õS¢ÍNªÂ™ áëô°SÁN_ñî“ 86ÁN‘÷EZ<ó+9ã/B _¡S†)¨¿‹V¹?…µK†úÂò°àGš_cöâ Ë\”Þe ^²Pù…9Ç ë4Š…÷EŽÝßÀ°aokvÍ,n¬±DÏÒžOèöšô„𓇠=J-yg« sT.ÜâžC@ž,¼B½–4³;K²’{xüy¡g±oѺË*ûw§¤±z»È<êÃ:¶?j‡î» ñüáç¾Ùú€¬ÍÊU±ŠŸ±¢=OÒ~uÛ.‘zkƒÇèûË„‰m`¾m~^{¡¬@^ÃçÂ<™_¦œJÔïž­F¬Q~¥¹Wݰù/ÇÌ‹6ÒTn%‚¾n­šíAë8üœ—C&*™×iÐý—w­Þ±Ückn‚Y*Ú´Ïÿ.Ë6Êè6ï®ôS‰•·ãhp¨ÿCʘ]fʧ{G,W¤©1 „´ÅÝå—¯Ü$׊-  ¡\!¶sÈ¿L±KN)iÈÉó»>ÇÁÞÈϽzTæÇq=ë¦÷0wˆîø Éõx–Lò2\OÎÈzf„‡P²Å;Í×ÏÑHO<â`ˆ‡*Íß–ð¬eÃÄ5SŽ’FØ'.8óÄÝèàî섞þ"¼SšU2nZànÐb:cqy…˜6¼~vü8¹ü£¼é¼çÙ<ÁVõö}$ÿ½ºw™ˆÀmc7qƒDÁò²Òª+¸îL%Nuߣe/Ș&h:D×hGBÃk'ç÷[VéìòÓ!Yö’b8s¥¹›â.¢ÑRêmP½¦í¹†ÑР)ò¶ÄÏ™ˆn xÚ;t_ÃqMk¬+b©6V×-†‡³À{‹½L}÷Xr]Ôç‡NV®ã] ¹Ñ—î±±lÑ]Ï&ö ù$WÙ ˜‡¾î}žÎs@bãl ùá›Ïü™£ÆóbwVÛ=‡³¶„™“£þwMé—#áÑ"à‹|°œ(UéÜèÚ€}£¨ú~’ä u‘—Þ¶yžJ*‚ÕeúäéÞâ+ý”sƲ/-Qôyæöá"vú¬LÒR,œ´Ù„HKñ†^_ -sú§×o5.ž?Åä°²Û•ŠTõ"¬òJœÛú»¤&·ÕcJ´~r½¢9;jí‘¥0UeÈ5Âé&R³•Øú™Ãüª‡sµ'?Ø’½µ~…`̦D’•ºXKóöJ“\©›áÍš­ÅFÛ¤ s¾"¾jÎã•7xºyƒˆRy÷mÖp•"üŠewømx×Î#-iÈz 6khÂtf"E}ò€Ê’²1ïÁ8_†{·Õwv^ùDL«alÛØã¨|Æó]ݸtOçØcV!õ× ÁçbZ¤õlŸ.ü±e(MÚòQîNM³JO¦yI ÂúÛnK )ƒ/9,§ %¯Ÿ„¸æOq Qa÷*H~;oIÇÏ«=c»ÁÅq¢Ž î,ÈÖL¯ºbj…o:wò·CðƈÂkw:Žvð;»é# lp‰WŒ¨:‹dƒoè£. ¾œŽº&g ;ÏK ÛÙÛXñã{³÷Þqp¾»_uOËêeÅ<•³VW[/úeøtø×¥9ÎY@Ú=¯Å±´czcô`Ä)®]D0sïÃGÓä3g;firoŽ´§I™'G¾ëçèøüŠ~‡Ê²Sßù *rrúWYų¤b©&M¹¯«›Þ1’î²y#Àër]ý¯JXö[jqz|~õ(ãQ1Ñp#øÙ¸½4|¿áLó‰|žÊGØ&o§Š·þŽ`étÄú@шÉJO¹±›°#Á“,]~åϸ}lrÏå8“—):ì^lÞÿÒÿ£lõäÃþ(ñœ‹ÒÍþW™ôÊxÁR‰ýw¤N»\û.µEª_†…Lp–‚ƽ£Ó¼´æÊl?°á˜§Å‘aaG»Úhí¡¡ž †ý¶úb±Hüš÷$<Ü­Õ˜–dðöƒpÛbÂ×ÄÔε¸ËwƒW4I†¨‚6{¿6žoº Òž¤„ÍÜ¿¢y`È8*?º~óåqir&âÕ4qÌ÷}R@ìÕ=å{ÝcΛŽ:F¿C.‹Ñ.Ìêìâé`+ƒ›ŸeÛ“n/èf&¤ƒLú}jJÝÑkõ4òú‡µÕÈ*\DfH[/W2Óòþð«×Úì7:™vàÄôuÓ¯}6øAZ0,@tæËH™ªïz?î a¦ååÙÞaeßo¦ÎÀóXxŒëeĤût† ¹èa—œ´òbÁäBþ–ñ 8*µŸ÷E× „ÚC—€Àî4æof ×4Û3Í\_ß×õüˆµV½Œùö«£rdð¶_åi|˜?WK·®¸/vð÷µ°GT獵ø§žCç92$Eü»Ût R…OÃcïV¨èŠ=¿%vsš~ *ö˜Ò‰rn³­ð ·1€Ý+0³·­ø¾²¤b›ù '7oüû+ñþO>>wKzЗ1NÍòõ`¤fvÏõz%80㩟¦/àÆ¯vó¨?yc£Á-)âq¡r²•ƒnòËœr¸.B¥<8Ç›'èIÂ^R‚»œ)­oß,†—,ñ'¼íÞ'ì—¦ÿüVÂI×)Ú÷ÆõÝR˜nó|ßמuHÆäÒV0Ínm¯ÜZª€ü iBùk)L"î—#ŸÊýùce%ˆê¼ñî6¦å|“àûþ"øxiv]ô8.C²c¿ø™ø£ kœ.{Ά_ÇŸ'+§åô™|éhRYÊ]¶V¶ŒÛ¸y=ц'”¡óÌ¿;MEM[zõ2ÿ© î‡8Í*klHn(²%°hXÑ âYR"Þ‹WÕ4Ä«žkð…Ú§ÞÐôTF'”¾h\O¸Súü¥°ê“¤þ±%Â(úÔ7†éé¡v}PÓû ìc[×Q L4I§ðíhš¬Lý!´™;z94‡ñ2<¯cWŸÝ|k™%hœ¤“Ž|’£‹ým^•¸õV¯4 sÞ÷ÜJ^Ö…æ0Þ*}Õ4çCõi s”±ßB§’Œ·AÓyö…,¤ßý3çAñhÒÏõ*ª|ŠÐx“Tö ;[c£• w‰âUgIIoϾt^ì=? böùð=ÇWak;¬—ï ·­öG°‚¡tãiQ%ͰG,>uvùæ‹:턳c4´2¹U¢A‹Q“ŠtÜ¥KXo'™èûHÁäï Ó“%}†dÌ`MUäÌ2¾ºŠ4Á]bÍTUÄÖR*…ø~ÒvßSû°¿kœ91›q½N¤ü¼8=hmç6³PÅ•ÞVî%sí( *i]“Öȹ˜àÃË[¬\d5|Lß$tújpn:öy@6pÒÿ¿MÝ˦h ¡lUÒÙeZDYœyó`×ݧ«YúßH²æéjK¦ût,¦ÏS€‹Ô¸Á×GŠã-Ç4k7¢o›ílÒ¼ kT"\vY'óbˆ)ˆj²Iö;Rz#'­˜Š‡÷­Q¾»•Wõ2R穹åû,¥LÙ—föÁ˜AÕA+@´™-Kד闙¿Ný(‚ãRÉ.ÍŠ̽·m1©ýXèy¥?M–¹½aÔ˜òšÎÝ÷mú`ÈÉ.#gõ‰ö‰E¤Uy¬#h_€#)£±u^ ©ùa‰*×ñÝÜжÓ,Ó™°Æˆ,^5^;¡ÏPÞ×—¦æKü½êîôáõ«/e”®E÷M#‡(Ç)?üìuI¶ÔzI/ó‘:3eu8BàYŤˆ…ĆG}GñZßCh«Âsik^öÍÊÊ8ß00'[a¿«©ÓÇÙóPöUfÞ¹$GO4»_3^[œ)ÞJ÷u%sDSÌ)ÐVš1 [›µ¥ŸÉ]”`¶Ú½á yGS„Î+M¡`:àÛh¶á׳‡bN¶éô‚v쳄•9ˆ;báj=Å…éÜ¢é“h0çÓjv¶ÚEåYnÙ£-D8šuŒ¾Ù%:µû—ç$!j)QhÊ郴kB>Yô"í4mŠž‚dÇäZH¯‡-}t~oWXõ¯Î¨Â³4zAe —Ÿ_|ºg¡Öo´ž´°øåÁ š|¢ÁacÙcð½Þ Ñ!°r ~EyIôõ7Çèzíª3*˜¦ºÅdÏLåéñ97Êö¿‹>!öÞ(eÜæ6lÅ;XÑ̤òm¢f“òwê(ôÇ/yƒ©©˜cÑfúë*óû¡Ä½ïÜÅ<ƒu{õ˜I˜èõžeª÷“±÷„E²Ç±ñÌʨ%Het“ßÑÖ?Jm;G~uð銀¨¯}4)†ñÎæçguØýÀ? Öµ¢+;@Ÿßiîà“F?5)T’ÆñH¤”ª‹1ižxÒ>YGØãø‘$ošY-o(ËoŸÚÕIÔ"}ðE–˜HSƒN·PSÈ€c/x.ÌÚksÇŠãáVÀÉfx:GÕÈ>ñ.{áÍù'ç=ÒáÖž.jmL¤híÒØ–ãk¯˜xM3õ‰CP¥¡Ï7Aìv(¡²}'Õ9x÷Ìí§ ûXÜbów{ør–Úþœ¢\„)¤c(—¹6"ŠÃ®œÚè“e–.NüÈ5ÓYh‚–ŸBvÛ±ÀGŸÇAQÉ»À&¯dyÙªxÍY õËdº_îÃQèūÓæS)0×Åø;n³†œQ~[ÃÁÌxˆ#¤µ0óÓ.‰'gÙàŽ4ù—±¯€æW »£PŸKùÖùÄû’”´ï«½>¨ÙŒ% U_Ž}Ò¬C4€@ [*×Z'žÉiÓõÕ|w.yžu[w49õ[Ï[´<áícœb@häòMš`ýZf)}ƒÊ~æÝ(š{>³ç""•n*Vôø\¿ˆ ¦Š¿¯2EGQ‡´±„÷rÅ$|âé-£“ÿŽá§¿Þ€¦ÓEw…¹t„åî@¿øñWýNJâ&rî½QX¯m#ïn¹[î„¡€¼n5Mó¾Ñ$„î'FÂdEã;œãŒhÓ5—¥7¦Íob*Ëk}nÜÙMUC²Ù[µ3ÃT}ÇõjSZh!ñ,ÎÎk3?ùp—ãë©ßÈÓÚ,­OþO!dD;ö‰Ál{Ðb9lMÜt `¾³žqLsÄìzOóu%^ÕaÈ«ÚþÈ<4ŽöÌEYµú¸-u#Š´gZvID|aïW x9<þÃTÕz»¨?âÊ„JÔ¹ð/>0[Á`”ã÷ ìA3‡=gý‰xd’b‘L#áÙOÎ}>´œãqM Ø&ÆŸ §Ø4i“M¹¡¿õê@ÈÑh…¶5#jWˆ3æh¶”h ‰m•âVvwŒXÓ®‹Y® FFýxøžàªäð8ïÞ5Ìó$l—2LVñƒ’¥ ó«®+Âf.Qß"e[oGEi9¡ãÌÞ§õX諃6äÆº¹±•)÷R‰%l‡ #Uæ$í£kN¼®áHë8® ´õöôz¤›ìMKäoHç‹2-7“wÄ·Ö}§ßßë-lywWZ„$!šoÁ€Øì8·øªQ-¦ƒûK`Ùå3A‰®².®€Íµóý¸(›aγ8‰:iÚ>R¸aXÊiø›e±!«ó”?f»]ÑŠI²¡Ì]. šïCgâRðë!qôéÐb6cl/š…íMÝxª»•±rN=ß~Û$~fNÞ‘D%¯bÁ‚¬îJj_®ðÒëwê-Ô ¡Ä@¾x×Äw·žlÞa™"òáðr'«‰c:‘GÙhxÖï¢ ³½`Æo±¥ù¢†xœÈÛè{oׇ´ªyŒàoâWŽ~ñ—»á‰]ŸÀ‡}š)ƒD.™¼Úœ­eyÂ5žàª£yu*ýÌMÅ [³á‘M®€Ó²ðcr±E#ÐE²›ˆ_¬~9­ÖÔŠ¿°’ Æ-®ž”^¤Â’Oh?àÚ[ø¡Scc†Øð.*ˆ=[;ðÐ?”6'„KᡵK×{I=yAr¯¡G1­¼‘—Åã™tÍýBž„2Íå§7”´ŸuÚ婚u‹²ø‡´%ÌÉÇÙø<Äœ>XÕš¬W›„›Xek*òy?½ÔÞ3?‡<·ŠÖ9}òtæ:!6;õpž^´ihQ½«ÌùAoùÐp`æê+¥[@ɶdHXúc•Ê0ÊuåŽôQ#ÂÝÃçÔ–ñéZEM2†LŒÒçÖõŒ•LÃòöNÓ÷µ9T4±æ~$Ú›9Õ3¿Æ7r<ä^ÏÅ}󈗜ЃU?NÇ•8¶®>ó×vâä•Àƒ´vËWB½¯­¾E¤‘§±,ïºp»PGw íæ€ÀíS3·Š²Ý@¿›ÓÍëj‹øßÌ’Fåøè2J _S­˜Ü+NïDɆ·’Z–‰Ú;µŽK?pe*oVtéFTiž”Q‡Íýj¿ˆ…'cÌ\H7HàøVŒ2|9Gs(oÙÏ[JüÎðìÅÇ&§ßŒ.Mù‰65\»8ñs}žÕù=åä¾kX:P3)$Š´Hxûˆ™\î¨>5µÈ×ÞÓÔuƒQùSH¼'X£,`ò¨¯}¿j6¹](®“ÛLpǽoY·AéF uÈ–ݯY™¡ÅcÏšøºËÈÚ¿ÒÍs’UH>Oå ÉÞu1üÁZòM¤‘%•jψ­•«eã×A?–°ø™>C ÒùèéäêÜuޱ:Y¼f‘gpé+YNÖ+ÌJ;Ñ›|t\ˆŒŽê6·žcX7ér {ïâU$–*õ‰R;Æ qEéuxØ 8F½]á#¶ËàÁ§Næe!ï3¢G[©¯]™…! »:•+ÎÊDv5wÍ1"Nï៑šÒ­?§>’6x󩫇SÒ'ø,¿ýެ¦¤–ßT¯@Œ¿E¸#ß¡B$Ät7)Ÿ®›Ç”!Q7ÄdÚsþÊNذ•“± ¼„u$’vbré;GÜ?ªe$¾hµ$±y(sãØ¡Ç½"VÝÛlÎP¬ø$Ìhé-[ÓcùßO.VëpÂÌÜyÿûÇw¿Òet§+èyBÐ;= 4ó1“ceœBL×!»¥³s܇5”4”¯‡ŸÒóô#?‹šä×0ÍMÞ'9Þõ»àÉ󊊶·I””5Z4ô62[ø †ÍGÜÕÕ|G§5•tÒ˜”øëÐé¹*½èˤLs¨Õ›ktf÷kÎZñÍ#@3Ãk“©þ^¦y<çãrlÑkxúÑO¿6¤·1Iþ„¡Sî.÷u·S¯vpAcÒwÝæº!޼ú m&jM´¯,$-zdÅçÕjÉÖ×ÕŽúR"¯ípÒâúÝ»kœAƒ§±)Ñß4­R[¼¦ÍÙ®×åMöÂÆ¼ÖÄ-†4Œ¤î[+R sh™`61÷+Bá4Fv%1eL_Y[Wˆ\U=My°´3~œä4[çͯSäv~’¾Ý´3üñ]æàïv;ñEz˜c6ûXr 8ãi:Èòf'Kµ€ ö<ã¹:ÝÜj“5c¼mÁOYÞèD…ÂJ‡ÛeŸ½¨G¬XP $ÌšAԦž,ÝR‹û­Ð}q½<è´w‘"ò­W.\÷’#"/O’¡J#÷gžà´œ  =ñw7*-v(£@+ Qž 7Ùº[™Ò¯PJ‰™ ¿~×÷@¬w#,GG®•ýîTw y?ÀÐÜêÔ˜Bn3²>çØB;èlàÓ’vo^O©ÛIx¾M&Ðl ÿÆéw~IÄugHy9“Jê¨j9®æKvÿcFª-fWŽM“(ý"cßëÕ¢ù!íB²$ÕW‘PÂèlÁ3èÚWqãZO–2½ÁÀ!œ;ògWÏåÞ‚?Ì#ÜÃïtçÜ“äy›E©Âi$Çý|…w™û2;S:Lß¡¢jn=3m=zª <þF@ÎýÞ"åñÞ!½õ:³‡{YòêÓ]æcÕbÎ~#ì{:ÏJrøˆÈ®Ëúcûø0¿?=Pð³Å}C˜Û•¶œ½Ï3å¥úñÕä¬\G»cY\ëzÌžAû5ìÆCsôó+ ¹”ëùìµEfŒMw|E:|Þ¯eÓœ-øh+RX¤ý^Qz+ƒ_`¦¼bØ#ÃõYS]B›\/´ŽÆ‹„­»Ó/“%A‰oEXƒ‚]Þ· q«1Ø|¿1æ*Œ‡-¼÷ »TéhÜÔ{&õzÁ‹‹a2Jœ#G–¹ÉK_3BÊÏá,ôœµ2 ×y î­9þŽêÎ-ÎH’+¥Ô¸>"Aót+Œõ+ dþØø¸Àh<—W2—ø›—¶ßq …Wû6Þ¤…Ì¿‚ž:àý‚®JK¾v£„ñÍICÞ½“7ìJpœœò ŠDn¥ŠUâÝãœ9ß¿ ú2ó+Jÿþ{þ(÷'½´ëÛñr÷o0ä.ܦ¤mö…ND×cñ}Gú=àWvBFÞß};ZÙ©’‚ÏßìãâícŽ~û ç1.åh>PÏÇå|—¿irìèØ46~wl_ÿìÙÒd‡˜+Ž‘£°N¨¯°ÿ4{ôW¼ý gi—˜÷U®eîUpÚw^„Y¥ªàf½½CžïT!“aô&㬗c_Ô¦€¿évZ›Ï¾u¶€eñ䣛ŽÄ\’Që'ºžœÍÃt©r6åáÝ£¯w2­£Œ4#'&buu`¡éD5¤ó,.M^íÇòÒ¹¼û#ë5›{ÉÛK/vJh_[GhÓ«¿&éÁRJ ‹Ò!/2B>Å’¸]>íleæ<¸Ü2èó1_—¸3õc\ÂXnëÛ)õFݽ–ÌY\åR[4K9¾‘è¶02Ž#F+²ÕX7?Ç!Š—.Ì `Ô^ÿ'³Uïz…¾ëÕ×>É)ÃÂě̞3²‰7q¶¯c>ïèÄÐZaPjL ¡ ךóøLçælþ¦GNåj´C~]1µŠ•Š<ȦÌ}C´¡r_Êoï_}¡¶~¬ùßúΗ¡­°ÀŠ˜·5±¯y,eˆ…ÙÚ.OÛt>¹ÇÚu|ò-¯ý?ËÚÿ endstream endobj 282 0 obj << /Length1 1517 /Length2 7431 /Length3 0 /Length 8432 /Filter /FlateDecode >> stream xÚ¶T”ë6LKƒtˆ Ý0Cw·t· Ãà Ò%!!‚t‡„ H*H—tHIw—|èÞçœ}Îÿ¯õ}kÖzç½î|®;žõ²0èèóÈÙ"m ÊH„ˆ(PД@ /ÈËÂbó€Cÿã²AÝÜaH„ø? Ü `{™"ØãÞN‰¨{ HX$"ø@±"ÝÄŠ`/˜-@“ ŽD@ÝqY.ÏÜ`ö÷iþõ `‡p@bb"ÜÜrÎP7Œh‚= Î÷!`8@ A=žýWvIq>>ooo^°³;/ÒÍ^šƒà ópèAÝ¡n^P[ÀoÂ-°3ô/f¼¸,˜û_r}¤‡7Ø ¸Àa(ÂýÞÃa uÜ'è«i´] ˆ¿Œ5þ2àü]ˆôïp{ÿCüqC Hg0â a°ƒÁ¡me ^naûÛ wGÞûƒ½À08ØæÞàÏÉÁe9]øžàßôÜ!n0w^wü7E¾ßa„°U@:;CϧsƒBîËþŒï¯Î:!Þ¿¿ ak÷›„­§ Ÿ!æê USüÛä^„û™=Ô E„A¨+êqàûÞà™ ôòøžA€Ÿ Ò`wO³ƒÞÿáú¹ƒ½ 7Oh€ß?ÿpA €- â°Úøÿ‰~/†Úý…ï›ïó˜ïgþþýûÍò~¼l‘ø³ÿ˜ÿé/Ÿ¦²ºŠ¢×_Œÿ­“—Gúüx„ù<üB@xŸ^äþ%à¿Ãü»ÿ"ÿGª†ý}¸DTCØ!bq¸/Þ¿xxý=ì¯ à¿3h!ïg `ÿÏè[…€ûèÿyþ¸üÿÍýï(ÿ·Ñÿß){ÂáÔìôÿ5Øö·Áý({zܯ…&ò~9ÿkj ýk•å‘pÛÿÕ©y€ï—CaÿwaîÊ0¨­Ìâð×ý«÷Áá0Téû}Õx@@àÿèî× ât¸ßwê z¿MÿR AÚþ^;~!aØÍ ü ÷¾ñ÷HàºßO[¨ÏŸÁðñ"÷.€{r;¤îï~ЉøÀ¿E!QŸÍ¿Ñýøø ÿ€>û@!ì?ð~ùÿ€ü>—@AŸÛ? 0€Ïãð>¯×ø_ä žnn÷;ÿgøî™ÿ ÿ¹` P(wz ‘s¬ k¾x/Gëͳ6(5ƲfœÆÁã7íÖâyEø …ã]fÈ¢Û™\Ê·â¹%öSÙú[¿íƺ‘Ÿ’u›®ýož&ê¬5áN S|*Ü–«ýB‡óˆÇ@ö§ÿ­«¿Q°z#j«:K®«§(¡N>é…w—ŠOí—·³ýkº?ß ?Á»y;Êgk\2Î’g“õŠ˃‡›“äÀ‡hüôlŒ$gèŽ^=‘ 7`'N ÈÏìüåwßù ~÷6jfj3*:ôS’þV?ù×ꔓ~¥Å±‹R“Ù"Ñ/{fº’¾?1¢f|®CåVÆ#•¤ÑJÊÜ–ã ÉpƒA†´¬lôµØ~á,¥*vÉULßJŸf=‚^Þ2Ñé'™ Úrµ´?nÛÙ3låâ#ºT–Ö?ÆÿÈJœ2nfÔ®X4'™mw5Os-z;Ê&Ñ1â!žCª­èhMÿµžûGÙû»Fk1Ÿâñ ¶þê›ÐL Ͻmâ ~ÿˆL|ðSÔuø'[ùF6:Œ5ô¥pkÊŽ½æ‹E-Ÿ‹HNŽ "Š]Î[•5ì½ T½ã+‚“ܘ-;öDžô~nð¢ %< •;5’÷úèëÉà,f»ñàßÇjÏ<[õ4FzÍï6A¯šDÓ æœ÷.x'ÆWœ J-¬&Oü3¢XiC —(/&Éj¥l—Y\ Ä|ü!€‘ÚÉèÏ{rE˽•=ðÃv2øÎ48€q©c¡Ü•œˆmU&Š–³ïùì+´2ÉAØð›J$Íáu¯ºRièš÷;³‰Ú$aÕ‡y^À2íƒT¢ ChÉ&ûÐ<þ̣Ƀï É±ˆ'ó\Œ¾påý¶mÊfÚwCAQöÎóCüa|™÷¨‰>è›fñ½Î{šq£€ÒzS|ïod; U³k„Û[~ï›§ØX4¡ šÉ5u&,Ídzñ9Û’0óN¶µëqOò pR÷ljD4. ý›ÄÈ3â#VR>æDtNøÆººp¢"\‡ä­<ê^)R©^qÙ—:˜¾ÿi<þ^M5,GŽÿyô&«îØO°(&BXÚ\Š÷ƒ‘ŸhßFŸåý„¼à¡NÞe]fÏÃø<6B׈¥«;xÈ’¾¯8Ý.™µ•xèƒ!¼ím dU-9ÖÖü*Èå¹'2,ç,H6ôÊg L½lƳ¼«g6ÀÑYÿ©¬8ªtðÀG¦è7êw J'|…,9žÃR#[Ç®KÕ-j°²;9_¾Éo¡Á Yz° ó¥N\(>êaн֩êÐÎüU$ð¦+ÓS”˜È=õgYàæC šo&Àä2Ät™òš4z;**è“ÓžRKa·[µÅù”Öˆ—;ý†ÊöwiЏ4ŽØ1f;¥¼µ£@žóÿƒÞOä/Ú“A[¨ICjq l$ÓÅÕĨF^ÔØã3º8>LòCú$Ââ­tñ´)Ì]‡¼F3áaªpgî…‡§þgÇôb¬„·‘h4/ÚeØNŒíjçªFÉÑ=£_&v[¤šç-.1‡²g»m¹r<\¯ õÞ÷ ûKXªGmÃ[êËÐ²ì »Vݬߤí`QÚƒz°Ût;Ó6à²çˆ,gL¼°g”ýH^Ò&€]@¥zÓ«MÌu¢xêë/}ÙžÝnûñGʲi©_8y.û©ˆUaÔ' s$ESËϧIw(ƒük° êŸQ·uEë¸Y"ätóÚ¹*Ÿób£r攪Ê&Ö¥Ø0ß9ÑÖø•> :Ç&òòá>Y·g³™ ìˆHëJ08cP›K)Âó•×P8˜H„5 ഃú÷ªöGâëgò%IdŒT§We<ç!²•/ïvÓNßÄŒð=Á ýÔ‚…Ñ•f9¨Ý–$Ú¿O´Ñ¢pç—w®# GH˜½ »N €šWß¾óþÀâ¼±s–/8ôÜ›º=Uó Áä,ÝQ§óÚúÕƒ[=Š5; “¸3óOÝmñ 51RSšxbšKŠ1tàVF<ÂM Ä4Øa‰cæÞd.?_g¶™<8ÆõâCD·bo<Ÿ¾t'»¢qJ¿Hµ‹aG;Üï2o´MiŠ$ïìÇYØX °T«T³ý÷}‚¶aRáboßDý t »æõáIâϳéþ˜ú+¡ùôÁ3ú*Z ßg½laô¡G_w¶¼i*ÖÓ6ë ä;áKY¸I 7—l'Ëé$Ìê;ì‰e},Ë˺A†êíi,kó®«çŠ ›o-£OòÎ_ÏßÚÃ¥`1M˜§Q-T¸g§¥óÜLGîÖMÃr °Xî€çBÃ|Þd\ã0Ë-i͈¶aéJ$Ú}±ß9yêWéþ«À…mòÅ£:"šª•Øvž¨d7‰ oÉÕZHæGÏù†Åç®â•ïT9%´Â>ÜùL,àÔ¢†ˆ¼qá€/‚õ¨®¬(ý~v˜•¶ëžjÊòã¥ýl<Æ>…lþ›Öí0 ¨á½¸±ï@ÛDeQÉžäEáD+æÀ *±áŠÑBHe/ÏçîóžÁ^M¡^¦ ¿O§CtÜ”šÁŽqŠéü bFèïÏ·›áÉi 3?š¹va«Ç;˜*/óÜ –¾&äx@€päí”núA*o÷u×ãW@so•ÃK™åw„ +ešø6®àuïaŠWŒ¹68fïH ÷¥õª#•‘IÈìé„ÉF¸Zk¢Jöìå{j&G¶âBCNòÂón«s‚‚—é\ØÐÛe{KÉZéÑÓgŸMõ1sǪ¯%]jøEßžrÁrPQ=­’ßÌÌ%¼Œ3€p½Z—”= zýðvö›“Ç1Gˆã3ôaÜ›©zg”•rŠ üíy5KiïÔ š•$ŸÑÍÄ¢:ª¹§Âй0VbhÿӪ̥dsÚǯç=ËììLoâ>߉—©’ï¼îo£–R»ã¦º¦ÙŠ4b˜ˆ>R‘à|ìÕä$K›„ÁIPµñgXÚÄ[´ûS‰X!4„Í’AË.îׂpÊ'lˆú93‚ —¡|±`Û?‡àVIo3¥8 {:®ý`š–Ì奢7Û¶Š‡Ìjfò‰ÅNüž¥¸@Kx6^8…ØCx‰Þ[[ºcéYœC³ç¿tL6Óe$~¤ä±ì˜2ÿ*lå£F‰_)ãtÖLËÒ·¶p¾5]}Õ¬²ƒ]˜‹c£Äˆæš×=.~‚ƒ å&%Wûñ¥\€§Ôòh‘Oý ¨9þ=Äúƒ„µ]¶JÑØ˜ '~!f) Œ.•’J[¬ 6HDnvn ISRèš®CŒfÔôÁ ç ¸ðKòþå»—«_¾ŠžÜŽt ÖSR·cáE÷Ôð"‰žÂ$!wäBßçÙê†îlˆ›b>}ëH §“|»æ rýi6XDtFnŸ‡)©u¢žeŸ†îBê¦çJ±§ü˜Ó;ɰìöu¸‰9M`CýZµ«® Àp(]ïÁÞÙ륆àŸ*ïñ­C#C¶¨»ÜbêÛf½¿ó‹í_`¾w!Z·ŒT"ïê) ‘ÜdÞ\¯<üæ^<ȼ§°þ:uÏRúéƒÓWIeeÊÇ(ó¡—×… ë’$_ X‰cxÆGú³(ñJ)U<*L^ñ@f;ytº;ÿ¥ëˆõÉǯîèåkKuC4k#«Z-"–ùë˜0Âp3jµÜ?¥P9¢Öó¤}ðSô•ºêPºb7ŠqH3Á‚;5‹˜púÉuæ-“× + &G½+—Mc¢—3í 0oéxVÃ,Qýñû“/{GH±à²éû´ë2“˜‰æÑuSLë‰Û”ù&~Érܦ`F¸3L‡?8ГNvO.[gŽ`†§Œ1 2òÈÆkñ̶NÓ<^:7×LJ•4eÀ/58B}å"¶’%ýŠq·2ÏÏøOOÁ…}Ïzõ%ø±²^Äñ´E¥\?ÇUDÖ¯{·zïˆi|Lg«fHã86•žæ“¿ccC˜­„7=Û|V+*±hý᫵t^À÷‚ᦢ¯i¼EÖÎ]³¹ß™î5¸%7usã­–ù½œ¤¦ôÙè`2ÈIrrL͉nCnÿŠ Œ Q<áèìl?Óï*/<ðØ%™l}åé,ZZD‹ _§o‰¥,ËÕ B—ùPÒà›"‰ßGV1&ÜÞ»Ôûk¯ÿí£d°­¡ä•ï\¶º~³÷ß‹Køðµ¿ÜwV‡=È §’72«1ÃX­ø7“ ¥èy]óÀ=ò==g¤.Ý÷:NÏL}H¶Å¤¨ÒMn CÁ~$ÁøØ4¶SÑñçË盛+¯>!'[fvÃ.¤ëçz´`Óá»ñwÜn™he,Sõ »%À;Z£âgó8šŒô¼ÝÑþï©­¯eäÁtª£uç3 º¤Q•74Q¨£¦Š›æ ¦s^´n›éú&šJ )Ÿcàã|bÓF±ƒ9Ñ>d .Q&êÆûQ’ë±õH ùËçñ<{ Àò3‚ \©0FõÓ³f¬ÃÓ(…o¨È^ìÆ…#Ñ¢ µž'̱ã‘ÑO­Æ~žî½¸E¡øün9Ö˜ÐSÙ,â­Pù>ÚžØÈ‹2ÍÊþD:•æ?†“\Ú¹‹Vàv1ôõ…†EFFõÒo—<„¬¥=Üë?÷ÞGâÕg ÷svÕZz` ãƒÒ´¾ß|“2wéè׿O®KX\“uF2pnîÚ¾êºsEMRV˜¾¨¾ÝÑ1©ÂðŠÅÉôo¿¢‡ÉDiaèñRffC¼ã\© ¶ä)KͦÖñœNe"uÉ´ìPãôé%òÞHÛ> s RÑñâêÈ\X3\9š½TÑ4±’uÄ+ëÐ^G*DGÖF«âú×f¶XÓ¥sÉ*P2xIÅšÅf>.ãéM²®¼¾•JlxÃFžF5Ë«¬Ì¾b³—O“©§S™f2KvÈ~Ô.¦)z:ÂLIFwŽ^èú9˜6P#-ó¢*ZÂE¶a'=â¸Úä—š¢tå+]HúSÁ ¯â)Ån±¶Y—¹„\Ô§A¯dù¥²fR‘c"_›<Ú®«0%®{ì•Å{$ñ\~ ÔÆ>µ py’0•|šÿxà~þÐrBDÍ­tޏÈWV#*¾—¥\sÎÁ/›“½Ù}89#äÌ“çR×+0ün,+JÄŽæ|CŸÓp4¹9Ñq ]©WÚÞM è·˜ôÛ+Îâ~–›ß$3—ß)Z=~«ò¹ú‚ÖVª¯ê׺G Àq[ïwctí Ó£2®XÍäTÎËÞ)“;ÍõKíä¦ÁÕõŒOëR~$ùÉ/°:–,šŠØØW²à‰Dد£¦½‚Ê_Uëñ<úò(Ÿ´" %ÜdŒ“iü¡<€j1ákÌQΙ(„À É- ò j÷è@~{Ú¤Áö¥9ƒ¥"||ê;§!ŽÖ[½ðaûl!!;¸QOŒ)á•dõ{ûM¦:óÒñöþdåmÛò·†žËKô-zÓÚKÚ¨§^?÷RÇJI z ËoR¶¼Mgv»k dÍr’æá+tÙyT¨Ý•ù´¿(<äj¹æœ>§+ÄÈ}X)A±q † ¦¼ÅWi·œ‰ŒïôWƒ®ìµ`ºVjøÁ¯½:V¯íåXºí·cù9²íu«GûwÛ‰ââw¿v õËÐõ§´ŠOÎü‘àÆt±¯æÉÃ!Q”yrdÒQóiP¯Xœ¹ÏócîBÆWV‰Ø0…‹åò‹,Œ|Ïõ!ÝMjŸ0UÆ"‹°ÅJ°H"Ù˜m¾ôª|ƒæC(ØõÚ`¿®¤ÞKq R+ÀçJ¾"~Å\ »è„‰dš;·M™¥X#Æ­¬S&t¾Ñ½¬ÞÕ̰>KüÌ8®žTg€k&Ösv&³ç‡7ˆ¼,Ï5Eþz[Üåá¬á[Z°é‡>‹3"3y×´`àdLRœCIÖ`ÄÌ ¿Þ¬™9.››-\ùÒç²rj­Ç£¦òáaˆm3 –êäh½ëÝFÛŒl¼Ä‰Íœ®>¼Ó#ŸÍFû›â||P.qÕaîßèImÕS£ªÄ“…ÓQ‹qÍg)çôQÔŸ‹ð½ S%vFc+ÃÇôŒ‹Ç/™cR†RGùÉ Pí;y!ABäáFX<®DË&_W*³¤ú¢¢u^=O<ý0jþ!ßlX GQ*—š,Ÿ°ôègïùÙ‘Ò,ï~€ß‡™ðºQ”ÌÖËÑyòœK Rë”ûù¡áQáXRQ:‰ÖHÿ²¸¯½Ä8YÇWõÅí¹¶ø0]Bû‡FñãG|¥¼c„Ûb£êÉ)D¦*òT9Ð5—k£ú?GF«X«²¼Ê)ç`莵'˜”«ÚŒz¬¼$¹‚FGCP^-¢¼§éà ty)+1Y§,ˆJŸÙeÀí%KÐÐÆÚ§0à6kUÒCµu7ð]%¶>¬ßóÉ7Üöcº—Ðôœæw9ÔÅafƒ„p°ÏZvò†âÏuªŠT&®×LÛq¡ófCOFÞe óèMx Sɨx÷ÅEŸ_:%ï<„¸×ù§•Yf p‹jN÷uc}c/$»¢ï‡Â¥Ñ@,¨zhrdT³UUnU݃Ñ¢/Ð?Í “TNYO%J·ÃÎxd”ÔíçFßú²°U™ö¥ž4.œÓšté ï0ù6Z)æ“9tÀUBv¥ þÙ3¥_Uxu6éþ11<„ê]¾”[ †&%ÃGçJÇ{÷œ¸ø° ?Ü ßF.KŠ!¡½@0‘ôó`!€š5š ,ÈRž,fæŠ+x±R•&úîÌEq‰e»ÃÀ”ä’¿¹|àÝ}¸ÞŽòùHö«‚!™fÖGÎÚ!ÝæFzù¸–´}åÔX‡Žc¶A× ÁÝ#›ô¸Òœ¥hW÷z¯dž­&kªe/ýÇG”P¹Ø'c)Ÿ%è:•‡Ë!D3œb¯¾D¤ð1”xP‘ðk@Â¥Ô¼ã5i{n,}ÀY^6Ϻ#ÚK¯Zëõ¸"ëæ#GW¹]ù"!¿2kΪÀöuÒ+¢ïÝ–¬ÖÕÔ˜Vg—÷7²3–§ü2^tV1ÅAsÒ!“µÛQÍcŒ&«éód˜øwãaÓ)©>(]€|q&mïZEiÊ6¦„\½.ðjIôÉGʧ³µ r¾hÛË[XFnð¶hÚš®ÉS²—ùs‚ÈÌCubQ7jà–Â-‡ùßÃåî:DاǚIÔzæt‚ø¤t8;Gš€¬uzÀ‡æÈ3¤fD6¯€|î(ýHžþ†…ªvò3=”¦å\c~£ã]*ø®ìÒ$qµa²‡p?<ªª»-á5¹Mß¡…ò–¦Â]o|½6:àƒôÅž£UÚíè²ÆÆk©!&VæÚó;¥ñnæª5ÿÛ iZ*z™ííE^‰ñÁʺ¨u Ëc1OÏ4g&SÏ@ûk i3Ê’d$Ç:øXКþ|øø×sÍ·K*xÎy䊎L@­C—vÊr…w¦Ìyô³¯É%S|Î/I€,ý/!ã^ýø”íÅÖ¦©ß7øž‡)1 ¥…ZTuŒÊÛ±1™Y}|§à8c\‰ÙmÞi©$6œ°¨ˆr†Žá£Pº|R|Û¸ é¤^VÅVÿåâцnóñä3")ƒe½ÛtºòQ‡ÓÃÊu®+N$ÚXw(– ëÄÜ(«hÝœjŠ^½YÖËC>ýz6¼¹]±ûv™Yd†±²²®,üP¨ósãç¤Î8ŧoYÖ¾Siæ/¤È7Rtš¾èÞùiËNh ®œ¿”ˆª´e|³O$÷òÖÊ!S ;5½P6yÌ‘‘áÎ}Â0F<¿9Ÿ§^í’ Øaî‘ïJévq´<~E-·ŠÊt·ÌÓs›FªZãJ Ç«ÐïCÑv£ÁßMŠR"a/(@݃Ùϯ8Àv›Bæå9]…¼(pãl½FÕB”_GXÃE6Ç="6,'9äçí³Þ,úÍ—”d5ŽsS’%oü–ø9ØŸnÉN¶wØá©aZª£>4]ôºýKĪâÕiJõ¸£E¦;YÊþ¦Ë ‰…zyAæ #g ùÜÏç\nìV/ñ·©:Y|ìCìƒÀ4ƒ,sN#5 {ŠïkÊ%©oÙÛu¥±„i—¥nXë.™>¡®8&ÊдÕŠ£˜Ðd–øðµn›f‰ŸdÄ\wÖz|Ä …êV P g¾j1 =^厙]ûaZCUŸì-tçùž ÓÝDÈ…g|awwôÝTö¾Á@TYýc4;&º):|é(å5Q]_eÅ_p6¢ÎüúÇTÈ endstream endobj 284 0 obj << /Length1 1897 /Length2 14088 /Length3 0 /Length 15264 /Filter /FlateDecode >> stream xÚ÷PœÙÖ ãîwww—à¼ÆÝÝÝÝ=Ü]‚$8ÁÝ]$8—™3gfÎ÷ÿU÷VWu¿ÏògíµvwS’*«1ŠšÚƒ¤ìí\Y™XøâŠbÚ¬,v&6JJuKÐ唚 'gK{;¾Yˆ;€.ï2  Ë»¡¢½@ÎÕÀÊ`åâcåæca°±°ðþ×ÐÞ‰ t³4(2äìí@ΔâöžN–æ.ïyþû 1¡°òòr3üéµ9YšíŠ@ í{F  @ÍÞÄäâù?!h,\\ø˜™ÝÝÝ™€¶ÎLöNæB´ wK €*Èää2üA ´ýE  naéü…𽙋;Ð xØXš€ìœß]\íLAN€÷ì5YÀGÝŒþcÀø«9V&Ö¿ÃýåýG K»?&&ö¶@;OK;s€™¥ ðQJÉÅÃ…´3ýÃhãlÿîtZÚß þ,UßþÅÏÙÄÉÒÁÅ™ÉÙÒæŽÌ„yo³¤©¸½­-ÈÎÅáú$,@&ï}÷dþëp­íìÝí¼ÿ‹Ì,íLÍþ aêêÀ¬agéè ’•øËæ]„ðÌäàdaaáæâ€  æ?¨{:€þT²þ!~çàëí`ï0{§òµ4½ x;Ý@'W¯÷¿ÿ‹XY¦–&.c¹¥Â?ÑßÅ ³ÿà÷ów²ôè²¼+€å×ßOúïfjogãùùŸGÌ,£ðQVMœþ/Ê+ÅÄì=ÞŒœ\F6N++€ûýÁ÷ãüÝÿ²ÿSª ´ü«ºE”µ3³ðþ‡Ä{÷þKÄí¯É ùkmhÿ›AÉþ}žAšÆ_…“Åäýõÿóüéòÿoöÿˆòÿ:þÿ·")W›?õ4ÿ1øÿÑm-m<ÿ²xŸgW—÷ÝP´ß»ÿkªúÏB‹ÙÛ˜þ_¬ ð}CDíÌmþn£¥³”¥ÈTÙÒÅÄâ?CôßSxnciR¶w¶üãÂ0²²°üÝûΙX¿_*Îïgõ§ ô¾Rÿ›RÒÎÄÞôÝc{?w “Ðáýèß'À›õ}IMAÎ6€™ÉÎÞåÝðNÎ`fï„ðljrq˜Eÿý‰ØÌ @[cSàßn³Ò߈çÝ@íôî«ñâ0kþƒ¸ÌZ#ÞwôOLÞ÷˜Æÿ ^³Éßè0›þ ²˜AÃwŠÌÿiÿß6³™½«Ó¿<Þk4ÿä0[ü ¾×lù/ø^ŠÍ¿à{-¶ÿÀ÷åb¶û'Õ; »÷Cù—þ½8û¿!Ç»³ýÿ¨ßksø|¯ä_u²¾WâüOð?È ô¯tïæÎïWÃ?ïäÿEü=·‹…è_Íy¯ÖÅÝþ_ï»þ ¾suû²½ðüþÏ@™¸:9½_¶®üû´ýÿy³ƒ@ „å{þ«†®û:QwÆýIÁ9Ê}­ ZFïe§¯®(°©´µ9A›Nw¢©£ýhk»’4·"+$/Þ§íM°áÉ*O>φ‰ª3ûKÓ¾MŸŠ6Á2ª‹ø¼8úhZC¶ƒ÷ÈQ8ºò (aÞ»J{4U¬Ž‡-ì«ÔrÉ#>WÌ2ÆjÄè–þ ,4ÎÇ%ƒqa$‚£Ã¸ò@ýq{7‡‘?õF"—Hà{Ë^â­³Å÷0ïµ^¥ÎæÜ‹G§ƒKy‹1>Cå-v”&‡³è]ö%fSp1;2~d%d0i^^ÌO×)¤œQ0;@¡“¢7ßÝ$ÛÉFÓdJ @EMÒçJY&m–\C>Zf˜KhéÿðBN¤–¤ nJÿµ¸÷ìB£‡Î')—5öpÒ–øNs§;×ëù†¹8#­j¶A¾¢ôñÃì„Z¡¯¤ê¨slS±·îÐ[!ӗߌVVá>_\lõ6ø=xp”'ŸŒ•›Ž’/Ï_Jz,Fu›ë°n±ƒ§Ñ »y#v§]Ø^Ù“[¸†0ȲሡœWæòŒÈel²ÌcÙ:j@hM«<šjŸ‘Î £Ì½ävŸW¯ª\`œqœƒT£ebõ碘2ü §'…s÷x.òøìùZ5ð]‹%’utm3 ˜G€Ískþ épÍ67#Ióö]ü¨H´²B«Ü€¼æÊp}ŽÛ*Y“z­ÜjfhC/õëUÉ^¦k‡CÉŸ@½D­©/Ð:òþÊ2W‰NRÙ¿%办²ø ¶f˜”üNË4çêáäè gà¬æšv\^?¹É/‘|é¹Âe*\©8Æ h&ÉŠ.„âŸ<ð»` 7¨©N¤$Zy¥É5;KDܬ£F]Ú˜$ }¼*{tŠ,³ùó”ê‘>Ê“0ó<â‘]ÁÍ •ˈ®pw/ ‘Uæ}ÎÅq9Kuç§›Ù°áDìA”’BÓÚ{d U#&}‚(f£k>#€ù1aDÃçÐøËF£¶-D¶èFX×½gÜžJçШo¦<¿{£ÉÙT$õ%úCóÁòìt º)ï1àVq4ZPèŠnÜ80‘"ͼµóÙ Vï(–åžûœ¨:e€N“õ¬€c…NþÔÖ}ƒ­“¼Óî»Ó6…OôÛŒ:ƹlJ²þ´w¥v©ÑÛ#Ç“tª;fKÕÞªò=›Ø‰ùZ“ûµ±u¯T]"b RU©™œ©0y‚ =×Y%Q¿9ÄA¼÷Ã-:ÝÃÆÅy:Þ "&ƒšÊ ۗ΢§**ê2»j<=£}•è`¾#”õö~.<;cÞ0[ý®«Ÿ §Ì+e%zŸ(¸ðué5$£È¿µÅ(~<£Ažj`’xÞV¨Ý©ÀÕ»¥Û¹÷b§.ýB5Êõ%äŠ-} &ª‡šž&õ&Ë:À¨Wbó•¹a"Õšc4).Þ:Í¡ÅÅèÎàXlà1wg¾^O&Ðïä¦á]ù÷¤¦Wl¸'LÊ^T?,Ò9·EgTߌa^Ç÷ƒé-ïÝ®0ŒšIçÉdtÅLø{*Ƈ CêHª¨LEªî&ôvô4Í'(='"ÎTÅÒ6N²Æ ºîZÔ¢³•º˜ÉT‰¸˜F†N…k3+ú”ij±î¯=ßÁïNóGsÉÙÕ~ñ5 gbÉ!6ߊ'¤Âú$)—ßýÐ,leW+K扥N€´&ÑâsOÕU1pk-td™ÛÕ¿|††…éQsjÜîÚ/Lð%l¦>iÀy©ÙîœëÕ›ú¼/j‚ì߉,M<‡TôMÀĦüÛåT ±—š¸L«)d½BlTnÚ¸ËP/‰Äšþ´vÁˆùȱ¯ÖIúŸh œ–o¡y¨/;„6·¸eò :Àã`»ü©[hÑ:vZfãó¥Gj!JŠ uü²ÅÓ¢5˜ %£Å;·Ùó¡},@viƒ¥;’˜‰U¤âϺã5výâŽäÍäê–Lh7–÷Z‹Ì?-÷é‚…åVFó Ñ–_Þ|Íù'{P«’EŠ¿Æ-ÈÔTõ>=\–¯ÚÚñ޳f>2†ÿÞ/xÂ.×EK‚¯:B@:t±âF„cR\÷ÜñúrÀ°-¬sÕ*r𨊥,f)t½7}Zry¶ê¡)5¯'ja]oŸÑR½…–ÃE‘ uyIÓó(RI_Å­”—«ó-’cñ·m *Àއ–H"÷dÓXx9öMàrBƒÆ|ÿvéaƒ¦Øè#[ztûK11;4Ë.â÷[F\uÍ:ï®Zø{C™Ë„hƒpÝn¦ØðÎrzÑ3GŒÒÏPÀ^ïcćv!¡AP~)»Jò4c5‹çÌæy9n~ù­œ€ns=‚€[ï)Ã劳f =6E$n`² o© § µÁGW5k»^ˆ3P63¤"שõÉÍ¢ÆÂ“t×Zó»ÚH w¸,⽺ÅP=ùkÝþt4ðwHM ’–©³†ì½à¥þã\&š¢ÏtV¢©Ü½Þ§ U”JiÏÔVS´M¥ø]Â6o²6zQ}ë‘M„Ì{ðË+ÑKAÁ©{§[€æžÿݾ­Ç- èwá/A½ocu¤¯b-yÆ<Óí3ÚÈ ™Šåu_›bª1–Jw0,â¶2¢i‡.Ë‘ üöÖY¯³ûã³`øýMj æ¸JöÍr”{&Ë|®j¬»Ty:¸›oˆ…,#`"ZêAƒžÆœ\¥Ù"B‘Î: Œ£\£Z]1©ðî ʶ„9]G˜Mb €.:Š:;{mvyÚmÿµ&E·n‘n_ÌKh†™?ÇktlCž ŒUûuÒcHcbŒyg8‰yú¦ýÆ2)%‘>Vo—EdIyçÍ\ÛíQûb~cO}pQ)`»i+óëG\Ý鈤IC=á8-—ï#¡Ìüí±HÍdª„Õ¶ëý5ùÙ´5wåXÙ’qzN#Z¬H}s3Iö)%Ó˜`ž» ‘Ë´bãQWzÝ"+æÇ1Sr¶IGÇ唃…™±Ôž‰üBà3/7Ònq[ï´wõhi6F¥i“¡£ÓŠÍr<Ýe§#xP6nÞárÇRT¡ ”‚8¸ù,Ÿ±|Ä£BÇ c<~ʰӡ§Á /d…’ªf£êa57{ëW‚]åÙöTæ§o©®#. þiÄ«P8ßÚ¢wÉ´\Äôø EËî¡õŸ?†&n¸%0Ãu÷ôô‘Á*ô> Óðû `Ó3|UüIÖ€~Ἲؾ´…j8Ó5ø49/$5=˜å–¤>j…šÿŠŽ‘ôX“Ë…M™gI^<ìל€˜õýã42$b621œ¸¬Æšõk 8è—BtEv6°$Ã=> õlrO`Hiöƒ¿*IòÛQý–dÔÅ@ðbEL¿¦´3"ÎXmU$#æÕǯeÞ°¼F5<[بñÑ;ƒ+RT Aã>†ó¯L£UInÀ“-µýt~n Êqk~È]$11£ ëb_xÉþ}Ôæ½UäodR™'çÚhuá>kžS—®~û*è•Ö=nš°sÅàØÇòZ“¹%xŠôN–U7ØÅ ªIµª Ô“L‚˜Ê µê ón½Ý¶þ§¨ÌÓõ(z ¦p,ÒÑÒ&áÄ7_hú¡ñћŒKSññ…Bþ»SbéÁîºÏÅ߆tÈE›’p Ë/gÑ@Ž’íB¨=ª ðA¯òK">ËZÕ™Ñs7ÌÊJ0Ó©ìt,ò·{ǃ/kßZi}ç käŽÍÉf)8y~v›WŠ;³‰7s3Èçæ£Îç ÃMvNNѤFpl =¢¬±’ƒ÷ÛwT¦µ·â`Ë’h›ä*ÿ^ò‹le|>†þ Ú3(âxÁå"šK¡µ"úøeˆ "Ø{¾ÄTÎRñbn¦GÞÂWRõ¸ï” Z §LB®¾Z‰T)ûZß}ðçø,õzæìK§ý2°$ÿŪ4óÚÄAßß/“G Wd7¡/ƒ½å³Uû>[nxe*8/·Òä…—_‚A_„­Â€‚Ò.ïoÏÈÓÆ>¼°380p‘fŠDã™V‚Ixbl·+·ÖŒCõŽ­â2nF»½}ΜÕPÕ‹NgÜ•Öq{Ëðˆy‡r Çn±«v¶™}¨Œ½….16”äCË7w6—L¹Þ¿Ÿ ¢/ðÃ~pÜl:ÚoÁ,[Ð1çk+–Ü`e•©Îj÷¼¼Áè¬Ißïš}"mÜá\¦Ü#’i™ãvdv™Ã`¡årñ·ýÊÜ÷I©ä߉ãUéÛL4¶+‰ÔÕ·ÁiòhIZž%å LW)›zÉ~½ªE3ÉUäSùp;†»ÏK¿à-e?æQliFÎ(v/½ÚØÎr9²éɆùo¥Çt¬Môœ“EˆÙi Á•¸ä¸I ~l³r—ï/È7yÑIòãn>ŒMà¢ÙS:cŽª SQ~ÀñìɨÐÖJWÔ\®ó/Ÿx ™øžkÞsTnFÅ0¢·´py½% ÇKØ<®J)Ñ1ì$Ьv0^½d~Ȭc½,CU­}J~l‚ïÔšãó5Öš\šï2?»@ÚêÉX³ÀI:@MÃb2:ÞÞá­éÍŒŒSD4¾èà§±#Ö ¸>á]·ÖæÇxbÅj—•µ+sC8Cýæ–ШšFé1íù{¯Æ#ziŸ$¸B3Ã$'}IéÄÕM ãjNœyB©-ü¼~³¢Ýç·t87š:‰榛ãJtÿãèEÓËeÕjþUélaa Ü€¦:êö«§ÁÑjõ[«ùg[¿­,£¶˜£íéŸhèiï=Q9“tÕûb$G;Sš ÔÕÏÌ_­wöFêrâñPk×2á^ªÀµ›á9"å熗ϋ)h‹'‘cßrÄE:_c’&tãcY¦„Ë^@Ãü:ê'7ñô¡åªºEÖ÷æCS¥±oXØÁ38)@èв Gƒzã…«ºîÍåxºÝg¼×3§ßgË?}jøøZÑ4¡•Ä>öix¡Œ®É_¥k%dPjÏ)¸(8\ºšÑjåŒÁ›ºd/”dqÅr›Lò™è ߪ‘„Ä“<lRḩólÍ’©šìÇX‡¶ËùB,_gCËÑ÷]‰mûÖAJSàù™"¬ü1±§3ì _šÂ8ʘì½àBf‘{pF7¶îOžKU [=úɾ ,pŽöÛr‹çÀ̛åË-<޽uMq1±Àr…Ã' VgÃò*<=¶±]½n¦¹5iáßë;' üܘ&×–žcdTö-‡´gt G†äoÝT÷먺ìŠH7ÛÎ0ƒ. ̘S}mêHü‡IO-¨âüØ)úõ®,ë°Ÿ‘æ‹Užu½^ÇJ” éäÅ5“¬ ÀR‚wɧ°„­Ûë‘iáž?Iª× kÉ"“©~â¾*Õzí\››;YøVwy™¹ËB/2Ù8¯¾®¤>,|ƒS¼z씫ôðôkçÁquh.òAî漬Ã{£Ð¥u~Q2È%«Þ:Ö¨TüAÃ3Lœi,Ù£r*ƒ±ƒæÂÔoÆuˆ¶P8 5¾Á^'ülÐá+¾«ÿr½W@Â6‹Cf.^¶k±+%Ç3ó2ð2>Êæ}ÓóE× 58{Þ \{4²,£hÛ»§úHv%Cªh~¬ŒE:7§7bûèãçz%D¾6ãùŽàf)<öµ¼/y†4Wq'.íËÑx÷› ‡Yh.O ƒ¿ë‡ŸÔÃÙQ:¥këE¡wPÐÙcûÐ,¹©0;ª1ð¾äQ>"¨÷v²1À¤F¾…þœgŒóúLQpX¸‰ðÒÞ·qX,œù ¨¾‘]˜úë<ÿ%â§å¬¥J•ËJо}¿çI™8èÅó0CÊ¿•¨Êàaõh~Y¢ãYÍT• ØÞ⇼Aæ=ÎzëÐ6°æ4R‹€z5“gk”%ðU‚í( Ed¢Rp/‰ Ùœw7mÌi6‚íñÙœrÝÖ¡a|Mä¹"®Šàã÷_ν‡òOFÿØ­¶Ò(ÍBJª ÷ñnM5¡z§ < ¨ô#Úu3#A5Ÿ…Sú°7Ú31š“胖Ùòd‡òaVs<~Œ¾Dc? Lß[G9eÞÊ0K(žÑ*}(bw8³tx¶Bñä%|« Áó×$2ì–‰¢ež -q²O.årž$Tø;D íMAhuî´Ÿ"¸³©l∺ºÔLeú~aEìú™'yRãîR°fÀ÷\Ìyç«dÕ!õ@÷VFJÔÖÊÃé¥É„Öíú¹µ¨p—ý$ë-T¢RÌܰ´f›‡HŒc¡38A:Ø©R¶? Õé]Kgñ¡BÁÊB|Nª¹†…ûÙ8¼åxToè9I Gâ¡Sº#÷ìUÙZ?«ØØÐ´ý f‚¶ÙôŽK1e‹Ø¸ãÄË‹t8Jݵ›ˆì5ÁjçH£ ~Aš’†àÖ°€ Õ Ù*"wÎQ3[,ÿ`߃"²ëâšJ€k{WÞB“7¼jVy°1ƒ6Ì_P _H ùÆ/í·Š‚ºŽL«ÞÈ0àŒ ìLÄu>Úo +²ÊA:òºuÐä[)§¿4J•]Ìi—fOXS‹Ÿä>W¸ˆ>¤þÂÿ+ÖaAÖñQXÖ×f‡Ì¬— »ñŠ˜>ÑYÃ{:Úï­ûÆùb¤$¼ÕÍÛºäZBè9êÙrô—üóz§Ë¨Ž< î‹Å: ¥¹4ÿ þxtz)|òGž•uµ2[*ÃÍc­‚ÝQ×%•")ŒLVRl&OT¸åþcßüE·£¯A¿ËÆV!“,².Ÿ¾#¼Å-y.ሠK6 lÁ‹ö ùn'Ê=GmÏ5”â -vm_– J 'S›ñ¤ ØTÖrÍ-ß($—>ÜÁ¶ ¨yP˜êÉW¶k O”Þr·ˆ ·Ñ\® 9f×cJˆ¿=àí3ÃvÅOºÀÝçq¦˜Ü¾4Lû•¢L'2ö´ÍcUYoxSoWÅöM~µ"šB86ñYN5·ãÏ:nšÜwbqšÌ›oMªË^çJT0;/ÉíMx\ût`û!-b îiØ‚¨íâ]T]t_ëŸ_7Ö^¢vK,2gÐÜ—çŸâ÷Øìû}Eù(Ɔæ²íÞh¢ NÅwL”å•5 Tî&Û{ÁXŸÖSØfÄýO\u“ÇÛ< ÕЩ‹Va³Âü|3ëQ÷ˆMI*J#„2ÒŒOÉ÷¡ò}+•Ó‚ŽBÏ…ü[$àº?:¢¼¹‹ÛR ¬úê«þ¡/5²©ês¢ÐÝe˜\›ëýÐ@z'ö0Ü4®¼F|tâ5‡„ÍV9”·LM lº:„›SÄ]ÕÐ ìï>˜_ÜUu¶àKçôôé ÛÑŸÌ HÌ 5G{evLÏí~:rÄõ/øÒA€UÝÜRf3>z&JrkÁólyx‰¸A0¡P‹2õÔR:‚´l$´*!*» ¿Äf·…Ä~VH»t<2¸Lœ]FÇ6¾£<~ýˆ8ŒQ@–Wì@­:åZîÙ'î,d£—ÙSE˜È©#&r è¿<á·#ÌÏï&À©&ȳåCYr¡åñ¥E% i—âp^ËO¾¡ øôç‘ ³ÈÙÚE›˜DU|Ü¡à ?Žù;¹¤éQ†Juíz ÙÒ\,Ëã6ÔäzháÙDJ”½ (þÇúTÐLÜœ¥Þ\ªWÆ—ÆÁŠÅ(ôð0$«q|·ßí·µð޼ÄÉëZÎ|+»!Uúr2×"vÃçèËÜø’•o‹,jÐ °üm— ¸À"ÚV1yﲜÕEôßDm–°ý¦Ä| êb¬xã)l‘[¡’‘@ƒØÂÎdBÅÍ´%â“JÊj­ÙM¯½Xí¶q]àWÊ1 Åâ´ÀGô—œ·ì00òYDØŽ<âR˜V3kz²ûÇ}|[~ù¸6õ‰ÂÛ­„Ée;BÖïJBCàŽÁçÈŠÐú=2{ØÒu ,»¸%¤ a;0¾|d"åotu­àes-3fSAëǰ(j{xPÝTtݪSuaÁb«SŸ©š/h¶d}[çrñî!+óÝ©˜„á3&ã`á†îñ ñÀ±šP˜?­mV˜ \ÒõÔwZf’àvXaÌ®ŠSÄO‘åÕœ €§P¡s°Ž0›ož\p~ü½BJO°Û·1t%}qgvÍ”*Ü$¼¢;Zù¢6[«ñhë * C²1Ýœ,0˜hÄC* Aï¯ya/tÆ?šGG.Ðh6¢4iƒ‘l{¢0zcŠU¦ha#¸Aܬt5UZkúP Lè髤-Ÿ7 m­l6ØÊ;É0š¾Y~£á6&`P¬¾’€†èDjL$,\ ›CÈñ,·vØsýö<}Y¬.£Z˜ÄÇEc²þ4{bÞ±ðéÁ`²y;ápzú‚L{±?bpuIx©ðßÛ¼iì.?ñç_«5ÖB>J¼*J@ã©Ñúzº®ÂŽFi·¸©|¶½‚HËÓ2‡È÷E:´&_%m]ÞhðÈ1u(ó‹nÔqÚ¸ztÓ"­ÎÝ5ÊLã¦T‡ÖTÈ#8ÚÞk4\¥—e¤ܪ? #Á¾Kö; ÒæWª¬OhÊ&Çèêµä¼é)IUý£u­2=¥¿3Én"pµ{VºÌª\SÄgÐÚÔøœ¾'=0$•“*ÎÙýèŸ>—br7çæK—¨ÅÞƒCy32~1Xö·† kOQ ñnì–˜Ø#¾ ³õiüÆŠúq»X0R¸µ¥âq‚œk†×Ì3ÿw¶ˆdé> ÎºšPÎûãía¤;ÁDúM¨ÍV„F$$ei7 }"Šû.9ƒš5‹½@j@&„("ï¼—ÀéyI™œ‰­*v|‹GQ¥ÿ鄸ârxrúóbÅHb,¹Ý4'¡ ²ïqM-ò¨X €ESî¹Â<Í—6àW±¾äˆ#Ê •µ“ÒÃE)Ô[”퇳F¶0tZ&©Þ äÖuG=ö·uDø>ÖCÞß?_ ºty1õ¨ ç±ìø¶´$ià г*Ä1Åe´ÍÆ”\¹AóŽ•¿¿ÎÜê&ƒû³•e*…³™ò¹ã$'ü@DJ¡öˆê$µ‡r.i¶hjü”IT§Ì`§U[„äÝþ€fÌ~‘„ Á5ŒøÔ!DÊòê‚]$ÈvÒ<͘w6:#¾äøê‡2Äi/"NXÊul<±\Z’:ªVyÿYÂz=E ýUflïáí/{Bt¿\ê9³\Q›Ý] “>YÒF¾žYÌÖ2çð}Ûýžùª!Œ±;Ÿ¼©øéY~&7/qeÈÊU¯Ãq<* ïµ­=9fKv>7Â.5Ÿ^:¤¦Þ:øØøÂò®„Ž…Ç­¯Ð¨Ž`-NÞ@É ÂB>®zhæœgõ‰)z‰–%^u7Œß§ß/âŽÐ>/œý`®M‹Rz°§F ¤×1óYNKVW æ–pdÒ꙳©äâkJ¤1 ÈÓ\ @À–³€KÈ" }|ôt'{eéÐŽuñëFú$ÅJ–žéK¤‚;è¦þÁv¨yKïˆNPˆ þ㌸ÜþlzòuM%SPìºA2™æTÚ>{^_J©S¨ôòÐÛØ“D.ºÆ&ƒˆÿ²óïÜ%¸‘]ÈG÷K·/÷±„œ˜¾å)Øphe–®JÉYÓb*eãµ#`=å”䯑‘•=yññé}^ýEزD²w ¶ñ̲áÉq#g×a E›öuû3=eÚјHM{å'Ýñ»³÷¥7Ò&üòn½ù‹þ&:<È"ÍÚ?Ìg9‰à.²wd$3õZÔ˜ÔagS(³‚°¾!+üú%¬Ë~`÷&kYã¬)D­”F³rµ2³×—÷ ¡° EŒ“Q™z¤ì/(FÜíž×$/oÝÝÒìÌlL)\œ­ëÚ)±.åIæ=ÍÀ½åè8‡dºOè/‚ù}‰Îéø;F÷k¿ ‡¦£kT2/%÷Ž‚×÷WÂi©zz”t ›s¼gÃAeÀåië÷U A£Û2S´¯¡uÕŸaUäRG¾jÜ¿ÒCåÏ#¸•GNFXÇo!ó–…ö[ÉÉ,ƒàü‡iÁÍ¢ƒèÇÕäå5Ɖ/­s_~g©Fæž©hä‰@J›Kì¶ÊéGÁgç1QÓâb”è„¶TÐn‰n-;—ûØŠÈ¿’F3ª×ozñ)#ëøù¬^e:þÿªÉ0Æ[Ôå:‚¨‘ù³BMœë\Æülúd›Ë•LJÛršÅ±¶Ñ«hœ«Tƒ&Ý9Ä€ËK™$gÜ…šõ8‚ŒkÛgÚbè x#XX|ó^Gë}F± m …›Ä(»üü-¶JÆms­~¼t`ÛÙûSåWBw0ñOdìlw?×0e'FmÞ~ÎÁO`3¢è\fålŠJGŠèÂÝÛU’Ï`i1–5/B5½±­Wêk½fî=$ï +/VYH‘Áâ•M=©“¦梂Á¾ÞX\vB5±Ð+Eη@âá6y'©È F3‘‡ÊF醔\ÐŒ{sж«þ0mF©îò“)[†øQ ìÃu@ÈŒ7ñv)Á–ZÃ,Ž"¯šò‡cc½}`R×gÌÊ^‚5-`P” 1Cç(ÚÈETVize–·ý˜L»ç¯~ ÷SíÛOµ~™1P&—'µlvÆy5OHIýqä=ø¼6IJ{öÈ’{\égèœïĤ/Yͧ»§à ø\‘ þí•yØ6hØQoVüg`à ¬5»„^-¨rfÆ÷IþiÅWÊR‹òTRõpÛíÓ\*/<Ð…sTZf¢ÎcŸɆAÐBØ0n`EöQc†#a*ؤ"ê ³(Í£§™ë„.d~Cl䄱`žä}Ô&U9Û"yp†H+e¿0lY¼æÙk6*z-¾²‹=éF÷À^rž‰j6ö|7(•³Wg j@-¨uò”©Gnß0±ò.-ôyB’+OHYjüÁ€R=쓽´nû¢SñJÎX Ì”½sÒº“6S¼­ÕqT¬xùíEf0R=ûC1‘ð›”JqÒ¬îžsJ%Mh˜Mž¿½H¡w`<ïYÖDvðó}kÖm‰h6’&—`|«ø£Íºç{<ŒÒÇΩ¡jxÓÎÉû‹Î£ MɘlÔ®Œ‰çálÆ’0¼"q6*Åm±Aó‚º:a'{MOíœàÌú³lr­ôQ¦"Äm1/×PÛÑãnÙ9¢o.q@°®·ÁM Ž+*é%*¯xº ž‹¼ÊabÐ2¸ž1° ñãOaëÚ–£‚±÷MW(ñO:]1lljl¢jéK©ÓÁ·ð3q3e¡öÔçÖ ÒI ’¦?|dG>…¡n F‡šH®M¹þ¦Þuï(›^ŠÎ!×›€Ïhšv wE~Äæº)îrî‡uåùÕÛFîBŸ*Ø;r±?)rý`ó;ìU1u­$öôeÙ¡<1ñrþ1üî·N·däŠZöDMõ’÷ÄJ4©e µf?b7ÀpçâœêuúÇ«öù(-‹”, ‡5‡,B“ŒŽk‡¼-Û2o·R[úO·¥L8ª*iÆÈ™­[Ò° +z¨ÊêGWÝ—™kòëQe•Mj˜A/œ‰Q oîð¾`…sºWÚè oé{³>uêÍâ_û—…SgQP÷£‹»…àSØa°º) ×ꨂ&\¢”_mÒ¬k§™õ2MRÆjÕ3½ö?~Ù\CŸoxf±ïdæ{4:¬ò›ãþa²¥‘ê#I;œSŒtö©ÛS‹¬˜±ršöxSÞÔù1’2!Eú+Dü² æÇJ²è¼ãRtµÎÐO,㌘/L&Ëä­¼MCô`|—´½_œÆ¿?(Èð_¯Ú’àgB¿V<ØÇüþv8¢²&Ì T8Vé„!Yчt ¸áÝfY8¤¼2]ž wC‰ÑÕ ØŸx:« 9´s†7ÕEIÏ+>ätyBQ“cul‰%¾ìðÖ³:ò×Ú¡éΈ»dõwÈgáí Ô—¨Ý~nC!Ý ïñËmXÿzœÛØ$¬î ½5¸KA1ÞKMÊ1{á¬Èå¬Ð—íéÄѵ¨œÜÀp9Q˜²cæt±Ë{1ͤ_ÞÕ2Ø®YÊçd­u†þýÆáoq ‡@À¡Y&|„W-®D ì,›4‘8 ”e“YŽÄ„ÔŽœ-â«zcáWåH{äçÝÞÓ,WËEs}•„ûV"¿2Õ¥ ú-øµ5IüaÔ»AZ”ДãS}4Ý ›òçé"Ž\Vr¶ýŽÓŽØ§c7}Ź‘/FKTµ&§M‰¦£k~FU$u(3ßwNqÊî=zÌ¥]ðƒ ¸ ¶àcDÍ»ŽÃŒ™P]ÞØñ¿Þ®¶mß‚³ßéŽåÁW,÷÷ènîÜ›/ðIuŒë0 3ÀÒΡ³w£PÚúšêͦ e›À“Xá‹’¶ácˆ ù÷åÎ4ï±Ç–«¯Ð·WNBפ:†q1‰)§Ya Í›ôê1¡÷Ÿ”ÎÛ†‚ë& ¹¦†SˆtY殑 V¡’„ œ]øKõ[Àq`Ù*œ¾ýö£2Jõ¼¤`w±xÉhDûm­€žCÑߨg‚+ÇÐ0‹XUˆ¾Îèš·‚6TF#âïT]¡x ®p‘ÉNn›%"cKÐõv悈«;nsÑÌÊøÝ69B¡¯»Ažëý¿Kï òÍ ntß: ïuó#3ÿëxÙ÷LϾ²gÊWÂèàAB[h“2háæé¤5ƒ†öžª¯ó k¶\€+ø{©V4j ܰ/©b´8}tÚaþôe‡õl¶m¿:÷Z•%\ã|"òñïwr’wzUÁ^é¤ :£~‚ç³;aå”)ý2;¯:0VQš$›2‘e´‹¯PC¯²^ÚW–²µ| CÉ1ô!`Ù/æÊt3NÅbÖ;{-IIÅ/qïxªëO§V:ø®?Ö#*/‡´Êþ~‘Ôb÷C®Ø:bùî¾Í4ÝD®êH ÓñJÆžC™&Èv ÄܾQßÁfe¾ÁËSß&Š) UX>ßNhÙZÛ]˜‡ÞFÆõ >˜NHß¶ãÃêjJ|­2JtkÇ÷•P¬¦ A…¤3©ò§LÈjzÍÑ÷Þ@`ññN±ÓpþÌ„/SîîFCÆj÷UvˆI›¯gC‰ Ó%JæseŸô椦ðc¸Æô/²W§¤†xc$,Cûj!9a¦—ç>ˆ“˜[Wq)6¾Ï oC? ¿^Á‚€öa×õòµ™^!DŽ˜ÓFDú“»ƒßa*I¹ƒÇï;H&ä.«í±bÆqŸERqÈéOÊ»¿ŠOå{µûžOAQð¹3›h(õ›ê÷ï æ=ưzL’«žeãTûð»º^î\·îäñ¹ª›d[S$`U duÍ—è4HÃýOìÂ’ ×Wþ« =௧zPª:â¥LDÁ]O-B5ì-‡ne~ aY=ÎòW-ê¡_,º Â"êâ¸eOùL0©åQpÊß"sÜtìðð1ÈêÛÂÖ˜;Ìý¥!°Ä&Ô–#õ°lÎŽ4t=oÓž¨–òÙXè 2aðµ¥VEãë˜ÚS²BrM´"KæI‡eWæ÷FȲ‘F$œÂ·,jiF2ÁµHôîI!Å:oD=!ú×~TŠ»ÓL¤u<Â=Û |u^Ç‚•ÅT¹m%Å;—näé«9 yµs¾ãbÀß«…hpª< ³qH„pã¯O 2š˜g¦ê€X–j‹OU#O³‘bvK-ÁZ¯Íƒ©ÕviƸœa5¦Ñ„³k?WA´‚ÌôÍ*3&_ÒŽ&æMœ¤÷áDü"ïêÉ¡½ž¸¨Â+;û‚ΗS endstream endobj 286 0 obj << /Length1 1973 /Length2 13006 /Length3 0 /Length 14208 /Filter /FlateDecode >> stream xÚ¶PÚh‹Cp—apgpw îî2¸»»“à.Á‚w· Á ÜÝ]Gîɹ÷ÿª÷Š*˜ÕÝ»mwïœXA™^ÈÄÎ$ngëLÏÄÀÈ ‘Ö`b02²0022Ó“«X8[ƒþ#‡'W9:YØÙrÿËBÄdèü&5t~3”µ³H¹X˜XLìÜLÜŒŒfFF®ÿÚ9rD ]-L² );[<¹ˆ½‡£…™¹ó[œÿ|PS˜¸¸8èþ<²9ZÚd ÍA6o ­ÊvÆ gÿrAÅkîìlÏ º¹¹1Ú81Ø9šñSÓÜ,œÍJ '£+ÈðGÉ9CÐߥ1À“TÌ-œþR(Û™:»:‚ok c­ÓÛ[#à-:@YR o²ýËXæ/:ÀßÍ010ýãîïÓ8²°ýó°¡±±½¡­‡…­ÀÔ—apvw¦Úšüahhíd÷vÞÐÕÐÂÚÐèÍàÏÔ âBŠÃ· ÿ®ÏÉØÑÂÞÙ‰ÁÉÂú¸yk³˜­‰ˆ ÈÖÙ þüD-AÆo}÷þ}¹V¶vn¶^ÿ!S [Ó?Ê0q±ªÚZ8¸€$Eÿ¶yÁÿ–™œlŒŒŒì\änlü#€Š‡=èO%Óâ·|¼ìíì¦oe€|,LAoཛྷ ]AgG׿ÿMðLL cg€ÈÌÂþ·÷71Èô/~»G w€6ãÛø1ÿøùç“îÛ„™ØÙZ{ü6ÿóŠ ¢Jâ¢Ò´—üRXØÎàEÏÆ gfc01±p8Ø>ÿíçŸü§ú?¥ †gÇøÛ£¤­©€ë¯"Þº÷ŸB\ÿž ª¿×†ðßäìÞæ ú=þ:ŒlŒÆo¿˜þŸ—àÏ#ÿ³ÿ‡—ÿëøÿoFâ.ÖÖê©þ2øÿè m,¬=þ¶x›gç·Ýµ{ÛÛÿ5UýµÐÂvÖ&ÿ«“t6|Û![3ëÚhá$ná2Q°p66ÿkˆþs oέ-lA vN<8z&FÆÿѽ휱ÕÛ£âôvWª@o+õß!ÅlíLþØ=f6v€¡££¡<ãÛ€1³±¼˜Þ–Ôäþçl€ ¶vÎoGoÅùLíáÿ¸Qv6PèÑ_Ä ÿ&Pä7q€¢ÿ#(þ›X@©ßôæEæ7½y‘ýMo^ä~(ÿq2€J¿‰TþMo^Ôÿ!®72üMo>~Ó›OãˆíMglgýÖÞÿHþè2Ðä_È‚þ…oI˜þ ß²0û¾jþ/|ëžÅ¿ð--«á[lëá[b6¿‘é-eõöVíþAÖ7Û·o“©ßÒ²ÿ­~ë°ýÛòØý«¦·Ôÿ…o©9ý ßN8ÿîÊ[0gsGÐïoótv³û×·Z\þ…oµ¸þFæ7s÷á›??ñ¿†ÓØÅÑñíáþóùx›ÜÿðŸß ;È~aÖΘ'ز&¸í®Jß~{Œï'ù¶z*5½×‚c»Ë2luefàªãPÒPêÒ¦Õµà"ѳ×aslXK‚bë£÷“~œÒäv+üüvÿø×C¡Ú>Âwô*‚;ÞÏÞjVÍàRä9.œÈ ywn½îµ}¥¿FBg·w*Ù¥žJ§è?«~Ò (š&Ï5ÊšÁ%q¦'„£A?sG™¾¾ù‰ž=þJ$G ïsô™¥ÀKk9ú~Æs¹L…Ù© O —ò}d’ÂKx/Y gΫ¸0F*4ªÐ”Po¶‘¿Åеš¸s·tx|}w_?@¤es24ÆXqƒ\xhßZ9»=§–£hê™I?ÞI±c÷Û3ª|:Ó1H ßÊùX9,í{¼õ‡àk*˜Ž½°½ä9öy¼¼þ>.ß)ʺøW?Á¸yf£\gín/Cw¤ãŽ»sŸñq [¸/ÚW*šÇü*`C¤†?˜Ì‰³y` Ž¿¨öW ¿Zñƒã—|ž„¶©^•êôD~ý.÷åÐ8H`Qwç^bmÎAeÛ%xÞ¤T4nÉ-Õm 5,ýIʬœW¥xØ—%l„.0R& h\ÃQYlhø59"ò}S˜ÙUÑ­!÷XÝdÉT8¾I¥°I¼÷¤déÄIÈG=·pY”Šoã RQÑS¦¬o,ê ù] #—R ØìsÓ„¼©*x²CG$õüÁޏTxerX_’7‚H3øµ,»oÌó†êiSU_Ü*_Ï7áŸêÈb·¾Ol謫Ë1ˆP©MéœÊíìä´÷4± !CO \Xë£:u—Ȇ*4Þ–"tD{˜*{¯Ïv­¡~7àr!´î¿QØŒ­’sqœ¥–ás1/‰ž œ[ÈméV˜ŽÒ+òÁml"‚îꚆߢ/óT¥ýõ¥l×÷fócNç¶"7ÄÌl+òìú(Câ$–±{K)v¾+nJé{ªô@t^-ÞHöùt6é_Óéµà?i=ŸÐ$ÚsÁ©»ü5Ë"¹ç*1‡ŒóÀ±…‘Jr9$Õfž¡g·sÔ_›3”t‘ê3¹z¡µ´2m¼qì‚êc†%ulBåÀB}mÓ¶orðuðžMe3¡æg¡’Úä{_}á—G£3Ê»PÀ!yÀƒ©~P.î¤t›V!= ŒÕS‚DSžñŠ9Áƒ~<(õSé ·ŒaäAõ.Lu¦?‘ÙŸa$O.]rÕ~Rðqh]ø”d.ÅêÒz‚BpÕ`µÓ~¼{cSOßA³ºÙµÆZˆI¶¨&ªE_™Ü]‘6­¾(l__‰x’×Ôë«âr[p6+XË„WF|@àk˜AÁÁú5húÓþÒTg,_ íp©š8ŽñKKÕ0Þ§U‚ù‘>ô1Œu+Ö®-\ìªaúv}`ã\×Òt'÷Yn‘vÙh¶ ÷„…1Ölšå³È£,ó–Á›c…LÌ%w>îVí×Á‡µòŽQßµãô9YƒwÅkĦ\úü •>pâ_KnÊù¡çwR1’Ra·áXÚ9=Aªp´R¸ÇÐ÷xVhxˆ¼üt}+ô¾ ‚«òWú¢¡¯øRCqá$KdÓcêÓŽO‡Á¤0ßµÅÚ¤[ìÜe19V'•]õñk};YåÜPзً…!µ‰*\M¦‡³·àÇ%Þsºò™‹uékPõ{ĆÊÝ¥ÂRq½/ÚÅ1a›åÍ[Ñ`-…neà Ž9CÔÉ€©û uý­£Ug~ZW#·%ùC]EÆÓ‚5MÓô>·&A==?ýÇMR“LËcÝÀ¼Ö—ßÚëëûë²HôV“4¦¯£ÜÀ€€1æ|û’Ïç\dÅ1Ú3X.5/@G’âgëÙC‰Šú† $0b"pÚõoçHSRuI~B‡Ð0ïv\o-Ž3‹™AZ„ ¨Ô¬U¦³´òöúáξ¶dí%-2^ó‘·Ôv¢óGV!ŒD7s£N¿÷,b>ÁõÚ(6Gž·IJXwd„?Ÿ µÅrX½0Bzí=•€ê÷ûÈôïZŠ õ%¡wêlÌJA¦”mMþ»ÚEp Y³"Œ.ªy·„Gí¥Û¿è„&߹ѓв֒­ðO5Må#­ JÓ¨C´‰ET:CéÑKµ' Žå‡å_j™Äœ•˜‡%ÇÖDÅôò»Ë—ä­ØoÆ8Af5KÈø/Șó_fÿ´û|õó0§8ë}آϙ­Ž üÞ#;î+<ŒèY›.9D€èT·vû`ÏœÝÍKŘ—o¥ÂÕ'cEL¤`nŠ&ÒÛIh.åÈTºŸöªœ‰8 üsQ‚²íý×¾M_ÒÏ~úh4¡º„_êu,Έ±î¥F-28 §ÚH¤k¦í9á4Ê÷àÈ>7jìn†à8ëd65¡®¼¨žZŠøz23»ŒrJé7Ä¿h8†\däÛÆøŒüF}Ožô—¥Þ=‹J ð²@#¨ z:Õû¸È$ËÎû—vp|‘îø‰yr»Ûz±ºÌé!ˆòº¸ˆýêãj@ý¡‡A4”€€%wa'Iš, 3ï]Z€ŽÅ¯&=yjÙé{–(NëÚO¥×ˆ„‚¤ÿãjØoÌGqAäO¢:²uhÊ\çÏ?·Íd9š^Ié=é°±…%‘n.¸bi‡hŽ×QcíbKo)èÔùÚ6§•˾×x¤ã¤Èç0Dê7!{IYNBÐsª£Ì{ŒwúuöâÁ]–±6)J{Q/ð‚…¨‹¶™ð·Ú½,jeØ/$½·¦¡*Ä˼Åx—ÝÚC“°wJF–!RÐ^õ4B.ÌÖ 5žºõy 8¦&Ç‘™—6•gFY®ØXPÉMשÆVÒ×^Ûý²?]¸ *}köø¤beÍßB¹Vóñø'â ×d }"õ}ç£K5|— -¦uÉõký~“g‰±ŒSXöŠŒ67t™ëØû§OêrwQ²X4-HUrЧ'2¦—¦âÓÀ"„|°‘D;Ô±}ÃQâœ%¤ ágÝkÏ@vœ 貕D%`š#ë×ýClÙ‡âdì°Œ9q7¿ÁSe´î…_V—ÂèûAðè¹¹†BÇJA…XÃà!”1™JzHü>øqc,´Ò¨¥[ Ÿp¼]ÊôÅÜÛ.ÒA=~ˆ˜©œYÊúŒ&(ÿÿ%ñ»7Yy•ØJQ'©ÔaEü–º‡î /Øwí*+WÌjxqrN«SÑ(~äÂA‹æŸ.~‘ÌÑ­_òg¿´Û—NY$ù˜5^‰<’húÆ<&ŒZ¬:ÊA)UMÕpÚJ81yQn̤ ¹»~Ë`£8 n9$Nn™]¬PÏtÒêiÄcEˆ@xnºbœ›ó){¡½$°QÁ _¬ž«èzœL®5x‘7ï¹ø5œÄRºUà òYÖñýüXeÝQÖŒÌÉñ).m1¸ªPDÜøD:ô®MwŽäsvRüÎWCâËH¾ðMÒAŒÇg„¡¤!—œ(£¼&`ªDgí)à£Â­N‰ŽÑúæ Ù#_õ¨@,°ðý-W4o††°*êÁáGC[É&®pæ’$ ­¶€ËWc“‚ÐÉl§è°Ì!Õ*‰/9ôè=@‹©-ôseÛòGíÓŠô-qCÈeWÁ©|‹ý·Ý)Òg“ôWˆžáÓPTr§«¾: ûˆ»ŸºTѧ‹ðÜÛ†Ì-_&1––¼Br¶7%²g¿À Öp÷çZ—=ô9îpî-tH´L©Eš¶^I¡µå.uŒH‚ó4ŸDÓ œ\ëòÐ_bÃHø(“}0ôF¼]·Cœk°r¡ó¿ŠY²E­Í >ëd;º˜ð¯žóÜZ4 áëwœD`ÁÛ‰ëO¦[]ËeLGÝÙä=¸ÎaÍP3§'ýJ‹ß"#=Fb¿Ÿôz9…{ú¶»QÑ #îz­z¤NˆÐéo}Oî­mV7zbÉî[€.‚0µD¯ge-RsêÒ²DNðBD=AnÛ >#ž)ÔEMó(÷œÞõ½Ôrh?.Y$²Ì +ÌVÉ q*íÓ},ÝM¦¾"²ÈwfÕÊHV›ÖµÙŽPû ·(ÿ˜à_qÝFmfñÒ AN!¥ÚŸ£mZ¥¢Á1 dxb†§ NwkÎqÊ)›Ç:~@ðÎs‹{s¤vÝòÅÆÑõ:Cá*š‰?>ÎÈßý¢uSÿ¶µpXæ{So6‚Ç·ÐÒ„ ª«q6”I%A —顢ȹÏ7“]pƒs7¾ó›ŽµûÄ•¬­ÏÙ“±×­ŸLòíý;eÒêQÒ¥"Ÿ°ë©{™Ï#&ÓF,wk•}¦^Ž¥Â<&B#g¶"×g-qÞ¯ÔúzfÈx9é€)M™“QGq{Ê)KÉ,{Xê}éMˆ'¬í'ø@=¥2á;!­)„õ À#¥€íKÅï˵Añ½`ŵ{Cï•.ºƒº=LƒmŸÏRn*ÐPu¾¦„ü3ôƬ+ Ó’™«À®?+{-GÀÇ›8ìCâ—Ëz¹«çn˼ yVÂâvÌ…£å×í¯ÍŸÁsÅ/<.vj·¯Ï)N½.ݵiµ"¥âóšài›×N7mléV-emÅL%mŠ•$+U¡Êë4‘+9{ÒïäBpŠó_³¤Q#¹ñu{¿ —öáÈ øKaEžîRÎ 1ÜXuyñ* ö¤l“ò6É•êB×mÛˆ¡h‚6/Òs¹019#‰–äP\ôU²Ò™‰(Nh A_åô(Š\$½¯ïƒi_gKêI¸ÀcMp”aÏÊ¿õ°W¨º]Ë“ˆÍ=úNœ]ò‰Ç|çí'ÊA™Ô& qgÄCÛ|FH»Öòò üüýj…ˆ!ñ˜sx€²Aë]]÷¨¾!¹™ ’o«_¬Ñæž´úô·CÕÏР𛼨rY¡y7t’€ ЉŻ]kþ†§ÝòuãÍüÐ.hZ µpΤ/&¤gÈ-ýNB‡t¦:†ºq«cÌÆ~HÎ'¿5:p2žÂ2g¥.rLYÎnÑ#¿¦ ™l'M¯Ñ:RV„» Q/ÃKžF2ÛT“Ù”££ÒbˆÉ”ö Ûˆ†??Ü,é‹ á€3Íš #?ýx2C^b%é,äÕ>*óæðç ŸoIÛõ·2K6XEP–¹AñŽ'¡ßxðhnÄ!TtZw‰{Í—ÒaÝdîpÁcPÒñYäk98V`GàbŠDUÐ!³ã-z_¨âíÕh3”xÝ5lïx]é×D¾ ·uV›vÕuê’XÙfHl&E41£ó>uYA,ªéÙõÌô%GL´õ¤mº¬Û¶o&‚÷Rç]nÓÙŠ.3iënïá‰6ö•Ü9Ö÷UÓVŽç¾’Á`bÑ6WÓçé®å•Ft=Úéî¥냨š!‚©kŽ28]”D,ÃÜB"1¾´ú;©J¤[Bj½Îº‘¢+&HuÄïfý7h\V¡y^máT¦Vá~sÔœ<.¬‘‹¬Ên ¿œÄ3ƒ»|¯ªAa>Î;/ß±{ù°6­>Æ\­·ˆ{ Žì)Qyü°Ë™ûöüìaÚ®¯üJ²ÀÿÈ`fpó^˜]bþyðP8éÃÓ ‰ÆIl=æut³†˜XuæqHÈH½U/ÛÚZ±ƒýÆÂ®88 ^œ·6ö=ËtÚ“äËò†9öŠ"ŒžÛîrPÔw¯ ±òOÜyV|”ˆ}üótáâêFIï‚$ølߙŌJSé +÷@̉g·M}á'ËÃB­¯Í±¼R>}_ã¦cëÇêC§äňÅ'­¢í²R(Ý—n]œ<^â,sêÀwï SíX¥ÖK¡,¿~h¯†yö#÷0E§AšÏE­Ét{&“a:—ìvŸS+§ç»öšß‹õp‚IÌh£Na ›Öyúshhç ¢FÃî› «S²·J ?J\KOÈ|E£‰ë6|r6ý¡d¥k„µ¸orð:º‘ââì|0G*ÄsW¸£”?a'4*˜+Ãbí,º6?§«æ[Ô‚s~Ã]<­c×Õ»M<“ùÞV–ä‚B“®ÄÛ½z±Ñ@rÊÍyè;–vGQþºP¯ò.L_Ž«V—Öp¬Ý0ø0ÚJUÿ ß ùãç«#W©yÓøàáF¾mû9‚´/ïÒ°{ꆋ‡¡é¹¢1ç„í=Y²¶~a`OyË‹[h„ªv·¬Éîñ¡bGÚËŠi]ìD½÷ò2é02…îžl OM#{ÜõÓ†žlϔǣ„Ióµ A;q ùéûµ8ºôM[ûnì2¾ê¢´ÞN?LÔ%Ø+j<˜`¾aÂj°BKKÔöžpLî²ÌÐ;b£¢Æ±’Ø" %K]. ãÃ$­añ0ø‚LjJÏ€/ÙjNð仹_¶b?÷¨m’z~tö㧈­µ19ŸbcŠà¸ê³DÉΜÑê±ßÎßšéë ®Sö“\“Qi*Ä |`ö¤7‡Ã€-®d¨… ×5ªpuäi_g‹¸ªÞhñŒ‰ÅoÙ—ßʬo¶Am›8dÉv ¢•'dF(¾úœ6wE}˜¡‹ùᄔŖ ŽB-cd.«§mÕä?òÝp »Š&¿×¸óKvÈíÞzH"Qá@•Ø ì꼓tѧ§&dSºg¸M^qª[ÙLO¯+2ˆ9{Ú‹¤Îeoö]×F&‡â¹¬î¬`ÒÿÀ _/›C•2K$Â>L"À÷öÞÜ…é`xýç…’72 $O÷ëŽ÷$Ñy‘ Q¯f0¬V9™\@Ñ”'ž£(Vì!ùÕ«–„îRTA`.™Fy²l”i¨07¾œ¦V)Ú/„ÀÅ´%[×<Ò/Xóø4ÆGå ñW¦jé9¤!~YL›ÃÉTGw¨6ÜóêÛûî`/ò³#}¼PTûš(mBTøú6,¶|_–C&~ûÕcÃÃrËG;•±ƒ4ŠyݵN8)íÁ—ªeí=ÁN RqN‹Íwz\ ¼ ŸÀƒÝ&aA´¹ôEÖí¹&™®§ü[Â%°±Ìöë´Ip°/q-ç û+SkÇANVA/¬Œ0å(Wåssv_òÑ'ãdôf@ih¡òA †•f»R›°Š—’NÚÖW×á’áDžOã+î½ eòZØ›rbš8.÷f˜0BO0ŸÖœSt fv‘ 5ù]OÏHøšË aÛx‚3e„üî+qÏMÚaM—ÛpMmk’ñïÐ €xBäjS'9š‹_¥Ï§ôç<» †øŒ–š ñÝ>P-ŽÍ<ƒ-;jx,HT«uœ]¶U¹ÐÓ¤FÁ÷Ÿá~mçÝÅju^&²nÞjDËMå!Œº–ßa¹E* ¨?>ÏØ÷FЊþƒRý„5ãKw ¤Wš-›ªì¢:£p²‡]·7| lÊëA£"äÁ ˜6S;!rUK8A/l•fa‘'eòÉ®õ¶VáW׃$í/ *”§x¢ÜlzpS£bt®¿/å)ô˜Üôªâ:£Úä8Ág (]P”o}uåÍ&T<8÷){îM êôSÏØÑ=ÐfÔÏQ^€€_Ur¨ŽDÂL»ÌœRøEÌGˆ‚ ˆֆ}Äu] ’\&$Ä!’’Ô“<\–,B6Wþ‚ⶸ7]3DƒY!‡¡ÞØ¢JJÀÌÒ”9z¯@’®ª` ¿x±E[îóºÍÏ3ixoæÖ»»R1 ý¥ê‚aw".Åm +‰êJîÃSÛª-²¯[š7î즨¹:ÆM¿³`µü.i™¬÷©-.ࣰcÁ†¶bÏX;,šHrçáQn#Ôè÷ŽÅ¡°@ÉMç°Í˸øIçŽÔTµøíJ娯zKâý°î¯^ŽŸÊ%N"JY:0šÊŸ ‹G%vìÖ¨kö÷ú\®ß8T“ÎzhÝsÜÖ1a1eÙ‘åÖͧˆ‚ÑÐRïd ؼÆÒä¬^¥¿T¢i‘C`‰OžÔT¦ì\‰ŒQ‡ÞÄeÝJ˜лYÏ ãíÉdKùØí{ÒËèýþ,½&=–jɪaú¿fÚb¯½…‡=Vv—#M”Ø/›>¶?pè³èŽôYï: O„Qlè³ÁõF2#®ð˜Ô;d]ô?ÔÂgQ\v+œÍ ~Á¿ÞÀHåA‰âfo ÙöЈ¯¤¹Ó÷ÇS5üÍ)Ń-’S†fÚ:º6ÅQM]_(ã©ÐÓF+ îœ,l9v4@Þ’¸ädž8ê4RM\­NŸ(äYe’彨µhƒT‹J¢xXŠ IÏ0Jk_m2Ú.}.êcéO·D¿@)O{€í\mº*ëÅ% e vlw‚ž•‘ê”Â8?–ã^†ª6ˆ‰ú´!¼ðª?Ë\=“‹4îH•kÕ.*mäÉ£ñ$D*±I´àáÇYÇ22O g¦gq¾ïŠÁ2Õc\@Û#%]ù©ó””ï”ÆñùtK¶_ý%‹œæÛ¼x÷¶Ÿ„;ê‡SUY¿P‘ B“!V)•½MHº<Ðé]¢Âz¹Œ ÓéNV~ÓRhE¦±lM’{·MÇ rr±{áøÐXÆóLu½}Â’š­5k`"é—õIPÙ¸3·È[Vä™/KêYzÈ&(hIdN ˆ…dñÿ#GðóÏæXë詹 2¢sì¦ot ‡i~àË®Î:Õ(öÙ5ä‚@Ö kzGƒÌán9L–|”Üðuƒý®,~çU1÷*óÖ.ù˜{´§gÉIã0®l|žw‹M‚Ç4Ö®rŠ‹ÂÁWÏmu¬8“xÑRØÑŽnW9æWñb‰>–S7g]R*¾Àt©#ÓÆyJ GƨmÑ}/b@à¶Uš jȧ•ŠâË1ánǺˮÑè¡ÆÆÎÀħdò¸Ê•J#€Œ¯]WbIÇç2,ñë‘0LÜukÔaå<]r!d+² wØ '!Ø>×éÚž§<·ˆ&6¯¦E Ayá®ëöŪ-¦ ~I®®GÌg¯j1â<Ãb÷ñb­òg5rybÐD¿&ûä Ìh3¶/*Tcᇨͣ Ê))Ü«òr¾9å½+3 @qÊ¿D}‹o†RÄÏ•l¦G‹5& ;ß/Ooœüõd÷õ˜+ís~Ì‹¶_¿¡Ë…²*ó—¼¢ÊSV9´ía%3°`8W0Ê“Üägé—² HX¦Ï÷?3ì\^È€eµä•;Õ<ã’=`]Ô é¨-žÔ´™(5Ë`‰©J˜Þ¿†ŠŒÜ•!wçNK>á¨AÆ× Vµð½¡h’øÔu,_ "Š[¶¾P¸\ñTt{ ØÄfäïú‚¿æ\JÂ?Õ),¤c üùh>9d¦ÿý“fOòCζ•>«®¤)Û£ ¡ìhlúì‡='‚t§‚woë…„f[DB› Õò9Ó—mŽYºÍ»s]›Š}Eµ¨€ ¨#?7KµÓ™O½Åvy¸¹ÃOÍb"ÌËU§dÚjÉr”kDgð,L¾n3Ž«JÁÆ£nïÆáîð3ñy ´6i=¤ôÎ,‡7ã°®k]é sÆ#W_‡Xyn…°ðØX¯ð HYЦÜì‚/ÊHn"Wi•»qÃfÔO…ÈäiÝñœC˜=$,WhqdŽ"~zb¡…‹ Y0{>K<ßQP<Å °¤ó§‡Gw«š«h($°øš+¸v—¡E„‘í¸~F®ÍÒôÃä¤#¥9‚úò}­-ŸÀÈèèE¢£dÁz=KßîŸ%±¢[5«3èeßÖsÍZ3¿:Ægêúsò¥ê2ë‰v¸ŽQUð ÎùKžš®PáMÕq|Àå'ëm‹¹"|XÙa„…Õ‡ü`¦õή¡‘óG®ŸÊí }À~Á‚í Jæò0ÁË»Ë@â ÷ª9ßçO#Ú‹_æ®Ã¸@õÃv•MkÈÅ÷¿,2Ä&ʶ÷÷¼1Z ï™Qµ/ 9‹¢’÷ ^z°I¢ˆ‰ZVTбy/+¨XFá),ÔF$•Y‹H™^¿»,·ö!‰páb ‡C[ Ý#LíX½ý‹š—¬IÊH£>Ã#¤. ì•X@ï°Êâ.aIQzÁð|+o4¬ÜÞ£™Æï©!|a–(UÃä~Köˆ#¹I0C#ÞiÓ›øä— lx -÷ä LZ!ö¶¼óÑ*¿'á°‰JY!oÌ¡Ä2 .¥ ¼Îà^Ë3œXÞÂûæ;ÉP_–:ðR)ÖÜ_rxá‰B\>ï®OFŠËû}¨½-š!{]1žpð›®›çÑ4£44ˆ.c㺨ÿ€bR‘vµE…½3‘hz,±‰ö//dÜ“úå—3iËWÑ}Fòk{› ºQZuÌ„XÀ?êµA…ª—äEާ;̯«,qÃuÜU “îÝÖÒMñé ýÁ¶ÒÅö”dÒsjAؼ‡ŽFÖóõOÙ'æüõ±èZÞ›cß!ìŠ,DGõé¿~„nPŽ£%=– :ÍÃ[ñÝ»¯ ÉŠ2æ@ìäKà©'9/*Rn¡­@@ixØÄ€{}xÎá,žR>´m|ÿñz<ŒêÍ ù^Ó¢Ul_½ ¯S…U3ÚQeõ¬ÁNðCâöé‡cj ˜}eyA5VlÐd ?~ •â‘Ì/zÙY_¥(qœ!³Eþ§Å©—LeU˜˜>Ö~áÄPs6£$„GãÆKûæNš À¥kú«Lð§½lf·>o²ïÙq´!ÀÅ ­¢a «ÆòZ›§|ޤ°vû/¹dþá_0å,!Öoü¯§êo±+ÛÝ–!‡ûF”èÕ¢\1Õë¬ú/Åâ,ú#÷‡aúUÖºïŽ|ðç’¬)d‘CuÆÕÐ0yůGÄý2e‰DïéJGaî0P‹¿PHˆìR‘³3µùly¬€Ç -J+Ñ›{»*,ë4†;(Wša.K–Ä#ähÒâqh ?X!GÇx`jGüEéÖØÅu6öþ{Çâ«<ìÒ«I7î~M SŸªzxX`±'ÛZ#ï~Ò#”ô ¯3*ê7¿¡ç‡61¨my¶šóœ¯L›í‡;F´ˆ ],ã€ÑtXg!Û×-ÞàÁWÄ1ù ÑJ°(ŸÚxhp3L`–­]¥Úrn¼Ÿ—©:0|”Ž—ÁíBLŒOBAû $Ò¦òÄ‹gØ›—«l8œ 5Kôe—< !1ŠUÑùf{0¤¸Þ”°´!·ýÇœHKsÓ;7(”o´Ca("ŽÃ8ØxvÉÊ¢„ºig¡0âdõ’(ÆI¦sÝIä~|\¤,Ö{ˆ-‚ žÎq·H²®€aÌ΀%Í춯 ¥ƒ‡VñlüZ]éœqô}üÝÈ ædúçy1BðàI‘З&ꋚ z½ÓÇ-˜ñ¶bý÷é†ÙeŸ8>Toæ¸Û÷Lœ”ö zεƒGe‘G "e~ÿˆ âÚéä]¯õ3jÓü«â¾ryÈ)ÐW–Ø[I)hØG‡$-‹°0ÿºÔã2BmÀÄ$Ü5¢w=kÅÖsò”¹« Œeœðت¦ â‹%î<67\®çSôóqµ½Õ{²¤>z´é`aKVœJœ6à*‡>yÿ¬Ù·! +þœ8:«È„jïVF‡»µòË««†F‚ÍeH±v8YÓ¾*¢ræ,½ÍÈ'ksŒ"”FaäンF•&î¬ÓüXRßCûÊQüÀœÕ_Ìžz8"ä<±ˆ¬Ð’x{®³J½d CôHÊ’ï>Î he&$ÇÎù$thDé ÏËȉ¡·O¿"!èÊUMgÆ"«&7¦¡sÅœHzÄ<žËâæõïgŸØÙh@#yÂ:]£šj€t{g¾œ‰¿ˆÉHˆ|SÕܺ‰`Û¡ÙÁ Ä"—*Þâ©öc«‚°8øH†B=ìÕÜy ÄöçP³ 9Ô…¶§Åéæ)+ýÄoC’á3(‡ðæð*ÏéQL'êðÃ,]ÑHƒ öÇ'æ-/2æ†Å!‡QÊSîÆ‚*H5i[‘¶ûb–¸ÆLî’ í ÂJ¡à<„>ÏÓ£ËÔ(’M.±ªoKŽ0ÐTãeº|·™õw¡ ÚóF‹qo6qϼ™Þðè”òçð>dú7Èçè€7õíTãÑZ’š?϶{R§ €PkóàIÀâýÏù .²® ê¸B• Ã\Ñ.øò»Òõ«&q«®ß@TMÜ÷n³hÏúÐÎÍ\ËSV¦›,U’ܳìÌ4ùA¶{ÉŸXx À9Ý©èRý.lGµ"ù‘±I¦9¨¸—‡3Ñ#‚“‘|q—Ti/% DÔö&ê¹´Gû—:Nʾì='Í7Þ˜O”Ô=x@×󦽯ñ_´<Ñ›¤Ñ734'ÛNšÀÏ05UññŸ ¢ƒ²î†Ì1,¶V°:«Ü£7cÁ*)Õ¡±oÎ^™PI·‰w‹øR\T¡ñ›/†¢-=è¤YóLe²1pi™­ P]''tÚµ3™‚‘)}>Xì´#¶©íx“‡ ï|E/jf í; Ðâr™3ãV>¼ù<Âטµ&]JÒ6I¾+”r4ÞSôÀôŠ …+,&AÁ(BÈòò+$É©ku¤J8> [ŸI„|Oßý “ÁcŠWzÈÐ~5#Ã3Í<Ïà/äÑ´ê‰þ|µ5v|ÐJ·¡É¥%æpª;¡c ­†æF¹±#£ùÿµUÌ¿¥!7÷Å©ŸÙyb~¨‚ "cަ-­óürÙ¦W%<V¶6èpf ³Î¸é[ $Ñ‚bNà—ØØ½$eEJM®á46̃öwÙnå‚ò¹ªìÌY h‘‹Õa€f¹ÜÔ†k’öçCrMF0® xa°s…,ºð–Ç_¾Ü)_êŠvÙ‰¾ï/zXÐóXÁ¦O›_Oá:Â|ÜZÿìî[d Û¿ùÈuQÇV¾S̘¨\°’·òÖ…æ÷k›OY«AC(0å;ÎŽµ^Úº—z‚¾!Ï]uƒ#Ò^…×9‚›‚ýÇ«%¾z{ú,$;þYwP‚ÄÁçÜdƒÚÞ/hEœA›‚œ®·ÇÅmdÂ;ŸÎ•ÔÔÒ_Âré…t2¿u’['‚G½X åx +´„y[Œ`öƒEÒšoߞܰ$N9&é}Ü|#QÅ2Öb´AéÖ/¿§Çä£ Å¥ð9Bþ|ïYŸ¬ÑÒ*“¡ó)?p—Rhœç)½î¦ª2bϧÊ=UÆaæ:ÛžÝ[ÿå#‘dª{µJãÛ¡ƒxçÎKh˜èg¬¼¾W4ñ“ڔÂÓ‰¬íãÜë)¤™*öý¹Sì­OĶD4]0©eëÐ'fŒ‘ÜÒBi5êcUKYiÜö‘÷*¦½;rÝ™K[9ëýô¼& Â܈Cþßâ{(ïÖmZU¶ÇšÖ£?$ç„ MÆ ä+È?‘RGIrWÓeE¼ç'*þ&™!Ê¢¼6®55¯T}Y#Øs©³†úàb{Á¨ïy¬ÿ‘%:Æ0½p¤o¾BÐïŽáë ¶€tjB¿=Då”§‡½<¥Ð¦a` RSùã~ÕÄÓ×I8Ö›Ÿƒ<6åòåVUáúKFbºPê·t´`&²n'Š9YäݦóÆnZz™ïuºÎýÔ›.O«sùÃcˆ&ÏÈIu*Ó_ºÕj “›Š2¾ÜËR¿««>™Ò!X1SeõÁ£»¹8¶«ŠL—¼éÖÇ)—´ª¾"ðp=¿u0{‘1l‚~šAjƒŒÀÌ&ýŠ)šF‡qíz†leKÓT+´oÕ©5&'WmVÕ«é55Îk™{Б^jÍ’^ì–0“ ¯Ä ínÛ¿húZ!£í8uß{ÁUÃ&•ñ|÷š(ÊYΜCo@‡yùœ@Ï5î0z鄉{¨ÇÎݰæ|Úa¹[ü.Ü.¼ÞÑÖ¼¢ 9l„ŸYL;"FuljEKTjÂtÛ8~0t qA×iá™’õ7=vó4’þÓC>d1üÏjË.œ%CŸä-·™½èÙº©VE•ëj¹¿"UÝŒ>¿RT# dSlt+ö9¨÷¡õbÏëlÙsÕ2 f5ÕöCìN/)"Ëëd.™ÐîÇB§3sÔ> ×­ZØ~"=Ç»&/׊Ø-Ž€³.»uø±µß~Žðóc !Rë×ï‰a.ö5u^q>À…ͯ­á)b¬%GaƯëë?Ÿ  –ûFŠÉbÔ²xIzØ:“’¼Æ/œ„¾GsT0 Ã*/ Éàñ­ƒe}"ÊDp´ø„©›•è„ë¬!9™òðKÑ&|—º\¦t;úÙ¬þ¯¼ ãm† “£¶Ô'|X‡È³ÉP‡Ý)'áXHä4L$®Oö¹ël&úI>Bé˜ÜYLè ®ã´7Guáà2èrkùºLu}þû•ÈÂ.>‰\H }UkGîLÚSÂWv{ÝÚNz¡I³%ô•ˆ+Ûû—‡zf®½0hQ^.áçÍ7›È <Ñ'ûhðu¢eND¹@mJû.¯úŠxà8Ô˜ÿ7uÞ:*šöT>Lgè‘*X–Ÿ ÃIgXùÈó)%.±Žð5Ï÷!yìá •'"÷vO-zDT]ptò1!‡%œ™a±G8joŒ¯ñLÉ]>$3™E>µO…}âuÎiŒ.É´doÑŽQóàåk?i€ó.îænÚmª 82àimü a õ‰²ioZ ÉÁ %Ö¢ƹRŒ¢D&äÁܤà´øZÓÜOÀ¯Sš vùãñš¨&.ÉñMtî¦Fñ¯üŠ—Ô—fwœ†‚«övs °[üô6zl$Õ¾êÙä<öi}Î6»ƒEdZN öú'œÊa3£,Lá%RÀ,5Æš¨U¿Ô'xžÒ$cͽ²«–Hh‚yÑáxó–KÇ<ĦÔ5[‡$U.—û¹‡Éb£,Ú|ŠÍbýš¸r×ÐAÆ OÒ([¡Ü¹KPÏ'û‰£®Ÿš“Ü«ã=<ÞjhºEËèš½ÇÆ?3¥ØÝÅ…œýª+á{}|,Yù/kP³B%¿˜i,n}$ÚÕÁ­+gë‚B*ç×LëS•Ù0ÈÒé“V•Ž7D"£m‡¥Ö®…¾gÓZ2ÈXp†¤©¸J¸=аt UçÊHc—O áVêµm¦-ÙŽ|k1óûçI3»ËŒnˆÍï0¦!ñˆ™ÌCýiôäÈ:J©­šf«7ëv†@$X‚{ôË[ajPúWØûˆ¬Jêm:@Çg5•"£6¥™#†y’úùŠX±ôRí £³8­nHÁ(“>7A ¨Áyúuó#C$ˉsU«eIåÔÌè‹…CAú*®Ú§^ ã}YN±:&Jl_Dž!b~÷Ìcý’-v(n FºÆƒ+–:¼Î|PÈ ¥~:ü­NÕ´r˜`XGè @µO¢%Õ—•+~¬mŽÐ(U–ÊÍtÓñKhUT’r»t¹Š-~KL5ç‰ÿ\}êñ<Â…hhòð«|‘Éûç;k"òÿhqQ endstream endobj 288 0 obj << /Length1 1477 /Length2 7073 /Length3 0 /Length 8058 /Filter /FlateDecode >> stream xÚuT”ýÓ6!µ ¤ ½ ÍÒ)Ý¥4(ËîKìËÒˆ¤„¤tIÒ-JˆtI7ÒH)H§ïêSÿçÿ}ç¼ïÙsvf~3ó»®{ÙYð)@‘Ö0U$Å'È’*é(( ‚€ 0?$`g7„£aìÆ0W78!õ%W…ñ)ƒQ¤Ôtw ŤÅ¥@  $ùé*T£áP ?P‰€¹Ø•Î^®p[;æ ¿œ.  ¤¤8ïït ‚Ì#€:`”Ì s"ì4@Bà0”׿JpÊØ¡PÎRü`'7~¤«­,/Ð޲êÃÜ`®høkh .Ø ö×lüv ¡ÜíˆÒåv…1G8†pÃä¸# 0W æx †6ð3 ñXû/ðÏíùÿ.÷gö¯BpÄïd0‚tr#¼à[  Ü| ªÍòDñÁè/ ØÑ ‰É£ÁpG°5ð»w0PUAÆŒøç€nW¸3Êß îøkH_e0{VA@•NN0Ê ð«?e¸+ ‚Y¼—À_÷ë€@z |þ6mà¨Í¯A îÎF¸‹;LCùOÆøÇg CEAâ" ! Ìó„Ø ü:ÂÐËö;(øË™ÂÏÇé ´Á óƒÛÀ0?70D¹ºÃü|þ3ðo („Â!( 5ÌŽüSã†Ùüac(à ÷>a(ýúüýd!‰pôúþû–ŒUT•”yþšù諸"Òè#(äAââ@q̃߿ëü½¿¦ÿí}†ÿÙÝÔ@Ø ¿Nø5f}M‚þ“œJ‡ øï#t‘NÀœÿHÀ$ ‚`¾ÿÏBøòÿãÿ¯*ÿ»þ»%UwGÇßÎ?ÿìwôú‚!µ; #$F&ˆÿ†šÀþµ wwúï¨ ŒŠÂÖñï]ÂÝTáž0èC8 b÷“þº LyG8öéÿõâò ‚@ÿÃHâ€y¹¸a.ìØ £CÔï»ýeÃ0Jûw *úK’B¢b@°«+Ø €áÆÅУ](Ìó7áü$ “ÄŒë´Aº~ݲ¤8PüËõÛúÕ‘ôÃ/×ÿ0EnÿaJп͵qwuÅôü›H˜~ÿ²¿2`0O03‰„HÛW7V*Ð{ð­ Êàí¦œš ñ æ?!DuªŒZ.ÇdfÌj«Îtª>±oÑUt9ÍZ˜:ðùRÃ\ë%rÌǬºiËl;ùó{<Áç„u’ôVŽI’"“T¡k'ÖCÆH²DrPÛNvRß{ÕíÓ ToTÅ5Cšt?|¬|“¡MÍ i¼½¢zoÝc¸&zxç^öŠSLÐj”yx²n«–̇3@¼GÙRw_Ïyckä3MtàÚ[(Š\Eº‡AY„ Âx.÷Öev!ú[…µ¥ü7hg1/åš/ŒÈm¼hÜs!eÞ!Ç¢’º“[L髽åÇ õ¾]rÃZï]ü7{… ®æ^߆]ˆê£€ ¯4Þw”GÙ3¥‘P‰7kRjK$94ÁÞR¦"œØ}Ôõ37"ovsiuq¥ÕAv ÕÈg[¹·Êáü`z®“v‰¯:àÆÅ †y¾×‹[þ\­Ô„Þ`ôÕËášü7tŸíU?,׫zS[HýÔV±${Ù».ݳ>P[— ‘á¼mì='Ú,×wž*ãc`Ý8½;õ☰t¸È¡ú8*«mù#Ùe0„ªbûQå®fé¸L”[dmoûÁÖGÐ`ŸÇûýNèHéB¨BJйŠeÌ•ų˜Ron¬ v›¼´ ºüÊ®8TQd[Ž'Ž•µ1ØR =Xª¦„´gMZD·ØÓ4}q[»ýY㸊8$YÔ yG6_¥ZgÒõ«¦xW땨<•{½f¼ŸÃû‰ÔR.QØç´^¦Ïîó‹(õy*ÿ¡2ù¡Èü”©`ñÕÚ`˜7«a­…3ÊÔ’g­Ýá‹Vü³¸ä–Mžüp·ìÏñó&ÝICó:û±·MLßë¿ß,lÊâ–Ö'AñÞ|Û2±±^:ÿ²xgäÒòz¼…êaã)¶€U]ïö&å!ÓI9:ùë§È;B˜ˆƒ1“]Ž„þ=ßÉØY› ]Ô-»þW+ ôè¨.`*­gÒ39ŠgÚ)ÉÚÏÏ¿ÂCU†»“ÝEH©X˜¥6Öcð:Sæ¿[&‹}ý¦{BGµr_3“äa91ŸÐ¾m‘HÐí¼ÛLàú¥wtÈW‚{»'#¹þ:"ãqh‰‘‡]†Ú†…š÷±Ë½Ô×¶4èØÛXkGœÃœ§Òr: tyŽ|w¦…lËF‚Ój# ï"ÙîÀË>ä²ô|- îÛSsõ³6|Çqn´’ÛéÊjQ>ù‚/_g¦ïØ*ŒÞ²=Q†gôµéòÎŽx*þGý’?Ía‘çŰ$U:JSa¹âûÑŒu¬‘vP×DáË“*åüÐqr[FçÜË äL7EØýØèÙx13Ç}ËÒHŽ7ñ6;¤k!Våá!éi5CýrV¾c ãϤ–Š}‘v×¥Sø)µ%O\tíAè^ÌêTަ’d¨ÇÒÉÀ 1ä&VÛ¡×'-é@{Œ½Õ´4ÄrœŸ œ8Ö?ka¹CÌ×O¸Ù[š6E©¯KZ°ï¼VÄ-†þ 2ÙwCßú4Öö¨fÉV{×ÿp©¥Pü€§Ì*Ÿ‘Oò²g—‚˜^Ïi¯WÊÍ;tGsŸ¹%O7EÀÖT~+ßÉî M<Á–¬ðÜß3ñÕ}+ÐqÝIè÷³‘†yåÙ+›ÖUE‹ÛFjÜ@Fv;[Õ\­j€;Mý ã@6 4Æ ™Þ.oD¶œ’c› Ÿ™ý¦ºÐðṮŦ³ÚdÃAe½“Óîݶ“á®ÃiŸç¨¶8’º[?½§sBî§>Æõ=\‘n™Åf|¦ÚàS^Éž¹iì}±Ð´Ê°9ûgºöó N©|Vuš‡yÅ¢&hSÚ)1:±)š£ŽÔ¶ö4@p,OF°‘Ô­¶"–UÇ*JÛa??ÆIßñíÎ?ƒ7Ø+N$M6Bµ·Ü·¹™ÿúž™{á‚ÉÈ1¯•˜6€<ï¡Ô½âJûØ:)-®*äl)½—Æì“H ³GÏ^ãb:Ñ![ÊnßÐÕë^á‚ÒÊ2ù¢ŒŒ¦` w/Tr—¯Þgõ‹/.ä,ÈYÔ9”9rüÁ)¯;®k‹È~,3òþ"ØAE¿ý¡q‹R¶¦rä…+{ß’áþÕõ·CJ–ÞH6›MÚÈËš"!—è÷‹®ŽÓŠ&Æw<úVýî±9y¬˜Õí£n’³çݺÁNX„ŠÕ%^6ehþwžï«3¬yÔ¾@9~ÓÖÇ{_ûé³&ü-¾`Ñ ¸>? Í´°p&%L¹i5\{1çLaÕ¯ÉÃêw”xRÇ=™ÌÀX¸®-ÂN|Abl½¼”Å6ïqÖ”T@0<¤O38Rª}›äJcdWb$sxg¹í1M]<«{C$¿@öÊ)‚[¢4¨¥ßÒæR`ÿ…°ÕÚ€›Y»¼"–ÒÑ\¨f3`L ŒR‰3Ú;ÖúDb9‹¤ e]½³r£ `9q‹âÖO&–á˜ôaS…#üdHwqrèQFæ|ø3jIf‰@‡Ð²C•ãó(ÅAÞ[š›G=’œÒy£àâDHƒ›Òë’2•&<).¸‚:ñ¾>Áçp6Ël%¾;j©.Ø«u·/vð†ÀŠÛ¬Ÿ¹bÔHV¬)£ø)˾cº(Éw»<y5+>5˜•¿üòi¸e6èþ=ù}Ø“õÁÄ4+xAëyÄjäA•ŽnŠÌæ5=¿eXËCX…ACLË„ŽðÑû½®·ÈJÉÅG³‚BJxh¥›76>–Äm)ÌNÛ$¦ZÊS[ûöXRMÞ+¼º Ó “ÝæÕ;ܬ<xXö|êv\.2ಠ’¡Ìa*.©“kuà%èÛ|.M1Sëþòñ8‰@Þ±jdÉklÒiSÍì‘×~ž¶Ëc¢UŸ¾=klö’2˯JWO§Y<'Ó¤OCYŸ\óˆW91xª é!æR,6Gš6fè¦ÀÕÔ×`Îç¬!ùVæm»õ¡5¼ÂÁSÓSF1ùmí¾†kƒ„-Osû6 Z;Ù[?£ ÊR“Åjé?ép&£¡Å·®Ýêí—¸›äJcÞÂñîQ‰rðôkL±½?#|àsÇ5‚’%ru—9 t¢àR^t€+#Ç¥E{þ¾ÛØ@4•mÜ–ÈûvÜ|•œÁ+äÚärÛ‰ES åªë/BÖ¸OKƊηΚV/ÙšJµ·j 4B^½ªàùÈDž2âxê9146õ¢§—å5Ó8eXqÞ4œùÜ"‹l•ëIÔ1 ×LÊ­éÊR¡27dB˜ZíÎí׳œ!±EY6KÜZ!Ìjåo¿¶(/ÚQ&}ÞHzæhûüh‚ÔipÕ¦7¾¢^-›¬®®12€³ ÏZ‘‡‘~°|̘¡-¸DFö@öŒ‡«½Ó²É$Û›r$¡Ñø’wЛ :Ð éfN1ÒÖ”kà)/’6ˆ­w·©Çͧùdé3mbå1ïô Yœ6è˜Øí‰Gf¸UK‘赌¤Ö}½e )rkÃoÝ¥)°ÚNÓ2‹RòÖ;Ù^uù gô° &ÉGiíx}&‘,¥Ìå HÌÛ5ç “WÿÁ?£ËÁkk]#Õ®{#R÷0?–RQϳ‡·p•Ñ+ÛÂZühŒ„¼ÿ€û"j4ý.¡{áöúu2c½sÊ {X“®¢ùG‰ëºç÷u{•‹†s%mÓ‘F‰Se¶!NàÎgÈVrürzF*âk%]ôêF…-¬®£—¥ÔájÔ1¬MU_È¿þ¡F ÕLªÉR-ƦtÔª ~-ﺦª;7nž²c[œ€¿št>_{vÖ%*ë*ð,,~±h{Õºöyõ§9¹®«ç…F#ø¦£ˆoÍ1¼ù^ìUx}æ$r†[nð²avSï*ß9È~dÕ8Kÿ¬þ…?57gùËSž õ*[ƒ!ÂÀ ¿Îï !Ó=že·Ì"WoàÝæ)ûö­Òá5<8£ÌÅîØLBµ}ò%.Ÿ9≒Æ<Ïz)ÖÏwûþÐfŸÑ F7Ã-LB¿ ê =ÌàTzµqJÍJ°¡÷Iô ¢ó clª¶xDÛ©Ò*¼>]`OÔ›f¾Q¸–~å—ù¶v“g¾ãävŽýÞ_ÚÚ°¬:’D÷t=Nt&)&짯È'AVÇ+€àBw¤º¿_Ä£Xæ»ÑšŒOÎhð–ýé,”ùàùq‹Xt›™›5>Çm ý¾ÔiG.ÊàpBÆ^Ê´G'Õ¾8 \øÉê‹ß¡½ƒÏDü ÷UÒÆ’8EÉ#!œœõð·íú†ñ1[Æ;F¬11Òì'r.‘4ôGck€-¼ÛЗkµËKr'ú/.TÑ늺ý*މXJQ2Ib؈z¨÷<”¼—ØP3†¼µ³ã*¯_@éš¡‚ËpÇLÿ• ¼Š…½/8¢ájb EÊ铨Tï‚vÅ·YÖ’•Ì¢û‰®'uæÕ9² ÚÅ/Ò «Ï¯ØßŽ” ]ÛeúÆn=á]‚jæ Há~f”?ƒ6œéŽ?Sþ(„»:5!Ôo¬.òÍv:bÒ&Ëé>£Ï˦H+þ"•ö!àâ¨L8ˆ1öÙ[:´eÆW¤À±s`ÓåH¾kyÄ^x3¹L䫎O=ë¬Ú¥ínŸVŸ‡1N0iä‘R½ý,Záû~Y›/ÿ¾¬E\Ï»ŸbÈ_=ÓßV§KÍj'Ó¸uˆ¨¸q½f¡Â¯]\ÞÉ”,Ig/¾ìÞ¯º°ß5=æé tý`áãŽÿšC’òñÔaQK¿ ña Øã™ q`i¤)^ÁËc¡û¤æû+%·m‚æÄÍ¿-oûè*¾97${Htî£ô-oæ Ìô\Ï k4Ëëf‡Šåk%°ÙÒC¬ª|{dô-’8p…ß´Lï²6¬¨> #mz×C5U_üøÚpî…= ŸˆË‹ÖfºôÓŒYªy<Óáä6ßàуb¼äÀ ÓÊo>¶;蜤‚«Š»%y,–3±(Wü¥ÉÖØvNè’÷ŸŽ6ƳúQž‡bg ÃÖ–‘ûq~–Éœ÷᫲‘\9Dq$ÝjR†ý>!ª§U€IOü*¦¯bò…¡^_q»rè >u7ËY¿Õ—r_’7‚sw|ZOšJÒ ;8˜Ì6ë;Œxõ³CÏ®¨¿Þ34…<{D…Î ÚÎɘ´ãvþ¬S†×}ßZæõî —¸ N{‹§sö`Ä@.hºðGµmgÓ´mû‹ð–Íö˹—}Øz±Á—÷ ãsg” ¨iò3ohŽ9›•'Ëzæ^ˆ|r±ÀwSn* E?Ð>M“w6Šiº+-mþõþÊ;²8Âaœ:“wÖM 2T~%8Ä?øçÉï)'éQ?¡Ož¬}Øá‘O'TkÜ^t\™­Æ^nÊVd]¡jðÜœh¡ nÝK÷Ho° khÞ,ZÜüýEê¾²]Õ‹œ’–´¤‡=ß|ÜÃ>„4úØÆ‘zdò÷R!­BmÎÓÖdq<f2ñsÙìÇŒY‚“ßëÙñË™·[Chy­î×~v!ͻʤíé–iá$;ëd”=¡w\|•eþ"¢ |ÍÉZk%qhjwwãtÐí§´\ÛïS×tz³i0ë!øâÑfD1—¯LÔPR«@»Æu¥Ø0ÝŽBò¸Ã7'ûÑ¡)%=})³=¢Ü| p¹ïµ céÈÇ¥õ¢«Ö ‘ÀðõÑ‹ âO« Vì±~C¼´ù-^m=âÊà÷OäÞ¡¹ø< q³WYÔZúEÇuõ¯œ¼ïA;Lw(ÁŒVïÄmò>R·{”8œ¥ýø§Y´¢ÍéVýŒ%ôí¹C¨™ã!QÞDû¨pä½î|ž][[%JøÀcGôdÑõ‚´ôùAÇbo7™3¾"›¯WÑB*qS/zòêpLÓ‘1×ûgX¦r‘ËB›ÔnôáÈæþÅñ=)cõN8ã:wyõ°?¼õA½©ö¦£4Ñ}œDЇÆ(4ù80ãâÍJiXÞ<¡|û˶'s#zÇ5öºùj¯zÍ_úÚR›ZÜýQ¯×eKŸ iñïÐbûÎè±Zæ¾XA݃ÕsþûÙGq«‘ì#廋£¯°ÅD§24œ»û—÷ؤÈ( ­˜ß´~Àok ßþVäA:ìO,ÅXÔõv*z÷Àß÷©**\¦±3—zé¤s<åįsÄÃã½e<‘Û.ø´+÷%„k¿Èœ»»5U-õú´/o‰Ã3âo[Ó&8$íš”¶á„r¿J$JwÍ,EÏ7"‚!IíQЛBµ¯-/?¼ãK{2’gSÔ†óí™ô§fÒÍ%MV%.æCrÈ[-©f"<ß:Uà•~*xÃYáÁ7áúU=À™µ.®x0šª•ÇZÈišN5%a å/â,lœ…†Ï9oÛœ˜³Iqøv›^~òF~¤ ¢Ì¢ð÷©a)HV:ðŒ›Q½VMGÊÖ7¬®Zä;òe0äúçOX®H0­'ÓÔ(=»Ä:¡ "l>-êfÕZ3Ržë)<¥ßÏK~¡Œ.Ã31Ô·%Õµ¡³(½ÆÎB$ÏÉü£Ž¦ßë#BFezö?‰ëj” »éd"Ÿ~Â:œ‚Ã;±‹~?Ý+XÉeë_W‹HÜÁîœÝ£Ù¾@ò裫òÈöÊ3ÂŒ{ ¹‚Évå{ÓJûkÀ¥½#ΟR& Êcq;›úþ!Ù,ÔIŠ C1vÁYƒÐ“Sn'½ž$³é’ªì"uež‡§õ¬Z½“¬$4-™*bSŒ_‚ý蠟]ªã3)ß‚¢œé}™f}jZ¸6 µUôO©2‚ß ®­ û›köÖ©o³Ñ 0=|ûã(²‚P,Ñä²ix=6.oºú´Û++Ù©ëÜøˆþš¾.Ç‘i{ˆùÛm¶›²ÑhPʸrûv!/0J½Y“òNö&µBóØl!—Ÿ‡Ùçx†= =§—³²C€Ü»)º¢ê²ß38TBÍqdžÚÞm Ìj„ÞEÅHà)´‚µÖ`¢Ðùž ‚[5²?$2+츪¨é:רpìUíøèÊÑé‡é“úYÅ¡A1 {4g›Î&gº­ì5Û'ÊzW ‡  *Yc¤2™–P¹®ÌÀ7¡WYiç}þÔaAä«[z…ë%B¾†6ö¯ßw8ó\ZŽh×uIÚ†—Ø*‹ËÞ³Ûs5ÞÒôü8Ç,EBÞ‰ zÎÒo"ư«ÆäWXoíMdIa;/š'åC«Zïs[P ÉkÐâ‘léçË„k2¥ÂÖïäsFìªú[¶?Pñœ¿[ü#«ÙGèsêÔ¶ÇÍ›ÜXY×IÎÚß©DßIu$¯Êñ”Ê’dY̋͂OÕxL3SO ÅÙt<>Æ»0ü~ðºÈqÕ˜5óÖ€(ßÇ7ù9î´Ò×÷Kv'ZRÝ–Húê dXøùd&3™Oz”ñCÙMš+¨…ßt¬ˆd¿àoö\Ûî›8©'3û¢½Õ÷ˆ½Î©³ê‘Ìç¾E¼™_g½)-bÇÂYXqóIÓJ»q¾Ûì—»ö»£ðAg•”gôŒ¨ÏŸz)´¬lŽcü/ý_2p!éßÝiY=PÐm¾™úº·-ÍiÎ&¹B¤ž`Ü& FuC…Wü³Byå]ëOŽ´¸8%ã³ñK;¸Ý$Obt?«Îj÷Wé!§ó·øj®øTW:!ÅY†Jz™ªB{¶ï¹ fu¹¾m)Vóêo»ÅÿÈÚoKÉù2ʼ3òÚr.áíSút™5_n^*ˆà¬ Ï óØÓ¤£Õã¾yü“«BU}o—²êù’$ñF.‰c ŽŒ?Hù€¢ßvu[ƒÍ¹¶çÐ#HV•BwT ¢8œ’%˜¾º”mÅÀŒw㌲Âöµ9† Np#Åå$ȹk±ñ»q“F'¾ó¦AŒóHL5Dâ½È](¬ç?ŽìÀŸhÿ>˜7+^ñ”û%ÿR5v¦ÉóHp¹²v(­@|Øm1'tb£O¯vj+•6~½»O«vù(˜ê™VÙRÙoÁs?]i-|Š»X7ls<#—*« yŽ“f(’>HŽ7Ô6¯L‡˜KKpb‰€`_L„wlÀ©-âšÄòkK!uÇÍJ=YÆè7_ŽbªÈ+¯D¥‹õ3ÏCöv|= ÛÅ„«\¸èú^†k™`]~u/åýŠÛ£tCè³¾u‡˜˜\¹îV#EÕëó§+Ì!Î=ü·bx¤=5×~J˜1¬}ÙDò$A„Å<)}5_½yÓ´Žc] ÷ˆªÛÙ~Þ~…Ll¿³êÒeZí•~Í11iE;uIŒöF:Ök Ô¿jŒÂ6ÔÞ =‰~|`ߥlˆ˜o­å/è7K%ãó™ˆ;h³FiÜë.wØ€wBÚ"dYSØÕ-6°F2Å…Ö˜k¢±‚\½Œ¤ëô—A»ÖÕx[V.»jGê߸¸Tá’Ƀ»ÞEõbùŒ!?·íÜ‹¡Šo`«E‚ ¢³>Á«¸nêË›ÜØà%”M?úbzS]Q†4‚|Øš*šËœ†G¬Z}Ũk*„:½™>™ú°™è6Ú8ófÍZéÔ!p€rbün„ãÑíï¨þ7‰NnÉÍ×äq¯‹-Ù”z×!‰÷rÖêAif&eZÿÚªþ endstream endobj 290 0 obj << /Length1 1459 /Length2 6223 /Length3 0 /Length 7206 /Filter /FlateDecode >> stream xÚuT”ëÚ6]Òˆ4ÌÐÝ!Ý Â0 0Ä CÝ "¡ÒŠt+ÒR‚€´¤„´ € õ¡Û}ÎÙçÿ×ú¾õ®5ïûÜ×]×Ïp°êñ+: ì¡j8Š$”(먚ƒ€ PX"âà0†¡Ü ˉ8L¡H/.õÊH(u#S£nup€¦·$ ‰IÄ¥€@€(ù·")PûÀ:MêEÄ¡ŒððGœœQ7qþþpA¸ IIq¾ßæEw(Ã:`”3Ôý&"ì0B@`P”ÿ?\pÉ8£PR‚‚¾¾¾`w/ÒIŽ›à C9 ¡^P¤Ôð‹2@ìýCM€ˆ`ì óú 0B8¢|ÁH(àFàƒ@á^7&Þp(p`¤¡ Ðó€ÂÿRÖþKð§8è_îþXÿrƒÿ6C w0Üw8ÂÜ =5m”І;üR»y!nìÁ>`˜ØþFáwê`€š¢|Ãð?/æòð‚¹ýâ(øËÍM™UáÊww(åEô+? ¹©»¿àŸæºÂ¾pôß'GÜÁñ oA8ÌÓª¡òGçFDôo™J ‰‹‰ ž¨ÄYðWcèoôK|Ã!íð8ÞЀÁ¡7/"´Ø @!½¡Aèÿþy"0 `u‚Á‰þíýF uüë|Ó$Ì`¼?øëù×—ÍÍ„9 ànþÿVÿÝbAMmce=Þ?”ÿ*)!üh~!¿¤ˆ‹ ‚þéè_%ø›þo©>ö'½ÿp©wD$ÿbqS¾¿™øü ®?{à øg]ÄÍ@C\ÿžk (róú?oÁo“ÿßðÿòò¿Îÿg¤æíæöçúKáÿÁÁî07ÿ?7íºYÄÍŠÀÿ[Õ ú×Fë@`Þîÿj À7K¢wrûW!a^j0?¨ƒ> qþkŽþîÃ{7ªð‚ýºsü ð¿°›µƒ¸ÞÜ+^7Ýú Ao¶êŸ!Uá„ïõ€‘H°?ÑMóoN¢4èfO ~¿Ç (G nL7ô‚Ž$ѯž‚@BA$ØáWñíaN¿Àßr € —·»ûïëÐæåáöÿ7üõCýFþ‘ĉ¼YÛß³s“ôßçßwê…ÍN! Ò‘.u‘­§5Šw|ù×Gd?r¬›=ææGÏ"Û¼’âgpWç„/!O3ޒϯªr+̱\¢wšðcÞ<2h9¼°}h8¶ÞB43JÛ÷¡xG±¾—‰‘ßXa#ðÒ3Ð4Ì»³C“£ÀÓ[‚T¿ˆêÔ·Gݯ¾·ìÓûè©uƒj1­[eãüI&‰Öa/&8 ís'éÙðPüL<”~dÇ')ó?\³h>ä% ÚM.A[. %ŸM,T yu2Üe°¤gÂ>¦|?v­´™©I7.-Y|6Ášìèq­.oub†rõÎá¥Õ#Ö€¾ [ T) (eì*!€éÃ$ïMêÒaϾùæïÜ9®PÖqÐÂgÄŽ¾gmaŒf÷© q´â©ŠŠ¿Q^*$æ ¶ê-‰z*ž(Ü›K+uÏ[·ÐFiPJq«xäÊçü-åçX,qM R5=A\WKne¬ç®aÊŸðˆ—˜{ûø>í!I|1}êto*¡ÂäbŸšW¥ÒL±¤wyi¢žyi­R?×Oú‡ 2—B¡xÿ:9Ÿ¢P?£j9to=Øñ§¦HäŽÄÌÚ']Mç¨è4äôó+¶ìàŠ/¸iÛ¾O}*>÷OÄ\Ñ€w®zv400ˆÝ5Í]oºâ$SOnõŠ‚hTò’béû¬†Ìn«¸ö¾JÓŒû†¯È˜]ê™Ï“–Òz„Z<Dâ}¢õ-ìŸ^Qx„ ÉzÉ©A3¶—þ³ƒ²ÈÿUXm/÷¢·Æ3 ÅŒ1|'Ä.þ1J¨„}z±g•¢ø óÃå Il¿U– Ùºªá°ô»Cí$étR¶>1®Þ—õZwä•Y‡å¤œ¹Û'‰ÕÁÍ_ %á/Y:eÂè6¢s¹¨Xdæ0c“²ïòFsMê÷ ÅP Ý{YëÀœéé¹Xb_Õ u®kÚì^W;jœóÇÕã0åÍG²À×¾¼D—@Xbý}’D€Uçowl|ôbä,)?Ä ê²kìWqbZKÎûœwGéWa{¤|¿Â}c·Ý«ÜÅáZÒÅeÀ p,)úV¨Ø:øÐJþaÈÙàuPVÈGqÝOܽü¨cîâåª\æÓt¬È–ãm¯wŒK­Úw:î ,l¡ æo!É•§„ª:,¾C>+÷÷ã–ôV0Wb9®_Òù Á+÷Œ•œf8¾‰Ô£.6«¸EÞ.¬µàô¥æ}°9ó*wçäL·9*u:㔲â9ËÏRÐŒ‘ÀÐToJ+ð]\ˆÌÊ6Mï}òª¦Üñ-ì— gW³œË¶™™:[Ý3¼BW² …|šoÝäÜÑEŠ1 Ô¦Ø'¸ÛFÐϽ[%ت¹¢Í§ë|y{xe‡³S!–ÔG³"܈&=ÐÑZH µ=9·íQ/w(bÛcÆ-K•ÐkÅ…$SëmxBš'™UkrçqÃq#Zâ‰+8§SR Æf躌ɥßÕlîVòZ‰¤*}çÁ`Ìè ð –/¨¿ù+ÇŽ2“Ç2úÑroZ8£tlñÐJ{}ï¬üäà':ñBŸÛô}Cp¡_6hiÃd|ž4©,D •–Uø(¾ÿY-FÈ<É<ϧJVÐø3œw°…£ú»-©ÉÈq.î[ÑçQ~4ZbOÒ/<ßv\P¹-HÑU>°óÜ›ðÿ Ëÿn«÷¬G|‹ú³Žk‡h —×6½£Ì * å¾ï¢åŽœSËžáûx%´ ÝIÖui‰[ sKO¤B?TÜÛæOáR‰_”8º*3áS[…åWeÎû1$.pÊúEw™…Üÿöò,˜È‹ôE<%Íe…oÌYRÒ³z½â¶PÓíªØ(Xö„f´ö2ýÇŸi èIÿ…ÇXj lRDU3 «ù«î¯¹dV$ð)¯(hÞŠ ¿Êº@æ·Ç9Ô=ÛLåÞ»y«¹6*3ûÊË8‹R"Ž|=QQ1Âë1¸;êy§l2²_LæúËiM0þ›ÊV‡Ódˆz™1#È+ñ½*lEnÞ"·-ë¶yoÕ‡ÑíšÊ“ñ¨ö¸ö.)Gºrs ®ù]ÒÂp.ÊÁ(¼`¿ÄžÍ#H)o™Ý}ÈÃ5j¶ÞQlÖ §Õdl&7rzi×Í‘föðħ>»l„á¯9>é¼|‹£˜&6­‹‰zÇñ&Ã&‰^å¼ÎNzCNc§µ~ãYߺSkN¡²ls¦û1Âq´ß‰.ÞÞ[ !\àŸÉdr°P4}` ÎÇ¥í’ÆÝå|´çX®°’ýÄgæsEü•åeµË-]¥:›ˆêÿ×°c3áîsBQtlâ»»lTÒw¶¦-.lÊ“í Xa CôE]­ed œ,ð;FE¤©ŸOµØ|ïg~°ûÝÀUêY¹±ñÏ{ÜÆ!Ê_2'\Ùž=f¡^EÔ)ðšLó%O‰Å®ÉÜay+B`—è§ÒwЃ‰RB}bFëDбKÅdEW=µñý²˜wœ­¬X–—ÁébS({~®%‹{Ä´¯ªØ-[\;"5¤£7îç55°Z}nÏ·ÀäžåiާO“̲Œ¯±,ni¬¶cü OM›€ò9TÛ,òA q÷2±Ä1O ®ñ¯bëùÔŠb÷Rt)ø‡¼L—ؼa½Æœ{wöÓ/8ñ••pèYÀ€Œ%Æ1"Yeߝ丿öAÓrpÞàÛ¢Žñ ÃØ@kb%˜.ÇAði9Úvüžýlž#R†q ‰~÷ØÑ0õQÏϺ9¢x¼Â¼IÑ-v–ä×ÍGÈQ7³PÚÖ7f@ÜKéКó¼zùûIºt¯ÐËý{ØÎwòû4²æÙÝ` _7ýëÑÍܽFR-É4 ²ãaæ˜àÔxBù2—õ™iÐþOOÃC‡ãR4Ö¢ÆH^.OÓ$&®Ûà1ÍÑ×tña«}ÿ!Us¿p&mÊÍ‚D-ó¾QÈ> ŒñÝÃÛñ RêÔ«G—‘o¾©×cìaÄ¡Í,1Œ@Vk=M„æl¥‘Æsƒ4?¥:^ײB›uò§÷ª«}´qŒo=g Ìè°¦X MeðÄØšÿ¾mê9…0 °„| bÝ|bLû¦¹^·‘@5­,yò–©Ç“Ô÷ïGük„+C1IwÖèTc&+%S'ik €«ÉÌ”A|‚Eléµfó£nö­ÄÅù”ކ ¹ƒ ¦‰ò4Æ:ÖÒ&¶]ëÚY!½»·\l³QNLE=H¼ýã<ŧ­.„O҉äóa¼\þŽËTûΖ*ÄaÍ™o€l{-ÄÞÏrøzéÏ•:r;í+Ä„c©ëig…®mt6=8H?Oãc1œtLÝmºR}k]u]ìaóyi’5$-µþÕÊàÐðãºä £+†C{ô™ogƠ͘/ÕÃgqF~Ûe-»Ãc]‡¹Æ¡Nù ñðg5JYÛ™_'Â}[½½ßÉ¡{UlÄß\ï 8¬ì¢UŒ3¬š¡h¾EèxPEÀæÂ¸¨ ðZóÑ‘xXÚH¼êè.j®ô…¸ÙªÞÞ¹è|=ªŽÅ~çlzâcm×Û&Êíʧ²6â”<9ÉSȃ+«™ÁüÇHdïqÙ‰沃Ž$sçGømžý:@C;c2VÎr¼ý’pdù–Ò?2(9ñ‰ÈÐYÏ÷4Š– êÌúÇãa%ˆ/éãÚ\Ò¾A9´±ñãÇûÓò©½[” „&ÁÔ[ïUÃÉ6מÓT¸†ôk<ªZ†ˆ8ÉLmµÐ­}RÚ~sf¹cÝ¥DÃ\%êž‹lŠ&cP}VIãð€ª×·ìm<Ö,¬ñ•; HÿXˆ˜žM¾w›ÈÆÎ¶–ö¥%€_BŸÓzkäÈ÷qwc„$‡dÝ÷l‡H#± ó$ù èDÞÕ<í‹RÍü@gƒ›¤,€.g´IÝí‹Qhƒ{ùŸš ÃÚc¦ø &¶ûâ·åߺ瘅Ÿd m¸é5¸Ùs©YH «Sü\ªÝ©è%‘`ÔÙ”ÊÔÖ¥QÛ+ ß+²` Å’ 8Ê%":O´ŸõŠe .|éHïî¥Ò»_U\)ŽÁé?a'—rÙ_'j¿UÒ)ÖHÆh±Ö9úÀЇ Ù°%Û@§{:e:®16j|î÷ W_qkdòz)¸bã4O+—וftýÐÎ2bYÝÐŽÙ8ÃIx÷~—ÈJî4çTËÄ®l>Ì5—÷Uù"ÃÊ"9…KàJ³øž'e\*…¦Ó(žÈxÈÞÖò3ô[â,]‚Cüͯs3[‡ßq±–GYÔV'þT>µ4rZySû%Éi\FL´xc9z§·•ô»Ö:2w{©êŒØroZ­ôÈUù 9ÄÉ⼎ah1!Ë8Ä)„îíÌ\|kƈVà‘á‘o\Û`=NIØõÏ·ÑwN¦Ó-Q½÷ íþº´ rÚ¯«ÑIn0ìÿ,˜@J¹ÝEtdk>03²ÖÒ¾ƒôæT\òð†Rñݶ³À—óŒ˜}3Wosøû£Ý’<¤ã¶œJ’³NsMž~|ø3Ǹù´h`ï«mLÔ[— ücœVðb¸?žå3)½µ« y“äô²©íÂÒjHðJ9΋ TA[’lþåQ•|ND+£ÞšgÂ`­öȉÂcâ—3¬&~£ß‚É †.²&²#%*žµZÏ—ÒîåyKnã {f¨ÈH-«(V´íÛ„[¯C"!kW¸s~6åÓqÒ8U•]=ØÄtmëསdžþÑù$Ÿ,ç¤&“ºÝ&·Ÿ<;ƒO“² "/LŸcM>ßáîuÖ{•¦ƒ¯ãÐ3LÞ¼‘r5E¼9n4?{审²íã(–ïT4öC‘OVšÒÜ’±•tÉâ ù¹c 5_‚‘þ’ Î ½òÛçÙ¼LÖŸ‘,"j œ/‰Qz‰ämŸ~BŠ)çƒ<ÉÚEqó³2­›~fr½ñŸd¥M¹|þàóì6—ö‹¦[ QáYŸ˜€#çøqÆÉ-É­WéUñYwħ¨,•-Nð0דêC›ßëu-—Iñ±¾J»4¡ŽR¾Ë3çl¥ö–S$iS/ú¨·ØÿQ¦Û¨œ¡!?…û€¹6G‡EMQê€JœCy%ŸÕ"ÞEEUUŒZ‘ñvAqX¬Ó9$|´¶£Mª˜!Ù“aÞ¬<¸nuæð‘<æDÑâ/˜0+Q—4”ôfÜ‹ø©víÑ;Qòi‚OÂ,a}'«édG­ùƒZ~ØãGüŪf­£*ªuc¢^yìÆx* rC`äB|E­ÔùÝ… Þ$ÏV¥YzH^ö nèb•‰}G޵j©~`·¼¶+¢®8Y¯ªxâ Ö¯–ï—1Ì%Z9£qˆèþ)á‹O({ûÀ>”-§†C‹àL4ª[²K9ð‡ “æ—5,:‘B”Ko|÷CåôÇïbÒÆ‰z*oO¨³@7ãÖÙÌ8aìߨ —XÁ4:,ÑößTk‡•]ÙXãø&òÕÖ€{‹âm;1?4"ŠÝ³Ž(ûíü¾ñÎP…?ò´”ÂqY­}¾…2Ó¡o«Ñ*“î{®˜Cìµ{ÏóÂáYú&ÙÔ×À«v Kø ?þ~LÏIÝ-›¨ÊÎÓMdfjJÜV ±¬o ±Cz´z‰-7±#ž¡·w'|KQì;Y:Ø>& oWgãú ܘšÇñ9÷u°&¸= Ùc:[`êe­²ÈÊ ÈžbºŒP[r5~Ò49²ÎWùÔÎu…#᱆·=øn}e8ãMïÀ°ˆK2,…š—U³kñÜ(ùçy¡ ™¹­ÞV i•MºÔ%•¨³Ö1+#Ö6Î#0}}[ÖR/»Ÿë+oÙ¥ÝÎ}B¢7¢$ÁOsƘcÄœ ÞauL•Û˜~5LNDîæQŒªp˜Yu R£Ô‰Ìé\$»ùZ§8ÕSI›]e–¬ LrGÉÚ/–̦Á¤j/¤«Â}‹€‹kŽúM&ÅÌšôùðÝáym HX‹*Xzµ†X9cô‡ô ÎK¢ù)0Ÿ]}*V\ÅãhÉbëݦ·eTÙ·'° šd}BFø¿qn©¨‘;Ù˺1¼;×cÜ ô N‘ÑÚ{nþ€h4˜ôó½‹ûg‚ýŒÌå¬WñW}ÞjvËVßb~'« ±bîå¾¥‘ôA)…Kñž}2ZÉ«S` w~Ñ,¦û-ú~P0yëäþ‹Ê]óSg©íMט'õ¼},ijå)*wív«©&øô4öC&î¿0¥Ù>!¤Ýl2C•¯_½Hw?:™ 4Q‰_|ö|<ìU~´ß˜'¶Yµ ~%åz÷ 7¦Å?µ•cN ÖÃ'8¥ó”%'7î[k+û|ÑØLvÞðkßGØÐß%Õ…ç+O¹rjs~ÑæöLàÄXÇnû²x¡È›¿-jÐ2‹‹AGßè‚.óWÜaW ^ȧ@PFŸkÑbA ¾Ó7?‰iHÈE逸 ÝÂ0‡\óïËwA\)IWôÅž´†Hر\`pä½{}V¸f73ÚÒßk*/`d°{xÐÄC…Qº‘^£y*ã½­9ù¹Ò”yš26nãücne µä¥/üa÷â’LìÙ¢p &ÿzYÉi= °mf0fQ\¤UûJçkÖ2ˆGŽ'LE½Q4ô>¹ùø½>¯×é}ßñžf¦½Z“¾³½æÅU™Ä®¯4ÛpFè¡8â5SZº »é½Ç0NH¤.2c?ED\߃®®{1{U«÷­ ƒßgð<¹ÒßÎöIç)qµ!=ÁP9ÛH’¯ðÛ^Fâx5Z­ú½´fzÝYpíÒ÷±´ºùEºþ³f]?«§'·¾Ž¾„…PèOϘØÍðG}J²%;Ä ½ÎÕÞ;D©ïÛ‹ê_äúò ä¶¥°;µà•G%^ªIÍvîcˆ\JyS)™þP3ê­g•<…³vݲóhq2öGªÏ‹_¥/È’Øol{MŒ·gZ(”'5aãÑ’Jûbw³&^ȰÆ'ï5­.÷˦K/GÐCrGô×Ì—*ÏÕõ:‡™â¼x#Káê#7š W>H ‘¥e,u¾ >[Ìùfˆg+[=¾þž9iþ}"Â6ÄQ¹ÆÂs·îy8JQǶ×hýU“p$ÿ)ßÜ0Ú¹D±ÎÜÒhšåé(8ûáè—ö½¦€Õ¯ÿtÄô¸¥àehÜJ1ÖëÏ.C‘gñ¾£î)OòéSZÍÝöMè¡Ä;FMÙf­X_—Tú‚j*)†<×?? ¶ˆ‡ûv–x¿neéùP£áË´ÞØI–ú3NýÚCTå‘ׂÌï‡Sð†![ýUísYY%ú †2ó.F¢ØPfDŠB4“\ŽqŒ«Úð§d YïájA+¿©¾Þ«3i¦¼£Ù²çw¥Öt‡,ƒP³â+ºÄ9Õ?1»ŠT.3ëå§“Mñ…>ÒúÖaj=‡ž5w×ï™Í¦€Žß¼üFV™z:ÛdȦ(ª$nϤŽh`AÒy¶C½Þ·pÆ| HQîC«ú/{cb‡å“ÉË‘T«t{B!> ³!êøNäè¾{&½d˜÷ƒºÝˆ´NkÖ*d&D.W„²©~>/½t/¸Tùè²j&ð"¯ŸK}.WÎñõS©Lb¬ýů"öBC€µï-¬^ÊØ8ªÊw|´Hmàhˆ $½W[Ÿ~Žk÷Ý—{øpoë }—'ÒÕ‰ñÛG%‡9ÚÝÓéÜ<šéØ4šÑ_ˆ§ÃKk˶X#¤&T¥R¹å1jñRV>õú}|ÙÏѱâLŸnù’,Ïý´)Ct¯A,bÂÅ{ý››´uVãâÚÿ”¾í’ endstream endobj 292 0 obj << /Length1 1713 /Length2 9555 /Length3 0 /Length 10655 /Filter /FlateDecode >> stream xÚ·P›ë.Œ/^¤XÐâÁÝb-R\ ÁÝŠCqwwŠ{B‘Bq(¥P¬XáÒ-gïsþæÞÉLò=Ë×»žõΚWšìRP3°<ÔÎÎÅÁ) QUUââpròpprrc20hAàvà¿å˜ oÀÎ0ÔAø_2Î`üQ& ‚?ªB/]ì\<.~a.aNN7'§Ð߆Pga€,ÈbP弄:€a˜ 2PGgˆ•5ü1Ïß&sf—Ûî){°3ÄäPÁ­ÁöÍAvM¨9 ÷ø¯L¢Öp¸£0èææÆ²‡q@­Ä™Ùn¸5@ ;»‚-¿[¨ìÁµÆÉв†ÀþThB-án g0àQ`1;À]\,À΀ÇìM%€º#ØáOc•? Ø€‹ƒë?áþòþâð‡3ÈÜjïrð€8X,!v`€º¼ ÜÎ9Xü6ÙÁ þ WÄdöhðGé €¼Ôkè±Ã¿úƒ™;Cá0ÄîwÀßaYÎÁBjov€Ã0×' q›?ž»ð¯áÚ:@ݼþF– ËßmX¸8µ N.`%Ù¿lE˜ÿȬÀp§  ì»›['Ðòpÿ¡äú-~ìÁÇËê°|lì±?þ`zÁ@®`ÜÙìãõoÅ#L..€Ä0[A0ÿ‰þ([þ‰çï qp>Ò ÀùûóŸ'£G†Y@ì<þ1ÿcÄ@ié—òj*¬µü¥´4ÔàÅÎà `çæãpqò |þ;ÎNàïîÿ¾Aþªî_•,¡€ß)~wñx|wâú5˜þÚfÀ§Pƒ> `ú‡ÿ†œ|œæ_\ÿÏ[ð‡ËÿùGù¿òÿ+’w±³ûCÏô§ÁÿG²‡ØyüeñHhøãr¨BWÄáMuÀn´*Øâbÿ¿Z%8èqI¤¬‰ÎÎÅËÁÉû§“‡¸ƒ-^AàæÖ’éïi<æ°ƒ8€_AaßÏ£'çÿèwÏÜöñr=ÎìOö¸ˆð?ÆûƒWí¿ës0‡ZüÞIn>~ÈÙäùH‰GÄðâz\^ °ûœ9 ðGÀcÏ>K¨3æïAó €²¿E !!Ðü?èw}@‹A>ò/ÈÚü €¶ÿ‚íþ¹¹ÈÞÌô/‹ÇdöÿÀGúþ¹@Çÿ@¾ÇhŽ$‚þ«®Çr`ÿdxLƒXÙÿ“€ÿ1'̳þ—ËcÉðÁG—ÁÇ$®ÿ@îÇ‚ÜÿÃyüÿkæ.ÎÎúcs§ó7þㆃÝÁæ˜ sPs‘`›úàŽ«Z)r7öí Ñ'ÇiWºÜì…ÆèðA¹i“ͬÌEårù….yc›n5i§«ìÕù3¯­êFÞKvjù=+j³·s—ˆ³‰^?)hçp[òtR¤©„Kœ^QFáõ`HXX j2àz¿¨ïÿ’èÆHT*/ð2¤C­«§¶4S…˜BèÍ·¯ð6³­m¾sÒ9_íã‚6£ #RÕÞÑ*‹v]c&¸Õà­Ž,ãPöF¼t Ü>¡…ãˉŒPÈò¢Õ¼YÎǹË)q=|Gàe¦@(yh1X±ÆœrU¯vj½uzhDÔÔ#`mšdÍõÍóšßq™H:Í9·`'Òb);Œ¹eX<ñ'ìM:D±oµê+¥í˰eÅÙþ©õ;åT%ƒÉ¡`&6Õ±ûÊ­o>M 1®–¡Hí/jSð·äX‰3™|,ƒò‡èí²–/™Bfu¸ Ó¬;´Ä‹—…‚ÛýuñyxžºBÒªµq€M»ÃhEz—^ž¼÷ùg]]ÒŒ‹N5Q1Ñžë ËÞï ón޹€ÍÓë¢e<Ýì7.½kÜ7ŒT†í¡E>Užö|Gëóø±ÑPauvÙAwdp )G{mÕÒæ@øU%Ò[ „RµÜŠ›óâCÐL×Ò€è›CÏ_‡Hïj˜ŽžOÊ_=y3ÝmÅ?œ?ˆ…$¾ÀöðC¼=UÝÿ%¯½çø/ žæ¹6¢¯.Ö|âö-!üˆËö¤jÒ–º$®µ;áSìÓ@¢×#Aû qÑRëçm9QÌ3uä³GØ¥bèBe»™‡ç'èKYñƒzÉ8Gu\6úÕAV¥8¨Ý\f]m™/ËAÞ¦]Ö1%f~̽nzAÇæŒœ6I'õºWV˜„iÖdš-!ùŒOü|ïÙ§,猠Û9ÌAr;^Ï7ûg{gëÝ”&1`Éš$Oï”ødG‹Ð8sìpz†t¨fìŒg2.Î6—Í8Ú,á݉çX:k,„×Duó€ð ÁòíÐÄ ×1ëÔ"þ "î7¦zîQGh¦ìmfEr—»ø¨å¼bõ‘–Üe¯Í;‘H_ ë-ÖÖñà]ÞŠà–§îr‚cýyNF–"Í›ŸËÍ4Íþ"¼ùZE¸ |Âl›7®DtæÊq,Ës"¬ž“ÏÐt£k<ŸÚH _Ϭ¹ Šƒœ†Ìø·¹b”nÚ&”ñC$ÀŸ>ÿŒ ?°lk=±Q¾‹¡·mµ»\e09·§7ÂKÚdÊÝ&±©Œù=_¾NÓš|Ååõ)€ð9‘CnDìçlùE/3­ÎñKÔЯG¹U^*Ó‡Œá==˜£ºYB›£Åë7?¿7­‰K.n5jå~~×p{7³!ŒF•n;ÆžbD´ïQRô’{ܵâøç†ÁwuóƒÚiüOàÁë–7>=;SI̵¡‚(š3ºÉ$¢™°Fn›du㎠v<†ì8í¬öu/ñÙ`neM™Œ=tm›s‚¡Ò'Ïq‰Äb×Ëš˜W<’ ÍØM¶øDüúÜgù±Ð›2^—ìn’@wĆðˆPÔH¶IQ‚oo©†Ï/°‘§h«”Í÷wL01ÏÅï>ÜiA§Ä Y([?ŒÝxú/Ð9¢Ò§kOP€Šýëý³ø^sëó“fµˆê)Lyq]=˜¿Q"«Eæg2qV¥½Š€‡Xøû­”«†r™C@—¼gbÇ”Óß»z,ÕX³ô**/ÔyžÑ‹p#lz®zXÀÃÆÒ4éÊçÃQ^$TLR›CËêhÄÇëí¿óy‹Ì_Æí£ÄùÝäM-ñÄûh´¥q` ïXç©­tBøÐ½Ýwq·„UÝѯŠz1µC(>þ[òìô´fD4LMž¶²¯5Ìà" Ã8û6…­Y¶X[jd—¼U3¨¼×éçk Ë6R,¦VÓa¯Ëëê1˜ŠwEÆj_?Õ¦–q4Ûû()rÕ/ƒ Þg”7`ŠÂÌ¿ ¹~{],1AãŒy”ÖÑnr^‚†?m©Ž®³ú i³4§Ôåšsåg|Œ-0¡š±†ïûÃtéuÓç/uìk*zoôË;ñêfŒsºŒÛ‹ËÍÚÖû×Óèö¨¼íj¾ÊŽ×N­½Ìب†ÙÝh)RŒ8Lß{d €µ‡†î`!R(Ë™‘Ðê o#j@QúÖ¹g[ÀŠZ5còó$…ÏÚ\’M¡@!$‘á)%ăIyÏ$úâ.í/@e$d»yK~w§õ\J Ìz7Ÿº@EE` ÃÍ’Y²mbÍ^ÔýS³Mõ÷T÷‚zÍÎ4dC&f‰öì7{/›É¨®QY©GÈmA!¹ÄžËã–iuþ©ó–J,+–dbHªÄ<3Ì ?ʪñÊ«›Õ™žt²ëÓD“Qe¾ìÇTd¦p~}ù¶‰ò5ßeŸ©™ŠP|‚Ï–àéO±×nùê÷Ä|wátäÂÉólùÚ&Ä*¯$⛆GIÔdªw4U/?CŽ??]OÆÁšü¾½ýƒ‡eÞ†N§?Kö@p/ŠþtÆû4›¦E>rmt<²õþùþ¢J¢ˆ‰¦Åë”—JôÍí)ýz#L_H‰í5œö¼4 MðµœÃCbK©àoøJbÂuS0ãëÀzXF¡ÉöD‚+N"ëlNjvpÍÃŽ)pS±mþ>—ùXû-Á÷o{=dö’Ó,Ä·oµˆ„Þ.ɵ!é¨[±/¦ÌõFãÖ*î;îâ€Q©hÑ = õá§g¨‚ålÞ<ñÊâŠ8ãÒªK~£òkšÏCGÙÛÓúl3õÄ{±ŽVh#m±òF¬Úsg±Gkî¥oÇŽA}WÓýgÓ_®¹÷ŽÎAÚØªotÊ3.9v õØá{éiûµUõÜžYŸÄ!„aŠjòùšìVLß›½Û‰DÈiGP:$ž¢4aÎÒO?›5ãÉáhŸi›ó}û(³!äÃvW‘ýØ-•Ùì÷kP­˜ò“:@%ê(ÓrÈ}‡[–)%pÜ!·~q.s ²S>9U {Ú¿Ðôõ†Ãy½™êLΠŒ¹òWË· œ½ ÒÏΔí8çê'¸ëÓôEÒåX*HÀÈ·»Â­ÒÄ€¹ÕyFòìé .~N#˜ifÂy²÷»öD¦:bÞœµ¦ýéú_ìø¶ïÛ²‡Rl‹6Îoß+SUÛG­H®šJ½Ø™ïÑoŸé!@g£×cØÏÊ WÅôÄ8úŽTŸD`¡ê.'Jý´—ò\¸ØÍD±èR¡ÝJ÷%EJ(ír\ë¸L}ÖJ&£PŒãŸ¨ö)§6v`Í[ Œö¯Gjíçì°©éV—0 ‰A¿!Îÿá^»˜å†ŸÜðËY³ôÎFâb¼èèÁö«hzGd›*ÿž¡}·~x+¤tR]ø²|6»ånЩ]48vÛÓkϲ ñÉÇ4ìƒ+Ê ^S¥1e7¶ïG1¼ àMìtäJѼò®ƒÉ_Þ}^©æµavWœ±áL%Ä‹~2èi¬ß?R´R,è·Þ;ÒàJpéåÊäcì˜×HV yžTÂ×4¶!vôœ î¶4¿dÒ…ý…öwM&ØßûØúªLIîUö=S0®°þrÀl[“ÑÁ4›‰¿’„“\¹+ö:™ûì?šT7¤&µ¨þžI¾qøÕGo®éHÎGSžÝΙùuQ2„&¥ÙwKc†NPÛ/ï´ñá †B™c|P+f%s’ß°"q½w8ï‰&cb”Øáìûø§X1±&¿Ãê?Ûã—)P°ŠmK»þ@.Œ{--&Döcø”>ƒ¥…?þâfÄÚ÷‚&ƒ\)²7†ã?­3ÈQjáûSážS.mc¡pU’k«¹(ÆRù¦Ü ;~¼µ¦"© oÎqתP ÑÍÃhmÎ0sÆídÿý^"›ãK‘róÍ¥ˆ×Å…Vo ^hON_\‰Zþñ,Þ:j—íáú€Åº{¯’µœØpPIx‘Q‚‘3@+¡Ççiûw¥ÀÛ£ î²jº§Ea(é÷ƒµ©˜ŸÌ]~y´ikØ®#¿}|#i ¯øÐìÝ¡ûj6÷Mç Ó¾çêÔ½—kgl¿œ%güÇ;s<Ùôºñç X&"pÛÙUöŒ¬^J†’’æ'ò¥×ÇédØW+GõÏ‘¥Ôs˜ªCa,똖o'd—i¹Ÿ¤±;Fb)ûÖF˜mžóЈ¹È½ÞOJEg:”i°©m¹Y[PÚ¾æ†Qæ7¯ÝJ5Z…*$~TÓŽ4âž½kŸw&à]Ùø,k,#»µWK$¶âüvÊ4å”(ÓÎ©Š‰Ûh¥;] Lž¥¼—ÄÙ@ùM¢dÚ‘+åç,㘴S¢gø¦¯|5¨Å”W$ä®w”É32XÏ" œ é¹1è æ£îsŽ<]‡_õ´ó*‚ž4± ™æ:Ê~JaU%j  Bß²8°)®ŸÊ]ÚÙ–˜I:¼f=шvÈNˆàö˜ ­!^hö¡z¿§¼ÿEùV]…àóèìdG9á.·Ñ¬ì)b9s¬ÄœþÊ~1¥‹ýˆ’—æ'’t™5ÜWöß"¸cðMq,Z—Ò¡·Ë*’ä,pŽ ™7ùö¶¿,ÂÞ m=(vB!±öP^i¼—Õ{ÈùrçÛï}ZѲ†1‹Ox®tîþUL]s,5`vÐ1\Ðx»eWÉ`çyÎùä ÛM”}%£Æ«lؼrº#!G÷CÃaúg2íÁ†-ÝJÎy‚¤fî÷K,æ‡sECrT"¶¤iWm YQfÿ±”c£ÂŒ_…ߓߟ$T~]ÝWø4Œß›ø¡åýž’êå†GÂ;Ab^ *¥wmK7]Ž˜)ÿó¡'HOâáO 'mG© ù{¨¢f×É™9mˆ˜›9¤á¬T"bO3P–üü<ñ4Cëé#l/¶>Jn¢7§ETýÃûRHˆèFëÁÞ·içf5_©Ò±°á*a‚Suœ©£áÞ“3]êTÌkNŸ¶ñä“á)ê9HbîõEíƒO¢Ÿ~)6Ù{HÄûÅšZ3­.´*å3NšgˆµáaŒË&ænÝ[¡ýä}\ÏZ¿:z˜ô⦠DˆDðî¶ì“÷1ñ±ç²I Ýhö:Å&t fQ ‡o7f|%Óuܪ~ä ‚u²s¼ÌÒr¤å‘’dÜñì<"þ:DE AêI/ãàSϱܱ’Ï.XljYš'M®^‹ž“r¹ÂÔýÛ‚´–l?ó¥ZèÂnRcë‚,lu¶<4¦E‡©6ܱÄÎÙ3]ÃQî&‰|jõÚ¾{š§Ïž×L²3C~Ø¿™[cªTy—²©cU†xï£@Ž‹ÒNÇ9L•÷þJuÔ乑Vxºï‹4×Ê[‰×˜6ë!Ÿ² 7’üz±Ò¼ÙkÍUðP‚ϵPðs¾{úŽàã#e>«Ü<˜-ªR`ÕïË‘Ž®[‹ì>kEgaШôõ {K—6½>Ôm—Ü'Hý¬™º~°³ÕúåmKqo.E>“M̃Ù6 ±˜7<šœÍ|:‘“`Ӯ帶ñ#LôM»Bå0×tÒÏÃÀé6"»F.“xËÄ Æté·n¾p뎽ãvo%>—^Óׯ ~Î2›þ(K}ýz¸yŸéí'o"irƒqIÐjp ‘êZ 4œOÅT⣆¼jéÓõ~ÿûÏãV›±Ž=–‹kHÈ÷]|C\¸•…mñGʇ*˜­NÒ=Íôý’/ÈÂGù÷it×1'ÞÞÈ=kRj;æ¿b»UÒꥋ¹ŸðÈXûžˆ¨˜âiÛyxcnmDjǸ´–'ß¿"ÜÖ‡§^¸OO7‰N#+\Š…ÂÀŒ„F"ÝÌPuOü52Lk¢’z#AÑgAÀr#6ÇyÌm$àÎô­×«ú•` Š+e6lÌLô"¶ÁHåu(ç1ËU³òQò·w/CVM†‹’’7äo7Šw<4eèK¦ÁúŒÞµš"[”¾hº†~ïp}»"\òvÈIdçJÉ«¥*+@3¹ö¶v’å«§}ö N÷â4t»«-‚Q!_î;ºæËI±äñòçjO¥Pô¿N9‡\ݤù=j%þVH›¤ûK~ºŸýê”9…ÞXg£ÎÐ(’Bá{ÃW·:ø(ãôd©äžßó.£ÍRe:ž™¿Ð4Tx׳ÍÏ8M?sPAyêwUÍ ˜§å)H.Ù}6G¢ãÔ4 KM¥ÌGâë݃î=süH‚Õgì ãywl­Šš$9È*JÍÁ´lôéÜ-ß5øÃâ[&úëdé%ƒ…‚„Òé·]¿úl}_– üª5XÄá‡3Øä;k CÌXcR/–ôyuH ye›·³Å„RÙ ÁUl×P:$AØèøçWü«Óã~Œd#%Û™oW¿ƒ=|ô©ä>ÿZ‘y-¸ómº(7±!8³˜dÝJ°ÎÖu¨$Ø]3ÏcŸKÓG}…fyTËÆd©æðšµ[¼ßôÿ9Ÿi±ìÞ’dJQC'òÕ-›Ë°q¾DÛvY“ §ÎúÄK¡rVCÀÉå+wR¼fZÉLõÿ0Ëf ­žà±9¡b¤TäæˆD­yqêô~ZˆçÓ(â³Èèh³¡`Ô´|éѦi(#ü\ÍW4Q²03/t,½wN€rGrÒ.¾ Î¥.@Ô賟¹ž·'"ÙãÙ¹é¢ŒÞ ʰðÏÉxÖZ_!ŠÌ‘Só² ÈT&ÑÚH\¢P*Ч3´^š‡ËãqÆki”bx !«/{Â;“Ÿ“„&+þš;è_ºqÍ`gwm]4ebŽôãÙ©4ø@¢ç2 ‹k)$yo:lð¾Üû{^¬ÑuÖÍxˆZ\‘Q\ƒ9û~¼úæ%ÇôÕ!¾¿&‘™¶4®Ã÷£ZaÖ‡p‰œ…"Ñ”“ãù«SÁ¡Ø×Šÿ]Þú1ÞÃ6Š<ïÝDs$zA1»`Vî÷PRŸ;‡üP®ù‹… ÿOáqüò%T'ÔT£R¢.ÃËåýI«î–Î…ÉÎpó㟀FwøÚñ"œÓ0uM^Z‘z½ÉçÒ7koˆg±¦3×y7ÔüuÀÄ…ùhm†×å¶÷‰GQ‡ÿ÷Elêd¬©eŒX ‰!œ‰bŸI ¶cÇ€Õ™ùîÂÌ$ûkrÀ9›8V߯º <׿36JU;)’Å\øÍ,YFf힀JzV °U8©g'8™ˆ\‰"z Xç¿I´‡Q¸yù@ u¼Ëž*¢ÈxQuÈ; cˆó2±ðZ^TìÀü<*ˆ“¸î|‚2£²Bª~BIŸeø²Žž@dùy ¬$ CECEŽ<1J-MîõDœAQÚÕ¨q%ôÈVf"Ó’Ô(]ÑÄëæ¥õòçLZ¨F¯ÎÚN¯¾éz…n>Ó:¥iÝGú2œ4ü²LTWó–4ÝZ*ˆwz ¾rçŽelÅ1лµ(p‰cbÖ;·Ø{Ö©wÃÛ˜Ó6]W•7×Eq5ÏÆ©cè&¸®˜¤£?µ¥³Õte¾gøam*nÂŽA-¬çô b)ÞgÀúL¡nÅ2”Íá”*á8ݯ&ž#ªÙ<ÊÑ"ù*¤ß•VNÏ`TTª& ç:Jh”[€%žÛ{“K[]©Š.­K‹•¾(OØÂTEÿ™’Wãš! ÷ß!^Ùf'óÈ_o£ ü …ÁÎ„Ñ št†Øö =RÏt¯‰‘;¡pQ€"•­˜VD6t!¢˜ÕôýnTXvj5ìÄ®VQ^3°ý~a÷B2r¬XÎu#ÆO²|‘¹kîIxªD Ƴð¶I¹U\Ã&øu·Ú¥U¡WqoOyC+j&]àÞjpJ3ªËÄ–°8ñþ¼xm±¸kh |‚£*?/·E?SpÛz²p_„"\i!YèÔuPczì 3'§/Õ8õáPbée –}7%‡ú"ÄÇÔrâýk|ð4ðÙê ˆh·ÁÃÌ-l‡Å%¬ŽŽ õ{—>ø!’wKIæþù¥Ù«þ8):„òËigæÈ¯Yä±s_Šc·ë7ºE*<„ݽ#‰A»ñÈÊ›ä)­6#ôtÞR?Z[ß }‹ò°jäÒCûÒA¨?šP&£„z½F@0&Ìš?­IlÔYV>ÕŒ]òmû`”}`²’ÐãÈ5”Ÿâ5„¿‘kL2®å¯äÛ¥¨²]ÖªA« Š øa×;éN²Úòôƒ–[[ fÒ—˜÷M Z¯Ý…–³ùiï‰8’?å¢vàmâ!{ú”Ñšjø˜ÐÁIU©\'•Æ‹IŸ0ŒÉIËž¬Ñ™­¨LàRëžðêGƹ#R¾G‘X«ìŸu6‰W[zK×<|UdYìF‘ö(šA_ˆ²oEé¦Ó½tÓøôÎßz ­ý}û½îQn×êÔ˜¸ORS“0ŸES[–©äp¬+ÙéðbH“ªû/ÂlñVýX‹è-L~dè(i'–çÄœµ Ø§…—È»Rmž=Ÿ‰>K!¬¶˜°¿õkrTÓÚZìCÔ-¢MŸ|»`›cw[<{:³uå3•ôêZlúÙJß<7ž[OæÅ9#9Û1þÎ^û¼ˆ«dJƒ ,ÃÌýIɽï—oë}6HÀŠJv¹"+ÿ¼†ÂáËâ0&””šQ¼‚!† †ÉVutq3é bšqŽëÝiªmÒs‡DYÑö´êêeÅ -®ÀÉoìwg¿‰Õ~:ôýP»¥ÎuFíýsá £OL8'&˜Ê“²+~Æß›ÊÕ—².†+ûêes'’Oï þ*'¡íÍmp>Ë>'ˆ¿Ø0Û[`}æœæ|6†qºCy…RšÞýíò>|&rž¾†´êŠ8öÉ›mtc’8’'gÃuöØ.Ãu8F÷ÄIÈÈ‹}5›vp·Sƒ^À˜¿«Eò’éá9 ÿ'‹s¢œ#羊 ¢ÑkÛ>[+Ðv<™¹G"ŸJm$,ëÒwÄP5VysF8.t zœóðz™kØ o—â|¸„Ód—^ùº13޲$s æ‚Ó$›%c3µ)ÒVÿ ŒRPõåÈaçMþ|ÀƒÇP28øšFqÒ…FŸË<Æk]SØê„ŸO|U?8—ªáþö´Ü@áÒ‡áŒZŠlQ&±<®­a+šÙkÈf·ÚŽ#YÃ:™ce[™¡¾HWqb›6@Ê/§«°æ4˜â¹!„F%V;õ;V\Ê»%|èë8¦Ä ãµ8-Í›ÓÕ]Ó³…ìй’èéx+çÞ-Ú—¨…dÊlt:Õ[»ë}3‡sk°qÓE«Üä§z,õß^™¤U¶øêÄ€fä<îÙ³ qâØ. b¿Á?¤Q}'ü"\|!t‰¦Œ{ðäNHߏö+ýõzÎn‘ú”Æë›çŒi¾*¢d•}òžg´„ÊóòOŠb„[Ô›OèÛóê´)wìª'ZªÈ¼¤FHpUü>üÀÇÞQ þq<ú\%š‹}R¹i?îGH@\˜\WÎè¼Íø<±N®o™n“†tê›*^¦Wí/Ý{ßVmNBaDžž¶sàe:mVZ‚T@KûŒ$ï1päNÊ-ˆˆÃ${ú㫌þŒ¼œn,(8È&5àˇÀà–JS×ÓÕ¡™£*Û:Mh|çM“D®™³ÀnâûN ´Ü2 6òÄÐiíè‹ÐUì¤\üüINÆm&S¾£ªohºwê›ÝOžvO*wðîËØ'r”š’¸Ãùw°Ùöüˆ<4UŸ_•“ ü¡ê¨æ endstream endobj 294 0 obj << /Length1 1422 /Length2 6329 /Length3 0 /Length 7290 /Filter /FlateDecode >> stream xÚtTÔk×/¥¤‚t3HÍ’’ƒ¤ ) 0Ì 0Ä C‡R*ÒÝ-4H#Ò%)¡” (Ý~£žóžï¼÷®uïšµþóìÞ¿gÿöÃÅ®£' CYÁÁ($F$”(ii©‰€@A P˜„‹Kq€ÿ¥&á2„£](¤ÔÿrPBÃ!¬N‚Áúi¡uWH—IHa PòoGZ   qCÀZ‚uîBÂ¥„ròD#ll1Ø2Éøøaßûs5[§è‘xÓ†Í*júçîd¬÷1óíiòzœl£EV©t7ŽK(Å;âû0›n=.rîªÎ™X÷;Ô…` õàfíÖw…iš´Ì’†;«0 V}úkbôÜ™«Ž‘ŸÂÌBµSnkÈ´ž’ĸ—S,÷ô-ÜêbiõWw XûÎùsKEºYY”°Üp!çæEfÛv ¥·•*•­žV6û#z’>¥œ¸†]z³ Bc»´ÛX’mzò–œ”<[Ô³ÄS±ŽÀ{‰™“·_ؼò†É,‚=kmøðb`œîxöÚòÀgÒw£M¶¥…{OýÞ+è…Ú%•AM²àÓTÙ]”wÝ¡@ÒãUP¢ŒGF÷뽤Ö`)[n³Ÿ™Ål Ô,,s(+²¨)SžÀžÇi4a ¾ò”H"ư¹¿øië4$ï’áfë^=«=+¾<ô›ü=‹}‘²ëg4Î#™¤¦£›xO—ÐÛ-ʼEwñ¶t÷Fšæ‰8U~ÐË[Ì+ övxÜ&öFž¤8u> ©Nµú˜Úa^2N‹ÒÝH!Lª ä0©+>©¹=ÅJ¨€Ñ*ƹKÅ#ñÌž,ç¹ÛÖÔ]76½P/ÃŒ’÷„¥ï¥sïû‚ÌæBï‘(<è£hMôä!¨¸HÞ06g`vÂH 1–µX*W~ßå"^à „öí?1Ëe;ò³±Ý.§‘ðž>œçÉaÖ/Ú:“…DZȼÉk\Ì%{C HRIø©‘IX¢¯;ái syÒéÍŒÑä]¼þ±öá2fü£7ŒiaG6W*\Д3Øœ÷y¢×K^¾Æ8üH"µá2Ž”kFºòÂýñLª¸òŒs¸s"{V{îêÛ½o/ÓÓ…î@Zʼð—n5‡‡·Ùe%4ž ĸñ†Ç°·šºÝ¦] J£ìñî=®a@®UN (¼èØìênD¶EÞÿn9»a“Ú„™ù… ÷•‹V~“L| ÌÁÌ6z?"Š8¼*6üÅÔ c™:s{ºèѳC­a†oã».ʲs 1oôàGܲ ØFë#L¤ƒiwûy9¨„}=¥%éºvœº®] O•pÍnçõb5½É¢ìà,~O+«ÔäÐfŬ!­OÌõ%7Gû?ø¤‹9%Ȭ(Q#°^©ê›=v׎«]—|€ €ÎàRÓ$]H†ö”q~_³,[s„4?ÒîA¹hu-…r.LêÆEëÖß¾'•fqâÖF"í?Èž} ?ómLØ`µ‚æ­Â‰íÏ—:îšÙ^›aÏÛ¯º8“†~¹XÁ“7˜¡*ß!p6¬:9 …Ú¹ }Ë ÀÕ11¾/¶FpûKÈe³^Ðe›Ğ;Z7õˆ  ±ÌÔûw+ƒþåè­Ë—àp:eçIŸ¸ ÿˆÐƒ÷Y)ìÖ-€UµÚ‹¬á¨³SÐj®1¤ú8®¨Ìó…5óW.lŒenèJþ°­Mª'“ ˜!HkAšUe†Œ¦i¼³Uk“ŠÔVEµÉ<<Ü—I¯?üílϘ_88}?¯vàáu¬S ˜ŸYKƒk„oPɽ0ÙÖŠÀ•þ¸¡‹nõ©Ï¼e/?øæ²™að.—§&S¡¶šÄëÏruFÓštë˜ÜC»õ¤ç?UÇÈx'?e0:ˆ‘u¥Ðˆno‰gÛXëü¤k®?<×MUŽÑ”jßU'9á­Öç-p6ܹȳî~° 7Xû±P¬:PÌr¯6r!ô˜éçWAýèü5~þ-Fö›=ÄÑÌ-AÕo "1{YZI,e{ξ,â-sö÷ò­/tIÓÜQ¿P9íÒ³´‡¡CVO‡ëׯíÌèK¯h–EíAS¶{šðw§¢ð>áï¢ÂÎ’‚¸ÒiC_Ê\gKÖô¿düÚÀäú´*¼îJ9cpµÍm¯±7\¬.ðx™0xƒµi)™Úk¸˜,q6%¦ŽÂ­‹§Iå´8=øÊ˜7lT¹§eâo{ÎU¥*Ÿ§é'¤*ÜŸöÖh#–Áx¨íŠtÌöR±3ܰ¼HÜÖÉ6XüH§0O{‘Ùcß(ù½ê<ú'øF§°|Ÿ»ýOœ`X0ƒòÊL-x™'ô<`áÚ$àÛ³Åüñ—w`YI»wΨŒ3‹'~Y'¹h¯]Š`¹Ó=XÖë½C¿?¦`%è?ó‚ã ry$®ñrLN5¨Xo„¾¶„4uµQW¾üñnW%~’í\‹ç Tó£}ªÏµŸWò˜ l`1ÔŒúóÒSM ÞOГՇ?UßþT>eÕ-eMWb|K«½‡æ@Eî"vVÛÂ_R(1¤‡§œ:ñáòÞÛÉZ߈Ÿ!kÕÆö¥™rîIò›¬dÜxU:×LNsC!?2@9êu˜2†[-¥µSªv1Å_z<Þ7¸ü±-næuÊjawõÃFf¿xüf#¶¥ËØvÅâqÊb¾úQE³Þl<ƒ†¸N)3óµéÖä{ÉL§SŒÞGo\ßËT¿] E³8Ñú¯³yB+{3ˆ”_ynTÑÍ12NL~Í{ËöLè~ìPàB´.ÌË5£ªsCsPu—ÿšLÔ._ˆAaáÑ W’˜žã³¾2/h’¢Ÿ]¼ˆ;eËàíºÁÝÒjTY³ü^•ïL{9“£<õèìÐ>,טd°fØU%æÐÚûÅ5=.%ÝRo§±}ÜajXöþ¢v¦É’2U(¾’¨(&yuã%ícVÝÕ…ãSܰê6Ó¨‡;àˆNÁ0ÕõÑž9¡¼š0‘NÔ-J„I'l¤A¯ãCd…Ø>¯8FåOýÈrä–` Ú´ÊÞ€né‰ !²³IIÞ†½èéþ€ÛÐOuj—ŽØªPÖ°jÆ8`xŒïÞDN&ùóçÛÅñýU¢ýt„e¥T±…ŒR¨…Œ,Ъ ¶½[Ã^Âx‘¦} ɲ_ZŠs©w<ôŠ6W™•¤ 1S¦ŸX·é>9²éµ"|Ï¿ö½ÂT—X3–4v¿"\kg-št´˜÷œ÷ﬦ¹Zì¬Ó¯ˆBd‰ÐRÅÄ‹H„è%q.Ý|~N£5+Y»k¡ÉÁBøò£ØÏñjË<»¥·5-^о6æF"O鶇U=óŽ-¤‹—ûø…B«÷‰äiÀg ž»Zè‘»¼b%“*¨‘"îþî5•ZòÄMö]œâu·—Ö¥½¥ÒÕîÖ:!‰’[®‚_ .ðì–‹sÖ¼qlþùÚ1ï ¶A—ÑÄ<Xl_kÃðݯ@$¬ æÃ¿š÷ø8ŒqŸjýM|ÊËÑ3ávË„”OK8œ¸'ÍF Z\Ž‘Dj²ÌÈ×Ãö‡Bôèp3¾+ «(£%vÒŸ9—LF|ZinoööÙí˜Iôæ3 ’áÔKòkƒTþ\9!Z³0z¿ë}$}‚n ò§ƒGñÚL²øÏ8Ó=ŽW84Om§¶Uè_Õt˜Šjˆ%nt±6'µfxâEÒ`‘˳Ý5éÌËØpj>.6ej˜h±÷{¿QùønÀðõ7¤Íßgǵ Š#h߇¬#}×s8b<îïU|7 —{ßóT ?™l÷Ù"aц6À”–3 ™ª Ñxú¸ÝA»Ñ¾ï§-”P/+Ã3>þ q± ÒÏÙFC)ŸèÕµ³Ki‚¯x¼‡i¿ÍÚè|qÊ΀}—ãí¹Žž 2Hs ¯¾ÀÉàù:cB¼ªó(>-ÇýBX“ \DÑ––;Û;ôÇ„h„Š^N‘•$e(ÄO#_‰îöõÐÀe]Þx©ó„Xµ¾ð ¨CÉ,h²Q:®jÞ^ïšÞ„Óy’ä(çήÃÞè~^üB°ƒ³Ë-Ç’ô´R’UpÓvhXb¥òåôÝcJÏ;Þ›ÞÝ’LÙgôÜŽ?ÉÒJÄ‘¹wô“ zÀ9ã<4ï½Éhk¢ÞÁi×(«}:ÒI¼ÃQ/–b­[zŠãã–'÷4’F&=^—ãÇžà ºñyžƒ å¬þJ›d0íºÀó‹8–EõºcªïV±¡’ÈÓê¥iºfX&ÎÜsÄAŽ.H“ÒQŠ&ëõ…ð¶üg>RO¿9)çÉU®7ë"Ühµ¡:œ/é¬p%î„ ‘ïãÑT‰|*všÐ…´½É3ö_ìØ ̺]—ʘêáéë%|úþ†— žÓ7ŽÍ¯t\m!dvÚÙÁ#¶õèˆhqñ¥Õ’A ZBzVñð}.‹WìÎ÷ªï¨Ö–à&]ž_kîîm×lÊÛ XM¶´Ü5´eþ¤—¦ñm¦;V$3àôùÜ Ž°ÜYuÚ–kjÙ¦}²ÇËlѬ»¨’[èS”õc.uò¬¾×L ÊÿÍÌ¢©½¨ož®Ú®@œ¿ë°x­Èt³cY`c®W"™EäS¤8OüüŽ«#mg 7ŸÀøIصè[{vÜÌú6ô9ùkZ¶õ½Á0²—ŸHJt§¥q<ʹPKç?¹÷rgæ‚¥Iû÷H:Ä¿üˆµŽ¨Zµqð”®‹ì\S»ßB«âŽ™„PòIˆˆáÄ«y9åÎð.Ä3;—¸æoeÛ:hJö…ÜÃ×pDÉ}\ÞüøIlt ¥î¡Ai¯xH”ÍB]ûAû njB×5«Gøo³U¯|á¤f) 7@£SV ,Äû¬«ƒqnþ WYÞ6Ö¬®äGõ]á§ù¦EH;_hëØbÅ卸£ûGÍc,&öDMËø+!ÉCÓ—q™Þ¦{3¥'‡á³8fÙŒƒRrZ&$n‹I‘¯ãkf‡ðÀªŸ›ß“àòUIš" \1«˜î¨¹­‚D•¬øû¦ê¡îÚž¹NYK¯PO›oã=*³Ü`°»’úxgÔпù ¾øÄÚõ¨ YÔlLJÆ?Π-:yÞÆÇ”Ÿ¥ ·;l+`EhnâÍÑ×U, kÙù^<¼«_›Ç†g5ž£l¨šÚÝg³?ƒ|4Àíb.@úrKÁDSùZÛªQSñò¼¯^DÔ)Ýöžêø4ݳåuµL=Ï'#@ˆ¯é‡+z­¬§ë’Õ¸ú}?°x÷à"ÁM¨£Æé´jå eaã\ÛÄÃrýS°±}DŒš—[gê ßîQ 4=ê"7Iìg4¯^JCäÞK#TGÓ­‰÷i[åÓiá•mR3Çåz‡$ŽUŸ´¬ž”:n^¼V°žö…¯¬«vS¬X~öa+¿ZÚ–QUg{¶5S£äšt.†P|dß¶Þ–‡yz°¶50ÍoVhnÇ.n/ ˆè„HwŸÀ)=üîñøDçsá&. ¹e’ˈÊsŠŠo†»[FØC*ênæD_¤n™³©ø®DJ ªÉ ËÔß 'ÆÌHsγªèk³Ò5 jšA+ïehÀj£0ùZ6´”6½Þ¥¼R£¶BAîåÏ•ÉÒ¯grilšV<(²ÈK›N¬WªwÑ¿¢¿û¨ÜÔ=y©œìÃm>”Òr8¡öYðû "“~›)°¥µ µYuÁ”Í6¤ŒëÄez.o}ÉûvP‹X™Koòjl¡%˜!êJ¢nèU:ŒˆÓ³„Ʀ<–DNË&Ÿ<]OˆVjÄÅ×ç-¸™7ô"_—ÕHúž€iÕ f÷Þ´èpß[.ŠÙ´xçHœêÍ‹oÉÕ‡*þ-ªÝ{/@*ÊÇ\÷ßÔ+ˆ*çRž]LäÈ©O¿¾eíÆ@‰µçÂ,ƒ Ž’ŠÅ‘G H’!pǸY¢Êò)õq»- “íÛþY‘ý²* äûŠý‹EÐ{vðrZMäÀnY¢ +Ãï­Ý»dŒƒ[ŒžhÁh‚¯hÅÁ¶”Ðí<ŸåûLo ŒËõá™w|-8Â?)‡lLÉ)Ú̽ÎÍØRPÊÒÖmö5JÙªJ Ô ×(8S¾ÆÏójš²ñ $†®¾fåà ˜‹O¸Š–±œeWËíL}?¸C ;/ú!˜ÿþC‘²>+¸ìAø#zÊvJ~“OqûÒ¢È9~ùÝW·z„y¢:'ýé£ûˆ¾²kN’åÒTΙ=´ñw|^Þ ÉÃM¼AõÄÃX쫳½ÂbC¢Þ4€LDh§¬d²jf$5Nò:„?ß—PTÿÛó¹ú¬Ø§L.tÊ{mʦõî^viáYx1{û-ð›j‚‰_áñ‹4ˆQ»Þ¼ÈøŒ0Î j*YX‘M½7Òô¤麲 0’püX¼ÚûñÉ;š=õ~NÙR_ª­²V÷*ýDvá5Ÿ•®£öÀÐË«Æôù‹Y<±fšûd+µ¦B¦øæˆè6û“ËNxcs:+PËﺮŽtMŒÙ5¬Ô&ë/ÝèÊ‚ô—Ýïå|J·ëWÌd‹ÍœfZë~1sÕp×jê˜ÿXÎtŸÚÖò»R­äócm‰–wïÜBDŸ·¶pÝo±ïåTFˆlÒ¦s;ÐÈ`âI {(p“¶æ,t-ã+°º‚^?±:c‚<÷µÄmUb† .Vv"?°ÃMëããí¶ÏÄ䯴ãªË׉ÑÙóꌜKòm´Iªª`¡·º£/m;=½áIÃðƒ'>2ÍÄNKD‡@dœ‡ö\A´¨®ÏR÷êÛ6ISÁ±·Å…S}‚wéâëÆ¾ì‰¡Ë,ЬGÜ9ç<ÙŒŽ.É7„Èùù†NåÞ%Ì7ö窬¼NÕ>Ùµú;ÿ¾-5•}¥rËkä)QFeëÙQ‘\ˆ[†£ªyü;aétç—Þí83þºtð2Y:qå€ÆÌ£[ÆÁê• ðôv  bðõ$HÛî3~"H‘\÷þáòÍ/±€re¦ò1MïÎp>L¦òûQ+¹àÔÁT=ŸÇ¾4$³khvKþ!~›ýüqÙ5Gb¢eàUrβ¥þ-é‹™óŠB³‹QõÃÆÙx9÷U9WóÀg’•¶®w´bÞµp«Áp}~hÔÉ"1Òwm*æ[gdw.å@uH“ˆ\´Ò™·º8ÌŽúqÎܧ¹Ÿ"³´·çXl3êVvy™+¦au· Ït»4òóo°U¿Æßyÿ™Q)ok'üg·ü¢Í%¨à'ÔýðkO9i™¡/Ù úïo?MzªXÝ!'”nu>>Ö ½•xja˜Ïû‚˜ÌZ²Hhì·J-š endstream endobj 296 0 obj << /Length1 1501 /Length2 7311 /Length3 0 /Length 8323 /Filter /FlateDecode >> stream xÚ´TÔÝ6(R"aÐð£fè’îî’`€a˜¡¥»¤C@º¤D¤A¤KJº$¤A>ô}ï}ï½ÿÿZß·f­ßœ½÷³÷9ÏÙÏ>ÌôÚzÜ2¶Hk¨"æó€Ä9 âçøð™™õah8ôo7>³!Ô C"Äþ ç… o|òô N‰TÝᘠ‰…Å@ €ýé&ÈC<`¶€ ŠD@QøÌrHo7˜½úf›-6v,**Ìõ'q†ºÁl @‚v€:ßìhzHíý_%Ø$Ðh1^^OOOˆ3Šéf/ÉÎxÂЀ.uó€Ú¿ šgè_Ìxð™}ê/¿Òí qƒ78ÌŠ@Ýd¸#l¡nÀÍæ€žŠ: åEüVÿ Àü}7˜üïrgÿ.CüI†ØØ ] o°ƒÁ¡€–¢:Ú Í@¶¿8 y“ñ€ÀàëÀŸ“CErCðoz(7˜ Ń‚ÁSäý]ææ–¶rHgg(Âÿ}>y˜ÔææÚ½yÿê¬é‰ðýÛ°ƒ!lí~“°uwá5@À\Ý¡*òCn\øÿøì¡h@$"Ì/Â@]¨—ïïòúÞ.Ð?Aðo÷ ?_¤ `wC곃Þüáû¢ PíæõóýÏÀ[ø`0` ³AÖP{ÿŸê7n¨Ý_öMóÝ`^ÀÐöÀè÷ïß+óyÙ"pïàúËk¤%o¬¡ÊùãÇde‘^€/7ŸÀÍ'À`0¾Yøýw™_À¿ÈÿñjC`ôOE„¸©ò‡ÄÍíý‹ˆÇߺ`û{fØÿÞBy#f(ÀööÍ@‚ ››øÿyþ¤üÿ ÿw•ÿ›öÿ÷@ŠîpøŸ0ÛŸøÿ' q†Á½ÿÜhÙ}3È›é@ü/Ôú×,k@maîÎÿUACnæCa£qn°Hà/? ¥ó‚ÚjÃÐ6)é_½¸ÙC@µ‘(Øï'ç& úŸØÍØÙ8Ý<+¨›Žý‚ nfý§¹¿mèÍ”ý÷96HÛßãÈ'(@ÜÜ Þø7‚¸±_ðÍÜÚB½þàåA Ñ7)À g?Àé†ÿ»Í` À ûíûÛxÿÃxþÃxáÿ˜`>€×åߦàEÁ!(‡| €×ëù_‡¶qws»aõGk7ŒþeÿyP P/¨ þÌ$ÒF<Ôñuhói­ •'÷úö~Æ©1÷P‘.º[aÌr9IïEö¬Z¹âLXѱUSÖõ4gaêÐw­Ž®Þ[à˜›NqÓžÎ:aòús"Ù÷„ša’¨#ß(M–V¬Ô­C›&†¸ OÊÖ¾[™è)ëëÎédO–eŠÂªaÍš-mµeÙê¨E ¿­è¢ßY÷ê¯ þ$gÍ]qŽY5‹J×ÌdP“h9ÃOò¬!^úØ×;GÒEÓ¤ê¼þ)M¢ ÞK-/€Sc8Wpï2·Ôc'“Ô×Zé¾Ü#=|z]rü^¹‚”wûäf—Œ8ÆŽÙQÉø;äD 2¿; ÓÏø;BDÒs'"ì£}m%æu[ÞMEô‘Ì`/õ­Á ÚFšØ²Ÿ:T–ø÷ËèÅ8fTÛ˜róåA'ïçw‘rxÚ€NÞ)Ó%¼rº‹2ZÂÄ €‘Ç:BêéÞV´žÔew≸©ÜUœ6Hd«y™êûYŠ/Ì?¯e47;?¡2¹<Îß<û\oÞ™rG[8ZM©€wU×®gÊK8$º\r}=¤NîšQ7)µ¦›ŸnmeKÊxèAƒÆ_û"ƒd!\ճЛJÜû$XîZ€qStåsƒ¬zyʦ|ŒŠ5;–B\Ï‹ÏÅ ¹F4T4²,/= ‘ë̽$ù¥½:0Là]– ±ÄBOy%<”©NÚ…×Lò~a?éÁ ¶$éÝ…¶XVý…µt–3#ë)ÙêáœÝp}LtíHžýF~?RU,û;¿'ñÍyñ=TDêÆÆö×{ÌO‹挾yþ¹œùš0K‹˜¡æ›§¡çkêó_/Ìp-gkš—©öìB{ˆ´Ið¶ûtЮmoÝ%m@œL}6¹b»Ÿøu9ü1½1ù_U_­ð©…¾l©?v^ßž7òá¡*°_§wŒ“¹M™ÿt|Øã™h:”ä¶ëqÿ|·â׎¢žŽt,¸cþÖñz)Fröu<»ãØóÔ-Ixi-UYßërû¯£Ø.ú­Ò¸¼¾Oš¬÷ÔÀšF9Wh¨Î-¦Ð÷åKi>1}9_îŠå⺠«Ún5Ñäϸãצ#܂ҚúŸ Ð@ºÞÅ\ÐÖD>™z NÍ3Ù®XÄá“üŒ4.jQ”Y·F)m‘÷£â>ßví©É9§³¾«¸7Äjî]ÌX³Ëš¥-‡e!ûؾIÍñY!¤Üç±” Â+ÀíêTQ‚mŠ ­‹±PÉm ]²»˜SD#`v[ל—ÄT0nZêX‡l©IÀŒeþë´¼·ï&NÁâ†/?=<ç07~)uA(u‚Ë€¡fÚŽá(­#Â]hB¯7½ Úl”˜{toúìýNªÓ±ïñ'·)Vn¾³«k˜[— ©óü„+šW’®ù 掽éþ£ Å»jù§ð²mõ“³vYÇûªó°Ú¬R?«šïÁ«ÙµLd™L™ñúÊÝܤ¬ö–ŠÆ>bÎk''­ŒñO^Pˆ½õÇlV¦p¼v4^aý›gg¦|Ù“b¾þ™÷aþóÈsz_»rÿ 6OJ?žP¡KÜû²tÏAX³»;Ý µ,È~ZY†'Y¥—ò3Krf^©·“16‚·?y¨žßTÑ¿÷Og!1;OdÃÓ¸ã3ç¤Ç‰yÖ­Z8 ¶0p\³Þ„†ñÓpÖˆI5Öôò³\¯qWø`|Àû¤ùªÐ£=Ëç­´Ú–X;Æí¦«œŸsœ(Åñ?P™šNnyë\)q6ý€œÿ¦óIà—Åkbê%Eâë ¥ªQbÍK¾mJƒè $Ñ`•„ Ù¯4‚BŒ«• Œ¦ ‚, ¬ádz5~$aíö•O¾~õ¿´\×´¢|‹ÝoWoR Ö*’áfºý:õÓ|l;±–Ù£²³Y¹ÛkÁµO=cE–ë ²ÆÛò‹t¥_IóÈæú•Ý.Ž* æë+ÔÕ*ëþELñö¡ùF’¡æG™5•‰>]ðáÅ4AÜì¼tYN¿l.ÃÔ7¹$Ëàl2û¼yw¹FIÆÊÝÑ•ê<»+Ìú6nþÔ¨Þ'r™*ºäo£ëûX'§m‡„ªYÓ,$c°u—ÚÜ §¼²%½cÞOf±,Ý9òz'w?&;!›ö'®w^¸ÓYCËõ„“—ò˜0¿eÌÎtÔç7 |Óà½aæù´ÙŠÇéŽw¼Lä³ 6qè#%؂Π“BqQ…oÞæ5LÉ6\Hã<¤ˆÈÛàÓÚþ¤û~‹\íGí\ í³«ŒÆtgŸÅWœé{?vÄéAT}øw0ÐJuø-×dðU¢„§I³tøï+ÕDcBãiö?“Îý8pÎÆ1ùqñPì=‘ä–bo`è-½óVÔ0åãêqŽ’8OG‰ûýö§ý³©i±Èlõõvf,Sþ«v@Œ°8§>¡qànSÏ×6 løûɇüØ9›ÍôÚô-Ãð80ÈW±½Íj¼]”“ØôU «KAãÖ”ÈØò:úh²?’í#W‡ŸÎÉ´Œ/#r!k;_àuîÌRôÑ0-‹wa$ª.3Ñ—ÎϹ‚%íåÄ%õÔ«mmŽ7/tft¼/mŠ]kRB&¬ƒ‚Äø§ágÃØÛbaápsǸ®é9‘WkBN‘ÙÖ1œs*D‹ªù\J1Ť b4¸§ìòb;ÿµt½¡u@6AW_ ñ2oíäz?sbeï$.}ëÿ(ˆ“‡ÜêÔlIó$´ˆqÊn»¿¨Dx!¡§Ç¨ì™ï!ô¿ÿ#Îë÷õ87ˆ v¿9N‰àtžq0x‡ P¡ë°Hü5a]#ÔŽMÞM{e4…E˜Ób¦Öù0{Í©âügÈOƈ°7¤ø˜è³åý%«ºé«Úóû¨g ¥vu|¥ÞßðÕå‘ù¹îì«aò|%õ…W<1"#ΦÉß-¯"dÞúqûÌÆÏÚî‹‹{ÝŒüs—ôâ€ÿd†ÄØð7æÖ•p7/žéÑÎyý Šë²o%³¾2='>qì¹6©â€puÀ‘Yìý-®[©2 $÷T¶ â·ƒ‰+b’áwqäôô-•üÈdêi“†ÎgÇ{Í×=äŽ<ÏÒγ¥³Sýt¾ÿúÈ霫H'úYþs~ÿËïÕkx„qpì‚ÖGô/g×Môê®Âš·Š×‚c7VÒÁžLôçvËÇ+ÅïHPòm*-c/ÆÅ©?xIÊgúÆM PŸåðm1¾;óÏ¥\ÐYmIæ ›Ìéçt—Ø»Æg]«kˆhè‹Ç+Ð*ØîÌô3·âˆ¥ö’ZqÔ'u5@:˜É ãŽÒ;Uúù[m'qw‹î•’-•¹³¾r.¿À\·Ç2©§æÙrÿT¨AéAc[ò­Øn€Eób®/T©îÔKzkNJþ⇡á fdkÑ^šªoáù¸NÚùúˆ´GËÇ&ú‰*2½`äùX*s=ŸdÑqœ{rË_Ì!åyæxðþ[µþBù¯î_&hVpR±(ô¢M–ˆ—ˆ|§r†™[¼ÍC<9$R r®Òݱ,[«r<¬£¢ÊCI3² „ƒ*‡0²5šbÏÏÜë2ØC×î-;º¸¥>´Yt1/‡zgi$Àصù&_¦•ÖÒÚg\:³”‚fñÅ ´†45™ Û]o7ä-чPÄ?AîÞ.ô¼´Ü*¤—ÖFï›å© äEl¹é)¼¼Ë‰QÍõ†”6(ZY’&oôKñ5Cx„Üõ 4lnãÉD:žô­]‘ Êc/´GBN9Oô};ƒ:&B ¯._ç-Œ:«ðgÑçtŒ›A¦_Ö¹\é\üÒ}W5<Ûp»‡0*0’¨xÁDª×k³ ZnR*(Øà™ßÿòød/e»Väå½ÓÚÀzhjN,ãU×çi:¹íH¥ô&GK¥'\8º„k@p¹qür±õU‡Ä˜“t 3JÅÌÊJF%÷•"wªòÖê}jk«ÊåDà蹈´¥øówq.YÃ=]îÁ(ó”:=,Þ:*²™x÷V9œ­ºCΘ;±ôL]¿»XVS~ІËW/¥Œ= pëzÎ1RÅ®H§·;ŽýböùÞÍE®¤>¨Ž‹ë‰s9–Ÿ©f1©9òìºÜúG*ûRkü¦N2µOðõÏUƒ€ÂÁ«×Äý‘Ã2Je`·çg[ׄ»ƒÙ­F¾„¨HsV=fë)8eä<å\÷Þ’BH0ËË¢Š•ª2Äùs.ÿ¼eÁáØ›­¼sf ÆÁ@Ðvóf×zbÕYé5d%Ù—KSA*YQcÔÊÍ^x ͳì©ï]‚oÅf/cg:O¯ë¦!Û2õÈW”}¯~O)]ă¯¢•"hŒÿuø£ÀlhÎOÑS[ÍOÒüYf¢FèœøÌšI}õ’€ïÌb»kƲȧ G&Œo‰‘p›Çû²Xžm€)­…ý|XÂ+Ìí(|¢d«…K¼¼{g¿Mž…Ûü~-fÞ¸ø«D­î ]¡ƒ–äáŸéÛ²Èpñ¤ $í3)S€·©û‰Ï‹¥mzÝŠÞÇ5¾õE'ÈígHvˆ_¸dÀì×Ð '¥ýiù ÁÖ‚HI,is•g˱†äJ¼ý®=ꚢrÕ¢Ú`ä·h‹ÛŸ’œß‡Ó"cZb$\öq‚T¤ßU`0w§ÏÏç8a ¸ë‡¯ÍÇRa…ÂæîV(ðöÖG7®U 8"Ö#uZÑ]¦µ/%…H´ d0Œg¶³."çxe-ÎÚÙnÅǦJßC01F‘í+·/Ìo¥€pWë›ìÚ'ݸ&×l1h—ãæ^…îì»~8åÌ@]J ŠÊH?øÇöžÉ'‘d¨ÇÖàù$ÉÍUÙ1+IÏb½ËäúýP],˜ñª«ÉTEdÑ—l^²Ð¤NdH®ÌÚ£ÌO†Dh¬Ä³HïLT=2ÄxÜ8ïàô:ìEr¼>Žêé±±)GªÈ€ÅŒÏŽ ôyéëÑ0örÝÔ»­ôéB·»=~䇭ü £ÊšàO#ùÀÊ*Ä€úÔâ¼B£bõdÃl?âub÷,‘ͼKü {C‡…ì!#ɯL—H­Ø†Ã[&ÒyÊ×Ö‰Ÿ#•žœì3fš© ö¤=:Ÿ½øŒ‰oWŒÅÛA$D¢u|ì’8¢¿: šñ4îÂ\kû£UŠcÕÖL˜˜32"Óèa«m‰fæêL'[l)|±\^-ûiVžÜÂ|¹°Ù÷€³]] œ^@ªóÜ€Ô?–¶üèRf²,9mó5á\²¡ kþžÞQé¥ë8Iê]GõÓöögêHöjÜ¿7ÓLA}ú™ÖÝJ·r' áÙHÁF6¹KZN×éc±[èarÓ†!<ý®¸"M5ŽÈaþ¬9!0!ˆÓņ¾ñé˜8þÎß|Šj q 9ïfº»wÅ6¨«,EÆ仄•ä2¶sjw¥ŸÏC%µ ÝÈ¿ªô2{“ïœI߯x‰à®¨-®îZÑx5ÓÑ0áûvh2®Øäûr²N­=‡Ðb…—‹°ØÜ-3 RY¯(,¹É‘çŒ/ØüÇ÷´S'%wö›•öNz/é 5n}+·¼raÑìˆÒS´2‡Ö&ÞºýL5nÝpŸ¢ˆ.x¶@˜´ú¢€=‡´'\É%[*¼G¤úJë³üG"`}È©e¨ß¬n@+¬·ôÀ„"VúÔ‘‘*Æñ£t£>ZZG*35ä¶¹| Þ¡YMÌùËm`~:o-·¸6´F®Žüü0ìPÃAG'9wÌKc8ý¹¼Ç´ùVlSÞÔñyõXIŲj9Ç;ý•Æ9†Ã1‡/TaS?`F–‚÷ûž§R’CÔõËÊ)™¦#0"Þñ`oïA=éß LnA°¿v>ÆJ¶;0Zaìzt?~ ÝãÈâSY2–¦@gu/6.5¤PÕrœïï}Àb•´rëà5¦¥É$~cȶ{ …,¿¦Ú¡[Œö£ ÷3”µ¾cå<¯ˆ+'ÃUèTŒà‘ |éâרöÞ‡Ž{,©ÂQg¼«³)^gÃWHöâ0É"Å9Ù/cš^ïèž/i[Ž/(ÉÛÍ9Ü (ß§^÷’g›I>,?v¨eÜ*Ä™åXÉT9á|Ô“rlT^I›ãÔ»+ÿVÌœS¹X¿[ìAGŒÝÃD3Ãx1³>ûª#Pï~õË Eeì5Ú¿³)ßéDt€º–äœøôˆ¶K~úJdî\pÑ/¾»¬Ç%½_`ÆÓ~lœ·0ß»-¶5,N™Ù0H°àLjç“.n+õxsËÍX–(« GÛ=“€¯k‰Òöœ®ûeÞúJuWaþÜ3ìe›š×‡eCô¥EéL$n÷ßjsWû°úEíÆ(O|=ÄG×ËDF¹‡‰˜*XWQí·±pŽr¶‹ }1,þZià4Xû­ïgÏþpL&_¯˜AóTàÒD¦‘¯½:)flÏÆ‚:ÞHN…Ÿ»Ü—´SA?µƒÝnkaññvµ  ïݽÝWc1;oðgó¬lÅ5Y TyÛ¹£î²>{¯hú3KXà°¿²™¨åÞbŠ^U’¡3n"w±ë ÏÖIl.¼9%gnjß%˜|)¡:8çïˆQáåT]dˆÖNÓž ½¾k•ö«@»û™(ŸÐÑÍt9Õõ§Ê+bF7ÿ¬hš:›LÙð$/\ÅLMbu·¢¥miæÈ,ªV¿'9ø®Á¹^ç5ùSbµu;Óh}4„^.ÊŒ‰«AhH “ÖT}~ù Q´2…™Å¡ ƒ;V¬…BÐyePný~¸¾ÿ®tBÞSi¯Ø3@-ñéÀVgøy‚Y׿-MØSß,¨t…t-ýûƒC:º­'ø*JCª’¹{-Õ5[ÜÌÛ)žŠi©ß~­«˜Dêbž,N‹Ö‹ä$Ј€8›™K8îŽr!ǵ¯(³ÖrJH Ä¢äö(YBÏ¥…ü}ï¾ÁKèÑ»‡¼ÏÍñktø®¦ÖÇ´q±ö«Îüp«·šî»¶35Ü•™¦~TéÈÒÖ%öïÂ/¥¡‹?˜îäH¥…j½¿ÝGÄ[Yn¥ì µM™B ’O+- ¦gèø˜"VÛÝœWÊ ,:,Ò\oÇÙQè½{q!¨¾ùeQ!Æ”ˆ´0Ù}¬Î8?®Ð‘X2ýuþCÝÞòƘšA…dy@›‰¤[·ÿ¢v5ðÆHþÜ4¤;–ÎVá[=Þ¦ÎçÕšÙ-{°dË¢hÔæ@`‘ñ¢”²2çzvD⣠ÐX½Ëk˜@ÌÇ %ÕÉŸ¿0ãõ1ca§!ÄöM\ÉÐ>râ38ß°ÒóÌÂvPºÇ@& MªÊqÎig˧‰Ý‹Jøà>t mûPÊP*„0ºu…–i•^&=¬)R;=p›—&̽7MÿK!:¦«g? ;´¸t‡ž]Ü:ˆŠeƒ‘°+a¥kÃÔ"I;Y>ônÌNTí›l÷ϲ³z)8ÛTUìlq¨¥tÙ›ãâNdz<§á*W9}OÐ)Ø®%†hªec]RŠÐ«dri㉰“Útå1+Ò”U¡©T7ž°ˆÛÉ­w]<²¿õJ·pÖs´™]º“•lqdbï²}™vè|.&óÕøüía“nk¿hÅÞôvb§à+›ŒTÉ(ô˜Þ'žlÏRq ŽxŸ¤&̽×Û ý|²âê°Ü‚~Ôô)”‡CKwðŒÆ¿ÑÚ/u¡æÿ”âö endstream endobj 298 0 obj << /Length1 2732 /Length2 23346 /Length3 0 /Length 24870 /Filter /FlateDecode >> stream xÚŒöT” Û Ò Ò5tHwwwwÃÐ Ý %H HwKƒH‡ˆt·tIwwžqïýnÝßÿ¯uÎb­a®»®;Ÿg¨ÈTÔE-Í€RŽ 7FV&>€¸¢+ €……‰…… ‘ŠJÃÆÍø‘J èâjãâûÃ@Ühê–I˜ºíA9w{+;€•‹•›…ÀÆÂÂû?CG>€„©‡@‘ çº"R‰;:y»ØXY»iþ÷@kN`åååføË êt±17Mݬ`FsS{€º£¹ ÐÍû?!h¬ÝÜœø˜™===™L\™]¬„èž6nÖ5 +ÐÅhøU0@ÉÔøweLˆT k׿åꎖnž¦.@X`oc¹‚=ÜA@˜ .«Pv‚þ6VøÛ€ðOo¬L¬ÿ†ûÇûW Ð_Î¦ææŽN¦ oÀÒÆP–R`rórc˜‚,~šÚ»:‚ýM=LmìMÍÀen U˜‚ ü§ EGðq€þ¯©6ðïSVZظ;ü_­¬›)ø@—¿©þód6wwOÒí¯w'ø®þ‡ÿú}zÍçgÍùßÙ~y×vûY”ГqkTpŠjK;•ŽÑwÞå«û=*\]ufðªËµhÒ@'úÒ†$í•Èé“ïAsÜû–ÕÖ¿Gãxµ‰­VĹqœÞ±ÂÑÚb"F ‘m¿'g?­ ;èfÈorT¹Îî<¨*ùX·žÝÒ^µ=e‹Ãa3[ªÛÕ\òHe“Œ1šÑAÅÓTyfY?ðÈa݉áé1O½Ð¦¯®§0sÆ^Håâß úưùê­±}¸ûá³\¡ÁæÚO‰¯‡G }…9lúîûPç¼<0ØËx–Òr;Ð8¸ñÝ_»X¸G˜ÈÊ“•^ÒZ?ri‘/ƒ8¦ÌmªC(ûaÁ#‰çÆ4TÀ7øL잀u½…E¦ r˜è˜3×ïìƒeý©RûÚ4Ƭ½'¦aÈK—Ò‹Ù·”ÓÓB|kvI“Ì0Ú¼ Éïy+±4ªü_€õÓ!ȩk•8L¥Þ¤ ×9çÎú(‹8d¥»¶f«" ‚½mïx ˜Žµ*5[ã8 TÉ6£GvëƒúÅBB»y¯-vׯËËÅŒ°÷µîN+=ÃÅ>üÔà~—Ñ®˜Ó᪜&-õéfãG‚Å‘†˜™Cc,š¶†àýÆHǧGO†2Y *š¢yÅù=÷~ó†sE]øŸEp"®Ù¾|U¾¥…@ÎD_þ@•¹½Maüu Qëì™@ŒP]ã6ŸÂg ¢kvrdƒlhbƒÒ×¾Ò ˜£» ÀÏmOM6»˜~±*HùlÙ´¢é)Z·@T“1Ý \=ì~%F÷•åµÐè¡  °”&sE¡èÍë—™„lÛuŸ,‘{ÒØ&Á*Wƒ/+¯¯BË :t!)W%„Ã5÷Æ·¹’r&½¤óTA}å„鑸›6ÕT3‰Ùd³ˆ l¸5úÙé—EtdÑ–¡:Áðæ»Qð?h^÷‰M>SÃRa—Ì#{ÇÈWƒAƒ±ö<.Š*‡VÍ3ßýE\nBέ ‚ºË—6Ž«‘"Hk¼k¼ãànj̄‹(æÒAT©Y+Or)ÎÄXÏ3õpJ¿ê— GUÑÑ$¤ “· Y$¬,¥~ði/­{'uws™+Ö§+¹ïV+÷áëë?ÎÀ7¾àN>ÀA2Î…ÑOj¿àñRà`ýA|!è6v+±€†ÂÏ•ÖÜäï"ïκÇþ®)c“ŽS'ãVùebÊÿÚdæù­9 •ÁªóI AKË6‡2‡™~†ñlKþç“ÚêGìÞmó(–UâòsE¹;Å]–ŠáX_®U¼ÄƒÛ.”KŽó@:9;¾à tb–Ƥ®<Ó’<ÞþÝw\éAy_Ópq=1é쯈$ÄÞ‹´¨‘ò4a]lÊ,SZ)U\²*””ö{÷MŒ ¸kúxÓÀ‘¨Û>x|ùáYj6*«D³jŸ÷7rÃøi îŽo+غñ|VÜ?¦å¾Ÿæ¢Oo¥ÿ„ÒÓ‰R>ñÂûm´dU¸»@>Çœohìæ§Á©UŽ[%µp鯇±îˬÆçׄí6Ê\ %ñ¦ŒÂÑåë™1‘"m6/Ò]g2‹Éª Bǃ·›¬ZÌÑýb‚"5—÷Gd,¿ëæ9úÜQÝßôRuW~›Àöü¹ò“Íб¬kPeü$,k=„æ¾›'æp,‹ËWÏŠ ?—l_ÚïÍuܱ° –B)y‡§âT?÷¤.e<˜ú\-ís[»'ØOóq“vø©MöÑZé¾nÆwS€šÊ ­àaþÃƦþSu?¹âá¾C·H£ö°J¼ÂJ‡%3*–ùTú{“ô¸î¼„ÕfË«®,û¯T*’ly|$Z¢têb ÌÛe8ÇœXeâÙ¢«7YöüU¾CH´-s:0 )ØäðQ©ïx|Õæ?b|ïÖÀ¥Ý4Ö>…2}÷sTD2Æš™JÑÆX}&ŠÿŠâ½©¸ûÂXž[côõÆÔ-›^D™õ 9 BêŒ4±Ý›„"mÃMQqv\ºGïiYÚ¡â¥Åg,Z*Ӿ쮜¼SN¨ øjNK,V[ŒÈG‹.îÕ’zÿ¢ >CÞIÐJñ‰&NNÑ×V©˜>貯*YL»_^Mzݾú„g¬?ª£ŽÛwq©š[¢¡òrå’{‡døèô¼@â`pß”àŽs÷.Úä½/ü Põf&ÎXÄ—‹@fUÅÔcÂ_sÛøsÎÈë^½rVú²Í¾ÌêXÅ7}fNaü¾ËeÃA•ªì8»ZZüsym#áS¨(˜UÊLÊÙk6 m<<å3$!‡]a¡V9‚‚k"äRk÷òR·yf©ñíZAìií­ª¾g-˜MVÆ,“5í–ýHþ1dðóéΔC•÷óð[@9ﺳVQSñp࣫‘ÝQ¾«Å‡ ªOüwx¸Ê‚B¾"…l|çe.H‘Eùe!JíQŠÒܼ”² 6ÏÔ ¢sV„?Aö\Þïåb¥”ëÏä¶TF •?ˆŠâ z„%¬LÚçSïÔßênÍÖÑÌBh/Œo…Pwä³Éžñ±Ó™mlæ'Ý̲ :Åyúº}DeŠ~ä°C"z3ëçz5¯/»±ŠºW–e!;‰Ž1és¨Ï±™y&¾1¸•+ ð¬‰$†¿,#õ§‘‘¼Ý,çÃídPèé…©».h´Ì)Y5²´›€I”c¼Ôœ,]óót/–DÙ¾kâ˜Õd‰ÇéÂýÍñÆ<ùý…ÿ)C€Ï@Ý¢ckõj®t?Kªk0ÆL?>¦6«”רñônÊ*ÀêÙ!>¦ÞKËûª~c"‹ÜÂç-^J±“Çùw”,â°ø´ë¹ž&1ÞJlP“®x¥8ë}·[™…ÅM ĸÒûé(ùϹSüûÓ öAR÷´°HsÑJ‘Ÿ ù×~YA~¬D\¥o‹èý”—´Ñƒõ« Úµã¯@½t,Џ¤I¨Ö^¾õÚ×n*lÕ„Q©"G•¯Ýë!”eq_É'ØÙÛnTxgyõb\yßCÒ˜lT’ º,hßñ)%ö»N]õ%6’ŠÀZ† gk/‡R³qxb–Úû mSN³iŸ`}ñ\í=Tæ5{)Ø"Wþ”ƒ58¢ÝE/…i¸ÌüÉÄ»,Zµ!| Ñ@5©“PоlÉFç,f×H pma\ hR¦N¥Q«Ô"Ï[ ÿF-mæPߥ(ã±_÷ªëH×èßV3G„\u3§û^åþqT RS2ÿðâ9útJ>¤ãšL4Í—z!H=U‘Q4Ùù57ª‚Í—äÌý:înêöÇ\ëQPr þž.Íô¢igƒF׎KÀôj3È”-§‡ƒO›,‚øe'wh<±²^‰ØW^ª~uñÔÈ.Ãl¥´ÿçÈD¡ºÀ~Ñ´P3²¹Ç÷1ÓcýDau©e;Ÿ#á’5•2ËÅAôåØ5éugïÅ9Hoš>­U°ôfÐõêÔ1ãµ™ˆo¼÷ <™¸8i”/®9<“v€^Ãá É6 .iÍÌ)ÔÊU%Õ‚’qÂàºzt:ƒZAÀéÛ+Ì&4{,d¿æ·u<»÷LÝÉ o,Gû|¼K•È‹½_9åv7|_"­ŽoBJܵÿ¦êFPž0E×ÖuW_tÎçŽOƒlÔ|Å·éöJ®ÆVdÿµWymˆ$-‹ô ÿh ö¢ª3Ô‡Ò¾D; šæÓltþl8gBÐܦ{›½‚8k‚N7€s„ Ñ9~¶Ûy²(Hx3j܇U\ýMQ k×[à”:Û{¹\²âÂà»${Ú³©zJx’à€ê³ƒ“§<7¤ö0Ò®kqnÅ4R&¹rM¯yªšÃ=FÓÿ[O÷N×e ìkMÀÙP²nÒá>ÄÙ4¤,ü´îVÉT¾<Õ®y‘duÓ!ÉC† Øü°¬!a :,ë €âbªÃuX_5LÁºL—q+ø­ºË³·)'@QEWºôÇ8? ï«"ÃW¥¸º8Q¡"œ—W'h o3ã…²ºB$dlßç£o¸b»`{-%#n3u -ŒÏTWçÙ¥T-ØwóS'WSì,¤>ÆÑYNlJùd˜4ö5 çoÈšCˆ¨ËP' ¼À´}<~ôAð`eIlhÕ”±÷\˜VŠ’y{·mðM½ymNVàu “l6¦ø<ñ“ÙÒŸ}59ã`èSß¹ti2F奢ëÜ4©Ž¶æ“ÿãu}c“nw}ŒRàô,•íH™LûI”²Ì üÀÈR㻆(þÝ÷_FÏâ×åš<òP¿.Q RÎÕ¡-Òˆ[ q¦ ¼SÇ{"n=úüýL$¡/ !Ý´¢.ñušh€ydØž½£6d"íy,¬ Dc1Å¢Éì8H××vÑ„ÝÏʃ¸Ê¤…FÖ>÷)`­†l«î1ïjJ¥sðÐ71V²:õDpÔÉt×)hÎú@ÙÚ$«ñ8cÃéö¹’ÇÝ{‰Òå`ØAØiâ~+Eà÷ªâ{f)|·.½×h‹ð˜9Û{âÁÄô4óS?J¤~õh$ºÉdû°dvA§'Áw˜CSBä<Ÿm›sÓw¸˜þ¶ƒŸwD "·ü{¼Ð¶O´`àÒ¶@ï]?¤²€èQ}Q«í…õJ}.¢’1£„švxŽH&¨û  OäM„&u%T&ÉùÇËß\Ë„[<†Z{ #è?bÏ<©þ,Q2³ }³ØÖ¾ò.Û‘!f¾X¡ÍgâÂjßjÄtóCœ{TîDš@–ν÷rSYÅ8Ô=}T¿Õõ ‡°›agG‰LúH~ÆìyºÑ÷qg ã—ÌTÍ£‹·È7E?Žs Òõ^¤É€â²¡ZJ*E¹É÷|%ÂÔ˜ÙÜž{ú.ï\·>>ØñÊê\~´,(Íœ€^{zxƒ5ÿIGò°8½Ÿiÿ'YÇx9½Ü¢:7jÇ‚.I5<Ñ.̉í" 1õä¼è®ò›òíðoͭ𘠘‚WÉJy[”\_Ô 4t1"(ñªR^8F‹w„3 Æh®oºî¤p-´¤fÞìà¸bWH?®17•:×u½¸†´ŽîA«¸»Ó#©ðy'Qê&‚Ì~ÄLÏÈÙUœ²¥ж6ÙTl z™Íxyû¸v¤%!÷Ã/¥¥EÍ¢XÜ%²·W£_´Éï *µàc¢Š??L$ùT›üõÅh¼Fn#ªÔͽÁÁÓÑt414B‡ß¾@ ;EÆ}šëEµçi<•&K•½ßŒß‹¢é)û©ú0_™­ÆÑ"U“›\<³Ð`žòËq&±‹ÖJP'¾—áçfØ6!ºõ“œïõ†öYwМŽíèú;yãRüè JÔ%4X6¥‘5JªßeÏe¦G.ÇI;„5øŽDæ¤Npw”^àÔu¾/³ÔTеZ¯iÏÀ}å°l–’h´Ž]dš«Õ€¢3R‡™`$ yú?1 …ë)5Ib‹C^Vß é"ŨÁë}:§¯OÙÛ& æÜŽžŸuršÄâJ½5Îðú­™íE£ó±¾ïý;i4Ít.Y$Ò´w;K×B|ZÆPB?>ñÒ˲øãLÕûÎaß°k.øôž ¸oJeZBφ^©¬– ÒIÆ…ó ?jeÞ{ÒUZaEa;Oó­YØR5W/a‡[Ã9÷!e¶¹:¢06‹|D”‡–æŽÝ ¯ôSµ]v¿Ð;÷qõ ö/èVøQ§ŽYÄhYöá­¸S”ý$væT‰­[?~F¿Ö¢q.áQ.Ó`©‡¤’èÇüp/ðñÍvÈ­Ý–u¢7CtÇå9»ªc¢êXΣ“AžÔá¼.t,Ik%..1õ1Cõ]þÒŠ€æw>¢WÁ ‹Âæo®©ÖjŽ”Z—ÄÔ9yÃnC¾×BÆ”e“wÍtgÖZíjìµ-o™•j÷ÀÃ.Ò~¡§D{ÂVÜîÒaGF'l„½V"s©ìÒõ)( £ÆuIáµ'4aòGd´@rù ÙŸ£ ?EfÊsÐÉ3âÏ.k©o©DT‰–IÓ„tãt/ÝãÖŽOKž°Í˨pÇ­&9ÒÝÔ`ü"5€)©?k˜Þ/±žC‰ axÆF% Ú¼½þvÚÚè'ÉÆÞðá瀂>Š…>_‹ONžïˆ!lîmöIáy]F4}A>Cþ\ꆂ*ÆG8Aõ€6U 'Õ"%5ýâÈeÇÂ'me®2&‹ÞŸ•"d;³)»¢FU¸;òHUKâüTnKÃ3¡­Ì0Ûêoš´¿£è7aåPíFeÄ(̦XIßJß!Iò(#éO{¥”2)Õ†Ýq¹iáx{gÝ#1ç )Þ(î ZßBÜdFµÖǧFAhèɰÉñ{~¾îÕ¹­†DPp0FQT…ÿ$©_/›‹1>ΔkMß%Nަ$’±=É?=®ÿ16$gc¦¤Z¼¦Ð=údÉ¢“µ8ã!„úhß·#ÞÝö:Ä ™Òk…VCSñM¾CôZJÜÚŒôÃ5CÎ;ôb=‚v¬@¦6£›¸Ó%7Ê\™»Š¸#_3…é­ ³g¬·ŽêÛ¼*¨z4¦é I(;2¬BÜ4­ ›î×öbö©ȯE¥}¡˜ÉQú:­×<‰\"{¿†h 8æ_üPã¦*PʇœðœÂ’Ó,`1˾%_øÈ¯Y9YÆ(ÿy;¯šíT‹6ë³ÙÉÞ6£žà!ôÄU!DªÐ†ÑH·†(Ñã&‡7qc-qc÷wrµSdjdÓvk!µí»A@ׄ5=QËec­‹ë¡•SGZâ£ÕÞY€ož6¿ýפÈÀû×ä¤éÃz·nS„ÎJZÒŽ¼Õ9µ;7_¯s–½›6í¢ÃÜ_ ¥Â ˘èŒ+u÷çè±RG RÙ°«³l\Ýî97bØ?­­\o—@xcՄи¨Ÿ2ûu¼Œrù"ü0OqÌü>Lä'øõ ¸V98toÙõà7ïD/;åùïÔrœ&1z¨x÷8†@Èl¾@»3BMqzîZ¥xŸo|vš_}tÞØ»„ ² ŽïhÑßÚd¢»Ô.š»a WâÑúÐv{úaèLyjm*… Îy‰”ï+Eµ»OÒ#™‡ç ÷ZXü±íîV'?= iY{YæÀõŒ'V,GSþqçxšX#_ž4Ì.ÒצópºNW¹ ŸPäíÜܹtenr§²?\ Çâ_ཙÿ0ðezâ˜nDVy0¢ò ë ¬>Ôp$Y¶þ÷×C;8ØÍB:“÷¾¨ïÐÞU Dé\er+öNMº«<[Õëšœ¹ìÈ2lÀÓ­èè—R {MgVÎk£Boz‡wdqmÒ¥ž@À˜K¥Í}Œ„–—ŽêpÖÜÈە­lÁh͇7<¼aÝXCç!ÓÉŸéOÞw?ÈsÁ‹¡*˜ L >w¸ÒC Í䫪HWŸJ¼3ÆùÌÀl•Äa!{é£ÿ-˜3¤þ³½¸cÕé†7=Y–tL¼A®1-Ò´r¶® ª¢ÀÏÒú®G1ÆC„\VŠçH&Ìâ>¶Pßé_ouóeC“µØÅ…R^[Ø9kÃÞßÓB¹¼U›‘®àûª P[-“é"Qa)îŸnTŠ#ÃN³"þBMn‚ÈÖêã!0Yš°óùÆB.bW¦’N?`µG±7!=vTɺ™¸Ô‰s«á|xõ@„b–"“Óš¨V{´(Q%ëÿ†7€¡Š=.^¬/ÒÕ"®wƒPç»Aw³4çj¼FÛr´æ{,Û;ß‹Är‘´ ÕL¿å׫ñƒ·ãÍïB"„Þê’Û·q†Mʵ¿ä©g$7QÆ_´LE6q§U¶|²7DÝå7•À8œñ⨲ñQ Œ ïuÛŽ|ŠKÄN*êÑ&³èxœlïr2ÕßQ¤ K1õ´£ùª«ôÜÝ1´ITT¤Åü:¬ùþé…‡Æ, ŸÚ nu·Púÿ-FdXõ©ò©q]uÓòÄ»ç*½ô†1Tj¤‘Éx÷¼ÔQkø}Cvâ–³·•½ Ö˜¦f­=ÞN´²7©_)P¨i<vicoºìgà&ïÌ\2$»Öú¨·GÊ'R¸°^ØU͵O _1ˆ =¦Î¨'Æ)W^-TШA •>fçQÔržbwÇD§¾|FíPzôêg1„o0TM_}òbSµÅáVÔc}Qk æöÞ`з]ðnâôR¤\@Fbœœu^‡ÜmðŠÇ’ïbåKbQQv Dá¥Il̺zz{w BñZ¤Ð~ÒïtægH Ṩ^†MT»w—Ùû„ð±›Ó…Õ€œªUhÇÞ„¾áꟗaЃåcør]óž˜ ‡0RvúÏyxû#+“*Ãñ´f0¯ruä¸jÍ—Ï\Qß“b³ ¤à_ݲû g¼Ü„W\Å×ÜÁœ…‹J¾à.Òp…诹vÞ1Z.ª³Ìo¸sðY ”;>¹ÀÄ[a7 §ryëô®½¤žC;þÌÕ0­H(ÞYmÌ&yÞ Ù½„³ŸƒÄ ÙüÉ—Ãz]PuZ4ÞTrätcÛ¹¤Uéá–î‡ÉŠK=šPä«O”^2šMhoÙ|“°ÏÆõ^wñb£50 ~T˜h©C•CÇÐà)!’χú5’7›qT¡t'ùI’Â!Àÿg›lЫÂKÁpÙ¤)‹~ž:r)óá~Gu7³r$šud[K¾a#óŒ»ÉÀ~w.½zß“ÑíBvȸò†F‚šœ@î÷Ÿ„¼H M‹ZhõÌ¥_1!&Cv×¶‡ÅÓx"Žîú øª‡`–cLdBpô;üLž-RKùí-‡+¹ø…‹n¶AºA—?qè'¢WMåÇ?P ¾f¾¹èØûr<˜KÂÔeCHT\wº^¯Ù’û©ŒÊôôdõe­+:‚ˆÞÓ0Ôè—Öƒm#ÎÙ½-HswÌX¢+ŸÚZ+Ø£-˜ƒÁÆ÷å`ŒÁÆÁµÝ<Á• áÌ%ןáÍqޏ{ ‡þµÿ ¾‘‰xõš)§ïZE:ÒnòúIÅ/Y%ÅÑõâô>*i0¤•¼)¯ÑÈôˆ…Ùd+iÎ"új‹¥i*ó4h¡è¨›Þm,þ|z­0 '|óÓeÀ§ÞZ™Û(‡ÀC©¼$Wó6£~RǶt*ñ]éü·e;¥FeàŽE$ʨaÃ,Ûvªî=yš-ËÌ’ÌêVzÆýÌ "IËܳ¦nüµ£ µ}âa;ý™rgË•í²ÎTÇvoW—lšØªBl"»H‘ƒÙ¹ßT:):´0c­ƒXš‡¦×ìDÒò£²KHº„ FzL Îw¯‹û†- ³yÅ£K?ä‰ñï˜deäPkdDŸ¹ù5ê"Ù‡‚*î‰ü¡L1€ "£¥tË2µ‚øæ‰ÜeiÚéœtIÖ¦Èp»|-£¹074=(9Í·«–ö‘ ~—«S'Áö å¡e Z£KÁg)ä6>1|אָ¿b-ä,•†0˜Ü}]®ÞðÆå*âÎmþØ„iÞ^ùÑî:{Cå42m4a‚Í˦R úÕô\ÎêÓw»¬×ùž\Ùz>žÌwÛXŽ¡º¡n+€ªù#½Î=œÚtü×–ó÷®4‚z*û¶¶c>¥)Þ[@©†¹Ïpþns}K“7U¥Üγ²Èt/˜8z묄²=èíßderHú9t‘e›µqQž)ûÇ Êðtõõ|ŸßH“0|»y›Å7:ΑØÌùV}½à¿P1æ…Y~éEC÷£÷XÖx>OãE»Å2Ï©{!Éc§bŽÚ*ZB@v›wðyzñv[•¿÷Ó€-ñ>ÓF¹QÝ:ˆJ5¿^4°X}§¶×Ò‹ÂâŒÄÒúJt¢âYÞr>CÞ’B“k¥´—#„ø¾g gƒïçÇ?ÔëØ0œÑö†Ì¶Šîçè/Ó?žçí dmÊA5,×&×Z敤²š}Sâ¶^”òs}b’þ„6·`C vç!Lwëpë\ÐÙ6g.ñPh?)7Ó×ârêŸuÏ-(•ݼ27 "ƒrå=¡ÀDSy½XV†GŸ‹Âq±†1Q[4{È„ûBlS¥QR£#WÒçv½-MR“>ŒB´g¸`¢~ò£Žû¿~Ì#w`…Þ)Ý[˜>)6Ã'Q¦çê¬rG\™nû±0@æ+‰D‚O/Ù;ùÝ–è";£æa–{’Qô…[ŠÉê³<ÇøiV‚?·{}Õj¼¤Ùé4T „Š™…±Îæy?rht?6\­ºá È4žª[Ù¨¼WÀFwü’yõç¤s­ãQ«35hãµBM¥çU‘Ϫëß2ŽÑ-ûJ:þMãóúGÜØ\«v¾Û¼rA{Aáé[’wÈ„tžäÈ«|'P9T ~0¼R¿ýƾ} ËsBNÃÐJyÝ?ýt”ÜýñÑ PWñvúF]¢lS’µ0Ê~T€r ‡Áb!ÔÆ·àøÍzuBroÑ}ñ›Ï& ØßRžá”Ñy²-@UO#žŸÓÙ*ê…¯ø8,Ñçêÿè»§¼I(Œî.C€ŽB‰.Öh•¡üâ$aÙ(9Ö:,oôLq³WÆ1XŹ,4W‹W›G[Fi]‰=0'‘Úƒ‰@ÚLáÚG*lQÍ’Ž#\V¾Ž¾£Q#%á7$Ý"áºÍ-)@-,]Eîèw¼Wc_š‹¿L3ë#ÁD8„ªª9) X[«mjYVE¦þ6Œ¶=cE± fåo¬ÆÀù彞ĉµxžƒü””ø ìŠN² dv‚n®yZà!­ô§—™1j?ËÞt ¦’)ÎÁõê¹È°ƒ×ÑnhCôô–¯'™$£EÅi1zØ[âƒËÃLp/Ô8‚a—lX_¾„S'Ã"ò :IrîÆ9ܶFõÊ=¨Ãx}0¢@t• Ç© –`ŽœPŽû*^ Õ±X×s|!º5Þ̸eyöÃn#GêyØåƒ±ù‚ÄשÀ¤2hÊfÒC}VÜ@=ñŒär—ZzðÅíã „hÐ`{á{yû¹†w*l(ânŸÏ$.óÚ m">Š÷¼l*j©îIäŸÑ¢·PÏ*ä›@æ+k„‘Ò¿>Ä×N5/'p[ÐxáAÈáçt’ÀóL0¾„€Zð¥û0w s‡Güá¦xFLtL¶«/‹b15žíÍMìHSçÝ™Ð%]S$jKV%Rw`DÉs­¡ø{‚©ƒÁNÚçC‰W+aÀâÈpÌч”Ÿk<¸ '†ŠÓfNr°DÖ_Z[_â]idÊõ ˜ÜR´\ýÏ<ªí'¡RbŽùņø–¡K xÇDzçè·b†˜¸l_yÕѸÂÒOzËRq)ne”íÏX—(%ÒŠ([ «ø¸AÇ nÒÝ'CzjSE**Ùwuƒã*ð-xô.ÆØ'¡\È t3È-ñz)¼N‚{yÌSáŒJ²¨F¼[Â{%ôª,B;”ú?Gt·’â­‘áIM¼i‡’t í±©#‚ãP2DʹМ3ó&®‚µžvä¿ìÝà´ Wçá"+Zf7BliÖ1eÏ™ˆ5n–q¦Ë×¹Ö¤»]@£ÕTÂÔÜÅÁ“ÈMÂ,0‘0 Í@ÊF@ŸVñ¾ó¨81S¢š™1*xª5 ˆæS¿DÑ^¶!— U”¬ôwÛ ÙgÍ}hAø6@ "°ÚÖa@ã~zã³3‹¥ðý»·§IxÒˆg¦û§†VO­«ihèpyÂÕµ¾/@õ ›F÷ku²&†ƒäS&Æ÷ù×¼)ukâÐåæWµ"ï°CN“ÜU×-´ï†Å°¼W¶b¦øÍ¸žÚà‚œ1Ó | ®‰B?΢­¥õ˜Ü£s7NPŽ9<ýë!’ †ÔoqÍn¿qè›…ÞªÁv•죒ÂÛz?ç~›Êû¦YqåoŠ)’>kq߃fЉA.E&Ö…‰ü e›nÀhpû´´–ÈÀgÉ:S÷W¡—aêÏ€W¤ ‹é)•QæÞ>]ª‹¾l2¬©`!í§J›£ÆÚ·þó,w¼÷ÔóJªõRÙF‘B yõUõXÌ #!e-^¢ I3ïŠ7^´5m_ÂnåtQ5+lhÖƒ¼4föܘZ´2fË2&‰K$Ç^¦¤HOo\HÞ\±¶4mØ÷¢ä.ž5LÇû<9bä°³ù! ‹¢EV…ØòŒ1Rûÿ评î¢UñÝDA_âg-¾+`žb2xHÝÔ¿à çÇšHE¦±àéAd¥£F°0²õ÷é¸lÙöFaÑÉâ ÚqŠùáT£²K Šb}öÌ«.By/kFàÌÂÌèx¿ý0 ˆQ”:×aÎ&Ôqø™¨…U4#¸%iþá½@g°°_Ñq/ŒEFRéì]Ö‚Ý,*sÄFì³CBíå³Dõ hi)±¯¸nGMç—nü vâŽ@…RTQžTµc]'Þø#{É+í7Ž÷ˆ|Ýç1H±ÃÛJ"fëfAĸ×];«*þħpÅð»8ÎÏ¢\ÑZŸ6m)ôTnuaؘ._­Cã 2(ޏ¬\w”7"ìK4ä|§Oe¥ ÇK¤WÕtdîƒ?¡e_*8îúžß‹4†iFƒD¿Ý¿÷t(uBtw¡bAƒ; ðŽL$f¾E=oø‚BпÏ{ެbæ›Çx‹‘é¼ÁgäÓbÇŒn¶rFËé>›½DûQmÁªñˆuö½¤'HGô¯9ƒo·ã±Æm§Ììµm÷œeÈBKmrùæýñ7{š¦ñuòbSùà…í¨§¡QJ§¼ÖXõ6Ä2§2˶Y³²ŸßÒ®–ަ¢â²§ePQ‘0IQé}EŽT®qŰŸÁõ™âO[Cï½@kÛ½…”ßàxóyH¬§à L v 6A¿ÏlZÎqÙ9Ðòiö­zOHOØY$Æ3ŒóÍ&ò:Niàþ¦©ŠZ¹ØZ_+näÓ¤™*Wq ¯„E.ãFë‘ÄÙšG0gbÓåy1u ¡'-L¿  ¯â8d”{‚`Ëå­“Ģ+¨á|N—·ÝÓmLn±iÜhb±>ádóñ{ÔÀ_ÛD]ž3iX _¿Ä,ѵµ½ÑªxA œn>nHQØ’üYÁá~a\åô×ͺDžÌ,ñ~¡¯# jQG}RóSúØò0’fJÞG(¦z#êø^MľܦýH6§ÁÑ‚KÄ¥Ð'Úu£{‰vðül(xqòW­úÖ²‘˜^(%ÂȈùS”½HY‚¤ö-—òôcyìš8— '‚7I¸³Tù®®ŸÃ;–}cl9¾¶Û¡UVtsLÄ‹ §_ûÃ#\ƒ3ð©>…+%¿8GÕ󥾞‹žƒIì Ç» ¦ƒ¸ "dà 7Ý¥GÊïCÖ®Twz[AÏn6 ;"‹’f7SópÚ¸“β긣†;e(ÓЙ>Ÿ+}Xcne`3óÖ£}ÐÑ‚œÕMdCQLGß$Nã#u*;ãéŒ%»ÒnôlFùrŽ„f~ÁöïesŒZzR„“)Ãé\6 kõݺ;•Ø!ïÕG ±f?™_ö†pÃûݰ© 0È=h&]…,6tš[i D¹1_Îdy|©)OÏ£ÇWy=XÝTr/¢ËnCÝÉøÈ¿£ 5Þs)̬GYËf¹…Ô.þövPd{ÃÿóâÚu±}C‡^V8`2C¡!=g±Iä 3i7*¹}ضMÔ»ø'3§«4ʸݎ›¨n>©7 !— †Xõà×Å®Ö!F³ŸØ—¾ú!ðX‡ ¿ÖÞ-•Ó—ŸSÖA¾ÄnNÀŠÞMxmêgÅV“m›£ÉŸ½*Ë[¹¨IGoßü¸+3»2ñžõª£×\W¨‹™CÅè”—J¾¢£ß«â#ÆÓr{qž6™þ~[¼1-w[ñR,´O?f¯k) }¬Æµ‰Q¸‚>¥#1Ï çŽfÁŠÞ‹¡»"ïMZÇaà0þK퓎Z‡h€PŒ|T]Zí«Rú=&âyÔ2Âjl|ÍyÄ]ã …ÐtF'>{*Óšlüù,¼mÐ ªÕÉ,é|2ßšøÐë¯ Z:<ˆv Çš£\Ö½É:jcÖ*•p¬Fç{$R¨iÐWçÑP‚Rñ¥þD9=®‹÷X¬®´C3:øU¾ ¦„)¯!%ö9¬™ÙWÏ3ÜíòÎg±>ñ‚M®ˆdQ½ÂO >Èï¹’ûÁ«ÀW‰Lk¹µ_”ŸÔ°Ï‘|êêöP0y¤ãÕ1™OÇ\Ö*·i°/õä8Skë†Çîq¡ßgúß]Ã0y·R:oñĤ-(£³®›¨æ“éYôQûc#(»Ñé™ jÓÔ ½Ú¼?@æ¨@Øtp(ñ˜À™“9%mGŸ`ÃÄ»^»çŽ\|³Îòp¼gëÏnŠV*ÔAÑ:™~«´i™Äê4é^uì¹.xj”´)å÷Êa”¾”‘íý€‰ ¤z'ÊGgØsu¯Ø£ðw£Ž=Ñ8H9y¶%ìËŒªe×¾%1-ºÃ/îÝŠažñ!,¤ÞL_§–6ã'cqGq¤6N%U¨ª`ÙU—P6ck!×Á­øÏ_l(M/y¸)ˆ~âÈÆ—vßUÈ{=1gnãšEfEǤSdë±Ë.³÷\è±M]ÄqâÕ"¶ #¼V]¢¸aŒ–>éÅr•wq¹Ýæ%z±úô#Ýï­Ñå#1Ë {¡/2ï»h¹ÃK˜ƒû][) iž¤¦8ã÷ärV“´8íʶT¨á5ó]ÕˆŸlNªŒÇŸß“¥ßkiŲ¯ ¬Z¡Z//Fûe¤ä­j@B•îžžì óþ|·™_Ç\Žò-D.Æ«œë Ÿ¸Î¡#àöX"muxcPŸÈGÏá§ÔÊ“ðUŸª&êy½ˆGß- ˧\Ÿ¸Œt[t›< *=þtúÃ(5:)¡Ø´?+bv³³Ë€ˆžôJKr¡™ÀÙ†|Ç]à•ÜÍx¿Úú.›CØü¦rá|2Å…á/ûî¬ÙŽªgv;Ïzý'DôïÔÞUî]Úð§‚2¼ÁÖSfâse“6Uûðì© @-WÜt`!õÝ£Ò®´“Ü1‹l_ÚíK?¤à %¹µœ:3ïÃg WÉ|Á(+÷Óƒ¼ ÑüWÎwI/8UzäAç¾ÞÈT«ŸSC¤ÔR#Šel‚mc-}•&N$?|q:ê=Úü´Ü.¸o¬/ɸ í¯aóŸÖ¹1>"æƒùc¼G ÞS\¹–Ý[vs’ìX1}³”2 (¨{ìŸë²GË.$¡ ¬lRÁÄy€éœ3žá6®% v™Èÿð‰A“i܇^àŽùKV]ÅÊlZüCöŒ"Õß—imä±RgðeXiâ«¡ˆ4é$p ¤¾Ç¥{ Š•‰L„+¹n)3…m±CF¼Ý5²¶ÏAuÜîùø¨,ëwÄj1 XY{¢ùpÁ5½)Àž0Õ¶¿AÊ1䳞¬ ¨=µ6xOÜF˜Ä)äÂG¢££\û¥t³ý2‡êÙâ2?Ï@â¯ÀÎF ZçQà@©ã–ÿ[œscÝ0GIiºñù¼iÉÞÑÍÌJò3Ò¶ôæþ╱I^dAìօȬ~¶®Ï¤È=#´¤¶¡~Žü$¦QX ‘]“Õ ½Mè'lùwÏkûÝó—Í Ï¢’i×8ËL4Y–;™ŸAÚÜ©¾vì=Õ÷Î"} ÊfýPyÖˆBÔ!]Æ[ÈfÐñ 2b# ¸åãœRUÒ•p4¾á5˜ZF?fE•áÞr ÙtLÝùyŠ}eG«“ù¼¿ÀÁ%ªÍ.yø!¡¼æîÄõ³ÛÉ$<¢,TRÁÁ|ÖMyÁq5ë÷¶s“¤KØÐÆ6ÖKR6¥©:Jy´‰8Hø±LxMdÖ…°Öû{,º¦†ê£N£Éú,ztœš‹xH‡ã èÏŜ͕O¥5ç¶Œª{¥ByHcRÂÓ¹‹&êJ®‘º87ÄFºáЕ3ÍéB°!Ó%óOs†ÕÉâJ!X3#ÝóYTÁ’J÷~$@܇Zê;­wÙo6] åBÆ4¾ë®´×&Ôg¼zbfR¾ÉvFù¾êΕs< lG½ÊÎ Òãv0è´ ‡{÷/£M]orŸÌ?;Â@yÈ;8`¶h:Ÿ‹ù­¾ÍÓÝL\íSy«ü°Ey&ÌD}t¢°‰0O0æõáäºiðFò<ó»`‚LÌëóâÏPí?Ñ®n!¯¶Á€TÂQ $ì«¢›“JÃP„`¬8:uwXË å/Wír?39ÖD@²ÔFô¢£ŒoÕn§îêO)c¡¯¡ÙZX•µ‚TbœÉÖ[<°w ñZ›>㘠³9Öõ¿ò=á®KydâÅGP šŸ°äý¡LÂäQäG¤ˆ&ÀŒ@šÂ4:qdæ6YÒNc9ÏèÓ9fÄ·o—¸çHJÅúF´† ‹¼ôÐpQJ¤ÔŒÖê21a3¤Ÿ( CÃï‡OüÄ…¸HÊ Á•þÏubB•j#}”ÄÒb–nÖã#Ã7[ΈúAÂSó’¨á-2oE–—ØçF%Ÿï0(/ñ+ Çí [F¸ù0Òí`ca©dÝn¸u »ï+L1Óì.hóÕjûi!]ÓåD,ác²Ì ¹Vø‡0.$Ä'>„ëxv`†Ò9¿YÙÒv×'·Æ¦N‘¸èÔæzYwÞ«„DcÙ©çî¬oÎËá ôÖqú‹pozÉ”k]òÙžÉ_u$³q‘м²9–ˆl,É^³úÉ’_,bíŽC<ÌÓlpÛ’²â´É>kžÜ³\àš{€{_âr¬—ºÃPQ›’•èû!Ü2xÂB2%%ÔÊŠ7c †{&ž™í”ü¶ ÕÓƒÁT_«mùàƒµèÅü²ÊÓP–JÖÙ‚ìÅä3rq™ý01‰OÁzTrèCˆ kæâCSÀ°®ìÆ‘£† c _ñuÄPî©ËŽžo´èðe6u›2¼"úÎŒ²cJ¾¨Ø.…lí£Ý„zÎïðv)Œ›\þír&í9{*¢&dŽ’èBв—@¥p‚Vò8Y =89ˆ^‰,¾¡”áŒiðä-‚$bôÚ…ÞŸ’èI¬’»s÷Ιâ7ü7S$ß?/Lf‡Œ¿RÁ¡·Z_íg٘Ӫб¬ÍÙÁÊF¥½£B…˜Ó]1ÿ5)6…IJÒwK~FþxíÞ§¬¹uîôC~»Aɲ¿C,t³<×{ ˆŸyüÔS>Åx‡êcÚLü3<Í–º+u†…jh…c¶šz¢Ãù¯¬8o aË+Òva£-4ÃRó¦ØH è‚I•XŠ?€ ‹££9ÌÊTï* +µ»ÞÏDEéA/åB⣠±nÏL>½T&þü("µÄ®?°Ý|J‘6 3ˆ»è¸ÀÓUýC3õkY óòôÖXÒ¡– G éîEBs–¨××+}•n3béKV±‰eR˜ËÍ2çût?` M‹| êda#î[¤ub‚½g†ªÚ!2yWüCS²Çr½üV¥ùÙ/4I™ÉcB_·—”ˆjÖ×þøÄ¦ŽÂŒ¶fÕläöÅp…¢²MKÁ¾Ùaòuƒ9~¦¬ÒgÄäÊnߊñ4Y$¹¡”j¬ÑtÒOÑ¢çU‰±¯½xSÈ ‡ ŽåPÛ]Û)W2ј~:+i¥ñòæ^öÿ G¸à4^L+bFL¯¾Âxe»úì¨a\ïoÊÄdàsZA®t(te “½à ëã;?Zça„â[; üT½TæŽyøîB^»«£è˜³Â\Ï:óàçŠýL™²¼¸€EØBb,ë¸}Úõ¯TüB•“öF¤©FTF¡2çG 1¶îÝU`‡HjPY9„6èÿ¿ 6—4WQFcÆtÉ|H“3·ʼbiÖ´Aá?¯{‘ñVv$‹«Ý[AóDmœá?ö¹ü*’¹¬!u«Q>`ÜÐçé!iLߨ!¶ôrBC‰K÷®áÈÕÈ82=ˆpäkv>CôW,«ÛÀŽ÷¥ƒÃÚÙ›—==õ¦-.”Zd<5Y…œè>Ë;£ NîzÕ“Œ-@&X&Œ£—Úi¹·@#õ¶–žâ4 !$âr^RñLÉ3T±àiV-@êžø~häÇ;9ˆñ$uåá5S8#Ûj|øÿ¦”ÔFù¼à:Ž6ZÆáò‘” jßâÔ¸ûšÁ-½œŠ~dD>» ?û„€Ÿ)›1&v¯´Ÿ|,pᙡI>Êchf_œn¦µ½qv þ³]K +úl"©¯NH qÚ³k¦KËf{”–Ô¬ÖU-Ãhør6€¤ûé\*ŠÕt«Äœ+´†‹^G ¬<ãHH'´u8j‘±âœSµNýv·GóN©Ñù?Æ8j¾Î¹Vyá«b£¡nJ¥Â´LÓƒ·Ðô¡ÛÞV‡;Vó|ÛñÂþ à‰F¦öMn@óäúÙQ WjY{éîÔÝg^«~×%Óûb„¬ÒV–kÑ5IžJ)€=‰ë’j']f„ZnÉëà)ô<¢³Þ‹NúA·÷ˆòŽ&«Êf`̵‘‰þûÁ=Säº0ß=¹pýÒ¾"úÈ‹“‘êÁOv³:Ò îÅÕRTð>ž•aD„¾ùOóÌ›$GÎÓòl©¬wUÀÏmßImÁdD¾ÃŽ~LÌ:çz¹½6ˆã˜ÜNÏ—o00IÚ¹_ÏÒ¯È7Ó®{ã¤ú`4-¼ãH^Ìdí£ÔÛA4 Uõx$ÀÇÍ ¶DäÀ¬Ywˆ÷=»õN~퇯¸XÖÕ¬ï¶AICV_žê..VTjÈ_}B>pì#ï[rSû %ef‰ÌùÕA´ý«½”3Â×`£º¯¡ËÝóÎî©¶™c£Öy6óâv)â(¿$\†£ŽiŸ}¹]4F–Œé,Á‚«/Æ!mLÙY}Ø"Ê¡+Žég¢{¼åL&ìè-…?daO ±å5.4Ûªác½£!~àÚØ=Y©ñ=A-µ®Û ÈòóŒ§ö¾´6m§‘5ÈÕq¬)”¥tü¯ŽÓDFë’ ®}‹â—7) ‘Ž}P…5Ü}öeó²€]´êúfÊ–”EjÎë\lÄ`©Èˆ# žÞ ÏB³du ­%`'ÖÞ|¦®RH ÷Ÿ¿Í^¿ŒÕ¸?í‚~ œ>rSsj¼#£Ý }h0Õ#ðeK‘ÀØyêd…ÂÒc_;ï‘I9*¯òú ×]”+¦øã&D$Ì”´?tƒn©?ObýÞÌ<ž†Miîór”6‘}¤\Z+ë±y0ˆæüަ+ô`ÂuôBNuÖixéjÝÃwÙTŽ´*mçÈ>U‡'= (F”0ã¤×QÃ…¿ =ŒNí+@צû}Há-,ý©¢¨$S<Ò ï²Xpô’˜Ò1Y:œÂá=)y>;è°ÎNfŽï;[§†¥ÚéFçûÜ)îp¿±ÞmðrÞL5Mx\HNÞ®8 Ý;踑zЃ-öòÑ+˜Ì@at˜¹JZ LÌÀ8‘ΦÈú®©¬1B·X‡’—Dè„ΕçnY`;¶¡ØßÏÿ[ù#Šoþ)pL‰1À(*çý(Ó}`üVÀæ50?HaáChÕ³ó57°rÑ>øÏ_ f}½-e«yÑ0…eô5ÿ*†åÖ»˜ûÆOÂô:ÿšHe¢ ×ÑVáñ„ÉÄUc•,IzŽ1J=l˜¢©Z|’ö|bBY( UkÍüS?'"!ŠÕ„nþõ(*8Çyoÿ¢&ÎvúaK’£å†AC¥'ü½Ù“»àÙ”<fM ëï"gÁóÇvqªwÂÀö¯Rå£ /ù¿S¥ŸÏ´öuÖ[›‹¹Å,Ò>m%`^oÜúÎv¿Hó¡|ý(RѼ°µu?sQŒ»Íj’ÂN³r¸QCŒšÕJù燢@œ3¦Ã¢dÔ]„R7 ‡Ï˜(¢¥ó.Úk–Çšxÿ(6ëö`·í•Ý€r}¸íÀŽˆdüPŒŸ{Xñš¿ì=p0—ý´ôs¡$AŒ»’‹†Îólõþ+ª­ÃW²kAUi†" qž6xÄî öúv¸ØQþ¤àÚåƒæÓûU'"ºhmUŠÁÂ:ÍΗø¯7` Z¶¦Næ¸*›ÞæÑZÈftÌ&v?1}7%¢Ä„`ŠŽœzž¯ú–ªtÀ"~ÁQs=Rɽ6‹ Ò¶c_§à€R˜<06–«H@ˆN ‘Èj[¢gÀMÈÊt IÈùú±+ÏEá«ÂEö|°þ&7•[¨ÙSÕ¥9”õQ»û¤DcІ8˜/ñ‘häÒe*Ó+&ƒ¥A@“QÈÇMOäù¸‘å ¤U¸EËô¾£zùë~Ø¡A¶°ÊúЯ٠È=g- ™%îEŠ”ºÈð¡#ÜaºS8,íj3ÿJ­LÌÉà%ë ³Z·†>þJEry©„TaF\›À6#%˜x[]ðø²^ÿØ¡ñm(ªÞ].ã‡Ó¼zCY³š“:Ñ›Dc&èð°ùÕ38E‡øP™²"Ç~°¶Ûƒó \÷ájŽb½¡0$,«É§á¬Í6Do|ŽüµêÙ8>Þœ÷b!ÖÓv\xWéÒwøÿ]5ÅÄ›XÁ6RÈ4:½çË?Ë(a£žÈ¼‹v¯6‚¿ùœÎWB>´ír-a—8<š9œ”³8}ÇÝ!"qËÀ•Óü%¶æ×úAŸíÍ ÖQÒ &_è¦ßÈ7:=æxG­åøÞ5ÓñÐЂ²ý­Mcûø“ȾúÞGÕ–ìýmÞÿÞÀ’R°Ï¦Cæ(yêCÒmÜÎp‰RïÕ_"Àâ´moã4'ãoÓ쪴;y-*åGJR»[r¾À>Mxm¢ŒtkºnМ䄆—Þlç'Bj]ªþŸëØ3¿}•Ò;sIVQ=œÔ¾¸!9:1” ¹7¹á'ÔòzÑ¿NjËÛ¹¹»>ÏЮŸøÊ³E_¬âØ !I­€d yõɤŽöTxEŠùЗ«x=Œ¸w®6v29î@yÝw‰(„ðÚå;¶s¼u $çrØä ÏÍÆ^Ö?rÇ6_O* hã%ОÓV—NöV~TÝ]Â|xÓ…ù£ýµÀ]‚pc®׸sv—· ê ¨ûk{t/p& cî 5nZ¦„i£qaÀ'éž Ÿæß ]+>pLw[;ü½ù‡ØE ë$7ë8·†â$K€¡ZøÁ—½ºÐªê™¾*œ%Á’ö¶š@ÙåeQgô¯É#e³¿g°èeçÊ¿ä|†ƒó³€k^Ì]¶…!ÒòC>õ¨G„æ“Á¼YÃ×Ù°(–/Ø¿Œ&7b˜dÛ÷¬BW ¾ñ2w!ôÿsFÑÂ2½{(!‰Zn¥ ·e¸;ŠØRnèFV)ž-Òh¶ÐÃe#¥HªÅ)ª)Äï?suÈ–’SR AŽ›ƒg‰R,B_Õ%PŸyÆæÛœZ¯&‘mCâ ¤NÍϰ/˜ñþð›QûíýoØuªÙz—®­Osâ¢"Džˆ?XPâ4be©Ù´Ýo´FH1±OeHžÜÈP%ÔøiNXr-”2`åM/íxw2&Îqzòêš}²ÐÁTo?Û‡¬têÂLÀ ®¤åb†B›@V¼†k¿6ÒÛͲ®VAÚ—Þ¨Œ½X`.§£ Ÿ¥­+… {db±%Aw²#Ñܼ}VeðŠY›ª5ßúdœwÎBϲ=dÉWÊO í¿w§®±ì–ºì9•©KOpVàg««©Râôç>U‘åÃpÆÆÇ!Ñüûº†Ý;Öµ ºÉäí ýô :EÇoe‚ówH0O·þ,CÏ }dÌÅü›_{yRó°ÌxK‰ÙØgê)ËÝg^ÈøDX¡ÐAgнCo*²¼>” ,£ÈþQ`©èÞGX€4¬â’gMuòégü3dÞŸ?Ë!îÇèYãHÂX1Ïj µEÁ¹7Ëi`ë_a=³FŸ*Cžç;ÑÅçc÷“‚y?Ëc"3‹™Á•4 Hî!+»9õÍÁx&á W ³ã‘“-™Û> J5»À÷©±6”pTäþA}è-ºyÐÊÊRL`ͼ:Ÿ*| *ª´ÃÛêè–Å(8v…ÃPQncnݾ[ÊrX ¹db°ìäÁ£m($–¢ÿIû.5«ûV]*g­•µBŸ´×ÊO//»h3ùüþÒ„ªWù†€³•Ãq„_Tî*|Ø™­´v2SíþF¨D ‰Õ³æ}ø[Fî­lrû›¯þ?äÞ _Mùë?(¼+¾ôFÝn x>OKê]ŸËŽ‹ýl¢Éß hg§×ÔBJpZ®{E8jÔRÜ?¬\­3‚¤yµËÃLû::hÉiˆNLà²IÓ÷Pê‰MsfµsÓ÷+f=Ñ[g¦™9Ä_!A•(ƒm±¸,/Û:¨,Å<}•úÚ,ù¸…2.ò£j ’`ÞFõG§3¿ýçMñ‰"ó;mQÚ´˜8|ø~††0H=ÌÁ”×NY„Mð3Ñ“C¬¾w²…yKaåA€ÎYkÍ’$¯>•>VpõåèøómÜzÀìmSwZ ºd§q \úvYZx>£„±FŽZL<…Ó\iÃÄÁð±ÎoõæBòG¨lzI=ŽNŽìíäb²· úŸ ’ˆàpêuü r-.É‹ñäíLß1L¶£ |8kr Úæ°íßKKÒ¼1S- W–,´N°šTÙî‰?’B[¤GÂrU‚ímb3ë1´ R£GLKÄr€¡êêXj}êÒ pц) ëFIN:x„U}ŠÍ¯\°wÓ[w…S:®X4ê†Ëý7ãø/’mI‡>’EmýoiÜ<ãñ‰J>¦pŸ‡,‚Š Ô9ŸUß-i1œÐÀîGúÌ%ŸíÈ3ìS=&2ùßHM-á²²íY-¦¼V/ûÝšô›mLÁ!]ç4בi‹ˆ6hàd(7xy¬³ÍH¦³i2+A¸4ɬ9¾|Ôå:(l,.aAd`Mè­áí.2Øê3rÒmɬUb8ñ[Qcz{Ù“™,Pî_ÛúõKc4PV2‘î—Ð-©Q3i•ÒräˆOBöÙ협=rѰù‰±[©Îß™-Ç—þ¤h{0{˜`öJ·?ì°íãX†âa”Ïd°óO5aëìÇdàBJWÄj£7°´¸ã?jj:7•Já×KJ›!ç5‘ëñÌWÕ 7G}¢bƒé|¦b )œ‘ZÀ'ùǤб ž…ˆp¹Àišü¨1àa‚öy'f–ª†µ¿¦::•¢Ýgh²¬¤*ˆÝs££ úò‘ž÷Ú—!Âá#}ð‰ÄÎ0E:_h®)-ßgÓÓ©Ûðá¸.i 'NCÑê<’Ù}MìþeÍµÓ ùìñ}ÖÇŸÌ:iM6HMéq?o’B‚F~Ð4z r tѼdPÿ,=T•·™ÅìÏ i榃èò˜YqÞí“ÑUºù¿âÎ7¡a1)SéÝ2àý…¾zÎ>šŠ¹g| S[}¢háHݽG»†ýlxx„ˆÞƒÄW^‰1k Š‹öœðQé·<Û‰²‡U†Ì{Ša(͉GP 5%ëW)دð䦽:h¡ª‰³>ôù?ø3lšîtÕB9Yç|$†ÙGwIU&È»Ý@¨f 0l¾L˜îQÑ¢iMò˨8Á ±Ý ðšWš÷d•¢Úèöʦ‹³åoçüÏšS°Tâ“g·-ó´Ã˵y´Ë«[íö5HâÞs”y±)(Ði02~ù i—¦±œë„>]>î+,9¾'„†fe#&9¶è @‡áR|aÚÍÑšíÞ'¹w'Ì=ÿõ?)°uÔ{±ÁǶâ-ãòe%v'½ž€tŽâ:µ•Ž ’R&ù# ä\W¡´?fœVÚ˜·ÜkëBõ¿ó¼Ü’–ÉaX†ZMBrƒ¾Ñ€B šDóúma9ÃøwþºHÿäPáÍ/DQRö»ÇLþ;$yçÈl™ö'e¹5KàÑÙJî:b“‰„óGoËõOõì¹; ®Oå™ \Ý­üoüΕÞñ†zÈ«žü¨ÏÒÆúÔ»ô¢3Iœè²t”îœ=ŒÁ‹g€0>³ã{å†ÀûŽ~ È*F9þÎTw¨lãö2£<3Ä6пq‰X÷ÛÞæ8¼2~óxØ ’iŽ€@:8gعºïÔ)SÕÎ5êê2ÐáTõoùpyÅÉ•PB-]Èu³á#]«bÇŠûxkdߟâ¾L~±KŽÜ>\)C‰w@ZÞR´j§¤f4Z‘&Xnù›è]ïÕ·4®ø-ü¶*¤)žÊÄŒ®¬ q¹ŠêÚù4Æ8'´0ï$í:¨Êðø-RíèÞ ºµ™­`6§?GG2m\ïµ9ŒÞSò+˜¡ãS˜';Qø1a·oƒaIv”ÍÝÎÇx¡-3¢¿ãexñª2©ÑÌ%Šxòç džK½É5d_Å#ñƒîÈe ÝólïãÙæä÷®÷BØJLâNß–v{`( h¡@‰¹¢¼Ñš´qú¾Ü •‘ùqñ%Bþ“,eIœÿ5ïð@¤µ¦òô @-ÔR²¨WÉ¢Öà^xí¶´‹ìf½ÍM"Åñ×zó³2SE‚IÌ.žulE7ÙvÈS5Vë~BXv¿¨ø(¦‡P:RZÊkVšLŒ;§¤ï©7¢KtÛe’{Ð &Æøõîp·™ñjxròÿÁ’Лøå#¼AP5að“Ò‡ åょ©>ûÌ´j)%úo2üb âQ˜©`7:À-ÓM»ó¦Å(ª‚=¸û½6‘‡Á ×ñ`éHÛHv5;šVÚ½7³Úį´ o‹^—!»›2n˜} ×2QÅpmŽié€ïjxÊa¿ÙHÁŽBšUn®Î‡jç6ȼw£g„ï µÞjš‰/'Lt„L1Üc¾çºë‹«¨‰rä2«¾’ý2ÅÜ€ ãËþøö.P/-s¨ö¢ñ “u×Õ š’‡þU /tîÿFfíÕ¢’4D„7PM=‹&!å2Æ`Lœ—ð`âß’œkÝX·¡Ò¢BÒKÅ9^‘`aÒÑ‘ þ*öX@§òDÀþ%4 3ðE°‚Êäm…ÿš “×nZ@¤/òøl,è&•r¬$M¾ú`FÕ³xp¤ƒöö&7bD6 ¶•„—Ù@Tƒ˜«æ„Õð—»ÄX~F@hb½'š±GêPàp?F„ƺ”Û,NŠ¥<\¸r6Ú±² {¼2eBIª.ÒJMìѹx‰p_ÐCkãÁY¨­…XðI†ây<ÛR¼î‰´½­07À7ˆ ¬¤™œ ´Íó«ó:3¬êi~ÕõËu‰áyÃa–Bàð`íz![Úê /~=K(rE1–”9J1f=ƒg´ÊÛâÊÙ¿˜iT!œ%w¡êi’š®Ý%H›÷ ù‡X/Ü–ÅÛT~FÔ»ûË;0 èÑÅ—)ÜÙ®–êì 쩬ˆ*Æi¢¶Æä™÷ÚÁjÎS6FSä Õ냠ÏœqÛsÿ¸À%\Íé©>T”Âývº+G] ë Ó#aÔ¸ZLÙ•J­îE «¤\-«²—Š­µ#èSÛú( ¨Yñ”íßž‡O_‘²˜ùh›ù…·4N¼ ·ÝöžnÇÌ×~‘I‰˜=—Xé‰ÊÊMAi³×L– Ã©Ì.[H€‰öü z´úÊ” ®¹£7¦VÕ¸cÅ›'œ˜_ŠO¤@ƒÓ:ð›öùIÓSØô®«‰Lçµõg_\ Ä`ŸÆh]Í=>¢ùt‚§xr°0¡èýEqÝù~Ù¦çÔuSd¡W>Â<ïïG¸ã ytP$åÅù¸I¯ÖF….àL÷1ØÊ4Ê®z¡6 “Á!¤Ž‹Ý]¯ãUQÿpˆjÖ19¶]|7l„X0S‡¼ÆQ†dú³êw]W\cx£æ«û«×Ü¡²ß-›’[9:ÃøF«ã>vy£¨ðùêÖ  Œû”#˜a9oië'¬Ôèºf÷µwÆo…ˆQÿḭ̈AÅ¢JßçÛŒÎ:Ec:èÚØùP@ø§géìÑÞ¸@û9cû»˜kÝå{Š=ù"ù3F·¥Ü«²¥X0~]@{Ûïa7’ ÅK\ÑE^Bm¾ÞÚÉ\ñSþ~r±#°tS](°Rž‹Š¹`¾~£$ Ä[a3MQ£ Ë ÷Ɉ«¹ßûUÙ"©æ »BÇy-Ááw‘êæTУcëœå­P—ݯ!ºm½)•Ÿ¤%„m®nfÉ…˜è mÇäNá´Ö3”‹Œýtùæ$F$.ÊçžsÑ¢*žaeÞÝ5&#mµÉ¢ÞJ ÛbFÖí}Û!Otu¼´°É#]h¨ÚË[>,‘U¯<ŒÒ°0…TóJþIï amòq«õµÂB÷;:È.ÌÆí~Ð+5¢x¿Uì[>Îr å¤'uû¨B[D®U¯U»¬f\Û‡Ü= ÍZoSùÝícùÇÎÐåµùÕiõŸ½9-Ì Ê&dõm{aHÿVÑÿ¥Vú€ÊŪ<Ý<\÷. Èè`b5a'Kšèl,ZE¬›¸ý€ðd?™U•ï( 竼ä»- ÷ï,„òx†ów—Ö‹ØoÛ!üXR;|ý¬WÀ?É#d™?N–¡j¦{yH€²ð3½åKéÎu¹†ñ^l¡Öùä;Cù(Çõ!®4Ϫ³b[óóF”³DM³:ÅÈò«ÛèG±g©#?Š—†Œ½6–z„1•ÝÉÍ/ISÚ=EnÛ8s8÷h‰¡õ)…°}™F¶ú’ ^Cª# {SÖp˜w/o»Õ» ÕËùý3·UßÀȧ’3û2<Ó»ÉU,wNC;P#(0zi4"Kyðçb嘽ñÍH½ô&°ç^g¿qøÝÏPO©V|‚`¿¡á4oæ9KBV“ùAÞ "‡¤Z"í™°HÿvX¿«8,ÃÉÞ—B'g(—¶÷l5(^ÆžÍéA#:Ëì,×<´üÿ!Ӏ̀ìMÜf BÙ72‡K2¾ÉRLPQ/ä9#ºg‡B­fqÀ%áñv 6¥AS€’4Î$Ê–G‹CBtz> ¼ÆqGµ' éиՉŒ~xlSÎÔàãF Ñž$P­å0sýÊ€žÜÓJsÑ‹è6S8ÿåi‰Ò« ¼em@ñ³˜ºhF°­Áz˜×ÄŠ!Klšé8ô•ߟ¥™…ä+Àß)C¬Àz)· bêð\l0RØÅÇî‹ri—kyЉimFƒ-ÔPRy”çmðZ¯0†cg'ëwV…ô·VâòÎB¢±º®1džá©*Í"º5VÌ8ïgÁ"®Òx•,ãbpáÙV“Ä$>ªÝ™cyúañNvÛ@äP­ÑÚü1“þ“ÝY*]W±Ù„ƒQ–Зæ‰> stream xÚwTîÛ6€€¤€ #FÇèîî)aÀ€ l86Ò"H "R’Št# ’Š %! !ñNõÿý¿ïœ÷=;g{îëŽç¾îxÎÙÀ˜OÑnQƒÃ|‚ü )€²®‘愈@(Ò òJ 4ƒ <¡p˜Ôè•0ƒ©€‘3]8  …r ŤÅ¥@ €$ù—!!P{Aºü-8 âI T†{ø  Î.HÌ-œ\AIIqÞßîEwê†tÁHˆ;æF°Àî… }þ‚SƉôðööæ»{òÃÎr\¼o(Ò`ñ„ ¼ Ž€_tz`wÈobüÄ@€‰ ÔóØî„ô# àu€À<1(˜#ÀÜ 0ÖÔè{@`ëüaÀ ø³4A~Á¿Ãýéý+öÛìàw÷Ã| 0g€Ô ÐWÓáG¢‘¼0Ìñ—!ØÍŽñ{¡n`{ŒÁïÄÁ5ECÃïOvž¨Ò“ßêö‹¡À¯0˜"«Â•áîîÒ“øW~*PÄSußmu…Á½a~œ 0G§_Q¦0è#DSåO Düæ ADA ¸„$òA;¸ü nâãù­ücòðó€{œ0 P'æ‡ØÏì (H€ß*þ- ¡H€=Ä #þ':†8ý!c:€¢V Ìà @¿>Ÿl0³å‡¹ùücþ»¹¦–fJ<¿ ÿ­RR‚£~|B Ÿ( (() Çþåoþqÿ€¡æú'¢&Ì üƒ¦vÑðús&8ÿ\.À¿oЃcæàügì­A¢ Ì—àÿyø»üÿfþW”ÿeìÿ;5”›Ûo-ç/õÿ£»CÝ|þÔc¦…Äl„.³°ÿ65‡ü±ÄºG(Êý¿µšH0f3aÎnê©EC  H—?è¯`»Aa¸'ô×3àþK‡Ù5WÌSâ‰éÔo³Jÿ¾RæwüµsB¢b0ö!Æ4#‰ü1ËéAÿžk€? ŽÄ¸0ôNpñ¯~Š œà(Ä/ô7 " À¼^˘† ]ÿ@@Äþ[þW.(³Ÿ¿g“è_òïÇACˆçfàÒáëÂÛNkïxó­ÊN×ÌŸrñùÍ!ÚQçd„é\Õ١ˈŠéon-¬ªr+|dºôÛni ŒlM5|ýÓÿÂ6Ùhbí5ñ‡qÚÞ±¢mÅúw÷ˆîò™(¬û_>ò7 qÅmÁîÔæ?BIRz÷¨£ëß•ÍG̬®W‹i“\”MòÅ›ÆY‡”¼ØçLÓ± ùîÝà¦ÜG“¿?þ1E™7vͤ•ÌC°/\ìg¹"”p6í»Xa"äÙEÏFoIw÷˜rx‚ÝOiã‰ÖíY¿—ÅˈáŒiÚö‘Oîi‚nœ¾kzF§ˆÍïØcRœôt¸Ôš±qË­)î%Ì)"9û ZËhÍïâ-öž¼ú)Ðk}7ñ:¼Š©ÌëöÔwwil/¯O4Œòm©Ê‘ — ¥Õ ãd֤ݤÞë§ß*üdÌ­/ÿV²-lyîÓJÆQ eÞiÓÄ]¾«HüŸ¥§Þg: ,O äL³jÉ#P‘ÜP$Yßñ­ù˜–4òGI5ÔDî–*6⃭-ú®|ê¶‹ÖŸ‡¨j|Ô³ur.Ó²"’ô$ΟíHm¾-ºµî®,pŸŸ×0Ìðóý@²Û͉ԞxåýE!»®à”ðÈ"ùÊkZ•QüÜäÓÊ}¥¢Œí™kžï'tÂLé]éÜ5Êoª=š7q´dÛ8Ú¯œôÏ\XoF»}¬ÒDÍ¢;RœÕ7ü± ¤vØõ`AûlZª†ë{>_—ÂD®ßË•zøp|a~výºÈ?1ÅÐ÷â>Þd`Ìêèˆ=ˆµžc/­V&Ái fã?K­b Lñ‘½Šp†1†X>‰š[S¦}ñc½òe’oÄW°¸Ýñ“øu[K™*çœËÎËí‘ʆ²§‚å¼¼  é¼ÐGéQ9¬T‰î x;óökW§‘ÁÝgät%¤k¥€åûÔ¸÷“"Í(\i¨?ð „Wm)L2Íù»Øc)‡´ù†Öh0Úâ•Uá@y9fÇ 2Ť ·ª¶œN•ííÅÞ“dÃí²üN5íècã†dL@ÜʧͣËÊ”‹£¢ÖO‚o ¶[ïr"ÉWiùU}Í9£XCuõ†“Å>rϪJÏt^+÷ÒVƒžøˆ–,vr¸´ø8×zRÜúÈ/2V#ZÕå¥Pgríi›¸]áz\Ì*ÌÉÙÐ_;}žÃ1Ÿü>/n˜¨n¶¶R+º8”'kƒ¿i™dGQ¸›Á½Ž(N²Á’Kž#ñcœÃú‡ï{ æœ’˜KS?‹ÿ -Z³Ó ¿²Äâ…¡ ƒÝ«äR¼^]=æq‚TÚãîO÷½7¥ö×ë¤#•Yè²Sylœ“k¶¨,ßS<¾"½„{z—¥nš†pe7IÄVõƒc>+>÷yÉ¡{ã{†4BÛlaƒsX!™±ô{L× A±ÆÈ¬AõœñŠ›“ÚmtâQBN9•ʹ  uwA”|hØíi‘hö'6Û_?>­v¹V ^ðpߢ"l6¥¬&wiΟªËë¦gó.¶®Ör$”àé2ÎW•-éº} k2KNÍËOVÏä©Z‰„ŽUãšÿ6™H°&ÿŠkèq¤|„p€¿ÏÉNÜÑ×è€C“$óà}«~˜´š&nQA“‘ræWís>§ã‡mÇ» ¾£„¯› &ÆÙÛ;.«qž<+Ü©ô¦|ÙÕLËäÖ=—œw»eU¬¹.–€xÈàã'\¬/çR¢uç2eÏDõØ^Ò f¸V’»”¯÷Púß­jç²ìwØ[ ™m‹• HJëz€3ì]ÄA½wÂר&õ`Fóu²x2ŸÍ¿ôøP祇u£?ÃG"=ð0+7òñ8-µí7÷÷*}ÍQˆÍšz—Xos”m÷ê´Ø+ÚÆÙFâ³>›»åÍBòÀ6âÊÖw[\1ÚFi-AþÙÝùü2Ü‚h{lÛðëFñFøàÑ֘ǂ:ÝÐërOnN?mÐÏ9§ ©éb¼Ïlµ:÷!/ÁîlÀ Ïé»À'£ó$"–XZ‚@. Í7¯›Ëªl¦å™Ö±¯Ì¥·ãr&µA•7Å^³Í—¬Ç&U¸Ê¿ñyís%ò¸•JÿÇâÒþPÊ#Yeu6Àþí'Í ŽsݵøM‡Š‚†¡Š|þËÑö‚v¾•µ± IOæ_\XZß*äïCì•ÞÌüÒçÙ™ÉòÊ~ë¶‘Off&;¢_tËE'Ëxšk«ÂWLw]ösÕ G‹¾þÆ“«^Lý‰ü„xÒÙnMÔÈÌ®¼Nù>hn÷£îìý[¢Á:YŽý¤lÞ™E—Ò·ßÃ\{ç¶•T³CDÏÕlbÆc}žÀ\üï;Þ¸MH0.ÀÙÈ~õµË ¦XIò•ò5:8N’øli‹(H÷é„W2›bLÿ†öÎÔ7º§ x^w©5xã¨å&ÅÝåkHÃaáQém>D¸èÈØ*òˆ­k½Ñz%ùum¾3i—&Hèä¡ ³€›PùóŒ7_¶:EzÓk»œ¯Í°Súˆn¯qQ/eKhæj9Xeïè3]ä”DL%˜<Ù:¡YüI%™sWe’ssÈgJr¯à©'d–þqŽ÷7£H ñEæºÑx²gJ =2íf R¡^‘Ói÷¾Æ}çþBV¥zà( c²ÄYDQ:ôs^ZKÚÎÑ…sñ<©zZZ²XšøÕ-Á #–™x'X%ŸP¶ „«©oý¹¢y¯ˆ°Ì‰onz㙊ý¥wUtÐX°ÐcеÙîÂ,°Ö²*‹DöCÅ•fÿã¾×så‹o{5¡ r†ŒöÕ ¬ð¶¨K}9<òÙÛ±¸MØë?Ô¶Þ%ã›%Á~1-ÝbÙË;Wd:8…ºO.Ý“tY/‰ˆoZ< jhË.Ÿ`Ïß© Þ‹8»ÓëÿB¬%ÓŸi-3©?Q=‘Z3£É®ÇÉõÑp€²ß’=‡#ùì—ÂÅáïíñ4KœïšæŠÞƒWö÷^–*¶WcÉ ä½(ùÎõ•V J£×aßÅRÊ­s³z2ô¦ŒZ–ø{<‰ÃêNë‚ín3þúìD¸µëý"Bv[þÛ*<Êç½# bÞÅJPånýg$µ”äjƒÝzh›‘<ÆÛoxˆ,,AУ™÷ú·ð"­,gBÓJ¾<îÈô?=´o“L Q:Q{ÉK§ž Þ½ÝmF`1³òsy—ô nÔÝ /9!Zs֗ ¯Û]¶J0Ñ5©&­»×³ñïçú[,/y‰©Â¤8óÊÛ­K{¥ºÐ&…½ëã«Z‚#â…ãøhdúä ìF¼©îÌJÉ–¦_è‰-n<™ õT^g’—FÅÜ”zø*î=º‹^ÎêÞ˜.vo ­HzýßÐò'š(q;šÛïöXÌt`¤AdÅmá“Ñ ZƒöU‚Àöø—w ÄK|f:¢=¼]KL>Ïšñ߉cí^Ü`ª[`Ž®ýHçtÚ FpV_ZÁÊ1芒7Rù7ÚkV¯.3 wôØ‘½RrtªúƒZZ{Zø×E)– ©e›×J|ÌX>m“ôÓÃ1“Ø«ùáQ+3ÕŽßH)|¶ŠÎ—…‹VÒ$qwqÞÓÂ6xöŽ£º¨Rñ‹ÉicÓ¡24Kã»#û§""6÷ɦ[×S:Nî=•¬’4‘iŸ7øL{ ÷ùãþu•ï3œ'qÙÒ3·6gµè^îÛ¼8åî+œ}.¹J…‡<£eE¸üÌ¡: !ƒ³f–¤/NòøJÀdåa'êér'8+ g{†8yi³^è‡y“lʈ¨Áò™×[|ï˜Ý9§éÑÌ|½õ¡ŽÇĵ ~[²êé¼ùò€¹õY”Wÿ-Ÿ`EQš´õÞ7Îß±œläŠq]÷¢Ÿ•ùÌ3ë%ŠÆ:óNI åÄfEíªÅ·Q¿¢¦Uív«¾aM)m ƒ¼Onp.VDd±7=È: Í ¥ŽÕ{ql6¶Q;Ÿ[4¦Ø¯DêÊÃŽóFa€clâi„ç›°ˆÖ[éVÂÌŠ&ê˜GÇœ¶¥—Í9RßÚøç¤¸vCi­&ˆäñì¯ïøõö_øw½7˜sï xÓ%…ª^aWd1-ËÕnb=k‰ÞÖ EÀàBó÷ó&z†Àg^í!*®¦éGV]“³< ¼Ûåu3oéèx‡poè“|.G²áSip\¼«U&  l¸jŒMÆ»wQØ=íÏ[è%Û²°‘ͤU–íc'fAfÀݼ~”ˆ›ŠXê’ RûÁEÒ×[õ”™ oˆmWÚ˜»ÖLò¿g/å5–:â]ËéF u·<Ð{´KÖm¥7­žÏmùêǽuiV—mñ¯¬BÒÕÊ‹…¡?k…H½•)«’Y¦˜z­|TʵúyYGìƒÞD[†G™q‹ÐËOµ¿HçÆ&Œ§ù y§KŠiri²±1'÷L ¼<{%Ñq Oá4(ô1Úên 35~nGF.ÃtFÍìG“£þb¼ÒƶΩZR¬yó~ÜmÃÄeõ„ä4ýáŒl¢jÁÁt½Ð©²pè°!¨¢†FˆÇa¸Û:I[H- ÝœŸô1ù,@ù÷ŸP… ÿkv‡ðw{ñ‚?5ûqîê´b‹~Úe' e–AèÚ¦Ö¸)OÌ=ûJÌ0€O3«GÎú¢/)¡^„,M΋—Gwé@pëk—‡G´íjuÂN%hj|5’ž¾ÚVq™Ôì\Üa)•(ü8pÊ™â³*ëú¨ \]±Ïß%Hþ%ûÇ”4×Ì’Ó>ï¶ØmÚá«Îœb-8lîsé‘V]t K>Š6—éÙgâì@Ùâ1åqáp«¿ Ä%öÂCͳsý†¤Ä†a×4L¹i> œÅª4Ü]?å:+8–#—ÃD£H]HƒÂÍ‚3íx7޽Â&÷L¦ü–¯Û…iô;æ/÷rlãd¶GçTvxˆJ®±—\h–¢ë„©C©d>­Aù·ö½5¤j¦FÙÚn©p†4]¾-¯Ü-ŸbÔ†W串åôS–trKGë¤XÍÕHØ ¨JOX'ÖoPÐáŠÄ“ú",ån°²:çSŒ=cê¬áƒ×ÖSâêq•d4ýÇü/››å߯6$&¶t9âÎÿ˜/ܽêÅ{&Wäa|tËŒ5µ%%×îd7FÆb«”‡¥1{ëudŒù(‹>CØËÄJÿ9ªð\žç±™hì4ãØöU•ÄJqÅZ|ƒ[¼=xÔó R4ÍÒЄà]PJ¹ýà³®Þ;-<ꮆ§Å× Cqű˜åDòtI€ªHþ€¯b寙y"bø ÐnFcÎòõÄCvÀ/ô–¿Ëï++GÙq=J—b#Á¤våûÛôwxV¡Î‡š~ouõRzƒˆìqïBv"ÔäI›mìQ93^Ý!åES“¬„eÆDt•LŠh<ÀM+½v«JÐãå ý`*ëù"œê%xoóðj–ZIâK¬œËù}¹”!Žw„ŽU0t›^F+ôV¾«­âÒ³Æéú°šBOVé¶Þý?F’±±…Šg—ºæÕ{N8ú3ͲE\W"7)= §»› Sç›+)Jp–'wXV7Z•Šz›4ÞÕ¯õ›!YÙbcðñÏ¿¸Œ½¾ŽêYªéÞw~f³ (A y7[§ÇæWí¦r#9õCßÁZÂEmV%t´R=[Òƒ´°]4 Óu3Æ“³ƒ|8èoË ¹¤¶ Iºìß»= ¡Þª ìÜRúÒJêgZêyÓ6`îb²caDžö´­Ö6&¦ù~[°ý:êº!fºMíµèl_ýè3};iì0'K‰­J Ü»›}«{VEC£Ø(·®û~½Žë®¯ü5È(¼ªºœå4IólÚ#›9Oµ'z|•­¶¦œÅ7V‡3=-¤¹üvÌë[a{±i×2ZÅ´É‘ùLWÛ‡rÝsÊÕú!ªôQ¸ï©_ŸüYws¡¥ÜòuA^¹“BóGjqË¢D‘ö»ù???—@a *”)9p«…0E=TʮşJNÌ0G{-TžŒìñšm.o?¸Wÿs]ë©1Év©»æ²ôâ— ˜à ÙDÔj Yšƒ®=-·sîwIĘ’°ÿ©w5võMë¹ÓÀží`âüTV¨Ä8ë¥+ûÇ®¢Ôf Õºµ”—•8«î?_n¶a=,g§b-l÷ôøü¬gøYçG’ ~p|ÒÄ•áH¿pRÿÛ ^E¿B ýz0xn;ÈÕ¦5 $ + äGÛ)¬îÅ[ù^b¬™"±ýKl_Û^9˜¶^ÎÔƒÎk7“Æ=ç(_>¸:I?L#й™ª³–".¡;A/(Œ¥ ´c¯ÎqlŸ`‰ÅÖ#NíQú¸Û6ño†goòXpú5þPXP endstream endobj 302 0 obj << /Length1 1448 /Length2 6533 /Length3 0 /Length 7512 /Filter /FlateDecode >> stream xÚvT\·6]J‡4JçÒÝ ˆJ:Àà LÐ)Ò "Ò%!!H‡HK·€¤´€(]rGßúÞïÿ׺wÍZ3ç<;Î~Î~öYÃÉnh,¨d·«Ãa(A ˆ @Eïþ]€ˆˆ˜ˆˆ( '§ ÿ’pš‚H&óv„Â`ª ÆMh£¡ ()”’ˆŠˆHÿåGÈTAî;€ž@#I8Uà®^ˆƒ# sÊ_K-/(--%ð; äF@lA0€åvÁœh ‚Œá¶0Êë_)xî9¢P®2ÂÂB ¤á Ï+ð€ ÷ÁH0ÂløE rÿ&&D 0q„ ÿ€áö( ÀPˆ-†Ä av`s6ÀXK`à †ýá¬û‡ƒàÏ«…€§û3úW"ìw0ÈÖîâ ‚yA`{ 0P×By¢ ˜Ý/G ÇăÜA(Èãð»p@]ÉÂðû“ÒqE!…è/†Â¿Ò`.Y f§wqÃPH’_õ©B`[Ì­{ ÿn«3 îóùcmÙÙÿ¢`‡v~ƒ¸¡ÁZªz` ’00 !"""% €Ý`O[Gá_ÉM¼\Á¿¿aLý~>®pW€=†ØbÆüø Aî` ûùü§áß; `±ElÀÉ?Ù10Øþ=¦óˆ'À\#< @ä×çï•%F[vpÔë÷ßÍ606ÓÒUçÿMøo“²2Üà#(& •E¤DR˜…ß¿³üÍÿ/î¿QCäÏÚDþɨ³‡¤ÿ €¹»¿h¸ÿ© ž?Ç…ðïôáƒ<ÿÈÞBDBÄóü?‹ÿwÈÿOó¿²ü/²ÿïzÔÑPèo+Ï/óÿc¹@ ^Ú1*F£0¡ÇÌì¿]‚ÿb=°íòßV-3J0èß—AªC<Áv†”­ãú«˜ôP lGB~=3A ˆÈÙ0³fëŒyJ˜Ný61£ôï#Õ`¶p»_3'*! ! /Lã1; €3œv`Ïߺ Áà(LCÏ`Güê§$ vCcnÿFÄ¥˜çëï=¦cÂ(Gø? âÿ'â.@ØŒøøWu¶h3±¿Õƒ)ý¯ýïç öÛ’ÌLÁmeŸ9U=k>­Tbò\’ç\{ø’WÐgÑ‚>'#Læ­Èxºˆ8VJîû@ñù‹Ï‘â,Û•Ï׆°Æ$£¦ ßKë„û£kM$ŸF躇_}Uªîb!f4Q\÷½ró5 rÆmÀnÓæÌqCß%3Ì£>õèÔð¬î*™Z3Z¯Ô¹qY2&ó Ú"¨h‚3×&s’žƒ%ÈBÄGµïI>qtïú—Ô²¥Òndj®  ²šÄ2<ž †Â†}ϯuS™~ô ÆŸjq#m˜šò§ýR˜| Ûp]“éôm hëß”+ ½U®4íþÒÁÁkâ˜P8l¥BIî‰ó‚žçþ¯d÷H^~ÍÅ(Ù/.Xøn)lÈkf´p„ pêÇ4ÉÞå¶9˜%Ò  Ž1ëH~ŸdÓc·DjÙ¹S^¿ßxaQ€Ÿ#sê:–ƒÕy¡2~¬×b«HðIYôÜOq‹95ô÷[§»n Œ¶û?‰8áHßÁÕÆ§ˆ7»;!D Zji<µ]m±—Z,ø!:=Ș0›ïg û¹ÑMúºCñ€˜Ë“–†…n±šê®#É3ÚPó¢n`Ϥ·?žœAá.½­Ã©áÊÛm÷é·êýéÞç´œOKN)Ÿ}¯Â R„Çmö‚+ÂZ?]lo›—é®$Z5Ôw†ÞkºÇ«Wþ>$:ôË="—E¼˜bÙ ̉äå~v@K3ã!š VÃ`ûAñʉF^–—~z醅}›¢#UP CÌÀŠúÑÐVÙ·…µE÷Ì)i™% ÚKä'%p©ER™µ2ÞÙ9^J$~“Â^òo 'Ü4ËÂÂa~=›<¼[HþJðAˆjû¨‹ŽØPÍÎëgÜD;g á­ù +ÅÔ¦Ãü÷g˜4®\³¼To1k»{ú¸RÙêÒáå=š7?´ÎQ1vÒF׫oéé;ðcG®Â&xñvd›õ¨òw•õË4ZÅ©Bȷᤸ°›¤†ofŒ›??šSÅ7wþzçÐc¾‡Êhï8 ~ûÀŠA!aÿcߨ½hd}Vÿw©“ãˆÛž»°6;Z\c[Žž8Øö9×ÜAËÔÜ/¡™ ‰„¨mº›¤¦òàå™Xíé æ9+Dïû–6ž(´,kçÃ;¹ìJ¤ìx‹ˆ_¼l3ý€ø_Ué&β̹KRì=NäÓ·ì‚$+}w¥ò»r‰;¥Ò®2ÔX5ߘ¸ºÇ¨†X¥ÄÓtv²E§Í‘zÞyùn—ßz¸ê™˜À».Õ^!·Â4–”gÚGОë1…yÄ—E,¯ISò¥†¨.ôf£Þn'eÀïn´F^K Uˬι¾,_9ÝèN7 ÛÏŠðoV6óPß"j9Oš1RCÛsz~Øäqá ÂÆV¾Ácƒp{ìÆ€Æ¶*Õdqè™éÄ¢å*•“”W.óVÆH‰Ö»y7tròqò÷ oFÎ<¾´#¬OŒó…{ûOî‚’LÏz9¹á³îDcÙËvŠœY%ŒârKx×#“¸´sïì±ÑPNô ,õÌ9[Òr} ðõnóÍõ=J㋃”@Ã~Ûë?§Nñq3c&®àÆUìY²Ã;…AYê}®8t:U󰯻҈§ÄQs&ãÈoI§]?òwÝ„¶[K)>§4c~ÐùºU¸@ɶ‘o„ëµR»…8‹¬þ¸O ›øõnî%žÄQÙê{ÝŠö9vS ¡­™~lå º·§«Æ©¸|Ü÷Ïå²ÈeZûPêØÖ~A¦‚ô{ 3Wiê rßWbYdù̲›bž-´çDRhÀ£Á'$j±ÓªJwvÃ/'ζwÉ1­éèbX!ÿБFL¤(ýY†-§B}8¢ŽQ˜ó‰€ ]i5$k‡bÝxi ÄJÑ“‡ ίÇ矛­LfÓìX£´3KiÝzRÛ µ³rŸ;£{•½ªnó—T¾jî肾Ú|Ô<_‹HMû|´Ö}ã¡ [¥%¯Q å´“=Œ0®ßÕ1ˆb Už*;dÿ9úø®Ì¶€OxU•Ü®6¹Z°¨ùÃ7ª>ª]RŸ›X¤Û™¸µ²NFÖ.n‡N)2£0þ#|<é®adÚ5ê(ò§XóüSu­kÍ¥8Mæ'‰XÇiî­É__¯ÉqŽ Ö½°uBã"ʽô”Ï`ì-Æhg/w‰·sªÞ$SEŸ™¸ÅûN‡°žù’rM7ö¾¯k¼Oo+æÌ5Þ<£“sSÜeˆôÀüÓ{ó¤^Gß!K– j‰ÕÅiíÚÞ˜Öޣɩq‘r²É/Ù?VÚ­I˜=`Ëm>[ÍFJuø0Ü¢× IZš/¢- ÕHÏ*Éà]¦™×ukÍâ2yü²XJ3”Q)e’¾‘¦ÅEkçÛ˜ÌyÐl¬Bûõ‹y2³Î”GiëŸhîM3D> &- lL”¹ ãSÔÑ%.ˆ)LÇu§ù·âOQS¿bBÆWfvÆø™fHñ'^¹Ý] ›w^þüú;{o}öÇ]?O€œ”Ù¿`ªžŒš­,KÛ…_Ù§œüKbü¸h(l½zYï6 Q‹»…Kí™àr5wva&9Y¨v(•W­²Æ/£“0±‘ôvùlÞ_ÝOß¡H¤1Ô¸ÎyŒ›ˆ58TüüÝÎÜðÂj×\0Ðk¥úÖÂA)Mø@G‹ w½¤ìmÖ€P½ÝÈ>ˆ·ÔÕ•,m‘üm[ñCsúÎìOW8s­Ut³ ÞHõgý[ž›öÚÞ_¬Xo¤×p'WWáìבÞԈƅ‚ž5Óõçí=¦"› 5«Ï=¼2cu±ë ~ =.üÅ7÷pÜt¸ÅÄšŠnž‹ñŽuz]ˆ0õ›zHcZcÙ³gó¦0NGUma…úÉ¿¸úž_BLÅ­OÇä3·§‡OË,‚¸âTæéƒz+º лôG:-OJ*ûÑbñgG¸ÂÇès*&«pÊè÷ô ¾ôÆòUVvôeˆÓ§°ÐŒpº"n>ð}Ç5Aò!VGšbÙG½x÷§2ÛŠ8òáã.Ïs¶}È{úHõ´gúõè•äO¤Ç¬&{GDñrÅØ’VÓÔ—?_Ý©"ˆÞ7gN´_ÚÚyq®hŽœrÆ 8wÖnÚW~clP2 {¬mÁáÒ˸¶çíÌ­ÆgŠyþî'~Æ.~¸ö¥ÎÞL¢/Ok¬ÕC…zªÐ+ÞÇ…ãdÝÚ¢QF¹ Tñ8¶üÒÆ|¿A{ýnQ2ý¾;VàÐPfÕi ×ï>g{…q O -Ù%¼ÁѲ\¾î¡zdô„§ï;²,Ž³ÈŒ‰ÔòÉtáûΛBWá£úYL1\ŠO°)ƌӢ¥ÀùýG5/¾W†öŽGÑ¥Ô&Ûf¤ÌCZ²nôÀnFb·b·¶ìq°ðý,Æõ¦áÑçÉê¸(ÁM}²—ÆCIÐT2æôB^%2ȧҗV¼¨E•ODcƒº@„9áØ¦‚JЪ;޲ß\n—Õ³J°ÙÙ‰0¢ÅøKئTlƒJŽÌÆÉF£&|mÊ–²ëäµË9¤&ᬕ£~­QóAÍÛ>|‡ñÙµì„V}[¤²…ï%»':µú¢S]»=pÆç>Æ!ÇÌÛD±š#ˆ£õ™ãTfl^¼äχ¬4¥çñ÷EŸ–ÎÂ(Ñ~K™ÙÑoö£÷œ Í4ÏŸ«¾“ë³ÆÍ"ò‹˜iøÌŒSX‘~݇Û¯HºgìõÎÂæAŸ9îݵÛ콡¤wlqΘæFÐ&$j±å•È¡çßx“ãN†ñÛC½sÑ3F™+¬híÂ/*? ë%]öŸü@‚ãΩ-â˜ØkÛ*Oš6_Ó2@ËÂÃ×:m^iôVPÌó~r;9‹(I1B¿QHùO=»1œœDËølxoª£šW~Åa¼yl%£ãæ>q¦$«µ06#Wû¬ƒ¬Qì7Ý9G<³Ó}1ÌE¥Ü/ˆº©·z•!DPþ2е÷%Ý]I]V¾“‰Åk‰ŸA…·ÙVn^]Þ²)'!¿jñ±àmh/¶rÞ5sÄ¢¨xÇ7õÛ¯t2Êu¯Õø”·\^3ö¸‘7o+ÐWé(}ï¶}“'çO~ÖE] ñœd¯‹­¶ûXD1·cSŒ‘õ±!ü#„‡N%œ-ݽËSÓ›·µlíÊÌ ¶øª§•äíA«dOÖO4wRÞ=ùL@iì›|Ä ¢e—2?ž2ã Rvב÷ñ¬àV{~ ºz\¸8¦,}SÒáC$̘œËow@]7]ô{´™Ù¤ ;¬ÙS±ÈbhÀ§&Îi=>ˆdäA-â¶`ïô[:’²0~ ÕQS,ûÈy‹ ë•ÇáêÂÁ.§©êÁ눲¨ØÆtÚбõ¯]öpYº"§'B¯Ùê’·yΤ«>¯\Ú³=‘‹{!lŽÝu Û ¾bk™i ÿž@Î[·ôº´ÖŽå´Ðá!ÔH¤;YEüý‹zœšæXº…?”›éšlìYb?MÃò÷oCkñè‹/’^ƒ ».ö4Þ(·Âêâ>èè Dd^°\D§/çñ³ǃ¾v˜*8ÂïKx=S˜OuÏé¬7û©È]³ÇÿÞÅë¥Äª"«ŒkÖm×þ‘[Óƒ'^ƒ$¢KD¹?ý¸kôQ²ÁÑ9?Oåp‡*oìÇÍÁ¿¶·=æ/ÑéžKŠ‹TïèB…xw ×yßw 8³ôÈ‚vH‹}હa{³”&æÚ뢓«¾Ì‚$7¬Æ?ßýÑ6uãW´Šè9®Ö›²ÿìCF‡àÔD¤Ü)ëšQsÑqÇ}£÷[EÆn@ψB- }_¸¹ÆÓVKO.¶ÁdÊçì—j—ÅÜ7/½cÕ]RÎS-Ë#ö?»˜tø ?uLtšE&¼äéf­ ºrÏ@¼gd•ÉuÉ£gH€3ì·^ûOäÝ,Ý|› •]‰:™¯žÿÙì}R}襥˜Ën¿_§zX¤&™?My/xˆþ‹GFNš°uPÿ#ýƒPÓ!Ý­÷&Z {×3ÐÎ’l݈%‡âFÐó0b:”›Üņž\ÅO…sô†¸¿£ÈIãúµöÔ‹ÐWýù“©•W6w?ùJmuln[S'Sub+ýèy'Š”WÜE|rŽåº[› c‚•Ï´=¹ ‰n¶ÓQÕ·Éa«X é¿ÝÄ%™tT-.½øf`üçÑàÕ—Go \W˜K¿ÎâNãR¾½ÿ`xYÑ4ú°¥wÖç]@¥}|T28@q˜Õ†åÃb³s´«fÉï^z>P7ÇæË°¬Âm`se5¬}@íz§¤îjE&\4ŠÒŽ¤Ë§El…ö¯n¬ÑtŠm…7fr}‹~…Wê¾SÝISNR,1\Ѱ\z·X M½€°ñõÒc,qð¶¶âaKŠÇþYÞ-pt¹ž^¢gH¦º\Ý\2öüѽ·O½iµ½Qrï-, Í%¶Ï?b×bÜÛ’†>²Ðk哦_jÝÈîÏ ?Í Úˉþåjþ¡`åRÝ…­l޲þÇÖïçË=¸îõ? –Уb`9‹˜ˆéÀÇɦW\f·95´$²}D [ÔµvÖP02•UçK^SjÃéq—š§¯bÃ*D“š1;f5ØtÅDá2Sr¡U!†ç2ñÉW.¿Z¯Û½”ÚÃÀùcû›[Ý'¶ÅúFÓÜK~ÀÃ&Ó ™‡&U¶Yd'éÂj#ˆ5®i»3c:¤|{™Øq"B4yN>Œ/=wú´£-žê9¶¹·³bþî!6ÅØs&\µ­´­¾w`ü³níìåÓ/Ìšm `qióøÌfy²ÓŒ88/üOUÀ*™P€„ƛْô,d÷£Ÿ¬ ùÃJ÷ðMpåwÛÙ~,ÍŸ«K2¾©™¹Ûñ5i‰ëÔNkÏdVÿç®céC9¯ÑBaÂQR†ݵðæ"¹ó"OV¯ÏºiÔO,q RÍžÖkÒùòž†¿![ ´'á b˜º]¹mã?èéõ5¡ÁAÍ»¼¥ÝáUqBvÄcî ÷ùü©×Ö-DX4"RãˆD³½>ù”õáqÏÒX m©¶Â‚ï۴Ѐ(–L+ðO"[–üã§oA½FŸ€ Ý”:4ÊoÿT÷ØàÝ9¥ü”³†ëùœØÍÖ"9E+Öv„ÖFQJ–Ùóé;@oÆ=kÎýƒ9šß÷™OÐøÒÏN2Ø…(p"rods±úωØa/´……„K¸¥$d$µŠ±¹7ŠðoŸ9Tœ…N>k[¦Lºµc¡R9~⸟uS+ßF豂˜‰tøØ~P´QËÛ&Úôª»çø´RˆêÂìãI¨Ð endstream endobj 304 0 obj << /Length1 2085 /Length2 14463 /Length3 0 /Length 15730 /Filter /FlateDecode >> stream xÚöPœÙÖ w÷`»»»»»4Ð@ãîÁ%8` \‚»»»48\f朙9ßÿWÝ[]Õý>ËŸµ×ÚýR‘©j0‰Y8š¤ܘؘYùJê|VVfVVvD**M°›è/)"•6ÈÅìèÀÿ/½„ èö&“º½™)9:äÝíl6n~6~VV;++ß ]ø’@°@‰ ïèrE¤’ptòv[Y»½eùï#€ÖœÀÆÇÇÃø§;@Ìä6:”€nÖ û·Œæ@;€†£9äæý?!h­ÝÜœøYX<==™ö®ÌŽ.VÂtŒO°›5@ä rñYþ  PÚƒþ$ÆŒHд»þ%Öp´tóº€o;°9ÈÁõÍÁÝÁäxË ÐS¨8þ2VüË€ðŸÖؘÙþ÷ï?þtš›;Ú;¼ÁVK° "­ÈìæåÆ:Xüa´su|ózÁv@³7ƒ? ¤ÅÔÀ7~ÿaçjîvrsevÛýÁå0oM–r°p´·9¸¹"þQŸ$ØdþÖuo–?ÕÖÁÑÓÁ÷¯gK°ƒ…å,ÜX´ÀÎî 9ÉÿX¼‰ÿ‘YÜ\¬¬¬<|ì3äenÍòGpMo'ПJ¶?Äoõûû:9:,ß(€üÁ– ·D_W àæâò÷ý·â"Àlî0Yÿ‰þ&Yþ…ßNÞì0`}<6럿ŸŒÞfËÂÑÁÎûó?—EFWFBU›áO«Ä޾L|&v.V+7€çíÁÿ£üÍÿ¿Üÿ”ªÁÿ©õŸˆr–޾¿(¼õî¿4<þ3´ÿY:ÀÿfPv|›c€öŸ±7dåb5ûbûÿ<üºüÿ›ù?¢ü¿Œýÿ­GÚÝÎîO-íêÿ-ÐlçýýÛ»»½m„’ãÛ^8ü_SÐ_K¬²»Ûÿ_­œðm3Ĭìþn"ØUì²P»™[ÿ5@ÿ=ƒ·ðv`ª£+økÀÄÆÊúto»fnûv•¸¾ÔŸ*ÐÛ*ýoJ)sG‹?vŽ‹tqz#¾üâø²½-§ÈëϹ°0;8º½¹Þèù,]ÿ8O¶·QúCôâ°(üƒø,*#^v‹ú?ˆÀ¢ñâ°hþøx,À¿Û[ ù[KÿÑóXÌþAozó¿×›ÎÜÑî­ÿ•prþ!±·ÿWÄ·>±Xü¹ßãÛ]îê þ—Í1пà[õ–ÿÀ7¥å¿ ë«Á·”ÖÿðÖko'kÿ,ÞdÿNöÆØö_ð„Ý¿àCûå~«þ_¡þ¨Åñ_ð­P§r¿Ù:½ÝØv K·¤lÿ‘þµZ‹ßáô¶PŽÿôæm·YœÝÝ@fvÿ‚ƒóÅÿFy»<þÒü¯˜íÍÃå_ð­®ÿÛ›ÒõíûGýVË?ÎoÓËâæùo–o sÿ|k˜Ç¿à[ žÿ@ö7ºÞÿ‚oœ|þ!ýæêrù+öÿ¬†¹»Ë[‹Üþ¼ºÞöæ¿øÏÿ&È dޏ¼àh.fSÖvW-FèÉ´7!4Kµ§“AÇä»ìÒîþ€ —JWõ9dÓå·XêpúÚŽíè é³ïqs=\DK²Zë£ß“I¢úô^+âÒîÀdÁ±X]?1“¦è¾ß³³Ÿv°-T3D§¯ºþ²Õ±ð…=µý*n¤§²¦8­XÃàâ9ª|³ìy|rX7&bxzÌs/´¹›ß³˜¹“¯¤ò‰ ˆþ'q…¾ú[ìñ÷ó>ëåšì®]”úøÄP7˜cÓÔ¾â‡iòx‹¾%…kK^Í‚…¤¹(ŒékLè̇ìYU`õ‡ÆÞ±å¶Ý¼T@ áÖnrMi#¶‰ ¹ NU«I –[ ‡-ˆø°ÃR|½í·v·¥M:Ñ ßLÝ+`ž‡,¹%'Ês|]—¿ ™#?·@Þó×xÁib†œ®Íö£%ÎÞ³Üûf[‰Ñ1“u®š¸b«Uý›tß*OkFd ä^C½ƒKQÓ.î'òs…±"Òã+ÜÇ÷òÙxÎQï„¡ .Ä¿N[¢Ò²w$š%î&iTÀúàfC ³4ÛnîÛ w¨VÛ\ô'­á»mù`®Pà¤8í'î™ ™ Á^|Á=Òƒ;]ÆþM6Üüè:…1Aê°¶ÍÉ«"•`gðM\ðÂG£¤¯?ñ+|\ ·¥Ën¬–|8F昉N‰ÖJkÇ"‚•ô½??JfùØ›:Tþ•Ê=EƒýõÚ£u}"ø9 rßÛí÷¨‚ùÈž%™~öäæŸß ÏÆn4í¾ˆ?ÛíË^ΕÒ2Ó—©-5U»ö¦3ݘÆ[»³²HË¥ºh1 ȼÆxÝXr†+èžU $øv/–×Ý&g¦¢„íóQ¾Ôï]d¨ˆ*=–}1Ì…¥%TÄŽ‚þQŸ ïC• =ÿ^AYþ)Ù´ï[ÁŒÿ‚wÓ—¾<|1ø8UBtn壨,òhÓÖ¶µd÷yeįgº¢—ôàÙ>Æ/¹ÕÏô*,äi]Hˆnl”v!Cc¯T(ý€øü…G'Š|q†/þ‹+A­w845µEêÆy…¸³ª£ Ÿ€Ò7GÕp´Ùµøõ¿Q)P›»JÃÂÖ±ËW;ÃÊ–Äi§åˆ¨áD{0r÷wÆwIý£˜¶3ø}÷¼ÅÞQ6ÙóßA‡DÑŒøÍcÙþ|íkÞq}>¥ YõoûÀ1®5¬³¤¸Ÿ71Að}w÷O*%6ÈyÃL:Í~w¥$Ž·8 ZTVc™šå+$ÊE1ýÕbböÉ^`…Óý#ÐÚË¥‚¬s^QY¢«í£;9j¾‚äÏxUtÇ´é6ó{A[M»Î8‚ÏÛFdëŸW…›7v^Iâ–¾‡Y…¥|ý`#$LÄV˜"gÏ÷@fú¨O¯•£¡÷YmÔ„±7T‹°ØyˆÌ*S$ x®Éá?a¾Øÿ 8R¶È7JÃé¼ÓJâªúV&tVÀ?=ÏTJ¸>çCBÊ–˜mµ†I­¶S­/gÐ ¨“j*ò²÷‹c–=Ù®j?ÄÄñ©¤PèÕDjºÇËÚ ùþî;îÜæš±’`NåCw}ýï"ÙhŠêNj§—m_­ï*ƒ GlöŽÍ¯@´k ãö*!ÑÍÖ >[á$ÇÊ”ž—¨WÜ­´·JÖ¿ÞA ¹æÒWpÖ~ù Z•C{eù¸ù)­-¯Û~x OÝÐSÞaRÝéwõÅm@ø/€-?R~dœÚO3@cuíþñí¤üt3§-©e†SlVŒ 1s ݈ìoYŠX–& × ßOÏ–žãå™!ìââüÏz¼ÉWì+»ÈL(VнÌfn¸” ^èÕ½]ÓS(ùÍXNëDzŸÄF ±|-K–72x*gIoîá·…?Óu—Ò.AŒ!ãc«õ#Dus7ˈO~§“À·ü<`ÕeÕ$4õõè]ìs]_`ya â –TÞ‡ãøï- iŽT`ðKj»&/|#µ/÷¹¹ª»°–òL‘C–ÿ¯œ£Üƒ;e_Â-ºÿ„?´É_óÎA“56ÉÉú(DÇ+VÓÛ±¡ð‚imR_­3·æ¼?Þ³F«Súœ Ñôž3Æ5Ád£#ûy9ËÏa3Æé5Ü2ØCŸÌœã½ýí«¯v w«¼&Í02%66“^Òšå}_uÈÛØ<ˆ²©Ó“µñDýÅyStŠ‹¿´ »åÁðYÂ[Y=ÁÞnìÀ¹."¬+Û' ù{Ü ’1ëKX­‹åÞ¯–“ŽÝ@] òyL’HÒN[XóM2’Ä8*LsN‰tꂌ±çpIú¤~u G¥|‡µ«Íâ ç(¾–|Î"y:EŒ¾*ö£=‚JgÞ"$£ &¤yMu¯ŒŒ‡ºÀC9÷ÅIåRÇ«“ ®}ø’²¯â2?CµpïsáTïxZÚM¿Vüèo8ºcëËQÁâu·•¥ÈB6dµœJ&ÿO©_I×4±5Ü™Œð¡éÏ1M}iµ¿Oµä‘n1®xÔwö†‘’1Ì-è]Óž’ë:D€{¨ªBSŠõ¯”…$½›9LñÜa£9Þ/6>­´ÞDT™/ñs… k‚ÌŸQÓö Ñê1³àÝèwjûÅÄ0ðˆM‡øs–Á}B|ÜeæÖ'±ÞO31+Å:,{$*2Âgc.P ¥MŽi(ù›aßÎã)ß+•ÝÌŽËÛ~ AßCo]©‰nC}¹ÇôPe5” ÞhsÀ È?c½É ¨å¤ÙŸYï’iê²D|WˆÏù æûV®kíø­=óý$§êl­Ïœ>ÛÔ²îÙÎÄ9àkPí°gõ`¯rœÈ7fÈÑ9³nÙŠ~HFå}Ôãl~˜=Ñ\kkBVY™5‡7·yÀ8ªí×— ‘i¶./_?ƒG÷³fÓ_ð ¾-›JcŽƒ‡,nl»P˜˜T¼c9>ä*‡;J5v£=–ª¡¯xñÜp„´‹±‡‰MµeñÙ8W ,ç<Û…_övz ’jGFDï&<×—l£à$Œÿâ²Æž…ΣÔC_9>ÕØ –Y„ ¸j<¼—Ä*¬d ¥o\‹Uê÷úÌÐO½MTf¡ÄœŸh=o[àóyݳ¯™!q"•Îó=×'§ÖÂ~!ÊÍÔÚ¥¯Ï‚Í$'ÌE%_H2–·ež|×Nx\/ª´÷œ)– eÅ鿯U×ûŒ|$KÍg÷Eø~™m L2¬S•Þ+'2Ö_7TÄNÞ“z®'à=båˆ{¿\ÜRóØ i… >h2*¬ÐyT«ìñ6éä&PÈc0Å‘õ5õ >@OðºªF4±ªµ2ì—kt‹:#ͪ‰‰ä²ï£ÊÝú±žvA³rh‚}x!˜š96ПGV§Ö!4Ê`§;ŠÓÕæbG¢òà%i„þœ+šxÙ4uD㻯Œ*¶ö=޳åÇ@Td«¼=®ðv¤U×I¤dý´XmÄQAñ’QE¾ˆ×/`ûŒ<ö×äYóü`¯J­£m_«×á‰M«Ó”VXNUµ£]>kÒÈ-MJ#U žðÄv«²ãIðàRLصÝÀ:*¼MŽ€×¯Ø—¾Šë¬‘´=:Øe2™+·ÚÖ%Ky#‚´ð7#ì¾kt`¶8^–4‹ÏzýCzlbV‚Z÷‹)cÖGZ/þ×;.Mß¡Œ™”l¢'Öß™íÔ9Ø­&zr1£vÖðÑ5ÛáDè ¾õ’`æ‘u ›XÐð!Ì×òàQ y^)„ø¥¢~ñFUÔ¼ :7ˆº»V.Òpô ž~LLÍQßWv£uø(ŒˆF^†Š<‚ø^íµÅS,=ÆÃËlø—ÊõLf– ­|üzÓu­Û0œLjØ 5ÐÜŒ |u áY¯Á7ùÝ(“V„¢±æ˜b¼üüîÏøj8–ä¼5##Åç÷iMÛåË'ºB«—ø¢±æÉ±¤•&’9Eœ…wcÈNöx²h$Ô'‘kùÃH i¯\d´kä G¬9ÆC‹«ÐØRMB—ñóï#æ;gî‡Ô¢\Í£§¯Ô¸BÂÅ 8½Þ™ ö”,‰HNÏ]UÝÿÎÜCØëÄÍ|”Á­å%¯',q›á“ºÓÀ§œéßõâwnÿü`y_#InB(øB‹Âs󚥜¦HÓB5kÂöØ© µ]ÉÍåí$ÝtÙ'¼…~n¸I#á ¨ÜJ7ÓÿK{&a#å¦î‰ ë:ùcu~æuÔ,À0µ¿ô-p¨Ï3óeüÈûÆG™œ#941Ÿ¨÷KŽœÁ ªT«Ã“S¦g1"vb{;§n© ÿ†ÒBP§\ïd Îõ²v~DõÂcjöD.«Z^Ÿ_ ú¬„¿b•­”³.é#Q±Õ±,»=SóhÛçÕ'´]‰M¿ÌÑÞùÉíz. lÌ$ÅCüòñUŒ*.“ÕÁñ]0žC’Э •0FˆXá|®LߟN¼Gá}k-O}l»í¾ðÓ5ðÅjIfý½”©:1ž'¦À]Þƒ¦´ÞfðDh7«;#žb$œfúÆhüIü-q/™·Ô$íÝGuyjΨ™â½‰IÚ[^ÎÍÇ£T©&@ìi3­™¬2ßéÏL¹w×qìÎÃJ 9ä‘ò¸N·„›u˜mౄÅE/¾c6Z$›0_/cUQø›Å_s3ºëVôD§²ºi·f= êèR èÂ+k}•’½m5ŠœŸò}åeÃèÎÜK ºÁj–¥#cO£Jè%‚5OGhªMS}ÖûèòáDí! ðžüЊ¨ž£Ú«®Q’®:X5û#:{k„V¬ú#¬–vðw6—­u‡$HRºÏj9¿£0–ê;»ê&:Ž=YR|¶^$>mÕàDÊqLrÆ[m_»2ÖLíïEágwê^=µPsEÞo³$>ù`¢Áê‘T]ôáBØw‰ðœT²[ªŸ‰È‹FâÃÇÓHÆD32¢RTYK=E±é€gçЃ<ÖÓUfËÌxv‡sGƘJ«u®*—aŠð¦ß~GaöU¬\p£{3Žò×N}²±õŽî¾H§Ä˜/ªlþ¸ `|jMÛî/dç¶ú ¶±p4ë}Ðï ½s ê’]f3Y ûVýùK"Q±^f&VH«+œzµT®¢d•̤=¨2oÄÀ*c¾çÍ]ÃL&§Pû7¹’[|ŽÑª˜<‘bògX—ÀXz9‡´ª\ ã52¹vÌb<\5í¤ÏÕ矢÷bõkŸ0Í£ÙWæ?j¡‡Ì LÀ‹Ç¦w¢J›]HÏW¥&ò^âA;èæ6¤Ë'A‹)Œcoé{B²Â™Ò 4ζ¿ß[†NГs?ñÆ×u­ÁB"cË!î꼚Jà/©´¨:p†(¹V¦”·*ƒypPtÝõwÖ1²!Hm°|Ñ_q9Ž> »¹wà^qÕ:iÄÂ~ë–¨«ÍsæG âãó™Ã©ÏúúHÔ@E´ˆx«´h,0ï3liR˜>ÉÓׇЗTª¸Œ/ò#±1Õ¶ÉÑÉ¥uÍÚàØ3úU¤;Ī N؃štzïh!Ú¯ ˆ$ï kZõ“¦óÇâE##×;Tø³kw]jŒã÷ù•Šø\Ë_>äN;‹†ÑK&=èe˜ Î ¾“3–¸œÅ7‹NQ… R(ðÄfÏý|8R·IülË.–%¼GMj\»~H î3-d‰u”Fwge#¶žLãa&®j!XµSh<Ï8K†Ö›ï1¿g¿„$O–XC/XYâQ 9Ô)¤4Æç¯Kl°ªÎ±ý ÆÎ jqLþÃã47‚ÔM’Á/f´ü‰Y}eåIBâžRk|œØ¯~¤˜ç Â\31Ì\´ Û8³Â pá¡ œ­Þó¢%80ÙñSâógz¤Mm)7åÄL¦O±©Q)‰ã‰d…ÅL~¥7êÚJ.Ü”6q·ß<+Aïs[*âNi©˜M™_¢¸u%#šâ_ Fæþ®Op`Û³ 9øL¯‚Ô³·‚(îíw±7Tª!_–Ãñ={\0‰Áqñeâòr1p>ëúK(s°F&,Þ(5Z{t¢aß´QW¶™Îf>ÙåB§e`ïk’eB›]ºCë,¢”dr½Ü¡„ ÿEõ1ÆÞ܉:´Ð×Ýw‰‡Ø?Ʋu¡py}Ií%´–ÕÜ^w² *£õ7Ë01l2ëýô Ô8I‡ö%qôA“KgxŽ»{’Á¼·$L\²4ÂÍ»•éÆ=ÏW¿ÓÑÌayúVö¾ÐºPäØÉT² ¯LFJG¥œ%‚‡ F°¹HònH‹s<‡Çâw' Ÿk£9áîw@SÄoBˆâg)ôõñ£:@‘â§±l_Yþâq¬RÍÒ‘|¼ÃäMh8£ ¤ZꙕÙc™Gs?l>'&†•¢ô ARÉG‰C^îÂ#û§Ï§®Ç‹(ÛœwãÚ‡³j("0mÀEÖzîÄm9ÑÏè«p8„ô2|InCÝ$Þ±¿ÆuõH“s6L Ü}‘/ò"0øŠl¯¶2₟?ª•4ÒÝ#¹š§’µ™¡¢æÝUÜ.…š7 ºÑÖGñ¢fÖÙéNoù&!µwóÞd ¯ªì½‘ Þµ«?÷+[`F¨¸ãUÚ€R”FýÕÄÂZj©(òG®6Ïhp2dµ}X*tO‡KW‰ÓÓÔ“'³X÷ºg¤´âÉþ»SA³éÿwæQåuwÉg‘så—aÇ2c•Ë}¬þû³ñ›Ž’¿$t“!¶ —wØðæóÛŠ†1Qú]Ÿ‘ȈäöpËŠmä)KàKÙAð+:.kyL1Å S?¬Bµ;à/^Û—·vVˆæ)”ºœØïVˆB› _ʼn=+¯iðë°ï—&¤ÀêPr’~ô‡7ÔK“w²å´ÛÌF¯Pú‹Òzá²L 7öo±Lfwæl¦÷aìüȲK"ê]-1ÃÃŽÀÔÕ! ›ÇhIÞ®±^:J­Vh `«À†¦_ü¶ßw…Â1}f?L^÷ö ~Ú›áÆH ¦cû’{u†ÊÚ{½ÌŠº¾u «R‡dB(¹‚Ô…‡1>¢ E€3´\½ŠõnSÉñ<ÙZœnÒ{SÒ²¼ØÙ>Û‘ˆži®®"’ó(°K3§3û«I\ 6CrVÔFƒáZaKÄv¼ \kf¹q ¢SÛ)ŽH†€ö™ÚΞ„é ØB¥ †ÞžšòÛ ¢ÀUGûƒÄ»È/ŸqÈ“>‰Tý©f‘$¨ñ~vĨ$]·]tJä÷­t@‡ð×¾³ïöœ7µã¯aðþ©>,âÕv¤>¹L˜¶•;/ƒ²9ç¥Ú{Þð#Fðä:‰¨¼•Àw²…ö¼/Г©Á½´VèŽ8ž¥Â˜ƒƒ×±7øg¶ÉŸÛFÐ=¿`YWõŽ+ÔùÀºó=W'k#Õ•Â,?Š…ÃV•‰Ž‡DÄ£{Ô„÷ÿ^zKyù>„9ª±Í¸- ç_:6„E€g1Ü3¸™Á“EùMþ·ðBˆm4 Õ´E~0ŠÃy䩿 ­Á¾/´•rÈç¿åñ!±£ A¹ï2Ûõn/Ê)°çö¬A£_Ío5“ô¡ WyK®N£'М÷«+ÖÛÿ½6‘—θVbI4Ta:dsHŨ¢íWzˆÁq^œ›F„ƒßlP܈2ÍF>µ¾Ä±ìå‘ÈCØœ£÷´ðzÇ|ð'Ï^’äɰ?yš7üÕ].n{Ý®ûÓ¯›)zÙ7³áÆguÞž³9^N Ãí™l¥ÂÚö`Žâ€<üÈõ:°É™×yPGÍf´=KnÇ“ 6mŒ‡Ó†Üê8€uô UÙØ_ð ­Z³iG…õOEºïâÊ7æ¢55bèjÚG$œ‘¥½öB´ŽìphÅ.ʾU¦w¬vòLY¨®Nm‘…ªÓ¹@ãi ŽŸTÍ ×e³“ ¢šª:pˆÆ?•ë­> 'Qy|ƒâA—Iå:#žÞÂrªäÌX¨Â†s²Õµ,£É~ºL§:µû4ÜD¢ª¤« ÕÌHRŠlLß" jk¿¯H”ïeŒ *SíŽ5Œ•<ûX@%Ž£Ÿiù@>/¼#®)£OÕÙ˜O0™´õõ›ÛÏL?ÖL8‹ÙÇÏ®?kV³ QuEï·çÓ™>¼e]ç m…xÏK­éÚ@àùêô`¯jߊ6‰~‘\›ZBOù½&¬+Îâù²©üÜÛáEÎöÕ¿óuÀfQi\¹¨¯Ù3ªã¦…Eˆû„u”­°”ky¬Æ‹Ìã­È¼¡r £÷Œ…lðœ+ ï4‰Ð ùäc|èãã,ǸäÕ?èÙákó]™ž&Â'èRvð£ùçïíµR}}Z-v;0ÎvÕJ»…Lœ“(¦x’Õ§œ¯šQÇ‹~Aè¸q:HçÑ)÷W”xyD]éê1—€å̇/Šm€4Ÿ×Q±gl‰Ì .‡@ûì› ¾÷½)eøq—Çï|­;3¹Ï:̨ç+ãäk#ªæŒøöùý1!w¿2ñêÌ&lKŒSÄ_®F²4šg*€¹¼”ˆ‡ß|"nøëQ¡Ðùõ?ñOœ9MÁ¹Ÿ2â]‡b½Ç:=”³Ç ¾(Çì†ø—^âÓÏ:1­ºxJyW-›ï1¨Çy: šºlnGå¡0 }7k6àLÌüUÙÓq¶Yäñã&]5`å‰j;_z&E¯³g ÷‘?}¸Þx›ØÌ\±v.‘ø1uÎîõ¨]t~Œô¹ ôc‡T õËlû‹ßc‰æ§Ë¡9‚bØjÌìÏSÊ%áůO{OŒŒ‡F⧘٢ã¬aÚOòóV h!î;.÷ÁFfE‡Ïkµ†.‚Õx§ÿÀÑâÌ:ðb;lÇcHF‘¼+NV%“¶8bd½1Þ^ùeù>x¼W:§‹yNcOØYjLêÔµ|xMMø}^J:`)eTÃ*× ²ÃûtwS3Vºÿc|#}v÷ ®Yî1M{²< )þk!Zf½VVòŇ’H„0Oÿ^ªI·AŠúÔ%F"ŠB©ZÇÂlâÏAoì_áš¶SšÀª'Fܯ£k‰jQùIÛ1Hã+å:gWN ôŽàz.´”ÜR|—w>HŸ`Û¡Ö’|cêëSÙsVb°Õ7'ƒÞ¥RT»¥—Ý¡EI¼#éLRrVÎågÄ0wwÖÞiŒöçŸÉ,$¬ ¸b†‹_Š9~ÙÓ^‘º•}#Ñcþ¬ÚÑÀp«…_Ð8S'Æ‘ÁÌ{~%´¢Ål'%“dÛ\eŽº}à|M\1Ax7¹ }±cѤƗý©º‘ù"±ü& $[ˆë¢ÛýÈó“&>“„œ6áÆj¦ÞGóÜ/©È©PæšóÙŠR؉R§ü]ÍDp8“/ÑxIc‡‰¢P—T‹%f«W¾ÿ|¯óá"ò9 XÚ;n6À‚™µæ—ä_³Ò~IŸ±4Ǭ݀Ëû>íVºçã¶Æj™¸Äc´Šôƒâ4aJ?ç '6} Íu¡Á{MN]#aAàèi²%мZëðIiT†2žYÐÄ‚_î·Û¹K‹è‡Ë}É£á}¥´B2÷|êŠÉ‚b¦ ƒ‰ÇÐÜos Ïp&ì¸+ÀìNB=§hq輦%k˜ú)*·ý\Þô‚ds ½ŠíËÜbN ^f~+z9'®E×¼TRq)²A­Y9Ð5&ˆU’¯ò—ÏQ [鎶?À{ã–œ€÷;Ì`ÝFq¾Ì9Â"~ç¥0 Þ·jY°aãÆËÕ\nZÖ8U`ò),µ±zøóí‚réœ2?Æ“Mgµ|£4TèO 1ÂD)LsÉ'HÑÖ•Jg ˜ÆxðyɈ¤¸9Ê`èbŒE„˳á§Ò×ãj^äõ-}§iÅúîÕß:’ÞlÄw6˜Ç)‚ˆû(œÑòZpåç¾ÜÃÆþ2}n⊊¢§Gò®>rÞõä[}<·L¥± ÔI™e"¶íP5]nV´í°}3ÿɤS{#òQ\Ä›ŒIœþtXüN Øé«2vå°Ó6—»ó”+ ú ÏÆŸFÜBmp[èù¹×íÎ}ÄOè&¶ðì"Ù¶ÖÅDZó-|h÷ç乊O¼™!¹ÍV )œ1 vñ>QHÈ¢©6u’@ô{‘"bуÚ@‘$‹d#å:»ßÔº[ðƒ^#¯ !0㼘i}ÖÌ“ôEñ ÐîUs?ÞÍÝsÆiþòÊxáS­Þ<î“gÞ„·QQ8¡âýa§îxBŒ°t¯SÉÕ{ž–Wzõ.\½·]Ÿ’A'#±j ·Ó«V\uÆKumÉÆ½—¢Aí³jŠ¡ªªÈ5w…'7,ÆÒ™_ýåSÐM5FPlCbiËüz&cÌ çǰ\v;5òY¸*Ò|h«”ëÙ¾fH§‹¯ê8ƒvÈôLz ôpõSÅ«îêÙ‘ÝA™ˆ’VÖÅ2.W’Ÿ&Ĥ§P™šv™±”/l>#Ú½EHl Âä)§XÁæÑI0m—fm¶ó†?Ë~/õ#’ŠdaoÉ3Ê »½#i)ZáÂ/›Ñ–&ŽqÊŽØç’çk‚Op—-‹œp~H–æ'“­Í´¾PL|»2S%°vúÚ½åÕŸàœû#K‚íÔGÚŠ/Ñ:6ýh‰ ¼k©çÚËÔ°²ÍÔâÇJ7‰¢ˆÌãË6˜óÍÆŽ#¤pMG9u[éª3íèÍéØº­ÜÄõ.iÙêpþÌËÒö5ȲZAñ;ƒ³Ž‘Üð÷ÉÖâÈ»ï"L‘{´w÷ȇ§²å©U1µe4¿rœÈ:WÇ©Úz­?´¸p ~«L*Ì+W›$¢ä£ØˆÈ—~òÀÿ:ƒM½‡µý *°UØkDÔîÆl"­ož_%@«‚ 3åŸs¥ÎŠ4b6«½<§š¥õHÂjkRy†ç%È»ë%8Û„‚'9ßù¹þ{Bžã~N1`Þ’ÎóÈеæÆÿ;…)AàÇ„?]0r0,¯kò’³ˆ?Ú—q1wˆ, …5«.ü²;–Ï0³ÊgÐõlà‘™e;Úص!J°2ÚnŸe.#¬¿ZZ¤LXtðkOH$‹\€L³¾ õT6°ëfóŠ7¤zÞºXEÓ=Ã[5aCk|ˆÉ­·$ZGGò÷aM:17ˆn}^/ªÙPP‡²4ƽ¡GŒ8iì"žÍjfèÂYbP§4`"s©&ä^°_xŠ‚'^N¡5¡+ÆùdÂó€×îŽe«ÄŸ¾\4g:åØ)lŒ'0ð‹s¯jIæúå«:©gŸvCþ’Ìå¶ÅOZ<Å!9VÃòÁfï¿jÈ?ì¸ø84K~o;síyRÛ+\\Ô}¢°:ãÅ‘j\yBvd ²™ÁÀ%DK9µ6jÅ šv"eäú¨nÇÉdßÍp$x‚öÄBÔmüýì<Ìcxø¸;½ìx žÖ@ã¡B‰ÑñkºÊ°0÷ÛkÙ»È%@¾7D½nù†žJí”ÍUl„ÐÞÃÓ6p¶Î%ÈùàLÑTµäƒ… É7·+ÎÙ*‡ãÃI+‹¦ ¶qB¥+µ½JÌÊU>g3‹³5”ñóV‹h¥ÌìK®«Þä¶ñ›É¶(Úøå¢»•›QVPNàn^¢<˜5†~‰y¹­¤Îõýòá•’f¤óXÆÿ“먂¢Êüý¬^" HðãqzÎ%EúFÍì¾âw°»V\,BÎ Ø¹æ ƒWØ&íÀÆ'dGŽlg#Ú¢|»_ JµäØ©¢¥»Îùë©ÌÈJ¶òÂFãFÏïol×|¼]JäÊ.÷¥C­Ë›G|ÃMFš„ÒaBD± ^óœø±®ÒC¹k,nÏWØá„‡Mq_\ñÁØ ó¯ýûu?ó0õ× 8SîúEƒí r™È†5˜ÈC¾Ë;Ò]ËÐÒÐuæbµ)vOàq•UJ-óqÔ”Ððevamï*úPÃ_yµ¾Ï¨'9‰Éãª6À(#l&pÔdE'Iäd\ tœWÕXÖd±Z=:¼E_{N¬Ò|¼kP¹1Oa‰AA6Â^3P¹âø–4=…êíkuÉÖ/nZÍ×Vµ’‰ôí^ùäikg#Fj›ÀðKðseí„N¡bº/U¸V ;SS´wÞ¡Ž÷±1pû`Rô@Z 2ù}@6ù¬Zªb–T¦+UµÁLm¿~'ö‡ Ò…’çðÇ.MX›DA²ó¡y£HüG5¹{µPJÏxX}yß:>Eˆ*œ Z왳&mî”jóˆ9}Óì¨oO;f_©ÖPnO&!SÇèEZñõ¯HîžÄt1Ë’ˆL~íZO¼KÇk}ZÈøˆ…lÔÏß^-`âÏ2"t ‡Ãë~y§Ãd ÕšÓ- éÞi=…1“0¸Wd`‡Ž Ÿ[¶äáÊ…[=ƹà"óÜl9,ê'9ž|æ—±K=9LùíÐ^DD˹F Œë»£Â…¯í9·'Ö Q=Ö{èDª’/êtY{‡Zyƒ&%úJ)"à “:Ü6ÃÅSD®ñ•Û6¤lŸÓ|t¢õª/R3.eÂ$ìÝ,ÜÏí«¤”þÈ/Óe±¦4Ï©=”¡jtméœ2•ˆý£]â‰KûlsÃÐ.ŠV×Ä á¨%û¿·%gñ©\Ã#ÏL2ºF|P"„„ %(ÉË9áÀcmWÍ6­.(ÙÄs£ÙN>ˆÃóiVEÄ[ÿjím8¿3qSÝE*шÚ;OyrŸÉÓ`/fF;Fâæ§.ó”’óþÙØ?º ‘ ;G’ŒÝÄù,SX¶\i¯'I,ÔNЮÅÕ(£C“~:Ÿ´ß^ù©cˆJ»»4eçh-yZaB`fÑ™—Ö„iÒf$Ï£9øþ2üÓ°&¡Úƒx–žEÈLP<:±nŽ÷zE`!ÁÇ¢ïcÏ4>ªW–‘–ů¦SŠ Ñ7Ãs²5ª¤!ùî^“+ ®Ã<ÙŒòé1Y&jš8lÇ´ðFæsÓþå r Ãhéƒ)±]FÙjԱ‹-q¹—Paj™P—2Mý´•¾‚= ¨iZmÔxc‹vÃõÁgdAr\}“Û‹¢¬·””JõE™Áí8 ùO†T_"Ö,¹n€ëÎ}ñøÜÕò.R†_Sx]\ýx,#Q{;½+_÷7LôÓÆ¸Œw””p™´¢COàòI¸ìOÞëWµhÏúºôÓF« ÁT ¾Ã$½ôÛô”yã³ôPvŒ6åöRçùqûÀøldµ¥d«$z3Šv2G”h3û:GÇû¤óܬ?éϱÖÖ"‘cc/ˆ@còF‘N£»—8–uþº¨#-ÝÄ~ÿ)4Ì4¿[”æpÓ:äJ‰A#¾†‚žX+ò¡oâdùC˜fJ{ç1{‡“*Ç—òR”iE`úxÚŒœzËéÛ¬ãC¾bÜl£iû“˜ zŽèÅ'A×Ð(åZ‘Sg§‹û5jõM Km‡ÍÑòÆ›ó×=b¤Ì“•JÏèO²Ä©†Y¥E°Elãœâ‰ï¸âõÅ-܉ n¼§~ SvÞ¼á Á;þDmÏ`5Oïc“£I×R ŠÌ9z~À(<Ðm©ð{zä³2nkŠun–-öÅÞ¾fà"%ˆîâ•+ ­3G8ÓwI^ÓžhDIΚž FÐö1HX#Wo7¢úé;2›Œøª&Èíõ›p+ÒQða¾ú4¼»*,;Â\_}GpUÇŸ-í„Fðãy¡ÝTyŒÌ{Κn³>3‰,²pf%7’K×^Ø÷”üêef?ä”ðe¸m¾Šô]…d78Œàðy§iêZ ¹o‰³hª·‚1³~½PrÄ=ŸAsUÄ~°ÐÐ} ³‡R(¯G!^'ÇÐÑT3¥¾š5šÂ¿¹Oãë{/;_ňkZ&Kya^¶t¯}÷™xÇó“1þ˜Ç€¥·gÏuÂ… ¿uÁA¹Y3èÌ_ãPé[oV·™ƒ“p4}ÿc]Ó8HäÛìÒW‹b$ëBSÓÞù}ù—|øJzJ-y!éµVe÷hÒÏ9-°*&¯ø>ÈíH¯+¶qVË Ìãª]%<ûòû9øËª‚ÎÉvI Âì`ÂC2<ÆÄ¥áwo'¯wVáëps¯¯â˜.}=Ð)§öò8¼Ý·sû‹Ï(µÉëÄô¬U^=ˆ?®LF>ÏÄÌüJ_:ž»û­ÄcËÆŸù\‹7­#dÛ¢G_Xc€¼{w’‘{ß…aa‰nFGd< ÏO?F…×f¿Ãîäõþ%˜Ë)­ÜøYa)tZÁÑxŠî›jSP»—y×AECõIò&å jŽà"C;ÁúùÃzÿµ/._¾s^JM ¿íjÊ'ø=æ„TþK Ÿ [¦žÉ”2iþuÇfÀah‘5ó]ÿxduú Ç‘í^ožÚ„×kýÿÜœvh7R¥KÊÃi¼}{Íá¬3tDȇI]WŒ¡ejPuœô´Ëé lG®Kù™-‡¬h7Ãk)D¸c5›òa;¾Ïz˜^B8€TáËc´À}ØuæJÉ,k0€Ï³Jî]ÍÆÕçÀ±‰tO¼•o{Œ`61'¸ At>÷C2WkYSK €.6^vãLn“dQr™M{Ú”a.x"XØÚ¤g¸CÉ…Ýÿ_ È€ó»u.ôáöG~£!ù·…VQ”x›Ó2¹¾›/+ï?jsŠé^}ÊF:š{¦Ní1.ÖÈÙ+ã|tèéÙúñU©ÊÌú@\údÉB“ýà ñ¼CÄÀ· Vì‹zz^eÉo xaÍÁ)…òvÉöÌ@ÛïÛ±äú+WzžÉ`9¾ÉQÁðQ*9µƒØœ`_¢ôîWï]ã„3kRd8ÍãXÿïõ]ò ’¼Åj`ÚÒ¦%FfpÞ‚5PôëÈЦÅ->¬`ô›å,;ÈÆÎòä{a$ìH[J §œh¯ ¸¢"¦½júÙêÀ£úxÓGÑ‘d%ž1Í]æ'ÒÊû<ÿÜ&˜I<>zD\ŸÄ)4;-cW§¦çÀ˜¥]Ö:zB/É6œ”E»pZÖ»ìðÌ/²&3ðmNQ—Ï(6@Ub¦Z:m(ч%¤óò;½Ÿuó4š3ì„y©JÌ(£üˆ8•‡¶×ñCªÎ쀂I*¿Êˆˆ|Ø[¢Ê/ß1k¿8,Lò¢4‚ñc@»oo}Š!þ&ï¼öÙ( ‘,v‘~Ó¹DíP.¦Ö Ó¨ŽRdõ{ƒs€Öúäpüõ×,8†Á㈓(.½åp™r/†òˆÛF#Ý¢'Ú/T¸¨I­çÓ‡tÊÆäÛB׬²ó‰„ºÛa;”ðdT ¡,žftGå#~ê 42å_ égÐ…ç,n°Fô©ÙÝJ1ãJtH¥qt75j¥Å¹#Æb[»Ð°c'†\ªð䟮´Ôhd¥Cù@ô¿"ÅKKbæú4²žì]~‚‹7AR‡_vµ—Õ?ŠõÙ¹~º-Þ“=Û•Eam“\5>pÏ)-Sñu—Œ<ùË“Òöuä/À?GÓ…ÔþâÞÂÚxà?†ûŒ‡QB‘Z=a¯¬Î/‡¦Æ,œpò…:¶Bq©­‡`‰¡nä,iL×¯Õ ŒS“['¸OLŠv؃ğŒçòÒ˜ëþ›ý^qŒ zfÒÖ‡¶:Wéž«€ÌÊTÚÀ3uﴣߌ„ö|¡vÎX9)Éœú7PÏÙÏŠÈrU¢KLºü •Ðô‡ôBˆ²`‡9%©úÓÛ$Ç.‹]uKøÄQ'¤ªŒÌ2Œ ­º' ¼i6ÑIÙöïøÝÑ¢ê8f,tñ \ÀøŸº¿ù±‘Y%W¶Ø’ÜÜ> ìeåÒ1u½j2ÐúºÉîÒŸ6Õ– ™Aõb4É’§½™ÑqLzC·B`'ÁömöÈ%:MÑ:8 ó¥ šˆ¾ÓK=U{ÓDOo7ž‘kŸMÆ¡ìڎæt¦vÐÐ8¶]$8·Ì…RFëϪXÌK!I,/Qbж%ª©Nð*7S~wwf$Œz Äñ·NT7©€b\“”`sÆtÞ¤&°Ê'-¬>°9 ÚP/ú—V´böõÁwð(¯ª\2N¢ÁdY -{Ún5$¬à1öÈV[ÃQû ó—Á¡S€Ù:!üt€è#(—¿‘ò¨Hík Ô&÷)Ü^)ƒ¨4q¬Ä Jîï;^¾‹‡ˆïîõg1WR5k@. &p'nû×_ŽßÝ¢f |GšþjÃGXD"4ë ”ù2RÒ¤ª”B®JÝ(3hñXµœ‘˜VÆz_&ÐMúßå¦íµŠØZ• q&Q?” ®½s !Ê>nåt«¾o[•s§W°nj<âîí;`Ru˜sGhyàÖ_ÅC톪ìCõ|VÚÕ:{‡{áíZ€Òß ¡ËzÇeNJÄÌ,ï õy· 2ná= 8òp¿Í¬éÁ¦:À綺/Åwß32?YORű¤ÿ‹À©Ê—AµG.—öè5?`­>Jv‚ò•z‚bX;0¦ÒbGEyØ’Å»&§ÐPÔ§zXV½™4'zì¹PS øxË™n˜¤Ÿr Ñ^nûÝÞ“d\IP¶Æ°_rŠÑx‚S.ü¨$s‰Ý –Np6H.ì’jÐw…”…Ûö1u"Fb *]ÆöžþÇoµÉ;z¹&í´^ÚÌaž?XXâ“)b¨xZGð W^Pj´ÐÂîi’`Wû:~‘S ?ûM¨EOÌ6@4Õwa'/ܤ˜™§¬I¬’h8Ñ®`¤w]1­ÕȽW¥±eË- ÐæÂKéí3^®r„EÖ)ÛINŽéÐ"\ ª9ÔÕùv{ƒÛ:T™œAŠ !lžÛ ñ*HûÁb.ŽRÁÆh=‚ßk§,€‡ù¡¤ãdÑh7¬¹: ®›Ð#LOtúéa•_Ø@ ¦°A—¸p&áq–;ׯ–±e÷ô´ŸM4ÅšÌæœã›þ€´>»»Ÿ§>ª³¤l;¶˜O”²>[¨ZÀÿ±Ç€æ endstream endobj 306 0 obj << /Length1 1663 /Length2 9624 /Length3 0 /Length 10689 /Filter /FlateDecode >> stream xÚ·P›ë.\ 8´¸µ@€âîîîR¼@±A Á­x[ÜÝ‹»w—bEŠ»;Å)—n9{Ÿóÿ3÷Nf’ïYú>ë]k}j µ·ÌâæS   cfgaH*¿Ubg°±q²°±q QSk‚`¶À¿åhÔÚ@G(ø—…¤#Ðö$“2=*CÀ'[;'€G€W€ ÀÁÆÆÿ·!ÄQ eâ 2(³ ` Zbïæ²´‚=åùû@gF`çççeúà nt™™€Ê&0+ ÝSF3[À[ˆsû¯tBV0˜½+«‹‹ ‹‰”âh)BÏpÁ¬@(ÐÑhøM bbü‹ 5@Ó ýSñbs1qž¶ 3 úäâ6:ž²ÞÊ+Tíà?•þ4`üU; ûÂýåý;ü‡³‰™ÄÎÞì[,@¶@€ªŒ ÌÆ0›ÿ64±…BžüMœM@¶&¦OÝ #®0ybø?¨™#Èe‚lsdýæ©ÌÒ`sIˆ ƒ¢ý>ŸÈhöTw7Ö¿.× q{ü,@`s‹ß4ÌìYµÀ ' ¼Ô_6O"´d–@€›—Ÿt]ͬX'Ðt³þ¡dÿ-~âàåa±X<Ñz,€O?hPg æèôòø·â¿;;Àd˜-A`´¢?‰â§ûw¹Þ±=µ;€í÷ç?O†OfÛºýcþdz*J*Êié3þEù?J ˆ+Àƒ™‡ÀÌÁÍ`gçàð>=xýwœÿTàoöHÕL@î_åÁÿŸ$žª÷7ç¿:ƒî¯±¡üwÈS?tÿ´¿7›ÙÓûÿóüáòÿ×û¿£ü_ÛÿO$ãdkû‡žîOƒÿÞÄdëö—ÅS?;ÁžfCò4!àÿ5Õþ9ÐÊ@s“Ýÿjåa&O3"¶|êsf~.ž?Å ¨ Èh®‚™YýÙJßÅS [¨‚~¯3;Ûÿèž&ÏÌæiµ@Ÿnìði°þ;­4Ø bþ{9¸y&ŽŽ&nhO ð„¸ìO£jtý£Ã¬,`ìÉðDÑ `qDû}¯<|V©ß¢?/€UáÄ`Uýâç°šüƒžtfÿA¿OÎjþ/È`þ rX-ÿ¹¬ Á§À6ÿ‚O'²ý|Jd÷|êzVð¿àS"È¿ €Õþ_ð‰Žã¿àS^è¿ €ö/ø”×ùø_6srt|ZA ÂSõÿÆì; Ðh†67 1 °® h¾®å¼9ÊÁ…Ù{öùEgCšØy[ÝORèæœ3'dV¼}j+äfgŸ£à±ÞF—€ÍÆhÙ3)D€`®¦ÑÂtÉs Gøvªäı¥ØÖ¦oÌ 6·$8þªÑïr!6IOÈäpºù=uWVˆækÙU©Õ12mÝ ühX2'|@‹xjK™D¥øäT«üè™Øèa ©ÌîMRÏ÷Zï"&8ÐjÒ«½=L{Å‹Ô=‘ÄNEã1À$õF§4Ñ]$ßEs€/)tø­(•`šüÆØ™ÜÙQšn ÖãxDðz ?­xºIWU¯sC¹'JÙ&äø ¿OŽ«ÁNÃøûsÕK-½ÆP±EëÝç0ÃzOÎôãÆnQB}-ÿrvZ¿º‰ùµÑ‰QqåÒPÂgÖiVÌÀ|öÙT=¡ÒBƒýp$²ìÒ ÐRù†ï„ô½!éc‡í'UlLPÉR̤|•º¸ LlNø7f¡2½ôrCŽšï€ßgúÜêª Û0˜—3,±€ã…5äH”]1qº{½›üÞ×;NÇ:AlY{Å»AU¦pÙ+óÖ/÷ Ö{:Œ5.zNÞ—Äõ–®áN×G ôCùëCçÚS–‡@ñ,‹Mÿ—©YªWE­|ÊÛJ¼Ÿ“5Ôˆ|m9÷CÔ‹M}¸Ä&í1¹}yísÍ}¸ÞÚØÖB'Ò½|„Å'ŽIèå)†®#ŠÄJmª’“±üÑú²WŸ/QÔ§·Ü‹À/üdº•5%4A‘¶õÒü)²Y½C¼ÃùñûàÂüƶ¦Â;Ì9Å£t»‡ù\”4L`Ò}ñ°ô‘ìÁ¼Ú£Ü­‡`R&ôÞÀQ4%õ'ÐÿýœëyÔËU¡›}üw‹ôLåÔ)è)¬“ ;áV{Û­…*}ºO¦®G±á.¡Á‘G’;º¦Æ]…ýp6ñÛ¨«5áˆ' A"‹¯øï" \èè@*ê!°H4)[„ Çf$…V’ ßôMG;o¢4w<t±Ú¾G£¹ä÷1â?¶š HB‚UˆÄ™W? sÜsµè¹ñ˜¦«(ôŠ¡i~4âyx›É—éF¡R<†(µEÕ)bŽÙ‹ä;O÷Ç:†|¾œí# í–6ŒpQy°î…Ö³¾“lxþý1ým#\Ž iíjQ]6ðÜB*// …nB=xs<ø±”‚ïSv­hÿ¢~Ò$ˆ1Éñ»fÚ¬ù÷¸¾$™´#5„/û dæÀuéD†RÑSa&êr»ÍkÃ(KÜ¿è¤)÷>&‘wÖ·­O…úךsåäëÍQA:äƒ>%oE¡gæÁ“µ©rm‹f /ù3LÌt}[!ÿ`!È" ³â§˜Òzó«ZÂ,é8E°½h|ñ”¸!œ‡w{mjb-ÀSgÊnÎÿà×¶ÆëeËÚ£i¨Š¦Þ>P" ý¾þîåÖ %Ç}ë±È3WÕÚ1ȹ51:Õš¦-¼j\ÓÑ5ÂFI¡-Ó²ô»é®”ÜI’j¶Š`4_×Ì{·Æ;m·C„èÁ_ìºôâ‰Í-Ãã¦ãÖê¡rSøDè$Á·¯Åxãç-ýHQX~ñå3¤&¢DÄDùå±0ãÎÔ®?jfk®ìÈŽ_è¾îÚ³ÍØ_wÚD%8‘ëÛñYi¡Óž]E¼Y~{Ân÷Ói8Cò Ø¡ÉbJ†S˜ÑóLœ/”`ŸU§ÉšJBX’Žðñün4àKpË~á;.uýËòL…)‡½ÉË8¥=Y ÇÀ–#ƨ}Òœ¦×“Õ¸§fe¸÷%^:?D¸Š•˜íµ %³C²>ÖtDSk2ãˆÎ}šž †5ÍÕ:“Ü81µ®Ã¼µúë®Õˆyü¯¨½Ô{°¡<Š.ÕQ wP“P)â;Ô;ôeÙPqW:Ò1²mc¢fõt üŽFiÝ\íY¦n¹Ç¡¶”çPð f²:¾)Ëééƒ{øs½pc}òsz‚Î9ðû›‰oÚ­Ì´ã>U1îüc6\ÉwãwãÄœzÙ‡Åèc˜ Â:/`Ðmª#ñg·¥y†Èf#Ê+B‘“ZšýÃEñqc ¸Í#.—¹T«Ó2fãÔæñ#wÃ÷eï ñÔl†ÆÈꄼ+ à‹ÃÈM*%c­GsÃ|?»”PŠ52CŽÙ_ü(1­¤5»º‰9r‘tÔ=¹dš<íñBš)Ÿ°J‘·Û¿NmÃPò+aÌÑ(Ä.ÞWAˆA`ˆÖõAÐ+ß^ ù™yggø.þÍ›à—Yn*ì•LKËêÖ~‚ óå¶¥bVó×a ¡ä[ª2ù›%b¡=àG¢´.¿p™<˜ïÂ×Éð¿böžï1câ¡5¼´–Ð'RÔÇ€ê÷+Öþ´uxƒŸ‡÷jV¨QµÆþ[¤Væ÷äO¦ëù7»Ðú_ó)ñìÈ‚žhò'¶š},/¤"í:cP cGr:¨§~é= M±EiÚì§O¤Âû”ßúܳ“ÍuŸ|v²XÆ0Ò°L×C Ä ÍaPÌPTªâKUœœùš¶ÉPÕϦÖùeî{Þª3Ñ&뙺!&‰X“˜æë° ×çXkr¾kÓñöØ£àËmWµY€«¯8eDzÏ\ýÛIF›Rœý¯×þô?«Å€x¡*]üÔ ÄÌ‹€G’8š• ÒÛ3£ø‚êÇ8/`Ò0² ½¯EèNnþ=g9›&üÝ*:øŽ ®g(Å$,võVÅ7_ÙéÇz¤,å_ kÆîåìªGé"ë¶+ù’sm»fš2ãŒÚÔ_­yP–4½ ?{›‘¹œü£}tú4Ù¬¾î¸S½n£ Ï8–„5Ó ²{#D× æÉ›3¾œø‘z ͱý%PaW·U™xL ÜÇo61W¶IÜÐŒª×Í`|°ô­ík›ëþ1~Œò9«Éï Ô ¯©œ+Ûx{¥.ÓTx­›«f)f¤ âG®O½«ÄÇW_‡ëõúlú#ªeÀtÃyä4•ÍÍégÚí 'ý“É5+žj]àó^@ØV_ì»…ÔÏö‡Œ\üYB­·Yýæ˜b’Õk]«x¾ÅæFV‰qæ|¢<´óîY‰7gûyÂûQ#‹üò‰ÃòÀÝäv‡eÓA³ûâºü…BŽW9mnEïw^jßW«Íù :ŸYñ".&nãëVv†¯¨ »œïF¹~VoÞ‚H&`»ns:EÍðlsŸ 2r¿Ï¿L=85)$ßo-N2z›æ·NâC>Ï…œèy*8a(âa8¸…l8y4ë!XΞչÊ(õ‘œÐÛXB-w+ÑÒ0wF¨I-ï8~í'DS„žKó3ñ2)É‘älÚGªÌ½>BÊÖß”ˆv 14Ƚx—9íèwuy ¡ÇŽÈÌ£Œ5ž˜s*âˆæP÷±³ýè¥ÚWó±ns6ÓJÖ×K\1˜?—®4[íL޶E#µuçë‡p©øë¹?ïù·PòW{s ðš:…Ü œ£=ªš£\ˆ-˜­ˆ»­ñ $Co¿ªÜ·½°šä1Js'rµo­xu€‚l¡%ã—de$+ÅMœË,@ž®¹’¤¶LSÕîW–"†:ò8«gî0ˆ²gKBÖ+Í;}'ìÑ ÙÆKAMžúÌ’+\^$Þ ]*T…M7Öm0gLà6Ôø!|=ü´pù!Ø:Óêà 98;A¿âû{å)€Ù+ü©ÄÔ]FfX‘•E+îy3ãëèºSĬ¨…TY+þVÎ[žùù‰1$,U™ pÝ»Q;¶zÖåN@Ô*VI~_ˆ`1pw”Ãé‚ÀDGEL§%4d^O±BíVéÅ*ÏNx±ÓC!aëÏ·"¡hÌ·]”ƒ÷5X!^.UxÒt„4‘Ÿrôjg–A—AŸÊã;DVÕ±ä¥ìDyï{°PÓLÅ·²S“ýÌÞ!=ì*îåfjõÌžðúÝH#ÙÊc/ é¶úZGMBÜsˆBÝ_oOÏ)Âù¶úV ´pcuf4H‹XȳN{Ëââ(£â»bÒ©1åè݇-L’²Î»¦ÒFñG\/zIŠZÈO¼©io¶èMƒš×¤•ºƒ·?_ÄãÜö ûŽ`È’7rú$m‰ÇÍ5õeÞ§jy¥±ò ™Î«ú ‹õåÙ¦}K ŠªÂOºzt!¸Å‚gôp+bQ5±Ã.os=kD"žÍ⿜ÕeBÿ¨zÅs?Mô¸Ÿ¸M»A#¦´ì2XÅØÁ¯êäš›dͲMàu^æ±ù‘¾z~ èÜwêÜ…,DœT ö+%Œ|HL…ÕärìLä}¨XB±¯ÊÉ~vy&'Í}¹±ŒKE¡wNÝËùª:ç‡G‰üfTÎUN`]×5åés-aѺw-+˜cüãMf—¨NYDî\„µi•¹Äø3 —´X]À}d@6Fô燿¡X½‘!AaÃñãW] vbòz÷#©ì™žéûµð âæiJGÌ©·†gÓÏs”j"×å©w‘„'.B„ÏÂÊç€MŠ»·æoÅõQU$€ó¢«Hø¿¹w¡>:îϰ &æsyBñO£jå‘W¿%¤Ù‚0}†Hõdz‹l™?A¶¼âí.b9ý •9>È ŽÅø<6K®åó-+nî¦Ê'3nøë߆ºR/ÀÜ/Òäà>>`h'¸âÄ•‹ÿ Ÿ0¶b°dš·k´Ç#OÃ_3dt61ÝÐÅRn!åÖŠdÙ5;—qdaxËS”Í1C;{éqF+Gˆ’;‡›·c¾+†{æ²Ë?‹ÔabÅð…•qÒ‹Çã¶Œ)6müëÒâX­Ï`âf?ºì\ÂB™>¢ƒ·A·D n-çzÄKpP6R(_€Å¡a+ÕHÞ$_®ïÙ3ulùDµER²jmº¯&øÞ7ià[)a‰ùªî§¯j˜U*ùpž0¹c óèjCû‹ -NÚà§BÈäpn¼üÜžÏêàtåÑ—‘&k3ŽæÚ>2w¯ô^‹ ‰táEuwÑbt¯S< $ãÖb¦]½w‡U·ÌdƒH›œòfòMMöJ $1v“š7:a¶/w÷j¤aYæñ7Ô(Ú^ýl8ᄬôúO\[^ýRŽÉ¬ñŽù}ˉÿÐMaÑ&YÖ¯%Ür÷C…-gΑzpEóôá×þÅË.Ú`v©adýÉS4{ ]ÑXý‡(ê9]Õ µ“Wpò^€Î"ÜÜÆ|å0û Æ#¡Œ'R÷ÃtlŠw¥L¿%4{Q0F>Ч[P ” –Ð@”‹òéìmfMj‚eåŽÔWÏóg[WÅÊó~»ÆÄÞô˜ulU¶Á~ Ød*[S.Îõüa1F„³GYOO}öЩB¼Ê›ÙSݬEÚý˜x„Y!]—dßî†ñ˜ƒÁ>fÌEÍSi5 ÃIJaß³F꓾–V=’öüxOažÁxiœðG<Žêø¦V嬶¶¡ûfgÔ ‘ê¹]R©1žû¹@‘æ¹^ÐgRËL£ °'¯Xc_ÄÈͦ6vtöŒ…íyiÞ³tD,G¨2 ÉË’À»V‚ˆQÞ£•µ€qÞ],2ãó·¯úÌ¡0W¡¼?Ô e±ÞKöEfúg¤R1 &5ác·kXmRÍB©jhw.­³žKs›îs|H3t}~Oä”=¿´ù³§Û.õ”ùeA¨ávDfd¹lb;S{J£Â° çDbL|Œ„-Ïî˨HmêÛëîƒ"Ÿ2òÖ /÷ a£Äú®a~Ž1ÛôÉŽMM<­a\’ëNXz=¦±Ù8ئ¡íSþ’ÚûA ™ð‹ùÃaƒ:ºïLÏØ^ ѼFUHе-d†–MSœvœÒœŒž ¥³ã¬Ótפc}ÒEÉœêr6ªXAt#ðñf›Ž³­‹Y MwìA£®È¬ÒR3#!êõQ…ú$„%'Ò¹®)fwÜ«7êp¡·\^ñò:¹u6„nÉOvá?ÂCh­öÅ óe:w>næ7{õèˆëÈøÌØ³ak¿Éy±Øhði™ïk7ˆÐ¶Cžö8,.m¬±Üp”˜ÆÌ»ÃfêÀÙDr8¨w¢Ær\µêàýQH”,°#d—G]«A¡ýÝCñ®:)÷¼{Nî}/àžìpÏ¢tš(C Ó!ÌEJþ’ÇÚ#n° )ª¼ÔHE¾¼ˆ1­t s)w À=Ó/j¼ØÏ,V‹„À Œ\š¥9ŒfÈæBlœp‹†Æ]ö¤Ýmþ(‹‰WΘ¼ßiù¼{úÖU ;¨`«uAsUq®½êgpCž²à±?Ë1]µËÖ×nëë=a¿Ææ5îűdágÈ”uဎiågïswÏõ[l‡:ÝeŠO—´áy:Ì-Gß9§Ây¾B1ä_ #4=4ä0‚»ˆò@êÌ›A¬ñDÚaÅ6¤£ÜŸšd–7ÊGÊj%tVÃt±½œ ]òD}ÌWÎîÖ¢¸Ä(ÞcHqÚw÷Ä¡S8‚âR…<Ý÷4µ>/Êóa[¼Ó9^ÿæ¤l š Œ3„OGš5^êk—Y©Î°a~,øqwãÄÎ)ô >߯¿Q+׬êgËGÓý±@¥BRÞà Á×:n´q‰SzÍ7ï˜#îd"uÅVÇÔÂ3P³›´Vü†ûâìQT3¯RðE«Æ)¢•b1Ê\gsâ_¦yÆxc0’ɲ§‹*ZǦÓTqT+&D‰@~0 ÚÍ2Ó­þ”Wω™|ùWCïàóž#A5ãlܾ¸rN˜9l2“î³·ºMÔa pÉ•$îU)Ó§ƒ9U=rÑ¿÷MµW‹ÐÐÊ'.içè’éÆ÷ð¸Ê±0iõ/b®[ô¾¨½?ù1zi÷íüƒÝÈ+$g0ѰùKëeó²G…”Ì$Ñ3Ó»¦¼HWŽ Â‰Æst[åÔÅCšá«§=ª|³~‹;K–¶ç86ä¹Ã'9~£=Wã;Æ£˜û80ñ‹ºRúø‚Œ×ú%_nŽ*pcÛëk˜vD¤eN¸S?9w¬ùÂ. ˆõúÎ~2÷›g” öMžy½ sm(\J«ûTzüU-6P1§ñ—L?gÆWÝ›>÷’~•@äwL\¨_qƒˆv¶o›¾ì·8­t‰ò‡ëiB °o,ÞðåèpE¿†ú÷”e„>S (M„f e(£ƒÁCª¶ à;y +ù9ÅcH¾xyå|Bì‘—…Ç;EØ&5þd,Xvà_³ê£®(SD6Óè%‡ÆÔ±ÅkË¢®ú—¤¢(¤Â‰[ £¯é" ¡c!†àë}¬ñ¢éìä§§ê>¶•ÔŸãqÁah¡Õ`+w…Ü,Ɖ^u†~5 “í&Jâ—EϾôÆW ] ¾ÓŠË{bl¹>Ýpz`¿ùï@˜íœ3®o >HnmZÿƒf‰ƒP 9 ÎÚS =qàÝ¢µDt»+`´ªIàTÇ9bè(ñõ›"k\ÖÅ©Ø ,ÔgZj9žìlǪ@ÁÌ›ÜÑs$®>,Ÿ…„Ó$«£g}‡7i¿doN&g§à:™ c¤\îò“ä=Μ† «89P×ÖA aòo‚LXì¤õ½¿>õ÷¼ŒÈ{^)ñŒ|v>Žüè¸àm=a\èñŽºÑCÃÏ|ß!/ëZ“bÏ0½9D8ÂD/“_µ“7yã’Ò¦ƒÔT3æ,oÒ¨GxI»t(’®d¤ÛçäãhŒ—3ÑxðÕ¢oæ"&–ȇN>³È3ºˆyKìË]_¿CŽ6’R¸üvE}D,Ÿ³vñ†Ô $SbTÔ\МKy±œxº‚Ï;ΔËXŽÊZl'ÓLê5Aó­Që ´'@uÆ—ƒ€cö²,õÄòòÙ9 Û Ú'DÉ kýî;ïø;Ô¶}Êg4_—~>äí~‰ðíÊ ƒ§äýÒ’,ã#,€Ù×Q°U‘ ÌÃ×шrn‘0IÁòt¹‘jnÿ”ý…¹øãó´„H9‚,3tÏFFŽGÁÅVIàÌœaÙ•tìp§2%_³¢­ÑRù ¯/ZÐ@tyÖTç÷ìà}¥îBÆ\§æ‹¡$±„ئÍ_J[’´¶%)F¦ÖÝžAErò7ª9ÓJ§ÏuøÅà_¶6-CȬ,óú´¬*Ô§\Ó_¸Ec' Tcm¾!xý¢¯áÃ4Ä\™(‘ù¬‰_Ôo@ìTôi?p*[ÿ#Á¯‰Ö»ªz R2‰Ê_n<^:¼=ÇtU·çv{¸¯‡*Wr“ê›Öî¦ÂúYŠ{òîÓ1<¥æ+&r[}¶Ô¤™ßÔ„¿î—^“¶ zÖíÂA‰}D,1d‹lyv8´¶ÇäúÈPÜ—Òµ„Šu®Í,=¯üLW¶çöˆEBí“ö\É ¶ÉlÏKÂcþÆC•³>SHTÄÇÌ·Ÿî…°Zã ²PmæžC™uÛ…©yà صþD·ÃV¼”~öúK6üåÀŸ}†NC—¿XzO½2‰®$=zd?Å*vã 5¥~úcýò%Ÿ;-`V"¨¹šh  Žà†‚80T¼³lÖÆ?õUüða¨¥kÑ1š@ϸ7n“„Û±jP@.µJ‘©¤ë¼I†Eò´;.¸žÂ81 Ýìþú{{tvaûxЏ…¿)å=¬ä‡m!¶P?~OJ|8\jè4;|ã(z6ß÷•k®å{~PZûÃû*›zF`¾?3,µ®¥ƒv"ÒpþX£L ‘´É0³ÍFÕdñ¥ _¥—oØáf'Ü‹àõ •Í™1™:IWÕü=JTã[ý…Þj½hdÉ›-Mw1N*å•Tðü76UÏK-G}‹‘¡Ç.;šTª o 4°½YÌ/¿@§ÂME·Cïûa˜£À]3´L;aÑĦš›NÌÊx¡sCš’ÒãÚ`‰ä6Éyá)-NÕ9®¦/© ÿE &Å{épê|®&Ì3`н*[‹/æÐã0«<âDøVè<‰.„²F£ŸßÅÅÞ“F.¶>zî,Ýßä2 ÿŠ!¼þ݃0.Y+^‚Åk~Énâ‡Âܲ¼0qïJ• Û„·Â«dòÑ â<ÿs8Š:® gPr|ºœ}Èî ¶ã@xSáÚ—aŒÛÁà;‰ûy…(OÝÖ^Ú3ᔊX¯E *Ã>Ëžƒ«#Âi¿¯˜z ÆõB°E­3âıÀú ²ëÑ[gaz`!‹È5Ó‘¢ Ëw9ö¤vªýnÅYq‹Ûs”<•üe¯0S-b|xÒ•¯úuöè¤ãyd®SÏ⥶Xiµ'ÍNl€6”ÿY)ÍÙ`1®JT¥õ¨’Û²ÎCÓ™³­÷kØ nòÀì`Ǻ‚Î.GwF‹oÖ,FTÓ·Ýð3ô¸å#ñ¨¤Êªs JÍúÝÏŸ¶]*s=B­ü:gö7u™oÝŒWÒ>W@ǘOž"u×DT«S‡‚èvYùyI¢²9¿(Ü»•îoap½«M Ãv :€¦Ämɳ·B•Ÿé DŠÅóIþ´*œ†Æz)ÔøÇƒE6.§ØÔÁVøêØþ~Qkk£)Ĺgñrïy‘ûÕ'|WvêZ+ýNâÏå 3\õ:‘}™3%ë~qÃGôñk¼ué $èÙÛˆ‘iW×Ö¸ ÉvYß”º‰ã! y±Ž¥¯šÎm 7pCœëÆË>²¢ßPd dŸòl"ÂðÆ rÃfx“˜ ga⫉¹ó9—¢m yZÒê¹b’L7+kWë%>· ÷ ²;õ¦…›ß7ßáÝ…*i{Mëd’=ƒÆ·•›™Äõ¾£VpqiÞ³ë—^x*™²¡ˆfŽ4Å©›Ñ^t<¾1ÖÔ¶‘9¢Êz‘ª­&¥â‰¹>¢Æ$¸IJí oBÍw*Ú7w‹§kkQBâ~saIà¶`zèzqh¬ ñó (ñ½1=΀_'<õû¾ÆËVƒ;Ê!¿åÂå´L Ž[.æm¼x§¯íò{ÊãÔ31GKMÇXQK·:.}ÈÇ?Æo Õ4^È|kÄaIž¼®ŽýÜ * ïÏEâÆj·"ûw^<ÛÝüÕÿ2´š&†²±ö"í<ÒJ˜>ž ƒQü‚ÉTpÉ4;ÿûkf„Ž<ëþ‘SÐ.ÞÙ`#|»}¦ó.48—EoâXì‡Ó±ªÒ å+§ƒ„«•¥q2qEÁš€!+ÏÞWÂ?/Â¥ðlÓ2ÞÓ+å'0¬1nh~¬Ç=î´ÖÏdÍ.ªªVšâ¼ @‘A+ç»~óë'xŸÝéí+¼bÑ}Þm_¤Á rá¶^¾žO2»‡÷F¦2Ä«³szïì—Ðà—Ø¯FOQ™Çh !sŒôEÕÍ‘a´¯ òéP©{ ;aÖâÝ<‚„²Ü Z¥÷È3­*)V}A{7[rìB[’M ý 5™ï]Ê(¿°”$ÒŽ $-ÝSIC²QÜ£” 8ëëšÃo ·f@ÓÞÅ«”/  jã¯5´›œÓKd»ŒSy.³±Ôy?pÜe…–ŸÃ|¼8ñ¾”6U{^ìd?³ñ<_f‹’Vl|¬o7/™°¶«ÄÉi´vª0ªL^ÈJŽîìOõA£ÁKÔµw~•tQ:¿§³ûbyÝ6~’Ôdü§OZ‰ç᱂gT{óäÙÙ…¹Y…dÝ ªÚ@wr-^˜º«½?ÿ-qݽ‰T÷ç·m )föÈÁîÛécoÌžÍhØü4óŸG 1s_YÌ4¢o}A“4IÓøá{Tºo¾^'"?®§Š”Ë®ŠÆ/·œp躙¦X5m·çƒ’uŠ7Ã6*™|ëêH4±ÙÐQc׳Õ^Õ” £Tÿð’4Sº¼Î?[ z[›#IL½ÕûX©>´®HÛ@Í ?k¢ ³£úhë&dŸDïM ˆõNx& ½úZ%7E‘¦ÙH§ŒT_Á‚S TµZ,&E¶GWo‹…×ß4íÒà©ç¸Ïú*’"d/™[u3î¨PÚbdp)êpíÛáçÃÝC–½Ô³=Ɇý:)[IÿdNÐ'•º¢Ÿ,/$¢Aq½.àÃX (F| Ú‰+sˆ” Á{mâĶ_/ä.Ídˆs§¾.N²`7î…–eMøªí­V3â…*ºOøBôh°1|+ŸÛÀâØô¬ 2ç_¢§NÝáùBIÏáfkBÛ‘ˆU ßvÐ,*î8ûù¿ñ—}‚Iã”9øP6Ï#š«!Ž> Ó‚N _¯›pIxRwD”ÿèð!ú\m0ï|eŬô ·è×€ì@”)7TDÇ·Þý)ІGü-@v!øh¬UJßcÞi?¤ú¸ŒÝu—›ûò#Në<6À%Q¼ºyèÇe< Þs²1û ‘£ï}Þj=áÕÏ1‹Jz‰ñgRúĈrã£(ß•ªbcßMh“í{¹sÕº>Ÿªés¡EÚ6 RŸÕ‹ñ9®½²3‚Ÿt†¾pD{u½O=׃dPB]j{Wk“–øfFKdžsgN$,˰0|Ú|M½½‰,IÉ–P»©÷Ðÿ^œ'+âÁàô]VIÃhnË0?õ ËçZ—ÁiéBtª8è§½åæ!*Õ9äÜâæ=‡1Þ{íÞ5nÝF±}ýØUN„ÜÓSÏ 6uÜ¢ÅÏ »Åÿ Åîº endstream endobj 308 0 obj << /Length1 1514 /Length2 6776 /Length3 0 /Length 7774 /Filter /FlateDecode >> stream xÚw4œÓ6‚hADÔàÖ;«×5Ñ{¯k­µÊ.kõ½ !zžh‰’BtBˆ :Q£÷è%¼’{þÏ÷ó¾gÏÙ½gæš™ß5¿kîs–•Q[WÎiUF"м| I@ACOO€@B| +«>íýËOÀjE¹Á‘Éÿ@(  `ôµOŒ¾j €ª» ˆJ ˆI‚@€ $ñ‰’Áp[@ƒPE" n¬ Hof¾îó×#Àá$$Äx~§rÎPF`´=Ôùº#ìè!!p(Úû_%8¤íÑhI~~OOO>°³“áä<áh{@êEy@m_”M°3ôOj|¬€¾=Üí€Òí FAk‡E¸]§¸#l¡(àº; §¢h¹@€Õÿðàø»ÜŸÙ¿ Á¿“ÁÒÙŒð†#`€Ü h)«ó¡½Ð<aû vrC^çƒ=Àp'°Í5à÷ÑÁ€²œ¾fø'?7 î‚vãsƒ;ýâÈÿ«Ìõ˜•¶ Hgg(íFðë|Špr=woþ?/×ôDøþeÙÁ¶v¿hغ»ð à®îPÅ?1×.‚|0(@â !ê @½ öü¿è{»@~¹¯9øûº ]»kP¸ôú‡À× ìÐ(w¨¿ïþm¶p°Âà‚ª_»¡vØ×÷‚{f kù  _Ÿ¿Ÿ,®f‹D8yÿÿ}ÅüÆòºº ÊÜRþ;(/ô|yE^A !!ˆ‰Hþÿ.ó÷þ"ÿÛ« †ÿy¸ÿ(¨‚°Cp¸Þ_<<þÇŸ[à ü»ƒ&òZÎP€ãõ›ƒD@ë/ÿóüNùÿIÿW•ÿUýÿ}"ew'§ßqŽ?ÿOì wòþq-gwôõjh ¯ñßP#èû¬µ…»;ÿwT ¾^9ÌéïAÂÝ”á^P[m8bÿ‡Šþº‡ëòNpTéÿõÆx@ ÿŠ]/Äñú­âv}[¿CÐëúwK%iûkùED0 ö&]+LPDð¸ÞR[¨×oqü|$ú:¸¦çØ!Q¿îTT àWøåúm‰ üº[×1ð?–ÀùÛ¹FÚ!ÝQ;®¥ÈøSàGþ¿¶Ðö((ô?â¿Çoó_„ î(Ôõ¶ÿÝ5Û¿ì߯(Ô !˜EB¤B^‡6žTËÑzò.}ÆoŠJ0éŒA³åùÚ«ßÌx8ä*om[AÕ›ª=^>8êG˵}ÒïeÞš4“ò(¡Ô¹(¿Ë›ßsºß ƒÒÛ"i`_ÄR£oï$êБX›a›±'^„‰µ ­T.þlr[1•Øœâ#RÆZtœ\NÓVŒ #Ë<ú“‰9i<Ê,Í]_ÅàËO¬xü±|c,õ©÷¢Y|ú§oߺ³º:S…~y›Aým,¸$R™Óó¾ ß% ¨µ»´kâ}üë”Û}RÂíãôìMz…¥6d~ѱÃÇ]‚38ʦXd »é•Äpl®%¦JbŠs߯¸„=J'‰sù3©~ó}l>¤¾bw¾7×ZZÁ£ÁU(LQøìÜR@ÏRœzX2ñ‘TÁÎhEƒmUÂè£RTˆ‚°VŸ‰)r¡ƒéFX/‡Ú7Ú4ŽÀÂÇv7ïu… ‰¦Ñ½~FtRñÞj³øözY¾—Äp Rþú†ï»ßMI:÷3úŸh‘Cš$ˬ³G=c£l¼(ªëz6 X->HóÁ‡…QÌOXÌìã€Øxˆm0§u+§™2€¹àÆÀÎã33&îæεÒê׬Gó[¤xÃ?üˆ)a-öÏ/JˆÇÓh¾aÔ FTÕqnÓ^J°,d~‡­çG½ zƒä"=žîéBxa•Ïg½Z…!dk†‡#qü]¶å’9Y­¹ƒº¡Rž$ÆxoWœ6ì’?4@¦Õ{$Ô·´ˆ±çB¬hKñ [Ð&ûÔ]:sõÝZWœËŸí½o¢‚¹³]ó¿ñ¾S‚/WK¿{•Ú»6êðE9L.ûÔ¥Ïpœk§¦Õúƒ^˜ŒŸ"dÓ„b}ÃãÖg¬èE^î&Ï…‰ÉU÷š»¶fŒþsA:½Ó¤¤Íw‰F)Œâ:Œ†o"TKkW·^pÙI ë9:Õ¹ åø ã·œáÓ"‚÷㮂i=>M)³­N›ˆÓ9¤“tùxÊ6¬ƒüwÚ§XÑ”)ÓØúI¡A—¬R©.‚:rFj¡®bG¢äµ¹vÔ“²ŠY7¹ªE}ž´Aëœ3¶Ceð¤’*ÃÓ–h ÕT6Ž,ì*Ún÷Z[–¦Hê” Ó¦³m‘Êhê…ÒÆSbE× ™ç<41Lã9(ȇ°Ð=vM¨÷ïþ,ð½‘U!36C¡ïÓ.Ñ=ðsëñ¸÷ÚŒEt´Kóì{cî‘MµQކ¡ÞìžÇ>ÂòŒ*ÔžØ`WaSš7j¦|ë‘–lkåNcÕ]´.®‹âå ò|ÂÒFÚÅe]ÉN ùæÜzûƒ§ôû0»‹ 5uÖMg­Iו¢µ@IçJöG¸ôÌÆæ'S EóóÖ§&@ ›7dlP‡â³¿Ü¢Ú—žbÃɘd¸ŸŒ½TC¸Ö>%)¹ÜÛ˜o—V]¹‡$;>¢áÆÊíã}VïU ƒý[%×ÊÉ"LÉqfv.†ç®ÊÃíŽyôJYën4´\JtÙ!…@:ɶø©ÄjJG©”d²p‹±DfrMNI÷âåwœ.÷Âf^Îb8ªö¬C(I‡vžéÝ]|þŒ¢¿ŸâE\²U y&£kò GIAí üXQïY-;5ô}ÕPŽç–c±ë˜ƒ‚‰ì˺e8MG´±\2Î7·NjGˆÄ½Ä’É ä\©<5Wú¤´ Øö•H%žŒlÇ×”à~´%ì𕘠W:ê–ì"BPZ„ãÍšU¾…'Ÿj}Þ~Êzh ûé4MýÜîC’´•Ø4h_žAÈ@µaÓC6U“–^T þb1Õ"!£F•–cÛ\5Dý²V¾WÕ1cŒçga€ó<–œùÉbëŒüä0û `nûÒ›×Sïêx]’Ÿ<¼¹±<*ξ/ýaI†ôV¦uøºO•ÒO" k=gó“aÈ[ –´Î Z p¡Ÿ©‘9 /vmnWðÆÄqªËèµöÉ©éÔ¼s0q´`qpþyŸÒß©pA?‘®¥š±NeÇ<^éhÕ`é{ÈÇ›´S iFyN¬$ù°ÙJr¤c[ w9Ok?.áúšsW “¦ )4Ã^43"ÜršïG_iRLÀ:IÛq¼aÄÝDaûIQî–¡wcýMê´ úƒ²—ûÇ3yCæò÷´/ò±hLE9óéîtÜVŒ‘®à›<]%s¿Ð% Ñ<æF]„i¥&ÞÖô®úôC8“ÊÈL´-‚þÎMxöæîú·‡Çw®’Þ&ÝEõÄË~†F;[£dŠÅi õúï‹ûŠÝ{ÙïÃp“·/ßòøÄ#(õ….a3ŸE<~›ÊÌ;AÄMOûáFWàs3g.Ýí¹ÕôY[szÌ…­6Yã8œ•¸È7ZSE“·j¿ÊU¯õ²t¾þT¸=3z«eæ8pŸ«}ñ„7ü%g’•æêÇî9-v¥„f;ͬuÜôbóç IþB}•EÝÃ%íú­‰•ž!Ö¶Ó‡Ôî¯}1ÊQUF©_-¸å¸8Hù9çŒƃ6ãê2ûK:Þ¤§ÜUª¦J¥í}â_ ›&[á4íñ¸Ž­Æ„[gì 5I¢>^5‡¡ûd.ÞƒÊßl/ÅrÃâ`=ö½>lÓ_—Õ_þ(eÞ»}ÞÉÅ#ªFÚéKýªÙ'ŸMö&T:£ü•€Í;éÈÝ8A¤AÂ~—j­ˆÕ?Óà[aé” {CŒýȃ€ém˜±“ÅR•Üe¿’|s¿gúë†M«çœw}»™ñ5›¯Y_Žb@ý5zDé¾& ™¤UyÐEKw¼ÏCr4{¨Õ’[LóýmþQLÐi0c¤Û]“*¢®²Ï~ª¥Äu‘oì>`’×颳CôeN(1ZK[Ø¿ŸÅmYº‰]«›ARè=¼…ê…sØËßøÑ.gËd.äUî…=›yû1Ë,Ì(½Ò*ã»kž°ÔíÉLªáêAÑ÷Wé¯Õ0ÞuöH½¡Œ fþœJNà.±ÈûriOâFEŠàã¯ÝžB:·_ŒÞ*;)ÎŽWÜÓÛ­¹EÓW’ÛžaƒPv¨ µø’~Qæ†Þ£-þ|>^Y÷&í=óŸ1×ëðNx Œ p3°ƒ9 F 5-ö«Ë¯ºt¨šåLƒì e¸ØÔ¥ZoS¶7’ø|ñˆRñ°7"˜\áQmvÁ^·‹ß%\ÞŠY¢ðøÄ6¼vÚ½Ãò°)ð¼nbAy£&»'UϬ7N_w~ï”K·>¯0VÙÀ²‚CÄáš ÔKÊɪ´"-’U‡>&kؤù¡W4´™~¾åo˽¤ß8³­ô,^+>û˜Ü­´‹"d·¹3€U…âÞºOÂÓs‘"°'èÒ”§a#çô]%×ÃÞè¿*ýž‡•Ú±õþH¼Ê¬d¤ÛW‚…$RÁO°d[Šó·»1u¿­­§P§„$æÙ€š7ßß`ìWw,)V`±îæÃ¦¬ß bzØ;eF<ÁÇ(“øCÁ)[-EÞ¼QDŠElÂt|ß• dT“Gl*]éOn9EŠGzëÂ~+ß‘? ‡qH}R‘Ÿ¡XN%I‘°tÑdW¼— z¢\ÃK³…Dä§5Þo=7Ë[ž.dÁ 8àõóuÂŒ ;¨]é‹D‰e¢]mÿUõˆí¼ÖÀ;ᣜÎáÜä=.bçÎØ/>¥;íyÇýçÙž:r\ßñTm¶"ÞßäLþ’¢Cü%+kæ$µAbH6©€š¤ÉWVŒU˜4óŒiñUÑmýõ’ï^Jn;$c Æ/“Zâ©ÕÇÃÕái5µ1¼‡%3ÙRå|.Œ¯ò–3w"eîŽÜç>5ö¨hù `u¡MrhÆ’`óYäÑ0̾mWipOQ z%5rØŸ‘ik0×ofu|6V\L~`êdåËAeT½Ï7ê#’{ÏÔd)­GIF^qÄB¶gC"3XpFV“jOvçÖ¼S8G8µaÜ– CŒz~œ³ì¶  œöRçâ§LObxVð¦&Ý}EßvD”ÂmsòxŸ‘Lm‚\e ÿû+oÈIä§Ž{Ü߸š½ïã\|(M‡ëd Qu²öq I’´ö¨¹|ïPƒŸ ͉1øì£4ÞøÄ×…?“Ju/3;r=CÒ­‰ÈÞÄ&_lHSŒ;LlYD–iïOWñcrpR«m,§w»0·‘7ï»!¢öÆxÒžò>.fšäI¸6ñÉMnO»¯«v‘I_~éj:J”§ÐóJ¥q¤;£± Ð-c³ô ŸŒšl ¢ŒPúV!(êGîqP/£;˜tæ'똻«5&)¸˜c–… ð r}¸HÑõÕ††–\ÁASɵ÷޽D‡WF=§s-GÔ±cÝS⩪ÉrFEeåíäÜÕãü‹ååñsî[v–!®U ü™q|÷ÞŠ>¡EŠžaìb¯y÷˜y­7bX¤R3Å¿S lR,OòŠ^ºÉV¤pøh¯5û#Ô“ž:"a<¹(Åzu°Z£ÉZú¼©®B,“}™W‡sä|jnv¼L\:õ콌"ªT q™ÌY5Bƒyô*8–ãlP±“wU`€ÔL¿¹Q£w´2r³èŠ~仺ª” E†`6Ó˜èí‘*°m³|/±ù÷ \ñIvïGo"ßø.*Âjˆj·Mà›,äx¥ò<|Ø¡Ùo¹ÂàVå‰SáêºCóØâ³3µÊwº³•äòùw¢2‚׫6NH ÉêÌ»â–Bß&€£ –ocï<æi¤:¸ÀjySrÅ /TíFÕG¢„uœÙþä膰û[è5R•™øÒo9ê†<{ÞïÇ´„X¬p~zpíÉM·íH¢Ãˆ§fpØvkgîyÏZ‘IL÷äÙ÷þ Ö7l{x^cµóøQz÷¥Û#xýÅâ·~$V¿Ø~ž¨iÙý¤ÄJ¾ Ôo$tø.].ùF«¤Y§2L4{nÆ$/ï¬"}ðv×{¾µöìsM›rÀøamW¼‚£Ý“Bv+)”€5W¬í¯‡åbOÈøÙWñn äµNT)!øHnu tÿ©oSOtXɬ„ˆ{LIûΛ¢¥³ºªd\wå²–QKä¸Þ¼Ú¦h[‹§dæëfÛ·¥„n¦BRz(ŽƒžˆñûlM,,ém:¶Y®ç…YMÌÄ4¯Çó¶¿#ßW—&r&©²éŒ³Ré[E î¡×ez4GiBd6X9ªW&úsÒ2îùžõº‚ÿ&/s“,®¯7ÇQ¨zB_œíŒíÞIÁsƒ-uñoœçJ"y‘ºÚò›¹8Ë_®ÿa[d˜Ò%MÀœ¼|Úåb_OØlÎÓÔ•­+d÷#*#Á@IÛ·ðeðfÒè;£Ç\_fÙµ}b¦^wVYitþœx•8Š;¶^¾ws²«ÈeÇ#£ÀïǸö1³ŒÇ›`F1„HÁ5^fl`‡”j#34u7íUËO¸nXä¬pÙ ÛÑtÎ'÷ÇÉ–%äO(GØsÒêÝ‘ÕZ3ŸÒ­w‹¥ð¦lX’2–(]®FckçÌ%Ñ ÓØŸÝªvkÞN¶i-I” ¼Ò®ôÞî½ÏÓË<+Äo]h`\|»RÞʸÿ“ÉVÂxë`WÒ@è§«ôé‰|ZoóÂb×áçpÓÐ} s”ÂÒÉüü —ë†Ì‘3✗Rî1Õ½«hڟݪNeXn¥!Êï4eÓÊv5/?<Øò} ˜^_è+át«´üOò}ÉíÍ3_¶ä÷y^késq&I !ƒ…°=Ñr¶ØéÝi“£‹Ÿ·Í QÅIÔãp•›î¦_=&¿^Ý’zdò¶ÊÕÃ8Ékò Øk"bVÙò‚ökkË6M€@Ñ^·`«§D“ñ,^·Í\Ÿyë×D“ûËWv=ÄD½,ÁJ7ÎãÕq•ùŸ‹óÌOcÇ å&?ωßÛ+]ö¬`Í:µÄ¼uW»€µ'Û\ä&SÒ3Ä=)«vôØ+1=*é¡f£»­­ÆÖç ˆTZSßõêQV8ɲՄœŠÛ!‡\Ñ3t$þ…N5òælÿ³‚ª„ƒ)^.'_íLÅö݇ï)¡qϦâVÌsÎë£\ Ó läÁ-9µø÷3ì±>//¸,ÕÀ°™\ÌÙË|¯¬2H3Ç7Q´Ê9hÙÊÇ‹2%`µ¦eù•"à=O£ïÈHuGT¶…*ÀΕäãvÕòï9,H±/èçMT~ñ÷jìñh˜¯–%?|Òu™´“Ô/gh!§­‰rÄÝENó2ó«œZåÇìrò YV²‘×fd Ú„ÅI7LxïðÑúH~Ò¢«´Éц®X¶0Ïû9-*q3ZMãè]sß¾>ÛE½Ð £ä“ꬼûûÛëóÐ{Sσ&D'½M!D£C=W¿•|BeaöÑÕ4cq\ÕQ|U!»6~ŽwŸù˜%ë ‘9óoϾ 5ŠXénï ÄÙr.ã?Fþ §-7Ä1QLg Ò·)ÏE=.&ßÝ]„­"–.«Õx£Ã,^Çv¤ïgIåbpŠÛ=÷! ¸£‡ƒ{Zü*ä’nPÐáå T36ŒÝñthá'übŠ€­‰`sØ9…?tH@‘¯‡®bÙ?©`%Œ¾gá}d7’8FeÈÇÇâ sÂVÌlׯ*ßñì_¨2E콘}ì–5Z9,/&H´2!¿'ªM˩ŶGJ–ý‚õ±DÒ|õ*üì:Tš‰OàG=ŸŸ˜ü£¹èçç /‘§ÇM%qw¢êKµ– ûés8±½è¢Ñ¦ã WÄ.C8ÜAqÕµ^ÜÅÃÑ~: xäHl‚'Tz'ÅÁ£U唓jê‚bó`ÌX&6mÈ1é1Ašµ—@ËÊÙ]wË¿‹Ãf½efùغ$’k__ÏÙÝqYܰ&¨¼8tÅ‹¡–Ë”žAÚ¨8£*›É^°Xlùj@ •=%qù&¶yrÇ8—¤D¿Ø%ŠK×j}Ly!ªIÓß6g*ì©[‰Ð.½Œe@”ó?AòŒ endstream endobj 310 0 obj << /Length1 1483 /Length2 6627 /Length3 0 /Length 7608 /Filter /FlateDecode >> stream xÚvT”m×.t7ƒtÏÐ H—´„¤0Î 00ÌC‡”tIƒH(H¨¤”Ò(RŠ”Hwƒ ü¨oüßwÎZç¬Ykæ¹ö¾ö¾ïkdz†›ÃÐXX†¾×@£0Â` ªgl, €@â" 17· ƒ„ÿe&æ6ƒ»{ Ð(¹ÿEPu‡C0W65抧‡F·=‘XKÉ¥å@ @ ’ý›ˆv—Ô ^ 'ÜF£àÄܪhW_w„ƒ#æê˜¿>(?–••ú(»ÀÝP Ѓ`á.W'B!HÀ EÀ1¾ÿ‘‚OÞƒq•õöö¸xˆ Ýnñ ÞŒ#pîw÷‚À_‚}ˆ ü2bnÀÄáñÇnŒ¶ÇxCÜáÀ•‰€ÂQWž(ܸ:0ÖÖ \á¨?dÝ?!à¯Ú`ð?éþŠþ•ú BÑ.®”/åØ#pÀ@CWム(Ø/"龊‡xAHÈý+Âï›C e#r%ð/yPw„+ÆCÄü%QôWš«*«£`ªh8 ãAüë~jw8ôªì¾¢:ëŒB{£üÿöÌþ—˜§«¨) áæ ×Vû‹re"þ×æÇ’ H$ÀݸÔQôWz_Wøo'ø—ùJA ¿+Ú°¿DØÃ¯~ˆý= ^pãî ôÿߎÿDÄ`0C@1À}¸Eüoö+3Üþ¾j¾;°]Íýúüóds5^04 éû/ýwEÕnk먫 þQüOEíø K‰Âb’ “¤¥@@à¦ù§‹ÿm5„ þºèߌÚ({4 ûGÃUñþÖáõ×Xðýµ2üÀž ¾še8À÷ïè[ƒ$AЫ/ðÿ÷üù¿Íý¯,ÿ¯Ñÿï ix"‘¿Ý|¿ýÿ‡â‚@úþE¸eOÌÕZ衯–õßÔ»ð?«¬‡!<]þÛ«\­‡2ÊùO8Ì:þ™¡¿»p•‰@Á ш_/@ ý—ïjá ÎW/«^ývÁ¯öé?TGAѰ_‹'&)@ÜÝ!¾ÄW­¿B’€?øjCapŸß£ ˆŠ Ð˜«àJ^ `v'þÕQ)I@Tù—é’DUþE²€¨ú?HZÕþI¢zÿ"@Tÿ$sÅ4þI¢&¿Ñ\êéî~µÑ¿GëJÕßø÷ë÷C‰?£¡7Ã^†7ŸT+³x /ÌηF'YtGIbx&òýu ³5GÜTì`•Œý†“eÇX¶N†|¬ÛsBfÒµò0XêÝ *;½§ûíp6šÙaX:#zjû‘Ñu ;+<+Þ”»ãç¥;Ä—_,þlõX¶”]\€â#JŽtL¼rnë:N¬×<¦Ïš2ÚÝ*ÓÓDÛtø'N,"áX¥9ŽéÔwÁ*!«ozº'ç]w†øÞSÎ*©Ê&Z¿Û¹ýÉï™èåÜ~åÅ£"y¤Z–"¾=Ú‰•ßßG0²AhwÀTSGaâ«¿³eG_úHƒ‘£Gþåd|•ž?´¦r×´t´º +/buôÖÖ5uj„œhïÎ¥Í'ñî.ËÌ>¯§uœØ´X"‹<…Xݪd׫ȴ8çÚZŒîÐÞd«Y ¢¯ˆà-í[óiøn®>® × n§¬Ûjªûð"4}§Å¼TŒg+CŸ½f8ˤ¡FÔ¸#ÕB ‚?„ę̈‹M;·S#rðQ–&ç ’vmîX¥ß¬n|¦-dô½4v–5ÙäAgúƒòÃ|² h± JrȦ>;«„\ÍG´S žÖ°ðŽ„_1ŒjdÍñ³¦¢úyi|¡ØéjPžéFýúŒ«¼™eKê‡l[µ6î4o>†.Ä™–‘dˆöyI˜V@‹ýÉ5¨*o}ñA|[­Øîëu}Æ)*ÒëŠèOw‰bUéݦ46Â›× Ÿ8ðK¸‡qà‡#rÒýÁTŽ…Z…áj¼m´ªÉ¹½9EC˜n—äº$:.NÖ…'™ÍšÍ¯Þ8Ï»'_þdò›Ž"6Ø>ŽÃا@{¿‡Al£³»€H=pS‘ÿ:‹=ÍÌïk4Ç<"OóUà¾V&vúƒê\Sè™®mØÌ¬!ß4&jJeG9«ÿþM7?xtl\ø½è a¼c=¬¹ï¹VcEÆ›ÄÎR"kÛ¹im+Kn庙õ¦:}¯žáøl“ʽz¿vršÊ’«õccÅÒå¢ïÓ¾ÅÔ1ø u×ù†Ô*v °ÆÐ~_É=ò泇¹nÊp Ú—ÕËagZã]í´Ê!ãÓDÕÎ)Tšºçß:R¶6¯îÜUˆÄžéåfº ßÚOÅ%6 ò2—è5ˆÉ’þ–©="¶»~8\ aŽ[µU×<}ùÖÆ_û®VµîŽÚS;ñFh }ШÃË„¹ìu•©åæo¼ÑD …8I>oqèÒØZÇñsJ_-(+9õ½’¡­?¬©Ìó—&zÆTÞ<×ïÏöÀ(Ûw®‘u«{¸Î(]Ïyz óÑK<Ÿnwÿtž™ûXŠ1Ò7OÈf^›çMÂÏfˆâ86üûÚkΩ;×\j˜CNîÕU§•Úûµ$ÞÔ¶L-ÍÂË8ï°®=÷5aŠÈñÎ$ìZrÃc¢‰ÒK‘ÄÓ¯} –š±Å»®‹$ hÔâ:ÏçÄ•šCTž?èüXÅÚ|Ð=Â4]áÖçµÒ=z«„JY¯Ñ7Tédc&øz­de¦u/\]0x©}OŪ¥ô1E,]UN™®†K»î[ƒåOõ0Eæµ'÷YpΊB‰„×΄ù-ŽŠjÐQеñ·›ôè™8ã;Øõ:ŸJ·Êu/t½¦™ýº(YNkÿòl9úv{ÏËOÞ›-úU›oK‹ŸÜ/²B}Õ¨:t“».ð*’D™hÌCºBs~÷<ÚKZÇ =ÖWx÷–å’Mqüb ÓÊ¥yKt”á‡ko—órAü ºÈ@'ºt½·gŠnpE#»ì[sDAPš˜žÔúÔFçáOeúÞ¹SÉøaŒL#}Èjõâ©h¥ŠƒªÊ”´9ìh¯ ÏØkS]d+T8aÒÃÅå?«ñ ›/rbï§‹4ù”NøY¸ÒrY$‰8"eÌ-J»4ëí]Tø‹Aé€U,¬=^§em&,]X€kÌ3·•ÆñcRlû¾n{ÆN $\ÊÒ]}~Øc·ŠmÇ·´Áq.÷лآ´/é]¦ðÆ:F:làÇD‡<CÔÍÄ÷RùŠwŸ?Ík-ñPs3žç•K’,òUŒ£ÿôËk^ÃY7SÇ„!µðÚþ÷ÛkÒ×EÜeV“y’_jÅz%›óq<Æß+·Vvlõù$’_“+ÔíôÓ3Ý <0Kùˆ]¨¹ª–9 ,=äâìVé„~ž÷Ý»¿qã`|u3ºßÆÁ^ÂÎd œ¹a ø†&Dâi*Èþvk¥q. hn^õ1Á×o b/›£÷LL_rF“?‘±˜=Õ7¾.ÀõåìDú±¸€P¤Ðá¶^w¥¼aUe ^j¢›i%î¾éNã~ÒQƱOº¡ëóBxÉâ÷špž}ocø¸ÿé¬È-òõhtŽ_@VµÑG1è2#~?ýÄÁQæ>ߎÄdV”l­ÍCµ‹¥,®[äË»cqGÐ$îëª~­\ן¾S…x=„ ÝÊŒIŽo-µ}èT+·t¬YÄöò³Ï7nŽ(á·,òtï}Û'ò™*ÀÏW$«»Qßìd„/ÜÆaö‘]MÊå)·»iz¨IK´iû¶LFò³"¶ÃYÛ“ã÷¹ŒéÝÄEÄ9Õ”S®PÄ ïFÏ6è=º¸Çj“jíÛ[Ó9;”7„q2íoBx¥KWs_`çм,é‘kÚò¼ÿ´†<Ôˆd&ÚYøÈHÐõÍu¨íBªÔòŽ?Ò3ínåãÆNÑy‹F$»\Ž»q¬›LÄÿÈ¿l¯`ó¹ºyÊ÷- Šš’™òýDmZûørã „6ÏÞ®°ò*×5*ñ99Yñ]V£ÅÎaSv¦BÞ,ÃkoFËËQ¡V„¡Òµ†Î4)s‡?ß6Ò0‘¤Äɳ/¨Ç|]y’ÔEQ™š7ðbçá{Hñ<¶/@ªªk©åºr †ª™xW桇Cåx,?ƒÌ)°ÊÒÓödý)(ò4>þx/§Æôiê>»å+yÃ-@ŸVç›ð.1ÿ|ˆñ qÐÍ"a]V)²ÞóŒc…•²kbø/¸—<Ê‘œ4Ãæ$ë¾7OUˆ gEò3+Þjø7¼Œ}ɲ­ñ­[ÈX¡Ø<Íg‡Ì¨ÅáΉ•Ïœy/]Æy8ïŬŠÎᜫÄ6‹#BMz³f:9F5À‡Sá8Ž'6ö¡J°·î‡ŽQÀÿë~ˆoô~RKLþÊm89Eg~ ŸÐ>uB©„l{jKsL«Ed—ºœC““› kiî³§ˆ2{Õ¢—ü¡Vã( ²¾ÛÈ.d{Ù_ÉRm¬<°%ñØú’ª(ÛþcÅ—ÈDKgºvýƒ J_Úg5©{`]ötwöMý–)ÁJyòï€cªhÎ|öFãNÕvÞݽw·‚‹!»"eNž“L¹ A¡²w¼=uwXÚÞ5†9Í™ºÜF®7NÙÝnbÅÏù(ß-ÇÉ\… ½?ñÀÊ=Æ:Õ"žEÙŽdÒÞd¹ÙNB½ë=Ú$y™]Aîïè%ÔÖhs—uš-¤Øà|N©.‰OÁ[˼ aPån–µ¤<ÿv>]Ðù•³Y«¸}t¢^â#¥Úä÷vÛEŽ«XÎõ®cÜ!4\¯­Yg2Ö é¹½¯q aão’xûÍ´µ>z”j0QÕ5=GÆ#;=2W5ßvngI k¦y_<¤°ÛgTC+¶Ûë­Šg›/F “Ä÷ø›Í úôܬ÷>ÓÆ±G§ÑðP‚L–°Á6—Ž;¼á•ùH——&† Ñ¢&£XÂæn¾{§‚\IOÁÍæoõ¯Í•\Æ Ê«çòN^C^x]ÌÏ”Œ¢½>%'`_ÔÁ“YOC Ð%nˆ|ÏÊC)©Þ3€òíø˜$¼%üÊö–N×úgÖOµÑÞ þô92õ,¬^R"gYhÉzט˜EŸ¶G¸.Vof©•µç?°±AÒä¿Û”JV½]Köwá³ô[àÀŸ(Åb§£ëßSåŒÿ! U¿ n›âc>xÏùîÅá{ )áG޽§Ì뉺ü¦øMÉ–ò$Z†×3‡“á+Z¿Oî4ùpcþÆó¦¥Mõ¢¤³éÅÉ/ô”>¶î>9øbÛÆÂ•œªVÛĘ́þ< KåGò¡½BP„Áè0eät'7vâÍ÷´"~ 2{Ož¦Ø>‰vezQX*éþ‘ûÇB®vèÞ±Ѩ5dzž ÍÖ)zÎOZî½2”ÆõÚI4]e |Ø—_¸5¶/‹$²ÍB¼TZ±÷nJ]c?Ö‚45qãH ãƒÌ¥Ð{&øäoÜuX‰ð9RÄñc@Ça—ˆLÑ R9±êøøÌ>*’0)ãÕyû-Ê’wâ(ÞßÎt­U±N"ÂoQøÄmpdò&ÍIº˜OHÉ­áܦNÉÓ ‘¶€ ëúR?2;ÆÝï‘/<ã^K÷_¿ ¯y¤É¢å¯ õŽÞ8ÿÒИÙÈ­ Šhïz7B@Ñs/³rGóFJOáwÆÞá¢rýèÄœâ„Ëᑾ_Ý^Öƒ{Žëæ¾§³¹•¿öÎ×tèOi_Aº¦©ŽUd¡q$G…^ 9nY…¶µ½çÈ;óPÈjMò_xÒêõ¬øƒÌÛí 7qޝ¥ S‹œ#…Ë®ï%rEÏ"r¦¶a Ý-€ \;ù,Vùó§‘;Fã^Hx /AÔѨ^Ť‹P÷í¼I….Í‹¨îÒze"x’D<ºÅ!Áb•¢úºìŽs ÍûV0³ôíÊÝn;̓žwš(ÿÎùÇÏ€G/ÇŠIÅY>á5«BziüÙFeuž~M²¨{ùö Sk­Á“žEƒ…&ƒÙ_av¬åAÜ#ܦѦ2´" ýý÷0v(Ž üçÆ‰¤cÜ13tÞó“Ú`jõ­óÚo­øbßí² à¬/Ã=ZIµè«$öh^·ÐCÞÓ<æ§ÄIÅÆ>¹ƒ¢L×d#Z~µÍ^ðx5©CŽô|lé‘,í&ò¼Û"\ óxg§i±ñ¤¨67Ëew­£éN¼†ŽŸõºÁÖP˜Å¬Ê['8ÊÊéÜΩwlÂWıib0~'ÇŸÐ^ôÒÒSW"yF?p=ûü“ô{îúg±'1Å/õλ )T‡…îÓ˲|þÝÌRŽ~„ŒZùvB¦[$õaWc]¯cI ¸ÀLGÚçé´gu‹ïGù{RôŽ?ù¼”^¾‰°q«Ü¢ú) MïÕUšÞÑŽy¤ã(xn {üþg¼æ‰A½GÓøy£7ïç›HêÛHV©eèü³]ºžû¢®í¸²@´‰—˜½–ЉžàuÞt±§Ûèå\€;-žNñˆÃë5Ö4P6Ñì!%^tÔÉÈ‹a‚0ìZ—4Ò†qÀ‚׸ŧžÅŠ“&›á`AógÚ½©· ,¶‘FøŸŠxôíK òä#[æû80ÓM»lË·ljevG6PŽê_»·rÛ¿=¶DzÍãåôÔj=EÇB Z°ÕuRH#¨N ãùd¹÷€ŽõÔÞüMø£kY×Ó‡kÕÐÒ„z¶žÎÝ,Ûõƒ³~p´°î&2ÒSk ïäÙîLù^œˆŠâG,»ázЦà-˜Vríó“”=Tw©üÊq„hÄvè󯪳^æ«r{¼·ß iÎ ‚?3}íyA¿j€Ü&gLÃrï,_y"ò­ÎCF6Řd¼¸nxõ>ã‹<Ó»­Ó~5*‹Ó÷VAý3çÛfÛÞ¯¯¿™ø¹ëå7d/ÙJL¡zo“ÅÃ@½"Ú¸sÀN_Óé'ÚiÜX%ãqIi 4zŸ2\»wLÝÞ¦]‡F-„‚/C&<ºÌ4¯m0{!¶Žô½q$<)KÈåKÎDó¾ eÖl‚%›#Äô¥ sÕŠìÄ…5¿RÂj·å7ÎWòX–(ï=XQw‡V É+˜·Á õÆs<­‰ø¹|ÐÏúÙƒ c^ ÐÉÀkcŬ/©éOå–ŠI5\ÊÆ©'(åÍ&uú‹.îw!\ßü‘JUoßZ×q”çBÓ‡ ~Lnæ_ÖLa)=7ϵ Sˆ…Ã8ÎãHó'_Ó°ê¤KŒRÌVü¨R³§áà¼S/hÁɶë~bìe>!PáZIK*t‹LÿÕk\áŸSÑ󎲜÷™+9Õh’F”I€ìö^-ÔˆÐ/ú™”¼0"™´Zf¾¾^IY¦ºµäÈœešj¤pçz8$ôrýûµàÂÈ´–:$qU6’÷õ>Z_–¶‘б.DÛMv pcÜt3?ÔJÀøiŒeçêˆÌ>'ô§»-of8ÕVÀîï'd‘a‹o§[]žÖ°É'›†]CÈs9%#…ž¿øb©D˜?GÌûƒtù‰ƒ$MbFd÷Mù‰¢,û«ö£%²çQ..ìz5‰ƨu*1íe?®Ü5{Ì@OLê'©”ãù,‹S±ì9)ÞÄÚ€Óbl)Õ¯;+É(2Õ,?,Š5˜­~åm*´Î_\Èx¡½cDÀxcCõèà1‹É‹y-ÉŽÎk¥½½×| —lV/+Úé¢e:>}· +œ–U`â—ßQóE}B£ßËžyÈOE_ªU&}{É«ñkô0Üé^…Ôc-vïK­Ø x³øa*²¯ÔÀGAÍa©_ìî+áî.T@½â½¤¯µ®—F™žƒ\ñÓ>…¼ “IÔ”­w•2y>L@¯I5EÛ¨+•3*Zê¿,Vj–ÞÊZáqµ®œr›(’É;N­~p<²0b6ÁŸ¡Õ¡+aÉßÚï²&×™ þÌÉeÄ^«¬s«][5Ë¿ Ïõ…9ü|)½“òë ww–ÂÉ%Í•<@þ D„® VR»ÎeéÇ[~CÈ?hwâŽFµ¤»H¿0lókþægÁx endstream endobj 312 0 obj << /Length1 1468 /Length2 6304 /Length3 0 /Length 7301 /Filter /FlateDecode >> stream xÚxT“ÛÒ6ÒAz•j@zHï½÷&5  ÐAz•Ž M¤#Ò»R¥7i¢ ½ô‹Ͻ÷Üÿ_ëûVÖJÞýÌ33{ö<³“v}#~0Â¢Š€£øB’%#  @HHD@HH˜ÝŠ‚AþÆ ÙM!žH(.ù %Oˆ= )Û£ÐD éE@1I ¸¤@XHHâo"ÂS lï tš8IÈ®„p÷ó„:9£Ðyþ~p¸@ q¾ßî7ˆ'dèØ£œ!nèŒ {À‚BP~ÿÁ%íŒB¹K úøøØ»!žN²Ü|(Ê`AB<½!`À¯’ºön?¥ ²Œ¡È¿ FG”½'€`PŽD»xÁÁO:;ÀHC çÿEÖþ‹Àøs8 ð_áþxÿ …ÿv¶nîöp?(Ü à…AzªÚ(_ÀþE´‡!h{o{(ÌÞMø½u{€ª‚À]áŸú O¨; )€„Â~Õ(ø+ ú˜Uà`%„›ŽBþÚŸ2ÔBŸ»ŸàŸæºÂ>ð€¿WŽP8ØñW`/wA8Ôà ¢¡ü‡ƒ†ÿ9APQ! 11Q â€ø‚œ%0ös‡ü6þ†Ñ5¸#ÜŽè2 APGúƒ0iï  <½ AÿiøçŠ€¡ Àâ…þ;:†8þµF÷ßê °BËúõúד5Za`æ÷oúï jª˜©[èðþ)ù_FEE„/ €_XÀ/!&bqqQ@Ð?ãüëþ®þ7ªoý³»ÿˆ¨wD$þ*}zâýG\ƆðÏ º´ž!®Ëÿ¡¨ýü?Áo—ÿŸöEù_åÿß;Rõ‚Á~Û¹þ"ü?v{7(Ìï­g/z6tè ÿ7Õ ò×@ë@ÀP/·ÿ¶j ìÑ3¢wBëœx_@èþ_8© õ…€õ¡(ó_Zú»è0(¢@BÝ;h/!¡ÿ²¡G䊾[è–ý6AГõϼ*pük…EÅöžžö~„h W¢€ zVÁßß À(´ ]cÀáIø«±BA7(Ü ù ý £/ êŽNð7&z ‡8ý¾‘0{¤ó¿,@ šïiþÝÀ_à?6òòôDÏïo¡wþ÷ú÷eøB@„ ³T„ËëˆöËþQÜå•ÎØd‹¾QÇÜógm¼lµ)E;pÕá§úóåQ“³ <‡—c¾ßæ†.e¨ç£0TúÖù ¿¾u‚0ƒôNãâOc×ÈR ˜Hí¬°­8ÓÌf¯#Å»E¶^mÝt"·,%ön€’s2– T‚B^çæc ¶ÔÅC²D O«L/c “ñÌÇÐÄ Åöxºo~kV‰YCŸ>½Ëíï{*rR¨ÕS-VEIGå¯É’7œ:@G’«Ù„ÄàP=W*OOf¥+v‹âX²_ú>]Øß–2 âÕफz[ïÑH£WBtV&¯{é„Ñv=Çø› ñæÔXg¾š§lŠìÕ`Œó¡Ì£jX~6 3·®sñ§Î4¢´ìÂBóCc<Þ£p›Í‰;—v Ù)@aët؃Ï/ÅôaÌîÃŽf®¥Ó”ôì”úXº,.+^Ã÷ø¾¾èƒVšßMƒŸm7¿kêŽ>F°2QO…&›wdïõî¦4iˆž¿'7åQCÕjÍ!ºl¹“ò’¦ƒ óó°õÛ:Õ¤,å%æ'X“LEH ŒÉ猵·02u ,$#B¦ÉH(]Ë™^}x)6ò\&¬Y&ýAˆÐ£Å‰ã[ÊûIdµk· º¿áØ$;x ãÛhåwZ:Û•êrj¢î'C÷’¯·-¦BÅg—ò˜ÛR–=z˜ï˜ð=ñëÖYÃQ¾¹B]Œ%,öI×Tðší‹¦ËþDÆÌ7û=œé[¾ê WçØÇ”Cj’¬Å°ÊÆ$ÑV¥OýÔ±&VýöÚígÍøžÝ#Žg߈€VR÷×CÝm¶tÜ¿Wx(*(H9ç#%DÖªtB8$°‰bLƒ•‰¿>  ¶Ÿhž… `8;6®Ãä´>ÐîY±=nŽ#¯»Rs?>ïaüDÙZË(¨9àºÀ*S}ðÝ[_äãgAs=±w~ ˆ®ÚÃG{[Öf Êa:-¸1÷—KO£šÉ -’fF ÍõU޵o„×l…[nWµ”#ÔÓ´¾StTƒ»œ]í^tmâËó+3Ý»L†Ù*ONJ²Z’¦1Ͼsg¢æ‹áÅ`~¶zVg“R¹³º=¹•4wžÙqo’9Z™E} 2hM4M¾H7UÔæX$=Öx£îck€ÞÏ $:¼E;¢žø¥øôæ;I$A„QÑUª¡ÿ ÊÓSÇ€è reçgÒë…YY«Šéû³AWoúòÂŽœJ§~K«5¶¯¦_É[ƒ˜¤ÕÂéÅ=8Ãé6oiÅ\ßwÕ“¡=øQ)?kH-ûãû¤Py¼D»éŠù>‹‡DßËê îþÅUÓØüöôCD[˜Í[GüÆé‰5ùXzÒz²…#"â­`òêª w6‹ñFoˆ=ñ)æÊËÃ…‰ºšÐ#Ö©¤íôk/ £XBÑ“,1EòÅBoøb–ñ~UVRíx;kääE9¥µ î(pP@Ìdÿ |þtïcÆl(É­›rý˜;|pq­~úóL@±nyÆ‘3;ò[ÅÎq£enE·ˆ&l}ã¥é‡õ±ð.ûòlë³m¹>"̃T,-Ó™L,å§^Œw·m)®áÎHD²ÀKÿ€ÅÀý‚àm2ÃE‹§ØEû[©â:ËŒí®þuïyf W"?òDšõT?w)zåÁ¹5@š Ý0wBòØ0Âúå§5%9Vö°@ȧb–íÚŒQ±„ábCým¶Í¦ÉŸï¹;UîÍoƒ9_ölt1ð·4½Ædè°I Š^èbˆŸÿHKä6YmyMß[¨Mò`üÍÙBhø´aAµ€ù2.G[½ø}«ÖÇ³ÓÆ<î̯xy¼s‹ ¿ô¾Ñ¶âüœ[„”¶:#ñ7vüòuxB¦¸7 œg¹ãµçå(£²Á"R°Ü§ZsjlJ®p‹ðÈÞ W]³‹7ªóÒÛŠAu;®u‹=xˆ\fÆm„çÙÉ„0®oöÝ"Ú0âÇHw`náˆéwûå÷é 6Z©«" üžQ¦%}ð¾KqÄû(¹(Ÿ¹÷‰J(ñýë¬Tþ½9Áªs&š=Ô|$Öµ:$;jA_©~Ç[÷p‹UM,ˆ¨dŸø/?ϺX @›ü&þ oàV ×z‹éÌ—å8µ²—0ñ0-G3*ÿ%Ï|Û™ïj¬œ÷‡£Ìu%\]wzÒk£Žèü?Ö5.øOi÷XF¶Ä*ßbî¿ÏOúmEHåÀ½1ŽÞÒèªùTa`%ú%~LÝ»ºùf…õ'-o;P°ÎÚ1õ›+ ãP_ä˜N!S¤~,Oýs¤<©Ä±¤ÃÇõCôæKu ·8~Y”5a¢ç(ŒMˆiþGh}e©´‹‚"ÖÿtëA_`W±,ø§‹ŸqvBhOƒ©ÛÀæÓ:Ò'¥!º”Ó”£ù7­Ù·$üqÚ6Œc”–‚{QZSú2£pJL<O%âû=Çg4 \ªM´Î)}] ZøpG/y€5³¯¿õhäÀ”µ ,±DB/õùሳö“Né ‹Že\ÿ>Pð’$>_<4žGEôÞSpô—"DbF€µR…,Û,U'–‰žˆVŒi—¸÷üºßCF‹G«'’ú´| œ>%¸çòm(IÂfãbžuïÕi›Æ>:{÷óúÒ˜ f?FlÍNµ/ÀZb—ÜVnûÊ  ÊL¿îþæ¼/‘y™Š)ê'`ž„Å85úŠûË&c¡qÁFÉ9¨•_èZY9çò)¸²Ÿ.äO[¡öŠiå®GlSÒž}¹™Á»ÄôÍ×-óæEô…Ý"( ?¡ÞÎØÓ÷bû¬Òî1…+ßSy–êî^­ÊSYöµv)ÓûÈSo<‡ß."ŸÂr”ç©fØ7—üÚ¹%;О-É3º¤Íäˆ9š@Ý#‘ÊaŸê"ÅË@Ý&MÀ=ñA!Õ©§F‹g7Ô\«sÑ´‘ÓÁòtDé7üð|üvÝŒqûòž¬äEí±eͽ£“ehÙUɱ$RúÙÇfán–/TK&ÑW9÷p¿‰šFì9NšÄízè‡]\OÊüŒÏFÿžéÕ ÔïÁÝFfK|)eN ZßHã!dâurWá«á{+èR),J®4&žóu†(õ(£ºáé<#Y°ÀŽ jÃ`˰PaÊ0w¥5S€•ÑBäLO×E¢ò²>ëæ~r¨¨—¯©]Íýi{¼«0,Rºj@½Ó¥ÈlzöˆíXB¥°•&ÙE†ð±µ rûY€Nµ-©¨ÈE±ê¡ÓtWÝýgŠYÛë9û e•+¯Ç‡Iï.¿Yš¼ß€Ç]”BNcÕ׺‰“”}V[.­‹Bˆ:’©÷ÀÏTR©‡Š{û„.Эd‘ °Q›®l9Ó£rÏý]Ù\]Ù¬ïïUScƒ› ®ªÉÚ”°Í2äO†O¿‹<;ê~fPý<Í`3+Ûa¥ŒZÐýôVÃésFã4NÕÉض?fÈS»à{”ïñ~ºi%pøKIÏtåᆺ¬YAÅGÆiê÷r_|á䡹ñ01¾?AI3ÌÄ»žâË• »Ñqç ;žµT¤¯¬^úÝãZ«¶cÿPÁ@VÊÒnÀœ+(Ä\öm9sÜR¬ä}9ãùøHeùÈ 5ùÁIO‹1ÁàÛÛk*úÏas¹r»`y7™µH}Éî ã ;N:c}ÖNqž”øÅJ&Π§{] Êå&_•œž¬+‰dB¥¨q^¬*=ÌhuçÆ®â>Çý‘k{7›¼»v†«å*§¸á¶ŽN+aC]±G¿7GcõÐ…Òò†ˆ.F£¶%²ÎÇXß+ …ÙÞ:^s©Ÿ÷˜—ÿYUyÉã§µª_M.õYÛ´Æ¢¢x+Û§,:!â”rB•\éçøP0C¶v½”“+žÄ[ . þäx˜Ý«¯‡Rv3Ô[› øê’õ¯ž¯X¨39ÓVÛÔš} m,&³éHøŸ³©–½ÏPW^81¥—s?Áó›|ÚB¥¿Ä®*ÓÖ=Я{¾p^ ¦5¯ï\÷H·Þª[cÈv7&D ÿؘÆiÊ‘`‹@z:ãIüuè-»ûèoeà¬&gûÍÊ'6» C\Ò0¼ÁËBÈWu…] íO^šâ"Ï‚ÉvëO¼Wv»Î‚µÍru¦—Däæ’ÊuN¬¿IšÑIQ‘{ßMŽ$ËÄ1_•‰P¼›J[jN™$ ¿¢!%—Ïb\¸Ý„¤ÙÇ:7±^ž*3i÷ãöMªhý›¸Ï”¬ŸLuÏZ¨ƒVç#âTƒ‚gmŒ³ñ²¯$ýúôÖó‹ùüAFíP̽ðý4qŠóÜKÍ_JËéþ‡ÓÉf©&/nÖ:©«FéÝÞÃÇ×_•ÕÉui†· ¦ª²Š™ÔÉnábžñ~Ô2˜Ž¢cš®œ”Ù ý‚ÜY:÷EhZ¯ÌU°Œø\‹é}zœ‚Ú%?.4].¯ã}I^Üô²êÍ5“x\ 2,ûÕly¿ßÖÆPožq~¼’赚§Óª n/™è[RôÓxŽÀ𤆮8üGéŸÔ*Öçä=Ý%.¨ÆÕñÞXær¡E•†¯-ˆ¿Œ¿äXY÷`Ž˜Ý‰Ô›O¡q#ˆ‘XuL`hÕI;‘‰Ð•v¹·‰ÿƒ3l«·XE9OòF*è.éqäCàg Y.ÉyHR­ÜydÔ¥eÖ}f­§hìò¾í¢îò-RJùø\ã—O3œöç¬ìýZvZAŸ ß­x)Gå¦Å’r„Üô>¸™-mÛr ÷Vñ«tñÊ Š–ÄpÀ$ÎÌ[ôe'àNgª[’rݨ'óɸF&zc ~a%7«âÏ•zⲡ®fW®Å…å˜ÃæÕœá¯™JhrI©»¥MJ_Ïé.>ÐF€]‘s$"dѲDY÷è¿dL¢8ÍÓÁÔ¼*âµÇºë¸øYàø}Ö'ñn-Ï£én÷!Ëk›K¤.Ó{Ó=¶ÀŒÂµÈ8ÿq×áNy¶“Å’¥Ò«ÿL\Uqg¼×EŸTbõ¤Š5ç­Sšbܳø±¾ýÃÄ3)Eƒ$½ò4‘o]<Š·Eê½àmXlMËý$»?ómõp!?ìÞÞÍd{³lÄ/Am Ø[¼¡S É“›;0¸;UÓp‹™lßyË:®Äḋàf§m·ÒvWXzòr4£Ÿ›lÅØ]Qc5ž[C§Yð£\O¾ˆ]'E#li‡UÒ0ï5ó¾EÐam²çDÇT•zHHô篫Ɔ°™„¬cFPy€lâ²·ñLÝXù³µÀ¥"ª¤'µ´~óì0y–0`ЊzZ;Î93Ñ‚‚ºŽ{!*îJ½ü#í{0žzêC ¾—¾cgÈj¤ïA±zž´ªùÚzô<ÎèséíK±‰;‘n|K“ÎFüf–I$Xcšw8›j.†dÊÖ?úèn<«³‡UHƲ]ê‰.ë¯GøôØNĪűh-‰ÄN ³ÚlL~sòø!!Të¨ÒÏ%åÎ*ócÈ4'㪆<˜QÞ ]‹#ÐûöeÏŽb¿Ô=53 y¹LCŒV)CëF KЧæ™^åÇ!£÷l¯ ¾3O*iŸž¦4Óøfú|î,aŠTm^ÊÁá ~ı®’&;Ø(e‡MÚGäýýòî‡jc«Ð,®õQ3ŽUí© ½KÂr%n„_Ü1ÊÛwFÒ lBãeégKõÚÌšVñÂwë­^”õ<¬Ú÷3§˜ÏÉš˜ùk%².e-f=<º·ÑŽ9\Nò>ÖŽ%¦YÃÝV»Áöâªßv˜mHD¼_ ¬êåxOU36 ßò&"ô¿Ú0n^ºZøDåpï<ç–UŽ¿ßxê 6ørÑuFô)ØPaߎ«/R> YÇÏL¶ë8f]ö*¥zËO~³ïg‹ÉÊþï¿zÔ¥@ÇÒ~Šâå0ߤÖcùòè÷Géøüàìůõ݇Ý£˜›¬™Áœ^‡CÔ,²‹"ß…êh{Ú_ØÌ¼zr‡{&‹? I/©¥FoöJ˜Ì°¬»žÔ÷Ýöþ݃>ü3E§‰”Õö£›¶¼Ö¹ XŽÃñ¹¿TKm¦†ßÌC•9œ·Ã»±îže®:DMò¸òÝŽ7ÏEÒ3a=C±(£‹Í^v¦ÐîmAwÃË¥…7¬w„¼3U ©¢—¼½ 5ÈRËNz|ªÚ–Ò¯™Ÿ·b ^ÓŸ×Á(ò]úÎÉtôþxÞtdK!«Ø(µüêRÄEl]¯]Шìâñ­AL…§Èeth”ÜTü¡š ÓÏE’Sô& “ͲƒÀ˜¹wi¬¤]f­ÏÃõn¾N¦ÜçÑóÿÞ*j>u=©´à¸^þ8??N™´¿+³'NñÄâNVýùå»ã]>QøÆ²j\º`®ÜõH\Ö ±µ=R ^—gëµqk`R"ùçh£œŒ1óýgÖm·eóK§[Ï=+N¼ÁŸt}Q½ë\Î|ÊKÏr¨ºm˺·½ Gý¾0R®dÚñî,˜É!°ÁR!•¯9ò0ÞU*<Óè±s%¯½<ƒûùøæÐ†÷µ‹võ&”Ló¿Ÿ„QbÕø=û‘yEtiDCgùm'õ“'7]­ô¾ñW§Òé áé(>zgUx°+¦‘—RÿZ^XÉÇ[—›Zò1¥ë·Pê Vâæ &ü;Í5§ßs¨Ò”h¤ ¹/INVn»º×Ñ—òì“Ïç7ß>KaÙ¸ÄÏMï°@´\“Ed‹YØWûíV”Îj6Zá¦ê7ƒmþ]O]¦Y99±Y«z´’áwt`Òfko{Z Ȇ/TæyŒ×½ºÇêɰóÈwLíúλ{ÝJzÖào ÛM8÷°ÙIÔ®htšŠBüjšÛ¿ WÆóæl¶+ÁÀCÔtØ÷Gs¿Ñ*÷öò­g™¬¥ú¥/ ^#ð"Lq[-é-Ú¸–äùœw1Ök÷ֻ̺±ö&ßø ÉX>±®zóÖý{A"Jsï;Ï‚R„õa‰wÓÈŽ¼tgì±KyÙ_S'˪à ÏQF ÚX©Ndï;É#ÙquÕŒ&0ö”"CŸ§ÛTϱÀlGñ(sŸ£<ÁÈyi[RˆÇDÑW÷¹ùîlác>ÃgØü¾lZ…õ§úçRš¥ƒœ›à‡=¾Ÿö3À7ŽYŸè®&éwà†3¯LÌé6É1ðRsÀ’¡ßEO‚§»?Œý|-ß5¥ }…ãÖ?Â`@½% 5/£³i”ÏNªÜŠóU;òä¬,U]o~ˆ³^1Õµ‡‡@±ÁÆ­¶4Z@Ê[³I·ÇRçñ™Ø7QŒ [ÉæÔœÒ»›åTˆ ÊŽsvâBúŽ×¡lÚ­s?Þü$½%þSã<ùÀÊ.Þ endstream endobj 314 0 obj << /Length1 1434 /Length2 6187 /Length3 0 /Length 7164 /Filter /FlateDecode >> stream xÚu4Ûýû¶]M©MÑVìQ"ö¬Ú[í´‘1’ØÔÞŠªMµFQ[QõXµ«¶ªQ5Š­ª½Ç?Ïóû?¿÷=ç}OÎI¾Ÿëž×ç¾îo¸Ù Œ…”àh;„:…e*zÆ–Ò@0X ‹¸¹M8ÄÀm†À`‘h”ìÿrPÁ  8<¦ ÅáýôÐ( ¶‡ PD (")+"% EÁ`™¿ÑY *Ô ê€Úh àVA»ù`Ž8|™¿|0~ ˆŒŒ”à¯p ’+ƒ„AQ@=(ÎኯƒºÑ0$çó¯|òŽ8œ›¬°°——ꊡ1 ü‚@/$Îh„À"0ž8ð'aà]¨+â73€hâˆÄþÆÑö8/(Ä.H…ÅGx à _h¬¥ ÔwC ~;ëþvþ¹ HäŸt¢&B¢~Ca0´«åƒD9í‘. ¾º.çBQðŸŽP,õ„"] vx‡_CêJ†@(žàzXé†Ã‚°H—Ÿ…¦Áß² ®‚vuE pXÀÏþT‘ í>¿'ëŒB{¡üþì‘(¸ýOp7aSÒÝ¡¥úÇþƒ9 p@ °Œ¤¤¸ áDxÃ…¦7ñqCü2Šü„ñ üÜÐn@{< DÒÿøa¡ž ãðû߆Ÿ""@8†Ú!(À²ãa„ýï3~ø¤7ÆkOþùùçÉ//8åâó÷_óVÓ46ÔW¹õ›ñ?6ee´7ÐOH ’‘ŠˆHK¥¤d€ÿNóÏüMþjEþiüŸŒZ({4Pæ7üåýÍÃó,øþ¬ ?ðßî¢ñZFùþ#}k°†ÿùÿ^€_!ÿ7ÝÿÌòÿ’þ7¤îáâòËÌ÷Ëþ˜¡®HŸ?x){àðk¡‡Æ/ê¿]Í¿WYGz¸þ·U ů‡Ê/q!qXü7ŽÄª#½p$æø[H_ÉB ±ÈŸo|ü_6üÖÁœño,~`¿LüRý»® ††ÿÜ>Q I ƒúÀx‘‰âUà'‚_S8Âû—¾Â ‡â9íÑÀϱŠ…¡XíJ´E-‘|ÊdÙwq¾‰^>*Ú/è}Âò4Û¸%Øx6¶ºƒËcHCE»ä¥7„‰ÊE÷Fßý¥ùlG¥¯z®÷[ÍÁkMÄ—¢ Ð;ÓÞ[$ƒ¨¢÷áœY8šø©£E†"µo´/ ›¨ç¹¨m³aGm"ñlÊ€³¢ b·$ž$ ¾uטe©ì)RHˆ+»ííä8…o°ÚGÈmŽ+?¸uUL®hÞ<=»ƒ¹´}›rRÉÜÜJ“ªê›Õæ Èj6þnÊfS‚¢1ä¥7ƒöæ‚C·“ ºÄläk¼öÎØà«Í\3%¢}‹¢œ ©Y Äe?'3ÑìK EHîÈC~(K63ŽE1žN‘ËŸ¸¾ÞFÃ@÷Ù5ðe‹”Ø«æk°œ¦é[БK/w*X|ôV–„WÙË’HÚAŒÂÆöþÅ`MÐ;r7Í;\>¡5{†Abl§pLNØz¢ÁMYÉL½‹ÌÖK2áT:ÍØUæ¬ãÁ GÌ5'- :´‹rÐÓÔ· ¤~@ªýÇ®c™KþyLeQRkoÝ¡~>pÄûa[Ç=‰”VËiRô ô˜¹Ðœj0³ºÒh¦±ØMH’§ý‘¦ZÞk%x %“-ऄ%È_½v­ÓÆ·†Í'Î5ô8ò{¢Pò˜üA.mÙÔöâ·Ò•0½2 ÓA…hd!Ä!ØTѱ_²n˜<Ò9"0,2’Ä\±úÃyÚÓ÷Í·ûؤc—]>RÀ‡ÑFy2÷•÷I¸Øâf±;—UËÀ![l—|º¨¸¶ áó ÏËšA™" Dm‰˜/g‘³a¼!Ÿ‰m›%LJÌû[Sh¿SZ[ºnYÝyîӘɮ”€sç&ѬëLïÙ_íÕ½„kÉj°Ô>Úœvµ”ë2g^Ù-åÜ}_·Bi\à;L!9_ v³]­»ûÃí¤Ä]YHKÅ;}8ÍÀû0rv +Æ"é¨ó¡s­Á²‰aJ·AmÐÚdzªN5Vñ¨VÛªæÕ†‘ôØùÛþÜ3VïùïÇ(À:¢ üÓµW›ùï¹xErAؾüÈ5{dBSy(y#Êžðºëö§§OHN‰¾P ÝÊuÕ0€N£;!KîÉž¸æá͇ÉW0ÆW2Mv8C'hËŽšÁK)ý,gµz6_¸ýn8е§[>eþQ[ ΢3Ï~Ý×3·­úìÅ„ ÏKGöî©ÐÑq“Ã,ßÝ/lÕ¤Ö:J¥Å礤ÌúÆÆºR•S¼ÈCF{IôTE%G®Ÿ,°øT¡3^Ëæ„²GÆÑp¨.åè\9·w2Ûy 3ÌULÖ>XžÃÎýV%J;‹±L NŸŽ‚—Ö—æ#ÒŒöƒÙ*+6_»nò$¼|Ùmó-²er­–¿ô\‚§éª$ÇÙÅÄ£µ}Õ‰ŠýpáÁäHµåÖSZ®îÉÞ銜mUF¯)£Óàž «Hè_9ô_¤;Û °ÅÓ²ü‡qÏÔ$$9_{µ;4=8Ìá ˜–<Õ²SºvI›¼Ñ ëä"ãOšmå;¿b¹IꥸÐÑ"æé4Mînh¾ÌѺ¶O‘h˨ð·°ƒæo4²¬~1¯¿ÿ9† 6HÖ›¦4ÛÂEìUtçÚFU4£Òu@>×ñ‹²xšrýv²:ŘÂh¢šèÕéq­,›WFK=­·Þ&vè¦ÛË^ÎÁ^fÕo‘@šugz‰Ïèíå­¨’3Õ“IÙš̼û†Ôלd¬Û½Ü'ž>¡y:¼¿´ïŽðJ ¿¾ Íø§ 𢽹ÈAÁoÔÁ%ò&gQüsôÓŠðçi²íg£K¥UËo^ûÖ©s\Ÿnä`|Î;b&&ôÕ i|Ð*$˜1|.¸Ucš5À·H¢ âip“GÔ¥àz̶£¨ã ³\eÞi/Ðn–Èûõ˜d­”å]ú„aÈÉFÉŽ®Ó¾Õ "2;DEªAûˆk7ß—irˆ¦'68éìevS®Èµ¨6(Z…Ñÿ$CqÇI¢ÙÑUtHZßc¸^êêY}/m«˜iV¤ûU T-ã%½ÝÄ•j¬à˘Tr„Ϥ ÝäAbÔb¾Å0Uÿ)ßÍØ¾sª\ïýXç6w8«¡ÔÌs Püˆi—ܦÉïuR¹üò¥ÿ ‡Uæo:Ã7ÑÅnáß'bò«Ç`¾YS~´ædÙç!FEì)Úy»àn"7˜Hì‰r§™±{¹Iyû²Khg¸å«Bj-"š“Ø(—W_}¢E/¿5¢ü oú&©2<Ë—TaupüYWæý=EfKw…gÌÞ$7„sRVóÒô?IgW–Ü$ãPÈ\8Þ *+1¶z©ÄKwGÉ2ËèôÜü´¢f5g}Xq_xƒ–=ŠèA·ûÎb‹.¡' GqsO ·HÛ<h‹Z™­[P¬µÈ¾a0.7ñýÝ™ï_Å;Ã)`ͺ…C\ÖÛùõؤÖûô+š’„}¹Ê¡ûÙåej°ö“4ê²¹G’4ߦöô8+r¥Y2 ™·aj[ßÐ:x0z¨¨Á;†*6Lø†ÔÒA’Kß/Å3Ί͔é¢9!¼ ô‹mvn¯+”¸M†¨-ÄܤOú8ÖtS"÷daeSs@ræÔ¡ü´Ðä¸àfÀÒÈ÷HŸþ$—ùëèØçI‰ò ±õÍZóùÓ·3 уƒ‘/üáÅjÇíë¼q‹Ie6÷ûŸ€I‚JLB/Q¤”K;$žÉ÷⇗êÆ_ ©ÎHåUOéð^eÿ:~;¨õH/-Òz¥>_½öE¸í¼É^cÏqb±%*±:Ç0(7ž’6„áü“oÂiß«Á0Í֤̂}*„ìq#±yMÉtyþ¬ h4C±Êô¸©ZÏ™®ÿíg;s‘ûN5ˆ*un(«éHë¹bß*[4ÑP½Äˆ¼iËÓHùˆüMJ#Ûr^¸ÎGâ–ôJ¶¤Ž¹m”¤gɦva™e|8U¸´£ámQz-«‘wo¸³â†ªìƒ:¤×ï%stÃSÑc T†”¹Ê¾½\ºQ/Ü4LcÒQoOŸëOV÷æÔL¾Ëÿèó<¹­ü5¹‹) àE,È“ÿ5›ñù ÛãNØLï¿þMßj¡]ÖëŠfÔç¨/L7žÇî²ÎMtu•ì2š(»½_ˆ£±>FR̪4#{:úÒÇÜßõ¬íºgW›>vµfÖ"V¯°{x–bSýJè°l©±S–Ým/ni,ä;Ð8ª¦ r×Õ(©$=åøp |£Ž>ûJËQ˜BFÁÄ!¹ÑÊ’<•×hÓSÏ£3“ïC€ó‹4:×óÆKLê—Òž6 4Tj²žŽdÕ<¤UUýTÓuçuzQí3O.¶ÆEâN¦=HÑäÒœæ¨å0‹µ¯ÁEYšÄWŸròd,q Ú”)E_mѵ¾0'vq"VûP‰ÖdzµÒÖ'MÖíczËëÜUÂrᕈ6L„Iä¸1Cœá€îú=&Näñ™§¥ò ¹ñõ»N9ž]βá&‹Ó}DW/cd ­ßúOS.F}4 «ìÏ3DúSFÌkGå-ªiõÔA‰fˆÃG ü­4´Üß„w–¿¨^}~'`ÈŠôrí¾BWªGî½&Éׂ—ôLݺúX„ªA‹Â]ó¥]ó_ž‹ÊÈž@7üÞW—îz ý°ÔÌ­š¯M ™MÍMã”hÔ CÓ;›ršÇÁè’šCõqaž’}ª~RÙÚ+Äéö£»½"M»„H»¢ÆN^srkòBÜ2ý㯸µíÂûÔ¸5Ê'rÎGÉ.^~)/ †èÌÑu¾Ù¹¡ÄO<{ŠÝ‚ù”íûgÑÔ´C˜ïø_-ŒNãæäî-1á“ÁGÅžÅf1iP:1ZwjUÓ«ó ã P°]ðzCõwE€²ä˜·tðí:ŽÓܤ¤É ~iq³¿:¶uKF$ºS±…{ÔïÝ5:?í»lœ–Ο€ÛùÀÃQ,…k­yÏcÂÎö­±æâ¶¡¦ïd'®&Ñg(Âb":ªR¿}ÎQby@¥C’t—Ô1¨¿£PL_ -㟨õ´õ˼FÈïjoÍyR:â½B¥€@X†ËŽ ôkãÖ7S;XŒH\uÛD3¢$£úZ®nR’”2Øî¸·Ð¸™½:3½N í¹ßóÖXm¸ó†|ã«1º‚˜"B"S»k—Ÿ0•LçP*6AFK¨»NÀå´“+ÏäEÜ9´fˆ ç̹µKͽ#᪬§œJ9N)“„ñ¦™­É ]”õ¤ !åmÛWì¨õ5{ªBYó_Cz†Œ—‹­¢¾±(¢œKàùÏÕ·ïtž²Š´¤LäÈ:l‘&*DÓlÜ®:Ï\wÏcËïïKÚ(ï ’,•b†ÏVŸðÔë@³;!]úÜ«Žƒ­ãýFßoiË‚(§mbàj%óQ!ok“Äh„³UöýXî8ãËÍ$Åþ û‚kÛ}Üô‘KòõÇ«±ÊÍ2–ȱ‰‘+ºƒW±<ãïßÔŸµ,ÉEúŒ½‹³¹ÎüÆ’-‚÷²ÔÞ[!Ú7žnú— 8ÖPŸÒƒß{lV+—÷§É©GŸ1+/îWµüuÏüCLž¸-×·Ùk/8ª¿g•+7)±¿‡Q2¥3ÃBV¦4Üûr<óC™.ÙŒ=¨é|¬)Ð/Hmµé!S‰îÏJûtsì…Ñ äÃ5ç`ç eìɤkcI‡„"Qn¬qqg»ÑO6{͸ ·iJG-÷ôÅÈ–ö&ÀšªÈŠvß$©|9ɰNÃÓì|oGÊ゚85›N<ãCv|â+IißçWi>I1Ø=Z!8"ÅuÝx7"b¿å2™m4òö„6‘J[‹4¼8A(øBØ­ßO_”v6Q)L Z·}ðÔÙT“»¿~P„UÁ"¹VS¢µr¹ßž>/v:SêˆË4ÝLiäÊgW 0⦪ðkaðtî×ím¬ý¡½o¦g.JJI¨½¤”`ïC¶P«“V™¡_àÚ$©F–4—YutF˜Íúh;XfBõY%¤“Ž9öŠëÍuÒ[G;<ãÀ^ýä÷@ºVo* GµÞ 措ö0–0d¯7E…ÉÏB'²êÚIsú‘£…¹ÃË‘•íÂ6Gó}þ†Øïõüè䀌¥\ý[Ÿ¼l¨ë™è¦®xT–=+®ÎÈ+Y•½ù®¤<ôC} ¶‹c+XQ g|ûµ%Y¦@öp–ò>[RyŒ_šö3³í‰Š^¢°Ðè+3cVo‹AÓêºËÃÝÆ ¯Î)†¹€¿ ôß3ß¡?üÐIçø†éPð¸aL×ä…ä%Û•¿zwùVá=vœ¸âw›k/îðºæó"p.¤jb^]­ºé±Rb¡pÝVg^Äq¢Ï­IòâÝc]ÂZâdg™w8š¸Y«¤„•û2JPqæ‘CâüÉŸÛ'æ·Ëæ=˜/¾“ÝÌ› 9êçtXÉžfâiõx‚-¶ÔÂF%´>”Àðop ÃLn’©,–O¿bê½½'ÝFX¥/*ÍÒ;ô½'“D2WÅn:ÀC)JøtM¡¿¸«ŠA2Bmug­òîîjQ×)Ùv—­¥ßŠ¢>'¨¦Ø$õ/(Uà'_n´3kÿ«ö«–n§‡Æºl{’(O\á`üœ®ëC@V2oÝF“îæísò˜ ¯dŠ ƒ™k—씚vêŠÈ2®(†Z4s ýªk_¾9é360ŸŸÜ“1sjŸ¡†Ì«í^O¯¡ª„J¿±<îxüpäJá5iz’ú@mù-¿öãkÝb¹7çMÎ8$ÖÃ`Ô“›J_é쯚×u^Âøä%µÙÍÐ ç¿Wv৺ž¤3 ‘ÕZ±1Œ«ã ý‚åÈ笪pÞô.•õ¬nzBÿÞÇ3ž¯àµß—ßm ô¬/ôlD3 p‰€¥ˆï¨Ý?R&Pä’7ßÿ:ìÕÂòF]Îꋬ‘MùMO¸Hi^€Ökƒroÿ·yG8×—ík ]=F¦ŸLßÔ½ñé’V0ŒåJX)?¾fO´·MÙÜ9‰þZGÉÅ©3¿¬Lä_XS÷(G×2s5 {~5ÇýpF‰¤¼Ä<›ž§ì*Ç(1’ª§¶8lðg‰NEwÎ,f8ï =T© ]oì5ó™…nÕ ò~2xL|¦>¢©ËpÒo­ÄBåQº™H./g¾)”uêË/ò­"/× å÷öþ˜ó(ÎÒ!Èà<VÁÊ i>Yríêk˜®"®öŸ³0P‹ô³+Bz‹…¾Iê™±ÜW¹q˜·²M±}[ÒÄõK¿›Ýû4=Í\ïð*ÿmír§†‡ïW· [s*VH)W!•Ge;¥×ØŽ°¯P%ÌÉRÞïž;YQo ßx{¬—>aí†å#VX£¦‡ÌôW¨7íj@”’ô[ Åw.¼¹ÌczKê‡ %w¨;&.íðÇ4¤Æy •°Ñ ð6’9tmÉkŠ z¦é^¸ŠyÉ–ð¶n*u?t0iÙœk”®¼ÎPá©q Tpôr$b³ØÊ¸Á]_Jµ¹´¶ÿê3®ëiÈ„cC$m–¬i×âv¦{ÜÉ#ÍÙ„ËÆ¥%¸_€kJWµmåÍ%èôxͲÓú­v->!OòýyÜŸ€–·õb/‚­MÛž>Îdm]ó¥½—b\,XˆaCRܘ˺  ÒŠ©­(½P"Ž)M5jV±Í)}`•¶)R=ÃÅTK¼çÙ!sðJˆ ™“l ™½öN%¢¶ ñô®É+­s~gþdAã´ÜõÊÃÂ]©Ò±-%úÙ¼-Õg$eYb Ï¥c³¿´}ûì-¿5yæCªFøÔ=ѧhOˆD¯pžkˉ@s6ÉWâÊ¿£ÃÙöLÚ¾?uCÙM©Å MÝ*ÌhTÂ;nn6T˜ V‘´Ö2ÑJ‘©é6J§sáÑßñ$’ûw)½C¬¿ú‹¡-7RˆÐìå.Ó¿îuqÊŽ¦¨¶º$Þ=ÄÐ\¶ùÓ; « Qð¥ËlŸKŸoEɨš7H÷¯Ãö&Ê­ÇŸ®#‰|w3¦ù¥ÏGß.^ؾ¨žçÁÆASÜUR"…- ‰„Ò3$9qTÅôKÎK¾r`"N_Ý)1}*%q(»NYíÂsŽeÂi("Ðñ‹%£h+ɦ¯j TF‚ÕœÁJÀ¤R#·¥C…Š #üìáý!E€f.±çØñ°enòð°…Øøómðªò˜ ¿Ûô><ËrÑ×£5a Ú3‹Ü–Qi„ê"Ono«vŸô¡°à]¶ùn]ˆ7ä¼yCØ“€:±h\gê*Ý0L9Ðk)Û kÂÒlê©q“x(Dï%¨š&ôÇcå‘åKj’Mú©VòËgÊa³Øp”ï±,‡(}ÆÏÂ?=C«‡8»|NÖ„ÂeÕÚ«Š{ª]®(ª/-«É)Ϫ”"‘³¿‘~×\P‰:„ZÙCd…:/ùÁÆYìœ ]84jèý¶ÊÙ'§ªê×ûÒÍœ$ž«öíîJŠB3&ã·çS?K6 }›Ñ¤ÞO¡ÖmùgM“Ë‘æ½]¼ÿ^œ0’IÑU¬¦oÛ;UÉ\úM‹Ã×#ÅNøç-óGZÊÑýmBz­H§¨Ce¸ç»2$ íg >Â<¦^#R.íþIO…]é>”võ ŒÄ+«üD!?üž’ooô‘gä-JËòd xÞ˜$  „Mê¶]Fåº[ Õ«Ó#Ew~€ÂÆæøîž˜f¸Š¹ dü⚢Ei8ó‰ábˆxéö:Cȇã³E;T¾XàÙµvmfašTªëGÓ K¶“.͈”rJZŽt/¦Õ›ã/†óRŸJpÝÆæ‰xœ¨ëú¹Þ9P!Ò ÌÕ]RÅ?}Ç@ôˆË‘e“¡:ޱÎü2Iº~1i ôƒ)ÑË0¿èñ`ºîÏç×}£Z‹·Ó¢ Äáp–Á[£ž\5Í‘AÊ5Óªh”è%ßéÁ·°±’^ÁŸïeÀk¢ÃÔN¨ùø)]•Õ¢íQ'>í[¬k;I‰WoRíbÄö$“OX7ó¿Ô~Ñäâz[fA‘™HA”‚ >6žA…“ƒ~ož>ݤªúÄ–½ä­`âmØuž›ûäŸ"UT® ´˜°sÔ›u«æ¡€N·Ä·òŽ良û¾Õƒ‚Öß~mZ4®¹¡WVW”£S(xJ_Ç>š 3daÈkN¤bþ-w×¢¸žô“‡¼‘"ZœþŒ²¿¸%íí/wwÝ,@!T®¦§;yLºŠˆë%ðl"ß2“q6¹é[T''ï!5?LG Öú+(èÏHX_.ô~·õºàý®Š\;œïé|ÖÐCÕ@ÇçöÝÚˆÂ,ß²‡Ãûqìò‘\àµ7òYÍoÊ>3ÜÎ7‚ÓÉ"v‹ èÜã˜ôù±'¾¿Lë›+ÚhòžI£,ßÓæâÜ“NXQ2ÅÜÅb‹-áNÞš:nauèdyt±%Œˆê““Ò>¬»Ç —/Ý;•@;‰½ƒ”±¿ç F#¾½~t0ÉË.ÐÌûZè½Úߣ¼4$Có¬*a±ÜÔûðž¸ÙÚŽÌþ8ÇÛ²¹=ÒÆAš&7N0†õþ =©±jQDiÌ&>ˆµPžKÿõS3ÑÐ7§Rp6*TÓƒ8äüaßhKŽÄoÔ7™×{³•¨° gö»ùö‚Ùy·{ÉQ¯y@·E„åü]°J_"Fõ™ †»ÿm»¹è¨Ÿ«Ýc©zoG~Ô‹\L¢ÂÕ[t'­·5o¿Œ¹ŒÚþÂå3» ¯s¿ÜW×ÖK;±i—öëY*£:€7Ù¨šÍ=€T@ç÷q«<Ài»ªótl¬Ïßt¨;°%¶Ë>_ÀnPè8íjì–€`‡ïþ„m˜ô‚G–"Çc(Ò[Â\TôÉ Æ!JV ùo( œ 3ß‚ïœY¤TtªTƒÆ+Ü VE™œq¤¶'¸©µˆC*ÄHÑFœ’äê§_ÄýKÏku¨²áàÞ› ’é,~9äiVU©z3šÔœ1­Þ(ƒF\ébxÝ]†Á-¿Ó" ”9; X&–¹²O¹*À¶ o,t3jÁWtïa_`äV`iXj±ÎJQoGA¬ó,4ù)‹ ÔÍ äç뜟à.M¸þ0ëÃUŠß«‡yå?ràXZ@­’8Çü©-uBDA/ÃlF{G¨ÎMï}„eãmÊΩ†àý‰ö2Õ`ÃíD‡ºP,A`Êš‹<Skݰ¥QðçUéÒ’çý ±¨†æ„øef+tÈêñURÁ¾!ø Tg œ@°$‘9ÊGJ§Oqlt :™ß帔ŽcwålÖàäû…üVGï-N+w¼ï¡‰%Ršø¶ q·51Óí±Íïò. //,¬XÔ¢j`Éíò7>šZVe=~¤ »›©Êé[dݱÇy¿uÞœÄÈ4¯SNîŸqg9 A›Câ ¤ ¬‰°±‘*¶Ådô¼ülâÄÛælŽD;Ò¦"?—RÁhz2SÚèGû:V˜aŸõ“±vÇ:>Y¾Æo¡ë²¬µ“îzL,wˆ›P4 ìHæÝ](݃· ­^âh󎵾¾=IۀǶY¼ª"zD[ŽÈYVž4~ó0`¨0¯Wtšzî˰²-fzEÈfë¹ýS©1Ï`Ãê¢j‘cP3"³áúI?ÓfË—#cîõì1ÏpFe\çß<(pTäÈm}©,oGzæ›°.õä4°d–< ¿/l™ÝmT9íâAµÓ¥HZºJQ³çˆókGc\K޴úLOœ£j'³Ÿ¿#ê¦Þ ‡è¹´i°8d5vÅ€¬×?Æ¿g½ó=m´•¶ cñvxj.1PfÅóZ1â>Êð ¶®RÞ¸fßåî†`ÿØÆÂBºHÉsIŽ ¹ˆÂ¼(X[á¾ÕàøÔh0…~€Ò9A· z#`;¸q?ÀûòÔÀ2…i\ƒ&žÏó„ï=$i;Û^Ê|c²[¿e—­ºØ!sj_ãn©&4ìÁኯV3u8]Z†¿ ©¤Ëjr~ÙÈMC9¨YÏγñZê?jQ>·+¨ð*µ wèwŒºæ_7/\„­F_Ö ä…ƒónŠ]»'ÞyK.›jó!6Ɔ»FôR5)štgú³‰ÏŒßûÊ1দ²:¬–˜™a©| Âì4„‡#G¶ÛÑǘÃi\£vQèÓkag'U楅†ëÎÂ7HÐ0lŽY èj¨AØ÷¸ ó5ŸoÚÌŸsRCQž^‚ÚȪÌkÐüh̺…ª]›Ã sirÙg 7WÔð0™ŒüPOt¿t¾2z|½ëõˆo‚GØÉ/§b!KÌ…êϬ«¨Ö"·w{$Ø^©:²®m:>>V` ‹…Тè§×£Aê6^Tõ™óƒ#Fä oO…wûJaE9¹¼·òMŒ·.QF1'Þž¾«x3‹qqc §õ>³®3Ñã€4Uý„‘R³h‚ËjäxéãZíeô &É‹/6ǯ¶µúHÐÌŠÃpÙï…”I)k“ÑëcÏÜt$¯Õ¦;˜'yhL”=ü>=1‹=Ê> ZŽ,wAîCnnðËÐm.zEñϰ°,µA¥Ÿ¨".BBÉ ™kÍ30›±šÖN6.Æ«c9Ð0Ü^U?»u[ ¨X`7èu_+–§Íšæ7=¤…×Aæ*’|Ddýs€F]_Xm" (ª¬ÕZ™ÛŒ ¤QP¨dï¢ôó0`[ŠÕOX»±Û.×®‹&¸FE™<½0>7ÿ»R^M£KR`•.¬ŒbŽä50??m^™øÆ@±lV¦ûj™—0«0½>-~IWCä±ý ¼)¿°þ`ÍJÙ)ò†fŸBæê(‡äFÁö$©Ö²ï¹U6tn¾RïÐÕÒ¶s¯[~¨ ëzÃ$_¡~"ÓZ0NZ¦[àDlP^iðp s ÌÅY–>¥’C4 ‹×ó5x‹Jþyz–#†Gb|ò-«zÂpÃϱšÓ/JŸ‚«g°Ë¦nÑÎ'¡ÌïBøO…׫YåÙûôÛaÛf ì`ô£¸×qØ>wœ–|ýuÏï^ïvhºý¨^’EëöääP´jØ7ÝørK³bòfÎ+dC;c®%eä¤Ô9Ô& $¹¹N–:Ï…¬úœ¥ï³~ÿŒpÜòRQ‘ç:<Á^h>Ø/AeéçaÄÆÍ¶ÝJw=øŠPí5°C"ÙM°:…´%6*\ÀG)Ý6ôS™£}Q‡ªà½°÷ÜwQå2˜–w¬5]‹gkUŸ§Â8}$âÔwɲ߈t:ÈÀ•/n1ÚÝ}iÉÉúMPìµ»Õ÷ ÷J«[OsŠkLçµôÊ ^õ„æ§á9̲Ägé¾léù¾1ÓøE€zkÔ n:>w¼ðm2dØw½{%åÍæAÙ=¶QùMBý~UÑãå]ŠþÈO!xPsJÁeGÌ‘Ã[ÑÏjõЖËɟݯá5”>ödJ ¥ÛÂNüï?~Ù;{c£l[îU÷æd©Ø^ØŽÑÝ·‹˜}oÄ©z·×M1µ6?PNÛˆ•âñ ¬3Ä•¶îqÂÒ‹]U³9œ·7÷ ]°¹o1û–QrÕîÂ]ÏLÚàIŸOÝ]Z#¸BAN÷~æÒðæ„©hȯ¨ƒl,ÕÒ5Ì-#€ÄÓ÷Õ]ìrUÌØ+b¼í]) f}s _åf"¶ug|BîVú‹Ü¡Ëyë×-Y#žZ­§œ¡„1Sñ xDméû·iº¦KéqVm¾tlnËTvO46¨6\_9¥‚ûr[UÝ{K\%Áqsa%Ž­D‰.ž§_ sõñÌ5ÕpÖÜÂèa娟¯+Ñ’Dºâ—aÄÃ÷ÙE‹Ï;6Ý!ãzö?$ç}Ibꎛ(Ÿ.Û,²Y¡NÛÅ!|¦ê­å*J–swó`§×ÇÍ Ã᪣'킽\ÕʧAÞÿ•ô2p=R‘à]ç2üÛÆSöóÔà±ú•7=WžÓ48£Á òT#+O·€ êæj—@,gï§Š€ŽBF•_’åBªmR¶Fiðí·Ë–ë„ÛBî¨î‡Ænãføò1ÑZX*7¹ÂÁË8Ë@Kû M 2xÕ}‰S2-3×¾ãz[Åá?ùËÍFا3:òKJgù¹7î²?Tâéˆ;”¡aY¡(ùµû[,hÄ”ÞWÀ §“¾Tã‰Ø}z3ÌÛÍ8ɵN4Ƕ۱sx˜ Z‚l!ÊyR­oÕ¸¿Hì9%h,P%ó#Né3;uõò—’láéMîuõón”còô”8lop?÷{ëÆgV¡wê)pÇŒ÷*ù:»H2ûAÕ¢ûð²mÔŽ-‘ð+”Ôúø¦}$yL~RÜæ—˜˜$4ͦ´™Ê÷ç3÷% µcE|[µèý8wZ¥ˆ#[ФŸ–*F‘Œ^ Øôä£ÙȘhÛ°ÓæC8³gS¨eKØ&_ØÀE1©Jm¾ŒˆƒªŠƒ ú{s÷YS´H¼åø’+Š&eh‚°n15dw¸Ù_úQÑPFD®R¦ùÊoæûýÑ_6ÙÐÚ²¬KÑ¡NttúØ…Ëp×–×EI«i,¸ª½óWÚ±w½I}eýÄѱ {¤æì¤Uì6ÀÎ^mUX†q/3ã Ï,‹QT‰¬Ð=ŽÀOvŒ©^ÜzïËÅ2ñ[Dg 5Èéò>N×÷$›'”¯ÒÖ=.Å ¤ç)‡‹¡ˆ5gœ_ÐÉÏHˆ/bv-Ožª©B !JÆaHźßÔ€ —~N?'z¯z;H#®ë %BbùÕÊf’ø×߆–™Œ~'ÑŠ‘ͯA‹w^!§¾‘(r#\°¢úÝ0¡ó»·ëDNë)Žå<5j5i7 ¨c nËdâñå8¿såïV@¡|0QƒõõzN ðfE…*wÖ0ˆ6)ìé.%  ¢Cî¼àûÁ{p"f+BPWË&Þü#›¨Ë6þ}Œö~Zܳg±’ÀÿþÔV†/– ºôÔd›IÏ¢¢8®Øéê,Œ%é¾SüÄéfP]⻪P˜±òo¹E8ä>*X%ÙJÜHÙkgLg^ofð5n9“à!Ôí(-Ueº›É™é‚i/mïRãŸÍŠ]‰Œõ½ _‰¿ H:íJÝÔ‰/N§{nyŒgâµðÛGÏñžúràO€Mô í#[I—#®ÕâZ)¢^ÿ²'yë³  KçiØ\«n† Ý»â{íOk—ð9c, (Š{,T}Ð/Ú>ÉŸ•‡ðhÝ|C£Rð~‰ß ä”2ú Âɧ×(â7aðÓg#‡àLMÙˆîh åv{T×MM¢µÛXNîùÀ”3ÌgIay/\¢ò–”ѯ‚¹ÆK]é…èÜÉÁ™'µû2þ‡qzÏ,™oa¿btØk5bE= Œž4ÿ{„ÛNiŒRÜxÞ¡Í;þ&Üì2Î~£°ã7É—òÁ×YÜ}„3™€ÎOäÛïL º}bØšoªÐëX3â×½0dß-=1ÎsW¾Í ïªñÂÓv`ç´‡«¨ùÜø‚r‘bÐõ¬E†v4y)’Íû±±˜0ÕLEšŠO»ÁHþT‰ó™?«X½*š#¶³â㘀d"ƒLt.•Iê‰áœ#5^ëð³’lßýàU0Öä“´ ãb§M¦Y‰LÎêª!üwÅØt¿}—ŒòÝjë>{ l$éå8ní\Slôü`ÜÊzRPa³{-Š›ÒEÆ! waP˜˜Õªu­‚•3AÒ’HCð݆¹#ß›Òï™!wVšR›ÖNBÎcéê£Ï:BšÉ'`˜ P”àüy\x•³ógÕZú6?âÁ0è)R”Ò "å|vJ&ˈ²ÍÞÁ®•j6Œo‡q…1&Övɱ™Ùý‰ŸÄ¤K×¼Ö0ë:~WæAšÝ©æŠD å0µTÇV%à å†î°šæñȶ”pê U"•ŒÄã•Gl÷±áù<Ìõ0à j믊8–,ÒHAäqñ±Ð4‚`'ôûn~":Ö¾üÁ ¿€6™Œ ¶.,x›ÆüÉ„Ás4–*‚Øœ̭[`?Ù7ÍíªÉñYF~ýüóýá»\àW ¦‚Llèþ]º¼ŒÛì„§ÅĶ$Cpþ=K{ùÃtp6(€/û€N:¼ž›m—E9ÿò²qô±Ð›¬ ’˜¡“(z>ªùc¥ÚŒMõļˆŸš—O¹iæýs F†ºdÃÔ{ ö–ßÑ#ÌË {¢éS‘wJHÁñ¦3r´~s‹?Gq…l•Ï¿Óë+eÅÎ&“\ƒ„©ÇT%8Tõdjq{z5|'v]?›h«ƒïHt½¯Ñº?\nžˆ²®¹µ¢#ä­ÍSPœÿÔ:ÑE±4(馗¦‰ÕT|F³¹´Hs§y…9¢DµrFƒHÚr*ì6.HVÓ$Läe¶ JhÅúÆíLr‡gsíòyµQÏ ÐëJ\à ðÙDÇíÄæ¼}cáöÝþÀÓh±™Šéîýv˜IÔḚÜ⛊/W¥ý ít•µÖÉ”;­crŽ‡Úˆ·Õ©ø­M·0þ;œ°%ïãü»#¨óȹìýªû‹Û&(ÐÒÆÃM™Ô7}o[Q|x¢Ûry|¨/=ˆ¶¦Q˜c* w»ééX‹á¾Â.Ж¤k›oªwüBù ßüëU­sî~®k˜÷ÑÿE'çgSö‰K?ëWLP¨kR«ã®“@n:ƒÃ½íñ‰ÿfFB¹V2@ u¡h_œ0…•´N&Z;ù1“­Ku®1 ÎÇ»‰ŸÚ7Èc¢9üâRЉN“ƒ9~¥úá#œä}ë™—íÞïŽòƒ¹ZíGË3ÇËŒ]Ýg…á‡ð¦¨‹|Z»…ÄðÌäkT˜>Ý  '!ª¾Ï:rëÇQC8U#Κ\Íû·?qîDw¬“mªºDánDä“—ž A‘ ë[Æ”¸V›tiäRx ûó]>ž…¸¬‘èó åØÍ©'ðgjÎÖÑq¼›r-§V8%òN?飨­¶bœ­W$y JBäDl¢(q/õuŒ¦; §{-‡h:Ê©¶sħ”<9’5WÓ¥ BÏøi¨¥î6°² ¯á&ëð('^¡RÞÝa@?—Ÿbxûêõ D#¥3cáѦ#¨Ù¦Åp.#¡ > ¬i-?Àj™¼uOhŸ.ZX±óš&š¯_’Ñ® j+»lT€ó»%˜¨^R΋ògeë•b¥Ð®£^VPHÈÉüm低…*ò™¡fW¤*l”Í„b(Œ„\ÁaŽKAöŽŸUTkÆ»1‰%SSÂU׿##è̳ùŒìV%‹ˆXǺçD=¯Wªh…²î!ud²yÎ b aU‰ M¥-¥5œ¢àuU‰`9Ì!ñ)>ܘ±ÎÊâ¹ïoW³C8|+*÷}µvogæKl7)þ´˜ÁÙ <ò(`d?Û̳ÙËj˯-&n ”™ÌP~¹¶\ñË Æý<ï78^òÉ4ªÐÉs0È»Sì©QLP¾¥¤o3m1³0ïë¢_½¬5íña@ªýBÕ™Wd ‡˜‘Îan[êmùn3†§{"°ÒÊ#æùÚ¹=ˆò'üb.5"Éä¾s…'‰'îÆÝóÓó«™Ãw¼|V ø³§œÆ˜¿+vôìHÉ‘Ü èOì#£ˆpLÝr¶Š_èêXÉ‹\¿ê¯×ñDb}R[™„6‘–cv;‰ágMø‰£Á)?³càù zð%ß­Ðܨ“íZ¡€³°,‹ËšÓ¯d½Oa-ŒK¬1ÂNWƒ|Ü¿áå6±Ûºý|G,Shø0¸ ÷üþYË2Õpn=ƒn†µÍåãH«´Ä:ZЮòl/ó.4µfa÷a€»’œ¬émUá…oTø¸ø-VëE¤iT%_ƒáôØãËÚæ;êzd3/_ü„s» ÿn2õ#ïf^í çžØ úJêt;´ü;gþ])ˆ7`¸ÚxfxÕ{ªlÆT™—K*pÖ×P£`‹…½Õ³øáçá™öaŸ ô Aד­Kát<§QYpÂ6›\[Q|ÔÌ5ÔÓ¥4ÿØ ~û«yÜ5©#S¢é›£¶'û¡âUR5!¹ =FƒpOgÇŽ‹ñµïdõüà_eð-œpÛcŸÞˆ,âþ¦T8ªB_SÇŸÛÿ.Û†ŽN«,0&Ú×¢Ä*zûâ³ÕO¾¬™!A,l`»²Y$sdfFË~yá>_,XôYZdÈ8Ú\ž° -Xâäì#¹S|êw'u­ã?Ï)Äue×ן1ˆe2óÛÀ}.”6ýôr³ 7ì¦h6ò%£}`‘½Ø°˜èÌÔcßõʱê fÊ>ªí†R"e©ÔJ“AO^¿<¼ˆ>’BÚ¹÷Šù´׫)ðÈŸÇè#/+”\%Ó"¾á7 ‚ž;‡Ú|œåêªqÕDr [¾hWuVR`‚ùÂíš™èÍç’n¤¥U°m÷Ý<¢àÆ:)’ö…g>ªÁŒÃ5 (êˆ{wì]ó“söÃHeñH˜åc_SY„ý<«Öy?Dö†ûÌYã†å¦ô9­sÍØ‘,_WŒªi0ÝÐ$˽ËN™%å ØÀ n8µ¿!ƒÕÓüf®˜á¡ŽwÛïWݨwªwÚÈBèGêKÀ ´÷™0Ûr6ßÑ'MiášdæˆN¬ùÀ"¿¶¥LǼ֧PïïÆã“Q¶ Šê(É+Ó0‚š5’“ãÆ›Vríu¬×\i&–Ù2öéîD[a3V"PŽî!•x:פªyZ`UŠ3X2Ù" § Oä9‚£ûÚãm’,Ø×ý4¨¨gh~› BèRRk/¨ïñÏ,3HX¾Šœoö&˜y…h›“>ÖXÎ/`õ¶–Sàåù½ÒøÆ 5¸ŸÎñî! ê‘Ë´ßO‰(6%˜n*ÈÆ¸«*YÐć ¤Eì´OŽA°Øÿ6üÙYœõjÖÓ ½ÿB»–péñÙ^”gè:z=”–ãWô€-Є§+î*„XœEÉlr8+Æ&ßð‰MÜË‹=á]¨Ù²¶ËHÉ;f êæ)‘ ¦4Z¹gùìMj|©´Hš¯þ¨0ÞRKUjGœ7ĵŽ?Ö^ ßÓ67‹[–éNçòÕÁŽƒ6°ÌéYØTV\è0-‡áKzbÁÄ6òY´“…GŠöAÁMŸ1uÛö|}މë„ðÊa6š:S¡ï7ÔQ ÚC\拟[ß\’Œ$ü°¿%(ùŽDŠÃ·N7 ‹;žpU=ÆýœVóQªm•sܽ†±s[#%¡jc›%Þ¶ñ¬¯ˆlÿ~zó)ŒÑycªgäÀï»QÊ”¢¼g9<Ë©«caÓüõg(/º˜á©H™Q«iâxé<=j^k{Š +Ì ï©5¿}ï”Ó“.Rì¶ïMg‹œD·d\ø¬j‹µèfߑ͵Ïîï{‚Iùœ~Ô¸•ÓË©¼Õšó3Á°î4hÁÒ$¶‰Á-W•ò8Å‘# öMõ¶“^HáDm¶Aˆ0&aòËÀ‹—ÊÓÌ5A·pUÊßT‚Âm/TQ Ÿ/ÙŸÕÞÎäú£‰¿ûÀ*z188ˆêÞY¾¢¾†a̶lSßx€¶kM>×bbízP›ù‰U¤5­ûð½S|n¤7ɾ˜6Û›K)‰õîa+Aèáj&Ž_çaè~_‰Ü4+)ÌXR¤ÔG©8§ŽŽ¨Üúï‹Uã=eT• lljÉÊÞL5'¿°& †mŽÜÆâ•­¦dœ¡—aB~n {9f!ÖdÅ)}.zî<çé™ ÜSVþ^·²ËƒÝ¤¥@OÈ¿‰?ÚjÈ‘¦:þxØùC|É!àn¦M¼qæCD­PX—óx…ö¼¶8zpßñ¶«º<ìÞ›}ý¨\)K öwP¡®ö‹P.þ Ü“?Ä1hŒµ¼ÄŽ¿±wrDްÖWõfÞè‰Q9"þÞnÎjAh?ÈO§Ÿ‹F?æŒ>6¡ðòøÐ(É4¨çî±l9R¸ºÁ¨Ó*“ÿÎršðN_úûu<0­µH:Ó >[Í¡h”‡èz^]ŒñJ Ýstîjâ‹ÝÊZ‡$ýÆjìIïPëÈÏèfÇ?ÆMu²‰ˆ¢s#xûÿ´ö›+³×ù„^õus9+í,éÉO–zµò ,HúËué¹Óä¸l+Ëô -í`XnØÎOÎ òźþëtŸ„ÍÓlÜT (VÇEø½ê¤]­NmŒæ³ËÔŠ޾>åX_p?¯]^Ñ^ð7¦Ecã Fn–“• ‹Ã˜¥üÊ"±+÷ñçUeh¡MÍT,,(×eµø‚¥añ¬$•È*Ðùý˜¤'‡fò­t ZÓ mª1iqdš0‰ï_ÂÞº{5O¯'¡Og3¥-çŸDÓk®ÏÄB4â¶c¾-ê7òõN&Õ£µ¿[€ZõówÈÓÖ:•X–'T@Îi&žé…¡mû])›3 •/óä;ó~Kê³&ÅwNtF~‘¹&f$í yY¤ÞöèºWÔ¡Z(,MAé9‘UfÑæås³„Ýã7üD4D6rd ·$Öï{:b/ec«ð‰¥hÐ:2‚öjz®Ó¥2Œ á¾Új*¥ã‰Ü*Ì>nY­ˆ5ÆQp`º?™}¨!õ$f¶p¹:ôU•)*:”²$ ÍÒ½0jøåäù¶×)iÌdˆGö™Ð^Ì,J”Æ«wy˹õWðÎÏ¥®­SÇú;QÑFNè:td.·°¢ê a§ø¶(tZ7&.ïKÓ˪7#¢ÕÚ×oòWo•åfµ€<Ÿ0~z<Þhá\Ñ>9¬êéP”‡\Aaãî÷î¤?»”²­„Ú˜SCñp°•Óqíl¦Ñ"éL<’©Á‡Ï¼ùX6¡¨ÉA·­êùÙ 0lLöGð)lPƒÍ¿âyõ,[•†u×®•·s©¤AÜxfkUüʽýb……óLF%¥Í?@‘è†a8º‘ò;·`ÕÉ“ÔÐoR2ò|<Æ]…+­Äå7ZKMÜBZ%Ñÿ&O0””tkO}©§)F$j¶£{+ò @¿çs^Q0ŽBÛø¨Ž.ß"¨\·|*ôt/}@¬ $—“bTy’ºþEŸj®™D°ÛÛV·C³ 8œ_{,0v&Õ´œèÔÓkÓ)†Ìpؤ䟛ŽYBô<$dµžµ xêúuD~šg#4Q±}Ãß-n‚Çi ‰µ#š¯>ß{ÊÄT]¤UÔ ½¾åB’‰¤@hú Ä¥¨ïçù¦@)‡š÷ 3h%›.U™P[#ô5Dxi ý$D¡x‰àˆ…EkXŽÅ¸Ï•‘´û{¸íJ-eQº:™ô(Cñ«¡É~V‘øñ:é‚ûûõSílÿeTik!äW‚ÌðÝ ±SüÍ ¶õÝžûr¯ÅÑä´‘yÆâ ¹ûÃúy%j~§„>À×ÏþÊÉ8Êz~6šk‹¿ªÊ-0*ÞaÀ‡ä0ÒÌÊM¾GZ}¢ù-Ð{Sõ¡ØÀ.ºÒæ06zÖ!ÍôÄ’˜{M/Ë"ÚñØ09>rZŒYñí)[[{šv[G>ˆ¢&’ÃvÎe%ŸåqSCÿ^~S¬©Û U'Ü…$J·AòÆf„Y‚Ày Ü9>aÏÞ~{[<§þˆ[ú„.ôª–±¯z’/à<®iâÌ9àÚ«;覟±5ø0,UÝ1ÿL+s‹`0’×w#8¶×°ôkË\HQ2NC{ÐÄqbj <ÑK€À…èä­6¿qÞ™$Bℎ¸HëI²LgyCJÜkO€|4«%ÕÉ®j†ÃŠÖÛÞÀâéüŽ›\eˆÍ9u +!»ÃC;1ºÕ™n ¶O˜˜NXÕtÿÍGd· ¯ŸÆ±}9_ŒWIß–ÙNýû_N}`›®mB#é§]m¢ñÏõ|7‚W¨UM5…*P}$–¡]è‚tÏâ/=H5K h—A;ùS܆¦§Ÿ–j‡ËYj‹*ù¯•ö$ÆYûÛ)ÏÔ"D'—#KÉSMôxäg+–Ñj~3 ™Ü¦pœÂJC€p T%êwH;–õ±ÝÍUêçÜdéI¤=}¤D:-2ÕÿõÃÊCsµNÓSÖ&Y;g}‡/2UÝã‡*_L³Ô¬‡Yˆj—Çg‘JèDïq(2¬¾§ë]úw•ý¦3Ñ´(§½«ÓY­&8¿ S çÄÜ~wþµ¿Í†q„}ò2 .½JRÛâ‹vʻؿún¾Hȵ‘nÙY¤L{Ájb´˜Q ]´íÙçùD«ŸŸ,¾GÞÚ!Ce¨sxVZàòãFÜ\$ÐÿJæä)È£à[|¢JŠêCµËkâÖÆCpá{@+ÓkŒ¹uŠ| ¾g»]X…µ <«¾w ðÕñ6¼§¤±+ìÁXÝ+–É(F^óW½Ë¢¸Ç™}å*ï.>Åm¼­ÈÊlÂO"íÂX:oK‚,ÌO~’°õ‹ݨ°( $>-à 9¡‚ŸtÜVQIGÃZŸ*ã9ü™V%¢ …/w8úÅòÊŒ¯¹Žá¶ª%—1¹í÷V®0‰ã{ú1}iL¶¨ïðPpǵTš‹Óy+±I÷Óë…Ü U B^kóSV£/²_¹ÌiU[¥ gaðe1ÔTJ× LF<ìÈBúÑx½~PmYÕ)sÙ%šhá·'ý x‚ÇÖlÀÚf©ûòù’ì(Äé²Ì/˶¼·1×Y4sCÚ*‘,kÌ×PZ ÜŽ©{{â9–ˆ±—h:?"哼Õÿ£áv’Á‡ìÏ*±ÛYpÅ ž^”ñhFK0Öz¦AÛ)¸'¾°ÿ*ùU@µºt]ÙŸR¸ùyyÓ”’frRL׿ÙI)¼9^öÔ‘GÚF CÒØjùK€5ƒ¼zÌ×Í`ê£IꯟBâ…¦j3Ñò?° ´ÙÔŒ`l—•#Ñ`è…‚¿§¢„¤Œ x|Ôé¸2ÛpA°µs_aÿІáPwgɉڥñåI€t“Þ0¯¼÷'!7§îï„.¥¤U‘Ö`é6¸À¯A÷ðRág»e7N§CJAºÀ±a/ÄMBÛmB7þ)ä4v©ñ)úå­r0ûO3ÇHúV„“eêQo÷3)¤/¡ÛöWÁ\örn®ã¦ŸÍcR¬‰ßÒîög/œÁvHíå޹õ1ÈÆ>Å $W&õ~*ÒŸO$üðÝ­êW¥‹€-›lØys~ä»1¦òä[FŽpB·pµAŽÏ¬UïcÐ×tµCÙhL=Èwó \ðjjM°Ù5†)šÏiÏ' ÞEG(N1¬=ÃýDôç³µ‚Î3»ø’Ö߬öÑw¤:^<ªïüñ šî|DÊbáæ–|¢YxG Õv@NÄL95h Þ!Ãp>ïuTö‹•Í µ|{üEÄ–üÙ¯Ö¤Iõý( §|ÈVVÜS[g©?5ÍEZ‘*S'yaÕûyœ¨Ä±s}F`n´Žôf0=†-{&YuA+ëÃÉÖE˜6òBHÝou`¥òظK3|Ö{II’*ă…´¨„‰æc.X8 Z5ŒŒŸ^ˆ5âpЬÎÞÑa´†·þ“ÎM¿&ûnqM¼}™KÂt”Éb¶ÿˆJ˜Ø endstream endobj 333 0 obj << /Author(Jari Oksanen)/Title(Design decisions and implementation details in vegan)/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.13)/Keywords(nestdness, matrix temperature, community null models, scaling of PCA and RDA, WA and LC scores) /CreationDate (D:20130319133403+02'00') /ModDate (D:20130319133403+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-2.4-1.40.13 (TeX Live 2012/Debian) kpathsea version 6.1.0) >> endobj 264 0 obj << /Type /ObjStm /N 80 /First 732 /Length 4388 /Filter /FlateDecode >> stream xÚí[YsÛH~ׯà㤦⾯ª©­ò™øŠ½v’ÉQ~ mZæF–<Iö×/€&¥&%:‘ãÚ§©D­&ˆn_£4EK«2žIk2eyæe‚€K— )t¦vX3GkIœ’t @Ïà'?;KEF´Ã N.òÊõ 9ê”#±µõýšFcëĤ0sÄV',Z-„!æ£ú2†í…›t{‰Ñdu:Hú*&£9GQSåbJMfsG°úQæ£%Kî8Ú/Ìii@ ì94е¤Aà ¾Z¨žiNrŸ˜ê~¡ó¤­³Ý™#ÅQáê8-½ å4X5`r¯Ý„ÊÙȧ|Ô·¢h%†¨†3Å”Oãk ° °^%'‰"'µ!à<)ÅRyÑ =`¡{jS¤@õKŸÅU¼» ¥c*M,xÈóH¯šORµÌi‹+âPÍh+oÚNñ˜‡â´ª‹¾Û–¿¬‡¸OePZÿáuà’*Ðdwv·Níxó^Ê•Æ)“T©t/Qï©ñ;âÚ¡ê±­ã†+E¢þ…z¢Pm@ì×1cîé Ü͓ظ½­:bâiâå¾… èñ‰ "Om0¸"±…?ªCõ€qféã-m߸Am÷D‚¡ÓŽF»„ ÎHofåTŸøZrÇ^Ê¥5Î[’˜Î@+öWi×÷©Gϵ¨µ¥ª!¶5BQgUOm—T{DŸÂÐ8Ö@ˆ³ŽþF#=8°´¤‚Ó-9¸£|ûžNÉxz"D †Q já5·I¿k•1ÍjƵ©ûõ‹ÕŒÔt-„Á†×¢9玚¾6ÔÒÚ¤wkÏ¢>µ˜Â=°¿ÚÆyêVcÅåqU“𝱯Ã,>¾ðÄ‹@+ªEòT€¹©Þ`£‡Eñ´œ¡ºÍ"\‘OÍòš©ûJJAAÈyzNc5ñ¡`ðvYwck½›krR4R‹ð1M IéT‹ß1ái|¼ù‘ÚØOԠȨʧqsÞx_zX£©¿à¢{¡Ø§¶{rÞ)fWÓò¾šLã18ž›_ìl½ù}Ž›ãÙd”W9ÜåÃY¦ÓÓòK‘½XÏ ŒENÌ›³«b\Aˆp¦Íï_åð.‡kïÁ˜d¿ÊGåÕæx8*2¸y^wï!Å؇zŒ66‹ñÈýÛd[l›í°]¶Ç^³}vÈŽÙvÊþÍÎØ9{ËÞ±œå³«²¬ÊÑuÁ.Ùå4¿úRT£â¦júSœ˜]±«Éh2†öî.g׬`$=ä#vÃnʯ»s?²á´È«bÊnÙí÷ûÛbÌJö…ب˜Íسq9.ØøáÎÊá˜MØ÷ì>‡£9‰¦^|_LËÉ5»=ÌØ_쯇IU\_ŽØ”ÍØ¬ø “ÏÊo¬bÕí´(Xõ÷„=°¯ìoö}gÿ-¦“ñd6Êg·/â ì•€œô¼9âÿ̲ï¼ÚÙý}ûxKðÕ ÎýRR3h²¤A·–ÔÛtICß’ î“5Õ:]Ó–©”K@òp¨Ø×¶qrã^ìŸo£qú¬3¶¶NXý<Ö ÝkÝ&;Êï.¯spÓspÏ÷ìO2ø*q¹ÚËnÑŸ'zÜ1¾·¡Òë@uºs¶·s¡’=P)„ —Pá™!<UÜÜ{ì€ÑÆ>¡mÝ 7,âvSÃõ¥l¾áâÞBȺ@}ëBe×êýîæÞö@µ}¾ÝãVB7{ƹ6TFt R ¨xNN&0)ÑÞ/ÑÂÎ.ñëØsptüvûìÙíÝ%í øS’6°Mœ\¤yjOÔ-ï3H»^ƒ¦ùuy•.Ë!›=@4®ÊÉøºœÝòï BU|«Z‡µbÞÖÖÁÞ›#0øx¿Ï`5zÚÿÀ×Õc¾þ—û‡«¸C! dÿ‰©$ƈ; µö/‡›(܃?¯òâ°Vl|úáðÍ)`Wû°¨!Z<ÞôBÆ·Y+zýy²óáø€Œñx0ÅyÁŸkAýcÖÐRÞ× ö­mÛZáæèðÓÇ­·`ÛYŸ³jÞ8+¿bÛ¢è ½–¥E×+*»ñ9-½0·}dŸ°»z¨Š$f7EÖõ¤Â¢©\T[w׈U1Ž_Mí…ÿKøÀEYWb£Ešœaÿ™'€VÆü©²«˜aT™×_ÄÞ\Ätµ GbÌÆwe´kE^¦º³S¶QáÖv‡µ¢õ»Oï·NqßžÙOo¼Aõ,Þ€l=Þ@Ë€@Ïókj™âk…å“óOûG{hYÏVvžUù³Xæl¯eÑýZ¦-­œâkEÜW^mŸ¾GûB}¡±OÙç±O÷Ú÷ ŽK'õný©=J;qØ=öÄ‚ëñmö£m•l¦¸yæfÕvQ|­Ìp¸}øúÝ'ýüè‡!iü sÜÃ#©þpÏëšØ1«_Ûö®•->lmã&:?ïµ·Nì_Œ2¡ß\¼ü/ë?Îmƒ‡¡­'Ðĸ™:®ÿvöw·ÉÀžmdU³$þØÁÙÀV\>¦ìB<¦#ÝÛ–]b­èw°ûçëÇh×ÇÞ*âápX…"tÅ/¹žmÏéO0¾óx +}ÉñD[zb»sëKoŸFÛÂñ}ûî® ‰p“xy¦kŸ»²—|NûD¶M]î ß>Ëue›€žþ„`×=ÓtÅ/{œïôz}ñÝ#FWü’ËÑëìúâ;€Žt±äs6Ýì^'ŸàïÝ*½+}ÉëúãìÂ|§fî 7 o…9ñ¯ëÔ³]éË)Öôù',ûÊߟ»iviñ•îv¢ûâµ[ûOóa1ƒ"zò€Eù®§X‚ã_ÉÐèÃò+\B>‹e,³‹ßÒÇoU_pñ "¾¸‰hb&bN…DÊã·Œ²¥²?’!údHm~8V5̱L ?!"¹Ú¯{òP òžÕ+’Å`C ‚9_s§‰Õ|`Yáñ¢ÞG›Nb¯V¹u:-¾f²;i¤ ÍHiYkò¦øVáŸ7-OcæÓÈ•ÓÐÈ• ˆfdƒîíhPŸŸj`dŠL­OÌË4Í>ƒùõ#ó§J¾¬¦˜#,Úëd’æÍᵫF‘8±Ï9œbµÎq` Ÿ@"ÚÈfr <0A5A430FEF4FE4FFCA4C1BCA1274C08D>] /Length 814 /Filter /FlateDecode >> stream xÚ%ÕKPŽqÇñsž§xuÑE7TJ%¤RÉ%¡RÉ%"·……amÅ ÖVæl,ZaÆ caÆÊeÁÒ´2ÆmÆÆ†3fò~6Ÿ9ÿóüŸÛÿÿ{Ÿ×Ìl>1KÌíò”QÕgëL?•C+éí¤J!öÑÛA• `‚^ÕBÈd‰\z½ A½ô¶3̇zémcX‹éí¤·•aC ”Â(ƒr¨€J¨‚¥° –Cµ[Ù½` ÔÂjè€Nhp³"MYuܼ ¡6@ldÊ’µŠý ×ÀZhVhƒõ°ô2› Ñ-³Jwëâzí°Z¡У­õÖB3è4ÝRçjб ôZM° šÝšt7-±Ö^›¢ÝÒ6jµñ»`7ì„!Ø ÃpÆálvk {Œ@Œò,zý1`™B—? “pЭ÷¹N;G9ƒg]t ŽÃ)8ævàº&Ÿ€“pÎÀY8ǹL 8ˆm(“Óng¯è()Žƒ0æ^þJ½}Pèvu6ûƒ¸]¡ž’XävﮆÅn/‡U‘¿È¸]y¨!ÁŒRžžý ÒJ;·÷58F3t9 2en·º5…ØF5ì ÙA²£ÊíÎWMir›{¤ŠG­ÛÌe µt8ê VBdS÷¨OóØó`g‚¨D§Û¯o:Ðz…5nÏ^«§ “ì ÙAÖ‚xñŽv·7-šGhbŽ»çv¨G†"›Ù'¸à·$øA™ 2½n_.i኷¿5$RAƒ!Œa·ßït”0ĸ{z^ÃcìÂf*bä*ŽÂLºçoÕ<Âd(WLi Ò¤)Îq)óœî|$3î^wQU 9 /œ>‘ú®-„ ,‚<ȇ(„Åîõ“ºJ‘ûÀ[UÅîzT•¸ÏŒ«*uŸUµÄýo¯ª2OªæT•{ÒÿSU…'Ó_UUzrí£ª*O>]UµÔ“ù殺yZóTÕrOǪªöôæ{U5žÎ>= figset <- function() par(mar=c(4,4,1,1)+.1) options(SweaveHooks = list(fig = figset)) options("prompt" = "R> ", "continue" = "+ ") require(vegan) @ \tableofcontents \section{Nestedness and Null models} Some indicators of nestedness and null models of communities are only described in general terms, and they could be implemented in various ways. Here I discuss the implementation in \pkg{vegan}. \subsection{Matrix temperature} The matrix temperature is intuitively simple (Fig. \ref{fig:nestedtemp}), but the the exact calculations were not explained in the original publication \cite{AtmarPat93}. \begin{SCfigure} <>= data(sipoo) mod <- nestedtemp(sipoo) plot(mod, "i") x <- mod$c["Falcsubb"] y <- 1 - mod$r["Svartholm"] points(x,y, pch=16, cex=1.5) abline(x+y, -1, lty=2) f <- function(x, p) (1-(1-x)^p)^(1/p) cross <- function(x, a, p) f(x,p) - a + x r <- uniroot(cross, c(0,1), a = x+y, p = mod$p)$root arrows(x,y, r, f(r, mod$p), lwd=4) @ \label{fig:nestedtemp} \caption{Matrix temperature for \emph{Falco subbuteo} on Sibbo Svartholmen (dot). The curve is the fill line, and in a cold matrix, all presences (red squares) should be in the upper left corner behind the fill line. Dashed diagonal line of length $D$ goes through the point, and an arrow of length $d$ connects the point to the fill line. The ``surprise'' for this point is $u = (d/D)^2$ and the matrix temperature is based on the sum of surprises: presences outside the fill line or absences within the fill line.} \end{SCfigure} The function can be implemented in many ways following the general principles. \citet{RodGir06} have seen the original code and reveal more details of calculations, and their explanation is the basis of the implementation in \pkg{vegan}. However, there are still some open issues, and probably \pkg{vegan} function \code{nestedtemp} will never exactly reproduce results from other programs, although it is based on the same general principles.\footnote{function \code{nestedness} in the \pkg{bipartite} package is a direct port of the original \proglang{BINMATNEST} program of \citet{RodGir06}.} I try to give main computation details in this document --- all details can be seen in the source code of \code{nestedtemp}. \begin{itemize} \item Species and sites are put into unit square \citep{RodGir06}. The coordinates for $n$ item will be $(k-0.5)/n$ for $k=1 \ldots n$, so that there are no points in the corners or the margins of the unit square, and a diagonal line can be drawn through any point. I do not know how the rows and columns are converted to the unit square in other software, and this may be a considerable source of differences among implementations. \item Species and sites are ordered alternately using indices \citep{RodGir06}: \begin{equation} \begin{split} s_j &= \sum_{i|x_{ij} = 1} i^2 \\ t_j &= \sum_{i|x_{ij} = 0} (n-i+1)^2 \end{split} \end{equation} Here $x$ is the data matrix, where $1$ is presence, and $0$ is absence, $i$ and $j$ are row and column indices, and $n$ is the number of rows. The equations give the indices for columns, but the indices can be reversed for corresponding row indexing. Ordering by $s$ packs presences to the top left corner, and ordering by $t$ pack zeros away from the top left corner. The final sorting should be ``a compromise'' \citep{RodGir06} between these scores, and \pkg{vegan} uses $s+t$. The result should be cool, but the packing does not try to minimize the temperature \citep{RodGir06}. I do not know how the ``compromise'' is defined, and this can cause some differences to other implementations. \item The following function is used to define the fill line: \begin{equation} y = (1-(1-x)^p)^{1/p} \end{equation} This is similar to the equation suggested by \citet[eq. 4]{RodGir06}, but omits all terms dependent on the numbers of species or sites, because I could not understand why they were needed. The differences are visible only in small data sets. The $y$ and $x$ are the coordinates in the unit square, and the parameter $p$ is selected so that the curve covers the same area as is the proportion of presences (Fig. \ref{fig:nestedtemp}). The parameter $p$ is found numerically using \proglang{R} functions \code{integrate} and \code{uniroot}. The fill line used in the original matrix temperature software \citep{AtmarPat93} is supposed to be similar \citep{RodGir06}. Small details in the fill line combined with differences in scores used in the unit square (especially in the corners) can cause large differences in the results. \item A line with slope $-1$ is drawn through the point and the $x$ coordinate of the intersection of this line and the fill line is found using function \code{uniroot}. The difference of this intersection and the row coordinate gives the argument $d$ of matrix temperature (Fig. \ref{fig:nestedtemp}). \item In other software, ``duplicated'' species occurring on every site are removed, as well as empty sites and species after reordering \cite{RodGir06}. This is not done in \pkg{vegan}. \end{itemize} \subsection{Backtracking} Gotelli's and Entsminger's seminal paper \cite{GotelliEnt01} on filling algorithms is somewhat confusing: it explicitly deals with ``knight's tour'' which is quite a different problem than the one we face with null models. The chess piece ``knight''\footnote{``Knight'' is ``Springer'' in German which is very appropriate as Springer was the publisher of the paper on ``knight's tour''} has a history: a piece in a certain position could only have entered from some candidate squares. The filling of incidence matrix has no history: if we know that the item last added was in certain row and column, we have no information to guess which of the filled items was entered previously. A consequence of dealing with a different problem is that \citet{GotelliEnt01} do not give many hints on implementing a fill algorithm as a community null model. The backtracking is implemented in two stages in \pkg{vegan}: filling and backtracking. \begin{enumerate} \item The matrix is filled in the order given by the marginal probabilities. In this way the matrix will look similar to the final matrix at all stages of filling. Equal filling probabilities are not used since that is ineffective and produces strange fill patterns: the rows and columns with one or a couple of presences are filled first, and the process is cornered to columns and rows with many presences. As a consequence, the the process tries harder to fill that corner, and the result is a more tightly packed quadratic fill pattern than with other methods. \item The filling stage stops when no new points can be added without exceeding row or column totals. ``Backtracking'' means removing random points and seeing if this allows adding new points to the plot. No record of history is kept (and there is no reason to keep a record of history), but random points are removed and filled again. The number of removed points increases from one to four points. New configuration is kept if it is at least as good as the previous one, and the number of removed points is reduced back to one if the new configuration is better than the old one. Because there is no record of history, this does not sound like a backtracking, but it still fits the general definition of backtracking: ``try something, and if it fails, try something else'' \citep{Sedgewick90}. \end{enumerate} \section{Scaling in redundancy analysis} This chapter discusses the scaling of scores (results) in redundancy analysis and principal component analysis performed by function \code{rda} in the \pkg{vegan} library. Principal component analysis, and hence redundancy analysis, is a case of singular value decomposition (\textsc{svd}). Functions \code{rda} and \code{prcomp} even use \textsc{svd} internally in their algorithm. In \textsc{svd} a centred data matrix is decomposed into orthogonal components so that $x_{ij} = \sum_k \sigma_k u_{ik} v_{jk}$, where $u_{ik}$ and $v_{jk}$ are orthonormal coefficient matrices and $\sigma_k$ are singular values. Orthonormality means that sums of squared columns is one and their cross-product is zero, or $\sum_i u_{ik}^2 = \sum_j v_{jk}^2 = 1$, and $\sum_i u_{ik} u_{il} = \sum_j v_{jk} v_{jl} = 0$ for $k \neq l$. This is a decomposition, and the original matrix is found exactly from the singular vectors and corresponding singular values, and first two singular components give the rank $=2$ least squares estimate of the original matrix. Principal component analysis is often presented (and performed in legacy software) as an eigenanalysis of covariance matrices. Instead of a data matrix, we analyse a matrix of covariances and variances $\mathbf{S}$. The result are orthonormal coefficient matrix $\mathbf{U}$ and eigenvalues $\mathbf{\Lambda}$. The coefficients $u_{ik}$ ares identical to \textsc{svd} (except for possible sign changes), and eigenvalues $\lambda_k$ are related to the corresponding singular values by $\lambda_k = \sigma_k^2 /(n-1)$. With classical definitions, the sum of all eigenvalues equals the sum of variances of species, or $\sum_k \lambda_k = \sum_j s_j^2$, and it is often said that first axes explain a certain proportion of total variance in the data. The orthonormal matrix $\mathbf{V}$ of \textsc{svd} can be found indirectly as well, so that we have the same components in both methods. The coefficients $u_{ik}$ and $v_{jk}$ are scaled similarly for all axes $k$. Singular values $\sigma_k$ or eigenvalues $\lambda_k$ give the information of the importance of axes, or the `axis lengths.' Instead of the orthonormal coefficients, or equal length axes, it is customary to scale species (column) or site (row) scores or both by eigenvalues to display the importance of axes and to describe the true configuration of points. Table \ref{tab:scales} shows some alternative scalings. These alternatives apply to principal components analysis in all cases, and in redundancy analysis, they apply to species scores and constraints or linear combination scores; weighted averaging scores have somewhat wider dispersion. \begin{table} \caption{\label{tab:scales} Alternative scalings for \textsc{rda} used in the functions \code{prcomp} and \code{princomp}, and the one used in the \pkg{vegan} function \code{rda} and the proprietary software \proglang{Canoco} scores in terms of orthonormal species ($u_{ik}$) and site scores ($v_{jk}$), eigenvalues ($\lambda_k$), number of sites ($n$) and species standard deviations ($s_j$). In \code{rda}, $\mathrm{const} = \sqrt[4]{(n-1) \sum \lambda_k}$. Corresponding negative scaling in \pkg{vegan} % and corresponding positive scaling in \texttt{Canoco 3} is derived dividing each species by its standard deviation $s_j$ (possibly with some additional constant multiplier). } \begin{tabular}{lcc} & \textbf{Site scores} $u_{ik}^*$ & \textbf{Species scores} $v_{jk}^*$ \\ \code{prcomp, princomp} & $u_{ik} \sqrt{n-1} \sqrt{\lambda_k}$ & $v_{jk}$ \\ \code{rda, scaling=1} & $u_{ik} \sqrt{\lambda_k/ \sum \lambda_k} \times \mathrm{const}$ & $v_{jk} \times \mathrm{const}$ \\ \code{rda, scaling=2} & $u_{ik} \times \mathrm{const}$ & $v_{jk} \sqrt{\lambda_k/ \sum \lambda_k} \times \mathrm{const}$ \\ \code{rda, scaling=3} & $u_{ik} \sqrt[4]{\lambda_k/ \sum \lambda_k} \times \mathrm{const}$ & $v_{jk} \sqrt[4]{\lambda_k/ \sum \lambda_k} \times \mathrm{const}$ \\ \code{rda, scaling < 0} & $u_{ik}^*$ & $\sqrt{\sum \lambda_k /(n-1)} s_j^{-1} v_{jk}^*$ % \\ % \code{Canoco 3, scaling=-1} & % $u_{ik} \sqrt{n-1} \sqrt{\lambda_k / \sum \lambda_k}$ & % $v_{jk} \sqrt{n}$ \\ % \code{Canoco 3, scaling=-2} & % $u_{ik} \sqrt{n-1}$ & % $v_{jk} \sqrt{n} \sqrt{\lambda_k / \sum \lambda_k}$ % \\ % \code{Canoco 3, scaling=-3} & % $u_{ik} \sqrt{n-1} \sqrt[4]{\lambda_k / \sum \lambda_k}$ & % $v_{jk} \sqrt{n} \sqrt[4]{\lambda_k / \sum \lambda_k}$ \end{tabular} \end{table} In community ecology, it is common to plot both species and sites in the same graph. If this graph is a graphical display of \textsc{svd}, or a graphical, low-dimensional approximation of the data, the graph is called a biplot. The graph is a biplot if the transformed scores satisfy $x_{ij} = c \sum_k u_{ij}^* v_{jk}^*$ where $c$ is a scaling constant. In functions \code{princomp}, \code{prcomp} and \code{rda}, $c=1$ and the plotted scores are a biplot so that the singular values (or eigenvalues) are expressed for sites, and species are left unscaled. % For \texttt{Canoco 3} $c = n^{-1} \sqrt{n-1} % \sqrt{\sum \lambda_k}$ with negative \proglang{Canoco} scaling % values. All these $c$ are constants for a matrix, so these are all % biplots with different internal scaling of species and site scores % with respect to each other. For \proglang{Canoco} with positive scaling % values and \pkg{vegan} with negative scaling values, no constant % $c$ can be found, but the correction is dependent on species standard % deviations $s_j$, and these scores do not define a biplot. There is no natural way of scaling species and site scores to each other. The eigenvalues in redundancy and principal components analysis are scale-dependent and change when the data are multiplied by a constant. If we have percent cover data, the eigenvalues are typically very high, and the scores scaled by eigenvalues will have much wider dispersion than the orthonormal set. If we express the percentages as proportions, and divide the matrix by $100$, the eigenvalues will be reduced by factor $100^2$, and the scores scaled by eigenvalues will have a narrower dispersion. For graphical biplots we should be able to fix the relations of row and column scores to be invariant against scaling of data. The solution in \proglang{R} standard function \code{biplot} is to scale site and species scores independently, and typically very differently, but plot each independently to fill the graph area. The solution in \proglang{Canoco} and \code{rda} is to use proportional eigenvalues $\lambda_k / \sum \lambda_k$ instead of original eigenvalues. These proportions are invariant with scale changes, and typically they have a nice range for plotting two data sets in the same graph. The \textbf{vegan} package uses a scaling constant $c = \sqrt[4]{(n-1) \sum \lambda_k}$ in order to be able to use scaling by proportional eigenvalues (like in \proglang{Canoco}) and still be able to have a biplot scaling. Because of this, the scaling of \code{rda} scores is non-standard. However, the \code{scores} function lets you to set the scaling constant to any desired values. It is also possible to have two separate scaling constants: the first for the species, and the second for sites and friends, and this allows getting scores of other software or \proglang{R} functions (Table \ref{tab:rdaconst}). \begin{table} \caption{\label{tab:rdaconst} Values of the \code{const} argument in \textbf{vegan} to get the scores that are equal to those from other functions and software. Number of sites (rows) is $n$, the number of species (columns) is $m$, and the sum of all eigenvalues is $\sum_k \lambda_k$ (this is saved as the item \code{tot.chi} in the \code{rda} result)}. \begin{tabular}{lccc} & \textbf{Scaling} &\textbf{Species constant} & \textbf{Site constant} \\ \pkg{vegan} & any & $\sqrt[4]{(n-1) \sum \lambda_k}$ & $\sqrt[4]{(n-1) \sum \lambda_k}$\\ \code{prcomp}, \code{princomp} & \code{1} & $1$ & $\sqrt{(n-1) \sum_k \lambda_k}$\\ \proglang{Canoco\,v3} & \code{-1, -2, -3} & $\sqrt{n-1}$ & $\sqrt{n}$\\ \proglang{Canoco\,v4} & \code{-1, -2, -3} & $\sqrt{m}$ & $\sqrt{n}$ \end{tabular} \end{table} In this chapter, I used always centred data matrices. In principle \textsc{svd} could be done with original, non-centred data, but there is no option for this in \code{rda}, because I think that non-centred analysis is dubious and I do not want to encourage its use (if you think you need it, you are certainly so good in programming that you can change that one line in \code{rda.default}). I do think that the arguments for non-centred analysis are often twisted, and the method is not very good for its intended purpose, but there are better methods for finding fuzzy classes. Normal, centred analysis moves the origin to the average of all species, and the dimensions describe differences from this average. Non-centred analysis leaves the origin in the empty site with no species, and the first axis usually runs from the empty site to the average site. Second and third non-centred components are often very similar to first and second (etc.) centred components, and the best way to use non-centred analysis is to discard the first component and use only the rest. This is better done with directly centred analysis. \section{Weighted average and linear combination scores} Constrained ordination methods such as Constrained Correspondence Analysis (CCA) and Redundancy Analysis (RDA) produce two kind of site scores \cite{Braak86, Palmer93}: \begin{itemize} \item LC or Linear Combination Scores which are linear combinations of constraining variables. \item WA or Weighted Averages Scores which are such weighted averages of species scores that are as similar to LC scores as possible. \end{itemize} Many computer programs for constrained ordinations give only or primarily LC scores, following Mike Palmer's recommendation \cite{Palmer93}. However, functions \code{cca} and \code{rda} in the \pkg{vegan} package use primarily WA scores. This chapter explains the reasons for this choice. Briefly, the main reasons are that \begin{itemize} \item LC scores \emph{are} linear combinations, so they give us only the (scaled) environmental variables. This means that they are independent of vegetation and cannot be found from the species composition. Moreover, identical combinations of environmental variables give identical LC scores irrespective of vegetation. \item Bruce McCune has demonstrated that noisy environmental variables result in deteriorated LC scores whereas WA scores tolerate some errors in environmental variables \cite{McCune97}. All environmental measurements contain some errors, and therefore it is safer to use WA scores. \end{itemize} This article studies mainly the first point. The users of \pkg{vegan} have a choice of either LC or WA (default) scores, but after reading this article, I believe that most of them do not want to use LC scores, because they are not what they were looking for in ordination. \subsection{LC Scores are Linear Combinations} Let us perform a simple CCA analysis using only two environmental variables so that we can see the constrained solution completely in two dimensions: <<>>= library(vegan) data(varespec) data(varechem) orig <- cca(varespec ~ Al + K, varechem) @ Function \code{cca} in \pkg{vegan} uses WA scores as default. So we must specifically ask for LC scores (Fig. \ref{fig:ccalc}). <>= plot(orig, dis=c("lc","bp")) @ \begin{SCfigure} <>= <> @ \caption{LC scores in CCA of the original data.} \label{fig:ccalc} \end{SCfigure} What would happen to linear combinations of LC scores if we shuffle the ordering of sites in species data? Function \code{sample()} below shuffles the indices. <<>>= i <- sample(nrow(varespec)) shuff <- cca(varespec[i,] ~ Al + K, varechem) @ \begin{SCfigure} <>= plot(shuff, dis=c("lc","bp")) @ \caption{LC scores of shuffled species data.} \label{fig:ccashuff} \end{SCfigure} It seems that site scores are fairly similar, but oriented differently (Fig. \ref{fig:ccashuff}). We can use Procrustes rotation to see how similar the site scores indeed are (Fig. \ref{fig:ccaproc}). <>= plot(procrustes(scores(orig, dis="lc"), scores(shuff, dis="lc"))) @ \begin{SCfigure} <>= <> @ \caption{Procrustes rotation of LC scores from CCA of original and shuffled data.} \label{fig:ccaproc} \end{SCfigure} There is a small difference, but this will disappear if we use Redundancy Analysis (RDA) instead of CCA (Fig. \ref{fig:rdaproc}). Here we use a new shuffling as well. <<>>= tmp1 <- rda(varespec ~ Al + K, varechem) i <- sample(nrow(varespec)) # Different shuffling tmp2 <- rda(varespec[i,] ~ Al + K, varechem) @ \begin{SCfigure} <>= plot(procrustes(scores(tmp1, dis="lc"), scores(tmp2, dis="lc"))) @ \caption{Procrustes rotation of LC scores in RDA of the original and shuffled data.} \label{fig:rdaproc} \end{SCfigure} LC scores indeed are linear combinations of constraints (environmental variables) and \emph{independent of species data}: You can shuffle your species data, or change the data completely, but the LC scores will be unchanged in RDA. In CCA the LC scores are \emph{weighted} linear combinations with site totals of species data as weights. Shuffling species data in CCA changes the weights, and this can cause changes in LC scores. The magnitude of changes depends on the variability of site totals. The original data and shuffled data differ in their goodness of fit\footnote{Or probably differ: The randomization is done while generating this article, and different versions may have different randomizations.}. <<>>= orig shuff @ Similarly their WA scores will be (probably) very different (Fig. \ref{fig:ccawa}). \begin{SCfigure} <>= plot(procrustes(orig, shuff)) @ \caption{Procrustes rotation of WA scores of CCA with the original and shuffled data.} \label{fig:ccawa} \end{SCfigure} The example used only two environmental variables so that we can easily plot all constrained axes. With a larger number of environmental variables the full configuration remains similarly unchanged, but its orientation may change, so that two-dimensional projections look different. In the full space, the differences should remain within numerical accuracy: <<>>= tmp1 <- rda(varespec ~ ., varechem) tmp2 <- rda(varespec[i,] ~ ., varechem) proc <- procrustes(scores(tmp1, dis="lc", choi=1:14), scores(tmp2, dis="lc", choi=1:14)) max(residuals(proc)) @ In \code{cca} the difference would be somewhat larger than now observed \Sexpr{format.pval(max(residuals(proc)))} because site weights used for environmental variables are shuffled with the species data. \subsection{Factor constraints} It seems that users often get confused when they perform constrained analysis using only one factor (class variable) as constraint. The following example uses the classical dune meadow data \cite{Jongman87}: <<>>= data(dune) data(dune.env) summary(dune.env) orig <- cca(dune ~ Moisture, dune.env) @ When the results are plotted using LC scores, sample plots fall only in four alternative positions (Fig. \ref{fig:factorlc}). \begin{SCfigure} <>= plot(orig, dis="lc") @ \caption{LC scores of the dune meadow data using only one factor as a constraint.} \label{fig:factorlc} \end{SCfigure} In the previous chapter we saw that this happens because LC scores \emph{are} the environmental variables, and they can be distinct only if the environmental variables are distinct. However, normally the user would like to see how well the environmental variables separate the vegetation, or inversely, how we could use the vegetation to discriminate the environmental conditions. For this purpose we should plot WA scores, or LC scores and WA scores together: The LC scores show where the site \emph{should} be, the WA scores shows where the site \emph{is}. Function \code{ordispider} adds line segments to connect each WA score with the corresponding LC (Fig. \ref{fig:walcspider}). <>= plot(orig, display="wa", type="points") ordispider(orig, col="red") text(orig, dis="cn", col="blue") @ \begin{SCfigure} <>= <> @ \caption{A ``spider plot'' connecting WA scores to corresponding LC scores. The shorter the web segments, the better the ordination.} \label{fig:walcspider} \end{SCfigure} This is the standard way of displaying results of discriminant analysis, too. Moisture classes \code{1} and \code{2} seem to be overlapping, and cannot be completely separated by their vegetation. Other classes are more distinct, but there seems to be a clear arc effect or a ``horseshoe'' despite using CCA. \subsection{Conclusion} LC scores are only the (weighted and scaled) constraints and independent of vegetation. If you plot them, you plot only your environmental variables. WA scores are based on vegetation data but are constrained to be as similar to the LC scores as only possible. Therefore \pkg{vegan} calls LC scores as \code{constraints} and WA scores as \code{site scores}, and uses primarily WA scores in plotting. However, the user makes the ultimate choice, since both scores are available. \bibliography{vegan} \end{document} vegan/inst/doc/NEWS.html0000644000176200001440000007224412122046457014552 0ustar liggesusers R: vegan News
NEWSR Documentation

vegan News

Changes in version 2.0.7

NEW FUNCTIONS

  • tabasco() is a new function for graphical display of community data matrix. Technically it is an interface to R heatmap, but its use is closer to vegan function vegemite. The function can reorder the community data matrix similarly as vegemite, for instance, by ordination results. Unlike heatmap, it only displays dendrograms if supplied by the user, and it defaults to re-order the dendrograms by correspondence analysis. Species are ordered to match site ordering or like determined by the user.

BUG FIXES

  • Function fitspecaccum(..., model = "asymp") fitted logistic model instead of asymptotic model (or the same as model = "logis").

  • nestedtemp() failed with very sparse data (fill < 0.38%).

NEW FEATURES

  • The plot function for constrained ordination results (cca, rda, capscale) gained argument axis.bp (defaults TRUE) which can be used to suppress axis scale for biplot arrays.

  • Number of iterations in nonmetric multidimensional scaling (NMDS) can be set with keyword maxit (defaults 200) in metaMDS.

DEPRECATED

  • The result objects of cca, rda and capscale will no longer have scores u.eig, v.eig and wa.eig in the future versions of vegan. This change does not influence normal usage, because vegan functions do not need these items. However, external scripts and packages may need changes in the future versions of vegan.

Changes in version 2.0-6

BUG FIXES

  • The species scores were scaled wrongly in capscale(). They were scaled correctly only when Euclidean distances were used, but usually capscale() is used with non-Euclidean distances. Most graphics will change and should be redone. The change of scaling mainly influences the spread of species scores with respect to the site scores.

  • Function clamtest() failed to set the minimum abundance threshold in some cases. In addition, the output was wrong when some of the possible species groups were missing. Both problems were reported by Richard Telford (Bergen, Norway).

  • Plotting an object fitted by envfit() would fail if p.max was used and there were unused levels for one or more factors. The unused levels could result from deletion of observations with missing values or simply as the result of supplying a subset of a larger data set to envfit().

  • multipart() printed wrong information about the analysis type (but did the analysis correctly). Reported by Valerie Coudrain.

  • oecosimu() failed if its nestedfun returned a data frame. A more fundamental fix will be in vegan 2.2-0, where the structure of the oecosimu() result will change.

  • The plot of two-dimensional procrustes() solutions often draw original axes in a wrong angle. The problem was reported by Elizabeth Ottesen (MIT).

  • Function treedive() for functional or phylogenetic diversity did not correctly match the species names between the community data and species tree when the tree contained species that did not occur in the data. Related function treedist() for phylogenetic distances did not try to match the names at all.

NEW FEATURES

  • The output of capscale() displays the value of the additive constant when argument add = TRUE was used.

  • fitted() functions for cca(), rda() and capscale() can now return conditioned (partial) component of the response: Argument model gained a new alternative model = "pCCA".

  • dispindmorisita() output gained a new column for Chi-squared based probabilities that the null hypothesis (random distribution) is true.

  • metaMDS() and monoMDS() have new default convergence criteria. Most importantly, scale factor of the gradient (sfgrmin) is stricter. The former limit was too slack with large data sets and iterations stopped early without getting close to the solution. In addition, scores() ignore now requests to dimensions beyond those calculated instead of failing, and scores() for metaMDS() results do not drop dimensions.

  • msoplot() gained legend argument for positioning the legend.

  • Nestedness function nestednodf() gained a plot method.

  • ordiR2step() gained new argument R2scope (defaults TRUE) which can be used to turn off the criterion of stopping when the adjusted R-squared of the current model exceeds that of the scope. This option allows model building when the scope would be overdetermined (number of predictors higher than number of observations).

    ordiR2step() now handles partial redundancy analysis (pRDA).

  • orditorp() gained argument select to select the rows or columns of the results to display.

  • protest() prints the standardized residual statistic squared m12 in addition to the squared Procrustes correlation R-squared. Both were calculated, but only the latter was displayed.

    Permutation tests are much faster in protest(). Instead of calling repeatedly procrustes(), the goodness of fit statistic is evaluated within the function.

  • wcmdscale() gained methods for print, plot etc. of the results. These methods are only used if the full wcmdscale result is returned with, e.g., argument eig = TRUE. The default is still to return only a matrix of scores similarly as the standard R function cmdscale(), and in that case the new methods are not used.

Changes in version 2.0-5

BUG FIXES

  • anova(<cca_object>, ...) failed with by = "axis" and by = "term". The bug was reported by Dr Sven Neulinger (Christian Albrecht University, Kiel, Germany).

  • radlattice did not honour argument BIC = TRUE, but always displayed AIC.

NEW FUNCTIONS

  • Most vegan functions with permutation tests have now a density method that can be used to find empirical probability distributions of permutations. There is a new plot method for these functions that displays both the density and the observed statistic. The density function is available for adonis, anosim, mantel, mantel.partial, mrpp, permutest.cca and procrustes.

    Function adonis can return several statistics, and it has now a densityplot method (based on lattice).

    Function oecosimu already had density and densityplot, but they are now similar to other vegan methods, and also work with adipart, hiersimu and multipart.

  • radfit functions got a predict method that also accepts arguments newdata and total for new ranks and site totals for prediction. The functions can also interpolate to non-integer “ranks”, and in some models also extrapolate.

NEW FEATURES

  • Labels can now be set in the plot of envfit results. The labels must be given in the same order that the function uses internally, and new support function labels can be used to display the default labels in their correct order.

  • Mantel tests (functions mantel and mantel.partial) gained argument na.rm which can be used to remove missing values. This options should be used with care: Permutation tests can be biased if the missing values were originally in matching or fixed positions.

  • radfit results can be consistently accessed with the same methods whether they were a single model for a single site, all models for a single site or all models for all sites in the data. All functions now have methods AIC, coef, deviance, logLik, fitted, predict and residuals.

INSTALLATION AND BUILDING

  • Building of vegan vignettes failed with the latest version of LaTeX (TeXLive 2012).

  • R versions later than 2.15-1 (including development version) report warnings and errors when installing and checking vegan, and you must upgrade vegan to this version. The warnings concern functions cIndexKM and betadisper, and the error occurs in betadisper. These errors and warnings were triggered by internal changes in R.

Changes in version 2.0-4

BUG FIXES

  • adipart assumed constant gamma diversity in simulations when assessing the P-value. This could give biased results if the null model produces variable gamma diversities and option weights = "prop" is used. The default null model ("r2dtable") and the default option (weights = "unif") were analysed correctly.

  • anova(<prc-object>, by = "axis") and other by cases failed due to ‘NAMESPACE’ issues.

  • clamtest wrongly used frequencies instead of the counts when calculating sample coverage. No detectable differences were produced when rerunning examples from Chazdon et al. 2011 and vegan help page.

  • envfit failed with unused factor levels.

  • predict for cca results with type = "response" or type = "working" failed with newdata if the number of rows did not match with the original data. Now the newdata is ignored if it has a wrong number of rows. The number of rows must match because the results in cca must be weighted by original row totals. The problem did not concern rda or capscale results which do not need row weights. Reported by Glenn De'ath.

NEW FEATURES

  • Functions for diversity partitioning (adipart, hiersimu and multipart) have now formula and default methods. The formula method is identical to the previous functions, but the default method can take two matrices as input.

    Functions adipart and multipart can be used for fast and easy overall partitioning to alpha, beta and gamma diversities by omitting the argument describing the hierarchy.

  • The method in betadisper is biased with small sample sizes. The effects of the bias are strongest with unequal sample sizes. A bias adjusted version was developed by Adrian Stier and Ben Bolker, and can be invoked with argument bias.adjust (defaults to FALSE).

  • bioenv accepts dissimilarities (or square matrices that can be interpreted as dissimilarities) as an alternative to community data. This allows using other dissimilarities than those available in vegdist.

  • plot function for envfit results gained new argument bg that can be used to set background colour for plotted labels.

  • msoplot is more configurable, and allows, for instance, setting y-axis limits.

  • Hulls and ellipses are now filled using semitransparent colours in ordihull and ordiellipse, and the user can set the degree of transparency with a new argument alpha. The filled shapes are used when these functions are called with argument draw = "polygon". Function ordihull puts labels (with argument label = TRUE) now in the real polygon centre.

  • ordiplot3d returns function envfit.convert and the projected location of the origin. Together these can be used to add envfit results to existing ordiplot3d plots.

    Equal aspect ratio cannot be set exactly in ordiplot3d because underlying core routines do not allow this. Now ordiplot3d sets equal axis ranges, and the documents urge users to verify that the aspect ratio is reasonably equal and the graph looks like a cube. If the problems cannot be solved in the future, ordiplot3d may be removed from next releases of vegan.

  • Function ordipointlabel gained argument to select only some of the items for plotting. The argument can be used only with one set of points.

Changes in version 2.0-3

NEW FUNCTIONS

BUG FIXES

  • betadisper() failed when the groups was a factor with empty levels.

  • Some constrained ordination methods and their support functions are more robust in border cases (completely aliased effects, saturated models, user requests for non-existng scores etc). Concerns capscale, ordistep, varpart, plot function for constrained ordination, and anova(<cca.object>, by = "margin").

  • The scores function for monoMDS did not honour choices argument and hence dimensions could not be chosen in plot.

  • The default scores method failed if the number of requested axes was higher than the ordination object had. This was reported as an error in ordiplot in R-sig-ecology mailing list.

NEW FEATURES

  • metaMDS argument noshare = 0 is now regarded as a numeric threshold that always triggers extended dissimilarities (stepacross), instead of being treated as synonymous with noshare = FALSE which always suppresses extended dissimilarities.

  • Nestedness discrepancy index nesteddisc gained a new argument that allows user to set the number of iterations in optimizing the index.

  • oecosimu displays the mean of simulations and describes alternative hypothesis more clearly in the printed output.

  • Implemented adjusted R-squared for partial RDA. For partial model rda(Y ~ X1 + Condition(X2)) this is the same as the component [a] = X1|X2 in variance partition in varpart and describes the marginal (unique) effect of constraining term to adjusted R-squared.

  • Added Cao dissimilarity (CYd) as a new dissimilarity method in vegdist following Cao et al., Water Envir Res 69, 95–106 (1997). The index should be good for data with high beta diversity and variable sampling intensity. Thanks to consultation to Yong Cao (Univ Illinois, USA).

Changes in version 2.0-2

BUG FIXES

  • Function capscale failed if constrained component had zero rank. This happened most likely in partial models when the conditions aliased constraints. The problem was observed in anova(..., by ="margin") which uses partial models to analyses the marginal effects, and was reported in an email message to R-News mailing list.

  • stressplot and goodness sometimes failed when metaMDS was based on isoMDS (MASS package) because metaMDSdist did not use the same defaults for step-across (extended) dissimilarities as metaMDS(..., engine = "isoMDS"). The change of defaults can also influence triggering of step-across in capscale(..., metaMDSdist = TRUE).

  • adonis contained a minor bug resulting from incomplete implementation of a speed-up that did not affect the results. In fixing this bug, a further bug was identified in transposing the hat matrices. This second bug was only active following fixing of the first bug. In fixing both bugs, a speed-up in the internal f.test() function is fully realised. Reported by Nicholas Lewin-Koh.

NEW FEATURES

  • ordiarrows and ordisegments gained argument order.by that gives a variable to sort points within groups. Earlier the points were assumed to be in order.

  • Function ordispider invisibly returns the coordinates to which the points were connected. Typically these are class centroids of each point, but for constrained ordination with no groups they are the LC scores.

Changes in version 2.0-1

NEW FUNCTIONS

  • clamtest: new function to classify species as generalists and specialists in two distinct habitats (CLAM test of Chazdon et al., Ecology 92, 1332–1343; 2011). The test is based on multinomial distribution of individuals in two habitat types or sampling units, and it is applicable only to count data with no over-dispersion.

  • as.preston gained plot and lines methods, and as.fisher gained plot method (which also can add items to existing plots). These are similar as plot and lines for prestonfit and fisherfit, but display only data without the fitted lines.

  • raupcrick: new function to implement Raup-Crick dissimilarity as a probability of number of co-occurring species with occurrence probabilities proportional to species frequencies. Vegan has Raup-Crick index as a choice in vegdist, but that uses equal sampling probabilities for species and analytic equations. The new raupcrick function uses simulation with oecosimu. The function follows Chase et al. (2011) Ecosphere 2:art24 [doi:10.1890/ES10-00117.1], and was developed with the consultation of Brian Inouye.

BUG FIXES

  • Function meandist could scramble items and give wrong results, especially when the grouping was numerical. The problem was reported by Dr Miguel Alvarez (Univ. Bonn).

  • metaMDS did not reset tries when a new model was started with a previous.best solution from a different model.

  • Function permatswap for community null models using quantitative swap never swapped items in a 2 by 2 submatrix if all cells were filled.

  • The result from permutest.cca could not be updated because of a ‘NAMESPACE’ issue.

  • R 2.14.0 changed so that it does not accept using sd() function for matrices (which was the behaviour at least since R 1.0-0), and several vegan functions were changed to adapt to this change (rda, capscale, simulate methods for rda, cca and capscale). The change in R 2.14.0 does not influence the results but you probably wish to upgrade vegan to avoid annoying warnings.

ANALYSES

  • nesteddisc is slacker and hence faster when trying to optimize the statistic for tied column frequencies. Tracing showed that in most cases an improved ordering was found rather early in tries, and the results are equally good in most cases.

Changes in version 2.0-0

GENERAL

  • Peter Minchin joins the vegan team.

  • vegan implements standard RNAMESPACE’. In general, S3 methods are not exported which means that you cannot directly use or see contents of functions like cca.default, plot.cca or anova.ccabyterm. To use these functions you should rely on R delegation and simply use cca and for its result objects use plot and anova without suffix .cca. To see the contents of the function you can use :::, such as vegan:::cca.default. This change may break packages, documents or scripts that rely on non-exported names.

  • vegan depends on the permute package. This package provides powerful tools for restricted permutation schemes. All vegan permutation will gradually move to use permute, but currently only betadisper uses the new feature.

NEW FUNCTIONS

  • monoMDS: a new function for non-metric multidimensional scaling (NMDS). This function replaces MASS::isoMDS as the default method in metaMDS. Major advantages of monoMDS are that it has ‘weak’ (‘primary’) tie treatment which means that it can split tied observed dissimilarities. ‘Weak’ tie treatment improves ordination of heterogeneous data sets, because maximum dissimilarities of 1 can be split. In addition to global NMDS, monoMDS can perform local and hybrid NMDS and metric MDS. It can also handle missing and zero dissimilarities. Moreover, monoMDS is faster than previous alternatives. The function uses Fortran code written by Peter Minchin.

  • MDSrotate a new function to replace metaMDSrotate. This function can rotate both metaMDS and monoMDS results so that the first axis is parallel to an environmental vector.

  • eventstar finds the minimum of the evenness profile on the Tsallis entropy, and uses this to find the corresponding values of diversity, evenness and numbers equivalent following Mendes et al. (Ecography 31, 450-456; 2008). The code was contributed by Eduardo Ribeira Cunha and Heloisa Beatriz Antoniazi Evangelista and adapted to vegan by Peter Solymos.

  • fitspecaccum fits non-linear regression models to the species accumulation results from specaccum. The function can use new self-starting species accumulation models in vegan or other self-starting non-linear regression models in R. The function can fit Arrhenius, Gleason, Gitay, Lomolino (in vegan), asymptotic, Gompertz, Michaelis-Menten, logistic and Weibull (in base R) models. The function has plot and predict methods.

  • Self-starting non-linear species accumulation models SSarrhenius, SSgleason, SSgitay and SSlomolino. These can be used with fitspecaccum or directly in non-linear regression with nls. These functions were implemented because they were found good for species-area models by Dengler (J. Biogeogr. 36, 728-744; 2009).

NEW FEATURES

  • adonis, anosim, meandist and mrpp warn on negative dissimilarities, and betadisper refuses to analyse them. All these functions expect dissimilarities, and giving something else (like correlations) probably is a user error.

  • betadisper uses restricted permutation of the permute package.

  • metaMDS uses monoMDS as its default ordination engine. Function gains new argument engine that can be used to alternatively select MASS::isoMDS. The default is not to use stepacross with monoMDS because its ‘weak’ tie treatment can cope with tied maximum dissimilarities of one. However, stepacross is the default with isoMDS because it cannot handle adequately these tied maximum dissimilarities.

  • specaccum gained predict method which uses either linear or spline interpolation for data between observed points. Extrapolation is possible with spline interpolation, but may make little sense.

  • specpool can handle missing values or empty factor levels in the grouping factor pool. Now also checks that the length of the pool matches the number of observations.

DEPRECATED AND DEFUNCT

  • metaMDSrotate was replaced with MDSrotate that can also handle the results of monoMDS.

  • permuted.index2 and other “new” permutation code was removed in favour of the permute package. This code was not intended for normal use, but packages depending on that code in vegan should instead depend on permute.

ANALYSES

  • treeheight uses much snappier code. The results should be unchanged.

vegan/inst/doc/Makefile0000644000176200001440000000124312015444266014540 0ustar liggesusersall: FAQ-vegan.pdf decision-vegan.pdf intro-vegan.pdf diversity-vegan.pdf NEWS.html FAQ-vegan.pdf: FAQ-vegan.texi "$(R_HOME)/bin/R" CMD texi2dvi --pdf --clean FAQ-vegan.texi decision-vegan.pdf: decision-vegan.tex "$(R_HOME)/bin/R" CMD texi2dvi --pdf --clean decision-vegan.tex -rm -f decision-vegan-0*.* Rplots.* intro-vegan.pdf: intro-vegan.tex "$(R_HOME)/bin/R" CMD texi2dvi --pdf --clean intro-vegan.tex -rm -f intro-vegan-0*.* Rplots.* diversity-vegan.pdf: diversity-vegan.tex "$(R_HOME)/bin/R" CMD texi2dvi --pdf --clean diversity-vegan.tex -rm -f diversity-vegan-0*.* Rplots.* NEWS.html: ../NEWS.Rd "$(R_HOME)/bin/R" CMD Rd2txt -t html ../NEWS.Rd -o NEWS.html vegan/inst/doc/FAQ-vegan.texi0000644000176200001440000012033512104765233015503 0ustar liggesusers\input texinfo @macro pkg {p} @strong{\p\} @end macro @c %**start of header @setfilename FAQ-@pkg{vegan}.info @settitle @pkg{vegan} FAQ @setchapternewpage on @set FAQ_YEAR 2013 @afourpaper @c %**end of header @copying @ifnottex This document contains answers to some of the most frequently asked questions about R package @pkg{vegan}. This is version of $Date: 2013-02-07 19:55:39 +0200 (Thu, 07 Feb 2013) $. @end ifnottex @quotation This work is licensed under the Creative Commons Attribution 3.0 License. To view a copy of this license, visit @uref{http://creativecommons.org/licenses/by/3.0/} or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA. Copyright @copyright{} 2008-2013 Jari Oksanen @end quotation @end copying @dircategory Programming @direntry * R @pkg{vegan} FAQ: (FAQ-@pkg{vegan}). FAQ for R package @pkg{vegan}. @end direntry @finalout @titlepage @title @pkg{vegan} @acronym{FAQ} @subtitle Frequently Asked Questions on R package @pkg{vegan} @subtitle Version of $Date: 2013-02-07 19:55:39 +0200 (Thu, 07 Feb 2013) $ @author Jari Oksanen @vskip 0pt plus 1fill @insertcopying @end titlepage @ifnothtml @contents @end ifnothtml @ifnottex @node Top, Introduction, (dir), (dir) @top @pkg{vegan} FAQ @insertcopying @end ifnottex @menu * Introduction:: * Ordination:: * Other analysis methods :: @end menu @node Introduction, Ordination, Top, Top @chapter Introduction @menu * What is @pkg{vegan}?:: * What is R?:: * How to obtain @pkg{vegan} and R?:: * What R packages @pkg{vegan} depends on?:: * What other packages are available for ecologists?:: * What other documentation is available for @pkg{vegan}?:: * Is there a Graphical User Interface (GUI) for @pkg{vegan}?:: * How to cite @pkg{vegan}?:: * How to build @pkg{vegan} from sources?:: * Are there binaries for devel versions?:: * Can I use @pkg{vegan} in Mac?:: * How to report a bug in @pkg{vegan}?:: * Is it a bug or a feature?:: * Can I contribute to @pkg{vegan}?:: * Can I have write access to @pkg{vegan} repository?:: @end menu @node What is @pkg{vegan}?, What is R?, Introduction, Introduction @section What is @pkg{vegan}? @pkg{Vegan} is an R package for community ecologists. It contains the most popular methods of multivariate analysis needed in analysing ecological communities, and tools for diversity analysis, and other potentially useful functions. @pkg{Vegan} is not self-contained but it must be run under R statistical environment, and it also depends on many other R packages. @pkg{Vegan} is @uref{http://www.gnu.org/philosophy/free-sw.html, free software} and distributed under @uref{http://www.gnu.org/licenses/gpl.html, ,GPL2 license}. @node What is R?, How to obtain @pkg{vegan} and R?, What is @pkg{vegan}?, Introduction @section What is R? R is a system for statistical computation and graphics. It consists of a language plus a run-time environment with graphics, a debugger, access to certain system functions, and the ability to run programs stored in script files. R has a home page at @uref{http://www.R-project.org/}. It is @uref{http://www.gnu.org/philosophy/free-sw.html, free software} distributed under a @acronym{GNU}-style @uref{http://www.gnu.org/copyleft/copyleft.html, copyleft}, and an official part of the @uref{http://www.gnu.org/, @acronym{GNU}} project (``@acronym{GNU} S''). @node How to obtain @pkg{vegan} and R?, What R packages @pkg{vegan} depends on?, What is R?, Introduction @section How to obtain @pkg{vegan} and R? Both R and latest release version of @pkg{vegan} can be obtained through @uref{http://cran.r-project.org,,CRAN}. Unstable development version of @pkg{vegan} can be obtained through @uref{http://r-forge.r-project.org/projects/vegan/,,R-Forge}. @node What R packages @pkg{vegan} depends on?, What other packages are available for ecologists?, How to obtain @pkg{vegan} and R?, Introduction @section What R packages @pkg{vegan} depends on? @pkg{Vegan} depends on the @pkg{permute} package which will provide advanced and flexible permutation routines for vegan (but currently only a small part of functions use @pkg{permute}). The @pkg{permute} package is developed together with @pkg{vegan} in @uref{http://vegan.r-forge.r-project.org/,,R-Forge}. Some individual @pkg{vegan} functions depend on packages @pkg{MASS}, @pkg{mgcv}, @pkg{cluster}, @pkg{lattice} and @pkg{tcltk}. These all are base or recommended R packages that should be available in every R installation. In addition, some @pkg{vegan} functions @code{require} non-standard R packages. @pkg{Vegan} declares these packages only as suggested ones, and you can install @pkg{vegan} and use most of its functions without these packages. The non-standard packages needed by some @pkg{vegan} functions are: @itemize @item Package @pkg{scatterplot3d} is needed by @code{ordiplot3d} @item Package @pkg{rgl} is needed by @code{ordirgl} and @code{rgl.isomap} @end itemize @node What other packages are available for ecologists?, What other documentation is available for @pkg{vegan}?, What R packages @pkg{vegan} depends on?, Introduction @section What other packages are available for ecologists? @acronym{CRAN} @uref{http://cran.r-project.org/src/contrib/Views/,,Task Views} include entries like @code{Environmetrics}, @code{Multivariate} and @code{Spatial} that describe several useful packages and functions. If you install R package @pkg{ctv}, you can inspect Task Views from your R session, and automatically install sets of most important packages. @node What other documentation is available for @pkg{vegan}?, Is there a Graphical User Interface (GUI) for @pkg{vegan}?, What other packages are available for ecologists?, Introduction @section What other documentation is available for @pkg{vegan}? @pkg{Vegan} is a fully documented R package with standard help pages. These are the most authoritative sources of documentation (and as a last resource you can use the force and the read the source, as @pkg{vegan} is open source). @pkg{Vegan} package ships with other documents which can be read with @code{vegandocs} command (documented in the @pkg{vegan} help). The documents included in the @pkg{vegan} package are @itemize @item @pkg{Vegan} @code{NEWS} @item @pkg{Vegan} @code{ChangeLog}. @item This document (@code{FAQ-vegan.pdf}). @item Short introduction to basic ordination methods in @pkg{vegan} (@code{intro-vegan.pdf}). @item Introduction to diversity methods in @pkg{vegan} (@code{diversity-vegan.pdf}). @item Discussion on design decisions in @pkg{vegan} (@code{decision-vegan.pdf}). @item Description of variance partition procedures in function @code{varpart} (@code{partitioning.pdf}). @end itemize Web documents outside the package include: @itemize @item @uref{http://vegan.r-forge.r-project.org/}: @pkg{vegan} homepage. @item @uref{http://cc.oulu.fi/~jarioksa/opetus/metodi/vegantutor.pdf}: @pkg{vegan} tutorial. @end itemize @node Is there a Graphical User Interface (GUI) for @pkg{vegan}?, How to cite @pkg{vegan}?, What other documentation is available for @pkg{vegan}?, Introduction @section Is there a Graphical User Interface (GUI) for @pkg{vegan}? Roeland Kindt has made package @pkg{BiodiversityR} which provides a GUI for @pkg{vegan}. The package is available at @uref{http://cran.r-project.org/src/contrib/Descriptions/BiodiversityR.html,,CRAN}. It is not a mere GUI for @pkg{vegan}, but adds some new functions and complements @pkg{vegan} functions in order to provide a workbench for biodiversity analysis. You can install @pkg{BiodiversityR} using @code{install.packages("BiodiversityR")} or graphical package management menu in R. The GUI works on Windows, MacOS X and Linux. @node How to cite @pkg{vegan}?, How to build @pkg{vegan} from sources?, Is there a Graphical User Interface (GUI) for @pkg{vegan}?, Introduction @section How to cite @pkg{vegan}? Use command @code{citation("vegan")} in R to see the recommended citation to be used in publications. @node How to build @pkg{vegan} from sources?, Are there binaries for devel versions?, How to cite @pkg{vegan}?, Introduction @section How to build @pkg{vegan} from sources? In general, you do not need to build @pkg{vegan} from sources, but binary builds of release versions are available through @uref{http://cran.r-project.org/,,CRAN} for Windows and MacOS X. If you use some other operating systems, you may have to use source packages. @pkg{Vegan} is a standard R package, and can be built like instructed in R documentation. @pkg{Vegan} contains source files in C and @acronym{FORTRAN}, and you need appropriate compilers (which may need more work in Windows and MacOS X). @node Are there binaries for devel versions?, Can I use @pkg{vegan} in Mac?, How to build @pkg{vegan} from sources?, Introduction @section Are there binaries for devel versions? @uref{http://r-forge.r-project.org/projects/vegan/,,R-Forge} runs daily tests on the devel package, and if passed, it builds source package together with Windows and MacOS X binaries. You can install those packages within R with command @code{install.packages("vegan", repos="http://r-forge.r-project.org/")}. If you use GUI menu entry, you must select or define the R-Forge repository. @node Can I use @pkg{vegan} in Mac?, How to report a bug in @pkg{vegan}?, Are there binaries for devel versions?, Introduction @section Can I use @pkg{vegan} in Mac? Yes, you can, and @pkg{vegan} binaries are available for Mac through @uref{http://cran.r-project.org,,CRAN}. However, in some cases you may need to install extra tools packages available in @uref{http://cran.r-project.org/bin/macosx/tools/,,MacOS tools} pages: If you use function such as @code{orditkplot} that need @code{Tcl/Tk} you may need to install @code{tcltk} package. If you use @pkg{vegan} binaries from other places than from @uref{http://cran.r-project.org,,CRAN}, you may also need to install @code{gfortran} package. @node How to report a bug in @pkg{vegan}?, Is it a bug or a feature?, Can I use @pkg{vegan} in Mac?, Introduction @section How to report a bug in @pkg{vegan}? If you think you have found a bug in @pkg{vegan}, you should report it to @pkg{vegan} maintainers or developers. The bug report should be so detailed that the bug can be replicated and corrected. Preferably, you should send an example that causes a bug. If it needs a data set that is not available in R, you should send a minimal data set as well. You also should paste the output or error message in your message. You also should specify which version of @pkg{vegan} you used. Bug reports are welcome: they are the only way to make @pkg{vegan} non-buggy. Please note that you shall not send bug reports to R mailing lists, since @pkg{vegan} is not a standard R package. There also is a bug reporting tool at @uref{http://r-forge.r-project.org/projects/vegan/,,R-Forge}, but you need to register as a site user to report bugs (this is site policy). @node Is it a bug or a feature?, Can I contribute to @pkg{vegan}?, How to report a bug in @pkg{vegan}?, Introduction @section Is it a bug or a feature? It is not necessarily a bug if some function gives different results than you expect: That may be a deliberate design decision. It may be useful to check the documentation of the function to see what was the intended behaviour. It may also happen that function has an argument to switch the behaviour to match your expectation. For instance, function @code{vegdist} always calculates quantitative indices (when this is possible). If you expect it to calculate a binary index, you should use argument @code{binary = TRUE}. @node Can I contribute to @pkg{vegan}?, Can I have write access to @pkg{vegan} repository?, Is it a bug or a feature?, Introduction @section Can I contribute to @pkg{vegan}? @pkg{Vegan} is dependent on user contribution. All feedback is welcome. If you have problem with @pkg{vegan}, it may be as simple as incomplete documentation, and we'll do our best to improve the documents. Feature requests also are welcome, but they are not necessarily fulfilled. A new feature will be added if it is easy to do and it looks useful to me or in general, or if you submit code. Contributed code and functions are welcome and more certain to be included than mere requests. However, not all functions will be added, but I they must be suitable for @pkg{vegan}. We also audit the code, and typically we edit the code in @pkg{vegan} style for easier maintenance. All included contributions will be credited. @node Can I have write access to @pkg{vegan} repository?, , Can I contribute to @pkg{vegan}?, Introduction @section Can I have write access to @pkg{vegan} repository? The @pkg{vegan} development happens mainly in @uref{http://r-forge.r-project.org/,,R-Forge} which uses subversion for version control. Subversion is a centralized version control system, and only @pkg{vegan} developers can have write access to the central repository. However, the @uref{http://r-forge.r-project.org/,,R-Forge} is mirrored in @uref{https://github.com/jarioksa/vegan.git,,GitHub}. This is a distributed version control system and freely accessible for anybody. We suggest you develop your own ideas in @uref{https://github.com/jarioksa/vegan.git,,GitHub} and send a pull request to us for incorporating your changes in @pkg{vegan} releases. @node Ordination, Other analysis methods , Introduction, Top @chapter Ordination @menu * I have only numeric and positive data but @pkg{vegan} still complains:: * Can I analyse binary or cover class data?:: * Why dissimilarities in @pkg{vegan} differ from other sources?:: * Why NMDS stress is sometimes 0.1 and sometimes 10?:: * I get zero stress but no convergent solutions in @code{metaMDS}:: * Zero dissimilarities in isoMDS:: * I have heard that you cannot fit environmental vectors or surfaces to NMDS results which only have rank-order scores:: * Where can I find numerical scores of ordination axes?:: * How the RDA results are scaled?:: * cca fails with ``data.frame expected'' or ``"site.env" missing'':: * Variance explained by ordination axes:: * Can I have random effects in constrained ordination or in @code{adonis}?:: * Is it possible to have passive points in ordination?:: * Class variables and dummies:: * How are environmental arrows scaled?:: * I want to use Helmert or sum contrasts:: * What are aliased variables and how to see them?:: * Plotting aliased variables:: * Constrained permutations in @pkg{vegan}:: * How to use different plotting symbols in ordination graphics?:: * How to avoid cluttered ordination graphs?:: * Can I flip an axis in ordination diagram?:: * Can I zoom into an ordination plot?:: @end menu @node I have only numeric and positive data but @pkg{vegan} still complains, Can I analyse binary or cover class data?, Ordination, Ordination @comment node-name, next, previous, up @section I have only numeric and positive data but @pkg{vegan} still complains You are wrong! Computers are painfully pedantic, and if they find non-numeric or negative data entries, you really have them. Check your data. Most common reasons for non-numeric data are that row names were read as a non-numeric variable instead of being used as row names (check argument @code{row.names} in reading the data), or that the column names were interpreted as data (check argument @code{header = TRUE} in reading the data). Another common reason is that you had empty cells in your input data, and these were interpreted as missing values. @node Can I analyse binary or cover class data?, Why dissimilarities in @pkg{vegan} differ from other sources?, I have only numeric and positive data but @pkg{vegan} still complains, Ordination @section Can I analyse binary or cover class data? Yes. Most @pkg{vegan} methods can handle binary data or cover abundance data. Most statistical tests are based on permutation, and do not make distributional assumptions. There are some methods (mainly in diversity analysis) that need count data. These methods check that input data are integers, but they may be fooled by cover class data. @node Why dissimilarities in @pkg{vegan} differ from other sources?, Why NMDS stress is sometimes 0.1 and sometimes 10?, Can I analyse binary or cover class data?, Ordination @section Why dissimilarities in @pkg{vegan} differ from other sources? Most commonly the reason is that other software use presence--absence data whereas @pkg{vegan} used quantitative data. Usually @pkg{vegan} indices are quantitative, but you can use argument @code{binary = TRUE} to make them presence--absence. However, the index name is the same in both cases, although different names usually occur in literature. For instance, Jaccard index actually refers to the binary index, but @pkg{vegan} uses name @code{"jaccard"} for the quantitative index, too. Another reason may be that indices indeed are defined differently, because people use same names for different indices. @node Why NMDS stress is sometimes 0.1 and sometimes 10?, I get zero stress but no convergent solutions in @code{metaMDS}, Why dissimilarities in @pkg{vegan} differ from other sources?, Ordination @section Why @acronym{NMDS} stress is sometimes 0.1 and sometimes 10? Stress is a proportional measure of badness of fit. The proportions can be expressed either as parts of one or as percents. Function @code{isoMDS} (@pkg{MASS} package) uses percents, and function @code{monoMDS} (@pkg{vegan} package) uses proportions, and therefore the same stress is 100 times higher in @code{isoMDS}. The results of @code{goodness} function also depend on the definition of stress, and the same @code{goodness} is 100 times higher in @code{isoMDS} than in @code{monoMDS}. Both of these conventions are equally correct. @node I get zero stress but no convergent solutions in @code{metaMDS}, Zero dissimilarities in isoMDS, Why NMDS stress is sometimes 0.1 and sometimes 10?, Ordination @section I get zero stress but no convergent solutions in @code{metaMDS} Most common reason is that you have too few observations for your @acronym{NMDS}. For @code{n} observations (points) and @code{k} dimensions you need to estimate @code{n*k} parameters (ordination scores) using @code{n*(n-1)/2} dissimilarities. For @code{k} dimensions you must have @code{n > 2*k + 1}, or for two dimensions at least six points. In some degenerate situations you may need even a larger number of points. If you have a lower number of points, you can find an undefined number of perfect (stress is zero) but different solutions. Conventional wisdom due to Kruskal is that you should have @code{n > 4*k + 1} points for @code{k} dimensions. A typical symptom of insufficient data is that you have (nearly) zero stress but no two convergent solutions. In those cases you should reduce the number of dimensions (@code{k}) and with very small data sets you should not use @code{NMDS}, but rely on metric methods. It seems that local and hybrid scaling with @code{monoMDS} have similar lower limits in practice (although theoretically they could differ). However, higher number of dimensions can be used in metric scaling, both with @code{monoMDS} and in principal coordinates analysis (@code{cmdscale} in @pkg{stats}, @code{wcmdscale} in @pkg{vegan}). @node Zero dissimilarities in isoMDS, I have heard that you cannot fit environmental vectors or surfaces to NMDS results which only have rank-order scores, I get zero stress but no convergent solutions in @code{metaMDS}, Ordination @section Zero dissimilarities in isoMDS Function @code{metaMDS} uses function @code{monoMDS} as its default method for @acronym{NMDS}, and this function can handle zero dissimilarities. The alternative function @code{isoMDS} was the only choice before @pkg{vegan} 2.0-0, and it cannot handle zero dissimilarities. If you want to use @code{isoMDS}, you can use argument @code{zerodist = "add"} in @code{metaMDS} to handle zero dissimilarities. With this argument, zero dissimilarities are replaced with a small above zero value, and they can be handled in @code{isoMDS}. This is a kluge, and some people do not like this. A more principal solution is to remove duplicate sites using R command @code{unique}. However, after some standardizations or with some dissimilarity indices, originally non-unique sites can have zero dissimilarity, and you have to resort to the kluge (or work harder with your data). Usually it is better to use @code{monoMDS}. @node I have heard that you cannot fit environmental vectors or surfaces to NMDS results which only have rank-order scores, Where can I find numerical scores of ordination axes?, Zero dissimilarities in isoMDS, Ordination @section I have heard that you cannot fit environmental vectors or surfaces to NMDS results which only have rank-order scores Claims like this have indeed been at large in the Internet, but they are based on grave misunderstanding and are plainly wrong. @acronym{NMDS} ordination results are strictly metric, and in @pkg{vegan} @code{metaMDS} and @code{monoMDS} they are even strictly Euclidean. The method is called ``non-metric'' because the Euclidean distances in ordination space have a non-metric rank-order relationship to community dissimilarities. You can inspect this non-linear step curve using function @code{stressplot} in @pkg{vegan}. Because the ordination scores are strictly Euclidean, it is correct to use @pkg{vegan} functions @code{envfit} and @code{ordisurf} with @acronym{NMDS} results. @node Where can I find numerical scores of ordination axes?, How the RDA results are scaled?, I have heard that you cannot fit environmental vectors or surfaces to NMDS results which only have rank-order scores, Ordination @section Where can I find numerical scores of ordination axes? Normally you can use function @code{scores} to extract ordination scores for any ordination method. The @code{scores} function can also find ordination scores for many non-@pkg{vegan} functions such as for @code{prcomp} and @code{princomp} and for some @pkg{ade4} functions. In some cases the ordination result object stores raw scores, and the axes are also scaled appropriate when you access them with @code{scores}. For instance, in @code{cca} and @code{rda} the ordination object has only so-called normalized scores, and they are scaled for ordination plots or for other use when they are accessed with @code{scores}. @node How the RDA results are scaled?, cca fails with ``data.frame expected'' or ``"site.env" missing'', Where can I find numerical scores of ordination axes?, Ordination @section How the @acronym{RDA} results are scaled? The scaling or @acronym{RDA} results indeed differ from most other software packages. The scaling of @acronym{RDA} is such a complicated issue that it cannot be explained in this @acronym{FAQ}, but it is explained in a separate @acronym{pdf} document on ``Design decision and implementation details in vegan'' that you can read with @pkg{vegan} command @code{vegandocs("decision")}. @node cca fails with ``data.frame expected'' or ``"site.env" missing'', Variance explained by ordination axes, How the RDA results are scaled?, Ordination @section cca fails with ``data.frame expected'' or ``"site.env" missing'' This is not a @pkg{vegan} error message, but it comes from the @code{cca} function in the @pkg{ade4} package. There is an unfortunate name clash, and if you have loaded @pkg{ade4} after @pkg{vegan}, the @pkg{ade4} version of @code{cca} will mask the @pkg{vegan} version. You can use the @pkg{vegan} version using command @code{vegan::cca()}. If you do not need package @pkg{ade4}, you can detach it with command @code{detach(package:ade4)}. @node Variance explained by ordination axes, Can I have random effects in constrained ordination or in @code{adonis}?, cca fails with ``data.frame expected'' or ``"site.env" missing'', Ordination @section Variance explained by ordination axes. In general, @pkg{vegan} does not directly give any statistics on the ``variance explained'' by ordination axes or by the constrained axes. This is a design decision: I think this information is normally useless and often misleading. In community ordination, the goal typically is not to explain the variance, but to find the ``gradients'' or main trends in the data. The ``total variation'' often is meaningless, and all proportions of meaningless values also are meaningless. Often a better solution explains a smaller part of ``total variation''. For instance, in unstandardized principal components analysis most of the variance is generated by a small number of most abundant species, and they are easy to ``explain'' because data really are not very multivariate. If you standardize your data, all species are equally important. The first axes explains much less of the ``total variation'', but now they explain all species equally, and results typically are much more useful for the whole community. Correspondence analysis uses another measure of variation (which is not variance), and again it typically explains a ``smaller proportion'' than principal components but with a better result. Detrended correspondence analysis and nonmetric multidimensional scaling even do not try to ``explain'' the variation, but use other criteria. All methods are incommensurable, and it is impossible to compare methods using ``explanation of variation''. If you still want to get ``explanation of variation'' (or a deranged editor requests that from you), it is possible to get this information for some methods: @itemize @item Eigenvector methods: Functions @code{rda}, @code{cca} and @code{capscale} give the variation of conditional (partialled), constrained (canonical) and residual components, but you must calculate the proportions by hand. Function @code{eigenvals} extracts the eigenvalues, and @code{summary(eigenvals(ord))} reports the proportions explained in the result object @code{ord}. Function @code{RsquareAdj} gives the R-squared and adjusted R-squared (if available) for constrained components. Function @code{goodness} gives the same statistics for individual species or sites (species are unavailable with @code{capscale}). In addition, there is a special function @code{varpart} for unbiased partitioning of variance between up to four separate components in redundancy analysis. @item Detrended correspondence analysis (function @code{decorana}). The total amount of variation is undefined in detrended correspondence analysis, and therefore proportions from total are unknown and undefined. @acronym{DCA} is not a method for decomposition of variation, and therefore these proportions would not make sense either. @item Nonmetric multidimensional scaling. @acronym{NMDS} is a method for nonlinear mapping, and the concept of of variation explained does not make sense. However, 1 - stress^2 transforms nonlinear stress into quantity analogous to squared correlation coefficient. Function @code{stressplot} displays the nonlinear fit and gives this statistic. @end itemize @node Can I have random effects in constrained ordination or in @code{adonis}?, Is it possible to have passive points in ordination?, Variance explained by ordination axes, Ordination @section Can I have random effects in constrained ordination or in @code{adonis}? No. Strictly speaking, this is impossible. However, you can define models that respond to similar goals as random effects models, although they strictly speaking use only fixed effects. Constrained ordination functions @code{cca}, @code{rda} and @code{capscale} can have @code{Condition()} terms in their formula. The @code{Condition()} define partial terms that are fitted before other constraints and can be used to remove the effects of background variables, and their contribution to decomposing inertia (variance) is reported separately. These partial terms are often regarded as similar to random effects, but they are still fitted in the same way as other terms and strictly speaking they are fixed terms. Function @code{adonis} evaluates terms sequentially. In a model with right-hand-side @code{~ A + B} the effects of @code{A} are evaluated first, and the effects of @code{B} after removing the effects of @code{A}. Sequential tests are also available in @code{anova} function for constrained ordination results by setting argument @code{by = "term"}. In this way, the first terms can serve in a similar role as random effects, although they are fitted in the same way as all other terms, and strictly speaking they are fixed terms. The permutation tests can usually have a @code{strata} argument which restricts the permutations within levels of a factor given in the argument. This can be used to restrict the permutations within levels of factor regarded as a random term. More structured permutations are available with the @pkg{permute} package. A major reason why real random effects models are impossible in most @pkg{vegan} functions is that their tests are based on the permutation of the data. The data are given, that is fixed, and therefore permutation tests are basically tests of fixed terms on fixed data. Random effect terms would require permutations of data with a random component instead of the given, fixed data, and such tests are not available in @pkg{vegan}. @node Is it possible to have passive points in ordination?, Class variables and dummies, Can I have random effects in constrained ordination or in @code{adonis}?, Ordination @section Is it possible to have passive points in ordination? @pkg{Vegan} does not have a concept of passive points, or a point that should only little influence the ordination results. However, you can add points to eigenvector methods using @code{predict} functions with @code{newdata}. You can first perform an ordination without some species or sites, and then you can find scores for all points using your complete data as @code{newdata}. The @code{predict} functions are available for basic eigenvector methods in @pkg{vegan} (@code{cca}, @code{rda}, @code{decorana}, for an up-to-date list, use command @code{methods("predict")}). You also can simulate the passive points in R by using low weights to row and columns (this is the method used in software with passive points). For instance, the following command makes row 3 ``passive'': @code{dune[3,] <- 0.001*dune[3,]}. @node Class variables and dummies, How are environmental arrows scaled?, Is it possible to have passive points in ordination?, Ordination @section Class variables and dummies You should define a class variable as an R @code{factor}, and @pkg{vegan} will automatically handle them with formula interface. You also can define constrained ordination without formula interface, but then you must code your class variables by hand. R (and @pkg{vegan}) knows both unordered and ordered factors. Unordered factors are internally coded as dummy variables, but one redundant level is removed or aliased. With default contrasts, the removed level is the first one. Ordered factors are expressed as polynomial contrasts. Both of these contrasts explained in standard R documentation. @node How are environmental arrows scaled?, I want to use Helmert or sum contrasts, Class variables and dummies, Ordination @section How are environmental arrows scaled? The printed output of @code{envfit} gives the direction cosines which are the coordinates of unit length arrows. For plotting, these are scaled by their correlation (square roots of column @code{r2}). You can see the scaled lengths of @code{envfit} arrows using command @code{scores}. The scaled environmental vectors from @code{envfit} and the arrows for continuous environmental variables in constrained ordination (@code{cca}, @code{rda}, @code{capscale}) are adjusted to fill the current graph. The lengths of arrows do not have fixed meaning with respect to the points (species, sites), but they can only compared against each other, and therefore only their relative lengths are important. If you want change the scaling of the arrows, you can use @code{text} (plotting arrows and text) or @code{points} (plotting only arrows) functions for constrained ordination. These functions have argument @code{arrow.mul} which sets the multiplier. The @code{plot} function for @code{envfit} also has the @code{arrow.mul} argument to set the arrow multiplier. If you save the invisible result of the constrained ordination @code{plot} command, you can see the value of the currently used @code{arrow.mul} which is saved as an attribute of @code{biplot} scores. An unexported function @code{ordiArrowMul} is used to find the scaling for the current plot. You can use this function to see how arrows would be scaled: @example sol <- cca(varespec) ef <- envfit(sol ~ ., varechem) plot(sol) vegan:::ordiArrowMul(scores(ef, display="vectors")) @end example @node I want to use Helmert or sum contrasts, What are aliased variables and how to see them?, How are environmental arrows scaled?, Ordination @section I want to use Helmert or sum contrasts @code{@pkg{vegan}} uses standard R utilities for defining contrasts. The default in standard installations is to use treatment contrasts, but you can change the behaviour globally setting @code{options} or locally by using keyword @code{contrasts}. Please check the R help pages and user manuals for details. @node What are aliased variables and how to see them?, Plotting aliased variables, I want to use Helmert or sum contrasts, Ordination @section What are aliased variables and how to see them? Aliased variable has no information because it can be expressed with the help of other variables. Such variables are automatically removed in constrained ordination in @pkg{vegan}. The aliased variables can be redundant levels of factors or whole variables. @pkg{Vegan} function @code{alias} gives the defining equations for aliased variables. If you only want to see the names of aliased variables or levels in solution @code{sol}, use @code{alias(sol, names.only=TRUE)}. @node Plotting aliased variables, Constrained permutations in @pkg{vegan}, What are aliased variables and how to see them?, Ordination @section Plotting aliased variables You can fit vectors or class centroids for aliased variables using @code{envfit} function. The @code{envfit} function uses weighted fitting, and the fitted vectors are identical to the vectors in correspondence analysis. @node Constrained permutations in @pkg{vegan}, How to use different plotting symbols in ordination graphics?, Plotting aliased variables, Ordination @section Constrained permutations in @pkg{vegan} You can constrain your permutations within @code{strata} or levels of factors. You can use stratified permutations in all @pkg{vegan} functions that use permutation, such as @code{adonis}, @code{anosim}, @code{anova.cca}, @code{mantel}, @code{mrpp}, @code{envfit} and @code{protest}. @pkg{Vegan} will move to use @pkg{permute} package in all its permutation tests, but currently this package is only used in @code{permutest.betadisper}. The @pkg{permute} package will allow restricted permutation designs for time series, line transects, spatial grids and blocking factors. @node How to use different plotting symbols in ordination graphics?, How to avoid cluttered ordination graphs?, Constrained permutations in @pkg{vegan}, Ordination @section How to use different plotting symbols in ordination graphics? The default ordination @code{plot} function is intended for fast plotting and it is not very configurable. To use different plotting symbols, you should first create and empty ordination plot with @code{plot(..., type="n")}, and then add @code{points} or @code{text} to the created empty frame (here @code{...} means other arguments you want to give to your @code{plot} command). The @code{points} and @code{text} commands are fully configurable, and allow different plotting symbols and characters. @node How to avoid cluttered ordination graphs?, Can I flip an axis in ordination diagram?, How to use different plotting symbols in ordination graphics?, Ordination @section How to avoid cluttered ordination graphs? If there is a really high number of species or sites, the graphs often are congested and many labels are overwritten. It may be impossible to have complete readable graphics with some data sets. However, here are some tricks you can use: @itemize @item Use only points, possibly with different types if you do not need to see the labels. You may need to first create an empty plot using @code{plot(..., type="n")}, if you are not satisfied with the default graph. (Here and below @code{...} means other arguments you want to give to your @code{plot} command.) @item Use points and add labels to desired points using interactive @code{identify} command if you do not need to see all labels. @item Add labels using function @code{ordilabel} which uses non-transparent background to the text. The labels still shadow each other, but the uppermost labels are readable. Argument @code{priority} will help in displaying the most interesting labels. @item Use @code{orditorp} function that uses labels only if these can be added to a graph without overwriting other labels, and points otherwise, if you do not need to see all labels. You must first create an empty plot using @code{plot(..., type="n")}, and then add labels or points with @code{orditorp}. @item Use @code{ordipointlabel} which uses points and text labels to the points, and tries to optimize the location of the text to minimize the overlap. @item Ordination @code{text} and @code{points} functions have argument @code{select} that can be used for full control of selecting items plotted as text or points. @item Use interactive @code{orditkplot} function that lets you drag labels of points to better positions if you need to see all labels. Only one set of points can be used. @item Most @code{plot} functions allow you to zoom to a part of the graph using @code{xlim} and @code{ylim} arguments to reduce clutter in congested areas. @end itemize @node Can I flip an axis in ordination diagram?, Can I zoom into an ordination plot?, How to avoid cluttered ordination graphs?, Ordination @comment node-name, next, previous, up @section Can I flip an axis in ordination diagram? Use @code{xlim} or @code{ylim} with flipped limits. If you have model @code{mod <- cca(dune)} you can flip the first axis with @code{plot(mod, xlim = c(3, -2))}. @node Can I zoom into an ordination plot?, , Can I flip an axis in ordination diagram?, Ordination @comment node-name, next, previous, up @section Can I zoom into an ordination plot? You can use @code{xlim} and @code{ylim} arguments in @code{plot} or @code{ordiplot} to zoom into ordination diagrams. Normally you must set both @code{xlim} and @code{ylim} because ordination plots will keep the equal aspect ratio of axes, and they will fill the graph so that the longer axis will fit. Dynamic zooming can be done with function @code{orditkplot}. You can directly save the edited @code{orditkplot} graph in various graphic formats, or you can export the graph object back to R and use @code{plot} to display the results. @node Other analysis methods , , Ordination, Top @chapter Other analysis methods @menu * Is there TWINSPAN?:: * Why strata do not influence adonis results?:: * How is deviance calculated?:: @end menu @node Is there TWINSPAN?, Why strata do not influence adonis results?, Other analysis methods , Other analysis methods @section Is there TWINSPAN? No. It may be possible to port @acronym{TWINSPAN} to @pkg{vegan}, but it is not among the @pkg{vegan} top priorities. If anybody wants to try porting, I will be happy to help. @acronym{TWINSPAN} has a very permissive license, and it would be completely legal to port the function into R. @node Why strata do not influence adonis results?, How is deviance calculated?, Is there TWINSPAN?, Other analysis methods @comment node-name, next, previous, up @section Why strata do not influence adonis results? Permutation happens only within @code{strata} and this influences the permutation distribution of the statistics and probably the significance levels, but @code{strata} do not influence the calculation of the statistics. @node How is deviance calculated?, , Why strata do not influence adonis results?, Other analysis methods @section How is deviance calculated? Some @pkg{vegan} functions, such as @code{radfit} use base R facility of @code{family} in maximum likelihood estimation. This allows use of several alternative error distributions, among them @code{"poisson"} and @code{"gaussian"}. The R @code{family} also defines the deviance. You can see the equations for deviance with commands like @code{poisson()$dev} or @code{gaussian()$dev}. In general, deviance is 2 times log.likelihood shifted so that models with exact fit have zero deviance. @bye vegan/inst/doc/FAQ-vegan.pdf0000644000176200001440000043665512122046450015313 0ustar liggesusers%PDF-1.5 %ÐÔÅØ 1 0 obj << /Length 587 /Filter /FlateDecode >> stream xÚmTM¢@½ó+z&ÎÁ±?tBL$ñ°ãd4›½*´.‰<øï·_•èÌf’W¯_wÕ«îrðãc;Šòê`GæUŠOÛV×&³£øç¾öƒ¤Ê®[vïÖæ6ïWÛ7ñÑTÙÖvb¯“uYt/N¼.³ó5·½êÿ¢¥=åS‚> stream xÚmTM¢@½ó+z&ÎÁ±?tBL0ñ°ãd4›½*´.‰<Ì¿ß~U¢Îf’W¯_u½ªîvðãc;ZäÕÁŽÌ«Ÿ¶­®MfGñÏ}í I•]/¶ìÞ­ÍmÞ¯¶o⣩²­íÄ0^'ë²è^œx]fçkn{ÕÿEK{*ʇuÄpg6;µÞ$4»¢;»µgZ8, ’ü²M[Tå›P¯RJG¤eWxm½ñ­ž÷ŽE™7·¢â žÒ"/²îÑ7»¸¦‘¼ýj;{Y—ÇÊ‹"1þt‹m×|‘£o¼irÛåI É‘c¶×º>[TÒ›ÏEnn#×ÛûþbÅø¹‘ûÒî«¶BS¬ØEVå¶­÷™möåÉz‘”s…«¹gËüŸµ)gŽÏR©ð133wÄ xAÄbêí;¬ÒaGL6K& 0+‡}&ö"?‘á°(Ò¦Òa/ ¡cì,•!£½¥‰î-fö3¤Ù*IÃx {aªùð”sIC%ÒðhSô¢¨7å£Å}­HÏ=ŤIYƒ¹(îƒêjŧ ÿZóéàü4{ÖØSOØá5˜‡áZ ä®ekxvKº·Ǭü÷…Ü@2aÂ> stream xÚmSÁnâ0½ç+¼$z Ø¨"¤€ÄaKU¢Õ^C<ÐHàDN8ð÷õÌŠV{Hôüæç=üúØS`¾Jñ m}u%ŒÒßE Y]^/`»w¦¶oâÃÕå:1L·ÙÖVÝ‹omy¾èUÿ­àTÙ ÖÃþŽv¹Êó‘DM^ug{¦…Ç‚° ÉpmUÛ7¡^¥”žX[“ÖôÚã{=1î+kܽ¨8 …@iaª²»¯è_^|Ó˜¼¿µ\¶öXq,ÆŸ>ØvîFŽ^‚ñÎp•=‰!9òÌþÚ4gÀêBË¥0pôùÞÞ‹ ˆñs#P~k@hZ+vQÖÚ¦(ÁöA,åRÄÑf€5ÿĦœq8>K¥Â_¸—žX NˆHæžÐÔ3$¤Çž˜{<Ý0Š*¢5cÕ~ÿP÷õʯÂùÝ5WÂ42^!ž0^#žrq‰xƘœE„3xÎü ñ ªz“)cÒgl1BÌîÒ°õ•?ŸXqû!òŠNA‡¨Wš»A*dý1ùÔ)iȧΰÅç“Оó â9ç’†NVf¤¡–kô¯VäaŠžUJü†ôì?%Íš5Ø»bÿTW£=ј«±®–¾Œ¿É5ëñ2éfè&p2pj³V^ócH£Mc†VYxLS7˜E=›þ1âj· ¾gÈÈ endstream endobj 7 0 obj << /Length 821 /Filter /FlateDecode >> stream xÚuTMoÛ8½ûWèÐ…h~Šdn©»AQ(²q{i{P&ìH©D§È¿ß”Ú‰ Lq9oæÌüdæTæ¼æ^»¬~Xˆiw»ÓÊXͭѰ>.æx!5æ/—¥peà> àýz±¼„-%xi½ÍÖwH£%WFeëÛì;{ʵdñ¾jóŸëO#X:®¤5.-÷ï¡—¹T–]à+D/þ]/~½¤†“6®¬©ÍŒ/äîcv·¸"JVfRð ‚Ä,*hn÷Š—ÁÎɼf}üµm®V5‚·¹-Yué‰V%†;ëç7>—¿ÈqL´P>p]¨âÁN ~C¦±š9ywGÿï>T)žç…1–)!u!T!Åd8·ö\‡):L#½á›(ýsŠŠåN¹!”tíaÅz“+Çö¹dg¤Âœs”4Þдœ¨þ©¾áÚ”j|®VŽ å¡÷ s© eûTõ œr–}ÙUOJ¥<‡s²äR:¶Þ4P$å$ûüº~K_óc;`]•SlßÞÆžii±êc•ª¡VÝÃÃX{ _àµ)õððæfŸÆr HsA€Ï”CE”akT££ÈSã+@P´—„·Œœ+€JËêî“>ã—Ë‹»i|®&ê ·Ñ.š4ûcv‡Òà9§À›r4§à -ˆ– ®í¡‡glq&ÛµÉë+GÆ›”Ï—Ëš¤Š5 Ä»þ~9±–7ÏKÐdùš¢û™pLñÄšPoÉÕßxhY“ëúQäB{`AÒšbClÑÒ®Dѱ¹v1%lÜJí­òB2,pļ–OXö8Å鹨÷Þ1˜=´ý±ÃòmWõ·´wúÓˆ,™MJt¹ÃŽðÀtŠ\W-áiUmÝ uwvªYVÕ®¹ëú¶©ÎÈTlc§õ×ë þr\1yi5uVßÜoÆ17b,ŒQ°"ô…š”«Éc¥8GPE(Äì‡ö”ÁÔÖ¼ ˜¾@ÿµÉÏ0(üüf¶»€íúj²K ¦Éþ?ÄÚ endstream endobj 61 0 obj << /Length 3496 /Filter /FlateDecode >> stream xÚíßsܶÇßýWhòtzJü&ûÒI“6Qgšf¥žiÓúŽ’8¹;jHžç¯/pÄà XÑŠË6Ç÷C{üž…Ï.°‹EÏ2óživ¦sNr®ÏÖ»™{÷—Ô=»0Å_¯^üéьYAÏ®®Ï$cDR>^çjsößU}þ¿«¼øÛÕx!É$‘‚? V÷$Í× š0*…•´ßš)’ÙWVí꼫òÕ¶:¿àZ®šëáñ«fÎ骯†‡Î~§áR‚p¡˜½Tvv!(É„®DÏ/(eru9|¤mÌ•èjsX÷µ¹Øñó…?Oí×Ê¥¹Îñó6ŸWzxP“Wóß|ìçþ°7?àw9¥Êüö…g*—$Ëò#Uf8ÌOŒár–³½ŒG¶ü€ž^Òa‘À9Fp>•œzP®H!Œ¢Ê‰tþC‰%1˲ÕËÛ²7r¾ªÀ’‡VŠ&€¿×ç,_U7¥cuªÃ4áj4ý‹3)&W#¢È ó§ÞG¦ð¨ÏÝC9#Y^~¨ 9Ó o&|À¼*æ?˜¸”DÐü‡ÅüÇ<ŠÕQòsó”ñÏýÅ"K¹…Ãjž_xcÌ1&¤&=#Æ\•ߌ0“áÎ7¾mìtñfp‹¾ܤyÕ—õ>6ÕæbzÖLÃ)˜•ûÍpÙ¸×ñá±L8\!…¿#gþÞÃcÿ@ÕüYA(ñ÷¦†¸+×–ê_Î¥Z•7Ut½eÒ’ñwô‚Muw~a-÷›ÎyÙ>¾þ27ï,³Ðû[æ8æí1 'x%„1 QIšJR¨1W÷€núÛªuPŸÓ•åZ\P¶Õ`\Zˆ_ŸK¹*ë­I£ÍªÁäºi“jÝl››ºë»(¶Le„òså6…š¥y¨yc µÉÀ'Q „1ÔPI@-c$§P! CmcÈiŽn}ØU{Ë\_öµ}w?XÔ]9G¢å-s§&æÒùI. ÉUôó‹±)HÝøÎƒÔcNIBc¢’R™D©Rí ½t´YB]D+‡w¾iË»Ûz]n‡—?u€ðåÞÂÕWíu¹vPþœÉ웟.ÍõQ1F©$SOF©±Ðêãª+¾Ûç@ÂXÎ20F€œàÁR@†Â¸$©‘T9–p­ë¾Šñ”s¢¸zªÊž&æ‹/‰ÖG¿8Nynž×xcÌkB†Ó^c^ƒJ‚×(~äØyMyÍ«C½ÝD«ǧ]·Ín¸n×Úu_æ*E2ºT+Þ·B qGÇ<Ľ1†x\ñ@C•Ä¥ùîtDœfŽñ/! Ö*¯ê}ÙÖC6FW_"Ÿlªíí`<¼h»ºÙ'r4óœ1¹Ð«ßÚÅê<4½1†fJÍ@C•4¹6ëW>¢ ;_•û¸Ë´C]®è‚h™¿cÜ­Ý¥ÿY®£Ð ú9מ¯BÊBóüÀc~R™öƒ@óTü€qRP6úÖ!­«ì6m• ·<¹q»ŽÑ­jrE•©§Û¶_¼ä™l˜=ó\Àc.™v@sT\À¼¥•w~RP©ûI5e„½i'ï_Weh«(²TèãnYŽ<ϯ›ÂÛ‘1ooŒáÂÆ“xÂÞ¨¤Ã[š(JG¼Eb¥³n†j`[¿:ô°>o¢ñœ)¢fnŽÏ*Öäϸö·ìŠ@³¼ 0F¼`ÂdÒ BaÄ pIð‚\±ï•P™p‚[·Wc‰~ð¦­{(§¯×Uסž! óÔ;æ㲪«û¦}u)H.Ô²ê™ë0Òóhm1XtÒ¬zU Õ©Þ´×¼RšpYÀâghÏþW»©÷e²';¤PùSÆÏ¥Qû±™¡k§†aœÕ¡#Ú2D’Â@ÃðD21yN îb4[´/‡ø7J ²ÙoßÏŽëˆÃîXÈ;–ôÖ.~B{œwuj7e_ºbà¡n:²‚þ`fxíúzë¶>×Íîn[Öû.º¡„ñâ™-DRAΠμ(ç±0Žwš°@# •ÂŒµÎ0–˜’Ë}¹}Û9DŽUâ·aþeÕRèJÂî­mÙ¹Æ U¼DÌÑbIÉ~'ˆÃÎãp´Å0  HSèU11=`22ÜÆ^á—·–&ÇÙ¦îºzWoK³¬¡Ÿ,Qéâlö6vÐ0YÿœQìÂîœðÍFøF5 Æ>-’S¸ Ã5·ÑÃ-ÿ4n^à Ós¸ñÂÌ`xAsîÀ`R˜%SÃüOÇö»~ýc”%Nx®ü„׎y œéš]Õ׻ʽz2'ŸÐ,43Nô££æÇuFÆjl1BÛdø“¸…Âo¸$g9'Y9]ÅÝT®¶ù[Õº¿‡Ç.ÃÌâÍYì¡g(ÁºÍ¬ðnª¡pm6WéNvØ#ƒu°#`È+=ÙÓ=1F2¦?‘ΰhnŒææ1ÐÂaOƒc ¡’šæ„úÕ´Îþg+5º0Õ$ fYÎÅ'ÝøñëÆz°Þ6ÄG& „1`QIVeÇÐâ€Õå··UÙn m¥tQñ­µj.4–û}ÓC-Îf¯ë¶Ùï\¨„VÜáúë¾i»iNÓŽ=¹Ýtÿõ8ý»Øî°ùŸ1JršŸ]PóŸ–.{s[O÷ܺ•äÞò!=¿_ã«¶´?ÿå¢i7ÐÜ­›¶Š¦ÉT "—ÄéƒùžPÇý’y¾ç1ßsVø^ Œù* ¾g¬šA·åØ1üÚÁ޾äzÔ½?ÁRêK-ô´¸>t ¾4ÖM‡¥î¯‰ŠÙæãB|’SLŠ"7ó(òÆEᘦ) „1ŠPI È(K=Rï ½­"Y•ÊÃ:â_Û|ݾ”&Ý‘~£fˆºCï t.v†Âj?gŸ–Ñeí¢?ä¡ÀdëÞc=$/Íz Œ±ŽJë™>ÞúªñÐJ»^CûIYoÝráMÝߺ¨I¹°PrÝ–;Y«_ÝñÜu_m¾˜¶²Xûh¾ÆÑù¸ÉôEÌUŒ§øD­«ûЏ…Oì‚\š5K^¯ ílò°¿ù"š"òg¿5š"Ó ê<2½1FfÈIšÌ@#•td²B¦ÇêØIûïóÜɺܯ=yvó¥rÓø«±Æ*Næj~œ«I¼±[Å—Õç“ö9ÁÎâ00F8œP‘ä0F8Ä%Ãܶ¯zÙì“þl æ^KñëÞ—¯ êÕõíï}`!q‹×»xV„gzËM³op5-äŠG%µükÕ;î×>oŒ±ޤJ²cì ’ÀŽÒ¤Ðld'ÕjgN½jÌ\äNqûÜü~V}W»3·í]5€“ ˜*ž£èŒˆL> @)ÜÜHÍÃÍc¸…ƒ¯“¸Ân¨$àf»¹˜o­[2aÛš»Û˜ÙÓ€ ä¿›ÃnW'Š3Ú³Z¦Çç´E£=YoŒ!”F6ÆE%YA‰ÒYK¶Ç›¬$KžÖ¦>â¨F²gFå²Ö{òµžÈy4zcŒÆ40F#* 4²œH?]«iíþ­ª—á¦$LÒ‡ÎÍÍßVÛ]§˜Æ¢»Ýδ[ž»“Žø²ë»x ‘ÉÜÙr ѧÙowƒ:ÌÑã2 $ObéU1*1=€’†Í»„ê{wK†å¶.;ȃ_ïTLõAWÆ­¯@±Xu•?>½KÜ¢J‘³Ï®ð˜"‹ÎèÇÑ¢Xsìé%€‹ÎêÇÅ%¯ŒF=^°iòý¶éûz勒,"cËEÉ~Ç »¨ÿð防7Æ@±Jƒc £’dš$Sc§…}›¯¦5È—«vwÜïëËX[?Í~ìÓDûå4D$Wt9vöÞQÂpÏb60F˜”d6F˜Å%Y-IAÇf–aÇäЭ½AƒœXÝMâu÷öH÷«¡4´”]•ÑÞÒÒïbß 7s‹ïds¦ˆàÏ´J”âÃýjçñá1>ÂÑJóc| ’À‡bD+ÏÅøð•¦våäõöÐ÷”M¬uƒžh^à’Ð%I~wnÈæqç1îB ÒÜÂw¨$p' ¢à»Ô¦‡‰C²¾ƒ:"ì±Õ±p`·©KC^"Å0¨\îöøiÑÜ<ü¼1†_C‘Ä/ÆðC%?næ5và0žÀï·fØ8Ù{v>lBúÌ\¶lÙ¹2qÁå|ù ïs^vc;PoŒâ’4Æ=‘¼w˜šfö®²n»ÃÔîL•–î`á1šW»ª¿u«‹ž³.lO±ZÎY#äd™ñ(9Îö"0Ž>¹äpÿ†,‰N Œ¡s¢möÖšŽýûãÏ÷ï²|õòò»¿?ÏÅêËïâô8#B.Áêã ‡†F["s8àGúÓ o †Ó >@t ‹ :žµ&:—À3‹tµå8‚¿q³óx¢¡ÞÛEä¡rí\ºXÂó‰ E˜çzÁÿázµCà Õ,Ö¼-ÂZ8öiÖYì¯Ub‚ãŸ`2²#kÑ¿Àälª×A‹àºÜ®Û²OìSeo`U,õêg”N;ÄÜÏbÖÛ"̆ ¥™ dGfÿÜ1JÞ endstream endobj 13 0 obj << /Type /ObjStm /N 100 /First 826 /Length 2137 /Filter /FlateDecode >> stream xÚ½YÛŽÛF}×WÔ£óVß/ #‹$†½ÖI0¶±»qüÀ¡¨Âr@RcO¾~O³%‘²¤‰=Ø"»YuN×¥«YKœ4 aÈtŠ,'… Æ.H–w$ðK =$„4’$'¡¬›IAB{Œ!b‚# '0²—¨hAÒBÅàS é¡â1å`æz¦¢(& œÖ¤D'¥!ŠÕ)Q±…ÇØA‹SQ ªF{Ò€´VÍ@­œÃXBÄÒ ¸&@kc´Á#€k‹Gc‡Gc¨˜¨‡)øÊs?3S0.0¤·"þhLYŒáMå1¶˜ ŒÃ­ÀŒ·ÐóXœÁ#ïüÌA>N ²¸.à \¸ÔrØëc\ð®²Îö€X/¦¬ð‚‚¤à4®VÏ‚!«àÏ<åpžŽÁáÔpš5:ÎÒöñ¦u1ê°X!€êTœ¬ón³Äúˆ_[âè<â þÛ`-n€bê ØŽG ìxDFx‘1gnàÜhƒÁÌ"êdLXí$B$C§`‡$à £<Ô&Ã#'g€*g")"ãlÔB(Èf±pÎE {d27p•@\@ óˆß8ãÈG»4=r2æ3Âq`‰×ZÏž>ÍßÜß4ÿ-»*fóŸëª+ª®%‡-u1›_m½nò¢ÅÎê'^‹2û©þDï8ÅØ&ø´`>¼Ÿ¥:ŒJÒ?VU °wÔéýì‡F”ýÓÙü§ºYMäï#gÞÑ;©,“qJÇr[“i¤/¶nCîõú²ëqþ]V€FOŸÒü5Íß^¼L?O®»îöóyÞYWÞy}sSW-«›«ùªÌ‹ª-Úùåý\1>ÿް´ÍêžÃ =Øs'É÷+Ÿ?‡ûÂö«àÛû˜H›{”Ô‹x ùoM¿.` |ûì9ÍߟºÏ=ð™Ó­8ðzø&·‹>j±ö—.É$‘̑əŒiýð{Ia“ E&™PdB‘ E%•PTBQ E%•PTBQ E%•PtBÑ E'PtBÑ E'PtBÑ Å$“PLB1 Å$“PLB1 Åø’t/ÙN嬎il-ë ãuRft¬%šaBn—¤/ê75ÍŸÑ1μGPJÎ8Jµ–i8`Gé,ÚLJi ÓbDi% aZJÍY,˜;JêØ¤”ÒÂ*;P¢.á”R(X5¢”*^'¥äV™RpTY9%¥ñp¬6 Þ¹`µ;J)ÏDé4¬Ò¥×Œ1)¥LFª-¥ã,èI gRŒŒ4޹þ”˜ŽR¡¾¡\ï(µfVMK)sx ÜQ*Á´÷“RrÏìȯÂ3¥Žç«:£Æ9?ªé†&ü´ŒxËRj D‡À¸²“PnKcDÙ¥ÅX/=úLV¢†û!wÐ&1ÃݤŒ(áÖŒŒTŠ)c'¥D 7£—y4®SR*”peF”Ü1n¦¥D —|x#PA±Àõ¤”N1á+ÑÎ1tpG)Í™(QPŽge4ÓFNJ‰ urD‰^Cq1)%®Æ(¥gh†'¥DIU|8ž•0SÒI”Sa†ƒÅ;O˜”Ò &ä`¡ô8ÅÂqJ{&JTpo†ú*]¼?›Ý™(±!¼Q¢A5š”º%z©í¤”أ쉟Hx8ÎèÏÄ(ög)Ñãh+ÏE‰V„‡¡¢K𦧧¤±µ•" ÇÓÓRâq£¶Rx?oMJiÑã顼 ´"JËI)5ÞñFm¥@/"N´•áL”èEp\”8:¹“P"35×$¸fƬěí©Î@ðo}kŽ­UüjŽæyHŸ€Â 䤌(âvÔþøXĤŒ6^·:‰¾ö ŸÑ;»ù<ûßÿý5r60¤Fµ^­Þ~ä}Ù}ïE²êØßøêàãï_}ðÝ_ï˪kêÅ:ïʺêW¾?s ÿŸë¬£²¥»â*«þ™4>›;©sñ™üÅÙÕ©«©¾ì²²Jˆ”U‹îÏó^Ðm–È®ŠÍúhQÜÕ¢¥zoùŠG®»k$ÌN-k Êî²r•]® ZÖ y½ª¯Ê¶kÇL_¥öó¢Î×7EÕe1RÑŸû0ú­Ãrû1ª³ÿ›~ë endstream endobj 264 0 obj << /Length 3389 /Filter /FlateDecode >> stream xÚµZYã6~Ÿ_ÑØ'70戇æ%H‚$;‹$Èöt’‡Í>¨eÙÖŽ,y%y:ýï·ê4m÷,4Ð’©R±X¬úê ä]ò.Vwq¢E¢ã»ìð&p£ßHw·‚õ„âëÇ7ï¾ å „ ¬¼{ÜNYHÆBÉÐôò©Hø å“÷ë0Ò«÷÷rUÝkÉBÁµ daFh)dÜ­µ6v+”‚x¨Õo÷k¹Ú§¼›UÑâ5\}B®ù.­¾d^¡žª xI+¤J˜×¯÷‰&bG;S­‚^!Räo"³Zº>ðå˜f¨Û÷a¸Jw9në†o²úpÀǧªèðúÂÃyV—õ®h»VܯAw«÷]OÏ;••›®Û;ž‡ºuDGÚÅúx*S7Í!ïönoÝkõWŠã5¬¥VG+a‰Ê®øDB7EÚÁÊ(X[Z¾´¸ReôªÊóM¾áû¢â«£¨`ûv<âÖ’¥%ÿž.¹ÈÛ·0IxÏ1êXκt“lj ï7 <Ë›µ£¶¦R½¥%óÅcmìªM¡Ù›¤WP—³2‹´,_˜èÔæÛSÉTÛSE&{à1™$BYÝïþuCÑ"0ÑÔPp®ªîx¢6/·kÚÙ˜v6ßðøÓ©cÊÂâÔº_O´ŠœIšSÅ£§jÃË´`´ÅJI¡µ«¥íÒì‹·E‡`r¤‹OESW§—·øÄ: †šÅÒ´lk¾Ûä¨Ê^F»Â‚ ¸ÒÊÙ3v{ØÆý±a^ü`ôŽˆ½C®üꆥÁ}òZuË@NÔ½À/…BÝE*ÆF„^üXÜB‡S cÊõ„Ôƒ°sv4ç¶És^`[oɱŸñ_Úä—°t*Í,½. Àbĸ8µ}ŽÓvMö”»¶’…,2 †÷¯iéÖB$SV$Ê÷?ÿ xê²Èòª=S8²H"3à\=Õé—ÌHá‹kÌ4kÃ>‚¨käáKŸÕ-"x WØ}Ë·)_Ú—¶Ëxp Á™;Â@Éã 9;€Ä'»&=î‹ #ƒÑ†"¿Pµ0˜àFÝœeZíNä_8x,OS‘uWr~zp^²fõ\€SÃ]HÁ2Q(€ #yZ‹ððtÚíòG’,ËÛ–!Ìã»YÞ äñà ¸з™Öo]ÀÛô©(‡¨‰¼€§gŒŒ`xǦI(è­íê¦÷†ÂQ´YS;¾ÿ=¦ÌŒÐ`¬‘‘q8n0Dæ}J Z3þ®9 NXçø´;ó6 °a- €1˜ÐUs´ë 1›½šyÝ‚%ɹïºãïÞ=??‹‡5èà?yÖ‰ºÙ½[ b “Ìä9w@Gt.Èg¬œû­MÈ™ êé–ud…ŽâW)¤§½%Ç‚åœAçø"8eE¨Õ •ôT7d1–”ÔsYÀánÓe ¹TDp¥#I\f&þýO¿øI)ʹ8¸nÙWʳeJ¥…Eɤ€„W Ñ‘®GZúÏÒôY}tÓoÏ]%“h*À¹š{¢SÏYÑÔoÙ£]4ä jðñ(+rÒÆù>¡§f¨Y†)«¯|®zRÀã†.øM·sæ€<&Ð×5Ô]×V œÎxÄ" r}ÀŒx†ÁïRš¸7«K¶ m‡tíÃ߀—ô` é©òp€5à¿£8õ½Và£{)nÀµ~racZÑñOÞçׯé¯k c†SRcú‚({8×Ö«†RÓ²ObÓ6çñ¡¡0múºê¬Xˆ˜Ã¡Xà·.e¯`ÀíI3ZÌ4ÉöM¿z'“·Û7õi·?3kEl0ë5TzVízBì3¡Kn,<|õÓ€j% ŽÎæö¨£º1ë’ÙU`«© ƒz…”NC›œ•\Öǵ«t£€g™•ºcJþ>ßMÏnƱ"ùÊÍœo¤žn$Nð4|„7þ„bÆ€ûy#(¨Ì‘зsVœÅ¬¿ÃR òÜ—À{³©ý RÝšxÁìJF®¢ˆ9" Û#‚ñ¥äìéXF|¼H¹ÆNšà«8ÂÅ*‚Èõ}]­©Âa“¹Nú)¢˜ëá(éC‰Ç””`Ò½Üp¤Ë}ДÐ÷¬»„s>C&Ž£{žú¹(K~€0OÉü&çGéæUÞUF&ˆ#„~@ ±1Ìÿ(žJÇt![Ú7ã@W¡‰Œœc¹¤»>u`רl’¡kwÉhâ+4ކšø,;5óFìÆàóºâ»“kh)®G(»nÜ»°i¢¾hàáSëU:¸šˆcûYZ_“Ã>q0[GV®ýû ÖŽæ3fÁ”Ô¢w¾¿X®´®ªGŒ‹ 㸠ÓÃH½Ë]³ ¨¨NóÆ$ÀCû¹0VTgQÂö'w:N ¯¸_zÚõ„ØW¾/XÞD*È7cpŠ©¤rT7&_2‘ äבˆí A×Wø@ŸJ,(gS|Šs‚¤Òçîvê¼×UˆPÃİU’Lq†gF˜Ád/ñÐOk½o4ÂÁ8üêÇ Ä£ ¿õqB% ‡]öÉ› †`ÎêíѬ<µ7§Î·À6y=+Èàº"Ë/°²Ñ°ˆzf U`z¢.+»ê¬É ©˜7pŠŠ”8J»"£›Æ<¥ý3j ÁµÉ©Wñ÷y’ìIK.‹þiË£ÇG¸k÷õ©t¯Œ‰NK€`¥(SFyi¹W—=5/³Ù ̲ʒ°_øz-ïéìJ­Í¦ !±ø26Ä$ò/XZ(Ddô:¯P”=œy“Κ!&Æ »Òäÿ=ÛÁ@Ç\ÕTÊ`i³ÁÅ(>ÈÑK(¾p*¡%Röumj#FÊMž•` -ÏÕ‘¡pÚšD"TÑÕ°€¨[.U¬R7Òbû­¥æ×Ÿ·ØÀ·ÀØ 2ªOLOI*Žºö:(VÀp ÄÌbîÝóùfoÌ4Któw>y¢†á‹ CìøÜØ:yêW4ùüBÌ2-¡ÂNÈ4 A¾ûØm‡”?S§kžSxä7à‘#:¶àhÞ˺Óß°G‰šoÍ”fPiئõ¸i òÕͦ˜Î³X¹L4P[^y˜üå+ov¥—3fÉŸµÞ “NCÎ"ÔŒ›Ân šˆ+ °Éôè/¬‚X˜Ø.:-¡¯®êK/ÖV¶ð‹¬Oôp$±Kùñf<ÊþÒÓGZ4c|=„”s)eEb®ç—=ízBìk.XrpF¬NÛ|–ðk‘?·ç}Ê@$JÎDñ5*™ê–Æ5¢¨ ý¡ê dpÕPSÒa ,>RÂï³kD8F±o+wbog­Ï¼’@ÈD.s©ËXŒ•íô=€ûÀÃ.†œrœþ²µ&Éè?S¸£²¼Å–ؼ7§ †Î,Ë—þ ­W½ÖµÓ~ºÆp?i/÷FÓ¥cîb¢uöÍÏ Å¢(¶©©÷“°ã7ÃÑ*<ëÏuSĹ%”™Õ–R׆ü‰_A¢ä<ˆÄ|Š˜ÐW/'§Ö„„[eáñ#‘þ´ÈAzºq>‹Ç\“ '^íóò¸8 ¤. b‰† %iÜ ¸=gkôì9XSôU^É̺P¿ì}î0ªŒ¼ ~=·®¤_W2n <ÃÞkÅ'”ÏÒ•/eÚ31æ_/¨òÓ{‡I8ÛÄ^~ÙS¯ S ›< yŠž‘}Ì›EXŽ Ñ­9 繓‚tØutpo\IÆÓNÎQ­…D$6~]á¡D¬/wq.r#0âèrÖ„¢9§‚Û3»tõ'7 cj@JÛãT0©@á陈VQC} æ“®•Zt¬Rp‰›ÚáÂH¨hDY(¥i³;Ù:3¾œ*ª‘èBËì@ym¹ŒÉzžkÆFF;%ç<ß™@-»œ`Óÿb)/H·Vø5Òåg ÞncÚWÍ‹\\ÁÚÂðb¢/§âKãT •%coö§oûàŠöP»/2Âø/šý›}Zíòê×¼ u6á¬ës&¥Eÿ_åÊã~èò.Í‚£+š°7i³ÂŒl¾ûêŸkrqÜl½ydZ¡™7¶]Öû?wûÊe endstream endobj 276 0 obj << /Length 3452 /Filter /FlateDecode >> stream xÚµZ[oì¶~?¿ÂÈ“ xi‘"u9@äÒ¤î-ã4)š>ÈZÚ«X+-t9Ž_úÛ;Ã!%J+{×A‹}EΒù|3CŠ_„ð㉸HÒˆ¥QrQì?„¶÷é·­ l<Š/ï>\£øYfüâîÁŸân{ñ¯à«]~èu{¹‰¢(à/7Rªà¦¾iзÍåžÛ¡è˦’P¦*—ÿ¾ûó‡?Þ«*¡˜’Ñ ÖÕqèó—BS*`3f¡’Äã/!OpÑå^¸`±R0½¡úa×´=í£|…ê|Êà>ïÊ‚ºšv[ÖùD²×ýÎþ³ç£å#y!ƒ©ÜúŸpMý˜×k¬FÜ‘ýªÐRŸB2˜Ï•50¿ù„³±ÃöamÆTA3õfåŒÈæòÜDIÌx”]l¸b©ˆß#Ñ›SbŒ‚m ÛNÝveÄ/ï!O–¨ôÿ!BàÌpõò¶y˜²”'gÈ1’L¢9&ï‘ã×eW ]7 ž2Øê®|´}[]”Hñ¶¸â .þ‡âŠFqÙõOI+bav†°8gâ÷˜Ü׺+Úò0Zó@²út©â o˼.4ò¶/'ƒ5ÓBo‡Vwô¯Ò> 5ïŠDœPGA|Ê[œyU1À¥w‰ud²¬_jÆY©#¡^l$ÈO&™7P­%B¬Æ ˆe\~YÚ8_’lÇDàv=€Ú4ã×3Hiwvq@pxûÀeãFp0‚  a%!Yžçw ³(¹gïÆ*¸Ûí?vûG} &è‚ã0ehÀ¢$Πˆ¾¬òûJÛî~iû\BF i¯Š!áHÞöQG»ñˆW|`9%%ô·_üýhí$e`ÝþÒÇ~g‰N­9ŸÊI´Üô´wê¦w22½q1 Å®× ‘6w¾BÇ$ü œP„ÁýÐÓJùvkÕÌR«ÖÏ4è²§Jð£p)s*æú.šý¡ÒS˜]á:†D;>i ÈíÕgxÇœŸP– @`³m)¸ï!4Óã{›öéž¼½v^…ÿ1ÀD÷ÆS“µ”ÝLUçÕKWv Ì$TÁ?1ÍhH–2È“­@¬c«ÁÔ™F›y\ Ž€_º^ïAÿäg‚gêW€ ØE9xÙYM’c‰­\#Ø û¢öïç.l:°ô:þa ô׌:bÉr&Sâ¦@0+÷ ¾¼Ýâ›DüZaÌ^FŠäŒÃ‡¡qo‚»å §fU>Ñnɺä²b!. ›íPôϤ"<“„ 2¶nïÀÉ y°. ¥˜Š“s¥Ny{ÑP°ÌKs &'U PóÊJws¿¢ÇQ fYŒg˜ER‰h§ÿ'ÿîù¹³ŽsTTŸ§„åjšÜ4^L8è¥ÖzëÊÁRÅgÙQ~€Tí%doc:¦eˆCQ£T? Ã'ÝÙSÓ|E﮺ì̓KÜU¡]/Š}r1¡¸2ªÁ¥£àL4á„&_¹ìô†ø“×Ò>Á ÎI[Y™l0ƒhž´nÐ@a{f4òÂÄ,b¥ ƒ@ynNšª1¢xˆ©Ok³Â•#!ì¶ySˆ;{3}„ݳ0ºQÊb¡ÞDFKºñhWPj1᫹£ -V^9ŸµT']N6ž·É0ø“Å”´=Œ° 4ÚѸl0¨ètg}#R´òj®'ÒtŠ "MlÅnS–@ψ6Ø©ëÛœúicÒ ï f’©3¿fUÇŒÏ=0Ä W:‚€âª9¼¬ò€ jty}§B&!uç@}½éAŽvã¯]â-¦|äóq–ÌÖ^¹:´T§V]L6°ñ)XÍsTU×,«÷ÅÅ[vƒÏtþ ®~¥Ò‘S ;2žµk/‚pußʼns*“9@ˆ§¯s¦ë°ûáqñÏ;Q´ ›t*ñÓ)x1Ù!‡}- èyhSDC3§Ç=ü™Âö+`dËñ;/&|GÄ5º]3T–ʯ’’aÀ>AŒ«W^(‹3oSéHºÏ˱Ì6õ(.Ò´®–…Š\Î{¬NÆÃJé…=±ÒªR¨ù.°ÃmÑP§§8ÐPçV#•1r¡0›–­4…𦧲a9,Z•ENÇ•¿HÞ´­Æc úžbQ|ßêÝB7É,ž«ˆÈÓOOú ñø¸¶-sà£ú·¯„¨“Çî"0a!RêþAbqLG`8PZbtï9í6ïs·¢%rs+:/‚gMAn¹£µSJnÏ ð@éŠÞ½$9šÄ¥Ý#öæÔ±/ëroî«¡8#ºžæ™Ûs FÄ+õ†°l±¯½ejèk†þ0ôÔi 2œY¢nÛ¦u˜uý„eúÊÇ*¯u·-†ä¸üœð5¢´MͲ†õ’5ó¢|°pìßSÃëx}æ}£´â¢äïÿXË+䤗8Y6塈Óùç _ÿð‹´Ö}DE LEÉvE²¶y‚Ü_fDN´F«ï¯þÑ” Eû|:Z<ú8j™ªwî¾nê xËãT_Â–ÃØÌ4û é{{˜/cº…hzûb%N&3Ç—ngò~lÒµ4Z—Žìj]]<ÂXg§mˆò–¢•9Ʊªìz,@UÚ*ñû´5kˆ!dâ\À–Ó7 Æé}¾swX#!÷Ìyóx„lªxÒ×â«æ2žÿIá endstream endobj 283 0 obj << /Length 2237 /Filter /FlateDecode >> stream xÚɲã¶ñ>_¡[¨*‹&®©J¥œ)O<9:J|°sÀ#! 5ùL#Ë_Ÿntƒ"%ÎÓ+°5zß@‰M?±ÉãM^Ȱù¦:ˆx÷ËÁ³ìfÿØøþS*6" ˨›ýaŽb_o~ >žÔë ûíNJˆ¿nwI’ŸÛm\Cßmw0Öc5˜®()Ò@nÿ·ÿׇ÷Õ4NÃ4‘OXóPOø+²°L`3 £4!÷'Ýkd%Tc;šË;4¼ŒGšôúÕqÝõƒiyo Aº†¯ ÷"ÄYÆé,ŠÆœD(Ó¹ v7^䥓äçݧm!·£~`¡,B‘-YxÔ¢‡zFü™#þH_¢¦RÃÜ´hµ®çÊBEu®átæÔ-½º­Ø"£õ ·‹h-€BÓÀ…cZÈP£Ž0˜%¯û-J£ádÜ* =S]T„ˆôûOàÈ" e’Å(pTò°(SB.B!·»4‹ƒÏˆ.O3Шhpî‚“®_ì´Æ^ÿh,• 4D p Gã3bŒ2b8ʃ¶ãVWÚZÕ›æJ'Šö‰&Þ8оíΚvc;ÅXÍW4 œ‰ÀÒVm~‹„„0 È¤û½¶c30ÄpR|}²+Âè?H}º0¸¥€hRÌèY!$3ùâlæÜÒI:3•ã¿ jݘBÖ+gÁ¦5ÇÖTÆ‚!ÊHA2#SŒ€NÀwcCè=8V[`ã¤+¼ó…NžX瘬Æ3ê!å•VÝáx®Óz«WE¼Rb\0z;.Y Ù†ô®ÛÃX“î«éÆÅN"nbÂòb‚|»ìÓºõd<õÓ°:y>o¨þ8ÉÎW;íÅ Ng§…x$#Iå Ó¸O¡‹çg5þiûŠsð$ôt>ó&§z¹ˆdÀI.™Öª­4¤›¶'‰(¢âyDIL y Ü:6¿êc )g-ö’4Œ¤‡S Éé×g•jª±·´”sd.Â8*—Vþ}TdGƒìû K"Hmm jq‘¹„t9¡qðˆR“â‘’µæ¥Ñ”’vY–?Ðù€¸˜©Œ±ðètãÄ9-ñðJ7­ê¯úÔh,'«¬¸±=ucSSڄࢌ:9 &Ž+ˆ(ã|Òî “E# ûŸÿóãšUr(q‡ùâjbÞ‰<†ºŸ>äçó³ >*´¥äû™† œòÔÐ(Ušöœ›ÃøOôQµ>CË72ôÑ-xw)Ãdò<—à Ì`>0ë[¦-£À$œS±Ã2éz$d’"!2ø¡ièüõôEMY p˜-es˜:÷ÕMùŸï¡ëàµ[î°ÜPhlï©ñÚwàugFd†Óš"v$ÝÂ7É7´Æ‘P¡£©SII53™×‰$›ê„[¸ü£5ç׿nÏ´ ì:BSYSVM¾è2“RmM·H5qj„%^ÂÑe*ÄÂÌ2kŸ}èV1©yUááIsBÒ-ÔñÀŽuþ‹¾‹ èN@j’%ÁºüFbÆÊûû<8I ŸÜa_@1·0J˜ j»¸ºò=ŽZØY¶på Ò4ºÆòRäÁòÂs¾.Ø2 £þœä“4óÎk*Á᪦ŠS×–`6ðš;1­ì•Nœ¶a§æ‘¬6»Òp£ýÅN9ˆ <Ìérœ™rÇÓÒþQ·ÐW4ßÝhôIzÃñåìIVüHÑß6ßÇy¬¢´X¦¦{´t¢`!ñõÊò~Ï7‹¢Ž—·âàÜy¸Êµm=Ø`P(â¤òß4Ou²jÆÚ³Cí›CEô· è½<"³à'çøT&÷ïQ‰™÷« Û4BÍ¥Ãý‹ñ7§@ðºÞ ê?qâ°ìÁXçŠ6ÎH{´Ã *;§Š—†7`Ù•Œ•`J‹©x²b-üâb””–Äe˜Åñ]KQZ@†kç=EÆ L&w@aKŸÂå¾WeÚeásÍõ¨hiÚ5yã, £ò}òJ¦yêA-qÔ0úƒ‹äDY£y~VSÊ­™ˆŠåÃ2 3¨øóñæŽUËòÆ3ö)—I¤êQ ˜¢ÞxšeSéOéiöQ-ë>t¥PÜ©ÂÓÎ¥7¾PfƇf &¥¹¥{wÂNOÇ®¿¾ç ·§ ñ`œ‚.·m⩪9›îõ|k ×õÓ£X;UšˆJ°‹,¾PÀ³r#ËÄ©îÍ »›¯}¸Cù샼*B™ ?Hx¨'Ä%~ý‘ù’øådøÉâ´Å‚uùýVË{Kï¡Bx_G'AUÎN&íš}<•Žâ"ü{q\æô1©ÌÜ× *¶”#ó§û.Ræ÷—²9M‚°W;è3&ˆk#îvhæ5'+’0Iäû¼, SÐÚ£—ñsœÙ¯ËÃ<ÎSxÄ¡„‡ªÚñI૪\¤в8§bïFÌk8™i…6¦=pèHؤÄé­$ó’SO¶ðõ¼Ë8Û@)Ó·}aw3à5_¿CùÔס](€Òœ…_g¨'Ä%d˜r‚¸a­žMßC¯PÓê1ð!{‡©ïR†‡}ÆÏJÇÏ?ÍðÃõ2_™ïm=x¨'tï‘ùj²?‘Bä¤E~ð}9i±Ç·ŒEèM–±‹4§P„É¡×s®ÛtŸ¾Äan!hW_©ÀѧúæÛ$àKv<Ý[·ï©Y1Å(öP§ÐqÛÓªÃÕ¥¥…©¡~¯=é]òFƒZè˜Jù¦‡0èn»öÍ}‰ð ÿqÐzÍi?ú‡‡zBVÄI˜.©òƒ:|퟊?¾óàîwù¨ùÁq¸½*ª®÷ÿ(ú+`þŽpŸ´ð&U ÕµÞ#+ÙZFI˜É÷ö¬× ˜UÓÓùÁ´dl endstream endobj 286 0 obj << /Length 3484 /Filter /FlateDecode >> stream xÚ•YoãÆù}…›'*]1œ‹CH‹d› ›b[ qPMhil±+‘ZqÜþù~ÇÌ”)¯ æÜóÝ×HÜdð'n¬¼±…J eov§7™ýøFøÖlg+¾½}óÕ÷F܈,-³RÜÜÞϸÝßü3yw¨Îƒë6[¥T"·Ùjm’¿vûº©†ºm`\ˆ"Kôæ_·?¼ùî6^e¤IVŸ'¬z€!l*…Ñ(™§ö(¹Ùš\y06"!HÞ§S¥s‰û²›­,S ƒ¼-¸Q&ïlk’CµQ"ùÿ9i›ã·O®«wòŒ?¤ã^î×}Ø 7[@‹ç€ '”i[ß6=wî[¿{Ó³[Hâ9bŒ×p¨P"¤Hº÷>r§©N®çæ#!‚ü¡UaªPÞd–T~Måw1vN‰2lr¸¼®îŽþ ¤Áñ€ä=ï˜ÍuóÀý±w~E¸ä€?g&#šFÒ®ð¯ê(f¢c9c]¦Y‘Ã.Zݵ)ß°"ñƤZ—aidˆ'{Þña‰üŸ™Q¹&¹ãy¢ú´ù{Oþ¬€œ)æÔ‡^͸îܹ胕_Ew+2e–X’É¢*e>K˜B¦º4Û`,î×øÑÉíß~únLV¥%؃9™àº‰LÐa䕉dBá7YòMÓÂTÇsAð•ʽàóx݇Cˆ–ÐzB$P#±scb˜<ÕR-¤ÞÎ.~bvîxì)†S…³:^P7g2œ0 ¾å&›]h°½ã•3~ñi@é9¿p›¿êT÷½'…öZr]Ÿ^ó9I¨÷’½Å»`ÀßOPŸzoöïÀuÞgäY¤æäWÂбêûÉQüa™ÙŠ}GP·¹)“mDG](J–GEaƒˆgå|%R[Ȱôä†CKö`€é `D<±q¢£ÁvÀÛlç°…˜Ò–v2Ã~¨ºð#;7íAòŒQ Á~îpW±?ÜyZ° ]\?x’‘ç"×Z±Å"WÍCÞuu'²ÊE%(;EtÙ:Ù·ü‘çͧê£wÄ€¥«ÑmƒÝl»þÖ¾A†a™`ò"¹=¸‰ piOnÍ.é«rIÆá®—BŒ\°Àø¾ö„EÙO³˜Õ=ê,/ôZ­Æ µkGoWø,&·QKB £a!ëtØPô"’à-ç—¯ÏÝ™tPË:t—mæ á÷.(3‡ ¸êTE{ ‚/âÎ=Sª=ý½ „€ö…‘1ñêämÅëÔY±:ÿ1>l”Lž"ûûúTÁµó"W7«1ܾ†¸G­¾ïÚ“—FoKI Ænçúר8k„´¹7ÀÝäl³±l±´l‹y²ò›ü¥ØìÛû=·,B —£ç˜ÆÞNþ·º£/†¸%OQ°«~ÍÀèL¤EY¼ÎÂd©²*,¥è‚Ô[+0¦öB¿?!Ú8>$iÐ"‹6Ôì§~¤ o0¡Ðù™×š¾B©ÉOîë2/#baãÓ¸A¥#g2é-ÆŠ%‹³ÎÊÉâ6™Ð Jóq/»zixÊh…½ye*¡h UûšeüšûWyš ÎÐÊ•Åܸ•sëRĪHþÔ"ÊìS½’!ÎBûСÄhï~å&†M~°p£Ÿ¦þ²Žƒ˜bׂ™Á°¶Çèžöà/cÈ#˜ªñwˆ<ª›‹6Cä&PÀY<¨Ã6d·£€ú|5Õ0vˆ±Veò=eNqx# š-Q&?T»]ÕíÃã Íj7Ì®êÜ=¦U+fŸ˜ÀVMU (TóföqMªE‘â•ê&fªæÍ!ñgEî h ŽðÅ¿Í/®ÄÞ¢ˆGSê³Àh]q/ñ¼IO™×ReA9¯T>ébPHcÜ íÉS@gòÐ Q}6i±ï°K4^£±±w”¤†ñ a^‚ ´F‡;v)2®öqE{>ú8Ó{.ò÷ ÒI^Í»«çbÌÄBø_ç»ôsß·©4Öá¶Ü¦ÖFÙùˇ?þ¸v¸+­¢Õ€ÐDžдf¨OÁfX7YÔ@zÌœkD¶êð¶(ÏB\”.~ôwj#éNm(½Åî¹kÏ©´Ýàc1>pŒd© §³8xWíÎ4ˆ,@ÑmYb´zª¿š­·“„á¨û %Å™8çjѵtQ/ ­ºÁ7)ÑÆoã|£ão\KP8ØÑPdYæh’t26»©’µT_QBî<1­îÛÈÜ ›P¤ÆD÷‚!çªSc}øæÇõ£@ºEô¯çÊG‰äàÁù¨¡fÛ³†* Çb î_ÀãÔêe 1Ñ5DµJs›¿QõÚØ¥œ*ëØb†ÁØBDàeª2õ–‡Yh Ø80.vùï&a(ª´kÿYÆË‚nÁØ¡~`+‰ëÖ‰gÁkäÅR>_0y$ zE-XY””`ˆûñH-JôÊ}Ö‚4Fñж¬ˆkl*ÁØD6E ‹ªcßò-{çÍ-Orv'ƒÓoËëi7µ”§"Q?X()ÃF­õ3’‰cÎpRßrœ–)¦l6•\2ÌÁš) ó12ÙQœ¬:N$±í>Å€}X‘–f¡Ñ»¶ëÜnx×3‹rýƒóÙû\׆’úä¼bÙ½iC¦™Õalð›CðpÇ1`ÀÙÁSª9<*ÏÁw©YŤºBÏmXº’Þ)ЭX_ÓbŠs MR¤Eˆj 5Õ× ³¬rÓBUqïÞ=r£…ˆ¾ãòVÀ §ÉûL‡vô2-s™Ž4“Ïc†%‚øŒ¢çƒÇ†8z-ÍÉS=IتÁ-S­mXñ NJpA™}^cõ†×—B‰$ËHÿWÀÉEjóxÙÇup²,ú×=(sÓ Ϧwìøâ ´(ØÏ@ºzÐþjXµ3ÂØTØxróåêí2Kµ™yŸ¬¿Üà=ˆr;sƒ;{Ð$7Ã|¤:çàWM¦&ð´fësN¹Ba§~%Wáýœ"‡‹ÊIÊ©ò bQB®õ‹|@G&Öø ;i‡, Ï¥ŠUP`j¡+kdÐs3ñƒðßs€.¿üÈýßòG¬æE:Í'W†/TÛÐÃP^ˆŽ© ÓòÀ‡"©<ÀG°ƒ—ó¬j†²¯1óÔyr!ëHälbóT~¤ÖÞ‰ÃD×÷û2Öh ò¹eÉg t¼@CËñ3?»âÏ‘ìûU É àë(=@á>vîx-¹mVVÉûû%(+AõÒäiEPhäj#a©Ô 3þ!n NP. ž‘˹œUp` çÐï™t¥›Y ùÜèº{ðqá\“7…ýÚщ‘ö®]Y¹–8Â`ô]XÀ>¼»ðÍE2'\ýX÷{ªRâq£ã—ŠLògäìØs˜ë7p]GŸ­IrðöC;÷܎̲ë:§„/êŠÎi¶„X÷âUséIÁÅ*õð‚ǘh°6®A²4Ÿ^@®¸rŠŒ'ÕERgeò ÏïZgz¿€ˆäŸNç¨ ³œb¬}ù®žØk÷Xf¤ záÃþ">VÅŒØ?sÛ)€2Þ®êŽOQx ÕMËËê*ÇH:+bŒ¤3ª˜ÅH8¬•MüÀ"У  c=ž[^nÉáaÃ!>¤;JEiNNÚ†'xáÁ‰ÎíÇ_OÑ:Áµª`°‚óKE™ÛVmõ< ¼ôÿyþ"ßMj¥e“‚¤|BC„øXctŒCž4OÜëOîòÿ<†ƒnèylÂÞNª£ÃS®À²Òj¥ÒL|>.“Øœù$#2Ïe¸¤sG&F ø=“†®Þà«;£ \ÖçW\À‹¥.,ßùUïÉÄ„9wê¹ÉrŒ­#?8qÍ÷È6œ© “R »®öý4‰ži±C¤^# ؉B”¯Io4‘›—.®ã %t€­9ø˜ ”¹2lã3*¯»f D·MÁÝî´GìÜ•:€Í濹X«âƒZN%t|îî¯h/à“ö®•)48-#.Díñ%—õû«ZùºWiçÅ"Qÿc¿ÿ4)d@ endstream endobj 290 0 obj << /Length 3516 /Filter /FlateDecode >> stream xÚ­ZÝ£Èß¿b4OXZúX)Šîno•‰”‹rÙä”äòÀÚxÌ ðîÎýõ©êªnÀÆ3>)šº›vuu}þªq—ÀŸ¸Kå]š©8SéÝæð&áÕ§7‚Gkذžìøöã›ß}0âN$qžäâîãnJâãöîßÑwûâ8”Ýj­”Šä»ÕZký¥ÛVM1TmëBdIdVÿùø§7ß Gib£Õ+üø]LBÇJ[é™’6NŒ&¦dlWkceô¯rµQש޶UßW‡ª.ºj¨ÊMT5üìÛ?¿ÿ²y~åän-òXÈŒˆXe*:5w=Ú.§ÛµScáWn÷¡Š+tµŽ³4l<õÈ‘Vy´{¸Íb‘fxÛ´/OýÆ‚IWƒdѶܧz Uàq"’°Ì´] ™Ç¹•I ™ÆZOó‡+'Ëîï7½%‚E³¥s‡}µpË»µ²"Îàªk¡bôÜ7èF[íWIÔ%M-Q£Ú&çWëLÚèãž75˜&âç\Žw' v]Â,MÙpëf¡òXeAÂ_ð'f8b ’¨mêgZÚàû}[møÍ''ï$]2q5%¾VR‚½@è ºÅcÑ,²#be;2NÖÉ[2{'|e-hŸž צåñžåŠc’+Ž.å ^=ìèí3òÑžhBoV2˜äÀDÀ¢—¬¤žÚð ·jbIx™ÙÙÎ@”M#Ti®^²9eyœåÙÜœŠîñt($0,1f’8I…?…b(²ý:º/¶Ûû%^s ÁH†;-Zð’g·Å…<ÍýF”¦ÖYPŽÙ`t©¨4Ë£ŸªaOïÙß`nzzKR’ ØLzætÞ¹Ìe¸ÄÅ¢sl£®<ÖŦÜÒò:7У?uÍ+dë- þ3ž_ÒúxÒ畱ଧÃEîüGz¦Çã‡&$Þ¼,õd~½[Í %™&J*2-­eTñ³ ÇS}ztÛŒ9†Å¾=”4:£í‘´&¢mK/œïá ®ž|\Ò©ŠOý†ÞÚŽß»ªÙTÇ¢ö‡Ô'Ê®øÒ³–BÆO™FŽ®÷Ȥª¶«ÅÔ5¿mÚfÍ·ss7z\,‚ɾ˜JW8®. X‚Ï£0 ›Æ7¥–rl;³glA]Ù·Ý@Qʯ¹4„g©ôîçÄ$-Ã5'ö¶{¢ÙäJ@N³;ã*3ÿØCDL8ïïýÉËGQvÁgO4ÐQéaðD=[×òB®b)Ô-Øu>’Û1„h[±JÀ Jù¤˜,| ȲUd«„Ó®” ûb Ñ3npúH͘;S”¥Ð¼+’ªº¶9Ðx@gÅWD3´]ï(³Øæt ˜(1æ[ûS·ƒ˜ÊÈÔÉ žh¹(@¿þ²¯6+%£=M j,_«+š§uëÔëMh<¼ß@˜é—伬NàïwuQ“M˜29ç\?sx®UbœÆ·Áˆ¦NÌH 2TØMKdÀ0x ¬ `®Ð]0œ†°é™)u¼ýSÑ;à϶Lî±»àëPõ§f½äX ,m\(aTÊ)W VAê_@õñlNM,„} 6+,pìl§5Ó|` ºj3xRÀœϭ³â _J‘ÆR':G–3Ç\kp"q¦^Â/*Nu¸É•´!E,oòõ1Öµò2€AI¼74›Hfߟ6uµ-‹ÆÅ«œ |qpæ1`] \§Ø…^^;X㟅ÒûI¼÷´È6L–³I§s¬¾)0ÌA.ÖlÅ0ìÐÑeÑ»kMFÏ™êaÞ‹ 8ó+X)è1òGó‰ÃÓ¼¬)aî«#3Õ.=æy¤yÎ'Fi–Ê,-Ò蟘¼0.â‡ÏpP5ý‘"ÿf Š 8B6ëª Kó~(üóS° L=áKÕ°ì!GÈÊ/ûþX·Ãb4ó»çxpÑ=„ˆÓÌ^óŽy¹›žÃa£oKÖ¿Ô)éSÍâœ#¯;{v‹Á‚qLÜZZí’,®Wü3 Ð‘ ñ –žc‚UsF è–[~JL(V¼úåð¡ó™ù—Íç]µ¨•Ý„œBL‹‹±!µ ¢÷èï,üBµ™éì†è«F…s´]†ÂÚ8w¹Q¤Â‹Œ€ÅOVöeWz°€­3æ@Ìà‰Ã P”Â=Xð&á2úŽŸ³\¡ïkÙÿá†FÕmw`xÕÁˆ*aB…3 8HÉÝL@elláuÀ 2ffZ¹"éòëÐh£8™G79^yp8 ¬Æ£ò…_LºU1‡ß pJ¨xX'ë—¬ t%åMWQù… 8Öá´Æ}×òÈ'ÚMÎÔ–LT›ðMáêœ<Ó ããb¶¶"cÌ«m |Áq‰…µ¡˜û 3K~­ŒŽ¥Éf~}ì Eÿ~í*Ú+¤æ~Íu‘b¡Á€$~X rÖÞ§ÛR/ml+Û ){Ò±Ážƒ!€G_ªû–‹âˆRnù:¾>ë…] :på¿Ê vÞ;•e“@ËÅðIOc8ýÀ›ÇP{Ù Púï:ïµX!°±®©ʰ p„"Hä•ÞN†’2·Kº±=þºqf#Fï¶7P"X—åSGçæ£‰“yÿÅ)ÞF¿¬\IÚÁh×Ú;L”¯Þ`Ô·ë€>la¯~¥¹ C%Ü'ÃUÆÅ°Ÿp±ÛXÔþGä9x ²ŠÍtK°„pÉ3Á»vh¾þ@º[‚Š”9°‹@–£t@çÊ£sEöƒ7îKöâ«¶c0yˆßn;‹9:—.„P–öI:G%¸ž”Í_|™_Žp䮟«âÜ„Löã{ÌÔß,…yb ÍKešaU,¦l©Œ•Èç™ÛÕ)|IH8ÃNͼI{É Ÿà»ß\‰x2»`ÉúÒÇÛ 2˜r}7˜íºö@£C‹pÇ„³b®Ý ¡{GøV¡ZÁùÓ ]ñHł̯]i·p%¥lœ$ú†KA€—Lôy‹L'Ù X×´•˜ÜöÜÒ:”6§’ÞQËÇ-¼›»=¸66žaR~uÅ?I]í†Ë®ÔY¸Ô&ÛVB 5µ¿.ª*‰Çú–?1G•ç/9cÄ2#PNp(ùägÀ¨/E‡qÿ’O¸¡ c-"on5~ ÜÛŒ_W¨QDÀ†ôû²¯Zß–›ªpŽb¶±A1¥§0Á{Ûr(ªºçM¼0Ð=­s·nŽs…CjN ”4g=ñâ2$©3"äõRØöB«èÙªL. íX ©ÿpã*Pöwã]W8ruÁ@b-_nï}92î'&À¦b®ñù~‰O(™³ƒWCsÿt‰žÒ,}™@Uˆ÷RÍúšlZ4÷˽§VžG]êSPHB¾v¾ Å"Ô„¡½µšÆ™·–]ç¾XìCõ}ñè øÆ£ãÙ öT2;˜—)$;&®³4šªØŽÝñ+˜H Ï§—Õ»L¤äRzèD(>ŽŸ_ Mc3þß”£µGáÁUžà ïÁ«Y²†Ñú•‡–ñëñ¬z‚²è?V98V§!Kz †ÓOX^<_ïÝÅ7ôî\u&"Ê ¯;¬Ýê·KZ‚4iÇ>çkéÈu†Þ\k N$Jr[ag™ÊR`$ü•«2Cƒ&=¢µ~¨6L*KÉ2, Røì‚¬©ÝÓöO¤¸(©3ÐNrfáÔQšëVx ÚûÆV§k5¾Q78²²`)d­SÅùý³ Ç6€W‡ÞÁ5ü‡G()ü¡UóDÇ#1Ì[‡hGêïÏ.W×µk¼hãÿ¹Ä䨬µq ÐM ¶ÂoŽëLäÔ ‚ô '~ÂÁåQ¢XQd¾—D[÷o%ø%Õí?b7ºæŸUÌUAø‘·¥Öžÿ·ÎÿprÞa endstream endobj 176 0 obj << /Type /ObjStm /N 100 /First 867 /Length 2237 /Filter /FlateDecode >> stream xÚÅY[sã¶~ׯÀäeÓ‡‰;Ðɤ³[›iÓï6i»³3¡)ÈbB‘’ò¥ùíùI_e¯DÙMl€àÁÁw.8J8ÃR&\`F2áSæ-…Q3©°äoõÇš%Gìëïê Ö-#;9zÚØnÊ®eYY›geœÿåOìÛog;‰¶¸æyÆYQ¶ì¢è–ì§ŸæY—ñE“­"‹—ë˜wqþ꫼úª-ºÈcuþ[m[Tg¯^ Ç>›Ë®²¦Èª¼ß^fEçìô æE•uE]±ì2¶Ãá{‘òí#þšUì[fç‘5Y5¯W,.€Ú²¢by]µ]3p»Ã àe6¯«¢Uþ|6[ÈÞaoÇÖ5´sZFÖÕûu†ë¢Øß²Á´s[3%èÙ9é\àAÕœÍ7«Uq­ò/<ê¸äƒ0yÑÔÕ*V]Vb¥©/ÚmïÝI¹­-v‘Uɺi#û.–«Øt¤âv³"@ÿm7ß“v댗Y×CËÊ"kaÌû²/éÚÕ¬‘nßjgꦭSß—u×á‚l3øÂûm›ÞñÄulV›®·~ï çñ,«FËî${<0 pýfcëkhíÕê´.ø;k²õ²ÈÛ»aë`O!ÊÎëbÎòrÓuà8ßÚüàô=ÈŸˆ!‹²Xä4ÅC”ó"ÃæÕ½X±ù'ý¯F|Á®iÿ}¤«{g|™p‹û?á H³òª¨Uì–õ|ô²'Þ=µˆ2²?¾ûþÃû7ß߯¤‡ëܯ+F~×el^³ªî€}Qn"…õ!L^§³›»µÿ†Gýóx>$D–|Sfݽ@ô¸Í’WëÈ’÷ÙYœ%¸2]¤°*‘ÌSv2KNb[oš<¶} Õ/ý#´oëKö)Å‚ †Kf^ îÃç8õ./Fo*HÔ²O}yˆFÕá0êq4ãhÇÑ£Ç0Œ6GÑŸgïV€þœYò÷ÐÒÏ„?ïØ'mU”á e“ÁhPâZexê$¨>lN»žËß‹êðb£šÿuònø÷õ²ëÖN’‹‹ ~VmxÝœ%¸²eÝÖëåU²hb|Ý^ðe·*{µï:+4WT”jÉ=4o¥àA ¬,òXµ±MÎÖåAȤú!ÉQo£÷¥¡QýãTT'¯×Mý3÷Ø&BQ6àLw= ŽC±¼°é¤â´I}? +8z#tûÃÍ—×ë«2.º›É!ØÐ~q‹nñ:+®Ñ…>ÛTó…ÀPh+¹¦fKÐ^qtŠSPä¨Hys×—¦bIq¾ðìÞ¡š7m0z7Fóz£ã}$É8o“¾®˜ª%´fÜ êa l…ž~…® =¬á6¤¥þ|þ8È©Þî|ÿQk C Èû/ª~ží’¶É“¾H-N“ŠxÑÞƒw¥Ø!M$ÿþÏYßHÂq«6eùùÈRrD·“΂N¡—ÞE§ƒ…G©ÝtPµä»è$]¿û\áŒqŸìjíMqŒ6}ÈÉ1hý8Eþéõ,Ä8G~CŠ£ä}Sç"üµÁÑ1K>ÆËîaÎ}X48»U48ý¼¢ÁŽÅ‹;v,ìX¸±8pbåä""&³„HÂAóš²FL—/xH(WB@î£*Aê¾lÁó¤ ˜ózSnø¢H~ýUýK›%õ:v›6A\Ï‹u·éꆯ狩±B[ž*¤ik¹£ƒÎs…äãtôK†Š£ØæM±îû¸ämàç±i‹îêä n/Ò’$}¢!å©'M;ž‰z"ø«¢§¿œ¡ÏNŠ’¥ù£“%%¨F*ËMJªr\Ñ3,.SñûfpÅ(ÊHªW”NSîRú¤­&*ê{U²Êòº½Lº-úä$nR®éC<2Ó¾èòáÓÿürŠ¢,àÌ^Iïµô«Ä.:#`v“QõDmÔ.:e,n™ÝI‡ØÍ Æ]te‘–{ä¼Û„ötһɋ‡æ<¯¶ržÏËynlݘëܘëܘë|:9·¡yæÔp;jYè Ïûö¸:Výñ°â™\ɬ­Ðÿ*H­Q}éi ú‹¤]hýwÿcΚ'¯€ ùL¸ßŽòˆ½ÔŒp4ýŒ4N > stream xÚ­ZKܸ¾ûW>i·V"%Q\ ¼ÞÙÉ»¾e@ÓÒôhÝ-µõ°=9ä·§^¤ÃñA0À4Y$‹d±ê«*RéËþÒ—F½4¥ŽKm^//¡~x‘Jé«?¼ñÝ»<}™&±MlúòýÝšÅûúå?¢·÷Õuj†›ƒÖ:Rßß²,~ê¶«¦¶ï€ž¦e7ÿ|ÿ×~ï§ÊUç™~f=®×7,Jq’g¼¨é¾Á…dѧ›<ªá&Úª;1^C‹I£Ûyâ.SÏ¿¿%iÖÕBsãKuvªºmºe¢i|Åô~àßKÕv2dhºzä²§96u5UñÍÁ½_³žú©:û•°Ò–¤ö ¥8¤:Na«´©þnjq›Á‰]šªk»Ó¹GÜVZFmšªó™û^‡þzsP%¬YLíïqà–Øy‘‘¸„\Ç^JCóh(ì­Èlôó²Âj³ÞÀ--£™H]²LGcžYIPÍ—ëÄ)2¬¤Ë6Òˆ´¯Õ01™–ÿœIâyôî¦ÔþÀ€ÿ„š ZÀ'¥£™Èuzûï¦Iÿ:´Ý±½òLetì/"ÕU£Õà†ª«Îc+µK?¢'®ñªK§å²^ÒÍ Dèžš®ª©©¹z‹S<È Ü“$ÃZÀ|Áÿ"ãa;!,c mªºaÓ¼~°T•D#ïª9¶ ª”VšU Û`Ù\"ÀBSBB3Â_<9ÉWLÁ%àXÍ#Jɸmh`ž)ëöèzYϧÚŽt¡-Îç©]º‰šöì[[”žÐŒØr›Ök¸(2¢œmiki0…w2ްâYv3´¤-­b¼@ÃЖG!È ã$¼¾0W»R}¤ó.øÿ>tjl¬ºÈè|ñ— +{ÐE¾³ºïqiß½+’u]Â:ó­øÁcîº ¹Sy'N½þÜž ØpŽ$œ¼ØOy° èïçîÈÑ(³VÖ…‰A\Âz¨«àü&NËÔuzâcccëq<Ù(C¼á:¡yA'“žSuE°hBìò4¶yézžZ‹‚  ;/$TFü=ȵÖeuœ¥z“C,Þ#âѽv~#MÉ8 €E¨Òó®¬Cw™Ì`2€q[ÏŽoÞ…±Ç-ã͇\ÐÑÎã$ ªó!Çù ñDD©àc±–¤'fIOêâ]ì ž¨ðKUi8–Ý ždÚgƒZù R—àQ•±Ê¼z4_@bÇiÜ­®YôÏìE%‰5þ‡¸d•YhÀ1”ÿaÃ’Nh°nÔͯ¢JËX/“Ô ð߬gèKùJ&sé:®âÒÏ>…&:½<ß ØÔ:s+@ºf‡0 Ú†®3iß Ô”ÍÛVºˆ£´Oˆ£\²«×œšp^t²‚»žï@’€ïF*ŽÜ]¶†ƒyóÜ}KˆùÈ ‚åYm!örµ±-TÁ§œÄ*÷vñãÛ7Áà.ï;áéâ”Æá×W!*Èʰ¬Ï‹Z¾’Ô÷¹ø~·åeEY¬¤yœYµO´›QÂóÇN©Ÿ1¶êçsÍU¾Ã`¾ú Á%ùé ›¦Å©ÿß–ô÷U"&O&ÒÖ%ÒÁS|NìÂòo?þšXg±ZÂm†Û„àØoN ì› Ä·0qS Ò±º^a¯Ý tGoÇ–ÁŠNw¸®ûØ\Q?äöBDÿ»ÉX™´Š°pDÍÉ8ú8¬²¦A7:+ƒg…5:«]DéFü•ûNT&ȬSæsq`¼c0cÒ¤1…wðÿ ƱQ>ÜUÌ"‘nļÑ/ØE.:³qRÚµ:é*å×åÑ1«çˆŸøî³$ˆG*"Jêgâ:ûh +Gg']¼q¢`@K‹c+&æ³” ,Œ®Œ& Õˆ­!|-Œ‡^ýõÜ}îÁõÞ¨FÝ HF—|‹ñ­4éˆ[“ókµdìK̵ÍÛ}¨%cÞ‚@Ô¯8\Hãþgq©”]œ* ÕUô¶"oG?ñÏ}u£Qƒ4_£cbóCáT7GöΜ àï&YDB¿~»£:þfâο{gõzbÐB Xy|«j@ÆÐn PÖ'ö ʾLã$‡-§öiöÄüºõ+Єž*_‚ÏêÛ¹*¬[ù÷ÑÍq2dwFìnms[C‰-29¢ˆ±à¼ó¼5g™Œo}°´v¨ÒÖó ±½@ºâ;õ˜£²ÂŒ¬/þäÐW'§erC“¿fJuLœO÷^-œn9qQm-.ˆA=P‰ë=~XtøKS¯€ýŽÓøôMÝÛͽ$BkU¢$éë·>:¶Ö>s_ó ×>&.MùÌ형)Ëç®}Ôz®¯^û@~¥Vy‡ì÷^ò°P–kÀºQoñꥃÑçS7…‰‹Ä;Щ!䯩|° jµàöc´Ò Ø³ëÆ åLeˆ†.ÏÒX-3}Ûâòõå×Êb`^¹¨âЬ›Šl8FÞ•1p"ø¤ŒÉòzÈA'_ü ƒm»\ÚA|ø0Q5AWŠ]h,9¾\™Gš.ÏÄXÑŒ/ýêðÄÈ¥ûÊ ±Jñ´ßVôÊóá4@/ü|ˆÐƒæª cª<2ȹЫobhoåIœVƒ‹ÛXtwß.‘R× ùIjÿ®$¯”ò踺N"CÇ'RÉìÎîѬÈRT -¡ÝŸ"Vä±(¯¢Ö}£ÀìOÕÀ©¾uJO‚Ì¡]zè³Å"iz™uo—Ð g›»ðo¶X©Ö8û)Ä_þè@?HœBÜFn-£anŸò|ÂsydE~rÁÈ|MsÌ«ÕÙ`iЧõnËëágíwug¥¬w§YÑ¥Œ6¥ß*Ù-|ôß°z¶üâKº‘¾-ÑÆð#I¹ò‹\çw@, -¸'äpÀëÜÃØÖAÔÑ ”•Çÿ°xÞ°ÈþÀµ‚[3 6Õ>ÈÏ`ËÚ§\²ï•;-)º‹´0^¤Áìòšl:kYTs‘jÍ$yô§d:qÉ´SGXÁfAÅ JK+v?<¿ ;þ* 2–AþÂ~™ºØzö¯NŸAÂm¿*M‚Ø‘dѯø6æUGR Ѭ.v"/h©û¸$ußiu )Wا _‚·å"‹®ÿ ´ŠŸ5ùš’¯Úö¯)HØÈ)~ÃB¶‚–Âß<¤©¿Àö±™&–> stream xÚ­ZYoä¸~Ÿ_aÌ“:°Q¤®A‚Åî"‹l€E€“ ØÙ¹›íÖŽZòê°Ç/ùí©‹”ÔCÏ›ÀÍ£D²Šu|U´ºJàO]éUQê¸ÔÅÕþü&‘Ño”´n€àfEñÝí›?þ©+•ÄUR©«Ûãz‰ÛÃÕÏÑ÷§úa²ÃîFk¥ïv7ÆdÑ߇CÓÕSÓw0®T™DÅî—Û¿½ùË­ß*K³83ú+çqT¯8TšÇIføPOÍtjpoc¢Ö>îÒ2²íˆý,ê<~¬÷S?p{°÷õp°îÕBYËdÝú3·Ós <EôS?X§aÞOóÀßgÑÃî&-" ÜÁϼSÑD¢p«ºÏj<Öã.ƒ¡¦­ï€®µ(%àüFéX‹žït"à^¯¹7:ÎuŸ9î^òîe4Oî uñE•eþ‹z´é(÷6¦C€*Ĺ)à(Eœ%S~ ¬'::ƒd€öWö[xÕØ~:áZÏ~¢ÅVê…ˆ£öC¢´ÝO£¬ÖÓ‰tCHK™æÌÌôãØÜµn°cªsä ÛDt¦â"UŽAV€ûº ÉBiV8ÒãÜíå²h³‘…¡«26i*äөžªÄ{iH(ÈÈ|•Ž2º«GT œf)ÑFÉæ¨ÜQÜüpvó]`^ä`ò2zï­SyÅ ±ã–TUô„'ïçS%(éosCç…Nˆ;ùŒNªœÀi¡†.‡;µ¬æÎCûþ̾ ïl‡Î`bš¦'[Ëö¼lÅ*îö:¸6¦žó5SÌžäš]ß–g4“1;!‚†‰z€³Znwý$Ÿm}Pky¸éBV¥*›Åm|ѪÒ"Ö¹v¤1“€›V&Ö&O‘ä&MU\ªUœ'âºÓXið.yýˆ/²¨™ø÷űø]€;îyêTï´‚iæ‰k Û  p£8ƒ’ |O1&{¯¾ 1ŽR¯b•Šüç®Ô/»“4.€'aüÀ¾ÍŽ|µ,w¸ì“ž­Ô«ªL··ÓV5„™…X´ªa¥IQ€¹a£‰â;‘¨Œ&§dµ¬=žœ€fwd˜0Ú6ÓÔÊ&Mš—ÍÄ“~À2ûêW!?}ì8·ÓˆV kýµÇCáÙÅ7 ì›ÒBAÀ@†fþv_Ó"yT<²åeäA¼}¤²Í½íyrXlj³N\ä“ylº{¹¶tsm9†¹Ô‡DæÍ~ ÆÎ4.‹@¼ É T¦ÚX)ÅïÀ–©ÀãÃvgŸÈ±„vLbly[ˆ•FÿÞ•†¦S6ÐW ãÄÁ!$éãõãÌŽz}gØÇ“ö³|=ög+-YhßÓ‡2Ó€ƒ!í+ÄÁ ¨ ­gü¥’hr—„'VJÃç,„çî~{ˆ5£€4‡Ð vpãBõyAhÀÓ ìN èhÓè f!p°G‹ÛKˆÁùZ&Ébà÷}PœIg¥ËR˜9N³Õxû%ÇÝC.ãJ›×úc“{ûj(Ôâ¡ç©?OX7@Ð55¢aXŸ£îJÎè`ü£´¤"¯®Þ1¨3ÖØs|µz&ìc#/”HÍÏ`-4ƒ´³t‰›õü*”¢AãÐ> stream xÚ­ZYoä¸~Ÿ_aì“p3"E] ,‚Ébƒ™¼d1ñ&²y [ênbÔRG‡½þ÷©ƒÔeõÚ Ï&‹u}U%Ë»þÉ»TÝ¥Y$²(½;\>„nöëéz{ذŸíøÓÇ?ü9–w2y˜Ë»‡ãüˆ‡âî_ÁgsíËv·¢(PßïöZÇÁ_ÛÂÖ¦·M óRfaíþýð—?=ŒWÅ*±ŽÞ ÇïzE!µˆt¢i<ï"˜ÿïy¦o¸º’;ŸÊêR¶nµi¹í† wð”H}kº¾Ã·_¢9_»½Ì…TSð´SYPžàJÞ»àaŠ$TðÚ t»½ÊÓ ëM]˜¶àÑn†Ðl+Û[¿íˆÔa§( ¥®m}â1 ×2‘D?œK¿ùh†ªç­·n´pU SUE²s×Y×Çà-w{Gý^FB»ü€Oqw—¦¿”LO-¨º‡¹$ ZÌ‚—JƒfàÁÁÔî'8{6õ©ä…þìŽR€¯gƒ'>ÙfhyþT5@ö º²ï‘)Ìzµ`}¢Ež%ž÷Í•º!$­ENÝEUCè2b‡3‘çž¼ûÉ{a›:’Oéà+)ÅË36 0}ƒ¾,iœù[u [K0ØoEqkü\•†d×ðžsIÍWžbFU_¸9—Õ•W®æ„ú…“ žt6l\ Ép0•ÛC:ˆ¢ì­@ۈ¥YK2…éŒÎÒÑ8S4Î(øÇÙ½éÀ´Î Meþ‚O;°`ÓZóXm¸^»µsƒöø¼4æ®tÇÀ;/ÜbÚÊL?úë4êÓ.Žù:°ƒªÄÉ´°ãÕºáÖÖðö‹sn8átò`ÈhKÏ-éól Êß®mÙ·>ÛþÌ=Ž&™¡T°×™ŠöH<@íHl‚ÄîI Ã¥9ÃP#Tüm`=Ò|öFb)NïUšfè|+7­µå¥A[dwVð$9Ø@r€ 2è°×·Ð3¶öÛš¸ŸmøM4HTð~S¥"J¢¹ÆÃûØÁá;œ,ÙIåRdñÂ(=Ǽ6¡…Ã-„ƒ¶,ðŠ£ƒ•ç>Óç­ÅCÖ`}ÓºC½e<Ÿ›Ê¸àºØbXM®5ЛŠ,q†ò÷]ÝÆ%òdÄãPˆÓ.E+‘I¿‘˜tã¼(½ÉÉòCñIZ:·9âà¸üÏࡇì 3™±–KÆ£Ô’4ø|äµò…šš<8ôÈEN@úH‰0•K}'»W¹3!ìÔæÂpÉ6„íHÖv€ûZn«r2Ž+³ kªáUƒ8F´€­[<áÊI…! ['j‘)µÛ¯aÂÉ÷¬SôB,ûááË/?Á¢Ü¼3Vz2š-?­ãPÄÒûédôÓû韫†•}õmý¶Ãý'ê4É;•ÎüR Rõ<Ǽ÷ækŠÁæÊtnêàâ‹¶±…›:úm3êÔ+“‡)†ã­È ÌEŽŒ*ë§#øñ-KÉ„–ÉÚò@¯cˆÐmžJ1Å·ÞkäU¶TîѶ÷JÅ>ZT1ÛHiOgâ)6Ì+QX &J§ ˜¸À¦1îðûüÆ †èØÂ±ÁѬÎzBp˜ÿÚ:2M w%·J‡ÊM¬ªMõÒÙí"|¥’9«äèssà .b$£‚²½`d0ô£cJ™,VWÈn¹Ô›ªªc©+à\º‡‘÷a-øÍHL°„Po·ý‡ÿ‘qžÞ›Ê''%mÜs—…cÂ%=âúÜ4Z=È8ê9t‡]jQ;<ˆªbà|êßzŸäÀ R!Ø`µ…q¹ÝVïBzz¦³µ¹kzá"¦¦¶ˆB?©¤pœMðÆüì—9h–š@²hj»’zÜo•Ì£rS7½Ü"KÞ‘A ëÏ|¶`dt?gNÙy(¶ð/nÎRªc„›ÖVn>':¥5.áÃçDw*²L¼Óx²lßq/Hù‚Ô[ÿ¹‡ùzfœ¯ãöÃ~ac5zÏÙR ÀáYqwºÒ²×$ÅšÊ &8èÃÞÀ9QÛNR‚wNÓQã®@ô€DŠGÈA ÛÁÄfx²ˆ€öY8êe:‹$üVîCöq›ûÐqÚcìT‘><ó@dßÚC?f-*Ôo;\Ÿ{wöT»´cÌÈ{{qi¤ï¶¤’ ¦0”nCkê@»s‘dw…3âqÛ©å˜j^xôUzš+gÌÐe¸![ËãÌ· ¸?måíc®@ü‰JT±©Tw…Ÿã¿\píýyÐT+€Ÿ%ÈÑ(i‚ðêjƒ§Ö\ÏöÐm–öãfe˜"ɱ„†ƒåM¯u5S™ _p#¡Í²èUGç³}$ø2Šïê‚­#aISnνYŸ&Ná2ÉŽè—GÖ›`·Ô¾ðÂDÿÓÞ™²ŽDªW¦<´Kƒ ¥Q·%ö== îûÔçž÷^Œó$8˱8°WFè:ûX¹IªD@‹_‚Ò1¼ÆPÞkUönîª0ã¯<öóˆ+ïØ#•j.nWárï5Ft%UÓ1F1ÅáµD]˜Å’žÙ ÄWÍÅY{C9ŸªŸób4@é÷¬\I¸ðÃÄË1Vº‰;J$S5÷ ¯Bí ¬Ðs,uÁE‚ eN˜Ñn#3 {¯Í&Ùÿ;ìxι^‡¿n¸¥Øƒ:%™XȲĖ¿Þà„ûØý™v‘ÆÄ³2F‘Ú¤›jÉç«ÜU­òd pÒØ75o˜áN“{§ÞÍ¢¡Ìrçÿ×_e|ïÈA¤Î™UÌ,ÄN~©sÚâ£ÄØDDëJ"—ñ=²8 £@dŠRÂíO¬Á°Âþ7a{#ö^}‹)&¡SN}Îe­ñ.ðxŽ—®ð<Ñ3<‡Á ϧ?ø Ï“xœ«s[¡ˆ6%jp݆õY•Ť˜$»´Ö}” Eֆѷ[«ŠÖ6Ê“,Å#uþ'èåŠÓCƱ[‡ùoÓÐõib¬çãVX‘ƒG}Çqo/›yq¸¬VÜrw¹Rëÿ¼b,,¿§³ÓÀì4"'tÊqË1èp‰®ñêêSÓ•`»Y4ú[Dó±p1»ƒ'<'ý»ßâ$„×*Œ¦@½°pÔv.ŽE<±úùlýw\¾¯t7×M½ÇŒÞ†½bRHN:eüÝP ôë©¥dÊ[µ·ç"Š…¯ã(‘ÊåT΃Áï,4'ºž+Ø=›b,qÀ¸4žl‘cM ü8×”r÷5;Ãu¬u4]ã.U 3…N>™ÓÒ‚3²%„¬_[Û´¶¿¥Ä:^Uõ–7a}-Æv׊c˜±@âþÚ‚zNfAÖ¸oqîï¤þ [ª endstream endobj 304 0 obj << /Length 1831 /Filter /FlateDecode >> stream xÚ­Xmã4þ¾¿¢âS*]Mü–Ä ‰¤C‚“Ðòq|ð5înØ4IÊn÷×3ãqÒ¤›ÞéT©±ÇŽ=žyæ™qø*†_¥b•f’e2]m÷7q>ÜðÐÚÀ„ÍdÆ÷·7_ÿ¤ùŠÇ,s¾ºÝM—¸-VFïîMÓÛv½‘RFâ›õF)}h‹²6}éjsžÅQ¾þëöç›oÇ­´ÐL+ùŠ>ìJ%ñT© šJƒn ‹µ"Å>Æ<ÅMÏÀK´†åý¬ß;&‰é$!˜Ré0ÉÁqz×6KËihJ>ÌÜê-[%yÔß›[YtèlG²Ê|ZoDÙ*\]­yt¤N¹Þ´ ˜onMMk„÷HjŠÂa®£qCÝ»Ö4÷Ô|,û{wèQm° d2ÍV.‡#ÐÁÖ°â¿øgÛǶìËúÞä (ÐRs¢ðô.L]ÐPiäÊz ¾›¼úXvÖÏŽéH ?â6î@Âѳv}hXG=XÃQ³³–FMU½P†­7iÌ£?Ö™ÄeñŒq8nº!(ª¥¶­5½¥Cì¾éñ#‰›Ê…ɇͲžæLe£ïñ1à±7ý±±o¿ª¿)_„bœ0Àì°¾Å2/n †¬ƒŽ¥ ö @8͵Aã“72ô†÷ºÈ&âtîvÄÅ"êËT~ ê•fãƒÑ”yLn b¥€æ ã2ÿA³LÈ©z œ¶ƒØjiQP IG÷<Þ—[´ ĆlQDb«ñæ<ÙÍ É Gûäqp¹~È…ç½]\ ý)Äd©¶´g¯º¦/÷å³%gñX1•«¹³hu@SåüòÛWAävøT§9A[l9Ú—5í@Òa¢Ã ‘_™fÙƒÁ+Þƒÿ‹U'ü¿àG²8Ά¹^å…EÊÒD ³ÐˆxZŠ1ÝÒb2g‚çç,ÝQ¶º7'D „`{w€ˆÛC—GäÍE€€Iôx’ÎVvÛ¿¾}H °3q;4NÜ€fA­ƶoªŠ0"aY9ã¹­# [W‘Ë 2èã9»eo÷Í@ªêq”›nŽEŒ’3<a`”Ã6YÖ·­mƒ¬ª)Yzvzð,½°SM-_fe)Ó`~ܸ²>ÜA6&'­¹#ñ<äA@¦Í^p­RÈ¥ƒ3ûP³»’@G±.5°S>ód7ÑF…Ìx iô+Â2²Ožf©Q)}¨«cphm‡Wû9s¼Há8èa‰–ØAX~aüâºÅÀ‚ØÏ9M¬‹ Ù3 A-µB»øê摺G<Ÿ7)t¼!áùìèô{ìêQlèј¶§–7–h¡ÆÂæÅê@¤é´†|ªÊý뇸Dshnäãç–ór؆°¦b`Üä,¯ìí¼jWk‹Ã6x|[+ŒRºúÎv'ö€Rj`8WLªDxX€Ö üƒ/ópÁ„Xot"¢wb©ŽÞÓð¢Ë†ÚÃy*;j•Aâ¦÷ è¥Wì¿[²ƒ9ã"{­¦Ðò'q.NÔ³œ ¦ãU+ùBl#rÎOш¦E,Qö>˜%ÞïH8rvî!I™S&'ážP]ŒEÑ\ÍŒCl¸wÁßnÈÍÛ­Á"¶8ÔöRÙšÇãÍf yæ¹ý‰B6á¾§D¦3HŠg  .}.Õ¨  ,ÏKn8E(¹½ýA޸⸠£gºXŽ+ƒRgUí¨y–2ª¸–˸~ö…Q z>Ö&@?‡5볘Õôp÷³ñ´}e»d¸„3ž«+®O•Êe:♾êÓ¥€Žf”ÃÑKzj–æÉÜ?YüBDÂDÎ.ñ—VSp‘§ŠÔ‘~ÏTp{ß‘º"g>«*"*t@¨<¥÷_]»‡´„9YðI’‡Îä® =ÊÒРüë–#Ëâ0¹Â£Š¿îÐ8M®pèi¥PlÍÁ—qâÌ"xcw4ôXú*Zž¨|ÓÌnOPÐüs0a–éš°| Á9Ó óŒ,ZÜl^Θ'Û…X§kÝyŽSpÛ8³ •2ÒP?W£!¹Ãxç†1ÓÏf9Ã1ytçOÊå)y «â=aX$Wj~þáX›=ÜK7Šüg\k(I¨l‡»ÅõôŽ€Ò‚J:SAÙï,¡Ò]trÆò„_W@ÃMœÊÌAŸðÍpwñª”-øÉÃÄÝp™J£  ™ &ZØÐ.âÂ(%=ûLñJ‰Õʼn„†¯^1**Ö ƒÆ›\é ü46ÎÚa0ú;ºÒßxPzúH·3Ú§p‚Gü‘pdÜHüEä߈Y/ødü÷†šé¿Òô7tÐ~žüÄ^`pHOq¯aF¥ç\&ÁI]S™áûÖô“Ak»C.wøö?*‹Ž” endstream endobj 307 0 obj << /Length 1341 /Filter /FlateDecode >> stream xÚWQÛ6 ~¿_öàfɲ-íe؆ ËnE Ö=(Ž µ­Ìvîšýú‘¦ì$;…)‰!)~)_Äð/r±ÈUÂT’/Šú!»_xV °ºÒøqóðí/)_ð˜éXóÅfmb³[üýTšcoÛå*I’(ùn¹’2~ïËqË4¦:w®£UmûÒ/WBE;Ø)UÄãå_›ß~ÞLa¤"e©LÞˆuÔz0„Ès&x*Ç€EÆb\aÀÉr•fÉb.¯CÌÓ1Ä„cˆÙ“,‘™@{ñb•h¦Ò`q´'¢uø9šµ$n>­Ÿ>¾_ê$úáé{2u›K0Å5ãB“­'Ï }"ŽÖ=ä&‹£Ú,!SgZl‡´YZá“G¾§l˜Ú7‡pÍÒΆÁ3&ïŒ#‰×úr­cH\ë|ëzg;†¿´•f@À À°¯÷€Ï:KÀá¼%8ˆØg:zÁc>Y|´ŸôLÕák¬`z´Øqš¡!‚‹ž|ñ©ÖB àCìOtý‰´;´û1Dû76Ûê`q¸ Äà™f9ßMήJŸVx¦‡´†|†y|dÜ,¹%4 =Ý,Àö9NcøÏ¿séÈ‹§B¤_N®À¶· +×.O×8›Å’šÈOBGZãS/Ut° ’û{*®gC•H ZBÙŽÄÊØl!ÂhG]éöÐà¥éÉdªžÚÉ%ûÕ=‰HŽ –Øÿ¼¤wþ±­ØJ¦¥œ‡–7ý qƒ: endstream endobj 316 0 obj << /Length1 1756 /Length2 10602 /Length3 0 /Length 11706 /Filter /FlateDecode >> stream xÚ¶PØ-Š;„@p»»»÷àÖ8ݸ»{pww'@€Ü ,¸w—GfæÎ̽ÿW½W]Õ}ÖöuöÞ§š‚DI•AÄl ”ƒœX™ybò¢,Ìff6FffV$ 5K'à_b$  ƒ£%Äû/1 ‘Ó«LÜÈéÕN È:ÛXØ,œ¼,\¼ÌÌVffžÿ‚xâF.–¦yF€,tD¢Û¹;Xš[8½¦ùÏ@mB`ááá¢ÿà b t°41äœ,€¶¯MŒlª`K “û… æ·pr²ãebruue4²ud;˜ ÒÐ\-,*@G ƒ Ðð›0@ÁÈø'3F$ €š…¥ãŸrU°™“«‘ð*°±4‚_=œA¦@Àkr€ªŒ@ÑúÓXîOzÀ_w`adù;Ü_Þ¿Y‚þp621ÛÚÜ-Aæ3K @QRŽÑÉ͉`2ýmhdã~õ7r1²´12~5ø£r#€¤ˆ2Àè•à_ôM,íœ-m~Sdúæõ–%@¦b`[[ ÈÉéw}â–@“×kwgú³³Ö °+Èó/`f 25ûMÂÔÙŽIdiï ”ÿËäU„ôÌèà`ffæâdí@7 ¦ßáÕÜí€(ÿ¿2ðö´ÛÌ^I½-Í€¯?HžŽF.@€“ƒ3ÐÛóߊÿFH,,SK'€1ÐÜ„ôOôW1ÐìOüÚ|K7€óë챘þ>齎—)dãþùýe’ÒW–– û“ñß:QQ°À““ÀÀÊÁ `a~MÏõzðþï0_ÀÈÿ!U2²ü«¸E”™<rx½¼ÿðpùk,¨ÿZÀgP¿Î2@ýÏèë2s0›¼~±ü?/À.ÿsÿ;Êÿmôÿ· Ig›?ÔÔèÿ?j#[K÷¿ ^GÙÙéu-äÁ¯Ëú_SMàŸ«, ¶1ý_Œ“Ñërˆ€Ìmþ¾DKGIK7 ©’¥“‰ÅŸôŸ¼·±•ÀŽ–¿Ÿ 3óÿè^×ÍÄúõ9q|íÔ*àë6ýwJ Øô÷Ú±rpŒŒÜ‘^ÿŠ8ž,¯ûi tûc°LŒ °Ó« à•œ7À ì€ô»Ÿœ&‘ߢ?'€IôoÄÅ`’ÿq³˜TþAl&ÕЫŸÆßˆçÕÏèÄ`2ùýæÈdú/È`þ 9^s˜þ¥Ícþ/øZ®å¿àk&ëAn“Í¿àkfÛàë¢0þ_3ƒÿ_SÛý ²˜þUËk^ÇÁW¾NÿTýÉÉÂü—ÁkaÎÿ‚¯…¹üY_Üÿ€ÿÕKg‡×'î]{môðï)è4AZ˜›ðYÕµßÖŠ¸2l LSlk¦Ò0x.8t8ߣÁ'ÑÔd¬:\‹$ u£/mJP_ /?y´6‡~IPn{ðz4ˆS™ÜnCšŸÀîÿ^x ÒÐG„HÈ &¼ãõdï¥áo Ý Ù)K‘kï̦”yëÚ+åÖÐWþs4dv[y§†óòcùC´z”®É EžqÖ\R8'"ZŒS·73W×Ó9ß_ˆeãè¼£ÙŠ<µ×Xcî~x,Wª±:~Ã#ÇÓÆ%‚¾Â¤ôÝK–Å™ó,-ŽZ˜Ëæ ÿ4¸Ôÿラ®CPƒ@†Ÿ\'&ù·W“  “ï J*âÏ`ŠR)³„j²¡Rƒ,BKß»'2"Õx-HSºŽ®÷ßÕ;é˜ÞÜIŠL¨^ |¦DOšÑVóë/ZâÏÎ6»_Æà~Z€¤â…™tâÍÁT·2$îofEX+«}i5äq+ž¹¥­{ Ì”s>>@¯dõ ÉD12€Üµùb*ÚÊFE³ ½lˆÓ}¡³ZôþLχ‹nÒò–çnY¿L£å8™…S­º6š©ÈãQ{ÃV}0ôrøk‹ n Ú¥å÷ ëV¬a7U!ÄÕ tvT”Gÿ(ÅŸÅ“>Ñ[Κ`—å£6à=jwjÁ’íñ-ãì̦­Z©®þÜ¥W¦E%A xá:¼ä Z¼°BÒA™î[äç5~o˜”RëÆ[ˆ{úðýì±5Ó9ÿ—þÞ$¤ëÝ+öXo¨¦€aeÜP9'ÎîýÈÀª<2 Nõ!©Pü³‡aY‰ÒÀmmú-%íÙ†xNé·y.ÌeЧ)oö(Ô%¿¨¿/£,ήÕ¢@&~Ò¡’ÞzØ€pÒT¿à´<:ª³sSÑÞœ¡L ÕrBrƹAÿÒŽ¶=–ž”6Dqº}wȲ¥ýR¢*gu}4@€Ãäcßۖ%ƒ“ÿ3&ç >6ïò@±µé2¿1åd]ƒKîVÝ«×+#&d3ésNHϬG”½- Äþ»¨¾Scl¢8®l‘ïí9y©ÅÇÚÍ™Zé VŸð_”ÊÓ;Fܰ !æÒöRä¯0¤¬oNŒU)jgEÙÏ”òî3ßFÚ,#€”5(zü¿ë1Øœˆ/t „fí'øž¹Áp¸êÐ(¥K.åû¹|霹&DlÙß}OtÛF-“-[t®èüéme«j Ì )è?ö™,nà<`†„…ù}±>–è(p(0Ô½™W˜tq$Þ“:ø!ˆJ5Mn&‘·}îËp“ä5¦6ü+¢+eŸ2þ;WLv{?;åB“6ýþZ‰(š‰ëŒ8­x?7uvìÈ¢¹U›s7–~eÒ Ãëú‚˜'„í) ?¢KˆêRÓ¬As©z Ú9üSÜ€´C }Y÷ö{öÏSúØg û4•ÚQN/>=Ù°›Žæ 1¨,3“#Â-ôÔC8ób–A„.keñžÔ=› áP–-,r;Î(˜m³ Fä]%Û–ø vCëMŒÞCŸ÷H¶ó€ÃI̹¤pj üªfÄ©µó†§O5LsüM|8žèrª`·$‹W=j³;Þ·Þp%;*qø&ÇZÔ&ìüYtð°á·ýU¡r¹Ò—&š@ÏPåéö=ÿ¥¦ÑÛ,t})îÀ]D·êjÍ·øw‹Š+ Æ‹,²Çr(Êé‰gèœâž%ˆ’[{µuCëwö‹&gfæÀrX!üÈzš'ˆFûâŸñ˜xEáMê\МßÈ?÷yñMžY%š´à½?´z˜:ãJ…í6ód1J 8ÛÑý¹æ¥®Úþ| ÎÅyC[Ž›h±ÝΠs&2SmH®²[äάLh[úK¥º™rœÛ3kÄ—öĬþÈßµÔQçmü¡ÌÑUº%eŽ–aîgs¡íM2uec>“òÍ•ð£éÒ‹ã&jh²…íÓ~Ë­»a ÇØí !ÒÍ,‡ÆÕÈiUM~f@I<3GzB>aÔÍK [7®JÛö]ÎC€ÓjÊjE½dg R{lvw1JTì2žœvnqc”Œ_]X[“ ÉÛÙ^Ãfz‚þãh]`çÆéÉü´~þ|µÊšX§ ýå:­ƒÇ/®û›Fè)ÚœRiá¸Æ$còk‚zÏR¿«ô7VÎË]s*ãEßîÔÞXµk’1™¥¤"dQ9Ù·ãqo Â&´æ‘6FAÇÕ'“1Í‹ùüBÒ ã[BÎË&ÂUŸ^ŽR¯Ò"§/™>À~é€C éMý:ë«ø-ž{ôl¬€íÈ*Ú#ÚlÛˆéË âÓN \zˆÅ69ÓaÞ*¯qm¢°Ý;¼ÎgÿîãŠ×•"C€òëDf+ØÝ¨”l˜ÿ„¯‚"c&§}­óeàÛg4ùU˜”¤6†È±ö³’bq%} Nßî¶½t|„ ¸Öi×wv;Éřߴà/Ü8˜ C¡õID[¯xkÓ×_„7守Wq÷½saÌÆýGí–5p>‚±zzŒ¢uõ88üXà¤H«¥³½NÜü,PƒyÊÓÂÖð|­ƒÝâYó '>§<Ƕ_Á»W b{¸Sž÷Åî»´âWî¦þj/í±YÏBŠgq°Ë¶Ö[ˆ‡­{A˜ÝPeËÒ»kg#©;X€3Ô ð¢»ð'TSoÒ ¿ÒÈ»I^~2·\ƒ#›ÕIÅ]©tÌNMgxò^=ùªœ gª»Ñm“ r«Ëx@R#Y÷?WXäþ§ÌgÖg~xiàYåø\ CÐêsª ÇíD·°¼É?Sò3›Ïtä*¬$°BçFÁ19*&¹ä[WÍslROô¸óx_éÖ¿Áj]9e ¡OÌ«é1öm¶ª¨¤‰!áQKœ3@ ;Ë3Q9UhR5Ìðuàfp|˜¿P% Ö˜Õ­Ç"å9˜èy4Ͳ‰0°‚!ÀOóÊé§)Œ½ï™u\¥Îà×3+^ÐXô%ñc¾‘ÐùïºN°a'’æ#j×2ƒå×w?KOV…ƃ³bçZmd:㤲ÞÕâ‘YQª+õ`Þ ¸éß°ˆY€Én8Õ]íö% % Ü¿jš#Mn¬ªûKzePІÜ¹„–9Nìú i‹K±Ÿ¢xÔLèwù¸Ï¹ü’ß>ý²vº  °r‡˜@:4žoFµ…8%‘ªÀ¾E9X–ÑtM ÈÀ_”Šw›*+jtÃ]2àϵ¤d}?ù²%tÇß^õ¹ÿfpƒšš,-úë o™T!Öarwð7<™zÜüýP ’Ùðs)>Ú÷þ.mÖÂñ0´¨Õ{ýˆ‚Z®Ü_JxòˆÐ€ÄP8$ fÑÏt§bœI_Ldo@°!ïH*V ¼"QŸ$T~%{Ç ,D@Ÿ.¼³û$îJu å$´•Y þ {s¬ÇËOQÏ›M†ŒÍóÖ¦D¥Ü”¨^Sð'â¤:›¶Ï³’Ö¯t!¾µ¤<ŠC¶äÏ…LÄîoBQª„¬¯Û (ºÃý£·WnöêîÛ¥ s!,©p`Âé–•/Š? "³ÒcbɬõU°1”ê¯2ɦ±´çÚü0lâ34Ë–*šž¶£E)„-…°$J¥ÄÁUäi³ƒš®}£Æ_RâkŸ®„eî×Ö䂸Á¨°/á䮿ÓV_?—û7Ž·Q2|ÓŠ±ÔÒoã ›áÔ⺡ïñ¶Õ8y†yJ­ ÑÓÞ0#:Q‡AÜcžg°Æ*¼?äðŠ4_pM4”?ºIR³S³®}±hjCµÏ©Ë«Y1Óê|yx¼y‚,r(˜g€épÁ¹ê˜\Ä7XÏáå¨^·ýY×2mâ žOÜ9Ë"8B‹uPorþå§¿ ÷¢È "Y,Yçl3Å >Ñ­Àãà½ø`E¢­k¼zÙSr°–*¾oKóvž¥²'@ý{º üñuòz‹ÿŽ”ZÍ*Ša`hàN‡ÌŒÝ¬ªiVí‹gÔ Í-*l­–ß®^¨Vï`Iÿ/ò_»UgCvÁÅãäÇb»É)Çz‚ðW‰ñee’Ëw…-c»ü}&pqÓÈšçª?!b$’ª¤È\öb˜ÉÍD¡‰^XXïì'ð.?÷ß:BWl¯7~Ç߆™ÜjêÔ Ù`m$ƒ BÊhPpü’Z€kÙÌ:`ÅE™.µWÂV·Ghå¡$³ôöïynçÒ¢óõ(é,ë%l«WªÍM¹VÙnÄiG†odšÀ>õ'(ÂFߣŒ&Ü ŽObÂÙ¿'QXmÌŒ'³ ­œô±ý›ä*Ó,ê³0ÍSlˆ#ÉB0ü©Š`‚cºÙ.9ó4*lpŠ÷4Ù8)ƒpŒâoçþûõU›¢ëŠ‚¶ ›;9š@‘ý~Ïb¤ý̳›kÖ«+£Â÷aU>V¸¬ˆh†¿ðó¤8–ÊÓÐæ]×N×CùcÍÏéTu¤l©4˜D_¨H‚ Ù–“%~¶ß5pó­6õ æyÿ(˜h+êïʵ}cŸM_óñ¸Å!¡m€yûªÌëüÓü8Ž'×^7™ZN¼µUJNø7ðÁsNd€ø%MOO×µ’Í‘ä ¼ÓÆ\g¢³-wi‚Í.qWN1O®Š´PSI‹+R?ÊÈ»†iήáõáçãÑrÂ#Suþ{¥l5hÕv×>Û;›‰/‘”JoÁ³Ö%iB[º‘p­(s$¥Ðy½ËÌÇXÇ*¶`e¢´Î™ª&Ùºsܹ‘$'~ü¨3KF£zÄ­v>ýn½ÚLü\:›ëX< º%l^T°ÌX>ŠÑ}¡wÈ„*£˜oŽ51ëÔhOÚêDãg¤çMþHéL5"’Þ›j¼a[†‰ A‚‡Z Ä5¸‹ne?GñÍ„†’ZLï\G(&ŸcËéfdÔ­aÝ1 Q–Òïî׆"×Od\pŽÒö6è9Á@£°¤*¾­ù™´tgåùÍ‹øF­¸1ÿþcìFǾkËþð/)¶ð8V÷t¨8©U ã…˜éÕuOl)¦£Âˆ“™mâm'ŽW°/ŠSª=¿‹l}%*†¦L(Ôqˆ‡8¢Çø(hjdñFJÉ…®;sekZ}ó|Ñò“”¼–¾°Å8rY·jø.X,<´!\É«!³Ã(VCø˜;±@Bí.e•ÎŒ³+Æ®äî~ ºú#V*îOFIIêMãã|üL¥ªT­ŸïΨϻx乯&ÉqÞÝ@Úõgµ«Ѝ@–нÛ3œ´ÚjóLI’¸÷,ÄÜÓG®4À>*VÔîÕá û2î’ ºÞ$¬-Z°7͵×ßæôí¡–ïaÐ\’wXƒÙî™­!Ê@ÕîCì|®ÿUþû±g?”ï±!•øO‚9¼\ý”¸LŸJé–2lý?µ'¸R6]^£Ñæ‰Òɪ¨±ÿÐæ~C eûˆ‡’Ór>‹úk¶û¸Ù,qpç=ª;çy\œEŸœš›ß&´”ßÃ]7ó$U ÞŠ 0©~Þu*1{Ó<5{F?j<¸ZªàjVneÒJæeï •‰œÝ¤ópËg¢X^T0’Ö‰Þ/\‚åsV8×éæÌ Å¹¸¶›¡ëƒY³ÈF%Ä‘õïd=ôº´¡žšâú -îSÁ¨níÍëØ]XýoëšI “Öâ=EW¨Î¬JV?r›WQ s…˜ïB¦Ö~€d­npò ¿;ÏǬ̂Öš¦%[4jªðÆ]í<Ϲæ6AÕ· ¥çóŽUø4#<=XÐj1ý¤„¡h1ἸòX’ã…®DØón:¸^‰ ï5cúÆò¹Äë ¤eÊ’¯_œÌeàL|Û˜¤—S±û½Olñ±áŽ ÌÀeç8eºóÜD…ånHÀ”±íÚìh»å]»¿Nð&QkvwÞl.ä@U>Á3¶“H=è=Ý’õ×t±H‘¦Í3.;“ïhIå(R]z‹¡á¼=^,Ì[þ§A÷æ –Êú2(þÉ.Ý[fV"æ¾Q¬4ÙæÊÕhSg#VGßÐÞDÇõpø &uhø1ïðÎ-±xZÓyúu&Âpòàs„cÓ!óÏð!ï)lé5oò#_f6·ÆIßPÁr‹Š[äéjxܨš ´íÉ|•šñe/Bà)Ã¥"7=í–æ×Ä Ì†’«ðŽ“¬üd PèîÑÉ«,o{,¹2ul»ú“~boñ`0Gon^à^ÅŸv«§)ßÕÉg˜M\Ç}%Q5š“%±‘k¦íI ÎòoáòŽl,µ…>—÷ºMÒÖ3­¯Ý£5ÞiÕ´­¨Ykbçàe¨ ÉÉm~Õ/^”-ý,Üžü0b°ye¨Â #Õô6@Œ ŠNznªÙþe¯ÞáÜòÝL‰5•QspS>•±âørŒ_. è¾[Ç«ÕO°^Z‚! ±»æIOÄú3·Z­1YBFk'Égø bÒÕ‹4òȶï)S¬ï Í{Mü8°°ƒ5àìßlhõoVe Œ„…+%¾ñ‰»jšÒ…nÊמ`ÈÅ{—Vz¾3|u½Žª!ñ“ñÄÛØ³i1x‘h "³ónj+çN—Ó° ç$ßäûÄg&7_g¨WYtå0:bV÷Å}sqW.á>ë9¬½uàè÷)”˜I×Hήó¨°f,l®ùʼ±Xihù†°Ñ¯¡áÅR†Ò‰94$Qæ¨s"Õ¿Â’c.$×ù7¡ˆðQ+ê¸$åÝ(™í> ³›hMî„¥/‘ ¿‹•S„;!Q£×î”P4uTóØB7ävËÿȾ7á:MvgTB\0:v•ßkÑð•ʄݒiú§^cÐÃb03ck“ÐSOVÁÿ‹Å¾&††ŽÄó1Gj{´Â•¤·2yâÕ©­wþO?ªKüßß+Ü⽑ƒEÈðj΂»àp*¡ÁÒÍJÝ©? )B=ùô(¿°Ñ<¸JHŽÎüùSÇ“îL^CµB_¯*€rª¦“æÏÈÜÞÑÌX"®Üz¬‹jdæûI_#³ò˜#E·N „ve,¬Žø$Êqm¸ð_Ç1Mæƒ>˜Js€Ä¤0F~*w’Q{ºeÀ Ós)qžc›Ì®°F–8Æ—‘ÓÛÓ/t7ê¶-ß|èŸØÝ”ÇãF댯ÁEÒ!QЂÆt§8eÆIƒèþÓq~ §äð(•½×ÙòÝ<¼ë³15ŽF˜¨T¶(úCvDõ 6ãmæÌ­¨ñ¥ËFßþƒûqSÊSµ_©Xã<—MÚd~žåá1¦À4÷ZVIìÃñ ªžÎ ¦=¦+Ü¥‚„ ÆÌ>¡ï \âZåà“æÇX …sýø„òçq¦/–ܰãŒóXÎ3º2WŸã¥Ì{_Ù†ëUN´ëð-v?Ò‘r×-e#¾¢&yM½ñH ·gy—²¥iª|< *¬ÝZ»Æ 'Ä!‘åtf:n)U)]¼IíI«Áf-"]1@ÍAרÔ-MxŽí$4]Ðïc.Š» Ý'¼ú=ñ¬( ™«Ï°Ñ|×Ïæï>Þ¼L¡4¶Bž¡+Ûõ@1ÐXD(ÿ„Y©¶z'ôü äÙ€&O(Ò‰ ³FÔw*}Gá3§HÛüK)áÛµ «(¦0re±X_È£*ÛE]Cvÿ\4vÚŽ|†Ì‹!5 Ù”êÅ?+YŽÏ®Óç?îØŒýíÍŽn“05e a j°X¦è ¥íô¬OýÂAmðz\2cv5’缤P çΕñ#Úóyv@IõPyY_TЭSÄ…Aà²cÅm?9\UPtØ*ïÔ@VD3¸pü0A«8·}Æ­¯9³¶ŸC¾Bo"¡ùÍo3ƒ¥=V˜É—ìã}˜^j±Ì—ºrk­ÚMJ”Ëþ[aHálaMðåÝQø4 `T‰`ȺÆ~_ŽÆF\\mMâ2õ0Š!¶¿—¬aƉe‹ sµ $%ò ÔËS&Ø«;`déúf _ž{¦*ÿ¡ðî¾ÆF+:Î Ó—.î8_›ÿ8ySÏmge ÎÒ¾ÜkN,4k;Ú/*µ…peBµ@uñáy8ÔTt ‰‡2Pç¶R¿`‰2wX›"„ÕB0 +ó'O»äɪ eÈG Ò¶n.ø™OÛæÊã§iM[ˆ×Ó^·™ÍýX°~ÒÛsן#w·áÍ1ºGá©wþB\ÔkÔžÙ".Àw|¨ã1û_“')êþ¸ô#¯}3­+½Â'éˆu¯ÁÜkÏÔC¤hҪ惠R’ùƒ†Ã9á–·P h£ôƒo¤ûÀJúzØ»SU:÷+ˆ+å —!¥QÚÚ9 {ZÒk=Ãv®ÕÄ3² _Ìg“ªd‰Ï£,G9ã=IÜ騩Sdã§Â0¢xPò§qG!ëÞ×W’£s˜O]&²ÑŽy‡ïDÕŽ%O…â °‘®púÚ‡­Ó,ʸÎ4Us¯dĶ¿:³Vž’Þš¬?˜13oïî©ÈÓ]äÒÑå›¶ýêÂÄ")3âXURØÖÖŸäÈB"8º½î¿ßɇk.‰ªG˜%%pà[/,Þf*"íÝ/\¨KÑ ‡v>²-+Ä]ß#GF€3ëÿ7" ø½Â"ss=£-Ú]¾Æv¬=#ݧŸ#Vaa;¹®lÃ0SBGxu~„/>bEz],Émús ççnâu$w³²-J2#÷S÷]u:ö³Kš»7Ú[Z5Ý7”)]$u7$…ßÙM)„çïrÆCØR‰£ÞœN?†½7ØP W—a»ØÑ“9+ê§Þ qÔÎJï\®4îœæû›‹ Qª‹cnp°¶õ”ùLÓ†ÖH;¨ä¶J»Nô…çî°,Y¼'X$ßÚÆÌ´x,C㟳º½²²×/Aè}' ­‡QÏ—f¶ÀoúSÏônï½ÔLc%õˆZ¡%Ù>Øõ6BJ8tŒ£/â) ßZ°Œl Îm]x‹RnC¤A™€–³•½ÂÈr˵¢Á™!«ÈÊ3Å´*¯$Õ¦ª”¬Áßt’I*7à¢Â\2PfÀ{Ö+åSò}\'g¸Y£2Â1µcÆë|† ân»j=Àß4Ë÷>Ú9»$ª…« ²¡n¶NxBEÐr;øF\#‰¥ëÌ.ÄšæAÊNc:CKÉk~ð1Aò^àaù‚4B¿Ä Q7ú6ÉÔ†J–Õ0àÝÑ–‘J^ñ!ký§ûg{Üê± Xd®ˆ¦‘ޞ܆, éôR«óšCTh£NÖhùë1æÉUì)›TžøüÔ(·:õ³9p¤ì›Ë }-ÍI·,»™ñ6ö?¢¨> ™¼#Ó@ƒM_çTΓh '£inç§£µ2¼v¥`ÏNJ½ÍsÀ÷%%À?T§ÿóƒ"Ž‹áù’¡”ä9<Üâ­Ü}î^ÐnJÄÓ‹«–õBõýÍÒ=§ææaÚ$Ú.IH1ᱨ|­Bñ/¹ëèA]Û×àÌ7ðòæø¤Ä-àõú¶µÓárÅ¡Ê`•Pý墩‚ä¯ ¯BÃQoÙâ”—tvÄ©§ÄHÿKñù’§DÖÛQAs9ƒ²Š¾²ç˜¬T?÷k`+HÊÌ3hÍ„‹ðá_Ø_¾eÜX·ŒK¡ò¶Â3rÉz^†ê=¼÷,°ü~’G¯–É-ʹ©/yxÓ:­%«­ BòÁsò.ñN÷®eö¡w.âë˜ÈÞã÷ O»M33«‚!×7¸ÞoßK¶óóË(qjà4ûPÝž¾Œ¶ÐôÖ"ÎÌTJæ‚¡/ˆòAæ@©”q£´§$ˆ+Ç’"öLi«Î”>”À€Áö¥½r?]f$½ò>éW*DÈ\hŸ{˜¡¼Øê¬+T·ã+XUÜH40á”Ûƒ¸&ÊAJ¾»Îl‰¸¸ma` ;ùe&xj‰cíí·þTÕ² Ò%qˆåûÍϸ¬ã8õHßù„îZs}?ñŸZýô6‹”6•Bbâöž¤![ ¬ýšB°žt.Ù”ò QB£û¬F—™o´«Ò@k„@Av&Ür'îÈŒ‡„øÎ9‡#EA‡äzìSøIÕÚ¢þê jTùùº›BRß ‚ ïI§D†05qžéQ&³67²TÄ!Ë­ïAض¹ÑñD ­¢ÔOhä¼ èbW^™û>H“èM±~ñóvß‚Ð}œœ+ëÞj¹S*û|*qàíØw´G”ž˜qî‡UõË𥘴Cä(ɵ¥•:)­ EsÞèU¿tk‡<þÛ t êfj‚˜™BàEÔ•—b,ù³É¹4ÝÐ>¾P~‘,äÏ÷ÄïiÂÙ–Õt-R á¹é`"bòmu Ÿ‚CWfŒ2’  =´UŒVÝ=K ÞáÖ}:v| Ûpãª/¿¬sëH»õÒ9hIÿÍØÓê±ÄôÓ\ÕA?ñà„••¼réôýß9Ç_—º± tCY­˜~Àœ$ *÷b–=°Z°¦ÑÇ¢¦(÷Ûiˆn½‚fÙ˜”ùü!>¦àʆðhìKwWoîVÔVÌ?Ë.B7üž¤©ÄW:ï$Æ+Oþ.÷5|ª'!È=ó¶šó!y È’’í0 x¡¯ËÊÁ; ̶Ⱦå³Ê#©‘©.Sb~w§ò™?¤ËkÎôû«à¹Ë9’_妺-SW—÷shª\A+¿Jöeîë*¥‰æ’U[[Ú¿‚5„…úVök›SÛýêÐFë_Ôá›z0"nû'ïÄfS­Ì:ÔtÇG¡Äͨ ˆ"@Âì,]óíå=jÐPîŽnép ]¸µwŽÍ ÝUíɽх:'Ó7¤o½}X™ã¬$+>„êdGÅô)*壘 L b:ÄŽ–ð­Óõ}Šë\˜EL'ý:8-ÁÏ4æ¿Ê¾ ÎZIÒF›Ô~ÀÄÿn˜ˆËH¼È„ÉÅ©@%ro]׆VÁãZ£k1¡5Æ>€ tÍ×&mgᡎL(õƒÌ—)'[Ñ# K•&ÙPÅ[„¿Q9ðf‘÷âÓ ú8Пín¹ÂÃãš84”¹˜4÷3DÕ #Ó!¾dZó½2bè}§àþÒ†ÇíãªiÅ1£ãýŒ1H¾IÀqmMñP_¤N5©²Ñ{$䜺( Te¶³f´àVž…¾©‹¿¾•O$e‚Ž"!PLÎ-ýF!rÜ€MŠŠ/¿8Î…úÁ¦¦¥òVBÙõ@/rg•#4¼ Ÿ3Þ¾ñÙ»`R¡üCÞ‡›a{jA#±e0öÆÁšŒÄ|Çày èŽêé÷U.Bÿ] -‡o£‹ØS¬@;%þÊGêldŒuO;žó~‡,Cì°Š>Š‚qOe©+3ý!÷](LÉý°JH–‚ì ¼XªJoWE…#G£ù­Úäçr±éa ˆ=uáî¢ò¥¬Ýª ¹3‘Ÿµ_wñÌÝEƒ”m £ïkSpÞe_w²­XHN8Ãy¦’k)IžÒ swØäÈ@¡® Vx©*TrV(E‚p¥Ñ‘t„²½ù57j¼Ô±Ïí}Ò^®‡NTj§Í§À:5ºÈ"Âå’XØ\+Ø%Ý”«‚gUËØî!ˆø%ï˱îð)ŸQ –™yìcÊÔ %Œð61,þ¡$V f%` Hëõ…ÂŽäuµ̼ÚÛˆ¯—˜‘pHè«òï›ôWXÅ£ð?£žYIh+&‰ß‰%E©w<-ªs‰ }F”–®}hÿ„ÅNoqúÈž¯{?7µ»Ýóv¶ËóÞ©ñ$h³Õ¿O Îó{¨Öjb[M x÷~å³M°”«¨S º+Õû÷,:÷ÔÙßÇñK­³'}/ßaS6Ì•&x^ÁVÁÚˆúpî6 ({Ú)$Ó8†S‡žoc„1ïëË£’ ¿loø–ÉC¾ hqEßiRõ†[ˆglŽZEå3Hn°äOÞ¼ìÖ“³pÝÝu‰·=ÊÒ2\¹¿¤KýV<ìϬ7kíðÃ~K‹r}½°#L1b&üƒÅfC°U9æ@_ð“xúJl볞rÍ"v\Ïi*ÙZtZ |Û‰Opâ4ÊòEIèk]õ:“f1·à3ÞGä0Ž]Ù8*Þ~ñÀZ’ßLcXqtñ³ëÔ> stream xÚŒ÷PêÒŠB‚{pgpw—àîîƒîîîÜ=¸[îwww‚]ö>’}þ÷ªî-ª`Vû꯻§ 'VT¡2µ3ŠÛÙ:Ó330ñDä„5™YLL¬ LL,pä䪖Πàäpäê@G'K;[žXˆ8œße¢FÎï†rv¶i€™ÀÌÁÃÌÉÃÄ`abâþ¡#@ÔÈÕÒ Ƕ³:Á‘‹ØÙ{8Zš[8¿çùÏG• 5€™››“îow€ ÐÑÒÄÈ gäl´yÏhb¨Ø™X=þ'Ÿ…³³=#£››ƒ‘ƒ£9?5ÀÍÒÙ  t:ºMQÈÙÿMŽ jaéô/…Š™³›‘#ð.YšmÞ]\lMŽ€÷ì)Y€‚=Ðö_Ʋÿ2 ü»9fæÿ†û·÷_,mÿv621±³±7²õ°´5˜Y‚€qYgwg:€‘­é_†F '»w#W#K‘ñ»ÁߥÄ…”Fï ÿÍÏÉÄÑÒÞÙ‰ÁÉôGƿ¼·YÌÖTÄÎÆhëì÷W}¢–Ž@“÷¾{0þûq­míÜl½þƒÌ,mMÍþ¢aêbϨfkéà”ý·Í»îÌè `gbbâäà@w Æ¿¨zØÿV2ÿ%~çàíeog0{§ô¶4¾ÿór2rœ]€Þ^ÿTü/‚cf˜Zš8Œæ–¶p¢¿‹fÿÂïïïhéÐaz?fÓ_?ÿý¤÷>a¦v¶ ?æ?1£¶°¸”–í¿)ÿW),lçð¢ggг°3˜™Y¹œìLïÿóßü‡ýßRE#ËWÇô'¢”­™€û_$Þ»÷"®ÿž ª¯ 5à3ÈÛ½Ï3@õgüu™Ø™LÞ1ÿ^‚¿]þÿÍþ_Qþ_ÇÿÿV$îý­§ú—ÁÿÞÈÆäño‹÷yvq~ß 9»÷ ±ý¿¦À-´°ÈôÿꤜÞ7DÈÖôß6Z:‰[ºM-M,þ5Dÿy…÷à K[ ¢“å_@ÏÌÄôtï;gbý~TœÞßêoð}¥þ7¥˜­‰é_»ÇÂÎ0rt4ò€cz0vv€óû’šÝÿžm#ƒ­ó» àœ7ÀÌÎî¯å`0 ý%úâ0ŠüA\FÑÿ"N&£øÄ `”øƒXŒ’+€Qêb0JÿAïäþ ÷ ò7€QῈë=ŸâôžOézϧü½çSùƒÞó©þAïüÔþ £úô^‹Æ÷{>í?è]gô½×iü½×iò_ô׫1šþ¾W ü/|Æ Ìƒ÷âÍþÀws³À¿”–ÜYÿ‚®â1ÿ%ýÑÿençâøèïæÿ€ïݰø/d{‡½Åû­ÿcñ.³ü|'nýøÎôøNÝæµ¿SÿŠýÝÕö}jÿ¡'g÷'û»³Ýÿ¨ß«·ÿ£~fÿþ-e šýi󿥎ÿÓE¶÷¾Ú¿Ÿ»?çxgþ~Øœþ^¦ÿ¾Ë_B;g ©1èâ²²ýQüohfæwÕ?:ÊüÞ §?$ÿB@×týÝÜéý†ÿqx¯íO¸÷›ÇèláüÇL¼uv³û‡Ã{ã\þß{îúøÞ6· È»÷?’±¼‡÷ø|çëù§Kï‘<ŽÿJõ?wÃÄÅñ½§Î_ö÷£òü÷8è4[œ³3á ´ª lø.„çF¿;þùù®F*5½×¢c‡Ëo$è$êêoþëŽwBIC?PV¶Å¨n—ˆ^¼Ž[ê¡CZ”Úž¾<Ä)Oí¶Á-LböO ÕõÀâÓ« î}yqø¢îgý±¼Kš<ÇÁ… I1íÁí§„{]_ÙòhðÜ®Ò^5‡ üsÙ4}”Z¤®_ñ y®qæ,6 ”3= ê…;òÌíÝ/Ôì‰7"é8Z8ï“(ÖB/í –èÇYÏÕ U§n2ml‚·¨£S^ÂÉÒXó^%E1ÒÁEfúsMüÈFl5Ä]‹|e#›#؇~"eÈÛSÁ1&J[äÂC‡ •ìNlÔœ:Îâéfƒ|8'¥ÎýLψʙoŽýÖΧŠ,!i½ñ ÂÀ[*¨ÎƒƒäyŽœ¼þ>nŸiÊúø·¯‚q ,ƹÎ:=^F8.½'&$la²tnTµNùU'Áð‡H†™-ˆ³y¡ O³4û«P߬ùÁñJ£¦>ÈXÖ¬Kwy"½õÊg›,éóí= "|ؘwPÝu \0-ÓNE§[ñH÷ØBŒÈ<…“²¨ä}×I<îË6F­÷· ¬å¬.12*HË£Äm1¿)¾W$௟*…?4­6ÿ2%U6y$©ï*‡\U>$=gÎ,gÕHÈïc¼î’fÀ䘯š!àKUÅ‘:!iàtĦ©÷ÀÈJFØ ÍàoÒ¶ê¹³Èj MU{u«~»Ü†{®'‹ÝéÜÒÝÔg)¤RŸÖ=—ßÛÃÏéøÑÌú rFHà d€âÔS*¬Øt_ßía¦âQ²9×e¼ñi¬×Û…À>ºÿNqk0ö»¼‹ãµìg‹ÒèYÿéAÑñÅÜÖÅ™ýboì¦f"Èîî¸ú’qO5š±eBÖŠ}Ÿ»mÉB7¬Ï]%ž³CÐmDHs›c ‰S&î­e˜ù®Ø)e¸Téþ¨|Ú|á éì2Ë3éuà¿h=Ÿ?Itä2SwuÔªH癯F2ÉÇF,Íå”RŸõ{œÛÍÑxkÉPÖCløÆýR[;ƒÀæ‹ –]`HM¬ß¿”®M°sj_y—~[‰Õ£=öa«Cë¤ ÃâBÙ4ÐwÒ¬owo°¡“-&ª‹jÓW'÷T¥Íh,É$Û7T#œå57æú¨ºÜ^Ì)×1cÄU?úáûePp²ìCF®LwõAÓ}n¥)SÇ2Ùcícý>‚3ÀeÝoqby jÃØ²…‰]7Jßmðoº“ï@œéâ¹È-ÖI#Ë6å™´4Á˜K³zy’cÙ1ew¬’¹æÉÇÞ©+ü½QÙ9æ³ñj’ƒ:/g[²†FlÆmÀ¯xTí #^PzWɹ°—Š–Ô˜ ½ ÖÐNÀå ü C+} ùˆcý ŸNÒ§J¿|\¿Úçêš57V²D6=ºA íÄLT ËC{¬MºåÞãx&3˜cMRéÉM¿vùÙèšÀDô×–¢6¸ÍA,© PTñf*½$”£/.ñ‘»Èõ³…X·&U¿Gl°üC*47nñ>–)û_Þš&[d;qÌ‚¦HÔw1Bé»èòÎ&Ý…=Í\tìÖdÂúªŒçEMóÌ(~=?¾ýç]R³lëSýÀ‚vÖ€ˆOÝèöñ¶"µÍ4¹`Œ‡Ñï7Àœ˜}®cÅ;*Iiœöš›UÝ Ð™¤š;–¨jhÜBä#æ%úîá@»¹W~‰8-]ŸôUè vÏõÞŠÑqrvé[€6" 5Ûw³9Z{MƒPg{²NŒ²6ŸEŽÈš[jÑ团Z¢›…q×WÉGVK1ï@ÿäB›Ïû$eŒ2‚_ÏuÄrؼЂ~Ú{*3j<"Ñöù•HAî5$ØX$”Í®(Û›}÷u2šŠa2çD˜\ðÕòî N:(Êv—鄦`ÝèIhÙêÈÖ ù§[ R?“Veh4>´‹…U;C ÑKw$ÀŒç‡ä_k›Æ\”Z„$ÇÖFÄüäw—?-Í[³ßŽqúX”Ù"!뻨PhÁýË.êæ×qNI&n7Ø’4ï…4­® Ü8¾4Îöðk´è9?n(y€¡ètNÇàÀ‚ÃÍKÙ„ïóZ•«wÆ(²"˜Há:Ì4Mø'¡ù”3™~Ú›Jfb¿Ê¨âÛÇ‚¾mÒ¨¯Ÿh‚õ²t-/ˆ1¥Ç,¿ ;Œ¤ÚHdêf9¡4*àHÞwa–ênFMàX›d6µÁ®|(žÚJxú²³ûLòGÊéwÄË4œC.² í㟿Žùœ=¬JþˆøK ð±_B«"x:ןz»È&Ë-ø–u’pfÉtþ‚ÿxv¿ßvµ¼Ê塈𺺊-ø’ãjHMøƒA4Ÿ5wq/I†, =ÿ6­@Çúµ6=yzÕ©7S«mã—ò[XBáUÄFßQ“èr–“¸r¿gQ]¹úO*Ü’ JQí³™Žf7ÅúϺìì!I¤Û‹®:AZõÔû˜2;*…úøõ>¶-i•r¸šOt\ùœFˆý¦d¯)«IðúÎŒ¨~ ]_»~bÃ\W°5+ÉxQ/~ Òm7åo³Ã-igØ/&áZÒ‘ãeߌc¾TÜ‘ÚC’ptÉD!É)jެ{#ek›Lß{¿ùR“cÉ.Ș)° ¯Vùmm¨ägêÕb«éëoŽ_³#¯\”Ë[<"U­A˜ü­”µ’§¿Ö¸§üé©»ž\jàº]hÑAõ¦·;l ‡Íž¥&²N! ˜ªÒP:<®ã¸ÏA{‘aòr4­ˆßå!-ÏÏdÍ®ÍÄg‹àóÁFíPÆG ŒÆˆsV·„œõn=ýu;°2 +Ö•ÓÙ ŽŽ1å~—$c΂eÌ‹»}<²SFë]}­×îV#´žŸo,r¬TŒ5 B—M ¤ÿˆ×7a‚ñ©,båžU»PgŸ2})7ƶ›tPŸÿCÌtÎe}F3„ïšïŠøC§›œ‚jlµ¨“têˆ^kýïž/hØ'¿յΦ–*uœ¸*y§õéè§+ä¯äÂK‘WËdøót›×üÙ{!¸×v‡2)K$’™ÕH3È9€ær–qa”µ1NJéªÆó6‚Œ©«JfE©ÕØÍ{PŽÒ ¸Õ8¹Uv‰b=óY›§1ËPU†ïš­LS`Kÿ€É #«OþÏjÞ§»dΉ¤h3·GU·¯JêœW¥ïˆ}lUqœÎ·Ã–³hz³[=^úëcL( o2B£/÷›vóÖ.”çn(/Õ)~`âG©kö½õ,„è- ?½¥hÖ걄E&ø=Ò †À!ÛÙRPŸy¶’jŒÅösÔõ™§Õ/éHBdìÄ™Lcp[OpÞF³×ÌØ$ôG+¬ã©¼ö{ÇxVà`Ò^×ôèÒM ƸI#&~³5ÙÏ£C÷N´¨ãy_Ã÷48edõ«ÔbeÐ9—xX‚×\N:¾¶×_‰³â<›£f®EPäÉy/,— ²f‹ZZFéf;º˜ò¯_òÞ[¶átž…aÀÙ‰L¥™XßÊgÌD<Ùæývǘ¥fIOZN‹ß!#=Eäxœòz=‡y.ßߪjÔw½U;Ñ €ïòÁ‘»Cê˜×Ï œYqø¢ŠÀÏ`¬ÄÇë[ƒDjÏ=[WÈñ_‰¨'Ém5fÅ¿)0‚¡Ë¡¤yT~BŸÙ÷¹Övè8-]"²”Ê ò#+ÊQÍ q(ëÓ{*ÛO¦¾!²ÌwfÓÎHV›Ñ³Ù óSÿ·¤ð”àç[uÛNmfùÚwENÿAZ­?GÇ컪&ç #nIf„ŒD(ݽç9—\ÛÄ>¬ç7Ïöhݦի£ëm†âM4)"|Œ±¯ûUÛ¶Á}[шloóÏlxò಄€ï7ìÈSÊ‚Œ^fÇJ"—Þå¦ÃÝ0ƒów> ÛŽu‡ÄÕÙÚ^²§boÛ"ÍóíšN}»ä~ÑêSÒ¥"q0.kxY,Œ 1†M¥ZíשxO¿žJ‡xÂO9‡Ï6î„oÎYaÁ–¬ÕùxfÈz9é‚)O[QGðxÊ«HË®zà[égýLˆ'híÇ'¤žVô™”Ñþ(„ñ[‘ 2ÆJZÓ‡Šß‡{‹¢·p͵gKÿ&²“º#D“}ï³ÅGùi#y”…ÚRò(fÈ­9W(æsW}_6Ž:N?É»8Ìcâ×ëù›—«¼-6‚’ôÅNãÕ·Ý‚–(pç\ñ+«½ºÝÛKŠs¯k7%Zípéø<‡f8Ú–MAøóm[ºu+9[13)øe ‚j5ˆÊz-¤j®éòAX%ùo™2(áÒ¾Í1•6ÀóÀƒÇšb©@_T–ÿà¨Rs»U ›úJ0yquüY<¦—¯Ÿ(yJ‡$È ìÓö |Ú­¶——TïÍC 6Â)×Èe£6l}Ϙ¹¹)¢OÛ×Xãí™òcµÏà+𻼈aùÌà¼;:)À$ðÌvÿˆ¿ñy¿rÓd;?¸’–$œ3åƒþÑ3èž~/¾Sò›š†I›cÌ$ÚaPV¤À×êt¦¾àºd¼EÎøªÊÝäèr\=¢'_›'e³´¼ÂDëIÙàD½ŒJu­x›Èl QL‡³)ÇÆdÄ’)ívŒ~Þ­ˆ|Âgž3EBz~6CZa#é*âÓ9ªð†äôå$_hMÛ÷µfd‘j´£¬,vûhÌ7*œ„z÷e€Wk+¾ª Ô-îµPF‡q÷m¯’Ž?tŒŸ¯íà øÝ3 ]$âûÎÒ—+5œƒZ–R¯‡æÑÝ=¯ƒ:üð÷áe¶ëtSݦ®ˆUlÅ~£¨—!f`r>¤®(ŒE1»¸¹æL‚ŠM٦˹íjò}ƒÿ2„ØõÛ|±æ†ÍBÚ6Ìóed²c-wžMòñ{ጵã¥T ˜Xt¡ÍÍÌeºkeXµ1Ýt÷2¿ÍA­ Á¦Ô G|Y¬¦nÊßD¬#<†…Bœ"1>š´{©Ê¤;Bê?õÂE×L;ë‰aç˜|·hü\Ö!—=oŒw°¾û§~Ç;.wÔš:-ª•ÿžÝH~=…cv5ˆ«¦Ia1Ê» Ð¹ý{cFcœ¥F û!ÉS¢úô`)Ÿ3=^þòâaÖa òF²ÈÿÄ`nx‡+Ì!±÷2x,œDøÐz)nK¦;0 ѽîâ°‹J=­žYè>hÁûÁ&1«ƒ2†dV_ì!èË©©“ƒ€}hŠªAÉÑ&-Tò$q+ÍxOæ#BM\¿åƒ¸í !'S/Ô¤Ís—ƒÓÙƒgç>Z%®”»Æ¡‰™Ð¤h¡9¾·äÚò’®–oYÎU޽t^Ï¡§Ÿx!5ÚÛ^‘à‚D“®Ì׳~µÕHrÎÃðñØg<톢ò)x±A6LOž»NÂç3­Ñx‡Q.ãïùà6ªz¸7¸®Ã¿Þ¹Ë,š'÷¶òm;¦Éáe|øVFÜS·\<ŒäI/•L°¸&mÉ’u ŠüT¶¾º‡©éôÈ™îŸ+u¦½®™Õ‡AO6¸ñ¬®’Ž QèȵòfÐ4qÄÝ>oéËý˜öx’0m¹•Å/æ ®%'”Y³ßˆ£Kß¶µïÁ$”õÑ¥ýâ4lª!ÁQUëÁ m\Ž­É)#QXKúóŒsjŸu–Þ%ŽÄq\(Yúz*i“ƒ—ÁØ·%˜WPã©©ž œÖ ƒÝ-ÏŠÝ/Iàx˜ð¨4Òº"Þ†=Q[•]´¶שڼ›—=¥Æ¹‹Ì0vl/§q„¹Óìh_ܳ²' è]ñÌ a“!¤ø{Š|â‰C¹µ£øf܈PWæ„V[GÙiGVžâ…þ¤v¨ãñvÇzÿæ›ä‡âëhšë;=ºÏp­Â?ôí¤fô”¾§k—ÍMd±vO¬Ê»;ÿÜ¡² S¬§ïq,é‹sjtªD1I§#_ÉVºmV^(lW¯¢%ÈdŒi}Ž cfêùZŠ¡o~é°ï@0¯X2Øœ1Òüµ9B—÷x$ËbEêž#zèW[Ÿ¸ú:i›kö ÅEí‹Îœ¾×ný|ÃVõí/ã%ùÓHämêï©c71­'FuʺCIsS9ì£'ÌÖaÞeé¡GËù+Vv äÓ/“ñüj^XÕse*¿íwŸ£©cž¥~ i`­szVrÁË&aSw åq (GBä*1f±³äDF<§§©8ºŒðW‰e¸Ñzæ.5à§òê9D\|ùaY"ÓtŸüc¸C§½Æþ¥{R.ÌÁxF²CÃn:˜ì˜ÉžÍ8€ŒŠ‹-× !h]pÛB_C"Ït]‘PßÊÜé,vMï[ÙÙU·ÈM™¦Õ%Z.,‘'ã ÇXŸ»ÞÛÖ︚ì’¯­Æc’ñ'ŸX]u:LÀ”-^Nžø°t•ò«»ÂTw<}FM»wïÙ%È„Ã(BK|aS „=##¡¤ñÚç¡]-ßâqÀ¬÷ÝÁ*hÿù陊ӿ‘°[·Qÿù ¢‚tú%_²d²{FŠ‘dš‹ÛIsJîgÇr ØŠw-ë'•jßÇËrž™ÜÐñCû1Dð–§ùEüO ¡D Ù—H©Þ\ i»?x£¦acüýtSÕ ºàwE=ƒµüM;½:I.žX¾Aÿ=¢Nâb*_æŠ Ìy‚õCAaR°Žk§Š–IQ½2Sr ˜´[ éÁ 9²Ž†ç’»K ¦«ùˆϳ9XXü‚è¾Àb”/ÊIÓµ!ƒ ÔnZAÁd<G‹¬™üúvnqP€Þ'eÿDrzw”™RaIÉé=•»ð[eŠŸ4ÖÃxÉzy|¦JaœÀnÑÚ‰ÞÉíÁé/—Áàí¹e« í|¨»G9T¥ýˆO\Ô$ð‰9ûu#/[‚©i…¦«¾RŸ¹®3ýÅQ+Õ|FõóØ:~alTnJzMÿ±CÝ­™A`rê´Ù×$kQz Å9¾›ßpÊ—ýt3ÀõŽNö£eÌ™¾B4®=‚„¯üñw8Xˆ7?„GYÛ æž”ø=Ü/ê)tÌó¢)2_?» IÍ/¨‡¬y{A¥Ì3b†- Fó›ï\•ÜÏP¶¶Šcìêì(›b¿Ụ wó¢éõcZñ%ãkpöIBÌòÊ„êf«64CÀRl ˆWAö·`F(¦^NˆÈž‹Ù×ÙëÚ°Çý5TiYhù[ûîÃñr‡Yvñûa±C.ܽžàm°Ä³Ã&¼¨•SÏëÊ¢Ã_rQµ¡©D–¶s O¯gÔáKx°b}…|«:t„2(åÒN¯ÙK]µG«?†×.~ýÒšëÌÙBlÛÊ*[ì9S¡3lÐÇ!.ŒÂÆFªMz]Åè?–™¾©xé¡è} Yœ+@kæY·¥c„ÿ«Öç¿¿ ÿdMÕ£®“2‡"^_w­šÃ# –i޽m†NÕ™øœ˜P9jŽ©g¯îõ™ôðCL-!½¢ÐÈÃí=¿%œôW††HDù° ¶Æ³Q·©u\Ñ/ýÂÔÞ¾—3" ¾`ºMãïNžgMìµ.ö¸‚™ŸD›àµ[ÆÐ îà *DîɸN¡²¯6ÐAËÍÕûe¡ƒ=à›„¸CŒYx¾Ÿn}×Ó¾ïm.Áˆúe.R,´üL@Ú¼îo¨ï>´­Ý¢—©ž³^Ý 7ChpÒXËF)0wи]Çl+Ië|0^£i᎗<ÉYï›KïsÀ¤á^B¨Ç4¯èßh4G­ ðÓn#b.ɪZžƒ;2ÎIÊÈÓ1ÃŽ Àx:qí-ÙÁ3‹ã!@1y|{•¤´Î{~!€“vìw¹‚î#èJ˜>m‰«‡öA=^¤_Åë5ª7¯@Ã"¿hå’w„UR Ö‘ø:ÕA‡o²ë±‡¯¿¦’}<>Qg¢Y°½­qà[Z g‰EZá`â×R&t;gµa=#¹; enÏ*p‘k ;ü? +ô2¾L¬u FÏûdå/nUmSVš¼=q‘v°,=ûX=Ù!vY>}ýÔ`*¯Ðïì þýM¨{AÐÈfA$¾¡°Íø"z¾×ß´º´š¤€»ýÛÃQm.q%$´\èÅ‚©$Wƒ¡­”æÄRæ&@xMSyNâþ§Ç åñh1>¬X4z Ô^ìÙ~ëøP/«íf@Û¤‘ºc•sÒýÄ0 Ž 'Ôó#‚¡6b¡µb Rý-{þ7!„üݦóAcÖÎix„giúحƧÈþg+äŸJOÂʘývá’ÎeyßQuûtÍX}­£ÙÀ*gÀwþÈ×ʉxñMfª'@P7TS™ƒ¡á3¦H«CÚçOˆO»Ž5+™ö[{^éÍ÷iìîb²#,–ÀJ3LŸ¤Ã•EÞ½7{ÄìÓ‹Ü"šœ+} 1{y'Vþ(­ÝË1½–`ò*,5Ù%_cu Hòµ}af¢N Š©â¾”8¸ë&¸-›‘s1Æ…Ÿ(þ¤E/é$Ô°e3f©„ñ¤O#êI#ÚñìÏÒ ÝF{#ä,DŸ?°GpW¯ÆÑœÎÆ8Øs¯]Ur¹ž1),I Á Gò[¾%uA5 Þ5©Ü¡‡è·ßwÑ9…¾À-®bÓQó€ ×Ê;þÖDþà8¤´´Çoß «â¹ÿjÑßqŒÍd,*¸D¬Ü`gôËÂ' )/±ÍI9µÜüy¿6b1erS ÝŸ u¬ìæçoD¦×Ä'Zt s\øOFº'„ˆc@B¡zR‚ý"Ôa'Ùa%pÏ6·*®’(E¿ð»Lõìvp.ÑŒÏvr%ˆV’¯Éá\B#ì7ÙOË1Bi©oG7„U?Ø•F]dƒH´ñ4¥Ÿx͇IÉê—Åù¨ê…@“úÝQäþn¤¼Ÿ¶fDKv£ê¯Ïœ2?VcÉF¿o?é¦ Z|«õpP˪=V=zXweÇkq÷Lˆ‚„Nszí€óºQ`éî¼ZªÏU¦·ÌC]øT³h!·>ÌÁ‰¬4K“+ŒyÒnZÝ?“œOû>7nÒz{gâÿt˜l â9iÜ×<̬,/ßÐi• <•Ö§‚uC)dµ€‘WÔÐ|í!V1r¬¢cMÕ0c;5“.#¢‰ÌÕ=Mèwg†Ó‘^Œ vŧ¼ Ú³ñft®ÚN=Ž“Obп¬Ø¸çð¸p95d>°ØX×ThÃ3hW}‰Þùqã>/Øma+àÄ:@‘':òA:bzV% Ú¥á…Rwã4‘èØÃJ˜ÒAõv4¢@É!ï ÓKµÆøs€Gì2¦Æ¢H9ƒ2²¼»ÇqÓ¿ÒO ûó~ÜVé>#Ž"0H¥›Vè<×óX–¹X+«²ÀÂ×òCXôwOÒoW¢` Ø—6“¹¡ÕQQ¦Ì㺖Jx³>°y]„•f~m …>I5 þô¶lk0BY'ºáFrâ¸znq-VF£Ïw‚C{|&Šöì%öÓ¼KˆIÉ[Ö}«s|ƒF³çyÑ yùðô7[˜¦•>†Åt¡I˜±Âæ‚@q¦ Zíou"SùvZ¤äBH©&`5ܶíW!ÈdÄ»VàNó‰ýÏ0?\º{Á8ƒ^­#UC7…[þŠÙ o˜ùÑ"!ìóŽHW‚9iGÿ$õriX)$˜z D‹ÞûÏ1ŽŠÔ·¦BU£DH¡MI¿‰¥òƒá³Ä—‚pó±œô+"wZ•ìöc¹’¸Ó½Wf×c¬ÊZp*Ûh›½{@s¨ßŸàw°ts—zM¦v÷u^ïvöcn†=6>Y7QIžeЊçù{Jm*JË m·„Ã=G%©†ñ—D™tlO9_@#ïzcŽ•¸¼¨Ì©#}¨¸j«Çe¤l0ž¸c´füFȶ#›Ÿ²? 5ƒÇk~ $`¢‰Ý e,´þèfª§k`M’[êÁ–Ú##J¶ø ;_?"!È*õ|Ñ­â£Å6ê»q9Pèx?š=~‰É’ð(óÁ7¤¹"ÕwêVÖVG'.z–&[CV8Ë Í,N Å…[^~8÷¥Px¥$íYŸýHO‡—…²JlÔ2ò!¤ 6ä¡‘µ0ÛUQU^a1#8Š×ø ¹ÿQ R­½¾8‚méÏH0”[Ûñ Ù®8Æ’žm_R_Èö;è$ߟUü¨úQFOá‡Å“ŽšóÃH¥ª³\gï«Èe‰d(‡§ *Õêpb±dx®Äò1CZAí'z^]Þ¼‰ÐQ¤Í#Ì󖶆,º€Úl,¸Œwˇܤ|éOÀƯÙþX·;ç÷·i‚åGQhÕ ?±•DÑ¢FézÈÏš8“·çÕïxÉÿ²6™âïúîÔ|êhw9 »úàM™ÉIF€_ Ÿ«É\êð´ý6;&9I*$ƒ þ+EÿS½³lø­%iÄN¸nÞ(–ó–ÁßîO¥³½‹X WQ¿L‘!½}U±ú’h±e‘8yï’ÇejõzƒÈ –S5›Ô2N¨·ã“´pàG(ÈZ[‹Ý ˆX’X¡Áf _U¦ú‚¬ç=µp¼·Š 3|/õ›+ z>Btòqu8ã ÄàŠFL_G 8 µÌS«¡Ï -|6JÎ2³.Šú ”tDs£Ìݧ?Ü (È °!|©^®îßꣴJêÑS힇?úðV®õUº¹¥Ç{üq`íÚ1ÙsØ„@͇7-G¾q’ô lš¬ãhL±Øw6̆q2ò‰î«‘L¤£ 9ý[€#V_yLK5QÄÏáb§àÑ«rVýÊ`0I0ÈÓ:¾¾.Õ»k}–á||:Puǹ2Åî+uèòǑԤÏ5-‡u~¬7h}FîcQa6ž<¼ç9 ò ½”éV¼*†2ýçÑœs=ÛA*Çñ™°âé/Pþð×l_¨S‹(× ÂÛ‘`{×à좂€cè,Æ÷»‘_,ûž#¯õ †%á#¯_û½W0ÑÒ\¥z2ð,°Ô@˜%Çc°L¾]|¬«4oIo°³*<×¥*!!éôë¸ÖL}·…R`IVŸ0T;²>ÕKcIc‰>®êÓ¼-Ýî‹5ó霓÷0wÄïes3„ŒoéøÖ¨c H½¥ åÐäW,,Œ¯üj®^ï0UΫ‘sà, Ä'jr)‘¬…ª<-£qèÝŽ ¹¼EÊÒ\šÛËr0´žã¸ñÖeÞˆ5j*Ñ›(•×.]¦÷{òEú ¥#ëAHf¿“”ã×Ǜݭ’ëÙ‚U%Aq’œ‡¯´Èx<Ý!€¨ Jè¶¡^ÕV~ÓÞtÈÚQseɳ°†f•©ÎŒ¾S¤ øëh5¹èÑuÌ‚¼Kl}ËQ”šº‹Àú7bЮx" úWâ9~vW{e{YóæÑ´0¦s³CW+®BS\š"&4ØÊÑÓm\âN «db®¯g?Mï|ÌÞ!ä%ùVï23)êNv-Ÿ“*:ˆ^8«(¼³"ÿÂØSޏJhpJû“Bò'ñ2:Ì«SÄ2qÞ« hÂ6Jáâj=W›íðnOD:ò%h×Wúvh^ a%d§™Õ…Y,{fº2¿ÏLd¯Éhu:táñر¦à[ŸtdôÀK¥Ãõg™«œ,/¸~Ð’‘;‹DiÁšÕ/©©˜3Ðè=#”: Ñ)òðòÄIÐid:ÞÛÜÂGœ#.{ÑŸŠm½f]ïûb# `W°NšGsÒ¢rjâ¾ÕÉ3°ÒeÈ( •ñ'ÞX ‚Ã> a28¹j!sËð &J’ÏmzLÚ+¿_ËæÊ†‘e÷×K®ç]ŒŽ:˜å£GQ­o,8L³MAEƒ‰¦AþàšÔ²kò[K úÓËÓ:ÜËì0‹Ã½@²‡k› ¤÷% %õ)ë œ»ö¯„‹Òæ'B©l%üäbÂp ©¨:?E%|‹” ïT³ã?m椹ùÞÀ~+ešæZ6<è]U^QsfSmÙÙ¤T¸R”Ï»QþŠÈÚR¹^$ñHÈ©,áö@c t2Ã_siHæ§f6éñÙüÆñ°6àÆ”m¡8iZÎDÞlÇ0d„ýPŸž„žéàÆ#ðÒëãQ¨³á²ê¦Ðv:@¢ÂMˆž%‡î~žÖ– VøšîÞ†r°² ÄÖ•Q¹Ô󥞥å^ [A „ÕûAr/ ŸCׇÈìÜb·朮X›‘I¬gNe÷õ« Øë¼Ù®F½:<†C÷M-ú hö‡%DXmu`YN½¶£(S”0×g޲ Bpž2ùa«=—SP3ÌŽ÷)ÌÒ‰=­“Ö-·^]{"'K»‚W/…€,gÐyCýÀ¦aûúV>'ê̓ŽTp#ºÙ\=a@et£©ŠÐž¸l6Ÿ9rÂáÄ{dÙ…×]æcé"·rï•ßHÑd€®C†yQÔ‰æélRKÚÎØµ‘ž"ºf%td3f8e£Ò/¡°rçç·³¦jM’yÀÛ @ã­Ð×G¹#zÜ`B6Œv&)§mªH~Ù°ü|ç7oˆƒŠÕDh Î „Ezß/6-ì/ñßH%¾( ´‹G¬ÌÍeòM“±-AðˆÉg¯gÇÅ[Õ{u›Š`áA'ö’ ç”±œ&OÈ p§¯÷ùN­-4çÔÂsòyq/öŽŠ˜LÝÖPfh(úá£8[Æ®/šwÎÅ÷ 2¥M™q®Ÿê_1J¶B~®UíŽâü&lÞ™·’7FËîŒbvLôÄêû™îbBð‘„Ö¼SEŒÝýýá™nzàŸîœW–ìÓ”wLÈ˜ÕØôÝ8š+Šœ6Ð]Ûnê)ÜQ"b[4¹a•Xĉ²­&'·kÏ®9.Ùï¼Ë8_-æ="ƹS?7;Dq_­¦3ü‘Ì+…‘‰†1ê—íjx´')moOyXkó9qpÙšÅå Žô©Ûö7žŒRÒw¿,×Ì ÐsåÁn²XiB¸‚Å€ŠÊõÜéÖ·qŽg¡ïÎ OM*r2ÜH`ïTV”íÒ8è\¾p)FãËO(SC6­& ’½UøQa¡„\3-¿º³/ÚŸ ÞÃ599[~ÕfFP¾”„Lü0ÄÄŸ7¥@IP]¶dg°¬bgÎ}lÅ%ØÝ]Z|op$¤æjÖ1¥GØtHQLý b‘œwƒ» 8|¢{.1úªA¶ †ï]¦ ¼àD@§9=@ÌŸ¿^ôªîD0q Ðxç~Êœ²kaæ=¹‘Uup´Aäwpp^Ò²ïtBÃÃ5ü‚·Pf…ýÜ4›%¿/?<¡B5q-cÛ§ø[QR|3æE­£6gJ5þcÖÜíyl–u(fBìg[}%øŸ ¾–â{ÎtºÊ-3[Í !S g?¡j›Äi ^æ›fŸg”÷ŠLSŠá7‹òInÍæpíØyøݹW:@À®oÖ.L[Í£Û¼ªJ!^’R>Ý ËCõcEþ‘ø¿~¦ƒµbóK¯ÇEtO ú»*Í`KÌú‡Õö2ÁðÅìÄôuìy¹‡«\Œci©j®®çw:RB|jW$eºñ¤¹^u‰Æ`¾°•>êŽÇZVkýnsÕý.§tv2[4X#›š‰šiÛ¨,ìëG,³énÐÅ‘6ï À`ñ6¡8L°C¿y0ÅN<6±'ÜdÂL'ZŽ~܆†ezаjk£rƒÃ;ÀÂÙlÒšÕ:aÜVŠ %lç«2Iup:rõóæ­Ìg d%b+ çï,–8·/롈€\5/1v}°\|õJV–ÂÌŸÇ’Æí¦Y m(Z­jÕ*p ¦·ØøTŒ[Þüwê¨yÑ–Ë®ïÄêßS…3ÂUÿl íÀ‡A^ ±® 3ED„ÉÄ =˜Hä¦YòÍÐîc ãRS¥‡bhÝ^9Ó¯[’ˆwmnºœ4~[‚,šb72Ôqk²Ô â䀨®Ú«¸Ço q¨‚rÅ 8Xo´À™”ÜÛÈí ª¼€Âi)Äé)8ñ_/ŠM,.¸Åç. èØü†M6ôM 9Ä|HTn÷9SàÚÓ?øaþÞa°¨¼3>ò´{g? 3KbU¢ÝÉsMqogPsuü‚¨YêûW ·ï&þ‡“c ESÐ?3»K˜>· â0Clo<ªƒð–M@(²ì}pF?(„7ñD×É £ÄhíÝ!;hÒ4:š†ZóQVŸà;ä²RKó¾…ým'©É.~8ƒ0‰Úõ9Æ’ҸɃ}(þ˜öp¬Rj²HÜ_µÒÆÌ°!Õë¢+Öõ¡WZ%Ÿe˜`ùãùÚQƒ»-—ÕêGúä\LõeµqA'ÕÛ¼æ"q¸T9‡K<ÎÞY­HI]»/¾_´"—…Ý ôèGWØýSåƒüZi®ú·®tèÔ Ð¹1bYi~cýTgd?W8¶§›/§¬îp^öm2&wÛ=ÎÍíºˆö˜›Ö Ðû¨tgÝ–Ož-1ÜfL]°µŠ„'r'õ{xóƒSU|4¨bŸÑ¬jçWž!¢ÐßÏÌ¡ÁµP‰|ñåÛÒª«ì¬5Ô® æ<…ÞÞl$ž`pˆ—( 7âCI¦k_ÅÈV™ÏWX¡ °¡¯xqÊž•÷ëCjv"„V‹ùJª9¸ú3{«×Ä݉qž~úv SÅ—ÈvûuÜׂáÚÁûe„‚ÍÔÙùÛŸõ¦L%™ÑEj*~|ƒ<î`MeœœŠ]_‚£QmŸ;³og^?þ&Ñ*)-$vŸvœÈ;ù,Ez±óyu‰[ê¾QíÔƒ[»*°C™åcvQH¹ÉnˆÛ–Œ¿7€‡“Ãõ›°ì£l/²˜T¹^vyzÞJÛæŒÔaëÂXïÙiCôÓ\[ gç¢!”SíBž–PäZF6é»7sèB­1I-C’<4Õ -™`ÖÝÁÛôý(ƒÏÐwb±wbAA“‹e}Ð(‡Öq½ß] L|Gг¾Ý¡qcˆ·ÛBÚ°“ôCÞøXpéÇzRߨüîq!"Ëç·-4¦€0“Ô½cM=ò*t&®ÌŸ„>Eð€„ÁI£u}vÊñ~ùBmó½5~×ZeYÂPÆa …$¿ ò7c‹1‹9#ºoþ —¸pÚf÷Eîûf ?¸i9*^KñµŸNÇÜ_Àòwâ7i¡XöKZ ÝûVǽÅéç&Ï-fçîrÍ»©e¤»¯yra¦å”6ª°²H±GPRÝ wöM5‹ß‚ïijƒê+Ëü B½Î»í—§‡jÛûO?i©ÝF¯{ÀŠžßcl³§óŠ'²À%ËÌp5Q.Zç e{Wô/âYé’¶‰iÞžïæ³JÇáèÆg)«EvšY.’r·”škPEÝRJî-‚VáC¶Iµë8ÄÙ°°W;3ŠÇðOyò}àò—·"1´OØ÷™f.¶éò ÿŸÐ/øOyzó%Tj9!ÜÝ’k"ŸñFÜíí¶µë3©] ×â•t_? å±’P{IÑêÖ-UüT,ùišbÝmfœ•{#WcØ8€n-S9‹ö°ä_4iŒ¢vi?ò—HÖb°ùùé&f‚®¬VªÝÄ€@„dÒÍR3¦íÍ›+7á@ÙcñÏfÝ*÷,ÄÂOqÎâA ÌÛŠ·pÉýc.AñPrpÔ‡ª;¥r©¤”£°ýk:5ª¯.Ø‘^ xµÿ°-€º3,‡ÈYª-_ŠÚÔu[¹·ˆU1ÞH*FÃú }|•®,˜õ%5}ò_umý(L#·Ž.Cèqe&" C¯÷Õ¢eɦ¸o'ç‰ì³_Q(pÃY@‡ÐMs}zkþ·Øc4]¶Xù®]Kw覫£W½Þ Ee»Œ×U9 æõcÇŸ), ÏŸ /Ú÷íBq…ÝÎ8v ¶ò’ ·š‡*ùY'f®OÖ¿n-ÎgWf0&…è £7 ï¢Y¾í¸_RVó¢È#!©¹¼u-_ÊH”ñ\_ò¸ ñ@3hN9€‘Ö/‹t½Š'“àã©[ Å,Sïjß‘…wÚ÷ç=ÿ ÷  Ö@VîkwÜ䥩?Û¿/!새oý¾O‘Ává¹ÞÇĽÉ ‡:AÊJ •0C³sŸ¼Ô›/÷¼ T~õìž5Çó‡sðïwýÈ i)ˆ*óÞ80Î~ÅgÃÅ.…dåRQPŽ?̤EÐPh¥C{&hµiz„¤­> “YÕ2íhª¶ìM¦^]a¯xjBnG^^ðN²lœ,Ÿ}Ñý1¾õ¤kéow·0±ŒºG“ز‰éå}븒Y¾×BG ÃÍjå_«ÎEvd)þøŸK±.Æ+ˆYÀ$r¹NL°[Ï̸à «rôÎWNY¹| OçÍÎ'˺ŒÌÎÓè ¬³?Q€hb DšÍwçÈhíÚ(ÅWfù>ŠJr_Îkxéìé÷øJ¼¢™¬"fU+ñ§É^ XmàpÀ°M¾„´¾çÌÇöÖ 4•sEêTüÒ?e¥ŸíØ;Ìhµ ¢jnÿ’]Jn– àᵦðÓ«·\¯²NCÎ+s½‘ÀÓ Sä* ³ÞnåûЩšî”,Tx[£õfî<#*ð@+UŒºíúv„~­å0Ú\Ä?˜º¨ŸAø€£•á£çG˜½Gî4J2_@V!ȓԛGÛ°º­SŸÌþÉ@GŽñn¿·rÚVg—ø‡ÜBh™!eƒ{F*I¥Iž”Ë'l…V×úÐÅ•¤ÁÏÚV^¶ƒã:þzÓ™7™¿ðBå…°Ö!¼ê7Ëù'˜c"5–PAØP½e ÐFíê“ã4•ÍsI8Ö,½NÍ.W¹ûPǗƾë•í¦ K¶ûžƒB†ž¶«áyx^I›»ó?ĵ!ʧ¬øÓ5èÎ<*©6"› EØ;4VUs£ÔßÍP ›sV?¿ü·Å 5Ezáj~X°1Äï®’ ì ½<ÇøF5h{ÏØÓ´GL»ÙJmÀÓÅÊXOpúËØ¨`jí—°k*äæãÔV®¸úkØÍ¼ô ¯¼ÚÁ¨2§nG• Ø«EͺƂtcñ²HžDÓ=¥eN€~:«£HÓBð°i$¹YB½c¨tøP{4ÀßÈTX`‹1¿÷™ÿ/c³öõ…_‹¸ŠâÕÜò£¡eÅÖ¹Ö‡äœ)l}hƒvÓªaQ©­YXÐЉø)±¸ endstream endobj 320 0 obj << /Length1 1420 /Length2 5888 /Length3 0 /Length 6851 /Filter /FlateDecode >> stream xÚwT“ÛÒ6Ò "U¤JDàPšHï½WB ”$$¡…"HoJïMºÒ{¥ ˆR•R¤¨(½|±œ{ï¹ÿ¿Ö÷­¬•ì=óÌÌ~ö<ó®7¼×ŒL…•a(;¸ ‰‹€d€ªúúÚ`ļ¼fœ üo;€×ŽÁ"PH™ÿ@¨bàÁ¦Á€ú($PÇÝ‚¥dÀ7e@  tëo #Tƒx `@}  ÇxUQho ÂÁG¨ó÷È‚oݺyãW8PÙŽA@!H >çw%T„B\€¦((ŽóþG ~9G-#*êéé)qÅŠ 0 7€žœ#ÐŽ…c<à0àOÊ@ˆ+ü5/ÐÌýí0EÙãÂìA ,¡g¿],aq¿Úûs'ŒÚ?Ï¡Ž„¢`?gRLR Á` Þ‚$;I ˜0¼0¸×/ÍEE(!Hàì´Ga?-) Eºƒ‚ý´þ‘êŽÁŠÿ¡ðßû_Ç{Á¡€É T6Ø©&¸õ°J™ÝSxeHŽl+õð¶˜ðPÁ}J\·úˆÍb¼iVæ”î3É.°Æ}§v·Ãì¹÷;>˵\uÞûÂ\k\v±çûÆ|8¸'h›ˆžX&«\•)ÆtqFÑuP)ºMyi}ÿªéüàÉÇT¢qS'¤Õ ­£ª$S™ã–Åç&¸f»>³É]–¿r>º>Zо‘bέ+×vˆ÷¬¤[èíïâ|¨ãñpåO(Ž^]¶CM‚¢Òb&ïÒœbÍt;MF¥MXwé¼@òaÁ¶ãòö¦õ5þÄŽ›Ž¶‰öÑàÏø#Nzô “J*&756ÆEÒØ«p€µèLCh½š+ÿÈ鬢ë=5Ö9¼ðÃ]7EÛêmO0ÿ ýxù³²åÏ~õ¼/b<ìC‰[þªJ¦_VbÎØð³ÊëáqÉšÙç³³’Nul5S(š¹Üp›^\œÆ‘Za~I´þS/Eá}¼ÄYÞN[› ß”[e2†!¿P;ã›^ðäx ,úºšV­Š÷t]Ü÷­ôZ´ÖëuEú•ã[]%¿,¼§’re?Ýh Žai‰à.Ÿ^ê ß»ZF #*1È-=Þ d~Óƒj%x”FoâO7‰Ótžì™ÑeY‹‘v©Þ¼njb…ÉçßZR t$\•Aƒ§&â Í‚L}>mByÌ-Ë ·èCî+oõ— •hý„§ùÑöåbk‰| ¥È­§Ÿ27wÅØÙv2å/qYµÙpÛ£l.Sá°(˜?îy8@ѰmÉÍõ…•x¹!+ãÕd{uWk'œXÀ»ÛnöŒ6x^>ª¥°§æ·÷r:+®ûNÒ¥Ö/uÕ`§»A%—ÈÛÁvmÍ™:Ï ¾¶mŽ1Åv^zÞ Ú‚Zñœ¿ÕÜ&ºé}è`Lud5m Éã#{àÇ€>Ù°Ÿ¸„œLغÙ]$ðë;kH“…vN›¸Re­ 1Þ79.É!ÒxkPàQoZ†J¨é£y¬øÛÇsoܶ‹Oÿ†h¦„P„Hب/m0’1Ìœô ƒ·„†§èG/Ð~¶¬¯ëG£2ÕN2K#HÚ¼úíßkÕ[qY›©ï¿tJ7é‹ô:¡^^fÞ¦§ÒͺH/ãoÏÄ£kvs2²´®YÌ®5ÈÂ$òòÍ i'%en,{0]‡ê>œ™¿½Lq;º’Oã ¼R`<:ïÙ­q뱓ZÇh7éÒñ…(ÂßÄɇoØ77È}sÒýñh”ǹÉeŽ×fוǚ.íÖ’pWPîÊgˆÞÀ¶™£T³·F`ŸwŒlLÈ܈GãÙS>vf/[íÉC?~É-÷‰ÐÙä ïèôßκµÔ_´p|ðµ~^A1qj¹Î,÷C꫉gúè¢ ìj¼y ºMѲÆÉñ’…ÙûäKÓ%¿àÜ0ÜêÔí¼ î›Ûn¸àûc¿†ÕáDªPiRS“ÑÛIÞWä2±ubNI†÷[ƒZèx;.>6Ïj YðQ‹Í-«|ªêŠš_ ñ–ù=AO_}òqd–Pˆdˆ¤¸ï©VôM n¼ »ÔE²AÀî ß_Pj¯W¤D_DˆËrÔªt7+sÂON®öîî]$æ.×…®¯Ú» ?^ÿ0C Ër06½8ö.˜¼Žf$çI3â€ÔdI‹Ý—aÉjdï“»£9ì><‡Zh³V‘HñÛ`ô¹#p!°€€ Ùg›¡bÖPdq_bç\~‹ó &í¹‡÷t¥ã}Á—Zº“Õ¾÷v?܉ðd¬gÓßÌ¿!Xßé!é'ò¬ðVÑ•ªn)Hký%øõt¿X©§b~ºA ¯6UÌCÏ£)¦E‹¥:ü"@ÛÎ*ñá=g._<ãçnoÈ}ÔºSÕCêåÁð‚Ñ/`YC˜'ƒ;ÃŽé=ÞYÍØÄ'[Û{iÝ© ©+Ë™zÙ€u_¢|”\â(mw¾væÜIY0ÃÖa$ÌøYu Ñ'ÙÀ*cs®`U´ÝÚ%ÙÃNU¢[ðu> +þ(@ޣأ"Å!– Qä—Ô֛݊ ú{CJ˹wÄK%9%îG Ùƒ¸gÑø ¾Jɽ‹¯GJŽêÇ?PV Ïëݱ¸ûÌî³Äíl«Aû ³‚ú˜sM@͵ÛÝz±m ‡OzãÌSªö3–€úa.ÇfZ}È‘3ïŒ.¸yOÏùlˆ2éLf$*DœkÈך Xi¶¼ÊŽoœ5¨àKbKÔ7+Õ‡ŠˆÞ"–íÖ¾°ñVŸÈSÔ`þAT—˜Äå½½”—ÛB.'•7 ÆÓ¯ú¡––h­ ïñ´]’sBå;ÕÞ(¯w N_S¼òkL_¤’Üó®@^QlɶX{¨ÓÀzõˆ\ˆ«Ý’kÅŒŸ´O­`Hyo¯-8keÏ*O¬ÏÀ,>*ÀÛúýi]‚Û³ŠC~²ö{Âw¯E³^ÍÞÔéh p`Œ÷cë9%÷ó˜±Øéù‰* I:3|f97öÌ3<»É,ù#ü:»LÒûyæ6ÌzFŠqõ½ýW T+VMõ÷Ç[ã4S I—è{Þ„¯\\ù..øÞéºeg–Ú†ôZÏö¨ïvöµFÈùþÁȦ3¶õ)½Y›˜q²Ž6OCKrç>þ,Ì®&nkŒù:V,ñþöt$·n$—JÕ~¼b>Îõ÷R?ß|ÊazƒLüX1ˆ’zgBy¬{ÞÛ…ÿá’Þ…æ·¸ç¹\$[æ± _?¯Qu°–º*2ŸÄš1ÝŠVo&.´4tžJžxM[¥µŽ^e¹Ñ"¿ÊMy_púŠNtdôj°º“™O8b<dVd¡w:"ém©ë‹ÙYJùæ;Õ€£(pR­‡XÈWà'ŧ:Ì&tü[W­jÚêÏÆÅmO=rÏÐHLùE} Ëgû"ŸïãÖÒR׫ÊkÄðYãßã‚ ‰Âr¦R8p½K׬ís»ôÕH¢œ"íMæaN¬»i;c6p:õK¦8šBs¨äç7ª‹JQQÝ’t½^zjoÚ•S#œvq¾3¡êE}É´ïñZSãO~8ˆÌ­™šÈœFÌÄ<{;ü4KÓ9ÙôñX3GYEruGÝê©0IÙiãç½KkA%øÉ+1d´ #<…*ϨõˆE#c?É4©0ï'æÞóh²g Ý¥@ÖXÛ@@ün’ozK5³DÎ|1ÿú7•šSazçÖçÍÙ=ÉÎ…‹»'Ïu¯V¸FÍ*ÍÙ(ÿµú¾ãnËhå 8•똚IyLG Úà[Å·jòÛ3 Ê§Ò®ÊøÉ½O™¤°6Yîå4òáø’6ô|ë~Êå&VUÍ¢K ïrªuÍûÊu)¾JÑu(ÏŒõÚÚ.·9ɈR_!º[û8àü̼ˆWðXŠýÞ‡•ÕÅ„©8¹þ£h4‰Sy@GϺg'.DQ2‡¨(Ðy6–Ýøc øÂ¼°{àvíNK–Sˆ_àÞ+œ–êÅVÿÑÕ4Q€Úâ ðy?•Þµt1¤LîI%{ÛÆÛSßW">)Ъ0—CУüpþb橪”©B_ßp4qLÞm:Cóù¾ÓAŠiëxÔŸÅkhŸ Ì_™+'+ÃÍ›¬ 2\x@¼^Î×NUÓdn­²~îçì¯7¬ôéKÙ+šMù®û¥Ž6œ+3šTÒv£q‡JØûW½4ÏEâB)i7Y BÓïF}uª\Ò`2›i}Gsƒ²Äf2]uŒµO¬Ë/øpÏ5ê FU ­>  \' x©¾f·uCµÂm§“/ôô6ã¦v~FÏX*)æÅ½é†W_Ÿ<1£l=â[0°+hÅÏoÇ**3íÇU‡.“W?h¶$ÛG‡Ží8“ç õ)çrÑñOZë/³¾§§¥¢cÚŸ‰½X>»”ùqJ)äZrƒÿ²ÕèuiÙ‹žl×ï`I9sîoTÉ;¨~Ë‹« œU½©éð¨9õè5» 푊ü-ž=Šï½›,<‚Rq{Ç}ŽÚ½kAT\ð2ÙµK#–Ý"%0ÿÍ3zêâQÁœx¹¡0Æ QiñÌíbÜ`Seib9Ýú“CÁOoëù‰{™3X17ׯgŠÙ" uŽ÷e}ööÌš%Ò…vä¼z\l·5F·@Þæ¼¹Ð[ðz©í¨.ßT^hošÅwøÑ´|Õ~xò%Cl–µâ:MaiÚÙF·UU `<ê~êÝlnè¼@Kx#©ï`/}ØìÛzÛh,×âE7ÿ:~nxÃÕÇãÅ£Nœ`Îà÷t(‘ZZõ [<µ,ÎylN8#kC‚“·¸¸L£äh+õâáì—¶ $ʆ9ü¡Ø×öÕ¼ü3'è!µi-n1>²Tat$µî–U„ÝÒ®ø5ywõãõÄJþM59ÙZ§ª®þÆãùIí•#1,g^Ãü‰rC¨fÂÓÞHhØØ–÷‘ÐÙ¥›ãªî«ªä.F­U1ÉÏbb‡m“·™2]ÜÊùŬgÛÓ àìYºk‰ ZÎÏŠÅ#hpòÁwêû1©Û—˜.ÓÛù›žsÉëΞ+ª­ê²gdðÕ íDäcîñˆQñX½õš@‹·m~¼cþ¤Ì-ˆ¬^Ø6|z L]ž`.ÝÓÛŠDc/rѨî»8Û)!…veM⢑ÙñbÞoC+™ƒ'ü®>_Ó]ÿ kat½Tšm1:; ­.ÓæÙŸ•=̬e NÈé,ë”×Þ[(Öéµýö:ñ¶€‰×Ö\üz,I—•ä°È”cÉuÊ5-ÖœIP1´Þÿe3³NáťЦ­ÀB7Ræž>GoÝÙº3 Y¹;ç9ïB~øwún—6ÎSÑ3bÚO‹¸*·”»ì6Z{óëN–]Êx]ð» tˆ?öS‚š‘ª„î½†ÙíUEõëßM#IÜ‹Î×gsvã•Ls}u¨Îwµî‘²“3ùÝHñ0WT“HÞ².È8-øšôü[|ÙǹuÍw½ô/ȈÓÍxÖ´õ÷½£ˆÒ¥™%Dõ9}«Û¯çÈÛJ±õ“Åáh‡¤û¯"òÖÈå쎒2sš/–rXÂ…®ÊÊÓdjN?x€—¦»iŠAó…ÖðD8ï-¿QZ¢¬/J‚è„¿J¾Ât½¿î{’ºkWùñjõEœ^˜ôp5(¥?Ü÷íèF›áUy·w+tI8ªdÃâ|y¯šÂ–n²¨)šE6«Ýòç t§B)•#†·VB•ýYžÜ£^ô¾O{CÞË&úe©9ÙóÇóO¤ )ÜT¦–¤Cƒ?­¨‘=!Šã°z´ë­–8ÙNájYds=Þ. ržìë)@¯m»@[Þ‰€@|!=ØÂ":Yfhnñ>e%¾Uo¥_˜?Ž>%'!îHF‰î?Æ ³Q{Q'íì 2 ÞlØÒzksh,·ËöÀ4™]¨v—LÝÆ'k=ª‚9[¢o®¸y›ŒÈõ^]ô¢–ßÎô'ý¡ù–ɯêNóW<4ml·ò­°‚ø»«ÅÄ<™^zò’¥CÔÓ g˜!yÑjÚv>°†™Ÿºõ÷Vñ'óŦ¼|úMÞ1ùwT ©ìŽ–šŠb„¨”=/ëæ^9Êã2©òÕ¥–9],1aräg‡úý6lÖfáiþ¥zTrž({œBÞe,&>xIê+\Õ£# Þ­3#¥ÏùŠ÷'β}C¾‰Ro0Ðìf©´ÿƒ°Øë©# =í.I¯¤¹.7pÕt¿hrÔ9i,z™Ë‘Çïsn·"È,ï‹‹f¿I1tƒ\·ªêÞ`å,Z<‰ÊzÁ#‰O¸¹k°m§—tN×Ñ?À£$ƒú gJkae$têNúù:™~ ï).8| ×,¢ª›_š2µU½Hôð¦Ü,½€¹XήÆÕ4ÎTáÌ, mC9F¾IˆzñxÅ{}¢ÿþèðvknÙ€ƒ´®&“ÍWPíµÀ Ô.¾È2èÛàB¦—ܲUh›4E·¶µýÇ„©ç§§X·0³²6LJR˜©m½>Ë;‘]­iqÀ%‡gõz0…èˆ0b]Š ¥ññ{_M d¤Ÿä3ÿå@º^4Oi®8'°í½í)ùF”{`Ñ×9­„ÎÊ#Ê2§SÚ¦IÝ´pµwïe6HuÝ=l¶ÎÛµ½rAØ$—_¡Ppè˜j¤äsŸ˜d¸cëÚV‹¯¶ˆ¤ûK[c£üƒ‰‡¶ßŸ¦÷6¬óÿ 8HdIª½_4üI¾ÎI)©)h«øÆDC¿„f¡3àl|ÐaéѺÃ~jžIrFÔ&Ù¦…•4Ç}ÑíÚd°Òx7¹QÕ©t4ðt*ýÅÞ/µ~Írs0{¬~¹¡G»yKêðÆ‰¶ÙKž°˜³!ïŒÉ°¯ ´’шæÕs ¨c¶5‹ ßôüÎY™æWt†ë<×û")¯©É”EÑ…ð S0AX–2ô½Nûz¹môRŽ9^ÁeÂ&@[bÖ7½ø?·H ©+Œ¤[9DH=$9³±vr{j­õŒCA[‚‡ º_’Þ 5*)ÀE„§PÏF¯©²V°Ò’&?é pé§Ûê¾çÏj"t™Ç£•¬V˜6å:Oyæx´‘»á ¿øI͉YÜܯÀçV8MZòuó…uœ¯Žýp©ˆê?älŸ}Wv¥k¨p³×%ÑÂK|Ï,ëÙÅ}^=;<¹)~´N%;núé|áék$¢?~uY• RžÁ÷Qÿ~¤&̃ÂÀÇg“wJØ*z)[8U(§™A¥Ä1•®÷¨rÈ_-œcý' œ“¼MáÞPŸ“9¢D,1ŠÚc/ë*Ù`XÌ£¦ 3O{Åõø,x©ÎÈ·<¹Bÿa´ E‹.ì‡WùîÓ6eÉH80öRm×»ç[±}4{y—As8hÕà>©DS*⦑¾ƒ ‡×pöp,2]ÏcãSºYóá²÷øÛâIýZz}­±ŒÒ {ù|ëØ»÷|Ö{™Ük¥(HòY;ÈüBsi&S¼6§¿ÚüCâM– endstream endobj 322 0 obj << /Length1 1420 /Length2 5888 /Length3 0 /Length 6852 /Filter /FlateDecode >> stream xÚuT“kÓ-("DAŠJ‡Ð”¡7iR¤wAš„$$AH ¤7Þ{•"M8€4AŠ(H‘^Dzïˆáå|ç?ß½kÝ»²VòÎÌž™g?³ç '«ž!¿"mSE£pü !ià}mmu0PHHD@HHÀÉi„ÄÙÃþö8Â0X$%ý¿÷100ïSãð@m4 ¨ál‰AâÒ i!! °Ôß@4F¨ vABÚ@ 4 †pÞG;ºcpßçïG „’’’àû•Tt€a0 ¨ Æ!`øŽ°=Ð AÂpîÿ*Á%‹Àá¥]]]ÀX4.ÇÍtEâ@†qA?)uÀ°?Ôœ@#û;`ˆ¶Å¹‚10 Þa„ÀPX|Š3 Ãñ݆êZ@]Gê7Xë7€øçr€ ÐÊýÉþY‰ú• †@ÐŽ`”;Ú"ía@]U-œŽFAÁöX4>ìFÚƒmð€_GUõ`<Ã?ü° Ò‡À"írüYÍ*(è}´ƒ …Ã~žO‰Að÷î.øg¸OPhW”çß–-µýIêì(hŒB:9ÃÔ•ÿ`ð.À?>8 ’”‘œ€07Bðg#wGد è§ÏÁÛÓí´ÅÓ€y#maø€'ìâ0Î0oÏÿø·€P$´Á‘(À?Õñn˜ío? Ò h.„—(ôóóŸ'K¼Â h”½û?ð_#TÓSÔ12åýCù?A%%´Г_ä‚„„Åøï×ùÏ üÍþ—WŒüs:¡*ª£lÑø:¿Yà¯ïo&.¤Áõgo¸ÿn¡ƒÆ äúGÿBbBüèÿ{ ~¥üßÄÿ³ÊÿSÿÿ}"Ug{û_q®ß€ÿ#v@Ú»ÿAàíŒÃ/‡6¿"¨ÿ†šÀ~o´6 Štvøï¨:Œ_E/t~¨€èo?«ŠtƒAõ8â·˜þž¾‡=ÓCc‘?_<ø,!¡ÿŠáwòÿrÁâgö;Æâ÷k¼?m~Õþ} ý¹“Âbâ@0và%·Ä€ž üòBan¿4@¡qø ž³7Ðü´˜$PÐ?4ô§ð¯Úg ßü—(ðÿ¶-? æƒÆGЙ@»ªÀÆïŠ ®ü‹}²W¶“¾› ó÷åY‘à:T1LO›Ð,VRµ²kÑQrúž13ºï¹PÍòÚ]ô?‹ê œÅæÅÈÅ7ÂϱžGŒl#7ê²M”˜¥ 1zLá­¤òPx‡!ç ¯»Uíc±®wn©Jh5ê4·V¥iÝf”z¸1g€«·é6Z; ½›9ç0ÿÜ",Q'…MS¶ùãZN1ÛÕÓ=EùŽém¸Ÿ†‹ÿâG0ŽRE¦›QYôjùéò³ÌB—õ*O5êû· µ³Y hÝ÷sâê·i-ÎØ¯šÚ¥…!bë´7šrR–óhßÄc±¶ÉÄÌÏl!ðgžPÙiUßæúÑžAš£ñ+³= ö×Zûßp¥±{!J‹ö|ž~P4 ·Kz1ã0É‚Pg¿£âq…];ªW%ʺetäí%5I#Çce8ZÿªhgXY46Uoë·<>[TW_€©ìŸt%àÆ‹ NϤûJ$Þ`¥â®ÆÅÇÑÌmEy ZÕÊÇF!H3Ò®‘ `éB¿/­íI8¹à(®+¹/YX6©Yì'³]¸u-¨Ê£—ø´¹¿½7Ò|ý{²d•Ñ¡b¨¨mù’u}F^ï ]mæÞ¤f¸ù=ŽQR­†‚;k§ÃðäáÅÀÀ;â·îÈíל(s¥zÇH2=‚®tóe›œÅ+asþb›hGKU¨>üXÏz|«ß´Ös‰Õ îUær0òôot‰¡,ûXÙ‘¥HºT3™îJp)¥+3YÐæu„-Ì–Ñü!^båJO"¥Rƒ©Ü0^ï'÷‰(¿Ôd¸‘X ©"Øúåæê6•z¢LÔhf,A6×òüÐKüÕ¢Ê1¨s¾Ë’iœåîÉ7}gä+<†™ 8(ÛdMïǬMìõò0:&Íjà„92º%õbŽþ<®ð¶.¶ô`ª¢ îsúó¢‰Ðä ¢â«Ff/÷cæWæ2O›ÏâïL ¡µr.Ã% %÷èÆt¤Û7Ùwd¾œÝ ½:6JÖú>×–I.E¬éà×Kêª6O·aô™¤¡(…iGeK˜¡‡¾ŒwJ-cThvk0íz 3a‘(.÷zY™ÔÛbyßIuE´ôþ#ÊK—-ìšÃ§‡+=©UÊ×'Øeœô¬’0“íæ¦LI5޵øMä?Ù}óh‡ªŒ÷2 qµñŽËvzjªÊKŠ X‰€òpŠ+NÖ?kEsr—™© Ò¤Î>«¸ûnÝîZ=©÷I –>ÕamÒ÷t˜kÃ&*™ `ªcDü+Yâ׆ÐÔr$qãðO´ð'‚OHtšÅè™/õš8&áK¯ú. ¸^ðŠÛÔm·1vTìúô¾Ïè5/åÏYkyÑ_ØôI“µ¢ ZÞ–døÅ¤¯úÌéB1¸ªO$$–šFy“ä²pq¦ü|GÏoWÌ‘ XZfæ}Xs¿¹öÝ`g\Æ©ö¹~„㙄ËÉðÚ󦦚s=O÷*µºšÛjin½øXl²ïæÆîå;DÕa×<&srëR×£D!uÆy©ûíNt×ÁdºAZÛ†Ž¹‚t¶ð² -½Ï ›—ÄJà²æ-ËÄž)FDÿ…–œÒE§Ò©²8<}ÊôÉ›”UD>OƒR7Ônlx*:ë]ºL¦j®˜Š&ɇàq_Upqì ÷‹Ô­›KGO-©kä®èî,Œ©Š®•pÖïÿBt¥ _PrdQ[dØŽèj†€'”¬½—€ûÿØí|¼±TëBz°Pm´‹H…£².j6rú˜8§Ÿè ùƒžP€Ä÷>[«¬ìOÊ¥•·N¸¿‘¸n„¹|CäÆ-ë ‹Úü¨‘žÎʃ ò ïK=ðNsW¾³IŸ{¦ŽææûZ¡>ŸáyBúHAXŽ¥ÔOÙ5$õšåCåiô!ä‘äã{Ñêwy¦gà1ߦÍê-ê?âVß3ªv²vôÌ'ÑÐMŽ‹kHù TйÇ;бûMjàä=†Ý{'ås`™{kç#µRls߯‡°W™s7ð`1m“øBËpXäÁ'z{±4 ÓDt»BÚî¥^Œ›Yz”㧘c¥¹¿*ZZHïc :½¿˜­†Ah ³Ã(fŒ“vOGnP%¿$Vµÿ*xàpý¦™Ø$IM g{_Aì-ÙƒÙu;µ„ -M­ªc—ƒÉGÞ«}ËTOUèzG=&Ý÷Ï Ùw¾0äße4Êò¥C\J9.t ØvZŠØ´f©Ph7N:] ¢h æŠ1 07sÊ÷š×’.芩/K¯»ëYh§®ù놮[ Y(\ü^ª3)ñrîɸ¾B眂‘&C…}rÃRЇ‘—ñg î‡èj8¡ôN™Ê6Bh¤bV}ãÙ&ߺÄ{ÖÜÇ Ü¯„Æí'\ØŒ…#¯­IÌžÛPJ?Ýçæ×†¶aN–_Þ ÷.XÝÕ.æ)S»ÓhñÞ~†ÚËç!Ë´øBŠËÞbÕŒ=¤ L_ÎË䋿l.ÞA¾Ö`äŽúqΗ­ kRP6t–è6ûTü| “õ–%.Œy»¡}D_¡²1”¿ÒÂÚž0Wz)hžÃ¦àÛkÀ³¡žù[}é ú&ÁyA2Eº®J±¨¢ÀöŒriQU«v•GcÔŸ±ƒH :«…Èaã×Ô:uFñ­°—;ë Ïgxqeùöx ÄD´†P¾NŸnZeÇÇË„œ ‚ÞÇ‘¨æ<9²‹^´Ú¡Ð¡Ù[–0Ûž¸Î#Fâ„Ó¯pˆêA¶*NÕÝæÒˆo#Î"4xP€+kІ–ñˆÀ¦Á‘Ç%³i…k±‘b®ÇTñ÷=Þ”ú,I³8«N •샷0ýÝf录:-ÈBQ½Ÿ‰ãïb «ņÑ!¿“Œ”ê:¹$ÒM,n¹ Ò:DÃSYgëþù¥R~^`‰âê¢ä Es¶¸]\ —nþn"1o¾ÿÐ-"‰"÷¡ÜÈŸ—(±÷ x³s•ø˜‹)øõ1%úÒÕ=Ï¿(¾á  bþÅË/:ö=µa [¢FìÑCo#I#͹hÚ ìW½¨êk·n!ÜXÏÊž¹=•ÿÁ¦§vS7@ÅËÝã…f¿RÆi‘þ&Gb¤áجgÁÆ^‡TðÊâÙ°B9qõº¬#î‹U=»“ÉŒõmbƒ0¥zn%ö1Ɖþ·äè‘Ð{V?¾0¥ï‚AdÛ7 Ô–üÓ’J)ôïn‘O?Ó DB±êµIäp›Wô/{Ül)åvp‚ôßÄeÂÞ„e;ó÷r]°¿Pø|›>8#4(ã­võ#†ÎÜÁ®x@ ÓåáNõ7K‡{†åÌëqæ>\’óOî$5(ó#mÒüÎH9ëLt’ÓêÇË(Î’–ŠˆÐsŠh2Føš$d®”VÙ•øxãÊð}I‹„ c ZabyM›W…pº¬ªÓ³!˜ˆô[d`‘¸ÞIJøºUÙΪºoá2aÑÆÇÊ©Ûû«^$Ç `ìÍ¢kƒO±meâ›LºѶ¶›öû- 1ÍêÚ™n‘í¹¦b²ÖþM@nõK¹6Ù+!nëã&ü£!ë윥š«etå%¤…W‘w]¶ º•<=ßê9~%ÕVzÒNvbܼ+»ã’ómû²ûÉîydƆÇÈË«wø™y“&9o|VGrgmN²å°Ñ&ƒ¥!³ìZ±&Á$Ìþû‘ê{‚凮Û)oîXMˆ§žtÒx‡†KécdÇ-ÔTž‡˜®w<º´×øtM%ývš©W§²,¸l½bô AïªÁÌRC8³(µN›WÃæ CÓºDÿ,|XÎa¸`k|¥¿øõŽ@2ùp3Aʘoè›go›®GÒû——Z«ÔöJó9‡›ø™eDõ׌û¯K6ÎSñëYiï¯Â.ÞV–ù:´—‚ ®t.^Æ üà?bdgµmÚ'¦ˆ˜%ø6Z´Ùxyr»X`þéIˆõ ¿=ås:.K;¢i§|Êö ú ”Ÿ ­Âû Kò¶­1CËQ»ñ”œ¼TéYå³7SbBÆUBaz’;ES˜M ¬‰÷W®IftUó& OÌÖv¯Mò™Öh/\/«ofñ¥/ðæáµ)Où } «bßtù\zA/¶ëù†JÖ`ÜĪa¡‰8öè À•™Ðûö˜1ðy[-,UL%:Tñƒµ^Ê¿é“ Â“à„JÇQî¤%®¹§LîlC‹ùcôi;^Øæ¶Üüb>“×Í &qWÌ"þRC‰°ç@SzÖ¶Gæ.èYU„O˜Zð*ÝÍB¹v²y+ÈòûŽÓ"}øÖŠ_¹¿VLØé‚r+N©å¶fC6†š¼·–LZ´ù'[4VS<Ë-?æ»fæ Èú–$Ω@.SŽWœ (-oˆ‰Ä$X],½ePÍ^˜lÄ›¯¨ú±‡*æ¯*]Ás7&žæaÚm°¿Qä³ò"üL|Ãþ ~‘ª ~i²s¢Ö^×­¬ðœÎ䂤PÞœiï>Ú‘¿7cÑNY’þÒÅûè~á×F†ÒIâZÐYÕ˜ó¨' Ÿf²5Øi·v,ž/zÍ÷ñÖ¼/˾W›>+€¶…$¬¨hgð¥äÑ0ÓrûmJA=\çD'.“À³gÇ€ R¶<Ý?.ÞRW¸èÔ|oë–°5 „Kž—J8ç$8\>ë )]•”©ù’ïd6' ½¢|} FâU³»"ÓA¿µš®¦MÐÖ·Iªýê¡T(&*KÝöÂÊ%fôÉ\ËO¦«ç›d´‘m y ¿@ô’ ÿGðX«¾ô›Dð! û®½ƒàÁµ·Q­÷cÉ>IEËW‹PóÁ¢“LâsŸ®•k®cì-Ò¾äêˆ7×Y[+n>îºuyí™6n '”ö S‘ùuƒÄ,gþ©I§].#u/}eí¾ý•Òí©_¨¡ÿ.èÒd­@$šÑÑäô·Áô¡Z¯?÷ü¤•l8ù’Ãïý¨ÕÅ”È<,%¿Tw[+¼ª²ùÛÌÿÝq endstream endobj 324 0 obj << /Length1 2625 /Length2 23371 /Length3 0 /Length 24844 /Filter /FlateDecode >> stream xÚŒ÷T”mÛ ÓÒ Cwwww§ôPCw‡(Ò-ÝÝ ÝÝHw§HJìñyCßïÿ×Ú{±Öpg]ÇY×=CIª¢Î(j2Jì]Y™XøâŠj¬,v&6DJJ k[à¿Åˆ”Z@'gk=ß_âN@°LÂÄl§²ȹÚXÙ¬\|¬Ü|,,6Þÿ‚œø&nÖæE&€ÈèŒH)rðt²¶´róŸG-€•——›áw€¨ÐÉÚÌÄ hâb´Ÿhfb P™Y]<ÿ'€•‹‹3³»»;“‰3ÈÉRˆ–àníbP:Ü€æ€ß ”Lì€ÿÊŒ ‘ aeíü/¹:ÈÂÅÝÄ  l­Í€öÎ`W{s |8@]V ì´ÿ—±Â¿ ÿ® €•‰õ¿áþíý;µý?Î&ff ;{Ok{K€…µ- ,¥ÀäâáÂ0±7ÿmhbë û›¸™XÛš˜‚ þanU˜€üwzÎfNÖ.ÎLÎÖ¶¿Sdþ\eI{sqÐÞÅñ7? k' ¸ìžÌÿêì{»½÷¿…µ½¹Åï$Ì]˜5í­]²ÿ6‹ÿÈ,.Nn^vÐô0³bþ^ÃÓø’õ·œ¯·È`NèkmÿCôv6q\œ\¾Þ+þ!²²Ì­Í\¦@Kk{Ä?ÑÁb Å¿0¸ùNÖ}ðì±X~ÿý÷é=x¼ÌAö¶žÌÿé/³²ª„‚ž4ý¿2þ¯NL äðfä`0²q²X7øÁ÷Ãü·ÿIþ©Š‰õ¿ÉýQÖÞàýWàâý'·Í¿W†ð¿'(À³ Ðü}N3ðëÿçøÇåÿßÜÿŽòÿ6úÿ—”«­í?jšôÿ?j;k[Ï€GÙռРðrØÿ_Smà¿VYhníj÷µ².&àõµ·´ýo­¥¬=€æ*Ö.fVÿš¡ÿtÞÖÚ¨r¶þ}ÙÁ û?:ð™}_(Îà^ý£‚÷é”´7™ÿ^<6N.€‰““‰'"¸õ`Ä ðfo¨9ÐãŸÑ03Ùƒ\À.pz¾ âïŽrq˜E‹þ…¸Ìb7€Yüâ0KüA¼fÉÿ"n³ÔÄ `–þƒØÌ2;€Yöâ0ËýA`.ò˜‹Âæ¢ø¹(ýA`.ÊÿE<`.*˜‹êæ¢ö¹¨ÿA`.˜‹ææ¢õ¹hÿA`.:˜‹î/˜‹Þö3ùƒÀ~¦ØÏ쿈¬3Ù‚‡â?Žß;»?þ¿§…Ùü¿LÑdkkâô—8yàŸ `‹Mï ØÀ”‰³ÕŸ8¿Ef¶&vÅ—ÍâGµø rü†Öã?“ý7tûCƒõ·Àöþ·9ÈõoÖ`Ë¿ 8þzà¾Xy:Xíÿ²Ëþ:Ÿœ§Í_\õApimÿ‚àºÿ•)ø:eþ™ìj^ÿôàÜAÈ€Aÿ£'ãðG æ~çÚÛ-þƒõßR§ÿ阵ø>™ÿ\ Ç?+÷¹ÿ¹,þ;7l¿…  ¹©íÿÃÎñGñ¿'±óþ[ó¿bÖßü« ¬àª:ÿ)Åotû«ìœ`sgð›ë8ƒ?áÀW=³‹•ð¯ù—ÃÅô—¸¼®ApgÜþ‚`šîMØû¯ÃØÀá=ÿ‚à2xý©%8’Ðé_GýÏuiæê®¼Ë?/4ðàÿÿó¥ôš!~_™ñ‡ØÔ†´ßW‹º3îMÎRîi§Ð2zwêp}D}“H[•´át+š8܃¾º#Is#²Lòì}ÒRÿ&¬5Aµí—Ï“QœÚô^âÒÎÀdþ‰h]?Â;F ‘}ŸgG­ÀÐ-r”9Ž®<¨*_1ïÝû¤=êúKWÆ>.ì©îWqÉ#=•Î0FiFÍQæšfÎã‘Á¹0ÁÓa\z ÍÝÜÎbdO¾’ÈÅÑ#úžF±xëm²E?Ì{­•k°9wáSàëáAß`ŒMSy‹&Éá.z¬,y´d£0$¯2¢3²¥WY«EØ7õÖ¸}ÿƺ›“¡&ÀÜM¨)iÂ2r"SÆ®j3ŠÀt©aÿ$:üf!¶Ö~«Õma“ün™w¦î0‡¢kuÐÜíý«Þqmxd€ñîcrëýpÓÈN·¯v‘p¿ð;KwV:I+ýðÕ¾t¢dØR—q¨.m ,:ò["ϬI¨€wЕØ#ëv> ‹l/䨻sΟ«hߊ†K¥o›somÝ1Þ¿s)½šv&_^æã[±Kg|¤ÉM—ìþœ»C­Ê_ l˜ .e¾Ü¬Àa’(ñ$Qˆßæ\º¤(à•îÝ[¬7ò´yàÍc:תÐl‹åÌS%Ý=`?l íã½5?ܾ-+3Ä>i=\V¸ŽÞÒàÉýüM- »ËY9UZ4ªðng¾Á”üLCÌÔ®)M[Cðqg¼«ðÉ¡TV‚’ºà»b¿ü‘@˜Ï÷÷K½øÕ"8ŸošØj;”ïi 3Ð×¢)3öW É:†›´®^ÄÕ5î¿’{mBô.ÎŒïŽNïPxÛVqô5ø9#S¡mã¨HwÒ®7i"Ã_,›×5ÝEë—ßÕ¤Ï 7N‡Æ`ÄÈßt°³` MœÊòK¨3Ö è±^²l¶½2EIbš+ j×±nBË ºt!)6$„?i#Lí?q%fÏxHçªÚ–¦…ãïZWQ.|É"]œFT`ƒÀ­ÑÏJ{ûs§ÀŸ–4Ò"T'Þìðm<ÄŽÀ<5ÖPmLÒ•¦ »d.i#_Í[ê·›/S¢¨rhUL°ßûjÅå& ä\J!¨z½¹áb¹jɵ¦z§ºNædæ ®#˜KFP¥-Ýɤ8¿Ä¸_©¢ð©z © LL$#!Mû5 d³²”øÀ§¾ ´Ù]Ô7=,e¬[]®ç„lTÀ74TW§ ã _s'à åÀê'~»æñPà`'ºt™¼—XFCáçJmiöu’we=bÿ•¦)k†S/ãRQ;=ë{ë‰G¼ðâgFLi°áx`ÐںϡÌáFªŸnt'Ûúµú¢®ê {`ß,‚€eƒ¨ì‡¢Üƒb¶.KùXŒ›7×Þ—ƒû^”S¶ãp;¾àô—L]y¦Uy¼ãaÚn\éyo“OâzbÒYˆÄDž+4¨áòÔ{Ù”Yfµ’+¹dU((l=–73&ànêwáÌLJ#î àñåÇ©Ø(-¿˜Vy…ÝÉá§2¸‚üËÙúð¼Ö]ãSsÂæ¸èÒÚè Qú{Pʦ_y;'Š7„ûòä¿à˜ÑâNÞm\Zf»TP —ìDOöýüe§qâÞ‘°ßN‘c®d Þœž?±¬|»0)R ÍæArÈãHª`>S¹C:ñÛeÕbŽ©ùùxFÊß­› òz 8{˜º  ì«èœÆvßZßb{*íÝT= ËZ¢¹æŠÙKÁáò5°¢Â/%™Ã— yrÝu-¯ˆ¤PŠCðì9Õ¸S•0žÌVWeI{Ýóã QÇïÒŒ=·Ë>Y)=Ö/xï*cPSX¡ÜÌæí°a­ »¨†ÈOíúDš´ç?VàåWØ­šR²|O¥{4N;yÓ—›°‘ÀlqÓ›iÛA©"É–ËG¬%J«.¦À¼/PŠsΉY*ž%š·q—iË_é=Ú…DCÞº¤k/O‘Âã­¶ŠÛݧK³k¤} e*úâ/ïRD2Â\˜MÖ~»ñò.®ÅsWñð•+ ,§Æ°ãÎÄ%‹^D™õ$—9BêŠäK#»'1yꎚ¢ââ”t¿Þóš>´]ùk«×d¤”?†méCYœP%fIK,F[ìïm,̪úЊ5>CîEàzÑ…N3NAG›TÔ ti‡J&Óa‡Ìt€Ç=L!ž‘þ„ŽÖ§·¸ƒ×?UsªP4T^oÜ‚s# ñ/ËÁNþV Í ®8W±!‘Æô¶Þðw@Õ»…X# \.v™ ·i/|Íql£êìq¬½2VbºÒÝÁ(ŒªEúAS‡€üÞk¥cªì8‡ZZüK¹íãŸfQQ0*•™”³6­ÚyxʈƒO{?†Zf nŠIm>ÊKÝkäšþJ‰û¦mKckYÙ¹l:SµFÚ|X:Ÿ4?j°õü`¡ʊ[=æ(ãÝvÔ*h.+Ä;~8ûêlnê× ÿ¦"ï ŸoáB–þûè·—¥NHá_KƒÝ”$¾E(JsóRÈ*X¿P%ˆ.YnÙÛryB†É!ÄH)7üGØ;QÏWŽÅqû˜à¿>cû•ê á^wo±žúû„öòÔ^0U×W–@yÀ >v³5‚õ÷WÓ,‚qDžÁ>/Q™‚ùlvHDO¦ú9-Ûk.¬¢®¥™È¢“LúyêKl¦î_èÍ.%ùçJ@<«wcµkHýd©¤Ä~»eüôÜùîøºÛÒˆ†kœ’•㫇 Øï²V[’¤î¶.hˆE‘m›0§ÏYWy\™®]éÏw¾“=^ ñ_2ø{ ×OS"‚Úª6r< ‡XRœƒÞ. ách³JyLžÏ&o,_ìâ¢<´²é¹Õ.ŽPèS3$R3±í<ñ¨3ÊYÔÍä«åT,ª‚ÙØ?_ÁºƒÝVÖ@è_ü‹Ù&?t³ÿ{.©ïºñ—ó *íwC¥» ª:-p2Ehc.²ùíþCóLßuß]‰,Ùc—9%¡ý<µ_ ìGù¦ü´ã"ª˨€bŸ‘, k´Žchºb‰ßà—…3ÃeL\=uV,/¶~Éìkì^%©ŠkFúrhÛ©ê÷‘ ì«ÿ,m×ÇÆÌ‡†‚ÌQüoÔñ©‘ [nøv]`äjlDޱ<Êê‚%iX¤Gø'Z±WT¡¢K¿|Рn¹ÌBçψu$´_Úu t±UgMÐépŽ$#:Æ-ö9Î ïFLy±Š«Ów½ËSaíõ#C©³#±—É%).„$ÚÒ\Í6PÀ·‡U÷˜í”8å¹!µŸá>´½+Kë&á2I›z-³U®Qš¾ý}½?‹á°4Ó¤£Iº‰§Ç¤s²ðsº{Å³Ùøò”‡f’UͧĿÒžɾ' P‡c½_϶¾µBÓWý¨`UªË¸ä§îôâi PTÑ•.™Ÿâ'æ…‰z÷¦dW'"T„3 ~mcš†ñ>#N)³7¸iXBÆ&ì+úŽ3¶vÇjâ>SÐòÔBUUîä‡äÊeÛ>~ª¤*rƒå´êÀXZ‹é])¯tã¦Á&á¯;²f"ê2TI¯°íñç0@7{ÌÀL© w;Z5¥ìý×&¢¤žží;|W³ôXYf¤y—°IA¦“Š/ Ÿ·˜-|Ù7’ÒOF wȤK’ÞVP[(:O¿™#ÑÑÖ|ö}ºmhjÖíkˆ2D ˜[¤´$•ùv¡,ó ?<MbôÐÁV;ñÃ?n[®Ù-µ6ðý*9"Å÷7¥h+ÔâVœ©!êxÏDmg£ÕÝW" x™i&åõŒX©¢þfálAÚõŠ4?bàœ šŠÈWŒ§ìu½mVŒÙ}l¡Üˆ*[©emsžý7kH÷êŸrofUzFN½¿|…“¬J¹œp094D \²:QþmœÙtž¾ãpÿˆ\Áãê¹Jáô#ií:ÑÑÂ×̱—ž³ÛÓôyíý|æ#á}×)ª&Cä7—Ú}k>™9ß”CûVh*€ÊGDRZß^§àp„Ê]7û¥ù>m]õyg…¦ËèPÆhž¹-uA£LyíâmŽŠEyR(il77² âUêœl ·ÛaÉÅßã0β‡ÜYï,ʈ¬ÆZL?hVc:I¿yv£´c Wßé‘hûnëùD‚Ç€óY÷fA¼®¢ßî¨Á°±JÚ•ÓH:ýÍ}ÃwÖÂ_h.Ì‘sH/›QcÛ—ˆ›ŸkX+ì?ý’òu€£ß·(µäµ¢ z,î‡|/r¡ø`¼d8Ó"-ËÏY—ï>xÒ³+ëäx!ZÌn!´¡ûÖÚµ< gm·÷GÇôÅé †®ú‘ÄÍ-_LÔ²9ñµè5@‚¨Ë[äÆÒX,ÚíV“ÒüáV«íI^ý¹"×Wxõ<^ùxü·}ò%&:»î–à ÊÁúÛP„ŽƒÁyž0²4I¯í6èœ E¥²]f ¾>VÄ]q^Û˜š“=±îmºQôÏåz|}“ùý¬?lý¿»!]ïE |`ÊOI°V?Ö§ .sž3gyNÿ26¹ÌÅ(B ׯšG7žù6&™•×ãNÐ {jBLˆœëµoýCÁ$Ã×f¤ú`XäW^øžo¿¿Úþ…v#ì›Ô=û0çè{:ToÔ*[a½¯ëˆÄŒ¡æž3F…iª¡¼_ÐòÆBãúbÊ㤯çkÃΥ­n£m†OŸéⱞUG¶Š•L-BéWÚ¿­‡dÈ¢¾i"´{M_[[Ž›ìFǺÖKåL§ ôbêÇj ƒ¾ ×9®WÕþç©êLUö!S~òæhökõ1¾RÓ·g+”Í.rqo˜…Fr•_Ï3ˆœ´Ö{ð=ÞW·Àµ Ñn_dw7¼°Í|€æ}C×?È’âGgP¢*¦Æ´. 7¨QRí–ý!37þsФKXƒïLdIê÷@ééºN÷K@9m›Õ¦ö\`‡E‹”D“UÌ ÓR­¡:ì4#q¨½»ï3Ò'=¥fIì)qÈŸUwHºHQj°À¯ž¹ÛKööÄÆ%—³—Ý-Nã\)?£tî¨`hÍ,Ÿjø†Á°i4Ít.Y$’ÔƒÕ[¡'¾a-£_PÃBó…¼t²,¾8³ dÞKØðìšË^Wî»RÐcßóCoT6ŠGh%c?ñ =id<ºÓV^Zb†b;ÎñmšÛ´T­b²zã8ˆTÑî Bal‰G”‡–æŽÙ!«ðQ ƒÚ/}Üèýðrö òÍëS˜¯WÇ /à °(·k/êe¿ˆY¸TGbëÄ[Я3oZJx’Ë0X­Ã!®x÷Çìt/àéÍnÔå› ëô@ºèÓK8ve×tå þ˜œ[ƒ<‰$ÂúÐÉD­õØØ Ä”§tÕzýÕuÍn¾w0AË+Âfô·”›5gJm«bꜼïƒ»ë £J³Èzú2ê,5ŽÚ×v MK´ûááVhjé(‘îpå÷‡´Øá‘ ;¡†XJ¤N½º^©p’ùEÍeÅ ™?ú"2Ú ¹¼ Fm =‡gÈsÐÊ3â/®i¨ï©DŒWŠ–JS÷áô­>âÖMÍŒI^°-MɨpwãVŸéîj3ÖJ cH*Æ-¾Oû¼MñþŠR@µeÛoÚÊp‹xçhì´Ú?o|yÐÛ¼ÐÁ}:„ÂúÑú˜Ïë”0®émï5êË¥þþZPÅhç 'ðsƒ ]UÃAµ@IM¿(üN”ÿ¬­ÌUÊd>°UA Bz°˜|(jHP‰{ T¹*ÞÄOé²:¶ÚÆ »¯N߬ݢߌ™ @9Aþ0!#Fn:Ë‚Hâ'ý€$É]J<” £”<#ÕŽÝõs×tÿ`Õ/±ä )Þ$îj¿½‡8°Ë0†j¥#N…‚ÐØŸ aíóòr <ªwÙþLÎÁA^ùi‹¸êÓvé‚X”Ñy†\[B ø!QR$Å;›‹¯—ç ócÓ·h³Ë½pI„;"6ÍùŒÆ¶ª‘*<ÚDp¢ƒn‘M)Pzutc …lÉÕ瘕âº@^˜écÂL½¶—Ÿßµ¨ÜßÒ5ŠDƵ¯@ Ê5Ýx~‘ÿjÏÉЙ™Cµê5kÍF¹»}ˆ*ß]s¸tŽ:i1ä%GþŒ’¨1™Ù9–Ô€màš²°økÚd‹­P]“ª ÒwÐ=$iº%-î=]̱G‰ÙÝí ÅÛŠT \Ù‰»À’ñvñ&7-jy™Qïwd–,Ù©ë‹%½à6[‹–”ª5Îo›‡g.ç~Z‚(#íT«„1y/XÛµìZ靨 ºP;n’û¼fGÜ¿Àßl/<ãÑ7ë…|³úš€‘}T «ö— Àöo.ÈTsg‡ÏœPc·=¢¡·g×£øÜæ£é-RÓ… »kFý¦—³ü‡`‡d;Ú:õ­x[Ù(fÈ<•h€œ!¿]fU¬P(ÛÁEß]1,µ¦ò]u›ßª{ÓáÓ7»Q =JÜ´°³ù7 iuìe‘$¤®n HkÇ'cA߃‡G¶ItáxR“‹#gß/ ¥.¡²†Í#˜`% —–1|™+‘ã­6N0³Î3¹_`L(è9LÈŠ‹AÄzM^ ±Ü+fžý"îy=Uú_ˆÝ´_„Ë—PšL¯ï{.QcÂMaÜOS©*ý™®hnaž²ÙÇÐäTK¨M[°- œ¡ÈÚó€ä|ô¯±‚73‡/ò}|OQ´Á†wðš5Q^7ïîÅÐaèí.1ÊûR‚ ?{™t8VgŒ=¶4ùÐmõáaýÓŒ<ã59蜸†‰«ÈÌçÎ>GÖð¹­Í§’ôºYRÞ\JýIïFâ„ÈÉ•fÎX–Q7Þ–.pƲªž +2[ùd R=µçÖ|`À¥WšMìDfCÐP!Ü•ª¶Iº‘8áõžùéâ¤KßZ:N5‚BD¾O܆3TßdÈ7c¬øÙ>þX­šƒ¼¢HT²'WÊsViNm„Nïû´Ã­«¼_XW[4€ø%N¨ÃpmªO@¹Ù‡d`Æ=Ðà1FA<õh̺/Dœ%ûl(© q˜Š.ÈÚWá˜ËζX§ß5`½ÓÐý¡þÈâüìÌ[¥=Ù½.G˜ó]šO •ÉÜ äþ3gbÙ [”!¢¿‚ô]w˜gVüíÞÏ|Üðƒ»ÚŠÄ³¹ûXjòwõã8¸Tð\¾ÑÅT |İÖR×9Ì~÷O%ð!Þߢ3Pç³z%3¹„ßàEÊO‰p‰L¿ ûn-àì¥Z!d'ÎÄÙÀÄÀ4ÙÎ{ª-D܈ŽE®`¨²ñK´t-SSâêF+ªnŽiU‰€‚>RËj‡ÅþšfÕE·G”,x4”ô%ÒM›Œsþ }‚ǺD:³:É$­”aÙþW)—»âùBÚ`“ê7áåPPÂu3× Ï[Œt#‘{v0A‘t¥Q@L¥U³{¨¯pÏž­ÇÕd2eë%oÄnÕˆ?šÃXsñ&¾3»9hæöPÛñCņùLóµÜ®÷tÂ2á3yɦö÷Fõµ%Ãh×Ro£ÐʯògEˆß¾ÖIîPœñnYÇ{Ýd%&0Mvçýh¬‹Í}%½Óª\Ý 2ƒ"C«‚r‹ wÏ1l…ÿ±ù"lû+­"U{²Y·ÓÁ=p­ç·ûâ(€¡7*Ã6nå!…V.Cpû†/ùžZÛ++_ ©èO*³ÖðWºêkGeh2¡ïYÒâ;tÕÅÒSŒÈOr†=u@ïrÞ˜êe¦ƒö\èk]¸ÕŠêÕåû4†9¼¹Ý{…\¯[k}§HŠY{ŒÜk¯ †ùD~ZÉ1SÌàt[^1˜RÒÖ‘L/q[äê‹]ÂåN6v×iˆá8UѪaÈa˜è§ Y…5J÷ê¯ci]¦KÊ$ùa”曉rÍ“®~.T`øjŒÔÅ*«¿ubé舟Üs¡ÂæŒùªé´½¾“ ¾˜ùFrÉT{YSýJ87R6…AÇa-x§æÑ4‹ÞBÖ‚ÐÆT¹½ÅvßÅê †ÇœØqÁÙÑ{mÏîa†óÆìÜÌ5I«hù}vN%«,ŒtúýÆb•‚è3NŸbkús; ­¢rq½Çlí®ÇzðqÀ°¹*‡å³„FAÜ:èK|ª4‚Z³Ie2ÞÓ›ŸJŸXÙP–Sñlz2¯¾TÉÍ\¡4ì^êÒåbË—˜"‰>ŽÁ }/'Ž’VñÛø’½ ¦¨™6,³÷e[îíúyÃîŒuñ/ñ îIp3)uåŽ|j#@¾z2íÍS§ÃT’¹K/BЦr'·Rm;®6fîœãˆIKèÅÎûw1oy~Ú53"1û:¾!o}6^ŒÞg„’kðQß7ÓˆMaÍ&æh|úŒk¥·‰<'+QäÕ‰°ßäÏ_ϼ¯Ä’Ï•? ™™.ŸZ7oò™w¦lÈSèEȦÅà»­hèg;¼ DÓQZIe¸£öÿç"–81o ¸Ê1¿‘–f%”¥XtSq,ÓÞŒyà¢þ‚Q+—‹®«: » Í*r©ÉTØ;I·e½Ï@¤£…øRÉ`øeƒ¼ï(]-ÙÔt'P˜µöhl”uÌ<@«w›çb ‰€»AýXrç—ê©ÖÜÜŸEøª)áóZøh]öVàoR|·Ÿ^óÓ§éhlÎßAÈh4‡ÞŸ‰ #çd»ñ9>ænï8 £”à{é1¨. WuÔ£,s°9ÕDHÝø†XÇÔ׊Œ, HxuÍ©»¸l4òH]:iU0yÏ‹î_çþÑ"û{Ã44½&n¾×Œƒu{ºh¨~ý„.ÿåí+cáòлvÍN/¤9ÝC3¥¤L)މQžôö?ó9U­âd=øŒ¼ ‹T,è?Ç…ghzßkâë"4ê-_$ §Þ¶v;¢x‹0¬~Hã–ë¥KÉPîšàNI’ñ>ɳAò/~øT¯u™êT-ÖðœZfw — éøo5 #ß)#eZ÷X’¦øi !ÓM°wtm` â'À![í²žˆå(ê0Ò Ì~zãqsü{"ª’•ªñǰæ!Âì‡ïøVF'®ZOÚÔØ *qöö–~¢Ç\,=m ϾéÖc™¾’xƒ¼è =A$:a3pA…gÞ25Æþ H¡Ê.éسa#AåÐÙî/›Çë±øÓzÇŒ„ÈvÀArú»õÚÇ¡¸‰ù<@!qxæÕ y£CÜûç9ÍO3šÛ{¿š¿Ef°áŒM¯ìÓâO l?Üö?µ"…KÜñ¯Ý—¸[‡‰W…Nçmv…¸Gü„ÚMùŽËñ´ˆA ‘À-Ï®}1³WÐñm¸çIÿLÝKL¨`êKOO©’’&B˜hþ%ÝÖ†°˜Ø;e@Í/kÓU/:‘NêJ ¿xØîC}À -?Õ d@ôz“]ß”g…8  õL娻ës-ŸL7ò|8ËVcå±G&U€7ØØ$meHœ á3ªž; @·ÐCÑüI×ý Ž =g‹/.TÍé¸í™šMÆÔ¢ \\Mq?^9?ŽR…WÙ9°Öv~úW!ÑOŽ>81Ãå¶Ð µÍ¼r­þ„ÇåŠ8ÏPÝêØ7û!kÞ†¼ÜÄw£Yrž¸3T Žrö°Ý@TÕŒá#|…”翆º7èfñYvܹŽØ&^ù ßOo<ÔѬIŸCpÞ,Ìôª¿?Ç:Q¼´EÕfÀýËa¬à ­FY½’Ä\%½y+¸o ,bÝc·oÇz2Z5éaƯ ÞŽ6~sïÅU)iÀ—ã)ó]Á„¬4‡© qŽ ñcg‹ç0/øs>žVcA£3 ­©$²Ô0ã÷ÖÌ’°ŠªL°]c^ÕI·D1•\ýü™|¶É—øèxLRÞ–Ú;Nmeí‚SAx•\WRÄÒ9 Ξ f½»âæÉœ&fû˜ó­3©[ë–þƒÙØYö2 [ B¯$Ò˜¯GÖ/w„4§)+'OQìp¯¿2_ËXÚ¬üa«¿ÇÉXy{C‚cëÁçj6/¶Ú … ¶ O©ôcÈo ᶤ·m}Üí <•lÝHvoͳיY‹ÇgŠa€ˆØ­"çaüþûȼøŸ¸z&%*›ÝÓQëpë×V}®ÌÂú½Ê†Le.†ßXQ¥BêÃ*ÉAÀE)öÝ~{éåðïÅ|qHz—! «“ºPf5vâÅš’÷€—ÀJ+*Þ'š‘Ç„ÕlråÐi)34áÑ´Bz!¿ØÿÀ±å––s²¥êÄ îö`¿M2Õञ¤Ž±o+‹ºKs&qÏr5#šl¶z’á Ò¬7Šþ€ì$mî3´I?ðÒâá_‚^êbÍf@ hG­?˜-;& {Ó]ku‡/ƒ\b¼å›Ù¸@â}ƒyv?~¤Ú>“ A®ýÁDËw=ÄûšèJRîLÚXþç™Lfí>tz÷¡¼A/ñUði'¨ÕWÖôªò‚ _Z#%YèÐe9µlHÏ“£¢7³+L<·VÇèG¬Ðâ¬Yóåë£×ø€Ó{ȯx™Ì}µœ=]x6ÆÆý¾É•pS"i}7›xÑ2N»«hÉÍ®)ßò ëüÛÌ„pïôÝ÷fi;«ÌÖ,W#j"xb§Uê úŠ‚–?Of.-0 4jâp ä7µA*n"-0¾tí)§Ué°…®ò'9IÜZ}vY6 ââò5åØ <Š\•áiñtu’†F|•g©h¼4Í”…‘ò éù¥”iRÃÉÐW© ‚P‘‰ð—ï1¯Óe@Ì{Ñ•íc²mvs´­âï+eLá¡jq¢ÓÈ/>É;†‡ÕÈû‹§zgŠr-3-å]‰˜~®+|fy(á ²?n¦ÍŒMïJOÿì9Þ&¨—‰D€r·ÿÔ•G)œi½peœM¼xk²+ZR¨Á/Yû6вðMÔ"‡6j9<G†W.,´ïÓrëÏk¾øGwDU ý/±\Û^ŒxÊoÑ"M×ÜwªzyôÈ­T’’ß-’¡ÕÉô›}bDAÀ'‰F=Žˆg<ıÐ~L:þ±@¶1Û¯«eשBB(ߨ-¤”túëE/®FÛ2ÿ\ %бÿ«N-˜Fž_P1$VoáóãR KÆC‰IÌ865€l²¬”_\…‡UÑk€´Ø³^6®yΞo^ms:I6"˜ÃzòPõ#ò@œ£K®V|´ŒlÞó"kê’ÌÕkÀš-·¿@gÇ$Þ¨ìÒY½ÜÐfák…à‘`dÓìͬ™5è®IÊÞ`·j•ã§½µÂálÅP(Å—½Ùá@9á´!)×̈oÉŃóÆLOº×š„›]Ñ.\~™“PæçC*ñÉ´Ö=‹ ´´+<«¦;'âj¿{ͶøÑ%”uâE Ž¬‚iU!æ¤iÛj݈ çâš’„åë¹Èõ…Ùa^Ôòì&qCGo¢‡¥ß4K Ùz¿(§ÍîY±ãçJ<ªÁÎ\¡àÒB CưÜôG?5Dëù `·°]#Úò\S§<Í|yÚPOg®‰ç æHè«*}«æ~GÔ˜ÅQL{I­æ=]œ<ð2-Ú›Qé[ý{ó¥)쥰,6®¢½â*ÂK¤`8Kâ'´–÷Áãn¢æ%¶VÜ躻ù%° ÏÖ; 2Ä®TEåºiNl£?[_>$QLÞÞ Ü12Ål© }¦þ:6™ ]"QW¥5}Œ9¯•²³pŠ,©àíU~Ó'`À¤—ÓtôjFÁQ_á(=Ü~ài”“—ñœ°ëÅmçQ}€›‚çté}±Æâˆ0¯SÁ»Fÿ%ßëÀ¾º•»Îl/c îC빫lýÅ#iÑHwÀ@ËiÈsïqðO–Ãý{™t3{L#Üßg†Îq §‚! ]ú5gc7ÙF÷Ø Úš¤*&”\Í:ØG¡š¬¸ºÜ,[DcIENP³åê@¦;‹ú®žÅ‰%°SìTglbøŒPóä[•G×Ö%7.û8#h ÈlyY?ñF‚Kµa—’vgYŸÑ*a53¹9ª³Å 0QŸvöv¦ÓoS%}>Ò ÑǺœy-O+'TjÀWJ ·%víZ2 Œ3×$ªy)QÚzψ«ˆ5 ßyèÎ.>O “a†ÕiøÐn:C‘~J‘ܘ·î¥»Œz2zn/Çú\Íß‘Ty’²B`6m]ôå¼å“a säwäÂ`™7¾RkEA9ë~ʾ—e­ö¨~õ%MòúO4¡ÕCPÔZ(¥U Æ¢£MЦš E’o¬SÂÓŽ‹| Ö¤-@4q»;Ä¡¬J±¬…:vºŽM‰O>G¢ä¤þUÚ¢£¦›¢0KX ÍÔàR C'ë±pZæ¦Tø’ÍŒÁb ý\J!î‰ÍÎrè· ]k"ûýŸ\pâÏ{®ŒêbDÈowpRœpqG ¥<˜ÇçóÓä=npõ²"çqŽŒé9Ê’—àF1í¯¾ó,CÆ7ƒé*„l9“/—êŒ{%{¼¬ÛdØ¿–… Œ*3°a)ȆÜ/¸ð­°AÞ®™ƒ’›!?ëhÕ¸;.Ĩ+ŒJL&Qg ت3w/…†G$nôD²'·¿Õ xí¹NÓd-¢,‘ñˆŠL:ªöyë@Eë j鱚Sˆ¬ó:1§é‹w©ÙÎiš3kýe¨¸o[R²¼N–‡| )ÑP…eiümÙLY4Ô4z;¹dmy/|G†¨ñ/pé½fè(¤è)ÑŸˆ{ÕMì ·WÉ… „鎱´F2Äfï*,àRÍ pdÙ«ÜP蟞…`©g°”[~jñ«2H_1tMv ¢‡_¯T‹©;Íû€<°-|½\[*1)ý¤€_b ͳªsZÉØó¤ŒßKFA ù}}ŠàC0&_ú Ü¡‘ørÔvU²hcu…ã53ë×çm¥$Kü ÈsÅq®ŽúÉùfŽ®'x‰  Æ!Ù<ÅiFƒ…WkeÏã.!%#–ðGqöæÄØì^Xߌ¼™wlQbËšj¸ÍœcÎxN¨.ÿ¶‡¥U—þÙm÷0¢Ý ç@Ö- Ílçí¼Æã'x°Õ)Ä¥é3ÂúÆd¿WT`l¼OfÏHNõ%¹¿šlìÆÏ7¶B¤aJ©>ʯ›X•VHb”¸Ðù¼Û°eT­óô|œÏÓr¥ËGm«Ñséq—ä‡y°Ü1Qw´8Œa„+ëm§ •Ú®ž »ö8³¤³ýU³§H@Š>ë +¨eú×IäåTé!¶5')yeÏâTÑZ­;Hn¦¨KÈîGÄ{‰Ÿ0Qu/ädž®?zj&ç ]úû[…D;íWé8 ¨"›Ïñ[Ôà5PDöjw¸B‡”%~á×Wê|5z…A¨*&8êÞ6„øx£ð&:+:V|+Qa¶¬NòÖpô¬s«Þë}<ñvØž‡tkRÑÐñp0ïãÞ—Á=Øl‹]£õe`(µNV’£Þñ‚ž~²©¡œrç–Õ8­ZÛ…~,뉰~ùAWÁÔ€7Œ¹(EJs­6ºN Å&Æ7ìýéYŽypÃý„´÷ ½%Òð «g*X¥>‰AΉú«ÒHÙŠ~UÚ¢urxS–.Û¤$TÜ‘ò±£àD©nW»Ã“*„Oï¶2Ðí¹D€_ «·&h¶Q¬‰ìØ…9ìP6•C4€SYq š5è6û…O-fGˆ¹ÛýÙ­©dXÐIν¬s‹â: ŠtæXØÑ˜(´±%^ªxaØHKeµšÎßøiý³$™Â²ƒõ!•ù0ž²m ÏÝÃKêÏ_Î÷ÎŒu^_'B®XÜ2]ðGžhÈÔ9óŠ’ݯêç2Z Q§—zçÝûx¶k­ê-õ(ÖÞꄺ†Fbà'jwÎÑS>>°É&«×Ö<}3wSÀ1ì|,†Û¹ªÄG0nªƒjË›oà± â;q Ú}­a7cIJà9<¡¢q›†¾U ™cȤo°? *ÈeçeWmB%'ÕÑeÃ` ­ÎxM/&DnÐ6z;[à§õdS ¥â{ö·ð7z;Ë+¥nd¼ã¿…22‡÷·’äñqsz•ҽ˄ù^Š…Ç.ër ^ÌöV¢. ”6¬ÍxxV4ã=±kžœL‘ÁØáƒË»Ú•U2Ý—èïW¯Lníb›úxi‡Åß-4’Â÷ÔSþe@^n_YަKÂG‚ndõ<Ìâá%t¿À”‡c”HÓdrVæ0ÃÈ<ºA­Ê~Á¾¶Ÿ>7ú†Õk§9ùmVº±ƒêûH­ŸŒ_=ªMÌÅ,WÑáXc=`¦ËB„ÜÞÓ°…âÃÔ7ƒL¡³1Î¥d‹ «¬Þ»®ÇoFÓ¿:!ôUXPáõ½“POÒì…X=»h…>ÆÔýiá¤:©på)ʤTÔÉÒ­àÂ…núé²Ùu°³qdïÏUß'Jü)‰èе©õ[~VšdùѼž·Àìy$ð³$ûg…¶:IOKbg„ ±ÃîÍùWgÛÉ»@Ça4KtŒNt+í´âË+ë"iÑRÏö/ßðÔÍ"7 S—™ÝV1¨ úǾ¦êÿêÐi€Þ°¤U ¾3$ÎöTW&ƒ @MQäkN–P'Ìç}7K’’),ÃÉ‚Ѭ2• ˜k‰ïV╸UÄY-<ß¾ÑZ­+ÓŠMã¢v¨•ÎoÙnlò ÀŸ~«=o©J®)Ž©|mzEp©MŸ²$¯,háS«ÿÒ¹üA¶ÚŠ\BÖ–×kv8„¯ØWA“‚"¸¼viˆ ñ¤õ™yÈœåÖk¼è‹ù¢¿;ážì‘ú–m(t1zó™P¨Me†ºšÙžO–››|¶I*ã5Zg°>FæIÂÔ*jr¹F ê.˜ä³€"mýð€yò,z×^'øç¬‡ðXÿ®¦\ƒBRÒèF‘“‰QŸå£ éH°Ð³É¤ ¨÷<»e *­-qõì.plㅾʤ@|"oxZe<€Ÿ‘3Μ åš´d+RÚ dzäY±*î]C†ÑBŒÙSê'`Ò;'|¤çr• NÔ•HQö¥-¤—v„YºÃ åÍG©âDÄî3Ÿ0ÑaSqBeÿr€Ù—0'À6^ É¥ÎiÎzš ±øDƒtqÚAœ‹3ê½,Y¬'ÉþütÁôxG£‘hÿÓÒœec93@ 1 CTjúÞÛ Ö ašWšÒo:¡ž@•Ï©ú»ë‘þÍ<èrÆ(Šž0µIøÅ¸hHðàîJ_kg JÉÉ“ÿc} Äh£„VCöúÂéq\Çi? øÜËåõ=šYÅÔˆ3…_W§Í“"8`į[|>»öËòáeRvÞ½‡yUÝèÐÍÈ™·2_©‰ÄK¯\ûHò¾ÿ»¬â£©÷œÕç#uþ1Q{3íVЛ錺”A´Ri„x‚T̾¥È/ 7G¯“V’{3Õ6¿äPPÂ|0„×+¥>­Ifxà®qà³»«Üœ®óC¢ÔU-È=%´¢ @¤Mr¨v…ž~Ì Å6k V_ÛLü,OÛüeÁÁcª`C1Tߟ[&ü¥ó¹ÞÁ5ƒ\ C'…ZQ>h¢ ³¸ÈÑWùܽ­>]Î6wÜY‘;L—T 3Ÿ2²(ŽgüklCaÖ%[Ë ÉW™:»òËFÅKL¨_Š´LÏâǶö8£©pú*|Kòbµ;v7hAÍAÿrÍ•Û7/5á9¤¹•œ—1ëV¹Ø±ÇœÆÙøŸPýâR§ØÖMvìærÝV Äß'vNWK€I¼ãk=-ro_÷c˜§",Œ_(ˆ·^ UXô{ñ|f¥+²®Y´¤OâréOJq¿Í¾}@7%8)¨>öéòqËpÝ R‘}H/½D°ª¸µÒÿÁbë2|ëC*±þž•x‘ó£Â‘L-GênŽ«æX[”–8ÏŒ¦ª±¼MÞ—TJÀn‘¡„]ç¹ËÔýcö†þ¤‚.Å;“‘«çÒ–ØxD;W©3)‚/orf Ô!Ï9%m_š»î\1+ØSÿŸ8Çà²zý}WZÏó퉳3{J¤Ð^±¶l¤;ze?ûZyuÆƒÇ­Ë ©±mÿÅ,†€äîU-R˜¿ŸãXòó×n|@qè«E^‘• [»ôâméÇž+¥>VZK9ßeÿË©lÁ[–Õ´[† ˜'ß<ÿì6 óÀë^È),ªµqÄ”Àù“Ï(úæ'™™œ.ƒÓŠ MTÁÜ!x­Ù1Ÿæ&ÌN׿ДiA=–0þ“iÈ8¡à‡çÁuT-j}*Æ>ïìc+&áZ?Ú•°w‘u9„g¦U›§—ã›JŸaP)¹Í¯D,àpÆŽVL©Zs9ûÅóArê¨ ××gU-Eéѯì¬ÀðþèÈBÛÑ™€búõ«(Š>—5D8ÑÛÁŸô²d /‰ß‡‚Б>\úµ.ðM’¨ß"¢Î·é±ä<¦vÆ“ÅÏJ§£ÿã7Y«—|3²­—±Z²&ür|¥xS`ÖǃìUË¡íQÅÎ}€üˆWkÅCŸ¥®pGt/µx4Þ~PH¯çÝ-Êô=¨J´(hpêu¬\~Sø—Ûeá¤á&@_Æ¡Gn’Eú›‹‚UžùËvömþß#•s †2mHΉæK–¨±·#‚tWmz cCB‡²\Ê]¥ €›VCêÓ`,H.„®åè¦f¶‰s@„œæ<0ECÿ¹U<–Ë^5rFÕtr$Cêxj«JRæÿ>:nxeÑ#æxÖ”pudú,ì¤ ‰vbõý3·TÒþ³uÍÈÕû£tÛUS N3¿BƒÃ^:æ<’ûRÒ=ŒËb½cÆ)nÜÝ¢³öÝV︭I„]T/ÓK©@ß6z0ßog똓ÿØdBÀ²š72Ù×Ë ‚IùQÌŒÑ9Á&¦¬  Ùƒ¸;¥Û®FU>3zK~>#HÖ×N7÷,„‚èÇÔ®Ëäˉðþ¦„ ¿§(‰^jUm‡V(…ÿ"[†¥pßZ1›ûdÛÉN{A—°1×éÊÔõÞTv±}øBÿb¡ö Ã%»5kÇü&ÏÛï·²w×;3ëL ÎBþ³MhƼ]düœé¡­ŽÂÏI-”S>kbLh¹H„f; ²_Ì[vüjßÞcî™"Hte6<ÂLÖ—ý¾[_4ât”]YèmaµÚ ¾Î¶ªÝ;Æ(ÐNÌÖ_µÓJÉÇ¡°™¿ó«ýêP~õ3æðÍ‘¼dl Éÿ–iý›~ºz]îÊÐÛ›QöÚRùOPØVcҶ͇:’§”3ݶ±Ú2|¡TCf0p¿££úû˜µ€"-ƒØÒ‰üeÒšÆ2ù{“`éŒ]µ¤H¤ ¾œO5æ“Kg…îf«Øoý±bÎ Òêi#¦|K‚ñ<À޲JlÍ#´Ìwö-<6;ãÈjÊ"pªÒÌ2ûZ´¬«†ÏÓbé±ëE)2Uô×õxº ë‡Vy¡Ž,_ÅFžo887#Šë& u€ =~¼(†¨ñ4눵¶Ö;¿l¡*S*d¬×ºN[Q„òv¨ìOŒùâ{[<™Ô`¹·X¸ˆ§á0D bU˜rWY”%¶`Ç]—¬}¶#2ì¹aú³› é¤ïÎ6^ôÎaªÁüÓ†Û«šDâr½b1:¹¹!ái³¨¿ÑŽºåb™èI¨Uª¾<ŸXÌMædb­Žv«Öæ6I.Ú‰`ÿûûŸV±X”@ÖÀõSÂö-Oד³ŠqDD‘…d²²a˜oŽÛëM ¯Ú!C‚ƒ*î“,nWfÚ{ZDªpÅ=—Ôèõ%Q)3rïwrõQšªâK°Ç˜s#ú×ÒÆM +=“kƒ°"„ 8¤ÏéêR“{8É:™Q0{—>øyQT-ë¬õNÙÇÃFKÂʰ²\×ÁÌó4kpáœkA|Q ˆõ-½‘z„µU”Öje2©2ã¸Vû×6Š~út%¸ñº6<ûØlïš·ÌX‡ éºeU¼Ð7™¥íH–Tà(ç®;ZF]â›Ä´¬w·–ßJ»ñÚ}#³Âíó¼Í_(‘Øa¼Z·°RÇ^IéFj °fôÀµÉKÒ××êD u ¨d¥³ª>¼e÷¹‰\µ•µä¢×ß#õ…<öÌÂŽë VÙ¨x)Ø3~UíN¦C¶®²=,ì§øö~ÙÍ›ò"¡Ú»¹‰º$úïÞÁì›ÛÔ±ÀL{Ÿ+Ê2äT°Y“|•¶½K¹vˆ$[ˆÅ‹§(_SÎ)BådÓ`žÎÿÑeht–S膼.°BÝðŒ =ø‚Ë [Vø&ßBžù×W „ëÙuÃW¹ ÇCªNá´ê褔¥´pØùßöz ‡O¨áZ¨RB(§YºTƒ“E¬Í‚†éú“z“Ü–ï¡m{8_<$'æTµ¯Jm@PoµÕ†ïèp~xÝ_Ý)oÅæu|fÄÕûÔÆ±aŸ*#.‰²mí8za¼ñ¶Ü\2(£™¼¡l¥>KŠÑŠÑ4úuòИ{`®}:š‘¶ÛU,ÿw+u/á­Ï_‡ Òz–™×{à1 Œu–Rߪ´¥Aã‡OqÉhç†Ê/ ¶$ñÓg ¨7¶FËCõÉY–#ÅÃ}ŽÊô5ÔÆAt‰Ì!µŽ ·øbï¿k»ª|“£ŒAš 6FÌååœü{÷Þv(k£º‹]Opå ŠJýdPRs¡šñ„Ò‹q0—ëËkú9Z\$nvŽ"ˆFzutåù*XÙuÁ;Léêò§«Dz©9dÙVž{±®1ð6&š¥çÿDI˜xXºã¹6~ˆR¬µã03ñXZ”cå×â¥Á4uƒDÕ¤ÌNù5¸ÁÕ} "’ÌÄ~ÁÎhŽÀZ»Zºï¹!ÆÆÝ}¡¨CEËÖH!ÇÆ¯*±á†ý¬‚WÇ–L $˜¿ogœŒ”ù¥ª³ž† Óô¹`5ðí›ñ¤nN5gY=‘=gO´ÇÞ±!XÎá\Qìaä i{–iÓ`³PVYɔ҉Wìà ›ÛLÚø­Rtþ2È„‘æô­‹_ÁCÑÛÉ,g÷N÷V‹¼`Ø Qu¨6è.Ê—eWVœFäÈñ©ŸeMNJ0«´XMy(Œ7ÔE#ÁÌ>ûp`»Æ‹,…„W<D„ƒä<8Àÿ´øÎ'äVRÊï[È·9€«ëàÈ1弃éaMÇ›DNN¦QàdOpþ ìWå"y¿÷݆™E5‰²Ìøpã íðb “س_82‰§&åsnNŒêðuP*͈ž·Lôœ§€þÜ•"Dd4¥rÙõ‘4›ÈÐ Öe»Wàü‡NçÙùF”ìÌßÓ=‚2–5âùŠäa{:Ïã%AÕ+@ñTLå·ªLu²¿.OÌ©zôü‹ «÷ß,=u8Bpñºq]}A:ãØÃDåùi˜^Ñ[ï)¯‰y¦F4‡‚ø//è¡Ä›/’õõþp©õ"tMBåù>Dpò´eþ$´yéorê‹÷Â4BŸF=GwüÞ)ñË{ˆÍ說ÑkJ[·ê xq óaÁx–\—ÉF&mŒd;IœëÉY nñ¹æ:1¦«EʵÈrn_Œ†s |GèÕ;|eç¸×_¿ä>¶92áH kÃÞn¦«%¸.ëäQ•€±ü2„,wÆ Ólæ?{»¦‚*+$c ùa€úò>޲lÁ'k œq\¶™ÄmÖ®ã¦Ýk†!ŽVO™ »sc)"À§Z9&u¡äl‰÷8Zf©ÝØ?Ù«dÇ™êŒñç“GE dOí„B䛜7Ý´F¾—æŽÐ!‘ M¼xáH¾urÑëÞ«gŸ÷~Ýš¬dí‡q’²¦LjÕg@ag—¨nvSŸ#÷ÁCÂ6w'ú³6ôVƒbœÝås?:#8Èa`)Z`Ö¨–áèûÖ½N ÝŽyaG4àÙf5€Ѐ¢:ÿÂŽÄ辰cÛDù^Ttn¢ªKÁm”~‡—l˜ûÜ"sú*oi¿ \ÊGšt@ÇH­·±Žä1döèÓÉAãµjý,Ò?]Œ+û Kº7¤®B›y` ´OñNï™;¢ p cŒ–Dk·'ËÊ>×c÷»gxGñ]ºÝLý,&ä…¿÷ éHVT¸?"8ä¤ë¥øyïÌn­üA$NãYyê‚®!ÿǽ·³*&nö(ÃXšè5-­tŽfKaÆêU˜EęªKò™ª7ÇL‚b¨Õ¼NS¢ÕJÌZê~÷«D]ܰ|ï¾BŠ'T'b¼€¼†î ㊬7SµM’ŸÉ”ùö† yÈm­ü[J"6‹¨öTÓ†ßyC³±ÊZ`V§f†ñÞùÙ 3º+Û$¸ÀäǨђ:ÒÉ[Ҕђb„ŒàAbìO#*˜(u L=;>9Fðw\éáÕ1ÃL3gÇÚ\}×ÌG’ë®ÈDá‹dcI9›Z…rQB9„Y [°|®m.¿¹œ\ VŽÒag”EWÉ@(ü:yë)óÓ‰B}dymäaO¼í¤B .[g¦ãØ]ãaÅ^c÷î+6›Ð.§&{Ã'¸¤’±Zjñ)€Ã²a)ËÕ%özTñ?´ó0DJ~x…q,bz8kHàúcÁAh‰ÕFîbÌß‚Ðq´10P‡ËâÝr`QÒ©1Kz ^I%É“«N½"@Wp»ö*ƹ—Žë F#pêQÏgÑþÓ̉ðµªMCk]ë&-NñˆìÒý ÁÍ÷[•³F|†h%#Žß©.†ÓVwÎ*Ôb:ÂלB¶Ò.LEÜËý+{åøážm¢ž¶bàÔŸ¢J_és¯ fÏ?œ]!О3}køuàW'*š6òÎV¾ÿû\I î{@óýt•YôV9ÒòúG:‡ö°Ã’€¢".óú­,g‘ìBšCéÏX²Q¢ñeV.o°ÛjcB›'Åù9‹ô-Áš‰bå˜1Ws[ƒ‡+”¢#\ÜÈÆ-Eg/e ¨Î̃©4/kþ†‰ÐtPx):¶j}¡HN”<ÍyCZÄÖžô‡oŽìo)i¡x¼XëîÄÅLÞ7ED[Lm¡ƒ·DBkç!}!ÃC6R©FELrœ}Ït{ˆÓµ(äë-¶bÞõ:}:9Ɔ¸Xe}5yŠþèg‰³"è³Cô¶Vâ¢"#øDûùæ”ÇÁùK´_¬CçG!‹µ¶ ú§ä”9æ(ú Ÿ“ ÉUN¥.—JW799ô |—£;óTÈwü´×_­Ýœ!p“ë\ á¢H*Ÿ2»"„ù§e…Ž0 CYŽóëw¿¸ô: ã•p·¸¾Smr–  ¿9ø•‡6d”úš‰ ¿‘ç§Ü/" ½ 3ž B–ó´€2C¡ÒHO*e¤ð¾¦+§ÔþÊ•¼…8oâ.XK—³[VËPÁPj=}Ñýô’)Õm8Vÿ^ä‘É/cJwlŃš ֢㓒ÏrfQ¥È°iè“ÊÛ•¶X'ÏD¬‘™A¨Û¨‰šÈ£‰¹D–[ó*TœV ¢Ç¡1­Åâ 0ó P¤7 Vÿ•…µV»÷RÁJ s‚øAe…´¿CI[üV³v—ÝGýØ5ø»í˜ÐÑÅEM§3òËE2dDëûÿ9ð–xmøè-ÏÞ 8ÃO pÑyŠÑ¯z‚ÏÔ~ý}i‡¹ ÇoÜÉf\Ð~#vŠƒã›á΢òiU¡¾6ÈÇpâ áµ~à¸ÈÁÔß Ö…±HhS~HAxßž5x¤BZ©ž§šê½v<»Aì¸ .ñûXx EÉTÁþ…üs:‹B˜uA”ó£¸ Gó£î˜ïäþ4Zòr¿!éÿr}¶LhHNt_>4ø'­ædÒdÿÁžù> ìQëM鲖߀_ºô¤´/Nc^©W½Oˆné—C[@€·íN–Ìð‚u;tÀSŠí¡tÊ1!×Wõ½~½Hů5ážÒç$Ù˜ê ¯*Mº.:—$©F€äаj çÌ¢JËž(wë[©ij¡&Ò·=ªõßí’Ðrm‰=·v1ˆ¾Ó©6¹N$”çf:50jYA¬ ÿåM,HË}ü î(4üU½ãôê»gÍ ?…vgß5Ú/£CÑðÅöÈ–¢Lâ=3‘œ«î0…m&ð.Ø×ŠÐNpI œ~ðŠ¥'¯Gýñ3à¯àß©G†Ç’Ë%ç°p¤˜v¾ã± “ 5—*ާÁu„Ï…3g[%`{ lúùóÚ»¯¼a´ ¶=°ãA\á÷©´¤Ô¤ãð3ºæ"›»Lè¼¼Ø{2[F,%™SJwU/pœ¦äjiu’…À7+ŸŒ¯¤‰c;Í`‹Èñ9­š$|î÷¹7C>&Cãù›¥¿sK&SBòr2¥»¸",ÞÑÄOýO}ý!W!Ø–a>ÿ_ .=*‹®>õþ8à~œ“=‡|º@ÝJûÜrMJÎ$öÐEäüš¹’¨)›A"Êç§Õ£‚w†¹}Fƒ0ƒ­Y_8Ò‘„40Ö'ÙDõ[!9²ÔÃMéûí¡fÚõŸ™™¼ …ê©üan%zŠRzý’б!7ic2Ý%‡óγT¥È8Ûç8EFÆ`@[£`ãÅõŠÈ1K- ¶’qSªòënνOæW´­r×Háí©òçñ«m5“þæ¦@r(’Ú–Ô9BC,Æ„6Nèdß4Šâ²¸ú<ÃR:mžVßh8‘å¸Zsñ¡6§|ããËyø¯.-\\TÆÖI8Õ›úÃOµeàâ‘(ÇÉ:Î{Êþ¡w< CŠO é+ÔN6ÿ ¦íKÖX. ¥üïáâ©5;1ÅKa&…¿ô»º ä—¶å|²\­…þµÓ/ €¼u‡¯;'=E ´¥“nì~> stream xÚxT“ÛÒ6ÒEz•^H—Þ{o"`!:H¯"½ƒ H/Ò»€€ô&U)ŠÒ;ˆ _Ôsî½çþÿZß·²Vòî™gfö³ç™¬°³èñ+Ø!l!ª8Š_H(PÒ1²€@ P˜€ÝŠ‚Aþ¶°›BÜ‘P\ê?Jî mS¡Ð@ é‰„Ĥ„Ä¥€@€0(ù7á.PyBí:M‚$`WB¸ú¸CQè:?¸ÀÜ!IIq¾ßáˆ; ‚t@(Gˆ º"!ÀPÊç)¸8¢P®R‚‚^^^ ¤ÂÝA–›àE9 !Hˆ»'Äð‹2@äù‹š;ÀØŠüã0BØ£¼@îÚƒ‚!p$:Änq «Œ4´z®ø°öà¯Ã ý+Ý_Ñ¿AῃA`0ÂÅ÷ÂöP §ª-€òFñ@p»_@ ‰@ǃ½TÓ‡1¹Û›-^=HPбSèk`é²8­z ßã8}Ù­0gN†Ÿ|m~×>Ôy€`Ûc¤š N0ïÈÚ~»•ؤ!zöžÌ”GE U«5‡è²áŽÏŸ4ÌËÅÖoëT“~(/9?Áo*B’oL6g¬½‰‘¡{ÛB*\!hš”˜Ây¯ŒñÕb¥ØÈ ™f™T‰ à“·” vâIk×ïô|DZN°u?Æ·ÖÊë|èø¸D—Su?Ú¸põUÑb*ø@|v9Oñ§I  Eé“GyöÏ~Änž4ìç™+ÔE=„E§tM®Û¼aìxØÇñfb§·ƒ3uÓ[½áò û€ÂvHMj€5¬VÑ/Úª´ÔOmbÙÒn?iÆwï±o<ùN(dy.}#ØÕúkƒî¾ër7Ee9 ç|¸¤Èz•N‡¤6a”i 2Ñ©9h¢!Dx.€áhßH°“ÓZ¤.ضd{ÚCVw©æzpÖ˰DÑZË ¨9à >Ç* Q•øá©/òñ“ ¹žØ;DWíÞ“íM+37zåÜ(‹û+%ÇÍdñ3#æú*Ú×Âë6Â-wªZÊê©~B4ÞS´”ƒ[œ]í´þm¢‹³K3]fFÃ,•”£âÝÌ–øiÌ“)ë0fÕêGÚd˜†ŽB¯˜Tsm‹«Æx#aDJV€â¢=\øa žö3ˆP^ûñ»9:Û»Ìuç090Ïrë^•u aå«r—ˆ Ò÷Ð’0­r½Á©8;±¯§_ÿؼ{jHöÓ5m&Ù5r˜1à!Ïu¯Å3RB1}ÇäEŽŸÿúé©AHä³j) +µóX»’¯p •¤n¦PÚSµ&]Dzhº<ñ“H©uˆ2ÔQ—þÁ³5w'I®§.…Y:%§Vfø£,_XÿzIEç#ÖŠï©Y4“†»8ž†J©óEØ9ÊŽ´ÄÓò6|¹ÔÃ9$ÎäÔÏlía› úÖ˜åu™^ YÅvƒê¾Î\às‘Pï L1ƒÁ;FC&úuö~Zce£Hºp½Q‹êöü]ÁÏîøqËü–óLÍÚìzùòÛ™ê¡Éä–õ9ã4_ôLœáëg«gu4)Ñ‘;©Û–[Mvå™ ÷$ž£‘ù /„ XW#I–/ÔMµ>I6þ\'aß ó1(Ž mÑã«'ªŠO™b'¿¦FXx™dèû’âøØþ›_ä„5™²ãÇ“~™™kŠ©Ã[³—oúr‘ÂöœJÇ>Ëk56¯¦_É[™$’kátânœ¡´_niE]ÝwÖ“¡ÙýY!?kH*ýã[ÒG¨<]¦ùâŒù>“‡Xß Ër‘wçü²ilþëô#D[ˆõ[Gìçã#+2 XjüF²…#,¬[0amÍš;‹ÅøóÛ Ñ1æjåÞÂDÝ*up‡k¾tü×Ô+k £hÑ£L1E²žð™ÆëøU™ñµãí¬á“çeV‚¸£ü~Q“ýƒòyÓi¼O² Ä·®ËÀ 1Wøà‡õúéO3~åDºe!ûŽìÈïåßr-s«º…Ô!Ÿ+M7ÆB»@eYV'_åfø1wlQù°ä GR±Ä½(Ï›\Ão#u’ Fk,ý]×óÛÝ ôç-îbçíÝÒEuÓ¾võoxÎ3I:úÅQ7¨'ù¸JÓ)έ’hw…r&¤ ì*—²m}Õ”äXÙCü!KE^,_kÓFÅž êeûÒÔ"uÓñž{°#NåÞü×";ÎÊÞÏ]ôü-„ï„1éûì‡q‘ ]ô±ói]†Ã«^ѽ-Ð&–s²ð <|Ü0Ž \À¬ŒÉÖV/zߪõñä¸1—;ãÏ-—wîØÂ'µo´­(/û…ÎHìõc~ù:< ¹)î5=çIÎxíÄYʨt°ÄNn©Öœ ›‚+Ô"4üí¹³®YƒÅ›]Õù_êÒ¾9×}èÅ[1ÜåZœ·žg'b*\]︄µaÄŽ‘|ƒù»„"¦ßí”ݧ5øÜJU–ïóœÂ?9~Ñ“™|Ÿ÷IBaÓÛ•pÜû× XI:ýÛs‚UgŒÔÛ¨ùp¬+uHVÄ‚¾Rý7OݽMV5±Ââ¢=¼¼\«¡|š„7±)¼þ›5\-¦3‡+1j¥•0ñ-{z3Jße÷<›]™j¬~œå÷‡#ÌuÅ\]w{Sk#öi}?Ö5.øNi÷> óo‰V¾ÅÔŸŸäû*Pe×µ1†î¡Ñeó±ÂÀjd%~TÝ»UÚùf…”–vLý:ßÃ8Ø9¦SÀ®ÍSÿ)‹/¶/îÄðr^Œ¼Ët¡.Ä-Ž_e}6Ñ»Âdœÿ\_Ñk*í"'ö=Þ”èïóï*’µ»qò1ÎzÜÛ`ê2ð%}•Ö­dÄAiˆ6ñ8qþMkÖ-I_œ¶ÏÆQJË‚oQOZû2"pJŒ<»é’±ýîã3OóNÕ&»ZgÞNù­·ùpG/xm…jf_öjdÔµ÷ b‰Ÿ7êóÃ'íGœ&,:Vp!ü;B‚ıyâÁ±<*¢÷Òí" qi~VJå²l?±Toû:°LDñ¼D´bLã8żç×ý¼;Z4Z…8’ˆïÓò2pXzæšÃ#dMA"0õ|¬g»–PÛ4úÉÉ»›« "JhŒÈŠrG€µøqB[™Í+ƒ&(C ݆뛳¾8¦!<À·/°§ïE÷Y&ß+d U¾§ò>$ÉÕµZ•§¢ô´v9Ãsß]oÚn .¿SH6…e/ÊSM¿c.uÚ¹);О%Å3º¬Íh9úŒªW2‰”ä$ÍËèGÕŒ¼Í=±¨äÐ[£Å³l®ÕƒùÁ´‘Ówááñˆã"÷møÞÙøºãö²ÞÌ„Úc+ÄšÛûG߬•¡¥×–ÅRÈÏ?6 ÷°R.›D^úgc¤ÝÃý.j¶m?i³å¦p~5å/s›…þ=Ó#ªç¯ß‹û™%yX°ñ9™‡€‘×ÁU!ˆ¯†¯[Æß©BX”Li0D<ût†0i?­º!}ž4Pà› j)=ý`Ë0° e˜³Úƒ)ÀÊà!t¤£í"ÖzÙ˜uq=ÚÓŒDÔË×Ô®¥ߨl)LŠ”¬P}ëRd2=yÂv ©RÐJà$CðÔJPñõ¹ŸNµ ‰¨Èy‘êžÃtWÝý犙_7²wJ+ÈW;Ü^ “0¯¼Yž¼ß€ÃY˜0±'ôJßþîûÛ•Ç|³F}yb'ëí8 /Ü K,—º="lo¨ýñŒæ¤+Ðû\í&>¬hk\ ¿eìÎHJS)ÍÇñNÕÑÌpMmVbˆÌݪn{š[Ì<Ã市›^¸o£ %Z¹äžfù›;ä{u94\Òs—^Êš³¼sI…ÉÁ¨‰ÍnX§L•Ô¿^<—xïL3“ˆóÀç"G׃”‚·UTÚÑ'PÜ¿‰Ò­/z~MÚ쬠aÉM£sAØhTðåÆ"mÞ@ò 73~†£”Ç:Žq ‘ó ,A²v÷Š£iÐÿÁÊX_aúy'Ó$Ýn ùÍÖB9o ˜¸*¨ñAþN—äƒL“oÁ’®,6˜%í‹§œÅºÙjõû«8²Ä˜}¥£oœ¬êÉáÇ"沚ù¾r Ê»A2ºá·:láDŒÏüÜhl-¸dY$x¾>íu.õ¹@¬Å\`|G«¯÷Å+{­µ\XvÐ'PmÛ½ðSI¢*ê}ê¼@»šI&ÀFeººéH‡Ê9óufsvf³º¿]M…}¶oο¬&mSÂ6K“?>þ!òü,Ý•fPý"ÙàKf4¶íj)• ëñ­†ã ÆÉnª“Ø6?gÈ’ºàÛïñn \´âü8|¥Ìtåâ»­[BÅGÆ©ë·s^ròP_»™ß‚¡ÐÏÄ: âË• »ÐrçÛŸ´T瑩®\øÜãZ¯~̾èWNOZÂÒnÀ”#ä@®x·œØo*VðVθ?ÝWYÙ·DM.:èi1<3xÉvÉöZ†’îSÈ\ŽÜ–¼˜›ÔJ¤œ.xk†aƒG'@¡—.ó[Q®´’ÝËÕ œAw×Ú!J§ëà×ì:`hm1™EKÌGð‚Mµô}šºò‘)œëžÏdz ¥þ2»ªL[HÏ@¿b$îÙÂY¾šÖ¼¾cÝÝzËfl!›­¨ %ücjßå)ûÛ›·L§¥Ä^ßz|ý­¬"4«ÉÙ~½ºÄö8Àð6.IÞbà£Ò ²5]agûÐ1ÂCS\äy éVý‘çêV×I Ö3¿ée¹¹øge:GVߥÌh¥)É<™ÂI3pÌפq™“nG—˜SÄ è¯jHËå±Fî4!©w°ÎL¬6^…&ÉLšÇü¼s$Zÿ&&È=H%ë#SÁ³l«„ÕùÄš¨ÕG¯à^›ãl¼è+N½:¾õèä|>oA;s;4_?™C…"Á<óPó•Ör¸¿x<ùŒIºÉƒ›õ[ôåG£Ô´ώძS¥'ur]š¡m‚Iª¬b&5@ÙM\ÌÞZÓa@ZÖ¡éŠI™íàCä·åÝPo„¦Õê\9ˈו˜Þ’@ÀÓÜ Ôöp (ÙAéÚpYo%YQSeÕ›+Fñ˜:dHÖ«Ù²~ŸÍÏCo“ñŒób•D¯ÔÜÖLpß’ŠŽ°ÅG¦Çrø×Ä7tÅà?I]R+ߘ—ÈMß"ʯÆÕñü¼ÂåDƒ* ]_ŽÀw³­Æ¬ú 0GÌî†ëÍ'ÒE¹ ľŒ«:¸mhÙI3‘Ð}àtï þOÎÍ·íBUóÄo¤˜IÂé>ÏrIÍCâkåÎÂ#Ö)fÞgÒŠrˆÄ.ëûZØS¶IB!›c\™˜á±²÷kù?6Ð øTðnýÈC9"'9š8à˜#èú­„¤ÀõlIÛ¦-§"˜7P¥‹WŽpP´8Š&ybÞ¢/;w8¹­¡º)%׃J™OÀ52Ñ÷; +¹X}ªÐ— v6»t.*(ëÀ6¯æ }½ÇXLCBÕóÀ¤äõœî m„Óä±i¤,aæ=zºÃ´I§yª•$¯Šxíî.~¦]¬„_ŸÕQ¬KËsÁHÚ;ý‡¤¹msqTEvtž´O-0#p-ÒÎ~2{!\)N¾e²dª¼Õ.®*‡¸;þÖIŸDrí¨Š5»Û!Y1æyìXß‚þ^܉´¢µA¼^Y²È÷.Å;"u¡ð6,¶¦~â­›<=\ÈÏÇï ˜3ØÞ¬< à—¤2|[ôY§”+7ß=0¸5UÓp‹‰tÇqË*¦Øö ëöõ·¶­ ›-á“£iý¼Ø¤;(†žòËñœÚ(ZÍüŸezò…ì:‰!Ë߈PŠ󞸡3èZm×'{tLU©†€¢7c¼ÎŸ…Í$eíÓÊš¤oODP‘7­ùNåŽþ¬%õ_Nöf ò-©¦µcó0ã,È©ê¸ç¢âÎT+?“ï±â©'=Âà«ôó?AV#½w‹Ôs¨j‘­oDÎãŒî:–Üiy(6q7Ã…oyÒшßì!y<1Ö˜æ]Φšó!™Ò^ºŸŸ×`åRÑlz¢+úa^½6Ñ*À­e‘è‰aVëÏ“ßÜ~JkíUú¹¤]Ye~Ùƒç²Õ»3JÃÛÁë1·õ¾n?&Â/qMÊðk^)Õ£QJÓºVÂôªyîB‰WñqÈè=Û+ƒL“JÚ'ljÍÔÞ^·?u3†«6/gãp=a ÛPI–ðo”~ŒMÒGèùƒý‚y±ÚØr<‹kµÁŒaUK7¡sz¶Ræs€òôž‘ò°3H¤öxècCùÚØŽ5¹ü¥-ïf·^„Õ<¬Úû§˜×Ѻ˜ùk%Ò.e-&=<ÚîHûl.y/+ûbÓÌáË­À'Û±Bªß¿1Y“(ˆxVÞXÓËöœªfh¾åIHà{ùÙ¸yùr¸°Di{ï,û–e¶¯ÏxÒ 6D¨òƒóŒhº¡ÂÎc®¾py¿3Ù®ƒ¨ ÙËÄêMù/}7-&«—ø¿ÿRèU—û¥<ðQ´/ƒ±pxÇ·àÈ—E¾ßOÅç·ËÇþÐá±±õ£gó kFà9§ÇÞ?‹ì‘Àúg4½í/­g^¥ÜåžÉä÷kÒ‹o©Ñ›½&5,í©'ñ~÷uŸ9Ê ÿÄKÑa"q­ýÚèº-7›u®–m{pæ+ÝR›¡á3óHe§{x+ÚÕ½ÔY‡°IW¾Âñæ…Hj¬w(etþå-;cð.÷WAWËå…7å¬w…<2T I¢¼oj%8éð)k[JN3>mÚF¼¦;9¨1‚‘ç9õhé|ñÒ¥Ì Û¼Z?§VÙÂã[‡˜ O‘ÉèÐ (¸)ùƒ5Á¦Ÿ ¥¦èL„'›e…¢æÞ%³’t˜µ¾Õ»>L¼Ï£çû£UÜ|ìN©°à¸Zù8??N¿³%³-Nžbq7³þìâÝÁŸ‚(|HcE5&U0Gîj$&s•È „¨×¼!ËIõŸO„é^V:lû¯«êK0¥-¨=1â·ßæ¸uÌØYÈîegy'gÒå°fûûΗ2²žd^CÄb£ô%ó½¼kNß¹@j•ýq?öûÑxwlÔ®Ærd‘¿<¨í)Û“ïÎ!~wúÍëé§ÄXZÄ/Aó¤=‚´T1‹>ä!X‚¢Õ¤ãð…· 5¯·¶wš@¼”â½a«üùñëfÂðѹKŽ"'kr”øà™UíGOÉ¢¾Ù̹à±³_ÿú•ªÖÎiÄ£%¡¦)ZG°Ì¿¯W Èij¥%«¬Áj’ ø¢C×n‚i,Ïh˜}$÷£Æ˜)Ó×#æ݈”¬ó@Àýæ—” d1¦Çݶb”ßãã®%6ÍXºw«òCÈðŒ<ëÏÝéÃÄBƒ ¥GÃ÷3-VO‘—œ†KrŒ5ÞÎL"û%ÿ2é¡ëŒªxë†~æÂ´Åt;L‰8CgèE ó¶„CaÊì÷WsiSÏ1®^^R¯t,DÜö šGbÒ ãôOykj:©,¼œ4‘È›ÄúÅ¥\ ~;|ÑÙæµ™ÝÖ3«éR“•ú´$W£¿´/ÌÒÒáÍz録È ä“i½­…lÀÜ«Œ‚ê:”fç6$,,ÿyìÈ`ÑçŸQ Zq%€E/š*M75é—îÒªáS¥ùóçýX¦ Ì’³äÓÎA‡<ùO¤_1ÎÝzgll’ n¥Éd9Vyåôýgí§ž3‰†ã<÷jGŒGé33sb¥Ecâ–ÿ^áÙè endstream endobj 328 0 obj << /Length1 2424 /Length2 16694 /Length3 0 /Length 18129 /Filter /FlateDecode >> stream xÚŒ÷PÚÒ cÁÝ 6ÜÝ ÁÝu€ÁÝÝBpwÁÝÝÝÝÝ%8ÁÜçÜsOr¿ÿ¯z¯¨‚Yݽ»WÛÞ 9‰‚2½±­!HÜÖÆ‰ž™‰ "«¢ÂÌ`bbe`bb''W1w²ýWO®rp4·µáùÃBÄtz“‰Þ emmRÎVfV33'€…‰‰û¿†¶<Q ‹¹1@– ekr„'±µsw075sz‹óß*#j377'ÝßÇBÖ s#  @èd²~‹h´(Û™ƒœÜÿÇŸ™““#£««+ÐÚ‘ÁÖÁô#5ÀÕÜÉ  r9¸€Œ¥ ZƒþIž bfîø…²­‰“+ÐxX™lߎ8ÛƒoÑÊ’2y;ÍŒeþc@ø§8fæÝýsú/Gæ6ÙZÛmÜÍmL&æV €¼¸ ƒ“›hcü—!ÐÊÑöí<Ðhn4|3ø›: .¤¾eøO~ŽFævNŽ ŽæVåÈø—›·2‹Ù‹ØZ[ƒlœáÿâ'jî2z«»;ã?͵´±uµñü/21·16ù+ cg;FUs{g¤è?6o"øß2S€‰‰‰‹•²€ÜŒÌÿ  ânú[Éü—ø-oO;[;€É[ osÐÛxOG  àäà òöüSñ¿ž™`lnä0™šÛÀÿöþ&™ü¿õßÁÜ  Íô6~̦¿~þý¤û6aƶ6Vî¿Íÿn1£š¼‚è'5ÚRþW),lëð¤gг°²ØY9ÜïÿõòoþÿÍýo©Ðünø“´1±pÿ'…·Úý7 —æ‚꟥¡üo9Û·i¨~¿;“ÑÛ/æÿÏ+ð÷‘ÿ“ÿ——ÿ×áÿ¿ŒÄ­¬þÖSýÇàÿG´6·rÿÇâmšÞ6CÖöm?lþ¯©:è?ë, 26w¶þ¿ZI'àÛ†Ù˜Zý[HsGqs7±‚¹“‘Ùßóß6¼y·2·)Ø:šÿußè™™˜þîmåŒ,ßîÇ·fý­½mÔÿF³1²5þkõXØ9@ ;<ÓÛ|±°³<™ßvÔäö÷hllÞŽÞ²ó˜Ø:ÀÿÕRv£Ð_¢ÿ £ðoÄ `ù¸Œ¢¿7€Qì_ÄÉ`ÿÞ¼ÈüFo^d£7/rÿ".f£âoÄ`TúXŒÊ¿€Qå7zc­ú½EPÿq¿!àoôvèhdnndî`älý¯œ™…ã…“¹•1è_9Ë_â·ö›;ZþvòFÚð7z#mè4²½=%&N¿å¬ÿÊÿ3õÿ*Þjeô/bsfdkõÖðc²ý%±¶þÍú¯I`4þ²¾q5¶µ²:üañÆâ7mŽ¿½óÛþü6xËÄäwÔ¿­óŸÞèšþvð¦7ýëAýiòFÌì7Í·¢›¹Û™lþ°x“™ÿ߈ZüßZaù|Ëü7AŽ·­þíßú·:ýÑ¡·›ñPow)£ío2o¶o¯íê·ì~«ßÎÚ½=x6ÿÓ!6æ¤ÿÛ¶7Övo·ý]q¶·âØY9ÿAîíFûßy«Œ½³­ÈØð’3¿Iÿ(ó[q~{`{+†£ÐÑ샷À¿i¼ÝŽŒNf ßI½-=£“«íÞ|8ÿß êò|«‰ëþvÚíøæÞýøV/ßäÞÿÅ?ô È~yÁÖˆ7Т&°í®Jß•~o‚–|O=…šÞsÙ¡Ýù&‘º2=`ÓáF(q¸umWŒêZp…øÙó¤¹&¸%^±õÑëI?Viz¯~i {`2ïD¨¶ŸŽ€^EpßëÙÞKÍß²¼SŠ<ËÞ™ Y!ãεO­¶¿du,haOq¿’Cá©d†>R5BÇ¿pŽ<ÛðÛ<.)´=!, ú…ÊÜõÍ,zæä+±T,-¼÷i$k¾§ÖKÔý¼Çz™ ‹cž.!ä5úØ4…§ða’΢gQAÄ&ÿb5ØæX?±×h'ÉmIt&+‡en‰12ïÖZF^D¸ô=e;š»äE\ZWWq‰ù¦‚>½ý¡`¸ÛZcY—h9wÏýíe¨kÍ“ké“5“Ú#Ú&;pð;XkÂë¢ÏÁöÞ˜²Ð¿ö¹º¼ò,Ҋɪ={-&OífÝöÝ”ÛJÅΜ‘áaòSQP1ò¾6p’Ç^Wc°éÀUr·‚ÁétSkã­ˆ«®2Ø_î¿°ýÈÓJá’~ôpu%¨w·J˜,d7Do$¶0Šý¡…UœFÏ™™·0\"]Ís÷APjÕ¸BpºUü|\6øà¶[¿$ûÑíƒ)mÍà ãáÇ“0¨9­oÁ@ߦÆdu‚0¹k̰O욌+»|Z5y‡yÙÁýñàØøbãùÚ£Y‘’=l‡ó·7Hß¡“PpÍì,MCä´ËÓɱ…Ÿ†G®*Å{L•R¥‹kuCÇcø”gšº^Q¢Ëòù¯Kv´Çzã—u«>ø¤ŒiÍvk-¹¸ UFÔWú«SˆjÇÎ¥Q ×ïµÌó’r´~Qð¾÷îˆÝìì^/X0è?ODf­Œ~"®_·ÙÔ;¾pž•mœ¥q³nšÇÞ׬HÆûxº†Äà°‡QcgâÉ$ÚåÅ!XzyôW÷˜±²ÃÌkrŠá®PIjc¸JzÒ:ÝêFoB}Í'|}Г¨1çâÙZ¼ïýúy)á·ºäNü•ùÔaÖqiIì |NAlN¡5ÙGyä0Þ¨õ˜ˆO#´æAÕ¼Þ5qw˜ûýš×b‹Î¥Äm¹ìƒ­v«1Â’mÛÙaÊì§â,N;ÅöH6&#ðO©sólÎÚ§H®ší½I_3ö¾±´i;MÍ $­äFÔ¥ ˜ýJ k2Lß~¡Y&„ óƒ7È7#(|Aü’ÊãJuYLUì¥:}>P|a‚}_Š!ZŸçt‡:gœÜS˜Å_––Î>þ³Í—¿!ïÌ‚³›üÄ\ð5{c|:dT…lÊ>ä½êÚ”øQõmL3s‚“ØdÀLãzŽ ÒtŽ3^on¸ž’@ý·ÄoW=öØ0zé$4̦®·,]ÙlŒY™M¬‚¥;:Uœ«@ãif‚#êÐF†­Ô‹Ÿþábnš”-C%·Çì!âF¾ü6,;íóÐ F˜‡1®Ìˆ‘Owc‡¬~†™’ºÁéaÝîM5w'ŸidB#œ,¿R&Æ”!ƒË{N‹§„ö·ÓÔ‡üï&yÙ×Óó¬…æ†h³ÔG<ÖGrãÒŒ°‰ƒq XõTá3\à)ÞWUív—ÅêÞ*)¥•ˆä‹@éU²?sø%ôc›V`Pø„ì`múX0®†§JrŸ2ìE¸_¢Þ!nL%;(q[ÓÜ %P˜ÎòdѪïD©išóeë²æÖC±ÁùG´i="°:ªÄòYJhëÔBiJéY$Ê™héb[ rt<²‡žaʬ,JÈ‚:™[ôózØ‘”~«‡×¾âØ öf)½ïn5ñ3¯­€%E®cËrªvã…åå¿v¾ÊrWC×Ç”21t%ÙIFksìóQ™I+í‚4 æQ·'Ñõ5Èvm7x=Ì+†‚‰ Üë1Ø2ÓƒîATQ‰–,µù ²úÞƒÖ>wuÛ›e€¾~³°ëŸâw³¸ ,"² ÙD¦â‡*ÕdnÞ¿) ÍRíœ.+b<•x§On@qJàH…+ÝÏà rj>.ÍÓéö©ŸÃeGìiŽÍMŸ(d/:k¹å)ìkݯŒBã+vJÃQÃu{º¤O7 ùøªC®þm899›[­>‰«w0öÎãDƒÕ ² ¿ºMæŒ!!`løÐôµ'¡o·t Œt‚0íîFëá™Ïj¼mQü¤ÁN©’Î=…ÞO9ÊîÐ3êG½ñP½Ð¯ÒÑÁЋôfV ©W˜;]2eÁ5ž–„,bHÔ ~~¶dç? HÓÌ>5'Zvý4ê…S„û-ÈE¤2\ä±+U½yd þyG Fž¤«ôÅc {°7WŒš+W(ÝÉ€6yÂöxù8¶¢ÉﳦÁ>‰×‹o9¦bÜø@! †šÁI’ÀÌ>vñ%„ˆ† 2Ëþ̯¥Ú¯òãA Ö *\?ëñPô'JŸ·¼Sƒ6«Wä»äÏf»¥—Ç%.˜ÍDõ{Q™þö¶(ϵ5˜ñCÆ® ø^‹HR¯Œé‡Ÿ(;´ÈC—ÁR—d'ò¸"ó¶¢¢´PÇB¢Àó`ù87=+eì6ÐzoÕ¨É1з-GÖX?ž¦ªØæ=‰Øx³}lÔzuªòluÀéVÕzå+É\˜“¨ØvŽeã^ù¸e`‹gß1ηís„ì¶“­üÅ+Ý„›x±L Kã’ÁyHØÍDÂPì‰ÁU÷ñKª-]N¾°Œ¥¥t½' · ¬©é¸Õ‘W)E¾ß .²ì&wŽì&”°ÓåÃZÃÇSNÕS£#ßñÞ˜R0ÊFÌ`›&9”©Ô 戯ê¥/0E˯jkˆÅ)rÎдܯ+(lœháî(TÓ=/››HEþH=]a¤å#;ȶò=ú ^eFZ/ÂyûŸµü„ˆ×;î·¹ ·¤=|C˜ƒ¤X‰à¯Ã0š]_ÎÏÒpBT L…묠0–#¹UŸÅ¥*Hѵít{VÞØM˜E,ugMtÅ]©BpùMÎÇ{dltÈ Ôú=@Äã<ñI‡óV\?d«¿’i$^C‘-óàsÛíÖ‰ëž ZR¢çЦW¡ùÁF’9í® f@)[ÿL‰P[ùcD£TAèÀI¬Ÿ © A)”è6ùE£"N©£OlðA·ˆEÆï8¨Œ ñRÀŒš‹b ‹Qˆjòù&)ž§…)¤þ µQ–¯?Rƒ Ü£y“Œƒ «ÑûÑ_o“ÙbÏ|‡“ãà™¬ƒ­^UW 8(–Ù£s™ÈVqV<´mæY¿â¿ô&¬«-¢ÚUgbˆï¬ŒbÞ F0~Äÿüáçˆ$ô8o«Ÿ‚.zûpýe3¶xçKâÓab‹$$]é@Ú·xÿ›]CáÌɉ¡§E.¯µU‰ÉŒõsÞ–Oˆð6ÛÐF,!›•nÄИYÌ$<[XÛhÍI{¨ØNˆz·°È›§oMÔ;AÚ_3Aã`_¼#›fÔÉ¢§ˆô_`ûNå9\®=œób ?Ã…÷Ù»Õ ¬8¬¢S8t !KžC£GãE¯4ëDƒõGbV>V6~÷ wO“ìì‹u^Oùõtî"Ï»0ì³ÎD4]„;%tÝ)qÉ K·‹4 SÃŒOñư T<ðÝ;ç¥é SÉäyvö%¿>bû–}Ô;òp£[ñÔ‹7ÒuHÛá°­h ªo¾ÎÚ(sú¯²&ò<¹H”ç²ßñ×åº'Ãtoj±•q@òóä7éj(#£ˆßõ{Ó\&¿§ GF(yp2vÌÁN—ó0jhýZøÀ.á3î»ÔÓ”³„Η ƒ‡íê:zPvñìMÕ…êJR?²áÒÂ?C°;oòK©\=”Ç Áç*ÒÜnĶi˜šô|ª¦÷Gi»{€ÍpzñVx:MpêÃÊ)”r«MäZšU"XÝfÀÑñ1p^ÕÆ Á'®/üE~ÔÌÚýô…³GgÞÁ& HNЏþø%|ò*õ9K¼Ü²¬¡öÝU‡¼EgrûûŠÍ•}Ú:uÐûù)ÇbÙyµäpê’»”¤ŸÝ[0%R—šj—£i\u§]ÌÝÏÐÆ¤d˜±0dë†0HûÓ Ç»‘ Î;šMŒ§f3êÚ+øL­|"Ï“cÙ5+¥'ùý•÷.uOŒáCòüôaØç?9n<^¯a 3^í´„Yª¬;ï›~÷MxÎ_8Cõ¦d³JœJؼ¯ìÔ——ÜlæÄK›dôŒÑƒòp§7vÇuC2ÁÏn#~@ç”Úœ^¸¼ \œíº­SþV¼K™ùßïùİ>ÖÈRÁÖgÀl ž)»º§÷®`ÜWr¶œ$IåsS¸R Ù,]>Q@Ñ)cÖ¡0XÞéŽ?…X 4Wwmêà“,œ«êmú)[òÒJ]ú–yA°¦Áf3 hIW“6Òþ—llMã7Ÿü.µ¾ wÕ}‘)Á dÍÜ üLQÝ–ÑMkçoAÞòGxb *†õZhóÍ>_ÑôYÃÔrêÎð² ëðÙ”ŽH£ ±ój¦ê/¶‘‘‘Šmƒ¤’£Ô»):±š½Ôµ¨î§>ÉÀ îOpË÷æîÚ«‡c¯ð*×Êq2xqÈa\ˆhHeùÆ ‰RÜw,¸å$uÞ¥ °GšÍ¯£ÐëćÝ—!2œÃꦫ4•·¡äÂ~*)¯ Áy/6DÉKøò…¼”>âK‰÷¨5°: (š-»á¼'Íž0ôS™L"UÄOpµ›°HÊŸ7Ó`¾­å¥¼.šzW§W`Â7IuþÓ÷¡›]¢ !Ä…ªœÐCÀ'Ö‡3N¦µ*U!õ$2ç¨ÒwqP“_ÅÎ ‚1N:È (1û¼iʘêÖš]%7ýc`V•EàÊTä Sѿ󃼷¦$Œ´vÀ}]Çì­Pʹ’Â1Œ‚¥9ß­º ø^|^ ÒÖ‰AˆÓ„|HœÂÀW«±èO&„q"ò!ᕽ,¹,ÄwL Évx¯?^d.ê4ꪑV6îE€rÐ{þèml‹ñó‚x÷Æ%ÉÝ .•옵Ç-éì ¬>Q%ÚF#~sˆWÇÒUX.—¯sSÖÖá~_WyÅÊ+eŽûtÓ?y•+Ç÷TU7>\uÂt^ÜÖîTuµ ”X _×àß§î†n‹®•9±ïÃö/@ygÝ$¬à~°Âš*¦¨)PÐ+ÐÕÞØ*Ù*À”‰€ÌÒI¬´9Óֹ̂— }Z§ælj¡dÏÍ¢»ó]£Ï‹UY±¥E 4Š£ÅÉÊ‹J{Æ4ÄVr?p–¢ 1,†ƒ‹1!\Ûõû !q ˜6qYóõ;­{ù!7}/Õ:›üÚÉ¿¤”„“ƒÊiÝư·(¹L¥†‰:ù:[C›Ñ-„>8M8å³ÓZÌAñi*A„{ÁÚáW/§C úO‰{ržà+)‡—¾ ªRS ½ž¾ºZŸJ7…#h=?é9<œî-ÍÍ/¢£ñ¤wM d˜&œDÉ+_7½Ñšã4F¿Û†°>¥SîЪ|yq^ûdºÝq‹wÄ-@Ä1áÇÎSÌwaÍÀà¹åœÐðã¾p´:›í;Ž—òs…7ÒòjèÆ|G&2¤=Md¶ºøŒ0Cz öX³Õ1ÀûžÕK(ÖC|[“íFfI™àÓHŠÔvaƵÏ+&yz¡¡v'š¼@ïe?/V¦’kðfó X9{®i†úž—ï|…$ÇY$D‚¥ŽqØ¡ôý/Go–'q|G,]œx†BÞ_ü3SßçËhÌÉs<2¢RBðOÎ]¶CÔuÖŵ€c]r™FH‚“]KÐ%¾ŽÉ¸{K¤ãŒPÅ­½Ûø™ôõ•s[„Kx¤=Ê |˜a Âöšh»~Þ9Ä^º1PY`œI‹¯„°íJV/ÃV b{á<‰O#Ä’FÒóÜjô£…#AîØâ³–hv‰t7eâþXXGJÄ|TðC§4Q&Ù€¨ìˆ6,,©Ò1?çr…¾ :¬Ï&†Sjµt±"ó*7¿=e²·»h‡Wt›v°Ýýô R›êâqyÖÿù²|ÉmP48*6¼Mi(U£¬º]`!öÐlcà fƒ·ú„ËüÊ ­H¸fš!uøŠï˜6¡,R±Áß3ã>‚ø¨=÷8§ÇGB_ÀLVÅ.“°!‹†&Iÿñ{>Aò Œ9ØøC:º÷Eªd4ä—Õ€É~Ó¨Í#šVa4pÚ¢r¬5quã YïI%MçTCÈÆ€r—¯Fú¦²–ìZ¶}¶ë˜ß Š2k?ϘdAúàlþèù8÷´T2B—‰šU–²kj9¬ !Æ…Ñ(™’¹d ‘c4°ƒ.D9˜Ø9ba1‡,zp…£bÔîÜõâ)ØÓ:pìÎk\#ª7ÑA´‰„‡Écß„*ž†jHé Wn™ÎÙ_ap!’ð3\MâwÒôuÊÈÞ– ž¤v&ÈJã%= m¥Ó$÷m¦Um›ð]çM ¯Xãºç#½b•:ì Ð.J)ŠQöÁ•l%Ôtú`VuÍTL‡Â#µõ7µêõO-‚*r_Øó*‹(å¸\QdCÈahÅx\"àÃFH!›fK΋}·ãnؼ“šˆQµÖˆ·Õ È«óóbRCÇ-sût}ïµlF{‹ÒX÷{"@ScTùÕ¦K¶Xm~²S¥ûÆ×Ìú—µ²‡w•™”;R.@MëÖeHZ¹T¸+üZ~2Ž˜Õ&‚ pBkñ˜výÎ;mf”ÏTy¤¨ÌuŠîù-yþ›f™›%–có%™mšÓ×çà}Nê@êMkŠpõ1Å9¤]ÎxêòZÓ¿Fÿ ÅŸ±ã± ¤ !]m¯&€T±´gšx”*Ù‘›N‚Êk‹÷Öi)ˆ%$õ”P˜¬Ín˜}ø|Ú€³ï¥Pg¡Yx'61ëz©Ž-Ã<™zɲž½Übñý˜Óc\Óë»N|+êNjÕWáXã¼{Pý÷}t'儞§}Σ†Å[»,_§§ÇXíûCÈg™¢ŠâxYÍÆñjmUò$o_”tÇG\ï>£&ÒäÓ'ØLt=GÓIi·b@£? TJ<ÈÉÈÑhû¦2AüI.(Ÿ0ÕM«zJÒ¼L)#ÙõuQ‹r~Vmc¥£]Ö:¸ÿ+hF.w=·!Ù×X2÷S<*É Ÿ³ñN ÃÀŒã& Ó=² ¸ÿ©JßV-¬¶ÉÂT^"`’L¡Qÿ%s’@šK&Ö@öàÅfÒ­ÕH¢·@RpqÊÂU– ÖQ» ÀÛÍ}D19ÒË+« w!F£%‡˜€u×*ôè¸E‚ø^¥NÂW’x¨×Åt-(Õ×r’­¡ÇÙ¾È5Âføò›œeËkó»q’ä§ %œ¡i®å-Ïãª3}“]ä6¦vHtö¡žµ‚_<¶#¨Â()±”YÒà‹„|,A±I…]2çá%µ»<3©Ï`ôtï“’UE9 ­”N9G}wmΩš“;„¼! 4ŠÚ"›Tºê­eäÝ ¥ÖSׂBQj¥ýö hXP â¹áõ#y”¶»gÎ4t³xóºw²à.çïûa7¤7sˆ>¬ú¼{õj“‚J#ß’q”‰W«KÏ.³v69ß똓¨iüq½'G×™ƒ¢–ãi×<¸ÖVBó™ñž³B©à®-¨„K·µ„}·­âÖDîá`ïöÚ³?¥›ž‡¨621XO»5=ÚGù%, J¥ùý‚io_‚‚x#mN¶¢ ÿËÏ… œïDq_.¦nV¬ðÔReFfˆisýͺ‰½¾‡ú%´$Âß §¦É:¥iÐŽ»>DÕŒÄaHs(TqÁú’{GS3übˆÅ¿•!^2âpâ—SA)$Ò¤ qæ`˜<`Tç‚ïöI KeyW¸¯þy¸M¬9š K¡¾å žjº#ù./à\^øLHö ÙáªL7T<дoêÙEÑ|ÔíÝCYT”“7ãኄtþø#¨áé1ºúâ¶ ¢PøUè±ä/¿óü£°}_bHZr⯂_S¬va˜ß¦<òÑ…&§W°ÔºØr¸MrP&Ÿ3hgžªt[>Ý–´:4D)à•ɰ0̾Ö)×À€ 9¸G*ÂB7p…~–ý)ˆôÚ`ºM†Õ¯)ôg`û |ϱàš–‘[z2•Ä7*}w©ó”\¥Î|xúçÕ«w²ÐwØÃýƒB`˜³dÍû›sZÅý€œ:¢2Hû4éBúÜ?àc‚c$-#Ë·1µgFõÜa‡i¤Ëè ôÒÓQ·üC—›ªÚœÉ’ØÅ¶ÈII·CzM/´X…Þ¡yì0†©^•–2‡¨c!–_Ž©Ýy¡÷álçP¸Û²Rz °-ý«³½ ?‰m€…¬…V8ØÄDI?ß¡ÞÖXm/¦ñ/Ü`wç—ZÍãc›Ìø’i{¤kèâRž(øÃ»²ž¾³7Éïl ë[ª@K¦Þˆ?Šø<³8×Wrz׃¯³ž—Z–duMkâí<šƒùPUÃí¦Å­š‘Æ0cÞÜôÏkR,ƒÒ÷áZô¯èèf¯ŽkÀÁ•J8ZèêøxÓSS8Tp¤ÓàuÑ…“y€®Äy˜ÙùV&mj9Uˆ$޾ÛF~i2ËFBË7_I-̲˜g¾íª û¥*”ÖÁf[Ç`øU0Úñ£^‡=Ÿxñ/ÄwTHtøëãéwY×ú¶%íÚúªo•ºáۮ󚎆ñeTy›nûŒwå!_=㯘àݺÛð§Ý¸†{ì B”qÕXÜ×(`MSÑ«ÇÁg™=6í^þ¯jt±/eÝIÊôq3ƒóPÐÚ¶ Ù×]g¶½PŽôÒÊa÷e²øýçtŠäB‰`\ùë X­Æ¦û$Pá°Tô÷$’@Ñ´t“ŸZ„·2(­Q´¯kj ¼©¼Úl‰=òÔa,†ùˆJV Á”örm+Ìïqj— 3 ·Ø“_Vy×(gRNX———åcÊ1È-8‘!ÚNîœíåzÇ%³²Ûۺ̾çõ°ÿ¨^ëY2¶@ѯ¦–‘£K¥qàÅ ²Žë>ð•ÝPZ#mŽ1S¬˜ž¡l¸­Mk˸ñ½¯!q¯L$æ”Tܳ™|Ø\a9^§nÿáQ ƒhþ™GŒÙ{#YG´IaˆãÉœ¶iIÊkQANc¬^S΄:aäµ°Jî9}­ËÍÿŽÝI/0ÁÊ­íaÅB?.;‹ °€{£ÿ…¸‚ xU=­ŽžG9ЈÍàcmš1·4Ë­Ú¿t26b"ù ì„lM<±éÛ³» l¢\k2¹7W²C5Çä}¬ Í„¼èñ´Ïš1Ô# ÁÒÖ÷âr»u`ÛÌýöÅ’±[zª;å{[(¤`ÍéÔMš|À6º-쾨ÌÖvÄEîmC‹Ë¸©5Ô¹[+ác¹½s¼o¶òúA!#ô«ÿ^‘“ªu¾Vî×eÌ R§wˆÉ§s»×Á'eÇølBcžÉŒ„¬2îjM|€é¤kŠ=IˆW‹œ ´·5‘w¬j$y¦!‡ø˜M€ü8ÐL²ÍoŠ#ŸÁD[UHl‘Œõ–¤Ç[ÙÃb ¶{É«K¡QÏôGI³†g÷í”Q1îxñeúæšøÜ‘ýÃz³mó¢Ðq u§±MœŸ`{š)Å)| éÀ$Žø®?þ˜i†V³5Å,œ'ó‚/\[ÒKÏ5ô­’x©0øN×ðGHOGì§+þm“š³Q=‹¬ ÆçŸ$~ê+UØå5ƒd0j¨Ç…¸‹©µÌœö3 ¢Ô¤÷ÉËfìOnŠ.Ùi±nÑ“rÉMô/õþýè­R¶k{²ìšE³ñ»ú_ü¤Œ”ÏPbéèjj'·ªþ««.BÉ–­“SfɽÊ0¸Ü`S}ƒ™‰ÊQß¹aûŸH¹üR—Hl‰%/c%ï³ýä~ƒîÊY¶îùuaw)Šä0‚o'dÚyÊ`½»›ég7 kñdø˜úònA¸nÜó!­HmˆŽÊ5Lì¬Ñ0ÃúC¬Õ±ËH^bMß½h@s±e†oY³öñsV@®’JzH‡¥n:oºÎ)R&7夶ÌDù¾«q¾ºzìÇI£v¡Áë5‰4;LÏÝ?%¦^üHµ#ßwvELtÑ/o"Ò°u·†Oÿ²šþX¥¡¸iÃÖ3)'œ›HvfÒÀÄD‹$*ʆf5~ÍZæ§G©c·­Œ‰Üà ¢\¬&*º™¬®°Ìß´1j]Ò#欌]÷;0\-§~5롉ªÝt£*”oOäx—¾›#‘ÞVôé â 15©ÔyœÙ{KBõ6\Ñ/ïVTà$qCR’cq J Åÿ,êI C#){ ó`¢—ø‰s£Û1Мÿ»VoèI<™ˆíx,­T›Ò& 8¦è§;¤JóU*‘x1oÉ86‘³–¼m .Ð)SL6Ȭ&å±/¸GŒr:ŒÔ-/’I-[%²ñ8» N2h¥î{Ôýb¢®;m Œk–ÈpÂÖ¥If{Ì&¼ßˆè±¶eëÚÕ©rég$…Ê÷eg‹Ÿž6Ë©ªL˜Ùœ ²=Š/cqI"ËìOáÙm^8Ð÷x® ZíEv?ÉÅ ìÀâÿªøjè’(µWR&-è˜R^QÕ†Òn ÊÏÕþR¯­’1ßkÌA× i>jFœí]U4n_ˆ˜µ5žB Å }«Ì{5â®]Ì/ìUD2ÇALœÞ~¶Cz–*wÕ”Œm!_ú†¦¥VÜë](Ϊ¢5fƒ?$!©g˦ÔcwÙ^;aif#7áÓbEæ<íÝD¿!ѧ”ƒ¢ç>'ªI‚9`á²iMîÌŨg¸‚³êâýãÜöÁ¶¾¦º+ÖOæxO@°ö€œŒX-Ó'3„‡r¼f¾o„AbJ › ;GÙÔ;æ/ÝÉîÚRWî/Ûø¦Ì…j$W>F$žîû|"—òÖ¶KÁEYñän»4OGT:A¾SCîÎTŒU ÄßÑ1ž`ËTV´ýÚ s)ä~¢TÄôWNLY‘Iš¿ÖG.•’¼ä®ÙœJÁ꘱ÑT)¹ö¹tYºö‰ ß*Æ+Cc螥(÷3-€‘,¯¹·x~é‘£8ÏîSmôô¤Üúy鼣̅þK¸}æ¾hŵÕùóþS]žÕêP4qâ½[†TQ?NÿÒŸ¿fdN*w£ëCµ‚~]ŸŽ3ZWÂZð‚Z3€a¯ÛZ#UÖjº8MäkØDèIã•Y”¬è¾)ÅË&‚ãàÜ)g4õðfY½i©t`câÅÝ&¨ÃŠyÝlŠʼnT)¦0ã(ù á?XS)0q¥WÚJÄ>Gñb“ù°¯þÈ\‚(¦À…q)Óí?ÄqOuè] MÝ#ÑíÒ·x ¡½ç­ÆΣTü¸øÃ(ž3x],wøtêÏGdÀûýþ§3i@´¹Òpþ¯Ëäœ> Ï­Š’=»×©-°˜^’±êN°£;CÜìR[ôö@X³¨.GnI¨)JñBGþvH¦§Ø»OÌc|½Lõö~ž{$Ÿüô¼›å #‘ç±{Ú뾉2›EnUË5NrmåLú›}ËdŸkq‹æ$v6j¦º¾vbÅÅÖUBïèúã(,˜»¢ÞêJ…ê3\:Ÿ(ŽKX§Â§'×»°Ó îÿ p{ÚE¶€mç‰#‰i‡é‘uЙÿýÀv‘¼Ä@ìþFêé«7ûtí¸Ú-Dxk–©ÃÌb­Öj[^*]Ùª;î¹üšî%¶6‡ˆZIï(!×"1瀀x‹P]óàXˆXžŽ ­†f×2×Y'È¢úº4µÍy‘ c”|› A…CWpÞ¸™Ézù“ýŽþæ'–Å€£ðN`‰3J >qÔF¯ñåb"íQúF¶÷À°+Iá¶v÷¾_ {ÚK°à…Ê%bß NQLl1»íñÆU8Ÿœk¬&Àt¦F7ºÅ‘¸5»» ä1ðZÒ¶¸=yã _†:ÖÀ1 üARŸ?<¦-๴%J¬Ã÷\l3Ý#€xïóƒ3؈Õ=tåµ¾Ž-ŠCo¶ù+ï`¼åG˜å^J…Ú;©Í^Á/“B¥£=t*E :¡Ìï([ÃvÃ#Ñ‘]UÚpìSÊ9N-Ò!à}‰n?è›ãöÍjø±ÏŒÝD¶ë¯_‹ìF’ï’VŸ²×íQ'0•Õxßž”DmVɇÐêÇ¢S=dî–9ø]-Q«c•×-+å˜[Ÿ\~ã@·w„(¹Z(F¹w›â›¯€2ÂæGi¤5)îò!dÿü2¾±Ì$9»eàÊF²zß­så±|$ ùíÆŽ#‚~mº¨%ÿcgÊ•M‡×;°yü­ô®4ÃH»‚cÐ2|8g›Ý÷ÇÜ ªq¹ÉÍú¦ÁWnóšÿéPP=á+üûûS¤Ð™±ÂJ …<á­:`ú'ØèHy5k÷ÔJw僨ºÀ‚aÞRæ /Ç 1íbš´æÏùó:@jÕĦW0R+7¥¥¬ŽÇ»ÍÈØr̳;¡óÝsÉÔ‡{.y„,ݾÛdrj¼T%«ÉÜ U»X;A¦‹QqT´OšGLÚ7â;¤ãe³ri^­Œ6²Ü’‡içZfõ æÛe¡«¼n^âu= N’Rª€œ+åæ…šø¡j#ñŸˆG&më&ÎÁ~~çㆥ@°¯:ÄÙÔÑ9±n°tƒè¸e»ÂiMíQ©4vŸFŒàù•Územ¢î#!äbέ¼NFÃ~9ObZ¶7¢¾ÿYfßnóÙ¯Mryy.-½YOÝà™r/ øJGLêG~»˜…Ùµˆ~c;d\ 2ú×Ù=èíÜ i"¸bóþ²8 ×'¢£Z—³n§<þ#ÓÓõÃÅÜÔdÓÖë‘avÿ”¬_X¨àŠ0NiHª4¡#$™mZíGšåY>±w>²Uz\tL»×¥hgë´âƵ³ìC–ŸÛ}Ï‹ˆÑÔoÊ—x9‚WbZœâÁ `åÔŸà½Ã_Í['ãæNÇ:ø¹t³Ê]05¢/ßU'm sbÊ?q×+ô_/}Lc,bö%‘y`Š'Q—ÄžZ§Í*ɦc  –lRò.Q˜~iªÍ¨„Ãß²ý±Ee!½ÕW[¦€Îlü¨½­»‰%Æ©DZ4§|@¡‹_FˆäE‹PH¤0nñ8ù}YAÁbsøQD"šñ§TlqMb{ØÕ„oj†ûg±cûøÉèÍ‘~Q.CQ®¼Sî'= ”r( 8BM@*–}äCZA¥š­‘¶æS̰‰;á!þy E¬=ˆŽ‰UøI\¥ëGŠþò5õ H—õÝ¢@inꆼGÅê—–‰XŒ}g?Yrñs÷ÀY—Zúo ¦ŠèZͼvómù<åè ¨Ž¯ä¹¾ò)Øô¦ø3Ùöè¨KÖÊ)¶Ž®ýøíØCî¿aF€š%°Œ|żââ+Øâ&³­ÐÒ%üÿTïò`Ñõ.GJß“¬CÃp#7‡þg+ª¾#3ʇE*Š2g•›41×xCEÅ•D ‘¢KDD…ÛàÍíY —ö¦èìxú§÷·ô¾õÃŒ§­à¾–îìN¸§¯šbÕRµá .Ý—>úÁÊn»Ó±×à–¾§ß%Kg¤- 6­‡]§šUåô%Êäæ%‹T=&§ZÝþÌVBQ³¥Ž¾OR}Ÿµö}Ql@o—š£iÁê™?Ý8%ž…ªÚ¿=Š^&°½,ÃË\§jmå³²BFïãx¢ÏÝ„ñg0ø†c¼Ä8¼Äs¢@âê™Ñ°´bD†¡ÃçdUx17.£ëW¥ÙèiÈ3¸~Ëh%ZúV _U5).M?7»§]ÙûE½éêw¹|Yö}U8OdxaÊάdž~s½ ßf<Ña¹ékÀ)ø ŽB0…‘¯º ‰tÂH­#»íÒM¾¯*óhg‰j@àÃ^îÉÆnò_è[B?&øÎ¼ý™C–Òî$§ý\jzñÝ\q} -%±RÀ-òZ·_€­ô2¸óP`@ûØ0[“™¶Í¢ßDPÆ|D‚B)O—(WRißW-ác=J“,5>»ö] *f@3討¹wi(SzXöê¢ô^´TP³éS½s‚ÀȆÝE^ߌYå²ê{¸[=o5@ù/Õ@é8C îLM Þ¯Ô’ à‚z{MdË¿Òv°«Xðд3w Õ<¬Gaâý‹˜ÔuÄ3äD4q”Õ^––«ú€Â– J]˜PñŽý§hu©°Kt-rm;Æ‹²zÁùèÜ–œ…Kaòë²g[aüª ?Fⶇ³I†3¤DX;ñ±2Vcy˜”c¬ÑË·ôÚ†s¦R«)é ë•J>Fº%]O¬šf>“ òb$ýñ½Áד¾¡Þ {P¤ËH€àÍ&rIŽ•ò™]ù~¬JùL½‚°Ó½ÙøUr¼Õ b}êÏž«U“XéÚKDµä™Û­Aê©ëk4ozW¬~ª%Üј5èU/šØ…ùæ†e׎Y&h)oo!ªýpSœR}¥Eö1‡)¶À/‚r3J$ô‹=]õ 9œæ©'%sb˜füœ*´ER™±õÃh]Ô´ÅšN«‡©¹‘¤Š«›*>ÚÛ|‚Ô¡Y?¿ç³û«&}P§ê¶¬¦r Wõ ’Ðwòø(ñ’šwûb²Q{4TJ×$Æ_Ó™¸^’¡¼ÐýÑ ç…‡ Sá|r®ööô@–ªÃ[RQei®m5s¤UŸŠ.7(#žj¸‹Òªà ÿŒâõÊBɾÇXÝø#¡öÒ3.ðƒ ºnÑ(+];ŒôfÃ=*3‘rÝPù âu<]+âs7íþ1²2VÑÒµù¦àfÍ:ý¼É cRvµÝîÁûî)¡û D†Aí…ß#íçÑs ëºÚe¬[mÝ*¥XY–æ*óiÜ5{c („èÆ§Á–ׯ&6• XÜ¡fÜï# «ê¸§>5b[&ºÝ3m½ý:µ’4\MJÜ;m|Ä×tòvªaOØö3»Ã¶cq0«Žº;=Í*ºtg:-‡Ìd¿ùxXÊᛪçÌ=³jmÍ?‰ü  yƽèüìÓäà&VþKkyák€<†¢Â¾`¬ ð€ú< O_ó-c°n°äÂ5±3såñÓJ8ÑÔF¹‰Æ•î½| G‹ neš¨+;lD¯ðRàâè¢p7»$O£z"F ±Sž_åºå=©Ñ Gå×¼µ b}YÕƒä®,ÇÒ»w¦¡"“ÓK>¡4±‚<ïÄNzôaÒW Ê®†Üî¿xX’° 牃ÕÓ§‚i>Ox)ù›·X¸³âWá—!íYøñTh} ã¤ðÌAÿç·:“ÆÃµQ-|!Iocv÷ô]蟤?F ÅN’1Ðhº4-ïr’ˆÓæq}‚SÁF-îÞEÃ3ö”Ìù*~á#Î1#šÕ ‘º]7H“ùç<ø²|—–À4‰Öø dù¢Y*t4é×võê” ˆg('FÉmï–Õi ×q€ßÊ»f i/FFh“LŻ𬹆¤U±WÜø31Ó žè–¦KíÉðÞnTÖÔ:ÏÞñ±• þ|,í‡rÂÓº}ýké9e[AN+úªqµ÷×éàcñN‹ÖÙ<ä‰S©Vªzal¤öc§|2*ܬûv#†ÂºlÍXÑ?@ÏUÀL²¸­+úiB¿«ögЇòAÐØ)î[+õaÀFÕ©À-¸°c=Z•dçTá±Ïk_+kI§e¨sš¥ç[>ìsX0Ï·‚F{NaJ}ú[õ/õ)’Ê?¢åš{÷øõ¯ 4»‡›Eô(û>Ò¾6‡öù–YÜÉš‰Èi°œ¸…jBíîfö1ÄzapÅ¢>öo7Q¸þi F™ìmÉ ¿J, ¯„X²Àg|ÓTÉ%îIÑ…Z7äïCÑw““¡Õ¡¿F"ÆBñÞ'œJzßDÆì¾É ç1]õ9Zr^eEøF‰gAÂj rî+ø<1Â^5+𝻸¸T'œÖ½œjÄ›•á°[] •hzZr*‚@NcGÛ¥þ FûBd[ØCÚRgä‡åI1NøÅ»ïç–^¯‘—HÊõ"Õǯx°Ë1®þØÓAw¼½ qÓ­î¹C KXå­Êjïóa2bãŽ'Iê‘»Ì<+çnßêgþ ö/ˆä»A+¨¤‰¾ÛG‡x4ýÅDúúº&,öÅÜ/?áÉ6«Ø6œtE`Ÿ6bÕÞOÑçe•Ž Šˆ¥ØƒÁŒ˜A#~Áw÷òÑݤÅó²ÇºÌûŒ°.þØÆÓk°Ü±I¡†€HÜø •e½Îl¥L_‘“Ý}"ßþ¾ü…»'ެb>æÝ·íEb²÷áÿOãúá_¹ƒüúb£"}3L9Ó‡MO> h3#»–äaëLŽÔ”þzqXŸÄ·WÂí©^›ÉÍÍUö”uÑ$Ý¥ý©zwýuØL—"§Âîäö)%#„y™ €ÿë@ö“ÞOÌÛ›4³xðÕ`W᢭¨õ,Ì ¶óœ\'^³¬J3M<)Yê¼ók½×MæÎÑžæ3¸ž“ÄT]ô÷ùGJÚk¸Æ:ѬÍr•È¢‰õ_Jú…‹>„c[ á* ïã‹XŒdбX¼ùÎCh?¬Eòè“L½ð{‹š±š™ÌÿÔýPN’Z-¸ò0Žü¢ÿEo88Ç ˆò\`3bÖ«ØÒ‘©ñJÿ!®@þ»qC!;åDk´õ ³ÿQlš¹wl9«‰¾<„z¥E1”3$’¨ôéIVA?ý•ó,BJƒx™AÍq‘EüEC´fþ£Ø‘ˆeòÀ«5²ÂžË$ÎS Ì%D5­ëïo71Ç÷ Hbn)=3¶*)ÐÚ`¿n›C8ƒæN¥ÌLjÀ§Càgµý»… æO~‹y@ü "Tifj^8ÿfrh˜® )3~Å·ºÀ®ÿ@)/ËÍãhu{[¡eÐsÙwG½wnu#áø,ô>·wAìÒð1 ND7µ¦0]‘ R†o ÿ;þÕ<¨ÉnîÀ¾‚oÕA긪8VCÕ»¶ž~‘ÕZl0c¹±8mÙTG?àÖr¨E£„øígÍ`¶OlÙ)’ñN*ä°Q/À.›”!£µ)ú4""LT)">týxÕsä‡pßÔ˜áŸÎ{’S³h”©ÜibÀEÂC…ˆs¡‡½®J#¹Ûà`JÚ(³Ûƒ¡[fç½lç]çžX˜MåŸ1•öiÆ_×€÷æy>¸yøþí1Ê|S²5w‡Ë>Ægm2žYm^ôWŠ(K¾ÎA2g8NʽÛCȦ–¤4ʼªv#IT ]ÆzBù¨<Õ)Ï©‘O¢ÕIýÞˆ^âÛɾRN‡«d‹‰B;MЉý-¡³fÈW‚®¦ÖÉ´=yþ€rÜ£¬Ù‚”Oí²@Õ~Î×-µ0F¯Æ#Íìso¥B 8yi9{unÞL9ú+ÉÆ5S „©0Ç|íNRø~&Àö^nÕ8äf=r§{jTé¶Ès2¥VJ.:ãÕ¤ÉPœ N"bÖF˜^ÈÆ H"ÈŽkÅ}ôϼ=]ÁúcB>FÒî o> stream xÚT 4ÔíÛ.þÄX‹¬•ßkÉnû’}ß×H¢1ó&c†™aÈ/Ù BZìEÒbi±¤×^!ûÖ‚Aý‡´½ßwÎ÷9gf®{}®û¹îGì/k;Y4Á4$àɲp9˜ gaoG0˜¼ †€ˆ‰ÙcÉ8ð‡"v$’°¼ÚozDI¦Ùô‘dZ ˜úá¸<WRƒ+«Á`SýH ªúH,°L xÓ#ø±ždZŸ ”$WUU–ÙIt¼A"…ÄH²'èMëˆBâ; ’ÿ(!¡áI&û¨A¡ EéM’#=4%e –ì Ø‚$è¢mÊ€%ÒÜ¥&ì=±¤ï;†LAA€fÀaQ žDKñãA"@ëØ™˜V> þ{°ù÷`w8\þ³Ünöv!,~'‰B¼}ø@,ÞÀ`q `eh.G ËHàŽ¾m¦q ò!ø 0‹i? ÒÈD?0$èwÇŸ‡h,Š ¸ƒX<äWušÄ|Ç´û'b€“0šüàlûóóß)šÂÐ<.ðWøÎCÍõ--¤w)ÿtêê€ Y8 ‹W €’ª"òg•Ÿüpß±Z#±»gƒýªg‚ÇÕïh³ûAÃW»K# üÙÁ’@S3Hü¿ L†¢}Áÿß+°“ò¿)»Êÿ)þŸÈЇÛñK|ø~¤7¸AS³™¶Ú~àÿê~_g õóþ·×„Œ¤mˆÞ÷sX’!6D[cÉ(ÏÅü¸ZuZHØí÷…Ã`ÿòÑVåE{SH´ËÚq´ú³£E@o¯BQ @‰È@Œ¦/„¢"§í( Ø‘6•ÃÈ´€Æ.Àˆí+UR úÛ¦¤¬ @-~"yj÷©Ò|ÈŸhû¬Pôo@Áß "ÅþU¨÷/§å⃴\ÂOHS.Ô×@Ñî¸ßbhI¿A%JÞLåG$ÒŠÁÒFõï¼J ¢ oz (õÈ3w#®Ð¤ÈN¶#Øš–â¨LŽüþÓ6zëËòñý: ¯¦â×GÌ#n}»ïåÄór ¾¯Æó¦ê1Æ}\&¸óÀ±y’¹bʬ¾Þù´<íÁ󱯶…BÕî‘ä•ñ]œ|}uÖHãhMÙZ©çÇ}âÕ r¬tí‰ñûøTTäYé"ku®Ö–éÞÑéyUg"JZÒné°áìú•Æ—ű¦"™½ØwWçæØ|̨Wç43fž* ˜îzÄ&žð}I’ˆ >Ž —p'ýcT¨ €±_º?_èg%N¬yw¸£¸1Þ­Eµ·]PŽ”ò8™<)Ç1`®ËTöpŒˆ¨fJ²–x¬qBÖ ¦3T×£¬mµPKäIûšISý¢ø‘öÞ>‡N Iùx8—¢×{Û×(¡lAÊ"õC~CL»¥þà<ílS£ÊêñVŽeÚJ.­,‰4´¾»öeX¢;`ŒÁýD óQè¢ÓZ~þPÔYªbá†S•KÏz”Æþ¸>ÃöC GÑiÙ½¾úDa© +ʱ7¸r[nøsãO”§£ºi6¢5Ëo¥¾–{ØŒŠ¸b2³) Ƀ‹¯CЩėnokλ–ôˆÕ”²=8;”F¥¯$7´ÆÏ0ã/¬Ú„Êkh<þµ^Žu@àÎÓ9*g]ÌGú¿Ì÷WodUd9• Fwð 2ûF_ö<ëë|¦+×¥RϯŒÎª+ü¬'w“Ëè~ Ú²NUǰI¹T»kgˆO}HïÝêÒ¬Ñ5ƒ[ï%ß .GEb2#}YÎõ¡bòí†Ug8ÔœWųÜìaïBp3O×Y,MÝÛ¤Þáù:Êé¹6ÄÌߥ„0^W^L-dŸ‡øã<3'¥¥Ÿut…‹‡(ó‚ã+[¤û]ãÿSu½A ÖI.³H‰ d¸“£ƒ«›Ä­Zk–ÄÌTQ‡¦llÒÆÆcó´¼ëÊË›R¬Ò3ël|³/¾­ï}82”¼ð¸Ò°¼'g¸ÛÉ…K-8ÏÙÅUýrzãÄ©ÄîL~ö5:þ±'ÊÕnLÔÊýê1“‰ífÝ-ÓÏžÈ¸ÆÆ&~S)`ÜòºQÐ{1ÖÉ{ÇkÞ¼1g–åt¤{RÄ!ËέË 5 Çj÷ŠîÔdÒ±ùÍ¢|CGM#ôªÕÏX*vpeÉkž¶šnn#„/e$J²+Ôlõ{þ}þ­ôe½[˜hKJk+K„«%–A{EMÊñ°æ‡Ñ€Ç¯È]sî‰Ù †' bû"f{‚Vsgóö z1³”ÒÏZ4áX’A_Ûv~âüRó[|µöã#KÓ"~·?WÝg¯|ñéscÙ‹\’¨¦JýÔ©ÃÚ3UAš]üq ¾GR-fðÆçŽëÎB¹Ïµ5:ÉN²óõ?²ˆòZhÞPà 67œèuÖ¼½"¤Ë¹mAAl-¾r_ñ˜ª13¥ŽY67)#ö‘bó`HÔqQÑëâ—2Ë ¯]©‡¹£ý9³î÷5½¤:tBx'_|I5^{FŽ œxÌjq×RlµÂ¯›‚ë]™O);T½¯¸OäCð† x¼'¦@¶2×;ô4ª±i¤ò\³YÐDjàæšÙ¯ª¤’Î/aWs¬‰¡Ü£ðnBJuf›'´iZ²¬D·àpdFSÕÃAm¦4·Üü(¬ƒs15ýìç)—fêh+75µÇ}œE÷‘ãÍò5ŽÉŠàéòµ–tÀJ¼kóÞáÏÀ2ck{¾ÐßM<ýÜÓ-,]n Y£ÒÉ¥mš’]á¯lV5=MÈü(+Ö$ö8¥t…¡¬ñëùbèÀÚ Ë+‚5þ³™›ú²]°'bϋܦò—sö‡9œq¶Ùz0= ­ƒÉNfÑèÇSó†]éÕ7“OÍf§N\á¼ Õç³åNʲG¶DžÑ[kÈœ ͘Œè<70"zpä²S¶:s¶$#‡ô›ß}#[Vö 8žÕN¿˜8¡°wMFú“‰ÙmXNÓ¦ÓŠ¬Á½¤í‡då¦×ç‡{bßø·45B ³B…ßkìùf¥ÅäûûFóõgì5 ¥CVJa*µA=²˜Q‚¨Õr »ò Ã"¢ÀHùÕVš¹YëŸÞþýo£L¼S÷öMWº úŽL|¸áÀÚ"yAÁÑ—Qéijƒ4èÜ=íÂ4ÁG„WÉv¾ý±Ãå1P#󪇞-ñkåé-Îà”-xµBý ÇðTßûK¥_-ñöžùjº58¬íÑçÒàËÛ×ÛcôO+ Ëb_æòKꤾ›•‘c,åN¦À×È›Y=ÒøèÒtÇ{œB¹:‹.ϞܠÌpœ÷Py#ÔúסKJÇUWÔó{b7ùò“(¦Ã˜×§SäúÚÎÒ/ÙOÙ1)+ò²Eä-œÅ*‘6o{DG¤<¬¿yÚÖ%±=Ä,Ž.½ø•bãQ„‚ç’k¦yѳLepïÏË*ó¶/‘™Ï^óºl§T^ÅÏ/½PYýáµkûÈO—8.ÉtÊž=†´g"fO’>ÑwøU{•TQ|`‘ÝÚÄ ² Ð5bjéÊžy2 ýpÒûÃ;Ûøu‡¿Íz½J!¢i=/ êÎ…-5'qbðc7¥ÇFÞÚ•€LÕ—'5mÒÐožld+‡Bèl|+Bž×¾Yp^‹)bÙЕ8ñÁ jˆº\ çÓË› ®6 ¹õ,ǺšÇ¬Ò?—ÖŠŠ4œËYm¥HB¾ä»ò %DuŽ®>?éÉÚ¥íŠX3iy÷l%¢½ÖÓnæ ¸ô„K.þ–Ñ—:\ÊYèÑ)ác§í Âõ\’—„›ôWÝín×8H7hÕ¼€èe/±PJ—F¬o¡ó‹ÝŽÙBcLç¦îk+´Z›à6ê>œÛd,|tiœŸÍf™±ÈâKL?kj›gþòמFVOV¬å^Û<‘>3º*Ç©£—¢¾:ºW ð ü­Rý=±~z£X­3¡µî¢‹ÝY]чôº‰ÅÂõé›ë8?¡*Þ2l˜šXËSýÞºUÜÍ´–Núy ˜ï©ú.î«.G©ÃŒæ³3ƒI9†›¢ŠîOÇ=Ÿ†iåg±KÂu©&*o­S½è3E|›#äÄ;qýFâ• kã é"™Å÷¨ÊPaÄÕ¤«Ñoÿ3ÙÓá*×é˜»Õø¡6YæÞüÒ_ã3G ü°šjQ÷½?d–ñ¼7©[„ÅÉ3Ã1Ž})a•êP›>gç ”SÆÛìaï±Qÿ´ oðýzÄU³‹„iº¸ì°N̆»MžE2±,õx«œƒõ‰´eH>ßi£zyÂõâÏ9w‡?9¿£S“/º=áKîKtÚ z(–”óòÆÜ醦"{9xî„€DK1Oϲ‘kf’÷ó=ÏŸ¸ 4}2cR^‹iR–v®És¼€` mPí/ð>Q椔g[xSÁäÓµáö_ *’ endstream endobj 292 0 obj << /Type /ObjStm /N 100 /First 880 /Length 2890 /Filter /FlateDecode >> stream xÚíZÙnÛH}×WÔã Ví4àÄí$݉ã$ÎŽ<(2ck"[nIN'ýõ}n%.¦(o˜—iÀ¦.É[§î=÷ÔBQÒ{&˜ ’ú°ÌG¦B`Râ3¦”`^0­îF¦Äe gúôÌ Å¼dN˜Äeg4“¸ì‚f .^á3:æfZ,]cÑÒmËbTøŒL 8‰¶Â“áѽ”¥$ 4QÊR@Ô%œœµ€³†áñi4àî`+œ ‚ B¶– ǤCzÞ0é(†Té¿çPš6É¥´)ëÒÆ¸&ùÐ øá|6~],Ù'Æ÷ö?*~,Ùº“£ŸnŒNŠ„‹óåCÂRóU,f—óq±H“Hºô¼8žŒÎ~°OÔŸv¨<”dÀGüŒÞFs@0’+¹×R†Nê){Ñâ*3-7ô;ŒÈf;3c/W©©1vÌ„«Ì¸»2ã¯ÇLÓÍ)?¤ñ½ÍÏ74 d›Ÿ¶fèÚýv2][§oI.ÕUrãÝÈ¥UìäÞÒ ³Ü0Z¿ÕÏZ7ô˜{¶ù™ ‡˜Ÿ¶úaY e¶úaêxÓy¥VÞú@ªØ­ëkÚõ¥EÿŽõÕ×+œnÄ8»ÕÏD3 !ÜÇôskÒüUÒì]Is×#íVn.†¡Ç¤¸ÕO¹!|·úQ­P‡ûq >Y,ÃŽýsü¿9~|RÞCúT8b+Š”ÿqjiƒÿÏÿÿòŸX¯jpå?•«ó°ÜÚÂSülÆÂ"aÒìhÊ^ñ8‘SÙ)¢Ò0䞬VB&…“AMò*íxN7‘®ÖI°ªB ©ïìSyg“Ž:¬£¨ü2‰¦l§##ÔÐÒ1ãçc#†ŽrUe&t¦ªòÐyjHOÈ»¨òrr)“Y[u/Úåc‚¯ß«…×§§>}åãf}Ñ“} ˜JuQ.*¶UI]†´D_ 8*¾­åé ö˜µfW‘ç¶%º®¤PâÛL'=¯º'If]­m[5 ®ê*Ù÷¡+%)4ë*¤OW•& 0‡Í±N„$R´®ŽZ*:MCÍ‘½éL$›¢ò|„Ô2øÕ}h,ЇV¾¾ÂVeeÙ;Û•—Iç¦æQCX[ý^çX"Ö"KhI¼§#ç\}ŒT“œ'ZC†:Ð$h yGª²Œ)ÃyAdÞé‹牦äP èÒ…D$ÙAGÜ¥rø œI~1qèTiæ£ U­¨Ÿ:õŒ¬q4@T®Sú”iâ­Õ—®6ª阯䪤vkß|ßXŠÃ E(«TÝË e»<’êªý6í$÷ŠÅx>¹XÎæygy0:ÃÇ÷^>ùõ?ž?”×§£“3ÙáaÚu•Æ$}qgËwcÚtcMÀ&~tñ¤˜œœâ48ìm‹|oGÒͧËÑt2Þ=?™ ð¯—ÅÙ[úrjÀß—0H€q:šÓvõ_|—?äÏù+þš¿å#>æÇ¼à_ñHÀOø„ãS~ÆÏùŒ_ð9_ð%_žÎ‹‚_òïüç¿sÐût¥¥«? lãàãÃý§žï¥ê&[m¾H‹÷DBì!áßãûü1Ÿòß@ÈÁùËDÌrÞñ èKIQ‚á_ùWüMð÷¬MWÄòÓŸ§ÅyÁóÉyg8^ð z„š_—Ùš'¬‹b>™ó?.‹År2;‡1[Ç_¦Éou’]©‹â;:XL~¬‹²üs– ó'ÿÁò¿ø_Å|Ö¬Q¸I½ùíÉÁjôüé&¡êµPMØR#ÝW£iVUòªV$-ëEÊ52Râ&=>Ü=8zŸ3Ú :-W)wO9{£ŒÔM2zñrïÙÇÇÈèÕ¦±JHÄ»$´F.nL‡¦G¿ÖFÒïüÙ†ÑôžX¨ñl Åggg#Œ®ãÙt:š¯Yq~îé'gu¬îeð–éÅR ,Ñ…¥+¬^î}ûU”M,_qïm/–n`uqïM…%û°\¬cù.î½Xc9ß‹eXº˹ K÷bÉ:–‹]Xjec–õ ,ÛeC…Õ˽mpïdVŽíåÞ4¸/£laUÜ›^îMƒ{ÛŽ©¸7¸Ï­MÛ¦b[ÇžÅÑûÆbê+å:ÊrWa+¥j-•RWEÑÍ¢¬:ɹë®luU-{«FtWtUåû 5èŒJU5PºªQÕUUDÆ(ÙP¿êR¿¬ˆ–}DˆøU—øeE»ì£]4h—]´ËŠvÑG»hÐ.»hí¢vÑ ½z–ý‰u\· endstream endobj 350 0 obj << /Producer (pdfTeX-1.40.13) /Creator (TeX) /CreationDate (D:20130319133400+02'00') /ModDate (D:20130319133400+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-2.4-1.40.13 (TeX Live 2012/Debian) kpathsea version 6.1.0) >> endobj 334 0 obj << /Type /ObjStm /N 22 /First 179 /Length 1540 /Filter /FlateDecode >> stream xÚ­XÛnÔH}ÏW”ö%ä°Ý¶Ç–«(h!Ú% ‹´€”»g¦…íÙíI†¯ßÓ—q<ã®0m»êTõ©SÕv ¤€òÍåŒÂ8¡,§(L)K(Êf”…Ä’Œf3Šq“±„’0ÁoJi8Ã/<óðˆ±ŒÂ0p#§0‰cbq@açX„ŰgqDÑ AXŒa `c—X„eY`‹<ÁUl2vÄâŒâÈ<V¥éÑ“'GßJ] ƒÉ_=>¥µ}˜äÙÝ$;Ï;h ´ÎöielÊØ§ð—l;=$ôÇEÈ|3ÕÃña˜ìB\ðZtôáÁÃð„R›"=0ËÄ/ƒšÅnávê– Ë™[ÆXÚ?!–¬¥Þ¡áɧÃ( Œsç—8pË–¡[fXú,òÓMvyÚ Ò+ÿç²á­ÖBµTЍh#ÚNª¦ûó½“f‚ˆßë>ÉöŒ7tN¼áÕ¶ó¾[‚c¡àDEÅ»ŽJ®¹‰g.UçS¨F·rÞkV±ä1bÑØhQÉ5ЉßÈŽdä!4’¡RòeËkøDQ>öYñ –7¥ªI,¢ÐÖñ:ÝrÙˆr ƒ\ñ—ª‘–žlŠuÝJ$É‹B`3»\©kÕI­Ú­M;»õàÂYû%/ŒEòþÜ}÷+ù¢°yÙ Y¾GÚºRÚ0ƼjÎl ÎçüÁ•}]£þH9÷ú=Q·mÝk‹fiµé1ô¶/Ô5¡õH4Ùª¦Fò wZuÝQWðJ”& ¼5Gi¡3É›B оâÚYÅù­ÔI—ÏNÁ{×WàÏðB7!¦ì~ƒˆo"Oøµ@Û(Y¢F½Öhš=EA•ëUgu™ŒÒW4ïeUúú-ZäÕ©¾…¨lWF{¦…QÜÐA¶÷PÍ5ß1o+v £l߯¨³ÕÄt9”ÉÊ0Þ³3Š*%ºÄNKÊ–Í’ºm=WÕaËÙÉÂí-<$ü˜ùÅè“¢œÓRhú"ZEªiSÌj”izôÒÒ w )íT[ Í_>{>R?`}¯¯oK(‚kÚªrl¥i!õ 7+ªíL»v}»à(£ÙÐ@]#Û©¦Ú3éóClÍݪµ-–f{á­qÓ×¢•…-­1OÌ °»reï´¬*l¯^WЂAŠãÒ5Çv=»/D0íò¬ÝÐÅi×™ôê<Ç-Uö…!ç‰dçài§8sZ®ûVX M³Ÿ/À=¦e¶¦ ¤“˜Vf‹–´5f˜¡h­Ðèª1éælØ’;âÞ¾?¿xóúôÂŽ˜ðà!§çNh¨ò»µ?ÂV˜>>xþîüã‰=o›ÓóþjˆiŠáUõÊ`ú1‡]¯TiÈg~\¾ÞižW’wh—a›™Ê&<ÿ÷E™ü¯ydF±¸±Ú‚õ|;îC~c•›yù¼7½r‰ŠÏ| §ÏR¬ES¢?Lü<™šé:IÃj}å†B'쫈=Ùƒ|ä í¤‹÷ïí*‘£ûÊ_ª¢· k‡-ßpY™ˆ5œœÍßÉ›ð=B8´íy‹BUj)ѹ†Ït·S#ØÂ½)I0è'”ë ©ÅaÎö°ê±uË÷,rî4*MfÁ£ÐVåöNç$½u.%tW#M¼!™WÆáTrCÝrno£³.…7ïl¥"3ge³¨zahw/d»QjÕëí?3dî,;å'z|XÌŸ ø[a&e, L.ÀaìK½¢«+3°-ð†j5„ãB”ÇÇfÂ]]ý™.á@ùƒj¡Y›Žš©¿úëÃNÿ–èçæ»ÜÔù7^æ'™ù.w¿®eYÜùÅóãÞò“Ù|Ì»_æãß4;5^¢æO wmý÷Å{& Rû—‹ñ—ðv-èñ0!cóldΘÿ¦~Õë c¬}[å²8Û}0/ÅKU§ÞÎÚ`ÿì\Á endstream endobj 351 0 obj << /Type /XRef /Index [0 352] /Size 352 /W [1 3 1] /Root 349 0 R /Info 350 0 R /ID [<63364FC717E327AA4445973BE8C5ADED> <63364FC717E327AA4445973BE8C5ADED>] /Length 784 /Filter /FlateDecode >> stream xÚ%”GrAE+[Þ´¼÷vä½’@ /(„$„,rKv, ˆ`É´ƒ ‚¬2Xq ‚pŽó>›õõtWeæŸBøk!” É×,òbHBH $ ë|ËzÖ3 æÀXó3Ú½Çù äƒPŠ@1(¥ e T€JPªA ¨u 4€FКA hm t€NкAèÐúÁC`Œ€Q0&@Ž…’QUhœKÏ‚™¬tvýx^€+vó@( @'ä‘,,ªVS`êF‘7§³xÔ>ªºs`o/¹ñ8PTßÔ%0 (which is not at all the same as log(x+1)), and vegdist has alternative Gower function that skips double zeros. Together these implement the "modified Gower" distance of Anderson et al. (Ecology Letters 9, 683-693; 2006). Feature request #473 by Etienne Laliberte in vegan.r-forge.r-project.org. - model.matrix.cca & model.frame.cca: new functions to reconstruct the model frame and model matrix (model matrices in partial models) of constraints used in ordination methods cca(), rda() and capscale(). - simulate.cca & simulate.cca: simulate the community (response) data from the result of cca() or rda() under alternative hypothesis. Error is added to the fitted values from ordination. The function uses either Gaussian error or permutes residuals and adds these to fitted values. - spandepth: a new function to find the depth of each node in the minimum spanning tree produced by spantree(). Feature request by W. E. Sharp. - alias.cca: gained argument names.only. - metaMDSrotate: a new function to rotate metaMDS so that first axis is parallel to an environmental variable. - msoplot: uses standard legend. - nesteddisc: new method that tries to find the smallest possible value of the statistic in tied data. Slow, but fixes the problems of the published method. The problem with tied values in nesteddisc was found with Carsten Dormann. - contribdiv: gained a plot method. - rarefy: failed with one site and many sample sizes like rarefy(rpois(10, 2), sample=2:3). - meandist: plot can draw histograms as an alternative to dendrograms. - plot functions for 'decorana' and 'cca' and friends and 'ordiplot' use 'linestack' if only one axis was requested. CHANGES IN VEGAN 1.15-4 - Changed package dependence: vegan does not depend on 'ellipse'. - anosim: user interface identical to 'mrpp'. Accepts now data matrix and finds dissimilarities internally. - betadisper: fix removal of zero eigenvalues with non-Euclidean distances. This may change the results slightly, but in most cases the effects are minor or none. - capscale: has now 'fitted' and 'residual' methods, and 'predict' works with 'type = "response"'. These return dissimilarities that produce the same ordination as the original data. - indpower: new function to find the indicator power of species to predict presence of other species (Halme et al., Conservation Biology 23, 1008-1016; 2009). Closely related to the the power to predict probabilities in beals(). - mantel.correlog: new functions to produce multivariate Mantel correlograms (Legendre & Legendre, Numerical Ecology, section 13.1.5; 1998). - metaMDS: accepts user-supplied dissimilarities. Species scores, data transformation, step-across and half-change scaling are unavailable with user-supplied dissimilarities, but random starts, PC rotation and scaling to original range of input dissimilarities work. - nestedtemp: row and column labels can be turned on/off independently in plots. - ordihull & ordiellipse: new argument 'label' to plot group names for hulls or ellipses. Return (invisibly) the data for plotted convex hulls or ellipses. In 'ordihull' this is a list of hull vertices, and in 'ordiellipse' a list of (scaled) covariance and centre data for ellipses. New 'summary' methods find the centres and areas of plotted hulls or ellipses. Argument 'draw' has new option "none" that suppresses all drawing so that only the data for summary can be extracted without plotting. - orditorp: works with reversed axes, like with 'xlim = c(3, -3)'. - ordixyplot: has a panel function for arrows: a lattice variant of ordiarrows. - poolaccum, estaccumR: new functions to find the specpool() or estimateR() estimates of extrapolated species richness in random accumulations of sites. These have 'plot' and 'summary' methods. - scores: functions biplot, points, text, ordilabel, ordiplot3d, ordixyplot and spantreee did not pass all arguments to scores() function. In particular, this concerned rda where 'scaling' and 'const' arguments could not be used within these functions. - radfit: new function 'radlattice' for a lattice plots of fitted models for a single site. - rrarefy: a new function to generate random rarefied communities. - RsquareAdj: now a generic function to find adjusted R squared with special cases to 'rda', 'cca', 'lm' and 'glm'. - summary.cca: cleaner output. - wcmdscale: returns scaled scores for axes with negative eigenvalues. CHANGES IN VEGAN 1.15-3 - anosim, mantel, mrpp, protest, envfit: did not include the observed statistic among permutations. Functions adonis and permutest.cca did this correctly, but did not print results neatly. - anova.cca: name clash if data were indexed with 'i'. - capscale: fixed handling of negative eigenvalues with non-Euclidean distances. The total inertia is the sum of all eigenvalues so that negative eigenvalues are subtracted from the total. The total inertia of negative components and their rank (number) is given as 'Imaginary' component, and the negative eigenvalues are listed after unconstrained positive eigenvalues. The procedure is based on Gower, Linear Algebra and its Applications 67, 81-97 (1985). New argument 'sqrt.dist' takes square root of the internally calculated dissimilarities and avoids negative eigenvalues with some indices, such as vegan Jaccard and Bray-Curtis. The adjustment is corrected for indices with upper limit of one, and the reported eigenvalues and inertia components are reduced by a factor of sqrt(n-1) and are similar to those reported by 'cmdscale' or 'wcmdscale'. - eigenvals: a new function to extract eigenvalues from rda, cca, capscale, wcmdscale, prcomp, princomp, svd or eigen. If the result object contains squareroots of eigenvalues, they are squared. The summary method also finds proportions and cumulative proportions explained. Function summary.cca now uses this to display eigenvalues. - kendall.global: could get wrong counts of ties in large data sets. - meandist: new sister function to 'mrpp' that finds mean within-group and between-group dissimilarities. The summary function finds overall averages of these, and returns all three MRPP variants plus classification strength. The plot method draws a dendrogram based on the mean dissimilarity matrix, with leaves hanging to within-groups dissimilarity. The functions follow Sickle, J. Agric. Biol. Envir. Stat. 2, 370-388 (1997). - ordisurf: fits now linear or quadratic trend surfaces if 'knots' argument is set to 0, 1, or 2. - orditkplot: copes with NA and NaN scores. - ordixyplot: mixed x and y axes for biplot arrows and class centroids. Function failed in constrained ordination. - tsallis: gained argument 'hill' to find results analogous to Hill numbers in renyi(), or the species number equivalents of indices. - wcmdscale: removes now zero eigenvalues instead of the last eigenvalue. The bug was copied from cmdscale(), which still has the bug in R 2.9.0 (plus another that was not copied to wcmdscale). CHANGES IN VEGAN 1.15-2 - adonis: adds one to numerator and denominator of permutation tests, the default number of iterations was raised from 5 to 999, and the result object got a 'terms' component. Uses much less memory allowing analysis of larger problems. - anova.cca: anova(..., by = "axis") gained new keyword 'cutoff' to stop permutation tests after exceeding the given cut off level of significance. The second term of anova(..., by = "margin") used different random numbers than other terms. - beals: Completely rewritten by Miquel de Caceres. Knows now also the cross validated version of Beals smoothing and other choices described by De Caceres & Legendre, Oecologia 156, 657-669; 2008. - betadisper: handles missing values both in dissimilarities and grouping. - cca/rda: cleaner output of summary() in unconstrained models. - commsimulator: simulated result retains original row and column names. - contribdiv: new function for contribution diversity (Lu et al., Basic and Applied Ecology 8, 1-12; 2007). - decostand: gained dots in argument list, so that stressplot(metaMDS(x, dist = "gower", trymax = 40)) works. - dispindmorisita: new function for the Morisita index of dispersion. See Krebs, Ecological Methodology; 1999. - kendall.global and kendall.post: new functions for Kendall's coefficient of concordance. In ecology these can be used to identify significant species associations (Legendre, J Agric Biol Environm Stat 10, 226-245; 2005). - metaMDS: more robust with distances like Euclidean and Manhattan which have no upper limit. The stepacross works correctly for these, but gives a warning that its use may not be sensible. There is a better heuristics to avoid half-change scaling with these indices. The 'halfchange' argument is now honoured when given in metaMDS() call. - mrpp: returns within-class dissimilarities. Evaluates classification strength (Van Sickle, Biological and Environmental Statistics, 2, 370-388; 1997) if weight.type = 3 was used. - nestednodf: new nestedness function of overlap and decreasing fill (Almeida-Neto et al., Oikos 117, 1227-1239; 2008). Coding by Gustava Carvalho. - ordirgl: no more superfluous warnings with type = "t". - ordisurf: gained an argument 'bubble' to draw bubble plots, or vary point sizes according the value of the observed variable. The (invisible) return object now has an item 'grid' for the fitted value and grid values. - orditkplot: can produce TIFF graphics, if installed R has this capability. - procrustes: new text() function. - radfit: broken-stick model (function rad.null) failed with Gaussian and Gamma error families. The plot.radfit command gains argument log = "y", which allows using arithmetic scales or log-log scales where Zipf model is a straight line. - spantree: retains names and uses labels in plot. - datasets: Oribatid mites (data 'mite') got taxon names. - help files updated, and do not raise errors or warnings with the Rd parser version 2 in R 2.9.0. CHANGES IN VEGAN 1.15-1 - betadisper and related functions now work when the 'group' argument represents a single group/level. - decorana: 'text' function failed. - cca/rda/capscale: cleaner handling of results with missing (NULL) row or column names, also in plots. - cca/rda/capscale: new functions 'head' and 'tail' for 'summary' of cca results to show only some rows of the scores. - nestedness: method nesteddisc was found to be strongly dependent on the ordering of tied column (species) frequencies. A warning is now issued, and development version of vegan in http://vegan.r-forge.r-project.org/ has an experimental function that tries to find the optimal ordering. - permatfull: 'row'/'column' arguments were mixed. - radfit: all methods work consistently for communities of 0, 1 or 2 species. - wcmdscale: typo in the result object items corrected. CHANGES IN VEGAN 1.15-0 GENERAL - Peter Solymos joined the vegan development team. NEW FUNCTIONS - add1.cca and drop1.cca: functions to implement permutation tests with argument test = "permutation". Function drop1.cca uses anova.cca(..., by = "margin") and add1.cca implements a new type of analysis for single term additions. - ordilabel: new alternative for cluttered ordination plots. Text is written on opaque labels. The texts still cover each other, but at least the uppermost are readable, and the ordering can be controlled by 'priority' argument. Similar to 's.label' in ade4 package. - ordipointlabel: new alternative for cluttered ordination plots. Points are in fixed positions, but their text labels are located to avoid overplotting. The optimization uses simulated annealing of 'optim' function. Returns an "orditkplot" object so that the results can be edited with 'orditkplot'. Similar to 'pointLabel' function in maptools package. - permatfull, permatswap: functions to permute quantitative count data. - treedive: estimation of functional diversity defined as the height of the dendrogram of species properties (Petchey & Gaston, Ecology Letters 9, 741-758; 2006). With a helper function 'treeheight' to find the height of a 'hclust' dendrogram. - tsallis: Tsallis entropy family as an alternative to 'renyi'. - wcmdscale: weighted metric scaling a.k.a. weighted principal coordinates analysis; only uses row weights. NEW FEATURES AND FIXES - anova.cca: default permutation model changed from "direct" to "reduced" after Pierre Legendre demonstrated that model "reduced" was superior in term of Type I error. - anova.cca: handles smoothly models where constrained or unconstrained models are NULL and the tests are impossible (used to stop with error). - anova.cca(..., by = "margin") was handling wrongly 'x' in '~Condition(x) + x + z', or model formulae where same variables where used both as conditions and (aliased) constraints. - cca/rda/capscale: improved robustness in the formula interface. Partial handling of "cca" objects produced by ade4:::cca. - commsimulator: swap, trial swap and quasiswap written in C and *much* faster (100x in some tests). - oecosimu: accepts now a vector of statistics, and the user can give the name of the statistic in the function call. - ordiplot: did not use partial matching for "sites" and "species". - orditkplot: Improved user interface. Improved zooming into graphs. Imitates R plotting characters ('pch'). Label font family, size and font type can be vectors. - permuted.index2 and associated functions allow for restricted permutations of strata (i.e., restricted shuffling of blocks). - specaccum: removes missing (all zero) species which gave sd = NA with method = "exact". CHANGES IN VEGAN 1.13-2 - anova.cca (and permutest.cca) now calculate the residual df as (number of rows) - (rank of constraints and conditions) - 1 instead of using the rank of the residual ordination. With single response variable in 'rda' the degrees of freedom and F-values are now identical to those in 'lm' (linear model). However, the change does not influence significances (P-values), because these have been always found by permutation, and this change does not influence the order statistic used in permutations. - oecosimu: always estimates the original statistic with binary data even when the user supplies quantitative data. - orditkplot: no superfluous pointer lines when moving labels. - procrustes plot failed if two configurations were exactly identical. - rda (and capscale) use internal scaling constant so that the returned site and species scores with scalings 1, 2 or 3 together provide a biplot approximation of the original data. This scaling constant is calculated internally, but now its numerical value is returned as an attribute of 'scores.rda', and 'summary' displays its value. Vignette on "Design decisions and implementation" in vegan explains the calculation of the internal scaling constant. - summary of capscale identical to the summary of rda. - scores of rda and capscale with scaling = 0 really return the unmodified scores without the scaling constant. CHANGES IN VEGAN 1.13-1 GENERAL - Helene Wagner joined the vegan team. FIXES FOR HANDLING RANKS IN CONSTRAINED ORDINATION - cca, rda and capscale had only known one kind of rank: the rank of the ordination result (= number of axes). In fact there are two other types of ranks: the rank of constraints after removing conditions, and the rank of constraints + conditions, where conditions refer to terms "partialled out". This hit those that tried to use rda with single response variable instead of community matrix, and also some partial models were handled wrongly. The changes mainly concern cases where the rank of constraints is higher than the rank of the ordination (more constraints than ordination axes). The changes have visible effects in following support functions: - alias: no superfluous aliasing of terms, partial models aliased correctly. - anova: always uses rank of the constraints which also fixes anova(..., by = "terms") when single response variable was used. - calibrate.cca: identifies cases when the rank of constraints is higher than the rank of ordination and refuses to analyse these. - extractAIC: uses rank of constraints for degrees of freedom. - predict: predict(..., type = "lc", newdata = somedata) works in partial analysis. OTHER FIXES - adonis: faster and improved documentation. - intersetcor and inertcomp now check that input really is from constrained ordination instead of giving obscure error messages. - lines.spantree knows again graphical arguments such as 'col', 'lty'. - mite.xy: new data set on the spatial coordinates of sample sites of Oribatid mites. - mso: plot.mso replaced with msoplot, and plot function now displays the ordination scatter plot. Function msoplot collapses distances larger than half of the maximum distance into a single distance class. Printed result shows the variogram data. - ordicluster, ordiellipse, ordispider, orglspider, ordisurf, factorfit and vectorfit could fail with non-vegan ordination objects in R 2.7.0 whose weights.default function gave error if object had no weights (these worked in R 2.6.2 and earlier). - taxa2dist: has a "method" name for distances. CHANGES IN VEGAN 1.13-0 GENERAL - Based on development version 1.12-15 (revision 354 at http://vegan.r-forge.r-project.org) NEW FUNCTIONS - betadiver: beta diversity functions as reviewed by Patricia Koleff et al. (J. Anim. Ecol., 72, 367-382; 2003), with a plot function to produce triangular plots. - mso: Helene Wagner's multiscale ordination or spatial partitioning of cca and rda. This is taken from the Ecological Archives with minimal edition with the permission of Helene Wagner. - nestedtemp: matrix temperature method for oecosimu following Rodriguez-Girones & Santamaria (J. Biogeogr. 33, 924-935; 2006), but still without iterative optimization of row and column ordering. - TukeyHSD.betadisper: pairwise comparisons for betadisper. NEW FEATURES AND FIXES - adonis: returns both species and site scores. - betadisper: was not calculating distance to centroid correctly for observations where the imaginary distance to centroid was greater than the real distance. Now takes the absolute value of the combined distance before taking the square root. This is in-line with Marti Anderson's PERMDISP2. - BCI: example has spatial coordinates of plots. - biplot.rda: argument for arrow col. - capscale: accepts other distance functions than vegdist, and can use metaMDSdist for extended dissimilarites & "metaPCoA". - designdist: knows 2x2 contingency table notation with a, b, c, and d. - metaMDS: transforms data like with distances for species WA. - orditkplot: allows editing labels and zooming into plot. - permDisper: renamed to permutest.betadisper. - permutest: now a generic function, currently with methods 'cca' and 'permDisper'. - rarefy: accepts vectors of sample sizes. - rgl.isomap: dynamic rgl plots for isomap. - screeplot.cca etc: return invisibly xycoords. - specaccum: returns numbers of individuals with method = "rarefaction". - summary.cca: returns more statistics on "variance explained by axes". - zzz: vegan got startup message. CHANGES IN VEGAN VERSION 1.11-4 - A critical bug fix in adonis: there was a critical bug in adonis code, and inconsistent statistics were used in permutations so that P-values were grossly wrong in multi-variables models (single variable models were OK). In addition, df were wrong in deficit rank models, and unused factor levels were not dropped. All adonis users should upgrade and rerun their analyses. CHANGES IN VEGAN VERSION 1.11-3 GENERAL - Bug fixes from Rev. 305 on http://r-forge.r-project.org/. FIXES - anova.cca: number of permutations could exceed perm.max. - permuted.index2: updated to the version in devel branch. This means bugfixes in permCheck, numPerms and permuted.index2. It also adds allPerms to get all possible permutations when complete enumeration is feasible. In addition, there is now a function permuplot to graphically show the current permutation scheme. - plot.cca, plot.envfit and associates: automatic scaling of biplot arrows and fitted vectors was wrong when axes were reversed (like 'xlim = c(1,-1)') or the origin was shifted in plot.envfit (like 'at = c(1,1)'). Added internal function 'ordiArrowMul'. - plot.procrustes: failed if two configurations were identical. - varpart4: sum of squares was wrong if called directly instead of being called via varpart(). Reported by Guillaume Blanchet. CHANGES IN VEGAN VERSION 1.11-2 GENERAL - minor bug fixes and documentation updates from the devel trunk. - version 1.11-1 was made but never released to CRAN, and this is the first minor release of the 1.11 series. FIXES AND UPDATES - bstick.princomp: works now. - numPerms: was returning incorrect number of permutations when type = "strata" selected. - permuted.index2: was permuting samples within levels of strata as well as permuting the levels themselves if type = "strata" selected. - Documentation: diversity-vegan gains discussion on taxonomic diversity and using designdist for analysing beta diversity. Proof-reading and updates in diversity-vegan and FAQ-vegan. CHANGES IN VEGAN VERSION 1.11-0 GENERAL - Based on devel version 1.10-13 (rev. 205 at R-Forge). - Gavin Simpson joined the vegan team. - Suggests now 'tcltk' (for orditkplot). NEW FUNCTIONS - anova.cca gained a new support function to analyse marginal effects of individual terms (which are similar to Type III effects). Defined with argument 'by = "margin"'. - betadisper: new functions for Marti Anderson's analysis of homogeneity of multivariate dispersions. - biplot.rda: biplot function for PCA run with rda. Arrows are used instead of points. - CCorA: Canonical correlation analysis with a robust algorithm, with permutation test and plot function. - oecosimu: functions to analyse nestedness of communities (such as on islands or patches). Function oecosimu is a general wrapper, and commsimulator generates null-communities of various types (r00, r0, r1, r2, c0, swap, trial swap, backtracking, quasiswap). The nestedness can be analysed with functions like nestedchecker (number of checkerboard units), nestedn0 (measure N0), nesteddisc (discrepancy), but users can supply their own functions or even use some standard R functions such as chisq.test. - ordiresids: similar diagnostic plots as in plot.lm for constrained ordination: Residuals ~ Fitted, sqrt(abs(Residuals)) ~ Fitted, and qqmath(~ Residuals) using Lattice graphics. - orditkplot: interactive and editable plotting function. Function displays one set of points (species, sites) using both points and labels (text). The points are fixed, but labels can be dragged to better positions with mouse. The edited plots can be saved as EPS, exported to various graphical formats (EPS, PDF, PNG, JPEG, BMP, XFIG depending on the system) or dumped back to the R session for plotting and further processing. - ordixyplot: a set of functions for Lattice graphics of ordination results. Includes ordixyplot for 2D graphics, ordisplom for pairs plots, and ordicloud for 3D graphics. All can be subsetted and formatted in the usual Lattice way. - permuted.index2: New version of permuted.index() that now allows restricted permutations. Can produce permutations for time-series or line transects and for spatial grids. These can also be nested within 'strata'. permuted.series() and permuted.grid() are the relevant workhorse functions. Permutation options are set by new function permControl(). Currently used only in betadisper, but we plan to migrate vegan functions to permuted.index2() in the devel version, and will eventually replace the current permuted.index(). With support function permCheck for checking permutation schemes. NEW DATA SETS - sipoo: birds in the Sipoo archipelago (Finland, too close to Helsinki). NEW FEATURES AND FIXES - adonis: accepts any 'dist' object as input. - as.mlm.cca, as.mlm.rda use now correct names for variables in aliased models. The data were pivoted correctly in R, but the labels were not. - anova.cca assesses now P value as (hits+1)/(tries+1). - anova.cca: anova(..., by = "axis") failed when fitted model had terms like poly(x,2) or log(x). - bgdispersal uses now a more powerful statistic for the McNemar test (in terms of Type 1 error rate). - calibrate.cca does correct pivoting in aliased models. - capscale: negative scaling in plot works similarly as in rda. - decorana does not crash R when called with NULL row data, such as decorana(dune[FALSE,]). Method predict(..., type="sites") works correctly with downweighted analysis. - fitted.cca, fitted.rda gained argument type = "working" to get the fitted values and residuals used internally in calculation (in cca() these are weigthed and Chi-square standardized values). - isomap checks that input data are dissimilarities or can be changed into dissimilarities without warnings. - metaMDS gains argument wascores (defaults TRUE) to suppress calculation of species scores. - orditorp now handles "..." more cleanly. - scores.cca, scores.rda accept display = c("species", "sites"). - summary.prc honours argument 'axis'. - taxa2dist issues now a warning if called with 'check = FALSE' and some distances == 0, typically meaning that basal taxa (species) were not coded. - varpart failed if there were unused levels in factors. - wascores returns now NA for missing (all zero) species instead of failing. DOCUMENTS - new documents: FAQ, a simple introduction to ordination in vegan, a detailed explanation of diversity methods. New formatting. - Added these NEWS. OLDER VEGAN VERSIONS Version 1.8-8 (Oct 2, 2007) * Minor bugfix release for upcoming R-2.6.0. Based on the http://r-forge.r-project.org/projects/vegan/ revision 17 (= 1.8-7) with ported bug fix revisions (see below for revision numbers). * anova.cca: by = "term" failed in partial model. This was broken in 1.8-6 by introducing a test against deficit rank models (r47). * cascadeKM: Calinski index works now when the input data is a data.frame (r57:58). * flush.console: metaMDSiter and bioenv use now flush.console() so that Windows people also see the trace (r56). * ordispantree: made defunct, was deprecated in 1.8-1 (r38). * scores: handles now numeric data frames (r25). * summary.cca: failed if only one type of scores was requested (r50, 52). * taxondive: Fixed dim checking and matching species names in community data and taxonomic distance data (r21). * tweaks to pass --pedantic R CMD check, mainly in formatting source files, unused variables in source files and superfluous braces in help files (r39, r46, r62). * Updated FAQ-vegan.pdf to the current version at R-Forge. Version 1.8-7 (August 24, 2007) * Based on devel version 1.9-34. * DESCRIPTION: M. Henry H. Stevens (Miami University, Oxford, Ohio) joined the vegan team. * adonis: new function for nonparametric MANOVA that is appropriate for even extremely wide matrices sometimes associated with gene data and with diverse ecological communities. Author Hank Stevens. * taxondive: a new function for indices of taxonomic diversity and distinctness after Clarke & Warwick (Mar Ecol Prog Ser 216, 265--278, 2001 and other papers). With a helper function 'taxa2dist' to turn taxonomies into distances with an option for variable step length (Clarke & Warwick, Mar Ecol Prog Ser 184, 21--29, 1999), and a toy data set on the taxonomy of dune meadow species ('dune.taxon'). With a help, testing and pressure from Mike Cappo, James Cook Uni, Qld. * bgdispersal: previous version was partly garbled (by me), and P. Legendre provided a corrected one. * designdist: keeps 'dist' attributes even when the 'method' function drops them. Swapped the order to (terms, methods) in the default name. * metaMDS: issues a warning if data are disconnected. Passes extra arguments to other 'distfun' than 'vegdist' so that you can set 'terms' in 'designdist' etc (metaMDSdist). Can now do trymax=0 or skip random starts and give you enhanced 'isoMDS' result (metaMDSiter). * ordiplot: failed if number of species was equal to number of sites (and so did plot.metaMDS and plot.isomap using this). * plot.profile.fisherfit: corrected a harmless error detected by checkUsagePackage(). * predict.rda: removed some dead (but heavy) code from type = "response". Version 1.8-6 (May 9, 2007) * Based on devel version 1.9-23. * as.mlm.cca, as.mlm.rda: new functions to refit constrained ordination result (cca, rda, capscale) as a multiple response linear model. You can find influence statistics (Cook's distance, hat values) from the refitted model. You also can find t-values etc., but these have the same bias as in other software and should not be used. * bgdispersal: a new function for dispersal direction in biogeography (Legendre & Legendre 1998, section 13.3.4). Author Pierre Legendre. * designdist: a new function for defining your own dissimilarity index or for estimating beta diversity (Koleff et al., J. Ecol. 72, 367-382; 2003). * isomap: a new function for isometric feature mapping of Tenenbaum et al. (Science 290, 2319-2323; 2000). * screeplot, bstick: new functions to draw screeplots of vegan ordination results with brokenstick lines, and alternative screeplot functions for prcomp and princomp with brokenstick. Author Gavin L. Simpson. * swan: a new function for the degree of absence (Swan 1970, Ecology 51, 89-102). * anova.cca: now refuses to do 'by = "terms"' if the rank of constraints is higher than the rank of the community matrix. * bioenv: gains argument 'partial' to perform partial bioenv. * cca, rda, capscale: can now handle longer expression within 'Condition()' (ordiParseFormula). Used to drop observations with missing values in unused variables (ordiGetData). * goodness.cca, goodness.rda. 'statistic = "distance"' was wrongly implemented. Now refuses to find "distance" in constrained analysis: distances of constrained and unconstrained components do not add up to to distances in unconstrained ordination. * metaMDS (metaMDSdist): gains argument 'distfun' to use other dissimilarity functions than vegdist. * renyiaccum: used a variable that was not defined as an argument. Added support functions persp.renyiaccum and rgl.renyiaccum (Roeland Kindt). * stressplot: R2's renamed to 'non-metric fit' and 'linear fit'. * Doc: Corrected reference to Hurlbert in diversity (thanks to Ralph Grundel). Updated references (varpart, renyiaccum). Removed discussion on t-values in cca from vignettes, because as.mlm.cca now implements those. General cleanup and better utf-8 encoding. Version 1.8-5 (January 11, 2007) * Based on devel version 1.9-12. * no.shared (manifest in metaMDS): prints thousands of lines of debugging info that I forgot to deactive in release. Not fatal, but extremely annoying. * capscale: inertia name as "unknown" if the dissimilarity object does not have a "method" name. Suggested by Roeland Kindt. * DESCRIPTION: license is now explicitly GPL v2 (but not later). Version 1.8-4 (January 8, 2007) * Based on devel version 1.9-10. * cascadeKM: a new function to wrap kmeans and optimality criteria for classification (Sebastien Durand, Pierre Legendre & Marie Helene Ouellette). * renyiaccum: a new function for Renyi (and Hill) accumulation curves (Roeland Kindt). * bioenv: bioenv.formula uses now "na.action = NULL" in 'model.frame', and bioenv.default passes arguments to 'cor' which means that you can set NA treatment in 'cor' using argument "use". * cca, rda: added "..." to formula versions to satisfy tests in R-DEVEL. * cca, rda, capscale: used to fail if called within other functions. Now data always evaluated in the environment of formula using new internal function ordiGetData. * anova.cca: checks that the model has both residual and constrained components or stops with understandable error message (used to stop with incomprehensible error message). * print.summary.cca, print.summary.decorana: have now arguments 'head' and 'tail' to print only a part of species and site scores. Suggested by Gavin Simpson. * metaMDS: checks now that the input data ('comm') is not a 'dist' object (like many users have had). * ordisurf: Does not depend on package 'akima' any longer, but directly finds fitted values in a regular grid using 'predict.gam'. Added pnpoly.c to find which of these values are within the convex hull defined by data. Results also look neater with sparse data now. Added argument 'labcex' passed to 'contour' for changing size of contour labels. Setting 'labcex = 0' will suppress drawing labels (by setting drawlabels = FALSE in 'contour()'). * orditorp: handles now vector arguments of 'col', 'pcol', 'cex', and 'pch'. * rad.zipfbrot: less likely to overflow to NA coefficients during iteration. * renyi: added a plot function, and documented together with renyiaccum() instead of diversity(). * scores.default: Knows now about ade4 objects. Primarily looks for scores scaled by eigenvalues both for sites and species. * specaccum: Added new conditioned method of Colwell et al. with estimated sd based on extrapolated richness (Roeland Kindt). * vegdist.c: More informative warnings with 'method' name (useful with rankindex). * DESCRIPTION: listed 'require()d' packages in the "Suggests:" field to satisfy more anal tests in R-DEVEL. Mention diversity analysis in the "Description:". Version 1.8-3 (Sept 29, 2006) * Based on devel version 1.9-2. * varespec.rda, varechem.rda: saved in binary form, because old ascii form gave warning in R-2.4.0-rc. * vegdist: added Chao index (of Jaccard type) that should take into account missing pairs of species. Checks that Binomial index is non-negative. Identical sites could have dissimilarity of magnitude 1e-17 after some standardizations, but now values <1e-15 are zapped to zero. * estimateR: uses now standard unbiased formulation of Chao. * renyi: should work now (really!). * metaMDS: with zero = "add", zeros now replaced with min(dis[dis>0])/2 (used to be 1E-4) (metaMDSdist). Sets number of tries also when this was not set previously (metaMDSiter) Version 1.8-2 (June 13, 2006) * version 1.8-1 failed test in Windows because of a wrong encoding name. Explicit \enc added for non-ascii words. Kurt Hornik and Uwe Ligges diagnosed this and led me to see the light. * similar to devel version 1.7-97. Version 1.8-1 (June 12, 2006) * Based on devel version 1.7-96. * Pierre Legendre joined the vegan team. * beals: a new function for Beals smoothing. * bioenv: added 'trace' argument. * cca/rda/capscale: accept several 'Condition' elements in the formula. * capscale: capscale(y ~ ., data=...) or expansion of "." on the rhs works now. Documentation recognizes now db-RDA as the real mother method. * scores.cca, summary.cca etc: rewrite so that is cleaner and easier to maintain. User visible changes are scaling by species standard deviation (negative scaling) for 'rda', scaling=0 (no scaling) for all methods and slightly changed output and improved user control in summary. These scalings actually were documented in 1.6-10, although I dropped them just before the release. predict.cca, predict.rda: work now with 'newdata' even when not called with formula. * anova.cca: new argument 'by' for tests of single terms or axes: with by = "terms" performs individual test for constraints, and with by = "axis" a separate sequential test for each axis. New argument 'first' to analyse only the first axis instead of all constrained variation. * intersetcor: new function for the interset correlation or the (weighted) correlation between individual constraints (contrasts) and invidual axes in cca/rda/capscale. (Not recommended.) * decostand: does not automatically convert matrix to a data.frame. NA handling more consistent now (thanks to Tyler Smith for diagnosis). Adds attribute 'decostand' giving the "method". * linestack: now really uses median as the midpoint with the odd number of cases, and does not give superfluous warnings with three or less items. New argument 'labels' to replace the default text in plot. The old argument 'label' renamed to 'side'. However, the function still works with the old syntax, but gives a warning if the old argument 'label' is used for 'side'. Returns invisibly the shifted positions of labels. * metaMDS: 'postMDS' sets now attributes similarly when called independently or within 'metaMDS'. 'metaMDS' forwards arguments to 'postMDS' except 'halfchange'. Change of phrasing in 'print'. Added handling of zero dissimilarities into 'metaMDSdist': either "fail" or "add" 1E-4 into zeros. * mrpp: new function for the multiresponse permutation procedure (MRPP). Code by Henry Stevens (Miami Univ, Oxford, Ohio). * ordiarrows: draws arrowhead only in the last segment. New argument 'startmark' for marking the starting point of the arrow. * ordisurf: new arguments 'main' for the title and 'nlevels' and 'levels' for the number of contour or their values. * orditorp: arguments for text colour and text character expansion changed to standard 'col' and 'cex' from previous 'tcol' and 'tcex'. * procrustes: 'summary' prints now rotation matrix, translation and scale, and honours 'digits'. * prc: new functions for Principal Response Curves (PRC) of van den Brink and ter Braak (Envir. Toxicol. Chem, 18, 138-148; 1999). This is a special rda() model with dedicated summary and plot functions. New data set 'pyrifos' to demonstrate 'prc'. * radfit: added brokenstick as a null model (rad.null), removed rad.veil (as it was a bad idea originally), corrected minor bugs in rad.preempt (which did not fail gracefully). Line colours start from the point colour in plot.radfit.frame. 'print' uses "g" format for coefficients and adds 'digits' argument. Added 'summary.radfit.frame' that simply prints each model. * rankindex: uses now cluster:::daisy when 'grad' includes factors. * spantree: now a method function with 'plot', 'lines' and 'cophenetic' methods. 'lines' replaces 'ordispantree'. The plot has a weird, new way of finding configuration for a spanning tree from cophenetic distances (unpublished). Documented separately. * specaccum: 'plot' honours now 'ylim'. * specpool: Chao richness was wrongly defined, but now uses the biased formula (error introduced in 1.6-5, correct earlier). Failed with zero species or if there were no species that occurred exactly one in the 'pool' (thanks to Emmanuel Castella, Geneve CH, for the bug report). * varpart: new functions for unbiased partitioning of variation by two to four explanatory tables in RDA or linear regression. The author of these functions is Pierre Legendre & co (Univ Montreal). New data sets 'mite', 'mite.env' and 'mite.pcnm' to demonstrate the functions. * vegandocs: new function to display *all* pdf documentation and ChangeLog. This really should be in base R -- this is a kluge to fill the hole. * vegemite: added argument to 'select' a subset of sites. Drops missing species from the table. Prints number of species and number of sites and the used cover scale at the end of the table. Passes arguments (i.e., 'maxabund') to coverscale(). * coverscale: added argument 'maxabund' to 'scale = "log"'. Returns the name of the cover scale as an attribute for vegemite() to print. * vegdist: now first checks input and then transforms (if needed). Thanks to Tyler Smith, * Internal changes: permuted.index acceptes NULL strata as an alternative to missing strata. ordispantreee deprecated. spider.cca removed. * Documentation: general cleanup in help files. New chapter on t-values in cca/rda/capscale in vegan-FAQ. New pdf document on partioning with varpart by Pierre Legendre & co. Non-latin characters now use UTF-8 in documentation. R manual says that you should not use non-latin characters in help files, but that was written by Englishmen. However, this seems to cause distress to some users of a US West Coast OS (Windows), but OK with mainstream OS's (Linux, MacOS). . Version 1.6-10 (September 26, 2005) * Based on devel version 1.7-77. Checked with R 2.1.1 (stable) and R 2.2.0 (alpha). * rda: negative scalings explicitly ignored and treated as corresponding positive values. Function summary.rda used to fail with NA centroids. * permutest.cca & anova.cca: permutation of 'cca' result now re-weights environmental data properly with permuted community weights (this breaks compliance with popular proprietary software). New default method 'direct' that always permutes the data instead of residuals. Now clearly faster basic routines, but re-weighting in 'cca' is costly, and permutations may even be slower than earlier in small data sets. The permutest.cca returns more data: constrained and residual total inertia, degrees of freedom in the input model, and .Random.seed used in iterations. Thanks to Pierre Legendre for pushing me to make this faster. * ordination plot functions: obey now xlim and ylim. * ordination text and points functions: a new argument 'select' that can be used to select a subset of items, and a new argument 'labels' for text used instead of the default row names. * points.cca, text.cca: biplot arrows will be scaled automatically to fit the current graph if 'arrow.mul' is not given. The new behaviour is similar to the default in plot.cca and in plot.envfit. * orditorp: a new "ordination text or points" function to add text or points to an existing plot: adds text if this can be done without overwriting other text labels, and points otherwise. * linestack: a new function to draw labelled one-dimensional diagrams without overwriting the labels (a primitive one, and could easily be improved: submissions are welcome). * ordirgl, orgltext: adapted to changes in rgl package version 0.65. Workaround for older rgl packages, too. * decostand: Added Hellinger transformation. Empty columns and rows become now 0 instead of NaN in most methods, except when the input data contains negative values. Warns on input with negative entries or on output containing NaN. Has now argument 'range.global' for method 'range' based on the code supplied by Tyler Smith. * plot.radfit: puts now legend "topright" in R >= 2.1.0 (which has this keyword). * read.cep: issues a warning if vegan was compiled with gfortran, which has a bug that may corrupt the result. The bug concerns multiline input with T format modifier, and it was corrected in http://gcc.gnu.org/ml/gcc-patches/2005-09/msg00126.html, but still bugs most released versions of gcc. * vegdist: new indices 'raup' and 'binomial'. Method 'raup' implements probabilistic Raup-Crick index and is based on the code submitted by Michael Bedward. Method 'binomial' implements Millar's index, officially published as "Binomial deviance as a dissimilarity measure" (the C code has been in vegan for about two years, but now I tell about it and add the public interface). Method 'mountford' will give NA for any comparison involving an empty site. Warns about empty sites or negative entries with all methods except 'euclidean' and 'manhattan'. * Documentation: added documentation of the cca/rda/capscale result object. Dontruns used more neatly. Version 1.6-9 (April 22, 2005) * Maintenance release: 1.6-8 failed in R 2.1.0 patched and R 2.2.0 devel (works in R 2.1.0 release) due to problems in as.preston. Based on devel version 1.7-62. * as.fisher, as.preston: used table() in a way that failed in R 2.1.0 patched * calibrate.cca: new function to predict or calibrate or bioindicate the values of environmental constraints from community composition (ordination). * decostand: new argument na.rm (defaults FALSE) for ignoring missing values in row, column or matrix standardizations. * vegdist: new argument na.rm (defaults FALSE) for pairwise deletion of missing vaues in dissimilarity calculation. Version 1.6-8 (April 18, 2005) * Based on devel version 1.7-59. Adapted to R 2.1.0 beta. * DESCRIPTION: gives due credit to Roeland Kindt and Bob O'Hara as co-authors. * documentation: updates in capscale, vegdist. vegan-FAQ adapted to changes in Sweave in R 2.1.0. * several methods assumed that input is count data, but silently accepted floating point numbers and gave wrong results. Now they stop with error with non-integer input: fisherfit, prestonfit, prestondistr, rarefy, fisher.alpha, estimateR. * bioenv: uses now 'cor' instead of 'cor.test', and does not give so many superfluous warnings and is marginally faster. Changed printed output, so that gives 'call' instead of names of community and environmental data, since bioenv.formula could not handle these cleanly. * capscale: has now argument 'add' to use an additive constant to all dissimilarities so that all computed eigenvalues are non-negative. This is an argument of underlying 'cmdscale' function, which implements the "Correction method 2" of Legendre & Legendre (1998), p. 434. * decorana: checks now that there are no negative data entries. * dune: cleaner site names. * envfit: 'plot' now automatically scales arrows similarly as 'plot.cca' if 'arrow.mul' is not specified and arrows are added to an old plot. Has now a 'scores' function. * goodness.cca, predict.cca: documented separately. * goodness.metaMDS: new function to assess pointwise goodness of fit in metaMDS or isoMDS. * humpfit: user can now give starting values of parameters. 'summary.humpfit' returns 'cov.unscaled' so that users can apply 'ellipse' function of 'ellipse' package to display approximate confidence ellipses for pairs of parameters (with Normal assumptions). * make.cepnames: No longer duplicates one component names, but 'abbreviate's them to eight characters. * metaMDS: Split to independent metaunits 'metaMDSdist' and 'metaMDSiter'. New function 'metaMDSredist' tries to reconstruct dissimilarity matrices and transformations. 'postMDS' skips halfchange scaling with too few points (with a warning) instead of stopping with an error. Prints now info about 'postMDS' operations. New 'scores' function. Improved 'plot' function with 'display' argument and labelling of axes. Argument 'shrink' to undo expansion of species scores in plot or scores functions. Workaround for a future bug in 'isoMDS' which drops names of points in R 2.1.0. Updates number of 'tries' with 'previous.best'. * ordiplot: has now 'display' argument, so that only species or sites can be plotted. * ordiplot3d: a new function for 3D static ordination diagrams. * ordirgl: new function for dynamic 3D graphics of ordination results. With support functions orglpoints, orgltext, orglsegments and orglspider to add graphical items to dynamic plots. Needs 'rgl' package. * predict.cca, predict.rda: type = "wa" with 'newdata' works now even when some species were removed from the original fit because they were all-zero (missing). Default now to 'model = "CA"' in unconstrained analysis without "CCA" component. * predict.decorana: a new function for 'decorana' results. Similar to 'predict.cca' (but refuses to give impossible results). * procrustes: obeys now 'choices' even when input is a matrix. Plots now projections of rotated axes. New argument 'scores' so that can handle other than "site" scores. * protest: passes now arguments to 'scores' so that now can handle other than "site" scores on more than two dimensions. * rda: handles now species with constant values (typically missing or all zeros). * spenvcor: new function to find the "species -- environment correlation" in contrained ordination (cca, rda, capscale). * stressplot: a new function to plot Shepard diagram for 'metaMDS' or 'isoMDS'. * summary.cca/summary.rda: print now call. * vegemite: can now 'use' 'dendrogram' objects. Version 1.6-7 (Jan 24, 2005) * Based on devel version 1.7-42. * plot.envfit did not plot vectors. Thanks to Roeland Kindt and Ron E. VanNimwegen for bug reports and fixes. * ordisurf obeys now keyword 'display', and '...' will transfer arguments to 'scores'. * ordisegments: obeys now keyword 'display'. * ordigrid: works now. * ordihull, ordiarrows, ordisegments, ordispider, ordiellipse: have a new keyword 'show.groups' to show only specified groups. With the help of this argument it is possible to use different colours and linetypes for each group. Further, it makes possible to plot results of logical comparisons (such as A1 > 4) by setting show.groups = T. Two user requests. * new diagnostic and helper functions for 'cca', 'rda' and 'capscale': 'goodness' to estimate the proportion of inertia accounted for or residuals for sites or species; 'inertcomp' to decompose species and site inertia for conditioned, contrained and residual componets; 'vif.cca' to estimate the variance inflation factors for constraints and conditions; 'fitted' and 'residuals' to approximate data by ordination scores; 'predict' to approximate data or find site or species scores, possibly with 'newdata'; 'coef' to find the regression coefficients. 'alias.cca' is now similar to 'alias.lm' (simplified version of the latter). Version 1.6-6 (Jan 7, 2005) * Based on version 1.7-34, but without still experimental functions predict, fitted, vif & goodness for cca and rda objects. * mantel: implemented partial mantel test (function 'mantel.partial'). Both 'mantel' and 'mantel.partial' should be marginally faster and not give so many superfluous warnings. * plot.envfit: should be more reliable now. A new keyword 'at' to position the bunch of arrows in other places than the origin. Thanks to Roeland Kindt for fixes. * rankindex: Default correlation now "spearman" since the older default ("kendall") was far too slow in large data sets. Should not give so many superfluous warnings. * summary.rda: Site scores were wrong with 'scaling = 3'. Influences 'plot' and 'scores' commands for 'rda' and 'capscale' results with 'scaling = 3'. * vegdist: Issues a warning if 'method = "morisita"' is used with non-integer data. Version 1.6-5 (Oct 12, 2004) * Based on version 1.7-27. Checked with R-1.9.1 (Linux, MacOS X) and R-2.0.0 (Linux, patched version in Windows XP). Passed other tests, but some examples in 'humpfit' failed in Windows XP, and are not run on that platfrom. General cleanup in documentation. Does not 'require(mva)' any longer. * anosim: corrected the equation in docs (function was correct). Thanks to Yong Cao for notifying this. * bioenv.formula: finds now variables from attach'ed data.frames and 'data' need not be specified. * capscale & deviance.rda: capscale was modified so that its result could be handled with step (added a terms component). Function deviance.capscale was deleted so that deviance.rda will be used. A literature reference to AIC in CCA/RDA was added to the documentation. * cca/rda/capscale: Small eigenvalues are made to zero and rank reduced accordingly. Most often influences 'capscale'. * cca/rda/capscale: Now alias constraints that are collinear with other constraints or conditions in partial analysis. New function 'alias.cca' to print aliased contrasts. NB this does not influence the proper ordination results, but only to the selection of biplot scores and centroids displayed. 'summary' no longer gives a redundant warning. * decorana: removes empty species with a warning instead of stopping with error. Still error with empty sites. The behaviour is similar to 'cca'. * envfit (vectorfit, factorfit): Has now a formula interface. Bottlenecks in permutation changed now into C functions. Much faster, in particular 'factorfit' which was 25 times faster in my tests. plot.envfit could drop names (dimensions). Now honours 'scaling' argument in cca/rda/capscale (used to 'scaling = 2' always). * envfit, ordisurf: have now weights parameter 'w'. Weights are used for the results of 'cca' and 'decorana' as default, or they can be supplied by the user. In this way, envfit gives equal results to biplot scores and centroids in 'cca', and ordisurf is consistent with envfit. Both can now access 'lc' scores of 'cca' etc. * estimateR: Abundance-based estimators of extrapolated richness, written by Bob O'Hara . * humpfit: Asesses now the dispersion parameter in non-Poisson models (summary.humpfit). Added a profile method that inherits from profile.glm, so that you can use plot.profile.glm, pairs.profile.glm and confint.profile.glm of MASS for displaying profile and finding the confidence intervals from the profile likelihood. * fisherfit: prints now standard error of the estimate. Added 'profile' and 'confint' methods. * metaMDS: A new function to collect all Peter Minchin's recommendations to run nonmetric multidimensional scaling: (1) adequate data transformation with Wisconsin double and sqrt if needed, (2) use of adequate dissimilarity measure, (3) possible stepacross if needed (this Minchin didn't have), (4) run NMDS with several random starts and stop after finding two similar solutions, (5) scale results with postMDS, and (6) add species scores with wascores. Function has print and plot methods. Function scores.default changed to understand metaMDS. * specpool: Chao is now based on unbiased equation. Standard errors now estimated for Chao, 1st-order jackknife and bootstrap richness, but SE of 2nd-order jackknife still missing. * vegdist: an option for binary indices, since some users believed these are not in vegan, although you can get them with 'decostand'. Version 1.6-4 (June 10, 2004) * Based on 1.7-12. * anova.cca: Changed defaults to beta=0.01 and perm.max=10000. * bioenv: A new function implementing the BIO-ENV procedure of Clarke & Ainsworth (Mar. Ecol. Prog. Ser. 92, 205-219; 1993). The function finds the subset of scaled environmental variables with maximum (rank) correlation with community data. * cca: added ter Braak scaling, a.k.a. Hill scaling, with negative values of `scaling'. This scaling should approximate Hill's non-linear rescaling of `decorana', but it the scaling is linear and does not rescale. The scaling is very simple: the results from corresponding positive scaling are multipiled with sqrt(1/(1-lambda)). * plot.cca: Better heuristics used for the length of biplot arrows, and they are now longer in general. Axes are drawn for biplot arrows also with `text.cca' and `points.cca' functions. * deviance.cca and extractAIC.cca: auxilliary functions which allow automatic model building with `step' or `stepAIC' (MASS) functions in cca and rda. Unfortunately, cca and rda do not have deviance or AIC, and these functions are certainly wrong and dangerous. However, with continuous candidate variables they select the variables in the same order as Canoco. * humpfit: A new family of functions to fit the no-interaction model (Oksanen, J., J. Ecol. 84, 293-295; 1996) to species richness -- biomass data. * vegdist: corrected a bug in Gower index -- range standardization was made to sites, but it should be done to species. Thanks to Brett Melbourne for the bug report. Version 1.6-3 (Mar 22, 2004) * Still based on 1.7-3, but ported some changes from version 1.7-7 (envfit, procrustes). This version was produced to prepare for incompatible changes in coming R-1.9.0. * vegan-FAQ: Does not show the vegan and R versions the documentations were built, because of stupid incompatible change in R-1.9.0 of the future. package.description() function was unnecessarily replaced with packageDescription, and to accomodate recent, present and future versions of R seemed to be too much hassle. * plot.envfit: Added option 'p.max' to display only environmental variables assessed to have P values less or equal to the given limit. * plot.procrustes: added option kind = 0 to draw only axes and functions points.procrustes and lines.procrustes to add points and line segments or arrows to the plot. Version 1.6-2: Based on devel version 1.7-3. * renyi: should work now (again?). * prestondistr: The truncation level was badly chosen. Now default level is set to -1, or log2(-1) = 0.5 which might be the left limit of the first octave. This is now a parameter, leaving the choice as the responsibility of the user. * cca.default: Removes missing species and issues a warning instead of stopping with error. Version 1.6-1: Based on devel version 1.7-1. * Minor maintanenance release to satisfy tests in R-devel. There was a buglet in ordisegments that caused a warning. I had introduced a trick to handle printCoefmat before it was invented to replace print.coefmat, but this failed in R-devel. * Vignettes included in this release. These were only in devel versions of my web pages previously. Version 1.6-0 (Fisher) * Based on devel version 1.5-58. Passes checks with R-1.8.0 and R-1.7.0 and compiles into a Windows binary. Many functions were contributed by Roeland Kindt (Nairobi, Kenya). * BCI: A new data set on tree counts on 1-ha plots in the Barro Colorado Island. Thanks to Roeland Kindt and Richard S. Condit. * capscale: A new function for [partial] constrained analysis of principal coordinates (CAP). * cca, rda: Can now handle cases where the number of constraints is higher than the number of species. * cca, decorana: Find now if data have empty rows or columns. * decostand: Added Chi-square transformation. * distconnected: A new function to find if vegetation data are disconnected below given threshold dissimilarity level. Utility function no.shared gives a logical dissimilarity matrix with values TRUE for cases with no shared species. * fisher.alpha: Should work with large sample sizes now (bug report thanks to Ariel Bergamini). * fisherfit, prestonfit, prestondistr: New functions to fit Fisher's logarithmic series and Preston's log-normal model. * make.cepnames: New utility function to change Latin names into 4+4 character CEP names. * ordicluster, ordispantree: New functions in the ordihull family to overlay a cluster dendrogram or a spanning tree onto an ordination. Weights are now really used with cca and decorana plots. * radfit: New function to fit Ranked Abundance Dominance or Dominance/ Diversity models with maximum likelihood: Pre-emption, log-normal, veiled log-normal, Zipf and Zipf--Mandelbrot models. * rankindex: Can now use stepacross and new dissimilarity indices of vegdist. * rarefy: Can now optionally find SE of rarefied richness. * renyi: A new function to find Rényi diversities or Hill numbers with any scale (thanks to Roeland Kindt). * scores.ordiplot: should be more robust now. * spantree: A new function to find a minimum spanning tree using only dissimilarities below a threshold or disregarding NA dissimilarities. * specaccum: A new function for species accumulation curves. Thanks to Roeland Kindt. * specnumber: A very simple utility function to find species richness. * specpool: New function for extrapolated species richness in a species pool, or for estimating the number of unseen species. * stepacross: New function for estimation of dissimilarities between sites that have no shared species. Implements both flexible shortest paths and their approximation known as extended dissimilarities. * vegdist: New dissimilarity indices Jaccard (finally), Morisita, Horn--Morisita and Mountford. Version 1.4-4 * Based on devel version 1.5-35. * decorana: Finds now eigenvalues from the final solution as ratio of biased weighted variances of site and species scores. The values returned by the legacy Fortran function are called ``decorana values''. * downweight: passes the downweighting fraction as an attribute, and decorana catches and prints the fraction. * wascores: Uses now biased variances for expading WAs and returns the shrinkage factors as an attribute "shrinkage". Shrinkage factors are equal to eigenvalues in CCA when only this one variable is used as constraint. Function `eigengrad' returns only these eigenvalues. * rda summary/plot bugfix: Failed with non-default scaling (1 or 3) when there were no factor constraints. Corrected a statement giving a harmless warning in plot.cca. * ordiplot knows now option type = "text". New simpleminded functions points.ordiplot and text.ordiplot for adding items in an ordiplot graph. * ordiarrows, ordisegments could drop dimensions (when will I learn!) and fail if only one arrow or one segment should be drawn. One argument was missing in a `gl' command in `ordigrid'. Version 1.4-3 (Luova) * Based on devel version 1.5-30 * `cca' and `rda' use canonical expansion of the formula and return the `terms' component. Functions like `terms', `formula' and `update' magically started to work with cca and rda (and eight lines of code would allow `step' and `stepAIC' to work magically in model building... but it's so much magic that I don't trust it). Some of the allowed things are now `mod <- cca(dune ~ . - Use, dune.env)' (all variables but `Use' in dune.env), and `update(mod, . ~ . - Manure)' (remove `Manure' from the previous). * `cca' and `rda' find centroids of factor levels with factor constraints (only with formula interface). These can be accessed with `display="cn"' in `scores', `summary' and `plot'. If `display="cn"' is requested in `plot', biplot arrows are still drawn unless there is a class centroid with the same name: continuous variables are still shown as arrows and ordered factors both as arrows as centroids. * Enhanced user control of many ordination plots. Some accept more graphical parameters (`ordiplot', `plot.procrustes'). New functions `points.cca' and `text.cca' to add these items into CCA/RDA plots (documented separately). * `identify.ordiplot' knows more alternatives, among them `plot.procrustes'. This was helped with new, very generic `scores.ordiplot'. * New functions to add graphical items in ordination diagrams: `ordihull' draws convex hulls for groups, `ordiarrows' draws arrows, `ordisegments' segments, `ordigrid' combines points in to a grid, `ordispider' combines points to their (weighted) centroids or WA scores to the corresponding LC score in cca/rda, `ordiellipse' draws dispersion or confidence ellipses for points. All these take a groups argument for selecting subsets of points. `ordispider' obsoletes `spider.cca' (introduced in the previous release). * Implemented simple ``deshrinking'' of weighted averages in `wascores'. * A new diversity function `fisher.alpha' that estimates the diversity as the alpha parameter of Fisher's log-series. Thanks to Bob O'Hara for the main code. * `summary.decorana' now in canonical form so that printing is done by `print.summary.decorana' and user can intercept and catch the result. Several users had been surprised of the earlier non-canonical behaviour. `summary' knows again the prior weights used in downweighting of rare species (these evaporated in 1.4-0). * rda summary/scores/plot bugfix: Scaling of site scores was wrong with scaling alternatives 1 and 3. * envfit (vectorfit, factorfit) bug fixes: Can now handle single vectors (labelling, permutation). Recognize now `choices' so that the user can select ordination axes. * Checked with released R-1.7.0. Version 1.4-2 Based on devel version 1.5-18 * New functions and data sets: * dune: A new data set -- the classic Dune Meadow data with the environmental data. * ordiplot, identify.ordiplot: New functions to plot "any" ordination result and identify plotted points. Intended to provide similar functionality as `plot', `plotid' and `specid' functions in `labdsv' without name clashes. Functions `plot.cca' and `plot.decorana' return (invisibly) `ordiplot' objects as well, and these can be used by `identify' to label species and sites. * rda: Redundancy Analysis, or optionally, yet another PCA. This is a spin-off from cca(), and it is documented together with cca. The only new functions are rda, rda.default, rda.formula and summary.rda. Otherwise rda uses cca methods which were changed to be aware of rda. * read.cep: A function to read Cornell Ecology Package or CEP formatted files into R. This has been in devel versions since 1.1-1, but it never made to the releases, since this worked only in Linux, but crashed R in Windows. It seemed to work in R-1.6.1 with gcc 3.2 (MinGW) in Windows, so it is included. Treat with caution. * spider.cca: A tiny function that joins each WA score to the corresponding LC score in cca/rda plots. Minor changes: * Checked with R-1.7.0 (unstable devel version, snapshot 2003-02-05) and corrected as needed. * Added symmetric scaling (=3) to alternitves in cca and rda. * Minor improvements and bug fixes in vegemite. Version 1.4-1 (Logan) Based on devel version 1.5-10. New features: * Permutation tests added to envfit (vectorfit, factorfit) and procrustes (called protest). * All permutation tests take now argument strata: If given, permutations made only within strats. Concerns anosim, anova.cca (permutest.cca), mantel, envfit (factorfit, envfit) and protest (in procrustes). * fitted.procrustes(): A new function. * rarefy(): A new function for rarefaction species richness. Other changes: * cca.default(): Handles now NULL matrices X and Z: skips them. * cca.formula(): Knows now cca(X ~ 1) and permforms unconstrained CA, and cca(X ~ ., data) and perfors CCA using all variables in `data' as constraints. Has now na.action=na.fail so that cca crashes more informatively (used to crash mysteriously). A more graceful na.action may come. Assignment "=" corrected to the true blue "<-" (used to crash in old R). * envfit (factorfit, vectorfit): Use `scores' now. Various bugfixes and should work now with single factors or vectors. * plot.envfit(): Options `choices' works now like documented. * ordisurf(): A new name to surf() to avoid name clash with labdsv. * procrustes(): added option `symmetric' for symmetric rotation and goodness of fit statistic. * plot.procrustes(): Keyword `axes' changed to `choices' to be consistent with other functions. * vegemite(): A new name to vegetab. The name was chosen because the output is so compact (and to avoid confusion with function vegtab in labdsv). Function checks now that the cover codes fit in one column and splits the output if it does not fit into used page width. Version 1.4-0 Based on devel version 1.3-19. New functions: * `anosim': Analysis of Similarities. * `cca': [Partial] [Constrained] Correspondence Analysis. This is an alternative to Dray's `CAIV' (package `CoCoAn'). Differences include formula interface, WA scores in addition to LC scores, partial CCA, residual CA after constraints, algorithm based on svd (and much faster), more standard support functions (`plot', `summary', `print'). * `anova.cca' and `permutest.cca': Permutation tests for `cca'. * `envfit': A new wrapper function which calls either `vectorfit' or new `factorfit' function, and `plot.envfit' for easier display of results in graphs. * `mantel': Mantel test for two dissimilarity matrices. * `scores': A generic function to extract scores from `cca', `decorana' or even from some common ordination methods in R. * `surf': Surface fitting for ordination, intended as an alternative to `vectorfit'. * `vegetab': Prints a compact, ordered vegetation table, together with `coverscale' to transform data into compact format. Other changes: * `downweight': directly callable instead of being embedded in `decorana'. Now it can be used with other downweighting thresholds or with other CA's than `decorana', e.g., `cca', `ca', `CAIV'. * `plot.decorana': new keyword `type', removed keyword `tol'. * `vectorfit': centres now ordination before fitting, so it will work with other ordinations than MDS. * Mainly user invisible changes in `plot.decorana', `plot.procrustes', `postMDS', `print.summary.procrustes', `vectorfit', `procrustes'. One of the main changes was that `eqscplot' of `MASS' library was replaced with `plot(..., asp=1)' of standard R (but this is not S-plus compliant). * Edited help files. More examples run from help files. * Tried to improve LabDSV compliance, see http://labdsv.nr.usu.edu/. * Checked with R-1.5.0. However, `log' in diversity not changed into `logb' (yet), although base is specified, because `logb' won't work in R pre-1.5.0. Version 1.2-1 * Checked with R-1.4-0 (frozen snapshot) tools: Documentation and method consistency corrected (summary.decorana.R, decorana.Rd), and file permissions changed. * decorana.Rd: removed dependence on package `multiv' in the example, since it is not a `recommended package' -- replaced with `decorana(..., ira=1)'. Version 1.2-0 Based on experimental version 1.1-6. Doesn't include read.cep() of the experimental version, because the function is certainly unportable to all platforms (works on Red Hat Linux 7.1, but perhaps nowhere else). Major new feature: * decorana(): R port of Mark Hill's DECORANA for Detrended correspondence analysis, with methods print(), summary() and plot(). Minor changes: * postMDS(): finds isoMDS scores and doesn't destroy list structure. * vectorfit: finds isoMDS scores and decorana row scores (which are uncentred, though). * Proof reading in documentation. Version 1.0-3 *`plot.procrustes': selection of axes plotted, improved scaling in graphics, control of axis labels. * `postMDS': added plot to demonstrate half-change scaling. * `procrustes': target can now have lower dimensionality than rotated matrix. Version 1.0-2 * Fixed bugs in documentation. * `plot.procrustes': Fixed passing `...' to graphics functions. Version 1.0-1 * The first public version. vegan/inst/NEWS.Rd0000644000176200001440000007052312122030454013372 0ustar liggesusers\name{NEWS} \title{vegan News} \encoding{UTF-8} \section{Changes in version 2.0.7}{ \subsection{NEW FUNCTIONS}{ \itemize{ \item \code{tabasco()} is a new function for graphical display of community data matrix. Technically it is an interface to \R \code{heatmap}, but its use is closer to \pkg{vegan} function \code{vegemite}. The function can reorder the community data matrix similarly as \code{vegemite}, for instance, by ordination results. Unlike \code{heatmap}, it only displays dendrograms if supplied by the user, and it defaults to re-order the dendrograms by correspondence analysis. Species are ordered to match site ordering or like determined by the user. } } % new functions \subsection{BUG FIXES}{ \itemize{ \item Function \code{fitspecaccum(..., model = "asymp")} fitted logistic model instead of asymptotic model (or the same as \code{model = "logis"}). \item \code{nestedtemp()} failed with very sparse data (fill \eqn{< 0.38}\%). } } % bug fixes \subsection{NEW FEATURES}{ \itemize{ \item The \code{plot} function for constrained ordination results (\code{cca}, \code{rda}, \code{capscale}) gained argument \code{axis.bp} (defaults \code{TRUE}) which can be used to suppress axis scale for biplot arrays. \item Number of iterations in nonmetric multidimensional scaling (NMDS) can be set with keyword \code{maxit} (defaults \code{200}) in \code{metaMDS}. } } % new features \subsection{DEPRECATED}{ \itemize{ \item The result objects of \code{cca}, \code{rda} and \code{capscale} will no longer have scores \code{u.eig}, \code{v.eig} and \code{wa.eig} in the future versions of \pkg{vegan}. This change does not influence normal usage, because \pkg{vegan} functions do not need these items. However, external scripts and packages may need changes in the future versions of \pkg{vegan}. } } % deprecated } % vegan 2.0-7 \section{Changes in version 2.0-6}{ \subsection{BUG FIXES}{ \itemize{ \item The species scores were scaled wrongly in \code{capscale()}. They were scaled correctly only when Euclidean distances were used, but usually \code{capscale()} is used with non-Euclidean distances. Most graphics will change and should be redone. The change of scaling mainly influences the spread of species scores with respect to the site scores. \item Function \code{clamtest()} failed to set the minimum abundance threshold in some cases. In addition, the output was wrong when some of the possible species groups were missing. Both problems were reported by Richard Telford (Bergen, Norway). \item Plotting an object fitted by \code{envfit()} would fail if \code{p.max} was used and there were unused levels for one or more factors. The unused levels could result from deletion of observations with missing values or simply as the result of supplying a subset of a larger data set to \code{envfit()}. \item \code{multipart()} printed wrong information about the analysis type (but did the analysis correctly). Reported by Valerie Coudrain. \item \code{oecosimu()} failed if its \code{nestedfun} returned a data frame. A more fundamental fix will be in \pkg{vegan} 2.2-0, where the structure of the \code{oecosimu()} result will change. \item The plot of two-dimensional \code{procrustes()} solutions often draw original axes in a wrong angle. The problem was reported by Elizabeth Ottesen (MIT). \item Function \code{treedive()} for functional or phylogenetic diversity did not correctly match the species names between the community data and species tree when the tree contained species that did not occur in the data. Related function \code{treedist()} for phylogenetic distances did not try to match the names at all. } } % bug fixes \subsection{NEW FEATURES}{ \itemize{ \item The output of \code{capscale()} displays the value of the additive constant when argument \code{add = TRUE} was used. \item \code{fitted()} functions for \code{cca()}, \code{rda()} and \code{capscale()} can now return conditioned (partial) component of the response: Argument \code{model} gained a new alternative \code{model = "pCCA"}. \item \code{dispindmorisita()} output gained a new column for Chi-squared based probabilities that the null hypothesis (random distribution) is true. \item \code{metaMDS()} and \code{monoMDS()} have new default convergence criteria. Most importantly, scale factor of the gradient (\code{sfgrmin}) is stricter. The former limit was too slack with large data sets and iterations stopped early without getting close to the solution. In addition, \code{scores()} ignore now requests to dimensions beyond those calculated instead of failing, and \code{scores()} for \code{metaMDS()} results do not drop dimensions. \item \code{msoplot()} gained \code{legend} argument for positioning the legend. \item Nestedness function \code{nestednodf()} gained a \code{plot} method. \item \code{ordiR2step()} gained new argument \code{R2scope} (defaults \code{TRUE}) which can be used to turn off the criterion of stopping when the adjusted \eqn{R^2}{R-squared} of the current model exceeds that of the scope. This option allows model building when the \code{scope} would be overdetermined (number of predictors higher than number of observations). \code{ordiR2step()} now handles partial redundancy analysis (pRDA). \item \code{orditorp()} gained argument \code{select} to select the rows or columns of the results to display. \item \code{protest()} prints the standardized residual statistic \eqn{m_{12}^2}{squared m12} in addition to the squared Procrustes correlation \eqn{R^2}{R-squared}. Both were calculated, but only the latter was displayed. Permutation tests are much faster in \code{protest()}. Instead of calling repeatedly \code{procrustes()}, the goodness of fit statistic is evaluated within the function. \item \code{wcmdscale()} gained methods for \code{print}, \code{plot} etc. of the results. These methods are only used if the full \code{wcmdscale} result is returned with, e.g., argument \code{eig = TRUE}. The default is still to return only a matrix of scores similarly as the standard \R function \code{cmdscale()}, and in that case the new methods are not used. } } % new features } % end 2.0-6 \section{Changes in version 2.0-5}{ \subsection{BUG FIXES}{ \itemize{ \item \code{anova(, ...)} failed with \code{by = "axis"} and \code{by = "term"}. The bug was reported by Dr Sven Neulinger (Christian Albrecht University, Kiel, Germany). \item \code{radlattice} did not honour argument \code{BIC = TRUE}, but always displayed AIC. } } % bug fixes \subsection{NEW FUNCTIONS}{ \itemize{ \item Most \pkg{vegan} functions with permutation tests have now a \code{density} method that can be used to find empirical probability distributions of permutations. There is a new \code{plot} method for these functions that displays both the density and the observed statistic. The \code{density} function is available for \code{adonis}, \code{anosim}, \code{mantel}, \code{mantel.partial}, \code{mrpp}, \code{permutest.cca} and \code{procrustes}. Function \code{adonis} can return several statistics, and it has now a \code{densityplot} method (based on \pkg{lattice}). Function \code{oecosimu} already had \code{density} and \code{densityplot}, but they are now similar to other \pkg{vegan} methods, and also work with \code{adipart}, \code{hiersimu} and \code{multipart}. \item \code{radfit} functions got a \code{predict} method that also accepts arguments \code{newdata} and \code{total} for new ranks and site totals for prediction. The functions can also interpolate to non-integer \dQuote{ranks}, and in some models also extrapolate. } } % new functions \subsection{NEW FEATURES}{ \itemize{ \item Labels can now be set in the \code{plot} of \code{envfit} results. The labels must be given in the same order that the function uses internally, and new support function \code{labels} can be used to display the default labels in their correct order. \item Mantel tests (functions \code{mantel} and \code{mantel.partial}) gained argument \code{na.rm} which can be used to remove missing values. This options should be used with care: Permutation tests can be biased if the missing values were originally in matching or fixed positions. \item \code{radfit} results can be consistently accessed with the same methods whether they were a single model for a single site, all models for a single site or all models for all sites in the data. All functions now have methods \code{AIC}, \code{coef}, \code{deviance}, \code{logLik}, \code{fitted}, \code{predict} and \code{residuals}. } } % new features \subsection{INSTALLATION AND BUILDING}{ \itemize{ \item Building of \pkg{vegan} vignettes failed with the latest version of LaTeX (TeXLive 2012). \item \R{} versions later than 2.15-1 (including development version) report warnings and errors when installing and checking \pkg{vegan}, and you must upgrade \pkg{vegan} to this version. The warnings concern functions \code{cIndexKM} and \code{betadisper}, and the error occurs in \code{betadisper}. These errors and warnings were triggered by internal changes in \R. } } % installation and building } % version 2.0-5 \section{Changes in version 2.0-4}{ \subsection{BUG FIXES}{ \itemize{ \item \code{adipart} assumed constant gamma diversity in simulations when assessing the \eqn{P}-value. This could give biased results if the null model produces variable gamma diversities and option \code{weights = "prop"} is used. The default null model (\code{"r2dtable"}) and the default option (\code{weights = "unif"}) were analysed correctly. \item \code{anova(, by = "axis")} and other \code{by} cases failed due to \file{NAMESPACE} issues. \item \code{clamtest} wrongly used frequencies instead of the counts when calculating sample coverage. No detectable differences were produced when rerunning examples from Chazdon et al. 2011 and \pkg{vegan} help page. \item \code{envfit} failed with unused factor levels. \item \code{predict} for \code{cca} results with \code{type = "response"} or \code{type = "working"} failed with \code{newdata} if the number of rows did not match with the original data. Now the \code{newdata} is ignored if it has a wrong number of rows. The number of rows must match because the results in \code{cca} must be weighted by original row totals. The problem did not concern \code{rda} or \code{capscale} results which do not need row weights. Reported by Glenn De'ath. } }% end bug fixes \subsection{NEW FEATURES}{ \itemize{ \item Functions for diversity partitioning (\code{adipart}, \code{hiersimu} and \code{multipart}) have now \code{formula} and \code{default} methods. The \code{formula} method is identical to the previous functions, but the \code{default} method can take two matrices as input. Functions \code{adipart} and \code{multipart} can be used for fast and easy overall partitioning to alpha, beta and gamma diversities by omitting the argument describing the hierarchy. \item The method in \code{betadisper} is biased with small sample sizes. The effects of the bias are strongest with unequal sample sizes. A bias adjusted version was developed by Adrian Stier and Ben Bolker, and can be invoked with argument \code{bias.adjust} (defaults to \code{FALSE}). \item \code{bioenv} accepts dissimilarities (or square matrices that can be interpreted as dissimilarities) as an alternative to community data. This allows using other dissimilarities than those available in \code{vegdist}. \item \code{plot} function for \code{envfit} results gained new argument \code{bg} that can be used to set background colour for plotted labels. \item \code{msoplot} is more configurable, and allows, for instance, setting y-axis limits. \item Hulls and ellipses are now filled using semitransparent colours in \code{ordihull} and \code{ordiellipse}, and the user can set the degree of transparency with a new argument \code{alpha}. The filled shapes are used when these functions are called with argument \code{draw = "polygon"}. Function \code{ordihull} puts labels (with argument \code{label = TRUE}) now in the real polygon centre. \item \code{ordiplot3d} returns function \code{envfit.convert} and the projected location of the \code{origin}. Together these can be used to add \code{envfit} results to existing \code{ordiplot3d} plots. Equal aspect ratio cannot be set exactly in \code{ordiplot3d} because underlying core routines do not allow this. Now \code{ordiplot3d} sets equal axis ranges, and the documents urge users to verify that the aspect ratio is reasonably equal and the graph looks like a cube. If the problems cannot be solved in the future, \code{ordiplot3d} may be removed from next releases of \pkg{vegan}. \item Function \code{ordipointlabel} gained argument to \code{select} only some of the items for plotting. The argument can be used only with one set of points. } } % end new features }%end version 2.0-4 \section{Changes in version 2.0-3}{ \subsection{NEW FUNCTIONS}{ \itemize{ \item Added new nestedness functions \code{nestedbetasor} and \code{nestedbetajac} that implement multiple-site dissimilarity indices and their decomposition into turnover and nestedness components following Baselga (\emph{Global Ecology and Biogeography} 19, 134--143; 2010). \item Added function \code{rarecurve} to draw rarefaction curves for each row (sampling unit) of the input data, optionally with lines showing rarefied species richness with given sample size for each curve. \item Added function \code{simper} that implements \dQuote{similarity percentages} of Clarke (\emph{Australian Journal of Ecology} 18, 117--143; 1993). The method compares two or more groups and decomposes the average between-group Bray-Curtis dissimilarity index to contributions by individual species. The code was developed in \href{https://github.com/jarioksa/vegan}{GitHub} by Eduard Szöcs (Uni Landau, Germany). } } % end new functions \subsection{BUG FIXES}{ \itemize{ \item \code{betadisper()} failed when the \code{groups} was a factor with empty levels. \item Some constrained ordination methods and their support functions are more robust in border cases (completely aliased effects, saturated models, user requests for non-existng scores etc). Concerns \code{capscale}, \code{ordistep}, \code{varpart}, \code{plot} function for constrained ordination, and \code{anova(, by = "margin")}. \item The \code{scores} function for \code{monoMDS} did not honour \code{choices} argument and hence dimensions could not be chosen in \code{plot}. \item The default \code{scores} method failed if the number of requested axes was higher than the ordination object had. This was reported as an error in \code{ordiplot} in \href{https://stat.ethz.ch/pipermail/r-sig-ecology/2012-February/002768.html}{R-sig-ecology} mailing list. } } % end bug fixes \subsection{NEW FEATURES}{ \itemize{ \item \code{metaMDS} argument \code{noshare = 0} is now regarded as a numeric threshold that always triggers extended dissimilarities (\code{stepacross}), instead of being treated as synonymous with \code{noshare = FALSE} which always suppresses extended dissimilarities. \item Nestedness discrepancy index \code{nesteddisc} gained a new argument that allows user to set the number of iterations in optimizing the index. \item \code{oecosimu} displays the mean of simulations and describes alternative hypothesis more clearly in the printed output. \item Implemented adjusted \eqn{R^2}{R-squared} for partial RDA. For partial model \code{rda(Y ~ X1 + Condition(X2))} this is the same as the component \code{[a] = X1|X2} in variance partition in \code{varpart} and describes the marginal (unique) effect of constraining term to adjusted \eqn{R^2}{R-squared}. \item Added Cao dissimilarity (CYd) as a new dissimilarity method in \code{vegdist} following Cao et al., \emph{Water Envir Res} 69, 95--106 (1997). The index should be good for data with high beta diversity and variable sampling intensity. Thanks to consultation to Yong Cao (Univ Illinois, USA). } } % end new features } % end version 2.0-3 \section{Changes in version 2.0-2}{ \subsection{BUG FIXES}{ \itemize{ \item Function \code{capscale} failed if constrained component had zero rank. This happened most likely in partial models when the conditions aliased constraints. The problem was observed in \code{anova(..., by ="margin")} which uses partial models to analyses the marginal effects, and was reported in an email message to \href{https://stat.ethz.ch/pipermail/r-help/2011-October/293077.html}{R-News mailing list}. \item \code{stressplot} and \code{goodness} sometimes failed when \code{metaMDS} was based on \code{isoMDS} (\pkg{MASS} package) because \code{metaMDSdist} did not use the same defaults for step-across (extended) dissimilarities as \code{metaMDS(..., engine = "isoMDS")}. The change of defaults can also influence triggering of step-across in \code{capscale(..., metaMDSdist = TRUE)}. \item \code{adonis} contained a minor bug resulting from incomplete implementation of a speed-up that did not affect the results. In fixing this bug, a further bug was identified in transposing the hat matrices. This second bug was only active following fixing of the first bug. In fixing both bugs, a speed-up in the internal f.test() function is fully realised. Reported by Nicholas Lewin-Koh. } } % end bug fixes \subsection{NEW FEATURES}{ \itemize{ \item \code{ordiarrows} and \code{ordisegments} gained argument \code{order.by} that gives a variable to sort points within \code{groups}. Earlier the points were assumed to be in order. \item Function \code{ordispider} invisibly returns the coordinates to which the points were connected. Typically these are class centroids of each point, but for constrained ordination with no \code{groups} they are the LC scores. } } %end new features } %end version 2.0-2 \section{Changes in version 2.0-1}{ \subsection{NEW FUNCTIONS}{ \itemize{ \item \code{clamtest}: new function to classify species as generalists and specialists in two distinct habitats (CLAM test of Chazdon et al., \emph{Ecology} 92, 1332--1343; 2011). The test is based on multinomial distribution of individuals in two habitat types or sampling units, and it is applicable only to count data with no over-dispersion. \item \code{as.preston} gained \code{plot} and \code{lines} methods, and \code{as.fisher} gained \code{plot} method (which also can add items to existing plots). These are similar as \code{plot} and \code{lines} for \code{prestonfit} and \code{fisherfit}, but display only data without the fitted lines. \item \code{raupcrick}: new function to implement Raup-Crick dissimilarity as a probability of number of co-occurring species with occurrence probabilities proportional to species frequencies. \pkg{Vegan} has Raup-Crick index as a choice in \code{vegdist}, but that uses equal sampling probabilities for species and analytic equations. The new \code{raupcrick} function uses simulation with \code{oecosimu}. The function follows Chase et al. (2011) \emph{Ecosphere} 2:art24 [\href{http://www.esajournals.org/doi/abs/10.1890/ES10-00117.1}{doi:10.1890/ES10-00117.1}], and was developed with the consultation of Brian Inouye. } } % end NEW FUNCTIONS \subsection{BUG FIXES}{ \itemize{ \item Function \code{meandist} could scramble items and give wrong results, especially when the \code{grouping} was numerical. The problem was reported by Dr Miguel Alvarez (Univ. Bonn). \item \code{metaMDS} did not reset \code{tries} when a new model was started with a \code{previous.best} solution from a different model. \item Function \code{permatswap} for community null models using quantitative swap never swapped items in a \eqn{2 \times 2}{2 by 2} submatrix if all cells were filled. \item The result from \code{permutest.cca} could not be \code{update}d because of a \file{NAMESPACE} issue. \item \R 2.14.0 changed so that it does not accept using \code{sd()} function for matrices (which was the behaviour at least since \R 1.0-0), and several \pkg{vegan} functions were changed to adapt to this change (\code{rda}, \code{capscale}, \code{simulate} methods for \code{rda}, \code{cca} and \code{capscale}). The change in \R 2.14.0 does not influence the results but you probably wish to upgrade \pkg{vegan} to avoid annoying warnings. } } % end BUG FIXES \subsection{ANALYSES}{ \itemize{ \item \code{nesteddisc} is slacker and hence faster when trying to optimize the statistic for tied column frequencies. Tracing showed that in most cases an improved ordering was found rather early in tries, and the results are equally good in most cases. } } % end ANALYSES } % end version 2.0-1 \section{Changes in version 2.0-0}{ \subsection{GENERAL}{ \itemize{ \item Peter Minchin joins the \pkg{vegan} team. \item \pkg{vegan} implements standard \R \file{NAMESPACE}. In general, \code{S3} methods are not exported which means that you cannot directly use or see contents of functions like \code{cca.default}, \code{plot.cca} or \code{anova.ccabyterm}. To use these functions you should rely on \R delegation and simply use \code{cca} and for its result objects use \code{plot} and \code{anova} without suffix \code{.cca}. To see the contents of the function you can use \code{:::}, such as \code{vegan:::cca.default}. This change may break packages, documents or scripts that rely on non-exported names. \item \pkg{vegan} depends on the \pkg{permute} package. This package provides powerful tools for restricted permutation schemes. All \pkg{vegan} permutation will gradually move to use \pkg{permute}, but currently only \code{betadisper} uses the new feature. } } % end GENERAL \subsection{NEW FUNCTIONS}{ \itemize{ \item \code{monoMDS}: a new function for non-metric multidimensional scaling (NMDS). This function replaces \code{MASS::isoMDS} as the default method in \code{metaMDS}. Major advantages of \code{monoMDS} are that it has \sQuote{weak} (\sQuote{primary}) tie treatment which means that it can split tied observed dissimilarities. \sQuote{Weak} tie treatment improves ordination of heterogeneous data sets, because maximum dissimilarities of \eqn{1} can be split. In addition to global NMDS, \code{monoMDS} can perform local and hybrid NMDS and metric MDS. It can also handle missing and zero dissimilarities. Moreover, \code{monoMDS} is faster than previous alternatives. The function uses \code{Fortran} code written by Peter Minchin. \item \code{MDSrotate} a new function to replace \code{metaMDSrotate}. This function can rotate both \code{metaMDS} and \code{monoMDS} results so that the first axis is parallel to an environmental vector. \item \code{eventstar} finds the minimum of the evenness profile on the Tsallis entropy, and uses this to find the corresponding values of diversity, evenness and numbers equivalent following Mendes et al. (\emph{Ecography} 31, 450-456; 2008). The code was contributed by Eduardo Ribeira Cunha and Heloisa Beatriz Antoniazi Evangelista and adapted to \pkg{vegan} by Peter Solymos. \item \code{fitspecaccum} fits non-linear regression models to the species accumulation results from \code{specaccum}. The function can use new self-starting species accumulation models in \pkg{vegan} or other self-starting non-linear regression models in \R. The function can fit Arrhenius, Gleason, Gitay, Lomolino (in \pkg{vegan}), asymptotic, Gompertz, Michaelis-Menten, logistic and Weibull (in base \R) models. The function has \code{plot} and \code{predict} methods. \item Self-starting non-linear species accumulation models \code{SSarrhenius}, \code{SSgleason}, \code{SSgitay} and \code{SSlomolino}. These can be used with \code{fitspecaccum} or directly in non-linear regression with \code{nls}. These functions were implemented because they were found good for species-area models by Dengler (\emph{J. Biogeogr.} 36, 728-744; 2009). } } % end NEW FUNCTIONS \subsection{NEW FEATURES}{ \itemize{ \item \code{adonis}, \code{anosim}, \code{meandist} and \code{mrpp} warn on negative dissimilarities, and \code{betadisper} refuses to analyse them. All these functions expect dissimilarities, and giving something else (like correlations) probably is a user error. \item \code{betadisper} uses restricted permutation of the \pkg{permute} package. \item \code{metaMDS} uses \code{monoMDS} as its default ordination engine. Function gains new argument \code{engine} that can be used to alternatively select \code{MASS::isoMDS}. The default is not to use \code{stepacross} with \code{monoMDS} because its \sQuote{weak} tie treatment can cope with tied maximum dissimilarities of one. However, \code{stepacross} is the default with \code{isoMDS} because it cannot handle adequately these tied maximum dissimilarities. \item \code{specaccum} gained \code{predict} method which uses either linear or spline interpolation for data between observed points. Extrapolation is possible with spline interpolation, but may make little sense. \item \code{specpool} can handle missing values or empty factor levels in the grouping factor \code{pool}. Now also checks that the length of the \code{pool} matches the number of observations. } } % end NEW FEATURES \subsection{DEPRECATED AND DEFUNCT}{ \itemize{ \item \code{metaMDSrotate} was replaced with \code{MDSrotate} that can also handle the results of \code{monoMDS}. \item \code{permuted.index2} and other \dQuote{new} permutation code was removed in favour of the \pkg{permute} package. This code was not intended for normal use, but packages depending on that code in \pkg{vegan} should instead depend on \pkg{permute}. } } % end DEPRECATED \subsection{ANALYSES}{ \itemize{ \item \code{treeheight} uses much snappier code. The results should be unchanged. } } % end ANALYSES }% end VERSION 2.0 vegan/inst/ChangeLog0000644000176200001440000054162012116653256014120 0ustar liggesusers$Date: 2013-03-09 17:35:10 +0200 (Sat, 09 Mar 2013) $ VEGAN RELEASE VERSIONS at http://cran.r-project.org/ Version 2.0-7 (opened February 17, 2013) * merge r2476: take back part of 2434 and return matrix from wcmdscale unless eigenvalues are requested. * merge r2469, 2470: do not use u.eig & v.eig. * merge r2468: tabasco checks against negative data. * merge r2462: fix "asymp" model in fitspecaccum. * merge r2458: restructure fitspecaccum. * merge r2453: nestedtemp failed with fill < 0.38%. * merge r2452: plot/text.cca gained axis.bp = TRUE argument. * merge r2448 (partly), 2449: print.monoMDS clearer about convergence. Only this part merged: metaMDSiter untouched. * handcraft r2447: metaMDSiter gained argument 'maxit'. * merge r2443: edit cca.object.Rd. * merge r2434: return wcmdscale object always with non-default arguments. * merge r2432: edit cca.Rd. * merge r2431,2433,2435 thru 2442: add tabasco(). Version 2.0-6 (released February 11, 2013) * merge 2420, 2425: cca cross references. * merge 2417 thru 2419: predict & fitted upgraded for cca etc. * merge 2414: adjustment in predict.capscale. * merge 2408: FAQ on random effects in cca etc. * merge 2404,2411: refer Legendre & Legendre for the vegan rda algorithm. * merge 2934 (partial, mc): oecosimu handles nestedfun() returning data.frame. Not merged: checking length of statistic when setting its name. * merge 2932,3: matching names in treedive() and treedist(). * merge 2388 (partial), 2389, 2390: faster protest, the part of evaluating the test statistic hand crafted, because parallelizations caused conflicts here. * merge 2385, 7: protest print, faster sum of squares in procrustes. * merge 2384: new FAQ entries. * merge 2383: remove alias to print.wcmdscale. * merge 2374,2376,2378,2382: orditorp gains argument select * merge 2372: ordilabel uses ordiArgAbsorber when plotting * merge 2369: clamtest fix and border cases. * merge 2367: rectify mantel, summary.anosim print. * merge 2362: doc on r2357 for capscale. * merge 2361: adjust imaginary axes similarly as real eigenvalue. * merge 2358: print etc. for wcmdscale (no stressplot parts of 2358). * merge 2357: print additive constant in capscale. * merge 2350: capscale species score scaling bug fix. * merge 2349: multipart print bug fix. * merge 2345: FAQ update (github, metric NMDS space). * merge 2342: unused factor levels in envfit/factorfit. * merge 2341 (partial): visible space in pdf of Rnw files. * merge 2336: stricter monoMDS convergence criteria. * merge 2334,5: scores.monoMDS,metaMDS updates. * merge 2332: add plot.nestednodf(). * merge 2330,1: ordiR2step() gained arg 'R2scope' and handles partial RDA. * merge 2328,9: add 'legend' arg to msoplot(). * merge 2325: fix rotation of axes in 2-d plot.procrustes(). * merge 2319, 2323: clamtest bug fixes and clarifications. * merge 2318: dispindmorista gains p-values of output. Version 2.0-5 (released October 8, 2012) * merge r2309: anova.cca.Rd edits. * merge r2307: no line breaks within \code{} in Rd. * merge r2305: proofread Rd files a..b. * merge r2299: fix broken \link{}s in docs. * merge r2297: upgrade docs for L&L 2012 (3r ed.) * merge r2291 thru 2296, 2298, 2300: radfit upgrade. * merge r2287,8: scoping in anova.ccabyaxis and anova.ccabyterm. * merge r2285: add predict.radfit. * merge r2262, 2268:2270, and also r1950: mantel and mantel.partial gained argument na.rm = FALSE. This needed hand editing of merges, and also merging old r1950: beware and test. * merge r2271: tweak varpart.Rd. (plot coloured circles). * merge r2267: tweak vegdist.Rd (ref to vegdist). * merge r2260: streamline adonis (internal changes). * merge r2258: protect betadisper against changes in R-devel API. * merge r2254: stylistic in examples of Rd files. * merge r2252,56,57,61,64,66: add density methods for vegan permutation functions and add plot.densityvegan to display these. * merge r2250: do not use paste0 in envift.Rd (fails in R 2.14). * merge r2249: fix vignette building with TeXLive 2012. * merge r2246: remove dead code from cIndexKM() and R-devel CMD check warning. * merge r2244: more portable doc/Makefile * merge r2237 thru 2240: add labels.envfit() and "labels" arg to plot.envfit(). * merge r2227 thru 2235: adipart, hiersimu, multipart code refactoring (especially formula method) and making to inherit from oecosimu in printing the results. The merge did not apply quite cleanly, but oecosimu, print.oecosimu and NAMESPACE needed manual editing (beware). * merge r2225: biplot.rda 'type' fix. Version 2.0-4 (released June 18, 2012) * merge r2215: plot.envfit() gains args 'bg' for background colour of labels. * cherry-pick from r2213: warn on empty rows in simper (picked github revision cce42b3). * merge r2206,7: check 'newdata' dims in predict(..., type = "response"|"working") for CA results. * merge r2195-7, 2204: bias adjusted betadisper. * merge r2191-2193: standardise handling of 'select' arg in those plotting functions that support it. Adds non-exported function .checkSelect(). * merge r2182,2182,2199,2201: FAQ about data size in NMDS. * merge r2178, 2180: ordipointlabel gains 'select' argument. * merge r2173-2176, 2185: ordihull labels, semintransparent colours in ordihull & ordiellipse. * merge r2172,2179,2181,2184,2186,2187: metaMDS warns about too good stress. * merge r2170: bioenv accepts dissimilarities as input. * merge r2167: warn about unequal aspect ratio in ordiplot3d. * merge r2162: set equal axis scales for ordiplot3d. * merge r2157:2160,2167,2168,2208: ordiplot3d returns envfit.convert(). * merge r2156: betadisper example adapted for default spatial median. * merge r2150: monoMDS checks that the number of dissimilarities is sufficient for the requested analysis. The decostand.Rd fix of r2150 was not yet merged. * merge r2149: drarefy & rrarefy check that input data are integers. * merge r2148 (partial): format references. However, scoverage() was not merged yet, and its changes have not been merged. * merge r2144: hiersimu and multipart do not assume constant gamma. Similar change was made in r2132 to adipart. * merge r2143: formula method for adipart/hiersimu/multipart. NAMESPACE needed manual merge (edited patch from diff). * merge r2139: clamtest coverage threshold fix. * merge r2137: explain data transformation in pyrifos.Rd. * merge r2135: print.adipart displays null model method. * merge r2132: adipart bug fix: assumed constant gamma in permutations. * merge r2129: envfit failed with empty factor levels. * merge r2128: anova(, by = ...) failed. * merge r2127: more configurable msoplot. * merge r2125: typo in anova.cca.Rd. * merge r2123: r2121 for adonis. * merge r2121: doc location/dispersion mix-up in simper, mrpp & anosim. Version 2.0-3 (released March 3, 2012) * merge r2115: simper fixes from github EDiLD/vegan pull request #6 by Eduard Szöcs (proportions instead of percentages etc.) * merge r2113: tweak simper.Rd formatting. * commit r2112: deactivate permutation tests in simper. * merge r2110: centroids.cca fix for 2-level factors as the only constraint. * merge r2106: merge scores and vegdist doc updates from github. * merge r2105: pacify -pedantic C compiler in vegdist. * merge r2104: add Cao index in vegdist. * merge r2103: fix bug in permutation p-values in simper. * merge r2101: fix stress description and remove refs to ecodist::nmds in monoMDS.Rd. * merge r2100: fix print.summary.simper. * merge r2098: fix summary.simper(..., order=FALSE) when permutations = 0. * merge r2097: add print.summary.simper. * copy simper.R & simper.Rd at r2092. * merge r2089: scores.default fixed with non-existing scores. * merge r2080: use droplevels in betadisper. * merge r2079: do not use .Internal(). * merge r2078, 2084: simper NAMESPACE. * merge r2071,2: dimnames fix in indopower & expand example. * merge r2068: broken url in renyi.Rd. * merge r2065: number of iterations is an argument in nesteddisc. * merge r2060: adonis tells terms were added sequentially. * mrege r2057: add .Rinstignore to silense R 2.15.0 checks. * merge r2056: use inconsolata fonts in vignettes. * merge r2053: implement adjusted R2 for partial RDA. * merge r2052: do not scale constraints in varpart[234]. * merge r2049: capscale robust for zeroed centroids. * merge r2044: ordistep robust for complete aliasing. * merge r2043: anova.ccabymargin robust for zero effects. * merge r2035,6,7: more robust plot.cca. * merge r2030: resurrect old ChangeLog entries. * merge r2027,28,33: tweak oecosimu printed output. * merge r2018,19, 20, 21: add nestedbetasor() & nestedbetajac(). * merge r2016: empty factor levels in betadisper() fixed in ordimedian(). * merge r2015: remove Bob O'Hara's old email address. * r2014: typo in diversity.Rd. * merge r2008,9,11,12: add rarecurve. * merge r2007: FAQ update for arrow scaling. * merge r2004: metaMDS(..., noshare=0) triggers stepacross(), but 'noshare = FALSE' never does. * merge r2001: explain scaling of arrows in envfit() plot() -- this looks like being a FAQ. Version 2.0-2 (opened October 20, 2011) * merge r1991 by hand: change sapply(H.s t) to use lapply in adonis to fix a further bug in implementing speed-ups in f.test * merge r1988 by hand: calling f.test without transposed matrix bug in adonis. * merge r1985: ordiarrows, ordisegments gained arg 'order.by'. * merge r1974,1975,1980,1982: FAQ update. * merge r1970: ordispider returns invisible plotting structure. * merge r1969: ordiplot3d.Rd tells about xyz.convert(). * merge r1964: clarify stress scaling in iso/monoMDS. * merge r1961: consinstent 'noshrink' defaults in metaMDSdist() and metaMDS(..., engine="isoMDS") * merge r1959: capscale zero-rank constraints bug fix. Version 2.0-1 (released October 20, 2011) * merge r1945: add plot & lines for as.preston & as.fisher. * merge r1944: R 2.14.0 (r52709) gives a message() when sd() is used for matrices -- now fixed for rda.default, capscale and simulate.rda/cca/capscale. * merge r1939: slacker and faster nesteddisc. * merge r1928: permutest.cca result could not be update()d. * merge r1927: reset 'tries' when 'previous.best' was a different model. * merge r1916: ordisurf.Rd references. * merge r1914: example speed-up. * r1897, 1840, 1825, 1823: copy clamtest (at r1897), summary.clamtest, print.summary.clamtest, plot.clamtest (all at r1823) and clamtest.Rd (at r1897) * merge r1872: raupcrick doc fixes. * merge r1869: meandist re-ordering bug fix. * merge r1846: tweak speed (a bit). * merge r1845: faster centroids.cca. * merge r1843: tiny speed-up in permutest.cca(..., first=TRUE) * merge r1838: a bit faster example(MDSrotate). * merge r1835: add raupcrick. * merge r1811: permatswap bug fix in nestedness.c. * merge r1810: -pedatic -Wall fixes in monoMDS.f, ordering.f Version 2.0-0 (released September 8, 2011) * opened the release candidate of vegan_2.0-0 on September 3, 2011 in the devel branch pkg/vegan at r1785. * Release: Copied the devel pkg/vegan branch to release branches/2.0 at r1796 (inst/doc/vegan.bib at r1798), and removed tests/ directory. * merge r1800: Abstract to diversity-vegan.Rnw. * some old functions used attributes(x)$which instead of more correct attr(x, "which"), and in addition postMDS() used attributes(x)$names instead of names(). Concerns anosim(), initMDS(), postMDS(), mantel(), mantel.partial() and mso(). initMDS() was one of the two functions that was unchanged since the first vegan release on 6/9/01, and it was changed day before it turned ten-years-old. After this, wisconsin() is the only unchanged function from the first release. * vegan-defunct: put definitions of removed "new" permutation functions to vegan-defunct and have a vegan-defunct.Rd for them. VEGAN DEVEL VERSIONS at http://vegan.r-forge.r-project.org/ Version 1.92-2 (closed September 3, 2011) * monoMDS: saves and displays info on the dissimilarities used, and displays the number of points. Checks that input is dissimilarities, and warns on negative ones. * MDSrotate: metaMDSrotate() was renamed to MDSrotate(), and metaMDSrotate() was .Deprecated. * meandist: warns if some dissimilarities are negative (small negative values are tolerated). * vegandocs: copied branches/1.17/inst/NEWS as ONEWS (old news), and adapted vegandocs. Expanded documentation of vegandocs(). Version 1.92-1 (closed August 28, 2011) * adonis, betadisper, mrpp: check that dissimilarities are non-negative (small negative values are tolerated). The test was not added to meandist: there may be legitimate usages for correlation-like objects although summary.meandist() is invalid. The addition was triggered by a user who tried to analyse Chase et al. Raup-Crick values in the range -1 .. +1 in betadisper(). * anosim: warn if some dissimilarities are negative. Function can handle negative dissimilarities because it is based on ranks, but probably this is a user error (but can be intentional and correct). * metaMDSrotate: can rotate monoMDS() results. * monoMDS: gained argument 'pc' (defaults TRUE) to rotate the final scores to principal components. * specaccum, fitspecaccum: gained predict() methods. With specaccum() predict(..., newdata) can estimate values for 'newdata' with linear or spline interpolation if necessary. Without 'newdata' the function returns the the fitted expected richness. With fitspecaccum(), the predict.nls() is performed to each fitted model. Function fitspecaccum() is written so that default fitted(), residuals() and coef() work. * specpool: failed if 'pool' had NA values or empty factor levels. Checks that 'pool' length matches nrow of data. * NAMESPACE: imports nobs from permute_0.5-3 in R 2.12.2 and older which do not yet have nobs() generic. Do not export orderingKM & ordimedian. Remove aliases to non-exported and non-documented print and print.summary methods in Rd files (but leave documented ones). * vegandocs: shows the permutation vignette of the 'permute' package. Version 1.92-0 (closed August 23, 2011) * open new version with the release of vegan_1.17-12 on August 17, 2011. * fitspecaccum: a typo and a condition was never true. * monoMDS & metaMDS: always print types of stress and ties. * NAMESPACE: export pasteCall for analogue. * NEWS: added file NEWS.Rd for vegan release 2.0 news in Rd format. Keeping neat formatting of this file may be challenging to many text editors, but it is worth trying. This file should list the important items for regular vegan users, whereas this ChangeLog should explain the changes to other vegan developers. If getOption("help_type") == "html", should start a browser to show the NEWS, and use text console otherwise ("html" tested on MacOS R.App GUI, text mode in Linux and MacOS bash shells, no testing on Windows yet). Although the browser knows how to display NEWS.Rd, it does not format the page properly (\code{foo} shows as ordinary text etc). As a kluge we now make a NEWS.html file in the inst/doc directory. NEWS.html cannot be made in the inst/ directory since browser only agrees to show NEWS (plain) in the main directory or files in doc directory. Version 1.91-0 (closed August 18, 2011) * NAMESPACE: added namespace to vegan. Currently hides all that can be hidden, and exports only main functions: Some method functions will be probably exported later. Superfluous aliases were removed with the registration of S3 methods, and scoping was changed a bit in anova.ccabyterm, model.matrix.cca and model.frame.cca. as.mcmc is not yet registred: it need changes in Imports field of DESCRIPTION (same with vif.cca: vif is defined in car, but we could have our private vif generic here?). * Vignettes: use now jss.cls shipped with R instead of amsart.cls for better consistency with R and permute style. * plot.envfit: When `add == FALSE`, make sure we leave enough room around the plotting locations to contain the arrow and centroid labels. * plot.isomap: will always plot points or text above net so that they are visible. Gained argument 'type'. * ordiplot: expose arg 'cex' so that user can change its value. Age shows in this function, and it is badly in need of complete re-writing to improve its flexibility. Version 1.90-2 (closed August 6, 2011) * ordilabel: gained argument 'select'. * orditorp: works with NA scores. * make.cepnames: ignores duplicated and trailing dots. It is assumed that the names to be changed came via R make.names() mechanism which changes all blanks and non-accepted characters to dots, and this may give extra dots in names. Gained argument to take the second item of the name instead of the last which may help in names like "Vaccinium vitis-idaea" (which becomes "Vaccinium.vitis.idaea" -> "Vaccidae") or names which have authors or other rubbish at the end. Version 1.90-1 (closed July 23, 2011) * cca/rda/capscale support functions: cca/rda/capscale were changed to return zero components instead of NULL for completely aliased constraints (CCA) or saturated models (CA), but several support functions still checked for is.null() only, although they also should check if rank == 0. Some functions failed, and these are fixed here: anova.cca, bstick.cca, goodness.cca/rda, predict.cca/rda, screeplot.cca. The following functions did not fail, but were fixed: anova.ccanull, calibrate.cca, ordirgl, ordiresids, ordiplot3d, deviance.cca/rda (simplified), ordixyplot. * swan: gained argument 'maxit' that can be used to restrict the number of beals() passes on zeros. The default is 'maxit = Inf' which is the old behaviour: beals() passes on zero entries continue until there are no zeros or the number of zeros does not change. Probably only 'maxit = 1' makes any sense (in addition to the default 'maxit = Inf'), but all values are allowed. * metaMDSrotate: results could be a bit off with NA in environmental vector and >2D solution. The starting scores must be orthogonal, but the initial orthogonalizing PCA was run without removing NA cases. * ordiellipse, ordihull, ordispider: will remove NA scores that can appear with na.action in cca/rda/capscale (and perhaps in other cases). * betadiver: argument 'index' was renamed to 'method' for compatibility with dist() objects. Argument 'index' is still recognized with a warning. * metaMDS: Documentation and interface adapted to monoMDS(). Argument 'noshare' defaults to FALSE with monoMDS(), since tie breaking seem to handle tied maximum dissimilarities even better than stepacross(). For 'engine = "monoMDS"' 'noshare' defaults to TRUE. The 'noshare' argument now accepts logical arguments in addition to old numeric (FALSE worked previously because it was interpreted as numeric 0, but TRUE has now meaningful interpretation). Remove argument 'old.wa' introduced in rev280 on 24/3/08 for backward compatibility when calculating WA scores started to use the same transformed data as analysed. * ordiplot: Now handles non-par arguments to plot.default without warnings. Things like `axes = FALSE` in the call now just work! Version 1.90-0 (closed July 3, 2011) * vegan now depends on the permute package for new permutation designs. This initially version strips out all the old "new" permutation code from the R and Rd files, and patches up permutest.betadisper to use shuffle() to generate permutations. The 1.90-0 devel series will lead the way to vegan 2.0-0. There may well be build problems as we iron out permute / vegan meshing. * capscale: could not be embedded in another function after fixing the update() in 1.18-31 -- problems were anticipated in ChangeLog, and they were realized. * monoMDS: text for a proper help (Rd file). Other help files updated for monoMDS. Stress type 2 is printed both in monoMDS and metaMDS. stressplot() prints now R2 for monoMDS() results, and docs tell that "linear fit" of stressplot() is related to "stress 2". Version 1.18-33 (closed June 21, 2011) * adonis: made faster (much faster in tests) by polishing the f.test() in the innermost loop. Version 1.18-32 (closed June 14, 2011) * closed with the release of vegan_1.17-11. * anova.prc: new function that casts prc() result to a corresponding rda() and submits this to anova.cca(). With this is it is possible to analyse anova(..., by = "axis"). Other cases are possible as well, but not very useful as "margin" and "term" only analyse all constraints as a single matrix. Now some functions that were made refuse prc() results in 1.18-30 work again, and anova.ccabyaxis() even makes sense. This fixes a problem Jae Pasari raised in his email. * vegdist docs: Brian Inouye informed us that we are not calculating the Raup-Crick index like originally suggested: we use equal probabilities for all species, but the species probabilities should vary with their frequencies. Doing this would break vegdist.c design, and require Fisher's non-central hypergeometric distribution, and that is not available in base R. However, it seems that a simulation version could be implemented in oecosimu(). Now we document the problems in vegdist.Rd, but do not correct the behaviour. The key paper is available over http://www.esajournals.org/doi/full/10.1890/ES10-00117.1 * rda & capscale: similar changes as in cca in r1517 (version 1.18-24). CA component is always returned, even with zero rank, and CCA and pCCA components are NULL only if they were not specified originally, and if they become zero rank because of aliasing etc, they are returned as zero components (instead of NULL). * print of cca/rda/capscale: do not "Proportion" column in unconstrained ordination which only has one component. However, this will be printed also with zero pCCA or CCA (but not with NULL). Version 1.18-31 (closed May 30, 2011) * ordiR2step: more informative about rejecting 'scope': partial models are not (currently) accepted due to the design of RsquareAdj.rda(). * specnumber: gained argument 'groups' to find total richness within each group. An example shows how to use this to find one index that Whittaker suggested to estimate beta diversity. * capscale: species scores will be NA if input data were dissimilarities and no 'comm' was given. update(capscale_result) failed because LHS data were evaluated in the environment(formula). Now removed the explicit environment: I ran some tests and found no problems, but let's see what the real life brings along. The changed point is commented so that this change can be reconsidered if necessary. * oecosimu: reverted r1557 of version 1.18-26, or splitting tied values. This was introduced because Chase et al. (Ecosphere 2011, http://www.esajournals.org/doi/pdf/10.1890/ES10-00117.1) used this in their Raup-Crick index. This is against established practice in order statistics and therefore we cancelled this. * specaccum: reverted r1505 & 1507, or introduction of weighted species accumulation model in version 1.18-23. The method was introduced because of user request, but these persons lost their interest and therefore there is no reason to see the trouble that finalizing these functions would require (see comments on version 1.18-23 about some of the work needed, and there is more). Version 1.18-30 (closed May 26, 2011) * opened with the release of vegan 1.17-10 on April 27, 2011. * nobs: documented nobs() methods for vegan. These seem to be needed in R 2.13.0 and should be released soon (there is no need to add R >= 2.13.0 dependence as long as we do not use these functions ourselves within released vegan code). * treeheight: dramatic simplification and speed-up of the code. * scores.cca/rda: failed if user requested only non-existing scores. Now return an empty list of scores instead (with possible attributes). * prc: several support methods did not work with 'prc' results, and these now stop with an informative error instead of an uniformative error. Concerns anova.ccabymargin, anova.ccabyaxis, drop1.cca, add1.cca, model.frame.cca, model.matrix.cca. This was found out after a private user query about having signficance test for the sencond PRC axis. Version 1.18-29 (closed April 27, 2011) * capscale: could fail with add = TRUE in R 2.13.0. A kluge was necessary in cmdscale() pre 2.13.0, but the feature was fixed in R 2.13.0 and unnecessary fix failed. Now the kluge is used only in older versions of R and capscale should be working both in 2.13.0 and older R. * adipart.Rd, multipart.Rd: cancelled some excessive speed-ups in example code made in r1204. Some of these speed-ups never made to the release version, but were only made in the devel branch. The sped-up examples were also merged to the release (adipart.Rd, kendall.global.Rd, multipart.Rd, mantel.correlog.Rd, pertmatfull.Rd, radfit.Rd). Also reverted r1224 so that Guillaume's original r1206 (49 permutations instead of 99) is used again. Probably we should speed up some other examples. The five worst cases (timing in MacBook Air) are: ordistep (19.0 sec), add1.cca (7.2 sec), tsallis (7.0 sec), prc (5.6 sec), vegan-package (5.2 sec). * vegan-package.Rd, ordistep.Rd: speed up examples. Version 1.18-28 (closed April 11, 2011) * Peter Minchin joined the vegan team. * monoMDS: a new function with Peter Minchin's Fortran90 code for NMDS. The full Fortran90 code has global, local, linear and hybrid MDS, configurable and valid tie treatment, handles missing values, and allows adding new points to existing ordinations. The Fortran code is highly tuned, and much faster than other alternatives in R. The R interfaces allows access to most features of the Fortan90 code, except adding new points to the ordination (which will need a separate function). The missing values in dissimilarities are also handled in the R interface. The function will eventually replace isoMDS() of the MASS package as the main NMDS engine in metaMDS(). * metaMDS: uses monoMDS() as its default engine (and gained argument 'engine' to select either monoMDS() or isoMDS()). * stressplot: is generic with a specific method for "monoMDS" objects, and the old function as the default method. * goodness: got a new method for "monoMDS" objects. The function handles all monoMDS() models, but does not take into account possible missing values in input dissimilarities. * metaMDSrotate: gained argument 'na.rm' (defaults FALSE) to remove missing data from the continuous vector. Version 1.18-27 (closed April 1, 2011) * orderingKM: Kurt Hornik found a problem when inspecting the Fortran subroutines with gcc 4.6 tools when checking vegan release 1.17-9. Version 1.18-26 (closed March 31, 2011) * version closed with the release of vegan 1.17-9. * oecosimu: added argument 'tiesplit' (defaults FALSE). If TRUE, simulated values tied with the observed statistic are split so that half of them are regarded as satisfying the condition, and removed from those cases which are greater or less (as given by 'alternative'). This is usually *not* done, but implementing Raup-Crick dissimilarity in oecosimu() following http://www.esajournals.org/doi/pdf/10.1890/ES10-00117.1 (Chase et al., Ecosphere 2011) uses this option. However, cross-checking the "r0" null model against the vegdist(..., "raup") indicates that the options should be set FALSE (and this would mean that the change is reverted). * anova.ccabyaxis: I (JO) noticed in an ORDNEWS message that anova(..., by = "axis") ignores the original Conditions in partial models and so gives wrong results in partial models. The fix finds the conditioning matrix as qr.X(object$pCCA$QR), and uses this as a Condition in updated models. Added a regression test that checks that statistics and residual df match. * tolerance: new function to compute species tolerances and sample heterogeneities as Canoco does. Includes a method for objects of class "cca". * plot.contribdiv: plot now draws axes and box *after* doing the drawing - stops polygons overplotting the axis and box. Version 1.18-25 (closed March 23, 2011) * ordilabel: gained argument 'xpd' to draw labels outside the plot region. * ordisurf: got a formula interface as an alternative to define the model. Also now accepts `gam()` argument `select` to add an extra penalty to smooths so they can be penalized to zero (i.e. removed from the model). This is a form of model selection. Estimation of smoothing parameters can now be determined via argument `method`. Both `select` and `method` have been set to defaults that were implied in previous versions of the function. If smooth is penalized to (effectively) 0, countour plotting is suppressed. New argument `gamma` can be used to increase the cost of each degree of freedom used by a model in the GCV or UBRE/AIC scores used in smoothness selection. New argument `plot` can be used to stop ordisurf producing any graphical output. A plot method is now provided that can draw contour or perspective plots of ordisurf results, or plot the fitted GAM surface. * metaMDSrotate: can now rotate > 2-dim solutions so that the first axis is parallel to a given vector and all others are orthogonal to the vector (and rotated to PC if they were originally). Earlier had argument 'choices' which was supposed to select only two axes to be rotated (but failed before rev 1533), but now lost 'choices' and always uses all dimensions, and orthogonalies dim 2 and beyond against the given vector. There was a query in R-sig-ecology on having two vectors in 3-dim ordination which triggered the current changes, but this does not still answer to the question of https://stat.ethz.ch/pipermail/r-sig-ecology/2011-March/001947.html. It would be possible to have this with recursive metaMDSrotate for 1..N for first 'vec', then 2..N for the second 'vec', but the later 'vec's could be correlated with previous axes. * metaMDS: 'previous.best' can now be a user-supplied configuration, or a result of isoMDS(). If 'previous.best' is an isoMDS() or a metaMDS() result, it can have different number of dimensions than the current 'k': extra dimensions are dropped off, or noisy extra dimensions are added as needed. This may help in running metaMDS() with a range of 'k'. Not yet documented. Version 1.18-24 (closed March 10, 2011) * cca: will return NULL item for CCA only if constraints were not given. If the CCA component has zero rank (= constraints were aliased or were orthogonal to the data), will still return a CCA item with zero eigenvalue, rank, scores etc plus info on "alias". The residual component will never be NULL, but similar zero-containing component is returned even when there is no residual variation. Usually these changes only manifest in arbitrary data sets, but we have had email queries in R-sig-eco on completely aliased constrainsts when users assumed that model cca(y ~ A + Condition(A)) would be similar to a random effects model and A could be analysed both as a Condition and as a Constraint instead of being aliased. Naturally, overfitted models with empty residual components do appear often. Currently the printed output includes these zero items with Inertia and Rank 0, whereas NULL components are not displayed. The changes so far only concern cca(); rda() and capscale() are only changed after (and if) this change appears sensible and correct in cca(). * drarefy: a new function to return the probabilities that a species occurs in a rarefied sample (= sampled without replacement) of a given size, (or given sizes specified separately for each row if 'sample' is a vector).. * diversity, rarefy, rrarefy, specnumber: accept vector input. All functions documented in ?diversity now accept vector input. Function fisher.alpha and drararefy already accepted vectors. Version 1.18-23 (closed February 28, 2011) * opened with the release of 1.17-7 based on version 1.18-22 on February 16, 2011. * does not use unnecessary return() plus other stylistic twitches. This touches 24 functions, but users should see no difference. * procrustes: checks and reports different number of rows instead of failing in crossprod() with incompatible arguments. * prestonfit, as.preston: default now 'tiesplit = TRUE'. * as.preston (prestonfit, prestondistr): uppermost octave could be NA with 'tiesplit = TRUE' (a bug). * decorana: Cajo ter Braak notified about false expansion of computed zero eigenvalues in rescaling which then are used in estimating eigenvalues. They are now zeroed. Cajo's example was a 6x5 petrie matrix: petrie <- matrix(0, 6, 5) diag(petrie) <- 1 petrie[row(petrie) - 1 == col(petrie)] <- 1 decorana(petrie) Gavin Simpson had another failing case: dummy <- matrix(c(1,3,1,0,0,0,0,0,0, 0,0,0,1,3,1,0,0,0, 0,0,0,0,0,0,1,3,1), nrow = 3, byrow = TRUE) which also failed in orthogonal CA ('ira = 1'). Now the zeroing is done after estimating each axis, and the results are similar as in Canoco. However, the results of orthogonal CA with 'dummy' are wrong in both: there should be two eigenvalues of 1, but only one is reported. This is a fundamental problem in the orthogonalization algorithm in the Fortran code presumably shared between vegan:decorana and Canoco. * specaccum: first step in implementing weights on method="random". Not yet documented nor supported. Issues that must be solved are plotting (all lines? summaries?), summarizing (use approx to get average predictions?) and the very natural link to fitspecaccum models. * nobs: R 2.13.0 will introduce new generic nobs() that will return the number of observations. This is at least needed in functions to evaluate BIC and in step() and functions it calls. Implemented nobs() for several vegan classes -- some of these may be unnecessary. Not yet documented but aliases in vegan-internal.Rd. * FAQ updates: using 'select' in ordination text() and points(), using 'xlim' to flip axes or zoom into ordination plot(), the non-effects of 'strata' in adonis(). All these indeed are frequently asked. * scores.default: clarified documentation (PR#1300). * vegdist: rephrased Chao index following PL. Version 1.18-22 (closed February 16, 2011) * nestednodf: did not go to 'weighted = FALSE' with quantitative data if 'order = FALSE'. Reported by Daniel Spitale. * eigenvals: learnt to know 'dudi' objects of the ade4 package, and 'pco' an 'pca' obejct of the labdsv package. * betadisper: streamlined code somewhat. * prestonfit: implemented splitting "tied" counts (1, 2, 4, 8 etc) between octaves following Williamson & Gaston (J Anim Ecol 43, 381-399; 2005) with argument 'tiesplit = TRUE' * specaccum: fixed typo -- 'individuals' instead of 'invidividuals'. plot() gained argument to use "individuals" as x-axis instead of "sites" with method = "rarefaction". Version 1.18-21 (closed January 19, 2011) * Fixes bug report #945 at R-Forge: anova.cca should now work with subset, missing data, functions of constraints (like log(x)), constraints or subset variables in data=, attached data frames or in working environments. * capscale: return additive constant ('ac') when 'add = TRUE'. * fitted.capscale, predict.rda: additive constant ('ac') subtracted from the estimated distances when 'add = TRUE' was used in capscale(). * predict.rda: type = "working" for capscale returns now scaled scores that produce the dissimilarities as Euclidean distances -- like was claimed in the help page. * simulate.capscale: implemented simulate() for capscale. This uses internal metric scaling mapping to simulate data and add error, but returns Euclidean distances adjusted to the original scale of input dissimilarities. The function uses only the real axes, and imaginary dimensions are ignored. * anova.cca: by = "term" and by = "axis" work now both with the data= statement and with variables in the GlobalEnv and subset= both in cca/rda. It seems that 'subset' is not implemented for capscale(), but otherwise models work. * cca/rda: added item 'subset' that is the subset argument evaluated to a logical vector. * capscale: implemented 'subset' (and this also works with anova.cca). It looks like all anova.cca tests pass also with capscale (but more thorough test will be run before closeing the anova.cca bug in vegan-forge). It seems that subset and na.action also work. * anova.cca: most cases work now when terms are given in attach()ed data frame after changes to anova.ccabyterm() and ordiParseFormula(). * anova.cca: works (mostly) when there are missing values. The exception found was 'by = "term"' when the data frame is not given as a 'data=' argument, but as an attached data.frame. In this case 'by = "term"' detects a change in the number of rows and stops with a message. Version 1.18-20 (closed January 9, 2011) * base of vegan release 1.17-6 (released on Jan 10, 2011). * capscale: the total inertia was defined as the sum of absolute values of inertia so that negative eigenvalues of imaginary dimensions increase inertia (changes in 1.18-17 and release 1.17-5). Torsten Hauffe reported this as a bug in vegan open-discussion forum in R-Forge on Dec 22, 2010. I (JO) answered on Jan 1, 2011 and justified the change, and said this is a design decision, and not a bug. Now I have reconsidered this design decision, and it really seems to me that it was wrong. Now the negative eigenvalues again reduce the total inertia, and are similar as in vegan 1.17-4 and earlier. The capscale() output got a new item of "Real Total" that gives the sum of eigenvalues without the imaginary component, and the proportions are given only within this real component (if there are negative eigenvalues). The eigenvalues of negative eigenvalues are not added to the result, because they are not strictly for the unconstrained component only like previously indicated. However, summary.eigenvals() estimates the proportions explained using absolute values of eigenvalues since this seems to make sense there (the proportion explained is now based on absolute eigenvalues to give more sensible output). Version 1.18-19 (closed January 3, 2011) * new version opened with the release of vegan 1.17-5 (submitted Dec 17, 2010, released at CRAN on on Dec 18, 2010). * CCorA: Pierre Legendre's minor fixes, including scaling of scores Cy an Cx, and removing requirement of MASS. * wascores: checks input -- weights (species abundances) must be non-negative and not all zero. * metaMDS: function was written for community data with all entries non-negative, but it is used increasingly often with other data types with a risk of failure (especially in wascores()). Now data are checked for negative entries, and arguments wascores, autotransform and noshare are set to FALSE with negative data entries. Triggered by email queries and problem reports. Version 1.18-18 (closed December 17, 2010) * mantel.correlog: proper treatment of ties in permutation statistics. Function uses mantel() to evaluate p-values, and this uses one-sided test. If the statistic is negative, the test direction is reversed, but then p-value cannot be directly complemented if there are ties: the observed statistic must be switchec to another side of the tied block. Therefore mantel.correlog() now evaluates the p-value directly in reversed test. * nestedtemp: updated the literature reference to Almeida-Neto & Ulrich (2011). * vegdist.Rd: fixed legends to Gower indices and checked binary formualations (ok). * vegan-package.Rd: added a package intro file (to be merged to the release version 1.17-5). * sipoo.rda: got island names, and decision-vegan.Rnw vignette was changed accordingly. * ordistep: Pierre Legendre's edits of the help page. * prc: got back the formula interface and with that the na.action lost in r1356 (9 Nov, 2010). * plot.procrustes: user can select the direction of the arrow with argument 'to.target', and the 'type' of the plot. With 'type = "text"', ordilabel() is used to mark the tails of the arrows. * plot.betadisper: would fail when plotting anything other than axes 1 and 2. Now fixed and an example included in the Rd file to make sure this doesn't happen again. Reported by Sarah Goslee. Version 1.18-17 (closed December 1, 2010) * predict.procrustes: gained 'truemean' so that new points can be added to the plot.procrustes() graph. * alpha release version: preparing release (1.17-5) of vegan. Mainly clean up and checking of functions intended for the release. * mantel.correlog: vegan mantel() was used standard order statistics or (hits+1)/(nperm+1) since May 2009, but mantel.correlog() did not notice the change and still tried to correct the mantel() result. * as.mlm.cca/rda and intersector: should get the pivoting of names in qr.X() correct both in the current buggy R and hopefully fixed next version 2.12.1. * vif.cca: aliased terms must be removed when calculating VIFs. Test case vif.cca(cca(dune ~ Manure + Management, dune.env)) should give decent values all below <100 (used to give magnitude 10^31). VIF of aliased terms is NA. Pierre Legendre noticed this. * print.eigenvals uses zapsmall. Version 1.18-16 (closed November 17, 2010) * procrustes: fixed centring of fitted(). Added predict() method that can be used to add new rotated coordinates to the target. The function cannot be used for symmetric analysis with 'newdata'. * vignette on design decision: updated to changes in 'const' in scores.rda() in 1.18-15 and to Canoco 4. Explains now 'const' more thoroughly. * pcnm: gained argument 'dist.ret' to return the distance matrix on which PCNMs were based. * cca/rda/capscale: JO yielded to the pressure, and added proportions of inertia components in the printed output. * capscale: failed with na.action -- fix in ordiParseFormula(). na.action was introduced in rev1002 (Sept 11, 2009), and then ruined with a change in ordiParseFormula() in rev1007 (Sept 15, 2009) so it lived four days and was broken when released. The problem was reported by Nevil Amos. * SSgleason: a new SS-species-area-model. * SSlomolino: improved starting values for 'xmid' (and 'Asym'). Now fitspecaccum(..., "lomolino") works in several cases, including BCI and bryceveg (but fails in <1% of cases). Now 'Asym' and 'xmid' are estimated from Arrhenius at log-log scale: 'Asym' is the predicted value at max(x), and 'xmid' is the value of x giving 'Asym/2'. * capscale: defines total inertia as the sum of absolute values of eigenvalues to be consistent with cmdscale(), wcmdscale(), eigenvals(), Gower and Mardia, Kent & Bibby. * eigenvals: added a method for "pcnm" and docs discuss handling negative eigenvalues in summary.eigenvals(). Function is ready for the new version of cmdscale() in R 2.12.1. * prc: Cajo ter Braak wrote new code for more direct implementation of PRC. This drops formula interface and directly finds model matrices avoiding aliased terms. Version 1.18-15 (closed November 9, 2010) * procrustes: 'translation' needs to take into account 'scale', although Mardia et al. omit it. Reported, analysed and fix suggested by Christian Dudel (Bochum). * fitspecaccum: uses now new SS-models for species-area relationship and several of standard SS-models for nls(). Placeholders for documentation added. Has a plot() function. * Self-starting nls() models for species-area relationship: added Gitay and Lomolino models from Dengler 2009 (J Biogeog 36, 728-744). Some more should be added, but these were among the best in Dengler's simulation. The starting values of the Lomolino model (SSlomolino) need work, as do several other candidate models. The purpose is to use these also in fitspecaccum(). * rda: the scaling 'const' can now be a vector of two items: the first is used for species and the second for sites. This allows compatibility with Canoco 3.x (but Canoco 4 changed scaling): if 'mod' is an rda() result, and 'nr' is the number of rows in data, then "scaling = -2, const = c(sqrt(nr-1), sqrt(nr))" in scores(), summary() or plot() will use default scaling of Canoco 3.x. Help page now points to decision vignette explaining scaling and 'const' (and the vignette needs updating). * prc: coefficients folded in a wrong way. Diagnosed, reported and fixed by Cajo ter Braak. CtB also fixed the scaling of species scores and coefficients to be more consistent with Canoco and common standards. The function now ignores user settings of contrasts and will always use treatment contrasts. Cajo ter Braak is now recognized as a co-author of the function. * nestednodf: breaks ties in column and row totals by row sums and column sums in quantitative data ('weighted = TRUE'). Version submitted by Gustavo Carvalho in a follow-up to Feature Request #1097. Version 1.18-14 (closed November 1, 2010) * treedist: works now with zero-height trees (for instance, only one item in a tree). Function gained a new argument 'relative' (defaults TRUE): if FALSE, finds raw dissimilarities of tree heights. Help page now tells that relative tree distances are in range 0..2 instead of 0..1, since combining two trees may add a new common root. * isomap: returns only axes associated with positive eigenvalues. * wcmdscale: give two goodness of fit statistics for 'k' axes: one is for the real part and based on the sum of positive eigenvalues, and second is for all axes and based for the sum of absolute values of all eigenvalues. * summary.eigenvals: handle now possible negative eigenvalues from capscale() or wcmdscale(): cumulative sum and proportions are now based on the sum of absolute values of eigenvalues, and all real eigenvalues explain less than 100% if there are negative eigenvalues. Version 1.18-13 (closed October 15, 2010) * anova.cca(..., by = "axis"): now really uses marginal tests for every axis. Significance of axis k with LC scores lc is from model update(object, . ~ lc[,k] + Condition(lc[,-k])). That is, axis k is used as constraint and all other axes as conditions, when axis k is analysed. This also solves the failure of anova(..., by = "ax") of rda(dune ~ poly(pH, 2) + Baresoil, varechem) of PR#945, but no other problems of the same report. * treedive: handles trivial cases of zero (diversity NA) or one species (diversity 0). * oecosimu: handles NA values as na.rm = TRUE in simulations for cases where these are produced by the function to evaluate statistics. * oecosimu: takes care that the statistic is evaluated with binary data when null models are binary. This was a one-year old bug introduced in rev 967 on Aug 31, 2009. Previous time this bug was corrected in rev 438 on June 28, 2008. * nestednodf: Gustavo Carvalho sent a new upgraded version which also implements a new quantitative method of Almeida-Neto & Ulrich (Env Mod Software, in press; 2010). Based on feature request #1097 in R-Forge. * ordistep: name clash if the fitted model contained item or term called 'mod'. Reported by Richard Telford (Bergen, Norway). * fitspecaccum: Stephen Sefick suggested adding Michaelis-Menten fit to random species accumulation and sent his model function. These ideas were used to add a new more general function. In addition, there is an option of fitting Arrhenius model S = c*A^z with a new self starting function SSarrhenius() for nls(). No documentation yet: needs work. * decorana: gives a warning if residual is bigger than tolerance. Version 1.18-12 (closed September 26, 2010) * swan: no eternal loop with disconnected data where zeros will remain in the matrix. * ordilabel: gained argument 'col' to set the text colour of the labels separately from 'border' (default action is to use 'border' colour). * ordiellipse: gained argument 'col'. For draw = "lines" this works similarly as previously when 'col' was passed on. For draw = "polygon" 'col' sets only the polygon fill, and the text of the labels will use the colour of the border or of the foreground. * ordiR2step: gained argument 'direction = c("both", "response")', and with "both" gives also adjusted R2 when dropping terms. I have not yet seen a case where a term is dropped. Abandoned dangerous practice of getting the R2.all directly from a fitted model of the 'scope' since this may have different lhs. * anova.ccalist: removed. Revisions were 1273, 1274, 1276. Could not make this work consistently with other anova models, except with 'model = "direct"'. The function would also change the API so that "..." come as the second argument breaking partial matching of other arguments. Version 1.18-11 (closed September 17, 2010) * diversity: example says that rarefy(x, 2) - 1 is the same as unbiased Simpson of a true random sample of Hurlbert (1971, eq. 5). Added after several wishes to have this function. * metaMDS: more verbose about connectivity. Use na.rm = TRUE in metaMDSdist(). * FAQ: entry on ade4:cca name clash triggered by an invalid bug report #1066 and queries in r-sig-ecology. Version 1.18-10 (closed August 31, 2010) * New version opened with the release of vegan_1.17-4 on August 20, 2010. * rankindex: can take a list of dissimilarity functions as an argument. * deviance.cca/rda: return 0 (instead of NULL) if there is no residual variation. * vegdist: help page gives equations for binary variants of the indices. * biplot.CCorA: resets par that it sets. * ordiR2step: can go to the end and include all variables of the scope (and checks there is a scope). Additional stopping criterion of exceeding P-value. Looks like being up to specs and left for approval. * permutest.cca: defaults to 99 permutations instead of 100 (to be consistent). Item 'call' now stores the call to permutest() instead of the call of the ordination which is now saved in 'testcall'. This means that update() works now. * anova.cca: use correct degrees of freedom when there is no constrained or no residual component. * anova.ccalist: Started to work on the concept of permutation test comparison of several cca/ rda/ capscale models. The basic function was added to the R-Forge (undocumented!). First idea is to run permutest.cca with the same RNG seed and collect the permutations from the differences of these models. This won't be consistent with other anova.cca* because permuted residuals differ from the corresponding partial model (except with model = "direct"). Another option that I have on my mind is that I use model.matrix.cca to reconstruct a matrix of RHS of each model, and then run a series of partial model ANOVAs. Here the problem is that the statistics will be sequential, i.e., the residual of each model is from the next model and not from the final model, and the models must be in increasing order or ordered programmatically; the current test will study differences of any sequence. Naturally, we have to figure out how the permutation should be done. Probably a note to R-Devel to open up discussion on the issue. NOTE: there is no automatic delegation to this function. If you try this, you must explicitly write "anova.ccalist(model1, model2, model3). NOTE2: There are no tests of the sanity of the input: be careful. NOTE3: Does not work with saturated model with null residual variance. Version 1.18-9 (closed August 20, 2010) * mrpp & meandist: John Van Sickle notified us that his Classification Strength (CS) uses 'weight.type = 1' (or n) insteaad of 'weight.type = 3' (or n(n-1)/2). Calculation of CS was dropped from mrpp(), because with this weighting it no longer has an exact relation to the corresponding MRPP statistic and the function mrpp() cannot provide a significance test for both statistics together. CS is kept in meandist(), where its calculation is corrected for the correct weight type. * vegdist: Anderson et al. (Ecol Lett 9, 683-693; 2006) defined their "alternative Gower" without range standardization of columns. Reported as bug #1002 in http://r-forge.r-project.org/ by Sergio Garcia. Also some small edits of vegdist man page. * msoplot: legend mixed symbols and labels. * Rd (help) files: removed some superfluous \-characters that were visible in rendering text (accented letters, Latex notation in wrong places). * predict.rda/cca: document 'newdata' with 'type = "response"' or 'type = "working"'. The feature was added in vegan 1.18-4 (rev1180, April 15, 2010). Version 1.18-8 (closed August 12, 2010) * DESCRIPTION: does not suggest package 'ellipse'. * FAQ: new entry on negative or non-numeric data, and updates of variance explained by ordination. * intro: ordispider uses label. * adonis: uses print.anova for cleaner output. * plot.MOStest: uses veganCovEllipse instead of ellipse:::ellipse.glm. * ordiellipse: failed to plot labels with filled polygons, since the same colour was used for polygon filling and labels. Now uses ordilabel() with draw == "polygon" (but still text() with draw == "lines"). * decorana: change order of data checks so that non-numeric data is detected (by rowSums()) before checking negative data entries. * ordigrid: arguments lty, col and lwd to use different lines for levels and replicate of the grid. Version 1.18-7 (closed July 19, 2010) * new version opened with the release of vegan_1.17-3. * veganCovEllipse: new internal function for drawing covariance ellipses (to be used both with ordiellipse() and plot.MOStest()). * ordiellipse: uses veganCovEllipse. Version 1.18-6 (closed June 16, 2010) * Version 1.18-6 closed simultaneously with the release of vegan_1.17-3 on June 16, 2010). * mantel, mantel.partial: considerable speed up by cleaning innermost loop and replacing as.dist() with direct extraction of lower diagonal. * treedist: documenting tree dissimilarity function that has been in vegan devel since Aug 17, 2009 (rev928). * betadisper: 'type = "median"', the default, was not computing the spatial median on the real and imaginary axes separately. Reported by Marek Omelka. * permutations: First attempt to document within Vegan the general workings of permutation tests. See ?permutations for details. Version 1.18-5 (closed May 31, 2010) * cca, rda: plot() failed if Condition() had factors, but constraints had no factors. An example of failure: m <- cca(dune ~ A1 + Condition(Management), dune.env) plot(m) ## failed * ordiarrows: gained 'label' argument which uses ordilabel() on arrow starts. * ordisegments: gained 'label' argument which uses ordilabel() on both ends of the segment. * ordispider: gained 'label' argument (uses ordilabel()). Can now handle ordihull() result objects: connects points in the line to the hull centroid. Extended examples. * ordiR2step: new function to perform forward model selection following Blanchet, Legendre & Borcard (Ecology 89, 2623-2632; 2008) or by adjusted R2 until the adjusted R2 of the full model (scope) is exceeded or adjusted R2 starts to decrease. * RsquareAdj.default: handles vector arguments. * ordiellipse: works only with 2D data, and now uses only first two dimensions of input if more given. For instance, the following works now, but gave very cryptic error message previously: m <- decorana(dune) plot(m) with(dune.env, ordiellipse(m, Management)) * ordiresids: removes now the row weights from Residuals and Fitted in CA. Now shows the same values that are shuffled or resampled in simulate.cca() where they are again weighted after being added to the new fitted value. * mantel.correlog: changes the Sturges rule to conform with the standard R nclass.Sturges ('ceiling' instead of 'round'). Extends and corrects documentation and messages. Version 1.18-4 (closed May 21, 2010) * envfit: defaults now to 999 permutations. Used to be 0 or no permutations. * metaMDS: can handle NA values in dissimilarities (but I do not know if isoMDS can handle them correctly). * mantel.correlog: accepts now user supplied breakpoints or number of classes like intended. * RsquareAdj.rda: uses now correct model df in rank deficit RDA models. * adonis: implemented tie handling in permutations. * predict.cca/rda: implemented 'newdata' for type = "response". For CCA, 'newdata' must be constraints (environmental data), and for CA they must be community data. Test version, not yet documented (except here). Version 1.18-3 (closed April 15, 2010) * new version opened with the release of vegan 1.17-2 (March 8, 2010). * DESCRIPTION: Corrected the name of Bob O'Hara (also in release 1.17-2). * scores.cca/scores.rda: scores will always have names even if the input data have no names. This fixes some display issues that Pierre Legendre had with biplot.rda(), and makes redundant the name checking code in summary.cca (the redundant code was not yet removed, but I see that this fix here was sound). * permutest.cca: re-weighting of permuted CCA data matrix is now done with compiled code using existing C function 'wcentre' (in goffactor.c). This may give huge speed-up (>50% time save in first tests) both in CCA and pCCA. The print function of permutest puts now the observed statistic among permutations (the P-value is only evaluated at printing so that this does not influence any anova.cca function using permutest.cca). Version 1.18-2 (closed March 8, 2010) * ordistep: documented the 'anova' component added to the result object. * densityplot.oecosimu: gives no warning if there is only one statistic and hence only one panel. * nesteddisc: failed if highest species frequencies were tied. The error message was "Error: dims [prodcut 15] do not match the length of object [0]". Found by Eric Fuchs in the help forum of vegan.r-forge.r-project.org. The function does not try as hard to optimize the index, and hence it is much faster (but slacker). * screeplot: New argument 'legend' for all methods (except 'decorana') to draw a legend if the observed and broken stick distribution are both plotted. Now also respects 'pch' for the broken stick line. * permutest.betadisper: print method got ordering of permutation p-values wrong in displaying the matrix of pairwise tests. The computed values were correct. The formatting for printing contained the bug. Reported by Dan O'Shea. Version 1.18-1 (closed February 18, 2010) * closed with the release of vegan 1.17-1. The release contains bug fixes and multipart of 1.18-1, but excludes MOStest and 1.18-1 upgrades to ordistep. * ordistep: saves model changes in the 'anova' item similarly as standard step(). Experimental feature: not yet documented. * envfit: did not pass weights to factorfit or to vectorfit when the environmental variable was a single vector. Reported for vectors by Richard Telford. Broken in rev1004 (Sep 12, 2009). * CCorA: Fixed bug in presentation of variables in plots. Adds new biplot types. General improvement in checking exceptional cases improve stability. * predict.cca, predict.rda: match 'newdata' by row names or column names in type = "wa" and type = "sp". This is similar as predict.prcomp/princomp. Gained choice type = "working" for working residuals (as fitted.cca/rda). * simulate.rda, simulate.cca: gained argument rank passed to predict.rda() or predict.rda(). This also allows simulation under null model by setting rank = 0. * permatfull.Rd: fixed braces in the help file + mark-up. Version 1.18-0 (closed January 11, 2010 with release 1.17-0) * Documented na.action in cca.object. * Opened concurrently with copying 1.16-34 (at rev 1087) to branches/1.17 for a new release. * betadisper: 'type = "median"' is now the default type of analysis. * fieller.MOStest: removed erroneous multiplication of variances by overdispersion, because this was already done in cov.scaled, and therefore was doubled and gave much too wide (up to Infinite) limits. * MOStest uses now ANODEV of free model and model where the hump/pit is forced to a given location instead of the test based on the Wald statistic (coefficient/sd) of the coefficient of the linear term. The ANODEV and Wald statistic are equivalent in Gaussian models, but in with other error families the ANODEV is more correct. This fix removes the conflict between the basic MOStest() and its profile() and confint() methods in non-Gaussian families. Version 1.16-34 (closed January 2, 2009) -- (codename: Lucia) * twostagechao: deleted, because question regarding the notation in the original article remained unanswered. * permat* cleanup: permat.control deleted, not needed any longer due to changes in oecosimu, documentation for plot.permat merged with permat* help page. * goodness.cca: was not using correct weights. Broken in r992 (Sep 6, 2009). * vegdist: added UI for the alternative Gower index ("altGower") that skips double zeros. The C code has been in vegan since Oct 24 (r1051), but no R interface. Together with decostand(..., "log") of r1052 this closes Feature Request #473 submitted by Etienne Laliberte in R-Forge. * anova.cca: tied values could be randomly broken due to numerical precision, and this gave false P-values, for instance in anova(cca(dune ~ Management, dune.env), strata=dune.env$Management). Now rounds statistics to 12 decimal places in permutest.cca and in anova.ccabyterm. * permutest.cca: uses pasteCall() in print. * betadisper: added spatial median code written by Jari to betadisper. All associated methods work OK, and this should be the default method but needs a little checking first. This requires the new function 'ordimedian', which is currently undocumented in ?betadisper. Version 1.16-33 (closed December 13, 2009) * DESCRIPTION: Guillaume Blanchet added to the Authors. * spandepth: New function to find the depths of nodes in a spanning tree from spantree() function. Per request of W. E. Sharp. * bstick: refuses to analyse capscale() models with imaginary components because I have no idea how to do it. Reported by Richard Telford, Bergen (who probably wanted another solution...). * predict.rda: works now with rank = 0 -- returns matrix of column means. (Not yet done for predict.cca.) * simulate.rda: can now add permuted residuals to the fitted values. Experimental, low level interface that requires giving the index of right length. The permutation index can contain duplicates such as from sample(nrow(data), replace = TRUE) so that bootstrapping is possible unlike in anova.cca/permutest.cca. Works now with partial model: adds partial fit to the constrained fit. * simulate.cca: implemented by cloning simulate.rda. Function works with internal Chi-square standardized form and back-transforms the result by marginal totals and matrix grand total at the end. The marginal totals may still be negative. Not explicitly documented, and needs a connoisseur user. Version 1.16-32 (closed November 13, 2009) * alias.cca: gained argument 'names.only' (defaults FALSE) to only return the names of the aliased variables insted of their defining equations. * rarefy: failed with one site and many sample sizes like rarefy(rpois(10, 2), sample=2:3). * msoplot: uses standard legend() to display info instead of hand crafted positioning of the legend information. * ordisurf: plotting main title was broken with NA handling in 1.16-31 (r1049). Also increased grid density and adjusted pushing out limits of convex hull. * pcnm: new function for PCNM (Principal Coordinates of Neighbourhood Matrix) with option for row weighs allowing PCNM for cca. Based on Stéphane Dray's PCNM function in his (unreleased) SpacemakeR package. Imported with history from sedarVegan in http://sedar.r-forge.r-project.org/. Has scores.pcnm to select all (default) or some vectors of 'choice'. * decostand: implemented Marti Anderson's log scaling of type log(x, base = logbase) + 1 as a part of Feature Request #473. The coding follows closely Etienne Laliberte's suggestion, and also handles non-negative non-integer data. * vegdist: C code for an alternative version of Gower Index that skips double zeros. No R level interface yet. If this function is to be used from vegdist.R, it should be added as item 14 in 'method' list, and the R level preprocessing should be done similarly as for "gower" (method choice 6). This was implemented for inspecting the implementation of second part of Feature Request #473, but may be removed if that part of the request is not implemented. Version 1.16-31 (closed October 24, 2009) * ordisurf: removes observation with NA in scores (as result of na.action) or in predicted variable. * specaccum: "accumulations" in one-site collections are handled with a message() instead of stop()ping with error. Per request of Roeland Kindt. * constrained ordination (cca, rda, capscale) could not handle all anova(.., by= "something") cases when the data were not defined by data=, but were in the working environment or given using with(). The attach'ed data frames that were later detach'ed won't work. This means some potentially unstabilizing changes in scope: please report all problems. * envfit: could drop data frame to a vector with na.action (broken in 1.16-28). * model.frame.cca, model.matrix.cca: new support functions to reconstitute the model frame and model matrix (or a list of condition and constrain model matrices) from a cca/rda/capscale result object. Documented separately. * constrained ordination (cca, rda, capscale) did not analyse constrained component in model like cca(varespec ~ Al:P + Condition(Al + P)) or in constrained interaction terms if the corresponding main effects were partialled out. * constrained ordination (cca, rda, capscale) failed if they only had partial term Condition() without constraints. * ordistep: new function for automatic model choice in the cca family of methods. This is similar to step(), but uses permutation P-values instead of AIC (that does not exist for these methods, and sometimes fails). This is similar to forward.sel() in Stephane Dray's 'packfor' package at R-Forge. Better things here are that the function has both drop and add instead of only forward selection, handles correctly factors, and works with cca(), rda() and capscale(). On the other hand, it is much slower than forward.sel(). The function has similar user interface as step(): it knows 'scope' and 'direction'. * ordisurf: pushes out limits of convex hull so that contours better cover corners and margins of points. * plot.decorana & plot.cca: use linestack() if only one dimension was chosen. * scores.lda: new function to extract row scores and predictor coefficients from "lda" objects (MASS package). Magically, ordiplot() started to work with "lda" results. Not yet documented, but alias in scores.default.Rd. * ordiplot: uses linestack() to plot 1-col results, and now really is able to identify if there were no species scores (tried earlier, but failed because species had different names than sites). * scores.default: returns vector scores as 1-col matrix. * linestack: passes "..." to plot(), handles missing names. Version 1.16-30 (closed October 3, 2009) * manual pages (Rd files) were run through aspell. With this, an error in an argument choice was corrected also in plot.nestedtemp function. * meandist: plot method has a new alternative of drawing histograms (van Sickle 1997) as an alternative to dendrograms. A histogram connects groups at theri within-cluster dissimilarity level to the average between-cluster dissimilarity. * oecosimu: gained new keyword 'alternative' for "two.sided", "less" and "greater" one-sided tests. * oecosimu: tied values in simulations and observed statistics treated more correctly. * oecosimu: if all simulations were constant, their sd became zero, and z became NaN. Now z = 0 for these cases. A response to the query of Martin Kopecky at the vegan-help forum in R-Forge. * densitplot.oecosimu: panels keep the order of statistics. The panels were ordered alphabetically, but the vertical line for the observed statistic was in the original order (and thus often in the wrong panel). * calibrate: is now a a generic function and has a new method for the 'ordisurf' object in addition to the old 'cca' method. * FIXED BUG in cca, rda & capscale interpretation of formulae. This was introduced in rev 972 (Sep 1, 2009), and fixed in rev 1011 (Sep 18, 2009). Basically, all evaluation of 'subset' and 'na.action' is done after extracting the model frames with proven methods so that the first half of 'ordiParseFormula' is more similar to pre-972 versions. Function 'ordiParseFormula' could be re-written more elegantly, but deliberately breaking it twice instead of breaking it once is just too much. * cca/rda/capscale: cca(dune ~ poly(A1, 2), dune.env) failed. Internal changes in 'ordiTerminfo' which now always looks at the model frame returned by 'ordiParseFormula' instead of looking at the 'data' (and the 'data' arg is now unused in 'ordiTerminfo'). * FIXED (minor): cca(dune ~ Management, dune.env, subset = Management == "SF") failed in 'contrasts()' called from 'model.matrix()' because there is only one level in Management. Now 'ordiParseFormula' adds a level with an unlikely name of .ThisVarHasOnly1Level, so that model.matrix works, but predict.cca(..., newdata=, type = "lc") rejects unknown factor levels. Version 1.16-29 (closed September 18, 2009) * meandist: plot got an 'ylim' argument. This is practical when users want to display several plots side by side, and requested by Heli Suurkuukka. * WARNING OF A BUG in cca, rda & capscale: all versions have failed since rev 972 (Sep 1, 2009) if an argument in a model was a matrix. Now these things work so that tests pass, but results are wrong , because get_all_vars() does not get names right for matrix columns in the model frame. This is manifest in the example of varpart() that uses matrix items (such as mite.pcnm). It can be also seen with this: p <- poly(dune.env$A1, 3) cca(dune ~ p + Management, dune.env) The following seems to work: cca(dune ~ poly(A1, 3) + Management, dune.env) * cca, rda etc. drop unused levels of factors. This became actual with 'subset' and 'na.action'. * cca & rda (but not (yet?) capscale) gained argument 'subset' to select rows for analysis. A 'subset' can be a logical vector (TRUE for kept rows), or a logical expression which can contain variables in 'data' or species (variable) names of the dependent data. Some valid examples are: cca(dune ~ A1 + Moisture, dune.env, subset = Management %in% c("HF","BF")) cca(dune ~ Moisture, dune.env, subset = Lolper > 0 & Management != "SF") S <- specnumber(dune) cca(dune ~ 1, subset = S > 9) Version 1.16-28 (closed September 15, 2009) * drop1.cca: 'scope' given as a formula was not recognized and permutation tests were not run. Only character vectors of names worked. * envfit: handles missing values in ordination scores or in environmental variables using na.rm argument. This also changes the user interface so that 'vectorfit' and 'factorfit' clearly become low level functions which only accept scores (no ordination objects), and all processing is done in envfit.default. * wcmdscale: scores (points) with zero weights (w = 0) and other non-finite entries will be NA. * capscale: implemented na.action. The WA scores are always NA for missing observations in capscale. Version 1.16-27 (closed September 10, 2009) * cca & print.cca: no warning on removed species in cca.default, but print information on their number. * predict.rda: failed when rda was based on correlations (scale = TRUE), and there were missing data (0/0 division in scaling). * cca & rda: New way of handling na.action. Function ordiNAexclude adds items CCA$wa.excluded or CA$u.excluded for NA rows into ordination result, and function ordiNApredict called in scores.cca and scores.rda pads the results with these excluded data. In this way the internal structure of the cca object remains unchanged, but functions accessing the result with scores will get the NA data. * anova.cca(..., by = "term") and step() did not work correctly with na.exclude or na.omit. These fitted sequential models, and due to missing value removal the data set could change in the sequence. The problem case was step() which relies on standard stats functions add1.default and drop1.default. They detect the change in data by length(object$residuals). Therefore ordiNAexclude adds item 'residuals.zombie' to the ordination result so that step() works. The same mechanism is also used in anova.ccabyterm (not all NA deletions change the numbers of observations). * weights.cca and weights.rda know na.action. * Fixing cca/rda functions for changes in weights(). The rule is that you can mix scores() and weights(), but if you have internal cca object stuctures (like x$CCA$u), you should have internal weights x$rowsum. Concerns as.mlm.cca, goodness.cca, permutest.cca, spenvcor, inertcomp and intersetcor. (The inertcomp solution is a kluge.) * plot.cca: works when there are NA values in scores. * anova.cca(.., by = "axis") works when there are omitted or excluded observations due to missing values. Version 1.16-26 (closed September 1, 2009) * cca and rda: can now handle missing values in constraints or conditions. With 'na.action = na.omit', the rows with missing values are removed, and with 'na.action = na.exclude' all rows are retained but results that cannot be computed are NA. The LC scores cannot be computed with missing values, but WA scores (usually) can be computed. The results with 'na.exclude' probably fail with most support functions because these do not expect missing values in the results. These functions are fixed with time. capscale does not (yet) handle missing data. * oecosimu: does not depend on permatfull/permatswap, but method can be a function. The r2dtable method implemented also to be used with adipart and related functions. * bioenv: uses standard R function combn() and removes ripley.subs() and ripley.subsets() from vegan. The result should be unchanged. * ordiNAexclude: internal infrastructure to implement na.action = na.exclude for cca and rda (and capscale?). The option returns scores where the excluded sites get NA results and are not omitted. In constrained ordination, LC scores will be NA, but WA scores are found from the community data, and the current function uses predict.cca/predict.rda with 'newdata' of removed observations to estimate WA scores of excluded observation. * ordiParseFormula: handles missing values with na.action. Version 1.16-25 (closed August 31, 2009) * mantel.correlog: updated to the version 1.4 of Pierre Legendre's package. * RsquareAdj: documented. * ordiellipse & ordihull: argument 'draw' got a new alternative "none". With this, nothing is drawn but the invisible plotting structure is returned. This was added so that it is easier to develop permutation tests for hulls and ellipses. Version 1.16-24 (opened August 17, 2009) * ordiellipse & ordihull: gained new argument 'label' to put the name of the group in the centre of the ellipse or the hull. The functions now return invisibly data on their plots for each plotted item: ordiellipse() the covariance matrix (cov.wt() result), and ordihull() the coordinates of the hull vertices. These inivisible results have a summary() method that displays the centres of the hulls or ellipses and their surface areas. * ordiellipse: does not depend on the 'ellipse' package, but finds the coordinates of ellipse using the equation taken from the 'car' package. However, this devel version of 'vegan' still must SUGGEST 'ellipse', because 'plot.MOStest' requires 'ellipse'. The current release version does not include 'plot.MOStest' and could be liberated from the 'ellipse' dependence. * spantree: first argument 'd' like in hclust()instead of 'dis'. Got a 'call' item so that update() works. * treedive & treeheight: accept 'spantree' objects. EXPERIMENTAL CHANGE THAT MAY BE CANCELLED. * treedist: average distance of species trees for two sites. Generalization of treedive(): builds a species tree of two sites and sees how much of the tree is shared between two sites, and how much is unique to the combination. The measure is similar to Jaccard index: the proportion of unique (unshared) tree of the combined tree. In principle, this is similar to UniFrac metric (C. Lozupone & R. Knight, Appl. Environ. Microbiol. 71:8225-8235; 2005), but numerically and computationally different (and the current implementation may specify a new unpublished method). AN EXPERIMENTAL CHANGE THAT MAY BE CANCELLED. Version 1.16-23 (closed August 17, 2009) * poolaccum: new function to find the extrapolated richness values (or specpool() estimates) for random accumulation of sites (with summary and plot methods). * specaccum, specpool, specpool2vect and friends: index names are now all lower-case. * estaccumR: new function similar to 'poolaccum', but uses 'estimateR' for individual (count) based estimates of extrapolated richness. Inherits from 'poolaccum' and shares its print, summary and plot methods. Version 1.16-22 (closed August 11, 2009) * metaMDS: accepts now user supplied dissimilarities either as a "dist" structure or as symmetric square matrix (Susan Letcher's wish). As a side effect, dissimilarity matrices are now correctly detected and will not be wrongly treated as raw data. * summary.cca: fix in 1.16-20 failed if all variables were continuous and there were no centroids of factor levels. * indpower: new function to calculate indicator power for a species (Halme et al. 2009, Cons. Biol. 23: 1008-1016) * mantel.correlog, print.mantel.correlog & plot.mantel.correlog: new functions to construct multivariate mantel correlograms --- use in ecology: to describe the spatial structure of species assemblages. See Legendre and Legendre, Numerical ecology; 1998, section 13.1.5. Written by Pierre Legendre. Version 1.16-21 (opened July 4, 2009) * capscale: has now 'fitted' method (and hence, 'residuals'), and 'predict' works with 'type = "response"'. These give dissimilarities that produce same ordination as original data, or their low-rank approximations. Function 'fitted' has 'model = "Imaginary"' that returns correction distances of complex eigenvectors with negative eigenvalues. The dissimilarities are not additive, and the "Imaginary" component is not used in estimating the unconstrained component. * capscale: really works now either with argument 'dfun' or 'metaMDSdist' (but not with both!). * wcmdscale: returns negative eigevalues scaled by sqrt(abs(eigenvalues)) if 'k' is not given or 'k' would include any negative eigenvalue. Version 1.16-20 (closed July 4, 2009) * new version opened concurrently with the release of vegan 1.15-3 on June 17, 2009. * orditorp: works now when axes are reversed like xlim = c(1,-1). * rrarefy: a new function to generate randomly rarefied communities. * betadisper: fix bug in removal of (effectively) zero Eigenvalues. * summary.cca: takes care that all scores have rownames -- head/tail fail without names. No ugly printing for constrained eigenvalues when these do not exist in unconstrained models. * biplot.rda: honour args to scores ('scaling', 'const'). * points/text for cca: accept 'const' argument for rda scores. * ordilabel: no superfluous warnigns when args ('scaling', 'const') are given to scores. * ordiplot3d: honour args to scores ('scaling', 'const') and without warnings. * ordixyplot: honour ags to scores ('scaling', 'const'). * spantree: plot honours args to scores ('scaling', 'const'). Version 1.16-19 (closed June 17, 2009) * capscale: handles now negative eigenvalues with semimetric indices. These cause no more warnings. The MDS engine is now 'wcmdscale' instead of 'cmdscale' unless 'add = TRUE' was specified (and then negative eigenvalues are not produced). The negative eigenvalues are listed after positive unconstrained eigenvalues, but no scores are given for them. The total inertia is now the sum of all eigenvalues, including the negative ones, and inertia components adds item 'Imaginary' for negative eigenvalues after 'Uncostrained'. New argument 'sqrt.dist' makes square root transformation of dissimilarities, producing metric indices in many cases (e.g., Bray-Curtis, Jaccard). Help page and examples now show all these, and therefore the entry on negative eigenvalues was dropped from FAQ-vegan.texi. The closed (max 1) indices are now correctly adjusted for 'rda' and hence the eigenvalues and inertia components are now sqrt(n-1) smaller and similar as in 'cmdscale' and 'wcmdscale'. * wcmdscale: remove zero eigenvalues, keep negative, and do not assume that the last eigenvalue is zero. * RsquareAdj: 'cca' returns R2, but no adjusted R2 (which is NA). The adjusted R2 is always NA for partial models. * kendall.global: fixed a bug that caused incorrect counts of ties in large data sets. * tsallis: division by zero occurred with hill=TRUE, scale=1, this bug has been fixes to give exp(x) as scales goes to 1. * multipart: a sequel to adipart, but implements multiplicative diversity partitioning based on Hill numbers (Jost 2007, Ecology, 88, 2427-2439.) * eigenvals: new function to extract eigenvalues of cca, rda, capscale (constrained & unconstrained), wcmdscale, prcomp, princomp, eigen and svd. For svd returns squares of singular values, and for prcomp and princomp squares of 'sdev'. The 'summary' of eigenvals() retrurn eigenvalues with the proportion explained and cumulatitive proportion explained. * summary.cca: uses summary.eigenvals to display eigenvalues. * protest: observed value of test statistic is now considered as one of the permutations. Default N.perm decreased to 999 to account for this. * envfit (vectorfit, factorfit): observed value of test statistic is now considered as one of the permutations. * mantel, mantel.partial: observed value of test statistic is now considered as one of the permutations. * anosim: observed value of test statistic is now considered as one of the permutatons. * mrpp: argument defaults and printing adated for having test statistic among permutations (like the function always had). Version 1.16-18 (closed May 14, 2009) * tsallis: got new argument 'hill' similar to that of renyi. * twostagechao: function that calculates multiple-community similarity based on Chao et al. 2008 (Biometrics 64, 1178-86). Some debugging is needed since it cannot reproduce the numbers in Table 3 exactly (lower estimates and SEs). The Rd file also needs more details. * anova.cca: there was a name clash and failure in anova.ccabymargin, anova.ccabyaxis and anova.ccabyterm if data were indexed with 'i' in the fitted model. Now the internal indexing uses less likely name (.ITRM) to avoid name clashes. * orditkplot: copes with missing or NaN scores (omits them). * ordixyplot: failed in constrained ordination (cca, rda, capscale). Was broken in rev108 on Nov 7, 2007(!). The biplot was rotated 90 degrees: it seems that lattice calls x y and y x. * ordixyplot & ordisplom: Gained a new type = "arrows" that is a Lattice version of ordiarrows. * RsquareAdj: defined as generic function. The old RsquareAdj is now the "default" method, and there are specific methods for "rda", "cca" (= NA), "lm" and "glm" objects. Not yet documented, but functions are listed as aliases in varpart.Rd. On Pierre Legendre's request. Version 1.16-17 (closed April 15, 2009) * closed concurrently with the release of vegan 1.15-2. * spantree.Rd: example plots use type = "t" to demonstrate the use of ordilabel(). * nestedtemp: docs tell that Carsten Dormann's bipartite package has a direct port of BINMATNEST programme of Rodriquez-Girones & Santamaria. * anosim: uses much less memory allowing analysis of larger problems (number of rows, number of iterations). The change concerns only internal data structures, and the permutation results should be identical with old and new code when the same random number seed is used. The Rd file got an example of using 'strata' in permutations. * meandist: a new sister function for mrpp. Function meandist calculates a matrix of mean within and between group dissimilarities. Its summary function returns the overall averages of those distances, and all three variants of MRPP A statistic, and classification strength. The plot method draws a dendrogram based on the mean dissimilarity matrix, with leaves hanging to within-group dissimilarity. * betadisper: Fix bug corrects the way distance to centroid is computed when only one group is present in the data. betadisper can now also detect if 'd' is Euclidean, zapping zero Eigenvalues. Bug report and suggested improvements provided by Etienne Laliberté. betadisper now also handles missing observations in either the dissimilarity matrix or the grouping variable. * decostand: added dots to the argument list to pass (ignored) arguments to decostand(). This was done to to fix stressplot(metaMDS(x, dist="gower", trymax=40)), which failed because metaMDSdist/vegdist were passing 'trymax' to decostand() while evaluating "gower" dissimilarity. * ordisurf: will fit a linear trend surface if knots = 0 or knots = 1, and a quadratic trend surface if knots = 2. All these are below the lowest permissible values of 'gam' smoothers and free for creative reuse. Version 1.16-16 (closed April 2, 2009) * metaMDS: scales ordination scores to the same range as input dissimilarities if halfchange = FALSE. Better heuristics to decide whether to use halfchange scaling: the old heuristics failed if Euclidean or other open-ended dissimilarities were small (max < 1), like after wisconsin() in metaMDSdist. The heuristics are now in postMDS instead of metaMDS wrapper, and this changed the default of internal argument 'halfchage' in postMDS, and now the user can set the 'halfchange' argument in metaMDS. The undocumented internal 'maxdis' argument is changed to logical in metaMDSdist (TRUE if maximum dissimilarity = 1 for a pair of sites with nothin shared). * mrpp: reports now "classification strength" when weight.type = 3 or weights n*(n-1) are used. Returns mean dissimilarities and counts for classes. Expected delta is now the mean of original dissimilarities instead of mean of permutation deltas. Version 1.16-15 (closed Mar 25, 2009) * envfit help page: explains the automatic scaling and 'arrow.mul' argument. * add1/drop1 help: better example after a query of usage in R mailing list. * oecosimu & permatswap: much faster 'burnin' implemented through 'thin', and hence using a single C loop instead of multiple calls and assignments to an R object. * as.mcmc.permat: provides same functionality for permat objects as as.mcmc.oecosimu for oecosimu objects. * permatswap: same default values of 'burnin' and 'thin' (0 and 1, respectively) are set for permatswap and oecosimu functions. Previous defaults for permatswap were in conflict with oecosimu when called by permat.control. * hiersimu: new function to evaluate a statistic value at different levels of a nested hierarchical sampling design. Based on oecosimu and null model testing, but with evaluation process similar to adipart. * metaMDS: automatic stepacross works with Euclidean, Manhattan and other distances with no fixed upper limit. However, this may be meaningless, and a warning is issued. Fixed after a query to R-sig-ecology by Manuel Spinola. Version 1.16-14 (closed Mar 10, 2009) * as.mcmc.oecosimu: a new function to translate sequential null models to "mcmc" object of the coda package. The coda package provides a wealthy source of the analysis of things like stationarity, adequate sample size, autocorrelation, length of needed burnin-in etc. * density and densityplot: new methods for "oecosimu" objects. * as.ts.oecosimu: new function for applying time series methods for sequential null models ("swap", "tswap", "abuswap"). * metaMDSrotate: a new function to rotate metaMDS configuration so that the first axis is parallel with a continuous site variable. * as.ts.permat: extracts summary statistics from 'permat' objects as time series, to use for time series diagnostics. * permatswap: two new methods (under "abuswap") added based on the paper of Hardy 2008 (J Ecol 96, 914-926). These preserve row *and* colunm occurrences, and row *or* column sums at the same time. Thus these complement the methods available in vegan. Uses C code (not thoroughly tested yet). Needs some more work, and documentation (examples and reference in Rd file). Version 1.16-13 (closed Feb 24, 2009) * anova.cca: documented the 'cutoff' argument for by = "axis". * text.procrustes: added text() function for procrustes() result plots. * rad.null: failed with family = gaussian and Gamma. * simulate.rda: new method to simulate responses with random error for an rda() result object. The function uses Normal error, and estimates the sd separately for each species from their rda residuals. Normal error is justified by least squares fitting in rda. This could be made to use permutations of residuals. Not yet implemented for cca or capscale results. For cca we -- at least -- need to handle weights, and the capscale result would be rda result, since the method cannot be directly implemented for dissimilarities. The function was triggered by Ben Bolker's email to R-devel mainling list https://stat.ethz.ch/pipermail/r-devel/2009-February/052116.html Version 1.16-12 (closed Feb 15, 2009) * anova.ccabyaxis: gained keyword 'cutoff' (defaults 1) to break from permutation tests after exceeding the P-value given in the argument. The keyword was introduced because rda and cca are occasionally used with a huge number of constraints (like PCNM vectors) where tests take a very long time, although only a couple of first axes are significant. The keyword is still undocumented, and will remain so because this change is still experimental. * contribdiv: new functions for contribution diversity as an alternative to simple additive diversity following Lu, Wagner & Chen, Basic and Applied Ecology 8, 1-12 (2007). Version 1.16-11 (closed Feb 9, 2009) * anova.cca: used different random number sequence for the second term with by = "margin". * ordirgl & orgltext: removed work arounds for very old versions (pre-0.65) of the rgl package. Version 1.16-10 (closed Jan 28, 2009) * commsimulator: failed if input data (x) were a data.frame. * metaMDS: really do not evaluate no.shared() if set noshare=0. Triggered by a problem report with missing data. * vegdist doc: Morisita and Horn-Morisita were given as similarities in the help. * ordirgl: fixed wrong warnings in ordirgl(..., type="t"). * kendall.post, kendall.global: knows now all P value adjustment methods of 'p.adjust()' plus "sidak". Version 1.16-9 (closed Jan 20, 2009) * kendall.post: added one line that was accidentally lost in editing. * Checked with R version 2.9.0 Under development (unstable) (2009-01-13 r47593) having experimental strict Rd parser, and corrected the reported problems in Rd files so that vegan is R 2.9.0-ready. * adonis: uses now canonical (hits+1)/(tries+1) for P-values instead of hits/tries. Default number of permutations increased from 5 to 999. Added terms component so that things like update() and drop.scope() magically started to work. Renamed design.matrix into model.matrix (and documented the item). * permatswap: new algorithm "swsh" is added to keep row/column incidences (but not sums) constant. The name refers to the two steps: (1) binary *sw*aps are made then (2) individuals in non-zero cells are *sh*uffled. * permat methods: calculations of the Chi-squared statistic is added to summary, and the type argument can be used in the plot "bray" or "chisq" values. * nestednodf: gained argument 'order = TRUE' allowing tests for other orderings than using marginal frequencies (default) following suggestion by Almeida-Neto et al. (2008). * summary.cca: cumulative "accounted for" statistics failed in unconstrained models. Version 1.16-8 (closed Jan 7, 2009) * Fixed unescaped $-signs in documentation files after Ripley told to do so ("[Rd] Misuse of $$ in Rd files", https://stat.ethz.ch/pipermail/r-devel/2008-December/051634.html) * kendall.global & kendall.post: new functions to analyse the Kendall's coefficient of concordance --- use in ecology: to identify significant species associations. See P. Legendre, J. Agric. Biol. Envir. Statistics 10, 226-245; 2005. Written by Guillaume Blanchet and Pierre Legendre. * nestedness: added nestedness index based on overlap and decreasing fill (Almeida-Neto et al., Oikos 117, 1227-1239; 2008). Not yet all properties of the Oikos paper are implemented, and the UI needs work (print, plot methods). Coding by Gustavo Carvalho as a part of R-Forge Feature Request #265. Documented with nestedtemp. Version 1.16-7 (closed Dec 17, 2008) * permat*: functions were rationalised, strata argument is used instead of reg and hab, and returned object got several new arguments. The tide of changes affected methods as well, and some other function (adipart, oecosimu). Stratification was tested and corrected. Version 1.16-6 (closed Dec 7, 2008) * adipart: got a formula interface, and aggregate() was replaced by matrix multiplication. Now it is 10 times faster. The formula interface has some consequences on the specification of the sampling design. * permatfull: Jari Oksanen made the C port for the quantitative quasiswap algorithm. So the permat* null model family now can be used for a wide array of null model analyses and is quick enough to make reliable testing. The permatswap function and help page were modified accordingly. * plot.rad: gained argument log = "y", allowing log = "xy" so that Zipf model is a straight line, or log = "" with arithmetic scales. Not (yet) implemented for Lattice alternatives. Version 1.16-5 (closeed Dec 4, 2008) * adipart: new implementation of adipart is now ready to be released (needs some testing). Summary and plot methods have been removed. The new implementation is based on oecosimu and quantitative null model settings via permat.control. It contains only traditional diversity indices. More features will be added later, gradually. * plot.nestedtemp: label argument accepts a vector of length 2 with elements for row and column labels, respectively. * mite.rda: Oribatid mites got species names (from Pierre Legendre's web pages). * text.decorana: failed (bug introduced in rev344, on May 9, 2008). * commsimulator: simulated null models have same column and row names as the original input (as.)matrix. There was a problem report by a user who tried to use column names during evaluation of the statistic. Done by setting attributes (and it would be possible to replace dim() setting by attributes() setting in the code). * ordisurf: gains argument 'bubble' to use bubble plots for points, and 'cex' to set the symbol size (or the maximum size with 'bubble = TRUE'). Version 1.16-4 (closed November 25, 2008) * oecosimu: got a new control argument for quantitative null model analyses; this is available if method = "permat". The print method and help file modified accordingly. * vignettes: Figures with narrower margins. Vignette "diversity-vegan" adds functional diversity ('treedive'), 'beals' and 'radfit' graphics updated to current vegan. Still missing pieces: nestedness & null models, quantitative null models, additive diversity partioninng, Tsallis entropy. * radlattice: a new function to display each radfit model in a separate panel together with their AIC or BIC values. * plot.cca: takes care that plotted items have non-NULL names that plot neatly. This was already take care of with formula interface, but now it should work also in other cases in plots. Reported by Daniel Borcard. * permatwsap: quasiswap method is implemented for count data based on the idea of Carsten Dormann in the bipartite::swap.web function. This takes a random matrix first with same row and column sums as the original (via r2dtable), and then restores the original matrix fill through steps of swapping 2x2 submatrices. The current R code is slow. * permatfull: when both cells and individuals are shuffled, the matrix fill remains constant. * nesteddisc: replaced with a new function that orders tied columns to minimize the discrepancy statistic. If there are <=7 tied columns, all upto 5040 permutations are inspected, and if there are >7 tied columns, 5000 random permutations are inspected. The ties are inspected only if they could change order of columns within range of row sums (species richness). A warning with results is only printed if there were >7 tied columns that could influence the statistic, because in other cases the search for solution was exhaustive. The new function may be slow, and a more clever solution should be found (or nesteddisc dropped from vegan). With this code, the discrepancy statistic of the 'sipoo' data is 50 (cf. notes on 1.16-3) instead of the original 55. * betadisper: now works for cases where there is only a single group. 'scores', 'plot' and 'boxplot' methods updated to work in such cases. 'anova' and 'permutest' methods stop with an error if used for such cases as they implement tests that do not make sense for a single group. Version 1.16-3 (closed November 1, 2008) * spantree: saves labels of points, and 'cophenetic' and 'plot' use these labels. Function 'plot' uses 'ordilabel' for text labels. * orditkplot: added option to copy the current graph to a TIFF file. The capabilities("tiff") check was added in R-2.8.0, but the test works in R < 2.8.0 as well. * nesteddisc: Carsten Dormann (UFZ, Leipzig, Germany) turned my attention to the sensitivity of discrepancy to ties in column frequencies. These are not handled by any way (yet), but the users are warned now about ties. For instance, the example matrix 'A' on page 259 of Brualdi & Sanderson (Oecologia 119, 256-264; 1999) can be ordered to give discrepancy value = 2 instead of value = 3 reported in the paper with a different ordering of columns. Different random reorderings of species in the 'sipoo' data in vegan can give discrepancy values 51 to 58 (and the original arbitrary ordering gives 55). This means that discrepancy values are not very reliable, but ties should be handled better or the function withdrawn from vegan. * ordisurf: returns x, y and z used by contour() following a query "[R-sig-eco] output from ordisurf" on Oct 23, 2008. Version 1.16-2 (closed October 27, 2008) --- for Annukka * beals: replaced old beals.R with the new code by Miquel de Caceres with new methods described in De Caceres & Legendre (Oecologia 156, 657-669; 2008). This also implements the cross-validatory Beals of Munzbergova & Herben (Oikos 104, 408-414; 2004) plus many new options of unbiasing estimates. * permatfull: bug of row/col margins is fixed, shuffle argument is added to enable individual and sample based randomisation of count data (or both) when not all the margins are fixed. * anosim: API and documentation made similar to mrpp to combine their documentation. Now anosim can take data frame input and find the dissimilarities internally. Version 1.16-1 (closed October 10, 2008) * dispindmorisita: function to calculate Morisita's index of dispersion, and its standardized version. Uses the correct way of standardizing, see Note section in help. * radfit: Should work with empty sites (no species) or when the number of species is less or equal the number of parameters estimated (like may happen in sweeping analysis of data frames or simulations). Takes care that input data frames have row names which are necessary for displaying results. * head.summary.cca & tail.summary.cca: shortcuts to print(summary(x, ...), head, tail) for nicer Sweave tutorials. Version 1.16-0 (closed on September 30, 2008) * New devel version after branching the release version 1.15-0. Identical to the release version, but includes MOStest and adipart functions that were removed from 1.15-0. Version 1.14-12 (closed September 26, 2008) * add1.cca, drop1.cca: new functions that also implement permutation tests with argument test = "permutation", but only use default methods with test = "none". Function drop1.cca uses anova.cca(..., by = "margin"), and add1.cca implements a new type of analysis for single term additions. The immediate reason for implementing these tests was that I found out that step(..., test = "Chisq") worked(!) producing parametric likelihood ratio tests, and this hole had to be closed before users notice this. * anova.cca: improved treatment of models where constrained or unconstrained models are NULL so that permutation tests are impossible. These used to stop with error, but now they return a zeroed result so that things like anova(..., by = "term") and drop1() work. Added function anova.ccanull to handle these cases. * anova.cca(..., by = "margin") was handling wrongly 'x' in ~ Condition(x) + x + z, or model formulae where same variables were used both as Conditions and (aliased) constraints. * anova.cca(..., by = "margin") or function anova.ccabymargin gained a 'scope' argument which is used in drop.scope(). * orditkplot & ordipointlabel: improved interface allows passing font type from ordipointlabel to orditkplot. * copied to version 1.15-0 at rev506. Version 1.14-11 (closed September 10, 2008) * anova.cca/permutest.cca: default permutation model changed from "direct" to "reduced" after Pierre Legendre's simulation test demonstrated slightly better Type I error for "reduced" models in by = "axis" and other partial models. This is also consistent with CANOCO (but permutation of CCA residuals differs from CANOCO). For compatibility with old versions of vegan, you must set model = "direct" explicitly. * ordiplot: did not use partial match for "sites" and "species". Version 1.14-10 (closed September 5, 2008) * treedive: tries to match 'comm' and 'tree' names if forced (by an arg), or when sizes do not match. Output vector has names. Docs discuss estimating signifcance using oecosimu(). * oecosimu: accepts now a vector of statistics and plain statistics instead of the list item statistics, and the user can define the name of the statistic in the function call. This means that things like functional diversity (treedive) for sites can be analysed with approprite simulation model. * nestedtemp & oecosimu documentations split. * ordiParseFormula: formula of the partial terms has the same environment as the general formula. Cures some tricky issues when the partial term of cca/rda/capscale model is updated within a function. (The environment() drives me crazy, says J.O.) * ordiParseFormula gains new argument 'envdepth' to define the depth where the community data (dependent data) is evaluated. Most functions evaluate community data in the parent environment of the calling function, but capscale() creates new dependent data and needs evaluate the community within calling function. (The environment() drives me absolutely crazy, says J.O.) * specaccum: empty (all zeros) species removed from input data. These confused method = "exact" which gave sd = NA. * permutest.cca: tells whether the test was for all eigenvalues or for the first (this is implicit in anova.cca). * vegan-internal.Rd: brief documentation of internal functions for developers with some guidelines of good practices. Version 1.14-9 (closed August 20, 2008) * closed concurrently with the release of vegan 1.13-2: changes up to this version may have been there. * adipart: new function to perform additive diversity partitioning with corresponding S3 methods. * tsallis: new function to calculate Tsallis-entropy, a scalable diversity index family * treedive: new functions for estimating functional diversity defined as the height of a dendrogram of species properties for a site (Petchey & Gaston). Still very preliminary. * plot.procrustes: could fail if two solutions were *exactly* *exactly* identical (noticed by Peter Solymos with wcmdscale example). Version 1.14-8 (closed August 10, 2008) * wcmdscale: new function to perform metric scaling (a.k.a. principal coordinates analysis) with weights for points. * ordiArgAbsorber: now knows about 'choices' and 'display' args of scores(). Reported by Michael Denslow. * orditkplot: plotting text labels was broken in the default case. Zooming works again. Plotting character (pch) is now better centred on the canvas, and the code was simplified. Version 1.14-7 (closed July 30, 2008) * orditkplot: imitates now plotting character (argument pch). Zooming maintains graphical parameters (such as mar). Label selection shown by a rectangle, since label may already be red. Label family, size and font can be vectors. * permat.R, swapcount.R: summary method was modified according to standard R ways, ylab argument was deleted from plot method. The R version of swapcount was deleted and replaced by the C version. Help file was modified accordingly. * ordilabel: new function for cluttered ordination plots -- text is written on a non-transparent label. Similar to s.label() function in ade4. * ordipointlabel: new function for cluttered ordination plots -- points are in fixed positions, but their text label is located to avoid overlap. The optimization is based on optim(..., method = "SANN"). Similar to pointLabel function in maptools. Returns an "orditkplot" object, but orditkplot cannot yet completely handle this (and this feature is undocumented). * permutations: permuted.index2 and associated functions now allow for restricted permutations of strata (i.e. restricted shuffling of the blocks). This changes the acceptable 'type' options and adds a new argument 'permute.strata' to permControl(), to control how and what is permuted. Version 1.14-6 (closed July 5, 2008) * permatswap (nestedness.c): translated Peter Solymos's swapcount.R to C. This is still experimental code, and the user interface is undocumented, except here: use method = "Cswap" in permatswap. * permatswap: was not updating swap matrix but using the same starting matrix after burnin for every swap. * swapcount.R: was advancing 'thin' counter even when a swap was rejected so that fewer than requesed 'thins' were done. * permat.R, swapcount.R: genereal cleanup, most importantly replacing vector operators & and | with logical operators && and ||. * commsimulator: "quasiswap" written in C and *much* faster now. Times are for MacBook Intel 1.86 GHz and 100 matrices: "sipoo" from 7 min to 4 sec, "BCI" from 2+ hrs to 45 sec. Actually, quasiswap is now much faster than ordinary swap which also should be written in C. "Backtracking" is so much more complicated code that it could probably never reach "quasiswap" even if written in C, and it may be dropped in the future. * commsimulator: "swap" and "tswap" written in C, and clearly faster now. In MacBook, 100 swaps with "sipoo" went from 8 sec to 0.5 sec, and thinning hardly influenced timing (it used to thin-fold times). * oecosimu: takes care that original statistic is found from binary data. Version 1.14-5 (closed June 19, 2008) * scores.rda: scaling = 0 returns now unmodified scores from the object (like documented) without multiplying by the scaling constant. Gains argument 'const' for user-settable general scaling constant of the scores. The default 'const' is found internally to giv a biplot scaling so that species and site scores together approximate the original data. The value of 'const' is returned as an attribute of 'scores'. * summary.cca: prints the value of general scaling constant used in 'rda' or 'capscale'. * summary.cca: prints 'capscale' like 'rda' (used to have some 'cca' style output, like calling site scores "weighted averages" instead of "weigthed sums"). * permutest.cca: estimates now residual df as number-of-rows - rank-of-constraints-and-conditions - 1 so that df and pseudo-F are equal to those reported by lm() for single response variables in rda. anova(..., by = "ax") needs rethinking though: it only had one df. Because the test was based on permutation and order statistics the change of df does not change the significances: the observed pseudo-F and permuted pseudo-F's are influenced similarly by the change of df, and order statistic does not change. * varpart: long formulae were cut off in printoutwith a cryptic warning. Version 1.14-4 (closed June 12, 2008) * permatfull, permatswap and swapcount: functions to generate unrestricted and restricted null model community data matrices under diferent constraints (preserving row/columnsums, or incidence pattern), with print, plot and summary methods. (submitted by PS) * adonis: speed-up and doc updates. Version 1.14-3 (closed June 9, 2008) * rda.default, cca.default: vegan naively used only the rank of the ordination, but indeed, there are three cases of ranks: rank of the ordination or number of axes (returned as rank like before), rank of the constraints after conditions (now returned as qrank), rank of conditions + constraints (returned in QR$rank). When only 'rank' was used, vegan for instance aliased terms beyond rank of ordination axes, extractAIC did not get df right when going beyond rank of ordination, anova(..., by="t") gave zero df for constraints beyond rank of ordination, and calibrate.cca ignored those extra variables (now stops). In addition predict.cca and predict.rda(..., type="lc", newdata=somedata) gave wrong results in partial model. The following changes were made if necessary to cca/rda support functions: * alias.cca: QR$rank * anova.ccabyaxis: OK * bstick.cca: OK * calibrate.cca: stop with error if qrank > rank * extractAIC: qrank * mso: OK (HW confirms) * msoplot: OK (HW cofirms) * permutest.cca: qrank, also fixes anova.ccabyterm * predict.cca/rda: QR$rank with type = "lc" & newdata * summary.cca/rda: OK * scores.cca/rda: OK Version 1.14-2 (closed June 5, 2008) * Helene Wagner joined the vegan team. * mso: automatically collapses distance classes larger than half the maximum distance into a single distance class. * mso: plot.mso renamed to msoplot so that plot.cca also works, and the example uses now Oribatid mite data set. * mso: gained a print method that also shows the variogram (Helene, please check this!), and mso knows about its own call. * lines.spantree: did not pass graphical arguments to lines (broken in 1.12-15). * ade2vegancca: a new function which tries to change an ade4:::cca object to vegan:::cca object (and manages partially). This is used internally in print.cca, scores.cca and summary.cca so that vegan can display some information from ade4:::cca (with a warning). Since scores.cca works for ade4, so do plot, orditkplot etc which rely on scores. Version 1.14-1 (closed May 29, 2008) * plot.mso: passes extra arguments (...) to graphical functions. * mite.xy: new data set with spatial coordinates for the Oribatid mite data. From Pierre Legendre's web page. * weights failed in several ordination utilities, because weights.default in R 2.7.0 (stats) could not cope with objects that do not have weights. R 2.6.2 still returned NULL for those objects, but now weights.default gives an error. As a workaround several vegan functions define internally weights.default <- function(object, ...) NULL to get back the old behaviour. Concerns orglspider, ordicluster, ordispider, ordiellipse, ordisurf, factorfit, vectorfit. * inertcomp and intersetcor only work with objects inheriting from "cca", but they did not check that the object was of the correct type and so could end up with calling weights.default or give obscure error messages. * permutest.betadisper: Could give the wrong pair-wise permutation p-values. Reported by Daniel O'Shea. Version 1.14-0 (closed May 21, 2008) * The base of the release version 1.13-0. Version 1.12-15 (closed May 14, 2008) * closed the revision and made it as the base of release branch 1.13-0 at rev353. * capscale: prints info on possible metaMDS transformations, and uses metaMDSdist transformed data for getting species scores (similarly as metaMDS recently does). * ordiTerminfo: does not give superfluous warnings if constrained ordination called without constraints and without data=, like capscale(x ~ 1). * graphical functions: Graphical functions that also pass '...' to non-graphical functions (such as scores) now accept non-graphical arguments without issuing an warning. These warnings were harmless but it is neater to stop them happening in the first place. This is facilitated by the new internal function ordiArgAbsorber(). * MOStest: added fieller.MOStest for approximate confidence intervals of the location of the hump or pit. The method is based on Fieller's theorem following ter Braak & Looman (Vegatatio 65, 3-11; 1986) and profile based condifence limits following Oksanen et al. (Ecology 82, 1191-1197; 2001). Both are based on the code from the ESA Ecological Archives accompanying Oksanen et al. (Ecology 82, 1191-1197; 2001) and published in package optgrad (http://www.esapubs.org/archive/ecol/E082/015/default.htm), but profile methods heavily borrow from the MASS package. Version 1.12-14 (closed May 9, 2008) * mso: added Helene Wagner's mso function for direct multi-scale ordination or spatial partioning of 'cca' and 'rda' results (Ecology 85, 342-351; 2004). Thanks to Helene Wagner for allowing the inclusion of the code. * MOStest: new function to implement Mitchell-Olds & Shaw test for the location of quadratic extreme in a defined interval. * capscale: accepts now other dissimilarity function than vegdist, and optionally uses metaMDSdist to manipulate dissimilarities similarly as metaMDS. This provides now a one-shot unconstrained principal coordinates analysis ("metaPCoA"), optionally with extended (flexible shortest path) dissimilarities. Incidentally this also implements a "new" possibly unpublished ordination method: extended distance based redundancy analysis. * metaMDSdist: argument 'add' gained new alternative "ignore" to do nothing with zero distances. This can only and should be used with metric scaling (cmdscale(), capscale()). * ordispantree: removed after being deprecated and defunct for a long time. Use lines.spantree instead. Version 1.12-13 (closed May 7, 2008) * orditkplot: labels can be edited with double clicking, and shift-mouse allows zooming into smaller are in the plot. Version 1.12-12 (closed May 1, 2008) * adonis: added calculation of coefficients both for the species (when data matrix was given) and for sites (both with the data matrices and dissimilarities). * betadisper: was not calculating distance to centroid correctly for observations where the imaginary distance to centroid was greater than the real distance (resulting in negative distance) which resulted in NaN when we took the square root. betadisper() now takes the absolute value of the combined distance before taking the square root. This is in-line with Marti Anderson's PERMDISP2. Version 1.12-11 (closed April 23, 2008) * adonis: permutation tests fixed. The permutation statistics were wrongly calculated. The results will now be different than in older version, including the example(adonis). Basically, the reported statitistic used SS improvement compared to the residual of the complete model, but permutations used SS accumulation compared to the residual after the current model. * specaccum: returns item "individuals" or the average number of accumulated individuals with method = "rarefaction". A user request. * rarefy: accepts now a vector of sample sizes, and then returns a matrix with a column for each sample size. If also 'se = TRUE', returns two rows for each case, one for rarefied richness, and after than one for its standard error. This was a recurrent user request. * zzz: vegan got package startup message. Version 1.12-10 (closed April 19, 2008) * adonis: the fix for the unused factor levels (r312) revealed that adonis did not handle properly aliased variables and pivoting. Results need checking. * designdist: gained argument 'abcd = FALSE' to use the 2x2 contingency table notation instead of the more tangible default notation. Version 1.12-9 (closed April 13, 2008) * ordiArrowMul: added function 'ordiArrowMul' to improve automatic scaling of biplot arrows (in plot.cca, text.cca, points.cca) and fitted vectors (in plot.envfit). Reversed axes 'xlim=c(1,-1)' work now, and shifted origin 'at = c(1,1)' taken into account in plot.envfit. * plot.cca: scaling used for biplot arrows is returned as an attribute to the 'biplot' item in the 'ordiplot' object (but this attribute is not used for anything useful yet). * summary.cca: contributions of eigenvalues accumulated for constrained and unconstrained axes, and separately (new) for constrained axes. * allPerms: Now accepts a vector from which number of observations can be deduced. This was the intended behaviour but allPerms failed in such cases. * adonis: Was not dropping empty levels of factors, which was leading to incorrect results (d.f. was inflated). Reported by Tyler Smith. Version 1.12-8 (closed April 6, 2008) * permute: New high-level untility function for facilitating the production of permutation tests using the new permutation designs allowed by permuted.index2(). An example of the new API is shown in ?permute. * permutest.betadisper: Pairwise t test function made more computationally stable. Version 1.12-7 (closed Mar 30, 2008) * permuplot: New function, produces a graphical representation of a permutation design given a number of observations and a object returned by permControl(). The function handles all the permutation designs currently handled by permuted.index2(). * permuted.index2: was not returning correct sample indices for grid designs within strata. Also, was not consitently mirroring series and grid designs when 'constant = TRUE' (i.e. mirroring was not applied the same way within each level of strata). * permCheck: Now includes several sanity checks for balance in permutation designs ('grid' & 'strata') and when using same permutation in each level of 'strata' (constant = TRUE). Also works if object is a (numeric or integer) vector of length 1, by expanding it to seq(from = 1, to = object). This is now in-line with the way numPerms works. New argument 'make.all' in permCheck() allows greater control over the checking process. Allows user to check a permutation design without generating the matrix of all possible permutations. Used in allPerms() to allow that function to check permutation designs without getting stuck in infinite recursion, as permCheck() calls allPerms() if complete = TRUE. This change allows allPerms() to be called by a user without having to make sure the supplied design makes sense - the design is checked using 'make.all = FALSE'. * screeplot: functions return now invisibly the xy.coords of bars or points for eigenvalues. They used to return invisibly the input data ('x'). Concerns screeplot methods for 'decorana', 'cca', 'princomp' and 'prcomp' objects in vegan. * varpart4: result could be wrong if 'varpart' was bypassed and 'varpart4' was called directly, because 'Y' was not centred before calculating sum of squares in 'varpart4' ('varpart2' and 'varpart3' were OK). Reported by Guillaume Blanchet, Uni Alberta. * permutest: Now a generic function. permutest.cca is now the 'cca' method. * permDisper: This function has been renamed to permutest.betadisper and documentation updated. * TukeyHSD.betadisper: Function is now documented with betadisper. Version 1.12-6 (closed Mar 25, 2008) * metaMDS: WA scores for species are now based on the same transformations and standardization (like wisconsin(sqrt())) as the dissimilarities. They used to be based on the original data even when the data were transformed for the ordination. The change is minimal: data are evaluated similarly as in metaMDSdist if wascores are requested. An alternative would have been to split data manipulation function into an independent function from metaMDSdist, but I try this first. For compatibility reasons, the previous behaviour can be re-established using argument old.wa = TRUE. * allPerms: Now allows unbalanced designs for "series" or "free" permutations within levels of strata only (i.e. allows different number of observations per level of strata). Unbalanced "grid" designs are not supported (and are unlikely to be so in the near future). permuted.index2 has allowed these cases from the beginning. * allPerms, numPerms: Corrected for situations where type = "series", mirror = TRUE with only 2 observations. In this case, mirroring does not double the number of permutations. Version 1.12-5 (closed Mar 24, 2008) * plot.procrustes: could fail if compared configurations were numerically identical. * allPerms: New function to enumerate all possible permutations for a given permutation scheme and number of samples. Has 'print' and 'summary' methods. * numPerms: Now accepts a numeric or integer vector of length 1 as the first argument 'object'. If supplied it is expanded to seq(from = 1, to = object). This change allows you to state the number of observations rather than pass an object from which the number of observations is deduced. Updated and clarified documentation in this regard. Version 1.12-4 (closed Mar 20, 2008) * permDisper: Added pairwise comparisons of group dispersions via a classical t test and via permutation test, accessed via new argument 'pairwise = TRUE'. 'permDisper' is now documented seperately from 'betadisper'. * TukeyHSD.betadisper: A method for 'TukeyHSD' to calculate Tukey's Honest Significant Differences for the grouping factor in 'betadisper'. * numPerms: Was incorrectly calculating the number of permutations when permuting levels of strata was performed. numPerms was also incorrectly reporting too many permutations in the particular case of type="grid" and mirror=TRUE with ncol=2. * permuted.index2: When permuting levels of 'strata' (type = "strata"), permuted.index2 was shuffling both the levels of strata *and* shuffling the samples within levels. The latter was incorrect and is now fixed. Version 1.12-3 (closed Mar 9, 2008) * betadiver: a new function that implements all indices of beta diversity reviewed by Koleff et al. (J. Anim. Ecol., 72, 367-382; 2003), with a plot function to produce triangular plots. * isomap: added dynamic, spinnable 3D graphics using rgl (rgl.isomap). Version 1.12-2 (closed Mar 7, 2008) * nestedtemp: Rodriguez-Girones & Santamaria (J. Biogeogr. 33, 924-935; 2006) have had a look inside the original temperature calculator code and give a more explicit description of the method. Following their paper, I implemented an iterative procedure to alternately pack columns and rows for ones and zeros. The fill line is still a parabola, but this seems to be very similar to the R-G & S fill line with fills 0.2...0.8 and I don't hurry with this. There still are differences in many aspects of implementation. The iterative procedure gives slightly different results between runs, but here tests: Rocky mountain mammals 3.87 (A&P 3.81, was 3.59 in 1.12-1), Baja birds (Bajabs.txt) 10.17 (A&P 7.25, was 7.75), Queen Charlotte birds 14.78 (A&P 15.87, was 14.51). Some results are indeed more different than they used to be... * nestedtemp (2): After previous entry implemented the fill line of Rodriguez-Girones & Santamaria. This means almost complete rewrite of the function from 1.12-1. New test results: mammals 4.48, Baja birds 10.16, Queen Charlotte birds 15.85. Baja is the most different. Atmar & Patterson have five Baja bird data sets with these test results: Bajaball 6.33, Bajabl 14.43, Bajabn 5.98, Bajabo 11.18, Bajabs 10.13. Smaller change is that packing is based on indices s and t directly instead of their ranks. * vignettes: added discussion on nestedtemp and backtracking in "Design decisions and implementation". Version 1.12-1 (closed Mar 2, 2008) * biplot.rda: gained argument col to select colours for sites and species. * bstick.princomp: used a wrong number of sticks (PCs). Reported by Guy Yollin. * nestedtemp: Returns row and column coordinates, optionally labels plot. * merged last doc fixes from branches/1.11-0/ after release. Version 1.12-0 (Feb 15, 2008) * Made a release branch (1.11-0) based on the the rev. 204, and relabelled this devel branch to 1.12-0. Version 1.10-13 (closed Feb 15, 2008) * preparing for a release and trying to close open threads. * nestedtemp: implemented smooth fill line. The kind of the fill line was not specified in the original paper, but I used parabola which is "as smooth as possible" in the sense that its second derivative is constant. Needs checking, though. Version 1.10-12 (closed Feb 12, 2008) * nestedtemp: new try with smooth fill line. * anova.cca: by = "margin" stops with informative error message if some terms are completely aliased (used to stop with an uninformative error message). Type III effects really do not make sense with aliased variables. * calibrate.cca: does correct pivoting of aliased models. * orditkplot: Set up all basic features, and added points, text, and scores methods. Features that should be added include zooming to a rectangle drawn with a mouse, and adding env variables. The latter would be trivial in a simple way, but the user should be able to move the bunch of arrows to another place, and scale the length of arrows with a mouse. Version 1.10-11 (closed Feb 3, 2008) * bgdispersal: New, more powerful test statistic (in terms of Type 1 error rate) for the McNemar test (Pierre Legendre). * CCorA: internal functions embedded in CCorA(). * orditkplot: More resilient against user errors. New output file types (bmp, xfig), jpeg uses 100% quality. more aware of operating system and capabilities. Accepts graphical par in the function call. Gains arguments xlim, ylim. Arguments col, bg, cex renamed to pcol, pb, pcex so that the do not shadow par(). * permuted.index2: fixed a bug in permutations with strata. * summary.prc: honours now argument 'axis'. Reported by Francois Gillet, Lausanne. * Documentation: added documentation for permuted.index2, permControl, permCheck and helper functions. FAQ and intro know now about orditkplot, anova.cca(..., by="margin") and permuted.index2. FAQ gained new sections on using different plotting symbols and handling congested plots in ordination graphics. Version 1.10-10 (closed Jan 27, 2008) * DESCRIPTION: suggests tcltk. * orditkplot: new function for ordination plots based on Tcl/Tk: you can edit graph by moving labels using a mouse and save the edited graph as an eps file, or export via R plot function to eps, pdf, png or jpeg, or to dump to R session for further processing. * CCorA: removed partial analysis (which needs more work and may reappear later). Version 1.10-9 (closed Jan 16, 2008) * anova.cca: new option by = "margin" to perform separate tests for each marginal effect in a model with all other terms. This is similar to Type III tests, but will only work with marginal terms, and will exclude main effects when corresponding interactions are in the model. P-value is now assessed in the true blue way as (hits+1)/(permutations+1) in all anova.cca methods. Permutations should be able to handle now rank deficit cases with pivoting in the QR decomposition (permutest.cca). * permuted.index2: New version of permuted.index() that now allows restricted permutations. Can produce permutations for time-series or line transects and for spatial grids. These can also be nested within 'strata'. permuted.series() and permuted.grid() are the relevant workhorse functions. Permutation options are set by new function permControl(). Plan to migrate vegan functions to permuted.index2() in the devel version, and will eventually replace the current permuted.index(). * permCheck: New function for checking permutation schemes under permuted.index2. Uses new function numPerms() to generate the number of possible permutations. permCheck() has print, summary and print.summary methods. Version 1.10-8 (closed Dec 14 2007, at Rev. 133) * metaMDS: gains argument wascores (defaults TRUE) to suppress calculation of species scores. * wascores: return now NA for missing (all zero) species instead of failing. * ordiplot: ignore missing scores in plotting and printing. * betadisper: new functions for Marti Anderson's analysis of homogeneity of multivariate dispersions. * nestedtemp: handles now tied frequencies using ties.method = "average" in rank(). Function is still preliminary, and may be dropped from the release. * taxa2dist: issues now a warning if called with 'check = FALSE' and there are zero distances, typically meaning that basal taxa (species) were not coded. Also explained in the help. * varpart: failed if there were unused levels in factors (reported by Clément Tisseuil, Toulouse). * adonis: loses argument 'distfun'. Instead accepts now any 'dist' object as input instead of a data frame or a matrix. Version 1.10-7 (closed Nov 18, 2007 at Rev. 119) * adonis: gains argument 'distfun' (default 'vegdist') so that other standard conforming dissimilarity functions than vegdist can be used (a user request). * decorana: does not crash R when called with NULL row data such as decorana(dune[FALSE,]) (reported by Richard Tellford, Bergen, Norway), and predict(..., type="sites") works correctly with downweighted analysis (reported by Colin Beale, Aberdeen, Scotland). * isomap: checks now that input data are dissimilarities or can be changed into dissimilarities without warnings. * ordixyplot: can now display biplot arrows and factor centroids in constrained ordination or from envfit (ordisplom and ordicloud cannot display these). * ordixyplot, ordicloud and ordisplom: no longer have explicit scaling argument, but can now pass arguments to scores() as well as to the plotting functions. * oecosimu: evaluates now two-sided P-value of the statistic from simulations. Doc updates. * vignettes: use all similar style (amsart, a4paper, sidecap, date style). * FAQ: tell about docs added to R-Forge versions of vegan. Tell about predict() for having "passive" points. Version 1.10-6 (closed Oct 31, 2007 at Rev. 100) * Gavin Simpson joined the vegan team. * oecosimu: new functions for indices of nestedness of patches or islands, and simulation of null communities. * scores: cca method does now accept display = c("species", "sites"). Previous fix (1.10-5) was for rda method only. Documentation updated to reflect changes. * biplot.rda: now allows a different type to be specified for each of the species and site scores. Function now documented more completely. * ordixyplot, ordicloud and ordisplom: now have argument 'scaling'. * orditorp: now handles additional arguments passed as '...' more cleanly. Arguments can be passed to scores() or points/text. This should avoid the warning messages of previous versions. * sipoo: a new data set on the bird communities in the Sipoo (Sibbo) archipelago to demonstrate the oecosimu functions. Version 1.10-5 (closed Oct 18, 2007 at Rev. 86) * biplot.rda: new biplot function for PCA in rda() (Gavin Simpson). * scores: cca method accepts now display = c("species", "sites"), when it only used to accept c("sp","wa"). More consistent arguments in the default method. * CCorA: Pierre Legendre submitted code for permutation test of Pillai's trace. * capscale: negative scaling works now in plot() and scores(): estimates species sd() from the 'comm' if 'comm' is known. Version 1.10-4 (closed Oct 6, 2007 at Rev. 75) * anova.cca: failed in anova(object, by = "axis") when the fitted model had terms like poly(x, 2) or log(x). * ordiresids: new function for plot.lm like diagnostic plots for constrained ordination: Residuals ~ Fitted, sqrt(abs(Residuals)) ~ Fitted, and qqmath(~ Residuals) using Lattice graphics. * fitted.cca, fitted.rda: gained agument type = "working" to get the fitted values and residuals used internally in calculation (to be used in plot.lm diagnostic plots residuals ~ fitted). Version 1.10-3 (closed Oct 2, 2007 at Rev. 62) * doc: added vignettes intro-vegan on ordination methods and diversity-vegan. * Trellis graphics for ordination objects with functions ordixyplot, ordicloud and ordisplom. These functions are still unsatisfactory. In particular, I haven't found a clean way of having biplot arrows in the graphs (how do you know the coordinates and the axes used?). Contributions are welcome. * ordispantree made dysfunctional (deprecated in 1.8-1). Version 1.10-2 (closed Sep 14, 2007 at Rev. 36) * vegandocs: added FAQ-vegan, and renamed the old vegan-FAQ to decision-vegan. Only primary sources (texi, Rnw) in the source repository: derived files (.tex, .pdf) should be made when package is built. * CCorA: Pierre Legendre's functions for Canonical Correlation Analysis. These provide a more robust alternative to the standard cancor() in base R. (under work) * scores.default: handles numeric data frames. Version 1.10-1 (closed Sep 7, 2007 at Rev. 21) * taxondive: Fixed dimension checking, matching names and non-unique taxon names. Version 1.10-0 (Sep 6, 2007) * Moved vegan_1.8-7 (CRAN release) into R-Forge.R-Project.org and Subversion SCM. This ChangeLog will only contain most important news (and should be renamed to NEWS), and the real ChangeLogs are created by the SCM. The revisions will be numbered as 1.10-1 to 1.10-x, and the next release will be 1.11-0. VEGAN RELEASE VERSIONS at http://cran.r-project.org/ Version 1.8-8 (Oct 2, 2007) * Minor bugfix release for upcoming R-2.6.0. Based on the http://r-forge.r-project.org/projects/vegan/ revision 17 (= 1.8-7) with ported bug fix revisions from 1.10-3 (see below for revision numbers). * anova.cca: by = "term" failed in partial model. This was broken in 1.8-6 by introducing a test against deficit rank models (r47). * cascadeKM: Calinski index works now when the input data is a data.frame (r57, 58). * flush.console: metaMDSiter and bioenv use now flush.console() so that Windows people also see the trace (r56). * ordispantree: made defunct, was deprecated in 1.8-1 (r38). * scores: handles now numeric data frames (r25). * summary.cca: failed if only one type of scores was requested (r50, 52). * taxondive: Fixed dim checking and matching species names in community data and taxonomic distance data (r21). * tweaks to pass --pedantic R CMD check, mainly in formatting source files, unused variables in source files and superfluous braces in help files (r39, r46, r62). * Updated FAQ-vegan.pdf to the current version at R-Forge. Version 1.8-7 (August 24, 2007) * Based on devel version 1.9-34. * DESCRIPTION: M. Henry H. Stevens (Miami University, Oxford, Ohio) joined the vegan team. * adonis: new function for nonparametric MANOVA that is appropriate for even extremely wide matrices sometimes associated with gene data and with diverse ecological communities. Author Hank Stevens. * taxondive: a new function for indices of taxonomic diversity and distinctness after Clarke & Warwick (Mar Ecol Prog Ser 216, 265--278, 2001 and other papers). With a helper function 'taxa2dist' to turn taxonomies into distances with an option for variable step length (Clarke & Warwick, Mar Ecol Prog Ser 184, 21--29, 1999), and a toy data set on the taxonomy of dune meadow species ('dune.taxon'). With a help, testing and pressure from Mike Cappo, James Cook Uni, Qld. * bgdispersal: previous version was partly garbled (by me), and P. Legendre provided a corrected one. * designdist: keeps 'dist' attributes even when the 'method' function drops them. Swapped the order to (terms, methods) in the default name. * metaMDS: issues a warning if data are disconnected. Passes extra arguments to other 'distfun' than 'vegdist' so that you can set 'terms' in 'designdist' etc (metaMDSdist). Can now do trymax=0 or skip random starts and give you enhanced 'isoMDS' result (metaMDSiter). * ordiplot: failed if number of species was equal to number of sites (and so did plot.metaMDS and plot.isomap using this). * plot.profile.fisherfit: corrected a harmless error detected by checkUsagePackage(). * predict.rda: removed some dead (but heavy) code from type = "response". Version 1.8-6 (May 9, 2007) * Based on devel version 1.9-23. * as.mlm.cca, as.mlm.rda: new functions to refit constrained ordination result (cca, rda, capscale) as a multiple response linear model. You can find influence statistics (Cook's distance, hat values) from the refitted model. You also can find t-values etc., but these have the same bias as in other software and should not be used. * bgdispersal: a new function for dispersal direction in biogeography (Legendre & Legendre 1998, section 13.3.4). Author Pierre Legendre. * designdist: a new function for defining your own dissimilarity index or for estimating beta diversity (Koleff et al., J. Ecol. 72, 367-382; 2003). * isomap: a new function for isometric feature mapping of Tenenbaum et al. (Science 290, 2319-2323; 2000). * screeplot, bstick: new functions to draw screeplots of vegan ordination results with brokenstick lines, and alternative screeplot functions for prcomp and princomp with brokenstick. Author Gavin L. Simpson. * swan: a new function for the degree of absence (Swan 1970, Ecology 51, 89-102). * anova.cca: now refuses to do 'by = "terms"' if the rank of constraints is higher than the rank of the community matrix. * bioenv: gains argument 'partial' to perform partial bioenv. * cca, rda, capscale: can now handle longer expression within 'Condition()' (ordiParseFormula). Used to drop observations with missing values in unused variables (ordiGetData). * goodness.cca, goodness.rda. 'statistic = "distance"' was wrongly implemented. Now refuses to find "distance" in constrained analysis: distances of constrained and unconstrained components do not add up to to distances in unconstrained ordination. * metaMDS (metaMDSdist): gains argument 'distfun' to use other dissimilarity functions than vegdist. * renyiaccum: used a variable that was not defined as an argument. Added support functions persp.renyiaccum and rgl.renyiaccum (Roeland Kindt). * stressplot: R2's renamed to 'non-metric fit' and 'linear fit'. * Doc: Corrected reference to Hurlbert in diversity (thanks to Ralph Grundel). Updated references (varpart, renyiaccum). Removed discussion on t-values in cca from vignettes, because as.mlm.cca now implements those. General cleanup and better utf-8 encoding. Version 1.8-5 (January 11, 2007) * Based on devel version 1.9-12. * no.shared (manifest in metaMDS): prints thousands of lines of debugging info that I forgot to deactive in release. Not fatal, but extremely annoying. * capscale: inertia name as "unknown" if the dissimilarity object does not have a "method" name. Suggested by Roeland Kindt. * DESCRIPTION: license is now explicitly GPL v2 (but not later). Version 1.8-4 (January 8, 2007) * Based on devel version 1.9-10. * cascadeKM: a new function to wrap kmeans and optimality criteria for classification (Sebastien Durand, Pierre Legendre & Marie Helene Ouellette). * renyiaccum: a new function for Renyi (and Hill) accumulation curves (Roeland Kindt). * bioenv: bioenv.formula uses now "na.action = NULL" in 'model.frame', and bioenv.default passes arguments to 'cor' which means that you can set NA treatment in 'cor' using argument "use". * cca, rda: added "..." to formula versions to satisfy tests in R-DEVEL. * cca, rda, capscale: used to fail if called within other functions. Now data always evaluated in the environment of formula using new internal function ordiGetData. * anova.cca: checks that the model has both residual and constrained components or stops with understandable error message (used to stop with incomprehensible error message). * print.summary.cca, print.summary.decorana: have now arguments 'head' and 'tail' to print only a part of species and site scores. Suggested by Gavin Simpson. * metaMDS: checks now that the input data ('comm') is not a 'dist' object (like many users have had). * ordisurf: Does not depend on package 'akima' any longer, but directly finds fitted values in a regular grid using 'predict.gam'. Added pnpoly.c to find which of these values are within the convex hull defined by data. Results also look neater with sparse data now. Added argument 'labcex' passed to 'contour' for changing size of contour labels. Setting 'labcex = 0' will suppress drawing labels (by setting drawlabels = FALSE in 'contour()'). * orditorp: handles now vector arguments of 'col', 'pcol', 'cex', and 'pch'. * rad.zipfbrot: less likely to overflow to NA coefficients during iteration. * renyi: added a plot function, and documented together with renyiaccum() instead of diversity(). * scores.default: Knows now about ade4 objects. Primarily looks for scores scaled by eigenvalues both for sites and species. * specaccum: Added new conditioned method of Colwell et al. with estimated sd based on extrapolated richness (Roeland Kindt). * vegdist.c: More informative warnings with 'method' name (useful with rankindex). * DESCRIPTION: listed 'require()d' packages in the "Suggests:" field to satisfy more anal tests in R-DEVEL. Mention diversity analysis in the "Description:". Version 1.8-3 (Sept 29, 2006) * Based on devel version 1.9-2. * varespec.rda, varechem.rda: saved in binary form, because old ascii form gave warning in R-2.4.0-rc. * vegdist: added Chao index (of Jaccard type) that should take into account missing pairs of species. Checks that Binomial index is non-negative. Identical sites could have dissimilarity of magnitude 1e-17 after some standardizations, but now values <1e-15 are zapped to zero. * estimateR: uses now standard unbiased formulation of Chao. * renyi: should work now (really!). * metaMDS: with zero = "add", zeros now replaced with min(dis[dis>0])/2 (used to be 1E-4) (metaMDSdist). Sets number of tries also when this was not set previously (metaMDSiter) Version 1.8-2 (June 13, 2006) * version 1.8-1 failed test in Windows because of a wrong encoding name. Explicit \enc added for non-ascii words. Kurt Hornik and Uwe Ligges diagnosed this and led me to see the light. * similar to devel version 1.7-97. Version 1.8-1 (June 12, 2006) * Based on devel version 1.7-96. * Pierre Legendre joined the vegan team. * beals: a new function for Beals smoothing. * bioenv: added 'trace' argument. * cca/rda/capscale: accept several 'Condition' elements in the formula. * capscale: capscale(y ~ ., data=...) or expansion of "." on the rhs works now. Documentation recognizes now db-RDA as the real mother method. * scores.cca, summary.cca etc: rewrite so that is cleaner and easier to maintain. User visible changes are scaling by species standard deviation (negative scaling) for 'rda', scaling=0 (no scaling) for all methods and slightly changed output and improved user control in summary. These scalings actually were documented in 1.6-10, although I dropped them just before the release. predict.cca, predict.rda: work now with 'newdata' even when not called with formula. * anova.cca: new argument 'by' for tests of single terms or axes: with by = "terms" performs individual test for constraints, and with by = "axis" a separate sequential test for each axis. New argument 'first' to analyse only the first axis instead of all constrained variation. * intersetcor: new function for the interset correlation or the (weighted) correlation between individual constraints (contrasts) and invidual axes in cca/rda/capscale. (Not recommended.) * decostand: does not automatically convert matrix to a data.frame. NA handling more consistent now (thanks to Tyler Smith for diagnosis). Adds attribute 'decostand' giving the "method". * linestack: now really uses median as the midpoint with the odd number of cases, and does not give superfluous warnings with three or less items. New argument 'labels' to replace the default text in plot. The old argument 'label' renamed to 'side'. However, the function still works with the old syntax, but gives a warning if the old argument 'label' is used for 'side'. Returns invisibly the shifted positions of labels. * metaMDS: 'postMDS' sets now attributes similarly when called independently or within 'metaMDS'. 'metaMDS' forwards arguments to 'postMDS' except 'halfchange'. Change of phrasing in 'print'. Added handling of zero dissimilarities into 'metaMDSdist': either "fail" or "add" 1E-4 into zeros. * mrpp: new function for the multiresponse permutation procedure (MRPP). Code by Henry Stevens (Miami Univ, Oxford, Ohio). * ordiarrows: draws arrowhead only in the last segment. New argument 'startmark' for marking the starting point of the arrow. * ordisurf: new arguments 'main' for the title and 'nlevels' and 'levels' for the number of contour or their values. * orditorp: arguments for text colour and text character expansion changed to standard 'col' and 'cex' from previous 'tcol' and 'tcex'. * procrustes: 'summary' prints now rotation matrix, translation and scale, and honours 'digits'. * prc: new functions for Principal Response Curves (PRC) of van den Brink and ter Braak (Envir. Toxicol. Chem, 18, 138-148; 1999). This is a special rda() model with dedicated summary and plot functions. New data set 'pyrifos' to demonstrate 'prc'. * radfit: added brokenstick as a null model (rad.null), removed rad.veil (as it was a bad idea originally), corrected minor bugs in rad.preempt (which did not fail gracefully). Line colours start from the point colour in plot.radfit.frame. 'print' uses "g" format for coefficients and adds 'digits' argument. Added 'summary.radfit.frame' that simply prints each model. * rankindex: uses now cluster:::daisy when 'grad' includes factors. * spantree: now a method function with 'plot', 'lines' and 'cophenetic' methods. 'lines' replaces 'ordispantree'. The plot has a weird, new way of finding configuration for a spanning tree from cophenetic distances (unpublished). Documented separately. * specaccum: 'plot' honours now 'ylim'. * specpool: Chao richness was wrongly defined, but now uses the biased formula (error introduced in 1.6-5, correct earlier). Failed with zero species or if there were no species that occurred exactly one in the 'pool' (thanks to Emmanuel Castella, Geneve CH, for the bug report). * varpart: new functions for unbiased partitioning of variation by two to four explanatory tables in RDA or linear regression. The author of these functions is Pierre Legendre & co (Univ Montreal). New data sets 'mite', 'mite.env' and 'mite.pcnm' to demonstrate the functions. * vegandocs: new function to display *all* pdf documentation and ChangeLog. This really should be in base R -- this is a kluge to fill the hole. * vegemite: added argument to 'select' a subset of sites. Drops missing species from the table. Prints number of species and number of sites and the used cover scale at the end of the table. Passes arguments (i.e., 'maxabund') to coverscale(). * coverscale: added argument 'maxabund' to 'scale = "log"'. Returns the name of the cover scale as an attribute for vegemite() to print. * vegdist: now first checks input and then transforms (if needed). Thanks to Tyler Smith, * Internal changes: permuted.index acceptes NULL strata as an alternative to missing strata. ordispantreee deprecated. spider.cca removed. * Documentation: general cleanup in help files. New chapter on t-values in cca/rda/capscale in vegan-FAQ. New pdf document on partioning with varpart by Pierre Legendre & co. Non-latin characters now use UTF-8 in documentation. R manual says that you should not use non-latin characters in help files, but that was written by Englishmen. However, this seems to cause distress to some users of a US West Coast OS (Windows), but OK with mainstream OS's (Linux, MacOS). . Version 1.6-10 (September 26, 2005) * Based on devel version 1.7-77. Checked with R 2.1.1 (stable) and R 2.2.0 (alpha). * rda: negative scalings explicitly ignored and treated as corresponding positive values. Function summary.rda used to fail with NA centroids. * permutest.cca & anova.cca: permutation of 'cca' result now re-weights environmental data properly with permuted community weights (this breaks compliance with popular proprietary software). New default method 'direct' that always permutes the data instead of residuals. Now clearly faster basic routines, but re-weighting in 'cca' is costly, and permutations may even be slower than earlier in small data sets. The permutest.cca returns more data: constrained and residual total inertia, degrees of freedom in the input model, and .Random.seed used in iterations. Thanks to Pierre Legendre for pushing me to make this faster. * ordination plot functions: obey now xlim and ylim. * ordination text and points functions: a new argument 'select' that can be used to select a subset of items, and a new argument 'labels' for text used instead of the default row names. * points.cca, text.cca: biplot arrows will be scaled automatically to fit the current graph if 'arrow.mul' is not given. The new behaviour is similar to the default in plot.cca and in plot.envfit. * orditorp: a new "ordination text or points" function to add text or points to an existing plot: adds text if this can be done without overwriting other text labels, and points otherwise. * linestack: a new function to draw labelled one-dimensional diagrams without overwriting the labels (a primitive one, and could easily be improved: submissions are welcome). * ordirgl, orgltext: adapted to changes in rgl package version 0.65. Workaround for older rgl packages, too. * decostand: Added Hellinger transformation. Empty columns and rows become now 0 instead of NaN in most methods, except when the input data contains negative values. Warns on input with negative entries or on output containing NaN. Has now argument 'range.global' for method 'range' based on the code supplied by Tyler Smith. * plot.radfit: puts now legend "topright" in R >= 2.1.0 (which has this keyword). * read.cep: issues a warning if vegan was compiled with gfortran, which has a bug that may corrupt the result. The bug concerns multiline input with T format modifier, and it was corrected in http://gcc.gnu.org/ml/gcc-patches/2005-09/msg00126.html, but still bugs most released versions of gcc. * vegdist: new indices 'raup' and 'binomial'. Method 'raup' implements probabilistic Raup-Crick index and is based on the code submitted by Michael Bedward. Method 'binomial' implements Millar's index, officially published as "Binomial deviance as a dissimilarity measure" (the C code has been in vegan for about two years, but now I tell about it and add the public interface). Method 'mountford' will give NA for any comparison involving an empty site. Warns about empty sites or negative entries with all methods except 'euclidean' and 'manhattan'. * Documentation: added documentation of the cca/rda/capscale result object. Dontruns used more neatly. Version 1.6-9 (April 22, 2005) * Maintenance release: 1.6-8 failed in R 2.1.0 patched and R 2.2.0 devel (works in R 2.1.0 release) due to problems in as.preston. Based on devel version 1.7-62. * as.fisher, as.preston: used table() in a way that failed in R 2.1.0 patched * calibrate.cca: new function to predict or calibrate or bioindicate the values of environmental constraints from community composition (ordination). * decostand: new argument na.rm (defaults FALSE) for ignoring missing values in row, column or matrix standardizations. * vegdist: new argument na.rm (defaults FALSE) for pairwise deletion of missing vaues in dissimilarity calculation. Version 1.6-8 (April 18, 2005) * Based on devel version 1.7-59. Adapted to R 2.1.0 beta. * DESCRIPTION: gives due credit to Roeland Kindt and Bob O'Hara as co-authors. * documentation: updates in capscale, vegdist. vegan-FAQ adapted to changes in Sweave in R 2.1.0. * several methods assumed that input is count data, but silently accepted floating point numbers and gave wrong results. Now they stop with error with non-integer input: fisherfit, prestonfit, prestondistr, rarefy, fisher.alpha, estimateR. * bioenv: uses now 'cor' instead of 'cor.test', and does not give so many superfluous warnings and is marginally faster. Changed printed output, so that gives 'call' instead of names of community and environmental data, since bioenv.formula could not handle these cleanly. * capscale: has now argument 'add' to use an additive constant to all dissimilarities so that all computed eigenvalues are non-negative. This is an argument of underlying 'cmdscale' function, which implements the "Correction method 2" of Legendre & Legendre (1998), p. 434. * decorana: checks now that there are no negative data entries. * dune: cleaner site names. * envfit: 'plot' now automatically scales arrows similarly as 'plot.cca' if 'arrow.mul' is not specified and arrows are added to an old plot. Has now a 'scores' function. * goodness.cca, predict.cca: documented separately. * goodness.metaMDS: new function to assess pointwise goodness of fit in metaMDS or isoMDS. * humpfit: user can now give starting values of parameters. 'summary.humpfit' returns 'cov.unscaled' so that users can apply 'ellipse' function of 'ellipse' package to display approximate confidence ellipses for pairs of parameters (with Normal assumptions). * make.cepnames: No longer duplicates one component names, but 'abbreviate's them to eight characters. * metaMDS: Split to independent metaunits 'metaMDSdist' and 'metaMDSiter'. New function 'metaMDSredist' tries to reconstruct dissimilarity matrices and transformations. 'postMDS' skips halfchange scaling with too few points (with a warning) instead of stopping with an error. Prints now info about 'postMDS' operations. New 'scores' function. Improved 'plot' function with 'display' argument and labelling of axes. Argument 'shrink' to undo expansion of species scores in plot or scores functions. Workaround for a future bug in 'isoMDS' which drops names of points in R 2.1.0. Updates number of 'tries' with 'previous.best'. * ordiplot: has now 'display' argument, so that only species or sites can be plotted. * ordiplot3d: a new function for 3D static ordination diagrams. * ordirgl: new function for dynamic 3D graphics of ordination results. With support functions orglpoints, orgltext, orglsegments and orglspider to add graphical items to dynamic plots. Needs 'rgl' package. * predict.cca, predict.rda: type = "wa" with 'newdata' works now even when some species were removed from the original fit because they were all-zero (missing). Default now to 'model = "CA"' in unconstrained analysis without "CCA" component. * predict.decorana: a new function for 'decorana' results. Similar to 'predict.cca' (but refuses to give impossible results). * procrustes: obeys now 'choices' even when input is a matrix. Plots now projections of rotated axes. New argument 'scores' so that can handle other than "site" scores. * protest: passes now arguments to 'scores' so that now can handle other than "site" scores on more than two dimensions. * rda: handles now species with constant values (typically missing or all zeros). * spenvcor: new function to find the "species -- environment correlation" in contrained ordination (cca, rda, capscale). * stressplot: a new function to plot Shepard diagram for 'metaMDS' or 'isoMDS'. * summary.cca/summary.rda: print now call. * vegemite: can now 'use' 'dendrogram' objects. Version 1.6-7 (Jan 24, 2005) * Based on devel version 1.7-42. * plot.envfit did not plot vectors. Thanks to Roeland Kindt and Ron E. VanNimwegen for bug reports and fixes. * ordisurf obeys now keyword 'display', and '...' will transfer arguments to 'scores'. * ordisegments: obeys now keyword 'display'. * ordigrid: works now. * ordihull, ordiarrows, ordisegments, ordispider, ordiellipse: have a new keyword 'show.groups' to show only specified groups. With the help of this argument it is possible to use different colours and linetypes for each group. Further, it makes possible to plot results of logical comparisons (such as A1 > 4) by setting show.groups = T. Two user requests. * new diagnostic and helper functions for 'cca', 'rda' and 'capscale': 'goodness' to estimate the proportion of inertia accounted for or residuals for sites or species; 'inertcomp' to decompose species and site inertia for conditioned, contrained and residual componets; 'vif.cca' to estimate the variance inflation factors for constraints and conditions; 'fitted' and 'residuals' to approximate data by ordination scores; 'predict' to approximate data or find site or species scores, possibly with 'newdata'; 'coef' to find the regression coefficients. 'alias.cca' is now similar to 'alias.lm' (simplified version of the latter). Version 1.6-6 (Jan 7, 2005) * Based on version 1.7-34, but without still experimental functions predict, fitted, vif & goodness for cca and rda objects. * mantel: implemented partial mantel test (function 'mantel.partial'). Both 'mantel' and 'mantel.partial' should be marginally faster and not give so many superfluous warnings. * plot.envfit: should be more reliable now. A new keyword 'at' to position the bunch of arrows in other places than the origin. Thanks to Roeland Kindt for fixes. * rankindex: Default correlation now "spearman" since the older default ("kendall") was far too slow in large data sets. Should not give so many superfluous warnings. * summary.rda: Site scores were wrong with 'scaling = 3'. Influences 'plot' and 'scores' commands for 'rda' and 'capscale' results with 'scaling = 3'. * vegdist: Issues a warning if 'method = "morisita"' is used with non-integer data. Version 1.6-5 (Oct 12, 2004) * Based on version 1.7-27. Checked with R-1.9.1 (Linux, MacOS X) and R-2.0.0 (Linux, patched version in Windows XP). Passed other tests, but some examples in 'humpfit' failed in Windows XP, and are not run on that platfrom. General cleanup in documentation. Does not 'require(mva)' any longer. * anosim: corrected the equation in docs (function was correct). Thanks to Yong Cao for notifying this. * bioenv.formula: finds now variables from attach'ed data.frames and 'data' need not be specified. * capscale & deviance.rda: capscale was modified so that its result could be handled with step (added a terms component). Function deviance.capscale was deleted so that deviance.rda will be used. A literature reference to AIC in CCA/RDA was added to the documentation. * cca/rda/capscale: Small eigenvalues are made to zero and rank reduced accordingly. Most often influences 'capscale'. * cca/rda/capscale: Now alias constraints that are collinear with other constraints or conditions in partial analysis. New function 'alias.cca' to print aliased contrasts. NB this does not influence the proper ordination results, but only to the selection of biplot scores and centroids displayed. 'summary' no longer gives a redundant warning. * decorana: removes empty species with a warning instead of stopping with error. Still error with empty sites. The behaviour is similar to 'cca'. * envfit (vectorfit, factorfit): Has now a formula interface. Bottlenecks in permutation changed now into C functions. Much faster, in particular 'factorfit' which was 25 times faster in my tests. plot.envfit could drop names (dimensions). Now honours 'scaling' argument in cca/rda/capscale (used to 'scaling = 2' always). * envfit, ordisurf: have now weights parameter 'w'. Weights are used for the results of 'cca' and 'decorana' as default, or they can be supplied by the user. In this way, envfit gives equal results to biplot scores and centroids in 'cca', and ordisurf is consistent with envfit. Both can now access 'lc' scores of 'cca' etc. * estimateR: Abundance-based estimators of extrapolated richness, written by Bob O'Hara . * humpfit: Asesses now the dispersion parameter in non-Poisson models (summary.humpfit). Added a profile method that inherits from profile.glm, so that you can use plot.profile.glm, pairs.profile.glm and confint.profile.glm of MASS for displaying profile and finding the confidence intervals from the profile likelihood. * fisherfit: prints now standard error of the estimate. Added 'profile' and 'confint' methods. * metaMDS: A new function to collect all Peter Minchin's recommendations to run nonmetric multidimensional scaling: (1) adequate data transformation with Wisconsin double and sqrt if needed, (2) use of adequate dissimilarity measure, (3) possible stepacross if needed (this Minchin didn't have), (4) run NMDS with several random starts and stop after finding two similar solutions, (5) scale results with postMDS, and (6) add species scores with wascores. Function has print and plot methods. Function scores.default changed to understand metaMDS. * specpool: Chao is now based on unbiased equation. Standard errors now estimated for Chao, 1st-order jackknife and bootstrap richness, but SE of 2nd-order jackknife still missing. * vegdist: an option for binary indices, since some users believed these are not in vegan, although you can get them with 'decostand'. Version 1.6-4 (June 10, 2004) * Based on 1.7-12. * anova.cca: Changed defaults to beta=0.01 and perm.max=10000. * bioenv: A new function implementing the BIO-ENV procedure of Clarke & Ainsworth (Mar. Ecol. Prog. Ser. 92, 205-219; 1993). The function finds the subset of scaled environmental variables with maximum (rank) correlation with community data. * cca: added ter Braak scaling, a.k.a. Hill scaling, with negative values of `scaling'. This scaling should approximate Hill's non-linear rescaling of `decorana', but it the scaling is linear and does not rescale. The scaling is very simple: the results from corresponding positive scaling are multipiled with sqrt(1/(1-lambda)). * plot.cca: Better heuristics used for the length of biplot arrows, and they are now longer in general. Axes are drawn for biplot arrows also with `text.cca' and `points.cca' functions. * deviance.cca and extractAIC.cca: auxilliary functions which allow automatic model building with `step' or `stepAIC' (MASS) functions in cca and rda. Unfortunately, cca and rda do not have deviance or AIC, and these functions are certainly wrong and dangerous. However, with continuous candidate variables they select the variables in the same order as Canoco. * humpfit: A new family of functions to fit the no-interaction model (Oksanen, J., J. Ecol. 84, 293-295; 1996) to species richness -- biomass data. * vegdist: corrected a bug in Gower index -- range standardization was made to sites, but it should be done to species. Thanks to Brett Melbourne for the bug report. Version 1.6-3 (Mar 22, 2004) * Still based on 1.7-3, but ported some changes from version 1.7-7 (envfit, procrustes). This version was produced to prepare for incompatible changes in coming R-1.9.0. * vegan-FAQ: Does not show the vegan and R versions the documentations were built, because of stupid incompatible change in R-1.9.0 of the future. package.description() function was unnecessarily replaced with packageDescription, and to accomodate recent, present and future versions of R seemed to be too much hassle. * plot.envfit: Added option 'p.max' to display only environmental variables assessed to have P values less or equal to the given limit. * plot.procrustes: added option kind = 0 to draw only axes and functions points.procrustes and lines.procrustes to add points and line segments or arrows to the plot. Version 1.6-2: Based on devel version 1.7-3. * renyi: should work now (again?). * prestondistr: The truncation level was badly chosen. Now default level is set to -1, or log2(-1) = 0.5 which might be the left limit of the first octave. This is now a parameter, leaving the choice as the responsibility of the user. * cca.default: Removes missing species and issues a warning instead of stopping with error. Version 1.6-1: Based on devel version 1.7-1. * Minor maintanenance release to satisfy tests in R-devel. There was a buglet in ordisegments that caused a warning. I had introduced a trick to handle printCoefmat before it was invented to replace print.coefmat, but this failed in R-devel. * Vignettes included in this release. These were only in devel versions of my web pages previously. Version 1.6-0 (Fisher) * Based on devel version 1.5-58. Passes checks with R-1.8.0 and R-1.7.0 and compiles into a Windows binary. Many functions were contributed by Roeland Kindt (Nairobi, Kenya). * BCI: A new data set on tree counts on 1-ha plots in the Barro Colorado Island. Thanks to Roeland Kindt and Richard S. Condit. * capscale: A new function for [partial] constrained analysis of principal coordinates (CAP). * cca, rda: Can now handle cases where the number of constraints is higher than the number of species. * cca, decorana: Find now if data have empty rows or columns. * decostand: Added Chi-square transformation. * distconnected: A new function to find if vegetation data are disconnected below given threshold dissimilarity level. Utility function no.shared gives a logical dissimilarity matrix with values TRUE for cases with no shared species. * fisher.alpha: Should work with large sample sizes now (bug report thanks to Ariel Bergamini). * fisherfit, prestonfit, prestondistr: New functions to fit Fisher's logarithmic series and Preston's log-normal model. * make.cepnames: New utility function to change Latin names into 4+4 character CEP names. * ordicluster, ordispantree: New functions in the ordihull family to overlay a cluster dendrogram or a spanning tree onto an ordination. Weights are now really used with cca and decorana plots. * radfit: New function to fit Ranked Abundance Dominance or Dominance/ Diversity models with maximum likelihood: Pre-emption, log-normal, veiled log-normal, Zipf and Zipf--Mandelbrot models. * rankindex: Can now use stepacross and new dissimilarity indices of vegdist. * rarefy: Can now optionally find SE of rarefied richness. * renyi: A new function to find Rényi diversities or Hill numbers with any scale (thanks to Roeland Kindt). * scores.ordiplot: should be more robust now. * spantree: A new function to find a minimum spanning tree using only dissimilarities below a threshold or disregarding NA dissimilarities. * specaccum: A new function for species accumulation curves. Thanks to Roeland Kindt. * specnumber: A very simple utility function to find species richness. * specpool: New function for extrapolated species richness in a species pool, or for estimating the number of unseen species. * stepacross: New function for estimation of dissimilarities between sites that have no shared species. Implements both flexible shortest paths and their approximation known as extended dissimilarities. * vegdist: New dissimilarity indices Jaccard (finally), Morisita, Horn--Morisita and Mountford. Version 1.4-4 * Based on devel version 1.5-35. * decorana: Finds now eigenvalues from the final solution as ratio of biased weighted variances of site and species scores. The values returned by the legacy Fortran function are called ``decorana values''. * downweight: passes the downweighting fraction as an attribute, and decorana catches and prints the fraction. * wascores: Uses now biased variances for expading WAs and returns the shrinkage factors as an attribute "shrinkage". Shrinkage factors are equal to eigenvalues in CCA when only this one variable is used as constraint. Function `eigengrad' returns only these eigenvalues. * rda summary/plot bugfix: Failed with non-default scaling (1 or 3) when there were no factor constraints. Corrected a statement giving a harmless warning in plot.cca. * ordiplot knows now option type = "text". New simpleminded functions points.ordiplot and text.ordiplot for adding items in an ordiplot graph. * ordiarrows, ordisegments could drop dimensions (when will I learn!) and fail if only one arrow or one segment should be drawn. One argument was missing in a `gl' command in `ordigrid'. Version 1.4-3 (Luova) * Based on devel version 1.5-30 * `cca' and `rda' use canonical expansion of the formula and return the `terms' component. Functions like `terms', `formula' and `update' magically started to work with cca and rda (and eight lines of code would allow `step' and `stepAIC' to work magically in model building... but it's so much magic that I don't trust it). Some of the allowed things are now `mod <- cca(dune ~ . - Use, dune.env)' (all variables but `Use' in dune.env), and `update(mod, . ~ . - Manure)' (remove `Manure' from the previous). * `cca' and `rda' find centroids of factor levels with factor constraints (only with formula interface). These can be accessed with `display="cn"' in `scores', `summary' and `plot'. If `display="cn"' is requested in `plot', biplot arrows are still drawn unless there is a class centroid with the same name: continuous variables are still shown as arrows and ordered factors both as arrows as centroids. * Enhanced user control of many ordination plots. Some accept more graphical parameters (`ordiplot', `plot.procrustes'). New functions `points.cca' and `text.cca' to add these items into CCA/RDA plots (documented separately). * `identify.ordiplot' knows more alternatives, among them `plot.procrustes'. This was helped with new, very generic `scores.ordiplot'. * New functions to add graphical items in ordination diagrams: `ordihull' draws convex hulls for groups, `ordiarrows' draws arrows, `ordisegments' segments, `ordigrid' combines points in to a grid, `ordispider' combines points to their (weighted) centroids or WA scores to the corresponding LC score in cca/rda, `ordiellipse' draws dispersion or confidence ellipses for points. All these take a groups argument for selecting subsets of points. `ordispider' obsoletes `spider.cca' (introduced in the previous release). * Implemented simple ``deshrinking'' of weighted averages in `wascores'. * A new diversity function `fisher.alpha' that estimates the diversity as the alpha parameter of Fisher's log-series. Thanks to Bob O'Hara for the main code. * `summary.decorana' now in canonical form so that printing is done by `print.summary.decorana' and user can intercept and catch the result. Several users had been surprised of the earlier non-canonical behaviour. `summary' knows again the prior weights used in downweighting of rare species (these evaporated in 1.4-0). * rda summary/scores/plot bugfix: Scaling of site scores was wrong with scaling alternatives 1 and 3. * envfit (vectorfit, factorfit) bug fixes: Can now handle single vectors (labelling, permutation). Recognize now `choices' so that the user can select ordination axes. * Checked with released R-1.7.0. Version 1.4-2 Based on devel version 1.5-18 * New functions and data sets: * dune: A new data set -- the classic Dune Meadow data with the environmental data. * ordiplot, identify.ordiplot: New functions to plot "any" ordination result and identify plotted points. Intended to provide similar functionality as `plot', `plotid' and `specid' functions in `labdsv' without name clashes. Functions `plot.cca' and `plot.decorana' return (invisibly) `ordiplot' objects as well, and these can be used by `identify' to label species and sites. * rda: Redundancy Analysis, or optionally, yet another PCA. This is a spin-off from cca(), and it is documented together with cca. The only new functions are rda, rda.default, rda.formula and summary.rda. Otherwise rda uses cca methods which were changed to be aware of rda. * read.cep: A function to read Cornell Ecology Package or CEP formatted files into R. This has been in devel versions since 1.1-1, but it never made to the releases, since this worked only in Linux, but crashed R in Windows. It seemed to work in R-1.6.1 with gcc 3.2 (MinGW) in Windows, so it is included. Treat with caution. * spider.cca: A tiny function that joins each WA score to the corresponding LC score in cca/rda plots. Minor changes: * Checked with R-1.7.0 (unstable devel version, snapshot 2003-02-05) and corrected as needed. * Added symmetric scaling (=3) to alternitves in cca and rda. * Minor improvements and bug fixes in vegemite. Version 1.4-1 (Logan) Based on devel version 1.5-10. New features: * Permutation tests added to envfit (vectorfit, factorfit) and procrustes (called protest). * All permutation tests take now argument strata: If given, permutations made only within strats. Concerns anosim, anova.cca (permutest.cca), mantel, envfit (factorfit, envfit) and protest (in procrustes). * fitted.procrustes(): A new function. * rarefy(): A new function for rarefaction species richness. Other changes: * cca.default(): Handles now NULL matrices X and Z: skips them. * cca.formula(): Knows now cca(X ~ 1) and permforms unconstrained CA, and cca(X ~ ., data) and perfors CCA using all variables in `data' as constraints. Has now na.action=na.fail so that cca crashes more informatively (used to crash mysteriously). A more graceful na.action may come. Assignment "=" corrected to the true blue "<-" (used to crash in old R). * envfit (factorfit, vectorfit): Use `scores' now. Various bugfixes and should work now with single factors or vectors. * plot.envfit(): Options `choices' works now like documented. * ordisurf(): A new name to surf() to avoid name clash with labdsv. * procrustes(): added option `symmetric' for symmetric rotation and goodness of fit statistic. * plot.procrustes(): Keyword `axes' changed to `choices' to be consistent with other functions. * vegemite(): A new name to vegetab. The name was chosen because the output is so compact (and to avoid confusion with function vegtab in labdsv). Function checks now that the cover codes fit in one column and splits the output if it does not fit into used page width. Version 1.4-0 Based on devel version 1.3-19. New functions: * `anosim': Analysis of Similarities. * `cca': [Partial] [Constrained] Correspondence Analysis. This is an alternative to Dray's `CAIV' (package `CoCoAn'). Differences include formula interface, WA scores in addition to LC scores, partial CCA, residual CA after constraints, algorithm based on svd (and much faster), more standard support functions (`plot', `summary', `print'). * `anova.cca' and `permutest.cca': Permutation tests for `cca'. * `envfit': A new wrapper function which calls either `vectorfit' or new `factorfit' function, and `plot.envfit' for easier display of results in graphs. * `mantel': Mantel test for two dissimilarity matrices. * `scores': A generic function to extract scores from `cca', `decorana' or even from some common ordination methods in R. * `surf': Surface fitting for ordination, intended as an alternative to `vectorfit'. * `vegetab': Prints a compact, ordered vegetation table, together with `coverscale' to transform data into compact format. Other changes: * `downweight': directly callable instead of being embedded in `decorana'. Now it can be used with other downweighting thresholds or with other CA's than `decorana', e.g., `cca', `ca', `CAIV'. * `plot.decorana': new keyword `type', removed keyword `tol'. * `vectorfit': centres now ordination before fitting, so it will work with other ordinations than MDS. * Mainly user invisible changes in `plot.decorana', `plot.procrustes', `postMDS', `print.summary.procrustes', `vectorfit', `procrustes'. One of the main changes was that `eqscplot' of `MASS' library was replaced with `plot(..., asp=1)' of standard R (but this is not S-plus compliant). * Edited help files. More examples run from help files. * Tried to improve LabDSV compliance, see http://labdsv.nr.usu.edu/. * Checked with R-1.5.0. However, `log' in diversity not changed into `logb' (yet), although base is specified, because `logb' won't work in R pre-1.5.0. Version 1.2-1 * Checked with R-1.4-0 (frozen snapshot) tools: Documentation and method consistency corrected (summary.decorana.R, decorana.Rd), and file permissions changed. * decorana.Rd: removed dependence on package `multiv' in the example, since it is not a `recommended package' -- replaced with `decorana(..., ira=1)'. Version 1.2-0 Based on experimental version 1.1-6. Doesn't include read.cep() of the experimental version, because the function is certainly unportable to all platforms (works on Red Hat Linux 7.1, but perhaps nowhere else). Major new feature: * decorana(): R port of Mark Hill's DECORANA for Detrended correspondence analysis, with methods print(), summary() and plot(). Minor changes: * postMDS(): finds isoMDS scores and doesn't destroy list structure. * vectorfit: finds isoMDS scores and decorana row scores (which are uncentred, though). * Proof reading in documentation. Version 1.0-3 *`plot.procrustes': selection of axes plotted, improved scaling in graphics, control of axis labels. * `postMDS': added plot to demonstrate half-change scaling. * `procrustes': target can now have lower dimensionality than rotated matrix. Version 1.0-2 * Fixed bugs in documentation. * `plot.procrustes': Fixed passing `...' to graphics functions. Version 1.0-1 * The first public version. vegan/data/0000755000176200001440000000000012122046275012264 5ustar liggesusersvegan/data/varespec.rda0000644000176200001440000000406611522261763014576 0ustar liggesusers‹¬Š"Ivarespec.rda½[lUt·-Z^¥E(ÐR¶< †f®-Œ¢€QùðgY¶tu»]w»Õâ~øÇ?úÁƤ1!1öƒúa 1M Y"‚$HŠ‚¢(` gçœswÙÒ2ÉöιsæÜsÎ=Ï;ݽeOcÅžŠ@ P() Z?붬Äú fMµÆ)ÝáT4ŒFÒj ^eýfX¿óÊg¹ësóZò‹ ͘ý4—˜}ãТã»þUW¶›sàŠœßXkÃbÀæ‘9„utÌ×Ú—yôø®EQ‰p¯º¾™UGQ2|òð» ÷¤l9D}‹5=<`ž: ãýÓ¹ëŒ0`^¬´þZD­%¥%ª˜ü‰çìåw›#0a>j³/1øó‘ÎäóäóDN]É/Å<äk:Î_µ—Y)–âû•ÀXxõ(ê[¬QåÐê½øwéå”ðyàßüö)ð”.1«°ÄÄ›wÌV4—KÔ€þDÇÆ­‹r7Oƒ>;ÑíÉïEv¤•Ã`vÂýo@;zþ6ìÛj›¾;Z~ØD4 ~Ø•XxÈ–ƒìFŽ«^ÂKÐîÊ‘:«ÀîÌÇ 7Q‹óë¸íl®»ÇMªdæ÷HéüP>Ç8 GôK×s¢Ëü]ÒcñDÒ9ªòaÞAÿ!øOÄËúôéläǼ®Æ óâèñË«ÅóxîÂò'‡öý#ÅÙ±øcð°«…õ`þ[8þŽ7¨yÿ2ÆcÔ³XöáÂÁx‡ö4‘ÀÏà¿O¬MÜ•~rVó|hlñŠË!ßûÉ;‹ESB‰·.ú䇷1R^æþ|ƒâ–>+Æ;þºí ëŒ:È×y?‡õE%ä óæñ–O!ïn‚øga~.£¼ °ùÑEøâgU9e]4ÈâÕϨ§láúD¯d<Që&9Ïõ}ë1ôiâ­O?pÅ^gMñwŸUë-Þ2È—.>†Q¿¯\~>óh 8œ;?ˆSÀ~Ö¾ö±~rq»x) umãØÙ®O ¯Ï…ø$£|/ ͧ négvÓËòè}ÊOT?mƒõjX}úüŽÉ¡³/»süúün¬q¶€ßƒXGK{Ç1Ÿ/ ›@?.ùúT9eü¢¼±ã.Ù÷Uôwî?ý…ëø­KH>®Çbó7§3aùœöƒôpŽé—ú+Êg¤7zæé}Vwòx¥ÍG} ×~È:•ø&ºd/Ñ΂]ñzUg’ìKtq™ËçIü}¹O»âvïÕo?í~å±û¤†ùà—ÓÐ^îa_½ûæ…˜Ÿk°Âþ‰ìN4UAü ¥!..Àº5%^ƾ¨ÇVk1¬†8m^Æýøõ> íá.öOËÞ±Õü]ö¯(ÇGÀïìß(,Â>o)Ò«F:HW¬ši,æ <húübë´z|¯åØ _ì@þ[NÀØŒð:ÌO*ý·xõQ‹úkÆõgË< rLcqíC”a=MñsÖ៙Qß)ýû-Ö»æ-ìóë‘î«È×fäw7Ê÷V5Ào|ül"~*Å{1‰ä¾uáæ?°N¤º¦åýËše>¾‰újÂú šõ¡t®‚òˆJµ?•ë ²ù»j})Êp]¯h4q^ú;Å'ŠÃj½.çéÜ„÷õD‡ö“ÖeôýÖ‰®|Îé’>¨n¾Çú~ʽšz û"Éÿ¯¨?¢ËêdIw@=_ôÌy»9²¬¿Ìô8Äü‡FÒ;å=zŸø¡ç´O|ÎÏÇYßû¢Ê‘Õœsý¬ß!>ižäãûKrܯÙ~Ž”Ýž\rкwÀ?]uÆC´_ÚŸA&ùÙÏ-5îÉ‘Ûãõ\¼h»ò¨µçc½£÷EžùÞgèUïêöëßðË?¯K&ºtÙUß„÷ë[¯:¸Ø¾¶X;Ñž;höCK‡ËÓ;zþð+‡ô³ë®ï=…å`}•ŒG×Xžäù…ðΫu?§óòí9Ë¿žö¡©ë]ûäÓOŠî£®Éþ[é£<õÿ„~+ã,Õ‹}ªˆå3•óYŸ¾öcÂÎÑ®¨F~uçu…ϯ‹öóß ç”ÜÿðœÄe¿G5ý0ž»ê‚°ßÂïZŸöç¦ú]Og‰ŽïxEy˜ñUìwŽñîwuõî¸'ðˆ³^ßçÇjWž÷ŠŒWcÈ‹j½{[ý"ãÿcvã¿TþÿdR"ÜM[7³ðŸOr““[Ãq£;'pkGÒHÄöøZtŸ‘ ˧o‡#FGOÊ vǺÜK鉼%š6ÚâQ[¢]F2³×ùn&“ȱ¤ÑÑ™@°|K,b¤“ù‡£-“v‚ÉN¹Îöž¸…+Áñ¨‘Ž´K°3n$cq'ø^&á#y°ÝHdòuÅŒHþÝ–pʈ÷D¤æâa#œÚëSá„LwE`&¡¼éd`Ê îO…`[¬CANŰ=î÷vv)Lv©r›+©×VkK¢JKÇ`"ÖMàëѤ%.±\þfWÔAig4n„“Ré¯DÚÂ9£Šxû¢mN0ÙÞìujªóCÃi±5ˆ_Ú(ïÖÓ]ã:y×$ïÖJ¼Mr®QÎmsyzù7òôÖÈ;Z-HKå  … ÒŠAÉD(Ï„$ ÉeBÜo#ñpš´D´Š}á.Ë*R–‚,èQî÷?¯úœ,‚&vegan/data/varechem.rda0000644000176200001440000000224311522261763014553 0ustar liggesusers‹¬Š"Ivarechem.rdae–]h[eÇÏI?lKuëX•m¢Ò•&m’¦]—“¦i³µ1ÕµÍpYÚ$[júAS«®~äb:Ñ«©ˆWÂ@¼ñJðÂ+q W^õÎQ^8"(Ó=¿ç­9Hž÷ùú?ïó¾çd& –eù,_“íþÜe³Ïý³-««Ý¥mÛùÍâòåâªe5rùüzœÁëÏOÎÓСÁû3t½þ|ì„‘‡ #ȇ±C~ê!‘Õ½ú®YõÇqÞ~û(4`‰>4#ú~øhq¾Ü ¥Ô‘è¿8øéß…¦J÷gÚœ‰ªø/üÌEôØÅÁKÝû3ä5L!òßyBh:"ú)ôIúàïÍç7¡#µÆ:ò¯IœÂm±/ï‰ÿjHìK _¬ˆÒü¤è7È¿ú©È—ˆ[F¿ô§Ð¹/EŸ`Rô-^¥Kp ß ŸÛœõ¯ù†ðYÙGSGmTòÜžúþŠØ¿ î;I¡o}&òkÝç𮄯ý*|ÍFþ”ЫÔyé¡kí"ßð }‘ý¬õ ÎNLäo²?¯oKÜ·O ÿá¤Ø½!ûlê8ÇÜ>K¿Vz¥ž}Ë1OKÌÛü7‚7ù…àgçDÿòÌw‚÷<û˜f>¦‘G˜›q➥ÎYúŸ>$úÌ÷‚Ÿ"Îâçb—7s½q?t>cìß,ó=Á|ĉ?¡óÌþŽr>ä‘‚ç<$¡§©#’þÁ‹h=ô+A>Sðz(^Œs\SGœs­âŸ'¯~âé½”Õ{Œ~f˜o?um}"òyú™ƒ>‰ßæšØi¼åe‘W™³æ¬úƒè+èÏã_$¿uâÇ$®©Cï!Åa÷ ûÓÆ½ä‡o†ï…o"ÎùW…?HŸÃè}ðèãQúóœÞôc‘~—›¸§Ø‡^â9ÐäG¢W¯Üšúª{Çéqÿ¯ÜJr–Ìy} ~Æó]b£WŠÒyÀ3ðo…ªêÕ¿Ås07Ñ¿éóôÿýþ½Ò¿Qn_—¯ÞWj=×vë¾F-Z—¯U߇»~n—¥Æ<-äU÷œ­÷¥óµmYR‡Gëø”Ÿ*¿uë½i¾Vý¾[Cþéó±Fe܉¼ªæ}Ós·nûß¶•eÓï«MÏ…%²ô÷¯¶®Ñ†øjÚ¿­:>ƒ,Íkõ©k׉õè¥ûyÿÌUrC7?sçûW â¤ð¸’7y|Í-ZR‡LKtÆzüIK—t;æ(íñIæ †xâ¾?ØŸâL§€Áß—™º³„~.…ÃQÈï\ ËÇÿ¦-€Aˆ§lbQLCþ¨Ç–4ÄG§R‡ø×ãLH(àDÈ=Ô?òKèÐw §4-=罋£s=.4ðx¹ ”,ö¯) ›$ bè1ÿ@_ÂÌpáá0ï¡ÿCˆ“Ñ bîyî!(™o8e&9o0Î… ¥ãìÜ…·ÿ bª©?Ì%š>Õ §„1ÁbïR)oCL‚ñúƃ˜†{t‹D/¡ßsýl5v~ž"vegan/data/pyrifos.rda0000644000176200001440000003360011522261763014455 0ustar liggesusers‹¬Š"Ipyrifos.rdaí} |eE™owÓKzK'7û~“Nw’F–„ŽÝ­Ãëò±¸  4ŠÞ¤ÓIœ›{ÃMÒÁmyê0‚ûŽèŒ‘§W4~æª_¼ajÎÿÞäxb¼€¯Ä‚ƒ•ÁGÄV9®€ûð#C“×Õê'ƃÃ!v¹Íýîó¢ÎæKÄ6ú¥~©ç1þ;¯NdnºþYêzÝ™a‰º¿vzï| p$/õ¿•ß=6xÝíRtÙx‘‹°u¿Þ¶>Ýü•K`?Âû°h<×#HõÝÆV°—«ñ®?Ç#dÑX?åÔ?‹fª—Š„;üwpŠmucçß÷ëÍë]tuˆ†OÉöšžè5 ¶;XsDÍ›ºËå¸nö~Î-ùՉƛ¼Í;³âœ÷ˆ„‡¾¢‘ðNt ê;ä|žwÀAýQýn|Ôùzî6‘ vêwJ:üoý«¿VÒ]=ð(é|b]‰ àÒ]ǼË÷=Ó÷Ô|&¾¦®Ç}ßôÚ¯•ó?¾Ãá¿ÿ¨7}ÁŸ#ýÚv™Gh¼ý\€ü›ø"ø¸šŸ4|‚øÇàåp¨uE’a—¢Sâÿêyœ‡<?‹àü É½ûâo‹íÞrs.‡ßUu<÷a¾¯Ú'¼¨õ©žÖ⪓ˆïÒüW׉ï‰õĉpúTëƒG7^ª¼àùGXñÝ&Z'‰¨çо¢+ÉgÔûµáu'PJÊ'l©Ì—–z}0¾÷H¼÷ÔüeüóBûãO:|@~T|ëÿvZi~GÚßD|@Ó5o!g€Ï‘ü­úÕøcïFä}.§²y®ž#8U6…ùS¡ë°åk“O,÷wòåOùÂY*þ'6Ó:Oú)ô0Qÿ€{ã ?‹ÈYºþC~ßÁwˆpù,.år¡ ..ÄåÏ–OØRÌü¬6<€_”º¾ÞCz ×Û4úx­–OX~°rðäi¯*€}ò:Ö²Op;·içò‡Ò?`àöŸ˜òDÄÞ¬ô Òǘža’·"ú ÙÁ–s,ŸX‹vŠ­_ùÎÿRµ§“· æ°ý|£`» {öZÑð âKRïÐê?Zšßèø•h¸Õ3xÀ%vJ{×{Š•'”~|Á?þ½ |‘ó]øc`§?Rzó ¡]|xSíÑ}èqÔ¾²ûÖÝû³kºï¼(bÿevlåg<°óâ:úÍíÞ€‡óçG˜ð0{šzž+çÿê:ñmÕ>üe°»sÿü:lü<4êy¢5>;ï +ð¿é.׬÷öÛ•¿pí qdxWã¸áÿF;ð;p¿ðŒëxß=Ö‘þø6zŽLÝ:ªðÿü#ø>£HaòÃm÷zdeìdåö®”¾P(þãò}µ^a=×Å‹A®ÑÈ]ýIáx/.Eôz¾žü¨0:5éAüûÆ8 Í:¦õ2y*×§ä¬Kš¸ ÀÉ¿‹ø¬‹<ΆÇW@~Æuøi7‡Ç30î!yBkW¢~éä‚|õEÓ¸)øÑï<õ«ØòÎ#Õi·_«þŠJYWJ¯PXû†ø¾ØþPâWÖßaK%ð]®Ü|L+Ÿ0ýÔ´žèâ_y\–îº/¿…íU¾ÓžYèzÈã]—x^êl½Vrá#{¬ÆNƒÙøþm|ŠÆ>¥³ÿEäŸ<ãWÊm·;ïJ-çTªüP)péèªd~^Ð#æ#í?‰Ä¥o^š¨û[Ãöi5Ÿ`/†Ý(ñ·žá“ë…¢IÚKøü ®uæÈD«´ƒ.1.Vž°Å–ñ-“²TúÈ ð×X|b¹ÖU[lYQ9‚Ùá mvH­\Q,?*³]m ¹ÆÊ¶ØR¢õ:¶ý¼Àuwõ4Ë'l)Û<+õ>°rù¹WÚ_qñôQ²ŒÇ¤8¬å†GÅQ<‰ºÎê‘çñÛü ÏÁ©·È¸õ^Û›¼ü#‘vèyuÕuïGîëàÕ]gpŒ¿Ž÷,©óþëà*úûš÷uýŽûþJN_å‚ß8>¬ÝÈüX~¼I>Ñ{ºŒG#øEÙOÛ)~¶‡â[¿'ã´8ܸÞGxF;À{ߨüí½BÆ£%¯’ñbÉ~?¶{A~'ùa—Ú{H¾ßAñkÉ“dœ[ßd¼FïY2.­“âóúö¹‹÷Šäkd¾¡ä Ýî\,ºï‘õ¾Ë8šWê½äY²]À›ÜèÒº± DïM2Ï'+¯w?"ãxŠ·%¸#|€_Wí±ë€£—âù€'Œ }?2Ïû=?I9~û4>À ~{»¼}ÓÀSd<ÛY<ð„ï`|»\uü¬U¿ß.Šäí }þ]´KÏëø©ÇH÷uü¸5Œíz“Ómä9¾Îηôxþ=Ýúù.®óyƒ:ýæëœ?q_ò‰}4ÿö}Üì†y>Sì“t=0)÷ PüûÐE7pVìû Ì[·÷Í2®uïGå¼Ù·G¾?ô9™ŸcïSäïЫež±“)>kˆòº ÜåÅé‹¡-nxÇÓÄ)¥Ÿf/µ³¯Ù äÇŽû€ch#½¥ŒcÝGq¹Coq÷ûÞ-ã܆ú½„bèß 8ö½ÜË'†>.ÇeÅï;(ãõOÞ-óé ü›ËÖÄÐWeüïâ'ûÖË'(¾xà“2¿úµgVò™¡·Éx¿ o*†¶»Œx"<Ÿ|š„wàurÿ× ù‰ì¥}aƒÉufÏ…2®ócâ¡Æè;ôÞíŸÙ÷>Io˜?ƒ—Èxò¡«ä8 î¼Ïb_›h.¯‘ñØ{iÇ ­‡ƒwËqØCׇ(®}ˆÆ{ï“$_|’¤3ÐÑ¿AZßöRž»WJzÅ{çRûDÏC¯’󉿛â}´w>_®/}Ï Ç—cÝì§¼}½´_ Æëýî:‰7µ^~°^êÖAЉ’gÞ"ãåùú…÷wÓ÷{ôÜEïûe>M%Ÿœ"é Ï兩Vô¯—èräÀ‰ï¡ß»‰ÿ¨ö/‘| ëñÚ9©ÿrœ@·½4¯°ô}?À#äŸäá|’»ižønÿëå>¾¾÷Sœ¿jÆC£?‰=¯õâúýïÿß-áŒ<ßÿ¯Þz[Žîby0•ü&ñY¿iœbËñ„wU~ú^±´Ñ÷¿–ŒC×õ'"O$3rÉîpÞUu¿ç³^‡ãê}bÏþ°¼yŒäìhÃôaƤk??—û`Þtr#·cFðùó ïëÆ¿xr'—'ñkÐë#r›æ;Ú~²ßÈs õ 9šËËÝûšïsú7âAgWÁ{À«†®#ã¡_þ¿>Êëàs:ü2:1Ñ•vÕzCúðL×#Ï>è§xßã㪓óñËñ‘$¹‹¯IO‚Þ‰_N/ì{þ<§õ‰ŽþcêZ}*:a>{„Žna/ÐØû´xWë åÑÖÍ+>Oz/Jo£KòÛØöD }hûÍõÑî3¼’ÇŒv ´Ëç}„o]¦wÆ/´ëvL{¥vžjìQùâWû^Ìñ[1»fL{¬É.b²“ûýˆCgargÞvLÐCòŸä: ¹‡¯3œÿàû°ÿqzVr>é+J¡õßå×1ÿ°~ðõ ü ï3{“q݇½TÙ5 Î$훃WÙó`Ïeyð1Ï•Þ#åAÈ J¿ ûà€þÆõ À½öL´Çñ~ó_<~r>¢úMúçOeeöaýãynæô<óõUÙC¥ÝÉ8OzؾzÓ× uë?èŠë5°g3øÔójÜh]DZÃúŸ–^¿NOì¥}ãqùxgø\E7À»Î^ë·[Uñ:ÿ‘öz™üK…®CÕVJ…_£_Ú`)µß¾âðœ§ßä߯õ8«rÑÓrµo‹-+¤g…õ%g‘üMößþw^Þ¢¨\Cñ ð*»5â~#ý]Ëá§ {´’Çûe¾¨½–ü)ýäQú9é›uz~/ù9û§ÆåÿÝdŸÞûéW…ÜØG~”=òü/±ûÓ2ÿü¡À«f_Áuòçøþ'ò'öÿYúy”ß‹ðÔOßávU]ÜUÿÇÂr=àÖù—º¥Ÿ=B_\.Vx`q: ‡¾ÍÒßÇí¦{È?ËÆSkgEüÒ#)þ,.¿÷½Mæì'ý×ñÚGÿûèœ2èCÐSOQz"û,ÃH†õWÔ³ôù=°ĵOXNjK5Øc·OqlåÒ«LzRÑßí’ç.ãX>aËê×÷†ZBþ%Ë+“O,W?#vérÛ#KÜ~¥íg°ÅÊm1çíŠî³ÅËoWE©.¿h…Ð1~¦Dûí|±e%ù„q^žûÁ#ïÅÜW«µiîçk?ÊWÉ7~.ßyÛï§¾_ª¸¿Øß+±ϴϺTý)vŸ<Ÿ?ÕÊ'J•—À®{¶X=£úä ݺZîñ*÷øçOk,ž*n¾Mû½,(’ÎË?º´Þ?ž³ªè¾díWŸÜi×ýµÿUeÇ\.ÿdl;cû$ãêÝZyF·Ÿx•ùoK.ŸÆ•{Lö žWÊ0.yÛ/òÔï#ß_þuhiyÂD¿&¼ÅìGÞù'tã¦ËkY`ÂHÞÍBó Úõµª×ŸØ|=&¿)–¯,—<W?·euÊ‘ÅÊIF:ÆþŒ|ó ö‡¨çx¾$Ã~ð¸ú|¾ýŽë?Šëß[t——ÞQ*û¦.OU¹æOÜüÓ–†¿å^ßÊåo.7žK¦–Xï(×¾òÕª¿®šùkóWÄ[ŸŠÄSÉâ%ò´G•z[.ûDÞq,1íqÇÁ”'Pg(6œ³±Úè¹ä‰å‚¿TíUj|ërõ¯Tö [V§ÝÁâÁö9ä £=¦À8m\´!ß§îù|×½|óéÚ3×y^·ÎòüdÑüçáöó„+òœÆZ¨½)îu]ÞL-˜ìGÈ”¯¼n{‹•/tçóDúÉÎå1æãÖå™ÖœcW,ý—[ž(zÜV™=ªRäM+X¹ ’ä ‹7[*A.úÔ<ãáʵϩìãS>{窶O”{d¥É/%›§ÖŸR•rˆå¶Ø²vùCÈ5+?Q®õl¥âIKÇg‹-*÷U´¶ZåÊ•¢¿åæ¿«%/YÙõÃÊ¡›÷Î[,ݯŸXîùºRëÛj߳Ŗµ(OØbå6[*—OTû9…Ú§+e¿¤-¶Xy¡l©f>aϧ°ÅË'lYa¹`Ã}Kž/oËê§ ¿pÞ;‚Kýnû]iãJóì·éy~ßTÏÞÖwÝõÖ›x±Øâîâ;ðLàCýâzßõÞ6È9´SnúÐÁ«Æ»ö™W®HºUí±~ß£ï— Ú~oìïîÜûÓó±ßªß¦û—<7Y$ ôNïGÚŸ¢^×çí;ÕŽ¿¦Ÿ"Ñuû)µ—lÔñ ´+\0Ó׉¦GòÍÝ&Ú^ûôO\6z˜£ú^ã©/ùÁSoõ=tiÝØê>õW´]æm-ïô68«ùÕ"á áþp:6Ñèv>î@ šnKºZ´ÀýÀèî¾óÙ?»¦Gtÿ[ç‡j†T¿Úè»/}øŽsÞýeÑúß/ÙØzÂè¤}Ë|»ùÚ“7¨ïwžõÆWnî@õ³ÃýÊ‘?ˆFì¢Ýîmj|¨?¢í*Âõ¿ùlù^½‡öñ}Ô;äþrÑþw™›®¿ðAÕ®ÂÛ¹/¹‹ÚŸAÿº­ƒ€ín·“;žþ ÑBãŒû]IÉ“>øä£ÏíR÷Ñ~A/ß|ÌAä{~Úû½ÝØMãBô'’§ºÝz²hϾݽ î÷¸TvÕ/EÓé²xºo•íâ»êyºß“xžÛݧ¯Tøh½û–‡œ/©ñÜè®w]ïuX4óŠè=»ÕE×Éïõ&ì÷Ñ>ìÌã¢ã/=Lª÷0N þ&—|N¯;ÿ¾_ÿƒÂK·3zÎHŠŽÿy†[D¯‹µã÷(zê½Î\t<&é´ùߟë²èJ_çR¤høˆü~ç×å8u]á’ÅÉ É+º/ˆ.üó¿!Ú0>¿•ùK;0¨­èçÇä<M*Ž‘òYÑ8&®t°{Öj¾O€ tIã©æ+ðߎTí*þCt€vðð þÒøö_S| ïÓýh{ÿ$ñƒ:æ曂_¶§Úoœô@ñÀ xh|¿WøÂ/àl~˜ï7¹³ò²QÑ2ãÞîUðƒ®€_Àë¼xøn¤}ôüøÅ8èø9ú«ðÊÆQõŸÚœx|ß>¢™æ«úíufK"«Æó|ü  ül½;Ý:½·?ÇõV¬ÏôׂßoŽGø¢ý3Ÿ 7ðËÖ7ðŸDë¿:Óê¾ßˆ¶ÿëLë>*Ú<´-xŽð‡y†õ¯…æcËÂt¬àÇ}wùê¾S}Oáž~pôxÐ>Æô¡æ)]WôB¿75pt |Ó}&ŸÄµOpý£hy^'×¢ß}‡Ë‰±õ<õ§¸ÏGä=ƒ\ÇßËWOUô ‘+uíGä4Ìs.w¿(VÖ>ÇäÃBõE…o?õK‹‡¸ðëÚ×\ ŸNˆÈëÅÎ/MûÅÚ'|è_‚á…éçyë}\Ÿgø0éùZ|sþeàg¦ù›>™çÓ)äZ¹>”ËîR°½§.¬‡äM߆qæxÖÎÍüèß:z£õ$ò=Ƨ#tÆéY£óçòµÿ˜ÚQë;Ç7‡WÇÿtü ¿£¸üË× MûKŒwØŽià¿‘ûøtÄôb­ýƒÓn6á1^ó廦õC‹.¿ëðÃõÚ¸ßÓ­{1ß7®o|>rþÈéN7ÿµv3)÷ƶ³êÚiXšÿ)y÷Qçöh>ßøuÒ"ðp9_Ã'Œã¦ãW†ù§O‚ËÈoã¯3Kû;bòûØr9æ¿f½Œ‹ÆžÉ×)èõÑñ _Ï×.ù­•G5ü+6Ÿl8±ÞPð¼MKï£Õò£˜~ßž$õjmû½Æ_'Žœ0¹vÞs»™Æ/©óñ…À$W1>©ãoºy_ÙßÈŽ£á³ZzÒÙøøÁÞa¢“ørªŸX‹þú2ùÿlGÕ–°¿öÞæ7ÃúÀÖYÅßq¿½Ås0)~ÕB~›V²/w¹nž/}Nô^ë:¼ž&ºþÆuÌ|KÉm áÏ‚=Vù5ßâ˜Õw;=÷R‹‚¿cŒìÔäïÿÕȾíÿy^ˆê/ÙáÇm§ç“µÒŸ‰~ÁÞ~Cœx¿sô‡á:úƒ~¢?ÉH;:ùÙ#ë#Öå_‹Ú‡=XÉ͸ï./ß!ºþàþœ+ºáO$?,W¬»GŒ¿’ç˜_~øKáOäúÚǺ <ïÍäEu߯ð_0yJù™{ÈßÐé‘U­gå·'¿ Æ¡õÿ¿ìßé»Wt>$ý·|½‡²üCí®x•y“ºzÀ8^Ô1> W.ïÀŸ¿‡ò]A^\ð§(» ®Ó{¼}ø±1¿9}a||9ÅÊkQž°ë»-…È\ÒÙ?y\×s‰OíŽ$7h×w]€ëaZû[¿6hâ2ßTë ¿ŒØ«|ˆ_æï+? ³Ûaàý¥u6Ò/øÛ¹\·´Ü¤úÃñ¡³ûòëLÿØ1ur‡øàv ÀÏÖóHùw÷€v±>«øèñsŸ!×{’T;{øxBÎàv(ȧ\nüŠøô«ó_6º[w|z¡xîß`qJ^ƒ¼ÄLJɭþuzÙ£´þ|fïXÂn]Ry‚ÛY Õ›Mþå²­³û”µ;,Sû%Þ'°Òv™j“'–Žë––GJÖ~™ùˆÕ ð78n¤èö5rVéÖ íþ†’Œìp–OØùWÖ~â%mY%ãÈãRX|cäz]غóÂÚ1-\ÇíJk…ïVýøkâ8 OË'l±eÉ¿Øiª+/¿µS­îñ+³Ó–ÒØ'ü¸gfoìj÷âŠ_¾[ýÝç•ÞUàþJíóÝ2Ÿ@\¾[>ïqÍ\m"IûôMûa ~)í{ɧyŽÌBåKmü8âoº(¿DÌý­ywG~ödÑzQ~ûÿ(oCìöóÌ?mÙøáê³3Y½Ã[¬\\>¡[mY^}5ö>Ò|÷›köO–~ÄÑU¸~‰cFœ3â¶xüË+÷÷Ø>Õ’÷pkòCøqpZø—ä–Øb‹-ZûÖÚ¦å{1ó1éã¶)ÞU·ݰÝTg…û±9<º}ðlN\¹1v> ¬»†¼…ækЬ#Ê'F»R¾r ‹£*6/S$W›Ì#g¶ò…éðÁòA ·/`?ÙsBùw‹¥¿°ør-ŸÈ3Ÿrìë†8ISÞ‹‚ñ«ò„å]ã¼ióÌLgÇ…·Ð||&þªÝ_bÊ»ÆósêÞGû;_l¾_(ŸÉ7¡ïZ;2Ïë É ùŽ.߈fÿ“ŽîýcžWû_ÀïLz„ÊÿIßãã‹}0œ/ëã]ó²cÆÍ[YèüÎ;ï{¹ôèrû¯Ë¾Üû0tú¹.¿Jžù”´ùJ%Gq9R“'†Ëw±çCÂÀïxûº¼¡1÷9šÆ_‹ÏørG,ûD¾ù=ó·˜yhÖáO·Ïv(Íú•;ãåÃ2ê'::ÊS>ì4ÈãyÇWjòRjñÌó}ëø~Yþ+•OB7?ßÑïI=Oy/|øÂù"ý‚ÞËö¯jñÓÄÎ/@žü*ßqxÝ×ÛÇl:‡ÃpßÈ·˜ÝZ»^ú÷­_tÖãUkç^ÓvL[l±ÅòiŸÙ†sH(ÿò–á~'£×Iç9á¼&e—Á¹YäÀùZɇäyG½2/[ò˜”›’$öÎx‰äDò{2?Hò½ƒkDï2ÏGòãò¹ž¿÷|I²÷ôµJ8»¯ñÉsݩޥòšuÒ¹_É}2ìB^¢“gˆî?Ó9'$‡&Ï—çB%ŸÎW—ì”÷».‘ðt4J8ºè;½O¨ÞûÓÅÈxRž?_~¥óxºÿÊøçü9ÑMö'üÒyl"ùás‰ ¶³s{`¿êy¡wn•z¾›òÝ%ûé\):ÿªë¯%<ÉŸxùæ¢ð{Çwõåy×9®ê:ðóÒÔ99„?:—-Ò~§÷ZÆ-ïªÎ§Â¹m­7Âg'Ñ¡ÊúðשïõP>:º®ì†ê|:×§Ç¡‡¢UÞ<œCÄýq,®RÑ?³Š.ÊãØKy“t®X÷åya=¯òÎóõ^‚KŸÄæòBªsàˆ{3ò¼µ>š? ×n:' öu^Î1"½ ô„ö}ÿÇ íÆß"ãBLç(äÝž._·[Eóÿ…ái ŸïWn~n²Ã›ìV½•ŸwÆÏ5DÞIè©tU¤=:_5êbçIêü Mþ"ž×Lk1œû\&Ýx2¿š7<‡óŽçó7øS|»A¼¼H*/YÌó…bûâë׫Rï°úquŽG©ãLm)±Þ‘üédÇí¢|‚I’ó’÷8ïî[~%’?óäe‘$¹=Iy³q.lrBòÝ$é'=Ä—{wË<Ò]ß—òälÈw½[Ýå饢·ÞýÀE¢çW®ùúr‘¤ó“¯–rPòõrïuÁyè¢çù^òCžÜ¯òI·Ów:¿+õ…Þ'I¹ òΫMÞöƒàÜÈ䇥ž„õ"¹É=>6!:)Ï6öƒA¯ê•òs„®“?Ÿ·‚õ5)õ!_/ <Š2nCtœ y>©ñ't×yçÛFÖûn¶žA.G»Ë•!Ç3?á7òÝyn®/w¾?ä1¬ÇI:oï' ¯ÌÓ™’çJCO„ÜÓNù¯)NÊÏwIô…s“ñ\;å½ì¡ñ?è­DëÕ9­8g•ÚÃ}y:‘wùÓ;~!á]á¼`äãL>(ó©wÐýžG¤þÕö y¾*ô äûîW»'.+=±ësyßýôø¢:§çdžÏŊȹÐ/ÑôFèɉ¥íå&yS]Ç÷¡¿ÂO†ïéò¢êü|ÝBû Ì¿Œ¸Å<ã”#x‚ßz7âû'^¯âò/Õ.ôvÄ#¶=ñ•ÊCýUûX¿ÕzKí@ÏnÿŒ¼ŽsÊÔù°7Ðyd¨c¼ºN‘~wØ7hÿŽ:§ðÀ¨ÎÅûŠ[¾ªú‡sÕà÷¤ü:êü0Ðì5°ÿ Þö¡ö~°Ô÷`—@;ïªÚï ÿ¾úÙÿgë açïÚÁ·{_)z´|ÂêÑ«åÚ±R~·RÛ÷¬ÞQØ:Th܃-¥¥óJ·wÛbå +çZ|ZýÓò [ìü²Åò [ì<´¥²ø„¥7[l±|¢RÖ½eË7]áq¢ån§èýàî{+U^ÙÈõ2çó/×ùo妓Øvd3aÇÇ[,Ÿ°|¨²õn»ßÍÒM!|"rî5?GœŸ'nÈŸñãÜd´Ûàó¼Y‡_øñ‹ó¬q¾5÷÷À…÷t~eýÍè¯æßÕœs®#×u~y_›ð£Ãg¤ÿ ƒqCøœrÞ]¿Tûtޏ ?&ý#Ò>£;-ý$®t¨ç¬Õ}V7ñøvY^ŒãU}üÅãùÆ¥ðyf´ëèYsþ¢Ö^Žsî½jÎÏD‹)~Å—"rŸÁmŠ{§á˼ý|Ûañ;Úñ+0o‹1r\>ÁúÅñ©=w¿x^ǧ5ãW¨ÜU,~ª]ï(u^¥È|ÔÍw.¿”8®½àùÀ×#jÖ]#ÿÑÌc¿‹à9ÑåÉ3þÃø±z.î|†<—`ãˆvi}Wßkô? åËüzóµ'oØñôOˆ¦û·9ûÞû#ðjú£•kø¹ÆÖßY•ö‰Õ÷f‹-–OXû–-¶¬>Qn½ÊîË2À¿Lþ†Rå‘Õê=Ì.Q¨þ¯µ/Cÿ€Ú$gìÚöcÚ5ò>?6_ûu¡ûçŠ<Çi‰ëË*OØuØ[V±<ÿ$·û4,í÷Œ¬#°[q;~›ýŦr·)EóÝ·<ôöÛO-ë7÷?pZ‡òOÀ.†çð‹öQÇz*ß§«ìs?mCx]Š~ŸÚ…?¿ÀOÙÛtë"ÙUí1»¬êì‰è/®kÎÍø•}‘ù 5öQ5î1×3·ÎîÌÇ þoƒÝ–¯ÿ‘qVöQÂÆ]áIcGæýå~vNïÀ‡ÆŸçË3KO;.œ^òÝ—ª•Z~tÌ-:¹"‚n^£ô’'V½üÎè¾ òײèVîªPú*ÐO²Zâí­Ó«WÚbù„-¶¬>\â¼c…ò‰ˆ>ØÖStö‰¸òt¥áÕÿ¹ÚÖg­ÃÿY2x¡çÃn@zxÜñ9AÞµòâYóÝ¢óY™â†uv¶ÂH¿;·óDì%ñý,VžXËëS™øøªËGcõ¥¢ôŽRÅkkíÛ厫ÐíoÊwæqÕ|ÿ[/ŠÎãZàþ m{ðËpû~ã¤gà.ÚÞÛæ‰ g‹–w~úø?zH´ßiî¼/ˆ÷3Çï‰à£µaþ“/zÙŸtûóT~±Îïº+ ò´zfýc¢çS³ï½Û™Zy@7ïc]mÆg¯NdÞäû[È/Õrä÷_ûvóµ‘öá÷2ís¼-w>ûg×tßéÇéÉ»ÞzóEóÙοGþ ü §öo>öðç¼G4Ý&Ÿk¡ñãû›pã¨ôò[4=Oâû_h¢ï‡aqöÑ<ÂVž°Å–j—íyå¶XyÞ–Ö;l±¥"ø&O…Å̲ٟ–…OT{¾$›Ê–XtÂí/¿Cl¾YèyD1ϲò„-Vo±ò‰Õ;lYËóß–ÕÍ'ÊÞΣêÖê8¿\ax(?Ý[yÂ[*œÏV?´|Â[l‘üH÷_*>aõM[l©êR>Q`þòªáÃ,ÏŸOœÏ¤\ø)UÞáØùQJ|>`©è#_xKe÷(W¾ Ó9e´oX½£}Ñ[JJ_•N€=7Ћ[,Ÿ°óÇ[ÊÊ'òÕsãêwÅê%ÛoNžUsµôù¡yÛø9ÆóûÁó÷Î -T~æçÏéF—§Y“Ç·Tv‘È9‡šºz¯ÐøhîçdçŪë-îpœÿÈuì§üZü˜ò2iò‰†¸/>^n‡•ª ?•Š7ÝùÑËE¦óFŒû%(ïDÞí›Î‹Eþè„áN:¿1r½MæÇÐñ/«wØRIüÃòõwßÎʶØbK±ö [,³¥è!þþïªâÜžVª~GìyžÛhçs‰í%Ž;QöEuΜkÕ»l4o{Ëo ½>ò\vÞøy¸OÜ~±ø+áüª*yÂÎ[[l©"yÂÎg«?U¢ü³|û´«‚O”\^äþjË'N8Ÿª?Úxƒ¼ó¼Ñ9Ð;0¯IÈ›™R4ÿ»ëVVyïYÜLä}Íù<½šŸÌüŽüÜcÝ|ÑêÕ<.†ŸÁÏÁÖÇG„ÛÆ³X;¦-¶X9ׄË'l©~º‡øä£b›ú쟋-À£×Í^±•Î›Û }ÎiÛîëöÇÛÎt†ë=õq@lsn:ˆz÷nß½ ¾]tNZ-½W7v¾Óâ£bû)ࢮfØéù·ÿ˨7@bÓ›Ýò±EÞWøÚLý«{­;í‹u8ßõ7îmïÛ¯NdnºþYbÛUòœ·­„‡Äg–Ž“ÝøC·C-¨~Œð¿ÍµW—ñ&êþÂíÆn±…ÎÍ«øŽsÞý¥Ïþý½Žª÷jÜSú.­ÞUÿvlôR}/Ap×I|×n—ω†-^¿ñ¾jç¤Wnîà´ÿ{?¦óér>Ôx×?ŸÎ#¤qÆøîpFÉyDÔÿ¥7n‡'zÞNûjå}õ½]î)€³ïµíÞ„¢æ|QbçNw”ûµG¥=a+XOã´‰Þ¯O=õV‡£ˆZüöw‰íî1†w@Ô}ÏûØEðÕïã¼|uÏ|q±ØIï×ѹ…5yž,ê…‡P±Ë…bïOÅvº¾ýyaý6ì§v=öÖ(êhd‹-+Ç'Ö/w«.ù*ëO¹òd¯”}¢ÔûÀ´q\ÿ1ä7åAäcûåŒvƒÁ×ÏŠÜGZ®øjÿQ¦¸örÇËëò9•ê¼-}jò6ŵ‰Ä•®£÷Æe›Ç<®Z¯´VõŽU^¦)o£Õ*rü ÎO`Ç3ŸX©y`ÇÇ[*—Oøù—5ù7uò óãpù9ò|rh$V3¾Ù¨ü·¿~—Ùï«ýn‘þL£^Yaq1¥¦ó ^O­¿Ã[¬<Ož`ûT<öÛ´È}'~¼ÕÕólÿˆÚÿ#íDê=üòöásy~qµ ߣø”Ⱦ&<_|ßárÏ£†}?ȧ†û<ÿÎShÀóÏóâÿùzÂó#(8[Ø9 |¿ú¥9gC+Wáyà_s¾CdŸN~ÒÉ— LŽ4äeÐÆñü0wÚç‘'1ŽìÜ”>AG-3r“—EkƒÜÁãÞ°Ï øý¶Ñ~.w¢}¾±ÛÝ=‘ÈFè§™ö£ Ÿmßû™z¾¦ŸfÚÒu…Ü78Ú‡eÿ“´o£e½·ÿÆ÷I¹ÿFýtÑ~5ˆ¾;i?‰‚Ÿàì¾×ݨsQ nËÊ+°îÄ•ŸK}îÄJé#e—ó õœ;t/;›õÔL-ÍÍÍNŒ£>–ŸÊùc[“MO¥&æÑRCîÙìø< ­™LÏMggÔó©ôdzjBWÍÔÄØÑ¹ùÔ$z67;5}T¡ &•™[8žõOåf¦Ç*pRóSãÙ̼ªOg¦ç'üúäb.•J-¨ÏMÏÎÁI/ÎdŸ÷ꩉ¹¨Ï:“çX ýÙôXj<›Ë¨zvv1•™ÑÔäRG§³Çʽú섚Ú5ÇSéãAøÝúìôܸîñTnZMÑšÉÔÌÌìBÚïÿÜD:uù‚º?›Ë:ü(§¾?žM§'fÆúÇS™©l.¬§Æçƒõ\ÖÇϸÃ9ˆçƒõ¹éÕ¾ƒ›©Ì´?>é鱉tÚ¯;c‘šÌë¹é£ñp볩ÌKBõ…ŒêÿøâLj,›™óÉcn6=Éës©)L«šLv>;™N-ë3©ñP=;–žÖOûøšuFÓyÜ߉ÔÌtF½?7=éŒàÜ|°~,•Nësó~{n=—ò§‡3‹Çüñ=êàg|zî‰úœžIùïO¥ÒÎtÉ Ö¥SǃõÉÜBè~°S¹…±Ü„ÿübêε¿>™ž]˜óŸ_œZ ÒëÔ¢CÑéT&XÏ-øý™Zœ_˜öY”W?>‘Sã•NÍNñçàÛa‰>üÎ"•™´77í sÁg©±´Ãó2“ÁºÓ¢OÏéùTf"§Ú›qžžõù]ÍLvÖa.þ÷gsG§æüû³Îd?À÷øÔt.› ŒWνª; ËÇÏQ—» |Ï©OŽûôèÐÓ”Cã¡úñéù¿˜˜Ì,ŒëGð§æàÌOþL§g§'ƒókbn|ÁŸOçÏú23'æ‚ìzvnÜáX¹±`}rΧ·ž;ªÏúëÕç¦ÓÁz*зú~*õ‚Ð÷SÎxùòGͼSÏÆã%ìùT&;œ¿ã³ÙÉl€ŸL¥œùìϧñ…qw¹Øï·?–Êè+5yÔ™S9UwV/G´Éùü&—ÏMøôîˆGƦƒõÙéqUOOŒ;Ü6ÈÿÒ ¹©ìŒO™T*£„¼š™E‡à^² ÖúVíeöŽ-øôìÖÓþ;¬%56­ Ÿ³Y‰ÏTº5—½âÔ dú*zaó§î?u|8T ÕÎÕö‡j£¡ÚCµ¡ÚÁPíVsùõÓÃÕáp5ÎpÔá¨Ã!P‡C ‡@:u8êpÔá0¨ÃaP‡ n¹âô ¬TewÏW÷‡«£áêÃÕáêÁp0×§³ú0«°MW€ö*¡;g+ûƒ•Ñ`å‰ÁÊ`å`°rH¡9¢¬ ‡j>#AðF‚àÁ ‚7o$ÞH¼‘ x#AðFBà„À ·?Þþ xûƒàí‚·?Þþ xûƒàí‚·?ÞþxûCàíw0ÞÁ xƒà ‚w0ÞÁ xƒà ‚w0ÞÁxCà Íîá‘àì Îîá‘àì Îîá‘àì Îîá‘àì Îîá‘àì Íîá‘Ðì ƒ:u4êhÔѨ£!PGC Ž†@ :u4 êhÔÑ0¨‡B  z(ꡨ‡B  z(ꡨ‡B  ƒz( ꡨ#¡•h$´„V¢‘ÐJ4Z‰FB+ÑHh% ­D#¡•h$¼„W¢šJa[#ÝÌaE]OÏn;êˆ0§Ë9‹­S{ÜýûO4aü%övegan/data/mite.xy.rda0000644000176200001440000000064211016553773014362 0ustar liggesusers‹…”ßJAÆg×Ä”,1úgÕû½¨/¢èÊÛ¥‚,P!½ë5ê |„z¡®ºò.‚  £ˆ¤Ðfw¿o`OH;ßÌÙßùΙQöp¿º›©f”R®rSfN˜åŒk&G©\ÚhªqÒ®y®R‰ÅSjÞ<ºŒk=TáÐï{áПõpTØÿÜã^÷"¾áŠÊ<ËÓw xqøcÜæ³r²ú“{Á~÷µqößûé'äãüÖŸï™7÷„¸=¿8åÙßHô7}¡?~äx~GÔ‰{뉺̣¯ìcÓÇÖç·ÿ›¼§> Þ#üžq¯È÷ý¸oäÙ'ïê"NM¢ÏišBÿ³È—:‡ß9 ~<5‡:Ô<ø<ò©Kà¥.ƒ§® Î4]Eÿt þøÐÇ:|6Àm‚£n§nƒ—º~š‘_D"êSKàJð+ƒ/G¼ø%ÏüF­e¹èc]‰ú-â fŽý¶ïÕ›ÆIàéæù…Ç Ù Â¥™&“É­‘qðüÍl1vegan/data/mite.rda0000644000176200001440000000401611114223640013704 0ustar liggesusers‹ÝZyoSGŸqB.á JOÑæù¨ªª‰’È þtC –œCNP¡_¯ß§êžß¼ñðì8! БÖoÞ^¿ÙÙÙÙÙõ«>| < ¢4¥ á7Øl:ü¤ˆFúùe»~°E”ü­Î…ô(¤Ñ÷mByH“!åB—|æ¹£‹!Ý骼R>¤¾ú¥þ”夯qyIݬÔý>¤ Éç¼;) à=¥D6’:LƒÒ4 ïiÓ^Æý>ðž—:ãòÌ ^VÊ& úÉÉ83ò,˜÷¬yö nÚÈ Ù­LÈeݲ&Q§ü³$Èoõ3B-Ù$Ÿó ’ ¶9Ì9l"#íú¤-ô‹9á²óòŽ”7}²=±ÙrR‡iZú¢xnlÿiû5Åv;JñüŽH?CòÌœ)çþÇ(^'ÜÇ ÑOFÚbîû%¥MÊHÞ9ƒE¦í½ýÀîSçK!è‡åÇœÚõÛH²y¿†þýøñs>ÆŸ6åGÕIÊ={©ÿsÚ¾ ú_€&jßK°žr¯»fð޵»ËšþRÔ¾§ô™>m>ú;Ÿ ï}¸/xþ$É®¯“ÀHšÏN6qÖkö8¶fõó1ýôJÞGûØÄR–:S’α‡ø¹Î¸:°Û”icíõmü“r}pŽ‘ÆMÙ yrÞ%‡Ã{äˆôÉeSfœèc4aœX³ÜïeÁ½Ýa|¶¯ù1êÝgÇ6­ÿA\Éãäxb„>ŒóFĘ7Kqœ y2†ï$_¿<»Ù˧"k?ðÅD±2±¾OYß œ§v=ôQ¬C»¥¤¿§¥ÝÓ’ïdc*2˜>ËQw»±kñ(ìÉž¿.PË&ØfoHÇ’C’ÏöÄç¦+ÔZ ãÒ†Ÿ—(Öá””É;÷qGêLH› "bЂԳ6GÛ§§ÓÞ×½~XgKð8oPk]©¥‡ÁÁY…ûz uq6”>y/ÿ&¤kRvQê¤^ŽÚ×n^ê0Ž=ÓdL];N¢8F±þç”!SÎ}-‰ÜÐdy¯ˆ¼|¦aŸ9.²ó8~ é7‘ûºN­3Ûטô3-ú…gÝÝ’r®I°`¯Ìߣ–]MJyÚÈ„u Åú¹*õR"ó ÑÑÅë ºÂÚÆ3%ãÇ9nÊÔlè' éï^„Ô øìºNÉtâ¹ÀÙß’½£°<‰^"Šçë6´Ò·!Í…ô#µæô…è¤D­µÎxe‘—mšçå®Ô¿ jéwBøYŠ}Í0ž#à§ÿ¡Ö\²®'©ý| ?ku= ö›6uF)ž/Œgië|¹÷¡ ›VtXÜ—ÿt’÷~OHò¡öï÷0»×áiù,}¨;´÷ñ„Ÿäy\†Lw¨gûá2«Og룽lÛÞÆ§ {¯çuBÔn;àqwtÔ3ëa”d³¾± ôS0yþ‰wø$ø ÚzYóô¸Ýì¹Ó^þ) úaÂ~ŠñBgЛ·}¯ûNq^/s–>ç(dõ“§2ušótBÝ“¤^û>êd/ç0ÿ yì{Òy¨?ÞM†¤3G§66ÎñÞxÕÕõrf]9ìŸéZ‚<øÏ>ƒó. ß‹ýøþü>àéK»cfê4f«{îìÖæcp­]&Ù’õmþ~7oêÛÿMlÌñ_7Ylß¶ØÎFV?öéÉîÏLØ-VÒ¾Õ‰>WŸlÉë‡ÇŒ³î508"î±çë·ì½5QûþgÏI÷6ö8ŒÎB¿Iþ‡©ÓžåïF“öùãÒçhOV?Iä÷+'Å’IãD^6¡^Ê•£o¢v¿âeññE·y:®îÓíÛãÛó“?W%ÉÕ«œŸ‹-õ¢K‡·àÊü^ÈO¾;ÀÝ'öI““;Æ1I—EÎiŠ}ßoð½ßÕqLÃw7ÃRwZÞÏK·)÷åÉñî-ñÝAV0ñDžâÿŽ£ŸãÌo’Ú}úLŠ =Ù{c®Ç·Cþ|zRÔ-nÆÓÆ&Þ¿$íiˆ{’þ7Cø ãê7í“æÅaë¡ÌÇÏ'IIãôñôób ïóý= î™ÑWÖ•Û8’:Ô±²xÂ>rZú9-ê¶7ZÞþ”såv=²¿dŸ3%mnRüýÀ°ûö.·SÛÞÚ§–cº%™ùÍÚæë·øÞÞìm5v÷ôýI}§þª±½£cª>} å¬-Ï=ŽÜ€Š:ཽúv}çM,h}»ÖØŒüœo6jû˜sd¼¬ÔîþÙ æàª÷7wÿºkÍÿí¤fÀD`Š`J`Ê`*`fÁÜs_˜ôÌÏÊÍ()WT®¤\Y¹Šr³ÊÝSN1"ň#RŒH1"ň#RŒH1"ň£¨EÅ(*FQ1ŠŠQTŒ¢b£¨EÅ()FI1JŠQRŒ’b”£¤%Å()FI1ÊŠQVŒ²b”£¬eÅ(+FY1ÊŠQVŒŠbT£¢Ũ(FE1*ŠQQŒŠbTc–1þåô“×nÛŽ,vegan/data/mite.pcnm.rda0000644000176200001440000003003411522261763014652 0ustar liggesusers‹¬Š"Imite.pcnm.rda]›uP”}Ô÷)¥¤”P Q¤ãF¢¢ˆ„‚X€"" ¢„ 4(Ý!ÝݱÔY`wéîEPÁET|yfž{ïwž?®ÝïììÎgÎ÷w®3{éœ6d1`¡¡¡¡£¡£¥¥¡eØ t/´44œÌïÌVæ÷MÅloY[ÑÐÐoÛø€wãb߸Î@Äpb ý¨ Ä Ù f6o…øŸÂÓÛ ÙT/)=@ ’»Ÿ¼!iB¦à=ÈË‚Èt…T2ä~Ò›IŠ?ù\Eнi|n‰!Šò¶/°Êž×Ù{³lºí|mÓ¯ÛÕ‡ ôÀå:¥cÝ;´rªÈRiN¨:Õ)@*=][AUäê}ØÛ×ô²9̲«V% iÑ1µã¤„ú47ë݇¬ÓŽJZ+e&ïAG2‚”ï6YôÆÁsöó¾‚/!:$Wß!ò9„’ÇG}†XCÝQñÎw6S¾]ˆ:ëg{1æï•ï^ÖX~ZÿÖ_ÛçØ*qVÐkvök\íl bÁqFHÏ »„÷µžlRÇŽ09㼃7‘Ìå0É|Á.½UPSx‰÷IR‚½ØúdA›r2o~ä?Ú(„-4Î}²CH^N~{ZŒîvuAQNØ>vfáãg¤p±w¹ýFbß+õE,wL×1™kIJô9‚¥4”\èltüeΆ{SÇI7ÑE¿¢S~õ/Ô^R¥;n7 µôìGcj>B°Lןv"´i5^7©‚¿ß+%¿|ê@óÝÁ5 ¤‡ž=#m[L„—5@ÛIº'þ&±Ðþ p~‰Úm,%êÂ6AÓÐ?u¿º¡ý¬ô–ésMPÇ•kÀ¦6 uR ì2²ÈÛ=Š ©N‰Õ50êß¼Á4e#óòYÌI.h¹w( ?Ö·ñ—<Æò_ÎO¾®Ä*‹WVœ£ß±ñeý‡»˜>|¡âܘ&’ÞØEsâR@Lbh?+y :ÌÚ’h 2/ç¦s}Tö?ˆfЄr­›ŠÆL<è|÷c{3+5o쌛®I‡2£]É€¾¾¢šë؇†È± ŽˆpS»k/ÜûÍC˜i»­;¹8¿¡-ËV©íaðìgÿæN{çhO¯Æp#ÍJ:ˆy´ø0Ú1sƒóTôVñÂ\Ž‹ðHŸÊ Ë8¸âbØtw°&Àu§mÇßý€ëž¡Æ9'H²WÚë+9 Ñó7ÅÆotALù›4Yr8jÈk[oï€Ü‰þ³Zÿ@|@c‡ú2Äœ·ìûd“EMù—•So@qÆvwÁr(Û–x£™V¢=HWj¹ ½&ÞJÏdìw@.ÞýíÄ¿«jLòü_ž$µ*´ÓiD@¼±Ë|þYhrky©;4çÕ„õ èÑ/y£U½ûLÄÛºté°àžÄá³B葳$±\ „Ÿiâ8ðâäó•õW8¸?Jüðª",O…¹­adÿ¥Mƒ<Й`Åáá]Q·mÿdáPÌÁÛ€R÷×ÛäûµŒæ‰•PÅgXñE}Iǘ™3n#éîëG4?¿û‡Ms>7È#1==Yw Ë”)‡M DçÄ÷é ÄøkVÊŒ°Œ!Fjiçk|úr_œNÍc|È:ÖørS7f­×M9haø¦Æ¥ö\Œã¼ÍvK›‚1—Kÿ°nÀ8¹.þWÇîbt¿ÞZ$ß F/µ2ç1&+À†M]o 7ØÌ»RûÔ³ÚQCZh»ð•ƒ<ʼnñÇýþvtcAým‡œ˜(¬Îó=<É9ÄýQÚg*!e÷˜cŸ6¶ÛR„Tл^'«…!ñÚÀvz{ìv ÉŒ|õu§<ÌNlœg»æ¸´%öoóÍ+Ä®è*î'ÞœÐüÖéèn’"4/<°š½l…­#B&Ì%ØÆòÎT[‹Œ¢{ïËNªåàƒ±Æ»c¢{k°˜V›¥ïL[÷Cï ™–}Úl²L”eaðú¥O'†M¡ó7¯§\ÀvèŽ5àýƒÛ2ZÄåNò´|•Ê£¸vŠNÐF˜q[Ëû 9_‹ãooƒTÇý2eSìàÎ!þò|ý¸êh??ŽûL&Ë&F·£Oõàמ ˜âíËQ?°xϤwÇ),©ññŸ½@‡úÙ»oߊÀ%Ú¬¸ÜÍX”B›ô² K/´ææ¶cñ—á(©KfX~ðó·µ{íÛ™ÏKŽéÂòÀ¢À9™iŒ¬ÙÆÒ¥9 ü"Aë_ÁMæÚ½i¦xÔ%º¨(·†™çstÜv5b†ÑÑÜrÛ(ì+ñj'`R̵/µ¶?0¢)ñš÷)¬=ºwò ú ˜ß¦(íÆpýÊà7·0IsW_bÒ´zÇÐÅ|ŒºŒë6€Çî{+º36pû˜÷Ð@¶0?R/$Áy:AG3 ŒO?ázÜ%|‡‰Zoò®hfÐc©äÁ$½ ,·“ª°¸¬•3¬[2=Ó±0\opç/;$äe߯UÇJÑ»±Ò½£˜¸û¼î2/Fî¶hþÛuË…bKvBÉ8YBÈö*i¨Ü‰×ÄŽ}ñ?ƒE„ m®{V’€ ÖÑsº«û´Þ¥%m+Á>ÝüXîФ6ëÚI³ j¸/N}!@¥dÖþ'†íØ%b¸ö¸Zý¥|/²3޲—ç 1Þc53ŠHb)œ Y¸Oúèl8Pþ)n²L«ÇÈÔï~&zqP¯3?{S–êXÒÆ|]¡ò{¡nLÍ3 ¼Ìl¬;wˆmšsázÊ€U‘e!|p~¢(PÍxJ‡‡NÕ@á{çQúPÊ¡wØZÕ mŠv~a ÄØ£,U×{1û¸›QYïxNÿéòI#9H<ô$½krä6Jé“ûÆ?sÓ‚×1ö‹ê£3ÅXQÅÞËd׌©ãßÞ¿ø-Ž)棚*jXu¼yûÍSÍØÖ]U./‚õG~F¬öTc½ìÊq£[êH —ÝË&Q‰”«âÜ>ÜÛ±*ÉLE*cóÎÑ5_[cÇš%ÿ_¼âFsEU-Í+(øQB¢(øwû40·»åçϳ€Ì””!¸ä£lî¹{qÞ¼ÑYô"5ï+¦ÙAóU/QÛß*ÐìšþdÇòoh.ØãÚö§<†ž_âè æMjÛ_5÷,,èjùx‘‚å'_É1$c¹9ç¡O-XÑMêI(F⇈¤,£FÌ?¥Öx kÍVeéÆx°\2õéq.$Ⱦ¼!¾¡ú¢Á9Gx‘ Ú9Í1¶ŒAPbzHsröÐT1|…HÊè%}tIyBŸoîBߟíýBPZàxái¢Tná*qÞÈŸWN'j€²Wãn¸!ÔÔÊ ÷òGbnÎ ©ôaŸÉ÷„æûQž‹†7¡åš€yƒtǦÞÇb>Ï®b–á­[·Ø°0¾dÓÅc˜@I>½{„6Õ&UAú@»ÞçÝ ¹óÍÐßÖ¿hë%uÞç0·H>€§kL‚ûó÷P(2gwEšÛâ[9o¼†úÒnýé ŸúŸ³Ô=z¹’‚‹âK›ÑIº ýqtŸU‡a@)ð“O*„ÛMÜhzA [¸€oþ_ 71Gò§AøV ¿ËS;Á(ãå"cFäW,VøÜ+˜¢¾ ‹„ÌŸò¥V2õ{œÉú ’﬈•M~ÄVå£ú:…ƒØu~¹»éa—ÿòí²'±ûÏ9ñ™3Ìá6÷ç¬k£ö©w£q®Ó’@z &·Ä ]¡Ýžß¦ ¿`‹ÐþÄgÐé.¥Ñ}FîFgĶ}Ç„ñæÐÛ ÏpéSfëÆ¹ñúËŸ¶†f骮¨-2X¿Û-ìvÐ7gif ñä]c¡J;lryú¥L”Ûô¶ê#.0Èš0®Þ¿Š3ü-Tô?Ü=­õ …+"m 1Ó%}ή9<ž GïHýO5¾Ñ’yÞ.ÊölwñÉËÜ)«’ì=~î#fžÒ½BšÑÁü™é?(éQú‘ä9Ÿ@µªàÞ­]P­¢-*±ë2žO—Z5…gg¿Í\˜Þ•n{Žú†^F›#Ü´Ü/éÁ·¬´åî1M¨<ŸÕçÌ7‰Á¦„ýç³Ø0`·žä:mœnd°\oÅ+ëÓŒŠë˜(??ú]7 ÃåÕEß.øc¢Ä¼XO†=YšÈ¬´Á°<]m“{ ¿CŸi@‚'‰í×;PëMÂ?a1ï?ƒ®×3‡û}(\øH”eGØ—vZÂ!¹ÃÏN@ó»ö Ó_}!¨²àqë´t—a¼R M¤JóÅaQh”>ë®ìÜ ™³Ú-^KCúÊAÇÈMî»»Yû{ï¿ð6IKáÏ;´6’õ‰ñ†¢÷®\ô–7 hùvE¸=æ gy-ˆ©7úgßÖ$`žâ”Ç· sPÒsÊ7‚ÉË¢ ko`a}ÌüCòT¯7À‘ûXtUVÙžëdþö¥@eñé@ %´Z[tnƒLÍ™š¶ ¶PÂâ“yEQ j?œcS/‘JÎ<‚!¦ÐY±Ó®Àì­í;Ú7ößT¾‰í*~XÍ£kîdìŒÕò3?”ïÏ áÏ»ÃûÅ1õzpìJå µÞ´X]:ÚËíÜ|×Ú z¡åó¹þP] Îxœ4õ;¥±«Ê @GéÒí_6úøÉs/·§ae¹ª¥Þy>l1±énµØ‘ë>Óbs“÷¢'¥xydým )Øš“ÖÑýJ%úýÍ×°^NwØÓ Ê.¼|-É9 e×ZžÇ‡à–ÖJ‡æ–2šp¯_€Î†ý¿X²#±¨6Wª; }Lò¶êI6¥R[Ù届mùw“vAŸè.ÝܰaéÃ×­w_Cý×A6© ÿÂúu;Øú¡3±nëfèµ^h¨ ÁÁ¾a6Zº^L¢ËW¯v°ÃŠû.VŸ,i°YÊÉY×eˆd«'ŽYc•ªsìΣ$ÈÈX-õЉߍ÷;–¼\!lËöë>Æ_0’ýº™àLD^[®Y سýòsšWïÙªNeCá´Èµâ—èùêìô+e,È>æ\pƒy£SåÕ²!•ÜÜ‘1ê63!kA%»À;å8åÏŠë·O+8‰¾#ì˜ *WVä ü‰~F‹[µÞ ›¹áÂÓFŸ¨ƒu‘iìÚ6I&X¸a»—7Þ­hƒÁÙ Yy5Œ×Þ¿/½pú|Œ]™;É¥‡?Ä0ß:ăórûÿ@sF Ã;_ÈW÷ä~» MRá—~‡Ö6Zrä•2vú´oø‡ùš8†P33¿½˜¡ j¾å–ì¿ùg£¶•2{b‚aþ–_ýc˜cßþKá1;Æ$D5HâÃêì8c#×XšÉ`ì÷ ±‰a–îÇ0 |ì[«ÞǃDëËʾú¨îµéåÎ0ÇΟýX@s ä'r7RžÂ@|{ÅŸ[w°úãÚÈž”èk¾ µu;œøêë€d7Åz5hšÙÄÞX°B#ó9ë:QièèÍ7˜q¼cÓpt7úsØY‚éï×ñs`åõÉÊû0¹c¨pÝž \^ „‹£O¸©È3ƒH¬:ôƒÍtM+Ô,>Ùr"Éìó?K6˜2ÛÙáG܉}¢©pûÆ©\’­ú‰g¾Wóoª¡úÁÔâŽl¨ÖO; ÁN&Ù±Y0X`ËoNýP¨[í¡„œàƒšwöñ…W@Ú±?ܱ€ºJÚ«NsåU*ÈQ¬Ð¨s¹®Cˆj’ã­Æ/ñB†mða_W%ŒšçÿÆ1ý <§OºhÆxÕâéÚÒ2$Ñ›sìúŒ$aº”k;t, \£á’‰~ù-qÒÌÔ¼éûYÀÑ×h‡clc‚£/ü°ÿ{ÂÓ寱ۭ6ã{ƒ-´0X,m^õ‚B/¯e¥ÉÙ|&n(qòö½ËAOC{†)–':â~˜ÿŽÁH>.º¶„~šSß¶P Dæ§‘Ï}}¨°ÿrOhk Ö1~ù9’‰-·¥Bòþ\×  ]Hì๷|ÑÉÎÚÌÁ¬‡¡©ëš‰ËŠ+„»”:$…ØIŠ+¼A¢LPÔ-Æ"(¿×=oYmkþ±KFfPS–rÞ+Äjì4®'çA¤úUÃ×âÚPØÿŶzË:\Ö­X8ª+ƒø{ x× )žØ¹¿ýR´§®”ôÅ`çöÕâkó6à-ñô–œ Ö\£…»ùX`´'iÆy£^ö[õ. ¾†øý‹£¦'!k›œäf¨Í5õïÈée8»D¨VøÅyÞô$™ZõÌTžƒšXñ¿Œ» ‹µRàžà4l1ú;«‘ D‰þ®£³{€¤%y$¶Ïˆ‰»Üª’U >‡w6*@“îÓ>óÂDÉÐZ“ÉfHÓÜ!Ä3Šá…¬m«Æ“X—h¨#èp3g’g蘖±ôyg‰à ¬ó£•{Ýz#ÞÇ¿zäƒqÎäDr´ f ÈEU0G>vÊ€ž ä+ž°ýq‚OöW1Ö]€\Õl =õ*¯k$ù@eˆI„jêTù‹rݵfÄçá¬vì¦íÔ>ó¹ã‚#–oû!ÃÈS»jš4¬h$bÒ/y Qs#Ììj»×õÊÓξ½ =NL}–¾Ö ±ÅGôÓYù¥åm:7œ51ݰ®ÿö˜èK<®a0M;èhÛ69`D·Øͤ“˜·Ç×Ë<RvŠ‡È©aýäßU{º1L+ùzèÈžÇðí”qMÝvÈ Óßsݬˆ?úX x 9½¾…e’WÎVÛlÆšË*îÍEµpšáÅÒ&Ì-Ž¿Âó÷dŽ¿³rQÄŒ§FÉÑn±"p!á}ìKl–N½³Ž¾‹¯ª­ 0io›EYFXÞ«^$‰`>ÝlËqÌžÝfõ{ÂN‰ÌÒ3`yþf-·ñ(Kz-61õY „êäÐÿ!ëhuŠ/<~ yŠ®ôÓ)AÕH¸o—i¸S(! £ü \‡l6­©vãA·”VØw}Ó%ÚP®xgëv™H¡ð°ýyzf>~—z; ¾!,ãFœ¹p¢@áJÇxú“r7íuÁ½[ª‰ã#è ñE=qÙ †º˜–¬JaèãvUèzé©¥7‰¶’ÍÜæÔ¼qTgU* …è’_q…·êÀSU¡c5ì%qä¿ ‚ —í f09æ–øÂ L Ì/l, G?~¾“o6AîQZÿñlê9¥¼Sº(ÑJwb¥öbÅ?SswwÑc³›à±u‡pl4w•: äF³F>'Œxq»8ø£FŠLqí»øR™®¸d^¹ -'是/¶âÐà¡'¶ AYÁ6ÓSÑB8äpŸS³\S6_Vó?™ ÈlÊó²ý6„&GîOòÄTF#ñº§ÅûaJ÷9÷÷@Ðp aÚÃß"ãžXÁˆFYO[/ÖXoeXUo‡šÕzšª/·‘¸rà{¡¶kZÿÊH‰†QÂÁy¦ß°…~‰·M Èŧn^$ aâO§EÐÆ^nO¯É·$®‹ÚM-¡bf»ô‡Êy@ŽÉ2N“¨Í¸j7Ì)j[ê 0ǨÃ\mïÆþ7ð¨Ë¾œ„YÍÍ™_P¿'¡ h¥ló#ÉßÏ.éHb†~Bd Þã×Ù¹ ‹†•:÷]Å¢sòæ§&>@΂&_»Ž¤~b/ì˜eDÒÀ'¾÷—ÅÐo€q¼c‡.¤0?r¥£ARÕõx™$Vĵ¼©›nÆÒ+Szz ôåÝÛ!»Ö‹Ñã×WŒMѹâr1Oã,·®žpWCÛ{b­ü©o¡j%¦WË,ª·ËÍùÐiAékž’ÄT©‹ ®¢æÍ¨¬JÝEÊeP¥ƒ¶£ë{/û›¹à;SØq†aÎMy’Ì)–’·B±¡~dñ"¥&î\i,Ä‹£¿º·»†¡Oj³¹¾”®œæÛ¢ü*lób\èŸ)6ضVÏÊ(”öbòŒs=®v]¢Òm%DrÏ!=nJŸÇ kÖ#yÕý°Øæ˜Å‚ºÉ1ñ§ îÂꄬWÜ·`s·¯Ùß“H Ú|+ŠŒ5'¤‡FX”²çÄǰ??|¦ÜÂ5b”~„\Æ _ë³_0ùÝŸnå ({룒µ‰O¦'“çúÉ=rB]ŠP.ÚƒÛ.W@vaêÈYísxø/ÕJí@¬œH›8‚'hêJHç°fBtO§ØÆyOòV,ZêaÃdá¦3Á˜”i!<è‚ILoâŸC?yÝ-/ ñûJ±RAZ¼Ò_´°\1¿s‚³R¬o˜t'„ÿãÄ_eŽy²ÙjÒªºÐåÈõOÙ¦ ô칉޳åtœKSn¦[–}[p˜ÅtƼìOk#ÐÞ7´¤«Ãñ1ëgæÜ6öÈïï~ñ ñ.Ñ%Œç*öÑ¥Ð<Ú‰EéÓǹ$D!÷Òý ‹Ž¡ÐïÇûs?ç°I7¦7ªù=R1ý¾7‹!<Û7}#ÐBç]~3|®„Çæi¸è1íÃýF–DL»ûQ*Æÿ"9Øžß®%Cû‡è‘¿ËÔ¼îå6Ó}ûüSWl¿Ñpck‘ÏøW˜C²›½ý”;”ǤŸ8|- +síê‹nDÀˆl®Ñ=ÎÈ(‘(J¶ƒš×Ç:¾òÂÃõ­ã›6æï(úÚ±Þ+û >y7WYçlæñ\ï} …Yµ»uÞcfxÂÄÎG¡Xÿæ¯|ÜŽúü‹UÄ‹~ +oÑEYbÕËáYû‡Ðâö§Ë{L RÊä.y At…¼ò|LV•?R·Yw…´.·«ìRíPhôʲKÄ Bw*¥§‰Yb“ðýª@¹77‚ë's'WLtª¨­¶eÎݶKFs]ÖmÂáÎÝXA·ÉÀêu–ïô©m[‡™£2¼±rúE*Gr,äŽï|ó…¥ÊÔr䢤ճyPÅ\‹ä‡ÐøW–9g—!ïu]z•ÉÛ2po Úˆçð vu`郱‹Ùôw1–—ÛÁ{{?†n|òa5rVòbhıã^˜­ôòm$_µ¬×(oÁ¼ü™(‰Ì~ ~QÕ´ÊŠ¡M´¬]»Žc?×¹íC̘瓋ûoB&©Á΂áTWYO4Üè篨Y~8™ï¯«K·Kcä±¼ÖW¬0SÆ1¥)í.:ëÐÊØ0W(A‡‘E*;y/Ùc…;Ù@”寿Ê83}sÿlâ:›Œy¯ùgô‘\2†²¶A˜.²”÷ÕKš7ä—¾ì}ÎU6«Ëwz¢û?]»ß€Wì0áý~ILq&“«õe0ðœÏLËFŸáëïPâ ‡´½U¾aiyµÿ±³ÂMzH9µîu•Sò~ØŠv^€òßPïÅ#±¿ìÔ+Ø¿BjÔ\æ“·éMxº·bÆ (sžë«pUÈD[GûH;Ï[xåYˆa´ù,Èñ>qFÈã•Yš'‡àéÑÀl cw»†¾‡Ð­¥1e—ÑÎðŽ\Äyw¨XV^«þúdc¯o}Töãž+á+üå*Ÿ›^ÂZJeøç(V(9S|Ó.ÁáæFöKØögt„Â>G½®¸Å€‰Êb\®Ðdæ¾×'j R.š\²;æ‡Íõ™Ÿ5O£×+¦J…:|ò8•µ¢»ÃÄNÿæÝò+S¼‚£Îb‚²o™^Æ"FÌ÷9š6ÔBƒîÃÞ(—n ì½P>%Ï ·TÅÅœ ¦—×?o}V==,»ÉxzO³ÿÎ[5@R9›Ÿ“'ä_4þ:sj3̸W0ÿÐV&àóVzlúEo÷Ò÷<ÍôµôèË¡¦mÖ³ü,6…÷ÿ~s8‰ÏV†ÿÌ%CÃ=‹"Óۨ!ÂÕÁ~šîòPì\ƒï–¡ÜÞ¯ÙñÁ!'¹†˜¡ìtÉþˆ·P˽ø-ä‡F$2“e°¹böˆÐÅvœ‘ª©ý IÔ}ªH÷xF•°Þê0±ÉÙÏ·ö|YwÁ¶[÷z¼°)LîjÌ(«ˆÑ‹aiþÒð&:Äô³÷"¾NLcÕûB+Ëjè„»?s¸_ ‰†ŽþÜY;Œ¼tì¾äÄe ©d=í_+âéY…³cžX½°óíT1Ìôǵƒo 3õÞÜ;Ûù½®fW®,cf¢vÉÊ®Ó@ù9‘ùVsW-~Ñ”‡¢ª3MŸy6æA..ÚMdQ$<½fsBê+–G¥ÞTͬõÌçêóØVþq ã#´,4kžÿ†eµ÷½ï˜@~áîCqm0*O°(Ð2Ãæg<g¡ò¢ÂiaWh)úÇ×e@&žO®&_ÄæÈ_»v›Ÿ2¡â«½û1°QI¼Š·‰ákQÑB@$¶Vä˜CÁ§k—=‹¡ÿ˜ãß4ULK9«5,µ Yqtë7Nra6K•"ózÖtH²êÍc—›âÇ;ç°Ê£3â³ÎȈôí0Ø­õC|ëûΆb¥ÉÝ c­{‡¾æÍu½d|¬aœŸÇÝ*Qï|s^CŠ¥P]^'Æn»Ô·ë‘5º™}qû‹ÊÈûè;~óV7šuFr£þr—½ºS ÙÊ'éºnÜ÷ñ‘{&OÓbcQ…šànp˸º;mØ IqïzÒs·‚GÞ?::B‡¡âóßSK–P¹Çæ÷|åݶÙ1*¸É yÒ:äÔ¼É8²yóók_¡ ñ̲oôPº6OÑþ ¡ÏT[Mà qpëé Šà †§§*µJ…a™¹§î›KRùâsàÙ3"–Ûª¾ý. ã–ÛßÙ†b± c„§ûn0«-ÖL¡ÁÔ×ÁŸUÉuàH7$wFšɱ_ƒµ1ë4ûjÔaæƒÚó]%æ[éÍÔ¤Ô å–ÜI›x±ï¡×¢×_Lº­õFíVç9zsÕ¥AQ1ÍŽGϰq+)ï{ï(–üQððôˆ]JÏ:@)!—‘œoaÙ?JIËCëCùû}X¡ú«˜·ÞªvŒN{cäq±õzQ $èM¯ÈlSÅæé“N1Áh£krtïLÓ¹:¢¯ú£{½ã™Ä"0ÿoÚbdúѺðïÈÿêî=Þ‰BMf|À}ȸóM¨Ÿ  Y…ŒsA«0£;[KŽqovv÷½·±ïî©ãVK„:e†›rÍ|sò¢>ß<æ\?$íÁ³ ˆÄ×*ÿ%ÎS‡} ¼€ŸÏŽ– "úþrMÐcûݦÕu,ðIŸŒ¥Ñ7÷‹½!RåW¥“ЮlÄp„î––…:Ò|öi èáƒp,4®»x’ü žïphS”~ ¤WÌ7¯)I¢ßqé÷Q¼×¡œƒÔ¢…ÏB;̇öõbnÔÈsÎdUÌS{!”ê…µ»å§~i|‡ê;KŒ¨ÿ£ÀÆÃŸ·+oÆn©vºÃÅ58°³7ÂÃgùþ“ #lÖEæ×¡ïüIÆ ?öy¹—ÖK¿L\yYg‰YÃ'ŽŒUˆb“†ÕÂÔ…~}HfZ¹ Z½˜ËæDNC†ü·áôÉìÛW§’Þ´2˜O¸ ïvÁ¸ò°ÎìÐdŒ³z#,©š³¿U÷¦¨B¥þ[‘<8¬&¨½õgVVþ1þ}bj*éœ8þïeŽ–ױɶަÛ{7¶9ß8¶«tãþ¸4xÞìƒm¶JJL`úãÇzˆÌõ]w,}‡Qoy—SÎAÕÙþÍú)7ö°Æ1²gÅYhy³$+.ŒúèÓü„*P,yu“„DÕº},±î>{ŒÔ^zhÈ»­¿Ô %Ú»ÊKÿ\‚<ÿûo] â ö£Í’ 3-”Þ~¿Â§e™y³~É_?¢OÐf¤1ƒ¾ÍESÌíö+u<;2¡÷$äÑ÷`^è~±¢·¶ÐP]ïר&´˜ÆFãŠy^¬Ó;¬ù0S²µLé£:fõ_¼ÕŠ!uKÁçI¼˜Øá³jDkà }x¢¿}î|a6úK=™÷sâìš²¦(ÏÖ h²àƒÂ?”e·A`ÿý<‡Îí°ä`"[–6ú/Ïl‡îw$˜i ëCb®[”lj]h%ÂÄ̸ΊvW¶ùˆËÇ2“×çï`›+7Í÷KÔ¼ñsÎ9Ée‚-WLt|žêa¢A¯æÔ'L_VÎùd=ÙôÕÇ­yÎýEÈ 4鈮ÏôÀèÅq÷Š#¥LúŒ{;cÒ|t´J«Ü Ûn¥.…ïx}–ÁêÔ¨–h•(Œ¾ügx×G.¬”S˜éI¿†™!_­ÝŒÅÌIåXF€ úö狘”+<¼ #·¢wZ.ƒ’C¬ü Ó¶@æ̱Ò9ý…z®<ÆHùç³§uZ‘²ÉôŽýìsëÝü³ûVV뾺å!'”¼P9Gê«Ö}íX6RìqúÜmÈfXaµŒµ…Ú`®‘åH;¬ÖM׺) µ¡ƒìZæÜõHM¦ˆÆ›)¾€¨Âa<Židè#¾|5w9Ãï»qqž²)Dzê×Ûî‘wc)1â’M!‰x ƒ§çœÀ\›?äÛ;ßPÛ·OÝ+rÆ¢3!K1SP«ž±Vã:€$Ùµ³q['`XžÄðŠý$„Ô4h'TÔ@ ]¢SÁ¢2”>Âô× îcš&ìtBcnÖ¾±À§Ø«ÂÀ®Ý¤ƒF²Û߯C÷gµ?GìuõöÕÝ퉯,ƺZX˶[_í Ü¿^‘ÖrcŽ!Ýsi;EùßJbÚÍʶ«Gr°P4u„îäó›úÅYÀ,Ó˜6éñb GÚ»þÚk©yÓÙÕwNZ‹¬Y³eí¡êãn+oÞPù¬„P¹ÒÌ_õýžŽ‰[–¸H†àS9eÐä̉öó)Ú!¢ðtmó³8nš$ã^Ÿ„¬¡+gfë‹:È:s­‹%}‰2o´…Åé úÀÂ×ëpR‡&ì¿W¼„Ôª—ؾ• l¹8‡LÆÆ}ûö¡è'º‡PZÊ´¸¥ƒxä©«·câ\ìæî¯_èÀ®BŠ:ù¤,ôÜú7J2 £Ú*såj_@šžJUwø–ïWP½ãrr~×øÏZP ²"MvŒ@ï…]]äl»{ÂR¤ë»Ä²¾§³Cw~õãKÜ[ÁM}ôÅ™MH<Ìä”|Ër˜ïÔDsAø˜ì¶ýõÎHܦ°û{@ 4û¼v¸r 7¶î|t»„¼>öXwbUè>Úæ?ÃP}þáæ±Å½NG™—-e ÌÙŠoå"Ñ“ÈzWù”ÞËŸ}vÉÊGÞ9¸¬ò@BF瓬&,?µûF„ôøѯV×!£=†ëáĬ4zQÅÑC‹áöÌÍõû>cäì6MÏô¡³MßM˜„æÖùÅ‚…XãY?7%<Š1±\çߥÞÅ´¢…ÙJÃ%4ïâ8’ù|?-— ¾4]Æ„ÏÆ¿ÜwX@¤xYIUÕ-L„Bk—ÞexÒ·Y¯íu8+Th/ȕҥƒ ýaÂñ‘µ˜N;ÉPøÖ‰ßuï¸Ü_Çvµ‹)…ˆîü“Ü(Ò†±wBÇ ±níUÞ¥=¹@†©4ÿ£kW¥îÉÆüëê y‘Ð[ xlä2Ÿˆ¢@oaF–’åãQòôŠ–|ŠÐý¾gŸþ ºL ž9}Ìbeù; ¿è‘楋fX¿eH"n„ Z¦(Ñëõü°‚fÅÓ0hð×Z<—â†-1Ê}u˜‘²S'߆­‰ù*¤E/èVu¶š$`ÍïÛŸÌŽaCÓšEXîh̺jõ~+êKέ¶ÓÅõÎÙ°Ý<¾§[Ò¹x9Ì·œÅ™³ZscÙ?²~â^„eN®ë±•bœ¨eç£Í,¹tü;Ϧzµo‚-+8Kœ ½›m O÷h5œ¬{‚7c#šW?3€ãÃ*‡é•íø,σëÝ`Ϫ~a׋“èÈî2¯,s ¿%}—94‰!-Õ1Єvký©†ÿç‡MÖÆV¦‚óvøŸé.KP•$UIQ•4UÉP•,UÉQ•ˆ ¨ˆû jß¼<"‚Z¥Z¥ÐêLþßv—MŠÚ9ç|ß9¿sÎw94pD ‚ ’$b+Ö¹‚ ÂŽ&÷ߘ˜sÌVÓÊ BàNW¯wÇmþÓ¡pêõ ¶åìÁK'îcñÆ?>=5þ¼ÛUwe/~á~_²á·a.¯¹ß6¶ÇU[®°‘áÏîð–b‘ÏÝßÁŸY|zóc=!Nô5ÁûØ?±>òÁ±ïãëÍ,ìFq#³® Øc·€×?Òì-`]¿àÏŽ"¿¾«ž[ž±=ÇÏXäMpö}ä…gúÐ#?­»ŽƒŒYðï¿ ù>qYñ>}ÇÃ…X´ù ½‚ùðC^"o°þ¯à1â^ ÿü§ÚPG䨣ƒÓ½†¾ "þ“mnôð"‹Ï`>&b=»æaÃlàÔÑÍëêâù|‚u½ß¢žîóèSŒ÷Õ¯à}Ğžô„wèiüûxÜx õ ë½|¿´½ôé¹÷ÀË~ ¿ünÔWhFüÕ ôiù"â_FœüU®¿…~•ö¢®ìN¬?¾Šz ÷à_z ûUúy­ìFüüãÈ£p~ÅXÿÂú»š‚_á2ô⣛ºûîÜê¼I›ïOËå#Èç<9Pe/å¶:®KÛØ¤*9X#võ¼7ªxÕ1Å-|Ä9Õª·lT¼× fÖ\H»ÒîéYƒ£©YcÆj¯TåJU©TU®6 Ï9Žis­1jØfÊ4®7í³ÜÉicÒ¬J¤~rÁHûyˆ~,w¡“ôb]/ÛWi›¨Ò ô­lµæ¤mþÿfˆÿsjè´Sú›w0À;X7’´L.bfÎ70¬e¸|ÉßϤ=eÚæÔÞƒò3)na—jÌßÈ.Þ¤þÝŒ!ÕÐ¥ª= †F kÞô¯@p0“H$'ç«Ú_óÌW^ËH˜þ©÷/Øhf"=`Zi_?l8vÒr¸S“7ïØ†cúQFgíÌWêÆ’©d¦ÉNæZËQ1ZôßÑ Dÿ ýÛ/j¾ ûB‡/túB¤ö6’ÚI’IRHRIÒHÒIê ©“$bÈĉ!C&†L ™21dbÈĉ¡C!†B … 1b(ÄPˆ¡C!†J •*1Tb¨ÄP‰¡C%†J •14bhÄЈ¡C#†F 14bèÄЉ¡C'†N :1tbèÄЉÑѶÅå MŽÑ:m»§L¸þÀŸ¿$Ô vegan/data/dune.taxon.rda0000644000176200001440000000144110667741210015042 0ustar liggesusers‹µV]o›0em“é²H{ßOèÃþA’¶›¦V‹Òiê«X262f+~Ú%Äö…&”ªÛ çr}î—1gsýø9| =Ï;óÎFð{·gðóÎóæü‡q)è•&ORxÞùG°€›7‡ë\µÇxI9gÅù7YNµ*3óô[)¢²8Š.L‘Ã}xéŒR¢,ÓhSfôÉ€Ÿ,bÆ÷ýR‘(­tJ#f…"jrné'+¦ ç0ýZåAR"¸£Rh×µ5$k©©ÐŒsë|-ÍílE Pª)¨s~(¶“ÜÅyf˜.„NåÚšF„3S›¿ˆRˆH„œ®R*d.cÇ6¾áUæú@&Œ»¿æ…$Ò2'JÚÖ;¾Ãy… .s•ʱ-•l¸ñ€ÃE¡)tœjÒj†ŒMA=Ù^ÃÊB0\Uy›õr-yÍÅ6ÿ–l1ž£Ñcûl?ýÆßŠñ,ó!#‹žÄØG½9vq·ðzöQ %3» zœ>¬ˆªdžV¼ÕƒÙaO0ѳv0Äû"hÒæÔ½û Cx¿Nã1ð:4Âf¨ gÔÝEœûi8|iŽÌÜMôeäÞ§2íÆì¤Ôíµ—÷„ç,IY_ôö’ã}âãß‘Œ\3 á‰ûûDY\œÀÓ•Ì2Ê™ø¦UÃ\œœW"1£?àK¸M$«vÄN6/.n9 hÞñ vü_ãi}ý¯Y$uqù÷RÈ7à>îpÙ¬éïᨛÃë⼦‚~ß·0½·´ÞH̾ó£ƒóè N ÜÂÂ+ó車©2¤å6⤰òmÕ€V„@ÉßW8 ‘¹åƒ¾,1>Ûr‡QÚ ¹‘ hN¸}ÝÊ ¾[‚äÄ®¡J‹àäØYE7ÝHÔ/ƒà°W$6#që@.¢xpf¢\@-"á ¢=¤hnkØkPƒ@àgQ G´b6BJ ߺÚ+´ta®,'hP–3Q…¶Ï@¢Îƒ&L¨õ=˜JÕÝ&fÌ󯨼'1Ñäj§`¶€þÔ×_‘Óiþ] vegan/data/dune.rda0000644000176200001440000000133111522261763013711 0ustar liggesusers‹¬Š"Idune.rdaÍ]kÛ0PÝææa¦‡<”RöÊš}t{šÚn0FB:F_ÕDI Šm»£ÿz¿`L¦–ìÈV,ÉN©BÝéNw¾/<ýv;Þþñ€wÀ§þãs`žE€Woøü˜ƒ¯ù?D>ؘ äˆ7Ý¿z‚g2¡žª]{“¸Ñ#C{êôÖɵ¦žÖï¨/»ûnz¢Kû@Gÿýغé…ýSÚw?ùþõo³~o?šõDª_FfuPÍÓÚÞ×õu¿c‡»û]ÿbß?)ö„Û÷7‘_]ï¹5}•C”ÆóX@7˜V×f«uX•²PJXLïÊg¨ðÝàeÂ䞊)ŽäžK¶IåÚu\µü—$*­¯b¦8ðÅN«N„¹7.&ƒ³÷õA¢> ”œœ‰Ég1ù(©Ïå¬Ä½“3ÉùE¢äBô`\Ò—Z” BYï\ P'ñl^A5œãŸ.lýË¿ÿ4ãA ·vegan/data/dune.env.rda0000644000176200001440000000072011522261763014501 0ustar liggesusers‹¬Š"Idune.env.rda•SKOÃ0 NÒvŠ¡+nÓ°[AhÚevÖMê:ÔvCüøMð—i§i` ¹jí|¶cû“{3éØ!Døƒ6¹iþÁ5ª\WÜeÀš,X!T>àg‹ûw¹n8;(çXèúG"ŸÎ¡Ð{ÝTœ’—ŠôŸ¼.ò΄¶EÜ[{KäÝÙ8ÜþSᇸ£b=Þo-é3›™éŒ™Æ †\Ì ‡Wà~J>[1?âh=‹2·Áè€qÆ…vƒ5õiU^„. ™+Ž%NãEÈ­õ/s™Ú|D¼†2 V0SñyNÒùÒ&!×C°FÒºƒõ0Ìò ÈÃvL´îT[íÿƒ‰œBdž¨\ÑWoÆ|W9?Ó(^µwÉ!dZã[1¬Y ›VqKdŸDéßR|8¿§0‡‹ÒÚ¼L]u«¶¢¸}³H+M® de¼˜[ÉÙÓ€>±9 b8KÜ)‰•ªá⥩VièãvWÿKH»Pï õWÊ¢ûÒʱ–´d楄:•¤“Çç]ä ’ûþ†·]Ó¦òI3žÑú™Q_vegan/data/BCI.rda0000644000176200001440000001763511522261763013371 0ustar liggesusers‹¬Š"IBCI.rdaå=i“ÛÆ•Ýx çàœÉÞÄNåØŠ³5»Éq²Gmɲc'%­g#m*•ªý€á@3ˆI‚ YԿͯØo[ûšìn<<¾@çPvª BÝèûÝý^÷ï¿üãiç!„'dK ÀkàÁ?RˆÃ øõ¿xö[!ZðúWÈÚ†ßSQïOŠ{ÿ·ÔxÖõçÝÜ<ÝÉx–]yÏÇ#oÞ|¦ÍéD°ã9ú)ø’èwG×ÛÒmª§©ó<ý¾¡ó &°‹êt®dú(™ñÐ1JÒý>¨g՚ʚë㡾ìë¹òȨ§ƒÖ/ yÕá1}÷Q½RÏ }½Vmý2›v2N³®^þ¼ôymô@¾gã‘üCúá1p0uùKÌtàªëLÁóÆcxv5ýÙ׿æÿê9Ðp¾OW—ýHÓ¡mc[ð<Ð8¡Êêü=]—*÷Gð<„çxþ[×} ëýùD>(“eê¬Y}•xY‡6—É™.ùMÖW.yLÛ.ü–H®ÁýÄë…e&N¶âè‡à¨IÚõPRÃfÉÞ•1}2<Êð¥Á—DõH.ôIñX·Q;ÁmK× ñ4É\Ññ¯¢szŽo$’àEº'+äYG°Tè9T‡ðjÀe~¹t°eøé=ÕEKåÑÁ¢¡Ã>7´œµCàÈ×yƒgxÞw^K¤Ï„7Èzš¶1Žt´¼÷ Y§Í9®Úñ4ŠtÜÂG¥5>ãoD4.̈^Ñq`ÞƒiDñ¨&£?6ˆ^¼çò(Ï ôšÂŒWBã(=Ü—‹6‹{‚¨°QH†îpö€Uäë:¼µLžõJä´V-«!×äQ‰ÆçÚGv#Ìm“Ô ^&H½UvŠGԮ­“,òµ…õ‘5çÿoÝ~-ïž°ö7—ü*K쉞Î=Bh¹CW|Òßaã£2®dÆ#91`ä(Oã“Oêo"|Ã6[*úDžæ`ÜcôWZ£ãÞÿÁ4A:d¼*º&ªåU;ž-$Wìi™"@tÔÓr †‡MmgòÐ\·uºGèc‡ÈþÆŽå#šˆe’‘ Zd}¼ _ËžèUà §·äÿuø“¼íY—|-ï]\ЪöI¼ÙH0z ÇèAuhgÞ8t'v}Êö¨¸±RùÌ'ãjØ¥dLJ†þ2öʵзû ;Ü„~êÝýxÿßìÿ¼§p÷Þà\rÑÑ7Ñ\È~»AìÃM]Ï&šƒŽÈ} Œ k =‡hÞ¶õ:è:œôM8ìšBð>A» z*Ç›¼kâ\c‘~ðÃQ“Ø)/ÛÒßI²~ÒA‡¥ƒ7‰’¹Äe›¼=ûV•ú¿½§2\)¼­ª'ÈÇ[Æ£ý%í‰×]OÜ/ùÚcì’‚±Ry,¨øžãQÂ!£ QîgSÃFTXц(úEJb{Å{„8Ý‹{䆦 ovÉŒe{AYiÞ‚kâúªûUý¯YçÂþO•¿Ê2>ßÞ5éa$¯b<~‰žãÕ_•#Å¢-½Ž­ë Ó6민äœðïR¿ï6’óŒ ×-òÃÙó÷"÷÷2mi¹fÕó#Ä×ó÷•éu“IÛå~õï›}gY^,oy<~…þQǯŒÒîei‡›pú•ú#¹ú]…»²„gÖ-»ì:süã²WB—ÊlTÜ~µG QôÓÃv{Ixs@êò‰Í,pè ëâ‘eö(¹"îÔõ)óJü0} ï/ÉùœTíx%cõ‰Ú|¦~Î_ÙEŸ¥é77ÚDkÞü>¨Gì­Ø'TÙ¯t|ôîÙhÚ¢èÿEí2x}¯ú‰æeêQ±jÿWÅü\ó®O4?û™þæ#ý|¨ó~¬ôwÿ,æ1užúö±Nÿ%<ÿÏáùWx>ƒçSx~ ÏÇb³pÏ/tûª?4ÿíê±>Ðmws›G-úöýÝÈ~ɪxÏÕãÝÒxäš¿[S ñ ·mï]ó¼\ ÞêÆ$zk¬«"}¥ýŸ»¦r‰õ‘¢^,NôWŸßJ^ì-!¿‰û;ï¥ãäôÓº117M£äõêeýw|±è³LýY|áö#L=ئEý[±ý›ÊnM¢ {HoØÈþö*t ŽO]½f °P)_Ëy_22a]ØK~Wµ×ªa  _Ó¾·ˆÇùHÆNLa²E`ó»çüŒN'ýét ö7ÁØá¨Ï𬠡.]†Ó3é?§ër¾º-ÁÆ^;žÖ[ÑP76O®ˆ?ØÇ¯3ön<ŸØ<¢›ýïÍn!ºdüž7µcüm;ZgÚÒùªÜ¾.·+rŸ[¼×z8×á ñs»"ß×Û@:aÓ¡c·D1VI Xèˆâ„§Ûõ‰ŽÚÑ}ÃøÛÅø'kÕdp©%Üñ?uÖØåÓâÚ÷pèÇ ¶Š†à}jÆ/èAÃ!¿Â#0t.`ä9Î6Ù‹>²-ÆÆâ ·oS øxô¢/¸ïm„GØ?ûtD1¶Ùà͵„7†‘¾©íÿ#Š1qÊFðï¨^©mžÎ7x¤m •üT”Ø:—µ_.cÃ[%¶_x@ã»±)rß’–(ƨ7ÈZ›s'0_Áçµ4n·ÈÚwЏ\ˆ©åö0D'©AÓ¦Úç,+o]G¼FÙ…øÓÁj›±1ê}£Â¾¶¡ÅmQôͱ£Xn¡þ;\hSãÄÁËâG] š'ÝŠ>wSúyP²>f?¯Aà´…hSKäg>lŠ[Hö41Ç¢xæ±%¶E1ÞŸÆÆÐ™¦àÏ¥gŒa21<ÎÙý¹2Ÿ0xpQ%x¸ê¢7®õ‘øòKø6·oÞ^:dPá–-Ù½šŠ¯¥Î ¨úæ:6º›d‰ÈÍwέ/Êc=oXî^»Hp·¢Q-ýGÖL+³ Ô¥ë«Ê;uí׉¯X'•s™óÅ\ñl4&ÆÎà2ÍŽÒd¯¤}:®–Xð'µãi¡ü ±G÷¦ñ~£GÆBiyÀÓUË{}Fo ˜¹sÙ+ˆîéôwáÊ bƒ¦i ´føl[j›óEÑçÏçOË‘Çñ­ÛÖçªÎ ¢ã9¾„þö|wØWÛ$šGÁûÝ4,â:¨/„Ϭ›`ì(î ²_á­h¯ºo²B~»£¾\û¯Íè§udÆ*ü¨:“ažæUô¡Ì?Q®Ð¹†9_ƒ¯*{>ý vDŸÐ(ó5m2ólöé#ã †6»è¢Ãö·û~~â’cn{Î:éAºN쟫ßuRÇ?þžÈeuókÑÿþò›Jx«ã{†ý;êœCV÷Œ-¯–ýkŒÇ«ÀÉ:ò©kÕ÷ÀµÏÙîòY-ÓO=G{Üy).?Ž*9bçÊ–é?†6ï.ÚNX¿VæÌ^]«.3ŽýVým"Y×atgUÿ6‘—µ–ò½2>cjDù{©;¹õ³¯Múž.³©û©ü¹êç@äg/?п;"÷3ëèùÚÅ3ÌŒÏØC‘ÇÈš±n¢zÍ~ŒŠÿý;ý­öW»³ýí÷e¿^^³lÝ»”nR>X—Ýö6Öç=‹é¾SÿO™ Ù‹gÔxâfä¾uîg•¯W&O—á÷2g©I±òºô¤ŽŸ€k?«ÉÈ®³Øè4„Û72ÕñÁÞ Ð§º÷Ë]C_*øWá¸)‰æ”ŸëŽ×=gX sçòiùÔ+±‡x‚käb龌¬aª{Ö²ËVS]Ûù!²B¼î~ª,Ñ]|f<µŒhä;s–й¶äK#ûnë2ÜTåþA,Þ×õ@}eÛ"¿/ïYÙÖ’CUÌÂçúù5jOÉÏê¼™_x¦2ÛÍû}¬ÅþvúÖ­É;8îÇ™ÇG|߇ŠÏJÞù=28Þ?yl çk0ïtÇ÷â½J£?¹Î»]5N¯)Š{ÖU¼¹ÌFW——1¶ˆ…ûi·Ð|˜û«±-ç­Çb_†}M?ÌšœÞŽ}_¹ƒÖÌ̃9÷ëíÍ~Pvß.¾—Ç" DG¨žÏù» ÁÇÏ`_E¯ˆ}é}‡Ôÿ΄öÔöçè™q ŸçäWz_c¯†ÍuW£Ov<ƦâÜ5±]8î±A~=2Ǩ öi w"o ¶ÌYäý¿#òØc›oâõ75œ(òXºã[ ×rI^æ­‰^߆εŽ} yCã©ûwË{¨Nÿ^—\Î%H}ý}†fp¾o>á]4fÍch€ü9Àúû=ØÒ²$æ G· Ÿ1g';å#dÛðD§¼‰ðø²µ{é¶.{¤ó÷ÚAß?@öQãÃþ1¢5Gºž{ÿ³JL§`ηÄ>…zžð¹¥-´8ÎÍØ 1\à30 íîˆâ}À-½»"?'ÙCú–+é¾ Ž_âvïo\çºÉ%ô…ëøvTø>Õ:ë{•ó™ëžÿvÏî2¼÷öÞ˜›Âù°æL¡6’¹Ìý-æLƒ–Èý™ñùGØ×ºä;IèÀ.Âo|_8æ5Èöˆõ€Ð6죦é KßÊ|×ufõmÁ›Kv—bõ;³®{ÿÁçÆ±ûÁ³^u⮫ÖJ:èw×wî[‹è%Ñ ±>×ÕrÅG~?×6´c$‹]¼tNªÇb{ Ö›}­]2n‘ZHÇ¢p,é튟[æ ¸:ûëØÿqù^TÁû²÷ØS?×eïÙáîMDú÷ð®­;Ъlc˜Žw„ûž…ºúÜ:c¨¼Cï.o {¨(Ezþ‰|ëlWwÝ=/×ïöëñž˜¹»ŽÒ¾Ž(žûÚÔ4ÍÐC#˜³­»"ßc3çbbÛN ÏYß itoCÛ‰!{R{Íú·¤½D®ŸÆ°úϲu×½×¢î¸V¥%·a¿åû5Vò»‰¸Å5Ý{´pÿ‚ë Œ2_^έÎù=ÎI® ­EÙÂ/³ŠM³ ÇWÅM ’·x¾ò-ÉG,þTÝadZ샌cÐ:dô>= Wmƈz{k.ÿ*ã;¢ü-,ò˜•¦âlÔýv'b~6ó‰þæGúy¤¿9Ö6âé÷Oô¯ºï]§âêlçDåUû?ÕíýP÷A¥ÿ <ߊùÞvW·ó~võs ¬/Ø­ÙÅÀ[]›‘¯e–‚|·#†ËMF7¢uYi“è®Øÿ‰úâ½²f.c±çm”Á¬·äØ×½n®½º6c©¢Ug1¹æŸ»ÏUˆò»§ëÊFuγ „Ûïö‰Óƒ%¼¹%øØrê#Ô`ƼŒ|€ã,©Ï­'Š÷MàuÞdl•Qô1¢{·B,úVbÙ`ô"ìSì >"Xòüƒeö¨êÚ¤޲®;Ë+xÙOÜÔ4ý#M×ÛúwWäwÛÛžNˆúe|´Œ·!r¿áCý»ÖÀĶš}|ã[µ#ì­Ö÷kK§º@ß4EÑ¿ŠžÖtØŽ¸³k)¬˜“'·;V“ظ±=\ý´d ê×¼+ï§½O+Òö•Æã1ôi…»dע߯z¾ •9u K]¦¼‰¿Áǹ-ÃÖyÈðã‹ÇÝuçŠ73õn‹Å=›mQô5h[4n#¼½dðÛ©©m‹«—‹k”ØßÊ|Ø: Ìq2§Ïúb5 *½²,~Ÿ§‡ý9pìJÕ9Â~…Üä1cô˜²(ßsçÆíý û¿‰Š¹\§N½îóá°<ª×úpfÓ†ƒh ‰Š9ý~UâÁÓó0áÉ ì¥áE4Œ³ÎÚÚ {1äDýp˜ô¢4ëœ#ÈéOGWáÉEü&JÇñ뤇 ™ªÊd< {WS“¹óô"‚OO&iÜOÎMêáÓè2]Åýðdª^DZiëøi¿w•¤Ã(<é©ÊÒ¸‡³òì~8)td÷i?>Ò 4]d}\c?]MûÙød4†~ŒGQ:ÈÆy±qOÎûaﻺ£Ó÷žÂ8ÉT7Òéà<‡¶ ð¦0s'ÑÛ^ÔÛ)Üy:¼ˆÓð$B ¶ݧÃa2 OÆ£4¼Ì¢X'o?Eñyxªþ䃘'Nâó$Ká±S6Åó®C—Ò,NL™‡OÇ“4.M¡G0eË~4 ‡¶W‡³|µÒ'—iø&Jú0£v”“I؇Ù<Ï&Ó4ìEvø_ÀTÀP.3˜¼G_DqÜ»ÄÑLõ(ÂdÛ¹ù @Ka?î…Ðn^6ËT™zΨ™ýdx9[V[pïY8Ž`¦ztÕŽ{7Ï€™Jmרô^2¼ÂØóu=°¹ C˳ÆÓþ›zŸ²ÆñÖæ*ê÷ãÑƧ3= ß„Ã¸ßÆjF0á4÷žE€£XAÆ8¾ÚjmFr>ÉŠˆÕ}]¤€‹'ÉE’棆d #Ë%÷'ư2ñhÇv."€™‹è]¬ñs6ϦÐþ³«pp™Aïi¹£gWñ LÓ+¨r¦oâ×ýĶ™ð?¨ ’R‡½I’Æ(3Ž“ÞU?LÇ'Qæ*²¸8Ï4‹¦—0ŒÈ.õQ1»ÆÃx’ØÎ&½^¢ÈˆBI@¨òœA8|7_ ´®‡Ï’~vžÆ€ƒ—@Û^slÞ}–¤ ŽCXÓÙDTÖé籪9µ 9Oí‡ã8Qtï­íy’Ç¡‚Ž^Óu vJŸ¥É$B]ý>P¨K;K~ºÏ2  VÑÈÑÏ$S*g3Òìu4î!L6 vC‡_ŠÂj ¼Õ˜b[‡¼ñ ª8f(ñ—1Л)`-”X›\:rð%à@”Nß.–Üÿ2Ž¢I4¶ÔÈ€U÷«~¨ˆ- øuNõ}PªTD @1œgéåw¿J§“«Ù r\áÑ<;y;U`“ÃyN¿ÊÒfAÁñE:LÞeØBT {&o¨ I=0 З XN`ts€@_(4ÍyÑîoâ°¡žGC÷Lú|lye;ó E6€þ›Ô­yê | HZ¬b‘Žè*F ŒÄr `y‘½³óÜÕ©i|‰Lw{šŒŠÓsðu˜ÜÎè,à@qSÄf ‹4&6¦mø„ôàë,)Þ™30;ZÈRˆõ:{÷nj@L§C–[ ›&'~9Œqýè#tè"D@±rYï2`«YP¨ ‰€=¦жJιãî×ôó¶ Xr.Ù|FÐx8R|&­ŸO"äÇŠHCm„ñy6´ zð `żwÀä1šûý<«— aJ‡yNœN€-NæžÍ•Ä\bç›,UâC4Šaš-¦3”€0Pdp.^%¹&{ç·ÃËÅ~ug©½¤×0HÌ?¾Lú@Š-\mÍRûa¦€¾ð%0™K\íüË!P„5³4iˆ•Ï»0æöS“íyr|)¯wž˜fði^Á¼â1ÞðX§"¨a±#Ùà\I¨ÅÝß)‰&ZMÈ(Ì ÿs¨¡Ójb//Óè2œä$ ò@ÔV²×ÝyF NFéL'©`Ú9`=_'ªðlÈq¯È-ž+°€¬«éhnfé×®ÉPÒÊtdÂÁs˜ „gðV\¯ãç~WJ΄Ï-_ÊåèçYtƒG0Üa¾ôû/9î #%ú3ɹýÁ‹ð/™BùE²wøÀ’&3iŒ@ä)Õ¡ÔK%{/Âé$ÎJe™î àáj¬áë×ñÕc’çRˆ…“!ä=0‰WŠ`¦"ø¤‰¹„]þ>I.lË{/¦ioÆY&Yp>x¡øêLœ¼N³I•þ‡<…¶ €ØYež×‰щc/=˜‹%¿™I+áU’…vù^%½d)@Œ'“8_×ÃWÐÊHe¬ŒpE›X÷ÕÜb©(1o»H¯þ«”HÙ©`ß›eÆj¼#¥Ú_KÍ2&Š•àñ,Ó2fX•(^¡NÆ /©‰š ×X}¥tN•†$L“¬lkƒ| ^ž©GŒ–¸ÿ_ Mh­¼8M{ˆ6Á\d G`°îêŒqtŽaõÀ$ϹÂÊîþ!”#„Š(î¨À Óìqã½?Nû3cÕÌxŒ–âàO3®:W¿£ï°äŒ³þ *ÌmœSë#œMùD!sM ”sïO™2TÇM¯`ÿîõlkû·Ô¥:°ÚÀ= òùFš|‚M槺ˆüÔ¼Ø”Çæå‰yù̼üÒ¼|n^~e^~­_¼Oÿɾ}jßNíÛcûöľ}fß~iß>·o¿²o¶SÛÆ©mãÔ¶qjÛ8µmœÚ6Nm§¶SÛÆ©mã±mã±mã±mã±mã±mã±mã±mã±mã±mã±mã‰mã‰mã‰mã‰mã‰mã‰mã‰mã‰mã‰mã‰mã3hCü¯zþ™FxÝAÐvegan/R/0000755000176200001440000000000012122046276011555 5ustar liggesusersvegan/R/zzz.R0000644000176200001440000000037711617253210012540 0ustar liggesusers.onAttach <- function(lib, pkg) { packageStartupMessage("This is vegan ", utils::packageDescription("vegan", field="Version"), appendLF = TRUE) } vegan/R/wisconsin.R0000644000176200001440000000014410667741210013715 0ustar liggesusers"wisconsin" <- function (x) { x <- decostand(x, "max", 2) x <- decostand(x, "tot", 1) x } vegan/R/weights.rda.R0000644000176200001440000000077111250126553014122 0ustar liggesusers"weights.rda" <- function (object, display = "sites", ...) { display <- match.arg(display, c("sites", "species", "lc", "wa")) if (display %in% c("sites", "lc", "wa")) { n <- max(nrow(object$CA$Xbar), nrow(object$CCA$Xbar)) if (!is.null(object$na.action) && inherits(object$na.action, "exclude")) n <- n + length(object$na.action) } else n <- max(ncol(object$CA$Xbar), ncol(object$CCA$Xbar)) rep(1, n) } vegan/R/weights.decorana.R0000644000176200001440000000027410667741210015132 0ustar liggesusers"weights.decorana" <- function(object, display="sites", ...) { display <- match.arg(display, c("sites","species")) if (display == "sites") object$aidot else object$adotj } vegan/R/weights.cca.R0000644000176200001440000000074611250126553014104 0ustar liggesusers"weights.cca" <- function (object, display = "sites", ...) { display <- match.arg(display, c("sites", "species", "lc", "wa")) if (display %in% c("sites", "lc", "wa")) { if (!is.null(object$na.action) && inherits(object$na.action, "exclude")) { object$rowsum <- napredict(object$na.action, object$rowsum) object$rowsum[object$na.action] <- object$rowsum.excluded } object$rowsum } else object$colsum } vegan/R/wcmdscale.R0000644000176200001440000000376212116653256013657 0ustar liggesusers`wcmdscale` <- function(d, k, eig = FALSE, add = FALSE, x.ret = FALSE, w) { weight.centre <- function(x, w) { w.c <- apply(x, 2, weighted.mean, w = w) x <- sweep(x, 2, w.c, "-") x } if (add) .NotYetUsed("add") ## Force eig=TRUE if add, x.ret or !missing(w) if(x.ret) eig <- TRUE ZERO <- sqrt(.Machine$double.eps) if (!inherits(d, "dist")) { op <- options(warn = 2) on.exit(options(op)) d <- as.dist(d) options(op) } m <- as.matrix(d^2) n <- nrow(m) if (missing(w)) w <- rep(1, n) m <- weight.centre(m, w) m <- t(weight.centre(t(m), w)) m <- m * sqrt(w) %o% sqrt(w) e <- eigen(-m/2, symmetric = TRUE) ## Remove zero eigenvalues, keep negative keep <- abs(e$values) > ZERO e$values <- e$values[keep] e$vectors <- e$vectors[, keep, drop = FALSE] ## Deweight and scale axes -- also negative points <- sweep(e$vectors, 1, sqrt(w), "/") points <- sweep(points, 2, sqrt(abs(e$values)), "*") rownames(points) <- rownames(m) ## If 'k' not given, find it as the number of positive ## eigenvalues, and also save negative eigenvalues negaxes <- NULL if (missing(k) || k > sum(e$value > ZERO)) { k <- sum(e$values > ZERO) if (any(e$values < 0)) negaxes <- points[, e$values < 0, drop = FALSE] } points <- points[, 1:k, drop=FALSE] points[!is.finite(points)] <- NA ## Goodness of fit ev <- e$values[1:k] ev <- ev[ev > 0] ## GOF for real and all axes GOF <- c(sum(ev)/sum(abs(e$values)), sum(ev)/sum(e$values[e$values > 0])) if (eig || x.ret) { colnames(points) <- paste("Dim", seq_len(NCOL(points)), sep="") out <- list(points = points, eig = if (eig) e$values, x = if (x.ret) m, ac = NA, GOF = GOF, weights = w, negaxes = negaxes, call = match.call()) class(out) <- "wcmdscale" } else out <- points out } vegan/R/wascores.R0000644000176200001440000000205711510331715013525 0ustar liggesusers`wascores` <- function (x, w, expand = FALSE) { if(any(w < 0) || sum(w) == 0) stop("weights must be non-negative and not all zero") x <- as.matrix(x) w <- as.matrix(w) nc <- ncol(x) nr <- ncol(w) wa <- matrix(NA, nrow = nr, ncol = nc) colnames(wa) <- colnames(x) rownames(wa) <- colnames(w) for (i in 1:nr) { wa[i, ] <- apply(x, 2, weighted.mean, w = w[, i]) } if (expand) { i <- complete.cases(wa) x.w <- rowSums(w) ewa.w <- colSums(w[,i, drop=FALSE]) ewa <- wa[i,, drop=FALSE] x.cov <- cov.wt(x, x.w) wa.cov <- cov.wt(ewa, ewa.w) x.cov$cov <- x.cov$cov * (1 - sum(x.cov$wt^2)) wa.cov$cov <- wa.cov$cov * (1 - sum(wa.cov$wt^2)) mul <- sqrt(diag(x.cov$cov)/diag(wa.cov$cov)) ewa <- sweep(ewa, 2, wa.cov$center, "-") ewa <- sweep(ewa, 2, mul, "*") ewa <- sweep(ewa, 2, wa.cov$center, "+") wa[i,] <- ewa attr(wa, "shrinkage") <- 1/mul^2 attr(wa, "centre") <- wa.cov$center } wa } vegan/R/vif.cca.R0000644000176200001440000000053011471155135013210 0ustar liggesusers`vif.cca` <- function(object) { Q <- object$CCA$QR out <- rep(NA, NCOL(Q$qr)) names(out)[Q$pivot] <- colnames(Q$qr) rank <- Q$rank V <- chol2inv(Q$qr, size = rank) X <- qr.X(Q)[, Q$pivot[1:rank], drop=FALSE] Vi <- crossprod(X) v1 <- diag(V) v2 <- diag(Vi) out[Q$pivot[1:rank]] <- v1 * v2 out } vegan/R/veiledspec.R0000644000176200001440000000045610667741210014032 0ustar liggesusers"veiledspec" <- function(x, ...) { if (!inherits(x, "prestonfit")) x <- prestonfit(x) S.obs <- sum(x$freq) p <- x$coefficients S.tot <- p["S0"]*p["width"]*sqrt(2*pi) out <- c(S.tot, S.obs, S.tot - S.obs) names(out) <- c("Extrapolated","Observed","Veiled") out } vegan/R/vegemite.R0000644000176200001440000001002312110164631013472 0ustar liggesusers`vegemite` <- function (x, use, scale, sp.ind = NULL, site.ind = NULL, zero = ".", select, ...) { if (!missing(use)) { if (!is.list(use) && is.vector(use)) { if (is.null(site.ind)) site.ind <- order(use) if (is.null(sp.ind)) sp.ind <- order(wascores(use, x)) } else if (inherits(use, c("hclust", "twins"))) { if (inherits(use, "twins")) { require(cluster) || stop("package cluster needed for 'use'") use <- as.hclust(use) } if (is.null(site.ind)) site.ind <- use$order if (is.null(sp.ind)) sp.ind <- order(wascores(order(site.ind), x)) } else if (inherits(use, "dendrogram")) { if (is.null(site.ind)) { site.ind <- 1:nrow(x) names(site.ind) <- rownames(x) site.ind <- site.ind[labels(use)] } if (is.null(sp.ind)) sp.ind <- order(wascores(order(site.ind), x)) } else if (is.list(use)) { tmp <- scores(use, choices = 1, display = "sites") if (is.null(site.ind)) site.ind <- order(tmp) if (is.null(sp.ind)) sp.ind <- try(order(scores(use, choices = 1, display = "species"))) if (inherits(sp.ind, "try-error")) sp.ind <- order(wascores(tmp, x)) } else if (is.matrix(use)) { tmp <- scores(use, choices = 1, display = "sites") if (is.null(site.ind)) site.ind <- order(tmp) if (is.null(sp.ind)) sp.ind <- order(wascores(tmp, x)) } } if (!is.null(sp.ind) && is.logical(sp.ind)) sp.ind <- (1:ncol(x))[sp.ind] if (!is.null(site.ind) && is.logical(site.ind)) site.ind <- (1:nrow(x))[site.ind] if (is.null(sp.ind)) sp.ind <- 1:ncol(x) if (is.null(site.ind)) site.ind <- 1:nrow(x) if (!missing(select)) { if (!is.logical(select)) select <- sort(site.ind) %in% select stake <- colSums(x[select, , drop = FALSE]) > 0 site.ind <- site.ind[select[site.ind]] site.ind <- site.ind[!is.na(site.ind)] } else { stake <- colSums(x[site.ind, ]) > 0 } sp.ind <- sp.ind[stake[sp.ind]] x <- x[site.ind, sp.ind] if (!missing(scale)) x <- coverscale(x, scale, ...) usedscale <- attr(x, "scale") if (any(apply(x, 1, nchar) > 1)) stop("Cowardly refusing to use longer than 1 char symbols:\nUse scale") x <- as.matrix(x) x <- t(x) sp.nam <- rownames(x) sp.len <- max(nchar(sp.nam)) nst <- ncol(x) page.width <- getOption("width") per.page <- page.width - sp.len - 3 istart <- seq(1, nst, by = per.page) iend <- pmin(istart + per.page - 1, nst) for (st in 1:length(istart)) { tbl <- apply(x[, istart[st]:iend[st], drop = FALSE], 1, paste, sep = "", collapse = "") names(tbl) <- NULL tbl <- gsub("0", zero, tbl) tbl <- cbind(sp.nam, tbl) st.nam <- colnames(x)[istart[st]:iend[st]] nlen <- max(nchar(st.nam)) mathead <- matrix(" ", nrow = length(st.nam), ncol = nlen) for (i in 1:length(st.nam)) { tmp <- unlist(strsplit(st.nam[i], NULL)) start <- nlen - length(tmp) + 1 mathead[i, start:nlen] <- tmp } head <- cbind(apply(mathead, 2, paste, sep = "", collapse = "")) tbl <- rbind(cbind(matrix(" ", nrow = nrow(head), 1), head), tbl) d <- list() l <- 0 for (i in dim(tbl)) { d[[l <- l + 1]] <- rep("", i) } dimnames(tbl) <- d print(noquote(tbl)) } out <- list(sites = site.ind, species = sp.ind) print(sapply(out, length)) if (!is.null(usedscale)) cat("scale: ", usedscale, "\n") invisible(out) } vegan/R/vegdist.R0000644000176200001440000000427311722445261013355 0ustar liggesusers`vegdist` <- function (x, method = "bray", binary = FALSE, diag = FALSE, upper = FALSE, na.rm = FALSE, ...) { ZAP <- 1e-15 if (!is.na(pmatch(method, "euclidian"))) method <- "euclidean" METHODS <- c("manhattan", "euclidean", "canberra", "bray", "kulczynski", "gower", "morisita", "horn", "mountford", "jaccard", "raup", "binomial", "chao", "altGower", "cao") method <- pmatch(method, METHODS) inm <- METHODS[method] if (is.na(method)) stop("invalid distance method") if (method == -1) stop("ambiguous distance method") if (method > 2 && any(rowSums(x, na.rm = TRUE) == 0)) warning("you have empty rows: their dissimilarities may be meaningless in method ", dQuote(inm)) if (method > 2 && any(x < 0, na.rm = TRUE)) warning("results may be meaningless because data have negative entries in method ", dQuote(inm)) if (method == 11 && any(colSums(x) == 0)) warning("data have empty species which influence the results im method ", dQuote(inm)) if (method == 6) # gower, but no altGower x <- decostand(x, "range", 2, na.rm = TRUE, ...) if (binary) x <- decostand(x, "pa") N <- nrow(x <- as.matrix(x)) if (method %in% c(7, 13, 15) && !identical(all.equal(as.integer(x), as.vector(x)), TRUE)) warning("results may be meaningless with non-integer data in method ", dQuote(inm)) d <- .C("veg_distance", x = as.double(x), nr = N, nc = ncol(x), d = double(N * (N - 1)/2), diag = as.integer(FALSE), method = as.integer(method), NAOK = na.rm, PACKAGE = "vegan")$d if (method == 10) d <- 2 * d/(1 + d) d[d < ZAP] <- 0 if (any(is.na(d))) warning("missing values in results") attr(d, "Size") <- N attr(d, "Labels") <- dimnames(x)[[1]] attr(d, "Diag") <- diag attr(d, "Upper") <- upper attr(d, "method") <- paste(if (binary) "binary ", METHODS[method], sep = "") attr(d, "call") <- match.call() class(d) <- "dist" d } vegan/R/vegandocs.R0000644000176200001440000000232011630473022013642 0ustar liggesusers`vegandocs` <- function (doc = c("NEWS", "ONEWS", "ChangeLog", "FAQ-vegan.pdf", "intro-vegan.pdf", "diversity-vegan.pdf", "decision-vegan.pdf", "partitioning.pdf", "permutations.pdf")) { doc <- match.arg(doc) if (length(grep(".pdf", doc)) > 0) { if (doc == "permutations.pdf") doc <- file.path(system.file(package="permute"), "doc", doc) else doc <- file.path(system.file(package="vegan"), "doc", doc) if (.Platform$OS.type == "windows") shell.exec(doc) else system(paste(getOption("pdfviewer"), doc, "&")) } else if (doc == "NEWS") { ## Try html helptype <- getOption("help_type") if (length(helptype) && helptype == "html") { if (!tools:::httpdPort) tools:::startDynamicHelp() browseURL(paste("http://127.0.0.1:", tools:::httpdPort, "/library/vegan/doc/NEWS.html", sep="")) } else { file.show(tools:::Rd2txt(file.path(system.file(package="vegan"), "NEWS.Rd"), tempfile())) } } else { file.show(system.file(package="vegan", doc)) } } vegan/R/veganCovEllipse.R0000644000176200001440000000052111420767336014773 0ustar liggesusers`veganCovEllipse` <- function(cov, center = c(0,0), scale = 1, npoints = 100) { ## Basically taken from the 'car' package: The Cirlce theta <- (0:npoints) * 2 * pi/npoints Circle <- cbind(cos(theta), sin(theta)) ## scale, center and cov must be calculated separately t(center + scale * t(Circle %*% chol(cov))) } vegan/R/vegan-deprecated.R0000644000176200001440000000025511626473631015107 0ustar liggesusers`metaMDSrotate` <- function(object, vec, na.rm = FALSE, ...) { .Deprecated(new="MDSrotate", "vegan") MDSrotate(object = object, vec = vec, na.rm = na.rm, ...) } vegan/R/vegan-defunct.R0000644000176200001440000000051111631630555014426 0ustar liggesusers## "new" permutation code was moved to package 'permute' in R 2.0-0. ## Here we list as defunct those functions that are not in 'permute'. `permuted.index2` <- function (n, control = permControl()) .Defunct("permute::shuffle", package="vegan") `getNumObs` <- function(object, ...) .Defunct("nobs", package = "vegan") vegan/R/vectorfit.R0000644000176200001440000000342611377454460013723 0ustar liggesusers"vectorfit" <- function (X, P, permutations = 0, strata, w, ...) { if (missing(w) || is.null(w)) w <- 1 if (length(w) == 1) w <- rep(w, nrow(X)) Xw <- .C("wcentre", x = as.double(X), as.double(w), as.integer(nrow(X)), as.integer(ncol(X)), PACKAGE = "vegan")$x dim(Xw) <- dim(X) P <- as.matrix(P) Pw <- .C("wcentre", x = as.double(P), as.double(w), as.integer(nrow(P)), as.integer(ncol(P)), PACKAGE = "vegan")$x dim(Pw) <- dim(P) colnames(Pw) <- colnames(P) nc <- ncol(X) Q <- qr(Xw) H <- qr.fitted(Q, Pw) heads <- qr.coef(Q, Pw) r <- diag(cor(H, Pw)^2) heads <- decostand(heads, "norm", 2) heads <- t(heads) if (is.null(colnames(X))) colnames(heads) <- paste("Dim", 1:nc, sep = "") else colnames(heads) <- colnames(X) if (permutations) { nr <- nrow(X) permstore <- matrix(nrow = permutations, ncol = ncol(P)) for (i in 1:permutations) { indx <- permuted.index(nrow(P), strata) take <- P[indx, , drop = FALSE] take <- .C("wcentre", x = as.double(take), as.double(w), as.integer(nrow(take)), as.integer(ncol(take)), PACKAGE = "vegan")$x dim(take) <- dim(P) Hperm <- qr.fitted(Q, take) permstore[i, ] <- diag(cor(Hperm, take))^2 } permstore <- sweep(permstore, 2, r, ">") pvals <- (apply(permstore, 2, sum) + 1)/(permutations + 1) } else pvals <- NULL sol <- list(arrows = heads, r = r, permutations = permutations, pvals = pvals) if (!missing(strata)) { sol$strata <- deparse(substitute(strata)) sol$stratum.values <- strata } class(sol) <- "vectorfit" sol } vegan/R/varpart4.R0000644000176200001440000002654311711171341013450 0ustar liggesusers"varpart4" <- function (Y, X1, X2, X3, X4) { Y <- as.matrix(Y) X1 <- as.matrix(X1) X2 <- as.matrix(X2) X3 <- as.matrix(X3) X4 <- as.matrix(X4) n <- nrow(Y) n1 <- nrow(X1) n2 <- nrow(X2) n3 <- nrow(X3) n4 <- nrow(X4) p <- ncol(Y) mm1 <- ncol(X1) mm2 <- ncol(X2) mm3 <- ncol(X3) mm4 <- ncol(X4) if (n1 != n) stop("Y and X1 do not have the same number of rows") if (n2 != n) stop("Y and X2 do not have the same number of rows") if (n3 != n) stop("Y and X3 do not have the same number of rows") if (n4 != n) stop("Y and X4 do not have the same number of rows") Y <- scale(Y, center = TRUE, scale = FALSE) X1 <- scale(X1, center = TRUE, scale = FALSE) X2 <- scale(X2, center = TRUE, scale = FALSE) X3 <- scale(X3, center = TRUE, scale = FALSE) X4 <- scale(X4, center = TRUE, scale = FALSE) SS.Y <- sum(Y * Y) dummy <- simpleRDA2(Y, X1, SS.Y) aeghklno.ua <- dummy$Rsquare m1 <- dummy$m if (m1 != mm1) warning("collinearity detected in X1: mm = ", mm1, ", m = ", m1, call. = FALSE) dummy <- simpleRDA2(Y, X2, SS.Y) befiklmo.ua <- dummy$Rsquare m2 <- dummy$m if (m2 != mm2) warning("collinearity detected in X2: mm = ", mm2, ", m = ", m2, call. = FALSE) dummy <- simpleRDA2(Y, X3, SS.Y) cfgjlmno.ua <- dummy$Rsquare m3 <- dummy$m if (m3 != mm3) warning("collinearity detected in X3: mm = ", mm3, ", m = ", m3, call. = FALSE) dummy <- simpleRDA2(Y, X4, SS.Y) dhijkmno.ua <- dummy$Rsquare m4 <- dummy$m if (m4 != mm4) warning("collinearity detected in X4: mm = ", mm4, ", m = ", m4, call. = FALSE) mm5 = mm1 + mm2 dummy <- simpleRDA2(Y, cbind(X1, X2), SS.Y) abefghiklmno.ua <- dummy$Rsquare m5 <- dummy$m if (m5 != mm5) warning("collinearity detected in cbind(X1,X2): mm = ", mm5, ", m = ", m5, call. = FALSE) mm6 = mm1 + mm3 dummy <- simpleRDA2(Y, cbind(X1, X3), SS.Y) acefghjklmno.ua <- dummy$Rsquare m6 <- dummy$m if (m6 != mm6) warning("collinearity detected in cbind(X1,X3): mm = ", mm6, ", m = ", m6, call. = FALSE) mm7 = mm1 + mm4 dummy <- simpleRDA2(Y, cbind(X1, X4), SS.Y) adeghijklmno.ua <- dummy$Rsquare m7 <- dummy$m if (m7 != mm7) warning("collinearity detected in cbind(X1,X4): mm = ", mm7, ", m = ", m7, call. = FALSE) mm8 = mm2 + mm3 dummy <- simpleRDA2(Y, cbind(X2, X3), SS.Y) bcefgijklmno.ua <- dummy$Rsquare m8 <- dummy$m if (m8 != mm8) warning("collinearity detected in cbind(X2,X3): mm = ", mm8, ", m = ", m8, call. = FALSE) mm9 = mm2 + mm4 dummy <- simpleRDA2(Y, cbind(X2, X4), SS.Y) bdefhijklmno.ua <- dummy$Rsquare m9 <- dummy$m if (m9 != mm9) warning("collinearity detected in cbind(X2,X4): mm = ", mm9, ", m = ", m9, call. = FALSE) mm10 = mm3 + mm4 dummy <- simpleRDA2(Y, cbind(X3, X4), SS.Y) cdfghijklmno.ua <- dummy$Rsquare m10 <- dummy$m if (m10 != mm10) warning("collinearity detected in cbind(X3,X4): mm = ", mm10, ", m = ", m10, call. = FALSE) mm11 = mm1 + mm2 + mm3 dummy <- simpleRDA2(Y, cbind(X1, X2, X3), SS.Y) abcefghijklmno.ua <- dummy$Rsquare m11 <- dummy$m if (m11 != mm11) warning("collinearity detected in cbind(X1,X2,X3): mm = ", mm11, ", m = ", m11, call. = FALSE) mm12 = mm1 + mm2 + mm4 dummy <- simpleRDA2(Y, cbind(X1, X2, X4), SS.Y) abdefghijklmno.ua <- dummy$Rsquare m12 <- dummy$m if (m12 != mm12) warning("collinearity detected in cbind(X1,X2,X4): mm = ", mm12, ", m = ", m12, call. = FALSE) mm13 = mm1 + mm3 + mm4 dummy <- simpleRDA2(Y, cbind(X1, X3, X4), SS.Y) acdefghijklmno.ua <- dummy$Rsquare m13 <- dummy$m if (m13 != mm13) warning("collinearity detected in cbind(X1,X3,X4): mm = ", mm13, ", m = ", m13, call. = FALSE) mm14 = mm2 + mm3 + mm4 dummy <- simpleRDA2(Y, cbind(X2, X3, X4), SS.Y) bcdefghijklmno.ua <- dummy$Rsquare m14 <- dummy$m if (m14 != mm14) warning("collinearity detected in cbind(X2,X3,X4): mm = ", mm14, ", m = ", m14, call. = FALSE) mm15 = mm1 + mm2 + mm3 + mm4 dummy <- simpleRDA2(Y, cbind(X1, X2, X3, X4), SS.Y) abcdefghijklmno.ua <- dummy$Rsquare m15 <- dummy$m if (m15 != mm15) warning("collinearity detected in cbind(X1,X2,X3,X4): mm = ", mm15, ", m = ", m15, call. = FALSE) bigwarning <- NULL if ((m1 + m2) > m5) bigwarning <- c(bigwarning, c("X1, X2")) if ((m1 + m3) > m6) bigwarning <- c(bigwarning, c("X1, X3")) if ((m1 + m4) > m7) bigwarning <- c(bigwarning, c("X1, X4")) if ((m2 + m3) > m8) bigwarning <- c(bigwarning, c("X2, X3")) if ((m2 + m4) > m9) bigwarning <- c(bigwarning, c("X2, X4")) if ((m3 + m4) > m10) bigwarning <- c(bigwarning, c("X3, X4")) if ((m1 + m2 + m3) > m11) bigwarning <- c(bigwarning, c("X1, X2, X3")) if ((m1 + m2 + m4) > m12) bigwarning <- c(bigwarning, c("X1, X2, X4")) if ((m1 + m3 + m4) > m13) bigwarning <- c(bigwarning, c("X1, X3, X4")) if ((m2 + m3 + m4) > m14) bigwarning <- c(bigwarning, c("X2, X3, X4")) if ((m1 + m2 + m3 + m4) > m15) bigwarning <- c(bigwarning, c("X1, X2, X3, X4")) aeghklno <- RsquareAdj(aeghklno.ua, n, m1) befiklmo <- RsquareAdj(befiklmo.ua, n, m2) cfgjlmno <- RsquareAdj(cfgjlmno.ua, n, m3) dhijkmno <- RsquareAdj(dhijkmno.ua, n, m4) abefghiklmno <- RsquareAdj(abefghiklmno.ua, n, m5) acefghjklmno <- RsquareAdj(acefghjklmno.ua, n, m6) adeghijklmno <- RsquareAdj(adeghijklmno.ua, n, m7) bcefgijklmno <- RsquareAdj(bcefgijklmno.ua, n, m8) bdefhijklmno <- RsquareAdj(bdefhijklmno.ua, n, m9) cdfghijklmno <- RsquareAdj(cdfghijklmno.ua, n, m10) abcefghijklmno <- RsquareAdj(abcefghijklmno.ua, n, m11) abdefghijklmno <- RsquareAdj(abdefghijklmno.ua, n, m12) acdefghijklmno <- RsquareAdj(acdefghijklmno.ua, n, m13) bcdefghijklmno <- RsquareAdj(bcdefghijklmno.ua, n, m14) abcdefghijklmno <- RsquareAdj(abcdefghijklmno.ua, n, m15) Df <- c(m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15) fract <- data.frame(Df = Df, R.square = c(aeghklno.ua, befiklmo.ua, cfgjlmno.ua, dhijkmno.ua, abefghiklmno.ua, acefghjklmno.ua, adeghijklmno.ua, bcefgijklmno.ua, bdefhijklmno.ua, cdfghijklmno.ua, abcefghijklmno.ua, abdefghijklmno.ua, acdefghijklmno.ua, bcdefghijklmno.ua, abcdefghijklmno.ua), Adj.R.square = c(aeghklno, befiklmo, cfgjlmno, dhijkmno, abefghiklmno, acefghjklmno, adeghijklmno, bcefgijklmno, bdefhijklmno, cdfghijklmno, abcefghijklmno, abdefghijklmno, acdefghijklmno, bcdefghijklmno, abcdefghijklmno), Testable = rep(TRUE, 15) & Df) rownames(fract) <- c("[aeghklno] = X1", "[befiklmo] = X2", "[cfgjlmno] = X3", "[dhijkmno] = X4", "[abefghiklmno] = X1+X2", "[acefghjklmno] = X1+X3", "[adeghijklmno] = X1+X4", "[bcefgijklmno] = X2+X3", "[bdefhijklmno] = X2+X4", "[cdfghijklmno] = X3+X4", "[abcefghijklmno] = X1+X2+X3", "[abdefghijklmno] = X1+X2+X4", "[acdefghijklmno] = X1+X3+X4", "[bcdefghijklmno] = X2+X3+X4", "[abcdefghijklmno] = All") ae = acdefghijklmno - cdfghijklmno ag = abdefghijklmno - bdefhijklmno ah = abcefghijklmno - bcefgijklmno be = bcdefghijklmno - cdfghijklmno bf = abdefghijklmno - adeghijklmno bi = abcefghijklmno - acefghjklmno cf = acdefghijklmno - adeghijklmno cg = bcdefghijklmno - bdefhijklmno cj = abcefghijklmno - abefghiklmno dh = bcdefghijklmno - bcefgijklmno di = acdefghijklmno - acefghjklmno dj = abdefghijklmno - abefghiklmno Df <- c(m13-m10, m12-m9, m11-m8, m14-m10, m12-m7, m11-m6, m13-m7, m14-m9, m11-m5, m14-m8, m13-m6, m12-m5) contr2 <- data.frame(Df = Df, R.square = rep(NA, 12), Adj.R.square = c(ae, ag, ah, be, bf, bi, cf, cg, cj, dh, di, dj), Testable = rep(TRUE, 12) & Df) rownames(contr2) <- c("[ae] = X1 | X3+X4", "[ag] = X1 | X2+X4", "[ah] = X1 | X2+X3", "[be] = X2 | X3+X4", "[bf] = X2 | X1+X4", "[bi] = X2 | X1+X3", "[cf] = X3 | X1+X4", "[cg] = X3 | X2+X4", "[cj] = X3 | X1+X2", "[dh] = X4 | X2+X3", "[di] = X4 | X1+X3", "[dj] = X4 | X1+X2") aghn = abefghiklmno - befiklmo aehk = acefghjklmno - cfgjlmno aegl = adeghijklmno - dhijkmno bfim = abefghiklmno - aeghklno beik = bcefgijklmno - cfgjlmno befl = bdefhijklmno - dhijkmno cfjm = acefghjklmno - aeghklno cgjn = bcefgijklmno - befiklmo cfgl = cdfghijklmno - dhijkmno dijm = adeghijklmno - aeghklno dhjn = bdefhijklmno - befiklmo dhik = cdfghijklmno - cfgjlmno Df <- c(m5-m2, m6-m3, m7-m4, m5-m1, m8-m3, m9-m4, m6-m1, m8-m2, m10-m4, m7-m1, m9-m2, m10-m3) contr1 <- data.frame(Df = Df, R.square = rep(NA, 12), Adj.R.square = c(aghn, aehk, aegl, bfim, beik, befl, cfjm, cgjn, cfgl, dijm, dhjn, dhik), Testable = rep(TRUE, 12) & Df) rownames(contr1) <- c("[aghn] = X1 | X2", "[aehk] = X1 | X3", "[aegl] = X1 | X4", "[bfim] = X2 | X1", "[beik] = X2 | X3", "[befl] = X2 | X4", "[cfjm] = X3 | X1", "[cgjn] = X3 | X2", "[cfgl] = X3 | X4", "[dijm] = X4 | X1 ", "[dhjn] = X4 | X2", "[dhik] = X4 | X3") a <- abcdefghijklmno - bcdefghijklmno b <- abcdefghijklmno - acdefghijklmno c <- abcdefghijklmno - abdefghijklmno d <- abcdefghijklmno - abcefghijklmno e <- ae - a f <- bf - b g <- ag - a h <- ah - a i <- bi - b j <- cj - c k <- aehk - ae - h l <- aegl - ae - g m <- bfim - bf - i n <- aghn - ag - h o <- aeghklno - aehk - g - l - n indfract <- data.frame(Df = c(m15-m14, m15-m13, m15-m12, m15-m11, rep(0, 12)), R.square = rep(NA, 16), Adj.R.square = c(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, 1 - abcdefghijklmno), Testable = c(rep(TRUE, 4), rep(FALSE, 12))) rownames(indfract) <- c("[a] = X1 | X2+X3+X4", "[b] = X2 | X1+X3+X4", "[c] = X3 | X1+X2+X4", "[d] = X4 | X1+X2+X3", "[e]", "[f]", "[g]", "[h]", "[i]", "[j]", "[k]", "[l]", "[m]", "[n]", "[o]", "[p] = Residuals") out <- list(fract = fract, indfract = indfract, contr1 = contr1, contr2 = contr2, SS.Y = SS.Y, nsets = 4, bigwarning = bigwarning, n = n1) class(out) <- "varpart234" out } vegan/R/varpart3.R0000644000176200001440000001172511711171341013443 0ustar liggesusers"varpart3" <- function (Y, X1, X2, X3) { Y <- as.matrix(Y) X1 <- as.matrix(X1) X2 <- as.matrix(X2) X3 <- as.matrix(X3) n <- nrow(Y) n1 <- nrow(X1) n2 <- nrow(X2) n3 <- nrow(X3) p <- ncol(Y) mm1 <- ncol(X1) mm2 <- ncol(X2) mm3 <- ncol(X3) if (n1 != n) stop("Y and X1 do not have the same number of rows") if (n2 != n) stop("Y and X2 do not have the same number of rows") if (n3 != n) stop("Y and X3 do not have the same number of rows") Y <- scale(Y, center = TRUE, scale = FALSE) X1 <- scale(X1, center = TRUE, scale = FALSE) X2 <- scale(X2, center = TRUE, scale = FALSE) X3 <- scale(X3, center = TRUE, scale = FALSE) SS.Y <- sum(Y * Y) dummy <- simpleRDA2(Y, X1, SS.Y, mm1) adfg.ua <- dummy$Rsquare m1 <- dummy$m if (m1 != mm1) warning("collinearity detected in X1: mm = ", mm1, ", m = ", m1, call. = FALSE) dummy <- simpleRDA2(Y, X2, SS.Y, mm2) bdeg.ua <- dummy$Rsquare m2 <- dummy$m if (m2 != mm2) warning("collinearity detected in X2: mm = ", mm2, ", m = ", m2, call. = FALSE) dummy <- simpleRDA2(Y, X3, SS.Y, mm3) cefg.ua <- dummy$Rsquare m3 <- dummy$m if (m3 != mm3) warning("collinearity detected in X3: mm =", mm3, ", m =", m3, call. = FALSE) mm4 = mm1 + mm2 dummy <- simpleRDA2(Y, cbind(X1, X2), SS.Y, mm4) abdefg.ua <- dummy$Rsquare m4 <- dummy$m if (m4 != mm4) warning("collinearity detected in cbind(X1,X2): mm = ", mm4, ", m = ", m4, call. = FALSE) mm5 = mm1 + mm3 dummy <- simpleRDA2(Y, cbind(X1, X3), SS.Y, mm5) acdefg.ua <- dummy$Rsquare m5 <- dummy$m if (m5 != mm5) warning("collinearity detected in cbind(X1,X3): mm = ", mm5, ", m = ", m5, call. = FALSE) mm6 = mm2 + mm3 dummy <- simpleRDA2(Y, cbind(X2, X3), SS.Y, mm6) bcdefg.ua <- dummy$Rsquare m6 <- dummy$m if (m6 != mm6) warning("collinearity detected in cbind(X2,X3): mm = ", mm6, ", m = ", m6, call. = FALSE) mm7 = mm1 + mm2 + mm3 dummy <- simpleRDA2(Y, cbind(X1, X2, X3), SS.Y, mm7) abcdefg.ua <- dummy$Rsquare m7 <- dummy$m if (m7 != mm7) warning("collinearity detected in cbind(X1,X2,X3): mm = ", mm7, ", m = ", m7, call. = FALSE) bigwarning <- NULL if ((m1 + m2) > m4) bigwarning <- c(bigwarning, c("X1, X2")) if ((m1 + m3) > m5) bigwarning <- c(bigwarning, c("X1, X3")) if ((m2 + m3) > m6) bigwarning <- c(bigwarning, c("X2, X3")) if ((m1 + m2 + m3) > m7) bigwarning <- c(bigwarning, c("X1, X2, X3")) adfg <- RsquareAdj(adfg.ua, n, m1) bdeg <- RsquareAdj(bdeg.ua, n, m2) cefg <- RsquareAdj(cefg.ua, n, m3) abdefg <- RsquareAdj(abdefg.ua, n, m4) acdefg <- RsquareAdj(acdefg.ua, n, m5) bcdefg <- RsquareAdj(bcdefg.ua, n, m6) abcdefg <- RsquareAdj(abcdefg.ua, n, m7) Df <- c(m1, m2, m3, m4, m5, m6, m7) fract <- data.frame(Df = Df, R.square = c(adfg.ua, bdeg.ua, cefg.ua, abdefg.ua, acdefg.ua, bcdefg.ua, abcdefg.ua), Adj.R.square = c(adfg, bdeg, cefg, abdefg, acdefg, bcdefg, abcdefg), Testable = rep(TRUE, 7) & Df) rownames(fract) <- c("[a+d+f+g] = X1", "[b+d+e+g] = X2", "[c+e+f+g] = X3", "[a+b+d+e+f+g] = X1+X2", "[a+c+d+e+f+g] = X1+X3", "[b+c+d+e+f+g] = X2+X3", "[a+b+c+d+e+f+g] = All") a <- abcdefg - bcdefg b <- abcdefg - acdefg c <- abcdefg - abdefg d <- acdefg - cefg - a e <- abdefg - adfg - b f <- bcdefg - bdeg - c g <- adfg - a - d - f ma <- m7 - m6 mb <- m7 - m5 mc <- m7 - m4 mad <- m5 - m3 maf <- m4 - m2 mbd <- m6 - m3 mbe <- m4 - m1 mce <- m5 - m1 mcf <- m6 - m2 Df <- c(ma, mb, mc, rep(0, 4), NA) indfract <- data.frame(Df = Df, R.square = rep(NA, 8), Adj.R.square = c(a, b, c, d, e, f, g, 1 - abcdefg), Testable = c(rep(TRUE, 3), rep(FALSE, 5)) & Df) rownames(indfract) <- c("[a] = X1 | X2+X3", "[b] = X2 | X1+X3", "[c] = X3 | X1+X2", "[d]", "[e]", "[f]", "[g]", "[h] = Residuals") Df <- c(mad, maf, mbd, mbe, mce, mcf) contr1 <- data.frame(Df = Df, R.square = rep(NA, 6), Adj.R.square = c(a + d, a + f, b + d, b + e, c + e, c + f), Testable = rep(TRUE, 6) & Df) rownames(contr1) <- c("[a+d] = X1 | X3", "[a+f] = X1 | X2", "[b+d] = X2 | X3", "[b+e] = X2 | X1", "[c+e] = X3 | X1", "[c+f] = X3 | X2") out <- list(fract = fract, indfract = indfract, contr1 = contr1, SS.Y = SS.Y, nsets = 3, bigwarning = bigwarning, n = n1) class(out) <- "varpart234" out } vegan/R/varpart2.R0000644000176200001440000000433411711171341013440 0ustar liggesusers"varpart2" <- function (Y, X1, X2) { Y <- as.matrix(Y) X1 <- as.matrix(X1) X2 <- as.matrix(X2) n <- nrow(Y) n1 <- nrow(X1) n2 <- nrow(X2) p <- ncol(Y) mm1 <- ncol(X1) mm2 <- ncol(X2) if (n1 != n) stop("Y and X1 do not have the same number of rows") if (n2 != n) stop("Y and X2 do not have the same number of rows") Y <- scale(Y, center = TRUE, scale = FALSE) X1 <- scale(X1, center = TRUE, scale = FALSE) X2 <- scale(X2, center = TRUE, scale = FALSE) SS.Y <- sum(Y * Y) dummy <- simpleRDA2(Y, X1, SS.Y, mm1) ab.ua <- dummy$Rsquare m1 <- dummy$m if (m1 != mm1) warning("collinearity detected in X1: mm = ", mm1, ", m = ", m1, call. = FALSE) dummy <- simpleRDA2(Y, X2, SS.Y, mm2) bc.ua <- dummy$Rsquare m2 <- dummy$m if (m2 != mm2) warning("collinearity detected in X2: mm = ", mm2, ", m = ", m2, call. = FALSE) mm3 <- mm1 + mm2 dummy <- simpleRDA2(Y, cbind(X1, X2), SS.Y, mm3) abc.ua <- dummy$Rsquare m3 <- dummy$m if (m3 != mm3) warning("collinearity detected in cbind(X1,X2): mm = ", mm3, ", m = ", m3, call. = FALSE) if ((m1 + m2) > m3) bigwarning <- c("X1, X2") else bigwarning <- NULL ab <- RsquareAdj(ab.ua, n, m1) bc <- RsquareAdj(bc.ua, n, m2) abc <- RsquareAdj(abc.ua, n, m3) Df <- c(m1, m2, m3) fract <- data.frame(Df = Df, R.squared = c(ab.ua, bc.ua, abc.ua), Adj.R.squared = c(ab, bc, abc), Testable = rep(TRUE, 3) & Df) rownames(fract) <- c("[a+b] = X1", "[b+c] = X2", "[a+b+c] = X1+X2") b <- ab + bc - abc Df <- c(m3-m2, 0, m3-m1, NA) indfract <- data.frame(Df = Df, R.squared = rep(NA, 4), Adj.R.squared = c(ab - b, b, bc - b, 1 - abc), Testable = c(TRUE, FALSE, TRUE, FALSE) & Df) rownames(indfract) <- c("[a] = X1|X2", "[b]", "[c] = X2|X1", "[d] = Residuals") out <- list(SS.Y = SS.Y, fract = fract, indfract = indfract, nsets = 2, bigwarning = bigwarning, n = n1) class(out) <- "varpart234" out } vegan/R/varpart.R0000644000176200001440000000350011026125503013346 0ustar liggesusers`varpart` <- function (Y, X, ..., data, transfo, scale = FALSE) { if (missing(data)) data <- parent.frame() X <- list(X, ...) if ((length(X) < 2 || length(X) > 4)) stop("needs 2 to 4 explanatory tables") if (!missing(transfo)) { Y <- decostand(Y, transfo) transfo <- attr(Y, "decostand") } if (!missing(transfo) && (is.null(dim(Y)) || ncol(Y) == 1)) warning("Transformations probably are meaningless to a single variable") if (scale && !missing(transfo)) warning("Y should not be both transformed and scaled (standardized)") Y <- scale(Y, center = TRUE, scale = scale) Sets <- list() for (i in 1:length(X)) { if (inherits(X[[i]], "formula")) { mf <- model.frame(X[[i]], data, na.action = na.fail, drop.unused.levels = TRUE) trms <- attr(mf, "terms") Sets[[i]] <- model.matrix(trms, mf) if (any(colnames(Sets[[i]]) == "(Intercept)")) { xint <- which(colnames(Sets[[i]]) == "(Intercept)") Sets[[i]] <- (Sets[[i]])[, -xint, drop = FALSE] } } else Sets[[i]] <- as.matrix(X[[i]]) Sets[[i]] <- scale(Sets[[i]], center = TRUE, scale = TRUE) } out <- list() out$part <- switch(length(Sets), NULL, varpart2(Y, Sets[[1]], Sets[[2]]), varpart3(Y, Sets[[1]], Sets[[2]], Sets[[3]]), varpart4(Y, Sets[[1]], Sets[[2]], Sets[[3]], Sets[[4]])) out$scale <- scale if (!missing(transfo)) out$transfo <- transfo out$call <- match.call() mx <- rep(" ", length(X)) for (i in 1:length(X)) mx[i] <- deparse(out$call[[i+2]], width.cutoff = 500) out$tables <- mx class(out) <- c("varpart", class(out)) out } vegan/R/tsallisaccum.R0000644000176200001440000000301011053007126014347 0ustar liggesuserstsallisaccum <- function (x, scales = seq(0, 2, 0.2), permutations = 100, raw = FALSE, ...) { x <- as.matrix(x) n <- nrow(x) p <- ncol(x) if (p == 1) { x <- t(x) n <- nrow(x) p <- ncol(x) } m <- length(scales) result <- array(dim = c(n, m, permutations)) dimnames(result) <- list(pooled.sites = c(1:n), scale = scales, permutation = c(1:permutations)) for (k in 1:permutations) { result[, , k] <- as.matrix(tsallis((apply(x[sample(n), ], 2, cumsum)), scales = scales, ...)) } if (raw) { if (m == 1) { result <- result[, 1, ] } } else { tmp <- array(dim = c(n, m, 6)) for (i in 1:n) { for (j in 1:m) { tmp[i, j, 1] <- mean(result[i, j, 1:permutations]) tmp[i, j, 2] <- sd(result[i, j, 1:permutations]) tmp[i, j, 3] <- min(result[i, j, 1:permutations]) tmp[i, j, 4] <- max(result[i, j, 1:permutations]) tmp[i, j, 5] <- quantile(result[i, j, 1:permutations], 0.025) tmp[i, j, 6] <- quantile(result[i, j, 1:permutations], 0.975) } } result <- tmp dimnames(result) <- list(pooled.sites = c(1:n), scale = scales, c("mean", "stdev", "min", "max", "Qnt 0.025", "Qnt 0.975")) } class(result) <- c("tsallisaccum", "renyiaccum", class(result)) result } vegan/R/tsallis.R0000644000176200001440000000271211401141513013342 0ustar liggesuserstsallis <- function (x, scales = seq(0, 2, 0.2), norm=FALSE, hill=FALSE) { if (norm && hill) stop("'norm = TRUE' and 'hill = TRUE' should not be used at the same time") x <- as.matrix(x) n <- nrow(x) p <- ncol(x) if (p == 1) { x <- t(x) n <- nrow(x) p <- ncol(x) } x <- decostand(x, "total", 1) m <- length(scales) result <- array(0, dim = c(n, m)) dimnames(result) <- list(sites = rownames(x), scale = scales) for (a in 1:m) { if (scales[a] != 1 && scales[a] != 0) { result[, a] <- (1-(apply(x^scales[a], 1, sum)))/(scales[a] - 1) } else { if (scales[a] == 1) result[, a] <- diversity(x, "shannon") if (scales[a] == 0) result[, a] <- rowSums(x > 0) - 1 } if (norm) { ST <- rowSums(x > 0) if (scales[a] == 1) result[, a] <- result[, a] / log(ST) else result[, a] <- result[, a] / ((ST^(1-scales[a]) - 1) / (1 - scales[a])) } if (hill) { result[, a] <- if (scales[a] == 1) { exp(result[, a]) } else { (1 - (scales[a] - 1) * result[, a])^(1/(1-scales[a])) } } } result <- as.data.frame(result) if (any(dim(result) == 1)) result <- unlist(result, use.names = TRUE) class(result) <- c("tsallis", "renyi", class(result)) result } vegan/R/treeheight.R0000644000176200001440000000025711562770362014043 0ustar liggesusers`treeheight` <- function(tree) { if (inherits(tree, "spantree")) return(sum(tree$dist)) tree <- as.hclust(tree) sum(tree$height) + max(tree$height) } vegan/R/treedive.R0000644000176200001440000000307512102424365013511 0ustar liggesusers`treedive` <- function(comm, tree, match.force = FALSE) { if (!inherits(tree, c("hclust", "spantree"))) stop("'clus' must be an 'hclust' or 'spantree' result object") m <- as.matrix(cophenetic(tree)) ## Check tree/comm match by names if (match.force || ncol(comm) != ncol(m)) { if (match.force) message("Forced matching of 'tree' labels and 'comm' names") else message("Dimensions do not match between 'comm' and 'tree'") fnd <- colnames(comm) %in% tree$labels if (!all(fnd)) { warning("not all names of 'comm' found in 'tree'") comm <- comm[, fnd] } fnd <- tree$labels %in% colnames(comm) if (!all(fnd)) warning("not all names of 'tree' found in 'comm'") comm <- comm[, tree$labels[fnd]] m <- m[tree$labels[fnd], tree$labels[fnd]] if (length(unique(tree$labels)) != length(tree$labels)) stop("names not unique in 'tree': match wrong") if (length(unique(colnames(comm))) != ncol(comm)) stop("names not unique in 'comm': match wrong") } ## Repeat for sites div <- numeric(nrow(comm)) for (i in 1:nrow(comm)) { k <- comm[i,] > 0 nit <- sum(k) ## Trivial cases of zero or one species if (nit==0) div[i] <- NA else if (nit==1) div[i] <- 0 else { d <- as.dist(m[k,k]) cl <- update(tree, d = d) div[i] <- treeheight(cl) } } names(div) <- rownames(comm) div } vegan/R/treedist.R0000644000176200001440000000166612102424365013531 0ustar liggesusers`treedist` <- function(x, tree, relative = TRUE, match.force = FALSE, ...) { n <- nrow(x) ABJ <- matrix(0, n , n) dmat <- as.matrix(cophenetic(tree)) ## match names if (ncol(x) != ncol(dmat) || match.force) { if(!match.force) warning("Dimensions do not match between 'x' and 'tree' - matching by names") nm <- colnames(x) dmat <- dmat[nm, nm] } for(j in 1:n) { for (k in j:n) { jk <- x[j,] > 0 | x[k,] > 0 if (sum(jk) > 1) ABJ[k, j] <- treeheight(update(tree, d = as.dist(dmat[jk, jk]))) } } A <- diag(ABJ) AB <- as.dist(outer(A, A, "+")) ABJ <- as.dist(ABJ) out <- (2 * ABJ - AB) if (relative) out <- out/ABJ out[ABJ==0] <- 0 attr(out, "method") <- if (relative) "treedist" else "raw treeedist" attr(out, "call") <- match.call() attr(out, "Labels") <- row.names(x) out } vegan/R/tolerance.cca.R0000644000176200001440000000775611544631525014424 0ustar liggesusers##' Species tolerances and sample heterogeneities ##' ##' Function to compute species tolerances and site heterogeneity measures ##' from unimodal ordinations (CCA & CA). Implements Eq 6.47 and 6.48 from ##' the Canoco 4.5 Reference Manual (pages 178-179). ##' ##' @param x object of class \code{"cca"}. ##' @param choices numeric; which ordination axes to compute ##' tolerances and heterogeneities for. Defaults to axes 1 and 2. ##' @param which character; one of \code{"species"} or \code{"sites"}, ##' indicating whether species tolerances or sample heterogeneities ##' respectively are computed. ##' @param scaling numeric; the ordination scaling to use. ##' @param useN2 logical; should the bias in the tolerances / ##' heterogeneities be reduced via scaling by Hill's N2? ##' @param ... arguments passed to other methods ##' @return matrix of tolerances/heterogeneities with some additional ##' attributes. ##' @author Gavin Simpson \email{gavin.simpson AT ucl.ac.uk} ##' @examples ##' data(dune) ##' data(dune.env) ##' mod <- cca(dune ~ ., data = dune.env) ##' tolerance.cca(mod) ##' tolerance.cca <- function(x, choices = 1:2, which = c("species","sites"), scaling = 2, useN2 = FALSE, ...) { if(inherits(x, "rda")) stop("Tolerances only available for unimodal ordinations.") if(missing(which)) which <- "species" ## reconstruct species/response matrix Y - up to machine precision! partialFit <- ifelse(is.null(x$pCCA$Fit), 0, x$pCCA$Fit) Y <- ((partialFit + x$CCA$Xbar) * sqrt(x$rowsum %o% x$colsum) + x$rowsum %o% x$colsum) * x$grand.total which <- match.arg(which) siteScrTypes <- if(is.null(x$CCA)){ "sites" } else {"lc"} scrs <- scores(x, display = c(siteScrTypes,"species"), choices = choices, scaling = scaling) ## compute N2 if useN2 == TRUE & only if doN2 <- isTRUE(useN2) && ((which == "species" && abs(scaling) == 2) || (which == "sites" && abs(scaling) == 1)) ## this gives the x_i - u_k on axis j ## outer(scrs$sites, scrs$species, "-")[,2,,j] siteScrs <- which(names(scrs) %in% c("sites","constraints")) xiuk <- outer(scrs[[siteScrs]], scrs$species, "-") if(isTRUE(all.equal(which, "sites"))) { ## need to permute the array as rowSums has different idea of what rows ## are that doesn't correspond to colSums. So flip dimensions 1 and 2 ## with aperm and use colSums. res <- sqrt(sweep(colSums(aperm(sweep(xiuk[ , 2, , choices]^2, c(1:2), data.matrix(Y), "*"), c(2,1,3))), 1, rowSums(Y), "/")) if(doN2) { tot <- rowSums(Y) y <- sweep(Y, 1, tot, "/")^2 N2 <- 1 / rowSums(y, na.rm = TRUE) ## 1/H res <- sweep(res, 1, sqrt(1 - (1/N2)), "/") } } else { res <- sqrt(sweep(colSums(sweep(xiuk[ , 2, , choices]^2, c(1:2), data.matrix(Y), "*")), 1, colSums(Y), "/")) if(doN2) { tot <- colSums(Y) y <- sweep(Y, 2, tot, "/")^2 N2 <- 1 / colSums(y, na.rm = TRUE) ## 1/H res <- sweep(res, 1, sqrt(1 - (1/N2)), "/") } } class(res) <- c("tolerance.cca","tolerance","matrix") attr(res, "which") <- which attr(res, "scaling") <- scaling attr(res, "N2") <- NULL if(doN2) attr(res, "N2") <- N2 attr(res, "model") <- deparse(substitute(mod)) return(res) } `print.tolerance.cca` <- function(x, ...) { cat("\n") msg <- ifelse(attr(x, "which") == "species", "Species Tolerances", "Sample Heterogeneities") writeLines(strwrap(msg, prefix = "\t"), sep = "\n\n") msg <- paste("Scaling:", attr(x, "scaling")) writeLines(strwrap(msg), sep = "\n\n") attr(x, "model") <- attr(x, "scaling") <- attr(x, "which") <- NULL print(unclass(x), ...) cat("\n") } vegan/R/tolerance.R0000644000176200001440000000037711544631525013667 0ustar liggesusers##' S3 generic for function to compute tolerances ##' ##' Brought this in here from analogue because of tolerance.cca ##' ##' @param x an R object ##' @param ... arguments passed to other methods `tolerance` <- function(x, ...) UseMethod("tolerance") vegan/R/text.orditkplot.R0000644000176200001440000000014411230627136015054 0ustar liggesusers`text.orditkplot` <- function(x, ...) { text(x$labels, labels = rownames(x$labels), ...) } vegan/R/text.ordiplot.R0000644000176200001440000000041211760220402014504 0ustar liggesusers"text.ordiplot" <- function (x, what, labels, select, ...) { x <- scores(x, what) if (!missing(labels)) rownames(x) <- labels if (!missing(select)) x <- .checkSelect(select, x) text(x, labels = rownames(x), ...) invisible() } vegan/R/text.metaMDS.R0000644000176200001440000000065011760220402014146 0ustar liggesusers"text.metaMDS" <- function (x, display = c("sites", "species"), labels, choices = c(1, 2), shrink = FALSE, select, ...) { display <- match.arg(display) x <- scores(x, display = display, choices = choices, shrink = shrink) if (!missing(labels)) rownames(x) <- labels if (!missing(select)) x <- .checkSelect(select, x) text(x, labels = rownames(x), ...) invisible() } vegan/R/text.decorana.R0000644000176200001440000000101311760220402014422 0ustar liggesusers"text.decorana" <- function (x, display = c("sites", "species"), labels, choices = 1:2, origin = TRUE, select, ...) { localText <- function(..., shrink, origin, scaling, triangular) text(...) display <- match.arg(display) x <- scores(x, display = display, choices = choices, origin = origin, ...) if (!missing(labels)) rownames(x) <- labels if (!missing(select)) x <- .checkSelect(select, x) localText(x, rownames(x), ...) invisible() } vegan/R/text.cca.R0000644000176200001440000000272012114162713013406 0ustar liggesusers`text.cca` <- function (x, display = "sites", labels, choices = c(1, 2), scaling = 2, arrow.mul, head.arrow = 0.05, select, const, axis.bp = TRUE, ...) { formals(arrows) <- c(formals(arrows), alist(... = )) if (length(display) > 1) stop("Only one 'display' item can be added in one command.") pts <- scores(x, choices = choices, display = display, scaling = scaling, const) if (!missing(labels)) rownames(pts) <- labels if (!missing(select)) pts <- .checkSelect(select, pts) if (display == "cn") { cnam <- rownames(pts) text(pts, labels = cnam, ...) pts <- scores(x, choices = choices, display = "bp", scaling = scaling, const) bnam <- rownames(pts) pts <- pts[!(bnam %in% cnam), , drop = FALSE] if (nrow(pts) == 0) return(invisible()) else display <- "bp" } if (display == "bp") { if (missing(arrow.mul)) { arrow.mul <- ordiArrowMul(pts) } pts <- pts * arrow.mul arrows(0, 0, pts[, 1], pts[, 2], length = head.arrow, ...) pts <- pts * 1.1 if (axis.bp) { axis(side = 3, at = c(-arrow.mul, 0, arrow.mul), labels = rep("", 3)) axis(side = 4, at = c(-arrow.mul, 0, arrow.mul), labels = c(-1, 0, 1)) } } text(pts, labels = rownames(pts), ...) invisible() } vegan/R/taxondive.R0000644000176200001440000000515510670224032013701 0ustar liggesusers`taxondive` <- function (comm, dis, match.force = FALSE) { binary <- FALSE comm <- as.matrix(comm) if (missing(dis)) { n <- ncol(comm) dis <- structure(rep(1, n * (n - 1)/2), Size = n, class = "dist") } dis <- as.dist(dis) if (match.force || attr(dis, "Size") != ncol(comm)) { if (match.force) message("Forced matching 'dis' labels and 'comm' names") else message("Dimensions do not match between 'comm' and 'dis'") if (all(colnames(comm) %in% labels(dis))) { dis <- as.matrix(dis) dis <- as.dist(dis[colnames(comm), colnames(comm)]) message("Matched 'dis' labels by 'comm' names") } else { stop("Could not match names in 'dis' and 'comm'") } if (length(unique(colnames(comm))) != ncol(comm)) stop("Names not in unique in 'comm': match wrong") if (length(unique(labels(dis))) != attr(dis, "Size")) warning("Labels not unique in 'dis': matching probably wrong") } del <- dstar <- dplus <- Ed <- Edstar <- edplus <- NULL if (!binary) { del <- apply(comm, 1, function(x) sum(as.dist(outer(x, x)) * dis)) dstar <- apply(comm, 1, function(x) sum(dis * (xx <- as.dist(outer(x, x))))/sum(xx)) rs <- rowSums(comm) del <- del/rs/(rs - 1) * 2 cs <- colSums(comm) tmp <- sum(as.dist(outer(cs, cs)) * dis) Ed <- tmp/sum(cs)/sum(cs - 1) * 2 Edstar <- tmp/sum(cs)/(sum(cs) - 1) * 2 } comm <- ifelse(comm > 0, 1, 0) dplus <- apply(comm, 1, function(x) sum(as.dist(outer(x, x)) * dis)) Lambda <- apply(comm, 1, function(x) sum(as.dist(outer(x, x)) * dis^2)) m <- rowSums(comm) dplus <- dplus/m/(m - 1) * 2 Lambda <- Lambda/m/(m - 1) * 2 - dplus^2 S <- attr(dis, "Size") omebar <- sum(dis)/S/(S - 1) * 2 varome <- sum(dis^2)/S/(S - 1) * 2 - omebar^2 omei <- rowSums(as.matrix(dis))/(S - 1) varomebar <- sum(omei^2)/S - omebar^2 vardplus <- 2 * (S - m)/(m * (m - 1) * (S - 2) * (S - 3)) * ((S - m - 1) * varome + 2 * (S - 1) * (m - 2) * varomebar) out <- list(Species = m, D = del, Dstar = dstar, Lambda = Lambda, Dplus = dplus, sd.Dplus = sqrt(vardplus), SDplus = m * dplus, ED = Ed, EDstar = Edstar, EDplus = omebar) class(out) <- "taxondive" out } vegan/R/taxa2dist.R0000644000176200001440000000241311203361327013577 0ustar liggesusers`taxa2dist` <- function (x, varstep = FALSE, check = TRUE, labels) { rich <- apply(x, 2, function(taxa) length(unique(taxa))) S <- nrow(x) if (check) { keep <- rich < S & rich > 1 rich <- rich[keep] x <- x[, keep] } i <- rev(order(rich)) x <- x[, i] rich <- rich[i] if (varstep) { add <- -diff(c(nrow(x), rich, 1)) add <- add/c(S, rich) add <- add/sum(add) * 100 } else { add <- rep(100/(ncol(x) + check), ncol(x) + check) } if (!is.null(names(add))) names(add) <- c("Base", names(add)[-length(add)]) if (!check) add <- c(0, add) out <- matrix(add[1], nrow(x), nrow(x)) for (i in 1:ncol(x)) { out <- out + add[i + 1] * outer(x[, i], x[, i], "!=") } out <- as.dist(out) attr(out, "method") <- "taxa2dist" attr(out, "steps") <- add if (missing(labels)) { attr(out, "Labels") <- rownames(x) } else { if (length(labels) != nrow(x)) warning("Labels are wrong: needed ", nrow(x), " got ", length(labels)) attr(out, "Labels") <- as.character(labels) } if (!check && any(out <= 0)) warning("you used 'check=FALSE' and some distances are zero -- was this intended?") out } vegan/R/tabasco.R0000644000176200001440000001232212116051677013320 0ustar liggesusers### The function displays (ordered) heatmaps of community data. It ### copies vegemite() for handling 'use', 'sp.ind', 'site.ind' and ### 'select', but then switches to heatmap() to display the ### data. Unlike heatmap(), it does not insist on showing dendrograms, ### but only uses these for sites, and only if given as 'use'. `tabasco` <- function (x, use, sp.ind = NULL, site.ind = NULL, select, Rowv = TRUE, Colv = TRUE, ...) { if (any(x < 0)) stop("function cannot be used with negative data values") pltree <- sptree <- NA if (!missing(use)) { if (!is.list(use) && is.vector(use)) { if (is.null(site.ind)) site.ind <- order(use) if (is.null(sp.ind)) sp.ind <- order(wascores(use, x)) } else if (inherits(use, c("dendrogram", "hclust", "twins"))) { if (inherits(use, "twins")) { require(cluster) || stop("package cluster needed to handle 'use'") } if (!inherits(use, "dendrogram")) use <- as.dendrogram(use) if (!is.null(site.ind)) stop("'site.ind' cannot be used with dendrogram") ## Reorder tree if Rowv specified if (isTRUE(Rowv)) { ## order by first CA axis -- decorana() is fastest tmp <- decorana(x, ira = 1) use <- reorder(use, scores(tmp, dis="sites", choices = 1), agglo.FUN = mean) } else if (length(Rowv) > 1) { ## Rowv is a vector if (length(Rowv) != nrow(x)) stop(gettextf("Rowv has length %d, but 'x' has %d rows", length(Rowv), nrow(x))) use <- reorder(use, Rowv, agglo.FUN = mean) } site.ind <- seq_len(nrow(x)) names(site.ind) <- rownames(x) site.ind <- site.ind[labels(use)] if (is.null(sp.ind)) sp.ind <- order(wascores(order(site.ind), x)) pltree <- use } else if (is.list(use)) { tmp <- scores(use, choices = 1, display = "sites") if (is.null(site.ind)) site.ind <- order(tmp) if (is.null(sp.ind)) sp.ind <- try(order(scores(use, choices = 1, display = "species"))) if (inherits(sp.ind, "try-error")) sp.ind <- order(wascores(tmp, x)) } else if (is.matrix(use)) { tmp <- scores(use, choices = 1, display = "sites") if (is.null(site.ind)) site.ind <- order(tmp) if (is.null(sp.ind)) sp.ind <- order(wascores(tmp, x)) } } ## see if sp.ind is a dendrogram or hclust tree if (inherits(sp.ind, c("hclust", "dendrogram", "twins"))) { if (inherits(sp.ind, "twins")) require("cluster") || stop("package cluster needed to handle 'sp.ind'") if (!inherits(sp.ind, "dendrogram")) sp.ind <- as.dendrogram(sp.ind) sptree <- sp.ind ## Consider reordering species tree if (isTRUE(Colv) && !is.null(site.ind)) { sptree <- reorder(sptree, wascores(order(site.ind), x), agglo.FUN = mean) } else if (length(Colv) > 1) { if (length(Colv) != ncol(x)) stop(gettextf("Colv has length %d, but 'x' has %d columns", length(Colv), ncol(x))) sptree <- reorder(sptree, Colv, agglo.FUN = mean) } sp.ind <- seq_len(ncol(x)) names(sp.ind) <- colnames(x) sp.ind <- sp.ind[labels(sptree)] ## reverse: origin in the upper left corner sptree <- rev(sptree) } if (!is.null(sp.ind) && is.logical(sp.ind)) sp.ind <- (1:ncol(x))[sp.ind] if (!is.null(site.ind) && is.logical(site.ind)) site.ind <- (1:nrow(x))[site.ind] if (is.null(sp.ind)) sp.ind <- 1:ncol(x) if (is.null(site.ind)) site.ind <- 1:nrow(x) if (!missing(select)) { if (!is.na(pltree)) stop("sites cannot be 'select'ed with dendrograms or hclust trees") if (!is.logical(select)) select <- sort(site.ind) %in% select stake <- colSums(x[select, , drop = FALSE]) > 0 site.ind <- site.ind[select[site.ind]] site.ind <- site.ind[!is.na(site.ind)] } else { stake <- colSums(x[site.ind, ]) > 0 } sp.ind <- sp.ind[stake[sp.ind]] ## heatmap will reorder items by dendrogram so that we need to ## give indices in the unsorted order if rows or columns have a ## dendrogram if (is.na(pltree[1])) rind <- site.ind else rind <- sort(site.ind) if (is.na(sptree[1])) ## reverse: origin in the upper left corner cind <- rev(sp.ind) else cind <- sort(sp.ind) ## we assume t() changes data.frame to a matrix x <- t(x[rind, cind]) sp.nam <- rownames(x) sp.len <- max(nchar(sp.nam)) heatmap((max(x) - x), Rowv = sptree, Colv = pltree, scale = "none", ...) out <- list(sites = site.ind, species = sp.ind) invisible(out) } vegan/R/swan.R0000644000176200001440000000047011610500105012634 0ustar liggesusersswan <- function (x, maxit = Inf) { zeros <- -Inf iter <- 0 while(zeros != (zeros <- sum(x == 0)) && any(x == 0) && iter < maxit) { x[x > 0] <- x[x > 0] - min(x[x > 0]) + 1 x[x == 0] <- beals(x)[x == 0] iter <- iter + 1 } x } ### (Ecology 51, 89-102; 1970). vegan/R/summary.taxondive.R0000644000176200001440000000074710667741210015407 0ustar liggesusers`summary.taxondive` <- function (object, ...) { z <- (object$Dplus - object$EDplus)/object$sd.Dplus pval <- 2*pnorm(-abs(z)) out <- cbind(object$D, object$Dstar, object$Dplus, object$sd.Dplus, z, pval) out <- rbind(out, "Expected"=c(object$ED, object$EDstar, object$EDplus, NA, NA, NA)) colnames(out) <- c("Delta", "Delta*", "Delta+", "sd(Delta+)", "z(Delta+)", "Pr(>|z|)") class(out) <- "summary.taxondive" out } vegan/R/summary.specaccum.R0000644000176200001440000000042710667741210015344 0ustar liggesusers"summary.specaccum" <- function(object, ...) { if (is.null(object$perm)) stop("Specific summary available only for method=\"random\"") else { tmp <- summary(t(object$perm), ...) colnames(tmp) <- paste(1:ncol(tmp), "sites") tmp } } vegan/R/summary.radfit.frame.R0000644000176200001440000000033210667741210015736 0ustar liggesusers"summary.radfit.frame" <- function (object, ...) { labels <- names(object) for (i in 1:length(labels)) { cat("\n***", labels[i], "***\n") print(object[[i]], ...) } invisible(object) } vegan/R/summary.procrustes.R0000644000176200001440000000072410667741210015612 0ustar liggesusers"summary.procrustes" <- function (object, digits = getOption("digits"), ...) { ans <- object[c("call", "ss")] n <- nrow(object$Yrot) k <- ncol(object$Yrot) ans$resid <- residuals(object) rmse <- sqrt(object$ss/n) ans$n <- n ans$k <- k ans$rmse <- rmse ans$rotation <- object$rotation ans$translation <- object$translation ans$scale <- object$scale ans$digits <- digits class(ans) <- "summary.procrustes" ans } vegan/R/summary.prc.R0000644000176200001440000000145011466266137014172 0ustar liggesusers`summary.prc` <- function (object, axis = 1, scaling = 3, digits = 4, ...) { sc = scores(object, scaling = scaling, display = c("sp", "lc"), choices=axis, ...) ## coef for scaled sites (coef(object) gives for orthonormal) b <- qr.coef(object$CCA$QR, sc$constraints) prnk <- object$pCCA$rank lentreat <- length(object$terminfo$xlev[[2]]) b = matrix(b[-(1:prnk)], nrow = lentreat-1, byrow = TRUE) rownames(b) <- (object$terminfo$xlev[[2]])[-1] colnames(b) <- object$terminfo$xlev[[1]] out <- list(sp = drop(sc$species), coefficients = b, names = names(object$terminfo$xlev), corner = (object$terminfo$xlev[[2]])[1], call = object$call, digits = digits) class(out) <- "summary.prc" out } vegan/R/summary.poolaccum.R0000644000176200001440000000152111240620722015347 0ustar liggesusers`summary.poolaccum` <- function(object, display, alpha = 0.05, ...) { probs <- c(alpha/2, 1-alpha/2) if (inherits(object, "estaccumR")) dislabels <- c("S", "chao", "ace") else dislabels <- c("S", "chao", "jack1", "jack2", "boot") disnames <- colnames(object$means[,-1]) names(disnames) <- dislabels if (missing(display)) display <- dislabels else display <- match.arg(display, dislabels, several.ok = TRUE) out <- list() for (item in display) { out[[item]] <- cbind(`N` = object$N, `Mean` = object$means[,disnames[item], drop=FALSE], t(apply(object[[item]], 1, quantile, probs=probs)), `Std.Dev` = apply(object[[item]], 1, sd)) } class(out) <- "summary.poolaccum" out } vegan/R/summary.permat.R0000644000176200001440000000350011527004531014656 0ustar liggesusers## S3 summary method for permat `summary.permat` <- function(object, ...) { x <- object n <- attr(x, "times") ss <- sum(x$orig) fi <- sum(x$orig > 0) rs <- rowSums(x$orig) cs <- colSums(x$orig) rb <- rowSums(x$orig > 0) cb <- colSums(x$orig > 0) nr <- nrow(x$orig) nc <- ncol(x$orig) bray <- sapply(x$perm, function(z) sum(abs(x$orig - z)) / sum(x$orig + z)) psum <- sapply(x$perm, function(z) ss == sum(z)) pfill <- sapply(x$perm, function(z) fi == sum(z > 0)) vrow <- sapply(x$perm, function(z) sum(rs == rowSums(z)) == nr) vcol <- sapply(x$perm, function(z) sum(cs == colSums(z)) == nc) brow <- sapply(x$perm, function(z) sum(rb == rowSums(z > 0)) == nr) bcol <- sapply(x$perm, function(z) sum(cb == colSums(z > 0)) == nc) if (attr(x, "is.strat")) { int <- attr(x, "strata") nlev <- length(unique(int)) rsagg <- rowSums(aggregate(x$orig, list(int), sum)[,-1]) ssum <- sapply(x$perm, function(z) sum(rsagg == rowSums(aggregate(z, list(int), sum)[,-1])) == nlev) } else ssum <- NULL ## Chisq E <- rs %o% cs / ss chisq <- sapply(x$perm, function(z) sum((z - E)^2 / E)) attr(chisq, "chisq.orig") <- sum((x$orig - E)^2 / E) # attr(chisq, "df") <- (nr - 1) * (nc - 1) ## ts if sequential seqmethods <- c("swap", "tswap", "abuswap") if (attr(x, "method") %in% seqmethods) { startval <- attr(x, "burnin") + 1 dtime <- max(1, attr(x, "thin")) bray <- ts(bray, start = startval, deltat = dtime) chisq <- ts(chisq, start = startval, deltat = dtime) } x$perm <- NULL out <- list(x=x, bray=bray, chisq=chisq, sum=psum, fill=pfill, rowsums=vrow, colsums=vcol, browsums=brow, bcolsums=bcol, strsum=ssum) class(out) <- c("summary.permat", "list") out } vegan/R/summary.ordihull.R0000644000176200001440000000135511243760152015221 0ustar liggesusers### Centres and areas of convex hulls (simple polygons). `summary.ordihull` <- function(object, ...) { polyarea <- function(x) { n <- nrow(x) if (n < 4) return(0) else abs(sum(x[-n,1]*x[-1,2] - x[-1,1]*x[-n,2]))/2 } polycentre <- function(x) { n <- nrow(x) if (n < 4) return(colMeans(x[-n,])) xy <- x[-n,1]*x[-1,2] - x[-1,1]*x[-n,2] A <- sum(xy)/2 xc <- sum((x[-n,1] + x[-1,1]) * xy)/A/6 yc <- sum((x[-n,2] + x[-1,2]) * xy)/A/6 structure(c(xc, yc), names = colnames(x)) } areas <- sapply(object, function(x) polyarea(x)) cnts <- sapply(object, function(x) polycentre(x)) rbind(cnts, `Area` = areas) } vegan/R/summary.ordiellipse.R0000644000176200001440000000065011243277142015711 0ustar liggesusers### Centres and areas of plotted ellipses. The principal axes of the ### conic (oblique ellipse) are found from the eigenvalues of the ### covariance matrix. `summary.ordiellipse` <- function(object, ...) { cnts <- sapply(object, function(x) x$center) areas <- sapply(object, function(x) prod(sqrt(eigen(x$cov)$values)) * pi * x$scale^2) rbind(cnts, `Area` = areas) } vegan/R/summary.meandist.R0000644000176200001440000000145611430762274015212 0ustar liggesusers`summary.meandist` <- function(object, ...) { n <- attr(object, "n") wmat <- n %o% n diag(wmat) <- diag(wmat) - n ## mean distances within, between groups and in total W <- weighted.mean(diag(object), w = diag(wmat), na.rm = TRUE) B <- weighted.mean(object[lower.tri(object)], w = wmat[lower.tri(wmat)], na.rm = TRUE) D <- weighted.mean(object, w = wmat, na.rm = TRUE) ## Variants of MRPP statistics A1 <- weighted.mean(diag(object), w = n, na.rm = TRUE) A2 <- weighted.mean(diag(object), w = n - 1, na.rm = TRUE) A3 <- weighted.mean(diag(object), w = n * (n - 1), na.rm = TRUE) ## out <- list(W = W, B = B, D = D, CS = B-A1, A1 = 1 - A1/D, A2 = 1 - A2/D, A3 = 1 - A3/D) class(out) <- "summary.meandist" out } vegan/R/summary.isomap.R0000644000176200001440000000047610667741210014675 0ustar liggesusers`summary.isomap` <- function (object, axes=4, ...) { axes <- min(axes, ncol(object$points)) out <- list() out$call <- object$call out$points <- object$points[,1:axes] out$net <- object$net n <- nrow(object$points) out$ndis <- n * (n-1) / 2 out$nnet <- nrow(object$net) class(out) <- "summary.isomap" out } vegan/R/summary.humpfit.R0000644000176200001440000000174710667741210015063 0ustar liggesusers"summary.humpfit" <- function (object, ...) { dispersion <- if (any(object$family$family == c("binomial", "poisson"))) 1 else sum(object$residuals^2)/object$df.residual p <- coef(object) se <- sqrt(dispersion * diag(solve(object$nlm$hessian))) est <- cbind(p, se) colnames(est) <- c("Estimate", "Std. Error") covmat <- solve(object$nlm$hessian) dg <- sqrt(diag(covmat)) cormat <- covmat/outer(dg, dg) colnames(cormat) <- names(p) rownames(cormat) <- names(p) aic <- AIC(object) bic <- AIC(object, k = log(length(object$y))) out <- list(est = est, aic = aic, bic = bic, family = family(object)$family, deviance = deviance(object), df.residual = df.residual(object), dispersion = dispersion, correlation = cormat, cov.unscaled = covmat, iter = object$nlm$iterations, code = object$nlm$code) class(out) <- "summary.humpfit" out } vegan/R/summary.decorana.R0000644000176200001440000000153210667741210015153 0ustar liggesusers"summary.decorana" <- function (object, digits = 3, origin = TRUE, display = c("both", "species", "sites", "none"), ...) { display <- match.arg(display) print(object) if (origin) { object$cproj <- sweep(object$cproj, 2, object$origin, "-") object$rproj <- sweep(object$rproj, 2, object$origin, "-") } tmp <- list() if (display == "both" || display == "species") { tmp$spec.scores <- object$cproj tmp$spec.priorweights <- object$v tmp$spec.totals <- object$adotj } if (display == "both" || display == "sites") { tmp$site.scores <- object$rproj tmp$site.totals <- object$aidot } tmp$digits <- digits class(tmp) <- "summary.decorana" tmp } vegan/R/summary.clamtest.R0000644000176200001440000000050111640347042015203 0ustar liggesuserssummary.clamtest <- function(object, ...) { structure(c(attr(object, "settings"), list(summary=cbind(Species=table(object$Classes), Proportion=table(object$Classes)/nrow(object)), minv=attr(object, "minv"), coverage=attr(object, "coverage"))), class="summary.clamtest") } vegan/R/summary.cca.R0000644000176200001440000000363611511061623014124 0ustar liggesusers`summary.cca` <- function (object, scaling = 2, axes = 6, display=c("sp","wa","lc","bp","cn"), digits = max(3, getOption("digits") - 3), ...) { if (inherits(object, "pcaiv")) { warning("this is an ade4 object which vegan cannot handle") axes <- min(axes, object$nf) object <- ade2vegancca(object) } axes <- min(axes, sum(object$CCA$rank, object$CA$rank)) summ <- list() if (axes && length(display) && (!is.na(display) && !is.null(display))) summ <- scores(object, scaling = scaling, choices = 1:axes, display = display, ...) ## scores() drops list to a matrix if there is only one item: workaround below. if (!is.list(summ) && length(display) == 1) { nms <- c("species", "sites", "constraints", "biplot", "centroids") names(nms) <- c("sp","wa","lc","bp","cn") summ <- list(summ) names(summ) <- nms[display] } if (length(display) > 0) { for (i in 1:length(summ)) { if (is.matrix(summ[[i]])) rownames(summ[[i]]) <- rownames(summ[[i]], do.NULL = FALSE, prefix = substr(names(summ)[i], 1, 3)) } } summ$call <- object$call summ$tot.chi <- object$tot.chi ## only the Real component for capscale() with negative eigenvalues if (!is.null(object$CA$imaginary.chi)) summ$tot.chi <- summ$tot.chi - object$CA$imaginary.chi summ$partial.chi <- object$pCCA$tot.chi summ$constr.chi <- object$CCA$tot.chi summ$unconst.chi <- object$CA$tot.chi summ$cont <- summary(eigenvals(object)) if (!is.null(object$CCA)) summ$concont <- summary(eigenvals(object, constrained = TRUE)) summ$ev.head <- c(summ$ev.con, summ$ev.uncon)[1:axes] summ$scaling <- scaling summ$digits <- digits summ$inertia <- object$inertia summ$method <- object$method class(summ) <- "summary.cca" summ } vegan/R/summary.bioenv.R0000644000176200001440000000055710667741210014667 0ustar liggesusers"summary.bioenv" <- function(object, ...) { x <- object$models nam <- object$names size <- seq(1:length(x)) cor <- unlist(lapply(x, function(tmp) tmp$est)) pars <- unlist(lapply(x, function(tmp) paste(nam[tmp$best], collapse=" "))) out <- list(size = size, correlation = cor, variables = pars) class(out) <- "summary.bioenv" out } vegan/R/summary.anosim.R0000644000176200001440000000116612075212247014666 0ustar liggesusers`summary.anosim` <- function (object, ...) { print(object) if (object$permutations) { out <- quantile(object$perm, c(0.9, 0.95, 0.975, 0.99)) cat("Upper quantiles of permutations (null model):\n") print(out, digits=3) } cat("\n") tmp <- tapply(object$dis.rank, object$class.vec, quantile) out <- matrix(NA, length(tmp), 5) for (i in 1:length(tmp)) out[i,] <- tmp[[i]] rownames(out) <- names(tmp) colnames(out) <- names(tmp$Between) out <- cbind(out, N = table(object$class.vec)) cat("Dissimilarity ranks between and within classes:\n") print(out) cat("\n") invisible() } vegan/R/stressplot.R0000644000176200001440000000645311603541532014130 0ustar liggesusers`stressplot`<- function(object, ...) { UseMethod("stressplot") } `stressplot.monoMDS` <- function(object, pch, p.col = "blue", l.col = "red", lwd, ...) { if (missing(lwd)) if (object$ngrp > 2) lwd <- 1 else lwd <- 2 ## extract items to plot x <- object$diss y <- object$dist yf <- object$dhat ## all models plot dist against diss, but there can be duplicated ## items in some models: remove duplicates in hybrid (iregn==3) ## and local (ngrp > 1) models: if (object$iregn == 3) pts <- seq_along(x) < object$istart[2] else if (object$ngrp > 2) pts <- object$iidx > object$jidx else pts <- !logical(length(x)) ## Plotting character if (missing(pch)) if (sum(pts) > 5000) pch <- "." else pch <- 1 ## plot points plot(x[pts], y[pts], pch = pch, col = p.col, xlab = "Observed Dissimilarity", ylab = "Ordination Distance", ...) ## collect values for 'linear fit' ralscal <- 0 ## Fit lines: linear (iregn=2) and hybrid (iregn=3) have a smooth line if (object$iregn > 1) { if (object$iregn == 3) { k <- seq(object$istart[2], object$ndis) yl <- range(yf[k]) xl <- range(x[k]) ralscal <- cor(y[k], yf[k])^2 } else { yl <- range(yf) xl <- range(x) ralscal <- cor(y, yf)^2 } lines(xl, yl, col = l.col, lwd = lwd, ...) } ## Monotone line except in linear, and local has several... if (object$iregn != 2) { ist <- c(object$istart, object$ndis + 1) if (object$iregn == 3) object$ngrp <- 1 for(j in 1:object$ngrp) { k <- seq(ist[j], ist[j+1]-1) ralscal <- ralscal + cor(y[k], yf[k])^2 lines(x[k], yf[k], type = "S", col = l.col, lwd = lwd, ...) } } ## Stress as R2 rstress <- 1 - object$stress^2 ralscal <- if(object$iregn == 3) ralscal/2 else ralscal/object$ngrp lab <- paste("Non-metric fit, R2 =", format(rstress, digits=3), "\nLinear fit, R2 =", format(ralscal, digits=3)) text(min(x), 0.95*max(y), lab, pos=4) invisible(list("x" = x, "y" = y, "yf" = yf)) } `stressplot.default` <- function(object, dis, pch, p.col = "blue", l.col = "red", lwd = 2, ...) { require(MASS) || stop("Needs MASS package") if (missing(dis)) dis <- metaMDSredist(object) if (attr(dis, "Size") != nrow(object$points)) stop("Dimensions do not match in ordination and dissimilarities") shep <- Shepard(dis, object$points) stress <- sum((shep$y - shep$yf)^2)/sum(shep$y^2) rstress <- 1 - stress ralscal <- cor(shep$y, shep$yf)^2 stress <- sqrt(stress)*100 if ( abs(stress - object$stress) > 0.001) stop("Dissimilarities and ordination do not match") if (missing(pch)) if (length(dis) > 5000) pch <- "." else pch <- 1 plot(shep, pch = pch, col = p.col, xlab = "Observed Dissimilarity", ylab = "Ordination Distance", ...) lines(shep$x, shep$yf, type = "S", col = l.col, lwd = lwd, ...) lab <- paste("Non-metric fit, R2 =", format(rstress, digits=3), "\nLinear fit, R2 =", format(ralscal, digits=3)) text(min(shep$x), 0.95*max(shep$y), lab, pos=4) invisible(shep) } vegan/R/stepacross.R0000644000176200001440000000140310667741210014066 0ustar liggesusers"stepacross" <- function (dis, path = "shortest", toolong = 1, trace = TRUE, ...) { path <- match.arg(path, c("shortest", "extended")) if (!inherits(dis, "dist")) dis <- as.dist(dis) oldatt <- attributes(dis) n <- attr(dis, "Size") if (path == "shortest") dis <- .C("dykstrapath", dist = as.double(dis), n = as.integer(n), as.double(toolong), as.integer(trace), out = double(length(dis)), NAOK = TRUE, PACKAGE = "vegan")$out else dis <- .C("stepacross", dis = as.double(dis), as.integer(n), as.double(toolong), as.integer(trace), NAOK = TRUE, PACKAGE = "vegan")$dis attributes(dis) <- oldatt attr(dis, "method") <- paste(attr(dis, "method"), path) dis } vegan/R/spenvcor.R0000644000176200001440000000053011250743224013533 0ustar liggesusers"spenvcor" <- function (object) { if (is.null(object$CCA)) stop("Needs results from constrained ordination") u <- object$CCA$u wa <- object$CCA$wa if (!inherits(object, "rda")) { # is CCA r <- sqrt(object$rowsum) u <- sweep(u, 1, r, "*") wa <- sweep(wa, 1, r, "*") } diag(cor(u, wa)) } vegan/R/specpool2vect.R0000644000176200001440000000025111240570233014461 0ustar liggesusers"specpool2vect" <- function(X, index = c("jack1","jack2", "chao", "boot", "Species")) { pool <- attr(X, "pool") index <- match.arg(index) X[[index]][pool] } vegan/R/specpool.R0000644000176200001440000000447011625162563013536 0ustar liggesusers"specpool" <- function (x, pool) { x <- as.matrix(x) if (missing(pool)) pool <- rep("All", nrow(x)) ## check dims if (length(pool) != NROW(x)) stop("length of 'pool' and number rows in 'x' do not match") ## remove missing values if (any(nas <- is.na(pool))) { pool <- pool[!nas] x <- x[!nas, , drop = FALSE] } out <- seq(1:nrow(x)) groups <- table(pool) inds <- names(groups) S <- var.chao <- chao <- var.jack1 <- jack.1 <- jack.2 <- var.boot <- bootS <- rep(NA, length(inds)) names(S) <- names(var.chao) <- names(chao) <- names(var.jack1) <- names(jack.1) <- names(jack.2) <- names(var.boot) <- names(bootS) <- inds for (is in inds) { a1 <- a2 <- NA gr <- out[pool == is] n <- length(gr) if (n <= 0) next X <- x[gr, , drop = FALSE] freq <- colSums(X > 0) p <- freq[freq > 0]/n S[is] <- sum(freq > 0) if (S[is] == 0) next if (n >= 1) a1 <- sum(freq == 1) if (n >= 2) a2 <- sum(freq == 2) else 0 chao[is] <- S[is] + if(!is.na(a2) && a2 > 0) a1 * a1/2/a2 else 0 jack.1[is] <- S[is] + a1 * (n - 1)/n jack.2[is] <- S[is] + a1 * (2 * n - 3)/n - a2 * (n - 2)^2/n/(n - 1) bootS[is] <- S[is] + sum((1 - p)^n) aa <- if (!is.na(a2) && a2 > 0) a1/a2 else 0 var.chao[is] <- a2 * (0.5 + (1 + aa/4) * aa) * aa * aa if (!is.na(a1) && a1 > 0) { jf <- table(rowSums(X[, freq == 1, drop = FALSE] > 0)) var.jack1[is] <- (sum(as.numeric(names(jf))^2 * jf) - a1/n) * (n - 1)/n } pn <- (1 - p)^n X <- X[, freq > 0, drop = FALSE] Zp <- (crossprod(X == 0)/n)^n - outer(pn, pn, "*") var.boot[is] <- sum(pn * (1 - pn)) + 2 * sum(Zp[lower.tri(Zp)]) } out <- list(Species = S, chao = chao, chao.se = sqrt(var.chao), jack1 = jack.1, jack1.se = sqrt(var.jack1), jack2 = jack.2, boot = bootS, boot.se = sqrt(var.boot), n = as.vector(groups)) out <- as.data.frame(out) attr(out, "pool") <- pool out } vegan/R/specnumber.R0000644000176200001440000000053611567657400014060 0ustar liggesusers`specnumber` <- function(x, groups, MARGIN = 1) { if (!missing(groups)) { if (length(groups) == 1) groups <- rep(groups, nrow(x)) x <- aggregate(x, list(groups), max) rownames(x) <- x[,1] x <- x[,-1] } if (length(dim(x)) > 1) apply(x > 0, MARGIN, sum) else sum(x > 0) } vegan/R/specaccum.R0000644000176200001440000000575411567452264013670 0ustar liggesusers`specaccum` <- function (comm, method = "exact", permutations = 100, conditioned=TRUE, gamma="jack1", ...) { x <- comm x <- as.matrix(x) x <- x[, colSums(x) > 0, drop=FALSE] n <- nrow(x) p <- ncol(x) if (p == 1) { x <- t(x) n <- nrow(x) p <- ncol(x) } accumulator <- function(x, ind) { rowSums(apply(x[ind, ], 2, cumsum) > 0) } METHODS <- c("collector", "random", "exact", "rarefaction", "coleman") method <- match.arg(method, METHODS) specaccum <- sdaccum <- sites <- perm <- NULL if (n == 1 && method != "rarefaction") message("No actual accumulation since only 1 site provided") switch(method, collector = { sites <- 1:n specaccum <- accumulator(x, sites) }, random = { perm <- array(dim = c(n, permutations)) for (i in 1:permutations) { perm[, i] <- accumulator(x, sample(n)) } sites <- 1:n specaccum <- apply(perm, 1, mean) sdaccum <- apply(perm, 1, sd) }, exact = { freq <- colSums(x > 0) freq <- freq[freq > 0] f <- length(freq) ldiv <- lchoose(n, 1:n) result <- array(dim = c(n, f)) for (i in 1:n) { result[i, ] <- ifelse(n - freq < i, 0, exp(lchoose(n - freq, i) - ldiv[i])) } sites <- 1:n specaccum <- rowSums(1 - result) if (conditioned) { V <- result * (1 - result) tmp1 <- cor(x > 0) ind <- lower.tri(tmp1) tmp1 <- tmp1[ind] tmp1[is.na(tmp1)] <- 0 cv <- numeric(n) for (i in 1:n) { tmp2 <- outer(sqrt(V[i, ]), sqrt(V[i, ]))[ind] cv[i] <- 2 * sum(tmp1 * tmp2) } V <- rowSums(V) sdaccum <- sqrt(V + cv) }else{ Stot <- specpool(x)[,gamma] sdaccum1 <- rowSums((1-result)^2) sdaccum2 <- specaccum^2/Stot sdaccum <- sqrt(sdaccum1 - sdaccum2) } }, rarefaction = { freq <- colSums(x) freq <- freq[freq > 0] tot <- sum(freq) ind <- round(seq(tot/n, tot, length = n)) result <- matrix(NA, nrow = 2, ncol = n) for (i in 1:n) { result[, i] <- rarefy(t(freq), ind[i], se = TRUE) } specaccum <- result[1, ] sdaccum <- result[2, ] sites <- ind/tot * n }, coleman = { freq <- colSums(x > 0) result <- array(dim = c(n, p)) for (i in 1:n) { result[i, ] <- (1 - i/n)^freq } result <- 1 - result sites <- 1:n specaccum <- apply(result, 1, sum) sdaccum <- sqrt(apply(result * (1 - result), 1, sum)) }) out <- list(call = match.call(), method = method, sites = sites, richness = specaccum, sd = sdaccum, perm = perm) if (method == "rarefaction") out$individuals <- ind class(out) <- "specaccum" out } vegan/R/spantree.R0000644000176200001440000000073611242262301013516 0ustar liggesusers"spantree" <- function (d, toolong = 0) { dis <- as.dist(d) n <- attr(dis, "Size") labels <- labels(dis) dis <- .C("primtree", dist = as.double(dis), toolong = as.double(toolong), n = as.integer(n), val = double(n + 1), dad = integer(n + 1), NAOK = TRUE, PACKAGE = "vegan") out <- list(kid = dis$dad[2:n] + 1, dist = dis$val[2:n], labels = labels, call = match.call()) class(out) <- "spantree" out } vegan/R/spandepth.R0000644000176200001440000000211111277526727013677 0ustar liggesusers### The depths of nodes in a 'spantree' object: The nodes are either ### leaves with one link, or internal nodes with >1 links. The leaves ### are removed recursively from the tree and at each step the depth ### is increased with one. `spandepth` <- function (x) { if (!inherits(x, "spantree")) stop("'x' must be 'spantree' result") kid <- c(NA, x$kid) par <- p <- seq_along(kid) par[1] <- NA ## Isolated nodes in disconnected tree have depth 0, other nodes ## start from depth 1 intree <- p %in% kid | !is.na(kid) depth <- numeric(length(par)) depth[intree] <- 1 if (!is.null(x$labels)) names(depth) <- x$labels while(any(intree)) { ## Node is internal (intree) if it is both a parent and a kid ## and kid is in the tree or it is kid to two or more parents intree <- (p %in% intersect(kid[intree], par[intree]) & p %in% p[intree][kid[intree] %in% p[intree]] | p %in% kid[intree][duplicated(kid[intree])]) depth[intree] <- depth[intree] + 1 } depth } vegan/R/simulate.rda.R0000644000176200001440000001250611644641440014276 0ustar liggesusers`simulate.rda` <- function(object, nsim = 1, seed = NULL, indx = NULL, rank = "full", ...) { ## Handle RNG: code directly from stats::simulate.lm if (!exists(".Random.seed", envir = .GlobalEnv, inherits = FALSE)) runif(1) if (is.null(seed)) RNGstate <- get(".Random.seed", envir = .GlobalEnv) else { R.seed <- get(".Random.seed", envir = .GlobalEnv) set.seed(seed) RNGstate <- structure(seed, kind = as.list(RNGkind())) on.exit(assign(".Random.seed", R.seed, envir = .GlobalEnv)) } ## Proper simulation: very similar for simulate.lm, but produces a ## response matrix. if (nsim > 1) .NotYetUsed("nsim") ftd <- predict(object, type = "response", rank = rank) ## pRDA: add partial Fit to the constrained if (!is.null(object$pCCA)) ftd <- ftd + object$pCCA$Fit if (is.null(indx)) ans <- as.data.frame(ftd + matrix(rnorm(length(ftd), sd = outer(rep(1,nrow(ftd)), apply(object$CA$Xbar, 2, sd))), nrow = nrow(ftd))) else ans <- as.data.frame(ftd + object$CA$Xbar[indx,]) if (is.null(indx)) attr(ans, "seed") <- RNGstate else attr(ans, "seed") <- indx ans } ### simulate. cca was cloned from simulate.rda. Works with internal ### Chi-square standardized form, and at the end back-standardizes ### with row and column totals and matrix grand totals. This does not ### still guarantee that all marginal totals are positive. `simulate.cca` <- function(object, nsim = 1, seed = NULL, indx = NULL, rank = "full", ...) { ## Handle RNG: code directly from stats::simulate.lm if (!exists(".Random.seed", envir = .GlobalEnv, inherits = FALSE)) runif(1) if (is.null(seed)) RNGstate <- get(".Random.seed", envir = .GlobalEnv) else { R.seed <- get(".Random.seed", envir = .GlobalEnv) set.seed(seed) RNGstate <- structure(seed, kind = as.list(RNGkind())) on.exit(assign(".Random.seed", R.seed, envir = .GlobalEnv)) } ## Proper simulation: very similar for simulate.lm, but produces a ## response matrix. if (nsim > 1) .NotYetUsed("nsim") ## Need sqrt of rowsums for weighting sq.r <- sqrt(object$rowsum) ## Fitted value ftd <- predict(object, type = "working", rank = rank) ## pCCA: add partial Fit to the constrained if (!is.null(object$pCCA)) ftd <- ftd + object$pCCA$Fit ## Residual Xbar need weighting and back-weighting Xbar <- sweep(object$CA$Xbar, 1, sq.r, "*") if (is.null(indx)) { ans <- matrix(rnorm(length(ftd), sd = outer(rep(1,nrow(ftd)), apply(Xbar, 2, sd))), nrow = nrow(ftd)) ans <- as.data.frame(ftd + sweep(ans, 1, sq.r, "/")) } else ans <- as.data.frame(ftd + sweep(Xbar[indx,], 1, sq.r, "/")) ## From internal form to the original form with fixed marginal totals rc <- object$rowsum %o% object$colsum ans <- (ans * sqrt(rc) + rc) * object$grand.total if (is.null(indx)) attr(ans, "seed") <- RNGstate else attr(ans, "seed") <- indx ans } ### capscale method: copies simulate.rda as much as possible. Function ### works with the internal metric scaling mapping of fit and error, ### but returns Euclidean distances adjusted to the original scaling ### of input dissimilarities. Only the real components are used, and ### capscale() of simulated dissimilarities have no Imaginary ### component. `simulate.capscale` <- function(object, nsim = 1, seed = NULL, indx = NULL, rank = "full", ...) { ## Handle RNG: code directly from stats::simulate.lm if (!exists(".Random.seed", envir = .GlobalEnv, inherits = FALSE)) runif(1) if (is.null(seed)) RNGstate <- get(".Random.seed", envir = .GlobalEnv) else { R.seed <- get(".Random.seed", envir = .GlobalEnv) set.seed(seed) RNGstate <- structure(seed, kind = as.list(RNGkind())) on.exit(assign(".Random.seed", R.seed, envir = .GlobalEnv)) } if (nsim > 1) .NotYetUsed("nsim") ## predict.capscale cannot be used because it returns either ## dissimilarities ("response") or scores with the rank of the ## constrained solution, and we need rank of the data (not of ## constraints). if (rank > 0) { ftd <- qr.fitted(object$CCA$QR, object$CCA$Xbar) ## redo analysis when rank < full if (rank < object$CCA$rank) { x <- svd(ftd, nu = rank, nv = rank) ftd <- x$u %*% diag(x$d[1:rank], nrow=rank) %*% t(x$v) } } else { ftd <- matrix(0, nrow=nrow(object$CA$Xbar), ncol = ncol(object$CA$Xbar)) } ## add partial Fit to the constrained if (!is.null(object$pCCA)) ftd <- ftd + object$pCCA$Fit if (is.null(indx)) ans <- as.data.frame(ftd + matrix(rnorm(length(ftd), sd = outer(rep(1,nrow(ftd)), apply(object$CA$Xbar, 2, sd))), nrow = nrow(ftd))) else ans <- ftd + object$CA$Xbar[indx,] ## return Euclidean distances ans <- dist(ans) ## remove adjustment done in capscale and put dissimilarities to ## (approximately) original scale ans <- ans/object$adjust if (is.null(indx)) attr(ans, "seed") <- RNGstate else attr(ans, "seed") <- indx ans } vegan/R/simpleRDA2.R0000644000176200001440000000034610667741210013607 0ustar liggesusers"simpleRDA2" <- function (Y, X, SS.Y, ...) { Q <- qr(X, tol=1e-6) Yfit.X <- qr.fitted(Q, Y) SS <- sum(Yfit.X^2) if (missing(SS.Y)) SS.Y <- sum(Y^2) Rsquare <- SS/SS.Y list(Rsquare = Rsquare, m = Q$rank) } vegan/R/simper.R0000644000176200001440000001214711767416026013214 0ustar liggesusers`simper` <- function(comm, group, ...) { if (any(rowSums(comm, na.rm = TRUE) == 0)) warning("you have empty rows: results may be meaningless") permutations <- 0 trace <- FALSE comm <- as.matrix(comm) comp <- t(combn(unique(as.character(group)), 2)) outlist <- NULL ## data parameters P <- ncol(comm) nobs <- nrow(comm) ## Make permutation matrix if (length(permutations) == 1) { perm <- shuffleSet(nobs, permutations, ...) } else { # permutations is a matrix perm <- permutations } ## check dims (especially if permutations was a matrix) if (ncol(perm) != nobs) stop(gettextf("'permutations' have %d columns, but data have %d rows", ncol(perm), nobs)) ## OK: take number of permutations nperm <- nrow(perm) if (nperm > 0) perm.contr <- matrix(nrow=P, ncol=nperm) for (i in 1:nrow(comp)) { group.a <- comm[group == comp[i, 1], ] group.b <- comm[group == comp[i, 2], ] n.a <- nrow(group.a) n.b <- nrow(group.b) contr <- matrix(ncol = P, nrow = n.a * n.b) for (j in 1:n.b) { for (k in 1:n.a) { md <- abs(group.a[k, ] - group.b[j, ]) me <- group.a[k, ] + group.b[j, ] contr[(j-1)*n.a+k, ] <- md / sum(me) } } average <- colMeans(contr) if(nperm > 0){ if (trace) cat("Permuting", paste(comp[i,1], comp[i,2], sep = "_"), "\n") contrp <- matrix(ncol = P, nrow = n.a * n.b) for(p in 1:nperm){ groupp <- group[perm[p,]] ga <- comm[groupp == comp[i, 1], ] gb <- comm[groupp == comp[i, 2], ] for(j in 1:n.b) { for(k in 1:n.a) { mdp <- abs(ga[k, ] - gb[j, ]) mep <- ga[k, ] + gb[j, ] contrp[(j-1)*n.a+k, ] <- mdp / sum(mep) } } perm.contr[ ,p] <- colMeans(contrp) } p <- (apply(apply(perm.contr, 2, function(x) x >= average), 1, sum) + 1) / (nperm + 1) } else { p <- NULL } overall <- sum(average) sdi <- apply(contr, 2, sd) ratio <- average / sdi ava <- colMeans(group.a) avb <- colMeans(group.b) ord <- order(average, decreasing = TRUE) cusum <- cumsum(average[ord] / overall) out <- list(species = colnames(comm), average = average, overall = overall, sd = sdi, ratio = ratio, ava = ava, avb = avb, ord = ord, cusum = cusum, p = p) outlist[[paste(comp[i,1], "_", comp[i,2], sep = "")]] <- out } attr(outlist, "permutations") <- nperm class(outlist) <- "simper" outlist } `print.simper` <- function(x, ...) { cat("cumulative contributions of most influential species:\n\n") cusum <- lapply(x, function(z) z$cusum) spec <- lapply(x, function(z) z$species[z$ord]) for (i in 1:length(cusum)) { names(cusum[[i]]) <- spec[[i]] } ## this probably fails with empty or identical groups that have 0/0 = NaN out <- lapply(cusum, function(z) z[seq_len(min(which(z >= 0.7)))]) print(out) invisible(x) } `summary.simper` <- function(object, ordered = TRUE, digits = max(3, getOption("digits") - 3), ...) { if (ordered) { out <- lapply(object, function(z) data.frame(contr = z$average, sd = z$sd, ratio = z$ratio, av.a = z$ava, av.b = z$avb)[z$ord, ]) cusum <- lapply(object, function(z) z$cusum) for(i in 1:length(out)) { out[[i]]$cumsum <- cusum[[i]] if(!is.null(object[[i]]$p)) { out[[i]]$p <- object[[i]]$p[object[[i]]$ord] } } } else { out <- lapply(object, function(z) data.frame(cbind(contr = z$average, sd = z$sd, 'contr/sd' = z$ratio, ava = z$ava, avb = z$avb, p = z$p))) } attr(out, "digits") <- digits attr(out, "permutations") <- attr(object, "permutations") class(out) <- "summary.simper" out } `print.summary.simper`<- function(x, digits = attr(x, "digits"), ...) { signif.stars <- getOption("show.signif.stars") && attr(x, "permutations") > 0 starprint <- function(z) { if (signif.stars && any(z$p < 0.1)) { stars <- symnum(z$p, cutpoints = c(0, 0.001, 0.01, 0.05, 0.1, 1), symbols = c("***", "**", "*", ".", " ")) z <- cbind(z, " " = format(stars)) } z } out <- lapply(x, starprint) for (nm in names(out)) { cat("\nContrast:", nm, "\n\n") print(out[[nm]], digits = digits, ...) } if (signif.stars && any(sapply(x, function(z) z$p) < 0.1)) { leg <- attr(symnum(1, cutpoints = c(0, 0.001, 0.01, 0.05, 0.1, 1), symbols = c("***", "**", "*", ".", " ")), "legend") cat("---\nSignif. codes: ", leg, "\n") } if ((np <- attr(x, "permutations")) > 0) cat("P-values based on", np, "permutations\n") invisible(x) } vegan/R/showvarparts.R0000644000176200001440000000371511521606164014451 0ustar liggesusers"showvarparts" <- function(parts = 2, labels, ...) { rad <- 0.725 cp <- switch(parts, c(0,0), c(0,0, 1,0), c(0,0, 1,0, 0.5, -sqrt(3/4)), c(-0.5,0.3, 0.5, 0.3, 0, -sqrt(3/4)+0.3) ) cp <- matrix(cp, ncol=2, byrow=TRUE) plot(cp, axes=FALSE, xlab="", ylab="", asp=1, type="n", xlim = (range(cp[,1]) + c(-rad, rad)), ylim = (range(cp[,2]) + c(-rad, rad))) box() symbols(cp, circles = rep(rad, min(parts,3)), inches = FALSE, add=TRUE, ...) if (parts == 4) { symbols(0, 0.2, rectangles=cbind(1, 0.5), inches=FALSE, add=TRUE, ...) symbols(sqrt(1/2), -sqrt(3/4)+0.2, rectangles=cbind(0.5,0.3), inches=FALSE, add=TRUE, ...) } nlabs <- switch(parts, 2, 4, 8, 16) if (missing(labels)) labels <- paste("[", letters[1:nlabs], "]", sep="") if (length(labels) != nlabs) stop("needs ", nlabs, " labels, but input has" , length(labels)) switch(parts, text(0,0, labels[-nlabs], ...), text(rbind(cp[1,], colMeans(cp), cp[2,]), labels[-nlabs], ...), text(rbind(cp, colMeans(cp[1:2,]), colMeans(cp[2:3,]), colMeans(cp[c(1,3),]), colMeans(cp)), labels[-nlabs], ...), text(rbind(1.4*cp, c(0.8, -sqrt(3/4)+0.2), colMeans(cp[1:2,]) + c(0,0.25), colMeans(cp[2:3,]), colMeans(cp[c(1,3),]), cp[1,] + c(0.1,0), cp[2,] -c(0.1,0), c(0.6, -sqrt(3/4)+0.2), colMeans(cp[1:2,]), colMeans(cp)-c(0,0.12), colMeans(cp[2:3,]) + c(0,0.14), colMeans(cp[c(1,3),]) + c(0, 0.14), colMeans(cp) + c(0,0.08)), labels[-nlabs], ...) ) xy <- par("usr") text(xy[2] - 0.05*diff(xy[1:2]), xy[3] + 0.05*diff(xy[3:4]), paste("Residuals =", labels[nlabs]), pos = 2, ...) invisible() } vegan/R/screeplot.princomp.R0000644000176200001440000000427311340612334015527 0ustar liggesusers`screeplot.princomp` <- function(x, bstick = FALSE, type = c("barplot", "lines"), npcs = min(10, length(x$sdev)), ptype = "o", bst.col = "red", bst.lty = "solid", xlab = "Component", ylab = "Inertia", main = deparse(substitute(x)), legend = bstick, ...) { main type <- match.arg(type) eig.vals <- x$sdev^2 ncomps <- length(eig.vals) if(npcs > ncomps) npcs <- ncomps comps <- seq(len=npcs) if(bstick) { ord.bstick <- bstick(x) ylims <- range(eig.vals[comps], ord.bstick[comps]) } else { ylims <- range(eig.vals) } if(type=="barplot") { ## barplot looks weird if 0 not included ylims <- range(0, ylims) mids <- barplot(eig.vals[comps], names = names(eig.vals[comps]), main = main, ylab = ylab, ylim = ylims, ...) } else { plot(comps, eig.vals[comps], type = ptype, axes = FALSE, main = main, xlab = xlab, ylab = ylab, ...) axis(2) axis(1, at = comps, labels = names(eig.vals[comps])) mids <- comps box() } if(bstick) { dot.args <- list(...) dot.nams <- names(dot.args) pch <- if("pch" %in% dot.nams) dot.args$pch else par("pch") lines(mids, ord.bstick[comps], type = ptype, col = bst.col, lty = bst.lty, pch = pch) if(legend) { col <- if("col" %in% dot.nams) dot.args$col else par("col") lty <- if("lty" %in% dot.nams) dot.args$lty else par("lty") if(type == "lines") { legend("topright", legend = c("Ordination","Broken Stick"), bty = "n", col = c(col, bst.col), lty = c(lty, bst.lty), pch = pch) } else { legend("topright", legend = "Broken Stick", bty = "n", col = bst.col, lty = bst.lty, pch = pch) } } } invisible(xy.coords(x = mids, y = eig.vals[comps])) } vegan/R/screeplot.prcomp.R0000644000176200001440000000436111340612334015176 0ustar liggesusers`screeplot.prcomp` <- function(x, bstick = FALSE, type = c("barplot", "lines"), npcs = min(10, length(x$sdev)), ptype = "o", bst.col = "red", bst.lty = "solid", xlab = "Component", ylab = "Inertia", main = deparse(substitute(x)), legend = bstick, ...) { main type <- match.arg(type) eig.vals <- x$sdev^2 ## fix-up names on eig.vals names(eig.vals) <- dimnames(x$rotation)[[2]] ncomps <- length(eig.vals) if(npcs > ncomps) npcs <- ncomps comps <- seq(len=npcs) if(bstick) { ord.bstick <- bstick(x) ylims <- range(eig.vals[comps], ord.bstick[comps]) } else { ylims <- range(eig.vals) } if(type=="barplot") { ## barplot looks weird if 0 not included ylims <- range(0, ylims) mids <- barplot(eig.vals[comps], names = names(eig.vals[comps]), main = main, ylab = ylab, ylim = ylims, ...) } else { plot(comps, eig.vals[comps], type = ptype, axes = FALSE, main = main, xlab = xlab, ylab = ylab, ...) axis(2) axis(1, at = comps, labels = names(eig.vals[comps])) mids <- comps box() } if(bstick) { dot.args <- list(...) dot.nams <- names(dot.args) pch <- if("pch" %in% dot.nams) dot.args$pch else par("pch") lines(mids, ord.bstick[comps], type = ptype, col = bst.col, lty = bst.lty, pch = pch) if(legend) { col <- if("col" %in% dot.nams) dot.args$col else par("col") lty <- if("lty" %in% dot.nams) dot.args$lty else par("lty") if(type == "lines") { legend("topright", legend = c("Ordination","Broken Stick"), bty = "n", col = c(col, bst.col), lty = c(lty, bst.lty), pch = pch) } else { legend("topright", legend = "Broken Stick", bty = "n", col = bst.col, lty = bst.lty, pch = pch) } } } invisible(xy.coords(x = mids, y = eig.vals[comps])) } vegan/R/screeplot.decorana.R0000644000176200001440000000160710772724722015467 0ustar liggesusers`screeplot.decorana` <- function(x, bstick = FALSE, type = c("barplot", "lines"), npcs = 4, ptype = "o", bst.col = "red", bst.lty = "solid", xlab = "Component", ylab = "Inertia", main = deparse(substitute(x)), ...) { if (bstick) warning("'bstick' not available for 'decorana'") eig.vals <- x$evals ncomps <- length(eig.vals) comps <- seq(len=npcs) type <- match.arg(type) if(type=="barplot") { mids <- barplot(eig.vals[comps], names = names(eig.vals[comps]), main = main, ylab = ylab, ...) } else { plot(eig.vals[comps], type = ptype, axes = FALSE, xlab = xlab, ylab = ylab, main = main, ...) axis(2) axis(1, at = comps, labels = names(eig.vals[comps])) mids <- comps box() } invisible(xy.coords(x = mids, y = eig.vals[comps])) } vegan/R/screeplot.cca.R0000644000176200001440000000500211611330371014414 0ustar liggesusers`screeplot.cca` <- function(x, bstick = FALSE, type = c("barplot", "lines"), npcs = min(10, if(is.null(x$CCA) || x$CCA$rank == 0) x$CA$rank else x$CCA$rank), ptype = "o", bst.col = "red", bst.lty = "solid", xlab = "Component", ylab = "Inertia", main = deparse(substitute(x)), legend = bstick, ...) { if(is.null(x$CCA) || x$CCA$rank == 0) eig.vals <- x$CA$eig else eig.vals <- x$CCA$eig ncomps <- length(eig.vals) if(npcs > ncomps) npcs <- ncomps comps <- seq(len=npcs) type <- match.arg(type) if (bstick && !is.null(x$CCA) && x$CCA$rank > 0) { warning("'bstick' unavailable for constrained ordination") bstick <- FALSE } if(bstick) { ord.bstick <- bstick(x) ylims <- range(eig.vals[comps], ord.bstick[comps]) } else { ylims <- range(eig.vals) } if(type=="barplot") { ## barplot looks weird if 0 not included ylims <- range(0, ylims) mids <- barplot(eig.vals[comps], names = names(eig.vals[comps]), main = main, ylab = ylab, ylim = ylims, ...) } else { plot(eig.vals[comps], type = ptype, axes = FALSE, ylim = ylims, xlab = xlab, ylab = ylab, main = main, ...) axis(2) axis(1, at = comps, labels = names(eig.vals[comps])) box() mids <- comps } if(bstick) { dot.args <- list(...) dot.nams <- names(dot.args) pch <- if("pch" %in% dot.nams) dot.args$pch else par("pch") lines(mids, ord.bstick[comps], type = ptype, col = bst.col, lty = bst.lty, pch = pch) if(legend) { col <- if("col" %in% dot.nams) dot.args$col else par("col") lty <- if("lty" %in% dot.nams) dot.args$lty else par("lty") if(type == "lines") { legend("topright", legend = c("Ordination","Broken Stick"), bty = "n", col = c(col, bst.col), lty = c(lty, bst.lty), pch = pch) } else { legend("topright", legend = "Broken Stick", bty = "n", col = bst.col, lty = bst.lty, pch = pch) } } } invisible(xy.coords(x = mids, y = eig.vals[comps])) } vegan/R/scores.rda.R0000644000176200001440000000765611564301624013761 0ustar liggesusers`scores.rda` <- function (x, choices = c(1, 2), display = c("sp", "wa", "cn"), scaling = 2, const, ...) { ## Check the na.action, and pad the result with NA or WA if class ## "exclude" if (!is.null(x$na.action) && inherits(x$na.action, "exclude")) x <- ordiNApredict(x$na.action, x) tabula <- c("species", "sites", "constraints", "biplot", "centroids") names(tabula) <- c("sp", "wa", "lc", "bp", "cn") if (is.null(x$CCA)) tabula <- tabula[1:2] display <- match.arg(display, c("sites", "species", "wa", "lc", "bp", "cn"), several.ok = TRUE) if("sites" %in% display) display[display == "sites"] <- "wa" if("species" %in% display) display[display == "species"] <- "sp" take <- tabula[display] sumev <- x$tot.chi slam <- sqrt(c(x$CCA$eig, x$CA$eig)[choices]/sumev) nr <- if (is.null(x$CCA)) nrow(x$CA$u) else nrow(x$CCA$u) ## const multiplier of scores if (missing(const)) const <- sqrt(sqrt((nr-1) * sumev)) ## canoco 3 compatibility -- canoco 4 is incompatible ##else if (pmatch(const, "canoco")) { ## const <- (sqrt(nr-1), sqrt(nr)) ##} ## ## const[1] for species, const[2] for sites and friends if (length(const) == 1) { const <- c(const, const) } rnk <- x$CCA$rank sol <- list() if ("species" %in% take) { v <- cbind(x$CCA$v, x$CA$v)[, choices, drop=FALSE] if (scaling) { scal <- list(1, slam, sqrt(slam))[[abs(scaling)]] v <- sweep(v, 2, scal, "*") if (scaling < 0) { v <- sweep(v, 1, x$colsum, "/") v <- v * sqrt(sumev / (nr - 1)) } v <- const[1] * v } sol$species <- v } if ("sites" %in% take) { wa <- cbind(x$CCA$wa, x$CA$u)[, choices, drop=FALSE] if (scaling) { scal <- list(slam, 1, sqrt(slam))[[abs(scaling)]] wa <- sweep(wa, 2, scal, "*") wa <- const[2] * wa } sol$sites <- wa } if ("constraints" %in% take) { u <- cbind(x$CCA$u, x$CA$u)[, choices, drop=FALSE] if (scaling) { scal <- list(slam, 1, sqrt(slam))[[abs(scaling)]] u <- sweep(u, 2, scal, "*") u <- const[2] * u } sol$constraints <- u } if ("biplot" %in% take && !is.null(x$CCA$biplot)) { b <- matrix(0, nrow(x$CCA$biplot), length(choices)) b[, choices <= rnk] <- x$CCA$biplot[, choices[choices <= rnk]] colnames(b) <- c(colnames(x$CCA$u), colnames(x$CA$u))[choices] rownames(b) <- rownames(x$CCA$biplot) sol$biplot <- b } if ("centroids" %in% take) { if (is.null(x$CCA$centroids)) sol$centroids <- NA else { cn <- matrix(0, nrow(x$CCA$centroids), length(choices)) cn[, choices <= rnk] <- x$CCA$centroids[, choices[choices <= rnk]] colnames(cn) <- c(colnames(x$CCA$u), colnames(x$CA$u))[choices] rownames(cn) <- rownames(x$CCA$centroids) if (scaling) { scal <- list(slam, 1, sqrt(slam))[[abs(scaling)]] cn <- sweep(cn, 2, scal, "*") cn <- const[2] * cn } sol$centroids <- cn } } ## Take care that scores have names if (length(sol)) { for (i in 1:length(sol)) { if (is.matrix(sol[[i]])) rownames(sol[[i]]) <- rownames(sol[[i]], do.NULL = FALSE, prefix = substr(names(sol)[i], 1, 3)) } } ## Only one type of scores: return a matrix instead of a list if (length(sol) == 1) sol <- sol[[1]] ## collapse const if both items identical if (identical(const[1], const[2])) const <- const[1] attr(sol, "const") <- const return(sol) } vegan/R/scores.pcnm.R0000644000176200001440000000020511272236560014131 0ustar liggesusers`scores.pcnm` <- function(x, choices, ...) { if (missing(choices)) x$vectors else x$vectors[, choices] } vegan/R/scores.orditkplot.R0000644000176200001440000000024510751371066015375 0ustar liggesusers`scores.orditkplot` <- function(x, display, ...) { if (!missing(display) && !is.na(pmatch(display, "labels"))) x$labels else x$points } vegan/R/scores.ordiplot.R0000644000176200001440000000042510667741210015034 0ustar liggesusers"scores.ordiplot" <- function (x, display = "sites", ...) { if (length(x) == 1) return(x[[1]]) items <- names(x) items <- items[!is.na(items)] display <- match.arg(display, items) cmd <- paste("x", display, sep = "$") eval(parse(text = cmd)) } vegan/R/scores.ordihull.R0000644000176200001440000000041711377465314015032 0ustar liggesusers## Extract the points in the hull as a one matrix `scores.ordihull` <- function(x, ...) { out <- NULL for(i in 1:length(x)) out <- rbind(out, x[[i]]) hulls <- rep(names(x), sapply(x, function(z) NROW(z))) attr(out, "hulls") <- hulls out } vegan/R/scores.metaMDS.R0000644000176200001440000000151312062575412014471 0ustar liggesusers`scores.metaMDS` <- function(x, display = c("sites", "species"), shrink = FALSE, choices, ...) { display <- match.arg(display) if (missing(choices)) choices <- 1:x$ndim else choices <- choices[choices <= x$ndim] if (display == "sites") X <- x$points else if (display == "species") { X <- x$species if (shrink) { mul <- sqrt(attr(X, "shrinkage")) if (is.null(mul)) warning("Species cannot be shrunken, because they were not expanded") else { cnt <- attr(X, "centre") X <- sweep(X, 2, cnt, "-") X <- sweep(X, 2, mul, "*") X <- sweep(X, 2, cnt, "+") } } } colnames(X) <- paste("NMDS", 1:ncol(X), sep="") X[, choices, drop = FALSE] } vegan/R/scores.lda.R0000644000176200001440000000105311261563224013734 0ustar liggesusers`scores.lda` <- function(x, display, ...) { require(MASS) || stop("'lda' objects created in MASS need MASS for 'scores'") display <- match.arg(display, c("sites", "species", "scores", "predictors", "x", "coef"), several.ok = TRUE) out <- NULL if (display %in% c("sites", "scores", "x")) out[["scores"]] <- predict(x)$x if (display %in% c("species", "predictors", "coef")) out[["coefficients"]] <- coef(x) if (length(out) == 1) out <- out[[1]] out } vegan/R/scores.envfit.R0000644000176200001440000000120610667741210014471 0ustar liggesusers"scores.envfit" <- function (x, display, choices, ...) { display <- match.arg(display, c("vectors", "bp", "factors", "cn")) if (display %in% c("vectors", "bp")) { out <- x$vectors$arrows[, , drop = FALSE] if (!is.null(out)) out <- sweep(out, 1, sqrt(x$vectors$r), "*") } else out <- x$factors$centroids[, , drop = FALSE] if (!missing(choices) && !is.null(out)) { if (length(choices) <= ncol(out)) out <- out[, choices, drop = FALSE] else stop("You requested ", length(choices), " dimensions, but 'envfit' only has ", ncol(out)) } out } vegan/R/scores.default.R0000644000176200001440000000350211717675444014637 0ustar liggesusers"scores.default" <- function (x, choices, display = c("sites", "species"), ...) { display <- match.arg(display) att <- names(x) if (is.data.frame(x) && all(sapply(x, is.numeric))) x <- as.matrix(x) if (is.list(x) && display == "sites") { if ("points" %in% att) X <- x$points else if ("rproj" %in% att) X <- x$rproj else if ("x" %in% att) X <- x$x else if ("scores" %in% att) X <- x$scores else if ("sites" %in% att) X <- x$sites else if("li" %in% att) X <- x$li else if("l1" %in% att) X <- x$l1 else stop("Can't find scores") } else if (is.list(x) && display == "species") { if ("species" %in% att) X <- x$species else if ("cproj" %in% att) X <- x$cproj else if ("rotation" %in% att) X <- x$rotation else if ("loadings" %in% att) X <- x$loadings else if ("co" %in% att) X <- x$co else if ("c1" %in% att) X <- x$c1 else stop("Can't find scores") } else if (is.numeric(x)) { X <- as.matrix(x) ## as.matrix() changes 1-row scores into 1-col matrix: this is ## a hack which may fail sometimes (but probably less often ## than without this hack): if (ncol(X) == 1 && nrow(X) == length(choices)) X <- t(X) } if (is.null(rownames(X))) { root <- substr(display, 1, 4) rownames(X) <- paste(root, 1:nrow(X), sep = "") } if (is.null(colnames(X))) colnames(X) <- paste("Dim", 1:ncol(X), sep = "") if (!missing(choices)) { choices <- choices[choices <= ncol(X)] X <- X[, choices, drop = FALSE] } X <- as.matrix(X) X } vegan/R/scores.decorana.R0000644000176200001440000000046710667741210014762 0ustar liggesusers"scores.decorana" <- function (x, display=c("sites","species"), choices = 1:4, origin=TRUE, ...) { display <- match.arg(display) if(display == "sites") X <- x$rproj else if(display == "species") X <- x$cproj if (origin) X <- sweep(X, 2, x$origin, "-") X <- X[,choices] X } vegan/R/scores.cca.R0000644000176200001440000000737611564301624013740 0ustar liggesusers`scores.cca` <- function (x, choices = c(1, 2), display = c("sp", "wa", "cn"), scaling = 2, ...) { if(inherits(x, "pcaiv")) { warning("looks like ade4::cca object: you better use ade4 functions") x <- ade2vegancca(x) } ## Check the na.action, and pad the result with NA or WA if class ## "exclude" if (!is.null(x$na.action) && inherits(x$na.action, "exclude")) x <- ordiNApredict(x$na.action, x) tabula <- c("species", "sites", "constraints", "biplot", "centroids") names(tabula) <- c("sp", "wa", "lc", "bp", "cn") if (is.null(x$CCA)) tabula <- tabula[1:2] display <- match.arg(display, c("sites", "species", "wa", "lc", "bp", "cn"), several.ok = TRUE) if("sites" %in% display) display[display == "sites"] <- "wa" if("species" %in% display) display[display == "species"] <- "sp" take <- tabula[display] slam <- sqrt(c(x$CCA$eig, x$CA$eig)[choices]) rnk <- x$CCA$rank sol <- list() if ("species" %in% take) { v <- cbind(x$CCA$v, x$CA$v)[, choices, drop = FALSE] if (scaling) { scal <- list(1, slam, sqrt(slam))[[abs(scaling)]] v <- sweep(v, 2, scal, "*") if (scaling < 0) { scal <- sqrt(1/(1 - slam^2)) v <- sweep(v, 2, scal, "*") } } sol$species <- v } if ("sites" %in% take) { wa <- cbind(x$CCA$wa, x$CA$u)[, choices, drop = FALSE] if (scaling) { scal <- list(slam, 1, sqrt(slam))[[abs(scaling)]] wa <- sweep(wa, 2, scal, "*") if (scaling < 0) { scal <- sqrt(1/(1 - slam^2)) wa <- sweep(wa, 2, scal, "*") } } sol$sites <- wa } if ("constraints" %in% take) { u <- cbind(x$CCA$u, x$CA$u)[, choices, drop = FALSE] if (scaling) { scal <- list(slam, 1, sqrt(slam))[[abs(scaling)]] u <- sweep(u, 2, scal, "*") if (scaling < 0) { scal <- sqrt(1/(1 - slam^2)) u <- sweep(u, 2, scal, "*") } } sol$constraints <- u } if ("biplot" %in% take && !is.null(x$CCA$biplot)) { b <- matrix(0, nrow(x$CCA$biplot), length(choices)) b[, choices <= rnk] <- x$CCA$biplot[, choices[choices <= rnk]] colnames(b) <- c(colnames(x$CCA$u), colnames(x$CA$u))[choices] rownames(b) <- rownames(x$CCA$biplot) sol$biplot <- b } if ("centroids" %in% take) { if (is.null(x$CCA$centroids)) sol$centroids <- NA else { cn <- matrix(0, nrow(x$CCA$centroids), length(choices)) cn[, choices <= rnk] <- x$CCA$centroids[, choices[choices <= rnk]] colnames(cn) <- c(colnames(x$CCA$u), colnames(x$CA$u))[choices] rownames(cn) <- rownames(x$CCA$centroids) if (scaling) { scal <- list(slam, 1, sqrt(slam))[[abs(scaling)]] cn <- sweep(cn, 2, scal, "*") if (scaling < 0) { scal <- sqrt(1/(1 - slam^2)) cn <- sweep(cn, 2, scal, "*") } } sol$centroids <- cn } } ## Take care that scores have names if (length(sol)) { for (i in 1:length(sol)) { if (is.matrix(sol[[i]])) rownames(sol[[i]]) <- rownames(sol[[i]], do.NULL = FALSE, prefix = substr(names(sol)[i], 1, 3)) } } ## Only one type of scores: return a matrix instead of a list if (length(sol) == 1) sol <- sol[[1]] return(sol) } vegan/R/scores.betadiver.R0000644000176200001440000000044710766226056015157 0ustar liggesusers`scores.betadiver` <- function(x, triangular = TRUE, ...) { if (triangular) { tot <- x$a + x$b + x$c a <- x$a/tot c <- x$c/tot y <- sqrt(0.75)*a x <- c + a/2 out <- cbind(x, y) } else { out <- sapply(x, cbind) } out } vegan/R/scores.betadisper.R0000644000176200001440000000077111527004531015320 0ustar liggesusers`scores.betadisper` <- function(x, display = c("sites", "centroids"), choices = c(1,2), ...) { display <- match.arg(display, several.ok = TRUE) sol <- list() if("sites" %in% display) sol$sites <- x$vectors[, choices] if("centroids" %in% display) { if(is.matrix(x$centroids)) sol$centroids <- x$centroids[, choices] else sol$centroids <- x$centroids[choices] } if (length(sol) == 1) sol <- sol[[1]] sol } vegan/R/scores.R0000644000176200001440000000006110667741210013175 0ustar liggesusers"scores" <- function(x, ...) UseMethod("scores") vegan/R/rrarefy.R0000644000176200001440000000307511751503107013355 0ustar liggesusers### Random rarefied subsample: sample without replacement `rrarefy` <- function(x, sample) { if (!identical(all.equal(x, round(x)), TRUE)) stop("function is meaningful only for integers (counts)") x <- as.matrix(x) if (ncol(x) == 1) x <- t(x) if (length(sample) > 1 && length(sample) != nrow(x)) stop(gettextf( "length of 'sample' and number of rows of 'x' do not match")) sample <- rep(sample, length=nrow(x)) colnames(x) <- colnames(x, do.NULL = FALSE) nm <- colnames(x) for (i in 1:nrow(x)) { row <- sample(rep(nm, times=x[i,]), sample[i]) row <- table(row) ind <- names(row) x[i,] <- 0 x[i,ind] <- row } x } ### Probabilities that species occur in a rarefied 'sample' `drarefy` <- function(x, sample) { if (!identical(all.equal(x, round(x)), TRUE)) stop("function accepts only integers (counts)") if (length(sample) > 1 && length(sample) != nrow(x)) stop(gettextf( "length of 'sample' and number of rows of 'x' do not match")) x <- drop(as.matrix(x)) ## dfun is kluge: first item of vector x must be the sample size, ## and the rest is the community data. This seemed an easy trick ## to evaluate dfun in an apply() instead of a loop. dfun <- function(x, sample) { J <- sum(x[-1]) sample <- min(x[1], J) 1 - exp(lchoose(J - x[-1], sample) - lchoose(J, sample)) } if (length(dim(x)) > 1) t(apply(cbind(sample, x), 1, dfun)) else dfun(c(sample, x)) } vegan/R/rgl.renyiaccum.R0000644000176200001440000000224111521606164014621 0ustar liggesusers`rgl.renyiaccum` <- function(x, rgl.height = 0.2, ...) { require(rgl) || stop("requires packages 'rgl'") y <- x[,,1] * rgl.height rgl.min = 0 rgl.max = max(y) xp <- seq(0, 1, len = nrow(y)) z <- seq(0, 1, len = ncol(y)) ylim <- 1000 * range(y) ylen <- ylim[2] - ylim[1] + 1 colorlut <- rainbow(ylen) col <- colorlut[1000*y-ylim[1]+1] rgl.bg(color = "white") rgl.surface(xp, z, y, color=col) y <- x[,,5] * rgl.height ##rgl.surface(xp,z,y,color="grey", alpha=0.3) rgl.surface(xp, z, y, color="black", front="lines", back="lines") y <- x[,,6] * rgl.height ##rgl.surface(xp,z,y,color="grey",alpha=0.3) rgl.surface(xp, z, y, color="black", front="lines", back="lines") y <- x[,,6]*0 + rgl.min rgl.surface(xp, z, y, alpha=0) y <- x[,,6] * 0 + rgl.max rgl.surface(xp, z, y, alpha=0) labs <- pretty(c(rgl.min, range(x))) rgl.bbox(color="#333377", emission="#333377", specular="#3333FF", shininess=5, alpha=0.8, zlen=0, xlen=0, yat = rgl.height*labs, ylab=labs) rgl.texts(0, rgl.min, 0.5, "Scale", col = "darkblue") rgl.texts(0.5, rgl.min, 0, "Sites", col="darkblue") } vegan/R/rgl.isomap.R0000644000176200001440000000041210764216411013750 0ustar liggesusers`rgl.isomap` <- function(x, web = "white", ...) { require(rgl) || stop("requires package 'rgl'") ordirgl(x, ...) z <- scores(x, ...) net <- x$net for (i in 1:nrow(net)) rgl.lines(z[net[i,],1], z[net[i,],2], z[net[i,],3], color=web) } vegan/R/residuals.procrustes.R0000644000176200001440000000024110667741210016102 0ustar liggesusers"residuals.procrustes" <- function (object, ...) { distance <- object$X - object$Yrot resid <- apply(distance^2, 1, sum) resid <- sqrt(resid) resid } vegan/R/residuals.cca.R0000644000176200001440000000011410667741210014416 0ustar liggesusers"residuals.cca" <- function(object, ...) fitted(object, model = "CA", ...) vegan/R/renyiaccum.R0000644000176200001440000000273210667741210014045 0ustar liggesusers`renyiaccum` <- function(x, scales=c(0, 0.5, 1, 2, 4, Inf), permutations = 100, raw = FALSE, ...) { x <- as.matrix(x) n <- nrow(x) p <- ncol(x) if (p==1) { x <- t(x) n <- nrow(x) p <- ncol(x) } m <- length(scales) result <- array(dim=c(n,m,permutations)) dimnames(result) <- list(pooled.sites=c(1:n), scale=scales, permutation=c(1:permutations)) for (k in 1:permutations) { result[,,k] <- as.matrix(renyi((apply(x[sample(n),],2,cumsum)), scales=scales, ...)) } if (raw) { if (m==1) { result <- result[,1,] } }else{ tmp <- array(dim=c(n,m,6)) for (i in 1:n) { for (j in 1:m) { tmp[i,j,1] <- mean(result[i,j,1:permutations]) tmp[i,j,2] <- sd(result[i,j,1:permutations]) tmp[i,j,3] <- min(result[i,j,1:permutations]) tmp[i,j,4] <- max(result[i,j,1:permutations]) tmp[i,j,5] <- quantile(result[i,j,1:permutations],0.025) tmp[i,j,6] <- quantile(result[i,j,1:permutations],0.975) } } result <- tmp dimnames(result) <- list(pooled.sites=c(1:n), scale=scales, c("mean", "stdev", "min", "max", "Qnt 0.025", "Qnt 0.975")) } class(result) <- c("renyiaccum", class(result)) result } vegan/R/renyi.R0000644000176200001440000000227610667741210013037 0ustar liggesusers`renyi` <- function (x, scales = c(0, 0.25, 0.5, 1, 2, 4, 8, 16, 32, 64, Inf), hill = FALSE) { x <- as.matrix(x) n <- nrow(x) p <- ncol(x) if (p == 1) { x <- t(x) n <- nrow(x) p <- ncol(x) } x <- decostand(x, "total", 1) m <- length(scales) result <- array(0, dim = c(n, m)) dimnames(result) <- list(sites = rownames(x), scale = scales) for (a in 1:m) { if (scales[a] != 0 && scales[a] != 1 && scales[a] != Inf) { result[, a] <- log(apply(x^scales[a], 1, sum))/(1 - scales[a]) } else { if (scales[a] == 0) { result[, a] <- log(apply(x > 0, 1, sum)) } else if (scales[a] == Inf) { result[, a] <- -log(apply(x, 1, max)) } else { result[, a] <- diversity(x) } } } if (hill) result <- exp(result) result <- as.data.frame(result) if (any(dim(result) == 1)) result <- unlist(result, use.names = TRUE) class(result) <- c("renyi", class(result)) result } vegan/R/read.cep.R0000644000176200001440000001001011237462302013347 0ustar liggesusers"read.cep" <- function (file, maxdata = 10000, positive = TRUE, trace = FALSE, force = FALSE) { if (!force) { stop("R may crash: if you want to try, save your session and use 'force=TRUE'") } if (is.loaded("_gfortran_ioparm")) warning("It seems that you have used gfortran: the input may be corrupted\n") ftypes <- c("free", "open", "condensed") file <- path.expand(file) if (trace) cat("File", file, "\n") if (file.access(file, 4) < 0) { stop("File does not exist or is not readable.") } on.exit(.Fortran("cepclose", PACKAGE = "vegan")) cep <- .Fortran("cephead", file = file, kind = integer(1), nitem = integer(1), nst = integer(1), fmt = character(1), PACKAGE = "vegan") if (cep$kind > 3) stop("Unknown CEP file type") if (trace) { cat("looks like", ftypes[cep$kind], "CEP file,\n") cat("with", cep$nitem, "items per record") if (cep$kind == 1) cat(" and", cep$nst, "records") cat(".\n") } switch(cep$kind, cd <- .Fortran("cepfree", nitem = as.integer(cep$nitem), axdat = as.integer(maxdata), nsp = integer(1), nst = as.integer(cep$nst), i = integer(maxdata), j = integer(maxdata), y = double(maxdata), w = double(cep$nitem), ier = integer(1), PACKAGE = "vegan"), cd <- .Fortran("cepopen", fmt = as.character(cep$fmt), nitem = as.integer(cep$nitem), maxdat = as.integer(maxdata), nsp = integer(1), nst = integer(1), i = integer(maxdata), j = integer(maxdata), y = double(maxdata), w = double(cep$nitem), ier = integer(1), PACKAGE = "vegan"), cd <- .Fortran("cepcond", fmt = as.character(cep$fmt), nitem = as.integer(cep$nitem), maxdat = as.integer(maxdata), nsp = integer(1), nst = integer(1), i = integer(maxdata), j = integer(maxdata), y = double(maxdata), w = double(cep$nitem), iw = integer(cep$nitem), ier = integer(1), PACKAGE = "vegan")) if (cd$ier) { if (cd$ier == 1) stop("Too many non-zero entries: increase maxdata.") else stop("Unknown and obscure error: don't know what to do.") } if (trace) cat("Read", cd$nsp, "species, ", cd$nst, "sites.\n") d <- matrix(0, cd$nst, cd$nsp) for (i in 1:length(cd$i)) d[cd$i[i], cd$j[i]] <- cd$y[i] nlines <- ceiling(cd$nsp/10) names <- NULL for (i in 1:nlines) { tmpnames <- .Fortran("cepnames", character(1), PACKAGE = "vegan") tmpnames <- substring(as.character(tmpnames), 1, 80) tmpnames <- substring(tmpnames, seq(1, 80, by = 8), seq(8, 80, by = 8)) names <- c(names, tmpnames) } names <- gsub(" ", "", names) names <- make.names(names, unique = TRUE) colnames(d) <- names[1:ncol(d)] nlines <- ceiling(cd$nst/10) names <- NULL for (i in 1:nlines) { tmpnames <- .Fortran("cepnames", character(1), PACKAGE = "vegan") tmpnames <- substring(as.character(tmpnames), 1, 80) tmpnames <- substring(tmpnames, seq(1, 80, by = 8), seq(8, 80, by = 8)) names <- c(names, tmpnames) } names <- gsub(" ", "", names) names <- make.names(names, unique = TRUE) rownames(d) <- names[1:nrow(d)] if (positive) { rsum <- apply(d, 1, sum) csum <- apply(d, 2, sum) d <- d[rsum > 0, csum > 0] } as.data.frame(d) } vegan/R/rda.formula.R0000644000176200001440000000232411570734230014113 0ustar liggesusers`rda.formula` <- function (formula, data, scale = FALSE, na.action = na.fail, subset = NULL, ...) { if (missing(data)) { data <- parent.frame() } else { data <- ordiGetData(match.call(), environment(formula)) } d <- ordiParseFormula(formula, data, na.action = na.action, subset = substitute(subset)) sol <- rda.default(d$X, d$Y, d$Z, scale) if (!is.null(sol$CCA) && sol$CCA$rank > 0) sol$CCA$centroids <- centroids.cca(sol$CCA$wa, d$modelframe) if (!is.null(sol$CCA$alias)) sol$CCA$centroids <- unique(sol$CCA$centroids) if (!is.null(sol$CCA$centroids)) { rs <- rowSums(sol$CCA$centroids^2) sol$CCA$centroids <- sol$CCA$centroids[rs > 1e-04, , drop = FALSE] if (length(sol$CCA$centroids) == 0) sol$CCA$centroids <- NULL } sol$terms <- d$terms sol$terminfo <- ordiTerminfo(d, d$modelframe) sol$subset <- d$subset sol$na.action <- d$na.action sol$call <- match.call() sol$call[[1]] <- as.name("rda") sol$call$formula <- formula(d$terms, width.cutoff = 500) if (!is.null(sol$na.action)) sol <- ordiNAexclude(sol, d$excluded) sol } vegan/R/rda.default.R0000644000176200001440000001076111644641440014100 0ustar liggesusers`rda.default` <- function (X, Y, Z, scale = FALSE, ...) { ZERO <- 1e-04 CCA <- NULL pCCA <- NULL CA <- NULL X <- as.matrix(X) NR <- nrow(X) - 1 Xbar <- scale(X, center = TRUE, scale = scale) SD <- apply(Xbar, 2, sd) if (scale) Xbar[is.nan(Xbar)] <- 0 tot.chi <- sum(svd(Xbar, nu = 0, nv = 0)$d^2)/NR if (!missing(Z) && !is.null(Z)) { Z <- as.matrix(Z) Z.r <- scale(Z, center = TRUE, scale = FALSE) Q <- qr(Z.r) Z <- qr.fitted(Q, Xbar) tmp <- sum(svd(Z, nu = 0, nv = 0)$d^2)/NR if (Q$rank) { pCCA <- list(rank = Q$rank, tot.chi = tmp, QR = Q, Fit = Z, envcentre = attr(Z.r, "scaled:center")) Xbar <- qr.resid(Q, Xbar) } if (tmp < ZERO) pCCA$tot.chi <- 0 } else Z.r <- NULL if (!missing(Y) && !is.null(Y)) { Y <- as.matrix(Y) Y.r <- scale(Y, center = TRUE, scale = FALSE) Q <- qr(cbind(Z.r, Y.r), tol = ZERO) if (is.null(pCCA)) rank <- Q$rank else rank <- Q$rank - pCCA$rank ## qrank saves the rank of the constraints qrank <- rank Y <- qr.fitted(Q, Xbar) sol <- svd(Y) ## it can happen that rank < qrank rank <- min(rank, sum(sol$d > ZERO)) sol$d <- sol$d/sqrt(NR) ax.names <- paste("RDA", 1:length(sol$d), sep = "") colnames(sol$u) <- ax.names colnames(sol$v) <- ax.names names(sol$d) <- ax.names rownames(sol$u) <- rownames(X) rownames(sol$v) <- colnames(X) if (rank) { CCA <- list(eig = sol$d[1:rank]^2) CCA$u <- as.matrix(sol$u)[, 1:rank, drop = FALSE] CCA$v <- as.matrix(sol$v)[, 1:rank, drop = FALSE] CCA$u.eig <- sweep(as.matrix(CCA$u), 2, sol$d[1:rank], "*") CCA$v.eig <- sweep(as.matrix(CCA$v), 2, sol$d[1:rank], "*") CCA$wa.eig <- Xbar %*% sol$v[, 1:rank, drop = FALSE] CCA$wa.eig <- CCA$wa.eig/sqrt(NR) CCA$wa <- sweep(CCA$wa.eig, 2, 1/sol$d[1:rank], "*") oo <- Q$pivot if (!is.null(pCCA$rank)) oo <- oo[-(1:pCCA$rank)] - ncol(Z.r) oo <- oo[1:qrank] if (length(oo) < ncol(Y.r)) CCA$alias <- colnames(Y.r)[-oo] CCA$biplot <- cor(Y.r[, oo, drop = FALSE], sol$u[, 1:rank, drop = FALSE]) CCA$rank <- rank CCA$qrank <- qrank CCA$tot.chi <- sum(CCA$eig) CCA$QR <- Q CCA$envcentre <- attr(Y.r, "scaled:center") CCA$Xbar <- Xbar Xbar <- qr.resid(Q, Xbar) } else { CCA <- list(eig = 0, rank = rank, qrank = qrank, tot.chi = 0, QR = Q, Xbar = Xbar) u <- matrix(0, nrow=nrow(sol$u), ncol=0) v <- matrix(0, nrow=nrow(sol$v), ncol=0) CCA$u <- CCA$u.eig <- CCA$wa <- CCA$wa.eig <- u CCA$v <- CCA$v.eig <- v CCA$biplot <- matrix(0, 0, 0) CCA$alias <- colnames(Y.r) } } Q <- qr(Xbar) sol <- svd(Xbar) sol$d <- sol$d/sqrt(NR) ax.names <- paste("PC", 1:length(sol$d), sep = "") colnames(sol$u) <- ax.names colnames(sol$v) <- ax.names names(sol$d) <- ax.names rownames(sol$u) <- rownames(X) rownames(sol$v) <- colnames(X) rank <- min(Q$rank, sum(sol$d > ZERO)) if (rank) { CA <- list(eig = (sol$d[1:rank]^2)) CA$u <- as.matrix(sol$u)[, 1:rank, drop = FALSE] CA$v <- as.matrix(sol$v)[, 1:rank, drop = FALSE] CA$u.eig <- sweep(as.matrix(CA$u), 2, sol$d[1:rank], "*") CA$v.eig <- sweep(as.matrix(CA$v), 2, sol$d[1:rank], "*") CA$rank <- rank CA$tot.chi <- sum(CA$eig) CA$Xbar <- Xbar } else { # zero rank: no residual component CA <- list(eig = 0, rank = rank, tot.chi = 0, Xbar = Xbar) CA$u <- CA$u.eig <- matrix(0, nrow(sol$u), 0) CA$v <- CA$v.eig <- matrix(0, nrow(sol$v), 0) } call <- match.call() call[[1]] <- as.name("rda") sol <- list(call = call, grand.total = NA, rowsum = NA, colsum = SD, tot.chi = tot.chi, pCCA = pCCA, CCA = CCA, CA = CA) sol$method <- "rda" sol$inertia <- if (scale) "correlations" else "variance" class(sol) <- c("rda", "cca") sol } vegan/R/rda.R0000644000176200001440000000006210667741210012446 0ustar liggesusers"rda" <- function (...) { UseMethod("rda") } vegan/R/raupcrick.R0000644000176200001440000000207111636647312013672 0ustar liggesusers`raupcrick` <- function(comm, null = "r1", nsimul = 999, chase = FALSE) { comm <- as.matrix(comm) comm <- ifelse(comm > 0, 1, 0) ## 'tri' is a faster alternative to as.dist(): it takes the lower ## diagonal, but does not set attributes of a "dist" object N <- nrow(comm) tri <- matrix(FALSE, N, N) tri <- row(tri) > col(tri) ## function(x) designdist(x, "J", terms="binary") does the same, ## but is much slower sol <- oecosimu(comm, function(x) tcrossprod(x)[tri], method = null, nsimul = nsimul, alternative = if (chase) "greater" else "less") ## Chase et al. way, or the standard way if (chase) out <- 1 - sol$oecosimu$pval else out <- sol$oecosimu$pval ## set attributes of a "dist" object attributes(out) <- list("class"=c("raupcrick", "dist"), "Size"=N, "Labels" = rownames(comm), "call" = match.call(), "Diag" = FALSE, "Upper" = FALSE, "method" = "raupcrick") out } vegan/R/rarefy.R0000644000176200001440000000332711535135414013175 0ustar liggesusers`rarefy` <- function (x, sample, se = FALSE, MARGIN = 1) { x <- as.matrix(x) ## as.matrix changes an n-vector to a n x 1 matrix if (ncol(x) == 1 && MARGIN == 1) x <- t(x) if (!identical(all.equal(x, round(x)), TRUE)) stop("function accepts only integers (counts)") if (missing(sample)) { sample <- min(apply(x, MARGIN, sum)) info <- paste("The size of 'sample' must be given --\nHint: Smallest site maximum", sample) stop(info) } rarefun <- function(x, sample) { x <- x[x > 0] J <- sum(x) ldiv <- lchoose(J, sample) p1 <- ifelse(J - x < sample, 0, exp(lchoose(J - x, sample) - ldiv)) out <- sum(1 - p1) if (se) { V <- sum(p1 * (1 - p1)) Jxx <- J - outer(x, x, "+") ind <- lower.tri(Jxx) Jxx <- Jxx[ind] V <- V + 2 * sum(ifelse(Jxx < sample, 0, exp(lchoose(Jxx, sample) - ldiv)) - outer(p1, p1)[ind]) out <- cbind(out, sqrt(V)) } out } if (length(sample) > 1) { S.rare <- sapply(sample, function(n) apply(x, MARGIN, rarefun, sample = n)) S.rare <- matrix(S.rare, ncol=length(sample)) colnames(S.rare) <- paste("N", sample, sep="") if (se) { dn <- unlist(dimnames(x)[MARGIN]) rownames(S.rare) <- paste(rep(dn, each=2), c("S","se"), sep=".") } } else { S.rare <- apply(x, MARGIN, rarefun, sample = sample) if (se) rownames(S.rare) <- c("S", "se") } attr(S.rare, "Subsample") <- sample S.rare } vegan/R/rarecurve.R0000644000176200001440000000222511662226200013672 0ustar liggesusers`rarecurve` <- function(x, step = 1, sample, xlab = "Sample Size", ylab = "Species", label = TRUE,...) { tot <- rowSums(x) S <- specnumber(x) nr <- nrow(x) ## Rarefy out <- lapply(seq_len(nr), function(i) { n <- seq(1, tot[i], by = step) if (n[length(n)] != tot[i]) n <- c(n, tot[i]) drop(rarefy(x[i,], n)) }) Nmax <- sapply(out, function(x) max(attr(x, "Subsample"))) Smax <- sapply(out, max) ## set up plot plot(c(1, max(Nmax)), c(1, max(Smax)), xlab = xlab, ylab = ylab, type = "n", ...) ## rarefied richnesses for given 'sample' if (!missing(sample)) { abline(v = sample) rare <- sapply(out, function(z) approx(x = attr(z, "Subsample"), y = z, xout = sample, rule = 1)$y) abline(h = rare, lwd=0.5) } ## rarefaction curves for(ln in seq_len(length(out))) { N <- attr(out[[ln]], "Subsample") lines(N, out[[ln]], ...) } ## label curves at their endpoitns if (label) { ordilabel(cbind(tot, S), labels=rownames(x), ...) } invisible(out) } vegan/R/rankindex.R0000644000176200001440000000343411444633357013677 0ustar liggesusers"rankindex" <- function (grad, veg, indices = c("euc", "man", "gow", "bra", "kul"), stepacross = FALSE, method = "spearman", ...) { grad <- as.data.frame(grad) if (any(sapply(grad, is.factor))) { require(cluster) || stop("factors in 'grad' need package 'cluster'") message("'grad' included factors: used cluster:::daisy") span <- daisy(grad) } else { span <- vegdist(grad, "eucl") } veg <- as.matrix(veg) res <- numeric(length(indices)) ## create names if indices is a list of functions without names if (is.list(indices)) { nam <- names(indices) if (is.null(nam)) nam <- paste("dis", 1:length(indices), sep="") } else nam <- indices names(res) <- nam ## indices is a list of functions which return dist objects if (is.list(indices)) { for (i in 1:length(indices)) { ## don't accept similarities if (indices[[i]](matrix(1, 2, 2)) != 0) stop("define dissimilarity and not similarity") y <- indices[[i]](veg) ## check class of output if (!inherits(y, "dist")) stop("function in 'indices' must return a 'dist' object") if (stepacross) { is.na(y) <- no.shared(veg) y <- stepacross(y, trace = FALSE, toolong = -1, ...) } res[i] <- cor(span, y, method = method) } ## indices is a character vector naming methods in vegdist } else { for (i in indices) { y <- vegdist(veg, i) if (stepacross) { is.na(y) <- no.shared(veg) y <- stepacross(y, trace = FALSE, toolong = -1, ...) } res[i] <- cor(span, y, method = method) } } res } vegan/R/radlattice.R0000644000176200001440000000220712031100300013767 0ustar liggesusers`radlattice` <- function(x, BIC = FALSE, ...) { if (!inherits(x, "radfit")) stop("function only works with 'radfit' results for single site") require(lattice) || stop("requires package 'lattice'") y <- x$y fv <- unlist(fitted(x)) mods <- names(x$models) p <- length(mods) n <- length(y) Abundance <- rep(y, p) Rank <- rep(1:n, p) Model <- factor(rep(mods, each=n), levels = mods) if (BIC) k <- log(length(y)) else k <- 2 aic <- AIC(x, k = k) col <- trellis.par.get("superpose.line")$col if (length(col) > 1) col <- col[2] xyplot(Abundance ~ Rank | Model, subscripts = TRUE, scales = list(y = list(log = 2)), as.table = TRUE, panel = function(x, y, subscripts) { panel.xyplot(x, y, ...) panel.xyplot(x, log2(fv[subscripts]), type="l", lwd=3, col = col, ...) panel.text(max(x), max(y), paste(if (BIC) "BIC" else "AIC", "=", formatC(aic[panel.number()], digits=2, format="f")), pos=2) } ) } vegan/R/radfit.default.R0000644000176200001440000000071611071152507014575 0ustar liggesusers"radfit.default" <- function (x, ...) { x <- as.rad(x) NU <- rad.null(x, ...) PE <- rad.preempt(x, ...) ##BS <- rad.brokenstick(x, ...) LN <- rad.lognormal(x, ...) ZP <- rad.zipf(x, ...) ZM <- rad.zipfbrot(x, ...) out <- list(y = x, family = PE$family) models <- list(Null = NU, Preemption = PE, Lognormal = LN, Zipf = ZP, Mandelbrot = ZM) out$models <- models class(out) <- "radfit" out } vegan/R/radfit.data.frame.R0000644000176200001440000000057512031100300015133 0ustar liggesusers`radfit.data.frame` <- function(x, ...) { ## x *must* have rownames rownames(x) <- rownames(x, do.NULL = TRUE) out <- apply(x, 1, radfit, ...) if (length(out) == 1) out <- out[[1]] else { Call <- match.call() class(out) <- "radfit.frame" } out } `radfit.matrix` <- function(x, ...) { radfit(as.data.frame(x), ...) } vegan/R/radfit.R0000644000176200001440000000007612031100300013126 0ustar liggesusers`radfit` <- function (x, ...) { UseMethod("radfit") } vegan/R/rad.zipfbrot.R0000644000176200001440000000306711072370264014312 0ustar liggesusers"rad.zipfbrot" <- function (x, family = poisson, ...) { mandelfun <- function(p, x, ...) { brnk <- log(rnk + exp(p)) sol <- glm(x ~ brnk + offset(off), family = family(link = "log")) -logLik(sol) } x <- as.rad(x) rnk <- seq(along = x) off <- rep(log(sum(x)), length(x)) p <- 0 fam <- family(link = "log") if (length(x) > 2) nl <- try(nlm(mandelfun, p = p, x = x, rnk = rnk, off = off, family = fam, hessian = TRUE, ...)) if (length(x) < 3) { aic <- NA dev <- rdf <- 0 ln <- nl <- NA p <- rep(NA, 3) fit <- x res <- rep(0, length(x)) wts <- rep(1, length(x)) } else if (inherits(nl, "try-error")) { aic <- rdf <- ln <- nl <- dev <- NA p <- rep(NA, 3) fit <- res <- wts <- rep(NA, length(x)) } else { ln <- glm(x ~ log(rnk + exp(nl$estimate)) + offset(off), family = family(link = "log")) fit <- fitted(ln) p <- c(coef(ln), exp(nl$estimate)) p[1] <- exp(p[1]) aic <- AIC(ln) + 2 rdf <- df.residual(ln) - 1 dev <- deviance(ln) res <- ln$residuals wts <- weights(ln) } names(p) <- c("c", "gamma", "beta") out <- list(model = "Zipf-Mandelbrot", family = fam, y = x, coefficients = p, fitted.values = fit, aic = aic, rank = 3, df.residual = rdf, deviance = dev, residuals = res, prior.weights = wts) class(out) <- c("radline", "glm") out } vegan/R/rad.zipf.R0000644000176200001440000000220611072370264013415 0ustar liggesusers"rad.zipf" <- function (x, family = poisson, ...) { x <- as.rad(x) rnk <- seq(along = x) off <- rep(log(sum(x)), length(x)) fam <- family(link = "log") if (length(x) > 1) ln <- try(glm(x ~ log(rnk) + offset(off), family = fam)) if (length(x) < 2) { aic <- NA dev <- rdf <- 0 ln <- nl <- NA p <- rep(NA, 2) fit <- x res <- rep(0, length(x)) wts <- rep(1, length(x)) } else if (inherits(ln, "try-error")) { aic <- rdf <- ln <- nl <- dev <- NA p <- rep(NA, 2) fit <- res <- wts <- rep(NA, length(x)) } else { fit <- fitted(ln) p <- coef(ln) p[1] <- exp(p[1]) aic <- AIC(ln) rdf <- df.residual(ln) dev <- deviance(ln) res <- ln$residuals wts <- weights(ln) } names(p) <- c("p1", "gamma") out <- list(model = "Zipf", family = fam, y = x, coefficients = p, fitted.values = fit, aic = aic, rank = 2, df.residual = rdf, deviance = dev, residuals = res, prior.weights = wts) class(out) <- c("radline", "glm") out } vegan/R/rad.preempt.R0000644000176200001440000000334212031100300014075 0ustar liggesusers"rad.preempt" <- function (x, family = poisson, ...) { canfun <- function(p, x, ...) { if (length(x) <= 1) return(0) p <- plogis(p) if (p == 1) p <- 1 - .Machine$double.eps fv <- linkinv(logJ + log(p) + log(1 - p) * rnk) n <- rep(1, length(fv)) dev <- sum(dev.resids(x, fv, wt)) aicfun(x, n, fv, wt, dev)/2 } fam <- family(link = "log") aicfun <- fam$aic linkinv <- fam$linkinv dev.resids <- fam$dev.resids x <- as.rad(x) nsp <- length(x) rnk <- seq(along = x) - 1 wt <- rep(1, length(x)) logJ <- log(sum(x)) p <- qlogis(0.1) canon <- try(nlm(canfun, p = p, x = x, rnk = rnk, logJ = logJ, wt = wt, hessian = TRUE, ...)) if (inherits(canon, "try-error")) { aic <- rdf <- deviance <- NA p <- rep(NA, 1) fit <- residuals <- prior.weights <- rep(NA, length(x)) } else { if (nsp > 1) { p <- plogis(canon$estimate) fit <- exp(logJ + log(p) + log(1 - p) * rnk) } else { p <- if (nsp > 0) 1 else NA fit <- x } res <- dev.resids(x, fit, wt) deviance <- sum(res) residuals <- x - fit if (nsp > 0) aic <- aicfun(x, rep(1, length(x)), fit, wt, deviance) + 2 else aic <- NA rdf <- length(x) - 1 } names(fit) <- names(x) names(p) <- c("alpha") out <- list(model = "Preemption", family = fam, y = x, coefficients = p, fitted.values = fit, aic = aic, rank = 1, df.residual = rdf, deviance = deviance, residuals = residuals, prior.weights = wt) class(out) <- c("radline", "glm") out } vegan/R/rad.null.R0000644000176200001440000000154012031100300013371 0ustar liggesusers"rad.null" <- function(x, family=poisson, ...) { fam <- family(link="log") aicfun <- fam$aic dev.resids <- fam$dev.resids x <- as.rad(x) nsp <- length(x) wt <- rep(1, nsp) if (nsp > 0) { fit <- rev(cumsum(1/nsp:1)/nsp) * sum(x) res <- dev.resids(x, fit, wt) deviance <- sum(res) aic <- aicfun(x, nsp, fit, wt, deviance) } else { fit <- NA aic <- NA res <- NA deviance <- NA } residuals <- x - fit rdf <- nsp names(fit) <- names(x) p <- NA names(p) <- "S" out <- list(model = "Brokenstick", family=fam, y = x, coefficients = p, fitted.values = fit, aic = aic, rank = 0, df.residual = rdf, deviance = deviance, residuals = residuals, prior.weights=wt) class(out) <- c("radline", "glm") out } vegan/R/rad.lognormal.R0000644000176200001440000000223011072370264014434 0ustar liggesusers"rad.lognormal" <- function (x, family = poisson, ...) { x <- as.rad(x) n <- length(x) rnk <- -qnorm(ppoints(n)) fam <- family(link = "log") ## Must be > 2 species to fit a model if (length(x) > 1) ln <- try(glm(x ~ rnk, family = fam)) if (length(x) < 2) { aic <- NA dev <- rdf <- 0 ln <- nl <- NA p <- rep(NA, 2) fit <- x res <- rep(0, length(x)) wts <- rep(1, length(x)) } else if (inherits(ln, "try-error")) { aic <- rdf <- ln <- nl <- dev <- NA p <- rep(NA, 2) fit <- res <- wts <- rep(NA, length(x)) } else { p <- coef(ln) fit <- fitted(ln) aic <- AIC(ln) rdf <- df.residual(ln) dev <- deviance(ln) res <- ln$residuals wts <- weights(ln) } names(p) <- c("log.mu", "log.sigma") out <- list(model = "Log-Normal", family = fam, y = x, coefficients = p, fitted.values = fit, aic = aic, rank = 2, df.residual = rdf, deviance = dev, residuals = res, prior.weights = wts) class(out) <- c("radline", "glm") out } vegan/R/protest.R0000644000176200001440000000262412103771652013406 0ustar liggesusers"protest" <- function (X, Y, scores = "sites", permutations = 999, strata, ...) { X <- scores(X, display = scores, ...) Y <- scores(Y, display = scores, ...) ## Centre and normalize X & Y here so that the permutations will ## be faster X <- scale(X, scale = FALSE) Y <- scale(Y, scale = FALSE) X <- X/sqrt(sum(X^2)) Y <- Y/sqrt(sum(Y^2)) ## Transformed X and Y will yield symmetric procrustes() and we ## need not specify that in the call (but we set it symmetric ## after the call). sol <- procrustes(X, Y, symmetric = FALSE) sol$symmetric <- TRUE sol$t0 <- sqrt(1 - sol$ss) N <- nrow(X) perm <- rep(0, permutations) for (i in 1:permutations) { take <- permuted.index(N, strata) ## avoid overhead of procrustes() and only evaluate the ## statistic by svd (hand crafted from r2388 of the devel ## branch). perm[i] <- sum(svd(crossprod(X, Y[take,]), nv = 0, nu = 0)$d) } Pval <- (sum(perm >= sol$t0) + 1)/(permutations + 1) if (!missing(strata)) { strata <- deparse(substitute(strata)) s.val <- strata } else { strata <- NULL s.val <- NULL } sol$t <- perm sol$signif <- Pval sol$permutations <- permutations sol$strata <- strata sol$stratum.values <- s.val sol$call <- match.call() class(sol) <- c("protest", "procrustes") sol } vegan/R/profile.humpfit.R0000644000176200001440000000453410667741210015023 0ustar liggesusers"profile.humpfit" <- function(fitted, parm=1:3, alpha=0.01, maxsteps = 20, del = zmax/5, ...) { INSERT3 <- function(vec, fix, val) { switch(fix, c(val, vec), c(vec[1], val, vec[2]), c(vec, val) ) } HUMP <- function(p, mass, spno, fix, val, ...) { b <- INSERT3(p, fix, val) x <- ifelse(mass < b[1], mass/b[1], b[1]*b[1]/mass/mass) fv <- b[3] * log(1 + b[2]*x/b[3]) n <- wt <- rep(1, length(x)) dev <- sum(dev.resids(spno, fv, wt)) aicfun(spno, n, fv, wt, dev)/2 } dev.resids <- fitted$family$dev.resids aicfun <- fitted$family$aic minll <- fitted$nlm$minimum p <- coefficients(fitted) pv0 <- t(as.matrix(p)) n <- length(fitted$residuals) Pnames <- names(p) summ <- summary(fitted) dispersion <- summ$dispersion std.err <- summ$est[, "Std. Error"] if (summ$family == "poisson") { zmax <- sqrt(qchisq(1 - alpha/2, 3)) profName <- "z" } else { zmax <- sqrt(3 * qf(1 - alpha/2, 3, n-3)) profName <- "tau" } prof <- vector("list", length = length(parm)) names(prof) <- Pnames[parm] for (i in parm) { zi <- 0 par <- pv0 pvi <- pv0[-i] pi <- Pnames[i] for (sgn in c(-1, 1)) { step <- 0 z <- 0 while ((step <- step + 1) < maxsteps && abs(z) < zmax) { bi <- p[i] + sgn * step * del * std.err[i] fm <- nlm(HUMP, p = pvi, mass = fitted$x, spno = fitted$y, fix = i, val = bi) pvi <- fm$estimate ri <- INSERT3(pvi, i, bi) names(ri) <- Pnames par <- rbind(par, ri) zz <- 2*(fm$minimum - minll)/dispersion if (zz > -0.001) zz <- max(0, zz) else stop("profiling has found a better solution, so original fit had not converged:\n", Pnames[i], ": ", bi) z <- sgn*sqrt(zz) zi <- c(zi, z) } } si <- order(zi) prof[[pi]] <- structure(data.frame(zi[si]), names= profName) prof[[pi]]$par.vals <- par[si,] } val <- structure(prof, original.fit = fitted, summary = summ) class(val) <- c("profile.humpfit", "profile.glm", "profile") val } vegan/R/profile.fisherfit.R0000644000176200001440000000264110667741210015327 0ustar liggesusers"profile.fisherfit" <- function (fitted, alpha = 0.01, maxsteps = 20, del = zmax/5, ...) { Dev.logseries <- function(n.r, p, N) { r <- as.numeric(names(n.r)) x <- N/(N + p) logmu <- log(p) + log(x) * r - log(r) lhood <- -sum(n.r * (logmu - log(n.r)) + 1) - p * log(1 - x) lhood } par <- fitted$estimate names(par) <- "alpha" std.err <- sqrt(diag(solve(fitted$hessian))) minll <- fitted$minimum nr <- fitted$fisher N <- sum(as.numeric(names(nr)) * nr) zmax <- sqrt(qchisq(1 - alpha/2, 1)) zi <- 0 bi <- par for (sgn in c(-1, 1)) { step <- 0 z <- 0 b <- 0 while ((step <- step + 1) < maxsteps && abs(z) < zmax) { b <- par + sgn * step * del * std.err fm <- Dev.logseries(nr, b, N) zz <- 2 * (fm - minll) if (zz > -0.001) zz <- max(zz, 0) else stop("profiling has found a better solution, so original fit had not converged") z <- sgn * sqrt(zz) bi <- c(bi, b) zi <- c(zi, z) } } si <- order(bi) out <- list() out$alpha <- data.frame(tau = zi[si], par.vals = bi[si]) attr(out, "original.fit") <- list(coefficients = par, std.err = std.err) class(out) <- c("profile.fisherfit", "profile.glm", "profile") out } vegan/R/profile.MOStest.R0000644000176200001440000000343111012111412014654 0ustar liggesusers`profile.MOStest` <- function(fitted, alpha = 0.01, maxsteps = 10, del = zmax/5, ...) { Pnam <- if(fitted$isHump) "hump" else "pit" k <- coef(fitted$mod) u <- -k[2]/2/k[3] n <- length(residuals(fitted$mod)) std.error <- fieller.MOStest(fitted, level=0.6) std.error <- u - std.error[1] if (is.na(std.error)) std.error <- diff(range(model.matrix(fitted$mod)[,2])) OrigDev <- deviance(fitted$mod) summ <- summary(fitted$mod) DispPar <- summ$dispersion fam <- family(fitted$mod) Y <- fitted$mod$y X <- model.matrix(fitted$mod)[,-3] Xi <- X if (fam$family %in% c("poisson", "binomial", "Negative Binomial")) { zmax <- sqrt(qchisq(1 - alpha/2, 1)) profName <- "z" } else { zmax <- sqrt(qf(1 - alpha/2, 1, n - 1)) profName <- "tau" } zi <- 0 prof <- vector("list", length=1) names(prof) <- Pnam uvi <- u for (sgn in c(-1, 1)) { step <- 0 z <- 0 while((step <- step + 1) < maxsteps && abs(z) < zmax) { ui <- u + sgn * step * del * std.error Xi[,2] <- (X[,2] - ui)^2 fm <- glm.fit(x = Xi, y = Y, family=fam, control = fitted$mod$control) uvi <- c(uvi, ui) zz <- (fm$deviance - OrigDev)/DispPar z <- sgn * sqrt(zz) zi <- c(zi, z) } si <- order(zi) prof[[Pnam]] <- structure(data.frame(zi[si]), names=profName) uvi <- as.matrix(uvi) colnames(uvi) <- Pnam prof[[Pnam]]$par.vals <- uvi[si, , drop=FALSE] } of <- list() of$coefficients <- structure(Pnam, names=Pnam) val <- structure(prof, original.fit = of, summary = summ) class(val) <- c("profile.MOStest", "profile.glm", "profile") val } vegan/R/procrustes.R0000644000176200001440000000271612102473054014113 0ustar liggesusers`procrustes` <- function (X, Y, scale = TRUE, symmetric = FALSE, scores = "sites", ...) { X <- scores(X, display = scores, ...) Y <- scores(Y, display = scores, ...) if (nrow(X) != nrow(Y)) stop("Matrices have different number of rows: ", nrow(X), " and ", nrow(Y)) if (ncol(X) < ncol(Y)) { warning("X has fewer axes than Y: X adjusted to comform Y\n") addcols <- ncol(Y) - ncol(X) for (i in 1:addcols) X <- cbind(X, 0) } ctrace <- function(MAT) sum(MAT^2) c <- 1 if (symmetric) { X <- scale(X, scale = FALSE) Y <- scale(Y, scale = FALSE) X <- X/sqrt(ctrace(X)) Y <- Y/sqrt(ctrace(Y)) } xmean <- apply(X, 2, mean) ymean <- apply(Y, 2, mean) if (!symmetric) { X <- scale(X, scale = FALSE) Y <- scale(Y, scale = FALSE) } XY <- crossprod(X, Y) sol <- svd(XY) A <- sol$v %*% t(sol$u) if (scale) { c <- sum(sol$d)/ctrace(Y) } Yrot <- c * Y %*% A ## Translation (b) needs scale (c) although Mardia et al. do not ## have this. Reported by Christian Dudel. b <- xmean - c * ymean %*% A R2 <- ctrace(X) + c * c * ctrace(Y) - 2 * c * sum(sol$d) reslt <- list(Yrot = Yrot, X = X, ss = R2, rotation = A, translation = b, scale = c, xmean = xmean, symmetric = symmetric, call = match.call()) reslt$svd <- sol class(reslt) <- "procrustes" reslt } vegan/R/print.wcmdscale.R0000644000176200001440000000346612077014676015016 0ustar liggesusers### support functions for wcmdscale results: print, scores and plot. `print.wcmdscale` <- function(x, digits = max(3, getOption("digits") - 3), ...) { writeLines(strwrap(pasteCall(x$call))) cat("\n") ## tabulate total inertia and ranks totev <- sum(x$eig) negax <- x$eig < 0 if (any(negax)) { ranks <- c(NA, sum(!negax), sum(negax)) negax <- x$eig < 0 realev <- sum(x$eig[!negax]) imev <- sum(x$eig[negax]) evs <- c("Total" = totev, "Real" = realev, "Imaginary" = imev) } else { ranks <- length(x$eig) evs <- c("Total" = totev) } tbl <- cbind("Inertia" = evs, "Rank" = ranks) printCoefmat(tbl, digits = digits, na.print = "") cat("\nResults have", NROW(x$points), "points,", NCOL(x$points), "axes\n") ## print eigenvalues, but truncate very long lists PRINLIM <- 120 neig <- length(x$eig) cat("\nEigenvalues:\n") print(zapsmall(x$eig[1 : min(neig, PRINLIM)], digits = digits, ...)) if (neig > PRINLIM) cat("(Showed only", PRINLIM, "of all", neig, "eigenvalues)\n") wvar <- var(x$weights) wlen <- length(x$weights) cat("\nWeights:") if (wvar < 1e-6) cat(" Constant\n") else { cat("\n") print(zapsmall(x$weights[1 : min(wlen, PRINLIM)], digits = digits, ...)) if (wlen > PRINLIM) cat("(Showed only", PRINLIM, "of all", wlen, "weights)\n") } cat("\n") invisible(x) } `scores.wcmdscale` <- function(x, choices = NA, ...) { if (any(is.na(choices))) x$points else { choices <- choices[choices <= NCOL(x$points)] x$points[, choices, drop = FALSE] } } `plot.wcmdscale` <- function(x, choices = c(1,2), type = "t", ...) { ordiplot(x, display = "sites", choices = choices, type = type, ...) } vegan/R/print.vectorfit.R0000644000176200001440000000055211210174375015041 0ustar liggesusers"print.vectorfit" <- function (x, ...) { out <- cbind(x$arrows, r2 = x$r, "Pr(>r)" = x$pvals) printCoefmat(out, na.print = "", ...) if (x$permutations) { cat("P values based on", x$permutations, "permutations") if (!is.null(x$strata)) cat(", stratified within", x$strata) cat(".\n") } invisible(x) } vegan/R/print.varpart234.R0000644000176200001440000000222310667741210014744 0ustar liggesusers"print.varpart234" <- function(x, digits = 5, ...) { cat("No. of explanatory tables:", x$nsets, "\n") cat("Total variation (SS):", format(x$SS.Y, digits=digits), "\n") cat(" Variance:", format(x$SS.Y/(x$n-1), digits=digits), "\n") cat("No. of observations:", x$n, "\n") cat("\nPartition table:\n") out <- rbind(x$fract, "Individual fractions" = NA, x$indfract) if (x$nsets > 3) out <- rbind(out, "Controlling 2 tables X" = NA, x$contr2) if (x$nsets > 2) out <- rbind(out, "Controlling 1 table X" = NA, x$contr1) out[,2:3] <- round(out[,2:3], digits=digits) out[,1:4] <- sapply(out[,1:4], function(x) gsub("NA", " ", format(x, digits=digits))) print(out) cat("---\nUse function 'rda' to test significance of fractions of interest\n") if (!is.null(x$bigwarning)) for (i in 1:length(x$bigwarning)) warning("collinearity detected: redundant variable(s) between tables ", x$bigwarning[i], "\nresults are probably incorrect: remove redundant variable(s) and repeat the analysis", call. = FALSE) invisible(x) } vegan/R/print.varpart.R0000644000176200001440000000077111301021022014473 0ustar liggesusers"print.varpart" <- function (x, ...) { cat("\nPartition of variation in RDA\n\n") writeLines(strwrap(pasteCall(x$call))) if (x$scale) cat("Columns of Y were scaled to unit variance\n") if (!is.null(x$transfo)) cat("Species transformation: ", x$transfo) cat("\n") cat("Explanatory tables:\n") cat(paste(paste(paste("X", 1:length(x$tables), sep=""),": ", x$tables, sep=""), collapse="\n"), "\n\n") print(x$part, ...) invisible(x) } vegan/R/print.taxondive.R0000644000176200001440000000054510667741210015042 0ustar liggesusers`print.taxondive` <- function (x, ...) { out <- cbind(x$Species, x$D, x$Dstar, x$Lambda, x$Dplus, x$SDplus) out <- rbind(out, Expected = c(NA, x$ED, x$EDstar, NA, x$EDplus, NA)) colnames(out) <- c("Species", "Delta", "Delta*", "Lambda+", "Delta+", "S Delta+") printCoefmat(out, na.print = "") invisible(x) } vegan/R/print.summary.taxondive.R0000644000176200001440000000014610667741210016533 0ustar liggesusers`print.summary.taxondive` <- function (x, ...) { printCoefmat(x, na.print="", ...) invisible(x) } vegan/R/print.summary.procrustes.R0000644000176200001440000000153110667741210016742 0ustar liggesusers"print.summary.procrustes" <- function (x, digits = x$digits, ...) { cat("\nCall:\n") cat(deparse(x$call), "\n") cat("\nNumber of objects:", x$n, " Number of dimensions:", x$k, "\n") cat("\nProcrustes sum of squares: ") cat("\n", formatC(x$ss, digits = digits), "\n") cat("Procrustes root mean squared error: ") cat("\n", formatC(x$rmse, digits = digits), "\n") cat("Quantiles of Procrustes errors:\n") nam <- c("Min", "1Q", "Median", "3Q", "Max") rq <- structure(quantile(x$resid), names = nam) print(rq, digits = digits, ...) cat("\nRotation matrix:\n") print(x$rotation, digits = digits, ...) cat("\nTranslation of averages:\n") print(x$translation, digits = digits, ...) cat("\nScaling of target:\n") print(x$scale, digits = digits, ...) cat("\n") invisible(x) } vegan/R/print.summary.prc.R0000644000176200001440000000076111466452360015324 0ustar liggesusers"print.summary.prc" <- function(x, ...) { cat("\nCall:\n") cat(deparse(x$call), "\n") cat("Species scores:\n") print(x$sp, digits=x$digits, ...) cat("\nCoefficients for", paste(x$names[2], "+", paste(x$names, collapse=":")), "interaction\n") cat(paste("which are contrasts to", x$names[2], x$corner, "\n")) cat(paste(c("rows are",", columns are"), x$names[2:1], collapse="")) cat("\n") print(coef(x), digits = x$digits, ...) invisible(x) } vegan/R/print.summary.permat.R0000644000176200001440000000415611153414212016015 0ustar liggesusers## S3 print method for summary.permat `print.summary.permat` <- function(x, digits=2, ...) { n <- attr(x$x, "times") cat("Summary of object of class 'permat'\n\nCall: ") print(x$x$call) cat("\nMatrix type:", attr(x$x, "mtype"), "\nPermutation type:", attr(x$x, "ptype")) if (attr(x$x, "ptype") == "swap") { cat("\nMethod: ", attr(x$x, "method"), sep = "") if (attr(x$x, "method") != "quasiswap") { cat(", burnin: ", attr(x$x, "burnin"), sep = "") cat(", thin: ", attr(x$x, "thin"), sep = "") } } cat("\nRestricted:", attr(x$x, "is.strat"), "\nFixed margins:", attr(x$x, "fixedmar")) if (!is.na(attr(x$x, "shuffle"))) { if (attr(x$x, "shuffle")=="ind") cat("\nIndividuals") if (attr(x$x, "shuffle")=="samp") cat("\nSamples") if (attr(x$x, "shuffle")=="both") cat("\nIndividuals and samples") cat(" are shuffled") } cat("\n\nMatrix dimensions:", nrow(x$x$orig), "rows,", ncol(x$x$orig), "columns") cat("\nSum of original matrix:", sum(x$x$orig)) cat("\nFill of original matrix:", round(sum(x$x$orig>0)/(nrow(x$x$orig)*ncol(x$x$orig)),digits)) cat("\nNumber of permuted matrices:", n,"\n") cat("\nMatrix sums retained:", round(100 * sum(x$sum) / n, digits), "%") cat("\nMatrix fill retained:", round(100 * sum(x$fill) / n, digits), "%") cat("\nRow sums retained: ", round(100 * sum(x$rowsums) / n, digits), "%") cat("\nColumn sums retained:", round(100 * sum(x$colsums) / n, digits), "%") cat("\nRow incidences retained: ", round(100 * sum(x$browsums) / n, digits), "%") cat("\nColumn incidences retained:", round(100 * sum(x$bcolsums) / n, digits), "%") if (!is.null(x$strsum)) cat("\nSums within strata retained:", round(100 * sum(x$strsum) / n, digits), "%") cat("\n\nBray-Curtis dissimilarities among original and permuted matrices:\n") print(summary(x$bray)) cat("\nChi-squared for original matrix: ", round(attr(x$chisq, "chisq.orig"), digits), ")\n", sep = "") cat("Chi-squared values among expected and permuted matrices:\n") print(summary(x$chisq)) invisible(x) } vegan/R/print.summary.meandist.R0000644000176200001440000000103711165163515016336 0ustar liggesusers`print.summary.meandist` <- function(x, ...) { cat("\nMean distances:\n") tab <- rbind("within groups" = x$W, "between groups" = x$B, "overall" = x$D) colnames(tab) <- "Average" print(tab, ...) cat("\nSummary statistics:\n") tab <- rbind("MRPP A weights n" = x$A1, "MRPP A weights n-1" = x$A2, "MRPP A weights n(n-1)"= x$A3, "Classification strength"=x$CS) colnames(tab) <- "Statistic" print(tab, ...) invisible(x) } vegan/R/print.summary.isomap.R0000644000176200001440000000044110667741210016020 0ustar liggesusers`print.summary.isomap` <- function (x, ...) { cat("\nCall:\n") cat(deparse(x$call), "\n\n") cat("Points:\n") print(x$points, ...) cat("\nRetained dissimilarities between points:\n") print(t(x$net), ...) cat("\nRetained", x$nnet, "of", x$ndis, "dissimilarities\n") invisible(x) } vegan/R/print.summary.humpfit.R0000644000176200001440000000146310667741210016211 0ustar liggesusers"print.summary.humpfit" <- function (x, ...) { cat("\nHump-backed Null model of richness vs. productivity\n\n") cat("Family:", x$family, "\n") cat("Link function: Fisher diversity\n\n") cat("Coefficients:\n\n") printCoefmat(x$est, ...) cat("\nDispersion parameter for", x$family, "family taken to be", x$dispersion,"\n") cat("\nDeviance", x$deviance, "with", x$df.residual) cat(" residual degrees of freedom\n") cat("AIC:", x$aic, " BIC:", x$bic, "\n") cat("\nCorrelation of Coefficients:\n") correl <- format(round(x$correlation, 2), nsmall = 2) correl[!lower.tri(correl)] <- "" print(correl[-1, -3], quote = FALSE) cat("\nDiagnostics from nlm:\n") cat("Number of iterations: ", x$iter, ", code: ", x$code, "\n", sep = "") invisible(x) } vegan/R/print.summary.decorana.R0000644000176200001440000000150710667741210016310 0ustar liggesusers`print.summary.decorana` <- function (x, head=NA, tail=head, ...) { digits <- x$digits hcat <- function(x, head=head, tail=tail, ...) { if(!is.na(head) && !is.na(tail) && head + tail + 4 < nrow(x)) x <- rbind(head(x, n=head), "...." = NA, tail(x, n=tail)) printCoefmat(x, na.print="", ...) } if (!is.null(x$spec.scores)) { cat("Species scores:\n\n") TABLE <- cbind(x$spec.scores, Weights = x$spec.priorweights, Totals = x$spec.totals) hcat(TABLE, head=head, tail=tail, digits = digits, ...) cat("\n") } if (!is.null(x$site.scores)) { cat("Site scores:\n\n") TABLE <- cbind(x$site.scores, Totals = x$site.totals) hcat(TABLE, head=head, tail=tail, digits = digits, ...) cat("\n") } invisible(x) } vegan/R/print.summary.clamtest.R0000644000176200001440000000103111640347042016335 0ustar liggesusersprint.summary.clamtest <- function(x, digits=max(3, getOption("digits") - 3), ...) { cat("Two Groups Species Classification Method (CLAM)\n\n") cat("Specialization threshold =", x$specialization) cat("\nAlpha level =", x$alpha) cat("\n\nEstimated sample coverage:\n") print(x$coverage, digits=digits) cat("\nMinimum abundance for classification:\n") print(structure(c(x$minv[[1]][1,2], x$minv[[2]][1,1]), .Names=x$labels)) cat("\n") printCoefmat(x$summary, digits=digits, ...) } vegan/R/print.summary.cca.R0000644000176200001440000000577111210542554015264 0ustar liggesusers`print.summary.cca` <- function (x, digits = x$digits, head=NA, tail=head, ...) { hcat <- function(x, head=head, tail=tail, ...) { if (!is.na(head) && !is.na(tail) && head+tail+4 < nrow(x)) x <- rbind(head(x, n=head), "...." = NA, tail(x, n=tail)) print(x, na.print = "", ...) } cat("\nCall:\n") cat(deparse(x$call), "\n") statnam <- if (x$method == "cca") "averages" else "sums" cat("\nPartitioning of ", x$inertia, ":\n", sep = "") out <- c(Total = x$tot.chi, Conditioned = x$partial.chi, Constrained = x$constr.chi, Unconstrained = x$unconst.chi) out <- cbind(Inertia = out, Proportion = out/out[1]) print(out, digits = digits, ...) cat("\nEigenvalues, and their contribution to the", x$inertia, "\n") if (!is.null(x$partial.chi)) { cat("after removing the contribution of conditiniong variables\n") } cat("\n") print(x$cont, ...) if (!is.null(x$concont)) { cat("\nAccumulated constrained eigenvalues\n") print(x$concont, ...) } cat("\nScaling", x$scaling, "for species and site scores\n") if (abs(x$scaling) == 2) { ev.ent <- "Species" other.ent <- "Sites" } else if (abs(x$scaling) == 1) { ev.ent <- "Sites" other.ent <- "Species" } else if (abs(x$scaling) == 3) { ev.ent <- "Both sites and species" other.ent <- NULL } if (x$scaling) { cat("*", ev.ent, "are scaled proportional to eigenvalues\n") if (!is.null(other.ent)) cat("*", other.ent, "are unscaled: weighted dispersion equal") cat(" on all dimensions\n") } if (!x$scaling) { cat("* Both are 'unscaled' or as they are in the result\n") } if (x$scaling < 0) { if (x$method == "cca") cat("* Hill scaling performed on both scores\n") else cat("* Species scores divided by species standard deviations\n") cat(" so that they no longer are biplot scores\n") } if (x$method != "cca") { cat("* General scaling constant of scores: ", attr(x, "const"), "\n") } if (!is.null(x$species)) { cat("\n\nSpecies scores\n\n") hcat(x$species, head=head, tail=tail, digits = digits, ...) } if (!is.null(x$sites)) { cat("\n\nSite scores (weighted", statnam, "of species scores)\n\n") hcat(x$sites, head=head, tail=tail, digits = digits, ...) } if (!is.null(x$constraints)) { cat("\n\nSite constraints (linear combinations of constraining variables)\n\n") hcat(x$constraints, head=head, tail=tail, digits = digits, ...) } if (!is.null(x$biplot)) { cat("\n\nBiplot scores for constraining variables\n\n") print(x$biplot, digits = digits, ...) } if (!is.null(x$centroids) && !is.na(x$centroids[1])) { cat("\n\nCentroids for factor constraints\n\n") print(x$centroids, digits = digits, ...) } cat("\n") invisible(x) } vegan/R/print.summary.bioenv.R0000644000176200001440000000026410667741210016015 0ustar liggesusers"print.summary.bioenv" <- function(x, ...) { out <- data.frame(size = x$size, correlation = x$cor) rownames(out) <- x$var printCoefmat(out, ...) invisible(x) } vegan/R/print.specaccum.R0000644000176200001440000000064610667741210015006 0ustar liggesusers"print.specaccum" <- function(x, ...) { cat("Species Accumulation Curve\n") cat("Accumulation method:", x$method) if (x$method == "random") { cat(", with ", ncol(x$perm), " permutations", sep="") } cat("\n") cat("Call:", deparse(x$call), "\n\n") mat <- rbind(Sites = x$sites, Richness = x$richness, sd=x$sd) colnames(mat) <- rep("", ncol(mat)) print(mat) invisible(x) } vegan/R/print.radline.R0000644000176200001440000000067010667741210014456 0ustar liggesusers"print.radline" <- function (x, ...) { cat("\nRAD model:", x$model, "\n") cat("Family:", family(x)$family, "\n") cat("No. of species: ", length(x$y), "\nTotal abundance:", sum(x$y), "\n\n") p <- coef(x) dev <- deviance(x) AIC <- AIC(x) BIC <- AIC(x, k = log(length(x$y))) tmp <- c(p, dev, AIC, BIC) names(tmp) <- c(names(p), "Deviance", "AIC", "BIC") print(tmp, ...) invisible(x) } vegan/R/print.radfit.frame.R0000644000176200001440000000033511071152507015373 0ustar liggesusers"print.radfit.frame" <- function (x, ...) { cat("\nDeviance for RAD models:\n\n") out <- sapply(x, function(x) unlist(lapply(x$models, deviance))) printCoefmat(out, na.print = "", ...) invisible(x) } vegan/R/print.radfit.R0000644000176200001440000000125211071152507014301 0ustar liggesusers"print.radfit" <- function(x, digits = max(3, getOption("digits") - 2), ...) { cat("\nRAD models, family", x$family$family, "\n") cat("No. of species ", length(x$y), ", total abundance ", sum(x$y), "\n\n", sep = "") p <- coef(x) if (any(!is.na(p))) p <- formatC(p, format="g", flag = " ", digits = digits) p <- apply(p, 2, function(x) gsub("NA", " ", x)) aic <- sapply(x$models, AIC) bic <- sapply(x$models, AIC, k = log(length(x$y))) dev <- sapply(x$models, deviance) stats <- format(cbind(Deviance = dev, AIC = aic, BIC = bic), digits = digits, ...) out <- cbind(p, stats) print(out, quote=FALSE) invisible(x) } vegan/R/print.protest.R0000644000176200001440000000103712102473054014530 0ustar liggesusers"print.protest" <- function(x, digits = max(3, getOption("digits") - 3), ...) { cat("\nCall:\n") cat(deparse(x$call), "\n\n") cat("Procrustes Sum of Squares (m12 squared): ") cat(formatC(x$ss, digits=digits), "\n") cat("Correlation in a symmetric Procrustes rotation: ") cat(formatC(x$t0, digits = digits), "\n") cat("Significance: ") cat(format.pval(x$signif),"\n") cat("Based on", x$permutations, "permutations") if (!is.null(x$strata)) cat(", stratified within", x$strata) cat(".\n\n") invisible(x) } vegan/R/print.procrustes.R0000644000176200001440000000035610667741210015252 0ustar liggesusers"print.procrustes" <- function (x, digits = max(3, getOption("digits") - 3), ...) { cat("\nCall:\n") cat(deparse(x$call), "\n\n") cat("Procrustes sum of squares:\n") cat(formatC(x$ss, digits = digits), "\n\n") invisible(x) } vegan/R/print.prestonfit.R0000644000176200001440000000051110667741210015227 0ustar liggesusers"print.prestonfit" <- function (x, ...) { cat("\nPreston lognormal model\n") cat("Method:", x$method,"\n") cat("No. of species:", sum(x$freq), "\n\n") print(x$coefficients, ...) cat("\nFrequencies by Octave\n") print(rbind(Observed = x$freq, Fitted = x$fitted), ...) cat("\n") invisible(x) } vegan/R/print.poolaccum.R0000644000176200001440000000020711240503434015006 0ustar liggesusers`print.poolaccum` <- function(x, ...) { rownames(x$means) <- rep("", nrow(x$means)) print(x$means, ...) invisible(x) } vegan/R/print.permutest.cca.R0000644000176200001440000000130011434521344015601 0ustar liggesusers"print.permutest.cca" <- function (x, ...) { cat("\nPermutation test for", x$method, "\n\n") writeLines(strwrap(pasteCall(x$testcall))) Pval <- (sum(x$F.perm >= x$F.0) + 1)/(x$nperm + 1) cat("Permutation test for ") if (x$first) cat("first constrained eigenvalue\n") else cat("all constrained eigenvalues\n") cat("Pseudo-F:\t", x$F.0, "(with", paste(x$df, collapse = ", "), "Degrees of Freedom)\n") cat("Significance:\t", format.pval(Pval), "\n") cat("Based on", x$nperm, "permutations under", x$model, "model") if (!is.null(x$strata)) cat(",\nstratified within factor", x$strata) cat(".\n\n") invisible(x) } vegan/R/print.permutest.betadisper.R0000644000176200001440000000315511342020476017205 0ustar liggesusers`print.permutest.betadisper` <- function(x, digits = max(getOption("digits") - 2, 3), ...) { ## uses code from stats:::print.anova by R Core Development Team cat("\n") writeLines(strwrap("Permutation test for homogeneity of multivariate dispersions\n")) ##cat("\n") print(x$control) nc <- dim(x$tab)[2] cn <- colnames(x$tab) has.P <- substr(cn[nc], 1, 3) == "Pr(" zap.i <- 1:(if (has.P) nc - 1 else nc) i <- which(substr(cn, 2, 7) == " value") i <- c(i, which(!is.na(match(cn, "F")))) if (length(i)) zap.i <- zap.i[!(zap.i %in% i)] tst.i <- i if (length(i <- grep("Df$", cn))) zap.i <- zap.i[!(zap.i %in% i)] if (length(i <- grep("N.Perm$", cn))) zap.i <- zap.i[!(zap.i %in% i)] cat("Response: Distances", sep = "\n") printCoefmat(x$tab, digits = digits, signif.stars = getOption("show.signif.stars"), has.Pvalue = has.P, P.values = has.P, cs.ind = NULL, zap.ind = zap.i, tst.ind = tst.i, na.print = "", ...) if(!is.null(x$pairwise)) { cat("\nPairwise comparisons:", sep = "\n") writeLines(strwrap("(Observed p-value below diagonal,\npermuted p-value above diagonal)\n")) n.grp <- length(x$groups) mat <- matrix(NA, ncol = n.grp, nrow = n.grp) colnames(mat) <- rownames(mat) <- x$groups mat[lower.tri(mat)] <- x$pairwise$observed mat <- t(mat) mat[lower.tri(mat)] <- x$pairwise$permuted printCoefmat(t(mat), na.print = "", digits = digits) } invisible(x) } vegan/R/print.permat.R0000644000176200001440000000225211150722733014323 0ustar liggesusers## S3 print method for permat `print.permat` <- function(x, digits=3, ...) { cat("Object of class 'permat' with ", attr(x, "times"), " simulations\n", sep="") cat("\nMatrix type:", attr(x, "mtype"), "\nPermutation type:", attr(x, "ptype")) if (attr(x, "ptype") == "swap") { cat("\nMethod: ", attr(x, "method"), sep = "") if (attr(x, "method") != "quasiswap") { cat(", burnin: ", attr(x, "burnin"), sep = "") cat(", thin: ", attr(x, "thin"), sep = "") } } cat("\nRestricted:", attr(x, "is.strat"), "\nFixed margins:", attr(x, "fixedmar")) if (!is.na(attr(x, "shuffle"))) { if (attr(x, "shuffle")=="ind") cat("\nIndividuals") if (attr(x, "shuffle")=="samp") cat("\nSamples") if (attr(x, "shuffle")=="both") cat("\nIndividuals and samples") cat(" are shuffled") } cat("\n") invisible(x) # cat("\n\nMatrix dimensions:", nrow(x$orig), "rows,", ncol(x$orig), "columns") # cat("\nSum of original matrix:", sum(x$orig)) # cat("\nFill of original matrix:", round(sum(x$orig>0)/(nrow(x$orig)*ncol(x$orig)),digits)) # cat("\nNumber of permuted matrices:", attr(x, "times"),"\n") } vegan/R/print.oecosimu.R0000644000176200001440000000333712023317071014656 0ustar liggesusers`print.oecosimu` <- function(x, ...) { xx <- x ## return unmodified input object attr(x$oecosimu$method, "permfun") <- NULL cat(as.character(attr(x,"call")[[1]]), "object\n\n") writeLines(strwrap(pasteCall(attr(x, "call")))) cat("\n") cat("simulation method", x$oecosimu$method, "with", ncol(x$oecosimu$simulated), "simulations\n") if (length(att <- attributes(x$oecosimu$simulated)) > 1) { att$dim <- NULL cat("options: ", paste(names(att), att, collapse=", ")) } alt.char <- switch(x$oecosimu$alternative, two.sided = "not equal to", less = "less than", greater = "greater than") cat("\nalternative hypothesis: simulated median is", alt.char, "the statistic") ## dim attribute is always there, but print all others cat("\n\n") cl <- class(x) if ((length(cl) > 1 && cl[2] != "list" ) && !any(cl %in% c("adipart", "hiersimu", "multipart"))) { NextMethod("print", x) cat("\n") } probs <- switch(x$oecosimu$alternative, two.sided = c(0.025, 0.5, 0.975), less = c(0, 0.5, 0.95), greater = c(0.05, 0.5, 1)) qu <- apply(x$oecosimu$simulated, 1, quantile, probs=probs, na.rm = TRUE) m <- cbind("statistic" = x$oecosimu$statistic, "z" = x$oecosimu$z, "mean" = x$oecosimu$means, t(qu), "Pr(sim.)"=x$oecosimu$pval) printCoefmat(m, cs.ind = 3:6, ...) if (any(is.na(x$oecosimu$simulated))) { nacount <- rowSums(is.na(x$oecosimu$simulated)) cat("\nNumber of NA cases removed from simulations:\n", nacount, "\n") } invisible(xx) } vegan/R/print.nestedtemp.R0000644000176200001440000000026710705722404015207 0ustar liggesusers"print.nestedtemp" <- function(x, ...) { cat("nestedness temperature:", format(x$statistic, ...), "\n") cat("with matrix fill", format(x$fill, ...), "\n") invisible(x) } vegan/R/print.nestednodf.R0000644000176200001440000000047611123373664015177 0ustar liggesusers`print.nestednodf` <- function(x, ...) { cat("N columns :", format(x$statistic["N.columns"], ...), "\n") cat("N rows :", format(x$statistic["N.rows"], ...), "\n") cat("NODF :", format(x$statistic["NODF"], ...), "\n") cat("Matrix fill:", format(x$fill, ...), "\n") invisible(x) } vegan/R/print.nestedn0.R0000644000176200001440000000016610705722404014555 0ustar liggesusers"print.nestedn0" <- function(x, ...) { cat("Nestedness index N0:", format(x$statistic), "\n") invisible(x) } vegan/R/print.nesteddisc.R0000644000176200001440000000032611101343054015147 0ustar liggesusers"print.nesteddisc" <- function(x, ...) { cat("nestedness discrepancy:", x$statistic, "\n") if(x$ties) cat("There are tied column frequencies: result can depend on input order\n") invisible(x) } vegan/R/print.nestedchecker.R0000644000176200001440000000027210705722404015642 0ustar liggesusers"print.nestedchecker" <- function(x, ...) { cat("Checkerboard Units :", format(x$statistic), "\n") cat("C-score (species mean):", format(x$C.score), "\n") invisible(x) } vegan/R/print.mso.R0000644000176200001440000000033511021321564013623 0ustar liggesusers`print.mso` <- function(x, digits = max(3, getOption("digits") - 3), ...) { NextMethod(x, "print", digits = digits, ...) cat("mso variogram:\n\n") print(x$vario, digits = digits, ...) invisible(x) } vegan/R/print.mrpp.R0000644000176200001440000000222711210416534014007 0ustar liggesusers"print.mrpp" <- function (x, digits = max(3, getOption("digits") - 3), ...) { ### A print function for mrpp objects ### x -- An object of class "mrpp." #### cat = print cat("\nCall:\n") cat(deparse(x$call), "\n\n") cat("Dissimilarity index:", x$distance, "\n") cat("Weights for groups: ", switch(x$weight.type, "n", "n-1", "n(n-1)", "n(n-1)/2"), "\n\n") cat("Class means and counts:\n\n") print(noquote(rbind("delta" = formatC(x$classdelta, digits = digits), "n" = formatC(x$n, digits=0)))) cat("\n") if (!is.na(x$CS)) { cat("Classification strength: ") cat(formatC(x$CS, digits = digits), "\n") } cat("Chance corrected within-group agreement A: ") cat(formatC(x$A, digits = digits), "\n") cat("Based on observed delta", formatC(x$delta), "and expected delta", formatC(x$E.delta),"\n\n") nperm <- x$permutations if (nperm) { cat("Significance of delta:", format.pval(x$Pvalue), "\n") cat("Based on ", nperm, " permutations") } if (!is.null(x$strata)) cat(", stratified within", x$strata) cat("\n\n") invisible(x) } vegan/R/print.monoMDS.R0000644000176200001440000000331512114162713014345 0ustar liggesusers### Method functions for monoMDS objects `print.monoMDS` <- function(x, ...) { cat("\nCall:\n") cat(deparse(x$call), "\n\n") modlab <- switch(x$model, global = "Non-metric", local = "Local non-metric", linear = "Linear", hybrid = "Hybrid") cat(paste(modlab, "Multidimensional Scaling\n\n")) cat(x$nobj, "points") cat(", dissimilarity", sQuote(x$distmethod)) if (!is.null(x$distcall)) cat(", call", sQuote(x$distcall)) cat("\n\n") cat("Dimensions:", x$ndim, "\n") cat("Stress: ", x$stress, "\n") cat("Stress type", x$isform) if (x$model != "linear") cat(", ", c("weak", "strong")[x$ities], " ties", sep = "") cat("\n") cat("Scores ") if (x$iscal == 1) cat("scaled to unit root mean square") else cat("unscaled") if (attr(x$points, "pc")) cat(", rotated to principal components") cat("\n") stoplab <- switch(x$icause, "Maximum number of iterations (maxit) reached", "Stress nearly zero (< smin)", "Stress nearly unchanged (ratio > sratmax)", "Scale factor of gradient nearly zero (< sfgrmin)") cat("Stopped after ", x$iters, " iterations: ", stoplab, "\n", sep="") invisible(x) } `scores.monoMDS` <- function(x, choices = NA, ...) { if (any(is.na(choices))) x$points else { choices <- choices[choices <= x$ndim] x$points[, choices, drop = FALSE] } } `plot.monoMDS` <- function(x, choices = c(1,2), type = "t", ...) { ordiplot(x, display = "sites", choices = choices, type = type, ...) } vegan/R/print.metaMDS.R0000644000176200001440000000276311762367537014354 0ustar liggesusers`print.metaMDS` <- function (x, ...) { cat("\nCall:\n") cat(deparse(x$call), "\n\n") if (x$engine == "monoMDS") cat(x$model, "Multidimensional Scaling using monoMDS\n\n") else if (x$engine == "isoMDS") cat("non-metric Multidimensional Scaling using isoMDS (MASS package)\n\n") cat("Data: ", x$data, "\n") cat("Distance:", x$distance, "\n\n") cat("Dimensions:", x$ndim, "\n") cat("Stress: ", x$stress, "\n") if (inherits(x, "monoMDS")) { cat("Stress type", x$isform) if(x$model != "linear") cat(", ", c("weak", "strong")[x$ities], " ties", sep = "") cat("\n") } if (x$converged) { cat("Two convergent solutions found after", x$tries, "tries\n") } else { cat("No convergent solutions - best solution after", x$tries, "tries\n") } z <- x$points scal <- c(if (attr(z, "centre")) "centring", if (attr(z, "pc")) "PC rotation", if (attr(z, "halfchange")) "halfchange scaling") if (!length(scal)) scal <- "as is" cat("Scaling:", paste(scal, collapse = ", "), "\n") if (all(is.na(x$species))) { cat("Species: scores missing\n") } else { spattr <- attr(x$species, "shrinkage") if (is.null(spattr)) cat("Species: non-expanded scores ") else cat("Species: expanded scores ") cat("based on", sQuote(x$data), "\n") } cat("\n") invisible(x) } vegan/R/print.mantel.correlog.R0000644000176200001440000000041011230116666016121 0ustar liggesusers'print.mantel.correlog' <- function(x, ...) { cat('\nMantel Correlogram Analysis\n') cat('\nCall:\n','\n') cat(deparse(x$call),'\n') cat('\n') printCoefmat(x$mantel.res, P.values=TRUE, signif.stars=TRUE, Pvalues = TRUE) invisible(x) }vegan/R/print.mantel.R0000644000176200001440000000134412075212247014315 0ustar liggesusers`print.mantel` <- function (x, digits = max(3, getOption("digits") - 3), ...) { cat("\n") if (inherits(x, "mantel.partial")) cat("Partial ") cat("Mantel statistic based on", x$method, "\n") cat("\nCall:\n") cat(deparse(x$call), "\n\n") cat("Mantel statistic r: ") cat(formatC(x$statistic, digits = digits), "\n") nperm <- x$permutations if (nperm) { cat(" Significance:", format.pval(x$signif), "\n\n") out <- quantile(x$perm, c(0.9, 0.95, 0.975, 0.99)) cat("Upper quantiles of permutations (null model):\n") print(out, digits = 3) cat("\nBased on", nperm, "permutations") if (!is.null(x$strata)) cat(", stratified within", x$strata) } cat("\n\n") invisible(x) } vegan/R/print.isomap.R0000644000176200001440000000054610667741210014332 0ustar liggesusers`print.isomap` <- function (x, ...) { cat("\nIsometric Feature Mapping (isomap)\n\n") cat("Call:\n") cat(deparse(x$call), "\n\n") cat("Distance method:", x$method, "\n") cat("Criterion:", x$criterion, "=", x$critval, "\n") if(!is.null(x$take)) cat("Data were fragmented, analysed", sum(x$take), "of", length(x$take), "points\n") invisible(x) } vegan/R/print.humpfit.R0000644000176200001440000000056010667741210014512 0ustar liggesusers"print.humpfit" <- function(x, ...) { cat("\nHump-backed Null model of richness vs. productivity\n\n") cat("Family:", family(x)$family,"\n") cat("Link function: Fisher diversity\n\n") cat("Coefficients:\n\n") print(coef(x)) cat("\nDeviance", deviance(x), "with", df.residual(x)) cat(" residual degrees of freedom\n") invisible(x) } vegan/R/print.fisherfit.R0000644000176200001440000000050710667741210015022 0ustar liggesusers"print.fisherfit" <- function (x, ...) { cat("\nFisher log series model\n") cat("No. of species:", sum(x$fisher), "\n\n") out <- cbind(x$estimate, sqrt(diag(solve(x$hessian)))) colnames(out) <- c("Estimate", "Std. Error") rownames(out) <- "alpha" printCoefmat(out) cat("\n") invisible(x) } vegan/R/print.factorfit.R0000644000176200001440000000104111210174375015007 0ustar liggesusers"print.factorfit" <- function (x, ...) { cat("Centroids:\n") printCoefmat(x$centroids, tst.ind = 1:ncol(x$centroids), na.print = "", ...) cat("\nGoodness of fit:\n") out <- cbind(r2 = x$r, "Pr(>r)" = x$pvals) if (x$permutations) { printCoefmat(out, has.Pvalue = TRUE, ...) cat("P values based on", x$permutations, "permutations") if (!is.null(x$strata)) cat(", stratified within", x$strata) cat(".\n") } else printCoefmat(out, na.print = "", ...) invisible(x) } vegan/R/print.envfit.R0000644000176200001440000000045711252633607014337 0ustar liggesusers"print.envfit" <- function(x, ...) { if (!is.null(x$vectors)) { cat("\n***VECTORS\n\n") print(x$vectors) } if (!is.null(x$factors)) { cat("\n***FACTORS:\n\n") print(x$factors) } if (!is.null(x$na.action)) cat("\n", naprint(x$na.action), "\n", sep="") invisible(x) } vegan/R/print.decorana.R0000644000176200001440000000200510667741210014606 0ustar liggesusers"print.decorana" <- function (x, digits = max(3, getOption("digits") - 3), ...) { cat("\nCall:\n") cat(deparse(x$call), "\n\n") cat(ifelse(x$ira, "Orthogonal", "Detrended"), "correspondence analysis") cat(ifelse(!x$ira, paste(" with ", x$mk, " segments.\n", sep = ""), ".\n")) if (x$iresc) { cat("Rescaling of axes with", x$iresc, "iterations") if (x$short) cat(", and shortest axis rescaled", x$short) cat(".\n") } if (!is.null(x$v)) cat("Downweighting of rare species from fraction 1/", x$fraction, ".\n", sep="") if (!is.null(x$before)) { cat("Piecewise transformation of above-zero abundances:\n") print(rbind(before = x$before, after = x$after)) } axlen <- NULL if (!x$ira && x$iresc) { axlen <- apply(x$rproj, 2, max) } cat("\n") print(rbind(Eigenvalues = x$evals, "Decorana values" = x$evals.decorana, "Axis lengths" = axlen), digits = digits) cat("\n") invisible(x) } vegan/R/print.cca.R0000644000176200001440000000470511570737723013601 0ustar liggesusers`print.cca` <- function (x, digits = max(3, getOption("digits") - 3), ...) { if (inherits(x, "pcaiv")) { warning("this is an ade4 object which vegan cannot handle") x <- ade2vegancca(x) } writeLines(strwrap(pasteCall(x$call))) cat("\n") chi <- c(x$tot.chi, if (!is.null(x$CA$imaginary.chi)) x$tot.chi - x$CA$imaginary.chi, x$pCCA$tot.chi, x$CCA$tot.chi, x$CA$tot.chi, x$CA$imaginary.chi) ## Proportions of inertia only for Real dimensions in capscale if (is.null(x$CA$imaginary.chi)) props <- chi/chi[1] else props <- c(NA, chi[-c(1, length(chi))]/chi[2], NA) rnk <- c(NA, if (!is.null(x$CA$imaginary.rank)) NA, x$pCCA$rank, x$CCA$rank, x$CA$rank, x$CA$imaginary.rank) tbl <- cbind(chi, props, rnk) colnames(tbl) <- c("Inertia", "Proportion", "Rank") rn <- c("Total", "Real Total", "Conditional", "Constrained", "Unconstrained", "Imaginary") rownames(tbl) <- rn[c(TRUE, !is.null(x$CA$imaginary.chi), !is.null(x$pCCA), !is.null(x$CCA), !is.null(x$CA), !is.null(x$CA$imaginary.chi))] ## Remove "Proportion" if only one component if (is.null(x$CCA) && is.null(x$pCCA)) tbl <- tbl[,-2] printCoefmat(tbl, digits = digits, na.print = "") cat("Inertia is", x$inertia, "\n") if (!is.null(x$CCA$alias)) cat("Some constraints were aliased because they were collinear (redundant)\n") ## Report removed observations and species if (!is.null(x$na.action)) cat(naprint(x$na.action), "\n") sp.na <- if (is.null(x$CCA)) attr(x$CA$v, "na.action") else attr(x$CCA$v, "na.action") if (!is.null(sp.na)) cat(length(sp.na), "species", ifelse(length(sp.na)==1, "(variable)", "(variables)"), "deleted due to missingness\n") if (!is.null(x$CCA) && x$CCA$rank > 0) { cat("\nEigenvalues for constrained axes:\n") print(x$CCA$eig, digits = digits, ...) } if (!is.null(x$CA) && x$CA$rank > 0) { ax.lim <- 8 ax.trig <- 16 cat("\nEigenvalues for unconstrained axes:\n") if (x$CA$rank > ax.trig) { print(x$CA$eig[1:ax.lim], digits = digits, ...) cat("(Showed only", ax.lim, "of all", x$CA$rank, "unconstrained eigenvalues)\n") } else print(x$CA$eig, digits = digits, ...) } cat("\n") invisible(x) } vegan/R/print.capscale.R0000644000176200001440000000040412074203774014610 0ustar liggesusers`print.capscale` <- function(x, ...) { NextMethod("print", x, ...) if (!is.null(x$metaMDSdist)) cat("metaMDSdist transformed data:", x$metaMDSdist, "\n\n") if (!is.null(x$ac)) cat("Constant added to distances:", x$ac, "\n\n") } vegan/R/print.bioenv.R0000644000176200001440000000104510667741210014317 0ustar liggesusers"print.bioenv" <- function (x, ...) { cat("\nCall:\n") cat(deparse(x$call), "\n") cat("\nSubset of environmental variables with best correlation to community data.\n\n") cat("Correlations: ", x$method, "\n") cat("Dissimilarities: ", x$index, "\n\n") i <- which.max(lapply(x$models, function(tmp) tmp$est)) cat("Best model has", i, "parameters (max.", x$upto, "allowed):\n") cat(paste(x$names[x$models[[i]]$best], collapse = " ")) cat("\nwith correlation ", x$models[[i]]$est, "\n\n") invisible(x) } vegan/R/print.betadisper.R0000644000176200001440000000130010720073116015142 0ustar liggesusers`print.betadisper` <- function(x, digits = max(3, getOption("digits") - 3), ...) { cat("\n") writeLines(strwrap("Homogeneity of multivariate dispersions\n", prefix = "\t")) cat("\n") writeLines(strwrap(pasteCall(x$call))) cat(paste("\nNo. of Positive Eigenvalues:", sum(x$eig > 0))) cat(paste("\nNo. of Negative Eigenvalues:", sum(x$eig < 0))) cat("\n\n") writeLines(strwrap("Average distance to centroid:\n")) print.default(tapply(x$distances, x$group, mean), digits = digits) cat("\n") writeLines(strwrap("Eigenvalues for PCoA axes:\n")) print.default(round(x$eig, digits = digits)) invisible(x) } vegan/R/print.anosim.R0000644000176200001440000000106011210234147014307 0ustar liggesusers"print.anosim" <- function (x, digits = max(3, getOption("digits") - 3), ...) { cat("\nCall:\n") cat(deparse(x$call), "\n") cat("Dissimilarity:", x$dissimilarity,"\n\n") cat("ANOSIM statistic R: ") cat(formatC(x$statistic, digits = digits), "\n") nperm <- x$permutations if (nperm) { cat(" Significance:", format.pval(x$signif), "\n\n") cat("Based on ", nperm, " permutations") } if (!is.null(x$strata)) cat(", stratified within", x$strata) cat("\n\n") invisible(x) } vegan/R/print.adonis.R0000644000176200001440000000020711430721540014302 0ustar liggesusers`print.adonis` <- function(x, ...) { cat("\nCall:\n") cat(deparse(x$call), "\n\n") print(x$aov.tab) invisible(x) } vegan/R/print.MOStest.R0000644000176200001440000000060311521606164014370 0ustar liggesusers`print.MOStest` <- function(x, ...) { cat("\nMitchell-Olds and Shaw test\n") cat("Null: hump of a quadratic linear predictor is at min or max\n") print(x$family) print(x$hump) if (!x$isBracketed) cat("***** Caution: hump/pit not bracketed by the data ******\n") cat("\n") printCoefmat(coef(x), has.Pvalue = TRUE, na.print = "") invisible(x) } vegan/R/print.CCorA.R0000644000176200001440000000161011335724474013770 0ustar liggesusers`print.CCorA` <- function(x, ...) { cat("\nCanonical Correlation Analysis\n") cat("\nCall:\n") cat(deparse(x$call), "\n\n") out <- structure(rbind(x$Mat.ranks), dimnames = list("Matrix Ranks", c("Y", "X"))) print(out, ...) cat("\n") cat("Pillai's trace: ", format(x$Pillai, ...), "\n") cat("\n") cat("Significance of Pillai's trace:\n") if (x$nperm > 0) { cat("based on", x$nperm, "permutations: ") cat(x$p.perm,"\n") } cat("from F-distribution: ", format.pval(x$p.Pillai), "\n\n") out <- rbind("Eigenvalues" = x$EigenValues, "Canonical Correlations" = x$CanCorr) colnames(out) <- colnames(x$Cy) printCoefmat(out, ...) cat("\n") out <- rbind("RDA R squares" = x$RDA.Rsquares, "adj. RDA R squares" = x$RDA.adj.Rsq) colnames(out) <- c("Y | X", "X | Y") printCoefmat(out, ...) cat("\n") invisible(x) } vegan/R/prestonfit.R0000644000176200001440000000135611530172021014070 0ustar liggesusers`prestonfit` <- function (x, tiesplit = TRUE, ...) { x <- as.preston(x, tiesplit = tiesplit) oct <- as.numeric(names(x)) fit <- glm(x ~ oct + I(oct^2), family = if (tiesplit) quasipoisson else poisson) fv <- fitted(fit) p <- coef(fit) if (!is.na(p[3]) && p[3] < 0) { mu <- -p[2]/2/p[3] sd <- sqrt(-1/2/p[3]) S0 <- exp(p[1] - p[2]^2/4/p[3]) p <- c(mu, sd, S0) } else { p <- rep(NA, 3) } names(p) <- c("mode", "width", "S0") out <- list(freq = unclass(x), fitted = fv, coefficients = p) out$method = "Poisson fit to octaves" if(tiesplit) out$method <- paste("Quasi-", out$method, sep="") class(out) <- c("prestonfit") out } vegan/R/prestondistr.R0000644000176200001440000000147711521606164014451 0ustar liggesusers`prestondistr` <- function (x, truncate = -1, ...) { fun <- function(par, x, truncate) { up <- dnorm(x, par[1], par[2], log = TRUE) dn <- pnorm(truncate, par[1], par[2], lower.tail = FALSE) -sum(up - log(dn)) } x <- x[x > 0] logx <- log2(x) p <- c(mean(logx), sd(logx)) sol <- optim(p, fun, x = logx, truncate = truncate) p <- sol$par area <- pnorm(truncate, p[1], p[2], lower.tail = FALSE) scale <- length(x)/sqrt(2 * pi)/p[2]/area p <- c(p, scale) oct <- as.preston(x, ...) x <- as.numeric(names(oct)) fit <- p[3] * exp(-(x - p[1])^2/2/p[2]^2) names(p) <- c("mode", "width", "S0") out <- list(freq = oct, fitted = fit, coefficients = p) out$method <- "maximized likelihood to log2 abundances" class(out) <- "prestonfit" out } vegan/R/prepanel.ordi3d.R0000644000176200001440000000040310674514007014670 0ustar liggesusers`prepanel.ordi3d` <- function(xlim = xlim, ylim = ylim, zlim = zlim, aspect = c(1,1), ...) { aspect = c(diff(ylim)/diff(xlim), diff(zlim)/diff(xlim)) lattice:::prepanel.default.cloud(xlim = xlim, ylim = ylim, zlim = zlim, aspect = aspect, ...) } vegan/R/pregraphKM.R0000644000176200001440000000352011527004531013734 0ustar liggesusers`pregraphKM` <- function(matrice) { `row.col.number` <- function(mat,number){ nr<-nrow(mat) nc<-ncol(mat) mod<-number %% nr div<-number/nr ##First column if(mod!=0 & div>1){ nr.f<-mod nc.f<-trunc(div)+1 }else{ if(div<=1){ nc.f<-1 nr.f<-number }else{ if(mod==0){ nc.f<-div nr.f<-nr } } } list(nr=nr.f,nc=nc.f) } ## Beginning of the function for(k in 1:(ncol(matrice)-1)){ i=1 j=1 tmp<-0 while(j <= max(matrice[,k])){ if(i==1){ mat<-table(matrice[,k],matrice[,k+1]) number<-which.max(mat) tmp<-row.col.number(mat,number) tmp0<-tmp ## Change les indices if(tmp$nr!=tmp$nc){ find.nc<-which(matrice[,k+1]==tmp$nc) find.nr<-which(matrice[,k+1]==tmp$nr) matrice[find.nc,k+1]<-tmp$nr matrice[find.nr,k+1]<-tmp$nc }else{} i=2 }else{ mat<-table(matrice[,k],matrice[,k+1]) mat[tmp0$nr,]<-0 mat[,tmp0$nr]<-0 number<-which.max(mat) tmp<-row.col.number(mat,number) ## Change les indices if(tmp$nr!=tmp$nc){ find.nc<-which(matrice[,k+1]==tmp$nc) find.nr<-which(matrice[,k+1]==tmp$nr) matrice[find.nc,k+1]<-tmp$nr matrice[find.nr,k+1]<-tmp$nc }else{} tmp0$nr<-c(tmp0$nr,tmp$nr) } j=j+1 } } matrice } vegan/R/predict.specaccum.R0000644000176200001440000000123411625151336015275 0ustar liggesusers`predict.specaccum` <- function(object, newdata, interpolation = c("linear", "spline"), ...) { if (missing(newdata)) out <- object$richness else { interpolation <- match.arg(interpolation) newdata <- drop(as.matrix(newdata)) if (length(dim(newdata)) > 1) stop("function accepts only one variable as 'newdata'") if (interpolation == "linear") out <- approx(x = object$sites, y = object$richness, xout = newdata, rule = 1)$y else out <- spline(x = object$sites, y = object$richness, xout = newdata, ...)$y } out } vegan/R/predict.rda.R0000644000176200001440000001211412104765233014077 0ustar liggesusers`predict.rda` <- function (object, newdata, type = c("response", "wa", "sp", "lc", "working"), rank = "full", model = c("CCA", "CA"), scaling = FALSE, ...) { type <- match.arg(type) model <- match.arg(model) if (model == "CCA" && is.null(object$CCA)) model <- "CA" take <- object[[model]]$rank if (take == 0) stop("model ", dQuote(model), " has rank 0") if (rank != "full") take <- min(take, rank) if (is.null(object$CCA)) tmp <- object$CA$Xbar else tmp <- object$CCA$Xbar cent <- attr(tmp, "scaled:center") scal <- attr(tmp, "scaled:scale") scaled.PCA <- !is.null(scal) nr <- nrow(tmp) - 1 u <- object[[model]]$u[, 1:take, drop = FALSE] v <- object[[model]]$v[, 1:take, drop = FALSE] w <- object[[model]]$wa[, 1:take, drop = FALSE] if (is.null(w)) w <- u slam <- diag(sqrt(object[[model]]$eig[1:take] * nr), nrow = take) if (type %in% c("response", "working")) { if (!missing(newdata)) { u <- predict(object, type = if(model == "CCA") "lc" else "wa", newdata = newdata, rank = take) } if (inherits(object, "capscale")) { if (take > 0) { out <- u %*% slam/object$adjust if (type == "response") { out <- dist(out) if (!is.null(object$ac)) out <- out - object$ac } } } else { if (take > 0) out <- u %*% slam %*% t(v) else { out <- matrix(0, nrow = nrow(u), ncol = nrow(v)) rownames(out) <- rownames(u) colnames(out) <- rownames(v) } if (type == "response") { if (!is.null(scal)) out <- sweep(out, 2, scal, "*") out <- sweep(out, 2, cent, "+") } else { out <- out/sqrt(nrow(out) - 1) } } } else if (type == "lc") { if (model == "CA") stop("'lc' scores not available for unconstrained ordination") if (!missing(newdata)) { if (is.null(object$terminfo)) E <- as.matrix(newdata) else { d <- ordiParseFormula(formula(object), newdata, object$terminfo$xlev) E <- cbind(d$Z, d$Y) } Q <- object[[model]]$QR p1 <- Q$pivot[1:Q$rank] E <- sweep(E, 2, c(object$pCCA$envcentre, object$CCA$envcentre), "-") u <- E[, p1, drop = FALSE] %*% coef(object)[p1, , drop = FALSE] u <- u[, 1:take, drop = FALSE] } out <- u if (scaling) { tot <- sqrt(object$tot.chi * nr) lam <- list(diag(slam)/tot, 1, sqrt(diag(slam)/tot))[[abs(scaling)]] out <- sqrt(tot) * sweep(out, 2, lam, "*") } } else if (type == "wa") { if (!missing(newdata)) { if (inherits(object, "capscale")) stop("'wa' scores not available in capscale with 'newdata'") if (!is.null(object$pCCA)) stop("No 'wa' scores available (yet) in partial RDA") nm <- rownames(v) if (!is.null(nm)) { if (!all(nm %in% colnames(newdata))) stop("'newdata' does not have named columns matching one or more the original columns") newdata <- newdata[, nm, drop = FALSE] } Xbar <- as.matrix(newdata) Xbar <- sweep(Xbar, 2, cent, "-") if (!is.null(scal)) { nz <- scal > 0 Xbar[,nz] <- sweep(Xbar[,nz], 2, scal[nz], "/") } w <- Xbar %*% v w <- sweep(w, 2, diag(slam), "/") } out <- w if (scaling) { tot <- sqrt(object$tot.chi * nr) lam <- list(diag(slam)/tot, 1, sqrt(diag(slam)/tot))[[abs(scaling)]] out <- sqrt(tot) * sweep(out, 2, lam, "*") } } else if (type == "sp") { if (inherits(object, "capscale")) warning("'sp' scores may be meaningless in 'capscale'") if (!missing(newdata)) { nm <- rownames(u) if (!is.null(nm)) { if (!all(nm %in% rownames(newdata))) stop("'newdata' does not have named rows matching one or more of the original rows") newdata <- newdata[nm, , drop = FALSE] } Xbar <- as.matrix(newdata) Xbar <- scale(Xbar, center = TRUE, scale = scaled.PCA) if (!is.null(object$pCCA)) Xbar <- qr.resid(object$pCCA$QR, Xbar) v <- t(Xbar) %*% u v <- sweep(v, 2, diag(slam), "/") } out <- v if (scaling) { tot <- sqrt(object$tot.chi * nr) scal <- list(1, diag(slam)/tot, sqrt(diag(slam)/tot))[[abs(scaling)]] out <- sqrt(tot) * sweep(out, 2, scal, "*") } } out } vegan/R/predict.radline.R0000644000176200001440000000304412031100300014722 0ustar liggesusers### predict method for radline, radfit & radfit.frame ### All functions take 'newdata' argument which need not be integer: ### the functions can interpolate, but not necessarily extrapolate, or ### the extrapolations may be NaN. `predict.radline` <- function(object, newdata, total, ...) { ## newdata can be ranks if (missing(newdata)) x <- seq_along(object$y) else x <- drop(as.matrix(newdata)) ## total number of individuals in the community if (missing(total)) total <- sum(object$y) ## adjustment for chagned total in call adj <- total/sum(object$y) nobs <- length(object$y) p <- coef(object) switch(object$model, ## linear interpolation, no extrapolation `Brokenstick` = approx(seq_len(nobs), object$fitted.values, x, ...)$y * adj, `Preemption` = exp(log(total) + log(p) + log(1 - p)*(x-1)), ## NaN when rank outside proportional rank 0...1 `Log-Normal` = { slope <- diff(range(ppoints(nobs)))/(nobs-1) intcpt <- 0.5 - slope * (nobs + 1) / 2 xnorm <- -qnorm(intcpt + slope * x) exp(p[1] + p[2]*xnorm)*adj }, `Zipf` = exp(log(total) + log(p[1]) + p[2]*log(x)), `Zipf-Mandelbrot` = exp(log(total) + log(p[1]) + p[2]*log(x + p[3])) ) } `predict.radfit`<- function(object, ...) { sapply(object$models, predict, ...) } `predict.radfit.frame` <- function(object, ...) { lapply(object, predict, ...) } vegan/R/predict.humpfit.R0000644000176200001440000000045010667741210015006 0ustar liggesusers"predict.humpfit" <- function(object, newdata = NULL, ...) { if (is.null(newdata)) return(fitted(object)) else { p <- coef(object) x <- unlist(newdata) x <- ifelse(x < p[1], x/p[1], p[1]*p[1]/x/x) fv <- p[3]*log(1 + p[2]*x/p[3]) } fv } vegan/R/predict.fitspecaccum.R0000644000176200001440000000062611625103322015774 0ustar liggesusers`predict.fitspecaccum` <- function(object, newdata, ...) { mods <- object$models if (!missing(newdata)) { newdata <- drop(as.matrix(newdata)) if (length(dim(newdata)) > 1) stop("function accepts only one variable as 'newdata'") drop(sapply(mods, predict, newdata = data.frame(x = newdata), ...)) } else { drop(sapply(mods, predict, ...)) } } vegan/R/predict.decorana.R0000644000176200001440000000421310715023626015105 0ustar liggesusers`predict.decorana` <- function (object, newdata, type = c("response", "sites", "species"), rank = 4, ...) { type <- match.arg(type) u <- object$rproj[, 1:rank, drop = FALSE] v <- object$cproj[, 1:rank, drop = FALSE] orig <- object$origin[1:rank] u <- sweep(u, 2, orig, "-") v <- sweep(v, 2, orig, "-") rs <- object$aidot cs <- object$adotj tot <- sum(rs) rs <- rs/tot cs <- cs/tot lam <- object$evals[1:rank] if (type == "response") { if (!object$ira && rank > 1) stop("Prediction is unavailable in detrended CA beyond first axis\n") Xbar <- 0 if (rank > 0) { if (!object$ira) { tmp <- sweep(v, 1, sqrt(cs), "*") tmp <- rbind(tmp, sweep(u, 1, sqrt(rs), "*")) rot <- svd(tmp)$v v <- v %*% rot u <- u %*% rot fac <- colSums(sweep(v^2, 1, cs, "*")) lam <- (fac - 1)/fac } Xbar <- u %*% diag(1 - lam, nrow = rank) %*% t(v) } out <- (Xbar + 1) * outer(rs, cs) * tot } else if (type == "sites") { if (!missing(newdata)) { Xbar <- as.matrix(newdata) if (!is.null(object$v)) Xbar <- sweep(Xbar, 2, object$v, "*") rs <- rowSums(Xbar) Xbar <- (Xbar - outer(rs, cs))/sqrt(outer(rs, cs)) v <- sweep(v, 1, sqrt(cs), "*") u <- sweep(Xbar %*% v, 1, sqrt(rs), "/") } out <- u } else if (type == "species") { if (!missing(newdata)) { if (!object$ira && rank > 1) stop("type = 'species' not available in detrended CA with 'newdata'") if (object$iresc) stop("type = 'species' not available in rescaled DCA with 'newdata'") Xbar <- as.matrix(newdata) cs <- colSums(Xbar) Xbar <- (Xbar - outer(rs, cs))/sqrt(outer(rs, cs)) u <- sweep(u, 1, sqrt(rs), "*") v <- sweep(t(Xbar) %*% u, 1, sqrt(cs), "/") v <- sweep(v, 2, lam, "/") } out <- v } out } vegan/R/predict.cca.R0000644000176200001440000001156612104765233014071 0ustar liggesusers`predict.cca` <- function (object, newdata, type = c("response", "wa", "sp", "lc", "working"), rank = "full", model = c("CCA", "CA"), scaling = FALSE, ...) { type <- match.arg(type) model <- match.arg(model) if (model == "CCA" && is.null(object$CCA)) model <- "CA" take <- object[[model]]$rank if (take == 0) stop("model ", dQuote(model), " has rank 0") if (rank != "full") take <- min(take, rank) rs <- object$rowsum cs <- object$colsum gtot <- object$grand.tot u <- object[[model]]$u[, 1:take, drop = FALSE] v <- object[[model]]$v[, 1:take, drop = FALSE] w <- object[[model]]$wa[, 1:take, drop = FALSE] if (is.null(w)) w <- u slam <- diag(sqrt(object[[model]]$eig[1:take]), nrow = take) if (type %in% c("response", "working")) { Xbar <- 0 if (!missing(newdata)) { if (NROW(u) == NROW(newdata)) u <- predict(object, type = if(model == "CCA") "lc" else "wa", newdata = newdata, rank = take) else warning(gettextf("'newdata' ignored: it must have the same number of rows as the original community data with type = '%s'", type)) } if (take > 0) Xbar <- u %*% slam %*% t(v) rc <- outer(rs, cs) if (type == "response") out <- (Xbar + 1) * rc * gtot else # type == "working" out <- Xbar * sqrt(rc) } else if (type == "lc") { if (model == "CA") stop("'lc' scores not available for unconstrained ordination") if (!missing(newdata)) { if (is.null(object$terminfo)) E <- as.matrix(newdata) else { d <- ordiParseFormula(formula(object), newdata, object$terminfo$xlev) E <- cbind(d$Z, d$Y) } E <- sweep(E, 2, c(object$pCCA$envcentre, object$CCA$envcentre), "-") Q <- object[[model]]$QR p1 <- Q$pivot[1:Q$rank] u <- E[, p1, drop = FALSE] %*% coef(object)[p1, , drop = FALSE] u <- u[, 1:take, drop = FALSE] } out <- u if (scaling) { scal <- list(diag(slam), 1, sqrt(diag(slam)))[[abs(scaling)]] out <- sweep(out, 2, scal, "*") if (scaling < 0) { scal <- sqrt(1/(1 - diag(slam)^2)) out <- sweep(out, 2, scal, "*") } } } else if (type == "wa") { if (!missing(newdata)) { if (!is.null(object$pCCA)) stop("No 'wa' scores available (yet) in partial CCA") nm <- rownames(v) if (!is.null(nm)) { # Got rownames: keep only species with scores if (!all(nm %in% colnames(newdata))) stop("'newdata' does not have named columns matching one or more the original columns") newdata <- newdata[, nm, drop = FALSE] } else { #Rownames are NULL: still try to remove exclude.spec exclude.spec <- attr(object[[model]]$v, "na.action") if (!is.null(exclude.spec)) Xbar <- Xbar[, -exclude.spec] } Xbar <- as.matrix(newdata) rs <- rowSums(Xbar) Xbar <- (Xbar - outer(rs, cs))/sqrt(outer(rs, cs)) v <- sweep(v, 1, sqrt(cs), "*") w <- sweep(Xbar %*% v, 1, sqrt(rs), "/") w <- sweep(w, 2, diag(slam), "/") } out <- w if (scaling) { scal <- list(diag(slam), 1, sqrt(diag(slam)))[[abs(scaling)]] out <- sweep(out, 2, scal, "*") if (scaling < 0) { scal <- sqrt(1/(1 - diag(slam)^2)) out <- sweep(out, 2, scal, "*") } } } else if (type == "sp") { if (!missing(newdata)) { nm <- rownames(u) if (!is.null(nm)) { if (!all(nm %in% rownames(newdata))) stop("'newdata' does not have named rows matching one or more of the original rows") newdata <- newdata[nm, , drop = FALSE] } Xbar <- as.matrix(newdata) cs <- colSums(Xbar) Xbar <- (Xbar - outer(rs, cs))/sqrt(outer(rs, cs)) if (!is.null(object$pCCA)) Xbar <- qr.resid(object$pCCA$QR, Xbar) u <- sweep(u, 1, sqrt(rs), "*") v <- sweep(t(Xbar) %*% u, 1, sqrt(cs), "/") v <- sweep(v, 2, diag(slam), "/") } out <- v if (scaling) { scal <- list(1, diag(slam), sqrt(diag(slam)))[[abs(scaling)]] out <- sweep(out, 2, scal, "*") if (scaling < 0) { scal <- sqrt(1/(1 - diag(slam)^2)) out <- sweep(out, 2, scal, "*") } } } out } vegan/R/prc.R0000644000176200001440000000224711475440035012472 0ustar liggesusers`prc` <- function (response, treatment, time, ...) { extras <- match.call(expand.dots = FALSE)$... if (is.null(extras$data)) data <- parent.frame() else data <- eval(extras$data) y <- deparse(substitute(response)) x <- deparse(substitute(treatment)) z <- deparse(substitute(time)) oldcon <- options(contrasts = c("contr.treatment", "contr.poly")) on.exit(options(oldcon)) fla <- as.formula(paste("~", x, "+", z)) mf <- model.frame(fla, data, na.action = na.pass) if (!all(sapply(mf, is.factor))) stop(x, " and ", z, " must be factors") if (any(sapply(mf, is.ordered))) stop(x, " or ", z, " cannot be ordered factors") fla.zx <- as.formula(paste("~", z, ":", x)) fla.z <- as.formula(paste("~", z)) # delete first (control) level from the design matrix X = model.matrix(fla.zx, mf)[,-c(seq_len(nlevels(time)+1))] Z = model.matrix(fla.z, mf)[,-1] mod <- rda(response ~ X + Condition(Z), ...) mod$terminfo$xlev = list(levels(time), levels(treatment)) names(mod$terminfo$xlev) = c(paste(z), paste(x)) mod$call <- match.call() class(mod) <- c("prc", class(mod)) mod } vegan/R/postMDS.R0000644000176200001440000000523411631220326013227 0ustar liggesusers"postMDS" <- function (X, dist, pc = TRUE, center = TRUE, halfchange, threshold = 0.8, nthreshold = 10, plot = FALSE, ...) { Size <- attr(dist, "Size") if (any(names(X) == "points")) x <- X$points else x <- as.matrix(X) if (center) x <- scale(x, scale = FALSE) if (pc) { dn <- dimnames(x) x <- prcomp(x, center = center)$x dimnames(x) <- dn } ## Check halfchange scaling, if not explicitly defined if (missing(halfchange)) { maxdis <- attr(dist, "maxdis") ## play safe: if 'maxdis' is missing or FALSE, skip halfchange ## scaling ('maxdis' is set in metaMDSdist). if (!is.null(maxdis) && maxdis) halfchange <- TRUE else halfchange <- FALSE } if (halfchange) { dist <- as.vector(dist) ordi <- as.vector(vegdist(x, "euclidean")) take <- dist < threshold if (sum(take) < nthreshold) { warning("skipping half-change scaling: too few points below threshold") halfchange <- FALSE } else { k <- coef(lm(dist[take] ~ ordi[take])) names(k) <- NULL hc <- (1 - k[1])/2/k[2] x <- x/hc } } if (!halfchange) { scl <- max(dist, na.rm = TRUE)/max(vegdist(x, "euclidean")) x <- x*scl } if (plot && halfchange) { cross.lim <- 45 if (Size > cross.lim) pch <- "." else pch <- "+" orange <- range(c(ordi, 0, 1)) drange <- range(c(dist, 0, 1)) plot(orange, drange, type = "n", xlab = "Ordination distance", ylab = "Community dissimilarity") ## Colours in default palette: 2 = red, 4 = blue, 8 = gray. points(ordi[take], dist[take], pch = pch, col = 4) points(ordi[!take], dist[!take], pch = pch, col = 8) abline(h = threshold) abline(h = k[1]) hclevel <- (1 - k[1])/2 + k[1] segments(0, hclevel, hc, hclevel, col = 2, lwd = 2) arrows(hc, hclevel, hc, 0, col = 2, lwd = 2) arrows(0, k[1], 0, hclevel, col = 2, code = 3) arrows(0, hclevel, 0, 1, col = 2, code = 3) j <- 0.02 text(0 + j, threshold + j, "Threshold", adj = c(0, 0)) text(0 + j, k[1] + j, "Replicate dissimilarity", adj = c(0, 0)) text(0 + j, hclevel + j, "Half-change", adj = c(0, 0)) abline(k, col = 4, lwd = 2) } attr(x, "centre") <- center attr(x, "pc") <- pc attr(x, "halfchange") <- halfchange if (any(names(X) == "points")) X$points <- x else X <- x X } vegan/R/poolaccum.R0000644000176200001440000000271311636647312013674 0ustar liggesusers`poolaccum` <- function(x, permutations = 100, minsize = 3) { x <- as.matrix(x) n <- nrow(x) m <- ncol(x) N <- seq_len(n) S <- chao <- boot <- jack1 <- jack2 <- matrix(0, nrow=n, ncol=permutations) ## specpool() is slow, but the vectorized versions below are ## pretty fast for (i in 1:permutations) { take <- sample.int(n, n) tmp <- apply(x[take,] > 0, 2, cumsum) S[,i] <- rowSums(tmp > 0) ## All-zero species are taken as *known* to be missing in ## subsamples, and in the following we subtract them (as ## 2*S-m) from the bootstrap samples to give a more unbiased ## estimate. boot[,i] <- 2*S[,i] - m + rowSums(exp(sweep(log1p(-sweep(tmp, 1, N, "/")), 1, N, "*") )) a1 <- rowSums(tmp == 1) a2 <- rowSums(tmp == 2) chao[, i] <- S[,i] + ifelse(a2 > 0, a1*a1/2/a2, 0) jack1[,i] <- S[,i] + a1 * (N-1)/N jack2[,i] <- S[,i] + a1*(2*N-3)/N - a2*(N-2)^2/N/(N-1) } means <- cbind(`N` = N, `S` = rowMeans(S), `Chao` = rowMeans(chao), `Jackknife 1` = rowMeans(jack1), `Jackknife 2` = rowMeans(jack2), `Bootstrap` = rowMeans(boot)) take <- N >= minsize out <- list(S = S[take,], chao = chao[take,], jack1 = jack1[take,], jack2 = jack2[take,], boot = boot[take,], N = N[take], means = means[take,]) class(out) <- "poolaccum" out } vegan/R/points.radline.R0000644000176200001440000000042712031100300014606 0ustar liggesusers`points.radline` <- function (x, ...) { poi <- x$y rnk <- seq(along = poi) points(rnk, poi, ...) out <- list(species = cbind(rnk, poi)) class(out) <- "ordiplot" invisible(out) } `points.radfit` <- function(x, ...) { points.radline(x, ...) } vegan/R/points.procrustes.R0000644000176200001440000000073511147314242015426 0ustar liggesusers`points.procrustes` <- function(x, display = c("target","rotated"), ...) { display <- match.arg(display) x <- if (display == "target") x$X else x$Yrot points(x, ...) invisible() } `text.procrustes` <- function(x, display = c("target","rotated"), labels, ...) { display <- match.arg(display) x <- if (display == "target") x$X else x$Yrot if (missing(labels)) labels <- rownames(x) text(x, labels = labels, ...) invisible() } vegan/R/points.orditkplot.R0000644000176200001440000000011310751371066015405 0ustar liggesusers`points.orditkplot` <- function(x, ...) { points(x$points, ...) } vegan/R/points.ordiplot.R0000644000176200001440000000027011760220402015036 0ustar liggesusers"points.ordiplot" <- function (x, what, select, ...) { x <- scores(x, what) if (!missing(select)) x <- .checkSelect(select, x) points(x, ...) invisible() } vegan/R/points.metaMDS.R0000644000176200001440000000052611760220402014500 0ustar liggesusers"points.metaMDS" <- function (x, display = c("sites", "species"), choices = c(1, 2), shrink = FALSE, select, ...) { display <- match.arg(display) x <- scores(x, display = display, choices = choices, shrink = shrink) if (!missing(select)) x <- .checkSelect(select, x) points(x, ...) invisible() } vegan/R/points.humpfit.R0000644000176200001440000000012710667741210014671 0ustar liggesusers"points.humpfit" <- function(x, ...) { points(x$x, x$y, ...) invisible() } vegan/R/points.decorana.R0000644000176200001440000000055311760220402014762 0ustar liggesusers"points.decorana" <- function (x, display=c("sites", "species"), choices=1:2, origin = TRUE, select, ...) { display <- match.arg(display) x <- scores(x, display = display, choices = choices, origin = origin, ...) if (!missing(select)) x <- .checkSelect(select, x) ordiArgAbsorber(x, FUN = points, ...) invisible() } vegan/R/points.cca.R0000644000176200001440000000256612114162713013746 0ustar liggesusers`points.cca` <- function (x, display = "sites", choices = c(1, 2), scaling = 2, arrow.mul, head.arrow = 0.05, select, const, axis.bp = TRUE, ...) { formals(arrows) <- c(formals(arrows), alist(... = )) if (length(display) > 1) stop("Only one 'display' item can be added in one command.") pts <- scores(x, choices = choices, display = display, scaling = scaling, const) if (!missing(select)) pts <- .checkSelect(select, pts) if (display == "cn") { cnam <- rownames(pts) points(pts, ...) pts <- scores(x, choices = choices, display = "bp", scaling = scaling, const) bnam <- rownames(pts) pts <- pts[!(bnam %in% cnam), , drop = FALSE] if (nrow(pts) == 0) return(invisible()) else display <- "bp" } if (display == "bp") { if (missing(arrow.mul)) { arrow.mul <- ordiArrowMul(pts) } pts <- pts * arrow.mul arrows(0, 0, pts[, 1], pts[, 2], length = head.arrow, ...) pts <- pts * 1.1 if (axis.bp) { axis(3, at = c(-arrow.mul, 0, arrow.mul), labels = rep("", 3)) axis(4, at = c(-arrow.mul, 0, arrow.mul), labels = c(-1, 0, 1)) } return(invisible()) } points(pts, ...) invisible() } vegan/R/plot.varpart234.R0000644000176200001440000000064710667741210014576 0ustar liggesusers"plot.varpart234" <- function(x, cutoff = 0, digits = 1, ...) { vals <- x$indfract[, 3] is.na(vals) <- vals < cutoff if (cutoff >= 0) vals <- round(vals, digits+1) labs <- format(vals, digits=digits, nsmall=digits+1) labs <- gsub("NA", "", labs) showvarparts(x$nsets, labs, ...) if (any(is.na(vals))) mtext(paste("Values <", cutoff," not shown", sep=""), 1) invisible() } vegan/R/plot.varpart.R0000644000176200001440000000011610667741210014334 0ustar liggesusers"plot.varpart" <- function(x, ...) { plot(x$part, ...) invisible() } vegan/R/plot.taxondive.R0000644000176200001440000000044210667741210014660 0ustar liggesusers`plot.taxondive` <- function (x, ...) { plot(x$Species, x$Dplus, xlab="Number of Species", ylab=expression(Delta^"+"), ...) i <- order(x$Species) abline(h=x$EDplus, ...) lines(x$Species[i], x$EDplus - 2*x$sd.Dplus[i], ...) lines(x$Species[i], x$EDplus + 2*x$sd.Dplus[i], ...) } vegan/R/plot.specaccum.R0000644000176200001440000000231711515516055014625 0ustar liggesusers`plot.specaccum` <- function(x, add = FALSE, ci = 2, ci.type = c("bar","line","polygon"), col = par("fg"), ci.col = col, ci.lty = 1, xlab, ylab = x$method, ylim, xvar = c("sites", "individuals"), ...) { xvar <- match.arg(xvar) xaxvar <- x[[xvar]] if (missing(xlab)) xlab <- paste(toupper(substring(xvar, 1, 1)), substring(xvar, 2), sep="") ci.type <- match.arg(ci.type) if (!add) { if (missing(ylim)) ylim <- c(1, max(x$richness, x$richness + ci*x$sd)) plot(xaxvar, x$richness, xlab=xlab, ylab=ylab, ylim=ylim, type="n", ...) } if (!is.null(x$sd) && ci) switch(ci.type, bar = segments(xaxvar, x$richness - ci*x$sd, xaxvar, x$richness + ci*x$sd, col=ci.col, lty=ci.lty, ...), line = matlines(xaxvar, x$richness + t(rbind(-ci,ci) %*% x$sd), col=ci.col, lty=ci.lty, ...), polygon = polygon(c(xaxvar, rev(xaxvar)), c(x$richness - ci*x$sd, rev(x$richness + ci*x$sd)), col=ci.col, lty=ci.lty, ...) ) lines(xaxvar, x$richness,col=col, ...) invisible() } vegan/R/plot.spantree.R0000644000176200001440000000227211221667310014476 0ustar liggesusers"plot.spantree" <- function (x, ord, cex = 0.7, type = "p", labels, dlim, FUN = sammon, ...) { FUNname <- deparse(substitute(FUN)) if (length(FUNname) && FUNname %in% c("sammon", "isoMDS")) require(MASS) || stop(FUNname, "requires package MASS") FUN <- match.fun(FUN) n <- length(x$kid) + 1 if (missing(ord)) { d <- cophenetic(x) if (any(d<=0)) d[d<=0] <- min(d>0)/10 if (!missing(dlim)) d[d > dlim ] <- dlim y <- cmdscale(d) dup <- duplicated(y) if (any(dup)) y[dup, ] <- y[dup,] + runif(2*sum(dup), -0.01, 0.01) ord <- FUN(d, y) } ord <- scores(ord, display = "sites", ...) ordiArgAbsorber(ord, asp = 1, type = "n", FUN = "plot", ...) lines(x, ord) if (type == "p" || type == "b") ordiArgAbsorber(ord, cex = cex, FUN = "points", ...) else if (type == "t") { if (missing(labels)) labels <- x$labels x <- scores(ord, display = "sites", ...) ordiArgAbsorber(x, labels = labels, cex = cex, FUN = "ordilabel", ...) } ord <- list(sites = ord) class(ord) <- "ordiplot" invisible(ord) } vegan/R/plot.renyiaccum.R0000644000176200001440000000077410667741210015026 0ustar liggesusers`plot.renyiaccum` <- function (x, what=c("mean", "Qnt 0.025", "Qnt 0.975"), type = "l", ...) { require(lattice) || stop("requires package lattice") if (any(what %in% colnames(x[,1,]))) x <- x[,,what] dm <- dim(x) lin <- rep(colnames(x[,1,]), each=dm[1]*dm[2]) Sites <- rep(1:dm[1], len=prod(dm)) alp <- factor(rownames(x[1,,]), levels=rownames(x[1,,])) alpha <- rep(rep(alp, each=dm[1]), len=prod(dm)) Diversity <- as.vector(x) xyplot(Diversity ~ Sites | alpha, groups=lin, type=type, ...) } vegan/R/plot.renyi.R0000644000176200001440000000174310667741210014012 0ustar liggesusers`plot.renyi` <- function(x, ...) { require(lattice) || stop("requires lattice") if (inherits(x, "data.frame")) { plt <- factor(rep(rownames(x), ncol(x)), levels=rownames(x)) alp <- factor(rep(colnames(x), each=nrow(x)), levels=colnames(x)) div <- as.vector(as.matrix(x)) df <- data.frame(diversity=div, plot=plt, alpha=alp) lo <- tapply(div, alp, min) hi <- tapply(div, alp, max) med <- tapply(div, alp, median) } else { df <- data.frame(diversity = x, alpha = factor(names(x), levels=names(x)), plot = "plot") lo <- hi <- med <- NA } cl <- trellis.par.get("superpose.line")$col bwplot(diversity ~ alpha | plot, data=df, panel = function(x, y, ...) { panel.lines(x, lo, lty=2, col=cl[3]) panel.lines(x, med, lty=2, col=cl[2]) panel.lines(x, hi, lty=2, col=cl[3]) panel.xyplot(x, y, ...) }, ...) } vegan/R/plot.radline.R0000644000176200001440000000062010667741210014273 0ustar liggesusers"plot.radline" <- function (x, xlab = "Rank", ylab = "Abundance", type = "b", ...) { rad <- x$y fit <- fitted(x) rnk <- seq(along = rad) plot(rnk, rad, log = "y", xlab = xlab, ylab = ylab, type = "n", ...) out <- NULL if (type == "b" || type == "p") out <- points(x, ...) if (type == "b" || type == "l") lines(x, ...) invisible(out) } vegan/R/plot.radfit.frame.R0000644000176200001440000000477311071152507015227 0ustar liggesusers"plot.radfit.frame" <- function (x, order.by, BIC = FALSE, model, legend = TRUE, as.table = TRUE, ...) { require(lattice) modnam <- names(x[[1]]$models) if (!missing(model)) pick <- pmatch(model, modnam, nomatch = FALSE) else pick <- FALSE pickmod <- function(x, pick, BIC) { if (pick) return(pick) else { k <- if (BIC) log(length(x$y)) else 2 which.min(AIC(x, k)) } } Nhm <- length(x) Abundance <- unlist(lapply(x, function(x) x$y)) Rank <- unlist(lapply(x, function(x) if (length(x$y) > 0) 1:length(x$y) else NULL)) Site <- unlist(lapply(x, function(x) length(x$y))) N <- Site sitenames <- names(Site) Site <- rep(names(Site), Site) if (missing(order.by)) order.by <- 1:Nhm else order.by <- order(order.by) Site <- factor(Site, levels = sitenames[order.by]) fit <- unlist(lapply(x, function(x) as.matrix(fitted(x))[, pickmod(x, pick, BIC)])) take <- sapply(x, function(x) pickmod(x, pick, BIC)) take <- rep(take, N) cols <- trellis.par.get("superpose.line")$col cols <- cols[1:length(cols)] if (legend) { mykey <- list(text = list(text = modnam), lines = list(lty = 1, col = cols[1:length(modnam)], lwd = 2), columns = 3) } else { mykey <- NULL } tics <- function(x = max(Abundance), z = min(Abundance)) { ii <- round(c(log10(z), log10(x))) x10 <- 10^(ii[1]:ii[2]) if (length(x10) < 3) x10 <- c(outer(c(1, 2, 5), x10)) else if (length(x10) < 6) x10 <- c(outer(c(1, 3), x10)) x10[x10 <= x & x10 >= z] } out <- xyplot(Abundance ~ Rank | Site, subscripts = TRUE, as.table = as.table, key = mykey, scales = list(y = list(log = 10, at = tics())), panel = function(x, y, subscripts) { panel.xyplot(x, y, ...) panel.xyplot(x, log10(fit[subscripts]), type = "l", col = cols[take[min(subscripts)]], lwd = 2, ...) }, ...) out } vegan/R/plot.radfit.R0000644000176200001440000000141312031100300014077 0ustar liggesusers`plot.radfit` <- function (x, BIC = FALSE, legend = TRUE, ...) { if (length(x$y) == 0) stop("No species, nothing to plot") ## if 'type = "n"', do not add legend (other types are not ## supported) type <- match.call(expand.dots = FALSE)$...$type if (is.null(type)) type <- "" out <- plot(x$y, ...) if (length(x$y) == 1) return(invisible(out)) fv <- fitted(x) if (BIC) k = log(length(x$y)) else k = 2 emph <- which.min(sapply(x$models, AIC, k = k)) lwd <- rep(1, ncol(fv)) lwd[emph] <- 3 matlines(fv, lty = 1, lwd = lwd, ...) if (legend && type != "n") { nm <- names(x$models) legend("topright", legend = nm, lty = 1, lwd = lwd, col = 1:6) } invisible(out) } vegan/R/plot.rad.R0000644000176200001440000000036711115726064013432 0ustar liggesusers"plot.rad" <- function(x, xlab="Rank", ylab="Abundance", log = "y", ...) { rnk <- seq(along=x) plot(rnk, x, log=log, xlab=xlab, ylab=ylab, ...) out <- list(species = cbind(rnk, x)) class(out) <- "ordiplot" invisible(out) } vegan/R/plot.profile.fisherfit.R0000644000176200001440000000064110667741210016302 0ustar liggesusers`plot.profile.fisherfit` <- function (x, type = "l", ...) { tmp <- attr(x, "original.fit") est <- tmp$coefficients se <- tmp$std.err alpha <- x$alpha[, 1] tau <- x$alpha[, 2] sp <- spline(tau, alpha) plot(sp$x, sp$y, type = type, xlab = "alpha", ylab = "tau", ...) abline(-est/se, 1/se, lty = 2) abline(v = est, lty = 3) abline(h = 0, lty = 3) invisible() } vegan/R/plot.procrustes.R0000644000176200001440000000556212036544727015106 0ustar liggesusers"plot.procrustes" <- function (x, kind = 1, choices = c(1,2), to.target = TRUE, type = "p", xlab, ylab, main, ar.col = "blue", len = 0.05, cex = 0.7, ...) { type <- match.arg(type, c("points", "text", "none")) if (to.target) { tails <- x$Yrot[, choices] heads <- x$X[, choices] } else { tails <- x$X[, choices] heads <- x$Yrot[, choices] } if (missing(main)) main <- "Procrustes errors" if (kind <= 1) { formals(arrows) <- c(formals(arrows), alist(... = )) if (missing(xlab)) xlab <- paste("Dimension", choices[1]) if (missing(ylab)) ylab <- paste("Dimension", choices[2]) xrange <- range(tails[, 1], heads[, 1]) yrange <- range(tails[, 2], heads[, 2]) plot(xrange, yrange, xlab = xlab, ylab = ylab, main = main, type = "n", asp = 1, ...) if (kind > 0) { abline(v = 0, lty = 2) abline(h = 0, lty = 2) if (ncol(x$rotation) == 2) { ## Draw rotated axes only if they visibly differ from ## unrotated axes b <- abs(x$rotation[1,1]) EPS <- 1e-8 if (1 - b > EPS && b > EPS) { rot <- x$rotation abline(0, rot[1,2]/rot[1,1], lty = 1) abline(0, rot[2,2]/rot[2,1], lty = 1) } else { abline(v = 0, h = 0) } } else { Y <- x$Yrot %*% t(x$rotation) for (k in 1:ncol(Y)) { tmp <- matrix(0, nrow=2, ncol = ncol(Y)) tmp[,k] <- range(Y[,k]) tmp <- tmp %*% x$rotation lines(tmp[,choices], lty=1) text(tmp[2,choices[1]], tmp[2,choices[2]], as.character(k)) } } if (type != "none") { ow <- options(warn = -1) arrows(tails[, 1], tails[, 2], heads[, 1], heads[, 2], col = ar.col, len = len, ...) options(ow) if (type == "text" && !is.null(rownames(tails))) ordilabel(tails, cex = cex, ...) else points(tails, cex = cex, ...) } } out <- list(heads = heads, points = tails) class(out) <- "ordiplot" } else if (kind == 2) { if (missing(xlab)) xlab <- "Index" if (missing(ylab)) ylab <- "Procrustes residual" res <- residuals(x) q <- quantile(res) plot(res, type = "h", xlab = xlab, ylab = ylab, main = main, ...) abline(h = q[2:4], lty = c(2, 1, 2)) out <- list(sites = cbind(seq(along = res), res)) class(out) <- "ordiplot" } invisible(out) } vegan/R/plot.prestonfit.R0000644000176200001440000000157310667741210015062 0ustar liggesusers"plot.prestonfit" <- function (x, xlab = "Frequency", ylab = "Species", bar.col = "skyblue", line.col = "red", lwd = 2, ...) { freq <- x$freq oct <- as.numeric(names(freq)) noct <- max(oct) + 1 plot(oct, freq, type = "n", ylim = c(0, max(freq)), xlim = c(-1, max(oct)), ylab = ylab, xlab = xlab, axes = FALSE, ...) axis(2) axis(1, at = 0:noct, labels = 2^(0:noct)) box() rect(oct - 1, 0, oct, freq, col = bar.col, ...) p <- x$coefficients curve(p[3] * exp(-(x - p[1])^2/2/p[2]^2), -1, max(oct), add = TRUE, col = line.col, lwd = lwd, ...) segments(p["mode"], 0, p["mode"], p["S0"], col = line.col, ...) segments(p["mode"] - p["width"], p["S0"] * exp(-0.5), p["mode"] + p["width"], p["S0"] * exp(-0.5), col = line.col, ...) invisible() } vegan/R/plot.preston.R0000644000176200001440000000305511644641440014354 0ustar liggesusers### Similar plotting functions as plot.prestonfit/fisherfit, but only ### for the data without the fitted models. These can be used with the ### result of as.preston(), as.fisher(). ## as plot.prestonfit, but plots only the bars of as.preston() `plot.preston` <- function (x, xlab = "Frequency", ylab = "Species", bar.col = "skyblue", ...) { freq <- x oct <- as.numeric(names(freq)) noct <- max(oct) + 1 plot(oct, freq, type = "n", ylim = c(0, max(freq)), xlim = c(-1, max(oct)), ylab = ylab, xlab = xlab, axes = FALSE, ...) axis(2) axis(1, at = 0:noct, labels = 2^(0:noct)) box() rect(oct - 1, 0, oct, freq, col = bar.col, ...) invisible() } `lines.preston` <- function(x, xadjust = 0.5, ...) { oct <- as.numeric(names(x)) - xadjust lines(oct, x, ...) } ## as plot.fisherfit, but plots only the bars of as.fisherfit `plot.fisher` <- function(x, xlab = "Frequency", ylab = "Species", bar.col = "skyblue", kind = c("bar", "hiplot", "points", "lines"), add = FALSE, ...) { kind <- match.arg(kind) freq <- as.numeric(names(x)) if (!add) plot(freq, x, ylab=ylab, xlab=xlab, ylim=c(0,max(x)), xlim=c(0.5, max(freq)+0.5), type="n", ...) switch(kind, "bar" = rect(freq-0.5,0,freq+0.5,x, col=bar.col, ...), "hiplot" = points(freq, x, col =bar.col, type = "h", ...), "points" = points(freq, x, col =bar.col, ...), "lines" = lines(freq, x, col =bar.col, ...) ) invisible() } vegan/R/plot.prc.R0000644000176200001440000000356511760220402013442 0ustar liggesusers`plot.prc` <- function (x, species = TRUE, select, scaling = 3, axis = 1, type = "l", xlab, ylab, ylim, lty = 1:5, col = 1:6, pch, legpos, cex = 0.8, ...) { ## save level names before getting the summary levs <- x$terminfo$xlev[[2]] x <- summary(x, scaling = scaling, axis = axis) oldpar <- par(no.readonly = TRUE) on.exit(par(oldpar)) b <- t(coef(x)) xax <- rownames(b) if (missing(xlab)) xlab <- x$names[1] if (missing(ylab)) ylab <- "Effect" if (!missing(select)) x$sp <- .checkSelect(select, x$sp) if (missing(ylim)) ylim <- if (species) range(b, x$sp, na.rm = TRUE) else range(b, na.rm = TRUE) if (species) { op <- par("mai") mrg <- max(strwidth(names(x$sp), cex = cex, units = "in")) + strwidth("mmm", cex = cex, units = "in") par(mai = c(op[1:3], max(op[4], mrg))) } if (missing(pch)) pch <- as.character(1:nrow(b)) matplot(xax, b, type = type, xlab = xlab, ylab = ylab, ylim = ylim, cex = cex, lty = lty, col = col, pch = pch, ...) abline(h = 0, col = "gray") if (species) { linestack(x$sp, at = par("usr")[2], add = TRUE, hoff = 1, cex = cex, ...) rug(x$sp, side = 4) } if (missing(legpos)) { holes <- abs(par("usr")[3:4] - range(b, na.rm = TRUE)) if (holes[1] > holes[2]) legpos <- "bottomleft" else legpos <- "topleft" } if (!is.na(legpos)) { nl <- length(levs) pp <- type %in% c("b", "p") pl <- type %in% c("b", "l") if (length(lty) == 1) lty <- rep(lty, nl-1) legend(legpos, legend = levs, col = c("gray", col), lty = if (pl) lty[c(1,1:(nl-1))], pch = if (pp) pch, cex = cex, title = x$names[2]) } invisible() } vegan/R/plot.poolaccum.R0000644000176200001440000000124511240563424014640 0ustar liggesusers`plot.poolaccum` <- function(x, alpha = 0.05, type = c("l","g"), ...) { require(lattice) || stop("Needs package 'lattice'") m <- summary(x, alpha = alpha, ...) n <- nrow(m[[1]]) Size <- as.vector(sapply(m, function(x) c(x[,1], x[,1], rev(x[,1])))) Richness <- as.vector(sapply(m, function(x) c(x[,2], x[,3], rev(x[,4]))) ) indnames <- as.character(sapply(m, function(x) colnames(x[,2, drop=FALSE]))) Index <- factor(rep(indnames, each = 3 * n), levels = indnames) lintype <- rep(c(rep("aver", n), rep("envel", 2*n)), length=length(Size)) xyplot(Richness ~ Size | Index, as.table = TRUE, groups = lintype, type = type, ...) } vegan/R/plot.permat.R0000644000176200001440000000212411136254166014147 0ustar liggesusers## S3 plot method for permat `plot.permat` <- function(x, type = "bray", ylab, xlab, col, lty, lowess=TRUE, plot=TRUE, text=TRUE, ...) { type <- match.arg(type, c("bray", "chisq")) if (missing(xlab)) xlab <- "Runs" if (missing(col)) col <- c(2,4) if (missing(lty)) lty <- c(1,2) n <- attr(x, "times") toplot <- numeric(n) if (type == "bray") { toplot <- summary(x)$bray if (missing(ylab)) ylab <- "Bray-Curtis dissimilarity" } if (type == "chisq") { toplot <- summary(x)$chisq if (missing(ylab)) ylab <- "Chi-squared" } if (plot) { plot(toplot,type="n",ylab=ylab,xlab=xlab, ...) lines(toplot,col=col[1], lty=lty[1]) if (lowess) lines(lowess(toplot),col=col[2], lty=lty[2]) if (text) title(sub=paste("(mean = ", substitute(z, list(z=round(mean(toplot),3))), ", min = ", substitute(z, list(z=round(min(toplot),3))), ", max = ", substitute(z, list(z=round(max(toplot),3))), ")", sep="")) } invisible(toplot) } vegan/R/plot.orditkplot.R0000644000176200001440000000066611067134366015065 0ustar liggesusers`plot.orditkplot` <- function(x, ...) { op <- par(x$par) on.exit(par(op)) plot(x$points, pch = x$args$pch, cex = x$args$pcex, col = x$args$pcol, bg = x$args$pbg, xlim = x$args$xlim, ylim = x$args$ylim, asp=1) font <- attr(x$labels, "font") if (is.null(font)) font <- par("font") text(x$labels, rownames(x$labels), cex = x$args$tcex, col = x$args$tcol, font = font) invisible(x) } vegan/R/plot.ordisurf.R0000644000176200001440000000230311540226023014501 0ustar liggesusers`plot.ordisurf` <- function(x, what = c("contour","persp","gam"), add = FALSE, bubble = FALSE, col = "red", cex = 1, nlevels = 10, levels, labcex = 0.6, ...) { what <- match.arg(what) y <- x$model$y x1 <- x$model$x1 x2 <- x$model$x2 X <- x$grid$x Y <- x$grid$y Z <- x$grid$z force(col) force(cex) if(isTRUE(all.equal(what, "contour"))) { if(!add) { if(bubble) { if (is.numeric(bubble)) cex <- bubble cex <- (y - min(y))/diff(range(y)) * (cex-0.4) + 0.4 } plot(x1, x2, asp = 1, cex = cex, ...) } if (missing(levels)) levels <- pretty(range(x$grid$z, finite = TRUE), nlevels) contour(X, Y, Z, col = col, add = TRUE, levels = levels, labcex = labcex, drawlabels = !is.null(labcex) && labcex > 0) } else if(isTRUE(all.equal(what, "persp"))) { persp(X, Y, Z, col = col, cex = cex, ...) } else { class(x) <- class(x)[-1] plot(x, ...) ##col = col, cex = cex, ...) class(x) <- c("ordisurf", class(x)) } invisible(x) } vegan/R/plot.nestedtemp.R0000644000176200001440000000267312062575412015037 0ustar liggesusers### plot() methods for those nested* functions that return sufficient ### data to draw a plot. We display a plot using image() with coloured ### rectangles for occurrences or colours dependent on the ### contribution to the nestedness when appropriate. `plot.nestedtemp` <- function (x, kind = c("temperature", "incidence"), col = rev(heat.colors(100)), names = FALSE, ...) { kind <- match.arg(kind) if (kind == "temperature") z <- x$u else z <- x$comm z <- t(z[nrow(z):1, ]) image(z, axes = FALSE, col = col, ...) box() lines(x$smooth$x, 1 - x$smooth$y) if (length(names) == 1) names <- rep(names, 2) if (names[1]) { axis(2, at = seq(1, 0, len = nrow(x$u)), labels = rownames(x$u), las = 2, ...) } if (names[2]) { axis(3, at = seq(0, 1, len = ncol(x$u)), labels = colnames(x$u), las = 2, ...) } } `plot.nestednodf` <- function(x, col = "red", names = FALSE, ...) { z <- x$comm z <- t(z[nrow(z):1,]) if (length(col) == 1) col <- c(NA, col) image(z, axes = FALSE, col = col, ...) box() if (length(names) == 1) names <- rep(names, 2) if (names[1]) { axis(2, at = seq(1, 0, len = ncol(z)), labels = rev(colnames(z)), las = 2, ...) } if (names[2]) { axis(3, at = seq(0, 1, len = nrow(z)), labels = rownames(z), las = 2, ...) } } vegan/R/plot.metaMDS.R0000644000176200001440000000064211547103613014150 0ustar liggesusers"plot.metaMDS" <- function (x, display = c("sites","species"), choices = c(1, 2), type = "p", shrink = FALSE, ...) { if (length(display) == 1) display <- match.arg(display) if (shrink) { x$species <- scores(x, display = "species", shrink = shrink, choices=1:x$ndim) } ordiplot(x, choices = choices, type = type, display = display, ...) } vegan/R/plot.meandist.R0000644000176200001440000000253311257055167014473 0ustar liggesusers`plot.meandist` <- function(x, kind = c("dendrogram", "histogram"), cluster = "average", ylim, axes = TRUE, ...) { kind <- match.arg(kind) n <- attr(x, "n") if (kind == "dendrogram") { cl <- hclust(as.dist(x), method = cluster, members = n) cl <- as.dendrogram(cl, hang = 0) w <- diag(x)[labels(cl)] tr <- unlist(dendrapply(cl, function(n) attr(n, "height"))) root <- attr(cl, "height") if (missing(ylim)) ylim <- range(c(w, tr, root), na.rm = TRUE) plot(cl, ylim = ylim, leaflab = "none", axes = axes, ...) for (i in 1:length(w)) segments(i, tr[i], i, w[i]) pos <- ifelse(w < tr, 1, 3) pos[is.na(pos)] <- 1 w[is.na(w)] <- tr[is.na(w)] text(1:length(w), w, labels = labels(cl), pos = pos, srt = 0) } else { w <- diag(x) tr <- rep(summary(x)$B, length(w)) if (missing(ylim)) ylim <- range(c(w, tr), na.rm = TRUE) plot(1:length(w), tr, ylim = ylim, axes = FALSE, xlab = "", ylab = "", type = "l", ...) if (axes) axis(2, ...) for (i in 1:length(w)) segments(i, tr, i, w[i]) pos <- ifelse(w < tr, 1, 3) pos[is.na(pos)] <- 1 text(1:length(w), w, labels = names(n), pos = pos, srt = 0, xpd = TRUE, ...) } } vegan/R/plot.mantel.correlog.R0000644000176200001440000000116011244275560015752 0ustar liggesusers`plot.mantel.correlog` <- function(x, alpha=0.05, ...) { lim <- max(x$n.tests) plot(x$mantel.res[1:lim,1],x$mantel.res[1:lim,3], xlab="Distance class index", ylab="Mantel correlation", pch=22) if(x$mult == "none") { signif <- which((x$mantel.res[1:lim,4] <= alpha)) } else { signif <- which((x$mantel.res[1:lim,5] <= alpha)) } lines(x$mantel.res[1:lim,1], x$mantel.res[1:lim,3]) points(x$mantel.res[1:lim,1], x$mantel.res[1:lim,3], pch=22, bg="white") points(x$mantel.res[signif,1], x$mantel.res[signif,3], pch=22, bg="black") abline(a=0, b=0, col="red") invisible() } vegan/R/plot.isomap.R0000644000176200001440000000111111622660213014134 0ustar liggesusers`plot.isomap` <- function (x, net = TRUE, n.col = "gray", type = "points", ...) { type <- match.arg(type, c("points", "text", "none")) if (!net) { pl <- ordiplot(x, display="sites", type = type, ...) } else { pl <- ordiplot(x, display = "sites", type = "none", ...) z <- scores(pl, "sites") k <- x$net segments(z[k[,1],1], z[k[,1],2], z[k[,2],1], z[k[,2],2], col=n.col) if (type == "points") points(pl, "sites", ...) else if (type == "text") ordilabel(pl, ...) } invisible(pl) } vegan/R/plot.humpfit.R0000644000176200001440000000056110667741210014335 0ustar liggesusers"plot.humpfit" <- function(x, xlab="Biomass", ylab="Species Richness", lwd=2, l.col="blue", p.col = 1, type="b", ...) { plot(x$x, x$y, xlab = xlab, ylab = ylab, type="n", ...) if (type == "b" || type == "p") points(x, col = p.col, ...) if (type == "b" || type == "l") lines(x, lwd = lwd, col = l.col, ...) invisible() } vegan/R/plot.fisherfit.R0000644000176200001440000000076210667741210014647 0ustar liggesusers"plot.fisherfit" <- function(x, xlab = "Frequency", ylab = "Species", bar.col = "skyblue", line.col= "red", lwd=2, ...) { freq <- as.numeric(names(x$fisher)) plot(freq, x$fisher, ylab=ylab, xlab=xlab, ylim=c(0,max(x$fisher)), xlim=c(0.5, max(freq)+0.5), type="n", ...) rect(freq-0.5,0,freq+0.5,x$fisher, col=bar.col, ...) alpha <- x$estimate k <- x$nuisance curve(alpha*k^x/x, 1, max(freq), col=line.col, lwd=lwd, add=TRUE, ...) invisible() } vegan/R/plot.envfit.R0000644000176200001440000001240112014462227014144 0ustar liggesusers`plot.envfit` <- function (x, choices = c(1, 2), labels, arrow.mul, at = c(0, 0), axis = FALSE, p.max = NULL, col = "blue", bg, add = TRUE, ...) { formals(arrows) <- c(formals(arrows), alist(... = )) ## get labels labs <- list("v" = rownames(x$vectors$arrows), "f" = rownames(x$factors$centroids)) ## Change labels if user so wishes if (!missing(labels)) { ## input list of "vectors" and/or "factors" if (is.list(labels)) { if (!is.null(labs$v) && !is.null(labels$vectors)) labs$v <- labels$vectors if (!is.null(labs$f) && !is.null(labels$factors)) labs$f <- labels$factors } else { ## input vector: either vectors or factors must be NULL, ## and the existing set of labels is replaced if (!is.null(labs$v) && !is.null(labs$f)) stop("needs a list with both 'vectors' and 'factors' labels") if (!is.null(labs$v)) labs$v <- labels else labs$f <- labels } } vect <- NULL if (!is.null(p.max)) { if (!is.null(x$vectors)) { take <- x$vectors$pvals <= p.max x$vectors$arrows <- x$vectors$arrows[take, , drop = FALSE] labs$v <- labs$v[take] x$vectors$r <- x$vectors$r[take] if (nrow(x$vectors$arrows) == 0) x$vectors <- vect <- NULL } if (!is.null(x$factors)) { tmp <- x$factors$pvals <= p.max nam <- names(tmp)[tmp] take <- x$factors$var.id %in% nam x$factors$centroids <- x$factors$centroids[take, , drop = FALSE] labs$f <- labs$f[take] if (nrow(x$factors$centroids) == 0) x$factors <- NULL } } if (!is.null(x$vectors)) { vect <- sqrt(x$vectors$r) * x$vectors$arrows[, choices, drop = FALSE] if (missing(arrow.mul)) { if(!add) arrow.mul <- 1 else arrow.mul <- ordiArrowMul(vect, at = at) } if (axis) { maxarr <- round(sqrt(max(x$vectors$r)), 1) ax <- -c(-1, 0, 1) * arrow.mul * maxarr } vect <- arrow.mul * vect vtext <- sweep(1.1 * vect, 2, at, "+") vect <- sweep(vect, 2, at, "+") } if (!add) { plot.new() ## needed for string widths and heights if(!is.null(vect)) { ## compute axis limits allowing space for labels sw <- strwidth(labs$v, ...) sh <- strheight(labs$v, ...) xlim <- range(at[1], vtext[,1] + sw, vtext[,1] - sw) ylim <- range(at[2], vtext[,2] + sh, vtext[,2] - sh) if(!is.null(x$factors)) { ## if factors, also need to consider them sw <- strwidth(labs$f, ...) sh <- strheight(labs$f, ...) xlim <- range(xlim, x$factors$centroids[, choices[1]] + sw, x$factors$centroids[, choices[1]] - sw) ylim <- range(ylim, x$factors$centroids[, choices[2]] + sh, x$factors$centroids[, choices[2]] - sh) } ## these plotting calls will prob. generate warnings ## because of passing ... everywhere. localFoo needed? plot.window(xlim = xlim, ylim = ylim, asp = 1, ...) axis(side = 1, ...) axis(side = 2, ...) box(...) alabs <- colnames(vect) title(..., ylab = alabs[2], xlab = alabs[1]) } else if (!is.null(x$factors)) { sw <- strwidth(labs$f, ...) sh <- strheight(labs$f, ...) xlim <- range(at[1], x$factors$centroids[, choices[1]] + sw, x$factors$centroids[, choices[1]] - sw) ylim <- range(at[2], x$factors$centroids[, choices[2]] + sh, x$factors$centroids[, choices[2]] - sh) ## these plotting calls will prob. generate warnings ## because of passing ... everywhere. localFoo needed? plot.window(xlim = xlim, ylim = ylim, asp = 1, ...) axis(side = 1, ...) axis(side = 2, ...) box(...) alabs <- colnames(x$factors$centroids[, choices, drop = FALSE]) title(..., ylab = alabs[2], xlab = alabs[1]) } else stop("Nothing to plot") } if (!is.null(vect)) { arrows(at[1], at[2], vect[, 1], vect[, 2], len = 0.05, col = col) if (missing(bg)) text(vtext, labs$v, col = col, ...) else ordilabel(vtext, labels = labs$v, col = col, fill = bg, ...) } if (!is.null(x$factors)) { if (missing(bg)) text(x$factors$centroids[, choices, drop = FALSE], labs$f, col = col, ...) else ordilabel(x$factors$centroids[, choices, drop = FALSE], labels = labs$f, col = col, fill = bg, ...) } if (axis && !is.null(vect)) { axis(3, at = ax + at[1], labels = c(maxarr, 0, maxarr), col = col) axis(4, at = ax + at[2], labels = c(maxarr, 0, maxarr), col = col) } invisible() } vegan/R/plot.decorana.R0000644000176200001440000000524111446412064014433 0ustar liggesusers"plot.decorana" <- function (x, choices = c(1, 2), origin = TRUE, display = c("both", "sites", "species", "none"), cex = 0.8, cols = c(1, 2), type, xlim, ylim, ...) { display <- match.arg(display) sites <- x$rproj specs <- x$cproj if (missing(type)) { nitlimit <- 120 nit <- 0 if (display == "sites" || display == "both") nit <- nit + nrow(sites) if (display == "species" || display == "both") nit <- nit + nrow(specs) if (nit > nitlimit) type <- "points" else type <- "text" } else type <- match.arg(type, c("text", "points", "none")) if (origin) { sites <- sweep(x$rproj, 2, x$origin, "-") specs <- sweep(x$cproj, 2, x$origin, "-") } sitnam <- rownames(x$rproj) spenam <- rownames(x$cproj) sites <- sites[, choices] specs <- specs[, choices] ## Use linestack if only one dim was specified (and exit) if (NCOL(sites) == 1 && NCOL(specs) == 1) { pl <- linestack(sites, ylim = range(c(sites, specs), na.rm = TRUE), ...) linestack(specs, side = "left", add = TRUE, ...) return(invisible(pl)) } sp.x <- range(specs[, 1]) sp.y <- range(specs[, 2]) st.x <- range(sites[, 1]) st.y <- range(sites[, 2]) switch(display, both = { if (missing(xlim)) xlim <- range(sp.x, st.x) if (missing(ylim)) ylim <- range(sp.y, st.y) }, sites = { if (missing(xlim)) xlim <- st.x if (missing(ylim)) ylim <- st.y }, species = { if (missing(xlim)) xlim <- sp.x if (missing(ylim)) ylim <- sp.y }, none = { if (missing(xlim)) xlim <- range(sp.x, st.x) if (missing(ylim)) ylim <- range(sp.y, st.y) }) plot(sites, type = "n", xlim = xlim, ylim = ylim, asp = 1, ...) if (origin) { abline(h = 0, lty = 3) abline(v = 0, lty = 3) } else { abline(h = x$origin[choices[2]], lty = 3) abline(v = x$origin[choices[1]], lty = 3) } if (type != "none" && (display == "both" || display == "sites")) { if (type == "text" && !is.null(sitnam)) text(sites, sitnam, cex = cex, col = cols[1]) else points(sites, cex = cex, col = cols[1]) } if (type != "none" && (display == "both" || display == "species")) { if (type == "text" && !is.null(spenam)) text(specs, spenam, cex = cex, col = cols[2]) else points(specs, pch = "+", cex = cex, col = cols[2]) } out <- list(sites = sites, species = specs) class(out) <- "ordiplot" invisible(out) } vegan/R/plot.contribdiv.R0000644000176200001440000000142411544631764015032 0ustar liggesusersplot.contribdiv <- function(x, sub, xlab, ylab, ylim, col, ...) { y <- x[,c(1,3)] if (missing(ylab)) ylab <- paste("Diversity components (", attr(x, "index"), ")", sep = "") if (missing(xlab)) xlab <- "Sites" if (missing(sub)) sub <- paste("Differentiation coefficient = ", round(attr(x, "diff.coef"),3), sep = "") if (missing(ylim)) ylim <- c(0, max(y)) if (missing(col)) col <- c("lightgrey", "darkgrey") matplot(y, type = "n", sub=sub, xlab=xlab, ylab=ylab, axes = FALSE, bty = "n", ...) polygon(c(1,1:nrow(y),nrow(y)), c(0,y$gamma,0), col=col[1]) polygon(c(1,1:nrow(y),nrow(y)), c(0,y$alpha,0), col=col[2]) axis(side = 1) axis(side = 2) box() invisible(x) } vegan/R/plot.clamtest.R0000644000176200001440000000265111640347042014474 0ustar liggesusersplot.clamtest <- function(x, xlab, ylab, main, pch=21:24, col.points=1:4, col.lines=2:4, lty=1:3, position="bottomright", ...) { summ <- summary(x) glabel <- summ$labels if (missing(main)) main <- "Species Classification" if (missing(xlab)) xlab <- paste(glabel[2], "(abundance + 1)") if (missing(ylab)) ylab <- paste(glabel[1], "(abundance + 1)") Y <- x[,2] X <- x[,3] minval <- summ$minv ## plot the dots rr <- range(X+1,Y+1) plot(X+1, Y+1, log = "xy", xaxt = "n", yaxt = "n", col=col.points[as.integer(x$Classes)], pch=pch[as.integer(x$Classes)], xlab=xlab, ylab=ylab, main=main, xlim=rr, ylim=rr, ...) axis(1, c(1,10,100,1000,10000)) axis(2, c(1,10,100,1000,10000)) ## too rare threshold Ymin <- minval[[1]][1,2] Xmin <- minval[[2]][1,1] lines(rep(Xmin, 2)+1, c(0, 1)+1, col=col.lines[1], lty=lty[1]) lines(c(0, 1)+1, rep(Ymin, 2)+1, col=col.lines[1], lty=lty[1]) tmp <- approx(c(Xmin, 1), c(1, Ymin)) lines(tmp$x+1, tmp$y+1, col=col.lines[1], lty=lty[1]) ## Y vs. gen threshold lines(minval[[1]]+1, col=col.lines[2], lty=lty[2]) ## X vs. gen threshold lines(minval[[2]]+1, col=col.lines[3], lty=lty[3]) if (!is.null(position)) legend(position, col=col.points, pch=pch, legend=rownames(summ$summary)) invisible(x) } vegan/R/plot.cca.R0000644000176200001440000001061111701773035013404 0ustar liggesusers`plot.cca` <- function (x, choices = c(1, 2), display = c("sp", "wa", "cn"), scaling = 2, type, xlim, ylim, const, ...) { TYPES <- c("text", "points", "none") g <- scores(x, choices, display, scaling, const) if (length(g) == 0 || all(is.na(g))) stop("nothing to plot: requested scores do not exist") if (!is.list(g)) g <- list(default = g) ## Take care that there are names for (i in seq_len(length(g))) { if (length(dim(g[[i]])) > 1) rownames(g[[i]]) <- rownames(g[[i]], do.NULL = FALSE, prefix = substr(names(g)[i], 1, 3)) } if (!is.null(g$centroids)) { if (is.null(g$biplot)) g$biplot <- scores(x, choices, "bp", scaling) if (!is.na(g$centroids)[1]) { bipnam <- rownames(g$biplot) cntnam <- rownames(g$centroids) g$biplot <- g$biplot[!(bipnam %in% cntnam), , drop = FALSE] if (nrow(g$biplot) == 0) g$biplot <- NULL } } if (missing(type)) { nitlimit <- 80 nit <- max(nrow(g$spe), nrow(g$sit), nrow(g$con), nrow(g$def)) if (nit > nitlimit) type <- "points" else type <- "text" } else type <- match.arg(type, TYPES) ## use linestack (and exit) if only one axis was chosen, and ## display includes row or column scores if (length(choices) == 1) { ## Only one set of scores: plot them if (length(g) == 1) pl <- linestack(g[[1]], ...) ## The order of scores is species, sites, constraints, biplot, ## centroids: plot two first in this order, but species scores ## on the left else { hasSpec <- names(g)[1] == "species" ylim <- range(c(g[[1]], g[[2]]), na.rm = TRUE) pl <- linestack(g[[1]], ylim = ylim, side = ifelse(hasSpec, "left", "right"), ...) linestack(g[[2]], ylim = ylim, side = ifelse(hasSpec, "right","left"), add = TRUE, ...) } return(invisible(pl)) } if (missing(xlim)) xlim <- range(g$spe[, 1], g$sit[, 1], g$con[, 1], g$default[,1], na.rm = TRUE) if (!any(is.finite(xlim))) stop("no finite scores to plot") if (missing(ylim)) ylim <- range(g$spe[, 2], g$sit[, 2], g$con[, 2], g$default[,2], na.rm = TRUE) plot(g[[1]], xlim = xlim, ylim = ylim, type = "n", asp = 1, ...) abline(h = 0, lty = 3) abline(v = 0, lty = 3) if (!is.null(g$species)) { if (type == "text") text(g$species, rownames(g$species), col = "red", cex = 0.7) else if (type == "points") points(g$species, pch = "+", col = "red", cex = 0.7) } if (!is.null(g$sites)) { if (type == "text") text(g$sites, rownames(g$sites), cex = 0.7) else if (type == "points") points(g$sites, pch = 1, cex = 0.7) } if (!is.null(g$constraints)) { if (type == "text") text(g$constraints, rownames(g$constraints), cex = 0.7, col = "darkgreen") else if (type == "points") points(g$constraints, pch = 2, cex = 0.7, col = "darkgreen") } if (!is.null(g$biplot) && nrow(g$biplot) > 0 && type != "none") { if (length(display) > 1) { mul <- ordiArrowMul(g$biplot) } else mul <- 1 attr(g$biplot, "arrow.mul") <- mul arrows(0, 0, mul * g$biplot[, 1], mul * g$biplot[, 2], length = 0.05, col = "blue") text(1.1 * mul * g$biplot, rownames(g$biplot), col = "blue") axis(3, at = c(-mul, 0, mul), labels = rep("", 3), col = "blue") axis(4, at = c(-mul, 0, mul), labels = c(-1, 0, 1), col = "blue") } if (!is.null(g$centroids) && !is.na(g$centroids) && type != "none") { if (type == "text") text(g$centroids, rownames(g$centroids), col = "blue") else if (type == "points") points(g$centroids, pch = "x", col = "blue") } if (!is.null(g$default) && type != "none") { if (type == "text") text(g$default, rownames(g$default), cex = 0.7) else if (type == "points") points(g$default, pch = 1, cex = 0.7) } class(g) <- "ordiplot" invisible(g) } vegan/R/plot.cascadeKM.R0000644000176200001440000001030111521606164014463 0ustar liggesusers`plot.cascadeKM` <- function (x, min.g, max.g, grpmts.plot = TRUE, sortg = FALSE, gridcol = NA, ...) { wrapres <- x number <- (as.numeric(gsub(" groups", "", colnames(wrapres$results)))) if (missing(min.g)) min.g <- min(number) if (missing(max.g)) max.g <- max(number) if (min.g < 2) min.g = 2 c.min <- which(number == min.g) c.max <- which(number == max.g) if (length(c.min) == 0) { stop("min.g value given has not been calculated by 'cascadeKM'\n") } if (length(c.max) == 0) { stop("max.g value given has not been calculated by 'cascadeKM'\n") } x <- wrapres$partition[, c.min:c.max] w <- wrapres$results[2, c.min:c.max] criterion <- wrapres$criterion x <- pregraphKM(x) if (sortg) { x <- orderingKM(x) } main = (paste("K-means partitions comparison")) xlab = ("Number of groups in each partition") ylab = ("Objects") nc = ncol(x) colo <- (rainbow(max.g + 1)) if (grpmts.plot) { def.par <- par(no.readonly = TRUE) nf <- layout(matrix(c(1, 2), 1, 2), widths = c(3, 1), TRUE) par(mar = c(5, 5, 5, 1), bg = "white", col = "black") image(1:nrow(x), 1:nc, x, col = colo, yaxt = "n", frame.plot = TRUE, main = main, xlab = ylab, ylab = xlab, bg = NA) grid(nx = nrow(x), ny = max.g - min.g + 1, col = gridcol) box() axis(2, seq(min.g - min.g + 1, max.g - min.g + 1, by = 1), labels = seq(min.g, max.g, by = 1)) axis(1) par(mar = c(5, 2, 5, 1)) par(bg = "white", fg = "black", col = "black") plot(y = min.g:max.g, x = w[1:nc], type = "b", main = paste(criterion, "\ncriterion", sep = ""), ylab = "", ylim = c(min.g - 0.5, max.g + 0.5), yaxs = "i", yaxt = "n", xlab = "Values") grid(nx = NULL, ny = max.g - min.g + 1, col = gridcol) box() axis(2, seq(min.g, max.g, by = 1), labels = seq(min.g, max.g, by = 1), col.axis = "black") axis(1) maxx = which.max(w[]) minx = which.min(w[]) tops <- which(w[c(2:nc)] - w[c(1:(nc - 1))] > 0) + 1 maxx.o <- NA if (length(tops) != 0) { if (length(which(tops > maxx)) != 0) maxx.o <- tops[which(tops > maxx)] } tops <- which(w[c(2:nc)] - w[c(1:(nc - 1))] < 0) + 1 minx.o <- NA if (length(tops) != 0) { if (length(which(tops > minx)) != 0) minx.o <- tops[which(tops > minx)] } if (tolower(criterion) == "calinski") { if (!is.na(maxx.o[1])) points(y = maxx.o + min.g - 1, x = w[maxx.o], col = "orange", pch = 19) points(y = maxx + min.g - 1, x = w[maxx], col = "red", pch = 19) } else if (tolower(criterion) == "likelihood") { if (!is.na(maxx.o[1])) { points(y = maxx.o + min.g - 1, x = w[maxx.o], col = "orange", pch = 19) } points(y = maxx + min.g - 1, x = w[maxx], col = "red", pch = 19) } else if (tolower(criterion) == "ssi") { if (!is.na(maxx.o[1])) { points(y = maxx.o + min.g - 1, x = w[maxx.o], col = "orange", pch = 19) } points(y = maxx + min.g - 1, x = w[maxx], col = "red", pch = 19) } else { cat("When using the", criterion, "criterion, no red marker is", "used to indicate the best value.\n") } par(def.par) } else { tops <- which(w[c(2:nc)] - w[c(1:(nc - 1))] > 0) + 1 if (length(tops) != 0) { maxx <- which.max(w[c(2:nc)] - w[c(1:nc - 1)]) + 1 } else { maxx <- which.max(w[]) tops = 1 } } out <- list(x = x, best.grps = maxx) if (grpmts.plot) invisible(out) else out } vegan/R/plot.betadiver.R0000644000176200001440000000132510766226056014633 0ustar liggesusers`plot.betadiver` <- function (x, ...) { xy <- scores(x, ...) plot(c(0, 1), c(0, sqrt(0.75)), type = "n", axes = FALSE, xlab = "", ylab = "", asp = 1) for (tic in seq(0.2, 0.8, by = 0.2)) { segments(tic, 0, tic/2, sqrt(0.75) * tic, lty = 3) segments(tic/2, sqrt(0.75) * tic, 1 - tic/2, sqrt(0.75) * tic, lty = 3) segments(tic, 0, tic/2 + 0.5, sqrt(0.75) * (1 - tic), lty = 3) } text(c(0, 1, 0.5), c(0, 0, sqrt(0.75)), c("b'", "c'", "a'"), pos = c(2, 4, 3), cex = par("cex.axis"), xpd=TRUE) lines(c(0, 1, 0.5, 0), c(0, 0, sqrt(0.75), 0), xpd = TRUE) points(xy, ...) class(xy) <- "ordiplot" invisible(xy) } vegan/R/plot.betadisper.R0000644000176200001440000000401011476230732014775 0ustar liggesusers`plot.betadisper` <- function(x, axes = c(1,2), cex = 0.7, hull = TRUE, ylab, xlab, main, sub, ...) { localAxis <- function(..., col, bg, pch, cex, lty, lwd) axis(...) localBox <- function(..., col, bg, pch, cex, lty, lwd) box(...) localTitle <- function(..., col, bg, pch, cex, lty, lwd) title(...) if(missing(main)) main <- deparse(substitute(x)) if(missing(sub)) sub <- paste("method = \"", attr(x, "method"), "\"", sep = "") if(missing(xlab)) xlab <- paste("PCoA", axes[1]) if(missing(ylab)) ylab <- paste("PCoA", axes[2]) g <- scores(x, choices = axes) plot(g$sites, asp = 1, type = "n", axes = FALSE, ann = FALSE, ...) ## if more than 1 group level if(is.matrix(g$centroids)) { for(i in levels(x$group)) { j <- which(levels(x$group) == i) segments(g$centroids[j, 1L], g$centroids[j, 2L], g$sites[x$group == i, 1L], g$sites[x$group == i, 2L], col = "blue", ...) if(hull) { ch <- chull(g$sites[x$group == i, ]) ch <- c(ch, ch[1]) lines(x$vectors[x$group == i, axes][ch, ], col = "black", lty = "dashed", ...) } } points(g$centroids, pch = 16, cex = 1, col = "red", ...) } else { ## single group segments(g$centroids[1L], g$centroids[2L], g$sites[, 1L], g$sites[, 2L], col = "blue", ...) if(hull) { ch <- chull(g$sites) ch <- c(ch, ch[1]) lines(x$vectors[, axes][ch, ], col = "black", lty = "dashed", ...) } points(g$centroids[1L], g$centroids[1L], pch = 16, cex = 1, col = "red", ...) } points(g$sites, pch = as.numeric(x$group), cex = cex, ...) localTitle(main = main, xlab = xlab, ylab = ylab, sub = sub, ...) localAxis(1, ...) localAxis(2, ...) localBox(...) class(g) <- "ordiplot" invisible(g) } vegan/R/plot.anosim.R0000644000176200001440000000054311210420461014132 0ustar liggesusers"plot.anosim" <- function (x, title=NULL, ...) { boxplot(x$dis.rank ~ x$class.vec, notch=TRUE, varwidth=TRUE, ...) title(title) if (x$permutations) { pval <- format.pval(x$signif) } else { pval <- "not assessed" } mtext(paste("R = ", round(x$statistic, 3), ", ", "P = ", pval ), 3) invisible() } vegan/R/plot.MOStest.R0000644000176200001440000000307611421030775014217 0ustar liggesusers`plot.MOStest` <- function(x, which = c(1,2,3,6), ...) { show <- rep(FALSE, 8) show[which] <- TRUE if (show[1]) { X <- x$mod$model$x Y <- x$mod$y xx <- seq(min(X), max(X), len=101) pre <- predict(x$mod, newdata=list(x = xx), se=TRUE) g <- x$mod$family$linkinv fv <- g(pre$fit) hi <- g(pre$fit + 2*pre$se) lo <- g(pre$fit - 2*pre$se) plot(X, Y, ...) matlines(xx, cbind(fv, hi, lo), lty=c(1, 2, 2), lwd=c(2, 1, 1), col=1, ...) } if (show[2]) { ## Covariance ellipse for the coefficients s <- summary(x$mod) k <- coef(s)[2:3, 1:2] ## Fix level to 0.95 (should be changed to an argument?) level = 0.95 if (family(x$mod)$family %in% c("poisson", "binomial")) scale <- sqrt(qchisq(level, 2)) else scale <- sqrt(2 * qf(level, 2, s$df[2])) ci <- veganCovEllipse(s$cov.scaled[2:3, 2:3], k[,1], scale) plot(ci, type="l", lwd=2, xlim=range(ci[,1],0), ylim=range(ci[,2],0), ...) abline(h=0, lty=2, ...) par <- x$hump[c("min", "max")] par[par==0] <- sqrt(.Machine$double.eps) abline(0, -1/2/par[1], ...) abline(0, -1/2/par[2], ...) mul <- qnorm(1 - (1 - level)/2) segments(k[1,1] - k[1,2]*mul, k[2,1], k[1,1]+k[1,2]*mul, k[2,1], lty=3) segments(k[1,1], k[2,1]-k[2,2]*mul, k[1,1], k[2,1]+k[2,2]*mul, lty=3) } if (any(show[-c(1,2)])) { still <- which(show[-c(1,2)]) plot(x$mod, which = still, ...) } invisible() } vegan/R/persp.tsallisaccum.R0000644000176200001440000000026211053007126015505 0ustar liggesuserspersp.tsallisaccum <- function(x, theta = 220, phi = 15, col = heat.colors(100), zlim, ...) { persp.renyiaccum(x, theta = theta, phi = phi, col = col, zlim = zlim, ...) } vegan/R/persp.renyiaccum.R0000644000176200001440000000115710667741210015175 0ustar liggesusers`persp.renyiaccum` <- function(x, theta = 220, col = heat.colors(100), zlim, ...) { dn <- dimnames(x) Sites <- seq(along=dn[[1]]) Scale <- seq(along=dn[[2]]) Diversity <- x[,,"mean"] if (missing(zlim)) zlim <- range(Diversity, 0) if (length(col) > 1) { ind <- Diversity ind <- (ind[-1,-1] + ind[-1,-ncol(ind)] + ind[-nrow(ind),-1] + ind[-nrow(ind),-ncol(ind)])/4 ind <- round((length(col) - 1) * (ind - min(ind))/diff(range(ind)) + 1) col <- col[ind] } persp(Sites, Scale, Diversity, theta = theta, zlim = zlim, col = col, ...) } vegan/R/permutest.cca.R0000644000176200001440000000700011643054415014453 0ustar liggesuserspermutest <- function(x, ...) UseMethod("permutest") permutest.default <- function(x, ...) stop("No default permutation test defined") `permutest.cca` <- function (x, permutations = 99, model = c("reduced", "direct", "full"), first = FALSE, strata, ...) { model <- match.arg(model) isCCA <- !inherits(x, "rda") isPartial <- !is.null(x$pCCA) if (first) { Chi.z <- x$CCA$eig[1] q <- 1 } else { Chi.z <- x$CCA$tot.chi names(Chi.z) <- "Model" q <- x$CCA$qrank } Chi.xz <- x$CA$tot.chi names(Chi.xz) <- "Residual" r <- nrow(x$CA$Xbar) - x$CCA$QR$rank - 1 if (model == "full") Chi.tot <- Chi.xz else Chi.tot <- Chi.z + Chi.xz if (!isCCA) Chi.tot <- Chi.tot * (nrow(x$CCA$Xbar) - 1) F.0 <- (Chi.z/q)/(Chi.xz/r) F.perm <- numeric(permutations) num <- numeric(permutations) den <- numeric(permutations) Q <- x$CCA$QR if (isCCA) { w <- x$rowsum # works with any na.action, weights(x) won't X <- qr.X(Q, ncol=length(Q$pivot)) X <- sweep(X, 1, sqrt(w), "/") } if (isPartial) { Y.Z <- x$pCCA$Fit QZ <- x$pCCA$QR if (isCCA) { Z <- qr.X(QZ) Z <- sweep(Z, 1, sqrt(w), "/") } } if (model == "reduced" || model == "direct") E <- x$CCA$Xbar else E <- x$CA$Xbar if (isPartial && model == "direct") E <- E + Y.Z ## Save dimensions N <- nrow(E) if (isCCA) { Xcol <- ncol(X) if (isPartial) Zcol <- ncol(Z) } if (!exists(".Random.seed", envir = .GlobalEnv, inherits = FALSE)) runif(1) seed <- get(".Random.seed", envir = .GlobalEnv, inherits = FALSE) for (i in 1:permutations) { take <- permuted.index(N, strata) Y <- E[take, ] if (isCCA) wtake <- w[take] if (isPartial) { if (isCCA) { XZ <- .C("wcentre", x = as.double(Z), as.double(wtake), as.integer(N), as.integer(Zcol), PACKAGE = "vegan")$x dim(XZ) <- c(N, Zcol) QZ <- qr(XZ) } Y <- qr.resid(QZ, Y) } if (isCCA) { XY <- .C("wcentre", x = as.double(X), as.double(wtake), as.integer(N), as.integer(Xcol), PACKAGE = "vegan")$x dim(XY) <- c(N, Xcol) Q <- qr(XY) } tmp <- qr.fitted(Q, Y) if (first) cca.ev <- La.svd(tmp, nv = 0, nu = 0)$d[1]^2 else cca.ev <- sum(tmp * tmp) if (isPartial || first) { tmp <- qr.resid(Q, Y) ca.ev <- sum(tmp * tmp) } else ca.ev <- Chi.tot - cca.ev num[i] <- cca.ev den[i] <- ca.ev F.perm[i] <- (cca.ev/q)/(ca.ev/r) } ## Round to avoid arbitrary ordering of statistics due to ## numerical inaccuracy F.0 <- round(F.0, 12) F.perm <- round(F.perm, 12) Call <- match.call() Call[[1]] <- as.name("permutest") sol <- list(call = Call, testcall = x$call, model = model, F.0 = F.0, F.perm = F.perm, chi = c(Chi.z, Chi.xz), num = num, den = den, df = c(q, r), nperm = permutations, method = x$method, first = first, Random.seed = seed) if (!missing(strata)) { sol$strata <- deparse(substitute(strata)) sol$stratum.values <- strata } class(sol) <- "permutest.cca" sol } vegan/R/permutest.betadisper.R0000644000176200001440000000552012034255066016054 0ustar liggesusers`permutest.betadisper` <- function(x, pairwise = FALSE, control = permControl(nperm = 999), ...) { t.statistic <- function(x, y) { m <- length(x) n <- length(y) xbar <- mean(x) ybar <- mean(y) xvar <- var(x) yvar <- var(y) pooled <- sqrt(((m-1)*xvar + (n-1)*yvar) / (m+n-2)) (xbar - ybar) / (pooled * sqrt(1/m + 1/n)) } if(!inherits(x, "betadisper")) stop("Only for class \"betadisper\"") ## will issue error if only a single group mod.aov <- anova(x) nobs <- length(x$distances) mod <- lm(x$distances ~ x$group) mod.Q <- mod$qr p <- mod.Q$rank resids <- qr.resid(mod.Q, x$distances) res <- numeric(length = control$nperm + 1) res[1] <- summary(mod)$fstatistic[1] ## pairwise comparisons if(pairwise) { ## unique pairings combin <- combn(levels(x$group), 2) n.pairs <- ncol(combin) t.stats <- matrix(0, ncol = n.pairs, nrow = control$nperm + 1) t.stats[1,] <- apply(combn(levels(x$group), 2), 2, function(z) { t.statistic(x$distances[x$group == z[1]], x$distances[x$group == z[2]])}) } for(i in seq(along = res[-1])) { perm <- shuffle(nobs, control = control) perm.resid <- resids[perm] f <- qr.fitted(mod.Q, perm.resid) mss <- sum((f - mean(f))^2) r <- qr.resid(mod.Q, perm.resid) rss <- sum(r^2) rdf <- nobs - p resvar <- rss / rdf res[i+1] <- (mss / (p - 1)) / resvar ## pairwise comparisons if(pairwise) { for(j in seq_len(n.pairs)) { grp1 <- x$distance[perm][x$group == combin[1, j]] grp2 <- x$distance[perm][x$group == combin[2, j]] t.stats[i+1, j] <- t.statistic(grp1, grp2) } } } pval <- sum(res >= res[1]) / length(res) if(pairwise) { df <- apply(combin, 2, function(z) { length(x$distances[x$group == z[1]]) + length(x$distance[x$group == z[2]]) - 2}) pairwise <- list(observed = 2 * pt(-abs(t.stats[1,]), df), permuted = apply(t.stats, 2, function(z) sum(abs(z) >= abs(z[1]))/length(z))) names(pairwise$observed) <- names(pairwise$permuted) <- apply(combin, 2, paste, collapse = "-") } else { pairwise <- NULL } retval <- cbind(mod.aov[, 1:4], c(control$nperm, NA), c(pval, NA)) dimnames(retval) <- list(c("Groups", "Residuals"), c("Df", "Sum Sq", "Mean Sq", "F", "N.Perm", "Pr(>F)")) retval <- list(tab = retval, pairwise = pairwise, groups = levels(x$group), control = control) class(retval) <- "permutest.betadisper" retval } vegan/R/permuted.index.R0000644000176200001440000000055511636647312014647 0ustar liggesusers"permuted.index" <- function (n, strata) { if (missing(strata) || is.null(strata)) out <- sample.int(n, n) else { out <- 1:n inds <- names(table(strata)) for (is in inds) { gr <- out[strata == is] if (length(gr) > 1) out[gr] <- sample(gr, length(gr)) } } out } vegan/R/permatswap.R0000644000176200001440000001473111527004531014065 0ustar liggesusers## permatswap function `permatswap` <- function(m, method="quasiswap", fixedmar="both", shuffle="both", strata=NULL, mtype="count", times=99, burnin = 0, thin = 1) { ## internal function indshuffle <- function(x) { N <- length(x) n <- sum(x) out <- numeric(N) names(out) <- 1:N y <- table(sample(1:N, n, replace = TRUE)) out[names(out) %in% names(y)] <- y names(out) <- NULL out } bothshuffle <- function(x, y=1) { x[x!=0] <- indshuffle(x[x!=0] - y) + y sample(x) } if (!identical(all.equal(m, round(m)), TRUE)) stop("function accepts only integers (counts)") mtype <- match.arg(mtype, c("prab", "count")) fixedmar <- match.arg(fixedmar, c("rows", "columns", "both")) shuffle <- match.arg(shuffle, c("samp", "both")) count <- mtype == "count" if (count) { method <- match.arg(method, c("swap", "quasiswap", "swsh", "abuswap")) ## warning if swapcount is to be used if (method == "swap") { warning("quantitative swap method may not yield random null models, use only to study its properties") isSeq <- TRUE if (fixedmar != "both") stop("if 'method=\"swap\"', 'fixedmar' must be \"both\"") } else { if (method == "abuswap") { if (fixedmar == "both") stop("if 'method=\"abuswap\"', 'fixedmar' must not be \"both\"") direct <- if (fixedmar == "columns") 0 else 1 isSeq <- TRUE } else { isSeq <- FALSE if (fixedmar != "both") stop("'fixedmar' must be \"both\"") } } } else { if (fixedmar != "both") stop("if 'mtype=\"prab\"', 'fixedmar' must be \"both\"") method <- match.arg(method, c("swap", "quasiswap", "tswap", "backtracking")) isSeq <- method != "quasiswap" } m <- as.matrix(m) att <- attributes(m) n.row <- nrow(m) n.col <- ncol(m) if (mtype == "prab") m <- ifelse(m > 0, 1, 0) if (is.null(strata)) str <- as.factor(rep(1, n.row)) else str <- as.factor(strata)[drop = TRUE] levels(str) <- 1:length(unique(str)) str <- as.numeric(str) nstr <- length(unique(str)) if (any(tapply(str,list(str),length) == 1)) stop("strata should contain at least 2 observations") perm <- list() perm[[1]] <- matrix(0, n.row, n.col) if (times > 1) for (i in 2:times) perm[[i]] <- perm[[1]] for (j in 1:nstr) { id <- which(str == j) temp <- m[id,] nn.row <- nrow(m[id,]) nn.col <- ncol(m[id,]) if (isSeq) { if (count) { if (burnin > 0) { if (method == "swap") temp <- .C("swapcount", m = as.double(temp), as.integer(nn.row), as.integer(nn.col), as.integer(burnin), PACKAGE = "vegan")$m if (method == "abuswap") temp <- .C("abuswap", m = as.double(temp), as.integer(nn.row), as.integer(nn.col), as.integer(burnin), as.integer(direct), PACKAGE = "vegan")$m } } else { if (burnin > 0) temp <- commsimulator(temp, method=method, thin = burnin) } for (i in 1:times) { if (count) { if (method == "swap") perm[[i]][id,] <- .C("swapcount", m = as.double(temp), as.integer(nn.row), as.integer(nn.col), as.integer(thin), PACKAGE = "vegan")$m if (method == "abuswap") perm[[i]][id,] <- .C("abuswap", m = as.double(temp), as.integer(nn.row), as.integer(nn.col), as.integer(thin), as.integer(direct), PACKAGE = "vegan")$m } else { perm[[i]][id,] <- commsimulator(temp, method=method, thin=thin) } temp <- perm[[i]][id,] } # for i end } else { if (method != "swsh") { r2tabs <- r2dtable(times, rowSums(m[id,]), colSums(m[id,])) } else { tempPos <- temp[temp > 0] } for (i in 1:times) { if (count) { if (method != "swsh") { ms <- sum(m[id,] > 0) tmp <- r2tabs[[i]] ## if fills are equal, no need to restore fill if (sum(tmp > 0) != ms) { tmp <- .C("rswapcount", m = as.double(tmp), as.integer(nn.row), as.integer(nn.col), as.integer(ms), PACKAGE="vegan")$m } perm[[i]][id,] <- matrix(tmp, nrow(perm[[i]][id,]), ncol(perm[[i]][id,])) } else { # method == "swsh" tmp <- commsimulator(temp, method="quasiswap") if (shuffle == "samp") { tmp[tmp > 0] <- sample(tempPos) } else { tmp[tmp > 0] <- bothshuffle(tempPos) } perm[[i]][id,] <- tmp } } else perm[[i]][id,] <- commsimulator(temp, method=method) } burnin <- 0 thin <- 0 } } # for j end out <- list(call=match.call(), orig=m, perm=perm) attr(out, "mtype") <- mtype attr(out, "ptype") <- "swap" attr(out, "method") <- method attr(out, "fixedmar") <- if (method == "swsh") "none" else fixedmar attr(out, "times") <- times attr(out, "shuffle") <- if (method == "swsh") shuffle else NA attr(out, "is.strat") <- !is.null(strata) attr(out, "strata") <- str attr(out, "burnin") <- burnin attr(out, "thin") <- thin class(out) <- c("permatswap", "permat") out } vegan/R/permatfull.R0000644000176200001440000000554011527004531014053 0ustar liggesusers## permatfull function `permatfull` <- function(m, fixedmar="both", shuffle="both", strata=NULL, mtype="count", times=99) { ## internal function indshuffle <- function(x) { N <- length(x) n <- sum(x) out <- numeric(N) names(out) <- 1:N y <- table(sample(1:N, n, replace = TRUE)) out[names(out) %in% names(y)] <- y names(out) <- NULL out } bothshuffle <- function(x, y=1) { x[x!=0] <- indshuffle(x[x!=0] - y) + y sample(x) } if (!identical(all.equal(m, round(m)), TRUE)) stop("function accepts only integers (counts)") mtype <- match.arg(mtype, c("prab", "count")) shuffle <- match.arg(shuffle, c("ind", "samp", "both")) count <- mtype == "count" fixedmar <- match.arg(fixedmar, c("none", "rows", "columns", "both")) sample.fun <- switch(shuffle, "ind"=indshuffle, "samp"=sample, "both"=bothshuffle) m <- as.matrix(m) n.row <- nrow(m) n.col <- ncol(m) if (mtype == "prab") m <- ifelse(m > 0, 1, 0) if (is.null(strata)) str <- as.factor(rep(1, n.row)) else str <- as.factor(strata)[drop = TRUE] levels(str) <- 1:length(unique(str)) str <- as.numeric(str) nstr <- length(unique(str)) if (any(tapply(str,list(str),length) == 1)) stop("strata should contain at least 2 observations") perm <- list() perm[[1]] <- matrix(0, n.row, n.col) for (k in 1:times) perm[[k]] <- perm[[1]] for (j in 1:nstr) { id <- which(str == j) if (fixedmar == "none") for (i in 1:times) if (count) perm[[i]][id,] <- matrix(sample.fun(array(m[id,])), length(id), n.col) else perm[[i]][id,] <- commsimulator(m[id,], method="r00") if (fixedmar == "rows") for (i in 1:times) if (count) perm[[i]][id,] <- t(apply(m[id,], 1, sample.fun)) else perm[[i]][id,] <- commsimulator(m[id,], method="r0") if (fixedmar == "columns") for (i in 1:times) if (count) perm[[i]][id,] <- apply(m[id,], 2, sample.fun) else perm[[i]][id,] <- commsimulator(m[id,], method="c0") if (fixedmar == "both") for (i in 1:times) if (count) perm[[i]][id,] <- r2dtable(1, apply(m[id,], 1, sum), apply(m[id,], 2, sum))[[1]] else perm[[i]][id,] <- commsimulator(m[id,], method="quasiswap") } if (fixedmar == "both") shuffle <- NA out <- list(call=match.call(), orig=m, perm=perm) attr(out, "mtype") <- mtype attr(out, "ptype") <- "full" attr(out, "method") <- NA attr(out, "fixedmar") <- fixedmar attr(out, "times") <- times attr(out, "shuffle") <- shuffle attr(out, "is.strat") <- !is.null(strata) attr(out, "strata") <- str attr(out, "burnin") <- NA attr(out, "thin") <- NA class(out) <- c("permatfull", "permat") out } vegan/R/pcnm.R0000644000176200001440000000173711467215117012650 0ustar liggesusers`pcnm` <- function(dis, threshold, w, dist.ret = FALSE) { EPS <- sqrt(.Machine$double.eps) wa.old <- options(warn = -1) on.exit(options(wa.old)) dis <- as.dist(dis) if (missing(threshold)) { threshold <- max(spantree(dis)$dist) } dis[dis > threshold] <- 4*threshold ## vegan:::wcmdscale is able to use weights which also means that ## 'k' need not be given, but all vecctors with >0 eigenvalues ## will be found mypcnm <- wcmdscale(dis, eig = TRUE, w=w) res <- list(vectors = mypcnm$points, values = mypcnm$eig, weights = mypcnm$weig) k <- ncol(mypcnm$points) res$vectors <- sweep(res$vectors, 2, sqrt(res$values[1:k]), "/") colnames(res$vectors) <- paste("PCNM", 1:k, sep="") res$threshold <- threshold if (dist.ret) { attr(dis, "method") <- paste(attr(dis, "method"), "pcnm") attr(dis, "threshold") <- threshold res$dist <- dis } class(res) <- "pcnm" res } vegan/R/pasteCall.R0000644000176200001440000000023011527004531013577 0ustar liggesusers`pasteCall` <- function (call, prefix = "Call:") { call.str <- paste(deparse(call), collapse = " ") paste(prefix, call.str, "\n", sep = " ") } vegan/R/panel.ordi3d.R0000644000176200001440000000033510673424372014171 0ustar liggesusers`panel.ordi3d` <- function(x, y, z, aspect, ...) { dx <- diff(range(x)) dy <- diff(range(y)) dz <- diff(range(z)) aspect <- c(dy/dx, dz/dx) panel.cloud(x = x, y = y, z = z, aspect = aspect, ...) } vegan/R/panel.ordi.R0000644000176200001440000000232011221635507013730 0ustar liggesuserspanel.ordi <- function(x, y, biplot, type = type, ...) { panel.xyplot(x, y, type = type, ...) tp <- trellis.par.get() sp <- tp$superpose.symbol ps <- tp$plot.symbol if ("biplot" %in% type && !is.null(biplot$arrows)) { panel.arrows(0, 0, biplot$arrows[,2], biplot$arrows[,1], col=sp$col, ...) } if ("biplot" %in% type && !is.null(biplot$centres)) { panel.xyplot(biplot$centres[,2], biplot$centres[,1], col = ps$col, pch = "+", cex = 3*ps$cex, lwd=2, ...) } if ("arrows" %in% type) { panel.superpose(x, y, panel.groups= "panel.ordiarrows", ...) } panel.abline(h=0, lty = 3) panel.abline(v=0, lty = 3) } ## needed for "arrows" %in% type panel.ordiarrows <- function(x, y, subscripts, ends = "last", type = "open", length = 0.25, angle = 30, code = 2, ...) { n <- length(x) panel.arrows(x[-n], y[-n], x[-1], y[-1], ends = ends, type = "open", length = length, angle = angle, code = code, col = trellis.par.get("superpose.line")$col, lwd = trellis.par.get("superpose.line")$lwd, ) } vegan/R/orgltext.R0000644000176200001440000000053211140104741013537 0ustar liggesusers"orgltext" <- function (object, text, display = "sites", choices = 1:3, justify = "center", adj = 0.5, ...) { x <- scores(object, display = display, choices = choices, ...) if (missing(text)) text <- rownames(x) rgl.texts(x[, 1], x[, 2], x[, 3], text, adj = adj, ...) invisible() } vegan/R/orglspider.R0000644000176200001440000000235611015226412014050 0ustar liggesusers"orglspider" <- function (object, groups, display = "sites", w = weights(object, display), choices = 1:3, ...) { weights.default <- function(object, ...) NULL if (inherits(object, "cca") && missing(groups)) { lc <- scores(object, display = "lc", choices = choices, ...) wa <- scores(object, display = "wa", choices = choices, ...) for (i in 1:nrow(lc)) rgl.lines(c(lc[i, 1], wa[i, 1]), c(lc[i, 2], wa[i, 2]), c(lc[i, 3], wa[i, 3]), ...) } else { pts <- scores(object, display = display, choices = choices, ...) out <- seq(along = groups) w <- eval(w) if (length(w) == 1) w <- rep(1, nrow(pts)) if (is.null(w)) w <- rep(1, nrow(pts)) inds <- names(table(groups)) for (is in inds) { gr <- out[groups == is] if (length(gr) > 1) { X <- pts[gr, ] W <- w[gr] ave <- apply(X, 2, weighted.mean, w = W) for (i in 1:length(gr)) rgl.lines(c(ave[1], X[i,1]), c(ave[2], X[i, 2]), c(ave[3], X[i, 3]), ...) } } } invisible() } vegan/R/orglsegments.R0000644000176200001440000000075210667741210014417 0ustar liggesusers"orglsegments" <- function (object, groups, display = "sites", choices = 1:3,...) { pts <- scores(object, display = display, choices = choices, ...) inds <- names(table(groups)) for (is in inds) { X <- pts[groups == is, , drop = FALSE] if (nrow(X) > 1) { for (i in 2:nrow(X)) { rgl.lines(c(X[i-1,1],X[i,1]), c(X[i-1,2],X[i,2]), c(X[i-1,3],X[i,3]), ...) } } } invisible() } vegan/R/orglpoints.R0000644000176200001440000000031710667741210014103 0ustar liggesusers"orglpoints" <- function (object, display = "sites", choices = 1:3, ...) { x <- scores(object, display = display, choices = choices, ...) rgl.points(x[,1], x[,2], x[,3], ...) invisible() } vegan/R/ordixyplot.R0000644000176200001440000000215111611555072014115 0ustar liggesusers`ordixyplot` <- function(x, data = NULL, formula, display = "sites", choices=1:3, panel = "panel.ordi", aspect = "iso", envfit, type = c("p", "biplot"), ...) { localXyplot <- function(..., shrink, origin, scaling) xyplot(...) require(lattice) || stop("requires package 'lattice'") p <- as.data.frame(scores(x, display = display, choices = choices, ...)) if (!is.null(data)) p <- cbind(p, data) if (missing(formula)) { v <- colnames(p) formula <- as.formula(paste(v[2], "~", v[1])) } if ("biplot" %in% type && ((!is.null(x$CCA) && x$CCA$rank > 0) || !missing(envfit))) { if (missing(envfit)) envfit <- NULL env <- ordilattice.getEnvfit(formula, x, envfit, choices, ...) if (!is.null(env$arrows)) { mul <- apply(p[,colnames(env$arrows)], 2, range)/apply(env$arrows, 2, range) mul <- min(mul[is.finite(mul) & mul > 0]) env$arrows <- mul * env$arrows } } else { env <- NULL } localXyplot(formula, data = p, panel = panel, aspect = aspect, biplot = env, type = type, ...) } vegan/R/orditorp.R0000644000176200001440000000376412075345644013564 0ustar liggesusers`orditorp` <- function (x, display, labels, choices = c(1, 2), priority, select, cex = 0.7, pcex, col = par("col"), pcol, pch = par("pch"), air = 1, ...) { if (missing(pcex)) pcex <- cex if (missing(pcol)) pcol <- col x <- scores(x, display = display, choices = choices, ...) kk <- complete.cases(x) if (missing(labels)) labels <- rownames(x) if (missing(priority)) priority <- rowSums((scale(x)^2)) if (!missing(select)) { x <- .checkSelect(select, x) labels <- .checkSelect(select, labels) priority <- .checkSelect(select, priority) kk <- .checkSelect(select, kk) } ## remove NA scores x <- x[kk,] priority <- priority[kk] labels <- labels[kk] w <- abs(strwidth(labels, cex = cex))/2 * air h <- abs(strheight(labels, cex = cex))/2 * air xx <- cbind(x[, 1] - w, x[, 1] + w, x[, 2] - h, x[, 2] + h) is.na(priority) <- w == 0 ord <- rev(order(priority, na.last = FALSE)) xx <- xx[ord, ] x <- x[ord, ] labels <- labels[ord] tt <- logical(nrow(xx)) tt[1] <- TRUE for (i in 2:(nrow(xx) - sum(is.na(priority)))) { j <- 1:(i - 1) j <- j[tt[j]] tt[i] <- all(xx[i, 1] > xx[j, 2] | xx[j, 1] > xx[i, 2] | xx[i, 3] > xx[j, 4] | xx[j, 3] > xx[i, 4]) } if (sum(!tt)) { if (length(pch) > 1) pch <- (pch[ord])[!tt] if (length(pcex) > 1) pcex <- (pcex[ord])[!tt] if (length(pcol) > 1) pcol <- (pcol[ord])[!tt] ordiArgAbsorber(x[!tt, , drop = FALSE], pch = pch, cex = pcex, col = pcol, FUN = points, ...) } if (length(cex) > 1) cex <- (cex[ord])[tt] if (length(col) > 1) col <- (col[ord])[tt] ordiArgAbsorber(x[tt, , drop = FALSE], labels[tt], cex = cex, col = col, FUN = text, ...) names(tt) <- labels tt <- tt[order(ord)] invisible(tt) } vegan/R/orditkplot.R0000644000176200001440000005443311521606164014104 0ustar liggesusers### ### Editable Tcl/Tk plot for ordination ### `orditkplot` <- function(x, display = "species", choices = 1:2, width, xlim, ylim, tcex=0.8, tcol, pch = 1, pcol, pbg, pcex = 0.7, labels, ...) { if (!capabilities("tcltk")) stop("Your R has no capability for Tcl/Tk") require(tcltk) || stop("requires package tcltk") ############################ ### Check and sanitize input ########################### ## Graphical parameters and constants, and save some for later plotting p <- par() sparnam <- c("bg","cex", "cex.axis","cex.lab","col", "col.axis", "col.lab", "family", "fg", "font", "font.axis", "font.lab", "lheight", "lwd", "mar", "mex", "mgp", "ps", "tcl", "las") ## Get par given in the command line and put them to p if (inherits(x, "orditkplot")) { dots <- x$par for (arg in names(x$args)) assign(arg, unlist(x$args[arg])) } else { dots <- match.call(expand.dots = FALSE)$... } if (length(dots) > 0) { dots <- dots[names(dots) %in% sparnam] ## eval() or mar=c(4,4,1,1) will be a call, not numeric dots <- lapply(dots, function(x) if (is.call(x)) eval(x) else x) p <- check.options(new = dots, name.opt = "p", envir = environment()) } savepar <- p[sparnam] PPI <- 72 # Points per Inch p2p <- as.numeric(tclvalue(tcl("tk", "scaling"))) # Pixel per point DIAM <- 2.7 # diam of plotting symbol ## Plotting symbol diam diam <- round(pcex * DIAM * p2p, 1) ## Sanitize colours sanecol <- function(x) { if (is.numeric(x)) x <- palette()[x] x <- gsub("transparent", "", x) x[is.na(x)] <- "" x } p$bg <- sanecol(p$bg) p$fg <- sanecol(p$fg) p$col <- sanecol(p$col) p$col.axis <- sanecol(p$col.axis) p$col.lab <- sanecol(p$col.lab) ## Point and label colours if (missing(pcol)) pcol <- p$col if (missing(pbg)) pbg <- "transparent" if (missing(tcol)) tcol <- p$col pcol <- sanecol(pcol) pbg <- sanecol(pbg) tcol <- sanecol(tcol) ## Define fonts idx <- match(p$family, c("","serif","sans","mono")) if (!is.na(idx)) p$family <- c("Helvetica", "Times", "Helvetica", "Courier")[idx] saneslant <- function(x) { list("roman", "bold", "italic", c("bold", "italic"))[[x]] } ## fnt must be done later, since family, font and size can be ## vectors and slant can be of length 1 or 2 ## fnt <- c(p$family, round(p$ps*p$cex*tcex), saneslant(p$font)) labfam <- p$family labsize <- round(p$ps * p$cex * tcex) fnt.axis <- c(p$family, round(p$ps*p$cex.axis), saneslant(p$font.axis)) fnt.lab <- c(p$family, round(p$ps*p$cex.lab), saneslant(p$font.lab)) ## Imitate R plotting symbols pch SQ <- sqrt(2) # Scaling factor for plot Point <- function(x, y, pch, col, fill, diam) { x <- round(x) y <- round(y) switch(as.character(pch), "0" = Point(x, y, 22, col, fill = "", diam), "1" = Point(x, y, 21, col, fill = "", diam), "2" = Point(x, y, 24, col, fill = "", diam), "3" = {tkcreate(can, "line", x, y+SQ*diam, x, y-SQ*diam, fill=col) tkcreate(can, "line", x+SQ*diam, y, x-SQ*diam, y, fill=col)}, "4" = {tkcreate(can, "line", x-diam, y-diam, x+diam, y+diam, fill=col) tkcreate(can, "line", x-diam, y+diam, x+diam, y-diam, fill=col)}, "5" = Point(x, y, 23, col, fill = "", diam), "6" = Point(x, y, 25, col, fill = "", diam), "7" = {Point(x, y, 4, col, fill, diam) Point(x, y, 0, col, fill, diam)}, "8" = {Point(x, y, 3, col, fill, diam) Point(x, y, 4, col, fill, diam)}, "9" = {Point(x, y, 3, col, fill, diam) Point(x, y, 5, col, fill, diam)}, "10" = {Point(x, y, 3, col, fill, diam/SQ) Point(x, y, 1, col, fill, diam)}, "11" = {Point(x, y, 2, col, fill, diam) Point(x, y, 6, col, fill, diam)}, "12" = {Point(x, y, 3, col, fill, diam/SQ) Point(x, y, 0, col, fill, diam)}, "13" = {Point(x, y, 4, col, fill, diam) Point(x, y, 1, col, fill, diam)}, "14" = {tkcreate(can, "line", x-diam, y-diam, x, y+diam, fill = col) tkcreate(can, "line", x+diam, y-diam, x, y+diam, fill = col) Point(x, y, 0, col, fill, diam)}, "15" = Point(x, y, 22, col = col, fill = col, diam), "16" = Point(x, y, 21, col = col, fill = col, diam), "17" = Point(x, y, 24, col = col, fill = col, diam), "18" = Point(x, y, 23, col = col, fill = col, diam/SQ), "19" = Point(x, y, 21, col = col, fill = col, diam), "20" = Point(x, y, 21, col = col, fill = col, diam/2), "21" = tkcreate(can, "oval", x-diam, y-diam, x+diam, y+diam, outline = col, fill = fill), "22" = tkcreate(can, "rectangle", x-diam, y-diam, x+diam, y+diam, outline = col, fill = fill), "23" = tkcreate(can, "polygon", x, y+SQ*diam, x+SQ*diam, y, x, y-SQ*diam, x-SQ*diam, y, outline = col, fill = fill), "24" = tkcreate(can, "polygon", x, y-SQ*diam, x+sqrt(6)/2*diam, y+SQ/2*diam, x-sqrt(6)/2*diam, y+SQ/2*diam, outline = col, fill = fill), "25" = tkcreate(can, "polygon", x, y+SQ*diam, x+sqrt(6)/2*diam, y-SQ/2*diam, x-sqrt(6)/2*diam, y-SQ/2*diam, outline = col, fill = fill), "o" = Point(x, y, 1, col, fill, diam), ## default: text with dummy location of the label {tkcreate(can, "text", x, y, text = as.character(pch), fill = col) Point(x, y, 21, col="", fill="", diam)} ) } ############################ ### Initialize Tcl/Tk Window ############################ ## toplevel w <- tktoplevel() tktitle(w) <- deparse(match.call()) ## Max dim of windows (depends on screen) YSCR <- as.numeric(tkwinfo("screenheight", w)) - 150 XSCR <- as.numeric(tkwinfo("screenwidth", w)) ################################ ### Buttons and button functions ################################ ## Buttons buts <- tkframe(w) ## Copy current canvas to EPS using the standard Tcl/Tk utility cp2eps <- tkbutton(buts, text="Copy to EPS", command=function() tkpostscript(can, x=0, y=0, height=height, width=width, file=tkgetSaveFile(filetypes="{{EPS file} {.eps}}"))) dismiss <- tkbutton(buts, text="Dismiss", command=function() tkdestroy(w)) ## Dump current plot to an "orditkplot" object (internally) ordDump <- function() { xy <- matrix(0, nrow=nrow(sco), ncol=2) rownames(xy) <- rownames(sco) colnames(xy) <- colnames(sco) for(nm in names(pola)) { xy[as.numeric(tclvalue(id[[nm]])),] <- xy2usr(nm) } curdim <- round(c(width, height) /PPI/p2p, 2) ## Sanitize colours for R plot pbg[pbg == ""] <- "transparent" pcol[pcol == ""] <- "transparent" ## Reduce vector args if all entries are constant argcollapse <- function(x) if (length(unique(x)) == 1) x[1] else x pch <- argcollapse(pch) pcol <- argcollapse(pcol) pbg <- argcollapse(pbg) tcol <- argcollapse(tcol) ## Save args <- list(tcex = tcex, tcol = tcol, pch = pch, pcol = pcol, pbg = pbg, pcex = pcex, xlim = xlim, ylim = ylim) xy <- list(labels = xy, points = sco, par = savepar, args = args, dim = curdim) class(xy) <- "orditkplot" xy } ## Button to dump "orditkplot" object to the R session pDump <- function() { xy <- ordDump() dumpVar <- tclVar("") tt <- tktoplevel() tktitle(tt) <- "R Dump" entryDump <- tkentry(tt, width=20, textvariable=dumpVar) tkgrid(tklabel(tt, text="Enter name for an R object")) tkgrid(entryDump, pady="5m") isDone <- function() { dumpName <- tclvalue(dumpVar) if (exists(dumpName, envir=.GlobalEnv)) { ok <- tkmessageBox(message=paste(sQuote(dumpName), "exists.\nOK to overwrite?"), icon="warning", type="okcancel", default="ok") if(tclvalue(ok) == "ok") { assign(dumpName, xy, envir=.GlobalEnv) tkdestroy(tt) } } else { assign(dumpName, xy, envir=.GlobalEnv) tkdestroy(tt) } } tkbind(entryDump, "", isDone) tkfocus(tt) } dump <- tkbutton(buts, text="Dump to R", command=pDump) ## Button to write current "orditkplot" object to a graphical device devDump <- function() { xy <- ordDump() ftypes <- c("eps" = "{EPS File} {.eps}", "pdf" = "{PDF File} {.pdf}", "png" = "{PNG File} {.png}", "jpg" = "{JPEG File} {.jpg .jpeg}", "bmp" = "{BMP File} {.bmp}", "tiff"= "{TIFF File} {.tif .tiff}", "fig" = "{XFig File} {.fig}") falt <- rep(TRUE, length(ftypes)) names(falt) <- names(ftypes) if (!capabilities("png")) falt["png"] <- FALSE if (!capabilities("jpeg")) falt["jpg"] <- FALSE ## Should work also in R < 2.8.0 with no capabilities("tiff") if (!isTRUE(unname(capabilities("tiff")))) falt["tiff"] <- FALSE ## bmp lives only in Windows if (.Platform$OS.type != "windows") falt["bmp"] <- FALSE ftypes <- ftypes[falt] fname <- tkgetSaveFile(filetypes=ftypes) if(tclvalue(fname) == "") return(NULL) fname <- tclvalue(fname) ftype <- unlist(strsplit(fname, "\\.")) ftype <- ftype[length(ftype)] if (ftype == "jpeg") ftype <- "jpg" if (ftype == "tif") ftype <- "tiff" mess <- "is not a supported type: file not produced. Supported types are" if (!(ftype %in% names(ftypes))) { tkmessageBox(message=paste(sQuote(ftype), mess, paste(names(ftypes), collapse=", ")), icon="warning") return(NULL) } pixdim <- round(xy$dim*PPI*p2p) switch(ftype, eps = postscript(file=fname, width=xy$dim[1], height=xy$dim[2], paper="special", horizontal = FALSE), pdf = pdf(file=fname, width=xy$dim[1], height=xy$dim[2]), png = png(filename=fname, width=pixdim[1], height=pixdim[2]), jpg = jpeg(filename=fname, width=pixdim[1], height=pixdim[2], quality = 100), tiff = tiff(filename=fname, width=pixdim[1], height=pixdim[2]), bmp = bmp(filename=fname, width=pixdim[1], height=pixdim[2]), fig = xfig(file=fname, width=xy$dim[1], height=xy$dim[2])) plot.orditkplot(xy) dev.off() } export <- tkbutton(buts, text="Export plot", command=devDump) ########## ### Canvas ########## ## Make canvas sco <- try(scores(x, display=display, choices = choices, ...), silent = TRUE) if (inherits(sco, "try-error")) { tkmessageBox(message=paste("No ordination scores were found in", sQuote(deparse(substitute(x)))), icon="error") tkdestroy(w) stop("argument x did not contain ordination scores") } if (!missing(labels)) rownames(sco) <- labels ## Recycle graphical parameters in plots nr <- nrow(sco) pcol <- rep(pcol, length=nr) pbg <- rep(pbg, length=nr) pch <- rep(pch, length=nr) tcol <- rep(tcol, length=nr) diam <- rep(diam, length=nr) labfam <- rep(labfam, length=nr) labsize <- rep(labsize, length=nr) if (inherits(x, "ordipointlabel")) labfnt <- attr(x$labels, "font") else labfnt <- rep(p$font, length=nr) ## Select only items within xlim, ylim take <- rep(TRUE, nr) if (!missing(xlim)) take <- take & sco[,1] >= xlim[1] & sco[,1] <= xlim[2] if (!missing(ylim)) take <- take & sco[,2] >= ylim[1] & sco[,2] <= ylim[2] sco <- sco[take,, drop=FALSE] labs <- rownames(sco) pcol <- pcol[take] pbg <- pbg[take] tcol <- tcol[take] pch <- pch[take] diam <- diam[take] labfam <- labfam[take] labsize <- labsize[take] labfnt <- labfnt[take] ## Ranges and pretty values for axes if (missing(xlim)) xlim <- range(sco[,1], na.rm = TRUE) if (missing(ylim)) ylim <- range(sco[,2], na.rm = TRUE) xpretty <- pretty(xlim) ypretty <- pretty(ylim) ## Extend ranges by 4% xrange <- c(-0.04, 0.04) * diff(xlim) + xlim xpretty <- xpretty[xpretty >= xrange[1] & xpretty <= xrange[2]] yrange <- c(-0.04, 0.04) * diff(ylim) + ylim ypretty <- ypretty[ypretty >= yrange[1] & ypretty <= yrange[2]] ## Canvas like they were in the default devices when I last checked if (missing(width)) width <- p$din[1] width <- width * PPI * p2p ## Margin row width also varies with platform and devices ## rpix <- (p$mai/p$mar * PPI * p2p)[1] rpix <- p$cra[2] mar <- round(p$mar * rpix) xusr <- width - mar[2] - mar[4] xincr <- xusr/diff(xrange) yincr <- xincr xy0 <- c(xrange[1], yrange[2]) # upper left corner ## Functions to translate scores to canvas coordinates and back usr2xy <- function(row) { x <- (row[1] - xy0[1]) * xincr + mar[2] y <- (xy0[2] - row[2]) * yincr + mar[3] c(x,y) } ## User coordinates of an item xy2usr <- function(item) { xy <- as.numeric(tkcoords(can, item)) x <- xy[1] y <- xy[2] x <- xrange[1] + (x - mar[2])/xincr y <- yrange[2] - (y - mar[3])/yincr c(x,y) } ## Canvas x or y to user coordinates x2usr <- function(xcan) { xrange[1] + (xcan - mar[2])/xincr } y2usr <- function(ycan) { yrange[2] - (ycan - mar[3])/yincr } ## Equal aspect ratio height <- round((diff(yrange)/diff(xrange)) * xusr) height <- height + mar[1] + mar[3] ## Canvas, finally can <- tkcanvas(w, relief="sunken", width=width, height=min(height,YSCR), scrollregion=c(0,0,width,height)) if (p$bg != "") tkconfigure(can, bg=p$bg) yscr <- tkscrollbar(w, command = function(...) tkyview(can, ...)) tkconfigure(can, yscrollcommand = function(...) tkset(yscr, ...)) ## Pack it up tkpack(buts, side="bottom", fill="x", pady="2m") tkpack(can, side="left", fill="x") tkpack(yscr, side="right", fill="y") tkgrid(cp2eps, export, dump, dismiss, sticky="s") ## Box x0 <- usr2xy(c(xrange[1], yrange[1])) x1 <- usr2xy(c(xrange[2], yrange[2])) tkcreate(can, "rectangle", x0[1], x0[2], x1[1], x1[2], outline = p$fg, width = p$lwd) ## Axes and ticks tl <- -p$tcl * rpix # -p$tcl * p$ps * p2p axoff <- p$mgp[3] * rpix tmp <- xpretty for (i in 1:length(tmp)) { x0 <- usr2xy(c(xpretty[1], yrange[1])) x1 <- usr2xy(c(xpretty[length(xpretty)], yrange[1])) tkcreate(can, "line", x0[1], x0[2]+axoff, x1[1], x1[2]+axoff, fill=p$fg) xx <- usr2xy(c(tmp[i], yrange[1])) tkcreate(can, "line", xx[1], xx[2] + axoff, xx[1], xx[2]+tl+axoff, fill=p$fg) tkcreate(can, "text", xx[1], xx[2] + rpix * p$mgp[2], anchor="n", text=as.character(tmp[i]), fill=p$col.axis, font=fnt.axis) } xx <- usr2xy(c(mean(xrange), yrange[1])) tkcreate(can, "text", xx[1], xx[2] + rpix * p$mgp[1], text=colnames(sco)[1], fill=p$col.lab, anchor="n", font=fnt.lab) tmp <- ypretty for (i in 1:length(tmp)) { x0 <- usr2xy(c(xrange[1], tmp[1])) x1 <- usr2xy(c(xrange[1], tmp[length(tmp)])) tkcreate(can, "line", x0[1]-axoff, x0[2], x1[1]-axoff, x1[2]) yy <- usr2xy(c(xrange[1], tmp[i])) tkcreate(can, "line", yy[1]-axoff, yy[2], yy[1]-tl-axoff, yy[2], fill=p$fg ) tkcreate(can, "text", yy[1] - rpix * p$mgp[2] , yy[2], anchor="e", text=as.character(tmp[i]), fill = p$col.axis, font=fnt.axis) } ## Points and labels ## The following 'inherits' works with ordipointlabel, but not ## with zooming if (inherits(x, "orditkplot")) { lsco <- scores(x, "labels") laboff <- rep(0, nrow(lsco)) lsco <- lsco[rownames(sco),] } else { lsco <- sco laboff <- round(p2p * p$ps/2 + diam + 1) } pola <- tclArray() # points labtext <- tclArray() # text id <- tclArray() # index for (i in 1:nrow(sco)) { xy <- usr2xy(sco[i,]) item <- Point(xy[1], xy[2], pch = pch[i], col = pcol[i], fill = pbg[i], diam = diam[i]) xy <- usr2xy(lsco[i,]) fnt <- c(labfam[i], labsize[i], saneslant(labfnt[i])) lab <- tkcreate(can, "text", xy[1], xy[2]-laboff[i], text=labs[i], fill = tcol[i], font=fnt) tkaddtag(can, "point", "withtag", item) tkaddtag(can, "label", "withtag", lab) pola[[lab]] <- item labtext[[lab]] <- labs[i] id[[lab]] <- i } ############################## ### Mouse operations on canvas ############################## ## Plotting and Moving ## Mouse enters a label pEnter <- function() { tkdelete(can, "box") hbox <- tkcreate(can, "rectangle", tkbbox(can, "current"), outline = "red", fill = "yellow") tkaddtag(can, "box", "withtag", hbox) tkitemraise(can, "current") } ## Mouse leaves a label pLeave <- function() { tkdelete(can, "box") } ## Select label pDown <- function(x, y) { x <- as.numeric(x) y <- as.numeric(y) tkdtag(can, "selected") tkaddtag(can, "selected", "withtag", "current") tkitemraise(can, "current") p <- as.numeric(tkcoords(can, pola[[tkfind(can, "withtag", "current")]])) .pX <<- (p[1]+p[3])/2 .pY <<- (p[2]+p[4])/2 .lastX <<- x .lastY <<- y } ## Move label pMove <- function(x, y) { x <- as.numeric(x) y <- as.numeric(y) tkmove(can, "selected", x - .lastX, y - .lastY) tkdelete(can, "ptr") tkdelete(can, "box") .lastX <<- x .lastY <<- y ## xadj,yadj: adjust for canvas scrolling xadj <- as.numeric(tkcanvasx(can, 0)) yadj <- as.numeric(tkcanvasy(can, 0)) hbox <- tkcreate(can, "rectangle", tkbbox(can, "selected"), outline = "red") tkaddtag(can, "box", "withtag", hbox) conn <- tkcreate(can, "line", .lastX + xadj, .lastY+yadj, .pX, .pY, fill="red") tkaddtag(can, "ptr", "withtag", conn) } ## Edit label pEdit <- function() { tkdtag(can, "selected") tkaddtag(can, "selected", "withtag", "current") tkitemraise(can, "current") click <- tkfind(can, "withtag", "current") txt <- tclVar(labtext[[click]]) i <- as.numeric(id[[click]]) tt <- tktoplevel() labEd <- tkentry(tt, width=20, textvariable=txt) tkgrid(tklabel(tt, text = "Edit label")) tkgrid(labEd, pady="5m", padx="5m") isDone <- function() { txt <- tclvalue(txt) tkitemconfigure(can, click, text = txt) rownames(sco)[i] <<- txt tkdestroy(tt) } tkbind(labEd, "", isDone) } ## Zooming: draw rectangle and take its user coordinates ## Rectangle: first corner pRect0 <- function(x, y) { x <- as.numeric(x) y <- as.numeric(y) ## yadj here and below adjusts for canvas scrolling yadj <- as.numeric(tkcanvasy(can, 0)) .pX <<- x .pY <<- y + yadj } ## Grow rectangle pRect <- function(x, y) { x <- as.numeric(x) y <- as.numeric(y) tkdelete(can, "box") yadj <- as.numeric(tkcanvasy(can, 0)) .lastX <<- x .lastY <<- y + yadj rect <- tkcreate(can, "rectangle", .pX, .pY, .lastX, .lastY, outline="blue") tkaddtag(can, "box", "withtag", rect) } ## Redraw ordiktplot with new xlim and ylim pZoom <- function() { nxlim <- sort(c(x2usr(.pX), x2usr(.lastX))) nylim <- sort(c(y2usr(.pY), y2usr(.lastY))) xy <- ordDump() ## Move labels closer to points in zoom ## FIXME: Doesn't do a perfect job mul <- abs(diff(nxlim)/diff(xlim)) xy$labels <- xy$points + (xy$labels - xy$points)*mul xy$args$xlim <- nxlim xy$args$ylim <- nylim orditkplot(xy) } ## Dummy location of the mouse .lastX <- 0 .lastY <- 0 .pX <- 0 .pY <- 0 ## Mouse bindings: ## Moving a label tkitembind(can, "label", "", pEnter) tkitembind(can, "label", "", pLeave) tkitembind(can, "label", "<1>", pDown) tkitembind(can, "label", "", function() {tkdtag(can, "selected"); tkdelete(can, "ptr")}) tkitembind(can, "label", "", pMove) ## Edit labels tkitembind(can, "label", "", pEdit) ## Zoom (with one-button mouse) tkbind(can, "", pRect0) tkbind(can, "", pRect) tkbind(can, "", pZoom) ## Zoom (with right button) tkbind(can, "", pRect0) tkbind(can, "", pRect) tkbind(can, "", pZoom) } vegan/R/ordisurf.R0000644000176200001440000000754011540226023013534 0ustar liggesusers`ordisurf` <- function(...) UseMethod("ordisurf") `ordisurf.formula` <- function(formula, data, ...) { if (missing(data)) data <- parent.frame() x <- formula[[2]] x <- eval.parent(x) formula[[2]] <- NULL y <- drop(as.matrix(model.frame(formula, data, na.action = na.pass))) if (NCOL(y) > 1) stop(gettextf("only one fitted variable allowed in the formula")) ordisurf(x, y, ...) } `ordisurf.default` <- function (x, y, choices = c(1, 2), knots = 10, family = "gaussian", col = "red", thinplate = TRUE, add = FALSE, display = "sites", w = weights(x), main, nlevels = 10, levels, labcex = 0.6, bubble = FALSE, cex = 1, select = FALSE, method = "GCV.Cp", gamma = 1, plot = TRUE, ...) { weights.default <- function(object, ...) NULL GRID = 31 w <- eval(w) if (!is.null(w) && length(w) == 1) w <- NULL require(mgcv) || stop("Requires package 'mgcv'") X <- scores(x, choices = choices, display = display, ...) ## The original name of 'y' may be lost in handling NA: save for ## plots yname <- deparse(substitute(y)) kk <- complete.cases(X) & !is.na(y) if (!all(kk)) { X <- X[kk, , drop = FALSE] y <- y[kk] w <- w[kk] } x1 <- X[, 1] x2 <- X[, 2] if (knots <= 0) mod <- gam(y ~ x1 + x2, family = family, weights = w) else if (knots == 1) mod <- gam(y ~ poly(x1, 1) + poly(x2, 1), family = family, weights = w, method = method) else if (knots == 2) mod <- gam(y ~ poly(x1, 2) + poly(x2, 2) + poly(x1, 1):poly(x2, 1), family = family, weights = w, method = method) else if (thinplate) mod <- gam(y ~ s(x1, x2, k = knots), family = family, weights = w, select = select, method = method, gamma = gamma) else mod <- gam(y ~ s(x1, k = knots) + s(x2, k = knots), family = family, weights = w, select = select, method = method, gamma = gamma) xn1 <- seq(min(x1), max(x1), len=GRID) xn2 <- seq(min(x2), max(x2), len=GRID) newd <- expand.grid(x1 = xn1, x2 = xn2) fit <- predict(mod, type = "response", newdata=as.data.frame(newd)) poly <- chull(cbind(x1,x2)) ## Move out points of the convex hull to have contour for all data ## points xhull1 <- x1[poly] + sign(x1[poly] - mean(x1[poly])) * diff(range(x1))/(GRID - 1) xhull2 <- x2[poly] + sign(x2[poly] - mean(x2[poly])) * diff(range(x2))/(GRID - 1) npol <- length(poly) np <- nrow(newd) inpoly <- numeric(np) inpoly <- .C("pnpoly", as.integer(npol), as.double(xhull1), as.double(xhull2), as.integer(np), as.double(newd[,1]), as.double(newd[,2]), inpoly = as.integer(inpoly), PACKAGE="vegan")$inpoly is.na(fit) <- inpoly == 0 if(plot) { if (!add) { if (bubble) { if (is.numeric(bubble)) cex <- bubble cex <- (y - min(y))/diff(range(y)) * (cex-0.4) + 0.4 } plot(X, asp = 1, cex = cex, ...) } if (!missing(main) || (missing(main) && !add)) { if (missing(main)) main <- yname title(main = main) } if (missing(levels)) levels <- pretty(range(fit, finite = TRUE), nlevels) ## Only plot surface is select is FALSE or (TRUE and EDF is diff from 0) if(!select || (select && !isTRUE(all.equal(as.numeric(summary(mod)$edf), 0)))) contour(xn1, xn2, matrix(fit, nrow=GRID), col = col, add = TRUE, levels = levels, labcex = labcex, drawlabels = !is.null(labcex) && labcex > 0) } mod$grid <- list(x = xn1, y = xn2, z = matrix(fit, nrow = GRID)) class(mod) <- c("ordisurf", class(mod)) mod } vegan/R/ordistep.R0000644000176200001440000000726311706256637013554 0ustar liggesusers`ordistep` <- function(object, scope, direction =c("both", "backward", "forward"), Pin = 0.05, Pout = 0.1, pstep = 100, perm.max = 1000, steps=50, trace = TRUE, ...) { if (!inherits(object, "cca")) stop("function can be only used with 'cca' and related objects") ## handling 'direction' and 'scope' directly copied from ## stats::step() md <- missing(direction) direction <- match.arg(direction) backward <- direction == "both" | direction == "backward" forward <- direction == "both" | direction == "forward" ffac <- attr(terms(object), "factors") if (missing(scope)) { fdrop <- numeric(0) fadd <- ffac if (md) forward <- FALSE } else { if (is.list(scope)) { fdrop <- if (!is.null(fdrop <- scope$lower)) attr(terms(update.formula(object, fdrop)), "factors") else numeric(0) fadd <- if (!is.null(fadd <- scope$upper)) attr(terms(update.formula(object, fadd)), "factors") } else { fadd <- if (!is.null(fadd <- scope)) attr(terms(update.formula(object, scope)), "factors") fdrop <- numeric(0L) } } scope <- factor.scope(ffac, list(add = fadd, drop = fdrop)) ## 'anotab' collects the changes into 'anova' object in the output anotab <- NULL if (trace) { cat("\n") cat(pasteCall(formula(object), prefix = "Start:")) } for (i in 1:steps){ change <- NULL ## Consider dropping if (backward && length(scope$drop)) { aod <- drop1(object, scope = scope$drop, test="perm", pstep = pstep, perm.max = perm.max, alpha = Pout, trace = trace, ...) aod <- aod[-1,] o <- order(-aod[,5], aod[,4], aod[,2]) aod <- aod[o,] rownames(aod) <- paste("-", rownames(aod), sep = " ") if (trace) { cat("\n") print(aod) } if (is.na(aod[1,5]) || aod[1,5] > Pout) { anotab <- rbind(anotab, aod[1,]) change <- rownames(aod)[1] object <- eval.parent(update(object, paste("~ .", change))) scope <- factor.scope(attr(terms(object), "factors"), list(add = fadd, drop = fdrop)) if (trace) { cat("\n") cat(pasteCall(formula(object), prefix = "Step:")) } } } ## Consider adding if (forward && length(scope$add)) { aod <- add1(object, scope = scope$add, test = "perm", pstep = pstep, perm.max = perm.max, alpha = Pin, trace = trace, ...) aod <- aod[-1,] o <- order(aod[,5], aod[,4], aod[,2]) aod <- aod[o,] rownames(aod) <- paste("+", rownames(aod), sep = " ") if (trace) { cat("\n") print(aod) } if (!is.na(aod[1,5]) && aod[1,5] <= Pin) { anotab <- rbind(anotab, aod[1,]) change <- rownames(aod)[1] object <- eval.parent(update(object, paste( "~ .",change))) scope <- factor.scope(attr(terms(object), "factors"), list(add = fadd, drop = fdrop)) if (trace) { cat("\n") cat(pasteCall(formula(object), prefix="Step:")) } } } ## No drop, no add: done if (is.null(change)) break } cat("\n") object$anova <- anotab object } vegan/R/ordisplom.R0000644000176200001440000000146310714442306013713 0ustar liggesusers`ordisplom` <- function(x, data=NULL, formula = NULL, display = "sites", choices = 1:3, panel = "panel.ordi", type = "p", ...) { localSplom <- function(..., shrink, origin, scaling) splom(...) require(lattice) || stop("requires package 'lattice'") x <- as.data.frame(scores(x, display = display, choices = choices, ...)) if (is.null(data)) data <- x else if (is.null(formula)) x <- cbind(x, data) ## type = "biplot" is not (yet?) implemented env <- list(arrows = NULL, centres = NULL) if (is.null(formula)) pl <- localSplom(x, panel = panel, type = type, biplot = env, ...) else { formula <- as.formula(gsub("\\.", "x", deparse(formula))) pl <- localSplom(x = formula, data = data, panel = panel, type = type, bitplot = env, ...) } pl } vegan/R/ordispider.R0000644000176200001440000000373211654301515014050 0ustar liggesusers`ordispider` <- function (ord, groups, display = "sites", w = weights(ord, display), show.groups, label = FALSE, ...) { weights.default <- function(object, ...) NULL if (inherits(ord, "cca") && missing(groups)) { lc <- scores(ord, display = "lc", ...) wa <- scores(ord, display = "wa", ...) ordiArgAbsorber(lc[, 1], lc[, 2], wa[, 1], wa[, 2], FUN = segments, ...) class(lc) <- "ordispider" return(invisible(lc)) } pts <- scores(ord, display = display, ...) ## spids stores pointwise centroids to be returned invisibly ## (transposed here so that filling is easier, but back-transposed ## when returned). spids <- t(array(NA, dim=dim(pts), dimnames = dimnames(pts))) ## ordihull: draw lines from centre to the points in the hull if (inherits(ord, "ordihull")) groups <- attr(pts, "hulls") w <- eval(w) if (length(w) == 1) w <- rep(1, nrow(pts)) if (is.null(w)) w <- rep(1, nrow(pts)) if (!missing(show.groups)) { take <- groups %in% show.groups pts <- pts[take, , drop = FALSE] groups <- groups[take] w <- w[take] } out <- seq(along = groups) inds <- names(table(groups)) if (label) cntrs <- names <- NULL ## 'kk' removes NA scores kk <- complete.cases(pts) for (is in inds) { gr <- out[groups == is & kk] if (length(gr) > 1) { X <- pts[gr, ] W <- w[gr] ave <- apply(X, 2, weighted.mean, w = W) spids[,gr] <- ave ordiArgAbsorber(ave[1], ave[2], X[, 1], X[, 2], FUN = segments, ...) if (label) { cntrs <- rbind(cntrs, ave) names <- c(names, is) } } } if (label) ordiArgAbsorber(cntrs, label = names, FUN = ordilabel, ...) spids <- t(spids) class(spids) <- "ordispider" invisible(spids) } vegan/R/ordisegments.R0000644000176200001440000000261411655241124014405 0ustar liggesusers`ordisegments` <- function (ord, groups, levels, replicates, order.by, display = "sites", show.groups, label = FALSE, ...) { pts <- scores(ord, display = display, ...) npoints <- nrow(pts) if (missing(groups)) groups <- gl(levels, replicates, npoints) if (!missing(order.by)) { if (length(order.by) != nrow(pts)) stop(gettextf("the length of order.by (%d) does not match the number of points (%d)", length(order.by), nrow(pts))) ord <- order(order.by) pts <- pts[ord,] groups <- groups[ord] } if (!missing(show.groups)) { take <- groups %in% show.groups pts <- pts[take, , drop = FALSE] groups <- groups[take] } out <- seq(along = groups) inds <- names(table(groups)) ends <- names <- NULL for (is in inds) { gr <- out[groups == is] if (length(gr) > 1) { X <- pts[gr, , drop = FALSE] X0 <- X[-nrow(X), , drop = FALSE] X1 <- X[-1, , drop = FALSE] ordiArgAbsorber(X0[, 1], X0[, 2], X1[, 1], X1[, 2], FUN = segments, ...) if (label) { ends <- rbind(ends, X[c(1, nrow(X)), ]) names <- c(names, is, is) } } } if (label) ordiArgAbsorber(ends, labels = names, FUN = ordilabel, ...) invisible() } vegan/R/ordirgl.R0000644000176200001440000000471111611555072013346 0ustar liggesusers"ordirgl" <- function (object, display = "sites", choices = 1:3, type = "p", ax.col = "red", arr.col = "yellow", text, envfit, ...) { if (!require(rgl)) stop("Requires package 'rgl'") x <- scores(object, display = display, choices = choices, ...) if (ncol(x) < 3) stop("3D display needs three dimensions...") rgl.clear() if (type == "p") rgl.points(x[, 1], x[, 2], x[, 3], ...) else if (type == "t") { if (missing(text)) text <- rownames(x) rgl.texts(x[, 1], x[, 2], x[, 3], text, adj = 0.5, ...) } rgl.lines(range(x[, 1]), c(0, 0), c(0, 0), col = ax.col) rgl.lines(c(0, 0), range(x[, 2]), c(0, 0), col = ax.col) rgl.lines(c(0, 0), c(0, 0), range(x[, 3]), col = ax.col) rgl.texts(1.1 * max(x[, 1]), 0, 0, colnames(x)[1], col = ax.col, adj = 0.5) rgl.texts(0, 1.1 * max(x[, 2]), 0, colnames(x)[2], col = ax.col, adj = 0.5) rgl.texts(0, 0, 1.1 * max(x[, 3]), colnames(x)[3], col = ax.col, adj = 0.5) if (!missing(envfit) || (!is.null(object$CCA) && object$CCA$rank > 0)) { if (!missing(envfit)) object <- envfit bp <- scores(object, dis = "bp", choices = choices) cn <- scores(object, dis = "cn", choices = choices) if (!is.null(cn) && !any(is.na(cn))) { bp <- bp[!(rownames(bp) %in% rownames(cn)), , drop = FALSE] rgl.texts(cn[, 1], cn[, 2], cn[, 3], rownames(cn), col = arr.col, adj = 0.5) rgl.points(cn[, 1], cn[, 2], cn[, 3], size = 5, col = arr.col) } if (!is.null(bp) && nrow(bp) > 0) { mul <- c(range(x[, 1]), range(x[, 2]), range(x[, 3]))/c(range(bp[, 1]), range(bp[, 2]), range(bp[, 3])) mul <- mul[is.finite(mul) & mul > 0] mul <- min(mul) bp <- bp * mul for (i in 1:nrow(bp)) { rgl.lines(c(0, bp[i, 1]), c(0, bp[i, 2]), c(0, bp[i, 3]), col = arr.col) rgl.texts(1.1 * bp[i, 1], 1.1 * bp[i, 2], 1.1 * bp[i, 3], rownames(bp)[i], col = arr.col, adj = 0.5) } } } invisible() } vegan/R/ordiresids.R0000644000176200001440000000267711611555072014064 0ustar liggesusers`ordiresids` <- function(x, kind = c("residuals", "scale", "qqmath"), residuals = "working", type = c("p", "smooth", "g"), formula, ...) { require(lattice) || stop("requires package lattice") kind <- match.arg(kind) if (!inherits(x, "cca") || is.null(x$CCA) || x$CCA$rank == 0) stop("function is only available for constrained ordination") fit <- fitted(x, type = residuals) res <- residuals(x, type = residuals) ## remove the effects of row weights in CA if (!inherits(x, "rda")) { sqr <- sqrt(x$rowsum) fit <- sweep(fit, 1, sqr, "*") res <- sweep(res, 1, sqr, "*") } colnam <- rep(colnames(fit), each=nrow(fit)) rownam <- rep(rownames(fit), ncol(fit)) df <- data.frame(Fitted = as.vector(fit), Residuals = as.vector(res)) if (!is.null(rownam)) df$Sites <- rownam if (!is.null(colnam)) df$Species <- colnam if (kind == "residuals") { if (missing(formula)) formula <- as.formula(Residuals ~ Fitted) pl <- xyplot(formula, data = df, type = type, ...) } if (kind == "scale") { if (missing(formula)) formula <- as.formula(sqrt(abs(Residuals)) ~ Fitted) pl <- xyplot(formula, data = df, type = type, ...) } if (kind == "qqmath") { if (missing(formula)) formula <- as.formula(~ Residuals) pl <- qqmath(formula, data = df, type = type, ...) } pl } vegan/R/ordipointlabel.R0000644000176200001440000000767711760220402014720 0ustar liggesusers### Modelled after maptools:::pointLabel. `ordipointlabel` <- function(x, display = c("sites", "species"), choices = c(1,2), col=c(1,2), pch=c("o","+"), font = c(1,1), cex=c(0.8, 0.8), add = FALSE, select, ...) { xy <- list() ## Some 'scores' accept only one 'display': a workaround for (nm in display) xy[[nm]] <- scores(x, display = nm, choices = choices, ...) ##xy <- scores(x, display = display, choices = choices, ...) ## remove `select`ed observations from scores as per text.cca ## only useful if we are displaying only one set of scores if(!missing(select)) { if(isTRUE(all.equal(length(display), 1L))) { xy[[1]] <- .checkSelect(select, xy[[1]]) } else { warning("'select' does not apply when plotting more than one set of scores.\n'select' was ignored.") } } if (length(display) > 1) { col <- rep(col, sapply(xy, nrow)) pch <- rep(pch, sapply(xy, nrow)) font <- rep(font, sapply(xy, nrow)) cex <- rep(cex, sapply(xy, nrow)) tmp <- xy[[1]] for (i in 2:length(display)) tmp <- rbind(tmp, xy[[i]]) xy <- tmp } else { xy <- xy[[1]] if (length(col) < nrow(xy)) col <- col[1] if (length(pch) < nrow(xy)) pch <- pch[1] if (length(font) < nrow(xy)) font <- font[1] } if (!add) pl <- ordiplot(x, display = display, choices = choices, type="n", ...) labels <- rownames(xy) em <- strwidth("m", cex = min(cex), font = min(font)) ex <- strheight("x", cex = min(cex), font = min(font)) ltr <- em*ex w <- strwidth(labels, cex = cex, font = font) + em h <- strheight(labels, cex = cex, font = font) + ex box <- cbind(w, h) ## offset: 1 up, 2..4 sides, 5..8 corners makeoff <- function(pos, lab) { cbind(c(0,1,0,-1,0.9,0.9,-0.9,-0.9)[pos] * lab[,1]/2, c(1,0,-1,0,0.8,-0.8,-0.8,0.8)[pos] * lab[,2]/2) } ## amount of overlap overlap <- function(xy1, off1, xy2, off2) { pmax(0, pmin(xy1[,1] + off1[,1]/2, xy2[,1] + off2[,1]/2) -pmax(xy1[,1] - off1[,1]/2, xy2[,1] - off2[,1]/2)) * pmax(0, pmin(xy1[,2] + off1[,2]/2, xy2[,2] + off2[,2]/2) -pmax(xy1[,2] - off1[,2]/2, xy2[,2] - off2[,2]/2)) } ## indices of overlaps in lower triangular matrix n <- nrow(xy) j <- as.vector(as.dist(row(matrix(0, n, n)))) k <- as.vector(as.dist(col(matrix(0, n, n)))) ## Find labels that may overlap... maylap <- overlap(xy[j,], 2*box[j,], xy[k,], 2*box[k,]) > 0 ## ... and work only with those j <- j[maylap] k <- k[maylap] jk <- sort(unique(c(j,k))) ## SANN: no. of iterations & starting positions nit <- min(48 * length(jk), 10000) pos <- rep(1, n) ## Criterion: overlap + penalty for positions other than directly ## above and especially for corners fn <- function(pos) { off <- makeoff(pos, box) val <- sum(overlap(xy[j,]+off[j,], box[j,], xy[k,]+off[k,], box[k,])) val <- val/ltr + sum(pos>1)*0.1 + sum(pos>4)*0.1 } ## Move a label of one point gr <- function(pos) { take <- sample(jk, 1) pos[take] <- sample((1:8)[-pos[take]], 1) pos } ## Simulated annealing sol <- optim(par = pos, fn = fn, gr = gr, method="SANN", control=list(maxit=nit)) if (!add) points(xy, pch = pch, col = col, cex=cex, ...) lab <- xy + makeoff(sol$par, box) text(lab, labels=labels, col = col, cex = cex, font = font, ...) pl <- list(points = xy) pl$labels <- lab attr(pl$labels, "font") <- font args <- list(tcex = cex, tcol = col, pch = pch, pcol = col, pbg = NA, pcex = cex) pl$args <- args pl$par <- par(no.readonly = TRUE) pl$dim <- par("din") attr(pl, "optim") <- sol class(pl) <- c("ordipointlabel", "orditkplot", class(pl)) invisible(pl) } vegan/R/ordiplot3d.R0000644000176200001440000000761411762441740013777 0ustar liggesusers`ordiplot3d` <- function (object, display = "sites", choices = 1:3, ax.col = 2, arr.len = 0.1, arr.col = 4, envfit, xlab, ylab, zlab, ...) { require(scatterplot3d) || stop("Requires package 'scatterplot3d'") x <- scores(object, display = display, choices = choices, ...) if (missing(xlab)) xlab <- colnames(x)[1] if (missing(ylab)) ylab <- colnames(x)[2] if (missing(zlab)) zlab <- colnames(x)[3] ### scatterplot3d does not allow setting equal aspect ratio. We ### try to compensate this by setting equal limits for all axes ### and hoping the graph is more or less square so that the lines ### come correctly out. rnge <- apply(x, 2, range) scl <- c(-0.5, 0.5) * max(apply(rnge, 2, diff)) pl <- ordiArgAbsorber(x[, 1], x[, 2], x[, 3], xlab = xlab, ylab = ylab, zlab = zlab, xlim = mean(rnge[,1]) + scl, ylim = mean(rnge[,2]) + scl, zlim = mean(rnge[,3]) + scl, FUN = "scatterplot3d", ...) pl$points3d(range(x[, 1]), c(0, 0), c(0, 0), type = "l", col = ax.col) pl$points3d(c(0, 0), range(x[, 2]), c(0, 0), type = "l", col = ax.col) pl$points3d(c(0, 0), c(0, 0), range(x[, 3]), type = "l", col = ax.col) if (!missing(envfit) || (!is.null(object$CCA) && object$CCA$rank > 0)) { if (!missing(envfit)) object <- envfit bp <- scores(object, dis = "bp", choices = choices, ...) cn <- scores(object, dis = "cn", choices = choices, ...) if (!is.null(cn) && !any(is.na(cn))) { bp <- bp[!(rownames(bp) %in% rownames(cn)), , drop = FALSE] cn.xyz <- pl$xyz.convert(cn) points(cn.xyz, pch = "+", cex = 2, col = arr.col) } if (!is.null(bp) && nrow(bp) > 0) { tmp <- pl$xyz.convert(bp) mul <- ordiArrowMul(cbind(tmp$x, tmp$y), fill=1) bp.xyz <- pl$xyz.convert(bp * mul) orig <- pl$xyz.convert(0, 0, 0) arrows(orig$x, orig$y, bp.xyz$x, bp.xyz$y, length = arr.len, col = arr.col) } } ## save the location of the origin pl$origin <- matrix(unlist(pl$xyz.convert(0, 0, 0)), nrow=1) ## Add function that flattens 3d envfit object so that it can be ## projected on the created 3d graph xyz2xy <- pl$xyz.convert envfit.convert <- function(object) { if (!is.null(object$vectors)) { rn <- rownames(object$vectors$arrows) arr <- object$vectors$arrows[, choices, drop = FALSE] arr <- sapply(xyz2xy(arr), cbind) if (!is.matrix(arr)) arr <- matrix(arr, ncol = 2) arr <- sweep(arr, 2, pl$origin) rownames(arr) <- rn object$vectors$arrows <- arr } if (!is.null(object$factors)) { rn <- rownames(object$factors$centroids) object$factors$centroids <- object$factors$centroids[ ,choices, drop = FALSE] object$factors$centroids <- sapply(xyz2xy(object$factors$centroids), cbind) if (!is.matrix(object$factors$centroids)) object$factors$centroids <- matrix(object$factors$centroids, ncol = 2) rownames(object$factors$centroids) <- rn } object } pl$envfit.convert <- envfit.convert ## save projected coordinates of points tmp <- pl$xyz.convert(x) pl$points <- cbind(tmp$x, tmp$y) rownames(pl$points) <- rownames(x) if (exists("bp.xyz")) { pl$arrows <- cbind(bp.xyz$x, bp.xyz$y) rownames(pl$arrows) <- rownames(bp) } if (exists("cn.xyz")) { pl$centroids <- cbind(cn.xyz$x, cn.xyz$y) rownames(pl$centroids) <- rownames(cn) } class(pl) <- c("ordiplot3d", "ordiplot") invisible(pl) } vegan/R/ordiplot.R0000644000176200001440000000606611622667317013555 0ustar liggesusers`ordiplot` <- function (ord, choices = c(1, 2), type = "points", display, xlim, ylim, cex = 0.7, ...) { ## local functions to absorb non-par arguments of plot.default localPoints <- function(..., log, frame.plot, panel.first, panel.last, axes) points(...) localText <- function(..., log, frame.plot, panel.first, panel.last, axes) text(...) if (!is.null(attr(ord, "class")) && (class(ord) == "decorana" || any(class(ord) == "cca"))) { if (missing(display)) out <- plot(ord, choices, type = type, xlim = xlim, ylim = ylim, ...) else out <- plot(ord, choices, type = type, display = display, xlim = xlim, ylim = ylim, ...) } else { type <- match.arg(type, c("points", "text", "none")) ## Matching displays could be done better (see ## ordipointlabel), but this may not be yet broken, so... dplays <- c("sites", "species") if (missing(display)) display <- dplays else display <- match.arg(display, dplays, several.ok = TRUE) X <- Y <- NULL if ("sites" %in% display) X <- scores(ord, choices = choices, display = "sites") if ("species" %in% display) { options(show.error.messages = FALSE) Y <- try(scores(ord, choices = choices, display = "species")) options(show.error.messages = TRUE) if (inherits(Y, "try-error")) { warning("Species scores not available") Y <- NULL } else if (!is.null(X) && NROW(X) == NROW(Y) && isTRUE(all.equal.numeric(X, Y, check.attributes = FALSE))) { Y <- NULL warning("Species scores not available") } } ## Use linestack and exit if there is only one variable if (NCOL(X) == 1 && NCOL(Y) == 1) { pl <- linestack(X, ylim = range(c(X,Y), na.rm=TRUE), ...) if (!is.null(Y)) linestack(Y, side = "left", add = TRUE, ...) return(invisible(pl)) } tmp <- apply(rbind(X, Y), 2, range, na.rm=TRUE) if (missing(xlim)) xlim <- tmp[, 1] if (missing(ylim)) ylim <- tmp[, 2] plot(tmp, xlim = xlim, ylim = ylim, asp = 1, type = "n", ...) if (type == "points") { if (!is.null(X)) localPoints(X, pch = 1, col = 1, cex = cex, ...) if (!is.null(Y)) localPoints(Y, pch = "+", col = "red", cex = cex, ...) } if (type == "text") { if (!is.null(X)) localText(X, labels = rownames(X), col = 1, cex = cex, ...) if (!is.null(Y)) localText(Y, labels = rownames(Y), col = "red", cex = cex, ...) } out <- list(sites = X, species = Y) } class(out) <- "ordiplot" invisible(out) } vegan/R/ordimedian.R0000644000176200001440000000276611667453073014040 0ustar liggesusers## Ordimedian finds the spatial medians for groups. Spatial medians ## are L1 norms or statistics that minimize sum of distances of points ## from the statistic and 1d they are the medians. The current ## algorithm minimizes the L1 norm with optim and is pretty ## inefficient. Package ICSNP has a better algorithm (and we may steal ## it from them later). `ordimedian` <- function(ord, groups, display = "sites", label = FALSE, ...) { ## Sum of distances from the statistic medfun <- function(x, ord) sum(sqrt(rowSums(sweep(ord, 2, x)^2)), na.rm = TRUE) ## derivative of medfun (if NULL, optim will use numerical ## differentiation) dmedfun <- function(x, ord) { up <- -sweep(ord, 2, x) dn <- sqrt(rowSums(sweep(ord, 2, x)^2)) colSums(sweep(up, 1, dn, "/")) } #dmedfun <- NULL pts <- scores(ord, display = display, ...) inds <- names(table(groups)) medians <- matrix(NA, nrow = length(inds), ncol = ncol(pts)) rownames(medians) <- inds colnames(medians) <- colnames(pts) for (i in inds) { X <- pts[groups == i, , drop = FALSE] if (NROW(X) > 0) medians[i, ] <- optim(apply(X, 2, median, na.rm = TRUE), fn = medfun, gr = dmedfun, ord = X, method = "BFGS")$par if(label) ordiArgAbsorber(medians[i,1], medians[i,2], label = i, FUN = text, ...) } invisible(medians) } vegan/R/ordilattice.getEnvfit.R0000644000176200001440000000153711221667310016140 0ustar liggesusers`ordilattice.getEnvfit` <- function(formula, object, envfit, choices = 1:3, ...) { if (!missing(envfit) && !is.null(envfit)) object <- envfit bp <- scores(object, display = "bp", choices = choices, ...) cn <- scores(object, display = "cn", choices = choices, ...) bp <- bp[!(rownames(bp) %in% rownames(cn)),, drop=FALSE] left <- as.character(formula[[2]]) right <- formula[[3]] if (length(right) == 3) right <- right[[2]] right <- as.character(right) if (all(c(left,right) %in% colnames(bp))) bp <- bp[, c(left,right), drop=FALSE] else bp <- NULL if (!is.null(bp) && nrow(bp) == 0) bp <- NULL if (!is.null(ncol(cn)) && all(c(left,right) %in% colnames(cn))) cn <- cn[, c(left,right), drop=FALSE] else cn <- NULL list(arrows = bp, centres = cn) } vegan/R/ordilabel.R0000644000176200001440000000306112075310654013636 0ustar liggesusers`ordilabel` <- function(x, display, labels, choices = c(1,2), priority, select, cex = 0.8, fill = "white", border = NULL, col = NULL, xpd = TRUE, ...) { if (missing(display)) display <- "sites" x <- scores(x, choices = choices, display = display, ...) if (missing(labels)) labels <- rownames(x) if (!missing(select)) { x <- .checkSelect(select, x) labels <- .checkSelect(select, labels) } if (!missing(priority)) { if (!missing(select)) priority <- priority[select] ord <- order(priority) x <- x[ord, ] labels <- labels[ord] } em <- strwidth("m", cex = cex, ...) ex <- strheight("x", cex = cex, ...) w <- (strwidth(labels, cex=cex,...) + em/1.5)/2 h <- (strheight(labels, cex = cex, ...) + ex/1.5)/2 if (is.null(col)) if (!is.null(border)) col <- border else col <- par("fg") for (i in 1:nrow(x)) { ## polygon(x[i,1] + c(-1,1,1,-1)*w[i], x[i,2] + c(-1,-1,1,1)*h[i], ## col = fill, border = border, xpd = xpd) ## text(x[i,1], x[i,2], labels = labels[i], cex = cex, col = col, ## xpd = xpd, ...) ordiArgAbsorber(x[i,1] + c(-1,1,1,-1)*w[i], x[i,2] + c(-1,-1,1,1)*h[i], col = fill, border = border, xpd = xpd, FUN = polygon, ...) ordiArgAbsorber(x[i,1], x[i,2], labels = labels[i], cex = cex, col = col, xpd = xpd, FUN = text, ...) } invisible(x) } vegan/R/ordihull.R0000644000176200001440000000415211760064522013525 0ustar liggesusers`ordihull` <- function (ord, groups, display = "sites", draw = c("lines", "polygon", "none"), col = NULL, alpha = 127, show.groups, label = FALSE, ...) { draw <- match.arg(draw) ## Internal function to find the polygon centre polycentre <- function(x) { n <- nrow(x) if (n < 4) return(colMeans(x[-n, ])) xy <- x[-n, 1] * x[-1, 2] - x[-1, 1] * x[-n, 2] A <- sum(xy)/2 xc <- sum((x[-n, 1] + x[-1, 1]) * xy)/A/6 yc <- sum((x[-n, 2] + x[-1, 2]) * xy)/A/6 c(xc, yc) } ## Make semitransparent fill colour if (draw == "polygon" && !is.null(col)) col <- rgb(t(col2rgb(col)), alpha = alpha, maxColorValue = 255) pts <- scores(ord, display = display, ...) if (!missing(show.groups)) { take <- groups %in% show.groups pts <- pts[take, , drop = FALSE] groups <- groups[take] } out <- seq(along = groups) inds <- names(table(groups)) res <- list() if (label) cntrs <- names <- NULL ## Remove NA scores kk <- complete.cases(pts) for (is in inds) { gr <- out[groups == is & kk] if (length(gr) > 1) { X <- pts[gr, ] hpts <- chull(X) hpts <- c(hpts, hpts[1]) if (draw == "lines") ordiArgAbsorber(X[hpts, ], FUN = lines, col = if(is.null(col)) par("fg") else col, ...) else if (draw == "polygon") ordiArgAbsorber(X[hpts,], FUN = polygon, col = col, ...) if (label && draw != "none") { cntrs <- rbind(cntrs, polycentre(X[hpts,])) names <- c(names, is) } res[[is]] <- X[hpts,] } } if (label && draw != "none") { if (draw == "lines") ordiArgAbsorber(cntrs[,1], cntrs[,2], labels = names, col = col, FUN = text, ...) else ordiArgAbsorber(cntrs, labels = names, col = NULL, FUN = ordilabel, ...) } class(res) <- "ordihull" invisible(res) } vegan/R/ordigrid.R0000644000176200001440000000076411422036737013515 0ustar liggesusers"ordigrid" <- function (ord, levels, replicates, display = "sites", lty=c(1,1), col=c(1,1), lwd = c(1,1), ...) { pts <- scores(ord, display = display, ...) npoints <- nrow(pts) gr <- gl(levels, replicates, npoints) ordisegments(pts, groups = gr, lty = lty[1], col = col[1], lwd = lwd[1], ...) gr <- gl(replicates, 1, npoints) ordisegments(pts, groups = gr, lty = lty[2], col = col[2], lwd = lwd[2], ...) invisible() } vegan/R/ordiellipse.R0000644000176200001440000000504311760064522014216 0ustar liggesusers`ordiellipse` <- function (ord, groups, display = "sites", kind = c("sd", "se"), conf, draw = c("lines", "polygon", "none"), w = weights(ord, display), col = NULL, alpha = 127, show.groups, label = FALSE, ...) { weights.default <- function(object, ...) NULL kind <- match.arg(kind) draw <- match.arg(draw) pts <- scores(ord, display = display, ...) ## ordiellipse only works with 2D data (2 columns) pts <- as.matrix(pts) if (ncol(pts) > 2) pts <- pts[ , 1:2, drop = FALSE] if (ncol(pts) < 2) stop("ordiellipse needs two dimensions") w <- eval(w) if (length(w) == 1) w <- rep(1, nrow(pts)) if (is.null(w)) w <- rep(1, nrow(pts)) ## make semitransparent fill if (draw == "polygon" && !is.null(col)) col <- rgb(t(col2rgb(col)), alpha = alpha, maxColorValue = 255) if (!missing(show.groups)) { take <- groups %in% show.groups pts <- pts[take, , drop = FALSE] groups <- groups[take] w <- w[take] } out <- seq(along = groups) inds <- names(table(groups)) res <- list() if (label) cntrs <- names <- NULL ## Remove NA scores kk <- complete.cases(pts) for (is in inds) { gr <- out[groups == is & kk] if (length(gr) > 2) { X <- pts[gr, ] W <- w[gr] mat <- cov.wt(X, W) if (kind == "se") mat$cov <- mat$cov/mat$n.obs if (missing(conf)) t <- 1 else t <- sqrt(qchisq(conf, 2)) xy <- veganCovEllipse(mat$cov, mat$center, t) if (draw == "lines") ordiArgAbsorber(xy, FUN = lines, col = if(is.null(col)) par("fg") else col, ...) else if (draw == "polygon") ordiArgAbsorber(xy[, 1], xy[, 2], col = col, FUN = polygon, ...) if (label && draw != "none") { cntrs <- rbind(cntrs, mat$center) names <- c(names, is) } mat$scale <- t res[[is]] <- mat } } if (label && draw != "none") { if (draw == "lines") ordiArgAbsorber(cntrs[,1], cntrs[,2], labels=names, col = col, FUN = text, ...) else ordiArgAbsorber(cntrs, labels = names, col = NULL, FUN = ordilabel, ...) } class(res) <- "ordiellipse" invisible(res) } vegan/R/ordicluster.R0000644000176200001440000000176411237462302014245 0ustar liggesusers"ordicluster" <- function (ord, cluster, prune=0, display="sites", w = weights(ord, display), ...) { weights.default <- function(object, ...) NULL w <- eval(w) mrg <- cluster$merge ord <- scores(ord, display = display, ...) if (nrow(mrg) != nrow(ord) - 1) stop("Dimensions do not match in 'ord' and 'cluster'") if (length(w) == 1) w <- rep(w, nrow(ord)) n <- if (is.null(w)) rep(1, nrow(ord)) else w go <- ord for (i in 1: (nrow(mrg) - prune)) { a <- mrg[i,1] b <- mrg[i,2] one <- if (a < 0) ord[-a,] else go[a,] two <- if (b < 0) ord[-b,] else go[b,] n1 <- if (a < 0) n[-a] else n[a] n2 <- if (b < 0) n[-b] else n[b] ordiArgAbsorber(one[1], one[2], two[1], two[2], FUN = segments, ...) xm <- weighted.mean(c(one[1],two[1]), w=c(n1,n2)) ym <- weighted.mean(c(one[2],two[2]), w=c(n1,n2)) go[i,] <- c(xm,ym) n[i] <- n1 + n2 } invisible(cbind(go, "w"=n)) } vegan/R/ordicloud.R0000644000176200001440000000113410714442306013662 0ustar liggesusers`ordicloud` <- function(x, data = NULL, formula, display = "sites", choices=1:3, panel = "panel.ordi3d", prepanel = "prepanel.ordi3d", ...) { localCloud <- function(..., shrink, origin, scaling) cloud(...) require(lattice) || stop("requires package 'lattice'") x <- as.data.frame(scores(x, display = display, choices = choices, ...)) if (!is.null(data)) x <- cbind(x, data) if (missing(formula)) { v <- colnames(x) formula <- as.formula(paste(v[2], "~", v[1], "*", v[3])) } localCloud(formula, data = x, panel = panel, prepanel = prepanel, ...) } vegan/R/ordiarrows.R0000644000176200001440000000327611655241124014102 0ustar liggesusers`ordiarrows` <- function (ord, groups, levels, replicates, order.by, display = "sites", show.groups, startmark, label = FALSE, ...) { pts <- scores(ord, display = display, ...) npoints <- nrow(pts) if (missing(groups)) groups <- gl(levels, replicates, npoints) if (!missing(order.by)) { if (length(order.by) != nrow(pts)) stop(gettextf("the length of order.by (%d) does not match the number of points (%d)", length(order.by), nrow(pts))) ord <- order(order.by) pts <- pts[ord,] groups <- groups[ord] } if (!missing(show.groups)) { take <- groups %in% show.groups pts <- pts[take, , drop = FALSE] groups <- groups[take] } out <- seq(along = groups) inds <- names(table(groups)) starts <- names <- NULL for (is in inds) { gr <- out[groups == is] if (length(gr) > 1) { X <- pts[gr, , drop = FALSE] X0 <- X[-nrow(X), , drop = FALSE] X1 <- X[-1, , drop = FALSE] nseg <- nrow(X0) if (!missing(startmark)) points(X0[1,1], X0[1,2], pch=startmark, ...) if (label) { starts <- rbind(starts, X0[1,]) names <- c(names, is) } if (nseg > 1) ordiArgAbsorber(X0[-nseg,1], X0[-nseg,2], X1[-nseg,1], X1[-nseg,2], FUN = segments, ...) ordiArgAbsorber(X0[nseg, 1], X0[nseg, 2], X1[nseg, 1], X1[nseg, 2], FUN = arrows, ...) } } if (label) ordiArgAbsorber(starts, labels = names, FUN = ordilabel, ...) invisible() } vegan/R/ordiTerminfo.R0000644000176200001440000000051611254702640014342 0ustar liggesusers"ordiTerminfo" <- function(d, data) { Terms <- delete.response(d$terms.expand) if (length(attr(Terms, "term.labels")) == 0) mf <- data.frame(NULL) else mf <- d$modelframe xlev <- .getXlevels(Terms, mf) ordered <- sapply(mf, is.ordered) list(terms = Terms, xlev = xlev, ordered = ordered) } vegan/R/ordiR2step.R0000644000176200001440000000747512056671653013763 0ustar liggesusers### Forward selection to maximize R2.adjusted, but stopping once the ### R2.adjusted of the maximum model ('scope') is exceeded, after ### Blanchet, Legendre & Borcard: Ecology 89, 2623--2623; 2008. `ordiR2step` <- function(object, scope, direction = c("both", "forward"), Pin = 0.05, R2scope = TRUE, pstep = 100, perm.max = 1000, trace = TRUE, ...) { direction <- match.arg(direction) if (missing(scope)) stop("needs scope") ## Works only for rda(): cca() does not have (yet) R2.adjusted if (!inherits(object, "rda")) stop("can be used only with rda() or capscale()") ## Get R2 of the original object if (is.null(object$CCA)) R2.0 <- 0 else R2.0 <- RsquareAdj(object)$adj.r.squared ## Get R2 of the scope if (inherits(scope, "rda")) scope <- delete.response(formula(scope)) if (!inherits(scope, "formula")) scope <- reformulate(scope) if (R2scope) R2.all <- RsquareAdj(update(object, scope)) else R2.all <- list(adj.r.squared = NA) ## Check that the full model can be evaluated if (is.na(R2.all$adj.r.squared) && R2scope) stop("the upper scope cannot be fitted (too many terms?)") R2.all <- R2.all$adj.r.squared ## Collect data to anotab returned as the 'anova' object anotab <- list() ## Step forward and continue as long as R2.adj improves and R2.adj ## remains below R2.adj < R2.all R2.previous <- R2.0 drops <- NULL repeat { if (trace) { cat("Step: R2.adj=", R2.previous, "\n") cat(pasteCall(formula(object)), "\n") } adds <- add.scope(object, scope) if (direction == "both") drops <- drop.scope(object) ## Nothing to add or drop, and we're done: break if (length(adds) == 0 && length(drops) == 0) break R2.adds <- numeric(length(adds) + length(drops)) if (length(adds)) adds <- paste("+", adds) if (length(drops)) drops <- paste("-", drops) names(R2.adds) <- c(adds, drops) ## Loop over add scope for (trm in seq_along(R2.adds)) { fla <- paste(". ~ .", names(R2.adds[trm])) R2.tmp <- RsquareAdj(update(object, fla))$adj.r.squared if (!length(R2.tmp)) R2.tmp <- 0 R2.adds[trm] <- R2.tmp } best <- which.max(R2.adds) if (trace) { out <- sort(c("" = R2.all, "" = R2.previous, R2.adds), decreasing = TRUE) out <- as.matrix(out) colnames(out) <- "R2.adjusted" print(out) cat("\n") } ## See if the best should be kept ## First criterion: R2.adj improves and is still lower or ## equal than for the full model of the scope if (R2.adds[best] > R2.previous && if (R2scope) R2.adds[best] <= R2.all else TRUE) { ## Second criterion: added variable is significant tst <- add1(object, scope = adds[best], test="permu", pstep = pstep, perm.max = perm.max, alpha = Pin, trace = FALSE, ...) if (trace) { print(tst[-1,]) cat("\n") } if (tst[,"Pr(>F)"][2] > Pin) break fla <- paste("~ .", adds[best]) object <- update(object, fla) R2.previous <- RsquareAdj(object)$adj.r.squared anotab <- rbind(anotab, cbind("R2.adj" = R2.previous, tst[2,])) } else { break } } if (NROW(anotab) > 0) { anotab <- rbind(anotab, "" = c(R2.all, rep(NA, 5))) class(anotab) <- c("anova", class(anotab)) object$anova <- anotab } object } vegan/R/ordiParseFormula.R0000644000176200001440000000747611515344333015174 0ustar liggesusers"ordiParseFormula" <- function (formula, data, xlev = NULL, envdepth = 2, na.action = na.fail, subset = NULL) { if (missing(data)) data <- environment(formula) Terms <- terms(formula, "Condition", data = data) flapart <- fla <- formula <- formula(Terms, width.cutoff = 500) specdata <- formula[[2]] X <- eval.parent(specdata, n = envdepth) ## X is usually a matrix, but it is "dist" with capscale(): X <- as.matrix(X) indPartial <- attr(Terms, "specials")$Condition zmf <- ymf <- Y <- Z <- NULL formula[[2]] <- NULL if (!is.null(indPartial)) { partterm <- attr(Terms, "variables")[1 + indPartial] Pterm <- sapply(partterm, function(x) deparse(x[[2]], width.cutoff=500)) Pterm <- paste(Pterm, collapse = "+") P.formula <- as.formula(paste("~", Pterm), env = environment(formula)) zlev <- xlev[names(xlev) %in% Pterm] zmf <- model.frame(P.formula, data, na.action = na.pass, xlev = zlev) partterm <- sapply(partterm, function(x) deparse(x, width.cutoff=500)) formula <- update(formula, paste("~.-", paste(partterm, collapse = "-"))) flapart <- update(formula, paste(" ~ . +", Pterm)) } if (formula[[2]] == "1" || formula[[2]] == "0") Y <- NULL else { if (exists("Pterm")) xlev <- xlev[!(names(xlev) %in% Pterm)] ymf <- model.frame(formula, data, na.action = na.pass, xlev = xlev) } ## Combine condition an constrain data frames if (!is.null(zmf)) { ncond <- NCOL(zmf) if (!is.null(ymf)) mf <- cbind(zmf, ymf) else mf <- zmf } else { ncond <- 0 mf <- ymf } ## Select a subset of data and species if (!is.null(subset)) { subset <- eval(subset, if (inherits(data, "data.frame")) cbind(data, X) else as.data.frame(X), parent.frame(2)) X <- X[subset, , drop = FALSE] if (NROW(mf) > 0) mf <- mf[subset, , drop = FALSE] } ## Get na.action attribute, remove NA and drop unused levels if (NROW(mf) > 0) { mf <- model.frame(formula(mf), mf, xlev = xlev, na.action = na.action, drop.unused.levels = TRUE) nas <- attr(mf, "na.action") ## Check if there are one-level factors after subset and na.action for (i in 1:ncol(mf)) if (is.factor(mf[[i]]) && length(levels(mf[[i]])) <= 1) levels(mf[[i]]) <- c(levels(mf[[i]]), ".ThisVarHasOnly1Level") } else { nas <- NULL } ## Check and remove NA in dependent data if (!is.null(nas)) { excluded <- X[nas, , drop = FALSE] X <- X[-nas,, drop=FALSE] } else { excluded <- NULL } if (ncond > 0) { Z <- model.matrix(P.formula, mf) if (any(colnames(Z) == "(Intercept)")) Z <- Z[, -which(colnames(Z) == "(Intercept)"), drop = FALSE] } if (NROW(mf) > 0) { Y <- model.matrix(formula, mf) if (any(colnames(Y) == "(Intercept)")) Y <- Y[, -which(colnames(Y) == "(Intercept)"), drop = FALSE] if (NCOL(Y) == 0) Y <- NULL } X <- as.matrix(X) rownames(X) <- rownames(X, do.NULL = FALSE) colnames(X) <- colnames(X, do.NULL = FALSE) if (!is.null(Y)) { rownames(Y) <- rownames(Y, do.NULL = FALSE) colnames(Y) <- colnames(Y, do.NULL = FALSE) } if (!is.null(Z)) { rownames(Z) <- rownames(Z, do.NULL = FALSE) colnames(Z) <- colnames(Z, do.NULL = FALSE) } list(X = X, Y = Y, Z = Z, terms = terms(fla, width.cutoff = 500), terms.expand = terms(flapart, width.cutoff = 500), modelframe = mf, subset = subset, na.action = nas, excluded = excluded) } vegan/R/ordiNAexclude.R0000644000176200001440000000405511252374545014440 0ustar liggesusers### A pair of functions to handle na.action = na.exclude in cca and ### rda (and capscale in the future?). Function ordiNAexclude finds ### the WA scores for NA constraints if possible, and puts these into ### ordination object. Function ordiNApredict pads the result scores ### with NA or scores if available. `ordiNAexclude` <- function(x, excluded) { ## Check that there is a na.action of class "exclude" nas <- x$na.action if (is.null(nas)) return(x) ## add a 'residuals' item, because step, add1.default and ## drop1.default use this to check that number of observations ## does not change in sequential fits. x$residuals.zombie <- rep(TRUE, max(0, nrow(x$CA$u))) ## rowsums for CA (in RDA/PCA rowsum = NA) if (!inherits(x, "rda")) x$rowsum.excluded <- rowSums(excluded)/x$grand.total ## Estimate WA scores for NA cases with newdata of excluded ## observations if (is.null(x$pCCA) && inherits(nas, "exclude") && !inherits(x, "capscale")) { if (!is.null(x$CCA)) x$CCA$wa.excluded <- predict(x, newdata = excluded, type = "wa", model = "CCA") if (!is.null(x$CA)) x$CA$u.excluded <- predict(x, newdata = excluded, type = "wa", model = "CA") } x } ### Put NA or fitted WA among the scores `ordiNApredict` <- function(omit, x) { ## Only do this if omit is of class "exclude" if (!inherits(omit, "exclude")) return(x) if (!inherits(x, "rda")) { x$rowsum <- napredict(omit, x$rowsum) if (inherits(omit, "exclude")) x$rowsum[omit] <- x$rowsum.excluded } if (!is.null(x$CCA)) { x$CCA$u <- napredict(omit, x$CCA$u) x$CCA$wa <- napredict(omit, x$CCA$wa) if (!is.null(x$CCA$wa.excluded)) x$CCA$wa[omit,] <- x$CCA$wa.excluded } if (!is.null(x$CA)) { x$CA$u <- napredict(omit, x$CA$u) if (!is.null(x$CA$u.excluded)) x$CA$u[omit,] <- x$CA$u.excluded } x } vegan/R/ordiGetData.R0000644000176200001440000000044611253715712014075 0ustar liggesusers`ordiGetData` <- function (call, env) { call$scale <- call$distance <- call$comm <- call$add <- call$dfun <- call$sqrt.dist <- call$metaMDSdist <- call$subset <- NULL call$na.action <- na.pass call[[2]] <- NULL call[[1]] <- as.name("model.frame") eval(call, env) } vegan/R/ordiArrowMul.R0000644000176200001440000000101510776161111014322 0ustar liggesusers### Scaling of arrows to 'fill' a plot with vectors centred at 'at'. ### Plot dims from 'par("usr")' and arrow heads are in 'x'. `ordiArrowMul` <- function (x, at = c(0,0), fill=0.75) { u <- par("usr") u <- u - rep(at, each = 2) r <- c(range(x[,1]), range(x[,2])) ## 'rev' takes care of reversed axes like xlim(1,-1) rev <- sign(diff(u))[-2] if (rev[1] < 0) u[1:2] <- u[2:1] if (rev[2] < 0) u[3:4] <- u[4:3] u <- u/r u <- u[is.finite(u) & u > 0] fill * min(u) } vegan/R/ordiArgAbsorber.R0000644000176200001440000000023411046547727014761 0ustar liggesusers`ordiArgAbsorber` <- function(..., shrink, origin, scaling, triangular, display, choices, const, FUN) match.fun(FUN)(...) vegan/R/orderingKM.R0000644000176200001440000000322210667741210013742 0ustar liggesusers`orderingKM` <- function(mat) { ### INPUT : ### mat (n x k): n the objects and k the descriptors ### This matrix must be integers and numeric ### And must not be binairy, it is the partition matrix ### output by cascadeKM ### OUTPUT : Ordered matrix ## Uses alternatively the fast USEPOWERALGORITHM provided by Legendre ## et al., or the standard R function cmdscale with matching ## coefficient provided by vegdist.c as method=50. USEPOWERALGORITHM <- TRUE ##Check up if(!is.matrix(mat)) stop("'mat' must be a matrix!") if(!is.numeric(mat)) stop("'mat' must be numeric!") if(any(is.na(mat))) stop("'NA' value was found in the matrix!") if(any(is.infinite(mat))) stop("'Inf' value was found in the matrix!") nb.desc=ncol(mat) nb.obj=nrow(mat) scores<-rep(0.0,nb.obj) if (USEPOWERALGORITHM) { scores<-as.vector(.Fortran("orderdata",as.integer(mat), as.integer(nb.obj), as.integer(nb.desc), sc=as.double(scores), PACKAGE="vegan")$sc) } else { d <- .C("veg_distance", x = as.double(mat), nr = nb.obj, nc = nb.desc, d = double(nb.obj * (nb.obj - 1)/2), diag = as.integer(FALSE), method = as.integer(50), PACKAGE = "vegan")$d attr(d, "Size") <- nb.obj attr(d, "Labels") <- dimnames(mat)[[1]] attr(d, "Diag") <- FALSE attr(d, "Upper") <- FALSE attr(d, "method") <- "matching" class(d) <- "dist" scores <- cmdscale(d, k = 1)[,1] } scores <- order(scores) mat<-mat[scores,] mat } vegan/R/oecosimu.R0000644000176200001440000001154012102246530013515 0ustar liggesusers`oecosimu` <- function(comm, nestfun, method, nsimul=99, burnin=0, thin=1, statistic = "statistic", alternative = c("two.sided", "less", "greater"), ...) { alternative <- match.arg(alternative) nestfun <- match.fun(nestfun) if (!is.function(method)) { method <- match.arg(method, c("r00", "r0", "r1", "r2", "c0", "swap", "tswap", "backtrack", "quasiswap", "r2dtable")) if (method == "r2dtable") { nr <- rowSums(comm) nc <- colSums(comm) permfun <- function(z) r2dtable(1, nr, nc)[[1]] } } else { permfun <- match.fun(method) method <- "custom" } quant <- method %in% c("r2dtable", "custom") ## binarize data with binary null models before getting statistics if (!quant) comm <- ifelse(comm > 0, 1, 0) ind <- nestfun(comm, ...) if (is.list(ind)) indstat <- ind[[statistic]] else indstat <- ind n <- length(indstat) simind <- matrix(0, nrow=n, ncol=nsimul) ## permutation for binary data if (!quant) { if (method %in% c("swap", "tswap")){ checkbrd <- 1 if (method == "tswap") { checkbrd <- sum(designdist(comm, "(J-A)*(J-B)", "binary")) M <- ncol(comm) N <- nrow(comm) checkbrd <- M*(M-1)*N*(N-1)/4/checkbrd thin <- round(thin*checkbrd) } attr(simind, "thin") <- thin attr(simind, "burnin") <- burnin x <- comm if (burnin > 0) x <- commsimulator(x, method= method, thin = round(checkbrd) * burnin) for(i in 1:nsimul) { x <- commsimulator(x, method = method, thin = thin) tmp <- nestfun(x, ...) if (is.list(tmp)) simind[,i] <- tmp[[statistic]] else simind[,i] <- tmp } } else { for (i in 1:nsimul) { x <- commsimulator(comm, method=method) tmp <- nestfun(x,...) if (is.list(tmp)) simind[,i] <- tmp[[statistic]] else simind[,i] <- tmp } } ## permutation for count data } else { if (!all(dim(comm) == dim(permfun(comm)))) stop("permutation function is not compatible with community matrix") ## sequential algorithms if (burnin > 0 || thin > 1) { if (burnin > 0) { m <- permfun(comm, burnin=burnin, thin=1) } else m <- comm for (i in 1:nsimul) { tmp <- nestfun(permfun(m, burnin=0, thin=thin), ...) if (is.list(tmp)) simind[, i] <- tmp[[statistic]] else simind[, i] <- tmp } attr(simind, "thin") <- thin attr(simind, "burnin") <- burnin ## not sequential algorithms } else { for (i in 1:nsimul) { tmp <- nestfun(permfun(comm), ...) if (is.list(tmp)) { simind[, i] <- tmp[[statistic]] } else simind[, i] <- tmp } attr(simind, "thin") <- NULL attr(simind, "burnin") <- NULL } } ## end of addition sd <- apply(simind, 1, sd, na.rm = TRUE) means <- rowMeans(simind, na.rm = TRUE) z <- (indstat - means)/sd if (any(sd < sqrt(.Machine$double.eps))) z[sd < sqrt(.Machine$double.eps)] <- 0 pless <- rowSums(indstat <= simind, na.rm = TRUE) pmore <- rowSums(indstat >= simind, na.rm = TRUE) if (any(is.na(simind))) { warning("some simulated values were NA and were removed") nsimul <- nsimul - rowSums(is.na(simind)) } p <- switch(alternative, two.sided = 2*pmin(pless, pmore), less = pless, greater = pmore) p <- pmin(1, (p + 1)/(nsimul + 1)) ## ADDITION: if z is NA then it is not correct to calculate p values ## try e.g. oecosimu(dune, sum, "permat") if (any(is.na(z))) p[is.na(z)] <- NA if (is.null(names(indstat)) && length(indstat) == 1) names(indstat) <- statistic ## $oecosimu cannot be added to a data frame, but this gives ## either an error or a mess if (is.data.frame(ind)) ind <- as.list(ind) if (!is.list(ind)) ind <- list(statistic = ind) if (method == "custom") attr(method, "permfun") <- permfun ind$oecosimu <- list(z = z, means = means, pval = p, simulated=simind, method=method, statistic = indstat, alternative = alternative) attr(ind, "call") <- match.call() class(ind) <- c("oecosimu", class(ind)) ind } vegan/R/nobs.R0000644000176200001440000000170411531465265012651 0ustar liggesusers### R 2.13.0 introduces nobs() method to get the number of ### observations. This file provides methods for vegan classes. `nobs.adonis` <- function(object, ...) NROW(object$coef.sites) `nobs.betadisper` <- function(object, ...) length(object$distances) `nobs.cca` <- function(object, ...) max(NROW(object$pCCA$u), NROW(object$CCA$u), NROW(object$CA$u)) `nobs.CCorA` <- function(object, ...) NROW(object$Cy) `nobs.decorana` <- function(object, ...) NROW(object$rproj) `nobs.isomap` <- function(object, ...) NROW(object$points) `nobs.metaMDS` <- function(object, ...) NROW(object$points) `nobs.pcnm` <- function(object, ...) NROW(object$vectors) `nobs.procrustes` <- function(object, ...) NROW(object$X) `nobs.rad` <- function(object, ...) length(object$y) `nobs.varpart` <- function(object, ...) object$part$n `nobs.wcmdscale` <- function(object, ...) NROW(object$points) vegan/R/no.shared.R0000644000176200001440000000100410667741210013556 0ustar liggesusers"no.shared" <- function(x) { N <- nrow(x <- as.matrix(x)) d <- .C("veg_distance", x = as.double(x), nr = N, nc = ncol(x), d = double(N * (N - 1)/2), diag = as.integer(FALSE), method = as.integer(99), PACKAGE="vegan")$d d <- as.logical(d) attr(d, "Size") <- N attr(d, "Labels") <- dimnames(x)[[1]] attr(d, "Diag") <- FALSE attr(d, "Upper") <- FALSE attr(d, "method") <- "no.shared" attr(d, "call") <- match.call() class(d) <- "dist" d } vegan/R/nestedtemp.R0000644000176200001440000000632512114162713014052 0ustar liggesusers`nestedtemp` <- function(comm, ...) { ## J Biogeogr 33, 924-935 (2006) says that Atmar & Patterson try ## to pack presences and absence to minimal matrix temperature, ## and the following routines try to reproduce the (partly verbal) ## description. Index s should pack ones, and index t should pack ## zeros, and the final ordering should be "a compromise". colpack <- function(x, rr) { ind <- matrix(rep(rr, ncol(x)), nrow=nrow(x)) s <- -colSums((x*ind)^2) t <- -colSums((nrow(x) - (1-x)*ind + 1)^2) st <- rank(s+t, ties.method = "random") st } rowpack <- function(x, cr) { ind <- matrix(rep(cr, each=nrow(x)), nrow=nrow(x)) s <- -rowSums((x*ind)^2) t <- -rowSums((ncol(x) - (1-x)*ind + 1)^2) st <- rank(s+t, ties.method = "random") st } comm <- ifelse(comm > 0, 1, 0) ## Start with columns, expect if nrow > ncol if (ncol(comm) >= nrow(comm)) { i <- rank(-rowSums(comm), ties.method = "average") } else { j <- rank(-colSums(comm), ties.method = "average") i <- rowpack(comm, j) } ## Improve eight times for (k in 1:8) { j <- colpack(comm, i) i <- rowpack(comm, j) } if (ncol(comm) < nrow(comm)) j <- colpack(comm, i) comm <- comm[order(i), order(j)] r <- ppoints(nrow(comm), a=0.5) c <- ppoints(ncol(comm), a=0.5) dis <- matrix(rep(r, ncol(comm)), nrow=nrow(comm)) totdis <- 1 - abs(outer(r, c, "-")) fill <- sum(comm)/prod(dim(comm)) ## Fill line as defined in J Biogeogr by solving an integral of ## the fill function fillfun <- function(x, p) 1 - (1-(1-x)^p)^(1/p) intfun <- function(p, fill) integrate(fillfun, lower=0, upper=1, p=p)$value - fill ## 'p' will depend on 'fill', and fill = 0.0038 correspond to p = ## 20. Sometimes the fill is lower, and therefore we try() to see ## if we need to move the bracket up. We should need to do this ## very rarely. lo <- 0 hi <- 20 repeat{ sol <- try(uniroot(intfun, c(lo,hi), fill=fill), silent = TRUE) if (inherits(sol, "try-error")) { if (hi > 640) # bail out stop(gettextf("matrix is too sparse, fill is %g"), fill) lo <- hi hi <- hi + hi } else break } p <- sol$root ## row coordinates of the fill line for all matrix entries out <- matrix(0, nrow=length(r), ncol=length(c)) for (i in 1:length(r)) for (j in 1:length(c)) { a <- c[j] - r[i] out[i,j] <- uniroot(function(x, ...) fillfun(x, p) - a -x, c(0,1), p = p)$root } ## Filline x <- seq(0,1,len=51) xline <- fillfun(x, p) smo <- list(x = x, y = xline) u <- (dis - out)/totdis u[u < 0 & comm == 1] <- 0 u[u > 0 & comm == 0] <- 0 u <- u^2 colnames(u) <- colnames(comm) rownames(u) <- rownames(comm) names(r) <- rownames(comm) names(c) <- colnames(comm) temp <- 100*sum(u)/prod(dim(comm))/0.04145 out <- list(comm = comm, u = u, r = r, c = c, p = p, fill=fill, statistic = temp, smooth=smo) class(out) <- "nestedtemp" out } vegan/R/nestednodf.R0000644000176200001440000000445711527004531014037 0ustar liggesusers`nestednodf` <- function(comm, order = TRUE, weighted = FALSE) { bin.comm <- ifelse(comm > 0, 1, 0) rfill <- rowSums(bin.comm) cfill <- colSums(bin.comm) if (!weighted) comm <- bin.comm if (order) { if (weighted) { rgrad <- rowSums(comm) cgrad <- colSums(comm) rorder <- order(rfill, rgrad, decreasing = TRUE) corder <- order(cfill, cgrad, decreasing = TRUE) } else { rorder <- order(rfill, decreasing = TRUE) corder <- order(cfill, decreasing = TRUE) } comm <- comm[rorder, corder] rfill <- rfill[rorder] cfill <- cfill[corder] } nr <- NROW(comm) nc <- NCOL(comm) fill <- sum(rfill)/length(comm) N.paired.rows <- numeric(nr * (nr - 1)/2) N.paired.cols <- numeric(nc * (nc - 1)/2) counter <- 0 for (i in 1:(nr - 1)) { first <- comm[i, ] for (j in (i + 1):nr) { counter <- counter + 1 if (rfill[i] <= rfill[j] || any(rfill[c(i, j)] == 0)) next if (weighted) { second <- comm[j, ] N.paired.rows[counter] <- sum(first - second > 0 & second > 0)/sum(second > 0) } else { N.paired.rows[counter] <- sum(first + comm[j, ] == 2)/rfill[j] } } } counter <- 0 for (i in 1:(nc - 1)) { first <- comm[, i] for (j in (i + 1):nc) { counter <- counter + 1 if (cfill[i] <= cfill[j] || any(cfill[c(i, j)] == 0)) next if (weighted) { second <- comm[, j] N.paired.cols[counter] <- sum(first - second > 0 & second > 0)/sum(second > 0) } else { N.paired.cols[counter] <- sum(first + comm[, j] == 2)/cfill[j] } } } N.columns <- mean(N.paired.cols) * 100 N.rows <- mean(N.paired.rows) * 100 NODF <- (sum(c(N.paired.rows, N.paired.cols)) * 100)/ ((nc * (nc - 1)/2) + (nr * (nr - 1)/2)) out <- list(comm = comm, fill = fill, statistic = c(N.columns = N.columns, N.rows = N.rows, NODF = NODF)) class(out) <- "nestednodf" out } vegan/R/nestedn0.R0000644000176200001440000000053010705722404013415 0ustar liggesusers"nestedn0" <- function(comm) { comm <- ifelse(comm > 0, 1, 0) R <- rowSums(comm) spmin <- apply(comm, 2, function(x) min((x*R)[x > 0])) n0 <- spmin for (i in 1:ncol(comm)) n0[i] <- sum(comm[,i] == 0 & R > spmin[i]) out <- list(spmin = spmin, n0 = n0, statistic = sum(n0)) class(out) <- "nestedn0" out } vegan/R/nesteddisc.R0000644000176200001440000000450111724375303014030 0ustar liggesusers`nesteddisc` <- function(comm, niter = 200) { ## The original discrepancy method orders columns by frequencies, ## but does not consider ties. The current function tries to order ## tied values to minimize the discrepancy either by complete ## enumeration or with a larger number of ties using simulated ## annealing. NALL: max no. of tied items for NALL! complete ## enumeration ## starting values and CONSTANTS NALL <- 7 ties <- FALSE trace <- FALSE ## Code comm <- ifelse(comm > 0, 1, 0) cs <- colSums(comm) k <- rev(order(cs)) ## initial order cs <- cs[k] comm <- comm[, k] ## run lengths: numbers of tied values le <- rle(cs)$lengths cle <- c(0, cumsum(le)) x <- seq(along=cs) ## Range of row sums: only swaps between these have an effect rs <- range(rowSums(comm)) ## Function to evaluate discrepancy FUN <- function(x) sum(comm[col(comm)[,x] <= rowSums(comm)] == 0) Ad <- FUN(x) ## Go through all le-items and permute ties for (i in 1:length(le)) { if (le[i] > 1) { take <- x idx <- (1:le[i]) + cle[i] ## Can swaps influence discrepancy? if (idx[1] > rs[2] || idx[le[i]] < rs[1]) next ## Complete enumeration if no. of tied value <= NALL if (le[i] <= NALL) { perm <- matrix(allPerms(le[i]), ncol=le[i]) + cle[i] ## Take at maximum NITER cases from complete enumeration if (nrow(perm) > niter) { perm <- perm[sample.int(nrow(perm), niter),] ties <- TRUE } } ## No complete enumeration, but a sample and potentially ## duplicated orders else { ties <- TRUE perm <- t(replicate(niter, permuted.index(le[i]))) perm <- perm + cle[i] } vals <- sapply(1:nrow(perm), function(j) { take[idx] <- perm[j,] FUN(take) }) jmin <- which.min(vals) if (vals[jmin] < Ad) { x[idx] <- perm[jmin,] Ad <- vals[jmin] } } } out <- list(statistic=Ad, ties = ties, order = k[x]) class(out) <- "nesteddisc" out } vegan/R/nestedchecker.R0000644000176200001440000000035510705722404014511 0ustar liggesusers"nestedchecker" <- function(comm) { cb <- sum(designdist(comm, "(A-J)*(B-J)", "binary")) sppairs <- ncol(comm)*(ncol(comm)-1)/2 out <- list("C.score" = cb/sppairs, statistic = cb) class(out) <- "nestedchecker" out } vegan/R/nestedbetasor.R0000644000176200001440000000212311672360245014544 0ustar liggesusers### Multiple-site dissimilarity indices (Sorensen & Jaccard) and their ### decomposition into "turnover" and "nestedness" following Baselga ### (Global Ecology & Biogeography 19, 134-143; 2010). Implemented as ### nestedness functions and directly usable in oecosimu(). `nestedbetasor` <- function(comm) { beta <- betadiver(comm, method = NA) b <- beta$b c <- beta$c diffbc <- sum(abs(b-c)) sumbc <- sum(b+c) bmin <- sum(pmin(b, c)) a <- sum(comm) - sum(colSums(comm) > 0) simpson <- bmin/(bmin + a) nest <- a/(bmin + a) * diffbc/(2*a + sumbc) sorensen <- sumbc/(2*a + sumbc) c(turnover = simpson, nestedness = nest, sorensen = sorensen) } `nestedbetajac` <- function(comm) { beta <- betadiver(comm, method = NA) b <- beta$b c <- beta$c diffbc <- sum(abs(b-c)) sumbc <- sum(b+c) bmin <- sum(pmin(b, c)) a <- sum(comm) - sum(colSums(comm) > 0) simpson <- 2*bmin/(2*bmin + a) nest <- a/(2*bmin + a) * diffbc/(a + sumbc) jaccard <- sumbc/(a + sumbc) c(turnover = simpson, nestedness = nest, jaccard = jaccard) } vegan/R/multipart.formula.R0000644000176200001440000000117012023317071015356 0ustar liggesusers`multipart.formula` <- function(formula, data, index=c("renyi", "tsallis"), scales = 1, global = FALSE, relative = FALSE, nsimul=99, ...) { ## evaluate formula if (missing(data)) data <- parent.frame() tmp <- hierParseFormula(formula, data) lhs <- tmp$lhs rhs <- tmp$rhs ## run simulations sim <- multipart.default(lhs, rhs, index = index, scales = scales, global = global, relative = relative, nsimul = nsimul, ...) call <- match.call() call[[1]] <- as.name("multipart") attr(sim, "call") <- call sim } vegan/R/multipart.default.R0000644000176200001440000001202112073304011015325 0ustar liggesusers`multipart.default` <- function(y, x, index=c("renyi", "tsallis"), scales = 1, global = FALSE, relative = FALSE, nsimul=99, ...) { if (length(scales) > 1) stop("length of 'scales' must be 1") ## evaluate formula lhs <- as.matrix(y) if (missing(x)) x <- cbind(level_1=seq_len(nrow(lhs)), leve_2=rep(1, nrow(lhs))) rhs <- data.frame(x) rhs[] <- lapply(rhs, as.factor) rhs[] <- lapply(rhs, droplevels) nlevs <- ncol(rhs) if (nlevs < 2) stop("provide at least two level hierarchy") if (any(rowSums(lhs) == 0)) stop("data matrix contains empty rows") if (any(lhs < 0)) stop("data matrix contains negative entries") if (is.null(colnames(rhs))) colnames(rhs) <- paste("level", 1:nlevs, sep="_") tlab <- colnames(rhs) ## check proper design of the model frame l1 <- sapply(rhs, function(z) length(unique(z))) if (!any(sapply(2:nlevs, function(z) l1[z] <= l1[z-1]))) stop("number of levels are inapropriate, check sequence") rval <- list() rval[[1]] <- rhs[,nlevs] nCol <- nlevs - 1 for (i in 2:nlevs) { rval[[i]] <- interaction(rhs[,nCol], rval[[(i-1)]], drop=TRUE) nCol <- nCol - 1 } rval <- as.data.frame(rval[rev(1:length(rval))]) l2 <- sapply(rval, function(z) length(unique(z))) if (any(l1 != l2)) warning("levels are not perfectly nested") ## aggregate response matrix fullgamma <-if (nlevels(rhs[,nlevs]) == 1) TRUE else FALSE # if (!fullgamma && !global) # warning("gamma diversity value might be meaningless") ftmp <- vector("list", nlevs) for (i in 1:nlevs) { ftmp[[i]] <- as.formula(paste("~", tlab[i], "- 1")) } ## is there a method/burnin/thin in ... ? method <- if (is.null(list(...)$method)) "r2dtable" else list(...)$method burnin <- if (is.null(list(...)$burnin)) 0 else list(...)$burnin thin <- if (is.null(list(...)$thin)) 1 else list(...)$thin ## evaluate other arguments index <- match.arg(index) divfun <- switch(index, "renyi" = function(x) renyi(x, scales=scales, hill = TRUE), "tsallis" = function(x) tsallis(x, scales=scales, hill = TRUE)) ## cluster membership determination nrhs <- rhs nrhs <- sapply(nrhs, as.numeric) idcl <- function(i) { h <- nrhs[,i] l <- nrhs[,(i-1)] sapply(unique(l), function(i) h[l==i][1]) } id <- lapply(2:nlevs, idcl) ## this is the function passed to oecosimu if (global) { wdivfun <- function(x) { if (fullgamma) { tmp <- lapply(1:(nlevs-1), function(i) t(model.matrix(ftmp[[i]], rhs)) %*% x) tmp[[nlevs]] <- matrix(colSums(x), nrow = 1, ncol = ncol(x)) } else { tmp <- lapply(1:nlevs, function(i) t(model.matrix(ftmp[[i]], rhs)) %*% x) } raw <- sapply(1:nlevs, function(i) divfun(tmp[[i]])) a <- sapply(raw, mean) G <- a[nlevs] b <- sapply(1:(nlevs-1), function(i) G / a[i]) if (relative) b <- b / sapply(raw[1:(nlevs-1)], length) c(a, b) } } else { wdivfun <- function(x) { if (fullgamma) { tmp <- lapply(1:(nlevs-1), function(i) t(model.matrix(ftmp[[i]], rhs)) %*% x) tmp[[nlevs]] <- matrix(colSums(x), nrow = 1, ncol = ncol(x)) } else { tmp <- lapply(1:nlevs, function(i) t(model.matrix(ftmp[[i]], rhs)) %*% x) } a <- sapply(1:nlevs, function(i) divfun(tmp[[i]])) am <- lapply(1:(nlevs-1), function(i) { sapply(1:length(unique(id[[i]])), function(ii) { mean(a[[i]][id[[i]]==ii]) }) }) b <- lapply(1:(nlevs-1), function(i) a[[(i+1)]] / am[[i]]) bmax <- lapply(id, function(i) table(i)) if (relative) b <- lapply(1:(nlevs-1), function(i) b[[i]] / bmax[[i]]) c(sapply(a, mean), sapply(b, mean)) } } if (nsimul > 0) { sim <- oecosimu(lhs, wdivfun, method = method, nsimul=nsimul, burnin=burnin, thin=thin) } else { sim <- wdivfun(lhs) tmp <- rep(NA, length(sim)) sim <- list(statistic = sim, oecosimu = list(z = tmp, pval = tmp, method = NA, statistic = sim)) } nam <- c(paste("alpha", 1:(nlevs-1), sep="."), "gamma", paste("beta", 1:(nlevs-1), sep=".")) names(sim$statistic) <- attr(sim$oecosimu$statistic, "names") <- nam call <- match.call() call[[1]] <- as.name("multipart") attr(sim, "call") <- call attr(sim$oecosimu$simulated, "index") <- index attr(sim$oecosimu$simulated, "scales") <- scales attr(sim$oecosimu$simulated, "global") <- global attr(sim, "n.levels") <- nlevs attr(sim, "terms") <- tlab attr(sim, "model") <- rhs class(sim) <- c("multipart", class(sim)) sim } vegan/R/multipart.R0000644000176200001440000000007311751501303013713 0ustar liggesusersmultipart <- function (...) { UseMethod("multipart") } vegan/R/msoplot.R0000644000176200001440000000654212056671653013415 0ustar liggesusers`msoplot` <- function (x, alpha = 0.05, explained = FALSE, ylim = NULL, legend = "topleft", ...) { object.cca <- x if (is.data.frame(object.cca$vario)) { object <- object.cca vario <- object$vario grain <- object$grain hasSig <- is.numeric(object$vario$CA.signif) z <- qnorm(alpha/2) if (is.numeric(vario$CA.signif)) { vario <- vario[, -ncol(vario)] } ymax <- max(vario[, -1:-3], na.rm = TRUE) b <- ncol(vario) - 3 label <- c("", "", "", "Total variance", "Explained plus residual", "Residual variance", "Explained variance", "Conditioned variance") ci.lab <- "C.I. for total variance" sign.lab <- if(hasSig) "Sign. autocorrelation" else NULL if (is.numeric(object$CCA$rank)) { if (!explained) b <- b - 1 if (is.numeric(object$vario$se)) b <- b - 1 figmat <- cbind(vario$All + z * vario$se, vario$All - z * vario$se, vario$Sum, vario[, 6:(b + 3)]) matplot(vario$Dist, cbind(0,figmat), type = "n", xlab = "Distance", ylab = "Variance", ylim = ylim, ...) lines(vario$Dist, vario$All + z * vario$se, lty = 1, ...) lines(vario$Dist, vario$All - z * vario$se, lty = 1, ...) lines(vario$Dist, vario$Sum, type = "b", lty = 2, pch = 3, ...) ## Legend legend(legend, legend=c(label[c(2,3:b)+3], ci.lab, sign.lab), lty=c(c(1,2,1,1,1)[2:b], 1, if(hasSig) NA), pch=c(3, (6:(b+3))-6, NA, if(hasSig) 15) ) matlines(vario$Dist, figmat[,-c(1:3)], type = "b", lty = 1, pch = 6:(b+3)-6, ...) text(x = c(vario$Dist), y = par("usr")[3], pos = 3, label = c(vario$n), cex = 0.8, ...) abline(v = max(object$H/2), lty = 3, ...) } else { if (is.null(ylim)) ylim <- c(0, ymax) plot(vario$Dist, vario$All, type = "b", lty = 1, pch = 0, xlab = "Distance", ylab = "Variance", ylim = ylim, ...) abline(h = object$tot.chi, lty = 5, ...) text(x = c(vario$Dist), y = par("usr")[3], pos = 3, label = c(vario$n), cex = 0.8) abline(v = max(object$H)/2, lty = 3, ...) legend(legend, legend=c("Total variance","Global variance estimate", if(hasSig) "Sign. autocorrelation"), lty=c(1,5, if(hasSig) NA), pch = if(hasSig) c(NA,NA,15) else NULL) } } if (hasSig) { a <- c(1:nrow(object$vario))[object$vario$CA.signif < alpha] points(vario$Dist[a], object$vario$CA[a], pch = 15, ...) if (is.numeric(object$CCA$rank)) { inflation <- 1 - weighted.mean(object$vario$CA, object$vario$n)/ weighted.mean(object$vario$CA[-a], object$vario$n[-a]) cat("Error variance of regression model underestimated by", round(inflation * 100, 1), "percent", "\n") } } invisible() } vegan/R/mso.R0000644000176200001440000000714611631220326012500 0ustar liggesusers`mso` <- function (object.cca, object.xy, grain = 1, round.up = FALSE, permutations = FALSE) { if (inherits(object.cca, "mso")) { rm <- which(class(object.cca) == "mso") class(object.cca) <- class(object.cca)[-rm] } object <- object.cca xy <- object.xy N <- nrow(object$CA$Xbar) if (inherits(object, "rda")) N <- 1 Dist <- dist(xy) object$grain <- grain if (round.up) H <- ceiling(Dist/grain) * grain else H <- round(Dist/grain) * grain hmax <- round((max(Dist)/2)/grain) *grain H[H > hmax] <- max(H) object$H <- H H <- as.vector(H) Dist <- sapply(split(Dist, H), mean) object$vario <- data.frame(H = names(table(H)), Dist = Dist, n = as.numeric(table(H))) test <- list() if (is.numeric(object$CCA$rank)) { if (is.numeric(object$pCCA$rank)) { test$pcca <- sapply(split(dist(object$pCCA$Fit)^2 * N/2, H), mean) test$cca <- sapply(split(dist(object$CCA$Xbar - object$CA$Xbar)^2 * N/2, H), mean) test$ca <- sapply(split(dist(object$CA$Xbar)^2 * N/2, H), mean) test$all.cond <- sapply(split(dist(object$CCA$Xbar)^2 * N/2, H), mean) test$se <- sqrt(sapply(split(dist(object$CCA$Xbar)^2 * N/2, H), var)/object$vario$n) object$vario <- cbind(object$vario, All = test$all.cond, Sum = test$ca + test$cca, CA = test$ca, CCA = test$cca, pCCA = test$pcca, se = test$se) } else { test$all <- sapply(split(dist(object$CCA$Xbar)^2 * N/2, H), mean) test$cca <- sapply(split(dist(object$CCA$Xbar - object$CA$Xbar)^2 * N/2, H), mean) test$ca <- sapply(split(dist(object$CA$Xbar)^2 * N/2, H), mean) test$se <- sqrt(sapply(split(dist(object$CCA$Xbar)^2 * N/2, H), var)/object$vario$n) object$vario <- cbind(object$vario, All = test$all, Sum = test$ca + test$cca, CA = test$ca, CCA = test$cca, se = test$se) } } else { test$ca <- sapply(split(dist(object$CA$Xbar)^2 * N/2, H), mean) object$vario <- cbind(object$vario, All = test$ca, CA = test$ca) } if (permutations) { ##require(base) object$H.test <- matrix(0, length(object$H), nrow(object$vario)) for (i in 1:nrow(object$vario)) { object$H.test[, i] <- as.numeric(object$H == object$vario$H[i]) } xdis <- dist(object$CA$Xbar)^2 N <- attr(xdis, "Size") statistic <- abs(cor(as.vector(xdis), object$H.test)) perm <- matrix(0, length(statistic), permutations) for (i in 1:permutations) { take <- sample(N, N) permvec <- as.vector(as.dist(as.matrix(xdis)[take, take])) perm[, i] <- abs(cor(permvec, object$H.test)) } object$vario$CA.signif <- apply((perm >= matrix(statistic, nrow(perm), ncol(perm)))/permutations, 1, sum) } object$call <- match.call() class(object) <- c("mso", class(object)) object } vegan/R/mrpp.R0000644000176200001440000000434111625436243012664 0ustar liggesusers"mrpp" <- function (dat, grouping, permutations = 999, distance = "euclidean", weight.type = 1, strata) { classmean <- function(ind, dmat, indls) { sapply(indls, function(x) mean(c(dmat[ind == x, ind == x]), na.rm = TRUE)) } mrpp.perms <- function(ind, dmat, indls, w) { weighted.mean(classmean(ind, dmat, indls), w = w, na.rm = TRUE) } if (inherits(dat, "dist")) dmat <- dat else if (is.matrix(dat) && nrow(dat) == ncol(dat) && all(dat[lower.tri(dat)] == t(dat)[lower.tri(dat)])) { dmat <- dat attr(dmat, "method") <- "user supplied square matrix" } else dmat <- vegdist(dat, method = distance) if (any(dmat < -sqrt(.Machine$double.eps))) stop("dissimilarities must be non-negative") distance <- attr(dmat, "method") dmat <- as.matrix(dmat) diag(dmat) <- NA N <- nrow(dmat) grouping <- factor(grouping) indls <- levels(grouping) ncl <- sapply(indls, function(x) sum(grouping == x)) w <- switch(weight.type, ncl, ncl - 1, ncl * (ncl - 1)/2) classdel <- classmean(grouping, dmat, indls) names(classdel) <- names(ncl) <- indls del <- weighted.mean(classdel, w = w, na.rm = TRUE) E.del <- mean(dmat, na.rm = TRUE) ## 'Classification strength' if weight.type == 1 ## Do not calculate classification strength because there is no ## significance test for it. Keep the item in reserve for ## possible later re-inclusion. CS <- NA if (missing(strata)) strata <- NULL perms <- sapply(1:permutations, function(x) grouping[permuted.index(N, strata = strata)]) m.ds <- numeric(permutations) m.ds <- apply(perms, 2, function(x) mrpp.perms(x, dmat, indls, w)) p <- (1 + sum(del >= m.ds))/(permutations + 1) r2 <- 1 - del/E.del out <- list(call = match.call(), delta = del, E.delta = E.del, CS = CS, n = ncl, classdelta = classdel, Pvalue = p, A = r2, distance = distance, weight.type = weight.type, boot.deltas = m.ds, permutations = permutations) if (!is.null(strata)) { out$strata <- deparse(substitute(strata)) out$stratum.values <- strata } class(out) <- "mrpp" out } vegan/R/monoMDS.R0000644000176200001440000001170212062575412013217 0ustar liggesusers`monoMDS` <- function(dist, y, k = 2, model = c("global", "local", "linear", "hybrid"), threshold = 0.8, maxit = 200, weakties = TRUE, stress = 1, scaling = TRUE, pc = TRUE, smin = 1e-4, sfgrmin = 1e-7, sratmax=0.99999, ...) { ## Check that 'dist' are distances or a symmetric square matrix if (!(inherits(dist, "dist") || (is.matrix(dist) || is.data.frame(dist)) && ncol(dist) == nrow(dist) && isTRUE(all.equal(dist[lower.tri(dist)], t(dist)[lower.tri(dist)])))) stop("'dist' must be a distance object (class \"dist\") or a symmetric square matrix") if (any(dist < -sqrt(.Machine$double.eps))) warning("some dissimilarities are negative -- is this intentional?") ## match.arg model <- match.arg(model) ## save 'dist' attributes to display in print() distmethod <- attr(dist, "method") if (is.null(distmethod)) distmethod <- "unknown" distcall <-attr(dist, "call") if (!is.null(distcall)) distcall <- deparse(distcall) ## dist to mat mat <- as.matrix(dist) nm <- rownames(mat) if (model %in% c("global", "linear")) { ## global NMDS: lower triangle dist <- mat[lower.tri(mat)] iidx <- row(mat)[lower.tri(mat)] jidx <- col(mat)[lower.tri(mat)] ## Remove missing values if (any(nas <- is.na(dist))) { dist <- dist[!nas] iidx <- iidx[!nas] jidx <- jidx[!nas] } ## non-metric/metric: Fortran parameter 'iregn' if (model == "global") iregn <- 1 else iregn <- 2 ngrp <- 1 nobj <- nrow(mat) istart <- 1 } else if (model == "local") { ## local NMDS: whole matrix without the diagonal, and rows in ## a row (hence transpose) mat <- t(mat) ## Get missing values nas <- is.na(mat) ## groups by rows, except missing values rs <- rowSums(!nas) - 1 istart <- cumsum(rs) istart <- c(0, istart[-length(istart)]) + 1 ## Full matrix expect the diagonal dist <- mat[col(mat) != row(mat)] iidx <- col(mat)[col(mat) != row(mat)] # transpose! jidx <- row(mat)[col(mat) != row(mat)] ## Remove missing values if (any(nas)) { nas <- nas[col(mat) != row(mat)] dist <- dist[!nas] iidx <- iidx[!nas] jidx <- jidx[!nas] } iregn <- 1 nobj <- nrow(mat) ngrp <- nobj } else if (model == "hybrid") { ## Hybrid NMDS: two lower triangles, first a complete one, ## then those with dissimilarities below the threshold dist <- mat[lower.tri(mat)] iidx <- row(mat)[lower.tri(mat)] jidx <- col(mat)[lower.tri(mat)] ## Missing values if (any(nas <- is.na(dist))) { dist <- dist[!nas] iidx <- iidx[!nas] jidx <- jidx[!nas] } ## second group: dissimilarities below threshold ngrp <- 2 istart <- c(1, length(dist) + 1) take <- dist < threshold dist <- c(dist, dist[take]) iidx <- c(iidx, iidx[take]) jidx <- c(jidx, jidx[take]) iregn <- 3 nobj <- nrow(mat) } ## ndis: number of >0 dissimilarities (distinct points) ndis <- length(dist) ## starting configuration if (missing(y)) { y <- matrix(runif(nobj*k, -1, 1), nobj, k) ## centre y <- sweep(y, 2, colMeans(y), "-") } ## y to vector y <- as.vector(as.matrix(y)) ## translate R args to Fortran call if (weakties) ities <- 1 else ities <- 2 ## Fortran call sol <- .Fortran("monoMDS", nobj = as.integer(nobj), nfix=as.integer(0), ndim = as.integer(k), ndis = as.integer(ndis), ngrp = as.integer(ngrp), diss = as.double(dist), iidx = as.integer(iidx), jidx = as.integer(jidx), xinit = as.double(y), istart = as.integer(istart), isform = as.integer(stress), ities = as.integer(ities), iregn = as.integer(iregn), iscal = as.integer(scaling), maxits = as.integer(maxit), sratmx = as.double(sratmax), strmin = as.double(smin), sfgrmn = as.double(sfgrmin), dist = double(ndis), dhat = double(ndis), points = double(k*nobj), stress = double(1), grstress = double(ngrp), iters = integer(1), icause = integer(1), PACKAGE = "vegan") sol$call <- match.call() sol$model <- model sol$points <- matrix(sol$points, nobj, k) if (pc) sol$points <- prcomp(sol$points)$x attr(sol$points, "pc") <- pc rownames(sol$points) <- nm colnames(sol$points) <- paste("MDS", 1:k, sep="") ## save info on dissimilarities sol$distmethod <- distmethod sol$distcall <- distcall class(sol) <- "monoMDS" sol } vegan/R/model.matrix.cca.R0000644000176200001440000000107411620024525015025 0ustar liggesusers`model.matrix.cca` <- function (object, ...) { if (inherits(object, "prc")) stop("model.matrix does not work with 'prc' results") call <- object$call m <- match(c("formula", "data", "na.action", "subset"), names(call), 0) call <- call[c(1, m)] call[[1]] <- as.name("ordiParseFormula") out <- eval(call, environment(), parent.frame())[c("Z", "Y")] m <- list() if (!is.null(out$Z)) m$Conditions <- out$Z if (!is.null(out$Y)) m$Constraints <- out$Y if (length(m) == 1) m <- m[[1]] m } vegan/R/model.frame.cca.R0000644000176200001440000000103211620024525014605 0ustar liggesusers`model.frame.cca` <- function (formula, ...) { if (inherits(formula, "prc")) stop("model.frame does not work with 'prc' results") call <- formula$call m <- match(c("formula", "data", "na.action", "subset"), names(call), 0) call <- call[c(1, m)] call[[1]] <- as.name("ordiParseFormula") out <- eval(call, environment(), parent.frame()) mf <- out$modelframe attr(mf, "terms") <- out$terms.expand if (!is.null(out$na.action)) attr(mf, "na.action") <- out$na.action mf } vegan/R/metaMDSredist.R0000644000176200001440000000034110667741210014405 0ustar liggesusers"metaMDSredist" <- function(object, ...) { if (!inherits(object, "metaMDS")) stop("Needs a metaMDS result object") call <- object$call call[[1]] <- as.name("metaMDSdist") eval(call, parent.frame()) } vegan/R/metaMDSiter.R0000644000176200001440000000765512116326046014072 0ustar liggesusers`metaMDSiter` <- function (dist, k = 2, trymax = 20, trace = 1, plot = FALSE, previous.best, engine = "monoMDS", maxit = 200, ...) { engine <- match.arg(engine, c("monoMDS", "isoMDS")) if (engine == "isoMDS") require(MASS) || stop("Needs package MASS (function isoMDS)") EPS <- 0.05 if (engine == "monoMDS") EPS <- EPS/100 # monoMDS stress (0,1), isoMDS (0,100) RESLIM <- 0.01 RMSELIM <- 0.005 SOL <- FALSE converged <- FALSE isotrace <- max(0, trace - 1) ## Previous best or initial configuration if (!missing(previous.best) && !is.null(previous.best)) { ## check if previous.best is from metaMDS or isoMDS if (inherits(previous.best, "metaMDS") || is.list(previous.best) && all(c("points", "stress") %in% names(previous.best))) { ## Previous best may come from another 'engine' or ## 'model': extract its 'points' and use as an initial ## configuration with 'maxit = 0' to evaluate the stress ## in current case, or take a matrix as configuration. init <- previous.best$points nc <- NCOL(init) if (nc > k) init <- init[, 1:k, drop = FALSE] else if (nc < k) for (i in 1:(k-nc)) init <- cbind(init, runif(NROW(init), -0.1, 0.1)) if (trace) cat(gettextf("Starting from %d-dimensional configuration\n", nc)) } else { init <- as.matrix(previous.best) } ## evaluate stress s0 <- switch(engine, "monoMDS" = monoMDS(dist, y = init, k = k, maxit = 0, ...), "isoMDS" = isoMDS(dist, y = init, k = k, maxit = 0)) ## Check whether model changed if (is.list(previous.best) && !is.null(previous.best$stress) && !isTRUE(all.equal(previous.best$stress, s0$stress))) { if (trace) cat("Stress differs from 'previous.best': reset tries\n") if (inherits(previous.best, "metaMDS")) previous.best$tries <- 0 } } else { ## no previous.best: start with cmdscale s0 <- switch(engine, "monoMDS" = monoMDS(dist, y = cmdscale(dist, k = k), k = k, maxit = maxit, ...), "isoMDS" = isoMDS(dist, k = k, trace = isotrace, maxit = maxit)) } if (trace) cat("Run 0 stress", s0$stress, "\n") tries <- 0 while(tries < trymax) { tries <- tries + 1 stry <- switch(engine, "monoMDS" = monoMDS(dist, k = k, maxit = maxit, ...), "isoMDS" = isoMDS(dist, initMDS(dist, k = k), k = k, maxit = maxit, tol = 1e-07, trace = isotrace)) if (trace) { cat("Run", tries, "stress", stry$stress, "\n") } if ((s0$stress - stry$stress) > -EPS) { pro <- procrustes(s0, stry, symmetric = TRUE) if (plot && k > 1) plot(pro) if (stry$stress < s0$stress) { s0 <- stry if (trace) cat("... New best solution\n") } summ <- summary(pro) if (trace) cat("... procrustes: rmse", summ$rmse, " max resid", max(summ$resid), "\n") if (summ$rmse < RMSELIM && max(summ$resid) < RESLIM) { if (trace) cat("*** Solution reached\n\n") converged <- TRUE break } } flush.console() } if (!missing(previous.best) && inherits(previous.best, "metaMDS")) { tries <- tries + previous.best$tries } out <- s0 out$ndim = k out$data <- attr(dist, "commname") out$distance <- attr(dist, "method") out$converged <- converged out$tries <- tries out$engine <- engine out } vegan/R/metaMDSdist.R0000644000176200001440000000555211662161241014063 0ustar liggesusers`metaMDSdist` <- function (comm, distance = "bray", autotransform = TRUE, noshare = TRUE, trace = 1, commname, zerodist = "ignore", distfun = vegdist, ...) { ## metaMDSdist should get a raw data matrix, but if it gets a ## 'dist' object return that unchanged and quit silently. if (inherits(comm, "dist") || ncol(comm) == nrow(comm) && all(comm == t(comm))) return(comm) distname <- deparse(substitute(distfun)) distfun <- match.fun(distfun) zerodist <- match.arg(zerodist, c("fail", "add", "ignore")) formals(distfun) <- c(formals(distfun), alist(... = )) formals(stepacross) <- c(formals(stepacross), alist(... = )) if (missing(commname)) commname <- deparse(substitute(comm)) xam <- max(comm) if (autotransform && xam > 50) { comm <- sqrt(comm) commname <- paste("sqrt(", commname, ")", sep = "") if (trace) cat("Square root transformation\n") } if (autotransform && xam > 9) { comm <- wisconsin(comm) commname <- paste("wisconsin(", commname, ")", sep = "") if (trace) cat("Wisconsin double standardization\n") } dis <- distfun(comm, method = distance, ...) call <- attr(dis, "call") call[[1]] <- as.name(distname) attr(dis, "call") <- call if (zerodist != "ignore" && any(dis <= 0, na.rm = TRUE)) { if (zerodist == "fail") stop("Zero dissimilarities are not allowed") else if (zerodist == "add") { zero <- min(dis[dis > 0], na.rm = TRUE)/2 dis[dis <= 0] <- zero if (trace) cat("Zero dissimilarities changed into ", zero,"\n") } } ## We actually used maxdis to decide whether index has a closed ## upper limit, but simple maximum does not give that info. ## Therefore we see if an arbitrary matrix with no shared species ## has distance = 1. maxdis <- abs(distfun(matrix(c(7,0,0,3), 2, 2), method = distance, ...) - 1) < 1e-4 if ((isTRUE(noshare) && any(tmp <- no.shared(comm))) || (!is.logical(noshare) && noshare >= 0 && sum(tmp <- no.shared(comm))/length(dis) > noshare)) { if (trace) cat("Using step-across dissimilarities:\n") rn <- range(dis[tmp], na.rm = TRUE) if (rn[2]/rn[1] > 1.01) warning("non-constant distances between points with nothing shared\n", " stepacross may be meaningless: consider argument 'noshare=0'") is.na(dis) <- tmp dis <- stepacross(dis, trace = trace, toolong=0, ...) if (length(unique(distconnected(tmp, trace = trace))) > 1) warning("Data are disconnected, results may be meaningless") } attr(dis, "maxdis") <- maxdis attr(dis, "commname") <- commname attr(dis, "function") <- distname dis } vegan/R/metaMDS.R0000644000176200001440000000462311762367537013216 0ustar liggesusers`metaMDS` <- function (comm, distance = "bray", k = 2, trymax = 20, engine = c("monoMDS", "isoMDS"), autotransform = TRUE, noshare = (engine == "isoMDS"), wascores = TRUE, expand = TRUE, trace = 1, plot = FALSE, previous.best, ...) { engine <- match.arg(engine) commname <- deparse(substitute(comm)) ## metaMDS was written for community data which should be all ## positive. Check this here, and set arguments so that they are ## suitable for non-negative data. if (any(autotransform, noshare > 0, wascores) && any(comm < 0)) { warning("'comm' has negative data: 'autotransform', 'noshare' and 'wascores' set to FALSE") wascores <- FALSE autotransform <- FALSE noshare <- FALSE } if (inherits(comm, "dist")) { dis <- comm if (is.null(attr(dis, "method"))) attr(dis, "method") <- "user supplied" wascores <- FALSE } else if (length(dim(comm) == 2) && ncol(comm) == nrow(comm) && all(comm == t(comm))) { dis <- as.dist(comm) attr(dis, "method") <- "user supplied" wascores <- FALSE } else { dis <- metaMDSdist(comm, distance = distance, autotransform = autotransform, noshare = noshare, trace = trace, commname = commname, ...) } if (missing(previous.best)) previous.best <- NULL out <- metaMDSiter(dis, k = k, trymax = trymax, trace = trace, plot = plot, previous.best = previous.best, engine = engine, ...) ## Nearly zero stress is usually not a good thing but a symptom of ## a problem: you may have insufficient data for NMDS if (out$stress < 1e-3) { warning("Stress is (nearly) zero - you may have insufficient data") } points <- postMDS(out$points, dis, plot = max(0, plot - 1), ...) if (is.null(rownames(points))) rownames(points) <- rownames(comm) if (wascores) { ## transformed data comm <- eval.parent(parse(text=attr(dis, "commname"))) wa <- wascores(points, comm, expand = expand) } else wa <- NA out$points <- points out$species <- wa out$call <- match.call() if (is.null(out$data)) out$data <- commname class(out) <- c("metaMDS", class(out)) out } vegan/R/meandist.R0000644000176200001440000000236611636647312013522 0ustar liggesusers`meandist` <- function(dist, grouping, ...) { if (!inherits(dist, "dist")) stop("'dist' must be dissimilarity object inheriting from", dQuote(dist)) ## check that 'dist' are dissimilarities (non-negative) if (any(dist < -sqrt(.Machine$double.eps))) warning("some dissimilarities are negative -- is this intentional?") grouping <- factor(grouping, exclude = NULL) ## grouping for rows and columns grow <- grouping[as.dist(row(as.matrix(dist)))] gcol <- grouping[as.dist(col(as.matrix(dist)))] ## The row index must be "smaller" of the factor levels so that ## all means are in the lower triangle, and upper is NA first <- as.numeric(grow) >= as.numeric(gcol) cl1 <- ifelse(first, grow, gcol) cl2 <- ifelse(!first, grow, gcol) ## Cannot have within-group dissimilarity for group size 1 n <- table(grouping) take <- matrix(TRUE, nlevels(grouping), nlevels(grouping)) diag(take) <- n > 1 take[upper.tri(take)] <- FALSE ## Get output matrix out <- tapply(dist, list(cl1, cl2), mean) out[upper.tri(out)] <- t(out)[upper.tri(out)] rownames(out) <- colnames(out) <- levels(grouping) class(out) <- c("meandist", "matrix") attr(out, "n") <- table(grouping) out } vegan/R/mantel.partial.R0000644000176200001440000000363412023357503014617 0ustar liggesusers"mantel.partial" <- function (xdis, ydis, zdis, method = "pearson", permutations = 999, strata, na.rm = FALSE) { part.cor <- function(rxy, rxz, ryz) { (rxy - rxz * ryz)/sqrt(1-rxz*rxz)/sqrt(1-ryz*ryz) } xdis <- as.dist(xdis) ydis <- as.vector(as.dist(ydis)) zdis <- as.vector(as.dist(zdis)) ## Handle missing values if (na.rm) use <- "complete.obs" else use <- "all.obs" rxy <- cor(as.vector(xdis), ydis, method = method, use = use) rxz <- cor(as.vector(xdis), zdis, method = method, use = use) ryz <- cor(ydis, zdis, method = method, use = use) variant <- match.arg(method, eval(formals(cor)$method)) variant <- switch(variant, pearson = "Pearson's product-moment correlation", kendall = "Kendall's rank correlation tau", spearman = "Spearman's rank correlation rho", variant) statistic <- part.cor(rxy, rxz, ryz) if (permutations) { N <- attr(xdis, "Size") perm <- rep(0, permutations) xmat <- as.matrix(xdis) asdist <- row(xmat) > col(xmat) for (i in 1:permutations) { take <- permuted.index(N, strata) permvec <- (xmat[take, take])[asdist] rxy <- cor(permvec, ydis, method = method, use = use) rxz <- cor(permvec, zdis, method = method, use = use) perm[i] <- part.cor(rxy, rxz, ryz) } signif <- (sum(perm >= statistic)+1)/(permutations + 1) } else { signif <- NA perm <- NULL } res <- list(call = match.call(), method = variant, statistic = statistic, signif = signif, perm = perm, permutations = permutations) if (!missing(strata)) { res$strata <- deparse(substitute(strata)) res$stratum.values <- strata } class(res) <- c("mantel.partial", "mantel") res } vegan/R/mantel.correlog.R0000644000176200001440000001256511502063732015001 0ustar liggesusers`mantel.correlog` <- function(D.eco, D.geo=NULL, XY=NULL, n.class=0, break.pts=NULL, cutoff=TRUE, r.type="pearson", nperm=999, mult="holm", progressive=TRUE) { r.type <- match.arg(r.type, c("pearson", "spearman", "kendall")) mult <- match.arg(mult, c("sidak", p.adjust.methods)) epsilon <- .Machine$double.eps D.eco <- as.matrix(D.eco) ## Geographic distance matrix if(!is.null(D.geo)) { if(!is.null(XY)) stop("You provided both a geographic distance matrix and a list of site coordinates. Which one should the function use?") D.geo <- as.matrix(D.geo) } else { if(is.null(XY)) { stop("You did not provide a geographic distance matrix nor a list of site coordinates") } else { D.geo <- as.matrix(dist(XY)) } } n <- nrow(D.geo) if(n != nrow(D.eco)) stop("Numbers of objects in D.eco and D.geo are not equal") n.dist <- n*(n-1)/2 vec.D <- as.vector(as.dist(D.geo)) vec.DD <- as.vector(D.geo) ## Number of classes and breakpoints if(!is.null(break.pts)) { ## Use the list of break points if(n.class > 0) stop("You provided both a number of classes and a list of break points. Which one should the function use?") n.class = length(break.pts) - 1 } else { ## No breakpoints have been provided: equal-width classes if(n.class == 0) { ## Use Sturges rule to determine the number of classes n.class <- ceiling(1 + log(n.dist, base=2)) } ## Compute the breakpoints from n.class start.pt <- min(vec.D) end.pt <- max(vec.D) width <- (end.pt - start.pt)/n.class break.pts <- vector(length=n.class+1) break.pts[n.class+1] <- end.pt for(i in 1:n.class) break.pts[i] <- start.pt + width*(i-1) } half.cl <- n.class %/% 2 ## Move the first breakpoint a little bit to the left break.pts[1] <- break.pts[1] - epsilon ## Find the break points and the class indices class.ind <- break.pts[1:n.class] + (0.5*(break.pts[2:(n.class+1)]-break.pts[1:n.class])) ## Create the matrix of distance classes vec2 <- vector(length=n^2) for(i in 1:n^2) vec2[i] <- min( which(break.pts >= vec.DD[i]) ) - 1 ## Start assembling the vectors of results class.index <- NA n.dist <- NA mantel.r <- NA mantel.p <- NA ## check.sums = matrix(NA,n.class,1) ## Create a model-matrix for each distance class, then compute a Mantel test for(k in 1:n.class) { class.index <- c(class.index, class.ind[k]) vec3 <- rep(0, n*n) sel <- which(vec2 == k) vec3[sel] <- 1 mat.D2 <- matrix(vec3,n,n) diag(mat.D2) <- 0 n.dis <- sum(mat.D2) n.dist <- c(n.dist, n.dis) if(n.dis == 0) { mantel.r <- c(mantel.r, NA) mantel.p <- c(mantel.p, NA) } else { row.sums <- apply(mat.D2, 1, sum) ## check.sums[k,1] = length(which(row.sums == 0)) if((cutoff==FALSE) || !(cutoff==TRUE && k > half.cl && any(row.sums == 0))) { temp <- mantel(mat.D2, D.eco, method=r.type, permutations=nperm) mantel.r <- c(mantel.r, -temp$statistic) temp.p <- temp$signif ## The mantel() function produces a one-tailed p-value ## (H1: r>0) Here, compute a one-tailed p-value in ## direction of the sign if(temp$statistic < 0) { temp.p <- (sum(temp$perm <= temp$statistic)+1)/(nperm+1) } mantel.p <- c(mantel.p, temp.p) } else { mantel.r <- c(mantel.r, NA) mantel.p <- c(mantel.p, NA) } } } mantel.res <- cbind(class.index, n.dist, mantel.r, mantel.p) mantel.res <- mantel.res[-1,] ## Note: vector 'mantel.p' starts with a NA value mantel.p <- mantel.p[-1] n.tests <- length(which(!is.na(mantel.p))) if(mult == "none") { colnames(mantel.res) <- c("class.index", "n.dist", "Mantel.cor", "Pr(Mantel)") } else { ## Correct P-values for multiple testing if(progressive) { p.corr <- mantel.p[1] if(mult == "sidak") { for(j in 2:n.tests) p.corr <- c(p.corr, 1-(1-mantel.p[j])^j) } else { for(j in 2:n.tests) { temp <- p.adjust(mantel.p[1:j], method=mult) p.corr <- c(p.corr, temp[j]) } } } else { ## Correct all p-values for 'n.tests' simultaneous tests if(mult == "sidak") { p.corr <- 1 - (1 - mantel.p[1:n.tests])^n.tests } else { p.corr <- p.adjust(mantel.p[1:n.tests], method=mult) } } temp <- c(p.corr, rep(NA,(n.class-n.tests))) mantel.res <- cbind(mantel.res, temp) colnames(mantel.res) <- c("class.index", "n.dist", "Mantel.cor", "Pr(Mantel)", "Pr(corrected)") } rownames(mantel.res) <- rownames(mantel.res,do.NULL = FALSE, prefix = "D.cl.") ## Output the results res <- list(mantel.res=mantel.res, n.class=n.class, break.pts=break.pts, mult=mult, n.tests=n.tests, call=match.call() ) class(res) <- "mantel.correlog" res } vegan/R/mantel.R0000644000176200001440000000421712023357503013162 0ustar liggesusers"mantel" <- function (xdis, ydis, method = "pearson", permutations = 999, strata, na.rm = FALSE) { xdis <- as.dist(xdis) ydis <- as.vector(as.dist(ydis)) ## Handle missing values if (na.rm) use <- "complete.obs" else use <- "all.obs" statistic <- cor(as.vector(xdis), ydis, method = method, use = use) variant <- match.arg(method, eval(formals(cor)$method)) variant <- switch(variant, pearson = "Pearson's product-moment correlation", kendall = "Kendall's rank correlation tau", spearman = "Spearman's rank correlation rho", variant) N <- attr(xdis, "Size") if (length(permutations) == 1) { if (permutations > 0) { arg <- if (missing(strata)) NULL else strata permat <- t(replicate(permutations, permuted.index(N, strata = arg))) } } else { permat <- as.matrix(permutations) if (ncol(permat) != N) stop(gettextf("'permutations' have %d columns, but data have %d observations", ncol(permat), N)) permutations <- nrow(permutations) } if (permutations) { perm <- numeric(permutations) ## asdist as an index selects lower diagonal like as.dist, ## but is faster since it does not set 'dist' attributes xmat <- as.matrix(xdis) asdist <- row(xmat) > col(xmat) ptest <- function(take, ...) { permvec <- (xmat[take, take])[asdist] drop(cor(permvec, ydis, method = method, use = use)) } perm <- sapply(1:permutations, function(i, ...) ptest(permat[i,], ...) ) signif <- (sum(perm >= statistic) + 1)/(permutations + 1) } else { signif <- NA perm <- NULL } res <- list(call = match.call(), method = variant, statistic = statistic, signif = signif, perm = perm, permutations = permutations) if (!missing(strata)) { res$strata <- deparse(substitute(strata)) res$stratum.values <- strata } class(res) <- "mantel" res } vegan/R/make.cepnames.R0000644000176200001440000000147211615712645014421 0ustar liggesusers`make.cepnames` <- function (names, seconditem = FALSE) { ## make valid names names <- make.names(names, unique = FALSE) ## remove trailing and duplicated dots names <- gsub("\\.[\\.]+", ".", names) names <- gsub("\\.$", "", names) ## split by dots and take 4 letters of each element (if several) names <- lapply(strsplit(names, "\\."), function(x) if (length(x) > 1) substring(x, 1, 4) else x ) ## Take first and last element or 8 characters if only one element names <- unlist(lapply(names, function(x) if (length(x) > 1) paste(x[c(1, if(seconditem) 2 else length(x))], collapse = "") else x)) names <- abbreviate(names, 8) ## Final clean-up names <- make.names(names, unique = TRUE) names } vegan/R/linestack.R0000644000176200001440000000322511261556023013656 0ustar liggesusers"linestack" <- function (x, labels, cex = 0.8, side = "right", hoff = 2, air = 1.1, at = 0, add = FALSE, axis = FALSE, ...) { if (!missing(labels) && length(labels == 1) && pmatch(labels, c("right", "left"), nomatch = FALSE)) { side <- labels labels <- NULL warning("argument 'label' is deprecated: use 'side'") } side <- match.arg(side, c("right", "left")) x <- drop(x) if (!missing(labels) && !is.null(labels)) names(x) <- labels else if (is.null(names(x))) names(x) <- rep("", length(x)) op <- par(xpd = TRUE) ord <- order(x) x <- x[ord] n <- length(x) pos <- numeric(n) if (!add) { plot(pos, x, type = "n", axes = FALSE, xlab = "", ylab = "", ...) } hoff <- hoff * strwidth("m") ht <- air * strheight(names(x), cex = cex) mid <- (n + 1)%/%2 pos[mid] <- x[mid] if (n > 1) { for (i in (mid + 1):n) { pos[i] <- max(x[i], pos[i - 1] + ht[i]) } } if (n > 2) { for (i in (mid - 1):1) { pos[i] <- min(x[i], pos[i + 1] - ht[i]) } } segments(at, x[1], at, x[n]) if (side == "right") { text(at + hoff, pos, names(x), pos = 4, cex = cex, offset = 0.2, ...) segments(at, x, at + hoff, pos) } else if (side == "left") { text(at - hoff, pos, names(x), pos = 2, cex = cex, offset = 0.2, ...) segments(at, x, at - hoff, pos) } if (axis) axis(if (side == "right") 2 else 4, pos = at, las = 2) par(op) invisible(pos[order(ord)]) } vegan/R/lines.spantree.R0000644000176200001440000000040711020426553014627 0ustar liggesusers"lines.spantree" <- function (x, ord, display = "sites", ...) { ord <- scores(ord, display = display, ...) tree <- x$kid ordiArgAbsorber(ord[-1, 1], ord[-1, 2], ord[tree, 1], ord[tree, 2], FUN = segments, ...) invisible() } vegan/R/lines.radline.R0000644000176200001440000000032112031100300014375 0ustar liggesusers`lines.radline` <- function (x, ...) { lin <- fitted(x) rnk <- seq(along = lin) lines(rnk, lin, ...) invisible() } `lines.radfit` <- function(x, ...) { matlines(fitted(x), ...) } vegan/R/lines.procrustes.R0000644000176200001440000000053310667741210015225 0ustar liggesusers"lines.procrustes" <- function(x, type=c("segments", "arrows"), choices=c(1,2), ...) { type <- match.arg(type) X <- x$X[,choices, drop=FALSE] Y <- x$Yrot[, choices, drop=FALSE] if (type == "segments") segments(X[,1], X[,2], Y[,1], Y[,2], ...) else arrows(X[,1], X[,2], Y[,1], Y[,2], ...) invisible() } vegan/R/lines.prestonfit.R0000644000176200001440000000075610667741210015220 0ustar liggesusers"lines.prestonfit" <- function(x, line.col = "red", lwd = 2, ...) { p <- x$coefficients freq <- x$freq oct <- as.numeric(names(freq)) curve(p[3] * exp(-(x-p[1])^2/2/p[2]^2), -1, max(oct), add = TRUE, col = line.col, lwd = lwd, ...) segments(p["mode"], 0, p["mode"], p["S0"], col = line.col, ...) segments(p["mode"] - p["width"], p["S0"] * exp(-0.5), p["mode"] + p["width"], p["S0"] * exp(-0.5), col = line.col, ...) invisible() } vegan/R/lines.permat.R0000644000176200001440000000022611136254166014304 0ustar liggesusers## S3 lines method for permat `lines.permat` <- function(x, type = "bray", ...) { lines(summary(x)[[match.arg(type, c("bray", "chisq"))]], ...) } vegan/R/lines.humpfit.R0000644000176200001440000000057210667741210014473 0ustar liggesusers"lines.humpfit" <- function(x, segments=101, ...) { mass <- x$x if (!is.null(segments) && segments > 0) { mass <- seq(min(mass), max(mass), length=segments) fv <- predict(x, newdata = mass) } else { i <- order(mass) fv <- fitted(x) mass <- mass[i] fv <- fv[i] } lines(mass, fv, ...) invisible() } vegan/R/labels.envfit.R0000644000176200001440000000043212014462227014431 0ustar liggesusers`labels.envfit` <- function(object, ...) { out <- list("vectors" = rownames(object$vectors$arrows), "factors" = rownames(object$factors$centroids)) if (is.null(out$vectors) || is.null(out$factors)) out <- unlist(out, use.names = FALSE) out } vegan/R/kendall.post.R0000644000176200001440000001206011521606164014275 0ustar liggesusers`kendall.post` <- function(Y, group, nperm=999, mult="holm") { ### Function to carry out a posteriori tests on individual judges (e.g. species) ### for a single group or several groups of judges. ### ### copyleft - Guillaume Blanchet and Pierre Legendre, October 2008 ################################################################################ mult <- match.arg(mult, c("sidak", p.adjust.methods)) ##CC# Make sure Y is a matrix and find number of rows and columns of Y Y <- as.matrix(Y) n <- nrow(Y) p <- ncol(Y) if(p < 2) stop("There is a single variable in the data matrix") ##CC# Transform the species abundances to ranks, by column R <- apply(Y,2,rank) if(missing(group)) group <- rep(1,p) if(length(group) != p){ stop("The number of species in the vector differs from the total number of species") } ##CC# Separate tests for the variables in each group group <- as.factor(group) gr.lev <- levels(group) ngr <- nlevels(group) gr <- as.list(1:ngr) n.per.gr <- vector(length=ngr) for(i in 1:ngr){ gr[[i]] <- which(group==gr.lev[i]) n.per.gr[i] <- length(gr[[i]]) # Vector with the number of # variables per group } ##=============================== ##CC# start permutation procedure ##=============================== ##CC# Initialize the counters counter <- as.list(1:ngr) for(i in 1:ngr){ counter[[i]] <- vector(length = n.per.gr[i]) } W.gr <- vector("list",ngr) if(ngr > 1) spear.gr <- vector("list",ngr) for(i in 1:ngr){ p.i <- n.per.gr[i] if(p.i < 2) stop("There is a single variable in group ",gr.lev[i]) #CC# Extract variables part of #group i R.gr <- R[,gr[[i]]] # Table with species of group 'i' only #as columns CC# Calculate the #mean of the Spearman #correlations for each species #in a group spear.mat <- cor(R.gr) diag(spear.mat) <- NA spear.mean <- apply(spear.mat, 1, mean, na.rm=TRUE) #CC# Calculate Kendall's W for each variable W.var <- ((p.i-1)*spear.mean+1)/p.i #for(j in 1:n.per.gr[i]){ for(j in 1:p.i){ # Test each species in turn #CC# Create a new R where the #permuted variable has been #removed R.gr.mod <- R.gr[,-j] ##CC# Set counter counter[[i]][j] <- 1 ##CC# The actual permutation procedure for(k in 1:nperm){ var.perm <- sample(R.gr[,j]) spear.mat.perm <- cor(cbind(R.gr.mod, var.perm)) diag(spear.mat.perm) <- NA spear.mean.j.perm <- mean(spear.mat.perm[p.i,], na.rm=TRUE) W.perm <- ((p.i-1)*spear.mean.j.perm+1)/p.i if(W.perm >= W.var[j]) counter[[i]][j] <- counter[[i]][j]+1 } } W.gr[[i]] <- W.var if(ngr > 1) spear.gr[[i]] <- spear.mean } ##CC# Calculate P-values for(i in 1:ngr) { counter[[i]] <- counter[[i]]/(nperm+1) } ## Correction to P-values for multiple testing ## Write all P-values to a long vector 'vec' vec <- counter[[1]] if(ngr > 1) { for(i in 2:ngr) vec = c(vec, counter[[i]]) } if(length(vec) != p) stop("Error in putting together vector 'vec'") if(mult == "sidak") { vec.corr = NA for(i in 1:p) vec.corr = c(vec.corr, (1-(1-vec[i])^p)) vec.corr <- vec.corr[-1] } else { vec.corr <- p.adjust(vec, method=mult) } if(ngr > 1) { vec.gr <- vector("list",ngr) end <- 0 for(i in 1:ngr){ beg <- end+1 end <- end + n.per.gr[i] vec.gr[[i]] <- vec.corr[beg:end] } } ## Create data frames containing the results if(ngr == 1) { table <- rbind(spear.mean, W.var, counter[[1]], vec.corr) rownames(table) <- c("Spearman.mean", "W.per.species", "Prob", "Corrected prob") } else { table <- as.list(1:ngr) for(i in 1:ngr) { table[[i]] <- rbind(spear.gr[[i]], W.gr[[i]], counter[[i]], vec.gr[[i]]) rownames(table[[i]]) <- c("Spearman.mean", "W.per.species", "Prob", "Corrected prob") ## PL: Next line had been lost colnames(table[[i]]) <- colnames(table[[i]], do.NULL = FALSE, prefix = "Spec") } } if(ngr == 1) { out <- list(A_posteriori_tests=table, Correction.type=mult) } else { out <- list(A_posteriori_tests_Group=table, Correction.type=mult) } # class(out) <- "kendall.post" out } vegan/R/kendall.global.R0000644000176200001440000001030211204470425014542 0ustar liggesusers`kendall.global` <- function(Y, group, nperm=999, mult="holm") { ### Function to test the overall significance of the Kendall coefficient of ### concordance for a single group or several groups of judges (e.g. species) ### ### copyleft - Guillaume Blanchet and Pierre Legendre, October 2008 ################################################################################ mult <- match.arg(mult, c("sidak", p.adjust.methods)) ##CC# Make sure Y is a matrix and find number of rows and columns of Y Y <- as.matrix(Y) n <- nrow(Y) p <- ncol(Y) if(p < 2) stop("There is a single variable in the data matrix") ##CC# Transform the species abundances to ranks, by column R <- apply(Y,2,rank) if(missing(group)) group <- rep(1,p) if(length(group) != p){ stop("The number of species in the vector differs from the total number of species") } group <- as.factor(group) gr.lev <- levels(group) ngr <- nlevels(group) gr <- as.list(1:ngr) n.per.gr <- vector(length=ngr) for(i in 1:ngr){ gr[[i]] <- which(group==gr.lev[i]) n.per.gr[i] <- length(gr[[i]]) ## Vector containing the number of species per group } ## Initialise the vectors of results W.gr <- vector("numeric",ngr) F.gr <- vector("numeric",ngr) prob.F.gr <- vector("numeric",ngr) Chi2.gr <- vector("numeric",ngr) prob.perm.gr <- vector("numeric",ngr) vec <- NA for(i in 1:ngr){ p.i <- n.per.gr[i] if(p.i < 2) stop("There is a single variable in group ",gr.lev[i]) ##CC# Correction factors for tied ranks (eq. 3.3) t.ranks <- apply(R[,gr[[i]]], 2, function(x) summary(as.factor(x), maxsum=n)) T. <- sum(unlist(lapply(t.ranks, function(x) sum((x^3)-x)))) ##CC# Compute the Sum of squares of the uncentred ranks (S) (eq. 3.1) S <- sum(apply(R[,gr[[i]]], 1, sum)^2) ##CC# Compute Kendall's W (eq. 3.2) W.gr[i] <- ((12*S)-(3*(p.i^2)*n*(n+1)^2))/(((p.i^2)*((n^3)-n))-(p.i*T.)) ##C# Compute Fisher F statistic and associated probability F.gr[i] <- (p.i-1)*W.gr[i]/(1-W.gr[i]) nu1 <- n-1-(2/p.i) nu2 <- nu1*(p.i-1) prob.F.gr[i] <- pf(F.gr[i], nu1, nu2, lower.tail=FALSE) ##CC# Calculate Friedman's Chi-square (eq. 3.4) Chi2.gr[i] <- p.i*(n-1)*W.gr[i] counter <- 1 for(j in 1:nperm) { # Each species is permuted independently R.perm <- apply(R[,gr[[i]]], 2, sample) S.perm <- sum(apply(R.perm, 1, sum)^2) W.perm <- ((12*S.perm)-(3*(p.i^2)*n*(n+1)^2))/(((p.i^2)*((n^3)-n))-(p.i*T.)) Chi2.perm <- p.i*(n-1)*W.perm if(Chi2.perm >= Chi2.gr[i]) counter <- counter+1 } prob.perm.gr[i] <- counter/(nperm+1) } ## Correction to P-values for multiple testing if(ngr > 1) { if(mult == "sidak") { perm.corr <- NA for(i in 1:ngr) perm.corr = c(perm.corr, (1-(1-prob.perm.gr[i])^ngr)) perm.corr <- perm.corr[-1] # prob.F.corr <- NA for(i in 1:ngr) prob.F.corr = c(prob.F.corr, (1-(1-prob.F.gr[i])^ngr)) prob.F.corr <- prob.F.corr[-1] } else { perm.corr <- p.adjust(prob.perm.gr, method=mult) prob.F.corr <- p.adjust(prob.F.gr, method=mult) } } ## Create a data frame containing the results if(ngr == 1) { table <- rbind(W.gr, F.gr, prob.F.gr, Chi2.gr, prob.perm.gr) colnames(table) <- colnames(table,do.NULL = FALSE, prefix = "Group.") rownames(table) <- c("W", "F", "Prob.F", "Chi2", "Prob.perm") } else { table <- rbind(W.gr, F.gr, prob.F.gr, prob.F.corr, Chi2.gr, prob.perm.gr, perm.corr) colnames(table) <- colnames(table,do.NULL = FALSE, prefix = "Group.") rownames(table) <- c("W", "F", "Prob.F", "Corrected prob.F", "Chi2", "Prob.perm", "Corrected prob.perm") } if(ngr == 1) { out <- list(Concordance_analysis=table) } else { out <- list(Concordance_analysis=table, Correction.type=mult) } # class(out) <- "kendall.global" out } vegan/R/isomapdist.R0000644000176200001440000000341611320425753014060 0ustar liggesusers`isomapdist` <- function(dist, epsilon, k, path="shortest", fragmentedOK = FALSE, ...) { EPS <- 1e-5 op <- options(warn = 2) on.exit(options(op)) if (!inherits(dist, "dist")) dist <- as.dist(dist) options(op) method <- attr(dist, "method") if (missing(epsilon) && missing(k)) stop("Either epsilon or k must be given") if (!missing(epsilon) && !missing(k)) warning("Both epsilon and k given, using epsilon") if (!missing(epsilon)) dist[dist >= epsilon-EPS] <- NA else { dist <- as.matrix(dist) diag(dist) <- NA is.na(dist) <- apply(dist, 2, function(x) x > x[order(x, na.last=TRUE)[k]]) dist <- pmax(as.dist(dist), as.dist(t(dist)), na.rm = TRUE) } fragm <- distconnected(dist, toolong=0, trace=FALSE) take <- NULL if (length(unique(fragm)) > 1) { if (fragmentedOK) { warning("Data are fragmented: taking the largest fragment") take <- fragm == as.numeric(names(which.max(table(fragm)))) dist <- as.dist(as.matrix(dist)[take,take]) } else { stop("Data are fragmented") } } net <- which(!is.na(dist)) attr(dist, "method") <- method dist <- stepacross(dist, path = path, toolong = 0, trace = FALSE) if (any(is.na(dist))) { grps <- distconnected(dist, toolong=0) } if (missing(epsilon)) { attr(dist, "criterion") <-"k" attr(dist, "critval") <- k } else { attr(dist, "criterion") <- "epsilon" attr(dist, "critval") <- epsilon } attr(dist, "method") <- paste(attr(dist, "method"), "isomap") attr(dist, "net") <- net attr(dist, "take") <- take attr(dist, "call") <- match.call() dist } vegan/R/isomap.R0000644000176200001440000000160011457037426013174 0ustar liggesusers`isomap` <- function(dist, ndim=10, ...) { dist <- isomapdist(dist, ...) out <- cmdscale(dist, k=ndim, eig=TRUE) ## some versions of cmdscale may return NaN points corresponding ## to negative eigenvalues. if ((naxes <- sum(out$eig > 0)) < ndim) { out$points <- out$points[, seq(naxes), drop = FALSE] warning(gettextf("isomap returns only %d axes with positive eigenvalues", naxes)) } npoints <- nrow(out$points) net <- matrix(FALSE, nrow=npoints, ncol=npoints) net[lower.tri(net)][attr(dist, "net")] <- TRUE net <- which(net, arr.ind=TRUE) out$method <- attr(dist, "method") out$criterion <- attr(dist, "criterion") out$critval <- attr(dist, "critval") out$take <- attr(dist, "take") out$net <- net out$npoints <- npoints out$call <- match.call() class(out) <- "isomap" out } vegan/R/intersetcor.R0000644000176200001440000000076211472255314014250 0ustar liggesusersintersetcor <- function(object) { if (!inherits(object, "cca")) stop("can be used only with objects inheriting from 'cca'") wa <- object$CCA$wa if (!inherits(object, "rda")) { # is CCA w <- object$rowsum wa <- sweep(object$CCA$wa, 1, sqrt(w), "*") } X <- qr.X(object$CCA$QR) ## current R (2.12.0) uses wrong column names in pivoted qr.X() if (getRversion() <= "2.12.0") colnames(X)[object$CCA$QR$pivot] <- colnames(X) cor(X, wa) } vegan/R/initMDS.R0000644000176200001440000000015511631220326013202 0ustar liggesusers"initMDS" <- function(x, k=2) { nr <- attr(x, "Size") res <- runif(nr*k) dim(res) <- c(nr,k) res } vegan/R/inertcomp.R0000644000176200001440000000314111251223235013671 0ustar liggesusers"inertcomp" <- function (object, display = c("species", "sites"), statistic = c("explained", "distance"), proportional = FALSE) { display <- match.arg(display) statistic <- match.arg(statistic) if (!inherits(object, "cca")) stop("can be used only with objects inheriting from 'cca'") if (inherits(object, "capscale") && display == "species") stop("cannot analyse species with 'capscale'") pCCA <- object$pCCA$Fit CCA <- object$CCA$Xbar CA <- object$CA$Xbar if (inherits(object, "rda")) { nr <- nrow(CA) - 1 if (is.null(nr)) nr <- nrow(CCA) - 1 if (is.null(nr)) nr <- nrow(pCCA) - 1 } else { nr <- 1 } if (!is.null(pCCA)) { if (display == "sites") pCCA <- t(pCCA) pCCA <- diag(crossprod(pCCA))/nr } if (!is.null(CCA)) { CCA <- qr.fitted(object$CCA$QR, CCA) if (display == "sites") CCA <- t(CCA) CCA <- diag(crossprod(CCA))/nr } if (!is.null(CA)) { if (display == "sites") CA <- t(CA) CA <- diag(crossprod(CA))/nr } out <- cbind(pCCA, CCA, CA) if (statistic == "distance" && !proportional) { w <- weights(object, display = display) if (display == "sites" && !is.null(object$na.action) && inherits(object$na.action, "exclude")) w <- w[-object$na.action] out <- sweep(out, 1, w, "/") } if (proportional) out <- sweep(out, 1, rowSums(out), "/") out } vegan/R/indpower.R0000644000176200001440000000136611715417167013545 0ustar liggesusersindpower <- function(x, type=0) { x <- as.matrix(x) x <- ifelse(x > 0, 1, 0) if (NCOL(x) < 2) stop("provide at least 2 columns for 'x'") if (!(type %in% 0:2)) stop("'type' must be in c(0, 1, 2)") n <- nrow(x) j <- t(x) %*% x ip1 <- sweep(j, 1, diag(j), "/") ip2 <- 1 - sweep(-sweep(j, 2, diag(j), "-"), 1, n - diag(j), "/") out <- switch(as.character(type), "0" = sqrt(ip1 * ip2), "1" = ip1, "2" = ip2) cn <- if (is.null(colnames(out))) 1:ncol(out) else colnames(out) rn <- if (is.null(rownames(out))) 1:ncol(out) else rownames(out) colnames(out) <- paste("t", cn, sep=".") rownames(out) <- paste("i", rn, sep=".") out } vegan/R/identify.ordiplot.R0000644000176200001440000000030510667741210015346 0ustar liggesusers"identify.ordiplot" <- function (x, what, labels, ...) { x <- scores(x, what) if (missing(labels)) labels <- rownames(x) out <- identify(x, labels = labels, ...) out } vegan/R/humpfit.R0000644000176200001440000000232110667741210013354 0ustar liggesusers"humpfit" <- function (mass, spno, family = poisson, start) { hump <- function(p, mass, spno, ...) { x <- ifelse(mass < p[1], mass/p[1], p[1] * p[1]/mass/mass) fv <- p[3] * log(1 + p[2] * x/p[3]) n <- wt <- rep(1, length(x)) dev <- sum(dev.resids(spno, fv, wt)) aicfun(spno, n, fv, wt, dev)/2 } fam <- family(link = "identity") aicfun <- fam$aic dev.resids <- fam$dev.resids if (missing(start)) p <- c(mean(mass), 100, 10) else p <- start fit <- nlm(hump, p = p, mass = mass, spno = spno, hessian = TRUE) p <- fit$estimate names(p) <- c("hump", "scale", "alpha") x <- ifelse(mass < p[1], mass/p[1], p[1] * p[1]/mass/mass) fv <- p[3] * log(1 + p[2] * x/p[3]) res <- dev.resids(spno, fv, rep(1, length(x))) dev <- sum(res) residuals <- spno - fv aic <- fit$minimum * 2 + 6 rdf <- length(x) - 3 out <- list(nlm = fit, family = fam, y = spno, x = mass, coefficients = p, fitted.values = fv, aic = aic, rank = 3, df.residual = rdf, deviance = dev, residuals = residuals, prior.weights = rep(1, length(x))) class(out) <- c("humpfit", "glm") out } vegan/R/hiersimu.formula.R0000644000176200001440000000120212023317071015156 0ustar liggesusers`hiersimu.formula` <- function(formula, data, FUN, location = c("mean", "median"), relative = FALSE, drop.highest = FALSE, nsimul=99, ...) { ## evaluate formula if (missing(data)) data <- parent.frame() tmp <- hierParseFormula(formula, data) lhs <- tmp$lhs rhs <- tmp$rhs ## run simulations sim <- hiersimu.default(lhs, rhs, FUN = FUN, location = location, relative = relative, drop.highest = drop.highest, nsimul = nsimul, ...) call <- match.call() call[[1]] <- as.name("hiersimu") attr(sim, "call") <- call sim } vegan/R/hiersimu.default.R0000644000176200001440000000632212023317071015145 0ustar liggesusershiersimu.default <- function(y, x, FUN, location = c("mean", "median"), relative = FALSE, drop.highest = FALSE, nsimul=99, ...) { ## evaluate formula lhs <- as.matrix(y) if (missing(x)) x <- cbind(level_1=seq_len(nrow(lhs)), leve_2=rep(1, nrow(lhs))) rhs <- data.frame(x) rhs[] <- lapply(rhs, as.factor) rhs[] <- lapply(rhs, droplevels) nlevs <- ncol(rhs) if (is.null(colnames(rhs))) colnames(rhs) <- paste("level", 1:nlevs, sep="_") tlab <- colnames(rhs) ## check proper design of the model frame l1 <- sapply(rhs, function(z) length(unique(z))) if (!any(sapply(2:nlevs, function(z) l1[z] <= l1[z-1]))) stop("number of levels are inapropriate, check sequence") rval <- list() rval[[1]] <- rhs[,nlevs] nCol <- nlevs - 1 if (nlevs > 1) { nCol <- nlevs - 1 for (i in 2:nlevs) { rval[[i]] <- interaction(rhs[,nCol], rval[[(i-1)]], drop=TRUE) nCol <- nCol - 1 } } rval <- as.data.frame(rval[rev(1:length(rval))]) l2 <- sapply(rval, function(z) length(unique(z))) if (any(l1 != l2)) warning("levels are not perfectly nested") ## aggregate response matrix fullgamma <-if (nlevels(rhs[,nlevs]) == 1) TRUE else FALSE if (fullgamma && drop.highest) nlevs <- nlevs - 1 if (nlevs == 1 && relative) stop("'relative=FALSE' makes no sense with 1 level") ftmp <- vector("list", nlevs) for (i in 1:nlevs) { ftmp[[i]] <- as.formula(paste("~", tlab[i], "- 1")) } ## is there a method/burnin/thin in ... ? method <- if (is.null(list(...)$method)) "r2dtable" else list(...)$method burnin <- if (is.null(list(...)$burnin)) 0 else list(...)$burnin thin <- if (is.null(list(...)$thin)) 1 else list(...)$thin ## evaluate other arguments if (!is.function(FUN)) stop("'FUN' must be a function") location <- match.arg(location) aggrFUN <- switch(location, "mean" = mean, "median" = median) ## this is the function passed to oecosimu evalFUN <- function(x) { if (fullgamma && !drop.highest) { tmp <- lapply(1:(nlevs-1), function(i) t(model.matrix(ftmp[[i]], rhs)) %*% x) tmp[[nlevs]] <- matrix(colSums(x), nrow = 1, ncol = ncol(x)) } else { tmp <- lapply(1:nlevs, function(i) t(model.matrix(ftmp[[i]], rhs)) %*% x) } a <- sapply(1:nlevs, function(i) aggrFUN(FUN(tmp[[i]]))) # dots removed from FUN if (relative) a <- a / a[length(a)] a } ## processing oecosimu results sim <- oecosimu(lhs, evalFUN, method = method, nsimul=nsimul, burnin=burnin, thin=thin) # nam <- paste("level", 1:nlevs, sep=".") # names(sim$statistic) <- attr(sim$oecosimu$statistic, "names") <- nam names(sim$statistic) <- attr(sim$oecosimu$statistic, "names") <- tlab[1:nlevs] call <- match.call() call[[1]] <- as.name("hiersimu") attr(sim, "call") <- call attr(sim, "FUN") <- FUN attr(sim, "location") <- location attr(sim, "n.levels") <- nlevs attr(sim, "terms") <- tlab attr(sim, "model") <- rhs class(sim) <- c("hiersimu", class(sim)) sim } vegan/R/hiersimu.R0000644000176200001440000000007111751501303013515 0ustar liggesusershiersimu <- function (...) { UseMethod("hiersimu") } vegan/R/hierParseFormula.R0000644000176200001440000000106012023317071015137 0ustar liggesusers"hierParseFormula" <- function (formula, data) { lhs <- formula[[2]] if (any(attr(terms(formula, data = data), "order") > 1)) stop("interactions are not allowed") lhs <- as.matrix(eval(lhs, data)) formula[[2]] <- NULL rhs <- model.frame(formula, data, drop.unused.levels = TRUE) rhs[] <- lapply(rhs, function(u) { if (!is.factor(u)) u <- factor(u) u }) if (length(rhs) < 2) stop("at least 2 hierarchy levels are needed") attr(rhs, "terms") <- NULL list(lhs=lhs, rhs=rhs) } vegan/R/head.summary.cca.R0000644000176200001440000000032711070446622015024 0ustar liggesusers`head.summary.cca` <- function(x, n=6, tail = 0, ...) { print(x, head=n, tail=tail, ...) } `tail.summary.cca` <- function(x, n=6, head = 0, ...) { print(x, head=head, tail=n, ...) } vegan/R/goodness.rda.R0000644000176200001440000000433612116051677014300 0ustar liggesusers`goodness.rda` <- function (object, display = c("species", "sites"), choices, model = c("CCA", "CA"), statistic = c("explained", "distance"), summarize = FALSE, ...) { model <- match.arg(model) display <- match.arg(display) if (inherits(object, "capscale") && display == "species") stop("display = \"species\" not available for 'capscale'") if (is.null(object$CCA)) model <- "CA" if (is.null(object[[model]]) || object[[model]]$rank == 0) stop("model ", model, " is not available") statistic <- match.arg(statistic) cs <- weights(object, display = display) lambda2 <- sqrt(object[[model]]$eig) if (display == "species") { if (is.null(object$CCA)) Xbar <- object$CA$Xbar else Xbar <- object$CCA$Xbar v <- sweep(object[[model]]$v, 2, lambda2, "*") tot <- diag(crossprod(Xbar)/(nrow(Xbar) - 1)) } else { Xbar <- object$CA$Xbar tot <- diag(crossprod(t(Xbar))) if (!is.null(tot)) tot <- tot/(nrow(Xbar) - 1) if (!is.null(object$CCA)) { Xbar <- object$CCA$Xbar Xbar <- qr.fitted(object$CCA$QR, Xbar) tot <- tot + diag(crossprod(t(Xbar)))/(nrow(Xbar) - 1) } v <- sweep(object[[model]]$u, 2, lambda2, "*") } if (!missing(choices)) v <- v[, choices, drop = FALSE] vexp <- t(apply(v^2, 1, cumsum)) vexp <- sweep(vexp, 1, cs, "*") if (statistic == "explained") { if (!is.null(object$pCCA)) { Xbar <- object$pCCA$Fit if (display == "sites") Xbar <- t(Xbar) ptot <- diag(crossprod(Xbar)) tot <- tot + ptot vexp <- sweep(vexp, 1, ptot, "+") } vexp <- sweep(vexp, 1, tot, "/") } else { if (display == "sites" && (!is.null(object$CCA) || !is.null(object$pCCA))) stop("statistic 'distance' not available for sites in constrained analysis") vexp <- sweep(-(vexp), 1, tot, "+") vexp[vexp < 0] <- 0 vexp <- sweep(sqrt(vexp), 1, cs, "/") } if (summarize) vexp <- vexp[, ncol(vexp)] vexp } vegan/R/goodness.metaMDS.R0000644000176200001440000000415511550011747015016 0ustar liggesusers`goodness.metaMDS` <- function(object, dis, ...) { if (inherits(object, "monoMDS")) return(NextMethod("goodness", object, ...)) require(MASS) || stop("Needs MASS package") if (missing(dis)) dis <- metaMDSredist(object) if(attr(dis, "Size") != nrow(object$points)) stop("Dimensions do not match in ordination and dissimilarities") d <- order(dis) shep <- Shepard(dis, object$points) res <- (shep$y - shep$yf)^2/sum(shep$y^2) stress <- sqrt(sum(res))*100 if ( abs(stress - object$stress) > 0.001) stop("Dissimilarities and ordination do not match") res <- res[order(d)] attr(res, "Size") <- attr(dis, "Size") attr(res, "Labels") <- attr(dis, "Labels") class(res) <- "dist" sqrt(colSums(as.matrix(res))/2*10000) } `goodness.monoMDS` <- function(object, ...) { ## Return vector 'x' for which sum(x^2) == stress stresscomp <- function(y, yf, form) { num <- (y-yf)^2 if (form == 1) den <- sum(y^2) else den <- sum((y-mean(y))^2) num/den } ## Global, local if (object$model %in% c("global", "linear")) { x <- stresscomp(object$dist, object$dhat, object$isform) mat <- matrix(0, object$nobj, object$nobj) for (i in 1:object$ndis) mat[object$iidx[i], object$jidx[i]] <- x[i] res <- sqrt(colSums(mat + t(mat))/2) } ## Local: returns pointwise components of stress else if (object$model == "local") { res <- object$grstress/sqrt(object$ngrp) } else if (object$model == "hybrid" && object$ngrp == 2) { mat <- matrix(0, object$nobj, object$nobj) gr <- seq_len(object$ndis) < object$istart[2] x <- stresscomp(object$dist[gr], object$dhat[gr], object$isform) x <- c(x, stresscomp(object$dist[!gr], object$dhat[!gr], object$isform)) i <- object$iidx j <- object$jidx for (k in 1:object$ndis) { mat[i[k], j[k]] <- mat[i[k], j[k]] + x[k] } res <- sqrt(colSums(mat + t(mat))/4) } else { stop("unknown 'monoMDS' model") } res } vegan/R/goodness.cca.R0000644000176200001440000000367012116051677014260 0ustar liggesusers`goodness.cca` <- function (object, display = c("species", "sites"), choices, model = c("CCA", "CA"), statistic = c("explained", "distance"), summarize = FALSE, ...) { model <- match.arg(model) if (is.null(object$CCA)) model <- "CA" if (is.null(object[[model]]) || object[[model]]$rank == 0) stop("model ", model, " is not available") statistic <- match.arg(statistic) display <- match.arg(display) cs <- if(display == "species") object$colsum else object$rowsum lambda2 <- sqrt(object[[model]]$eig) if (display == "species") { if (is.null(object$CCA)) Xbar <- object$CA$Xbar else Xbar <- object$CCA$Xbar v <- sweep(object[[model]]$v, 2, lambda2, "*") tot <- diag(crossprod(Xbar)) } else { tot <- diag(crossprod(t(object$CA$Xbar))) if (!is.null(object$CCA)) { Xbar <- object$CCA$Xbar Xbar <- qr.fitted(object$CCA$QR, Xbar) tot <- tot + diag(crossprod(t(Xbar))) } v <- sweep(object[[model]]$u, 2, lambda2, "*") } if (!missing(choices)) v <- v[, choices, drop = FALSE] vexp <- t(apply(v^2, 1, cumsum)) if (statistic == "explained") { vexp <- sweep(vexp, 1, cs, "*") if (!is.null(object$pCCA)) { Xbar <- object$pCCA$Fit if (display == "sites") Xbar <- t(Xbar) ptot <- diag(crossprod(Xbar)) tot <- tot + ptot vexp <- sweep(vexp, 1, ptot, "+") } vexp <- sweep(vexp, 1, tot, "/") } else { if (display == "sites" && (!is.null(object$CCA) || !is.null(object$pCCA))) stop("statistic 'distance' not available for sites in constrained analysis") vexp <- sweep(-(vexp), 1, tot/cs, "+") vexp[vexp < 0] <- 0 vexp <- sqrt(vexp) } if (summarize) vexp <- vexp[, ncol(vexp)] vexp } vegan/R/goodness.R0000644000176200001440000000007510667741210013525 0ustar liggesusers"goodness" <- function(object, ...) UseMethod("goodness") vegan/R/fitted.rda.R0000644000176200001440000000135612104765233013732 0ustar liggesusers`fitted.rda` <- function (object, model = c("CCA", "CA", "pCCA"), type = c("response", "working"), ...) { type <- match.arg(type) model <- match.arg(model) if (model == "pCCA") Xbar <- object$pCCA$Fit else Xbar <- object[[model]]$Xbar if (model == "CCA") Xbar <- qr.fitted(object$CCA$QR, Xbar) if (type == "response") { cent <- attr(Xbar, "scaled:center") scal <- attr(Xbar, "scaled:scale") if (!is.null(scal)) { Xbar <- sweep(Xbar, 2, scal, "*") attr(Xbar, "scaled:scale") <- NULL } Xbar <- sweep(Xbar, 2, cent, "+") attr(Xbar, "scaled:center") <- NULL } else { Xbar <- Xbar/sqrt(nrow(Xbar)-1) } Xbar } vegan/R/fitted.radfit.R0000644000176200001440000000025312031100300014401 0ustar liggesusers`fitted.radfit` <- function(object, ...) { sapply(object$models, fitted) } `fitted.radfit.frame` <- function(object, ...) { lapply(object, fitted, ...) } vegan/R/fitted.procrustes.R0000644000176200001440000000132611475424323015374 0ustar liggesusers`fitted.procrustes` <- function(object, truemean = TRUE, ...) { fit <- object$Yrot if (truemean) fit <- sweep(fit, 2, object$xmean, "+") fit } ## Like above, except when takes 'newata' `predict.procrustes` <- function(object, newdata, truemean = TRUE, ...) { if (missing(newdata)) return(fitted(object, truemean = truemean)) if (object$symmetric) stop(gettextf("'predict' not available for symmetric procrustes analysis with 'newdata'")) Y <- as.matrix(newdata) ## scaling and rotation Y <- object$scale * Y %*% object$rotation ## translation: always Y <- sweep(Y, 2, object$translation, "+") if (!truemean) Y <- sweep(Y, 2, object$xmean, "-") Y } vegan/R/fitted.cca.R0000644000176200001440000000100412104765233013700 0ustar liggesusers`fitted.cca` <- function (object, model = c("CCA","CA","pCCA"), type = c("response", "working"), ...) { type <- match.arg(type) model <- match.arg(model) gtot <- object$grand.total rc <- object$rowsum %o% object$colsum if (model == "pCCA") Xbar <- object$pCCA$Fit else Xbar <- object[[model]]$Xbar if (model == "CCA") Xbar <- qr.fitted(object$CCA$QR, Xbar) if (type == "response") Xbar <- (Xbar * sqrt(rc) + rc) * gtot Xbar } vegan/R/fitted.capscale.R0000644000176200001440000000131012116051677014730 0ustar liggesusers`fitted.capscale` <- function(object, model = c("CCA", "CA", "pCCA", "Imaginary"), type = c("response", "working"), ...) { model <- match.arg(model) type <- match.arg(type) ## Return scaled eigenvalues U <- switch(model, CCA = object$CCA$u %*% diag(sqrt(object$CCA$eig)), CA = object$CA$u %*% diag(sqrt(object$CA$eig)), Imaginary = object$CA$imaginary.u.eig, pCCA = object$pCCA$Fit/object$adjust) ## Distances or working scores U if (type == "response") { U <- dist(U) ## remove additive constant (if add = TRUE) if (!is.null(object$ac)) U <- U - object$ac } U } vegan/R/fitspecaccum.R0000644000176200001440000000361512116051677014357 0ustar liggesusersfitspecaccum <- function(object, model, method = "random", ...) { MODELS <- c("arrhenius", "gleason", "gitay", "lomolino", "asymp", "gompertz", "michaelis-menten", "logis", "weibull") model <- match.arg(model, MODELS) if (!inherits(object, "specaccum")) object <- specaccum(object, method = method, ...) if (is.null(object$perm)) SpeciesRichness <- as.matrix(object$richness) else SpeciesRichness <- object$perm if (!is.null(object$individuals)) x <- object$individuals else x <- object$sites NLSFUN <- function(y, x, model, ...) { switch(model, "arrhenius" = nls(y ~ SSarrhenius(x, k, z), ...), "gleason" = nls(y ~ SSgleason(x, k, slope), ...), "gitay" = nls(y ~ SSgitay(x, k, slope), ...), "lomolino" = nls(y ~ SSlomolino(x, Asym, xmid, slope), ...), "asymp" = nls(y ~ SSasymp(x, Asym, R0, lrc), ...), "gompertz" = nls(y ~ SSgompertz(x, Asym, xmid, scal), ...), "michaelis-menten" = nls(y ~ SSmicmen(x, Vm, K), ...), "logis" = nls(y ~ SSlogis(x, Asym, xmid, scal), ...), "weibull" = nls(y ~ SSweibull(x, Asym, Drop, lrc, par), ...)) } mods <- lapply(seq_len(NCOL(SpeciesRichness)), function(i, ...) NLSFUN(SpeciesRichness[,i], x, model, ...)) object$fitted <- drop(sapply(mods, fitted)) object$residuals <- drop(sapply(mods, residuals)) object$coefficients <- drop(sapply(mods, coef)) object$models <- mods object$call <- match.call() class(object) <- c("fitspecaccum", class(object)) object } ### plot function `plot.fitspecaccum` <- function(x, col = par("fg"), lty = 1, xlab = "Sites", ylab = x$method, ...) { fv <- fitted(x) matplot(x$sites, fv, col = col, lty = lty, pch = NA, xlab = xlab, ylab = ylab, type = "l", ...) invisible() } vegan/R/fisherfit.R0000644000176200001440000000130110667741210013660 0ustar liggesusers"fisherfit" <- function (x, ...) { Dev.logseries <- function(n.r, p, N) { r <- as.numeric(names(n.r)) x <- N/(N + p) logmu <- log(p) + log(x) * r - log(r) lhood <- -sum(n.r * (logmu - log(n.r)) + 1) - p * log(1 - x) lhood } tmp <- as.rad(x) N <- sum(x) tmp <- tmp/N p <- 1/sum(tmp^2) n.r <- as.fisher(x) LSeries <- nlm(Dev.logseries, n.r = n.r, p = p, N = N, hessian = TRUE, ...) LSeries$df.residual <- sum(x > 0) - 1 LSeries$nuisance <- N/(N + LSeries$estimate) LSeries$fisher <- n.r class(LSeries) <- "fisherfit" LSeries } vegan/R/fisher.alpha.R0000644000176200001440000000101310667741210014241 0ustar liggesusers"fisher.alpha" <- function (x, MARGIN = 1, se = FALSE, ...) { x <- as.matrix(x) if(ncol(x) == 1) x <- t(x) sol <- apply(x, MARGIN, fisherfit) out <- unlist(lapply(sol, function(x) x$estimate)) if (se) { out <- list(alpha = out) out$se <- unlist(lapply(sol, function(x) sqrt(diag(solve(x$hessian)))[1])) out$df.residual <- unlist(lapply(sol, df.residual)) out$code <- unlist(lapply(sol, function(x) x$code)) out <- as.data.frame(out) } out } vegan/R/fieller.MOStest.R0000644000176200001440000000153411321342430014651 0ustar liggesusers`fieller.MOStest` <- function (object, level = 0.95) { smodel <- summary(object$mod) ## overdispersion included in cov.scaled var <- smodel$cov.scaled fam <- family(object$mod) k <- coef(object$mod) b2 <- -2 * k[3] u <- -k[2]/2/k[3] alpha <- (1-level)/2 limits <- numeric(2) names(limits) <- paste(round(100*(c(alpha, 1-alpha)), 1), "%") wvar <- var[2,2] uvar <- 4 * var[3,3] vvar <- -2 * var[2,3] z <- qnorm(1 - alpha) g <- z^2 * uvar/b2^2 if (g >= 1) { limits <- c(NA, NA) } else { x <- u - g * vvar/uvar f <- z/b2 s <- sqrt(wvar - 2 * u * vvar + u^2 * uvar - g * (wvar - vvar^2/uvar)) limits[1] <- (x - f * s)/(1 - g) limits[2] <- (x + f * s)/(1 - g) } limits } vegan/R/factorfit.R0000644000176200001440000000475212072532254013671 0ustar liggesusers"factorfit" <- function (X, P, permutations = 0, strata, w, ...) { P <- as.data.frame(P) P <- droplevels(P) ## make sure only the used levels are present if (any(!sapply(P, is.factor))) stop("All fitted variables must be factors") NR <- nrow(X) NC <- ncol(X) NF <- ncol(P) if (missing(w) || is.null(w)) w <- 1 if (length(w) == 1) w <- rep(w, NR) r <- NULL pval <- NULL totvar <- .C("goffactor", as.double(X), as.integer(rep(0, NR)), as.double(w), as.integer(NR), as.integer(NC), as.integer(1), double(1), double(1), double(1), var = double(1), PACKAGE = "vegan")$var sol <- centroids.cca(X, P, w) var.id <- rep(names(P), sapply(P, nlevels)) for (i in 1:length(P)) { A <- as.integer(P[[i]]) NL <- nlevels(P[[i]]) invar <- .C("goffactor", as.double(X), as.integer(A - 1), as.double(w), as.integer(NR), as.integer(NC), as.integer(NL), double(NL), double(NL), double(NL), var = double(1), PACKAGE = "vegan")$var r.this <- 1 - invar/totvar r <- c(r, r.this) if (permutations) { A <- as.integer(P[[i]]) NL <- nlevels(P[[i]]) tmp <- rep(NA, permutations) for (i in 1:permutations) { indx <- permuted.index(length(A), strata) take <- A[indx] invar <- .C("goffactor", as.double(X), as.integer(take - 1), as.double(w), as.integer(NR), as.integer(NC), as.integer(NL), double(NL), double(NL), double(NL), var = double(1), PACKAGE = "vegan")$var tmp[i] <- 1 - invar/totvar } pval.this <- (sum(tmp > r.this) + 1)/(permutations + 1) pval <- c(pval, pval.this) } } if (is.null(colnames(X))) colnames(sol) <- paste("Dim", 1:ncol(sol), sep = "") else colnames(sol) <- colnames(X) names(r) <- names(P) if (!is.null(pval)) names(pval) <- names(P) out <- list(centroids = sol, r = r, permutations = permutations, pvals = pval, var.id = var.id) if (!missing(strata)) { out$strata <- deparse(substitute(strata)) out$stratum.values <- strata } class(out) <- "factorfit" out } vegan/R/extractAIC.cca.R0000644000176200001440000000054711023001635014407 0ustar liggesusers"extractAIC.cca" <- function (fit, scale = 0, k = 2, ...) { n <- nrow(fit$CA$Xbar) edf <- 1 if (!is.null(fit$CCA$rank)) edf <- edf + fit$CCA$qrank if (!is.null(fit$pCCA$rank)) edf <- edf + fit$pCCA$rank #edf <- n - fit$CA$rank RSS <- deviance(fit) dev <- if(scale > 0) RSS/scale - n else n * log(RSS/n) c(edf, dev + k*edf) } vegan/R/eventstar.R0000644000176200001440000000115611630624717013723 0ustar liggesuserseventstar <- function(x, qmax=5) { if (is.null(dim(x))) x <- matrix(x, 1, length(x)) lossfun <- function(q, x) tsallis(x, scales=q, norm=TRUE) qstarfun <- function(x) { optimize(lossfun, interval=c(0, qmax), x=x)$minimum } qs <- apply(x, 1, qstarfun) Hs <- sapply(1:nrow(x), function(i) tsallis(x[i,], scales=qs[i], hill=FALSE)) S <- rowSums(x) Es <- ifelse(qs==1, log(S), Hs/((S^(1-qs)-1)/(1-qs))) Ds <- (1-(qs-1)*Hs)^(1/(1-qs)) out <- data.frame(qstar=qs, Estar=Es, Hstar=Hs, Dstar=Ds) rownames(out) <- rownames(x) out } vegan/R/estimateR.matrix.R0000644000176200001440000000010310667741210015134 0ustar liggesusers"estimateR.matrix" <- function(x, ...) apply(x, 1, estimateR, ...) vegan/R/estimateR.default.R0000644000176200001440000000453011527004531015256 0ustar liggesusers`estimateR.default` <- function (x, ...) { gradF <- function(a, i) { .expr4 <- sum(i * a) .expr7 <- 1 - a[1]/(1 - sum(i * a)) .expr8 <- 1/.expr7 .expr10 <- sum(a) .expr12 <- sum(i * (i - 1) * a) .expr13 <- sum(a) * sum(i * (i - 1) * a) .expr14 <- .expr7 * .expr4 .expr15 <- .expr4 - 1 .expr16 <- .expr14 * .expr15 .expr18 <- .expr13/.expr16 - 1 .expr20 <- sum(a) + a[1] * .expr18 .expr23 <- (1 - sum(i * a))^2 .expr25 <- 1/(1 - sum(i * a)) + a[1]/(1 - sum(i * a))^2 .expr26 <- .expr7^2 .expr35 <- .expr16^2 Grad <- a[1] * i/(.expr23 * .expr26) * .expr20 + .expr8 * (1 + a[1] * ((.expr12 + (.expr10 * i * (i - 1)))/.expr16 - .expr13 * ((.expr7 * i - (a[1] * i/.expr23) * .expr4) * .expr15 + .expr14 * i)/.expr35)) Grad[1] <- .expr25/.expr26 * .expr20 + .expr8 * (1 + (.expr18 + a[1] * (.expr12/.expr16 - .expr13 * ((.expr7 - .expr25 * .expr4) * .expr15 + .expr14)/.expr35))) Grad } if (!identical(all.equal(x, round(x)), TRUE)) stop("function accepts only integers (counts)") freq <- x[x > 0] X <- x[x > 0] T.X <- table(X) S.obs <- length(X) S.rare <- sum(T.X[as.numeric(names(T.X)) <= 10]) S.abund <- sum(T.X[as.numeric(names(T.X)) > 10]) N.rare <- sum(X[X < 11]) i <- 1:10 COUNT <- function(i, counts) { length(counts[counts == i]) } a <- sapply(i, COUNT, X) G <- a[1]/a[2] S.Chao1 <- S.obs + a[1] * (a[1] - 1) / (a[2] + 1)/ 2 Deriv.Ch1 <- gradF(a, i) sd.Chao1 <- sqrt(a[2] * ((G^4)/4 + G^3 + (G^2)/2)) C.ace <- 1 - a[1]/N.rare i <- 1:length(a) thing <- i * (i - 1) * a Gam <- sum(thing) * S.rare/(C.ace * N.rare * (N.rare - 1)) - 1 S.ACE <- S.abund + S.rare/C.ace + max(Gam, 0) * a[1]/C.ace sd.ACE <- sqrt(sum(Deriv.Ch1 %*% t(Deriv.Ch1) * (diag(a) - a %*% t(a)/S.ACE))) out <- list(S.obs = S.obs, S.chao1 = S.Chao1, se.chao1 = sd.Chao1, S.ACE = S.ACE, se.ACE = sd.ACE) out <- unlist(out) out } vegan/R/estimateR.data.frame.R0000644000176200001440000000010710667741210015636 0ustar liggesusers"estimateR.data.frame" <- function(x, ...) apply(x, 1, estimateR, ...) vegan/R/estimateR.R0000644000176200001440000000006710667741210013642 0ustar liggesusers"estimateR" <- function(x, ...) UseMethod("estimateR") vegan/R/estaccumR.R0000644000176200001440000000132211240621140013611 0ustar liggesusers##" Individual based accumulation model. Similar to poolaccum but uses ##estimateR. Inherits from "poolaccum" class and uses its methods. `estaccumR` <- function(x, permutations = 100) { n <- nrow(x) N <- seq_len(n) S <- chao <- ace <- matrix(0, nrow = n, ncol = permutations) for (i in 1:permutations) { take <- sample(n) tmp <- estimateR(apply(x[take,], 2, cumsum)) S[,i] <- tmp[1,] chao[,i] <- tmp[2,] ace[, i] <- tmp[4,] } means <- cbind(N = N, S = rowMeans(S), Chao = rowMeans(chao), ACE = rowMeans(ace)) out <- list(S = S, chao = chao, ace = ace, N = N, means = means) class(out) <- c("estaccumR", "poolaccum") out } vegan/R/envfit.formula.R0000644000176200001440000000042411252633607014642 0ustar liggesusers"envfit.formula" <- function(formula, data, ...) { if (missing(data)) data <- parent.frame() X <- formula[[2]] X <- eval(X, data, parent.frame()) formula[[2]] <- NULL P <- model.frame(formula, data, na.action = na.pass) envfit(X, P, ...) } vegan/R/envfit.default.R0000644000176200001440000000406612072532254014624 0ustar liggesusers"envfit.default" <- function (ord, env, permutations = 999, strata, choices = c(1, 2), display = "sites", w = weights(ord), na.rm = FALSE, ...) { weights.default <- function(object, ...) NULL w < eval(w) vectors <- NULL factors <- NULL seed <- NULL X <- scores(ord, display = display, choices = choices, ...) keep <- complete.cases(X) & complete.cases(env) if (any(!keep)) { if (!na.rm) stop("missing values in data: consider na.rm = TRUE") X <- X[keep,, drop=FALSE] env <- droplevels(env[keep,, drop=FALSE]) ## drop any lost levels na.action <- structure(seq_along(keep)[!keep], class="omit") } if (is.data.frame(env)) { facts <- unlist(lapply(env, is.factor)) if (sum(facts)) { Pfac <- env[, facts, drop = FALSE] P <- env[, !facts, drop = FALSE] if (length(P)) { if (permutations) { if (!exists(".Random.seed", envir = .GlobalEnv, inherits = FALSE)) { runif(1) } seed <- get(".Random.seed", envir = .GlobalEnv, inherits = FALSE) } vectors <- vectorfit(X, P, permutations, strata, choices, w = w, ...) } if (!is.null(seed)) { assign(".Random.seed", seed, envir = .GlobalEnv) } factors <- factorfit(X, Pfac, permutations, strata, choices, w = w, ...) sol <- list(vector = vectors, factors = factors) } else vectors <- vectorfit(X, env, permutations, strata, choices, w = w, ...) } else vectors <- vectorfit(X, env, permutations, strata, choices, w = w, ...) sol <- list(vectors = vectors, factors = factors) if (!is.null(na.action)) sol$na.action <- na.action class(sol) <- "envfit" sol } vegan/R/envfit.R0000644000176200001440000000007210667741210013174 0ustar liggesusers"envfit" <- function(...) { UseMethod("envfit") } vegan/R/eigenvals.R0000644000176200001440000000543611526162037013666 0ustar liggesusers# Extract eigenvalues from an object that has them `eigenvals` <- function(x, ...) { UseMethod("eigenvals") } `eigenvals.default`<- function(x, ...) { ## svd and eigen return unspecified 'list', see if this could be ## either of them (like does cmdscale) out <- NA if (is.list(x)) { ## eigen if (length(x) == 2 && all(names(x) %in% c("values", "vectors"))) out <- x$values ## svd: return squares of singular values else if (length(x) == 3 && all(names(x) %in% c("d", "u", "v"))) out <- x$d^2 ## cmdscale() will return all eigenvalues from R 2.12.1 else if (getRversion() > "2.12.0" && all(c("points","eig","GOF") %in% names(x))) out <- x$eig } class(out) <- "eigenvals" out } ## squares of sdev `eigenvals.prcomp` <- function(x, ...) { out <- x$sdev^2 names(out) <- colnames(x$rotation) class(out) <- "eigenvals" out } ## squares of sdev `eigenvals.princomp` <- function(x, ...) { out <- x$sdev^2 class(out) <- "eigenvals" out } ## concatenate constrained and unconstrained eigenvalues in cca, rda ## and capscale (vegan) -- ignore pCCA component `eigenvals.cca` <- function(x, constrained = FALSE, ...) { if (constrained) out <- x$CCA$eig else out <- c(x$CCA$eig, x$CA$eig) if (!is.null(out)) class(out) <- "eigenvals" out } ## wcmdscale (in vegan) `eigenvals.wcmdscale` <- function(x, ...) { out <- x$eig class(out) <- "eigenvals" out } ## pcnm (in vegan) `eigenvals.pcnm` <- function(x, ...) { out <- x$values class(out) <- "eigenvals" out } ## dudi objects of ade4 `eigenvals.dudi` <- function(x, ...) { out <- x$eig class(out) <- "eigenvals" out } ## labdsv::pco `eigenvals.pco` <- function(x, ...) { out <- x$eig class(out) <- "eigenvals" out } ## labdsv::pca `eigenvals.pca` <- function(x, ...) { out <- x$sdev^2 ## pca() may return only some first eigenvalues if ((seig <- sum(out)) < x$totdev) { names(out) <- paste("PC", seq_along(out), sep="") out <- c(out, "Rest" = x$totdev - seig) } class(out) <- "eigenvals" out } `print.eigenvals` <- function(x, ...) { print(zapsmall(unclass(x), ...)) invisible(x) } `summary.eigenvals` <- function(object, ...) { ## abs(object) is to handle neg eigenvalues of wcmdscale and ## capscale vars <- object/sum(abs(object)) importance <- rbind(`Eigenvalue` = object, `Proportion Explained` = round(abs(vars), 5), `Cumulative Proportion`= round(cumsum(abs(vars)), 5)) out <- list(importance = importance) class(out) <- c("summary.eigenvals", "summary.prcomp") out } vegan/R/eigengrad.R0000644000176200001440000000012710667741210013627 0ustar liggesusers"eigengrad" <- function (x, w) { attr(wascores(x, w, expand=TRUE), "shrinkage") } vegan/R/drop1.cca.R0000644000176200001440000000137211564452463013465 0ustar liggesusers`drop1.cca` <- function(object, scope, test = c("none", "permutation"), pstep = 100, perm.max = 200, ...) { if (inherits(object, "prc")) stop("'step'/'drop1' cannot be used for 'prc' objects") test <- match.arg(test) out <- NextMethod("drop1", object, test="none", ...) cl <- class(out) if (test == "permutation") { rn <- rownames(out)[-1] if (missing(scope)) scope <- rn else if (!is.character(scope)) scope <- drop.scope(scope) adds <- anova(object, by = "margin", step = pstep, perm.max = perm.max, scope = scope, ...) nr <- nrow(adds) out <- cbind(out, rbind(NA, adds[rn,3:5])) class(out) <- cl } out } vegan/R/downweight.R0000644000176200001440000000072010667741210014060 0ustar liggesusers"downweight" <- function (veg, fraction = 5) { Const1 <- 1e-10 if (fraction < 1) fraction <- 1/fraction veg <- as.matrix(veg) yeig1 <- apply(veg, 2, sum) y2 <- apply(veg^2, 2, sum) + Const1 y2 <- yeig1^2/y2 amax <- max(y2)/fraction v <- rep(1, ncol(veg)) downers <- y2 < amax v[downers] <- (y2/amax)[downers] veg <- sweep(veg, 2, v, "*") attr(veg, "v") <- v attr(veg, "fraction") <- fraction veg } vegan/R/diversity.R0000644000176200001440000000123311535067604013726 0ustar liggesusers`diversity` <- function (x, index = "shannon", MARGIN = 1, base = exp(1)) { x <- drop(as.matrix(x)) INDICES <- c("shannon", "simpson", "invsimpson") index <- match.arg(index, INDICES) if (length(dim(x)) > 1) { total <- apply(x, MARGIN, sum) x <- sweep(x, MARGIN, total, "/") } else { x <- x/sum(x) } if (index == "shannon") x <- -x * log(x, base) else x <- x*x if (length(dim(x)) > 1) H <- apply(x, MARGIN, sum, na.rm = TRUE) else H <- sum(x, na.rm = TRUE) if (index == "simpson") H <- 1 - H else if (index == "invsimpson") H <- 1/H H } vegan/R/distconnected.R0000644000176200001440000000117110667741210014530 0ustar liggesusers"distconnected" <- function(dis, toolong = 1, trace = TRUE) { n <- attr(dis, "Size") out <- .C("stepabyss", dis = as.double(dis), n = as.integer(n), toolong = as.double(toolong), val = integer(n), NAOK = TRUE, PACKAGE = "vegan")$val if (trace) { cat("Connectivity of distance matrix with threshold dissimilarity", toolong,"\n") n <- length(unique(out)) if (n == 1) cat("Data are connected\n") else { cat("Data are disconnected:", n, "groups\n") print(table(out, dnn="Groups sizes")) } } out } vegan/R/dispindmorisita.R0000644000176200001440000000243412036544727015115 0ustar liggesusers`dispindmorisita` <- function(x, unique.rm=FALSE, crit=0.05, na.rm=FALSE) { x <- as.matrix(x) n <- nrow(x) p <- ncol(x) Imor <- apply(x, 2, function(y) n * ((sum(y^2) - sum(y)) / (sum(y)^2 - sum(y)))) Smor <- Imor chicr <- qchisq(c(0+crit/2, 1-crit/2), n-1, lower.tail=FALSE) Muni <- apply(x, 2, function(y) (chicr[2] - n + sum(y)) / (sum(y) - 1)) Mclu <- apply(x, 2, function(y) (chicr[1] - n + sum(y)) / (sum(y) - 1)) rs <- colSums(x, na.rm=na.rm) pchi <- pchisq(Imor * (rs - 1) + n - rs, n-1, lower.tail=FALSE) for (i in 1:p) { if (rs[i] > 1) { if (Imor[i] >= Mclu[i] && Mclu[i] > 1) Smor[i] <- 0.5 + 0.5 * ((Imor[i] - Mclu[i]) / (n - Mclu[i])) if (Mclu[i] > Imor[i] && Imor[i] >=1) Smor[i] <- 0.5 * ((Imor[i] - 1) / (Mclu[i] - 1)) if (1 > Imor[i] && Imor[i] > Muni[i]) Smor[i] <- -0.5 * ((Imor[i] - 1) / (Muni[i] - 1)) if (1 > Muni[i] && Muni[i] > Imor[i]) Smor[i] <- -0.5 + 0.5 * ((Imor[i] - Muni[i]) / Muni[i]) } } out <- data.frame(imor = Imor, mclu = Mclu, muni = Muni, imst = Smor, pchisq = pchi) usp <- which(colSums(x > 0) == 1) if (unique.rm && length(usp) != 0) out <- out[-usp,] out } vegan/R/deviance.rda.R0000644000176200001440000000014311611555072014222 0ustar liggesusers`deviance.rda` <- function(object, ...) { object$CA$tot.chi * (nrow(object$CA$Xbar) - 1) } vegan/R/deviance.cca.R0000644000176200001440000000013111611555072014177 0ustar liggesusers`deviance.cca` <- function(object, ...) { object$CA$tot.chi * object$grand.tot } vegan/R/designdist.R0000644000176200001440000000211311014754161014030 0ustar liggesusers`designdist` <- function (x, method = "(A+B-2*J)/(A+B)", terms = c("binary", "quadratic", "minimum"), abcd = FALSE, name) { terms <- match.arg(terms) if (abcd && terms != "binary") warning("abcd = TRUE and terms are not 'binary':\nresults may be meaningless") x <- as.matrix(x) N <- nrow(x) P <- ncol(x) if (terms == "binary") x <- ifelse(x > 0, 1, 0) if (terms == "binary" || terms == "quadratic") x <- tcrossprod(x) if (terms == "minimum") { r <- rowSums(x) x <- dist(x, "manhattan") x <- (outer(r, r, "+") - as.matrix(x))/2 } d <- diag(x) A <- as.dist(outer(rep(1, N), d)) B <- as.dist(outer(d, rep(1, N))) J <- as.dist(x) if (abcd) { a <- J b <- A - J c <- B - J d <- P - A - B + J } dis <- eval(parse(text = method)) attributes(dis) <- attributes(J) attr(dis, "call") <- match.call() if (missing(name)) attr(dis, "method") <- paste(terms, method) else attr(dis, "method") <- name dis } vegan/R/densityplot.oecosimu.R0000644000176200001440000000103012023322311016055 0ustar liggesusers`densityplot.oecosimu` <- function(x, data, xlab = "Simulated", ...) { require(lattice) || stop("requires package 'lattice'") obs <- x$oecosimu$statistic sim <- rbind(obs, t(x$oecosimu$simulated)) nm <- names(obs)[col(sim)] densityplot( ~ as.vector(sim) | factor(nm, levels = unique(nm)), xlab = xlab, panel = function(x, ...) { panel.densityplot(x, ...) panel.abline(v = obs[panel.number()], ...) }, ...) } vegan/R/density.oecosimu.R0000644000176200001440000000065612023322311015173 0ustar liggesusers`density.oecosimu` <- function(x, ...) { cols <- nrow(x$oecosimu$simulated) if (cols > 1) warning("'density' is meaningful only with one statistic, you have ", cols) obs <- x$oecosimu$statistic out <- density(rbind(obs, t(x$oecosimu$simulated)), ...) out$observed <- obs out$call <- match.call() out$call[[1]] <- as.name("density") class(out) <- c("vegandensity", class(out)) out } vegan/R/density.anosim.R0000644000176200001440000000713112023322311014631 0ustar liggesusers### density & densityplot methods for vegan functions returning ### statistics from permuted/simulated data. These are modelled after ### density.oecosimu and densityplot.oecosimu (which are in their ### separate files). ## anosim `density.anosim` <- function(x, ...) { obs <- x$statistic ## Put observed statistic among permutations out <- density(c(obs, x$perm), ...) out$call <- match.call() out$observed <- obs out$call[[1]] <- as.name("density") class(out) <- c("vegandensity", class(out)) out } ## adonis can return a matrix of terms, hence we also have densityplot() `density.adonis` <- function(x, ...) { cols <- ncol(x$f.perms) if (cols > 1) warning("'density' is meaningful only with one term, you have ", cols) obs <- x$aov.tab$F.Model obs <- obs[!is.na(obs)] out <- density(c(obs, x$f.perms), ...) out$observed <- obs out$call <- match.call() out$call[[1]] <- as.name("density") class(out) <- c("vegandensity", class(out)) out } `densityplot.adonis` <- function(x, data, xlab = "Null", ...) { require(lattice) || stop("requires package 'lattice'") obs <- x$aov.tab$F.Model obs <- obs[!is.na(obs)] sim <- rbind(obs, x$f.perms) nm <- rownames(x$aov.tab)[col(sim)] densityplot( ~ as.vector(sim) | factor(nm, levels = unique(nm)), xlab = xlab, panel = function(x, ...) { panel.densityplot(x, ...) panel.abline(v = obs[panel.number()], ...) }, ...) } ## mantel `density.mantel` <- function(x, ...) { obs <- x$statistic out <- density(c(obs, x$perm), ...) out$observed <- obs out$call <- match.call() out$call[[1]] <- as.name("density") class(out) <- c("vegandensity", class(out)) out } ## mrpp `density.mrpp` <- function(x, ...) { obs <- x$delta out <- density(c(obs, x$boot.deltas), ...) out$observed <- obs out$call <- match.call() out$call[[1]] <- as.name("density") class(out) <- c("vegandensity", class(out)) out } ## anova.cca does not return permutation results, but permutest.cca ## does. However, permutest.cca always finds only one statistic. Full ## tables anova.cca are found by repeated calls to permutest.cca. `density.permutest.cca` <- function(x, ...) { obs <- x$F.0 out <- density(c(obs, x$F.perm), ...) out$observed <- obs out$call <- match.call() out$call[[1]] <- as.name("density") class(out) <- c("vegandensity", class(out)) out } ## protest `density.protest` <- function(x, ...) { obs <- x$t0 out <- density(c(obs, x$t), ...) out$observed <- obs out$call <- match.call() out$call[[1]] <- as.name("density") class(out) <- c("vegandensity", class(out)) out } #### plot method: the following copies stats::plot.density() code but #### adds one new argument to draw abline(v=...) for the observed #### statistic `plot.vegandensity` <- function (x, main = NULL, xlab = NULL, ylab = "Density", type = "l", zero.line = TRUE, obs.line = TRUE, ...) { if (is.null(xlab)) xlab <- paste("N =", x$n, " Bandwidth =", formatC(x$bw)) if (is.null(main)) main <- deparse(x$call) ## change obs.line to col=2 (red) if it was logical TRUE if (isTRUE(obs.line)) obs.line <- 2 plot.default(x, main = main, xlab = xlab, ylab = ylab, type = type, ...) if (zero.line) abline(h = 0, lwd = 0.1, col = "gray") if (is.character(obs.line) || obs.line) abline(v = x$observed, col = obs.line) invisible(NULL) } vegan/R/decostand.R0000644000176200001440000000604711270776630013662 0ustar liggesusers"decostand" <- function (x, method, MARGIN, range.global, logbase = 2, na.rm = FALSE, ...) { wasDataFrame <- is.data.frame(x) x <- as.matrix(x) METHODS <- c("total", "max", "frequency", "normalize", "range", "standardize", "pa", "chi.square", "hellinger", "log") method <- match.arg(method, METHODS) if (any(x < 0, na.rm = na.rm)) { k <- min(x, na.rm = na.rm) if (method %in% c("total", "frequency", "pa", "chi.square")) { warning("input data contains negative entries: result may be non-sense\n") } } else k <- .Machine$double.eps switch(method, total = { if (missing(MARGIN)) MARGIN <- 1 tmp <- pmax(k, apply(x, MARGIN, sum, na.rm = na.rm)) x <- sweep(x, MARGIN, tmp, "/") }, max = { if (missing(MARGIN)) MARGIN <- 2 tmp <- pmax(k, apply(x, MARGIN, max, na.rm = na.rm)) x <- sweep(x, MARGIN, tmp, "/") }, frequency = { if (missing(MARGIN)) MARGIN <- 2 tmp <- pmax(k, apply(x, MARGIN, sum, na.rm = na.rm)) fre <- apply(x > 0, MARGIN, sum, na.rm = na.rm) tmp <- fre/tmp x <- sweep(x, MARGIN, tmp, "*") }, normalize = { if (missing(MARGIN)) MARGIN <- 1 tmp <- apply(x^2, MARGIN, sum, na.rm = na.rm) tmp <- pmax(k, sqrt(tmp)) x <- sweep(x, MARGIN, tmp, "/") }, range = { if (missing(MARGIN)) MARGIN <- 2 if (missing(range.global)) xtmp <- x else { if (dim(range.global)[MARGIN] != dim(x)[MARGIN]) stop("range matrix doesn't match data matrix") xtmp <- as.matrix(range.global) } tmp <- apply(xtmp, MARGIN, min, na.rm = na.rm) ran <- apply(xtmp, MARGIN, max, na.rm = na.rm) ran <- ran - tmp ran <- pmax(k, ran, na.rm = na.rm) x <- sweep(x, MARGIN, tmp, "-") x <- sweep(x, MARGIN, ran, "/") }, standardize = { if (!missing(MARGIN) && MARGIN == 1) x <- t(scale(t(x))) else x <- scale(x) }, pa = { x <- ifelse(x > 0, 1, 0) }, chi.square = { if (!missing(MARGIN) && MARGIN == 2) x <- t(x) x <- sqrt(sum(x, na.rm = na.rm)) * x/outer(pmax(k, rowSums(x, na.rm = na.rm)), sqrt(colSums(x, na.rm = na.rm))) }, hellinger = { x <- sqrt(decostand(x, "total", MARGIN = MARGIN, na.rm = na.rm)) }, log = {### Marti Anderson logs, after Etienne Laliberte if (!isTRUE(all.equal(as.integer(x), as.vector(x)))) { x <- x / min(x[x > 0], na.rm = TRUE) warning("non-integer data: divided by smallest positive value", call. = FALSE) } x[x > 0 & !is.na(x)] <- log(x[x > 0 & !is.na(x)], base = logbase) + 1 }) if (any(is.nan(x))) warning("result contains NaN, perhaps due to impossible mathematical operation\n") if (wasDataFrame) x <- as.data.frame(x) attr(x, "decostand") <- method x } vegan/R/decorana.R0000644000176200001440000002212011530712277013454 0ustar liggesusers"decorana" <- function (veg, iweigh = 0, iresc = 4, ira = 0, mk = 26, short = 0, before = NULL, after = NULL) { Const1 <- 1e-10 Const2 <- 5 Const3 <- 1e-11 ZEROEIG <- 1e-7 # consider as zero eigenvalue veg <- as.matrix(veg) if (any(rowSums(veg) <= 0)) stop("All row sums must be >0 in the community matrix: remove empty sites.") if (any(veg < 0)) stop("'decorana' cannot handle negative data entries") if (any(colSums(veg) <= 0)) warning("Some species were removed because they were missing in the data.") nr <- nrow(veg) nc <- ncol(veg) mk <- mk + 4 if (mk < 14) mk <- 14 if (mk > 50) mk <- 50 if (ira) iresc <- 0 if (!is.null(before)) { if (is.unsorted(before)) stop("'before' must be sorted") if (length(before) != length(after)) stop("'before' and 'after' must have same lengths") for (i in 1:nr) { tmp <- veg[i, ] > 0 veg[i, tmp] <- approx(before, after, veg[i, tmp], rule = 2)$y } } if (iweigh) { veg <- downweight(veg, Const2) } v <- attr(veg, "v") v.fraction <- attr(veg, "fraction") adotj <- colSums(veg) adotj[adotj < Const3] <- Const3 aidot <- rowSums(veg) tot <- sum(adotj) yeig1 <- rep(1, nc) xeig1 <- rep(1, nr) eig <- 1 nid <- sum(veg > 0) cep <- .C("data2hill", as.double(veg), mi = as.integer(nr), n = as.integer(nc), nid = as.integer(nid), ibegin = integer(nr), iend = integer(nr), idat = integer(nid), qidat = double(nid), PACKAGE = "vegan")[c("mi", "n", "nid", "ibegin", "iend", "idat", "qidat")] ix1 <- ix2 <- ix3 <- rep(0, cep$mi) s1 <- .Fortran("eigy", x = as.double(xeig1), y = as.double(yeig1), eig = double(1), neig = as.integer(0), ira = as.integer(ira), iresc = as.integer(iresc), short = as.double(short), mi = as.integer(cep$mi), mk = as.integer(mk), n = as.integer(cep$n), nid = as.integer(cep$ni), ibegin = as.integer(cep$ibegin), iend = as.integer(cep$iend), idat = as.integer(cep$idat), qidat = as.double(cep$qidat), y2 = double(cep$n), y3 = double(cep$n), y4 = double(cep$n), y5 = double(cep$n), xeig1 = as.double(xeig1), xeig2 = double(cep$mi), xeig3 = double(cep$mi), ix1 = as.integer(ix1), ix2 = as.integer(ix2), ix3 = as.integer(ix3), aidot = as.double(aidot), adotj = as.double(adotj), PACKAGE = "vegan")[c("x", "y", "eig")] ## Eigenvalues can be computed zeros: zero the results exactly to ## avoid problems with rescaling and estimating final eigenvalues ## in arbitrary corner cases. if (s1$eig < ZEROEIG) s1$x[] <- s1$y[] <- s1$eig <- 0 if (!ira) ix1 <- .Fortran("cutup", x = as.double(s1$x), ix = as.integer(ix1), mi = as.integer(cep$mi), mk = as.integer(mk), PACKAGE = "vegan")$ix s2 <- .Fortran("eigy", x = as.double(xeig1), y = as.double(yeig1), eig = double(1), neig = as.integer(1), ira = as.integer(ira), iresc = as.integer(iresc), short = as.double(short), mi = as.integer(cep$mi), mk = as.integer(mk), n = as.integer(cep$n), nid = as.integer(cep$ni), ibegin = as.integer(cep$ibegin), iend = as.integer(cep$iend), idat = as.integer(cep$idat), qidat = as.double(cep$qidat), y2 = double(cep$n), y3 = double(cep$n), y4 = double(cep$n), y5 = double(cep$n), xeig1 = as.double(s1$x), xeig2 = double(cep$mi), xeig3 = double(cep$mi), ix1 = as.integer(ix1), ix2 = as.integer(ix2), ix3 = as.integer(ix3), aidot = as.double(aidot), adotj = as.double(adotj), PACKAGE = "vegan")[c("x", "y", "eig")] if (s2$eig < ZEROEIG) s2$x[] <- s2$y[] <- s2$eig <- 0 if (!ira) ix2 <- .Fortran("cutup", x = as.double(s2$x), ix = as.integer(ix2), mi = as.integer(cep$mi), mk = as.integer(mk), PACKAGE = "vegan")$ix s3 <- .Fortran("eigy", x = as.double(xeig1), y = as.double(yeig1), eig = double(1), neig = as.integer(2), ira = as.integer(ira), iresc = as.integer(iresc), short = as.double(short), mi = as.integer(cep$mi), mk = as.integer(mk), n = as.integer(cep$n), nid = as.integer(cep$ni), ibegin = as.integer(cep$ibegin), iend = as.integer(cep$iend), idat = as.integer(cep$idat), qidat = as.double(cep$qidat), y2 = double(cep$n), y3 = double(cep$n), y4 = double(cep$n), y5 = double(cep$n), xeig1 = as.double(s1$x), xeig2 = as.double(s2$x), xeig3 = double(cep$mi), ix1 = as.integer(ix1), ix2 = as.integer(ix2), ix3 = as.integer(ix3), aidot = as.double(aidot), adotj = as.double(adotj), PACKAGE = "vegan")[c("x", "y", "eig")] if (s3$eig < ZEROEIG) s3$x[] <- s3$y[] <- s3$eig <- 0 if (!ira) ix3 <- .Fortran("cutup", x = as.double(s3$x), ix = as.integer(ix3), mi = as.integer(cep$mi), mk = as.integer(mk), PACKAGE = "vegan")$ix s4 <- .Fortran("eigy", x = as.double(xeig1), y = as.double(yeig1), eig = double(1), neig = as.integer(3), ira = as.integer(ira), iresc = as.integer(iresc), short = as.double(short), mi = as.integer(cep$mi), mk = as.integer(mk), n = as.integer(cep$n), nid = as.integer(cep$ni), ibegin = as.integer(cep$ibegin), iend = as.integer(cep$iend), idat = as.integer(cep$idat), qidat = as.double(cep$qidat), y2 = double(cep$n), y3 = double(cep$n), y4 = double(cep$n), y5 = double(cep$n), xeig1 = as.double(s1$x), xeig2 = as.double(s2$x), xeig3 = as.double(s3$x), ix1 = as.integer(ix1), ix2 = as.integer(ix2), ix3 = as.integer(ix3), aidot = as.double(aidot), adotj = as.double(adotj), PACKAGE = "vegan")[c("x", "y", "eig")] if (s4$eig < ZEROEIG) s4$x[] <- s4$y[] <- s4$eig <- 0 if (s1$eig > ZEROEIG) s1$x <- .Fortran("yxmult", y = as.double(s1$y), x = as.double(s1$x), as.integer(cep$mi), as.integer(cep$n), as.integer(cep$nid), as.integer(cep$ibegin), as.integer(cep$iend), as.integer(cep$idat), as.double(cep$qidat), PACKAGE = "vegan")$x/aidot if (s2$eig > ZEROEIG) s2$x <- .Fortran("yxmult", y = as.double(s2$y), x = as.double(s2$x), as.integer(cep$mi), as.integer(cep$n), as.integer(cep$nid), as.integer(cep$ibegin), as.integer(cep$iend), as.integer(cep$idat), as.double(cep$qidat), PACKAGE = "vegan")$x/aidot if (s3$eig > ZEROEIG) s3$x <- .Fortran("yxmult", y = as.double(s3$y), x = as.double(s3$x), as.integer(cep$mi), as.integer(cep$n), as.integer(cep$nid), as.integer(cep$ibegin), as.integer(cep$iend), as.integer(cep$idat), as.double(cep$qidat), PACKAGE = "vegan")$x/aidot if (s4$eig > ZEROEIG) s4$x <- .Fortran("yxmult", y = as.double(s4$y), x = as.double(s4$x), as.integer(cep$mi), as.integer(cep$n), as.integer(cep$nid), as.integer(cep$ibegin), as.integer(cep$iend), as.integer(cep$idat), as.double(cep$qidat), PACKAGE = "vegan")$x/aidot rproj <- cbind(s1$x, s2$x, s3$x, s4$x) cproj <- cbind(s1$y, s2$y, s3$y, s4$y) evals <- c(s1$eig, s2$eig, s3$eig, s4$eig) if (ira) dnames <- paste("RA", 1:4, sep = "") else dnames <- paste("DCA", 1:4, sep = "") rownames(rproj) <- rownames(veg) colnames(rproj) <- dnames rownames(cproj) <- colnames(veg) colnames(cproj) <- dnames names(evals) <- dnames origin <- apply(rproj, 2, weighted.mean, aidot) if (ira) { evals.decorana <- NULL } else { evals.decorana <- evals var.r <- cov.wt(rproj, aidot) var.r <- diag(var.r$cov) * (1 - sum(var.r$wt^2)) var.c <- cov.wt(cproj, adotj) var.c <- diag(var.c$cov) * (1 - sum(var.c$wt^2)) evals <- var.r/var.c if (any(ze <- evals.decorana < ZEROEIG)) evals[ze] <- 0 } CA <- list(rproj = rproj, cproj = cproj, evals = evals, evals.decorana = evals.decorana, origin = origin, v = v, fraction = v.fraction, adotj = adotj, aidot = aidot, iweigh = iweigh, iresc = iresc, ira = ira, mk = mk - 4, short = short, before = before, after = after, call = match.call()) class(CA) <- "decorana" CA } vegan/R/coverscale.R0000644000176200001440000000240210667741210014026 0ustar liggesusers"coverscale" <- function (x, scale = c("Braun.Blanquet", "Domin", "Hult", "Hill", "fix", "log"), maxabund) { scale <- match.arg(scale) sol <- as.data.frame(x) x <- as.matrix(x) switch(scale, Braun.Blanquet = { codes <- c("r", "+", as.character(1:5)) lims <- c(0, 0.1, 1, 5, 25, 50, 75, 100) }, Domin = { codes <- c("+", as.character(1:9), "X") lims <- c(0, 0.01, 0.1, 1, 5, 10, 25, 33, 50, 75, 90, 100) }, Hult = { codes <- as.character(1:5) lims <- c(0, 100/2^(4:1), 100) }, Hill = { codes <- as.character(1:5) lims <- c(0, 2, 5, 10, 20, 100) }, fix = { codes <- c("+", as.character(1:9), "X") lims <- c(0:10, 11 - 10 * .Machine$double.eps) }, log = { codes <- c("+", as.character(1:9)) if (missing(maxabund)) maxabund <- max(x) lims <- c(0, maxabund/2^(9:1), maxabund) }) for (i in 1:nrow(x)) { tmp <- x[i, ] > 0 sol[i, tmp] <- cut(x[i, tmp], breaks = lims, labels = codes, right = FALSE, include.lowest = TRUE) } attr(sol, "scale") <- if (scale == "log") paste("log, with maxabund", maxabund) else scale sol } vegan/R/cophenetic.spantree.R0000644000176200001440000000047711102317546015647 0ustar liggesusers"cophenetic.spantree" <- function(x) { n <- length(x$kid) + 1 mat <- matrix(NA, nrow=n, ncol=n) ind <- apply(cbind(2:n, x$kid), 1, sort) ind <- t(ind[2:1,]) mat[ind] <- x$dist d <- as.dist(mat) attr(d, "Labels") <- x$labels stepacross(d, path = "extended", toolong=0, trace=FALSE) } vegan/R/contribdiv.R0000644000176200001440000000331311527004531014037 0ustar liggesusers## Contribution diversity ## Lu, H.P., H.H. Wagner and X.Y. Chen (2007). ## A contribution diversity approach to evaluate species diversity. ## Basic and Applied Ecology 8: 1 -12. `contribdiv` <- function(comm, index = c("richness", "simpson"), relative = FALSE, scaled = TRUE, drop.zero = FALSE) { index <- match.arg(index) x <- comm[rowSums(comm) > 0, colSums(comm) > 0] n <- nrow(x) S <- ncol(x) if (index == "richness") { n.i <- colSums(x > 0) S.k <- rowSums(x > 0) alpha <- S.k / n beta <- apply(x, 1, function(z) sum((n - n.i[z > 0]) / (n * n.i[z > 0]))) denom <- 1 } else { P.ik <- decostand(x, "total") P.i <- apply(P.ik, 2, function(z) sum(z) / n) P.i2 <- matrix(P.i, n, S, byrow=TRUE) alpha <- diversity(x, "simpson") beta <- rowSums(P.ik * (P.ik - P.i2)) denom <- n } gamma <- alpha + beta D <- sum(beta) / sum(gamma) if (relative) { denom <- if (scaled) {denom * sum(gamma)} else 1 alpha <- (alpha - mean(alpha)) / denom beta <- (beta - mean(beta)) / denom gamma <- (gamma - mean(gamma)) / denom } rval <- data.frame(alpha = alpha, beta = beta, gamma = gamma) if (!drop.zero && nrow(comm) != n) { nas <- rep(NA, nrow(comm)) rval2 <- data.frame(alpha = nas, beta = nas, gamma = nas) rval2[rowSums(comm) > 0, ] <- rval rval <- rval2 } attr(rval, "diff.coef") <- D attr(rval, "index") <- index attr(rval, "relative") <- relative attr(rval, "scaled") <- scaled class(rval) <- c("contribdiv", "data.frame") rval } vegan/R/confint.fisherfit.R0000644000176200001440000000027110667741210015324 0ustar liggesusers"confint.fisherfit" <- function (object, parm, level=0.95, ...) { if (!require(MASS)) stop("Needs packages MASS .. not found") confint(profile(object), level=level, ...) } vegan/R/confint.MOStest.R0000644000176200001440000000026211012111412014653 0ustar liggesusers`confint.MOStest` <- function (object, parm = 1, level = 0.95, ...) { require(MASS) || stop("requires packages MASS") confint(profile(object), level = level, ...) } vegan/R/commsimulator.R0000644000176200001440000000655511636647312014615 0ustar liggesusers"commsimulator" <- function (x, method, thin = 1) { method <- match.arg(method, c("r0","r1","r2","r00","c0","swap", "tswap", "backtrack", "quasiswap")) if (any(x > 1)) x <- ifelse(x > 0, 1, 0) nr <- nrow(x) nc <- ncol(x) if (method %in% c("r0", "r1", "r2")) { rs <- rowSums(x) if (method == "r0") p <- rep(1, nc) else p <- colSums(x) if (method == "r2") p <- p*p out <- matrix(0, nrow=nr, ncol=nc) for (i in 1:nr) out[i,sample.int(nc, rs[i], prob=p)] <- 1 } else if (method == "r00") { out <- numeric(nr*nc) out[sample.int(length(out), sum(x))] <- 1 dim(out) <- dim(x) } else if (method == "c0") { cs <- colSums(x) out <- matrix(0, nrow=nr, ncol=nc) for (j in 1:nc) out[sample.int(nr, cs[j]), j] <- 1 } else if (method == "swap") { x <- as.matrix(x) out <- .C("swap", m = as.integer(x), as.integer(nrow(x)), as.integer(ncol(x)), as.integer(thin), PACKAGE = "vegan")$m dim(out) <- dim(x) } else if (method == "tswap") { x <- as.matrix(x) out <- .C("trialswap", m = as.integer(x), as.integer(nrow(x)), as.integer(ncol(x)), as.integer(thin), PACKAGE = "vegan")$m dim(out) <- dim(x) } else if (method == "quasiswap") { out <- r2dtable(1, rowSums(x), colSums(x))[[1]] out <- .C("quasiswap", m = as.integer(out), as.integer(nrow(x)), as.integer(ncol(x)), PACKAGE = "vegan")$m dim(out) <- dim(x) } else if (method == "backtrack") { fill <- sum(x) rs <- rowSums(x) cs <- colSums(x) all <- matrix(1:(nr*nc), nrow=nr, ncol=nc) out <- matrix(0, nrow=nr, ncol=nc) free <- matrix(1:(nr*nc), nrow=nr) icount <- numeric(length(rs)) jcount <- numeric(length(cs)) ## Fill: ordering by cell probabilities prob <- outer(rs, cs, "*") ij <- sample(free, prob=prob) i <- (ij - 1) %% nr + 1 j <- (ij - 1) %/% nr + 1 for (k in 1:length(ij)) { if (icount[i[k]] < rs[i[k]] && jcount[j[k]] < cs[j[k]]) { out[ij[k]] <- 1 icount[i[k]] <- icount[i[k]] + 1 jcount[j[k]] <- jcount[j[k]] + 1 } } ## "Backtrack": remove a random presence and fill with !present ndrop <- 1 for (i in 1:10000) { oldout <- out oldn <- sum(out) drop <- sample(all[out==1], ndrop) out[drop] <- 0 candi <- outer(rowSums(out) < rs, colSums(out) < cs, "&") & out == 0 while (sum(candi) > 0) { if (sum(candi) > 1) ij <- sample(all[candi], 1) else ij <- all[candi] out[ij] <- 1 candi <- outer(rowSums(out) < rs, colSums(out) < cs, "&") & out == 0 } if (sum(out) >= fill) break if (oldn >= sum(out)) ndrop <- min(ndrop + 1, 4) else ndrop <- 1 if (oldn > sum(out)) out <- oldout } } colnames(out) <- colnames(x) rownames(out) <- rownames(x) out } vegan/R/coef.rda.R0000644000176200001440000000013111247502472013356 0ustar liggesusers"coef.rda" <- function (object, ...) { Q <- object$CCA$QR qr.coef(Q, object$CCA$u) } vegan/R/coef.radfit.R0000644000176200001440000000062612031100300014042 0ustar liggesusers`coef.radfit` <- function (object, ...) { out <- sapply(object$models, function(x) if (length(coef(x)) < 3) c(coef(x), rep(NA, 3 - length(coef(x)))) else coef(x)) out <- t(out) colnames(out) <- paste("par", 1:3, sep = "") out } `coef.radfit.frame` <- function(object, ...) { lapply(object, coef, ...) } vegan/R/coef.cca.R0000644000176200001440000000021511247502472013341 0ustar liggesusers"coef.cca" <- function (object, ...) { Q <- object$CCA$QR u <- object$CCA$u u <- sweep(u, 1, sqrt(object$rowsum), "*") qr.coef(Q, u) } vegan/R/clamtest.R0000644000176200001440000001224012075212247013513 0ustar liggesusers## CLAM, reproduction of software described in Chazdon et al. 2011 ## Ecology, 92, 1332--1343 clamtest <- function(comm, groups, coverage.limit = 10, specialization = 2/3, npoints = 20, alpha = 0.05/20) { ## inital checks comm <- as.matrix(comm) if (NROW(comm) < 2) stop("'comm' must have at least 2 rows") if (nrow(comm) > 2 && missing(groups)) stop("'groups' is missing") if (nrow(comm) == 2 && missing(groups)) groups <- if (is.null(rownames(comm))) c("Group.1", "Group.2") else rownames(comm) if (length(groups) != nrow(comm)) stop("length of 'groups' must equal 'nrow(comm)'") if (length(unique(groups)) != 2) stop("number of groups must be 2") glabel <- as.character(unique(groups)) if (is.null(colnames(comm))) colnames(comm) <- paste("Species", 1:ncol(comm), sep=".") if (any(colSums(comm) <= 0)) stop("'comm' contains zero sum columns") spp <- colnames(comm) ## reproduced from Chazdon et al. 2011, Ecology 92, 1332--1343 S <- ncol(comm) if (nrow(comm) == 2) { Y <- comm[glabel[1],] X <- comm[glabel[2],] } else { Y <- colSums(comm[which(groups==glabel[1]),]) X <- colSums(comm[which(groups==glabel[2]),]) } names(X) <- names(Y) <- NULL #all(ct$Total_SG == Y) #all(ct$Total_OG == X) m <- sum(Y) n <- sum(X) if (sum(Y) <= 0 || sum(X) <= 0) stop("zero group totals not allowed") ## check if comm contains integer, especially for singletons if (any(X[X>0] < 1) || any(Y[Y>0] < 1)) warning("<1 non integer values detected: analysis might not be meaningful") if (abs(sum(X,Y) - sum(as.integer(X), as.integer(Y))) > 10^-6) warning("non integer values detected") C1 <- 1 - sum(X==1)/n C2 <- 1 - sum(Y==1)/m ## this stands for other than 2/3 cases uu <- specialization/(1-specialization) ## critical level Zp <- qnorm(alpha, lower.tail=FALSE) #p_i=a #pi_i=b ## function to calculate test statistic from Appendix D ## (Ecological Archives E092-112-A4) ## coverage limit is count, not freq !!! testfun <- function(p_i, pi_i, C1, C2, n, m) { C1 <- ifelse(p_i*n < coverage.limit, C1, 1) C2 <- ifelse(pi_i*m < coverage.limit, C2, 1) Var <- C1^2*(p_i*(1-p_i)/n) + uu^2*C2^2*(pi_i*(1-pi_i)/m) C1*p_i - C2*pi_i*uu - Zp*sqrt(Var) } ## root finding for iso-lines (instead of itarative search) rootfun <- function(pi_i, C1, C2, n, m, upper) { f <- function(p_i) testfun(p_i/n, pi_i/m, C1, C2, n, m) if (length(unique(sign(c(f(1), f(upper))))) > 1) ceiling(uniroot(f, lower=1, upper=upper)$root) else NA } ## sequences for finding Xmin and Ymin values Xseq <- as.integer(trunc(seq(1, max(X), len=npoints))) Yseq <- as.integer(trunc(seq(1, max(Y), len=npoints))) ## finding Xmin and Ymin values for Xseq and Yseq Xmins <- sapply(Yseq, function(z) rootfun(z, C1, C2, n, m, upper=max(X))) Ymins <- sapply(Xseq, function(z) rootfun(z, C2, C1, m, n, upper=max(Y))) ## needed to tweak original set of rules (extreme case reported ## by Richard Telford failed here) if (all(is.na(Xmins))) Xmins[1] <- 1 if (all(is.na(Ymins))) Ymins[1] <- 1 minval <- list(data.frame(x=Xseq[!is.na(Ymins)], y=Ymins[!is.na(Ymins)]), data.frame(x=Xmins[!is.na(Xmins)], y=Yseq[!is.na(Xmins)])) ## shared but too rare Ymin <- Ymins[1] Xmin <- Xmins[1] sr <- X < Xmin & Y < Ymin ## consequence of manually setting Xmin/Ymin resolved here tmp1 <- if (Xmin==1) list(x=1, y=Xmin) else approx(c(Xmin, 1), c(1, Ymin), xout=1:Xmin) tmp2 <- if (Ymin==1) list(x=1, y=Ymin) else approx(c(1, Ymin), c(Xmin, 1), xout=1:Ymin) for (i in 1:S) { if (X[i] %in% tmp1$x) sr[i] <- Y[i] < tmp1$y[which(X[i]==tmp1$x)] if (Y[i] %in% tmp2$x) sr[i] <- X[i] < tmp2$y[which(Y[i]==tmp2$x)] } ## classification a <- ifelse(X==0, 1, X)/n # \hat{p_i} b <- ifelse(Y==0, 1, Y)/m # \hat{\pi_i} specX <- !sr & testfun(a, b, C1, C2, n, m) > 0 specY <- !sr & testfun(b, a, C2, C1, m, n) > 0 gen <- !sr & !specX & !specY ## crosstable tmp <- ifelse(cbind(gen, specY, specX, sr), 1, 0) types <- c("Generalist", paste("Specialist", glabel[1], sep="_"), paste("Specialist", glabel[2], sep="_"), "Too_rare") classes <- factor((1:4)[rowSums(tmp*col(tmp))], levels=1:4) levels(classes) <- c("Generalist", paste("Specialist", glabel[1], sep="_"), paste("Specialist", glabel[2], sep="_"), "Too_rare") tab <- data.frame(Species=spp, y=Y, x=X, Classes=classes) colnames(tab)[2:3] <- paste("Total", glabel, sep="_") rownames(tab) <- NULL class(tab) <- c("clamtest","data.frame") attr(tab, "settings") <- list(labels = glabel, coverage.limit = coverage.limit, specialization = specialization, npoints = npoints, alpha = alpha) attr(tab, "minv") <- minval attr(tab, "coverage") <- structure(c(C2, C1), .Names=glabel) tab } vegan/R/checkSelect.R0000644000176200001440000000105611760220402014107 0ustar liggesusers## internal function for checking select arguments in ordination plotting ## functions .checkSelect <- function(select, scores) { ## check `select` and length of scores match if(is.logical(select) && !isTRUE(all.equal(length(select), NROW(scores)))) { warning("Length of logical vector 'select' does not match the number of scores.\nIgnoring 'select'.") } else { scores <- if(is.matrix(scores)) { scores[select, , drop = FALSE] } else { scores[select] } } scores } vegan/R/centroids.cca.R0000644000176200001440000000207211742521643014423 0ustar liggesusers`centroids.cca` <- function(x, mf, wt) { facts <- sapply(mf, is.factor) if (!any(facts)) return(NULL) mf <- mf[, facts, drop = FALSE] mf <- droplevels(mf) if (missing(wt)) wt <- rep(1, nrow(mf)) ind <- seq_len(nrow(mf)) workhorse <- function(x, wt) colSums(x * wt) / sum(wt) tmp <- lapply(mf, function(fct) tapply(ind, fct, function(i) workhorse(x[i,, drop=FALSE], wt[i]))) tmp <- lapply(tmp, function(z) sapply(z, rbind)) pnam <- labels(tmp) out <- NULL if (ncol(x) == 1) { for(i in 1:length(tmp)) { names(tmp[[i]]) <- paste(pnam[i], names(tmp[[i]]), sep="") out <- c(out, tmp[[i]]) out <- matrix(out, nrow=1, dimnames = list(NULL, names(out))) } } else { for (i in 1:length(tmp)) { colnames(tmp[[i]]) <- paste(pnam[i], colnames(tmp[[i]]), sep = "") out <- cbind(out, tmp[[i]]) } } out <- t(out) colnames(out) <- colnames(x) out } vegan/R/cca.formula.R0000644000176200001440000000236411532743243014101 0ustar liggesusers`cca.formula` <- function (formula, data, na.action = na.fail, subset = NULL, ...) { if (missing(data)) { data <- parent.frame() } else { data <- ordiGetData(match.call(), environment(formula)) } d <- ordiParseFormula(formula, data, na.action = na.action, subset = substitute(subset)) sol <- cca.default(d$X, d$Y, d$Z) if (!is.null(sol$CCA) && sol$CCA$rank > 0) sol$CCA$centroids <- centroids.cca(sol$CCA$wa, d$modelframe, sol$rowsum) if (!is.null(sol$CCA$alias)) sol$CCA$centroids <- unique(sol$CCA$centroids) ## See that there really are centroids if (!is.null(sol$CCA$centroids)) { rs <- rowSums(sol$CCA$centroids^2) sol$CCA$centroids <- sol$CCA$centroids[rs > 1e-04, , drop = FALSE] if (length(sol$CCA$centroids) == 0) sol$CCA$centroids <- NULL } sol$terms <- d$terms sol$terminfo <- ordiTerminfo(d, d$modelframe) sol$subset <- d$subset sol$na.action <- d$na.action sol$call <- match.call() sol$call[[1]] <- as.name("cca") sol$call$formula <- formula(d$terms, width.cutoff = 500) if (!is.null(sol$na.action)) sol <- ordiNAexclude(sol, d$excluded) sol } vegan/R/cca.default.R0000644000176200001440000001265211532743243014061 0ustar liggesusers`cca.default` <- function (X, Y, Z, ...) { ZERO <- 1e-04 CCA <- NULL pCCA <- NULL CA <- NULL weight.centre <- function(x, w) { w.c <- apply(x, 2, weighted.mean, w = w) x <- sweep(x, 2, w.c, "-") x <- sweep(x, 1, sqrt(w), "*") attr(x, "centre") <- w.c x } X <- as.matrix(X) if (any(rowSums(X) <= 0)) stop("All row sums must be >0 in the community data matrix") if (any(tmp <- colSums(X) <= 0)) { exclude.spec <- seq(along=tmp)[tmp] names(exclude.spec) <- colnames(X)[tmp] class(exclude.spec) <- "exclude" X <- X[, !tmp, drop = FALSE] } gran.tot <- sum(X) X <- X/gran.tot rowsum <- apply(X, 1, sum) colsum <- apply(X, 2, sum) rc <- outer(rowsum, colsum) Xbar <- (X - rc)/sqrt(rc) tot.chi <- sum(svd(Xbar, nu = 0, nv = 0)$d^2) if (!missing(Z) && !is.null(Z)) { Z <- as.matrix(Z) Z.r <- weight.centre(Z, rowsum) Q <- qr(Z.r) Z <- qr.fitted(Q, Xbar) tmp <- sum(svd(Z, nu = 0, nv = 0)$d^2) if (Q$rank) { pCCA <- list(rank = Q$rank, tot.chi = tmp, QR = Q, Fit = Z, envcentre = attr(Z.r, "centre")) Xbar <- qr.resid(Q, Xbar) } if (tmp < ZERO) pCCA$tot.chi <- 0 } else Z.r <- NULL if (!missing(Y) && !is.null(Y)) { Y <- as.matrix(Y) Y.r <- weight.centre(Y, rowsum) Q <- qr(cbind(Z.r, Y.r), tol = ZERO) if (is.null(pCCA)) rank <- Q$rank else rank <- Q$rank - pCCA$rank ## save rank of constraints qrank <- rank Y <- qr.fitted(Q, Xbar) sol <- svd(Y) ## rank of svd can be < qrank rank <- min(rank, sum(sol$d > ZERO)) ax.names <- paste("CCA", 1:length(sol$d), sep = "") colnames(sol$u) <- ax.names colnames(sol$v) <- ax.names names(sol$d) <- ax.names rownames(sol$u) <- rownames(X) rownames(sol$v) <- colnames(X) if (rank) { CCA <- list(eig = sol$d[1:rank]^2) CCA$u <- sweep(as.matrix(sol$u[, 1:rank, drop = FALSE]), 1, 1/sqrt(rowsum), "*") CCA$v <- sweep(as.matrix(sol$v[, 1:rank, drop = FALSE]), 1, 1/sqrt(colsum), "*") CCA$u.eig <- sweep(CCA$u, 2, sol$d[1:rank], "*") CCA$v.eig <- sweep(CCA$v, 2, sol$d[1:rank], "*") CCA$wa.eig <- sweep(Xbar %*% sol$v[, 1:rank, drop = FALSE], 1, 1/sqrt(rowsum), "*") CCA$wa <- sweep(CCA$wa.eig, 2, 1/sol$d[1:rank], "*") oo <- Q$pivot if (!is.null(pCCA$rank)) oo <- oo[-(1:pCCA$rank)] - ncol(Z.r) oo <- oo[1:qrank] if (length(oo) < ncol(Y.r)) CCA$alias <- colnames(Y.r)[-oo] CCA$biplot <- cor(Y.r[, oo, drop = FALSE], sol$u[, 1:rank, drop = FALSE]) CCA$rank <- rank CCA$qrank <- qrank CCA$tot.chi <- sum(CCA$eig) CCA$QR <- Q CCA$envcentre <- attr(Y.r, "centre") CCA$Xbar <- Xbar } else { # zero rank CCA <- list(eig = 0, rank = rank, qrank = qrank, tot.chi = 0, QR = Q, Xbar = Xbar) u <- matrix(0, nrow=nrow(sol$u), ncol=0) v <- matrix(0, nrow=nrow(sol$v), ncol=0) CCA$u <- CCA$u.eig <- CCA$wa <- CCA$wa.eig <- u CCA$v <- CCA$v.eig <- v CCA$biplot <- matrix(0, 0, 0) CCA$alias <- colnames(Y.r) } Xbar <- qr.resid(Q, Xbar) if (exists("exclude.spec")) { attr(CCA$v, "na.action") <- exclude.spec attr(CCA$v.eig, "na.action") <- exclude.spec } } Q <- qr(Xbar) sol <- svd(Xbar) ax.names <- paste("CA", 1:length(sol$d), sep = "") colnames(sol$u) <- ax.names colnames(sol$v) <- ax.names names(sol$d) <- ax.names rownames(sol$u) <- rownames(X) rownames(sol$v) <- colnames(X) rank <- min(Q$rank, sum(sol$d > ZERO)) if (rank) { CA <- list(eig = sol$d[1:rank]^2) CA$u <- sweep(as.matrix(sol$u[, 1:rank, drop = FALSE]), 1, 1/sqrt(rowsum), "*") CA$v <- sweep(as.matrix(sol$v[, 1:rank, drop = FALSE]), 1, 1/sqrt(colsum), "*") CA$u.eig <- sweep(CA$u, 2, sol$d[1:rank], "*") CA$v.eig <- sweep(CA$v, 2, sol$d[1:rank], "*") CA$rank <- rank CA$tot.chi <- sum(CA$eig) CA$Xbar <- Xbar } else { # zero rank: no residual component CA <- list(eig = 0, rank = rank, tot.chi = 0, Xbar = Xbar) CA$u <- CA$u.eig <- matrix(0, nrow(sol$u), 0) CA$v <- CA$v.eig <- matrix(0, nrow(sol$v), 0) } if (exists("exclude.spec")) { attr(CA$v, "na.action") <- exclude.spec attr(CA$v.eig, "na.action") <- exclude.spec } call <- match.call() call[[1]] <- as.name("cca") ## computed pCCA$rank was needed before, but zero it here if (!is.null(pCCA) && pCCA$tot.chi == 0) pCCA$rank <- 0 sol <- list(call = call, grand.total = gran.tot, rowsum = rowsum, colsum = colsum, tot.chi = tot.chi, pCCA = pCCA, CCA = CCA, CA = CA) sol$method <- "cca" sol$inertia <- "mean squared contingency coefficient" class(sol) <- "cca" sol } vegan/R/cca.R0000644000176200001440000000006110667741210012425 0ustar liggesusers"cca" <- function (...) { UseMethod("cca") } vegan/R/cascadeKM.R0000644000176200001440000000517510677164521013532 0ustar liggesusers"cascadeKM" <- function(data, inf.gr, sup.gr, iter = 100, criterion="calinski") { ### DESCRIPTION ### This function use the 'kmeans' function of the 'stats' package to create ### a cascade of partitions from K = nb_inf_gr to K = nb_sup_gr ### INPUT ### ### data The data matrix; the objects are the rows ### nb_inf_gr Number of groups (K) for the first partition (min) ### nb_sup_gr Number of groups (K) for the last partition (max) ### iter The number of random starting configurations for each value of K ### criterion The criterion that will be used to select the best ### partition. See the 'clustIndex' function in PACKAGE = cclust ### OUTPUT ### ### The same as in the kmeans packages ### EXAMPLE ### ### result <- cascadeKM(donnee, 2, 30, iter = 50, criterion = 'calinski') ### ### data = data table ### 2 = lowest number of groups for K-means ### 30 = highest number of groups for K-means ### iter = 50: start kmeans 50 times using different random configurations ### criterion = 'calinski': the Calinski-Harabasz (1974) criterion to determine ### the best value of K for the data set. 'Best' is in the least-squares sense. ### ### Main function data <- as.matrix(data) SCE<-list() resultat<-list() index<-list() if(!is.null(nrow(data))){ partition <- matrix(NA, nrow(data), sup.gr - inf.gr + 1) }else{ partition <- matrix(NA, length(data), sup.gr - inf.gr + 1) } results <- matrix(NA, 2, sup.gr - inf.gr + 1) size <- matrix(NA, sup.gr, sup.gr - inf.gr + 1) ## Pour tous les nombres de groupes voulus h <- 1 for(ii in inf.gr:sup.gr) { ## Initialization ## set.seed(ii) ## Set.seed ˆ ŽtŽ enlevŽ car il rend instable la fonction kmeans j <- ii - inf.gr + 1 tmp <- kmeans(data, ii, iter.max = 50, nstart=iter) size[1:ii,h] <- tmp$size h <- h+1 partition[,j] <- tmp$cluster ## Compute SSE statistic results[1,j] <- sum(tmp$withinss) ## Compute stopping criterion results[2,j] <- cIndexKM(tmp,data, index = tolower(criterion)) } colnames(partition) <- paste(inf.gr:sup.gr, "groups") tmp <- rownames(data) if(is.null(tmp)){ r.name <- c(1:nrow(partition)) }else{ r.name <- tmp } rownames(partition) <- r.name colnames(results) <- paste(inf.gr:sup.gr, "groups") rownames(results)<-c("SSE", criterion) colnames(size) <- paste(inf.gr:sup.gr, "groups") rownames(size) <- paste("Group", 1:sup.gr) tout<-list(partition=partition, results=results, criterion=criterion, size=size) class(tout) <- "cascadeKM" tout } vegan/R/capscale.R0000644000176200001440000001532112074203774013461 0ustar liggesusers`capscale` <- function (formula, data, distance = "euclidean", sqrt.dist = FALSE, comm = NULL, add = FALSE, dfun = vegdist, metaMDSdist = FALSE, na.action = na.fail, subset = NULL, ...) { EPS <- sqrt(.Machine$double.eps) if (!inherits(formula, "formula")) stop("Needs a model formula") if (missing(data)) { data <- parent.frame() } else { data <- ordiGetData(match.call(), environment(formula)) } formula <- formula(terms(formula, data = data)) ## The following line was eval'ed in environment(formula), but ## that made update() fail. Rethink the line if capscale() fails ## mysteriously at this point. X <- eval(formula[[2]], envir=parent.frame(), enclos = environment(formula)) if (!inherits(X, "dist")) { comm <- X dfun <- match.fun(dfun) if (metaMDSdist) { commname <- as.character(formula[[2]]) X <- metaMDSdist(comm, distance = distance, zerodist = "ignore", commname = commname, distfun = dfun, ...) commname <- attr(X, "commname") comm <- eval.parent(parse(text=commname)) } else { X <- dfun(X, distance) } } inertia <- attr(X, "method") if (is.null(inertia)) inertia <- "unknown" inertia <- paste(toupper(substr(inertia, 1, 1)), substr(inertia, 2, 256), sep = "") inertia <- paste(inertia, "distance") if (!sqrt.dist) inertia <- paste("squared", inertia) if (add) inertia <- paste(inertia, "(euclidified)") ## evaluate formula: ordiParseFormula will return dissimilarities ## as a symmetric square matrix (except that some rows may be ## deleted due to missing values) fla <- update(formula, X ~ .) environment(fla) <- environment() d <- ordiParseFormula(fla, if(is.data.frame(data) && !is.null(comm)) cbind(data, comm) else data, envdepth = 1, na.action = na.action, subset = substitute(subset)) ## ordiParseFormula subsets rows of dissimilarities: do the same ## for columns ('comm' is handled later) if (!is.null(d$subset)) d$X <- d$X[, d$subset, drop = FALSE] ## Delete columns if rows were deleted due to missing values if (!is.null(d$na.action)) { d$X <- d$X[, -d$na.action, drop = FALSE] } X <- as.dist(d$X) k <- attr(X, "Size") - 1 if (sqrt.dist) X <- sqrt(X) if (max(X) >= 4 + .Machine$double.eps) { inertia <- paste("mean", inertia) adjust <- 1 } else { adjust <- sqrt(k) } nm <- attr(X, "Labels") ## cmdscale is only used if 'add = TRUE': it cannot properly ## handle negative eigenvalues and therefore we normally use ## wcmdscale. If we have 'add = TRUE' there will be no negative ## eigenvalues and this is not a problem. if (add) { X <- cmdscale(X, k = k, eig = TRUE, add = add) ## All eigenvalues *should* be positive, but see that they are if (getRversion() < "2.13.0") X$points <- X$points[, X$eig[-(k+1)] > 0] X$eig <- X$eig[X$eig > 0] } else X <- wcmdscale(X, eig = TRUE) if (is.null(rownames(X$points))) rownames(X$points) <- nm X$points <- adjust * X$points ## We adjust eigenvalues to variances, and simultaneously the ## possible negative axes must be adjusted similarly if (adjust == 1) { X$eig <- X$eig/k if (!is.null(X$negaxes)) X$negaxes <- X$negaxes/sqrt(k) } sol <- rda.default(X$points, d$Y, d$Z, ...) if (!is.null(sol$CCA) && sol$CCA$rank > 0) { colnames(sol$CCA$u) <- colnames(sol$CCA$biplot) <- names(sol$CCA$eig) <- colnames(sol$CCA$wa) <- colnames(sol$CCA$v) <- paste("CAP", 1:ncol(sol$CCA$u), sep = "") } if (!is.null(sol$CA) && sol$CA$rank > 0) { colnames(sol$CA$u) <- names(sol$CA$eig) <- colnames(sol$CA$v) <- paste("MDS", 1:ncol(sol$CA$u), sep = "") } ## update for negative eigenvalues poseig <- length(sol$CA$eig) if (any(X$eig < 0)) { negax <- X$eig[X$eig < 0] sol$CA$imaginary.chi <- sum(negax) sol$tot.chi <- sol$tot.chi + sol$CA$imaginary.chi sol$CA$imaginary.rank <- length(negax) sol$CA$imaginary.u.eig <- X$negaxes } if (!is.null(comm)) { comm <- scale(comm, center = TRUE, scale = FALSE) sol$colsum <- apply(comm, 2, sd) ## take a 'subset' of the community after scale() if (!is.null(d$subset)) comm <- comm[d$subset, , drop = FALSE] ## NA action after 'subset' if (!is.null(d$na.action)) comm <- comm[-d$na.action, , drop = FALSE] if (!is.null(sol$pCCA) && sol$pCCA$rank > 0) comm <- qr.resid(sol$pCCA$QR, comm) if (!is.null(sol$CCA) && sol$CCA$rank > 0) { sol$CCA$v.eig <- t(comm) %*% sol$CCA$u/sqrt(k) sol$CCA$v <- decostand(sol$CCA$v.eig, "normalize", MARGIN = 2) comm <- qr.resid(sol$CCA$QR, comm) } if (!is.null(sol$CA) && sol$CA$rank > 0) { sol$CA$v.eig <- t(comm) %*% sol$CA$u/sqrt(k) sol$CA$v <- decostand(sol$CA$v.eig, "normalize", MARGIN = 2) } } else { ## input data were dissimilarities, and no 'comm' defined: ## species scores make no sense and are made NA sol$CA$v.eig[] <- sol$CA$v[] <- NA if (!is.null(sol$CCA)) sol$CCA$v.eig[] <- sol$CCA$v[] <- NA sol$colsum <- NA } if (!is.null(sol$CCA) && sol$CCA$rank > 0) sol$CCA$centroids <- centroids.cca(sol$CCA$wa, d$modelframe) if (!is.null(sol$CCA$alias)) sol$CCA$centroids <- unique(sol$CCA$centroids) if (!is.null(sol$CCA$centroids)) { rs <- rowSums(sol$CCA$centroids^2) sol$CCA$centroids <- sol$CCA$centroids[rs > 1e-04, , drop = FALSE] if (nrow(sol$CCA$centroids) == 0) sol$CCA$centroids <- NULL } sol$call <- match.call() sol$terms <- terms(formula, "Condition", data = data) sol$terminfo <- ordiTerminfo(d, data) sol$call$formula <- formula(d$terms, width.cutoff = 500) sol$call$formula[[2]] <- formula[[2]] sol$method <- "capscale" if (add) sol$ac <- X$ac sol$adjust <- adjust sol$inertia <- inertia if (metaMDSdist) sol$metaMDSdist <- commname sol$subset <- d$subset sol$na.action <- d$na.action class(sol) <- c("capscale", class(sol)) if (!is.null(sol$na.action)) sol <- ordiNAexclude(sol, d$excluded) sol } vegan/R/calibrate.ordisurf.R0000644000176200001440000000122011255733330015455 0ustar liggesusers`calibrate.ordisurf` <- function(object, newdata, ...) { if (missing(newdata)) fit <- predict(object, type = "response", ...) else { ## Got only a vector of two coordinates if (is.vector(newdata) && length(newdata) == 2) newdata = data.frame(x1 = newdata[1], x2 = newdata[2]) ## Got a matrix or a data frme else{ if (NCOL(newdata) < 2) stop("needs a matrix or a data frame with two columns") newdata <- data.frame(x1 = newdata[,1], x2 = newdata[,2]) } fit <- predict(object, newdata = newdata, type = "response", ...) } fit } vegan/R/calibrate.cca.R0000644000176200001440000000166411611555072014363 0ustar liggesusers`calibrate.cca` <- function(object, newdata, rank = "full", ...) { if (!is.null(object$pCCA)) stop("does not work with conditioned (partial) models") if (is.null(object$CCA) || object$CCA$rank == 0) stop("needs constrained model") if (object$CCA$rank < object$CCA$qrank) stop("rank of constraints is higher than rank of dependent data") if (rank != "full") rank <- min(rank, object$CCA$rank) else rank <- object$CCA$rank if (missing(newdata)) wa <- object$CCA$wa else wa <- predict(object, type="wa", newdata=newdata) qrank <- object$CCA$qrank b <- (coef(object))[object$CCA$QR$pivot[1:qrank], , drop=FALSE] b <- solve(b) pred <- wa[ , 1:rank, drop=FALSE] %*% b[1:qrank, , drop =FALSE] envcen <- object$CCA$envcentre[object$CCA$QR$pivot] envcen <- envcen[1:object$CCA$qrank] pred <- sweep(pred, 2, envcen, "+") pred } vegan/R/calibrate.R0000644000176200001440000000011111255441072013616 0ustar liggesusers`calibrate` <- function(object, ...) { UseMethod("calibrate") } vegan/R/cIndexKM.R0000644000176200001440000000446312014462227013347 0ustar liggesusers`cIndexKM` <- function (y, x, index = "all") { kmeans_res <- y ############################################# gss <- function(x, clsize, withins) { n <- sum(clsize) k <- length(clsize) allmean <- colMeans(x) dmean <- sweep(x, 2, allmean, "-") allmeandist <- sum(dmean^2) wgss <- sum(withins) bgss <- allmeandist - wgss list(wgss = wgss, bgss = bgss) } ############################################# ### Function modified by SD and PL from the original "cIndexKM" in "cclust" ### to accommodate a single response variable as well as singleton groups ### and remove unwanted index. ### The index ################################################ calinski <- function(zgss, clsize) { n <- sum(clsize) k <- length(clsize) zgss$bgss/(k - 1)/(zgss$wgss/(n - k)) } ################################################ ssi <- function(centers, clsize) { ncl <- dim(centers)[1] nvar <- dim(centers)[2] n <- sum(clsize) cmax <- apply(centers, 2, max) cmin <- apply(centers, 2, min) cord <- apply(centers, 2, order) cmaxi <- cord[ncl, ] cmini <- cord[1, ] meanmean <- mean(centers) absmdif <- abs(apply(centers, 2, mean) - meanmean) span <- cmax - cmin csizemax <- clsize[cmaxi] csizemin <- clsize[cmini] hiest <- nvar hiestw <- hiest * max(max(csizemax), max(csizemin)) * exp(-min(absmdif)) sist <- sum(span)/hiest sistw <- (span * exp(-absmdif)) %*% sqrt(csizemax * csizemin)/hiestw list(ssi = sist, ssiw = sistw) } ################################################ zgss <- gss(x, kmeans_res$size, kmeans_res$withinss) index <- pmatch(index, c("calinski", "ssi", "all")) if (is.na(index)) stop("invalid clustering index") if (index == -1) stop("ambiguous index") vecallindex <- numeric(3) if (any(index == 1) || (index == 3)) vecallindex[1] <- calinski(zgss, kmeans_res$size) if (any(index == 2) || (index == 3)) vecallindex[2] <- ssi(kmeans_res$centers, kmeans_res$size)$ssiw names(vecallindex) <- c("calinski", "ssi") if (index < 3) vecallindex <- vecallindex[index] vecallindex } vegan/R/bstick.princomp.R0000644000176200001440000000043310761454572015016 0ustar liggesusers`bstick.princomp` <- function(n, ...) { if(!inherits(n, "princomp")) stop("'n' not of class \"princomp\"") tot.chi <- sum(n$sdev^2) n.comp <- length(n$sdev) res <- bstick.default(n.comp, tot.chi, ...) names(res) <- dimnames(n$loadings)[[2]] res } vegan/R/bstick.prcomp.R0000644000176200001440000000042510667741210014461 0ustar liggesusers`bstick.prcomp` <- function(n, ...) { if(!inherits(n, "prcomp")) stop("'n' not of class \"prcomp\"") tot.chi <- sum(n$sdev^2) n.comp <- length(n$sdev) res <- bstick.default(n.comp, tot.chi, ...) names(res) <- dimnames(n$rotation)[[2]] res } vegan/R/bstick.default.R0000644000176200001440000000023511527004531014576 0ustar liggesusers`bstick.default` <- function(n, tot.var = 1, ...) { res <- rev(cumsum(tot.var/n:1)/n) names(res) <- paste("Stick", seq(len=n), sep="") res } vegan/R/bstick.decorana.R0000644000176200001440000000012710667741210014734 0ustar liggesusers`bstick.decorana` <- function(n, ...) stop("'bstick' not available for 'decorana'") vegan/R/bstick.cca.R0000644000176200001440000000121011611330371013670 0ustar liggesusers`bstick.cca` <- function(n, ...) { if(!inherits(n, c("rda", "cca"))) stop("'n' not of class \"cca\" or \"rda\"") if(!is.null(n$CCA) && n$CCA$rank > 0) stop("'bstick' only for unconstrained models.") ## No idea how to define bstick for capscale with negative ## eigenvalues if (inherits(n, "capscale") && !is.null(n$CA$imaginary.rank)) stop("'bstick' cannot be used for 'capscale' with imaginary component") ## need to select appropriate total inertia tot.chi <- n$CA$tot.chi n.comp <- n$CA$rank res <- bstick.default(n.comp, tot.chi, ...) names(res) <- names(n$CA$eig) res } vegan/R/bstick.R0000644000176200001440000000006210667741210013157 0ustar liggesusers`bstick` <- function(n, ...) UseMethod("bstick") vegan/R/boxplot.specaccum.R0000644000176200001440000000061110667741210015331 0ustar liggesusers"boxplot.specaccum" <- function(x, add=FALSE, ...) { if (x$method != "random") stop("boxplot available only for method=\"random\"") if (!add) { plot(x$sites, x$richness, type="n", xlab="Sites", ylab="Species", ylim=c(1, max(x$richness)), ...) } tmp <- boxplot(data.frame(t(x$perm)), add=TRUE, at=x$sites, axes=FALSE, ...) invisible(tmp) } vegan/R/boxplot.betadisper.R0000644000176200001440000000022710720073116015504 0ustar liggesusers`boxplot.betadisper` <- function(x, ylab = "Distance to centroid", ...) { tmp <- boxplot(x$distances ~ x$group, ylab = ylab, ...) invisible(tmp) } vegan/R/biplot.rda.R0000644000176200001440000000364312014462227013742 0ustar liggesusers## biplot.rda ## ## draws pca biplots with species as arrows ## biplot.rda <- function(x, choices = c(1, 2), scaling = 2, display = c("sites", "species"), type, xlim, ylim, col = c(1,2), const, ...) { if(!inherits(x, "rda")) stop("'biplot.rda' is only for objects of class 'rda'") if(!is.null(x$CCA)) stop("'biplot.rda' not suitable for models with constraints") TYPES <- c("text", "points", "none") display <- match.arg(display, several.ok = TRUE) if (length(col) == 1) col <- c(col,col) g <- scores(x, choices = choices, display = display, scaling = scaling, const) if (!is.list(g)) { g <- list(default = g) names(g) <- display } if (missing(type)) { nitlimit <- 80 nit <- max(nrow(g$species), nrow(g$sites)) if (nit > nitlimit) type <- rep("points", 2) else type <- rep("text", 2) } else type <- match.arg(type, TYPES, several.ok = TRUE) if(length(type) < 2) type <- rep(type, 2) if (missing(xlim)) xlim <- range(g$species[, 1], g$sites[, 1]) if (missing(ylim)) ylim <- range(g$species[, 2], g$sites[, 2]) plot(g[[1]], xlim = xlim, ylim = ylim, type = "n", asp = 1, ...) abline(h = 0, lty = 3) abline(v = 0, lty = 3) if (!is.null(g$species)) { if (type[1] == "points") arrlen <- 1 else arrlen <- 0.85 if (type[1] != "none") arrows(0, 0, g$species[,1] * arrlen, g$species[, 2] * arrlen, col = col[2], length = 0.05) if (type[1] == "text") text(g$species, rownames(g$species), col = col[2], cex = 0.7) } if (!is.null(g$sites)) { if (type[2] == "text") text(g$sites, rownames(g$sites), cex = 0.7, col = col[1]) else if (type[2] == "points") points(g$sites, pch = 1, cex = 0.7, col = col[1]) } class(g) <- "ordiplot" invisible(g) } vegan/R/biplot.CCorA.R0000644000176200001440000001316111434716177014132 0ustar liggesusers`biplot.CCorA` <- function(x, plot.type="ov", xlabs, plot.axes = 1:2, int=0.5, col.Y="red", col.X="blue", cex=c(0.7,0.9), ...) { ## Function sets par(): reset them on.exit opar <- par(no.readonly = TRUE) on.exit(par(opar)) #### Internal function larger.frame <- function(mat, percent=0.10) # Produce an object plot 10% larger than strictly necessary { range.mat <- apply(mat,2,range) z <- apply(range.mat, 2, function(x) x[2]-x[1]) range.mat[1,] <- range.mat[1,]-z*percent range.mat[2,] <- range.mat[2,]+z*percent range.mat } #### TYPE <- c("objects","variables","ov","biplots") type <- pmatch(plot.type, TYPE) if(is.na(type)) stop("Invalid plot.type") epsilon <- sqrt(.Machine$double.eps) if(length(which(x$Eigenvalues > epsilon)) == 1) stop("Plot of axes (", paste(plot.axes, collapse=","), ") not drawn because the solution has a single dimension.") if(max(plot.axes) > length(which(x$Eigenvalues > epsilon))) stop("Plot of axes (", paste(plot.axes, collapse=","), ") not drawn because the solution has fewer dimensions.") if (missing(xlabs)) xlabs <- rownames(x$Cy) else if (!is.null(xlabs) && is.na(xlabs)) xlabs <- rep(NA, nrow(x$Cy)) else if (is.null(xlabs)) xlabs <- 1:nrow(x$Cy) # lf.Y <- larger.frame(x$Cy[,plot.axes]) lf.X <- larger.frame(x$Cx[,plot.axes]) # # Four plot types are available if(type == 1) { # Object plots # cat('plot.type = objects') par(mfrow=c(1,2), pty = "s") plot(lf.Y, asp=1, xlab=colnames(x$Cy[,plot.axes[1]]), ylab=colnames(x$Cy[,plot.axes[2]]), type="n") points(x$Cy[,plot.axes], col=col.Y) # Solid dot: pch=19 text(x$Cy[,plot.axes],labels=xlabs, pos=3, col=col.Y, cex=cex[1]) title(main = c("CCorA object plot","First data table (Y)"), line=2) # plot(lf.X, asp=1, xlab=colnames(x$Cy[,plot.axes[1]]), ylab=colnames(x$Cy[,plot.axes[2]]), type="n") points(x$Cx[,plot.axes], col=col.X) # Solid dot: pch=19 text(x$Cx[,plot.axes],labels=xlabs, pos=3, col=col.X, cex=cex[1]) title(main = c("CCorA object plot","Second data table (X)"), line=2) ### ### } else if(type == 2) { # Variable plots # cat('plot.type = variables') par(mfrow=c(1,2), pty = "s") plot(x$corr.Y.Cy[,plot.axes], asp=1, xlim=c(-1,1), ylim=c(-1,1), xlab=colnames(x$Cy[,plot.axes[1]]), ylab=colnames(x$Cy[,plot.axes[2]]), type="n") text(x$corr.Y.Cy[,plot.axes],labels=rownames(x$corr.Y.Cy), pos=3, col=col.Y, cex=cex[2]) arrows(0,0,x$corr.Y.Cy[,plot.axes[1]],x$corr.Y.Cy[,plot.axes[2]], length=0.05, col=col.Y) abline(h=0, v=0) lines(cos(seq(0, 2*pi, l=100)), sin(seq(0, 2*pi, l=100))) lines(int * cos(seq(0, 2*pi, l=100)), int * sin(seq(0, 2*pi, l=100))) title(main = c("CCorA variable plot","First data table (Y)"), line=2) # plot(x$corr.X.Cx[,plot.axes], asp=1, xlim=c(-1,1), ylim=c(-1,1), xlab=colnames(x$Cy[,plot.axes[1]]), ylab=colnames(x$Cy[,plot.axes[2]]), type="n") text(x$corr.X.Cx[,plot.axes],labels=rownames(x$corr.X.Cx), pos=3, col=col.X, cex=cex[2]) arrows(0,0,x$corr.X.Cx[,plot.axes[1]],x$corr.X.Cx[,plot.axes[2]], length=0.05, col=col.X) abline(h=0, v=0) lines(cos(seq(0, 2*pi, l=100)), sin(seq(0, 2*pi, l=100))) lines(int * cos(seq(0, 2*pi, l=100)), int * sin(seq(0, 2*pi, l=100))) title(main = c("CCorA variable plot","Second data table (X)"), line=2) ### ### } else if(type == 3) { # Object and variable plots # cat('plot.type = ov') # par(mfrow=c(2,2), mar=c(4.5,3.5,2,1)) layout(matrix(c(1,2,3,4), ncol = 2, nrow = 2, byrow = TRUE), widths = 1, heights = c(0.5,0.5)) par(pty = "s", mar = c(4.5,3.5,2,1)) # plot(lf.Y, asp=1, xlab=colnames(x$Cy[,plot.axes[1]]), ylab=colnames(x$Cy[,plot.axes[2]]), type="n") points(x$Cy[,plot.axes], col=col.Y) # Solid dot: pch=19 text(x$Cy[,plot.axes],labels=xlabs, pos=3, col=col.Y, cex=cex[1]) title(main = c("First data table (Y)"), line=1) # plot(lf.X, asp=1, xlab=colnames(x$Cy[,plot.axes[1]]), ylab=colnames(x$Cy[,plot.axes[2]]), type="n") points(x$Cx[,plot.axes], col=col.X) # Solid dot: pch=19 text(x$Cx[,plot.axes],labels=xlabs, pos=3, col=col.X, cex=cex[1]) title(main = c("Second data table (X)"), line=1) # plot(x$corr.Y.Cy[,plot.axes], asp=1, xlim=c(-1,1), ylim=c(-1,1), xlab=colnames(x$Cy[,plot.axes[1]]), ylab=colnames(x$Cy[,plot.axes[2]]), type="n") text(x$corr.Y.Cy[,plot.axes],labels=rownames(x$corr.Y.Cy), pos=3, col=col.Y, cex=cex[2]) arrows(0,0,x$corr.Y.Cy[,plot.axes[1]],x$corr.Y.Cy[,plot.axes[2]], length=0.05, col=col.Y) abline(h=0, v=0) lines(cos(seq(0, 2*pi, l=100)), sin(seq(0, 2*pi, l=100))) lines(int * cos(seq(0, 2*pi, l=100)), int * sin(seq(0, 2*pi, l=100))) # plot(x$corr.X.Cx[,plot.axes], asp=1, xlim=c(-1,1), ylim=c(-1,1), xlab=colnames(x$Cy[,plot.axes[1]]), ylab=colnames(x$Cy[,plot.axes[2]]), type="n") text(x$corr.X.Cx[,plot.axes],labels=rownames(x$corr.X.Cx), pos=3, col=col.X, cex=cex[2]) arrows(0,0,x$corr.X.Cx[,plot.axes[1]],x$corr.X.Cx[,plot.axes[2]], length=0.05, col=col.X) abline(h=0, v=0) lines(cos(seq(0, 2*pi, l=100)), sin(seq(0, 2*pi, l=100))) lines(int * cos(seq(0, 2*pi, l=100)), int * sin(seq(0, 2*pi, l=100))) ### ### } else if(type == 4) { # Biplots # cat('plot.type = biplot') par(mfrow=c(1,2), pty = "s") biplot(x$Cy[,plot.axes], x$corr.Y.Cy[,plot.axes], col=c("black",col.Y), xlim=lf.Y[,1], ylim=lf.Y[,2], xlabs = xlabs, arrow.len=0.05, cex=cex, ...) title(main = c("CCorA biplot","First data table (Y)"), line=4) # biplot(x$Cx[,plot.axes], x$corr.X.Cx[,plot.axes], col=c("black",col.X), xlim=lf.X[,1], ylim=lf.X[,2], xlabs = xlabs, arrow.len=0.05, cex=cex, ...) title(main = c("CCorA biplot","Second data table (X)"), line=4) } invisible() } vegan/R/bioenv.formula.R0000644000176200001440000000117510667741210014634 0ustar liggesusers`bioenv.formula` <- function (formula, data, ...) { if (missing(data)) data <- parent.frame() fla <- formula comm <- formula[[2]] comm <- eval(comm, data, parent.frame()) formula[[2]] <- NULL mf <- model.frame(formula, data, na.action = NULL) if (any(sapply(mf, function(x) is.factor(x) || !is.numeric(x)))) stop("bioenv applies only to numeric variables") env <- attr(mf, "terms") attr(env, "intercept") <- 0 env <- model.matrix(env, mf) out <- bioenv(comm, env, ...) out$formula <- fla out$call <- match.call() out$call[[1]] <- as.name("bioenv") out } vegan/R/bioenv.default.R0000644000176200001440000000512411756413204014610 0ustar liggesusers`bioenv.default` <- function (comm, env, method = "spearman", index = "bray", upto = ncol(env), trace = FALSE, partial = NULL, ...) { if (is.null(partial)) { corfun <- function(dx, dy, dz, method) { cor(dx, dy, method=method) } } else { corfun <- function(dx, dy, dz, method) { rxy <- cor(dx, dy, method=method) rxz <- cor(dx, dz, method=method) ryz <- cor(dy, dz, method=method) (rxy - rxz*ryz)/sqrt(1-rxz*rxz)/sqrt(1-ryz*ryz) } } if (!is.null(partial)) partpart <- deparse(substitute(partial)) else partpart <- NULL if (!is.null(partial) && !inherits(partial, "dist")) partial <- dist(partial) if (!is.null(partial) && !pmatch(method, c("pearson", "spearman"), nomatch=FALSE)) stop("method ", method, " invalid in partial bioenv") n <- ncol(env) ntake <- 2^n - 1 ndone <- 0 if (n > 8 || trace) { if (upto < n) cat("Studying", nall <- sum(choose(n, 1:upto)), "of ") cat(ntake, "possible subsets (this may take time...)\n") flush.console() } x <- scale(env) best <- list() if (inherits(comm, "dist")) { comdis <- comm index <- attr(comdis, "method") if (is.null(index)) index <- "unspecified" } else if (is.matrix(comm) && nrow(comm) == ncol(comm) && isTRUE(all.equal(comm, t(comm)))) { comdis <- as.dist(comm) index <- "supplied square matrix" } else { comdis <- vegdist(comm, method = index) } for (i in 1:upto) { if (trace) { nvar <- choose(n, i) cat("No. of variables ", i, ", No. of sets ", nvar, "...", sep = "") flush.console() } sets <- t(combn(1:n, i)) if (!is.matrix(sets)) sets <- as.matrix(t(sets)) est <- numeric(nrow(sets)) for (j in 1:nrow(sets)) est[j] <- corfun(comdis, dist(x[, sets[j, ]]), partial, method = method) best[[i]] <- list(best = sets[which.max(est), ], est = max(est)) if (trace) { ndone <- ndone + nvar cat(" done (", round(100 * ndone/ntake, 1), "%)\n", sep = "") flush.console() } } out <- list(names = colnames(env), method = method, index = index, upto = upto, models = best, partial = partpart) out$call <- match.call() out$call[[1]] <- as.name("bioenv") class(out) <- "bioenv" out } vegan/R/bioenv.R0000644000176200001440000000007210667741210013163 0ustar liggesusers"bioenv" <- function(...) { UseMethod("bioenv") } vegan/R/bgdispersal.R0000644000176200001440000000502410747432276014212 0ustar liggesusersbgdispersal <- function (mat, PAonly = FALSE, abc = FALSE) { mat <- as.matrix(mat) names <- rownames(mat) if (sum((mat - decostand(mat, "pa"))) == 0) { PAonly <- TRUE mat1 <- mat } else { mat1 <- decostand(mat, "pa") if (PAonly == FALSE) mat2 <- mat } n <- nrow(mat) p <- ncol(mat) a <- mat1 %*% t(mat1) b <- mat1 %*% (1 - t(mat1)) c <- (1 - mat1) %*% t(mat1) d <- ncol(mat1) - a - b - c DD1 <- (a * (b - c))/((a + b + c)^2) DD2 <- (2 * a * (b - c))/((2 * a + b + c) * (a + b + c)) ## McNemar <- (abs(b - c) - 1)^2/(b + c) # Old code ## diag(McNemar) <- 0 # Old code McNemar <- matrix(NA, n, n, dimnames=list(names,names)) pP.Mc <- matrix(NA, n, n, dimnames=list(names,names)) for (j in 1:(n - 1)) { for (jj in (j + 1):n) { bb = b[j, jj] cc = c[j, jj] if ((bb + cc) == 0) { McNemar[j, jj] = 0 pP.Mc[j, jj] = 1 } else { if(bb == 0) { B = 0 } else { B = bb*log(bb) } if(cc == 0) { C = 0 } else { C = cc*log(cc) } ## Williams correction q = 1 + 1/(2*(bb+cc)) ## McNemar = 2*(b*log(b) + c*log(c) - (b+c)*log((b+c)/2)) McNemar[j, jj] = 2*(B + C - (bb+cc)*log((bb+cc)/2)) / q pP.Mc[j, jj] <- pchisq(McNemar[j, jj], 1, lower.tail = FALSE) if ((b[j, jj] + c[j, jj]) == 0) pP.Mc[j, jj] <- 1 } } } if (!PAonly) { DD3 <- matrix(0, n, n, dimnames=list(names,names)) DD4 <- matrix(0, n, n, dimnames=list(names,names)) row.sum <- apply(mat2, 1, sum) for (j in 1:(n - 1)) { for (jj in (j + 1):n) { W <- sum(apply(mat2[c(j, jj), ], 2, min)) A <- row.sum[j] B <- row.sum[jj] temp3 <- W * (A - B)/((A + B - W)^2) temp4 <- 2 * W * (A - B)/((A + B) * (A + B - W)) DD3[j, jj] <- temp3 DD3[jj, j] <- -temp3 DD4[j, jj] <- temp4 DD4[jj, j] <- -temp4 } } out <- list(DD1 = DD1, DD2 = DD2, DD3 = DD3, DD4 = DD4, McNemar = McNemar, prob.McNemar = pP.Mc) } else { out <- list(DD1 = DD1, DD2 = DD2, McNemar = McNemar, prob.McNemar = pP.Mc) } if (abc) { out$a <- a out$b <- b out$c <- c } out } vegan/R/betadiver.R0000644000176200001440000000436311604572527013662 0ustar liggesusers`betadiver` <- function(x, method = NA, order = FALSE, help = FALSE, ...) { ## 'index' was renamed to 'method' in vegan 1.90-1 for dist() ## compatibility. Below we implement backward compatibility (with ## warning) for 'index'. dots <- match.call(expand.dots = FALSE)$... if (any(k <- pmatch(names(dots), "index", nomatch = FALSE))) { warning("argument 'index' deprecated: use 'method'") method <- dots[[which(k==1)]] } beta <- list("w"="(b+c)/(2*a+b+c)", "-1"="(b+c)/(2*a+b+c)", "c"="(b+c)/2", "wb"="b+c", "r"="2*b*c/((a+b+c)^2-2*b*c)", "I"="log(2*a+b+c)-2*a*log(2)/(2*a+b+c)-((a+b)*log(a+b)+(a+c)*log(a+c))/(2*a+b+c)", "e"="exp(log(2*a+b+c)-2*a*log(2)/(2*a+b+c)-((a+b)*log(a+b)+(a+c)*log(a+c))/(2*a+b+c))-1", "t"="(b+c)/(2*a+b+c)", "me"="(b+c)/(2*a+b+c)", "j"="a/(a+b+c)", "sor"="2*a/(2*a+b+c)", "m"="(2*a+b+c)*(b+c)/(a+b+c)", "-2"="pmin(b,c)/(pmax(b,c)+a)", "co"="(a*c+a*b+2*b*c)/(2*(a+b)*(a+c))", "cc"="(b+c)/(a+b+c)", "g"="(b+c)/(a+b+c)", "-3"="pmin(b,c)/(a+b+c)", "l"="(b+c)/2", "19"="2*(b*c+1)/((a+b+c)^2+(a+b+c))", "hk"="(b+c)/(2*a+b+c)", "rlb"="a/(a+c)", "sim"="pmin(b,c)/(pmin(b,c)+a)", "gl"="2*abs(b-c)/(2*a+b+c)", "z"="(log(2)-log(2*a+b+c)+log(a+b+c))/log(2)" ) if (help) { for (i in 1:length(beta)) cat(i, " \"", names(beta[i]),"\" = ", beta[[i]], "\n", sep="") return(invisible(NULL)) } x <- ifelse(x > 0, 1, 0) if (order) { x <- x[order(rowSums(x)),] } d <- tcrossprod(x) a <- as.dist(d) S <- diag(d) N <- length(S) b <- as.dist(matrix(rep(S, N), nrow=N)) - a c <- as.dist(matrix(rep(S, each=N), nrow=N)) - a if (is.na(method) || is.null(method) || is.logical(method) && !method) { out <- list(a = a, b = b, c = c) class(out) <- "betadiver" return(out) } out <- eval(parse(text=beta[[method]])) out <- as.dist(out) attr(out, "method") <- paste("beta", names(beta[method]), sep=".") attr(out, "call") <- match.call() out } vegan/R/betadisper.R0000644000176200001440000001071512023307643014024 0ustar liggesusers`betadisper` <- function(d, group, type = c("median","centroid"), bias.adjust=FALSE) { ## inline function for double centring. We used .C("dblcen", ..., ## PACKAGE = "stats") which does not dublicate its argument, but ## it was removed from R in r60360 | ripley | 2012-08-22 07:59:00 ## UTC (Wed, 22 Aug 2012) "more conversion to .Call, clean up". dblcen <- function(x, na.rm = TRUE) { cnt <- colMeans(x, na.rm = na.rm) x <- sweep(x, 2L, cnt, check.margin = FALSE) cnt <- rowMeans(x, na.rm = na.rm) sweep(x, 1L, cnt, check.margin = FALSE) } ## inline function for spatial medians spatialMed <- function(vectors, group, pos) { axes <- seq_len(NCOL(vectors)) spMedPos <- ordimedian(vectors, group, choices = axes[pos]) spMedNeg <- ordimedian(vectors, group, choices = axes[!pos]) cbind(spMedPos, spMedNeg) } ## inline function for distance computation Resids <- function(x, c) { if(is.matrix(c)) d <- x - c else d <- sweep(x, 2, c) rowSums(d^2) } ## Tolerance for zero Eigenvalues TOL <- 1e-7 ## uses code from stats:::cmdscale by R Core Development Team if(!inherits(d, "dist")) stop("distances 'd' must be a 'dist' object") ## Someone really tried to analyse correlation like object in range -1..+1 if (any(d < -TOL, na.rm = TRUE)) stop("dissimilarities 'd' must be non-negative") if(missing(type)) type <- "median" type <- match.arg(type) ## checks for groups - need to be a factor for later if(!is.factor(group)) { group <- as.factor(group) } else { ## if already a factor, drop empty levels group <- droplevels(group) } n <- attr(d, "Size") x <- matrix(0, ncol = n, nrow = n) x[row(x) > col(x)] <- d^2 ## site labels labs <- attr(d, "Labels") ## remove NAs in group if(any(gr.na <- is.na(group))) { group <- group[!gr.na] x <- x[!gr.na, !gr.na] ## update n otherwise C call crashes n <- n - sum(gr.na) ## update labels labs <- labs[!gr.na] warning("Missing observations due to 'group' removed.") } ## remove NA's in d if(any(x.na <- apply(x, 1, function(x) any(is.na(x))))) { x <- x[!x.na, !x.na] group <- group[!x.na] ## update n otherwise C call crashes n <- n - sum(x.na) ## update labels labs <- labs[!x.na] warning("Missing observations due to 'd' removed.") } x <- x + t(x) storage.mode(x) <- "double" x <- dblcen(x) e <- eigen(-x/2, symmetric = TRUE) vectors <- e$vectors eig <- e$values ## Remove zero eigenvalues eig <- eig[(want <- abs(eig/eig[1]) > TOL)] ## scale Eigenvectors vectors <- vectors[, want, drop = FALSE] %*% diag(sqrt(abs(eig)), nrow = length(eig)) ## store which are the positive eigenvalues pos <- eig > 0 ## group centroids in PCoA space centroids <- switch(type, centroid = apply(vectors, 2, function(x) tapply(x, group, mean)), median = spatialMed(vectors, group, pos) ) ## for each of the groups, calculate distance to centroid for ## observation in the group ## Uses in-line Resids function as we want LAD residuals for ## median method, and LSQ residuals for centroid method dist.pos <- Resids(vectors[, pos, drop=FALSE], centroids[group, pos, drop=FALSE]) dist.neg <- 0 if(any(!pos)) dist.neg <- Resids(vectors[, !pos, drop=FALSE], centroids[group, !pos, drop=FALSE]) ## zij are the distances of each point to its group centroid zij <- sqrt(abs(dist.pos - dist.neg)) if (bias.adjust) { n.group <- table(group) zij <- zij*sqrt(n.group[group]/(n.group[group]-1)) } ## add in correct labels colnames(vectors) <- names(eig) <- paste("PCoA", seq_along(eig), sep = "") if(is.matrix(centroids)) colnames(centroids) <- names(eig) else names(centroids) <- names(eig) rownames(vectors) <- names(zij) <- labs retval <- list(eig = eig, vectors = vectors, distances = zij, group = group, centroids = centroids, call = match.call()) class(retval) <- "betadisper" attr(retval, "method") <- attr(d, "method") attr(retval, "type") <- type attr(retval, "bias.adjust") <- bias.adjust retval } vegan/R/beals.R0000644000176200001440000000467411527004531012775 0ustar liggesusers############################################################## ## COMPUTES BEALS SMOOTHING FOR ALL SPECIES IN TABLE # ## This is a more complete function than the previous one # ## in the vegan package. The parameter values that give the # ## equivalence are 'beals(x, NA, x, 0, include=TRUE)' # ## # ## 'x' matrix to be replaced by beals values # ## 'reference' matrix to be used as source for joint occurrences# ## 'type' sets the way to use abundance values # ## 0 - presence/absence # ## 1 - abundances for conditioned probabilities # ## 2 - abundances for weighted average # ## 3 - abundances for both # ## 'species' a column index used to compute Beals function # ## for a single species. The default (NA) indicates # ## all species. # ## 'include' flag to include target species in the computation# ############################################################## `beals` <- function(x, species=NA, reference=x, type=0, include=TRUE) { refX <- reference ## this checks whether it was chosen from available options mode <- as.numeric(match.arg(as.character(type), c("0","1","2","3"))) spIndex <- species incSp <- include refX <- as.matrix(refX) x <- as.matrix(x) if(mode==0 || mode ==2) refX <- ifelse(refX > 0, 1, 0) if(mode==0 || mode ==1) x <- ifelse(x > 0, 1, 0) ##Computes conditioned probabilities if(is.na(spIndex)){ M <- crossprod(ifelse(refX > 0, 1, 0),refX) C <-diag(M) M <- sweep(M, 2, replace(C,C==0,1), "/") if(!incSp) for (i in 1:ncol(refX)) M[i,i] <- 0 } else { C <- colSums(refX) M <- crossprod(refX,ifelse(refX > 0, 1, 0)[,spIndex]) M <- M/replace(C,C==0,1) if(!incSp) M[spIndex] <- 0 } ##Average of conditioned probabilities S <- rowSums(x) if(is.na(spIndex)) { b <-x for (i in 1:nrow(x)) { b[i, ] <- rowSums(sweep(M, 2, x[i, ], "*")) } SM <- rep(S,ncol(x)) if(!incSp) SM <- SM-x b <- b/replace(SM,SM==0,1) } else { b <-rowSums(sweep(x,2,M,"*")) if(!incSp) S <- S-x[,spIndex] b <- b/replace(S,S==0,1) } b } vegan/R/as.ts.permat.R0000644000176200001440000000051511527004531014214 0ustar liggesusers`as.ts.permat` <- function(x, type = "bray", ...) { type <- match.arg(type, c("bray", "chisq")) out <- summary(x)[[type]] if (!is.ts(out)) { seqmethods <- c("swap", "tswap", "abuswap") stop("as.ts available only for sequential methods ", paste(seqmethods, collapse=", ")) } out } vegan/R/as.ts.oecosimu.R0000644000176200001440000000104711154051125014545 0ustar liggesusers`as.ts.oecosimu` <- function(x, ...) { seqmethods <- c("swap", "tswap", "permat.swap", "permat.abuswap") if (!(x$oecosimu$method %in% seqmethods)) stop("as.ts available only for sequential methods ", paste(seqmethods, collapse=", ")) startval <- attr(x$oecosimu$simulated, "burnin") + 1 thin <- attr(x$oecosimu$simulated, "thin") out <- ts(t(x$oecosimu$simulated), start = startval, deltat=thin, names = names(x$oecosimu$z)) attr(out, "burnin") <- NULL attr(out, "thin") <- NULL out } vegan/R/as.rad.R0000644000176200001440000000034110667741210013050 0ustar liggesusers"as.rad" <- function(x) { if (inherits(x, "rad")) return(x) take <- x > 0 nm <- names(x) comm <- x[take] names(comm) <- nm[take] comm <- rev(sort(comm)) class(comm) <- "rad" comm } vegan/R/as.preston.R0000644000176200001440000000212111530247640013770 0ustar liggesusers`as.preston` <- function (x, tiesplit = TRUE, ...) { if (inherits(x, "preston")) return(x) if (!identical(all.equal(x, round(x)), TRUE)) stop("function accepts only integers (counts)") x <- x[x > 0] if (tiesplit) { ## Assume log2(2^k) == k exactly for integer k xlog2 <- log2(x) ties <- xlog2 == ceiling(xlog2) tiefreq <- table(xlog2[ties]) notiefreq <- table(ceiling(xlog2[!ties])) itie <- as.numeric(names(tiefreq)) + 1 nitie <- as.numeric(names(notiefreq)) + 1 freq <- numeric(max(itie+1, nitie)) ## split tied values between two adjacent octaves freq[itie] <- tiefreq/2 freq[itie+1] <- freq[itie+1] + tiefreq/2 freq[nitie] <- freq[nitie] + notiefreq } else { xlog2 <- ceiling(log2(x)) tmp <- table(xlog2) indx <- as.numeric(names(tmp)) + 1 freq <- numeric(max(indx)) freq[indx] <- tmp } names(freq) <- seq_along(freq) - 1 ## remove empty octaves freq <- freq[freq>0] class(freq) <- "preston" freq } vegan/R/as.mlm.rda.R0000644000176200001440000000044011472255314013634 0ustar liggesusers`as.mlm.rda` <- function (x) { X <- qr.X(x$CCA$QR) ## We hope that column names will be fixed in R 2.12.1 (but ## perhaps in vain). if (getRversion() <= "2.12.0") colnames(X)[x$CCA$QR$pivot] <- colnames(X) lm(x$CCA$wa ~ . - 1, data = as.data.frame(X)) } vegan/R/as.mlm.cca.R0000644000176200001440000000061111472255314013614 0ustar liggesusers`as.mlm.cca` <- function (x) { w <- x$rowsum wa <- x$CCA$wa wa <- sweep(wa, 1, sqrt(w), "*") X <- qr.X(x$CCA$QR) ## qr.X gives wrong column names now, and they are fixed here ## (hopefully fixed in 2.12.1, but that's only a wish). if (getRversion() <= "2.12.0") colnames(X)[x$CCA$QR$pivot] <- colnames(X) lm(wa ~ . - 1, data = as.data.frame(X)) } vegan/R/as.mlm.R0000644000176200001440000000005510667741210013071 0ustar liggesusers`as.mlm` <- function(x) UseMethod("as.mlm") vegan/R/as.mcmc.permat.R0000644000176200001440000000004511157226622014511 0ustar liggesusers`as.mcmc.permat` <- as.mcmc.oecosimu vegan/R/as.mcmc.oecosimu.R0000644000176200001440000000030311155210402015024 0ustar liggesusers`as.mcmc.oecosimu` <- function(x) { x <- as.ts(x) mcpar <- attr(x, "tsp") mcpar[3] <- round(1/mcpar[3]) attr(x, "mcpar") <- mcpar class(x) <- c("mcmc", class(x)) x } vegan/R/as.fisher.R0000644000176200001440000000056310667741210013570 0ustar liggesusers"as.fisher" <- function (x, ...) { if (inherits(x, "fisher")) return(x) if (!identical(all.equal(x, round(x)), TRUE)) stop("function accepts only integers (counts)") freq <- x[x > 0] freq <- table(freq, deparse.level = 0) nm <- names(freq) freq <- as.vector(freq) names(freq) <- nm class(freq) <- "fisher" freq } vegan/R/anova.prc.R0000644000176200001440000000146211742521643013575 0ustar liggesusers`anova.prc` <- function(object, ...) { ## if user specified 'by', cast prc() to an rda() and call anova ## on its result extras <- match.call(expand.dots = FALSE) if ("by" %in% names(extras$...)) { Y <- as.character(object$call$response) X <- as.character(object$call$treatment) Z <- as.character(object$call$time) fla <- paste(Y, "~", X, "*", Z, "+ Condition(", Z, ")") fla <- as.formula(fla) ## get extras m <- match(c("data", "scale", "subset", "na.action"), names(object$call), 0) call <- object$call[c(1,m)] call$formula <- fla call[[1]] <- as.name("rda") object <- eval(call, parent.frame()) anova(object, ...) } else { NextMethod("anova", object, ...) } } vegan/R/anova.ccanull.R0000644000176200001440000000247511611555072014435 0ustar liggesusers### anova.cca cannot be performed if residuals or constraints are ### NULL, and this function handles these cases (but it doesn't test ### that these are the cases). `anova.ccanull` <- function(object, ...) { table <- matrix(0, nrow = 2, ncol = 5) if (object$CA$rank == 0) { table[1,] <- c(object$CCA$qrank, object$CCA$tot.chi, NA, 0, NA) table[2,] <- c(0,0,NA,NA,NA) } else { table[1,] <- c(0,0,0,0,NA) table[2,] <- c(nrow(object$CA$u) - 1, object$CA$tot.chi, NA, NA, NA) } rownames(table) <- c("Model", "Residual") colnames(table) <- c("Df", if (inherits(object, "rda")) "Var" else "Chisq", "F", "N.Perm", "Pr(>F)") table <- as.data.frame(table) if (object$CA$rank == 0) head <- "No residual component\n" else if (is.null(object$CCA) || object$CCA$rank == 0) head <- "No constrained component\n" else head <- c("!!!!! ERROR !!!!!\n") head <- c(head, paste("Model:", c(object$call))) if (exists(".Random.seed", envir = .GlobalEnv, inherits = FALSE)) seed <- get(".Random.seed", envir = .GlobalEnv, inherits = FALSE) else seed <- NULL structure(table, heading = head, Random.seed = seed, class = c("anova.cca", "anova", "data.frame")) } vegan/R/anova.ccabyterm.R0000644000176200001440000000644112026127403014754 0ustar liggesusers`anova.ccabyterm` <- function (object, step = 100, ...) { ## Data set size may change during iteration if there are missing ## values: use length(object$residual) to check this like step, ## drop1.default, add1.default do. n0 <- length(object$residuals) trm <- terms(object) call <- paste("Model:", c(object$call)) trmlab <- attr(trm, "term.labels") trmlab <- trmlab[trmlab %in% attr(terms(object$terminfo), "term.labels")] ntrm <- length(trmlab) ## 'adj' puts the result together with the permutations and reduces ## number of simulations by one so that P = (hits+1)/(permutations+1). ## The first step is reduced by adj. adj <- (step %% 10) == 0 step <- step - adj pchi <- matrix(0, nrow = ntrm + 1, ncol = step) chi <- numeric(ntrm + 1) df <- numeric(ntrm + 1) names(df) <- c(trmlab, "Residual") sim <- permutest.cca(object, permutations = step, ...) pchi[ntrm + 1, ] <- sim$den pchi[ntrm, ] <- sim$num df[ntrm:(ntrm + 1)] <- sim$df chi[ntrm:(ntrm + 1)] <- sim$chi if (!is.null(object$call$data)) modelframe <- ordiGetData(object$call, globalenv()) else modelframe <- model.frame(object) for (.ITRM in ntrm:2) { if (ntrm < 2) break assign(".Random.seed", sim$Random.seed, envir = .GlobalEnv) fla <- as.formula(paste(" . ~ . -", trmlab[.ITRM])) object <- update(object, fla, if (!is.null(modelframe)) data = modelframe) ## Change in data set due to missing values? if (length(object$residuals) != n0) stop("number of rows has changed: remove missing values?") if (is.null(object$CCA)) break sim <- permutest.cca(object, permutations = step, ...) pchi[.ITRM, ] <- pchi[.ITRM, ] - sim$num chi[.ITRM] <- chi[.ITRM] - sim$chi[1] df[.ITRM] <- df[.ITRM] - sim$df[1] pchi[.ITRM - 1, ] <- sim$num chi[.ITRM - 1] <- sim$chi[1] df[.ITRM - 1] <- sim$df[1] } Fval <- chi/df/(chi[ntrm + 1]/df[ntrm + 1]) Fval[ntrm + 1] <- NA pchi <- sweep(pchi, 1, df, "/") pchi[-(ntrm + 1), ] <- sweep(pchi[-(ntrm + 1), , drop = FALSE], 2, pchi[ntrm + 1, , drop = FALSE], "/") ## Round to avoid arbitrary P values due to numerical precision pchi <- round(pchi, 12) Fval <- round(Fval, 12) P <- rowSums(sweep(pchi[-(ntrm + 1), , drop = FALSE], 1, Fval[-(ntrm + 1)], ">=")) P <- c((P + adj)/(step + adj), NA) out <- data.frame(df, chi, Fval, c(rep(step, ntrm), NA), P) inertname <- if (sim$method == "cca") "Chisq" else "Var" colnames(out) <- c("Df", inertname, "F", "N.Perm", "Pr(>F)") out <- out[out[, 1] > 0 | out[, 2] > sqrt(.Machine$double.eps), ] head <- paste("Permutation test for", sim$method, "under", sim$model, "model\nTerms added sequentially (first to last)\n") if (!is.null(sim$strata)) head <- paste(head, "Permutations stratified within '", sim$strata, "'\n", sep = "") structure(out, heading = c(head, call), Random.seed = sim$Random.seed, class = c("anova.cca", "anova", "data.frame")) } vegan/R/anova.ccabymargin.R0000644000176200001440000000356011706256637015301 0ustar liggesusers`anova.ccabymargin` <- function(object, step=100, scope, ...) { if(inherits(object, "prc")) stop("anova(..., by = 'margin') cannot be used for 'prc' results") if (!missing(scope) && is.character(scope)) trms <- scope else trms <- drop.scope(object, scope) alltrms <- labels(terms(object$terminfo)) keep <- trms %in% alltrms trms <- trms[keep] ntrms <- length(trms) bigperm <- 0 for (.ITRM in 1:ntrms) { fla <- formula(object) ## Put all trms except current into Condition() and update ## formula if (length(alltrms) > 1) { keeptrms <- alltrms[!(alltrms==trms[.ITRM])] updfla <- paste("Condition(",paste(keeptrms, collapse="+"), ")") fla <- update(fla, paste(". ~ . + ", updfla)) } tmp <- update(object, fla) tmp <- anova(tmp, step=step, ...) ## Start every permutation from the same seed, but get the ## seed of the longest simulation and reset the RNG to that ## state when exiting the function if (tmp[1,"N.Perm"] > bigperm) { bigperm <- tmp[1, "N.Perm"] bigseed <- get(".Random.seed", envir = .GlobalEnv, inherits = FALSE) } if (.ITRM == 1) { seed <- attr(tmp, "Random.seed") sol <- tmp } else { sol <- rbind(sol[1:(.ITRM-1),], as.matrix(tmp[1,]), sol[.ITRM,]) } assign(".Random.seed", seed, envir = .GlobalEnv) } ## Put RNG at the end of the longest simulation if (bigperm > 0) assign(".Random.seed", bigseed, envir = .GlobalEnv) rownames(sol)[1:ntrms] <- trms head <- attr(sol, "heading") head[1] <- paste(head[1], "Marginal effects of terms\n", sep="") head[2] <- paste("Model:", c(object$call)) attr(sol, "heading") <- head sol } vegan/R/anova.ccabyaxis.R0000644000176200001440000000632112026127403014746 0ustar liggesusers`anova.ccabyaxis` <- function (object, cutoff = 1, ...) { cutoff <- cutoff + sqrt(.Machine$double.eps) rnk <- object$CCA$rank if (!max(rnk, 0)) stop("Needs a constrained ordination") if (is.null(object$terms)) stop("Analysis is only possible for models fitted using formula") ## Handle missing values in scores, both "omit" and "exclude" to ## match dims with data. if (!is.null(object$na.action)) { u <- stats:::napredict.exclude(object$na.action, object$CCA$u) } else { u <- object$CCA$u } ## Get conditions if (!is.null(object$pCCA)) { CondMat <- qr.X(object$pCCA$QR) ## deweight if CCA if (!inherits(object, "rda")) CondMat <- sweep(CondMat, 1, sqrt(object$rowsum), "/") } else CondMat <- NULL ## pad with NA rows if there is a subset if (!is.null(object$subset)) { lc <- matrix(NA, nrow=length(object$subset), ncol = NCOL(u)) lc[object$subset,] <- u if (!is.null(CondMat)) { tmp <- matrix(NA, nrow=length(object$subset), ncol = NCOL(CondMat)) tmp[object$subset,] <- CondMat CondMat <- tmp } object$call$subset <- object$subset } else { lc <- u } lc <- as.data.frame(lc) axnam <- colnames(lc) df <- c(rep(1, rnk), object$CA$rank) chi <- c(object$CCA$eig, Residual = object$CA$tot.chi) Fval <- c(chi[1:rnk]/df[1:rnk]/chi[rnk+1]*df[rnk+1], NA) nperm <- c(numeric(rnk), NA) Pval <- rep(NA, rnk+1) out <- data.frame(df, chi, Fval, nperm, Pval) environment(object$terms) <- environment() fla <- paste(". ~ ", axnam[1], "+ Condition(", paste(axnam[-1], collapse="+"),")") if (!is.null(CondMat)) { fla <- paste(fla, " + Condition(CondMat)") lc$CondMat <- CondMat } fla <- update(formula(object), fla) sol <- anova(update(object, fla, data=lc), ...) out[c(1, rnk + 1), ] <- sol seed <- attr(sol, "Random.seed") attr(out, "names") <- attr(sol, "names") .call <- pasteCall(object$call, "Model:") attr(out, "heading") <- sub(" \n","", .call) attr(out, "Random.seed") <- seed bigseed <- get(".Random.seed", envir = .GlobalEnv, inherits = FALSE) bigperm <- out$N.Perm[1] if (rnk > 1) { for (.ITRM in 2:rnk) { fla <- paste(".~", axnam[.ITRM], "+Condition(", paste(axnam[-(.ITRM)], collapse="+"),")") if (!is.null(CondMat)) fla <- paste(fla, "+ Condition(CondMat)") fla <- update(formula(object), fla) sol <- update(object, fla, data = lc) assign(".Random.seed", seed, envir = .GlobalEnv) out[.ITRM, ] <- as.matrix(anova(sol, ...))[1,] if (out[.ITRM, "N.Perm"] > bigperm) { bigperm <- out[.ITRM, "N.Perm"] bigseed <- get(".Random.seed", envir = .GlobalEnv, inherits = FALSE) } if (out[.ITRM, "Pr(>F)"] > cutoff) break } } assign(".Random.seed", bigseed, envir = .GlobalEnv) class(out) <- c("anova.cca", "anova", "data.frame") out } vegan/R/anova.cca.R0000644000176200001440000000473011611273127013534 0ustar liggesusers`anova.cca` <- function (object, alpha = 0.05, beta = 0.01, step = 100, perm.max = 9999, by = NULL, ...) { if (is.null(object$CA) || is.null(object$CCA) || object$CCA$rank == 0 || object$CA$rank == 0) return(anova.ccanull(object)) perm.max <- max(step-1, perm.max) if (perm.max %% step == 0) perm.max <- perm.max - 1 if (!is.null(by)) { by <- match.arg(by, c("axis", "terms", "margin")) if (by == "axis") sol <- anova.ccabyaxis(object, alpha = alpha, beta = beta, step = step, perm.max = perm.max, by = NULL, ...) else if (by == "margin") { sol <- anova.ccabymargin(object, alpha = alpha, beta = beta, step = step, perm.max = perm.max, by = NULL, ...) } else { mf <- match.call(expand.dots = FALSE) if (!is.null(mf$...) && any(k <- pmatch(names(mf$...), "permutations", nomatch = FALSE))) step <- unlist(mf$...[k == 1]) sol <- anova.ccabyterm(object, step = step, ...) } return(sol) } seed <- NULL betaq <- c(beta/2, 1 - beta/2) nperm <- 0 unsure <- TRUE hits <- 0 while (unsure && nperm < perm.max) { adj <- as.numeric(nperm == 0) tst <- permutest.cca(object, step - adj, ...) if (is.null(seed)) seed <- tst$Random.seed nperm <- nperm + step - adj hits <- hits + sum(tst$F.perm >= tst$F.0) fork <- qbinom(betaq, nperm, alpha) if (hits < fork[1] || hits > fork[2]) unsure <- FALSE } Fval <- c(tst$F.0, NA) Pval <- c((hits+1)/(nperm+1), NA) nperm <- c(nperm, NA) table <- data.frame(tst$df, tst$chi, Fval, nperm, Pval) is.rda <- inherits(object, "rda") colnames(table) <- c("Df", ifelse(is.rda, "Var", "Chisq"), "F", "N.Perm", "Pr(>F)") head <- paste("Permutation test for", tst$method, "under", tst$model, "model\n") if (!is.null(tst$strata)) head <- paste(head, "Permutations stratified within '", tst$strata, "'\n", sep = "") mod <- paste("Model:", c(object$call)) structure(table, heading = c(head, mod), Random.seed = seed, class = c("anova.cca", "anova", "data.frame")) } vegan/R/anova.betadisper.R0000644000176200001440000000055711112271204015121 0ustar liggesusers`anova.betadisper` <- function(object, ...) { model.dat <- with(object, data.frame(Distances = distances, Groups = group)) n.grps <- with(model.dat, length(unique(as.numeric(Groups)))) if(n.grps < 2) stop("anova() only applicable to 2 or more groups") anova(lm(Distances ~ Groups, data = model.dat)) } vegan/R/anosim.R0000644000176200001440000000373411631220326013167 0ustar liggesusers`anosim` <- function (dat, grouping, permutations = 999, distance = "bray", strata) { if (inherits(dat, "dist")) x <- dat else if (is.matrix(dat) && nrow(dat) == ncol(dat) && all(dat[lower.tri(dat)] == t(dat)[lower.tri(dat)])) { x <- dat attr(x, "method") <- "user supplied square matrix" } else x <- vegdist(dat, method = distance) if (any(x < -sqrt(.Machine$double.eps))) warning("some dissimilarities are negative -- is this intentional?") sol <- c(call = match.call()) grouping <- as.factor(grouping) matched <- function(irow, icol, grouping) { grouping[irow] == grouping[icol] } x.rank <- rank(x) N <- attr(x, "Size") div <- length(x)/2 irow <- as.vector(as.dist(row(matrix(nrow = N, ncol = N)))) icol <- as.vector(as.dist(col(matrix(nrow = N, ncol = N)))) within <- matched(irow, icol, grouping) aver <- tapply(x.rank, within, mean) statistic <- -diff(aver)/div cl.vec <- rep("Between", length(x)) take <- as.numeric(irow[within]) cl.vec[within] <- levels(grouping)[grouping[take]] cl.vec <- factor(cl.vec, levels = c("Between", levels(grouping))) if (permutations) { perm <- rep(0, permutations) for (i in 1:permutations) { take <- permuted.index(N, strata) cl.perm <- grouping[take] tmp.within <- matched(irow, icol, cl.perm) tmp.ave <- tapply(x.rank, tmp.within, mean) perm[i] <- -diff(tmp.ave)/div } p.val <- (1 + sum(perm >= statistic))/(1 + permutations) sol$signif <- p.val sol$perm <- perm } sol$permutations <- permutations sol$statistic <- as.numeric(statistic) sol$class.vec <- cl.vec sol$dis.rank <- x.rank sol$dissimilarity <- attr(x, "method") if (!missing(strata)) { sol$strata <- deparse(substitute(strata)) sol$stratum.values <- strata } class(sol) <- "anosim" sol } vegan/R/alias.cca.R0000644000176200001440000000142111274337021013512 0ustar liggesusers`alias.cca` <- function (object, names.only = FALSE, ...) { if (names.only) return(object$CCA$alias) CompPatt <- function(x, ...) { x[abs(x) < 1e-06] <- 0 class(x) <- "mtable" x[abs(x) < 1e-06] <- NA x } Model <- object$terms attributes(Model) <- NULL value <- list(Model = Model) R <- object$CCA$QR$qr R <- R[1:min(dim(R)), , drop = FALSE] R[lower.tri(R)] <- 0 d <- dim(R) rank <- object$CCA$QR$rank p <- d[2] value$Complete <- if (is.null(p) || rank == p) NULL else { p1 <- 1:rank X <- R[p1, p1] Y <- R[p1, -p1, drop = FALSE] beta12 <- as.matrix(qr.coef(qr(X), Y)) CompPatt(t(beta12)) } class(value) <- "listof" value } vegan/R/adonis.R0000644000176200001440000001214612023310177013153 0ustar liggesusers`adonis` <- function(formula, data=NULL, permutations=999, method="bray", strata=NULL, contr.unordered="contr.sum", contr.ordered="contr.poly", ...) { ## formula is model formula such as Y ~ A + B*C where Y is a data ## frame or a matrix, and A, B, and C may be factors or continuous ## variables. data is the data frame from which A, B, and C would ## be drawn. TOL <- 1e-7 Terms <- terms(formula, data = data) lhs <- formula[[2]] lhs <- eval(lhs, data, parent.frame()) # to force evaluation formula[[2]] <- NULL # to remove the lhs rhs.frame <- model.frame(formula, data, drop.unused.levels = TRUE) # to get the data frame of rhs op.c <- options()$contrasts options( contrasts=c(contr.unordered, contr.ordered) ) rhs <- model.matrix(formula, rhs.frame) # and finally the model.matrix options(contrasts=op.c) grps <- attr(rhs, "assign") qrhs <- qr(rhs) ## Take care of aliased variables and pivoting in rhs rhs <- rhs[, qrhs$pivot, drop=FALSE] rhs <- rhs[, 1:qrhs$rank, drop=FALSE] grps <- grps[qrhs$pivot][1:qrhs$rank] u.grps <- unique(grps) nterms <- length(u.grps) - 1 H.s <- lapply(2:length(u.grps), function(j) {Xj <- rhs[, grps %in% u.grps[1:j] ] qrX <- qr(Xj, tol=TOL) Q <- qr.Q(qrX) tcrossprod(Q[,1:qrX$rank]) }) if (inherits(lhs, "dist")) { if (any(lhs < -TOL)) stop("dissimilarities must be non-negative") dmat <- as.matrix(lhs^2) } else { dist.lhs <- as.matrix(vegdist(lhs, method=method, ...)) dmat <- dist.lhs^2 } n <- nrow(dmat) ## G is -dmat/2 centred by rows G <- -sweep(dmat, 1, rowMeans(dmat))/2 SS.Exp.comb <- sapply(H.s, function(hat) sum( G * t(hat)) ) SS.Exp.each <- c(SS.Exp.comb - c(0,SS.Exp.comb[-nterms]) ) H.snterm <- H.s[[nterms]] ## t(I - H.snterm) is needed several times and we calculate it ## here tIH.snterm <- t(diag(n)-H.snterm) if (length(H.s) > 1) for (i in length(H.s):2) H.s[[i]] <- H.s[[i]] - H.s[[i-1]] SS.Res <- sum( G * tIH.snterm) df.Exp <- sapply(u.grps[-1], function(i) sum(grps==i) ) df.Res <- n - qrhs$rank ## Get coefficients both for the species (if possible) and sites if (inherits(lhs, "dist")) { beta.sites <- qr.coef(qrhs, as.matrix(lhs)) beta.spp <- NULL } else { beta.sites <- qr.coef(qrhs, dist.lhs) beta.spp <- qr.coef(qrhs, as.matrix(lhs)) } colnames(beta.spp) <- colnames(lhs) colnames(beta.sites) <- rownames(lhs) F.Mod <- (SS.Exp.each/df.Exp) / (SS.Res/df.Res) f.test <- function(tH, G, df.Exp, df.Res, tIH.snterm) { ## HERE I TRY CHANGING t(H) TO tH, and ## t(I - H.snterm) to tIH.snterm, so that we don't have ## to do those calculations for EACH iteration. ## This is the function we have to do for EACH permutation. ## G is an n x n centered distance matrix ## H is the hat matrix from the design (X) ## note that for R, * is element-wise multiplication, ## whereas %*% is matrix multiplication. (sum(G * tH)/df.Exp) / (sum(G * tIH.snterm)/df.Res) } ### Old f.test ### f.test <- function(H, G, I, df.Exp, df.Res, H.snterm){ ## (sum( G * t(H) )/df.Exp) / ## (sum( G * t(I-H.snterm) )/df.Res) } SS.perms <- function(H, G, I){ c(SS.Exp.p = sum( G * t(H) ), S.Res.p=sum( G * t(I-H) ) ) } ## Permutations if (missing(strata)) strata <- NULL p <- sapply(1:permutations, function(x) permuted.index(n, strata=strata)) tH.s <- lapply(H.s, t) ## Apply permutations for each term ## This is the new f.test (2011-06-15) that uses fewer arguments f.perms <- sapply(1:nterms, function(i) { sapply(1:permutations, function(j) { f.test(tH.s[[i]], G[p[,j], p[,j]], df.Exp[i], df.Res, tIH.snterm) } ) }) ## Round to avoid arbitrary P-values with tied data f.perms <- round(f.perms, 12) F.Mod <- round(F.Mod, 12) SumsOfSqs = c(SS.Exp.each, SS.Res, sum(SS.Exp.each) + SS.Res) tab <- data.frame(Df = c(df.Exp, df.Res, n-1), SumsOfSqs = SumsOfSqs, MeanSqs = c(SS.Exp.each/df.Exp, SS.Res/df.Res, NA), F.Model = c(F.Mod, NA,NA), R2 = SumsOfSqs/SumsOfSqs[length(SumsOfSqs)], P = c((rowSums(t(f.perms) >= F.Mod)+1)/(permutations+1), NA, NA)) rownames(tab) <- c(attr(attr(rhs.frame, "terms"), "term.labels")[u.grps], "Residuals", "Total") colnames(tab)[ncol(tab)] <- "Pr(>F)" attr(tab, "heading") <- "Terms added sequentially (first to last)\n" class(tab) <- c("anova", class(tab)) out <- list(aov.tab = tab, call = match.call(), coefficients = beta.spp, coef.sites = beta.sites, f.perms = f.perms, model.matrix = rhs, terms = Terms) class(out) <- "adonis" out } vegan/R/adipart.formula.R0000644000176200001440000000112112023317071014755 0ustar liggesusers`adipart.formula` <- function(formula, data, index=c("richness", "shannon", "simpson"), weights=c("unif", "prop"), relative = FALSE, nsimul=99, ...) { ## evaluate formula if (missing(data)) data <- parent.frame() tmp <- hierParseFormula(formula, data) lhs <- tmp$lhs rhs <- tmp$rhs ## run simulations sim <- adipart.default(lhs, rhs, index = index, weights = weights, relative = relative, nsimul = nsimul, ...) call <- match.call() call[[1]] <- as.name("adipart") attr(sim, "call") <- call sim } vegan/R/adipart.default.R0000644000176200001440000001022412023317071014740 0ustar liggesusersadipart.default <- function(y, x, index=c("richness", "shannon", "simpson"), weights=c("unif", "prop"), relative = FALSE, nsimul=99, ...) { ## evaluate formula lhs <- as.matrix(y) if (missing(x)) x <- cbind(level_1=seq_len(nrow(lhs)), leve_2=rep(1, nrow(lhs))) rhs <- data.frame(x) rhs[] <- lapply(rhs, as.factor) rhs[] <- lapply(rhs, droplevels) nlevs <- ncol(rhs) if (nlevs < 2) stop("provide at least two level hierarchy") if (any(rowSums(lhs) == 0)) stop("data matrix contains empty rows") if (any(lhs < 0)) stop("data matrix contains negative entries") if (is.null(colnames(rhs))) colnames(rhs) <- paste("level", 1:nlevs, sep="_") tlab <- colnames(rhs) ## check proper design of the model frame l1 <- sapply(rhs, function(z) length(unique(z))) if (!any(sapply(2:nlevs, function(z) l1[z] <= l1[z-1]))) stop("number of levels are inapropriate, check sequence") rval <- list() rval[[1]] <- rhs[,nlevs] nCol <- nlevs - 1 for (i in 2:nlevs) { rval[[i]] <- interaction(rhs[,nCol], rval[[(i-1)]], drop=TRUE) nCol <- nCol - 1 } rval <- as.data.frame(rval[rev(1:length(rval))]) l2 <- sapply(rval, function(z) length(unique(z))) if (any(l1 != l2)) warning("levels are not perfectly nested") ## aggregate response matrix fullgamma <-if (nlevels(rhs[,nlevs]) == 1) TRUE else FALSE ftmp <- vector("list", nlevs) for (i in 1:nlevs) { ftmp[[i]] <- as.formula(paste("~", tlab[i], "- 1")) } ## is there a method/burnin/thin in ... ? method <- if (is.null(list(...)$method)) "r2dtable" else list(...)$method burnin <- if (is.null(list(...)$burnin)) 0 else list(...)$burnin thin <- if (is.null(list(...)$thin)) 1 else list(...)$thin base <- if (is.null(list(...)$base)) exp(1) else list(...)$base ## evaluate other arguments index <- match.arg(index) weights <- match.arg(weights) switch(index, "richness" = { divfun <- function(x) apply(x > 0, 1, sum)}, "shannon" = { divfun <- function(x) diversity(x, index = "shannon", MARGIN = 1, base=base)}, "simpson" = { divfun <- function(x) diversity(x, index = "simpson", MARGIN = 1)}) ## this is the function passed to oecosimu wdivfun <- function(x) { ## matrix sum *can* change in oecosimu (but default is constant sumMatr) sumMatr <- sum(x) if (fullgamma) { tmp <- lapply(1:(nlevs-1), function(i) t(model.matrix(ftmp[[i]], rhs)) %*% x) tmp[[nlevs]] <- matrix(colSums(x), nrow = 1, ncol = ncol(x)) } else { tmp <- lapply(1:nlevs, function(i) t(model.matrix(ftmp[[i]], rhs)) %*% x) } ## weights will change in oecosimu thus need to be recalculated if (weights == "prop") wt <- lapply(1:nlevs, function(i) apply(tmp[[i]], 1, function(z) sum(z) / sumMatr)) else wt <- lapply(1:nlevs, function(i) rep(1 / NROW(tmp[[i]]), NROW(tmp[[i]]))) a <- sapply(1:nlevs, function(i) sum(divfun(tmp[[i]]) * wt[[i]])) if (relative) a <- a / a[length(a)] b <- sapply(2:nlevs, function(i) a[i] - a[(i-1)]) c(a, b) } if (nsimul > 0) { sim <- oecosimu(lhs, wdivfun, method = method, nsimul=nsimul, burnin=burnin, thin=thin) } else { sim <- wdivfun(lhs) tmp <- rep(NA, length(sim)) sim <- list(statistic = sim, oecosimu = list(z = tmp, pval = tmp, method = NA, statistic = sim)) } nam <- c(paste("alpha", 1:(nlevs-1), sep="."), "gamma", paste("beta", 1:(nlevs-1), sep=".")) names(sim$statistic) <- attr(sim$oecosimu$statistic, "names") <- nam call <- match.call() call[[1]] <- as.name("adipart") attr(sim, "call") <- call attr(sim$oecosimu$simulated, "index") <- index attr(sim$oecosimu$simulated, "weights") <- weights attr(sim, "n.levels") <- nlevs attr(sim, "terms") <- tlab attr(sim, "model") <- rhs class(sim) <- c("adipart", class(sim)) sim } vegan/R/adipart.R0000644000176200001440000000007011751501303013313 0ustar liggesusersadipart <- function (...) { UseMethod("adipart") } vegan/R/ade2vegancca.R0000644000176200001440000000175111617776630014223 0ustar liggesusers `ade2vegancca` <- function(object) { nf <- object$nf CCA <- list(eig = object$eig, u = as.matrix(object$l1), v = as.matrix(object$c1), u.eig = as.matrix(object$li), v.eig = as.matrix(object$co), wa.eig = as.matrix(object$ls), biplot = as.matrix(object$cor)[-1,], rank = object$rank, tot.chi = sum(object$eig), QR = NA, envcentre = NA, Xbar = NA) CCA$wa <- sweep(CCA$wa.eig, 2, 1/sqrt(object$eig[1:nf]), "*") out <- list(call = object$call, grand.total = NA, rowsum = object$lw, colsum = object$cw, tot.chi = NA, pCCA = NULL, CCA = CCA, CA = NULL, method = "cca", inertia = "mean squared contingency coefficient") class(out) = c("ade4cca", "cca") out } vegan/R/add1.cca.R0000644000176200001440000000253411564452463013252 0ustar liggesusers`add1.cca`<- function(object, scope, test = c("none", "permutation"), pstep = 100, perm.max = 200, ...) { if (inherits(object, "prc")) stop("'step'/'add1' cannot be used for 'prc' objects") test <- match.arg(test) ## Default add1 out <- NextMethod("add1", object, test = "none", ...) cl <- class(out) ## Loop over terms in 'scope' and do anova.cca if (test == "permutation") { ## Avoid nested Condition(Condition(x) + z) hasfla <- update(terms(object$terminfo), . ~ Condition(.)) if (!is.character(scope)) scope <- add.scope(object, update.formula(object, scope)) ns <- length(scope) adds <- matrix(0, ns+1, 3) adds[1, ] <- NA for (i in 1:ns) { tt <- scope[i] ## Condition(.) previous terms (if present) if (!is.null(object$CCA)) { fla <- update(hasfla, paste("~ . +", tt)) nfit <- update(object, fla) } else nfit <- update(object, as.formula(paste(". ~ . +", tt))) tmp <- anova(nfit, step = pstep, perm.max = perm.max, ...) adds[i+1,] <- unlist(tmp[1,3:5]) } colnames(adds) <- colnames(tmp)[3:5] out <- cbind(out, adds) class(out) <- cl } out } vegan/R/TukeyHSD.betadisper.R0000644000176200001440000000053010764763103015464 0ustar liggesusers`TukeyHSD.betadisper` <- function(x, which = "group", ordered = FALSE, conf.level = 0.95, ...) { df <- data.frame(distances = x$distances, group = x$group) mod.aov <- aov(distances ~ group, data = df) TukeyHSD(mod.aov, which = which, ordered = ordered, conf.level = conf.level, ...) } vegan/R/SSlomolino.R0000644000176200001440000000141711466523032014001 0ustar liggesusersSSlomolino <- selfStart(~ Asym/(1 + slope^log(xmid/area)), function(mCall, data, LHS) { xy <- sortedXyData(mCall[["area"]], LHS, data) ## approximate with Arrhenius model on log-log .p <- coef(lm(log(xy[["y"]]) ~ log(xy[["x"]]))) ## Asym is value at max(x) but > max(y) and xmid is x which gives ## Asym/2 .Smax <- max(xy[["y"]])*1.1 .S <- exp(.p[1] + log(max(xy[["x"]])) * (.p[2])) .S <- max(.S, .Smax) .xmid <- exp((log(.S/2) - .p[1])/.p[2]) ## approximate slope for log(Asym/y - 1) ~ log(xmid/x) + 0 .y <- log(.S/xy[["y"]] - 1) .z <- log(.xmid/xy[["x"]]) .b <- coef(lm(.y ~ .z - 1)) value <- c(.S, .xmid, exp(.b)) names(value) <- mCall[c("Asym","xmid", "slope")] value }, c("Asym","xmid","slope")) vegan/R/SSgleason.R0000644000176200001440000000052311466571544013611 0ustar liggesusersSSgleason <- selfStart(~ k + slope*log(area), function(mCall, data, LHS) { ## Gleason is a linear model: starting values are final ones xy <- sortedXyData(mCall[["area"]], LHS, data) value <- as.vector(coef(lm(xy[,"y"] ~ log(xy[,"x"])))) names(value) <- mCall[c("k","slope")] value }, c("k","slope")) vegan/R/SSgitay.R0000644000176200001440000000043211464307657013275 0ustar liggesusersSSgitay <- selfStart(~ (k + slope*log(area))^2, function(mCall, data, LHS) { xy <- sortedXyData(mCall[["area"]], LHS, data) value <- as.vector(coef(lm(sqrt(xy[,"y"]) ~ log(xy[,"x"])))) names(value) <- mCall[c("k","slope")] value }, c("k","slope")) vegan/R/SSarrhenius.R0000644000176200001440000000044411452264303014146 0ustar liggesusersSSarrhenius <- selfStart(~ k*area^z, function(mCall, data, LHS) { xy <- sortedXyData(mCall[["area"]], LHS, data) value <- as.vector(coef(lm(log(xy[,"y"]) ~ log(xy[,"x"])))) value[1] <- exp(value[1]) names(value) <- mCall[c("k","z")] value }, c("k","z")) vegan/R/RsquareAdj.R0000644000176200001440000000236511711171341013742 0ustar liggesusers`RsquareAdj` <- function(x, ...) { UseMethod("RsquareAdj") } `RsquareAdj.default` <- function(x, n, m, ...) { r2 <- 1 - (1-x)*(n-1)/(n-m-1) if (any(na <- m >= n-1)) r2[na] <- NA r2 } ## Use this with rda() results `RsquareAdj.rda` <- function(x, ...) { R2 <- x$CCA$tot.chi/x$tot.chi m <- x$CCA$qrank n <- nrow(x$CCA$u) if (is.null(x$pCCA)) { radj <- RsquareAdj(R2, n, m) } else { ## Partial model: same adjusted R2 as for component [a] in two ## source varpart model R2p <- x$pCCA$tot.chi/x$tot.chi p <- x$pCCA$rank radj <- RsquareAdj(R2 + R2p, n, m + p) - RsquareAdj(R2p, n, p) } list(r.squared = R2, adj.r.squared = radj) } ## cca result: no RsquareAdj RsquareAdj.cca <- function(x, ...) { R2 <- x$CCA$tot.chi/x$tot.chi radj <- NA list(r.squared = R2, adj.r.squared = radj) } ## Linear model: take the result from the summary RsquareAdj.lm <- function(x, ...) { summary(x)[c("r.squared", "adj.r.squared")] } ## Generalized linear model: R2-adj only with Gaussian model RsquareAdj.glm <- function(x, ...) { if (family(x)$family == "gaussian") summary.lm(x)[c("r.squared", "adj.r.squared")] else NA } vegan/R/MOStest.R0000644000176200001440000000264011323073043013232 0ustar liggesusers`MOStest` <- function(x, y, interval, ...) { if (!missing(interval)) interval <- sort(interval) x <- eval(x) m0 <- glm(y ~ x + I(x^2), ...) k <- coef(m0) isHump <- unname(k[3] < 0) hn <- if(isHump) "hump" else "pit" hump <- unname(-k[2]/2/k[3]) if (missing(interval)) p1 <- min(x) else p1 <- interval[1] if (missing(interval)) p2 <- max(x) else p2 <- interval[2] test <- if (m0$family$family %in% c("binomial", "poisson")) "Chisq" else "F" tmp <- glm(y ~ I(x^2 - 2*x*p1), ...) ## Chisq test has one column less than F test: extract statistic ## and its P value statmin <- anova(tmp, m0, test = test)[2, (5:6) - (test == "Chisq")] tmp <- glm(y ~ I(x^2 - 2*x*p2), ...) statmax <- anova(tmp, m0, test = test)[2, (5:6) - (test == "Chisq")] comb <- 1 - (1-statmin[2])*(1-statmax[2]) comb <- unlist(comb) stats <- rbind(statmin, statmax) rownames(stats) <- paste(hn, c("at min", "at max")) stats <- cbind("min/max" = c(p1,p2), stats) stats <- rbind(stats, "Combined" = c(NA, NA, comb)) vec <- c(p1, p2, hump) names(vec) <- c("min", "max", hn) vec <- sort(vec) isBracketed <- names(vec)[2] == hn out <- list(isHump = isHump, isBracketed = isBracketed, hump = vec, family = family(m0), coefficients = stats, mod = m0) class(out) <- "MOStest" out } vegan/R/MDSrotate.R0000644000176200001440000000400511626473631013550 0ustar liggesusers### Rotates metaMDS or monoMDS result so that axis one is parallel to ### vector 'x'. `MDSrotate` <- function(object, vec, na.rm = FALSE, ...) { workswith <- c("metaMDS", "monoMDS") if (!inherits(object, workswith)) stop(gettextf("function works only with the results of: %s", paste(workswith, collapse = ", "))) x <- object$points if (is.null(object$species)) sp <- NA else sp <- object$species N <- NCOL(x) if (N < 2) stop(gettextf("needs at least 2 dimensions")) vec <- drop(vec) if (length(dim(vec)) > 1) stop(gettextf("function works only with univariate 'vec'")) if (!is.numeric(vec)) stop(gettextf("'vec' must be numeric")) ## vectorfit finds the direction cosine. We rotate first axis to ## 'vec' which means that we make other axes orthogonal to 'vec' ## one by one if (na.rm) keep <- !is.na(vec) else keep <- !logical(length(vec)) ## scores must be orthogonal for the next loop to work if (N > 2) { pc <- prcomp(x[keep,]) x <- x %*% pc$rotation if (!all(is.na(sp))) sp <- sp %*% pc$rotation } ## Rotation loop for (k in 2:N) { rot <- vectorfit(x[keep, c(1,k)], vec[keep], permutations=0)$arrows rot <- drop(rot) ## counterclockwise rotation matrix: ## [cos theta -sin theta] ## [sin theta cos theta] rot <- rbind(rot, rev(rot)) rot[1,2] <- -rot[1,2] ## Rotation of points and species scores x[, c(1,k)] <- x[, c(1,k)] %*% rot if (!all(is.na(sp))) sp[, c(1,k)] <- sp[, c(1,k)] %*% rot } ## Rotate 2..N axes to PC if (N > 2 && attr(object$points, "pc")) { pc <- prcomp(x[,-1]) x[,-1] <- pc$x if (!all(is.na(sp))) sp[,-1] <- sp[,-1] %*% pc$rotation } ## '[] <-' retains attributes object$points[] <- x object$species[] <- sp attr(object$points, "pc") <- FALSE object } vegan/R/CCorA.R0000644000176200001440000001556411507372020012635 0ustar liggesusers`CCorA` <- function(Y, X, stand.Y = FALSE, stand.X = FALSE, nperm = 0, ...) { epsilon <- sqrt(.Machine$double.eps) ## ## BEGIN: Internal functions ## cov.inv <- function(mat, no, epsilon) { ## This function returns: ## 1) mat = matrix F of the principal components (PCA object scores); ## 2) S.inv = the inverse of the covariance matrix; ## 3) m = the rank of matrix 'mat' ## The inverse of the PCA covariance matrix is the diagonal ## matrix of (1/eigenvalues). If ncol(mat) = 1, the ## inverse of the covariance matrix contains 1/var(mat). mat <- as.matrix(mat) # 'mat' was centred before input to cov.inv if(ncol(mat) == 1) { S.inv <- as.matrix(1/var(mat)) m <- 1 } else { S.svd <- svd(cov(mat)) m <- ncol(mat) mm <- length(which(S.svd$d > epsilon)) if(mm < m) { message("Information - Matrix",no,": rank=",mm," < order",m) m <- mm } S.inv <- diag(1/S.svd$d[1:m]) mat <- mat %*% S.svd$u[,1:m] # S.svd$u = normalized eigenvectors } list(mat=mat, S.inv=S.inv, m=m) } ## Check zero variances var.null <- function (mat, no) { problems <- diag(cov(mat)) <= 0 if (any(problems)) { whichProbs <- paste(which(problems), collapse=", ") warning("zero variance in variable(s) ", whichProbs) stop("verify/modify your matrix No. ", no) } invisible(0) } probPillai <- function(Y, X, n, S11.inv, S22.inv, s, df1, df2, epsilon, Fref, nperm, ...) { ## Permutation test for Pillai's trace in CCorA. ## Reference: Brian McArdle's unpublished graduate course notes. nGE <- 1 for(i in 1:nperm) { Y.per <- Y[permuted.index(n, ...),, drop=FALSE] S12.per <- cov(Y.per,X) gross.mat <- S12.per %*% S22.inv %*% t(S12.per) %*% S11.inv Pillai.per <- sum(diag(gross.mat)) Fper <- (Pillai.per*df2)/((s-Pillai.per)*df1) if(Fper >= (Fref-epsilon)) nGE <- nGE+1 } P <- nGE/(nperm+1) } ## END: internal functions ## Y <- as.matrix(Y) var.null(Y,1) nY <- nrow(Y) p <- ncol(Y) if(is.null(colnames(Y))) { Ynoms <- paste("VarY", 1:p, sep="") } else { Ynoms <- colnames(Y) } X <- as.matrix(X) var.null(X,2) nX <- nrow(X) q <- ncol(X) if(is.null(colnames(X))) { Xnoms <- paste("VarX", 1:q, sep="") } else { Xnoms <- colnames(X) } if(nY != nX) stop("Different numbers of rows in Y and X") n <- nY if(is.null(rownames(X)) & is.null(rownames(Y))) { rownoms <- paste("Obj", 1:n, sep="") } else { if(is.null(rownames(X))) { rownoms <- rownames(Y) } else { rownoms <- rownames(X) } } Y.c <- scale(Y, center = TRUE, scale = stand.Y) X.c <- scale(X, center = TRUE, scale = stand.X) ## Check for identical matrices if(p == q) { if(sum(abs(Y-X)) < epsilon^2) stop("Y and X are identical") if(sum(abs(Y.c-X.c)) < epsilon^2) stop("After centering, Y and X are identical") } ## Replace Y.c and X.c by tables of their PCA object scores, computed by SVD temp <- cov.inv(Y.c, 1, epsilon) Y <- temp$mat pp <- temp$m rownames(Y) <- rownoms temp <- cov.inv(X.c, 2, epsilon) X <- temp$mat qq <- temp$m rownames(X) <- rownoms ## Correction PL, 26dec10 if(max(pp,qq) >= (n-1)) stop("Not enough degrees of freedom: max(pp,qq) >= (n-1)") ## Covariance matrices, etc. from the PCA scores S11 <- cov(Y) if(sum(abs(S11)) < epsilon) return(0) S22 <- cov(X) if(sum(abs(S22)) < epsilon) return(0) S12 <- cov(Y,X) if(sum(abs(S12)) < epsilon) return(0) S11.chol <- chol(S11) S11.chol.inv <- solve(S11.chol) S22.chol <- chol(S22) S22.chol.inv <- solve(S22.chol) ## K summarizes the correlation structure between the two sets of variables K <- t(S11.chol.inv) %*% S12 %*% S22.chol.inv K.svd <- svd(K) Eigenvalues <- K.svd$d^2 ## ## Check for circular covariance matrix if((p == q) & (var(K.svd$d) < epsilon)) cat("Warning: [nearly] circular covariance matrix. The solution may be meaningless.",'\n') ## K.svd$u %*% diag(K.svd$d) %*% t(K.svd$v) # To check that K = U D V' axenames <- paste("CanAxis",1:length(K.svd$d),sep="") U <- K.svd$u V <- K.svd$v A <- S11.chol.inv %*% U B <- S22.chol.inv %*% V Cy <- (Y %*% A) # Correction 27dec10: remove /sqrt(n-1) Cx <- (X %*% B) # Correction 27dec10: remove /sqrt(n-1) ## Compute the 'Biplot scores of Y and X variables' a posteriori -- corr.Y.Cy <- cor(Y.c, Cy) # To plot Y in biplot in space Y corr.Y.Cx <- cor(Y.c, Cx) # Available for plotting Y in space of X corr.X.Cy <- cor(X.c, Cy) # Available for plotting X in space of Y corr.X.Cx <- cor(X.c, Cx) # To plot X in biplot in space X ## Add row and column names rownames(Cy) <- rownames(Cx) <- rownoms colnames(Cy) <- colnames(Cx) <- axenames rownames(corr.Y.Cy) <- rownames(corr.Y.Cx) <- Ynoms rownames(corr.X.Cy) <- rownames(corr.X.Cx) <- Xnoms colnames(corr.Y.Cy) <- colnames(corr.Y.Cx) <- axenames colnames(corr.X.Cy) <- colnames(corr.X.Cx) <- axenames ## Compute the two redundancy statistics RsquareY.X <- simpleRDA2(Y, X) RsquareX.Y <- simpleRDA2(X, Y) Rsquare.adj.Y.X <- RsquareAdj(RsquareY.X$Rsquare, n, RsquareY.X$m) Rsquare.adj.X.Y <- RsquareAdj(RsquareX.Y$Rsquare, n, RsquareX.Y$m) ## Compute Pillai's trace = sum of the canonical eigenvalues ## = sum of the squared canonical correlations S11.inv <- S11.chol.inv %*% t(S11.chol.inv) S22.inv <- S22.chol.inv %*% t(S22.chol.inv) gross.mat <- S12 %*% S22.inv %*% t(S12) %*% S11.inv PillaiTrace <- sum(diag(gross.mat)) s <- min(pp, qq) df1 <- max(pp,qq) df2 <- (n - max(pp,qq) - 1) Fval <- (PillaiTrace*df2)/((s-PillaiTrace)*df1) p.Pillai <- pf(Fval, s*df1, s*df2, lower.tail=FALSE) if(nperm > 0) { p.perm <- probPillai(Y, X, n, S11.inv, S22.inv, s, df1, df2, epsilon, Fval, nperm, ...) } else { p.perm <- NA } out <- list(Pillai=PillaiTrace, Eigenvalues=Eigenvalues, CanCorr=K.svd$d, Mat.ranks=c(RsquareX.Y$m, RsquareY.X$m), RDA.Rsquares=c(RsquareY.X$Rsquare, RsquareX.Y$Rsquare), RDA.adj.Rsq=c(Rsquare.adj.Y.X, Rsquare.adj.X.Y), nperm=nperm, p.Pillai=p.Pillai, p.perm=p.perm, Cy=Cy, Cx=Cx, corr.Y.Cy=corr.Y.Cy, corr.X.Cx=corr.X.Cx, corr.Y.Cx=corr.Y.Cx, corr.X.Cy=corr.X.Cy, call = match.call()) class(out) <- "CCorA" out } vegan/R/AIC.radfit.R0000644000176200001440000000145312031100300013521 0ustar liggesusers### these functions are defined _ex machina_ for radline objects which ### inherit from glm. Here we define them for radfit objects where ### object$models is a list of radline objects `AIC.radfit` <- function (object, k = 2, ...) { sapply(object$models, AIC, k = k, ...) } `deviance.radfit` <- function(object, ...) { sapply(object$models, deviance, ...) } `logLik.radfit` <- function(object, ...) { sapply(object$models, logLik, ...) } ### Define also for radfit.frames which are lists of radfit objects `AIC.radfit.frame` <- function(object, k = 2, ...) { sapply(object, AIC, k = k, ...) } `deviance.radfit.frame` <- function(object, ...) { sapply(object, deviance, ...) } `logLik.radfit.frame` <- function(object, ...) { sapply(object, logLik, ...) } vegan/NAMESPACE0000644000176200001440000003016212110164631012566 0ustar liggesusers## compiled code useDynLib(vegan) ## Export regular function names (no dots) export(CCorA, MOStest, RsquareAdj, SSarrhenius, SSgitay, SSgleason, SSlomolino, adipart, adonis, anosim, beals, betadisper, betadiver, bgdispersal, bioenv, bstick, cIndexKM, calibrate, capscale, cascadeKM, cca, commsimulator, contribdiv, clamtest, decorana, decostand, designdist, coverscale, dispindmorisita, distconnected, diversity, downweight, drarefy, eigengrad, eigenvals, envfit, estaccumR, estimateR, eventstar, factorfit, fisherfit, fitspecaccum, goodness, hiersimu, humpfit, indpower, inertcomp, initMDS, intersetcor, isomapdist, isomap, linestack, mantel, meandist, metaMDSdist, metaMDSiter, metaMDSredist, MDSrotate, metaMDS, monoMDS, mrpp, msoplot, mso, multipart, nestedbetajac, nestedbetasor, nestedchecker, nesteddisc, nestedn0, nestednodf, nestedtemp, oecosimu, ordiR2step, ordiarrows, ordicloud, ordicluster, ordiellipse, ordigrid, ordihull, ordilabel, ordiplot3d, ordiplot, ordipointlabel, ordiresids, ordirgl, ordisegments, ordispider, ordisplom, ordistep, ordisurf, orditkplot, orditorp, ordixyplot, orglpoints, orglsegments, orglspider, orgltext, pcnm, permatfull, permatswap, permutest, poolaccum, postMDS, prc, prestondistr, prestonfit, procrustes, protest, radfit, radlattice, rankindex, rarecurve, rarefy, raupcrick, rda, renyiaccum, renyi, rrarefy, scores, showvarparts, simper, spandepth, spantree, specaccum, specnumber, specpool2vect, specpool, spenvcor, stepacross, stressplot, swan, tabasco, taxa2dist, taxondive, tolerance, treedist, treedive, treeheight, tsallisaccum, tsallis, varpart, vectorfit, vegandocs, vegdist, vegemite, veiledspec, wascores, wcmdscale, wisconsin) ## export pasteCall for 'permute' export(pasteCall) ## export anova.cca for 'BiodiversityR': this should be fixed there export(anova.cca) ## Export as.mcmc for coda export(as.mcmc.oecosimu, as.mcmc.permat) ## DEFUNCT: export names defined in vegan-defunct export(permuted.index2, getNumObs) ## export regular functions with dot names export(as.fisher, as.mlm, as.preston, as.rad, fieller.MOStest, fisher.alpha, kendall.global, kendall.post, make.cepnames, mantel.correlog, mantel.partial, no.shared, rad.lognormal, rad.null, rad.preempt, rad.zipf, rad.zipfbrot, read.cep, rgl.isomap, rgl.renyiaccum, vif.cca) ## Export panel functions export(panel.ordi, panel.ordi3d, prepanel.ordi3d) ## Export .Depracated functions (to be removed later) export(metaMDSrotate) ## do NOT export the following internal functions ## export(ade2vegancca, orderingKM, ordiArgAbsorber, ordiArrowMul, ## ordiGetData, ordimedian, ordiNAexclude, ordiNApredict, ## ordiParseFormula, ordiTerminfo, pregraphKM, simpleRDA2, varpart2, ## varpart3, varpart4, veganCovEllipse) ## Registration of S3 methods import(stats) import(graphics) importFrom(utils, head, tail) importFrom(lattice, densityplot) ## nobs only exists in R 2.13.0 -- import from permute with older R if (getRversion() < "2.13.0") { importFrom(permute, nobs) } # adipart: vegan S3method(adipart, default) S3method(adipart, formula) # AIC: stats S3method(AIC, radfit) S3method(AIC, radfit.frame) # RsquareAdj: vegan S3method(RsquareAdj, cca) S3method(RsquareAdj, default) S3method(RsquareAdj, glm) S3method(RsquareAdj, lm) S3method(RsquareAdj, rda) # TukeyHSD: stats S3method(TukeyHSD, betadisper) # add1: stats S3method(add1, cca) # alias: stats S3method(alias, cca) # anova: stats S3method(anova, betadisper) S3method(anova, cca) S3method(anova, prc) ## Do not export as.mcmc now: would need import(coda) # as.mcmc: coda <======= rare #S3method(as.mcmc, oecosimu) #S3method(as.mcmc, permat) # as.mlm: vegan S3method(as.mlm, cca) S3method(as.mlm, rda) # as.ts: stats S3method(as.ts, oecosimu) S3method(as.ts, permat) # bioenv: vegan S3method(bioenv, default) S3method(bioenv, formula) # biplot: stats S3method(biplot, CCorA) S3method(biplot, rda) # boxplot: graphics S3method(boxplot, betadisper) S3method(boxplot, specaccum) # bstick: vegan S3method(bstick, cca) S3method(bstick, decorana) S3method(bstick, default) S3method(bstick, prcomp) S3method(bstick, princomp) # calibrate: vegan S3method(calibrate, cca) S3method(calibrate, ordisurf) # cca: vegan S3method(cca, default) S3method(cca, formula) # coef: stats S3method(coef, cca) S3method(coef, radfit) S3method(coef, radfit.frame) S3method(coef, rda) # confint: stats -- also uses MASS:::confint.glm & MASS:::profile.glm # does this work with namespaces?? S3method(confint, MOStest) S3method(confint, fisherfit) # cophenetic: stats S3method(cophenetic, spantree) # density: stats S3method(density, adonis) S3method(density, anosim) S3method(density, mantel) S3method(density, mrpp) S3method(density, oecosimu) S3method(density, permutest.cca) S3method(density, protest) # densityplot: lattice S3method(densityplot, adonis) S3method(densityplot, oecosimu) # deviance: stats S3method(deviance, cca) S3method(deviance, rda) S3method(deviance, radfit) S3method(deviance, radfit.frame) # drop1: stats S3method(drop1, cca) # eigenvals: vegan S3method(eigenvals, cca) S3method(eigenvals, default) S3method(eigenvals, dudi) S3method(eigenvals, pca) S3method(eigenvals, pcnm) S3method(eigenvals, pco) S3method(eigenvals, prcomp) S3method(eigenvals, princomp) S3method(eigenvals, wcmdscale) # envfit: vegan S3method(envfit, default) S3method(envfit, formula) # estimateR: vegan S3method(estimateR, data.frame) S3method(estimateR, default) S3method(estimateR, matrix) # extractAIC: stats S3method(extractAIC, cca) # fitted: stats S3method(fitted, capscale) S3method(fitted, cca) S3method(fitted, procrustes) S3method(fitted, radfit) S3method(fitted, radfit.frame) S3method(fitted, rda) # goodness: vegan S3method(goodness, cca) S3method(goodness, metaMDS) S3method(goodness, monoMDS) S3method(goodness, rda) # head: utils S3method(head, summary.cca) # hiersimu: vegan S3method(hiersimu, default) S3method(hiersimu, formula) # identify: graphics S3method(identify, ordiplot) # labels: base S3method(labels, envfit) # lines: graphics S3method(lines, humpfit) S3method(lines, permat) S3method(lines, preston) S3method(lines, prestonfit) S3method(lines, procrustes) S3method(lines, radline) S3method(lines, radfit) S3method(lines, spantree) ## logLik: stats S3method(logLik, radfit) S3method(logLik, radfit.frame) # model.frame, model.matrix: stats S3method(model.frame, cca) S3method(model.matrix, cca) # multipart: vegan S3method(multipart, default) S3method(multipart, formula) # nobs: stats S3method(nobs, CCorA) S3method(nobs, adonis) S3method(nobs, betadisper) S3method(nobs, cca) S3method(nobs, decorana) S3method(nobs, isomap) S3method(nobs, metaMDS) S3method(nobs, pcnm) S3method(nobs, procrustes) S3method(nobs, rad) S3method(nobs, varpart) S3method(nobs, wcmdscale) # ordisurf: vegan S3method(ordisurf, default) S3method(ordisurf, formula) # permutest: vegan S3method(permutest, betadisper) S3method(permutest, cca) S3method(permutest, default) # persp: graphics S3method(persp, renyiaccum) S3method(persp, tsallisaccum) # plot: graphics S3method(plot, MOStest) S3method(plot, anosim) S3method(plot, betadisper) S3method(plot, betadiver) S3method(plot, cascadeKM) S3method(plot, cca) S3method(plot, contribdiv) S3method(plot, clamtest) S3method(plot, decorana) S3method(plot, envfit) S3method(plot, fisher) S3method(plot, fisherfit) S3method(plot, fitspecaccum) S3method(plot, humpfit) S3method(plot, isomap) S3method(plot, mantel.correlog) S3method(plot, meandist) S3method(plot, metaMDS) S3method(plot, monoMDS) S3method(plot, nestednodf) S3method(plot, nestedtemp) S3method(plot, ordisurf) S3method(plot, orditkplot) S3method(plot, permat) S3method(plot, poolaccum) S3method(plot, prc) S3method(plot, preston) S3method(plot, prestonfit) S3method(plot, procrustes) S3method(plot, profile.fisherfit) S3method(plot, rad) S3method(plot, radfit) S3method(plot, radfit.frame) S3method(plot, radline) S3method(plot, renyi) S3method(plot, renyiaccum) S3method(plot, spantree) S3method(plot, specaccum) S3method(plot, taxondive) S3method(plot, varpart) S3method(plot, varpart234) S3method(plot, vegandensity) S3method(plot, wcmdscale) # points: graphics S3method(points, cca) S3method(points, decorana) S3method(points, humpfit) S3method(points, metaMDS) S3method(points, ordiplot) S3method(points, orditkplot) S3method(points, procrustes) S3method(points, radline) S3method(points, radfit) # predict: stats S3method(predict, cca) S3method(predict, decorana) S3method(predict, fitspecaccum) S3method(predict, humpfit) S3method(predict, procrustes) S3method(predict, radline) S3method(predict, radfit) S3method(predict, radfit.frame) S3method(predict, rda) S3method(predict, specaccum) # print: base S3method(print, CCorA) S3method(print, MOStest) S3method(print, adonis) S3method(print, anosim) S3method(print, betadisper) S3method(print, bioenv) S3method(print, capscale) S3method(print, cca) S3method(print, decorana) S3method(print, eigenvals) S3method(print, envfit) S3method(print, factorfit) S3method(print, fisherfit) S3method(print, humpfit) S3method(print, isomap) S3method(print, mantel) S3method(print, mantel.correlog) S3method(print, metaMDS) S3method(print, monoMDS) S3method(print, mrpp) S3method(print, mso) S3method(print, nestedchecker) S3method(print, nesteddisc) S3method(print, nestedn0) S3method(print, nestednodf) S3method(print, nestedtemp) S3method(print, oecosimu) S3method(print, permat) S3method(print, permutest.betadisper) S3method(print, permutest.cca) S3method(print, poolaccum) S3method(print, prestonfit) S3method(print, procrustes) S3method(print, protest) S3method(print, radfit) S3method(print, radfit.frame) S3method(print, radline) S3method(print, specaccum) S3method(print, simper) S3method(print, summary.bioenv) S3method(print, summary.cca) S3method(print, summary.clamtest) S3method(print, summary.decorana) S3method(print, summary.humpfit) S3method(print, summary.isomap) S3method(print, summary.meandist) S3method(print, summary.permat) S3method(print, summary.prc) S3method(print, summary.procrustes) S3method(print, summary.simper) S3method(print, summary.taxondive) S3method(print, taxondive) S3method(print, tolerance.cca) S3method(print, varpart) S3method(print, varpart234) S3method(print, vectorfit) S3method(print, wcmdscale) # profile: stats # see note on 'confint' S3method(profile, MOStest) S3method(profile, fisherfit) S3method(profile, humpfit) # radfit: vegan S3method(radfit, data.frame) S3method(radfit, default) S3method(radfit, matrix) # rda: vegan S3method(rda, default) S3method(rda, formula) # residuals: stats S3method(residuals, cca) S3method(residuals, procrustes) # scores: vegan S3method(scores, betadisper) S3method(scores, betadiver) S3method(scores, cca) S3method(scores, decorana) S3method(scores, default) S3method(scores, envfit) S3method(scores, lda) S3method(scores, metaMDS) S3method(scores, monoMDS) S3method(scores, ordihull) S3method(scores, ordiplot) S3method(scores, orditkplot) S3method(scores, pcnm) S3method(scores, rda) S3method(scores, wcmdscale) # screeplot: stats S3method(screeplot, cca) S3method(screeplot, decorana) S3method(screeplot, prcomp) S3method(screeplot, princomp) # simulate: stats S3method(simulate, capscale) S3method(simulate, cca) S3method(simulate, rda) # stressplot: vegan S3method(stressplot, default) S3method(stressplot, monoMDS) # summary: base S3method(summary, anosim) S3method(summary, bioenv) S3method(summary, cca) S3method(summary, clamtest) S3method(summary, decorana) S3method(summary, eigenvals) S3method(summary, humpfit) S3method(summary, isomap) S3method(summary, meandist) S3method(summary, ordiellipse) S3method(summary, ordihull) S3method(summary, permat) S3method(summary, poolaccum) S3method(summary, prc) S3method(summary, procrustes) S3method(summary, radfit.frame) S3method(summary, simper) S3method(summary, specaccum) S3method(summary, taxondive) # tail: utils S3method(tail, summary.cca) # text: graphics S3method(text, cca) S3method(text, decorana) S3method(text, metaMDS) S3method(text, ordiplot) S3method(text, orditkplot) S3method(text, procrustes) # tolerance: vegan -- or analogue?? Gav? S3method(tolerance, cca) # vif: car -- but not used as a S3method within vegan # because of car definition: could be defined as exported 'vif' generic # in vegan with namespace #S3method(vif, cca) # weights: stats S3method(weights, cca) S3method(weights, decorana) S3method(weights, rda) vegan/DESCRIPTION0000644000176200001440000000135612122077231013062 0ustar liggesusersPackage: vegan Title: Community Ecology Package Version: 2.0-7 Date: March 19, 2013 Author: Jari Oksanen, F. Guillaume Blanchet, Roeland Kindt, Pierre Legendre, Peter R. Minchin, R. B. O'Hara, Gavin L. Simpson, Peter Solymos, M. Henry H. Stevens, Helene Wagner Maintainer: Jari Oksanen Depends: permute Imports: lattice Suggests: MASS, mgcv, lattice, cluster, scatterplot3d, rgl, tcltk Description: Ordination methods, diversity analysis and other functions for community and vegetation ecologists. License: GPL-2 URL: http://cran.r-project.org, http://vegan.r-forge.r-project.org/ Packaged: 2013-03-19 11:34:07 UTC; jarioksa NeedsCompilation: yes Repository: CRAN Date/Publication: 2013-03-19 16:04:57 vegan/.Rinstignore0000644000176200001440000000004611713257123013660 0ustar liggesusersMakefile .*tex$ .*sty$ .*bib$ .*texi$