Rcpp/0000755000176200001440000000000015031260342011152 5ustar liggesusersRcpp/tests/0000755000176200001440000000000015014017044012314 5ustar liggesusersRcpp/tests/tinytest.R0000644000176200001440000000377015014017044014331 0ustar liggesusers if (requireNamespace("tinytest", quietly=TRUE)) { ## Force tests to be executed if in dev release which we define as ## having a sub-release, eg 0.9.15.5 is one whereas 0.9.16 is not if (length(strsplit(format(packageVersion("Rcpp")), "\\.")[[1]]) > 3) { # dev rel, and if (Sys.getenv("RunAllRcppTests") != "no") { # if env.var not yet set message("Setting \"RunAllRcppTests\"=\"yes\" for development release") Sys.setenv("RunAllRcppTests"="yes") } if (Sys.getenv("RunVerboseRcppTests") != "no") { # if env.var not yet set message("Setting \"RunVerboseRcppTests\"=\"yes\" for development release") Sys.setenv("RunVerboseRcppTests"="yes") } } ## On Travis also always set tests; see ## https://docs.travis-ci.com/user/environment-variables/#default-environment-variables ## GitHub Action also set CI variable; see ## https://docs.github.com/en/actions/reference/environment-variables ## And we set it in 'docker run' call ## Ensure Codecov runs full tests too if ((Sys.getenv("CI") == "true") || (Sys.getenv("TRAVIS") == "true") || (Sys.getenv("CONTINUOUS_INTEGRATION") == "true") || (Sys.getenv("CODECOV_TOKEN") != "")) { if (Sys.getenv("RunAllRcppTests") != "no") { # if env.var not yet set message("Always enabling \"RunAllRcppTests\"=\"yes\" in CI\n") Sys.setenv("RunAllRcppTests"="yes") } if (Sys.getenv("RunVerboseRcppTests") != "no") { # if env.var not yet set message("Always enabling \"RunVerboseRcppTests\"=\"yes\" in CI\n") Sys.setenv("RunVerboseRcppTests"="yes") } } ## there are several more granular ways to test files in a tinytest directory, ## see its package vignette; tests can also run once the package is installed ## using the same command `test_package(pkgName)`, or by director or file tinytest::test_package("Rcpp") } Rcpp/.Rinstignore0000644000176200001440000000011412754425121013461 0ustar liggesusersinst/doc/Makefile inst/doc/jss.bst inst/doc/RJournal.sty inst/unitTests/src Rcpp/MD50000644000176200001440000013761515031260342011477 0ustar liggesusers80fbd04e384005533ef2e12729c8e1c0 *ChangeLog de2e0d17dcab5cd23a7d4bcad894d2ff *DESCRIPTION f53ecd48407d7485920c4f3caaf187e0 *NAMESPACE ad57518c2d1d3d66fc26b6c214ed13e1 *R/00_classes.R f9a4ffb4d0fcec3eec6ef6c229ff1bba *R/01_show.R 5ad59a1671fd934a15f614a96331c56a *R/02_completion.R 3eafac927ff4e744b84675639ff48078 *R/03_prompt.R 0142821b76acdc0b8fa2bcd4c834aeae *R/Attributes.R 92c604e80679db2563fed5acc0b7cc37 *R/Module.R 460f7e14f458e5d0a061738d08878b13 *R/Rcpp.package.skeleton.R ac2a0d66a4892308a3a23eaedc726f84 *R/RcppClass.R 7f9f504712b646a7af30a962f481a3fe *R/RcppLdpath.R 87bff7adced70c835fbbbbb25fbc2199 *R/bib.R 0cb7766cf185c3c786b2b9db5c205959 *R/compilerCheck.R 37b16d5ad05cc80baaf047c77d53aeec *R/exceptions.R 7e3a5dfefbb7c092bf34b7ad06e761b0 *R/exposeClass.R 9ed2c17bf29e61836bac1eaa78fbf0b7 *R/inline.R c1f6e22d805062693ca441a313a798c7 *R/loadModule.R 410e549661c436dd77eba6814eb0f5d4 *R/loadRcppModules.R 02c1cb554af89184c6c5c46e1ee49e17 *R/populate.R 66c49e653c7fcbcefb611cc8aef5e61c *R/tools.R e82268e95d8f2d3a1759620eb1bc6664 *R/zzz.R ca3834ec7bf955e94f30cf1546bb65bc *README.md dcfe968628d24168fc5bb54a66631158 *TODO 1bf18d9c216b8d95033f0bd2fe2906b2 *build/partial.rdb 415cbc6cba35195a22e169feb4f211da *build/vignette.rds d8edc63de3343fcf14ee46cb692249db *cleanup 7599bada89d38a2474389682f552755e *inst/CITATION b2245c0987b29aa08c926fa21f761140 *inst/NEWS.Rd 7a9967333ad85931cc6d2051f4dff76e *inst/announce/ANNOUNCE-0.10.0.txt 734d037a2ac31af4659fb3b2e1a778ad *inst/announce/ANNOUNCE-0.11.0.txt 7d85af8d096e473821a3f001d3128b01 *inst/announce/ANNOUNCE-0.6.0.txt f61c7e9e1460eac25702b24c1af30442 *inst/announce/ANNOUNCE-0.7.0.txt a198e05a9b004dfc1f8ea67629f2f6c7 *inst/announce/ANNOUNCE-0.8.0.txt 3e8a171f22548f5da208b58e66b48e6c *inst/announce/ANNOUNCE-0.9.0.txt ce5e91d9544242ec9616a8f81da6ff46 *inst/bib/Rcpp.bib 6f1e3b1f4f75e04af65bb9daf94e9630 *inst/discovery/cxx0x.R 2baf167ce452976b0fcb43e44f566af7 *inst/doc/Rcpp-FAQ.Rnw 6fb164a8ca01fd9b715a6020e800effe *inst/doc/Rcpp-FAQ.pdf 887250b7e0675b4a70d6eb1a4689080c *inst/doc/Rcpp-attributes.Rnw 90d568b2b5a944a027148b1e0d40a7b7 *inst/doc/Rcpp-attributes.pdf 37f50a136d1350e8e864c9265cc88ad8 *inst/doc/Rcpp-extending.Rnw bb2cecfd8441fec7b0ebcbe6d92fe9dd *inst/doc/Rcpp-extending.pdf 90eade7bfffa82f250510759bc9a7f36 *inst/doc/Rcpp-introduction.Rnw d9c213eb7301e96b1672e65ff5028cfd *inst/doc/Rcpp-introduction.pdf e6cf1d12ce4e3a2fed6eddf6290d393f *inst/doc/Rcpp-jss-2011.Rnw 7d2e56484a77bb46ca2d2d5cfb11ec6e *inst/doc/Rcpp-jss-2011.pdf 4524c2761e07e170f681181c2e62eb05 *inst/doc/Rcpp-libraries.Rnw 5ea210343e614a155a170738527090c6 *inst/doc/Rcpp-libraries.pdf a96bcf4153b795bff19ddc36a17ca435 *inst/doc/Rcpp-modules.Rnw cb0d241d6ca433fa85e09ee4cc682d04 *inst/doc/Rcpp-modules.pdf 835d0e2dd365e4621663bd03ae219758 *inst/doc/Rcpp-package.Rnw bdcd995b3462eabe8d49a816d544cbfc *inst/doc/Rcpp-package.pdf d76adfdc4e68c69c5ff632e234db6a85 *inst/doc/Rcpp-quickref.Rnw 34b648a5d49eecb091a88c953aa1763d *inst/doc/Rcpp-quickref.pdf 929a1aad762b7354b6875a35093ec477 *inst/doc/Rcpp-sugar.Rnw 433471f598bf6b8c54005444393cdeb6 *inst/doc/Rcpp-sugar.pdf 35fa971232b8c9fb0bbb9dfc2ad3de7a *inst/examples/Attributes/Depends.cpp a9aa3aceea0b49525155a2c43296318b *inst/examples/Attributes/Export.cpp c6c9969e0067a1321827369cba1cc566 *inst/examples/Attributes/cppFunction.R ae6383cbe35d7fd9f03a47b16fe084e4 *inst/examples/Attributes/sourceCpp.R d8ad7f81287bfb38184962408e21dc4b *inst/examples/ConvolveBenchmarks/GNUmakefile 4e5da9b0fe573983765dacbdd4888f71 *inst/examples/ConvolveBenchmarks/buildAndRun.sh 3b726172d475beb1a950a60c963abdd6 *inst/examples/ConvolveBenchmarks/convolve10_cpp.cpp 7b5f52647bb1401e5ca51ae24a99d9ab *inst/examples/ConvolveBenchmarks/convolve10_cpp.h 198737bb5588686872b7bf92c575b44d *inst/examples/ConvolveBenchmarks/convolve11_cpp.cpp c2326ac51bb20278c7d200c0217af192 *inst/examples/ConvolveBenchmarks/convolve12_cpp.cpp ec15a3f27dda294c1ba0e85bc7975001 *inst/examples/ConvolveBenchmarks/convolve13_cpp.cpp c2934f803727f1f9145f2eaacf7fb783 *inst/examples/ConvolveBenchmarks/convolve14_cpp.cpp 02ae1ae1c668a0037f228a316a9b9717 *inst/examples/ConvolveBenchmarks/convolve2_c.c 41c3477fb3c135e372f7dcee7a00b1fe *inst/examples/ConvolveBenchmarks/convolve3_cpp.cpp 6094f474b9bada3d489b5e9e1eed40db *inst/examples/ConvolveBenchmarks/convolve4_cpp.cpp 570d28eceab6c8e21061abaa932a57b7 *inst/examples/ConvolveBenchmarks/convolve5_cpp.cpp 160f9ca0f7a5e8ce599d5a731e33a302 *inst/examples/ConvolveBenchmarks/convolve7_c.c feac91b32652ac87f9fca99cb65babef *inst/examples/ConvolveBenchmarks/convolve8_cpp.cpp b653d0cab1e9c200527c631486b21b22 *inst/examples/ConvolveBenchmarks/convolve9_cpp.cpp e211fa941ea87850f28aafd93dbaea01 *inst/examples/ConvolveBenchmarks/exampleRCode.r 83e612c4f034144d20769da6a98ab430 *inst/examples/ConvolveBenchmarks/loopmacro.h a39297262c26fcf0016a007c8729f7ed *inst/examples/ConvolveBenchmarks/overhead.r 695db9645074a40edf199a3f6e7b99d9 *inst/examples/ConvolveBenchmarks/overhead.sh 41a7585097bb0330a19163f63b9eb582 *inst/examples/ConvolveBenchmarks/overhead_1.cpp 70bc5f4cab64d21baa5efd44371d6c06 *inst/examples/ConvolveBenchmarks/overhead_2.c f98ba450080bf7ededba779a9eb9ef08 *inst/examples/FastLM/benchmark.r 187ff739229daa658a997db7361cf79a *inst/examples/FastLM/benchmarkLongley.r 57e3f462b6e57f6d4781d93ad0b5a0f0 *inst/examples/FastLM/fastLMviaArmadillo.r 96177e5073669fce0ada1a133a4b528a *inst/examples/FastLM/fastLMviaGSL.r bed809fc1187686e9c3f031da7ecc03a *inst/examples/FastLM/lmArmadillo.R e90e71260dd32a062301a565b0ceb78a *inst/examples/FastLM/lmGSL.R dee16ee1aaf90787c0d3fe441b57e572 *inst/examples/Misc/fibonacci.r 51b7f11bdc147d595d3d7de4a7b88129 *inst/examples/Misc/ifelseLooped.r 80df7f84cd6c98c9d3b45ceaa62b6325 *inst/examples/Misc/newFib.r 3028009739751d645a3f3c1e65c335b1 *inst/examples/Misc/piBySimulation.r b6d55aea50fdd5a95b36f006bfa9bbdf *inst/examples/Misc/piSugar.cpp b28eef52d9c70bdc3bc1c7c4af74a705 *inst/examples/OpenMP/GNUmakefile 6ac8a4754e7a6c968f910b775837981b *inst/examples/OpenMP/OpenMPandInline.r 1fb803a50758e7abccccbacf6df79bb9 *inst/examples/OpenMP/check.R 33d174735e08ffcbfe8b14f77be6467e *inst/examples/OpenMP/piWithInterrupts.cpp ee8c42a72f8ed650b8ac32443890c01b *inst/examples/RcppGibbs/RcppGibbs.R cefdedf5f9c0d671bcf465e948198a29 *inst/examples/RcppGibbs/RcppGibbs_Updated.R a57feb54c968ab827c78c5c18c1d1408 *inst/examples/RcppGibbs/timeRNGs.R e8a89fe0eebf8ec758806abc84e42d8d *inst/examples/RcppInline/RObject.r 07260e8bebfc924ed834ac9adc10ed3e *inst/examples/RcppInline/RcppInlineExample.r 0e55533b689b5cc21d6e48ed89e39f50 *inst/examples/RcppInline/RcppInlineWithLibsExamples.r 8d8b770eaeee86bcb2a7b0939a3c75f3 *inst/examples/RcppInline/RcppSimpleExample.r af8de22ca53be6cde070ad079bcc0560 *inst/examples/RcppInline/UncaughtExceptions.r 04094741972fda044af2c1982433f37a *inst/examples/RcppInline/external_pointer.r 924087b70f9e658de341442f27c787ee *inst/examples/SugarPerformance/Timer.h ddfeedc53f53f33a3da83660c9bc022e *inst/examples/SugarPerformance/Timertest.cpp 8be8229bd89b2ea3a760d1112f7a7054 *inst/examples/SugarPerformance/sugarBenchmarks.R 4b5eef1853e02850de35d4799c7392ef *inst/examples/functionCallback/README f55a0d78225fef3970fc5f54fddb5801 *inst/examples/functionCallback/newApiExample.r 2b3ff26140686d910b4fe51505b817a3 *inst/examples/performance/extractors.R 33c7adefe3137cae65b189490c958c6a *inst/examples/performance/performance.R c43702432a8138a32aaee079bbf6e0cd *inst/include/Rcpp.h 36e44ff21273d50c3eaff4a46bb572ac *inst/include/Rcpp/Benchmark/Timer.h d6797b8b8bdae9ff766e228c3483fd0c *inst/include/Rcpp/DataFrame.h e4195b2fee650b67d709d7bd529f3de6 *inst/include/Rcpp/Dimension.h c09874c5a20d27730a542566017a70a0 *inst/include/Rcpp/DottedPair.h 8ae8df6f92f7d17625b543348c9c035c *inst/include/Rcpp/DottedPairImpl.h 80de572b931b4174ee4f72568984b5b3 *inst/include/Rcpp/Environment.h 719d99509ff3398d24d31a4964dc6beb *inst/include/Rcpp/Extractor.h 0e673291cac4bf839157946880772c1d *inst/include/Rcpp/Fast.h 1836fe44282438109267ce447debae1a *inst/include/Rcpp/Formula.h 4882d4eed582eeaf9b37e10027a45777 *inst/include/Rcpp/Function.h 6ad1b0148d43fd84f39d8e030e39a871 *inst/include/Rcpp/InputParameter.h a33639e3b142e20c4c5f87b8c252c860 *inst/include/Rcpp/InternalFunction.h c1a30ee157262261c65ec27ef0435ce7 *inst/include/Rcpp/InternalFunctionWithStdFunction.h 4f649deb041fc8b0ff2680d1a75a49db *inst/include/Rcpp/Interrupt.h 10b9d367e8df67dc986c558e9f142681 *inst/include/Rcpp/Language.h 4df6c1501ce42ce8669ed6e6473653d5 *inst/include/Rcpp/Light 7423a0c0e22f136a8cde2ee861349d13 *inst/include/Rcpp/Lighter 831f454f66395440e5c4b805917f2b9d *inst/include/Rcpp/Lightest eb0d9bf3d46dbedd1542a36743995dc6 *inst/include/Rcpp/Module.h e54ff3fb24c5fb5c00e35804b4043177 *inst/include/Rcpp/Na_Proxy.h 30a357c1b1bf0a4b7b3c06aec6ac6891 *inst/include/Rcpp/Named.h 09c3d2e030266a2716c465005fddb8ad *inst/include/Rcpp/Nullable.h 355e849d93981b9ab17b965b1d79dab6 *inst/include/Rcpp/Pairlist.h c299955262d228fc372294633ecb10a9 *inst/include/Rcpp/Promise.h c7c202116cb2d8f9993f2d2879a48339 *inst/include/Rcpp/RNGScope.h 19d73d0c48066eab27b7e21f016aca39 *inst/include/Rcpp/RObject.h 7eaef3d46101154d1492c710f3cad3bf *inst/include/Rcpp/Rcpp 0708f78d2a5868bd0036bdffc92557eb *inst/include/Rcpp/Reference.h 577707408edc19445de29e2fd4182292 *inst/include/Rcpp/Rmath.h 4a8bc08de01a68edf476065293076bc9 *inst/include/Rcpp/S4.h b479ccd53c1917ce1140ee0a17bb3d21 *inst/include/Rcpp/StretchyList.h 3d953b8ddb44689beaf90a435dd26141 *inst/include/Rcpp/String.h 16eb3c24a812321d0c985c26ecb14e0b *inst/include/Rcpp/StringTransformer.h 6d6d4343170f4d107a54715c24ad9c98 *inst/include/Rcpp/Symbol.h e8984721738317caff337c1076b25cce *inst/include/Rcpp/Vector.h eed9bf9af10a68be9cd55e5a5cdaa36a *inst/include/Rcpp/WeakReference.h c84d37569cc5094df6e4c8600530d110 *inst/include/Rcpp/XPtr.h 2eff8a753ede96fbcf538eab9eb22889 *inst/include/Rcpp/algo.h 72757004433f52c06c4c7fd2bdb6c268 *inst/include/Rcpp/algorithm.h 3fa2caaea31d12b63d0a049c1da3c878 *inst/include/Rcpp/api/bones/Date.h 560684b180bc9eb1aaaf6f427ea97063 *inst/include/Rcpp/api/bones/Datetime.h 4d936b49167638e86368f4b8e26c13cc *inst/include/Rcpp/api/bones/bones.h 49f3c640f64681d80bfd2395309a4ddb *inst/include/Rcpp/api/bones/wrap_extra_steps.h 738de61f646f72b06810142fcb09af6f *inst/include/Rcpp/api/meat/DataFrame.h 80788c003d6b95f633d53db11b4c42e0 *inst/include/Rcpp/api/meat/Date.h 64e00680fbc6a82bbd1dd0e100e10673 *inst/include/Rcpp/api/meat/Datetime.h 13355fb54111f51930877bcddb41d50c *inst/include/Rcpp/api/meat/Dimension.h 26477794f8170b533113dcf620d64d1c *inst/include/Rcpp/api/meat/DottedPairImpl.h 006fb9ab61399d07b7f7bbd8ae6cf92f *inst/include/Rcpp/api/meat/Environment.h e3132a348dd7c8cb342e4df0dd480737 *inst/include/Rcpp/api/meat/Rcpp_eval.h a8b20b3c2b1e123172ab3a1eb78e04b0 *inst/include/Rcpp/api/meat/S4.h 9fd69c4ef0c1780784322f902305d1c7 *inst/include/Rcpp/api/meat/StretchyList.h eded8a0a95dd5ecdcae8aa70aceb795c *inst/include/Rcpp/api/meat/Vector.h a3e8a42322f0e644f1d6b6d4f55425e7 *inst/include/Rcpp/api/meat/as.h f1b2b53b2851bbd3afb878ef3829f58f *inst/include/Rcpp/api/meat/export.h cc1991e18d0c1d1e3470285fec935c36 *inst/include/Rcpp/api/meat/is.h 3ecf92371682f347f71c6da62730a05e *inst/include/Rcpp/api/meat/meat.h b8b08db5250d9cd27130853ed04041bc *inst/include/Rcpp/api/meat/message.h 71c33d73cde9cdf7368627a9b00a8e7d *inst/include/Rcpp/api/meat/module/Module.h d3e14b929d0b6cd092f52d1ced57b573 *inst/include/Rcpp/api/meat/protection.h c9af45da88ea151bb2f8cd27900257e8 *inst/include/Rcpp/api/meat/proxy.h 12c775ee39ec274c4825219d25e04f43 *inst/include/Rcpp/api/meat/wrap.h 47fc05bb3d86217c07793ea37d833302 *inst/include/Rcpp/as.h 90c153091bc3fb1e123fef9dc40394e6 *inst/include/Rcpp/barrier.h fa7b26bbe19f908b9c00ead2fe2717ac *inst/include/Rcpp/clone.h 1b3b2bee1fc9bd3f231c2a33ca572281 *inst/include/Rcpp/complex.h c20263b496be5b7f39626962727b099a *inst/include/Rcpp/config.h b90e19134c5d4a4c0652f956c022d1e4 *inst/include/Rcpp/date_datetime/Date.h e75130fc77dac6243e5c88639c940dea *inst/include/Rcpp/date_datetime/Datetime.h 0d754f1a9266c3e1bbc6946ba1304ab5 *inst/include/Rcpp/date_datetime/date_datetime.h db56d4d2d82a3d6ae834d8157b0459e3 *inst/include/Rcpp/date_datetime/newDateVector.h 83d1e1f3e2fc38cf2708402b6baaeccd *inst/include/Rcpp/date_datetime/newDatetimeVector.h eeaacae019fe68c8acbd3e9fbea29a3d *inst/include/Rcpp/date_datetime/oldDateVector.h a2bcdcb2cc9e096bfb46106875462a13 *inst/include/Rcpp/date_datetime/oldDatetimeVector.h e9f4a5c7843d4bda2a6bcdd52be3abf0 *inst/include/Rcpp/exceptions.h 7c731d4c921ce35caaaf00ad6cdde425 *inst/include/Rcpp/exceptions_impl.h f15033c5a9a025e85b0d45f42e1ab29d *inst/include/Rcpp/grow.h 5fa886fea6bfe95d86c97fc32794711e *inst/include/Rcpp/hash/IndexHash.h 118185092dfabe6230c4e6c2a8e50257 *inst/include/Rcpp/hash/SelfHash.h ce761de72f7730fe942b91e35e6b9ba6 *inst/include/Rcpp/hash/hash.h 3c1b55773be7d386bca01a99c8fa94af *inst/include/Rcpp/internal/Exporter.h 87298c0d130f4d0c2c9e3bcbf8f52712 *inst/include/Rcpp/internal/GreedyVector.h ac0b994918191501b757516ce5ee263b *inst/include/Rcpp/internal/ListInitialization.h 589b5e7ef7ec36ea7c72c0989856322e *inst/include/Rcpp/internal/NAComparator.h ddeb259fb4dc45ce8f48af5e7c67327a *inst/include/Rcpp/internal/NAEquals.h a1cfd42face708ee13c1b82d72990024 *inst/include/Rcpp/internal/Proxy_Iterator.h 508bef1a3592104abdca03463b25432e *inst/include/Rcpp/internal/SEXP_Iterator.h 03e9f4da956cce7a1a74bf935ef5b001 *inst/include/Rcpp/internal/call.h ef7589197950d24c37c68868a2fd4ec5 *inst/include/Rcpp/internal/caster.h 1cc9fbe420c4d94a392fa41db6607f81 *inst/include/Rcpp/internal/converter.h 78cca884967d645095bb8de46e97eb9d *inst/include/Rcpp/internal/export.h d75740f6c80130661e85ef0e8af6ef17 *inst/include/Rcpp/internal/na.h 2d6716a93c54ae524caab179db28206f *inst/include/Rcpp/internal/r_coerce.h ced4d19ec0af39a1402abc9dfc772759 *inst/include/Rcpp/internal/r_vector.h 8cdcef073f86a88d1bd228cae7a9383d *inst/include/Rcpp/internal/wrap.h 14b302e7f5cca681f122cccde5418cbd *inst/include/Rcpp/internal/wrap_end.h 1914c43f5b9f93808062adf5e2c0a005 *inst/include/Rcpp/iostream/Rstreambuf.h c852659f0876b4dd0a3d3d99e972d1cb *inst/include/Rcpp/is.h 24e8a8c1f4a580954091edb9dae2cfd9 *inst/include/Rcpp/lang.h 3fffc861f0e2426155bf5013ce173cb6 *inst/include/Rcpp/lgrow.h ccf210a0d15b9bb2ed39b1b476997bbd *inst/include/Rcpp/longlong.h 4e9effca3c5f2dabaa4e6aa478b67528 *inst/include/Rcpp/macros/cat.hpp 623f4ca3111e4a28afe10133897a8f89 *inst/include/Rcpp/macros/config.hpp ec19b90809bb03c920fa9d6df8af2732 *inst/include/Rcpp/macros/debug.h e937eb94d20c4ba5899571364783864f *inst/include/Rcpp/macros/dispatch.h 32681ffdaa790b76bf3e20d3a6c17771 *inst/include/Rcpp/macros/interface.h bf6d92385b7958959cb10a6b3bfd2a44 *inst/include/Rcpp/macros/macros.h 3347bc9bf5c92bf9b929c61275c1714b *inst/include/Rcpp/macros/module.h 0c4f36da838e8571b7bc602b4b483295 *inst/include/Rcpp/macros/traits.h acdd29c8bc3af4e20bbb733ab4bd7e74 *inst/include/Rcpp/macros/unroll.h 1762f3b08abffc14b677c9d4c0ee24d2 *inst/include/Rcpp/macros/xp.h 90f826d6b2719cd8b19266f7eed1d71b *inst/include/Rcpp/module/CppFunction.h 8d492c19d0746d6f0531a42ce62e4169 *inst/include/Rcpp/module/Module.h 1f282a0f0e1498bbe9f228dad9fdebfd *inst/include/Rcpp/module/Module_Add_Property.h fd6ad1311c4cc5e0cffcc29722ca0f20 *inst/include/Rcpp/module/Module_Field.h 923ca9c389ce3dd672edcaa3f1e0fe6b *inst/include/Rcpp/module/Module_Property.h 12d7c007a282682b06c8bcff85c78972 *inst/include/Rcpp/module/class.h b021df8570d99c4821e25c137aa45a01 *inst/include/Rcpp/module/class_Base.h 99322cf8421a1cc8964659b05d79a906 *inst/include/Rcpp/module/get_return_type.h 615592b33bb6633f54c088cba4503412 *inst/include/Rcpp/platform/compiler.h 8f9d3b2218818dfe5f703e6900d603e9 *inst/include/Rcpp/platform/solaris.h e6f882c26076e813fe8290c46b1c0fd8 *inst/include/Rcpp/print.h abd6c01295a88b73432a77f6a79aca3a *inst/include/Rcpp/protection/Armor.h fa63d47f044e1012a5431319108f01f9 *inst/include/Rcpp/protection/Shelter.h 6357a773233c2c9f5415c6445fe103f9 *inst/include/Rcpp/protection/Shield.h 2fb2464623e39ad6040f4457b6ef382c *inst/include/Rcpp/protection/protection.h 9b71f44a9870eaee5c63de664e5db4f1 *inst/include/Rcpp/proxy/AttributeProxy.h d1800f7df6f83a017e0501af64551239 *inst/include/Rcpp/proxy/Binding.h 2767ffc2e7c0e7832e7223cd8da38be1 *inst/include/Rcpp/proxy/DottedPairProxy.h 59d09bb7d953413d5452a45616fca92f *inst/include/Rcpp/proxy/FieldProxy.h bb4b32da96533b2cae35b524cf796d04 *inst/include/Rcpp/proxy/GenericProxy.h e34b2baf18b2684fe26743c96f78b3c6 *inst/include/Rcpp/proxy/NamesProxy.h e6ffa94de4d38f34d9b363785fbdf1ff *inst/include/Rcpp/proxy/ProtectedProxy.h 0a75a348caecd8836340ca11be0435d7 *inst/include/Rcpp/proxy/RObjectMethods.h 9e412a44a35eb570fe422b00c15dc84e *inst/include/Rcpp/proxy/SlotProxy.h 16583a2ce9f3f158d32a59bc69dc6045 *inst/include/Rcpp/proxy/TagProxy.h 5b3488834c9e483325dc45493deaf0d4 *inst/include/Rcpp/proxy/proxy.h 0f03769521dac747e5a7094818315d10 *inst/include/Rcpp/r/compat.h e9a35004a15d790b0bdf4086232fdef6 *inst/include/Rcpp/r/headers.h 97b839da2480b8beef14466695e02b3e *inst/include/Rcpp/r_cast.h 0975231e8a827815b7cf027a56bd7fec *inst/include/Rcpp/routines.h 5c5eddabb61b11f1e2aa1dfd3b7dfcc6 *inst/include/Rcpp/sprintf.h 652b362ffc5b25dc354e2f94ccf775df *inst/include/Rcpp/stats/beta.h 830d809435ad6d90f513ceb19ed229ff *inst/include/Rcpp/stats/binom.h de8f527ad087fd135d60496e83600129 *inst/include/Rcpp/stats/cauchy.h 28c835cdee1aa30eff6d7f6481a7c7b7 *inst/include/Rcpp/stats/chisq.h 2fcae848fbd39f938335de220dfceb56 *inst/include/Rcpp/stats/dpq/dpq.h 50246afd70a6c354111d21fef9a61454 *inst/include/Rcpp/stats/dpq/macros.h 2a0a10252c313fa1101c426a71f419b3 *inst/include/Rcpp/stats/exp.h 16b8c2b35aa2dd1acd61aea749bea591 *inst/include/Rcpp/stats/f.h 3531db9168652e50f1a2f7e48995e652 *inst/include/Rcpp/stats/gamma.h 259484f02f4b70c75f061eb3acebc68b *inst/include/Rcpp/stats/geom.h cddc6f8806bbff126f43aad6d9f64225 *inst/include/Rcpp/stats/hyper.h afbc488e006d43bbb44f00b39bdc9279 *inst/include/Rcpp/stats/lnorm.h 0148fa77627fc2649b4cc8fda21ff2cf *inst/include/Rcpp/stats/logis.h 2f20232d49ad4e0d5aa4affe29a83677 *inst/include/Rcpp/stats/nbeta.h 255732d79d848b5ef2dc23a0bb020c78 *inst/include/Rcpp/stats/nbinom.h b648f374ad9b409f3a693cb13d2dacf2 *inst/include/Rcpp/stats/nbinom_mu.h 792ff5b69094be8d30a61da005e8b8a2 *inst/include/Rcpp/stats/nchisq.h 4285fba50176e606b3183e550ca57008 *inst/include/Rcpp/stats/nf.h 62bcbc788f700bb418899f2d5d71674e *inst/include/Rcpp/stats/norm.h b9bb0937015e9915c9eed07d7d5e675e *inst/include/Rcpp/stats/nt.h ee8d82efa40767e1ee30b1b39f0d2b9b *inst/include/Rcpp/stats/pois.h bd6f29269c4cb5e0714c7eb14497dd24 *inst/include/Rcpp/stats/random/random.h 6be67d92344ae4ffe85a2d4a966c5712 *inst/include/Rcpp/stats/random/rbeta.h cdc109dfaa7c849fe8f5108a8157286e *inst/include/Rcpp/stats/random/rbinom.h 2fe775c698a801f71c81d958ff2153bf *inst/include/Rcpp/stats/random/rcauchy.h 09e49a79928fba558003e949f7e42625 *inst/include/Rcpp/stats/random/rchisq.h eb7d8d8957f95e55c7b4c883d07bde3e *inst/include/Rcpp/stats/random/rexp.h 796f003192b271cfd01be89f08fc5857 *inst/include/Rcpp/stats/random/rf.h d3f7b0de54bbff91a52b5f3e97b6f0f9 *inst/include/Rcpp/stats/random/rgamma.h f30537d903fd0e2fe0b8fbde1ad0f448 *inst/include/Rcpp/stats/random/rgeom.h ef335473c41b8bf22c2ed8ead3d02802 *inst/include/Rcpp/stats/random/rhyper.h 812d6f54e228aa74586d4494462dc308 *inst/include/Rcpp/stats/random/rlnorm.h e19c5aac4d1e6f05fb215da8ab9abd63 *inst/include/Rcpp/stats/random/rlogis.h 8401528e0344ac91e8a59d3c75ea3811 *inst/include/Rcpp/stats/random/rnbinom.h da102c578dc03d90e134bc716ce86061 *inst/include/Rcpp/stats/random/rnbinom_mu.h 281fe24171a0dc1a2f5d32b792b29840 *inst/include/Rcpp/stats/random/rnchisq.h d11f94b30bfe73bec96e494c19010112 *inst/include/Rcpp/stats/random/rnorm.h 68c0bc9a9bf8adf587cfafec41f2e0c3 *inst/include/Rcpp/stats/random/rpois.h 22c48598462a7a67f7c46f827a7ca37b *inst/include/Rcpp/stats/random/rsignrank.h 6d053ab00aee5507bdcd37b260edb2ca *inst/include/Rcpp/stats/random/rt.h e4157ac1a6474db7d023ed619f8a3911 *inst/include/Rcpp/stats/random/runif.h 0de983b302b5686c55cf1348856736f2 *inst/include/Rcpp/stats/random/rweibull.h 9d96c7c693ee9ee2be41a02aca2c907c *inst/include/Rcpp/stats/random/rwilcox.h d5e57758623ecb887417b652e9dbe431 *inst/include/Rcpp/stats/stats.h 51dea0f553fe2661ebbf069bba1c6fab *inst/include/Rcpp/stats/t.h 72600819bbbb51028983e81c6623f47f *inst/include/Rcpp/stats/unif.h edcd15051fead7e65a02fe4848ec5969 *inst/include/Rcpp/stats/weibull.h b19248e3d1ba5159604ee91bc499fbe0 *inst/include/Rcpp/storage/NoProtectStorage.h 0f0750ca5166fbea1a202f3a74e94579 *inst/include/Rcpp/storage/PreserveStorage.h 4bfc6bf68fd92addd39ad5eabe987ccd *inst/include/Rcpp/storage/storage.h 6d4b5fd0017b129f89731c3af6f63545 *inst/include/Rcpp/sugar/Range.h be07b75cd41bf643098bf8dc9f6fd6bd *inst/include/Rcpp/sugar/block/SugarBlock_1.h 93914f21ce2678a075f440256bff7256 *inst/include/Rcpp/sugar/block/SugarBlock_2.h b38058d7f4161d552c59199d971759d2 *inst/include/Rcpp/sugar/block/SugarBlock_3.h 77631c6ccb9bf7900cc3e9870308f15e *inst/include/Rcpp/sugar/block/SugarMath.h 0b04c68170924e36a049448bb9dffbcf *inst/include/Rcpp/sugar/block/Vectorized_Math.h b303e234459f72118cdb77b5fc6c40d2 *inst/include/Rcpp/sugar/block/block.h 8989b1fc88898a94d028256afd535218 *inst/include/Rcpp/sugar/functions/Lazy.h 332e143da726e96aa5342a2d379ad888 *inst/include/Rcpp/sugar/functions/all.h be21eae934bd2eb08c36aa98a95f8437 *inst/include/Rcpp/sugar/functions/any.h 2034cef020d507b44a56287085f01b03 *inst/include/Rcpp/sugar/functions/cbind.h 356ce7a62fd40bfb5c99f5d90ceab9c8 *inst/include/Rcpp/sugar/functions/clamp.h 006ff253f5119766397ae8786b6f3273 *inst/include/Rcpp/sugar/functions/complex.h 8c48d64608f50fd65a1060eb0ba0a94f *inst/include/Rcpp/sugar/functions/cummax.h 676a6d35542c22993a733ac9ca7f4557 *inst/include/Rcpp/sugar/functions/cummin.h d48484d2c5885e5132dae2c5360cc003 *inst/include/Rcpp/sugar/functions/cumprod.h b5875c167cebe51528173279a35e1c80 *inst/include/Rcpp/sugar/functions/cumsum.h d9339ceea3657d0eebffff3c4fc19ade *inst/include/Rcpp/sugar/functions/diff.h e89b6f5086b49094e87a58183226c37e *inst/include/Rcpp/sugar/functions/duplicated.h ee8361b3d041e25bf9dd142b2b6809db *inst/include/Rcpp/sugar/functions/functions.h 8a1d27971f10c32f1c2dbc2441c47797 *inst/include/Rcpp/sugar/functions/head.h 71a232c26d62819d7752cbd198ccd471 *inst/include/Rcpp/sugar/functions/ifelse.h e6be4a52d004d3d7cdf4577c03bc0ad6 *inst/include/Rcpp/sugar/functions/is_finite.h 29a018bc6da09bea93392ac25e4c5ff6 *inst/include/Rcpp/sugar/functions/is_infinite.h e04f27b0d6d0902fd507b0c8a6c1ab6f *inst/include/Rcpp/sugar/functions/is_na.h 905bd30e93c3bfea935a665f6e8eeecf *inst/include/Rcpp/sugar/functions/is_nan.h d344320200af69792cc4b6c3f864ecd4 *inst/include/Rcpp/sugar/functions/lapply.h e17dd7603ed04900df60d381e1f8a117 *inst/include/Rcpp/sugar/functions/mapply.h 161a75d06f3022693b9f6e75e091afd2 *inst/include/Rcpp/sugar/functions/mapply/mapply_2.h 49377a45cc5faf0a8bf6258e84dc0d89 *inst/include/Rcpp/sugar/functions/mapply/mapply_3.h ab7b9d24e77fe2dc072077714933d59d *inst/include/Rcpp/sugar/functions/match.h 747824a9e7823288ba51af113ed9af50 *inst/include/Rcpp/sugar/functions/math.h e1d5c777461b843bc04bec8b3c4f6787 *inst/include/Rcpp/sugar/functions/max.h bf3fb31ed2cfec71483f5cf92a6b3ff8 *inst/include/Rcpp/sugar/functions/mean.h e7ddf543af82118e4774aab3f2e63271 *inst/include/Rcpp/sugar/functions/median.h 17f81f3f0fb3cc04341371ab641ff46a *inst/include/Rcpp/sugar/functions/min.h 55ea8f9269403a501d18d47198f997ef *inst/include/Rcpp/sugar/functions/na_omit.h fe272f9c21bb17980bdb2efffd7a7f1c *inst/include/Rcpp/sugar/functions/pmax.h 7bd993f789e126017b34ff9858bd915a *inst/include/Rcpp/sugar/functions/pmin.h ae74c9114eec986e67ecab7ea08d401c *inst/include/Rcpp/sugar/functions/pow.h a1f5d8e23763f3e16039b32589131aaa *inst/include/Rcpp/sugar/functions/range.h 1646622d8ec6731c53b7d74292906c43 *inst/include/Rcpp/sugar/functions/rep.h 73bfa7e84c00ac5badd0306336c93330 *inst/include/Rcpp/sugar/functions/rep_each.h cb49753448b25c3cd6498bfbbae3c8de *inst/include/Rcpp/sugar/functions/rep_len.h 5524927f94bb2c48f81cf050d5548e3d *inst/include/Rcpp/sugar/functions/rev.h e780762055db29b8108b020f605729a2 *inst/include/Rcpp/sugar/functions/rowSums.h e81e6ae804c78e169d9689df7843f20e *inst/include/Rcpp/sugar/functions/sample.h 08751fd161cfd28c0c3c6003dea07f80 *inst/include/Rcpp/sugar/functions/sapply.h f964dafa72508e308f9ff057c577c49e *inst/include/Rcpp/sugar/functions/sd.h f415faaadd4de7ee8cd9f69ceb546a92 *inst/include/Rcpp/sugar/functions/self_match.h 4723c52a2e6ffcb5a99bbf5f120f0e1f *inst/include/Rcpp/sugar/functions/seq_along.h d96689dfed6e69bd91948b49aacbf448 *inst/include/Rcpp/sugar/functions/setdiff.h d5a5b9a9b75d93f355534de01dc6ca07 *inst/include/Rcpp/sugar/functions/sign.h 148a1f4a4a0017f7c5520a4a44441fe8 *inst/include/Rcpp/sugar/functions/strings/collapse.h 6a4ca421d9353d551e3454c3c7ba6b00 *inst/include/Rcpp/sugar/functions/strings/strings.h 5f405963ec4bd5cbcc470285814ee796 *inst/include/Rcpp/sugar/functions/strings/trimws.h fa6996110472311d86217245a4817e28 *inst/include/Rcpp/sugar/functions/sum.h 5ebb5010a39d3135d9797576f92c8256 *inst/include/Rcpp/sugar/functions/table.h 6aece98287f5b416b1b9dde8258b7ba3 *inst/include/Rcpp/sugar/functions/tail.h 3714352196527f3eb1911d7dfeda0925 *inst/include/Rcpp/sugar/functions/unique.h 6af0ed03b22ab5376164eeca35d27830 *inst/include/Rcpp/sugar/functions/var.h a21e2d861c3e1641d451e8542ac90da7 *inst/include/Rcpp/sugar/functions/which_max.h cb63e9ae52933534b47e4b03b3345d10 *inst/include/Rcpp/sugar/functions/which_min.h 1f232e3aea101e0a7a967b292f5fee3e *inst/include/Rcpp/sugar/logical/SingleLogicalResult.h 633aaf9fd410363a0816ee14ea0756fe *inst/include/Rcpp/sugar/logical/and.h fa170788a69bc85fcb1ead3c8e3d8d61 *inst/include/Rcpp/sugar/logical/can_have_na.h ea316f6c93309fb814bcba060b4243c5 *inst/include/Rcpp/sugar/logical/is.h 349f08cf81f52ed760ecd4dedd472443 *inst/include/Rcpp/sugar/logical/logical.h c848c2c54466ce13e842fff36b33cbfe *inst/include/Rcpp/sugar/logical/not.h ceda7f41514004d0f41a0a25df616480 *inst/include/Rcpp/sugar/logical/or.h 16fbabf279bea866b7a9241084d582dc *inst/include/Rcpp/sugar/matrix/as_vector.h 22dce70c24a72d954c9c0ddb637a87af *inst/include/Rcpp/sugar/matrix/col.h 1efcfad1b72aac3ab68857be3a0578da *inst/include/Rcpp/sugar/matrix/diag.h 2ce9df0e2282b1780d168cdaec70e501 *inst/include/Rcpp/sugar/matrix/lower_tri.h ac84cad78d201a054f8d7df13a6b1353 *inst/include/Rcpp/sugar/matrix/matrix_functions.h fd9bd47cec790c2604a4987472eec0e1 *inst/include/Rcpp/sugar/matrix/outer.h 5d698479a84a2e019271ca70556478eb *inst/include/Rcpp/sugar/matrix/row.h 115b6149b7f328f12440fd1e5a5a0300 *inst/include/Rcpp/sugar/matrix/tools.h 23f94c2d6cbd068312a949798b403467 *inst/include/Rcpp/sugar/matrix/upper_tri.h 30973622e9d3acef832c7e2578e0ddd0 *inst/include/Rcpp/sugar/nona/nona.h 278c96c59d33653b53db01862911a17d *inst/include/Rcpp/sugar/operators/Comparator.h 6c43390b2d47dd6b7d2bb7824d37061b *inst/include/Rcpp/sugar/operators/Comparator_With_One_Value.h c62f193c49b200ee28687469fb2e61c5 *inst/include/Rcpp/sugar/operators/divides.h dbc2f27e6693976f7e1d745db791b712 *inst/include/Rcpp/sugar/operators/logical_operators__Vector__Vector.h 631ba1c3a5983fa36aba958fbe0fac01 *inst/include/Rcpp/sugar/operators/logical_operators__Vector__primitive.h 57b8e523981ced17043df0a35db0503c *inst/include/Rcpp/sugar/operators/minus.h ce6f7cfa18cfcafb15ebd8eb8c45f802 *inst/include/Rcpp/sugar/operators/not.h da8a2c17103b00aeb0d205f76aaebf7d *inst/include/Rcpp/sugar/operators/operators.h 2e6171e8d4ed6c21710aa0758e7f0536 *inst/include/Rcpp/sugar/operators/plus.h d129eac323c93bb69d99b023eb05812d *inst/include/Rcpp/sugar/operators/r_binary_op.h 73722dc109290c63d68934f52637d27b *inst/include/Rcpp/sugar/operators/times.h 5f9acbfddd1c397b017cfd5691293bb4 *inst/include/Rcpp/sugar/operators/unary_minus.h 6c85f88e633df848747b28705f12419a *inst/include/Rcpp/sugar/sets.h 813ff968a963e3058a58c469e070ef82 *inst/include/Rcpp/sugar/sugar.h 89a193bed15037ce566fefe07f049d4b *inst/include/Rcpp/sugar/sugar_forward.h b4c3ecdf94025da94e6dde6eeafe8a44 *inst/include/Rcpp/sugar/tools/iterator.h f01c3fd8fe059517e03062b7d8422407 *inst/include/Rcpp/sugar/undoRmath.h 894245a3f8d5c212ab9c808662c22160 *inst/include/Rcpp/traits/char_type.h d39c02a1033bce9b1193f12eee141171 *inst/include/Rcpp/traits/enable_if.h 4a72487b73047f686e868b4c4cb44382 *inst/include/Rcpp/traits/expands_to_logical.h 129c2e9c6e0a73fce5cebd72c14c2254 *inst/include/Rcpp/traits/get_na.h e20649d25657d2a949492331c7758b7c *inst/include/Rcpp/traits/has_iterator.h 235a43df43936d00128253ef7005915c *inst/include/Rcpp/traits/has_na.h 3cd036e8adc3672b90bf08504e9f7a76 *inst/include/Rcpp/traits/if_.h fe6ce0c1245797c031830f9efc2180eb *inst/include/Rcpp/traits/index_sequence.h f6618d0224159bfc48c1df1d83828d68 *inst/include/Rcpp/traits/init_type.h 569027e71fdb2bda19c8184a12d08762 *inst/include/Rcpp/traits/integral_constant.h 6eb1fc7443352426923660525040b98b *inst/include/Rcpp/traits/is_arithmetic.h 29571f5642930d175ef873140c776975 *inst/include/Rcpp/traits/is_bool.h 4fa497cea2410fb4e662b866663bc0ac *inst/include/Rcpp/traits/is_const.h abcb7e2b556b94d82a09a8849a1c1096 *inst/include/Rcpp/traits/is_convertible.h cd901317f51083b5a6d3f2414fe82607 *inst/include/Rcpp/traits/is_eigen_base.h 7bfb288fca1e46ed6b931500ad42a43d *inst/include/Rcpp/traits/is_finite.h b7587e1b4122a84038f7a5800b535e8e *inst/include/Rcpp/traits/is_infinite.h abd4686b93894a8a221f6da4f3bf74f0 *inst/include/Rcpp/traits/is_module_object.h d97fd982b65ea3d8efc6455b3b1e8102 *inst/include/Rcpp/traits/is_na.h 60122e02e5bb562e557db0c38e17f790 *inst/include/Rcpp/traits/is_nan.h b4d4b4ecdcc75f7004378d9a4c52c490 *inst/include/Rcpp/traits/is_pointer.h 74d6de2afc81c98a4e34fb368aea6a53 *inst/include/Rcpp/traits/is_primitive.h 2a7ce1cf1b5479b6453c7c28d346bcfa *inst/include/Rcpp/traits/is_reference.h 5e2acd97071b71e05d9b11a3f96387e5 *inst/include/Rcpp/traits/is_sugar_expression.h 28916414af7cdb5b5bf9673bffe3fed8 *inst/include/Rcpp/traits/is_trivial.h 2aa827ff4a611723f8fda7e58c9225d7 *inst/include/Rcpp/traits/is_wide_string.h 738e632a612038e6be1baafb8936d5dd *inst/include/Rcpp/traits/longlong.h d2d2d22f014dbda73370de85977494be *inst/include/Rcpp/traits/matrix_interface.h 4165bd63dd3b616e807d730a1909b1d6 *inst/include/Rcpp/traits/module_wrap_traits.h e19d74e319b8af6cbaeb1516a81435c5 *inst/include/Rcpp/traits/named_object.h e9717cf30ad078a3722702d54d744b11 *inst/include/Rcpp/traits/num2type.h fda43f65172234cb8e672b725ff21dc3 *inst/include/Rcpp/traits/one_type.h 3ab68cc3b397346dde5c071d6b1dc2ca *inst/include/Rcpp/traits/r_sexptype_traits.h 9f83f99113b796b5b37668e395f07ec8 *inst/include/Rcpp/traits/r_type_traits.h 2c55008e8515714263346d6c3cdeb35c *inst/include/Rcpp/traits/remove_const.h 0830e491fc6a03ab6c735a215fa70ee0 *inst/include/Rcpp/traits/remove_const_and_reference.h 49e7441fad045085e944a89c2b6d2f14 *inst/include/Rcpp/traits/remove_reference.h ae9eded0d6af8b91bda4e91d7e8c47ce *inst/include/Rcpp/traits/result_of.h 10df0fad7bfeca54513814e89fd28d60 *inst/include/Rcpp/traits/same_type.h 9091fcb005196d81ed41c6a89550e89a *inst/include/Rcpp/traits/storage_type.h 6ffcd9b3ae200cb9f82bf43df519f3a4 *inst/include/Rcpp/traits/traits.h 3d6fc7e388a23053d99a353535ae1275 *inst/include/Rcpp/traits/un_pointer.h 8f92942349c07f0032f5715822387218 *inst/include/Rcpp/traits/wrap_type_traits.h c858d22e58939329e5fe3e10c6e61471 *inst/include/Rcpp/unwindProtect.h fadece0229ef4ff741cfa4c0c42b6c1b *inst/include/Rcpp/utils/tinyformat.h dedbf46dfae724476eedb59622b6c0be *inst/include/Rcpp/utils/tinyformat/tinyformat.h 89a07678f678cfb48de4bd3d4420ea64 *inst/include/Rcpp/vector/00_forward_Vector.h 4fe970f8b2608fb97026142528d21518 *inst/include/Rcpp/vector/00_forward_proxy.h 411c3c52a0011d4fdd9392637172a97d *inst/include/Rcpp/vector/ChildVector.h d4c4878eede03e50c776afcf7836fc7a *inst/include/Rcpp/vector/DimNameProxy.h 47f675c64171ec8e4072036d972aad4f *inst/include/Rcpp/vector/LazyVector.h 020c11693ef729783f6ce9c70e0b3a86 *inst/include/Rcpp/vector/ListOf.h bd73507d75d9178924fc00b70b1f6f55 *inst/include/Rcpp/vector/Matrix.h a6c5cdec475185adc2b61152bc9379de *inst/include/Rcpp/vector/MatrixBase.h fea18a15ac16177399b74b3aba1e8d3c *inst/include/Rcpp/vector/MatrixColumn.h 410f8a433cea0b58017e10edcdd520d7 *inst/include/Rcpp/vector/MatrixRow.h dabec153dcf826b040e592e1c60fc37f *inst/include/Rcpp/vector/RangeIndexer.h 31372a9f3d172f4e9df62c559ff1ad66 *inst/include/Rcpp/vector/SubMatrix.h 282fcdbb1720184e46ec0224de57a500 *inst/include/Rcpp/vector/Subsetter.h ef637b66900da7170303250e1a0d9aa6 *inst/include/Rcpp/vector/Vector.h 99dc1e7a939e6f11ec33588c382517cd *inst/include/Rcpp/vector/VectorBase.h 0c3ff20020b3ff5248826ff796752946 *inst/include/Rcpp/vector/const_generic_proxy.h c76a4bfbaf1c61171799f258f6393ea4 *inst/include/Rcpp/vector/const_string_proxy.h 82421a927c857b34a028774399518289 *inst/include/Rcpp/vector/converter.h fe60090372703d0fd887c32e45f944a3 *inst/include/Rcpp/vector/generic_proxy.h 026adf34a827731798dbf3b6c3159421 *inst/include/Rcpp/vector/instantiation.h 8bfaa9746b1126a74324cab8b5170439 *inst/include/Rcpp/vector/no_init.h 84dbe92383dc935b5576814fd6937418 *inst/include/Rcpp/vector/proxy.h 86af06f9720947eaa083c4fa9bc11289 *inst/include/Rcpp/vector/string_proxy.h 07c9204ef548fd66d5e42ff84cf1da09 *inst/include/Rcpp/vector/swap.h 0467559689b4d5d3eb6504a8a90de7d1 *inst/include/Rcpp/vector/traits.h b53a80ae2aa1de12e8bd0fbff69c904b *inst/include/Rcpp/vector/vector_from_string.h e825c305f490243c7dabb33413dfaa84 *inst/include/RcppCommon.h 83051c918c676565c50377280f3d80a9 *inst/include/doxygen/Examples.h fc570e7927219c2ed9bdb13ca05134d9 *inst/prompt/module.Rd e78047bdda3db5af33456370e65a98d0 *inst/skeleton/Num.cpp ceccb01282e3e574aa78fec0102df6da *inst/skeleton/Rcpp_modules_examples.Rd 519be498e2f048a2750863a147964737 *inst/skeleton/manual-page-stub.Rd 411d02aaf3c409722bf6a39a4a4ffa90 *inst/skeleton/rcpp_hello_world.R 736db59264020d28cb1870868cfa916b *inst/skeleton/rcpp_hello_world.Rd 329380236bdae3a32e349531c0ee2d54 *inst/skeleton/rcpp_hello_world.cpp 2c1227dd8097d9fca8040f3d29f59633 *inst/skeleton/rcpp_hello_world.h 0da63b615f705aa9dfa2e91b15a0ec3a *inst/skeleton/rcpp_hello_world_attributes.cpp 9cbc66836028cfab4df53c8e1c4ccbf5 *inst/skeleton/rcpp_module.cpp 87e64fbfae8826697bdfd1020d2b2641 *inst/skeleton/stdVector.cpp 32a99eb2d472350734277940a2e2a1bb *inst/skeleton/zzz.R 7fb9967c5d48052f8dc6167b1ee619d3 *inst/tinytest/bin/amd64/r-cran-testrcpppackage_0.1.0-1_amd64.deb 56b8f712e86e0113715ead494065346e *inst/tinytest/bin/i386/r-cran-testrcpppackage_0.1.0-1_i386.deb 08aa53008c9d0b88446c534cbf91a165 *inst/tinytest/cpp/DataFrame.cpp caded512e0425b790380edddc00967f4 *inst/tinytest/cpp/Environment.cpp 378c5ca02f76666d28abc7f0f0bbb82a *inst/tinytest/cpp/Exceptions_nocall.cpp b81bf018da788eadaf8f101144e1841b *inst/tinytest/cpp/Function.cpp ca3ce6364c578acf0542617cb09505d1 *inst/tinytest/cpp/InternalFunction.cpp a9b57d92bffc646ac6f074c98c81db6e *inst/tinytest/cpp/InternalFunctionCPP11.cpp 62bd3687f6fae5f022287932343b34b0 *inst/tinytest/cpp/ListOf.cpp 4592f91b2ff1a6cea2125115ce8f75e4 *inst/tinytest/cpp/Matrix.cpp c171e3f43d4293bcfb4341cdc1c2bd29 *inst/tinytest/cpp/Module.cpp ae344d14e4a2711ff2462d02ac0baa78 *inst/tinytest/cpp/RObject.cpp 83bb109ce6845fbdb08a732527556ff1 *inst/tinytest/cpp/Reference.cpp 431733375a744f92c308b95f9d402f42 *inst/tinytest/cpp/S4.cpp 239bf07c23051fc0318de2f80e95385c *inst/tinytest/cpp/String.cpp bf2f556311ef8884928d6db63fccf112 *inst/tinytest/cpp/Subset.cpp 8f85f4c4b8fd6f3456224ce8c7812ca5 *inst/tinytest/cpp/Vector.cpp 2834dfe1270c0e1cc24aba14721c09da *inst/tinytest/cpp/VectorOld.cpp aa3497bfcf9b9d14f35e9558a19fc1b4 *inst/tinytest/cpp/XPtr.cpp d19479e6aab83b12124389782f4bf739 *inst/tinytest/cpp/algorithm.cpp 219e1d71106fb3bb1253ce60affbb398 *inst/tinytest/cpp/as.cpp 12c4f9c7f7323095f118fc9c11ace5da *inst/tinytest/cpp/attributes.cpp 7dd5700e27b702cba4cede554cdb65ba *inst/tinytest/cpp/attributes.hpp fdf3557dcb7e7fbaa37afcbfaba4b088 *inst/tinytest/cpp/coerce.cpp 0644a8cbc3598636082eb8caf23408c0 *inst/tinytest/cpp/dates.cpp 9c81ac1fb25a970b84e543aef34d6cde *inst/tinytest/cpp/dispatch.cpp 385abbb997641176de511ef784b87b45 *inst/tinytest/cpp/embeddedR.cpp 3142234408f0d17bb7edd2238f6beb78 *inst/tinytest/cpp/embeddedR2.cpp 4e6b3693278fd9c33e5fc7724e268fa8 *inst/tinytest/cpp/exceptions.cpp 6e824ef93678e96b63e8dc314a86abb4 *inst/tinytest/cpp/language.cpp cdd742bd240621d7e33ecf4818691e66 *inst/tinytest/cpp/misc.cpp 31eb0032506e988316357913ffc28dee *inst/tinytest/cpp/modref.cpp 705309cd5376196a486d14c73f76ba29 *inst/tinytest/cpp/na.cpp 05a686ca3070780f8dcb1a1de321797e *inst/tinytest/cpp/rcppversion.cpp 511f2da216d7480c3bd4b50d48983799 *inst/tinytest/cpp/rmath.cpp c7bb688561ccc8a9039413782640be7e *inst/tinytest/cpp/stack.cpp 37f1770bce35bf5f2c6a523d42e1ea75 *inst/tinytest/cpp/stats.cpp 3d7f876183e254bcbe9ac4197a1cded6 *inst/tinytest/cpp/sugar.cpp 956e39fb6eb566987b3130a85b4da3c6 *inst/tinytest/cpp/support.cpp c8a357d67dd56b672cd7616e7bbbf520 *inst/tinytest/cpp/table.cpp 9d9ca2312b72c753d9c6f787bf455540 *inst/tinytest/cpp/wrap.cpp 2db3a044a68e8cf5d76a9a1473dee526 *inst/tinytest/cpp/wstring.cpp 54073056db0ba60cf0b1707c4b6db85c *inst/tinytest/src/r-cran-testrcpppackage_0.1.0-1.diff.gz 1d2156181f8816c31306d77f4760697c *inst/tinytest/src/r-cran-testrcpppackage_0.1.0-1.dsc 18c540b0b12feac586f57f2411ed378e *inst/tinytest/src/r-cran-testrcpppackage_0.1.0-1_amd64.changes 7fb9967c5d48052f8dc6167b1ee619d3 *inst/tinytest/src/r-cran-testrcpppackage_0.1.0-1_amd64.deb 84ddc3de28ce0c458d6f19f91bc1710d *inst/tinytest/src/r-cran-testrcpppackage_0.1.0-1_i386.changes 56b8f712e86e0113715ead494065346e *inst/tinytest/src/r-cran-testrcpppackage_0.1.0-1_i386.deb 7263661801b44d075a3345ff4a1faffa *inst/tinytest/testRcppAttributePackage/DESCRIPTION f06e063ca806e7fca22eb7482b2af2d1 *inst/tinytest/testRcppAttributePackage/NAMESPACE c694664176af9bd21deb0248fdddbe7e *inst/tinytest/testRcppAttributePackage/src/rcpp_test.cpp 1a5f53d4b6ba9e3b98fe1eec48a5eb9b *inst/tinytest/testRcppClass/DESCRIPTION f926317ac3486e08433a0fbdf3153efe *inst/tinytest/testRcppClass/NAMESPACE 03f336c9faea79524a608b9dd1d22a92 *inst/tinytest/testRcppClass/R/load.R ec8250809d340e191fbf0b04c344fe00 *inst/tinytest/testRcppClass/R/rcpp_hello_world.R 60b39ca81dc918e7fe8a0c4737079396 *inst/tinytest/testRcppClass/man/Rcpp_class_examples.Rd 736db59264020d28cb1870868cfa916b *inst/tinytest/testRcppClass/man/rcpp_hello_world.Rd fe2b352c0aa449acae8ae667b82aebb9 *inst/tinytest/testRcppClass/man/testRcppClass-package.Rd 5b71e6b5e64bc8418e6b9adf26c09cc8 *inst/tinytest/testRcppClass/src/Num.cpp 45a1446cd51cdbaf9b5833141da93b42 *inst/tinytest/testRcppClass/src/init.c 5e17501af84c7deb94e69c8c48abc6dc *inst/tinytest/testRcppClass/src/rcpp_hello_world.cpp 5c03d3d1426cf6886a0f6f6c412bb456 *inst/tinytest/testRcppClass/src/rcpp_hello_world.h 0abb0d55f1edc5ddb19ca87ed5c370f1 *inst/tinytest/testRcppClass/src/rcpp_module.cpp 3326bf4e52a561d08f9aa1370333222b *inst/tinytest/testRcppClass/src/stdVector.cpp f369e8eabd84792764737850dc9cf599 *inst/tinytest/testRcppClass/tests/classes.R 55a2cc182d8bdab7df8367bb2c9ae4f1 *inst/tinytest/testRcppInterfaceExporter/DESCRIPTION caccac1441b38bc3b9d91f9e189b1d68 *inst/tinytest/testRcppInterfaceExporter/NAMESPACE 052892f806ecd5542358fd7ae3bb58d9 *inst/tinytest/testRcppInterfaceExporter/R/RcppExports.R f9c87d177bece784bca40b2294329568 *inst/tinytest/testRcppInterfaceExporter/R/exporter.R cdb9489e21b94623f0f1e7d4af8ec157 *inst/tinytest/testRcppInterfaceExporter/inst/include/testRcppInterfaceExporter.h 1cbd306e27aed3fcb7b5fbc34d42b39d *inst/tinytest/testRcppInterfaceExporter/inst/include/testRcppInterfaceExporter_RcppExports.h ae4a8309d7807432ae8e1b507132acb3 *inst/tinytest/testRcppInterfaceExporter/src/RcppExports.cpp 0805a3830147dedf4a37a91f9ad66a4d *inst/tinytest/testRcppInterfaceExporter/src/exporter.cpp 53dfff77ccb443103f44fb52eea3187b *inst/tinytest/testRcppInterfaceExporter/src/unwound.h d4ceb27b690d25e3bf791340e1082ede *inst/tinytest/testRcppInterfaceUser/DESCRIPTION 98aef5f5fafb61bfb9c2e3687ea7cd74 *inst/tinytest/testRcppInterfaceUser/NAMESPACE a7632eb2a8e768dc6305ac25e4d1c666 *inst/tinytest/testRcppInterfaceUser/R/user.R d41d8cd98f00b204e9800998ecf8427e *inst/tinytest/testRcppInterfaceUser/src/config.h a195376bccd32edf2ec234585cdd19f1 *inst/tinytest/testRcppInterfaceUser/src/unwound.h 44a229bee1d2fd44365e82d64aff2e23 *inst/tinytest/testRcppInterfaceUser/src/user.cpp c0e76426243757398223031c7c4c46b0 *inst/tinytest/testRcppInterfaceUser/tests/tests.R fb4466d7edc9f03ab23dc0d557e49145 *inst/tinytest/testRcppModule/DESCRIPTION add4aaed2d306765ce493922461f3a55 *inst/tinytest/testRcppModule/NAMESPACE bd40b50ea592b9c3c0cfe79de3f6eb1d *inst/tinytest/testRcppModule/R/rcpp_hello_world.R 81dadeb632a55b8ce2ad71cf37d2c1ce *inst/tinytest/testRcppModule/R/zzz.R 0371f14c3812cd1a564488ca96b11ca2 *inst/tinytest/testRcppModule/man/Rcpp_modules_examples.Rd 2deeefcb97dc4727ba42f47594ad3be8 *inst/tinytest/testRcppModule/man/rcpp_hello_world.Rd 079d3f03a16107fd9ef8fe40b6175a9e *inst/tinytest/testRcppModule/man/testRcppModule-package.Rd 1999f8a3ad18e75c899c980902146d80 *inst/tinytest/testRcppModule/src/Num.cpp d1c8b83cdba82518ad248f4612e22802 *inst/tinytest/testRcppModule/src/init.c 5e17501af84c7deb94e69c8c48abc6dc *inst/tinytest/testRcppModule/src/rcpp_hello_world.cpp 5c03d3d1426cf6886a0f6f6c412bb456 *inst/tinytest/testRcppModule/src/rcpp_hello_world.h 30f4072a33ca51c385cba14d8c41e7fc *inst/tinytest/testRcppModule/src/rcpp_module.cpp 974ce7cbf35e70ee51ee2f338d1a47ed *inst/tinytest/testRcppModule/src/stdVector.cpp af70d56c91a91ed55fc4da6c1f8b7ca5 *inst/tinytest/testRcppModule/tests/modules.R c83d5e7e43bdf9d149e62f8717facf73 *inst/tinytest/testRcppPackage/DESCRIPTION f46e0bbc90d649eaed05e1a1f953645d *inst/tinytest/testRcppPackage/NAMESPACE 86700d82a2395c2d7c34f21ffb7dcaa4 *inst/tinytest/testRcppPackage/R/rcpp_hello_world.R 8a4012c68853de0e7ddd4ec8dd3ef9da *inst/tinytest/testRcppPackage/man/testRcppPackage-package.Rd c980624db12b714ac2ec6bb7740c3030 *inst/tinytest/testRcppPackage/src/rcpp_hello_world.cpp 3fc7d87c655d7c58790b18dadbf17462 *inst/tinytest/testRcppPackage/src/rcpp_hello_world.h d4d4b13e8e48f3d2dff079fa0cae4db2 *inst/tinytest/test_algorithm.R d43f4463ec22a001f10f70e5968b741e *inst/tinytest/test_as.R 4622138c9061a54bded602a3fa89700e *inst/tinytest/test_attribute_package.R 6fafd86f9d6036ddeec256f6520940fb *inst/tinytest/test_attributes.R 645c61b59b44cf4a7d0a8935c94f30b8 *inst/tinytest/test_binary_package.R 5c61d77db502333de43ef63ab5542947 *inst/tinytest/test_client_package.R 6972e7398a0316ee9378d0235a98193e *inst/tinytest/test_coerce.R f848412bd201674571166f59141ead32 *inst/tinytest/test_dataframe.R 5d8938f1a0dd193080a0dd858aace479 *inst/tinytest/test_date.R f7020772ec2f52bca37aa52f328e8a4a *inst/tinytest/test_dispatch.R 37c878dba3a8c6ee4a512d8ae49d0510 *inst/tinytest/test_embedded_r.R 0bfe887104fa049afec792eb9e1d38ee *inst/tinytest/test_environments.R 8d0384378c1530ae2651ed30077c3849 *inst/tinytest/test_exceptions.R d6b632cbcf1d0d2a809789a850393f04 *inst/tinytest/test_exceptions_nocall.R 6592b542414d9978e3b1c899e0966638 *inst/tinytest/test_expose_class.R 2659ca40245f5942186d612cc050290e *inst/tinytest/test_function.R a979bf54492367431865c051efc150ca *inst/tinytest/test_global_rostream.R f98648470bc21b3fdbb3176e90f45129 *inst/tinytest/test_interface.R 9fcdc77199f2adc16ddaab74ede5c15f *inst/tinytest/test_internal_function.R b1ec64c8809b5017cc83db4e63bb23e7 *inst/tinytest/test_internal_function_cpp11.R 6f3de256ae47895bab7356f1d5db3532 *inst/tinytest/test_language.R f3df4a9477700c9773503b0d72cb9f38 *inst/tinytest/test_listof.R 642a072d490f3adf9ad7ccdc0b583c8c *inst/tinytest/test_matrix.R d820e9d99c8361bb9bcdff1df8748415 *inst/tinytest/test_misc.R 3b74e9c0f70c24ec455b8325bd575ad1 *inst/tinytest/test_modref.R c4b1132390df294c71724513bbcb329c *inst/tinytest/test_module.R 4f1cb95ff3231714571275b5f60c21cc *inst/tinytest/test_module_client_package.R 8fa4cb9335b9239ffce495337cbbe4b4 *inst/tinytest/test_na.R 350f50b10fda4680f6416833c8459113 *inst/tinytest/test_packageversion.R 50ac8801171cadb6ce7535680e3d7b4b *inst/tinytest/test_quickanddirty.R a6e775e8658b97f5e1d0414789f76a08 *inst/tinytest/test_rcpp_package_skeleton.R 12824f997493028fb75fb416fb4899bd *inst/tinytest/test_reference.R bf9528a41d909d19eda20947fe73d042 *inst/tinytest/test_rmath.R 23cccaef77d1c7188a384e5e6400505e *inst/tinytest/test_robject.R ec2b5b9cab31cafb4b2cbdef00cd89e3 *inst/tinytest/test_s4.R 0bd9a05a2ebcfc708aed3911d21a6dc7 *inst/tinytest/test_stack.R 5f3c73c9a10dd378a82d16ed7224f541 *inst/tinytest/test_stats.R d164383dd85501e99acb936ee66210a7 *inst/tinytest/test_string.R 3d9e890abd6a080315b84b99d6ed3843 *inst/tinytest/test_subset.R 90aed58d095a7017f60ea5498b103a88 *inst/tinytest/test_sugar.R eea3406aec4fe65cae71db5baa9a0b51 *inst/tinytest/test_sugar_var.R 46dcee8e76f26d5103efa5ad09441892 *inst/tinytest/test_support.R 9a97f20a6edeb3f2d7184ed909f70958 *inst/tinytest/test_system.R 44d3b675e624e692463ae9e9fe2776d0 *inst/tinytest/test_table.R d06e982e043a66d6dc372dd98fc7c36e *inst/tinytest/test_vector.R 6a724a81b5a9281e7777b16ada40ac39 *inst/tinytest/test_vector_old.R 00c6d79e911c979b8b184fa6c946fe9a *inst/tinytest/test_wrap.R daae893ce0886eccb852f34104884837 *inst/tinytest/test_wstring.R 5a3f1319ed569fd1f541dba428f9b7b7 *inst/tinytest/test_xptr.R 8e5b008afb149e5d2a53db37ece02775 *man/CppClass-class.Rd 0014f801734709bb479effdecc7b4718 *man/CppConstructor-class.Rd 0f6f6dd743da70147b0c2cac5c912ecb *man/CppField-class.Rd 7bd877824ff53185640a667392af41b2 *man/CppFunction-class.Rd 14c82eb310974beb4b904dcdc1617433 *man/CppObject-class.Rd 66e02f05536e2310d9e803ad3c874db7 *man/CppOverloadedMethods-class.Rd 4c34de06399c41644dfc380bb2f05a8d *man/DollarNames-methods.Rd 3088b043e8aab6cb3309701de2a8402f *man/Module-class.Rd 6161ec45d82f546757f7d02d1545675a *man/Module.Rd 42b39f5fc4290684199188c80a58ff9a *man/Rcpp-deprecated.Rd 2d49a16c0b7aae09482f3249dd93b2f1 *man/Rcpp-internal.Rd d6b6c655ad4be529d1787a5594d6aacb *man/Rcpp-package.Rd caf95a4016058ed94cacd73a11fd9925 *man/Rcpp.package.skeleton.Rd 5e22a0887ef6458d266f5a3ba7388ddc *man/Rcpp.plugin.maker.Rd 8c9df710945f7e4367c67b98c7172e67 *man/RcppLdFlags.Rd 277c9602f9273954b91ece7873667d11 *man/RcppUnitTests.Rd cdfd54981ce589dcfaf30019dfa6b95b *man/compileAttributes.Rd 6d563c1b68971237af02edcab85370a8 *man/compilerCheck.Rd e27c53a090cd857b3b53815841709f81 *man/cppFunction.Rd 01489ee8b81490b3516fee28615d461b *man/demangle.Rd 2c0fc00c864631092fe37dfc95b8a21d *man/dependsAttribute.Rd f0e45ce1b304a89586becbae18e20135 *man/evalCpp.Rd bef1d268eb1652a7cc3b15d5f691b6e8 *man/exportAttribute.Rd 01cbef50e7820a40e65d410ab4ce6d2e *man/exposeClass.Rd 236811309af8821f7e23dfc16f9a8d41 *man/formals.Rd ee26bc930a1bff02c8664c0e51bd46da *man/getRcppVersion.Rd 708280bfbc3f6dc6d8cf76fe2a2afd0a *man/interfacesAttribute.Rd 25e1ffdc750d2f2778b38919c098c9cc *man/loadModule.Rd 92c309f1d37426d2e2b4737f99bd75af *man/loadRcppModules-deprecated.Rd dd3b9b7596f51706f291dce032bfdb5c *man/pluginsAttribute.Rd adf9afe6c945bc84505583d9e07bad49 *man/populate.Rd 8e8411de016d9bc94dc1d9585e660d34 *man/registerPlugin.Rd ed0b08b15ead789f84e83ba46985a702 *man/setRcppClass.Rd 53e0cd847f1775e36539946d8112cf69 *man/sourceCpp.Rd 73e9e048a7c5003477f67089bf5d609c *src/Makevars 73e9e048a7c5003477f67089bf5d609c *src/Makevars.win 6ae726fde82e15f3777d25649aa8c181 *src/api.cpp 49a2f74beaa4ab2a2688477e9fa961bf *src/attributes.cpp 6c6e3f9a22510b848ff819063bad67bd *src/barrier.cpp 85a8a53c535e4c986f02c427b5e7b85e *src/date.cpp eef4c2f0e1abd787b8fd62d289ed5961 *src/internal.h 4eeaedc1e555103025f1feeaee299538 *src/module.cpp 545982e58b067742919490cc23d62905 *src/rcpp_init.cpp 37a2a0606ac4ed8ce8fbc9e71287e715 *tests/tinytest.R 2baf167ce452976b0fcb43e44f566af7 *vignettes/Rcpp-FAQ.Rnw 887250b7e0675b4a70d6eb1a4689080c *vignettes/Rcpp-attributes.Rnw 37f50a136d1350e8e864c9265cc88ad8 *vignettes/Rcpp-extending.Rnw 90eade7bfffa82f250510759bc9a7f36 *vignettes/Rcpp-introduction.Rnw e6cf1d12ce4e3a2fed6eddf6290d393f *vignettes/Rcpp-jss-2011.Rnw 4524c2761e07e170f681181c2e62eb05 *vignettes/Rcpp-libraries.Rnw a96bcf4153b795bff19ddc36a17ca435 *vignettes/Rcpp-modules.Rnw 835d0e2dd365e4621663bd03ae219758 *vignettes/Rcpp-package.Rnw d76adfdc4e68c69c5ff632e234db6a85 *vignettes/Rcpp-quickref.Rnw 929a1aad762b7354b6875a35093ec477 *vignettes/Rcpp-sugar.Rnw c633371e5d82fb25d82acbc10a610ba3 *vignettes/pdf/Rcpp-FAQ.pdf 53f6cb43783567e8bd9f14a97c5a927b *vignettes/pdf/Rcpp-attributes.pdf 5a4324a50ee8a2ab30fe93a75d584b0d *vignettes/pdf/Rcpp-extending.pdf acda7060a297c2bc8720bd135801e275 *vignettes/pdf/Rcpp-introduction.pdf 4400de72176df827637acd1e4315871b *vignettes/pdf/Rcpp-jss-2011.pdf 974a04437c2e5a37cb4038a7b4ead963 *vignettes/pdf/Rcpp-libraries.pdf 9fd40949ecc0c8f1ed00a081c929c90b *vignettes/pdf/Rcpp-modules.pdf c67888daace8c97d145869b53d865a1d *vignettes/pdf/Rcpp-package.pdf 6d3516230be6a8b4c4936c9fa7d585ef *vignettes/pdf/Rcpp-quickref.pdf 499e8a2f4ae21c70a88c2ed8cbcd029d *vignettes/pdf/Rcpp-sugar.pdf Rcpp/R/0000755000176200001440000000000015014017044011353 5ustar liggesusersRcpp/R/RcppClass.R0000644000176200001440000001470514070703457013412 0ustar liggesusers# Copyright (C) 2010 - 2021 John Chambers, Dirk Eddelbuettel and Romain Francois # # This file is part of Rcpp. # # Rcpp is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Rcpp is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Rcpp. If not, see . setRcppClass <- function(Class, CppClass, module, fields = list(), contains = character(), methods = list(), saveAs = Class, where = topenv(parent.frame()), ...) { myCall <- match.call() myCall[[1]] <- quote(Rcpp::loadRcppClass) if (!missing(module) && moduleIsLoaded(module, where)) # eval now eval.parent(myCall) # #nocov else { f <- function(NS)NULL myCall$where = as.name("NS") body(f, where) <- myCall setLoadAction(f, where = where) } } loadRcppClass <- function(Class, CppClass = Class, module = paste0("class_",Class), fields = character(), contains = character(), methods = list(), saveAs = Class, where = topenv(parent.frame()), ...) { if(isBotchedSession()) { value <- setRefClass(Class, fields = fields, methods = methods, contains = contains, where = where, ...) # kludge -- see loadModule.R #nocov start if(is.character(saveAs) && length(saveAs) == 1) assign(saveAs, value, envir = where) return(value) # #nocov end } mod <- loadModule(module, NULL, env = where, loadNow = TRUE) storage <- get("storage", envir = as.environment(mod)) if(exists(Class, envir = storage, inherits = FALSE)) { cppclassinfo <- get(Class, envir = storage) if(!is(cppclassinfo, "C++Class")) stop(gettextf("Object \"%s\" in module \"%s\" is not a C++ class description", Class, module)) # #nocov } else stop(gettextf("No object \"%s\" in module \"%s\"", Class, module)) # #nocov allmethods <- .makeCppMethods(methods, cppclassinfo, where) allfields <- .makeCppFields(fields, cppclassinfo, where) value <- setRefClass(Class, fields = allfields, contains = c(contains, "RcppClass"), methods = allmethods, where=where, ...) ## declare the fields and methods to shut up codetools ## the R level fields and methods were declared by setRefClass ## but we declare them again; globalVariables() applies unique() if(exists("globalVariables", envir = asNamespace("utils"))) # >=2.15.1 utils::globalVariables(c(names(allfields), names(allmethods)), where) if(is.character(saveAs) && length(saveAs) == 1) assign(saveAs, value, envir = where) value } .makeCppMethods <- function(methods, cppclassinfo, env) { cppMethods <- names(cppclassinfo@methods) newMethods <- names(methods) for(what in cppMethods[! cppMethods %in% newMethods]) methods[[what]] <- eval(substitute( function(...) .CppObject$WHAT(...), list(WHAT = as.name(what))), env) methods } .makeFieldsList <- function(fields) { fnames <- allNames(fields) any_s <- !nzchar(fnames) fnames[any_s] <- fields[any_s] fields[any_s] <- "ANY" fields <- as.list(fields) names(fields) <- fnames fields } .makeCppFields <- function(fields, cppclassinfo, env) { if(is.character(fields)) fields <- .makeFieldsList(fields) cppFields <- names(cppclassinfo@fields) newFields <- names(fields) for(what in cppFields[! cppFields %in% newFields]) fields[[what]] <- eval(substitute( function(value) if(missing(value)) .CppObject$WHAT else .CppObject$WHAT <- value, list(WHAT = as.name(what))), env) ## insert the generator and cppclass def as constants cppgenerator <- getRefClass(cppclassinfo) fields[[".CppClassDef"]] <- eval(substitute( function(value) if(missing(value)) DEF else stop("this field is a constant"), list(DEF = cppclassinfo)), env) fields[[".CppGenerator"]] <- eval(substitute( function(value) if(missing(value)) DEF else stop("this field is a constant"), list(DEF = cppgenerator)), env) fields } .RcppClass <- setRefClass("RcppClass", methods = list( initialize = function(...){ args <- list(...) argNames <- allNames(args) cppArgs <- !nzchar(argNames) .CppObject <<- do.call(.CppGenerator$new, args[cppArgs]) for(i in seq_along(args)[!cppArgs]) field(argNames[[i]], args[[i]]) # #nocov } ), fields = list( .CppObject = "C++Object" ), contains = "VIRTUAL" ) .RcppClass$methods(show = function () { cat("Rcpp class object of class ", classLabel(class(.self)), # #nocov start "\n", sep = "") fields <- names(.refClassDef@fieldClasses) if(".CppObject" %in% fields) { cat("\n") methods::show(field(".CppObject")) cat("\n") } fields <- fields[ ! fields %in% c(".CppObject", ".CppClassDef", ".CppGenerator")] for (fi in fields) { cat("Field \"", fi, "\":\n", sep = "") methods::show(field(fi)) } }, objectPointer = function() .CppObject$.pointer # #nocov end ) Rcpp/R/RcppLdpath.R0000644000176200001440000000730414470465200013551 0ustar liggesusers# Copyright (C) 2010 - 2021 Dirk Eddelbuettel and Romain Francois # # This file is part of Rcpp. # # Rcpp is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Rcpp is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Rcpp. If not, see . ## make sure system.file returns an absolute path Rcpp.system.file <- function(...){ tools::file_path_as_absolute( base::system.file( ..., package = "Rcpp" ) ) } ## quote path if non-standard characters are used Rcpp.quoteNonStandard <- function(path) { ## On unix, check if path has only characters that do not need quoting noquote <- .Platform$OS.type == "unix" && grepl("^[[:alnum:]/._~+@%-]*$", path) ## If no quoting needed return unchanged else quote input if (noquote) path else shQuote(path) } ## Use R's internal knowledge of path settings to find the lib/ directory ## plus optinally an arch-specific directory on system building multi-arch RcppLdPath <- function() { #.Deprecated(msg=paste("This function is now deprecated as it has not", # "been needed since 2013.")) "" } ## Provide linker flags -- i.e. -L/path/to/libRcpp -- as well as an ## optional rpath call needed to tell the Linux dynamic linker about the ## location. This is not needed on OS X where we encode this as library ## built time (see src/Makevars) or Windows where we use a static library ## Updated Jan 2010: We now default to static linking but allow the use ## of rpath on Linux if static==FALSE has been chosen ## Note that this is probably being called from LdFlags() ## Updated Nov 2013: We no longer build a library. This should be deprecated. RcppLdFlags <- function() { #.Deprecated(msg=paste("This function is now deprecated as it has not", # "been needed since 2013.")) "" } # indicates if Rcpp was compiled with GCC >= 4.3 canUseCXX0X <- function() { TRUE } # .Call( "canUseCXX0X", PACKAGE = "Rcpp" ) ## Provide compiler flags -- i.e. -I/path/to/Rcpp.h RcppCxxFlags <- function(cxx0x=FALSE) { path <- Rcpp.system.file( "include" ) if (.Platform$OS.type=="windows") { path <- asBuildPath(path) # #nocov } paste0('-I', Rcpp.quoteNonStandard(path)) } ## Shorter names, and call cat() directly ## CxxFlags defaults to no using c++0x extensions are these are considered non-portable CxxFlags <- function(cxx0x=FALSE) { #.Deprecated(msg=paste("This function is now deprecated as R uses minimally", # "viable compilers om all platforme.")) cat(RcppCxxFlags(cxx0x=cxx0x)) # #nocov } ## LdFlags defaults to static linking on the non-Linux platforms Windows and OS X LdFlags <- function() { cat(RcppLdFlags()) } # capabilities RcppCapabilities <- capabilities <- function() .Call( rcpp_capabilities ) # compile, load and call the cxx0x.c script to identify whether # the compiler is GCC >= 4.3 RcppCxx0xFlags <- function() { #.Deprecated(msg=paste("This function is now deprecated as R uses minimally", # "viable compilers om all platforme.")) script <- Rcpp.system.file( "discovery", "cxx0x.R" ) # #nocov start flag <- capture.output( source( script ) ) flag } Cxx0xFlags <- function() { cat(RcppCxx0xFlags()) # #nocov end } Rcpp/R/Attributes.R0000644000176200001440000013751015014017044013633 0ustar liggesusers # Copyright (C) 2012 - 2022 JJ Allaire, Dirk Eddelbuettel and Romain Francois # Copyright (C) 2023 - 2024 JJ Allaire, Dirk Eddelbuettel, Romain Francois and Iñaki Ucar # # This file is part of Rcpp. # # Rcpp is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Rcpp is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Rcpp. If not, see . # Source C++ code from a file sourceCpp <- function(file = "", code = NULL, env = globalenv(), embeddedR = TRUE, rebuild = FALSE, cacheDir = getOption("rcpp.cache.dir", tempdir()), cleanupCacheDir = FALSE, showOutput = verbose, verbose = getOption("verbose"), dryRun = FALSE, windowsDebugDLL = FALSE, echo = TRUE) { # use an architecture/version specific subdirectory of the cacheDir # (since cached dynlibs can now perist across sessions we need to be # sure to invalidate them when R or Rcpp versions change) cacheDir <- path.expand(cacheDir) cacheDir <- .sourceCppPlatformCacheDir(cacheDir) cacheDir <- normalizePath(cacheDir) # resolve code into a file if necessary. also track the working # directory to source the R embedded code chunk within if (!missing(code)) { rWorkingDir <- getwd() file <- tempfile(fileext = ".cpp", tmpdir = cacheDir) con <- file(file, open = "w") writeLines(code, con) close(con) } else { rWorkingDir <- normalizePath(dirname(file)) } # resolve the file path file <- normalizePath(file, winslash = "/") # error if the file extension isn't one supported by R CMD SHLIB if (! tools::file_ext(file) %in% c("cc", "cpp")) { # #nocov start stop("The filename '", basename(file), "' does not have an ", "extension of .cc or .cpp so cannot be compiled.") } # #nocov end # validate that there are no spaces in the path on windows if (.Platform$OS.type == "windows") { # #nocov start if (grepl(' ', basename(file), fixed=TRUE)) { stop("The filename '", basename(file), "' contains spaces. This ", "is not permitted.") } } else { if (windowsDebugDLL) { if (verbose) { message("The 'windowsDebugDLL' toggle is ignored on ", "non-Windows platforms.") } windowsDebugDLL <- FALSE # now we do not need to deal with OS choice below } # #nocov end } # get the context (does code generation as necessary) context <- .Call("sourceCppContext", PACKAGE="Rcpp", file, code, rebuild, cacheDir, .Platform) # perform a build if necessary if (context$buildRequired || rebuild) { # print output for verbose mode if (verbose) .printVerboseOutput(context) # #nocov # variables used to hold completed state (passed to completed hook) succeeded <- FALSE output <- NULL # build dependency list depends <- .getSourceCppDependencies(context$depends, file) # validate packages (error if package not found) .validatePackages(depends, context$cppSourceFilename) # temporarily modify environment for the build envRestore <- .setupBuildEnvironment(depends, context$plugins, file) # temporarily setwd to build directory cwd <- getwd() setwd(context$buildDirectory) # call the onBuild hook. note that this hook should always be called # after .setupBuildEnvironment so subscribers are able to examine # the build environment fromCode <- !missing(code) if (!.callBuildHook(context$cppSourcePath, fromCode, showOutput)) { .restoreEnvironment(envRestore) # #nocov start setwd(cwd) return (invisible(NULL)) } # #nocov end # on.exit handler calls hook and restores environment and working dir on.exit({ if (!succeeded) .showBuildFailureDiagnostics() # #nocov .callBuildCompleteHook(succeeded, output) setwd(cwd) .restoreEnvironment(envRestore) }) # unload and delete existing dylib if necessary if (file.exists(context$previousDynlibPath)) { # #nocov start try(silent=TRUE, dyn.unload(context$previousDynlibPath)) file.remove(context$previousDynlibPath) } # #nocov end # grab components we need to build command r <- file.path(R.home("bin"), "R") lib <- context$dynlibFilename deps <- context$cppDependencySourcePaths src <- context$cppSourceFilename # prepare the command (output if we are in showOutput mode) args <- c( "CMD", "SHLIB", if (windowsDebugDLL) "-d", if (rebuild) "--preclean", if (dryRun) "--dry-run", "-o", shQuote(lib), if (length(deps)) paste(shQuote(deps), collapse = " "), shQuote(src) ) if (showOutput) cat(paste(c(r, args), collapse = " "), "\n") # #nocov # execute the build -- suppressWarnings b/c when showOutput = FALSE # we are going to explicitly check for an error and print the output so <- if (showOutput) "" else TRUE result <- suppressWarnings(system2(r, args, stdout = so, stderr = so)) # check build results if(!showOutput) { # capture output output <- result attributes(output) <- NULL # examine status status <- attr(result, "status") if (!is.null(status)) { cat(result, sep = "\n") # #nocov start succeeded <- FALSE stop("Error ", status, " occurred building shared library.") } else if (!file.exists(context$dynlibFilename)) { cat(result, sep = "\n") succeeded <- FALSE stop("Error occurred building shared library.") # #nocov end } else { succeeded <- TRUE } } else if (!identical(as.character(result), "0")) { # #nocov start succeeded <- FALSE stop("Error ", result, " occurred building shared library.") } else { succeeded <- TRUE # #nocov end } } else { cwd <- getwd() on.exit({ setwd(cwd) }) if (verbose) # #nocov start cat("\nNo rebuild required (use rebuild = TRUE to ", "force a rebuild)\n\n", sep="") } # return immediately if this was a dry run if (dryRun) return(invisible(NULL)) # #nocov end # load the module if we have exported symbols if (length(context$exportedFunctions) > 0 || length(context$modules) > 0) { # remove existing objects of the same name from the environment exports <- c(context$exportedFunctions, context$modules) removeObjs <- exports[exports %in% ls(envir = env, all.names = T)] remove(list = removeObjs, envir = env) # source the R script scriptPath <- file.path(context$buildDirectory, context$rSourceFilename) source(scriptPath, local = env) } else if (getOption("rcpp.warnNoExports", default=TRUE)) { # #nocov start warning("No Rcpp::export attributes or RCPP_MODULE declarations ", "found in source") # #nocov end } # source the embeddedR if (embeddedR && (length(context$embeddedR) > 0)) { srcConn <- textConnection(context$embeddedR) setwd(rWorkingDir) # will be reset by previous on.exit handler source(file = srcConn, local = env, echo = echo) } # cleanup the cache dir if requested if (cleanupCacheDir) cleanupSourceCppCache(cacheDir, context$cppSourcePath, context$buildDirectory) # #nocov # return (invisibly) a list containing exported functions and modules invisible(list(functions = context$exportedFunctions, modules = context$modules, cppSourcePath = context$cppSourcePath, buildDirectory = context$buildDirectory)) } # Cleanup a directory used as the cache for a sourceCpp compilation. This will # remove all files from the cache directory that aren't a result of the # compilation that yielded the passed buildDirectory. cleanupSourceCppCache <- function(cacheDir, cppSourcePath, buildDirectory) { # normalize cpp source path and build directory # #nocov start cppSourcePath <- normalizePath(cppSourcePath) buildDirectory <- normalizePath(buildDirectory) # determine the parent dir that was used for the compilation then collect all the # *.cpp files and subdirectories therein cacheFiles <- list.files(cacheDir, pattern = glob2rx("*.cpp"), recursive = FALSE, full.names = TRUE) cacheFiles <- c(cacheFiles, list.dirs(cacheDir, recursive = FALSE, full.names = TRUE)) cacheFiles <- normalizePath(cacheFiles) # determine the list of tiles that were not yielded by the passed sourceCpp # result and remove them oldCacheFiles <- cacheFiles[!cacheFiles %in% c(cppSourcePath, buildDirectory)] unlink(oldCacheFiles, recursive = TRUE) # #nocov end } # Define a single C++ function cppFunction <- function(code, depends = character(), plugins = character(), includes = character(), env = parent.frame(), rebuild = FALSE, cacheDir = getOption("rcpp.cache.dir", tempdir()), showOutput = verbose, verbose = getOption("verbose"), echo = TRUE) { # process depends if (!is.null(depends) && length(depends) > 0) { # #nocov start depends <- paste(depends, collapse=", ") scaffolding <- paste("// [[Rcpp::depends(", depends, ")]]", sep="") scaffolding <- c(scaffolding, "", .linkingToIncludes(depends, FALSE), recursive=TRUE) # #nocov end } else { scaffolding <- "#include " } # process plugins if (!is.null(plugins) && length(plugins) > 0) { plugins <- paste(plugins, sep=", ") # #nocov start pluginsAttrib <- paste("// [[Rcpp::plugins(", plugins, ")]]", sep="") scaffolding <- c(scaffolding, pluginsAttrib) # append plugin includes for (pluginName in plugins) { plugin <- .findPlugin(pluginName) settings <- plugin() scaffolding <- c(scaffolding, settings$includes, recursive=TRUE) } # #nocov end } # remainder of scaffolding scaffolding <- c(scaffolding, "", "using namespace Rcpp;", "", includes, "// [[Rcpp::export]]", recursive = T) # prepend scaffolding to code code <- paste(c(scaffolding, code, recursive = T), collapse="\n") # print the generated code if we are in verbose mode if (verbose) { # #nocov start cat("\nGenerated code for function definition:", "\n--------------------------------------------------------\n\n") cat(code) cat("\n") } # source cpp into specified environment. if env is set to NULL # then create a new one (the caller can get a hold of the function # via the return value) if (is.null(env)) env <- new.env() # #nocov end exported <- sourceCpp(code = code, env = env, rebuild = rebuild, cacheDir = cacheDir, showOutput = showOutput, verbose = verbose, echo = echo) # verify that a single function was exported and return it if (length(exported$functions) == 0) stop("No function definition found") # #nocov else if (length(exported$functions) > 1) stop("More than one function definition") # #nocov else { functionName <- exported$functions[[1]] invisible(get(functionName, env)) } } .type_manipulate <- function( what = "DEMANGLE", class = NULL ) { function( type = "int", ... ){ # #nocov start code <- sprintf( ' SEXP manipulate_this_type(){ typedef %s type ; return wrap( %s(type) ) ; }', type, what ) dots <- list( code, ... ) dots[["env"]] <- environment() manipulate_this_type <- do.call( cppFunction, dots ) res <- manipulate_this_type() if( ! is.null(class) ){ class(res) <- class } res } # #nocov end } demangle <- .type_manipulate( "DEMANGLE" ) sizeof <- .type_manipulate( "sizeof", "bytes" ) print.bytes <- function( x, ...){ # #nocov start writeLines( sprintf( "%d bytes (%d bits)", x, 8 * x ) ) invisible( x ) } # #nocov end # Evaluate a simple c++ expression evalCpp <- function(code, depends = character(), plugins = character(), includes = character(), rebuild = FALSE, cacheDir = getOption("rcpp.cache.dir", tempdir()), showOutput = verbose, verbose = getOption( "verbose" ) ){ # #nocov start code <- sprintf( "SEXP get_value(){ return wrap( %s ) ; }", code ) env <- new.env() cppFunction(code, depends = depends, plugins = plugins, includes = includes, env = env, rebuild = rebuild, cacheDir = cacheDir, showOutput = showOutput, verbose = verbose ) fun <- env[["get_value"]] fun() # #nocov end } areMacrosDefined <- function(names, depends = character(), includes = character(), rebuild = FALSE, showOutput = verbose, verbose = getOption( "verbose" ) ){ code <- sprintf( ' LogicalVector get_value(){ return LogicalVector::create( %s ) ; }', paste( sprintf( ' _["%s"] = #if defined(%s) true #else false #endif ', names, names ), collapse = ",\n" ) ) env <- new.env() cppFunction(code, depends = depends, includes = includes, env = env, rebuild = rebuild, showOutput = showOutput, verbose = verbose ) fun <- env[["get_value"]] fun() } # Scan the source files within a package for attributes and generate code # based on the attributes. compileAttributes <- function(pkgdir = ".", verbose = getOption("verbose")) { # verify this is a package and read the DESCRIPTION to get it's name pkgdir <- normalizePath(pkgdir, winslash = "/") descFile <- file.path(pkgdir,"DESCRIPTION") if (!file.exists(descFile)) stop("pkgdir must refer to the directory containing an R package") # #nocov pkgDesc <- read.dcf(descFile)[1,] pkgname = .readPkgDescField(pkgDesc, "Package") depends <- c(.readPkgDescField(pkgDesc, "Depends", character()), .readPkgDescField(pkgDesc, "Imports", character()), .readPkgDescField(pkgDesc, "LinkingTo", character())) depends <- unique(.splitDepends(depends)) depends <- depends[depends != "R"] # check the NAMESPACE file to see if dynamic registration is enabled namespaceFile <- file.path(pkgdir, "NAMESPACE") if (!file.exists(namespaceFile)) stop("pkgdir must refer to the directory containing an R package") # #nocov pkgNamespace <- readLines(namespaceFile, warn = FALSE) registration <- any(grepl("^\\s*useDynLib.*\\.registration\\s*=\\s*TRUE.*$", pkgNamespace)) # determine source directory srcDir <- file.path(pkgdir, "src") if (!file.exists(srcDir)) return (FALSE) # #nocov # create R directory if it doesn't already exist rDir <- file.path(pkgdir, "R") if (!file.exists(rDir)) dir.create(rDir) # #nocov # remove the old RcppExports.R file unlink(file.path(rDir, "RcppExports.R")) # get a list of all source files cppFiles <- list.files(srcDir, pattern = "\\.((c(c|pp)?)|(h(pp)?))$", ignore.case = TRUE) # don't include RcppExports.cpp cppFiles <- setdiff(cppFiles, "RcppExports.cpp") # locale independent sort for stable output locale <- Sys.getlocale(category = "LC_COLLATE") Sys.setlocale(category = "LC_COLLATE", locale = "C") cppFiles <- sort(cppFiles) Sys.setlocale(category = "LC_COLLATE", locale = locale) # derive base names (will be used for modules) cppFileBasenames <- tools::file_path_sans_ext(cppFiles) # expend them to their full paths cppFiles <- file.path(srcDir, cppFiles) cppFiles <- normalizePath(cppFiles, winslash = "/") # generate the includes list based on LinkingTo. Specify plugins-only # because we only need as/wrap declarations linkingTo <- .readPkgDescField(pkgDesc, "LinkingTo") includes <- .linkingToIncludes(linkingTo, TRUE) # if a master include file or types file is in inst/include then use it typesHeader <- c(paste0(pkgname, "_types.h"), paste0(pkgname, "_types.hpp")) pkgHeader <- c(paste0(pkgname, ".h"), typesHeader) pkgHeaderPath <- file.path(pkgdir, "inst", "include", pkgHeader) pkgHeader <- pkgHeader[file.exists(pkgHeaderPath)] if (length(pkgHeader) > 0) { # #nocov start pkgInclude <- paste("#include \"../inst/include/", pkgHeader, "\"", sep="") includes <- c(pkgInclude, includes) } # #nocov end # if a _types file is in src then include it pkgHeader <- typesHeader pkgHeaderPath <- file.path(pkgdir, "src", pkgHeader) pkgHeader <- pkgHeader[file.exists(pkgHeaderPath)] if (length(pkgHeader) > 0) includes <- c(paste0("#include \"", pkgHeader ,"\""), includes) # #nocov # generate exports invisible(.Call("compileAttributes", PACKAGE="Rcpp", pkgdir, pkgname, depends, registration, cppFiles, cppFileBasenames, includes, verbose, .Platform)) } # setup plugins environment .plugins <- new.env() # built-in C++98 plugin .plugins[["cpp98"]] <- function() { if (getRversion() >= "3.4") # with recent R versions, R can decide list(env = list(USE_CXX98 = "yes")) else list(env = list(PKG_CXXFLAGS ="-std=c++98")) } # built-in C++11 plugin .plugins[["cpp11"]] <- function() { if (getRversion() >= "3.4") # with recent R versions, R can decide list(env = list(USE_CXX11 = "yes")) else if (getRversion() >= "3.1") # with recent R versions, R can decide list(env = list(USE_CXX1X = "yes")) else if (.Platform$OS.type == "windows") list(env = list(PKG_CXXFLAGS = "-std=c++0x")) else # g++-4.8.1 or later list(env = list(PKG_CXXFLAGS ="-std=c++11")) } # built-in C++11 plugin for older g++ compiler .plugins[["cpp0x"]] <- function() { list(env = list(PKG_CXXFLAGS ="-std=c++0x")) } ## built-in C++14 plugin for C++14 standard ## this is the default in g++-6.1 and later ## per https://gcc.gnu.org/projects/cxx-status.html#cxx14 .plugins[["cpp14"]] <- function() { if (getRversion() >= "3.4") # with recent R versions, R can decide list(env = list(USE_CXX14 = "yes")) else list(env = list(PKG_CXXFLAGS ="-std=c++14")) } # built-in C++1y plugin for C++14 and C++17 standard under development .plugins[["cpp1y"]] <- function() { list(env = list(PKG_CXXFLAGS ="-std=c++1y")) } # built-in C++17 plugin for C++17 standard (g++-6 or later) .plugins[["cpp17"]] <- function() { if (getRversion() >= "3.4") # with recent R versions, R can decide list(env = list(USE_CXX17 = "yes")) else list(env = list(PKG_CXXFLAGS ="-std=c++17")) } # built-in C++20 plugin for C++20 .plugins[["cpp20"]] <- function() { if (getRversion() >= "4.2") # with recent R versions, R can decide list(env = list(USE_CXX20 = "yes")) else list(env = list(PKG_CXXFLAGS ="-std=c++20")) } # built-in C++23 plugin for C++23 .plugins[["cpp23"]] <- function() { if (getRversion() >= "4.3") # with recent R versions, R can decide list(env = list(USE_CXX23 = "yes")) else list(env = list(PKG_CXXFLAGS ="-std=c++23")) } # built-in C++26 plugin for C++26 .plugins[["cpp26"]] <- function() { if (getRversion() >= "4.5") # with recent R versions, R can decide list(env = list(USE_CXX26 = "yes")) else list(env = list(PKG_CXXFLAGS ="-std=c++26")) } ## built-in C++1z plugin for C++17 standard under development ## note that as of Feb 2017 this is taken to be a moving target ## see https://gcc.gnu.org/projects/cxx-status.html .plugins[["cpp1z"]] <- function() { list(env = list(PKG_CXXFLAGS ="-std=c++1z")) } ## built-in C++2a plugin for g++ 8 and later ## cf https://gcc.gnu.org/projects/cxx-status.html as of Dec 2018 .plugins[["cpp2a"]] <- function() { list(env = list(PKG_CXXFLAGS ="-std=c++2a")) } ## built-in C++2b plugin for compilers without C++23 support .plugins[["cpp2b"]] <- function() { list(env = list(PKG_CXXFLAGS ="-std=c++2b")) } ## built-in OpenMP plugin .plugins[["openmp"]] <- function() { list(env = list(PKG_CXXFLAGS="-fopenmp", PKG_LIBS="-fopenmp")) } .plugins[["unwindProtect"]] <- function() { # nocov start warning("unwindProtect is enabled by default and this plugin is deprecated.", " It will be removed in a future version of Rcpp.") list() } # nocov end # register a plugin registerPlugin <- function(name, plugin) { .plugins[[name]] <- plugin # #nocov } # Take an empty function body and connect it to the specified external symbol sourceCppFunction <- function(func, isVoid, dll, symbol) { args <- names(formals(func)) body <- quote( CALL_PLACEHOLDER ( EXTERNALNAME, ARG ) )[ c(1:2, rep(3, length(args))) ] for (i in seq(along.with = args)) body[[i+2]] <- as.symbol(args[i]) body[[1L]] <- quote(.Call) body[[2L]] <- getNativeSymbolInfo(symbol, dll)$address if (isVoid) body <- call("invisible", body) body(func) <- body func } # Print verbose output .printVerboseOutput <- function(context) { # #nocov start cat("\nGenerated extern \"C\" functions", "\n--------------------------------------------------------\n") cat(context$generatedCpp, sep="") cat("\nGenerated R functions", "\n-------------------------------------------------------\n\n") cat(readLines(file.path(context$buildDirectory, context$rSourceFilename)), sep="\n") cat("\nBuilding shared library", "\n--------------------------------------------------------\n", "\nDIR: ", context$buildDirectory, "\n\n", sep="") } # #nocov end # Add LinkingTo dependencies if the sourceFile is in a package .getSourceCppDependencies <- function(depends, sourceFile) { # If the source file is in a package then simulate it being built # within the package by including it's LinkingTo dependencies, # the src directory (.), and the inst/include directory if (.isPackageSourceFile(sourceFile)) { # #nocov start descFile <- file.path(dirname(sourceFile), "..", "DESCRIPTION") DESCRIPTION <- read.dcf(descFile, all = TRUE) linkingTo <- .parseLinkingTo(DESCRIPTION$LinkingTo) unique(c(depends, linkingTo)) # #nocov end } else { depends } } # Check whether a source file is in a package .isPackageSourceFile <- function(sourceFile) { file.exists(file.path(dirname(sourceFile), "..", "DESCRIPTION")) } # Error if a package is not currently available .validatePackages <- function(depends, sourceFilename) { unavailable <- depends[!depends %in% .packages(all.available=TRUE)] if (length(unavailable) > 0) { # #nocov start stop(paste("Package '", unavailable[[1]], "' referenced from ", "Rcpp::depends in source file ", sourceFilename, " is not available.", sep=""), call. = FALSE) # #nocov end } } # Split the depends field of a package description .splitDepends <- function(x) { if (!length(x)) return(character()) # #nocov x <- unlist(strsplit(x, ",")) x <- sub("[[:space:]]+$", "", x) x <- unique(sub("^[[:space:]]*(.*)", "\\1", x)) sub("^([[:alnum:].]+).*$", "\\1", x) } # read a field from a named package description character vector .readPkgDescField <- function(pkgDesc, name, default = NULL) { if (name %in% names(pkgDesc)) pkgDesc[[name]] else default } # Get the inline plugin for the specified package (return NULL if none found) .getInlinePlugin <- function(package) { # #nocov start tryCatch(get("inlineCxxPlugin", asNamespace(package), inherits = FALSE), error = function(e) NULL) } # #nocov end # Lookup a plugin .findPlugin <- function(pluginName) { plugin <- .plugins[[pluginName]] if (is.null(plugin)) stop("Inline plugin '", pluginName, "' could not be found ", # #nocov start "within the Rcpp package. You should be ", "sure to call registerPlugin before using a plugin.") # #nocov end return(plugin) } # Setup the build environment based on the specified dependencies. Returns an # opaque object that can be passed to .restoreEnvironment to reverse whatever # changes that were made .setupBuildEnvironment <- function(depends, plugins, sourceFile) { # setup buildEnv <- list() linkingToPackages <- c("Rcpp") # merge values into the buildEnv mergeIntoBuildEnv <- function(name, value) { # protect against null or empty string if (is.null(value) || !nzchar(value)) return(invisible(NULL)) # if it doesn't exist already just set it if (is.null(buildEnv[[name]])) { buildEnv[[name]] <<- value } # if it's not identical then append else if (!identical(buildEnv[[name]], value)) { # #nocov buildEnv[[name]] <<- paste(buildEnv[[name]], value) # #nocov } else { # it already exists and it's the same value, this # likely means it's a flag-type variable so we # do nothing rather than appending it } } # update dependencies from a plugin setDependenciesFromPlugin <- function(plugin) { # get the plugin settings settings <- plugin() # merge environment variables pluginEnv <- settings$env for (name in names(pluginEnv)) { mergeIntoBuildEnv(name, pluginEnv[[name]]) } # capture any LinkingTo elements defined by the plugin linkingToPackages <<- unique(c(linkingToPackages, settings$LinkingTo)) } # add packages to linkingTo and introspect for plugins for (package in depends) { # #nocov start # add a LinkingTo for this package linkingToPackages <- unique(c(linkingToPackages, package)) # see if the package exports a plugin plugin <- .getInlinePlugin(package) if (!is.null(plugin)) setDependenciesFromPlugin(plugin) # #nocov end } # process plugins for (pluginName in plugins) { plugin <- .findPlugin(pluginName) setDependenciesFromPlugin(plugin) } # if there is no buildEnv from a plugin then use the Rcpp plugin if (length(buildEnv) == 0) { buildEnv <- inlineCxxPlugin()$env } # set CLINK_CPPFLAGS based on the LinkingTo dependencies buildEnv$CLINK_CPPFLAGS <- .buildClinkCppFlags(linkingToPackages) # add the source file's directory to the compilation srcDir <- dirname(sourceFile) srcDir <- asBuildPath(srcDir) buildDirs <- srcDir # if the source file is in a package then add inst/include if (.isPackageSourceFile(sourceFile)) { # #nocov start incDir <- file.path(dirname(sourceFile), "..", "inst", "include") incDir <- asBuildPath(incDir) buildDirs <- c(buildDirs, incDir) # #nocov end } # set CLINK_CPPFLAGS with directory flags dirFlags <- paste0('-I"', buildDirs, '"', collapse=" ") buildEnv$CLINK_CPPFLAGS <- paste(buildEnv$CLINK_CPPFLAGS, dirFlags, collapse=" ") # merge existing environment variables for (name in names(buildEnv)) mergeIntoBuildEnv(name, Sys.getenv(name)) # add cygwin message muffler buildEnv$CYGWIN = "nodosfilewarning" # on windows see if we need to add Rtools to the path # (don't do this for RStudio since it has it's own handling) if (identical(Sys.info()[['sysname']], "Windows") && !nzchar(Sys.getenv("RSTUDIO"))) { # #nocov start env <- .environmentWithRtools() for (var in names(env)) buildEnv[[var]] <- env[[var]] # #nocov end } # create restore list restore <- list() for (name in names(buildEnv)) restore[[name]] <- Sys.getenv(name, unset = NA) # set environment variables do.call(Sys.setenv, buildEnv) # return restore list return (restore) } # If we don't have the GNU toolchain already on the path then see if # we can find Rtools and add it to the path .environmentWithRtools <- function() { # #nocov start # Only proceed if we don't have the required tools on the path hasRtools <- nzchar(Sys.which("ls.exe")) && nzchar(Sys.which("gcc.exe")) if (!hasRtools) { # Read the Rtools registry key key <- NULL try(key <- utils::readRegistry("SOFTWARE\\R-core\\Rtools", hive = "HLM", view = "32-bit"), silent = TRUE) # If we found the key examine it if (!is.null(key)) { # Check version ver <- key$`Current Version` if (ver %in% (c("2.15", "2.16", "3.0", "3.1", "3.2", "3.3", "3.4"))) { # See if the InstallPath leads to the expected directories # R version 3.3.0 alpha (2016-03-25 r70378) isGcc49 <- ver %in% c("3.3", "3.4") && as.numeric(R.Version()$`svn rev`) >= 70378 rToolsPath <- key$`InstallPath` if (!is.null(rToolsPath)) { # add appropriate path entries path <- file.path(rToolsPath, "bin", fsep="\\") if (!isGcc49) path <- c(path, file.path(rToolsPath, "gcc-4.6.3", "bin", fsep="\\")) # if they all exist then return a list with modified # environment variables for the compilation if (all(file.exists(path))) { env <- list() path <- paste(path, collapse = .Platform$path.sep) env$PATH <- paste(path, Sys.getenv("PATH"), sep=.Platform$path.sep) if (isGcc49) { env$RTOOLS <- .rtoolsPath(rToolsPath) env$BINPREF <- file.path(env$RTOOLS, "mingw_$(WIN)/bin//", fsep = "/") } return(env) } } } } } return(NULL) # #nocov end } # Ensure that the path is suitable for passing as an RTOOLS # environment variable .rtoolsPath <- function(path) { path <- gsub("\\\\", "/", path) # #nocov start ## R 3.2.0 or later only: path <- trimws(path) .localsub <- function(re, x) sub(re, "", x, perl = TRUE) path <- .localsub("[ \t\r\n]+$", .localsub("^[ \t\r\n]+", path)) if (substring(path, nchar(path)) != "/") path <- paste(path, "/", sep="") path # #nocov end } # Build CLINK_CPPFLAGS from include directories of LinkingTo packages .buildClinkCppFlags <- function(linkingToPackages) { pkgCxxFlags <- NULL for (package in linkingToPackages) { packagePath <- find.package(package, NULL, quiet=TRUE) packagePath <- asBuildPath(packagePath) pkgCxxFlags <- paste(pkgCxxFlags, paste0('-I"', packagePath, '/include"'), collapse=" ") } return (pkgCxxFlags) } .restoreEnvironment <- function(restore) { # variables to reset setVars <- restore[!is.na(restore)] if (length(setVars)) do.call(Sys.setenv, setVars) # #nocov # variables to remove removeVars <- names(restore[is.na(restore)]) if (length(removeVars)) Sys.unsetenv(removeVars) } # Call the onBuild hook. This hook is provided so that external tools # can perform processing (e.g. lint checking or other diagnostics) prior # to the execution of a build). The showOutput flag is there to inform the # subscriber whether they'll be getting output in the onBuildComplete hook # or whether it will need to be scraped from the console (for verbose=TRUE) # The onBuild hook is always called from within the temporary build directory .callBuildHook <- function(file, fromCode, showOutput) { for (fun in .getHooksList("sourceCpp.onBuild")) { if (is.character(fun)) # #nocov start fun <- get(fun) # allow the hook to cancel the build (errors in the hook explicitly # do not cancel the build since they are unexpected bugs) continue <- tryCatch(fun(file, fromCode, showOutput), error = function(e) TRUE) if (!continue) return (FALSE) # #nocov end } return (TRUE) } # Call the onBuildComplete hook. This hook is provided so that external tools # can do analysis of build errors and (for example) present them in a # navigable list. Note that the output parameter will be NULL when showOutput # is TRUE. Tools can try to scrape the output from the console (in an # implemenentation-dependent fashion) or can simply not rely on output # processing in that case (since the user explicitly asked for output to be # printed to the console). The onBuildCompleted hook is always called within # the temporary build directory. .callBuildCompleteHook <- function(succeeded, output) { # Call the hooks in reverse order to align sequencing with onBuild for (fun in .getHooksList("sourceCpp.onBuildComplete")) { if (is.character(fun)) # #nocov start fun <- get(fun) try(fun(succeeded, output)) # #nocov end } } # The value for getHooks can be a single function or a list of functions, # This function ensures that the result can always be processed as a list .getHooksList <- function(name) { hooks <- getHook(name) if (!is.list(hooks)) hooks <- list(hooks) # #nocov hooks } # Generate list of includes based on LinkingTo. The pluginsOnly parameter # to distinguish the case of capturing all includes needed for a compiliation # (e.g. cppFunction) verses only needing to capture as/wrap converters which # is the case for generation of shims (RcppExports.cpp) and Rcpp::interfaces # package header files. .linkingToIncludes <- function(linkingTo, pluginsOnly) { # This field can be NULL or empty -- in that case just return Rcpp.h if (is.null(linkingTo) || !nzchar(linkingTo)) return (c("#include ")) # #nocov # Look for Rcpp inline plugins within the list or LinkedTo packages include.before <- character() include.after <- character() linkingToPackages <- .parseLinkingTo(linkingTo) for (package in linkingToPackages) { # We already handle Rcpp internally if (identical(package, "Rcpp")) next # see if there is a plugin that we can extract includes from plugin <- .getInlinePlugin(package) # #nocov start if (!is.null(plugin)) { includes <- .pluginIncludes(plugin) if (!is.null(includes)) { include.before <- c(include.before, includes$before) include.after <- c(include.after, includes$after) } } # otherwise check for standard Rcpp::interfaces generated include else if (!pluginsOnly) { pkgPath <- find.package(package, NULL, quiet=TRUE) if (length(pkgPath) == 0) { stop(paste("Package '", package, "' referenced from ", "LinkingTo directive is not available.", sep=""), call. = FALSE) } pkgHeader <- paste(package, ".h", sep="") pkgHeaderPath <- file.path(pkgPath, "include", pkgHeader) if (file.exists(pkgHeaderPath)) { pkgInclude <- paste("#include <", pkgHeader, ">", sep="") include.after <- c(include.after, pkgInclude) } } # #nocov end } # return the includes c(include.before, "#include ", include.after) } # Analyze the plugin's includes field to determine include.before and # include.after. We are ONLY interested in plugins that work with Rcpp since # the only types we need from includes are as/wrap marshallers. Therefore, # we verify that the plugin was created using Rcpp.plugin.maker and then # use that assumption to correctly extract include.before and include.after .pluginIncludes <- function(plugin) { # #nocov start # First determine the standard suffix of an Rcpp plugin by calling # Rcpp.plugin.maker. If the plugin$includes has this suffix we know # it's an Rcpp plugin token <- "include_after_token" stockRcppPlugin <- Rcpp.plugin.maker(include.after=token) includes <- stockRcppPlugin()$includes suffix <- strsplit(includes, token)[[1]][[2]] # now ask the plugin for it's includes, ensure that the plugin includes # are not null, and verify they have the Rcpp suffix before proceeding pluginIncludes <- plugin()$includes if (is.null(pluginIncludes)) return (NULL) if (!grepl(suffix, pluginIncludes)) return (NULL) # strip the suffix then split on stock Rcpp include to get before and after pluginIncludes <- strsplit(pluginIncludes, suffix)[[1]][[1]] pluginIncludes <- strsplit(pluginIncludes, c("#include "))[[1]] # extract before and after and nix empty lines before <- pluginIncludes[[1]] before <- strsplit(before, "\n")[[1]] before <- before[nzchar(before)] after <- pluginIncludes[[2]] after <- strsplit(after, "\n")[[1]] after <- after[nzchar(after)] # return before and after list(before = before, after = after) # #nocov end } # Parse a LinkingTo field into a character vector .parseLinkingTo <- function(linkingTo) { if (is.null(linkingTo)) return (character()) # #nocov linkingTo <- strsplit(linkingTo, "\\s*\\,")[[1]] result <- gsub("\\s", "", linkingTo) gsub("\\(.*", "", result) } # show diagnostics for failed builds .showBuildFailureDiagnostics <- function() { # #nocov start # RStudio does it's own diagnostics so only do this for other environments if (nzchar(Sys.getenv("RSTUDIO"))) return(); # if we can't call R CMD SHLIB then notify the user they should # install the appropriate development tools if (!.checkDevelTools()) { msg <- paste("\nWARNING: The tools required to build C++ code for R ", "were not found.\n\n", sep="") sysName <- Sys.info()[['sysname']] if (identical(sysName, "Windows")) { msg <- paste(msg, "Please download and install the appropriate ", "version of Rtools:\n\n", "http://cran.r-project.org/bin/windows/Rtools/\n", sep=""); } else if (identical(sysName, "Darwin")) { msg <- paste(msg, "Please install Command Line Tools for XCode ", "(or equivalent).\n", sep="") } else { msg <- paste(msg, "Please install GNU development tools ", "including a C++ compiler.\n", sep="") } message(msg) } # #nocov end } # check if R development tools are installed (cache successful result) .hasDevelTools <- FALSE .checkDevelTools <- function() { if (!.hasDevelTools) { # #nocov start # create temp source file tempFile <- file.path(tempdir(), "foo.c") cat("void foo() {}\n", file = tempFile) on.exit(unlink(tempFile)) # set working directory to tempdir (revert on exit) oldDir <- setwd(tempdir()) on.exit(setwd(oldDir), add = TRUE) # attempt the compilation and note whether we succeed cmd <- paste(R.home(component="bin"), .Platform$file.sep, "R ", "CMD SHLIB foo.c", sep = "") result <- suppressWarnings(system(cmd, ignore.stderr = TRUE, intern = TRUE)) utils::assignInMyNamespace(".hasDevelTools", is.null(attr(result, "status"))) # if we build successfully then remove the shared library if (.hasDevelTools) { lib <- file.path(tempdir(), paste("foo", .Platform$dynlib.ext, sep='')) unlink(lib) } } .hasDevelTools # #nocov end } # insert a dynlib entry into the cache .sourceCppDynlibInsert <- function(cacheDir, file, code, dynlib) { cache <- .sourceCppDynlibReadCache(cacheDir) index <- .sourceCppFindCacheEntryIndex(cache, file, code) if (is.null(index)) index <- length(cache) + 1 cache[[index]] <- list(file = file, code = code, dynlib = dynlib) .sourceCppDynlibWriteCache(cacheDir, cache) } # attempt to lookup a dynlib entry from the cache .sourceCppDynlibLookup <- function(cacheDir, file, code) { cache <- .sourceCppDynlibReadCache(cacheDir) index <- .sourceCppFindCacheEntryIndex(cache, file, code) if (!is.null(index)) cache[[index]]$dynlib else list() } # write the cache to disk .sourceCppDynlibWriteCache <- function(cacheDir, cache) { index_file <- file.path(cacheDir, "cache.rds") save(cache, file = index_file, compress = FALSE) } # read the cache from disk .sourceCppDynlibReadCache <- function(cacheDir) { index_file <- file.path(cacheDir, "cache.rds") if (file.exists(index_file)) { load(file = index_file) get("cache") } else { list() } } # search the cache for an entry that matches the file or code argument .sourceCppFindCacheEntryIndex <- function(cache, file, code) { if (length(cache) > 0) { for (i in 1:length(cache)) { entry <- cache[[i]] if ((nzchar(file) && identical(file, entry$file)) || (nzchar(code) && identical(code, entry$code))) { if (file.exists(entry$dynlib$cppSourcePath)) return(i) } } } # none found NULL } # generate an R version / Rcpp version specific cache dir for dynlibs .sourceCppPlatformCacheDir <- function(cacheDir) { dir <- file.path(cacheDir, paste("sourceCpp", R.version$platform, utils::packageVersion("Rcpp"), sep = "-")) if (!utils::file_test("-d", dir)) dir.create(dir, recursive = TRUE) dir } # generate a unique token for a cacheDir .sourceCppDynlibUniqueToken <- function(cacheDir) { # read existing token (or create a new one) token_file <- file.path(cacheDir, "token.rds") if (file.exists(token_file)) load(file = token_file) else token <- 0 # increment token <- token + 1 # write it save(token, file = token_file) # return it as a string as.character(token) } .extraRoutineRegistrations <- function(targetFile, routines) { declarations = character() call_entries = character() # if we are running R 3.4 or higher we can use an internal utility function # to automatically discover additional native routines that require registration if (getRversion() >= "3.4") { # determine the package directory pkgdir <- dirname(dirname(targetFile)) # get the generated code from R con <- textConnection(object = NULL, open = "w") on.exit(close(con), add = TRUE) tools::package_native_routine_registration_skeleton( dir = pkgdir, con = con, character_only = FALSE ) code <- textConnectionValue(con) # look for lines containing call entries matches <- regexec('^\\s+\\{"([^"]+)",.*$', code) matches <- regmatches(code, matches) matches <- Filter(x = matches, function(x) { length(x) > 0 # #nocov start }) for (match in matches) { routine <- match[[2]] if (!routine %in% routines) { declaration <- grep(sprintf("^extern .* %s\\(.*$", routine), code, value = TRUE) # FIXME: maybe we should extend this to *any* routine? # or is there any case in which `void *` is not SEXP for a .Call? if (routine == "run_testthat_tests") declaration <- gsub("void *", "SEXP", declaration, fixed=TRUE) declarations <- c(declarations, sub("^extern", "RcppExport", declaration)) call_entries <- c(call_entries, match[[1]]) # #nocov end } } } # return extra declaratiosn and call entries list(declarations = declarations, call_entries = call_entries) } Rcpp/R/exceptions.R0000644000176200001440000000311413035734131013662 0ustar liggesusers# Copyright (C) 2009 - 2017 Dirk Eddelbuettel and Romain Francois # # This file is part of Rcpp. # # Rcpp is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Rcpp is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Rcpp. If not, see . .rcpp_error_recorder <- function(e) { invisible(.Call(rcpp_error_recorder, e)) # #nocov } .warningsEnv <- new.env() .warningsEnv$warnings <- character() .rcpp_warning_recorder <- function(w){ .warningsEnv$warnings <- append(.warningsEnv$warnings, w$message) # #nocov invokeRestart("muffleWarning") # #nocov } .rcpp_collect_warnings <- function() { warnings <- .warningsEnv$warnings # #nocov start .warningsEnv$warnings <- character() warnings # #nocov end } print.Rcpp_stack_trace <- function(x, ...) { cat(format(x, ...)) # #nocov } str.Rcpp_stack_trace <- function(object, ...) { cat(format(object, ...)) # #nocov } format.Rcpp_stack_trace <- function(x, ...) { paste0( # #nocov start if (nzchar(x$file)) paste0(x$file, ":", x$line), "\n ", paste(collapse = "\n ", seq_along(x$stack), ":", x$stack), "\n") } # #nocov end Rcpp/R/02_completion.R0000644000176200001440000000335313023631124014153 0ustar liggesusers# Copyright (C) 2010 - 2016 John Chambers, Dirk Eddelbuettel and Romain Francois # # This file is part of Rcpp. # # Rcpp is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Rcpp is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Rcpp. If not, see . setGeneric( ".DollarNames" ) # #nocov start .DollarNames.Module <- function(x, pattern){ pointer <- .getModulePointer( x ) if(identical(pointer, .badModulePointer)) { stop( "unitialized module" ) } grep( pattern , .Call( Module__complete, pointer), value = TRUE ) } setMethod( ".DollarNames", "Module", .DollarNames.Module ) # completion for C++ objects # do we actually need this or do we get it for free via setRefClass, etc ... setGeneric( "complete", function(x) standardGeneric("complete") ) setMethod( "complete", "C++Object", function(x){ xp <- get(".cppclass", envir = as.environment(x)) # FIXME: implement another test # if(identical(xp, .emptyPointer)) # stop("C++ object with unset pointer to C++ class") .Call( CppClass__complete , xp ) } ) ".DollarNames.C++Object" <- function( x, pattern ){ grep( pattern, complete(x), value = TRUE ) } setMethod( ".DollarNames", "C++Object", `.DollarNames.C++Object` ) # #nocov end Rcpp/R/bib.R0000644000176200001440000000144613036047445012251 0ustar liggesusers# Copyright (C) 2010 - 2017 Dirk Eddelbuettel and Romain Francois # # This file is part of Rcpp. # # Rcpp is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Rcpp is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Rcpp. If not, see . bib <- function() { sub("\\.bib$", "", system.file("bib", "Rcpp.bib", package = "Rcpp")) } Rcpp/R/zzz.R0000644000176200001440000000160113023631124012330 0ustar liggesusers# Copyright (C) 2009 - 2016 Dirk Eddelbuettel and Romain Francois # # This file is part of Rcpp. # # Rcpp is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Rcpp is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Rcpp. If not, see . .dummyInstancePointer <- new.env() # just something permanent .classes_map <- new.env() .onLoad <- function(libname, pkgname){ new_dummyObject(.dummyInstancePointer) # nocov } Rcpp/R/tools.R0000644000176200001440000000554614530124217012653 0ustar liggesusers# Copyright (C) 2010 - 2019 Dirk Eddelbuettel and Romain Francois # # This file is part of Rcpp. # # Rcpp is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Rcpp is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Rcpp. If not, see . externalptr_address <- function(xp) { .Call(as_character_externalptr, xp) # #nocov } # just like assignInNamespace but first checks that the binding exists forceAssignInNamespace <- function(x, value, env) { is_ns <- isNamespace(env) unlocker <- get("unlockBinding", baseenv()) if (is_ns && exists(x, env) && bindingIsLocked(x, env)) { unlocker(x, env) # #nocov } assign(x, value, env) if (is_ns) { lockBinding(x, env) # #nocov } } # Transform a path for passing to the build system on the command line. # Leave paths alone for posix. For Windows, mirror the behavior of the # R package build system by starting with the fully resolved absolute path, # transforming it to a short path name if it contains spaces, and then # converting backslashes to forward slashes asBuildPath <- function(path) { if (.Platform$OS.type == "windows") { path <- normalizePath(path) # #nocov start if (grepl(' ', path, fixed=TRUE)) path <- utils::shortPathName(path) path <- gsub("\\\\", "/", path) # #nocov end } return(path) } ##' Helper function to report the package version of the R installation. ##' ##' While \code{packageVersion(Rcpp)} exports the version registers in ##' \code{DESCRIPTION}, this version does get incremented more easily ##' during development and can therefore be higher than the released ##' version. The actual \code{#define} long used at the C++ level ##' corresponds more to an \sQuote{API Version} which is now provided ##' by this function, and use for example in the package skeleton ##' generator. ##' ##' @title Export the Rcpp (API) Package Version ##' @param devel An logical value indicating if the development or ##' release version number should be returned, default is release. ##' @return A \code{package_version} object with either the release ##' or development version. ##' @author Dirk Eddelbuettel ##' @seealso \code{\link{packageVersion}}, ##' \code{\link{Rcpp.package.skeleton}} ##' @examples getRcppVersion() getRcppVersion <- function(devel = FALSE) { rcpp <- .Call("getRcppVersionStrings", PACKAGE="Rcpp") package_version(rcpp[if(devel) 2 else 1]) } Rcpp/R/exposeClass.R0000644000176200001440000002007613326202417014000 0ustar liggesusers# Copyright (C) 2013 - 2016 John Chambers, Dirk Eddelbuettel and Romain Francois # # This file is part of Rcpp. # # Rcpp is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Rcpp is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Rcpp. If not, see . .stdHeader <- c( # #nocov start "#include ", "using namespace Rcpp ;" ) .asString <- function(what) if(is.character(what)) what else deparse(what) .strings <- function(expr) { if(is.call(expr) && ! identical(expr[[1]], quote(`::`))) lapply(as.list(expr)[-1], .strings) else .asString(expr) } .specifyItems <- function(what) { what <- as.list(what) wn <- allNames(what) simple <- !nzchar(wn) ## todo: error checking here that unnamed elements are single strings wn[simple] <- as.character(what[simple]) names(what) <- wn what[simple] <- list(character()) what } .writeFieldFunction <- function(fldi, typei, CppClass, readOnly, ns, con){ rootName <- paste0("field_", fldi) writeLines(sprintf(" %s %s_get(%s *obj) { return obj->%s; }\n", typei, rootName, CppClass, fldi), con) value <- "_get" if(!readOnly) { writeLines(sprintf(" void %s_set(%s *obj, %s value) { obj->%s = value; }\n", rootName, CppClass, typei, fldi), con) value <- c(value, "_set") } paste0(ns, "::field_", fldi, value) } .writeMethodFunction <- function(mdi, sigi, CppClass, ns, con) { mName <- paste0("method_", mdi) if(length(sigi) < 1) stop(gettextf("The type signature for method %s for class %s was of length 0: Must at least include the return type", mdi, CppClass)) rtnType <- sigi[[1]] sigi <- sigi[-1] if(length(sigi)) { argNames <- paste0("a", seq_along(sigi)) args <- paste(" ,", paste(sigi, argNames, collapse = ", ")) } else argNames <- args <- "" writeLines(sprintf(" %s %s(%s *obj%s){ return obj->%s(%s); }\n", rtnType, mName, CppClass, args, mdi, argNames), con) paste0(ns, "::",mName) } exposeClass <- function(class, constructors, fields, methods, file = paste0(CppClass, "Module.cpp"), header = character(), module = paste0("class_",class), CppClass = class, readOnly = character(), rename = character(), Rfile = TRUE) { ## some argument checks ## TODO: checks on constructors, fields, methods if(length(readOnly)) { readOnly <- as.character(readOnly) if(!all(nzchar(readOnly))) stop("argument readOnly should be a vector of non-empty strings") } newnames <- allNames(rename) if(length(rename)) { if(!all(sapply(rename, function(x) is.character(x) && length(x) == 1 && nzchar(x)))) stop("argument rename should be a vector of single, non-empty strings") if(!all(nzchar(newnames))) stop("all the elements of argument rename should be non-empty strings") } if(is.character(file)) { ## are we in a package directory? Writable, searchable src subdirectory: if(file.access("src",3)==0 && (basename(file) == file)) cfile <- file.path("src", file) else cfile <- file con <- file(cfile, "w") on.exit({message(sprintf("Wrote C++ file \"%s\"", cfile)); close(con)}) } else con <- file ## and for the R code: if(identical(Rfile, FALSE)) {} else { if(identical(Rfile, TRUE)) Rfile <- sprintf("%sClass.R",class) if(is.character(Rfile)) { if(file.access("R",3)==0 && (basename(file) == file)) # in a package directory Rfile <- file.path("R", Rfile) Rcon <- file(Rfile, "w") msg <- sprintf("Wrote R file \"%s\"",Rfile) on.exit({message(msg); close(Rcon)}, add = TRUE) } else Rcon <- Rfile Rfile <- TRUE } mfile <- tempfile() mcon <- file(mfile, "w") writeLines(.stdHeader, con) if(length(header)) writeLines(header, con) writeLines(c("", sprintf("RCPP_MODULE(%s) {\n",module), ""), mcon) writeLines(sprintf(" class_<%s>(\"%s\")\n", CppClass, class), mcon) ## the constructors argument defines a list of vectors of types for( cons in constructors) { if(length(cons) > 1 || (length(cons) == 1 && nzchar(cons) && !identical(cons, "void"))) cons <- paste0("<", paste(cons, collapse = ","),">") else cons = "" writeLines(paste0(" .constructor",cons,"()"),mcon) } writeLines("", mcon) flds <- .specifyItems(fields) nm <- fnm <- names(flds) rdOnly <- nm %in% readOnly macros <- ifelse(rdOnly, ".field_readonly", ".field") test <- nm %in% rename if(any(test)) nm[test] <- newnames[match(nm[test], rename)] ns <- NULL for(i in seq_along(nm)) { typei <- flds[[i]] fldi <- fnm[i] nmi <- nm[[i]] macroi <- macros[[i]] if(!length(typei) || identical(typei, "")) ## direct field writeLines(sprintf(" %s(\"%s\", &%s::%s)", macroi, nmi, CppClass, fldi), mcon) else { # create a free function, e.g. for an inherited field if(is.null(ns)) { # enclose in a namespace ns <- paste("module",class,"NS", sep = "_") writeLines(sprintf("\nnamespace %s {\n", ns), con) } fldFuns <- .writeFieldFunction(fldi, typei, CppClass, rdOnly[[i]], ns, con) if(rdOnly[[i]]) ## NOTE: string 3rd arg. required by problem w. module parsing 10/3/13 writeLines(sprintf(" .property(\"%s\", &%s, \"read-only field\")", nmi, fldFuns[[1]]), mcon) else writeLines(sprintf(" .property(\"%s\", &%s, &%s)", nmi, fldFuns[[1]], fldFuns[[2]]), mcon) } } writeLines("", mcon) sigs <- .specifyItems(methods) nm <- mds <- names(sigs) test <- nm %in% rename if(any(test)) nm[test] <- newnames[match(nm[test], rename)] for(i in seq_along(nm)) { sigi <- sigs[[i]] nmi <- nm[[i]] mdi <- mds[[i]] if(!length(sigi) || identical(sigi, "")) # direct method writeLines(sprintf(" .method(\"%s\", &%s::%s)", nmi, CppClass, mdi), mcon) else { # create a free function, e.g. for an inherited method if(is.null(ns)) { # enclose in a namespace ns <- paste("module",class,"NS", sep = "_") writeLines(sprintf("\nnamespace %s {\n", ns), con) } mFun <- .writeMethodFunction(mdi, sigi, CppClass, ns, con) writeLines(sprintf(" .method(\"%s\", &%s)", nmi, mFun), mcon) } } writeLines(" ;\n}", mcon) close(mcon) if(!is.null(ns)) writeLines(sprintf("} // %s", ns), con) # close namespace writeLines(readLines(mfile), con) if(Rfile) { if(missing(CppClass)) CppString <- "" else CppString <- paste0(", \"",CppClass, "\"") if(missing(module)) ModString <- "" else ModString <- paste0(", module = \"", module, "\"") writeLines(sprintf("%s <- setRcppClass(\"%s\"%s%s)", class, class, CppString,ModString), Rcon) } } # #nocov end Rcpp/R/01_show.R0000644000176200001440000001023013023631124012751 0ustar liggesusers# Copyright (C) 2010 - 2016 John Chambers, Dirk Eddelbuettel and Romain Francois # # This file is part of Rcpp. # # Rcpp is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Rcpp is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Rcpp. If not, see . setMethod( "show", "C++Object", function(object){ # #nocov start env <- as.environment(object) pointer <- get(".pointer", envir = env) cppclass <- get(".cppclass", envir = env) txt <- sprintf( "C++ object <%s> of class '%s' <%s>", externalptr_address(pointer), .Call( Class__name, cppclass ), externalptr_address(cppclass) ) writeLines( txt ) } ) setMethod( "show", "C++Class", function(object){ doc <- object@docstring txt <- sprintf( "C++ class '%s' <%s>%s", .Call( Class__name, object@pointer ), externalptr_address(object@pointer), if( length(doc) && nchar(doc) ) sprintf( "\n docstring : %s", doc ) else "" ) writeLines( txt ) ctors <- object@constructors nctors <- length( ctors ) txt <- character( nctors ) for( i in seq_len(nctors) ){ ctor <- ctors[[i]] doc <- ctor$docstring txt[i] <- sprintf( " %s%s", ctor$signature, if( nchar(doc) ) sprintf( "\n docstring : %s", doc) else "" ) } writeLines( "Constructors:" ) writeLines( paste( txt, collapse = "\n" ) ) fields <- object@fields nfields <- length(fields) if( nfields ){ names <- names(fields) txt <- character(nfields) writeLines( "\nFields: " ) for( i in seq_len(nfields) ){ f <- fields[[i]] doc <- f$docstring txt[i] <- sprintf( " %s %s%s%s", f$cpp_class, names[i], if( f$read_only ) " [readonly]" else "", if( nchar(doc) ) sprintf( "\n docstring : %s", doc ) else "" ) } writeLines( paste( txt, collapse = "\n" ) ) } else { writeLines( "\nFields: No public fields exposed by this class" ) } mets <- object@methods nmethods <- length(mets) if( nmethods ){ writeLines( "\nMethods: " ) txt <- character( nmethods ) for( i in seq_len(nmethods) ){ txt[i] <- mets[[i]]$info(" ") } writeLines( paste( txt, collapse = "\n" ) ) } else { writeLines( "\nMethods: no methods exposed by this class" ) } } ) setMethod( "show", "C++Function", function(object){ txt <- sprintf( "internal C++ function <%s>", externalptr_address(object@pointer) ) writeLines( txt ) doc <- object@docstring if( length(doc) && nchar( doc ) ){ writeLines( sprintf( " docstring : %s", doc ) ) } sign <- object@signature if( length(sign) && nchar( sign ) ){ writeLines( sprintf( " signature : %s", sign ) ) } } ) setMethod( "show", "Module", function( object ){ pointer <- .getModulePointer(object, FALSE) if(identical(pointer, .badModulePointer)) { object <- as.environment(object) ## not needed when 2.12.0 arrives txt <- sprintf("Uninitialized module named \"%s\" from package \"%s\"", get("moduleName", envir = object), get("packageName", envir = object)) writeLines(txt) } else { info <- .Call( Module__functions_arity, pointer ) name <- .Call( Module__name, pointer ) txt <- sprintf( "Rcpp module '%s' \n\t%d functions: ", name, length(info) ) writeLines( txt ) txt <- sprintf( "%15s : %d arguments", names(info), info ) writeLines( txt ) info <- .Call( Module__classes_info, pointer ) txt <- sprintf( "\n\t%d classes : ", length(info) ) writeLines( txt ) txt <- sprintf( "%15s ", names(info) ) writeLines( txt ) } } ) # #nocov end Rcpp/R/compilerCheck.R0000644000176200001440000000340213023631124014244 0ustar liggesusers##' Helper function to establish minimal compiler versions, currently limited ##' only to \code{g++} which (particularly for older RHEL/CentOS releases) is ##' too far behind current C++11 standards required for some packages. ##' ##' This function looks up \code{g++} (as well as optional values in the ##' \code{CXX} and \code{CXX1X} environment variables) in the \code{PATH}. For ##' all values found, the output of \code{g++ -v} is analyzed for the version ##' string, which is then compared to the given minimal version. ##' @title Check for Minimal (g++) Compiler Version ##' @param minVersion An object of type \code{package_version}, with a default ##' of version 4.6.0 ##' @return A boolean value is returned, indicating if the minimal version is ##' being met ##' @author Dirk Eddelbuettel compilerCheck <- function(minVersion=package_version("4.6.0")) { # nocov start binaries <- c("g++", Sys.getenv("CXX", unset=""), Sys.getenv("CXX1X", unset="")) binpaths <- lapply(binaries, function(b) { if (b=="") NULL else Sys.which(b) }) allgood <- FALSE rl <- lapply(binpaths, function(b) { if (is.null(b)) return(NULL) con <- pipe(paste(b, "-v 2>&1"), "r") # NB: not --version, but -v lines <- readLines(con) close(con) lines <- lines[grepl("^g.. version", lines)] if (length(lines) == 0) return(NULL) ver <- strsplit(lines, " ")[[1]][3] # format is 'gcc version x.y.z ....' package_version(ver) >= minVersion }) all(do.call(c, rl)) # drops NULLs } # nocov end ## TODO: maybe not limit to gcc/g++ ## TODO: maybe be smarter about combination of path, CXX and CXX1X ? ## TODO: maybe make env.var optional arguments too Rcpp/R/00_classes.R0000644000176200001440000000636313023631124013441 0ustar liggesusers# Copyright (C) 2010 - 2016 John Chambers, Dirk Eddelbuettel and Romain Francois # # This file is part of Rcpp. # # Rcpp is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Rcpp is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Rcpp. If not, see . # anticipating a change in R 2.16.0 setClass( "refClassGeneratorFunction" ) # #nocov start setClassUnion("refGenerator", c("refObjectGenerator", "refClassGeneratorFunction")) ## "Module" class as an environment with "pointer", "moduleName", ## "packageName" and "refClassGenerators" ## Stands in for a reference class with those fields. setClass( "Module", contains = "environment" ) setRefClass( "C++Field", fields = list( pointer = "externalptr", cpp_class = "character", read_only = "logical", class_pointer = "externalptr", docstring = "character" ) ) setRefClass( "C++OverloadedMethods", fields = list( pointer = "externalptr", class_pointer = "externalptr", size = "integer", void = "logical", const = "logical", docstrings = "character", signatures = "character", nargs = "integer" ), methods = list( info = function(prefix = " " ){ paste( paste( prefix, signatures, ifelse(const, " const", "" ), "\n", prefix, prefix, ifelse( nchar(docstrings), paste( "docstring :", docstrings) , "" ) ) , collapse = "\n" ) } ) ) setRefClass( "C++Constructor", fields = list( pointer = "externalptr", class_pointer = "externalptr", nargs = "integer", signature = "character", docstring = "character" ) ) setClass( "C++Class", representation( pointer = "externalptr", module = "externalptr", fields = "list", methods = "list", constructors = "list", generator = "refGenerator", docstring = "character", typeid = "character", enums = "list", parents = "character" ), contains = "character" ) setClass( "C++Object") setClass( "C++Function", representation( pointer = "externalptr", docstring = "character", signature = "character" ), contains = "function" ) .cppfunction_formals_gets <- function (fun, envir = environment(fun), value) { bd <- body(fun) b2 <- bd[[2L]] for( i in seq_along(value) ){ b2[[3L+i]] <- as.name( names(value)[i] ) } bd[[2]] <- b2 f <- fun@.Data formals(f) <- value body(f) <- bd fun@.Data <- f fun } setGeneric( "formals<-" ) setMethod( "formals<-", "C++Function", .cppfunction_formals_gets ) # #nocov end Rcpp/R/03_prompt.R0000644000176200001440000000457113023631124013327 0ustar liggesusers# Copyright (C) 2010 - 2016 John Chambers, Dirk Eddelbuettel and Romain Francois # # This file is part of Rcpp. # # Rcpp is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Rcpp is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Rcpp. If not, see . setGeneric( "functions", function(object, ...) standardGeneric( "functions" ) ) # #nocov start setMethod( "functions", "Module", function(object, ...){ pointer <- .getModulePointer(object) if(identical(pointer, .badModulePointer)) stop(gettextf("Module \"%s\" has not been intialized: try Module(object)", get("moduleName", envir = as.environment(object))), domain = NA) else .Call( Module__functions_arity, pointer ) } ) setGeneric( "prompt" ) setMethod( "prompt", "Module", function(object, filename = NULL, name = NULL, ...){ lines <- readLines( system.file( "prompt", "module.Rd", package = "Rcpp" ) ) pointer <- .getModulePointer(object) if( is.null(name) ) name <- .Call( Module__name, pointer ) if( is.null(filename) ) filename <- sprintf( "%s-module.Rd", name ) lines <- gsub( "NAME", name, lines ) info <- functions( object ) f.txt <- if( length( info ) ){ sprintf( "functions: \\\\describe{ %s }", paste( sprintf( " \\\\item{%s}{ ~~ description of function %s ~~ }", names(info), names(info) ), collapse = "\n" ) ) } else { "" } lines <- sub( "FUNCTIONS", f.txt, lines ) ## at this point functions() would have failed if the ## pointer in object was not valid classes <- .Call( Module__classes_info, pointer ) c.txt <- if( length( classes ) ){ sprintf( "classes: \\\\describe{ %s }", paste( sprintf( " \\\\item{%s}{ ~~ description of class %s ~~ }", names(classes), names(classes) ), collapse = "\n" ) ) } else { "" } lines <- sub( "CLASSES", c.txt, lines ) writeLines( lines, filename ) invisible(NULL) } ) # nocov end Rcpp/R/Module.R0000644000176200001440000004277714470465200012752 0ustar liggesusers# Copyright (C) 2010 - 2021 John Chambers, Dirk Eddelbuettel and Romain Francois # # This file is part of Rcpp. # # Rcpp is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Rcpp is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Rcpp. If not, see . internal_function <- function(pointer){ f <- function(xp){ force(xp) function(...){ .External( InternalFunction_invoke, xp, ... ) } } o <- new( "C++Function", f(pointer) ) o@pointer <- pointer o } setMethod("$", "C++Class", function(x, name) { x <- x@generator eval.parent(substitute(x$name)) }) .badModulePointer <- NULL .setModulePointer <- function(module, value) { assign("pointer", value, envir = as.environment(module)) value } .getModulePointer <- function(module, mustStart = TRUE) { pointer <- get("pointer", envir = as.environment(module)) if(is.null(pointer) && mustStart) { # #nocov start ## should be (except for bug noted in identical()) ## if(identical(pointer, .badModulePointer) && mustStart) { Module(module, mustStart = TRUE) # will either initialize pointer or throw error pointer <- get("pointer", envir = as.environment(module)) } # #nocov end pointer } setMethod("initialize", "Module", function(.Object, moduleName = "UNKNOWN", packageName = "", pointer = .badModulePointer, ...) { env <- new.env(TRUE, emptyenv()) as(.Object, "environment") <- env assign("pointer", pointer, envir = env) assign("packageName", packageName, envir = env) assign("moduleName", moduleName, envir = env) if(length(list(...)) > 0) { .Object <- callNextMethod(.Object, ...) # #nocov } .Object }) .get_Module_function <- function(x, name, pointer = .getModulePointer(x) ){ pointer <- .getModulePointer(x) info <- .Call( Module__get_function, pointer, name ) fun_ptr <- info[[1L]] is_void <- info[[2L]] doc <- info[[3L]] sign <- info[[4L]] formal_args <- info[[5L]] nargs <- info[[6L]] f <- function(...) NULL if( nargs == 0L ) formals(f) <- NULL stuff <- list( fun_pointer = fun_ptr, InternalFunction_invoke = InternalFunction_invoke ) body(f) <- if( nargs == 0L ){ if( is_void ) { substitute( { # #nocov start .External( InternalFunction_invoke, fun_pointer) invisible(NULL) }, stuff ) # #nocov end } else { substitute( { .External( InternalFunction_invoke, fun_pointer) }, stuff ) } } else { if( is_void ) { substitute( { # #nocov start .External( InternalFunction_invoke, fun_pointer, ... ) invisible(NULL) }, stuff ) # #nocov end } else { substitute( { .External( InternalFunction_invoke, fun_pointer, ... ) }, stuff ) } } out <- new( "C++Function", f, pointer = fun_ptr, docstring = doc, signature = sign ) if( ! is.null( formal_args ) ){ formals( out ) <- formal_args # #nocov } out } .get_Module_Class <- function( x, name, pointer = .getModulePointer(x) ){ value <- .Call( Module__get_class, pointer, name ) value@generator <- get("refClassGenerators", envir=x)[[value@.Data]] value } setMethod( "$", "Module", function(x, name){ # #nocov start pointer <- .getModulePointer(x) storage <- get( "storage", envir = as.environment(x) ) storage[[ name ]] } ) # #nocov end new_CppObject_xp <- function(module, pointer, ...) { .External( class__newInstance, module, pointer, ... ) } new_dummyObject <- function(...) # #nocov .External( class__dummyInstance, ...) # #nocov # class method for $initialize cpp_object_initializer <- function(.self, .refClassDef, ..., .object_pointer){ # force finalize method to be materialized invisible(.self$finalize) selfEnv <- as.environment(.self) ## generate the C++-side object and store its pointer, etc. ## access the private fields in the fieldPrototypes env. fields <- .refClassDef@fieldPrototypes pointer <- if(missing(.object_pointer)) new_CppObject_xp(fields$.module, fields$.pointer, ...) else .object_pointer assign(".module", fields$.module, envir = selfEnv) assign(".pointer", pointer, envir = selfEnv) assign(".cppclass", fields$.pointer, envir = selfEnv) .self } cpp_object_dummy <- function(.self, .refClassDef) { # #nocov start selfEnv <- as.environment(.self) ## like initializer but a dummy for the case of no default ## constructor. Will throw an error if the object is used. fields <- .refClassDef@fieldPrototypes pointer <- new_dummyObject() assign(".module", fields$.module, envir = selfEnv) assign(".pointer", pointer, envir = selfEnv) assign(".cppclass", fields$.pointer, envir = selfEnv) .self } # #nocov end cpp_object_maker <- function(typeid, pointer){ Class <- .classes_map[[ typeid ]] new( Class, .object_pointer = pointer ) } Module <- function( module, PACKAGE = methods::getPackageName(where), where = topenv(parent.frame()), mustStart = FALSE ) { if (inherits(module, "DLLInfo") && missing(mustStart)) mustStart <- TRUE # #nocov if (inherits(module, "Module")) { xp <- .getModulePointer(module, FALSE) if(!missing(PACKAGE)) warning("ignoring PACKAGE argument in favor of internal package from Module object") # #nocov env <- as.environment(module) # not needed from R 2.12.0 PACKAGE <- get("packageName", envir = env) moduleName <- get("moduleName", envir = env) } else if( identical( typeof( module ), "externalptr" ) ){ ## [john] Should Module() ever be called with a pointer as argument? ## If so, we need a safe check of the pointer's validity ## [romain] I don't think we actually can, external pointers ## are stored as void*, they don't know what they are. Or we could ## perhaps keep a vector of all known module pointers ## [John] One technique is to initialize the pointer to a known value ## and just check whether it's been reset from that (bad) value xp <- module # #nocov start moduleName <- .Call( Module__name, xp ) module <- methods::new("Module", pointer = xp, packageName = PACKAGE, moduleName = moduleName) # #nocov end } else if(is.character(module)) { moduleName <- module xp <- .badModulePointer module <- methods::new("Module", pointer = xp, packageName = PACKAGE, moduleName = moduleName) } if(identical(xp, .badModulePointer)) { if(mustStart) { name <- sprintf( "_rcpp_module_boot_%s", moduleName ) symbol <- tryCatch(getNativeSymbolInfo( name, PACKAGE ), error = function(e)e) if(inherits(symbol, "error")) stop(gettextf("Failed to initialize module pointer: %s", symbol), domain = NA) xp <- .Call( symbol ) .setModulePointer(module, xp) } else return(module) } classes <- .Call( Module__classes_info, xp ) ## We need a general strategy for assigning class defintions ## since delaying the initialization of the module causes ## where to be the Rcpp namespace: if(environmentIsLocked(where)) where <- .GlobalEnv # or??? generators <- list() storage <- new.env() for( i in seq_along(classes) ){ CLASS <- classes[[i]] clname <- CLASS@.Data fields <- cpp_fields( CLASS, where ) methods <- cpp_refMethods(CLASS, where) generator <- methods::setRefClass( clname, fields = fields, contains = "C++Object", methods = methods, where = where ) # just to make codetools happy .self <- .refClassDef <- NULL generator$methods(initialize = if (cpp_hasDefaultConstructor(CLASS)) function(...) Rcpp::cpp_object_initializer(.self,.refClassDef, ...) else function(...) { if (nargs()) Rcpp::cpp_object_initializer(.self,.refClassDef, ...) else Rcpp::cpp_object_dummy(.self, .refClassDef) # #nocov } ) rm( .self, .refClassDef ) classDef <- methods::getClass(clname) ## non-public (static) fields in class representation ## Should these become real fields? fields <- classDef@fieldPrototypes assign(".pointer", CLASS@pointer, envir = fields) assign(".module", xp, envir = fields) assign(".CppClassName", clname, envir = fields) generators[[clname]] <- generator # [romain] : should this be promoted to reference classes # perhaps with better handling of j and ... arguments if( any( grepl( "^[[]", names(CLASS@methods) ) ) ){ # #nocov start if( "[[" %in% names( CLASS@methods ) ){ methods::setMethod( "[[", clname, function(x, i, j, ..., exact = TRUE){ x$`[[`( i ) }, where = where ) } if( "[[<-" %in% names( CLASS@methods ) ){ methods::setReplaceMethod( "[[", clname, function(x, i, j, ..., exact = TRUE, value){ x$`[[<-`( i, value ) x } , where = where ) } } # #nocov end # promoting show to S4 if( any( grepl( "show", names(CLASS@methods) ) ) ){ setMethod( "show", clname, function(object) object$show(), where = where ) # #nocov } } if(length(classes)) { module$refClassGenerators <- generators } for( i in seq_along(classes) ){ CLASS <- classes[[i]] clname <- CLASS@.Data demangled_name <- sub( "^Rcpp_", "", clname ) .classes_map[[ CLASS@typeid ]] <- storage[[ demangled_name ]] <- .get_Module_Class( module, demangled_name, xp ) # exposing enums values as CLASS.VALUE # (should really be CLASS$value but I don't know how to do it) if( length( CLASS@enums ) ){ for( enum in CLASS@enums ){ # #nocov start for( i in 1:length(enum) ){ storage[[ paste( demangled_name, ".", names(enum)[i], sep = "" ) ]] <- enum[i] } } # #nocov end } } # functions functions <- .Call( Module__functions_names, xp ) for( fun in functions ){ storage[[ fun ]] <- .get_Module_function( module, fun, xp ) # register as(FROM, TO) methods converter_rx <- "^[.]___converter___(.*)___(.*)$" if( length( matches <- grep( converter_rx, functions ) ) ){ # #nocov start for( i in matches ){ fun <- functions[i] from <- sub( converter_rx, "\\1", fun ) to <- sub( converter_rx, "\\2", fun ) converter <- function( from ){} body( converter ) <- substitute( { CONVERT(from) }, list( CONVERT = storage[[fun]] ) ) setAs( from, to, converter, where = where ) } } # #nocov end } assign( "storage", storage, envir = as.environment(module) ) module } dealWith <- function( x ) if(isTRUE(x[[1]])) invisible(NULL) else x[[2]] # #nocov method_wrapper <- function( METHOD, where ){ noargs <- all( METHOD$nargs == 0 ) stuff <- list( class_pointer = METHOD$class_pointer, pointer = METHOD$pointer, CppMethod__invoke = CppMethod__invoke, CppMethod__invoke_void = CppMethod__invoke_void, CppMethod__invoke_notvoid = CppMethod__invoke_notvoid, dealWith = dealWith, docstring = METHOD$info("") ) f <- function(...) NULL if( noargs ){ formals(f) <- NULL } extCall <- if( noargs ) { if( all( METHOD$void ) ){ # all methods are void, so we know we want to return invisible(NULL) substitute( { docstring .External(CppMethod__invoke_void, class_pointer, pointer, .pointer ) invisible(NULL) } , stuff ) } else if( all( ! METHOD$void ) ){ # none of the methods are void so we always return the result of # .External substitute( { docstring .External(CppMethod__invoke_notvoid, class_pointer, pointer, .pointer ) } , stuff ) } else { # some are void, some are not, so the voidness is part of the result # we get from internally and we need to deal with it substitute( # #nocov start { docstring dealWith( .External(CppMethod__invoke, class_pointer, pointer, .pointer ) ) } , stuff ) # #nocov end } } else { if( all( METHOD$void ) ){ # all methods are void, so we know we want to return invisible(NULL) substitute( { docstring .External(CppMethod__invoke_void, class_pointer, pointer, .pointer, ...) invisible(NULL) } , stuff ) } else if( all( ! METHOD$void ) ){ # none of the methods are void so we always return the result of # .External substitute( { docstring .External(CppMethod__invoke_notvoid, class_pointer, pointer, .pointer, ...) } , stuff ) } else { # some are void, some are not, so the voidness is part of the result # we get from internally and we need to deal with it substitute( # #nocov start { docstring dealWith( .External(CppMethod__invoke, class_pointer, pointer, .pointer, ...) ) } , stuff ) # #nocov end } } body(f, where) <- extCall f } ## create a named list of the R methods to invoke C++ methods ## from the C++ class with pointer xp cpp_refMethods <- function(CLASS, where) { finalizer <- eval( substitute( function(){ .Call( CppObject__finalize, class_pointer , .pointer ) }, list( CLASS = CLASS@pointer, CppObject__finalize = CppObject__finalize, class_pointer = CLASS@pointer ) ) ) mets <- c( sapply( CLASS@methods, method_wrapper, where = where ), "finalize" = finalizer ) mets } cpp_hasDefaultConstructor <- function(CLASS) { .Call( Class__has_default_constructor, CLASS@pointer ) } binding_maker <- function( FIELD, where ){ f <- function( x ) NULL body(f) <- substitute({ if( missing( x ) ) .Call( CppField__get, class_pointer, pointer, .pointer) else .Call( CppField__set, class_pointer, pointer, .pointer, x) }, list(class_pointer = FIELD$class_pointer, pointer = FIELD$pointer, CppField__get = CppField__get, CppField__set = CppField__set )) environment(f) <- where f } cpp_fields <- function( CLASS, where){ sapply( CLASS@fields, binding_maker, where = where ) } .CppClassName <- function(name) { paste0("Rcpp_",name) # #nocov } Rcpp/R/loadRcppModules.R0000644000176200001440000000450313023631124014574 0ustar liggesusers# Copyright (C) 2010 - 2016 John Chambers, Dirk Eddelbuettel and Romain Francois # # This file is part of Rcpp. # # Rcpp is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Rcpp is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Rcpp. If not, see . loadRcppModules <- function(direct=TRUE) { # #nocov start # deprecation added May 2016, 'loadModule' has been prefered for years .Deprecated("loadModule") ## hunt for the namespace of the package that calls this calls <- sys.calls() w <- which( sapply( calls, function(call){ identical( call[[1L]], as.name( "runHook" ) ) } ) ) if( !length(w) ) stop( "loadRcppModules can only be used within a .onLoad function" ) w <- w[ length(w) ] call <- calls[[w]] if( !identical( call[[2L]], ".onLoad" ) ) stop( "loadRcppModules can only be used within a .onLoad function" ) f <- sys.frame( w ) ns <- get("env", f ) if( !isNamespace( ns ) ) stop( "loadRcppModules not called from a namespace" ) pkg <- get( "pkgname", f ) lib <- get( "libname", f ) ## look for declared modules in the DESCRIPTION fields description <- packageDescription(pkg, lib.loc=lib) modules <- description[["RcppModules"]] if( !is.null( modules ) ){ modules <- strsplit( modules, "[[:space:]]*,[[:space:]]*")[[1L]] for( m in modules ){ tryCatch( { mod <- Module( m, pkg, mustStart = TRUE) if(isTRUE(direct)){ populate( mod, ns ) } else { forceAssignInNamespace( m, mod, ns ) } assign(.moduleMetaName(m), mod, envir = ns) }, error = function(e){ stop( sprintf( "failed to load module %s from package %s\n%s", m, pkg, conditionMessage(e) ) ) }) } } } # #nocov end Rcpp/R/inline.R0000644000176200001440000000367613110577633013002 0ustar liggesusers# Copyright (C) 2009 - 2017 Dirk Eddelbuettel and Romain Francois # # This file is part of Rcpp. # # Rcpp is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Rcpp is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Rcpp. If not, see . Rcpp.plugin.maker <- function(include.before = "", include.after = "", LinkingTo = unique(c(package, "Rcpp")), Depends = unique(c(package, "Rcpp")), Imports = unique(c(package, "Rcpp")), libs = "", Makevars = NULL , Makevars.win = NULL, package = "Rcpp") { function(...) { includes <- sprintf("%s #include %s #ifndef BEGIN_RCPP #define BEGIN_RCPP #endif #ifndef END_RCPP #define END_RCPP #endif using namespace Rcpp;", include.before, include.after) out <- list(env = list( PKG_LIBS = libs ), includes = includes, LinkingTo = LinkingTo , body = function( x ) { sprintf( "BEGIN_RCPP\n%s\nEND_RCPP", x ) }, Depends = Depends, Imports = Imports) if (!is.null(Makevars)) out$Makevars <- Makevars if (!is.null(Makevars.win)) out$Makevars.win <- Makevars.win out } } inlineCxxPlugin <- Rcpp.plugin.maker() Rcpp/R/populate.R0000644000176200001440000000205612754425121013341 0ustar liggesusers# Copyright (C) 2010 - 2011 John Chambers, Dirk Eddelbuettel and Romain Francois # # This file is part of Rcpp. # # Rcpp is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Rcpp is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Rcpp. If not, see . populate <- function( module, env ){ # make sure the module is loaded module <- Module( module, mustStart = TRUE ) storage <- get( "storage", as.environment(module ) ) symbols <- ls( storage ) is_ns <- isNamespace( env ) for( x in symbols ){ forceAssignInNamespace( x, storage[[x]], env ) } } Rcpp/R/Rcpp.package.skeleton.R0000644000176200001440000002621415014017044015624 0ustar liggesusers# Copyright (C) 2009 - 2025 Dirk Eddelbuettel and Romain Francois # # This file is part of Rcpp. # # Rcpp is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Rcpp is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Rcpp. If not, see . Rcpp.package.skeleton <- function(name = "anRpackage", list = character(), environment = .GlobalEnv, path = ".", force = FALSE, code_files = character(), cpp_files = character(), example_code = TRUE, attributes = TRUE, module = FALSE, author = "Your Name", maintainer = if (missing(author)) "Your Name" else author, email = "your@email.com", githubuser = NA_character_, license = "GPL (>= 2)") { havePkgKitten <- requireNamespace("pkgKitten", quietly=TRUE) call <- match.call() call[[1]] <- as.name("package.skeleton") env <- parent.frame(1) if (!is.character(cpp_files)) stop("'cpp_files' must be a character vector") # #nocov if (!length(list)) { fake <- TRUE assign("Rcpp.fake.fun", function() {}, envir = env) if (example_code && !isTRUE(attributes)) { assign("rcpp_hello_world", function() {}, envir = env) remove_hello_world <- TRUE } else { remove_hello_world <- FALSE } } else { if (example_code && !isTRUE(attributes)) { if (!"rcpp_hello_world" %in% list) { # #nocov start assign( "rcpp_hello_world", function() {}, envir = env) call[["list"]] <- as.call(c(as.name("c"), as.list(c("rcpp_hello_world", list)))) } remove_hello_world <- TRUE # #nocov end } else { remove_hello_world <- FALSE } fake <- FALSE } ## first let the traditional version do its business ## remove Rcpp specific arguments call <- call[ c(1L, which(names(call) %in% names(formals(package.skeleton)))) ] if (fake) { call[["list"]] <- c(if(isTRUE(example_code) && !isTRUE(attributes)) "rcpp_hello_world", "Rcpp.fake.fun") } tryCatch(eval(call, envir = env), error = function(e){ stop(sprintf("error while calling `package.skeleton` : %s", conditionMessage(e))) # #nocov }) message("\nAdding Rcpp settings") ## now pick things up root <- file.path(path, name) # Add Rcpp to the DESCRIPTION DESCRIPTION <- file.path(root, "DESCRIPTION") if (file.exists(DESCRIPTION)) { imports <- c(if (isTRUE(module)) "methods", sprintf("Rcpp (>= %s)", getRcppVersion())) splitname <- strsplit(author, " ")[[1]] x <- cbind(read.dcf(DESCRIPTION, fields = c("Package", "Type", "Title", "Version", "Date", "Description", "License")), "Imports" = paste(imports, collapse = ", "), "LinkingTo" = "Rcpp", "Authors@R" = sprintf("person(\"%s\", \"%s\", role = c(\"aut\", \"cre\"), email = \"%s\")", paste(splitname[-length(splitname)], collapse=" "), splitname[length(splitname)], email)) fields_written <- c("Package", "Type", "Title", "Version", "Date", "Authors@R", "Description", "License", "Imports", "LinkingTo") if (!is.na(githubuser)) { x <- cbind(x, matrix("", 1, 1, dimnames=list("", "URL"))) x[1, "URL"] <- paste0("https://github.com/", githubuser, "/", name) x <- cbind(x, matrix("", 1, 1, dimnames=list("", "BugReports"))) x[1, "BugReports"] <- paste0("https://github.com/", githubuser, "/", name, "/issues") fields_written <- c("Package", "Type", "Title", "Version", "Date", "Authors@R", "Description", "URL", "BugReports", "License", "Imports", "LinkingTo") } x[, "License"] <- license x[, "Title"] <- "Concise Summary of What the Package Does" x[, "Description"] <- "More about what it does (maybe more than one line)." x[, "Version"] <- "0.0.1" message( " >> added Imports: Rcpp" ) message( " >> added LinkingTo: Rcpp" ) write.dcf(x[1, fields_written, drop = FALSE], file = DESCRIPTION) } ## add useDynLib and importFrom to NAMESPACE NAMESPACE <- file.path(root, "NAMESPACE") lines <- readLines(NAMESPACE) ns <- file(NAMESPACE, open="w") if (!any(grepl("useDynLib", lines))) { if (getRversion() >= "3.4.0") { lines <- c(sprintf( "useDynLib(%s, .registration=TRUE)", name), lines) } else { lines <- c(sprintf( "useDynLib(%s)", name), lines) # #nocov } writeLines(lines, con = ns) message(" >> added useDynLib directive to NAMESPACE" ) } if (isTRUE(module)) { writeLines('import(methods, Rcpp)', ns) message(" >> added import(methods, Rcpp) directive to NAMESPACE") } else { writeLines('importFrom(Rcpp, evalCpp)', ns) message(" >> added importFrom(Rcpp, evalCpp) directive to NAMESPACE" ) } if (!any(grepl("^exportPattern", lines))) { writeLines("exportPattern(\"^[[:alpha:]]+\")", ns) } close( ns ) ## update the package description help page if (havePkgKitten) { # if pkgKitten is available, use it pkgKitten::playWithPerPackageHelpPage(name, path, maintainer, email) } else { .playWithPerPackageHelpPage(name, path, maintainer, email) # #nocov } ## lay things out in the src directory src <- file.path(root, "src") if (!file.exists(src)) { dir.create(src) } skeleton <- system.file("skeleton", package = "Rcpp") if (length(cpp_files) > 0L) { for (file in cpp_files) { # #nocov start file.copy(file, src) message(" >> copied ", file, " to src directory" ) # #nocov end } } if (example_code) { if (isTRUE(attributes)) { file.copy(file.path( skeleton, "rcpp_hello_world_attributes.cpp"), file.path( src, "rcpp_hello_world.cpp")) message(" >> added example src file using Rcpp attributes") } else { header <- readLines(file.path(skeleton, "rcpp_hello_world.h")) header <- gsub("@PKG@", name, header, fixed = TRUE) writeLines(header , file.path(src, "rcpp_hello_world.h")) message(" >> added example header file using Rcpp classes") file.copy(file.path(skeleton, "rcpp_hello_world.cpp"), src) message(" >> added example src file using Rcpp classes") rcode <- readLines(file.path( skeleton, "rcpp_hello_world.R")) rcode <- gsub("@PKG@", name, rcode, fixed = TRUE) writeLines( rcode , file.path( root, "R", "rcpp_hello_world.R")) message(" >> added example R file calling the C++ example") } hello.Rd <- file.path(root, "man", "rcpp_hello_world.Rd") unlink(hello.Rd) file.copy(system.file("skeleton", "rcpp_hello_world.Rd", package = "Rcpp"), hello.Rd) message( " >> added Rd file for rcpp_hello_world") } if (isTRUE(module)) { file.copy(system.file("skeleton", "rcpp_module.cpp", package="Rcpp"), file.path(root, "src")) file.copy(system.file("skeleton", "Num.cpp", package="Rcpp"), file.path(root, "src")) file.copy(system.file("skeleton", "stdVector.cpp", package="Rcpp"), file.path(root, "src")) file.copy(system.file("skeleton", "zzz.R", package ="Rcpp"), file.path(root, "R")) file.copy(system.file("skeleton", "Rcpp_modules_examples.Rd", package ="Rcpp"), file.path(root, "man")) message(" >> copied the example module file ") } # generate native routines if we aren't using attributes (which already generate # them automatically) and we have at least R 3.4 if (!attributes) { if (getRversion() >= "3.4.0") { con <- file(file.path(src, "init.c"), "wt") tools::package_native_routine_registration_skeleton(root, con=con) close(con) message(" >> created init.c for package registration") } else { message(" >> R version older than 3.4.0 detected, so NO file init.c created.") # #nocov } } lines <- readLines(package.doc <- file.path( root, "man", sprintf("%s-package.Rd", name))) lines <- sub("~~ simple examples", "%% ~~ simple examples", lines) lines <- lines[! grepl("~~ package title", lines)] lines <- lines[! grepl("~~ The author and", lines)] lines <- sub("Who wrote it", author, lines ) lines <- sub("Who to complain to.*", sprintf("%s <%s>", maintainer, email), lines) writeLines(lines, package.doc) if (fake) { rm("Rcpp.fake.fun", envir = env) unlink(file.path(root, "R" , "Rcpp.fake.fun.R")) unlink(file.path(root, "man", "Rcpp.fake.fun.Rd")) ## cleansing NAMESPACE of fake function entry lines <- readLines(NAMESPACE) lines <- lines[!grepl("^export.*fake\\.fun", lines)] writeLines(lines, NAMESPACE) } if (isTRUE(remove_hello_world)) { rm("rcpp_hello_world", envir = env) } if (attributes) { compileAttributes(root) message(" >> compiled Rcpp attributes ") } invisible(NULL) } ## Borrowed with love from pkgKitten, and modified slightly .playWithPerPackageHelpPage <- function(name = "anRpackage", path = ".", maintainer = "Your Name", email = "your@mail.com") { root <- file.path(path, name) # #nocov start helptgt <- file.path(root, "man", sprintf( "%s-package.Rd", name)) helpsrc <- system.file("skeleton", "manual-page-stub.Rd", package="Rcpp") ## update the package description help page if (file.exists(helpsrc)) { lines <- readLines(helpsrc) lines <- gsub("__placeholder__", name, lines, fixed = TRUE) lines <- gsub("Who to complain to ", sprintf( "%s <%s>", maintainer, email), lines, fixed = TRUE) writeLines(lines, helptgt) } invisible(NULL) # #nocov end } Rcpp/R/loadModule.R0000644000176200001440000001105713023631124013566 0ustar liggesusers# Copyright (C) 2010 - 2015 John Chambers, Dirk Eddelbuettel and Romain Francois # # This file is part of Rcpp. # # Rcpp is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Rcpp is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Rcpp. If not, see . ## the following items are to get around some insanity in the ## CMD check of packages using Rcpp that dies in loadModule() ## because some code somewhere can't find the methods package isBotchedSession <- function() ! ("package:methods" %in% search()) .moduleNames <- function(what) { assignAs <- allNames(what) sameNames <- !nzchar(assignAs) assignAs[sameNames] <- what[sameNames] assignAs } .DummyModule <- function(name, what) { # #nocov start value <- new.env() storage <- new.env() assign("storage", storage, envir = value) assign("moduleName", name, envir = value) allNames <- names(.moduleNames(what)) for(el in allNames) assign(el, NULL, envir = storage) value } # #nocov end .moduleMetaName <- function(name) methods::methodsPackageMetaName("Mod",name) moduleIsLoaded <- function(name, env) exists(.moduleMetaName(name), envir = env, inherits = FALSE) loadModule <- function( module, what = character(), loadNow, env = topenv(parent.frame())) { if(is(module, "character")) { loadM <- NULL metaName <- .moduleMetaName(module) if(exists(metaName, envir = env, inherits = FALSE)) loadM <- get(metaName, envir = env) } else if(is(module, "Module")) { loadM <- as.environment(module) # #nocov module <- get(loadM, "moduleName") # #nocov } else stop(gettextf("Argument \"module\" should be a module or the name of a module: got an object of class \"%s\"", class(module))) if(missing(loadNow)) { # test it if(is.null(loadM)) loadM <- tryCatch(Module( module, mustStart = TRUE, where = env ), error = function(e)e) loadNow <- !is(loadM, "error") } if(loadNow) { ## .botched <- isBotchedSession() .botched <- FALSE if(is.null(loadM)) loadM <- tryCatch(Module( module, mustStart = TRUE, where = env ), error = function(e)e) if(is(loadM, "error")) { if(.botched) # #nocov start return(.DummyModule(module, what)) stop(gettextf("Unable to load module \"%s\": %s", as(module, "character"), loadM$message)) # #nocov end } if(!exists(metaName, envir = env, inherits =FALSE)) assign(metaName, loadM, envir = env) if(!length(what)) # no assignments return(loadM) env <- as.environment(env) ## get the storage environment, for what=TRUE storage <- as.environment(get( "storage", as.environment(loadM ) )) if(identical(what, TRUE)) what <- objects(storage) missingObjs <- !sapply(what, function(symb) exists(symb, envir = storage, inherits = FALSE)) if(any(missingObjs)) { if(.botched) { # #nocov start for(el in what[missingObjs]) assign(el, NULL, envir = storage) } else { warning(gettextf("%s not found in module \"%s\"", paste0('"', what[missingObjs], '"', collapse = ", "), as.character(module))) what <- what[!missingObjs] } # #nocov end } assignAs <- .moduleNames(what) for( i in seq_along(what) ) { if(.botched) assign(assignAs[[i]], NULL, envir = storage) else assign(assignAs[[i]], get(what[[i]], envir = storage), envir = env) } loadM } else { # create a load action to recall this function myCall <- match.call() f <- function(ns) NULL myCall$env <- as.name("ns") myCall$loadNow <- TRUE body(f, envir = env) <- myCall setLoadAction(f, where = env) invisible(myCall) # #nocov } } Rcpp/cleanup0000755000176200001440000000310415030755601012533 0ustar liggesusers#!/bin/sh #cd inst/doc && rm -f index.html *.tex *.bbl *.blg *.aux *.out *.log && cd - rm -f confdefs.h config.log config.status \ src/*.o src/*.so src/*.a src/*.d src/*.dll src/*.rc \ RcppSrc/*.o RcppSrc/*.a inst/Rcpp-version.txt \ inst/lib/libRcpp.so inst/lib/Rcpp*.h inst/lib/libRcpp.a \ inst/doc/*.cpp inst/doc/*.hpp \ inst/doc/*.out \ inst/doc/.build.timestamp \ inst/doc/*.Rd inst/doc/*.aux inst/doc/*.log inst/doc/*.tex \ inst/doc/latex/*.aux inst/doc/latex/*.log \ inst/examples/ConvolveBenchmarks/*.o \ inst/examples/ConvolveBenchmarks/*.so \ inst/examples/functionCallback/*.so \ inst/examples/functionCallback/*.o \ inst/examples/OpenMP/piWithInterrupts.o \ inst/examples/OpenMP/piWithInterrupts.so \ inst/discovery/cxx0x.Rout \ inst/unitTests/testRcppModule/src/*.o \ inst/unitTests/testRcppModule/src/*.so \ inst/unitTests/testRcppClass/src/*.o \ inst/unitTests/testRcppClass/src/*.so \ src/Makedeps libRcpp.a \ src/symbols.rds \ inst/unitTests/testRcppClass/src/symbols.rds \ vignettes/*.aux vignettes/*.log vignettes/*.out \ vignettes/*.tex vignettes/*.bbl vignettes/*.blg \ vignettes/*.toc vignettes/*.tpt vignettes/*.xwm rm -rf autom4te.cache inst/lib/ inst/doc/man/ inst/doc/html/ inst/doc/latex/ \ inst/doc/auto inst/bib/auto inst/doc/Rcpp-*/auto/ src-* vignettes/auto find . -name \*~ -exec rm {} \; find . -name \*.flc -exec rm {} \; (test -d vignettes/ && cd vignettes/ && test -f Makefile && make clean && cd -) >/dev/null (test -d vignettes/rmd && cd vignettes/rmd/ && test -f Makefile && make clean && cd -) >/dev/null Rcpp/vignettes/0000755000176200001440000000000015030755600013167 5ustar liggesusersRcpp/vignettes/Rcpp-FAQ.Rnw0000644000176200001440000000037413555555203015203 0ustar liggesusers\documentclass{article} \usepackage{pdfpages} %\VignetteIndexEntry{Rcpp-FAQ} %\VignetteKeywords{Rcpp, FAQ, R, Cpp} %\VignettePackage{Rcpp} %\VignetteEncoding{UTF-8} \begin{document} \includepdf[pages=-, fitpaper=true]{pdf/Rcpp-FAQ.pdf} \end{document} Rcpp/vignettes/Rcpp-sugar.Rnw0000644000176200001440000000040213555555203015705 0ustar liggesusers\documentclass{article} \usepackage{pdfpages} %\VignetteIndexEntry{Rcpp-sugar} %\VignetteKeywords{Rcpp, sugar, R, Cpp} %\VignettePackage{Rcpp} %\VignetteEncoding{UTF-8} \begin{document} \includepdf[pages=-, fitpaper=true]{pdf/Rcpp-sugar.pdf} \end{document} Rcpp/vignettes/Rcpp-package.Rnw0000644000176200001440000000041013555555203016156 0ustar liggesusers\documentclass{article} \usepackage{pdfpages} %\VignetteIndexEntry{Rcpp-package} %\VignetteKeywords{Rcpp, package, R, Cpp} %\VignettePackage{Rcpp} %\VignetteEncoding{UTF-8} \begin{document} \includepdf[pages=-, fitpaper=true]{pdf/Rcpp-package.pdf} \end{document} Rcpp/vignettes/pdf/0000755000176200001440000000000015027252146013743 5ustar liggesusersRcpp/vignettes/pdf/Rcpp-attributes.pdf0000644000176200001440000031767715030755311017547 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 3676 /Filter /FlateDecode /N 61 /First 502 >> stream x[ko6B~h7%-v $yL3IY Vu)I~ϥ$[lGN2-z$=<= zSBzSaY PY/P{ POXd)C$*O )O@Nzښg1 00AIY)Qsh=<Yk//"IRB7 #)ʹO /IA%.t2P7)hCT6 <=t5[=5EPô@hH2hj ) .d)#$A4ZC Ёe5 (/ddQde YxB $kJoF"7Cd-z2/ǎ*U x짛$Wiyw/IjfIq|cd^$?C{Wެ ۿ!Hb ۃK. 0Z1*q ߴa||nʻH.:6/& w\8LJ˫qT0#d\9gi5Mi|U:EmOY}GC_{,+\0wղFx+7W\esUU7W\ms ZYdZQ2Iztr 8.ߓg͡<^Vx OQc2E>>M*He/w3viUAGO>@͎Nut1]՚ FMjGY;P ƾEcϢgس0k= ۵_^V/Ң]ٻ ;< I\9%Hh31e?OcrU^^,2o{sd?{Î ;eg9.7l__ld$`闄]%b +WIR+̦e,_b9}nOEUNMOtVXJV&_ LXŪ"IXun')rrjHJri|Yu_(SCGaH QN]:.APQZhmi\'ǎw(~K?JI~g,/pC#HkA(4.[gg> T!nB @Gip%k= 33h@ᆛXn ,'\z ҐX!B' !QQjz2sQC]zdS46ljˣzh렑E FsgKqgiR-Ay Ǭ!pmWKuwuj _i2|ͲIRHH2 e(T3WSk,*C ܃e쫇e?w܅Гr6)GGG\#kΐܵ೎+ѳ|$eL5#}WI5Wm jږ5ksv7S-Q;wOqz;GY4ĬU,bYs`Kz9 jE59. PlA)i5p)a!]:Aid e(;VvnU2HT4{+ЬxQmE,jc3 z[ٍx/j=i[ȑ.pOth,0ub(pgU6mCgwGqu2ѳW}q1:#n̒ǖ- qnn@8uO᳆HR 2.G.FpH7nthHó.a۩޶dBuJID`h/Gƛp-U{!بų @"JhM* Jf ̨$'0q\ypr&e "WAQ'raoub9lEH펪A`=#|۟;<:ʳ/&epr Pi}C}R}DfiO;b W  i!ivsխ4Ϊ ć-w[͓пmM|dTYHd=z[c !{._gߖ/ڶrTK>EHM7YZEbcFWJ=ޏ]~\pMT?/.1 ?Ǘ?O77c|bm }a@| `'h}?{BǞU{odJqODͽ;G^{ =x*ٹ}t:x>kV߿eǶT >D;R-b.;VrZ%j2iW>(FNΊ6@1ܺgz3-c v2JҿŸg,/ɨgX!\AH>2jق֡Ss?3-A ƁXקs-_ʏ`uSZ :A^#_k#d4X;(hΟ3Ԋx@ײpxf[V _o|,@Fi񟧾XY( Alnĺkvڄo7:1_A^+ifN?l|$hBkB8:δMolTVג_`XJv{)~ p%,C frCh adta[nact0Ȫ0"slI;" qȅT+hgI3``ZXkD~dC:.|Cw?ww.,OId9\.`\_._/~r:U," aendstream endobj 63 0 obj << /Subtype /XML /Type /Metadata /Length 1658 >> stream GPL Ghostscript 10.05.0 2025-07-01T07:55:37-05:00 2025-07-01T07:55:37-05:00 2025-07-01T07:55:37-05:00 LaTeX with hyperref endstream endobj 64 0 obj << /Type /ObjStm /Length 2766 /Filter /FlateDecode /N 60 /First 501 >> stream xZ[sG}_яIQu6!Ac[AL`Fs \\㙞ߥ5N%4XObQrxDpeDH.SDhDX!s4DxX"<c9yAdВxIЖJ)5Q: Q{-Q#cpRNE ܑ M/hb@B4X3@lmZ!8ᒴDJ aٚHMu'焝PTxaQϻt2+VZ#g 71e~1z*9fw)yէeY~;Ѳd=-sc8ws tˆ)/YLΦ~vTa  ݁f;88nB|bٖ0SUsU:n%,C'f!v*L &CeYN\VRԦ}ÊݸZ`*h ,4ܕ|\ d%LZ8Y[Cp*sS }7#f/Tտɲs\eU dXyiZ{#CVtInH A=p.gӦ6g}K,]D46ZE!H.;[>o6]UF[!I驕)Hu-MN CTur춘{+bj*Lk9o.l}x =g*]lE* ka bW.G|4-;4N]a(oo]xqnTbfìj- ]r ]7r4:*GG4wg1}]K]j"ڬuf&h\B7BSS3N5DM춪l^[-ӸiDԾ1 A}}+ދSը(vaҠםؒB},x!:ً@m-yIhEow}L2Zb9`S-rI.ɒIc z ;ɹ"!:JΘ|`M3ARj1reC.1 @嵴/>dWN{3Z -ۤT؍a|?YKXfnT++<(=:C~ּH>g2Z@N<{gO/FG'%a?우Wl5پH?-gq(c,e<& 7tOn +0/ҫfAkxJI`Ic[mb,qq޼:^S4hS1EHyQw옝7l 6a d+fw'G"4]''X4dZ(r?ճmѷfףd|<8aO',)<]_ӁrMݵcUi$b-Ϡ=xSvKNԹ[6eb9_uLR2)QV4 :&zWvQw(/o 5_^l Baxby4iZ֟b9|";jb[O} Ygیx686l`FƆPհYt% C3R}ctyURΨX b1Űɀ_ UчNܠ 8,XYkzgtYpd ;b]# 8 Ԕ7Ebi>1/{yx`gn]-?09/b4~;.q>^,ǀCbE oJmoY7Lȅ9]qOx@FIS~yh!9G#D~l-geM<ϒ+t~DqdtI_G 0_jgsDR oJZAȲlh(̉yWXV&t|]8iZJb66o%"|3Tсu=gD4D:ߴ 2 O4``qp_ޤS< 1~@_S7Ou<6xU*7:Ə5:P+輠1(t)]|# a=:jmΞ|޳훻r.Ccajez 1X>c^M#2YFd+vLeQKк5Zg i\K%=sr44[.[}csv^W)ϧގ%+$7⦘ 2[6cs6lӻU:YMGf?޳fBՂ{0˛~`qfsρa+ӼS󓏁l}D; 6D;J;|[Ziu<}gEg̑Ʃ)- #.Ո\3%*}&Ͳ(EZeyYip6l]8܎(?u-M~rdvU,f">3*TƦF*]endstream endobj 125 0 obj << /Filter /FlateDecode /Length 7154 >> stream x=rHwEspڂQ*Fx1g "!m`1UhD(tAYYo"gYNra|) Wmf^vY۳e1,w۫3?)[0Kgoo.׋f~.Ν3٫`yvs-4/Xw*kWsP c^ e/ot۳y܎gjaL; 3?y s\Ϲ^uj9aLFX sLRHcfogY9!x_fɃƏ}O9, eU_znWcxhèh( ~,+KDmZwXܖkV1V ,r&sc&c EXP*j,c vIy{Z/U"Pn}(ހه9nWM%ós\ _GM߬jYAIY}X< ,@TN b_Cu 5w\[T3&+wv~β]I=OUzdKY.ZV Yݬo@ζ׻S|eW&MGheZ_qj^pX&i!rɢ9WYM3Qp岫 D֨ ԨBrvۭpDrIZW-<"qѲMCX4x깭~ۃYZF:5]Par%k{#``ނ?f{ds b™;cp q`RWbUvޅ]64aR}*kF Z LpɽUٶn#SEچ`s?Vu );2X!Y~!DFDIfrA[HK0<҈,#3CHiOp2U[nw~~E> ]OS5F4muޗו? \m܃j$ STB0Q;U IGa:W">ޗà ϐ-ICѪ``J 8e0n.t!Jt,~[,^$WfO[qB*VKtKP)\ d\1耵^pFv^/.Dr,V`8Ito21 Q9;Dc6 ikR~`- \ #c|BwttT7v/M T^4}pz_-MY'ĒiG@||^`9 !Pm@rY{E& PB3L`zWxUXKxBhDiAp^GaM҉\iL>&)CCOU_׫o[锘$z=QBZ]V] U+W'{4P&Ev"-.&'W>C,gٕ1oa |rDB^;AIٷ*U7u+rd^59HH&HyьA{d}UvIS S!a 4OTc3O mN4wƨ$}3l#Yᢒ1R+W'y|+.UM3\8Hc)|:¬/]r!DAz,|Z/z9h8,4[ÄƼՙm$0/_V악еRgd{-țY%b Fn_);d 8cGhN'A {jya"S^ӫoYRy8%X##ӮF΄}  ]Q}(qVKŋ!IO6{O3RqY- jy URh?z"E5 zQ(-M^nkT%LYX6p r\\7՛ja44I+ĻwUe$㞏!x0s^{ܻOI' {Hr;glQbp:+mW$UaZ+̻ D< V>XC8Ou  a7U?d(*W`ß'h iWfh{kXh{Aښੁٯ5ȶ?x a% r@NUCt?fƦ9t&t^@a]lKn!P"QI)u]m>gVXq ȞKh14t*O(~Ó9 rƁ1r[9v/ z&.NY7a1(PͿe cywtg$pSoèaCZ߆uoipD|4 s]*Μ281U<;Ev`u[.~rU15Q&x#(5~dp;Å!Ͽ{mVwz],:>>L~|ထY:oGC^nIom_xw"_QѲ3 %'YVvڅ7^$Qg]oD`p>wvڠs=}}^}m\ go nfJjkek6sMEf GiA, R(t| jOGu ~;Y__ qZm׿Ef]gA}f^VQ/ |n oΣ$y皘8n#*s,]YfCL҅Gg !z9_5!sCĴ#1AGe@ǚ4YqrI*ZMnIZ_3+Dzc)pl7yDaJ"uӼƥaO9ퟲ}sq_ ܸ,rJ u8B Ú61K7SH%)LO2w'1uRytQJɀr%%XIz)b9.j#xbV9pMg# &PJ |wDU{jGOĮd[icXd~k\>LڤZ#] u1+Np 8-q@~5ѩdbblr NP1~:jGMO1d^*ND+>@[ Byb/IɕyJz㉔W H)/ဿ>M@Hyuf;zZu=Z<*H *HD$"L<%gC`VAK4⧩B$0.N|y:>Ot'rmH/2!\do?!uN[1H9A:'zrGOXD6 -Iۂ~ypSu*m۷STOcNbC+A: ]j]ϣbՅ~5p*$sd#whhwW|q*=!)8Q R_&g#Fƾb`m&j6S9-sl8*v omCMqt 3 ?~ţQ[+sޗ\mXʬ?tႳc?;$,twE_U`Hi<]IYTv6@6kZq}T]oWh}x:zE k/|[Iွ?X;-roq&0%mֱbR ح+3AaՍ/.|{{8i437<\F#̩ !ٟ嵾g߫ Zi} }~}{Tiz!k.( 3= LV=*J-_}:_`Mqp(.zѣjвcz}# f_QUOk;?e˞KsXΥch9:4ӡ2t/IKbu_?j087Cx/_> r` iаlKLKM*uwi$tIX_zg.OPȥsԧo6#ހj;x TJ|"v~P%ِfrC0UL0)D$e:=ҳo`ܾ셷eO*b"c2wq8$ rex4\OZsk#"F;,G y>8jS8b2**esH0!z# {kcRxMh=pZz6ɜCۭb0T66:6)շREmFV742tżm6"$#eYԟ_K(V1g8{ȭObDŽf^s*HnIӉʟ}ٱ_]]Ep1~HI70zJlVmQ>V}u bbJYCã_R_sE= \x7v,m Dd\y2&vhZ)S7òpݭdî,r  ( 9x"6ҟ:%7G;SiJ6B7_v)o^ah왋'rt4DH6zH$Bgllfl{m ۞WN9X=oߧ.@e*OCٳy6[&赃=)~Lks1CEkц݅=~(1M{ vMjC ,f4?#?Gq)v[FfrN,Ļ~h+Q\tM+mc?^*>Tk\. endstream endobj 126 0 obj << /Filter /FlateDecode /Length 7379 >> stream x]{sƑ_ՕaѝpQ%4Tr9.HZ..)}|3 ؇WJ `=3=ݿ~ד,e'>NwOIybRꉫNJ34Eɩ2M~_Nb>9II۲lӌ䮘6jc %pdYlƾk'@wO(HZ!)T\A[Bsn]k%Ks)=qZF(dYʬmy{Y6er^LWUpԦ(+c?z7TK¦JM`& $O`xc.؃Ǵ5^ti? 6OYɅy P R2?iv~t S{P=LEɔNNO~Ŝ&M D\&/ ͢tAg,Iy0RiMb=`I~q2UD2&*O{ֳ ]ĝzO#g4߰_B=ZnNNBH_b> " NOOPE I4usM=} fi66c*InU.Z~)侩V#u/1(-{\oa0 ;\_LӸ+ +Ƌ.`+EFӢuLb}yRez⫯M|P6 SX_$5"lZ,?(J =*N0%)mL@ ce9-GVDM] L!dISh9m^/x#s:{Aޏ Xp9pz倔 eV F'樀1iR j?wT#d1M^'}>|̝q;#q/m#j+Se:kAOa~ Yrq`V*صgݴ\ҾHs:e&.rLh0uHv9/ ' Dq@@$R~=8x!Oo' \j`jBipSP i!FKvJJ^خ V E*E]Kv^#E j1j1nR1L0v(*5㥮OS^FstH L I[4t4T@VE?F=`i@~E_FeqO D(o=k @ic҂RCzI`DԖ,@f2NJNJ/Sz0Z%l*2PkG큳T°\WphY5[@.[@d1PwweD zs_62s{J5(ؘMvT-Q+E(d=5@sޝl␈GԿO,`q**am5/wxP=ɜT$|w1O6a >72"c'ωmGB+"px @ :##Q1Qoc8:uHaGGq'Gq{.6QSC :Uz$ůE/=ƅlL*XR>݌JM,Ku, \mA*S0E/'tΑ` }}PשQIqYͫEm㈚ 3N˦&p8e֣)*=Σ>*:A"9{P'9@>^(ny9D0}pX[Lp!@+•c9N+|~R`׮HPgozSN߶[_vE?km(x||xen:t3]Ax|g8@ Rg^MU(i^|ȻrqV22܀A/MezW%c]$_Azge\yȁC8ŅoXԑO,26ڳoPr9A,/iq93@,jp3`3  o5mK|O v6Z7F xEn߁5aKA=sj 7.9h;hY4 &[+ .&,M{x$|CؠьrFawz})6<.(2`/p\ΎKFscQHB4lwl3(zTf!׮%;Jttgϰ_XE(X5L"|z" O8W6^%G9zqGFAQ~,E[4;^}ǒ -AG&^Kcz|dQ' *+jo#^j3͆O2GlXi:{ַe/s] y u%"+t]JҹS7οs]k]&jVΫE (gB7ws6?z}g`w|ДaLgTC&Mo3 YrS!N{ՖIA 8fTuzSВ# !+_Gt}<\<&=I>kBH{y?K]BB>| GBaAtSQxͺ8\Sw5c`^Ĥ\VMu^9 aX.݈rj9\iuW`!;*|99!h2]Qy˲|d.^1 T}~9F5l d~]30@✟9z` zi&k߹F9SvH7~nF݃9R1'EY> xUswm;`Sn,hL:~~qxGKV4ֻiDv䝢Dz`28i |ox@2%`=ۓdt 1f%sCBNb_zIN>m@@V 0$q0;a$ScJx,M/]&t P) 9w׽, {eDpƒ9}HGڼJ %@Sܙ̝E;s?q^_; |Bstgv~7`nA֎ (1v_,7Ė@h h%bt>/6zQjWtxvQ s.yS"\c`qv+:эoEBbIY]0OD}Ǐ޺=/$y$s`d; Sa}j@^@C::Q1 ((LyAlP|N[^c3reȇbhuPc]kt.v>>6^&{%eٔ;N+luٗ_~{ &#I %;\!%,Ɓ4 52s,mo슧Kr`ѧMewEwÑ=;Ԝ@ጎnԊ`$BabQUuY/ "|We)2wc '}oEDZ3xhXR0xU[ UA=*sdU:(j"׽q9"c2_.`؊j@^ KA /h}>=dcۥЄ W`Bq>kZ/PWOٖ*AK:iSuŻ L Qo7fB żl Ii)geD d7iY9z_6VbxV?ճ꽿6g.nODJl i*ҍ==TL#"R r9_ PCz0YFװyaMսcrYMg ]j8aL/Xlb#O`Y4 >xLJuQ)؝Cl"ƻ[>oz1?O?[auHF2m@;x,ԁִ#񤋋x-EY|ݣS.*L~E#y+^;N^ĒB lc>).M1wL:r<`b0G }[FrH#>4ʽkI,x*2P8TL .xz_}@ݺ}ȳ.E{W ,bs~Xy;cZOǕD:q WsJ@l.س#iT4roܻz|͝]r cO<0_ڔ+@oP9B~w,kmK-1 cU !Pąa h?ղn\%Cxn5Ǔ dP-Gu>N UXU2=Γ_.g;O79)Nz'IL|]( u|*L,>r0 <]VtQ.'u޹8󤞐Uc'|Hĺ,?τ;?T[t~q%pFA]]v;CzNS@>:݌Gw/Y#&@6;O|NW9L3 + {W2;%R!6lcTKminp*PpRD6'N%Qg`;ʍDt" .8>=+glt7*񴙏XX6+;.%_&.ᅤ)Gd$)It><^9EfBHE}yfqյǯz(#&d6yjK,<Ƨ+]ӫ:`Ç C7>+l>Ppn IeD\.OiH6Bɿh8ͳwLgC9̓u6OlA2Uү3/r]^m1N#2BQ-:!~mRH0yo&CgS vx]Z Y!q/cq?|e9NY98sg@d,/,T`֓ۢy(3o`x# r@čԾ:1%Xܮ[Jpe꿵~zUBEȸ- 9%0tIN ZLQ>{S1qyR ;pNp͠p%QT4e1mbp辙..BKvۑ_#'qҜ1tsD̰Y9lݷͪS| L/t:0oK}A\5|Y9u fП50 %i.vIQ1HEAgLq]|[1"L>EŋX0Puqp¿  Ýtj^ %MsReUHY}ºTg ݼ`; Ï$CRwPGuKb)oLd`pk捙|E}W]/*X߾72f媨mpՂwC>8h;蒐;v?뺘{)&q{gӾ|T3$;OaoEl)"eѹ#M{o}T.sS.+el[eE aP6A^Y; B3eIs//$gwri^~wxAU-~A3҃~ԷJNEBY!N3>DR`ҙqJ6iW3ĵ zTC>Kmh.:#N-=Ӆ*Nќer''>兣h(f&;?E@KqZ-ϞMKGbtr&d\?VpH'okEgِoPԄ0ӰyDr6+P@Qf͟T> stream x]ms䶑?Be0hUٔKvuvS.j!eH`43z8Wh4nϲe/ϲ4+$FMRȍRRu7~~3o>g_L(}L@PPE~v~&ai_H Wel\AF$?lWU&O+m_7,;;@JMʙ iI^_?g&3m?1 J21כf@4iQI[UidR7D~aP0A7{]djׇM \Icu2j,xrUɢ?{eo4K#O62cE^R `PuMrO9O:/'IcYsLP7:O k7CTIޤT)\"cYd?!m; F7aoϱz1]$]l\zwY(dT) C9T;(`HEQ]08\>KFĕbVysX`օv{pq7Ā3h8`:5Xݎ9-Ko/ @G);P7],2ƒeTA`͍΀V;@\N-KI.&᠒Xp$Yʾ']pyEo? ,qblKjl}CALҴ0 EewǓۥ:f*uk,!a2PEʓ(P}k;ҜFG,i+6*g+Z ȓa, ;T{RvU0PVuKӑod$XkH$fhpη. ɮ+L{vRC;`v$k\ rF?6x2Kwf : ʢfȍX$MQİU /qzF݈s*hG PqfюjL;u̢jE[]Ϭ zq;)9?Xo=?KTeX1sZsz#c9aX4%X4"f,zDN鑠Y z[άE\=l1Z+yEeSA 穖1`5j3(I\8{*f5n.47|xU1` Ǧͮ,A%Gi*T^{:1=z ˛9SDQ բRL[j X>Mvհc]IK/ Ъ*bvxVs:(r]6vթ`YF.TQw\\ V;ޠ0I\נxAoXw}Hf:7.N4xB1RW/FAE5٩AG[Z'zL5Y (;?Ԝ}[|#+. P&e$m59woL⟲Mi̮ XmJ+?aTsSnQ}3cF@B|nZ 2R"ԫ{DR5m0Ulq9-Z`3,ڵ2u!w5%P6aLl"UݼsW'MY7?ޓQ@BIj}FqFs SBQrdOE<_~` JҷFlĬiTnKsk_?(I]`cڽ%UQ z}&TY )0O Irc-/< IEͧY1ʏeZ*w%ec4ӸrqƴL1mp/(1K6'T168H;i9sF8ŴiθOֵ$a*0y;m]{Du76Y=j6ֽCgJm|^+C78 ŌRi0c :d3VL hr$}.*p֮\V>&UԔaI}msA喕}YJm7Ӿen cMUzImsw. [F_*eVby&pK[hGUN@Gۀ 7:h6 5(-rdcJbY YfQh_bĕ'|(ᵏv$Ɯa%*. 9#1.H1}vW̙I_P;2E  J; "2;nkShlNb-m"VmͿcs<&\4ʶ};=UL/Q>%26K@;(U}=u'RTdyD@^TµYZ-}j8P:mw,|F*eqy|?+3 y<e<N'3!PJ윩 0_a"gwBh}:4;."Y_}%(a,q1& eDc=&ͽDd/.*pǁ+|^^J]&Jh=22V[YV0/04)Q #Ms!(:B6W[P<_U0WԈYCȭ ^cN3":mg51wOƕ)ܕc lZY*29=6~ PU'n<Pr|6QWPGLTl#^v \%"-xr1ԋ1'w` \~KYYv0xbOAr9Bk~\^ :l>~&BTa݈NauprP'HC7Aѐ;X)0TG)գì4osf)9v9nKEg *M|P%hЌ>NJ0ՍʦH)+VM7|x쨴 ~T  + beӴv4_@ǯˠ4STthu|=.m%4|06MͧLǣS8S}ȗɓ_N\N1ӀCZw%*@274ƯgOYBp0 dj)5AUv |Kv G3i8p]0u} [hsm0«=Yu/uNǢd,*3r3+Pˠo>;)d「IG* #g"+Ipj3IkNc9Y%eϢ21`#%>2O泘c;IP TeX̽TC˿ #"%)9²y*lq<7D㟺#m@U/>f`ئխ5Kp/pU>pwUlكI8%+<x5 i TG"ѭ(mяQ 3i{~_K9  hRNO HH$hlVDf!1-1$3A,^2'ҤJuf_I<*endstream endobj 128 0 obj << /Filter /FlateDecode /Length 6917 >> stream x\rƕCB_PT9h˱억g@ ̅jww_cϥb4/e sQ-G󙠿͖G8}G.ENϟyёu4yE>>TYg*so mz|lUS6*Ej[U616Y|۬bU*鯻Eb`ϴ ]<4eSw_]Wmf.<͕VGeJ8~ z uf_D6ofzUDK=hyzI:}WcaRYU.őNBʘUsy_<;_1ÚP9,y) G@PPoa"70)P\ ;[j0 V0ĽpSҁD\7Wy7o94?O_z=>mb rLXV:<Yɪ<8q{hF%9L<[h>+Jܴf}zN[ ;<r< .Kx42 saģIVx>% ׈>ǿMxd P t XZzc𫦛 B/@j!Υ}>KzZ;d v.i\2hG;M[F,xaf]u x?%A%Ʉ1*b |t-w?ȟ9)M($N02 ح8_X,QV/O]u{V =~ŶhlVo6nZژCYOfm|/U/ͧ~YiݬO$;2hI5.8oI"f$9ĭ^Xqz ue؄7[|kxY9EbR|μ[}@Z/5*5xDtku,n³ή#fyOu׃~ϰVI`aZE]zGm|0yP/Bā6~7 ܃V媟5k&v9åky"dۮxD !r) d=1ӯq[_nD2[twlxy rspXB|>P$fx+d,K]F"JF D|ꗡcFGn[OM0? ;_fU⿱g  Zſ(?O_m!*hlJuPmc . <(7.H*\Ad "|!V73(PoxD=ē!Jn7l|jf[*5U!wYmTU:.@o esG[,G+Hh9.y0<&UJcc hy{/JY1F^wcJd0~e lL? EGeS lIIOF7H*d'(4Q ͟ (E̳W`5,]hb Dc+j]R,qP9W휔dHh7k Ջ1 MByg}gVX֌V1FnyBZ͑2ephoGbI} >B;2ۚAַdE `Y i?\l@ayPdbIXG$lia2nW?eEdEW5Pg&?T:$cq׏stߔ0+G}ply:6pRw7Aɸ̃7/_ f2 &O(+~*i4 PArlLP]\ ut8E;|SϐG"?L6$zNمBEdpI1p4wɡ"hSA"׷Z:Tx2l q*􃟉F. J]'8.7x"*+4`iQ` ,\ՋE*&AviQ'"{s2&,x BEO[`)V@H!kx0{#t> P!gJTUHG \@~'ǁdc ^:`3yFj32fH,8͸էnetʵc>> ?~7c` ?YXSGҕ~:yIfި;:.(79"9o ǀ!*}Jm ݛ۷zatӰ>B2kȊt| rjgb1/wZgH<`ׅ7#OuwJa 2޻ a+Mf{F!%,zf֞5Y H@Y6æZ*`xPo%E+i840f] F"eS97!`Y.Z'Ŏ `J&]nb~RX퍉LcLDiBK zo;9-TxS.6uC43' 0@.~3[JNKң"`2kPWj_}pv0dH0蠡t=Ts-htWCҐie_^|QxwլTxB)*4Gv•"JqrE쯘y7dT( 2,C)`XaujӏdR1V렔Wׄ]# iޤ7P* *IxB B ~+"mWAJĹ*:┳fl0AanuL}S )/-귛Ib]~9K v{8f 2`j Gz&ĉ.&Pý>. SdC2Sn_d'J#:9.߆Fٿǧk +hB?Kr :g>P30t|-D'w&Q׎&wz(XfIS>W  . /MwSޛPe^[,E2Q/ L1uxNh*^ 9*sT^ܜ4$-l2EZI a Zih}_̮]2Jb90ͨHk\۠eu͵!"phӈϠ=XkAPטa - /%7:ŭk#?6f3 BF!cTr" e࡭Q Z :WbAa$"rMFBEnhbm:}K'V+*V|>T6"P?Orc~CP0;=QB7uԖ$ >X`CGo lĝd uv "Z/#FnXwfAOr4ă$j=x-_>` `PiE8 Sz\Sky-GmP2RvoOڪ8私W]T]P(|k-*%ï5 &Z'y_ TLmExyťW|Ցf=kUs#]]hMqx)߉4@VJ n>MBi_d4a,iDzAS?oqGr)i+6ȕMUh+([8De2BAʖȸTOlӑW٦=?: n/y0 C݂IXw|!V8@Ye Hf`o^H_b/<7Y$]&~kcꅓ/o9mxc t>s|ˎ'#P%$R1no))ְx5T^  qʅrKBS22઄ȩ k@!=0ګf>Nrqh`i)K<4eӡ !u`$~}a洿%!c~ ZOPe7=E'Vo߼?c**Wt<!q%;_797NRH;9/_–Þ-xLeS#oY}Xcz2e7yo}5uqFܨr@~q(B ˆc*AЯ~A_CupU_ZgÝ-ڢ1Qjx!eI ʏY)KE`Ps$J`3n e]ABa_xt٥qͲtTt4>DEz"tB龅P0-EȅBl_^VmLcY$5YMu @l:PVNuE1+@3d\ Im#HB^Oc}[EV<v;q"rU2ԶtNm9{AsjpX8k³#_|~fG}*Ȗyh _|s)C˕񹅠nBBeLMP6" %gtDHnb*l"cIqW+=38xjζ:=iv;A@nH[ _d$ןQL"KKX ʡ[IB(]WԵkQA7y-q 7eʂio_, DI*Pw$P9ېq;IGxK#EW#2;$!lua-LBM`-8~r8!!~S}c2Е"Or3VEaݚD21ɆKӑ nHoG??Sq&5eqe?=EPii]R'E*7y; M^2xsy>0ĽZTe[`08Fb# h?>*FxJ)nRW7sRu;932 OЄAPXx6-r!?Oy~xt B_ O5>ٽ$pa%hpjMQ)K3 *li9-)"eTs6PoŠx3C۠,Τ+=Gw$hr;G"~Ddɥ]n}Re/ 5G-psd,;Y oU~Wgbs*SQ)οJF|*(|>ЈX _X K% 0%pJYf/U*jOPтB񌆒ic ȊnJiH-иY >,"Cw~n |j*:|VXE/>;U;RYd gH5 Kn+kf4[CpKʓ3&CY=ѱهEo]M.qӄ,Lꑇڙп`kVJF'oZM݂-~OۄO 'O)`Z|.蹅B@3* A=$6) P= Ih?4k+:sϨz *#xH,% w]l6/^Vt@W''tUAm~ť?@';p_XCgjFx`%3f1CQx. fqƗLlտ!X7Fe+,x1 i}Umendstream endobj 129 0 obj << /Filter /FlateDecode /Length 7803 >> stream x=r$qhtUL/*h¢ 1Fcϰѿ̬f{X`:쿞45;ix9~xqv.剭ucՋv7:ѢLUm>.n_i- =Er~;u_n6vӭ}}s2kY>jo+S7UqXjPWv5b[Q}6bSt1_2k)wr18n5 ၬ+aUrbz;V]wnؙDHS骛ԣSӮz5Nd*Pov~;>!dC ~tq qhsj9X n Hŗ[Y}X~LClvY ^]Pn,?ZF./I"I$ v vN(cUzxV`l9kQFE%F$p&J}EJ=j}HL(Ym&{dR[ h9CZnΪj}&o8/ =dK>|ߡvDW KI7A 5U7_Ϟt$j=nx$ېƗ\VlWhPP4nu&8^}t=RY @m^TĄz"d2@rQGoB$ 0‹v2% lϙM#j#Ct7lhg&L$M6vJa47U|2_0=d{ZpCԲ9`; 0!*"WI\ߞ]t#C"o8vYArcؙԚ Vd ,Q e4j@MK)0 ² Aa! ˇQ(8ǜQ@Q5QD/,LHs`~# EB} V,jNȼ r:iWo:E+{:q>d{awDo7m0&p'z Jb>9DL)Y. s`Ӡ<@{ܮ8;8|QNFYjnr|6I0  f ^mA8PmvhϺvݝgn$OL]7@?}#u\= jsB}X?'Lـ.'\F' {LXC'E%@M#aQF!4%["U#zU!6u| UɌ WmOn1h7d7xGg@d"UiN$ 7i;g8 ([Ac஧ pDŽ`HP>Ac@^~_ 5$4(osNG;۫^~~"RM_4ALݥi"yW{  t= {Fr>Ea R5 j @0 u'1L8ggE.d*j;jX 6~NFG(K48I (Dr>fC#ikUOp+QF}5^\- 7(W1OۡgmݢGA xOWWN;#N Fǧd{xt{s՚#$j)=m}]D-:w @!9z5mCⱍbB ?|,b1^L{^ır+) vD<`V- N-pmp^4閮O#s쉨6glM!$؈%' ^rn<'z9 IYP!C)"Xg"H Z&7!,S>!!S<<]<=x*0=HL=!6E2ȏF5i/GlO!uNM s:`]RAwtZWK)@ޯ}2`XGg)Ѭ#<5J8`O⑀͊{Z, ̔G߾:蟖XjYML\j C"fσh)0GA0'ٙM$ٙxJ ٮ@Lo!ux46bju1H$lcK6_~qGJL\Ի=Nwt:CVY厈#D bNH B.ƨ~1h}cbdƊos Q%yk0h~L6u0}B>'_ }vDr"`Eie`eDh{k( zOv$?sQ EIq2"hBF9%QƂY`~8WzRea$.j4CV~<G@gEџw ʡ>}-eDl]я!#Mc!]QEh+IW 6ys(s'}.8d.!|ܻY ,yyӮ1[0OEr$a'o[Mtw97B1RF"զe޳JxpN @3 =vȋp?>ٓ@⽅?4UPls0^k$S$Et]ŻbE3}1 }œJ NgB~[B ,;Ԕjx AS< 69J隻R m0!{@wblh$<c{ohOQ^lh3jYGQ75+f8{Q-)t߳LmX }xeJoXx֕wi#PT*~Ȇ96" wVv\gSBzI6*Qh ?HmJBDRƖhwDB.H(YIH`Gʆ9H($ wsߵxyiӽuAilV7Zߤ-鹈[x5t=3~4<8:^Ol9hDmPsPX${{0MW @w 2Λ~!K//Z8o߮r9N-ODdhJ&ܳy~eo л<İ͆6y cҟLl|8鶕Hy) 0[S{|~Ak@)XQm7'lCwfSq T}ocHV/FsN(E2,z;z s.Zb/{ ; U;+ FAi }{,͇ˏ.t QL C`@#ծqC'[Q,T|Խ~Tdhfto "KmxC޷1J W)@Y8ei">x 'tR{:1g, Ve&9Pju]B<s,s2&@DHʵH>'\}}.⋸ݵ$2)IU0JkT}C,TRMeCzzize# i Z{_r}MJ?}x뢘N*VTr. 9t̷w2ke糿Gl w}R)6 K}b-/] F(wP;ݬv'WC}5JN]$x2p>J%~2EOr nM5B$҄J^:@d^?ħJFYUu W+/~7;n 8 NmA> t`cV^",E!(9k)xʋ1I5A_,ukbu=WJN/ot2Ewh &lt BuMhK_flQUt35=hJW|(r]PƇ |jEOEr -qCx=j=90D.VH)Uh79Rq;0&,W3zm5t+Y)Z<@&s, }Jݐ&HK,h̸P9ą%5;rQҰeЁ9Gu|2w!&kӘ&nߍ Üx$z>!tL=5/2Uq;$3bg'YV>Sx_壾C"8KZ4aV#TӐoSJʦvc\ji{/\ WzᓎmOJrkItL'MɿZ5sЯb|&BG2c7/ݧ\ɔ(M]"2k}}tH<_S/2syQ46b_̸@)t/O*+(sg8XE(Z{JV>obBX\pxlTm 'L(O?R7BCC18 :]+_^ ^kW+j/?L 0 ELn-[Q!!S`_>9E=|?6"M㝊,˜EB (E13E%=kTTa=|yb^71QųlcISK'1CEJ3/j ڝ("o+_|}de+tւ=k`.(jp '8$+'\&AKz$ɞQf Є.]o05k2]|Q- @ q >;> zgL8v/It1KD.hU4]thq,f ^,DzZ.!E(}4-՛篿xLqU*;Z F`fP;-n6# kLSϫtCw V&7U=$a|+{mƲ Y\` ~N<r#1.qFx0|Ptk?@WCH몧@U}2E*"|}1n?ߥ#6w X#᏶YD(RNy!,hKr{Qu =ͫxSt$a02A3 Qwqt^M&,еpնlY7הgfm4I-Q)yL|GG2\[) yTwUTۙeG U, .(cjhBx)-@^endstream endobj 130 0 obj << /Filter /FlateDecode /Length 5876 >> stream x\rƒCj< fr$qdMmYDB"c PЊkw'wد{f@()Ḁ/_4$K$Q6z#NŸgOf]>i& ?jb]* 7ɥIse'g׏E5=ŤZ͓gRQH9q:ydYwU~ʴzbU#kvɲeTg՜Qilmf2|]M>jzVM>Q/ƦJI.tdlE lcZ |;<ɲ/geW᫬Hn"OI*9O Nr0+(yqA0ZF<#k,"8}B8>HWҬurt.]4՜;r a.wauv9gCߘrAM낥rgݲUeXqIE_ :?M3\[TfS =N1U7*OWwWlVfF$W~j\T6,&%]XSnq~bYuiM*m1s,ּ#sdH? '& ăg''WU]Q$Z8'7g~;2`܅5:M6uz"`Zu5iRYvGXMZBīQ.U ㍠yii sT!&+lAѰT( 4?>KP[ :\pB#gI~Mϓ{Z͎!Hji)G,ItE~j=| 'ozdMxpѮUo[a I9 b+}aMz7J {cT8g[W' p&wPyx 4]K6Uŷ^iN+pm{E`'EAg%v',"9hZ-+$fph h9QHyxNxWT(ޢ*:Κzţ3 "qG=OE-MG z82B7ٛڧHJ*W2 h@pD gXda4G&7a~ތi4Fgym|zeC߁^wD}#`v._0{AP0c q>!th]p}kIX$ IzKdBˀއH( N(J̠\0֨ATa0 Hj8{T"gn`)F^0~ Mi(\8`{:'9/ϪsPP ]WEY/딵=\=S#>Y Ԡ3dސ'! Q148%'yRXp1'hrg-45`mG @i7Apͩ_&lȆ:Z U9 ) !{%hi[4!\ϽrBRWwqHVΧ,W"չd޴ࠨ!$â'߳}/xřUyG R$%H"ܒtwPč'Q+\lQ\"8Ky8fX=\4desְSKۺP2>l6i/W $([.qf̦";5P =uQي1 SDtchտ@X{_q!;l|DwsC+ N1e!hb]W:ƍ9u1ƺNc]',Uyl(*ϼy{=yD .K>Xo=~t ~i$k "cU@p(!PY6veZŒVlN#8;J:PmŞ=JiҖB?V|Pke1QJ}d ɓ>z}:5OkF{v9 +JAS xjajP {^ϦM`F\8ajtι\w>q=mB2G/\/yl$9.7&t#?K@# _8Xb|G-2B eꠂ]?͕.L,IKNvJȠѩPS#N #w0Hr6( _| = 1 ̌!/P(<@xT2eD,e[Ż4k>T&ZӖpqMd3"CM"pzD{ Hb% ]9oO"b :dN#ީ2Hd+qr]MW+JowQBrj`/S)닯eKU x"WO.y[\r<| #RI^36lS(Q@1{;~AxZ-Lju-MY|=˶D3ySq) WpV<_vlKgz Kg>$;[_e6ySCK.5^M<.d8e(2Υ~q(Uە+ny_vvw6a/^i_ ׎H]>2+$i&k$\b`-<߸q_YNI62CT)6eb0V1 0 \c5ͅM"ru83{K8~Qpe5HS_^Sx/<wTJR_DFBu>J{v%@ ACYv&g8w"rlvIݹGc 튀_~엓/~ճW}ڒ0 VeK 0bur }:9:YOYrZ֯0 a+?Tia+jzljsy&FjLPFЎ NR47F6s ]w>9>f}u<`"{icpd7nRƭ ߆ƍpdɸu;7OBq4K8"]p)|ep:"x'7 8N-C067U )(2M7Hk7 򺽒jߔQ4s5q/PBdԐؤ/(C>4Tlr:ulRl  ?F#'dمBl ͒߻nm&VjB deK zKl~; Gi#sɛMw[Uj7\2~Q$_H7-,KVe߀TvKrD9&5j)\WUhN^_Y:*#R\huYOE9(¦\4ˆ]s\;/L/㢻^=}b5*w LTqQ^_YcgM#e/G/!dG^]_ϩ^<=҉Đ̉b!x&mW0-(YkBq*niYgV![8r ,EP!O ĨTNBos(x~]r3gxVqؖ98^"Z¬l{5)Դnӽѧ(<a2R %C)bLO:X3Ej?ZXoE̮]4M?-gl7 /7zuYW5Jr*8P~#G!q:Tdʵtz`߮˸N;UkY!. Oe mU)Wr%@G{e6}vGO(.j-p.7fOhZk*XV^7, JUz(zLy^'!*Nk(؃ @{wk>uɾNNl*L^]\@'G\8}-i;TD_{4%@@:ʦ"Cpu>>r" YqfpI)V܏(u Yܰ"CT} ЯO О?endstream endobj 131 0 obj << /Filter /FlateDecode /Length 527 >> stream x]n@D{}@7k5v"A(d0%rNb$inC!tC$ @@X-ZdOR]%YӼ)$k7śdMxio5͛MySI4o7ɚM&YӼ)=ߓvSJrn^z?o.im$._w endstream endobj 132 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4317 >> stream xWyTeSFEi)DQE@WDF\{q"QFE@¦`DL\HL1j~wλ ƘppvZB$*2%yqz&>ZsKFY8G'df23Bfƥ#OԳŲgCvI_. r7n\M.I':CUd$j3Xq >F.\{,jERD<+dI.(:ZUjd>ONPD)K(Exc%Z4Oc4j-!U9*PMJR&hyb1ë6.B+MVۼ&<JywOT'ZEVࣕ :b셐Tm}ξRq*OšcFQ9jD$domOڈH]t"&06nr%kƫƍ,iGTnkƚŷ'b bq$pV؎70#Gm,eL)_ &uqrY |IfPs'>MZШX,n ؋N"oV.`D}}kCgȍW;oX `)Gﲆjc[Q+)_vx`cw4k^qSnX*o  fuˊyuq*U,\ޡlC7Ѕ'[XLг"PG;x{C+ :7Ŀ`?UB/-a$=l@ޗCޥF cx;`4){+چ;k5-8mєV4 1 1 &-7OH^"zKzR'K9  e]JACOgevuZXB586Ү邅jKxb {>}"i$9%|@W--d0wab.Vn&yZ&B^3%+JלKkDWc/"u,LPqӣB=VKj_s}`I(H=Ox#x.c7q&%-o븅G/3KՆ{`ڭ۱1M>|<\B&y!c/zXhš= 2Q #0Ri5Hw2ۙM{ȗy;Өn_ =I=VC#K˄IOqcdprlC<5 KC:PZKH ɓx!v)5v{T8 ]x%ڷ>]'=kg*yt\Q8<Os/S$ :йM,6W:}xO{A {[bp4lq&"{!@*}yӅձ/&cc<N`\etzxtrZ[QxEvS.kt&cX"$&?}F(׉4ѥy+ع#OIXUa侳/{D4DS$B> hy{<^*pY*n}7}Lq0HOȅh -'- ð–Krw7x粸 u>jӞ+ps󒻝y>/~; 1Cl1ȔqLCkYqFJ,OgcYuc㏭: y@LSDHXDHP#u̦K̝;Ӑe =)q,L9Nkmf-GڦէB ۆ}}dLNam^(.S~݆[+=bC_T!vEGeL2ՒH`FrLr>fc$.Pؚ'FںX[2J,0vQ[ed @0zD,c?5 |t9{ez ">d/ U֖ݙ2l̔n?CWV>#)DNxŁ{v_B,x I's+p\h~.œޡsZ.-v,fҪ'UudB),-<ҕ=B]ǚ7}Bݫo{-zXN :}9zes'eлkaCת,Dg&%lg0,J2NC@5kGwSdv*1= ^h*!P _l}ɟ)Y ;&JKm`aۇ [{HMgU[F2bHpVaC#hr`\dZ{5ː kK_":}AT6ڃL'Z[7juk].O zjsɫ !7غQNH(.%x8)QKfh ; E/_3K|?Z 8n]$m#<ɥu:Pj-oZӬ`(u#nxU/ƕC1$mmӌLͺ6 Maz冲Mw3`' ˊkHQ-,p3l }g32=[-|Вa8)GjW ~lF?8=ndmΐQmת=f& H\coCX!=A7𸿘yx˹e([[}k a/?AlV?\=~L&#{kd!h> X3ջ /(E eGd҆J૾Q7G]ɧKM O$qx? poF3b0zC|>w7 OW#S\–{(˿.]xi羅YI|(K[R |!iQ2[ lQݱeIhntGWgU./rFL{-FwAӲ+ *^:\{B5]7}%:U"`7:s1Iix87cHHY2ł9O$Xsr8~eh=<7{)eV]ÔK`Ϳͮ 2_ pKE}~Unz>uև[~7 g;DP`$l)!\XdXǨ֢?u5MzL%3q,'c*O((9z܂~r7ꖹ x~ͥkY#Jd( e;!܈e@ٗ(T1;"ڣBfC`bL13Q)Syendstream endobj 133 0 obj << /Filter /FlateDecode /Length 581 >> stream x];n@{7#mE (ri0ErgfdH1F0{|z^~~{\yo}ͥ\C7u8=q;?[mB]Z?;Qt6Nuחz8m9/K9u/.ǫ}T`m= VNEh"δHvնxvEh"C`Z+z` Bc`GK`/LS1אi52M\C)טk4s-@0a1 ;2neɴq+N[v2meʖ"Ύ\9s𺘝^bv2;x]NfRI ^bv2;\N X1dpQ*H QD! U(D Z2d0 C A!G:q:tL=8{`f蚚=9{kookookookookookookookookookoo\` !T:!‘"*O^x|^)u"Ewv:)Yendstream endobj 134 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5244 >> stream xmWw\Tr e f{GςXH4EU鈀hiҤRD "DF>bŞxH܅$Yᜳ3ߙwf$V/J" \/oѪ6>Um0T" % wѨJ6xLׁ`6%8y/`0u#UjV&oO;| 6, sc`r14@sofCž*7ͮύކ]q%_:.޺dR?SwnZ"hJ7+wO-}V7dLK>cƎJj5R(kj4eCl*ʎOSՔrS5ʐrRS(ʈZFML)3j:eN͠,rjfS}(?FiSj!Cɨ Qsս0}5軵~}꿯w6ڕڿ X>tA'LBNM瑬e9rgAA^cy5_? EڝrTn{dw)wqou8 X]߂- -l"wT+SpT'C;?BcLugP|t9ňsggAN1;9iofo`ΝNN+T% צM|OΜǓF2Ilށ##z]4wF)ZVĖ'n)V{{&-%*Ǜћx8,D,\#$Jc56E.s+ t9^^ؓ7OIo N)WuJquPa :R0+=Gі ?b.8AH):-;6HBq#ؚe>TW-r7~`'#s+kҋNS|HN^ yH=jȹVM>q>%gn_;+S*&KRifwOTcMu9ks(&=~El<`X|)gG'AxMDeFLҳ$:`ߏR ~ X} °yqPf%cK IXo/`Xiucv "gyq]̉~l^3\ƪ[r~!Iw-Q9nU x2(82xS(Ϥtp -f&0RRL*?şg7n %ivQFzLdr+-& q'r*'bt, p!"_{WrA{"-*2!-T]N-j&mw<.\S)Ĩxئ+[ ؃L"ч lΕ !A_ӓg 0;0B^  7cSI`8'O4G^#5: KIbeeO j c+O/I H;1a2H.gUS׬i:k2`][{;⦮zF:A Y uA₴@J ${YA:*c23&\ثtP7 ja77*.BVy8<'סZp#nCq&,jRz{m(86$>?Xd?u woV7(*Q9ɜ6xcƣx+G; Ы!߄D 8Y[^Yۨ$_5x38 ]8m]m m>[~;&Vs{=ivMY<"3Y.rZ\.}T5d~3odOH6@Ɓ4 Ul;>'"ּ~c.N{YRW_Q♽0PG/\BH_ƳFkz^u9f3[(ѬNY+ 8B`{mu̯X^qc^=؏,Af7U[غ"r@geW8=ύTXp5~̌7tH@.!8S*oXZH "yXM\Ef4cLOht@8[u i*EXF8`U''M"</k;O2/"|'Rs^y垪P\z cC#YB0y"4^zP+I4] //Rh0jfCM䥒u0.v32Ր d@O%PO*ڒiv2؞F'Y80EM6nl͞Cx2^@ԮvyxpRBzmigIJ諸U'Sx. ۣ 1xX9\a uCKFtOvJtVu^51p5w ڈVo7Ú!L䒡W,lev'S{~FcM O3,iu+]o.֖Jppqa“Cq.O<[(2xfW6M ȁ2q)G8%E,|߈!p%P?#EYa"DGDlCvoe]sEy:u m4|Xe~-qFl#DX[J\Ao`66Iup7u^pk ajY {HE\ȥ>ݽ`kii~~ioi{qD6Ѳi%B$^+5g[^Wv4D f_:P3 W8QsWup?R(\㑓Im/Fȗ mm2Hq)` 8{ӀNuJ$dB9M85*eÃ0Mo'XLŅѝVB֧Uo|;C?:Ξ ja<` ./Yꙭ.MOKJUf*D\YIXMYy1H=@jo絘߿--j^o칞|܄sQ;645QMLQd K~xӘ(Ji:iί5ffbC֭JD!^jV h)3f,MׅRA/fn`cZ~%xn?Y{Lf%8Ù{Dbڭ@XRa_ZoܮwgSq*SQD~K8{e7T yZ+c}L?@G[4Qjۼ1glk7s'mߔ"dBDBL'ˉVw|UiiAAi긇W×$D%nD%@.yI7' n7 𫈼tG[eWWxlxbsp7B5_jT%jMԣD#OE;8 \K!GH&/r";Oޯ$^~I 䃸ЀmA:nҝ=7P.wG* dXYTKQ;ZRendstream endobj 135 0 obj << /Filter /FlateDecode /Length 614 >> stream x]=nP{7?`n\$\? S,}fFvK`D3,|?WuyqZ7;<>۰O߆uC[?ph}v׶{,uWY__jOȇ|׶ttxkwƯ:/8>endstream endobj 136 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4594 >> stream xuW XWמ23*K*,l"" bݫ\ՊRk;hZDwԍA$F~gߝ?ɓ9wDQ/J$ X"+<.-!,1i`CzC8| 2#c#4.3JCJ,-Nm9"l.9>vĉV~;1+%)j$9ILMP$ebEɲ I(i^32}2gff ȍ80?>(avb𒐤䰔sEF*掶aؕ.n;Ǎ`3iYl)ʚ lj8JFR(jeKEPHj 5Q^=E͠hʛr|('j&LRc)?ʅ\ʍES8*Oͦ&P}(cUGPTjeJQ1(s*R5BR2*M$@W":K+W~z~_-46mPHFt$Ag1X3VWn#볡OY_q}?[ѷ˘6mɸ֘'7~mޙMd|eRڿO00{LSLL_Y9qR|i=4ީSH1K&HW*$&| RafMV F~?'^T2҇~e| bRxȤg5aڬY Z )lj]w~(?r}8R񓵏ܪ'A,\AeZQBa̼sɟsA.s[} | {A(e+Wd)V/D, (oCMbFè0 c;O5Olz895̮rݒl5ߩ]Ԋucxĥ hJjD$ l\1Z背Wf7@kGZ2MA,@vj~1="Wqf1*ZZ=#z \.–%͞ rܚMqٓNohCp@ r!  Z=4?gpyOZPCZԡ,haj0( ^{&OrҬ`!mhjP;x_#omc[ oY=8-^6߃6bLx E{o@w}n67dֶބ+z{#L 32(䪼sPetR%rdlسu~09ٽ.U9|I;*,/;^_W6gD/[ pT-:Wź(Kcs;l9h"+i߷A栔-6jÓ `|,A؂0;Co?$~ȏaAOý}[ё{J/KeM>ElҚ 9猐YffZǗ|rEn~zGZ٭x mhٽV:TK%*?]L2nʤ&T}bHQ޼CN9ER/S8Vxr !s*R,'}N3(t҂%IjWbp40is3=a Ѱ~8o/A['6/.w'J&Qe;調?G#rh}/anjdYV3zǏT}\%_䜕p/[5;3ue~`M#Yh/*ztG/df.4kV(kv5]3 |A_)@/p .?z8gD ؚ0la{fbW4XB XI'-/0 x*Ep]\KVJBqZ I@Rx" qGpلUK gpk6vwlosJ(ԙ ^]W[TXEz{6^أ 1|R,O_X9aXԪ~n<ث0֣k1lqhH4c-J ^('mEy(gg蝶M!Pg.?08/먙-iTW9pMB[^945<9cIF58%7M7 \LEK"K4O=A!+b5PD J Ύ]R);TP="MxuٳepdH쳁tkEXyQZUl$Cl,)'gZY0Ҁmd!VFD 2غsJX=6VfͮfM *ƐLom:xg4)YJԨE*nlF)$on@יrKVfrSWƬASPľʌ>;[Jb/>K1jG?)ʫOGꁮk{տ{/~%N{+@ BW-( -2oxE%}Y}'qF[iN1j|M_S&ڞQ( ~>BK5р+gLA_dJQLo1_- Ɲh`;"p,]eĎmw0z2~'cZذt{sNd-R[2=BzΠO MH?zD? ʼ2'.'$Zz-/A1s{x[iAҿ<%64g0 S%DGT "p Q`Ρ5ئ Q5{bkQBpqPr8}p<RPZ轨=gs+A3W.&2'/<0mҳj;&>lPAj菉3qe]~/F~4sR^{eynYcƁ 哪im@ >D?Z1T=kI!XĢ;GLb'qټ J54ѭT*ѹC.GiKc t] =Qn+ي_([r)ѫ*;"=bbF;."!իNnv[9V.*IŢܕxHHJD-L E|%v;휾7wC7Ɲ;5[?4-KL\yl~8Rؖ[aS×L;ŶΖ|GɌw찐rPq-iCq.s"\|AN Š]VۘIȗ0#Ҹ2/4L&=ăTlIvh"VU3-*_lV ;[rӻC/? 8m=+xHT*by)DKbƿ}/idU̖Œ䍤o}bmyc ?;S$%!۩w7 cX3'cn| L Ae\rjB]&M Ysv`/0FB%}r_\pǷAʬ#ȏ?I;?T^7n*M]=P҃2I !c ~92.㋱3cO>_W_}_2 0>8|{[ 8W U/uA'I)]$S$ᢟ/Pt*`ڷNI'$$ Ezk8xI~'i.wbmhx/^7c'&Vkҧ!<Jn0lI=qF9}G09 tL='dO1.@Sؑ l3GG"T Iߏ8o\]& pCZ  DNQ[`endstream endobj 137 0 obj << /Filter /FlateDecode /Length 351 >> stream x]An0E`'R4tE1"dOE҃ɞxz9MVV>Vԯ:֔sn~LۃK[~\ w~.Þ{S|]n9= yjQڜq+0+V9F`c*l 2QY؋2@1DggNp p Pkv)> stream xViTW,Qh["nbpeG4ʢ0 tD0 0@ @E܀h\0Q:N2aF38+p̿UV%Q"hJe\D>P^1MZfPX?n? au^YP YbݻĪ?9QJ z=uM@ôi5ZN1:Fmʍjv2ITm68b86ZXU~!VzSWa95SX2]z΁XԨFwb]kH%KB`:tqJܳJ=QP(֠aHU|<֨ V!8![i}N5$ 1 W$aVMތD h Z$'czJa$yVZzzYQRq}|~Zժjz_ishfYB] ?>0qGQUqe(.zcL2P5yy5ZEQ)*BRk(*r(wʃ(oʇZFͦ|95$(ʆbIQRh质wAf0;{t}wpS:f!lsȱÆ ,{ $`_$aO ڱ7N]i @+) Ė< ?&k^c$Kz1M,tt\5\6lkfx^>?攠Gf._#|Z%jssQC)؛YDoQ 4O Pm||M|#e\zdGhJ^!W*Hy!' 0 Dޣ|t`S<`&/y^",e|a{Z=#xbCZtU>o-o^SI{PCP` $|:74{PP{hU6 '>q~r03H[Y%Xw grKޖTC*5hKv_<5 *u&lށvhb#a  .`%3pK ?U`%wZp<w-Xnq0c$c~tOIv)%mzOAx*Fs#0`2F[$K)8U U=;ihN.u5 #9L5Zdkmc3vf.K u8)nJ ):utqp;/:8.+r2 H2`E<<B%3 &4b3a+g LnQL1g1$&$$=]))hw^dnچl )_fO }DDꉟROW\3s n=G3h gw,E!+lH-ؙiDFۅWwVʒŖp z= {.]~0a?\,M.(DѾ97Fҽ$`6Jc+C <vF 4x4ccv\,&O܆{MU|i%ZZ_Mit/Hzv%_١JxI.aވ o?~B׻sgɶ=;`?V`!qK"Zt"!>ҭY'oqn-`~=Z㻺^^Jw&zG[TǸ>hr ^CtRZSі؉@^o;*M5Ĭt~wwm8H-LMI͎/WC.@.KC=ȅ?RrV[$=D# 'H~~d|7 %`I*!AZд@g4k66vCB>|64v0kaȭׅ!&oC![t^MnIaᚆTj'lC 9ݿ񋉜-U |7jWEΖl#r@AD_%N}>ݼo6j%L&l .e"6iq.AKexrd΅=Jk} JzB˪bLu#%0H*=}Grʩv\ ,Eh0L*PXg/ΓĬ4LuέH%ꮽr.=X}i l$wgj>am˧5;ҳe8;,i&2y,D|74Ir$,at&_Z-KVbFb䲜v"ȄɂƊH_}_Jy.%Jt^+KO(hV k+`ؽ/WלhP~ e3'6.{SKbZkBÔJj&=|~1؆ݒ':F<*ϨK;FU>Ggg8z!3% [_=<~BԎZ 'C2Gn>խ K>Ԇˢ#3 N+/.9ǸiQG, vTFZwao/sU~q0sN &-)0z{m]n.ci(MVNx(L:‚jhendstream endobj 139 0 obj << /Filter /FlateDecode /Length 167 >> stream x]; D{N7\hE(,a\cH1+ ;ie 3XM-I#(\'|t>\z&Jmw"} oOt0E1I 7=MYM?UXqk WSendstream endobj 140 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 249 >> stream xcd`ab`ddM,pI-Lu JM/I, 154kf!CwOXyyXzx8&}"O'wWfFFCHdM#ҢRҼ"TԼT=  PB  PEWϜӎ3~tD:}U ߫~_w@ٯr!?'χ }N^endstream endobj 141 0 obj << /Filter /FlateDecode /Length 300 >> stream x]nP w7~HKdhU}r1C.o㓤C҇t)Sx_i[>NiX:hپ|0x闬8b9^oŊyG[mYv㨙_kW'j$ԬK%!Bѩ٭+ : w[̵m}@+Z vm@V u%Pq=(\ht@WS5Q qB@"?AWY< 0xfA@aHM! A@aHT_s~|yGQSbA %> stream xmUyTSW1WAO$VP,Zb7U6D-& \т(b)VF:Uj;k|^7Ι3s߹}?c3D^i1i۟$S"a4iq>&,)3m h!g1b(tO&5'M|a͚eted23%53*IRդ%*r􌴘d)KII)teZLzLZVjKVŤd#0G&5-=cSVdvN*&6.@aa|lc3bfdBƛlbV0#cDrZ./zP{(HE܈#χoT_ Eky~ .c({sa#^kb.t "G~:2yBs÷y W,{ 5U6V6b1BB1fQl#WP.O[Y 7!Q/(@r12BE,,WX',3'dndžc` shLn3q_eۈIiKU^ +ѩ򣘃|+A`~(?e7utD&/: 5m=$31-;IofXCѣsv8 H5w_r@3v%z)ٵ$ĭp[YĂ= tv N< 7⦩RG@ABi~l8 G Y@Ad1$xi˖p4X~fOW}# 2!@B HMړҒSczWǮtp-OG<""=~33IC!ɻ"0g f5*ё}oPwusy9g,ad q~!\| t݂{LG eT,8N(y$LP^2_IV/m}mKGR3/!}<9'S60ҍ;J h[3Os ~auG*1} \q / qv~v"^eX=G%%FJ>}x6{7mdd>Eթhf#f=z$QtL-m.H(4W#ʪnLA: +uM-7מT 'j>9ߞJxJ#cҞAAʐ.7![?F:k_mOX',˖b̗8p ?'4p_p8e#;5- GC-UG0lzF$+^!`Zk $CA:a~PE endstream endobj 143 0 obj << /Filter /FlateDecode /Length 600 >> stream x];nPD{;w?2`n\$l" Z.̌)"p΀r?ݺL[{~lcnϦ6ӷagm~{>σ:u6,mq-*}'j ja=UP֡**gֱ*#TԉUUAcxz`os!sWYXYYXYYXYYXYYXYi@0a1 & #a6t D&*#De jfUPf7n4qvI`7) &ߤ`RƦ;;6va2r9l\FN#iq96.#ߥTp𺘝@ArR69@ RBTAQ*H QD! U`! d`_M ~9BP!0yhQ(0yh`P01yj הo7M&\SI߄k7pM&})ߤo5M| הo7M&\SI߄\JO^#sucrM⩺,[+_9=Lendstream endobj 144 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 6059 >> stream xYTT־#̝#(K"QD#v l&3a(Cp"W`F4D1:>jL|I_7Y?S`ƴXw8{>>(dzX( ̟G;Dn"gƙ%>bk%7q{427v̙ON~Ϸua#@" i0qZ$ um+eòlWwrq0y24)Z8hdti+VVwp_w.L:u3v73z9sт?Y8ޥxʙQDjj#5r&S)fj eOMRK6j)5rQQ˩ jZEO9Ps\j H}HQ!Pj!5N}JYP#(7ʒQ;(152)j,5b(H"B^%P07~@3d<>#5M )mV :X4cȰ!~Cjt᳇ EψE#YM#3sdx8dԘQG?pyV[bNZS2U6Ǝ{~܀q.,fuWO95Zĭ( <)!Y'~(!1)-R_JY%U|٪|AWMʐ@=*eQGu hY*:#,U$-j'S 8kFsE)R0;AN|Q^JCz;;-.n /ٝ5V[WWq3C1Ad\v8V2'SDzьc(s7Ue0_VZ[$Z_Ax$.ˌ&a#)%4b5]oHհEm@aM:c1:}e[uMPP.6cpqź^Y( snGb hk*.v^!-@ 6nҝSpI*4fbO'a ll `,rwů\8!ī9<p%AiL"nZ<Κ+_P[TY!Q. XA `D/d(9./bG3Q +Jǁ|Lk4Q4538kj<6wˈzez+e="!!=QV/ sU y\+Va "[ sl`TL L!K9"kB]\fn2lnܽr "~nH*Bš:ڇFq\V :ZZZze2N=*gT YR5PFHD<^ď}W"E?`WO.,`3onXB˄Uxn$v6xv[ೇz<0OPUZ sN 0U4<\@,n Ft&C懄Qw- ?^"v;P{Be<{=f:0x>)^E6fihB,މW%(GJ4;RKL8d~|vꈚ) qA0 x`?l!Ϯ `^_T`a\T5Oar=5W2_k 8*~Lؾ}hr[;+1!t_ru[uj4^KQ (be쾘T6; )V~)rI3WzJB/ٗQSJH" y{׍}aJOE#(>$-*-$? %R]gvC# ueegXfja'f7U]|=mv1!5~N-dz_?$q~*1抽P-/Wa9U$aאˌ488Y(C?quG,æM a$ c?ew/]EG|*+Gx_腍/å#<1ZmJp EsQXu3ԃ.NjN7~n"h)r/XaIdUiWbGcN5{I6m4 xq^dJ!IvJRPx<`e$ XJ 1+1 %Ȋ:Z_{EtRqʑ8w>n^ּ)lgr7#)+E. (e (dؽ)vXs5(YJ$XRQPByfe3>ܸߢlc K2Uf(e]vڲeWgwwgӝ\ט{,5q#xhs}Oon;}maIMSB |U< %?INQ]>e-T)ߙ֦ ^Kϛt-Mo Tq"׀6/tCYi<Џ;6KK}XyePOlH&׈L^f\!F" Hjjjg¾I@X F-ÁjƹAU&gb9_ϺBQ*WݛBt*5Em7Qrae(\W8R#J+33.; u"mkCm㍵ "+KJ+۝~cC<(xPVDa76K1$/D?U\t}گ_Mp&;4 ^( tBޤbVOjG,;P{!A-+L2g;7<Ť_@MLrom4g"қ'2;fiK{}s <&XwF7v⚈PeD9OF(:BQ^W^@7Hr)[ɑIBo1"C$ڗx4fqOp?L뗧`;j>z*n<&DB#@kC-е]::CX'Ȑi[u{6!Ĥ?iiz`@}z c(Dž"ay])pI"3PlfèDel2CW.KC{Ç*kf tINX̓ˋ\Qq jE'/0x؂ |,lß -1)) );HHUJi&:0K;iGP$$lH%@!$}gCr54a_ʨ=ۄ Ru0^լK -!^{nzU^| :%džc欔( b:P9J,tz1XK[8xߩVn^yD9"7¬fx/ D_Qp[yvv~.txq9l=6vX*'_QhTYuIGwFt>po4)wMTtd[FH^\ ;TXz~2_U8̹ ܄9r[8e8]Ԏ:ڽP)TA !;JIRe^Qzendstream endobj 145 0 obj << /Filter /FlateDecode /Length 485 >> stream x]=n@{7) $ȥAEn"y,e]n~[3/>R_НioNmǧoVP>]?uCu0}X_ܶ> stream xXiXSݎUhОqZmTZgN2τ!$$d%d"d *Z*v>=omP_x< _^]z׻68p837m,(ԍS?oڏOj5w:S4Ym1Jxy;xf<4;vv3'-zAtfh3&00;Wak"PDײ- (,roIA!MJ<􏤷f'.\MV͗"+tZ%S6ŧ| pEpjjvH;-مzDG2K5X.G7H z-I Z֟QW@HS' T,qvw(QVVztX/U@{K'n˧TSȒD'"*+{^D FZk_↞AS41+ )8EFqVO>'~9\hq0xa> % 3֘젆_ ZUJYv ͻPh ZP"quWꕎҊr 0hI.KGiHpPO&qU52u0x>ʠn {y'.!MP,gM \K" aͮ~Xg`2hm7T\ގB`pp9/p)e6`<&=Ik~NNLC0 SX:!lC_'0Tfii5a)&4zqYrj[f,(ZAfFAąRWZ P_gnf oO!eE8v33s3HYhFl,N`P8F ][xNlE+'jY1Z3dej{:UۨhA^lDzfa!Vٶ}V5juJ5(Jʛq{q>?JB|Q}}#:A3pàI*@%ݩs4{K-\,-jbR%HRyn$,P kj\^ࣼʖ|Yj2xou5c}ep smns`V5ڰ%J%$%'J&vXa^uܯ3Ocvf{-) bIϣnI 7q <|8@99:D׉[}hmw{ c|::Ư& "`\8tub-Hv?2'k6oz5Dz%r1Zs%]6ʁyn@t6j9ѻhZ~0&B7mHUU2&3cdwB̪ |=G~;DǶsu Υ#И&=]+" Yҕ^dji3ujPn\E:qogުa'L`0h{@U.ՖQQ~u2`wKOk47@!j1cwW2N1V 2o@w15rT,W#9fL+DEKCN:Eٜr vWC}ر}5"B˶TnYsr`q|_Қe X͕zSb0܍,p63+@sՕUZ Zx\2ݍnS0S%{tӁm M8!x5(ĝ]ƿTv$>0ZLV` k"נչ@ oӞ3|MذGj~'^?ږkJdS ye*44BzF;ps%;bM 7*aiW=Da_PccKX˞+@2OɆõ?cmh.t&/;fKm:2WTTԕLb~H=p%w?d2ӢVo@izЂ=SpkTlز?2 ii`5Wh=-L5WO}z*ՠ*lTG^b-HtbSSρ.^u,7cBukoB ɟ6DgoIҩj\+jUao;h`BXbpQ@j v hsQ 44zZPFMǕkRG# 95BlzZA.ĝ-7)M ._C8u+葄HIk8CR'ݶ+O]3noLi/ c[7OOELa8k3%{w,;*ZcWlW}1Tt?+Ψ6ࡺJQQAbO頽'+џfѰt؎]6(z^!6G}ahp3xWEd--$OM\8 ʬ6{b!= _ FO}SgG4ew<\sJ(ы/o{+jfW>8_*d1PXg.9}qQKDg!S;S3~>Rc[e:ZRa.^UvW09k[_1o%lޕR,bX;@`em..9@P=ҒDt2hu}=g7%'ƌ4l1'g2+@V(JMusDMns]UzWw-Ѧ|2Nc<soxirFxo}V:뷺?3qkW䇇P1>4K%t[jn>2[}gF?wȮ;Di8<~_#ꝕR^Um`֠ bKY8b؇ymx ܥ>&,z~qn$~'8O]*הWi.jt.J -Ui+uI[ /𨊹*[}vՋ޴<:5M- R*u]kj^L` Aw(e-gBLtuhCepu q&+} 56ώ4iP%0lpոyq7s{𠗕FVUjgnv:^j6?a`P*@gK6J V&U]N1*P$꒘̓gsXԑ[Y3fAD>xj㋀?pgg>r{ǰfh+7|/0ŁxnTSV$^P}5`4H+{,/˱5(<㝧*,Exא}UNIgZMށ MW 5ґQ]@|e'A*Kֲ-_'6TlT K  4wt˷a駀j6KJsOpC(s3҄*!ӗƻEt'氓1[I ]&QR̻ 7GN0)uXgY8ZvhaDgen Pv['}˧[KٍZ-FÙڜV/pzZ#ѬQըzE -@3|]Y"U2lEJljfv7 #Ap pTY~cko0[#ؼ_H5sGb)@3ZuN|NaJ(;8Il|{^d ExO_/Z4lCf{F{W6ڛf#xu~0\kt fvHڏ >q>(itTfu2& gYt^9~qkڭ<^$Thum?Auh|ka:X"oװ)̮?Zwzp>\aQC! \ևp# 7mFĩj఻א:F5lhȴj޸,^/*£HA)5=r9Ä1d0zFG@L;ӔUt:JR 8dv u0gvb3f LSg dҸ5.~|:\ts>a-/ z1SFS& M?fc2mEbok>۴9endstream endobj 147 0 obj << /Filter /FlateDecode /Length 376 >> stream x]N@D{ N R 4 s>#q, PPIϾǻ{Ky^^q~?Rc}fk\~Hg9K{엷P+?y٦mC<ԏ/u.M,]'] p!ې>$`O<<KHBBǐz0Wjr6:\MFg048p1re߆u8ЈhՆ N!3=rvՕ+G^WfgfGW W uevfv4jF'ppGDެ̙MH"g}B'dʜ9r2H 'w/9ߕkE"rr^8B7ƞendstream endobj 148 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3254 >> stream xV TSW>!prxX-sp:z}Q3:5;#!$! @  OyZ]UgZ]VZ܎>S>m׽;s]f%gd}#6R{gB4|"!>7uz(|j@;QJmLKɵQK_Z_GIQ/ KQ5)IQe|ԆEEmVͤ*e4A.Q$Fv$ڹ}ͶQmٹuEA$$bRNhI 2y"u`E3^yVK[ğb'CNkuzMbLkD1XI{ॽܽq8&hT,ݚ2C74*97ba)Rj1$IOw/$(:F265ms=*OGX R&Q+d3q(:Ci-"}, .SknL&EBҗ>{~*I^~pmH/PJi4BՀJfPq܌iZsU=ߍAvTAi <փ,L DV,|Lsqt-JOh-&L=Dk װlch3y[ܝj`d:mg*s7%sQZZX-U)%wrСwy}'CjJCdmǛN߃JGlqʪc?68&%3x 7Ad6Ё#8 fKw![t*< 2.V>"%ep:"Obgqe8VW>N{z[;qJQUTdbDλhV%5k:lX^T}}0mkV]`E|AוҖ usόk760$gRtIFfHl$ +ը7$H;|CYd%ojkw4=ϲ4ug6ȖadVQ,Z\|<L*9p <^6yfz^azgSXֿc`'XQ8 7MCS|nb9bt_n_J=npbnϊ?ո|/| izIc*6I'ПJT함BI+SUj%i!0\?qh; 7껶r}ў\}P__TZRgs3L@6myEvx3?>x ']HE@%@W̳s"qk~;kSsf[U([5UdD2t7󽽃gݒX!X#[{겖V'[(jgCb߆wHE_x,t?ۘ:BK11\"fg"[Q/{qIOJшmⶴƔ4EJcZ{{ccD%X'ch29gN)HIo c ݿy(>; %2D'0p*!'YnUW)sF>`1P'`3dd _N=:2Jd,|UD- H @ d ĺnwԕMڻjѭJ6 ! ]+Jk;^UhP$/=m: TniZ[+`{Ƀvm!*ĠHՔZ2ztA~oY qx.!^|)v @&#ݨȯ6سxO)@v~gZz{-ncؖED6T;)3neЬq!E:[w `IdY.f2p?:܄SP򙘐8K`8NI\Q(+JOqp2g9``8 9NY|:3p\"$b%%"+1ٹt@Cju/IZ\+I`FnN޷YѬ5R掀O6S%%ꤤeN/-q^'3zcP̣ d ?2ݩoh*:@2 J#}a;iTkq"x7dw4PprB˚JObb}%*GR"rEt(?Uj`(,.)Nk? 37χxf393ĻNr;6m,Jݛ* 5[RA*0JEvo2wRh9%0$ru_BauW6PyO$0,\~VL F9"u{g B|3#.N 0YREƑ|SaF0P%(hNi#pڈuk�GWW>c`*tʵ,)1Sj),a`PޣoI-ݲrEߖ ~ʠƞ.{nW8![6{*l M܈簼RL[vr_*ʪl>Y09  v"B"sk.GO|UOZ{d'u{Upcգ} ^G@f%pҸ>s5 }SSM*2݂"2 ,uzUn._Iʪc( ?i+pڴ_ %z }gM,-NVИDQЙ%]o3WFL_IOX0C8*x?%CBnZ-RՕ[C. Yendstream endobj 149 0 obj << /Filter /FlateDecode /Length 289 >> stream x]=n0 FwB7'%%Y2(^@Cdq޾CG&Ari:/8aX۞S6ee)miL-~g~*EikW6sԍ#ÿTWk5jT !BKRhE 6-)!El+6 P6^[yikR(xm奕GZGRGH 4@{Q&ʢ#)Pl x\y`Ag2sDA 2UhH6R]kg@6=֕gճɵ_E,0bEendstream endobj 150 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2094 >> stream xUU PSWpjԤXp(>pU((*( B! !)BP^u=ny J@A@*! JՊaEX[v;S}\Нݝ;ss}$lm$7Pj݆]qJXVw׊ɿkx'cakߴ)4]ʦr$yHLEؐdX:MbR2Q* ڃXM~ER.Fؠ'ujebV06V1.QS'u{(6k#5ZF ܤK+Q˖vb@;]D%|̈́Il%mjBL&$8!l D&_d`QʖMP4ED x1ǡNxihvD奔R0´#AM9>Ťr(! hd~bn}캚`6S ʡ|SFAivZbן#8WIIvY8|"]X:CdlrGO*&%H5bW^c&<|=t{xvifbWcu@e'l0CIZ2Qc6*@;)em.wt5Ƽ`/b1-ӯ=Z.=w7)91-Z*Y› KZG`H*zpT4,a8w t|V`؛:4 0;B7"0Ӱo'کh_B`O+66# K 3QbT "+p~`dv5a%/nܛXp38 $Ynx:ɒ/au^U:Nµ";YRJ}AM42i)ɦH+435NNBn oBa/} ss jC"ISah,5^3e j;tyblg 2Ǜi+)7)k!6mo6endstream endobj 151 0 obj << /Filter /FlateDecode /Length 162 >> stream x]O10 XЪj8(NߗNN>ˮGֱ4%"@cQ`}*Bv7ޟ@n]O$TVBoh)jI4J 6/mR+gh.q\b$Nii 83 /S2endstream endobj 152 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 342 >> stream xcd`ab`dd˷ JM/I,f!CɟL<<,/={ #cxZns~AeQfzF.THTpSJL//THKQS/ f*h)$f$))F(+k9 -,/I-KI+)6d```Tg`b`bdd˾*gsE;W+he+鬪,hf.+)KIKh/\0Cb۔{uϕ޻={tOkywۙ}=lgrqpn=gNd z&r^endstream endobj 153 0 obj << /Filter /FlateDecode /Length 227 >> stream x]A E4ltBc  Ru fsesS,cC ) C BaE4ۃ/W ~Ghҟ0 (>@W1:y;-.W[XJ[9R74qXkα;c!n->:"Xe1r(:bKҏo2> stream xeTyLgeQ)Z#RZrMwjEB (B8e٥\oYC EPQR*J#=lihj0m|F:+/yLI(%H\wTnJOtܬKO' )SA"ِn*/K(DYbTUJr:__\WnS%eiiʸDen?Y2U镕OJKOVf%+Ò"BB ]7oEsԹy I!& ¨p*BmS EEɨJ쐌;E:]zIe&Cvv):~DŽdj{ f,k *arYA&hYGk  eeGAeLv;8;]`;ׇeIO U3#Yw CPYGhp)KŕaU-J".J{ y= J\M 8K5}nK}{NIΪ*Beb.aV%ԥK^56tP1cK6\RЁP/, P ܵ!tB/ڷFQ;\*\f)=^֪.20JK_f.hǣv\^o]E3jϨ+&JezTӫMp-pl[࣑}b}$;SBچ9ȕ73x\j(bf~nCH]1331fc@4I >Dnr(o<1$ѡO9q`\a|@V]t:pAtz`V??q$krmIamm5~Fe> stream x]n0 yA]X&Uæ xuPQ(l8җؒf<sZ|Sg:cS~kʮ)4KW(^ 8nܜ]gODkWv1<\0nQtîE@RtVCCSUG4DGUBCD4$uD:.ӣV΋].#hmendstream endobj 156 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1147 >> stream xekLSw 5n#27e D=BiK/@AhQ"r)-*Q7!96a!%+n>,yű0xd|leq'YUV(Gj< ޿`eZZV`XXEfm~ݼy=0*Sl(*㴖V6 R&NkXͬJ$1c,V `ժd?ðJͦr1a X"RTl9$+2kp;M$*JAu>"ȍ_%`+B^r!KOX~„'QWV[.7չú6RK>zoO1| usqH ڒIQvWit@ɜvs]IcD*su]akyl\xQCd y4,wazR +q AxB ;zf}I\FLoCo8|_ߤ?def?Dd*;{jCU]2w܃ A#L~u]V.%=!ZaRx)4G#)v9tFnD dң[7˒dGK3Aà WFb%S̓#61 ÒSatt!9AnޡmBt4#DW[v/T;!H`86P;3~J~SNX-omp@Т(Vِa-8F30iamT8r^|Lh#ek΀K1)Rvg@Oa- ҆JI_zsk+A'-c;7ktG٫dP`X(.DQ|?svl0쏖#dD6XsD{_5 :P/oY e*dR_xpE:$yXړc6 *{?==I{%J xu3~c9NwKkx/,% ҙt:7,ҲVRG.ŰLendstream endobj 157 0 obj << /Filter /FlateDecode /Length 161 >> stream x]O10 ] ]Z2D! }I$[.%Mů F0Sau@vz&.C -A#EFO:=-Pj?%Λkĩ4-Mr{&SA|/S2endstream endobj 158 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 317 >> stream xcd`ab`dd74,ILf!CGO&nnW }O=J1<-9(3=DXWHZ*$U*8)x%&ggg*$(x)34R3sBR#B]܃C5旤g200030v1012|_cew3qEt"깥rmlٝ%-Y%:;8j&,YٿcD9f{orߔ)| ~xNn;n9.|z@g <<{'}=s&20> wendstream endobj 159 0 obj << /Filter /FlateDecode /Length 389 >> stream x]N@ DAm.@tA94B9Lڞzsp0Ovk4k8>vSj9K{엷Aԟe>^yK_9qÿ~8??CJ XBp !1߆*ppGCnRJ@ hD ېD4(dɌY{3f,Z(w!;"d-\do``3{ }^c吀ɦ7!oHcJdLdo``xc;jHJēJ .N.N.Ϩ<߫]B-ZXgwyaW 5ߦ}endstream endobj 160 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3027 >> stream xUViXW֮\dto'Q4j4qGPYdUh}oVe9-ʾ4  QD1!3I7߭y&OfSu=9LM(_5($!?p>oA M? Ұ_t \SXyQо)M;m=H ^jfڵm  [OqAGA7X-- .GY ;_6W~d".z{LÎxăA!a{GxXY/]fbEE ZLBQʊGmSK)OʖFQ){ʁZI>VQN.cj.eNMͣ> eJyP=5]BP&UłA#d3AYv>lqYy4go4;c9'cNj1{A U㓦 ې_+}-D2Bs4/%'YDOeR(6<܈Lg\z'Պhz{B5a*]SnwxsNڡ/ s WNVvp 4I+A;Y&`Ķm)Y{O=aڱͻb // ^8C3}F&G$F)pM^4@6~K0P8L6Ǧ'q){iZv|9 GŞ[h~shזȃiJx;Xf}m>Y5|M6|Epg1:Lr$0,U t儽U$hhNF~`1բT6T/%5sD|>ܧ %D4q#W F{7 OfV= _,J\ʨ8?pv"iUl{,&? OF>!3x:FxO\ݰԥg4w7 Y2s]MʛDM`E"&eP{42A_gagSxW̅^臩 {G?AYPp/NfEfHs\^je~jV  CpzK}yMg m9j㭇 x -bְxc˦3z6/#?2$ꖂric$6@uBU${ i 1KMO"_KnsLn[ +TfĴJJk})MsecmS']h:+3>X0/Nۣ<%V'rDURP*+,eSw$%Aj5Gb5݀r G)&b3&%YOo[3f:DaTy!=4==̼.2 TzQ#K]3vƂStnv)s i%[gx{p^/,(=_RQE.,,)jIW)Vp}{kMksTN:+sDZRQ1ş+^C8 h ~IfwxO6|B'"3h9Uo[16]Yu `d@JQI\UWУMu4J?B$E @Z?l ?P 6.{WaxWz6j.'܆IwzCs[F뻕Է hu)(^6iRuRj kl ^+p5玮eeM,DW;'{nY_g OZ~ODJQA'ڡQ2טhM~c0fa{)BXgr?zQO{=pVU\X!5=eMy2RxapYB*^$'* UɰHޜB͠vއy晁i,C1!=N\#W%Oi(D. #߯trw ,0=[ZiN/tsl?xYVdvjY2? BdYu5š[H;.>qZb 7䠱#/@ң ۗpT!ۂg}JﻲfgaJGW&Q<~Git P+|5t13)7XLcb E^!=qFYUu(=^UXKCSת@ֻR]eIu%'qtߑSRt2(텆울S1 )G!I; 1`}F$k_;#ZfLEdm[f M̝Af_sKEEMˠ: ^:۞p[ hXILk' vN8x(S.}fG%C>ߊo܍iϕ2Rc/exSXxC]s\h9]yԞ^_Tv䐙۶l3t"il#luGY,Pe Ѝ t'ێ'4Iwn=U6_*ݻ9+^)a;by*()h 45şWptvM lts7ft)W=WiƊ_Sj1{x:irD:D91N:>v"?fIʠdH׉  k!yM] \mw7 hM({F?!2ޑe,^O4/ e0Fм?.”83"+~ƅuT/W: |˷yz"[lUiI ?@gJ93?zn-\\}S{KFv=y/^%AF ע 3L )a endstream endobj 161 0 obj << /Filter /FlateDecode /Length 359 >> stream x]n@D{ۜwABא"Qq\`[}fHbNz΍w?Zޗ)}kiɗ鶤\0uSt}tb毟9x!w~yQ)M|nŮcӿG8W QUXG X(:J51D %=J@'n(;`̠s ? WhU >5L^(["BC6J-M!!%LD444tlسcWΞ]Wp^וٙѢIg\9st x~j.Ee-K=WjzLW rendstream endobj 162 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3324 >> stream xuV TW(QtVf4&DeSaPP7 *K 44;od] @EEP8hd<1#̼|3]9ׯ޻06"D"Ѭ͞ b,$>?vto1?W3N[~0Abdn;oR+谄i!vG*bBB+IRRE2"L/z,\.R$a7ri,?2XvKwl]e[&AH X?1)0KmwV|ob!J," bB!|mb#N s}罁 }MWP8)ZQ {L5cΤD-Oo8iuV+MTp Ut$;@C1H X)L-2 |,RzWW돿~}pJfL疣> J:(3->?D!!K%WMЦՉYoZU! ́c*0Gpri|h3? HV0xzu7_S݈f_w۴9y)ڗ>%wWwC~?~IIKҙoLk3,"Ӣ& À'WP1i/i$na4Am5jik)}́g5A7NJOuA%** Y6"Ih"ZPc-`QU0Nk2DWlId5J1_%kFȦ5N0֭du۔R2gcD~R,K{(=xGкx]}k U u-DԟR+d k~{^WVN]=s[?%+I %RtURhPQܭ'/(5;%">_ 12{qQv_F؊Xw b3et öx7 &S/”n;Ϙ4QE`05-4H ?Y@_,& ԉliA ERTREdܺ jԄJerTKM8OP˖ ZC|\PVo]t,Z脤(n _L$ ?%XiP)ak~Fg`a7X~olEB x IxiMSݤ-F4}S|~kҾo'0oļ=eS$SU %CNa0"bxtD[h""4t۱=U%_m% Iy .9)Ee(RZV3ͯ.5jLDBCT `< ^ Sn «#WaIs` <]a;e\_YVz%PKT*2IJ_8 #{ JsVjZe2[rxbC; ̖Ɩ -f{g8UO[kyG'ϴ}~zfq^Rl9ԗx){9# ~>KPКSݺ 2u{&t}. mLD4%}ZKcÈvNcP$E_mLKz߭;> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 164 /ID [<7b5aa5f09e390611f075e9a0e2325bd5><79066bdfc606f1aee9278d8ca68cc2f7>] >> stream xcb&F~0 $8JҜw~<=\aQ [ڲ`2DJH RD2GHA 0D\IF!_i"?`x)VDJ@d0 ` `qɶ̖W`r:X9x9 endstream endobj startxref 105980 %%EOF Rcpp/vignettes/pdf/Rcpp-quickref.pdf0000644000176200001440000021341115030755501017150 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 4194 /Filter /FlateDecode /N 82 /First 679 >> stream x\YSH~_Qo Ku1`OAt иi,]:Q</,A3DQDM81DORF?q#aR™@BxPO  }@9܇NqT *q"sA Jsp i"*>.tuׅqF^}}a^*]?A*pGQ~+j(Fav7aU|F>'W_?yfLuwJY =9> O,f&9(9]r$_xUR9?O`ЊQxyƓ*XbBeۖ̋Sу*SA46,ũhy5~%twϓh/cak@ #UlN,]f%r#(:F1/~N= /("6PVYN jhs]En>|#go<0]@z@1gVKm)ńz_\P*CJxQ0Tqq r,Spk` XMVQ_(.-3LmD٦^h`!)@K Ct(SRcZ*{=xO2Z֠6V.btC˅.R@ZMSW⒁uX=~^=Q-nak"xx-HnrjE.덼a ^Ё\[kvVߓծh:-QY 0 Br9[B9l}l%x!讚֬I6 ^u ;cJRRVfm/U '+uu!u\&1>m9wA&>Yy[&*^VQBYy` p1^ELobm5hkUfm^;OTEu7`6U.VeL2B z5R6U6 M2\yk겟 c~7BKh}qiDw"] ^Cl\Z AM GK7ب(m䟞=|h1.i-gFH$&u1!zU@͘a_ǎ?]yˢ܇C}(qn}oy]'`B¸ 4K5A"β"2X_P-:(*X/0,]śD'Ãk,pT`6ltM#Kkܚʀ1Ggo BPm(ژkd c)p@kܧ6h\\Og/wv&mǖ`tܡ⪇#/W Vjg]pAXR۔~yf|x40dؒ)l@ @[O{0,P ;l V^,XztT{oM]Up)W]U A{J6Mț `QAY\롣}54o OM=U_̄q-0xN*<$ܾ gڣ8_$TeRA(Wm߷:tW[E {uvq>#[xGXu\XջiuQR-b5QCLݬ}jV~Fb=_|>x|/q LOvC^YF7إЧwa/|xi_OhЍ$5"ǻ 0(Yzd9.c G! L]F튄S;۩$̓PhIj)ܲ) ))$K5Aa=Ը^6Ql $mq Qf2z;>L+n@5q=@Ǖ4m0g'܀ ^mPO L&3 "M6U&|fG}^s4?'orATK~Ωa VVUbZ ͸ <.+d*Hz+`'~VO(M_8Lu1-"DޭZW73}?-|$|do1ugtwg.mkםN j78F'zY6oL GS*6 ]xnvttw4ҧbݳ1|)n/Ⱦ~QxPl3$*w4C[(I?gc1A]NNޕ)Zx ~_Ic98.A{YJGjti|F'nxuZ7mbߔb\S.+E^u_F~{@-_guV~Dh;AMx4ޖQL2`87YRz<gS<&T 7_] JOY2 #{qPؕUaLT'G^yZxX(> stream GPL Ghostscript 10.05.0 2025-07-01T07:57:37-05:00 2025-07-01T07:57:37-05:00 2025-07-01T07:57:37-05:00 LaTeX with hyperref endstream endobj 85 0 obj << /Filter /FlateDecode /Length 4958 >> stream x]rDZϧ@UG;NUbsHW XkB-R8x^#=;;=@YCMf:$'~Ii*z\9Il9g/y>aIKN$%Q<{9r1:~z e F]=_,r~OIbDj5/9~oįͫg8VĻfmVFAy+a.oS s#ʲ]V ($RVZ ' 'g󓬜/$*ϳr5 `beYzQm!EN$c;b"N̡/j^z0c"rkw#&{LjJE/K(a꺒+w%VѺSȏ<`¡YŸ! q-.Ju`|`.uik"v Ϸ ;X]h.ϡ lr?:d)8lF8?x*9JwƩ5LucQ^=~Pr :kAT`ezud0vy׷i'ְ V_ fzvl*^{0i5@Eq !4H݉ ˝dpMY/øv|/mnţPphF/)|q;x\ E>ΣJB~[Bڰ?"8p 1 U2@ ә*D;u|e=T[!$$/16e[lzA'UmU\_/;=@8ۂ%zYH0sž: aK[$ԜάHǐC(5}%(| 04#g&1:".v}'nMȢ1V@2#J~;ٙ\v)gnj٦/`SvТz' rDh|qŒ*ɑY_e'YA*[|4kg} o.<ВvBZ@.?w_;/hn iCN>x md(5R B"8牲OkTbu'vW~65!W,whqX#x$0"j!hOG$;R|?m,18qY#f1NpbII˘ֲ`Jn|?,3xxbcIyxb.oN /}VYJ }vKƸ/q Ak'x;|!$L@/Q>@ ~G.Y'=bЁ3FDq]C#i##G( N-J =p WfJ "U!QNmak0Y@Hp~D=,Fq-0be+RQkRϋY}?NGDǮ#{ ݪTh6*1X|'1 |AG_h=(iSDnbE6 YvK{pz[Cۇw/Q@fw`n gnڄwǰcI{hE0Xp<m1DkdDZu3౩80mtA nWe˦uvsI޺nicE{& (YϞЉ . 0(DV6#ELR~d_ oSKx٤R:d*~U"TATot-9 yDK*324̘I#8Jҋ9|kኼtBiÐGBiG+W쁏PNpȒKވe!쑋γ'Oې?=Oۓ;.,[%uWFFG|2ؤF sp`?UP#Q]e~{P݀, X.m4dC:#:CSVRߝEW1AU.xR`TbHQȥߚSA{Hi'Ҵwv\?ݥFR(N"mTu(-̈#En6*;>\sAEEm_dtiVjWQ+rR;wGBs{>&v $FӌzLD8nJԑ?Nd;Ky qExxWC/J7q=_ :F'jjWwxx.ڞA!q VGѡEOlw,=ȴwVL.moeamRcL/qe!uĘtb=?VY,cGxnv6.Qoy_v #~rʇlx'шH#Y[t'Pz\!Ȉvⵯ5搸I (|e-Rl\"FڃXc 1zDH* 7b H"xT?ޛlRwE7pPx$~gY.xk'"n&"{6g7D(n/!}rhqjؿI57͚{rK(X'㧻?<c\*<a.PR{zEk2m֫+W}B*MϚͮn51 <"xqmӝ(;`b)woaNnΩTpDr8|4n6nmUvU-`8݊X@>~QyM5hJ}4L;ـ_0R\ +{?;ʁ{twۋjI]s[ⶉY7WnY{3͟ʫk7w#!ld/ ^BgV)^B+\l(Z­Zd9zU6QP¹h ϳYDG3*vS1{[O ?tendstream endobj 86 0 obj << /Filter /FlateDecode /Length 4596 >> stream x=rF б4N[9MR%R IXf%== "i ^wca:_4|DTԼLȆ)^K&߇ALT*X =D1f'*2!a3K:\_g V'cD(^R +~1hXT ?D\ZT@VJb^!72&[>wMoÆh:R3D /o5Pf$, :v=;ե 3Fx:Bve4pגM}_ RQf yjU@}KcJR0R RI}&RI8;xD&̘p 1il^to' P]E|s|*$1_W~uGDoŢҨ+*YgއŲXlu\Kt;Zfd bR)m4ӕr1l=-I9-|}3)=? Gi(SuXb%ϸI$QURosµ9`ՓZ~U6h45,0a4@>R%ѪjU^ .*g CDY-QRjGZ&Rցu Iؗ8=(@a1aiVelSz,j"-|>+QX q׾/Ѹr:1{fSFd du{˲*gw\^=T̘D|' @c-ʎEI[y7+ L.>jIVIQ; D>~ M fc:>bwyK<'r;K.S8(^>VƬ#셩~pvcSM d"֊2( pQܾUѴ!nEzġ IıPq{ 2 "e;19PPŠBQ˜Gu8$cXN|OXJ Sm WH^+p/ay㠴pCKF471Kʓ>x_Wxn޷/O7/1eN3?QR&b[E( @V1Ȋeaxo0Fik<^q/]>Ndl>;b][SS'ܝ&X^7?}=분u9΋7CIRh9!nɚ 7fFH(3 m6Vp٦Gy8B^ %7k/E1"ٯ Btؓ8:|Pt!EK6[_!t0NgdBx4gݕwQ|?؜YT4OO'AuOh{//V M}wlb QE3p{Pˣ"# Of}^/S]q6Tqo濡ړsmCMj^7~\6F~`a-0~$&U$wi 0 Ke v=sWhEӢM2?|"k=Вo.ke@6=3uU e  FJ,8:T(F \O?G08MK;7^֠k"@?z$Qi8')Jak3 鉍Of5BtF+ [:@b4G 5TrhxtEtɃ\?ͨ)C7MsO;Qr)'Owwo,o;jn%V$yϛzoLnZMqWfn :C8͓[bXl Fo[-ֶ(kw!Bf-<Fz#C-8-.h!$-#ǒN:)-(#aMS")E\>0mChEB0V"( x3eO%D1,j.gԁ@O}Ӱ h\BJ ;R:{*]a|}1.@y"b(izs.AĖo%_W_ڢ799Okw0Cha/U~\p4haXX_s/7`{.2#I?[668xk5?9tkHz5\ptCvOF#!(KI;!@g<1[isn2C ءeU-3Ҥb[^/tQ"eU\?(Uyw_xj!1b4ɗy}Ÿ"e]]E{k$1` 9]zhD&M q@lr>* DDO PsK^8ͦC4C ۈja bO >Gr[#G16}בSZj fDGS3? d>1Ct0^=ugy}pU7fmF>FK܄^ 1QU{&P}S=6zEafvuYDV:!L~TM{gȍyRK'2s>(W 4[ݏ Fq\,~.v/%a&}R]CUnYi?k?(^xY:c QC~:gR%[S?RtB%?΂Tf16>ú}p2OGTCB( 辪0k.y$,\F˻E>:ft$2?qaTg6O@s@=^Ťn Z_B?`w.Mw+SɣՆhH/iendstream endobj 87 0 obj << /Filter /FlateDecode /Length 239 >> stream x]1n0 EwB7\%Cl> stream xUT}PwZԖ"q7=9ԪNGu-TU4@Rxް@ bhE2"zvq_ӻ׼:s?;~;{y_FTE;R׭M()KU6L^stTCdE-soݏ/,ƭQjJJʌ =vݤ˭%JfQ8_{Īu+Ku t%]l]>1Cے_?MsEQ K˶T7gMJSzj%L%RIjL)pzTeئA `w"Т;aQ-x=QOv Uq=htAmA%)hЧξ3- >;w Zp{TX2P{0lKi6#F0 ?1>9= 3/D<@"ʫZZkâi,ثp7*iWFYL/xJlzQhe/kd7qS VUUw T2w.s.<~]Lb#kMM@/o,g+p87qG`x蔜M6j>s xݎƗ ; -+ ֲ9)1"V*ܕ?XoL MRP&5Vլ껞UGl+ج?9!FF 3ToA3G{.svks8fb&`.}Fh/4[+ڛ,YH#|WT>;ݨfp#9in?hF`@$ev(,H4V`4=۔vPw9VD&]\AtA;&qglv_mnG~?%;J]9*\j˨ LUޣyhux\&IТ9nCB:]Pn!wBϓhtB%t_Ǣ C E^aAxfI=ǚ].,"#ޮTJ-ȅTbendstream endobj 89 0 obj << /Filter /FlateDecode /Length 523 >> stream x]TK@s ^ d3DQ ӌX<"OU1ER~q?O_Xoӯv.:^fut`>ql?KvykGvno8u_xM}Uݗj=OC5HjDjNjE[5H&I:TtUt'^4AEt(J{dP$, BBAPH(( EB!@5H! MQ*UQUUpW= u)UTXsBŞ<-\o"`t8>FcQ(p < Gୁots&66襀Mm@mMm@mMm@mMm@m$/Q".R2M:Q*Q2M:Q*Q2M:Q*Q2M:Q*Q2M:Q*Q2M:Q*Q2M:Q*Q2M:Q*Qosc]?HqL(Z j?׵wWZ|ۿ詎w endstream endobj 90 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4105 >> stream xWiT׶E,ˉI!UYAQp`jfhG@tp"QZEA\Q+xM8!s;mZozqKBYw$IHeZBnFzwF$y $BNB|q dB]]:;-l%%x̚9hItV )SԼd)T4ZP(x}OVQs"CxY|Bƫ2LTu O>YU Q')JZO.]$/)r`>]MStd+u|6^W$z T'2Dd=YZ O#;(NK*<lQd$'4m+:^ыv|R7tBNNh}0UkT \?u|z`~Wc~OJNJD'aSx1Y_(LJ BaY9 S I)ӕ3f.J4wϐÖ1ER(j5HQ3(wj&A͢fS^T45CPsI7CR>TL BP*NS#jAER=@Pr. Jq+ՋMP55ZE )S]ZYݴfcs[&͕;>t&X1/,vt;6`l{юk+r1±ʼnvJpZtұ#a%zp|h#Mi\{3@3Qd|Nm <,f3ՐivdݭC&#na& &}je}F4OlO#??p^P DJkk*+NeEsZOtVۘp4fN84xag|`95.[X !4[Rx RI5j+VpA8a?7,A85F Lq,u0~7oݾ''롋J˪oByEoUq.^.؝ `L>Q}#l3#lϟ0VK&M6B\!抮12LmB, 0^潔sGQU+`><3&88( 8K䗉mp+t{WnUD E`z95jp9&}/k֋饱x$1c,>$q`~g+ l{PG =oz›n.5rqj?~} JeЏYUEьe{L:87)h1u(= F=twI@I6 @oɅ V)E,yiήK`Lt\.JOQo-6Ȗ}^A4+Foڪڪ}gQ#z2p:=8o*cUϴ;JF_3ED 9|;?6!Opf4È$C۞e=%;, ؎q y*ǟlAd$}q| 鏴#<ҿO%-tύ}ZO*7m+`_!E r8}1烝0hBcB y'fiU7d &{ MɌ#T"cGQ,Aّa?'!^gWj؃rq L5Rs }#~ G23iu-kw"Nq)06-(:\[139 R̋h -@?-V-_A;X {vqڽw 4vn#s z[/M,_8`H1/]JPp!z&Bw(+i@M3fSގ, 8HS֕ k~d[ s{x,=_qxRK??-F%W?UA}Z+*n7)ɍaGP(*gP̀->˵ r w *"(%)X )ּL dm>RC|Uf3G`A֏ٳx.TUɮ{å'V ?qy}wHx ~F@C{҆ M,]wn{î*yɡʒZtH/ d;&xjD'QTDF7_/.ٰXؘZX 3/>dwxJL6>"uvcz4+z^,ZvsNh@F 198!H sd}}%b(͍ j14$W/ع(*#?'EPk$`}"#sa|C2\94hj-,^ݧUݘztё%ڦ^f ìa {eji,[<{Mb͂,< [DͭXY4kgg2"Zi.+᭰C-Sjc.$1Ɠp?,<<4__hPTCN?q40xo ViM~9==3m'nYp"85JR2Lb\]П9bKKa40x8mnR<@  ˄|r +vfacl[col8S_vB*fL=Y6M r˯Ku'nͣMɰɼЅy7Bbɗ,ܬDQ\DĬ3 '+p8``bx#&s֝~N #t_GyF򢝄tvV!p8c;N(5Mrt8hBSV3[*쩭g#}{J YA 3KtyIZ3!ՎF}ŲDϊy=qJ 6QJ,}aqzֽs9MYGVףOnW]b@"9xr E@[psB󧗄E-PD"|x8.*af kYu 5W7^0>AʋkF[HٻL6iƧQ2Ҕ.9Ъo3pۃKNWKS$ErδT>Lo@v$b(".V_ВPH>Vf|{~MB~5K-$Ca"`9AC\u"*s9=$BzguU ~}b E*+/F/R}K py+U !SbSN9!,HIa理gz ,jG( EbX,Ca,2g_}!A ܉#@"Bc`k }o\ho};P{uendstream endobj 91 0 obj << /Filter /FlateDecode /Length 249 >> stream x]1n0 EwB70 \%Cd > stream xE{PSG%٫ŀ"J1Π*XUQR4@x%$1<"PV!JZ8mq:sq:9ΞonMӞ!ZEg^=EmJ #iM`wlo!%]Z# C!yRn4bZo3'[AA6yq5ʐSMf=e,)N/2F ~/7Rt >dM- ZC HQ> stream x]=n@{7}?`lc7.I.@+C)>3#;E!0^_˭خӯvΗecZwje72>۸Ou@;à? /M׹ԶqymǾsݵe_oΟ= U{> stream xuW X֞23*"D " "*"*VEmZ(ԈX"*EWK{~K<̜|99}(}=J 'dgDN ڬ~a>NU!!2Gm̛ݣψ ~k3WNwf}ܹs{\fb|9ɉKIKťf bN45׺#EQKR]=2ffe{F/[<94%L6iX?y̝7+k(K*GMɔBMSTeCl(WʎrQ;A9PK)/j&M9R>r|Y5SH.eHQ(#j4eLERbj Q&T.eJ(3j5@IDjF@ #OzzTBaFPJ?FZ)ݢt5b.lʾ=ak31l]#~717(28bpnG442l5ģGU46*4:oN>V>ҸG8M4@jиtP&4|z ȐoBr>Aܸca|m*?ĉzFW۟ݩtLU+pkDCU ^iܩNTwnCճյKơ&jV9qq)!dܩo<izb.-G~-C1(0e]nF^O^ 9o,$+gO>MΔm\XPVo!^!9HU9,f`c}MœCU ~SLB~RsP˕Wj˓oLmmR-# zttуGv_>e5; 8>I؅d y 5}%+52m>T W\;x$ApX0Iy 8$Uq9 V:һ AslO[E#=I-G5fϜh[|Nd=mZOD I4tXE.eOF -|ܸvu/~d*V9&9c}gh%bUj<ƺ2dס|Baj7mPBZԚ@$H4lλSiQ-䂲<)aP֤Ămx*m[0ĝ`,jk|h} ַMD);sr@wC rzJwퟡmMQ)dT07;6AI}CJGil%.?#e%dqaG3/2T['Ҋ 2S|XMWj*J;I+FOfhĻchD"^dO J,mBr7\^& eN7> U"' cG遱Rb TC7o7!] Kbd>\5,Tz y,'*ѷʕtD]K9XG0D:.:^V~vk? H"spRe 3X_8rN! h|ȠO o>YG64<%}B8FEkF*ՠ>{ZG N6pku_JvF"Y<Aw+ЇH$YKW{0"l-Nj/;[=oAvxTG0ZTU/4vELf30:8. ~læ3}8Xmށ`g{;aRGN֟>Q,f >S]NaFn2ga-ȌdP.O1cpv VAes>n]cO{&FI?(a?MK0ʲ8݊=01?rLCZT;DJ|(}-wٹUfK}8JyWΚ˷! SmE r_#lB pxlҢ_'m71 !e95u擴MDWhؤA ~B:Fk#"6eqQ( E$?I^$iSW a`;9>ux֗dT͛fϿ4kVZQ/_O}n ^c|iWkkW|f ؀Q>>|ǣMj^oaګO7S!zaK:Pp"q Qf.s]yV)K֖%W{'&n'\U%?s Ɓx<\m?;W.;[qOR>+fuM,] `N ~5G`=:9ACeF p $$5=:Lc"zBxlbr•u]9A%i֝E|36`n O [#׎F]jyTT~ط]5uSf^B-qli`a hߨ9G|޷6VB6 Ha {,O_'Kzn3_{d6p6 7ׯ曽d7A6T'^Lcu)Å r pDVWrc0 ggr-{{ ~~(&?wx~'~lEq tR`c< +﯒͋ tM~`k?p17I0 ȃG-Z$Ƴ]_sȜ!3uw7_pCPM0+@y^ϵ{pF?{p,caƊ+?J[+V0O┷<gxDGh!iC=!LZv?8MGO:j+kym!6_ |_;PyK ؖ-`eD6Mϼ}2B;e,@\=Eendstream endobj 95 0 obj << /Filter /FlateDecode /Length 189 >> stream x]1 EwN Q.KdhU1&bA } I:t_z`c%^= /L:o".L8H;IVu7ޟ n|VO)#5lp 0j?"kP7W0ؽFU$9kR ANب"&#"B TyjrXcDJʒ"/<>"!wq`endstream endobj 96 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 913 >> stream xRQLUNֺB[ܶT 7(mc`")RJƮf.L潅n6Њ)>Zvn C4XӒQ0~$x3{=w(x7(>ٌ rT֚j U^i=%ZOovz~]^oϛhG{t#iXО@4pHՍ8h"Aq*۠iȔUhIX& MP.ZSk$/H: @fFQXSDĕwQ]`ġj % bˁiL]]ѕFeuuD01T9:TWWHիD1ٌ򺯲Z6 5:v=ǔ 5Z` 4-b?zR/;A|TFjHڄZAxU($K^ᘸÜ3.i:$.]9ZF>$.5H]!=|?6839^=VL/]HgryORur/_-ygݳ&s\(cәEKC6Iv<[Vۤt~z&ޙJtv0V{hJMnfGSΏ{?g_/'/Z>}gM]}]duD#Kog>(so^qq<3u3)I֑ZV^T<~clty?= %vԅ2ߊfFXfz)? iFf|47ycɦNv_Y~>/WA'ٿ> 󊠽ɦHtš|xB⾍#Wendstream endobj 97 0 obj << /Filter /FlateDecode /Length 160 >> stream x]O1 yk%]2~1 B$:Igׁ}H_y&$i,tc>8(d3>L`i)HJus lƮBTJ8o)ڴ6)<bIUSendstream endobj 98 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 222 >> stream xcd`ab`ddM,pI-Lu JM/I, 154ɫf!Cɏ<<,=< }E'R#YSD! 4G! 39#(5TG4/%H$#U! G!'395/9UarCCw1000j300012h }q3}Uǿo {U+gp20Q3endstream endobj 99 0 obj << /Filter /FlateDecode /Length 616 >> stream x]n@D{}@aq H2ThgfdHq D]e>߆2tK|,S~[_nS?mMcS_M۟Nm߿8>_mfq4;FkDcAtld|hǦA|dqd<4 qjĉ4G44l9 1 6&#dd42ؘFM3 ac22lLFF#hd1 6&#dv𺘝^bv2;x]Nf؀k -8\TN*I rQбggρC={s9b2xCAo9(5Tl! A *6Xl7d U*AJR%RTIQ*I JQ%-L6LA&!)$dTɞ"u6g#RH*$6Br Q([Hȥ PB[-|גoѷZ-\KE߂kɷ[p-} %ߢo[-|u euw DzO7/]˕_ _UAendstream endobj 100 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 7696 >> stream xywXTgqǺ hrmmQcn؂ A aN1 bآ%(%ٔfS~{QaK~uq<}C Fp87l .W:6a>Pɽr0f'f̈dMgWZ A 3=(fтOϛ_,yy~ڤl0;3&)`l̘YԌAZVmf~A})/eV.,*J׋S6HnLݔ9}KmY۳ws7? =%Ni=?cgTb%6ӈ-tb+1F$;lbOL&V=Jb>XE}?SDk>l=S KJ#F :_)/4JG ̹p iC@g+tZ%SFW@;<Mi_oq98g-:ZG^ (5QovoLLѲSiB Y6VQk-<&ZY7UM/F@꬇~ӶkcƣJHBdIV!5.8O㕚qr A" 尘JV6󁂉%y K\ "Ќd8\,k^&@^6'+q1py[1k>6D3}>Ɓ+si$'eYCqC #bJ`/~Xzy&p3VFy+^[H( I}׆C̣Z~FQh bRp,gkvcƚbNTasAvB["h 2IoU(D"84TMl-.{e끍 (yFk;__`p:|>js+Z@=? \@L12*Ei<~a_\4=}ARQš&!$ n+kT ggK y@W2T'ۛ0_O6 NRExӝ|(ԗմp_bR"dB{̛!*d;4p ZiUF: WP7xpm8yH2y։dJ%7=7ހʁj9@cEhnjmuv#Op/u)9e~2 CjzV:p3êU*eZ :E짖^Hݢ44]KN F10fЈ!9:O34G Gu~8bl;tgRZkmQ@KSP#?Q~zٴИPdNG{(C#Q5%LTK,}q]pHQ䷽zcb{lïa_uޜu]}NJ.y9IG?x3i5䖤9фTi+7u㵖eLL^@=u-T{J g^HҮ Vz,ѣJ*UI[N G~>rO, ƷyjiFk"q ð] ~*{L E5p䵽'V D%ҖCOZA'8o:na${S^R 87"R$Y 5f}lƾ"\&P>%pQf\j r!sauIh1ZpR&DŽj]Hac|G^D^d1; }~Yiz?y0-\ -2JZZz<.RXf٢ZO&P |ڠ20._p -=;3/#'7wm@B%-56IZ**nmNZ+ ݄usD:#l. Oh^<CCO >dF喓XK YU`_2s$$rMZKIv]dmH<}x~}pRĢP[^J3vxhk H]yMBӷ$7{e[9U KvΙ^@uIR|V9?݀.!n7vI3R1t~jTSK_U`DTxN˜]Z۳Uo_L/as֣֗hZ}'drxגEdA]RDp< ' ʬ֬|n:= _? 2Zr܈!U,tvw =]FzeRP $fduSpƕ/xio3(99bxο-e`-EJx3p%x緋m&7݆Fn y+s5-g*jȄڠ2,JVKln9 tLgfHdצt4Y?"8S!{,-ۙ] (uUȻ< ; <{ !Q}0tO^Q8,I@uڋ %)(VLӞ'5C=P$;Q? = Pyb)TF]`\',nL[7w7ΦHLrL+sKꥌ"ȁz:loêtpbңE$T7Ībp \Id3ȴ_ߍ_8pdhdVh7\6S@Uy$*,E:AD2^jb٧yxMU)ٷ`gvg6D'zEꝷ>y]Tj awN"ѪKV-ӕ%d;mެoSJF^ZnM[6sM2j1k˜ZYagLfo~yߧ=dP/?V? ~[P*46o E nv@Y~q/DJM\ Uj`< kܩYs_c'ο'"L e!W?k*vFy^öjoXkVugNd3b+nI]>Vŋ H L*JCcž bRtaҰU^.n7~QAp҆sg0zd6LA-,h5o>9`b>rs7|%{1s#9n`fs.|RBѪt؀c Ox$cb寺LJ[*jG[v<Τ;k=՗jsTrsҾCy.Prr;H"PbD$KN*8.@3Pf2,PuVqqV z9S:tQ$dc$E/\F[+^!;z~H4 Vk3!Uqٴ$#(Ʈ8ain'i%FfQ-6w_+}wtʍbcrVMΎFDll^@aGmd[W ︚V\+-M4e)ڈa2J-%9OB(^!dW8p,&u\ >h8JPU./i4am*~a&@ иo*+BH(]ZM(rsR]_m8a,4w`T}ZQ1=`M(Υ}b14"؜a: ދ§@>,>@Vr`m苉qpnPG#ث 3(llVBUF ZEsHe&nN"3 -48k}VG~ j$NqI=I{A;V+MW{6‰}N6=bNy ԍޔ'!z+ h<\V ͻ+AI@8 țʎI)?:v@fq޻ O>`y﮻߸9{F+`Q}PGw<"TRJ1'՛ӧx &=SPe]?gހ1vH*N l)bhbH/dxzs8*tmƲTDwζޏK[ Bg[@qi#vZ-6'p͠xAWYZ$B37s \{Ľ!3}Om!+!}Yڒ$4ȅ`pՒB,\50PevqcR+=ݟVpg̩K/]e`|~KҜ?&I0F'=z.ð?zKEٖ+]+9>h:J+2Jm9VQ|aWncP-b}8| Rp2 /SQPREUcC>|0գq0źŅ !Q%X^[AmnZFfZ^mAю `CgCH5M6i%^V+ mGSU^D*~GC.T/-".قdis4"i¥hTSpG_q4FUh6J<=y{"Ou_\E}MіL% F% ?'6RK4g5LabVqBiA Uִ!`'d K䁀ܭ" \ ؤ ZkЕPL >N-lCѾ2`y@%}Py6 <݅׮4fBilI-ޚY6Q;^8htU*Zm^K>T3qk.ODP ⮿Vs EU?R R^X?|֒xՔVYpyWbDwLFz_| BO zg,.0(Gmug+n}x-+`FZHJHE*{GH'1\^gfH'9ghX<{H@SmGm05Z*òKd"ԮgFߠ  nPPs-6Lr=$a&;*.ṡϽLc?ȩp0;tC4ڎ.lun/njT-`ƕ8\ȾQQ÷ ƌ4~&6fefZLǘ4Eendstream endobj 101 0 obj << /Filter /FlateDecode /Length 171 >> stream x]; D{N7[QXnE(0,qۇ"Ō zˇ:F0tmA!L8[bM ڪO"=M#:وSyjjI9 Y'D3$jka2{EB$g9HG0P[Hc ys yV9endstream endobj 102 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 383 >> stream xcd`ab`dd74,ILf!CGO&nn }=E1<-9(3=DXWHZ*$U*8)x%&ggg*$(x)34R3sBR#B]܃C5\%旤g瀹 L ] ̌,VUXdr!a?f-pYN@kWUG]uwdwق%S[4O7wly˾*gDsKز;KZ~;Kt6v4t7pLYǜrs:8@)=S8vz_ r\,!<;f@ϴxxOrzLe` rendstream endobj 103 0 obj << /Filter /FlateDecode /Length 586 >> stream x]=n@{7}?2`lc7.I.@KC)>3#;EG`lf?<,[]_͗ecnew8ve}&=Ƿa퟾ ?k6t4^cۆ>sݵe_qq?z0U80U82NU81Als x""BR0Z W 3f &#l  ʹjό)2*4*)2*4*)2*42𚘍^kb62xMFflQ5|QpS0i4 @ j7Uvu1;.f'dv𺘝̎]=;{vtu *U`ghopo`ghopo`ghopo`ghopo`ghopoPW! FPuG:qZ 5l2b`CM ؄FSM&Lȥ `R0!L &RI\J0)K &r)`B.%LȥO;y'?k7雐K E+ƏmkM^7ʷ:/ru.Xendstream endobj 104 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5927 >> stream xXtG^!{c! J TbMuEr"\={@BIP$OB'nFm|Ν (~@ vtrL^bm?Rǿ%LWY"+!83BXmM MށKd?0SΘDͦP j05ZHYSC)wʆS۩aNRRJHFQoQ,Q)ʂ ~™B$"_hhLLnì[YXY=5wg iHLo.Cq鰌a$1ӒG-O=Ј#m-lSt!vvG:(騝EC` JA+[$(,)>Ii?tF*9SJ8U|0l@{Qq, Jׁdf46,MCYg\.|!9zb=^ZCZnvWFlv?;wG>]@NBv"Z;::B]X/D5M4㌖yN'E "@nYetZTɭv`gYZZ[dd_dr< Y*ʹMRp߁h)'iDEܯtq)@:Gzo4 > צީk:Xpź.Eyi8 OrG|"l5\%nybkHZlqad\ >C^A'-[`%X%Ӝ/^|˟_tlNYDN$(>9 x۩q67{}շjl]eԢĴr8Q1gů()6/|{ bp,ģ ,}phI:  k?p+l+*ȗ<d*2ts`->}ՊK=9^]qڅ3^|ϥ.PF>IZ X74]2oD|CmまyXQ=|>]hȽ9XaG󖬾 ;Mg?D||13TX A6"/f{.‹6+LwE ~lWA~9>|4HcO|1Սm7׿ƝxE8,Օbӽ S]Ym~prS!IzjMGೖ.yoON>>0Up0M 6ZQ9xW|Ե4jlfJ+wljg 3*P;+ bJ`L 6g*եTq)sN%H'B~Lu:˺>[|4ըIQ-*8mco1Y(|&?Zb d1 LS%4>I)F>(E6;=%I1ˏdP jﳽ(=b7 M)R,EszQTPmCM0 }9'n!vKZ gV|Dam ȚlCzEW'Tl&0ל^A;Ij:QH"I( CJFtz~Ww!i 1GL=VLY̲lbx Yz=hi0}}X9ם%uO'09៪,3@4QU5W=cjŅFp TTl=r9RGCX+kuv b"[exlV_`)Qy6zY|TFގ&(P#o7[[MjF "aTA r!yEF=wLזhQӫn!Rًj6Q1/Lo0( ep4:ݯ>1"wh 9x,6SՋ]|uQg,@WjEZڗ(@6#fwRqCRc|s\*poT f)kPץv<6>QfhnPnUi܄PN]FjPFC^t!NoTpcKfsEB`Ҷ0d#O˹z _Gc(NJxi1Ӄ cf_0fIdk'ъrꍤ}ĉx@h/=xt:vs/ %Vs.sʭor5E!qHon/vkh7 G $]wVڧi$/D5HZ_9Q\A:' Y(E+_0pBYڰe< k0F_ ]GGe/dz4y  oN)\J98cU=cJr,vc[bªNƞE_ tDƂ{.j-t߆". HY[E,H>T|ĝTFsY߬qK&6]^](.AR?_t3<Ŋ`KrS,%M )MObB7i)2̽˰N|?LRh#)ț"f3 B9ut|0 F*eB*fƯ .>KiңQ 3T!*D 3^լnFs-ꆨ:X[ L("Bë@s;;;Ϝiyqmok9z&H?YzJ q_wΰ/ ZGl6a]_L\/!/Cj=ilR*긌5lLkPuJ:#Mg>~q/'6]j*6̟_}`_sx6$<]G\Rgy9%~g"{G}d;>4I1T<4Udaa2YuXCCuu={>B,`<4&c{At8u*di%=*zQE+1wrm΋hJZt:/+7mڹ~n9!hZyZIZo-lfO|\0>/0z' Rl}""jxHJft0,,OS͞o$<~4dDNw)PTy[$d-C?Un" nAEXi`|z57x1=qƍg_𸱏ycs}4իGO`( M oT1~@'xcgu2^%; }jsm1SwKԪ֤mgjJUYAč(܃ KlwK^E q.(xQnhn65#+Q{H}ӘD#^pS,;=zHE^'GAItEpN= E/_ICWXb͏.)HKM"?(fh |bǂ㑚QgW{9>B7 כ?._*$c_?. :4KZ*QK&`VCt&5!K1٩Z5*Ueܯ.,҈L˩!i\|@rt 5*-QҊrc9SwgHzy[vFe^"QG, Ų 煼PWC|BP-n7vo x_lД)ID$>FRQ'޺?QJjr 8iPWnܠO֌[v |v]/cp>r0^ͫY#unxLyE,$NzfP9XtFq-S#Lw"CVo(d>T&^_ˁ> 炵۾<21eu=:LHN;ģ1Ilc*Me~l͑Õl{E0@V6gm3wcn.7hONţ궃78fysbkbV2!;9+=~m\=p8'$&&", H}sfI|wYuy`UdmmeE]l^snYn.8*2}g˰b1q͎\f/8iӳrV'EZeephou0?x:~uEIMKwZ?r} :%ńcm1(3A{GL0,ei-Mnإ#\=Mg > b_{v'+vq}U* Eϔ(@Yff^tDQb:z29JFj SVGb_ 0`wF}tS|N,"-A]DpۻAe= Js7 x %l(@~yU^%A;롐!d t:/r]c [aYvehV|cUĢ s&<6`Kvlp[?ԝ;["&Y~.+^7ܗ>95po~!9TGbwmHnl5!fTPa`xӼTL̊?K5~۶v&~*$?G. -8UUT$ e'Xg(cRbrXn aE^vQ* U=#"MKDJ)RsޗUWۂ6~Jya_{=AO$kXq>j6Ȱtat&dGo{JUP.)P4*83Sb,/F: }F *RgcE;Gt=՜I;K^;s=餟]Q4IKrEL}VE78._kh@vUC%yj34+jmzfD :AUendstream endobj 105 0 obj << /Filter /FlateDecode /Length 377 >> stream x]n0D )o/%E)*!8}fI= '~]yY_>s{]n8R_[wx1nnDž6e|k_Ði=ocmR9s:ۋuEI '({CQı(x. LEVTDlE6\ DOVSjj66ZMfClh553e|q1reN(#ъ4b. 01'׬( 0kVY9|]NgKå_1 4LJ8 I%!ɠdxGo9 9 '8Q '{/9ǾE"rUtU4ƀendstream endobj 106 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3306 >> stream x}V TL2G3zEQDZQ߭&#$Hx$B @`x*U{{jW%z`=s>۵?뮛Z;߷Nj&qN{'miآ7uyL/%oa |L>g^z~E~Ꟈ/]q)oR 4+aa.ZJ U.S Whco\,ߤ_&relB'ɷضf6wlٶ`P= ե3JUl:A, ^xI74oBKl#;.M-"XK#&b OJL#VӉ(b/1xEH ` ?b.&! O6{,H} >|ZT4X UI;w{ʌ)2NޟtZK9߽ܰqWAt`x;O,ߦJ3z}WP334㜝xsqa[=ZϻRw2(!Yjv H;b1Cnxu~KDA:>Ef|J ͼV.[uͺu[޽駗? >ip1=0Bx a+M =˯Rh=Աt{/.@)ZBY/"~L[d_b_Ao vyoot vDz'[3Ae;VDE&Ozuϻٻv16)-)V1r0jY-s2#?4j9t&FeH p@# G;3Qp AA e jH,>p4 4PKl4>4P|c9,nO[E EDҗ=Ğ(p炽TB|#i!WaPJNgI Z:kaLӲT <1 ɎFE dgj=:t*ubqñ(T4歕ROr 9jc'>QZoeܶQik'b3R<#s"ӯ6kq K=*<=?rFo_sl{r2/ "IQ?\v2un_;rm|# ѭBfz[tI9SmSDR k;y{^hl~3pR.B;A(E#/{}uktwfgcI6<0$fStYVXfnk>qX6)78[>1g22:7My C_l6/{Fa(\ Ǔ~  ) |07S6V|d#KSqʕBZ,Í٥Qh&44훹s~}ųemSP -NQ FFрk cGq] gB(kb4ь*ѾP \Md,@4ִJEk^ l~1۸jerZKAFa#sJ%6KG _GZZr[iUIƂ*@շغX1(&~pS}(IT/{¼$g^`]JpPc'~}ط%,}+b0Z"?~dge6$Qx1'N>[_1[]̚ܞ[2dz1 S~fʏk0lN-Z 6P5 ACH啧AnJzX@>+ݘV]`ؽdwdi!E@}ޗ|)փ4]ݏ%X?-X>~,IG!c-8Ruyn?x~~7ށq )w$B6&dPśH7Tr*@I)(4A~ ( >N>]V DKMWtɊ+=QYHM.? ޅ%L:?HI ⻎sC;4s$PؽI ؽ|2HSIۓEZ-){ĵq_AIg,WvPse]L2 A 7 ^E9"35eKՄNJ RS`)<<8`ҷ2ʶV2KuEBZla`bum.! ۚSo}vs)c`k2[>=hmځۇnG\\u>pu핵xD '7KɃ989M)hΚz):<⻟׋]蹊͌){Eq Kӫ838u}`<XL%NE'ݹMLt|hm/ӛHޞd 5;YMуy'_> stream x]n@ D|n։^rhUXL!9;$=0xV^o8ce?bd+[;cQe7A?h6UHTMy:7ٖf<[qA}ݿ_mh_ *l;)4`/RZP[[` SON~rJ#|D(ǝR^)1+̎2y+9B@" W)( )RPR<`0GWY< 03?}}O_۲ظrah;5OJçendstream endobj 108 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3160 >> stream xV PS,^-m$iMڊZ[kZQKa aI &էu+qPj[;oRhߛDŽd99CR>>>A+*^VFR&Jᗦr2n/7oN7_A;:ǣ̇іG(?I%̔fϞLˣ2gWD*՚y*ZbfL**yTL|2V$Xt:ykM߃JQL^ztMd"zUL\ڄs3'Sjj 5;zZOEP&j1 Rשerjz qÔ?5S}}#.Ozft衲Mcc~:Ά:qFGK݁<('qUb[g)-v!U:ؾ;9a/4 ѲP:T8}\ F>kDjh7\N5a<݂)+'d'aq(LN4V*$CԻnΌTzľz MKl:~Oue^s- 0zc'gZ2i>z~WBĶ#*ZHK~=ـ?s؎ d:{'\kiih 򋋌{TMQ5[O<?W$7Ï Uҍdnt(?}k ϪC,=76ao5uqB)SWHj0hɡ6"_@~C2'YjBފK6PvDB; q͍[ Ó`UΪfl LN!$4CQf I-<,kAo'ytwӊ+.\9HJAFA(uB=K@^Ѵ.ʔ`k6W]- ].i/m/L+ 6YX+ Źe\ نDI-le gW26sؗj]M'{- I&kxY @Þ !n>.;z1ymi/U(! [\QrtTCmGTq pSXL*W51W@z;^`(L઺6ʔ L:gs+A[Dl+!Z, ̭^T%Q`Cִv]YC|@e-l|ᑳSb0MX7*?o!jd Pu`4 fSm'4zO zu8/$qVgrI:ʟNL=bA鐹k KIEC `WJnh:y!^P[xdMYAz -线84{MY3C}PgI|%Ԥ1Uk֙HIe5<= u-Z}0W;F8^\ݐ=ay*s'w[Iʓ/u@c I((#.l̎zfs VÙ#0D<=MGI"'ᵃU%BJF$[6jvթ a8kx~O'I[%l.W$*·pÓQŶ&d@^T]^r=(={w6Zֱʓf2xR kc5W V&ûwCuut^G brՃݒw˗\C1 y{E 1 žiX_~NAρ&].hw9bmSKeaǹa6o{u\sA>E޿Ut؃ٳu:W% IUhᛪ9khKl<7u#\NpX佒jVbt[8ki0/MusA ,} :L7A={Qo GMG_=p憥 GSXOħpI+|Qԩ}(RWZXyyI ]t9-.s֦7)˓vs0wa΋ ͞lmAmPvsl./29/|8fXJg:1[cu4C^%6}ANr S7֢ms\^bU+fp,*qYH<**Ϗ&;\ 6 [мĬ3;EVUn6d/ : ]?m8$~3|לg= ,@'1y {\WǶ#߬ 0a"+Y#fwg> stream x]r_Oۥc (qg$uDVڹcy<\yI}=%";7"'-w)F\H6Zڏ%jaagb|NB;9\-˕5;{Zrn,yArE2g kE@IQ0MF顀2/Dpnyy)7|Z~/a.( CA 96g}whF*RN7d$TU_;DPdϯtv_^fyߨ촩/&Y{Q{7jY7?_zomD47V:[>oـ~;I ]hs"H@.&Ai &CPl/AJ߁I&)2`ӚR?`"r.:!Ȋ0QDpMCH 01Z1Zm̾|D:wA{cl!QfYӫ2 (. n0&.{_@0 > x֑un1P8<Nb*|&R Cj4jPh竓4NiHOE @) ֘BC3Q 8l]7r˪J\ a AQ -E'5"IKY &;lܽIH Y<(u@b"wJ&B7Q)<'mYC)8$NI=AHOrY߷/@ͪeE"4N0R| ,F  SL`! z+ '+طG }WCj4L6FFc]܍]Ljy80Q˾fFu2xDVՇ"n.F!7y9e6`%K%>(`L Vv.B[[vpr?k0[7 }7t;&ßq3"U>7^UyV_%__T}W5z|zU vӡjlCj.鼫Gn3;B6>W/w F,U!nOMlyNjw1"St5˪φ.,l؇Jqc#׭90UPo>1& Jp 10ٞFc"D=F-o&R;ĭIcarw` H lazI‰Oۗ۷Xu0Ҍ\ty ư41E&oҧ';ٿ:P*P#opk!>Y}Z/>Afnne3^\9K=c1VWj^fUSz ގ}q{TXhoT59s#c}r@]aD]U5g=ky)r &Uq n@\6p&sNq/O 5%cڬ(q2Aa]O_MNPnUB'鬩v_GY;~ݣ^S}hc0$!bô .-}Rval? tQ|,|&a7!ET5Z(595t!q2 eٻY5`(vb%f#E6vdw};X'uY C:>g6hy)HyMM5xp{?q{CQO B|7%тpKf  0.򲐘w&j$$[`RDJڛu-Nj,p-I8yŰ+}~rs?UqG}^?7褆%²U*/pܘRC Ĉ >QлAa%K9fp=ޢSYW(eB19d|wk+pd_ětmBp?4u1Tfށ ']0˾2P< MRf$Pnj6IcRi9V@F6쫯Ԍƶ5#V*ˀfV ^BW124Jnԋ 䪞l1k0uv6뢛x3u!E\& 5 Ä{8@V // Lȃ;,]BpMb#gn  =4Cg=_g߯uQgf[T}\>sUKH PҔiǩz!2u K-j>\Q2*4>Dfwg^dO#TIzwLhqw2<*fpO(@?FPd'BH+BH \"ː&IƉ'CMU!EX>><qSE3mt}qd>*(X4#ǵ]=Jt85 .,6_TŁd&OG޳jplƁ8Kϣdco'arѷ #?9m녓 Éz4%8xhS݉9d*P-S2F722z2=& rn:蘫`tz_4Eլ?(.7:n],鬻hRIL/ CuzDo]mKwճTv:,2P`jtuosP/%CuV)Է6!ښ}8Ʀnų1DZ"oſg%!(蓆Y\cmĉ7B­ӜI2+:{-=o͇7=1h:lκ}pd~}xoPVep?\I1<O.N.{dۻzkhGٱe/a-#Z:raXs3/brT慕ODI8Zxb֚>R>Bq4`DU5].*s]#E=5~Tذ5c}@_]ǽc&3+2IL \j{Bwfsx2TW`R.3P3dte5W0} jV;",w }껗Rd02TLoZAZ愐{WXAiˉa4r4<&tvxޗRvG.EvY QBfcf~0sr,a.,,:f('~gHA>2ӌ59q ):lLdUWخ(cb:gu{xBT2p`"%bBLeʚ#=UG஛_oj b{ #W ޹!CB9V L&JwL qrvlD(s_zE#++@Eig W/<̀P!z},us Y . TѽOfVj搎O@?Oib1Wcje 'D M}DW H_3՗Û?Ttvpٶ7^ߞO 1vx0*X3l*$ ბPbPו{0|4ӫ%'fNGC9 ^#gMXgΥu> stream x]v6S^ 5`$xΙ:93g6ّ 9KuSgr8vfy5@dՒfAI.&+ Ba2>IÑ|y14GdE𹽤9=dq2,5{K Ό2V ZTOV_^+1Y[<^0mi\siO,bj3 e:O@7nU͙9z @SBF|%yMt> ۄ|R0ejrq}u!bROrXϏr{T8zsa&R`3 XΧwwLVT)YSf v-1̻p91XZӿUru|fiZ$3a; '8ADEj9<9Äq D .פXhcv^3\ڬm[ 9 ?H{a'4s`0Li#0{g ] d&|8tö\U!9S0Q+pWXUٮ#_LesqV!CλDt| #wvh>:v҅bJ<݇,cxܥָOI)&spVMq?AD]aȰ)aٝòFzvi>v>0T~#oavtt!0^vPH@z]Mo9t<,a%)h1la"@ܾ,_^MS9k*Q ul xBeSp OYfi L_8*0Њ"l>eNS:yFn*d=R[7.Y6  gnp &C4 fbGOO*.?Ž 6.vTFx HT)Q `L-)sv46ܓS``9,'g "yiS-rB C #nwn \ҧ fKG ݰRg}O͢t'͋hT x񗣋߇7]^pvvlo]q;Vsj5.>MZr[֠[VWrV7rHr+STO(t^u "ժZlVZ Ӑ\pZ·6EM^tC c,9\s\v(k`{B1*x|3xRӌdd |=Ff >tuRIg{#uvv@mQR,.Ymˋ! 4&@q6-$QVHbE/hhPFM@v}aGvNdv;iG,rzK gֈ*VX MXsC<*к>^}^7'zU5]Y5c^]{OwM=7g/dhAy  WmöX6JlYSe-VVE}M8 PE}+T: ԧpm&H&Or8(4֚(<BGαFɹE$ɭD$FMADUzDS[gwhz[/#v. bZfrtKhG(Z0#^qx$ڤCJy?>%~"jy}j Bpߦ@m5Q{5i8?Aqv#!9gH]}"΋b"QnE0~p_(أ EM$." B0 },&**E}cKh:&ds:AsSљoy-η8 Qh-MbX $/B0K[:{6.3$aЂs!foYφTr~l1x:0=烙Q67q4eYFBa[F,:oC}aԆfOg5Lvi߁)C]?@in78oxoE i|( QvRϯ>J־)jC)#B 8&_~BE#o"iv]Po!"VADlaS?^5DuT7c2X]dra3wwaL2.pǟ% \l8WiRlx{} gAAxV9: ~W-+ަsrzσI=[νNx/:."o _j}WNigjF${o?O#,GueQ;8a;{d#8W9Yza>w,ʆ.CQ3Y{in9i}]Dέ/#?\m>ĕa 7 7%uf]!0|j5h5~fO@_wq N.4b|I׽Ɏ ڇTHl eSgt@H# [&WwuݟljB0yv3r6E5Au!֘)"9~/C}c+[.7HdMmZ碐ofj4ɶllLH3_H=r.ձ  oٞ )Xޮyfa%r.9ܒ;S.P嚉ٞsNms-J>;I׏'~^"n|S@l>h1Qendstream endobj 111 0 obj << /Filter /FlateDecode /Length 313 >> stream x]AnP DHțtED,Eo$颋-|Sicӗm0Nj&Ov~LۃXӥ[-?Ŋϲ/%[lYàMV7Nc:)j־tJR!J9\pS)*{ wߍR!щFvkcqJ(ǝR# Fn2&ɱW ;R@sZ;B@"0x@}a# =am]mK~qfʡdVendstream endobj 112 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2427 >> stream xUViTW颜aNG.&dq " KXhfiYDYn4HhAP" *bc&S䜩ndrGWwwa8$%ƻH6&%DjDuz_8H_,rq]gqGqҁ8qhX[]=֍~{u׮]MšӏERpdtLT$uhg*vhaG0gl=悹a_`ۈya1k fl1;l;f}9bN!3acX?n+ =uGȉ4{nstb H+҃YE&T5NdGJ= 1{Hqΰcs>'6TTˡB0]Y1e]&fy45ϡߣ;]^g`'pf̥Am@rXx 2Kts}Q*=Hk?ͣ5w` C'β~ޭRE֝Y|lmy:}܎Y_`ĥ ߴϑqҨ#V!fy˿ggS݋4% F Yѧ9ŌB_N}NO7 #3d'prh=i Ռ\:4߱SijoїMhb jN3׺XGk7PM}._D#yDž5)ZIK`${/8]N1nˮ:UI^gg@4R*KiKe6tBAH}>qq8U7V)Q5ښs-e=@jKʁjMrh=6z5q–;A^! 2!KUQX)9TxBYQhw$sg90>a-JgʨkڱλLp郛 3\l`Z>OQM(6s˔ ġW2dq C[(JE9Uy8q87-? N>=9=1,N75{ٚq6-bIq? vD OzgNk[gygB.BPQ2]+0Ng"|B6WVV64tUu9t5&$@E^j(%s1 >.vWt/(ʾ s r DqJ})<#/b/ _c;]mum-TcUKI_%*m3&Kw/zɗWhK r`a$fp aWRF1;FSKu{ iND[~}Fgfi0SlyeSoUYpVu,c=b4 eVY}2R[QU,2#SZğ9YIzy:X3{aHO$2?ynCHWԔ` !!}q)䢸Gz!nE'#VQ9 '*ɗR¤кI&؎ATSjjkAP EP_u80S.Kp;.ݗƉ +X>}F2Y| u'-2Z[ v fd nRh)f_Ap(P}*2(17(S+?߇W^^ЇlGH^}Ts m4jF_:F;o2;ZJvtc}vWj?C\^$gMtk,t1*|fI$x/F;bN'R0ty"D\9Y:h@zV+\5Yo륆jem5[ܩ^=!V%Ц҈hʩK8Q- H;U8W8d3oNsYWٵf0[/.½AT@t'] ?/B& /pKAV>Ƽ$>&+ qNHB^>%rbD2?-a)ċoϘ7e1U՝m}wؗ2*"@9yɯatsH {FoOgu' f8z̞(f~7-ZY ˓Q̯m MyO:@:ZҫJE(Дќ|.1؃kt0HmX#\ 9=3L у ?ƟnpQ bi7>{&X~2_?3٠߬0DKendstream endobj 113 0 obj << /Filter /FlateDecode /Length 330 >> stream x]n@{ހ{dm4.EI^#0.)RJ0ޖ9O+׹L<:>.}O7L > stream xuV Pgai/ڎ=NQcT.cF!!舢"&x 񂥣1hZh5}mne@骩{06"$ص..Jr\7TWDLaDl$L"#Լv6ARdn|~ c`XB*l uTFDlϝ+"9̓9{+U2/y<2Z V*d?O.*۴qFۺM77O^ . dt S||]nA>f/!zb:p' b%!XM'5Zb 1GX41` D’DL xdh i1k|ds򔩕i5ZKeQFqd䦑mf72ѿv{xaVNPH=G,6ND0dP/6S>10~WraHU Yim!4<) ./PRf3y%m2H%00z/ܙx4l@>{X= GG=;:nXx#xShmk@?aӠDQYl&gf#OwaW8˨ճ./:/^F`i) RgG;,Fx ^O+  <[l\D!/Q6Ɵ{)YdRd|.;{h%VVۏa< q͈鋧@sX;Yiw{Ôk^q}⡈@'>` m1yη`eSk!:FUj/jT4p{ɻ`}PE(v;yP.>UWlfYVQr٘ H/,烾F>=>NZ yI)r^XL ]MNצ5x^JZU!*E%` '֒u"UޢjᠾR<-ow* r{ηϧaQc,ګєibD㴟;'["N旻tJX.鋖IF RH. I޻x+pÉzB}DIG?+sMJUT JWq4WBll&G%$%eb"lCMIc^abJb3I[W/D1[sx,fhRծy[eTO=bB `7~9FӉ'#QVR^bW8!֢ʍVoLD%\ 9U};~%wK͉Je{#=-d51%t Sp`ocTAU1;-tJÚp3pqo' ሺa;شyVDoo (*IaJ+(V'P/j>?꣇dP}b7EOہZPqޞ|@>$zozؐt8,ٚ[*O@Bakf.$>tbsӹ wnvҫSf8}ıS|h V-7Ar7oqm6xdBM/s4+PpKdd'F/[:Оl6Wٝ=~ՃeHSiѷ6Yٷ՟Cz[J?uMV LJv"'PP%F3^O/U}|ɽe%\oa@|*:M "%3{ HƬuq[n\/mwvnZ=TPo-{|RZ(8< ɏ4#ݕ#k5/7_SܼXWTh #Q?lfstendstream endobj 115 0 obj << /Type /XRef /Length 136 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 116 /ID [<35d528726003d08e2e865fff1bdd1084>] >> stream xcb&F~0 $8Js?@6P,B DL R0,"`S`qV ~0y|  "ś"@$+fo`WIA*9[o endstream endobj startxref 71023 %%EOF Rcpp/vignettes/pdf/Rcpp-package.pdf0000644000176200001440000025430215030755472016745 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 4396 /Filter /FlateDecode /N 75 /First 634 >> stream x\ks6߶;x<;qdI١%f#H5=#ˤ H"` 8 $dX!8ā T&H,] F!IgI BJ@%tԁĸ/ Se#%ʓa,0 nCee`e*>@,4tHƘ D}I83XvF % $5U@T8Q''FP/@{6$F@hda,ɒᣂd(Hݠt"H1*H64ኚ Y N݀$+q&F_AМV3d͡d-d Y!Y'!pԅF2 !dc!@ř $7NJ@rl $H WE CUXAt2"Om :tiǰ^ˊ~Eآ<_P4yU:]?Mr*sʏPŰ~z8oQ?P2RiZgwO),f:3>z8=>&(BhP9iQ93{qz)v22s65Ny^3:-8*E6FsTqᗶ ^i;(ʚMWc܁35G?h9G/ ǽv_8(4ު!e5FOcв{2~yŽ^m_ GH|)i*^hF+;h|IU3D<:8642\7Rt#E7R fF6K:Fct[U枎>]^M~{9I9_⚰騪nQ f BULywWQC>oh}$]:טͥ; =Ѿb*3U5}"ڵ3v{ ^,1{SҌK枡4kח<^/߯L1|s,i?JYi,z^E?FoQ/:ΣQ]F߇i/ei4ɋbV7Ut,FM&+< ۨ PJՇUݜ0PDwq*ۼ~*꨾eYT.q{9JLi0z>L+LŞ4s4 /M|e7m ^UUp^ 3: b~>G?"FOzmZR;#NpwsɣRd R +`z z+i_"'44E86QD* R|jH S"2O]  4hl<|[E׭{Fk?p?+F"@5Ja=J#Ⱦ^u0B̀vL9@>8PLGsn7ԯ~[-I?pnH ɳ)$†m! L$)б$}{p {xaQ Spd'l NIn2HC5wZA" V06ÛHu̓(ٕOFK'#0L(Z+%z@^NDѻ,i)#IoteaziF~u6{mT5$0̕0!MqL2Lll `7q*SxwIY9l`tdzZkJoӜ\޵-Z4r=mn\tGbb@\BdyeޕSz_MLm_۾nJҮ /;ךe[qu,ǧ^~7k _w ?{.`Rl;x2I0&^F.(t$BKPs BR-chRӹ73渮5)=sߙth,yU VክNl&6d'XLob]@XLM}_ƋI8JuIE6hDh|p-bp/q9M [ggb=\r7XbȌ-XO'=rcXŋ?yMLdluV,fGh-dɬ͎{1̾guKy?lϖ|r0s#SmA4!i:(]X԰Q'wg !OY=&ǷW~!0Fv\1?\Rk6ìD1FU~9A_dNbŠq1@rM#u;VQHr ڜZFN]-Et($~x*Oփƅp'om9 Wc~M]3S ru6 1:p~#tcN$.A~ralif&nwniP2ŧFj'+<ȋpt0/RܪI  Ps|@6:1=x8('C%B"!PC}n[~ϯ$4OܢOlOT{i6{+Qٮ]oKs8ۊkHXUq(bf2V@{xh=׿i@uX/uV:R:ϸ! -xB""u)m_Bxwx h ^{gnVOu]tZI סu}P_ vˮxqm t xt͊~i1#V`l}?$Zl%v> lP1aa-y,hjb5ǯ0!`ny)Jg%9ZAU:sA0_VrJCDN[|rZsS>NۄvN"ocxlȲ}%b2IV($V9 QiϠPK_cɹƏzoݨo@B wGhEi=R0a/IB5A`ABÉ 3:3A'ngoA6`iMH_UBGR{m>kp!X{ێ78fhT9 >4@`[Fz߸coؐv)e`܂ؤ p{j,=ILNs=WoUJ6 >i&{ۼ-ݽ{)3 tg`A Ԗawd bfX4_*>|Ld1\9 } #14žU1%dmZ3(x/ Zz4S\z. vo&lMY 83oh 1E !ܯTa<5P3G P  E Q[:lYz_]eЎ]Xm5'|['{endstream endobj 77 0 obj << /Subtype /XML /Type /Metadata /Length 1658 >> stream GPL Ghostscript 10.05.0 2025-07-01T07:57:30-05:00 2025-07-01T07:57:30-05:00 2025-07-01T07:57:30-05:00 LaTeX with hyperref endstream endobj 78 0 obj << /Type /ObjStm /Length 2882 /Filter /FlateDecode /N 74 /First 652 >> stream x[[sH~_я3EK(d8J^_wZ˲-.I A-;s`A0XLFςb࢙eǢ=ϤRx#0i#NFi&YTL <5S SFJ Ţ1eXUk`Z6B1)4$3BSGfhq),3[43Q-Ϭ p"0C#2k0 ) KŜRj$,Ae1hfD>nW*YI &w+ͼ2 WSWPBkz-d IzK  $<L#K(@#h֊ &׉_&8P4no$1K.1hD1D?e%ђ$z%Ґn0SFKLZ"\($ed9^0Dzl eGt.Ӝe/Q1޽ V{}l;?/HӓǃY%}&/=υ0x WhcQq^ $ՃJ9#YAX): 0hYgç5( ª (U^^,Ag8Q>,u{ȅhie.zW-vgi-7QqI&ٺvOOEb܆]K:k6`=f[ieX%SIHfC\[GxH*.(nRdPX=(3gXIdYKV=Kx&&m-2ȊUʫva9+/Y>h{_KHەU6˪-6UW Q;TRMj;!Hcd37E`Šԝ[IdxuRwx_ξ=p=$k{+mqw¢%-vron ⶠe\~Tr*'k%P4~5XG\ۊԾ \븶9$Izgotb<X\b|p$XW؞_NnS:@muO*l"YvqNGaI0_Etfۇk}1`Wj2;g "aȲS4ZA Y!Y:(᪝:?*h[>LEJw<=yH#(d#by<,~46)" r+}C&p.Xv8m YQ8|⬃KW>p=(dS|©3^3e}gg#Ҁ"<;Nr^-QŢ};i)> 2p$?6 w0v,cNBCZfNYx~` 4o8mJ\ 8DJ1Ip?*X2+ _/(o .Xs;)3r9>kc^Q,FT„t;elRiN95w"r&qA%Gi888#%BFTo$R>* HhY9)74ТF栮 U۠ G "+Q`A"Wq%Dݫ KƒB<{ߋ[~;m(j j%4)κi}y?Ns,:^z~U)t*I**a,o42|B344ZfЏy\;=Pʸ#k͍ ȿHC}ܳRWBv5pE:#MY>|b1+/$~UYTo8`:˷iOi8$2@7}F;%<)HwY,@ t*7irnҗM4붣U3Vt`R6^'JzR4z"P~۝'IZ&tAhKPTnl芀f.mTIwZAY{5u.'6,b.[;';<˫];ϵP 5{8:$pfۈkNN+)r? ,"=h?t4\K*(zXR6ߺk.<R#黥fdaeD^MٗtɾPoqkIY)ItHNH=^fΫ\i{<,Y>լVJ4/}}H\endstream endobj 153 0 obj << /Filter /FlateDecode /Length 7156 >> stream x]n#1!LliU]z6 v: &7T%TjOgBVdIvrHK"!yxw.>*r1*ȋRK4ݨ:fg'OI &FȝrDk/Gg7'ُcUeD&kθ,͖W㉲Ȭ./ VӏР0fg^4/Z~Rl'zJ/g9yvځѪbpj0X{-[Z/c8Hol,|QlV/.m궭Dz#; lu#\87:my1$/gr=)M5_vwQEnD1zʑΝߛ(Gr :$4eiQ^R=0L)QY`IjSzݶo^͛1p҈c^Ϻ)U cS-"h2 BIHVtآ е# ڐ)O*|at %L8KQAzo9tt~DDO xqoFHd ^#Ÿ4{[LlNS p}8a_G3R[+ ]M((gҎJg lr;T<_usYǀ@ ް2LI@VF(i[8i]6?edDm`A O%V,3{+8XHl͉C,,l*kl(aJ'_4Uy,$>r۞t13B˫Bḇ05417:CnLL{q%#NZ1H舩/ml]Bn66U09ˏ̪jDŽetJʾĉa6+LBw1)`hGNG- iP|6B# ǨSM2jX_6 IKֵux>rE |uN":sM C1d/1E_o+A~zs{j>X$D(v8`݇o`d1=6+؀ (I} \I؜%AQ%< Xa^'DʠrO#6ص1aw?>0xӽ#Ȋ {;ul:eƤ4=_zdbB&"w d˫a LoesET-)R EPUمD|ûpH6e9dEAX0/&r[SEqOPʼne&$m3?uهY -\fu5cO]>Sjn{ 㗻:Z-ˮqR*WM?jNFPR҂%*>-E Krh`:!Aox MIgІzwkܮw;@vbPfSI5U]\ !@1?ŰD ьBk:vr VR/0AfXD nlַՓ(Q(Oh&ɀ>[snt*}l(x>1/@!Cue75`} ⽫H oLIS@;v܃OE 8$z+('8IOٮ I).>tAjWY)Ľ sʐ$`.z[ݏ[9:y')ss%qGm߬+;.8 G (#xr/t]6MJ̠ͩD!ɠQ, U]V7żj"5:/ݽçU"A7 ͜C;]C~k¬$p|~ˠǚؑY֢iIjkwr,:'t@D-G `x?4:mf"RQE][Z1aښSY&ཞs.UIG%D0YTσ N'oV "i8> ]TrhDL #j;cf׫:FMP?% tHa\m!A ka:->QޱkK*Of_ҷ%t % SiLsH$KpnOHɺυ  pM(y`i]vYy&Eؕ=fa4x0F PB&)?%#J./IC;a#jw9̇~O΢f%l<Q=2nL{/R2 cBQ VUgl$ kl R9$$7YMQ>\v^jAUcmnAP5.+QZ'ڈ`DQSB]a=y_]ΒuP9[|̣B"~\ˆnKDiMzɝཐV&DO%^j"ץI/*( #.77="[kR5W"RL*U )P@yUʕAR薖,EM6 j]G-^B X-! !! Pyb)i6V k¿=,BE,uz)58 [2= W&ZSa۲Qkq6_"t}6r]vrh@*I$V/(UXy0?]CVA?jDM[sx"8oU*޾#SN?%.p(d"HdUARa_(5T-#Z\Bj$@97`P$f0w@ɚBDc(ӊZ t Mv[@de1$z { 4_:a;C[]$=x bT,n/Fx谸 .Q'>{,>Jo!?A~}R;C%Z=A)]5o:|= )z .(9`-n5`hxT1(WFbKzu=(raGgc fJ9_b'̿T)ES!|<߾o߽HZ?0i]&6&'lu3@rԤ_7$ 0wOc#cVV$nDZzj3y'+S,mT5 -Ϣll }`Y&"5aI5T;D%Z b'slE 5ϩK+ qr@H>H <(C:~WCb݀#9) GPMG cX&J>U]-ڻUW׬ űb;XgyaSZ )sލ"2բNX[uHiB-G= ,b6DXF$zW8U|9]lfcs1o :cUu\#@AURy꿒xKp`,"L? vGiٻuM8n.P'@D+4ijpcct:*E` *!Ż=EÅD \q+7Ϫm$MA"їTst:A'OoRh(@C"O8JlU\‚[!^~1t{@t[˦Q+:#:mR;V*30HM 1R<M#<%/{g8z#p- /GaZx A x' @;̓/UЧR?*N<ݓRk<Ġ'DpK(dIʲ)@PwrP($I3*)l H9Ht%ɋ4[Nt0@H3 z2$_]sܛ75Aѿ93H*F~P,m#*s^!쿟3~g]X<{!I"DḕPcVξTeƚ{,`Ƨ\IU?M 4х 2ONvbS`\˸4fd_*ʂ+q|H'h K%6Cik^'ÏVu:LBI-| 'm)MqYH3z&Wd&\(p-i) o>ՁClGrDBD|0ᝑ\%Y%q+tg[ W}Pm#pi{},/ȵC$TotE-1E1 hr,q hLK0Vq?`~lI<,LrD^@fXr;uEW: OUY4w e.MzNT( "%&*Q>N% ^S}ʄ ]qBڲ#8>~ ڞN@ѽv"ХU>_\@xDp߭]D*sKZ  <2%?Ű&(Cl ǿQ1 sʖy3OV,oVmj^wqfB4^ixjw-Ί}XćGzfwIkq ¾bj;տsӝdlw,n{-ytG'3qn+endstream endobj 154 0 obj << /Filter /FlateDecode /Length 6189 >> stream xWi|Ok'<1>yȒ؇ӟARxd мhf!ѣ80IWrX%n16*P]/+fcS5@"Э!aI.R+bƱT[&cy6B5.pl-p\q}4!]̀xLd>lІY V `FmuY<`^6K#RE  Cc#0I7D~y;9 Db5tƪ;FpM%3}r B68*;ߎ})8b4a&gP0N5A>&p0N"5`M4^#k obKL 1QH /@JT#2(=} -oލWw 5@z8yl>8[-V6ԅ.@+o7t O& )(|b1vB>X|,+Z(;ۆz6 :>/HX9U`AqםR4pdCxX0"J: ^=:gO`6߃;"Iv@vpT`I4J C(J'q4f9+ /|6oS 1N o rUv1fBJ9l&%yqgBˍ*br~s][oBh]ΝaK)m6kY9O|,wev`7s <!H hB5+bl0G_,@ۆCTLXzEfb/شkZ~,gpvWWzv380CMXHԞ]0@9''8a/Qطh0_,* A]cjCئ{CFٔ0ѪPJ^x^VKUϋu|}\U[\+P:tmnfuqz;=QqPhlHE~}jN |1Lh.PꟖwh!LGWzQt4dz?NhzvaiIo NJ;5RBw_Bagde 3p=(o|T.*+qHP{^kz%eNK;O1/1lk DL)d2d)|4;j|IPp5$+ .8 3Q6g/2M|kWMXVٖ͋ [Q%lʆ d7H1DbZK]Zls}Aܫʸ)Jte U`pTxJYN \ioHBH+,։6H}\اG/1ZRLbGRijQtz*xY`3u6J8SAЀL9==R0S,|O2URG/зp>X*`o 02bI !#'Mbb sW)xgH.pFW4N1e@|nbJEZtT_ŷJ9Ef5wҁjcK/ 2|< D _2دK|OQ` VQ`UQ4J`ݢMoI$\<,;Ll~M2n28[4D9V';ތDZ""-ѽg#^om󅑫a>dqbfe IҠZ^9%wl',@׮T:f ׻:9N@3ҖY~ǀ+'䤳4OFe`Y)mmktAݴEqRy!lݞj1rA;@:38akkfN=gWT R/<ΗW`}aEX 4dt[Kaizi8V\aÎmi8%0Ѡ޼*:8MBq!*LFv CUqw+w:1q۽ 6/Ιmf6Syw޴6c\ ^ٻ I'%%:fcxvzB"ѭIb_w4p>n/ Fyn&24+z60R uRx7.jq. =?[w3 ,TF`f܈¾_f7ed{ƘLE,L\dԇ LoXF uk`Ą/,/ߕiEªsډ*?ܕ.޶n޸'ƋxXN\"xbʭln_`zBadK HbmE?p^}Ǧ~>]%>66Kh4y ̲m#RXmqQz@d)k7||o׷T.AT~C|ЯMfW=D뵮 wW&Od`?}2L -".hy~J'ialD zO)+Fī0>{'Z'=!؝"51g7g$`Ćw8 bY|K:? \ iefʆN*.RW۟ge(v UC>6hXۓl'C =LA>nGClwN{O/c>ùK'[.?D)Sa@?H) Mb6p<}S.HȔk7#8!pgD|}dGGy?d/@L4؋u1By/ti2:{4Irhv l} m3Ry_,F+י|ұXl j]]z<$âDA 1^iIRȠ@N)W$ 2]zK\3//lxږ͙-ӈ*SlL}YUqS73Sp^٘)Ze7Ejۤ昽j}V4Icu"bYImw3L{2iti2_#cxg, m,6ew 'ZY/#+lЂ,t^џ+oK3f`mPyZƇhMI=]/.YUn~Yd1kkbzhzIkz3D7rD. (g~H-]V%-ZbN]ݵN{%#~ޗbԹi*1 D~`Z-ljHawfzŢ(68p[չH 22ٴܥ(IE^}x֧)).v008ջ)lݮpϧ^twԶTzxض0@swUգ# {4wCt]_'BW]&xV8ŦcVl\Uj.6-1TX?f?.6EB͙20P+2='7ۻa74sOũ&6s*X m̠7[Gj9613WԂYf{_ݒH˛7yyq jv'X#,aZ]Cy7׃q?a05o=󙬃^ˣ +3:4@cjf!{E BK LcB LŪW3&d]Q7-]J3q&]/LWͪvs4t/[C#5Q*_3d=(<[7s ~d 8]hmJYؐN+37Yt7ñ^Gp.ڥ@8 Bt.`޸~}- m3_3ms5}ʎ^sݯC_#oފԿݗ(Uٷx҉h?h+JAD8蔭dܾ`#7%7P´=fL#a֙pvk\6$Cˢ);涂O y7ޛ2})DzRqc 4-;1IhOA7gL9t}x.#!c-~ ]˲:*n\: g{tb>Xլ0W 'e?gnX 垍wL^.K6&CnI=˽Jnz,Pݚ(y#FjRi*vlRWI8s[bDfŅM iɑLIe$<=kp.I2l0 L!%ǣuW!#(`Yc&8oۋYϨgu`XO)` C}jAf>'b$XQz:t?8~\".nSU*GneHm(endstream endobj 155 0 obj << /Filter /FlateDecode /Length 5922 >> stream xB ށ-iӆZytDŲwG2=(ɬ\6~FV=[& D2 k,7JZu+CotFϳO@ίQ 5 ?%a]j*8ercx `M D*m N9Q楖V+{k[7k+ ':=ڡ/2JOZUPFY6과 *4_σV31(/tDqLts?Rk b mY&S!(I0hKzW"۴s 㤈 PU.l]FyW.R &,*Q&yݬfU`>`'^́a6ؚezUofp8fA`}"i3X4Y  p O.[BG9U, pl/ AK" 5QzU>a:HA{lNhj_mCwdgէ; 'x{/`ZwW\#vzVQ*2ڠ,4*Sy vOph,G_\2DMWD qexDp0jOwjϝp'2@9K DϏQyHP}P" s'$9w&A͈s. ?.\O TR(` p}W -GPwWSD=!K_@OH z%\2Xc(#*1AeyD 3’cd95P?#t4jyj=99R8 kv"̘^Ah?ݱGobMV9>;4DJr9!@B w29hс?eEPU8\FR }<\dsx l 7&OI$ i !T6@t@O%'s&AX1e$tS18y)"2z ḀpY+@_Jpwy )JC4{ZSfJJ1<ɫt c1UiHs?%)5 ! \ylռZUtT֢@+} .w#S :Nl!.⠎]aG 3 ;eBVcXW7#E$i1yճGDC'!h-6s|X6m&k,9a#B-Ia nIba ”zv}׫jh bu) r`]6NtX⨀0֥8(&C[9 Y =䩤@|GMr3sPاkrY~ai#d;R @,0q&>PÉzWaYU|TrBCKڰDCkM`ՠ:[ UjXR)Cgh4c}y)b ݢ88^׳l|u>%ܪt9 0ȵ xU# +;4?BıWIL7xj%2D )*A6R{(h=ǛU=C+ᴖ7JSti-ZOҫ :=a.:t2TA;ya:LTS͘4@Nw(J+A%bmfK-Ÿ/ A"Kir j#Iq2wЍ0Mo0 D EK@8.b6etppO:@c P!9߄͂KTCPAH!Z@Ꮔ7ܞ A])m B㱴UP$C)@M*WcI]QFA,zq^C6,ԅay,oTrtLUC,Gҟ IoHyyCNb=܌&9pQQ{0Ck˾"cxQ>~26Pv )=?HIa.9Z lUȜb8a5`/  1!Y3 uw-o_B!~R{-"FdMMxƬF,fWD->B-h%䏄VcBty]}.@&JKr!|Jm$+'\qGw/L(;[6hz\YN KJx eȑe4ꗭ,.џ2AVFT"Q:U_d=J([gwoyhD ^^=FsθU#ttUie޻vzYˆ(ef{>lQ*X>:7u;q#Ñ5 {~ɐ^m| kg(pB06T'4q1xCn_@]ܸ0a®}=j4N[2x%>XP7PtaXӪ k,F]G @w0@ B ͉p3dVx{ <wsX?!Xou L)j1qw#Z㈲ a5d}8ʝZ{#A$xY.KX  E VqM!O("B CKh(7ɍ."i^z&ed. ݭ($#M ﷩C/;W.E\wyK52.0=*6NJTtGb`h˫v[k*}[hkVX,"e\1wc:JMx !H& $CL: %mL кo'^gWy-#orLn{CƋ bz(%aĤ&oUz(:O1/.*S5a: xXdߺbBI~wDU[ϵ~!7 )1}L웩Do_0"7)[ڋ:4gx+`r*`3C t &#}ًCŎ埘9u"_0*nmx6 P"TԢEb 6/(`~\(3bn~K@Jzq*ebсo&+%[%Bg2wz 9YbbӚ Օq> stream x]n@D{~@$oo7kE P`a""I7ӏ6vYoc[N:۸_gǡ6׷}1n/t],Ki6VljKOs`ϴ"^i"Ns`gZ$ :> stream xW PWeSvCgZ# Ȯ :(0 ʸ( ed 6Ш%1J-11(9ͻ`UWgi ed@I$Aʤ4upT<'Ub XIQh {W+d25DF%a;hpgP}Sv;:JѦ*4D777>Z˿==je|2oCk$EƙV(xMS&*9v>yE"5*JNT1džS7|*9VQl5ūS1J"=F"SIJyOJ(byW&$Ŋ~*Yçy9!Tj:&U O~5 QQZIyUy2V&zי&J5t'Z*)QZJIUMHS+iϧ*Rcj\1*:*%%QW/JZ܏*O`UxؿEQf'xzz5i~kFGkcb*Zdh0Q ?4yTWi(j,5 Q (kʆ lEbʞZB9P!#QsPʓ> KQ(j25GM@ʘ2(32T@ʂLYRC(J S#5@M'JQm-d䎁,?F312fh%5&H+i J_0~ր b;ٞ+dLˍw_1~ikfʘZ:z^3}jav  D?H9{,N`N"[J{xH}BTK@:Lu[Ym*rXvkQr ?";bį3)cd0D H%g7fl{aWi  s~3Xu]c5kK I8CXlTXZ,A,C-ނ7%%%6tsg&/ڄyY,1'S FL"J|{b~0'0{i//V#ς8PooW;:EXjt|N 4 ׯ@(׽1;kV H)xr;qq\nDDhnX$ԑ9m. y?, zP[ؑd0ٖBsQpTk9ߪZTU}ET}EETdDM HE$v>lM=M[#K?qyL~fKƮ]|([+ptl_skk /&ԙp$4<6{aϖ.}͔#M<<ϰbnXc[{;wg?\${lܳmVemy i%^~N G,w7 ;b\ Am" !:]=T"j0sWDO*%_1g`>ܹpFl.ceH륓AU&qB@v$=*)Orq h^$ĎJfQrRBuI;acWv FɅJp^w(8:i>ija<G>~\Bܝ ǹԂP M ̺ml!+ՂDs)m6cmyo :׆,B(eGOuKQ Zu|m&=}ϸgjoөr~fKRZ;6E#{5rQ{Y#Kny5z|YF@9cZXf! `Sl61韯LNxg/H~6a&$ܽ{eo2"b>_߇a# $c\!Ohλ~YZ_EF23*72>ƺ$Y]Kpcak/olEۈ%趷)Oͳ -[reQ8j6ƕ%8ye to20BIgq0U:pںw|o:Ң-@Z^ SNњc|uĹAyu)reEx.qJO~GFDSN:ĆTD [U6߸vg$b)'軳$#dELIJ mh mv`ظX"S[kz  `223d O@ 0| v,O&DM#\8)fAYE`{%iM^b\M-D_3JẽH)Dg=#.gTTrcM4Oo4$ ۰iM"gA XIp"1!DhV~IX)zmLĊ9TܛD"O@x4?tqo!B-e 7juO G0tc啨v*WԨ^{<3Hw6}j}T&!U޺ʍGN֗֐F a#׷4eLG$6'h'l-В %~4'u+ONvm[d0\Hx6aSy0VXx<@LHN[hD􋯾KGљx쳏  {<3kO5'ţBbdMah2)+ϫEregt|s?kh`%ELP|hbc .fJ`9@C\L R"ݍ˸>Δ#S\#z*>-}xsRd{=뉿a6'F N r?E9 QdsK@МH(usY1?3ryĮ ᅨǥ95WYT=ܭ3f/ t[ ѩ"џ]{SKuNǎD<;!}kHp'0d‹3g'a(Ws#OGX0tӰOIdRf\2v{~#S65,#!YX8"60 +-r='lW DĘBIjpc`꺯Z'C ^`Uӊ{^5SIuv{lapeő|yNᬂb[)|Cv~puK\gD̝s7# @:)n2]}Wq??L'5"G ð a' =+=`hk *Ѕ`l cLz251GL(#[endstream endobj 158 0 obj << /Filter /FlateDecode /Length 542 >> stream x]1n@D{7%o6v"A4T"d33SF"ffw}zy~Yηnz[7/ױuz^6}7ۧu|۰7omsjwhL}v׶y8uӖ鿟ߟ8͟y> stream xmWw\u:hvWk,bP M`Ui`r1HA*bA !h3%y;yYؽܹs|GD!K}܂UK֚)??RG&h i&i}اC~"m>*)mjw-;CBTnƖJS{ 1 xiwRoB(j%K- Z"dBm}NU[l%6P2j(Qpj5O) lQ~v:uҖtDG2G$if0nv4moW,2U2s ֽנvH͐!׆ԟZJ#5 ?tx(P5x5=bhpx(%7/jfu:Jh\L]e%ץPV_l,3yR>Dsp8ڛl`z73\򲐷x2z?N8Z2ꤿAڿ4L;`.͎{H{!l>{z/-. Nc&rN3|T C~OsQP.2em6;6ڮN+bj"M7w!$<80_0qoxbօv_`w80y_?lվ ΋Xè8<< F9Aa `ReELFq(4ӌ>%i[|`Fy.߄\"džXATĺfoɾė 0׍pT%(z_%S s2,b]\|RH`RV%j4HZ Bu0>y}s懶ڟ d }[>wuql0'mU؛G3?`|%7cK`8< gkӏQ`G&,lUTjHn:̶𳆲we|:|N6>2G J2"RҍU{Id$B2UZV1h|O奄CN 0un쭐,-C%ST^P=҇w&@LŠ=_z+|iz(|0zqmi@RdYRX a.C]B oYȜJYCrcSϬ4y܃)wO ޗr`A]jL: YuF޾v@yHw9C:k@Dž5![{fdk+o>z46h翃IF GF(3%RmȮ ,#76Y\l' GgaђDW3h\.c~0ˎtUlkUj( 6oͦJڟn'%nUB ^$G]f-IydU{ao"\Hp&< &mdPdJ_WS0ZK2fBS2X&f Oo3Fvjn'n*Gx'U}*.7jA*D\+k9bP.oqb.=Vy ,-.܋9{?KjN5~6 `pu oqSx/m$بGjw?'ƞsr['y $;dGè >27ՎElBRb?JM"w3w.VVrYDjλRK~qVoEs@٩[WèJ"i)Q:!yD4^`aĥ~ƓŒ5_ :O0 O%Yx1M{SvᡟaRjCroFVdv?PL ), 6F\PBĔ'^]X| 6ۉIDmԳ|XAÃEηI:osZj+o4TW*f޳"xyra1hU5ךZn+*oE_x\j1U"S1;˸GQcy @zavV\Lb;3.'򎔶:TM 0ܹX[ :XNVF__Krr.$Hzy0brB鞭 VQ i`sj`THo9{OΈoq~Q:% i(6acP٘tbyW ؒbހ ^ |oX% moRQb[a(|r8*R(͉b20f$bKs"UA!a:i›9/eF7> stream x]=n@{7}? lc7.I.@Q+C)>3c9EG`l}o><{ަ_]ym﷏ujݩ^ͰHzNo>}򙿏omst;e:ίmsz\7NOwC=A3xT5jόjjAv,@=@(((A1A,V5UQ5U+,,+,,c p---+,4𚘍^kb62xMFfl51 &H#i4 @p C1lbƁx(p6.#e4rظFa2r9l\FN#K( %`Q$T, EPQ(P* :tl1&!dp-6d`M7bhMdpO;y?RSM.6!L &RI\J0)K &r)`B.%Lȥ `R0RH*":94:H"> stream xuW XWמ23*Dm.( U{+ZQֈX*ZD "}wy?ɓ9wDAJ$ _|MzPTظ5m$?D& 2#C4t?J,-O2.>*|E0q8'N:jy[ŦKIN2cSRb3z}"Τ[Z $FHQdהйni^k3}e/͉]1?nA|ʠU Cƌu^; :8:94yؔӦ|3ʆOMS H*E-1T5ZDS-JͥSaeGSIM(ʛr|('jLR(?j2O )#eLP&ʔ2"()5(s*Q}(Kj05JɨT_ʋ2 拾uqOIP%.0f0 `Id\&&yȚ YU_[77n'(C?C0##_":ƕ/M䙼`9c S'_4U Z{%J~B'C ׂS$4ޣM`CIFBQrx- .1k|0kn vYHlptGA%#}kVFx+H$G5#쪂*X2{l* ]>\QJ?+\ѵv{ՇQmVUسkh ZbDzg}QL^ꬴ͋ȟsvBsZ_NV.ؗ7&cMz%e򶭢1ãvS[fS7'/ɽ6c.v J\]!* N,q  @舭BC@XTjX;G\28+f$xύA†eÛܮ-zq +&'t!A| @ YrJ~"@`!2J~쪐Ү8{ 5鍈!/@`\ &g2Z? &ȥ] x&@*JBՈ_|A2ȂLl2'ghM h,Ǿ*ءFH˶m.X?$-OXJ^3<o>^ߓ}T$ m[UC\؈k^i2c8(jon3 yCJ_53Z9b6? 7jYߏtM_Mmnduюv$vF(|¬ vnjLs{| rw:wG3SteRM+9Qĺ2ނ~J !$n~ f2BoesӯoJFУtVĞ[+=o^VQeop}"6px^,51 I?(R*_à̵ޛp9_&OK G݀?zS+xUt~b7G'R6eL\yb}bO֕|_Γ?1 6|A)@np .:ؑ"dE( v ؚ@l[B4XBXI-/t7TUwOR=mRNғ0#]:?F% G8MogM׶&2 Ua{$D*$!4&LY";/Y~dg36@%{?|`%imI%{*-q%6`Wi`'yE!~a ʗy؋t߭ŃDjmc&L Q@C$x\!59A'2tށE0 GqקЌLw `|K=xejv0YQuF2R[MF:>cN"qɖ+O2|Xd\_ؙͺ6>*أ.1Cg/;\ٴV<\ 1=¼]2}z~4>%P*'f1Qx,'bt>~>T^ymu~:YuMeek,Fheaw6}4;3u> %wLwYrP?)_tMμBXd vxXc;ago>:Ip"-Z)YbDxW79؃}76Ğ\Rjn#RHܬo6"tƵ YqnaZ!o݈9K3'VH @Tf,z<-&r%HśogT~X0фmd>VD!rԦY2Bsdh2u҈?}6&K2Ewk &[?I+E^D͘6ly lCm%N~-H R,]B27pֈ()m~k%/6tMSasMiaB YF?}L& O+4^ie QX1_#L=78rxY2T{, F=jagb%OIңk凚."Gx{$h8@"S^Y䎊i ږG89l/ 6 8q.lXY7Ewg.ϘD Y =9$xCI >)Rt:pRya~[x,["5,[qiIB.Ƒ11~][ׯ{EbotL"eCsY_7?;udL;:8]_zύ:.:跫f^UU;/4y%Ů6U;w;zOk>pVЪ%qrExe^K>xj;=:-^@"m9aa[D8PEW03Ҥ.2=C,<+.8xoBqbUCsb>oH/cc L5ؚ_FA.PbN! zP}N I%Ct撧5gm^X7nfxœL)GV 8mƂ<44z]rI@b-ӈkȪ6L'}3Gs[Hj5Ƕ6vV r"!Y偷»Z;à,u_(V^syn1zD8sm|Mk|iLF08$ğKi삷x!8}EW@ XN= |1zq. %v|`ͳbBҬӧɏ?I\(.7NJ"dM]ػ8Rô.ۉ`Vo;{}sj ю`38!p5)endstream endobj 162 0 obj << /Filter /FlateDecode /Length 426 >> stream x]n0D %uc/%E)*!8}fI= '.s:^6NK}6nǸ/[=OG}SN}K6箋7x?vݸO3Oאendstream endobj 163 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4021 >> stream x}W TW֮eT1h4HDesT4,N7qa] @EE4c0T4ƌQ$ɘLfVnn?yUԻD!&nP*K{Ƀ"b "~?SY!k18cҀzm ~HEmAʨĘX;'GǷkhn_@2^j[c2^xjRa/Smo޲kޛQ, PGEYS%o{n -DžNo/Zd{1Hl"f /B!ބp#> ܉JbXKM#w bƒ$& BJ$BFL!tbaI$C"QR x޲MZҒ,LJS^Yn̞Ƕ[[?lWO0a݄ &1QktJ{n-hqO8~NWLB<:mJBYzzjh4 Ӣ?ZE![ ZG+E /Y^2L.ҐyrҿRS|pxJf!|w]wdf2 힊ƕL6Є*ӸߴNl2 I7>{¹M VI=)Jag3`aq';@b^ 2?LajmȧOq> sXq==7olX #9i=tuROV%Lˏ`!'Qo ~{ҿ|.%ՆjX)@axfeSī3a4:`WF+R7l2O! UGvDL@4'eh% GLPM+(5O^WHݻ76gW"tZ^?.?|6% vHiVFL %awBI$MahK#$4e@X<! 6AXp>J)t Rj>.o _UԳjt5Lax#*vڱy{+aEܒH~~u7呋<T3ye DQL"$sRRWR]-a.}j~8 S _`B6%&ˎ)PVtFfLC{]z԰HR,D),^t1Khp }R\ϭy/pT^!xAH2 ; ɷz]jidhEq~\*<ɉX1_ϒf0eD=i5zK}!:ԀDP0KNکVDg8)UU/x懳ъ8mMSBh K5U Q9bpʅ"tNo`!Cj@!i7Z4%ub"'Dp1[8>f؄jٵ [U=/)e6A=HHBo &Q\Ϲ́Vª+:T@&CT3EN mr!X,ա#U Ϋ$ư$1RW,ǙA1H!uj*b? FUx@T-(f 4(PQԈ(m͑ބLYGV#!bj iq(Aį4KOK -_( 3x,:/e.k=G9[cƫ8@7N6 ^ߑai Z7T@{Pax/z*!jڴ|Ґu-] ӆ$-ZuƊ{]N,dw Gnȭ3 :ɚk~2IakK/ܯΨATCMM=d>a⃏?Bי>00 gN<~L>K;ꣶpaO;za!7;;qPv,eg+P9{Scйt ِ|D]Iѫ]6崇1 ^*vp 1<2֐ޙauiA@ER2sSY?|2k._7B _FatFYfj$] D;WZVREF6چs |(&ѰLړ;Z'#,u*/ 8>:?=w$"zT2j7iLNJ |w #EW8yeZro'ʜz5lOC\UrE|v{a25#3È.*j+a>2 7ǣV5던t> @lr?6P;'v2fȁDH)j6H\2RBT\Tr_imV0`(H~łB|-ĺJ0qH̔(^_2Fb0A |Ɉ)Hx5XZ&|6M ބ!.3D4w kVѣW-;6ʉ"`DC8x ||6t=cIb ]$4g?}9/1Bnl3* ۘ!$sI_7>W Sp%,F3 Ǖ :FDQ͹(ezh@GY% WGFgc 3NՕngp$s|a2*L._N7(C*[O5max!"1&;)#[NrBٶڔƃU |ہJ Bm."~ xl)`1Υ2<{=V,̆Y&ҋ9/od%HCrcc1[֯5ibMmAk붲2MQFS)- endstream endobj 164 0 obj << /Filter /FlateDecode /Length 306 >> stream x]An@ Ebn@HțdE`"!޾NEfop:cҗasm/IY/c.:cZ1](o3k]Əǣ4zK/Z1J; Rh}7y#bn+qň܈ 1܉ 3TqCUSZ\HJ,3!+yf̴pk"  Ȇ{qI\dn;"`$IĀZ_vlMdgo_vl1#vW6׌m B/՗K]YyU_endstream endobj 165 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2361 >> stream xeViTTG~m^Q(Xv7 +j4&.DYD t#5@,B ,ZD LI8G9jNf&̩u~_I9D"1v O \cQK%sĥ, Mc|)oTd.c !0RH6.%>*"2Qa۶ʐeFK J W+i㣕)JĄX_5akcb GkZ͡(u&1*$f.D0n!Ȟ0k{GTLyqck,c2=˨Gfqb60{;5ƅqedE1W.1OrgΎ9sH_)ٕl*N|/t˦XnL$k)N,brXDx 7Bv؟GȽ[RkYq8R#'\@fnn *ղ9TQ6oDV\K.`yg A&~g>"OQV&m%ȥ Ɔ%-3Xv?5oaב {'Il$8 ,Os yHŖv {67g(jR*{\_[b:`}b^s;m U62+] ^[A,17}Hs'zװ /h)| 姟a(>R&+FiYF˿33LgMxU55bu7%now% 8E4}=OSKR1Up;SyDeUb u A7"\rxb/iPM^ \WWx(7rnJ~3ixT4C5q5 vݹl%f~\uF;fN:;sn=mL)dlnz z8tʎ˨lSyn Y III8-:^ PhǙvYxs0kP)cxJE|Nv)!'lhbe5GٕY_d~`nس)] *Ҩo|+/A^Usp% ~eP Oj9 *DI,6{e;S\f-ۢ`^h_1R>m[x3mhݢUR<-ӄ4 G;gAݍ|*+ ;2UCF7.' 2Bs6a^IR*UDP%9-I (H8xĻŅ9jipjrTV CçH?=BdXԲ-$Uk(ћQJ{.cC'K |\*f!o̯p L>p).åJ`k ,' ZH!4&:8|=Wb;ii$Y V"eptР#_m|Om ӛYǪf"@+mM-<լsSr2^/B\oX/¯':W~0򬁇UMk>GA .5p <@Z`?}\+7]%mep> stream x]10 E"7(,UX@@8(iq)K?tI([ܐ~;cgD]E4"FdoZ_cku_suiLK `endstream endobj 167 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 667 >> stream xeKL`[GbaA0jE぀^HJѲ=hPQ !?l€10AH 0hb` 'oz_%߇"$E<;s' f 3I؅p=KA*R%ľK4HnC0ylvKטxPNAJ8vGCs&HZEhYV80o#XX'ey6k5mۨ{.PZ:d;~B8ꞃO~[W>`0 W>23SbGL+ao`П/P6gl\KK W2%4Ltu hp=1ً/cДbEZ'ڴGbPUrᗝquXni BhLfl ʔ:"{ȬQ4N?we[VS' G%tendstream endobj 168 0 obj << /Filter /FlateDecode /Length 643 >> stream x]ԽnQ7a n\$\, /"oH1+vqVw:n/\޿}s]\Ʃ_/vUm?muӾ2e[6ȬVZSP՛`6u'}SPSSP'CSP)TvZኺn Fa|H0o" M#)7ZИDFMAY3@4 84L@#Ѐ3@t8 t\@'Ёs@t8 t\@'Ёs@\tnauy^t8 t\@'Ёs@t0 hB( &$ (( hB( &$ (( hB( &$ ABb!$?EHIBb!IH"$ S$!1~$$O)BxS/a%LhR(I&%JI(.L ), ,J"+, ,J"+, ,hJ)p8xL}yW+͗O /`zendstream endobj 169 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 7183 >> stream xy\SFU׺ꬵZD3! ;TqkE-mոQ;Zk[' L999>{P(@`!8(xM޲}a&k-q$}i/D, ˳Mk~0uV@+pypHTn֌M#?۹E-ng?Xk/~t rݤ ;7O}^v^v[<9o^iMNߘUu?Ryie;X*|tlm|ߺHQ<}6n5pK\N5m7g̜;;nܷ捝? &,I)j,HͧQN;xj#5HmCm&QVj2N-R;4j'NP+7U j55ZCfSj5ZOE9P j DK QCʊFR֔M P,5IP(ʒM (z8JB-HS"{bEeODRCf:BA6V = YYZv"q7YU?Ñ6#Fm쵩vZd6=ntk_+y]zùpvCn?s *7i\ ᫑?A.h},V-pQ4W$5'j|m"UIx@WMA~LɐDiBo@=x]6}Qәuc:u:)> ;Owɉo4fq`2as ޢKJ7%{`)-np'bHFC~̼L'Ub8_ DXmδ:ãV(ayjk &Mchi2I5 qPfFw0aH&  B4MD]ڻ vC=H[DB]1n}70X% 5?A-}{pY=l! -ng]6hZlyq):|J ,XM p$lLK|yLe˖9~7n^v2LFạ'98b+;N8°Kca@WbB{3D.FI8&=a]d.A#=ww)A1 CPbJ MTx̜;7zu%dա|ĴJ HD?_i'56 |Ü8LSupj2 gmgu_t'~z0.'vU#U]Q'OdYkwS$~BǥV1# Qœ0rLmMCF<Ȏ{}G} ㎬Ȯq},D5^^Hɭ "On@{akAҙDRS=QJu7/Kd~%_&Od| ϰ'޴>مkoÖ;eI vϮ} ՘Tmyc<= ;gVt!< tl`y#迅aiJ郁1@o@g`fQG@Kx{]Xδ}k Q;SwY25`PHҔ4γr'&\HxJ?1EL}gqh3eKJ- F 9;dHBZKK3>Q;6χuv=<@bÃyZl b/o{qˢBI"3P&+8iWAh;m`#-Ђ#<Ȑ s [=%$x;E 1t .]拘V0[Ax 8mn-2!`='_߸Z=xfuk]8/5ChP)AZd[PA4ʡi2>DZT` g]0NmPլx? yTE80&DŽg?tDQrYM"8*(XJ]BHVpC1+(@(yڦ8^g}ZO`)v kQDHE:~vMDKjZrOsYHNmpxZt$[ۉFg!bEq[n:ɭHdz`67-E9<Nd(lE5L~ͨ@`4ZQ)Rb$I$ӽ}"`8N&ue1Q xewܸx(!{거{y=-B<3}di) |}C_mNWtO'0_$V5H-7*_$c$גlɭq3xykd'~ݣsXuzC3ht4Ye\nli$' v6s|SIMs7Jï,+D 4rPEJMv/Qg!O@$sJKϫI?Vnv~u7FiY^[[^ ` ,.ɔ\"zJļ7g[~%([RP+|PUpgrK7ѳ&Ps/~!sR8!3/5vÍ)788CrSbKB=$6)5ވhbp-jtDj}f2Vr5A&;>?5lPZFM˽TCh/̆kDb䅶R$CW򑸈z=@=1/@cCJ`Kr_/i1 cv`~TW Le5[ZLIIx@<^~ +(םNJۜwdoݾxf]0rnjov>P!(T}il,K<6TJxuO W`NPpׂ&,|:6yO8IWUCYjd }Iehc/ $$߯xrXOlI=V?y=uVO&@sیi) siÕW`kcB|.?mlI+| }3m^eLb( E#37G%zĭT(bP*J0$bTQQAѢlA߶*%E%PxʊZ y<~{0Ϻ;eG=]$%@owuGXF drM0[.ӻK O'`$@epފ0^ڂjRϵ5`׋9.=е6)?&mڀ*M1Fpσ_=ӹUqԦn >U^v±= D;5#ix"e5Ripp-݄ܛ{oE#=s-ΏYV :tuN3z ƂB L✏8e|'XpsWA;i7bHtE^wԶkB]G3*32| jMqsw_pַ3`r/!|‹X~'>'1kbgwol()1jψ~b+YXDt&9x5"fJzfx[)}ґ&UYlVN%އ+{ 5)b">ۼxl`)<Ǽ0|qBٴ$vK'0OrwPf? 6BdZ+s݄oۺuvKŮ|MA;Dt?/VFT]}[^ %N7E)H$AsshZa/xk*9%)enDC̓|ȽeCA5!8q+"%Hvbpw;bN/~m^% ISxwx\AWPlW01o8B8g]|qCȾ{988rL䗣ޔc6~J䏵"|~mDEp0cPyxs !/OE$X"J z" ':yBEpBk7ry~*)v(?5?# rMJ"1Q *[N*(R#ۊcbA &Y/ya~^ !yyju&"LJF2FQU}Ip};Ɠ<[#a~_F'. ^!^-! -ew(}Qz9, WF&p?bPJV**j59|rY~R<^zZmC Nu-p"E<Іx$X{ni!'8`fl u9jz-b*{O`!_Y9a;w+XO? 4OGx+=oӺ})"zHs\epe\,$G*rr 'K:ىrᆳLV338˫B#=߹0G`}MWot{,a ,g=–[Gzq`GHC,&9)-MZ.mjl>aM^C N%r KL6->:{s ٢ $ 0VwL{tRY4R}sdw6pM;uY6TΈ55A!]N@hJ mܼ؍/ZMwn]ۿek9/ 06܁1w`\qt9ѡvO K_hdR3͔tyK.xp<B:FEWf~׏n/լa) VE,N">׭ӁC'rս>R|} ClSπP]@]xމ_ᑅ!cBb8/떣Ehg,CTC&[8)BL}DUXLjSs:A!m]C\貟HXeŊgvyZǀr쑽ȅ1l={)>`37<8PH"9`CvhC¨vF_y7<;oqXs>'riHiQ˫2Heٚ\"g^/!-;HxÏ|vwT=~&_SNO[W>|9q|_)cX>[mt*Njk JֶNV q@J#^H^O&/MW<??AwHl,hVem~Zk-w[䇱< &)AX|x𠁠S,۽Qy:P&|JF$\ ;ըrCIRɲ XY$x5>RT(6:4''33ҽ(0UZ1Xlʢ\e 8+U> stream x]1n0 EwB78\%C 4DgK$:|ONSN>x1m̗Us P|)g?<|+>pj2Iqd&iv#UM AHt :A+F mf+EwO!$ #Ard"-AۆACÑ z>آz%ýV+D^-/6Etvendstream endobj 171 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1425 >> stream xUT{LW>êԂ"s:D) "N--RD(œ׉I*F\"tF37z>A,MnnwI$IJb2f8[aTg'F˖QG~I$7ُ,@8f(_@}@z2u3Gd!ƴ=׬fXsȕYrQmܞfee9&^+Y,f2Sʨh0GfuڼS!15tѢS"s~ XseZ%ZbJ$DB|Djb1M*K"7?.(oB*jDׂ~@1LMt 1mGnjȌ:&ϚZJiy4 8üH0&NzI͈1 7<2rMEmܼ6  (W Ɠf8i o/! fēd[.b%@ =wȄ܏<` z3^ y*XLڬv7џFl^vVJtֹ,SRk> stream x]n0D{}I&&iR\p,vqq!0voH^_~o֮4/.V[j8Z?=ֿ6vzejۆuqJז񿿒+Nק"HHv,Hۊ`Pž{EV"Dl&Ud/RXac`#m*lEʹ? !!a7J$i""cFpTXaE=b12!k12dle߄`D0ԙj:S0 `V$X":-td#3xMc7Dn! S4 I0a߄`Dp$JÙ# W44."'E$rиDA"r9w!8y]3c|(mkUId^σ[+zendstream endobj 173 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4209 >> stream xWy\SWھa ^flmQJGۺUܕZB@ @Hš5rOXD "aSDmNkg~V*i]ZN Iy}pr D"Ѵ-[*-|翣~6G%^t^r(Agܜ>xq wxs:̘ "R)M~w}wޛ$a1 UBLD~{ӂ *a\;4\*Ex+"wܱv ܶcނDe`\F6>!1icJ z0 ݈mQ;vb_[o/_1 ~OKl#^&#^!;D xM!!'Zb!% Fb1XB[DJS8mڴEvM3O= nyH(a@MnUb. Au"H A %A.cE@fdTJ^X> Zt.MTqs:?))^-|C>9jg۩ϼwK%Ń*zNJ]v%XzC[up?VFF5 I I]gԜ.#^:]EQbk988A7.X`Qr>3rh4k:޿ivi}ۯݹ駗\|,@kTfQv R*O2J =-Z7~o>郐UU\X ]c#gHuvfv[xD7f(^@fÙ[#F23elF=hO!tߟCBYe#]iELnC;LcI~xg QY?Ar|!rG"n<#Bp5%s⟂ sGlBv*!I -IT7# x9M$=$]\ dd&>Ajbk4$z+z'(2[s-pOVx!shvfbz*Pm|;IG,# |i?@g;羁D1E'5FC; fX` p& ctgae%0R6K ʼn:UǖHF*USJjÀPWhe_Ǫҹ\s&8@EIBT 'y U2@Y!:tUeg [p u~}vDNEawChT,7;P1&A _W/|  Kd׬۪|so*2ր vP˘bul$Br0kϤ 7WkVֈm,<# &O8K%uɺV]4oa.@,5UArj1ɫlͲR,"~?V$Y`#A>۹A Uަfu1Ьgmf+P&fE8$%>7rjj^E #.1!PkbS\Q"$+ QX/?A#%ʒS$(=Rs{^^U Pb(ixvԗ&9mv?E)0+rF^\B;h΁هVF5jZj*NXY\stb.@SvqŲ!ʦS=L&L!^%,'lv`k,5K#! q.WYg$|[M}ZWkc]G?wAhuzuܽ! g֮3 9 {.Ui +Hĝ]Vd0K˒<.xIKt}~'7&Ǩm׼i !7pD嵷`og?ex|!T/&4#p[C|h~=[>kjCo ݽ'tڍWF˟ kw`pmڗՌh#ÔR 65vLbb'>U%Ჱ xuW rBZ:]Fl#'xL.HfUω ' o|<ۼ9h+xfaPYs_Tz[`) O&Ic [Ivi9봻$hoDv( ΃?V1UtJOnE8|"Ͳ!6uv>#WvQ}ЉBֈS/y\i[^5aYo">)YX{"pdw9:rnm]{7[ي:aF[-s z!f2Mm ^TFׄwV. =sTe$U$SuF Ko||NV6LҰPH HO3dWub2}Ng?G洤5sGŕEqoND0{t/ęNqO/LBC M5GZ \|_ ldwfwZ,\*>m\4&?{gq ֗e7ŲR#Z+)@F=*p%p$jԥWQħ}/|r2Nk㶕uG'RaU: =_`#1Ĵu~-?0K-0I!n &cC!gDwoVS 5~F}1ž㝙EPt7b;;:Ǎz0C,M79\ˑ'3Ce p:u%R$:qfArrذ,+\~h:)ҀZRɆ5|= 6[ 7eʫZ/bzv{h:c19$hq36 >v^vco."H͝DYź[6D,8w`4a3ܓX :.z]~$aWLJ]%?g)S˪O,?5PذAS&;ZCʔ1 r}f<}M>>~4aP;4jB@)mʣ2 ʬD E!Wْ̒).{>q7Gk-& H%<>[WE q21>>/e|#TOgXgMw[?U"2xv(P,Mu>'y!fIJfNPYemP#|IwN沤?(8>Z*TM *< (ul]kop YtLCCy=/~g%Gx*3*(º'Z[wA.u7Ͱ8-ҲhZ1mC}A&}'hv-nEGq:$#:e1h%t}<~ȉˍl+EzC dd'?=c>7leI9%(WCHc^EB@ˑg-6[wT뽎t AvJcنڱD:[|da_Yn3עኚȡ|6=TS Ԕڠ:f|x},*L؏ hH> stream x]1nPD{7)7v"Ae0%rgfdHFkoz[w:/ǵ_>ֹuz^6î;gu~ӷϵuA;m9~|94uZ^fu:M[}U~X]}+Cu1>(>V\]ⱺbdHU8T㠸.Ɲ"FcCTcQDu1B11;y8Uت)w4( `2 C ad0  !CA0U*8`C -)sg ~Ro]&m2JڤRFIQ(i6J%mF)M(eI6i#^uNΠNumGGZ' Uwu_s endstream endobj 175 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 6089 >> stream xY TTW}%s)yck[:Ukի[{>{s#GgHA`Ⴙy)kg9F$y8&.Ǝs`P4<p$fdIsR-Xx\"30YJj|c0KgϾl7l}15A6]s; +WR hxԘVϗK͠t7v>;.% Se h |VrJx 3hC$|4pC5>.b{ ba  .Q|M];|e, @SCR Tp·0>#MQ/0 '&F!dqs'lI`H? bM?GƠh bRp &,@#W;w9\qؿBq _4M`早<F^H+A)Ki?>(-EGP4s:p[UJL9S |WC:6 %@d„+r|p?-k &9y$M i*ovж:ހKʸI"ٟd%WsP09hhK΂z!jkrcv5e帠Ɓ =v6^2(5P: 03P$8&}|$ʹ!aMHb` g@ )*]/JQ\TM^B.|4u "huF7h3Yߜ 4zF`p „WYm d~(GPX@apʁ1V`` C5ץ;]hjS4f@SUژҮf@`ɘ I'MTMh|x/' 5BV9TnuAmU{y/=7|p/iFPCFc:Li3֥1{Ez!vVkҚ(Y< ۥ:Ft8@({`D:LD-bb~UtA?#P4&]*"-mʋK>Z{˔S`\JWAVˬ Q z=G^{xmMT7 Y2XWXYj$TW%QԱVww#ݴ"SX㺟YuN1%u6 27kf~MAEXYPӎZ0123}gO;UY6u'K >!er--~ - Picz\rnoU"S @ u_= ˡSqn,zos;ګr4%E sQ>, (:WT ,TMAMN O;NM# Op'm8ph`+¬*%QJ&b 4  4,\گ"4b^;!k8Ƅm.ȏykryv6592-y=MBS^Ү{PZbgBsԅRXXW03@45zZߙZXt=(J[ ! 5H*ű- G݅!_a*hNpxƔG=1g? 2iT>4e4]@KL9؆]tM:`6$CrY8%YX@;߱0r(m=p, m8 L )#F?JJm^= [i?v| 9ϡ_ ([Bne5.<\_h6k$>ҘFIw~tXw) Al i'ok=_^ޞD 4m{M\S6sW張+_3Ώ;A0?߿C >+Vz(<ΊXJj l鞪Oѷx)ؖV] c\'?mF\&дlNqz}bOSWpTp;q(`UXʚu@kT,6TRLQvfO}ݧ=6OZ*lV @YJt:W_Xx% r}i;ѼT&8{.#zmwڻ*;i+ @!7F36og+_?xS^B5tQ^} /X Jé(V&AiÛw9]q9|̴+[zH Fmu3-TM{0=LeB\=Ϳ7FmQ-/<+`@o6!t2 ^予9-=ӣ1OP&a_ŧe`+]^n=c@R`uVZxjUU^_+.3QVW1~샣v1 B0'O6{Z$.ovr7':dCB GkISxwoWݛo7W- ϛj 턯T1__]C/j<{ |lq`y*:Z#; (~s-.G 5]/ @=VT3v9kWqyIkP KA/{01;%z$@< ǯ P,,aD&"zpBn6.IK@YԼ:9޿F{kѩs<\WZǻE#氣p:syOWrNUH.WXu f`{`@S-h'!+.b?(wk0 ^kT# 6}zN#SpEB<ʪ3 -4x|𧕆O)zX\( bDXtn᫡JM]r, \Wrk^3{]AQ- ȁpJx} 5EiV0iqJchR<& xf7}d3Z1gv1-T.Zn^ Ө*z( 1@A)mM^G "Zܠ[ɚp0o弚|TR&Z?HBz1fՆSUpy8@#Т(|!o,s+S] }kEf{Nt޶HLjjOU.k(8&o*:QpBq n)|0h>e߸Fcn|]}PǓbvm\H&gfbɻے^@yMrƉl61nPGYqXu8!t ȯ:} \ =s) 'x|ZjFK[ ZR5XՅ*I+R']Y}Pcg<łu UgT7U/q 8;a0v]+0GPռޤQ" ^@i9Q*[ꦮ9l[GPO3p&ח^`ފO:Jgs}¿~p. Lɔ`--E@g, {@ݛch_zMqJ4#T,-WZSA_A[/VC!S*L߈Y2H_rjTͶz +"x'OW\]8a;&|7WgD̮ipb_[u#FM9 (q ZyUV88|{wpǩ Vޒ+_~^\vN 9wYk{ \y N=n~jd䉟liJ:zsg~r2s~2,KУW[ ?_"ƃеt/E*8[ J] k]uWNԿNN\H MϨ6Vl$}УGF Ǝ4,2uFՄߚq?,Rendstream endobj 176 0 obj << /Filter /FlateDecode /Length 2654 >> stream xYr}W oecsQU+mY&iRQVqT.b~#{f Ғ,`g{>=qrпw4;i'?HufǗ' |hW'nTZ4Fx8;xnu5:`O+Mӏoi7/WߔgQJ|mǫ R-Ex;UOl`)ivVXw'mq&EgƉ @1^LRI'aU9iN$ElGns^+zK |c@F u5l"aHyB0IGƥ ¬@1Ft5\qaYgkk}s$V0̯AK` p]Z8$p/y.J|yE^@rhˆ"QAS2 nFViĜ!%^R2X'~?b>nK9ټҜl:t >NǾg(LCԪb|yKA$-sx`5JWjsEjBѵ,ChQIrڕf`s+d)DmF.3?z%tY$xWԓ&h BD#P;%?k.UC{7rQӃR.~ӪlhݷttT_wV^syZ?O?b۰~ay]S譼Jůl!H* 4bJ\v>"3φhڮ]qrk\na(x+%-[Tc#ItRx3OQ {nث]zOQ*L3YW9!c|4ݎ\]Td^Zݒ|M=bףb iR<b* :TNȆ{(&D=uFQtgo0B+ӦaʶNlXol~; NoUiQqDVEL\߃*)>;pG@z: REUKTgX=l]T&O:KPH/ )^&jVY iBCҋ_DA>/i;m< 7~}4bS|Uր_U,Ŷ)yZވ v6|@ARX'tYy(׎#Ca  ׊2h7lNC;c2Ct1~zك6JBx ^?"?YE.mE9FyW<ʑNrD3,q) K;FfF3@mҖg[Ϡ6 .9ODl"?Ox F~F# ъY;LGҮA2&Œn#hJpi_p7~Ive)/+)=Pqq ']mӳu&jQ X|. cjPRr(Y߻PlEA۷H I’zEcuXHBc܎ FRI14qOÏvEITDE2U_wśA9EvAGz0WI)G"_kEtvY:Z%NJej{`S\ ~#?~9/6b\(Hk><0|Zt`uc |ˋt8z,3=r95ďyX@Q%\[~EU9ruXt=bnBO?RPnykbj:z2j^|lHഽߺ nu]Uo'_?[@ػgc?=VChц/Ƌh1ߔ+ya&7 4^n58]tJj=՟VaPk#-jP؜׆vO$0[W (sܾt:ơc쮏iIgKh^K1_5±e rJno/*Mi"sK55:|ѩ "\CL}M@9_f2I7aLWIlEeaFˏwߵT^f< y4N1W՗v> =(eQ2-<ߞ5Ta..ٴGO`zwHˇf64ĵ^vw-_I<?Qz[&65@u0tѠz*'@첗enf4R%{yR_zm IX<#Iegs껓q֢endstream endobj 177 0 obj << /Filter /FlateDecode /Length 457 >> stream x]n@<o`d%ЪjC0"ΡoߙqC0e]~{=/봗>Z^jzZ: [ux6lle~[9lOg>^oSy߆ZK<窬x:>]4\ilNGIMÕm'{Iv@۷jlel)[I٢9[gYn{٢e9~o^-Z6rII&J"J0yȤ!M9iygN9Eh(08 c(( D!|ƇMX9\;T;X \TJh,ˁ .'TN&L" ҄BDA0Q(H& iD! M(D 4aQ&L" uC}f5џ׷]Ǿˣ;nު/endstream endobj 178 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3846 >> stream xUWwXTr/I\eշˋ$*16,XAAH& (Q<\JoQ)k MAA`{yys7~ߛ]?̽39F ϶yD۸[Y{DG*3,5_BܓGӠ)Mu5^MAi O)@`g}Hhn?]go >/\|G?uM|u璇=^!A^u-t&U55 ۰4<"|ϦQў1z[ld?_/pE}Nm96 ʚKP_R)[ʎGS)jZOQ DmL)j#2 )sjZLYR[e&EPS(mJDͤ HH)uʈ:LW!TvQWꜺzzkZL04255R4jYm6y5i㤼>445'M9|L+O >BZr}"!@*KPWC\y5ŢA/ Шlñ AOi-2Hy>_T>ftv=2K8,TOۨ־Nt?)uٟw V%x͌\=k[fljg/֮Tn1/<EB3;ݹ ګ}kwn6a57dd)tXW٣EwKekwՒ{G NBy?DxW\ŀEmc;<{j05:6(:}J`g/*~@ryKx2LL)'EUߍ c? s Tn: !_wݚgiuuMMLH-~cĠK~b[_wovѭΊK.Y_0 ǦZQq+ h  87xq-~&&whdb~د0v3K#Hz 8ӡn6IN'3W?X܅rqavnNM.I/w$4J@qƉfٻj;A#~x S [j߅DTJb_O92ccvqKptWXzVzĐ.P"IJ+zi}|ۿjI Z&?XzfHsO" ؛R!>t ~z*H J4^9 oF2+LZ$H9]Vf~GEfM?&>I*}!NCBfe2ٰD-Y%y XjKOvChM@*  NoT&@禡*y#Z )=,H-B>|DݢPo`m}*ss2r%wi=&~󁘴[{MHYdMr x9P#oQP4T4qbA ȓs? {~Ib =Q4\ȷ]R`G #=Cҁ+lQiX O'O64{BCJFxD%KɎAv]qym:qUNA:6U〆G֜ 8vZ|8B\"EZj>Q]Q,9UPvu^fzS!C(x"AlK9?*@&x&98*D^ʘ+ fĉ΄k.lnmB c񓹞;1I I7Ps, YYlvxlWF7;e/R 5#rwTB"8xX{ҔUϧ2݊F JЌ5:rN@/\iZ:U(N /2DP}.4ʣ?,}p.t,qkW~ʙškR&hv^]ۆ:JTʽ) lY_S$Z\}g[)ޒRBJ_kkИpA>>xĭQ (Ҽ1SG ?L("r1 Rf+ d0(x2!ķPQzJEcۥf;ބgkb҄w"A11vζKҳH3/:mvZ|(5-Ą6ΗrGsyFK `mX\Kp~,픡I% afǶeDnq-w+0n6E.`X6ķ xYZ^gśwY)#+.jq8it$j6PgR{y 4?.SfjAYD} tCQL;6׵0U%WL*ʢ3g$ww3;52$=Fh7;'/elBFs3:S^GƝ_DnrA4_QgW Q{ 8E]W2v~(:iFyyx[E !m"/=+[&5,-Xz4Wo/58Rw*6X꜇״h>.mmwK I' `H9zp/j#>YNU,~TuUpK(v!?qlrxP}kf[uGҡ Zн[} j)vHǯC~RFNF5Lb#Of6[ى&v㦡Wg3P1|^1Gdoȏ)IRdEe'ӄ +v@IdJڥ oToSJrRΒIErS ~E#wpf#6l) jnpO:^"3@Ye֏iqj󬳑?^BًWTy?<}z}B SN*y)&3EmW^4#:H~ 7ޅWLnsnE&\pۼi2wl{V/18u`( u%IN as4IoU53FhMUѣϟ,6D ?_TPU{vQ ~,ڂsmKBv4~_C2wy+|֡7^ޡ^RI2A$ |֢"6eendstream endobj 179 0 obj << /Filter /FlateDecode /Length 250 >> stream x]An0E9oHL$4ذ(^q& ˄Eoϟ t9>OS9|bQ1Uƌ1,/n>WxZo\5գf] \4Qii׍az]m7X u@kH%mIt=)нhO HL ń"ӐNB:DpI #E"0[ ] R8-Z+'Y E)endstream endobj 180 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1846 >> stream x{PTp+ɽk4>a|e4m$B< X@7"s"/aM%DAߏXf;:؉5sωdǝ;Q~(LyKbFv lRqL %&Cߩ0V?ǔi%ɒ הTW畩֬Z6<\zWeV6Db2 4:mA*8[%B[NW-2s2 sU\URvĨDՇ [WD傢%eY9꼄dD*Jm6PMT46S1fq?c)űӓβg {^~1{ޖ]( &{p+xM|.wZL-s,&IId>/ji]`ns82']b"D7T+'pTi6 ʙU0in 4z-4b%C6[C|\T"%/:Zՙ5ghIrf(;62z}hw!il+8U68Kvnk7X\B)iU .G F.7t65.;=qTd#j&}M٪[ZUA0Ȋ˽BAu)\ gO(br6fs}a_Iyڽ]x4gچ`hH 5nYrA6Ch=tl;[eqN6==#B'1~#1 '^~z Ìbѓo\op(B]|۫\,)2RRS5چ&0@=^'Rw-3~1yDEo[n[2JFG/pR/1=gi^'j.Aq@\kç&g\RS:l ,W.$I-[\AaG ^DqYd!Vm8Yw1\ bZGa`59L`[lvO*FΝ޼iImxI;u˹*Q.+V>]tDI+Fb )4ъf`&1(g0|ٮuB/=]p'o8V2# stLY\FT~gbC<< Lr;EwUrޭV~+C0,h Ձ*j'\1>wCʥavnw[NMCrp]A@5鋞q!jY3)B+B :[1tŋN}=fziT!5Rl>/bg\ ^臶? C::@ww<~J7Xϋ(1Xۥ;l`[L~@{`ϸ9~Ig` vMZIk EE]endstream endobj 181 0 obj << /Filter /FlateDecode /Length 255 >> stream x]=n0 FwB7'9%Y2(^@CdAq޾$t<>n9/n>pisKVm%nOoOAM v7l>۩G~%D!_Qyc U;\ch*? CSRGj[IJwVn-ZZle5@Y)c)}wI 1\i:@:N NR[ UZ1oR˝.OY _iB56endstream endobj 182 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1756 >> stream xUmT$AU>$(*xr"gawݙð xYP/Q,iͱMCsSrb24s{yQj/BRH Bx+o#x%!缤Po$[lt>F>s=%Ks~ߖ/%rUoeed߰aNML^)aX˷0(byL&2a1s3وN54_ROcyκc(H,k8jkr``_Dxa֖k΢tr&5M`4P:$v%"yz9*a垼FsENGqB;+ӫsNޱY JEl'; 5z_њ2t`T9y) w!:4>|-?olu5745q565Ӹ}tG%EA*m9 QLdO c9N1gNc5mcЍc=h+z?4ZK\67 ޓ:YGosOF-P5mγѮQ464Ȗ>0eֽ|-x17j[>JS^FV$NZﶰks g𞙑aJ 5C4K%W|*_+Iz|$U*Oа:_zAiuҚn;9;ҟsҚ lis!J֎B ]U^r k_Z|WG/\bW>++Pj/T|쯸=*n)T&,0fJv,5JcMµF\RմpT2B \+Gm WalvS@>ktA[Pendstream endobj 183 0 obj << /Filter /FlateDecode /Length 161 >> stream x]O10  ]Z2D! }I$[.%Mů F0Sau@vz&zCKHQDQmmhg=Jmyp8I.~r 6/\USendstream endobj 184 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 222 >> stream xcd`ab`ddM,pI-Lu JM/I, 154ɫf!Cɏ<<,=< }E'R#YSD! 4G! 39#(5TG4/%H$#U! G!'395/9UarCCw1000j300012h }q3}Uǿo {U+gp20Q3endstream endobj 185 0 obj << /Filter /FlateDecode /Length 161 >> stream x]O10 ,. 2D! }I$.|D/J`H_#49U a:8 d >LY5zCKHQDUkhgtJmyp8I.~r 6/2S7endstream endobj 186 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 342 >> stream xcd`ab`dd˷ JM/I,f!CɟL<<,/={ #cxZns~AeQfzF.THTpSJL//THKQS/ f*h)$f$))F(+k9 -,/I-KI+)6d```Tg`b`bdd˾*gsE;W+he+鬪,hf.+)KIKh/\0Cb۔{uϕ޻={tOkywۙ}=lgrqpn=gNd z&r^endstream endobj 187 0 obj << /Filter /FlateDecode /Length 162 >> stream x]O10 )BR>:NN'I[;ɾ;,.|D/J`H_" 4:ôMqA:Dٜuլ!树DTZ b'mnSv(wDK&#qMkR1 >d/.S-endstream endobj 188 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 302 >> stream xcd`ab`dd)14uIf!C?XyyX~'=F{$0FJʢ#c]] iTध_^竧_TSHJHISOSIP v Vp Cs^XWRlb} ߏ?˾3]> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 190 /ID [<46cad90b76be99369cc98203a7722bac><1eecff554c6efa005661ed7aa9a1a718>] >> stream xcb&F~0 $8JI?m@6Plx0CϠrj;-cAr0"@-0;DԁK@I03A$"3 R& DXl ^`ӜA$D0Dٯʹ~ fw0Z endstream endobj startxref 87813 %%EOF Rcpp/vignettes/pdf/Rcpp-FAQ.pdf0000644000176200001440000061163515030755405015763 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 4039 /Filter /FlateDecode /N 97 /First 812 >> stream x\msƑ~bC_mg/WՖ"^ɀܯӃ$;VBAdWjh32)kYDYoTQ ܣQV+BSqkP)7I)Og]}Sh/8-:3.X BxkR.L1{^,n޷[yh>uC n}\5ꋷCXutmpWU_I~?wmCoskpD%e2XF+#q8zTQg&pnÝ1^ c1ɘe/x"1eL2fp=/y+гB =+гB =z$H#GB ='sB ='sB ='B =/B =/B B/ B/ ЋB/ (ЋB/ (ЋB/ $KB/ 4ɘdHIƙdt2 dzYe^zE'qa%.^sTofPrr.o8c&#å#̽jcBLr@~cp8cY} x꧟濏eNYGՉ" $\Kr14^>^/C>$C>$C>$C>NI; g'kUS;;&IV0D с`nt|{zEU)QPC>;  J'_ "|#7|#7|#7|0Bl!Fo$Fo$Fo$Fo$Fq|#*ͤ`MQ@Df̃0fa1\xVD}Q^T/ŋEuQ\T.EݢmQE!DI#i"Dr$H$H,"IDr @$H*Ȓ?!H/S?}xR |J՗yWou}\o6zu%{(MP/sN)])9iu_xn=^,sZ[]۵nwPsYqoIփϚ?Jnt*ͮ.|n3=΂9g5dN[_t*p ]^wnwlEn/WsϱwMھ9LPM:#u@D: !uIgW5bIUlseҾN M'*lG:/a &T*fА(6¢iyKĖw P.'VíȚeo'cylv~޴ݲhwE߬ނ.ߒse W A(9PBiÐN*ՆDFж&iܥvkpX1NaPN`~8~| >ir@3ߞRyյ.)ط-^ Kʡ3 P:/LLu"*tEE[`>djsG7qe?t9׭2:cJ*!qn rMW (M9"zX~lvk\ o怲`a=&L=y UAcUrok_ڿ롟ÓIv{:-~wd`?M{xh0o7ղT.<̂uyDlקMhk|dnڄrv4G]Mâ-]mxJxX] >7ex{R;OmE=T)A)rDeUBH]eY1atʹx(Mwcw5sς9fP`p*FyIYzYPo ~ zċ.,X-xܘ"z'$CENx{ݦF^6Sztʉ tNU"Fvuyyɡu3SطWt.e7!y@ 7诮!Ƴ1ZæaI8 %Jں9SrG?47ݫDA \zlfjb2Svr9D3z›_An)3%j˳_&?_TK8 uo;}nvwv Juǥ5uW|.9g#jSךye~w0 70,1:,cc 8V[I s Ȏb.©jQrF_nZDKa4zۀy>Y[ۅ7(dupd$ !ZHS'}GNAC!E Qʻw^3ϓ!30w^GE"U3I1bp_# FE QH;A׷YNYw\L<=|mkeO<<@0%+S85{B:=(7M7"(tBp_[~|b-_@_*^|drۿh/'s[  H# XظN%LH[$&>vxx,C)e)s 1:H81ݳ~vUcfq~u`vÛmu.wDE6t_ڤ:g3O.`Z^k6xaye+#da%}>𛑎<^G"t|a^+xyk oZnabjwuVṋ2(/@fJRz& R,XVИR-K|dI%Tr07Yߏ8$\.y{oSw(l̬/D~(~6S Gk rȿbj\n,*H>/*gm77$_5[&Se4endstream endobj 99 0 obj << /Subtype /XML /Type /Metadata /Length 1658 >> stream GPL Ghostscript 10.05.0 2025-07-01T07:56:37-05:00 2025-07-01T07:56:37-05:00 2025-07-01T07:56:37-05:00 LaTeX with hyperref endstream endobj 100 0 obj << /Type /ObjStm /Length 4574 /Filter /FlateDecode /N 95 /First 898 >> stream x\YoIr~504]`v=ޱyM ZR 9߈쌪ʨdQ@h/"2;Tԓ?f_;Y௛\~ 1_<<'7p&;)GT I+W(X=GILjGdTyj<'*M&$|h5YwzltpCI^iX<'g /¯䵁 #^n$6 Sr80Ex$N#~% *-@jb R" r]Y6f|$"ኬDPFd<-YDRqqU (*˪FPMCXЮ( xLM ([|6ã<R$p'UڈQ"(m"lp4t%wO:_wJm);[萈bDL|SJ2sJ؃?jib~'e:eT)(>e4崫DFy[Ǻ:PKlJjrnmm^[K%`@Tm,kc)+[>VuU,Uj[sR}v @23nu&K[ }]&TR)\2[\q0Na l 1^7Z5;8cX,w.D$9u^}4S3a)lLk1_G`1S`i5iqh&,#L&ksLK( pmy3g{Y#HMBƎ5j18rH8atl}a,f ozG(Ch]j&]Hlu'CtbRu聳lŒ)2#Q;#OG)dzb@3%\q|zMHI㢈 'ҶDzYN*_*}?pi:fIC9QX*+ (e3XzR^)p"w8K+zYJplǒYpߎ9A; ; /ƚ\Eja^`W"u|L(NM jgRlj}G-, [tP!zlw!'8wS ];pf6abJ*rL=ld &[cսoqQ)n3PL}*abJ-d ODV[%*jꯙiYʈ4گlڶn ^io}[b^vYC=SenLC͊-O(֚:]^ެ󺑃q g26 pQmN}`3ZHfxs3k"͙n{U$u&qJ;G9ϡe \z~i19t&P;2+gT֋(ۮ9?/вd1i,ߙ~+uF1@CZ9Ϥ٪8 E%#Z9DSqtTJݽZ~ij^OX5Te}[iH(QUN {ٟN49sF9E+?GZڏ']]-&$Kլ3mp7ȣjV5ޭQ SѤ6&ӗ g2uC!MZ(&K)d ڮY[Q0!.15f=*$p1,BeAdܫTPM0غӰ5IkQ>&j 4ģ 6aL2~f'NbkeZ*f1Skt;aJi7{V`c⚿(~Vu ֹ}&WKvX gd{U2iPk;{ZvXX RV:!fUkC^e u=ſ.!Mlt/Cߞ_Mwv]3adF# ieiG.k)T< 87]Bqc>v:3ܖaJ*%7s0`dWMpn>=R($]ξIaOLT ;:VԱTt#yvPGW4Vr^דoȬpA2s,/pP7'^~6;\87|\=vnUT5g&_▱N I+ NX%'`j>Y@`TJ¶ȺĔ2ٟYŰ ٨E']*5d _HQ]ǥa5SI739p=}JKx;*PiԙsrZ=╛ ' rکTʧ%Doh1'A'Lb >l0kg0K9X= #oNXUeoNmPsk⻬Z.s̨Dpqף0'yR6f@F]Uwe%N|&\lI-^T] )9$Ew] F/)ƐjqݫyP)yC,B*ϙrRE)v $z \F"gqn+]wvU %.6n7 PK?hZILԮ9w`׬YHM\e͊*XfʘsʕY%ҶP".>AgY6MEDX DF+jw=k\\X~?2<'Zr^iD鲵&|/WFN }H!w410Nvca_/qdjVu5T Pw/npZ /rԞYPԵ9ɓ)<ʕJ>ԡ_L(ePPMuzƚ|޷FyDEt5Dmv4OU9WFuGqGF+]P;!#&ʟ7 UD\I*%}t*YZG<6UnF tք{>ZFPՙ CEaHyouG`p# WKճjOrik9: M#uˇ;{?}7J~oǻwO7/onFp@x>o4"I9Oo6Gّ?w&K e漶 !)H~W1m~~ l^>;doO7~ћ.Ç̾ :~'p7ԑG'@pӖi~x8yxd&\4vxx6*P+/*Y0>@W><DcBkaq9E.J"iE\*$ۻOn0NR(n>_\< t``AZ//.]Ǎxp2Fx x/yˋ =f x=5cąT@8^qSH# n泆B9zeY:V6нAWOpVF|$#p'KpkΪO2 28i.Ee̟'0\Ӟr*Ø a%}dwgL*0%3^$j*ݞ|8/oW->\|/@_s \4[Ԃ0$e > stream x\[s8}_}٭)jrɎ33l-27\iuLr)o@@mDܻHG(] 2xG$BEZ$:^#*'YQ3H4 Li-/YY1By~qi9;I~i>ᥳy(.n/glo9u%**Y~ɯf7>^%K:Z0.GR%uϑ x%=ȕ3w!==7s w&K25mX#B̟5GhtAVHvoeJSi5pT,ڜY>Kh,2Y{ƎsSbb߳3ް9`oRCȦy]>aah+PWiyîu3v=d0{6`7&}`C6bc6+X'lBx1̮g48A oK;6+gy1I1ˮ.JW7de6>B2!;ci٧ݲ̾?ٴ{E{90Y|=_=Rvzz3 pфnvz5Kyh<fH^e @]̲;fدuwk kŻw?|GZyw^:hZDwBʎQ)hqϺI "Y_P ף`WDtT0P42`л-1j ƫȂI Z0[bȅ_"^ _3PθE!6X5J&AT$0+(IHw!ӒQD*RxHbKyZwQ3>*JC*- n>dzFajCF Zmm*z֣y.2M ')Fq]|qzrŸ1?᫑&.V iz㑴>9đt̿'V!El GZC-#*L*O6Ϋv~U)!`(~feWLmA2B6Ĵ[S=JN\li]-jCWo~<] |5A跢іeߣ@=l7KVFf#VޭR(f¤Z*fF*!"T.[x (؏Zmq+-6}lxWST>jf^;5i++OjTWy&;4QtˬIr75ިz1Io.=MfBGb̓h|;/Q $&%-RP&Nт8,x&Ў,h$ vnl\T"-Nm\:XZHܝl+BP@b\8-\lĎ>E[&اO6.eVdqFÿU늚D|qncM]&twN*p*7gy]8{qBAZ!ch }RĜ'ɞi>684I< H.a 8`4>Ɔ q 8Iޙ3YV4ǩ{ن''1-1t>5fԨ4*aʦ5-k3.[:p4on8 iU@ K+`7$YZ p8D:8<*#Hd®o!iɲx2Ì<тP+DDk UI}ǘ#16ҚۺZ*UJܫ1̫A$x.Z +ytKD uE&+ w6џ'ghџ,?8ĊY<+E/Z H|gEڨI^(Wo^S]Ovs)7ե_ /u 1w{MZǽ*=T)PլHu 9u5.[:dDɯ0OPZ!jEsRvCy] E0K$7jv6KtY̑l1tmM.pͥjd) 6o/ƒu߰qVRX8_ԢU.yg˦e)uZ+umʨM黆oeYWg?bk‹U7mY11}H7S]|YLӏ0|cSZLu2ۣ5I9ie2Mfҫ6j$cncA- 8<,ZpFng\pGΫ.ÿr<]&iY8в~֏D \0<ֲCk^q=A8 Tp$r@Vr_W. pej?uдTlܨv~~JpH3=VƎ: !Mu9-aE=J͕ +697W.lphj3xNji;qsUm$n\B\_VVYx6'{gDicE 8-& 02V82A`ٴi2%JN) 4iK(ӱi6xJ -(QЮM,L"e]lh I,ѡ`HMfRH8hO[ګ<;O?8&(= 1:vo OuKF/z VΆ@vLnCbPw  >ST{}wRde[0J])@1ƣIɧ Q:YϨS`)q6#߰I{C{z0 &zG)n&{@ ՙ Tj|jIfL\=\Fvd ˼>\Zٰ )>flc6nzE4[ML58}T&錂B@kfbp5#;|MQbX @C2^Q>YKKD7)܁}oVF?%XHMԁImُ6`. Wm}ށlK0C6, #z "7dZ,KF;IfUB51 ?L?AjtC1[ Vj` T}Ү"0E,|JsUCg1B$c5cAџ{=OBT q +zKVE^o[V3/w45 tn[ wYk F]LV9l{rVAJy23r,||]-G: J @|hdt0ȮBUFoG(IH.!p ۚ~jyT%~h5H_bTkoaE1$󄇅«~K*i^~OQZ ݑu&,shiMSxe#G@d}6R0 eC_ym5UD)$E}̌Nd+2m@|;b' ,pa[i'Ѡh 2%EJdCҶ>7i0-d@H&)iw ,7 μeE:fcd#9aXO~ᷰjE8jmSؼʙ/:P.4 Zhkpdݾendstream endobj 294 0 obj << /Type /ObjStm /Length 3782 /Filter /FlateDecode /N 97 /First 908 >> stream x\ks_~I&ž8iqG]9v2( -ŒdIhjf: }]HLIqtt3sy&DhL(M -*^H4ɤt Zp4˿h_e&γhѧcxu8tQ/YmA&=_Ϊ P/jtAҳOfûQjݴ\eDۣg}їq8gӮ>+{?qX|,yKġLpj$ߥ\\%$sѤcҡJġJ:I:P+8#q.Z:qG:qdG&qdLI2IB&Iȸ+87#qn.&6qh6qh6qh6qhlMs?s?I"NJę$C*{*^zrI.'9$g\#q/5~s'Kɒ|$80p:uNI":ID'$HB'1J_2?yxZt}}]Y]4OGʹU<_Tͪ:V=Ez*WӮZmk"=}B%e $}/YJ:QL?V ~ wG5eԳ& |1PLJԗB&dՔIYO{ ItQ(?_E>m"e>ϫe^狼|YvU;˻|:?||"qu1_ 2r .&eKZŢT鋺~/W$0j.֗wl&9Hrkm7+4[xSD 'x>M/J׎Y5=$Ěhr!9HwUrCr"wME$ڤbܒ/xϏ>0.}t˿ׯY7kLXUSWM*nGr [|!f3l<\L d2y\ΗV` _^Co8[iW4,?}GDFIFY,V'{Q~4bkF.yUGT33=83 -)6X9I3%oqKy{}EY͛'rn⸭'<ԩ~pB] p 䮌CcPrv9 vp?Yźe&_vբ܉/|\Bc9:UvPUMEH}\&e?ӊJq(&9m@ܪѶ/(֯NEU!p{ ]`z nQ!>%k>_-rNE}񚰙D{^z>2dF90:OjOxyKx) --zـ#:m/qJlhyHRbs| d{x= uN*!x7\n\k$v$d8hS1 pced;0bR Cb^!k#΀}m~~+bYWQ8!'GSƍɌL6n\x/J -G ׌Vc JŬ78K`"`:8qiA?MsFַmF_ϣ^ZDIMKiO#32XT/AVmB@NvFb a2k_7u[| kM!l2i?؇6"tG㙣}.p *Bܕׄ[F;4&A~, vdbW="lN55F SR["YEBL RF Lx|  *~O>N4ԇ&*Ko:qz^zS7f.ڋES{VWU6vPZKv X/\lŶSQeuqV]_Mki2)d'BĿ:uVJ)@[Vm h̍? Ol!Uŭ|L}ͫt}]/mW 8w96i;lrzAp/:pFt J嶙jsu|*|]ʼ/V/Wgmeݤozu 4c-pzjآp_.ui1=-_ (VR+P#OYսdlV:8orv^53ɐSF{N"h zN ͞_d\2F-3 1Y/NtN a^`Bf~(c4~ bh "&n:C9"{;KwΎu݊;7ԍx6uWPt^MyUC٪9i"W!++2 B&!PhOK b>/g3!FO gYOf̵QZ"H2g֏YvVyymxZV ~x}o5ge;G^b{r|6ж;1&XI.9E̎nP%V1 ۙL%Z0qٕa(/L{h3Hߑ ni,.١g>q/ۜ-mrrTn@ȸ G9y VfkF`jОiZ8#AwPz-W6/Ϧ2^B\N0dZj&\ռ+7RrVWX mwo\VӿNNʮlccc'˟iSFؾA pendstream endobj 392 0 obj << /Type /ObjStm /Length 3617 /Filter /FlateDecode /N 97 /First 897 >> stream x\[s}f2ɌčSme'q-CTHʉ{Β%dL2 X=wv -\„#~$8fRƱZ Ɖz<0Ndx%#{Ea)8Išga}N£ XaKpWp6:7'$͙W8C/{,sČx"1[l(D I,wRDɣ+f _QpL ("$ջ(bA\ʚ4tE$pkGIx {;-GId,r/"'W-r #}KE܃ <4%!:81pPp YzF\)cX90z01̢Θc |01KjL'+yX~s56`/&x0;L5&c8 c \ddol&[ YBcGc}1FԅggB=\,4K_H" ԣ0jvAXWedlgP {Xc%IK2BZ|FOBZ|o XJ4$VԔ?e&6%,[ipi4:w x2An KU jfM4P6%MρYnIM$1a3-SDp55mpUiag:롱(3^l\=ZIe\QwB65$< Ka d("1d&Jj0F@td,B ޘ4쨼󚗅 |#rnbhYg!@XFFz@BTH*zcXh@P>YaYgMOHw:46?6Z` eC.846@7`2ØgTgHz#bKd ff d@n{YܔV-[pYNfT!x]Z MtJ~$]@(" 
B-5#^856J<`G1{ |0;+값N#\P#.@U}'[hd1g՘>IhQ=| ,=, #h#h?,:JmCsۘ$(жYVefUC5bZG{I\QhU>BMޭ'}CvdbޑcHu<4Y-,G <a9'rjAY dޕu<\**7` ,hI.ȇ2S;7zB%XukLRp(;;oaR Bs^&7X0j5CYJ&u3}^( j^ݨLg˵naa` 07R2PŔIX3.uv%e+תW*QGUtkmp5kM?؏ [<`eu&690\Ooi*gYVZEdu㜅u`E(1GuIOPjnIuM5N:U‡ ؋{ݸvu,V$CK/mhSMMRE AW5!w-bwC{F,,ʺQH;m,XQ8ZS:ҏ5EbySdkzTt$vKu`X eSwfnsAc0byK[6(uM7% l)i0AiC8"u<[ޏ@]4XK<_;`&,b^x:b^a39A2UX,HӁM2ĝ>"ah0bZe:3|EVQW=Ϥ@^A5ʽiTe}Oɽҏ-1KѤY& pd}!Y-FkӹEjT?m>T2ۃͥ ]RvxBjnІuvl8UؾXK8 +Ꮵ<<:mCL"25ZOO.z7/֡ˮZRw}е+}u;l+?{ǭ!f(qp\n܂ӽI[ZT^-8mHغA3<]vEڻ-gB,Vo.P0BeTGw  `m7˒ȌZ16f6B}s{d=]7z^_t}~Z,.Ų'jZ]5+eϟ୷7j9E!9tԕyjˣr8$rz,/&әZbVGoLdNi=p/f?So7Eb$8n~Tm]''?-6◺f398ep +aUf^j eQkw?lo d0 ,d.`\fH,,Rɶ@{* v`a&p6͚;e+3Y'3ٻzq{>ne-pz.'[S*-m-Z"ZfV,ztU0m'v믵lj/k|ӋWӣz2t~V?Jz<]֏'Ka `NbYp=l1P;8h\|3 Sm|7}>_cnv~\)ų_=1_»mCŧ77<7=s]Qzl[,ߊX[=\~L&EUCH}TWZ=UTRVzUߩW{hD,f9^\LըSu:U:Sy3WS 5W u )ZWu$T+V\Օz~QwT?>l%y>\ 9Ի_gabe\z>hn<tS&A"*V[~vz+@^|ї>}l1_: =|5]ɠ{0}z}:ѿ\iwwne;?HoXu6 * /x۴B0U?v?QXB 7އ/1!eӨ/* 0N{6wpMI,x,1rпc?i[~cgCx}1==m4@O5eEn«oendstream endobj 490 0 obj << /Filter /FlateDecode /Length 6408 >> stream x]rHrr!m Օ׻ŗ[kS9$A *uoT^^#ФVI8uOO㧓4')OO$5C>LJO'?='OqhbN^_>qI :$"c'Otrc4vbX"&&)Ӓ2UwOy7] (`uټ2 3lBaH2+ ?(#jCىL4$DiNx" 'NLT3zr5<'bCg0!gugXR(lx8dNЫA"x[HdrFiK P&^f,,>-Fª}Ӕ+QLAڏL@☲/y^/:C$N;)(6x @]t~yDrGkxa@WZS4[ZmoԹ7^`:|zд7ENRcɩuG٧f{#OAM#T<((v0GT*Xv O =&s2Ej]$ HGdFdN D"ߨo 27ED]6Rc>WN&6fu3n/ֳ]VY382߉VI>ixn I0e,oaC&ubRMCS;t+-v=FFpvёzCRHyrRdOr ,2lnާI`ڙO+I ܖg]@4{̃rsXQ`y|X0=mXm3RI5Ū+]Di` 5Hd*Aa&kZ/Ml/k\m:JQcM4K`Hlx> # :Fʁ_w//" -M]_ ,|^jn"E3$ pg2Qj }0^ڮ'hpP{Gy@2"5\ mb~Q@v'J&:=aw˼wV=bƤfOāĦeú.ڍ>H|,PzT/wS.f>0h*G"w() h`. =hG}fY/h+ Ã8Hٮ* .jV;{z9|`UoIÍ(<"jyE8~?)gΝIqBSۡ" =l< bӑ40#Lț'v|졸w$p:l1nn==&@4O1@DHdlVbR^X\<|[X}^9RnػR3hyS44yCz>m]M9$b<^$Yp`8b:}< 'V#|kL̑ rgDcwu +҅v#Q'xn0&(D"e)s). ! ]C &̋f@sO:{3C\!rY }Xh,5 "z7hF' ݙEǞ%|Y,mϼJǀi0QC8m- Tsͻ"lvfrw) _CNMn°tOc /gDg+1|=bz<1JH<g$x ;d1a8JD{ Y<<\yuU\4\ gAfLܭ00ƣYk\T"1Ž'(>wŠT 3q` {q˦XlB>%g`0o|6%z$J0'{Ǐ+ptltf b}} ʰZ=$rdOKz3FIlCpUKaq/NӐaM@PUw[I5J#`!Y#-( UՕ*x`,%zDޑU_p ӖtIOLC3\๑[#7& R14eW8f؏,fst)w6{Ч~y!;V|b.'60-G64xI5pqA_0fKyPo@]t4sT*,Fy0\zc*=TIv" `H-|?(^XM)]u֎Yi,5r=g)c#*mn%2}> Q64K{dvq!qP$GIS{$UvG8c8qcl({ܹ%#.wķ^(dWE!v֕jsO׋Y0# [-jI<397>/_^Y-H6msi1qGZ=^.O9&f I=é`C!`0]H=q!NCų_Kݩ@,9>mw2J˕EMgSU0,eG\%E{1jM6dMTL+Ө#)CR "Td#㩡A2hu6yE{SC6gd"4*;*<:i(8@:,Gz$&x]B"} b;r'WubT){3]̸Rb^rAʹ#@sm'_bk/~+ApH<(a.\Q$ٖCɨש=vx11Ry9!(qZ <|uzP^h{W]y4EHILu"ʴ^5XX9t?' *H0fY ^vbbYeW7=Q`;\wCT_ o*yb2Qw`oUxJ2[RQ7!js1w ^',_i74Y;vջZgmïp~ V;pQN,o! ɨn|YSN)+xgL|!Z]#/7Hק \–"44ޡz.u|SvO[='w!A8ҍMّGXsHяe'fSd4>рqjPڂAlU4\@ R؄8{)%+KUǪ.NU1ӛr7刎c})H)@P}YL^(L}fs#?Np:";s7=&#aϵQ;ͣD]ʬ{JQs0]aFacT0$ߘ=a! 9"uӮh~t߀Ĵ٨pf>œwtPhWUhǭXS*$H*jvN^?ɗNFsr]95^]BT;(K Zb ޸0pݕi,*Uy^}{.~iiQEٻO$d SxQF4*:2s{;aJz}S䣰K׼sQ+%MܹC~ƛeYҟ3fOy/qq7MkӦn[VS6aE=hv)QG>e  1#{o^/ECI4u7 ס[}O]/B_,u; _nT'̗dEv 3=*mqAt+QsK;êC `wzmw)$tm{*4qWCWlxE`2Bj_,ㅕ<"/v{:8>A94]X 3X |p9߾)Vw˞w AiY.>-ߕyC/vM,9/s&PgikM5cj{(I7W}Kj~ҒH_]TmJ댴l&Kl{q8á` k7FG"?lLDԽPL6 $ O8kֿ'V6;W;g(߀#:߂ET U#Q-RpjT@MpSjRS1'O޻NJZ7raU<f3a*ra-sc[\u{a.OEu ֗ F04i4(J"3C6G[ʱn؈z,N 1墳){Zk Ņn^Yrђ')l`&+Cn)K>n3ŏ_u#-ѰLp/yQFh< L?\`^AbJxG?ajlG%֮c[m_ˢqx2acC򲲞*>6ֽ`F(\?#d23B>Z!,3e/m֕|ʬ 5z1ɳנALgX+VASIu8L`["HON1C&Pzό*l`<2Fni3`yҜNNWj:|:6\ u6$$ɘ#"=/TE,PjX0?|؂#'0 wxdUM(Z!mX[ˣvХ;W13[}OZ6R$:[{zfendstream endobj 491 0 obj << /Filter /FlateDecode /Length 8402 >> stream x][sƕ~RGh`@\ ;]'N$yU>3 h.40CU7RoƞKFc8CW[|Y_8Z3_;L[ʞZޘ=l>/^\/hԇɭl[  ]ؼ=+ ݧQЗb}; EY۳w/xUyetuVj{Ev]nݮNj?mm~sհqPu]տ~P9|:wo \J3JX'5,i&],ܳOzo=IWkkf3<_g>i+f>k+kmCyM胼_gOg/fsS8n΋Ζ[]W&lw᢮榝׻#|SEC=B O|/ϺͰkVvr6кvW t,vlWK"@g|nPtp]`BΚ[56<.ۛ;fMb,]edđDVlsКuy<2cu 85vD u0+u[&0Z2#7S{aMm_9gˇv'ЫJ#9\Ҁjet ;H rcJg]4>Ml&AWJ~8au7Sf/#ǣJlLޜXѸ 3~ {( ,V~,Tsl~u/"Qhnk:rI273_5oAdֆΚvYˮ "mME \Bp7u͑xxџ K ~'TY_SٹEa(Rz+#krHgmhIxW|,p(irNjhث C J)ٷEK/;!1YTCW_ 撤3~]5^!lEHhuWw>,Mff.ڮr|;%Di@Pcƚ.LY:"F&_,3Oz:.Xү@x.[D)C/yd ɹ5͚.o,c\U\vb (0 PO3Y+|>jQ0\e/1[LZ`aO_jR[>?f BCiJA_Y{>\5XHjWV@FK+|m^0SMg@ACN>ndP] @514HZ7c 0QdnH`Ɓ%;D+ҦCpSA,,82VD>OqRn춡g C  =5}C"@vNm4KD =-ޓNUfP26yA 2q2Np$b\yg(47l"dH钣S2~ 5jLPC ujvj E_?ܦ4&WW%o`o!v!1,LbkcwX<.Umҏgk2Vu+/i,"lXq3Gu+96 G8JLqOib0ߛV)H]:4``<"-W{tAv&-eo>⨄(P0¥Da C= v|R< 4w?Hef#ڮw( SPttD.jh4W }6dj,8_vf+Դ+V.spn\6hHeO3EUԑh{ }+ԑ+U+g{#٫% 3i6f%bTmk&#*qV`|64=Z0~iY@v7"<ժ)f.x{,|H XׄK~9e[`oUqaRˎWt DZ(GZ@ }1[ fFٗQk#rh5.2v:Hs fmuʯrAEyNj,\Qf; h1u`0[[Nhi{պk7ad_*4CﻍYTy2Nj- \Ay!UUjewq̏~Ny,vk.x {`M6'aVc_3Mύ 0Ų{#Ȱ>;[6 "rE%&?>+Xa`Lx[OG"Q[یʫ]9*t{AQgF(%WP`#!7~: n}OO ZK095e wx3XquIY?9G|d;ɄUG?5P!Inځb5L 4Ȩž͎)Y`SxKp $GB_F45DP':Q*n[(d d8@&'Nij1YoksKo)'VG]CJxյpGo3X~bpVU6$pTOÛJ; ZQ-bS0ʓNoϛÜ>¸noM s},`yl{ZO[x#x6/ Zy>BUz4wW(csAv`E,}z½+=)dVMq<Е謹I_OM{)ķU2ޓd vF Oefs]FQ;lSqm) )KljF|d eW_8ڵALr݄!dpDѵf@+2>w>qG_.0HE8zMkY8WImxkyhA=C|*NB JA8Ͱ䉒DԮbf<&w 7{EHPc1s6IpJgnBKHR.!hY ]d %ZGmvq¬2o1 Ed>g&v0fjIDٲ Xn U8o ɊI'q*/}A}`PB2ER5͟պ?J|~ @ ,m¤#.H!Uv؅aMڈ榲iiN}ZPmhb?D-r]C]QJ8X̄a.Ѥsp\S)rՀ$ҷ!SK7Wђ?s`E9!݀wǔh!erYdVmnqLv 5liYe4}Pxi/5bψ"3 WyGX(F;3#e_e2" * %;"@ߡ)V?l =2 ,%&$,rh'Y1,ODY*ȼ`ь7ރHry=.ncMjw >QǵE8&%è+C<6\H b* [1F7\XØ\m5B ]BC'ٸ,e;zGNZf㦟+KF5hN5NmVy,\`/%;h-m|pb Y:(ΰoƋ[S IwݚӶb%NU։nH. $5-Ķ%U+.bA vn7,̂D{G$ k% g͌5"VZ'*:Uh7C=^$ף[psVgWۭ$rv< 0Lz)]fL".ܒsk-,,XBbU)՜M(vi/;p z oڐzH5]3'c&q^g{Yo,"ߒ8ퟶpJ脉XuO/9PL{,(}BTT!h:Hñ)q%/]⹘xP֏w7H v>C'I*w+:R0c4<6sbK5dӒ8JC۬WF\5X^#X|V- ^#1  aOB - =NI5J|T@wL{8 zD4(qa:vJ;U-V-nN4Fy&q ”|Fa۱; Ds02Y$=;}8\ ތ_.[dp X-1wRF`l(<_mux`L͡?6*qlӕ*A,T!7&>k(BfQ]JTp T0:(ΎcPmh6)4OimS9*v oЈ% =5S/Zd=?-h6.u(c9zRYWP:Jx{+d ^ڮ{,,8*xFâ4uh[i@Gۅ`IO%z@yD^ \sqBxb 9|||ͫtyQeblM@{p,#rLjm&9:B$ΐ+t%˱Ø$$lY4)J p2hbAsܛl @JGa >"k<@^=iuK fҪ&Fsp\cw3rZYb9JpN@e5I(8`)v$Ig*i.>gcه6zl#ϑ=:tScb%UV"¸d1%{â|DO@N^0+IaNjNWSo1{=6: 1O 唋C%sXTL  '1eak6Wb#Xe 튃mφTMkID6uXfҝOnLF-LuLH(ǶGq{̧ EBQc|QZ[XG0vK[C=]!Ee&M.v#쎸X-N;<ݿϞdԧ 8?Fǃ=_RHv(i76}Pr\$-*)S.uَW#֬(`JǼhVEmllFNzjܤY<9 Kg ¥R p<$R`oZ9Jp ]ۋBٵ=:o;0b.y +oƌó~՜P5 0f ,VzQ ltnt{[:iá|GAi'|gͻ.7igA!6,R Л< Ўpp*sR?6նY\EOa[LNc~&#jW?uqZ3@J/%* {eZW<ߩ)0u.!k(IF@]QaꚑP%xHi U%]U힔M<6aS[)mdLPNF瀆e!9[\<]¥&TOZ~v!GG;%_g0z( +&3:h _rWR 842:OxkPb-PQSѵM͚bc#1& `zB5jJ>7Lr:΅ ->L]*%"K_zu's H& :M1s$Lq-8?- :ۣ#i%ZK.vfJxvmendstream endobj 492 0 obj << /Filter /FlateDecode /Length 8489 >> stream x]{sܸʵBr.C<?g7>l]*+uf(gPKrluk\?͌l(Je(@h'I,N|gqbщuz"6'q듶ٯ^Kw8qc"r$qn>c4Q8njJ ܉7g@H쉅a>9|3'UzIl,糯ΰ85I3X)&InG"~HƙX'j%`~{{^YjBdӞϣC*BW]~ݖPkEu83yب>vkbfoi*S` }9x  ?}X0=_e[͟dRgӭ81s 6@ۓL8KRsi8 DA|Vt!#X}sY f,O ȼY,vχlHTtV}:2 CE1aĤǢt!Dr`{eNb6SKw_kE  i'Q>Ԕ➄G!25;-SJZ%?`[4pRzϔsIP4P(G V7#X~VTfL{|=чbEO@AqoK7@#t}Y,06j.Yi_t)C[ [ $J`)A?;*_m1 i] |K]W4(|,*U\5 Mv)qqqsx5lJ*E Oc!)U|4R2v迦Z{)|nnuw _ඦn!7X_ :>tzLouB:\ +CrS;V4<’6^?MJrsj'˅d˻˪.gs*J+|[P>rty~z%ZHN??*RNi?.{N'!gñw& :em+sm*M,u ~;eNu%SIe NW_v~НLMtP߫ zIf;Qث{dn"eHPtGS:WC{Ө9!@L̨L6 2241جN7nxU2q!b>1*]OIE]W{&Y,OaLZt©W(9EYq$*nvYɣGKL86yc<6;}y5ѭ$XFZ:9s\j㛡I%};J@ݴjAenғE;`뉎z$ڮqd=WT+ep L۷~`0!gѲ,H[2"g]AZ iP)SS m75Un7muu*p]ͯwg*GF,&=\t:Htˢw2w/<J%qɝW9F^K;uzC&lz~]\#Bu"7hirBI:]}SΛ,+R8qA(n2ao9 .qj΄4>nE<0ˁI@T n3@_y7D59gcm Ca~p:9Z.D\} n)b7猗LD2r"xѼWmČ|nKYП _goDd l?3X݈SDV#"bkDvoF04$Ů*؈`@=jmapX4 )*` M-%Ӝf6 ؖo 4fkt&y0?mN? fU s>0t*%99b𴺷m^w-o:?V^ YQ1/|@g\8ZgӎŻL]}Q3<ܯahc&!AGУ7ٝ2q@ƛj &E!ahWuN'h} &F.A95,y/! *ǥ!*t>11QޅIǠ! ږ*D@*pU66}@].Lj2TPCHAF43A'TF" &-W3 I%020 $&YQP6s}Z޴34yMwS$߼wa?)]1jvTDY'tT9pP[ thY,$`?AiHf)1(\^L"1 -VN.>-n/`E(q^3[J'ƤHtsJL,Rh?^uYߜGؼ+ʸ{oV˲na$4)_R WNٓ(kQN6ӌzيm/ByC{V;L\cA]ou;FЀ .v@iqii na y+!Pץ%eEoaR]߮B2TR_1MP6hGaA[蒓C)MG̣fzSa$Ԫh󒶋[}koCӾs 07@Ҽf Z&fewSU?’贃%*ys`uFS>cd#|ZY4,oIXv)","1$= ."G=p# 29V,ii@ysȝ/˶xeTXHfAq|20n}N+'8P#NfrlγQ! t*7DM}Ul1 v &N88ǧS҂ G9וAfz(WW؉ y_=ݑ,V$~ƘhS86hqm`۠%)GW]M9 y[({7h94kkĐ߀ B$OcRh3 b]?!+s_RܱISZcA6#p04{\4iYh= !X]aN6I{5 $23^?V1&h:s8,<a1'Xd^X,*B.oFNlk,ĽbGhxCF<7mPdNJΪ{Uf=*%aCl¡ V;)º}ЇG%$Ny ҽo=\F~wpnޅIxr-N0peWttq'ք`/a0|E0}:?nldEyY 0<L  Z1<`05KsPUX7v*}v9n?(Uj̸s) /E,!sBl&c;{H) sOaʠv9c a1YF̐q|~PE1L".*^p:"I.Ay{agtLxongYwmZlNG{g)Eq릚S E1վu9}]:\n,E+,N M3t^ O>).ftu|/M(^źFZL!RDYS)J*Z뮻- aɽ3i\IQj茂|N6^q iCa /a\jpϜlgSaEECLcƧ! ߽(9;PzmԛMt zOjI\ ļpPY{ɼ+yg)B$MDyQ5Nu||@Ex^"Mn6u޿E`+7YyH2-/옃㫦/} 2+?{/hwlz<ڐTTM߄(]4q}JmoIRf  `\Íj%Lg#D+{4f*r!Z),lF*Pp* o%j^@YU2*qhdQ!An"P !\R/qY] ;WP5ͺIruYx|uɧE]ij:}zy%+œZxAkRp=}JS-H3G~2$HJ7,nqVdqU`t$Ö^UYp%gMzu\[^\ bWux13`eVJ + &vw{8q"Cli_&H),QO%:v2ĎB Fzw|뺸~Ab8V$=h<ӴXi W9WЈ[x82XSo~|_CzL_ W=b]&>,7O.2!OrXyQ6u ҹNmZ&Xtar[0)`"K'1P22q_[=u1Tˡw FN\ӓ!)B9*r99LNwMBKM섌o$~>"뢮k%/xr㏻b [ ˀxE M JoMtgՒJ KxrVdXع΁=±P7 |]DМ&bu6,'6hKwbYa0']rtzC C! })ߝxJîkv3#Z|KE۟Vr:֠%Gf\U٠dp'۝Sfvq"E̙3CGנ)24:JRxSХ}|*OC)+ ^wul~\_W -:"7.Ա ]t`$;3UQ\Xh85&N< G% w5 f(,Ꭰ ;ZD~\,oVW)3*FLrOǓ8<'i#õ"{~&WR' Œܹ%jsFrj;_ ˖ X)Yx7x@;iլKc.۶iOвX9(b黾0yx/ܵi5\dCCX ;$ :OF9 2J o DM'iH] V+=>-܃ r6S} n~OoU)ò-- }5;GX _R }jV{Iy YE]XTأY1|N7Fk LNوq=P΂@MjԠx0 c]?0 /zG ]* ~;a2U>?WV(==9^CSE1:_-0$\ |3!2;AOt 6 IJ-2hAxOK?U_ Hנhd6D}~Of:Zj-M6xqm54R9P D{G ~z!X;endstream endobj 493 0 obj << /Filter /FlateDecode /Length 8530 >> stream x\rƕC$"FqIvJD[NP8)kkID31!}}=Fc8C9].~.߹gIlO]n%g~xfgrsݳUyVyRgﮞ8ISxW..l~nܦe$U47U-UE\elq/M͏ma`Ug4 k gY ۏwx`⼲>a&GNaluVIە\nvvَ4Qh^.mC,.ӂhݲ[Xyj}uW/1$s~.e`F7;5/89ۀ`r-yzyTgU׋ ~^:ݳm/n ]Wp.꛱oۆg0qeJehƱ^F)b?7D@+G(j8f]9[ah/J#wECôr ~VF`8@A4ԕ6qlE$4mݺn ]fUN:'*(N@ #{y\V<(N3r&Ɂ3GE8*GMM4;WZ Qօ{qpL=Fߴ@:Y橹inj$fd..p}qe75)@~97ے-tY-hd E2ngi]a.Z@GIf F40 d S'jHHAx?E tcA֝%i%A?ށ p@ ~ѬW2Rx&>9:/L7~?={O9LiPNzpe_~<˜Ѫ2w_EK(#Y!*S0. .enj98<r Jr@}NL v(~ab@18`ĀvraYo t݌:NIg up }F>oe\0 s4IWZ)LoXã!.3h`[һz /hv,eNS@Bp84OC!N-li|Z5=NwϣpL.A¿RVTϘzl4Ig[s6EBiD!zVC 5IFa GЬcUF{ʐxF.KuaM.ͺUY +:

ȟP b[* J3-%|gґiǒp_v~hy@^fJw @vXuw1Pd2eV:*BqjJ/gy832sRU ~#?H/Jx+ǂE>_AFIqjǜ@iS7ꆁhT 1lN: T"z(S(H?˛-d4l5oy/@6  h:o곊.:s )<08`G1j$qԥD]s5z98$-~V",Z>Z1}k"l& t tf:iO/rl-wӖa,-bScl$cZgIޥz UTLv+!;R GǝxR"H/Kۺ]חk!{i$D گK13y3 U$DBdHTd@Xޮo!9W*w`- wjEk6Kbl6XBߓhd l P[d&o [gyܦbЃ &|O)["+{,999sߪ8Y77 _wWi5v`c (̙I̟Shm~] l-'8:4dryݑgF"9e-:C9l=~8twi6u R;矐KpJ࿓ #(jU$YVWXAV0qDHc Ǖ ^<N tz6#O dUYKx!7d\zk\YKՀ~/N&Q}W(F%*XyKRLkldYώ^X h儆*5yLlBa2 0V~ZQ\%yVVo0R1UG7 $I]Dn:~> 80.`Ff37(8DЮW9HFܙ!:7i߾-~_KF# ݉=IlŹw "MU+o _D]a{% {^2``~[q;K+,"c!;PX `A|O1Uw3x{S›&$Z A-?^X QEp\O^jRl>W[z\'apӀlll>y{SZ$q_ A9Td~ݯA'Tf,3:5q)6J`m+))qKߺebH\p|ͣkWWA#>N>]t U&6Y[Ӈ/}Wڤ $^ät;~t5?܁DHe_i QcQXEC0g R=bYk/T4S~SAS iLU,B#@J_0yg^;8]߲) mρ0iBD(F0i̗Iip :qNfba8ЩwyƓ %2 dC4AE&e: p.3W`Tg)pD!]\ lMߜ}w)d<_\`]4"l (b :(APK,Po)H\W z`m#iyuA_W ڥxvW2mdK:UKڎ@!5@TtS0 XͿ ?˹hM_=>.Ջ\qJXzxwzZ}XB!3n ~8),KP2+4l@$PvRIDfSH?i;i Y5yb ic^> ou r-Wq\M(p-U jus$#>`̕O3'Z8QR s`J1Hi4 1po2_7Wq4dZ~\MCxhUAi,+vy"3}̼;nʀ\+s)[x>IM/gqo@Y82zZY9L@EmFRh,1O8әNQ>?-~>ѫ-1g8Շ)g*!˶o54+X2hiGfģߠ^I,uKnHIJ%˖Eҏ7dhqƝe)] Z@>>zɗ `~=aG ~R$ YVٔnNjvn>N=^ fMyb KBrY1dABhc PɃ sMEN1OՃIf]`ԟ9HaJ1kY{T^%{nڥ&A.fT64+0GZRI, [̅]lXN}3xtD]{,) /˱%P7 sD^R35l=ҀPvl<7^!pC" S.DYu G&7fZs\,j=HYu~Bϋ'͙D|bށTs+U۽н_'|汵xJE8 v6!)${dhs,vz70vQ%U i_)xx$7ŧ) )~JW_ WPN\O9F$ ĎfmuCbh9*֡[]7ˮ0d6!/ j50OJV:Y8.k$R<HpNjɖ )p0 wOωaTП9èhaέVɺD>.n:iDW MG,_\o}u "r7_L;H0K\뛹BS|2pf u}I?, J\3r?,|y^&09cFU{r21۪?WLtͬ'\ghϼ *U_H;Z]+>6gd70yRv胅$w ~)[iַ:pʂ' @We%oBoD)HH& \}TsS*B;Hݏ;6[ 9k|Ғs,^c^`sp[ NpQiRקr a%]ψ@rPV2~$ ^#z'_=G-77{I0mPIAC jj4x%CR;>Xk}RVK,&&GOA`E>[Wr5}I^64zH(@`i5ȝFIm|6 ^tWfcoU4MiDt}p@S}\  *-^fn f1=1u_N}CO>3JƏ/*a8cajҬ0RYEwe C%Z2dLbWp0ܠIGzaMuS߰ǀ+lw801"ၸ4ROFFAiYcWot* }bK$\c!/⮿~U #WR?:͒ωs;{!MD_/2r_2/_d{endstream endobj 494 0 obj << /Filter /FlateDecode /Length 8290 >> stream x]ysuʟ|/`fU*I˴Rv) wJ{iBH[寘wtϱi咹߻_7~>* yTҿg h}'p Wp,Rs# mW}?^ǣc}QJ'T)>}Óoa;| ?ȳvj>N\ճO.r+/5~qE^H+q:T-l -v0Se(BilG~|j1t@7 +bSү/ /֓v\l ZAO"(Ϩj ljb歏Qz6ͳN߂ӄ轨^[nU0Xq^s00h7_zZOO,00r8@N<'"S#o +M8rQRk̇a@zory?br3qnE5iX; $ttnf=fwqL,qۉy\PRuQo_)Obm>o1 {X6]l3E4jSz K-`hro^ZZzU'm;H?Wh0Ap2g$IB´SXy=_AI"?`]k+Y r3}z3"(;Z|['j 9&A%<*ч ,a])OCV+ bRm+U~L@,OS҈tIϼ-y| nEמЀhye !4P8Pu.]b67c"hj1YzNB [zO5ή3? ΫmnDZP(A# Lh܁4=9:ZN>"A(Q_eb2݌wM^.; Vu=+lVӖ"UwFU%(ް? dTqQWFp:3!i0V Cƈ_ IH  (FKҡW[Kr &#3y({8Jݗ$A`V,"՚mcR=>hus50ۑ?1] #s'NyR# &_,;JlX ϫuMi]Q͞w cxUC[dΦzBqVq)jnP?x]_ B[ 0g\kt!1uOlRD_b5#zjVLhI=r| 8ߡOqeX(Aa/j ,I(̚cUsU)n豔 [ofܸLv+ٿfy fxxaIF] Df +#p00qJ ҠZx_T98t`3.< T:AԓZN.UG}@QSAri d$O hEĒ MAϧA),HߐcSPǔK31$%L/.&'Dq~`/E ^7Z7y65xy2q͡ihcf4_|:;  Ё݉ߏzCJ^fvFA/? rM^I]`mp-9h(Ň,[EN2J4m.2*2|}oG6%}x4 Aнm0-5R$oNrq,hQv*pT}6&+UBjɂ_r#˔P o_SMGAK O$ՆE7ZeeBLoSií y5] v lz1>>_CZ#&lRgU n,͗9k,<ڻ=QW&iq:USH=5z/N2^O0.ѢF;IṀ/^.!y' PvD1K%‡W3Qc, @&ek~Uͱb2¦6n2,q$Qܕ덡Ȯ/e/cw ^ĔǠp mfl('/NGw EG`PB8P6P\@y?{#gIM >=_8<2eL4hSb H,1/Ӏ+z֊#4dhI!|% *O:IEG-9ĺii3I(^ꋊpn7$zoc* )*SvXZੋ㚙WsEMG6\Q S?$h2nad$EHπzX,d:0i~e6I,Q*s[ΒbKhm (#@sN7۴xjNzŢ3=KRuZh6LhU6E"(q$V-sv /d]>qiYTZULK{/E:\w^!9@xݮ6ONr}q[I|bLbn% ,21o]i$8ډ?*ӑ CBRM,}]gf5_O7Ia7m}A T} !Xq5^o ~(ړ`L`2dԝZ0UV3K=*2|W' nx+2~d2 |~jPě/ޥ v/8 `}¸W1!nam4WbAMY<] xCq(G7|?ۧ!eAHtSt3o(Y(%ŧS(P{8 _w=AҀQe[hV^]wםDF_fQMa*NG M#:&M1!S?6&{+0ry`Nj rXTi: @ #/?F6.adw `0ǜy\3CC29_b҂4*+n({MvjBԭB-8E+ %"|u~V+P21~oآӔ5|5jط?Ѯ+GQ>nj⤧#(t-1rkk%أW#ݽuZb+ZVɄOAi3Gͼg)uF:}0&Ky[Ere!aϊ̟ʟ]]$ЬxpQ=B~lO%X2GYbͨgбuex{ ͊Y5NvG>?Y53.m Nm8] K|7eLgq9}}tބ1 9I'i]_4(T\G 䘃0;P:ɸƂ. ᜐ_fv'ޅ+|z_#RݚծKې[<9}ڑ!]OnD lg#en1jT[1{} El{J)uɊ6sl]G:ܞ%3<!dfJ`kݎrh'ϹsN^4R FR^WxW$O!4j6jf&yM.z'%qhơzs6ltbMkBGcˠ^6!w0>LI;)EX<>t3&Rv%H%s,\ x d猽&ljYTAcjcyb Tp^s`cvӴQ *p ~D\BmT J!xة# ֜(yPQXjkszwfQ0">n閛 vʠlz7$%Uä WmW߉oȨ?D3_ /:`!!} ^o4SMPlAy9kdiASꇎ0ւ魳lY&N~,ƛIDef99Јk: fO*[oq\ݣ*>h/|?y ,qI+~%Knej-I_-ǻ9]^&_)FS%aZ;Q^vܭ#ҸUB$Bׇ%g Ly9} CQt]b9[^`'isˋy19˻tbMR#_[t%_aCÝ=`w'劯F|Ԣn"^ )u (OOݎ;_5Zg2tV\n>,l|ؿY_]x?[0Ɲ6KwQR u~xuMj ʃXUociv8Kq&g5>Yf[;Dh;q:MT*pERM7qgy L zQN*\h/xԔhgւd{߬% ?@4t8$:ɩ ɡES0}g` ~GՇ R]m ۞,6gɗPFN@E_;[%_+"ہmżG,\ා&Liٓ>Q 0+֋EՔyqC\k8MY*|PYq|qo!|| AdF I`NaMw5#Bt $`5ۜPwk*N Z;aDwo=K,Iv:BR Ԏ2Z8tA:;RH {S_ڀcbKy Fk zM>.3\x 2`-^ٝ;s5V' tdTFtzS Մ Ux157JĽAio՝APR͌ (& J&MW-)F l )(e|XgК4J`9вP-lOT}iz蛬4{Yfb+ѫ'_=WuP @RZͤqah HOW,ԒdJͥ^Ybr3=VvmnV7 C u3GJ΄fYrs?kцo#}*OhO w1,={H)PPK8-eݹnsL&SP<5ҥSvy^RǝREvb/xqLnQ`J2rAkVheUBMRuJ+F?xuo̥TG֯ՒbxۍuM,K@JqZEڶ{cgvr|b6-^} }w؆c u=],]:GtB=rf6|HQy?_/r ۜ\=l>]U3L g92) "_u8dQnsa9Ri 6moդٜ >1?RFÿ _\Dńq~oIQ3`eaU6t6w`}Ct:f%ሮt{68q k0ӰH31 :2ܜ ϩwx#HHR'lM1' 'M$endstream endobj 495 0 obj << /Filter /FlateDecode /Length 196 >> stream x]P1 y?M0Ccd2I>p8Z9@S؝Yn+ѫX#,~ unjUf5@&ryy˒ D& c3Fpjhs-2CFي -J.O.oDe{! !#$]Snͥs:K!mQ/b{endstream endobj 496 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 928 >> stream xU]L[eCa'U80sA.02㣀>JVas,, 5NM8ⅽʅa9%Ӏ޼x0$20 s9__h=m O^c9Q,h"7>w>x8Q1̛-Mm7FSbu*VYl:XX+槊W,6eh_4MUbK%sB_ YMj y N2Z Nd&Y("~*%+WؘЅ- O~}le6h5j<؏qMw`_d'|xeGMö5}Ǝ݁6AK ?/{u;hSz&ՊyAy,|۵KeV_yk6F_.{ sM%Mphk>M<#]5LpثyW{,w&1X'OP֣U;jm͍vR$P;:0 kʗoIve)Q_?rx{ߴ_?qpL{â07x9"#w939<=:&|%-|#$*UZ+;a}Ir&BMŊl̢ti-آ989~t50X4Ly !wLhpJWm|?|+lG 4wUN\}+ pzyXz,Z+b76be#LLX{9_-a9mJq;Խv*]` t_0+d٠-(<=-xEn2%W|%hLx,hА$ҐKhU].1B-nendstream endobj 497 0 obj << /Filter /FlateDecode /Length 7433 >> stream x=r6TyqI4AT9^']gغk떚$&#{{{n$8dG3cCD7q?~^')4O ~(R{9{.S:Θg{,Nm@Q?}xxr(Mg&~a8Ix.WtC=XVrqom 3EEޮjhF(/{~KX%ڬ͡cm^gu^gX4H^nzy99e!@d.YgIm?D0HdӶ\.lo670^^b7*:E 3> !3dѪP䧈6IttOϋT(p4f~I葸X&萜Npޣ2?eܵl:G,,쬨]O0 fL nr ĒN{}QN/2)*y"+qTejWA3fTqUs 3Y8Zu~37:iWE䴭r"U7 1|Ӽ)% 6)hUxv@beJI"{Wz*Ǹ-8<<&Ey\< 4i M1Lx āu1_^YUH_LKn D9ZDM_ q_wP UzʪAcҎO.aE1k<6IˌEctmR z[>26B^o'ۗ?|W<:<}Dn+RfD`;[ oYK`FݴKĵ-j!a~ջ7?ocƬip!. ŊQ7 8Z {x3;9^Aдsya8KQ0_kY;NB_uJzGN74qIuĨcu}R2:x\1얂Lzv İ#VƲ )gn,{^6疰!&r4b HaBbv!ev&.뺘U7NCFh˼-fvS𴺊/bP);MS| }B#W./Q x6^T[SPb0icCZ.9]B 0VV[3MxO{NlI:@ugW)E:t@eY= a8G޲,Ƒl}U9{;+b|cX}*/*h}' >BI|)Ėh)zL00_hy :.wmfuhH^MdSf|{.yw&8FIF.7w!ݤ0#-6 _.xt\x%(f/))A6llUOPn\_MAlk_KC'uLyY.!w\y!N _t ʶqaErJ:C1/:: eP[4!R=#(azP9ДEyUxuC)aج)# M:Q pV TE_8g>uP%)}Te`Q-ͮcL&"lZ3r>kg7 AzHSS>M08) Eç墋_B)B4MKi-ma9,Qr `wկ ">}Yt^$<rbs햋(+kySmG+TR)nk li1]RZ7쵵:pqr߽ɵQI%˺8,nʆR(JF}B "f>a(6$s8@> G44 D25q:icH!}6vI9a͊fZEYq^})#!Wg݁M*\:&!L*\ʱwFqJPi|+C1| ri{T=KE6 PJ3"I "o n?*/HkK3tVa<{8rMض.zfjF;%e̟Scp9gaґ%g-'$ތH6]'H㽝 -t5t ѠU>^ 3'^}N,feh|uݷr\eڎ u5$$ AqݣC;L8Mt-Fm,(z" 5ZIA !v&'SeɅ 0<.z(]gi0my@cUQ=b9caTYX(k ۫@XۉT:gVQ9[oہ?rvM)A)fſߠ7첗*=yX _u)n.&2!aR̹F0-fW93ICIjcCHF6Mjn0:,xUQzlRI9ByOA:p/N!>!)[[Zi.`fʶKAaG+7%e\)zz1o|ЩP.Tl+tt:msrT0*> Ơ!'|d8ȐF:(YB}VQn0,TJd7i sKaCz2Z׽W >¶k4SFa(IȲ=|'`Ok[`S K̆&U].W`F U9W-pmtlꞠ fsGG8X Ee>͜딐o-̦!l5q4 :$u}Ĵ]iuժ-TۛrԺ1[~XumƲ@eаw@rHu|Y@/RnVQ?  NU x:V=LWZ`)R'#tCY_vk&R};s&V+4.('Ѳ5-DCXjaB> oZֈ~SeFsk2̈́.$+ ЪAq8 , 8{@^_xbY9\iĕ_qЌM%1kGFn<'MWd(%j0%O(cA%asKTAʴCNAGʐ7]q"wnZԘ(r-I^PɅ볡s7%-Yvki_d`I&TGpomz]^m0_,~3آڻyDKd`p-1*A5.ѸWA\mb <{4o0t/ 8r>B@'f@4;TqjQ(w4qyړEypq. MUx`Ѳ!ү\qPXjmaK@䴠d 9{bet, cـ6W_ho-o\[,Ỳo$H =v:iߴigGGnIt|2?}OfP}::ac0 C@~T]:oIt29hWM}ns#ͣBd [ly14.k DvO7e| |bzexNe$ccasމ0njxȰH!TBRƠo=,^o ravj֗ShtݢF'$+NhlG:S)4r=[T|%$+st7/lOdJEomrU1dʾ4þ+ }u9ook}GGӺPX-ߠ$zr%!$]39`_(/v0p|}}ZG ߫#»eVwjـHi9׃]eI%PyQoHaK''mrv& P pVb#qgz}H:/;P{o!M-3imk0MGlX C6t,&Zvx-dӔa"6C %y`=f]3=NMMJN6xb?B\nף4Y{#0'-X\Q `d|{%Oc)*lZ[Ipŏ.|nۭCPnMFq,p# 3_Rg"mV `uBUAva) ((T1ի<Z\QhmW&&N O7*8e0'͛,7glQ۫ =P}U*Gثbvt1 <٤(_$7" \Hl{Ӗ7[UKlg4-eDx TԪ$cx_'h/g^J .?y盤H\Rk\~,{87 j8\!]ިWz _P뮻(\P,fqHӔ{ꓣLKs#XKrαXOR?'q@svšM\(۠Tp> j=sfr*=_Bz1_+ck3R. =.$02Cf%2dץ6O}ŭ \S-D: #Qrf6h'F`!orI܋MfY$Tm),Rh A왿^_k­nG 2v݊VXp6ʠ8qM;sE a>!$e !uM̎ }=ڐ0`b\46^0lv2{p>~)lj&VJ7#hN)96t@:Gg({7,A ˼U6g<ٳB{*-k7=P˾K{r5"2a7qeBP'^6 T:q7ǀw 80ȿo$vaIpb(pOdg`9K K6Cכp 1;-kN07R}j1*b+^Kd#Ff0 [Gۇ!qo[%}wg6tH ltz&\lpwPء-26'QSf0,-T\dBc}ժai7'$Ə]O`h˺mfm?&`jGQvGb-鄴[[=3qڝ;l?aȖqUPurq=xX-k :|Hil[.O`'Ddh}MG2؞ߍΧp E9?mC`7㹟nIكc%,JMM[L/%1VK([{?t U7u4 :VGd`!7c1}&cjI-ᖢvZˉt-%.\+y  ) xb֦}A!mD=Na>o=f ԬP>D`HY};ө5Ƈ_L7?JKTةTuw&7^NOރOSQ$npVhUMP)> stream x]n@D{}@>"@i\$E. Z.)R {ν>/{_e}i/ew8vu4=a퟾ ?k6?zy|txiMmƶ K۝2UǬSERTT};Tu`T:Vud:6ֹ*=3}'*cUP*ժj^Tg+\dkookoo\``os!i4 @h4BMFH i4A! &H#i4,ĴR &f#a!bXi)ƥlLFF#\[pn!t :\NAK)s :r.AC%tȹ9S0TB#@a1! F! 0F#bBs1Мs84398Cs90Мs?F{p ؓcO| הo7M&\SI߄k7pM&})ߤo5M| הo3,'ɠRCTR5t>H>n|߶uv]ڿ;rW(CBendstream endobj 499 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5260 >> stream xX TW֮di,\v!&(DFhdqGP"0 M7L\☸E:9Q3?3së޽}(H$LHM OspSG sv؃dܵBKM(dbL Kטw5ڋ[VFtTrmGNW%e$+cb... y]I[2E*)Av)ruBWȧ \8#K>+`KHF+#~HEbVJ䑪(ZJLqOKSJ"=R$,')))d,WcՊ(Z%W&FƧF |*Q-OJVB TS"Ij9Q(ɲ\MތRE W&Պt`'B!R$Ňgdd΅eb'#ɊxEn_Ov ݷ*[+)hG}T$)r??| /hEOK\চ#3K:cOZoz_Ffbft`̬ʠ9KKokgcS\/F3v N.lvBQC 5 Qlʚ l9j.eKͣ=rFR r`ʃFQ^hʛC͠R>8ʗOQ(ʉ )#ʘ2(SJ$EQf9eA8ʒJRj RJ'%)Cj*:##Z.c\u=H | R >Fv@ve:@f,qrɎez.깻gc3u&&1&[LΘ4fZjD2X2[RK+׳^ޒ{NYo%f/͇1fgIU}<\e-(tE# XH 6\#J4=A i +óP%4#'j̛A kq䴕䱃h9Q{4W?0q 3nfFJ-2/˃uYRKh<}`{ҐZ1  ;I g ;(a k%ܣ %W%t#Kk8YR{e:QV`2b]Nt{eyщ2Dc3C-ݬPĹɰMN1 bqr 7IXco0D0 |G|eXul=c;;^##ޫ }D`g~yUu|MЭ5XD} ^W!w0)G,y9F2bKdisX&NԀStFpu <lP]C,Xpz',1䅂3Y0Rqߝf#ڛ7 ez0u/;,tK~E F`E=aC(YӾgV /x\+ӒnOIL入sK{,.ST,U,hSk̑YLе"z />c{*d@ \xS0=%e$ L\XޯgMR¬ހ6"_ZzRNu%R nS7D `G4[fǶ䴃&xbeY2a~Al\TOLμ ܯr:Bަc3.TW<~Qykw"\shʢlP }`u)_@`~ O`3HoX4&tYqIGws+gf+XLgh<Ra/ً%H?=ЧJ17c9؎'ZvhۮCW붬EltVn N (S qs9+b\NԘw* \eWOߐp W˵& 6nMR_Fez9j"J Q#ؤA%b<" efi+źhD-~"[h+9 gIc ˺ZŅv?v@_A\wY`c8L%b,FpF[0~ěӚ5IH0Ȁ߿K>~*aS/`kl=eIy>bጘ+"&hm?y9-WJ*[r*5oOEmk0Ɠ!CյEKy҆ʝ;ꯋ^77q:|[LtB=M1C|_]qi,8 #p7>$W)>HiDu2l*96Tn+N7SoŜE786yd\0g6<<ݿJ'$ӈ~M~7TPSC lcGk/0Eke!ߔe/:jwMZ ˢgA;&pkɧ|6A'˗t*i.bZޝݰ\VPZVP.IV#5x_堯8X{U.Gہbf&"FCsbJc &A ƇGg؏Km-'ˣcyHlNnE***[Q:ux#xS}]щu 7?g냈˸<5ډί;*ո˺Hlgij_&R:3,*yDKl8,sx|yFcٶhV/}D J%~@W79)}<#b*]lE6_kn=D@Gsݷ}bf>k`ۉNzCr ʈN{gAZ97%y-+ز9OY56;!d>ShA{?wDȞT;DHv \̤a0#e.z'sc|x̋-Y#%:^XP۔$`!eRls]6cq۫N~wMuv9tr^W胢ӷѡh(rT c]5` ԯ {.gMsOvn7KPl ]|ofnjc *бt[HzD}s5Ҽ+Q,PԖ]_'y@4%`?`OuL, ݲJ%e5k{ja, =|#,ٸ۱~ye[wlqA[kC ۸ož9Hbת2W,_! #D5 Iz!LHNP8 v^t~N<s`J[J =j캻>L@0xLXjV2LG=}Ec䴯1ҧuϮ E={MǯYURlȔl:YؿWTiٱGXy*ٿy.Mc8)sNZ_P,^oxrxo:ɂ= JZRNP\x@#ˆg0K%ܕ:ŜQ|{YfѹO ;qF6L?`W.6,z: $ jQ\t3Ɛ;H*Gc d9rJHyvg~wvgݯ>wE#5!w":ռ'UQFYV}VOorXg9Wj 0xZ0"쀰cyf_Ӄ!B lQJּtP) 6ŰC;sjGY890i\-.dj+^ÕV6X:=0X6eGV+50Y|##l~Ĕ 2hendstream endobj 500 0 obj << /Filter /FlateDecode /Length 666 >> stream x]=n@D{7~D@n\$\V S,}fvC`Lzce>m:qZwjywlNo>}vYmڭ/Ms{_Ʃm}_Kݴ߭CY8]>֬kz XXԑu z ꙵU3}+*;VABAB zUP5aP6EFF6EFF6EFFT*Gl51 &f#ld6𚘍^kb62xMFfl51 &f#a(Q F1b4qI(ǵs#pu:}._u|Wu:\]N_tA:! cp0 d2 BCA`2 A!!0 %8J`(QF $4Jp Q\CA߄kj( הo7M&\SI߄k7pM&})ߤo5M| הo7M&RI 6RJ~= 0Kz"yqN$<9> stream xXT֞ef {APDDcAR"Xi"MHG9( Ҥ X"jX/f|߿ֿ59sfo{RDD˷m v\Vw6+ lj"4&F45xD>wzyn ֝hl-A[tCvl 譻5LwWpPp_]3?Wݯ||tUtw3] HQԺ;-߱"`eIЪ`[,vm]&f|}6D?`sr" 7NX4qiK(jeE-&RbjeCMl)5ZKMQ){j@Q2j&D- ʀrVR(j6CR52Q|j5ZC}NYR !PʗNuS~:OR_Q( jRhjQT(EiSc(1CQcqST"@F-,ѽASAۉϨU VB-40.L󌕳^l@*y9x] 9PC1l尬aQBh0qdȷFEjѰ׸+*>8aEFfq[\p ͻZCjiOv~8FoLژ?u>Ii=v쩱JPWJQxEx1*8cCo<}wM!$*'(iFFjxiEu7ի%m> 5szx> OƒJ$swI'Smfu>7oc;+%M'ٹ.V_I(S˹ף Y41ʫ5H,C84!4f4r=\ ʢfW=@47b-ؚs%g7H卐ۤZߪT/XEQ,|[ٴMKwtٻ:0h9//qŖ{I`glbQj\V غGmͳيuv 5qa%>cgL'oXfۿִr=@R~=G\ -Q'r.4;#{ "Dz/QiR ,KGci5P0&.V~0,o6} efHݰܰu,Ruu9K%|+Uz!RAL cb[XRF0[fE PW{@~F=@ؓ%U9'ego+P ED7bb+h#Wt7l|`<6»e 7px$8򣍟H"x>9c `d<Ox0j9|V$kX¢Iyp}YݾIHosF˒F-P-_/FӒ~ss&|JT 2Yipav/BȀJKrM I'|%ɬ%A29Y CZ]VQAIcf]iH"Gq(~6OɫI,UqXp 7Z _Jᄍ`!K]F ̛I_}̵uR)~nƩVwⴖt-8<jMޏ5a:.^6~G3df qemCGsHk74?vpBY 44ihh|ۋZRq[ٛI<ƺy%ϙ 4؀O~}a{U~egY]XaOu KrT7ALr~ق tORDO{OEˮ(kޟղI)3+ʡf*f3?ڇN8P/r UHJ5.!kVmU#Nve;'q,~ d_NZWkUia fA֫ةO6^I`Z O&tVcM}OܒCxπI5 0`M`M+9Po\+J΃H}E3Z҃=Gx0̉a; IqejxwR+}&+v;Bl?|Z2pr uà/N&\'֋j/Nq-[M4 #@qA~R\|;/)INWúų0 0>e|Sq&x60ah]}Fv+vw U&^b۾$lMHx`Pφ'l#ih5)⬖YׄǑ]I@f8?>rݓKh>wH&XIQrH"4R[>}KjC}]h-j8+wF՗*ܨƞ#3IX݄0>d$yr$V*HRX~T5:),"pÕWFmg+]Y*pRp?&x͢L̯}ٺ;:!ӻ0zJCiraRQʒw̘@굢+2C&ѥ]H]iqJDIb6yQ?y n>Zkecjm"z7fv=HЯ:^pA UW#:5a5l- 1-4Y3ruC:Na ѯ0Q5,%@WY\cs+#ÒJ xȂixq JF2Hڻ \ 2 T BhX9DvO`4̜]k `!pp-[u KkDGRonԁ"Ncp|xGK:iޕQ=CTa.vA("-2#J"}*Bz`(mlU7Ztǡ):Lf r)!gq0H7C\{˒66Է \sþEY9.ZTQ{@FW3{1ocVBfuKhlUୁ:4@ծڃA&k`=}RvYȥ> H鏴6h`maP0^U!z.\5 ] ~Um   I 4"}J@GqlajAjz.*H3oRZ׌JQپl ~KwN0[B1I2KxlW'NuTrU6w`5~.m0P:r۽VV) 8MB9$U !¨+8_n#3ճ3W.;Ƥu/Rĵv"K/ i+oh^XLYue:϶>>U& ' 9X;CcLh3itAPg:3d1֌:~ ɀ'OA2x D\*͊pqY;06f x4?[zNv;蝄"th*>ܧ HWD,o_`~A/Vܗy4u2aQBr̞FF'?׀td%PϬ~nTie; c=fd- H`rPm=QX/w!Qh;{"ReЉeWk\Nn#9~N~ݖ;랂 1xjG;^q2-h{( fW|LLu`_ukAL*Ei`)]1}pZgy\gEaTRHSs'|j _sMM_>钦쪱Wm_'O2d΁ adl7_ڌ]m7-G\sb ka`.Gw.qȕ41Qxx^W+<sܫdC0i8SʂS"H\ma᳠v<c, :=!8d&%u>h1#OYVQt.S 觫8LE̖463bxXw@-k}M]Li<7$b 7]Y_{=Rsr P"dxéx)(IfAUl;ACm~;?Tۮz)$A&t8 Ko+d#T.;wPfDQ&j9zDVB N( O' &W  GZÁF!.F]ҫ8:?/=+W;{|q$=c7k@|5+M]aF&lL3fΨk?02620"_}nBK^B=7_vax|S3irdHsx:) (AnWJ.iO6!y;5 so C谚\=LĶh=!nzV m.t.ؘ1٠A\$3.NtyǍ؊rt]-Q =b^Mïa_~EH>v{7BFXlIZZR7\&Xe]x8{ 0 aoϤX79{ܩ*V*ޒ@$k\<cbDˮ1{QG.;H Emu6ly MdRn< /BE0>s􊈛%'2,ISc|79xlfg JSX(<\- 4^3B.0Yw+"z!}H~(\Rϙ0YD{R`il܇@Zp8 L'm-K4'A!6ێUWW%NKm?cDˉ. BD.x<]D H:Iw~|L+R +j~V6Gb^$d2C IXJZ d0y2<E0s+(xfšu(5CV>{јgg )mx]XQyHEe@*|\O-Db4u$QAwڗKI(M)"WSͅf. 89)|H6*Td2CzRoendstream endobj 502 0 obj << /Filter /FlateDecode /Length 625 >> stream x]=n@^ DimE (ri0Er';E!$3,r?ݺL[{~lcnϤ6ӷagm^h=:u6,mq-eܿ8ϟUx">T㩪OB<3U82NU81BlsU!bǂY}'"F(pr*#c*hUh^UUYU\X+PU#EBoX, EM#0`$7&`D0 Fa|H0o" M#0`$7qxdIdtd#3L@#q\#s::.밺N::4.S5s@P`@P`@P`@P`@P`@P`C{9О{L*8U`ǡ=qh=vspρs`ǡ=A`bǩ='Ioš& kʛ&)oқIoš& kʛ&)oқIoB%E'd"z < S54ij'o?-7݇x]\+P0Gendstream endobj 503 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4794 >> stream xuX XS׶>1䜣" Q (""A(2 ZԈ(U,j"0 mZw޽;۾/|9NZZE  K'J ҬQ,L'BBp]>|5&PB `]Դ &]CW\]]Ms،)&EvlRjZrlJH,&$ M8IQ[(aʢiҽ3|2}dD}?/: fil`\P!7&%ϴm&G'gfO: eJRfT5F-S9B͠ST(5 ,!©Ŕ l)/ʎ)ʁ%G9SP.?5 fSK1.5jTj<@ST%ޣ8ʐʡ(ʘDMPj=52Hy(V` H``ԢQ[FR יsR&V )2ZN1s]LǺEіSGcƔeZ0(]' ݺƍh\¸]zY Ћk{5^8>n| g'{g12(08gpOLpVOedJ| r8U4Dリd֥dot' 97Ѡ "=A[SHmS 57۞=&LMsETS&AKFbt+z]5 G7Vb MB9c/X\O+q3w=e2F1IssSv _89tfKIٹ$I( YY[ $[w *O' p4ŞسfŒ8a+Ml/s 1ܒ+Z,U^2*TsP1p"34Wj%!.S*uJʒG\ 8ɱ3%.You+z\cK/%Z÷ߔޝ$9X~``ygeGj2)2X,-5źg$SpZтX.0 Kⷞ(xCL@?ݹX]:^*tZ a~qRJ~R"@dc)>O+'s}Xǖx)?O54>#䷓T AgIf,‹3S7U-glrrXw')~tg (PBz9~B= x{zp2/Sztpl̠b$nmմ=MdPDZ姎{ˈ+سer(Za;+n}@ok~M1Q HS>!qo|nq$/y510!Y*Ͻ]p"\hM쑒l;d}x\2xThӦKf'n|J)Auζ4W,+ST (S.+ *8|shlheծ҇Xƀ-mdF: 9řg{"X c{ Kv޲E#56OAmBU$7d{??-ic|#o-~id=J2|*UɶU[Z<8z`+eM=gAXg_$yI`B~]ĐHG !9, ""[ݱ N^HS9T&(~ Iuߪlgb~z^8zJk?`qWH#ijv34Z46!/h&Ǽ_vD#Yw jom?ASR(}07?+&A5y )}r9b;jRåY J޴d;) 'F>?6~G?TuT-;bsPI>ZXس7*O??"?Gw\E__p0\՚=Rst5D HĆ9r Ǩ`o>vST|uђj@7d%c^s\r.<޿|vXp ~WW$M^X0jnQaG#Hw|!D RC*s NTE@ j3's.CNkq#`7Շ0dž+RG 磸œx;Ի'-kxKId?'VJ~V|[SfuT۵ds৩0t{Z>N^К9gv)m y>.R-iTJ%2jp,6Ŷ8B\WYiWs-ec,(q߱.Ǟb̈]!rj'aOn:D:YA_}]u3TxL۲' ^>m=>f%(B W_|X-jfx_װ??YBq[*k}mA}'!gXK3v,p9u)\Zys }w! mkS}b̯snrYv}Т3#9j>ybчƳsw_)7/ĪMg/0DMǑ0WH:ps!$nDn@!MХDM(lNvqXVmLR_c5?VJ%C`_ {*~hGAtN(qj`!V;x*a`^+6zE'rNfIDKdDI<|:V$U>C{U:MҤd6%/ ]s`6#uspkC~I’U?gġ`c%CjҾž+D,nyBԇ~VWmB@C2AD MQS6YDSUEo BV2+?=OhGjQ:sL{hOQ1 |IlW[]adjf6g-p ML/W.8U% zD|F23=#'$+ ?hKֱvè`.2Z5<5d-#CO<,hF=a {-K#Mg$鸠qm Fƽb}%xXy{"f->"L정Q> El\ϊ/="q=SZD +0z~8 0bجt;aSblA`ڄYq8p40!Agv7AޛsVfc WIAW#8[Lm4zB(D>c;xJ71pivi{;?02./.ܘDt۾uߧFƏk+nդ ߾.  v( 8m1lfMV$ِ+سAw`ҙ+92-yxV iwriU8ĭȴX ` UW/k:Mh]e63mW aVp{9~U2& r6)?M4 _xwY!2: ?ԣ郷߮_m'y'FTUTՊ}%rbn'.}ww$ڭn|ҟQ/0Fs="q`C,avV\W§-a}0i aVTԹ&v<wVJ=*U_.XymĂ䘏[> (de ,a~xeʯ%ѡ2p4Ã_}rn4R(:Lm(zB[+$ˊRocR7 X/xJxuӰRu;.!AY)'1{%"psߡn5l_Gº'`3/ ~>[1ܑWlwM_ϯ $)LtPb=/}t)K 11ok@Ow)\ 58b" /jy+ֳI?#F~Kp. _ԙmtG!7Bd$~OGs˥͓@,'Y F"~37&:}6LຢVK0 ;"\pˏAGnȜف!.zzL pSP5UaW@CշpX=zs+ -g`)8` 5חNZXDNqyiˬ;/6=!h(B#DŻτ US& ,s:#WMgm)M7rC[GObw%FXs?Fa`WnN`!pFT`!\;U\-.*nyr z9O[m%4ӇKU^> stream x]SN@+M?+@rva{Hncv&ǧe2vqmK?<\_sZkt{ i ~P~yͩiJS8Oߏj1gs:R)tO}1HbD =b&D]6IK&iu$m.YE1H!zW ;bދ DbS1H)\vSeL*+UfTYr.ieY!p_/ ;CΠ+ 93 ΐ3 ;Q 8,aqqaqq7};[A[w o*&((&((&((&((?\!T!7}ԍmu{?/7^VZ .ٷendstream endobj 505 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3752 >> stream xW{\M_Z%j[TD!r2 ]Pj{{w٦Dz !t.tuInf!w;Nq|[̼Ϫ1>~k=}/ߖPf&D"T_QE.40aͯ3 )0+*ź;ªb|HBYrI&Lth:etwvqqÍ|Pjޞ\+TmBmp+!FG)U }o¥ ( ] W)#xeBW8Q#4HAQxW=뵊%HЊVUWh]ڠ ^PEۓQ4$K"d)_ޠ)wFCLAW$a^EތDĉ|”j=oP$}|RUɾd)N{8Ry":LR{g~GYi*c﷚޷>4(>dyEpy]e_"Î j7C7x-L 1F,T,W._~* ii)jMRc(?j,GVRTH}IQ$*(OʋB-)oj!5ZDMfP>gj&LYQ֔JqDBBʌOI&ML`=dfJT&Hߥ1.Ljα'T b>h~EE zA-Wq(TRH"T8aKcWgo3 OpRT$3uZj9< Whi{G~[#ΕiC6'{c}waV*}wiJ2锂Z<9s+k&å]j/r\ jMv>p'o( wE,yOsB,zyZfDy.n[ b]x#5 ^UTMrP1$3AI:`4hSY8ˍAk|ơ,|1lgdM7*B/Y2)fܵP}\$ӿy/ k9 K]15# 6X?>V$àyoO`Yp/:4`Ѹfʜ c5RفHz/ t~Gœ#`hZrc_xM}=h|ew=:v,cT+7O7}SrN~ڲVTJS%ed~OaP,mzaT?5 s%AB~b^_+D<0ROyf5.@Kh`3ramwKʢkR5U "A_0ԡ%(܁x.1Cg76ijJ\jUbPRq,r&䠮60maX Au?ڷR;9eW+/l(l@ըbcfoRf?pC\ϝ [#<`%C4RFfoXr?}N[Lb}n\_]#btzwa.YLnsvš6(Y&,kc9E6Dz8x"č5ĨS `]-irz.G ?Mn!pYĴԬ_/( @}PD9giE|EB?(lYl ߴɾrK^ J+䙹4äK݊e 53[#@rJ] q%B=5pvɨWd42G&QKmȶL,Ew,z#/&0㗉Q'x8\9jJٹ)5Z.JdmNda])g{:hK1'+ MG`R;T<0,W}CW3dfasI+L:iF4)*c*%H 1{؉\xV-aC?x7҅SS`?\z;Le:X4y p|f]X ƊUvkFO 's~gv&dlA((fݹ5o!~g[aIBuvm^hRܞ*PLB8 tq7@<;\OWgMqx޾oO! iW[q&5|\svpVo寃>ݻa8û4c29xꈺRCLJƖrW?CO@Sғv&qg?+|ǁM VWȒ/T.A*"V:%Y`H{YR!*mե;4h6Y#{7/60oz]nnLKFc\bvډrxe/bCc.<誚%uբq%O!ݓK A1e-D NbW mS-jfJk+j+*N]8r d ÓNs6Wcs;b[*cBBJj:f<|Vl %l-̆D^@-ΣGjVpc2oGgȊdSf!= %'{}RuB]ԆZ Xi 7ؽqk> stream x]; D{N V4ӸH%,Ea@})RJΠlGDu:H֑B]@x HsMw {OԵxkQ[̞앨> stream xcd`ab`ddM,pI-Lu JM/I, 154kf!CwOXyyXzx8&}"O'wWfFFCHdM#ҢRҼ"TԼT=  PB  PEWϜӎ3~tD:}U ߫~_w@ٯr!?'χ }N^endstream endobj 508 0 obj << /Filter /FlateDecode /Length 480 >> stream x]nPw=}~lKdhQ}Y 4Dgۗd($tvO//|ow?i^ƭ>:/Ўp8=~mvOA>~Kmk?ԭ_^ksre_x:=~zux6#ޤO}`"hE=Z`֋Q$ؠ= L 50M\#1 2 ,lbAv-Mm,H[[i"b܋#+3c8qy]y]y]y]Kp@APAH !P@APAq*; n)UpN[v m*ShVB[J|S*]%*$+$*$+$*$+$*$+$*$+$*$+$*$+$VL-\:tx)km]Kwm[-endstream endobj 509 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4494 >> stream xuWTT׺>=*` ,$ eAzP",5T(UD5jM5=xwz뭳X 6% F" pi }&DauYW2( #!8x`Xcg*,&BT? Ø UY^:"&g]Vۘmv~6:9lQ8{\y,Z0c82KgLe\WfX03M%3qgV3X1\Ɔ1c>g1[fc30FŌdF1hF` 18f<3Vѣ:ψAy z328)gj62F[4B6x/nҡ]6cXְZQY9kF،HpʑON֯plRIrR* d;im^ʡXA(AIM5ȡĊ'sd5/~F`1 ^ d? m?'c2轳ӄތ}N'2j ^:9&1xt(7fǫ9̬w Kaw0/'oDU3mm;M%3x AgTQyq,}tm;XE"'B!:o&5=ϣE[m ,WKC$p$b3ׂd޸Ulmc2pWt;#$V8 zʣK/0 v2Fxp{qX>))~m@{![e(kk>vbbGK!(،s"Hധ>F zxC^>v!T)|.GO*\\.m<027iY{n }oPM@U-ѸUr0Š Q%tpן]q߷9HU.!Dt7Ydì Gc0?J S7sRRߗu=zmCS R)7Ax!.rJ>9e`&{“1Td*duFPVD g.wԕ;cEDD[+9,b:RJ!|}֝u숍ǡF~[=`F.b`s>WK)H㉄# |UҜ4s0}9KM{@wf+PLDGS)p1F%A&3uȹ.X"y+F(!Dix#x5˃ӞE)qv:=A9t(T]!GB$E/{[E%ĬCF\Y .d Ņ`n'͊(J2<>DQ'Z>3Qf\ݭq 2V4W d >FfD%O1 ]=~M)J&TTQYJRjbMy=Iى* |EHB[nWxq֞@O?| wDoF7ҎDsڕ*rF.KMI y4VLvW,j ^ x\s`O"3_ɝ;S('Xr<ř4=q7Ļ]1`[/JO$m7w`|^.ehQ>eֶfH@r_IȚ![~WHH{zb.: hB a2:`$#NL|hɖΏ"wĄ8!;6?Zjct_quJ6ǿ /dݟYKJݮ ܜ_C;҂3Ux.jC)9 `u=HIe6r·>(S?8)/>h'=5E^5-ߚzt2Q j6WPirGO*}iG\ {QٸDtuR->8C'pΤZR%jZsp]ę_/. S7 k[rQ&' \93dO0(ty,,y{}rҙ5!g*Nt7uRD^#<[ƻ!i{RKTլXV;}6՝]Z冀|xx*NS JHpLdFVX,jalqh!5l; {ۤ@Z uLQe ,*߱FA2QBV u3Gw#eQenX_oRli1ގG."}F  _Q0K_goi=BK*J5'S43khvPݙG[1-l'K$0=M,@~Ho_tڪ w:?V^t K zŽ)'ZпB SIv&faS`4$<0WiKJs{TbRn{a~2[pn&'qd3%]E3uStEuD[YW.@8GFKAGg1TՕJfSked$uG,'报b4lG1ftOn[5 [/nV@ja/1"Xn -+.(`ه[f) KT]_M'M,9گ)ة&>'@6Vy@tρSk;,V~p)8?'YEy5C ‰r!a^G0#<ؗ:¿Fkrj(u;5[?;N\Bvҁdlhu5%`D'Kˠ݉C(\c0Ʋb`@BBA)q|E8 &Kdk̎M`{[p)s,! —:xnۍM>lb07S:@Bwp]r `}]!8^Gs\~۫( 3(=XAC({&`a+]gN3d2 kO^od1pL+ a.@bu.ܹs =*^w&+cհ1o ?~{endstream endobj 510 0 obj << /Filter /FlateDecode /Length 652 >> stream x]=nP^ DidxݸH$E=*L \)R E`?,맗t?W ruþf;N9Mt?#Fisi>euZ^qV}9]?4eD6ujMA5Vo FSP5X:5ub7u:7uf=4ڛYMAрgOTL@#Ѐ3@4 84L@#Ѐ3@+&kFjk&kFjK94.SиDNC9EK94.SиDNC9EK9w.Ep.ZseuV\Y@EMH4!QPЄDAQ@EMH4!QPЄDAQ@EMH4!QP?D I-%)B?EHIBb!IH"$ S$!1~$$O'̒YB%E MJ%4)QROjG%p)`XOiG%o[EoZk[%o[EoZk[%o[EoZ\ Xp% <_Wwڗβ.i.|[ fgendstream endobj 511 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 7527 >> stream xy\SFU^Tg]u:"8p  a%CA8UmZ[u_xs}}I_"n~3`g`fwO`{<܇&(;ޖ!g>O9g7V o@Qxj̙sOǿX[̰( fe;n@)~jr`~?@;ڼjf{G-Ӫz p\&p ʠUCֈJօJsjk~4igxl9Qs}2ܧLXhhI-L {b1p &b"Dl!Cl%&G6b Aӈ b:XI Ujb&E%s[b.Gl >!FSb1XL !>#KapbaF sBH!F{ E&,%aB!L  ,1؆ 7;7fI&M&AN| O8 S" d1h`0!Mfϰ o037 tqsBבG~C/QgNcdrʲ֘acvy0vئ>҇?LgF0v6{qǹ8>l=zu lƕ 7QʫLF)Șp ce, bq~hPwE8)_jPBYP$-{3Ȳ|/ ,ZhY MpFaJEN8J?9k_hv 9Jɟw/poԦ0K@"~q,+f@Yj@Sc nG $D|  #ah@>+Yз ('Z(nC ǍYU/J!2aPqnI B1$/xӞ5Sp)t[Zh'dEp,)4}Xrn }%Zlψ'#3dr 4/_A3fy='WqlF(Wsw& M5F-)]dRfG\ʪ;RN@њ,7| G#s~)_g.Fy "%:>9PG߽iU P-2-qLh-Z ?nN4bO\^#S^ա?jw?388ɫМ]>jZnߜen #/^t⚹Fha6:vp<8Y2 eݒ~a]I88#jb|I~$!yA&6uEkbk kok`F{9 :B \ӧ?.PՍ?-Q1]6%8!:.q/" dCkʪ;)].JĜ@@᳓3r j,ϨdN{]8V>;lHY]Z 4ȚmrZ@-]~tNKrX\qGV!h,Z! 8B[CQS~*N]Rs8U p!M 12io *rY08GЗh7`w]@p~^ѥe1;ݦ(k'42F1^%ځ?S- '`GtCiخ.qǛ맰I}0AU=Ha%K@]FNt`[z1F?'YF @_32?$%| C9WɉL$nA cji_oA88ףPr>5PŘpQ j4姐5zB M1QΉT 7PUZ>ýg1]UTOj`I}jP AFEmeo|8Z6&0z YW68Ԧ,@}}g#%# g%YzU=pwe'h;2b*M{@XLe<]&z$ ZR[ tPփlEY|U&(0dO GO!~1="WO7v[i|←:b I;%F0$#*D$q M W'=tSWru^zF(0OA*p; UrZċ׀ 6;{XԂte:?S}&=7< .gI"D#'o<>YdUJ][Қ3Zw2'4\` ]uc)3'WM.nbZ((x? C|]lCL-tSdyj!+A=-CC41YS%H ,Ң3A=ȬN˽ -^I=?}/;0F7GKFC䎲P;pXAOHoҋuyjl^` 4#2 (@%R'ToT.͛ VnN70Vlk2u* S ~!+~ (h.O ,\'kwNow4]0CR%5~B:A+DC.5H?q*4@%)Va9U_WP W0 d'd!׃ o`;YZZ!eѰi1m G1O+٥КFdˇ7˨rw`l Ev.Te"h7,:Hy@\s",xep;=L]W>hs VBjgXǝ\K9B^IԴ(M`'h,=Kz&UT&+TIu~o(8=)Lbn ls4AHp%vp0mwY3ސ/ٮ+p᥍WN]ۮkv_ |F5mL`w/[*dA / T'ٟd Ԝ_.7f%)<Q@* FGRy yP/w~hTFT|Ձ2e>%ŕ,ES Nv\LTS@Eb*%?g|>%ߢ ZsnwJPRD cq6b_JoI/k.c| ~ 96sf)^%n_+k?Q?e^#2;(&qet"0P, VT2}go7-q~p m~N:xfE<S'O^iLQJaoA1J_PHQqcCj0;<#{Fd'ݐbd,wq*1kzAAYy _Ml?%JAXAu x/Jёmyv (z:K#\ ݾTѭvr/[,ك'o?{FmZd U7sR-2 ]qӎF4edVZ.Zd]{ <ب5b"_{g]A&H츬x,s LKCm%{\rqS'8ZS̹o[:m& ) o|rӄs4(̌OE~QmyTmzuJj,3A//ldXJ岰X-6AH +f3b DJu 8YIbmǴ,-(,mS8pU ~,=x$MGf_'T43VߦPp:Ip2WfY2z"Vto,Od poi-d9若 4\#AfbfJ*EqbeRU⒂ = Ń y N6T<9xԈZ22T*5 wH J^^4e(`]zhڶNM},ٶewy繙Wh5ҸkdayBeůC jlih-M_G{k" onG#Sğ`{  M!5m94h~?ݾ}} ֭5\Cu/9zUJQCstl?NsܣTAƒ&d7] B=ET(Ϸ&%c~o R.\ ^H /`S=rIG(Q*WkafyiuQ}2#!-:~[V9ڻ(9+Rw /)>FJ1MGASo6% )*P(K&ljJKO^ @ee[8 o^1K_|q+tlujxǵ_t+ cXҲ뜖y-܎) -TͅL@\uIqOͻPn>A7&*%}n_R?q+U6`TE4Bu6sLM_ _!h V_}Aoن-ߺpG@sh+fl[Vt{:w^aBFyW/}Z&;1雟LE ȋT82yY]*)z[~3p<}0w'!x'iL.=*iAZzZ:(򊈊4w$X8ۙ_ӛ6Xh߾ּu[)I%nP8.wΕHS'jQYɼbXO2H?,}@oJ <QݣH4ZQޘV}(/u h)\C_A*>s&h߉]z xW@j~;룅qp9 .=AtƷE'(?dey/~F0d+a6P"ˑmeNX}IԺS~:QxqXntU'U8*L ^7]ϋ;{٭\vك_b`Oz$2I@aZQVQs1mҲ9م9dà\&'LTWk/*DԝI**fw'Kx؈Gefplk33Ae$O |[2&H-4_ _H~bha4}<@sUH~\Q2]ғw՟Awlڹmּ HgLŧV=viv?5ڛLųɾ0G5](L8 ?2d :WYWq,L\ Z (ϛ2ۏySKֻZms#V7]EtyvȜCj bđ18)jWda bxQWd)kPa¥r4Oƒh : 2< =]>@=73'Z^Tw9 d;pLSvɆtl&rRx[mF+iWuھ P5Ja19܊Y~ fn 20 4U:sȐ ujzP 5Cendstream endobj 512 0 obj << /Filter /FlateDecode /Length 361 >> stream x]n@D{?kKhq(J8" ¸gvlH1'=۷3sxz9M?Ӗԯ:֘s~ۃxKd[~i[wIG+Qy>].Sֆ`0XW~<<~Z%B;tX,+cmvT wFF5pT㣚QP)%JcqDTdopO7Q+`o*MtO(,^P_YA"zE|e +(++WPWVPQ}|[ۺiq|)2/~+_㹷endstream endobj 513 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3412 >> stream xeWyTS׺?p*7smOVE}>< I   aH@DEڪdm;ѮZo}~cvs0 W:*X& ~,ƙw0q*VYU{. `_`+v&K"Tu7+E ZIQaĘx($IKRÃ"E3LR OsQDH*I.YM0"xJI MNk}F l9`0_]A;9ck>s[1/l! 0Gl 1;Ex9s9d#]v=9鼹o׹5ϻ?9egFÎgZ pD+xzD ap+&  DeY["1tw枇ZA1b1:Bp &K^rZW"d7BUh0f#j> GjRpO"W4еS*JR%KHE~ 1z^1N\kswyY^V͇d]f{y(8.)!M옓*By#-i3/4MdhB}wS'^k\싙<)=>dyEq^HKɔ+jblt6A6Xx\2KHibP\_$-ܝM"ꢦgaud<8?2n]sLLQ h @Ke:]CrwNAB!~ހ-;>)o@|OGA==c'!YQw+\gb>:!9+%#{MCpQgz{?⻠jv3טi'Q-fil9Q>'ќ/ yd@]||E%{US ۅй~`B =QMH`:P^p7PN|\CÏ0 } S|q-h,;) ĒFmM-&`)#Xmexapq}*z͕5uloBGw v~b|y8#yΙf+X)%ԼgYJIQj*##_IPX*C>4p = ?/:xی>G Ep~uǕ͖rlt^=ŁpV`)hjm%|E@yɷOHDL-IOQ@} WIalNކ28=&:PW[_)^g:uP!Qm/gWwi~wD/f߹$o-/);UA04/oݻәU /y(I/}8m.'&ƪD (t$"8P`MEA}SI <^@b/>N>(I8}d~oF8dLΓ hv$%&kɉL͎3V] vDю5 MJߖq 9 zG/8p,Ư_dKJ-HpoO73r"ۡ Gldo[5COt*!#-fh3́VdkTaNhg4C}t0 *yC2Sjzf* KtdʙnW%zN#KK75R¸^mB٣):EK?c:T~ 0V&)^ \ɭ_A{H|p7H_R2 tX)8ǐ[ |uCۗ ֊CZǞ߿$ONt_ĖG t끁U4|mhޟM zPi#:ۖ}זffP]BPZ޿ $87h.ϗFiki4-MRPbv4-Zwv[yr3 8kJ.O͎a)bm2eu'+U%^J;u)m=@ ۊ.^}h>ϼ#;ro/ZJhJ0U[tCBf6V!bt58@Te֖֖&0 )+Op#Z*Р vvOR\i,)8SX.KasƐ2=l-_-g|j6MRʡq6<] HL7՟o`l?Y_Tƚl9xOS6ͮfu8C8Ư6wyl] 7FL@'DYV-P¢l.RMYWkzSr]tU 8\e]krö87yg+6řMXS4fG̋4p /^^Hx$Zro#$~|2Uz[3HpiDG. 9zGx|g&4to@:G:W|a핺ziXq=>0oP ƒו8KI^Mާp'lW8̔@op92"0MMntUL ; nmc\[=,1pgf |+nL!&츏 J h@\[zC,IVb'>gq.gXv'0 Эr{nyendstream endobj 514 0 obj << /Filter /FlateDecode /Length 162 >> stream x]O10 iT]BRǩ2ԉt4ip'w'ew\%E cisDǢ8LTGn:?`1]I>SYUk)hy (6ֶI[>J-~p8I.~r /2 S7endstream endobj 515 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 342 >> stream xcd`ab`dd˷ JM/I,f!CɟL<<,/={ #cxZns~AeQfzF.THTpSJL//THKQS/ f*h)$f$))F(+k9 -,/I-KI+)6d```Tg`b`bdd˾*gsE;W+he+鬪,hf.+)KIKh/\0Cb۔{uϕ޻={tOkywۙ}=lgrqpn=gNd z&r^endstream endobj 516 0 obj << /Filter /FlateDecode /Length 613 >> stream x]n@D{}@aq H2ThgfdHq D,e>߆2tK|,S~[_ w4]:N}׾o6m:UU~p|umO] iiqlđ4Ʃi'c { vS Bcol6x"ld6𚘍^ټi11ij5\MF_k3  r&Adv𺘝^bv2;x]Nfu1;.f'dv @  ZphՂ@-C A~H!)!B?Ts9pB)x! s0Lq꜓LA&!)$d0L d2qƩsNs7ŜdN𦘓̉{ɻO)$ ZHI% ZHK & Z(Pp-} %ߢo[-|גoѷZ-\KE߂kɷ[p-} %_> stream xytWa; $3Bo$)bM6Eƶ$KVj_U˲dKb01$$N,n;eᅭ;;9?p8G3wϘc~±c6/j^z*:Ä1^ :6n8 r`@qbkj5".i"M#:)HZ=_.4R'Z ̿p,6j@N r׃V a<H 𺡀_ts=~8g.IH%ZZK'Fo;P-e'b3@<8 $f'˷.R.SUg‘"D+"jOSB8E{axF NH߀n Mdi? (`R  M 5zd{Hv#77w_'Yjmg6nJxE0/[#xwg{xO7ԕ}HNPe_Oxd 3$MWc8~_ hfzѥh7/L8t6zS0$\3%n3rY[7_8xeh&~-j9t+e ]h? G#OMyGS sHġS$IZuHpDW{zq~0rqn8 Zq7~vsmty6ܨ ] ?$r|kt4hk|%NJCV3;)R̓1p/e<脓vC~K9/p* bV-Q#7*! 8rGIxxT6ip0NDՠM{H8Np'\CSqB|z Grw$qo/4Ey%R8db,&֧D B7t82Qwypws-C\4`ٻ 8ẘMF̥<Rʒ-]EE\2_S`5Kˋ-V @#WT\\'(pm[ˊ5V X#xH_2Vj.<6tRx"/0{~û-9V4'ևjZ:јuw6B'Ѐ|Yu2Lc~4V g:[Np8B*U (Ϯ*kuyN}f~_u̾ D.r,Ҧ'm[kvsX(XڅAKy qʺnۏ<=B CJ@ K%4jGi&͎,:P/n}Ys)<)AO  *M& )&E}|ኡ}8Ny'9?^\GShh 3B֮Ԋ;WCց\3:'ViryPLBgCy5k6P֚N&apc{\퉈Ldmysɉ# 7y^b,@.\eZM!P >&3M|TMM#`ц!wRbgF!S~ fL/4`.4kJ]FČ{EڜMt68jKj+;co<"  GhP;ԇ$poCz4=pzl+|PIHh̹Ie %FCeJ:=6Y]gc;vLߎx"Y:J]*)TK YL@c=c_w.9?'/ tWF|s@{V6j:HD@ #J-Z CuUJ$0s_4U,ԊpъPgͅeL&\oT%$AXm ĺԼ PET L#bzyoGht83NkM'j*ĉlpQbf*ihTkYz 7_C%/ XTEvEz@koێu-tklP>xYBWa&< l= D|`1Zէ%8\P%1P=ʎ).Ӝ{K'g47XK|Up>hA_%5+ O}QVn૧ox]}ώOtz+ CsG򖢎 *QQ^bKw`vsrrt&v|7f]M:Ze4Ӣ+@iՔVkJy O  '/D.uY9j^G%4"+Wen*AU(**k2Ch,b6WF$Gρ&N,71գOj7)@V&l$KbBuQW+o=(Y}oS,L٬k& ohc4 &8 Fڷ)eZ!Alx*z/O1hX)Z?3˝NEikV"0ZtJ,Yq:/a0ųeg{/ˆL/u?곆-oG 0l[7`$.Xʜ>b4(mnWAe4[&PJ5eإ'>8qvw:C)ii( ٯf@nݭdV~k˼isD3@?*z{<3tStR 6"Š’J哚ˮ#=7ܾaͬK-t͇'*sJtyzf*j o;O]pH aLgf*˚g 3.z\a˷]| Pө g< Tl̴'68'O1%yu鉜9`o_}XL9ZPID̀(4_kT"+c0:L֋{ņ!p߽{P慏7.`E6#hx"snzJ;7CsD_y*`6yZ!WUQ_' CL\nd\׫WY}. e֦~fq'FU:g]ߎqN<GnKAގ%{n\9x3Kׄ{wdf w@_Rݎ`˜85 Tfk 2ƄIx6H;dM8Ѭgv>ȅ~̥FM3W?_C)Z2 NZ\GkDej$??G=~S[0 Eoڹe;E<}-G4ZP͠%oĵ1A Tu_XϞadyw+,g*c ,@a].lZy$!5j AY~*8CD5D=JkYCA4HK,sт@J פ"`^(k_,&f3+=cT6F8Y%`T=(m=r9` 9i&$[n-8Al{^ǃp2[]vl.F*@||;(f2}RRiEČ5u&N%mKCD804+"eoZT4 &Z=BgiReVwQB? G OlŒV |Mg'Ć`M䳳c/V L*E I)\Õ:yz_v{B,"qoBBf}@Q)Ui:A~V>VHfח5'<Ýku†\ī$Y,"wD.QL.+CކKsq/BA;6y] TϪ#lHDoa6gn r쿸TjPAy}ÊXG^|vÄnGdSVȻ~7kvMi@[L )OI(a_o߿ͬvn}}i9+0w{ p{pWKLF.^-ѪZ$RL&G;NB<_HӲ ?7ꎼ$[Dq&ϱYiǥrLKO}A(h,CRn3,6m? @#pjmKN& }<*.)ZP#> nΗ` xo`bb&+> 7p!;FUը:GTURWj2Rg/ur[^^a`J\Edq=&1v\q.yg~Atǯx$WχUȁRYw M6{tנ B_w_C W^>{Oڊl' f~b'~zh{Wqf%ٷ#'!R,uǀ ݑ乚 <49P,-I*I_A-NYm;˱8EDYxh n+TkL߄p.{Ӟ?ص?;<3 &EU+~XX3u4d4לQ"2SeU5O5výnBM960:íen{wيy֌7tnb9N3lyC#g=ay-U) U魇ZѯK^1*gs?zw9x-/֘ Z'6UV~H赹-(vM[PL`Itz{g79߱R?l=$186T?&8X4מǤ"ًI!zBdinr ]p2_rJJ$ E6iDF:Ke!3"]cK&=g(=d``RPl v`O]8l8A_ Uxendstream endobj 518 0 obj << /Filter /FlateDecode /Length 441 >> stream x]n0D{}Iƀ&iR$8d TDgf\b]YLJe?ۥk~qk^qo k֗ϵM7<ߜi+Cm۰B9MS2+[y`E +]`hE=EhE="VV$QUYQUYQUY"h*U)HỈ ]:'vNh*U>)HNp2x33 3!T$Xd4A! 62nd51- 6bOӾ}͋8ȐՔטh4BxMFf$L0NÀo`FTXawEpFp5:i\.H't\O^`>׏mkUE`^'^VVPvendstream endobj 519 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4080 >> stream xW TS׺>L'ʼn0h{^*VZ0 !Axv!A!LZ^֥`Mm}նzܵ> cd휝}@8;3ءT(',]R&|7?ȿP<_fܜ/jlHё>E֥;T&/#}(>|lؽgwwYOK S('$nnWKwE-pW/ Iռ_^ ^$!vw=^"G,"&KbDl&+*b;xIL!%܈ibO9 `p%`g"sXcz:gwVM.l2A j]\?2nO4鴞i?Ny128k,nmyc:_g-ٕc9> W^y*0D.S\ 4@g2@*ZPB5-=kU:Dy˚:|E[A1r$?U.^?FFd#ߍxҽ|y[W1PAoo4AЛʰ9JY r,}Âz#;2·HUoVUl#_:s"n"cD*հp!YwA~du4 #N|T!\/@4z+ :=xi6m=xo>v|'[zF`> { ] "_ΣO.d .@X8GdZd RCLABlmz)^@V8 Ox =i/>]@?gá(WeU6jX2a60H-@f|=Փ(O9cŶ[`D>:6Ō. FʟU\qfwg"ǒ])e|H_(`#͜BZɄ KH}$w0Pt@|zS3cVY=]|('ȳ>x PO>m 0oH'md׳1sAsD.KHj@ (6ZJqv ۚQ~%09ur@rJ׀*|AiU'<a'~? 0.>Jfp b+Eou\_#Uv3gbB)/>xϱNJ%F5Ң c&قH봊M\s3E,L ~SVA%yinwQ\ҁX83"^'JcpZ1cElb>ku?37a Z1t nC6ATQkgv.MS6]K6.PhNP T@FũHK׭Уx"%?ZGL &iDbʧоTaK# } =ѽ?kBgA=JL[9=Q׀BJ^rVTf/EV &yLxG&k[ ÿkuIw3"dO5 @Ki+~^# }Гmy/=閔n5c7{੼/ L\ *`Ѥp\oA/#1+/1I~_6oQlPG3ь_?dWbCV_xp)b%=و?'zo"2^IR BgF$VHsybq SRa[pP-{{u7=7&wq`F]U}Pvelf.(]`.mn1u2pPk]OC6 ^Ԟn˘yc^i>vĀ|k*AzOfdpPf6͚Jtw׌"7lc*D0u[>[A^"^'k@3h3cA8E[@9ݚbԵ7X =b_>.0+1M8E\! ~Ex < oܵi_ⶸ8ytc\{{cc] #.yxh>fYal(Q_X @rLrXdo%%|)V'AX1p3t~fg)Ľg$RI.+Hn }cc䍫"/9ނ0(zֵ&CS NIДI[|*.S ]ZͼL`Gr;9vyN{)` 'YHTHL\;n'9Eq㡇<[ܡ*1P%:Q]*õQ &%(@lfe9r[̹wd([C=X·D;== R8U.05R-ߕlWk]IT%;a'b.¾[k><;.S]u,/GKXxeJ.̒(T&tH7ܾć@ԦNTRl%uT ms=aa\x&SҲK@S :Hit ;3jK.^}O9SA)PLBBIj~}CdWv璾I{P&5HFf^F~R6Tڎ' c"'rq`j%J rBs'7=ݓ.jFFJ;]:;ъQ>Nvr|M+l^ ;,)2hw @c~oP([wғ%XINYZ =F9Zw4;FRP6p C(>> &Q?4Z3mOn/T2wt}.{>P [Fq! BD S #-\wЩkAj5zwS*yGe 2%?K&_oăR2&\Y-;hBA=/5 ()DKP$eĠ.<5^U/uM F6hS feDoV^ojo76aZ 4`8p.T_Pdua;)%aϬ(CaWjT 㙕:֣5gl9ט+p. (ene8$d#z'n TUR LTyncI*CSNѺ{QXNVoT7**H딑J7׳Ez\tmP/2}4_endstream endobj 520 0 obj << /Filter /FlateDecode /Length 161 >> stream x]O10 )KY:8U:Q$m$.GOJ`H_"it,i*㤃U'dutTuլ!树DTZ b'mݜ,P*sJM%FT&c=|()_,;S)endstream endobj 521 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 302 >> stream xcd`ab`dd)14uIf!C?XyyX~'=F{$0FJʢ#c]] iTध_^竧_TSHJHISOSIP v Vp Cs^XWRlb} ߏ?˾3]> stream x=kȑ8!l,hdly!@ ł#qfcLJ7/߸n)SC#II,\=c&{}'y3O^_e) LzU,r3MTV 6볿!UߥZjIxzq`,.f{d# !?}ǃeanM>i:3.m3c֭盤l-&@&O.uQglnʺnjz-A4"~7exv:|Vd{]l=dm3@GR=yDjYr\B9YZ+ۂdR?4c*)ni*B<0MfYl _@jy]6̩.7/QQO{!-tCNdy2.urX/&΄ 1v&:SML%n{ 4o, ԋ*, p19a +IXMM% OҷEx^msrY4۲=އ6:5ݠ%E\OȋL KidhRfDhS+eq,l'¿',ÃHl+X.WqD  *X`"C'r:KeIe7u e{]A:10 a Le~J`7@W|l6@6$Qc e h~_]!mR3M1U(E|8Z#GEӣH=|C eI~Xˋ]ݖcl 'ZT> S%lo0@(*?17`b36![A9=wwc}zHZ S \tݲf2!i+5פ0z#V/Ȣ8<ĊG"8:1f?zw 7ܹ{|\&}զT!ߘ'ͶͷLTh{rY+;WGT/_ͯNj>&I4ʛZh|9ORjFV&E[{;aD't`{5cAþ&EŊep-hM] 0 Ee"43gn#Z!nrC;=4&"nyܩ]SFmCM[})&=(mKn 3%r;1ܚ\փ6D.8?yP,;`QXUу:ܭ;F-W}CO=\=%P v^m!AlGћ{w?PgFz*j~8~l4m:%Xo׫qoC=uÉi 5 '*{>}>~`r 4|{0Gd CbqC؎7XQ)YL!]c)O$Kaq??eO3ܗCx4<>A_``pJa֧Yefty/\|=n2ƞTংˏ\G ΂ך'p KKUˑ1emㅡK7`\(m&DFe%XEU*l)''jtG<Tqr/˜ ̉hip m*Q*+nCCW9`u5EyrS֗zj/j+ISB ]Kg e6iW{iq 8o[/g;'P18J smx{lYJl/b&RtG8̌g כu&(ش͓!:}8(8W(_f{/"p}oo Z%q j}AXBBe/!-sW앟Nނ^LYY춡(2T#Ѡri % *e0ʩjYP-og!JnZظ"DݕWR%aZ9 AGYIAx)ʀL|E8uy&}3X]Hkܟu5 T>(+oybƃ+}ϖg~Qp30` }Fͱ9gĨ;qR/@Da@Pao'܆Ͱd# ,Bp|e2,){@{4аWkeʶ7Fo;čhi<˗Ǡ-0bo~Lbc>1)\<Wb<̂iU$䇑 >00yBF;3S1})w:[~.=\ /oBF1j] @_e;;9HN m ;Y wg_j}2 (jmvtJ<񧯺`C溫`6F"sEqiC[VnN\k9o?R}(AYO)8DhÜtVz5]=:-58w.6)]4/[%؊{=pRtGO0},,Bf EHզ&Ѝq\Qv m)QS̪X̥WYq BM05Dd]͒ZHib-\kt^6pr̠{|w~$f7P2!xF˞ Ir/=>-.ArjNf0YOHJ :^(ɋ@6hm.uʂ 9ytd RG~*!,aO+%v}ydT.+w$VUePy?L]BR7~\Jo4ha6w ޖ24Kτtĥ4޲)2 *!a]\-t8喊+&GnG[T`0XPkQt{qp'asIoۙYrs[]fڻǸ7K21u&,+OW[͝)>ռ܆|dm\ _Z lC^3B tֻWm!2 Rѝweƪ~^B6ɠ;^3Ѓn&;1\!qeor8pysR=cÕRb=lƻ#RޑbP@d<_5YDE,|9xM>v;ప֋cIdx=!+ <7:l`*'am*r9Buex: lɏ|~W6DGV0ANb g=E/0/|~*z$ `S M5dKg#\wϒj{EG_ĈDcw9Uu {22~zۺ0b1ģwr +8^|w"wO]bɫcf ay6&Mw=(UZ buJ֛oB1 .xVϛO{V -=ɑb[8kڦ#l}vF0tnp0]QW_^TxAf.MOH`#z X5J j.5]GJ3@!p0aN9)UOmlg X8K ewyߺX{.uc6(  )n+& .:;u<߹#1Hc@1pu Gr۟=`wHm#8>DGSk;qjαK2.v<3WȨ L09d9;zclGSXl\Y&{*3Cs=‹m<lb&a 4,jlf08لlv{Ӽ|bXČZ(gz?n7ܕ /~E'*PK~*.y2 0QH)օ:wSEYyendstream endobj 523 0 obj << /Filter /FlateDecode /Length 5999 >> stream x=rƒڏ`9[ȑ 3IT*qT-)HH$:8sfh`QQA69〘#d>zu~pFJLIsё",.:$Yf&E}txLJΓ(6OVGr,lqx7ߕo9IPfrYJԈr\Db Kya@FDBYkFH&hJrZ>z\Ș&׏v֒ yG)#)`8,KT,ɀyvvTE^@RL\Z+| *%S1mS †OALNOZϋj6k1Y-cbe2LF`Px" ߃Y$y>!{"ɉ{LIr 8 l7ߞ0`5`t@yY&SB=kFŶ\MZ&u~l5^TJ^gb bMC5;oζVLɳk%i٧9Hz1B-0}2T+yub-XCV'|tMzv]UyJDĆ ȋ Gv, 9O `ịr}3[hvI%=CyցwTT²Ma׉v`cCd*s#,x4e 5;` I`X[~LhS4Our?Fl^.)r\ c,OGHSʆmVj*^ϥHigEJ=^/8?Eo ̢13BT(ir=b`d8=WC0L}qaݲZt LFa)⇕x~BfÄ( "I"*cᐜBp'\^SBobj]|PM|š_ΦΏ_#v}ntfdLSI'#(S00`67EJW x+_H?OFL93Fz6R2UJEO(.Z~E1mCXL{df%41öF]eĠ2]fd mQ .-ӳȺh;D4̆ ےY*EIlb iD-!Ƕe2;,<͕RfC}l #2e,^~ñ#."Knķ;Dcj@1p.AhDa*Ba&X)W75Ag=1IIJ|DTH'FuƘZۙePbdx7i /?KMb\Cx0/7?eɺ\;Z ǢN;d%g$ʹZRkssK{GT u)mHP[ ._䪭JM\~6?ҦkK? N8O9C1j>ri|xs,#WO~`iXe∓:Z'WY9E4Y-[ (3[pSr ٗ nٔXϨpiQ]K?I;Fw%W}ޗ%ӢTbgN%}'I'{fCY<%)X@9اD&kSK bI,VV+CdCT)ُA'NOyUp/Ïierʿӫ^yL{@D{ޢ )U/' "=F}˙@l"y0B]9=IV9W)7,Cx1{)kp%Im/qp`ʼnp Tt P=[T{" $5bd&_ ̤UoLC{+|(.Nre%pu&,CQ>!m"'"|"_d >c ߱_@a9fq!uhgiB&yC@gBa' #} !.'!l݅1w#c>.,?V}h~G(VM% j$P}y?5pݛ@{W6Cxy5V}0,h4ބ\dCn0[NO*?.6ɓz}}{;`!%,Tyr7fy3LJu9[clU&/ʛ2,ئH.Iahqt@qddB;-|'ʯ)y_vvS,p ƴ}{W-gScoUTHL_P*Yv)Dti Lirˀ%@EFU1++/*M &l `GС^m3'ތgV{S(n+ #%lH儎f ]Z4Ua0vHA}eyyGm̲ۼo2eHvUL4Dc.g_sETL$^ݝXL˸,tyzajQ>;l+4hJjaZC,B/ gm}7E姹w{;m+QtӰ)n he;EL,1 "jɃPpG[GgMsM!]Hv]?!W=MZ\+W 9j m'ϟ?olqE&E.rR$;j`.A ѧ#@ǐ2gmG?I`4];[|?"zL]ќTcʡODa֚8 asX 5&yH9W벚>yӲ^M=). dyq8!OpQ#-]d=5C?"iSKt鮥l;j*|1wihGׇ4KXe-}n?}zf[v,@Iv  nyi4Y+mI/0ѻ lwi,-P-Nur 0ljNWp0B6DŽi0_o[3pvD650[C=:OC^-־ɒҿVmq^,]dVx}wl[qF28\Gtfhc]CT[l{4s{݈/7-ELRWjl #,Y,W.&+@F9eJ7Ţ%ҟ 4Z5Ç,WDr9Am[Uy^wfu]T[?CX)椟Y/ь1:3jKǿp%6/jp)J{;"36q mӔ(}摽Vhm ݇gkZϗz~UT]r4؁ngM]V@ aVYmVJ\LNm A3 Ѷ8_]T|}Xܿ!輻4]py^2@YNs.zpTR?1^&v5#U`7v<ܟ*6 NP+["{;l/u-5^WE^|CS~Fpݲz>pX q ,WUDآJ'غ%#O'uSsR,}T(e1;4NXۉjUHx,׮ b5 /@UN_=딥gC컭,}:񞹧 O%#ipAW]"`9r@kF/ fQ\fYlZ !R$>*`|zvC&Erh߷U`G6Z._-e_͇.iAE"pӭ"}?VB>` W!0] BL6W`SFن={3c@pT[U_VG EG[un]2 iVb.-"p{fla(qs;+݌{v_~xh[w!̑ Js{ŵH)r"IΚsSK4^Ks~h˦5|ϰV?7=ڒ˔KdQӣRHҖgjO-_!f&goȏxVED7w?u?F౫78Κޏ,85̑)4fj`;C0M+$}w]ڵ%pSFlj[%߂%6sWX2x [Ƚ6iox̟AcF՚V2+ԝ*ʮs'N*?LC3f)SfJ ,MtnM ϒoAl V6J3/XH(|Z`=1eV <ʭż-v-@bG!3Sݏ4  TV)ܖ?AOUŸ.--u9puԁ }]xiCjgUE[[i*m#X$hjCn$]%r2K$%#7ŪshBe0I_>R|a>ét#,uɿwd: ޤ/2q< Qtם,'CTZg6'n@Pj rA!Ԟۮ.BjPo$4F~"=wgN[+)y>Mh d9fXU<+Dr44)'H%!:`[,80-Q_|vJ$vzWn`p[A5?]$1J݉܅Q$ IVK!.h'd-D@j'>Hd?F{endstream endobj 524 0 obj << /Filter /FlateDecode /Length 7420 >> stream x=ksƑ_S*զ^D,ƛ[ljwsN*u$huw?~ 0HZ$[eg_2 e $J/N/  5W(G 3)yKu«2Mqq{׋IoOImDX)iKĠ,P&RÀJ$ q7̞DBci޵w6$&!g[gq(l>&>Bu3,( $$puMyj2poQWS^erD |j]mǻ"}+Gn JYCB6*Iワ6MSd*SOv^MW-0-ސ, H~ n q*}Iu a1Lâ-,5 J5Xf$LA0Bl g Iy`vzCEi0ʻ^Md<½5 0m+%m^ԛaȂ|AY =Iz")Re18WI=I{&*JLY~҄;S)}pc,Lűx+ۡ(9haF AYb_3(kB-4Ҏa@^qэוF^=(ޅ+'Ҁl ^/6E1j}{ t1Ntx=&yPg}ˮ 1 ɉ&$h;ۼ^4="xDjԗcx31Q.xqtBvGl(@RHfrI8Kpx0N.秝"Ghm@2\ə8+CM>(bM|Wp}jV0ښ Wsb82qCeඍ`W'vQG^1.v;NfH\ rRlCa ɶJ;-32w >sL!;=;~mc~h<(2>0G\'EFvu` nj:NLǓG4 va9Z,S_.gϹ׳ δ=,g^~noϵ 9rމ4I(ct#=#{ {Ti:gG5lh[bq:8^fr?'A=tDG2֜Hωgb7(lx]OM$%O9C֡J40ՙKTTgE_P&SR=AU𗦰%)̾Ski&ci_5#V6a"q-rD$ebnPம}nVڧ) &Pf'Yh1Pb&s/) @М ٴQ|-;SB An;Ǚ)4MWl )-u>(W]qW4nAKMC#%*k=ÈDbpE"F6ޙ#MĚOeMz-OwM3Mᩏ^ |_~䠋B [TsG 2Sܮ犭*-XKLH`a D(>X+(spQ $'A0ථ$`r]W;g&50zD 2&DŜbĦDgtzJY~hm4~B"  XI wAdO.` u;EDƓ`g͝CuM WSBqzzS""XE*Iq|lP(Po85T}F,=I`k~Jk:8{I |zǵH" }Y}ca1Fx|ʠC|'J> I >S ( umQ;N<]60"[8ݟ ftDmW|s vj%ŧY~޴g?\B*m$"{ ~˩{ {my{ }5+lv&Iek< raqT 5 tp's0(#_= $];;.6 Dh3B' bW P ʀsDgC㣧w\\ aMw^myhcd7r~I|+Ĺ |'۽CU&#;:WW`%'apiG(ljf{*C61^6 |/ʡ`gj|RS6\)Ұ*1~:S#ף,SƉl3$ EfχJYl>R~;DES {#_#zUA9/V]9˫GM\)feK֙Wx=n *[~Т(yXWɞ7+<~bQ4u}V[EL6%j `mW[t76o6fiHtNL[o s:!QrTqs,:b~=LA/py`dxVcO(lLEiV|(+W Cd6gi=kCkkc3t_r*!+!sQ*)X؞PU_PR);W"ČYծ~s),_A>5Ve'E(Xl*E qQ:>; i*R>Qpp21 9> ʿaD(!wE3@f\[!<:rV[+6:(F7뺤iNV :IZZ8Yl H/sZmc4-O=Z R3=,bʣ2vc)Nu"K{#!g?{[@>~#3LGW3EQIj0go>n}0laz ( D>=HU n]7i#)5"gSЭ$M'ځt)oE)5a"~㨾R_ cI+L}>BkX"OvC2 2 Kv- >ɛ=Y$g0e?^b` >C~7h b%;ָiObg/\9Gx=5߻i` mqR(:(ݪ0Y<ڴ٥؊BFM̔RqJf\ 5BC욏Cgpg#ÆS "P"%S2ʕm"m!! 4&;977U'R5ڲIO=©h)nIV9F Ĥ}z~7|)> \  =W'69I:xlEPeQ0g5bk+q> >l bijd֤gcǭ^Wcb˱a"*M ]߇Jk !@>L ~'HaM4(ZWMmkpE٢$Ehq7{@h 9y%< j |N=hzSUi WJi OyÕs *DZk%•"?tN|4`nD}MpoD)]My'Q˖ x ۢXzUTRdRBOjN1G6iSXԲg'KRw O_v#n'3._%QVXrs&8rYx)IPi~ONmh봅-(&ÑݢlC0jFɲisaɞnzൠs> ~[ܔ#r; I;ܱ $+f8b!Ļ07rRx' ;r׭64luAix ćp&oaxI/& ֧{Xax ^.+{ozյ9mB5 >S`eZS{>FH^%#04&euSjaۆkPg3lsƋcN{oj6GIIL[tIPƽ+9.\4Uc+heYN- er;C 4}@è|p~.MlOt :ݕeG^F%臵 `0fC}]mh (#*`\_;ɳ9@AmiAKMYQ{‡-/ʈ_H {\L *Ǔ0NU|[` 76Ud|M&,ōy*\1jId|͜-x7vwynbx"lʛ)gZ}t=,w*d!2ݷ8Dh66 m ^8KzGZ ybO|$~VD ᤌ'Em +U$v}Bf PC(nS& /pe ->96gf?6Bܔ6RN8t\Gᶌz0vϺ ,R, `6dhjSӇ\T kI@>xC2YS XaYxAUJze͇vpǷx_?R;ď6'|"iRd`™};w l ۤxtZwvԀ)V %H|aOP_pmڶ \DB9h`+O}Z;[KoL %qTE3nSF>Oms}!-YA,/0:ϻF*6].kIz# A.Ys"m]mE0+fyf8پ@ W /[@Ǚ\AXY P/(& 暭X3la4kXI2>Jb,p2p:ldo \0Ns7#`:? bxu^GI6Spnj4º{UqkOrEF 2O k{4*hp,c.]?o]Qendstream endobj 525 0 obj << /Filter /FlateDecode /Length 7351 >> stream x]vȑ:?`P&c{z9M^,HN/<~I9h|`sa֦|9OmR qAt2nل*Y,0r_I9ERMf˛N%Wpi  quh+eo?^%_*a V4.i&la.:OII f7arƓ:W&e.]Ri ׷V<5үoil!~r$%vp$8I. @$/'i5'8&&ռ~|6;S& X$a͜XLC/:5`TWn+^ϫQ_d,v%uRO9Bs8amN3!EXf\ɂv6HCp6qͦFA>U<ܢI,I"[瀺@¼u}V14**xx6qwWgl>IFv zɋWw%5X3cI D^:}-#]>X(wV;y冑L s<ib)A/z5hSARG Xӕ+~.'ä`zS!Jf>dy3#s$ы+%’ʿAI($xl8Y^V]G+QWy3KK+hɴ6."]fF26%5Znp2&glqtҍ4Θ}%`gnm"Nڙh#HXwMwO¬LdY R@Q0춎}$Sul8" Z@Xn e\تj_FF͛um5N .+ET5vSA]ٹzx "+ޢOH8ܪ8 ~x?/">i4!Lb 8eA5' e][UA(%ҙ/nK`Q[Zz9 6 л 03p/4e7-/Ѿl.R p2'2 J{(Q! mTB F2w ]2_?<aI3{C-N=>D*wD 9r *, 3S lگJi:Sݬ{$=ur$rd1Ń.{<6tGIyt'3uN;}|Y1]gQ7;ڄmxTuxGnBY !׶#'"! B!v+(xKyMof&4/ 4ZD7k{De5ʶJ%*PB3C["eӓ?<.YVEW0G*T[RPRrj\?sK7sM|~BaMп J}UkN5LjF\fXڶ/-buk ЙP -t\\V+\9RGQHauc\/{9yxLf ^J/\~fW7QY%k W'ץjV,4Swe@qҡ p9J Iu=VZ %q*  i,caB-0X\԰5k%uA^*y@Ykl l/n;,4CeA~beU=ʮ"U4s8*GU˲cI;tp^.X?H6gXǿr'ټ]QS?&]ԡЖ$]gT`aPNnNҕ/Z7|@}/˛F525fKtNYժ3=pu6~$C6&?y?ӟ~x[㚀<ˑ9jzUϛ餚"J lLe17z,[ VxXڡziFxB(6$, $iUq?zY,o/ͲݧYie'Q1::Ja3G"fIqϘPr;6wt'4cTafvɀVِb ЋqIUy s[/u Muof5ƙF ٛ]Y`IXoml^pd-PT[rt'mzw=5)u`*>}[dPlEy3E3~*ۢpW3.ER$3l 6p1l +,L+3C:lh<]4[L&+˘%#t"-JBH3>498{`jsuGCsqpں5.^DqF$ڸBx|k6>`КhLG>(q@=gtZ !zM-z yQi1%bʰH %Eq$tS+9jٽtQ'um2)o6c"5m'gFiUټ*G_bH5K)݂joJ, RݔMGȬkYzz>M|u.ݻŪ^b%)i,CWZݸNmrѻ4f~ 41  [t1tPPt # 0j7)(JYSI'덟 OпY^6_ +/heRˉ:>"6 {L~;yxbs"cFN6Η~٬ʰ4.sx;Ϝ. hkf&NC;~CO3LhNJ>ek\FN_n!tx=dQ_EU ܳ d[˅Ac 'YƉ^* mJHPHșt)}L*p{nEuJۅ$+VF \6(νP=&lLVYXH^1O9 }Ml+w:-"2ml<4:G +`YV  :%A;ї|Toc3O!n1g`/pW򦋦}ʰ ᛔkDW|  af0]/&ithMMO^~?/m T"w68DoŊXRq SETb72o\KPu #) bDڽ ,jڵ~фbpoQTyvTԈ;$ ;8^L;10!$6Ֆbx÷I)ldxy 2܄@1nmFuw|֧((NrQ.v3S&'9zzd& 2?JM>=`&QǏ %0i 8dbI9]QP|'%@ ٰ3}u ),i"5NSh !]#, $2eq/ Rq%+ srriM{*-{*l(Iv^=p޵$gu!4Yڈi̓iQN U9F]9ؿZ2G&z'xeӏ_,ӈ35tq 6-Ri!ë6;ŠdJ-ؤ ϵ-(f<ÍP m%=]a:kץO'BlCX u ֭+~o.F,/ȫ 8oBQpUЌ5|s5|ϼ$p^h¬ LUFdLW%/^ٻ.-iMN@t>_:i: ")l| W֘|6oltUXW_Y׎~^ Tw쎻7y^nҒͮb?ld-~b)EzvT·Uwy4,@c"ipA>w*,=d ']yXB]nwsc74_>{3*>Y z:_?Tz|V mBpөCAetżI>| n3[d{E$'s>J^7b4k! uZB٦~#]eyյUWA,l 43JfZ!zYM5ukyl5%Z2둴DTJ/s_qB1e@nB/&ԇh,יeI-C#1K[C / qx,3 s]8YR[Ѧb[!Me_856sNh.Srt#y Ut*YE0ô}VЎՇ g\Q˨Fճ YEմY]\0.rf-GFj|S$jAm .PFPu)#;? 3i3 Fᐔ 2 .G$tk@2|}u:Y}5GP< Dfl, GaPxw *ZX>endstream endobj 526 0 obj << /Filter /FlateDecode /Length 8069 >> stream x]r6vR!TU1;q+nf3Sn͸6nJNwM%O%yѩJggLjvH E 2y?ee*)];;=4"aWu}lt_|'DS,w{DK|#w_C6)`Ұ6j\ۆ9tc'üYlgZE=\y&&]zUo.3)d*==Yqn ~v&sH'MWK|6)w*ysv޴钺ßD'O]laBo*W]vU.* x+? 7觞]RƏ_\/=0c멑MjOMy*5V$en|wUI}a`W$]/",ÚTp4lt^F 8RXkyKa!q`[x!d=t4]Wg |p~}@=m۾\|UCsdž@byHcyN1'< \W$ *i5&@ n"-<@)eH ?sU͊4r(|;܄x%6I)uN% ItYLiu:Ńv AY\DWDK)G100.R LyAJ-MLt2b˚ ù"H\_֋0CGK-?S+2‘.p^=dZ,Fg4RE./W}nVpi&TF i6Z&ҹӒ D~#(Gz qGoξ=AL%&bx.usjMxXIs~^(ټΓz{j{2b[2z%γ@LSu&(F E?+4aǯ2I ߚA>^TX"Zm3p&Ŕf;щI CQ BKs~t6EUNHlSu kIrO,Rm`"=lm_Vۦ8=UädhҚ潮VfXh[ h"Ey- |]\0&Xa%LW1^,% |kXRp`BOEӶ& l69C3m>6PI/} қnW@P* `$f[W;Hg&ؘ,5΋a4*n؂"W^#dP0(j\*z}n0 h/߈L'Ps.A,1O-h ~Zͦ6iZdU~H80n`VEjs/?n 6rdN"*c^De "qjaK֠?^O6}m 7;"r10g\]pifդ|SF(<&d(# /leh~#t&I Zlehbtl:Kscy/I"m$7&S63;5"]f>lܧX!$wi[0 qȄԆWo]x#Ys .;l@4b_m[D-2i]m^ !4'@`|zhChVA*02H- O`jF¬1xpc~b`s<><(<7]Vt=׃N7%..<敔#qlK|J  LmZU04t{19mH><)l!x$^qhr0-9F'I܂GKJt®_*(It9 XXH@_ZMu g+rOӰچ=&Ҝv,B W}-mpf+Le+s>ӆ-? 2K^?b#Dw_! vC ҏV_Т_YZ8˺mNӶ8Z"kIĐ3g{/6 }+(yj{1 7m[u1giQRdi _k粤!$2ߌܮx#ŅN5 ".W9@<7vvp8v|:%3 x(i JZl@Tԁ7#}]T^K.` "˃0guJ<<7cŮ .v:@VYbcNI"h܃m7RȰY^! .m?-"&2_::S#tҷ`{ω"*0ؠְDғ{kX>Do QVSMbŁ~=yV 3I=C{^;F}P|{>|3t-7;CmL6v@+T " l9@Ex@x c'u v!L,SiUf@.ѥuPV3^ıḄ|AB:f"xj`J.~ >_U˶`|K>bH [=~FpUɼʏHz?;C y)Y1l!_0@C#DkP4}d 7;d׫q5g'Z޶rGthmuVX&vUOG(ش"]FNGvvŦl_k}oEPF.oџQVVȓn; Vz… GS k]\F>f3t}9Z.p%G8YF[~-/|=U/?S`&Ȼe>{_7G$D* EeMqD~) ,N܍1Hh3i),fguHW!ґL@d?$z`|ܨ&РcC2l,MvyRGa\Vxd`#e.GT+3E?*kyVe@P7?pAِv@D*excr.p@JL9j8FƤ@t;x96o 4itB`^:zH"y%5,BvM0)F ̃s 0q ^'D̊>#8w0v =v$9>#02 0̩V>20e*ݗ 1u<7hd^p9`RFʳdro>n{P,'z +Dd,QST ( oGNX& +% 0kFlyBV`h9z̈́0h7k%<-.D3%t]ڒ-YqvLǜ,ҷ^TGSf& t&[O \d7Y쒽2dK3/VL<]y/8@0W`6 /|Z€V-qsZEvDЧvFg\m)NLE!}^h/|N(1ę3W"d6z[4[6h+<(u'ͽGg j&O3j O8@ yhq}n>;mT#wjy0!F31Agl uA5 ,xShBiߗ@\@8+GJݍ%Co%?86a'swIF}uOCf븼SΩpdh3KEtD@9>kݐ?Byv{~s+Ɏmٖb^UmdK',b'DxE~ЬpNbj8Qi{b> bxk0sR6ko#luZ5Qtw݄"9qy9xWuǘ8.hpP{c-R@RkфEl[~wAqk 39t \t4ھ[q'""DkʚLC%%' и3ŝ.j=b &򪩗2nR6eEE'2t$h3̚4G+`X!yX=&]w;0P$'Oq&ALO'3hŞa eQA?GgTUh%Oǧ'OG&b14ܰ  "57UD1>nư P -Zwc4 5$CT3Dfq{W B4t}!dg 1WeҸՍb:/lS)UWIFzb56V7Ȱ>tzӨU WtU܂,&mx(eAQIX1dAЗ/rt(N \ؗ6d$u),>.j >?3CaMHqXƨI(Vw; :NB5޾-0  o0FehNCm; P - !L oeib8@2" (`g9(քch;H*^^\r@^vb]p30siC7"n;,l\D1#M~r{׶EX2ncg`pNy7΅bo%5/U61>ZY8{o=no@hrh_j9Cl9mc|0pПFI^KͫOcSnAIy^ nc{P=*s|qhGqAK<2j2ʫWO![eV.of{LPdḷL /w|YM lPJ)(E?B}HZN> ?;V2ϰ I?+5 F^{,wx(Gq*0gJS@AYjS54 + x&Mq M${MqlMl"!ޅZfT'ꡫdr`) bP: "E(RP:Ş- (gWaIT}|P̰x_WN:y1b_IE2)zBc*Dgiu͌;?f{3H;R?Y0na&=HJP({8O wt399`WKދAhtxP <ĩOZz zWa襏zX'{T{饊AQ+JWR ,_*vMWepՏjAzn4Wf!'hDms|SLFB7uƽbM{˪چ3>*&\̓ߜjD]6"w8 O711)a3tՆ>\j0cbl 3T"n9s>8Y}⛿6hQvF`sx9fpOǍ/q|Ǧ )x#,N3Peӳ7<^S<(I3t^u]]}7g.W (++&I_?+O I^ N\ڵfQ(JR9ouLE4j\GK \uwnCVop+*Ff?L* ݍo/ڧ<{Rd s3mA]Q~+N=]g4^8lY|Pox]ʢ:|`½+9u9^if9DJG.%EXH+͢aOq~h^j(# Q?9܇KK!;x|.9_䂗]p]^G0ɜB|70t[&6g9lTɩ:318(BWjL)I4f%;ޗbulH=3Snw{Tp1-]->oFs=n8^5qءV=À4N'wi.UPt}ZQ+ߡ GM?Eih9ֵ8N`)a yqߟ me>nj47O}r HetWM9k6N<ن=Lf|$j9bLTrcUߣL%| Y07׊&[k۲o_T" _(9GGiӊ3E'X.(v([nǥ'CxSO.PFx@8$?">le—q%klx:/24tl<* lD:N3RYHK'"z8Fi&AR@A60 F(Bl"wwܚ&p/G H8ѣ~.#Cqc[a-ַ͋Q`i,s']r1p jT1͇t` Up  ㍟JYqQ$U4w|DqvURm,yVjOq?5:1'˓[j(Ap;mz߅>=8aBi/^nKX|=IrGM1NrY3_깫Tn̓ofÑ" xv[endstream endobj 527 0 obj << /Filter /FlateDecode /Length 6843 >> stream x]nFruhwS[rb5 %<pfJ.Oc^#UdH1ΆarHvUWWWǯ[? <;Dq6Vь.v4=᥶52=;~4?)H][&/,#.έI[Ѳ>9W-d6W%~ s.rh@ZB#$!29zZZdh_&/8N̚Kjz*r % C(-\-HR#l/ G6/˛'F6R.sN/8=W\gիE~\鏗8`Vm^KP+nȭ`wfl,K׳}`Yo7 MvzWOcat#5BmR* &NGOYlb鵂e? <\@_7+"6&)8L%Na0&ְo CQ, ?GT>z6BLS7s;J$DDZez󗓓쿟5%҅N2XKQ9)sn)ku[_sg֕ J~ز ndnM0xn>{H&oF/hh?i1En4AD@n8KFPLs1dxҴ:Qe9G1"5(F7QCbԴ:_?Qlr< j&`m>PE0gY_W&Ϯ؏#2zy"5Ch6`&Mw;W:>sXWhL'X^]li~Hp|WoIeUۇ{m3{%,2q}/@c̙=47?{eK uGCMND2c?YBqb zΞϊXSOq0Ywkiˮf~nuV n1YO Ζ5qkBfyXQOLd] 0~U`D"6K"M2gN?ՏZ۩0~[z,rgF,>4wb'RJ%)I K"NW%.#3Lhꮂ%WsF5h }ai{|rtx>][t/^p5un]?F8~!%1"S9|rE,n*( 8 IDvm s.:JzjSqG(\L™,M`:%Z1:}a.7ps cC|=š#M7#*M@}{;_.ybYB C̀Ly>8)N}c37B2r}lB#4yC=XCyHkdOᠢvAGc8Lo+i\5o_4([;J^1򹑢.Nީ]֫r~u8́Ӎı'+'w:/1ւFZ0 ]0gTb_4dVB ӂXN§-29oqK1KqフF.'G +I72]5/|ٶy]>YJY~Pd M9JM}Њ5%+@.3nM0֨ΔAq*& "U\x_ݔ/m?2\00]ZG׶3b?V)n涙WӾF;3;gl+Yew5f(E5 Jx0@YzUsٕ+d;  5n m&B gx\ ٤E^}| %aPGcL6rO|N"$ÛNmvח=΄_Mj;a{_'r'{շJ W{. )UO, qCD>rJ%u]mTSl@KiͰ$ڌITBxb9T,B(rxAY" @aM?SK'\>+a+wUv\R36S2tC&.- ó}R,eO  WN!cA[!=/cWJB_TY)]w,OT9^}Qpd5E,#D0NO$43ڮa.}t,%O GξZ̈fڬ=;p* JU=|(*SM[f%_nЦܨAfosBp9 ] ɬ41c|5kwA7>+|Eq %|#fքI?`xSo[ծhvi)`\-beCcd @1" Zbl,jTvv7@뻵a&le-d  ZM)%Q]k`z |K\̑o()!>; ޵ /lY% q; }3vkyaL^DEY g 7nI0V޲?RiE’O%`F9xqx_/IrQvP'WK{/%v^yWɕ #kDp1Dj-ڞ }x[`ݼ\ ,K-uC=!\"nAc `/3}RS!@')0SJyJI&zY!`f氥({gwozvW֓$A;G-"zK/|NJ !0 \"0o_4ǀnn"xX)f :B-Ճ! 1 dTI{!G;W䭟*Ff"f氢@д5 lͱ`uB堺9o-ךtMyw %- 0$Vmd\bK1cՐ$X?2d?E6oyW67`Uiay޵sd%DbVoّ ]>ry"oPvqUi:U8`ͬK+]esc^3e`:nw/D&Ia)O6~ ֙n#*Zz;+!+=Q_,&BOX3 R%︋[q1|:;hcXM==[sP3~Tl:us"laXb׆pm]ۿR `}Ĕt\Hfq{̓zv] TY[L6%N )[wFANiC';ywڰPQd9?3{,@*Ȣl Nn`\(&ԗҭ;5!DffpmcO!:ѭJO <K{sFy$=˹ .T!'/{=~<(T/Liį-Nyr@o~[\oUm#0Bsm9EQ!rрraG =M$"U׺~%K&F 5(Zdɳu:Q)NpM%xd۾Bh??3/;@ٴh\rpHܡğΠ+6#.DGv]d%&N%|u?Ә3=$/n1j%sY$|d=~,[#`!ݕ R1)XJI"PšQ1 )S,Xt>@BT0~ rˆk!A!I;G;n"P=>ooߪjpjj}W*DJ4ò7<OWpVQ3a&aG1/,,葇 GϿ @5%7'COr2D=y"ć_{~N <+ߣ>}Q'*ZXXuB lPli[!9;bRaf`=9&q>hwq\GvIq?*x)G[b2G^"R+/wX]G{u*dTfwCs|;\;S&! DC.az2Qfz?22:`)TLdӒ |xT-"Y98O im@;L*ɘi- um4@ e/ee(/Nd*bA.7l F Sendstream endobj 528 0 obj << /Filter /FlateDecode /Length 7141 >> stream x]r#7rϟ)嫊s9U=)ٷ;;uFH3ɡ$Wk`(~hE*vKr@ 29r䙑(LDD329;a0;RK-I-<.NMyʸ4ٟ^ ^x"O%CjΠG JLX6}7y Gp<8\or2 3F?F],3Z1 AeÃYX߼)gog_]`a9WealM1!SXKYS8ra D1q.wsI$EfſiZsž gٰ ]n>xvl7f*mͷc+y͕IܦV)Zrt*vvL @DR3)RTq*TЃ ܾh$㑾=-ϕWb aL)PkXʹ/0bA%,ye)hS5]mI쯆ʓU9tLA_eSJ|TnlYzV`b8+wfeYD 44H帑tgR{m%&IBF!K'wUKN&@~J%˺=b}&(B 7p8qX)ү3njRǰr:_V[wHZahj!Ov"ۍH5J#R45IQ=牳C`5mofEF+"" 6Y}fƜLJË lF7Sّ]*ݲV`j> ^76nw3ZL4,| KPE_!8|Bsr @!J{WL˻⾂`NO:H|L;ոl:d''7`ov  &.x_Li%ޢ{ S~VX(2/ʚmfzٸxOqk|Ja \&`%nŲ-pG2256$& ջ޼3ˢ_E(=X&z\w܁h$FrR'cYqh%\&c fO9*s.!T74 %԰C$}މ[SL^xq&eA #0+]'ް$.-d+.<:| rٖ&)c W@$Urs_呭c&RQkгׄ@n@kpef38jCR <U| զO}@xtrW*t@T2;'"jٲ L:|H@ULFC W6Oͨw┎ ]HT^;?8L 1L9d5N m6{UFEy9> JH]6%H\)88c͢{̫V00UٽqtE?.thqAWvƸerkL|F*618m-V@plɀ]}I-!oO@*)2Do6T~q>mĚiPMu{[1 Ν_-nk2izDneIjs! (Px]Eg uǜH"ϭ s'Ϩzw}~ޢ{XujV:K䉾]ݒK4Vi⯾%#V\ԯ?ntI$ô> XJ_j\wNCsN)mqŐ.nO`Ǝk s> i.z_skrd=e=wFDeR*e< nVyQS͗ }=Ԩaia;}`[`9 ? ø*ng h*H%(hB zEGrj\Jhp"@r/Sk<Hx|km:ݕSMJi,HԄbNXS6!U?WMGTz9<]ɮ&"M |]XhAdW0~,}BUw4Q=N#'~nFmQqZ ojM+6(>l3ZΟ&u=9d%FY6 +_cyr?ؘ*2СabTI g͸jm~~{.f^P/i@uLnS.Wͬ#i٬#sjȷ0vΝcr4 > )p#sԠBILQ7j;\aidW7MLN򜑉n6X8Rsl!޴xFd/EJ< dvRksNP*x^V2^S ! Ԛ]0-9B*z8'``\dO_@H)_0%۴/ k? w} }ӑsn7VN*7X1:MV@mK@%}6U .rk5MB4BXp0N'Չ.I@\$3UXE9jӺV"3 ޡgP]b|"T{F-!<_.ZxeysCv;/-LaqN;훹ՖI}ea@^4R%i}*ư1y &fI$JDi{-TT+%%f$%(_9=.e(u{O%w]lf[b[o/XPw|w0)3r˟WRC,^BlT龅G my Z_u#m g[q35=w)G؆$ ߣ(`T{p sy׌˺u+W'մr%/j߷D ka3whT7\ʕn|=Ixϸ'ZDW u zuaDKo&Dtx@萍J#p(!֮O2S&Txb0 $s;o/,_DLt$o-˦w!϶H"'~3~t 6A}&崽rgZOlk%xoa ^'2͸CK Z>fC}[]7E`}+i}(qg$E1)D:n@F VV, f? R{ .azܜi7νo>`VcCɁDCzyw!W6+i~"@ P1 og3]Q_;J `Q*@Y{%S<Cdco2h.9@jb1 2*{MN#BEx"ҵ0R Rh (i5l/9YM:cW=DĉfӉGim.)ϚO=W2j{Nb8 i*7` deA&];ϫyS?~s^iI\%c4Wr Wv^ fTʇ7Pm ֞P{6tgt*b>]TZa Ek =&|JG_.4]<i@eH$=6 'K>|nњmmp_P[8{w3*l6*s^ábeAE) 镦s<0:z[{QcI* :xSiY3Fw!#3נSQoXJXmCWo_&zT:>/PB3@{|zɗdNmݢ_Hp;\v?v7$TXT'E=˲R)|_eo`3chw,I[KWPb(f ^>xv:U<k {X.nr7بo2Ss&l<RՂܒY~b3,`ٺ@&1탪 !M|+7=MSm̂ۅ"/mQuySޔ !\[k`O h}heyLWϝuy\s"4=@>MSL7axu6rQQǷC1{@T6Ð'R {E*16䤔 ֆ\Oi3ib9n=*ǫ}ǩ^ C|n;'WJyf8U֔OELpbxn"^޽z'b!ǔf {Jm2E],A ^OQ1gFEw>I|[*91`V>.Gxcz:jZ/{c{);kvw1bxH)c Ĭ m-D 5:][ ^A+LI>٦ 3O"d,tLX֧. MۅG[rztч:|8W>"8'Aw <1T c(x%Vʖvm]a]OuY+( ;M[$hB/V1<H "u8ҍ <sRx,]^Ge`vD  aX?ۊT'Bqc" 0`^uQ=DYrNZϓFP:e ^DMD!9--ҌZaamnkɸLףO9x(H7bD}3&BO4}5kWɪ\.ImH=}=I3uJtendstream endobj 529 0 obj << /Filter /FlateDecode /Length 8538 >> stream x]r6Օpe~F3d2I2=*w*%4-*dwgb޾ƞ @duZr*jR \??d8?ɏO' =Jۓt='͓';?RWO_JءqX!6"BjN :+L9qUfGEj5O^AYjEftPy&2x8鮀 a7RT6:2  $Ls=ݑix}DTT9/gO?`1*1 8jG]Q{U=?2`Kno&PQ vGdv\Q{|vdh[B:kt$]9<+~~Æyj 쯫n~#QǞLZQĠ3t2 g(׳[Xvg`~=1`rrv()Zk8xD&&1+]pxoۿ&mpPcY|ێq>^ai_UMՑ@ԣƅT r' x5&kaUHub G M~{6fo`3j/oMu En'5(ոJUoPՋׯ_|u~HO3^1j%7^ eɈwJS-AcH Rtcq 2X gŽ'仱w9hb@8^lhCVLX>Vπ,ə0G/2~gËI>/YrƮ`l6G]teuNI8hG:e*3svNS9Y99Yiˣ͜,R)wC,^Q?e"OUo.w^C/wh r>9S`':0+P~ ,+,bU\KD1W@'bѵz({LUEc<`Jp#"tc`r+z˒mj*i sՓ׿>+Oe{U&@j@KU 7%PmWϧl1  b3\ְ2BBjkzydCl芢 x 6.{_b¹,On ]E2&4&;]VTi`\s:e .-1~}"5IC7ɼXNK?CZ_`%AO.Y- .. suGUzop-;L~*v>ЦQѠ7F [|\1qcaÎ".;rUYV4lvX*9"rr5sBA{H"6 y5mЄ՞zL\A/nf} g-M<0 F/+ qe/W*R& uč?>O%Cj_(hhisk ÿNxmXޖ`N\•9)D8 $n՟sGLbP^!LHRRbsDO4_\Q0w+9U3Zr]QYNipߴ t= X (C!('@g~fK3mʦYļݹnN2Dix.7xMvCQw>YCE$̀-N69Y 4H`h5gGaPe(Slo Tf]ɛ;sMI{H#Z񇌦kaRc`WGSoOCi ]kzHZz`:!Sl1 1>U$d&t;Lhasj&Z[$/X1}%Fr4윢&C9v:i?}yQF7-s3XâX3_jk+AS~\yAVx ΍=ԇ)I6!f.*v8,{1T[24M2]86$$jlr9t!z;l,i#˒GGvxrC[S‚2j>:lj-5)Q !%>0}Rtq]2axjvH.QVZ+ ڡ݄)_+AFno7̯<6/1+yrlcMA!h 0B7԰Ϣ +5Mؐ)Tz+X#,CԨ2ulA=S"32_qrƆ!ȩ8{!u՚0{.=&$ȯи!A=Y[Ql(n/WSԀɊZ44SAƸ'd<0nQHю/JuD 5'g ՘gNbfLzytǰaC-X20c,߸7ɻDž1`Zh1ds0rv&(ez,ĹkPcE}|>g.-dϻ!>;;|>BC8tXXY'>ŠtDeI9l򶜈,9L6 H.8cdU7AP\u'|Ir_(('ȓ­Z6L|I~fb x/}o2QNW]n@n-H|Q_5Ti8-e1jD~^I/Nog;⪹H\czpI4SH$Navh 7wC j.dqoIʣ(/bO" V)8!l/NE G)`^Q6Sٟ^m(RjLBc}JO"8vIg ״ \6W|>%}ї VŐ`ETL1x@Ol qg"F`Lqa(>m/8U?.cDE 7,=I-mZ8gS 7uFP #^yи *|qZR @HE/]9kΞo /nW=NZW]H!.+9#[?j?:ogO{g`"n䜄P@Fg$$#,-\ޔ~Pt/ `ƨ|r9ga re3q-ș]= 4~x\1u)Bs\,0IFB`q8+RJm\xk :U˖xaL@<Gzځl0ӧcVqce'<:1{|6l?GX8 bӧrRkWzFmTvc@#E1ԋS# ,ĩY2v]00ϻʮ=$i} Yt{rZ>90n$ T[8FWCG}tOԆW5tB*uk8B,ü<5#fEWiE`FjՅ"F2|`ӂb-vy1tG)r{_Iy6QP>`s65.j A( c>j&^C;2gu?moq\Kv%g32yl01& vrU-&z6;H-N)Row_6aj/ Նeo`H5tC9e57>XCw]\V9r?1wKo[9%cX]Z%a<YXDxߤDɫ%7 w?h^"LF.yY֗{bJr0MX.pEɡJ!,ʇQU  *6Sn|{IhIM"PoI^kg0*@RLO#*Äaj#s\@?^`Gdߵ#'3!g)yIw;W׊^`j"/wjj_Iیyl.|1 xڱ5~]_@RtF]N 40N 𑔌IoL BJ84<9uSU8iӑ%F5 F%Ź.=h ψ cLK ^^_U:Cֈ{v؈R70~ciJw+ǯjt#gf  ="e|QWLߵ;e`l\GL^FcKῃApc 7Zf\^3:73o.^c3]u Dh樂^ {ϦrzGqՈQUsTߐ$F! gQc8N+fj`C AU^,HeeA\rWc#>*8LZ T3[#JS| -]|_ <2E3tO|ֈ>ghb{pOkCAz~),`)+CW>;G9m=C0>RpUo`"rWHƴ<?`:2ޠ۷3 pziɆ\/q;RF)Z7}"8 /]3*: M]ǧ`Bt 4hphpޱpfΫXfc=y2 b C$E|!OΜ":3,c~)dBsp*4z>k%l47^,VK ‘4!G#iϦBB⹚BDÇ3puhS;X mk}WG77ے%H^Dͪbw5b]9p ;s뮓cB;ܘ r2Nʟ}E3!D>N.۫\A?|\3VAŰj!R\g0Ƥ!$FW߬5#0΁ٮ;!ԏ*S0'@aQNL[N8K`$"1¤8i a<07}1&o "9ì\e1ʄsP@~L.}| $eP d4c- lJU튴ygRs ʥ(>N~,Y%4;D`{V&+H~>=*Tt߭3LQ5 d0`Ԅ[ٟNz\/3gsݼr΢xT. 'C˺l  I<ΚQ?PO[/2mŠ*h12yp~(G.1}0Ax?ܒ17@Q2&6bt , bYx_tҥw_4mW8Ob}>ε\vTjڪȿ  ]k3g/^=巯={D> wQ3<:KZs%"B pmWM=_2aWEm]&sr$#?Mz-Ph{Nf} ko1YL6q]:SGMYͮ ! yP*`!|рzc MF/F@%kyV q2BawBJ2 0QsV]^Ki-KMF+R's$ФU!o4.w0ms[֥q阗MAh|3 +O<o~~4y0Rr9PttM(1/fogo*yqDyyI5n=ި'J4pR MVQ>KsPm256<*&x,eKUK`+P)@Ec!'% V& } WY4V*ż$~ImMbD'_~pwWeE?ye(z{ "~ LPӋmrh,9Q Oy w"ܔ}tfjꠁK5K7?K, VaT|Uz<+oNve; 6I[sʯpw>N'X7]/-SkU87YUñS* ):G?|wF E@033}0M{|>aRhv> stream x]An@ Ebn$DBޤ,ZUm/X!޾?I]|KMy:a 2O[C?bd }cB7AEyzm毟>oʏ6ޔήsmio+{-l{G?>21Mw{ebD-}L@Q(Q&FTN$ޣ2c u`dr)91Z`$ ~*:W,,:;ABgTs>v_s_!ߖƕ[}yh?<O:endstream endobj 531 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2177 >> stream xmU TSG!܇$߬ۊjQ|T "$B!!cK@ @$%<kXAQmuš;v{Ξ{=s~7ruA0;D^5Dq.8a־n4h wQRD^r6pl04EemFZg#Ihem[58E,EOm5Ԇ$^([>hdqI2"Iߡ-iX֠wSm'cvcu&1|/Ej @RaTAm*ʏZKZ@FR^DʕS .&[•j!]}t2߲iN5dE/A%jK-)k?j+n@ܝ)>̦"shN@#cl4(WI.(XQ/TKO ͡ykg؞Cs!3g<Od^46nq}ؽg bPbVv Iuᥲx>` kn->'aljڽdV6,XAYTiM|xh+ߝc@^=udPX !s/k'_3S&W0iEv0iDziw0e(I\ʮ0Cl9ġz)-"me26g;[P:dw NdB(V*h sOl0N/x؂h"6oUKcTtzRku:Ic:{2-Yn뒎Hkqhmݻzp9ɸÓ}a§cW%7Kl!ǰhn' Վgd֝'{WTzxcNptN:f,4+g, -[VԙU[*m)<"{GY!&x4?-6 t0ʄ9(ξOK?N*sL);ە ,C"ȉ,K;*uWkv)qί&lLOJ]$E+!Ɔ䔼9Y1{HƮ+S!E Rمs;W^Q[>m#;`?_$< /Flӎy:ՔiD)ck :..(>0Ph܃COIyWJU/>  VS#5^Fl\<{N*8ge|;7'VT*]% ѷ}hy a|6 ?C)ERc"Tw{ϘgL1WU,blb_؃9(* 6me&3`h4Ӽ\,IQ(*|ے3J& ڎLifNl yo^1{ʎlNx=v;K}&jRydpnߙn)@>Px+a ~]<жzۅ 7jVRy( Ty K-!=|@5mZQG̱Kf+:Vϝf!dz%$ؾ-ŢtQy%dΟ 8-$6;XP^3'# ' '74l?@6Ř%FatHv~HVJf w.,0:fp~{ Q{ x6^Bm}C`Fd G֓z&AcD~v~HlhQۄbPձ/gΣ-bDmerdeW(@KBmVѵHb^*q=UpF^ y| ,jo2r>rFFR|?Ua1j!U3/ZA/HMxe{j}r1\!a^Cf. 7qVRX[hIM|r1<^GQhwendstream endobj 532 0 obj << /Filter /FlateDecode /Length 176 >> stream x]O bp4F Ká@(=xMfwf3C<:0ENGX fPǰ*}Xj"gƯrr?S]uͤ5HQPO;f̏Lh)ϗF9v_y\"bjijUŅ3Ycendstream endobj 533 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 289 >> stream xcd`ab`ddTM,pI-Lu JM/I, M54Q!C,swϐYyyXzx8&}?&=\{woFFCϰhdM#ҢRҼ"TԼT= =.P04@qYAQfn*32] X\3dX>8DkK{ȭ[G~D ą X^?G 0wrd Jgp20ɯxendstream endobj 534 0 obj << /Filter /FlateDecode /Length 170 >> stream x]; D{N7[KӸH%Ţ0 >|)fag[:Nɚ|am =HcIӂ22L Ox)X>)OM-IpBbvA209AVm-H^X(پ`)3 ^2;[DVQendstream endobj 535 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 297 >> stream xUJPMbP?T[ &&┎-Xb(NC$Ć<@'l})O7  9F0ƽ7 G1 c864b/5olö^ZX06;**/q>\1''uA\/NIӔBJđO[<p<BB_G JZcn0,>EXa19WdpJhYqǜ|4^Tw>?i\rT2srbfV\8y4^TzZ؂7endstream endobj 536 0 obj << /Filter /FlateDecode /Length 161 >> stream x]O10 ЅUqP(/ СÝdߝ|p%E cikD&Ǣ8LTgo:?`3绞I>KSVBoh )jHJu 6Ǯ@Tr48o1Ҵ4CNZ~Sendstream endobj 537 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 243 >> stream xcd`ab`ddTM,pI-Lu JM/I,,IL 154)S!C,swϢ/XyyXzx8&}&=B{( fFFdM#ҢRҼ"Tyɩz7(8{(@ݠqB+xY,>8㏀?DO 8Xb~*0ǟ $db Y#endstream endobj 538 0 obj << /Filter /FlateDecode /Length 490 >> stream x]N@D A&twh8cp頻8Hz2_ݟ2vqmKqN֯__>:sVw;2/9TNTy~rSsR ; v;NEŰ!)%^$X}R  = @f}9يk5(sP> H{W$XfDȊpY4YDDp")1!)1!)1!)1!)1r 6hה٘159159159159ѓ+gW\9s p Gm9n8"VZ*YlPbp! `. `0 BA\0 p!@ܖp6>.W7/*oPMendstream endobj 539 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4012 >> stream xWwXTGrkCf||џI, DPPRI.EzQzqACiA)R",yHQ3w3|>~3w9=Dq8x8Z84wu6 r?_._(`߿Kh8 g+/kG"y1 v#HNs~s+zްasاK 7h bP$o#r<]>Y(jV_m~mv1 2 6 u)8^7Sw3sO}^ޖ>V˕V\vW%@-L%?ʜZJYP_Q7%S6ZIPʀҤvR)CJ2P:ʘ2=ԷlʇCR(>ZD1z2LPvVItpK?)ST~G#3e6Udԫɸ33tf4ͤf|>}Vl!s3'~NfՍsܯnk57mp<'T*]vs"/~kTC@@sF8 Ve۠g'j[\Ytzw)]xlxRV,>fgdezFVB^mN70DX!h N4ڈ~!I# -oc(m Eģ^>Z~c{\|[vW^T?-?RYg Jq_"idMݢD>^.QFd9 ?hxzx]\- CfW sO .9[dX g0wX)O 6uV" QYy0 2Ѻ[]D݉MǷ JD7kcnAo%4;q߇V9?Я] nM+lq]Y$| _u5\Q5|G:sh_u<hx_AYLɝžbp=1==O@;u% FÚk?ܫʠن5\^Gc ehn/6{E=rcqRoe@v]Mm`lN˧ P5@|~u`Ϡ]ke!9 Wwh{Fz.ūlcF=GM}$tIZLo낺kANsPCگ.7e 3LqZTp`IN?[^@o/*wK@y1:4EѬTWcŊVZ !Ïuv}WT:IA8+:},%v<`v9b@E#4{YNL. Y*tQJa,rYhj7jy3bIiOWaGB!cpT)'c`-b7 Y/)ꝣyu(St(&$~vE痧\V*Zx%>2&HKq*Դ\aw r 8*+?5tJhғ@H hZ)@ haҲ{xиbs.{tEc, ”PbٔSG YZ'ZaS`u#.ܼ-1;l^_(bA.mMe:6 C4*9S\6lYfE#@p7w-ʽG}2<)F cS_YpU\+Dj`ZQMPm*>Z"]A lE(i)ٲX=@#ϸl5~|Ix214*B?B3WĢ*|25@d<ĉaΡX=)갏%4c6`LNRV^&A夊sّTTJ:1Bh5k cu\Bхg[s61$(I/x#޷La1+@ې3l4#]O1!(Έʋ\l=jsO_# ,u9# >|=bCݾ"Vr:(ytD[uT917XE)}G|bO dj+J)" `BjcI`V0*KU>8gh"Ԃ^S/ `eRKyp5q49p˷)rJ.Wdφ}I;t UR#:tEĐTH{qWK>`<kawdD:~a`CDN?4tBA'lοZ)[XUo|E(F`#p谓ci5G~v0g92.78_p+˓ȕൊ>םwJ$“MօHfYmc8<)}pG} %-ݭM][L¶و1u%k$y^U~]T}S.J<~Dh?blۢSkv `""9g"|7y[O~Vcm$\HN "|ݝ_߼\zmU*/!cux̟|8Oٽ ]Ԓ槗ʁy!psefpvևиѲ'٪^>Uޡ~nIG[?IH='Z "`g?ێ9Q~Zs K"/WrV5ހnqQVUV#/=}a|rBQE*q8)i'}y,|v+$]p}_F"XM#ȈؗV=B_,`Wk'ee*pVܿv} 1r۳969:1ZMor_H=Ed;#5+f `IL3 G>K}JuT|F'HȔ+ L !ڽDIkx F:pAn>>0|Q\eѻ8`I/hݱ.=j.t mdkeGW>TT:i F_N Ʉ#_iΙ02rはfvx1y!WJ:jY ?_P| |٘ti_a2LJNb&]Xy lZގ)pA}7rH~Lr}MVrZ@y \GZcKT) Gendstream endobj 540 0 obj << /Filter /FlateDecode /Length 433 >> stream x]n@ D{}%&iR\pȫU" }fI+fg =<,^i^ƭ^ηTq./Y>=ֿ:u?7X/P6,9v]>NSn2fp,Qш:}{!K'ZFLY&g 0Y>|$Y@#++  CS+c++Y"&aq ]:'vNȚ71oBפΉ%Jts:kuZgàˤӤcNY9gk88"8#8z뽧,ODst1Kμͻ~`Xuhu"5W-mU>y?z^YB'y>1endstream endobj 541 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4184 >> stream x}W XW֭Qi*FѸE *K 44FQ6Y[@E%nE1jkpLKL$cLVe6f^}{y"܌D׸(dQ!^g"~?^cWY K14?;N: az8!> uVFDΞ>]w U^>hepf 6ha{ ,+Fg.lq2 6+n\j`I4G9ci22cX_Wz 3mg͞3y?Z@:bXHKl ܉&b* D8 b)I,'VvlbK!\Wb1AX46!%Fф51K| GDAtlYe"s;ȱd&$_ ﭭ z1͒,䇨|54anh%cxÈ#X zAoˡqf'?%ZTżQ}+2/+9= >T )ceB|bZ7GX?$C2XGI R6̜wF'sQU0X5ѭb!F20 c/>p^eLr|I~$ =GKܰ%6cfH0Gb}{Tƶ,qSD J-bL WPdn|"AtnO/CTb+!+8q&lOoE0UUq^pעvt#2+93A9D ;ȃq]Q1YerDPD,k'3"9tU ^#&h+@ y)=$Gi)jsdcхjT0GRZ/[X<{D,p$A>h1`зBL:6هk]GmdK 야CK{;kP[MO"(+%2yd~ ŠGȾ %W9Ѹ#}^TINTGy-?Aj8?)c.D|u"\6B+(+ ֡T :)@W8SzP { eiy;RI6 - j+>enD[)Gňq?wtտti(( ѵ[ `&E*C%ꤱ뼛4Fftp D}#~C^`ٛU(7D,zH;uq#b>ɼ]W1us5jUX:ᇘJ6z;gu\xoX(b2NR&<ݕSf k_]>áǨzY1]0TwY5t*;MUm==sek RC8%=  _HUUbר0܂[uaI4%LipypyHeF]rO@Z6i_~׽沽E? RpH6$\u 9"DQ!*LT!UZY&-ET$9%HkO?n6t(8Y|QW=EUQE?Ch+ҰmQo;m}CG( _#=(X|))ShW^&&~;9{ẽ /9i_CQޒx&u5W܇(.:1S(:X~zzbuqPH*50&x,vdGm;|AYT(jjWW9 a7R޾_+GN&Q< ]Y'L])ʼnQ4RQa^ -V]?SG,hEV^{[$T} W{MaVu]pQk-MFt*֓'ڈA[r "z5Xw-_^F%dxKIJ:׳EJǥuWHp}%ovtw4~ =`ДxCA |÷J+e觺=i#-}s:,KR2Pu=6Gd^7Dʞ-=mzO!iKBhע'Ρ+%]ă: t}h7|BXy"78w}vPVK=mtMNXm^~!j ])H6Zhlq=} ?NЬ9oy( !#P:I1?:- "3kM~6RBBܤ/>ÃB1R!AFtWPjz$q(,GA@=Dm[qޛˏư;v.Ae ">̀١|B?AF_J(cLYfS S~p*JJFQPpWg= }̟K^-]y/]=}h^9 iqw&3b= |vV04f Q)H|DThz: {`w^>*] U%z@ Yyɹ qԽyBC>\,d ;E~'0F>y#c Gݷ:0t{3>}l)>,]6~u]ڸr׹hEg-dB:6ŏf$> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 543 /ID [<8577af5285110a798e6e3311396415dc>] >> stream x֯kBQ{Y݆9f2XgE/Զh1,ks(,Ŷ a E[z^p8{{oF1Z)S -WzR]{HԪ IQ|۴3/K~DYJv&#ɒ4K4IDYz!KQ Jj/tmu8Kֿ0>C;V34fNnr opfNoeQLS #?Z ~Y쯳$yguWg8 endstream endobj startxref 201081 %%EOF Rcpp/vignettes/pdf/Rcpp-libraries.pdf0000644000176200001440000024227115030755452017326 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 3638 /Filter /FlateDecode /N 62 /First 509 >> stream x[]s6}_1AHt::vRI;y%f#H%=%Jdq€{Z%L)4KR KuRfb:-V &b&8F H2TIl4aJex2)$jlD˘RˌB93ceRT5)Y L&P吕z,)eYYJ&-21}*J%4KXXht%4tEIt"VrulL&3)ol$#i7t)2u 7,cQ,%:L P, L Y2f0 $'"E$'A$'*Ð@rb!9R$c7f0 ō4 #[+chPL ҩ`x ݍ׏?2~X40or \W7ɠ)1ˆǫi3*E͌ˮYw Qu~ɵd\Uwx3)rjiۧ?Xbn"ى7qM[[ldO&^,TM nzR >`ϮGb9Q 'lF݅Uq>%m-up,㪡*e}'ކ ^M}ĺRR$*:&iHy"AD'< Oy"A^{ܸ);Ba1,3A JadIu5 `D>@8'E}L>O] /ͳO qzjujWGg^|T^O||[hm<>Dn 姅wkDNAJם7aj^ bԍ`ȯ尹"iN˔tirwu翔fEt\T*^(JԚPnJ=]KwYfgo. ruVעT+UEyy>O.O|/?k~O)?Tjs>/üĿ@8K~K51&^  Qq e57iVM ;_`k^1G^ÛIQSŧ#?I&>H嗘ޱM㠰娠7Q~]%faY׈G&nIS\6NTa@4XA/_h{'bt縺ǝ7zM,G=:*1I9>&y(VQ_3 F`)qOD1f|,T.5& o(]B[Ac*01!OXEEZLj!-"(64(2E4M ?+ 4MI6HSTRp_yT Tx P=XT-[t4*­&(tȮl42P+`O; +j"І9ހzץߖG\|2ֹ{ <`:n>bþ/v!v/&x5%}CO 'e.qW.Jh7#ݣ>]Rjoթm[+ I aݬ۱Qyeo:' }mS/9|=W~LVPl ̿XѬza7ǻu-ށ\_~~üBrܵ<';b4n}q]3(> N`lBSeot?μ\`aPibEkJ'diXmcMfugqP;<;;yי}ݹ)L#Q+&'4*qX r_:3~ϸ=$vꃬ*JY~fWR;RVҞ2eK2Dq&L -iC:{E~,@qvK H\Ba9®i 0%`B<2ZlݶЄav]~ڄFX-7V' ~a`r _҉I1鳷QQמMϋ ͚[c=q۰Xm9ckդD:fKBȮ EFp⻬S|ZMзp8# j.{"9`/V{Y&Vot{YrL466J`sP*Q2Jf"_K7m\LD"EkXՑ'HA7>BDn2:tINmhX.2E%E7ݣTbO"@cti"2}O胉8eep^ Ed$۷O9F4VQ=,INȰ^MYj_<ŒȋOu>Íw@$&2"$ "SZ:7._Q)b esi04EK9tI]VϋY(}DYhx1& )>bd; L`" !SZȯ̏Ic⨌{9Ru۴2ѷOB1 kA7 0ͭ2SW `)~fp|,Z:a(}iy<'Ӻnh3V&}*:q_4F7'|( >P>ɦxh{-U>OQ1|~n AlPf}ZC',Oiw*KV mJ&SZX϶^~نT~8ⶽI ٴG\Gђ;ZraG˝^ϨZt6f,o8!urv:' ~imod4t롷J [OˋbRwu3T>;\ج}]PFCioeC#z&t$9gendstream endobj 64 0 obj << /Subtype /XML /Type /Metadata /Length 1658 >> stream GPL Ghostscript 10.05.0 2025-07-01T07:57:13-05:00 2025-07-01T07:57:13-05:00 2025-07-01T07:57:13-05:00 LaTeX with hyperref endstream endobj 65 0 obj << /Type /ObjStm /Length 2865 /Filter /FlateDecode /N 61 /First 514 >> stream xZr7}߯cR.-W,'*{#{;E$nhRKR_1qDK-T# pq`3 L)\dFьv/YyŤyͤyäyˤyǔ1Bc) , i iQLti1$fC=2+gQ0k ~%^H6_ -Y4I<N; :g$4,F Q%y<  PQ )u@ACL (-u&uvQgd$%A&&E0ХvR*)RCHDP`t42LRFYi=EX$xPTR? 4* d"ۓ'?[^/6L2~8[7?t**f>[kw'Kt7UwJbz>g6,uɪĀՓ6=9/υ0QW .2NW.wch BH@c9AUV}iUgtϣDRX( y+JdQ˜k^WNb٪=ד]]1l-1<7WL*݋Ȳ+(nNgHܬ$jh'Z^[W(ٵiuv_;ݛ+!r^ʞѦa<"c1w[!PvVMTS]F*ٍab8]_lے j˖h溢hfLͮ6bLŽ: )[u6y3+u:vx&RxJնzdtuTp!vnmL얶V_JLa,ijAWh,1vaSxHӀxU~KtoڱV"G=l5Nʚmu mL:jvTVfI._ͤ8 %k'u$nKq4dz[D=~˚Ëޜw|^5L>:zy2Yx|1b<-.;[<]gmC2g3GfWB>'קTꯗo3W2iWJ+Hogg5,^Ψ=L]4鿓~f*E$,zkްSJجJ2uhwe͘Q5Q_2<]O7*7z^..s;)7??#?'5S>%?o|?_+~5^_ |&y=O.LJOгn\4ټXIRӫɇ&ʼL/9[La')7YwZ~u^GfNט(MKޖn8b+i~[cJU؁}l#T-UM9*W3}sRH3Kg7`2hbyhdMJ{;lD=;;=?&3h⢶ʺaT" &"&CTb*9|x#)WocUQ6V%gǓj:+WiО*ާjçO(YJ™n~rJOH# A`H aha cih-C~X,7{'Eᕺ rEo`H4a - ܽ۹*B11bg{<(8+4Ak@<T jxФkcSEp:p1h 06Ƣƿ :ulEM{[՝Q{Q n샂B,<"r":>,4hpۺ kl`N:g)/M)Xl͸!º'lx}2dD˶WmB$u؂  p26m_{ o_4rQ5}s\r\FuYLdxr mcp~_GGT^f~buD@Y5gB&WGD؆ 029cdlnPx_d蓟qp0G[b&wg9UBs"{g's*+0 IY*ĬTPxxXhS}AK&zr9@ x<6:v3"1hľqOVM ne]G.x7# ``a>6Y}}, >9]s%bg= pѐy?#0*2ra4ˇB  1BPO{%YE22=24Q' fsTJ+gqyq='ǘUI#S qb:y;?#|vaa2|/} >L})mn[B`f\sD[NcrzR)`'R2nL5Vn+M C=? c}&򆿭OEr27z)W4|}PrtCn)X6f4] e["\\ZWmr_=:zrX4> stream x]ےܸyWCLU.‰5\ Hpɲb^{ג\NʛJݜZ6i1ll텆M'_.\]=+—8?Z[Y[ͳ/x{%at2u6LWzm_^ʽif-uP)mF|UuiMQl]rhFIG )U8;? Kᷢ̚{Y*kn|g8.rJد_|ƥ/ahɜ*](" 50^KVfZOem]D+MMtKp oqpOky1|0 >҅9 XEUQJe6 G6۴եؙc;MFͅk,\K}aXUfݟ]N+lw\\:4ʕ=46yU5/CTS1:Mv?Llnx,sy G}wwwa:EenwGZW>Uo^6C/`s:{бEzp9t3*.*X|K[ Dci@MhZg~w&|k Lח />;nO@Ha+-gl2L3㥁Dik~v\*chC -\+v -J]Wهn ?Ī~T =~ɼIۗ?IPζj@MKа*Uq@dN00.t8`Ce7ÁC&FgdG(?b IlAq>ps{w+̓7#P&Q¼1Lg95sLm Hn]maP-oύ(k6|@n Tsv;3(ӹw݆N0u;>xAix$mZ9u{ N͊%7䜭s9}^pܶAy7 Bs>[xؤ ~Y=0jdb/L<0(I/F絭k$. f@!䥭)1n9(:ZyV/7K9@ |vۭ e+nc fԇ_Pw@%0fzЫ!]qTQ 0 + 3 |aMErƊELI@F=\D{ E u ;uNb ?eA}zU_̷L:U|]CC]qLNmDjP٫lڃ42%7C (< Ȳ,.YnǑ`'TRܑ3V^mB2I؆;QO(MkUw7'{NíLA3>Y`+y^Zihb%{C[F=tԴWߩ<}gU/~75MF *q 4 0&wawVh ".luA%3n+?.,E0І#:@IIoqdClc%BS\VX`J޵a?5V #{ J֧[ 8eP<@?+دhd%_+>($ '3#Fпm?摩@#A%fٜAvٹ tۃix6팬k`̱?k[""ȈǩD ˁs{n lvh#T@ӊ1f֨{z¡_H8a*2ap%0KwA3'Ǵ4m@B^ElOl^Lg +0pdGʩt`^&>Q'(uB)]*H!ߒXAo-称²䩿wU0~VAZsZUc>|vjSP]fmi]#;ݞ4ɥFG޼Z7-}Xt`_Jmm1iYiz*bb_mHjBe#A "!ԡ%²h?1crAOQ NmETq5gO-1:hMXghi/DXެl (Tǥ+ P_Dyeӧ>a_Jg?{RUZ ٿe{cV%P2UT(EW`#R^^ *SߎB<rD`QoM1&C(z;a.@8 OwS~}))Y[51 G<=2y7<`S]=`ˁ6`[t(2%H6Pdf`ЋWG&k̐&(al"b=&aZDm~ƴmGsGMF؇WѾtl5Aڏ\嗨TvO,97uo TC Upm]o@V =fh/ؙDh=p*TU)r#'J&C1Şg`!(H0v#Dۗrjd!NO=h>ҕ4*c%|;j!8l#'jp@]1e?Le4ۖ8}@䧺wy~vuS/~]>?x'uSoK^E#0WG0unS|# nOJvKڇQ`PXEg>Ho{"Oxg7Mst`RnAh]#c0*H$,(8r#zTV)p &7syRߒsƳ ƬN.}p)f I''5ͅ۾`;d}cNEiH S+ w|[dhUG*e7bWGMgבygJ{̓vh16qVUFz2PUaP|rFs]Ta?f^8a%nhS3(ΏRd@S(mi87&̡)BpHMzv5C e)zBq 21a^lؙTq'&0g!{D s&>Dϗ,}nCƿW$m[p<,ѥ1Ӈ=AK<|a%ν@ V^Sڭ.M4h86wNE%1,dU ߴOlO#DmwsK'˘# %s?m?򗣝 q ۈ$K6Z⪡١ >-Rmnfiɭ $PFTDZs/sh1+/2(D@.7h jv钁`E1qQ7Q+ܛnΉ?wݾwd m/0{KS?<;J&ĹkΰC0b:e)k1` )@X$q`c];_/~jn-Sv%XsȤ?wL) e3IZ h2hm{짟*{2[AxINJsA>MjW48 Hms'ϲF ȴfiݘ~(RI3JMR9g˩W1/B,Z+`Un&S~\hA`j9w>0WEeJ.M rJv3T!G6#b2e+-shT42iǿ)@UCJULf"1߅6{c=QxFD/Io&&MȦ [@r65- )JJ +yuAl \T8= g.^e/fo`6|C`Jh2%=d<|Ui9Gۗ {US3D਄*cuĢgJQ+Ÿ*:>Sv}>!`ՄbO29 ? šo#G!>2'e1e:$HGy\VʢW?(  a^OrbB]$1zx#; ~dmuVF"kBKH{)UsIr^@!e7݄Lܠ.4m*]W Tr;]'tܻ1jQ\Q TW4LGk-lSLC[=w2*7/(Y^JWBg G( r.E''oԖ*4ܑ8 >YzFjn}4>cap@ZxʢM@FDr [XZN-D _  ԺEUBS`TVZƂzzގ0 r=C]4!Ԅ9'H ;B|jVfv`X"HCނ]=Vct`w%rUespJl٥\JwpE -1Y1ŗ!BRKrLbY-)%, v8X|;tH !`%Bs\ތ! mKRbPF fb2OvC$)0MY3.$;̷~Fǰ 1eet?aM/% G_HA.֕_LɋcgZmTNqP]/F ^9d%,tւ|2@4+cb1/Ϧ$5%^uH?S\!%=k_N>yYNRO-lIU`]OtHʒP*mVn`m%ǹYܒ4jtH^t{crQ/A9 kUXJ1[x=b􄋥()ԧF9;$ҶAVcTs^Q:z_}D3ya_t@΀fqiHݑ#k*$ci j#¾?dT[/V݋yWG6gV &a xZa,r wÀIPch[hϸ1@7xم^d,RtuOI1̬0T`z9v x Hi(S+י:p Aӭ8ll}1qʀ!{h]Z0*H sj0vw/L}RA[`tvQ\Z22e[W$*<!'Lx6]d-x{]\2 ӰimNdƑ֎qʚjIostWD1**TFx;6+w1_fb쉆=p阩ĩZ'9fοw{=m[Q>S yF|Ry Uך|N#vFҞӴґXWd\eWY5X$OҤ-k2H3 p֪KB#9&'WQ.3+ \ 9qW:/ m eN|sN|n*Rt}?>gVG:)_^1WpNfR%M͡UB./1ޅyzAU%^ ^I CmlJRs@ s +'7x4Ɵ~u3|.p~Y_GZWp6 GؐGĨ <7WQ}o:טRwI5m(t$ڂS•Z> stream xZmo8z0GB1-R$%vKm&vck+[$')nbRKcDqg_ѴbW2<|ʹ p|'wtHΫAǒ3TĈ4`ڹBGE]G.C.AǙ x6 AD-%ye@<V^yVuvX\rF<􆊢d8.~8`92c.Br/蹁a-ozX5oՉH-lѽaMXlt+*+l~Mf(ˣ|L^g{QI\G~@Q-al}QIW%8 38 @g4I[A5*Aafm`^BszU{#6aɝTN# 0wT ́ڼ( ˍ5FqYF0- S~ٿ߼~˻Op¨΢^#H9l.Gu1q: `EhnSz~nQdn޼c&3{%׋ NQPskS+"x"#h< ؅c&'&1tqźe6O_Oe%ƚ\s +9qE-ϕEw\:r۶q5# u8k$30)g|/_>__8"w(ZtfEnUR͝(6)$wOxn6YCu[zY)y<4]FGEZ{:D@= {e盥`$:N\-> p%T8$S7"TuaRߪ4Pj}>:ڶhh-n%ڄ%D Dԕg# ʼn2G"7 :9NjB`IQaѻgxm43@Osm%nfKGzAhP|ȧ%4x 0etzcl!%yGC۰\4 Ys-30[\7Kto%XFan02>gЛrh[󁎫a] u@`ؽN!:H?%4)42p򬫧3hԇ^@u6 `.)} U?`JN$Bʶg3-+W J.Q͊D$Uk0AˡUGJ޼}_P,@˔t&\zLoy?RTAm}Je+ \.o=3[8>0weW ʋl1ZsfV$J}Y?{2(Ť[> ,̾vEc~PB.gjBQ>xru J2{eeY?5Lf7`ћ˦ظݩ /Ӷ3lމve$ВWng. fzMzk6Zz~vv*QEћ-mHN=]C E:oyzbCE?1*Ce%|@`*Ĕ|9O‘IT~x2k+4 `oB<)DPw7džGL'GX\n~6匂dzQƥ&B-bgZxRmaQ*2y[5LfVsMu=Oǹ",⼈Gya(LoY_Aԝ-4n4-FM[dQ(&S5(ZLͰ\XДWڮZa7vlfTM<-3ܨlqՌ~0 w6P "Ic;&B6oÁo z%;i;duzWW:q՝k~L`˺7L~σc&X"j. {'#T%f^YdIjD%u+ A9M3kgG(YgBP$_k[IHsI L/[Lo EEcn"[lL 7S (``%_#_ Ф(afwM7ȓf~8D]BkVsm=" ˟PE_M> stream x]?nPwB7d}jxKdhQ,=" 3%C mz>>=}^{s_:֗e=tfZu|۰^gg^7mXa}Kۖ> stream xWyTSֿrQjr@ $"ShH:lآDDD SEAl_lݗW}k}|[,θ>ÕPVD"Iŧj qCpoX#-KO" %}C4BJ O%7'a3Eyl=?ߟO+_J*Kû Zxg+LZϜ0"6;Sjyj>.?MJUJN9jOj2TzVu|*U%ea2Wsy9*yK^˫4 Q=Yj|n"*NTzh 5ۨNՋzu*k3 mz*+ 4%S^"*7Oe2!_d)R2JIʫ:57W]d5[JS3^[u|4/:V^45Aڙ!y:}~ĊȂԨ´ ̸9s ]oLϤɾSRhj&GfSOSsy|ʃJS ʓZHͤD*BPjFM©ʇ&Qhj CR~5eKPvrS#Dɨ!G9Sè R鄰5ZO @B?-", -Z-ibYayW+R4BVzW ?m5ƕgGhklk.2.2WFyi ) *#ߥ;rK4jԄ*/ lZ\a4[RĪ[9ݰЧ $QcX27=;s㎂X'a; ?k-&` * x^2N~Vntw|or { >0˟챢ZEE² 5A# \$MM$c-d~>2]{3؃ߝ;YYgD0QbZ}y2t̸АOPat(%_ :C FͩK@JK1{r x2D[yQ5E係?f(̼*k3͌,[6Ua4}EԜ V6c"|ꖨJ/(+<=X@?XHډ;a`mڧ-v+W(* ] ]WK3 "4ˋvmص9M~6P\\_}uǃ32ʋw*pTR=|/IVMWcP-=xu>q@YybfjWɻ6B%MB#JN SMah`0`n:xYC2 $"4{&9C(ci,1* A!aQjl &"060s59 stc&ٻXz|A!߸o{ @¹ҬCp/Q+o*K1/&#W<.C'83:)'a_Gp|@ #Cd\zޗD(9sd<1'7oeUdvD@()O5riTĐEן=17 og|Ia"`%J#0RiXl$lb(3׭/V$Te:ZWbW!o@65Y b5v!5kơބI0=v+(D;)WlS8\Wь.-3]A \-\`8x <r 1aB_u0S <9r:ܢ2n} ].ԍN8bkΜ*BBz~e`WZkLdJoyb+/{Nʔ(-Spxgح-W+  R m4 #8W䫊 tED 4ַ9z> {䍨[ppMuönSb7ONARaG?K~RIJ~tm5[6[K 라d";p IZxSt ,F|7o6DY1{F`f4oX-OB?&O ltVD&&ϮjY''٣4BӐs,$<|Baq6}܂O~?uMȋnr>yw #=ʕmWˋ>\Y|ԩ:uM'(-fı``RaD4" Z9A_]oYR:a~e6 %lNK{t#aF3do[1wU{W!.֮\SkJ=[_K'=cExHFSz%d7 r{U[Vs⹩ML7<K/̅Z6jQ s}_N:2<)K@ĽإF*~z?unq "}9)*R}I4= s›œ8\"?/!R؇6uXz$N\*֣'9+\(dfZґԻzzk:OU]D}P&1ӡI-meP`1e7TvklwWC哇rShZG]TXr/?34 1(}l7cgـ3$]X{Hi3a uHm.7vII,$e 8X=^ G; YwN;B4쎰 ӣp i!E m,H68ِQ$ B7mp-yc/bbސ?e?I]7}Aaqkxe[>nDwY)RH.UIv=&[MPHp_ji7An@MЪb ɂi5dO0 YX˜꘭1ldARN@x$Ž{t^kx>Eum~D0 T^m#Q%j@ d~c:iCO+־OGH[actǽ*n&!-JD%jθԬLoP 'x Rϋ|.XlewX8pLzaɓtF짿n> stream x]=n@D{7I}?! l4.I.@KC)>3#;E!} uyk=,6׷m>/pnr^rK>>qY>gy톂(m+PT:ub:֢V + jg=jEA5V/ AMVy"i, z) u) *:LTF*He 2Q D&*#De( ji4j8ld6𚘍̆M;w6llٸacƝ 6&#cr6.#e4rظFȁRp*8] NK'F 6bBAB#@a1  QD!}A QaаaBa> C;wl9s`vpM9M&\SI߄k7pM&})ߤo5M| הo7M ܄Aр0}ۓj_}bTXu#\yv|> stream xXwXe:hvWBbWAz_t&M (c ECbMf\_gc)sFDQ"hj7{gUt-}4~O p1=ATO #x&z3o}{{NrwNC*?g{ocJ//u:~~{tV(]ܝ^z`EV*Y{ZuuFsW7Kw+M>DWoL }d3S$j#LSK)5QVtj5LͤYj6ZEP)]jңRsu>GQ|ʄZ@R "ʌZL MJIiP#hJJdT5(M*KiS rP:TeB BOFEԦ!ǫ_ F;y*XwA'9(y2D{rHPЃC3V<6#&M㋑;(QG|tTMH\zQXɶ˒eŲ4dnĵiNܩyJ N2>F#_7M }8;cI;:$y_m!b?'AuL67$w0uTnH_{&T1!94_|:Dl] j/b]l>A:[x$V,?W|&qoq.i8`=|Ut=oP/b(#9<~4<a*h? 1g<^K05->^pyKr\z!Pбl4vcC Ad$fȂ<82pl.HϸLI yI?. Pheu5U!Պ#%cVg# v qZ7䭙ѷ=ne(hXYeפ=LKeVrYŘ+_Lr6㇟Iub5; GkwF%A,Ӆu#IPhF~_ #GoFO~g0 0/=d.ނ fcS!! U-dRo@p)$+tx#}r!fCB6$"DTI4E野,pD'Ğ$5R7zQK[& naBҸ*`1nv̾U4^ )JNiY]"Ri [2:9!ar\VUܘ#'̞IAH"A(怫UIJjC"zsrTy7okWhBr&91 U]̑9t823zfG09-&xŻsNw37:Y!+]EB铚#|LbM2l.[~£9-W"dU,n8YrXlqygu"KZ2__pxvb `[ЭȑLr|Ir<bX@+7IV+#$f%u<$_G_Mj6 >`?ڈ ȅ9Mxί..=c%EjF*P~*I!…SKo&NJ_A96WZeWLL"z;ɹrY̨b풃sh~3;h򒕝 rp2|M6 q&wAIqdTG4 E|8\؎8XoB_b`5ot%k]քP<?CQfNK]MB0l_֊2/opfξO#GAJ[eLch}OX0qF_918x~$)|]zϟKi3kK%ŶUAX%L9+= vv k!PϾY? Ko1O-)8LN“vsdb9rYX3j)VO~RQ:z wŹJ`b բL>L7Dh7[.`QZ~gǒ3jvc*0V_J'qẋޘ 5|ѓ8@D>ư` XCw U@:u~8[~2ux4o4Ú{Qq9(W*_h`Bq bx#{OlPwբ|໊[٭7tHht0 QpzsMrCڅh܅CןUOU.>D&߅ ~XfˎFSkgc|:Lhm-o# D|3q&1fGi S;}sc ɑ*df]be<6%؍ TqGHjcH:럅*ҪgIpVq؜:CdkDtQ[s~lͪoa!+\\#]d0Fc'"lj?h٨g?ˏN_3yyWӈ.`߃Ž|] n&}<Qz.7Y: 40S$ft.ka֞5_̀׮^a2)/_B;ƣ8O< m{[Ej}khF #y_gVޏHO헾?՞{C r'"fucul 0-rYsPM#k&O=Bb«O4a]}]x>ƱgE$E3(%MhϮ~]m# T7ۿt_W![Ss^ěx:.,\nyP1ӱMc&,ЧJ»|lݪi#'=-hyGN6:<]~֊&sEIa)nlyMyA=Fy8QNRBJAѥ{KĐ'Q\{_t6+r?(BYm1XlYu[\ ywc@& $2Uoӂc'(\2 Yp 6j pB%~6=p!KMF/Poɒ$fT?="9Gg9 tͧ1½`^BO /Er\3:Oa鄇*T[N[`߃D},m<}<</./=IR8̒L|Ϭ@MN+ֵy+BKC2^:#, V*7lZ@Ƭ57^h~\y26XB潋01?j$CLjw-@dX{fY;SH`isFbet0g C"y"C=nuue_T^(,Й+P+"U\XLTcwz=wӍ5Mɗ] O*`'lـxk0AyST$K c)8c.8{vNa\Ymmc$U_Ewo d VgTzc{ ߣ]LBAh7^GCGˀ+- ԊoyY,of<8-2#wNjrz-`wHͺJ ȸNt!t/<9p,|ߎ pIvf#HCpd* ɾ{{@GASx| wFsYXR[0`:^@ ^+U[t`vɡăMc zt|MDl9eQ@iiQQ鉀"w`Re#8! q {]U6~.Fh#DXVXN\G?N { vMש/j@''4?+w{Vc+ oAA kp)j@qpFxELĠյtweU>'܈m435܈,$VeMUNJOe$dD2RaKε\̿jPַÓuI-}o/d 2_] ;mxԹsm`{痤3}|$=Cpoa l a1MX`3L .꿅uyȟ 5_4hćy4hdj5Zʜ,[dnHsj"u ,w;EO!zg1%ܲ.GxȤp2"u-QM^ԒW.noxB#c#Ii^4,Io5\vZll"UG?K$, {{qTҾh4?P9 =^ .´Su~b^컽hvC(1/b?"wb$F ^wBKkA{¤Cդ(nM35 HJ T8>w(&1s ,~ 8`=ڞQN s}UkSx3]\sLL_gŠXvo~ޙuL{_zɎߥ%3-8=nbr^{ 9 IXwԮ|Ջ֕X3=MO^B36d[Sr"q;1;k>[-!#4(B'ېnW*e |N)U# _2yRw9_vMvLr?']\_5 4ߙofwx~},5IA8W<VI@ Al;?8F /m`>lyBK-Wo^ P1l< jRRPbOQ":=`񶍳]xZ ++myyz?^V[Ig??&T"5uÉ$y!4y•=[?Lg|JbhEfT~h0?~wendstream endobj 133 0 obj << /Filter /FlateDecode /Length 596 >> stream x];nPD{;)Oq1$GC) >3#9E+`l 3~nw5e~ڜeufG6ӏaP{~W~ݿ4^c݆Nm[N\vuU>qzr;oE׶D<~{.:3Xt#Ttc-:8"zL->CEx`gC4F/:DgC Fp{q@4,222,222,222,222,222,222tzNSM M M M M]4."'E$rиDA"r9h\DN"cggcg@g7 {`o3 tzPo7 :C^8yz8yz8yz8yz8yz8yz8yzN8NyNzN `0L&RI\ 0 K&p)$`.L Q <+bGt9|J *|fضtYwnV)F6endstream endobj 134 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4536 >> stream xW{\L?cs$;r B!(tn*VaWOֲZإ aSKTLh;hsL9^~^sLy?# P"hWgGO_-̍E>'\om>Θ B J,,O">!b}HBrq?yWWW36cE|h2ȊMJMKMbAdX[p6IQ̔E-,#B&=fjȖ|? $XLyBKh،/ߐC O` ֨[5Ъ1&CiʍaH]k[J\}< fWŞ=bq58X>ThαoQ4OZq!'m\D' +ܽ2~Jl"P۴J;C GRqĞSm caLxȝ{}lZ@ 76.SwD4b8q)lh,;+ ~l>Qѻ O_&%90`A=X@500ֵԓ{vPqf)qJB.wJ9/Tg4 _ r' Z3T7NK@xM-;*+ ?\#~ei p5=f008<OG{ UN ҍ|^ړ+T:^QlV7J-dQ=9P}؁o/iECXiƈޫ{Jߓ/z#Z:ļo} MZʜPYxx=dknڻu 筎ʧ6*3tTÃҔ[eFp* z.$.0r2PgA&+[:!kb}SƯ/.~Ẏ+a['R e"}k`/gߨwe<3Yg8*jZPFփ!V߻b&sz_ S+rJ&Z-x72ARk{{/ɳbߔ"/^1U/U6sO9eFHeկoHFct6d`G 5]g'=}調 [>Gcrhk07uL,#m}szǽ%bTW3(!ko&k'-AެzK=XUz|G7R 3W$-4~jxG޽ۉ=J?? :ՇƵ'@^8Hx-I(Of/`٬EibPh|Vi(QmQd1Sa{!Ja$ 4x6.'?}ncg06:Jv؁|?*)KK> "a-6]ZS+cΣ'f?1`AQ%>(-=z!ƓWح ܎[w#Vue R8F5^7r8[b[s\!Nz於AHg3, 8QjbC=-YV>b+kO`7Dv~U_F&gۺ<ĺGDΐ;zy7閴K:z{=T`J^uI[A.}]WqU Li#e PUSC; 볫[ļ=0ćgYr|"k>D}6AeNZŢřs|;i2"%zptK{#~ :kcS<8d}|)֮*&4>=cF%8=sKY`8`YvbA$2v#$ =Bb YNI_] k#y(Xjkf.͜.r UWi4}.˳n/v_GI6a:c[ 0ti/v5b+~1BW:Yp8h֞DɺDXN``|dbadvZBl0`e& /"Yws`5O#qsvCߦwOq( dE'NɎX7MC!*ӾLEY|DDx?1@U]|8S=:g`Cm8Y[P)|Y dL uuCvQ-iY2*|C_Zs TFWcB$0B!8gm$8#+q:NMVBɌ }C"Mş+CX~-ֿL}^hS-l\ 6I=zv?Z&vk/DG2Ŀ/n=M33uR1'Ons&G{ vip¼2+*k^,zo"V-g3FE]c^)+O$OЊ@W&oa9m銳58{wGZI+±$6z6I̟! Gh/ _M@n?wU0d3-[1HӁH`eKLә/`(4yxN# B'bؗqiW- =KZGȏgp sغ\p|öm@fOJoT +؄~ ~ b(zo#7Ɍ,gC09U0G%d^߳^r͘R): eb8 |Q`J\xD@ ¦,.hRq* [Ӓ{y'>OODĄK~PzWD[-VNU $aQ<<'IG@Nu)_W)t}7+_^n&p+ZTyT> L]ed8Vضv e>ތOhٝ .H"m쪉 nKmToewSB1e_w΄%rǾy8 4csl5 Bo;됢‘kUVEMT>BV kA 92ҙ$ \ip: p@:DTBI 3o0E<@) ?nw|옿 Oq4vÛfcPϾ+ ,gXb1d(::|J‘@$6}T&mJL97> stream x]O10  ]Z2D! }I$[.%Mů F0Sau@vz&.ײzCKHQDQmmhg=Jmyp8I.~r 6/YSendstream endobj 136 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 222 >> stream xcd`ab`ddM,pI-Lu JM/I, 154ɫf!Cɏ<<,=< }E'R#YSD! 4G! 39#(5TG4/%H$#U! G!'395/9UarCCw1000j300012h }q3}Uǿo {U+gp20Q3endstream endobj 137 0 obj << /Filter /FlateDecode /Length 343 >> stream x]1n@E{N X0ؒݸH%^€0.rS+={w2t<Ú˔laM%Y~0fewCZ5]9+o3[ ?ZY6ʟǡ4uvdK;^,ۇ}3UljsZu +"4`]F&Md&2jl OXUdF@Aa!B5uJ`V›nwSd/!| t#H##)ToPtVwV*՝JgugYYtVwV*՝JgQ__ϿOk0t_WŧdoiS9ͭendstream endobj 138 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3241 >> stream xViTSYxC4%uCms.˹8 3@a2aJdAQR[T- zz[=k}" G"bUa8d{=NeMHEE,tQeOVPJݑXqDaǞ=A "Z,+#Bb **6,HLpO p$J. SAsm1 >TD>T4 !nabw閭sD:[yb^7a1Ŏa۰cۉ9ac\7 p_`6A6],>+xѡEa{(\F]qK/}R lү6z|e ~oß', `V^$` y괢L< (Hq ǍAK069My4Xkt'B$D,[)wr\ L)gk:[!#=%kT3GDSm,/lvmE]͠I0"mqj#tNZ/2^`A)Nz{ID|Ium1%2GkPn h!~;3!? ߲,6wN `%?q $:o=S)k2@$*Q@>\5O> L5ݠ3#Hcåˑ ЫVܹUяrT7j̈I7|Ze e$Ku*@^X#܏ֱ IjpQ1ݙD;$D gTeǃD;rr|xcс A3$P4Yɀ4 Yb/z觉2Rp\iPOolŁ( r> %aq!]MeLC[D#&<"4uD]R2Gc;w#@ UY/uv>'uD4eǥn9A6^-]b{o3|L"17( .lү6[pjDg$ddxbbåva Ic2Fh>~6 s}$Sycla x~;YFB&j.Վ֔>F`.%ۘ[pPh?`Y4mMR׏H:d,0(пDl6[e}xX>ѩ)SkPH@)Ef]. 8CғB_hLEyy0 ɧS8"W9RByQO <"DnY-If D ":#s{IϞq V9H;\ę)/d0Qr'<ߜHsQGxIDL=)jua#_,/<+}2n.uXtS[DHt*, vH]G$b:=oaP4뭣#שk+j?HOAΜ8Yۥ 9B 0/͸̒z yw3Ku.3ǹ|?LX5?F0-Uw 3 cɹm NMOv@>(x b~ \61}- *Qw\'ode')4޽)j?琑gUUyL.3;Z27oN&0C?c>BnvݣNx: g倄6!;{?DkZ5R;`LJ ٓY<_WgU2y>I0Z,g&3df<}|w׏ǘ|)*zWW1$ogM]V}Zu?o;:j&=GC>̉5q Fp':&+(.=80}+h1:X;+U:z ԍ1C;&g㸐8^{P檡n22C9jLuFahy9|].vx[.O+ N{|zR/e9N)CPW[[FP{,cTURQQo6-T| ߟ)q;ko??5G|fW.)ϫrA”,(LG*!Ƃ-^|R)5Z[[[bxG>zvNFI֩VnR@ Eyb F,50#ߪ^ M)@+oT])i`STU\4Ana~nr[bnBWex0 _ktꄫ?lXDޚ$&p¹YȨWVf95INl;o*'1a>ݣo C,i`dq[@_8m5z` [#[NnݵPe9KAGOZƣHL͏ƨG/{`<9Gh/l}bn" `* P.a-. p d%11n4G%Bnb5W]ʇٗ?_a@endstream endobj 139 0 obj << /Filter /FlateDecode /Length 282 >> stream x]An0E7l &dѪj{0E "dϐtų3)O%O)?9~fҔǕclNj3Nq{/Eyz .pqYV?U{QG/}W.:kK _+TXZE@GRGсusZ֣^:{K+ߐmD)P'Hіh+7]IFQ&ʢ(&F'yf9 `АAB L56y=d=SU/"U]endstream endobj 140 0 obj << /Filter /FlateDecode /Length 595 >> stream x]=n@{7}?6 lc7.I.@+C)>3#;E"|?<,[]_֝/˼6^/n8te}&۸OuC;6t:Nm׶;}=uזG8?z8TMD,UXj1}jjtđqĉqęU bcpppp` y)I o7M&XSIk7ɛ`M&y)$o5śMx o7M&p$xBcrӭ[ei. j4aendstream endobj 141 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 6146 >> stream xX TS־1:#1 bE\ǶY(Z!B $0yQ'Zj~稵V[kmk; vZ9ws}>ʪ%8;ϟG;D~ӏ+LߝDh :5^mښ [d{#C||gΜ3}:oitnπ`UX /{3ȏ~=}weڻn\au'îz)Z$he!+BW9*V)W^&9kl\lxʴ3v>sy^_8^\xj@&PFuj5r&S)j+FmQөrjFޠVR3)GjzC9Qs?lѰ'6m+5tcĆ #'<3mmmmk:J4jרgb{!|5' Oj 5I|yRS~(>1))5r_J9%U|D0.U"zTbËa@ 31Z:CMbLCEoFJEdrawq;vF{ e"::m~w>TŭƣV(QY=jm &ChyRp\,RZL(Rra7x(RN\ӈ_钗m@alrA8+EdWg]tu1z!'H% }s>r)В;*rU]&Aiս廌^/TJzXE'akld XՓ`.ɕrYtG/}rE,1ަ'n/!G{rxkiq57pl]eCyiG5pTJ)QrOQA:XUxcD?1na&k7?p3lcwT/+yz &;蕔۔A79y1 |l%#f;Z5ds]s˾L O\ R;`;{ZBRգ.a0ØYٳoohOQXP(' Vi@52RM^U[o Ӱ $o8R\a/>y.n4|^"ݴV_yu۝ ]̇`=l3pа?|cy)EA0؈QD1Nޱo6Zr\0&؞7(,ONbִXF(,O0b~+x/0 񁩤+677.}Kv_ڙoSjٌzc5HMK>7"%6i/]E/ VoHY]z7mc|:b*S Cbf5HRRې~{U~CdvH/h7@G$JA] 1;?>dDZdMp n"G/h.+BMUuya6I+Hm!(NJ Hg<~Yk99|nVrtoM3XC{ l|i/r^ 㕵f"OBCz- :1=ʰ>82+`Y,bLxRo Ga0ڔt0o!jlfZY!w::Y=Y|?(ɉ7qS>UI[Qbs@p^r!̖xej1=jP@P_6$A |K[^-+|HGDtj&͙RA8Y̎P&GDY9D;&`׉2|\朣,sɌ9Q5=xm}.:Vos@8R/m5M G,?uUG֖6d2ˑ1w4lMf$q:?-u@vѦU2H=U5:zGkG׳`DyI(χc0֋ګ1,P>watUs GIsa8D0'z\P ޺Ppu/[5ccQmm^ADijD}dَqwQHثcqI D"A ͕?WĐ54G%h1_QXA *}_t4Q,(˘T.;xmSlH>'5N\SO* TBj&'(;0ħƷ$P F0bMˊAO@ M˭Mk ͏DLpdܳOj`2 5 \Tͼ X@ 1H&iv@̛+>8 /+NGY\e6]W_[d-=a ?X?#ɜKr)$37/i2ëlc^~6]3l :1衫y]XKH/5@/Gc=A (Ύ`_% EV1mB/aLV8u*IGS:Yv@u<ޒJZ]?xguW<_y-<8EMn`G GJdoC>Ab*T˵9^[+SK0X/8)^IFD,lj֣0pFqKilX2 ècjE tŽ>F᝹#R8ހsw#Urp5p]"G2vs[rqcOyt(Ui:! 3Wo翆x bӒӉ(%fQ*3T*BY0[WiNhFw_$4DqՅ%ڜb+k9RWw[;;;OtweżsKw>Ş'%@o: jXGח/B!ra _D?%Gi>PtIecZjR3ɿO6ר~S^ZTHW"F[@Em';9$2] ^Wo;} m" {*|}n"z-6AL<6(jECCMM"5ȹ~mD)jION>-y_jfHD#5 "-%#VEy9-V8IŸPL8-_z uf)}ґfVYdan֣' iPjj)""@+i<@o3-o4<^?7N(@Ln;7ILp$F^pr*#:[K݈kl޼,N i,0LUfx;ӑ(63(gy|Yk|m~o(<+~%.G?y!4EO%{h=R,>{FpX ggMw!\7sKijsvHU ~rR )?^r-(*'--;2Bu5Pa qb*ނq`JG6cǰtvo/PhAGqv_Eq(Y49$W214h{l`'ǽ\s:'[WHj.2T\%HڂKg%n ҍnIt"JfA;va@&܌gz]|.nG[sP>e4*qD.^qIHeT y)ե#ĔWԘiӭ;f!Izh?HpO0FbUc1O2 t!tdfO$.u29cw^H'2OOFLd+0t!&e&hɎ#U(!?6숏u{Q]huLIvvFF dza^A.{ ΰn\lX ]>q*`+劷n~;j6WOi]CL}Ne>7$_Vgji@vզARҖe ^Qu~` endstream endobj 142 0 obj << /Filter /FlateDecode /Length 5360 >> stream x[[oFȏ0XºvII$y@nJTlkOܿRE-Ő$U;9,~g A~p˃>͝?8= \BfNt7qޮgZ,ϵXn>Z,8ռv8QrYYgE(WU͸@Z xz~MC Q#4We.ߗuS5\׌W}Kd.(e#WjM1^]d,Ũ<3/?pΜ,evҁ Mp^$z3%ڋeYg4L/ySx#99oWuSrXV.HC)398`<.@:DZ_ȣcSk yIܥs *N.EX`nv;LjLM|TP2mF%Kx23lUn3mkUObpB) /zH#<>y X}: mjPfƺ3 3ȳJHDh6-4ǡ7?Kx6k[ M| ħJ(1 /Ɋ"E;,U_2*8\{?\e<8 @΃]`N/J4"0 @YkL@(:xt)-į37>\Ű6 {(`8mARE4n&30h̛iidڔuI+ٱ$#HBćdh*m{BϭxwGOΪ8g wu ;/ti]KPF Ѱɟv¹ .R,ڸgHWS&E( jѥq`:4N7sF2R&A 3BBv'ENY] ϫ߬M21$yYvMNO&Lbz ‚a_@sy0J{ @~0`}G9vz9V<65 ! P2 E;lW3΢YT{Ԉ*k5gp]x勶]r V8rvlWYRr.燑)iS@E4R\Oz\#2 L_MiBc]B~SwXW!LE*6]=sDmAc i0WUN%ʲcj& NBí`tssxKR1Rz$%s=Ivi*@| ,<8̤(aDJq}8A X!InpHH8tw?au)HڹomGc}`L65Cke)LT*肛 w-n~P? ьW & KB co),_5wȐˍ[/u^~w[GB-#s9}HY 6O @~y'@ [4 #y⮖}{\b5 h8N%~4HB7d،œSd191.ȑrx cpI|Gd̈6@5˪/&7/M}bQ*bKn}RA=Ol.#vBk ;}s rK#w6nb(\9jl gїXT\и0w:`4UȎQ+T4df#Pɤx ;fClƺ9ԤaSle<:@`>N}=*/aSB51d\LyR/=c`Vܭyzz2.oS8P-CRUy \-N*d s' 0Z""wGRcq~YEk3U@O^a95U}Kՙ&ATF@u+(Ynb ҿ&^eL%͐k,?YAl+x%tTK52Lӡj"u6yo` *xu٢XKB7eo,BӾd\{`058U0?=z7D8P]7 >Qbu=~dIX* :|fТWmM 7uv+c DeRa-NV ƛ;ii<ӵ55~] ^>/L] {̱LP2Me2Ay4U :|FzO\2W ˎ`y+*}Y<2ƻvr0:ʴ/\4c_Pv^Q;Ii@xki[|>t ȸ[[sj|+`edNyJgޱr ب .ÜNf ?j3>5?U7wFȂu#*r] c7]߿RwMC{U.-q`cMOG [7P>)ʊe8 ώ-Ekhj>b(7(~Voغע:2Ҕ7 cq7[T=ͫ - !DA`zL~7xH`lUFmi`Cv_ 8gpP|Vrch!J3]؃CPURfA##΃R5N'5]4)rYndÌoʾf1u`)YJɮEcpLJx8wv0Ξ8Ĵ# X+N L1k.dg 9clq+gu:#{>SCx)]<Ì 9Mr{t7xϻd96;NRX fNX 0$ER>_۲^U/7g3T2 ļ]Ul.Eղ:Z\=BOea[ԃ<( HfnIl`5̴ϲ&'||@NjD-uN*;ôW3Jҡ dWU+9ŎgZ\S". bq w{0VEp_$CeJiJ L1YT %(ٖ,@ij@hO\6 l'pm^eCrGy2s[ޕxt‰Kqutc u3J}@ָWɡ>,(xiJ%en`2̗&:T V84Ng>oEns-`-Vo#J-tUI&\0.:*/axn2臒Otnq7x=q|;m:]zou=2՗)R"|4>=j!o-'5%wyS۾,w*)@$6Pe!5M%X}x1c$:Zտ_&aSm k}_$bqm1PP 9[qg `?>=,!3.7?}S9 R85y2bof`!m#Lj}FKL% <`t> s)Fs@) D㗟+ pW5dhkF)F/nr [m!fyWl48WcߊAܿB ;u7i"-~HcB0vT,Ǜc  e<HYgLBbWP)1*"o' 쉡ƥt%%n'FkÝ㴄f| o@M( yl/(_le@2&|d uC`ϟ>!ܙ*R_+,7%f%=slu0t|l_Qҡuܺ q QM* 5TN8rTP*?WKad[z@X S bh> stream x][su~MM`M " 06)ck&\2H$Hi$"͹t nwNnsݤ*NqVѼ^oWB6v &*64uq@cLZn޶vmrYiLj20$|X;h3I\d)] X%"ZWj]HjaYd67??wE>B2ucp@ 0T@xX Xj8DGj^sof?2%aÉ;T0Ez3u/? /p&Z}w)RUohb1(śE-\YoKF.ztseyL  U}uk ?2o+bs 2fMQm3Dǩ,i6%+M F~rwWȨhoݗy;NپZ-7QHL h D"|z {j62'|]}nY, +a [lYJO4}`#$=@oɤF,Lg)eEd=\sL* z?~z374Ac osӀ,x&_͍!wjA2:ҦEƳyȳf?8>VQѓE K^-Ғkw喥|=2 lmʒiGτsϑON̡12ڗi46 ~mjF`1tHKb.hͪ_Tļ#=%AN%  /r|6u=$" M>>~pxᗗRbi;QfѺ MBQGJNz`c_;hqC]h4η}޺khؐ.j*h,SN}`t>:T@)N,FOhw{$=tS݃N9B-˜fe>L8p %_v3D&(f cM /?xI9#%xyl9<םw+`主)d3[$R䶙x@a[WhH_n;lG_e Ŕ^Jh;T$IRLrDD+Bjͽgol(htM?L~xg O+f)4p6A󯕝4O/RY#=[PnE#Lɣ`4\<,>%>i,EWռ*p_VL3lnD2,Y}SKdfFlϽhQ~ajTQa;A#aC?z`ZUQۊj$ʈ2+I&䢞>É$Y;hnݗ3|.#DH 'vȀ(`iGϤE8_s""9B +cm#saR:clPϑrQ4mM;Pm `96AOGFbn37Zc9u۱|2TEQ58P-THRj z_-ݲսA iM2T9 r"]9ܺw ঺PdC!it6d*`== %4]AE@TUW/jdV<@}e$*fu;K"yǿ+Đٳ e#q_/[%2c~X-Z1"Exɑ=0 <$H}G6?rw[/\@,f3О*9y]Yoj9oMJ,3PzO,+R4&U.,@K-LcaDExQpMw9]ݒYh@г-eh( ·|Thd Cg>I~BX 50M)1_g#Ἄ$u#I=)2#ҡHku*Pa#'H p~֡׬-):C RbQ¸b+u/P3~ԀfQFrFܠ*ԍ7jԾ)M]! @Uq]< nY`8 _@cA<TKpoOo혗p̀2aa_`*M@0vS48EFiy3Z^㜿@)TĆ$ CCM%eqWWǠGNzj|^Dk3ЧEu|X3 <'*@q .tl.L <,֒kP!`k\Hh19u%lwCڲ\G})Šx~Ӵ`U8r1r {g}[c^.z6@Ʒ- GG2$Sg( `1\ "?PcdUrWѺn} -X>mڑ# F(Mxy3}OD91nT xh<0b~,"'7c0 K{ Z9D Mɑ 촊.5f)PVjqO0`kQo3~*;ĤOS ]K1Y;মHȊfDwuS@%Z /) j>4ޙ@ƌWsN&DR6a֌:;S r^ \ ß_i$rb@xS'@Vp)@7a 0=7-u8/@*|' J: &ГI ¢dIЬ .K zACGmY+o<aooߢ5%4\+[CVOOyW?k=!*9+nf OFìS3,E\ ?lAa{\}Im-"BzYEfpF#LHXZ3)fa`LYBo.6dUY3~ـy6OgqJaG BPX!@6/Rb`n^ H0AO3p)vLR⢰f-G~~B(3h PIc+9X&GxX*o԰0ޛ0^XA'{Цc=h5}o*\i|Nvqtt}O(\,yہ>z^-#J)ǰÀ8Ḱdܱ;pZ.cVcjw".?;'';i۳~>@}aMySSwIFPMcVe?עυA{)\/q܌fuд]=l}~m >wjW~$zյ{ȕw ,GEVJCeeUkP~}Ь^cOi] ~촶N}j{kpZ9gSǸ%ٻ'5m-k,>ΪM<Ͼ}*$/jKoj4k?'jS7OXtu}}nw5K\Ix |hs%`D7?q17Qy&hә>>\ w+]M&,S&'Kyɱ>G7s$Ib&6#S+2}ԄrI{ #h^Tp|W~$"12N$nVyf 2Oܖ-N-`8zbbz'H#(U oz:p{Q+0IY 0QT… 'O4d;. qĿ^^?n_2!"Vqa3+Qz{y5)1Ca (0+J0\Ra1Vo-^e <`8 Ahj2g{ '1>I$|sϬrwiz}1<̖nV7YC~ U[$^2*2lTAϳJ< ,Ka1M%18f1d_Fߗe_?Ϟĩ;ǩ;OxBq0^h)l#{ı<%C>\fT>Һ_Qnj9)֬TD u5keTV.X !wRGXU%.u* d'2k[IXk:WkR (~ẕT_tu9WPV,h_+NU>J)&K@HM+1|E~'QiPk)wB+Gg;&#mSV\\FQtnu[i&I6U6;ϫWRIvۚ\aІNUEp;#i!։?紹23~*SȽOsp^vai' <r?:9wgt8{t(tgU3UP&N IUi4t.[hϦTyefBya]19!XX|%FUZYTo@ Vgߖ 𐛩@t5@K.ZeJRYvK)5j3jk$>rK.hXEbExH()pQ~RTGT}Xf^ٸمgWH4V_ IEkqW~q7?׾po< $jO qXj@]ՅtNW:$a>?G؁jzJM!L`nm߾yS43*Q\77oYFxQ|FC߂Z͸p 22 endstream endobj 144 0 obj << /Filter /FlateDecode /Length 413 >> stream x]n0D iSMc/%E)*!8}f&I= gzwgi]n~ۭu}e펧~Ztq?߭B?y|m_!gQNmku<ѵu u__=R CKH )$Dl!q +| )%@ 9(kV]:gvp3vm9Np oBuEEZԹs"& M&& CL dz+[fZ XЈЉw!!kllkllxc;`S)¾+3þ+3þ+3þ+3þ+3þ+3þ+3þ+Nnq }oM;*/kخzTSuendstream endobj 145 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4099 >> stream xWiT\UJ$d^u({dbZCQb@0@Q55®(j BA 8$h h V}F橽lSύ7nA tkS}8)ÙeVapeɢB>}.0$ue]Ϯl'K`{}~l-2[c&E,[mǶb۰سX '6=Ⱙ}e}~䘦S3}SMO?7wIgqsf]wϳBζqcss^\ssƪc/ƽ"f0`CiKC󭵭%LO*sˁ.+h-( >-=KC*s eEPMh; ->pIQj4ˠ0$~U lkxM6~yוɞhrWe03NWHՋ=(~qi3 Jz`3 "Bh!g8+6~8иptt=:Sڊz_^]zDX*$E*ȀRP*C2Ny345lP3@D%>SMW Z,iO2t }f^EqtC\C%Z.عT/Yhglz@5:1(MLȠ`5Nb7]}'kuzJƊ憈$^_F/siZ/6:wruH.B4+Zc%TzWSwz0g) wEXHL$uqݥ*0_+4 R$hx ֣}KۦlU8K6I8(e*gv0[};wkt!K<^0EШʊ%5d|Bn)$VM*Q)ґzb?=jXmJjk :Q.ykBSgt NrY38^[0HN6TT=pX=;&hL`#[>:yD/5Oo=*``!:N ѷDtV#QZl d =1BYھfG=Hտ3 u`!joH/fezIK) AG~.g[̚0CFY명b*4:)H|X~DT;:BŖ!bBdSDVՐbImif;&ETKFD,f%w7Y[2߄srix/`VQ|r }=l *V/;\k9ppt_coNa  =A&agM2]kKdY2Rf Oe:X˚$\tyǍH2!:2tym&Bbb4EzR"5NO=ݝTWbԞ{2Kr5\;0yj>h豗1sTMWWJD^ CӸ_88cQLCjU@Tؼ z :c v֘?=>G|}h1l )~WtLYyPA@ J7*[7o4uCRr'3qH5YT6YGHhrxO8T_[/OOY^6g#[h]%6TL^eԂD?Ќ.2>)^ogT$ ͡&FwElh$O'c'!{SN塄qvL ǝUwPomߝ44le˽nz@Ē +K LV/pac|'yP 6\/=ضg9>xrޤhVgB8Gd3Rsl dQ\ilZtPz2y"jKʓcM ^ۋs Zs%%}G{ QȈ.E\1gћ5*KnA*I&vs75YN t~qH +QiX"V .v&nGZ˶".or%Q&:=.V F6h+z;.z?.I+YZ}Q2(yf?ѮQ u¥/K<$vol 1ۖq,J'ojs6{Y,8;D*P\A>gV~>ӵ!+FVPh[6Qh3ĈBTsz?tPIfWxfKkt5R{ԉZP'? \|dce-y`8U֒ ;9:r^c$*n܋h Q<}s*.<"<NFNugF9LBt5ɼvqS}3Wqo^(2mNOޱZe4B:W8\6; Mdm"Fvݭ[UirӒFZP+BӖswV0f#ֱq/ *(FO 3ƥOQBޛcPBvIVRm`ޢtSf!/7bѲZDy@hp[H/m\ f6JG7Z4n\bGG'Y9y9ͥHsiL92>8Y(iCW~Ň^gehcmm󀟍]\*N<%ҩ.So ,lQηKrYA2l6h^=XrhUEc)=鋦Ke=lCk>ZLG, ?Wendstream endobj 146 0 obj << /Filter /FlateDecode /Length 287 >> stream x]1n0 EwB78R\%C5_\Շ4p@֟M~)O^uI{TZǍ8ھݙ&!d@3ts=*MUT=*t#1 nMh0ETRD,F@F!P<>BGgdh}c'ڙ"Bdh1"0ڀEj|E{gsA.ߖEʵrmi[TA薙endstream endobj 147 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2136 >> stream x]{Tw'&#`k#LzܥVG. ڊ`x&&$B2! %< A  ]ݭV[X8ǪmOdrΝ3sw&숏W;t+#ga\[-9~Bђyۂ`+0es&e彭3j2dUtH$(%.MU뵹rT!%٩pJ)*$,=[Hbv%޳x HRk&\{W.zmړmO5?97OV4 jgOQ0 \.K&01:?;?w0&/sm<;KoTo8:R4M7o}4<=|[~F?@_ GaTIg~Q//A| ߸~qH/ ^ŗfJo`sR޽0PW4:E.~Wl{U.I/ܓ}tcZ@(5Ʀ4^vExBx͑b1`$J4P+ X>[B.*Q[9Ci'omD pG!w٘ &^bV D[o5wW/2@R Qe_)92(ӯXA=i9f `\%ėS592i_Z X+UU\ZY\UPU$j;y*K(tnFj$jLvQÏ GV34684M~+-t;:@{pR85wU?T>Vc# U3{cG z\goeU%xM @ * YZlQ͜#Whn9dymm+VHyTp>ќn4O&OW ~90@բWjeڞ=^AG͕e@SGP4BKw\@|:B4Kz0Lx0;JpLDǸ)IKixV**ry݄ @ :S^F3 h#bsQ)sZN`C h OGyJ$a8jUrTHz?j]7e_*i5u 5 :ݫ7aWmk,[G'?%{endstream endobj 148 0 obj << /Filter /FlateDecode /Length 161 >> stream x]O10 X @p' aKtp'w'ezv =(ul"-~H0XT5 㬃]'l3guWBoh )jH4J 6ᬯmRgh.q\c$Nii 83 .fS1endstream endobj 149 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 342 >> stream xcd`ab`dd˷ JM/I,f!CɟL<<,/={ #cxZns~AeQfzF.THTpSJL//THKQS/ f*h)$f$))F(+k9 -,/I-KI+)6d```Tg`b`bdd˾*gsE;W+he+鬪,hf.+)KIKh/\0Cb۔{uϕ޻={tOkywۙ}=lgrqpn=gNd z&r^endstream endobj 150 0 obj << /Filter /FlateDecode /Length 340 >> stream x]n@ D|BHȗCe8!}Ǔa]N8yL+y?ݒn})?0fewC\vSRR8u61-xIY5}oY??F5ҨP(`F`PQ> stream xV PSg>1pr礭jm(%oJHA!ɛ@*"/TAڵ7vnkg[[w=lD`w3gdy<+B&Q2l+j- ww&J)#'@RGGRB!La!#c#0d sԪ/\d|:Tzz&-@_VoXqz2KdA:uO&7]]߳Cmk̖_mٴ-nb?P5kU~˜}EZ$Ҵ=q[ES&*MmT9oNPCa3ևS3IF0zXLFe s3AZPB2ULax9?}{$Ux>ݔAeGytlyaE`2YA[#y-C,W(/[Sk*EgT!>iqkhwp"ǽȺ`\lb&ϒ/.&ȳëq.,9> Մ/` ;:Α=sHpu+$Y×-)H0gn&eep},.}&plxieӀL#JM"AMFOO0ɔ]m)5n'R*!֫B6G(k(jU>wɓVxJKho ?k,&k2r&b)9"*`PIQvLdGXfp'ߩ;hw%;MIoqٷrQp55͟{$s #:^\JѺkKḵf'y-{sN4fXݦݻ6_MNPFVj[Ȕ~XܕE '6<%@Cget8yi7 6[MXLQy<n+g@%jVcVaH ?4񇉋|:9CA|UNseH+\HJKEsd@ ^:!P*EVe+ѯ204K@ߟjN>]T~)7vkdqsRc0Cs*|/;qe+p1gOLJ-tUf l8͒x@~g/rkv$-V2'O|`׏H)y1;7U.n`}lP nW/pI3§r..J(77,-.CJUnkE(bP1Ē$Tkbdt8_0NS}Of{MvbDn!q+UV e\w&yċ*7kL6v#!}]^-瀹 O\+PpWB?!AaJ戣6T<3c"~7nTP/b=Zbz?Cb~526|>o 1${kKuQ]sdkpRYZ' ?8Ufp3(>X2`/X{V F#WV'9?|TWV/ ! Gg?q?b'>Ϳndm(+g(Ev0)d 弑ǎExNL$y#&Z 0Cc0(Wrr[>x>, Ot6by#ӱȴ'aas:]s V.tWCֳx /Q;K$q<L,mU2'*|D.$0d's:}bxSljzk-ۤ- Q/ه6浽q,&OȦ}ɇńAҫ|fclf2KOM*pkl/UY%[@w/il="S_Z 7ؑ0v|ѹ4~N8az?A+_Icv$}* vkgpyFH!j`gvVc*gvCA?_I$8hIk-L|L 9)4HN]KaLFFxNRΜ]ة ~jOنY;qSB &_:rB%¾mjNYp a?endstream endobj 152 0 obj << /Filter /FlateDecode /Length 189 >> stream x]10 E"7 ]P0^ e D޾^b)&x"}yZpA=,;h(ODI6g5[L=&Rv ߕ:WVhXJ\RڰuF0,B K)> stream xRQLUNֺB[ܶT 7(mc`")RJƮf.L潅n6Њ)>Zvn C4XӒQ0~$x3{=w(x7(>ٌ rT֚j U^i=%ZOovz~]^oϛhG{t#iXО@4pHՍ8h"Aq*۠iȔUhIX& MP.ZSk$/H: @fFQXSDĕwQ]`ġj % bˁiL]]ѕFeuuD01T9:TWWHիD1ٌ򺯲Z6 5:v=ǔ 5Z` 4-b?zR/;A|TFjHڄZAxU($K^ᘸÜ3.i:$.]9ZF>$.5H]!=|?6839^=VL/]HgryORur/_-ygݳ&s\(cәEKC6Iv<[Vۤt~z&ޙJtv0V{hJMnfGSΏ{?g_/'/Z>}gM]}]duD#Kog>(so^qq<3u3)I֑ZV^T<~clty?= %vԅ2ߊfFXfz)? iFf|47ycɦNv_Y~>/WA'ٿ> 󊠽ɦHtš|xB⾍#Wendstream endobj 154 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2160 >> stream xmiTTG_ۼWϭQb(Q( ( H#tXZYdEiQdQAA &F3f4羞bL9aԷ{[b #H,"Bbb]wFGLw$1 i&њY:SɜZEEfv?uׁ75a{q@ Dץ6JI %a㔆!%<ЎY.!l 5 a EN7Q^Gx yY(zX[M{*6!Zk"h@W-ZjV$;K {Ha*Rx/Tnea^t*]`Jԥ^[N+~y/>R͑nhDb0A^߿]P'Ff.msݞ@Uк>sYC H&VL428XBOGWuI4ѳZUGjG7tգ󛖺EGwkqI ӥ( !`/2qX~^r&:~DRs<¨1o8z2Wڝ*87ɝ1 f@𒨣(CN3Ud)vX\دO+L׳v!2 Tsg;`R[jqjGcL?0I뛼TQ7.%U`g.O_́5Pk(wYGZs8F"=-#'nudir%OfDG1B;25J!wqr'1^Rܔ> stream x]1n@E{7Rڝbq#Hr\,L\N/(rfjOrk?yY_?Mwle}mؚaw-^_zuT߷a֦O)y?ezqOx %%MBI g.pS(1D hs(3! 7/&ʚ*s=&%@P4F#Q8F)  ЁPTXPTX`c22*+LFACS#S#|W g4  p$N'b Xs(@b\iq96.#e4rRe7{!czkMZmvU4PLendstream endobj 156 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3161 >> stream xUViTS!˵RښUk_EjV""P@ CŒED H L2DqF@@{U;Ko\[sξ#4X%Ye=_'o:C>Ço6uA;%<4zSHhl?}˜\r3/_f$>R?B E1ŀ"LmLM# !B--#"&k u t v1[ A|Dl'b1H|B|K8"ŒIl$ b3aIl!V5J|N[Ž0$4FkwxѼI=;""p#:B +FW=1kŬY/R5:{lgihfP*˔<U\Z8Lrf`z|DS="vP9l:d 9|@uRЇJ>}HBZ<{YÌ\)sn:E,&@Q8JN9L} x6:HCgy Z𼱥F tl]60i' WIk-(#TYQC}}#˜@Dk /LES}u>IQLO#8av0ﳵ` {pzH^U*ăCҪ=;5tØ,<Vޫuk}#?sXj%͂E_/YؕlVԹ_: sWOp뀞o9~R{LƧԮ'8B'UCT+ܭyvZ5y%ER(Vx ']^[vlznu-]^0MM' ypV{09IiUɛaj,_%KjfQ=o^ӏj;M<">[1pHؼ DN-'GO2}\ȵҫI$NӛdE<=bVo:jf76П#j7lMQ&%D1T'4vkH]K5?WP6R@d0M'@l79(NڟU ;#ŀquHXJs~7TjqZ jf N6H&ZgbuCm\ !Lvԣ7 ^bju@c'(/Rw .VKw& e6rSoL)D;[Vmo#ΐ3٢S7[N1eG=Bt< s;}(< 4"cg:ZYFnKE&$/v/))*?ԩzn{_MEtfrڡ,ttnHW(%aWS.j^f9OOKSOqvfO ʏB>4F_8+u.Z+vMsO 2w3<Y%s30}W. Orϩ԰#Ms7!&^!R;W,<4Fti3 /P6@M~YU]U[mPCrɾq ԺD^Wy1( 7gP8&9J8 g,癎5۱Df[/(`ƞ&<5 D 9a@ D O& 顿&cIxߣ4'{zUHzL`ZR&'>Q9"(K*w&4n aWa ޷m;=37i1k:a.z|+LJIҌk&FB$>}n,Y챁L!M5!Or3yxDx[FګhM%J~)ӯǙ^cv88SZ!~wd6blD)endstream endobj 157 0 obj << /Filter /FlateDecode /Length 369 >> stream x]n@D{?̲gK5N"Q0>" ¸gflH1'=vf-Ǘ8yLgZ~KNK)}cVmЭ]9+3o%UczT/u9]KK;~l_q1K߫8O7)JeG  (7:JhQѣtb0Qnm-i5> stream xuV TW֮fvT\Z1 ƨl*" *@C*!1[ 5Gc0f$c2翕$'9ޫ}^ afBH$) %aс#{v,0Dcp94EffOATPXT"پ7M w_d}yPu#08J*BKʽIfMBW+ !ߺe玲>[ZƗAuQ*bU ԁ!ޡaQK߶a{W$y&–!-xN:mb=XFxFšBL%dMN0tbaC"fD1,ɔ|nҤ-ff'zvr3"⎥edY3־ L /,H SHP-Ӊ(DT-gDġH:syH/U"?G"Dk|wȢk[9l@͡#VHbN&1a/c-5@ZPiɚvVȭыŋxmt:RW0ZKVtSͯ\n Q9\@ҧRQjV%avq/W_&9檌Q DCB$̑C æ CԊut?@r%E"SЦ Jp- }0|aüc/&b/2[ˎ9LEE䨸'KcEm&W:Eȕ({o `GXz߀U|K;^eڞQ00Ftۉ[D{Qqx q&%"j jHFTظKapt5PN4ߠl6ivrEilhF`3zXaNn5*y4֕}8ސqr>Wi_'"; U$mGܸp6,i8FUk8z/3V9)U}++P M@?ӯ.?fc4.)y7FU%ť\]> ľO2JQ?eD5744sKlܽ+ww~YWl7d٭=wɳW4U)/Mr )Z8<džCpX|\. 1cPnE^W>EG#Z^|ԥ3~'xoLˉ N6Ɋf%n֐ޙ5<@jQ 5%- K w//=9Q3!9MywA8EAre``LxXbM/&<^9&FiVtͺq$^h +Fpppa;и(ŗvZUQc"V¼N qbbD_Ix W **K03Op%Fh#b<4fy~XkB΋DŽ8bs_9~J 8xzame]Cv76y,"TXˠ1}NwN\A7k0-vc Քrkj[ J ʸcG{AD9^7nInR%F8Sa_!#/{ƦWKΩYn]￱y8*e^e 2,u+^ɼdQ̪JH55PJbsNa* vҜe5CM|طuQQ_0dWnDC $3?kTXrҲJSR4h*> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 160 /ID [<12dfb9dbc19395f2d97a17a36369bf53>] >> stream xcb&F~0 $8J҉0~O?B^ [q (̹Hh)D2bl` RHD2` , 5DJĂZHBg R 1m@Dr\۵r[x endstream endobj startxref 82699 %%EOF Rcpp/vignettes/pdf/Rcpp-modules.pdf0000644000176200001440000040304315030755464017021 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 4070 /Filter /FlateDecode /N 77 /First 645 >> stream x\isHMOtuW!g[eW"! mT`۞_/  Jul0H\<^e& TL0ͤaZ*f9f%:f1 &WL &d&'? h42LI{,S ĴcόQGVPcf nbN&)Ŝuj1üWf Y< J[',Xy%6X0V71;rb,(|:vO RU 'q3P֖ڀ;w: HR*q̒<5̂qe@ qUĢ1([IZrZP $rCRMhcql-nw*68P9(;AIS1|$B8N%9Pv{Pv<a}yPRHv]d 8Dre0pOf4jI16l:aYsϲ}¥E>&/Ο(e<]^ 0[\?D"ǕY:ޞ J(+TzOؿ s4x~d_]l^ۗl446rh1LA{~=,a@0$f8rńڢ Vrׇ8bEð)S 6U!JR4' $+}my^òG˭)ܺr[S%=U%=]JzTc8Ntalp0A{@' M+K9Kl~͟ExuiSvͦ4U~~%+駺b4M)gY2qaUm V?dEN<uQI6#Lf'8}︧8NW\F4 exrևx#@z"ͮCX|C?s3ŏ1? >!n<fG<O'_ϔ_d g>7|'O{oSe^%DtoNj99$p¨7KzPj%Z*c1o0wd0ht1$b2AAY'DaVN*iN'ۢ0|qQHJݔ;\e'.V\*<4!:ѹ =2$j=@D~I*6ߕogS:xu9m-hqն`Ev OKtREq[9>bdbkI WqW/)]º*_.yN'Ci#=>UU0-ň_- Q4Cd 3tROf !p-g^c"=-̢QؠNN-> ci/{-Ȯi zi] &n&Uztyoi<&`P&o;RzFbUG&3~~mZ߼<-{E;e8mk8Ww0J}nvs{W_>l܏X3b]j;\cJyj~̘gE916|{tL+QwΩRa9^Vé("tA9˼3\V&p YﴪlHkĬ+U;"b,wJ^հđЖ*oR}\cX),@r ,+rUra6xeaC{ews73q";4F5uGZ׺E^mު1M(Mw˕rGւEcьԦ҆re*&r}XM(ɾ?zdVO\j4 u=6]v6Na>%(˚ 4)>բ%-%Nզ3NG4bFhՈ]& T=T_5ZLu;:R6fɈV[I|'x .Oegi'e2_rgU;=;YTܩ;4mJ 6qGAW6 md4̽ٔ^+Llx{{iRyҧ$@#Kq~oUgdXN\[Rg7IYxڧSpOWmcjy>f`@2]u۾5fv׺u6 =b[I ì1xsVFE``J U@ֶ$ifoloK9'膎ٷnz:vz6GFj')D^,.1CW,yk-߆;3ar2S&zK/@-WAT}OOU]`Ux}Yq鍙$7ZGZY7T`&T[߀(G _`$"rc/ǤA~u |{+:zZ?Zͥendstream endobj 79 0 obj << /Subtype /XML /Type /Metadata /Length 1658 >> stream GPL Ghostscript 10.05.0 2025-07-01T07:57:23-05:00 2025-07-01T07:57:23-05:00 2025-07-01T07:57:23-05:00 LaTeX with hyperref endstream endobj 80 0 obj << /Type /ObjStm /Length 3295 /Filter /FlateDecode /N 77 /First 690 >> stream x[[s6~_v:L6mIQnwHV<; )R$N0AI5sEô,ZfUd1O'Ϣˆ12ec11e`I2b,i c.go3< :Q#<݊,M$b4# &  Ecǀ`0/@SR:O`!VKpS@8IE2Dv8b A}H-I)$~K|sA  )K0-K`1uDLAPe'V :,Z G+jB1B,i<$b"ڒ-= b]RK&-x<[7x2 1_ˊ6٢Z=z2W?@x$98+j>gn1ebʳ%_<*U`Wנk q@O8{UwM|U0:q8-fׁUwݺ_W{JO;7-hlMjH),_5ڀmNsQcx5m8|q =G3!4P;Y.Ohs>[%[|D钡9TzNbX1jUħT,gnl7I=X"eq2AvL{t-X RڷDo6·n[kʜxմA/@ewcpHGJxmfioSQ}anT+}?-RP1\6cmkuȔ3aLǻ76>~Vmڬgsm 1 npp+!Սnv^R&(GwU5O`C~ F?Ek.Hk}?s;br1Po9k)Qܕ j*LކgoOiznB~Lq{1#1?-ڸ: n '1Y.ns67ޕ< k7RȮ$[וc%Zl=W7 ^mIi鎪]:;J5qe/f_5Jە%߽Zɳr:[3rxXϺ5<O$ c]ntLAi!^\qVNi1ÄlL_cz9n.’!k?Y$+JŌ dQt>c{of汾-8_[=XOH^T<_~W/6`%~Qmg1c1SQ\\7b!RF\wY|gv\<.߃qЪ7xD]oCb~3&PlL3E=bSw-N =Rmp[]Z*C? {/T}QPrM;|=G021&>F,Z=-~o?X,;V'[l<wl!Ի:MKb_G8\kEmgl(6D/?6qtIɢC00| w/ѣȔ\oçeC 8}%7."5 y$p[p0V;n*EcHxH8$Hm;:pRvZ̞"(h EP\냃~"lŐ2fnDh@V$Q{&ػws?bmH{vh9n_0f\]]l6 1Y|uvZru..Ǔ?F11JU=TkT'U:W C[nDFFPxSWm}MQm[VM#1Li{ښjۚY0On@O6̸X@󇵷1uU귣_~fo^]Q<9UWTΜXZ_jѫUZ}QWU]^FVHw> stream x=ks+TunXpUuwWNFؚ5_;$-7IpIqn4FϏU.*?;I.? ÕrA[>WW/^Ugc^\}xgc&0̕wŷK!\ VVdr~Rg%L88S*a͋O:&Rлv1\ BQhDΒ EeeѤK&y%R<w8tc<"dEL6Rt"dy z'GPi'C,z~m!0H7g_p>M.m̈́ʩ⦙]O8|emͦ}4*Y QJ!֥ͫRW3spc+.u1uW/oٮUX3sLUsWU^$b)rN㩐ZZyBL]hK!'fzMM'64-+vu [8"šr8悗dLYaX5:߲n7e|ZRkP$b,=ͯnW<8]|pU4ݺ]F2*nYGM_&E?ĊQ:WlgVoYa{h9& *&r-b4~~xizo+ae^ąϗ =q)B҂6H20H:}p48͖huyb[~?Hs؏b$( ͎b$\=e\@3I(y ђ*v:;쾗pD0E,gS mf՛s^٢\@=KcКc4zpTASwWAx퐧@j .@ބ?bs _~\7w[<W gT׬@5HuxC򁶸yW +怼R*_7]}[=Xeo<)^^z!%.֛Y,H$Q)e^@kLY:CP$ +Yݶ vFQ wʂ5Cڛ`av'@h8yvWRÆ=,>vnćzzmW\o* ~FFQ^w'Cz@38xNKX6@P|fy0> L Og՗QpcYT ~_">^Ej_-\"pП)v'ژ 87'9N~,\`ҨއCJ,|ܮ,➾qGx/iv g4Cr6*蚛.ItJp*s͆1RC}l؟ep˵l,IŦwc\AG( d?@b/wd뤽vO}6!`خVvclNSS{;X[+x 7j0]{핚FZ>ʢDC?GAa$ \!PPM`#e,% C0˦YO뭺' "_Dz4%t%CY9:)D4TyJY PRlgPY={84%w-#2 n4ьu;Ȱ)p@^Dblb{O҉hjOjQ*;@P\y_Cߣ]dj?חQcSjs̐@Cj7L .5 +\87Bۛ`<ۀia(ltE샠NAjҽn{BOR2C0M46f;&|<?fƥ`L>`\bD lTixRy޺crYVQh%A[B7 $;*#/fMx.`1eJ^كsO .I@qd t0fm4> .N[ZM@8ҙX(F7C J\6蠚 G(]uh<}1b0b.س:պ7te|HdS0¿,^s'q䬝>S܇opT &<|fHc)]^_~ _M4]?$ɻ.3D[L0ML%f[13t .Ӏ+}#p0|Sfǭ^Q( xb_3aV4˲#"N$Tb,ǀ]2ᡣ%lDDh2!_AOԍ$* աHJcn8/`>yE# xX{ļ0l\Sf\b|D]کFzv882 +}Xn NM4G>Ӱ1c+̱CC06 YLq 8D+ć (!z8f9 GtC8PepI|s_W>Fz 2CGLP]|^>7€>D'._lErRhe 8.2=Hz'F2bHgWu-IrsdOkM sx^p`wSYDeͽ<@^)[Q\{j>X{0& S]sr^]@x9?vqىt#=m_>72 i'X mx^?=x*=A h6` yN-< ɠ4nݏL as=( M}:Vqf&C0ի3z=yEÔQ`.>Kw=S>ykwHeS5D '뽼tz=[߱ J2ϑ̀̐,gqeFD' 6 ,t±c6`:8>s!UsNnܒpvnuykp۱xYCs$*Ixd1RNS ^M5cU92r*dJgwe uW2yLd+ lmjL!Gb 0n@`Ԯ), #' J繇'ßܗs1>c1){>Qٜg? 7 %Pob{Go -44EZs+! N#s)*۷єoBޢQ K;XD ?¥?O,QH^ ^ٍO cjhe}-hDe Vm_OĖV-qM`ͦkG>.+o˃~G4^b 14+/TCϞo!'` Tld)qDH`ϩtA[5 llteGPL]$4'xR]Z"TAdzݒ!Jg& G}*qK i8V{?I0*l(2}a^Jda R_!Hj ` 6!Z><4xPg ="4) L$;VhGE wv1moN& nLŲYNnyN [y߽C_7T&׿%0c Ǐt)Gsee.cP*1Γa]k 1.Cg-Q{'`S= mȂa;ovfA*nnې|3)^&DM8xVs(N7| 媉 lgpzwDS,b% ׈OGιK,1)1^%̪aO'(NFCf,GylE6U}8:NqW136!+,B~ÏsqL0M9)W f(;sJa Jb.q83DZbݓ؂BX7*n+dn}$ {w0}VFXL1kujuh} 2 j,eS;N_˾snMfxgLme],At6oLx0 aTi)fs eg7t+O%VG|Pla89fo=7!({Lw‹[*InJ(8{(/PaVYS0 Bb徽>bNn}ֶYM<\!N75(r*1Ww eQ dal_@P5yxφ^-U BdOWCA<|;%yh<Zeo}oƮ4[ķAOq/%UW l\.VuHdǻ >pCIʅQJ^s tS_R:aFXf!6赱N"/ڸNq X/ mgoPvSK_?tIendstream endobj 159 0 obj << /Filter /FlateDecode /Length 6442 >> stream x=ksƑ_SC<1G꜍/uwv\rڃHHBL\ܕwu@$?,tOL2;]?R ˳,zB9&9u9dy:2ӓ|qrulr, F1 q MDDC.]vZ~uU(AB\OUD(oy`%`(:*@ql^fs2YRD8Fڸ?q]V( =ʃv9Tr ,ɟr]M&z;m p. ᙈjTFxJσ* +;ۇOG^Lʃ4&Mf^j#2/1ضǃ2/#8 Y "'2jX(roAhFT2AU>2.庘cJ1_䲘W5@PL} 7VuSYR°TmԳs$6mWt3>q ڂM'(}v\ \\*:6[O6uqUiFZlΓf^2Wov5w_y4%Y3 nFI(wcFğLoo{8"$p\RKM%$a$Ha!BjY MxNkO.3zK&K[+L-ɓm5y&ѝI%bɨX楻jl>#N~uwJV$MDPtz2i_7u0bBH2+F@h{2).TK+hVV A MyʙJ>75tTpϓ-D?ֳHA-׹NJ(5M|]KլwWiL%y]5/P%VTؕ5=`R ,+2{q&D@⑍@y / _fBcπ'xQK ~ ٳ!ۜd1ݼ\j-M!IEI|egUwaU=..Y2\r> Z I5skbU[F+Vb (hٻ M k,z>?VcvM$T M1Mh͹ ߘTɢX?y)[Po<]G4~@С*Ӳi =ӹ!"W @ň{@ p]'$nf37ɔhaiEk{*& WNA.L@cMGRbfga ]&/7䈌+S>il(#}ϬR"IӴ+tuC#De+n2`<L>0]mz({R>b N 7ɧhn:[r4A,cc[WB}kzpzWoO_Rt($*^st'cMM<6RƟa4$laY#cU{cڣX?aD`Mw΀ksó,mIGڬd$`4A<Pj@pGh(%vj⒚Grc}Ocb/{lYwod a &4L`TJY6U1`I9! ,K95'sL4[i@#rc+9@#PQ?׸ul/Eܧ<,  C1{=T3,4\:FƂDa QeBb6Gp>XS,Y~p1gqu񣥚C2UOevb!ke釡v>&W)FN۹ 0ߔQn!6KA׽..})٬y;o_ mK# ,}j/!0{Ɣ:]5-y+PceR̃K1h*hLsʌa9 S%P#>vf?lB ՝h@C~\!@ ѾmQ)If%\̪JQsE[ qߡ/=p寶rj*ݭ˻i Hr%IM^A ;b$Γ :L~?o65WK{6vl8m츼O-kJuISAH<&v^]dܨ0ᇝqܦÂetfh 1on/;28plOci;5]YEofj!%h3y;9i{ųaWc|q)fAVlVy:A݈T 7aegY%zr^ mGŜ y=6جcSzq9%9ߝ &X2W Vk\!9qfoޫC""il g#`?Xycos^xݏ?/?|xT:ݝkrփ q@foQ-*XC^#klx&sArchweKdϺPON;Xl;?t-є6nЀ;Na2C'~"c]3]W+?ѮT~[QI>qժ0uNѯM^ckh|n6x91\6p}L!I >! { 7s wA h]}3}M*Ĉ Cqô] r6O2cN-us a]&H0q8 :ٸ78vm2F[.0oF\ |~6èܯke.<\95^v1ݴQV@zՈi];+!OZu1!M. /K['Du4J׻ZB\N2ӯD9m4KҺN'x""` TpICą:0/&ActF=Z*{z[Gʤ3czLt`M3AǽPyv(Q,XF;/TQ4[TO+'?ةt4]5M}4Pdž|i 3s׆(m{\x?Gv\ôKnǃrCl]DLӨL!,&~S[ 0 9Pe9aލLh3@|D0 o9A9B`6^x1!5J47@+abxynWlˡ,721T%ck D,/W鰷*y akҴ.&'0?~c PlOyp U'-J1ևqJ"=4I(.!g,E38s8ύYqYI3/u]`>Ǫ)lk]̴]'FCb=0QH<_]MvG > FBƾ9AGET-9Ǖ/QbZ9wrִyvjT77.[bNRӖA{4h,n#f},m.BS%9=e*M`Iob7GBe!1WB.™ 0bn DzK|.RO´FRV&s\J?9[H|IUţUWerp .O,=CfUS o&q,Ɗ3L0r);¦>0Af禊¦>zJG#"?"[My;b5HeG,h#5z}Kdgm$ʺΰwGǟJ"jiJ(ޏ qEM<ſ7a"T se;B{s|mG;}7/\mDC5{oYu]'KUP*?۞endstream endobj 160 0 obj << /Filter /FlateDecode /Length 6408 >> stream x=ksFrUʏP3hK8{}pH^7핋!w%ժ7=KqwV @wOO*iOޜ(N]!&.O6RW-SVO0V2NɟN~No[lj|^W 5<~dY[&OVv*SVӛvK|kq SUQ-5*+VdM le<}usYN,3'&JѧeU /O/'_ 8= 9+wC+40nLAi[JE/zTOj90[_{w]^o%b L \) rٮZVJYzrNZ xԢ(GzX<,l: Fg3WUɍM`eR"0_^/w;#߅z /X-ʪ (JlD πe&%UL'@mCtR&ߌATʒ39eRN 5=JylZ_ 6w'^8@5P݁(.aq|զ\pю&95o=Y4 08Ӷ73AA(Q'o#&ܪYnW6byqms{,7?5UbrUj޿)ms݀_"]SD,hkKYf;1.q֫HDp35\SK3_.fR^4 :=L:m>~@p@b1ZDJBŌء)WR,qH(g[MÒSH@ay0B ,vIYE7.Sa4Q7% ْܘ 4 $_9HIϴ~WB`)-4W;?YA)岰РJG'84g o:%U8g;,Z6 1AV۫!Șߤ0oVX)Hpc?:#9-̬S h22JFS^dF?}y+۾#H0|5D! ̓`&(- Ǫ>|c\8$j1ʶ-") \*z[´˔ Xln2Ha?PL~eCFQI1vfdUUT}.&_P#:Qi^h[8ƷUȶtgYK.I?c4IOQDŽF8%@25Dqe6¾"(ۗ\^-xQ?z g[# އn#or! cdA0eq|EMt8 DȾR̼0WNG3O}6mdJvKS9xL}7Ifaqn8%qn!)JZ**wRT"(&sAӳQkPݼw)>pPZ=ʌXt,(z܉\u`h=|`e8۲/Ye{ERsϗ{WXj>S@7a6oB~M}xő(!O??^0w1%5ta=,o~1F\ϙq %O Δ(܉!E7:9 kbzOj`.}S~)ca"[19j0%=ķ&7{S2{HlpPOFanq)̱Z#K0!8 (M4/5O@fqbR>=.TwHU*G&;a 84"Y~H=m=7e:X"z9`8቟V0xZ> "Y?;`i%ǝV(ǴpyX;P !bd ӻ:$& +ح=jS6J3bqzIƑ% 0c W:Q Be {$5"b0I_D20 ׾S~35>'Ɨ@}O*.$,* vh-8ƁCѵ+Eh%6]|]'qO`[X$_8rEYJBJ 1 ,TE`eb-BZ&7(PzAd5 .}H7 y)%"0*_aaBnl#wRn;>t?ǼrM2Pn<']Pļfn%AǦ!Z6t9Ъ~ͦYJ/O/]ntO6%5u<=k{( Ltk|IO%\ฟ.kT ׽ -jl*4,eWŴ#-NZa14j>#;~xIU+iK7*,uAk_X3gASfoDU8ՒVмZ{.&эyeԍ 1+܊%[}BP$ua^<7sU a@H?H`;u2}SΜsQ*kD+M,\w4Fv3]ot)Q醼]lߨ; ErUk&v mbk*'CNz֞90*\"?nK P!TVΒnffww{O#Jeggo̅h>[c3+QI}\JTZuoIp׻:mkY/Vәf Dv|,(lsQy.g Mg>._7[ a/}^ֱ Tp/W/%ŦM>FCo&54h& ڢ/-Kҹkئmo]@Wm1ءfvj4"k6ye:ת3:H~}㵻a".U1}*Ɣy!VHGDԫ.鶝;+T!6H.֛߭ ]̇ ps7__J  .B$SÂ?l-$!sY[JKwxo,YASZT +1K8~[תAwݼ*:KR<\D oFYvFaKLų"\2(.)qN! k9R`ddR k{Db7:?#K-7Q(zW,.+R$CZDJV zDmJ؈GC^-)*!,ݙ/5&Tcn[yDA*LzkjwG_hNzA;#+nŽS8u8€t!UB$#jPmaGdcB K yg?Wo3ui'ڹj?o o?Y+lZP1Jd9'l4$lʠ ~%w7`TW`)]1bb6oӧMW5?"azxM2!k{XӖ6Th4v9о` CYSB IJNi9q1nxX``<6|1<+7TWxnܽ=.AtlqpV{09_FXҀY^TA\yH"[_fW znqﲍ;w9at+ kN'c"]qʰ{ao#2O- a<G&$nt]Fڊn1wҤCCgC,MRRAf0ZE)!cD?p' ɨ~"W[ǸYI~r!A0f?'kB'#}(V S)} o>Ő!? 8L  D1Rl% YW>_jGz\ϛc\%y~h|}@Kr5XpGE3@k;I25gƔ$a\I"ΞFǸD2$'.uߗNu}{l?"Gӛvz_H&'1q8}QwGgg_= I U}őؿ@ϰj\v])<*9+O0ӐWSRf}u9v_kߴcSbYvBB}°4]U˰W+![nҘ28"mJ1|=L<|X2 |]G;ws.0-[dH#@PhyĘriCø\OxGA+1wXC}ImUͦ?MR(> stream x=ksƑU,W0̬Wl'&vvv]>$|-r{o\<.1pL٠?&7^ףmݏZ%h:0uOR" {YT}ڥ We<;:g Z~2ss ܗ<,Ǡ(U{(/|XJX2f0&X*bU,Ioz5ceX/M''k4FL+)u!wx\-C0JJe0EpKd ?d Aʢ8WvV?*8Sy,~7Fe9uʬGa婂]eF*#]F(M9E}xj0li S w *M. >UB\#x;i&B@K~=bDe^087 mƒderT{Ca"Xk#$Ʋz66ΜkN`գU840o< R@}Gt`4/J,Io/iv>lR/2ގh2b(?]؁5TpH׋m0Eխ\/Wt &˺10/nG?z-hW0n`Gn4! 1q ZmJVc?dOWqJ=tTߵ;kNj ˤ; Eo.%Bf@ZK_0 eNQVIwfo;$EzG1$H_AO.}G}9~w|R&;*E펀#!tJ_B`W(~+wS;&yEr'9Ї[HRT(+wMObrGU8RTcPybc6Dc/X;,;E]:̮]] 2Ե@¸(1+UI{+M ]nr.銤w%Jt6Z>D ˹KU*'0Q Rb:7Imn.KK0N~ky(+)Jѷ[Lf\NZAXd Oe9j=N ߾uWjZGa[hN$Qةufj]:۔DX߰\G+Q u\rž\G!_۷`~Kz.mlyiͧ ^p !7(JLBxw %6B4вl[,=Jg^kYX ȹ1 D _r/,mlMRlil5 M~;޸ي QmAm7VW^_ool6h,#p_1(ƚ>x]ڢ ܖ]F {ni 17$7;xi[\^$. |Dsn5LnA V"G*>&6.l\T\Y Sj5;c~er|a(VyM2> acnrR+&|H\}5s]90M0_"6ާ=AB+*{Aq4v5k&:WBbGE}^C]Bs O0Wn/{Q5`' 1y!|ݻI x#KnUk/zD9A"a^sلMڭ(AaYcc ̪t/TT* F8NQ lqp/|C'0CٚtR*WłWJ|XS h]-4xqW_:Cf%g45vnEoCB=Mҁ>WH! jC?\Hū..U٢t弈Su PgPfObdLC3ΰe%AxݒKp3Sl|S*Z܄rTS$0 aVdN8l,NGsg8(iB袾0AV7a{ ΝU [GRQj5g5T|Y 8GP@pkWKukyk!&o!yh K):bEFg;xVhw ^]j6XQr{ C#z+IaS 7##Gx-egcdt报o]YU~<s^cjzVf9l <|SHr  PTKM C|/2( ͸< /]FL c|ϧ7[߶MxCn`E"FQe`)cG{S/lkIUh gGˣ6_#[ Ez]h~W&Ml2isk_)NaՄc+3&~^W&}Rx#Z(¼`Yh)ƪ>0q}n]FmJ*~#fZM@K=wM F{LT_Pyو%ˉ&w4TBN)dGUJA]yCA;f "t\|OGM4 ˤ_hbG]/% a^ ^& kg4)x@}( Vtp|s&aW?ٹԛzr;ݯkig[o" Fq"աS[j6Co?^48z^8#j1JU蠄U;Dl`ZFzۗW_UEٗ7SD}ld4)~6Hq<(v}76N᯲ k…krezm-S؀–`9qMحjJ,qai!he#=zk"C#?6Kp0 :z-8U<918uQgfn8g+=ndۿ&h:m2/}sL5^z=::U3Si˹C͂|`\-1s6HC*dX)sXȩI}\wPQ?jb(1o) %i (M_dB5a>5Do燴d{C|ڋR~#LQW=)~q6-Ca|{ &n׭ Zȴo!lUDxv=]D/n..vgʮBjgj^~5xϸ#Rj= pٽ1Dž BM7ɜf۩mQǾ-Yӈ`7Lo_]~:[W6WtkllMP01y oEгчͱ/x\,C&llpM}k:-rLuſ=SM |N<>0p ZB١X^B2[;:Ĵ*ЦopzmaYh 6YN{/Ft?p|L]5!ؠ+|"8v{)#QE@wKynN 0*m;`M!z|w-JŞm(|E/F?m6fc%DΘzhq0M. |,sګv> stream x]mo#ǑAȏ C0:f{l@|s \>hE$)ソqU2S%ZNÒvWwuuS5?NMݟ4O$7| e'nѓ'MZbUp[KO.*^Zg5u۷|qsvΥտtwWktqauY4-  1hw/vbVkaa$Zd(n^>{F1vk5Hp; ƴ]u]]|زj~D;7HfjŌWaƺM s)DVWn Fj~wެ*6Xna0ew|ݷ/OKՖO$kDmԄKX+'8^9Yu,YFxk ´F0=\"C8ᑂ29yjD&{ / d6>(LVٰd-D-R=zUFؚj1Y7pЦ-5|TaP"_ yfÞH}*{,y,2/w@% rґyxϲΦ! `D QArUdExBU5rvΦhLBWKX09<=4fIo_RxVGL%&ȔI23)V.}^qaVefmC(|Wto*"jaح5o$ܪ<#p]fU hA)I s@8P W㺀`AJ$T[PBy\ gyqnCl)!eD}~HƟyC8Xߤ*t+m~@\F!4tY:yIsdh5JskiM;9_g:~do^ǟO_m"2%yD_^ s@Jze3#̗c7K*1΂5rmƝcsJsZѥT@pga']UZĈh 'Uzzm" D mkDɔ\Uz>ocJO'ƅ)^ōP2n$m]ϻ"ʙR)ަNfVsAo qo!2v'S8T_ZXT~ 9~xW]X_\P:}W6FFg!Di 啟' B;T \P-8t>|oK-MƟ}K-Mh@Hy^ ae:?1\t󇚹 6nEVHԖۭϓfdub Ўyv"ZmsAwg5XҠAJ162diO uVSh06'9sDVU쌙|s !ILm%\dE육?.m2)o߬.ctv|+,Suk_>H B#n-H;^' 7˙ͺ:k|`{H3`ހwpC^%R(J({BτF> #zQ%4F!hpO)<+xKVj9{Sar߭@i\A+I6Qvo}{O1[ } ؤ ]m̽pDXo8 PoLێ@8~ư˨"U6ok%+'Fc2.˫@oXob]` Kr7RJoըYm. ']6[`G >d6H- RA*k)KdO)d7 $Ͳ@]ɘVpy)RZAJcZQ94Yp>Bǟ[4/x(c p$k.5 id$GYC3Ek5(˞7ܲEM#|!C4%~nAK[w7|q5_uMeĐ5B,39ܜG/f.onm,r0\kV/k6/Ct04?c7xxAx;!jٽ3o1esr NwfV^.nƉO]L.ϪZ,7֏w9uxΫƟ-;8;p0 ,( o%B(?nOI>Ko-o@ݿNB")`O(gjܧCJC F1:Ⱦ{ ;ɣWh2BV֏ vW! SBKp)&$2UIEiB/8~)0?3itدǤ 2 @B1j $TpE 0}n ZLƇd6L㊚\ֆvWPBe TP^1@~/ړlܠ,jWDGU{oG|ݭ>3@+CZK>I67|=,*wO$pT Qt4e/wFeY > QYwc"l>|]=μ'(0pν 7wN%vlDXQn,a]#`&%;GTlG%{?PJx:g0GINsO,>pUu(?M14U֠ k~_?.f|j3W¦2tk򮵎ƫn1>&p˴CdPAMzE 0!:TK*`t8V&rS|tf/. at1# g].pς|5R}\qL# RI!4lhd {.G6&?Tz|3]w`~Y+&nz DXc+ǕsIsBcx{g-] Iּ/b*աx[ ~#*!'!$2xJPBƕ+xEzHTFr= +,ʈ5.8Ø?>*%QzP=`GPJY wM:\?) T0h2̑:[㣸.9-1%#}<BX8cu@bw$\GS Scz %ܼP׃\0AʕSܩ`xBԽCB3Ӡ}bd:NaBPAODVcS@Uē%Jϊ̦k3ؤBL(BV+ycƇ*]3οAB؏R)PJY-rc LRZ ='0}J29zܺb2f?sf' yUD /ൊ7~t7oZou\È UdmtQF8[mB6 >R& hd4HD.6&" SfB(1ym_f{od(˽B`G>ߌ01N!?rrR*c Bk%tKnQCVaE!Bp[:*#6BU~cJț"jbPJ{zW.AеCο#6"Tn\70Bo70 bO÷y\f>ANz3mj0_mdFͣ_O]S(SOfJ]ǓLcv"&;D|Pe1fJiyG\$J"*Q2"J-VW-\*rWԌM RC/nƨGpEOp78\WX1=*08ٸS,כ:z]$O++)B(Hl} h.őQdxU[H Aoc); 0ɶ&Coo /K m+УRXQJ)BOd3qHt\;H-hpczf ˕Wb$RW qxb`ڮCu0Jt؁q&QXQպ[M%|`m+wk_/LTܮ馻:XM}JCD56HaTІܞa{l0>|߇lku Y{hXsl/LYt1Tocbou7~!ͷ1_mv.͝^+ U\/^1p}r.xkUwwy у=b)·l Uߝ`juw%Pڂ0q_f=;mơq24 ~2p1z;cXE]Դ{*pkEGIZPDR&endstream endobj 163 0 obj << /Filter /FlateDecode /Length 6649 >> stream x]{oFO#B.j7&汋;d݌cms#K${}WUMv˔<"ՏzӤ٤椘\tۉ3|q~;%'6ׅhְ*7BOoNƏ<= fۻE3k[uvS\k(˻l۬.gmfj,2AZ˸\WqgfCr7"CJCZNgMxxA$E@qW[? <[ۻrGT\ZSU3#r.d@Rd/g ]7٬ +DvQZ<Dz:fyYf__W׃4Sd̖֭HBBpg!tSez/.^ғɊ^ۂVݗպM}Rsyڄ3rMX4{Ϟuޙ=XBUvVmzL\ 9>pƴSɼ`m9V~KXddEҊ_ea&B3"]5- ub]dsQmxtb+[9?mXJ?֛ˠu2Ʃ< RrXӒXE$D f]vw !Mg%KAE=rS=/Ei%KE)v!֊crv:´W*S#] ]_05IG%Dz*M3Xbz"".# !<&2/~6CV:,aO\3YrWS>l5[7T`T׫&? &PN +A?0/$4n^̩i^IW] qМ\p!dy)KR<{طI"}^P~ 1ˆpڎ1U|}~_ $^TP`&`T@͗u=~Df$ 7N.W@x"!Hpr @ HK@@ ,!"`e]>L%` PJ(qcHdECPaJ]tdb2ﲈ`ޠrV((n@ 6qPz+W odqǺ^&aQJE @5 ׯ_GLtiڇ5  F)ɨlFH˜׳-*: TUΨ(:=.dsn`/}ԩC/99P67?w u]mv/u]ͻ+A_7m ݙ `i7Vb>4 b Q {=.yvt͓XXlFEqX@Vr.>#pCE$/,Gےv~]ӏ@!=W]ku@l];~ BԴscL|FȲua^Ë-z q%6BO86u{,Cd\^kKnuH6Ei#/ ~O'O3 |(O4qg1D!`7NH L5y)}_QȒ$,-y^/7!tkVm•u}6c-w `Ŏ; TV}.ُOlnHF۩TP҃ް>&dl0QնtzuOFߜ;bsn4/ ߡ03π,` >i8@ xn ށT%wh}5[@PwOPF47<\Nȧ ] X-, @0b NU (P8SInrlTХhߺެ qn.f0e WP7j L,4K}wæAbJr_{!ObcЎ0O: 3H2)aM`.bo?hopp;jO^{-)j34a֠ [$;PP2څ:5q/c6$>B4 8^VXRʸ/.ciu{n(;уBG⡝j\z]9%S OZ[>CSA}od6Sa{/zQ"A{% ܜ`ai7y+ 1JP0anB=IbX+aK n=7m4v7J^ ²D-?B Dp= bec=9$te0nqeDאEܭ^;\P# hS7̜anNu[T{;]3d_}4ض X@mqzU/`~gz Ò,M,# 2e&1`:0'Mma7rGቌ7k26N qwY6e#L ;>́gGC~kde`"?ܢRXEr2\0"lMͤaY蒰PFsb9ɜ!CsRf&d Bd~.pJ/U{ V&<6OS5KpyUxFP{氙!*q1 T .M92mth)>\@+t;0hCOKISpĥODH>=aG[nۘ (=ŽLrYv ޴@"Ǻ'4(bP ׂ>E>FH } !nOןG4@lzb M;ȼ FܻME nm5@OPNw08EX{JaիnEZ!>pV\_A0YJ -@cmA f2!FCk^ElAS_g2OH`Dqlˠ #p{qs3&2˯Ha* b5m@b@SъT93BW%Y3q<Q&4F4B!dBhQgTX7] y:" dxa}uJ5{l.Ja^wg[?CpiH8%Sҹ(#Ю|idܧOD:Ӊ7%gg#$B}"L/R3"(9$MLO>L.E*K-yMx).yXHh+b*G `& V "GA,N1Hs%UE`GBAaE04jWk@ xɀAU p;R(T5єzߤ!3.ʂ%Nb,ePd1)(#1ݢ M0 'xHĦw;(ھ k@iB:i/<"XAY1Q`ZPt1caIÛGvD,hs哿F.1㑋f*>oy>  @.h`k7-pF-61jIeLТZbjq@KLgg sܶCHܰ ?/m,et L:;Rc7AY2]7&W xPU 3@_1b \ܟl.Wd"! QXDǔNwDua%cȥvu#A++-HؓPN8C KZQ&3Ioz8*&yS7G\w:yW`\a-Zu4aHˆI? ,;wduHhp:5m]|.x Qnp젴+V(/uad9'o~|=WRη^R>J`Z:$$*qH2凗̟p N>K>gycS`+cR8ͼeEpfaD[..SI)͒uل!* c# LHBLϏԲ+ޏtBwCY ̪1O&vs^-:kz}ȌNZ( 4:xKdr}r}F01Z746z9x>|t,oc R%oD),j4pu.:XIATgXI6}UX<;D\7rV?:&ntx:ǡ:jϒ!2: Uһ$kw˝~vG'.4<ÍC8ϩI ġv`O;zkȶKo--Ď<Ʒ™ydPsfƕv4]ѹY`;C3*0BN;4X?M 5%zo=N*)<^ oSI p=M巂['tbZ(1.mGȤѿw#9٘)vBt~r$>yUozX~\U,b<_n #6;@e@rCA=_Œza 3k֤{6v { F1N|G36JUgۄ\{`%HH[/[ K%})pdEMd7 U냱fge v(UבN6B:j.!I_\20(s / ]"*3=G*{#367j;bUH.SXa6=UtBXe&0hPľbIK3鏄>sWXkZP*Ɋ%w<+P2P$)D[P Ni ƹZBMՃO?qժϲbA {jm-[WIj?`AOvӴcJdzA,PfޕtjJbUHKc2uh$U s _9[5a9CI?x5xZ,3HɏяDʫ]=2g~@3!]i.'C߯֋_g vJ#79n@fPUz|ꡚW}_Lj>Rp7NCm FZX*Y7 ß` !7>?"-z9 N0\Ozqs> stream x]{sF_ǤB0/d}M9\tHHb"cs5{@Eʲ0@f/"g_g#]h~uY%󃫃F"ו, ={\k9bBPU{pq/^VrxΕYrr.Wpdk&GoTl FU兴 P\5?xp]XuBqu5Z] a\tS`:e)G'ȰUU\|s}pݮg#i]e]4O;x~n߅a% ^NnnO~vJV0Q=_{HvǝSdެׯ㎼`" c]9, r54yYVӳ`VȦ֨nE^0VwhwJ !CJBfFyuGʚVNgYfnBf֩d-i{7[Ʋrެn'hithUE J=R3d sV|i!9M:/C(Pi̫6c8S%gxBoEY`E^xtt]pa97!6mkQiO{ys;٬Jg3{Wlv}3oŦ4^#Uj}#} &]V AC=_! [$,r6C}u40/ҠwJvoɬDHcxAx>'Jl7/^?R^[|xwvH3G I5HU@?v1M$& hWȅAjJ3F+0CvbGGl]@WzBsh(^*UvqlfygEy+y(W3# zel(VkQl 7z34DLUa/A:ub]lseA^7pxv_l< jĆ dWdC@7,[cKJ"(lJv5۴/fv=4.* KB .BX mL59|"4Bn+{!U`mPZB;px$y6k֥E;iG.``hU DMj[,u.k weҔLKw1~ϴp( DﴅN\}9ꫤ"LUٕ/d%óa,MͮMyj`V[|lkSy#-.»8kesq Ħ _D ~zT!rUj!!\$ziW+5X\VP77-zY(cG3C0"!ȿy1FHI JڦF཮| =hpT lZOШ*n׶,Jx 6̚ zQ|vL*3̚X;o<- %sk ;U%j']Bhs-V7^&kSQ`5&WbїUe_CB1[xg7F)<ȌW˜nT9?;֘Ds3y`.꣤)k.@sptFR͜)Ex㕕Jɮykj5\6_6v܀GI$`zPƋ׍ ;m 3wQ<]943[٣BaEi+3lsgw:;c>kN~OV eW`ka}r|W ptk)6ڲ4Zv-f(\bR[1߉A'ڃ̃(:[^a2hSw p)}QF5.s#X{; ƨoVb}W6J,oe "G % p (jL;ġdp Ca*Plr7K TgJ^^=ҹϣ{Z\UuåUcOVy} _|^L̥Bt@MO9W>?%|ڮLdǚĠҒ$].Q_r m{t#0}+.*6?&YMtr.zSCUY $o_&=3[GLBOM>#f2HY\,R3 L .Vbv^SK=PջA1* { ],Rt:oFגM7>PBb $ !aV$l vahfà 2-^V.~HQ""&StMAeW87+H{^JoqۃH Y!E 00qBrOޗ>:ڑG/k7Ȣ J/Vp0ñx/'iئXm!N@b; F#iY@5  ( H)δj S_9/u"$A6L5babX)UI*i69OW0B332q ӣ"(?>vg6u F̾A}OErY~Rns۳ 5R31ۚ9k|43= r[[(X-c";1_ϗoMk2&G5rfc[qO0Zӈk?mqYu 䮏צ˸m,\nx/lϱrSKgKۮi@ty{>o~`MmOXT:y#|Yq_VM_UwQd}bGQ^p¹< Em菔~~\%YRi (FP,ڒGt{ y: fXBB! Hu 5W&5"*CԠWz" FW?G.T}"T(B1[Uܶeo(T Ӱ5$ňyPr"$0zDfkY2fE=,z dhQ$BpF?gzL*gHb\pF!< zlӮAG} 9"r-"\t VÜϗnCg=#Hb8SXǤ@vtEǙ(1(J/eD`Jtؑ!g,xGE|D@"X)y@.1qYZ(?eR!)g;SЕuu]2_uu2M ]2(v1 Jow$\Ie E 1QҋV"/YAiW_B.z嵗>}!{ąAlL(lluVv5@sbAiW3EA?20~ك`?φD>= 3.X '¤ᡐ:J*]Rc{3(t @[Nb >K˻)FS9 4D+ YmB7.@ۍm 余ͰQiMQ"VϜEJiCF1,)E:Ķ6f1vRzq J z$Ï/"(Η}yR<'[+fٻf;7Θ"?b'۶Mb!% R' %Nr^E=>^?Pn抛fQ$%8 Lj)0Гc:Y<&4qiedc/'A|&D3@A'bэb1hWZJ/1PqGurI 4-Ezu໷n%4n޽n E<,kQaZB c{>@n`2 ?wL X7x@>ۼOu"nHnjitRZ(5ʔQ^*Oi^DW W#8C)tE>|E~3\O \zQ)$&^P]7)x>et}e1L5>J1>馁,90}ѕ0Z\9(LZHY?LP1 =HQQ$ d)aD?IAa*EOm5qQ`B*# T2*GeTeAjܞi;??4 ݶMⱵuCoo芉lu w9õв<*rFZgdRqwf8n]-etv|,W"d@̓!\U}_u<mendstream endobj 165 0 obj << /Filter /FlateDecode /Length 6448 >> stream x]r#ǑC u쵥qǡh!,p1YGw3D+ISIwg;SZMlr_!dq&&'۳?OgMԍgjǹz¥Եι?}i&o6^%lm ^rOPerDi&ًLݨp&k|Z}4ҍBq^4o@MjMvBLlW7gaĘZk& 6yuwvU}ť!h8|&~l5]-7[| turo.ξy,)ASxqTQvLцaE_Ӝ堊˛ޮfCtgVL늈0{ʁB9I-&E-H:n?7]U/Ddod?uf$.E /&޸Z|q*NƙE()p5BN.x7W"ơ$AkTzܖ]+frp)oddLԆG<4`Fd}XV槲"ld ơa\&q$#(mh{maHGtADO'rI'o]IFeնqx#$Eo^"^i߮_V׋_ j7/|dfm]yqRZ`RZF^CyCŌ䏘TnTy, $rʹ$mx9:F^ B7Aq)hq6:_wtSeCd「LʨS_dT̸(6?@d\ b5!śd9  tqa!gLW$Hꐄ8;c͖!Ynז̸X澛E@>YjuR*!3Tظ3T83DHځg33q CPJupE<_51#G" LF,OeRFYuΦ+0D1C&o~&}^8Ag+v~{X[LHyz3S ۉ Qg򜮥c/.7apbmF=,绕ic@I:sp~B3Ϛ}q@;pMno'#%vd&f;@C&1@? ,]ʬGɀ x9梒k'de40P2{w”_L{C `C.@P*D8B!ٺt뷧 (*q? mެ :R,s%*Sw%,֛N S+]dݭgA,iFԐ٩,)96Av>J[>*Y-na!CHHiC#59FL 9قO.RM`T#-N]#pRfjd/NDTHŝ i[."SE:0 B<6Mx?tpJ&/i(6b'*3)XZM2! T=%$P+Gwa%ʤ,!nGhI.Õ/yUO̵9^X`Q\Qۻ_u/.óPv(np%J`?~o^mV rUM[RC7Xo*e:~ 5jZbۭvx+b u/!/XH</`‚_c# ?m,<|R!SVEa7sQN(6b'`?gHj7]f\fB(`T®y8 p$"VP'# CVn4N4jxT+]Ėk,f2tW=1t^;F{`צNmG4qt$8dq'O"NrY|"70:kp*ӭ>5@\ZskEV^8XSU;|I񆲉J W-mYC6$+!\8AUփM0nUMÇP; P E߯W6}^ z7~M*F(u}Nt)Bv,"hшh穋W]/ MއȾsìap+O#aN8a1@Q tnop0c_ꔑ8/C^~ȓxn, ?ਡ49'UEtH2*6I-w% Fq"hSxcaƥS>ܵ>/WO4 [.Qݦ4agxR%(fcy!Pn4Ycڻ}{3G. /` YɤDe|;=HePdPاR4$BǎxIo׭/0CԻy9nBA#&~AJhmj{bBwOB1)gkQ%}9 ʡҁ`g~jz$}D2=S >xס YܘsLS :i"^$h繾B6_&/<[C=H͞9 +]1k 3gQH|kz9GNbYb\17,mXgoZL-^/ڢ㖎`]b>{$3I"(ԭ_o.+NDRK 4E<`7*cw6y١THTҜK Oe'!?d?V`m<1#rDU=ckpqHIu6J<T7rN;92Ufq!p'ʼn7 )b! I _\T2ً;.ʇ_xWb bɇXRXrS2 H&RCQ^GE͞5|Mn ^*B t ƁqRCl;D%DD~`u#I jV 8Na" Jj({K຿ʄĔ{XeFN9_s ryHXɬw7e`z $,^̨FXBLIU^~e:;0EZ,}1CLvMN%gS{ ]\}EOUut6~C( $^X-YA;~eո 1hAS|yko]WN2n24NCC&AOƮRBfi$FʧZwͼm-K$Tȵo~R<57jEGV-Nw?}MѸoQ}zH~h 'ܟxƩF"2n A]o Z2VfS3U< 9il t&'KT8%C&QJO'ag_DLٙ`H32E;(Wi(޵lOG"Qq4:W#J#i/W! .qNxNEo8 `xAeb8 bJGa92aTʗ.QQG,Q9ZSn•a_؛(6p_Q-9QDڵ)߯fT A~ͤ0biIϴA D)!ŔY{aԊGEKكv׶G$OvAŌjTU""[S"VA{0UP!%Wz&m1d:LF:Drwar`T{X"|`|߾tKrq<7;hFEfO6o;RQ?sIFn4`[OX ŞK0r!5v4zs>½Z*K~7_,hpuݵCv 8!DY7Σl!@Rc"]/Wtc)8rtGPk#b1 Zd(`Yd~ZI'1 IH?Bn@d- 뇟(i_x{Vx%3mNA[H?~~Ogua.Rϑ^i圭3y8 wN7ל*ii?XU}Tw'wNj"EX=cK8 5oFaI"g'0!zak[3iӘ؞Ģ'NC-148qA>t9 tˮ?俏lQ?}w 9o"]asbֹ~`EUɈ@}9>RNoa=?D,q,=/pa }DnmMfnH(J]"K~x3I4Jzg{r<&xm_~L45:aĎIۚU"ZAVʔ})1k@~xu~x\LLQ7ME[QZE7vi)`, 5= ?`;ρPf0v~،Y3]f 凣0NTOp1⥇Kڍ;IL*R Tsv2$[rWR;Ohn 3]{ցt;=EHmckAe|Igں`f񫤐%SyJ>/Þ)> stream x\vȑיЙ9 n,\xfo )Js/p3VnZD:9mŶD% Ka 6ZJuڷ?Paƫqr C?c@lp fK` R%Du KX8DN: hQ+0ip.Ǝ{訬B%qx`F/QW֟L?4h5ZƯ@rָQ 9M{yH5 ]O!1U*vL/Q+&J(5,ae4`NA4:gOAVòAWYUsd6{=Bh8c ,w()J!ݴvD433; C#LU6mEm5eo 1 Z 5ڢ?jĀܱ@wsl q*[ښ儡_H@`-Ba {*xnko< $[>Eb+8Iѣ/L8-6v:oH]KNUw>6؆s8g*]lU[dyR*R@Wba2~ Fm:65ə+vݷӆ3!-N0W-]|P KE)3]o"yeJ2{;M#H$xAg1^PiYfC% 3jb\폆+A%?)=hnP`кLl7mg܏u-hxb$4$Y{oTGqJ@}V]8=z (;JOϖ;&Ќ1F!x=6@LMLπH!Ksn z~^Ax()Gl٘ByORQ%@1?BzŵddGl4rG1/Px@˱0yt&<"t#qՏfdMV0ggG;d쇀y '@y}A{8LLP c6 &iϊ+ (Y1^ :0Jv>ma /s?wSSѾ.+Y3S4 wrf㋁E@w~c.QQbO*.ь{WTW<Jm ]8  iw!g\bւmYx[Lqv npe k죐!Hj5! ‹*v,$SFpRB ,eF@ jjr3'*NggZ@&{vԎ% .b= ho!q2cؘM11m= 8q\ ƃf[=piY-Bru1&$TSv2z6hv-1Q]O]z^x ҈{3zaT֯uU'&4x fR)i P^k p,G4ϥ3jk<'sQtx-$rRHDp/bni ˺.? ʦ:$f^9~0%h/G9ȫqIk)!I"\9g"˾[ztjUl=/>0ѯ%'=^X䁨OLo0=lB߿`Ȧ}6>PXu_D(8sw涁lJ莯Piݠ nqpBCf5~4`Ns4*( < ւ(jhp\öop3)=BCMNwaCC9}/ hq;:TU}l Q'ΨMCkAuD=wG̗^mqvn/v0KG2]1֚!*NFYiY x|9cA lH|y|ʂZ)]RՒ*&4([=<Jɞ1t'QPdc~z?^3=KxN5 й9=)X=D#2pd:G&>* 8q$LPU5[V8V裪`$N4zh)Y] b T }+q6I,y-t zu;3OeϼIΆ +E`rDu~d9f:>xDhyU?YPա*{pG*#;2q`2P%z>Xժ >m=U'u 운{V\1OC.QkP#ߔCq NR{}P.Όw\`?eXi(J9,yM6k?3ZS^aW*'PUA צITGO8'.9űZZyԧ~hpuo@t8@@8."2y44xu4 n*0Y 憲oWv.qqq2)ذ?I*d[:P֓*x{Bz|2\5"~u{5v+6[X2Dr j{0%npdEf(vSd!bQz/Pz,lx<MR\\9606Up7{.7a;G0&ٚyH>8e 3k.6;Y={, M1bcLJسR*VLz=>2'' ֔ʱ˥ ^1M4Pd>5O @2e٘_9;Mfzj vFA1؝+GY?y6{_x%x k6k7OBk&'[=\HEN7E;Էn  bgWՆnX"_#Ǚ Sx]4ghm1 iڥ)Dsvže e*&ݗ˛k_~[2pu{iRȞՐ\߆C)Xd@}ZJ(ʥY=ǔ0nW?/B$Bt!BB.,. Ugz1+MXSA{DIF,^/{O!N=rRcMSFKPU)NHoT G$}0~ EgY:3tߴ@X:jb[gCE\G;(psU}ۮ6j9L5-ZͶ|} uuk]Pkk\ k[vKl:QƊi?b +S :0鴚ƂD8\Yw޲YXM Q1`5K!oH,x0q4nyrjZN:#B2>]9a@Te9??C3G*?:J Z v+*<= aѯ!%\bOD YS_&f]mFwdru>!cA֠0@b6Ke v{S'FnJZV+EnV A@ɇƸGͭiE&,sޏzEB]#6OFmX@@'aDž6&6^)bJ`$m`$)+y)s R];H=T3h<۔Se=DTdetnқQ]zrA<e tkuVd*4H'Zww>؛$:lܝC'K U,%Z] 7/U9A*thATre]ZFBD5^ϺE0mf,~k3r]҆wm 6}Q;\` HrJcpW Lq~? EL)1@ L jS5RT8)V!<`n[\%;V4~Pb_ik2}+LGӾ πv˛[T,VDze]H , ;S{/\w^>ƚQ&t1}*d^.UfH,g}5 ꜳ>nbxdbD.`䈊E uhi\A々Pn:(ZAHqvjݖpƳaUq S JUbͩ+,h'0y훗?9XB~ r XG[(o_W+B<]fmtձ"kJ8e$hƸ0OA)SS]K*PUƱ"9x3VQv/`) K-M4RΦKe⟁4F"73+u|e/Q NP8O)-lWE';Gendstream endobj 167 0 obj << /Filter /FlateDecode /Length 528 >> stream x]N@~ AMh.pc8 }{*a5R%N}5ZZ^>.Xsy[֪iN>lϰ柆rxiۦ2m>o:5M>s:U8ߏvwYj,iY=ӎYi,N%KGi¶Ymi,v}`{ZѦ,&ZF`4zEԓÆ,hԤIC&MZ45ilТIc -&5dBޤ̉&eN̜7)sb愼I3;]N|((((((((tqSp\<G6m8plф g&\m89Kń  4! Q&D$ ЄDQ(@" hBDAM(Ht>kZPXy.$/]}/Uop^e-/qW U_ =endstream endobj 168 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4362 >> stream xWiXeSFDi76h\ū (,0̀ .Q="QFD! pb0WM&n1j;=M{xSUoVAI$, MZ! {,pFnTPXVڧ{}w^CI /$?͛>bȩ }*%UǏ;|RJQ.dLd+:/~RR|*MO04"w LJ(̄4>2+1MgJV'k24ШT:F|P*T%eB!g(3UZ-Y*-)xWiYIyQL N"5ZVbd`G]jNUۼ&W89*rZr8t^;p%e ֡711S!syY }0 sxߢ%MMWEt;o nlNg&.(Xlρ7Q7?Y,4ݝ%%rBu A*9F  u` &[?LwOc)y:xKTД n}{}9^}WWWקswq,!^%BL,c:+ry y c`?F}jd$zJ.W׈F1Vr}>:Es#؁))g C!(Fɂd0࠘o޴tܒa`/$_ w:B VũKoV@2Yї˱%q0k9~XJ,J!ǁ9+؂B/''q7jL=G{vo\*!̺h${SwES:mb61QG:x3:=`'lzp[Ӂ)iҜygsabӱ5EkP$iyXzg^pCizW8{BI}u}ӨJ=qJ*Z G ڿFKu_4r ĵYR.E|E218mZB__[da0'Ķ{Sx(/Ho{t^o躠䱙$y<<ثG?|rkfՖu["69E'0z &ʼn89 g !3ӫml}#;]M'oLn6H#DRFcQ{ rq RS o $bƾN5\uzlmeʠ5*wB B R E;QۺӫR^d2Ė8 `Jetn|R@K.?ڰ3\cǯs eoOfv}Q=ni+>(*ٺHY-5?^F&{7N^i'AΆbf?H9gBU,ɳ<)ɩ>;3ba5F0 b+I}G`{<=Ŗj]饳&,zqԲkdJ5鍩s{r?wlimEl;19LrD#dȊ;VT?6/]ߒ\Vxbj"Y00!0@M5 LW.؀n]-ߚh ّU¸C8oK7T}]\ޚZhl 8 ǖP۴o徕HRjrWX|c<" "<$)LPtKT{"ҁ ᐍ 6f!&Pʦ !Xza.i.%V"GI5|vネ22Qr$X<%ef]*.Gϝ:Ǔ|"p"-!iMz <愡dĜ 8'/aK4w:H*|1c'xz.nx*H11ȷl֩֘eOSYr"z y 4Ѱ3QLfi9^9W]`mQSx6vv-aM+[vfa‘";v.Nxҽxevx 'arͺ]8(+.*Ld6|@^B8M0lȟ5YrZ \$J.O63($#5vsC>EX$vq> hq`ՓBg5Q:J+^aU)uw6@:y1F=MRݍN\w1 !(L:`?G&n{}Uե{Z#\0X |en0 OJc[A-M2.pyv`(z ^{3r).mD׍ -PU],mKoRAd&7 [IZI=(PL ZT vC8o;H>vh 0ݞ5M=./ݬ8{}vZ}yt[̺9& zASuyJ \gQ.:>v<42rq/"7~Ǿw+ y,#id?IO,.Y𡽍q?4b 9Svo޾oUmM23dqWs%E}y|h[v-q X(%$Ձ/KO; u5ܮZ;}uvx nD{\O%e]*X<@9/ZuaawaϤg>?{E^#E%1X'^-X *DJT(]@$Rw@5$C`u׮660x-E/"Mendstream endobj 169 0 obj << /Filter /FlateDecode /Length 598 >> stream x];nPD{;?ckE (Pa"NQ=g(z5uUorY罾_?6zY]̗tp|6nlrǷzٝRu\߷qcۖe)yj?M⊘>mwb|(}`< NE81E83֢A8m+bW4c_4=#Q hыh Bc A<3.E D&*#De2T"@d2RLTF*CdDbxMFfl51 j7nTvCڍLFAp[pȹ9S!t :\NAiw)8K8#Q0Pj`RC 0RCņ(DBbJ ,6Pj`RC *6XlPbb&\SI߄k7pM&})ߤo5M| הo7M&\SI߄k7雐K &OX۞TZ˸:$x@:czөSes ơ3endstream endobj 170 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5689 >> stream xuXXWמubCu@bÂb-X)fJX梀(H*M@@QTDFX>QILMJ.ΜsP:}(D2xצ`+M65caDG!G6MLR4@'saL0փA`9#8.l4u)F6BT[C6zym3ZRjf\Q{{6w73E*o7wU&_HQgN.X4hYE6M7/s<{Ŗ>|L0%gjq懦M1s9sǍOQ([j4eG͡PXʁ2VP㨕xj5ZMMP&#D9Q(Sj-2%dj)5ZFM,(KjeEMrj&9eC͢Q~@:tAg%Qr*B>e@R:pjQ})#j7eEBl0ɥ>&}$]'mvi 1gپ#{׷oc6?do9p6Y m4Xop\izzdd(k9%)_-ϕߔ;d!y%?__`ʠdhP:h?$jc)Tx}X]_ [xE\d=Mqjvſå4^ WQ / &{ R}bóhxT#QJÆG8ӞdJ6wV~sWsU<+APR _7\ƻvgGҚ6S! ɬ~7., Un9W8ʯ7l,=ZTyD>読Z!.ἁ\ffxbvcbTS `ݯ`Z[-GF^[\C6dWV\Pb\NP._A,іLױto<ɳn3a6ﲋkd6+=$g쬸lԌ'n4TѾ5Z1+%ԱkCRqYwA\Z1"=WC*Y Kulšڏb=Q/$hYQ}!"n: ^墯XuKxZ-B8$|YXU5DxDL hɫ-m@7+EocioN<: ZI I,s$!іa.w=ΊTf3weg"xA~yZl^\<#Ν.o#*II ˥zk~إ֡5]"/ֱ˓qEz/4N>\k jٰ/ް&Y eg >c]LDJ ;V6i]$?g8OÓGt\!3ʪA:)zAc;_?I#H5zd 3J5"huz.]K{{Fy"nWn>|ST{qɺ^HsG%ZHla=Uɹ$漇+{)&'laqp.v"-o#s|NFI~.V;;:!. ُP4t`;X '&x܋0ռK s8&󝈻^aN<ڍB9IORz1?-𳵷򚊰TNҲ}Ecw۳;$X\mtV`lciQlnfvϡ+uQ |35K~i09FXyE 罰z@f.*}~39{PJPX}:5ԟЌg ݯK8D%L;0&8W*H<|AYdkp;ٷ_EJ7`7j9FV 8> c ףZp&TAe4u+}#|QHڑɟG/ru6{m-woַ*jQ5 1E(e%eHA)#+cJ(O3CބsZ \][mjWjn,Fu2-[+\&Ծ;F&fsFxۄ"nP@&$2!'$h':@F#b$v:!W@ ^󭓬Z6V4BT4;A5\ kͿ);aΝGOHϻg*[|}x7<`wnB;e ;H3#H`y#>c qS; GAQb|F貕4O.]t~ /\r)o 툺EfЯaGDqUc>сk>4.XNY8(yRg"4A6p*S3UQv.bUדgM"<1YƢQ/ ڎB8␆sg O(.q54Dz."AR&IVX6i8ژ22i0t0ab2X0B`FtwQfd PO%-vrNƋ!>bor`DbS<.3hJHUN,>K^YrboѷN鉦6'Pl/zFc`5˱ q#+;Uf-=O*A4/oḥ' D µhZҍoڢTACuZKǶ,ໃe"]GZ:oXm:QP+AMBu i3DUFEoA!*v( ,MWQ]RAGML ]UL 3O4X~Ovi-H*WM3k Ӑ]bwaA!7ֽY^{3>M .pꞶK.9 @`^x'[nFQKt8|JOe!E1#m2]}bɃsYR5DN[MQn2H/g';KOhXPND1&`46>|bf'Nf8]udpD6q3H:T`kY8 ]q4cxWsD7`˚)0a2edű46cC m x0aŧL )Y&eXp똪Ju8?:^R.!Җ-H/KwI®_  %2; y2r J:P,rٺv=7X*KCbM`a(GٰdĵQ9P$1|ܑ]Z/]G=Pso!֤EICÞYc>ko`Oq`Y#e>J9N> stream x]n@w?dТht }u[=A/M׹oTq}Ƕ-RuW<8/?==m;О{;Eik`+R$XTyщj[MK&p)$`.L `0L&RI\ 0 BH" ȤNm'L DB(X “5W L^כ%;n.kwum׍o5/-!endstream endobj 172 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4347 >> stream xuW XWמ23*A}qEY UZ(jE[ETpע@]Jhj~g >O'y23g2sף"ÓSVkmX?NPXtWq&8cr$Alܴ|X'wyi)Y 9#;'39+ LE֝ܿ);?/u@A`a‚AʼnI!+E\x_w98:9qqus9u<(K*R0j"eMEPE IEQbj EQє7eOP>/Hͧ(gʟr(W*rPT5 Q!tj8e@R)#*I)*SPeJRfhʜK$T5%iT``X/LX{=_W}[E{Dm%=.[K&9(Ynؘa1ÚOo#FxHq}ĠAA!m8paiVC|F#CFsG1604^'ԎHK伓LgA6ghS)4Fw@sx Ld7!0Uf>6j;=e J$}uuKK:5=##| 'Xb죴0̅D0~u")tY5Yi뉎B *7gݓ+R*Β4kѿc&oYS8JlkE,wR OO f;=( ~5!3~װ. #ot)! G!UT^S8EC@PAw`.~!8hdN[gm珒CyVn! Äxߏ :&E&qI;#6e}esF[IK7lL Lo%"- ] L0n-KĪxbȮH ^B:|XFԙB@dOc=)iY-e/as򬦒AaVg@oR3icwv?hQ>t[i&v$9ql~;q E!n!M#a˧h3b>sT % Z*Ye1C]볣Z& _Siڐ܌X ^ӡ曒QG^T[Jr2MWkVIm;^V ]' .| xtToHċH2Ak5Ev4xJe4C8Q? ^ )4wÕa3{0}lHSCRǒ>^K?Y$jN53+ԌLEG# g)&U'j|5ҧ]QT?A[s~zC;~}t_Ch_]zh:>Ơj/ҧ>}` ƝJ4tڲ:.z Ys^h\!/#.OLJԦځ1 ,ۃ0c-1O"ru yF`t::%'%/Q cz1U"L%yCRN~[tq͙糮L&;[ۓH?I` I>_xb+VnGͻOm)"յOP$} O1EU 3.~ׯ]0C^;U/$l~b:g7,|8Of-sca'D1MKf͊Z"Mv0%;qapj3f!s3V]E9 ٰ kuƲP2JW'٩N0#^sHdpQ04a9NtW#Z퀭S{Ȍ]UwtƜ'Kp+;"\+M;7N\\ģe+9v@Č?#8`g"?}-n"oN&F+l۰F&9\RVCGtu⼥ b$pbA+q*O`T6ݵ@LsSo< jfR2fdv^]>,~YM$ΉCG Vx=>Fb7L=NXؒLԙ,Ҥdov/P y+x6ɛ <ڥ!UWČYq(rj}7@bU|u%) D=GYCM㙓-.ꋸgs /hz88>jiؖ( 8롺R~fqIG!TQ"a*|Q^u?JՆ $Ou3^(rPд̀cUCGۘ7H;v69']kEoi^ q.鴙Z"yx`!+?lC㥚AMaFG9گN-*#~ۭwN'K֠]?d^D^P0Fq-Eqs?}!B 7x-k b"H\VZCLa1~p* ߫\pjp\Ь1qv:eWօ` m YK'la qqb(jxr[)VNUc2p Wz5sV}BN3yڞ˯G|!yWG?=)47y]oVI~q{C} ]D\"u\m-/N|{Ä3?U vѵ"q[.^|IJux劽5~DX1}VKҏchC<[S>(s:(;sUFg&},[ip9l;E`O{*]%̑ǚpW:9KC.eF=rp$9$5=:Jc*zBxj/@ˉ xƞ* N>l䃌. Wx\t#ڗAJHVTn&oG]?ܺ-pR3/8C s0> stream x]n@D{~@q#H4u4T"h{fdH1tݷ=<=>-k]6߷t"?qmv?ߵ\P?ouk4]N}km]W\+p{eZ?$+ !(1Cq!B!8;}q`pP`pP`pP`pP6[!©8IN!rǁhpW ^ -‹lVaHlV9f 4+PA9X`AH!A_+ &B0C&m2JڤRFIQ(i6J%mF)diBBJ!~ZOë㭋}/crmm%9/߅[/jHendstream endobj 174 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4130 >> stream xWyTTW sC}_$k [֦n6$*pAE@аdQD45jqt3L=rdb?{ޭU_ՕP&FD"R>ZvQ-3' %FuXxZ c4Ĥjn͈Ä)ʐK$o&xN4I)#" 4~})"Bta*W?:DU~ξҠW zޝEt;',-$n{|a H/UӦϘ9s(ʃ>VQ(ʛO|(_j"GM)ʉBPΔH-\RʕZF͠ܨrjLaʌR#)2FQ%eEM% I'%dedcD*bЯwm7$yHPfhЛ M[LKW"a=L%zhpxzSe-;Q~]Q ,zbrtjh5 t XC!X ӄGhZhM. ~h||I| gcd؄t49 W"Wyt ߾v`FJ ݇nWE>(a\x4gV] [3j{gII滗kVt,2/vw cX]ē!W 41G&Y]<`lڎ|ꂥ157:gFxt <0zơ1` N e2\tq]_N#|ݢLĚvU:hkf`_35@ L92?Qط3% {?~ h'g=}@;r<$ȑ~{7~B4~W?k~g&aR01c]M`|wQSh?>\Bu%6/`qae*k,1wC,ä$mGʠm F^ ;:T>b́TdYUsU&^q{d)<3 ;%]0X.q `MVq kG`)h՝]YS?Oۊ, 9dΗ_f!WS9L4aP'*\om,7'Go#Q4gθxo9mm)|I(O|?" DG%]foG ]E 0XH ݺ:2Yirʓ&vDFˉ=@{3@swAƁ\+T_c(Xih0ogD$FnnEi۪dUѾ +R(*1GGQˡm+% mؾg+ S< xै W7U_'?宜-eJ˾ `lB'50[\1.ĉ/:v6셁grۋ}#Qq/å:OK&BL}#)R=d}%Zk%_d3&BCc;~O]z6%i*3`I^JNAdyr5B)yŅvTJb2 ovOP,-z~a,Q40xoϹX,L4\Z"&80zLӐ5q)fJq9Ogh5'8RYE~Ӑͮ;ZzR.p.fEpMa(;yt pbܦFTNnnF4*qD Lp$ 9l16wC\fE~TeׁgL\yD.Bh0XS,e|elZ~gg˰  %"ߢ ވ9=X",)ޙRުl˧jii2VIwqC[4_lLLBbܴB :[Ww¯} ~&0A|n2$Qe&)g %<^qQ42bdF`#vy7 9C"9tGrFn{^lXUK+ kP_C+!I{R?mDŽvXMQػ8NjneJ*aᆴo<}BrlM7{S ĶUE*rՆ 8c؂bsL Lx upkAin;FY^+ZdrhӐ[?}[}t-ԁ GZ~kc;~D, _>Y_XUMmR7M7`%(BE䝠Hi dZ+pLޒn۟2ئGNS|6X87l9S;c na'QWB`)*2b_νqx5 9B) _ KsWZTCEC:VʎL uu˽,Y> stream x]; D{N hE(`Y, ¸NbVve|˔=Rfj7 '@qq pmª"aM'"-Պ)= `R~A2r.Gk%AoV=B&,ʦb{ ֟*Ӊ@aO }n 8bEٵWPendstream endobj 176 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 249 >> stream xcd`ab`ddM,pI-Lu JM/I, 154kf!CwOXyyXzx8&}"O'wWfFFCHdM#ҢRҼ"TԼT=  PB  PEWϜӎ3~tD:}U ߫~_w@ٯr!?'χ }N^endstream endobj 177 0 obj << /Filter /FlateDecode /Length 251 >> stream x]1n0 EwB7\%C .W+ߗG l/|i;>MgM4Ƿ|XtsۥD)p)}j%=W0{R{В&tG t'A]IR@ 4FRQIh"gÄ"^2{$K*D^SaJJFr^|-W:3eҀendstream endobj 178 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1619 >> stream xePSW_H^J=[PTW3"[G~BQH`HD UTA ,&ȯRK";kn[mnwuҙ&ݐwEI[5j]FCN5uj}$ [ BSY& (*JQI~*j7A"X*+dTeIM>N9itP+${DUp+G} C,(<=rLƮw0NT!kY΀J $&Z9H!:#j'UBȰ8R %BBH8Y795ߓ-&A$P{gL4y8)vЛ岿raEPYhk/Hë膭*f`?~Wdn"*Q¸-D]ojopbfv0' QGԙŤ۰ͽ=~AS@py2^ypkE_RoϟU'k ٺ\iZfN=mvv]T\}3OspB'H(EoSMkB;qɃ°vxV O 4vS4!xȄBGu_7iW.0&>IeLS_y3FWvX._X̀VHF eb&hsHZs+6xk錢!\!|x (RCA)endstream endobj 179 0 obj << /Filter /FlateDecode /Length 261 >> stream x]1n0 EwB708\%C4DgKIEj96u_9}yHBהM)iZ-B)d͛5 ݚ2ѽH5+yFCyu[e~fp5C] W*;^8ds:Q =zFQ4'pe^Cz 9^bA7,GڪZ)kYq\e)e lendstream endobj 180 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1932 >> stream xeTkPS>pelVSܓJꮸ] "*wrMKKHHDJljՊB]ukm;Ng|lL;~}p_33UvIЁ8ڏ~6 9l^Cmլ~9~f,8~LmةPTG|OUS|\Mԙ ~B%;DF%L_K785_%T UŒ`N(C(׈R%/a2rJ!4ˀaCN;$5U:2 8=`M]mCX5k]n6k/A^ětYV(VzxQ. ###](P @)ߪ_F9XJ O5uT.ݍ#um\ #9-9C+hc%K*+YF/Mŏn:κLB͚;cWuDBi"ԉURNS랞WߦzPY`+6,873`wC=\VI:UVId>p*.Pz&*3 8 8n8Iu8*\OE˶ӮSeVE" g@Oh^svZ' Z1MrBz^+*1M,ϋ{Ixl9ɣm˶Zˢ2$2}C= h3r( U'JT#7U]SvGd[5Fh{ k9G7dwF Zn8pO׷Sr2bx*F 5=혜c(H>i2570NP? (~?sU-`#ǂb3YT4y!Ǐr}*iv\s?Z_Uaf;|muGE/>*3{8&V_nFx+yRSe@ d(3%DaH~pߓ:I{`qʹ|#A_@k>] >5q U"سh;ρl;%dqRvʭQWd@a0ܔz)}D1!nʂ+fj15G5UƽG.ZO9A(wVR~r> |GAA D3ij45̀ߜ [= )׬(VoL޹F1`aLI;5nk[erK,֓4Z-ӁnrYw'KZ.4l2Քݣ򝦮": 3̗Eᆅ(cs:^p]/Pm&g9{[*ګY 629,Xlrm==JLgWHH[K1_Q'endstream endobj 181 0 obj << /Filter /FlateDecode /Length 319 >> stream x]An@ E00N$MɢUd0"d'颋oaMq8O2/[~n}I2YYݐ'1k;g᭝fQ`۫>S8nsliNjeMf6vRU8qUTYIWR)`X)ZFfl-J&UVыF)qpK"/~QDΑJR1)Lxk{7R@sb|`iOCWYܳгg_gqBepż6;mظ}h<~*_endstream endobj 182 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2407 >> stream xmV TW!Lf*j$(UyXU@@+0PAj{*P @ $@@JZvm/ 9{9|7$@$aBWo[.(oxwakt)4E8JN{DSYNZ t̀i0p (͆ݙ:u.w\&Whu.U<#E$͔W:"YI\"UO~&שT7UqKR8VVhg6e.MS%5዗y/'-V"GۈP"XODO>kfOJ™AHp! %qt'3Z:RRjD[|қaƋY˼؞əyIwUhîlW QEY֣fhH^/Ç,CT СQع](kI4 3oγ˭e Dp7r}<{~? cwN[^v A_.Cd|֚!ڔ> QWV=r`47O7<1,vPmzӶ[pp>}Tт1YRT(u%? [m.>pe\ x9\5/@:0JqevPx%AxJg*_.¼4?&衳rHЧh bA3=M4|oOabX~MHڕ 6k;fO<'J:z߀W{]mWsꪸ`>IwT2dsf[t:HRZ"5ޡuosN4%6*w0춐mխر9'^3=x6RKFy_ߤ7%uT٤Z_?G^M"^S5M5O) /yۙd[HY}xjWBloFj_{`r2-d-

٭0S1 ;p~0{ ҏb/b7JK7+hymY&#5 ZfV1BkHDLD&! e!+la>?7T<Y0;`Lm3a2ʂҽ/kQYw1e&2.}T]K ߊu\i!f~bvQ20ѿ;ShSYc0֏xnyA4B.很VLLɇC#5yU2_j_UAbZ5_ m|u|M!GyR.?Iy*ح<;᭴$0Ero/BOs262ܾ3ZXVga$M qcb|k"2CR"-#{Oo VEdD f^Mx]T e0$>TP6$v[8{=a'Wˡq#fB-vÎOA-MMlpeg<+9֋8O厝,\g:%KR4( s^nQmHo^IۚȂn7a^U3)ªbT,\2B~`ךwj)8B%|$v2*(HP{%P@9{y}os. }!dKrKM 5Rq7]e(2pJ(EYчBQ[joz.TX̜"%U_δs!;ä|c/5%?s=b~EgNr L^S]3В#1oRuI't'77H{ 8L D>i&avIێ}J;wefD^5AL;ڤ;ϳ$fnЊSâ.,C&xNߩD 8䤕lNKDߘݸt= 4Df:ѷFY'u~N'>"0 a LtRejJ%=h,S'x%L&0ǖV z%=C9$m.A郂"{6rc1T:Y1`!R{Ȣ#qdܥK?H:P8YK .Y_4x&Zic0AcXEk9 Pށ_sB0(57?>uUEeҟƚS%> BH/{fx%!|r6TpV*: Gendstream endobj 183 0 obj << /Filter /FlateDecode /Length 636 >> stream x]nAD| x(JX,< TvYH39}[w22t~M}8Xoy6=X>}\ѿo}ss~|4]:N6ί}_tj>/W7리Vxna:k45X)ɺm uԑԉ#ko jg=5{-Z `c225X!g4 LFAl51 &f#ld6𚘍@tB:]NH tA:!.H'c)8b\SpNRp*8] NKw)pcw{&d4  BP!R*C A~H!)w*t*R*C A~H! 1G:'xSIo9ɜM1')$s7ŜdN𦘓 s91SHܩԽJޫM(iI%6)Qb $K & ) 8kɷ[p-} %ߢo[-|גoѷZ-\KE߂kɷ[p-} %ߢoA$'wr"{qmm%xz\Հ,?P"endstream endobj 184 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 6901 >> stream xy\Su#*Q{/ZgZg:.&@BOaEqᠭb5n_y' :?p9;{g.0 pgSeC]Fw{O[|:mN:=sޏf̍7IL^2ө-F{b1>@L&6STb b+1p$ӉšA$V3] 1p"VbXG#lzb#Eb"1F|F '#rœE8C&hb 10!f$#C`0%b ċd=d 0yg*3}h-)#KG  2D5ġ% {3w#F F/7?6uԗ ^>:nOtcǒc~g9۲ppp0M8qg?0a턎`[VM2Q:lUs 7EʫL&9Șp Jb@KzXeSbNEקGւf b˟YdL3/ },ZhYpV!JEsTq~qإXR hh>gdfNCth M_̊,zǏ.}uE FE?[D 6%3J4|Rr , NNJȼMـj,d֗htOd&h-ރ/tF8C: kE6?t+d?"<)Gq&4yZ+̵]kmv s/}|kg[-._#!\&) 0t%؇p"'F&4̊ |w֦/̝Ap')8 djog=ccIfuv ; tlNQtiE78:1|5dkLKG!"8X#$4|@U~1&\C՜RYS؂snp 0] 0ЇU d5bM |s/A_cHkuprAUTIDŤA` _pO$ƽt_)=$Oɶ%$~vR~^nt-?/esm'eg@TXU͜:ʰgRYڴ.1h1{Ojٲ_w:4M71p(F\Qsd4Cv"K8\{cq1S.׀s^GJ-Z%i5Ȥɾ)LP+@W <~ynOd_o8]\7nx[k0Ӱ_ū @+sh怒H'g^ ڞw+Pd`DpH pD3r| pI$M!ơ5d 5f52 H7yTr , Za".ƄާtN2VA~6xDlSGsb0BGN X@{^]Or+T2%iQA Y-^O5'ƱgY7<d1ГjT<"1$SVԀF-IFJ˼;P6wUh_Kb*{@xW-\en@-tɬ+ArX͠_hpQ;埸5?&&C38ś5 ̕D#ȃ ?e>ٵV?3^_!9f,O 5#7(?F% /L 5Hz)52_V #Sfp cV(N\x=OcF jJ4& C u9.A$wYf$c.42pAws\Luqw\aȥB3Y˜ޖaC)Iz=*9= %k@LprVerkpN8D\z~m*u #UZ*~vC pGՒH Q0qkN7Gt,YRyVlDG.4:ߺ_ag¾z& X25%_l ,cjO@m2xph`{$|^of<'y!uUf@vMzEh @孌*JI~W^E/;Rv AHoҋuo V 0D Fs_ߑ+Ν-Z Qn$N70Vnfh+C#Oıp^GÅq'W;\}HsVF~ ۆƩwzSH'hhE  + Pzyȓ ҈+p/U@X[:r*/ٯaέ0NB61`X"}AcdY8)۟F̘ӆh8*vLC_T_ (9 Cv.T:Бr*jfkmN!`W>"w,t}.hw l}aj+N_-_شHMSalhqU&*m40Nx%1~j e䟄-4&h /8Ƴ8mwY3^/ٮOKa'6^:y nd}e{.MJx0%޹^zGoI <05y$[ 潵h[C>RpF 2MA.I|2ԵFE#ko=lRE԰y̠re˥%U,Eݱϑy8uվXhk:|:Ƥz:G !ɿŻA[|Zgm!Wn  O )':/LEPF Ls;4Ak1F /vU)AY6.FSK ~-b_naOjӾ^]^I} Јt`6ʕu@80R\WWYYg\]+q~p ~N8zffXG<R'N\YLqJQWEo٧ =r{nG$]*tpqUuSJSRʼzD u~CsWs ǽU09lcXnp|6 x%L# yy` \%KMQlJ@JQGKe e/N9\eUE̐kpc% (XeUɎnh32~?C²8ѧ7?MPhj:@6ZD3fgFӀ6۸m-2|Cz~݆#Fûr|r+Kc[7l߶mÙ7 |\?@aasz4իGO(>7S{R4EdF 3y pi)D2 Tvj."L!+kfrc-[*{$2Ux$ݓVŕW,[zˊݐ} :JWh:7 taÎ;bOQW(} {,_r>6ހB#W? !F8$Nݧ\{Tэvj/["A?{FnZbu@ͪ=iҴ6 TcrҲNCqtSHWlpU\,sz-n6iM[Ju/v;+RDŽ80b`Yd].~Xߟ{sGA ;O"g+&}? 痟h(`C8M-^?!9S\~ @AFp4N|Пutz]u! MBR\o }iPx-~YLaHHHJJm}jJj٠ x)E*`f򅨬TJ岰X행 $ eeꌴ SlH^56E\([h'A]%T*Mkv.F!"a2+JMQp\}A/\NTIM_H /`S/;HЈP*U"$y$SCeLGsK",. } cT;/ $##'i8pP]~jŮۋ:$JJMӟFZ}hGV^ʭ|m/s_g+1Y F ov*Ve3] Փkwr'd?tk@~D)GΩJL /OUE 2&3 }iw.[z xW_5o\=y4YPЙ0=%>Afdԗ>@$c<_ ]sD-$|}%3XUj85{ذԴ" j '['(endstream endobj 185 0 obj << /Filter /FlateDecode /Length 406 >> stream x]n0D{}6ڍMҤp)*PYP>3c'C`f=<,^i^ƭ~[Kq.;,~ kmqN7~>O>X?סmXksL))7u~,%#%8d 8OY%KB5K 4ؘV`c2ZlLVF+h]=r˾RJ8]Ѳ4C>K9f圕GA\s16蜣sq5r6rttDW#g#įx TJ8jh232}mn[].Zr-1ww^`=|Bυendstream endobj 186 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3698 >> stream xW TS׺>L'GP9xuNX:֡V @ rv0a8V>TUzv޷>A{[eZk'}ǃ$<<<|fBP5;l Y$>ăÓy?So-Bhv 5.E.5A }+,lΌs~h.$I 2)!T" ]5sе 2!tB/Ņ*B7n ݼq醍7ۼ~ԙArId"%UJSk$Q8i|,yvL1cf>w4SbHl"6[6}cb XF,'V+Ub-1%Dkh"ID!xBD0K D:3ǽyy./[$zB;#Gw._茶{0j(Ө;a'P5\ǵA@7w&-/[oVi ˫ YBjER~W'8[]rɇW:J dVwsu,JZ.#w3.dЋOr1|)F㾟Cy\ >\0HS >K8ll?BwESM[%cv3 wa",}Nٝ؝(wp;?`굫^"^=s+g +S=؜enXDt3: %E:yQem*&^P-TT3DZi5qɢyz9G]p d0P4Jb86oUj8ipֆłckƧBkl(r-́_ELЭ?eEɛdS#I:yf' ',6ȗs ,d'* \}~Õ \}u%S=\JI=?͓p>&\_RbdDtc}4i= u-u#&(^>A 0 K..yV\JѢb'V=-&fRtYFC6ŵuʞ [y D++8w8:g2IIAНcc2Ӯ(J{]e {nHK iXJ LPK)m}rV-uI\UjKA8m0@G>(Z D~S'1hO4$1'NOp MK 7',5Cu15[vCFq1ݏWe1 =ЛL&/.kcJ5r:ZθWH(~#G|Iӹ"]UupnTmR0Uzΰ,4>jXK2Yl@-#u@]i˭%,\q?l5d6喒ݍyUjhd&DD3t5#Ozz薄O%YUf-qZ+ZlR jWʡ[/iS^|&<~}a$bwb"fP{"s](pARŔrSaԦTYRSMMz1/:-σCêG3_$h+>ڣIKܡ-2P+WGTLz[J AJJGwyZ.DFX_K_H-Ht'+҆kuGFwuWfldB bh_о;}] C4/vY]3^F[ ϋA- >UJ[°h&XKQ0M6S%XB򠇚_OKs ebАe.,Q[4'[$kN \]뎉bs≳f#VfTyV#meF .ғ X4'c63EoM/ j zcgD2hS/8w)k4ı/g0p7Gj\CHgF ;EU 飹C(ԛ{{M, "!S[p/IG&K8K)ޣJJ[ixr0/PaR'W q8ބz U^@@z ^qobk$%!!Cy!Ex=.qgrAcJ6F0hd9)Ad:Š5%NñZd +Y͸;/YVT6r #)" 3EV}wPM?ǣP$wSsiή@ Z3,Z``(҂A9:BAVC aihXW˿]tCvkˮ.ýqQof6B̖oTkS(?NowQE _r"ޔo_3wnQ7ջ3᯿wrS:ۙ^Y@]m~7,m$BiVvVerg61 #FLdzј&1HLE9}ܑO54ַF&812 A譬:҄i{k]& 7ܻɏ*Y{HfDEGu ~tc?)޽W$\TtoIko!J\S]nȠ**}JZmNwIC__2 QUfe5;W ;o`0W[MyQ悦D9TF}s;sfM(k2UUk/3{oqGIx՗Vl2UCoA7`xendstream endobj 187 0 obj << /Filter /FlateDecode /Length 505 >> stream x]1nPD{7ϝ7v"Ae0ErgfdH9fۧr?ݺe>N;˼e}*?ql?Kv[4]O}kiE8?UOIʽd"9T P=C(9V(yʣT=d&yJb y4}'%g.\8sQBb"Bb"Bb"p 8p IT%$z(2022(**h6 rM *U$bۀ=a_}!_p (B  PHpuõCah L -!dbS&Ҁ)$\0Kpi`. L¥SI4` 0 L&Ҁ|괾nHW{:nX6|>Zen~.zl̂rendstream endobj 188 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5846 >> stream xXy\SWھ^*4`^h]iۺEEE} BHHFv8d'$!@QTJUvl2̴=9}'AL>{o}>>aG,kҦh~EI9)k,Q̯B*~6Ə>sPd}nDXVŋ-?)2Y I)|QavfdRށ Dn9ԌH~Zdlj\km\mˎgQ=H85k  EIɁԴ2geܽ^ط qO{~og9xJ b,b;1%;."xM&kZbxx"Fb&6cq+xb;iUb1%ˆQD1J_41XӋ/tYߏ2SH.2GOőS1\[0qxw✉WOLꝼrO١W$aI~0n =ý,l>.o"c"S !8k.o:JG^Hp9: CyZjqZ%M*PU#T,jk59[l3BVZԮ2;N}f5dJ-*ieJJe if^@h:sS(E hq6 _Jc Rp-ߕITVt^+z\F\^T0wP5_o㯯?/S F9H|lN*b >\ FJC$` SpWEY{9ďp.|<[57} w۝0C;< 8MPGz//pL5.y8;NE0o,6ҡJ3Ք$j90೜2^A\j4YTX`-L[Ag9g`"8d` 1ެ5UF+l3HN=;A ҆wDr $ZȄKa?rox] 䇲 Wf釨媷ҕU}-L/#^eA-?$m9~ peuEZB ڒ癡ìys 4m eD p\ADņSq1o5"ik1Zϻ(dtF`!2ĩo=,8ap&|>&޾ݑfm^l9wf/JT )k-?\ RD)N/N69>^ңh̕fv̓ϕw]q:o} |K`Axq8иaUdΏް ks~I߀mK E`NwREiTRJ\-@9htmZjh]!`5lmQYĂn0G]/)a|bR" Bk5X镜av#ViUeT^0L8oNvܱkpm8eDu|Lt"b@ oFs5~$ڏ^ W/Sokchg'ޟ֒ q]3؂uf*RNV#WKtDM#4MnE`%G 7j S¾d:Cn'S,.5R&u hIq ~>Vqw;*lcqFN{anP wW{i$2M1֚6G+>bWބ e ~᭷4uuK "F=U)Bԕ7[sjU'FH]" qv(Mhp{VY&:< *^(y@W Eb2̧.Vdy6OO3sZK pIzY"@v#Cw&^]K"R T,3F"ae睍A[ pp_vKxae:8fov: :]4;{<_KKkUP+cSRE*#ˑi+9P`6ӾgZ:QS-/-j21Iܮw׹L֕%{ul>h:Һ̀w#Od$>w 0YwVf CZ;su69o@mp@,FI:omN !ȏ攰9&b$R=Uz/hGԑ[C hqqRN- ȅW{;fJ8{ݲu(j_5h h*.R%6| >Yqŵ%J֠D,>YYW/s]ur_W#. ESKiϡm u{,;d1pשcKS@ dBwĨ0ֹ\u ra[xW%0 @ E*ACeι"rig&?nOSߟ{wv !VIkSަjx^PR/ ngz*7G|I^N*?=" %_KZs ]yNU#/&R1uT߾>p_ tr< Ω~@v6HCf:V}&sۓ afY|ag@ʟ@W6F& <^<'}=Jv6[Giz!447:٥MЀR흀{^M I/X9 7$Z]+=_Л߬0e[T&S=ɶB,O!6D+[v5v|+_A,+J 1V*LlzߞsQN j*lN,d} X,#FEyƣFgeeӛ{)2 ֻW~} zsN͐.kQa|zZEY%:YqĞ7>aCu~m929(TSn=*yĠhB^0EJjzKnP^DJM\Tj`6F?EGepԍcڰScF~p鯦~v|fNUdtxk)Gkq-Nǵf -Fo rU rSs_žhj_Hq^ Vgԩq9T\QvO ya]yaDvBX 5P 7UFϿp"-XwG_gsq)|BB1uZ@MCgRg{5} P-os}|6a,;ذvp[uZjAW{*8C&$ŧ̣t $2CSI׉ ,P/C<fӖ E7%X ,* X|.,{'rWpK-}-Xдh3ڎFIU*62\`-"dVp>yԺp8rNP#PkdN~DJGQ(>5EO( eVCKn-Th㩭: cnrځ9'iSe$|@W <~~t6\2NQ"4yh?h@)Cm6է J Qvjp5jd^!6xF:<"ddt*Fp2GdWKn33 p.O]Aq+4̂YpZus=#0Q]fய-v*=T9 zk 1ċIax m&;ReT*J(S7;-:5;xeUZ3u+kVZzRĥZġka;J w: ;HouP-w ,VSeRHD*V= 5h EvÔ \'b܁S`<{mg8S c aҦLD'Q,:յjJb,pT;8;:?~L_uE\Qel1⏦ m_.Jendstream endobj 189 0 obj << /Filter /FlateDecode /Length 1211 >> stream xVnF)x\"jgg Ф0jYiuDr%ё-}R2;F>Z}P(@WHE.h|2HQ4A; \~/gz(#-u֋rXhvfv\@zE'YTs M?ժDq˴bi%6g0BK,a;'>i1zڦ0ke".nf> stream x]1n0 EwB7"\%Cۡ> stream xmVyTSg,y}*yFIdNGh8m])ֽZ’@Hb @nf$H aPjN;9/3]mf vwrr_ K$عST(Z2iJ;S!?Q-=ȈccEq'X  !_?!#ͯё*^#ϕI^29) H2M+$2*]a\̒l[sdJrRR-PHT9}ه$SK޿'}ي'+A *Xf+V-YG=SD:O "H#mNObBYzccFSqN{{|~9s+N_1D vm=JL5Eed)KQ:+RPn)K,e)הkm*@ay2h5DOzmkP(#{P ~3O[SyeWwwzedsx'A` cGJA--fi-C(U;unA4Hg3}K0 wp 8צPT"}ӉoG7~-p̐o:p@\kXg2h/ܗ7h_hАq6kBj'^_ iP|9lhu3G< ]!- MR714 g*賶s\r s-3@lE$;#N -mpy.J+ oL2%h{;ZIђN@bz{Ph-ցnFl>*+MUY^)`%v=6LrQ$od4=GAyfi1.8pr9EWl)%~ɇIP  6[AuIuIn~dnTA5P76݋:y1OGBHav8n)ADSf).9h8pwӗ 3^*tYh1Tm"=\b~'J%H]#L֓<ӳ5_,Mdo*SˊE'eE%PhP(mWP( 5$r5" ]=w[L"2JT\dn/N)W87HD?K}1@jمNYS6X`Ŭ@οGmQU+VPSOSg> p0qx #}J6Eg^4V)UU3efI;ƻMnn+Izx<-"i,\aƷ^vyQkSA'sqdj T |-p* )#}n-[eh-o/'|o|cMوѫ\p $;Ұ8s!**]$ه.c>4-ZSvœ{Jx]qV:$-rTu#kHH&9%Ee8bpnlU!He~ pvC>(5f)]}vE38¨g:켻Ʈ f #9عw #}h{A :2Xv DEPa2ypEiMUc1mhA_I䭻K\5ؕ/]=a:гHV} IԺG\Y6lTߝS7A yՆ|6NdȳؘF j4JGj<@F|3֘)?)gfKG Gi> stream x]O10 *!0~ 8ʀ0%:t컓ϲ==(ul"~H0XT5i 㤃M'|gu9UFGRmcm+͟;s[(9K7SiZL!`2S8endstream endobj 193 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 304 >> stream xcd`ab`dd)14uIO,,MIf!CO&nnߗ }/=K1<9(3=DXWHZ*$U*8)x%&ggg*$(x)34R3sBR#B]܃C5 !ZX_ZWRlb} ߏ_}?TCҦtvgԷF)^ӽ{ڂ| ~XLn15{r\,!<yyx.L;g/su endstream endobj 194 0 obj << /Filter /FlateDecode /Length 161 >> stream x]O10 ] ]Z2D! }I$[.%Mů F0Sau@vz&ե=4R> stream xcd`ab`dd˷ JM/I,f!CɟL<<,/={ #cxZns~AeQfzF.THTpSJL//THKQS/ f*h)$f$))F(+k9 -,/I-KI+)6d```Tg`b`bdd˾*gsE;W+he+鬪,hf.+)KIKh/\0Cb۔{uϕ޻={tOkywۙ}=lgrqpn=gNd z&r^endstream endobj 196 0 obj << /Filter /FlateDecode /Length 282 >> stream x]n0 yҸHȗæi `* ~M]ϧsW_|,ScO%u̮|?iVӭ]q|Y<Ȱ{w }*Ki>wI._ŵ!p; $~UaqG=!v_kcFНjVEh hT%6z`zPm؀6 hRـTT6xsKx*y2f&%L,3ifB@! B4_c^,WۣI3f[> stream xV{PSg!pe%^}EmVV+m"-$ ᄐ "EjmZݶqi]m{.9uoq63739}sΕQ^L&jXdbvkr2S;At%ΐIr>81%ɶd[#=MV.^`\T\P!19#GLNQnXPZFLWV&mS%f*sRQb#C""/Gl9g#EM WhS"3(j#Nm(j3MPkXj-B^BjFFqcʛRQݲ2lVy\.GɄ1`̞]x-A.p})BEʼn$?Drw5w-I|:VM{3i^go0~!:' IKuJ30P.6cV Ȋgskp.e< lVBPW_"KVdu!k_.J"p'w pY1gƜ=M 0@\2)G]\o eQ8]5 [IR=n'g[C\3<}0[V۱]v@Z0QvL?فNJew;rQ398]ܒܣ&Gٓ(UJώ]W u`=zy zKt.ّa6ȓ; Gh߮:S l\>%!|_e1+AƊJcYy+V`Ϡ_vc3Wpօ48U.NlUWP55ݹ时^P{i聞4(_'CѦBZZ4mJw=ra/c=(\)m]:f*bmdeYO Bֽÿ, !Py2V:[!P(M Ud :EP_Ooz=͎cz$3ōq4Ki`A~$:%1,ǩ.[bb2[VT@ z&nS&ݰY 8;lT4ɬojtP<•-ܞQ2Dw1ZJ䠾N,h|$[Y(ߤJ6ildF:_R'K_[y;z6rm&sxt]fxT`.Xūo.@6NNRhEEsӿMUYxS]8ÕƀnJw5tfBo +` UR|(=Vzک5D?,'U nh I.2ppo`Nɿ;M%vs8oWZw!ƖoSun{DdGlv!7R^Sdޞ[Z^-gwf1 &3LޠӠ JL&+7!O?K_(p :hb $+2Ν33(} %4d$+N Rҵ{ں.<\t$e| '0M1da7|,cIDO+~~$X3kw>Z@扩\xf2'Sȶo]/=m}{gC1<ƈʌe4"&y^Xm)ǭ{?>A#;oEm\3Xy#z^}}K͉P=SЗc曋}nѤߊ&5Opvj2LVNCf?endstream endobj 198 0 obj << /Filter /FlateDecode /Length 373 >> stream x]n@ D|v"EZUm,K!9;$=0`xz9ZV˔>Z-:ݖsƢޔݐK;񵝿~\7׹Myi\BC[߫ms8O7gB@fm 84Q!7F7[[ǝQ(SNn|rcW@L}r'G5 @#+qW>axO++Q1bPq AH#L$HFH<$ɱ3 9R+~:(+WWFPAa_A=¾2z_gu J~Q}?Kܱ2ݖ%+7 7oyi*~endstream endobj 199 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2984 >> stream xUViTTWEq/HLJ%ե~D#IA@ *Aa q 5/ V>S!Ço_.T=wHsx :2r-0K?2)wmov`7=^pk5$S #څ^dG>E n LIZTuT}HhtaE$f]ƋI>8h/Ui k׽)LtV:b4)pA*ItsHT*Qq>j`m5Bn5s$&'w>#̚jIZ4Z֚ʊS ^k991f_> 7"V3h Kh&َbarR!MvYۘW*- 8B.&ji1^HO1$'PV'bA+>a =3@dW '^ZB>}$ֵ q j:)8Z=MŤl({:v~V^q=tM y%`La:86J[`"MQn1Wz`KޑmmNdG;f w%,O1xZ|GdA♵\@?ƞ L62@\_Asan3&H3KKK:~>" 3tYB 6OM s]엗m?^"=STV} ai".ʅoG5a1lj5ku io:PՔ59S MgXOi(%޽?e[Z ڌaY'kR >7S1VZ\F~j<50ԉx"cK$IRթ?zgX+! uIڡd< {xrk{eaŸ^Ln63yroIbgU$ 24ʍfO\h ވTp]%ZF/Ś2A =#+sU`n$XA>n9}RmCysv~-DznUo"䚮}mA.ҹ)z)q:f'n «q 7`KҚ︆ʒz8-xxsZgSwS&+.p>ss:Rs+ Cd{ln!3`nvw*2ף"|mjϓ*Ma^W9,}>zkءs^r2ܬxᰀgH>g*+:@r4Yb^F urSj*sY6ӟ}SfoO i!C7(郮s-}0p/oDW~2*;3.wJ }}vz+x| %>&ؒV5ƖK"O =1 +X,~wW'LP m~u|Lr90dJ6j:Iuu7 ;o{mtL;9Wzŭ+}fY$N Q̎5 ,ߓp8یm(<ӵng*:EU.ØvZI)t !F%3)+H,'zsPiRsXD3Nj ȫ"dJsTWy7UUZn'So<^8W|"!@u 6\d"\_Ru.v Yώ gMIԻ%PqOZ˿%`psptH@^fb^) pNEG%ܓgLFdXll ӗI/tMWĞUhK3Ȇhm9-k<]S~|ԞZ2$?Gk\%{GLc?&hLo,i 樳ۜ|atVx<6AjSOD좼r;ٹy6s z3|fJOі ~fJEVaO#ҜSș(wUӉ|Cj j':hN"*-^l/sh oG[{endstream endobj 200 0 obj << /Filter /FlateDecode /Length 330 >> stream x]n@{ހcϖmE( qXqNbVa6?Oi\+mn~Mt\?I.Y~|k%9|הʇ)}-mLk;]Rv( = fi OTQjTR)`iX) kW E)ppg*l==zijF= 5LX*O |BWPR,4JC ){{C )RSNRlS dID,F`jAۅջx_4m\.8Z\~EFendstream endobj 201 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2924 >> stream xuV Pgai/ڎ=NQcT.cF!!舢"&x 񂥣1hZh5}mne@骩{06"$ص..Jr\7TWDLaDl$L"#Լv6ARdn|~ c`XB*l uTFDlϝ+"9̓9{+U2/y<2Z V*d?O.*۴qFۺM77O^ . dt S||]nA>f/!zb:p' b%!XM'5Zb 1GX41` D’DL xdh i1k|ds򔩕i5ZKeQFqd䦑mf72ѿv{xaVNPH=G,6ND0dP/6S>10~WraHU Yim!4<) ./PRf3y%m2H%00z/ܙx4l@>{X= GG=;:nXx#xShmk@?aӠDQYl&gf#OwaW8˨ճ./:/^F`i) RgG;,Fx ^O+  <[l\D!/Q6Ɵ{)YdRd|.;{h%VVۏa< q͈鋧@sX;Yiw{Ôk^q}⡈@'>` m1yη`eSk!:FUj/jT4p{ɻ`}PE(v;yP.>UWlfYVQr٘ H/,烾F>=>NZ yI)r^XL ]MNצ5x^JZU!*E%` '֒u"UޢjᠾR<-ow* r{ηϧaQc,ګєibD㴟;'["N旻tJX.鋖IF RH. I޻x+pÉzB}DIG?+sMJUT JWq4WBll&G%$%eb"lCMIc^abJb3I[W/D1[sx,fhRծy[eTO=bB `7~9FӉ'#QVR^bW8!֢ʍVoLD%\ 9U};~%wK͉Je{#=-d51%t Sp`ocTAU1;-tJÚp3pqo' ሺa;شyVDoo (*IaJ+(V'P/j>?꣇dP}b7EOہZPqޞ|@>$zozؐt8,ٚ[*O@Bakf.$>tbsӹ wnvҫSf8}ıS|h V-7Ar7oqm6xdBM/s4+PpKdd'F/[:Оl6Wٝ=~ՃeHSiѷ6Yٷ՟Cz[J?uMV LJv"'PP%F3^O/U}|ɽe%\oa@|*:M "%3{ HƬuq[n\/mwvnZ=TPo-{|RZ(8< ɏ4#ݕ#k5/7_SܼXWTh #Q?lfstendstream endobj 202 0 obj << /Type /XRef /Length 198 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 203 /ID [] >> stream xcb&F~0 $8Jy?@ (f_jp!3ȃbVn (N%Kdd@3] "$G)D H Rl = ,VfׂH`2LHu`xV"GAL}D" A$++؄`.0Il`} ,># ! endstream endobj startxref 132170 %%EOF Rcpp/vignettes/pdf/Rcpp-extending.pdf0000644000176200001440000017547015030755322017341 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 4176 /Filter /FlateDecode /N 75 /First 622 >> stream x\ms۸_oI\3cՍs璦DۺȒO\}HI;J$,}KP"b8$瑎qcQF.L|E\pjqR\D\[ѭ(ԑ)M$d#FrTڈH8B.GR34EJ"љБV):1сEV5DE2N$FapԢs#ALj\cach%5FRE|â1 KpH5'):#Qq)K÷"aIV,N#M4ea4( iP,thԠ,Pڢ9(KN@2M!FV&28PF(+~ Ed sm l:e"2 $2(iurC31tƁ1R!K$í_~%J|4Zizt1Nnt2;^L(yʪB{uA#0[\FNo2g,uxgO}2L1WZ֣6G]y_EW\f(~y,Y}ú T\UF8i]w**>VZ5=DƩf4@\Wa>.. 9:5127=l`O$F*i4:X S岏ݓeQuhӂEaJv21-pQ8-aWŎ-!s`;B$]+U3^k6)uMǦc9+kT*s]ۀհX X A-RI3'ւm R8f\aqj- D <党r?QZ?[obN \amB^8XJX6NF"Y7-wsئͦe31*v S ;Xi2RY/f„56~ـ~$b cRm̝U5sgKM]C#4LaѽpѲp(&QΊy0ZeG_+ 8/&e?FK9Ẑ͒q܏x3ɝOy N+?oX&ʏBI\i 渚 T*K}4o5bwiJ$8$YrLyrɗ{ p6\QlzPj/4pPt:(v]+u64_z%?V,/I4yv[&ڼ%a)hqGG/+{ hhi@4IKJ- vЕ֦XHhYi猾01[O(ۆYYsHgtSRmYJZ:?`waagm>cV:eQ|TZ6 Ƃb$e$Le&ES oE\ԆQQ3HQ}#( ГQ ֔"*6Z }S*BҪhz>`MsMoar }=-s8BYNZ×p5ny Hj6MDB|)mitMH^ArBRܽvu@O_VW&m.sIݢm8XU;(G1 +9 Ǯ(Ν3#qK4ln'󖡾u:Jޜ͊}OWy~$Ll2fYgo8X,< /xSc8=~2A`ec6f׳48 *;h:$.RŜvq:3,s;;ܡ٥"e^vi}_GV+ABZѹ̻p^zo{2;8$@~KTp)*kG|(͊mp:8<٤Tw~{NϞ?>* {z |$ŌJy(Qc(4ȇPzD{_1F1":awL9/*F A`lO~[dgY~3UI }$f[K#[z j\Ӌl2.QU=endstream endobj 77 0 obj << /Subtype /XML /Type /Metadata /Length 1658 >> stream GPL Ghostscript 10.05.0 2025-07-01T07:55:46-05:00 2025-07-01T07:55:46-05:00 2025-07-01T07:55:46-05:00 LaTeX with hyperref endstream endobj 78 0 obj << /Filter /FlateDecode /Length 6008 >> stream x]۸>P9X4w7UfT*N]v]q$ QKR;ɽƽu7PJE @7ƯݘfIf s/.81L"J3d:o.~`a[~wy g3blvy}aGc3 Hegwo7vZƤwPJKO}ƎȍF ߗ:[LVjhWm&08‘T򙈥i:\]D}T4cEmoVH:"&zSculƨfIX2z娪 V-J@|`i̡CǞb,2F K-3yTLLf R6ʊm_Z8X!.VHELeu%:-gCՈ4@Z<)KL/Ʉr iԴq}UnVqY Y*| I+[P;FGOݔWGs\ fxiߖb뒉Osظ&3&ڭ?&,b/ڲJyEOD[Xa J.-TmO3ѶF V|y\o!a`߄ HШ@Kq1g@+L2}'=5mmoG%M}Sww0,g`v<󨹭vkQוGـ:04ۿ k;4"DiɴEEz`eL K4`32Lv,L FąUF4uL:q3XLeۀwA"Y6 ?mLFjjy"ciK{v[BT.*;q=ikr.pϸbi }|NVmpfv߂wM'ݗ{J$hW*\%޸F,ZzΛh"3*ZU]i=':rШWyTc1ٞ}uYlh59]H4Gs6DU ~YSE-ned` E1?p9W%nL_ .7CQY,kIf!6ÀD`7$_A3KCl2+BRh.i4@QUԶ4k@7:Zfwj~6 H?ЏulU4Dq5íE_<ùZb(Gȹp* ؍" C= SCkjx^8Ѽ%ҐNxlȊ@z ߸&&Uч zoe5 ,iDk{:9rY=EPb'8ԅ4]A˶*# 12d8Ao9zp,׿Lqq]n tִs{ko6|ݔ`wq +8-pB`^zXs߈8Y ttI`D:p@TfXIZ(r3оzPZ_}oU, b!e) m?j_gF,S7JHB1X7M[sjl˧aw)i1H~5NV-dr/uٺm68ڢ^曛 nUiY czH=4*u-p6Qt$M ۠x8h0iȵuAzTfW{zx@FO@7 #y~ FsЁK@]\[Ce8c&ekb谘'ِ.CaIIǰ kJ0Jխz*V)1d}iv? `19pj LR|83Gx>,#C)ދ*`5p4W߽ˤES p6b[1}>/d%/{۵'j2_cnLߔpG? eۢƋm+8cv;DY4a’#s vѠ_oU a/BXgG.l9zr|_2ˤ9Y(4` Td@7=d˗¨cB)GyU]1p#څm͆TKn-k{ȈvAKÐBqtGL؁,gu1lʟJ =.ahPtv 8)avD qe+:rvJ?>(N=P`[ &PKŖ@p]W`%hNhd0DMwDu x% n@)(a~Zh7E7 :aR2`^}Pl> cɇpmIzEHX rR)!אoNWpoN0"; á"e6΁n|v<1p >0Xbc#? ěsY_`!:2l&ݐg SX?">ւex8Հ"As}bl}8Ϸ\"< J U&8Hcݐ -L١~>*cCSIn J)LʇBUT*e?Bzө"f`)7K# L)dZ!_nMz#U]߸pl#tJ/.mHJ6/,>e@QoO6OC={ߧ0LPiMk3!S]qc PА]ivYH w8ܧiv3 k\lR %6 V C|G^$͗kD<O/.&x|$lY'[,~#'qؙ ߾k;1(QN`,Wc8 ~}g%P˺:RDر!ޒĖT< 1Jd+˦2uV~|s^0i6d<\ 31Gec|3?w}/9>pFB/凉>[!4ZL,Z?á& һeeu?J:r> R %})QbςavdGy; x%cc D~ޛ7&e-گOxG;w]${G]|x7?pp)>< 9dj_/\j<޳SޖXا#N$ނyϑ{N)~:58(l- O+S:▧^N(eqYTz)z>ԳϽWƞCq+KCV9{ę>8k;?=a8mSm0;kLmQЙbS<,~aAۼesQ[W~AHȇfOXMG`~TaM 1MK>kt6s){蓲a!0g[w=S,b]8-#d{|{eE-(TДv 6)wMQ/V6-4]bzIC@ieZl ʫ9%)924);h.2rAs*'Q`)EE4.#G8z*#\6}pUA>@4Ŧ-󵽮V|3Ȣ%`"z=H"WKM[cq@/6fѵDFӚ;Hyu0SqZ:6T+j22Aco!DFUeώ8ėu~XּtwO7龨$X} }j}4>ʻ@ZTce&*(]B,2:,H| MDX?5^p 0};h*tŐu=#&d1) \=`æy_U;*(Ma9_9eʡce-gd~j;q+Iêл'mk{ׇMUS]_vWe\ss[]7]!U`f6ʖ{-MmmFWPڥěȌQGA |ъ x hV Cp ҖY )Zz6 gWћ4,֩}22X:k-mR7khvMPDWEٖ~Uq]վkFk&+3t<-=d ՟rIPX`ۑT@?zuMCXO6DQ0Ű=\dJ8c%}hbph 4%oK̙h-lI"A.j@0@`?Tդk,QHgnk򶻫uv>^f^c)^t-γXb'$ޝOH V]=LBTۢ1_K](6x7}avÙs)(Rt+MWmn ]N4 ҭ/u%P$9 G GJ 2!F -w hP0,y0$^! |ב#[P?en1hvx. 13:!r{{zhNv寉Dz<6:R􍽉ʆLМsONq(c!.^Nax݈KȓW;퐕rê5Ͼ[P*v.` ir[.osxj6ޡJK_" (E%9m-wm{ ׻9t:kb4K;ۺB_^$E4ػ8f}`pcyjoU 2,/ؐac0vY(",xB"mW ]!j^1ҭJ;BT1ik=$MvERP,} 95z{ŠAVA->fO/t-:'!㌔^*kM6s "ʠ*ͶXK&JeǏ}<R|z pz,7:힥 Ouf5# zѻ7]!MG\nSAsa29h=A֋貪'ևI˳d-/g=dXL>KNqUן{@Qdg[ mwyN$[ĹUugR)ar 3n-؝ų,J+wT_|u1pkRQx8$ u@/7:%Ob/)k3 qbYPRV?$)RiKX2NU/E@8,Ov[>8>[##=t}Oaxȥ]"Ȇp,*!Jϰ> stream x\moHrn܏ scs܌ DۼED{HUu7-3S~ꪧ٤?zwRLnN~>aM8yuQ Mɹ5zrqwr;=Ef~>6/Ϯjlrklv)Ō6eVoev1t_B?ft^i~B[fzhoV,?=C iP:RLJ&sKGCswL+Y\ jduWBӒ֊S p֒6ʬ΍هrߞ^mˎ̕z7B=UX+f1+0&j1s{A!rˌj[Wq]n'Y5{`n,k[!bʹ1#~ RZuWfuWHIR[Qۭ;Alhg͢[ݯ\]簁o&'f/v]v*>',y)e SxdÒp rܚ[aIUÚ7o߿|?~v<]r>4z"< :fu~tzZR~<<<]V\_VMy#r.M@[ D.3g$kpngwMey6e:o&5e`uE!1$)& 'E  G[y.`vgW\jFx5w@qAԭ7Gv9VpR']*^U.t<-.;_fJQT/*p>.,=p ė:[7wZxp6VØ_şQ;EI0 v (V!3*&3jXm30!aR쮝uuhTB[ R tCs.HfX莁G"1fuW5;w'ԡ4*e`$DFMV.R)uaqr Cז5M!r ګn% dHR0-0Vlϙ#LUJJ /j7f˭R&7u92m>J'qach7m{UT(OX'٧4wxuͪ$4 #p@ R }HD)f^\T %mPqpK Ö!x - W4O_#i5vgHNWODk!Kzu]O;2\1 o(؍݁"MlAGgf\'{6:ALab)X<6L(A"v񰻷6:eyݲ;nlzsXfc0a|([USujVmG08":g6A8{5 C4 kMgci^ڑ%t4(陷#kiaKς_)bvj_% =_ժZ=yw$^ `?\s:G˞/&0so.!m)E/o79ȱrl9Cʈ[bWm{%t@x:Ok4hT )`eSۭ[e,-;֏/m4͛cPPy\x/8qBh̋qУ| )lP\G05@H(JÜ֩pt{>c"a. H 0'x7_d^S"m\F6 OߐA8 P"de= "<9ݨj+@Z~wOwPBpG2VO [d?zڴb*/uUGz14z8XxRm=2|[*_kKPވLR wV3ՋEg5K}Z?R21pmcTum`t]hUd׫۔cp%렗]`B']E`w6s;AIf?Vi5_?I`Y+ !cC {aM Q(W|Wkx+I>Wou /:T6"l#xcc$m\p㔡 ߔ+1*, j' ˹ Ejq 7 ]埳#_7.\3=ODe6kw[W3oo髽 'i;&۸trtD=/{[gUuZ6+\Z2&Pyyi޹v JRWn"a L֩X0>זJAlph91Pe@=~Rf:L|[g GzdNe{zZNȆo`a_Q<58069ó-hHbdF4_N6͵qR qEb̬(wFG t`)dIV$XdIh()",Ó M7eHT8C\ e%1}Xco|ߘݨתU)JzhJ/CC'c61~6ZO.+Lۋ=' XeBhM4*BZ$Ve2ћn&{6nWb z餘]I::nt+%0N8: QS+3&ʋ uUuN+uW`Z<[\! [p[ aWX0M62 &΢PFr &]QrK>Jhs\S@bU+ASnۇ%I2=1!&Y(,ߘV&~qGE.aL‚H4䃑ʵ3Bq tJ?`%(bsxg%vK֕Nޗ~lDdQ4I?0/VUlnpʹ0#p,ӵlŝ͹I'rJG\TJRb|+h9wM!a2Yʾ㎈ mS"@>&2O/8 ݯxj *XPR<)`]]Fc.אK]όJ,ei(+z5D[="d) J-faKim\CmkYk\Cl-&D6:\qÆ a TiXf,ymd38E=01hɈFV* LG/FC<5>kͻW@{QIOj_q%H _~WN_5A[W2ڪ]Ծ Ć;_}4o(b#NzR!nT'>>M3w6R(eSeNT+vV(Em2aH2ZZP{^>i3N74-I% \M%-`QtOjo6$Ҫx 58s'.s 7'{eTCMmzvlǩmtF iOEWu H ʤご'pšKI;s2*]A#f`\ 3\?X_-nᗒiUІڙѮOΜ T*-Z|qڽ}a@]ܬ{sYY6݀Ez,՞{-YvOR&X)WgOٳ'b<,P.WCwlΣrE*B VOvF5`ؐbCɣbC]21FjPZ.{LB[嵆`lx$_K5_O|龦_I@Pvk2[0('/TiTe]~EwYC%AFN]ػge}N(NUF| 3Uܓ. :F;g ׉ȹ7'3IAV-98vZE)\GWes~wR)Ux5Dií#swr= ,+i)@ſV>YD(&s7{CrӧWWbh~?y3>npZǸpE8ˌ+XF$c7 J].()ХA|uvzFi>xoe5=lOM/}amEɒf (m1ǿ,elpcSD:EoD9?U,endstream endobj 80 0 obj << /Filter /FlateDecode /Length 3272 >> stream xYr}g#P bq9R%+._):N%$aB2+9=3 ,(r,@,v/O^Nx!&呑^NV KmD! m'm5nR"8my\{7G'gM:R |a-煥F؎zP&k b xa,7Xp<>p xI7[My~`_%h䟯lW"ҩ̏ffjNjIJ鱑Rz^˶=.m傖Zy5[mM~9l*ˣ?(j,j3H躝E}(r?˭H4|~4eamM(8o; gGjx1rxfb_4utKYག2p >dpwM־M>Uխ{$LRt om =)79ab+# ӌ۷KF=5MA"%iQu!g({=B:q PƐwuE{{RA= >dąA@_;O\7m_\B|V[W(ib#_Xu_&S7v)(9Hs`nk=SleB:@w'p% ^ݛԳS GvgF\kf%eV`xNbܙR7NE5^UnMl7l/n]'gvY ]&o p4.tƷ]bL`!! xB)mSήɡa6 fV.eu\O~a1jlb Kdw\vKve-{4O2F2v0HN.&,\Pi/f\`~eXwlٳUEODJ#/cv3=j/Ni!lE#峧@\U1])l.wa{Kx"bsom3ZH^Д C'ށpļG`۵!jE)83w0&t'9DHMJGWj/T*v %YCP^Qs쪭~y천-ܶw,ukg.?jP-[~t3-D妞b¸ط7uZAձѧū&ƃE6ǷG.pA >mI&mlfDg^/\"t3ҟUS4IN[_T\9;xC .r.W]4djkd~A+ڡ< (-{5M (6UĻg7Y4J`/bZL,m#t?bkhk`JZ=GV2o"-Q|5rۮ\>bW|_ͮMe۬tMãٓ G7-zPY98 s%R;UݲJJՁ =M] %o!9|^-/eNM& G﬉XV9* 69c"Aj,9 ?ղCG7Py(aB&)Dgu_*"h)(ٿ# &6t.d+pxl]i#^s4LjϚG&_H 0ORq{֝-S/T=,ExJv5f19D&Ͼ\B7*fgۦ`PF%y,Pi烖Υ!4O[rZ|k! B"ro VY;lHy(XP\a\ ,Ɖ} W4Z [E :oUɮq8Fcԙ+DHfcCMl>ukU:PY5a2qIA'Cmtvt9ٸp8X-%T1no2+[8IZoX.r8Ejk^[H7؀H {B C@Z)pO@5˜n~*2 ڲiGiMxoc2cz8߱@ոQ3]q.$]<3 xG֐v8UM9BQOCH6 Т\Y&6P+t + vI2U|v <}޿9endstream endobj 81 0 obj << /Filter /FlateDecode /Length 229 >> stream x]1n0 EwB70:\%C 4DgC2N 7!6:_ZlLyt5=%en²p4/_N,o槅A?P'|!3#ӿ_8hETx@'k k'ʹ^d{ ݡº%TXf'݀ xW^$ݼ^+E Ԃq,c*Zrendstream endobj 82 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1494 >> stream xUTiPSW~!TD^BqiG[iZEdK@"#&  D%QB**պVNf:v\F3yu"?Μ{|ΑP~D"|E|Z^Y57x&H::VA B͇8 FSR$)S8xK:[1w,\L/V. WFe ssiyuerZ~2=+;MR櫔 YqbcWP@QԈH,u\EP+P*J"%T5EZ?M=,-Nv[dcw~'Px ޠ+G 5,Ozlʤ vpg+[ҹZ772u;J8wuYұsNj:zao2/޿+*ġB*v4J4vUa.sp?  f&fC zlJYco/0/dxvy;Ha3~)yS~I֯DBM-Vl4k:B?_/fž f4L whbNJa},XL*wu^P[[UeYPLai  e.RsZbVfPZ.Ю 5s\nÌj[dJ*yX7Z+ȧjN%NXA).=VWG+~Ը&QEc'3HC*հ3M\/uO3ܤsBNMn z@-ןaxʴFs%sؾwP`;ekԯlrFC#bكqƁ+#7f38?b.g"!WRY;DudFL $az 9SȐ %P۲]k Oo߆g@AgG7Z`4w< aF-Mf?=m7xO.p7ך+&0ǮFqu{OD`$kZn?;4|!jGҽ8 %oP/PS"X! a,X}PW Hgi׵'Y7FYјܳ/PAmҪbXky7߬2N2x~-2(s%8uf;#2ǹ .uV4 VdfwdS(PYs[,Y 726А[}CK/S٫('8p2B>X>,{5?dpMsT_-(|r<rnk(yC}Y6Ym[/w>n}YRZ1L{b7?!?p=vls`.f endstream endobj 83 0 obj << /Filter /FlateDecode /Length 479 >> stream x]n@D{~@t75N"A(h0ErXNbw=<=}^{{_:֗emc;-| ?[mB?~?jT߶au2ϥߣΏW_u> stream xWwTTֿ0U/kD#(X>*(Xh2f(%`DTE (*XL4y)<;sg1oofq9ۿD"Q*!S1*@$yD@+~kw$̞Bbdo];I٫[mӃ"d(:,9#F2)zn`ޟp 2E͹E"MU)z/.J .Y͊\¹DBjEF|Lf(jƒKdpi.QNR΋qNHTKDV8i*NG֜Rǥdī$NĴ$A=O֨6CCU䄈 VzANI9M2y3I)xLT8"G/IPpIJ6-@Q لLR\"%>#)M3G^ki]z"-˒UUmFQXf60(#X ώI0$&E(SR(.OSyxT1NQCYT$5M \(ʍKS'MPBjCRT LPT5 )j5l){ʁ) ՃrzQTo\ MPIYSSuh趕j2_ 7ďí %vIGڛ^B?2!LN(,}jĦЦ憭ֶK;]]}_ ;\";:ddgpJ#4ƶb7 xxkJ'иFglđdNmu8X \WFH2w<~в2 J9~zo 5'v\ D,a 4uʂ[^uGNC/~,vo4c؍o`bE^+Ґ0|lϟ0+&IXm`#LL-L!bb@ժ+8;)g)BVΒt0؛/_v GIt<1 An?sͺHX6+Jp &sOK\$샽&a  Ϗt;8w'Ӿ?Tq_N;H ܒ>΍8GonkG* aVCt :~˘߫FPTQQ <6=XsIM]x8qhи`,N)KʒW.: 6L鲤r,lmڃmz q&oѥ}gQz2T^7<)9vW7# dI )K&8x%s8oSWrw*06'v|[x(gt}` /+GH~-}"z`~v2 Յǝ\Wy{9rB$M.*k`O21T1\~L_2KU]/0ggݍ`n9$8B2vEW<(U,3$"x|Xdc^.aQbNPoQ>N3a:Uj;e4M\t"bvAwa?ʐZt.0J139N%V>j8 #.F?,Z-_Kܝ|n6c]V m XM]딙ةHmV )y9D s'ZSQ[~:u ϜCͅ;WHa$'8prYki6UlWjXj D{ca@\Cq&яa#0v7)maGP(PΓB9,u&#&(8pWͬaͫ$2cM?HhXl")f60 I1KdC ŻQ:mߎ/*v{ 2~#[}~g'C<N9O4yHw͹*%t@[Hp#$Ub lwJ >@%tJ{׭".SՄ;X4Z}Cyu5 mRl;X36$((,iFMSv$2=Mkh|_C$ /1;zՐŖhj_}6Xs+Hlð0 wc%廳xN [z+\fggY v<{#E(}Wo,a7 גSBC0KA>#I`}kkgzNx"~WU]9/`cO\ #eU_>:ڑm,/03Ly, [S_ߔBZ:%M-W+ȬDRܺQ5.m]KP0ZI{!=$#Myqk#֢|yq2%*U >h΢]~=,_ë~}3ݖztّm3{Za T224)Qj&7ouqHj=Q)?ܑFw ̜Ȋ4E=؋NPhab5Ey-)M1!qꇇ`ɥ஑"Q"ED%>wddN(ţߍH1NFm.i-g0X%_$-)Oj|E0=P2Nyb.~ ,./0$x,- 4o@;0r,'BZ~}:>:om8}P'&ߞ^̛_a*$|W;HJyLx ObpċX`dF!&R7-N8BF솰Ӄq{FrNDH;1ZX?; '$;f7UthS#WI歵e>oDIa#D}EςSe$%G*sQ_wYnПozdyܸҲFԯθ2KnXM߶w<'#Ț-yI Fˊo7/$GɟO&qꉅ*}"JFܣ+=Eqġ}MXHP\įdM+ e/b2aGBcBą b/> c{@__IvF=7\VȠ^S׾:89# bKYy mv ngPi񾵧%h̥K"R^/<ɧ@HA }rn48y?؎NiRc *paJmVI/+#R|,E @*/-=s?χb?d `[hcH^|e eLfE0c@<ݕ YSzI.^H>KE(.m:&xRAdHyc^>RW%N %A K"?Om v@ 2G!Պe@/knD)X^{ivoo);(oy~endstream endobj 85 0 obj << /Filter /FlateDecode /Length 471 >> stream x]n@D{~@u75N"A(h0ErNbܛ=<=}^{{_:֗em};-_9<}:?~ÿmXa}ͥeKS鿿uxRI{.Yv,(;vŢX]dzc'm_,^T,ړl*mŢͲ(-d09dRDɩR%&JN*ReY12#dȊ!;FV1b(mЂp0 V+Cpe2X U•  q>0>n;v\E{ B 'WP0_%ضpB yCA0o7 Yü! k7d xao5 yCA0o7 yw}ҵ Zj}ݛF-km[-J endstream endobj 86 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4069 >> stream xmWy\S1;4MPRV(,"dİ"2Z@dGDY!VV>V;||FaD"E*IaJaHG.O_OIcq1o3\#ǃ  dD7#USfϞli魴Rn hb飶 RE",)}-? 4<iopF?*; a+mmZyIm*jٖh>jߕ1V?quܡ9f$823Nhƙìf2.+L`ܙ5 ,b2kƓY|2K),g3 f3Y80c&0:F c2(hH-W>Ħ0EF]cG.l*͹p'*8H}=m>s&8yA m M#(DUѿŭL҇Xlڷ?Ra"$5SDPB G 0'~ `O0ƍ S|b}>቙Gs:.t=PO8'<:'jY0;/0u5"ذ$p<F K$h9`/t(g#1$_͛;u|#Xb"e ,mTD]'DCB go|.]BO0,g }}@[dGN`㋶ӥGeӼfn?ĠK|73C? !0lZŁIĝM"yJ yFQ̿=baλez{S Z&o}S3 bbV좭X‡_+"a)*,tYݟJv%P s={\LȂݹ1,)*eZja&>% b*+˞Ik4FM)7)=e7(7vpK eEu-%U8+|m955Kd8   xK @ u'(K!׀6M\eiuⴘl,Dõn˙ȶdʗXO5H[|=2^r6@QVOk y觐uը-򄇬'1㪷58C;ƅEq:>za) Й꿎ο1G,tpVO I$wXLxX O]O<^8߁%58EawZPkE/p+) Xj6_9PlՐcr QIeH:b{ :Pc g%. o: /P|K7֒qp$\\OD ?Q ZN`ͣ;A ̊)?7/X:aֱ+F7Ըxi_O{kݽQpN^[YԀ5{1η7soNù9q:*ɗןV'm-S@-GO"|) }=|[:ܮ߫onLĮCW:۵BӖ'7.S܇vjw zwYN6jdTM6PEިB;m \ M9+R49jp㳋SxGW%5b\iy$ڍ8$+Z-9*ha`Ǐhͻ@f'[8xo8獤NA͠`s $$Cg 9"8XDe屒B(tHOEg;rd9jT~&t9vCe + hL42ź&5EtPYr%2c.TFNG D^YK\=&Qʷ%b( JM&O@2fD‡n)ĮOpqHDbV% )jl=S\_+oY"v bw3#A[͢6X s~պ e?aZwS鋗]TN55S6YSkM;mQ;ač '}Y =ݡiׁx2,` Q~_Ѥgy)e=w !qKuwlզǷ%]^ ,D R2xU.Q~: 5=a[\jF2O Q\w xU_Zݷ,(+TooG5U./yNfQ]yAz?zڰPnz:JpJ_OCu0_~4__t=!3 YB%#3tE|2f *_t5J 2'^[+z|xoE$c@PIM/` ã/ze}ϻH_vCEėeeI#>#%)rX6O1+-.FNXs >="YO^Y*++..+U+âr TtZ2=a5AQy#TXlKL^i!JD]}Q2ї @ex@@٦@:v.""4+R> stream xuW XWמ23*A}qEY UZ(jE[ETpע@]Jhj~g >O'y23g2sף"ÓSVkmX?NPXtWq&8cr$Alܴ|X'wyi)Y 9#;'39+ LE֝ܿ);?/u@A`a‚AʼnI!+E\x_w98:9qqus9u<(K*R0j"eMEPE IEQbj EQє7eOP>/Hͧ(gʟr(W*rPT5 Q!tj8e@R)#*I)*SPeJRfhʜK$T5%iT``X/LX{=_W}[E{Dm%=.[K&9(Ynؘa1ÚOo#FxHq}ĠAA!m8paiVC|F#CFsG1604^'ԎHK伓LgA6ghS)4Fw@sx Ld7!0Uf>6j;=e J$}uuKK:5=##| 'Xb죴0̅D0~u")tY5Yi뉎B *7gݓ+R*Β4kѿc&oYS8JlkE,wR OO f;=( ~5!3~װ. #ot)! G!UT^S8EC@PAw`.~!8hdN[gm珒CyVn! Äxߏ :&E&qI;#6e}esF[IK7lL Lo%"- ] L0n-KĪxbȮH ^B:|XFԙB@dOc=)iY-e/as򬦒AaVg@oR3icwv?hQ>t[i&v$9ql~;q E!n!M#a˧h3b>sT % Z*Ye1C]볣Z& _Siڐ܌X ^ӡ曒QG^T[Jr2MWkVIm;^V ]' .| xtToHċH2Ak5Ev4xJe4C8Q? ^ )4wÕa3{0}lHSCRǒ>^K?Y$jN53+ԌLEG# g)&U'j|5ҧ]QT?A[s~zC;~}t_Ch_]zh:>Ơj/ҧ>}` ƝJ4tڲ:.z Ys^h\!/#.OLJԦځ1 ,ۃ0c-1O"ru yF`t::%'%/Q cz1U"L%yCRN~[tq͙糮L&;[ۓH?I` I>_xb+VnGͻOm)"յOP$} O1EU 3.~ׯ]0C^;U/$l~b:g7,|8Of-sca'D1MKf͊Z"Mv0%;qapj3f!s3V]E9 ٰ kuƲP2JW'٩N0#^sHdpQ04a9NtW#Z퀭S{Ȍ]UwtƜ'Kp+;"\+M;7N\\ģe+9v@Č?#8`g"?}-n"oN&F+l۰F&9\RVCGtu⼥ b$pbA+q*O`T6ݵ@LsSo< jfR2fdv^]>,~YM$ΉCG Vx=>Fb7L=NXؒLԙ,Ҥdov/P y+x6ɛ <ڥ!UWČYq(rj}7@bU|u%) D=GYCM㙓-.ꋸgs /hz88>jiؖ( 8롺R~fqIG!TQ"a*|Q^u?JՆ $Ou3^(rPд̀cUCGۘ7H;v69']kEoi^ q.鴙Z"yx`!+?lC㥚AMaFG9گN-*#~ۭwN'K֠]?d^D^P0Fq-Eqs?}!B 7x-k b"H\VZCLa1~p* ߫\pjp\Ь1qv:eWօ` m YK'la qqb(jxr[)VNUc2p Wz5sV}BN3yڞ˯G|!yWG?=)47y]oVI~q{C} ]D\"u\m-/N|{Ä3?U vѵ"q[.^|IJux劽5~DX1}VKҏchC<[S>(s:(;sUFg&},[ip9l;E`O{*]%̑ǚpW:9KC.eF=rp$9$5=:Jc*zBxj/@ˉ xƞ* N>l䃌. Wx\t#ڗAJHVTn&oG]?ܺ-pR3/8C s0> stream x]10 E"7.( ]ZUm/2D޾N^b)9=hƺ!׈${e%NqAM'2Dųܚ4I41F rU5fHe\,vZe1 Qe1"夲Ӭ468Hn)suC,`endstream endobj 90 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 913 >> stream xRQLUNֺB[ܶT 7(mc`")RJƮf.L潅n6Њ)>Zvn C4XӒQ0~$x3{=w(x7(>ٌ rT֚j U^i=%ZOovz~]^oϛhG{t#iXО@4pHՍ8h"Aq*۠iȔUhIX& MP.ZSk$/H: @fFQXSDĕwQ]`ġj % bˁiL]]ѕFeuuD01T9:TWWHիD1ٌ򺯲Z6 5:v=ǔ 5Z` 4-b?zR/;A|TFjHڄZAxU($K^ᘸÜ3.i:$.]9ZF>$.5H]!=|?6839^=VL/]HgryORur/_-ygݳ&s\(cәEKC6Iv<[Vۤt~z&ޙJtv0V{hJMnfGSΏ{?g_/'/Z>}gM]}]duD#Kog>(so^qq<3u3)I֑ZV^T<~clty?= %vԅ2ߊfFXfz)? iFf|47ycɦNv_Y~>/WA'ٿ> 󊠽ɦHtš|xB⾍#Wendstream endobj 91 0 obj << /Filter /FlateDecode /Length 160 >> stream x]O1 y:FY%C1C "dNN>aGֱ-"DcѴ`:E!O dF]ʪ9B A#E3NOVg;Jyp8I.~r v/USendstream endobj 92 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 222 >> stream xcd`ab`ddM,pI-Lu JM/I, 154ɫf!Cɏ<<,=< }E'R#YSD! 4G! 39#(5TG4/%H$#U! G!'395/9UarCCw1000j300012h }q3}Uǿo {U+gp20Q3endstream endobj 93 0 obj << /Filter /FlateDecode /Length 251 >> stream x]=n0 wB70(.ɒEL" 3%CO#E9O> stream xeiPgwYv7 .XbPAљR[EJ8M#(*QcmkZ;ZU-y~tAS&QoP6 ҥ$oq:);3Rh&8633M('I( ekk Bb.dgd%j35jӧI !ӠW' kӓULATwU~B.}VN7hSkDaAu]2'6D$"b b3B!O鄓dp$>#l Fs1Oq4:~M`wl<<AAAhB//l_MpOvî5VpCü\|u=폜9lw7XA#Sֳ܇J&'kǸ>;d&$M= &8JEslH-pAswO_dT]Tn&} ]~ȝV.>ܬ=:e[{O4)W*6aP簕E1e)CsNkYԁ'e쒝2l힖a¤uJլ|5=d騍*swo  ⚫Ut޸Wp'&hatJϬ\(h+SO4SVA>gA Lec)+0B%)(/N%-NnnMےd~a0w=y'wogcBsKoyteS= )n&qEF2[GU*T)Ϗ89}`PoRk8zqَdg~dJ~pj b^Bǂ i!UԒ6!H|_]v6tBO 2I J9rQpF{"3Px7a~5p~LrE>r~ >m*,pI) ʳigں;.?](lb+EOsFh,UcISGIW~Ӻ4yNV43q Oendstream endobj 95 0 obj << /Filter /FlateDecode /Length 492 >> stream x]n0D eMCYPC3㤇"g.v\nv[7_ik׏mlݹ^M|oú?}6O:u6,mwzk_%oOj=Oڇj>>VQv(;UvmբmEH}ϓP-ڃlmE;2$9()(1$9()(1$9()(엳^Τ&"ʩZI6W6˲2Ȩ-dYBvYeZl08(08(08(DhC-/n{Q C@8C ( 0@8`@,.*,.*<<}h|A3¹ZgY +p\ȠG !`Ý u2 Yü! k7d xao5 yCA0o76kcrz-VGPendstream endobj 96 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4613 >> stream xXwXSg?1$GAsx묫. 2 a'L{P:jռmnk}I>ȕ:9'ݿD@YZ''y|Τ >=#{8oj D,ξg;~ƚ [d~>JiSL4ϱwlz\g'~djXy\f{e6گq?E}IQŁ[KK/QB{<ֆ{zy;\||7mܻ?`ߖq'M=e~<XrP(j4r6Pc?M+BmmjZJ-SSTj%NfPkZʉZGͦ, j0BP(!5zb)O}DJYPqs.!DXDZ<mw(RJr)-3VVL=p;=k=:Y8MͷR[b4Yzsк3Sx)y_tx MLsdilɗ%CvqO]etE%:ԬB\"LWN^:TsË`е nə-s&HΡS笳^.ғ|! @ݠ~rΎ{YRv!_N|;w#DBŴǻG::B\X/H7<7g̫t>/U=( *-{SQ%X#DuINn2y/h`D*su~7 F*;X+HiP.:تy~1.ȮO=x!ѯ{,5{R *7ZŊ?a+ T *q &0֠AI:|r'EX4i,֯ƃXz fgO\~4HgӦw_a09@qIPP*~$Saw>z\fAtIZPu9_T(1&OYI0,x%-~4D\ [[J_ d*+dvЍZ?A~6aVt\u{C,zBW/[=䑒C'3fxlbOsK*T}4 0yssxINpLet+4nUdHBjC;L6x@:}^n}p.j0^l>ޒ5?s}) `~6c-˧`^Ma2\r{CW¼YlhqиaHi}Ov7'Х 4_-ל{0ga՚4 fM]*L5 ^0~g[I}j`k:tJ- 6 h )<5xO|"m~Qo*b7/}m]FK;f-[YLzՠ{GڲE2+PȻ^ʋu^!SL-ޡGchЉj DzXi3 dըٕ(' lmP ,~d4{މO/E}\"C>(9*r},zGr$'D?д0jP=w?"kGyk+Ed]fKUQB9#yT;fClQ('_ccТ3l}FEoN]yv'..j$D#^ Dj9gJaNtO Ѣ6F rت'ك_j&#{T'ԣ&Lv($D{ؾ~:q/`_aՅhi~+ؿoM|D`^J!.ѼsqibHs̩RtbLǯ hQi:D8J%Ex[X$5RB\ ń+Y9XBjnv$fX&7|@ǿjS3S΋ Tyۦ Gyx³܍K8ǯ/E(+@zQ*zx)e `*rUJ&DEY$-l0( er4&ï.I**8x:Qta3$9|#-7fR9 2szxݡkPMZCD!h[/_yd䥺?3':eWп7 I_M&AD}$xPtdt W2j\˫ɹ}py jҴzޑs 4˱4:sWQk .f+M+9 3PT} kKF0ag6b%܉KA4\uV[7.-Q;듏Uv3YUn.,Y9[Ou&g^|"R؃M8İ4DA>A~dCG(JE$RIkܘRkUp?'M[3jc`y߿bV!O#~x_nWv.>0\G7*Gql)"(3B`=XH0fOģD)Uf;ӥrCiSnȌta@R0IY2 s E 㐫Qq*6653+@2'(|^*tÝNUbi* ;8B ?<7,|s Sۥѩv愂25#=<1vvM]Қx2;fFgh(73-.Լ<)Vf))ʨJ/uS< I/d7_zAD$#rqhZZsvIqH#dU?< >E7 [RX!\˜ ޷WVhj$UMJx"RI˛~ , 0;/)]}LbX|F2TU:j1"A*o.3-u2EQRdXVLfFAsd{~]`'|'p[ǣ ȞD'<)QiTOΏikf>&6^`@};=>MXt׸^$; k!!@.KT#eYYyCGOu3',X2sKIjsvHY x}D0g`iބi ,q` ܘjdW 5oj,37sKwuv(F3UD#ʼ0ȌX'wWL|lR!u@<9)iI*ms,#!1/ů^[vsG Lb!j5k\ ύO6!C%QJu&/#x>]SQ]pUtqVVzz6 94e zr3J597tRWunӍ9Yٹ(_XPZ?c#yv4KWMĎ%8$?"/ɇEZZgb--6?VG1=S[~`mn' |endstream endobj 97 0 obj << /Filter /FlateDecode /Length 450 >> stream x]n0w?)dРhD" 3swN:t8gYe5u]o4/V߯PK}،pr^~럿km:KVN/;uk?ԭ_^ܶ> stream xXyTW#&ZBOb]GvZXQQTTd߷,dpa A\TK`tN3ӹs9 Xasrs~N;7B/#/kF~I8Fev֢ 돗&P1GY`l?kLvPQIuZyR*,'9HG(o~p JGY5tB2)M)ZX=.fJF7Ǜa&KBIR@ _^,ΓDvKt*L%a8B kGUz?t93A$~+a 1YDNA+}`\B& *.~ûj`d/O)-Ojlk;YۤkA^FoG~ k0MS~H>?\DUSVTQpQS|> _ a$p)|!ϑivyA7hi4 PItM Ҭ)b򋼆c˕ r$YTC!P8P䫩qy([ d٪#Ձ%괿 p(%btnսT,WJԔ0!)% 2 LzXǾ= :f70a%5ܒBMD+kXaǟLzθ wLaݴ-v)7x'[sDȮk**d/>pΦ=\̎5' avy̔JkͬU*r:ct?8JnquDm~06_E_ӎc H$RZs%U6ʁd=(j< [ nkP-{iUU1\!9o'bDa?8~u!#5)nM$D4I]"Te皱D =peKE0ZN]%`nL۰)r%=q-oLd˷@iA+$wM\_J1=~rn\hOaN]?93+/0;С}w6Y,N;m묭Ͳi θWݘn1,&qrlU9@O^GEB\h!55csWNp~'=kG^܌B1U\4)_L Js{13Tύ|s‚fzFa(k[oCI@N%GT&⫈%_jEЬG@jjdWPX\xSw:(iǠ}gWWzh鰝4 @z^4z|!Xtn\Uyf#oJdrHb ( Q˯s|+^D,!d1`2R$(+p.㰋r=[($!Ͼ _UX,zqXG^\Yewޮm{ފ?D^] {okK+]^kYiB"zPKs-ZN.<~Su޹0&rqlܿͅ3g(j)uL HU`sӎS5u8EL]xG~{d%vN󦈇LqXιsٟs+RZ@Nnz޾ƄbFpĻ|z,)>|c`VL6=Jfk}tZx0zވEsfq[?6YYҫ S4@qL?97*YkfYTV":|I(|&6 >`ݨEχ*m,]{SJyeIL)8p>#gÅ]Ye7ԙ[:5^;B;Lw(23VG^K?qt|bkBU);d6(9x$::/)?'Gokp9Ӂ !K#cr)YT齐KtJ E[Dzf7 9GM-'+z)Pm֛E?6FjG#! [,7ZA3x"R;R2s )W|:Q&т2*p@,qfj-X% [̒\&l QEbtyBC20[Zxw xE,f6c8\}+ز+rE_ohڅ2J%Ctqp8 wchә!L!$hK9pÝlnJY(S+j]AX)=+c? qO,  9Afh-(s@vv/a$'=|O6{ی]i )wxB`.\9HFSѢ|a}ހ5`PkT Za觿L]׏o W7Y"u1lB@0< J2YY1; "Y泐;s,y BBZݥR b▞ZGbwv+ ~4Z֢2ع?iXzz (uqLѭOv8nا9Wbxq^53}k~3-0<"fg؁mbMS+ Xk6;uBL㙝,Z&v3iΖN|Oz RRqKp" z"#V+*ՈTzw5}>"}fM^GlņMWBDc,<ٚ\ufvڭ-WT S_qTK] K5%pmk3{j!/ID1\at0Αtu!y݅2W^5# 1m.L kjAWI4IV.PP۵e+po}ӄyS|„&OECOКr\0Ùh57'hiw9 xh?iN:x+j+rG%0RR.+zj6=)QJQS V'pE7zX~~\*mS.p0BV}> stream x]n@ DA !_C$MI¡=0dkWyֲz_ײn鶤\{Ͷ솴>5]N3o%W=iunR^;VWwG?>݊Q!Fd09fB@F[G"ѽ3 9MdQ!Ѧf[Q!zŽF(`FwWg ♥7 ?*f DTS(!C*棜y3+*3gVJW9y _N,y\4߰a:OJ¾:endstream endobj 100 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3322 >> stream x}V TSg>qr@-h='Hi;[| bxGH C ժεT,3 NW綵wVkJ֟ooB;wR;S^ \BmT?/sH7=\۹g{g`{!*QPj㤱)W׬^׋#7;$ *!N,Gw Vq 8":V"+bCoٷ_mߞW&G dUJjZ%:\aJC%% q8LIEO[bMx$D(qXJ8~dF[ڨFQ"vq ,}݆b񙋙9×I`4l,\O~st̘|AqB[vs,\E6`+GP`삋SlʕrD%Ѣ{/AWz*Emٶmߍӟ~z=`$åvxƙdd$\5Cg >/X<ԑܙ@#Kws83ˤ#x?-r0~0P"v5t;.xak@YjvDWN?8B=D9kycb[~m$#& $;c:8 3I:N,$ ZEH"p QF*jff;nWؽa݇G"X+V}+Jbkw˗ 90R 2 -VR1HڔN,v$ߞRq׌0ͅ2@Ep*Z1m5-i0lU)N򇠏hDq*5Å` S܉ńcMkS6 D_P:F[g>VoLPLLfPdK4d0Rxk9eP>f| slC[} l,KIKaNc/ xn5I:,Wa{4r+:q-$tA뢭 N6Ct}[3G=t _?/W1ȍLU;8+;HJk4-4ŏ)Jb㚊qs~&ʕgiPQpテ&ug~@8T>un%ox ZyVY͐h7ŵh{kNSpu,yo6y?E?Re(fLޖRv gRtEFk\\1Ks5S`rAD,U<>)kg*j/w*i0aHێu+튒 ]}z:dZ Mu$E-T?u,E 5ei'2Mgwܟ)}7KS ??q59%<0G-yP_>>ԇ!9uXzY[Bh٫hw/@>K6xL@g>SRudl?` FZ-D ~=\ ]WPpQp1ոr' qwoЋ_,jUՅr0Fko8ܴ6>^fSjR({0n?rwPsP])i~P[I-H+49 pҤ}}{f[_i*3V'ncDGE2t-q$ }0( e_Dҗ$ӽln4ͦjpPq,\7sjTt|!Ζu 5.6Ekɪ蟉O͗m4}Aj* k|,IzSB rl3ق - 愮t]?ɢ [QkNr'sc # g(x0hĐDL.|h<|8ΑҁkDɭ ɲ䞞֞K'9삀񙳮 y%syW?6>} z5Rj'JG"Z/g;2 -EiKe-XMRMas4cͨ !}vȠ:c?4NS(x#]+V ٽdoڣ:OB^ys'6~,?9W[wף KM-[ %^?r, (- CVz] Bie8s A+|#"9+QJ-)N*JcQ7>\s/z!Q IFcXOW|y 9Xes2W8}M4+QEOx,)Ku ZXuN  AkPhZ(Oh8PUm]?iN_ñd ;1/.7}R~mS?@f(;Q:1;s?O&հ S]hH局Rc>&X 1K B8:-H<(Y8#䚾CWYA]ɯ4jhI`!2OP]0Lا0tLOV/E7z##ъh!!e 1OX_B[i< ߋ@sfMNV׀fFW t 3sAȬɮ̓_p]jy8>anfҝ;A7e7,wnlk}P{2/_!ӝlf.e2X~z|E Լ3_6~7Ieeyp1G/%eHCl8Nvw3aE@]?7Q ʼnzHy؟+|\_ts.NAIHL tsM-vWVB+ڈ'G﬉Қe1Z40sftVm+&4v8?w.\WYTMakIbT<ϼsaZ[ZNg_3׌F95t; Kq/C%>5UfkBendstream endobj 101 0 obj << /Filter /FlateDecode /Length 206 >> stream x]0 @41ƨ?0Ggv`,]^M۬iϭwnq0u8s4(_v^윙VhzD\tx~JJ@UsUS1hQ7RpYQ"cRI(!%-!-Rך;שs]CZ`iƴ4s'> 6uW CHU_Viendstream endobj 102 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1030 >> stream xe{L[ea#lp7J-1%S$l ʛM A饅{o`Efy@[ cntca1.fFaCMi}jbQM$988Wby ~$W1Z"pl:,E]O _:? i:pg(-gE<},&(h6K+fX-FUB'[ ChViX 3/j 4z^b5St H=FFaXe`XgbX _C2B"ݶ\(r=s d+blWbG#+GLXrMF^'76ZU2g;]K԰7^dwh+#F2'~"9Bo~$>oK~$D;?O{3i s^q@{lѳ1x8&D#B6varЗgO' a6EV v5L3l*MY|'r5{#k IJF!gՁR8kx]P 1< 1y.+f{FG0 LܪR Minb25*a.s@2W-]h/!E&LxE> stream x]An@ E9Enfl7tâUa2 ,z~.xu8Zޗ)kct[rO{f]wC>5۹Z^g.5(sY}4Oͽ)O]m.K;~jު2v{ǩ<>*0MkL>6Ƅ \\;nnww9*r^/105qr S''1l$J|+AWW' {`rcqk p9Fh$n$I1X{cN{ HHa4R7R(ԍ6J#u#HHRA]ArgT!=oηe)㕗w4{WT~endstream endobj 104 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2997 >> stream xUViTW$vJitqE* lM 44(mQ}kAhŠ(¨25ɼ)ab({qP (峟װy8XEsA3;~]tN5vOo]@+3Qd{Ğ' uk4^/<|_]DǼn1p`ۺk]8pՎ:˻wxY[xa+*Nk--/*}Ɨ.9BB'cOq&}P/A; +f$zIHI$b3T' M&D Sxx-Ǐ=2*N斔45}+)UErd$"nS3uww:5\_h8S+:}-'nJt, @6TUWK*O)紲)PGS?m^PC91y²z.5w6! HB}8EB9b1KK]ŒNZn=~t^E Mۅ,q iMhT̄^ֈ\Fݛ8d*s{04#)E WjX]L?{8mAe~ MՑK`z:Zr5.Et?wZYe~M~;mB޽3֡Xk:ԕScw%AV{Äuy3>sܴn_/^WV)ΐ0M{Vm-]|mx@-;߷dهLuHdlr8/pfw&u@3@"p"--^i2D){99 t% )r$EYn4RT,uaA#OA:׏<z'\VRzE{v%i!5 `KQQ뢫sAE~Y<]<9͝6()Bsp;zzMRG($ ϣK"uKr$xn ֑]ćll=[,R%B>^pw{@ح$?0]+ms7^>a F( sbNBxE zGm`۷<3oBlښƫOKCĬK4l6^q<1sZuLwspMU_qh#<$^kD:5QfRNs3oFFCtڡ,"4Tmh/ Q5suխw񦆸EQ9~ B7c5s՜*j5R\m;ц>enNIO͛yas[%qdx=nʖ?tfI]|ś;--+P[qLX,s/l [;yr+ {oIOMp b^r ;@EfyA̤&tPr{`:2W87YZ Mן܁z񦸷|-RH}&AJ[%endstream endobj 105 0 obj << /Filter /FlateDecode /Length 345 >> stream x]n@D{?cϖmE(qXqNbNz{[ϧ4ny+m0Nn})e1nOǷvYR|T>LqmicZ钲sz{UVI)pjN`4VR+P R`S 3l@u(Y[!-xkAK% b^O  CF)`cb!epob!S FѰW b99`Ɓs6-k! o``8Ivǯ˴yI뚦˼+_`endstream endobj 106 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3140 >> stream x}V TSg>!(S9)*vjZu:**^jQyW ~ BA!DBԈ"vPQkU:hv\Z#;w﬙B;$+kソooo !#$ f@edrlHmM)f 8UhygQv~֔I)~*!HEh#,\(^^ SiRhE:\"@"nF+^רʨ&BܮزyMfo[6nݢx5$]OB1ظEo%KGFb.Lob5xXK#!Ÿ S '™WFL'\'BBȈ WDm7MzB6UiCR2˄,DxI`/;ڋ@^"iRXP4(Ģt_4LN@11ftyЌ,x暞؃n!!4yw B-IòC5,=t2Ud VTϝz:Ao0 'q'һ|wUϱ7+_9{+/)^[Vdoѯ yɴZ֖YN8w 2+n+[A}L Arko+GT{w䡚Fg a S1e{9rMou@:F5,?<.WYU7nRqN^6! %L^2eqT2n-/Q#J89]4rs{>3$BwG} $/iApe,bj fr67E+gj6Tǵ j&dD.FdB [ɺ61_U޹ :Tf)K_Q J}[xsdsck1j!Tx["ѹn9Z5v^|A:JѵiQe37vvfbB ,ϦˍDԲ5׿>@*-e(ߠ6 xn ^#2Hbg b"llPFoB*EJ/4GO~vLmbz5 >2/Z?KR Z>Xݗg+f$f,j9dZ4.e|QF!3Na3=` n6(83|ĄǸ'^()"/@i(\}5YBTr|F)p'6oeATQ_T-x5Afo oahc^y57G Qč5H3y /G +8%@8Ďb^obq/qKFHB6V-JoLQl48x}3&R&HX|n(Crx*+fw/ .-*A)TN^]˾X!ck߯x C;pi7"R,֒},{?@P0q] ;tTED ^*pcvGٹE(eD.]@޹{hΡ3`яt)n`nstrg7KUsǬxhl=TRQRGԍ3̒XN)Un*I/C}%זlsg/ETr*d0TrfuBRzdz<} R?,b~"fcDTT)XJd0qXEH6ǒ O' m"&-<+C*D Z€1&om85W>ؐd67/_ZgdK,ct^ٴb4ǪuB//鶞3,6 vTQP푧"mg'j6PAbsT.RvwԳ濞L{b9Pcl$m BraНu} j=IKmFԖ{& ë'߱pˋ-^AgΟۗ?1f2\y?p޽-*z=>+O)ȫ|`e]'Z؉ V1T;:v˫F}`8 gendstream endobj 107 0 obj << /Type /XRef /Length 131 /Filter /FlateDecode /DecodeParms << /Columns 4 /Predictor 12 >> /W [ 1 2 1 ] /Info 3 0 R /Root 2 0 R /Size 108 /ID [<93f473cff7c70bcbc6ea20cd56e4a7ec>] >> stream xcb&F~ c%I8 0% @WH0 6KH䁄=`$C#+`yb WHŃr *V +қ$x@E |v endstream endobj startxref 63907 %%EOF Rcpp/vignettes/pdf/Rcpp-sugar.pdf0000644000176200001440000030330615030755511016464 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 3821 /Filter /FlateDecode /N 69 /First 575 >> stream x[ms6~3Jvzۉ#;NFhL:$&Y(Q%[mn4!\,vAqOzAzʓ'C*|(^<"/V{%/0F'E :Hk))p4zZ <C0D)'g !3!NYYpZz!24G^ġ^$BxE% yBADғ e"ORo KBIKPGA= B]$n>C S UPd!C1 ]B=ɒS,c=E6kNHӐ,l!Y7T,CBk*SeU5$+.kHV1+ A@Eg YC5 N2]eH֖ Cl%GXȁd#lYH6Rǎr8CLǣ2RW (wiRzqiZN4.>Got"ϒrSA6MK{RZbccB14+IFՒuee@rxuQ溮>Zc-OD-OD-OD-OD-Od-#&-]خqg1Y(,&3qru=f'){^옽a'lN{~fCvFl4BM&C6&Yߛ!9,N]]"f :qM KYƲ4fBu_U)wB@ln'ӂ}fY*TUY&(/P%+8f 8YbOKUA f>VW&ܩÛx}Կ[LF+p.4u0촌o~m;ݤ1uߓ`Av3L`h: Klj y?Ԁl@O5TGΧ D|0чjJ(C 1\Ԋ&q3n'0`H q)x99#0i)d Uje"D=b0Tt>t J #E,Gd#uCF75̞ ZFpA(BÃ#z ޳s Ü]L'$Xƅ"߶B`8΋QsDb4k0]uv$-BC1稰.<7Ed,w?{A|5m5}##5]^'"ojW2x':oU-AĺC +(IVaL>/up]DNbl-/UP%1y(: `@Ѧ$%<NS"+Ig%Fſ-jTQAX]Ds aŦ ."WoO5&/M^6%\&Z&كMƭQ V.-L[V_le8 *kx~2QEoXó Aԑ&Y86&z~b͇*u>ȫ&,;u&qQlfltYpZQ@+JKo|Y͒pR-8~z~~QmzU-e1wX_ӎ~㺿ƪnvcS,Ħ;M ;#rv嵡Y^ѓ8_DRXGRl.r[!f):&9PP=/kc'S\77G"wF%0-niM7G'/s\1V:3wYU^YueV;;{ذɮ0\yE#qnQbq|HPdQw;}\ m&CNRysat>њ6k% T?xT^*73po >mifikΕ m[An}ћd6A@Cm-!5/uS̷ %7N|,q `H~+ w<+>-F )QKޢ Ci`{ BOS}g(zYu#Q^tܽKx kѣ CRAZ+D | GPL Ghostscript 10.05.0 2025-07-01T07:57:45-05:00 2025-07-01T07:57:45-05:00 2025-07-01T07:57:45-05:00 LaTeX with hyperref endstream endobj 72 0 obj << /Type /ObjStm /Length 2884 /Filter /FlateDecode /N 68 /First 584 >> stream xZYs~ϯGTL)(HQ#)=@bt9XLZ9>Y'N3DhX'?³@s"xp "J"+"_ ShO!@%T0DVIg HIdA%`ܒ`2F؜hΡ'Z!h.Jb|@pVb`p :HXs 6;B$tX E0 $!N|d0hq8T\PpG `(H Ǵ[ EH <4vp  %!F#Łc^ `M(+X"=\B^)dIGrV!a:=BcŽՖXž/֛-j'Ϡx].Vņ+_@Vr].{N[l]NՓ/˂<(..8[u*6_Ѷ-$ڃk6ESj; h}.>5 FU۩'ӫ!\ɭ/kڸ&%oۑƚ߄5uʀb+QZ\K_GhJ+bCatd tPGk p}1~421ݕBZݑX QX"QH[ߜ5ISh:މ{A{ mmu1f6숬h-K;49 à8S* ˩F7cQ1 ɏa#MB7EjR͑B2mFj%2vc7^P- ԡBJ"s밠5ۿ =tKfCh7ǹ!]yIC}J492䃱:N)K2q)ּЫCYQT(u/z0*X*Pᰌ`CN1cv)d[CUΊ+ LjvΖ"HdʄGck^r 8F{+M@,ۇd x $dp!˺p~`wugNi%)#hf ZvY+Ghw͘ػsHS$,lmd pw;ʖ:]+TK RlD"QF^ R䜷ƧMٳ^<:~}6[m?xZ. a5/K-V͢lIzq-x~[ZB|^az8^m0 tH^lƶ=hDKQT{I{r#-ĿhvX\^&PsVlw؜][fe8/!U#рhIjC8JĒ Мz/Vժqpo&53*'F\0$ pg9D'BکcʕSb3z _ L fdbh P< ݃>uo'$El2ֹ/lk݌`=σuF-Y*Pi+Y|flsŶW`JX=]tTO |2> stream x=6r!/%8wUI|+Hƒ84_w+5HP+ifEҶDv7Bˤ٤立"/ R?UJ F/L_N gcN__xhlXna.Oޯ.>dB9mQh^0=wRl6ߥVS[Ie =f6E_˅'M . O?V6z1ep*[˫)gnW. ;@aB2FȥL/.Sr]&Ƀz- qwjVRi3[_]maEXz̍ dKfr/4E&)4 ʓ,U3e\m$.gnwEy~ERQ|^>eVLh~-ι\Vk1 3d7WzW񧲜Z;< eaUVnUqfQXrZȚW<5s9>2&-@TQBM¼'KWq+Lw%~a,,|S]v9(i p@lASlQ#y. *x[i3X}`lȰ**u$ez!-zq?GdV]PnL8DFGjp=%$D(r8'.[ҧg?fI#%G5ۡ(hB&L 9*L'F ,.wj͖yJ42r%uJc{!E u(XsׅiY Bf!EoQs#upJؽ)cߌq's"4F%V6 *EuO'Kfs7 o[P1ijezZ4B:?6wys_Zj77E>qS[[ 4rV)|wP^F9oHwT&&7\iy)-r]EDl[g4:j'att)[M G+Wwٮܶ_ Fr 6s˫vڢ1. Z dܣF\t ;p(2ɾ;&3V{J3``KhX@3fXށ 1Xwg뇩qL⼕m0* %ͬ,VowuJ /FAma͠7BeM?NG"Z@Z-ы֫ ( "( y_[iQΣO,R"ͫe-)6|-&.ezA ƤZUKPHZY=Dw/ AC5 y9aز ZXTe)'>Y#ԅE(U-i'9|,wPicbo^{$*Ĕm맻z }$? (cfY^ AT`܄%MkAF|uHmO ypdPտ>40 Ueǻw=&lH}~Un|Woo =%KXzHe~#)ϋ"]<( f`(.<, $ϝ3c ⎻ 3pg M[ GU^]¦О^/& k[Z yz"ضk9,>(~ ߹6A8JQmBM)6aSn6 AgN (UX"xɩ1[WdУ %с]#O&Ӷ1CM_C ف<05K\།!Dͺ248)T % DTG9$S4Ҩ} =TYS)kԓ1X\37&m1|>ܧ$%;isGtu!F1^CG~'>6ºN ,'B¨~ӫ!iy" FbH)6#0`$FO8>QZ ,8Ғsy\@W$З8 ̡f-4-{s1g(cxo4)IZoh7Z !VqnU\$UyWuڈH2@\~ K:v HM5}lnV;&l'ߔ]jJ?Gw[mkTY5_2=Us3LpmC=SꏕoQg~Ҋvcvurf 1V[(2wE^ϫmg=(/"%`QXt,|>mD ؾ'TY8QIŠ.mou['Zœ5#uTƒJ[Mư^[‚'Ɏ@dM <[!V-zE q g1 BTUtT jP:F͂_0UԿ}wfOosΆTu?0*cZMtvR}R 󛖫OՐOXB{꽅 2yكBywʟH{r &zJD_h׉[P'p~>@c6XzUhAGsb#BcT#YZ?Vk`ȕ!*?w3;Db}089{0<1:Th*vd']t сk`u[p:1ߧHx'"Q׬yxcbC "G\K<쀉 ;1G*-spLLo[ytD?vjjzQSKsm`dc[yl+L!Ṟ=vc1c~2`j;K/5!H(xʂt}3bDA.gGW1-|rlŜue4"8H܍H"tGMLϔ} ?]TA6 D_$ ݮ7 ?nnW%k#)MY>_TH>ɿB2`y.s"A, ?|[Vjw*/`R5'*"y 5s]-HuFߑWJPq}|0?0xD$SA$>X$GS:`lZcJN{pM$88hQ$(: q4Ij~]"= LwCSpC~md$^.$Xɜ.oRmZ䚉UV)`d7J%YfQWkԏccR  _ugrp+ѫ;y#x%}=rƫëC-E?ǪFqh ιd97 iB۲X݆*H_{WpO-ovR nSb: YI2xl~W,M5B}U|Z,sluŷ H }z^=J} d,P==ʛR5lOB[wDTƩbpsDt۔55R6G) ŵ^p$#F0ZOd ?VP%?ƈA].Q`kB%p / s 8O:甛`qR(h+]cL\=UG9Ow|UmjxuKDIƒj/HSgM-ej͵qC٠ͬ{cM KM̃йI ۋ/j9vFcy$c?Y' X7 .?4h7xDC"T]ᑦuI2ñ}&|ũ>2_pGSkxWpH2հYX|u8pw%M1{RB7uJZS'3 ?[0$Als rc<,oM]aqT!˶%(Anokmx\4tRa61 Z^(7>8R]ضA E`~ 5U -Q&k|!K1ߔNVT`nš}R'3#!&G.B4`%N6+k]J),Bx),evwwobN:\N/i!rzsn6 J_g1${e$ŃuCctc> stream x=ko#Gr>.x\$\iV"eڇ~LWϒvsəgoeſWwg)fJ 5v<gfuFnq͸rc-ӳMg_ohvZvj ler0i f*v'F%=<Θg,K$Tl4Y`)ZprwSjjޜ_*ڮͦߞ;{uJlsރIp7_5"ؑ0Łػ ~u@{_\[ EϟN & VghI BM$+C a_ƞGX2BM$,W,-Ciю!?BFZ(?U oijH esIKF^CZ[CZ`!-\L-A^CZ`xI @0uuL;&HҶ./H_|f wyE"^ef'ˇ' 0晄<#!DBN0P7%,@)h>N1X9U'#/甉BD W$DC,IpT{&k8ZM* U-IOJ`W 5${pc]{ɀ'Zo2*Y7U1 M/8Y,4Qlv =v^m+[ꊛOC %&R\o:u4w2K0K\ayuUE 54WM+M5;%jhtG% m;' n@~#Nb3:fUz[%3LƙOq4[AѼbځ]rQh$A!cug&L=4@{n3D9kQN(*!ͫHsövk ͪB(z@ RH4hpoWbX]ۇ仿F'+5͛o]!3qfqZ5%k`{u;r<[׹kGY`7fyNALA}%緡J >̡t XȵRRl`6N?D'r%˰=y^tGTaunmЌ7w{A=qBQDѻ^qPrbB]VRFflJ,9m.X~}Lgq} 8Yk,TBg3eYhDzBlX}z|wS` Pм&1)&EqHz7fnTǽ6lר3&~M*6D0Opk{qQ`;' #{C6x}nU!cmgJi+p4#eܡb8E!nC=V`nqsRTy 4H`mT7Gdȏ~ 4 ;2.?\߃j_f .qXԡu;h^ǟ |߄\-~>?q7]݆m_m^7 Դ /L5 $2SNjOMWĭ»olsѸ74+FC?"TNpm-rk3'rs)89GQ@bu׀[N.T.58oݧW4:ooMXq:AtT!A607CC%)f\a5$% N,nY `E d=bT/;x2ē(\8V6?>a`ѧ~jZ'b9߀2y廈gUqz=ᮤ'3T0>@i`Y _v_3d1k0G#z=_n;JdDXj,Y2i_Sr^7Ck`L: Rh~|wUvv,I[.}էz,כ|ݭ-$ G%n7Kۡ5\z6~M9y`Օ!cr{j./Z.0QVPJS~DeM=Bb]tqKu?13E1~X8^鱹CoxKYW#BsPɒ|+of"ͼIp 1:ށ1O<Ĥi iH8}(Z/n˛]]FFY7~J֫cC\u0 lh YJ7mkuvkv$?蹩U3 $.gNHE aIF1NYX(T!]cN3[/2GtYX$8fo3lC)nD0H3 A( fϮGgԦ06u;0,zɀi:ljY0r 2%o`9g>&m\}?,%Γj^aje;lTl2ZLW`7CH l Zd<]Ϗ3~7!0=?/- 9%dNJR8\o_*Hv_7HYrˣubTxnC@k?Ɯ!6tYf!VgB!XGZnV˜b%΋8wcXoEWGkF3%7p+![ubJ%q5ayI:.G&KA M luxYc \O lK A1w_'zU866Q+;&X}OrK`%G|ǜqNHB}.:o9w`PѸo<΄wLg <##-|0Ep:Ha+p%]+,GgZV[azue.6 |KJ@2l.T~1?MQ[2|;1߫80wji-!GbJͰYl(NȚZ. s ա(NrvvnP8M5EpBM (V.{qo]!SU1.SbjU1]IO ਡcS}'s @^b/h/(SV6,K JS_;ײXRI ਡv+j|P$I;W_1Qd*UVx)a'.J_Q`-fr}oBVw q*}8*;7x[0Mɘh-SxՕ=.(hNW{{pGkh@,>}8Wx74ȓM28XFjW'{`>>b*UBrS)/o_|yh\ zKS ş.hpnpB_[ R,G G ;n \͢%8zM,?98MOkP#w'o ~LE+3n#,{7`6' q[ 7›Ѝhqɢk{q!`M1TsんEAWvbrKdn2733 ۓEAW$gna e|z~(@}NJeʋA*Buk#7Xɘ 7DU-4q !NhqI WB1V`  S찳SQjBc19!r\5h%S,mx)t^:*-< r3a~yR{gZxm8n÷8.R/':8C} }Lpq؆#vJV k'vq2`Ƈ&Ybsa:t¬gWLkf-]x0e1IJ&мxn_0RrJcMMı4ݭ9eA>7 |@8{Mhmà=ݾfpB5(_vWW <>v <\fe&Ɯ@>lqק3_txj5|؛`SpS"O M;.ȯaJŖv/VJ'Kb9׳YлKќ|ՇDCAO)@aQS 1$:9c$=A;bYo?@J6wU\P^ L?VD{!'<6>ZqTJxrtWó?t10pHXw&Q :6:О[4bxB򳏵_JYqzlx)ɣ!#(0K:0|,(!<@GM.=sp3Ćn12鰌(܆sYFxB0/ jrk3 >1w,)1_#(CJ&B ^}KJ}糮in0&{dIS+-m?.lٟ?y1 &rPܱGo=> x!0%o!1?ӠG.}8V3 JMxq/qKWRt|8X.O!H'9䩼Ruxm-N>W }0/nL9WxG>h,o4٥q/EOG ̆#H*$Ѝw%8ǚ v2 ®ev~Ws^dn./}MiG+*M=Q$a낤oUyw~(ssB3J4s o $d<endstream endobj 143 0 obj << /Filter /FlateDecode /Length 7601 >> stream x=mU~g}w_墻˹v]qG!՞35 KrwřВh4@菓d N/>P.%p)uir[2&m3d*r'Ë߿xVQ0[*ϋ x^޷BR ,errc/$3]L [:Ë0n6Qjb(M'W?67Mf]l?~b)-+ OUǤ=X@̸+u닫D 4EzJpJic!AGc/rZv"vZ套 Oka}d~faPMGsr)GWԛ4.ѥ^}j>`sneӂt^w8o<6wsa!S ρ_⡟@JBas (;%%@-!"Np G{9"\K<9è>z5 -NB>ezlqWͰxZKPfriS`L i -`R r=`8tUaU)ql/6JMB6]P3ᑦ0zG $1^zW%8aV.9탻.yF3=JwuE:;8il{ҰY!39880%lv0OβQtĪONhy;i5&E8_wT9u]!6~.vpR(^ɟg|(鞌~> w#uс0/ qĞ6PA뇌A=?w{9^#4 9 ?]o.<W0@05֍0PD: وs(q1'\a#hmauMA-`y}̨ ׯ_woXUPtF9a D^ak!104T:*~?5uaǕɩalU&K"Z1Z( 6slL\>k5)shRp{P&s>ƃI|>x:IBH0'#`<@0an/Ҵg`;!)!tWgH~F~~fT"(U=8F{C?ޔ 0;LHk1|Ab6ǺQɕߜ ##/W$k!V=erRؐ.TǮ͆h]( ) 3ls%y2oYs0\ѾLunטrh%1lL8턾2}j rKYˁl +}Tf0Ht؄}Ro0U~Gc(3qJr )AxVoFYږLL RfO TN0 }aѬ ݢwe<0K # yF0\(hdxA +)G10 xL)ǘiKY|nJgF3`3D7|棸& 74vlCi oO炟~{ߑ.RrFW!{;I!CEiNV &; @[2f`lIۃ4+A.ꃾ%rq |[:C J|,]4,"_pz„!,s!4`w'_4靕A<,!6> ?Hpw; "B6Co.\{'e|4˼X-po.bZ s0G:bvfkHez_ӷ}'wݼ; G+~BFGuO-g/@f@+vN`ˁ=oy W8W'p|kJDc`yg5"zj :R"9VԲ4M~`^@R@6=:%@33벂e+'' Ğ/wEgDg,Z7Ɲߋ_W/ˊ%[I mykAP hbBPxs9b`]BAL >j zu ˸JA6_5 BSX0Jech `MA ISCk z$M1IS#i *,#k՞鑅5Bf;˵B[`I/9 \; Xް)+aՑxS2^2 @UD^ ex$)1_|5tHv1Tu[mG=?;B|1;H`ǀQX L=tL!ceO`Ze~,Ҡ+C\1x[Bu4OOB6t`)"`Ơ*6/.ͶqP~\-sֻm 3W_ngݛ'.|!brS/ul\q "Eؾ_7crӞ㾓p}2/L yk?/vwX`0ɂ|:|0Lv>л^bx-g)Y.]8 (.U#vL_Kk۴Ԡya\8p (sM^S#EJu͋:\B McVa]/ͧ ťC$*Ap!BYj||0ȞbKW6)mjp&x"b=P .kd-O[5'mLT: ׎=LhdHѥ*W/Ue؆xy#_/X/wCm_5l&@K872{8cUg.}M2?GZr7q,TʰpV }*r \h|sr6=x(G# xW٬Iz&=㺟usKUL0`6MJ=AݨjVҁltt:j lv$R˔lLwRvyYKk?~ƜJ8r?ue; @WӿP!mloΣL7g[MT/|a h6} LfcV L`oN#V(t;y[ O^l{!3X u%n WY퍶QJSKda@IrE /1OId9Yb7(~l͟~ׇwnlEbN=!'_F鏚n2D2&ؠ,ƉgY8i TVC(;|N?F>)ևt=!G3T#D̏T]31d'5܎B >Ɉc\.` kMT<:cm:0S&:*{>Gͳp<-bu"i&tm6E%.;ޕskn{nj{+0O>a'Y?Bڒ7}l o Rӆy l4띏޵z|; ?.$dziWB'ː̯5ubUG\)D_ }>`4:.G\V>0Lb\'HH'PM sK__46!yړ\i[=) `՜ 鲫,iL[OLpZAΊU}A!-a.{oO3_r- 'u3Le&D>YT 6[ %x+\J[KVf/. =mx3~1K^%2L1tաJ~k>8-uEL&iendstream endobj 144 0 obj << /Filter /FlateDecode /Length 6478 >> stream x=ks6rU#ǵoR*Kr9KjuF4yYyoHw H+>rn4٤ݿIpSTTJI{{ &rwMTfr~sbaҹb@r#|y>TVU^U*~*dִ7S7BgvYfv' ”{xRNLQ$W<=|Թn*7͢Y6C(U":oܔ2637VyQl^67˺;{?j0+cr׼"QUƳDZ┗@Zt`W1wAEmwu\HbB$d߭΃UnDAUC̡2[@Wijz9_ f0-˼u?Kx- Jg20,ua'=[D8@zRM'/UK@ +b{ 1z 48Ԟ< WFr?2n9O 4lzaf2m7%dk2k_.c~˜ 4GWL%m;Gց-PC%Iɞ\=IL\ ٭ɰ@ ;?YfX=8$1'bqݬ۵vp h`r5 W)k 't6*ҫz;7Y6W71Y6e4-JxZUa%Otr^8j/ WjIbG@Hh O|gUv l[2LʽV{@׸f49ᛮ7OīFU[7K+y϶wگ *v;ZXh{5~T2A_Z/&Z h [)voҚmW_-ۻ~A[H3bOy5{ V;Rfcv];_ﶋ)C7Px_mO[;4f|?pyoje.sbifԓ$KȢpKcu! MVTպVz hYT1V -h<26: Ae%H9 "dE+$N >:mWf88Ҵ@apjT V*\94r~MwS(/ӄsPmjzդ.$"dBt@`Z.4@k ?GOQ3=VN*p8c/J,8m_h"5 j0`E+\yܟ]M9~ 50-@('Ԉ)`n*e$"$=N25Pw(Px-:聾 IPBo!+U#R=~jL@KQYΆЬd/F ^E`H6"*HFqӬe0'cbB=O Qތq 9+)hͬ_܁ Д* ]b !8`HAjͫpy?6 A 69mR<>Zk,cbVZui"$8fpEguM{G(IXx@*Y+|4-+)sui ʸ)B@>2%Z 1}6[[DX麲yg)=VRP}=f}> o7L8q/ߴ륇m Ш]p" ~I~|܀Wd!8(5|o7]D2md4_5}CINd&JTAIS뵀4r8)1CoAвSPަi])r;g1@>ԳYu0˲l ߤ }ioNN .O%3JKiʝm F}$(YS0)˞FeJ/P~p2 B!l%O!aS`=*0Og*_2R;$b-,!pX$Au*0nSNIүlO%m̆VMkRIMӵxQ`BZfZn2G$b&>;3n\(uw*U A|t WwR&1}nav?1ьOt%87ʼn#)xCx ץ8Mmp̪ ܆t藖D~xp 䡃ڰs!sU#"!%mߝo%#B,F ^BDWaHeqU'] r"Ե@l4q K,QM@;Qfݙf1P%"Q:fZB-gb>K:ǹqknן&*$HUgzۥHQ:Tt/7F9!߿Ⱦ%aD %fÜH.OFǴt{/r1_=@iܻܵ n۴ ,k٘.i̧#&~L瑆. +`@(q\"#@p)#,eG{^?]0M׋ثr7/คIp\LOG[#\ce1b}b颽AL$ M3p~~^b4CńH.R"2Dh;2!2A(>! 1$2D! Q&2D?D,}(]5s ~[y[adVc@#Y"MxQ](uAfrEK3cO;UɀeXFͪߏHѷs:6]5ъfm5]lSb׸ A`' ybRjy.yZZZh?^l-8S=U%/qo^c||%o"@vz$r_ ZG_&xA%YT80!*IQFR!*S^`!o;W"l3 >[n$ 1j >A/ ꝭ-qk`xVq[9^Z߻@XwP [pJͩFw] 4FXHNro9VLxb)_Gqҭ#݊xۓ/gnEP Ȋ/u}|n~ g\2o}f P}q-d;X>1@@ VvS/>)`iK77ܡ-g |{cm녧PCkVWT`+Eņ7k.]C O%оomIڴ̷#efu岃t%m߾T FOͬ}l; -(nS ˾YRc>"oObMe>|z'c XjE߱jURo\AWvm%<[\:& O18tM}g J7?:uQtMQF?bwˇM! ZlM)ۤo6׻u r(oK#o<^/4}lGFa5PĠL\Sk+H?CT3EO,@(AWUٮeă!5!짳oC֥21hwyU}ŧie a!aCH+8>5%hc`Rr-me}^$5o.m?Y#l#~sm7nq)c4P #C`/P[k#A1(VfRCg?NIj}N˔.Pʈ/F[͂}3ԜuD1ڹтV|9EL`Sg87q^v}p\| NEbOx3 XA@3o6|~]YQQ*϶;v')z"g%pvFǨX^J6ydC5ٸjRm6R@0(׏pgF6L+ />gW_F'| X̉Eutٰق*B4Jݝu U9'eC!A#Duٰ;1"ݗi6r砘zaXʬ*l@MUd]Qdv"5IO|J>ȗ1F9+:yr45X\Lf~2D߅ł39R5:cgKVy 028Y27Bݳ?ژ*Z6lP]0=bZ Pp;$)^'h/1TdKQR:mA2"f*, %0\~Xgw"AI]imr jZ()"mz+!dzQ:j7N1qj'y9ƉqCpc^X9݁\Յg(!8GRFQܽ vO O $q#25Zafk%䰽tT:*d1䀎3oV[{θ";1NݫH#q8])-U#|={ .b 1TVa8R(ވ 3^aMPxq97A!zr>l(+"SLXeYkC:I&^?o@"<@k_J\}RåDŽR.띆ZVJYD,Ɨ:-e2dǸʈIsbGsbIޘNL"{'&^ڒf18irR",1YM+3> stream x=rƕUG)S#ݍMSx)\3xwk5š E$8w#8M,4l? Et*٤ÿ۳$g}Ԣ6$%˳ΪZUvrR kUz"SfMsvu^)9">fJizKzJ%'.a#`RMatY)OoۑK{x5+1 -z"[Ig~;>*UO.ₕL;Ѽ.5r{h?5\rYV/Vf_^^ x88I$z3n}(-AJ$ǧomiLF0;/_w]/2QdT 6 \Q^P@SXVW=?FT w n)W t\$hVVӀfM| TE1_=u)L@~+S8~KH KC3Y-)S$φe>p_Vv^ \sڭ.K.dohme| RbU%4A%iȀ4a ̈L)!XD%= "u/GxS?P$F:\rjndt3Zc&n}lfऍ/ћ#6{2F/6W?G#@0zp2-Tb 7]`hs?Z9 Y%Xf$oskΓ#Hk}˨jR<=챋.JPZ~ΌzӋU||ї5ì㊩"UTYR?!aEAfO,Z&8~;X(Ȑ|چ2E ܛ9Ԙ1 xckY L*z K"r j}:A e GМlC;׶7$ms{-+mEǡZ씨RD]  UD03˳Q'>(r/3yTi6}=0F(e`q-ϻ:>Nϒ/Nx~s]EnhLI`zyePM)NyP#7:`\.K. U)hD6W+X.]8ݳqR.ڛxr7u-XyOo/g[7ʨW p_@) {e% +nge24*8p+P# qTZ(*LZzC)7?`mWԕ)Vk\ ,_6[}jogWvmKvyuoB_͢,MؐJb1(rMې@.ҪxuJqV|i{eAd?ȚN5]!A_ܯWz@_O=ɛȁ\ͥN\:_\6`mʋjntq :XxV??(4ǵ.v&nlE&iLRXa8%Kɾo ŏfh5mzI->,fqŃ A6"qɶȻe<3`{ f pp< e8x{pϸU|z/@DkS4A)Έ٘kx&03D>˄{ٟJng:}#cQ[P{3*Hx`ܳc&)H% QϝUHmx^x'bI;qf ˒BnNŗS+tjbT4gx}ufbϿ~_JMi`4x۟/;g` jeq4zaMS+ݜpY߱hjI-̍13`i(^RcO /1phKt(A S’EZDyN#G5Oy3bЃrjuk0WU7X:BRb0Y?~FXՃaIGk%,G@Foi&|U6SVnLMCFBLl3 V$\ҽ٭Zl#~]̖uv~)~.ԄrWf5t 7€B&UGo3`;\q:O=lG1մ~k|4^h~ ;}"d!%4%F:&sҊ=BU@eyKVRp|4F\f蒥l1(ڪR\c%XeR! aMZg܃=h{_B> JW"ױY2vyL m0(k\TtsVjǨ՝Ns" -p[l?mҨW|1 ]rLrOC5A!8E|rʼnRCS(CQ'w7m?`X4nzj= 8 M99܏br6Bi*x;ZeXl[\wܬ;g\5f5ox *UzlU8w (:κ{]SE*.ҧEݰ?-|~BQ`=jZ(/!=8+hnUHH2(8=5`"utz /S $szyޗ=0 w uv;:!emŭ,^@ '1\|ѝwcTP>ބd;5(\4,ϣ-=<%AKޗGςe1?! AAf7@Q?ŊˮĂXQޖޝк+;ߠ49ÜOR*|QBYsa]Ӷ2AE_X )k& Je/@;tz C1Ba !_9.v6+l 2ٳH+xeHH! (J섊,nMvztendstream endobj 146 0 obj << /Filter /FlateDecode /Length 3282 >> stream xZrF}WqX GAVܼ$Qj !Y`б_s!Ar|K">}~U\*'q#+!شjd,WZ4)<] Wl6/g[CYju߮UY X͉%ZM,DXCY7G3TsJ+a-fM=ͽtI!75}8j( _+U!a_Ϛ4/${^j|'!fФם"5l8& . ]h=$]~hxBSi_2gWvk]!uS~eYa6flA%'U!ܴEn\|h,@ (->^ђ0അnb HftE(^p%ťuƩVT R6Bxbg*7pG~kD"Wҏ\ޔMF F|v׋ϟ 5nYvv`l%*xwF~}fL)=oY!}-͎Yip5p6ܪʛ,9O8ѧ{-a??" [+H#27e-{:PBFTYbWn`ۓѣXCz͑MV{cwGK=,{eF0>q$.@;rLrߗ_Dl&{X&4 1͢"peC@/8/p,c4HNj%x\; Fu5q/P;z %4汱/ 95w&{C诂*\9isDzF@?u'3ybW!p6EC*5sǦB`Z谗?k{ۋ<ͺAսY`">!G=_ʲ^ĶXS>Q+)4e|*8FбDjb,@lq6U;*+ոLFPҍOv.4udIe4}ZQ| v-s,AN]y EqaXTP ʨ˱kvP , 2?o_7MW vneЭ]- )a1HUZtb1N+=̡Ԑ{*#"7\8:N) vQKv63A_%`DrԒpc_5a_UX);%n@buI~t+dHl7D͚f $Bh~ӕbDPOL|1U`njEH g(n4L!$3 λFi!Nja}yLO-aN}z~qS^6!GuQjdL_װQa?uyW!@kېDp?RGô:7c2eAꟍCv4mk [ICCY gLRV~H,V' ;\ N<:\((SF5}t({UU1[1{2CXzr&uTyd8ŜpW.3EϾ-z@g&(Q|N5(W0 0pGN`R8<[SbFPܠhG[jcNH j.HupԐ޶EG ;'H&& }EУF CǺ, *dzN:oM 1 msWڪ@ncM+հY_꫈f˱b@w̦#铞A!3̵MI(ŔiL޴*A,> stream x]A@D7z3"QnF,X SUdEY*۽}z\:j|Y[{ߦ֝e|u\7ۧo:ڶ?w{,s{[ǩm}_sݴe++N珟>KOChZ'٩Z\-YUɞEK@DUv'^v բ R-"jBi'hE;2D! B#Dc0aF!"1B%ڔebCT!`&CMk Wꊪ+,,,,,,,,,,,,,,UaPW`pPx4CA p<?sY \T?A{8A > stream xWiTGeuF76h\("( 302,cą%.@D ". `&~&FML\s&UFM||3ꪺQ(H'XQ s.ԋlStļԂB&´bׯo~>=lED:͟yQ5)4ebV>S}#Q+r2T4) MPȵI yRO8 _<_P+bTX2N>KP+ 4AQ+J:M.(d";N"%OQ%+XL'ŨxV#WTy2Qk)i>!GhҵqiX Q+k&eyNT˵l`'V!Wbt.9*%Mit!#]N|o}=O8щRaT5CRT(HͣʅZHQbj:FPn/G1 *KR,jDSeAYR>%R6T?l@ʞDToj*-eJMRȋ߽za"1dr4޴Ĵ^36!kgކ) eCLڌ~ 'ޚ) !!s!&v .Lzk%j&Gnmzl'An;x6I,PdJwY8p `g&+ >/ YMof:_\_]_]v I}b sRZPzXԪD `5@p~c Le&FKC|DyLS9ӸB}HWWHZG)!0©$gW;'3RmocT),#:1?W߼}rڼ&4ƘkdQNu|-?;~rͯsKҙT!}^&Aٝa'!ޠK[k؉" ejEe#~$Gjys+:ױtMݳ!\V'"`!TcW`5c0/F0؂^r ڣ,B̆&\ھv Z5vS$W s˭tOWe &4g\prAE)UNd7KlH9SFx $s"|+_(6Ŧ߃+Ɠq}, #{ _ a#uutYr3c-XAT*藩a06 ,pq90`؞0x< =ɰդGOt;wWˊ+yt ؇CBjቊA1p t'L3t|k2C%{ζDϒ %q]UPV*@'iao٣FF` \~!ڊֵV%>wX[>Mqz2\Y*ˣ8lwV*ML^e}9~+zrwrwޮ[Ǎ@ʠ #1Eï[ B]k zNxx}fꡈ8?8s \kO\%BW~Y^XPIݔXȨѲn 3@ϸꯇψi"&SQ&q0O <ãd1&I'7FƟeh]?hw@DdzM__^t Ƚ;ަi.ol,[Q,-mYX|]sB#ݓ_ܿùbbfAmvjG.3625C)]3,s2%+!z[O6^@X>}L_F ~-lZ4kh&a yݶȰ;ȥz쎫5NLbqo|_˘'_92#݋I&`pW3H"p )&Ϭ#&M vDA!8wsd|@8Q 2C X@vxA)I!P֊{뫾EwX"m2@I a/Skd*TXq)A`G8vN=dGf=X_M-KIݶo,{ß5]jT_jUA؋4<~l^A+ 휡m%apK V#9JAClJLyT`؛@$$l?2-d"nAt>c 8GOl懫Gbfco5 㤚Uhl%UUEjeOllu``EΣg`Oylc3cH\dR`9DCi - L^"_+dŜe/HuIbnX4#joo}L$ޫW;$i*V("_" -A *ms5ӕ'E}bOFCjԚGnOpAO՜Qͷ:t{"Yg]9hԈyA3Znil"{k|S&A)%1aIS?ͯ+o˕l+yĂȻ?0r"6nWJm^zF)an N/VFͯ2 y⃃:P&y:""_bd#!I 6}X%?ň7{NBxdUA%1Cs2}C< d^P(a1±aWݚ3;=b`u7@TU}>`[vXX\Lendstream endobj 149 0 obj << /Filter /FlateDecode /Length 577 >> stream x]n@D{}@;5N"A(d0%rNbHjoy9݆yo~/e|pίe~6]~^;42:-/}8xl?Vkf#f,Y,ڃlom}`iy4v#mVY,ڐEh!;5v7vO,ڔ`OmɲpW= u  -\]`OB]űY\dmR%RiB2~!FH!$RiB2~!F7t,.*LRTP*0 J&SADp*(N,.*,.*\yx;{z'E- V¼o\{"k[d-xeo[-yKE2oZ-Y˼%"k[d-xpeCUuw燮@2k_n>y|@9-t9_@%endstream endobj 150 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5146 >> stream xmX \~ӻآsE9a"X2%-QTT'mҦ$aLM{*TBIa0|6h=繁|;}庯_ ՋH$y8/\ihF C%°^0<!\@~RO+c^Lu`6%8x/h0el#'AjKg&`_/N>f*Ix{hou4`s*{HQԢoT.ڲoI@ Nۜntrv\yϪq&NڰhJZԔigΙ;f,EHʚFQhj5ZIq=5ZEMVS 5"ʐZK-%dʄ2RS(SʌFS) jI-,YTʇOiS7%R(9H xJJ 87ğ"GKKR$wzuBJK}ZB^tlbRPv33撸+ z{.3W3KR]Ҁfก :}u\ʾ"e-rmyq5/:(VQ§\Nh)xG&vUyŽ` Q "&by,Ybp׌E4^h WP /o{5E[8$f>Xz q,Tl64!v'X;͆RW*\Y5̹?Od],-BUJIIƻ uvbgk+B 11d5], -]x^9)%dw !ϟk=%.ʊ[,~vdM/qJO7և^bC|C [99mNv])_ׂ\"dao鹍F;cAqBYt0ZR ER8(Dxxz0Ǝ{*7joyk6w ~£FIy0+ , VEC̱P0,:\y $È>fֈÛ|6avikhGWѵ|N[Ǫ2XZ#/,|O󱊇2Bӹl=˱ߓĽ]b Sѝb}1<3AycHfoZ(Zau·Փ(UL0A bSuőٱ0"Ƴ *-JIr4+nk 2R~{_''FjoWD 塬¸c'/߉ν*w/w󯲓k /$^|qGk!Sw&i.$T1BiHY,1w!1?fBs G:(h%cKR[o/`ĺP7190h`rVzDWsBȍ[V{\fXuCx\.VH~WƌLlQ p"4,:|$&(63道n\FVJʟIy'sf7a.u<ʌPf3vdf cvAw~:;u8AR+tՠ'ϫta #XD 'z1P$ OXYǦvP,gy8'.F_&jt ʞ@Q WO5'ޗcdܪ|*X5:L=6I+#7 :;Tkqi-uN✴PܫZ :]WvݒL¶Dg]Y)$Z,lJ6dNb{d: k$ TXo&x FކAߡx&.,%Xxl, |%E18I|x|⮖ovXboXyNR`T^@ |lL= ,!?Fߛ5yCoϿ<ޜՎn!lzŪ)–r*Eq5K~ @W H%9N2fZ:ɢ}f5t;U9كv pګ6nw;55,O{sOxgJ% }(ltiei}ߩr*dlG:@ .|:t:Pk7CaiH k}-QQq,[q M6 %(|mJUǐpN\8KJrKUǢݐVkζm>U\ޔ.i&bppD4wt R3PhҿMm dp$*qfeQ&f"w~ lv\V\z*γ7w.A໢D+-bHݷM%ykuy0Z30uXM߮ BfXK HIռfǎ.8v ncDf` G+ACLOZ.:ύ,lk[#oL /W*e#*jrCU Kb" DΝɌuΊ䕄hFL5f7:YK֌_Rlϊf!=<n")H,-rQPUt\C ES˾[WN- e >a瞋 $duVI)4LjeB"L䥓1!ȏVDTk$O' zb9XwcKZ\au3 C=N x10Mnlϧ AQJ s҂IJ蛄'nK8nrȫ9!4[ ՗a>= JQhoGuL؊fXD)6W誔J5EBG-j4r( S"YWRӛ5l_6PX+\"'j&_vM=@~Ԓ-G7/gw"Tlkφ*5.(?L' *%4)^e`p ug`j:qȅȹܿK<+sR$!xIuI l}(-V;N,|Ќ!p%~ G$#80 &`d#Ax܇j0-= p~OFbaeY1!ofm&圩8 `,,/< R)σkVyi)[9$!"5RƈpB #8m.W%u$#)]%*GKA }x{ңGK|zfG5KGMl=:a` $U: p+Oݝ}@aMBQ=r"'rRNR '~Bz>GHaN,0~ #Zόk5&O^ւCĞFtR-ɕ@)O1IJP7“,"3hnr¥!ҧpFV9RU'[?܉ gd=C~'V-@#q@&:aKnM{xVgrP޾<&oBKӈqTUZZXXZ:K`|X%nB\.$5' ?*H%]t埕]IKұKwޫ=+2>2y;9o'A;㖵6H珇RA6 ' |<s C h/qaBP*,ͮKb> stream x]n@w?tТht 4Dgۗ(y]~{3/׷>Z_НiNuǧoV}xǟ]>=^oS}ۆR-y.N+Ώ7OO_Զxž{ J; v;"VڹHrщj[Zdm[ t N0endstream endobj 152 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4391 >> stream xuW XWמ23*K& " XDM@UQ[(ՊRJhRp *V+gߝׯ}Odfd==eЏD',[oZᇉ [FvX%9ql~;sE*鄲1m=agh3bS?)?$N_'Jཛྷ:ϫBNE#*rSUڏHr*ģuvx(I3 ^+'][,>E[JؙLņèr羯)u hho#-r]X]NeBlҧ#=, LZR$`O:.l`~I̲٥}!ݢw| сZ9'AL Q@C$P'\$5SH✌Љ !G)3;";gs18ẮЌ]?c0C~ejv(YEu&F2F[MF:>c"r}ӹ5_GvcOŸg c$ >( -9v&ƣE٭܎뷟 Vum REY=HMbI>mh-YWQ3^ͺ>5*ةn18ȣN9caV$: {ՆOE_YuE?˦3sK>F(4¯6c';mZ D9}.A,a6&3\s|R×omKiVv8?\Tȣ9+ vE#8`Cm1;tH( zHPCoX/@>UD?1To:5bݞ3&1{CBaw2 ?HRT]b8 |Q`򈨀,;,lR[9G 60xU7胨(q@սzI"حn~+۪ֆ1XgI ޼!~CY75K!#iJ;}[yͥ!^t1'cN.M@>+3EoêmW޿C m<#db"l3iO!v?HGkn)%.HGOt^8>ܻMr"ÃKWnN&fNڕx~b\ SazLMזصOq́ˈUE KD>"V ض9<] ߷YKiK 2vFN%8vxwI:I3n*!+8IL!MB+>?zniD̨?|+Y)v9 R0ʛ%ƍ{ڰ9oꔀ7;?̷_ Bx\l ؗ)y>߾}J..("?w0?'~x@ս vUQkž,IM]12,.bO9%,"=kVę{gy;ɓC&^qE>=#~VC~'&Vnx1kzhU=u6#U\bj_'+"4v %fh@a齱!<a i˴ XG4\C L)?;3endstream endobj 153 0 obj << /Filter /FlateDecode /Length 410 >> stream x]N@D Adh.pZ#p,=U~a/vK;˸6K?<\_c>:]SVwi-c}_nZSו4.㯟Rwxjgs:u> stream xWkTǶm106ƙL D +003 1 b*AA&h|?=s[ ܻ]]]U{W-,(H4e"c].Qqzy^8gKV4D9l*FB)T&jrȾ*)DFiY NLq,GJ9P]EҿMQ_(rQ}5~:}ĜudyHJjZ"|2-9s=ߛ7ߋBPj&r¨pj5AERTCEST G-w*ZN͡'ʠ&SK(JBMXʖJQJGYEh肙Y6_i׼E58];ǽ1.mܯL Ɵx~BքL'ZNtRjkyeMVVu U ש;X$L-$ &@ d$/I73Be`g{|%K1}lnS!oki- }yk/a2 .K1~xubFGw;f*BekĨ7ԟ7.̾磅 K2'X֋.$b1n'@`܈;(oO2BɁceKU2?؝K*Hپ_܇mkk0'?S=IfWo;կLS͑UmStanV}wJ۩)x0RrF5*Q}[TrpvE[dVT_ǯ | ĤJ$20(m_ݥui/yEoF}JvȮ@>=y޷N \c06 77. B%Kd70pr{N^zvW PiY0eؕ+9HQX'B,e2axTOp#>8.S%6fk5ڇJv_dp}UЮMoZZƶ Lk>G22 dٛ-X.q@[wmfmO XmណΕtw=;Jv32ݡco[!Z@Ɠ"(% ^o9꫏<Aڈe}P%B`ŘzoUvĐ]G OO始}w$Wꟿ n걨?:9YS_f*{B~?;WɏexP_ue8 WGdP(_#Kfȕf]骽/'/(Cd/IoTL(hH$?}p+ } S`"GZ~y4v)aQ'`?rF!o?5 1G/}O&FiV#Xp:'%]ew<f IN [ )$C9lp@e9 ̡˚7UnD{2UV2Uclj9HxKNMsz[UJ]&i԰6w( *e~PP"#bpgL YG+l,b[[SB"⏮?0"l[+toNuXTo'vc_vGxKh$= it3XƮ1;<4bk4KlۤWw>N%|pn>yaڱF}Z~qAfRc>~wN/-̓1~X?z<"ayb>@A(NHީy$ v|n#ybVW,;Qkii#YQ%vsQ4 {?ӹbQg|87lS؍N[l7AÅKGU h^;XH7v;~vĹ*;7H8޶XB\^i?,Ac,zDZJ"p|SYTQܰhZ Ko9[,W\)ƯE(Ɲ`˃W>vkQ3#xx|exiJam"X0[M;4C?LF߃&v؋/xXC@xox0,2ExL)yX&HG \h[9dȴ]%%2 ۳mbf= ˡg^8`,p8i/1ࠂhp@/`1F4rnF؊/IOv4JO_jyn2σΈ3ȣ5WJwW8tA xikBYWݖX. WBzE}I(m ̠~&̻~ !8Ƒ' Tɏ|>oXGYtaU<;IzTivaC#yo{A%ѕG7}+,[8}xkE8ngxt_ݗ#:H=Iz!߀[Q'q+%'$YV>}ߙ/ec7W"fKoہvAN*5uŢ2`qC糖Eu 4'{--)`fendstream endobj 155 0 obj << /Filter /FlateDecode /Length 168 >> stream x]; D{N .Ƣq$bQdA})RJΠb.=zxb֑-GqvW'u`b9~xtS}Z 5hiA6HkC2f'YUIgVUeGT[HWJg/WYendstream endobj 156 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 249 >> stream xcd`ab`ddM,pI-Lu JM/I, 154kf!CwOXyyXzx8&}"O'wWfFFCHdM#ҢRҼ"TԼT=  PB  PEWϜӎ3~tD:}U ߫~_w@ٯr!?'χ }N^endstream endobj 157 0 obj << /Filter /FlateDecode /Length 177 >> stream x]O; 97%QKVU xD DHҡ-- D#zDu:ר8YGj>UV 7ޟ4?滜=f)q RanB7Ftm쟧VTd&܉ ̄٧ sq;tŸD<Qƈ.5ggf/kYTendstream endobj 158 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 575 >> stream xcd`ab`ddwH,*I-r uI f!CwOƬ<<,%={3#ctas~AeQfzFBbBbBi^AiRNfqFjBy~QBRSfIqIQjbg^cNX_BQjqjQYjs~^ZfJj^IfbBԅ a2000$1020=Pp1vp}]F\΢鯙݄}M΅>}n]bTdiR8vbX/9^[*|{ZWN_:iQ7ǝ} yz'(hw2?Rv^bʍI;ۉ'M*>n^+m+Vl:[o:U_}W=}b|?|:}Ưž}W`^X4XZ?+٫X7z6R't^Jgvɋ+6o^սom@ѝ;P9KVg΋u93[/$;XKD:y?f~w>n+)Gendstream endobj 159 0 obj << /Filter /FlateDecode /Length 546 >> stream x]=n@{70 $ȥAEn) ww\nv[7_ik׏mlݹ^MvOoú?}6[<x:m׶{8uז鿿yz0U80 8V8Uت 1UbV"Br*#c*hUh,,, **2t5u6v6t5u6v6t5u6v6*DgB Ƭ*dĜL2N{MIߨoP7.}ErTWtB:]NHt}Pu #0p 0F#bBAB#ShVYBTAQ*H[htQh!R`I')SLM29ɄM(iI%6)Q&e4JؤF Q(a2J%lRFIM(iX5\M8ɍK M;y|mnضt\8)pYڿe|Cbendstream endobj 160 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5311 >> stream xX TS׺>1(HOv z,G !xnw rv\@y!$҄=29f͝1^6yp"6ZMu4zẙX|Ubw|ڄĠu^!{B7m9uڻgެs͝EN!w/b!1&.zb1HDL!|_bB[e bNˉ,ƒM$Vs>I, {b81I">&ф?H&7aG67miL~xr@N%˅vB,Lu ]4aS%ػا?0KGԎ6r8ls83:rюwE"ɘOHatbl 㖍 YGr5MRP>FG$&Dø0 N#@:= pJ RG6v9e Lz T7ҁ,nh c t985xq$W7 Jf'T?m;{`FtI[$8iwu'KN7ٝp))jם==% LȜxIDoH@ƺ]/占MTZ5$A%ŲL õZAC Jd.k ~H!gihz(oAqֈ }hjI ec4p I~[.F_Ȇ rR8}?xaυ: `OvЁYGrssϯ߸9mCCӀQB@JC;Tu RE‰3&Eg\l,3g*\N#<}g)F)?IAZF$0j4M*f/߿_ 9T1 :@m% Ya)h gD/`JRrG7XGoh%ކNP禘(~p\'.wbT(#HrNTT'[#%:KY=s hŋ=_X_5a`ۏ;CVڐ`[7C#G4HyuıhH{C4i8,.ʔlXǴ E͋!;zdE&Xćŵ`BҋU[]'d.ثdZfm}pζ.0?ʰs_ ko`DБ=193Jw*TC[Yar4h+r6 }cb,#%\ $_%-R2^%5d~ RQ `ҫ2 %w`g @VZt$\T%LD;fua9#iS2hU:In+3+z՝S~K YRf+%Ɍ2np4B?#'h.Hm4?_.(#|w0 ~| MI Mֱ0&9#-i 4_)CJrЯ_d\i7'pt4Bz,I [[X#lrƵ軇;sZǑUbbY6tj#$䈰wj`Y'48);cchuj . hYzMXԂj pj,Oe\*&m&TkOK%3Ϋ[f= S>5$?3Ғ[a#,Mt?/SO /~ҕ`%)̕{e%;5 D'3F 8?Wn[23p=}28&5 ӔUXXTJzǢ;X/^>{2D{v =/Aݠ:8U_ $(8򠋠Zaٕ3W<$(@.goYGد!-ѱo>ϒ83$=AQ'ǶXHq eK\xfJ K-z#}=7w0T^Dމ&}IdI&]&+ds4`$\JoV!^{5W_WJ)iIE͘:mN l2Jɫt)H$!^غ܍7p*4$P+#xB V˓IW&^W\p8D *NSe5$C梑G?ȱSf#/[k0B))-wȀA0:\ a* g_2PT1*J9sDC碴N+k}^}fEhԣi8]~ΖТv>^僇k.}JǗ`%>irt6Ȋ0- }Gmcm:ra: r4JA7V莳NhU8,ㄯ/v փ)xG!F#O 8?u.4* +ro8=cj[d(@î&<㤨uUK'\[4+R|b| I=r\W͢g5اp;p^  jaw|!P.Y=f֢#lS#;¡Vˉ"o]ֵ0Yj@U6 4"n$Oܟ"{]N`GAwءWO`1_Ϗ{l6'|UgB߫瞘qQ+۹?*TjR!*)-Dc@I}EK?a-bI95H$ RM_ A6(oTZx6USb[ST/FWKcjģ}vڲeWwoowٳݻ|׈o͢ t|cPڌ/aKWܮ~΀Bl$@h 2#&stV"$ZYSSmm3so1N$"b:#/s0.ǭ<9{G#sPX:3&Ɏ,ז ӱf*W%G3>Y1Xxi)HalIXpzRW[o޵qi@`~ޔy\[-VjDmuM~qKs*ܐzVƯG>|.ægQuW}-64p7]fSH5n\mYt6,vs٦b1F?p4YƸ4vvmh4[ֱ6v(;gUpJ>ݡۢ> j!v9H, ֒ 3qNj_c:<+.Z܀bHseN-@x$MqsvDi&;vz{Q4g*@„׀,zd}݅*ɠD*_1Okl3k\<}W=vKؚdI;0ƭtޟT*7 3!T2 ?[Aэo9N}g!E-¾*W\,S2x^gph(UKu1<^ eR|JNJEz_6Rp!/Ma qU] b5=|>ب5h'zl]Ue㾈޷7ޛ6K'>R@,GCA?;@ Kσi.)Xă~p 7Qڑ yBDՁ@N)K*^} Los,E۲k55r DW莈iDxH^fm 7[_]҄XU|eʊB _z ̓<ƺIpCh<^^q ^p5F<Џ>à ?orr15LKm[%:5HyBP z6og@y\-8=Ud) 1+5[`~ v"Jj#,1gW"Oʿa 39Gb ב9\iD*y?tWZ;ӗC%zw].;\w(:esT_ p59VGXyay%A^^Ė5;((Eb(Q̀QSށ|-YSUZkjj|iPCN ~w 5';?ݚ蘿*_%-X?o#AJ,e_{4Z-+dH0=3ndУeX6ٺr;jY92]~/4 Aendstream endobj 161 0 obj << /Filter /FlateDecode /Length 405 >> stream x]N0DA.ޥR \8F{fXz=Oy\^yXs-=inv凴S4~yZj uS>^P?Եks|y'6K]Y:6K[>K='<K8d 8k8f lp59 &glt6 &Mؘ9qsI&hՆ e #ZFLDj٤EW&-t6xE9B:C:^zÉ:@ ef ef ef ef ef j2d `($VLq8ږuEC!Ns,照ZL{endstream endobj 162 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3376 >> stream xV TSW>89 ӀzN{-iGQV+Vkt`;tهZw ZG>;B...ooެQkN})hUBa0OP0xI۩}g`p7!qq&ِK|,4__*ߤJԤk u|K[4xyF-SbXΘ];Boؾu׶K ^TkSi:E!*:&6.^/Y,8WpJl#!v;]nb:.%7Mfb I"~OxOkDMWb.<1 D&p# .[]θ,In}r1Y)cT*?{il>kk~.{` 3[h8uy2lR9դ=(Xe^A5Qz-Colk#c+}h0u1\Fm|_׳q0ѓ)$ի.:8IX6)Z =b(テ4Rr{ ۯ~yKm@*'0&'' ?z-L#) ˫VN,NeX EDT.)/Fv$ߑPqZS"9]">K=eNJ0M+4P$d'$';ќ6vj#=4(u`p, F6q-QT5R9GA\qc7׋mðiˀ/d2gf+kM \{;Npr*$j:aFa8puELGS:2^:1r:f[1v`@+_]9 mF jcY ]_lhﱼ3ɔme Z[fmZwqO*G-'J4h=}BEWd+y؎ޑ;oCN9uX&D$ED?(6+f(A } _fE 󿃂R. =?bu%@{BB9_d҅cTz[QNS:Ar.rqt|Nœ? 9%<0']VotD} KSr|TSVoonao/ Cky/}p?H(MGg Nwf0J!#/ . D2.C|c- ESz4( ޽kBuy⫋/}2o~q>U>DWǤkN )xli#P]䇼-D O] PYwQp6z53&@i~[@vw_b$uLk4Dp+XAF֋B&B NWt0ZM7mvk=F4vFR<3(i#'ԏ \p D-w"Fa댚5K!FȺRZSRT-)--ӃBP`*!84khh|b}gGDŽ~YB@X X1%*ɹݔ sU qw* N mm|_OfJ[G2w0H#qBHn\|6/cz߭ޑ#ӻw=dtn6MHjx2JCp _eCa) q侲R1a9E9ź| =Bw1T,ʹTߣ\A&^C,AXGq~|\͓;ʆQ=ڎw΁)_U7eMwYQ{(/#AW \ O7V=@Ԋ#6T;6azJM .:@x0 )]ʟk­Hke'n3s,^*d7|(?IQR6sJ#(RϪK(@{xcOP/a%'(Fwuo}<P8Bq> $Q]KݟE" dN8+,_]:7M]8]^>+ +X]^YRAyU(UBQyp%dfT\XƸ2~UZR''+=QQMr1F2Ey@OmBx a$U,9GK͑ߖj՛)ApS~V.HYtu 4s+yp^C@e+q[ihS6S5=wQǵ{ AQa+c:t2aϭ[.!mXqPWO qMTbq-Rfdc%+ c{L!/!-$WgG2N!#ϝjlnhL,!"0=肏U4ajޤ9~"^-,Ŭ}MfFDE1ߓ.2j_uåC hnmN #dVcO5&ͭ1Ў cvjl76Tc- txD-uW[Ѭ[ClFY [H|Qڛ;SbagUpUuy5xxyOECa/<_WU|S?endstream endobj 163 0 obj << /Filter /FlateDecode /Length 242 >> stream x]=n0 FwB7d%\%C > stream xETmPTUeg5-QTfPK Ӧ;e,.D|@qZE]P] dX@Ҩ$J{Tk93g;9>!$MYMlLXgјV5&UFa0@\(+Ŧ͑9 CD͡ /jC\"$S̹.Ư^krҍzk->ߨYmAÿhF/{V"X˛BF$lg&^c'sŚf8}$A$bx"H"6-VbEl' DA%7dJYn`TҞ7[!D6PQ*Z[)DC`58 --_ ӊix8UXX)g& Y>8>ҁ.lYj͖0U#0^VݽŒ͇ b.ꬿ5}GhפCo9x!;Τ3di wl࿨JR\b|{v`wD=wf܍hx)9j[1r<ɡi:}\SgVޔη{}(Q =eDzi&! kk9\^rZ]Y>P~CTw^4ւΔdnj?ir\CJ*[#?Q`~73l[NWܠ|;aI!-FأrXQ$ͦuwqZI=vCR\%꫆uiO40)s'G}RbJ/FtJ{X%U&ޖQsz$`P}2>Y_Wiwrєs҉莓뻩zאS^^נ܂#̬bNx0aJ"?+7cv%j:뇙FJ]?ft:Dz <.Omn!aڇH$MĄ?8!%?On}9qŁZt!xULKp^z;~}QHQ}swJT*%l׿́.Uj3墖e"B!! Ya`x!gh*rWTYL6uGKfwNj!/܎G8_PyX5k_Lu[j `@!!eHw Xxw'ha\~U%eutbHow^ E]p?B2L+KTaI\<gcrSpۨkOKtv)mCMmԻhvG#y ]Gh>1T^7U|+`Eaqx\SQ9%_'P_%w,șWYK:}s {[XLIF,5{l C%>h(%ہ!#,Yk)ļZ9>P]  endstream endobj 165 0 obj << /Filter /FlateDecode /Length 442 >> stream x]N0DA-R \8HP=3Sa,Mۍww|iwO۹K;˸ՏVj{ov,nk-.{~E<֏u(u.)7uӵ4\u8aY=d v@[[hk`+%XD9d'l%؞b!K= 7o;FEFF"`TȐ R%J#1FY̆ˆƾ:S6e 6Z`M!! 0mL[0nNY=biaiiXMF^BLK1.Łw;\N@ s:p.@'t8t:\N@Ǫ]ɏk̗muyUK{ayeU 5-endstream endobj 166 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4919 >> stream xXyXSg?GE+`砭utUԊb(NXBx[^-U\hۙNiv:y瞀Ls)yߝqGXXU8!eN`3ߣpDY*'L$Ə-l?DûC_-LsW)doЯw2,߄0W։wBnJѝOri1~B7A(WI'@NF`NJ?P~Dq}g4puSFTC1Y(mn8OOkhh#Fx ] tB3 Ͳ*}N_lbSxQ"nD-,Og2<%=|YV垥葚@%Cx M\)' Ҫ)lfRSi$tnO99Dm0m~wy俢@iSc"o3t_5-KE2 rАTܿ0^8aX\Q2ڃ4m zn[X,ޓ̥K'1F`ݸ4/C'$Z cΦ#2j:V BBb&RҔ ߨhouZ}tq0^onVZ!7pV?N{m>[^] =϶y597Q U *Ker2ҧ.WfZt.`;{B[-#$ O2_MeD@jZv#"xM&K"RJ+T3L,K0LܵڢlI9p;h/DF< [N!Rqr3-ouҬػLNj=44fR-鸺 ._.*- 9 `NJ0~m}Ow 4jjT ^x\ |(:w fIT\"ߛp#C24@";hQpRX4wfgKrEh+\'w T "PP8`?|w}^)f'&jrje:|]ď~Bƞ/hG3M[)KcB՟2WTjU1|$+. fJ6VMZѶdhg(Ia3>[(uH#SXf|ɝtVIzs#ØQGRBÐc8c=sVy YϤQ ĝ&7?hJZk@ǶC\WZ/g%"rigw)} #8Yyo $dUd8픷]^iH,ДhS%dQ_ Mc&3煉d7/=`rc~7Lv >8vgW@_հX&MBr-%{0vW]tڶV{}SVm_∻0y򱶴Yچ@YJC:ҢjQ{Y';^Rr&jqly`(\%jJ](YYmq7giQS+g3y,ut~ʽZW$HIiEANfEy/|F&aSzwwH_E Ř,hO&KV%%;RsY(5܇>w=,z^كv/ډDQoZ?6TI*u5zz N*U >_GЌ*26²rwY5If8L9ljknWtRPfٿ#xtJZZ͗͞49ґQ]@i!Eܤ2ЊP]YXsj<y7[s [Ⲝҗurtcp(rђR/ƻMx+0Y81xpANօ#/A%+,z}35xޅ*+);MC8GgB!Bf=;JbbB;*fߞ\hwZ= Ꚛ*9÷{\#̭ʫS<+Z5/rΡݎ#v(XW[%M6#Xhm Q(9+`kBDpA B:Io_'`{ Ԛr Iumi0  1EooZ]ibX8Iȝ;OBZ{[B ^u(|gaB }]bE93x1^'CϠ|Exx&qc}bt#Va& . (lַ dRM, ˫bPJ>b;M=~ХqdַOXk崑u$Uʅ&rַ* ٦#ێ6мQ@{&W r>yk#WMN:8tG,[&Ufqw]=T]O B7UGX7*ZKOTPQ·71 LkW}Zy[R-Wj< @ݛ^\:+/܂pӃwd>禭|`6F4.ܫl?>X} z+8z:\ dW!:r^!3#:?ˆ *C.J ʦ7^I@}bQ:,!mZ_|;ܛvPm)wnuf Z43fR3 ¦n {`ُ&6 SV|endstream endobj 167 0 obj << /Filter /FlateDecode /Length 177 >> stream x]= wN 5RĒ.ZUm//8IgYl^e)dj7 & T> stream xU=KP5IKT[&)[: !Ԇ▭bfuȏ"n',ނPϡD!rǚ-q8iͶwgG4UwҲb/gϻ"/)=ڃ}"Pjtn+v]z,cZر31> stream x]1n0 EwB7& \%C^O$2FY|74<=6/l  -:5!l`W%T t6Q]`Hlb`-(l .9|ɜI dΤ#2+R+>H@$$$Y=I_Rw\ul19nR#:endstream endobj 170 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2258 >> stream xeUiPTW}u?eNGߨ{h\D#h4AFv7^^Anl,lҲ4ȢD1.qDA4N\RqLw g;0+8@ʙ s|GyeLXqpZ;&6Q%҈6nݺA*EZe6L.UGI"D 1*(,QKQkTPUN\.zS$j*^N;FyT!Qjue)cWU5p8rW0/Lļ1]Kl/ۄ><0O=V ;}o{8R>;u'?ryyQ" C1̢%& b*P&611?WZ+t)ZR<2Y:B%7vFƐ h]TPS$lO6z_pbrһ x4,@ x*W7x}s:G6$\tJjG*v'7{B'UjK30B֫[{}VG zD;0uڛ~BpOLWf ->ȽXuN&-]sbʐek3NSKpǜfϑ~D q*f3г>A3G'$[F=$(!̛.J|>I0ϵuT5jm1.Byф`bU 츚q=vT/xf4<@v7Xi nB\ά;_{X\4mk>߻;BȬ !rUi1Ҕd@ ~ƓѰC1Nv67vgi'XŒm=AGd7V 1p*FMM7h/2>T߰ͬ=1Ȅ^<1>??> stream x]O10 . 2D! }I$.|D/J`H_#49U a:8 d >LY5zCKHQDUkhgtJmyp8I.~r 6/3XS9endstream endobj 172 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 317 >> stream xcd`ab`dd74,ILf!CGO&nnW }O=J1<-9(3=DXWHZ*$U*8)x%&ggg*$(x)34R3sBR#B]܃C5旤g200030v1012|_cew3qEt"깥rmlٝ%-Y%:;8j&,YٿcD9f{orߔ)| ~xNn;n9.|z@g <<{'}=s&20> wendstream endobj 173 0 obj << /Filter /FlateDecode /Length 235 >> stream x]n0 Dw}rW `pI -?T!8CG:xȓ;}9~bS.S|o/~ck;SÕuԯCqVCʅ)2,8aC*f|I%p+I{RL* =.!rD /A[nH W=/xoˢ}j_RS.WyLYf:vendstream endobj 174 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1572 >> stream xeTl1Y{gڎ: i[t! ҦItmv8vދ%NHRDI2 P(A-!1UT1 {C8hv|}y{(S~9O[g~9szcMYlg 3 =Id$'Ψ˩h!.)Mo/`,ՙkVuRf}&G66+5ں2MN fEcܠ+4;4yYyn)ؚ"c^OO w-VMϭ-6*ʧ Bj=&ʦP9S2*2P_ү76& +ԊDeIƤkx2(DS?B5ilsFYɳ%?c/+Q!Qz}zAdGv.\nW {Gǔ;d7r7'G)Tȧ4ogn)Ұ,k$._Đd!WbQqQ1\mbpo?wj`` K^ȺwooL x?GBȧH\@GM VڠVo_%&w6θϖ~ƫ"LLn0\n=zeq۫K ,=[<6~4ŅGRݏ1}u7f6ь}Nm{r>oo_\? '#j#B,7v5\"ȫ__H|pO!̥HӤ4 )[Sb4I鄴B~otؠӒ5@麋ƫ (7X5Tu ހW>4]o2>d[G!$vANy4}5.YGI C]eeygg}7ool@N7O;E3Wbyq_|\pqN]7.G:Z(ቋQ~φ{l83 `q-y Ð~yIPmm* xAnM25/E% l|h0=My `|7/!iVu8ˎN3̩BuX*c>.DA|G%?EQv;Zendstream endobj 175 0 obj << /Filter /FlateDecode /Length 390 >> stream x]1n@s?J؀088pP˥AI-@I8e۹k;˸ڞ4C;E:ǰ6_Z[|$bjɽ&Wo~ 83J22J2r '37p_ӝw612212212 0-Qb*2=| k5ș9Qj(JB+I '6.#e4rظFa2r9Rp*8Rp*8Re7{!r۶\ZSnԟM_+j4endstream endobj 176 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3231 >> stream xUViXW )Fo7g"5F,*"," @ӬrZd$ #Ҋ dGAa\2JS=<=$O&Os>[>Ep8"=ǷEZFxodruZq{DC].?ñ :" 0p۶snhwmGOx`#^DH}` ] 3PA=(>rXniygo>~v' 7G b=aCl l ;ž8Ip M!L"N- aJ|B!s‚$vGψaM|N"qm˜yřײb"m-ar=LLԨ::_]9v+VHF7L76ꩶ9tf9l aPڨ &.`' CHX? ) Rr~_[klKUs$y#PftZe̸t zXbY(@|=>LVYjhMա!F HhA}& z[bsz܃9$xoGZm|#EA>AEL8ma>=>vi]4N@'mS·M=+N:a?3jl{TrJc}2P>_N)jm}QF̰?pI\U! /^[Z6۲w gpD~խd nkkb DŽ{0 f3OQˉ-P\A:( 5y(yN=ƣ_4xrG?ik#![x>1!ARoL@+qNM\!w wECJŷ79vU$y1ŕiiW SD 4~bFgQ5aYAQBa*#f^W EϾ%j{k^G1M;*ՁM@}BCC[`bgNa0F*5֔T|y=g;҃!Ώ/T#@QAhiJ[c%*39+ $ \_sJeAiq²leYh`㬫3˞_ l>8RF . po"˿T z`ΥkNOz1}ar9S3[(3*ӵe؂8K "X_@;5*fJ[c鱙 ^Ty*B#zlU3۳cQyisBKjuCoN쮢]rۧ8sp%ädt@&s@,[4 f>B]6-|N畔TW,mNoz1)^IH?3%\#s}|3Ex:M']ǫ>va6BxIЌIv57**D5 W~("(X.B9aB{$ C(Rt{4^K'c }9W1U>]_' * []Cc46ytbL06)!)7ə ,2vĮ"/s'ȘQ>b6}OȀYsҳ.f5ZR#gT 'SK!^X)Md&dK+R2+hdUztdǘ 2RlhZtݫl>fn2zř[`\WP(륍'=cez҄Omv0S0'߳3nU5=*1ˑb þgqR q:H8]k }>E~hŐ%57D ť%R X/f.u謅K5Q-#r_;"ۦ8ϗd߾| >ό,N ݎbI7WO6tH '!gg轧䔊*ƙד3z 9+-S*К9,뷓*)TVA%#$?Q(iK;B K$8k8ř.Wb5%D B+ X9Z lgþ0=Z98w*olrud%d ]=i%Tޮ믃71>Jbn9":gmەkwE-q4\߸j+ pNDt-ǴT$xet%>Jjd vUl[)ab`*{3u1R{7A,);$ujBQj%K9U_[:۪ +hֺoe{}(Dis`yz@mZeTq|<"C~ԭ9 Ǻȁ%8FԯYi܀x@_g, nqV9ELnbP ڣ:]jq,6cg)p;+YDUEzDtU,?R)Q4}yܵwZ&@/Ml݊сn>obuC46^km.{?T}28AJVZy\B3aUk֜Q*7 V-5&_+a򸬺>Y<.?)vhmwSWRVBFh?eV6=`]H F?`SvEvav(W#k$( poeTq-)T4Γji>F]޾`;;_aICL9X o!P 7qI7g1:YFM`\u"GT ewwp%_%-2X84endstream endobj 177 0 obj << /Filter /FlateDecode /Length 346 >> stream x]n@D{?0Ǟ-Y8DQQ}fvsrkz_e?ݒ/mI> stream x}V TSg>!(S9)*vjZu:**^jQyW ~ BA!DBԈ"vPQkU:hv\Z#;w﬙B;$+kソooo !#$ f@edrlHmM)f 8UhygQv~֔I)~*!HEh#,\(^^ SiRhE:\"@"nF+^רʨ&BܮزyMfo[6nݢx5$]OB1ظEo%KGFb.Lob5xXK#!Ÿ S '™WFL'\'BBȈ WDm7MzB6UiCR2˄,DxI`/;ڋ@^"iRXP4(Ģt_4LN@11ftyЌ,x暞؃n!!4yw B-IòC5,=t2Ud VTϝz:Ao0 'q'һ|wUϱ7+_9{+/)^[Vdoѯ yɴZ֖YN8w 2+n+[A}L Arko+GT{w䡚Fg a S1e{9rMou@:F5,?<.WYU7nRqN^6! %L^2eqT2n-/Q#J89]4rs{>3$BwG} $/iApe,bj fr67E+gj6Tǵ j&dD.FdB [ɺ61_U޹ :Tf)K_Q J}[xsdsck1j!Tx["ѹn9Z5v^|A:JѵiQe37vvfbB ,ϦˍDԲ5׿>@*-e(ߠ6 xn ^#2Hbg b"llPFoB*EJ/4GO~vLmbz5 >2/Z?KR Z>Xݗg+f$f,j9dZ4.e|QF!3Na3=` n6(83|ĄǸ'^()"/@i(\}5YBTr|F)p'6oeATQ_T-x5Afo oahc^y57G Qč5H3y /G +8%@8Ďb^obq/qKFHB6V-JoLQl48x}3&R&HX|n(Crx*+fw/ .-*A)TN^]˾X!ck߯x C;pi7"R,֒},{?@P0q] ;tTED ^*pcvGٹE(eD.]@޹{hΡ3`яt)n`nstrg7KUsǬxhl=TRQRGԍ3̒XN)Un*I/C}%זlsg/ETr*d0TrfuBRzdz<} R?,b~"fcDTT)XJd0qXEH6ǒ O' m"&-<+C*D Z€1&om85W>ؐd67/_ZgdK,ct^ٴb4ǪuB//鶞3,6 vTQP푧"mg'j6PAbsT.RvwԳ濞L{b9Pcl$m BraНu} j=IKmFԖ{& ë'߱pˋ-^AgΟۗ?1f2\y?p޽-*z=>+O)ȫ|`e]'Z؉ V1T;:v˫F}`8 gendstream endobj 179 0 obj << /Type /XRef /Length 173 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 180 /ID [] >> stream xcb&F~0 $8J:? (^I#3(N dzbGDgH OD2H`v-ś@?f&/<&W ̾6DeA$^`v_ŧ& ,rD"$ endstream endobj startxref 99591 %%EOF Rcpp/vignettes/pdf/Rcpp-introduction.pdf0000644000176200001440000110103715030755444020067 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 3276 /Filter /FlateDecode /N 83 /First 677 >> stream x[[s~ط&rLbi&vJ$m0 K)݅(ᄢ@_&|~٥bi&e`ieFwy&,vt,2qQ &-ɔp8QLiaqGg SցeGS90|I+z/2^ LI|^VHp0c3&Zf ՂYC%Oiͬỏ9egLG<Ed^Y[0rncAƳ<@!%tbQF0YGânYsK ԂSKʰx)<>RD )%]!jzkRzM(+ (+9YY_T! (k02Se `(l@d, d<([_͞C`gl^·]rq3ͪϪi짾.0ָXpv/q+ڣjRD$ y?Bu|yR=ao]vկpmM`3rϺvנݳ'˶y׬ 9߼|]χDy3,kWaY  >:J K*c:r绰rLF V@C{XUY,GS#8WC9zS*T UBOzӅ.tv5+I"zT߶vGE>:<:YݷnK1ˮH̞=z dܖ{.R(B(2("((( ̹3s[_7L~1*VC Sp% K_ԋ7eSx]|| enD9 ?8"0<:JKERsH6>iVon0vZVWA},ڦbsw&(n5{ wQ'tFP)j\/@w֍@ULprOQV_|d Vgu6p d&TLb2Ld*&S1Tlb3Pf*6ST\JT\2Le*.SqTJT|3Lg*>S JTB2` 6ib,PX=4_} %ڗ`iKc-q$w0~i%LWղ{[FaX5 P%k_v|^pvUWWbYQ -Omɫ;I e|f (މ\Y7˺;yvu'ׇp8rLE՝{<֞GRzG8V Pg;!+ ?.8k9z8;PR} s[`:Q d .Qs6*H mQ4TVuٿmWm89/6˪3ff?7Ul/)g`['ZqZ۝B Q(yI N#HU@9PB%'i) 4OV;y4\Rl^p0pvx , #N'$,Vw?@pvZr7s.MѠ-2-"qqbW F?$ix &kZHijܷ/=6ûlhwvFSpW$ 2EW㙤oh$˙ONF ,%N@܏i 432P ;4 ;4;* s[ذ6m4U!DpFpI;Axl; \Ca6bG {)m!Gm?8/.pT-B U'ք 6$,,Pe@P1Dk`ب-2(VnR+`qmCPg@# +Ħ3ڥ@sA(uTIJ-:ԧ-p0 HDLiA"d}YԯM"0E+ZM6JR> ~,aZYa?ğ`y< wv=ٺP{УWyP_#. wBI2'bCkZlS+QPXN' Pcس)=L(LFQՁ;LOs>cY! ;txlh .hݎfh=BPٳ>Ħ ~U|NLp4{fav$jWf{07" `{@Z24({ Al`i 5uLAUP-_ݖl}fFŠ@OL7BfuwJL0i1s3( %DK@kyh_5 o(muՁPhD^}A3;8RcrH<}KlCrYKЇ4o&@ ~ڀ@?4CW|\o6G"ҏfŭBkOriaQ#D`hӽW˫{sxԈkkdTz(Q%CyWͼkP M%4 ?nFX0eeӯPcDӳu!S_ѾFLMYMLx.p S-ċv>VjNo nZ l))Q_ DZ;Z#޿< 2EjG:t`v{iBj-)6;6F=|ՏN}1hӘW9`EScDm ly579l<*6IkݓaRL]*6hV{'; LV)FSvwܙ= Wtendstream endobj 85 0 obj << /Subtype /XML /Type /Metadata /Length 1658 >> stream GPL Ghostscript 10.05.0 2025-07-01T07:57:07-05:00 2025-07-01T07:57:07-05:00 2025-07-01T07:57:07-05:00 LaTeX with hyperref endstream endobj 86 0 obj << /Type /ObjStm /Length 3434 /Filter /FlateDecode /N 83 /First 754 >> stream x[rF}߯ǤR~ʺJcIؔ\@Q E*$ZKrhۙ>===#g3ʲ2ēdNJ^p4B0- ]Ϥx,Ι^`+z#~(r7LseZZrϴ5T'0 W0#(VB1cPNHTd[fY.it\rf-5YG!$)àˑ4)I@Vh*r9IHϜTU(Y8RyEPy PA'zV'`C 93Ae҂d MbWJI~,-X*:5"ԋ_i`B!ibÐdzqLYDIA4wMu!bNZ!yz ]hH M."4HV$*MmI%Ed*j(- SLBD4'f,?\\ט˟M5-F,iReֳX'OZmieoC3oQ!eٌQZäŇ5-j,лwzVoϊ3 uN#,6V{œw%diit7:(ʑ >A6x,cW?I&@ekOeƚ*J v3edߔml$99 ;co4od[Ńj6͹yda;ށ]~FIW&jng%ww옋ꛋ.9"jׂ}ZJ9&UV\_O-(0+CGF i5ZL4AL~xR*S.)O4*vQ o$S*Y$NAPnLf>iPghzoNU|^{֬|‘3,'_+kQ 'Z+f WVmC۩tXOַj~JӖO{%jZlSmͤ30Ȗ̵mXa%(ʖӪ$imet-=jOl9.en'FgEYuId҂#OW,LaumMZ`)R`ΣvշKŢ}AfUY|xTNYl8⍆ިX-lwϏu4³>l qA_=} _>_1YǍ5x$mM^b"&[*/'L:n`*^7?+SO9i"Z%~5s,2f jk+>=?:YGQ@%{x;ÂIfKLLOI=|To;iVTOe4vRB_l{ hLu찕 3jB: Ǘ" *E>'d1[Ӽ}>"/gW|Qb{{6TҊGYl:+h)E1/t??ݣjՈ1uq.jZ$vf[%8?̦]L/{4v4*R̍BG1IyZȴEiXS:j9;@guԺC꒳SNpEᏯ޽{EW3aR;%Ěz".""4DHAD|j.H"[D-zCCR2$k'X,OeGoDP;Ʒ`3]0e\=PPEdSZeFO#X5C?M&ёtb\ˇ)QR)#g\3Q:SjiD |ia%W6CfM38@~ x9!T&nYp gI*VC- Cy|xP_ *ӕ"VR6ptd8J[,We?Cw=lB㙓 2G'`^4%:eS%6dr Nv(߀:V8%d©Jǔ$mMydlr /`= zdpF[5B<ldzm0nFD r),$l7& ^K5.3ҵ`ɜ>3NỲ2 q!4XZc!%l,l vb!N!&[H=TN5Ckya!HxIL)!^eF\8syƮ.U|5]'SP^xbO2GύNhn8'4Lgg'%p(=+fv;6j#zRyqsC \)e>b@걓IS?7PgL:.o. ){.ΐ  3x++/թLkzkYlV,?fKXhnt2+V eo#˳w5?[/.gޔc&J`ʱ$, ]{( =q&66Ld9>hl㥀)96ܿ֙* 64ҔT_O4Ƚ}0tjPF+?Lax@G[xӶ){֩H˹!b[,2耝2Q<"6 A;A3o(v15:ԑu&nO}tu)ۀ6%á؜ҝlás35oNjlP1SEuL8zË:/L`0ͧ eOHhD'$8\ BB}7WfD'ZoGu]n*AmR7Ϗ sT2t8\-Ƭ>ʛJE!:C5~#0dᛰ{WantU Sg# endstream endobj 170 0 obj << /Type /ObjStm /Length 4593 /Filter /FlateDecode /N 83 /First 801 >> stream x\Ys8~_2ĭS%iwlعLۚȒ[(nc;38A8;(H$2&UEH I.,ZXB)e i@EZ6) &Q*2tdR-P0UMUI(<i%SE(M$t"J>NFN*z"g,Fv:rpuJ%tVS4剣:NxC@ӻ^H% %WTPI8 +00Ԁ+9`$:$9` 0 h*JJJ6ͨ60RN5Fa8p00EQh-%`%0ǔ$[Rj*48V:IX%&C*A "_,zoЌFEl(O$~$v:I*" `E%e =UD7x#"6=XE%"4+5GiGnpKd-h}uWTG?dG_G5UW_m~Mk_]U|<-b"L˜Mv1Lz[MGFvͧwa6_Eg7xL([`T~eĎ?QvWn Ύvts~7?Lv ɕn4/vH{|8.3/h|ATM\'#H\>.״.V?7OSX]W$BR14n˾/ ,H0N42O{PV|w~9?ڔ鏠BTr/S#omχD nuq * z;f;l%^쀽e!;b# p:Ǹ]X6̯%׌]/fn /ln؄Mt[vK4.4#f؜ͳ9ݳ[\ϲ-;7l6)bD[$j@;\x K O_Y*ɴ>, kLCq+I#Z% RBS@^HsdPLhl2ƴ~Fx+g<ԟ(xkʏ&0%]@CDz$Nr1u>Bfûqv&nMY;dyG~@~7]dc߲ ݪ>Tx3 oulpnh*1Q%&GģU7v~98-KnM<vA-SuGŮ}~A. PVܶ5sHME0J pXe&ˈ=l!&h_ޮl!Q9HEm -[ .=I+ۍIg>lKSm|i4 aMzϐE픘~O|ގ^>蜏 T-T)G4ؗip>:y7o+\'a}!mBu|YJoS?^kOxњkxG[A;rMjv:Ŧiaχb4B %[,QZch\^ͲY]W޸no6E6.mі OIgWB-Ƙ<HFIǯ̡ ^,M ̖'1NRz@xfl(h1h/ 7 ap,8޻铻s$txrn3mlXf-ɭ',ݓO{gs vOZItGދmeD;?7As\TT H}>\#)4(-YjņkjU,0I0hQ$<Fh#ߞJyu9Q> hַ\]dL)ח˷-`_/2,tN[T '5-{McX{G?o5K7&]J h#s/(LzyILȋRh*yy_."S%IeώvOZ}9+$7$nɒtHbTJY7=wnЁ}T;!iŚ+Mcj(7qH=LbJLy,mXh9S8&_ }峣$.Ps^ ibSp01R܌ұ>XV`|nQSB.1uT)63Sil\!gu<mP{. I߄_/al8Ll/+hU۟|rmd*SijCHtFl1B~}~c}~ps|Rv1/HoOooB~ ö% ǐc*pYlЍ Ƀ+ jAr'}p0ټݣEѻ6b 6:]y!1wzi(M?0Qٵ'YdvشI-m: a֤30]Gۘ(WXhoۧ1|~~ӕEEF۰§PciccهL$.DxF媦w3u[m6+{r^xuz^&evf([܆?Y/ꗓ ^GdzcoUr*Ethc,p݋ՙ9}rjVT[Wt^G&^ք`K˧8dҜX>lҜ &7 ԿE9% $MTckTAotzC:;r=^МˉˉˉI_r2!9ģɒ$#unS2 L<m@cuc$1f]bҘ1s[6WZ9L?x\+'& /!GO(,1|EU 9T7sAgtM珇t#g:3O:NGqs2 UiDi2t i, ;+c(a_#75.CvawvawvawvtHź~OF ]J)<~MAXTXD=$-F30ބv7ˎ~\}l16e:ۇ}?ة:J8F8]ZTk@mUU9;mP5'ɺOd7SSl4ciL%?sGv^8sF }-SS$&YzbIЗdfŝ5+/w }Mmz^ "D;duu{ >9I0!)2E$H3"P 巏)9*,`{rDc.S6FWa-?)zy؇O4x5eF4P!  endstream endobj 254 0 obj << /Filter /FlateDecode /Length 9225 >> stream x][u,#xbX, %D˫q 3CoOMvh OȹUaƻcÒM.N[͟.\]O_߿*"Xm*? pQVY߾+E\/^}VZA.+hJ_\ݿ1zu }~>Lnݦ]sxnWy6]͚.|^zj*{ލɕƏY(T[W>]ֺnuiJ˾?(l&70yxe%RY\\j;|my(u%~`ti \ԅrY[m9g#p2/ ]DЯ^/3i 5 Yz{|ޮ7+0M^iQ:;6C4T[.m^ɭ15yMg#pyY]N1w칂>B]} VeuC{ ї_RP/FUZF/l+x]*p뢘^r>:.p2m_7m'$̾?6EIe_ݵ[ 0h:N7{&o-wn lK[g:VE5Ϳlh2yܵԁV.L9hńi횼Oh?D>-݌*n}f!wJUe?Q'nGSh h3dldC]s^3՞Uh!BD3S@fu,yQ0=0ȦZpVk-Xz;t`_΄]3aXD—4cd# e*΢Hc!]if_覄 yu/?d%::~l7oD?0%Pý 9I:Q)s`D c16@D;^+n Kc-ql8׬M0:dYz+CH8HFe_[nЛw$svbMi]Pѐ}˦625E*l0vdZ9,pZ`6'dLoxO$c`I dc- hs ~oJlgу=YTq>mIA~_-1|n0Q*g͓E[ea( $$(cppܴ>V!ZBy>A%\O)*QV},"PaT-{Z8CZ/Clx]T?GCe!n•/+`pfjM9aY0$A-ItKt }w{FB(*d~?G+R4@`ǫUq0:?xaJSKM[e1GSOF $& j˨Ty¸@aT}m;FJiFp1z]wJ q rVm=-ώpNpؔ=D 9\1,9Yjڢdd 5v m83;'@>ˤz-PpPUC3Nym˙JRh80d:HA21;SHM4T)+FKxtWv^o|Pl 2t[_v+ؽ:11vF_P[K0YVb.oQةO5<Pq$ PC(8}EO ln'_3uP;!wb}E{C;Y hz-cɾkbo4+cDo&ǘ؜<;3쪇=]|\!G/ ,eT`2O5mBʢ6- 3n}eCk -"cTv$+re뻶Ǹܙ"s{,}A ;3\VZvƒfX?\u|k\F O _3=VF .ؐH'M.^4Xgw%4rWE<۰SlNefd*W"e cA^:6ԬE]]޶}.ӹa ~׸i ov ]c@aZgQtx%Dm8צށڰ j[@[z3  zii襵BSLJgGB 9{|v`@n0f]'G`.'B-30L-0x;/PxSR  H S!gv0"7dןbWګY/]Xr'S4rLAG/^z HY'5hδWϫ ͧL{qgiMZRRR? WRZvJm=k'?]t]mt-S`(f} .Hē!=V: rƯϹTn`t *c1"(Cӕ0)n;0i7h`oNU7]=KەQYҧƤ[IaݝeN(s!sX7gJMgœ#̔ oݬMj+q lmyISQiD'F bPj=F 2^0pV`Yv[Rx=nL=G|b] Ť ZWY/1R|l /!^)KrO[$N焞W*K7L# ֵ@1cGg̯pj/變HUXTOǪzb@/ HFlt'}t&S¥r䌿ِ\)bbNl\Q,WՊ $}&{<70HJ::$hzV`a44GHJ;zd=,s# #: t~ I[D8d1Cd]/3'*MT:bD ]R9<}_6m7 *>۸m!kѭ|>rŀO$vUEUS,"&tL(wrfÜfv%8h9b0r{/q xjpQAK& #e] !JJwZ^3 o[d3CyJђ0nw٢$`].vL){=o"bfI7)Bw YƩ`MkImW`=d.J]?y-c"/fVNZ~959FSAiӓVyWIgyq$[bI}]01;We5:$>5iڀUuQ"ɍD^ `.ddUn$~sXb]3uQenț*Z'wźvLV~8P)*};ʨNHR'VDBd ~ѓ(r?Ǵ3Ǝ,`q0zN`jGJR,]p1h/XbLNaBR_#BV "_m~nØN RyzdȯYb~s(.Z%\I.IFU !,'eV#$=:8 (oCbQ96gO@#o ҳ,S/Ҟ*FM47aleBvN5_nTo팪L[ SrT*ZaH*db^5dΆl']\ L`b" }TR\~8jrSQ 4ipɟ"mϕ!{L|gE9-{5gnk{%n6R@?` ߰,,C.oo%2[+h:җc!w/>13LDK lH"|"D=%]5fJoO!G>]k f;֌ M eh > *@|9D<\O>a/cf.b3\PCw3aqp+6l0kV~ǃ(VFŗX|`~D1!m? ]2;:Ie5)S۩#e'1QwV=I/nS=dmx-h0v7Rf:䦊*# 9Xl|wܶ2XNgs5vl+P[lZv.}6ԇ`>wg3\a! gγGio NT7!n{mlQds,}lNpT)(C9qЙtvIcRRH^ɩ[@g5ٰ 1D)U>AN⽞5BvKIz8;m-r(tEa Sdmb-/L$ xfO6V UQrV]Pr!x> c8J{O"v}2nR,m z$1Kb}&ޥ}\gbK N4$<٘ICs' H! @Ǒ oAt{b˦b}pt#?Ob "Jd^VhHh4zt`m'D.ʼ2*ʘ29c+;*(3T&yUIf\PB!^>8^Ug+䆤gvػn9Fܚq}9:"UGX)9 Տfk6O3zW}rr|wF(<4q7)`5E&4`iF%8эb,W6mi0 mYb\QE"viw#-31o$?N _1nW)ג l\#}L?qq`~_s~:s}<2͞)0NT߬,Ua|$rΛ`a) !^DO"Bz##suHs#5ɇaEe]`/t|  Xԟ5E=]$2<(< Wnu(B0-;00S; O Q\%o9nX+rtNJ~_33gq9XLN<[6v>&L.~la8uwy`gEѾہ$N.`s5SUToѿA䉢I$KgkRur0ٲPX8?2ae(#^TXԩmsT̗}q5 [+M߷\$\$|ѷ ^N3Ƙ 95}t3s}rid>rg9>woڞBBC|S)ǖ@d4Ogc1fjzDP(ʒsk77D^dhOa!5+S<^l6rX-.<( bP g`(>&OR^`A)KZA =o&UƒV&N4p)͂{#o)Se¡;/bǏAݶ*89Il`6s\I/+P+V9lLy.$! vWt}\E aJRB"BҌgC{3:sJ*DT,`i@<9#bartԩX׃5}N%b+ÁA5۴7=D,=AsI\jnSˋ L1*+u=9{vdU-nX/}RR 6$G۪N iir5h!_RpX1;\u^L ML5='wN[l')Zk^!ތM^llH0>x%c&>UR绦͌d<)5\42b#fu%ۥѺIwn|$ {W<`hZT Ք]J8 A"ɯ~B̊ԥh_^bb  Ē92`fe#8[%6Ã}Æ'M;P dVq>VIN (R^v}5z1O2ƢQ>erQŒEHS%  MQVs$I$fXu<[ 9UGN-C nPf*/Dm"++D6TCVL iǨ #烁w8$u󹿍y9%()N})Cg󂙗ss?)T@iFBZ',將B-# 9˜ Ed7je88XF}+'M 이 R7y9A"r~ox=I~g?^OJ[_OsK2_7J6=]z{>.Y wR|J7F|e@ٱq֣SV"~ 6?i;,i{-i鉵f2QQN2ȭJ#`0IjL٘iQx!H3ĿY)Gٛ-Di^iNEPGxr@Le&y,tρ{ FW~ Y/x i/yŬY,aNT$e0rL1:s>h=зMm%D!.-@'(`vvK0"N>Jryjش7|[<l|fJIޤYqѵsmt`cϡ= >L|tpx&C_.4!#h_y p _$>cr}qX#RZ (N'6,ȯ'8$J>QcsjItql[姬E ؒ -dH+Ikn'+ɃBhПϧ$oP`> stream x\moƑG?bΜD߻7;!8F?$zg1ZN+ݫ&#w5 ŗâ٢ tn0-m.̂Z,v6_%\|ўXܜp ?S-~} /bs[\^y*l̝ D9<ڞ~[ nLXw8L'pc\Ð/%^6YW'y!XV6M;C6aR: %zYŋ] }JZZ۪WVCe89Vmsn*2ON(YaQ\˾픀D (QI5#$&EnMN&#^S/?y/gebL)?Îꅔ.d 9{nNs]=f^e.Cb*kN7~ێj)*2²Mbdaf<ܲsBew~[Bf}SէK(xtƕ0ki 4 Mx=w:7L? `tߟ6:rIaM!hrIBOptt'f!(1?a9h'lޣ'4E@1NmӓS )\'f,t@*FӋ/Ҫ- f$>}2>1|b+;)a7\&\Ϧf'R ϓ"[~}UPMi]כMۊ'$#k:I0>PgNW Hhw%rfܩDLy^>1'c2+77m}*V?*K>fS'N,ȼ"%=g+X.L DN1i1ӣ/ YO1^Nr=7 ntu|b|cxgq(<Dš\22zD S9pN}b4|ŽPxcLw8`IBϪ!N(<]>  FLHzzLf{`P8Arvb ATk}˧GT?*u*|-yOoRO|R@sTSxBR&l"$ϲ'6ܺ<[u҇f/a5SAfxxW9O^}TJof9s=u;!!]$b9!-%pU*Eخ˥CYRȺm{g~uu_w96M%S6Gl M35 O~ջHPy KMD "J[2 |y!A7pG]H!/IǛ5;LJ-OՏꍿ\ѦǛeBI&:=#˳UIE;&UPMZ;lɧT^J,Vb=:VC7mUuQ~ O%G5#Jx' s~X`Dj{@S^ω'@pr"u@9s8vjt<(Lͨ~"45ЪܺG5 v j`MlǙ/aؐ1MxѷnU}}}~pW?@{t9(N R] ]mP’|B^:P2<iJ,HCtٛjW-Z8 2r^"3&o=h0u:dz̶!6 {zSa'6u:j$ 6m plP2Z!?ҍJA+oV?U`!qMeW{t Z@ = /ٜMuAo63r8߾mC N.W˕+Qc_(Nn7-@i2ҵu𦲏 CclV5wuqp {MVZ$4W}լ3.q.{럈 FpB @Ԯj}7 0Mn96n"_Xa939"J|xY3('3̶J^q$zC.;🻮s!Sw`أ~9l`hnanw]uW-;r7F9nA,"јiט`w4!=,3&p. @܁4|6Q36ՁYԅ۲Cǔk+Ͼ~o><a1 pG2OYZo 6Y 8|#ᶪAAa"ؠ0x[Y`m՚)NLJ0Gxrސ k TXxMOlm_C3@ˢkmm<#88: |`O8$]cBc 8Mba?=,;vQ;Xm+2KKZme_@֋V1fWAym qBo&K0!&HH(~/Yv!sH]:1A>%XR>0`\oë\ר-ge=lCo.׼P"e %dTBox@mUu~l?꼓ip"},iq%deImbdTPF'̲/jKy2]//0ζǾn|Q>*}ۥ=j ;Vv W9XV \17ux>cGDr!B(Ys'N44G@ Gp9 P 0BJyǘ'Y}E1KCUa}g0(nl~uK8Cd+#ƽǚ}s`a;G$ h=rtuK0ࡅ%=?/_k)\ I)E+!Ix_U?8QVG3n5uKj^<$ K0! m[}SsYC'#تjcKPh YCdb(`9&_( &w?B +_T!H,8ԱncLMbTqV0yH. P!wC4 ,C60Pp, G2 Ly0o:ѺL~ފ0.4(ccL/ yo%'eGoKb vmc Q]fuo٘I aby!oftAL?ϊutA5/`5a $֤(4\ϲ(jmbAH^m~xP _/K@`\P1x@=:8\fm'CWDG/ vKq5aʈ7,S ;Hɝ?f;h >ppX> :oX9<`Lk/q *](N5!Zx =`o`dٯMf<쨆HЦDlȬ4x6 .&˘F9`1,P 9Jr^kjXr:#>}҇O1aUTSV̱| CrPt~J,vK]( IGo8r1[;l? 0Xmóbw#G;'YȌ t朒f 0ƥ{}勗P9QH#02&m]Ui_xZcb MLi>L.HhW_wciP?$PoD}``x<l8$$Ώ&;\A[?j2wWcvs0 SK+b*j- x.ܟd[0?"A6Yg6 !;t 5"*aQڱ,rsߓfCēPI$bX']c`a >\{/b*ã<<er:y.3nrOȀG1n*Uu[b™l9+ɷ! ֓EAGuK80/8)8=(8uj.D XfV][xn)W|H8~~v8Sy(,*ǩ iw1%$7887T})?=*< k>͏&"]+cԟwC;F],5KSukELb7eCFm\SÇ?c66FPW'<ſEa K$8Y8>L {xށJ* '5\Eu*S]p =6=+y' cT36(1$!] ~cU_EȜQ41x6-[Xmg,t_Va#-J?ϸ؞ITr5ٜ1ctk }4LJJYy4Txc, > *cCsA&ɏ(=<sH}q ,s]c5c< <¯yK)a=_7SBeL,ƒe%~gXgWKN_7>yV:г$ ¦宣mM .f#;JM*3;.2~1&`BPXG+Ē( ?jû 걅F[4IvI} |>QR^r+ jsu?@ߧ3fpMڎq=ѫXLn j?c=DYycD׿s|KԤVPuOu]2V>PY~k[Rj݂NijR+Si3[[;솉K6y82uINvv̀59t3`P7V!%E1&6BXfHf6uF'k>Yle3x@&E-eR!gߖ <\v zL9~9]4rJSq،?zpVgb2:M'@/K Qh}[l(c6wdשI4w:tijnV dH iGIB ǟ qDv}>b^h#3qG`-A1&S;8@Wul>M4嗈s2BND\&;lA lNC=z]m[}5 &M r)C ǎI3\48H+8&=$ ##. ohw<2.cSu |:H 7&6Qpendstream endobj 256 0 obj << /Filter /FlateDecode /Length 9820 >> stream x}nG'yK;fe`?Ȏc{<2nشȶI+[d0R);#Lr\~Re8l(;xGz-=zrQGg4TiuIGgG?'rViV,7qǓ̳Zm2۔ŶZ]xѧɪ-M.fWEH֛r^FeR5Sz=W\:^ö%\|Ҕ0.<$HrpL{\]Ytz=t2,..b#2zEȠNck O"~nÝM1:CO&S,39709ycۓz0 ۲v7zXnye /Ha)sFMayȗ8 qq/:Y@b_`@/%|],kMv ,X?*~q2{'3G79p666 Iu@>iÒMg.h Td x,>ݗGx]4ۨ``SI H|&e/@,AAäjMhYp#  :#b{e~(բ*6̱0Jfz]m/mjJM$`eR! 4uh * 8EѰ3djaPaM<*>:NGID{FOǎ3b t4+~H-qx \ʥJ䋖xO'|wu'cS -h&2}qv>Al'}];xap]h/L.Hɬ<#Vkl#"}M<4B}q3Bgg3T4hG&hx~PݱQ'Zl'O:ʒ9cslQ&7岨V:R|EA%me7JVr*P}B=26yR'5h@"ZjG)<ɬ^W8) 􁸋;f~dM M~Qqtm7vˏ5oݽ;Wmsԋ2b8 gēkЭ4#9S':~`$k,_SXiFI &,]$ #iQ6ݘ<fe|!ii1`Z xu8 ,ŠY,ڙH@[ݱhˉ$Z`z j+b̮HQ|Ѿ{rFAEjJ$pT2b7(@lpi!\"dl~f= HF7נ榖f^p# F˜O$O^;{׷CsEӂQHxdT d4E aQ ۛ&0/5U=6yēBih"yڌS4gZ8`m dwoSAwF5j8Ԭ^=1طބ%(P.C,x9h=^y?.<{" 8 @j!L,EJdM5,V[vkf7DE5y=ہ%N_Gy!X;hfT[[AT < 6V,؁a,0[3*'=xf)vJ`uJ+$sA߶F` &eǜC$'l*X֨V]&g,+;_gΆ2;0"rX&Aϵ!~N^^_λ@6Ug?8{<{oCLgӶKd!@5]iTȫr_1nr}4uPl"QJ;I}CQ(y=F1CŰ⺸!%x?V'ز]YFc*)[V[Sc L̍"!F<:~2xr`9lߋXMtA:2hQR~7^-fӶ`8m+n"ny4GM'oQ'i`@SǑ0` Nw7X w>Cy alF,<5sʱ_C\C&Kʨ̊ʔES&tCZ$j`MU_ć#ϫULN$[`$m*%[f]r1D0"q&ƫ:FBΝ0}`]v"mlE BDN^FfA4Epn[-FbaTK>ߕfvry-̋mڃlfV6c$|P= 1M`Vm o)ŜϏ;%"&]Ub3^mXX+Ԕe%Iq qqfն7912[UQnspwƜ~ Um%,;XZf70ilE%蟫U=`5PݍUBr`qT A7rAD3,uU629+`[yȍ c0&}x?+МF lɳ]ɗ|>> =[Ij\}ȳ?ڢޛߖQM^ѻRAzuQl6$RClU6h Ϡ󃞑TEi'o8/vK-^rLnGhb,P)Lۑɨxof! xU uݓp P/C#g*횽O L:_`f1Q@h/W]$W>(8o|*[7G%o "%xz"僿mcm߻jQRV<r)y_>{֙$Tk7;~.7};y[vaSJYPlg@3ΏyLIEV _% a3rU]tŏ >h 4߼5ԡROjzĵ S_4[{_@_.˒V$ ~6Іy"GFD hw8'Τ=슷ii0pϮ|8!N#iOFJk&@w\|~Y`\Wo𳧰Nb&6|Z^O(Vq$5kPrxU,nyn(*w ͭfɉG#kP?27:`\iţӻ"h:u* x:Wya m;`#M^S Z 4x-.('DP=>`X޳`rd$MJ>.%ɪ| AzSGu| 10yAH=D]A.GtIF<'lj\ FLH/_Y{\C0?ARb0kOEE&E R[s_>Bo=mE+s&OSР~pÃ\W /E4B m*QDT), r?`tP( { V 8g\;K6u JxYW8`W T &Tw>N99"DA&!߀ST-OnƒF&0$DgOt)'EyZhG˓8i|H0!\1i%'/;dD /F8 (Nir<ry.Y9H(zOQ5H'|r ~l}STO<,xΫz.* :Oтi;6 EhH.Ws2E qQ5N}*)*ĿA }ܭ @Y@!>̿{k@bI?f`C,:p0?0˟\R6Vn[{+k];'zҁlc" ARF ؞[ٖOb.ECBv.W|_}7qsW2nێ+0*TsvpdHWJl*vbIy/,!"Gw ux1s'J.*lrUPVvFۥɣHpY hy*}㸄NIhRmujY](6c|%+haBV>OIF\*tdGtnZr0?qs*4Vq5*9I= OJN.k6 +cE`>.,?|הM젦Uu9gGipNNԞObDMFW{M.F/BG'=(ɶ62wԨobOK[ rIr}/fnNKYNNU B}54JzW u9 _t  뿲әcp=MƱhA$Ֆ+8>G8Ͱj65T9F*|yy 1a Ndrvy7'0 <TY=RI\Ooi @C#FbV»|帤\pf0zk&E  abŚJ%]6Sȓժ,6m<$a9)cM-`o$Q҅W_!JbGDdWԻ[L*L A^z |p.+R "N&:U=NSisX@4 HFdg-CWk5p-,$k oS@#oRR5`N4yJd;p\<&Ƃ_}^/ SǪQ팙p؜_i{H]Lt B[yXfJqi =qcAN*:JjsNkOslV.N $+#%CPG)C+PN N˰bx%WfBct(KHPLV`*U *0,ۓ\YwXUȢ7#tհpK9űu$D AfQ¬:͍6qaVd x :̊\VD&Ȓ}k:k.{˪@8#SpbTmSafT~KI1/O`Ai>g_{#aS$1\NɼW,Z߹A򬮷x" FkV^ èVt_Z,Rp0k]]GW4<":|{uXiI,EdG1׌r>Đc|x3/dj)+3 \sG.pX2\T'ትmqED¿haWt|A9 Zu-\JLhS 5 r[~;eᛊKuݥdde'^"ƘU2_2RP{dS0zJ߂7(at^ex?2'ᩪ0ܸZ> 8Kx%U;>n\RVY~PQ#Rr]hnyzph/(cBb䒏X ;Ia6I/}FxC ϙБJg? @w5r`^``S6xpmqbw*fԎ7fkgEMt1E='lmYkQ20 6A-u/ Td(T@zZE.WHl5 egd6ZYi{Wн}-y67Q֤x'`(E ϻ,҆ >7h h*Gn\ ]ׅÎCg&۪?,abY-d.N@2}gE[D!ڳ}MTC/c_\XhaKk_t$$r< әxbi1M<Rt> stream x=kǑt#Fsza_|0GV$%gwi!rw#zz!WZaZ3_.\\_wxR\>剠o/?^>셒.E.^<)2 csE)M^*{rUnK!D^9WTy!t~y!gW|*Yifk'͆f-mmxUٺ]ϦMŴֳy3={:w-7z>/Dچ?f$@KPt./O/Laj50&T/ nLUV;}~"e!š*8Ѧtď\.z9ŵs[zQ>UdYE.( Wy}I[e y5YUzZOEmYx2P&͚{ <| _65>`S|`a`&쀁6vmhݚ fU6ݥP`7 Mob-S QfM>HMMdDmv;ՑC5Ζޑ/O5y%Bjms'U*u6?^,Q0o?'7톆P9" 5W@x[иY-dM2CFw4RkeNո).lirQ(캭w@+NY/WH x!GE@Q_\##}b^ IfS /*M@zz=gs7ҫSyye@/#+> ~?*KJ[]7 k-ǶĨ\:+QW'\&OPdA[j*?6m]hP 4*+O+{HDXɛr2n 6$-떊t~'r+ uآi#:zf\=(2ZG`ә^e?B) e iڬw-Z-Ïhnƒ{j3[ .~IማgVDd̻V,QE8M}o\I. &nۻ0\mwN)A6⤝]ѯQ;χK` w/[6~-:r.4v?]6m:0X$r i dIAH,Gn0Y,rqa6`Y=ç8g|0Cq YH ʢKD2";2oph̾ @Ku.&Gkumnjowfgͯ}vW-俲ơlW?0(tlWod% <[y(ubBh __yEw*@ɼ\n|rㅙ"Ze/=qeqIJ!D "8KDnmݵKQ l2>gX ET)!17xoTY&9%ex/ajF8& I2":,v[NLl0a e4+ζ('%6|Dm vcH(w3,V )FC3p'󦛌9a*.!~zwHIW Xc".2Q9p4g Bl"f`Mb+0nlfA_iv5U+?P ȨapfQ.{hoPqNg7j$ڛjOVx&ms ?Ƅ9lK hټ [F>ySq;x1GP~Ugx7#j>C TD +^)^0jFٽ *៞A0Eö\* N>@s%C zViQϵ479]#ަ#"߂-Qݯ&|6i *B]{?|_u貳y>d{M)KiG%*Qi V$ySWޓ8= VΝ a`b?z" F|,Ow掏ι,ۉ!, AKǕ ѭIἨTN[JCq znjXʪE ʡ30ݶ@h)K6> [ ; 0۰mAXk1Uݧ–BÔA$qO$`<+.@ 0LLQm5|F*ݸ?ёꖻu`-Ԕ{v@S^KîS&=`}CՄo9Mo h&*) ]| [au-I@麀 Q)9 {77춀Լa$p_`9A!|gq Qaե~K6xʽ27F^"XiU%MKRGE<%r5{q87f&4AO#ɱAuӒsѠ_D3x`] tb4,7H7(#1^ ?b?24#" 9`?O/Nf}q %'JeM((,+YnHQB?>b.me@ Q$ g} mXNE+4](N܌@xUtN؅ [Qaە%:+1ZI΂Dq|#Uk"Ӳkn$#B,VS7٪:l~DN`4B0wb*Kўպim,:&SNq~x`YF2h.tȃY7kubH /Ż4 { `hW"COw]A ^TiRj@xY2zݺmZ!SH cH} (V5 ouJ*=/^t֢bd2qIC{:?چu{Q񙌰1>x 8GӮ }:x!@~^}l]h k0!ҘZfKkNJr'+J \EҶѓC4&F$xѮuR`kL[//}zsd ͂JF##2SKʭCla! `P"-7t'l8m|ο^TZ6CAъ6!JfB|ʩ1$mEvCP9/$ZD)UD%`آ7!T-(*AU&w2x@wkq l'StgK1eL0,rk~ C3GImW٢\EQւzUʣE,@1Ӭ}Q=y|Cy2&6DFu3}q-(i=:,)P{%i[A^x=( D3˛f< \Zr 3xX;&X3Q8~x|ڜ򯌭flw$Ӏ !%)Aߕ >ITBB)u4Lñ@fES &o|e/7'>Wu5d=Mw UR3TKղz~(+JPElC{Fj*)JF-+QP wE6r 4EpVG4Q1S&fa:|npيM$yw#fKH$kzS,m@n|"1$g!\ Nu0WUI-+φK,fcFߕF/D+JAAyܯENY,,q)y`csj1% n?`&̝M ?ΐ;֭ n͒Pe=F$%Kbxb>(ŲOe%ٚ 53列|}$Gl%9^WY|]R<@ʊrYX UIELM2Gv7_| PKx56[N,Py^lMNH(OBPT_ ņ.VTm[ 6T2e.0 X)&D4żجW)Zk~J޳abݟf~a,1ngM<1]}3ݵT=< 0у "+RhmߋA8c bC`ڭ3ځ5oWfnhmľ9Un}V*WɪBiDˆ10q |5%v)YJiUHpu~cCa;S+X<KUQcuzf͗J<<R. X >p>& +5&';"g;2T}(ᛀ%Q ؘJ«ԕ ?A*+Tǣ^ь.jh-|a^-<+p]2N1|2(+AAE=&D,Qb$PSy7j:IJh `P}B=!=l(PEх_ 8O %6:GNi =)9Yh+:#`;X鏳uM6 54Y`9ʅÈE4 F  ȏU8#[bE(^ޯj\[$g?@̦^ZU!:HtK)?BJǧ"J9DdXQQ^+|`XxR}(2pr|_Oܨd(\/?U}_ŘvJ) 5?KwNࡆ8X!&|G% Clx|oD*JP!'*ѣN*wJ%Js(:v#"1˾>%Qt~X~`OD؀S[b Ab@ 0z&Y#åñ2qKpzqB h@$pGq$ Oi9I @ѭaW {kyr`Շ]#Cp&"Dof>zg"H#PxY ]T=_` KR/Q;@cb15ܦ qNDoNk W*ǝ2#F18LMW;df/a~:$~șf!(Iߟkg? N_4}%?1m; TӠ:YDeMA7P~W/G`$d8pOMVM;iLl٨TN>D9 H$8:pVQi_~pFץ6)/1Ap:C ~Ð#0d 3 C&ϐ#M>2و$2d2 ;+C!`7Cp$77oۻpd:@Bczd'3,F" LڂHG od42w4p]tslo>tSFg<1kOOFf<+rtP(<bɇi:$]ha7zv˔V7ij0(jrFtU;+C)iKR`cKiC#@6\=0v91b VL!mG$dJ)cdJe`,htfol;H y,G" IF,0r{cdegB#cQ.~3.O1 (|8+yC2H0. ۜ}LG@ O?ѓAb9Cq)#<};܃R]5ZN0H,5X.u#~ [EH"Y0׫U:<:qf]4KG%#guc躳a;d1t]nV@Fb·b֦}]7 ZPtA !$X$#&?&.a$c- e1J9Y6KdSdK)$6{GB1r·b΅&#h=lA$cbsR'7`!\hp# nij2[H<ٮq($jQ ?غ,s#Dg \sx8'4BNV]q_t t0ґF`)luݛyCxOD)̱uo2%/:x^k/=J8VqgY{EmO<~%۪;oWa{HƶR i%ZhsrQ+gg!5D-8ڕ2T,pL*n { -gQIt+ 'ULΕ 42<S`J*vSݵݳ^瞜d 7in9wj=^AGA-{S^ ˵8X.`CK{uV<ͩŶ:HLC4wer )Z+v݇W(Wٿ\^a{<jur=04jY?gc*jVrA2 AnRaTNۏ j^JC;se@m~]tw(,B mzEsn)]/d)j&<$x@1_Tl^&.@f`/nzL]E-uOظTЍ!e ׌!z~# Z|W7:{WT:)ޒji4:|=ri ģ1ۥ2 ؞`?Ac҉?Ҍne[myP1B"t_y 뎪*IK .,tx븑#vI˷M\4Nou2/AS;o5MϷCB;jRo=yu! ΛD%D=Zߨ BZԶ>@y7YR6^C-z{c/h*ز-h#w쯸y tÚK"Lh/u)%٦ '[_b$9}יzU/,{pQ"oWd뺥Id-2 U}466XAۦ'A҂Ok[I3ײ^f^8Ġ~wpk&iM.Mkit^/kbY2<% thҗ!Вz@thL{)9$sqJIS64z4Ȏ;1S=R:W:tNojEuiu; ]/hre8}Yg.\0uڜk9[NZ1<-5:شuPcxlA^;Bím0ڼ]3y/\}nw Hl*b/ﯞ>}ZD& u#]|C,G͑lxuĩ%wͦՂm<мtCKnx,6TZO&{/\;yBF^G2j/bG f8x-BqՓ-_I~缩bor}xzW g6tg I% KQ0pXƅQ,jP,S\4eEaNWB2lNbqi@F*7SmͿ٤6^uenW?>WgDM}<' C37f~})`hiAŊQ^TC=~emw/O2-\endstream endobj 258 0 obj << /Filter /FlateDecode /Length 448 >> stream x]n@~ vO$k/%VUDq}Όz^~[˺ܚ:f^i׏}ͥ.52>mǧoV.o{~x6uz8m9s9u﯄siPX⣰Xsq~my%C< ;a_b/L!&a.1 Q"Qbٷw^{ݹW~(q &6Jn*BrrɂI};gu\8kqfY%3w"{7v| Ax4 F>N'CAuXa}HT!}PևAuXǥ8ċp,qN!NBnr $|zA`H0( ‚!\X0$  !`pP`pI^M}uPE3~{]o>M>-:$Z鮆9A:endstream endobj 259 0 obj << /Filter /FlateDecode /Length 8049 >> stream x]mqǩT({G:N^s.VlgH$QKRn$fvWT͇Dl4 7,e ͅlkgk4}[Vm.jgvvϤt=ŌKFΔYS^^5"=fRe~2 +?R5p-U&,'l4qU/O`$X~ 8|fRrI 2mLsjHf]_W`jX0%̨Mi="r f:joq_`و)Fwm[/*T:24۪9*mϔǹk@OW|h*SŢw6rJbh}.BX{BZ,7(6 tM+`-Q4'~1~p[05\(ܚwŏe΂&i犒 e񧕔u |Vє)!:`|d\ 8hsle<IZ"89URu1G]4 x) Cl$ႆ]{s|*gmvYٛzׅʛkm(Env9]lk`H^қ\ҳClX(ی~mWJxS0?ŪEk ;u6 Bwr_Յd6ܕ&4yopu7ɽl Kə.J4uCN)7$e:'EZ(2e)|VE"vBO"v0|9xZayJВ?9scW0!#Nt%'uOq9H~:8Z–6>'@%j:vv/ [H72{P2v`(@ZR+[7C,}cxz?6>YTqDF7ci%GG.VxXJ5SA9۫v" o/uV[ |ШpIU`04ɤb}SsޛO`2݇eic FLow#3Qn`Ʀyh7UyQ ˈ2T2;0Dj&p;f-ˏZF 0 26? S@Efxb fپNFL/4F 37 3T0բ*7hW0ӅhUbvM׆1!("U&"UtMO$v\@P8 rCM;4<j1^^w1v ?a$5ㆉV4`>N:Ob"̊Adq{7U_@z+0JeTV GdŸ$|_L_ +,~OM~F =‰O%t1h.FO}QӾ7 Ly3"s/qsβ&p헓vx*nHn &2&uvk, xr"]N'D]NYAMkDJ[1ݮkSmZTFdNXM=^<ՒS/ (4y` zc䟽m2eR=_U2e?}g'.3| FNJg]Әbqwu30أ8e(}Ng*ѻ+nEO<]S9iMHb 'v\Ѣi.X3[דV{F,QD̶B@}l+'lhb 8lW)3ϖ/suYpj5Q-xwz'` 3֭hfS6u'@D}!Ck{l1S,vqs7]5FL䌫Ok僑3+P\M&CY.7iY֠VM)U3)uLb;RTEY+x<ȳ(h4WaW~|6L~|h`Y2vw(X&nnڒ]H_c έX~d=G%8v-]8=b/y-iL}E=ξ +s Ls\26zS2`)JO$0׾i&cEIe&?7bz=JI;1#Y3Q1OSUq703sR> +O&myD<[7Sb0DMm||; #Ԩ(5Ḻ :5*)} "hۏPc{XcfWlƥdq/Ld(|D4@0n%kLŴG[85SOj_/@'4Xx4^U~7-L9HN{}ƭ =*DֽG͝Om}DmKLlaƝ("W}"8&yX\s!5Rŕ deS!1[ "h=Ses 3/<9p' •2)Z<_UwIoD"ҰZ gLb34jk; (& h(v!fQjp#yJ0< 48XXƌMJʴ\]9ąj6M "A6 W=á<ͻEr"CF@9q7ݯSU\sЕT|ama!?,A?fD^3ŷ}ZlҀ=` [7\AjC" tn錖*''l 4kH$ѫr='-R~GG2m9g#ڣ9h j1 "Kǹ!%GN>?p"B跞Ёad?_20 /`gfX:~~%upE4@І/Op%wtʚ_e}KDN׋K}PַR#7Xޠˍp3t#qBEBЀʆ 237'XMW5Ţ0" ʶA$BBҮE*K. X'=dG G=RfT?-a!A :k|pdpQm&!`B2햫51hG8 O<|a7'75?o m; 80Lp A+T̄WOd~jtu  1JDrTq}ȑFGb(=.cQh?ew`sTxVE:A/4 `?2qCc~O 'Z M`XA箱.xDQD5ı\efYFC/vM/" 3I5ģpؤBW㕠/fd_7uSt t+d 4n5p]E)?qU =n&v~ڤdfy- [〦HUl ׈8خI! P9a J{'u5s^CU{5nD K#o;r׌C;ŀ(m"&`50dv\mB }vڣ1URQ̻;M9ۦr30 908DL ؘ%C"/.bH_&k<ƢtSnO*Ϳi/3r̲(WdS]$[C Ng!9?H٬rې.| PHP. C_M._.7!7u`.=%J㛢*0a} 4g)GqWkόvUCuvc0u Zɯ !$xE(:f/ݒ3_zx_?UۖjSɾRZ ׌ZɜB.THnE:7.c/@%ͮZ. .Sc{+;Dg]al֧C W} + =W ip"tUxwM]+6p M,yO[6N fx_fwqLd#LT*D">sƏzٸƫCuiPK,~ pfM_V@@CW_" Cj4`|Ay3m=hL8Z!70gB ]"(~:d%A=Ǵa< {L;HRQvA⇰'J™Ira㪺i .R<4PG>NAac/fϖOŏFH]2,1}XS7opRVy <R" `'Նjldу7T2KΎ1TjboUBj8O]>ܘ!4xE4 `ڎo3TT2H{:BPf1:'}GB C9/LN2},`i$- 6 '>WT19ˁ0ܭq A?Diʢ;T 4s_PΤ,g) lQd'-f^|BXጫX8cVN嚠&Dwr-L;o2$_HMJlvSܷRV^ЈK$-yƓsR2\,b}X8-贴JQqTp0O7asU0VLiڋŦtm0w.D1wE)&IȤ|Xcv*X5'G-@PUuOp)JL* Ϡe+x\АqPaJaN`txN3ܡ LP7s`1xmʶs<#fOrmdYtE[v*]Ӹ|{0q`8iswXZm_6rOXU"ܷ1Okmg9Hga\< ovdb:`wn,gܚ/hhjy&]LRr }^!9gwPpNqܙSM+wEt9d^M/:.Ax8 8KYĕ]{Y?֐T~6vM(8W*3BK7ndPz˄?>i&ﳥ[ >>tJ!b\4DWphD`)B Ej!U@9B>G=uZnF`)眒Ha*N s>fgfV M$m%&CBd΀!orLҸ<¢qyͻ<ԛļO=yU{earW1 9AuNI_e(t $N]2N+g"l85{W`$GQBRB,)<Ywgxk8g-}PM*N> stream x]=n0 wB7'&%Y2(^Cdq޾Lҡ#zp:cӗl~mIY.Sve)mO[|,qAW)>|Vg6꺺gSkJ6 k6kŖMVq&ךUo/776l6hUV1 M@Rܱ Sěލn6EqdR D@! R"$"KE,i B:׌u |͖nK]NYe^! ķendstream endobj 261 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2457 >> stream xV{Tw,k[,8[+҇JmPRAVCI`xP)AZ[[^=bzήz;?97wodJ&r]'~L#.I음vw9PZń1J.J)3`ZQZ2prw2@~2,!)-SV&dR_sVzV>LܝLVFUn |yKW̪i@Q3_ ޫݨOڵ;YE6SSbUʏRST,@S!T( (wʇS.T,E;'|r>mM.]縖ޥw<6֭A39JMtq`*-2(U Pfu@#Gnh՞jU[թm 'aixg?joC? l爹\遒^*[\[p&dcDtZ|tf29"4)Qk'ڃ%|N$,1ua`ܝA)@ w~a?ɾ#Q gpSAbj Kbz 7[.#]ieӆ߷/SܓRcƔ-"x<7su3K{~ ᳧AafAaZMX:ʉ;No=pw9ΖʎN"LsU CIUqZ2,ǁwhXsh'y1a.X-yP{:c6 _C &ua{ʒOaOĪh9=Pv<^,mZ((⢊ 5 Uت3iIυ2sT@JV (m0涞 u,nC+x[ٷムLs q9%Ymlz2;ҥWZ2F+ }C ~p{t9ޥϻэBI186OB~>,#oa;:VuX[m4J)tei*6W(Q!t{@6NAvъϯ|M^Sw СvxLNJIwF*byPq/$O AL^䮓ȷl݊)KFތE r W(Kmfŧ쇜i@2pd;pcϹťT5+B Jvkw@I6*d%.iE[S[c Ho O#J:b()lNMVVq-{]h@5r{ u5 lj?.jWppŋSQO.Аnh瑥/U¬hwJAoI7$.$7J:-Y[w)%%g/\;}Y4|='eY00Pj2ؘSm. '/&s[&t?$YK;G0 9m`cSv=嘁w+Lєͯlam2vWNS _ymfT3h\}6vj55&z$(Лu:endstream endobj 262 0 obj << /Filter /FlateDecode /Length 162 >> stream x]O10 jBVUAp$@w}wYvg@>%M/ 0Sat@vz"/粪zCsHQHQmm`wn Z9%Gs&#q*MK\1 >_2S4endstream endobj 263 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 392 >> stream xcd`ab`dd N+64uIO,,MIf!Cʟ^<<,%={3#cxvs~AeQfzF.THTpSJL//THKQS/ f*h)$f$))F(+kasL1e5|`XP>|Wn]>+E3|vv֧˾ Hn;;w [zwMCso?$Z'oͶ{ƌI-MɧߛO^-ym~+9"ƶ{)w1bk=9J=sy_er\,!<'M3gb_4'20BNendstream endobj 264 0 obj << /Filter /FlateDecode /Length 162 >> stream x]O10 XЪj8(NߗNN>ˮGֱ4%"@cQ`}*Bv7ޟ@n]O$RVBoh)jI4J 6OmR+gh.q\b$Nii 83 55S> stream xcd`ab`dd˷ JM/I,f!CɟL<<,/={ #cxZns~AeQfzF.THTpSJL//THKQS/ f*h)$f$))F(+k9 -,/I-KI+)6d```Tg`b`bdd˾*gsE;W+he+鬪,hf.+)KIKh/\0Cb۔{uϕ޻={tOkywۙ}=lgrqpn=gNd z&r^endstream endobj 266 0 obj << /Filter /FlateDecode /Length 175 >> stream x]O1 y?E,钡UpC"d'll.S{Z቙:lm 58@:Aeu¢#aU;"=5~ }]uM-jÌd\ )dw~jF(2tFUp B .]_N]1.D0ڣ,|_ոƢsZendstream endobj 267 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 661 >> stream xU[HSqqN9֍as*IM{R˼^bJrm1ٙ~yi2/)RP0^FA?4K|ű8 bF0bm&YPe v3gInڍrH\dTH كv#Nd߅q\Sn4[tZM1v3]f;2fyZ0bcXNۢ MECkqW5 k̵0" q=Q< ]EC8TaٴĩV刎V"3??þ5fwSGՐ]\S< o0 ~d00Aja"*n)$u" nw[(|Q(@?^b<}#j5<-C"-2lBb QpC=!mRBicdsP*$ |M"rHZ)@#ZDvv\v9(7Rdֵj%lt e%"^y}Tsp;MO]r Oxz= #b b"d;IwA;Gk F[ˋ}T;1+*endstream endobj 268 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 495 >> stream xcd`ab`ddM,pI-Lu JM/I,EW&8f!CgOcnnI?& }=@3,J#YSD! 4G! 39#(5TG4/%H$#U! G!'395/9Ua ( JJJb``` b`b`zDՀgv~_\ۖ[{nyE\x}Ƣ؅7Oi&mn̎I-%JٻK:[Z:s9@Ab.o3g)S4!7CeRE6}ubnl!*볕|{5Ԏ+'4wEƎ:?5e+94&=Y3{4.!:g4-ZHA~KN{sXvtqޅ}Mۋv;%dXV/X6eS㵛˖]<'8C@1endstream endobj 269 0 obj << /Filter /FlateDecode /Length 162 >> stream x]O10 )Pu)K>:NNI[t;,ڱK X&= Eu0mLu@vw=|ե54R> stream xcd`ab`ddM,pI-LuuI,IL@`?0eGk7s7KǤ' ~O+h`d``XXZXPZP^ 5/9UgK + \`h`F1 L,B~*. OM%<5rʕM 9S73w|uji{]ݭNkՕtsZ/],wA6M1ْS78rXgp20&-endstream endobj 271 0 obj << /Filter /FlateDecode /Length 160 >> stream x]O10 H ]Z2D! }I[.%Mů Fa:X8 dw z&T*z75O$jk[Al#0ymw(Tr48o1Ҵ4CN9SXendstream endobj 272 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 265 >> stream xcd`ab`ddTM,pI-LuuI y$d&f!COnnIߗ }=D00.Y#YSD! 4G! 39#(5TG4/%H$#U! GhAj^r  '( `hDF6.&FF_>|?s/|ǯ̇Fﹿ?ZV7l;]}"k+s`=' }NPgendstream endobj 273 0 obj << /BitsPerComponent 8 /ColorSpace /DeviceGray /DecodeParms << /Columns 651 /Predictor 15 >> /Filter /FlateDecode /Height 608 /Subtype /Image /Width 651 /Length 1544 >> stream x1 Zk $DHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHT> stream AdobedC    %,'..+'+*17F;14B4*+=S>BHJNON/;V\UL[FMNKC $$K2+2KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK`" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?,jjD#mFD,J_ O9NEAU#~,}}k 9}YFoDbdbXuV\ǧZ-duPЃϸ:^3 qN?:t榉Eitd ^7@{?QIVڕ_2++Oy^?h` R7p;?AH>iuGU^{=j "H~3@~To~Umo"Icdk"Fp}?PKVӬcĖ!c7OVݜXqDfWc nIR:y ]OʍOʴƂNmZ_gHFH)Ut7 smpU :J@Vn ?*7?*umOʍOʡFwQ&n ?*7?*umOʍOʡFwQ&n ?*7?*umOʍOʡFwQ&n ?*7?*umOʍOʡFwQ&n ?*7?*umOʍOʡFwQ&n ?*7?*umOʍOʡFwQ&n ?*7?*umOʍOʡFwQ&n ?*7?*umOʍOʡFwQ&n }?*n88 P\g(G"m$qGc]_+/gG+/gS:jj̪5E'#y~Fbp~cf[ܘXV+eQoeQošZ.i_.I*g9w--]4]r̬zᛟ3OmUQWq - -`8=կOOp;WK - -a֭ޝ jn G(g>!3'BqO5fkx3K{bW$$E]M1#hd2KY$o1*xP} WC@itvr0y돻]z|:=Xo(6_#qA+rSV]e{kT&L njW.mmZWuf,g00G5-ƎSnAeِr;g#a@>:dF}ww}iejmIwwێUJ#FWI24cci sZ3wor#ImAIH%>\i+kWq[ Q<2Usp!/$0G{jX 9zTn%bi#ΡFrA}+BMf4, ?ǥ h.o_IxRF+bibdW7BԊFP{q̚M- _-ڧs\/`u'yZ 1ht՚:Et[]@'c7s )-4eM|'rEpjv)q=Vgi$m;9KMJ θn$g#[G-l[́]T0Cc9-7J#YLhNr68_x_]nqspֲ̛vly r ֣:夗v\pA9z5]*[hn.n5Th+[IgݢW8Œɡ4Ga}/ݒ2*P݂ 9hצu!aWe'y=Tt}Z%O5PUd 3^"K1yT>Qq;U;\;^hBl];=u QEݬF(0ZQK,3@!#֡HoˑzA~G@㎀jFCq{|af,i&dz35.Cv < j{&;"\\Csy~tL26AzUMCIL\<ˀ$u9SWG^}ZI@9*{q5ե.-VR42,-̿-,Ǚs?؉J,ۤV1@t~dӛk+Fp3Yv,Rm//B] ;Ճ}EyiMWİsNqVm5ByZ3EfwpOihA%[ dP3)Dkdv=BQ^[(o1UIk0l $ǡ!B|BL>1[V]e{kT&L nkrn4utO$ .̃8Ͻ RK'1xL;zze|a-EV 銻{w-Ë҅be 981V"yо" 0r+2#<֋SVoF{O5crU8eϱZrZ*o+-q 3ۂ +rK;k+F*ᘉI:rkS.R.^dN@$Gnb,qO=V4[LRnWPId`e:FfJAք>Vfqە7mb'%m,gY닻WJyх`qzՍJ577Uת9cH'kSoZ 2y`Jݕ[rOΒ>v #6|ygsFe}hQ%Y] >;eLEM&SPh!1G8Sie<řke0dpH\r*zu0]p兢IUJРgm<ܴm:&Ք,tzTIKP|`QI֦PJ堹|U|rOsRR'Y vT#Ц)^+we HYq3䌞XTͣibV`3ῂ}2 T1O_jtwkt,FIhLImaїzvl5I0@d,n8ǥSZn6F+k d8=1W,uNdYB9ϭvŽ\4ɷ,q84!֧k و&HqfPԳȑI&#s20۟YO ѽWf$)#5~moumzUx4kh%HcxngBpN:п_w4@]ƥ6\Zi/_1uh&u0{K#atx69 КK [. w'W^rN @KZIe-.$G mB+ZP[K}>o5c<QipPM(H'M͡V?C\&Cb}2Y*[M~iiDVRQȳn!@;VՄzYy96 z^h:[Z[y&f T$BhwyV ~ieon~lԸ7Y+4Z<N9Q K{8HLO.Nz/Fx,7{\Upwt5bZWa[vVtgc]܁h̋|ʭ?IPYǬc(>RE>va@%=h`(,y-"{VfKw5uq gEUInEպ‰&!e}U((((((((((((((((((((((((((((ϻգEoqu2(gX$}:ՉI.8'󬵖M+Uymn%D!B r:}9n!71B\N Kar0 S 5ݲ}"Ϛ\mץcxcyaXt6+7|T}OҟoSe bc!'/2j '@AӧΗ@fk kvisp**GrcҬ.hlkE HFNX\og<*]7I~U-d0DHB2ymy_m |g.6Җ+y)!+5`N\n>?nZ[Wr2 ݱTCK`{n.`̹8c7HGj%RQ|UjGX]o%ռ*ꉼaֲM4p\G_7dF88":swڙ K>0S4 9M۱G\J[$jv: ?!M[M,On .J䬌1KfOFp 0GS떼k-8I<ʂ :[v[m)<D>L rV=niL+I;|{=;7êX.'`Yc8mA9\Ze(/i RPpś-U=f9u\DP)7gF.uW3- 7phe 'wQjMhobo=Jٿ4}$Φ;Kin&$Gbp?x w`M`u.MDvF=ƓyVP `lZ]ҳv"! Wk.O#YY>5 xPᑲqi?bӱی onz#*+{m s=G,w}z uǗ6=D' |:ml7QEs^',D]gBji\KCḯGB'!I)> FH'ASja_K5]pZ\ ϲ1߸3Ƶu?.G^޻==֢zj6e i6xq5j iۖL [I灝_zk[XZ[rX"VCgy=SWѳ[KU'͍c?뗸m|M;_nhi#gۈU|UZ~Sc=),⽴Tw }(=WNR8=jQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEBV%FdˁzJAGzo5i#e[abY-@ r:bE5P>2v>Q}V\N"w3`¹-t ϼhe'=O2qO|qג8|7$^]MA(zJ%YcYGD6]̻x"h.[b̈0$yQ-ƕ6 α d*0q✕$5m4L7S(3_kNa:Kql.˂Fg]- ^+;eh#0V+T{hḝ$S۰H|WC֤%oqhW;;}x]՝ Υmks$*~銒z c?[=i-dp˜Zft ܐebǻ Ӱۉ'^f!x♎K<{,sF QʟsRWg}!KiB; @b0R^[I"9F Eef5Э̸31OVwhUY5Vա_KkmD@ux [m>DOjΪ~ZIu;۫"c+xQUCp [pr;{km,O4YƋ1<8Jn6ru6<,Q'f< V5΢ c9 ( HeYOSm.ཋ͵%%w)@EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEcA|ǦOE6ee%hIzJ]^m3Jn/),{zԚ#4 6,md|-lh[ZiаFNX+7V&ccmZD"qmֱux<1s`ȏa2|îX͓_G25V NG7ۢ4f4s!;XpK6}F*ƙwnKTr۱ҋz(=KUԌ ڻ%d' zC7(=y-g5y#y o^s`֖fVfA#nm\:W2݋l SǵL}f vd:{PIz.m+6CđVW=! ey@ӜUF+v Y36T`ZעG_Hԋ\Y ^kzS4Qr::\ )`Y^[YXD+9y*SMNU{cFesv(utV}-=2k.Genx}{{n e$V$ҍڢ6 GeOʡ.m֩j{<.B3v;zQml+s^YCȬka$~)L!f2+) rK}okS$% gZ:\}ltW=yhbUM9gIxnөWWK y ،.rHJ,6(889X?\۶VK% ȥ߀Ah{&[#E0'ԓ֗Mԯ+ny6YJA9i[Cn*nբ>H- (~| _1y(F&FBx%Uy֤Q1ro- eTf=} Z+^jc9Hr$04z,;s O,06A9%aޙc[v"*T݂ 9%6ίI`B-; ;V|1Lb򅼬!;PSjbmGύ#2[ +>.yy{W+wɧty5;T_թuy}v1}LHZp_sa,~Z2ȎP)#sNqUu{)%QnIx lg9t [ ]V i_7|wd.î9 `~5OZԤx㷞V#rfyw5)/љh"֮R(E-m>Xe[^+7ՙX0:&;e421)9=*fƲ[bFN CZpf i%״uoʹ rO?^),݋o(hbm>W:Z+ h-Y)$g71~ޡunH!A:_Kqm"@IHؐ#֥5[ms24  tEwnuGMrʤn%MK7K2D|lrT J+ ,_G "A,H䞽j]+Y) N䶖?( QoT;ƻ}6@Q@Q@Q@Q@Q@+Է:'8PQN < J EgǤ[*mm2Nzuoݴ *aƥ- ã#YMwu4rmF] ާM[3:W$SW(p(XiaaXvReQg&'"=v1;WX OjI87܉\ 90sТ!±GAc)FX$Ou V( t7>tahJU'?Ga}˩cUڱJG̚EUQ2#1OR=jQEQEQEQEQEQY5$H JrUYs?ASjZxs 铒?ƎFu+FZu<펧?So\peL+4 U҇kc>t6q8M h{dH/?784=jhYzwwQA[Ld@#@:(tkWū[ l" B7O|bnux{hmn A $jѢo5[qiu)Z ds(H;ARXF]J#I" }J㸶+;@pN`vt{.$>>*%X`Y帘Dl@h70ʗYG;:ĸnOiVuth-^Ѷ*Cw4m^%)dKu}A ghEQ,o% Ѳpkis0e!7FpHEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPY-le?Ztv܍g6:[IY$S+cCV]YeqaW (`Ǡ&)˧L 8=3a\>+t\ [vOpǎk4gFYQ[^[]{[PpLnʀ1l%3'n6wiVrY; 5Ȼ]B ϥib h,utv@ ^,,\$m'8J})ʓoqiss ;҉lɸr=*mJ?h>Қ*͸`qxǽK{Vv?Zji;cg'u4r v#}@Y$Iu(6_sЁ̰G!.v8b,U*o}E{]eVezϧڎcE3 =1ں-R=:s>EU;zdNy-݈DH;~c˧j^M4b,Ͳ+8bĜz[1hH1[$AߟjЗR9͔p g;Ԛե4x='N\ 0"kKYRtq+~RǵC4wܗP53‘**O\=ƛ54pU9M?jfqy^b9;:ἒm:.J΁@fm-bM(>-*A 7Hj=uUdaRp,@UXI~ GrFI62zҮ}(Eu\}H$~*C,bz0?n?oAo8K6|sYݍlgꨡ1NG[d鹴Csab.vcO>E$^V{v!T'RcOF3#\=*жf}ƙ V~fv&cw%6,o(mt*h)HJy޴./V KR6x]5n*i[?VMOb)o.}hU$^zIe%x 1PY\jp5rl22 jz{9 ;A i/niiFbMqM- QE!Q@Q\K0~q U6_o<_jtڅ04*D$1njGv0fq9 NÌsQk[]o̪w1`(JVenLNPH*;msO"v!! D=;PY,\\:TsߧcǵG{ʱ\LDn؈@!A4vsڼI#^Tދ.䯯PLIJǻk TG@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV6ra89vTD{Ѵ[QX[N -ZO1v'](km&A 8 MsZiu}Z=.[g͘dJU0~nvP! 7fAH!{]1H *~fw[*{L_s.0zg ~uQHg0 7WH&E 稭 ku-OJk&-/Ȝ@ oj#8+Oo2.w81?ձD_ ^EIzg]=$Yg\R :r{whf:UC2Cvw1icMCw1Av8I$Ɵ쌈"f8sjvyw7ɌUS5eY]C#V).9zm:H{Iw?!F?ZECo=Ϳ9^qձE02J%:DWyylf6zrBoj*N[  ާ##08secoG#1q'Z緸uKS({@q5  #H ]"V+ +ſ͏ cӑ*mqV"Hbb}} *9F8# :jzw#[VKx,i#CzzЊL5B.<2u <{AE 9b%lmG1Vk\ #h OhxGUij~p?L:O.=sy',nOEPEPEG$n6ӌ*?:/8'wnJ4YKqץ95FyQVB `\T-un+4*N~4]BmndV ~,U࿴Y*H5+LP^[(*4jB'c2\S.o-m67pdsOEVlv}+JzjhexXdI#at`A@((((((((mf[{w33+fý[KY'K+=Tד-l6r;dWh ZYi rqkrp9ׯjmR5,LvbxM @=WT!GPXdPZY6@[yQkl^MxZJ1~~^^ԋ^I{42~6F:.:WKiz+{xnV aYyQ-ow[ۥ̯$l@i_6]q%ndux*EU 1msOɻM[E`IJ)RœϥtY:-20X~=j=BH /,aXs_Y+BT),I r3Y6ǥ"2:F* mqGEc\v}>{f%*N#bALbq2An),ćvv⺨l`TXmcb00H5G4$ΐw}B n΢I 92q=^-LӉ%!ykz [ POIogkj [뎴ehvte[T/06*(n'#ҝs6{+(RF ,BdIo\A'k|cK>iO_ûΈ~L0Mk66yⅡC!$#(FcQ#&m*cS"P6b@{iw<ZA1—ܞkme9R**1\\[Aus sGC-QXc/`(8P9hz3GdI7nrGV yBqDQAp69`:U,Ȭ dv;aQ׃Ch҄@Em$V_Xw2IǽMl۝Bvf;ʢ6Hٰq[$!єޕNe")|.HOlgwIY2Gx/qC7gNr{f%-}l4kox_25nY鍮]<\]˰.퓟~V^ [^@B9uGVSU[y vo]o\[[,ӈ3vܐqUS][ l`G%K tRѴrȌ0UA)ֶRBrV4 3cXKQ^CconQI679Ǩ~uWG cGyH"?.4;Q@Uk+M5WVPs)B"'5egUfp ?-Aɨ_ڟqn~NV̖vΓo̟vF@Y~U{X%~aHlw_/&=ZFYʨ;szQNVԭkEm]53ʏi<v$zgӓ@tZ\yVl\$qEc@*OMӴ<@>2kx*p14}Kyo3c9!OS3< 4NFݜ{v+W;ۋR7@2K%gOY7 ;,-{+h.)GH .O]i- y3mv&Cdm5Lc-*w)ga4Hх\Es+ ^In}\F.Q8EsobHaMFŤ]d|cBQkztW콬 v %.ơcʶ=N:rkvEMo GU*(=@~z|WKqY˨6ǩ OVvCjzMg\4k^YUl[v{Kw}o]yYSXԙ2$:c=ݛ%b@8?Eqgedd=3af= k/]JuwfQ zETaT` OE[;*}ޮJK]prܷ=wY&sNb4@Zv}{J]2C ^[2Bb9cv$A8<ŪG#N Qn6I C5t AKu3uǿH6^`y* \q7Σ"+=I+J NW3Z_; *RVB?"45[A+ wd@25֑O1kw*L7;@g5r( w=O@ Hw:}2M*dPv}m* ygrvR؂ u2k㪛1p"Vh6bI }8V%Զ~U_/~˭&%]#+j1$1$Q$>ԣ]Kjl|%H߀r^Ǚ^11'csHf0(5.&\9;@s'=OM=핥)|,INcMN{c\H+G0olѳ]CB cYdJ36IN+"֥}ign٘,CWgW}>)L2* }8}39 َI,rO閚yvIXjZj-ZI![+`j`qt՝:M E_b\u=-gkp'ۨNHzϞ˾ڈv@ʞyK*.&6Y i3sf;]=yR KP;+/'wQYQҡ,3E ;@Ta!9 k8ͳqN2= uͼWP<)Oq@>(W-=c{;O<[JT|l"PJcZͣXڴnЫo]OK[T|s+O&q<͠Bp*Řg:T|1ZK3^M",T!9 Z:U#m+,3'!Ҭ(%rY#m$;sbiZzB) 2!HJ=3]^Bc&Sl; ЃGD0oF ҇Ѭd'g߿W)nvERQEQEQEQEQEQEQEQEQEQEQEQEQEV~>Ih+6hUYKTR>Y9%ٔ)G֧(5[_[nٸ1?C [֍YWsP _gXIp#X?SUQki(NGlsUXom]H0FqUqw7qH NF8+.-Kr.f 2NOЂ9HA{RaSWtvr~my o^&5ckHc.[WtȮ3$5HR;:JeƓpoe¸s<`ĮRhrI&'۷?vW􋦼2͵@hH4sh}282?^1?O+$3IH,=(QHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPTuH|ߎ*R!5J'yr_NJl"Ki&K|69=gX͵HqЎK8̑[ǑZ8b HVФQ(RUIhOjȳRb_[&V^z`Veum/Q?ڝΑ00Ku2mleqz5~G D$6>'AQ iro#8  S꿮gt ŖHa0/ܨ9">F\=vm%ssAW!'vDS+E$$l4CD>z-\NN1֗Bvg6у*I298֪=)t?./ Yyq"g;T !c]L;$+DeioNݾֵ*e$7gn1@V=RUYmI6̑h? Z8ld>`=zO%fk$R6P>yE1Od5ߺH >)/ DS$(O5oOwڮb '55Gt 4!O˜2:oO$Q egەbil̵2O?28$.9hiGyHDnݴ``=U@w`l&xh#ŸKs5{knRHPy#up F#{5[A^\j[g/mOn:T;_BXnsu}w [ch?75YPYZ2Cwdr1T{6[hl0I5]H6qgX3HjK 9-/rne@ ?f^ v}]r8h=܏= έYE{k Z9A#-ͽ [D`R@TqlX-"E[G)3POK*p2ǠCvI3Z\Dɟ8]# Ѣ y;#³#ѯ/- 6bEb^>]C- r駷c^)n+#]]̪9Ǘ6H=}N]( [ɚY,Le8=(O[<#0;YlvN: nc ]<5ȣaߌ8ǭeh6Wn%0%RG!`sZvwW`adIX`)uyCk,.'fxca>Jn'V.ճIa$n:imw`mRsp yw!3\iKv0Y֥fe}FC3p3zK}e8f} 7=:blfhWS%7LpV#'<ذUNx A\W%Ԁ\g1FObRd|g:Vjip^y{b#,>d=ǡ5b\ vz9"ށ$˻BZ<[D2Ff]>za쨭E& (((((((((((((((((((((((((((((((((((zj2*nTאW3Yn'#rZ䣲2wR?Md \g֩c[lͻgy:zn'7QNkQT@ H#Xgբ ] m$cP$Iao#,R@u'{ -s|E ٘JZF'?tK{N#tz&ͤc#RY{(ZYP#8s=+;"+x-b)ǒtR8@vq2[sTֶCA$[\MGT>2~z7M>Y>Gp#=wt>>y4.mg}$ruucHFqRfY6BFZPppQ65-F=B,*Id3)#2xT?!t~sA{7S2kǚmmQ+?\Pjʴkf.BcnUI;ˊܗ+;οP&5y`9=iF2%vG9?0tԏiQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECR+DWꆥW}7EPUt뇺y("ic}FQVLPh&6V+3*ۢy:<[l _Þ\ VьlA@Vyv3Mml$3+g-czf^i6t pυ,O4Q\M&o{/5?k<\agڵ49_횅=ͽ# +?;_ר%M&vFfy;$P˟B3U^MbK%dqO{PU[-F[vr^&BT<5l_OY3'f\sKȉ YYYpONW{wtٹWI~2oG~!DNs]dvC"I9"5'>Ԗmơgk"sw20Y%U'&5=j $l`nn?N)@ a'΍fVm 8kzבYy9Hќr_ (M:eWg u0 ${ (Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5/ҿL~j_jQECD9?G=_h;5(%C4+5)!dyg}hVjeƨoT~"JeRgs}m|$iY`$@ Pͥ)֩]趷Sڇ(ۆ:tTtpYOuFRFo@I~19]N[YZ9y#7TcOJ4o`lq'催~\t4juƇ,x (v 3ϥhs=ܢ+)@ E>אY}wsaui"NRWE*Ѱ0.!FPzA="<\0# Eέ%tXɑHP $懻,,EzϭFRR$Py e \dW1Y̯{+A0Gș>K\#) 6{+[DR?`LMJOim̚rQcV2ŁqZ -M"q$RG~]Eֱcl0'tƢm*d%BO>OV[kavTVoAEVMVoْi>ѵI-RҰaOn n"_3 N_ >ssDZi 8D 1ܐ+=f ;Q33LӢS3گ[]Aߛn4hEpZN4FU`* aol,''>쌀QX4'(f*7>v'Erڍu-0e5B0HG۸ZIsv]>iA$ˌHтjY G9Fer}CP{iu<@H䑜b}j,ZTG+1P~r9H}NʌJe+ђ=3Q=ۋw"1NSx,R2$pǷX^$XWӄM{baUR(}߂m[đF:"(P?IR,qgp?\:63{pV9w0^z9Htc;22'^Ê+QE!Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5/ҿL~5)H^fGA?֤йE U ^pʞIy[m<҇wkր,QY^&iFgF5!\TRI5'7NPٷ#ʮǸhT] (%9\g jYg1+Dڹ V7f`3lz8?d[oʩu^6ojmUeP{/R"rZUb?\/')vciVw4Lbr4goT=uf(c V&qkq-Ei f{zEhutm..JPdH~4tu/j$wDkq>] z6=sŋRNI5%YЂF z۶j out_%ZIO<6AE]*h!zb)8l$/m!yTe'jqjP-m-aX-dI.IN{jҬ)"h~Y% ;U(kp"ʁ i 5D? }i#RLyo.S"-r$޹s(M3Gi7KzSmk+x8*Zga<~~uK-`Dž<>"gIrkV h@ hb3"M&rqךջ,']$d,=3(兵Qu#p <0ik 1\2fh'q?SQ@J{gh2xbsbci F_19gg,qKjQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECR+DW3Ym$pV"32vPI?-P*ŷ;Z̻q63P{iLWʞrESmnnn-*="v23ק^JYNX[k0qh\O24i/J1.I;t.$ LxJxM:\?a'jc(r2vcگQRQy/ ۜI;ӯn)׉B鎙"h zI2@ U9ev3 @hEq0ml#LҶZ\^]N2Q(Yn0]*W( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ((j_jPԿJ2(Z߳~>lg9m.乂e16(.=x XfA4WJWGT9M5&nCsI'Ni EjKI>`W)"gC6p.Gl[R;mrs7x4Edxg9ؤRȃcq,s:0S܄ھqsg Z+:VX/ v73* B9$zVn,#iw eY2IU(b:H ]~âE̒$TpxӞ*Mg_L6ff2l2[LadY_%_ٛs3")YzڪjSF(R+^Q n@$?W $Fr(4Y\Y=Dax.ysew~B>Z8+Ek[pgc` 0\u6u+eU(Ty}-t %Ԗ9YF“1v8f>w8nu c쨅U$xuدu[{9KHLl0A drzRlo8J`K(&3C6ޭˢ޴3$`c#9Ϛc{ wU~Vu~kYN4^G9'?>l+)X#<'5{;k5ζ )!X`23bS\Xfv 늇T֢m"(.7``:uHQ9m,g|D*X.sS[M( 6bYW92y q楛T)呑e8E1.7~5, #l9Av3CDKKXe#! *M7L̻YM[5Õ28Wl/Y1Ew+/ (XEQofwQpR@U((((((((((((((((((((((((((((`}2+XCCRa? t 5/ҿL~(a? t w-a~7yQݎ֬Q@!Kx RFpipO?@jeA&/&Ĝ:BIq\C6|o](XK*d<UNya2K3\0SJiCM+HA#IN ]x'5E 05k+lom+r0 v隹i$&_9i2{ǭi@Ws-v\D)fpO,}*ւ#nXC%G#ӭt4Q~s>sXG,B%3<tQM+QHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP{8oV5?zʐz?zt]_(c[lͻgy:zn'X*HXʌ:¨iK0K6cمvF@[5OKKgy[s c ++d-Ea q)ƫi-Jqa+\y3unQO\$Vtoq$NOIl`u,Ѣ-QP\go%1}MET`fX| xfEPEQ[rw؃N @QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEY,:j7P"@y knh'}\>?n E+tkS2F.!2lػ㧵vP3j0m319cv|Ja"\~Ui죞陃n;i ;Lܐay\{Tuy۞ǷZ/lo:[\_KknX|䓓qӚعGsS 9 "lV(=2q^0~HeowMpwHrcpUGy.l'J6G uuSZ"XY}ÊX M GC< m[m/Fm۝6$` qiow-͸$aQ=hArQc^)֨R(QJƁAejؾk}-ԳKgN̹?Oy8!cFT`*9,''>쌀QNlrwv};i$ :s&I<˧8[H$q0X~8K$H#g(̠>ޔ17Y\]kn-c2s֙M-:2xm\[ݠK"Y0jދku=h=p 1cA}LWM6(_$jg &xϵjhr5 U{{wO.G}2Ww|Zi0m O/X jݽ6шEB }? KER(((((((((((((((((((((((~o=M\=cVcV{Q[EupJ0`yQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW]pɉz/M,Bnda┈2z6`GCT/|%XdxQF3ϱ* ¨ԯnRB&Y UU`FNHXIDa52V~uG|Hd'˖=G !t˴bs=itaƵDRډd=iw{i{5>`H#e=39ţFlus,21\c皺lm]2l`{bZa--sK֮/"xCE*,ҧ@ qU.QR+X9XʳIpRAg}tNX2'z;i(6p-1{r4ԛė͸E61K7OqR]wkeaK8=NjΔދ`F@948.O:8t\i☗S\M-K<43H^OC4*DsY72?3"7b~,v@Ns.`R>-!bad>Ii1-.%i縞EdoyR3&}ϥ1U\\-g N~̩a=A]}dɠ[=ȷ_5Ï-9=ocZqss[yG$lV?6dqֺ sgҹ`y8#΀15GQ-|YZHn፸ik\Bx@; pGY[i0v){i\1# (>kC Ӟfyq4K/27H$XsӚ c40D2t@8k[I޻A)iv)Y$S; l$ X%<|VgZ)Kuss*!D328F (Š((((((((((((((((((((((((((z+LOC}uΖ,Vi"pGu;Y"=Kr8ԭһ#mI>TڅXJb'ޭw?JM+\n+]Z*y9RQqa4M{_*uf9.eFF sҩV$X4k'ʙ1ҚzWî;ӯ~lV}ǯG,2yz?2̡^2sF> stream x}[\q>>6``]5y-#Yʰeiflc1VbVU7g?~K9l.V}'3#2#2nyOgnϯYM,;WϮc]=gnrͳ?>sg볟~|g>} |˚Yu4pg\?[z=n}t=~Zog/|sJO\<[|Z@.ME:v~ͳU^H]ҙg4wbrg;?L,DSģC"WϾ>j Ѫ|ʐIL[b2Iw/S4]&NCj/D{'1G@=? }a0д+' MYNۡZ)2mU\K*VZXyJYZ)2kS\Y+EfI '޿:c{_\ݲg]YRʲw__S"Q!}TܲLʢQψY2[(k#Ę~l"kX^ B9{ǿk4J_cx02:o-R~0Z7 ѹ68D%Nl..bw(Z,d9dHn#.f?EeV$(RڦDEW""YZcv"E6*HKHW$ BgSDLq|z+ixOr^ĢrHU.+#n YH9'ߢ$kC{9+RɊd4oNKF=pTY?)mt(/ET!҅B a Y8]$#d1#3C2g }dӢ8g"QNy]f% RFOl-r6F B7+'#t 3ECoIf"rV U լVE.`RfrI8HnJW+&r֮ =k]"epN0|pNb]HݴVl-XjN XatA;UpSQ$ luzVg Qb2أa4H=\dɂEY`A(7ċo,^$!fu" [\E:x6=%^$!ڈYؽ]Ȃ_ۈYp|ċ,e.^dɯcYp ŋ$6"~ċ$DjpEExց/cDE@D.`ADE@ ErAH~\L/rڳx%^$S3/)էċ$ [E"IgBE~ċ$Z"yMQ$s,^$!~iQ6)"Q*n :g"gkr7ċIX5ŋ,t*ŋ$ ŋ,ѬŋQmuxdnE+tE"ujۺG"iٳ%^$Yjkq|q2F" V))"r!ԑ^$vY`Ջf^$0֏zi-QHo)!QcQHx[C"}zQz>@ԋ4"ټHlt"]z.]EՋt"rẝQH:Yd9IԋtUBD.!銝IHWl^gnR/ ԋtvfR/%z.کԋtFvzt," dE;&D3.9$HlHKHBE^@"n M"]ep^ܳ$^$!a sAJ"9I$^$GՔEr,N#^dZ?Er$P#^$M/^Iŋ̭DELg"E3O!mEr,WG/2ÏTk&q>IH(нYȌYH \KskϚlD˚Dv@\$ h.يH|IS.s㩮j9A"ў5,6"B\dsDJ\eB\d7ɖ?[."xX.r_rVX.)\,mEv[bFEvcrj.0z\aUs";4HgC\a-jc-)EF &&Us@trfTEQJ5Y-_@蛍jgB,GorZ5YM[hF^ћR5\RjPͮU\㤮5 j.u"B\$Ts@t-49,B\MsZ#4E4 +F5KWD\' Ms$4E49YBG5KT#4H=F49t \rN5th珨d#<9ǫ9i՜p_!eksR%dȤ2!g}2mud.Є; [͎L:b &qOVtiH[VAixO?meȬUl*YLZMgJc~PO)d/ gM4UGۤ %°=Fa+$< 7mө=n#&<1"*U(Ԉ2(xڡ!dXZNG'E% ) :r&XOX᤯I=;"C"*8"Rƙ9:[#|foDE6?cImIC/uE= lgT4s>T|Rj *cYB"JizNoTy-|ՠF36S(԰֢խn6*:GxP)bj'gVq!*fjm|iú6\ۄt()mRj>B?\u: idk?׉7o^U?#AqgEҞlP%=W?zFXfsnV߫ͧcuQڌ(mso"WF$2Y\7whG%*4c/zܑBU*{!g7kY9ĸUU"?s*:͐5Va3]I)ZoDXļ+SڋVom,K 촪]jjio [=C)])cRM#Fka !qZ4F)MiWJJ!Zۈv 7Pɔ&Z"wzk5#WQt1zHݨݪ1DɥܳVt[N!7sQJ j4%Vqj #|oJiT a۽]cbn6"d*D(C޵=SsAv5斜* ъSˤ$1.Tc"v Y X9FmS$*24+'heoֳ]}+1BRIYEJadd"JUS$FY)5MT8 D2R] 7 }B F/eF7O2 TXn "3l,B$~AFO.Lw]k9kg;3!ɔv;:7ɳ_CRT*RU"9h!hmH[Ϩ >҆9D(E=WjV6X%vBnزIR,q䵕,jW*`-ssea v"Ui$ѵ5X-!Bi((mBi(8ֵEk hF*T'Uhэ6^*J0m,dFl>VWBB] W[eT-posJchCcXFR9EnUVGPW! *LWn 8E!JgI^˔VofFQJKXKnإP>T*Е,PEnPڤ2OkE H:8:qvؙ*F1EpHf$Tр.ܙ*pt%HHQf9-Cg;Qkѵ4[oZ_gCRT>Q(C*cJo'- Ϩ1$!qᚫnkit]+L`IUXՒC͌0*ڶh53$ӇQKj6GUլjfU,`sJ!]AU=Y5E 9 +3H^HPJ%Rj G.He2غBF(5>BFZ[k{r%uJiNTZ_3*ddmg&?rd0Y}r7RHRv}vy{sSJ(n[Yz'R"s$Do(/J>"v'Z)mRm )BaɪRܚ55l6親NRDEU+ iXY+Ek"B)vRѳPw*dvd4iEk5\RgrOGUIu}~B +nQw'YйRi'nJm67 Vm"Bit@Sfn2b\[qm0\Dي+e iTE.<`4>[q YsN ] I%^{؀TjRmX71bZET=O oӄS={YJ>eګSNWecgva71v JUj26'PݭNla mkx}ȶ SJT=/oU߄DYYuߩ8z;82#hh&UFd[*NmjeKqclwl N$lNe8۩n2]4@wLѳR|O6l67,_|Z%!- ;FьO**J"'\h%ǁșre5JuO_3]渳"yԗvEa"+7@WE v6@Ҹ^[v2"5=Gt1:NōZϢ7C4J@Vߕc7ήQ]% ,JZ bg7\Ca 5{Ke(5WԪZ3[ozqq)^%j ] :qT⫚J\+\- U(7OFf.p4k9)bp3"E#^4YxV뛺n'DFu>Q),ogAO7'YٳR:NFDHST-Ǒb9si$uBoEd[r7$wcL%wc a&3bFSJ뛝?x-oeYR*gD%KUuHmAtGepҸ(bUy Mɐ`5q O9Xe:rܼ8>(+sf$ݫXe|3"M}*ۜ]9hXN xɉ'kS}JiZtU|eu3#-a3Jͧ[FvtOo9j"FJ%!FuE5M2~RCYV$*C@t1Ǩȡʐ[ŔG]!RGRoT˸au(U(5@Հѝ$"}:۫EJ_l.$Aiq\Fir znOռyϤֽ_ܽYۗx%5uYno7K=|}q[k_/^?7C{.zگy^u92QTd/69aAd8#jc"鷬BX^h Denj&OE$QžϤEruZƾ.NMlCWWnft+\1.iďW+ʯ w7T7nJ8,\7V5 G<"qG6ݛ{s,imj-z{w7~ӳwī8F}}:^chVOz[]۬ 6(|a4!<|{C+3|}{`g)Wr<ԗz½3X=!g.#+Tz£5j[tlƳ#_,.v+;l;SI^--n&Z5s2$t_WWSRߥצ 4/eJk7[i ]qԥs^z 52$7f9H{BTtS1a\_{!Y?\3Nr4z_\\,ಒ]мvW<)wya%{uuy݉[W[`a uY,\mkU[m'~@11L8]VA]Yg<PvQ:dlj0 ;:֧w?{S y#/Y+ l<5WNړۊ`0≾^g[6E HI}ٻ#>2{ՉyC;`j۰'ކ !ȩKty4ق+n";Lg_dkC\'y2a>5kr%(jywjc%DĎE3~XiKD@ &ȿ:1f$c> rċG81*D2KN=X'>eޟKc&ocKSg.G7<\r-jNB-5M;6h'!?sU;!mʤ+2}b^.<y(E8y.oG,JOιiSjun&&G=Rrّbף 2>'>Pu@9 Ĵt7p\XHD#tOmq#bWw+vE!Qv{w)vg Sd~WN?®͉Q:΅4{z?6 jb0D327j. |Z@=/~\o'b~ ťϻ7r21 +]m_Mdr8td-Q ]1>ʍ5_[D|l:I=js{Ü ?Ngd\aY>WEgh*wAEsrsL %ߖ'\@ DM_XF(jkQ_]\A}O^ZKm`M1 >]}Js~gS2u΍Վ4=i1qDTd 'bÜag>oWi=h@82{7Lf`fBȢ1z}PqGEhp2߭g䀤0szD0jG9`n1[H\Gs@JCDq}9C4jwAO? X>vGNəmev-Yfad,fcAP&A4mqQR8½nCTKM7?Zu-iUnLlw=I' >QJt*.)c$ $%La׺{m헻Uޮ{cO1d )?X__ݭF3iPԪqe*YO&6J5s9ozx5osVa7Vid]/ΑP*k:T1W cW\|--8 y'*_fǼExυwQIwdYQ^G q{ 9[,^{Yp^Ndvن_2a/  ұD6 ԁ-iOˡ89Z{_򓔷HS1G?x$=`rϽB@ ZKJ>=T} #]|Z_M~>z{AgɃk4P|z;)HY B)RB:5i#ԒD^`,Br 9'F~kCYpQV_LSox*E ~FYQ-33וB Ex=zu/_K,@&!zzվ.~Pz{~sO·S-~ꒋJI IU)κD\-qʂt^ݽ&-v72*_h@/D᳞j sV=ok "1U .fc! dZIl>ףX_ܪ9wRN~>6Unow7(E4(ҩ_[7qq;<7 %Cw|3ARۄRuwBo?߼=i/KtϾ )YHv?J 1?8z'z9nSk}uw}3hYIߡOc<;tIaz޾\>1n+}A3=*^'4so.%2G| ۧ]oX#/eӯ8^ሲ(ˏtJ z0iۚw̵qWpʵOBL9v>$!F ^\>3eKU󴿗__wSxǬR35ͨ?1ўl92oɓ;ŧ.>;L[ND4\GLi1>|>J/mJW(YCJ .f}[I$MSdߣhAOo1yOQI19yi _heBz.!|:SIG=u3>F}Iyn፧byfo:(oss_I٫鴻WG'q#J>w=>9't>9Ȅ?}g<γ8~I<( OLiA% ܈,ėwl\<$iTm޾^18ɟ*dendstream endobj 276 0 obj << /Filter /FlateDecode /Length 530 >> stream x];nPD{;?ckE (Pa"N[> stream xWyXWן@23"47E_YDqATD %V-Em@Q"P, VE쫶VmւgM结X=yr;g9#D"N̘ vզ${.Dd! ?=2AaM!kKd--$ݧ{]]/vosɯ#D85z6MNJc8=Se4#Y,WhRU?Wu*>Q [ȏ UUzl *MʙOԦ)>^IPZMix5yIJFiTuFY >)=VS%:-ħd&~Vҵ<Qa ]F|:Ma~fuɱ:QoDr3A)zLd:UNi)zJKWLPkiͧbRT&bTǿulZZt~.Cf*OҚbb.EQ5G㫝 Z>cE̬`}|B*1,)yzyF8[v6fO8RaT5M5IS)*E-|BjJ-(* Rө ʝAfR`jBRJPEQ}(9՗({՟@9P=(oVJJMRćO ,Z-c,oHY4R-=/}-˖~0!lñGYV V_slϽ=ۭSZ>onamni^{{;m` 0 6׈dFOSex"J+}*Tl@ zj }7\8cy`- 7[:S23&f|͊W=2z{6y]0=XX_U_Uv ]F$\jd7j Dgӛ*cNF,K n҄O(H;oW/ U-U@ح2 b-Y8a/G,8%`"x ̑deqg8FO֫WnQuG}%b/a9s{KUq/vx ȱPt¤]JH纅w#W˔+vfJ`Xc_?Cebjh"`M#؟K,UA#adiR#d*nai r`q]|6t:`R$Qd!tۃce(0/Ƌ4&`8Pg3k5Wqw ۇXhbbE`\8;.:@47's?^VP@ܜ>brAQҴNg53v[N,dH&G-֔.+wUlk&ścvUi\o9̻re؛=C\>Rx?c-L9oAr \!&B EC/myebS 4EYg ;9/[|s$\r 7 6/k_u&YR%5=2FCl YJX6Sb(spSQ@z{I;.s9;@b q= x צ#/c5:V3 GDp;@?Nn^\:Hqo[SZM,lۋ[fn5e&)a=.u4D y&z C@ ,ѧhj^{vMuqWL-X! 6ۺʕXAIH_GW[cP H*V+>[-%@2ɳNO"5 D=_esY59/ nK(gLqc0#C-x9p0Hp78)3Jꓘ 5[LK W [}L j}o*%bf[7P'cɵJ3 Q2ԪoL,O9djX00 a 8ԘpL*[lYܒ(n,JfaZWUl6v_q ]^є\xT!q`هR"9C6Xu`ծtF9ڕ>^bC bM$+#[śڿ-T)AYL`Zà[ 9Ժ>fQģCI9zXvi*_"JM3bN 2c^OP0|D̾+1]L9\8sYSϧ bPeD͖SSsmQ`)SfbSYH`SDF8%jһeƗ#' #sC\xx!#i 3u<2Kb]]>RsUP]lBb;cz6/[UjV79= lcy=A*Π][J֟^s,E!KBooTAtC 1GP> stream x]rP{Bo@0d<y.vG"eޛ6f.VoXK}.ñS: nmXYkou؛:<oS}_nZw-y.LJ{> stream xXTTWp u f{G ]AV Ҥ 栀(H"*M@@Ql1[PM$;1;b~.59wo{ա$In}}oQ%JA: 8]:F=n 2/>D9{kѤ3&m3ڨ2 Pm (hS }-7 0"h`e!-\]lݗoYkq7Lf2y><}YF&MQC(+j(eM l-5ZNVPhʎCVSq=5OPƔ@-&RIeNMPS( j*F->,TwʋE]T՛Kdnj-%QL};2CYL-+5"U=xw>o`Aڿh@6P*p?%R(WM VWKw݄4D2ed=J1j¿4^ WQ /&{B}.cC2hxV疧#QyJņ:ҮdR ]Mά\iϛOse,'BPP i5?// 俗'N셝ᴦ dˎo@ҬWʃ~>r]CЙ}Wȃ& <`989iov]) lEBɞ#s&X n ʢjIy'vJ!W1#h}ks=8p/ޡπx3-VǴ~4 C ?v^R6  Sg؎ YGKΤK,: n :Gx}SH"{AI$Չ ?|>] bBF8J`:v`>][i< i$F#4~p[Os$7v1 a`JKPʌ>?bJD<Eݮ*W7WcZ˵j'^|d:n]$-ч*fAbH a:K̝G KG7Ds:)LlpzcY2;yz:tdJy5U6* oEC3kfuqyyx!喣in|򣪜j£DŽQ$/O1z%S-7=o -KÛQq*I#0-,#-`͏Ɍ%,.+69~*\$9r?h63)b3BGْ'' exWKWgn/LWn06Wўz AUCGR\L\xs겮U[qUh \H+q*đDV v\YY&ef^|PS0DEvdݣSy՗r0uL ΠElזgT&.ͼR6T%<!-Շ*Q"Z^ Q([0- B¶섩%y frЅ=k ;±/>L;aCTXC&*ƖKR0i"06vrv_lkCYd<@̅mؙ}"9$KUjaQQFQ;Q j&2$GYp"P¾_+dK&~ +K= DRYQ}=E&2]^ץXuKx\.J8 #L5|췪=l9jC pBEr,X_|+q60RR!8ɟe7zo '56YǨۣبt 6}Gzl:7>#aйsM 9!H\CPB].iaw].MOje-,bk+(vsb2I/gƢ(X(tT&.t hIKOį͛y=D_|9@U湅SRX[bKLM A`t@_wH}!^kLx( D)0,!luvU#\GZ}(BV~{@ޗh9w^r~྽4 @ : y>7W:Ξ`cm[e]I3Hrr+{+kʛ2zB }X0X5mC4&Gq dq$*qfR QՒPDد^ݣ8DYUcac^`IT-C{ .$>GjKs![</.9Aþ'N,&p[t1֢-h*%QR)W" .}nk*yؒxRSҚoQȿ֋=F0k֠h6ܿ|̀TnMyJKǶ,O26D*֮ d~o4u_?Gn i2RMBuf 5i!''zDJ8qӅbz!jr0/lJNL6f%39<)mEMF>kA8’`oϑyXc\2PuFk;xt[|AjZ&|r7 6Bb_ e]]cb(Y]JM\NnxUAA^^1aWμ~Fg#:dK x- &5lDfwISZ 0) k3.nǻU Dϰwa:32A! @/8MN sJ3)޲ ~z8l@d ƋKYy1# yƽ:N53 (8?Ud/E\զ3W:G1Jkެx[>|D/䌭Jχ ;*PE+&ap׫6&swfšm UL /ǭDVXzO?%M(SN 0c  JG;DD<n}߼iklf%8©{ޑZ2aR܂.p=]|=""oW\eD`?nmZK,9jhb^ݡx~-7=9Rם0k7SM{xb`ǯ&B9{rDB on;  7EtfLF - 'ݞȭP[):&RN{B)\}PkCH|О1n`yO_Rk{o =+lմf@4%vwgy^8ߩj!/$D3}ev7T yD֦~< ?ޚ%< '2L:_R߸*zIu'T9bo،qv- _qn.6svSIt=餧𰑣0 z՜>xb=fL9OD ϢM&VWc҂2Qry:F4hJQD&\B^_N |jj.lRP0 Lc0MY@hWODO-~,< EXyJZ~'V-(?"}#v_> stream x]=n@^ Diߏ؍A PPaJ"HNSvnMGuz/ϥuB[޶?à?M}\Ʃ]m>-Kݴuqy|u1}x=0UǪA<2NU81U83AlK SAcN㊈FE [} K FDcAtƨ` "`!U82Z-@C}H07C}H07C}H07C}H07C}H07C}H07úL+3̠1L"˴2 2̸2uzVuX]^auy^uzVuX]^auy^t8 4FQUUQUUQUUQUUQUUQUUQUU`-ދ@h -6Bp B`-@h -$-$Ioš& kʛ&)oқIoš& kʛ&)oқIoš& \ QHwrYr;Ē j$YS뵭7::yb/|l'WPendstream endobj 281 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5129 >> stream xX TW֮R@t#ˢ,*"(,QYUv-bܣly_?7I_d6d$$$$ebFI73IL"EQAInɡ)aisҽ2WdfE~/'?7znL@켸+V.XpI,[}emlklL6j 'q_(s*Q3|ʉCRc jOSj"D-(K*r0ʃS 5LyQS(oʖ(_ʞr?5KMQ(]*B=(=*JSeHm))5(#*2S(jeJdKR H(dhhSQq PG#śotܖВY5ڕΤOd3wL'+aَ3f 8mw^ z0k맛[PC|>z5C oo^> 4`putt0a ;.N¹spROmI=ɒ>Q'J.OB7CltS"0llvۍ78)͡`M~E 7c|uMt If]S k*hUUKV#P VLQs}ꎪ.ag<j*cNǜ Voo:},DRҲ6-$䍟q ĺtŒFOWXn)bIBͼe jp/8[s=ayǾOow^\sFx|gf\S!J7r 8^ 5d\E@PJ%X=G\۴`{4Lq@xº<U!荡WIJ _Lc,B@700՜ _ $[ źe,8FJG,>8 r \϶0T7sgLK{Pz[R"Ei ykZ㫹-qk_$$?zGύ4 ~ dA&Ӵ)߆ ~2~&_t jF:Փ:l `7dMǮIU;qϯ;aC;fSЃ!?s%)E=*1| ?JydfD^Ըzyb° g,mhzG`cd;6m_gZJ^2< }!)5yU*`C_n!$/~+A?Qޒ}#p&1 [4f_alvN<~>|D8ޛsGNI*D&ΝP`LO}0C [PWkbu(q#eh6q.\&[\ԅzXz mV K:cNl{FiacgGx2ZDMɌ&~b] j0z:ƌ)IP⸬Yum'[_P*L~.) U/AzK:ܩR'ZzFN3iić) ُ*>H?4W3fA>gxffϷX-%cqK3rcC%Mc#rr )۰3I?&[ʫsVGS'n[vл qEr|53lă|jܴ%ȋWnvK};vx,xq(ycnZƊ埄!7dɻ~>Ok%φ/9L^A@ZZ+#H$Ě4Ħ5znw;Ur؆okN2:1[l ݭE7*A`0 b9X2G}u0'klcA7x\< ۴IM+>l(޹n{.b]#fm=5K%]LߪPG<)A}]8P~ك hƣe yb'Ŷ*f1?0؛g2Pyyĵԫ>x> 2V',YbЊoozIv*g|<ZЃ+^Pep?S; cYvhϵbuj>g  vsƱ}s읽G.<# om e!gl9;͠{:yN&.CmoV]<<cƙseҎE{R>B/]{)ja!3Ãalmuziρ]=%?pLXGьӱdjJȞ~yX$8ow }5x[hʴXVZ<96=tAD}i~Az4Q̟ G(O `Ѽ_l2T<2qOlԶ8>QWgQà9klcc3AW0.xJ[ p #޲ Xx/S))yýpyQ 6&x ߻i;"y iYG7\~7ps92yRYr"hh[e( s+W8S.1=op 8  1,,msKҰ^s'G–O3?[lYd~--s=P#P$ņgXjmc%LTꟖܕV;NDYe$bí&X/B ~n1wpLe#sY?2k~#is[H^׉_,Z+-qwqߕv]~}e/W.7~5,lh ^.b;M~iWÇ]3|VLlA \8 .ZeDk% Դr84lD$K3IW>@yYk>f$%m$  ~Fx6q8I}>QJ\Ejq>?/%~ /N]Dm.uI22jrF1~scrvV_Y+ STX ea|;^{F碿bu:kYpV# =/3<y BvZ C`GKBHH;Yi='@NtHɃ o!G%;g,9pLy#S ~5c Ǘ"EP_uWH >- hCkP"n@+q-L`#;]8bsDމRt8,{a؃#W/kФ-+ϫgaS05˞{OD0~2|gH5Ush)6Pi=lzNURՒ>].A4K*F7F`T 㰱Ex ¶wk`Wi;Us7Ѧrendstream endobj 282 0 obj << /Filter /FlateDecode /Length 283 >> stream x]n0 w=dТhD"3{O:8]Η> stream xUiTW,#AhcH\@q,,Zi"( #4g!-٭wdn" \ >,+'4p -| {sfCR.츭)E~?/IELT/7/,oTosmnr(ϴQ?=kI/,9X\vC  \gqؤX͜4Lgŗ`EŹhrsنC-*J"SQ{VUfWA7W@G,vv+2~W5z-'V=q=]lEVq\k yEZZ"^Xjёң3]>TVgD6xzӖuVF+,Lc콧䞌LKڲȂ Rru΍hVscֹ:5V>\D{Y24x2d(+ 6d?~JwU؎*+mJcHHR2wd(4|S{2KD_] D{k!^{qSo15.9T| +5UK;umPmX_L^ ÷Ş.h1z?mx_i{S/:slyX9/Vd)\B݆] h5Zۺ%7-W!X@u3LIb/> zq`7@({>G&Ym Y$ =ģ'¼MM+pIkOZ)yE{ R)3XHq nő2'݊/p܊j._(Ukx)OXRsrՁxh\GZ DqoĘ6r& C[Ma|>x\et)p8sx#1aW*I$FጛP/;`#%=c5_;endstream endobj 284 0 obj << /Filter /FlateDecode /Length 443 >> stream x]1n@C{B7locI (PYP"I'[lhK2_vk;˸6\_q֯_~u~^.c}_nZSו4.|{<}?zUI{W,;ٱXl-mMbuOchXI66ˢXI{S_,^c$H#)F&u> stream xWyTS?xi%M%6j-TP:WagF 3I@@@f EpU+^>I?\o[o_9g&)fI3z׹~E-5~X{f<+3)4O)y~o$wRևƄ T[-^|[i BeV>1V*ujwWrs*px!ʀ ?:[_U _)=CևnnRGl *+Aa.L߫e:՚334&R(b`*w/~'(49?XwP'PDR;EF "ߚ)q=OsP2}INUn,kͭG~YC*qO c̸3d\"]H+gXV(oknR1@30cC?o8-7ožoI%g2`'@(&XVИ+#^񩑆[h7ܜ-Nobm~_Pg~Ie'~͌ Vo; [Mߥ0GRX}EO=˼A02q°Y6/}6uQۢ42^oA/۟H CϛW󏬢[t܁k||y_ۺ%EG2h>Ӊz@ =yfGMhb5,&.nܘ8 q@O'BMzBEPx>r)qS_a.KYHcpg Ԧ?[ Hg:7,#DQekDoEPe=d3y`ޤvMI?Q0V^O'܂8j~ het.*JؖUY}:yklB;d:5݃d8qɸ„\ #F|HvTVxc}т)b>\|eIj`8+F/Sm0Kd2yD Mj]ZEHMq5BFWƦ$ĉ+0?sŚEaKP>橁f 8GEMީvJ?ij qdWܷrZ{,ILD >S _v] J!Q7646*%Q8\er7^M7(Si3]OJF<.73/:3?0ynZ|gDcx ~p\ ed}⤢Q`|4π<6X[g٢T$p"<:3 QsiPkѩٽ> stream x]O10 b C+qP(/ СÝdߝ|]%Cֱ5"HcQ`c*Bvwޟ@C$ZVBoh )jH4J 6Ƕ@Tr48o1Ҵ4CNXSendstream endobj 287 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 243 >> stream xcd`ab`ddTM,pI-Lu JM/I,,IL 154)S!C,swϢ/XyyXzx8&}&=B{( fFFdM#ҢRҼ"Tyɩz7(8{(@ݠqB+xY,>8㏀?DO 8Xb~*0ǟ $db Y#endstream endobj 288 0 obj << /Filter /FlateDecode /Length 608 >> stream x]=n@{7}?2`lc7.I.@KC)>3#;EG`l}?<,[]_͗ecnew8ve}&=Ƿa퟾ ?k6O?/שضaymǾ\wmWoϟUx"z :jOUx3X5#T5c8W "@ 9}'j,,,j U 1HPd &#l P5#l l l l &f#ld6𚘍@Ңjg5k8t\ÙsMES&-t6@pa81. '6WuD.*'ErYCp} ΏѢIg]M:t ^9P[`us9b2xCAo9 1m?~H!)!B?T,$R6!Q`!  I-%k7pM&})ߤo5M| הo7M&\SI߄k7pM&})ߤoB.%Lȥuuu;uǶ;Mw]{u[f3=eendstream endobj 289 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 6174 >> stream xXXWמvvĆ f?Q?cXbXP,uw)Rtҗ{U 5(F&1&Ƃ/Q/wwŴYx;w#gj - ng&1JBܡ7v|06>3:ٌ6揃M #oWJ$"'zޜ9gYEX̶/ZyXvmA,_ZO<}xYxnvliMNߟA]!n#ޱR36xuH4L/>!c&~[]fpNyc>Zw/gKĻ#xp"Sb1LB8[mv†A$f;Ul…%>$Vs5\b-O=1@,$6&ħhb K#x•0#nb s‚$+b2A #u8 1O ^'f12ɿCGAL4Ӣ2I&]U'ϞN;f7lU357Uk|V-D1$2U2 Ȥ"K_=(e!,imRV=d,7,ZhC/)"hccx_]qa3#3;t&rpD Tp] K% C_њAT }ɅȆ5x_I7運Ss@mvXOq3z'4&y7-PsC2`@AM YA hg/ )67bw92BZ@@ sM3aخmԂu_ȇ8-zKUW%P1@Aϡ|ZUߞen.\xš Hh`=ZzIPj@h8c /9 ߲=Ha AhL7/I ҫT2%٦?xռ ,FMpH1YQ DNИ!yby ˴PE޲%+_{NoRGqX w4tha4K?Je y+U2m^uզFhrlb*YD∯o=RkL~Uu A|>^uA$Vc'c@ZRۘǜ9*1>=4Pu.8@43A .JΤK}tײ0 ΒO:ȴnzF6Ƙb74ǰa.E .] ZX-,rՠg7w2Yܪwq5qܻƂL uS_?9&J'fu hz \ͽGjς,&wt2!\BR/ RQb\Str+j` !?J?%pf5_JpRoÊm(2uۨujHd$2&'$N; 8dRblЍОĒ%9Eٹ˜Fh /TRM: eZV ?K"(.8-"@p~gotC 6FaQ !rS8/ȣ*iL4*Dy>[@}3- e LS+ jl3|48^%Qx緞=F\.Rd8v@l$}tBk-bcܒ0 IM-qmv"IF}Nׂf_* (uy}&y+!*Jt yXd5fWUx :[Ps;R{yf]iQkz"aWqN5H\ jw8G"5ꊎ 7 ސBj̾~J(:VlxV=eG> iaW;]{H}vmz?8)ZaMjD[N@kDC.# HW!b|)d i{VZ`P<X[g]/Ǩf4F)>*@KgҼdeebD5)gۚ|1釥ߡ Z֨qMAWI`+W4ER'_=:Ҧye}^-^^Gw:I|ԍC[?ti\Z#555x̹D KhЪ8pkw^XMYLu5((dQ Ld;ez[&XȞ;ף2n,;i+UfWcʑJhXV52'qgnx3suZLNj9&'p9=O"a?Q3;WR4ʨt%ȣԡt?UT ӗé#%bR\#.y2/fhjIG}’g M(h?0L1DD3{|ޑu"v_21wC޽)32"mqj- 3Vi;N[&bmVizk34GOx>3 ݻ".0J!7 øj^9'72^UwԀ-j&fNU'%&ZP/ꑩ;|J,,뱢W4Wj@gz Lvʕ`/x^ ƤepLK)E"W, |lx_W ]8\YHB47[~:q?σ#+njuw'KdiBT~* w Iw/"'Ͽ+{nj'7V8N"Z!͠opE-ѿ՟S$)3NwM0t:pqQث/ d^x"Vl,+2xwB2.MZȃ.p> iU*3diHEjDR򒈊ןCcphx~n` 3~B3&Xuw'#\% ._%]zFKt{@$߫EҪu͸|#Y.fbMf ]^Ofнm@:H ת xM^)P\!962VNm '"cğ&F!%4F~4Sk?ݺum5B ô}[MA? е\+8*t:&fP26-h1CdFKU, `ݵ]K~08R b$b6y\!9 $&]*O@JV[{PUe a/Phkپ].pn$Z h୫g ~2Bk4rɒY{k| #쫬/kJMfˎMͮΎ~,G @n- qHUT`L3QPð>}u!hL@o v \@ hbuW3OA@Pj1hA7([6ٱ}hvcPιV>{+ƭ۹&:^Z˴5AnrǸyA鮩i2m5GlorZ,@U'  ^)sv!]UP0hQH8)ّ*_I8+-SeE*SRT[AVrYTale~|ƪ _?Vs1 {𨀛kt?AÈ`PĀ4F;8&5MךmUIS1Wm&`p?jh[t/aܰxZɢ"K:P4<^ٮ_iN)T+32 u8*ű﯂|8H d~׭t醐;dbi$m2+= SE:sYxL.*xT/e(%[8j`3Q8SOuۗ/z\/F~h]M[Oz|h͞>żǽֱ'{{]wŨ^gy1#ܴܕ_<]~O8OFPݤ".LrVJPX&OJ6g皍4:Ew[)}Qұ[" )<(|CāTy"N_m~ uNS@+==_#}I}êΜ=MF A 52-)5 (,"r+]M*#w=66#zn3ˣw&("j;WC01=ۄcy{d=1 *cT\cõyʲNZ$Cdr#6!.,X !TU:ŽF-ws[2Zm^A 9 nvo V  صhUB6z-3Jl/B&)YxA'SJjB )a ^W *-/\}[9\d 2?J]}poב-ٸPIЅ?l$rXϼ2k׎ujȩgp+ gřJRmŘoQ5KF,#o쬌RG!& endstream endobj 290 0 obj << /Filter /FlateDecode /Length 593 >> stream x]nPD<GnM/`%bY;3$]t1l霱uO//6\~p܇}=-v8gu~.ӷϥ?~χ~~׾zx4u=ԙko jg=6bfqE4u @h4B7Y)MAMj jB$h4ș65ubkp5} &_kuظF|SRp*8] NKw)8.f'ErT"*0yh쁍C;w d2 BV -\20[htB T!1?N[%RTIQ*I JQ%D)$UbtKNM1'+L.M1'MO)$MI% v.\+  r%`A$X,ȕ`Q W, JE\I(X+  切_Rg!c3k_n:t*0:-v9_Ԁ5endstream endobj 291 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 7053 >> stream xywtTUH='t b2!dzOf2+Dv-R~^>ַ'${}|bٳ~}yw8a.6V+xr5gىaaݝU.F?ؔIap8"ٖB'HK/^`sˢ$/ϋ~519K .ʈNyb0#z 7:)%=1;5Z=zU6G޴aOө r V\y`U~LB8(i$9V}JƴM㳶d42e1jĕƍRxfc|cW8N0)ÏGLm~ /Nhp+rnȢȏ(wXO?~~v0qL9s'hCIѰc,[ ~c'9|zn@F{R &DWZ%h>g :/\,"4U@A  4[x(Ss)T㰋p*VZgTH b(M(ʪg ޠN9>!YJOVtp@$ɔe+6 [[26KRcYڍ P|_hWrU7l\si@U5{Hy"@Dn <Ԃ)0C!5󀒙B*sADIp:g/onjq+B zE1Q i JZ'.)z&8 ~/"įnWY{ _@kQD/P(RlštZNQ9Wsd7JpB4B< B0^u\Ҟr!CO#jCj ~G];s0* I1\D;X?V 4,@-~&ҤepZ +{4b p{dguN ֓z;w+@chI@{0DI΄pRCpF|z6 Dz $ sqi̿A ÕFq<\[Jz3 g_y~[.Sd)q;pDh4eZ_nwAf]9䝡R|M!r!]!v1ecM( 84g@ Q.ce5\TE^%KtF%ZMVUaop 7;,vPozAnFaHPt [lHb72]eRc OĆʾ co¯yWWv,ʶ̦C\u0=̀*6 (gV&gYVi>-I5%"&%udo {   zᵷ&D|6t~@g[tNGA&z0)P;tkZ5LI`8i,Vʫ "hA~,8h+)doT::64&,u\ 6s5Z2EM)@4zZ`e=ۯ6wu]F@Aλp qa+](Ȥgv8B={ɥsm%?(0qeKhgQC ȥ.&Z2I-Jl7v :Twiط]W'Db_U~`R>_n^EДxU{yw-ԅ{n}g*zljVϤP{zOtZlhF̒ *Wxfk( 5q'_#_aa&.y*YNo2bI e9?eep3:Z jeMkM7v[x(MDL\Mr{6}4,h]ofNvRP$9SPLdF$[BJ-؈P~@Uȓ BI98p2h؅'#m͒@9mLl8 , (3FJ6\W Z~f?mKxn?G*#]vAYTjo &HEWTD>6 6Ƹx5 y}iY99;v$mR!mN:R+:Y7v>r&PbgkxC>!𠉘zO}pq/[Jn`n-X CV WY}۠p$5B(ڠl<6tdmBl**?2.nyuU'5{C^ˠr):{Y'=8= cGyG2:MUޅ}P8ze07M#1z(o.WYk9,VZ \\сܽ'?q\5r\vq4ek*5Aa ^M Nټˉ7A#f!o3':.G‰ѿ3+$+FO&/A7; ;ا&a7=\!1YG =xg\xSרzq_>l5[qe$P8_v&=+舙 3%qvG8>CYd[󲄀R8=ne"n7ynݒby/zD+GzH!,ؽ=d"zAQ#G&lTU '~^iJPJ PR=˸Y+0Mk-|}=pwomG 9/xQ(PP/Q@Gܾyax̡W 1%$>á?hՔWH%r#Uy:kO/`n YTҭjR%&ⷞH^8N` 暦[`"a\6.78G]z{T-聎me :dBzZ':䘩sgN𰆹"=Q|Ǽ⵫޵[| XIhVrcxj B3ȋC\pDrqHN_:5Y-nBD͟UFk6\MQۼnWls-3LJZ$bCsޝkb= |dU4ijJv.(52CiATS?vB}? 9BPK>-|ZߕuU2_߹݃ `(:[F+-Qp|Ja"}vځe  x!dac篺w?4,IxK <ոY@w{^ݩ2riCxޮp*+ C=++.OD&&.oXLxl']^A8hRV08 `FdSVȻ'_KQhh^T-(W8PN|[L(rWJ TY8(EP@R\tK6\A3hz^\OA#CTPފ5r:J}xq$7>T۰ym~Zf(> s!qD)]+.2D.!iY.9lM1yU J[^~/Le'?}r` i ~ . 5P; _9G$+9uJW9udlj3{ƕhG @w}@ NcJyOY0orI|m2e0~|sw. B-Nٷ,I)xO0l/i >-&FW m^/|w4%yCv@ \<}kb\xh8.jQנ.{.b9E \S`yشRy΃kߜGæ.;vLI/ʟfR:">G3 ȋ}f3ů}gr2Q/}qݼCG =AD ֝װad YʬN\ d~U h~Y^`2s}`~m„W& YYg E-؍>v`}}У#fK48ND#̜T8 E2Gyjy0Pݭop8DO?߹u}O;kDkp5DΐHētuj# 3Jy@\kC2M;L )LT0/t3Ͻ:471p5p|xPÈ v =6'5=#56Pg!tq@鈚pOpL#Kytw>M0}tLAB0G5RW;O X&ox ېD`l~\՛ j^J*KvUJ_@nkYi1LFwHe ƴ36 S*څ{2{p?C!S@0%RR$RX-vC1;2hhN\r,B5[U,j} N8 5InH7$F{M3]cV37=rx`9fpG`-G9P6z A_z0endstream endobj 292 0 obj << /Filter /FlateDecode /Length 360 >> stream x]n0D!&k^Cǩr ҋfWq}g0vKL%򔿇Xe7냴s;k;̹ā=G_JS/sҎ߹Wދ> stream x}V PS!AZuxz}aX⣶>$@xg  7ZV;*S驧?ӹs3̬o}[[@`۶U3V-ߠVz- }B4?(g 8,L}nMoS鉊 Kaa//_HdzɆRyZINHU+lWkDbJ"K*%xɞ7-ټkޝ!A:5])+)KeW{?-Z v;wb/@Db+N?S3l"8D#'"!—(%>.v^k!7 O(!QRwICYL ( =ONCLEM) xx@m1 PEĚ ru"IڤPtr ,} %Jv5vTfאw.զcPbH'F.!)#(qsn)hIP%[hݥPwByJz͛w]}O/}~a)p1=8 Ls|Og%9,KObZF`X+Ixă94X(wp&巶oeh:Ry;.:n6LSY󠀋`<x`DNHH:B2%tG|;`P$Wq O*0Ŭg_$I$,iַ5ۻi掺+nXw2,PHsR"ܴ%]-_3tdF-eajO4iEeV,6=Q.Ą5X3giP2NatfUcƔM.LI8I!i,2wga&\&wbXZ8{"9;WM.wɿOWɣ x 6 6S9~Nb'܏H \{;D.<~TJ.O>0Xe(MU7N:Naav,YʳX ZX.Ej~`f@/Cem~߅Q܍֓y=-,zO t@Kѕ9R`'W0 :N%B'BRܛ`.4ELiVntd,KSrf3B[=,(~;z/@.qFCPEeE6=c:|`/'Q \F0>?m.ᳳ Fpꑵ<"؄6J|5kby{Ӂ[{ ,NCЗl##A򳳕̑cn@5=rf.[&\'L޾B!j>Xܪiь60nX.Oײ9LJkFMEg 4<~-\XKug3UR*@m" 4^T9ъ*;ҷ;FWn[_eVԤeeDʣ8N J',RaedHCu{uj@Mcq1 2Hc?,#c`L ^~DC瑟a:ttbx+599=]ܚ=Z(c3f3W<፳~' 3K{WЧyǀGW`NtW I*&#^ T 0CO7:~ҋ>QaHЕ&y7פeɩT5}FAGMnEY$S/eOwbzS S3fgcZtM !/ 8M™}8Ph ֣`X@H]`,z*J@joUgccBb9r`L}F]qǁryFZsѴЯ74d2j϶{yP3#L <l$㌆x5"EU7z}/ nRo \LȈܜǠ`Bڸa(L6XB<|d&Ӽ$]ޮmoIOors) 9P=8ŀ2 TN暼;ops ׁ.pk5; a#vyLo71CrDf;+⫉=r:%Nݠ-edʜbcYNQ:xPIw=pg5BSW]oPWMg(} Ź 3Z(fnm;m.O]7<_&Am7W_KYr3fMW6 Q?L{*2>!J{؞y/ۥ<7@w]uw_Vu`r((EskOpG_ԕ3# `i\bdX')}Mn`m?٭$-I1HMGSHD 48\`)E(NI)ǯ{Dl#5gin{Sp׭xraYf#3e B}G> stream x]; D{N d8MDQ Y, ¸"Ō`?t\MyD^NGXP u*T\-"fX],<>Iy k p31> 8u ݙ18"!E׼1<G@rVZ˃"]endstream endobj 295 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 357 >> stream xUK`M7eԔNZi3<)"AaC!aN KHū#A֗wHDJia 5|ؖ17ϊՈ+:("?{p 8$EcǚVba[Lﵻ=0 +s]u-ffmxV?> stream xUOKAg?ր͡ bIwZR\faf)^rWz^G(%`<vVp"u@i%npD~\}աϤCl?Jj ;{sigl!tWIwkYA5$B38FQ(lbĵ;T_@79~I-N;Y_()ŸmBNyQ򓾥Cvpt"rb/0wIyEF&Ṝ OF1YS3fR/?nG_WE]*:/y5OSh߷8P3~ATI tx.9̓Qߟܻendstream endobj 297 0 obj << /Filter /FlateDecode /Length 190 >> stream x]M cL]6vMa!Eo_~jtH>f3΃naQܨN\=(#NT[}(jTE# h _&_bRKA Iǘ+50$""El<%QtBފ,ZEc% yjRn)suQ _endstream endobj 298 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 608 >> stream xU]HSamǓc#!wvДn2؍"kqvfg[-ꢄ5|(-'Aˋ $Eh #4!=4K??.F1q#{[L(b~/UNǪSۂj IDb6!tD7Bw9tm@ Nog(j%t Ed1n!9+ń, 󊠄R$ kmH"P8T4Bᒆ  &x?C&ByC8Yi\tcR.K*Z%JRlHz(}ޜ vkr/')Gwxxmo l]fZ~cz&5ZKSݤr-5Mߛ"ϿY)|'suvGXOe~vl[6Î a? G6NW`$Eoja83ܢF3r&*_45S6K'bVS$9+>|`tםxWO ,w P6VB> stream xW T׶TDl*8"IC2t< AfiZZ'TB'Ơ1I'oP0u/ugQC(H4j\&_:;,5Dl0A$L"LH7[Cd$FF&U36"v@yPTOł9sݢ̭ۺ#2s۹vs䡯rk|sǭksy{sUdrEhX[V?ǀg32nE,}w)j2LMP[m#Dm)jZCͣRGʖZHm6R);ʞFQhʄbJJQ5@ )*z%tHZ|`A!kGϣ3%C%ŒWPWa/W7Ҍ0xqqn䴑FJ=fY&46e =&tLӘ?CX+ ij:A&24RM0p<9 !<ѫrS`F_j!_,J CY[."3ssЮךS:Ƕ$x ~>vOL%*:F-m`E&û h?\jOvv޼ٹq!D5iA۝ q\(Gqai>LOy??ٟ>C"b4iB &IJP_xZwRlx^< S!Z+eЦ>FX |-؞a(-^%n#ѧ?˯knÚU^s7$ϮuwTlcZZղ|SH7&qXDCWp >y {K.ELMUyJ!WZ5Bv+yֻ=r+/@ǘJœ,(%_ E74uo~έtW-Ḳ8RҝhνZ8ZV$C' -%X$g ~JъC?`-0ٺ[<6vXQJ NH X-;s*tpX()#ǖX/GW >RI4t_qmo'5k!mċfO/\98$Lz^J*j8JB%n p֊jP)L03jz >VT|ji0{P2B*Ti-GaiMtN)#y&eHSrT""L]Q[t,CyJeqf !NzmJ a2S݀3LKP5*(@eN͌Hs?94+YaRTop ӌb"yʽaO7w` բL,_G,%=B= ވYˇ~,=#PfLYUt bjLAxf-Fϧl0 79'j23icA,O߃![Uury3^Kyz{Zm ;4A5y;b:BjrSޮ'\zAẅOxAbw"!ftI=i >\RUQzV͆$Ȍ]_Wl兌*~ .0Ҋ.~wNK"vJGȺ- juc)9s1/DtQ Iq]ZU9؀aV7 礟/A1+v>shW9 gB; l?Wå * vu.u\tG:IX EHHݎ `.)dzzbfZпЧ*g'S{㑬H^˰\]/j䛺v\rUNڃPQVnf6_;[6[WQ'T FUQⱝt'-vitT.N`ٸ W<|墒L?>ξd~AlD93DVQ5Nw[Wۥ;H217jzGQr +JHؗδuC\*Px)î:]{µ8wf)D?`Q/_ُz$oU#ú3l Z|j}4)k;NQ0[ n7' :|$]p%0q_ܗX/E>7vRV@BVo6'nBM ˤ5_gs@JRSBti;{HZdsAը|ԯ #ZA㑟ķ֧܊>hz5h*,$0N.VX."һD?[e5pgo cAս=@GnaTX$l9_MQ  $'eM(+ #τ.{Z`r+зx2=3 ԁX?:C,sZFi` F``ds\GCKs@_)vyvBdw7}k0 __$Hυ8[DTzy֧O;9mlZ@rozF1x!H9xַd" 1G6 Bq9O9+F`0-7<&//% aK E(jq_Ԗ {3' Bwp8ZZooj[yub_L yx MKIOB=[\mD|ȝ"*>90q !5m`v1ց(!Vw/ U;uh꯴څqXs<yvѤTSz0)/;Rw 1rlxu|B Y<5yKE.Oqq.b_ΫCV 5V(4? r)zAFN䎁h;]+ZY3GdPChIu#d /Akrg}=u:g,JRt9kY)uEt xnkrOsd_mUUmYZvZp!iO4/^"OOߒA\F],◠|fVN,0cs2@Md,84}½  n}}3kxIM#`Q8AMOZO R(:$D|{:H_~ pM H#>D]~>E6OsfeEJa]rS/NjqѢ"'+<< 5b8@)%YJZ;L7fMn4VI2YyFFMEEʬBY 1AQW/endstream endobj 300 0 obj << /Filter /FlateDecode /Length 375 >> stream x]n@ D|nȗCDCIC#xz=MҖԯ:֘.)Uy?A<].?Kq! w~o/5?ܧƴ9e0XOus ՋQe7 w(`h*K(`lvF%N`mv FcgsF#0I`6 (L`=} . /_X!Qe(:bNYJ0'g%/ A`_A<`IOR0E$')Q@mEVe^ #(+#GP1 (YWs|U|;ۺifr|)-2/*_endstream endobj 301 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3044 >> stream xuV{XMYn﵅SɎ9!$& rIJJW'RtU.PjRn 8R̸ cf03|0;+=|o=k2`#ɌCccܧ;DGK7dҸ!қl:~8< ƍX7L V&ْ5oLUVU`*>*&>("lkhZ JT9m T-hP U58v[Z)Laڴ6޿@STٱppd!MJ@.ymȳ nAw_^L?%gtW.'nguJ;e͠ (XI"5q"&^L`Xd2SѾ&fK݀ ]L"]HYYQ,5;ag6'SfNʊ*69['.N+BlDLF}H ~]|?ҷ$ut&G 7^-\RltsO!kN%y%x9.S^4W'Ø/?~JAZEmS0 >am:z^I^:(Hk`os ˼ۻU44*}>|-凞Vݟr5utF:aa~jGt#y-A~TsP1("> stream x]; D{N "Y4N" ¸NbVvex%ʦ MQaqH:ApuU† O`S\/k% lAi  =粷V@0#)fYyZYmSa:cL-PZ4|W\endstream endobj 303 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 249 >> stream xcd`ab`ddM,pI-Lu JM/I, 154kf!CwOXyyXzx8&}"O'wWfFFCHdM#ҢRҼ"TԼT=  PB  PEWϜӎ3~tD:}U ߫~_w@ٯr!?'χ }N^endstream endobj 304 0 obj << /Filter /FlateDecode /Length 483 >> stream x]1nPC{B7g&$M,^@)r%d-8m GhOOrm/e]^?.Xs}[֦iNs|o9TN\NehsR„;"VP0S&l_$؞X$#m.l" i E+dBDc`GZdeedeHdJ p&@#h48g4LF@ q9! g# rAW3 r9B\A"ѢTWb-t6hդIG&M:Zt5lѢIgCM `0 BA\0 p! `. &`Z~΂v^uC߲]6B_s5_endstream endobj 305 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4020 >> stream xWgTTW׾x/׈h\ew/5X1JĂ"EH#%( HEZ4tF# %Eɗ;9ZߙZo͏{<{?9b p>l,2Yij+_.KTq' K-~ A1 f+ V[{7nrЮe!Z|D!JCZ&Zr|ny~`#bv w97$4>f^||lUV >%fRœ7aA,#,ωaM,'lm–A ;a@"]jXC&FaL#_ baJ 5P' ؀Ey0Δ>"6n4r~SқL ϑP#UFXU֤S;lIg> i9jB59sWQRSOUVdrSr@.u6^]n7)wdOд"˱5:+м -w5AG@ͮ4受4wʽj ڨrH`4 'c܃~>1؜2a: (:38P?[%qP!#I84e?akU`C{ @#>5MAsgAѫ^U n3pPfh}2pt|ak6*|}Hm 8! ,Ѭ4]ddWW d.ppin{~ 㵇˛߬;/Ͼ 3gREL]CAVz`ŊvJ>U.>!^kF+6 9;U!G@cBuiq8L898YA$ FmVNa`;[Rnɚ ? <H??CfBGh-tݲEm^P[wX/}E+󾻔V2d])UxPp)KcDPeTrx!LK &Cc RI\rS k/L>GB.[W3ADV[Φdf XUlZ/Bz,5nY1 s*,]x5:%ӳc0N%9R2e#ˊ Gʣ);%;-Gw\I= bpsEhuBp\iQC^MPlEҌsNj .eg}_K'TujN RS2F4dbMYOY}Uq"aYųmg^MiW`*WA,S# \؝-pfcl`2 Yr mB* ~1$& 9(QvI.tC%_p473&?>F*Zz!fh8K2Cq~x_۰B3Cn-".mtd^QoE+f ~RUb$"GDR,#Mze8G%~HJ HڦQt,' ,;e4>X{%znֆvՇ»|łꂛ.N8Nm]%pӸ#˞1$bVz,?o#{++E&*e°oF;r:TIJ&Gl'Y}*DcK(|t~Tztݣ[Cs^Ţ(}q i.p fQlGzaӛ]W^R6BE$zx4?gIwe@AfX;X&0zPΟD|btP`ۜ:w{Wc-p%$ {Z{z'%)Y¢Aq@4oK8jm)Z ,w۠i˷6;ڏWIy~nP?pjk\s =XNsu`RPn?~8 YEaS}ْ?2@^r~FDz|J ,Em%~j7֟XG)Ԭ00c`8 Z j;%8 .@7#v1sfК2z;߫A #a A)-rKtUB^h?' ; jqt)oN+j ճcOI 54 $ݫMzmܰ$1r-pMX}SF`% x?S`ũixm`Rk6ɨH!Ku艬,]} -0i CD7?,|¤Mܔ̴bWTR`rڳP'/ܸ#R;ne5"C.֦Z,n5 KGH.a_PSNjIX W&wQN0G05#R1\c3g= {Aç0i :p\T\^3g~SN<ľV-'Z04:[ J~P'_cendstream endobj 306 0 obj << /BitsPerComponent 8 /ColorSpace /DeviceRGB /DecodeParms << /Colors 3 /Columns 825 /Predictor 15 >> /Filter /FlateDecode /Height 343 /Subtype /Image /Width 825 /Length 93458 >> stream xX߀oHt (` v؍b() ݉(*JH((ܾWWW~}v}fΜ913̼wΜs@ -#WC mA@ \ @ @  r5@ j@ /@ ~_!@ WC }A@ \ @ @  r5@ j@ /@ ~_!@ WC F?p^} <8)qX4<#gtH6e2#z~öp,ۂ jk4(eJ:C(֞)d!_ WC Bs5I!w oofH #NX nˣ+N.Qbe"YS8v"=<.eU|3E D&o,[wUȱ}Zʆt$jL:m<UWvۈ鎘=mY~`Hdv72B\ @ ~mbjf˾&wY/"pJz swZxY8}MRO *5 rD,asO~{ H"e!Dhѿ*$LK?Vs52)D9nW#dxzMMJ WxF (#?4Uaq!Iai{0_)Ee=syӽƞda2W?eЌS BOMmw> $dEgXXq XLV}&I$wf;WK9":!7ܤ}G9 r\b<(*MmƟL;\I+ ~[cK*?Bwp d[Ճ`_񹯪?\ӿp&`rJfje~ -up;8`8FR!w5KlY^ .'F=C u}P 6ؔx+*hؚm&]m\i`%fNۙ:#х[Rަ/זxU/v/H+N4V?/Y\bjR98NXcj1VjFkdBԪ k?$eiY?p: ,&mw-KWW{><~q؜*nn[uz|aӏ/7ΣKhYWo:U!3xXLs[{+ v򗳸>ILҧriH%3r&o"3l>K^tQ]iKv`~OhOOq~P9u}ͧ|j|W+ٙ(LlYql[[^CWo,v#7No(Yi~ LI+μ~_BX|󘥢DR$յ5XHNcsak4T- ƽ-𡦈'Z`1N'^˫*PR\rpP_)ҽn\ *SN+]CFyYŸb/@6t z# fɇ -}}%vf]o ΀ݙ5WB<~Zu$g\m؍WYaH"~6c= W@@JԶY̍Mـ( a٩QjJ--"Q-JᵙҙʠYbV_vȈ!odŤA88mElP)n]it)&VmZ=>C Vᑧ5u7Jȸ9i~Mx[.:Rp^]Pc:D}`䛯 d1oqFUKR(ͩ0Zǚ.vznEV/ Wv!);;tŽX< BlL?=␅b2^j2%Bbg`ÿpp 9q]o -=!5pNk R+H+dqKr%>),=F;!@"f[=$zC(VS>f`0إYe$!+@ LhL,-{l?0ySrlb/&;BI8{>*&1'Gx&:,ớkZXL6Dt}W]ݹjy^ F$ $YҼ9=imMmmMPq"f0f_LdOщo@/@/HYbbɽ^r3eӉvb\9{g}SLL:.in\␭-$J KrS+boZ3iTH)~ aqiAW=ClՉ(ᄥ#zgcca1fnkaU j;db!B: *؊A%;f X;Iok>P,.lbr87 ɠpHmyϝVS&aĤ{iD@f];]mxok+V*kD$w)5$\oê{3IL620^mIcկzjڝv:8Pp$J4wt?ՠ܋#Bg{z\m>2OI`iprZԂ!3/oV]XUZ-gWId{7+^BlۧpC^i4y{?zc=Jsʃ{c<܎\S\[V+z ּۢO*hkh?"He*VHs,U1Jj&\lclm(j韎,:t*P^EY'K, ^}:Xjڛ~i.1(p622rÉzWG% ~Ae8t8f_rtj͵3n<V-zfdP7]]g6:ǟω$=x|b[}L.C-ߥcYi2q/@͑ XYxNsɞJC!eI v+] xp5/5F|\wy#97(:,Z"uzﺷն[/ub-V;Ղh90kwP]e_)6O{k̵ iϗ]u<;5,:uRXNxG|>r5w5dq75Qz|}ڙ.>qn";χ*h$DJvPm77gԩo}pef,;ǟyGohkjݟw5 7[;LFΎXA0W;{9 :=5o>վ~e+;Ϯ6UL?d5V? I$vl 'pdĤ`kOmjSd_mǐ 9!/&Q5V49G9ө@#K}pw"ɸw0>Wth-{YUOp0Wn ]5sO1² m7[A/Q]w_H?kV*/1b<U5H&@_7\ QD$tt?H+ΚvtKw\i8Zlf{RO5Zr6:Y-]-,7ቛ$wr5ϩ[V񾇳@$jMKTHʾ(-hMr<[h!!=M?Owl_n5#[+ jKfc\pwC{I] ۅIcٔVf1y7XѫO{ ޾]hF:قKE;kTncD2aqFzI~"\m C gLuto"쭺鹗VۮVWoxM8to'0?bqߟp8:B]wiYj-N^CjV:8_H.w.zPe2?xzZñ duVS"FX{07fd^Ѽ}Rmfd]-%r󝎏AoE'j* K.M0r_\$m#18۪H.;T[W)ɋ@3-6W ^T!mP6WM<}L!ΞeϮJ4^pۡqBbuوH`BMY5x J ½>2?-|CD Yr5} 0W[3rEǗ(_q5l1Qkk\-䃶Bd \0ؚƠGe>7b{y`u{9 ^E]\}UY _Jkkޗ_[TRXޏ>5-Oʩs)7_ݦY,v3r︳(Ղ*ͩG9Eɓ_3_/Roe\v'K\ -4Nył`s"߄9gتJ[nZo+f?ν:frԍUjǬ>aoZSU{B&g_}G9x(9ݎੇ Tֵj!6Cg] k<xi4g ,ϭc}|1̀,7Iy O=@SnIK^7mԂs,j{\;"&:)N }=xՏ`ٸރ[whwƠM]RIwbmS!ڎɭ6NFEŠkL|⛮i0\꾍v:sS0ja R# 1h4-To,?pvEXɠi 2.v4v@Tyw1*.t[3ĥ!tCgLwB`US W{jxB{7tNLE91HƢjb[IH:_exWw4Q[C^ DQ.6AWsrJ$jCõL~{}]fl7O\"7A˗sJs7 HN\ e0Qo8)D2ѩxqg/D܌vy[)1iհ&H, ww?twYN2Xx ]uA^E;JNWSЖBAB$PQKMٗ2_<,곋;ICfup< lmh=8{ 8#pk? 㙴ߣ@1~Zówqߢ}wyK\ A)#yPR\t1۽IJݿWq3dUl°FDWorS uv}fw8KJAK'tɫծ{MS[s`ឹ l}+U3-Xo4> [9^\ #ӧ' b#bxI 2_ro̽6^:r5𧮦>b T;n3}NkkTʽ?8)U,)v uq5#+S3u!1D1jfPBz4`]X٩ {\_Vø7>ۻ;JKOp5{=Roerqg>=3úN6f6tnǗ]ȉW+j`-r겛o ^SRZ&n0oˌyNW{Ao={Y9|ҦMAW{ˁY|G@_)coz}q%~Ma~.ה|*KRժk'>4wGo vZ:/^'!W=:yc$k%5.5o{s 6Pap1kY *8 ¦'H:ZMKXgi0.CD?j?jJ.C1/),t=(T}Z`qgՒBbnQ!D{sYrzuXOMͮ7a3,sEdks"z1+̾j:6;,/ 5-~H {~Ơ1@L֜c!jq'B fqjr<@R؎fߌ).Tf>xnr}we?3[8z$Xݢ)|Zq; "Xf9 [nA&:]׋'|׶G%_O||Ýx~NȭNo;kǭЂ3%Y;_br7K[r5X[w;3KRdk٨ɨ-ݟvӢ[t" 8!6-wM0ф",%*'VVZ FN~ʤ1fZWșAt_RAb̊?:|3uGj8svZ &p: i5r|_L~E<~`QiwT-:a~,}>g` p.JˡV'Jÿ%˃ ߜ=#S`RlM\qff-8U>YW'ڃ_M6񪿰yMXs o*J{x%/Yվz:?I8XQ`x))zq(xD=R+~2JR"Ԗ jq%M`bk)Q3=|{qf|`m&ړ-.8eɴ@MPwO:󏡘_ikS՛pw9sYK9zx|e8 O.z4W˨b[i'R%Ss001̧|d0~t? r5@ j@ /@ ~_!@ WC }AV7oljeD5zI4R_n "h @ ~w}/ lIQU)xtrw[ڏi=ۚzE :I,(kO\{z$ s5#F<?M!yl:WN>jn]_T~]- ',;wy-;IrמkSlu#ŌZ{T)?j$w0ZǨBg_6p;{?zcrXŇ*&5HYp7a<IX{fjIZMQݮG,:bkeM"ny~#N[cٞloVm #jmaqRxyj!Xy-;&6tjs![lw/+jM~,0gӘ5tu  e &xq0 vg8AZBVYHI&]D{ɈU5S 4e E{AEs~YS?u)%Yo~WlSCQFD[0ΚF*jhmX& '&EGGO_\>ڊP UYտ KܾA\Mմ?J GߦmEC|>rvt ' 5%lU@ rfNjumUB}/_uvLX6b.wECDxͰkӞec?@6X"$cyð9܁o򦥁vFiK7~Qi g` 8TS RtuIN G[YQXșwMIʮt;L!WLz+B&B.k:ͩk[ *`Mv.~oeWnCf6y~ZYcuCuY{ןrF5u~tޔW7 g*K)ȈIa9>T2X:}?՝ն֗5T(>O-/n-ޜT𪡭IUZqxA]J* &5SYq,{(ʗ_@]jZ e(dw5n +& !i][sUGn;w˛wןKV𲢱E+U%3-?՗.ɑ*o&M%r!#${q^XL \W1pʢ,Cd2ř5J}I)57*XG2hmok$Ut4.S[+ z$\SMT_0˪6b֗糙ty2ު;b&a}r""=䋟撜KYLX{ar=-LIrRWVJUI$w)ΡH]3} ^Ų٬^{(htw̛j>U|xY(j+5+ i>ϮCeRSuq4!1)5s|"}/_m*j x;?zJ&"κgRgU`qh6Gk󤠢y@oW$h8! 3В)hZg*~պO˚$Dʹ>*=7a^uuw߆꘣m]HgH_y?!/r*=Φy/xȼi' R6g,LZP~2P y/?asYېʹV8Wmj[@\HD֍mk5{l؝!h\+Iq<8u X^z!:&J!Q֍ZڝNq{`uǹ'ٸ,Ν8uy& YDCV99O%^s"7-+"Qϓ us@"wMwZ;jQף4* $ʱf t99x[}[jG,?'wg0Y,MnS6G@E("fZƷV"{|A? $d\t !@& hNqLNj3A4#K}ۃs 80dQF Hfӳ/0WޟC-8; Rp ɭ,Y5bxX *v!e-FMv" }1D=;x8(mlklhBߨُr'+ޕj b+Ow;:oyj<̻{Ğkoj57 ?U_ß'W0yEݴ6GrD6´5["nڃ&_ya>/.!B) \$6;XmqiuqY8oF-W_]E}J>'pᳬ fB{*!pt bd YTZaOX^o\ip*HB^њ*_Xc$"!6dkC_?{h Ƃ"HJ؅< ^ڃ=F鏳5vVŽ^pDnb6ڮ3۱ ɪ@xdM%{_ƅIgCL1iUD$eݙ[A߫qXRRDbы kKF3cP`r2I7̐kdPy@羽Tː&X tUۙ ͂2(BÑyG"}Igm7)$`#rdI~ΠAS9xwR^&xi Xsn1?Wt˨~13DNj?ҞO&1_+/~VcXmT@`W<3 s@Yv^h=2l:~nOYңs6V<3{Xew\&d5U$&jR6v=GP vX47\-iebS#,Uj tI^Z,c?"PܡdYprQ}a}Gg`֡0jcgNg]yB삪hz$H)3jB:g~Ιpг;<l]nW}Џ2q. MK7@˥^'/g1&籚DeGF9Davvfb'+B >mEYn+?3'_ .&`8S ɝpG K-_F X XĻ ):@#~qbqzP㈣D7-\~a5Z:O:gOثmĴqڞKPTʻK5 >+nV ;z\ s8^ 3>cf8j*9g-yr{/!6ruyf%4Xm{г zwDlA([%f7lە6?| WX8x+EvEۯd".|r38J) Ȧ X`x,䪝M5tpPVkV!}~rfH4mz[jO,nw#jy ȶ'8W@b[A{H0竃4

0!@GZ~lANK;DyFk`5&#@0n/G=WF&d{>ʇX$RXịS&ƲQ? *ґnANC-âq /?Fב?J1vM!tW.q;,TiCwyc+mqs7W-i'O.AIk<+"CտW/-c}ח㑵-;lj[*.3ia"^o8p Ni坮K6Y%xn`bӁ N|VXgӊD8HmʁPq6 #MoʇcvEK(ji8Gj,s _EܒX3Vg`:^|𬞶eknrM4 _ȉru_Ln%R7$d>mUGCMFzf@$ϊbnAKiUp-Ktİ ?Q/^8{&'t8#g58Gp4Fާ1X9spz2-6i+m*Optotig7omL7ʮS-oHOG?Dgcb |$+=ſ"ϳڅw|Q(1گU?`5XWRXm[|ojlHS=tzIfu%XۼBD$Cyo]V;r!U hF蟍9y港kN W[k@ӬF1j^V.j݃ĤtttFj{|c*W~j E+aNjϭgCu,4$ڔG"Ypf&>^4a6Rq"M}JcZUN=Qo](g)d7h fcESƈVa÷Gӡ٘ĸc)YŶv:z:v^6</7 +:o t"\ijRKķG@X8,hRn>X XMeš.`/nPJ5Bu耓Lo}-|Yu^BR_?nd.|v-ax N'1I;4t\R]-CKVkzo|u$i&ծɷz9j0dmXypO6C!Mnɬ6%k <֎xxnm#ۤaНN<ڠ_kfYTVY~O?n>{Ռ3=Vyl9f̈j#RysՀ$0BytB1P~;׋krܥUw[jGo~0>Ug##}v @Waz[`5/;>6_6sIMk=(3ʋӘ XmD[8/HCjn)!y@fCX )f| i/ِ`D'Ym廏 OKOOB1i  .0ri0`Yfj|faΝu1s0XtJ=._b3bO ~TT1_Y㫦5灨&[mIoނ5 C/BXuq o~߯f+ɢmrr)Zᒋ~j! ^ŶG@ZVsVهh˻c`}&گj>;HGLc{FE1Kf7ݯo.16%PWdm Z,o.Nۼ2w &.N\>jBi1Ez:G$tiweg+X<96~jo;B# MGˆ߬^NU4#-oJp]#w_aONV4ti| W.9!3O Vy(yw? "N&%ښ%b&e!Rڛ'ީHyр?7@ˈ_K6u tV>"Z ;mVŭ%I}*o3RA`'dl$%_O`5н (<.\wΠT?j^|iK|Y_'YmH9< +yהSK_| ѓ]yaYL?T6C!s,H }3Y/]"eJ|wR N?A#0Y4s$Ɉ-h9jxܰm&kx(ʥFK{&6bUv+yI_#)s`綷յOj]N ElDgwESntarS>_'ò޹v, L>R 0?ﱌ jLO7rRӚut+Idd;2 88ڼj!n|>l2 VyŸ:mB?jW! 4g5= =TnΙ"7`5E:eTj So9q?\xT51o99-bKj=w}=t% Jps T@rOڳ)ᤡRKRLJjMHѲ:jMj kMPKfN9CGNWM4&h ;3Cza6A F>~4N Α}@l9!RLeɁAˤcHNBk6.V0,SXl3mH;P@Dq$]5Ql5%Dj4#Z'!7^U<"7`f$4X#Pg]Hےp?gT r{<)X2wY fws~պԟ;(-Ej!q3t;EܕBr#Ũz *8}~O}è^a V[}@{d6+ 295 eǘ[u;|ت _mpJjIaYC%g7HF;=~SYg5!AiFr\'Xoxދ&@?⣲]R.;>(K m%2"OVcO,4<#s@;˭@zzāܿQTVYy,}fw/1Gp~G4@a7m+ڥbM,/#y`D[{"/k+<YXw:?ACXQ=e҉z1\, ${]>8 66A>t7ɇ8 n<@c!߳-$!A[]b\08ri3ۉR[7_4pHZpu[=6U'xpH LbD1X=,˶iBȕPz1 zgfq-=KF;|lI1 R6>4qcD߳kZ!dy~oq (w4A#nTmS- d0^Ʊn?3wmϭ|xԓ%^/L8tINY?˽Y@_7WjU+JKϫ4abc4mt23h]v+HoomḎ 13&0s|s:sEN$㇗l_8^yZ#洴[#p!\3j1=$lkh8xsh` Xwgl=MFPI;MG&4#s ]`7svYgd΍.|+$_H4l)EYM !#Fc :-(!ҎȌ2Oa ]֩44rBMp(UTQ X ń2'_VǎOQATulyV?jQ}l&>,4.miv*QE)*V[yZ*Qj5QY?*da(>[b/ըoA; S8ԥ_=ŝ1]bfvCHENoP ҔWXYër%ST]%(7].UFUTQEUTQjTQEUTQEUO /wWX<\-*E}hRj] z"ef!35j.q<2A?v߻]-z\4S"9nRq&筐L[ayyDV8lŞ6u6wq MYJ؟wRsϷ|DrMM`pWo:|)VzEB/N*F'/J<⶿TQwa9"Rވ qXpS[7LGGsr}SȅkڤDPP>Y+dW/Y>o ΁2]$,K1j|5i柔q2E&,Nl;˥ƭj?+#[N#om(uH-&hS&? JuH4 [ߖ}nտgiwUw[]'+Pri5Uir@t4V˧a)T>0ӏ"x9/Y~;Vht[g#ErC5UJ aT?r/"+Ĺԗ=Na*xweR]NJ!b[eCYZ]? X~M5u0ɳwmv{tj1ey-. .j+}1EI꼞ьY+sY ?綜_lLeIϲ0~L*f[6BR_jԴs*EkWȣnH߯ߗ@;B5Q#F YF`ѥ%ۢ4XK1433ؘ)d&zj3hHiACX<$faBcXƎ@A,`ga y EOѐW?`蛆en;-C iPZ rxs;b@ 43=d;!J-C^kP yIbᇇ8V603CX NA@lYAUk )4a%U?܋ccd%q[|?4= X87yVgbrY08͂{n!3С s1Vf` iLh~{99) 6Ei1C!Zrn߭r'dMg5k{Յya?!Ki` YHI@ fėl*}. ;9AjavY3 #} vr -r}Z:z`ǔiPj+(p9nRraH6mBK|תf*Kɫ77~NEBN-nf/k4`m lDyXUkv+gO"Z`lyzA==u8yKEjaU~WNS93.b}*Փ7[& Zgy|n$ZBi(:“HG!Xۻ~|~@=ay;x-[1jn/xW$sl~QLj| |=<*26+QM/hF^p9-( |i1OSw EDƛ@2GPU< C;M Ehhjn-[QNмs ʅ;^j h1`8df+=IX(t)3xԽ<pսVVNgqO9f30Y.ϼ?0#+3\=k,hƲZn]#D}TqlG2c}B>CpaNIaZkݫ+F 44x;Q)@mz6ͧ bbٸߚ@\2ŦrPNZjW`vLE^@g:Dq&㚋ob4 )Y_x/SZlkoF\70?w_/g1S%P`Q9T%ܢ](/0nvsn< Po|îs@V) p0ҝWhpt9S Z-Xd:4&dupl`U \Pҳ; jC)Tg~c58AqEڮ_p5|_C=.YtbqXZb,A|ޫZHŧZ{^qݗ8oe=Z@ӻw.Zgv-wzK fէ!į S˸YS%3<.0ʗ޺w+; /]0\|<\jm}Gt:Qs'V쁒@dNEQٔW}_,%xٸ mء[u~aE7 23=]N8)eWN}&ɬ9pfWM^!\qR=t\KFFxgw*-{/bKNָiYH-?xZ<~{Z~lO=QKJQK.AΣWGnCT:Sr hwHL^$(;> C^r[}|=er>h͹gfռ,W\UJc 3(Fz$mr WӨ uq݋6{i(tj`q|b6ՠV|ӹ]5-_ydۧ׌W2YNϩi|j&VY L1]_l+sc*3&/~e6l\u6F;T)W̗,fͱ89<#1|#[.hZvo{B3| Br .Mέ];|ʮ gOwzF1UpCΚmGT=zr*[^\wg5br+7&b-,nЌ,mTIy}/7Yo~; v88g[iMOO{|~!ͽg#Rjy- o8hM*W5[id.#_fL 7VARmv{HA=-/ɵ7peICųufgrK۲OC6kgvj<'ոȮM7kڿ/+S4: |ft-)rV7MnPL٧5swwI^Ѐ ivNvFMEa5^M?q$~zgⱋʒ4#+[%I+IrmBizɗj!Vk*4bjR &unLSO\Y"ՠ1+] {ם5`D1>rgOtT nzl^ |Iᒆ/]NnrZ' "dF1>C3ju¶!;*{gK@@/Sw*.QxF@\uM5jl#1ߵ'QBu)%qd0>vS|#0Ki7RJbj]q%OVQ zQѱP'0Mim믙ĿL zO\¨C%ط܁iZ'Er{($շWTQt]e2e*q,xKp0nǙONָ#p}PL(ģpص?:WXjI;]'t }}yp&v ,|?M;*E?chyjesc GEX˯Z;9u}ݍ$|vrd' Ȯ6+>VFJR3Mgceo`y0 't34 ̊M%va&%ZUm'vITP;bcF3[Ap-cQ(=ViL1vsI@$p^Gcq!4#vJUy7J_6x]/ij;kFM+$wi ?G&9o](eQrR8_&&@R 4GiC{1viR!ckVOOvдIbg&8뛹ÿՀ!{e3[''%g59-͞k{-ZV*aĖ!|؉kS3s>p=j辮݂\S%ɒ'g5FV=A>1+jMSCo5x+h둋o9 X2:?_`y",/ЌL CϜpNj]G3_$Hu)rdnjdӌ==g@ijB m󓓃gK\$޼'8XCIt TVy֬7ѱO6R1%ͳEH/ҪƳZ~-ۨ"AOOarFm~57J> "~Qڹw;bCz,c4w6s hX @C`5!>~4Vˆ[ZmbKLj+YhvBV"$έ#jaTj|vB. mvQ5R79M_вʁ>v6k^fmBබގo&0R,7 TRȪӻyٸb gt2K,RN+τQ,bn>tK׏k>x>囈Z{ۥ],Lͺn),ɧƒbo>;HsER|v-ZcaMA}ˁo]'aQFN2}qT(YHDCf=ǃJ9rl" L(  $~愬W[wbTGS!YOv("۠~UTjj҈jjEٜ1¦;(Ce'. <#D$OUт0g]}ӘSGӱ#G-Ɍu6Ed5#B$ fHmKlȮLo9=^-ԁTEr|j7۪$^.|9RU+%+e?~#V^FjmgIzݵlR ]L٫kgAaΰAٌ gLwբ>)#s<ɥnLjPDq$X1ޕH~:vi']TIh' a>lGA*.inAB·w^0&c5t9YmӶM3$NY ٵ2Yc0 ,XVm|ˆjlZ{]בbLF[e~vzNr#,zn}2#s[Yp f5yoKj9Meտ ňz1Ao)@}mv'_4i}XĎOYHW|A!g5[Y%L 5_BA~OH]nU9.dsJIrO=Ec>:=ߚkdՙ>Gy?|b.ʉyduei~87gH/럈%tj~[`A3"4!猫œ&HfG9fKMa*$HEn9i֗=4Zw[',tG֌VbH.<9!gƺhF5p3mgN!CrjrnڨF#,:/s2,%*IFDXs]ledKA?/ˌ;FS2@y12>VT튵@F@lޒKLɪ~]HcTҷjTVf\#!k308\HVKT >p #z=(ɔSƌ"!VY03b6nY(b> e7|'T{m.(,#0{:wܓ|vZe}DZSO%8HOʚ*jv,\H װJ`ڴBsl,~U$vjF"F)Y 8;&9?uYmIƎ쌬D.49g0Q9jDǖC1["NX+=L% VY~.Fuk}k@;ϳO_,8{%';ؔ6Z֕>T c-J Xkҏbdώsa>NpfW>q~z(:Jϣ['9 tɪ㱯Eq JAe?߅Հ6&U"q(} 9!cC@ .=5>L`Hfd 鄊{ PyTCJΙ:> a{@vJ0yO;S*6y[hii$8/Y~j=AMM |бqṍ&2uʰ.@{e)fB|6x." Xᮻ&j Ҏ"A i1?x,%)'7,70 A~蓽߉q{Q0/m+֪B?Xϋr>Ҁ[%40_軶t(XX!5!=} ;2!TGخ?~_bO\pjez:zf-mN*Pͽ}Yu'f!| (rVݽX} qX9d'vI4#F7PQ#TY v܆ `\ K(7웻Z|Kw00B;nj (@in Nc\6w}rQ y ׃2/d݊VNq/ bhi* Ftǰq@dx\_vj$P6s?4޴8@O091y{c<-5 .+_-wƩ撮U.$V3u06x݅*B62[}/'V_2ujšygTFC ͞jq(B]#? f>ByLo9$=^腤PpJBhxV3r=]i3OpUqZ᭵_L-ГB9QYk@u 7_u|0d$9::Ő8 zzz[% q s{ژ99|#* ߣm6LQAooŹpe֏Ќ@pvnheOi͊pxFWKݑ o$3j` EKGq$Dq-&.t /\dL %P/ܒʼnf@(6Ț }-![P¥q&RWF($(p6բQ )FUTQE,*De5J&Qt<w=4wQY*YTV/jE`e&0J-*UTQEUTM{! t,})SRQkEe5*WTV**}Ee50,'ExW- '/ bxǮ?kK^wRD!\('UTG5LFKKdRW(:O/s8*r^Nf#Q#9N/QwpQ<CR) PPPQAB$F[R@ AR?qw~|{gy+'QK@QKjcd`7ϱZZa#/LҪO'^$wN5 ҕ@ EF╕?<=,ŝȶosrm`Ѫ_U{jph-1>qV - 1?A |30KJr3߳ ?^DCP "JYo ;f3In2nюY~>C4҅JGdm֩(FY n?څ J3W8Qpjb*9/N sk8=8ͽ൵=jdVSsVFq8fdᾍ44jk$ 3#j>|q߲l,(75:̡ի,*j!ʽ)Y{ F^7d5E@i׍XI @Wo]B(V=%*y.gu%CHff~e7ڸkX?,Bɠ3; px[M!=,\''&ȱPqD(l 1(= %߾PEFMsWyK(n>VtXVs=A |l6DZU6l?؟T̔4wD-a(S^ X-Jм5% D-6?mލzWv?,oz ,QLOF#*dnskUSסjCC j;K]ZR$A巃rɁV)oͬٻd" ]Weuuc.TJʫ/hm\Xվ{꼁F__y8^^FXi`K;uHВ?`, ǧKR;K\b)&fxG܎+N)wcӡ.>r,^y#vF!~3y ב쵊4~fX[qMVCJtĵa9AuƇ "o~s&+'qx@3;⟦,:>[hz ($!Y]77۹"*Fl^lѼsv22]H!{!?p&hK_ y ͥą/cF?f/KSuVOYlfHYm-=û!R[X5waU!x]~q䷾]Idչ^ls?㞹d~4gnp&\6:G^'4mGuև_?\kԅԠkwhmDXm5Fflbܻ6äw(fF( VZŜ>4vM0#~2Px_e7ݷ&<Zm6R|Yq kz+(ՃZ6ʛ,VFz*ӥU b`@Z/P ?'PvY'eK6p{k+ iKj]R8@xXAMXA,9_gm*cs%T7vg #HrНY^=>[C^Qڦnvf|?`HBB@L }hh. ͮ电132- ڗK+@1EsAE`pta*:QlOyPZ Nf:Du1F9GsQW息l̬X.Y :cS?׾GJ\b g?%b59kΧܵ.r+ׅh/pn~FUU_(4GXu~ID[{DҚ{LGҬ;L̠f/Z.l6bۚ$(k陸'g?Gt߿WgE>db!uUladfQ3&"6`]Ǟ60/R쳆`[}[&pQ}]]V QgW132bzTg]b~l{DPu2j1b5@Eߕ ]Rœ ĸoܭmPBp: #"`蹤u>Uҳ5z4?#VmQk79DhQ)Bة35Vn8y6y!Bd ª6p>ds3{1+1ЛrNBXHڻ# b/,SX^ ʹ!Tz;cX-&f`>bд Oiա?Rm\-nX1P@ Yn0pxx}Jr{PBګUrؓ7j\\1&tejK5]E@`n(?y,/oyOY6@U%yU9ƙ,5#/.+3J*˰X!-mM]\bkρpM'VCd4t^"_c<~Z6tohFjΛ&=oPy) ch7= \Uprgʺ+*nBrN uugyfckC󗭬k&?kUf-l|ƎնSܱHKk;zǐ-趘^m$V6,ai2 "k4N M}=lMf{HJ .¼lW =MMjh Gby}Q痂VO@/87$icdjd}ZH˯l n)' s'_Mc[/^Rʖ4v OX-nJGi_:2]ȋ,.Mj똒gl*w,jϣ>{+9F'̌Gfxٿ=p  ɢKH ~u49;p맬v=hl;LҶ ㉳{}3#>`?79*WW~ Cla .Vbg&`gfx$/$!XZNm!H)[tiiig5>^ͪ1;GМ~nEISCgCaPbb`i ݵ? ͽ E JF=HGZ/^'gOZ U1&ԗ8SpD #1 >+nJZ|# 9X_wi{- It7'm\,FĀs_| moc|*`Vך&]3@kR9Xm]ЮUg1EZƊ T`kwK37~P+*ڸkXc O >qEgՕ7t%Vܠ5F 橰eh91n{өOғW̒e&;6r5󲸬ZT@y8Y`맥'n~~0w9hr*xbu dX1CO5M΄/d140gY=,GFVΨ(%F"`B;LL`Qev<59Kl=,m-ol!)[YHLL>wLGyvm硟=^k#iV;*ZjT5y1 \pp-/oineᔝ8Y3B-DEx6I~f5pnmq&C-mnǜ w^eJn&Uug> r.;_f ^cۿ~\`olacE^hK9EEԴk]h"5*/x>m6jvQ$N\ܠ>29D{,&fț_]^?FV;or#ˎg5쉷JVݬrYTYGD>EgH}fη `3Mr/c(PSy9M2R&uUjooR&&KB':18EV!7ܫghVR~qhnACI gSm@ż^B}>N]j"$TfB>˴xw$v\_FXvU]=( iY*RwT#N5(||'i.-s?xퟡ" ލ29i8*#iZw&b}HNhkfOQ"i"cXtfdx f/rVkj]ay=P7ҡػ!y/V{Y;jy{NJNv18,4s뵗FA{uDH4_L2Vkn:cٛO,H#S3ÎW|ɵt(8Ή51Q\Qf=gb V#P'v洛<=V@Kj]HPaH&f,o|8K*OOy[T%{%mu<-_R8//Eg8I˻ z\~Sk|R k$V\ڞ<_WL%&n6\[HrKldx=`н痳op Vn(6{ۤن^_Gaah'/ޕvw~ E]cjYko +g`Y6@o}mY@GpvQjqMݓsC #؄\b1)Wj -efFcel&=m:|6yPi6C@?>UҥTJy+Cܟ*>rsgjF5'.j,AV'c5p/t[gj3k/_-S>ENpZ³o/l?h`5H8,>ZL䵘 eFvŕ=2uն{xTjt 37L^YW>hm{G:=YdhsЮн]0KjA>;<@j;/{1P>Tf <"YS%?5\j,FGV9 b~-q6lV sm] _bIJK>9rl$+ ױ%Tpx:x0F"l (5>NQG\f',ͬf`~L9tb,o$xIfƶUA_utV8|xDoVf6hjw>hj&rV J,.;c^mi^tǑդm%IλhtESna.H"ְD{ݛ7D[O;?/eٵi?*ȭJ̯VoMyA͊4{Oyw6QsJ>~qNQDſs ܘ+0܏ծv]+(3qdVKzu FC 8xEp-em4{i(~u~#K=w(H 5W;؅t~R__znp!:ܩOz`f@@]jt%u4wmtcNoӞ3Y`.lX2p\cL1QKV)Jrzjq [(8ڣozĚ 5W{|̪ܴ[g)m7ȜNK5wj5_ } 9-e #DiWW_<$&8< 4\Σ/m#%> U1@=z39UwjMphzj|fQ`6scK(@bgaQ֢*[THnBJ$YwsO|l6GKP0w\^ߩ(SV׉aBKOGY[~#ZO02|e-Pݐܧ@_^I_-$q7' '+8KfX#p8RʳEZk;'kUX_yd @Fc;䎙kr-L>t" e,{UφZ:eo3>qnpY33J ag? r[ѨMT \pe3`?;8pnfozz"h)Ae5eK+ZZHa\bH?QnnTo7gmcՎ>wt"hVg/St=Z$YaDtt||?mJcaEqϻ\{z UV_ffrcX,k2F)}~=81eȬ~^XGLQ z8uE  aj5u^&@bXUv} ^֔˯G,xE_ZnfyFN.O֒4K@M88ƵwX;6 Os>(ܨ4t݂3h_/՚*nSUN>FW>?@8[Cn!)Rgz>Vr3+?Xe^DVà{oSi/XSqA%G#e~~be'R]8wnj5'+|yd+*'$=1?1dn]#6#VK̩V"}wd(iV5J—cշ-ӯ;sakNvVGIo&KI8VUЕ][;sk} ɊBiX60 > /P㟯-8ԅئ<,7O w5M݉9u$xD؋g;zQԂi"9uqYu@uxY&!n㷊&=uQ} Z Jz6~kB, GlV-( D0sN+h,n[5K%guSWZp^f6uT5vg3y$1[=*?cN(K^†aΖ~ a.1_@,#r*Heӑ\Af@#=F> {&W[$#( RG|M*03*\=28el#݌6~mtF%xm%FKSUuzIJ9`oG_QR$#e ʕב[S(z.@x%Skp q^VxnIjD)&KѤPrp/cєM H+M),R^*rc ˖eTE%TJn8G  $=0K@AHdJ㟞 [kKR002O[yŴ՗HM"x(N ј4๰4-KPRHB(-?-3 ) k+-"(* TW8}/X(PYw%H((Bj,[{*ƪ '5ggEXYF$'`;P&[?Dck=Yz i+h=˭-ZC4koT93+A`VH5j#뛣Oy~ʎmsO<אbogM} VMA|_}H !G($mɵ]߬ Ik\^_?ԇ׿9M* +ȩ qb#Kα2Q7Q5yR5S,݁[!UaܘOao aߗ{&v-B E{ϫ+BaLܬ\Io쏢*Zj> ]W2+sKRGp@9Lq[ 2#?vܳqaMggQ _,(w\hf BDHq)ΐu_jj)!.EIGE4Nʭ+R,- p%)ix6 yI#}~*,i*l9ٙE٦sq=.^ݍW[@ID_~T)h2P! Օ&GM;'PUWZ#'f-NR-͝hFGHK__:AHp%gE7tkJjH*`@ߊ;L,P䮾B4M?;MV*[j^&et J.V r6TPVфaƷ9,`2yh?ܑ*Ӈ!ɂNX^G{T]^v^v UQΩU[ -3m$ wk.ByUv 0AGVgd>qZdwE;aP6Gs8Nთi~(âOC\֭[="< ͛~Kf͊y!6"c5sjڙ 7-5oݖ ԇZ[{>J(jbab$Aqb\6MQTq4T",P.%u*.{VlL?4Ӵ> E9Ph{[+tҽK]ؼ 8( z͔770|'>FE=eZmWW|935wb (,Fo۽Mjv>wPйXJ s Fݭy9tvI`e7~y@Ac]Α4۠O[ϓ%$àZgy-l(#< MƓz vڀZ ;3C̉ᒼu 0xmq8׶'12Ջ^f|sz{KS+Rov^6yqxxTf+r aq^yl[V1=U vңccci͒%KL-hg\mi7[GSՍ -]mv΢"~k]]]Ǐt5!6"e5bq Ԙ ӅCzX/o|Ȧ[-uj3Gҡm#'{oЗnlT ن\SR+)ck:숰 SX4t H֐8GAX95L,OAa$xGhئW_y EYPW86`gՖgF.]@@im!XF@6R$VQga3X`(-.}b&>1%[8<12 y. سd7fĩ0먈Nx #+/5 jו " $P(E*J2ih퇠d=u8"8 `G2rUl'Lr /;nd}ĕg%y-h^WN6(P(FbpNn|?֙FUkkbp*H'le#M]-.S P&i•7% ꑱs𥛱O+4\B\z4&c7 ]*0D9x1$> ժb 9J3HS~–2ކz~y3 'p*,{=5PO{o{CgVxQ.!}wI /,'@)oGĚ32g»Pnp9ӓhg5IӗyNIeP_Bqו;av,w wwS79@BXmEj,ice NO3EIk elDoqlh ;G B@St*e>̒S!H'+}܀2 &5ILQGFCKzƃluGFek(ն7h,ba"rt97oSaӖ KKDd&g? feb)v!Ky#kwFՊ} ~`Tc~h q Nj> pϕⶤFGogo8Y9@rNt:+},͇,<1jiP Hb7l[;|/OоǧeFP]ٷ*)A}1l|#\UBdn ^d*Mw$AaRVklQq2o7ҳ.ٿ@mчA%ۼHYjO*4YX-O2Փ2P7(<KBkL v\b9ΑL<4퟽\xc<ЧU6BRnQƹI=0yC𱐐PS[h4x% a)Ѿ)̳8௨{a98KfaGYvio Įu WY]^Q0}3'+RJu-l8L)^+zHhJ?*̨1iXUk+pkg s > |65Ѩ-x,i#~vZ{OlDlZ!?|Z_?{K=}yҌ_ʁzн^Tz.o!~ď01,-;NS8NL*++%%wqf51eV~ݻwifeenݺ*J}hfv|!j Y˛E-zih TdllLگ5B|D"Z֋†3ag%η pVHXfmh:V;u H;HT.2Sڳ%i`aJX9"@i궺 } WIfћ05`58dzݛ0u`rєӗ.MW>mԅ"~vЄyٹ)xGMFGms͔E; Ohvݵd I@0@ax)8n diRtO'@zL r{jY--(,.߬οbMZ[]9njC,?^;= cѨl?bĉa}/ԲA`_"!6""6t4ܳA@Lسd"&]z3y #urYxW (xnA)ssp5#+<5vd5t/4&Fz"h&_8L ݨjqd%|r*\u!h4HvGl մeC-0p- Jq!pOjaq p>{0Yje8{f=( djēoD䠟vޅͅL=Wl1@jtCV§4`;9! ?pц/ڡg0.\uը-Ȋ}x81d'=8+img2跅_ZfQT/ 8ogPbPx'H<ŋL8|;D a1UjAc\V퇄2ҍZ 48{oώʨe}s&OZNZp2^x 6>6$'*:2JI}/٫s()n[BH!>BA 2E8c$ +\- Z[H ^B>Qqx10嚞GY!.//ن1 nZZ;a>P 2zv%sF}MKRF B2M-^_Ag1UyF6¢O-v!I4:^}E%[ 8aPLVphDX͝)?]F8<ŕA/ RX^H:4#G4i*h???ٳvvT ՍJ~JtV~B7 ݺqzz1aIO{KJ]\o4w֨TOp٩6OEn*!`IJ-cQ% XXk 꿽Ψ^ $Š0gSly,O{ZKђݤ3u +3D{@eFAI=Ϟ{֨αbQ_Ϗ'?%Wۿըelzŋ*д40,-- \ѨaSAe>x' ^*{]2qA#}>,$9`[lSNǥI8& ]H%l$,UM]?D)Sl5;F1I4.-x "\=S~2xCI( H ~DQgo3>n܇Ajl!p<C c2j>N. gp6Ov8Ydeɭ }u?is<>7=JP4aE_aZlg;t׺.\Ah׺Ҧ tV:+*?n@VFܶ?iO˻6]nA8X[X)Fp[L9Dj"-5*NuBBBLL3$%%++I&h2L6'NvǢi hlmܰrs7Uא}8y5 @A2>WeJ%bt`£sOi(4eA  M&0ޣk9x)s8yx vh= n1ըYo axf-_h,[AqY"@s{gh* ډ--.y܀jCHWLNOLWJu ci{?5y<4qaک&1~* IZPʭ-\rmw/%(SE)wAko9#U:S$CaC^Qp {x3 ,L,%.sP߫rW{ZEaWoP2!e |v3|?NNvkJjNK[?wcys@rQoIr0:)+Z.ә'D$ṏO$6qX٫=j➋4/t6Նjޟn}x9fyۼ91%7mudIrKee~vʙX9?mnc+BJj[I{etttRR V'*$Ɉro6Tdf5Lڎʚn4/%ĩ&! Fg|/ind\';z=alޞkl]QR25Ėj[8i,|IK. rO٣1>4r][(lFVFeN@jpQczUoUeMUrR*Ed_*'5wݻcǎ?j=,_O\UTFS| ѿ?b^eU3X ߄vٳC QDDDQrq@lٲeذaj Lft iTU";dowm„ k׮Bffk([{{t.J5:˓IEs5CN:ZwomР El[Zfzd_a 1-j^ U5(Uw`O97z`к5k֬ 8IIIuQ fbB hkky srd C(  =0ޝNa1̱EvnL ~!AbP Fn{u!|O4%Khj~ggu޽00EKrrr͚5O:!cFqߏ8D\}S=pyM ^ST(-jGiXCrg`j "~LSq5ukT.g<|*(3A -jT `0 Fم`0 Fم`0 Fم`0 Fم`0 Fم`0 Fم`0 Fم`0 Fم`0 Fم`0 Fم`0 Fم!KXYYY%s,`|0Wc0$QSS? 9J`0# IjYYY `0D0Wc0$a`0s5Cj (;0Wc0$a`0s5Cj (;0Wc0$a`0s5Cj (;0Wc0$a`0s5Cj (;0Wc0$a`0s5C"qt==͛7NZ2y5kH<"'\Zb}*VXǽtcccqjhh,X`̘1%UV!=zTfN Cj $EjG5j2E7nܐ^0-avٸqZjvBEɈ#mF~ZWWqƱcP~Hw@ xLJ9sEd#G\r1$j $E 4::͛zOWϟ?- Ν[~=\177~hhhՀ2DZjœ:s5F)A]7aFFFHHǚ¼3W+><ǏseZCϟp?_yqڵaڶm+äuppp&㻦0֬Y[naԩS;w.a(@wwwoooRfff-rSǏH<\v^Z 9rdtt4]SR[ZAKbѿ+ӧ޽{ 46l~go~ӧOrr2rqX:dO0A,[l111tqtttpՊVVVX022z}i%SWķ('MÇOj{쁑Hڛ7o?G~z(yxxxj j׮B&&&$3.]#uyQLƉK.$$$3؄]v )lذ6h@NJ ?^Oo\KJشi'uS0pNNݻ2%UA7olڴaX#LYY"S奥}yaٳg;tPL&˗/6mL"ԭ[ӓ2dѣG $QHW mOhBUjUE$$$ߣ`(] fff_&+O8ѭ[7}. B/^&MZr% ```~rVuV":@SSB H'4כ7o.; 2*'r;vdS^u8wZdh!-{DD٤`1Vŋ>}p@q$iJȑ#81p8z^b&"ډDGGW2{b- jx1&M7|1Jjx'ëG*HLLTe[x]?~?sN,lْ4^n]jzEΉ 0`Ϟ=gJ2RCh)(p5=$Ғ9r$}~郠RN<ٳgcx":bĈ-[ӡYbԩS9YٳxQ:^D"%8BlQF29H[#gt.Z:hР;vkJJ ")or6m`ԥIl]v 84iҮ]eƎ[SwЖj\1Tx)>06締 >u5777N*+((|@$uE./zzzZZZ } H۷o7nܸu0*vr(&WGۓ'O+!vx0RԩS]tT[jUp޽}$]mܹ ,-HKy>ݻw'M~-䨶 ]J;'F[[Ʀ;@ :d1'~I|g1J} `*1 6OB9~uݺu%b -Ҩ{.@RGFjRj׮d sXT[7iӗ;|qСٳg,1;ȣ_f/B)_-cr!g|/_Tp~Fj2$qX-'#ٳRѭ =tq(@jp嫟5 jdCAN$?_0Wc2]% ԩըR y&Tc{|ZZ#Ç{Qzz7[a6@TV_xq}#BC;;;J9żd`%j{>t\ҪU+~2.gW~C_6%111ƊB]?ytje2dm۶M ._]98O~O|/ j5H`(Zݏ;FD9L2x@"YfU8mذaر >Dդ H@IFA[zI8.֭2Ujj*.L ]훃X$annn^^^+kժE,*{}tȡe7PJ`!v餢7ĵA!I;I NoN~=LoćWrqsƌÉc u/&DKx<ÇNNN9m4Ʀ1.F>Q:uD] Cdzm 6i+W;w\ FAרQ8<JTdBR]v/'?47g1*yWkܸ1/RL@(>g ZlI\ϵkH=+'&[NOdTŊ_.xӁ+tedd0,,L~>xBb_W F]ξk]\Q:ș?>y)Ԥ+###UDj`` %(h7N}<ȉC~ g-?|R*v]2bEDDKLL  r6M5QS2ԩS-[FWoW4,Y"=9t1(1;믡C*. qf͚ Bx Mծ^#R+"s91[[7olٲN2%6Y_\KK Ǐ떰/_ LgϞkZll#GOcAnݺ#͛0fN\7?ĉ>[9^qv\~Ɔiذ!j_­su eÆ x駟hk׮ᵁ 믿v[ 0"!cv-Ϗ$ѣE>̓{!d޽k0 N\U"ْJYo WrM*80 }+UQAaa1bDHH0N\H\b_~(,IbiݺKdnڹs 9+<(/ڶmKz!H@8Rٳgkӿ '͟]&;8˗/Cm׮^Q(```/3 PBkҾSǟ51~X BGWR|wժTBK}ԩS7ȰǏ3gΔܳgO^' X_^ݻwuh@ 6 &Ln栀W\s$455qHTcccѹ֯_OzǏx".\f͠7.m`Dbq$ $'Ǐ IYt38QF\7B's(j2Aٙ T:n"$&&5;;)CvfHgx{{&uvwwYcǧaÆ#O(3 5蚂{>2gcP11p}h>|(0y"1Zq2)2WC3 ޟ`(#899=|ceΝ;9sl۶;ZXXq%2vN޽{ DСñcȌG)%,^ffannpBځܸqNII`< cHΝ;ױcGN<8G@nnn8ϟ߯_Fi s5F!66V_3EyuW;B\\\1Ja(ݷomF^zuE e˖Ǔr@]8n{x(++o޼vO&Z~Z|9̧TZTý#c^LF8ȫD')B1'N\f ΀Q60aڵkU/_Ç]v%S0PXWߧ7&&KOX pRt52gspQ>s=z\r4U 633+Ԗ dcc#F2|\W|2"Lɓ'9|:SׯMMMKllBkZZ_Yt$ZHہ9e^jN(8(ҥKeՐmIEFF޼yiӦ!=Ϟ= Z jƦM~ڵkvB5k֘1c*UT )=*/;vƍ29 uAdƀѣKJJ v M4h$bӫWPr)h,'~ƍ5*l>~h``@A HYEZh:e tȄYA6W͛ib_>|D;tpYqHǏ׫W?LrJz`^2Ҍ48/:`&M&SujҐ]"k\Ν#qvv"ȮqƑA9R{Ǐ,/I' J&CD:ZLMF2ώs5` Ԣu}x<2uy(n;vx̙$!!!8:RWWG +! ,Qaݺuӧ,Y Cp˗mɓ'\+9r$Mdſ; _5kƍ(!CWčp-Z C[WĕիWG^dVc(dq2/dLL̀ݻgccTiIS:w̉G t1>ghhŅѱL;v5XZ˖-'ii-kL2|aömF /]t~M"0&)'˄삥!o޽{Kׄ"p֭Bd q y ^d'O|DxĽ5 ď;*!cVɁ`0Ev]tAAN[}۫ݹsI&pDP=z^ +h0Č*W/_=(_!+XOܻww"l_N}:D2q[n!ϕIׯ_o޼yj233`3H=~{5 V^z02?#~bGRmI䒓:~xn2D ϓt25jXYYn/4LG'Lzg͚5qUVIh㢓MU={Ȅr1ؿjp6mЋͅђ "B\JB?.+7\b2Wc0 F١hW{Ɏ;֯_O~>}N:ܾ7nhѢQBPhHP-[NP~N\PQQ B9mbbQ ݻQPCl,\%ѷ֭*uP~}0( ,mرcW\ e7oޜ9sh`Đ#/vٴiӖ-[Gx`8ـ6l@7!"z_kDD4Ðs=z]G D}Z%v!n݊;GoooX5'[ƍ\%lmm!A$ `0Ezm… BȇDB`fH̙3i>} |Ⱦغ~z:5t> W?!NzFؤIX΂45ŕjk gȀ&pZ"a$N|͚5Ǐ\`0eBڢEiKs_Ev52~wȁ`iW355ҥѣq/_RJp5Wneݻ99'.k׮M>#cBLp?<^ 0WsNb*Ud%@W^gmٲX޳g eق^:\m-[ZlhhH“&M"+廚DeMrPd9cv] 5k2?j iϘ1i׮]<==䉸pP0RbE0Wc0 F١P6lذ۷K@4JڸqvAuEl``@o]#33  E\ !a<*322pPMWNAV jH J gȑ6mpMAhlll v7b8z(cƌ9qmljMȷCq5\\&hք%E\m֭r~Ui'?TNpWt:u*ʟ`0r5oȐ!06 3-[Nkkk$i~Ֆ-[O]͛7|o%-q5pfhnݺ`Hy{)hI' j'O$H#P+1,2$wǎހM:|]׮]Ik<,"Ǹύɖ,Y2}t77{kMqԫqb:|0 D֌5 5kLMM%Mr5ɝ;waAr„ $'%F9aNUpl۶8 tUN0`0mF611A= kcd_` n޼~&M?HId666(a~֮]a (QW#:u ǥCw5D VRǏ>}(qs5,kqڠA蠥U ...P+N,H?΅d m0'-g+TT b@H32rȊD u j "ڭ[5ׯ!d\:u*.ٍ7a+'㑮+X"..G;vEDK4`0EзrCq\vYf'"GJZô:wLFyG ڮ];2K.(z@\H} ăA8qL%!*DHK S#GXp!鉉4ԯ_~xx8'9XE%3NIiƍpjOu?('ީS' i&?.,!!!8_~Vh_ƍaHuȦoVVq_Ci8+k7%xJ}opDWtF@~pm;v) ȸt2Θ1cҥLst5H؀࣯^Z*NGb:y+.Dz[嘫1 ,Qd@]2$cLtJN%(,or+@%W XS9 8t3P`lEf:"AC@Mo߆ I7Bjqe]j߄`0Exeǎ===' g^1``0s5CՂO WӴwy0  \s5/ٜ㵆Ӎ `j $?|qXLE`]zuK`$''V\&62>'5Xttt\v-YH:t蠡Ao+rMF[+ڵk>>>={ 1\`0wFfXBa\a3u۷oh'Nf͚ ڷo_zU޹s)fʕ+dUɓ';vXh-,,>}ZdҢE7n<ثW/wvZVd[ŧ$]M(fOIPT7T2p c -KI]UU_SY7puTh+4bVBjNrFe}N #\hР'W6mڴ˗5֮_>* \__C L;W=jud>QXI|9tXӬQS:FIESQBq?j 'z^rvGbE4p易w/ލ3qa w,]"ڝC:HHAf6V^8泈e>=ygtٚ"|̸)bNdF'q`wſ(r.s;YRe5=j1(rА}bd+mi\ 9qxnݺs0 0W+bjd"#dI j&LXvmq\#;;;///8ߗTj_Y'-x=&^P5/tSyBeM5 5篎9k9) 3*,Zֶ5u+bE : M%~MdD%ԳB[$R2r)JEQkMw"[cWs؜sһh8ݚ޶Y9-w9l[+d۷oO777:1 Sn? FQ6s۷^ZfǏ3F wttსa:uZlի3g`SժU###%bsrrSN(tQݻW hԨQrr2۷o7h[9k;v,-OK[[hHޯ Q85^UTTHcǎ0""Fvʕ.]@Hʕ+G! i i֫WaÆz!O'O]vH %5K8] Y9j+p _x^魕z:[,$w݉'k̙3"I"I-k2)OĊ5Ș̷o>M %#]AF@hqwǼv>t?|Ofb2GڤIj0J3fPW{yjp8J_ի\ǎǶm6 ~N^ ?' QW#^7%@)8Ĕ(! Zti8F~G4k G\vmVD?ѡCJ*9J8߮]>|x֬Y+VTQ|||pӧO'^]]]iWq֯_yH ٳX3e&]v 4y$AS7oq!=ύ7"85I3,YϡD<==ɓ0ѣGÉ q5!Up58qsnȖ??߼y7^zߓ|EQE&5jԦMr523˗kC=wH-ҌŖ7Є}U'tJJuM?=~K*6BzYΡTt5nOTMy߰yhHAzVWKy՚` ] 5Y#w5Q8%sC@`]׈>_rg!"*vOCw ,| {"+kQ۸cAߏ^_::{Mኈ+Iÿc}Y[q".gȌ 7n?&MHz|A DFU֦tMݵmapyl$I>o~f{Bj+ْy9eyŞVQ&\ '9sf^&^zPwc{t!66bŊd vlAAHG???(W||<|BB)N c Уo= ?!Fp& nGBT׮]K(Anr\ Co=zӃ{pB!u58 Foذa̘1P"h%2LNC] niq֭^ᕕqƍGL055ŋad2%RRRFF?>#Zֶڇ"2R4zoFJ je^Ih1o,CyŒqxkUj`һ!]8'9CXd93Wc)+F!`$]Yf0=zlڴ}W#iM9033#a/ 2uyx|-uqqAPiIIIBqWFd}AFMt6x`#+hTOpq5suQ:tٳIC'''~$8ծ];H6j"\5 _\9kkk ҏt⺓җe$ eM5{Ѻ1h2{}yrVM(Lup=mL{Kڼs> Y}Я~uXAJHI64W3RLoFXdf7\۔cpoXy wTV-SEE|/DWӭ_?WxwK{S5L pm$^fEKv5AVTSKN]2{䦹BAZn{wLs9и.t%.D`j8ߙҺUVA ߤIĉ*Vg .R`*ꂃQ#Dl nݺ8\tIr\@˚5kW*j9As++jժISYZZ"+hs*'OIi/`~;w- M 9b͛G=r΋4Cjq2]k׮N⏖\¹"1z(#YKՔ8ҽ $lJ4RRVJz%:'%vl\!(rWӶ1?3Rq5ֺ_IBV| Έ+N֭ osEV>=_t7 roNЪQA~<{CGG?S(_%?(-2PYGY'|ȈI~*OoΌM|zVv%MeWWE8Eu|Յ3C}r/5+n%<w͇v/6gDIYƌ6]HT W+Mؓ9)U}M@m5 2"0Eպ'g%qOL (x|ߠz}QZm=6p#TWF d}U9&hD.dd:d吨+8\5p3Wͅ5^Y3 EN4"bJTj2%Os5hԩSsrrǂgv)_FNΜ9-DaԨQNNN>}"5F] n1g] `Ǐtyw7l0##R|W#uo8nz&d5Dt47P]/ZE#O4ڼyȑ#in'&&Dd2G@H3kӦ "?^Z@)p7Zy%c0;U7X_\ W>]`C?_LٝSۤ8 p/iedR3s3p \01<|9gI&޶"4íC՘{䇯q5NbYUX\-G hQa(޵"yw]]Qw^ߍ}LU3Ў\snoǫ%|@vgF2!0Q: x %2j;wrцdƉ[ :6200OdNZTQWCv5mOU&j#$ ]qᡭGqPqE&&&8GrE}9IVFZ2a~@\~Sڵɓ' W~RI&V&W*Cs]Mc:UE';j1Gq:wN'5ETt]qW?PxVtGm3mfk^s߂k!DAjZFs@ӮYQ:yʌN"gi@#tl+n?/D/-""7](݉'4hvZ^哒H:%쀩 Zd33E Pp9ckݺ5Ҍ$utt|qB`;vqd4<1;pe~~~+Vh[QW^2dWcv j@hsߜ ^* GAGRQ&T*O>z=}䧤U~Qat54X.\u{xdFϤzz[f$W}"TV>actJ?of~*s5Ikim7YC\zvf~Y@r[̌B?qC ҲB _F>VhV9㻤] 6i&~2ONFUWWaݺuPTC2h%K̝;Wf ڰaSbCϞ=; NdfON\䣼%3((N:K JdD * e=Ԯ];f[4,{zz?JW8A(#YO66[pԩΝ;dCHs~9J_~4NHj۶mo*U@`Xod T>ҬY32,881`y}%` mo"è^#$Xz<Ȩ>}vYmP򮖝7ڣvR~gDe)Lrp?\QR7riP~r+w'btSYEEK,_j=qh>(Q&ԐhvG_&_:< _ݹA[xcv@MUqd 67!l$mWo!V#t3Q! e1[tᏅ/"+kFoړ'p5܁6 f.{P98 gpY*ۈ_&gW[||ĉ?5Bi3(yJd#)$y ~DL =D ̉###%z?(Bxx8Ube^cd$''{i}F>XܦQiCffd5j(OQZևTNft!7­و&Rf f(~4oPCǺRVbZzx\wXv| )mJgGɈD-,7PU_YDߗ\/ w̦ӡD͌\G׍ܛBs6ȃ x(E-?].R7Z_/(,gkT5t3 5A$?3i;[o{)\»%$tYz#ѷ +}֜VMtTQVymu-$kWo1yb_keWq5> 4e hj~PZu%jpJJfuWm=PP B\qwC/sZ*‘ wGu5)*W{>S &=zFt$1"4ѺudTCY]t/6LJJA~Ȉ WCcd``HR^:xg%F֛z~LؐbP N)]ڛ^߃N*k!asf'gsrPa_ȍ@wQM)AѢJ( u43T,TQrjY,HwA4x_Fd|^UPB%%CK'J q(#|$ʚj!XN~ t45#]];^ըoVMFMx""Aj.F;eq7Hݚ,Z 8P*MY9knEG4@LF.yȄ"w5ܰr?ʨe̓S[<КLrF$50PW: O4Hfb^纵7(K`$ Io?ާO3cb 3[Ͼ/SA@\ "XgAύs=xr]xd?5+%%%+x[5+uw{T}4z22ޛ^wLD#΁\b!'-K4Z'%ee|Ѣz4``H\QH dҥK[.d}HfɬzLxQ@XdI7, HjvhFyEJ}SRҶѻ)#-2^׶M 2 s5CjBɓs0#B3 F``H\QHȈX8y/`0! s5F!quuX( 10Wc0 Fف! s5`10Wc0Rޯc j $eE/3C((hWh[I[ܫtHjZQ;(H:pVBJ݃@2y>xn!D>x9rXm\Z.p _G@¥`AzkȷOdBgcxZ\p)~qNOO\DKK+##"SGaxW3Ԯء{2@YMʈ'T=lxjDy՚SE{iB8Z>LB=ѫ%I(Ĭ^ZIyYm){_@Ѽ]}B+b9yCΧL; CFj0vcUl ;rSǴ*e3OECQs ݭ1Bz?QJrR2[%N s5`|wt_L9͗viqR5Wp6{0503$kRrR35ʑO'uw(bAG*E'"6Ĝcmj)Q~HMNLȊ)+iըj͏'%i[8(ji/cER]$H}>+vJ"X*';1-Az."9JZZXh*uUmKcuz9jzR_WҲ̝JA#3c?@8t?eOo,aSjFɏh[URפYUZHY91I^i>jY(RCcr2q9dD%UJHz[ ~iɅ (ȍ\%&dKflf&ufMs>eFtiR+8\2$2=K12G@"՚_QD}xAH jO(e-5DN] [UGCwa*" ;C8)#l!'n~u9XѲ@XkU}]H+HsxƖ" v 0> #s泔T031͆7y喨EPxDҔUi&=rspP96XI-PkG\-'-r]BK 3aIvB EiPVj;]aahȻ5fڝ[rBYYY]j/~:{*e*x'58\H1-DfC9 W~]|Eg:)ywUS+\WEWodT~9^9#Ph>وXL z:\e騪. >3% FeTyמk[ʪ*էXvڸU6L ?3:hY3.}hFk_R`&=G>\t;۬};;/kR+@#QEBĸ>#NZ#FpGN8|ʉ>Ju*;|n! kSLJhO^*s3/b=~1h}yGm6ZݸCȨCqOo2x~ҦZNJƽ: ʷSkeWկ+!bO v5|fA^ozuƳ=zwȕvz!~JY )]Wh"CeW6u> ^;$SǞ|2氋 D?Az6 eY9Y!U k ʁ:/NNo $+H)я:lF؟cHYK 7RX[՚9vn 5qfVՌlɌIpNN?1\qvy9yN0O`un*jO4 WGIYQMp5dWԎp5a]Ŋ4e[(o/gR-pD:j/TPm5Gop?+)+_ Dn#"q;={XwӐ!$~n {IݟW$r^-tKAJ2e ؅^VrV'yp5X ;ONKM ώ8B]M结M%ՌZޕ>`ZА}Ξ5#)|hU|W _xw&w:_U_Ni&Z-7:b2]L%jcX][S\2=Ǫ$ gcX1^N'je0[Y}Fp5X5N? \Dyu-K#S# s5@amU)CJzd0G_CFRlS Snh#PxW1l8l}hSu=BN8#*y*,Nܚ %\QZ.#1\-tAUՈZw-b%X N {|fa^՞O>˔8e UZ0pބArj*b>?=oN%ymV5NJoW{1twxeu *l;\KO$L\ݞ{ Cg!n[o篷/;z6()rk+Zn$أTV-I2[9I[I5LEeOƉ\Wb&9ĸ/cr W9E#~D]m&ÖZbddj3,Wuf.FrTVм\ RF팺#ͷnE/&8bAxc@FG_WZ}?0oNE5_(|1]ڤִӉKYVcÕqڵId/Wqi*Ʒ2(و&wkζ;3 xVQ{<^-XOzlײ4"& 6|8#d O< ;C}wvwrk}3|;DYS|+)))6a?pqΞOfn7n΃EjK]ͭ"#W\~1ͻ\M0$M5Zµ?k>bk`fPXQ78S˹ۀ_ 4cІ[fZ̪acKe1tXSې}N]|N{ιb䪫p ^-%Jxڀײq'=X ] -PB X )/V@R-nD F"efgl6->wǎNysȃgb%W輊S`KE[߈źhOs3 Iyl3V]-0thE`fmɬՠ(@R+BvzEZ :!QVA:lpcώ~CEY9fBA=Ho41(QYj-m&/8l3pyfbU:pDA dmu(QW0^op|^4:=LV l ,V8{ӯJ<./x94"Xse$Aޭ7({T&KnZ+a{AѶ\.!o8_v{ b8\ڌdO$ߍT%MϮflqGbAI@V-X`{@!Swc]2ɻY"Vq5Z 7JC+?x#2=jbiVZƢ ^D:6Uz[WѺ#տ{CIZ ksVXFeu I_[U=W{r[Q-ySF1kL.I.k>®L:CEtMC4g]q:ey54ڑUMgdVz& ZqNKC]ѫLCBᓙGT*;ͮmɈZٱh'dӱ`E^ozWxQ~,+CF\rP8cmymeEeW3 )/!ĚAW(4jmG9ڳ7[ay0,ӠT~1.U[w ^eWê_֐T6I$.I%j }XE;]]YfEc?9IQhr U>ZrR'qоH89;XMi¯K7/΂ܐmvwj?q'4JGŐ\0"bDю[L'?hdUN;V;כ&+_ `ͭ/P#~5^C඲JL;9 #!uަ);U&8V҈095?[qػ=}(KC®bպ |%{=*I NU0-wMyp6tXV[(Lwejf;/ʛN9ryl!ښ_2r .rǔ <59{EϤ >4r{;r׃59yx!;Ue 7^5=ݭ{-H!j k t銂ɿ nͬ}QsGlɘt5AA5WjqiyiVcu̕AnR>  ܴGe4oʔ?X۟{ A-ϪJGUkvK*ۃ~:/Qo;7  􂮆  "! H/j ;=7۸lZkI?z5ZL_0J9^o9\N>je 8PcsR1y:yqg,x#4( 0xKJWns!O8o10FkoXYY8Vk3=ʠ;?Gsߪ8X?OߐWR//JF *;3= wxXL:5Z;:y}=m٦2wZ]Mbdgg766Evx+m֚8H=npΨ8Or3^=YishjDXl]-=TSjg|ky{a=]5bvq#8,KF}t5ɰy ^TGGӃ HqyT:ҹH#U6gFesh :yi+\MA,6.An%&C 4wNRE%q!]] pnf xB(]6xk~['GKJAFNij @9Z.RWs'vlؙ ǒG]m$AjDib="r(ǻ d(/ qe;-"FCFѕ#~റ/.^eps?g/U^HQU: }?J>" 𴦻Yxn;1/e܏ty&p3ubPm >OJrH` Knwrp[7!l@oW?3?yt%YxJ^;MmqxlhT't23*lXǧs3:l ;t94ίpk{߳Zŗ~T/ra(M4Z1  ihh;w\|S H r٦q:e\-maVUWO;,A:y^a64٪UY(A~ȟn*Xjׁ|9Do4N]G`of;8nvp|@͌unlךbf)ynإY5is;؎@N7>. J#'m-U\,f6[ B{/ql?A.oo{EP@1Wt&o`$_Ku?~(4yb <5;P"Ⱦy՞i}mEunW{Qta[ Ta*?" j29-H` FZ\!d|vFg +V%/=[qEDGJJ]Mh4|IA>Xyxg_=9"e~hYuz5jۃe ւDGTba:Ok~uҰ~QТT^Lz &T׳=4\\㋨'3m?OE]EED ws5n;`y?Sbն$S3_je# |Ɣah!#z}ŞXt>"iW㶳#8 ׹~w cu>t'σ(j[?R^{3@rv5B#[&\,|\|Dġ-O]>*bS H'dxYe,E}!1s w5* e(ì j%ClnAZ);Zbl7꫁5y('?7癚D_1(Uo LoNjg93 }3S&lN++@w# gZrLn|e/<+ c*Sr6=-y\xKfX,jvvO9jjmw2#4wo0zj&kF|!(O- "_jɪtT'DRƇ8_m]j-U /EYm0]7J4֢_ B75?J^+| l dRwyAU_ !{Xu-%uJ>1zMBHPަ}6 fdpQW#B5?kn @XVヲ"^͙2LM^ZGeMJ-=dCl9%s'eɣ|6 g8{mW13Zy4WIſqR<Aݱ9ak~5ԫ\p׭ s!3*ZJjm5L=UZgg̀oGY"~f{XnAyĬ]5:a.`P*.gD2\d]rY_-<7scZx'zj+y0i_ٍmr {]]M򐮦$ "/_M3?9_LPkMZS]V^ϑ?-sO~"SmjNsD4 !+ 3uUv"V#jG" B?Nsc//Rhۣ)( ʳ!wPr=y!P8y\8=?B:u꡶jҢOD]Ҩڭi#Èl> stream x=rFr)~y#s|oƻ{<\ IC<)Y+oDR:$S.2{ ?g);;[ewg==wfWg_ܤR~s )5S-,o/W6>KoK.IɊQjW/bTge*eY>׳bB,%7,2CMfHj ÒM3[mӿ_'TT 9nZ[a2e\0cRyFwG Wߟ]dV.(v.$M\f VeUs/~]Y@Ç}ɡƵn!ͺj^\ UИdLfm~miqӣsQ%CW%b5NHO366:iWUWEyN'~TwMtxr0"bN9%7eQx/~yph,yruq|=Ve8.u d.aBLr6U3NT#ZY47w 9-EnְR=}Y=hc+&(yqpaZm4t\6 j8dYZ/ieuY]5 K84D*Wi ,YImľ0}$;< Zd:A{g;8Ay2f|x3X/;+&#Th& 7-H='bӰl^Fx& i=J2ew(×HVQNpE 0gD TY9o(y"\v^xYfDu,0REixr>^b>ylv* ,}; 2,}4)HIGV7^? ÉG#p T0*J$-@ߐ|ĪutFX@3Wx޷+`hSOݦ\LjgP T ,tӮ׋f]1l׺'̵]z}OjИ?\ݓFHDv}-Wp(պN܂G'8g>+ ν:^H=/l[`k]8+a(Ř R霙vǯ%_`Ѓ(-;+,GAꦈ)d f2AlS:7@y ͞TbY؁Y8kKyӵ("&OΏ ]O f]:u"xaj''3W8lzuf4^=Yt밒yh-IMfv2˪AKϯ/):~.XAVy}{ oQ  5'wV3R RzhS!XoXOREa'Gѵ+%Ნu-Z `#S_Ҍ%%m`ᗨ-ƨ# ؙrlWbM2VIskyPt/%Iĩ-[Ir>4Ω1xD#-dwjb,#ۮ]z#|e R&ʏiycZzdU>wA9D8pu3 G"ƃ %JL}0kpd'o= nקOqׇe+'ظutA)_Ngb sUE4PZFtִ%\S06Nj2I{) ^-1C"$^u݀r-W+I*xٮ"o?r~0*&?8$šK|RѾ^Ckڣ64 Z$AfjݶYbsXP6:lq3" q遮%-cuILD 7[֠`Yga^@W,om!GJ`6[{Ɯ\p2p{02 np{ $Cp]RYpUyF>ɀmtՁ9;{HZu rǼg\F˿ѓ9jQzRd[w"IiZe_X+62S z$i Fn!TV) NJ6vt夳OQJ_ SǿW],0"ٶ ykq$₥`50gE~B,VUTQ +0[dA+J S)bEysչHA62׿,g+X5(Rh΋:DK,s/n`zB@ ù7Fu}6<T ?,=]i+MMWvO" fc1e\R$ /2Va胒(㞾KӰFl< ?.@n^0s`0aftu8aͭM2,=[ ?tT3VET !|98ϣ>Z%Ѳ8~pAr< 3IsbQ#b"y |yVr Mx.̗w.u ƍc'y. `D"Z~s*j~n0Q d$C+F߈f@kF=E4ɤ\X| ze(4)hNxcc .ig7Q:aDNXmTB vl.f@ 6oNn\,>2 |2?V&sc]=hٹ_ u1aIByS;|>M%a=F %Q37=퐕2=M銡.G lt+eA?a`|-Վ* /܅sVټ5xd5(&'M cl^o/ `X_ 2pTjJhsSw9(lc|4 @nm:0IPu]Bd…Nil T곇6k)d#)8*;$ӄ)hM5jQC 7=,iSS2o3,SQgjSn\rK!ںj5&8i&m^0fuET6Kn xg4$ToVl[YԳң_>M#9 IU*huN#4 dG Z(L6:\1$]C)R?n78(Ǫ>h7qz``+ˈ D^ jIMS]H(6ҝBaɒ6weդh:K@1] Vōdž&K( 6i *,ń Hag-Jټ2DFQٽ$&w0 mWUb3Z&saM 8 +7u z"-[kҫA9%^N&a[UCެ2tP5|2J?h'^|!ɴ_5Issb/&ʨυ1B ,7۾HJr55z@l,@(5M/P;"vxkmr# yE;aT9ZWn0;jCU0xj > 8w X~J8zI*`iw0W &§8ΰ8ڦەu*}n0-.iWW]7fɓ~UvbjG09/OA4װ `Μ2!cDEȘ "c3 =#&y m3QO>|M׀d uhLQ 'ٟ <K>]=1 hK-j4/E^ ]=pMu\fؾ`HGU5ՎЬo5beigj޿K f6֨E\' D/@)#]W ė8ђk.`:9>1\;zP [1^Y :ca^W8`T1зpaJIxPo#¢`WI<98wZvW TUۭKq?{,[%tNn첟I.- ԺDgpgLҾnyH_ uU5tg Q*C]~;s<~hNsf߭o1D*O3N(lvfb\P?T݃@K*lw[8#x׺28$_ϭzٮ }~;~0&0gan7kBWgK=1 s;Xâ+pnq4vWtW*,l2T\+8|@i z_Oyr_ GIyC>0$Wt]FYNUp.R b6ơO ^@O0j{Zg>1YFlEtD#Z-h0æ f-C؝WT=@%-uDi\P\MfExu"XwãWqŊG1A x{Zgç}7bOHQ8_],puHl\9zK0bF&F64ȿ@.7sFv Fv $Fٷr +`[^UVYFހq\`~>\mDŽy c[niӕ1ȓцDF N7 `܇[) 4Qp=: sJ7}rӞ/a-JvJ&AFCH5+Ï[VۛTm!S 3GEe++AD*P61=h XAXt0T,`󠡶;{ t(P霯u^4:/FT%Y|:Q܋ۆBJcIÇq&ʻ/j`p.?(@e36\t!u`[C I Wx8Ib=RhLЌk@rXj 4{{`x p=k]g\:Sn'eP`}1³*&#}]ȃEe5ªgX5h?:tè\^J~s euXvj53" טYE oFžz4g'ny#|H’9;(hO"sq`&C":(֖vw|ip^vrD'>^72~Q%ϸ <ώyV;B}ES@jw "ںI \1 րohn_G՚2/4 e|cZD|?P겎Sg"2źd1'r!dž/vs?s[~19މQ\ \ $Ss9<>fJ9Bm5,dJb wO,a &E8ʞXa) Z%큕,nayo@ 6TbJH2|߶k~щV_l?Kzs7s? Y&u32EmYA1UW/-fՆ*zTOպy?m|ufԈSt|h[H~3uF`m#':Ugԍdt~ +tq$*X1Tu[8]N`8Bbhs'ΊSc~'D-gA[n*a\X*u48LpqFŸU0Ę5~xѶ+kUhsWGo/Xì)ok(P3CW{lpصsh6 ;, 9\؈ÇMVY|4Y#?̙| R7ȡU䂍oJcľt1zKYH(Q* oi/hq 4]cَ9tPdaMR>B,Wi; Sha7HgLQ6l&ȼ-ʨ@\~M]ݨإG1[;“xpqz"u2O{Jǽ|LN9ԂTNFa4GL}='/cq;NvF ɦvܪ_p 뗔  BS:cNݱ)3wbVGL W |{IL6&'`.vy^h^wvp^n&$F'XR.WS!\U7~LTSABt ]T͝=(ش0Q5 l\I#V> X4Og ytsBRl4#I&G=ͱc}#4H{1Pܝ " bW; ˜t'?#]B`D ܙʷ_<Cpcx63|b]éLo> Țw5ۼIZ_cFrV}{ x{> stream x=]sƑWu/W*],Oq.J֛˃rA$$!@W\_w 0V zzzzkf);_ܝz8;6Ww1ҜNfnYܞ>RK|& \Jy*rJvڔ''9u783xHKq_mS@0yz#i NG4؄jک_S,U:S2Ree4[ܝ~&aSZGC Hs ʹLsrwrBq eMg2Zk DLݮ7A>`"5!"aZ8i?]x/DdO/fy/^@: „f@ʨTG/uS]pDb]wUsZ,n/xV%m',~+%kxRUW+/gɦYwaS7ƌNv _O`oRcbKn˲<_7)~:cLu4ߜY]$kxܚdIEN5LUd}SulS$OuM)?0 X"Af.jӥg:9|m0^_'9 ²ƓNڲK۲\8Ej 76Q0z[3l AAM˺䀏Z_s,/m_{) ,p6 i w탘BIRs 0%Ʃqɯ.H**oaem97e]6r{8ceGMTfi1GÈib2ذF {6 `i5q׏.V29+ 0~u"MnXp"f.d 3#FG`@Q Gkl&2 1Xo]Yԃ|G<<<@}Wg xApfS1q g#䩖js LR-s{Xuy?󲺾.~Lv!X~5]Qʲ4YE0Vhc/F%DOesR#X486{g U)hOx"7& pL|A e*Vؕ-Cs{)Y6өEy7 .ǵ51K[栽!wQ.+d{%Up߃ʄG"Jho,[Z \Zn$sCQq9(vwfR\LRmV2Xr#W>rQ}dxl&x9>zvpA Yo  00j{':j6wCϞ[%% HkpnWEág"cA.Ɓv.rFˀ4y&tOAd*yE+aU/EISmm޶@6.tZqSS+b]-$Gw8)7ʉ/zb`A3ϕ+>]}U"O`X}o*|nS#6?lo1Fzh26dnh' Oc 5D38ȃ4R8/ΐFζmU/Veyd5#Ko((N`q[/j]GxXzO; @tW84HoOxK㧟'hkGXF{yhhacL  9x ~57x^weS-+zGo!X&sdL 1)HBvWhc,TGos180h BoǠgђң>;-G1'"cnfwsQKR8u%F.#8px[cZ ,݋"6#Sc鳗Րxn7CX-!fX(qV,˷3R1\a zx9 bx3[XiJ"=08zLӫ}bח/  y1?;—=4{Faأr^7x62;4K1n^0R^,@'?_Gi#/$ފFr l$9߷OΗHWd&!PD09By$ SplZJ!#fD,LL}ɵ9Rl8Λ?y]Ob6ƯrY̱ⶨo07~Oo˓bm?:YnnȜ KN,,;ܾ)>t'c)$]&xs2Wy?.URb)ڐ,cw]'kCvl0+t`^֭K~D吚xq1Fϒś@hŁ˙#jqZoeɓߐ;s D^AUݕ7[?>ӌzHݬErQˬccFkGVJArXW2?4jRHvipiIHIRPse By^xs[å6@P ztmX;0S)x~nDf\pUvW7΄CLJ-_ۍŒ +VpW*O05!g|eKb`& eN ܗ46>4+_Ʀ€%d&n[̼͍)s')uPf[GgfY q/ ╺|KS `q+yp-Ov[|['-z?K9ڲ@[q g̬m -}3S,%s!z ^;|ⷃ]SQb004ɗ~q(ci! Gn|4BH%̣c Po.Eۀmd=;aZ0I_Ł=F򓁱ANs`Grr~E- A6 7 &u'_oݙP1#dRue?$8lYL [*60_5wzrX:nd)^0l5Hcݴ0Oq6_[3XlS3V|8ey”/ 7' L܇̯a m{HƥԘdȺ Z<$3z ڳ%\cfpvƀ ēe54l"e}i|PS3 {|YL2m*2` `_TKG٬êsTQF;}h;$&Cp40|qUǣõ&뿺]yR2hXr;sGܬk 7qTKS#xD-nFuGk/^0qYj=ǟIՓ7_z}Y -j }HIc s;,n|ۋhnUtRvO }ZL9rüvm2qA9Jmp ˜'eӬk_oW3/qnV_`>au~,h8{U8?6@ a6kP N_ַmClSYh+m?uq/)kfMI. 2128 #4ISW8iAdAi hi*eBɧpvSԃi:In2!N!6Z7]K_MaTm6 q)lrc F͹u SR,eػM1`J%#҃tw&-])u[X_b0VǑZ A+&EH*xXqJd ?N1x0BQjt - 4gD1w%.gN^DAd"-ttqOie]vxr-=pCCQIb2oݬ xdZ9*Gk%SCk:kqvxŭÊZ k"-2 niquOpQq@xvUU)W+^ DyF__E=}_zQ6S!|>o>#`ډѷŪZR3:%~WbM:cK,z]b%TE3"hg;vf:eVCtq^[>[9M$ "A)K ԃEZz2%pC{áuSu^? ; b-vKեt>Q?~^``R=KkH(sShIsWG%m!vP',ҧP{$m㧪p %]}vOgu(%BI[>}T%GR 2MzjkleIRj,@b1Th.3|$Gˎ<X N螦J"H@?ziB3+r.4|qC^q'<'nWz޴/́ Mǟ!i+TF H 9*;h$X?4|B2ёYW(.gI=͈hߜ]T%%CL5|Teuzhvi,Ckn}qSNJ|`vea{G |aF>ErCڟhx (F0A[<6C: \ @V1QnI!.fО푟i1i*L[ V}{:i(K dLʱ> 0ޭ0Qdz˙jSÎUhQcәPE3,+O^]`dڡ3Ϭ%׏PCTS ]A%M[.Sory|y^e[ ~VJϧDyFwY׆>p$?b1C*6l3 U|>;/_2 P2o]='yºju햎N!Y!qڃ[,Ur9g>fT0c)/-N׭Oǖ7X44lwM':e)8a frfcAΥu3}Ot 8'z,L8]mIo繠vWǡ] ǣp`#Qb|;߼qn+]?M3 .fm :/6;ӹ"Y_wQP&mxxO6{X8X\!7}Bes{2x9 "y,3QMx]ឡzG? U0r(ΥX9O w M?s I9Fz g`c ޓ_FzlO Zb6vVsu=\󵊎x^vS.;*./li`>qO2OPVQIݛɨxdy8Ɓ塄)gh@%:GS@"`..ұ>V8fTKmҮv ~_B\e娯.Y?8ǫ>Wu!f}7{w@d=®$ ʌSq4ʤ |72~aD>g;yc1?'GG^:Ս^.#O+ʌ||&>"$ugR.+`\c j T 2O} ;j4.O{;>2CcSuG2}κclعWM9&P֓mYU]NY{^K})ϳX#\V`K߁g**r^.Vt \|k&XQ9e*# (F‡lRNn(=>^x]mYu/qlٺ,Zn=\*oQRc-WttH, $X ,8J՗u&+4ZN?Ns0 6ܷf$"u] bdQPݵLʸLGzАXQy6h<㹂Ҷ/P%$|$Ug[vT]`L"u O߭rMRχ%O8xi}̞ŐKXHܱ"x.UٶD}'jG߸`N8 3 lᾤ҉n  j4r 0K0߻Xhs1"#Xl葖TGOi5`L=VrVw>N[t aCIoCܾE,C~ Fߜ u(RRѣӔ3 ۢ|}p۾.y=3F=8ΥRUiTUa9pPG.:Xy5=GN?'$A aG_ ~EFu|4E0 K0辷 Lr[6}+mΦY5!w`-%Z>jvGNI0m/X12: 9 ?䄰3aq=2ʺnTqЁp*Е\l#/\P_hE*hc`!)-l_n̓8\\?1cy/ DX2ٮΨq}8X||XRhjQے!^7Zendstream endobj 309 0 obj << /Filter /FlateDecode /Length 190 >> stream x]M 651lEB$޾è]t&|0o~({x~Ayaר0:ʊN+ O `7 g\Lz6!*?k7Ofy*%I$!65kšPIB"!8}'`endstream endobj 310 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 618 >> stream xe_HSQs;٬e )`f.+2È1\]5fae\Д DB%(?/[Q|E$! *ι'/ f)+\|zor(NT,HѭSfpjaP_o"ͤ1\8.]ZeέV>c7yj<-pO5XR,:/b6yy%zW+H/JG A8P"4ybԍFNNѴah9[oXޅH&v\"1, J2 ;b;ȌY 㼑.}#z:70W o‘.³ou<(YNh=H7YFf#)kH`у$6݇Ω3 Lp$}ĎyCQD$>eOtW 'YtYf X%UךZk`qur_^񷽫/:trx|hR1q$K63bϽjYTG''ɉO:OTQKIyeߣs<+[l"ܺ3p[LVf(hCیm1'xL';!endstream endobj 311 0 obj << /Type /XRef /Length 250 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 312 /ID [<28f5dc7b036578c34c2d3dd789a8a994>] >> stream xcb&F~0 $8J?: (xH"3(vS> &@^%s@2rD2qH Dr}_e!7?@${'Bq!| OA sAux46aH}DՀIn0D M~&}WHIkfH`FV,Let, Ĥ"$Ss[TdX5 endstream endobj startxref 294930 %%EOF Rcpp/vignettes/pdf/Rcpp-jss-2011.pdf0000644000176200001440000046162215030755514016534 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 4618 /Filter /FlateDecode /N 91 /First 772 >> stream x\[s8~?oS&q5'UN8؉x+LۚȒG'k)"vfl M(8SL4s3-E1!d K03'ޣR2ɥaB1)L*K ŒtGǤ8zd)K8ӊ \̴$ӉQ1#IL8cKZf#s"A sPt^cp<ѡ b(o S sA DqcSxbA 5Ӝf`Ba4Bģ aqȒcXtfq4adŝ# q/,4k*THPZل=` hFBAaz Q qxm13(L- :bdkFa1M0p,t$0S8@\GNcFvSPH<x/1^0o#{K>H"I&f@JHȉy#'$ D3祖#'=x`$A}B /(z\pvh?GЊP?hz t y?nңUtЫӟh-ev"צ6R{rz7w\N-n/>`vnIzմx>*efWMqnUIN{'bNX6ViFGhyUq2zxx:'FM?c/P4 $yQa9q z} GBQL:_ĂዓhF69>c·I d9'TޖevAd Eu^dTh4JvǣY:BRWX&1(ZD4yN>A7xcvp2#1uL#s蟤32 /_V-vN}:mr;:F{@a؛j0a`=ʊd:۽E/U4CV"']/Cp,B ƟG>aq +;#lp5 rQc~\q9@ LQ.xe bpUWFYYcEqP8Rʩ}K|<:UE݅a/DUi 0py( ܡ;/ ]V9Y[>J3tͮ{iZ\RMj|5ɲ[ķ+a w]=Mۄ :$A͂mloӄE 0tJkbL粹A(Z䯃I`h@-L_WDt}~vGmeN4֕+?zXsi^칬Y*TM ^{]`=[ܛA.'~VB)C+T(g %,v5>ސ0X%epC;I~ `K8c% qFatǓ h*2uJ7#_4V^tf:~=;~0X'h9j0 m,D7jnR/U@-gZ}WG,Xܽ-(W[bT Tf(#sԒt,#k2HXm2m m`ճ#Z&?ſo>~S\C U/ngx~2}FxrCֻIJ3+ǯ $ا%>dD{:C`pD2oshna..NOh>\gk/͉4J:BF]~!N _[Q~m\D-nݏNΏߕ1fnXogUwCs^ui)ĭdxL;6Nwl$(oC9a^NYɢi'vVp5/QD\Ͽ\}ZDV*Ga e"O{<*MHd=;fNo߾j~StԸS:S @v˟-t ?;+CO.:uaKe Ee]Ӄ)>&lD9fF4YfIǺ­L*Mf(ڮhx^#IvDD{4̠WF SA *1FS]qadi9>Iך{ڌ)yϣ=hVIB6Yݴ-ja!P YN]݈F%x?lZL#f>6ŮiJ\>W]vQW F OC/Y -A @{? H14MEO32t= :酯F!r7鎢3-Ev.oO@] 4uR* 5yVendstream endobj 93 0 obj << /Subtype /XML /Type /Metadata /Length 1770 >> stream GPL Ghostscript 10.05.0 R, C++, foreign function interface, .Call 2025-07-01T07:57:48-05:00 2025-07-01T07:57:48-05:00 2025-07-01T07:57:48-05:00 LaTeX with hyperref Rcpp: Seamless R and C++ IntegrationDirk Eddelbuettel, Romain François endstream endobj 94 0 obj << /Type /ObjStm /Length 3968 /Filter /FlateDecode /N 90 /First 831 >> stream x\ksƹ~~>/N&S_$4=@$(!lӔ3v ,gJ,8 >Bde;Τ t'hLZ%U'tD#ϔL)RdKJ)THi!a2Ѱ&PWϴ%!3£g 026Rh+tD3"C5ZTEG#b'X'$f<1ʒHӹ7D=IeN E>'HU^' Q@cDbh- S|EƟԷ\jӴdM";'2߶jU6ٗ_=Zlw~74#32MV].~4BH|WFsg/MCU.EXa|ڸmqukBv:cz0€AP(qЄ-n&.u-j>t.r]DrSXժnHCz4ݐX4$](Yđm@B30Jny垪S5 <i;&#aJoNua{`ٗ-ŧ1 vuO&vjzү[ǔ1с@rSd ; w0}dIJ7ɰa 6wVS|5#Wk(S$Bxlf9@hDwWzBd,}d0%9 rvOUPF*}h~wB)) p$܊U#?MrSO̻C[tf26,]l`q F3A4wţ}Xc=KRjBswLIc֗Ew |, ._MΨ=dN] T`#@|YЩ;IFC3ȐwX"s偞JsVoMwKZck]+|Oڍ{>,Qv,d#GU6QmɟZP۠2NW7GR2HDJ$fM}![E[e,7 j25{fֳd_>}v_`_?,=_F+H-j}g/NvKʓ1S򐕌%,Q)Đ vݢNzᜬ(!0)??ǯXIqM[,Ϝ5oo:wͿyGx>Qg0>KGi#̱  Ka@?};ҕ#M\Yc=RZǩx9#>C#_@ȊeuuFsG c?Wk ?/w{ ?yyUnʦj%YW)<ռh/¿7%uʗZ5|M6,-_[\7M4K,y +7+<8SĄg⪁w0δ~4cMzZV"]) #qFA_͏ k%1z9[쥿Bӻ#DxyֻsPtVYJжҷt[6C&er02u2E1˒ `a> G.ۍg?%^bՂuݜf|ͼ$dQP(O2iV[ã5PQz:GրPAr8R zzW_{1aChR gş"}WM8׷5jj#[3ƸMS$;,Xhr0PKӰ7VSA>e!/)7A(E=TׅS'o:؃=v'5E/4q.jfTx, `W9؝C$嗀,f$"yNS09SOMH/?mEU0'X u@j3 x&)dŌ8Z 0cfhowq>^1Ash2@` 钔6?YH>Zk͌ L@HlFg>767żZ.' tIZHIJe(C&?oU<ƽ+i.gz֖4wK/|V2"#&%`!UNW|nY__bQ,kVoeU7mMٔfvrv޴ wWM[͚:^ \!hW0vjWGdA- :+,}{y~ Z < iTun~Z͏PK8$m77qO)#4N4`%ry ; -ds...>>>iU%Vz;9DoNUc>?Xi꼞bu[,hsnokGT^%t,өa,'RJ SGR-'wXR03&@bw5 *ۣT!*pj2ZʇAt^ _~ފZћgVX^x4)4|&eELaF;ZsE{?h]Sw XIB$")7oP5M'8 a@tf_u`d07El뿖eUcBW@Eo+fr)!WzfN6ͯlr 5y<( 7f{UV=j"דfI65my$x|}!>rZ54Y]5rY_Ŧ,u9 ]ikhc(SK#n60sVVMZd6]QXSeݣC7״?endstream endobj 185 0 obj << /Filter /FlateDecode /Length 5415 >> stream x\[ܸ~0 ۨF,^OdMvqU#n/sIII=v?XUEMڟ5g?cyjg߽򜙚3%/ޞ) Y;- ojիͶeguYƸ#R)Uj,@V5Mn*a-%9):T6VbVJ02:bst,Ux5l( "}ynxs۷cw)qޖ'[kotfwfov]ܝot<и\MuIW! k\յw@\ [ߑVandBdն gb1~^<M'+7N.xX6Mkݘ 4"9݆[䎪w84\>&v:ߋ!my~; =(,(>ߟ)n)u@`TZܸAgZطWt-SZl-- LxȄ9^OdBI91' 2py#tb{u}{ ۑ 24ttܮ&nt+,R{Gפ`xÝ`.~D&aᬠڿ_`)W`dmbXPV][Gb}7)݂4xJeZ q?u rΪ_T~j#MS/e cF dgjE4Ҝ1]pF)fV]\Iޜ4J/jGY۔sCF)`}wX IXzRQ09]ޞ֥Lɓ.I&y~G 'N%daJRT$ˑ2ai aߧK):B RBT)/nzI&5[~DAtQƦ߾q<ߪN?t3۠;lI%تwS9LU$].9`H5#;2e;z|,yu>^&%ܞK+@obm_O"]UfsPœE7tJa OS f㩬e-f45o iVS*C?bu&eaǫ$)+Htש#:Daʤ;? YB-.xF>%00yDj^z"fSA4 cf l|raY0!8ey~'@ѨE2֊SJ3O~7x4t߆=6>Yn1o-66 įɨC}+J1.ITh®nwޞwV}Ep0Ȣr3 :X}!\Y^0e iML\8cu$OJXab9D<3aU:'rH>[ p.],3" /f!nh-2i257̌@xv7a¾PDw? lXY{ҏb~d^]cm#g&@3 BWS- p'mGoc9X`p=Hcϻ.6cC.EKNG}SV_V:/_9Da ': `6h+x *C^NC**fxmHDRk5dwaՆS>rCކgͿ4&{=&/;P}!p1au~I. _WKS0]Cn뢉MMLiA-p./xI_X4ǾH׸̠LA&] /`#ʤ_lT59sz< 6J@tK6bu6̛@Z<}- v2.CtirE UPGUKPк b CQ 8 43I;UX L8p mKc,76qR& X $KU uQڻ.ڕ*d]7seԁG~//RYn>bWܡ;daF#|Q)bi3>w7NP/ԥ,&j nqВfXL03_p-hW+`r4d|M&;nIf2~x!gl:bF`lj)/0)>ǟ~Uw!o$$i~́q忪v8ʾ.g!yef(~ՎYE:JԄ !#oHRNZ&Ⱦ3JB'm1$4Y`Vۇ+޺ =ΪԪ.1 קpiНΪQX71dH]m1 /llZԦ>fv.l1):?͖_e̽yNB7`>Y}Ӿ_W3GP+X6 vV!S9/ 7$ݍ9, !cY-:IVqQDdK|h S񵍘}g]vTl%~9 `NyR[جdB?k2zk'Xbh<ъeɡbeOr*B(O- _{{4X}D=''mf$ϭ=)}53tV^/SDk_VXn!Wc};[Z ο#K_vt+"SJ؆-Z_ST,9 ɫӖd|A"h b_S5mXL˃IT-( 3'cac e݇le͊vjb,nu=]5O=̻7S;BxBX^ #`  |#3o&D %ߝ@EO6N]F㕝SZX 7E!uZUua!?`cE`u}75,G_Ra6c"L`2oe_z`7͎$|h[ޡGc |!Klj!}Üec.!MNރÎ>ɏ$;8 %ar(h ԔE"B=R8;H߉*%!w_4mſl66Jpu403qŔ;g0`'9aUί?4|wZ,:& C>ߧaa;y0kHbyںұ&O2pg=(9endstream endobj 186 0 obj << /Filter /FlateDecode /Length 5711 >> stream x\_q;/74?~ʼn%|^ rBݭhܬȹ=]pF9]lp3dWW]+:=^BзWտܼ+ߴ݋pŕ3\^4pٵkuo7/yu{}s}_7_8"GVNkvjz+l^))]3o'uձjͫ`h{ғٜߜ?FB8Mm|ZL ל 4Ӆv2>kf'mZkvʴ=OcΧqI[Es8Χw1[F< s146aTw99}OCơ{m?d;+ُ뉄ſ5 5`F˧-X>|qɟ0Q@VF|/}fONE(|AROu[itAZ*VNʌ hH55 Ca+'vBF{7 ow/3+'"قd|U,(n|A=^͇[ҐV6y"L ⌏z8h1Zh2OtM'fpMfHntiq|L fٳKřfL$lkf:/wbTѺۿijaA.a&4-S1:3f0D18,aO͠alyםBUØ܀m>Y?`Og'^G7ߠXs ׊aa>R a\9/{2~`XqL {x@}E :'py[ex<7{ZFJq?G@n1m>?:IDD0^ $<ބ!?5Xz\+yپK}zSܟI״8XuuՋʴUQ3ACѫEۿ̷ BD#b3pٙZSXצaFw| %H5ߑQa pͿ iˬn~8_ K1$@SZGey ..+OcmxJh  Z\lUnY(Fkh{7ׇRd;g1G>(aKXϞV|cCPifdki2%$h!KXݪ*VL/|߁.x ,J;`-1Ia^@Ns1 `0_y7>8,LR iO~#Aj8:^Y}s˚7ɽ}v+kx tC&if3[H3\C>iELMt=s`K w8W/Qd\nPa0&Tfj+7q5V>6):aѸ_SpO)t^FU|f`d넜djEI z.B{-1.mtJ0UܳH|#M>aJKhH$uT"p]Fh;B@!&ZxZ?|imowN<" LaBNt gSs,޴}Uz˯Ȩ]mʒU0e1i;#B.?ֲgXxD=z:l7VD՘M2= nYGȗ H>6\j f5~E'_u9b,Rg>ѵIb n:!`Ó4Xy,U"żN.ȣg{L:3cE,Zϛ.۝tU9HôYj\I+ jې[z?xVlԄW,+c<Ԧ %fKXm^ãUA97)X,P$׺?tJzpkUcWV#V0o{ S*bAQoܠ&08PrxW*G˭դLΪ9+ΐs7ҳBD 5_q-Ŕ&AŠI:s DMI'xu*UĜVȭ"E%!W>z'q%rk '\0@H&u7ێ{0Ӆbô`y=vݞg=ug.@Ux\2nUdʽnJ sΙؕ "OdgΟ "։`FRޟf?KJ1V`]q@vzSjœ[0WSќ%ަl6v  8'C3:f֋8Ā K.ijeZn7CLuNV0S̴ ܰ32~Ѭ!l4Ҝ wvp6*\Y$2Pss+F<Y;fݠz Iвj?L=MhNT[:l$0>t >[=v7eQECγ)`BU">\צ%}>rA`]B2Mz7[L^@NV݆mvyy?iMFe"Y: yo4}nk DY Pz!}'e@haBUi|R^hdu8M.0Csn­6~ŷvկOij])IM䜢nԥWĪ b@)spx' )2ν.L靗 隠-zT+$d4 ԊRrMg>G>PtX%'@?fz3 ٝ[ӗCau/OtR|>86cG/vp. 286ά .v U_:ŵ)cwR޶Δ)_'*CoUNFm} x6`̺!$Z':0EX `uUk:XaZQibI П+e (JhicxdG35<9lϙX{j3 *%s Wgdzljs gr|<%^y'xV-MEt}x«'N~E>VTEy9uyl||sƀE p:*֜ ѽޮO63$cQ#oPFZ]m,6^F ֨Vp;J̠jVU+-j^L\<go>!10/{2S3fYow&t_UךߪD;^)|!,bxUxs˲""4EZ 2A?N`/6}3nNʄ,N鱂*iaYW[YhS/Uh{av{z9Ѫ/{~eM= e( +zeL| ر&x;T_h<'KR[{.sSJϕz:w+j)fc#rA ҧ!'Py3]onc˴'(켹á 4w3>HLٺ4=ᮭz2#XkK/͋?Iendstream endobj 187 0 obj << /Filter /FlateDecode /Length 4075 >> stream x[[sݶ~K>'a;`8;u':z25%2#吾ۿ@ )ٙtCoM͎_5G?1z{_}r'5<]1gn>6Nˣn[=4uV0q->Xfvgɗ7k!t/ y~ù^%7'EU**];.AٓG؜>JɎBVk|Karh ^LZj]a{Y{hnCJz-{*z5 4C :dO`y0]p BJM&C?ճ+JV<[(* /y5ʗ![-sIW]i57U ;[ _'ٿ =6.UoT.邜ZIǏO=:^MS*\QSVp(;X]]toQ0`lNs7Oz7xuf2+eL**ª!e hf뙟N7OU'wl":5>ymݮ\Qw;/Xߎ2g=|$vVs= ؋JgK1"Bϰ K͝;Z% `v޵0)6z{\׳/.`@|>7~\f\N:8ʢ m,~Zl4 f(KzS|,DFK]Wq@g(uo.A`ڎ` `nQC:2ff'f|> Q >qj{0n:63Չ`p벀*h*Kp)"yPOCV.ot68q@7-Cu I h(("umk#,`_(\߃ɇGVZp(c QIa:$!MΞl "Co0__jbEnC:nz0&x^ RRH{o%` X<qBךU塵 4*l3J8i'cT'kY1?7hAHD.hdėE#B̸ 0†~`C;QHk7a59VA}Jס]\b 6_.C-͢MufF5m[wMF5r lzΐn6q,"kr +4i)@,5MEn!HS@i+%p4Kv6tbRB] <׬+/u*K rXZRRݯ\YHYC)ٖ Һ^;.ʼnE,O* {ð~7Ǣi=5 , +Ҳ[74A͒,a8Ѣ͘(u.^AߦL pև\OWZ`Y}h,,nXsA)!](e,l *eQE!8gggE駘$^?V;͹DDyH,Uܡ܍gy61Paeq"1.@i9(pxe1d˧(e&/& ͋UxƁ,qY,[X75+ cEHz_ւyr7 ) Jh`'"$sRi!8)?o12`3bꛄ]͹j^`%XƩ*5Rݚ7$&/o y,ր FKHQvi'ʝW: Js/獵vD݊y^Iu)wT7C34DSo)6טּZ8sӅ03JHMwX6[ v^ΤHKj;6=1XnF?PӐ)"2L5Mk8p1 C>RActi$d26+Km!!.jc(/iRן# gH,= 0!DK4/T_$QK˂I6C-/x`2buLT1Vz=+"{9::)W# eJg4⸺)nPn4Ϯ"kyel'xthipWy3Z>&oU:Qp5jx[k׏aIиH.H@ݞݿGPv4nG}e^n8ހܜ/jUrQyz+g gٚ/0. :+hq!Gb[yr;_D#(|zjDVh8a/a Hkfyw%m>Grs"\WA"<#.XQY' tC#J3IN_*kSs ㄿ)4‹ S)x^#iq~!Z8Y Yǫ`Z}ye"PQ׮`"kq˶xqarT1P%|'xXt3LJ:ۗ3xr/EI/?BmK3 N.ygc,S m{EҚaE nx${Va=.Tn%@ i}%O}D_Vy%p3$k4+x/z@R^os0'1 &>~(3$~1A6SʛP`]I!Cɇ'G~`,]Rbl0a?y< =p_QFu iduvǨ`h"qĩ5+Xc$n[J j?<!)j &D@\EA^=VR5s8+D]NX"K/{1z̭yS]:5-/*Wcyp J^ Yxqፐ8̃= +n~-6@2`h4b ,D UIv3iz&tǀv|#7>_R(_`eGڥ%c<"3sk=<-[c%^cXΐ/6bFJiX('/Bendstream endobj 188 0 obj << /Filter /FlateDecode /Length 5010 >> stream x\K9r؋}^\xcfB1ԻFM%zԣ띙T֌CUW" jjj_vլ~b*w_}wso~RƱͻ+߄,[ej'fUٻUߪWneVa Ik~Kn^K)ki.x.6Hõd+QJnWa-q!<;g5g޿VF֍f:f+3ix1ߙ5WBBVk~\Y9~cûY5Q7VtTagW_R'zhb.~i& \oo}`z4ݥڶMG֜y{|,AϷ|sEj~q<3\krR?[B(윴OWd>+iZ8SsVk=',j8΁x-4'dWld gRW~cŇ!6{naRN&6?"?լyVX7Ҋ“ T7|WN831FO=;oNutN|בFV2Vd4z{ di:v)]+^S[,iN4!XTw~/Sd+e^0Kq_ i97%R݊Ag̫Fd`+lx.K \RECUr}P̥/ WCS8l7&{w'hP067wi.4b|Q #Z}&ҽ7(\-/Z ˡ}6o>Fwݢ!ʑ8h.݇5dgm%0ve8@.&.1l뀏 7EH:!f̖}L6=f7Eo-!O:((clqbX ~AjoǠ1l4[M"zA~c6Eh"AMgCxV pLrrqkЊ0X Ctp9ʣbkB)kFw!q+&#Gyn'#r "ͼ2'ܦPy8![=x.;}4Ucnv T3]`8b)Q =5fÈ9Ly+CFkX`a ʇD=u9E6cxF):Np^oX׉Xfzƫ 'ۧ\-ӡt _-t=B $p^&[%[9K<}"#:7U*}5\FS,k%#bRZiϖ]SNk:>n炿x=oG-m Ns ra?}o_6챁ܜ YBYL;x9Y)ЍGYn,.1gǂvWIFF&dg=/ =ƭ$V xc6n)r('ˠn{d`ΡzT^ dыG08ͥ!Aij#vLF9oyǷt0} FL1E(F^2;bpoC /#X̉p/*>nj_. (ۂ3Ca v1l"YWٚ܁30B^l|>5h2GLETy'Kf-H#jMC't%Lo"y.lPJDN(:a4 <*}Yʉ(t/k97/z >K_a L !ÌAj(u𲌧?A ")%pE r2q}R}!US$(!.όSж_S~1}zVj{EAv̊B @nuqa}G:ikKm{oy%oVQĝ7̠kN](- dZ?GM4hc?b14t(m %^l ]a0եTZ|KOI捭eGTТC* 88,F\+Ax| :cKJ'rbP>*?]}m Cg1 sX<1uא+&i}Wm12bIrF IĻ~;*pp[$L(]6ZN4>EąiK =R%">BDiUe݇DA$*UcT8l͹3jS=[tqȸ(ܯ[$ qd>#L#el|/yB8;9'+gNX=1!{$ k{2bL|kV RL'unґ9(().5YZ ϊ75f5\鄾m? BTo^AЙʡ3\dR |1*t87fD_^ @܈UowӒ k=yñ8qy$PsI\5Z]Se;E8)bp, SBT..I\3e4m$T$㑱L `G_K~xjmY:iLv6%G,?\WHE@q]%a]Ȇ:J5_@KBQKWm*n{#2sfTBc6ipL H| K&x6} Z"szi;D|ױxv;Trv/{n) *(N'6(0 +Mn&)6^Ȓ9nF7?y 8 7,oИ'|> stream x[r}| 7;YR)VRN)"1DWyIBdKݝH0;ӧ/iWNߞ6;? ᛪ~zĿOUmͩնj>=ߜb߭-ΤU];tQW֍r]ӳn ?8cwsG~ŦEiWYT Möm4n?ᠺ*kS5BaϯO^!ʜr^5Z r?=rWLTZn]_HS:ɖװ1պfZ Y55-= 2N} lUFm|vpp%\;j`p%A$ʉ x1*xd!TmW\ T8q cW=l)YC_nٛL XcI5t aXw4{>]豁7WV4Ư ڛTi:e.Kn{%^&#?a9+ OS S;~Jӟۯpf9Nϸj [yzhW;|}HVo {m!JL;;J5; guQsnLejwD-O%M{o׻pmG:iKڦޮaߠWod%+-W"u "4VołB v^0K66Ł21jn0Rm k.10wB;GV*>2nWV*Ȼ",>5.5)v(JQ,8Vd^O/:-kd9pGu`AINUo(UiY⚯zj`2lR+[8Mw1`v {,ɀyT]WeW]W{ﻤfSñSO N>)V,lX?'|$a/Y?ue\L 9+3V[RPG1I/`Pov]Bܔp@5JiV!Ov.ȵIhͺ{ն,oeA Ȭ nlo\8Z E fecc VևM´@|7 75'.-BR …0qk2SO8}$b MA=#`{0pC2f&Wpm`&ؘ@zh I͏տi(!~i꣛= F| b-<f|!q֊*b-)t/ծ{_+g"'LUsUi؆=x]vVo@6E#!Aa,҄ދكRaiHLhwu D-a&l t Kv Hy̘pIuubxo`4 "Tdۅ8r4J0$y6XKc)A\`ItFanb*!qERkMW8qC@pmBav2NŻsiP\g n|~Jijc_6UI74"N%!EHMaSߤwV_@pIB4*0Zc<ҫSV5ZIbuRWa)x؊# E`=0_*Fx!EJeO)}1QK ٯA j_NE]cXSƟv~՟Υ0@V< %G? 7K-)t8~OiZ|ޢ{9#“#!^)3 innAʊ?RA A G^M=-oL#~@Lkuz&x%]H|6-|x/ =oρ_c%_O<{Ga$Dbql8X FqJ7 5a7Քs$dS+ tA]l0<s$ [H6D~; `r6QJ=T529"b~?O܊ XQ(G%MC4m>BPoFE2pO94,恼&P\C>I cf O4sĉ {]4Ӭda"ڝJˢ)'ىGSAm?W2H/}‹|*xuWoiUЏXNލ/5)3-6:8tLlHP>Y<%Xa #UEĺؚj 1qV{vS[J]'jцI *Mk5 G"i\ -_өjHkT!լT3FAc&ybAXkMg-sC!eV=SCe>(~XSvKhLv]Mﺠ*'i,GIʣK=Dʦq}:L+m!H/oec|)Sy`>nP"yA9FR14ґ9&NVNnRB(4g'0ADZ,`*~3^(Yr%mfy'2 h$-pWozmIwO QD?[X7BL$9;% C`vp3t?Mpe8zV.1F8Io{zG~TUv&oQNhmZː"H1 ՗s0$ƌ'-PjGX l\BdFn]{ه~>ŧP QDDC7vOmљkkЮri5q|MmX(*62kTmG` 'ob;PBוmzw J:׀lc\$c-lη,4Iq@gC$܄`{8^ 7m4SXW|1S_ic kܸ}ڷ oNvȓoKI{o>e5U`n dRMMR%Ab$R [=C=,Agbc<mW7 $Jա9TvPy|_R_ PF׳1Kt*xg1x!x.kS`j9 kJ0P }$#!QY2=aIf߯- ;򮾒9P[7JGI3|&wQ DU%ƞ?^#q' Gr^۴ "kF{DO&qy2Ik$j*>i]ag4b,کߡN q{Pmp'$NnM%t]{"RT}KUV}X> G }-y!60;ͤ k,M*\)\j+T2=|osEYᆲ{JiH,{1_v)NZmWP eN2#^k! xh HY}#KH/D}1,ɋf>Qi8JS >\T:j:&e;F4['}:ǾGXR@b=4HQI%yJڼ3p %ɏ!Åw[ä.AJ3II!w^TG[$bH endstream endobj 190 0 obj << /Filter /FlateDecode /Length 3353 >> stream xZݒ۶3B-i3ǓqǓ:^o&JZ\t}>v@ v;{ ;9iYir7)7Nÿnbחtx=SЩ\N Q[L20/VWr6/Rj!w3暖6\K+mCc9LLNl.(ʒKh㌬A1Mv43/U'o"y!bp mph(As.vLQ*I;j7_ ŠVLB)5sY\2QXJlɓM *|>Ҁǫ9^!G̡~U3 tA43q؝PSHP\ 'A`=\`;0P[hXJ)FdWTN *uמP6M4Ba4̀e:OE>(+#BqJ1(9햺Co$C5:㾺˺YYhC{հW ͇2{Q(1.Y>;f}t1[B AFk;.ٜn1AǛE7+4XeKTХcSPBK]y2DR(dB2@"8&Y7n X!NmLu_-cB%^2 =W]`]"2՘!a(37cb7tqPD85 S׻c/A藶KX@ ;t:(ؘ`ח@ü̾ T UxQ{&n)Sηf/m ΙN p匌/yB q:mdP&4muaH]Chno|Pjȕt B] /e>Xymn09.13 lndG޾{am$ ɳ-bsTPz)j Mɗ{䘊mKϨ)jI͉ohݝ_߭o]5Q9m^e}\yholLgepdqVf>qdmαm#GUTSi &)%fSֲp۩Ex޿+c7!Tb{UzEc>=ڃ߷M4vkg@lv`HP*Z#a9!EA{|L6s>r~>fKjU*I%ҐOz4E8]IcuU@p{;mҹd9Tga^ñdY@6M 6b WnH54O|V(\ܶM邚sf%z5hXVi2u]o?˹%uD`TYpm0`XIqpyKӮ..vɖP\_2uHZ{89Fl=X? M8I=d?p享V[:ܜޯe67h_6@fsf3)W{%E"plab31+4{Z\vjpewbw&-0!8YvTH H䮺;"/=I?:J#Ar`\4As_um@ǧ {d*xʞZ<4= tKM!" 3H8nTxxZdW_'鰝m Dgc}9ɤa}KA޽umQqS<K[hѧ8’r~uBCNqQR㛑 ?NP*vr=8B3C ɖ_F~'WRuj;NPP+wD 2 vۮ1G)hmBv-D?58Ea rOϕ QJ39/LilAYHզYf&#`:jJMB Gܐu[t3"R0kj]:̋JjY1/6fE\)!w4K).}W о,b8y_=endstream endobj 191 0 obj << /Filter /FlateDecode /Length 3501 >> stream xZ[oܸ~_X0nF+tw^EhMrSM d|s@aٖ(QonT%q;BvzfvaڳexQko)0 2iNs#L_f Mͭr^S%oZ=;Os|h$bCפ{U ht~7\KSB'k9w_F?ZU›-gً߼"YF̊ovR&~&!Xy[r5laOpiǡZ1^j[ ׿]o>z߷7Gۘ$.EY_"]Oy R&1Nt2č"o뒡y% -`0d\%!pTH!D Z?eP3\>1߇Dg yNuw'<=(U\=4fSz†3}ug M@W s9Q0^^[EP22~\ep- B 9'An2#*&Ց9ظ\(I+6ʊ4G5oWG@mޅC?$//-JmS/ɝTҌi" {vtlqr4&'9cEX_eC[sRL&~ze7CD&@\螅*w;Lpx ֟%}Jc!{MU]i7:ěD>|!A(4QJ @ AU;cۥ|ZLZԏiه"Z' @g6tw7Hܛ.~/G,<81}6F7NS)la o0;C s߻"<1C+ˤfEf3^t? I. 2$$(mv `2i>NC93Y^4)بѤ&/^R(,Zd^~OYvfCj0 A{CZ%!S+5gpW>xcYMbӻ6I1SgfzdMo ȴb+]l; a 9Cb!I5b0gQÐ:ex aE 9<'Dm 1ʁ9|;|d> )̺HꚀzBN] Rƈ.+]aF stf ȩ@k%<jhe[i:% K@u4 <+,YDrC0\61l@yf pw@YB]x{ DW:~:f|x b"ޱl%~ L*kJGՊAj`=,-!AcPE]J mS&(f]tMݵ"@A'.۵S}d9a}͖I(HÁ`yk[Cߌo77~7>U3OC VŮ6(\?}akf)Yhq1ZC"n/RIB}p QSw4:HYhQ Ic T}F4_{vyW!!v퉣iYa&K6O(rd@?v׎7JB)H*̓Iu]=Yvf ܓ(vl,P=Sq=ܰ_^ { 7JzK伥LMA|;Lѝbf6&GrR(}Wa7+* P)vrje!2BWUݢ+i 9幭įf<ĤTIO1_] :@¥?k:@;M'R8}84o"-[ TEV+vк\Y3!}Vyd~3tWRC^L ܷN,*1 :Vvm"}^iqW {*Ù~CݔHI->aWN.=y%S=4w;rZu t Ef#8+2`uxK( 5쨧P8v `̆[Rbqu[rS@{K6\נvڿTɓ\_2%R"0. ٣eAkc$Ul/K1cཽ\tx fCrLI"CQW8ܲ+0CLb(pLoa$7+XQ=3,e%V-In9cfVcy{7b:VpDnendstream endobj 192 0 obj << /Filter /FlateDecode /Length 4773 >> stream x\sq'?b0a78NRJ1WIW1$R:`%J}{f`)|Zzz{~ z¿ogٯg=9/ ~SwM'ίޞGy+Νquj/~ekUS볗Ջ7MݘV_gDӅϦm"ґE2O..uӨG$Ydu$:tUߤ;MӅIсl"m m+TܹKx^>KQK!EP/]mi#.d[7VNp;wɰ#̥mm=TnH~@tUy֭n~ 8[7Tw37HK Uej#}jn9:PjYi ?u=3]n]aֆ=೑QnyJTץSnRo޿ nl,5za{iwb$p>ҵTNٴBFwғj?]6z Uߥ',Da*K56`ǰs#OĄ4Y.Rܟh@L6ߐ k8(}D=xa kuս&30ьdGJ爖pPmpj隨woiԭre Rs#~@&Ut/ @ -xQ2 cO~mq8#~xZ~9vp/VVd#: 68K؄Ipd Yc󢨤PC_A*? [O1G!/B}~_,B 3 HvtK|hDuՔ'30z|n6",JEU  t)Qaic%OK!Zjb䥑߶lvԓ'~}|U:,gW4yǛ7pt=|xs$3BHwd_>'O1kI?2ǁPW%_y9,OkgZGoOY8գaxhyа^ccQxA/]!E2 * $۵xU{&tUN-]@j&Uv> Z1 |kݾ 0 ķ"2J1&Y{ ilBzVRy@(ξr Ҋ5Kb1"~JV#6Dv.1i;i*9t̲CtS'O`48P|Uj ?%O||ޫɦmCEA st t#M%ǽi$3KZOEtXV)hy_9>$7ߝr[w|ed-oRKV .,:cXJ0е' hAK:&bѨãEWyb7ktn?1iB?Nᣄ*ͪK#&?Ha 2bGIE_ynxFtg40OTD/PiwY JOBO!~vVfȸ,ߏ2d$R[M~Qu֭9Nc6e**.ӿXb"UgXh=|~]i7x8EqY![nkyY/$o`%q\> I.JaF> %`x}r=`n ppNu_9<R$?_Heޗ3A%#CxZȈFO;@(V_@Lmy#~1iI/5M|7rԬYqsk#ڈ,ȄK4_*ժ9Gl?7_Mx!P?]j,;Y Fqx@K}R`ȑiKo3 |EDҺ*֟?ܽ Wi:b @g6fqU BMt kC(;Sٝla> R@AD-D T *,5Vp9v(M{+2 i~==Sƥ^pT+M2Ց^.1x cmXCcvah TaZZE[l"QX%pF2ʌn~UqhCԦ^z&ADڧ!Btva &2lq5ǁ:wwx!D-^!KEU8+iGbesHΜ~ w<S*)F[XF:Dw)j)Hf)}! Y؊{9e6Yt"\Ys,}c|ssMS;յntlSUPz|)/ G0 H0Q68(22%:cQ w0,5mS3{֧Q$3ve,}`밁{:=tEHѥi9g(Zk],wӐ&x_ǤXys}MFйʍZz2iT'CSf Cld5|uKQM[P:N?Y2t %1A!L#0llK\1(gb2ִŨ޷I}șd9| Lc8׃֬ndĚYw摇_--ʖA/x` 43{wAe;yR#=e_@J vUnKbCbmXwPɗ8l,o Rn~Mf,с_PJ9!YeQҜbz>鹇b1ssM|۵tdxW#cN?P 3>y4n9ٮ547+endstream endobj 193 0 obj << /Filter /FlateDecode /Length 4509 >> stream x[s8rԾ,߀.]jS^R%m(HK{>$eYӍ9#KSC4u7ˢ*ɢY=_N/ Yߜ.dB U&绳TX1|}vQ^h%>3E*㟅Zt(b(PA̛s^V+G26zMVr\KHƆGiG#9ᔔ?WSU %T$ܶu+GLfE/ %]Kd:rM)%h8c} #J,uu>r[ɲ"~?{`zmVXEk3>YJ컾n˻]KZa yDޏ6WĻ |da;;:ե%oM`w(mֻLXV nUw OKu(FTYfsJan<1;ap& /`RТ^G/6;c?krRUpfNTڭHìejLx?TԲ9T3`7oH$= naeuP RR)A9ݎ-'YvĊאM`Udxc͹M&}d# cuEjc$H~M Ap7@ @n9OV(@Sԅmm>Z MXH2/jkZ"<=؍/>55xócٹ p'$;9t ͶEͨ˚P:ŵtĞHP@jbqw[S Nv.YoetCKnW%gSE{K)JURiKf&%/uQ Tֱ_{#E֩%T{E ةU'ʁ),H@ފdz= `m)3s;9`z=)*Cq3Wtg2ggD1=7 :<%\"}$8PR ~moj 뻻L <ґ'i3J'w*FO-A[Y翼u~c/4v&݇+Kjt8c`"s wWsȳ3%Ş6yus.f1 Ns4 @Zr<(T }H~ B/:`NI9M 3\}п-&Ӈv/;Єm7mд,Z`ޫ,#Ӡ[F$6MXQtmSS{z.E9*$ }_\}8-چwIPr8c $ S~Li(@4HEb3w\=y#Mp\\sl$hz83kן9` =q '04#u)s2xL'>8N,KL'! AGL'b%!mZxEH_*%u(?V Da:_ώ䛤9WAp۴o{$*h|/r;N2. #q\LJaech~58m/uDSj|Nf5 GV~d_F͸H 7qD-L&@-W.TRqrOa-*C>0'bM}4iO@QS~ 8aȊar),ȡ mR_/?w׈,qo;k*2\K<$W I$;F- o'Ɠ~s.l& ФYEtS۱Ր|  S O娊4rD!YX7\;@^S7e4Q[]x*U2%iy,8M9 ֙ jL.Ƅ.Ęiv&Lb=1 /IPFTѮ³a fflZM>]L^?} 'OF_yaebX4ɝukiNY. Ad1(K]-䥇+]p9^uSӮ5)XIHC0f4'/&4p2X 録a ;ȮhHZ2`K,`x+ uǭ*Г'Ռ6\2WBᮞ(]f=O cYVJKıFHJ*̒Ѯogb&wh\:촱*sWWx,JbŀcOTr~2#z6IԯaT gTmcFy *mgs;rSTe媙x'TjbmdP5gyy: ~7MGw?&,|p#)Sf+9صr}}2ɠobCR"+e [%1ɇP =gQF*dr[(mfWCݡ KXu쮫>V& ^D)@m rO[?Ms4kr6p@X^C >'~B;+,!XIzF~9_rLvwp2_Zs L~#" e%/qRU%[;8smʥ(jhzkC]@*;;}0c)]\]63#[bNVAQ]_W'2!k?!k3VIs'uˢM侬SybT^7Mz쒿n= ¦CKX}P 5:0%XV^WL wG.] zuu.A)Wql; u|J٬Ƹ$bX5$ .|p;^0j1AbH 4*pdv㗩mN1^Du2?02';?PYlokKn VfZ./8:Cٴ`x۴ 꺸 w~ЋvL%WuXęr,n6Ja K8 .gfK1vpjܚY)ڭD'6ץ=lXءyӎҺǮ8w= !w@c3B" UL禦8#猍v $x{W }pDט}s/2r9T8:m_RכQu [ckDz\sPm[71r endstream endobj 194 0 obj << /Filter /FlateDecode /Length 4367 >> stream x[moHrpA@>/d{om6=p JɴEKҲtA~TUw]Mk__΋\_Ί_==w8k#In +/nq^ 9t[/vgٿ݇ZJE}*Bk:ϲe75~Eml{xl0I/ݎ֖îi̭_ڬkr~pP]m7g0Fs!rucJym 2x`iֵ_Z>ҐluT 28/U^k-߾xᖆQVFu)rQ SOmsSW TCm%0,ޮ֥KdvWeʪl>tI]2-8cP#+ʌMB,auv ӆ.Ȓ1@HW "ϥBp-@g(Nsf;z,wL~`ͣS;e͇䫵hŪFsqE#ɀT,DX+.AK%Ѱ;PJGϻClkZh+05ШcJ^}WJ8S^3t0`ɸK FiǾO5Pm8[?7oAΕ.@:HI]@V*@Pu45l?c#p(Ixdj^t #6|k>D:))+oBUY.Do9A|%wH[j-1fW.q;JbRtu"o33Re4"7D뜩5wJїX)(dIoF6tI~6~*: bpƓI A/Ifa$3. n}\W&5̥1b\@g"U@jaxn TLm:x괏Kq*F_͏;SAh5cS#'QZ`&湐^S3ir+oT46!xKRmHV#8?T{)*q?I]WgY*yS kh>Y3"3hH"0jY}ڻ#Hdww6V6?k|7x5B۟)-_2phG;8J ^gci:͍'=HN"DB>]Cy[ pfCa *Q{G&YtCPPAJfZ) *WUwFL1\"7wݲ>~VQ1pzN¸7TE\&ؼI9 #118djFhgk"G<WB)C j >U$P +(H+"L K{2/%JM!PҐZ,u˕˓&=ͣq33uNo*ukﲁ%XW~nJ"\G-GS8>u~ ^dC8bň*LE]Zwp ]s)U2;Bvz#b>7!i=miE,#w$TKXY/huT'SV:^-k3ʗ[$m> \I33gM $ ljڨM+(?W4LRL:`4p󥍤MKK.zwg-⏆G*E}Ԫ8ϸ9,J}ĝTD oWAYj}-#dwPPA\r lm.*MOJ;_7@<͹P9o^\U+fn.f?QvN75kT Sx߇}ӁsqO_##IXUɳ?//N^=V9qQ8 <@M0PL1x2è\}(vIk uTIM-qJbq|SS9}ڪdFGO~Bs=KjVzOo%J%U[]|D-c5rvܰ?]2ٴ܍ >ۍjqC1CeGy՛,PY&Pbxl+L%jB3ֿeNEvT$LO1(n3.H?5ekĵj\\i8뙻tϻ-J׹,+Q~_SxK(=!HrǠ#Zb V%E@diAr&2qbpSamֈK]Eʂ25C#V~tOaDEa+03! SEIA9v8#BatCaTc>ݍ1!6+PZJ[Lz+g [)Ҍ ,t> s|b>lOuRI(ڇPvUqn!8?xaL(JXp)dq5l#g0-mRML qz~?׭?}4 'GB5~F’!C,̭'(k}X|d׌q@\`Jpwv{L]dwaO{.^}CisZxSH'\SIxZ[Qc1\UiKu^Oe_f&e' Eɯf-_hHѵ8pn}\`NaW+0=3q;=0LZ.#*`/2It n$st +YW67:䫦JVtyL۱4񫄠 kl;C=gaP wiE?Ӕ&&ečߨHⵕ&s@Jfʃzżrq:s(|-3ژHG_ _ u8hWmla!c-j1TRj'~D)ARFXU;O[ʈ0> stream x[q?A`ᱟ؇s Ch܈nHiW򿧪Iv59'ǯ^?R*;^UՏWޮwﮯxcM+/V_)bĪ6uY] ֱʔ^ś*+ㄳxgUgs];.#e)e^7Z벪Tm.]|{<] 0FhV.#:9=%;OKKQJ!"/^,-/v\i-]YYQ=;6.t-\6YRHߝa?YZ֕F.IӢhޘ886^EW@^!/.`Qř bk3^h>Ret>#ׇ6UV'R GJ3j*w(5l̤Y,?7}Ԫt?~XoϿz txrP@zs"N}2s$csIHF YW94?Q5% RHߧ݂ͷC%攋N疛ΨQ~zcq3KPX$Pd>)KI3I!> ˚gXhq-񥙰9גh Hb7OARmPq뺈\҂ ~"" 59r"ֻ^ 7  D=WҮ®H7E `UIMՒD(d"Wl*S@($0g>"2iгsi95H萪}?I}{nGZ&ae4Qӝ%WΖJdNA"W|RZ0LX̫,-́ 9MƢKFgiid>(Ձz 8~n%zuW׿~[ss;|F"Ϋ7o޿/+FHn_y|ߞ8ܛoOӯ=| CoƏ`aMYO7,W^qwnsw#iyMY6 .%-8B8Ks*|DWÚ,o"ۅ@8|Ԥ{z 6w܈ \F^ٞ8sXwcr=,}40&2<×͋ /^g64 4᷿P82I.Ekʂz4&Ø$ =9T)Áū{EZ ID>5=d,:N}䟘6KEs?YB&/ !Cp})zZ 0c1 Y39_"P*uܞ ($гIHyr-M >z3PIH 2|lJ% lFUya ZaёIk9rRrz`ݠºAsUPQ cWpJx2V8b{ԁPSYD*mUaq[,~Z nۼ 8W6 UXE)biaƧZ[X(/JK8B"vq{\zP\ /B|,L , ᤊzM %f.[bC29~!v:(g"NZic}LWc:t0dܿL󢮏`)ÌgT7 (1?iPsJgYa! n ;Yɳ W2ǙA8 "[ayzFcAJ}2QU9.'jc'})JT2fZ-^QsAG zO42eӶd0hm_ǀmZ9-Y{צt7W*\'3WT4qtOE3+)b.Jb@Ὁi{Em+S)t'֊+O>Q 4mJ?TŔ95FX,zr[)~*L`̝ %O A!V?$*C.dCȕ a93Fu'UaĶP;|w-Kb1!:ǥLz^\#>"WUKQӞ "~dXu2n@fcj(/awS"ΪiKh>^X+$`ئۀyʨTjM+:zA/o-VfXBtԞ>/y7Χpn60Έp+҄YI+:sٳ倁%';еTձPY( U9LMq9uH'~ R-}it uXS%s8G.T/s8JW|&<몡8gAΐjMݳ l8SPVgJBTgxch;],H#}Q]H3.uX[H0ni%R|qP@Neߛbڼ>pk*v0pc2}v!W(1x=X>-݋Mf;&^4NѠ?V4}LIEʅ}ñb<]HNBԶ˚bʠTe1cǺXt xWp\\Ojdyˎ#?:ic >\kPuZ4TE[mtU*yD )ɓо?NO.^+U+'P^+iQoW^l8kv[k./ j.)j8!y7(DdMw=qRIħ/t55wup:,h@f>/2R' *:^t.\#QUs&2 1i̽^hx~@ VHdvKڜ- endstream endobj 196 0 obj << /Filter /FlateDecode /Length 5715 >> stream x\ێF}_}7wT44XsYxȽVK-T2Yr76"2ԒЃy/!+5,,q=y?L0Řm@s@Mj:4W/O髯ӫiOqkX™Yc΍y||xTޯ! FT.B^k[+u38Ԡ$_줔p5h0(I0]FءB7 N#?Nc_-$?Mש@IL9ٜ,>?DwHSR6]/C[>ܮ.ڨA;ۜ:k9QGԬ[ł,#uJmpq̎/ Cfx`rA6Fm[f?sc,Ceohuئנ~tl+(cO~3]U4e8B n.6 CJE`~FAV.-poŠuK4Vm&8ɾU6q9~ 29ι D.X_{O_No3(! 6"j;$;Q=3QU"R4q8V Ǥ@#el4$$/sΕĴb-Q`<1!mI'Q}N6ah~eJ$NY99R-FӔA%C)QlXD}5V-gz}ſ ǚÏ"6p1!'4faxJ4Hr4`;0`8C -tW g1}Efa[ |qA ޟj0=d4NYy~.45)1G#@dۓxn!tjPufy,?/HWs'Rdf zLA"IM1/Sf3Y YMzHa ؈qI{[Og-GA 1ט08X&"8@v$ uffaff륟%"U%òV1mz:tdA޴3:qN{dJꩬ7`=2BZ7=҅ Y!-Tg~SWwꂊ2՛xܓSWWyMI0aRx$@&9Qȴؤy{M 0 .elk4gٱtc/BXD/) rpJék~Xihz=c֥[aF=YDnhEeESY8boR:vϏIV uFJȖ Ld+dZaus&%)_b{30NaO>䇱3} T[+dݢg`$݃k/-8Z"K dBTNʹQ`![ XI .*_SꞃN3S0O=+kO\.Ԟd9s:.ѪWu+x.̓1.Z-  ɋ8%` V?{Ey4Y/=iuߧ@.Qʲr>p2),dOp8 oPv7B퓲3!Irt$1Vr)HR5R`)/,C9 Cy<9?SgHQN8@X++nKߝ`u=v~b|&. .7qfƬwnj*b=^]NS/\sFAo A}a= *M1T++,{<؀v9ؚ ''w޾5638Pf?T h@tpVA9p@&T."G=Fmcl寑jI$_C_.V.=* Һr@es8i]ǏxlQ|Ѓptq]?":& [²4Mv+b-1ɶ[JfcRz-\o>15!}3xyoCV.jM <0#g3f.ո8(yB QGv2lYZk+Y֛:6!ec,jaűnua݈iCDEjq'SGVM?hHs9{fW$3|b\^miťᗣnq`L9/>T+,e Wa[R59.%HE8Bcaڼ0;l0嶎wD~_ Ctl>5T8yKcD^G/(7|KV&`WCVp&owoY8$T}clhYs*5@/6CZ_2羃OZλRi "a||| 3O (](9ՀV2g?=4e~#>˯vB,T)0 g- kcEkwF@\KK}26VQ?,hh3{El94l{ T֯[_tc6>Kg|Ov3)jpV5ʗ~luchYYgk橎Fg(씫b`tFbu݇ʌ1lT= I LTh*#~{wMaqKqnO+^S2S9c4<]8ț~7s'ȥdH#TЛ},8:%HVq>UN~_#= g$7@iIH,X(?3z.C/"8ޱJ* JeR%Rry]$t7Rjd7q endstream endobj 197 0 obj << /Filter /FlateDecode /Length 384 >> stream x]ANP D9En4[lXpe4 e홙R,k˫4^roZ/R8U|%|ju| 7~envi}{/}\n(աi0 Qn/N)A]46$`K܄=$!0014@L7gRľ =&Mې[.$h1Y 6&+de2ؘVB&4"!)1u!;"['b妵nXi98Zs9]"8#8wEpFp1kf̎y]3zgCI/_RVwswe~hPendstream endobj 198 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3733 >> stream x}WyTW֯Y"EF@11&3%(. - to",}VYeS!FяL'ј11Ft'q8ɼ~9GW{{OXcd2٤~kuZبys=׆E$'X<%Ȥ'~D3|i_6rz{h F.mIť'DED&>7w|OOkH9ۢuQPW9~s\WRQ:kHXdpL.u}&׀uK׮sY:sla}Lߖ:MڨuΚ0nj%f:`0l`a62K/Ɠyf2f.cc3_yfcV16=3X1IYָI2(ϕ߰*PRd)dv#()_O v. wBoaݏmd@DQJ N_Hܰ")אy$rL}8$ 2A߈ _ ݕ(Wb53te0+*tYՈݢpY|Y'#I2.'O^BVk7,p TM/p`D2 r"up@҇F㒤с?==ZS ~j_c0yWa#q9,ĮX 0j r 'O#/Y^*xB\PX2!iJ"pN԰hgpY!b+ '4X2J}CIynLxPt@GttK@dt#6W3nJ~Lk:rhd0b;2䩑eªK\$TlLΪe!4)Eá{V Ң:P=BS%d ioVGw5Ϝ? ~J /~PT72v%KڲR.c4N@ Ⱦe a*U04{'Ҿ!r^f6lÉOqWgi(^(;>腫pÿ.3NOץ:|FEU=@;U&  CHlqӿ#SEo@2xs˜vbn6{vK/ [-1_AVL}jJ}i9O87t t2X7d5I\D9Ȑ3w,]s0E)ʤRie"DOhR@dٛ\$egD+Bs#W&]N&=`;tqeniCOsʥ*-1hPJ-~o'N%tik?ўT B}<裎Ȍbnʅw/tR`m[W YdmHROɕͥ? 9pM *LdqQvscx~'6$gm\Cwjs ̨̰Fw+&VUnu񩩒rh<Ұ^M=ZlHQ{B$%hpcIzOBNj6fYA00 Ax32-?97;YPb(2mcʎQ:mZ+[.6,-ΔS%{'ʥ8^Ur3EBAjt4wwOB<wj+Jy9; I7B&/K\rSЪB̒I& NYU:tf/]Շ (Od%\ԎW؟Fm-`qwdrq.3ĘHG_P]u:_eewD$\A۔Օs gӕ5掦hS0/Y\dr#KaMŒB5)~VϪ6Ex*ռZN88EEV|#r7]91̚ez=*%3і,&5g }It$xV+~m`5ĿsQ)|L壃i qԧya,5o4=1$ A.Iê'BX5NwDo9¸܂ڙ^ci{e}=xj4%yӊlӉ?>J*x<-2/6vnAgRwxuj?Ԧgd4H8>?YS~m*=s|(TϨz)qa*%OROi(_ 3_P 7+ǿXC'ܹ/)~Oq'oҲ@XYX]_SGBi4*d kMIǛ,.ol-mT;wU) E[Rt4$ɿPܸOo5mhTo43? #;Gofr>OlA+DPTܲgAjrTzF '>c!toKRo(p9Gq⛰v'sRٟÕQOPzHkڪ+w ]蕽{K˥"ܢsiM8|&z]YԾQU.udZñd+^$Ņvl>摉K+-Ǵɍݹ{KN%|Bo,&6-Z kaO; F\,i߿Bk;̀~0 Nl(0ڰ0XE' Yi 4@MICdArd:ڝ]P?A/D_fCwV[Vqκ:gJT)K1rM!h.qeF)hQi>="]㲅D|%3T,?MT.;*RMYa_C7 i7_6Fl ѮVZ.1U)?2π|8 6-H%V,TJ.+bcZZ͆6h +Vh}m+rܺ52r^.B/Ǡhnk:݆݆66^CO}{ mllendstream endobj 199 0 obj << /Filter /FlateDecode /Length 504 >> stream x]1n@D{7%o6v"A4T"h33SDn^_˭Xv|^c[wjywx$۰lO߆u|Mw>}_ c[m}_T7m>W}ֻc%\ZF "Ġ}C 7jG!{ w*jyڊ+⮊*4XldbE& ,2 xdrfBydh28 M“Tx2> stream xX XWD(Eb5(.c4*G . *4B}AMMDhݸ$Qu&Qcb̘I\&q^ͻ e [u=?+a,z1%#"&Lt|k(_%Y¥`mc >qF*l%.*80hDwInn4'8m TE;ElrZ8n8w#UfӨ'A~aNN+6vZi+G~aDD2#3z bT~6nzw+BWm}I_ciof(b3f͌dV0+*ƕaV35ƍyx0OƝL`3 IBf2:yY¼˄3~Lf c F2v= fN҇FX0)Sɻ:(KHjalk6}m {ZY[5'OKN[oa+X5[m|a'A-nMknou(@CIi0I\tٚƲ_ZfW48D&#-:ۧŃ&2+*+ PסFÙ" @iG[{'nJY!@u\ 9)xIJ_%teA)Jp=J? , ,hHT`\T5k^k`̭ g CD5,6HZ*c?&ȔÈ-{pʽh#BT [wÇB&>K_-fLT$Y+ߝKHNVH!cg,IZBO 3n>)<7's)P \ k@vakJ@q4D2AL6OiLsڎ ~r'^U,s<; +غQC#ږYH>&`:qg`\&IÑ_פ[9Ɛ؟x Ӕ::+i2\?(k:9 >Akq\ >_9yX5dC'iFt5vUX#Ő3l w4P?Sa~Y~c/,Gw(dE=pVvXKrAmD4cӟę"+oVN FL-o5m Y~!'aoa:mquuG3nY?L2EHK޵k5Q5& 7 c؀d8 f4LL!?/ihTV@pEEK}BiG^%W5JKH@JNȊ, .7f(3 9p8pqoC#=Zb kl,|h)8(`$ƮzdM譲%~FKPv?vAxDRT#n"ۏՎ5* ~4ʜlv Vid9GMX[h/ckr>3'D93RAna6C3Cͧ3[ozK7l1E 0S$ )D 7_2N = ~̎6 7e)=4nD5 Z&6P35Ѣ!P'`heLyjE) z{%[_ߓ7)$r<`y$ۦ-`+}yv3j{p>,'<^ ]Dhi!kYlh2CI a#,ZENqNݕ^ I32`y6<:*|!,nrҪ43F uܼ ty>6Яh%llhv͹9*T˫R`XPa`9M25ojLQ$ jG6OSldD2i#/[(&ʇjr)qGPL9nk` T"E%_%DleIFFۭr"jlzDz9*cZ:4w,DAH4BF@N 1P Υr3*xru{7{=o[)˭W՝^eˊHrPF$h>rRM#ƹDp;(3>?O/ZMbMq{ZtlhxܼUb_iBVmO lQ`;*d8St{k '>ل;"4Y g?˽cshk1q1oo*XHo{;bエz(k9::}ɶ僽>ͻn~!X] 6@NB:_WVTrb(3\ihN*T4geЦ%)ݻJ ]s3c{shyP2b/s>L˅P@DEwRnSjYF77~Ua<'&cƒlr<흜َXmZVX R1c Kg2>*ÀnzaR.[.7эV8 K~q&.ЪpQ3 aɉѰGˆ}5-<`W1ay%,t=/Ѓ)}MEIheY#?o2::ZqX{`rƉࡈ3ϑN۪&rbl8Wg{%wqcɏ4no;thnCP]\t8Kռ6".!5Un8whAN9\ARaN)aařz3_uI`A|lR|T?5I:HQÄ.Q' W$Gv'DUU_WB %N)X o»=X٦ * R*hk8z ,"R9]R>.:B*ehС$9腃CϊIJHNM 4ee4}P6{bh*SBMcs1cXUXpX{NpZg͙jRA‰*9Z8T'46Afj=h-څ·D"''뿩993C OU6Hm4o=2dojR,o2G^GpHcɣqI3b{ގh4}> $Hޡ T{ |+&p{k #~ iZvS;q#1B}GToDގA/G'jQg=TЧԣ5gFmΌ-\`ݭlP2̘AJ)C N> [u*?Si[Pag=V#VM4E~a/'4 w%r4EBOBJ.E_Ҟ2J-Ήa^^Kq $/O()bht+E7R2p/ oܒ]/J^?z߇{ϹƷ q;ueb&|(=`Խ[H]<~.8􅽪(s}W'/;ӧGN (e5EjkEL`I%OiaZ?,$D@! -5[Cvl8'q_b@={D2 n?Bru[뗄 Kg>*i7$+U]R/ް%dS`]񆊲|A3#dTqJqrnwAY_6~pYTV\:ȫ{PR /N [k]s%M_ p$@8V$ {[4qBbѫ7),PGXiݻ![nZ[se r2oendstream endobj 201 0 obj << /Filter /FlateDecode /Length 177 >> stream x]O1 y?ȅXҥCC2t`KOf^&> stream xUOHq3M[ӔY={ayKM%q%NL7md07J}ǭx4k /'CBDg7ETi(];ϖU  J.HOҠd$AKV&AlBSTKGo7p};W^^QV \WicxgWg2+'uڹbɵuv6NqM׹fKum`)1# ?DEf)pAwA>Et;PhhdaNv`su/[%%^ٌl<yw5Q/Cpg!9="0/T׸ Jf j>W2$͒Y51ݜ/h4bI+1 `v>PnA+<`rw zm{e-"=^4Sx^YSb|` .YA皑[#h!D&b3UM6c}*ı@X h_'&RJY Ä+rendstream endobj 203 0 obj << /Filter /FlateDecode /Length 646 >> stream x]=n@D{7~dn\$\" S,}fFvC`%zuݺ~N;; |nMmvo:h˽`Gph}v׶{,uWi> stream xyXT׺fo2 j`7Kb{GA"Ez/"0a73^ ^bhF jNbILڸ޵4O}ak-,-(@`|ck c=\COs@ =;ֿR%ZAw!t<6pmknUT M uCvxyM0aرvnvs-uu anVFw؍ sv [i"GUNӺ|@Qs7 8?xAEa×D,t]<}+=6h{S jI VSR(Gj8DP#)g}j-5ZGSs1j5HͧQxj!5ZDMS%dj)5ZFMSP+iJj:ՕNS=Ϩ'HzSTʚRSb/%Q %,([?5H(AuttI(K*z)ȢD8TXd92򅕫mRE:ɸwt@Q]˺}zi^{]=>TA֮߈/M\76lK}v ;p@{{y5wG֏}$ [ ;fnAp! 5l0<%Rm!P_˘ho\O/+OCIrI ZMR<FoNHoР"OآYŐOAMI:^ *[c]#H@;L@CW ddwѹ'sۈ2 <>)zd~:R?fC"q}7,8 Y< iDu,-|RZY+nPmVgP%ZE-[,ɩFnAP}+|}Fa%F]P"1;=S^-|부 ʂ Mp@աett)-Nb 4n.+ t$9tf[fL=Țh/R(?Lya0?JP:c ?Ve7ɐ3g>I[TmIp[6J!#N `V{qts Z'2],)} %E!W*!>`ٰhx*];OD+ѴHYG&4ٚb/»6\1 grH -~Mq=CMzdGS|Dgi1-_Id ٻ{6eRkpdlů} {8;J%!$,WΞ.ܫ BDkDrnee ߢE8YHݙe,*"SUf} ֡V rD<FU 6F9r{i3.ʚ u5=wQU!WJ:QΆ.}H >O#Z /z \+?t[сqAѨ۵_n9tt߄MlEhQo١c6!8vvYCI2#*Mb'攈XZSeQ­Ͽ >_dJ}y}Gq}$~5.sIJȂWSٻTa^ Chg-_g@cUxfv,٨<&thVoZChFm{ϋ[4Ї;zܧ~ ĴT.EwFB̒ 4ܠ+XAnGŽ؈vW'wnttY"m&i% 8VLHT<`)MONޅUjAy'f^yŪ4 Ar K靐Ֆ:KԔ>}ᅰa"*( 3¶PBX{xSK?=ehlʼnKzl;xD)[|j$J]+'#+?# Ld\)5SRCA܈>DI&<׫I_{ls1<*b 1!"{_Ʉb=\#½~o^}2a/.О tg ?YU lI䭲'怷,qkQK2(WPOx TNw_!rtĄZxf/ ) !ZMS6-;My+掿$Eς h̙k؉4Au7U3:wwvȼJ}T`~ߐ577&"7 JX! % Sh` ?59ajR> gJ%UA*me p!~}c6aĥ''t3#U^mvYavaŢN;j( 6uw$YL$%h)ñFȠVΫlң#dChT@*|Me`+BWT)5LeTaXdxcϞ`|nvB޲ q{,&nPMTـqK=Y;y?i9uIU/sS)! .,-즏q½qg# wע|Se^7]5*F _ 1,Q0&9blAEvbgB*:6mW=pJ5hi/4_g M[u5?7GϠ %"!RD5bf*B&{VY 7UJz/%Ȃ8׶HRlc3Hy] &%䊍؃x=+_iq[~t@K3c ?D5ʖBK|'#n5e!wefYhFeuZv$~+fTK1p^_ Yl s5(~5(hUZ D1%":-EIUpcڟHⵚ `!D \sNɰ$]JZfNh`PȠgOH1㇒6䅞DJp(q0/lnm6X\hEx,݈'h)&| .M?\4А8_4LY^y@zI=.` }oE" L b9/6^!LXadUMAi&DL/rza#͒SHxb$Y4ꎨoˆ 3'b̢|*BaFt#s Ǘ[_}e#\47RR_=r͕cy>| ?f0FvE7y"v;3uٵիa%5HFҦfU 0?\z11\ְ!趍 2Eμ쒌rǔ4B݁˫F<7z߀0"L,ڻIox'm\tyF,&H!GIJа gW !{B/3+zF$6,5էgհc@d{\6"YxРYg|f[P^V-s.Ŗ7dP1+Sq W$;|C5euM sdom;G`CA?^t Ӣy8@I:AX l-i ^9qrHL&t<֔=Vѝj&K#Y2=sEP}Jy,xO 9~-H3>(ӚdvB_=[t *Gd`HPy=F6$.0٦ &4ZpgBNVJ;Jq_tES$e_;uЀoMg PtlT5dѿƭyhɃ{+H<mgUjϲlao7-`vѵS˚Mv^洝dԺZ,r)u)sf`} GAi Ij>s^h۩s=w(&{j 15_ڈ׿RWiԖl3MDBD&S8M:Ҍ"g r Xnrr0;/>zmR}>!AfpiR4=CێOt}W|vv9+$OW"( nQ5i0 RuIȳx2`ٞdpqĒE2=H {Y"!|t >t%RYݛ^R,Eu|(([c 2pDoX*-|աZ:Jeo7C` ӧB['hBCF FV"q.nH+eԊ@a|*J w~ X,G'#T&ч2d:exNr~)@K BM+\P> \mBрINS~ /˝İƦD_10G\)B;:ЈɭAd1oê4a">y Կ^ %hJokf08 ;oV> }ɊgAT'&*c 3w)™B9XjH;W"bׁS7SbhWӝRp9)  ay/3sh $fc *sS PEg^M#Aα/s R5rgWdlBj<Pf|q,?O3))qW닫*UڤA]yWȹr-?(t6wa,Nlȣp .;cմ[ 3=WB|ٮ1[a;2F$? W2On_eDvٰ?#m4]& KOT4ʸst&/SJsi/ ?cG~^_2*F*1|Q擛ho?7xd#~9$y'oKؕ`/|& )xnDo~$c/mNRFŖz0Ϝ! nh H|,e8ZZ}1hh9E{L ͖巆ݩ:wvgg;1D՘J 56.tJ^0ͧ'ƫWooڡ $iBɐI@#π"N\}-O1`/TmK| 5o 'ogHL#MDfoaJQϞ b~[t|DHu2Y<}m0 VGǞE~ IZm}{̷HP1%ۋEh1S(Kz]{JKP@c*2qcbf,(wؒ,I_L>JGCR~N6NqKftn;I3x 'w~ˆuEƊFX-2qtQ1#?4w_r>k,N'vY}U&[B1ex̹5ʢ7_3# .hѺ!FN8"AI?a"" +Z; .wWP;#q_<Kp0.EdHߐT6Q+MabyEAa ̭  [ a#ߗ9ܿYK26M*J @GKTYL}_4=WǓN1~\nkf6'1ĸsuT' eoǻ}7}[er1>m~ylYDb?g݌.=W{aUuVښKFx&+{z=?IuG |Қ[]Xa0}Y^hn9W8nȖ;u{5EЂOCԓ8h_ǒ;FMf6~*|޼zJvme 뛺|K3埱}3$5/_s=M6C e2?Xmİ6ɀ Hox`>sW#y9m'N-霃 ) vâAsa09UQ@p㋙_8ۊ,p ٧Rk8nJOj51P~|f'fgRs2YNߦH!n;) ͍`jݼuKLye'f9o%;  fuC+;~Flw8YBng}j@c݋^O^}zEEX]-ⱐdY9ilu4T}u(f =pEƴ4xqZC4:330o9 Md3t}k$1H>l+!U$v'B> stream x]n0D AL 6Hh/pЪj٠pCڞ7t> stream x]T PSW>7 LBغ7qeWy]2*Q0]A^\Zb,( Hk dȈF0tŹqo;;wSHCE-N4bW1Q%Řa >\YArHZ "Ҽ25IY ''W"6OQTit{:5^t pTC.-UNIT%*B+B|C~T!kkujWzoVvRJք;8" - B!h5 C(٣(y#䇜?rEJY K8m@BQ /WWpD0lƘ BG&h|Ca5nH#Uzh,t+,bx͇0=tj#ZtҖlq0PFt fd1Y5E`%HJ 1SmK`ɽbp: ةjhN^Nեjh K4XU-W1W|O?$]R-O)זj+vS)|N;wor+5{=1WG|a=O{ۼ3Pl>{ԜARh_mYܹ/}S].ls-n<&kbܿ?)$ \MK()#w1{Y[s"RrptI4?岍BW%9gf]U}zĪZuɥ K(|IDžo6n!ύO|\#T5k* %Ĝ,%,ѷvߛe8c".9f-^J甞2- 9*"!cS_Euy r/Ӧf2 3(`eX}rq%ܘU5Au.3y*P/(K"W˝7ݝR3XLtm p{/t^N8}H~0 )]P@;l²7 K7n'4V w+CiYue`sAI$WtׄcտxXHxqPߓU )ZPNAEFt$[T>"P B 9DwYX͸q.ִi)qq15/Cٷ? HS>ʮuA}Gw>TvwvWJ+sahSWM_cW;;?Ω,>Yn;:W}:aMl^_ԏr` tkƟK2Im.gyh rUisNwU|[[Oh5D@^,IzIMi%OP&t͍̮cU_ADݗuBq1c.MXvqoōҲ2S͕Kendstream endobj 207 0 obj << /Filter /FlateDecode /Length 240 >> stream x]=r! {N fi\8Ir f.r{?i)'hǏc^6ݜiisKVm%n/op 緐F?Ín݋:ӽH5+?{%R{Av^/GFE@ǘz1j8ZA+&VYnd{/@ljupN\ɫy4ڒZJC txendstream endobj 208 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1737 >> stream xU{PT { \g$ƀxmEZ\$k:(+ݕ»,eUY nPQS㥵kI;$ mZ3{L3{+PdqTѬ5q1#RlS??"?2F*ǒ`ܿ(?donV1SCڸu11QmRǪr:)vGz >VG ٹ#yj}:=w:#-!5M+#%me㍢-E%Y9qk(*J2xj+ ZBQjJ&QT 5-1Jn-H[p53/KzZdrQc$/e_¿̐9ij8z8YWo"g3WX6[q܀pTt^@)ӷH } >/maX$FiʞK>'.7Rr*Zބ%JC:ޮaPn]q+}.Ȉ2=R*:T+gpiG:I@#oAz+g6;O^h3l+t9%@BsW+=GUn^ %*"aPNs ٞ)QTEN2s Hkx\ć*f9)i1pw1i)h {HodVQ+7r2s]1#ƅE:T)i' lGVuQWK3wvȝIuf!Z +XE* 2S~||M}0"Q*.Z]U/.RMA՗#xp|4`aH0J _`(p! ?lg{{eN.cf)|U*4^->P }i[au`Q$0aD[cr/wa U<pN7%*KPX*E6|NXnNO$W07G֡ 5s#"21O8&#fbn"+XߌǿHH ~oelrQ8iUk{pṪCpƍ{`9ldEor//9F.T#taRC[ Wט7CE|W. ]d^ YNcvIr \hF`?Hܼ=71a*ɪF0EQ  i?ᒸ P2˿,ldMM׳J58N$_xm_0_0w>e1 "R#fPŤs@̯=| a̹wĈ#FGcG N֨RK3a-l5Y-VBM\aLP5ln9.M> U;99 wX O23:q! oEH[䟮XxfZ[;xevJRlcendstream endobj 209 0 obj << /Filter /FlateDecode /Length 630 >> stream x]=n@^ dn\$\V S-}fFv"0>bO//6,W |\cpy tLzNou~6^?{>]4]:N}׾zlV}>8>5f'5 1z :c6 b2q4c A<0NM81؛3Gm-#4&QdИDFAcEMFU #&kFjk&kFj :p.N: :p.N:K9:;;;:;;;::c?9w" !B" !B" !B" \JC<@P`@P`DTdDTdDTdDTdDTdDTdġ6yɒ3Ns_MI~9)B@j -$4)QR@j -$p)`X@i -p%`XE`W\ Xp%`XE`W\ Xp%`XE`AS;rŋeMnC^P+0Oendstream endobj 210 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 7060 >> stream xyXW,evddQ3b4Ŏ`C ".m)K.1bNJe-QIL=.K%y~rg{9ys eGI$Q66>>͙%O{q8V"O!bVh>jpnܤ #q((FR*C!~n.s̙7ky_d/|~S6M7E7i>ަ]<4t-klܶmV +:zڀ@ S>668oOYS (j5O PCa2j85ZAFQ)#(MS2ʄҧPXʐGMI)AF%r9%%zo9ߠ_k0 ǐ6̡y:~-]$-g̘A 5w6 ?L9p#F>e'voE;W=2G4~#3e/L\MΎ`^7񷇿, V oLM'H&bR%%l8&ɔG*O*)PKFW *KPCryzU5x)l簌>6n~V1{JnPO,Y̳&T7r5@8o8`]@V~Sp54[ |6X~@=V;oV<{gQ6l6`6lb,4%`tv}rUH!/JT)SòJ৻KnՠB8b@-'Tlodؽ? ! we@`Ϝߺ7 AjpP}pͮnbiv6+Uq8Vh7FEBm$l^|,m>$pQ4 w<}<|`?N Ԓ+.ٯ6= 3A~x FE&7fʕ6_|wOnYQj1K-9kd`X5(eNc1߇9ηw^Ǭ@H M k@L */@jx>)%E)ێ+`+'gZUNj8M&km1BYڌGh/i0 bzD1֜&SLn:y \`,݇ZREϽ}<6Gm$;:zw GmC«2QY&a@, k1L•E_}}V}Խ"ӥHY k8k/a/W#g3wKƑbk~\9.ά0aGnpD?QCZ_tQ skdikЇLMS_xДj꟠MQ0E. }c>@vsv>Kr} 0]Ty|Ť:M_ZrT55h) wq:m@T[n`XH ͈kG C'[M`ȕ eB |KUzZ\b60JP{rP(l%:1ЅjPz ݇EWKlOq"=_y}UFP-40ۘ GU_Xߍf3Xxlz~[[N]+Pj݁t 4[zhS<ڟ@u)05`|jIx;Dq=<GKa]?2Ɍ>9hA_乕rdR*Qn3H{YCt6 yv}tq2Bx,CeThwtBMȶ(@1*01v?L2m uޯMδcJ.QW?UV0*:ݾJ -AyU\NYCy/6Hi QXD"Gd):=5Om_I{'#sºVTU>F̧a1O-4L3qØ/*M `kIP(}aY;Λd[y]֓tkR-jt3'ӰUIs["c3bbP>**H2.2._Z~Dk_8 )܆2U**69yvqHR6n''P Tʋ# T ޤ@֎gm1oX{.^h/ɌT<;8p4 ple7|y[[a:$t@.d[ᩇ~Vw)GOQ`ݕZ\LR bFd-{H<X>p6ZV ty)jzOx42c*!xSٙgjRw'1}5rjI\*ǃ :O+j8o!:j[o\4G<*-_q261ŕy^-ۜ\WNpn;(9{N]qdIvSS_]# |a @g&xPVd.*B&ta1*͐bC,)i"f,TrE`oed1Q"ǫSs =.<.(l劲ՅZeoGkѶU¿oa߈_CkՀISFʐ\2Iq$ A/DYJ>>\˰o>j-UfCo[*:I kbrN "t)%d u$;{bIwF԰e@1{@%Fx!љc/U]/!['j X|?rOZY]<| %_ml/^xķ~sëR. =U^ bwb&]7`_|.JOZ[Z;YgF9jkvcj ̖betDm)ﱙ4f_?BU\I-*E٭ KdG{-≠C/c]\x'3sE#d/(dݷ!u aؒEX+e;δUZX! /Sv>k!{1~qDbI!OhA,s£cQ8! l]}^ MrXC꧀Ϲ:yW(7t`/֝P)$h, f_xiL}u^@aNuS'7i-Ρ$_f23Q)x䪔G$5#w2ŗt7I(#BƒsclԦ؈8$7I@xIo%6Q"fԜ]QR v;Xvש6,e!,Pم?&z;0s@cI*=zfDPuWb(M+$ <\h" ${R]\w$ &NU#$$1eͤ 9\>p9,bJr%Ol×sbZ+qर$_I|ai[ѓ|iM6#ot؛hh|>.#fe#{),j W@_Wl 0[$|fO~Fm:}>):O aK5e .a xH~ oUVr>* 07Vj -\n3{/鸢7,8ru<x%vÇcȽ8OVke%))dCwE7GUW3fߐ kfb) sA…S|4t D. TTC vKq[mYhfou|r.@N؁i:z ٹ<> S;u`Ióݺ 8 Mo G&(;92M۫c:O1C: @1!卩y)| 7&lvI݆,5O4_ N=5HniA.P+<s"D iUj˫Zm[-O;K^h%,dp!c_E,T˕. {^]LP]56"eplAٳn0˘Cvb[Q 5}SGlsKTĢR%0_tCYQXʀfgR0ebR'x2." 23'βej2!ߢҼ2j:MFGLGƪ]a{͘=%F>y~)v.|MߠkUOWڱaLrk!&f`0WaX~fէښ6E'f||0t9V敷ΩsdDLuw QTNYq\qY{67!3Խ abmR=F\ADV$nVOyZ4hqVVґ^szETVFgoYNT)L TlJ#SU<<Қ6Ʀ_Q`wEiɊ/{ g!k_4hK&,K+ʅizf?`AG2TڟC[S2UK9CQendstream endobj 211 0 obj << /Filter /FlateDecode /Length 348 >> stream x]n@ <o[^K/8!}Ǔx9iϋmI_4]ۖ,<١̇)bMn͊nY-6XY_ v]d[7-kC8ߧ*L 5k.R!fm]G*T`)`(1R#lU{T*R]vn"*>W+ ^A@aH6VV( )R4R@uD^afG ;`#~82D 88Z8F ow GPW>"r#ȫ̬hDTeu<$Omyvq{|ip]VwP endstream endobj 212 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3836 >> stream xWiTTWEQMM^18F6Q6 8dI]#XP\FgE 5vbG1Nbis.^)!ykժUSoՅO ŧΚ9?2Z& Kv>y \j"%Q_ssG!: [Ⲗ'$f$FǤz3s| e3ֆEIHOkfxOHNj^ ^1a((͑[Vx1`ܯW x=>!qU)5k#vEFE MvAl 67ID$)Tb+XN VՄ1XK!"#+'GJG+.-«JE[EK S>7c\\68T#,'bvw4*x5\fv $iFZvF^_ A`*!o(kPk BZH#jͬ(ziBDtO_^ nTw8ʹ 8-Ȁ~xA?NƋME4DSbUt~`θ "j8Zr^Ym;~NYUhUh&U$5-Ģivaswnmz,׃hz+,m;Se> =`Qdh'1空h(բc Ѐ Y-hԼW>>1]y57Vwnˋu Xy(0~q3h'.Z*#?Pg?5wJqs.$Zyh#֫0~CDMDr;(N:WlT] t"֝*HwxЗ?#8ψY/gyUK߁eOΟ(g<*Ed,fLI4*7+?RDO.Ԝ'5N3}Ӗ׃rPL`?Yhr~_RD5xN@14 `ףV'4 vf'2 NdN8&GP9ǛX?P9 8Sj7ބN`hZb7I+օt9>Y5\zYA9DS<@ɿ#PōO~qRȍC&7&6GZíe%-m-]w@,ʷU+~4VPrFnl`_^*4V֐t@u5Ǯ%_^5,b1P>xNsGW3A. /h3uJA2`dk:Žj sWJYyP8tTuhU# s8{;7*2 ?(Pqo{he;|c?y;0uWIai*EŧĉWeٸz0>`:a=CT/lMia)gi©Kٳ$8I]?Tt%J"Ӎ7,f-`qE .XF,-?eN pUZĹ[Ъu&%G\Υ>%60 QFTv{(U,y,z{c@PDgToiON+dIZ܋=\aQRԵ>%iϺEt̀ϖdiUeJWX Ku1j50A 8Zsg˻jVT-b?}ۈC-= 6m !PPL-}Kzbh\l.AKїӭemzt,*N'r~qq/&R~@ަ$`:7`IaKg|0 VQUdCT 򾾥 {W;*jvvu 6vKłyCNPmu h߾/)~vVL^bڬ?轍XaEhmfjkތ~@ _*Mmٯ^oISс[Xي%*З1hNW+Ýz*Y-v8ܯF#9n5)6AѪBfɣ GsOP t+µ\u sEĶ]Ogw4~lWވ8FJ^^}p0aOpޥ^O"\2Ѽ4=>~i8F$\֦f #X+ͤCĎPO O}sE] GZz e׆X3P >* h,ȃmӔ!;i:I;XSCw)I?$rHhv"Fa| @{*w95dМY}}kF._{Л .b`!m 0=(c^~dI!""i5>dh:`h_!'g^ɣa?Sjs5ɚԲզ:gZZgLș-7F8Ap8oBռ !D=-QF X*]P,IN٭QK"eF"pq-[.yX nZ *iر {&cKMYYo2VW&ti|qsKG~pk[kB6&/)2R|O5=yĄb?4RNk>`ir64!-M*uHq~mal.>~icGI܂]!gw^s86޽~#z߀Xo1r,/TfH?ڲǺ{noaSvFtu#|%F FahoVI~ȶU+sf嫢,!yj v#c34bqHItS|aH &gځК:PDO1XUۙb۠UǹŦq dubURRVh {E / haW 1d._ h!y!J Vt@J(wKc^޳3ZYbJfQi*O2VVxoSv}IA+Y!/ VsG~#wW"gcBINmCPk%gPE 2SjAc0}yzF0N  9ztVE!.,y˻IR"}Rc#*}[vof!M`l]c!6/cK V?X@ߠGn Չ?0,(x"8di{"ayuOFKR5U|jCPTbn{م}k(G{9ooߊxG`ܐz-;_ovW{Si( Nv9 I$&co)+/\%X@S4kP ުB}o^~x?dΓt@Gz2|fKjD$"1`b=:{%hD D]c?oyA_EVMlnLŗWW4PgnC'ݰe^^m;Ɏ /6/_ݤh4[LFkendstream endobj 213 0 obj << /Filter /FlateDecode /Length 177 >> stream x]O; 97%QKVU xD DHҡ-- D#zDu:ר8YGj>UV 7ޟ4?滜=۾f)q RanB7Ftm쟧VTd&D@f٧ sq;tŸD<Qƈ.5ggf/YNendstream endobj 214 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 722 >> stream xm_HSqumRUS\q$K&Pd!iZPf\So:dSvkZf-,ڲDGeKC\B]{ z9p|Ρ2PX\R5rM sq$ULD]B!U]QF.-/Cc,∂5䎵Է33znakٜ xµY-ft-(`wsmrhfӸ&Tolc:vi?[YW^VU/ퟐ8v=$d=(Ibw8;*'RDJDϑތ?L #6j46&1k|p!p:98]mjƳiWOwPˣ¼kQ8$c4#[%vw{L G&a BE'Xuoa3鎈 by\ pqB'8<6{h}6{p}p;VuW͓! wom) R3e@%{AGQ(08=ۣYJE`endstream endobj 215 0 obj << /Filter /FlateDecode /Length 176 >> stream x]O  B KVU pD Dп/C[}qN&Lѫ$l6Gx:1JVo2?p6i.W O6QBk؂T[qJ7F poշl'EzQAif/LTP\;spx6j\Ԟu{5PR8}0Yendstream endobj 216 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 586 >> stream xcd`ab`dd N+64O,,M f!C缟a<<,~l!=3#cxzs~AeQfzF.THTpSJL//THKQS/ f*h)$f$))F(+k; g```vf`Pa0f{5|344㏗;D'_*ϪHohX/Xf_xή;ӽ{UDzMKjV+Q0=ojļٽFN^vzz3 v{]SOY7w\W}xÌ~/]bEδ9w$3|[w+o^}݈;Lq Tv *l9Ը`<[g˅<s6 O~Ew-PjW-Y^Q{5lgvs (Q^1[r~w@W?tᏀ9^v KH> }<> stream x]1 E{N DΡ1Md2I.8"ZYM̃~z;luٓ>%lQ5n:?86+|3TOٕba@a z`bԊ$VDH2cHMVی"!v4|5}SQJJ~]žo_Uendstream endobj 218 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 905 >> stream x]oL[eR{e^ ٦^FL\1*d8KpuBQzJm ,QPH4aK>lₚȲ }rh$'9χ JL@Dk04e6hZ\(HUu%> Djkr5יlNVΌ|v3"9[YCc [Yq}kdkLlykNL+{EWݑS;BHgR! =(AP"*E$N7 ݘO;*D W v/Im*o&4 F%&ڨ?BD|%"L^6[Sx S^c?;ۇq4**mr|Z_m8?2mr> stream x]1 E{N @Ρ1Md2I.8"XUS;`?6\/3ed| eKzjf n:?hi]BJ> stream x]_LSw^u̥etpj@BMBކJK =-Q "jfb6Ftfd|38E(9\ee9I{s( Eifk\o?洶#J(^ ^iY JPg|k4hƲڅ~C޴eKј68/iZ=MeKִ . |E}_ie{Z^Q3!DTh"z $ sQz8(S)jɅIt+ٻژ|s〓\]ZA?w$EG$8Rr} Ե|4z21v?u)&: ?U嵲~6c]/~6֎wkrs  sww2hH:$)FD<E9SόB_K[OwG''?~^a4ߎBeESP%B84aD%vͿ#j, #bq%"BPg&‘po8ϩ՟GDѾpt 2~ԙendstream endobj 221 0 obj << /Filter /FlateDecode /Length 435 >> stream x]An0D>n`&7MɢADZDgwft$OߟnwuӼ[{oC.e^vc7y^uѯ>mim퇶K۝Si}}e[uRPա:XQUruRz5WSuXOܗ7koFuXJf67fqTV:˱:)qe%T*@TFuXC)Np+@ A  A  Ȅd\:aU9cxМわ :2plсcG<:ht{ĕra`P., ʅCA`H0( ‚!\X0$ rխz _7޷-7=yiz]cvfOendstream endobj 222 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4919 >> stream xX XW֭Dli&.-:ѐcB4(&-;@5}{cdo(Fq7uF3gq&1N&qW1_WL&4_޻{ι%P2l;"ID$KOı.mCS_+}ɱ޼9Do2ٺm61+9.&6wYsO'[| fF$l b adm֨M6wMToHV 2ߏ-N$JJjZzFD֬ވZ:.x͎uSM&S8j%OQUD*DB:*ZB j)5zE-^^Poש\jF <(OJIRI!TSveCyӐaC\a4Kw0Iá0 70an ?1mDH/+3J>j˨Qݣn)(Mʿ?] &aNz8V] EEp|}U؅FFC8 W^%ЫM;hrlAJRZL<}vCZN1` U*N5lrEfu[] `@v_3z=̀-dkێ'\5 jHokds8j#Яl<}|kb fYn)alMp"BP+GChHeQinc}2dB>_X|BxJ|ᨉd+l<\~r*lWX)p1|4)˛ hMl'BVuey`rvFJU8j9#eGǔ)Nwb&S"bOQx䷓'byrϗ+!V%onڔ!žfRQ8uv?ƸS(DH{_F }YCQ-BPFO'3vE(_n۪6ԁIr=P[E\xa~8oE/h z4&k4͎9NG7Q]ovikW-d}(2>“%H\/)ڢUHmI] \@GcŲ9/GKr JYw5v?0kO&и_ѧJseѴ(nuf:ڠ[ȥjDFLFAɣa+[tݲ(FCiZOwK{Gp!֪x~7.t7 nG}C+#"Vro<t KA/+Tp%6wB ش#m)@ ^CwzbR\)')Z.gxzVq@ *窝^=l@M{pdєΎv,:rNE1klKl龏͜)jA "YS'%5I-i.S;+ I cI.0Pƣ蝐_Ub25s֒j{1NyU59kgx}SpH>G^mX*|Rϡ4Qr-m;a*${vr' Ǻ\w庄q]-@./=FK_xA,>|-gT!Xl{CpN_`L/(He9-U.db8A);Ik&nس h(֍6V6P>m-Tf zF#?T%r(2s4Q5W+w57vlnrXg( gb9AX&ȦDw4dxi}'4+uՑU8m.%]jq9pL,㷓qB UqHWr-yH֊hךgՂO-X*W5_cG^?C/ݼA.}|[8^ǡdWa끙4uM6GCcۑpmہ95G1,ҿ"V _sp[{̑k?P%}7n:?%` Iw^:HҜ*,'I ??(+Z/Jj'TDA`k $ۻu|YXn0CUeU>ʐd '7 mwl8 VW6KN$:)hf5B[㶟!TrR$}67yF~e#;ѩ9klclb ҃$>ϜڳShmRdZVZ֔M`{3Mi:v C)mm[A G{Q'x5~T7.g<v1@1 p AEl|ںIa5Qh0T%*9(mm²@Iռa.39˺ƴe֥&gJ >#kkKm}\D8uE?EÔU:u`Yĥ BYCuzqF6$0ImmM{KK#)d;r%ekp]_#ah!^h 6̕WC!f+**^(h48t"M$ s\c:ATxVBD8PɄl9*[YU&k՟T*i "[#4ۡۻ>$#yuo&xˆ4.gq$S {葦z4;BCHֲ%\)3-ٚԝtpLۡC鎨]`̟ @|q K%X 161KXyaG'VPJSq5aմQY lSe jveImE lme*<Ε5Ûf4X7k6ska'hɞ*b!{Sov<w ^\4IO]n"FÐ+͎W ҝ$3I YvG}C7Hx-:N6{mov% BdB.&KlV̴eC;bv m,lG~ q_Fwgn|+ ޷ BsBIV[^m%&vnvԨ*zbt-5uMĔ2>DZl{ܵU]usQ^>cuS]_wʿNyvz6j#B9N.eIuʎN Cc *TYUd:/0r I`O~sb/;xoVXNy'1m! ro@g#v$ǣz/@%0~ܪlfP rs'4sHvi N5ݏ)αbۛjQNx+Eqdᨹ83*XJّҺcGJʎ)[ҜZv,'8ӫW+ެ7%VJM+c˹9M[ճW>DpLj)n$cј[dUTo_q:k(0CYR4(5Pـ$EzoߓCdiNE olGSַ"/6 m~ r!ȟ4qP%ifAcB gX,-$$|`;b3F<co^t,р]ƪBbX3wg0D/v[w}__W>uiej%ErZϠ [R{C+2w*ʉ#"&̶ !xzh쇆?84CW;g@~D0$PLJAW 9=xbJD x폟HlqM> ٚY]{>rVD¹mK{s\ߩ1]t&Ay#~h' vpزRAo(6Y1*|u  p~=kZ!YSBV,i\&y^g4g> stream x]O10 b C 8QC_C;ɾ;,ڳK X&었EUq0N:txj w=|窬-4R> stream xcd`ab`dd N+ JM/I,f!Cԟ <<,{/݇3#cxZs~AeQfzF.THTpSJL//THKQS/ f*h)$f$))F(+k꡹ e``` f`0a`bdd)ҫ?^b<?~Ϊwabr9tef?\ؠ[򷒡zф䵱;li_&vo|/g}>r&o5.wfy҅?|]8w!r\,!> stream x]AnPD wo$`c0xۧ"F*{(^UOO//zkO?e棾_?nM?:>۸7o^[.w}|Ct>Nڜ4uWo\ϟCtE@X4c@PNE9QE9S֢DN  dO "ʬh 2 dHe 2Q D&*#De2T IP⇒ S&**&**&**?+Bf ,L ,L ,L $xv*Ytv𺘝̎b\8\4. 'G@%6ھsͻܾcWΞMpwEpFp4jن#+3Q`HJLHJLHJLHJL 1! s7dT=X{7Č',x8> stream xX `SU~ l/:.0EDdiݗto6M4ڦ[ot/:.eB@9(BUFGAG>27I-۾t{ws|&P^^^6)1i/x16>+%F3y'xKp ~>'"T6ږZ| O(8x粠yAKd$'Ť ]0h8 &MI Enu/eSm)z,MdmFfVL yoOx11)ekꜹ^0*X"|rS+MQ/PT85P[Uj5I=G-"5:j=B-B0qj#5D=EQQOS)JʟEP,J (oJDM~O͠)2azg綯^Ag2.wMZ=Co3Mє)co l[Ǟ>m4g`L`o? \2L9"rg Ww ,]EAQ/==1+a}h- hR4mP +6|7j ZLWCX:GDk|َ[5>):6q 8?Ac FcujË"hDO}uy٘|4\(YW*-\Yxvkio_+p*TZL^9wNoކX{2@JUZƜ{!}ߊ涢9}? O0륝FsC3j̭"J[|IZ{Lv"TƿC1p{ks,q?:E֗!~otnʪ?a:,PsY=N/BͰ*BQt3!E#bU<铡kD+ Fٱʫ8SΩk*c^ǝHQ ;' L ?=a}^k/:,%"/\xx_#4En l15C) S=43?|[iv*5>) CyLc*UCS]uH<_Jm*BG,W@N^I*p AIHf=4/\%XQS,,.?+;6A"h#Wjj-͵CJX`<̀_jǴj.LJ|\z6$qMt8KR> i4b{PުnD$|FE.1Nt@vwc94֬2W* ef+bcI#kѠމ AR&oi0LBkoxߤ@YN*is$ 6i_|<#G ՉMPO7nLQ芸+:oiG^$!"|R:Eg_hvw0xN~',z\+7=9l/[p$\1^!_~Q+kU=r蓌~|2žmiB Pe&Z >?gr8ڢJ1tn$0[xgV6°xr·3@88)ɐЃ\O]%x ޔ?<Oh3߹h'^ ZP~v9|9,-LuW\f-BiG=JBi&ͮ EJϫd}lw>hK[΢gx,zlNs+^v›o<'07˻Jx~["þB\[_)_L-diR e{t /69W_ybAFQQ`P*_T651׋2r ꌽEGWH.d,(lol1W TP DNp$(_ @^/&: [c TQˢg,XR˦:{w_C{ M)aT@d[rw;޿t\l-N-:?HRCs%Q>n ,ݮ^*T}2.P L7i;r +w8J?'Ysw$zm twzB,U )(E&:aPVJ{EBafVP3bs00O^ُϡwSqh\L΂[-mS_wﻫ?6 ;{ $05 Y%b.ڡi$rD6oFSb@O }K4^{g._ LM!AQn$ͷd0JvsNmg$$`#0*"6M$L1Vy59,kxlV*~UAsg#63\g$d^ޟ=r^S˙ckQ`Gb;?[% Z< i%[CJ Bd|ɽBpv#"W[B XI^%a<m;D>jUrn(5vH K\6G'̯%E">]&tvt,F1Bzq1CxȘ݋s㏄.msdM*-Cg'rM z^m+ eSRq=)w3cW$xR=d"y(oE?d}}gQgi}}~>) :m:L*̑Ty $+b͆!J#+XB^K>@^||0)ldN)3ג̏}G3P ~±UU]PqAK2gXW$-{sZJ+Hi|ws>eEp ,J)(A*}\ZVX6:c*Qo#o47tۥD"~qM!-~=n7dR[!MdMB8T$ssiJ],'Q,IZfR.,VP9%Rr',ɬ-!|56Brk59L+vYZ'|[4l v٘ƶ<у;VL edE0WЎI!p4~~C Ce`}endstream endobj 227 0 obj << /Filter /FlateDecode /Length 189 >> stream x]1 E{N DcИ"L ,Ƞ}US~v] /i2/X&5= >RrͲudE{w=Bՙ-d& sF8wUm핗R@gM,!"!ʌ'EB> stream x]qluǯ]w=]%k`Q2FhE&skͻcdݍvnn6X$s$&JTwLyy%/tZLѬop,jouO%qD(~9*CtuȾY ”mݺTg)71ok0Md11r09q6M 256l=c3a^ cr W`:]lInΡl_Z%T&Z:+&>jDkwSWXv̟SΕ =!Avf<xt#[潻Rɇ?ݒʷQ h%[.M1S}ַlԴzkCmZ-(7^g$*ɍh7Dz]}@&F. }/ݔPHbb+נB#ַ}jξ) IzA T=@(;wz)n*@gudzNcM1v: ި?c03H}8Y $͠ȓMƴBC^^H=x`.k>ͧpk Oy1HוŨ;GA|/eOz':# }+0I|]J9iI*8ir>^(dzGY@ADŘpb0 S_́n _wf|gU#(rwsr̕TJ%+~1p2{}%odf>} =1|WU*3<DAzd`ȎA<'``endstream endobj 229 0 obj << /Filter /FlateDecode /Length 162 >> stream x]O10 b C 8QC_Ct;,:K X&׈#ME8L+go:?`3]$ҔUZF'mUu 6l@UJh.q\c$Nii 83 6SCendstream endobj 230 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 279 >> stream xcd`ab`dd M34 JM/I,f!Cܬ<<,{7 }_1<9(3=DXWHZ*$U*8)x%&ggg*$(x)34R3sBR#B]܃C50\``````(a`bdd?3qG߷0~բxy؜u̙[r| 87mBU\XBy8L;ódKމ}}}&20fTendstream endobj 231 0 obj << /Filter /FlateDecode /Length 161 >> stream x]O10 .. 2D! }I.|D/J`H_#49U a:X8 d z&KYU{%hy"*յvIG`]R?%Λkĩ4-Mr{&SA|^Sendstream endobj 232 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 384 >> stream xcd`ab`dd M̳uIf!CGnn} }M1<%9(3=DXWHZ*$U*8)x%&ggg*$(x)34R3sBR#B]܃C5P\000030(0012L?)O˾.lb^% ].).,9b}S{{ Dl^,'̱jVM]y\ё ee‡ uR;.鞼Pn{ܽl4L[!kˎO0{p}b \3iR<<&8or< Wendstream endobj 233 0 obj << /Filter /FlateDecode /Length 2714 >> stream xZKsF7%Í3J!kK\#1S^hD$!x,'-D3=ߏqFGG>?_LcMƳBƔ ruMuy9e=L91~kx[ jqS$FDg%v]."9w y,Q Q<>;~5x݌ jr5BqN ȐʜfRvO6zpsL3-vծL4bh9zvW,n~6`%,0hkt~[% sPzW[+ %^3?(^..9".yiwE]-Afd7$(ڏQ:St,YF$1\4_:ƇQuCTJ{%1ԡK/fL)O <\d0gpP(#şחΞȁ]9/wK`])_-[U[мT=D?ڝנ|b` ϛ (+ģ.`dJOSzHd['zU4ON0=o\yHAIb|Qn~/6+ b]~|9G_[/н/!ﻭ=>zbR\}0jk0$Qo^nrqқE'$j9jJb+_y]y\U:&c$I aJi`$1 ("BX$8WgcsP~tO܁V,-E'{*M@נĎc9X=G\g@ @77CPpOWHvƄQp'S T5ܩhP4={ӌ "u$![(37̚Dul0`]r=4w":{$n RnHX LXuKAڶpF<2%v.\T]TII5~)LnA#dHd `4 \4a+xjRE]&BW Y+fww{EDo_> Jt=jodg]hJtc2}ÈL--p oTn258E X%ׇڞ(vJtyRo_k Se=@(1c_.\GF:* k))WL Z[f'&fV#馺)`5~1)mSZ~V, )߆c78(k0 %<`ȥBD:^Ry*b۪`آrR(xB`BECf9EVl Lowhj`J&.A?K"HPviΑz)LX:wR/ (T\'qzOendstream endobj 234 0 obj << /Filter /FlateDecode /Length 162 >> stream x]O10 U%BVUAp$@w}wYvg@>%M/ 0Sat@vz"OzCsHQHQmm`wg}n Z9%Gs&#q*MK\1 >_2S7endstream endobj 235 0 obj << /Filter /FlateDecode /Length 300 >> stream x]An@ E9 l7aѪj{d,D!,z~袋g[SϧsP~,S5 cM%i2梪C?i^ӵ?4gݐCi6I6_8(aBszgkĈ ābĈ ݈@'FT(ɛɚ ͍8t+tk3݋ݛv@;$4@{SlCFm7"ۈ4FPe̖=3[fF^lā)gf˞՞v|!ݗEG-Ǭym*vIendstream endobj 236 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2211 >> stream xU PWafzZAAQ\{J4ѨRF9<5 30"p2܃0,&]6hˠqZFW$Uz0Z;5UI(%HkԚ"mfq8E!6/Ad'/p#`#uɖ4Ę=:\/y*NBOhPlU29?,.AX - Bu")oUiQ CwFrl*[BgjP\l2]+OWXP$ |hS]]IANSd>m}@f[VY7'O+QOT?.pK9Lg d_WP@:{rvlͻ|nWDmXa'Ђ+Z jR1˱c&vNOg dOS /z]ˑق+χTDL'h^cg#{O~T'@Gӎ5< jz]Φ X'x5)<pg2#"fي9dd-{Ϥ~>{ μτ~}s`t]Y7B,0EFY 뒂Cv,òa~`h&5$1=ͪ^\We=s]e/G[Y[L'K%b%ώ34ZPD:a`ض=;Aנ𶎮'ȿ֕D!'tAcG ;hS鋼=%}5jϕO $xk?_I4ȱ:=aW"8:os37 zE;Ao-/ Y6 ];Q]-#6Ղ^|b:M٪Ai45p _OClͻ1ym6\HkJb"T.<^RZL v:"XN!rU#t1g!-P#ى5."Fhµ/70K\_,pґŠRT V"@(ge"}1W>8(@|mSӴ1MM_OG'c 0iHy=6OLG4ҿ@fbd9xbGixGo%sҕA_>x(\q-@O+0F퓊̲a-Fт tҵ#`xt",gxM~ )Q3E;J2ry- B_WĤ˝ܨ݂{g~ ILF7nr܍ǎH?Cx Y4b1-CDT,k> stream xZY~< Ě6f+C6X^ A̮597Rc%#@ :znsm6~ˆڷ[mzɕM[F%ɵjr{l~̾sEr\J#";\$=>PEV\FN1,j:3#F]?ɺ-x~[\*l2Jw?oBKR(e_Z+!%N򂹹?fWN 4{;}=Z+` LueExnILHD6AIXv~}9Jg5e?s?.^YLN4RÞX(_;&a2t]S&KVJF֗ \g c)*;7qwTvs%/k[ fq;*(y^(Rl) sعk/Lϙ;Uu8 BfMvLf\犦3D "GJY4Ip):d`iI`4h0 D cD O5ah$Lo[tfp^q7p-UԅK, p.ry$jq/n#Ss.dAxp5l;i{n<`%62,Vf܃kvdFa"uMI;f #nI0um5S@ǩ)Jm]YU'՟|S+@~w:$(!4A!a AGrtS7*[HHNU㼕dǪO sUWM|z_^o8b$:!f u!,X4LoUחnXOztA(_e鎪m ڄ&\f!(Et&SI_WֶvO]5K;UmWcox18Ls\VZr;W^dS݊P?T6ަ o3O.(;/iaGsOISld`|_}{M{qz*aG ٳYX>6ˍ&nz/UHЛ`ˆ*f+EluJ~ nlwJ3!UG?Y nU+3DS8EvX+@3KDWTfBQ*'Grthg^ʰT6Mٽ!B$喷6rK69r4W"P,)R$%NvW]EoB|`712HAX']#}սVGNkAH a,B,%ɩB!X'Wԓq3fRHj;vMl%NS |Hx0nr:qy٫'Dk[2(&rAR@8`0BBmvxU4$(n=*-z*yÎOHY'#}ѠT.*H`$wL9ė]BQsoӡF%-;( ӌE}d:ñS%nH!<f`HLP *qY ˜{"gټRJF/64QF (Cf{1-X@RY{=Igl -.HVY^oYKH;'MOXznLVzr~MxܓŒIAZdB >t߮mpz N}M@{ ƀ2{_{h_czb|>mv03 ^%sMtQmPbٰ(}` e8vǷN4Xv{G؜ 7*(OD XwL/7U7i\} ǭly3~Z%'a z_׫ux[=$ɴ{59~jV}GOCڽb^q6$\OdҝxMSecɖ)b#b}%yH䪩V9 Z? ;OWLZ5Am*e 1A3Dkd3p8 0&aNbA1KRO7nC_;TMtpR: sWi|Ye!gEOtNVVS.B!8~uCZ^ B${طNOU "o[nfy2@SU_s]xy> stream x];nPD{;?kE (Pa»N9yx|^n~[{^߮\S}M?e}&=ik?V[A=Zh.mOKm]Wsi'N?膮Ksܯ]x*:\t3Rt c-:x.:D,;:<CCǢC{yΈ> stream xzxT "H 4EiN(  N2Y[$ P ]Q삨9|{x?{><=}k}ߵpC3v]1/.)) *",f :yjfyn0 :q:y=Mp9߰uq aI-\x|i.9 (26512bZ@L -=61#6fZ`Hx@Ti!{ܵ{چ]^>;vYc=7Akb[>3 I7lN ؒ5=h[a;wE>'S/xaዋl= ‹xA$f;],b71&<bx%{^>dϐg'h[B5QE#|(HgCxh; orBdg9sYE lPf)q\ܜ@ ,զJl =+xeSSIiAs-/Pzje*jRB 2emF- z4K +O_ʶCHaȃPmh?+19+s;יț;p樁 (B*7Ȼ 4fah؏t_s,by|G@Fn[6D;Ͽ,;bEhZjtCy /ӣ2u h חO|v;km_lgFzxdpfw56I7_/*B?igC EW%U¤!1Tc)Eѱ9!@[Tş!Nj t4;hs= F֓hBc >!p TLr09JSV2Pl?@nwx%ցkFBDgsrS5 f-e ħulJ.`ߑ3O7`G Rw `Qh bj0. VF@m ngnl ~.l1Xء ͅB]Tjxز; q8TRJ;mkPS盨McXEђZ˞2/[}H#|Su6 hwv/g=ܡ)Q&G͟zZq`:3~ Kzb%(@t k:`%o&>'p(jrU\ȒiwyzC W4* .;XUZnx3ʃooݳh8e5N/C łsw.u_s~9##072 e7+qniBM$f&UE- Ysh?iS! Q{BQ TP(5<\m_;Yqw=vPc)u G;O)M UvC_mo 7TK|9KsFtQacꎶkoc5F^$*B.T0gdefg;?A7Ԡ/LDm0dd*UhZ:zL T=nD&ct5B9gon:e#SFŽ/8Ը3vS#݈)i37,/"T#AO>;gvP!t9FKvq9XM&YPjך% StTP!5y@آƨ(&3x}Nto[[?/UD-opzU,WrԚ@$9[ѫM'0P?^5rʿy`wq~Wh-rY1c 3 bȠ dP({}7ӣ+1@z !9~JXJw5=Zpαsą/Qл4j(AWLwMH@Pz wr˿cV~CH*ddZdѳ̵',lv#&_hvclB}~{|e#!BM)ZRCz^LXM ;aNo@ȥYwh('|&E>g ZoCӘWiԤ6_]28;zwZ~Ek0x F3ؖ쳳XO.S?N?]^;Z ֊A$W;Wq7LG˟Al.}0 MEQ(JFRjq>,c{nfvrB4M}p@~|Ӌ"2l2i4r;'6`s<="pN;1BBC6RD_-7P"GdA.iEEJ(#̄pPQ#es^eVRSQ\Y-&B*\[\UUD=[e9+3i7</"zơ)C5|H͚r('.͎JĴBvσ;S̝6׹E7RR*QRIbC!Њ)h[jj2)2wyh"ېPf&Cf_zN `dj%HpTаߞ_ɎĜHohh=&/(N\ãщ'd9֣Jl%V-Վ G՚҆7Px"َz֎81ͤ%ΰoF!;[%QP#1E+jjZ[r8~|o)q]xX-tcOw}!wL:"O !߶b?yL(>>1692֛4FiWdї~&zkPL\!P]S]p^iEoTΏ`y }B(C=!rL33ui5L8<\Rh Z:p ¥؄P'ioHphզ2MDQFī$dJ%t{4:9T*Q;T2cX=׾'6("),$*&CpEWB_bfi_6D)Q)'Zc1QKAϕ3@bh#:f qm~Do}fZ+BAWtn=lɠ6PU[/$U( A[X]wZxnpl -f_up:Hט:_6uarMx^ /[%iv;l9Q>hu:j)FTwd#2w\ƼŘgA?}V 3t̚ Yt/4 tPMf]5M( 6܁cdіj~ɾYA?t]9fڿxip(0֪PE,/w=AocmމHH\;h˳ "3tXbv;_AW/q8v-V׽|yQ`,& =w|p^_ #>:tnȶ[xG pI0/\LJˆ u:Y+UcaИ: IJUՙ̥2$$S.#4VеB;D-o(ߎ᫮GpeѲUolԅQ ºTu~-{ >zs뱂ۜj?q44)[* r2! ='W_{ځFu-g[cL~@5\ңUVAu;M%ЁS7nڱ1Il_k|H|j;r֌ᶘΦnȑ:BJ)0 ""1Hm{]uvCd`5A ]˳(Wyzѱo$>W]^ Ed8i+}I;/;5ZD~vg՛\FJp1T'ڪj*l-X6I xW_BRhT?q0`KLT+ȱRJطU U+3jF#u[:p)A;Co/S}Ua6~VWQ]+}ӗhS HU)LdN7L>29(TVjOhP AQh!wzWtD=#Rj.hU:zqKJbce%P ؕ*M i0$JM:Ϡk맱;Tqz| .АאZ#57&d;3gZ)X:ľJ#JUğ fP]I/ʵC[|tԚ –CW?__JHA2mvff5]2L\v";`=ءh؅.?=pEN괭' ť1a{:.gvQE 't/3–z4ʷ_{2'0&Xę4o2gc~EfY,5~GDTdTRqjm1̒~(@n\fs$\vP(JJ % Y'Ph$>]nF󺹨`k:shyf Bb\mհ%;z4aZjcB :!> ?hmSMR%a DbSNa)b oWSao-NVHtjɠ1W.Hj|MB/SM7$m`"JröTHeVm6{..)9roOfmvdYG70X*Wy%eۖV\hP$KKWVێR:+JyFR#zǎnתu_JtQZJߍBƔz 7J<endstream endobj 240 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 325 >> stream xcd`ab`ddI+14 JM/I,ɨf!CO&nnw }/=[1<9(3=DXWHZ*$U*8)x%&ggg*$(x)34R3sBR#B]܃C5: E4$83/='UؐQ ,Ə ktstW4ty5{w7m^=y]߂ީL?4@侩=9pvZ4\XBy87ΞO9;g'.kendstream endobj 241 0 obj << /Filter /FlateDecode /Length 2383 >> stream xY[o~S~h9Ɏ"$MH6nA XvflOvfHrE"n(P<<7~|/<(rD[f__}q.q$ӹ#4l~3L.T4L :zCΗERQU(r7g^\gR?]|bh(Ɍҋ9/YsC c vwέ22FLHdrLB1wv\ SNmϧij2e3-IpTݦSQ2ԡ+EF-(Nꦛ/$֒p~I|G唓q(.;"_W׽à0 V"v߬MS7丫kvssXLլf4 gCSYuqRpt*XB~vuQ+%ld' Σ*h"Ϊ]\+NSA߄IhXļA?A ko9j~\3Ы|u~Y] m }gYfuI7Ecx JrȈKr!z9? & 3Y>LRRnrLVNBr.hM&B+@dzG=^ !71 Gp`.~G9PVn (Caf4mPp8f̥oF Vz{HXUTv}A!4(E|> ӴXQ$&]A>4\k(H}L4ʐ% )>B$-xk4( %1+ROT8QZ"NIӾM:|%f5 R+iGȌh~{i!;\bb0u^ Sz@MtT؎p!R=L:,NUQpC nak~Le(=_74FP2@Z@<2O{5i3dg'@}uYhT@hNMSߣ>+NFveC 8'b\8ǀ܅ Yq@!.&cDA]|/| jwsHDBǽ(0D*ǴBDx[Yb =ZyJAg+gR}t *BF7tKs'n)T1DTc7n$oR@jFN3?JPMJ:騫F@xEq8B-9aLDYfŸ́>{R@l7 @׮"/1 1@ d ^8ɣ#}YyPWr¿8^k:aƲޯ]&ÙPoO y4tFտ됵cԍ-ȱT<7߽s$vm&ݦsD0 Ǹ07h/L=#~:@a.+SA77V#(a_SܛTmc`ؙ,h~Lz:0/A5$|uG etZ?%"%?>M8ʢ.wE9լۆn*E+xTM@& ]F7\;QblD)T&JunP_{0MF"K`?I67bզ=]܊¶=/(nd":MTnRWe½]e. /\!!.Ѭxs<E;{nE^kl SE*KKwA܂NFҢjb__uf(2-sPgCoKMmSpst⿏JlC9nCm 98 ϧbendstream endobj 242 0 obj << /Filter /FlateDecode /Length 4372 >> stream xZMsܸ9$0a"Ynbwr6lԈq=3%)+Hw׉T*!ݯ_7,M,?9IgO8:ٕ_Csl(_qp i&&qx[|=2F ax}G{sm,<ª]h4PN-mC=Yg+hC\$(sltֱ{&k-VDm :YHBp] r0<("ݬXmgSӪ( Ō-'1 Mu9C=Nrq)04Sɺ"(&Q|9]<05dahCF_~XE.qv?uDV}4S R75I\}H}G5)ICEWma##@`;[ɛf`YRFy dH.D߁KdoI$úO9զB$Da6jAɬ2 QhDЪrV5r (k`βeo Z!Iķ |re l-FIqГg#ZTkiAo~r@OxaO'(GpqcJ`DQCA@.ڧ]YF).@n0 L`߆:E CO͇B88 $"l]FQz.ڽ G7t$NiԹYLE ‚E #r'w9ū#|;5 jHKuRG: ! [ ,>w}xt+6e5+4pTKݺ&X`t JզUܼinb9dp/ͪe` aD v`u?^w>]4}\^E)P"ްю(gl ΈñEz<i}]SLr Dmd\i߆N‘Mߓ168=9B5cCM)jTCD9]O{bw`w3T#T] c%)6HE6Q$ΪCAFsHۏ=SCsTcu# ܠr4Q܌g,JOL$C*TbYr=U/ @"+`O \Uq_ie "ݞ)'))# Hann8a\Sۦnf1v_sXL 朓=J&uhP_XdvT?HҒ[F v^51\ǜC CA`x=sF$a$>te;`Rj"JSm]}Mȸ:z$*1خX-Veraif҂`-?9<|sKLhZٗ˕1aSȀ}C#j/ٟ9 6ҎQR%OT "h(4Z){6 w/@M% medm}\/JǬ쎨05%Gb7?Ce7m؂ӕ@-ڋ)bu`':d|YպRݓoy%h;6Cz&wsqڛ_o12}Xf!DrW?7<0]117Yk{!VRtg mߟ&i2CeVSItz Q~\h)"!RkQTƨ} {/@ o&1@FG'(V̿hjtƅuV.5#\nmW@GhϫDY km%2ޗa{_VŲտb*E白wPrLQ{t=8Iy8?G $3L(88 vX5|D9ޢ@-?㩥/|f|>BA\kvͩTQ,]8-4s`pؕ?P`,-nƝgk;Zp^g: O8*&>Oi$fB&4bc,(ˤ./]X <#LgzYdgu~@/ U`_bܛH# BDXsTI @Gsk&mu9d&,/-"%fbO;8 ߔz#5:+_*aD(<@%jnݭ@Wso(f@8 l\k# ?Gvk V#CnS٤gCB|K_C.-_j{$˅ ]ԟ谉M$w=']apS,f:KMX2š]Y6?$/-w8[8 *"I 3?x iL3{B*ׂ0VY1۰ )t q$ @LjP&QuSS_La yT3HC<9=KsPr(рQKxjRҧ;mbRGV(1U0*{O8'Vendstream endobj 243 0 obj << /Filter /FlateDecode /Length 3930 >> stream x[Ks7=){-` &َ׎8얽Q4a#;H 5dKQG_ AAN>8}Ao< /.| ]dNl{R5 wY[tgNYN, Ny2[c8֪my 6ge5"s`-cM9O3_W^Bu.T&sBbNv/Gvv]3k ~~֨pq]Je$5’cOpf9We¥Qa.9?̆&Z8FT"XZn5,\Y[vXE# 1 wISގ^Z;k9o=XSV7g{k yNZ{^b`\i2IcŮmX`a97޸HGƅ:Tm9ږ>\_9U!/ +c ;x,\.'XgX[cY &c$ SCEӠ2]bJ3Zͪ!kÂQ(#M 4j *Iq*jhu(ǿglv. Ѫ"$mTh;΢4VPIbZzeW7%ta brH x,$9׸M~Q"f\hFƋE@螝! O&:QT+ Fj4"%|=^lq,o*4O5sG&Tù m:wYl?bzTF1} 4vySJmQ)2Inr lģXl:-f?ʲ[ "mSs0,& t@ LC\t.zajq:r9,.) ɺ$;(Ntę_Ǥ( m2^3̘bi'&`SŠ+s,,?\O2?'462e)&eu p' !(kFb]*, KF LPb#_H X ЈAV.xWFG5ǛPTtL%z QxG ]0޽~ظJزfJjE?xvLىr-ͬ<`0`\B0G^XAˌ w>XOoV{CѪr>h'b5K-* Ֆ^uWgcewaaSM1!!`볋D%- [G-<ڰUZxo'B+tfxOp W [O~83``D5{N5¶#W::+@.H0'N+ 3^;28fr`OP!-XD_o3$oK$GI}(L=͗P(TWq[n ͫlGźab-W{Ӭ[m}pqH%е LDm6M{*EQ crᘣH0I e0~x@).` $#MrUs0L/.*6&i6醿Ȥ3D˜<]|k4gҚ3j,z ,}tgГ fexTl):;T$ZT:ȺvfZypp5 R.5 G 2%ȴ78"gXI0lrrw\˶lrR6v2>o&i{o~=Fk(/r-NbY^a: hty˪EG)ϰ `F"@ W4Zӱ[P *,"R;]F`&&j(.Vz"x^EP%Q.km>5RM 7X:{ @Daww_.ͩz<# OB~<0l˽&lw |J4Tt5UC1d>-TqŜ%۪"xޯu,_[qmrJvT;.H6|_('-;96'6cb2xAN0"/KEn+X_Ub;rۆ'eu 4XX'rz"{^M{R-;o_w!V\{io L0uF(dfu|crD\INbm eE),W JUZc#< UqnW5O *zpFs5-!uQ@Vu YIΓ(SܠpFb(#x%܂%ZvT>T6Ө~AeGzU[۳VP`.|7 lI=-StBxC+ȯy*85z (Ɉtήv|_*1> )YMBB8rͭW7[("'[_ m2#排)$8%6'qT6>7ʿ64: ֩)XYLMQ;' mEqOlQrj1tM"u4i$Ҁkg9AP*e(,|\7\#$:ZVb AL^ |C,p4{N.`P:]:|n+ eGKbv\7zVv~RtLSK< לZF&;MQܬeUg4 # gWNo*gx*fW\ -NWW"m;mreQ=}lfs?3flcM'RI"d1endstream endobj 244 0 obj << /Filter /FlateDecode /Length 3676 >> stream xZM{6zG6E|i'uTv>A>\N;3$'"΀rX˃8:],de^X>(tR;ll2XT0lv\ Gyk˭fײyu8 :GJ,%;ɧywE-3t3_Bn4VwOg] ν]Ӌ"ӅYl96 /X,ಙvʽB7{3ʸ>ys͎WM xEΆXRw\7̻v$ͬ.{=^vU#DžH"+yvE3(ºͼd9aht[`1Җ9 _ { [5/Np3mW'X…Cձ4׵sƈ"16n80J+UkskX(#.3JA {59A==; 4j.wE66 Q-0cW]wǓd]j^6wElu1^Ly;1 P(D@]u9YbQ9@UXH E7FB 'шy [[Wy/ P>z)sA}^V@/7Ԇ7hܬ؏yĹ`8_1ېIsy 1_j/3P̪zk)A9>2SiAGaO㵇쳨&aQ ZKI-s76+&{d=[V-_~\*g瀱@p?E:P]!E? KTV-ą‹!NaA_30o``ZHω{eY! ǁ!PGqDYQy  E*/%a87(POTt&hBHeb_'a~6WMj\K)-͆\ߐQ({24V@xy'u3Ԝre.:̑ ,>):(c4PjqsK+9(0pn,ڙ*^y)m5mݹ;;ș#$?K ~j&03y:Ud7cCyA"AisTYj҇ib_H rdĆ%+ (/ݦ 0yNGb:Wg*7ְޢZOn"^vZP]SG k~R:܅{;ٟM.8ndaSb ZO$#ŝ $p ;1>q$s#9= (Km^ř40p.0E),) pFY\ -\-}s:{5w,v>Ll !Û 4`ϟ;eG2/') of5h;[Rpe-#a(kf˪ۈ/NWܘLb!QStogku/˒ sS&F' 7x`ؓGa]]O%<2 ;eyзÄ*F\%=$if-WrJzE7}T~s'hQTtNᜒ/ܶmDHv]LX? xJGFk8]/i|ϦS)4E$ MYrɒl4yo6BEaLP}6I~@<PzS19途)Q01CcYAF2][aE3cV\n'~yo$_ J=]J@I0[2(mMsN_ZxԏNӟ"-SCy?hyHaz 4՝pR&hCcկbםe#h7 {snWo͌N9.8^u5bN9KtPs"6-[@b%?s֪j8F~(,tJaK=R͊5_O M~゙aڶsٶv/{07PYC\?ݜݴ#f9M_&k, M;bҲd%=gqӳl#ֲ*p|l@&I!xwƞ5Y!eK/:VC"+HYD+ L6*(lcqoju2; N|{ e5`7]/!e'56ho;g3~;hYq'Mm5}(L_BZ.xtNB=J2MӱgqtEs䝒Jn+_\Oպm P-*>f/ϔ0p"^dn|ZjyQ'ǡ_-qe*kz-Q*;SΕj_Yy !\ԱWjZ@޼GxL[Epfwz<3eJ1 1JPr}EEs&_Ga`J^)2Ӱ;t(Sq1&Vcj]-cה,wGِˡ ]a$x9{.p~XIOCR_J'7&1'1>]7AyW!ɚd)LC ǎ UG,>qP2$6GtHĞx&`zWΓS;Wd> 1#ǫ[i@.x}xg?cőىFBx8x1$34u ݩQ1?c<|7\d/^>zU便swiEuF[xEY a# ,?a@Ŗy[Fz<>^fm}G0fkNwǹ=#ًwEScƪ%I6 N;q%6`8{̈^-0R "{s6} 09J qZ~zM)O^O%eJvJ"/y$ˁ4i 8o\))m^lwE.OAG׾aHſK*&7$!XӐA򼌷+jTۗ.?YnR(˔2 6U"}6y(Lg'–6 0<@kI'G^^WŴ5?wV?g9l~wVśr+'9ό 3@|W 9.V?endstream endobj 245 0 obj << /Filter /FlateDecode /Length 528 >> stream xTMo0 W(B}K9 úkRiqj;yc?R9[vĤ,~@yWĆS<=j?! s(2 mDzB `}rZ<0p HXf%S|V/FD84<S' Xo8G1J+o.}DDhdgDK(T(j+D']D&ektm %+̮q7kv5n)hФ?$P,ҕpSètc혍M-(sep28T6đeMފP O*~ 9%q ɗf;%oӂ/WUۻl7{W^LwEO%RC3􈀪aۻvq*Pkx] mZyoGcJRŀm~ߵ:|z)}sbj^- ?߰BSendstream endobj 246 0 obj << /Type /XRef /Length 248 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 247 /ID [<685286d4f8c36da92b5ffc88f1b7bf0f><98f8cbc9cda10250df86f88378991cbc>] >> stream xcb&F~0 $8JX BˀlvPjyh4Ӊr [BfHS)rD ƃHdD B`rd b3lG)"EH RXDX*`5A .`30?%`6dy f3Gz< , , L( g fHoH'H ׼M`5]`eH.pH ƁBe` }c0 endstream endobj startxref 156039 %%EOF Rcpp/vignettes/Rcpp-jss-2011.Rnw0000644000176200001440000000044513555555203015753 0ustar liggesusers\documentclass{article} \usepackage{pdfpages} %\VignetteIndexEntry{Rcpp-JSS-2011} %\VignetteKeywords{Rcpp, foreign function interface, .Call, C++, R} %\VignettePackage{Rcpp} %\VignetteEncoding{UTF-8} \begin{document} \includepdf[pages=-, fitpaper=true]{pdf/Rcpp-jss-2011.pdf} \end{document} Rcpp/vignettes/Rcpp-quickref.Rnw0000644000176200001440000000041313555555203016377 0ustar liggesusers\documentclass{article} \usepackage{pdfpages} %\VignetteIndexEntry{Rcpp-quickref} %\VignetteKeywords{Rcpp, quickref, R, Cpp} %\VignettePackage{Rcpp} %\VignetteEncoding{UTF-8} \begin{document} \includepdf[pages=-, fitpaper=true]{pdf/Rcpp-quickref.pdf} \end{document} Rcpp/vignettes/Rcpp-introduction.Rnw0000644000176200001440000000041213555555203017306 0ustar liggesusers\documentclass{article} \usepackage{pdfpages} %\VignetteIndexEntry{Rcpp-introduction} %\VignetteKeywords{Rcpp, R, Cpp} %\VignettePackage{Rcpp} %\VignetteEncoding{UTF-8} \begin{document} \includepdf[pages=-, fitpaper=true]{pdf/Rcpp-introduction.pdf} \end{document} Rcpp/vignettes/Rcpp-extending.Rnw0000644000176200001440000000041613555555203016556 0ustar liggesusers\documentclass{article} \usepackage{pdfpages} %\VignetteIndexEntry{Rcpp-extending} %\VignetteKeywords{Rcpp, extending, R, Cpp} %\VignettePackage{Rcpp} %\VignetteEncoding{UTF-8} \begin{document} \includepdf[pages=-, fitpaper=true]{pdf/Rcpp-extending.pdf} \end{document} Rcpp/vignettes/Rcpp-libraries.Rnw0000644000176200001440000000041514070703457016543 0ustar liggesusers\documentclass{article} \usepackage{pdfpages} %\VignetteIndexEntry{Rcpp-libraries} %\VignetteKeywords{Rcpp, Package, Library} %\VignettePackage{Rcpp} %\VignetteEncoding{UTF-8} \begin{document} \includepdf[pages=-, fitpaper=true]{pdf/Rcpp-libraries.pdf} \end{document} Rcpp/vignettes/Rcpp-modules.Rnw0000644000176200001440000000041013555555203016233 0ustar liggesusers\documentclass{article} \usepackage{pdfpages} %\VignetteIndexEntry{Rcpp-modules} %\VignetteKeywords{Rcpp, modules, R, Cpp} %\VignettePackage{Rcpp} %\VignetteEncoding{UTF-8} \begin{document} \includepdf[pages=-, fitpaper=true]{pdf/Rcpp-modules.pdf} \end{document} Rcpp/vignettes/Rcpp-attributes.Rnw0000644000176200001440000000042113555555203016753 0ustar liggesusers\documentclass{article} \usepackage{pdfpages} %\VignetteIndexEntry{Rcpp-attributes} %\VignetteKeywords{Rcpp, attributes, R, Cpp} %\VignettePackage{Rcpp} %\VignetteEncoding{UTF-8} \begin{document} \includepdf[pages=-, fitpaper=true]{pdf/Rcpp-attributes.pdf} \end{document} Rcpp/src/0000755000176200001440000000000015030755600011746 5ustar liggesusersRcpp/src/module.cpp0000644000176200001440000001554514070703457013757 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // Module.cpp: Rcpp R/C++ interface class library -- Rcpp modules // // Copyright (C) 2010 - 2017 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #define COMPILING_RCPP #include #include "internal.h" typedef Rcpp::XPtr XP_Module; typedef Rcpp::XPtr XP_Class; typedef Rcpp::XPtr XP_Function; RCPP_FUN_1(bool, Class__has_default_constructor, XP_Class cl) { return cl->has_default_constructor(); } RCPP_FUN_2(SEXP, Module__get_function, XP_Module module, std::string fun) { return module->get_function(fun); } RCPP_FUN_2(bool, Class__has_method, XP_Class cl, std::string m) { // #nocov start return cl->has_method(m); } RCPP_FUN_2(bool, Class__has_property, XP_Class cl, std::string m) { return cl->has_property(m); } RCPP_FUN_1(std::string, Class__name, XP_Class cl) { return cl->name; } RCPP_FUN_2(bool, Module__has_function, XP_Module module, std::string met) { return module->has_function(met); } RCPP_FUN_2(bool, Module__has_class, XP_Module module, std::string cl) { return module->has_class(cl); } // #nocov end RCPP_FUN_2(Rcpp::CppClass, Module__get_class, XP_Module module, std::string cl) { return module->get_class(cl); } RCPP_FUN_1(bool, CppObject__needs_init, SEXP xp) { // #nocov start return R_ExternalPtrAddr(xp) == 0; } RCPP_FUN_1(Rcpp::CharacterVector, CppClass__methods, XP_Class cl) { return cl->method_names(); } RCPP_FUN_1(Rcpp::CharacterVector, CppClass__properties, XP_Class cl) { return cl->property_names(); } RCPP_FUN_1(Rcpp::List, CppClass__property_classes, XP_Class cl) { return cl->property_classes(); } RCPP_FUN_1(Rcpp::IntegerVector, CppClass__methods_arity, XP_Class cl) { return cl->methods_arity(); } RCPP_FUN_1(Rcpp::LogicalVector, CppClass__methods_voidness, XP_Class cl) { return cl->methods_voidness(); } RCPP_FUN_2(bool, CppClass__property_is_readonly, XP_Class cl, std::string p) { return cl->property_is_readonly(p); } RCPP_FUN_2(std::string, CppClass__property_class, XP_Class cl, std::string p) { return cl->property_class(p); } RCPP_FUN_1(Rcpp::IntegerVector, Module__functions_arity, XP_Module module) { return module-> functions_arity(); } // #nocov end RCPP_FUN_1(Rcpp::CharacterVector, Module__functions_names, XP_Module module) { return module-> functions_names(); } RCPP_FUN_1(std::string, Module__name, XP_Module module) { // #nocov start return module->name; } // #nocov end RCPP_FUN_1(Rcpp::List, Module__classes_info, XP_Module module) { return module->classes_info(); } RCPP_FUN_1(Rcpp::CharacterVector, Module__complete, XP_Module module) { // #nocov start return module->complete(); } RCPP_FUN_1(Rcpp::CharacterVector, CppClass__complete, XP_Class cl) { return cl->complete(); } // these operate directly on the external pointers, rather than // looking up the property in the map // #nocov end RCPP_FUN_3(SEXP, CppField__get, XP_Class cl, SEXP field_xp, SEXP obj) { return cl->getProperty(field_xp, obj); } RCPP_FUN_4(SEXP, CppField__set, XP_Class cl, SEXP field_xp, SEXP obj, SEXP value) { cl->setProperty(field_xp, obj, value); return R_NilValue; } RCPP_FUN_2(SEXP, CppObject__finalize, XP_Class cl, SEXP obj) { cl->run_finalizer(obj); return R_NilValue; } // .External functions SEXP InternalFunction_invoke(SEXP args) { BEGIN_RCPP SEXP p = CDR(args); XP_Function fun(CAR(p)); p = CDR(p); UNPACK_EXTERNAL_ARGS(cargs,p) return fun->operator()(cargs); END_RCPP } SEXP Module__invoke(SEXP args) { // #nocov start BEGIN_RCPP SEXP p = CDR(args); XP_Module module(CAR(p)); p = CDR(p); std::string fun = Rcpp::as(CAR(p)); p = CDR(p); UNPACK_EXTERNAL_ARGS(cargs,p) return module->invoke(fun, cargs, nargs); END_RCPP } // #nocov end SEXP class__newInstance(SEXP args) { SEXP p = CDR(args); XP_Module module(CAR(p)); p = CDR(p); XP_Class clazz(CAR(p)); p = CDR(p); UNPACK_EXTERNAL_ARGS(cargs,p) return clazz->newInstance(cargs, nargs); } // relies on being set in .onLoad() SEXP rcpp_dummy_pointer = R_NilValue; #define CHECK_DUMMY_OBJ(p) if (p == rcpp_dummy_pointer) throw Rcpp::not_initialized() SEXP class__dummyInstance(SEXP args) { SEXP p; if (args == R_NilValue) { return rcpp_dummy_pointer; // #nocov } p = CDR(args); if (p != R_NilValue) { rcpp_dummy_pointer = CAR(p); } return rcpp_dummy_pointer; } SEXP CppMethod__invoke(SEXP args) { // #nocov start SEXP p = CDR(args); // the external pointer to the class XP_Class clazz(CAR(p)); p = CDR(p); // the external pointer to the method SEXP met = CAR(p); p = CDR(p); // the external pointer to the object SEXP obj = CAR(p); p = CDR(p); CHECK_DUMMY_OBJ(obj); // additional arguments, processed the same way as .Call does UNPACK_EXTERNAL_ARGS(cargs,p) return clazz->invoke(met, obj, cargs, nargs); } // #nocov end SEXP CppMethod__invoke_void(SEXP args) { SEXP p = CDR(args); // the external pointer to the class XP_Class clazz(CAR(p)); p = CDR(p); // the external pointer to the method SEXP met = CAR(p); p = CDR(p); // the external pointer to the object SEXP obj = CAR(p); p = CDR(p); CHECK_DUMMY_OBJ(obj); // additional arguments, processed the same way as .Call does UNPACK_EXTERNAL_ARGS(cargs,p) clazz->invoke_void(met, obj, cargs, nargs); return R_NilValue; } SEXP CppMethod__invoke_notvoid(SEXP args) { SEXP p = CDR(args); // the external pointer to the class XP_Class clazz(CAR(p)); p = CDR(p); // the external pointer to the method SEXP met = CAR(p); p = CDR(p); // the external pointer to the object SEXP obj = CAR(p); p = CDR(p); CHECK_DUMMY_OBJ(obj); // additional arguments, processed the same way as .Call does UNPACK_EXTERNAL_ARGS(cargs,p) return clazz->invoke_notvoid(met, obj, cargs, nargs); } namespace Rcpp{ static Module* current_scope ; } Rcpp::Module* getCurrentScope() { return Rcpp::current_scope; } void setCurrentScope(Rcpp::Module* scope) { Rcpp::current_scope = scope; } Rcpp/src/Makevars.win0000644000176200001440000000004312754425121014235 0ustar liggesusersPKG_CPPFLAGS = -I../inst/include/ Rcpp/src/barrier.cpp0000644000176200001440000001552615014017044014104 0ustar liggesusers // barrier.cpp: Rcpp R/C++ interface class library -- write barrier // // Copyright (C) 2010 - 2020 Dirk Eddelbuettel and Romain Francois // Copyright (C) 2021 - 2022 Dirk Eddelbuettel, Romain Francois and Iñaki Ucar // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #define COMPILING_RCPP #define USE_RINTERNALS #include #include #include #include #include #include "internal.h" // [[Rcpp::register]] SEXP get_string_elt(SEXP x, R_xlen_t i) { // #nocov start return STRING_ELT(x, i); } // [[Rcpp::register]] const char* char_get_string_elt(SEXP x, R_xlen_t i) { return CHAR(STRING_ELT(x, i)); } // [[Rcpp::register]] void set_string_elt(SEXP x, R_xlen_t i, SEXP value) { SET_STRING_ELT(x, i, value); } // [[Rcpp::register]] void char_set_string_elt(SEXP x, R_xlen_t i, const char* value) { SET_STRING_ELT(x, i, Rf_mkChar(value)); } // [[Rcpp::register]] SEXP* get_string_ptr(SEXP x) { // TODO: should we deprecate this? return const_cast(RCPP_STRING_PTR(x)); } // [[Rcpp::register]] SEXP get_vector_elt(SEXP x, R_xlen_t i) { return VECTOR_ELT(x, i); } // [[Rcpp::register]] void set_vector_elt(SEXP x, R_xlen_t i, SEXP value) { SET_VECTOR_ELT(x, i, value); } // [[Rcpp::register]] SEXP* get_vector_ptr(SEXP x) { // TODO: should we deprecate this? return const_cast(RCPP_VECTOR_PTR(x)); // #nocov end } // [[Rcpp::register]] void* dataptr(SEXP x) { #if R_VERSION >= R_Version(3,5,0) // DATAPTR_RO was introduced with R 3.5.0 return const_cast(DATAPTR_RO(x)); #else // this will get your wrists slapped under recent R CMD check ... return DATAPTR(x); #endif } // [[Rcpp::register]] const char* char_nocheck(SEXP x) { return CHAR(x); } static bool Rcpp_cache_know = false; static SEXP Rcpp_cache = R_NilValue; #define RCPP_HASH_CACHE_INDEX 4 #define RCPP_CACHE_SIZE 5 #ifndef RCPP_HASH_CACHE_INITIAL_SIZE #define RCPP_HASH_CACHE_INITIAL_SIZE 1024 #endif namespace Rcpp { static SEXP Rcpp_precious = R_NilValue; // [[Rcpp::register]] void Rcpp_precious_init() { Rcpp_precious = CONS(R_NilValue, R_NilValue); // set up R_PreserveObject(Rcpp_precious); // and protect } // [[Rcpp::register]] void Rcpp_precious_teardown() { R_ReleaseObject(Rcpp_precious); // release resource } // [[Rcpp::register]] SEXP Rcpp_precious_preserve(SEXP object) { if (object == R_NilValue) { return R_NilValue; } PROTECT(object); SEXP cell = PROTECT(CONS(Rcpp_precious, CDR(Rcpp_precious))); SET_TAG(cell, object); SETCDR(Rcpp_precious, cell); if (CDR(cell) != R_NilValue) { SETCAR(CDR(cell), cell); } UNPROTECT(2); return cell; } // [[Rcpp::register]] void Rcpp_precious_remove(SEXP token) { if (token == R_NilValue || TYPEOF(token) != LISTSXP) { return; } SET_TAG(token, R_NilValue); SEXP before = CAR(token); SEXP after = CDR(token); SETCDR(before, after); if (after != R_NilValue) { SETCAR(after, before); } } } // only used for debugging SEXP get_rcpp_cache() { if (! Rcpp_cache_know) { SEXP getNamespaceSym = Rf_install("getNamespace"); // cannot be gc()'ed once in symbol table Rcpp::Shield RcppString(Rf_mkString("Rcpp")); Rcpp::Shield call(Rf_lang2(getNamespaceSym, RcppString)); Rcpp::Shield RCPP(Rf_eval(call, R_GlobalEnv)); Rcpp_cache = Rf_findVarInFrame(RCPP, Rf_install(".rcpp_cache")); Rcpp_cache_know = true; } return Rcpp_cache; } namespace Rcpp { namespace internal { // [[Rcpp::register]] SEXP get_Rcpp_namespace() { return VECTOR_ELT(get_rcpp_cache() , 0); } } } // [[Rcpp::register]] SEXP rcpp_get_stack_trace() { return VECTOR_ELT(get_rcpp_cache(), 3); } // [[Rcpp::register]] SEXP rcpp_set_stack_trace(SEXP e) { SET_VECTOR_ELT(get_rcpp_cache(), 3, e); return R_NilValue; } SEXP set_error_occured(SEXP cache, SEXP e) { SET_VECTOR_ELT(cache, 1, e); return R_NilValue; } SEXP set_current_error(SEXP cache, SEXP e) { SET_VECTOR_ELT(cache, 2, e); return R_NilValue; } SEXP init_Rcpp_cache() { SEXP getNamespaceSym = Rf_install("getNamespace"); // cannot be gc()'ed once in symbol table Rcpp::Shield RcppString(Rf_mkString("Rcpp")); Rcpp::Shield call(Rf_lang2(getNamespaceSym, RcppString)); Rcpp::Shield RCPP(Rf_eval(call, R_GlobalEnv)); Rcpp::Shield cache(Rf_allocVector(VECSXP, RCPP_CACHE_SIZE)); // the Rcpp namespace SET_VECTOR_ELT(cache, 0, RCPP); set_error_occured(cache, Rf_ScalarLogical(FALSE)); // error occured set_current_error(cache, R_NilValue); // current error SET_VECTOR_ELT(cache, 3, R_NilValue); // stack trace Rcpp::Shield tmp(Rf_allocVector(INTSXP, RCPP_HASH_CACHE_INITIAL_SIZE)); SET_VECTOR_ELT(cache, RCPP_HASH_CACHE_INDEX, tmp); Rf_defineVar(Rf_install(".rcpp_cache"), cache, RCPP); return cache; } // [[Rcpp::register]] SEXP reset_current_error() { // #nocov start SEXP cache = get_rcpp_cache(); // error occured set_error_occured(cache, Rf_ScalarLogical(FALSE)); // current error set_current_error(cache, R_NilValue); // stack trace SET_VECTOR_ELT(cache, 3, R_NilValue); return R_NilValue; } // [[Rcpp::register]] int error_occured() { SEXP err = VECTOR_ELT(get_rcpp_cache(), 1); return LOGICAL(err)[0]; } // [[Rcpp::internal]] SEXP rcpp_error_recorder(SEXP e) { SEXP cache = get_rcpp_cache(); // error occured set_error_occured(cache, Rf_ScalarLogical(TRUE)); // current error set_current_error(cache, e); return R_NilValue; } // [[Rcpp::register]] SEXP rcpp_get_current_error() { return VECTOR_ELT(get_rcpp_cache(), 2); // #nocov end } // [[Rcpp::register]] int* get_cache(int m) { SEXP cache = get_rcpp_cache(); SEXP hash_cache = VECTOR_ELT(cache, RCPP_HASH_CACHE_INDEX); int n = Rf_length(hash_cache); if (m > n) { Rcpp::Shield new_hash_cache(Rf_allocVector(INTSXP, m)); hash_cache = new_hash_cache; SET_VECTOR_ELT(cache,RCPP_HASH_CACHE_INDEX, hash_cache); } int *res = INTEGER(hash_cache); std::fill(res, res+m, 0); return res; } Rcpp/src/date.cpp0000644000176200001440000013107414470465200013376 0ustar liggesusers// Date.cpp: Rcpp R/C++ interface class library -- Date type // // Copyright (C) 2010 - 2023 Dirk Eddelbuettel and Romain Francois // // The mktime00() as well as the gmtime_() replacement function are // Copyright (C) 2000 - 2010 The R Development Core Team. // // gmtime_() etc are from the public domain timezone code dated // 1996-06-05 by Arthur David Olson. // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #define COMPILING_RCPP #include // for TRUE,FALSE #include #include // for gmtime #include namespace Rcpp { // Taken (in 2010) from R's src/main/datetime.c and made a member function called with C++ reference // Later, R added the following comment we now (in 2016) add /* There are two implementation paths here. 1) Use the system functions for mktime, gmtime[_r], localtime[_r], strftime. Use the system time_t, struct tm and time-zone tables. 2) Use substitutes from src/extra/tzone for mktime, gmtime, localtime, strftime with a R_ prefix. The system strftime is used for locale-dependent names in R_strptime and R_strftime. This uses the time-zone tables shipped with R and installed into R_HOME/share/zoneinfo . Our own versions of time_t (64-bit) and struct tm (including the BSD-style fields tm_zone and tm_gmtoff) are used. For path 1), the system facilities are used for 1902-2037 and outside those limits where there is a 64-bit time_t and the conversions work (most OSes currently have only 32-bit time-zone tables). Otherwise there is code below to extrapolate from 1902-2037. Path 2) was added for R 3.1.0 and is the only one supported on Windows: it is the default on macOS. The only currently (Jan 2014) known OS with 64-bit time_t and complete tables is Linux. */ // Now, R only ships share/zoneinfo on Windows AFAIK /* Substitute for mktime -- no checking, always in GMT */ // [[Rcpp::register]] double mktime00(struct tm &tm) { static const int days_in_month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; static const int year_base = 1900; #define isleap(y) ((((y) % 4) == 0 && ((y) % 100) != 0) || ((y) % 400) == 0) #define days_in_year(year) (isleap(year) ? 366 : 365) int day = 0; int i, year, year0; double excess = 0.0; day = tm.tm_mday - 1; year0 = year_base + tm.tm_year; /* safety check for unbounded loops */ if (year0 > 3000) { excess = (int)(year0/2000) - 1; // #nocov start year0 -= (int)(excess * 2000); } else if (year0 < 0) { excess = -1 - (int)(-year0/2000); year0 -= (int)(excess * 2000); // #nocov end } for(i = 0; i < tm.tm_mon; i++) day += days_in_month[i]; if (tm.tm_mon > 1 && isleap(year0)) day++; tm.tm_yday = day; if (year0 > 1970) { for (year = 1970; year < year0; year++) day += days_in_year(year); } else if (year0 < 1970) { for (year = 1969; year >= year0; year--) day -= days_in_year(year); } /* weekday: Epoch day was a Thursday */ if ((tm.tm_wday = (day + 4) % 7) < 0) tm.tm_wday += 7; return tm.tm_sec + (tm.tm_min * 60) + (tm.tm_hour * 3600) + (day + excess * 730485) * 86400.0; } #undef isleap #undef days_in_year #include "sys/types.h" /* for time_t */ #include "string.h" #include "limits.h" /* for CHAR_BIT et al. */ #define _NO_OLDNAMES /* avoid tznames */ #include "time.h" #undef _NO_OLDNAMES #include #ifndef EOVERFLOW # define EOVERFLOW 79 #endif #include "stdlib.h" #include "stdint.h" #include "stdio.h" #include "fcntl.h" #include "float.h" /* for FLT_MAX and DBL_MAX */ #include // solaris needs this for read() and close() /* merged from private.h */ #define TYPE_BIT(type) (sizeof (type) * CHAR_BIT) #define TYPE_SIGNED(type) (((type) -1) < 0) #define TYPE_INTEGRAL(type) (((type) 0.5) != 0.5) #define TWOS_COMPLEMENT(t) ((t) ~ (t) 0 < 0) #define GRANDPARENTED "Local time zone must be set--see zic manual page" #define YEARSPERREPEAT 400 /* years before a Gregorian repeat */ #define AVGSECSPERYEAR 31556952L #define SECSPERREPEAT ((int_fast64_t) YEARSPERREPEAT * (int_fast64_t) AVGSECSPERYEAR) #define SECSPERREPEAT_BITS 34 /* ceil(log2(SECSPERREPEAT)) */ #define is_digit(c) ((unsigned)(c) - '0' <= 9) #define INITIALIZE(x) (x = 0) /* Max and min values of the integer type T, of which only the bottom B bits are used, and where the highest-order used bit is considered to be a sign bit if T is signed. */ #define MAXVAL(t, b) \ ((t) (((t) 1 << ((b) - 1 - TYPE_SIGNED(t))) \ - 1 + ((t) 1 << ((b) - 1 - TYPE_SIGNED(t))))) #define MINVAL(t, b) \ ((t) (TYPE_SIGNED(t) ? - TWOS_COMPLEMENT(t) - MAXVAL(t, b) : 0)) /* The minimum and maximum finite time values. This assumes no padding. */ static time_t const time_t_min = MINVAL(time_t, TYPE_BIT(time_t)); static time_t const time_t_max = MAXVAL(time_t, TYPE_BIT(time_t)); //#include "tzfile.h" // from src/extra/tzone/tzfile.h // BEGIN ------------------------------------------------------------------------------------------ tzfile.h #ifndef TZFILE_H #define TZFILE_H /* ** This file is in the public domain, so clarified as of ** 1996-06-05 by Arthur David Olson. */ /* ** This header is for use ONLY with the time conversion code. ** There is no guarantee that it will remain unchanged, ** or that it will remain at all. ** Do NOT copy it to any system include directory. ** Thank you! */ /* ** Information about time zone files. */ #ifndef TZDIR #define TZDIR "/usr/local/etc/zoneinfo" /* Time zone object file directory */ #endif /* !defined TZDIR */ #ifndef TZDEFAULT #define TZDEFAULT "localtime" // NB this is "UTC" in R, but R also loads tz data #endif /* !defined TZDEFAULT */ #ifndef TZDEFRULES #define TZDEFRULES "America/New_York" #endif /* !defined TZDEFRULES */ /* ** Each file begins with. . . */ #define TZ_MAGIC "TZif" struct tzhead { char tzh_magic[4]; /* TZ_MAGIC */ char tzh_version[1]; /* '\0' or '2' as of 2005 */ char tzh_reserved[15]; /* reserved--must be zero */ char tzh_ttisgmtcnt[4]; /* coded number of trans. time flags */ char tzh_ttisstdcnt[4]; /* coded number of trans. time flags */ char tzh_leapcnt[4]; /* coded number of leap seconds */ char tzh_timecnt[4]; /* coded number of transition times */ char tzh_typecnt[4]; /* coded number of local time types */ char tzh_charcnt[4]; /* coded number of abbr. chars */ }; /* ** . . .followed by. . . ** ** tzh_timecnt (char [4])s coded transition times a la time(2) ** tzh_timecnt (unsigned char)s types of local time starting at above ** tzh_typecnt repetitions of ** one (char [4]) coded UTC offset in seconds ** one (unsigned char) used to set tm_isdst ** one (unsigned char) that's an abbreviation list index ** tzh_charcnt (char)s '\0'-terminated zone abbreviations ** tzh_leapcnt repetitions of ** one (char [4]) coded leap second transition times ** one (char [4]) total correction after above ** tzh_ttisstdcnt (char)s indexed by type; if TRUE, transition ** time is standard time, if FALSE, ** transition time is wall clock time ** if absent, transition times are ** assumed to be wall clock time ** tzh_ttisgmtcnt (char)s indexed by type; if TRUE, transition ** time is UTC, if FALSE, ** transition time is local time ** if absent, transition times are ** assumed to be local time */ /* ** If tzh_version is '2' or greater, the above is followed by a second instance ** of tzhead and a second instance of the data in which each coded transition ** time uses 8 rather than 4 chars, ** then a POSIX-TZ-environment-variable-style string for use in handling ** instants after the last transition time stored in the file ** (with nothing between the newlines if there is no POSIX representation for ** such instants). ** ** If tz_version is '3' or greater, the above is extended as follows. ** First, the POSIX TZ string's hour offset may range from -167 ** through 167 as compared to the POSIX-required 0 through 24. ** Second, its DST start time may be January 1 at 00:00 and its stop ** time December 31 at 24:00 plus the difference between DST and ** standard time, indicating DST all year. */ /* ** In the current implementation, "tzset()" refuses to deal with files that ** exceed any of the limits below. */ #ifndef TZ_MAX_TIMES #define TZ_MAX_TIMES 1200 #endif /* !defined TZ_MAX_TIMES */ #ifndef TZ_MAX_TYPES #ifndef NOSOLAR #define TZ_MAX_TYPES 256 /* Limited by what (unsigned char)'s can hold */ #endif /* !defined NOSOLAR */ #ifdef NOSOLAR /* ** Must be at least 14 for Europe/Riga as of Jan 12 1995, ** as noted by Earl Chew. */ #define TZ_MAX_TYPES 20 /* Maximum number of local time types */ #endif /* !defined NOSOLAR */ #endif /* !defined TZ_MAX_TYPES */ // increased from 50, http://mm.icann.org/pipermail/tz/2015-August/022623.html #ifndef TZ_MAX_CHARS #define TZ_MAX_CHARS 100 /* Maximum number of abbreviation characters */ /* (limited by what unsigned chars can hold) */ #endif /* !defined TZ_MAX_CHARS */ #ifndef TZ_MAX_LEAPS #define TZ_MAX_LEAPS 50 /* Maximum number of leap second corrections */ #endif /* !defined TZ_MAX_LEAPS */ #define SECSPERMIN 60 #define MINSPERHOUR 60 #define HOURSPERDAY 24 #define DAYSPERWEEK 7 #define DAYSPERNYEAR 365 #define DAYSPERLYEAR 366 #define SECSPERHOUR (SECSPERMIN * MINSPERHOUR) #define SECSPERDAY ((int_fast32_t) SECSPERHOUR * HOURSPERDAY) #define MONSPERYEAR 12 #define TM_SUNDAY 0 #define TM_MONDAY 1 #define TM_TUESDAY 2 #define TM_WEDNESDAY 3 #define TM_THURSDAY 4 #define TM_FRIDAY 5 #define TM_SATURDAY 6 #define TM_JANUARY 0 #define TM_FEBRUARY 1 #define TM_MARCH 2 #define TM_APRIL 3 #define TM_MAY 4 #define TM_JUNE 5 #define TM_JULY 6 #define TM_AUGUST 7 #define TM_SEPTEMBER 8 #define TM_OCTOBER 9 #define TM_NOVEMBER 10 #define TM_DECEMBER 11 #define TM_YEAR_BASE 1900 #define EPOCH_YEAR 1970 #define EPOCH_WDAY TM_THURSDAY #define isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0)) /* ** Since everything in isleap is modulo 400 (or a factor of 400), we know that ** isleap(y) == isleap(y % 400) ** and so ** isleap(a + b) == isleap((a + b) % 400) ** or ** isleap(a + b) == isleap(a % 400 + b % 400) ** This is true even if % means modulo rather than Fortran remainder ** (which is allowed by C89 but not C99). ** We use this to avoid addition overflow problems. */ #define isleap_sum(a, b) isleap((a) % 400 + (b) % 400) #endif /* !defined TZFILE_H */ // -------------------------------------------------------------------------------------- END tzfile.h //#include "localtime.c" // from src/extra/tzone/localtime.c // note though that was included is partial as we support only gmtime_() // BEGIN --------------------------------------------------------------------------------- localtime.c #ifdef O_BINARY #define OPEN_MODE (O_RDONLY | O_BINARY) #endif /* defined O_BINARY */ #ifndef O_BINARY #define OPEN_MODE O_RDONLY #endif /* !defined O_BINARY */ static const char gmt[] = "GMT"; /* ** The DST rules to use if TZ has no rules and we can't load TZDEFRULES. ** We default to US rules as of 1999-08-17. ** POSIX 1003.1 section 8.1.1 says that the default DST rules are ** implementation dependent; for historical reasons, US rules are a ** common default. */ #ifndef TZDEFRULESTRING #define TZDEFRULESTRING ",M4.1.0,M10.5.0" #endif /* !defined TZDEFDST */ #define BIGGEST(a, b) (((a) > (b)) ? (a) : (b)) #ifdef TZNAME_MAX #define MY_TZNAME_MAX TZNAME_MAX #endif /* defined TZNAME_MAX */ #ifndef TZNAME_MAX #define MY_TZNAME_MAX 255 #endif /* !defined TZNAME_MAX */ struct ttinfo { /* time type information */ int_fast32_t tt_gmtoff; /* UTC offset in seconds */ int tt_isdst; /* used to set tm_isdst */ int tt_abbrind; /* abbreviation list index */ int tt_ttisstd; /* TRUE if transition is std time */ int tt_ttisgmt; /* TRUE if transition is UTC */ }; struct lsinfo { /* leap second information */ time_t ls_trans; /* transition time */ int_fast64_t ls_corr; /* correction to apply */ }; struct state { int leapcnt; int timecnt; int typecnt; int charcnt; int goback; int goahead; time_t ats[TZ_MAX_TIMES]; unsigned char types[TZ_MAX_TIMES]; struct ttinfo ttis[TZ_MAX_TYPES]; char chars[BIGGEST(BIGGEST(TZ_MAX_CHARS + 1, sizeof gmt), (2 * (MY_TZNAME_MAX + 1)))]; struct lsinfo lsis[TZ_MAX_LEAPS]; }; struct rule { int r_type; /* type of rule--see below */ int r_day; /* day number of rule */ int r_week; /* week number of rule */ int r_mon; /* month number of rule */ int_fast32_t r_time; /* transition time of rule */ }; #define JULIAN_DAY 0 /* Jn - Julian day */ #define DAY_OF_YEAR 1 /* n - day of year */ #define MONTH_NTH_DAY_OF_WEEK 2 /* Mm.n.d - month, week, day of week */ static const int mon_lengths[2][MONSPERYEAR] = { { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } }; static const int year_lengths[2] = { DAYSPERNYEAR, DAYSPERLYEAR }; static int gmt_is_set; //static struct state lclmem; static struct state gmtmem; //#define lclptr (&lclmem) #define gmtptr (&gmtmem) static struct tm tm; //extern const char *getTZinfo(void); static int tzparse(const char * name, struct state * sp, int lastditch); static int typesequiv(const struct state * sp, int a, int b); static const char * getsecs(const char * strp, int_fast32_t * secsp); static const char * getnum(const char * strp, int * const nump, const int min, const int max); static const char * getrule(const char * strp, struct rule * const rulep); static int_fast32_t transtime(int year, const struct rule * rulep, int_fast32_t offset); static struct tm * timesub(const time_t *timep, int_fast32_t offset, const struct state *sp, struct tm *tmp); static int leaps_thru_end_of(const int y); /* ** Normalize logic courtesy Paul Eggert. */ static int increment_overflow(int *const ip, int j) { int const i = *ip; /* ** If i >= 0 there can only be overflow if i + j > INT_MAX ** or if j > INT_MAX - i; given i >= 0, INT_MAX - i cannot overflow. ** If i < 0 there can only be overflow if i + j < INT_MIN ** or if j < INT_MIN - i; given i < 0, INT_MIN - i cannot overflow. */ if ((i >= 0) ? (j > INT_MAX - i) : (j < INT_MIN - i)) return TRUE; // #nocov *ip += j; return FALSE; } static int increment_overflow_time(time_t *tp, int_fast32_t j) { // #nocov start /* ** This is like ** 'if (! (time_t_min <= *tp + j && *tp + j <= time_t_max)) ...', ** except that it does the right thing even if *tp + j would overflow. */ if (! (j < 0 ? (TYPE_SIGNED(time_t) ? time_t_min - j <= *tp : -1 - j < *tp) : *tp <= time_t_max - j)) return TRUE; *tp += j; return FALSE; } static int_fast32_t detzcode(const char *const codep) { int_fast32_t result = (codep[0] & 0x80) ? -1 : 0; for (int i = 0; i < 4; ++i) result = (result << 8) | (codep[i] & 0xff); return result; } static int_fast64_t detzcode64(const char *const codep) { int_fast64_t result = (codep[0] & 0x80) ? -1 : 0; for (int i = 0; i < 8; ++i) result = (result << 8) | (codep[i] & 0xff); return result; } static int differ_by_repeat(const time_t t1, const time_t t0) { if (TYPE_INTEGRAL(time_t) && TYPE_BIT(time_t) - TYPE_SIGNED(time_t) < SECSPERREPEAT_BITS) return 0; /* R change */ return (int_fast64_t)t1 - (int_fast64_t)t0 == SECSPERREPEAT; } static const char * getzname(const char * strp) { char c; while ((c = *strp) != '\0' && !is_digit(c) && c != ',' && c != '-' && c != '+') ++strp; return strp; } static const char * getqzname(const char *strp, const int delim) { int c; while ((c = *strp) != '\0' && c != delim) ++strp; return strp; } static const char * getoffset(const char *strp, int_fast32_t *const offsetp) { int neg = 0; if (*strp == '-') { neg = 1; ++strp; } else if (*strp == '+') ++strp; strp = getsecs(strp, offsetp); if (strp == NULL) return NULL; /* illegal time */ if (neg) *offsetp = -*offsetp; return strp; } static const char * getsecs(const char *strp, int_fast32_t *const secsp) { int num; /* ** 'HOURSPERDAY * DAYSPERWEEK - 1' allows quasi-Posix rules like ** "M10.4.6/26", which does not conform to Posix, ** but which specifies the equivalent of ** "02:00 on the first Sunday on or after 23 Oct". */ strp = getnum(strp, &num, 0, HOURSPERDAY * DAYSPERWEEK - 1); if (strp == NULL) return NULL; *secsp = num * (int_fast32_t) SECSPERHOUR; if (*strp == ':') { ++strp; strp = getnum(strp, &num, 0, MINSPERHOUR - 1); if (strp == NULL) return NULL; *secsp += num * SECSPERMIN; if (*strp == ':') { ++strp; /* 'SECSPERMIN' allows for leap seconds. */ strp = getnum(strp, &num, 0, SECSPERMIN); if (strp == NULL) return NULL; *secsp += num; } } return strp; } static const char * getnum(const char * strp, int * const nump, const int min, const int max) { char c; int num; if (strp == NULL || !is_digit(c = *strp)) return NULL; num = 0; do { num = num * 10 + (c - '0'); if (num > max) return NULL; /* illegal value */ c = *++strp; } while (is_digit(c)); if (num < min) return NULL; /* illegal value */ *nump = num; return strp; } static const char * getrule(const char * strp, struct rule * const rulep) { if (*strp == 'J') { /* ** Julian day. */ rulep->r_type = JULIAN_DAY; ++strp; strp = getnum(strp, &rulep->r_day, 1, DAYSPERNYEAR); } else if (*strp == 'M') { /* ** Month, week, day. */ rulep->r_type = MONTH_NTH_DAY_OF_WEEK; ++strp; strp = getnum(strp, &rulep->r_mon, 1, MONSPERYEAR); if (strp == NULL) return NULL; if (*strp++ != '.') return NULL; strp = getnum(strp, &rulep->r_week, 1, 5); if (strp == NULL) return NULL; if (*strp++ != '.') return NULL; strp = getnum(strp, &rulep->r_day, 0, DAYSPERWEEK - 1); } else if (is_digit(*strp)) { /* ** Day of year. */ rulep->r_type = DAY_OF_YEAR; strp = getnum(strp, &rulep->r_day, 0, DAYSPERLYEAR - 1); } else return NULL; /* invalid format */ if (strp == NULL) return NULL; if (*strp == '/') { /* ** Time specified. */ ++strp; strp = getsecs(strp, &rulep->r_time); } else rulep->r_time = 2 * SECSPERHOUR; /* default = 2:00:00 */ return strp; } // this routine modified / simplified / reduced in 2010 static int tzload(const char * name, struct state * const sp, const int doextend) { const char * p; int i; int fid; int stored; int nread; union { struct tzhead tzhead; char buf[2 * sizeof(struct tzhead) + 2 * sizeof *sp + 4 * TZ_MAX_TIMES]; } u; sp->goback = sp->goahead = FALSE; /* if (name == NULL && (name = TZDEFAULT) == NULL) return -1; */ if (name == NULL) { // edd 06 Jul 2010 let's do without getTZinfo() //name = getTZinfo(); //if( strcmp(name, "unknown") == 0 ) name = TZDEFAULT; name = TZDEFAULT; } { int doaccess; /* ** Section 4.9.1 of the C standard says that ** "FILENAME_MAX expands to an integral constant expression ** that is the size needed for an array of char large enough ** to hold the longest file name string that the implementation ** guarantees can be opened." */ char fullname[FILENAME_MAX + 1]; // edd 08 Jul 2010 not currently needed const char *sname = name; if (name[0] == ':') ++name; doaccess = name[0] == '/'; if (!doaccess) { char buf[1000]; p = getenv("TZDIR"); if (p == NULL) { snprintf(buf, 1000, "%s/share/zoneinfo", getenv("R_HOME")); buf[999] = '\0'; p = buf; } /* if ((p = TZDIR) == NULL) return -1; */ if ((strlen(p) + strlen(name) + 1) >= sizeof fullname) return -1; (void) strcpy(fullname, p); (void) strcat(fullname, "/"); (void) strcat(fullname, name); /* ** Set doaccess if '.' (as in "../") shows up in name. */ if (strchr(name, '.') != NULL) doaccess = TRUE; name = fullname; } // edd 16 Jul 2010 comment out whole block //if (doaccess && access(name, R_OK) != 0) { // edd 08 Jul 2010 we use this without TZ for dates only // so no need to warn //Rf_warning("unknown timezone '%s'", sname); //return -1; //} if ((fid = open(name, OPEN_MODE)) == -1) { // edd 08 Jul 2010 we use this without TZ for dates only // so no need to warn //Rf_warning("unknown timezone '%s'", sname); return -1; } } nread = (int)read(fid, u.buf, sizeof u.buf); if (close(fid) < 0 || nread <= 0) return -1; for (stored = 4; stored <= 8; stored *= 2) { int ttisstdcnt; int ttisgmtcnt; ttisstdcnt = (int) detzcode(u.tzhead.tzh_ttisstdcnt); ttisgmtcnt = (int) detzcode(u.tzhead.tzh_ttisgmtcnt); sp->leapcnt = (int) detzcode(u.tzhead.tzh_leapcnt); sp->timecnt = (int) detzcode(u.tzhead.tzh_timecnt); sp->typecnt = (int) detzcode(u.tzhead.tzh_typecnt); sp->charcnt = (int) detzcode(u.tzhead.tzh_charcnt); p = u.tzhead.tzh_charcnt + sizeof u.tzhead.tzh_charcnt; if (sp->leapcnt < 0 || sp->leapcnt > TZ_MAX_LEAPS || sp->typecnt <= 0 || sp->typecnt > TZ_MAX_TYPES || sp->timecnt < 0 || sp->timecnt > TZ_MAX_TIMES || sp->charcnt < 0 || sp->charcnt > TZ_MAX_CHARS || (ttisstdcnt != sp->typecnt && ttisstdcnt != 0) || (ttisgmtcnt != sp->typecnt && ttisgmtcnt != 0)) return -1; if (nread - (p - u.buf) < sp->timecnt * stored + /* ats */ sp->timecnt + /* types */ sp->typecnt * 6 + /* ttinfos */ sp->charcnt + /* chars */ sp->leapcnt * (stored + 4) + /* lsinfos */ ttisstdcnt + /* ttisstds */ ttisgmtcnt) /* ttisgmts */ return -1; for (i = 0; i < sp->timecnt; ++i) { sp->ats[i] = (stored == 4) ? detzcode(p) : detzcode64(p); p += stored; } for (i = 0; i < sp->timecnt; ++i) { sp->types[i] = (unsigned char) *p++; if (sp->types[i] >= sp->typecnt) return -1; } for (i = 0; i < sp->typecnt; ++i) { struct ttinfo * ttisp; ttisp = &sp->ttis[i]; ttisp->tt_gmtoff = detzcode(p); p += 4; ttisp->tt_isdst = (unsigned char) *p++; if (ttisp->tt_isdst != 0 && ttisp->tt_isdst != 1) return -1; ttisp->tt_abbrind = (unsigned char) *p++; if (ttisp->tt_abbrind < 0 || ttisp->tt_abbrind > sp->charcnt) return -1; } for (i = 0; i < sp->charcnt; ++i) sp->chars[i] = *p++; sp->chars[i] = '\0'; /* ensure '\0' at end */ for (i = 0; i < sp->leapcnt; ++i) { struct lsinfo * lsisp; lsisp = &sp->lsis[i]; lsisp->ls_trans = (stored == 4) ? detzcode(p) : detzcode64(p); p += stored; lsisp->ls_corr = detzcode(p); p += 4; } for (i = 0; i < sp->typecnt; ++i) { struct ttinfo * ttisp; ttisp = &sp->ttis[i]; if (ttisstdcnt == 0) ttisp->tt_ttisstd = FALSE; else { ttisp->tt_ttisstd = *p++; if (ttisp->tt_ttisstd != TRUE && ttisp->tt_ttisstd != FALSE) return -1; } } for (i = 0; i < sp->typecnt; ++i) { struct ttinfo * ttisp; ttisp = &sp->ttis[i]; if (ttisgmtcnt == 0) ttisp->tt_ttisgmt = FALSE; else { ttisp->tt_ttisgmt = *p++; if (ttisp->tt_ttisgmt != TRUE && ttisp->tt_ttisgmt != FALSE) return -1; } } /* ** Out-of-sort ats should mean we're running on a ** signed time_t system but using a data file with ** unsigned values (or vice versa). */ for (i = 0; i < sp->timecnt - 2; ++i) if (sp->ats[i] > sp->ats[i + 1]) { ++i; if (TYPE_SIGNED(time_t)) { /* ** Ignore the end (easy). */ sp->timecnt = i; } else { /* ** Ignore the beginning (harder). */ int j; for (j = 0; j + i < sp->timecnt; ++j) { sp->ats[j] = sp->ats[j + i]; sp->types[j] = sp->types[j + i]; } sp->timecnt = j; } break; } /* ** If this is an old file, we're done. */ if (u.tzhead.tzh_version[0] == '\0') break; nread -= p - u.buf; for (i = 0; i < nread; ++i) u.buf[i] = p[i]; /* ** If this is a narrow integer time_t system, we're done. */ if (stored >= (int) sizeof(time_t) && TYPE_INTEGRAL(time_t)) break; } if (doextend && nread > 2 && u.buf[0] == '\n' && u.buf[nread - 1] == '\n' && sp->typecnt + 2 <= TZ_MAX_TYPES) { struct state ts; int result; u.buf[nread - 1] = '\0'; result = tzparse(&u.buf[1], &ts, FALSE); if (result == 0 && ts.typecnt == 2 && sp->charcnt + ts.charcnt <= TZ_MAX_CHARS) { for (i = 0; i < 2; ++i) ts.ttis[i].tt_abbrind += sp->charcnt; for (i = 0; i < ts.charcnt; ++i) sp->chars[sp->charcnt++] = ts.chars[i]; i = 0; while (i < ts.timecnt && ts.ats[i] <= sp->ats[sp->timecnt - 1]) ++i; while (i < ts.timecnt && sp->timecnt < TZ_MAX_TIMES) { sp->ats[sp->timecnt] = ts.ats[i]; sp->types[sp->timecnt] = (unsigned char)sp->typecnt + ts.types[i]; ++sp->timecnt; ++i; } sp->ttis[sp->typecnt++] = ts.ttis[0]; sp->ttis[sp->typecnt++] = ts.ttis[1]; } } i = 2 * YEARSPERREPEAT; sp->goback = sp->goahead = sp->timecnt > i; sp->goback = sp->goback && typesequiv(sp, sp->types[i], sp->types[0]) && differ_by_repeat(sp->ats[i], sp->ats[0]); sp->goahead = sp->goahead && typesequiv(sp, sp->types[sp->timecnt - 1], sp->types[sp->timecnt - 1 - i]) && differ_by_repeat(sp->ats[sp->timecnt - 1], sp->ats[sp->timecnt - 1 - i]); return 0; } /* ** Given a year, a rule, and the offset from UT at the time that rule takes ** effect, calculate the year-relative time that rule takes effect. */ static int_fast32_t transtime(const int year, const struct rule *const rulep, const int_fast32_t offset) { int leapyear; int_fast32_t value; int d, m1, yy0, yy1, yy2, dow; INITIALIZE(value); leapyear = isleap(year); switch (rulep->r_type) { case JULIAN_DAY: /* ** Jn - Julian day, 1 == January 1, 60 == March 1 even in leap ** years. ** In non-leap years, or if the day number is 59 or less, just ** add SECSPERDAY times the day number-1 to the time of ** January 1, midnight, to get the day. */ value = (rulep->r_day - 1) * SECSPERDAY; if (leapyear && rulep->r_day >= 60) value += SECSPERDAY; break; case DAY_OF_YEAR: /* ** n - day of year. ** Just add SECSPERDAY times the day number to the time of ** January 1, midnight, to get the day. */ value = rulep->r_day * SECSPERDAY; break; case MONTH_NTH_DAY_OF_WEEK: /* ** Mm.n.d - nth "dth day" of month m. */ /* ** Use Zeller's Congruence to get day-of-week of first day of ** month. */ m1 = (rulep->r_mon + 9) % 12 + 1; yy0 = (rulep->r_mon <= 2) ? (year - 1) : year; yy1 = yy0 / 100; yy2 = yy0 % 100; dow = ((26 * m1 - 2) / 10 + 1 + yy2 + yy2 / 4 + yy1 / 4 - 2 * yy1) % 7; if (dow < 0) dow += DAYSPERWEEK; /* ** "dow" is the day-of-week of the first day of the month. Get ** the day-of-month (zero-origin) of the first "dow" day of the ** month. */ d = rulep->r_day - dow; if (d < 0) d += DAYSPERWEEK; for (int i = 1; i < rulep->r_week; ++i) { if (d + DAYSPERWEEK >= mon_lengths[leapyear][rulep->r_mon - 1]) break; d += DAYSPERWEEK; } /* ** "d" is the day-of-month (zero-origin) of the day we want. */ value = d * SECSPERDAY; for (int i = 0; i < rulep->r_mon - 1; ++i) value += mon_lengths[leapyear][i] * SECSPERDAY; break; } /* ** "value" is the year-relative time of 00:00:00 UT on the day in ** question. To get the year-relative time of the specified local ** time on that day, add the transition time and the current offset ** from UT. */ return value + rulep->r_time + offset; } /* ** Given a POSIX section 8-style TZ string, fill in the rule tables as ** appropriate. */ static int tzparse(const char * name, struct state * const sp, const int lastditch) { const char * stdname; const char * dstname; size_t stdlen; size_t dstlen; int_fast32_t stdoffset; int_fast32_t dstoffset; char * cp; int load_result; static struct ttinfo zttinfo; INITIALIZE(dstname); stdname = name; if (lastditch) { stdlen = strlen(name); /* length of standard zone name */ name += stdlen; if (stdlen >= sizeof sp->chars) stdlen = (sizeof sp->chars) - 1; stdoffset = 0; } else { if (*name == '<') { name++; stdname = name; name = getqzname(name, '>'); if (*name != '>') return (-1); stdlen = name - stdname; name++; } else { name = getzname(name); stdlen = name - stdname; } if (*name == '\0') return -1; name = getoffset(name, &stdoffset); if (name == NULL) return -1; } load_result = tzload(TZDEFRULES, sp, FALSE); if (load_result != 0) sp->leapcnt = 0; /* so, we're off a little */ if (*name != '\0') { if (*name == '<') { dstname = ++name; name = getqzname(name, '>'); if (*name != '>') return -1; dstlen = name - dstname; name++; } else { dstname = name; name = getzname(name); dstlen = name - dstname; /* length of DST zone name */ } if (*name != '\0' && *name != ',' && *name != ';') { name = getoffset(name, &dstoffset); if (name == NULL) return -1; } else dstoffset = stdoffset - SECSPERHOUR; if (*name == '\0' && load_result != 0) name = TZDEFRULESTRING; if (*name == ',' || *name == ';') { struct rule start; struct rule end; int year; int yearlim; int timecnt; time_t janfirst; ++name; if ((name = getrule(name, &start)) == NULL) return -1; if (*name++ != ',') return -1; if ((name = getrule(name, &end)) == NULL) return -1; if (*name != '\0') return -1; sp->typecnt = 2; /* standard time and DST */ /* ** Two transitions per year, from EPOCH_YEAR forward. */ sp->ttis[0] = sp->ttis[1] = zttinfo; sp->ttis[0].tt_gmtoff = -dstoffset; sp->ttis[0].tt_isdst = 1; sp->ttis[0].tt_abbrind = (int)(stdlen + 1); sp->ttis[1].tt_gmtoff = -stdoffset; sp->ttis[1].tt_isdst = 0; sp->ttis[1].tt_abbrind = 0; timecnt = 0; janfirst = 0; yearlim = EPOCH_YEAR + YEARSPERREPEAT; for (year = EPOCH_YEAR; year < yearlim; year++) { int_fast32_t starttime = transtime(year, &start, stdoffset), endtime = transtime(year, &end, dstoffset); int_fast32_t yearsecs = (year_lengths[isleap(year)] * SECSPERDAY); int reversed = endtime < starttime; if (reversed) { int_fast32_t swap = starttime; starttime = endtime; endtime = swap; } if (reversed || (starttime < endtime && (endtime - starttime < (yearsecs + (stdoffset - dstoffset))))) { if (TZ_MAX_TIMES - 2 < timecnt) break; yearlim = year + YEARSPERREPEAT + 1; sp->ats[timecnt] = janfirst; if (increment_overflow_time (&sp->ats[timecnt], starttime)) break; sp->types[timecnt++] = (unsigned char) reversed; sp->ats[timecnt] = janfirst; if (increment_overflow_time (&sp->ats[timecnt], endtime)) break; sp->types[timecnt++] = !reversed; } if (increment_overflow_time(&janfirst, yearsecs)) break; } sp->timecnt = timecnt; if (!timecnt) sp->typecnt = 1; /* Perpetual DST. */ } else { int_fast32_t theirstdoffset, theirdstoffset, theiroffset; int isdst; if (*name != '\0') return -1; /* ** Initial values of theirstdoffset and theirdstoffset. */ theirstdoffset = 0; for (int i = 0; i < sp->timecnt; ++i) { int j = sp->types[i]; if (!sp->ttis[j].tt_isdst) { theirstdoffset = -sp->ttis[j].tt_gmtoff; break; } } theirdstoffset = 0; for (int i = 0; i < sp->timecnt; ++i) { int j = sp->types[i]; if (sp->ttis[j].tt_isdst) { theirdstoffset = -sp->ttis[j].tt_gmtoff; break; } } /* ** Initially we're assumed to be in standard time. */ isdst = FALSE; theiroffset = theirstdoffset; /* ** Now juggle transition times and types ** tracking offsets as you do. */ for (int i = 0; i < sp->timecnt; ++i) { int j = sp->types[i]; sp->types[i] = (unsigned char)sp->ttis[j].tt_isdst; if (sp->ttis[j].tt_ttisgmt) { /* No adjustment to transition time */ } else { /* ** If summer time is in effect, and the ** transition time was not specified as ** standard time, add the summer time ** offset to the transition time; ** otherwise, add the standard time ** offset to the transition time. */ /* ** Transitions from DST to DDST ** will effectively disappear since ** POSIX provides for only one DST ** offset. */ if (isdst && !sp->ttis[j].tt_ttisstd) { sp->ats[i] += dstoffset - theirdstoffset; } else { sp->ats[i] += stdoffset - theirstdoffset; } } theiroffset = -sp->ttis[j].tt_gmtoff; if (sp->ttis[j].tt_isdst) theirdstoffset = theiroffset; else theirstdoffset = theiroffset; } /* ** Finally, fill in ttis. */ sp->ttis[0] = sp->ttis[1] = zttinfo; sp->ttis[0].tt_gmtoff = -stdoffset; sp->ttis[0].tt_isdst = FALSE; sp->ttis[0].tt_abbrind = 0; sp->ttis[1].tt_gmtoff = -dstoffset; sp->ttis[1].tt_isdst = TRUE; sp->ttis[1].tt_abbrind = (int)(stdlen + 1); sp->typecnt = 2; } } else { dstlen = 0; sp->typecnt = 1; /* only standard time */ sp->timecnt = 0; sp->ttis[0] = zttinfo; sp->ttis[0].tt_gmtoff = -stdoffset; sp->ttis[0].tt_isdst = 0; sp->ttis[0].tt_abbrind = 0; } sp->charcnt = (int)(stdlen + 1); if (dstlen != 0) sp->charcnt += dstlen + 1; if ((size_t) sp->charcnt > sizeof sp->chars) return -1; cp = sp->chars; (void) strncpy(cp, stdname, stdlen); cp += stdlen; *cp++ = '\0'; if (dstlen != 0) { (void) strncpy(cp, dstname, dstlen); *(cp + dstlen) = '\0'; } return 0; } static int typesequiv(const struct state * const sp, const int a, const int b) { int result; if (sp == NULL || a < 0 || a >= sp->typecnt || b < 0 || b >= sp->typecnt) result = FALSE; else { const struct ttinfo * ap = &sp->ttis[a]; const struct ttinfo * bp = &sp->ttis[b]; result = ap->tt_gmtoff == bp->tt_gmtoff && ap->tt_isdst == bp->tt_isdst && ap->tt_ttisstd == bp->tt_ttisstd && ap->tt_ttisgmt == bp->tt_ttisgmt && strcmp(&sp->chars[ap->tt_abbrind], &sp->chars[bp->tt_abbrind]) == 0; } return result; } // #nocov end static int leaps_thru_end_of(const int y) { return (y >= 0) ? (y / 4 - y / 100 + y / 400) : -(leaps_thru_end_of(-(y + 1)) + 1); } static struct tm * timesub(const time_t *const timep, const int_fast32_t offset, const struct state *const sp, struct tm *const tmp) { const struct lsinfo * lp; time_t tdays; int idays; /* unsigned would be so 2003 */ int_fast64_t rem; int y; const int * ip; int_fast64_t corr; int hit; int i; corr = 0; hit = 0; i = sp->leapcnt; while (--i >= 0) { lp = &sp->lsis[i]; // #nocov start if (*timep >= lp->ls_trans) { if (*timep == lp->ls_trans) { hit = ((i == 0 && lp->ls_corr > 0) || lp->ls_corr > sp->lsis[i - 1].ls_corr); if (hit) while (i > 0 && sp->lsis[i].ls_trans == sp->lsis[i - 1].ls_trans + 1 && sp->lsis[i].ls_corr == sp->lsis[i - 1].ls_corr + 1) { ++hit; --i; } } corr = lp->ls_corr; break; // #nocov end } } y = EPOCH_YEAR; tdays = *timep / SECSPERDAY; rem = *timep - tdays * SECSPERDAY; while (tdays < 0 || tdays >= year_lengths[isleap(y)]) { int newy; time_t tdelta; int idelta; int leapdays; tdelta = tdays / DAYSPERLYEAR; if (! ((! TYPE_SIGNED(time_t) || INT_MIN <= tdelta) && tdelta <= INT_MAX)) return NULL; // #nocov idelta = (int)tdelta; if (idelta == 0) idelta = (tdays < 0) ? -1 : 1; newy = y; if (increment_overflow(&newy, idelta)) return NULL; // #nocov leapdays = leaps_thru_end_of(newy - 1) - leaps_thru_end_of(y - 1); tdays -= ((time_t) newy - y) * DAYSPERNYEAR; tdays -= leapdays; y = newy; } { int_fast32_t seconds; seconds = (int_fast32_t)(tdays * SECSPERDAY); tdays = seconds / SECSPERDAY; rem += seconds - tdays * SECSPERDAY; } /* ** Given the range, we can now fearlessly cast... */ idays = (int)tdays; rem += offset - corr; while (rem < 0) { // #nocov start rem += SECSPERDAY; --idays; } while (rem >= SECSPERDAY) { rem -= SECSPERDAY; ++idays; } while (idays < 0) { if (increment_overflow(&y, -1)) return NULL; idays += year_lengths[isleap(y)]; } while (idays >= year_lengths[isleap(y)]) { idays -= year_lengths[isleap(y)]; if (increment_overflow(&y, 1)) return NULL; // #nocov end } // Previously we returned 'year + base', so keep behaviour // It seems like R now returns just 'year - 1900' (as libc does) // But better for continuity to do as before tmp->tm_year = y + TM_YEAR_BASE; if (increment_overflow(&tmp->tm_year, -TM_YEAR_BASE)) return NULL; // #nocov tmp->tm_yday = idays; /* ** The "extra" mods below avoid overflow problems. */ tmp->tm_wday = EPOCH_WDAY + ((y - EPOCH_YEAR) % DAYSPERWEEK) * (DAYSPERNYEAR % DAYSPERWEEK) + leaps_thru_end_of(y - 1) - leaps_thru_end_of(EPOCH_YEAR - 1) + idays; tmp->tm_wday %= DAYSPERWEEK; if (tmp->tm_wday < 0) tmp->tm_wday += DAYSPERWEEK; // #nocov tmp->tm_hour = (int) (rem / SECSPERHOUR); rem %= SECSPERHOUR; tmp->tm_min = (int) (rem / SECSPERMIN); /* ** A positive leap second requires a special ** representation. This uses "... ??:59:60" et seq. */ tmp->tm_sec = (int) (rem % SECSPERMIN) + hit; ip = mon_lengths[isleap(y)]; for (tmp->tm_mon = 0; idays >= ip[tmp->tm_mon]; ++(tmp->tm_mon)) idays -= ip[tmp->tm_mon]; tmp->tm_mday = (int) (idays + 1); tmp->tm_isdst = 0; #if ! (defined(__MINGW32__) || defined(__MINGW64__) || defined(__sun) || defined(sun) || defined(_AIX)) //#ifdef HAVE_TM_GMTOFF tmp->tm_gmtoff = offset; #endif return tmp; } static void gmtload(struct state * const sp) { if (tzload(gmt, sp, TRUE) != 0) (void) tzparse(gmt, sp, TRUE); } /* ** gmtsub is to gmtime as localsub is to localtime. */ static struct tm * gmtsub(const time_t *const timep, const int_fast32_t offset, struct tm *const tmp) { struct tm * result; if (!gmt_is_set) { gmt_is_set = TRUE; gmtload(gmtptr); } result = timesub(timep, offset, gmtptr, tmp); return result; } // [[Rcpp::register]] struct tm * gmtime_(const time_t * const timep) { return gmtsub(timep, 0L, &tm); } } Rcpp/src/attributes.cpp0000644000176200001440000043217715014017044014651 0ustar liggesusers// attributes.cpp: Rcpp R/C++ interface class library -- Rcpp attributes // // Copyright (C) 2012 - 2020 JJ Allaire, Dirk Eddelbuettel and Romain Francois // Copyright (C) 2021 - 2025 JJ Allaire, Dirk Eddelbuettel, Romain Francois, Iñaki Ucar and Travers Ching // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #define COMPILING_RCPP #include #include #include #include #include #include #include #include #include #include // for std::endl #include #include #define RCPP_NO_SUGAR #include /******************************************************************* * AttributesUtil.h *******************************************************************/ namespace Rcpp { namespace attributes { // Utility class for getting file existence and last modified time class FileInfo { public: // create from path explicit FileInfo(const std::string& path); // create from R list explicit FileInfo(const List& fileInfo) { // #nocov start path_ = as(fileInfo["path"]); exists_ = as(fileInfo["exists"]); lastModified_ = as(fileInfo["lastModified"]); } // #nocov end // convert to R list List toList() const { List fileInfo; fileInfo["path"] = path_; fileInfo["exists"] = exists_; fileInfo["lastModified"] = lastModified_; return fileInfo; } std::string path() const { return path_; } bool exists() const { return exists_; } double lastModified() const { return lastModified_; } std::string extension() const { std::string::size_type pos = path_.find_last_of('.'); if (pos != std::string::npos) return path_.substr(pos); else return ""; // #nocov } bool operator<(const FileInfo& other) const { return path_ < other.path_; }; bool operator==(const FileInfo& other) const { return path_ == other.path_ && exists_ == other.exists_ && lastModified_ == other.lastModified_; }; bool operator!=(const FileInfo& other) const { return ! (*this == other); }; std::ostream& operator<<(std::ostream& os) const { os << path_; return os; } private: std::string path_; bool exists_; double lastModified_; }; // Remove a file bool removeFile(const std::string& path); // Recursively create a directory void createDirectory(const std::string& path); // Known whitespace chars extern const char * const kWhitespaceChars; // Query whether a character is whitespace bool isWhitespace(char ch); // Trim a string void trimWhitespace(std::string* pStr); // Strip trailing line comments void stripTrailingLineComments(std::string* pStr); // Strip balanced quotes from around a string (assumes already trimmed) void stripQuotes(std::string* pStr); // is the passed string quoted? bool isQuoted(const std::string& str); // does a string end with another string? bool endsWith(const std::string& str, const std::string& suffix); // show a warning message void showWarning(const std::string& msg); // is the line a C++ roxygen comment? (started with //') bool isRoxygenCpp(const std::string& str); } // namespace attributes } // namespace Rcpp /******************************************************************* * AttributesTypes.h *******************************************************************/ namespace Rcpp { namespace attributes { // Known attribute names & parameters const char * const kExportAttribute = "export"; const char * const kExportName = "name"; const char * const kExportRng = "rng"; const char * const kExportInvisible = "invisible"; const char * const kExportSignature = "signature"; const char * const kInitAttribute = "init"; const char * const kDependsAttribute = "depends"; const char * const kPluginsAttribute = "plugins"; const char * const kInterfacesAttribute = "interfaces"; const char * const kInterfaceR = "r"; const char * const kInterfaceCpp = "cpp"; const char * const kParamValueFalse = "false"; const char * const kParamValueTrue = "true"; const char * const kParamValueFALSE = "FALSE"; const char * const kParamValueTRUE = "TRUE"; const char * const kParamBlockStart = "{;"; const char * const kParamBlockEnd = "}"; // Type info class Type { public: Type(): isConst_(false), isReference_(false) {} Type(const std::string& name, bool isConst, bool isReference) : name_(name), isConst_(isConst), isReference_(isReference) { } bool empty() const { return name().empty(); } bool operator==(const Type& other) const { // #nocov start return name_ == other.name_ && isConst_ == other.isConst_ && isReference_ == other.isReference_; }; // #nocov end bool operator!=(const Type& other) const { return !(*this == other); }; const std::string& name() const { return name_; } std::string full_name() const { std::string res ; if( isConst() ) res += "const " ; res += name() ; if( isReference() ) res += "&" ; return res ; } bool isVoid() const { return name() == "void"; } bool isConst() const { return isConst_; } bool isReference() const { return isReference_; } private: std::string name_; bool isConst_; bool isReference_; }; // Argument info class Argument { public: Argument() {} Argument(const std::string& name, const Type& type, const std::string& defaultValue) : name_(name), type_(type), defaultValue_(defaultValue) { } bool empty() const { return type().empty(); } bool operator==(const Argument& other) const { // #nocov start return name_ == other.name_ && type_ == other.type_ && defaultValue_ == other.defaultValue_; }; // #nocov end bool operator!=(const Argument& other) const { return !(*this == other); }; const std::string& name() const { return name_; } const Type& type() const { return type_; } const std::string& defaultValue() const { return defaultValue_; } private: std::string name_; Type type_; std::string defaultValue_; }; // Function info class Function { public: Function() {} Function(const Type& type, const std::string& name, const std::vector& arguments) : type_(type), name_(name), arguments_(arguments) { } Function renamedTo(const std::string& name) const { // #nocov start return Function(type(), name, arguments()); } std::string signature() const { return signature(name()); } std::string signature(const std::string& name) const; bool isHidden() const { return name().find_first_of('.') == 0; } // #nocov end bool empty() const { return name().empty(); } bool operator==(const Function& other) const { // #nocov start return type_ == other.type_ && name_ == other.name_ && arguments_ == other.arguments_; }; // #nocov end bool operator!=(const Function& other) const { return !(*this == other); }; const Type& type() const { return type_; } const std::string& name() const { return name_; } const std::vector& arguments() const { return arguments_; } private: Type type_; std::string name_; std::vector arguments_; }; // Attribute parameter (with optional value) class Param { public: Param() {} explicit Param(const std::string& paramText); bool empty() const { return name().empty(); } bool operator==(const Param& other) const { // #nocov start return name_ == other.name_ && value_ == other.value_; }; // #nocov end bool operator!=(const Param& other) const { return !(*this == other); }; const std::string& name() const { return name_; } const std::string& value() const { return value_; } // #nocov private: std::string name_; std::string value_; }; // Attribute (w/ optional params and signature of function it qualifies) class Attribute { public: Attribute() {} Attribute(const std::string& name, const std::vector& params, const Function& function, const std::vector& roxygen) : name_(name), params_(params), function_(function), roxygen_(roxygen) { } bool empty() const { return name().empty(); } // #nocov start bool operator==(const Attribute& other) const { return name_ == other.name_ && params_ == other.params_ && function_ == other.function_ && roxygen_ == other.roxygen_; }; // #nocov end bool operator!=(const Attribute& other) const { return !(*this == other); }; const std::string& name() const { return name_; } const std::vector& params() const { return params_; } Param paramNamed(const std::string& name) const; bool hasParameter(const std::string& name) const { return !paramNamed(name).empty(); } const Function& function() const { return function_; } bool isExportedFunction() const { return (name() == kExportAttribute) && !function().empty(); } std::string exportedName() const { // check for explicit name parameter if (hasParameter(kExportName)) { return paramNamed(kExportName).value(); // #nocov } // otherwise un-named parameter in the first slot else if (!params().empty() && params()[0].value().empty()) { return params()[0].name(); // #nocov } // otherwise the actual function name { return function().name(); } } std::string exportedCppName() const { // #nocov start std::string name = exportedName(); std::replace(name.begin(), name.end(), '.', '_'); return name; } // #nocov end bool rng() const { Param rngParam = paramNamed(kExportRng); if (!rngParam.empty()) return rngParam.value() == kParamValueTrue || // #nocov rngParam.value() == kParamValueTRUE; // #nocov else return true; } bool invisible() const { Param invisibleParam = paramNamed(kExportInvisible); if (!invisibleParam.empty()) return invisibleParam.value() == kParamValueTrue || // #nocov invisibleParam.value() == kParamValueTRUE; // #nocov else return false; } const std::vector& roxygen() const { return roxygen_; } std::string customRSignature() const { Param sigParam = paramNamed(kExportSignature); std::string sig = sigParam.value(); trimWhitespace(&sig); if (sig.empty()) return sig; if (sig.back() == '}') sig = sig.substr(0, sig.size()-1); // check sig.empty again since we deleted an element if (sig.empty()) return sig; if (sig.front() == '{') sig.erase(0,1); return sig; } private: std::string name_; std::vector params_; Function function_; std::vector roxygen_; }; // Operator << for parsed types std::ostream& operator<<(std::ostream& os, const Type& type); std::ostream& operator<<(std::ostream& os, const Argument& argument); std::ostream& operator<<(std::ostream& os, const Function& function); std::ostream& operator<<(std::ostream& os, const Param& param); std::ostream& operator<<(std::ostream& os, const Attribute& attribute); // interface to source file attributes class SourceFileAttributes { public: virtual ~SourceFileAttributes() {}; virtual const std::string& sourceFile() const = 0; virtual bool hasInterface(const std::string& name) const = 0; typedef std::vector::const_iterator const_iterator; virtual const_iterator begin() const = 0; virtual const_iterator end() const = 0; virtual const std::vector& modules() const = 0; virtual const std::vector >& roxygenChunks() const = 0; virtual bool hasGeneratorOutput() const = 0; virtual bool hasPackageInit() const = 0; }; } // namespace attributes } // namespace Rcpp /******************************************************************* * AttributesParser.h *******************************************************************/ namespace Rcpp { namespace attributes { // Helper class for determining whether we are in a comment class CommentState { public: CommentState() : inComment_(false) {} private: // prohibit copying CommentState(const CommentState&); CommentState& operator=(const CommentState&); public: bool inComment() const { return inComment_; } void submitLine(const std::string& line); void reset() { inComment_ = false; } private: bool inComment_; }; // Class used to parse and return attribute information from a source file class SourceFileAttributesParser : public SourceFileAttributes { public: explicit SourceFileAttributesParser(const std::string& sourceFile, const std::string& packageFile, bool parseDependencies); private: // prohibit copying SourceFileAttributesParser(const SourceFileAttributesParser&); SourceFileAttributesParser& operator=(const SourceFileAttributesParser&); public: // implemetnation of SourceFileAttributes interface virtual const std::string& sourceFile() const { // #nocov return sourceFile_; // #nocov } virtual const_iterator begin() const { return attributes_.begin(); } virtual const_iterator end() const { return attributes_.end(); } virtual const std::vector& modules() const { return modules_; } virtual const std::vector >& roxygenChunks() const { return roxygenChunks_; } virtual bool hasGeneratorOutput() const { return !attributes_.empty() || !modules_.empty() || !roxygenChunks_.empty(); } virtual bool hasInterface(const std::string& name) const { for (const_iterator it=begin(); it != end(); ++it) { if (it->name() == kInterfacesAttribute) { return it->hasParameter(name); // #nocov } } // if there's no interfaces attrbute we default to R if (name == kInterfaceR) return true; else return false; } // Was a package init function found? bool hasPackageInit() const { return hasPackageInit_; } // Get lines of embedded R code const std::vector& embeddedR() const { return embeddedR_; } // Get source dependencies const std::vector& sourceDependencies() const { return sourceDependencies_; }; private: // Parsing helpers Attribute parseAttribute(const std::vector& match, int lineNumber); std::vector parseParameters(const std::string& input); Function parseFunction(size_t lineNumber); std::string parseSignature(size_t lineNumber); std::vector parseArguments(const std::string& argText); Type parseType(const std::string& text); // Validation helpers bool isKnownAttribute(const std::string& name) const; void attributeWarning(const std::string& message, const std::string& attribute, size_t lineNumber); void attributeWarning(const std::string& message, size_t lineNumber); void rcppExportWarning(const std::string& message, size_t lineNumber); void rcppExportNoFunctionFoundWarning(size_t lineNumber); void rcppExportInvalidParameterWarning(const std::string& param, size_t lineNumber); void rcppInterfacesWarning(const std::string& message, size_t lineNumber); private: std::string sourceFile_; CharacterVector lines_; std::vector attributes_; std::vector modules_; bool hasPackageInit_; std::vector embeddedR_; std::vector sourceDependencies_; std::vector > roxygenChunks_; std::vector roxygenBuffer_; }; } // namespace attributes } // namespace Rcpp /******************************************************************* * AttributesGen.h *******************************************************************/ namespace Rcpp { namespace attributes { // Abstract class which manages writing of code for compileAttributes class ExportsGenerator { protected: ExportsGenerator(const std::string& targetFile, const std::string& package, const std::string& commentPrefix); private: // prohibit copying ExportsGenerator(const ExportsGenerator&); ExportsGenerator& operator=(const ExportsGenerator&); public: virtual ~ExportsGenerator() {} // Name of target file and package const std::string& targetFile() const { return targetFile_; } const std::string& package() const { return package_; } const std::string& packageCpp() const { return packageCpp_; } const std::string packageCppPrefix() const { return "_" + packageCpp(); } // Abstract interface for code generation virtual void writeBegin() = 0; void writeFunctions(const SourceFileAttributes& attributes, bool verbose); // see doWriteFunctions below virtual void writeEnd(bool hasPackageInit) = 0; virtual bool commit(const std::vector& includes) = 0; // Remove the generated file entirely bool remove(); // Allow generator to appear as a std::ostream& operator std::ostream&() { return codeStream_; } protected: // Allow access to the output stream std::ostream& ostr() { return codeStream_; } bool hasCppInterface() const { return hasCppInterface_; } // Shared knowledge about function namees std::string exportValidationFunction() { return "RcppExport_validate"; } std::string exportValidationFunctionRegisteredName() { return packageCppPrefix() + "_" + exportValidationFunction(); } std::string registerCCallableExportedName() { // #nocov return packageCppPrefix() + "_RcppExport_registerCCallable"; // #nocov } // Commit the stream -- is a no-op if the existing code is identical // to the generated code. Returns true if data was written and false // if it wasn't (throws exception on io error) bool commit(const std::string& preamble = std::string()); // Convert a dot in package name to underscore for use in header file name std::string dotNameHelper(const std::string & name) const; private: // Private virtual for doWriteFunctions so the base class // can always intercept writeFunctions virtual void doWriteFunctions(const SourceFileAttributes& attributes, bool verbose) = 0; // Check whether it's safe to overwrite this file (i.e. whether we // generated the file in the first place) bool isSafeToOverwrite() const { return existingCode_.empty() || (existingCode_.find(generatorToken()) != std::string::npos); } // UUID that we write into a comment within the file (so that we can // strongly identify that a file was generated by us before overwriting it) std::string generatorToken() const { return "10BE3573-1514-4C36-9D1C-5A225CD40393"; } private: std::string targetFile_; std::string package_; std::string packageCpp_; std::string commentPrefix_; std::string existingCode_; std::ostringstream codeStream_; bool hasCppInterface_; }; // Class which manages generating RcppExports.cpp class CppExportsGenerator : public ExportsGenerator { public: explicit CppExportsGenerator(const std::string& packageDir, const std::string& package, const std::string& fileSep); virtual void writeBegin() {}; virtual void writeEnd(bool hasPackageInit); virtual bool commit(const std::vector& includes); private: virtual void doWriteFunctions(const SourceFileAttributes& attributes, bool verbose); std::string registerCCallable(size_t indent, const std::string& exportedName, const std::string& name) const; private: // for generating calls to init functions std::vector initFunctions_; // for generating C++ interfaces std::vector cppExports_; // for generating Rcpp::export native routine registration std::vector nativeRoutines_; // for generating module native routine registration std::vector modules_; }; // Class which manages generating PackageName_RcppExports.h header file class CppExportsIncludeGenerator : public ExportsGenerator { public: CppExportsIncludeGenerator(const std::string& packageDir, const std::string& package, const std::string& fileSep); virtual void writeBegin(); virtual void writeEnd(bool hasPackageInit); virtual bool commit(const std::vector& includes); private: virtual void doWriteFunctions(const SourceFileAttributes& attributes, bool verbose); std::string getCCallable(const std::string& function) const; std::string getHeaderGuard() const; private: std::string includeDir_; }; // Class which manages generating PackageName.h header file class CppPackageIncludeGenerator : public ExportsGenerator { public: CppPackageIncludeGenerator(const std::string& packageDir, const std::string& package, const std::string& fileSep); virtual void writeBegin() {} virtual void writeEnd(bool hasPackageInit); virtual bool commit(const std::vector& includes); private: virtual void doWriteFunctions(const SourceFileAttributes&, bool) {} std::string getHeaderGuard() const; private: std::string includeDir_; }; // Class which manages generator RcppExports.R class RExportsGenerator : public ExportsGenerator { public: RExportsGenerator(const std::string& packageDir, const std::string& package, bool registration, const std::string& fileSep); virtual void writeBegin() {} virtual void writeEnd(bool hasPackageInit); virtual bool commit(const std::vector& includes); private: virtual void doWriteFunctions(const SourceFileAttributes& attributes, bool verbose); bool registration_; }; // Class to manage and dispatch to a list of generators class ExportsGenerators { public: typedef std::vector::iterator Itr; ExportsGenerators() {} virtual ~ExportsGenerators(); void add(ExportsGenerator* pGenerator); void writeBegin(); void writeFunctions(const SourceFileAttributes& attributes, bool verbose); void writeEnd(bool hasPackageInit); // Commit and return a list of the files that were updated std::vector commit( const std::vector& includes); // Remove and return a list of files that were removed std::vector remove(); private: // prohibit copying ExportsGenerators(const ExportsGenerators&); ExportsGenerators& operator=(const ExportsGenerators&); private: std::vector generators_; }; // Standalone generation helpers (used by sourceCpp) std::string generateRArgList(const Function& function); bool checkRSignature(const Function& function, std::string args); void initializeGlobals(std::ostream& ostr); void generateCpp(std::ostream& ostr, const SourceFileAttributes& attributes, bool includePrototype, bool cppInterface, const std::string& contextId); } // namespace attributes } // namespace Rcpp /******************************************************************* * AttributesParser.cpp *******************************************************************/ namespace Rcpp { namespace attributes { namespace { Rcpp::List regexMatches(Rcpp::CharacterVector lines, const std::string& regex) { Rcpp::Environment base("package:base"); Rcpp::Function regexec = base["regexec"]; Rcpp::Function regmatches = base["regmatches"]; Rcpp::RObject result = regexec(regex, lines); Rcpp::List matches = regmatches(lines, result); return matches; } template void readFile(const std::string& file, Stream& os) { std::ifstream ifs(file.c_str()); if (ifs.fail()) throw Rcpp::file_io_error(file); // #nocov os << ifs.rdbuf(); ifs.close(); } template void readLines(std::istream& is, Collection* pLines) { pLines->clear(); std::string line; while(std::getline(is, line)) { // strip \r (for the case of windows line terminators on posix) if (line.length() > 0 && *line.rbegin() == '\r') line.erase(line.length()-1, 1); stripTrailingLineComments(&line); pLines->push_back(line); } } bool addUniqueDependency(Rcpp::CharacterVector include, std::vector* pDependencies) { // return false if we already have this include std::string path = Rcpp::as(include); for (size_t i = 0; isize(); ++i) { if (pDependencies->at(i).path() == path) return false; } // add it and return true pDependencies->push_back(FileInfo(path)); return true; } void parseSourceDependencies(const std::string& sourceFile, std::vector* pDependencies) { // import R functions Rcpp::Environment baseEnv = Rcpp::Environment::base_env(); Rcpp::Function dirname = baseEnv["dirname"]; Rcpp::Function filepath = baseEnv["file.path"]; Rcpp::Function normalizePath = baseEnv["normalizePath"]; Rcpp::Function fileExists = baseEnv["file.exists"]; Rcpp::Environment toolsEnv = Rcpp::Environment::namespace_env( "tools"); Rcpp::Function filePathSansExt = toolsEnv["file_path_sans_ext"]; // get the path to the source file's directory Rcpp::CharacterVector sourceDir = dirname(sourceFile); // read the source file into a buffer std::stringstream buffer; readFile(sourceFile, buffer); // Now read into a list of strings (which we can pass to regexec) // First read into a std::deque (which will handle lots of append // operations efficiently) then copy into an R chracter vector std::deque lines; readLines(buffer, &lines); Rcpp::CharacterVector linesVector = Rcpp::wrap(lines); // look for local includes Rcpp::List matches = regexMatches( linesVector, "^\\s*#include\\s*\"([^\"]+)\"\\s*$"); // accumulate local includes (skip commented sections) CommentState commentState; std::vector newDependencies; for (int i = 0; i(include))); } std::vector exts; exts.push_back(".cc"); exts.push_back(".cpp"); for (size_t i = 0; i( // #nocov filePathSansExt(include)) + exts[i]; exists = fileExists(file); if (exists[0]) { if (addUniqueDependency(file, pDependencies)) { FileInfo fileInfo(file); newDependencies.push_back(fileInfo); } } } } } } } // look for dependencies recursively for (size_t i = 0; i parseSourceDependencies( std::string sourceFile) { // normalize source file Rcpp::Environment baseEnv = Rcpp::Environment::base_env(); Rcpp::Function normalizePath = baseEnv["normalizePath"]; sourceFile = Rcpp::as(normalizePath(sourceFile, "/")); // parse dependencies std::vector dependencies; parseSourceDependencies(sourceFile, &dependencies); // remove main source file dependencies.erase(std::remove(dependencies.begin(), // #nocov dependencies.end(), FileInfo(sourceFile)), dependencies.end()); return dependencies; } // Parse embedded R code chunks from a file (receives the lines of the // file as a CharcterVector for using with regexec and as a standard // stl vector for traversal/insepection) std::vector parseEmbeddedR( Rcpp::CharacterVector linesVector, const std::deque& lines) { Rcpp::List matches = regexMatches(linesVector, "^\\s*/\\*{3,}\\s*[Rr]\\s*$"); bool withinRBlock = false; CommentState commentState; std::vector embeddedR; for (int i = 0; i 0; // check state and do the right thing if (beginRBlock) { withinRBlock = true; // #nocov } else if (withinRBlock) { if (commentState.inComment()) // #nocov start embeddedR.push_back(line); else withinRBlock = false; // #nocov end } } return embeddedR; } } // anonymous namespace // Generate a type signature for the function with the provided name // (type signature == function pointer declaration) std::string Function::signature(const std::string& name) const { // #nocov start std::ostringstream ostr; ostr << type() << "(*" << name << ")("; const std::vector& args = arguments(); for (std::size_t i = 0; i::const_iterator it = params_.begin(); it != params_.end(); ++it) { if (it->name() == name) // #nocov return *it; // #nocov } return Param(); } // Type operator << std::ostream& operator<<(std::ostream& os, const Type& type) { if (!type.empty()) { if (type.isConst()) os << "const "; os << type.name(); if (type.isReference()) os << "&"; } return os; } // Print argument void printArgument(std::ostream& os, const Argument& argument, bool printDefault = true) { if (!argument.empty()) { os << argument.type(); if (!argument.name().empty()) { os << " "; os << argument.name(); if (printDefault && !argument.defaultValue().empty()) os << " = " << argument.defaultValue(); // #nocov } } } // Argument operator << std::ostream& operator<<(std::ostream& os, const Argument& argument) {// #nocov start printArgument(os, argument); return os; // #nocov end } // Print function void printFunction(std::ostream& os, const Function& function, bool printArgDefaults = true) { if (!function.empty()) { if (!function.type().empty()) { os << function.type(); os << " "; } os << function.name(); os << "("; const std::vector& arguments = function.arguments(); for (std::size_t i = 0; i& params = attribute.params(); if (params.size() > 0) { os << "("; for (std::size_t i = 0; i lines; readLines(buffer, &lines); lines_ = Rcpp::wrap(lines); // Scan for attributes CommentState commentState; Rcpp::List matches = regexMatches(lines_, "^\\s*//\\s*\\[\\[Rcpp::(\\w+)(\\(.*?\\))?\\]\\]\\s*$"); for (int i = 0; i 0) { // if the match size isn't 3 then regmatches has not behaved // as expected (it should return a vector of either 0 or 3 // elements). we don't ever expect this to occur but if it // does let's not crash if (match.size() != 3) continue; // #nocov // add the attribute Attribute attr = parseAttribute( Rcpp::as >(match), i); attributes_.push_back(attr); } // if it's not an attribute line then it could still be a // line of interest (e.g. roxygen comment) else { // save roxygen comments if (line.find("//'") == 0) { std::string roxLine = "#" + line.substr(2); roxygenBuffer_.push_back(roxLine); } // a non-roxygen line causes us to clear the roxygen buffer else if (!roxygenBuffer_.empty()) { roxygenChunks_.push_back(roxygenBuffer_); // #nocov roxygenBuffer_.clear(); // #nocov } } } // Scan for Rcpp modules commentState.reset(); Rcpp::List modMatches = regexMatches(lines_, "^\\s*RCPP_MODULE\\s*\\(\\s*(\\w+)\\s*\\).*$"); for (int i = 0; i 0) { const char * name = match[1]; modules_.push_back(name); } } // Scan for package init function hasPackageInit_ = false; commentState.reset(); std::string pkgInit = "R_init_" + packageNameCpp; Rcpp::List initMatches = regexMatches(lines_, "^[^/]+" + pkgInit + ".*DllInfo.*$"); for (int i = 0; i 0) { hasPackageInit_ = true; // #nocov start break; } // #nocov end } // Parse embedded R embeddedR_ = parseEmbeddedR(lines_, lines); // Recursively parse dependencies if requested if (parseDependencies) { // get source dependencies sourceDependencies_ = parseSourceDependencies(sourceFile); // parse attributes and modules from each dependent file for (size_t i = 0; i& match, int lineNumber) { // Attribute name std::string name = match[1]; // Warn if this is an unknown attribute if (!isKnownAttribute(name)) { attributeWarning("Unrecognized attribute Rcpp::" + name, // #nocov lineNumber); // #nocov } // Extract params if we've got them std::vector params; std::string paramsText = match[2]; if (!paramsText.empty()) { // we know from the regex that it's enclosed in parens so remove // trim before we do this just in case someone updates the regex // to allow for whitespace around the call trimWhitespace(¶msText); paramsText = paramsText.substr(1, paramsText.size()-2); // parse the parameters params = parseParameters(paramsText); } // Extract function signature if this is a function attribute // and it doesn't appear at the end of the file Function function; // special handling for export and init if (name == kExportAttribute || name == kInitAttribute) { // parse the function (unless we are at the end of the file in // which case we print a warning) if ((lineNumber + 1) < lines_.size()) function = parseFunction(lineNumber + 1); else rcppExportWarning("No function found", lineNumber); // #nocov // validate parameters for (std::size_t i=0; i 0)) { rcppExportWarning("No value specified for parameter '" + name + "'", lineNumber); } // parameter that isn't name or rng else if (!value.empty() && (name != kExportName) && (name != kExportRng) && (name != kExportInvisible) && (name != kExportSignature)) { rcppExportWarning("Unrecognized parameter '" + name + "'", lineNumber); } // rng that isn't true or false else if (name == kExportRng) { if (value != kParamValueFalse && value != kParamValueTrue && value != kParamValueFALSE && value != kParamValueTRUE) { rcppExportWarning("rng value must be true or false", lineNumber); } } // invisible that isn't true of false else if (name == kExportInvisible) { if (value != kParamValueFalse && value != kParamValueTrue && value != kParamValueFALSE && value != kParamValueTRUE) { rcppExportWarning("invisible value must be true or false", lineNumber); // #nocov end } } } } // validate interfaces parameter else if (name == kInterfacesAttribute) { if (params.empty()) { // #nocov start rcppInterfacesWarning("No interfaces specified", lineNumber);// } else { for (std::size_t i=0; i SourceFileAttributesParser::parseParameters( const std::string& input) { std::string::size_type blockstart = input.find_first_of(kParamBlockStart); std::string::size_type blockend = input.find_last_of(kParamBlockEnd); const std::string delimiters(","); std::vector params; std::string::size_type current; std::string::size_type next = std::string::npos; std::string::size_type signature_param_start = std::string::npos; do { // #nocov next = input.find_first_not_of(delimiters, next + 1); if (next == std::string::npos) break; // #nocov current = next; do { next = input.find_first_of(delimiters, next + 1); } while((next >= blockstart) && (next <= blockend) && (next != std::string::npos)); params.push_back(Param(input.substr(current, next - current))); if(params.back().name() == kExportSignature) { signature_param_start = current; } } while(next != std::string::npos); // if the signature param was found, then check that the name, // start block and end block exist and are in the correct order if(signature_param_start != std::string::npos) { bool sigchecks = signature_param_start < blockstart && blockstart < blockend && blockstart != std::string::npos && blockend != std::string::npos; if(!sigchecks) { throw Rcpp::exception("signature parameter found but missing {}"); } } return params; } // Parse a function from the specified spot in the source file Function SourceFileAttributesParser::parseFunction(size_t lineNumber) { // Establish the text to parse for the signature std::string signature = parseSignature(lineNumber); if (signature.empty()) { rcppExportNoFunctionFoundWarning(lineNumber); // #nocov return Function(); // #nocov } // Start at the end and look for the () that deliniates the arguments // (bail with an empty result if we can't find them) std::string::size_type endParenLoc = signature.find_last_of(')'); std::string::size_type beginParenLoc = signature.find_first_of('('); if (endParenLoc == std::string::npos || beginParenLoc == std::string::npos || endParenLoc < beginParenLoc) { rcppExportNoFunctionFoundWarning(lineNumber); // #nocov return Function(); // #nocov } // Find the type and name by scanning backwards for the whitespace that // delimites the type and name Type type; std::string name; const std::string preambleText = signature.substr(0, beginParenLoc); for (std::string::const_reverse_iterator it = preambleText.rbegin(); it != preambleText.rend(); ++it) { char ch = *it; if (isWhitespace(ch)) { if (!name.empty()) { // we are at the break between type and name so we can also // extract the type std::string typeText; while (++it != preambleText.rend()) typeText.insert(0U, 1U, *it); type = parseType(typeText); // break (since we now have the name and the type) break; } else continue; // #nocov } else { name.insert(0U, 1U, ch); } } // If we didn't find a name then bail if (name.empty()) { rcppExportNoFunctionFoundWarning(lineNumber); // #nocov return Function(); // #nocov } // If we didn't find a type then bail if (type.empty()) { // #nocov start rcppExportWarning("No function return type found", lineNumber); return Function(); // #nocov end } // Now scan for arguments std::vector arguments; std::string argsText = signature.substr(beginParenLoc + 1, endParenLoc-beginParenLoc-1); std::vector args = parseArguments(argsText); for (std::vector::const_iterator it = args.begin(); it != args.end(); ++it) { // Get argument sans whitespace (bail if the arg is empty) std::string arg = *it; trimWhitespace(&arg); if (arg.empty()) { // we don't warn here because the compilation will fail anyway continue; // #nocov } // If the argument has an = within it then it has a default value std::string defaultValue; std::string::size_type eqPos = arg.find_first_of('='); if ( (eqPos != std::string::npos) && ((eqPos + 1) < arg.size()) ) { defaultValue = arg.substr(eqPos+1); trimWhitespace(&defaultValue); arg = arg.substr(0, eqPos); trimWhitespace(&arg); } // Scan backwards for whitespace to determine where the type ends // (we go backwards because whitespace is valid inside the type // identifier but invalid inside the variable name). Note that if // there is no whitespace we'll end up taking the whole string, // which allows us to capture a type with no variable (but note // we'll ultimately fail to parse types with no variable if they // have embedded whitespace) std::string::size_type pos = arg.find_last_of(kWhitespaceChars); // check for name std::string name; if (pos != std::string::npos) { // insert whitespace if variables are joint with '&' std::string::size_type ref_pos = arg.substr(pos).find_last_of("&"); if (ref_pos != std::string::npos) { pos += ref_pos + 1; // #nocov arg.insert(pos, " "); // #nocov } name = arg.substr(pos); trimWhitespace(&name); } if (name.empty()) { // #nocov start rcppExportInvalidParameterWarning(arg, lineNumber); return Function(); // #nocov end } // check for type string Type type = parseType(arg.substr(0, pos)); if (type.empty()) { // #nocov start rcppExportInvalidParameterWarning(arg, lineNumber); return Function(); // #nocov end } // add argument arguments.push_back(Argument(name, type, defaultValue)); } return Function(type, name, arguments); } // Parse the text of a function signature from the specified line std::string SourceFileAttributesParser::parseSignature(size_t lineNumber) { // Look for the signature termination ({ or ; not inside quotes) // on this line and then subsequent lines if necessary std::string signature; for (size_t i = lineNumber; i < (size_t)lines_.size(); i++) { std::string line; line = lines_[i]; bool insideQuotes = false; char prevChar = 0; // scan for { or ; not inside quotes for (size_t c = 0; c < line.length(); ++c) { // alias character char ch = line.at(c); // update quotes state if (ch == '"' && prevChar != '\\') insideQuotes = !insideQuotes; // found signature termination, append and return if (!insideQuotes && ((ch == '{') || (ch == ';'))) { signature.append(line.substr(0, c)); return signature; } // record prev char (used to check for escaped quote i.e. \") prevChar = ch; } // if we didn't find a terminator on this line then just append the line // and move on to the next line signature.append(line); signature.push_back(' '); } // Not found return std::string(); // #nocov } // Parse arguments from function signature. This is tricky because commas // are used to delimit arguments but are also valid inside template type // qualifiers. std::vector SourceFileAttributesParser::parseArguments( const std::string& argText) { int templateCount = 0; int parenCount = 0; std::string currentArg; std::vector args; char quote = 0; bool escaped = false; typedef std::string::const_iterator it_t; for (it_t it = argText.begin(); it != argText.end(); ++it) { // Store current character char ch = *it; // Ignore quoted strings and character values in single quotes if ( ! quote && (ch == '"' || ch == '\'')) quote = ch; else if (quote && ch == quote && ! escaped) quote = 0; // Escaped character inside quotes if (escaped) escaped = false; else if (quote && ch == '\\') escaped = true; // Detect end of argument declaration if ( ! quote && (ch == ',') && (templateCount == 0) && (parenCount == 0)) { args.push_back(currentArg); currentArg.clear(); continue; } // Append current character if not a space at start if ( ! currentArg.empty() || ch != ' ') currentArg.push_back(ch); // Count use of potentially enclosed brackets if ( ! quote) { switch(ch) { case '<': templateCount++; break; case '>': templateCount--; break; case '(': // #nocov start parenCount++; break; case ')': parenCount--; break; // #nocov end } } } if (!currentArg.empty()) args.push_back(currentArg); return args; } Type SourceFileAttributesParser::parseType(const std::string& text) { const std::string constQualifier("const"); const std::string referenceQualifier("&"); // trim whitespace std::string type = text; trimWhitespace(&type); // check for const and reference bool isConst = false; bool isReference = false; if (type.find(constQualifier) == 0) { isConst = true; type.erase(0, constQualifier.length()); } // if the type is now empty (because it was detected as only const) // then this is an invalid state so we bail if (type.empty()) return Type(); // #nocov if (type.find(referenceQualifier) == (type.length() - referenceQualifier.length())) { isReference = true; type.erase(type.length() - referenceQualifier.length()); } trimWhitespace(&type); // if the type is now empty because of some strange parse then bail if (type.empty()) return Type(); // #nocov return Type(type, isConst, isReference); } // Validation helpers bool SourceFileAttributesParser::isKnownAttribute(const std::string& name) const { return name == kExportAttribute || name == kInitAttribute || name == kDependsAttribute || name == kPluginsAttribute || name == kInterfacesAttribute; } // Print an attribute parsing related warning void SourceFileAttributesParser::attributeWarning( // #nocov start const std::string& message, const std::string& attribute, size_t lineNumber) { // get basename of source file for warning message Rcpp::Function basename = Rcpp::Environment::base_env()["basename"]; std::string file = Rcpp::as(basename(sourceFile_)); std::ostringstream ostr; ostr << message; if (!attribute.empty()) ostr << " for " << attribute << " attribute"; ostr << " at " << file << ":" << lineNumber; showWarning(ostr.str()); } void SourceFileAttributesParser::attributeWarning( const std::string& message, size_t lineNumber) { attributeWarning(message, "", lineNumber); } void SourceFileAttributesParser::rcppExportWarning( const std::string& message, size_t lineNumber) { attributeWarning(message, "Rcpp::export", lineNumber); } void SourceFileAttributesParser::rcppExportNoFunctionFoundWarning( size_t lineNumber) { rcppExportWarning("No function found", lineNumber); } void SourceFileAttributesParser::rcppExportInvalidParameterWarning( const std::string& param, size_t lineNumber) { rcppExportWarning("Invalid parameter: " "'" + param + "'", lineNumber); } void SourceFileAttributesParser::rcppInterfacesWarning( const std::string& message, size_t lineNumber) { attributeWarning(message + " (valid interfaces are 'r' and 'cpp')", "Rcpp::interfaces", lineNumber); } // #nocov end // Track /* */ comment state void CommentState::submitLine(const std::string& line) { std::size_t pos = 0; while (pos != std::string::npos) { // check for a // which would invalidate any other token found std::size_t lineCommentPos = line.find("//", pos); // look for the next token std::string token = inComment() ? "*/" : "/*"; pos = line.find(token, pos); // process the comment token if found if (pos != std::string::npos) { // break if the line comment precedes the comment token if (lineCommentPos != std::string::npos && lineCommentPos < pos) break; // #nocov inComment_ = !inComment_; pos += token.size(); } } } } // namespace attributes } // namespace Rcpp /******************************************************************* * AttributesGen.cpp *******************************************************************/ namespace Rcpp { namespace attributes { // constants namespace { const char * const kRcppExportsSuffix = "_RcppExports.h"; const char * const kTrySuffix = "_try"; } ExportsGenerator::ExportsGenerator(const std::string& targetFile, const std::string& package, const std::string& commentPrefix) : targetFile_(targetFile), package_(package), packageCpp_(package), commentPrefix_(commentPrefix), hasCppInterface_(false) { // read the existing target file if it exists if (FileInfo(targetFile_).exists()) { std::ifstream ifs(targetFile_.c_str()); // #nocov start if (ifs.fail()) throw Rcpp::file_io_error(targetFile_); std::stringstream buffer; buffer << ifs.rdbuf(); existingCode_ = buffer.str(); // #nocov end } std::replace(packageCpp_.begin(), packageCpp_.end(), '.', '_'); // see if this is safe to overwite and throw if it isn't if (!isSafeToOverwrite()) throw Rcpp::file_exists(targetFile_); // #nocov } void ExportsGenerator::writeFunctions( const SourceFileAttributes& attributes, bool verbose) { if (attributes.hasInterface(kInterfaceCpp)) hasCppInterface_ = true; // #nocov doWriteFunctions(attributes, verbose); } // Commit the stream -- is a no-op if the existing code is identical // to the generated code. Returns true if data was written and false // if it wasn't (throws exception on io error) bool ExportsGenerator::commit(const std::string& preamble) { // get the generated code std::string code = codeStream_.str(); // if there is no generated code AND the exports file does not // currently exist then do nothing if (code.empty() && !FileInfo(targetFile_).exists()) return false; // #nocov // write header/preamble std::ostringstream headerStream; headerStream << commentPrefix_ << " Generated by using " << "Rcpp::compileAttributes()" << " -> do not edit by hand" << std::endl; headerStream << commentPrefix_ << " Generator token: " << generatorToken() << std::endl << std::endl; if (!preamble.empty()) headerStream << preamble; // get generated code and only write it if there was a change std::string generatedCode = headerStream.str() + code; if (generatedCode != existingCode_) { // open the file std::ofstream ofs(targetFile_.c_str(), std::ofstream::out | std::ofstream::trunc); if (ofs.fail()) throw Rcpp::file_io_error(targetFile_); // #nocov // write generated code and return ofs << generatedCode; ofs.close(); return true; } else { return false; // #nocov } } // Remove the generated file entirely bool ExportsGenerator::remove() { return removeFile(targetFile_); } // Convert a possible dot in package name to underscore as needed for header file std::string ExportsGenerator::dotNameHelper(const std::string & name) const { std::string newname(name); std::replace(newname.begin(), newname.end(), '.', '_'); return newname; } CppExportsGenerator::CppExportsGenerator(const std::string& packageDir, const std::string& package, const std::string& fileSep) : ExportsGenerator( packageDir + fileSep + "src" + fileSep + "RcppExports.cpp", package, "//") { } void CppExportsGenerator::doWriteFunctions( const SourceFileAttributes& attributes, bool verbose) { // generate functions generateCpp(ostr(), attributes, true, attributes.hasInterface(kInterfaceCpp), packageCppPrefix()); // track cppExports, signatures, and native routines (we use these // at the end to generate the ValidateSignature and RegisterCCallable // functions, and to generate a package init function with native // routine registration) for (SourceFileAttributes::const_iterator // #nocov start it = attributes.begin(); it != attributes.end(); ++it) { if (it->isExportedFunction()) { // add it to the cpp exports list if we are generating // a C++ interface and it's not hidden if (attributes.hasInterface(kInterfaceCpp)) { Function fun = it->function().renamedTo(it->exportedCppName()); if (!fun.isHidden()) cppExports_.push_back(*it); } // add it to the native routines list nativeRoutines_.push_back(*it); } else if (it->name() == kInitAttribute) { initFunctions_.push_back(*it); } } // #nocov end // record modules const std::vector& modules = attributes.modules(); modules_.insert(modules_.end(), modules.begin(), modules.end()); // verbose if requested if (verbose) { // #nocov start Rcpp::Rcout << "Exports from " << attributes.sourceFile() << ":" << std::endl; for (std::vector::const_iterator it = attributes.begin(); it != attributes.end(); ++it) { if (it->isExportedFunction()) Rcpp::Rcout << " " << it->function() << std::endl; } Rcpp::Rcout << std::endl; // #nocov end } } void CppExportsGenerator::writeEnd(bool hasPackageInit) { // generate a function that can be used to validate exported // functions and their signatures prior to looking up with // GetCppCallable (otherwise inconsistent signatures between // client and library would cause a crash) if (hasCppInterface()) { ostr() << std::endl; // #nocov start ostr() << "// validate" << " (ensure exported C++ functions exist before " << "calling them)" << std::endl; ostr() << "static int " << exportValidationFunctionRegisteredName() << "(const char* sig) { " << std::endl; ostr() << " static std::set signatures;" << std::endl; ostr() << " if (signatures.empty()) {" << std::endl; for (std::size_t i=0;i routineNames; std::vector routineArgs; for (std::size_t i=0;i declarations = extraRoutines["declarations"]; std::vector callEntries = extraRoutines["call_entries"]; // add declarations for modules for (std::size_t i=0;i 0) { ostr() << std::endl; for (std::size_t i = 0; i 0) { for (std::size_t i = 0; i& includes) { // includes std::ostringstream ostr; if (!includes.empty()) { for (std::size_t i=0;i" << std::endl; // #nocov ostr << "#include " << std::endl; // #nocov } ostr << std::endl; // always bring in Rcpp ostr << "using namespace Rcpp;" << std::endl << std::endl; // initialize references to global Rostreams initializeGlobals(ostr); // commit with preamble return ExportsGenerator::commit(ostr.str()); } CppExportsIncludeGenerator::CppExportsIncludeGenerator( const std::string& packageDir, const std::string& package, const std::string& fileSep) : ExportsGenerator( packageDir + fileSep + "inst" + fileSep + "include" + fileSep + dotNameHelper(package) + kRcppExportsSuffix, package, "//") { includeDir_ = packageDir + fileSep + "inst" + fileSep + "include"; } void CppExportsIncludeGenerator::writeBegin() { ostr() << "namespace " << packageCpp() << " {" << std::endl << std::endl; // Import Rcpp into this namespace. This allows declarations to // be written without fully qualifying all Rcpp types. The only // negative side-effect is that when this package's namespace // is imported it will also pull in Rcpp. However since this is // opt-in and represents a general desire to do namespace aliasing // this seems okay ostr() << " using namespace Rcpp;" << std::endl << std::endl; // Write our export validation helper function. Putting it in // an anonymous namespace will hide it from callers and give // it per-translation unit linkage ostr() << " namespace {" << std::endl; ostr() << " void validateSignature(const char* sig) {" << std::endl; ostr() << " Rcpp::Function require = " << "Rcpp::Environment::base_env()[\"require\"];" << std::endl; ostr() << " require(\"" << package() << "\", " << "Rcpp::Named(\"quietly\") = true);" << std::endl; std::string validate = "validate"; std::string fnType = "Ptr_" + validate; ostr() << " typedef int(*" << fnType << ")(const char*);" << std::endl; std::string ptrName = "p_" + validate; ostr() << " static " << fnType << " " << ptrName << " = " << "(" << fnType << ")" << std::endl << " " << getCCallable(exportValidationFunctionRegisteredName()) << ";" << std::endl; ostr() << " if (!" << ptrName << "(sig)) {" << std::endl; ostr() << " throw Rcpp::function_not_exported(" << std::endl << " " << "\"C++ function with signature '\" + std::string(sig) + \"' not found in " << package() << "\");" << std::endl; ostr() << " }" << std::endl; ostr() << " }" << std::endl; ostr() << " }" << std::endl << std::endl; } void CppExportsIncludeGenerator::doWriteFunctions( const SourceFileAttributes& attributes, bool) { // don't write anything if there is no C++ interface if (!attributes.hasInterface(kInterfaceCpp)) return; for(std::vector::const_iterator // #nocov start it = attributes.begin(); it != attributes.end(); ++it) { if (it->isExportedFunction()) { Function function = it->function().renamedTo(it->exportedCppName()); // if it's hidden then don't generate a C++ interface if (function.isHidden()) continue; ostr() << " inline " << function << " {" << std::endl; std::string fnType = "Ptr_" + function.name(); ostr() << " typedef SEXP(*" << fnType << ")("; for (size_t i=0; irng()) ostr() << " RNGScope RCPP_rngScope_gen;" << std::endl; ostr() << " rcpp_result_gen = " << ptrName << "("; const std::vector& args = function.arguments(); for (std::size_t i = 0; i(Rcpp::wrap(" << args[i].name() << "))"; if (i != (args.size()-1)) ostr() << ", "; } ostr() << ");" << std::endl; ostr() << " }" << std::endl; ostr() << " if (rcpp_result_gen.inherits(\"interrupted-error\"))" << std::endl << " throw Rcpp::internal::InterruptedException();" << std::endl; ostr() << " if (Rcpp::internal::isLongjumpSentinel(rcpp_result_gen))" << std::endl << " throw Rcpp::LongjumpException(rcpp_result_gen);" << std::endl; ostr() << " if (rcpp_result_gen.inherits(\"try-error\"))" << std::endl << " throw Rcpp::exception(Rcpp::as(" << "rcpp_result_gen).c_str());" << std::endl; if (!function.type().isVoid()) { ostr() << " return Rcpp::as<" << function.type() << " >" << "(rcpp_result_gen);" << std::endl; } ostr() << " }" << std::endl << std::endl; // #nocov end } } } void CppExportsIncludeGenerator::writeEnd(bool) { ostr() << "}" << std::endl; ostr() << std::endl; ostr() << "#endif // " << getHeaderGuard() << std::endl; } bool CppExportsIncludeGenerator::commit( const std::vector& includes) { if (hasCppInterface()) { // create the include dir if necessary createDirectory(includeDir_); // #nocov start // generate preamble std::ostringstream ostr; // header guard std::string guard = getHeaderGuard(); ostr << "#ifndef " << guard << std::endl; ostr << "#define " << guard << std::endl << std::endl; // includes if (!includes.empty()) { for (std::size_t i=0;i&) { if (hasCppInterface()) { // create the include dir if necessary createDirectory(includeDir_); // #nocov // commit return ExportsGenerator::commit(); // #nocov } else { return ExportsGenerator::remove(); } } std::string CppPackageIncludeGenerator::getHeaderGuard() const { // #nocov return "RCPP_" + packageCpp() + "_H_GEN_"; // #nocov } RExportsGenerator::RExportsGenerator(const std::string& packageDir, const std::string& package, bool registration, const std::string& fileSep) : ExportsGenerator( packageDir + fileSep + "R" + fileSep + "RcppExports.R", package, "#"), registration_(registration) { } void RExportsGenerator::doWriteFunctions( const SourceFileAttributes& attributes, bool) { // write standalone roxygen chunks const std::vector >& roxygenChunks = attributes.roxygenChunks(); for (std::size_t i = 0; i& chunk = roxygenChunks[i]; // #nocov start for (std::size_t l = 0; l < chunk.size(); l++) ostr() << chunk[l] << std::endl; ostr() << "NULL" << std::endl << std::endl; // #nocov end } // write exported functions if (attributes.hasInterface(kInterfaceR)) { // process each attribute for(std::vector::const_iterator it = attributes.begin(); it != attributes.end(); ++it) { // alias the attribute and function (bail if not export) const Attribute& attribute = *it; if (!attribute.isExportedFunction()) continue; // #nocov const Function& function = attribute.function(); // print roxygen lines for (size_t i=0; i& arguments = function.arguments(); for (size_t i = 0; i&) { return ExportsGenerator::commit(); } ExportsGenerators::~ExportsGenerators() { try { for(Itr it = generators_.begin(); it != generators_.end(); ++it) delete *it; generators_.clear(); } catch(...) {} } void ExportsGenerators::add(ExportsGenerator* pGenerator) { generators_.push_back(pGenerator); } void ExportsGenerators::writeBegin() { for(Itr it = generators_.begin(); it != generators_.end(); ++it) (*it)->writeBegin(); } void ExportsGenerators::writeFunctions( const SourceFileAttributes& attributes, bool verbose) { for(Itr it = generators_.begin(); it != generators_.end(); ++it) (*it)->writeFunctions(attributes, verbose); } void ExportsGenerators::writeEnd(bool hasPackageInit) { for(Itr it = generators_.begin(); it != generators_.end(); ++it) (*it)->writeEnd(hasPackageInit); } // Commit and return a list of the files that were updated std::vector ExportsGenerators::commit( const std::vector& includes) { std::vector updated; for(Itr it = generators_.begin(); it != generators_.end(); ++it) { if ((*it)->commit(includes)) updated.push_back((*it)->targetFile()); } return updated; } // Remove and return a list of files that were removed std::vector ExportsGenerators::remove() { // #nocov start std::vector removed; for(Itr it = generators_.begin(); it != generators_.end(); ++it) { if ((*it)->remove()) removed.push_back((*it)->targetFile()); } return removed; } // Helpers for converting C++ default arguments to R default arguments namespace { // convert a C++ numeric argument to an R argument value // (returns empty string if no conversion is possible) std::string cppNumericArgToRArg(const std::string& type, const std::string& cppArg) { // check for a number double num; std::stringstream argStream(cppArg); if ((argStream >> num)) { // L suffix means return the value literally if (!argStream.eof()) { std::string suffix; argStream >> suffix; if (argStream.eof() && suffix == "L") return cppArg; } // no decimal and the type isn't explicitly double or // float means integer if (cppArg.find('.') == std::string::npos && type != "double" && type != "float") return cppArg + "L"; // otherwise return arg literally else return cppArg; } else { return std::string(); } } // convert a C++ ::create style argument value to an R argument // value (returns empty string if no conversion is possible) std::string cppCreateArgToRArg(const std::string& cppArg) { std::string create = "::create"; size_t createLoc = cppArg.find(create); if (createLoc == std::string::npos || ((createLoc + create.length()) >= cppArg.size())) { return std::string(); } std::string type = cppArg.substr(0, createLoc); std::string rcppScope = "Rcpp::"; size_t rcppLoc = type.find(rcppScope); if (rcppLoc == 0 && type.size() > rcppScope.length()) type = type.substr(rcppScope.length()); std::string args = cppArg.substr(createLoc + create.length()); if (type == "CharacterVector") return "as.character( c" + args + ")"; if (type == "IntegerVector") return "as.integer( c" + args + ")"; if (type == "NumericVector") return "as.numeric( c" + args + ")"; if (type == "LogicalVector") return "as.logical( c" + args + ")"; return std::string(); } // convert a C++ Matrix to an R argument (returns empty string // if no conversion possible) std::string cppMatrixArgToRArg(const std::string& cppArg) { // look for Matrix std::string matrix = "Matrix"; size_t matrixLoc = cppArg.find(matrix); if (matrixLoc == std::string::npos || ((matrixLoc + matrix.length()) >= cppArg.size())) { return std::string(); } std::string args = cppArg.substr(matrixLoc + matrix.length()); return "matrix" + args; // #nocov end } // convert a C++ literal to an R argument (returns empty string // if no conversion possible) std::string cppLiteralArgToRArg(const std::string& cppArg) { if (cppArg == "true") return "TRUE"; else if (cppArg == "false") return "FALSE"; else if (cppArg == "R_NilValue") return "NULL"; else if (cppArg == "NA_STRING") // #nocov start return "NA_character_"; else if (cppArg == "NA_INTEGER") return "NA_integer_"; else if (cppArg == "NA_LOGICAL") return "NA_integer_"; else if (cppArg == "NA_REAL") return "NA_real_"; else return std::string(); } // convert an Rcpp container constructor to an R argument // (returns empty string if no conversion possible) std::string cppConstructorArgToRArg(const std::string& cppArg) { // map Rcpp containers to R default initializers static std::map RcppContainerToR; RcppContainerToR.insert(std::make_pair("NumericVector", "numeric")); RcppContainerToR.insert(std::make_pair("DoubleVector", "numeric")); RcppContainerToR.insert(std::make_pair("CharacterVector", "character")); RcppContainerToR.insert(std::make_pair("IntegerVector", "integer")); RcppContainerToR.insert(std::make_pair("LogicalVector", "logical")); RcppContainerToR.insert(std::make_pair("ComplexVector", "complex")); // for each entry in the map above, see if we find it; if we do, // return the R version typedef std::map::const_iterator Iterator; for (Iterator it = RcppContainerToR.begin(); it != RcppContainerToR.end(); ++it) { size_t loc = cppArg.find(it->first); if (loc != std::string::npos) { return it->second + cppArg.substr(it->first.size(), std::string::npos); } } return std::string(); // #nocov end } // convert a C++ argument value to an R argument value (returns empty // string if no conversion is possible) std::string cppArgToRArg(const std::string& type, const std::string& cppArg) { // try for quoted string if (isQuoted(cppArg)) return cppArg; // try for literal std::string rArg = cppLiteralArgToRArg(cppArg); if (!rArg.empty()) return rArg; // try for a create arg rArg = cppCreateArgToRArg(cppArg); // #nocov start if (!rArg.empty()) return rArg; // try for a matrix arg rArg = cppMatrixArgToRArg(cppArg); if (!rArg.empty()) return rArg; // try for a numeric arg rArg = cppNumericArgToRArg(type, cppArg); if (!rArg.empty()) return rArg; // try for a constructor arg rArg = cppConstructorArgToRArg(cppArg); if (!rArg.empty()) return rArg; // couldn't parse the arg return std::string(); // #nocov end } } // anonymous namespace // Generate an R argument list for a function std::string generateRArgList(const Function& function) { std::ostringstream argsOstr; const std::vector& arguments = function.arguments(); for (size_t i = 0; i required_args; const std::vector& arguments = function.arguments(); for (size_t i = 0; i parsed_args = Rcpp::as >(pargs_cv); for(size_t i=0; i& Rcpp::Rcout = Rcpp::Rcpp_cout_get();"; ostr << std::endl; ostr << "Rcpp::Rostream& Rcpp::Rcerr = Rcpp::Rcpp_cerr_get();"; ostr << std::endl; ostr << "#endif" << std::endl << std::endl; } // Generate the C++ code required to make [[Rcpp::export]] functions // available as C symbols with SEXP parameters and return void generateCpp(std::ostream& ostr, const SourceFileAttributes& attributes, bool includePrototype, bool cppInterface, const std::string& contextId) { // process each attribute for(std::vector::const_iterator it = attributes.begin(); it != attributes.end(); ++it) { // alias the attribute and function (bail if not export) const Attribute& attribute = *it; if (!attribute.isExportedFunction()) continue; const Function& function = attribute.function(); // include prototype if requested if (includePrototype) { ostr << "// " << function.name() << std::endl; printFunction(ostr, function, false); ostr << ";"; } // write the C++ callable SEXP-based function (this version // returns errors via "try-error") ostr << std::endl; ostr << (cppInterface ? "static" : "RcppExport"); ostr << " SEXP "; std::string funcName = contextId + "_" + function.name(); ostr << funcName; if (cppInterface) ostr << kTrySuffix; // #nocov ostr << "("; std::ostringstream ostrArgs; const std::vector& arguments = function.arguments(); for (size_t i = 0; i::type " << argument.name() << "(" << argument.name() << "SEXP);" << std::endl; } ostr << " "; if (!function.type().isVoid()) ostr << "rcpp_result_gen = Rcpp::wrap("; ostr << function.name() << "("; for (size_t i = 0; i(buffer.st_mtime); } } // Remove a file (call back into R for this) bool removeFile(const std::string& path) { if (FileInfo(path).exists()) { Rcpp::Function rm = Rcpp::Environment::base_env()["file.remove"]; // #nocov start rm(path); return true; // #nocov end } else { return false; } } // Recursively create a directory (call back into R for this) void createDirectory(const std::string& path) { // #nocov start if (!FileInfo(path).exists()) { Rcpp::Function mkdir = Rcpp::Environment::base_env()["dir.create"]; mkdir(path, Rcpp::Named("recursive") = true); } } // #nocov end // Known whitespace chars const char * const kWhitespaceChars = " \f\n\r\t\v"; // Query whether a character is whitespace bool isWhitespace(char ch) { return std::strchr(kWhitespaceChars, ch) != NULL; } // Remove trailing line comments -- ie, find comments that don't begin // a line, and remove them. We avoid stripping attributes. void stripTrailingLineComments(std::string* pStr) { if (pStr->empty()) return; size_t len = pStr->length(); bool inString = false; size_t idx = 0; // if this is an roxygen comment, then bail if (isRoxygenCpp(*pStr)) return; // skip over initial whitespace idx = pStr->find_first_not_of(kWhitespaceChars); if (idx == std::string::npos) return; // skip over a first comment if (idx + 1 < len && pStr->at(idx) == '/' && pStr->at(idx + 1) == '/') { idx = idx + 2; } // since we are searching for "//", we iterate up to 2nd last character while (idx < len - 1) { if (inString) { if (pStr->at(idx) == '"' && pStr->at(idx - 1) != '\\') { inString = false; } } else { if (pStr->at(idx) == '"') { inString = true; } } if (!inString && pStr->at(idx) == '/' && pStr->at(idx + 1) == '/') { pStr->erase(idx); return; } ++idx; } } // Trim a string void trimWhitespace(std::string* pStr) { // skip empty case if (pStr->empty()) return; // #nocov // trim right std::string::size_type pos = pStr->find_last_not_of(kWhitespaceChars); if (pos != std::string::npos) pStr->erase(pos + 1); // trim left pos = pStr->find_first_not_of(kWhitespaceChars); pStr->erase(0, pos); } // Strip balanced quotes from around a string (assumes already trimmed) void stripQuotes(std::string* pStr) { if (pStr->length() < 2) return; char quote = *(pStr->begin()); if ( (quote == '\'' || quote == '\"') && (*(pStr->rbegin()) == quote) ) *pStr = pStr->substr(1, pStr->length()-2); // #nocov } // is the passed string quoted? bool isQuoted(const std::string& str) { if (str.length() < 2) return false; // #nocov char quote = *(str.begin()); return (quote == '\'' || quote == '\"') && (*(str.rbegin()) == quote); } // does a string end with another string? bool endsWith(const std::string& str, const std::string& suffix) { return str.size() >= suffix.size() && str.compare(str.size() - suffix.size(), suffix.size(), suffix) == 0; } // show a warning message void showWarning(const std::string& msg) { // #nocov start Rcpp::Function warning = Rcpp::Environment::base_env()["warning"]; warning(msg, Rcpp::Named("call.") = false); } // #nocov end bool isRoxygenCpp(const std::string& str) { size_t len = str.length(); if (len < 3) return false; size_t idx = str.find_first_not_of(kWhitespaceChars); if (idx == std::string::npos) return false; // make sure there are characters to check if (len - 2 < idx) return false; if (str[idx] == '/' && str[idx + 1] == '/' && str[idx + 2] == '\'') { return true; } return false; } } // namespace attributes } // namespace Rcpp /******************************************************************* * Attributes.cpp *******************************************************************/ using namespace Rcpp::attributes; // Implementation helpers for sourceCppContext namespace { // Class that manages generation of source code for the sourceCpp dynlib class SourceCppDynlib { public: SourceCppDynlib() {} SourceCppDynlib(const std::string& cacheDir, const std::string& cppSourcePath, Rcpp::List platform) : cppSourcePath_(cppSourcePath) { // get cpp source file info FileInfo cppSourceFilenameInfo(cppSourcePath_); if (!cppSourceFilenameInfo.exists()) throw Rcpp::file_not_found(cppSourcePath_); // #nocov // record the base name of the source file Rcpp::Function basename = Rcpp::Environment::base_env()["basename"]; cppSourceFilename_ = Rcpp::as(basename(cppSourcePath_)); // get platform info fileSep_ = Rcpp::as(platform["file.sep"]); dynlibExt_ = Rcpp::as(platform["dynlib.ext"]); // generate temp directory Rcpp::Function tempfile = Rcpp::Environment::base_env()["tempfile"]; buildDirectory_ = Rcpp::as(tempfile("sourcecpp_", cacheDir)); std::replace(buildDirectory_.begin(), buildDirectory_.end(), '\\', '/'); Rcpp::Function dircreate = Rcpp::Environment::base_env()["dir.create"]; dircreate(buildDirectory_); // generate a random context id contextId_ = "sourceCpp_" + uniqueToken(cacheDir); // regenerate the source code regenerateSource(cacheDir); } // create from list explicit SourceCppDynlib(const Rcpp::List& dynlib) { using namespace Rcpp; cppSourcePath_ = as(dynlib["cppSourcePath"]); generatedCpp_ = as(dynlib["generatedCpp"]); cppSourceFilename_ = as(dynlib["cppSourceFilename"]); contextId_ = as(dynlib["contextId"]); buildDirectory_ = as(dynlib["buildDirectory"]); fileSep_ = as(dynlib["fileSep"]); dynlibFilename_ = as(dynlib["dynlibFilename"]); previousDynlibFilename_ = as(dynlib["previousDynlibFilename"]); dynlibExt_ = as(dynlib["dynlibExt"]); exportedFunctions_ = as >(dynlib["exportedFunctions"]); modules_ = as >(dynlib["modules"]); depends_ = as >(dynlib["depends"]); plugins_ = as >(dynlib["plugins"]); embeddedR_ = as >(dynlib["embeddedR"]); List sourceDependencies = as(dynlib["sourceDependencies"]); for (R_xlen_t i = 0; i(sourceDependencies.at(i)); // #nocov sourceDependencies_.push_back(FileInfo(fileInfo)); // #nocov } } // convert to list Rcpp::List toList() const { using namespace Rcpp; List dynlib; dynlib["cppSourcePath"] = cppSourcePath_; dynlib["generatedCpp"] = generatedCpp_; dynlib["cppSourceFilename"] = cppSourceFilename_; dynlib["contextId"] = contextId_; dynlib["buildDirectory"] = buildDirectory_; dynlib["fileSep"] = fileSep_; dynlib["dynlibFilename"] = dynlibFilename_; dynlib["previousDynlibFilename"] = previousDynlibFilename_; dynlib["dynlibExt"] = dynlibExt_; dynlib["exportedFunctions"] = exportedFunctions_; dynlib["modules"] = modules_; dynlib["depends"] = depends_; dynlib["plugins"] = plugins_; dynlib["embeddedR"] = embeddedR_; List sourceDependencies; for (std::size_t i = 0; i FileInfo(generatedCppSourcePath()).lastModified()) return true; // #nocov // no dynlib means we're dirty if (!FileInfo(dynlibPath()).exists()) return true; // #nocov // variation in source dependencies means we're dirty std::vector sourceDependencies = parseSourceDependencies( cppSourcePath_); if (sourceDependencies != sourceDependencies_) return true; // #nocov // not dirty return false; } void regenerateSource(const std::string& cacheDir) { // create new dynlib filename previousDynlibFilename_ = dynlibFilename_; dynlibFilename_ = "sourceCpp_" + uniqueToken(cacheDir) + dynlibExt_; // copy the source file to the build dir Rcpp::Function filecopy = Rcpp::Environment::base_env()["file.copy"]; filecopy(cppSourcePath_, generatedCppSourcePath(), true, Rcpp::_["copy.mode"] = false); // parse attributes SourceFileAttributesParser sourceAttributes(cppSourcePath_, "", true); // generate cpp for attributes and append them std::ostringstream ostr; // always include Rcpp.h in case the user didn't ostr << std::endl << std::endl; ostr << "#include " << std::endl; // initialize references to global Rostreams initializeGlobals(ostr); generateCpp(ostr, sourceAttributes, true, false, contextId_); generatedCpp_ = ostr.str(); std::ofstream cppOfs(generatedCppSourcePath().c_str(), std::ofstream::out | std::ofstream::app); if (cppOfs.fail()) throw Rcpp::file_io_error(generatedCppSourcePath()); // #nocov cppOfs << generatedCpp_; cppOfs.close(); // generate R for attributes and write it into the build directory std::ofstream rOfs(generatedRSourcePath().c_str(), std::ofstream::out | std::ofstream::trunc); if (rOfs.fail()) throw Rcpp::file_io_error(generatedRSourcePath()); // #nocov // DLLInfo - hide using . and ensure uniqueness using contextId std::string dllInfo = "`." + contextId_ + "_DLLInfo`"; rOfs << dllInfo << " <- dyn.load('" << dynlibPath() << "')" << std::endl << std::endl; // Generate R functions generateR(rOfs, sourceAttributes, dllInfo); // remove the DLLInfo rOfs << std::endl << "rm(" << dllInfo << ")" << std::endl; rOfs.close(); // discover exported functions and dependencies exportedFunctions_.clear(); depends_.clear(); plugins_.clear(); for (SourceFileAttributesParser::const_iterator it = sourceAttributes.begin(); it != sourceAttributes.end(); ++it) { if (it->name() == kExportAttribute && !it->function().empty()) exportedFunctions_.push_back(it->exportedName()); else if (it->name() == kDependsAttribute) { for (size_t i = 0; iparams().size(); ++i) // #nocov depends_.push_back(it->params()[i].name()); // #nocov } else if (it->name() == kPluginsAttribute) { for (size_t i = 0; iparams().size(); ++i) plugins_.push_back(it->params()[i].name()); } } // capture modules modules_ = sourceAttributes.modules(); // capture embededded R embeddedR_ = sourceAttributes.embeddedR(); // capture source dependencies sourceDependencies_ = sourceAttributes.sourceDependencies(); } const std::string& contextId() const { return contextId_; } const std::string& cppSourcePath() const { return cppSourcePath_; } const std::vector cppDependencySourcePaths() { std::vector dependencies; for (size_t i = 0; i& exportedFunctions() const { return exportedFunctions_; } const std::vector& modules() const { return modules_; } const std::vector& depends() const { return depends_; }; const std::vector& plugins() const { return plugins_; }; const std::vector& embeddedR() const { return embeddedR_; } private: std::string generatedCppSourcePath() const { return buildDirectory_ + fileSep_ + cppSourceFilename(); } std::string generatedRSourcePath() const { return buildDirectory_ + fileSep_ + rSourceFilename(); } void generateR(std::ostream& ostr, const SourceFileAttributes& attributes, const std::string& dllInfo) const { // process each attribute for(std::vector::const_iterator it = attributes.begin(); it != attributes.end(); ++it) { // alias the attribute and function (bail if not export) const Attribute& attribute = *it; if (!attribute.isExportedFunction()) continue; const Function& function = attribute.function(); // build the parameter list std::string args = generateRArgList(function); // check if has a custom signature if(attribute.hasParameter(kExportSignature)) { args = attribute.customRSignature(); if(!checkRSignature(function, args)) { std::string rsig_err_msg = "Missing args in " + args; throw Rcpp::exception(rsig_err_msg.c_str()); } } // export the function ostr << attribute.exportedName() << " <- Rcpp:::sourceCppFunction(" << "function(" << args << ") {}, " << (function.type().isVoid() ? "TRUE" : "FALSE") << ", " << dllInfo << ", " << "'" << contextId_ + "_" + function.name() << "')" << std::endl; } // modules std::vector modules = attributes.modules(); if (modules.size() > 0) { // modules require definition of C++Object to be loaded ostr << "library(Rcpp)" << std::endl; // load each module for (std::vector::const_iterator it = modules.begin(); it != modules.end(); ++it) { ostr << " populate( Rcpp::Module(\"" << *it << "\"," << dllInfo << "), environment() ) " << std::endl; } } } std::string uniqueToken(const std::string& cacheDir) { Rcpp::Environment rcppEnv = Rcpp::Environment::namespace_env("Rcpp"); Rcpp::Function uniqueTokenFunc = rcppEnv[".sourceCppDynlibUniqueToken"]; return Rcpp::as(uniqueTokenFunc(cacheDir)); } private: std::string cppSourcePath_; std::string generatedCpp_; std::string cppSourceFilename_; std::string contextId_; std::string buildDirectory_; std::string fileSep_; std::string dynlibFilename_; std::string previousDynlibFilename_; std::string dynlibExt_; std::vector exportedFunctions_; std::vector modules_; std::vector depends_; std::vector plugins_; std::vector embeddedR_; std::vector sourceDependencies_; }; // Dynlib cache that allows lookup by either file path or code contents void dynlibCacheInsert(const std::string& cacheDir, const std::string& file, const std::string& code, const SourceCppDynlib& dynlib) { Rcpp::Environment rcppEnv = Rcpp::Environment::namespace_env("Rcpp"); Rcpp::Function dynlibInsertFunc = rcppEnv[".sourceCppDynlibInsert"]; dynlibInsertFunc(cacheDir, file, code, dynlib.toList()); } void dynlibCacheInsertFile(const std::string& cacheDir, const std::string& file, const SourceCppDynlib& dynlib) { dynlibCacheInsert(cacheDir, file, "", dynlib); } void dynlibCacheInsertCode(const std::string& cacheDir, const std::string& code, const SourceCppDynlib& dynlib) { dynlibCacheInsert(cacheDir, "", code, dynlib); } SourceCppDynlib dynlibCacheLookup(const std::string& cacheDir, const std::string& file, const std::string& code) { Rcpp::Environment rcppEnv = Rcpp::Environment::namespace_env("Rcpp"); Rcpp::Function dynlibLookupFunc = rcppEnv[".sourceCppDynlibLookup"]; Rcpp::List dynlibList = dynlibLookupFunc(cacheDir, file, code); if (dynlibList.length() > 0) return SourceCppDynlib(dynlibList); else return SourceCppDynlib(); } SourceCppDynlib dynlibCacheLookupByFile(const std::string& cacheDir, const std::string& file) { return dynlibCacheLookup(cacheDir, file, ""); } SourceCppDynlib dynlibCacheLookupByCode(const std::string& cacheDir, const std::string& code) { return dynlibCacheLookup(cacheDir, "", code); } } // anonymous namespace // Create temporary build directory, generate code as necessary, and return // the context required for the sourceCpp function to complete it's work RcppExport SEXP sourceCppContext(SEXP sFile, SEXP sCode, SEXP sRebuild, SEXP sCacheDir, SEXP sPlatform) { BEGIN_RCPP // parameters std::string file = Rcpp::as(sFile); std::string code = sCode != R_NilValue ? Rcpp::as(sCode) : ""; bool rebuild = Rcpp::as(sRebuild); std::string cacheDir = Rcpp::as(sCacheDir); Rcpp::List platform = Rcpp::as(sPlatform); // get dynlib (using cache if possible) SourceCppDynlib dynlib = !code.empty() ? dynlibCacheLookupByCode(cacheDir, code) : dynlibCacheLookupByFile(cacheDir, file); // check dynlib build state bool buildRequired = false; // if there is no dynlib in the cache then create a new one if (dynlib.isEmpty()) { buildRequired = true; dynlib = SourceCppDynlib(cacheDir, file, platform); } // if the cached dynlib is dirty then regenerate the source else if (rebuild || dynlib.isSourceDirty()) { buildRequired = true; // #nocov dynlib.regenerateSource(cacheDir); // #nocov } // if the dynlib hasn't yet been built then note that else if (!dynlib.isBuilt()) { buildRequired = true; // #nocov } // save the dynlib to the cache if (!code.empty()) dynlibCacheInsertCode(cacheDir, code, dynlib); else dynlibCacheInsertFile(cacheDir, file, dynlib); // return context as a list using namespace Rcpp; return List::create( _["contextId"] = dynlib.contextId(), _["cppSourcePath"] = dynlib.cppSourcePath(), _["cppDependencySourcePaths"] = dynlib.cppDependencySourcePaths(), _["buildRequired"] = buildRequired, _["buildDirectory"] = dynlib.buildDirectory(), _["generatedCpp"] = dynlib.generatedCpp(), _["exportedFunctions"] = dynlib.exportedFunctions(), _["modules"] = dynlib.modules(), _["cppSourceFilename"] = dynlib.cppSourceFilename(), _["rSourceFilename"] = dynlib.rSourceFilename(), _["dynlibFilename"] = dynlib.dynlibFilename(), _["dynlibPath"] = dynlib.dynlibPath(), _["previousDynlibPath"] = dynlib.previousDynlibPath(), _["depends"] = dynlib.depends(), _["plugins"] = dynlib.plugins(), _["embeddedR"] = dynlib.embeddedR()); END_RCPP } // Compile the attributes within the specified package directory into // RcppExports.cpp and RcppExports.R RcppExport SEXP compileAttributes(SEXP sPackageDir, SEXP sPackageName, SEXP sDepends, SEXP sRegistration, SEXP sCppFiles, SEXP sCppFileBasenames, SEXP sIncludes, SEXP sVerbose, SEXP sPlatform) { BEGIN_RCPP // arguments std::string packageDir = Rcpp::as(sPackageDir); std::string packageName = Rcpp::as(sPackageName); Rcpp::CharacterVector vDepends = Rcpp::as(sDepends); std::set depends; for (Rcpp::CharacterVector::iterator it = vDepends.begin(); it != vDepends.end(); ++it) { depends.insert(std::string(*it)); } bool registration = Rcpp::as(sRegistration); std::vector cppFiles = Rcpp::as >(sCppFiles); std::vector cppFileBasenames = Rcpp::as >(sCppFileBasenames); std::vector includes = Rcpp::as >(sIncludes); bool verbose = Rcpp::as(sVerbose); Rcpp::List platform = Rcpp::as(sPlatform); std::string fileSep = Rcpp::as(platform["file.sep"]); // initialize generators ExportsGenerators generators; generators.add(new CppExportsGenerator(packageDir, packageName, fileSep)); generators.add(new RExportsGenerator(packageDir, packageName, registration, fileSep)); // catch file exists exception if the include file already exists // and we are unable to overwrite it try { generators.add(new CppExportsIncludeGenerator(packageDir, packageName, fileSep)); } catch(const Rcpp::file_exists& e) { std::string msg = "The header file '" + e.filePath() + "' already exists so " "cannot be overwritten by Rcpp::interfaces"; throw Rcpp::exception(msg.c_str(), __FILE__, __LINE__); } // catch file exists exception for package include (because if it // already exists we simply leave it alone) try { generators.add(new CppPackageIncludeGenerator(packageDir, packageName, fileSep)); } catch(const Rcpp::file_exists& e) {} // write begin generators.writeBegin(); // Parse attributes from each file and generate code as required. bool hasPackageInit = false; bool haveAttributes = false; std::set dependsAttribs; for (std::size_t i=0; iname() == kDependsAttribute) { for (size_t i = 0; iparams().size(); ++i) // #nocov dependsAttribs.insert(it->params()[i].name()); // #nocov } } } // write end generators.writeEnd(hasPackageInit); // commit or remove std::vector updated; if (haveAttributes) updated = generators.commit(includes); else updated = generators.remove(); // #nocov // print warning if there are depends attributes that don't have // corresponding entries in the DESCRIPTION file std::vector diff; std::set_difference(dependsAttribs.begin(), dependsAttribs.end(), depends.begin(), depends.end(), std::back_inserter(diff)); if (!diff.empty()) { std::string msg = // #nocov start "The following packages are referenced using Rcpp::depends " "attributes however are not listed in the Depends, Imports or " "LinkingTo fields of the package DESCRIPTION file: "; for (size_t i=0; i >(updated); END_RCPP } Rcpp/src/Makevars0000644000176200001440000000004313011114357013432 0ustar liggesusersPKG_CPPFLAGS = -I../inst/include/ Rcpp/src/internal.h0000644000176200001440000001321313513341577013743 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // internal.h: Rcpp R/C++ interface class library -- // // Copyright (C) 2012 - 2015 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp_internal_h #define Rcpp_internal_h #include #define CALLFUN_0(name) SEXP name() #define CALLFUN_1(name) SEXP name(SEXP) #define CALLFUN_2(name) SEXP name(SEXP,SEXP) #define CALLFUN_3(name) SEXP name(SEXP,SEXP,SEXP) #define CALLFUN_4(name) SEXP name(SEXP,SEXP,SEXP,SEXP) #define CALLFUN_5(name) SEXP name(SEXP,SEXP,SEXP,SEXP,SEXP) #define EXTFUN(name) SEXP name(SEXP) // this file contains declarations of functions that are not // exported via Rcpp.h but are needed to make Rcpp work internally #define MAX_ARGS 65 #define UNPACK_EXTERNAL_ARGS(__CARGS__,__P__) \ SEXP __CARGS__[MAX_ARGS]; \ int nargs = 0; \ for (; nargs. #define COMPILING_RCPP #define RCPP_USE_GLOBAL_ROSTREAM #include using namespace Rcpp; #include "internal.h" #include #ifdef RCPP_HAS_DEMANGLING #include #endif namespace Rcpp { // [[Rcpp::register]] Rostream& Rcpp_cout_get() { static Rostream Rcpp_cout; return Rcpp_cout; } // [[Rcpp::register]] Rostream& Rcpp_cerr_get() { static Rostream Rcpp_cerr; return Rcpp_cerr; } Rostream& Rcout = Rcpp_cout_get(); Rostream& Rcerr = Rcpp_cerr_get(); namespace internal { int rngSynchronizationSuspended = 0; // [[Rcpp::register]] unsigned long enterRNGScope() { if (rngSynchronizationSuspended == 0) GetRNGstate(); return 0; } // [[Rcpp::register]] unsigned long exitRNGScope() { if (rngSynchronizationSuspended == 0) PutRNGstate(); return 0; } // [[Rcpp::register]] unsigned long beginSuspendRNGSynchronization() { // #nocov start ++rngSynchronizationSuspended; return rngSynchronizationSuspended; } // [[Rcpp::register]] unsigned long endSuspendRNGSynchronization() { --rngSynchronizationSuspended; return rngSynchronizationSuspended; } // #nocov end // [[Rcpp::register]] char* get_string_buffer() { static char buffer[MAXELTSIZE]; return buffer; } } // [[Rcpp::register]] const char * type2name(SEXP x) { // #nocov start switch (TYPEOF(x)) { case NILSXP: return "NILSXP"; case SYMSXP: return "SYMSXP"; case RAWSXP: return "RAWSXP"; case LISTSXP: return "LISTSXP"; case CLOSXP: return "CLOSXP"; case ENVSXP: return "ENVSXP"; case PROMSXP: return "PROMSXP"; case LANGSXP: return "LANGSXP"; case SPECIALSXP: return "SPECIALSXP"; case BUILTINSXP: return "BUILTINSXP"; case CHARSXP: return "CHARSXP"; case LGLSXP: return "LGLSXP"; case INTSXP: return "INTSXP"; case REALSXP: return "REALSXP"; case CPLXSXP: return "CPLXSXP"; case STRSXP: return "STRSXP"; case DOTSXP: return "DOTSXP"; case ANYSXP: return "ANYSXP"; case VECSXP: return "VECSXP"; case EXPRSXP: return "EXPRSXP"; case BCODESXP: return "BCODESXP"; case EXTPTRSXP: return "EXTPTRSXP"; case WEAKREFSXP: return "WEAKREFSXP"; #if R_VERSION >= R_Version(4,4,0) // replaces S4SXP in R 4.4.0 case OBJSXP: return Rf_isS4(x) ? "S4SXP" : "OBJSXP"; // cf src/main/inspect.c #else case S4SXP: return "S4SXP"; #endif default: return ""; } } // #nocov end } // namespace Rcpp // [[Rcpp::register]] std::string demangle(const std::string& name) { #ifdef RCPP_HAS_DEMANGLING std::string real_class; int status =-1; char *dem = 0; dem = abi::__cxa_demangle(name.c_str(), 0, 0, &status); if (status == 0) { real_class = dem; free(dem); } else { real_class = name; } return real_class; #else return name; #endif } // NOTE: remains registered but this routine is now effectively unused by Rcpp; // we retain it for backwards compatibility with any existing packages which // (explicitly or implicitly) rely on its existence. See also: // https://github.com/RcppCore/Rcpp/issues/1066 // [[Rcpp::register]] const char* short_file_name(const char* file) { // #nocov start static std::string f; f = file; size_t index = f.find("/include/"); if (index != std::string::npos) { f = f.substr(index + 9); } return f.c_str(); } // [[Rcpp::internal]] SEXP as_character_externalptr(SEXP xp) { char buffer[20]; snprintf(buffer, 20, "%p", (void*)R_ExternalPtrAddr(xp)); return Rcpp::wrap((const char*)buffer); } // #nocov end // [[Rcpp::internal]] SEXP rcpp_capabilities() { Shield cap(Rf_allocVector(LGLSXP, 13)); Shield names(Rf_allocVector(STRSXP, 13)); LOGICAL(cap)[0] = TRUE; // HAS_VARIADIC_TEMPLATES LOGICAL(cap)[1] = TRUE; // HAS_CXX0X_INITIALIZER_LIST LOGICAL(cap)[2] = TRUE; /* exceptions are always supported */ LOGICAL(cap)[3] = TRUE; // HAS_TR1_UNORDERED_MAP LOGICAL(cap)[4] = TRUE; // HAS_TR1_UNORDERED_SET LOGICAL(cap)[5] = TRUE; // Modules (TODO respect header choice ?) #ifdef RCPP_HAS_DEMANGLING LOGICAL(cap)[6] = TRUE; #else LOGICAL(cap)[6] = FALSE; #endif LOGICAL(cap)[7] = FALSE; // Classic API LOGICAL(cap)[8] = TRUE; // RCPP_HAS_LONG_LONG_TYPES LOGICAL(cap)[9] = TRUE; // HAS_CXX0X_UNORDERED_MAP LOGICAL(cap)[10] = TRUE; // HAS_CXX0X_UNORDERED_SET LOGICAL(cap)[11] = TRUE; // RCPP_USING_CXX11 #ifdef RCPP_NEW_DATE_DATETIME_VECTORS LOGICAL(cap)[12] = TRUE; #else LOGICAL(cap)[12] = FALSE; #endif SET_STRING_ELT(names, 0, Rf_mkChar("variadic templates")); SET_STRING_ELT(names, 1, Rf_mkChar("initializer lists")); SET_STRING_ELT(names, 2, Rf_mkChar("exception handling")); SET_STRING_ELT(names, 3, Rf_mkChar("tr1 unordered maps")); SET_STRING_ELT(names, 4, Rf_mkChar("tr1 unordered sets")); SET_STRING_ELT(names, 5, Rf_mkChar("Rcpp modules")); SET_STRING_ELT(names, 6, Rf_mkChar("demangling")); SET_STRING_ELT(names, 7, Rf_mkChar("classic api")); SET_STRING_ELT(names, 8, Rf_mkChar("long long")); SET_STRING_ELT(names, 9, Rf_mkChar("C++0x unordered maps")); SET_STRING_ELT(names, 10, Rf_mkChar("C++0x unordered sets")); SET_STRING_ELT(names, 11, Rf_mkChar("Full C++11 support")); SET_STRING_ELT(names, 12, Rf_mkChar("new date(time) vectors")); Rf_setAttrib(cap, R_NamesSymbol, names); return cap; } // [[Rcpp::internal]] SEXP rcpp_can_use_cxx0x() { // #nocov start return Rf_ScalarLogical(TRUE); } // [[Rcpp::internal]] SEXP rcpp_can_use_cxx11() { return Rf_ScalarLogical(TRUE); } // [[Rcpp::register]] SEXP stack_trace(const char* file, int line) { return R_NilValue; } // #nocov end // // [ [ Rcpp::register ] ] // void print(SEXP s) { // Rf_PrintValue(s); // defined in Rinternals.h // } // }}} // [[Rcpp::internal]] SEXP getRcppVersionStrings() { Shield versionstring(Rf_allocVector(STRSXP,2)); SET_STRING_ELT(versionstring, 0, Rf_mkChar(RCPP_VERSION_STRING)); SET_STRING_ELT(versionstring, 1, Rf_mkChar(RCPP_DEV_VERSION_STRING)); return versionstring; } Rcpp/src/rcpp_init.cpp0000644000176200001440000001126114070703457014450 0ustar liggesusers // Rcpp_init.cpp : Rcpp R/C++ interface class library -- Initialize and register // // Copyright (C) 2010 - 2020 John Chambers, Dirk Eddelbuettel and Romain Francois // Copyright (C) 2021 John Chambers, Dirk Eddelbuettel, Romain Francois and Iñaki Ucar // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #define COMPILING_RCPP #include #include "internal.h" // borrowed from Matrix #define CALLDEF(name, n) {#name, (DL_FUNC) &name, n} #define EXTDEF(name) {#name, (DL_FUNC) &name, -1} static R_CallMethodDef callEntries[] = { CALLDEF(Class__name,1), CALLDEF(Class__has_default_constructor,1), CALLDEF(CppClass__complete,1), CALLDEF(CppClass__methods,1), CALLDEF(CppObject__finalize,2), CALLDEF(Module__classes_info,1), CALLDEF(Module__complete,1), CALLDEF(Module__get_class,2), CALLDEF(Module__has_class,2), CALLDEF(Module__has_function,2), CALLDEF(Module__functions_arity,1), CALLDEF(Module__functions_names,1), CALLDEF(Module__name,1), CALLDEF(Module__get_function, 2), CALLDEF(get_rcpp_cache,0), CALLDEF(rcpp_error_recorder,1), CALLDEF(as_character_externalptr,1), CALLDEF(CppField__get,3), CALLDEF(CppField__set,4), CALLDEF(rcpp_capabilities,0), CALLDEF(rcpp_can_use_cxx0x,0), CALLDEF(rcpp_can_use_cxx11,0), CALLDEF(getRcppVersionStrings,0), {NULL, NULL, 0} }; static R_ExternalMethodDef extEntries[] = { EXTDEF(CppMethod__invoke), EXTDEF(CppMethod__invoke_void), EXTDEF(CppMethod__invoke_notvoid), EXTDEF(InternalFunction_invoke), EXTDEF(Module__invoke), EXTDEF(class__newInstance), EXTDEF(class__dummyInstance), {NULL, NULL, 0} }; // this is called by R_init_Rcpp that is in Module.cpp void init_Rcpp_routines(DllInfo *info){ // Register routines, allocate resources. R_registerRoutines(info, NULL, // .C callEntries, // .Call NULL, // .Fortran extEntries // .External ); } void registerFunctions(){ using namespace Rcpp; using namespace Rcpp::internal; #define RCPP_REGISTER(__FUN__) R_RegisterCCallable( "Rcpp", #__FUN__ , (DL_FUNC)__FUN__ ); RCPP_REGISTER(rcpp_get_stack_trace) RCPP_REGISTER(rcpp_set_stack_trace) RCPP_REGISTER(type2name) RCPP_REGISTER(demangle) RCPP_REGISTER(enterRNGScope) RCPP_REGISTER(exitRNGScope) RCPP_REGISTER(beginSuspendRNGSynchronization); RCPP_REGISTER(endSuspendRNGSynchronization); RCPP_REGISTER(get_Rcpp_namespace) RCPP_REGISTER(get_cache) RCPP_REGISTER(stack_trace) RCPP_REGISTER(get_string_elt) RCPP_REGISTER(char_get_string_elt) RCPP_REGISTER(set_string_elt) RCPP_REGISTER(char_set_string_elt) RCPP_REGISTER(get_string_ptr) RCPP_REGISTER(get_vector_elt) RCPP_REGISTER(set_vector_elt) RCPP_REGISTER(get_vector_ptr) RCPP_REGISTER(char_nocheck) RCPP_REGISTER(dataptr) RCPP_REGISTER(getCurrentScope) RCPP_REGISTER(setCurrentScope) RCPP_REGISTER(get_string_buffer) RCPP_REGISTER(short_file_name) RCPP_REGISTER(mktime00) RCPP_REGISTER(gmtime_) RCPP_REGISTER(reset_current_error) RCPP_REGISTER(error_occured) RCPP_REGISTER(rcpp_get_current_error) // RCPP_REGISTER(print) RCPP_REGISTER(Rcpp_precious_init) RCPP_REGISTER(Rcpp_precious_teardown) RCPP_REGISTER(Rcpp_precious_preserve) RCPP_REGISTER(Rcpp_precious_remove) RCPP_REGISTER(Rcpp_cout_get) RCPP_REGISTER(Rcpp_cerr_get) #undef RCPP_REGISTER } extern "C" void R_unload_Rcpp(DllInfo *) { // #nocov start Rcpp::Rcpp_precious_teardown(); // release resource } // #nocov end extern "C" void R_init_Rcpp(DllInfo* dllinfo) { setCurrentScope(0); registerFunctions(); // call wrapper to register export symbols R_useDynamicSymbols(dllinfo, FALSE); // set up symbol symbol lookup (cf R 3.4.0) init_Rcpp_cache(); // init the cache Rcpp::Rcpp_precious_init(); init_Rcpp_routines(dllinfo); // init routines } Rcpp/ChangeLog0000644000176200001440000151137715030754743012757 0ustar liggesusers2025-07-01 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Release 1.1.0 * inst/include/Rcpp/config.h: Idem * inst/NEWS.Rd: Idem * vignettes/rmd/Rcpp.bib: Idem * inst/bib/Rcpp.bib: Idem * vignettes/pdf/*: Rebuilt 2025-06-25 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version and date * inst/include/Rcpp/config.h: Idem 2025-06-18 Dirk Eddelbuettel * vignettes/rmd/Rcpp.bib: Use doi references for CRAN packages, update versions, update some package titles * inst/bib/Rcpp.bib: Idem * vignettes/pdf/*: Re-rendered 2025-06-05 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version and date * inst/include/Rcpp/config.h: Idem 2025-06-02 Kevin Ushey * inst/include/Rcpp.h: Avoid copy when creating Language objects * inst/include/Rcpp/Language.h: Idem * inst/include/Rcpp/lgrow.h: Idem * inst/tinytest/cpp/language.cpp: Idem * inst/tinytest/test_language.R: Idem 2025-05-27 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version and date * inst/include/Rcpp/config.h: Idem 2025-05-23 Dirk Eddelbuettel * inst/include/Rcpp/date_datetime/newDateVector.h: Add default constructor * inst/include/Rcpp/date_datetime/newDatetimeVector.h: Idem * inst/tinytest/test_date.R: Add tests * inst/tinytest/cpp/dates.cpp: Idem 2025-05-06 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version and date * inst/include/Rcpp/config.h: Idem * R/Attributes.R: Support C++26 via plugin 2025-05-05 Dirk Eddelbuettel * inst/tinytest/test_sugar.R: Condition four NA-related tests away on arm64 on Linux too * .github/workflows/linuxarm.yaml (jobs): Add ubuntu-24.04-arm as optional workflow_dispatch run 2025-04-15 Dirk Eddelbuettel * docker/ci-4.4/Dockerfile: Added based on r-base:4.4.3 * .github/workflows/ci.yaml (jobs): Add rcpp/ci-4.4 to matrix 2025-03-31 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version and date * inst/include/Rcpp/config.h: Idem 2025-03-29 Iñaki Ucar * inst/include/Rcpp/traits/result_of.h: Reimplement traits::result_of using std::result_of (up to C++14) or std::invoke_result (C++17 or later), which supports previous use cases and enables lambdas * inst/include/Rcpp/sugar/functions/sapply.h: Use new result_of interface * inst/include/Rcpp/sugar/functions/lapply.h: Idem * inst/include/Rcpp/sugar/functions/mapply/mapply_2.h: Idem * inst/include/Rcpp/sugar/functions/mapply/mapply_3.h: Idem * inst/include/Rcpp/sugar/matrix/outer.h: Idem * inst/tinytest/cpp/sugar.cpp: New tests for previous sugar functions * inst/tinytest/test_sugar.R: Idem 2025-03-26 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version and date * inst/include/Rcpp/config.h: Idem 2025-03-26 Iñaki Ucar * inst/include/Rcpp/platform/compiler.h: Remove definitions of RCPP_USING_UNORDERED_MAP and RCPP_USING_UNORDERED_SET * inst/include/Rcpp/sugar/sets.h: Remove redefinition of macros * inst/include/Rcpp/sugar/functions/self_match.h: Replace macros with std::unordered_map and std::unordered_set respectively * inst/include/Rcpp/sugar/functions/setdiff.h: Idem * inst/include/Rcpp/sugar/functions/table.h: Idem * inst/tinytest/cpp/wrap.cpp: Idem 2025-03-24 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version and date * inst/include/Rcpp/config.h: Idem 2025-03-24 Iñaki Ucar * inst/include/Rcpp/exceptions.h: Include C+11 variadic template definitions unconditionally * inst/include/Rcpp/exceptions/cpp11/exceptions.h: Removed * inst/include/Rcpp/exceptions/cpp98/exceptions.h: Idem * src/attributes.cpp: Remove obsolete pre-C+11 paths based on __cplusplus define checks * inst/tinytest/cpp/sugar.cpp: Idem * inst/include/Rcpp/Language.h: Idem * inst/include/Rcpp/StringTransformer.h: Idem * inst/include/Rcpp/algorithm.h: Idem * inst/include/Rcpp/utils/tinyformat.h: Idem * inst/include/Rcpp/longlong.h: Idem, unconditional RCPP_HAS_LONG_LONG_TYPES * src/api.cpp: Remove explicit RCPP_HAS_LONG_LONG_TYPES as availability is both implicit and ensured * inst/include/Rcpp/algorithm.h: Idem * inst/include/Rcpp/traits/is_arithmetic.h: Idem * inst/include/Rcpp/traits/longlong.h: Idem 2025-03-21 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version and date * inst/include/Rcpp/config.h: Idem * inst/include/Rcpp/String.h: Remove explicit RCPP_USING_CXX11 as use of C++11 (or newer) is both implicit and ensured * inst/include/Rcpp/macros/dispatch.h: Idem * inst/include/Rcpp/platform/compiler.h: Idem * inst/include/Rcpp/unwindProtect.h: Idem * inst/tinytest/cpp/wrap.cpp: Idem * src/api.cpp: Idem 2025-03-18 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version and date * inst/include/Rcpp/config.h: Idem * inst/include/Rcpp/module/class.h: Use variadic templates unconditionally * inst/include/Rcpp/grow.h: Idem * inst/include/Rcpp/DottedPair.h: Idem * inst/include/Rcpp/Vector.h: Idem * inst/include/Rcpp/Function.h: Idem * inst/include/Rcpp/internal/call.h: Idem * inst/include/Rcpp/InternalFunctionWithStdFunction.h: Idem * inst/include/Rcpp/Module.h: Idem * inst/include/Rcpp/traits/index_sequence.h: Idem * inst/include/Rcpp/traits/named_object.h: Idem * inst/include/Rcpp/Language.h: Idem * inst/include/Rcpp/DataFrame.h: Idem * inst/include/Rcpp/PairList.h: Idem * inst/include/Rcpp/InternalFunction.h: Idem * inst/include/Rcpp/module/Module_generated_class_constructor.h: Removed * inst/include/Rcpp/module/Module_generated_class_factory.h: Idem * inst/include/Rcpp/module/Module_generated_method.h: Idem * inst/include/Rcpp/module/Module_generated_Pointer_method.h: Idem * inst/include/Rcpp/generated/grow__pairlist.h: Idem * inst/include/Rcpp/generated/DottedPair__ctors.h: Idem * inst/include/Rcpp/generated/Vector__create.h: Idem * inst/include/Rcpp/generated/Function__operator.h: Idem * inst/include/Rcpp/generated/InternalFunctionWithStdFunction_call.h: Idem * inst/include/Rcpp/module/Module_generated_Constructor.h: Idem * inst/include/Rcpp/module/Module_generated_CppFunction.h: Idem * inst/include/Rcpp/module/Module_generated_CppMethod.h: Idem * inst/include/Rcpp/module/Module_generated_Factory.h: Idem * inst/include/Rcpp/module/Module_generated_Pointer_CppMethod.h: Idem * inst/include/Rcpp/module/Module_generated_class_signature.h: Idem * inst/include/Rcpp/module/Module_generated_ctor_signature.h: Idem * inst/include/Rcpp/module/Module_generated_function.h: Idem * inst/include/Rcpp/module/Module_generated_get_signature.h: Idem * inst/include/Rcpp/generated/Language__ctors.h: Idem * inst/include/Rcpp/generated/DataFrame_generated.h: Idem * inst/include/Rcpp/generated/Pairlist__ctors.h: Idem * inst/include/Rcpp/generated/InternalFunction__ctors.h: Idem * inst/include/Rcpp/platform/compiler.h: No longer define HAS_VARIADIC_TEMPLATES * src/api.cpp (rcpp_can_use_cxx0x): Return true unconditionally 2025-03-15 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version and date * inst/include/Rcpp/config.h: Idem * inst/include/Rcpp/platform/compiler.h: Simplified and shortened establishing C++11 as baseline; further PRs to complete this * inst/include/Rcpp/String.h: Unconditionally use std::hash with C++11 * inst/include/Rcpp/wrap.h: Unconditionally use static_assert * inst/include/Rcpp/sugar/functions/sapply.h: Use std::result_of (with C++11 or C++14) or std::invoke_result (C++17 or later) * inst/include/Rcpp/sugar/functions/table.h: Use std::map * inst/include/Rcpp/sugar/sets.h: Use std::unordered_{set,map} * man/evalCpp.Rd: Update example * src/api.cpp: Simplify rcpp_capabilities assignment 2025-03-13 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version and date * inst/include/Rcpp/config.h: Idem * inst/include/Rcpp/Environment.h: Switch from R_lsInternal to R_lsInternal3 as the former is now outlawed 2025-03-10 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version and date * inst/include/Rcpp/config.h: Idem 2025-03-08 Dirk Eddelbuettel * inst/include/Rcpp/Function.h: Use R_ClosureEnv instead of deprecated CLOENV if under R >= 4.5.0 2025-03-07 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version and date * inst/include/Rcpp/config.h: Idem * src/barrier.cpp (dataptr): Replace remaining DATAPTR with DATAPTR_RO for suitable R greater than 3.5.0 2025-02-11 Dirk Eddelbuettel * R/Rcpp.package.skeleton.R (Rcpp.package.skeleton): Support optional argument 'github_user' to populate URL and BugReports if given * man/Rcpp.package.skeleton.Rd: Document new optional argument * R/Rcpp.package.skeleton.R (Rcpp.package.skeleton): Default version is now '0.0.1' and not '1.0' * inst/tinytest/test_rcpp_package_skeleton.R: Adjust test accordingly * inst/tinytest/test_expose_class.R: Idem 2025-02-05 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version and date * inst/include/Rcpp/config.h: Idem 2025-01-31 Lev Kandel * inst/include/Rcpp/internal/wrap.h: Add support for std::string_view * inst/include/Rcpp/traits/r_type_traits.h: Idem * inst/include/Rcpp/traits/wrap_type_traits.h: Idem * inst/include/RcppCommon.h: Include * inst/tinytest/cpp/wrap.cpp: Add unit test for wrap(std::string_view) * inst/tinytest/test_wrap.R: Idem 2025-01-26 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version and date * inst/include/Rcpp/config.h: Idem 2025-01-25 Dirk Eddelbuettel * vignettes/rmd/Rcpp-libraries.Rdm: Add mention of PACKAGE_types.h * vignettes/rmd/Rcpp.bib: Add AsioHeaders * inst/bib/Rcpp.bib: Idem 2025-01-18 Ben Bolker * inst/NEWS.Rd: fix trivial typos in NEWS file 2025-01-11 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Release 1.0.14 * inst/include/Rcpp/config.h: Idem * inst/NEWS.Rd: Idem * vignettes/rmd/Rcpp.bib: Idem * inst/bib/Rcpp.bib: Idem * vignettes/pdf/*: Rebuilt 2025-01-01 Dirk Eddelbuettel * inst/include/Rcpp/Benchmark/Timer.h (R_NO_REMAP): Protect include with preceding #ifndef now that R 4.5.0 will set this too 2024-11-25 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version to 1.0.13.6 * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem * inst/tinytest/test_date.R: Minor adjustment to datetime format test following R Dev Day change for R bug 17350 (and issue #1347 here) 2024-11-25 Simon Guest * src/attributes.cpp: fix CPP source having to be writable 2024-11-03 Marco Colombo * vignettes/rmd/Rcpp-FAQ.Rmd: Fixed typos * vignettes/rmd/Rcpp-attributes.Rmd: Idem * vignettes/rmd/Rcpp-extending.Rmd: Idem * vignettes/rmd/Rcpp-introduction.Rmd: Idem * vignettes/rmd/Rcpp-libraries.Rmd: Idem * vignettes/rmd/Rcpp-modules.Rmd: Idem * vignettes/rmd/Rcpp-package.Rmd: Idem * vignettes/rmd/Rcpp-quickref.Rmd: Idem * vignettes/rmd/Rcpp-sugar.Rmd: Idem 2024-11-02 Dirk Eddelbuettel * tests/tinytest.R: Minor code edit, removal of two no longer required setters for tinytest 2024-11-01 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version to 1.0.13.5 * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem 2024-10-31 Kevin Ushey * inst/include/Rcpp/r/compat.h: Require R (>= 4.5.0) for new APIs 2024-10-26 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version to 1.0.13.4 * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem * .github/workflows/ci.yaml (jobs): Roll checkout action to v4 2024-10-26 Gábor Csárdi * inst/include/Rcpp/exceptions_impl.h: check for DragonFlyBSD to fix compilation 2024-10-07 Iñaki Ucar * inst/include/Rcpp/platform/compiler.h: Uncomment HAS_VARIADIC_TEMPLATES macro definition * src/api.cpp: Simplify checks for variadic templates * inst/include/Rcpp/DataFrame.h: Idem * inst/include/Rcpp/DottedPair.h: Idem * inst/include/Rcpp/Function.h: Idem * inst/include/Rcpp/InternalFunctionWithStdFunction.h: Idem * inst/include/Rcpp/Language.h: Idem * inst/include/Rcpp/Pairlist.h: Idem * inst/include/Rcpp/grow.h: Idem * inst/include/Rcpp/internal/call.h: Idem * inst/include/Rcpp/module/class.h: Idem * inst/include/Rcpp/traits/index_sequence.h: Idem * inst/include/Rcpp/traits/named_object.h: Idem * inst/include/Rcpp/vector/Vector.h: Idem * inst/include/Rcpp/Module.h: Idem + add missing is_void method * inst/tinytest/test_module.R: Add test for void functions and methods 2024-10-04 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version to 1.0.13.3 * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem 2024-09-29 Dirk Eddelbuettel * inst/include/Rcpp/vector/Vector.h: Remove a cast as R_xlen_t is returned now 2024-09-17 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem 2024-09-12 Iñaki Ucar * vignettes/.gitignore: Refinement to ignore more files under rmd/ * vignettes/pdf/*: Rebuilt with Ghostscript 10.03.1 * vignettes/*.pdf: Idem 2024-08-31 Dirk Eddelbuettel * DESCRIPTION (Authors@R): Added 2024-08-28 Dirk Eddelbuettel * R/Rcpp.package.skeleton.R: Create DESCRIPTION with Auhors@R file * inst/tinytest/test_rcpp_package_skeleton.R: Adjust tests 2024-08-20 Dirk Eddelbuettel * inst/tinytest/test_sugar.R: Skip one more NA related test on arm64 and macOS as failure is seen at r-universe on arm64 * .github/workflows/macos.yaml: Add basic r-ci setup but dialed-down to macOS only (as Linux is covered via multiple Docker setups) 2024-08-19 Dirk Eddelbuettel * Contributing.md: Refreshed content 2024-07-30 Dirk Eddelbuettel * vignettes/rmd/Rcpp-modules.Rmd (are): Add short two-sentence illustration following GitHub issue #1322 2024-07-24 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem 2024-07-11 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Release 1.0.13 * inst/include/Rcpp/config.h: Idem * inst/NEWS.Rd: Idem * vignettes/rmd/Rcpp.bib: Idem * inst/bib/Rcpp.bib: Idem * vignettes/pdf/*: Rebuilt 2024-07-07 Kevin Ushey * inst/include/Rcpp/internal/SEXP_Iterator.h: Avoid using VECTOR_PTR * inst/include/Rcpp/vector/Subsetter.h: Avoid using STRING_PTR * inst/include/RcppCommon.h: Include compatibility defines * src/barrier.cpp: Avoid using {STRING/VECTOR}_PTR * inst/include/Rcpp/r/compat.h: Include compatibility defines 2024-07-05 Kevin Ushey * inst/include/Rcpp/Environment.h: Drop support for UserDefinedDatabase [ merged 2024-07-22 after release of Rcpp 1.0.13 ] * inst/include/Rcpp/Language.h: Avoid using SET_TYPEOF * inst/include/Rcpp/Pairlist.h: Idem * inst/include/Rcpp/r_cast.h: Idem [ merged 2024-07-24 after release of Rcpp 1.0.13 ] 2024-06-22 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem 2024-06-11 Kevin Ushey * inst/include/Rcpp/internal/r_vector.h: Use template specializations to avoid DATAPTR usage * inst/include/Rcpp/vector/traits.h: Implement bounds checks in r_vector_cache access * inst/tinytest/cpp/Vector.cpp: Add unit tests * inst/tinytest/test_vector.R: Add unit tests * tests/tinytest.R: Test in serial by default 2024-06-02 Dirk Eddelbuettel * inst/include/Rcpp/internal/export.h: More R_xlen_t switching * inst/include/Rcpp/vector/SubMatrix.h: Idem * inst/include/Rcpp/vector/Vector.h: Idem 2024-06-01 Dirk Eddelbuettel * inst/include/Rcpp/internal/Proxy_Iterator.h (Proxy_Iterator): Switch to R_xlen_t ('clang++-17 -Wconversion -Wno-sign-conversion') * inst/include/Rcpp/DataFrame.h: Idem * inst/include/Rcpp/Vector.h: Idem 2024-05-28 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem 2024-05-27 Dirk Eddelbuettel * README.md: Remove link references to StackOverflow * inst/NEWS.Rd: Idem * inst/include/Rcpp/Module.h (S4_CppOverloadedMethods): Add cast to int to avoid warnings under 'clang++-17 -Wconversion -Wno-sign-conversion' * inst/include/Rcpp/vector/Vector.h (Vector): Idem * inst/include/Rcpp/module/class.h: Switch variable to size_t to avoid to avoid warnings under 'clang++-17 -Wconversion -Wno-sign-conversion' * inst/tinytest/testRcppClass/src/init.c: Add void to signature 2024-05-26 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem 2024-05-23 Andrew Johnson * inst/include/Rcpp/: Added variadic templates to be used instead of the generated code in `Rcpp/generated` and `Rcpp/module` when compiling with C++11 or later. 2024-05-18 Dirk Eddelbuettel * docker/ci-4.3/Dockerfile: Add rcpp/ci-4.3 container for R 4.3.* * .github/workflows/ci.yaml (jobs): Add rcpp/ci-4.3 to matrix 2024-05-16 Dirk Eddelbuettel * README.md: Use tinyverse.netlify.app for dependency badge 2024-03-05 Dirk Eddelbuettel * docker/ci/Dockerfile: Switch the base container to r2u * docker/plus/Dockerfile: Given r2u, install more binaries * README.md: Add r-universe badge 2024-02-21 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem * inst/include/Rcpp/r/headers.h: Set R_NO_REMAP (and MAXELTSIZE) only if not already defined (as will be needed with R 4.4.0) 2024-01-09 Dirk Eddelbuettel * README.md: Update usage numbers * README.md: Remove StackOverflow badge which only works for logged-in users and is unsuitable for the README 2024-01-08 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Release 1.0.12 * inst/include/Rcpp/config.h: Idem * inst/NEWS.Rd: Idem * vignettes/rmd/Rcpp.bib: Idem * inst/bib/Rcpp.bib: Idem * vignettes/pdf/*: Rebuilt 2024-01-01 Dirk Eddelbuettel * vignettes/rmd/Rcpp.bib: Updated to current versions of cited packages * inst/bib/Rcpp.bib: Idem 2023-12-27 Dirk Eddelbuettel * src/api.cpp (type2name): Refine OBJSXP return 2023-12-21 Dirk Eddelbuettel * src/api.cpp (type2name): Recognise OBJSXP added in R 4.4.0 2023-11-28 Dirk Eddelbuettel * inst/tinytest/testRcppInterfaceExporter/R/RcppExports.R: Regenerated * inst/tinytest/testRcppInterfaceExporter/src/RcppExports.cpp: Idem 2023-11-26 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem * src/attributes.cpp (generateCpp): Add a format string for Rf_error call to not run afoul of -Wformat-security 2023-11-24 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem * inst/include/Rcpp/iostream/Rstreambuf.h: Cast streamsize to int in two spots * inst/include/Rcpp/print.h (warningcall): Add missing '%s' format 2023-11-11 Dirk Eddelbuettel * vignettes/rmd/Rcpp-FAQ.Rmd: Updated and edited * vignettes/pdf/Rcpp-FAQ.pdf: Updated * vignettes/rmd/Rcpp.bib: Updated 2023-10-28 Dirk Eddelbuettel * vignettes/rmd/Rcpp-FAQ.Rmd: Updated and edited * vignettes/pdf/Rcpp-FAQ.pdf: Updated * vignettes/rmd/Rcpp.bib: Updated 2023-10-27 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem * R/tools.R: Correct missing Rd macros (spotted by R-devel CMD check) 2023-10-22 Aaron Lun * inst/include/Rcpp/vector/MatrixColumn.h: Cast integer index to R_xlen_t to avoid integer overflow with large matrices. * inst/include/Rcpp/vector/MatrixRow.h: Ditto. * inst/include/Rcpp/vector/Vector.h: Remove stray cast to int that causes overflow when returning the end iterator. 2023-09-30 Dirk Eddelbuettel * vignettes/rmd/Rcpp-introduction.Rmd (Rcpp): Correct caption of third figure (cf GitHub issue #1276) * vignettes/pdf/Rcpp-introduction.pdf: Rebuilt 2023-08-31 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem 2023-08-29 Iñaki Ucar * R/Attributes.R: Ad-hoc fix for testthat's C entrypoint in RcppExports.cpp 2023-08-03 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem 2023-08-03 Michael Chirico * src/attributes.cpp: Directly `#include ` for `std::endl` * src/date.cpp: Directly `#include ` for `TRUE` and `FALSE` 2023-07-03 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Release 1.0.11 * inst/include/Rcpp/config.h: Idem * inst/NEWS.Rd: Idem * vignettes/rmd/Rcpp.bib: Idem * inst/bib/Rcpp.bib: Idem * vignettes/pdf/*: Rebuilt 2023-07-02 Dirk Eddelbuettel * README.md: Update usage numbers in Examples section 2023-07-01 Dirk Eddelbuettel * docker/ci-dev/Dockerfile: Make 'rm' more robust as 'rm -f' * docker/ci-4.2/Dockerfile: Add new container for R 4.2.3 * .github/workflows/ci.yaml (jobs): Add entry for R 4.2.3 2023-06-12 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem * README.md: Two URL updates for appease R CMD check * DESCRIPTION (Encoding): Somewhat belated addition 2023-04-18 Dirk Eddelbuettel * README.md: Use app.codecov.io as base for codecov link 2023-04-12 Dirk Eddelbuettel * .github/workflows/ci.yaml: Simplified container use 2023-03-27 Dirk Eddelbuettel * .github/workflows/stale.yaml: Roll to v8 2023-03-27 Iñaki Ucar * R/Attributes.R: Remove command quoting, not needed anymore for system2() * inst/tinytest/test_xptr.R: Update copyright 2023-03-26 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem * inst/tinytest/test_stats.R: Revisit change from PR #1252; we now use a slightly smaller tolerance to accomodate old and new value * inst/tinytest/test_sugar.R: Protect a small number of tests on NA propagation from running on arm64/Darwin which requires special care 2023-03-25 Iñaki Ucar * R/Attributes.R: Switch to system2 to be able to capture stderr on error 2023-03-24 Dirk Eddelbuettel * docker/ci-dev/Dockerfile: During Debian freeze experimental repo is renamed which leads to a hickup here so temporarily remove list file 2023-03-24 Iñaki Ucar * inst/tinytest/test_xptr.R: Skip some tests on Windows 2023-03-19 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem * src/attributes.cpp (RExportsGenerator::writeEnd): Replace a pair of apostrophes with backticks in generated .Call() statemente 2023-02-07 Dirk Eddelbuettel * inst/tinytest/test_stats.R: Use more accurate value in R 4.3.0 2023-02-06 Dirk Eddelbuettel * inst/CITATION: Update to new format preferred by r-devel 2023-02-02 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem * inst/include/Rcpp/sugar/functions/sapply.h: Enable compilation under C++20 (using clang++ and its C++ library) via invoke_result 2023-01-29 Iñaki Ucar * inst/tinytest/test_xptr.R: Fix a couple of tests writing to stdout 2023-01-24 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem 2023-01-24 Lukasz Laniewski-Wollk * R/RcppLdpath.R: CxxFlags() now quotes only non-standard paths on linux 2023-01-22 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Release 1.0.10 * inst/include/Rcpp/config.h: Idem * inst/NEWS.Rd: Idem 2023-01-08 Dirk Eddelbuettel * inst/include/Rcpp/String.h: Address clang++-14 conversion warning * inst/include/Rcpp/sugar/functions/mean.h: Idem * inst/include/Rcpp/vector/Vector.h: Idem * src/attributes.cpp: Idem * src/date.cpp: Idem 2022-12-29 Dirk Eddelbuettel * .github/workflows/docker.yaml (jobs): Update several actions 2022-12-26 Dirk Eddelbuettel * .github/workflows/stale.yaml (jobs): Update actions/stale@v6 2022-11-14 Dirk Eddelbuettel * .github/workflows/ci.yaml (jobs): Update to actions/checkout@v3 2022-10-27 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem 2022-10-27 Kevin Ushey * inst/tinytest/cpp/coerce.cpp: add coerce unit tests * inst/tinytest/test_coerce.R: idem 2022-10-25 Dirk Eddelbuettel * inst/include/Rcpp/internal/r_coerce.h (coerce_to_string): Replace last remaining sprintf with snprintf 2022-10-12 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem * R/Attributes.R (sourceCpp): Protect path to binary from spaces 2022-10-06 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem * inst/tinytest/test_dataframe.R (test.DataFrame.PushZeroLength): Add new test * inst/tinytest/cpp/DataFrame.cpp (DataFrame_PushOnEmpty): C++ support for new test 2022-10-04 Dirk Eddelbuettel * inst/include/Rcpp/DataFrame.h (set_type_after_push): Allow zero-row data.frame objects to be grown by push_{back,front}() 2022-09-25 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem 2022-09-23 Kevin Ushey * R/Module.R: Force 'finalize' method to be materialized 2022-09-20 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * R/Attributes.R: Support C++20, C++23 and C++2b (for experimental / incomplete support) via new plugins 2022-07-27 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2022-07-23 Iñaki Ucar * inst/include/Rcpp/r/headers.h: Unwind protection is enabled by default unless `RCPP_NO_UNWIND_PROTECT` is defined (`RCPP_USE_UNWIND_PROTECT` is not checked anymore and has no effect) * inst/include/Rcpp/vector/Vector.h: Switch evaluation to `Rcpp_eval` * R/Attributes.R: `[[Rcpp::plugins(unwindProtect)]]` is deprecated * inst/tinytest/cpp/stack.cpp: Adapted * inst/tinytest/test_exceptions.R: Adapted * inst/tinytest/test_interface.R: Adapted * inst/tinytest/testRcppInterfaceExporter/src/config.h: Removed 2022-07-10 Dirk Eddelbuettel * docker/ci-4.1/Dockerfile: Add Dockerfile for 4.1 series * .github/workflows/ci.yaml: Add 4.1 to CI matrix * .github/workflows/docker.yaml: Do not rebuild versioned ones 2022-07-02 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Release 1.0.9 * inst/include/Rcpp/config.h: Idem * inst/NEWS.Rd: Idem * vignettes/rmd/Rcpp.bib: Idem * inst/bib/Rcpp.bib: Idem * vignettes/pdf/*: Rebuilt 2022-07-01 Dirk Eddelbuettel * man/dependsAttribute.Rd: Use https in URL * man/exportAttribute.Rd: Idem * man/interfacesAttribute.Rd: Idem * DESCRIPTION (URL): Idem * README.md: Idem, use Amazon page for Rcpp book 2022-05-26 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2022-05-25 Dirk Eddelbuettel * inst/tinytest/test_string.R: Add C++11 conditioning for new unit tests 2022-05-23 Dean Scarff * inst/include/Rcpp/String.h: Make less copies of strings via move semantics and preserving the buffer/SEXP representation when copying * inst/include/RcppCommon.h: include for std::move * inst/tinytest/cpp/String.cpp: Add unit tests * inst/tinytest/test_string.R: Add unit tests 2022-05-12 Dirk Eddelbuettel * docker/ci/Dockerfile: Added xml2, also use more r-cran-* binaries 2022-05-12 Marco Colombo * vignettes/rmd/Rcpp-FAQ.Rmd: Fixed typo 2022-04-03 Dirk Eddelbuettel * vignettes/rmd/Rcpp-FAQ.Rmd: Add paragraph about Date(time) not being aimed at parsing large quantities at once * vignettes/pdf/Rcpp-FAQ.pdf: Idem * vignettes/rmd/Rcpp.bib: Add four entries * inst/bib/Rcpp.bib: Idem 2022-03-14 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2022-03-13 Iñaki Ucar * src/barrier.cpp: Untag tokens upon removal from the precious list, so that the internal reference counter can be safely decremented by R 2022-03-13 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * tests/tinytest.R: Disable full tests on four-digits release to not exceed CRAN test time preference 2022-03-10 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * inst/tinytest/cpp/sugar.cpp: Also conditionally replace std::unary_function with std::function * vignettes/rmd/Rcpp-sugar.Rmd: Replace std::unary_function example with std::function (implicitly requiring C++ in vignette example) * vignettes/rmd/Rcpp-FAQ.Rmd: Idem 2022-03-09 Dirk Eddelbuettel * inst/include/Rcpp/Language.h: To quieten compilations, replace std::(unary|binary)_function with std::function for C++11 or later * inst/include/Rcpp/StringTransformer.he: Idem 2022-01-21 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2022-01-20 Dirk Eddelbuettel * src/attributes.cpp: Make three small changes to permit compilation under C++98 now (while we consider just turning to C++11 overall) 2022-01-14 Dirk Eddelbuettel * inst/tinytest/test_packageversion.R: Comparison to 'dev' revision version now tolerant of optional trailing zero (e.g. 1.0.8.0) 2022-01-11 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Release 1.0.8 * inst/include/Rcpp/config.h: Idem * inst/NEWS.Rd: Idem * vignettes/rmd/Rcpp.bib: Idem * inst/bib/Rcpp.bib: Idem * vignettes/pdf/*: Rebuilt * inst/include/Rcpp/r/headers.h: STRICT_R_HEADERS set by default unless override RCPP_NO_STRICT_HEADERS is set (cf issue #1158) 2022-01-10 Dirk Eddelbuettel * vignettes/rmd/Rcpp.bib: Updated CRAN and R references * inst/bib/Rcpp.bib: Idem * vignettes/rmd/getCurrentVersionsOfCitedPackages.R: Updated 2022-01-01 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/NEWS.Rd: Added entries for a few PRs since last release * vignettes/rmd/Rcpp.bib: Provide both url and doi entries * inst/bib/Rcpp.bib: Idem 2021-12-28 Dirk Eddelbuettel * README.md: Add section on performance 2021-12-24 Dirk Eddelbuettel * README.md: Update usage counts 2021-12-16 Dirk Eddelbuettel * vignettes/rmd/Rcpp.bib: Update JSS references to new doi scheme, update http URL links to https * inst/bib/Rcpp.bib: Idem 2021-12-10 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2021-12-08 Dirk Eddelbuettel * inst/include/Rcpp/Rcpp: Added as new entry point * inst/include/Rcpp/Light: Added as lighter-weight entry point * inst/include/Rcpp/Lighter: Idem * inst/include/Rcpp/Lightest: Idem 2021-11-30 Dirk Eddelbuettel * README.md: Remove Travis badge * .travis.yml: Removed 2021-11-15 Dirk Eddelbuettel * docker/ci/Dockerfile: Minor cleanup 2021-11-14 Dirk Eddelbuettel * R/RcppLdpath.R: Simplified as we no longer need to worry about CXX0X 2021-11-11 Kevin Ushey * R/RcppLdpath.R: CxxFlags() now quotes its include path 2021-10-15 Travers Ching * inst/tinytest/testRcppAttributePackage: Tests `signature` attribute * inst/tinytest/test_attribute_package.R: Tests `signature` attribute 2021-10-13 Dirk Eddelbuettel * README.md: Switch JSS url to doi form per JSS request * man/Rcpp-package.Rd: Idem * man/RcppLdFlags.Rd: Idem * inst/CITATION: Only use doi entries in three citEntry blocks 2021-10-11 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * .codecov.yml (comment): Disable codecov comments on PRs 2021-10-10 Travers Ching * src/attributes.cpp: Add `signature` attribute and syntax checks 2021-10-02 Dirk Eddelbuettel * .github/workflows/docker.yaml (jobs): Add container builder action 2021-10-01 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * inst/NEWS.Rd: Updated 2021-09-29 Iñaki Ucar * inst/include/Rcpp/XPtr.h: Check for new define `RCPP_USE_FINALIZE_ON_EXIT` to flip the value of XPtr's `finalizeOnExit` parameter from false (default) to true. * inst/tinytest/test_xptr.R: Added test for this functionality. 2021-09-27 Dirk Eddelbuettel * README.md: Added total downloads badge 2021-09-06 Dirk Eddelbuettel * docker/ci-4.0/Dockerfile: Using R 4.0.5 to build ci-4.0 * .github/workflows/ci.yaml (jobs): Also run against R 4.0.* 2021-09-05 Dirk Eddelbuettel * inst/examples/Misc/piSugar.cpp (piSugar): Remove spurious call to RNGScope we do not need with Rcpp Attributes * inst/examples/RcppGibbs/RcppGibbs.R (Rgibbs): Comment on two uses of RNGScope as historical in pre-Attributes code * inst/examples/RcppGibbs/timeRNGs.R: Idem for one more 2021-08-05 Dirk Eddelbuettel * inst/bib/Rcpp.bib: Use https for CRAN URLs * vignettes/rmd/Rcpp.bib: Idem 2021-07-25 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2021-07-24 Dirk Eddelbuettel * vignettes/rmd/Rcpp-FAQ.Rmd: New entry on growing vectors 2021-07-08 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * cleanup: Check for optional vignettes/rmd before trying to access it 2021-07-06 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Release 1.0.7 * inst/include/Rcpp/config.h: Idem * inst/NEWS.Rd: Idem * vignettes/rmd/Rcpp.bib: Idem * inst/bib/Rcpp.bib: Idem * vignettes/pdf/*: Rebuilt 2021-07-05 Iñaki Ucar * src/barrier.cpp (Rcpp_precious_remove): Protect from call with wrong token when unloading modules compiled under earlier version 2021-07-02 Dirk Eddelbuettel * inst/include/Rcpp/r/headers.h: Update notice as January 2022 release will remove protection for STRICT_R_HEADERS making it default 2021-05-27 Dirk Eddelbuettel * inst/tinytest/cpp/rcppversion.cpp (checkVersion): Allow for more than four components of a development version number * inst/tinytest/test_packageversion.R: Idem * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Clarify in comment 2021-05-13 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2021-05-09 Dirk Eddelbuettel * inst/include/RcppCommon.h: Add cfloat header 2021-04-09 Dirk Eddelbuettel * inst/include/Rcpp/hash/IndexHash.h: Silence one comparison, update use of unsigned int to uint32_t throughout 2021-03-22 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2021-03-21 Dirk Eddelbuettel * inst/include/Rcpp/api/meat/message.h: Add wrapper for base::message * inst/include/Rcpp/api/meat/meat.h: Include new file * inst/tinytest/test_misc.R: Simple test * inst/tinytest/cpp/misc.cpp (messageWrapper): Test support 2021-02-23 Dirk Eddelbuettel * Contributing.md: Update unit test link to tinytest 2021-02-08 Dirk Eddelbuettel * DESCRIPTION (Author): Add Inaki to the team 2021-02-01 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * README.md: Mention the Rcpp drap repo and its release candidates in installation section 2021-01-30 Iñaki Ucar * inst/include/test_global_rostream.R: Added test new (optionally) global Rcout and Rcerr objects 2021-01-28 Iñaki Ucar * inst/include/Rcpp/iostream/Rstreambuf.h: Support for global Rcout/Rcerr by defining `-DRCPP_USE_GLOBAL_ROSTREAM`; this mimics std::cout/cerr; initialization code is automatically generated. * inst/include/Rcpp/routines.h: Ditto * src/api.cpp: Ditto * src/attributes.cpp: Ditto * src/rcpp_init.cpp: Ditto 2021-01-21 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * inst/include/Rcpp/DataFrame.h: Remove unused variable * R/Attributes.R (sourceCpp): Support argument echo to be passed to source() to silence optional R evaluation 2021-01-19 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * inst/include/RcppCommon.h: Preverse existing API and offer new token-based API alongside via Rcpp_Precious{Preserve,Release} * inst/include/Rcpp/String.h: Use Rcpp_Precious{Preserve,Release} * inst/include/Rcpp/storage/PreserveStorage.h: Ditto 2021-01-17 Iñaki Ucar * inst/include/Rcpp/String.h: Use Rcpp_{Preserve,Release}Object throughout which connects to Rcpp_precious_* routines * inst/include/Rcpp/exceptions.h: Use Rcpp_ReleaseObject * inst/include/Rcpp/routines.h: Several corrections and refinements * inst/include/Rcpp/storage/PreserveStorage.h: Ditto * inst/include/Rcpp/traits/named_object.h: Ditto * inst/include/Rcpp/unwuindProtect.h: Ditto * inst/include/RcppCommon.h: Ditto * src/barrier.cpp: Ditto 2021-01-17 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem [ these were originally committed 17 May 2020 and have been rebased ] * src/barrier.cpp: Implement Rcpp_precious_{init,teardown,preserve,remove} * src/rcpp_init.c: Register cpp_precious_{init,teardown,preserve,remove} and call from R_{init,unload}_Rcpp * inst/include/Rcpp/routines.h: Declare Rcpp_precious_{init,teardown, preserve,remove} * inst/include/Rcpp/exceptions.h: Use Rcpp_precious_remove * inst/include/Rcpp/traits/named_object.h: Use Rcpp_precious_{preserve,remove} * inst/include/Rcpp/unwuindProtect.h: Use Rcpp_precious_preserve * inst/include/RcppCommon.h: Use Rcpp_precious_{preserve,remove} 2021-01-16 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * tests/tinytest.R: Test for CODECOV when deciding to run extensive tests or just a subset, and set CI=true to enable run full set * .github/workflows/stale.yaml: Run weekly instead of daily * src/attributes.cpp: Additional #nocov tag(s) * R/Attributes.R: Idem * R/Module.R: Idem * R/Rcpp.package.skeleton.R: Idem * R/RcppClass.R: Idem * R/RcppLdpath.R: Idem * src/attributes.cpp: Support include files with dots in package name 2021-01-14 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Release 1.0.6 * inst/include/Rcpp/config.h: Idem * inst/NEWS.Rd: Idem * vignettes/rmd/Rcpp.bib: Idem * inst/bib/Rcpp.bib: Idem 2021-01-13 Dirk Eddelbuettel * vignettes/rmd/Rcpp.bib: Updated package versions * inst/bib/Rcpp.bib: Idem 2021-01-02 Dirk Eddelbuettel * R/Rcpp.package.skeleton.R: Wrap any() around grepl() 2020-12-22 Dirk Eddelbuettel * .github/workflows/stale.yaml: Adding a staleness monitor labeling and ultimately closing issues and PRs after suitably long windows 2020-12-16 Dirk Eddelbuettel * inst/NEWS.Rd: Updated for recent activity * .github/workflows/ci.yaml: Add container-based CI runner * README.md: Add new badge 2020-11-06 Dirk Eddelbuettel * DESCRIPTION: More URL updates, e.g. http -> https * README.md: Ditto * inst/CITATION: Ditto * man/Rcpp-package.Rd: Ditto * inst/CITATION: Change from PeerJ Preprint to TAS 2020-10-25 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * inst/include/Rcpp/generated/InternalFunction__ctors.h: Switch XPtr finalizer argument from false to true 2020-10-22 Dirk Eddelbuettel * inst/include/Rcpp/lang.h: Remove spurious whitespace * vignettes/.gitignore: Refined to no longer ignore pdf files * vignettes/pdf/*: Added * inst/NEWS.Rd: Updated for two PRs 2020-10-21 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2020-10-19 Benjamin Christoffersen * src/attributes.cpp: Initialize two private bool variable in default constructor to avoid santizer warning 2020-08-20 Mattias Ellert * inst/include/Rcpp/lang.h: Remove obsolete and confusing comment 2020-08-05 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2020-07-09 Walter Somerville * inst/include/Rcpp/DataFrame.h: Warn when data.frame has varying length * inst/tinyTest/cpp/DataFrame.cpp: Test added * inst/tinyTest/test_dataframe.R: Idem 2020-07-07 Walter Somerville * inst/include/Rcpp/DataFrame.h: Implement explict push_back and push_front for DataFrame, which takes care to set the class and row.names attributes. * inst/tinyTest/test_dataframe.R: Add in tests for push_back/push_front * inst/tinyTest/cpp/DataFrame.cpp: Idem 2020-07-06 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2020-07-06 Kevin Ushey * inst/include/Rcpp/module/class.h: EXTPTR_PTR -> R_ExternalPtrAddr * src/api.cpp: Idem * src/module.cpp: Idem 2020-07-01 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Release 1.0.5 * inst/include/Rcpp/config.h: Idem * inst/NEWS.Rd: Idem * vignettes/rmd/Rcpp.bib: Idem * inst/bib/Rcpp.bib: Idem 2020-06-27 Dirk Eddelbuettel * docker/ci/Dockerfile: Revert back to standard r-base container * docker/plus/Dockerfile: Also install bit64 2020-06-19 Dirk Eddelbuettel * .travis.yml: Determine package name and version from DESCRIPTION, switch to bionic 2020-06-14 Dirk Eddelbuettel * inst/bib/Rcpp.bib: Add John's new 'S, R, and Data Science' article * vignettes/rmd/Rcpp.bib: Idem 2020-06-07 Dirk Eddelbuettel * .travis.yml (jobs): Replace R 3.4.3 with R 3.6.3 in matrix 2020-06-05 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * R/Rcpp.package.skeleton.R: Remove a remaining NAMESPACE entry for a temporary function symbol; ensure an exportPattern is set 2020-05-18 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2020-05-17 Kevin Ushey * inst/include/Rcpp/String.h: Don't preserve returned SEXP in wrap * inst/include/RcppCommon.h: Simplify 2020-04-30 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * vignettes/rmd/Rcpp-libraries.Rmd: Add new vignette source * vignettes/rmd/Rcpp.bib: Complete references * inst/bib/Rcpp.bib: Idem 2020-04-26 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2020-04-25 Dirk Eddelbuettel * inst/include/Rcpp/sugar/functions/sample.h: Replace R_alloc() with a standard vector allocation to reduce memory consumption in sample * docker/ci/Dockerfile: Update for R 4.0.0 (with a temporary diversion to rocker/r-base:4.0.0, and all-source installations) * vignettes/rmd/Makefile: Add bibtex call to JSS 2011 paper builds 2020-04-16 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2020-04-15 Kevin Ushey * inst/include/Rcpp/String.h: Avoid 'debug' namespace collisions * inst/include/Rcpp/macros/debug.h: Idem * inst/include/Rcpp/macros/macros.h: Idem 2020-04-15 Uwe Korn * inst/include/Rcpp/DataFrame.h: Explicit call to scalar std::abs 2020-04-11 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2020-04-10 Kevin Ushey * inst/include/Rcpp/macros/macros.h: Safer definition of short_file_name * inst/include/Rcpp/String.h: Idem * inst/include/Rcpp/macros/debug.h: Idem * src/api.cpp: Idem 2020-04-10 Dirk Eddelbuettel * inst/tinytest/test_exceptions.R: Skip parts of file if on Solaris 2020-04-02 Dirk Eddelbuettel * inst/NEWS.rd: Mark as patch release 1.0.4.6 * inst/tinytest/test_exceptions.R: If running skip remainder of file on Windows to not trigger failed test 2020-04-01 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2020-03-31 Dirk Eddelbuettel * docker/ci-dev/Dockerfile: Also install the 'codetools' package 2020-03-31 Kevin Ushey * R/Attributes.R: Fix for sourceCpp() on Windows w/R-devel 2020-03-28 Dirk Eddelbuettel * inst/examples/RcppGibbs/RcppGibbs_Updated.R: Updated example 2020-03-24 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * inst/include/Rcpp/Environment.h: Added two Shield wrappers around Rf_langX calls 2020-03-23 Dirk Eddelbuettel * .travis.yml (script): Run coverage as parallel step 2020-03-22 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * docker/ci-3.4/Dockerfile: Added * docker/ci-3.5/Dockerfile: Idem * docker/ci-dev/Dockerfile: Idem * .travis.yml (jobs): Expand to matrix 2020-03-22 Mattias Ellert * inst/include/Rcpp/exceptions_impl.h: Add include guard, Make sure RCPP_DEMANGLER_ENABLED is always defined, Add missing inline qualifier 2020-03-18 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * inst/include/Rcpp/lang.h: Define Rcpp_list{2,3,4,5} in the Rcpp namespace * DESCRIPTION: Remove versioned depends on R (>= 3.0.0) from 2013 2020-03-17 Davis Vaughan * inst/include/Rcpp/lang.h: Inline Rcpp_list6() to support R 3.3. 2020-03-17 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version (twice) * inst/include/Rcpp/config.h: Idem * inst/NEWS.Rd: Updated 2020-03-15 Kevin Ushey * inst/include/Rcpp/exceptions_impl.h: Ensure is included into global namespace; refactor detection of demangler support 2020-03-13 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Release 1.0.4 * inst/include/Rcpp/config.h: Idem * inst/NEWS.Rd: Idem * vignettes/rmd/Rcpp.bib: Idem * inst/bib/Rcpp.bib: Idem 2020-03-12 Dirk Eddelbuettel * vignettes/rmd/Rcpp.bib: Updated to current package versions * inst/bib/Rcpp.bib: Idem 2020-02-24 Dirk Eddelbuettel * inst/include/Rcpp/exceptions_impl.h: Remove spurious semicolon 2020-02-23 Dirk Eddelbuettel * inst/include/Rcpp/generated/Vector__create.h: Added #nocov tags * inst/include/Rcpp/exceptions_impl.h: Idem * src/api.cpp: Idem plus some whitespace realignment 2020-02-13 Dirk Eddelbuettel * README.md: Add a Debian badge 2020-02-12 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * README.md: Added indirect CRAN use badge 2020-02-09 Joshua Pritikin * inst/include/Rcpp.h: Include exceptions_impl.h * inst/include/Rcpp/exceptions.h: Make thread-safe * inst/include/Rcpp/exceptions_impl.h: New home for code moved from src/api.cpp 2020-01-05 Dirk Eddelbuettel * inst/include/Rcpp/exceptions.h: A few more #nocov tags * inst/include/Rcpp/generated/Vector__create.h: Idem, plus whitespace 2020-01-04 Dirk Eddelbuettel * R/Attributes.R: A few more #nocov tags 2020-01-01 Dirk Eddelbuettel * inst/include/Rcpp/module/Module.h: A few more #nocov tags * inst/include/Rcpp/XPtr.h: Idem * inst/include/Rcpp/vector/Vector.h: Idem 2019-12-31 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2019-12-29 Qiang Kou * inst/include/Rcpp/vector/Matrix.h: Ensure scalar OP matrix do not change right-hand side in operation * inst/tinytest/test_matrix.R: New tests * inst/tinytest/cpp/Matrix.cpp: Idem 2019-12-20 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2019-12-18 Dirk Eddelbuettel * inst/include/Rcpp/XPtr.h: Additional null check, refactored 2019-12-17 Kirill Müller * inst/include/Rcpp/XPtr.h: Clear external pointer before finalizer 2019-12-17 Dirk Eddelbuettel * R/Attributes.R (sourceCpp): Very minor cosmetic changes 2019-12-15 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2019-12-14 Dirk Eddelbuettel * R/Attributes.R (sourceCpp): Support new argument windowsDebugDLL to create a debug DLL, supported on Windows only * man/sourceCpp.Rd: Document it * src/date.cpp: A few more #nocov tage 2019-12-13 Dirk Eddelbuettel * src/api.cpp: A few more #nocov tags * src/attributes.cpp: Idem * src/barrier.cpp: Idem 2019-12-08 Dirk Eddelbuettel * tests/tinytest.R: Turn verbose tests on in dev and on Travis * inst/tinytest/test_client_package.R: Finer-grained skip messages * inst/tinytest/test_module_client_package.R: Idem * inst/tinytest/test_expose_class.R: Idem * inst/tinytest/test_interface.R: Idem * inst/tinytest/test_rcpp_package_skeleton.R: Idem * inst/tinytest/test_reference.R: Idem * inst/tinytest/test_*.R: Streamlined initial test and sourceCpp call * src/attributes.cpp: Remove dangling '#nocov end' 2019-12-07 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * inst/tinytest/test_binary_package.R: Finer-grained skip messages * inst/tinytest/test_misc.R: Add commented-out test that fails * tests/tinytest.R: Minor edit * docker/ci/Dockerfile: Add curl and ssl -dev packages needed for covr 2019-12-05 Dirk Eddelbuettel * vignettes/rmd/Rcpp-FAQ.Rmd (Rcpp): Add entry about "'dataptr' (or 'enterRNGScope') not provided by Rcpp" recommending proper importFrom 2019-12-03 Dirk Eddelbuettel * docker/ci/Dockerfile: Lighter builds as fewer Suggests: * docker/plus/Dockerfile: Take packages moved from ci/Dockerfile 2019-12-01 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * DESCRIPTION (Suggests): Remove knitr, rmarkdown, pinp * DESCRIPTION (VignetteBuilder): Remove knitr 2019-11-26 Dirk Eddelbuettel * inst/tinytest/test_embedded_r.R: Use sink to suppress noisy output, reenable tests (still conditional on usual environment variable) 2019-11-25 Dirk Eddelbuettel * inst/tinytest/cpp/Vector.cpp (no_op): Suppress compiler warning 2019-11-24 Dirk Eddelbuettel * DESCRIPTION (Suggests): Add tinytest, remove RUnit * tests/doRUnit.R: Removed * tests/tinytest.R: Added * tests/tinytest.R: Converted from RUnit to tinytest * inst/tinytest/test_algorithm.R: Idem * inst/tinytest/test_as.R: Idem * inst/tinytest/test_binary_package.R: Idem (but inactive for now) * inst/tinytest/test_client_package.R: Idem (but inactive for now) * inst/tinytest/test_dataframe.R: Idem * inst/tinytest/test_date.R: Idem (but condition two test sets on TZ) * inst/tinytest/test_dispatch.R: Idem * inst/tinytest/test_embedded.R: Idem * inst/tinytest/test_environments.R: Idem * inst/tinytest/test_exceptions.R: Idem * inst/tinytest/test_exceptions_nocall.R: Idem * inst/tinytest/test_expose_class.R: Idem * inst/tinytest/test_function.R: Idem * inst/tinytest/test_interface.R: Idem (but inactive for now) * inst/tinytest/test_internal_function.R: Idem * inst/tinytest/test_internal_function_cpp11.R: Idem * inst/tinytest/test_language.R: Idem * inst/tinytest/test_listof.R: Idem * inst/tinytest/test_matrix.R: Idem * inst/tinytest/test_misc.R: Idem * inst/tinytest/test_modref.R: Idem * inst/tinytest/test_module.R: Idem * inst/tinytest/test_module_client_package.R: Idem * inst/tinytest/test_na.R: Idem * inst/tinytest/test_quickanddirty.R: Idem * inst/tinytest/test_rcpp_package_skeleton.R: Idem * inst/tinytest/test_reference.R: Idem * inst/tinytest/test_rmath.R: Idem * inst/tinytest/test_robject.R: Idem * inst/tinytest/test_s4.R: Idem * inst/tinytest/test_stack.R: Idem * inst/tinytest/test_stats.R: Idem * inst/tinytest/test_string.R: Idem * inst/tinytest/test_subset.R: Idem * inst/tinytest/test_sugar.R: Idem * inst/tinytest/test_sugar_var.R: Idem * inst/tinytest/test_support.R: Idem * inst/tinytest/test_system.R: Idem * inst/tinytest/test_table.R: Idem * inst/tinytest/test_vector.R: Idem * inst/tinytest/test_vector_old.R: Idem * inst/tinytest/test_wrap.R: Idem * inst/tinytest/test_wstring.R: Idem * inst/tinytest/test_xptr.R: Idem * inst/tinytest/cpp/*: C++ support files for tests * inst/tinytest/*: Other support files and directories from unitTests * R/unitTests.R: Removed as tied to RUnit setuo * inst/tinytest/test_attributes.R: Added test for error with non-existing package in cppFunction 2019-11-23 Dirk Eddelbuettel * docker/ci/Dockerfile: Add tinytest to ci Docker image 2019-11-20 Dirk Eddelbuettel * R/Attributes.R: Test for and report unavailable 'LinkingTo' package 2019-11-19 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2019-11-18 Kun Ren * src/attributes.cpp: Add invisible param to export attribute (#1024) * vignettes/rmd/Rcpp-attributes.Rmd: Add an section of Returning invisible object 2019-11-13 Dirk Eddelbuettel * .github/ISSUE_TEMPLATE.md: Another small edit * .github/PULL_REQUEST_TEMPLATE.md: Idem 2019-11-13 Stephen Wade * inst/include/Rcpp/XPtr.h: Delete delegating ctor (follow-up #1012) * inst/unitTests/runit.XPTr.R: Reinsert self-tag test on Windows 2019-11-11 Dirk Eddelbuettel * inst/unitTests/runit.packageversion.R: New test * inst/unitTests/cpp/rcppversion.cpp: Cpp portion of test 2019-11-10 Dirk Eddelbuettel * .github/: Add files CONTRIBUTING.md, FUNDING.yml, ISSUE_TEMPLATE.md and PULL_REQUEST_TEMPLATE.md * inst/include/Rcpp/config.h: Correct RCPP_VERSION and RCPP_DEV_VERSION to 1.0.3 2019-11-09 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version 2019-11-09 TJ McKinley * R/Attributes.R: Correct how cppFunction() deals with multiple depends arguments 2019-11-08 Romain Francois * inst/include/Rcpp/lang.h: Safer Rcpp_list* and Rcpp_lang* * inst/include/Rcpp/Function.h: Add Function.invoke() for operator() * inst/include/Rcpp/generated/Function__operator.h: Safer Function.operator() using Function.invoke() 2019-11-08 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Release 1.0.3 * inst/include/Rcpp/config.h: Idem * inst/NEWS.Rd: Idem * inst/bib/Rcpp.bib: Idem * vignettes/Rcpp.bib: Idem 2019-11-06 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/XPtr.h: Provided fallback for old constructor when C++11 is not available (follow-up to #1003) * inst/unitTests/runit.XPTr.R (test.XPtr): On Windows (as a proxy for old compilers) do not test new feature * tests/doRUnit.R: Protect printing to /tmp from Windows use * vignettes/rmd/Rcpp.bib: Updated * inst/bib/Rcpp.bib: Idem 2019-11-02 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/Reference.h: Shield Rf_mkstring inside Rf_lang2 * inst/include/Rcpp/Environment.h: Idem (inside Rf_lang4) * inst/include/Rcpp/proxy/FieldProxy.h: Idem (inside Rf_lang3 and 4) 2019-10-31 Romain Francois * inst/include/Rcpp/DataFrame.h: Protect temporaries from gc * inst/include/Rcpp/Environment.h: Idem * inst/include/Rcpp/r_cast.h: Idem 2019-10-27 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/unitTests/runit.exposeClass.R: Updated to pass with r-devel * vignettes/rmd/Rcpp-FAQ.Rmd: Two new short section on speedier compilation and lack of exceptions / stop() across shared libraries 2019-10-26 Dirk Eddelbuettel * vignettes/Rcpp-package.Rnw: Another wrapper * vignettes/Rcpp-jss-2011.Rnw: Idem * vignettes/Makefile: Refinements * vignettes/rmd/Makefile: Idem * cleanup: Removed bashism, added invocation of make clean 2019-10-23 Dirk Eddelbuettel * vignettes/Rcpp-*.Rnw: Wrappers around pdf/*pdf * vignettes/Makefile: Added 2019-10-21 Dirk Eddelbuettel * vignettes/rmd/*: Moved from parent directory * vignettes/pdf/*: New target directory 2019-10-20 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * vignettes/Rcpp-FAQ.Rmd: Turn off knitr cache * vignettes/Rcpp-introduction.Rmd: Idem * vignettes/Makefile: Add simple Makefile * .Rbuildignore: Exclude vignettes/Makefile 2019-10-19 Stephen Wade * inst/include/Rcpp/XPtr.h: XPtr constructor split up, a single argument does not modify tags and protected data of the external pointer * inst/unitTests/cpp/Xptr.cpp: Added test * inst/unitTests/runit.XPtr.R: Idem 2019-10-14 Dirk Eddelbuettel * README.md: Added CRAN + BioConductor badges for reverse depends, 2019-10-11 Dirk Eddelbuettel * inst/include/Rcpp/exceptions.h: Condition use of typeid() on absence of RCPP_NO_RTTI in two places * inst/include/Rcpp/r/headers.h: RCPP_NO_RTTI implies RCPP_NO_MODULES 2019-10-04 Dirk Eddelbuettel * vignettes/Rcpp-attributes.Rmd: Correct two unevaluated knitr C++ chunks to mode 'Rcpp' rather than the (unregistered) C++ mode * vignettes/Rcpp-extending.Rmd: Minor white-space tweak to avoid paragraph-spacing warnings from latex and its mdframed style * vignettes/Rcpp-modules.Rmd: Idem * vignettes/Rcpp-sugar.Rmd: Idem 2019-10-01 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version 2019-09-30 Kevin Ushey * inst/include/Rcpp.h: add RCPP_NO_MODULES * inst/include/Rcpp/api/meat/is.h: Idem * inst/include/Rcpp/api/meat/meat.h: Idem 2019-09-28 Dirk Eddelbuettel * README.md: Add a stackoverflow tag to indicate where to ask questions, also updated package counts on CRAN and BioC for Rcpp users 2019-08-06 Riccardo Porreca * vignettes/Rcpp-modules.Rmd: Extensive review and edit improving the Modules vignette 2019-08-04 Dirk Eddelbuettel * README.md: Add thre doi badges * inst/NEWS.Rd: Two minor edits 2019-07-21 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version 2019-07-21 Riccardo Porreca * R/Module.R: Use an explicit Rcpp:: in the initalize method for C++ classes wrapped inside modules to ensure proper initialization 2019-07-20 Dirk Eddelbuettel * DESCRIPTION: Release 1.0.2 * inst/include/Rcpp/config.h: Idem * inst/NEWS.Rd: Idem * inst/bib/Rcpp.bib: Idem * vignettes/Rcpp.bib: Idem 2019-07-18 Pierrick Roger * src/attributes.cpp: Correct parsing of default function values * inst/unitTests/cpp/attributes.cpp: Added tests * inst/unitTests/runit.attributes.R: Idem 2019-07-16 Dirk Eddelbuettel * debian/: Removed, see https://salsa.debian.org/edd/r-base/ instead 2019-07-04 Dirk Eddelbuettel * vignettes/Rcpp.bib: Updated * inst/bib/Rcpp.bib: Idem 2019-05-05 Dirk Eddelbuettel * .Rbuildignore: Small tweak 2019-04-27 Dirk Eddelbuettel * R/Rcpp.package.skeleton.R (Rcpp.package.skeleton): Use getRcppVersion() 2019-04-26 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * R/tools.R (getRcppVersion): More idiomatic code 2019-04-25 Dirk Eddelbuettel * R/tools.R (getRcppVersion): Export R (and dev) package version * man/getRcppVersion.Rd: Documentation for new function * inst/include/Rcpp/config.h (RCPP_VERSION_STRING): New version and development version string #define * src/api.cpp (getRcppVersionStrings): Expose new versions strings * src/internal.h: Register new version string exporter * src/rcpp_init.cpp (callEntries[]): Idem * inst/unitTests/runit.misc.R (test.getRcppVersion): test new function 2019-03-23 Ralf Stubner * vignettes/Rcpp-modules.Rmd: Describe RCPP_EXPOSED_* macros * vignettes/Rcpp-extending.Rmd: Reference Modules extensions 2019-03-23 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/NEWS.Rd: Updated 2019-03-20 James J Balamuta * inst/include/Rcpp/sugar/functions/unique.h: Added decreasing parameter to control sort. * inst/unitTests/runit.sugar.R: Added sort_unique() tests * inst/unitTests/cpp/sugar.cpp: Ditto 2019-03-20 Dirk Eddelbuettel * src/date.cpp: Renamed from Date.cpp * src/module.cpp: Renamed from Module.cpp * src/rcpp_init.cpp: Renamed from Rcpp_init.cpp 2019-03-19 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * tests/doRUnit.R: On Travis always set RunAllRcppTests * docker/ci/Dockerfile: Set environment variables container-wide 2019-03-18 Dirk Eddelbuettel * inst/include/Rcpp/macros/macros.h (END_RCPP_RETURN_ERROR): Add UNPROTECT to reference nprot, also check for stop_sym 2019-03-17 Dirk Eddelbuettel * DESCRIPTION: Release 1.0.1 * inst/include/Rcpp/config.h: Idem * inst/NEWS.Rd: Idem * inst/bib/Rcpp.bib: Idem * vignettes/Rcpp.bib: Idem 2019-03-16 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/unitTests/runit.sugar.R: Set the sample() behaviour to R 3.5.0 as R 3.6.0 has a breaking change (for the better) 2019-03-13 Romain François * inst/include/Rcpp/macros/macros.h: Add UNPROTECT to please rchk 2019-03-12 Romain François * inst/include/Rcpp/api/meat/proxy.h: AttributeProxy::set() with Shield<> and a few related uses of Shield<> to please rchk * inst/include/Rcpp/clone.h: Idem * inst/include/Rcpp/proxy/AttributeProxy.h: Idem * inst/include/Rcpp/proxy/NamesProxy.h: Idem * inst/include/Rcpp/vector/Matrix.h: Idem * inst/include/Rcpp/vector/Vector.h: Idem 2019-02-25 Dirk Eddelbuettel * .travis.yml (after_success): Setting CODECOV_TOKEN to reenable codecov.io coverage as detailed by Ralf in GitHub issue #941 2019-02-16 Dirk Eddelbuettel * inst/include/Rcpp/sugar/functions/cbind.h: Converted CRLF to CR 2019-02-15 Dirk Eddelbuettel * inst/README: Moved stale file to local/ * inst/THANKS: Idem 2019-02-13 Dirk Eddelbuettel * DESCRIPTION (Version, Date): New minor version 2019-02-11 Kevin Ushey * R/Attributes.R: better handle pre-existing RcppExports.cpp, RcppExports.R when calling compileAttributes() 2019-02-09 Ralf Stubner * Rcpp-modules.Rmd: Added example for .factory 2019-01-31 Dirk Eddelbuettel * inst/include/Rcpp/protection/Shelter.h (Rcpp): Only increase nprotected count if object is not NULL (suggested by Stepan Sindelar) 2018-12-26 Zhuoer Dong * vignettes/Rcpp-quickref.Rmd: Fix three bugs: use `Named()`, define `glob`, `glob.ls(TRUE)`. 2018-12-01 Dirk Eddelbuettel * R/Attributes.R: Added new 'c++2a' plugin for '-std=c++2a' compilation standard supported by g++ 8 or later 2018-11-11 Dirk Eddelbuettel * inst/include/Rcpp/vector/Subsetter.h (check_indices): More informative error message as suggested by KK 2018-11-09 William Nolan * inst/include/Rcpp/vector/Subsetter.h: Fixed to use R_xlen_t instead of int for indexing and added warning when indexing by IntegerVector (only for large enough vectors) 2018-11-05 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Version 1.0, and happy 10th birthday! * inst/include/Rcpp/config.h: Idem * inst/NEWS.Rd: Idem * inst/bib/Rcpp.bib: Idem * vignettes/Rcpp.bib: Idem 2018-11-04 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Roll minor version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem * README.md: Updated stated package and test numbers 2018-10-25 Kevin Ushey * inst/include/Rcpp/String.h: Use Rf_mkCharLenCE() as appropriate * inst/unitTests/cpp/String.cpp: Add unit tests * inst/unitTests/runit.String.R: Add unit tests 2018-10-12 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Roll minor version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem * tests/doRUnit.R: Simplified to something similar to what RcppArmadillo (and other packages) had for a while now * vignettes/Rcpp-unitTests.Rnw: Removed as less useful now 2018-10-08 JJ Allaire * R/Attributes.R: Sort the files scanned for attributes in the C locale for stable output across systems. 2018-10-07 Ralf Stubner * vignettes/Rcpp-extending.Rmd: Correct EXPORT to EXPOSED in displays of the corresponding macro, and remove two spurious semicolons 2018-10-02 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Roll minor version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem 2018-10-02 Romain Francois * inst/include/Rcpp/vector/Matrix.h: Init nrow in Matrix(no_init) ctor * inst/unitTests/runit.Matrix.R: New test * inst/unitTests/cpp/Matrix.cpp: Idem 2018-09-30 Dirk Eddelbuettel * man/RcppUnitTests.Rd: Remove \details{} with conditional code which R-devel (as of Sep 28) warns about as empty 2018-09-28 Dirk Eddelbuettel * .travis.yml (env): Set distinct build and check options to skip tests of vignettes 2018-09-27 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/date_datetime/Date.h: Remove the empty destructor to make g++-9 (prerelease) happy [CRAN request] * inst/unitTests/runit.Matrix.R: Correct typo 2018-09-27 Romain Francois * inst/include/Rcpp/vector/Matrix.h: Fix Matrix(no_init(int,int)) constructor * inst/unitTests/runit.Matrix.R: test for above * inst/unitTests/cpp/Matrix.cpp: same 2018-09-26 Dirk Eddelbuettel * docker/ci/Dockerfile: Set env var RunAllRcppTests=yes * .travis.yml: Do not set env var here as needed in Docker 2018-09-21 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.19 * inst/NEWS.Rd: Idem * inst/bib/Rcpp.bib: Idem * vignettes/Rcpp.bib: Idem * inst/include/Rcpp/config.h: Idem * R/RcppLdpath.R (RcppLdPath, RcppLdFlags, CxxFlags, RcppCxx0xFlags): After discussion with CRAN, do not mark as .Deprecated() as too many packages are involved. This will need to be phased in more slowly. 2018-09-20 Dirk Eddelbuettel * vignettes/Rcpp-FAQ.Rmd: Set 'eval=FALSE' on another RcppArmadillo example to not create a build-time dependency 2018-09-18 JJ Allaire * src/attributes.cpp: Add support for [[Rcpp::init]] attribute * vignettes/Rcpp-attributes.Rmd: Documentation for [[Rcpp::init]] attribute 2018-09-17 Dirk Eddelbuettel * inst/include/Rcpp/r/headers.h: Define STRICT_R_HEADERS, but until September 2019 protect by defining RCPP_NO_STRICT_HEADERS * .travis.yml (env): Switch to rcpp/ci for ci use 2018-09-15 Dirk Eddelbuettel * docker/ci/Dockerfile: Move Dockerfile to docker/ci * docker/run/Dockerfile: Add deployment Dockerfile * docker/plus/Dockerfile: Add 'plus-sized' Dockerfile suitable for different add-on packages requiring Rcpp{Armadillo,Eigen,GSL} or BH 2018-09-02 Dirk Eddelbuettel * .travis.yml: Switch to rcpp/rcpp-testing container 2018-08-29 Dirk Eddelbuettel * .travis.yml: Use Dockerfile 2018-08-28 Dirk Eddelbuettel * docker/Dockerfile: Add Dockerfile for use by Travis CI 2018-08-27 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * man/Rcpp-deprecated.Rd: Fix two-char typo/thinko in \link{} 2018-07-29 Dirk Eddelbuettel * README.md: Refreshed via some edits and updates * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2018-07-28 Dirk Eddelbuettel * R/RcppLdpath.R (RcppLdPath, RcppLdFlags, CxxFlags, RcppLdFlags) (RcppCxx0xFlags): Marked as deprecated * man/Rcpp-deprecated.Rd: Add exported functions LdFlags() and RcppLdFlags() as deprecated * man/RcppLdFlags.Rd: Idem 2018-07-27 Dirk Eddelbuettel * man/loadRcppModules-deprecated.Rd: Fix typo; was deprecated in 0.12.5, not 0.16.5 which does not exist 2018-07-26 Dirk Eddelbuettel * vignettes/Rcpp-FAQ.Rmd: Use collapse: true * vignettes/Rcpp-introduction.Rmd: Idem 2018-07-25 Dirk Eddelbuettel * vignettes/Rcpp-extending.Rmd: Use collapse: true 2018-07-24 Martin Lysy * R/loadRcppClass.R: Search in R module for 'Class' instead of 'CppClass'. * R/exposeClass.R: Fixed 'rename' argument to work as expected. * inst/unitTests/runit.exposeClass.R: Added unit tests for the above. 2018-07-23 Dirk Eddelbuettel * inst/bib/Rcpp.bib: More updates * vignettes/Rcpp.bib: Idem 2018-07-21 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.18 * inst/NEWS.Rd: Idem * inst/bib/Rcpp.bib: Idem * vignettes/Rcpp.bib: Idem * inst/include/Rcpp/config.h: Idem * vignettes/Rcpp.bib: Updated other references * inst/bib/Rcpp.bib: Idem * inst/unitTests/runit.sugar.R: Additional min, max unit tests * inst/unitTests/cpp/sugar.cpp: Idem 2018-07-20 Dirk Eddelbuettel * inst/include/Rcpp/sugar/functions/max.h: Also consider case of an empty vector * inst/include/Rcpp/sugar/functions/min.h: Idem 2018-07-19 Jack Wasey * inst/include/Rcpp/r_cast.h: Error and abort if debugging for STRSXP 2018-07-24 Martin Lysy * R/loadRcppClass.R: Search in R module for 'Class' instead of 'CppClass'. * R/exposeClass.R: Fixed 'rename' argument to work as expected. * inst/unitTests/runit.exposeClass.R: Added unit tests for the above. 2018-07-12 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2018-07-12 Jack Wasey * R/Attributes.R: Use case-insensitive sort of filenames to make RcppExports more deterministic 2018-07-10 Lionel Henry * inst/include/Rcpp/exceptions.h: Move LongjumpException from the Rcpp::internal namespace to the public Rcpp namespace. If you have a catch-all statement like `catch (...)`, be sure to catch and rethrow Rcpp::LongjumpException to prevent the R longjump from being ignored. * inst/include/Rcpp/macros/macros.h (VOID_END_RCPP): idem * src/attributes.cpp: idem 2018-07-09 Dirk Eddelbuettel * src/Date.cpp: Skip 'tm_gmtoff' on AIX as well (thanks to PR 876 by @ayappanec) 2018-07-05 Lionel Henry * inst/include/Rcpp/api/meat/Rcpp_eval.h: Rename `RCPP_PROTECTED_EVAL` to `RCPP_USE_UNWIND_PROTECT` because the new API is now more general than just evaluation of R code. * inst/NEWS.Rd: idem * inst/unitTests/runit.interface.R: idem * R/unit.tests.R (unitTestSetup): Pass extra arguments to sourceCpp() for easier debugging. * R/Attributes.R (.plugins[["unwindProtect"]]): You can now add `[[Rcpp::plugins(unwindProtect)]]` in one of your source file to enable the new unwind-protect mechanism easily. It appends `-DRCPP_USE_UNWIND_PROTECT` to `PKG_CPPFLAGS`. This is safer than using a `#define` because it ensures unwind-protect is enabled in all compilation units, including RcppExports.cpp. * inst/unitTests/cpp/stack.cpp: Use new plugin to enable unwind-protect. 2018-06-22 Kevin Ushey * inst/include/Rcpp/api/meat/Rcpp_eval.h: Ensure R_BaseEnv is used 2018-06-21 Lionel Henry * inst/include/Rcpp/api/meat/unwind.h: Extract unwind protection from Rcpp::Rcpp_fast_eval() into Rcpp::unwindProtect(). Use this function whenever you need to call a C function that might longjump, for instance a function from R's C API. Rcpp::unwindProtect() will protect your C++ stack and throw a Rcpp::internal::LongJump exception to ensure all destructors are called. The R longjump is then resumed once it is safe to do so. This function powers Rcpp_fast_eval(). You can use Rcpp::unwindProtect() in two ways. First with a C-like callback interface that takes a `SEXP (*)(void* data)` function pointer and a `void*` data argument that is passed to the function. Second, if you have C++11 enabled, Rcpp::unwindProtect() implements an `std::function` overload. You can pass any function object or lambda function with the right signature. * inst/include/Rcpp/api/meat/Rcpp_eval.h: Idem 2018-06-15 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2018-06-13 Filip Schouwenaars * inst/unitTests/runit.embeddedR.R: Evaluate in environment derived of baseenv 2018-06-11 Romain Francois * inst/include/Rcpp/exceptions.h: Control call and stack display after exception / stop * inst/unitTests/cpp/Exceptions_nocall.cpp: new test * inst/unitTests/runit.Exceptions_nocall.R: idem 2018-06-09 Qiang Kou * inst/include/Rcpp/DataFrame.h: Use Rcpp_fast_eval, not Rcpp_eval * inst/include/Rcpp/Environment.h: Idem * inst/include/Rcpp/Function.h: Idem * inst/include/Rcpp/Language.h: Idem * inst/include/Rcpp/Module.h: Idem * inst/include/Rcpp/Reference.h: Idem * inst/include/Rcpp/exceptions.h: Idem * inst/include/Rcpp/generated/Function__operator.h: Idem * inst/include/Rcpp/proxy/FieldProxy.h: Idem * inst/include/Rcpp/proxy/NamesProxy.h: Idem * inst/include/Rcpp/r_cast.h: Idem * inst/include/Rcpp/vector/Vector.h: Idem * inst/examples/SugarPerformance/sugarBenchmarks.R: Idem * inst/unitTests/cpp/language.c: Idem * inst/unitTests/cpp/misc.c: Idem * src/barrier.c: Idem 2018-06-09 Dirk Eddelbuettel * inst/unitTests/runit.embeddedR.R: Suspend test for now 2018-06-08 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * Contributing.md: Minor update coding style 2018-06-07 Kevin Ushey * inst/include/Rcpp/config.h: bump dev version 2018-06-06 Kevin Ushey * inst/include/Rcpp/RNGScope.h: Allow suspension of RNG synchronization * inst/include/Rcpp/routines.h: Idem * src/Rcpp_init.cpp: Idem * src/api.cpp: Idem * inst/include/Rcpp/api/meat/Rcpp_eval.h: Evaluate in base env 2018-06-05 Jack Wasey * inst/include/Rcpp/r_cast.h: Error and abort if debugging 2018-06-02 Lionel Henry * inst/unitTests/runit.interface.R: New test for the case where the client package was compiled without protected evaluation enabled. On R 3.5, longjump exceptions thrown from imported functions are still caught and dealt with properly by the client package. * inst/unitTests/runit.interface.R: Test both Rcpp_eval() and Rcpp_fast_eval(). 2018-06-01 Lionel Henry * inst/unitTests/runit.interface.R: New tests for interfaces and unwind. These tests build two packages, and that exports a function via Rcpp::interfaces(cpp) and the other that calls it. The attributes are regenerated and the packages rebuilt each time the tests are run. The tests check in particular that the C++ stack is properly unwound when a long jump occurs. 2018-06-01 Romain Francois * inst/include/Rcpp/Environment.h: Make Environment::new_child() const 2018-05-31 Lionel Henry * inst/include/Rcpp/api/meat/Rcpp_eval.h: Fix protected evaluation. Setting `RCPP_PROTECTED_EVAL` before including Rcpp.h enables a new R 3.5 API for safe evaluation of R code. R longjumps are now correctly intercepted and rethrown. Thanks to this the C++ stack is now safely unwound when a longjump is detected while calling into R code. This includes the following cases: thrown errors, caught condition of any class, long return, restart invokation, debugger exit. Note that this is still experimental! When `RCPP_PROTECTED_EVAL` is enabled, Rcpp_eval() uses the protect-unwind API under the hood in order to gain safety. It is fully backward-compatibile and still catches errors and interrupts to rethrow them as typed C++ exceptions. If you don't need to catch those, consider using Rcpp_fast_eval() instead to avoid the catching overhead. Rcpp_fast_eval() is a wrapper around Rf_eval(). Unlike Rcpp_eval(), it does not evaluate R code within tryCatch() and thus avoids the overhead of wrapping and evaluating the expression in a tryCatch() call. When Rcpp is compiled with a lower version than R 3.5, Rcpp_fast_eval() falls back to Rf_eval() without any protection from long jumps, even when `RCPP_PROTECTED_EVAL` is set. Either add R 3.5 to your `Depends` or make sure the legacy Rcpp_eval() function is called instead of Rcpp_fast_eval() when your package is compiled with an older version of R. Note that Rcpp_fast_eval() behaves a bit differently to Rcpp_eval(). The former has the semantics of the C function Rf_eval() whereas the latter behaves like the R function base::eval(). This has subtle implications for control flow. For instance evaluating a return() expression within a frame environment returns from that frame rather than from the Rcpp_eval() call. * inst/include/Rcpp/macros/macros.h: Leave the try/catch scope before resuming jump to ensure proper destruction of the exception reference. * inst/include/Rcpp/exceptions.h: Functions to create and check a longjump sentinel. This sentinel is used as return value in contexts where it is not safe to resume a jump (i.e. in the glue code of cpp interfaces). * inst/include/Rcpp/macros/macros.h: Return a longjump sentinel in END_RCPP_RETURN_ERROR. * src/attributes.cpp: Detect longjump sentinels and resume jump. 2018-05-27 Romain Francois * inst/include/Rcpp/vector/string_proxy.h: Make StringProxy::operator== const * inst/unitTests/cpp/Vector.cpp: New test * inst/unitTests/runit.Vector.R: Idem 2018-05-09 Filip Schouwenaars * R/Attributes.R: Set local environment in source() * inst/unitTests/cpp/embeddedR.cpp: New test * inst/unitTests/runit.embeddedR.R: Idem 2018-05-09 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.17 * inst/NEWS.Rd: Release 0.12.17 * inst/bib/Rcpp.bib: Release 0.12.17 * vignettes/Rcpp.bib: Release 0.12.17 * inst/include/Rcpp/config.h: Release 0.12.17 * debian/*: Changes for Debian release of 0.12.16 2018-05-05 Dirk Eddelbuettel * vignettes/Rcpp-FAQ.Rmd: Also mention TAS paper * vignettes/Rcpp-introduction.Rmd: Idem * vignettes/Rcpp-jss-2011.Rnw: Idem 2018-05-04 Romain Francois * inst/include/Rcpp/String.h: Extend StoragePolicy support * inst/include/Rcpp/vector/00_forward_proxy.h: Idem * inst/include/Rcpp/vector/Vector.h: Idem * inst/include/Rcpp/vector/const_generic_proxy.h: Idem * inst/include/Rcpp/vector/const_string_proxy.h: Idem * inst/include/Rcpp/vector/generic_proxy.h: Idem * inst/include/Rcpp/vector/proxy.h: Idem * inst/include/Rcpp/vector/string_proxy.h: Idem * inst/include/Rcpp/vector/traits.h: Idem * inst/unitTests/cpp/Vector.cpp: New test * inst/unitTests/runit.Vector.R: Idem 2018-04-25 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version 2018-04-25 Romain Francois * inst/include/Rcpp/Benchmark/Timer.h: If defined, undefine FALSE 2018-04-17 Ralf Stubner * vignettes/Rcpp-attributes.Rmd: Replace back-quote with straight quote * vignettes/Rcpp-modules.Rmd: Idem 2018-04-02 Dirk Eddelbuettel * .editorconfig: Added support for editorconfig.org * .clang_format: Removed * .dir-locals.el: Removed 2018-03-31 Dirk Eddelbuettel * inst/include/Rcpp/sprintf.h (Rcpp): Remove parens [gcc8 warning] * vignettes/Rcpp-attributes.Rmd: Update link to JSS intro vignette * vignettes/Rcpp-modules.Rmd: Idem 2018-03-21 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version 2018-03-18 Kevin Ushey * inst/include/Rcpp/stats/random/random.h: No inheritance from RNGScope 2018-03-14 Dirk Eddelbuettel * vignettes/Rcpp-FAQ.Rmd: Correct a double-quote (thanks, Joris Meys) 2018-03-08 Peter Hickey * vignettes/Rcpp-attributes.Rmd: Correct stray backslash 2018-03-08 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.16 * inst/NEWS.Rd: Release 0.12.16 * inst/bib/Rcpp.bib: Release 0.12.16 * vignettes/Rcpp.bib: Release 0.12.16 * inst/include/Rcpp/config.h: Release 0.12.16 * debian/*: Changes for Debian release of 0.12.16 2018-02-07 Kevin Ushey * inst/include/Rcpp/longlong.h: Revised and more general logic for long long on 64bit Windows etc via C++11 and as int64_t alias where possible 2018-03-01 Dirk Eddelbuettel * inst/include/Rcpp/sugar/functions/complex.h (Rcpp): Remove RCPP_HYPOT macro and use ::hypot() throught as it is provided with C99 * inst/include/Rcpp/sugar/undoRmath.h: Also uncomment pythag here 2018-02-28 Dirk Eddelbuettel * inst/include/Rcpp/Rmath.h (R): Rf_pythag has been remove in R 2.14.0 so comment-out the R::pythag wrapper (per request of Brian Ripley) 2018-02-26 Kevin Ushey * src/api.cpp: Always set / put RNG state when calling Rcpp function 2018-02-25 Dirk Eddelbuettel * vignettes/Rcpp.bib: Updated * inst/bib/Rcpp.bib: Idem * vignettes/Rcpp-FAQ.Rmd (Note): Expand conda answer by adding link 2018-02-14 Dirk Eddelbuettel * DESCRIPTION (Version, Date): New minor version 2018-02-14 Kirill Müller * R/Attributes.R: Code compiled with cppFunction() uses .Call instead of .Primitive(".Call"), #795 2018-02-07 Kevin Ushey * inst/include/Rcpp/longlong.h: Allow long long on 64bit Windows 2018-01-21 Dirk Eddelbuettel * README.md: Added new section 'Support' * vignettes/Rcpp-FAQ.Rmd (vignette): Uppercase index to 'Rcpp-FAQ'; removed reference to Gmane which sadly is no more 2018-01-19 Dirk Eddelbuettel * vignettes/Rcpp-FAQ.Rmd (Note): Document the conda package `gxx_linux-64` as helpful in that environment 2018-01-16 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.15 * inst/NEWS.Rd: Release 0.12.15 * inst/bib/Rcpp.bib: Release 0.12.15 * vignettes/Rcpp.bib: Release 0.12.15 * inst/include/Rcpp/config.h: Release 0.12.15 * debian/*: Changes for Debian release of 0.12.15 2018-01-15 Dirk Eddelbuettel * inst/include/RcppCommon.h: Check for new #define RCPP_USE_UNWIND_PROTECT and unset if defined, this is being be used to "park" code from #789 * inst/include/Rcpp/Environment.h: Ifdef #789 via RCPP_USE_UNWIND_PROTECT * inst/include/Rcpp/Language.h: Idem * inst/include/Rcpp/api/meat/Rcpp_eval.h: Idem * inst/include/Rcpp/exceptions.h: Idem * inst/include/Rcpp/macros/macros.h: Idem * inst/unitTests/runit.stack.R: Ensure test is not running 2018-01-14 Dirk Eddelbuettel * DESCRIPTION (Version, Date): New minor version 0.12.14.8 * inst/include/Rcpp/traits/is_na.h (Rcpp): Also speed up Rcpp::is_na 2018-01-14 Lionel Henry * inst/unitTests/cpp/stack.cpp: Move stack unwinding tests from misc.cpp * inst/unitTests/runit.stack.R: Move stack unwinding tests from misc.R; disaggregate stack unwinding tests; also disable for now 2018-01-11 Kirill Müller * inst/include/Rcpp/traits/is_na.h: Speed up Rcpp::is_na() 2018-01-09 Iñaki Ucar * inst/include/Rcpp/vector/proxy.h: Improve support for NVCC, the CUDA compiler, by making three more methods const 2018-01-06 Kendon Bell * src/api.cpp: Allow for compilation on ANDROID 2017-12-21 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Updated minor version and date 2017-12-21 Kirill Müller * inst/include/Rcpp/internal/wrap.h: Appease gcc-7 with fall-through * inst/include/Rcpp/macros/unroll.h: Idem 2017-12-20 Kirill Müller * inst/include/Rcpp/utils/tinyformat.h: Update to new upstream c42f/tinyformat@8f60162, simplify future updates by separating Rcpp-specific changes (issue #786). 2017-12-19 Kevin Ushey * inst/include/Rcpp/internal/na.h: Remove 'clever' NA / NaN checks 2017-12-16 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Updated minor version and date 2017-12-13 Lionel Henry * inst/include/Rcpp/api/meat/Rcpp_eval.h: Add Rcpp_fast_eval() for safe and fast evaluation of R code using the new protect-unwind API in R 3.5. [ This is however disabled for release 0.12.15. ] * inst/include/Rcpp/exceptions.h: Add LongjumpException and resumeJump() to support Rcpp_fast_eval(). * inst/include/Rcpp/macros/macros.h: Catch LongjumpException and call resumeJump(). If resumeJump() doesn't jump (on old R versions), throw an R error (this normally should not happen). * inst/include/RcppCommon.h: Add Rcpp_fast_eval() to the public API and internal::Rcpp_eval_impl() to the private API. * inst/include/Rcpp/Environment.h: Use safe evaluation * inst/include/Rcpp/Language.h: idem 2017-12-05 Kevin Ushey * inst/include/Rcpp/Environment.h: Use public R APIs * inst/include/Rcpp/api/meat/Environment.h: Idem 2017-12-04 Kevin Ushey * inst/include/Rcpp/RObject.h: Protect temporary wrapped SEXPs * inst/include/Rcpp/api/meat/DataFrame.h: Idem * inst/include/Rcpp/api/meat/Environment.h: Idem * inst/include/Rcpp/api/meat/proxy.h: Idem * inst/include/Rcpp/proxy/ProtectedProxy.h: Idem * inst/include/Rcpp/vector/generic_proxy.h: Idem 2017-12-03 Dirk Eddelbuettel * DESCRIPTION (Version, Date): New minor version * inst/include/Rcpp/sugar/functions/is_na.h: Correct test for NA to work with new as well as old Date(time)Vectors * inst/unitTests/cpp/dates.cpp (has_na): Added tests * inst/unitTests/runit.Date.R (test.NA): Idem 2017-11-30 James J Balamuta * src/attributes.cpp: Fixed missing Rcpp namespace in export interface generation 2017-11-25 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/exceptions/cpp11/exceptions.h: Ensure Rf_format gets a format string * inst/include/Rcpp/exceptions/cpp98/exceptions.h (Rcpp): Ditto 2017-11-18 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * vignettes/Rcpp-FAQ.Rmd: Use Rcpp::Rcpp.plugin.maker(), not ':::' 2017-11-17 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.14 * inst/NEWS.Rd: Release 0.12.14 * inst/bib/Rcpp.bib: Release 0.12.14 * vignettes/Rcpp.bib: Release 0.12.14 * inst/include/Rcpp/config.h: Release 0.12.14 2017-11-04 Dirk Eddelbuettel * vignettes/Rcpp-FAQ.Rmd: Add 'skip_final_break: true' toggle * vignettes/Rcpp-attributes.Rmd: Idem * vignettes/Rcpp-extending.Rmd: Idem * vignettes/Rcpp-modules.Rmd: Idem * vignettes/Rcpp-sugar.Rmd: Idem 2017-10-30 Dirk Eddelbuettel * inst/include/Rcpp.h: Unless RCPP_FORCE_OLD_DATE_DATETIME_VECTORS is defined, define RCPP_NEW_DATE_DATETIME_VECTORS to switch to new date and datetime vector as announced in release 0.12.8 one year ago 2017-10-03 Dirk Eddelbuettel * inst/include/Rcpp/iostream/Rstreambuf.h: White-space edits 2017-10-02 Kirill Müller * inst/include/Rcpp/iostream/Rstreambuf.h: Embed buffer class instance in Rostream to not require run-time allocation, and please Coverity 2017-09-29 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * DESCRIPTION (Description): Add per suggestion by CRAN * inst/CITATION: Add PeerJ article, add doi info, reindent 2017-09-26 Daniel C. Dillon * inst/include/Rcpp/vector/MatrixRow.h: Added cbegin() / cend() to MatrixRow, and fixing return types * inst/include/Rcpp/vector/VectorBase.h: Ditto 2017-09-24 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.13 * inst/NEWS.Rd: Release 0.12.13 * inst/bib/Rcpp.bib: Release 0.12.13 * inst/include/Rcpp/config.h: Release 0.12.13 2017-09-23 Dirk Eddelbuettel * inst/bib/Rcpp.bib: Updated references * viignettes/Rcpp.bib: Idem 2017-09-21 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * vignettes/Rcpp-FAQ.Rmd (Rcpp): Add entry for 'symbols not found' error requiring two runs of compileAttributes 2017-09-20 James J Balamuta * vignettes/rcpp-docs.cls: Removed 2017-09-20 Dirk Eddelbuettel * vignettes/Rcpp-FAQ.Rmd: Modified formatting and cleaned a bit more. * vignettes/Rcpp-sugar.Rmd: Idem * vignettes/Rcpp-introduction.Rmd: Added new PeerJ preprint 2017-09-19 James J Balamuta * vignettes/Rcpp-FAQ.Rmd: Formatted and cleaned up vignette. * vignettes/Rcpp-sugar.Rmd: Idem 2017-09-19 Dirk Eddelbuettel * vignettes/Rcpp-attributes.Rmd: Formatted and cleaned up vignette. * vignettes/Rcpp-extending.Rmd: Idem * vignettes/Rcpp-modules.Rmd: Idem * vignettes/Rcpp-package.Rmd: Idem * vignettes/Rcpp-quickref.Rmd: Idem 2017-09-18 James J Balamuta * DESCRIPTION (Suggests): Added rmarkdown, knitr, and pinp dependencies * .travis.yml: idem * vignettes/Rcpp-quickref.Rmd: Translated vignette from highlight/sweave to RMarkdown for use with the pinp template. * vignettes/Rcpp-sugar.Rmd: Idem * vignettes/Rcpp-package.Rmd: Idem * vignettes/Rcpp-modules.Rmd: Idem * vignettes/Rcpp-FAQ.Rmd: Idem * vignettes/Rcpp-extending.Rmd: Idem * vignettes/Rcpp-attributes.Rmd: Idem 2017-09-18 Daniel C. Dillon * inst/include/Rcpp/vector/MatrixRow.h: Added cbegin() and cend() to the class along with a framework for proper const-correctness in the future. 2017-09-03 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version 2017-09-02 James J Balamuta * inst/include/Rcpp/vector/VectorBase.h: Defined both iterator AND const_iterator for future considerations. Currently, as before, only const_iterator is available (though it used to be called iterator). Added cbegin() and cend() functions. We should revisit whether there should be a non-const iterator on VectorBase in the future. * inst/include/Rcpp/vector/Matrix.h: Added cbegin() and cend() functions. Iterator defintions inherited from Vector are appropriate. * inst/include/Rcpp/vector/MatrixColumn.h: Added cbegin() and cend() functions. Iterator definitions inherited from Vector are appropriate because Matrix is column-major. * inst/include/Rcpp/vector/Vector.h: Added cbegin() and cend() functions. Iterators are appropriate minus the problem with the const proxy class of objects (which may or may not actually be const depending on which one). * inst/include/Rcpp/vector/traits.h: Removed (accidentally) some some trailing whitespace on lines. 2017-09-02 Dirk Eddelbuettel * DESCRIPTION (Version): Roll minor version * vignettes/Rcpp-jss-2011.Rnw: Renamed again from Rcpp-introduction-2011, added reference to new Rcpp-introduction * inst/bib/Rcpp.bib: Merged bibliography from new vignette; also added PeerJ Preprint with new Rcpp Introduction 2017-09-01 Dirk Eddelbuettel * vignettes/Rcpp-introduction.Rnw: New introductory vignette from PeerJ preprints but typeset 'more nicely' * vignettes/rcpp-docs.cls: New LaTeX style file derived from pnas-new and its supporting files * vignettes/figures/: Three support figures for new vignette * vignettes/intro2Rcpp.bib: New bibliography * vignettes/Rcpp-introduction-2011.Rnw: Renamed from from Rcpp-introduction 2017-08-26 Dirk Eddelbuettel * .travis.yml (before_install): Use https for curl fetch 2017-08-14 James J Balamuta * vignettes/Rcpp-FAQ.Rnw: Sunset macOS documentation dealing with toolchains by redirecting to the R Installation and Administration manual * vignettes/.gitignore: Added various LaTeX build artifacts to ignore. 2017-08-05 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version and date * inst/include/Rcpp/XPtr.h: Whitespace only-changes 2017-08-04 Lei Yu * inst/include/Rcpp/Module.h: Correct one closing parenthesis 2017-07-13 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.12 * inst/NEWS.Rd: Release 0.12.12 * inst/bib/Rcpp.bib: Release 0.12.12 * inst/include/Rcpp/config.h: Release 0.12.12 * README.md: Updated counts for dependents and tests * debian/*: Changes for Debian release of 0.12.12 2017-07-10 Jeff Pollock * inst/include/Rcpp/Module.h: Avoid unused variable warning * inst/include/Rcpp/Module_generated_Constructor.h: Ditto 2017-07-09 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Ditto * inst/NEWS.Rd: Added missing entries 2017-07-08 Kirill Müller * inst/include/Rcpp/vector/no_init.h: Accept R_xlen_t instead of int * inst/include/Rcpp/internal/wrap.h: Use R_xlen_t not int in loop unroll * inst/include/Rcpp/macros/unroll.h: Ditto * inst/include/Rcpp/vector/Vector.h: Ditto 2017-07-05 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Ditto 2017-07-02 JJ Allaire * src/attributes.cpp: Generate C++ native routines with underscore prefix to avoid export when standard exportPattern is used in NAMESPACE 2017-06-29 JJ Allaire * src/attributes.cpp: Replace dot (".") with underscore ("_") in package names when generating native routine registrations. 2017-06-27 Jeroen Ooms * inst/include/RcppCommon.h: Support attribute_visible macro 2017-06-17 Kirill Müller * inst/include/Rcpp/Dimension.h: Explicit cast to int * inst/include/Rcpp/exceptions.h: Don't declare unused arguments * src/attributes.cpp: Ditto 2017-06-14 JJ Allaire * src/attributes.cpp: Add Shield around parameters in Rcpp::interfaces 2017-06-07 Dirk Eddelbuettel * README.md: Use alternates for img.shields.io GPL-2+ badges 2017-06-06 Yu Gong * src/api.cpp: Also permit compilation under Haiku-OS 2017-06-04 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * man/Rcpp.plugin.maker.Rd: Update manual page to additional Imports argument 2017-06-02 JJ Allaire * src/attributes.cpp: Automatically register init functions for RcppModules * R/Rcpp.package.skeleton.R: compileAttributes only after all code is generated 2017-06-01 JJ Allaire * src/attributes.cpp: Fix registration for exports with name attribute. 2017-05-30 Dirk Eddelbuettel * inst/include/Rcpp/utils/tinyformat.h: Added missing newline 2017-05-23 JJ Allaire * R/Attributes.R: Execute tools::package_native_routine_registration_skeleton within package rather than current working directory. * src/attributes.cpp: Execute tools::package_native_routine_registration_skeleton within package rather than current working directory. 2017-05-22 Dirk Eddelbuettel * R/inline.R (Rcpp.plugin.maker): Whitespace changes 2017-05-20 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.11 * inst/NEWS.Rd: Release 0.12.11 * inst/bib/Rcpp.bib: Release 0.12.11 * inst/include/Rcpp/config.h: Release 0.12.11 * README.md: Updated counts for dependents and tests * debian/*: Changes for Debian release of 0.12.10 2017-05-19 Dirk Eddelbuettel * inst/NEWS.Rd: Removed one duplicate entry * inst/include/Rcpp/api/meat/Rcpp_eval.h (Rcpp): Minor whitespace changes 2017-05-18 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll Date and Version once more * inst/NEWS.Rd: Updated * R/Attributes.R (.plugins[["openmp"]]): Fix typo in comment * src/attributes.cpp (Rcpp): Use size_t (twice) to suppress nags from g++ 2017-05-16 JJ Allaire * R/Attributes.R: Automatically generate native routine registrations. * src/attributes.cpp: Automatically generate native routine registrations. * R/Rcpp.package.skeleton.R: Don't generate native routines when creating a package using attributes. 2017-05-09 Dirk Eddelbuettel * R/Rcpp.package.skeleton.R (Rcpp.package.skeleton): Under R 3.4.0, run tools::package_native_routine_registration_skeleton to create src/init.c 2017-05-07 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version again * inst/include/Rcpp/module/Module_Property.h: Remove two typed exception specifications which upset g++ 7.1 or higher 2017-05-05 Kirill Müller * inst/include/Rcpp/date_datetime/Date.h: Suppress -Wconversion warnings * inst/include/Rcpp/date_datetime/Datetime.h: Idem * inst/include/Rcpp/date_datetime/newDateVector.h: Idem * inst/include/Rcpp/date_datetime/newDatetimeVector.h: Idem * inst/include/Rcpp/sugar/functions/rowSums.h: Idem * inst/include/Rcpp/sugar/functions/sample.h: Idem * inst/include/Rcpp/sugar/functions/strings/trimws.h: Idem 2017-04-26 Dirk Eddelbuettel * inst/include/Rcpp/exceptions.h (string_to_try_error): Protect result from Rf_mkString 2017-04-25 Dirk Eddelbuettel * R/Attributes.R (.plugins[["cpp11"]]): If R 3.4.0 or newer is used, set USE_CXX11 (instead of the older USE_CXX1X); (.plugins[["cpp14"]]): similarly updated for C++14 (.plugins[["cpp17"]]): similarly updated for C++17 (.plugins[["cpp98"]]): added 2017-04-22 Nathan Russell * inst/include/Rcpp/sugar/functions/strings/trimws.h: Added sugar function trimws with unit tests * inst/include/Rcpp/sugar/functions/strings/strings.h: Idem * inst/unitTests/cpp/sugar.cpp: Idem * inst/unitTests/runit.sugar.R: Idem 2017-04-20 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem * inst/include/Rcpp/exceptions/cpp98/exceptions.h (RCPP_ADVANCED_EXCEPTION_CLASS): Suppressing some warnings 2017-04-20 James J Balamuta * inst/include/Rcpp/api/meat/DottedPairImpl.h: Corrected format specifier from '%s' to '%i'. 2017-04-18 James J Balamuta * inst/include/Rcpp/vector/Matrix.h: Corrected exception throws from not_compatible to not_a_matrix. * inst/include/Rcpp/S4.h: Fixed documentation detailing exception class throw. * inst/include/Rcpp/Environment.h: Improved error handling messages * inst/include/Rcpp/Function.h: idem * inst/include/Rcpp/Promise.h: idem * inst/include/Rcpp/String.h: idem * inst/include/Rcpp/Symbol.h: idem * inst/include/Rcpp/XPtr.h: idem * inst/include/Rcpp/as.h: idem * inst/include/Rcpp/r_cast.h: idem * inst/include/Rcpp/api/meat/DottedPairImpl.h: idem * inst/include/Rcpp/internal/export.h: idem * inst/include/Rcpp/proxy/DottedPairProxy.h: idem * inst/include/Rcpp/proxy/SlotProxy.h: idem * inst/include/Rcpp/vector/MatrixColumn.h: idem * inst/include/Rcpp/vector/MatrixRow.h: idem * inst/include/Rcpp/vector/Vector.h: idem 2017-04-17 James J Balamuta * inst/include/Rcpp/Rcpp/exceptions/cpp11/exceptions.h: Removed semicolons from RCPP_ADVANCED_EXCEPTION_CLASS to quiet 'extra ;' -Wpedantic * inst/include/Rcpp/exceptions.h: Modified exceptions macros to support a default string and removed generated stop, warning from file. * inst/include/Rcpp/Rcpp/exceptions/cpp98/exceptions.h: Contains generated RCPP_ADVANCED_EXCEPTION_CLASS macro, stop & warning. * inst/include/Rcpp/Rcpp/exceptions/cpp11/exceptions.h: idem but for variadic versions. * inst/include/Rcpp/utils/tinyformat.h: Enabled ability to use variadic tinyformat function if c++11 is detected. 2017-04-14 James J Balamuta * inst/include/Rcpp/utils/tinyformat.h: Refreshed tinyformat.h against May 13, 2016 upstream, retained local mods. 2017-04-14 Kirill Müller * inst/include/Rcpp/macros/macros.h: Remove unused variable warning in BEGIN_RCPP macro * inst/include/Rcpp/DataFrame.h: Explicitly call parent constructor * inst/include/Rcpp/sugar/functions/rep.h: Remove variable name in function declaration to suppress unused argument warning * src/Rcpp_init.cpp: Ditto * src/attributes.cpp: Ditto 2017-04-11 Dirk Eddelbuettel * inst/inst/unitTests/testRcppClass/src/init.c (R_init_testRcppClass): Call R_registerRoutines() and R_useDynamicSymbols(); also ensure _rcpp_module_boot_* is registered for each module * inst/unitTests/testRcppClass/NAMESPACE: Added registration * inst/unitTests/testRcppClass/DESCRIPTION (Title): Title case * inst/unitTests/testRcppClass/R/rcpp_hello_world.R (rcpp_hello_world): Call the renamed C++ function * inst/unitTests/testRcppClass/src/rcpp_hello_world.cpp (rcpp_hello_world_cpp): Renamed C++ function to be distinct from R function calling it * inst/unitTests/testRcppClass/src/rcpp_hello_world.h: Ditto * inst/unitTests/testRcppClass/man/rcpp_hello_world.Rd: Alias renamed C++ function 2017-04-09 Dirk Eddelbuettel * inst/unitTests/testRcppModule/src/init.c (R_init_testRcppModule): Call R_registerRoutines() and R_useDynamicSymbols(); also ensure _rcpp_module_boot_* is registered for each module * inst/unitTests/testRcppModule/NAMESPACE: Added registration * inst/unitTests/testRcppModule/DESCRIPTION (Title): Title case * inst/unitTests/testRcppModule/R/rcpp_hello_world.R (rcpp_hello_world): Call the renamed C++ function * inst/unitTests/testRcppModule/src/rcpp_hello_world.cpp (rcpp_hello_world_cpp): Renamed C++ function to be distinct from R function calling it * inst/unitTests/testRcppModule/src/rcpp_hello_world.h: Ditto * inst/unitTests/testRcppModule/man/rcpp_hello_world.Rd: Alias renamed C++ function * inst/unitTests/testRcppModule/man/Rcpp_modules_examples.Rd: Alias renamed modules * inst/unitTests/testRcppModule/tests/modules.R: Call renamed module 2017-04-03 Jim Hester * inst/include/Rcpp/exceptions.h: Added support for throwing exceptions without call stacks. * inst/include/Rcpp/macros/macros.h: Idem * inst/unitTests/cpp/exceptions.cpp: Idem * inst/unitTests/runit.exceptions.R: Idem 2017-03-28 James J Balamuta * inst/vignettes/Rcpp-FAQ.Rnw: Added "Known Issues" section to FAQ 2017-03-25 Dirk Eddelbuettel * LICENSE: Added * .Rbuildignore: Do not include LICENSE in package 2017-03-17 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.10 * inst/NEWS.Rd: Release 0.12.10 * inst/bib/Rcpp.bib: Release 0.12.10 * inst/include/Rcpp/config.h: Release 0.12.10 * README.md: Updated counts for dependents and tests * debian/*: Changes for Debian release of 0.12.10 2017-03-15 Jeroen Ooms * inst/include/Rcpp/XPtr.h: added finalizeOnExit parameter 2017-02-28 Dirk Eddelbuettel * src/Rcpp_init.cpp (R_init_Rcpp): Call R_useDynamicSymbols() * DESCRIPTION (Version, Date): New minor version 2017-02-25 Dirk Eddelbuettel * vignettes/Rcpp-FAQ.Rnw: New subsection on C++11, C++14, C++17 2017-02-17 Dirk Eddelbuettel * R/tools.R: More #nocov * inst/include/Rcpp/internal/r_vector.h: Idem 2017-02-15 Dirk Eddelbuettel * DESCRIPTION (Version, Date): New minor version 2017-02-14 Iñaki Ucar * inst/include/Rcpp/iostream/Rstreambuf.h: Fixed single-character handling (pull request #649, fixes issue #647) 2017-02-13 Dirk Eddelbuettel * R/Attributes.R (.plugins[["cpp17"]]): New plugin (.plugins[["cpp1z"]]): Idem 2017-02-04 Daniel C. Dillon * inst/include/Rcpp/algorithm.h: Improved setup for Intel's icc 2017-01-31 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Roll minor version * inst/include/Rcpp/algorithm.h: Allow algorithm.h to be compiler under Intel's compiler, add copyright header and include guard 2017-01-31 Nathan Russell * inst/include/Rcpp/sugar/matrix/upper_tri.h: Inherit from MatrixBase and use correct comparators in get() to fix segfault * inst/include/Rcpp/sugar/matrix/lower_tri.h: Idem * inst/unitTests/cpp/sugar.cpp: Added unit tests for upper_tri and lower_tri * inst/unitTests/runit.sugar.R: Idem 2017-01-23 James J Balamuta * inst/include/Rcpp/DataFrame.h: Corrected return type for column size. 2017-01-22 Dirk Eddelbuettel * inst/include/Rcpp/DataFrame.h: Simplified and removed deprecation language. 2017-01-21 James J Balamuta * inst/include/Rcpp/DataFrame.h: Added alias for column and row size * inst/unitTests/runit.DataFrame.R: Added unit tests for aliases * inst/unitTests/cpp/DataFrame.cpp: Idem 2017-01-17 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version and Date * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Roll minor * src/Date.cpp (Rcpp): Do not access tm_gmtoff on Solaris 2017-01-14 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.9 * inst/NEWS.Rd: Release 0.12.9 * inst/bib/Rcpp.bib: Release 0.12.9 * inst/include/Rcpp/config.h: Release 0.12.9 * README.md: Updated counts for dependents and tests * debian/*: Changes for Debian release of 0.12.9 2017-01-13 Dirk Eddelbuettel * inst/include/Rcpp/exceptions.h: Added more #nocov tags * inst/include/Rcpp/api/bones/wrap_extra_steps.h: Idem * inst/include/Rcpp/iostream/Rstreambuf.h: Idem * inst/include/Rcpp/traits/named_object.h: Idem * inst/include/Rcpp/r_cast.h: Idem * src/Module.cpp: Idem 2017-01-12 Dirk Eddelbuettel * inst/bib/Rcpp.bib: Moved from vignettes/ directory * R/bib.R (bib): Idem * vignettes/Rcpp-FAQ.Rnw: Evaluate \Sexpr{Rcpp:::bib()} * vignettes/Rcpp-attributes.Rnw: Idem * vignettes/Rcpp-extending.Rnw: Idem * vignettes/Rcpp-introduction.Rnw: Idem * vignettes/Rcpp-modules.Rnw: Idem * vignettes/Rcpp-packages.Rnw: Idem * vignettes/Rcpp-sugar.Rnw: Idem * inst/unitTests/runit.misc.R (test.bib): New test * R/exceptions.R: Added #nocov 2017-01-11 Dirk Eddelbuettel * vignettes/Rcpp.bib: Updated references * src/attributes.cpp (Rcpp): Correct typos in #nocov tags, added tags 2017-01-07 James J Balamuta * inst/include/Rcpp/sugar/functions/complex.h: Added Arg() function * inst/unitTests/runit.sugar.R: Added Arg() unit test to complex list * inst/unitTests/cpp/sugar.cpp: Idem 2017-01-06 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Mark new minor version * src/attributes.cpp: Additional nocov tags 2017-01-04 Dirk Eddelbuettel * src/Date.cpp (Rcpp): Protect assignment to tm_gmtoff to not being under MinGW; could potentially bite other too-limited systems * inst/unitTests/runit.Date.R (test.Datetime.formating): Do not set TZ when running test, only set digits option 2017-01-01 Dirk Eddelbuettel * inst/unitTests/runit.Date.R (test.mktime, test.gmtime): New tests * inst/unitTests/cpp/dates.cpp (test_mktime, test_gmtime): Idem 2016-12-31 Dirk Eddelbuettel * inst/include/Rcpp/vector/Matrix.h: Minor simplification 2016-12-31 James J Balamuta * inst/include/Rcpp/vector/Matrix.h: Fixed non-symmetric case of matrix fills by switching to a loop based solution from iterator. * inst/unitTests/runit.Matrix.R: Added unit tests for diagonally filling matrices. * inst/unitTests/cpp/Matrix.cpp: Idem 2016-12-30 Dirk Eddelbuettel * src/Date.cpp: Synchronized internal code with R * inst/unitTests/cpp/dates.cpp (gmtime_mktime): New test * inst/unitTests/runit.Date.R (test.mktime_gmtime): Idem 2016-12-26 Dirk Eddelbuettel * R/Attributes.R: Added #nocov markers * R/Module.R: Idem * R/exposeClass.R: Idem, added copyright header 2016-12-25 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Roll minor version * src/api.cpp: Added #nocov markers * src/Rcpp_init.cpp: Idem * src/Date.cpp: Date 2016-12-14 Nathan Russell * inst/include/Rcpp/sugar/functions/sample.h: Use vector instead of manual memory management. 2016-12-13 Nathan Russell * inst/include/Rcpp/sugar/functions/sample.h: Use malloc.h instead of alloca.h when building on Windows * inst/include/Rcpp/date_datetime/Date.h: Include time.h when building on Windows * inst/include/Rcpp/date_datetime/Datetime.h: Idem 2016-12-12 Dirk Eddelbuettel * inst/include/Rcpp/sugar/functions/sample.h: In case sample.h from the RcppArmadillo extensions was included, skip this file 2016-12-10 Nathan Russell * inst/include/Rcpp/sugar/functions/sample.h: New function sample() * inst/include/Rcpp/sugar/functions/functions.h: Idem * inst/unitTests/cpp/sugar.cpp: Unit tests for sample() * inst/unitTests/runit.sugar.R: Idem 2016-12-10 Dirk Eddelbuettel * R/loadRcppModules.R: Added #nocov tags * R/loadModule.R: Ditto * R/unit.tests.R (test): Adjusted one #nocov tag 2016-12-09 Dirk Eddelbuettel * R/00_classes.R: Added #nocov tags * R/01_show.R: Ditto * R/02_completion.R: Ditto * R/03_prompt.R: Ditto 2016-12-07 Dirk Eddelbuettel * inst/include/Rcpp/vector/Matrix.h: Add 'using ...' to disambiguate size() 2016-12-04 Dirk Eddelbuettel * .codecov.yml (comment): Enable more verbose codecov.io reports 2016-12-03 Dirk Eddelbuettel * inst/unitTests/cpp/dates.cpp (Datetime_format): Additional ostream tests * inst/unitTests/runit.Date.R (test.Date.formating): Ditto * inst/unitTests/runit.system.R (test.RcppCxx): New tests * R/RcppLdpath.R (canUseCXX0X): Simplified as we can now rely on more modern compilers; underlying C++ code has not been present for a while * R/compilerCheck.R (compilerCheck): Added some #nocov tags * R/unit.tests.R (test, gctortureRUnitTest): Ditto * R/zzz.R (.onLoad): Ditto 2016-11-29 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version to 0.12.8.2 2016-11-28 Dirk Eddelbuettel * inst/unitTests/cpp/dates.cpp (Date_format, Datetime_format): New tests * inst/unitTests/runit.Date.R (test.Date.formating): Ditto (test.Datetime.formating): Ditto * inst/unitTests/runit.sugar.R (test.intersect): Added sort() around call to Sugar's intersect to ensure sorted output with g++-6.* 2016-11-27 Dirk Eddelbuettel * inst/include/Rcpp/date_datetime/Date.h (format, operator<<): Added * inst/include/Rcpp/date_datetime/Datetime.h (format, operator<<): Ditto * inst/include/Rcpp/date_datetime/newDateVector.h (operator<<): Ditto * inst/include/Rcpp/date_datetime/newDatetimeVector.h (operator<<): Ditto 2016-11-23 Dirk Eddelbuettel * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Set minor version 2016-11-22 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Roll minor version * inst/include/Rcpp/date_datetime/newDatetimeVector.h (Rcpp): Small correction concerning timezone attribute to ctor from RTYPE 2016-11-22 Jim Hester * inst/src/api.cpp: Cleanup to stack message parseing * inst/unitTests/cpp/exceptions.cpp: Unit tests for cleanup * inst/unitTests/runit.exceptions.R: Ditto 2016-11-19 James J Balamuta * inst/unitTests/runit.environments.R: Added environment find unit tests as well as a symbol access test for environment get. * inst/unitTests/cpp/Environment.cpp: Idem 2016-11-18 James J Balamuta * vignettes/Rcpp-extending: Switched to attributes and added external class pointer macro notes by MathurinD 2016-11-16 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.8 * inst/NEWS.Rd: Release 0.12.8 * vignettes/Rcpp.bib: Release 0.12.8 * inst/include/Rcpp/config.h: Release 0.12.8 * README.md: Updated counts for dependents and tests * debian/*: Changes for Debian release of 0.12.8 2016-11-15 Dirk Eddelbuettel * DESCRIPTION: Nathan Russell added to Authors 2016-11-14 Jim Hester * inst/include/Rcpp/exceptions.h: Improved exception call stack * inst/include/Rcpp/routines.h: Ditto * inst/src/api.cpp: Ditto * R/exections.R: Print and format method for stack straces * inst/unitTests/runit.exceptions.R: Unit tests * inst/unitTests/cpp/exceptions.cpp: Ditto 2016-11-13 Dirk Eddelbuettel * R/Attributes.R (mergeIntoBuildEnv): Correct 'empty' return 2016-11-10 Dirk Eddelbuettel * inst/include/Rcpp/date_datetime/newDateVector.h: Added constructor using VectorBase<> 2016-11-05 Daniel C. Dillon * inst/include/Rcpp/date_datetime/newDatetimeVector.h: Added constructor to instantiate newDatetimeVector from VectorBase. 2016-11-04 Nathan Russell * inst/include/Rcpp/macros/dispatch.h: Modify variadic macros to not use GNU extensions * DESCRIPTION: roll minor version 2016-11-03 Nathan Russell * inst/include/Rcpp/hash/IndexHash.h: Add casts to eliminate signed / unsigned comparison warning * inst/include/Rcpp/hash/SelfHash.h: Idem * inst/unitTests/cpp/sugar.cpp: Added unit tests for sugar function unique() * inst/unitTests/runit.sugar.R: Idem 2016-10-30 Dirk Eddelbuettel * src/api.cpp: New capabilities field for new date(time) vectors * inst/unitTests/runit.Date.R (test.DatetimeVector.ctor): Differentiate in test as case of 'Inf' is handling differently by new and old datetime classes (and passed through as is by new ones which is better) * inst/unitTests/runit.InternalFunctionCPP11.R: Small cosmetic edit 2016-10-24 Qiang Kou * inst/include/Rcpp/sugar/Range.h : fix range sugar ambiguity * inst/unitTests/cpp/sugar.cpp: range sugar unit test * inst/unitTests/runit.sugar.R: range sugar unit test 2016-10-24 Nathan Russell * inst/include/Rcpp/vector/MatrixBase.h: Change sugar functions eye(), ones(), and zeros() into static methods in MatrixBase * inst/include/Rcpp/traits/one_type.h: Idem * inst/include/Rcpp/traits/traits.h: Idem * inst/unitTests/cpp/Matrix.cpp: Idem * inst/unitTests/runit.Matrix.R: Idem 2016-10-24 Qiang Kou * inst/include/Rcpp/sugar/Range.h: Range sugar uses R_xlen_t as start/end type 2016-10-23 Nathan Russell * inst/include/Rcpp/sugar/matrix/eye.h: New functions eye(), ones(), and zeros() * inst/include/Rcpp/sugar/matrix/matrix_functions.h: Idem * inst/unitTests/cpp/sugar.cpp: Unit tests for new functions * inst/unitTests/runit.sugar.R: Idem * inst/unitTests/runit.dispatch.R (test.ExpressionVector): Use expression rather than parse, correct typo 2016-10-22 Qiang Kou * inst/include/Rcpp/hash/IndexHash.h: change hashing function to return unsigned int * inst/include/Rcpp/hash/SelfHash.h: Ditto 2016-10-21 Qiang Kou * inst/include/Rcpp/barrier.h: Change string_elt/vector_elt to accept R_xlen_t * inst/include/Rcpp/routines.h: Ditto * src/barrier.cpp: Ditto 2016-10-19 Dirk Eddelbuettel * inst/include/Rcpp/date_datetime/Datetime.h (Rcpp): Additional operator+ for int argument 2016-10-18 Dirk Eddelbuettel * inst/include/Rcpp/date_datetime/Date.h (Rcpp): Add operator double() * inst/include/Rcpp/date_datetime/Datetime.h (Rcpp): Ditto 2016-10-17 Dirk Eddelbuettel * inst/include/Rcpp/date_datetime/newDatetimeVector.h (Rcpp): Allow setting of timezone attribute; default not-set leads to local as in R 2016-10-16 Dirk Eddelbuettel * inst/include/Rcpp.h (RCPP_NEW_DATE_DATETIME_VECTORS): Add a new compile-time #define to switch between 'old' (existing) and 'new' DateVector and DatimeVector classes. Currently uses 'new' for testing plan to switch to proper deprecation schedule. * inst/include/Rcpp/date_datetime/date_datetime.h: New header file (and directory) regrouping all Date and Datetime headers, scalar and vector * inst/include/Rcpp/date_datetime/Date.h: Moved one directory down * inst/include/Rcpp/date_datetime/Datetime.h: Ditto * inst/include/Rcpp/date_datetime/oldDateVector.h: Moved and renamed * inst/include/Rcpp/date_datetime/oldDatetimeVector.h: Ditto * inst/include/Rcpp/date_datetime/newDateVector.h: New implementation inheriting from NumericVector, still optional * inst/include/Rcpp/date_datetime/newDatetimeVector.h: Ditto 2016-09-05 Dirk Eddelbuettel * DESCRIPTION (Version): Roll minor version * cleanup: Clean two more file type from vignettes/ 2016-09-04 Nathan Russell * inst/include/Rcpp/sugar/functions/rowSums.h: New functions rowSums(), colSums(), rowMeans(), and colMeans() * inst/include/Rcpp/sugar/functions/functions.h: Idem * inst/unitTests/cpp/sugar.cpp: Unit tests for new functions * inst/unitTests/runit.sugar.R: Idem 2016-09-04 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.7 * inst/NEWS.Rd: Release 0.12.7 * vignettes/Rcpp.bib: Release 0.12.7 * inst/include/Rcpp/config.h: Release 0.12.7 * README.md: Updated counts for dependents and tests * debian/*: Changes for Debian release of 0.12.7 2016-09-02 Simon Dirmeier * src/attributes.cpp: Remove leading underscore in header guard 2016-08-14 James J Balamuta * inst/examples/FastLM/lmGSL.R: Updated example to use new GSL templates 2016-08-11 Dirk Eddelbuettel * .travis.yml: Switch to using run.sh for Travis CI 2016-08-09 Artem Klevtsov * inst/include/Rcpp/macros/dispatch.h: Add variadic conditional macro when C++11 compiler used * ints/include/unitTests/cpp/dispatch.cpp: Add unit tests for RCPP_RETURN_VECTOR and RCPP_RETURN_MATRIX macro * ints/include/unitTests/runit.dispatch.R: Idem 2016-08-05 James J Balamuta * inst/examples/FastLM/fastLMviaArmadillo.r: format fix * inst/examples/FastLM/lmGSL.R: Updated example to use Rcpp attributes instead of cxxfunction * inst/examples/FastLM/lmArmadillo.R: Idem * inst/examples/functionCallback/newApiExample.r: Idem * inst/examples/RcppInline/RcppInlineExample.r: Idem * inst/examples/RcppInline/RcppInlineWithLibsExamples.r: Idem * inst/examples/RcppInline/UncaughtExceptions.r: Idem * inst/examples/RcppInline/external_pointer.r: Idem 2016-08-04 James J Balamuta * src/attributes.cpp: Correct variable re-declaration * inst/examples/RcppGibbs/RcppGibbs.R: Updated example to use Rcpp attributes instead of cxxfunction * inst/examples/RcppGibbs/timeRNGs.R: Idem 2016-08-03 Dirk Eddelbuettel * .gitattributes: Added to have ChangeLog and NEWS.Rd merge via union 2016-08-02 James J Balamuta * R/Rcpp.package.skeleton.R: Added autogeneration warning * src/attributes.cpp: Fixed invalid C++ Identifiers and modified export header to warn against hand edits * vignettes/Rcpp-package.Rnw: Updated code generation snippets * man/Rcpp.package.skeleton.Rd: Add warning on hand edits to the autogenerated RcppExports files. * man/compileAttributes.Rd: Idem 2016-08-02 Qiang Kou * inst/include/Rcpp/String.h: CE_UTF8 as default encoding * inst/unitTests/cpp/String.cpp: Update unit test * inst/unitTests/runit.String.R: Idem 2016-08-01 Nathan Russell * inst/include/Rcpp/vector/Vector.h: Added decreasing option for Vector sort * inst/include/Rcpp/internal/NAComparator.h: Idem * inst/unitTests/cpp/Vector.cpp: Idem * inst/unitTests/runit.Vector.R: Idem 2016-07-31 Qiang Kou * inst/examples/SugarPerformance/sugarBenchmarks.R: Remove usage of Rf_eval * inst/include/Rcpp/Environment.h: Idem * inst/include/Rcpp/Module.h: Idem * inst/include/Rcpp/exceptions.h: Idem * inst/include/Rcpp/proxy/FieldProxy.h: Idem * inst/include/Rcpp/r_cast.h: Idem * inst/unitTests/cpp/language.cpp: Idem * src/barrier.cpp: Idem 2016-07-24 Dirk Eddelbuettel * inst/unitTests/cpp/rmath.cpp: Added RNG unit tests for sugar variants * inst/unitTests/runit.rmath.R: Idem 2016-07-22 James J Balamuta * inst/unitTests/cpp/rmath.cpp: Added unit tests for Rmath RNGs * inst/unitTests/runit.rmath.R: idem * inst/include/Rcpp/Environment.h: Added get() & find() that accept a symbol * inst/include/Rcpp.h: Modified header load order so that Symbol.h is now placed before Environment.h 2016-07-21 Dirk Eddelbuettel * DESCRIPTION (Version): Roll minor release 2016-07-18 Kevin Ushey * inst/include/Rcpp/r/headers.h: Ensure NORET macro is set appropriately 2016-07-18 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.6 * inst/NEWS.Rd: Release 0.12.6 * vignettes/Rcpp.bib: Release 0.12.6, RProtoBuf updates * inst/include/Rcpp/config.h: Release 0.12.6 * README.md: Updated counts for dependents and tests * debian/*: Changes for Debian release of 0.12.5 2016-07-17 James J Balamuta * vignettes/Rcpp-quickref.Rnw: Added sections on Rcpp attributes and plugins. Facelifts on important notes, inline, environments, and calling R functions. 2016-07-16 Daniel C. Dillon * Added a const_interator typedef to VectorBase 2016-07-15 James J Balamuta * vignettes/Rcpp-FAQ.Rnw: Added section on default function parameters 2016-07-15 Dirk Eddelbuettel * vignettes/Rcpp-FAQ.Rnw: Also point to Rcpp-attributes in Question 1 2016-07-13 Dirk Eddelbuettel * NAMESPACE: Add import for glob2rx to please R CMD check * man/cppFunction.Rd: line break below 90 columns to please R CMD check 2016-07-11 J.J. Allaire * R/Attributes.R Add cacheDir argument to sourceCpp to enable caching of shared libraries across R sessions * src/attributes.cpp Add cacheDir argument to sourceCpp to enable caching of shared libraries across R sessions * man/sourceCpp.Rd: Document new cacheDir option * man/cppFunction.Rd: Idem * man/evalFunction.Rd: Idem 2016-07-10 Nathan Russell * inst/include/Rcpp/algorithm.h: Accomodate clang compiler 2016-07-03 Dirk Eddelbuettel * DESCRIPTION (Version): Rolling minor version 2016-07-02 Qiang Kou * src/attributes.cpp: Replace '.' in package names 2016-06-23 Dirk Eddelbuettel * DESCRIPTION (Version): Rolling minor version * inst/include/Rcpp/exceptions.h (Rcpp): Also expose Rf_warningcall() within Rcpp namespace (without leading Rf_) 2016-06-20 Qin Wenfeng * inst/include/Rcpp/exceptions.h: add RCPP_USING_UTF8_ERROR_STRING macro to use UTF-8 encoding exception string in R 2016-06-14 Artem Klevtsov * inst/include/Rcpp/sugar/functions/na_omit.h: Improve na_omit for vectors without NA * inst/unitTests/cpp/sugar.cpp: Add unit test for the na_omit * inst/unitTests/runit.sugar.R: Ditto 2016-06-02 Kirill Müller * inst/include/Rcpp/algorithm.h: Use "long long" only if available * inst/include/Rcpp/exceptions.h: Annotate stop() with NORET 2016-05-18 Daniel C. Dillon * inst/include/Rcpp/algorithm.h: New approach for sugar * inst/unitTests/cpp/algorithm.cpp: Unit test support * inst/unitTests/runit.algorithm.R: Ditto 2016-05-17 Dirk Eddelbuettel * DESCRIPTION (Version): Rolling minor version 2016-05-16 Qiang Kou * inst/include/Rcpp/String.h: Correct string replacement * inst/unitTests/runit.String.R: Unit test 2016-05-16 Daniel C. Dillon * inst/include/Rcpp/sugar/functions/max.h: Fixing constness * inst/include/Rcpp/sugar/functions/min.h: Ditto 2016-05-15 Daniel C. Dillon * inst/include/Rcpp/vector/Matrix.h: Correcting ambiguities in Vector/Matrix and scalar operations * inst/include/Rcpp/sugar/operators/divides.h: Ditto * inst/include/Rcpp/sugar/operators/minus.h: Ditto * inst/include/Rcpp/sugar/operators/plus.h: Ditto * inst/include/Rcpp/sugar/operators/times.h: Ditto 2016-05-14 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.5 * inst/NEWS.Rd: Release 0.12.5 * vignettes/Rcpp.bib: Release 0.12.5 * inst/include/Rcpp/config.h: Release 0.12.5 * debian/*: Changes for Debian release of 0.12.5 * vignettes/Rcpp.bib: Updated references 2016-05-13 Dirk Eddelbuettel * DESCRIPTION: Rolled minor version * R/compilerCheck.R: Minimal R function to check g++ version sufficiency * man/compilerCheck.Rd: Documentation 2016-05-11 Dirk Eddelbuettel * R/Rcpp.package.skeleton.R: Modified to create a package without notes, warnings, or error even pkgKitten is not available * R/Rcpp.package.skeleton.R (.playWithPerPackageHelpPage): Added new helper function to be used when pkgKitten is not available * inst/skeleton/manual-page-stub.Rd: Stub for per-package help page used when pkgKitten is not available 2016-05-10 Dirk Eddelbuettel * R/Rcpp.package.skeleton.R: Also correct Title: and Description: to satisfy R CMD check in R-release and (current) R-devel 2016-05-08 Dirk Eddelbuettel * inst/unitTests/cpp/Matrix.cpp: Made four scalar/matrix tests less ambiguous for overloads by using double as scalar 2016-05-06 Dirk Eddelbuettel * R/loadRcppModules.R (loadRcppModules): Add call to .Deprecated pointing out that loadModule is preferred * man/Rcpp-deprecated.Rd: Added to list deprecated functions * man/loadRcppModules-deprecated.Rd: Renamed to -deprecated, added link to loadModule which is the preferred method * vignettes/Rcpp-modules.Rnw: Updated with respect to loadRcppModules deprecation and loadModule being preferred 2016-04-15 Kevin Ushey * src/attributes.cpp: Add a missing 'winslash = "/"' 2016-04-14 J.J. Allaire * src/attributes.cpp: Correct handling of dependent file paths on Windows (use winslash = "/") 2016-04-13 Dirk Eddelbuettel * DESCRIPTION (Version): Rolling minor version and Date 2016-04-11 Ben Goodrich * R/Module.R: Avoid calling as.character() on C++Object to prevent race 2016-04-02 Dirk Eddelbuettel * DESCRIPTION: Rolled to minor version 0.12.4.3 * inst/include/Rcpp/config.h: Ditto * ChangeLog: Added entries for PRs 453 and 454 * inst/NEWS.Rd: Add two missing \item uses * R/Module.R: Rename copy to copyObject to avoid function name collisions * inst/unitTests/runit.Module.R: Ditto * man/copyObject.Rd: Ditto * inst/NEWS.Rd: Ditto * NAMESPACE: Ditto * inst/unitTests/runit.environments.R: Skip test.environment.child test 2016-03-31 Romain Francois * R/Modules.R: New top-level functions copy, destruct and is_destructed * NAMESPACE: New functions copy, destruct and is_destructed exported * man/copy.Rd: New manual page * man/destruct.Rd: Ditto * inst/include/Rcpp/module/class.h: Add copy constructortor + destructor * inst/include/Rcpp/module/class_Base.h: Ditto * src/Module.cpp: Ditto * src/Rcpp_init.cpp: Ditto * src/internal.h: Ditto * inst/include/Rcpp/traits/traits.h: New trait detecting copy contructor * inst/include/Rcpp/traits/has_copy_constructor.h: Ditto * inst/unitTests/runit.Module.R: Test new copy constructor and destructor * inst/unitTests/cpp/Module.cpp: Ditto 2016-03-29 Daniel C. Dillon * inst/include/Rcpp/String.h: Correct Rcpp::String for Rcpp::Nullable 2016-03-27 Qin Wenfeng * R/Attributes.R: Support new R 3.3.0 Windows toolchain 2016-03-26 Dirk Eddelbuettel * DESCRIPTION: Rolled Date and minor Version 2016-03-23 Sergio Marques * src/api.cpp: Also check a flag __MUSL__ to accomodate Alpine 2016-03-22 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.4 * inst/NEWS.Rd: Release 0.12.4 * vignettes/Rcpp.bib: Release 0.12.4 * inst/include/Rcpp/config.h: Release 0.12.4 * debian/*: Changes for Debian release of 0.12.4 2016-03-19 Dirk Eddelbuettel * README.md: Use canonical CRAN URL to please R-devel CMD check 2016-03-12 Nathan Russell * inst/include/Rcpp/sugar/functions/cbind.h: Undefine MakeBindable macro after use 2016-03-12 Nathan Russell * inst/include/Rcpp/sugar/functions/cbind.h: New cbind() function * inst/include/Rcpp/sugar/functions/functions.h: Idem * inst/unitTests/cpp/sugar.cpp: Unit tests for cbind() * inst/unitTests/runit.sugar.R: Idem 2016-03-09 Colin Gillespie * vignettes/Rcpp-sugar.Rnw: Correct typos and indentation 2016-03-09 Dirk Eddelbuettel * inst/include/Rcpp/stats/random/rlogis.h: Updated Emacs header and copyright, aligned indentation * inst/include/Rcpp/stats/random/rnbinom.h: Idem * inst/include/Rcpp/stats/random/rnbinom_mu.h: Idem * inst/include/Rcpp/stats/random/rnchisq.h: Idem * inst/include/Rcpp/stats/random/rnorm.h: Idem * inst/include/Rcpp/stats/random/rt.h: Idem * inst/include/Rcpp/stats/random/runif.h: Idem * inst/include/Rcpp/stats/random/rweibull.h: Idem * inst/include/Rcpp/stats/random/random.h: Idem * inst/include/Rcpp/stats/random/rcauchy.h: Idem * inst/include/Rcpp/stats/random/rchisq.h: Idem * inst/include/Rcpp/stats/random/rexp.h: Idem * inst/include/Rcpp/stats/random/rf.h: Idem * inst/include/Rcpp/stats/random/rgeom.h: Idem * inst/include/Rcpp/stats/random/rlnorm.h: Idem * inst/include/Rcpp/stats/random/rbeta.h: Idem * inst/include/Rcpp/stats/random/rbinom.h: Idem * inst/include/Rcpp/stats/random/rgamma.h: Idem * inst/include/Rcpp/stats/random/rhyper.h: Idem * inst/include/Rcpp/stats/random/rpois.h: Idem * inst/include/Rcpp/stats/random/rsignrank.h: Idem * inst/include/Rcpp/stats/random/rwilcox.h: Idem 2016-03-07 Dirk Eddelbuettel * inst/include/Rcpp/stats/beta.h: Updated Emacs header and copyright * inst/include/Rcpp/stats/binom.h: Idem * inst/include/Rcpp/stats/cauchy.h: Idem * inst/include/Rcpp/stats/chisq.h: Idem * inst/include/Rcpp/stats/f.h: Idem * inst/include/Rcpp/stats/gamma.h: Idem * inst/include/Rcpp/stats/geom.h: Idem * inst/include/Rcpp/stats/hyper.h: Idem * inst/include/Rcpp/stats/nbeta.h: Idem * inst/include/Rcpp/stats/nbinom.h: Idem * inst/include/Rcpp/stats/nbinom_mu.h: Idem * inst/include/Rcpp/stats/nchisq.h: Idem * inst/include/Rcpp/stats/nf.h: Idem * inst/include/Rcpp/stats/nt.h: Idem * inst/include/Rcpp/stats/pois.h: Idem * inst/include/Rcpp/stats/stats.h: Idem * inst/include/Rcpp/stats/t.h: Idem * inst/include/Rcpp/stats/unif.h: Idem * inst/include/Rcpp/stats/dpq/dpq.h: Idem 2016-03-05 Dirk Eddelbuettel * inst/include/Rcpp/stats/exp.h: Replaced initial Emacs header line with current one, ran M-x untabify, streamlined indentation, update copyright * inst/include/Rcpp/stats/lnorm.h: Idem * inst/include/Rcpp/stats/logis.h: Idem * inst/include/Rcpp/stats/norm.h: Idem * inst/include/Rcpp/stats/weibull.h: Idem 2016-03-04 Dirk Eddelbuettel * inst/unitTests/runit.Function.R: Switched to '/usr/bin/env r' * inst/unitTests/runit.table.R: Idem * inst/unitTests/runit.as.R: Idem * inst/unitTests/runit.Date.R: Idem * inst/unitTests/runit.misc.R: Idem * inst/unitTests/runit.Language.R: Idem * inst/unitTests/runit.subset.R: Idem * inst/unitTests/runit.wrap.R: Idem * inst/unitTests/runit.sugar.R: Idem * inst/unitTests/runit.na.R: Idem * inst/unitTests/runit.String.R: Idem * inst/unitTests/runit.Vector.R: Idem * inst/unitTests/runit.environments.R: Idem * inst/unitTests/runit.Reference.R: Idem * inst/unitTests/runit.Matrix.R: Idem * inst/unitTests/runit.client.package.R: Idem * inst/unitTests/runit.binary.package.R: Idem * inst/unitTests/runit.support.R: Idem * inst/unitTests/runit.S4.R: Idem * inst/unitTests/runit.RObject.R: Idem * inst/unitTests/runit.modref.R: Idem * inst/unitTests/runit.InternalFunctionCPP11.R: Idem * inst/unitTests/runit.attributes.R: Idem * inst/unitTests/runit.sugar.var.R: Idem * inst/unitTests/runit.Module.R: Idem * inst/unitTests/runit.XPTr.R: Idem * inst/unitTests/runit.Module.client.package.R: Idem * inst/unitTests/runit.stats.R: Idem * inst/unitTests/runit.rmath.R: Idem * inst/unitTests/runit.DataFrame.R: Idem * inst/unitTests/runit.wstring.R: Idem * inst/unitTests/runit.InternalFunction.R: Idem 2016-03-03 Dirk Eddelbuettel * inst/examples/FastLM/benchmarkLongley.r: Switched to '/usr/bin/env r' * inst/examples/FastLM/fastLMviaArmadillo.r: Idem * inst/examples/FastLM/fastLMviaGSL.r: Idem * inst/examples/FastLM/lmArmadillo.R: Idem * inst/examples/FastLM/lmGSL.R: Idem * inst/examples/FastLM/benchmark.r: Idem * inst/examples/ConvolveBenchmarks/exampleRCode.r: Idem 2016-02-27 Dirk Eddelbuettel * inst/examples/RcppInline/RcppInlineWithLibsExamples.r: Switched to using '/usr/bin/env r', switch to using 'cxxfunction' and RcppGSL plugin * inst/examples/RcppInline/external_pointer.r: Switched to '/usr/bin/env r' * inst/examples/RcppInline/RcppInlineExample.r: Idem * inst/examples/ConvolveBenchmarks/overhead.r: Idem * inst/include/Rcpp/Fast.h (Rcpp): Undo two const declarations 2016-02-23 Dirk Eddelbuettel * inst/examples/OpenMP/OpenMPandInline.r: Switched to '/usr/bin/env r' * inst/examples/RcppInline/RcppSimpleExample.r: Idem * inst/examples/RcppInline/RObject.r: Idem * inst/examples/RcppInline/UncaughtExceptions.r: Idem 2016-02-21 Dirk Eddelbuettel * inst/examples/functionCallback/newApiExample.r (vecfunc): Switched to using '/usr/bin/env r', switch to using 'cxxfunction' * inst/examples/Misc/fibonacci.r: Switched to using '/usr/bin/env r', added explicit load of Rcpp package * inst/examples/Misc/newFib.r: Switched to using '/usr/bin/env r' * inst/examples/Misc/ifelseLooped.r: Idem * inst/examples/Misc/piBySimulation.r: Idem * inst/examples/SugarPerformance/sugarBenchmarks.r: Idem 2016-02-16 Dirk Eddelbuettel * vignettes/Rcpp-FAQ.Rnw: Added answer on fixed-size limit of arguments 2016-02-07 Dirk Eddelbuettel * R/Attributes.R (sourceCppFunction): Use fully matched seq(along.with=...) * vignettes/Rcpp-FAQ.Rnw: Added a table of contents 2016-02-06 James J Balamuta * vignettes/Rcpp-FAQ.Rnw (Rcpp): Additional material, and corrections, for use on OS X 2016-01-30 Qiang Kou * inst/include/Rcpp/vector/Subsetter.h: Fix the error under gc * inst/unitTests/cpp/Vector.cpp : Add tests * inst/unitTests/runit.Vector.R : Idem 2016-01-29 Dirk Eddelbuettel * vignettes/Rcpp-FAQ.Rnw (Rcpp): Add new entry about required TeXlive installation to build vignettes (issue #422) 2016-01-22 Dirk Eddelbuettel * DESCRIPTION (Version): Mark as 0.12.3.1 2016-01-22 Daniel C. Dillon * R/Attributes.R: Add plugin for cpp14 2016-01-18 Daniel C. Dillon * inst/include/Rcpp/Nullable.h: Add isUsable() * inst/unitTests/cpp/misc.cpp: Add tests * inst/unitTests/runit.misc.R: Idem 2016-01-17 Nathan Russell * inst/include/Rcpp/sugar/functions/median.h: New function * inst/unitTests/cpp/sugar.cpp: Add tests * inst/unitTests/runit.sugar.R: Idem 2016-01-17 Daniel C. Dillon * inst/include/Rcpp/Nullable.h: Add as() and clone() * inst/unitTests/cpp/misc.cpp: Add tests * inst/unitTests/runit.misc.R: Idem 2016-01-13 Kirill Mueller * inst/include/Rcpp/Nullable.h: Added const support * inst/unitTests/cpp/misc.cpp: Added tests for const support 2016-01-10 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.3 * inst/NEWS.Rd: Release 0.12.3 * vignettes/Rcpp.bib: Release 0.12.3 * inst/include/Rcpp/config.h: Release 0.12.3 * debian/*: Changes for Debian release of 0.12.3 * vignettes/Rcpp.bib: Updated all CRAN reference to current versions 2016-01-09 Dirk Eddelbuettel * Contributing.md: Added to GitHub repo * .Rbuildignore: Ensure Contributing.md is not in R package, also removed two old entries 2015-12-29 Joshua Pritikin * inst/include/Rcpp/Module.h: Initialize base class in copy ctor * inst/include/Rcpp/macros/interface.h: Idem 2015-12-12 Qiang Kou * inst/include/Rcpp/String.h: std::hash * inst/unitTests/cpp/wrap.cpp: Unit tests * inst/unitTests/runit.wrap.R: Unit tests 2015-12-04 Qiang Kou * inst/include/Rcpp/vector/Matrix.h: Add math operators between matrix and scalar * inst/unitTests/runit.Matrix.R: Unit tests * inst/unitTests/cpp/Matrix.cpp: Unit tests 2015-11-27 Daniel C. Dillon * inst/include/Rcpp/vector/proxy.h: const_iterators for CharacterVector now work analogously to iterators * inst/include/Rcpp/vector/const_generic_proxy.h: Idem * inst/include/Rcpp/vector/const_string_proxy.h: Idem * inst/include/Rcpp/vector/traits.h: Idem * inst/unitTests/cpp/Vector.cpp: Tests for above * inst/unitTests/runit.Vector.R: Idem [ All this was commited on Sep 5 but only merged Nov 27 ] 2015-11-25 JJ Allaire * src/attributes.cpp: Avoid invalid function names when generating C++ interfaces. 2015-11-15 Kazuki Fukui > * src/attributes.cpp: Insert extra space around & in interface 2015-11-14 Dirk Eddelbuettel * .travis.yml: Add token for secure Slack & Travis integration 2015-11-14 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.2 * inst/NEWS.Rd: Release 0.12.2 * vignettes/Rcpp.bib: Release 0.12.2 * inst/include/Rcpp/config.h: Release 0.12.2 * debian/*: Changes for Debian release of 0.12.2 * vignettes/Rcpp.bib: Updated all CRAN reference to current versions 2015-11-13 Dirk Eddelbuettel * inst/include/Rcpp/complex.h: Define a header guard for dplyr to prevent errorneous redefinition of operator<<() via dplyr 2015-11-11 Dirk Eddelbuettel * inst/include/Rcpp/vector/Matrix.h: Further simplification 2015-11-11 Qiang Kou * include/Rcpp/complex.h: operator<< for Rcomplex 2015-11-10 Dirk Eddelbuettel * inst/include/Rcpp/vector/Matrix.h: Added transpose for character matrices as well * inst/unitTests/runit.Matrix.R: New unit tests * inst/unitTests/cpp/Matrix.cpp: Ditto 2015-11-08 Dirk Eddelbuettel * inst/include/Rcpp/vector/Matrix.h: Matrix transpose is now a free function for both INTSXP and REALSXP * inst/unitTests/runit.Matrix.R: New unit tests * inst/unitTests/cpp/Matrix.cpp: Ditto 2015-11-08 Daniel C. Dillon * inst/include/Rcpp/Nullable.h: No longer prevent assignment of R_NilValue to Nullable<> in function signatures * inst/include/Rcpp/vector/Matrix.h: Use showpoint in operator<<() 2015-11-07 Dirk Eddelbuettel * inst/include/Rcpp/vector/Matrix.h: Beginnings of a Matrix transpose 2015-11-06 Kevin Ushey * inst/include/Rcpp/vector/Subsetter.h: Add sugar math operators * inst/unitTests/runit.subset.R: Unit tests * inst/unitTests/cpp/Subset.cpp: Unit tests * inst/NEWS.Rd: NEWS entry 2015-11-01 Qiang Kou * inst/include/Rcpp/vector/MatrixColumn.h: Fix overflow 2015-11-01 Dirk Eddelbuettel * DESCRIPTION: Roll Version: to 0.12.1.4 2015-10-30 Nathan Russell * inst/include/Rcpp/sugar/functions/cummax.h: New sugar function * inst/include/Rcpp/sugar/functions/cummin.h: New sugar function * inst/include/Rcpp/sugar/functions/cumprod.h: New sugar function * inst/unitTests/cpp/sugar.cpp: Unit test support for new functions * inst/unitTests/runit.sugar.R: Ditto 2015-10-08 Tianqi Chen * inst/include/Rcpp/api/meat/is.h: Enhance the check for Rcpp Module objects (PR #381 fixing #380) 2015-10-01 JJ Allaire * src/attributes.cpp: Enable export of C++ interface for functions that return void 2015-09-28 Dirk Eddelbuettel * inst/NEWS.Rd: GitHub pull requests and issues are now linked * src/barrier.cpp: Use SET_STRING_ELT() on LHS (with thanks to Luke) 2015-09-21 Dirk Eddelbuettel * inst/include/Rcpp/String.h: Before assigning ensure we received exactly one string argument 2015-09-10 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.1 * inst/NEWS.Rd: Release 0.12.1 * vignettes/Rcpp.bib: Release 0.12.1 * inst/include/Rcpp/config.h: Release 0.12.1 * debian/*: Changes for Debian release of 0.12.1 2015-09-09 Dirk Eddelbuettel * vignettes/Rcpp-attributes.Rnw: Less harsh grey border around code * vignettes/Rcpp-*.Rnw: Ditto * inst/include/Rcpp/String.h: More comparison operators 2015-09-08 Daniel C. Dillon * inst/include/Rcpp/vector/string_proxy.h: More comparison operators * inst/include/Rcpp/vector/const_string_proxy.h: More comparison operators 2015-09-08 Florian Plaza Onate * inst/include/Rcpp/Dimension.h: Correct creation and access of large matrices * inst/include/Rcpp/vector/Matrix.h: Ditto 2015-09-07 Dirk Eddelbuettel * inst/include/Rcpp/Nullable.h: New class for objects which may be NULL * inst/unitTests/cpp/Vector.cpp: Unit tests for Nullable * inst/unitTests/runit.Vector.R: Ditto 2015-09-06 Daniel C. Dillon * inst/include/Rcpp/String.h: Make strings and string_proxies comparable * inst/unitTests/cpp/String.cpp: Unit tests for above * inst/unitTests/runit.String.R: Ditto 2015-09-05 Daniel C. Dillon * inst/include/Rcpp/vector/Matrix.h: Matrix now has appropriate operator<< * inst/include/Rcpp/vector/Vector.h: Vector now has appropriate operator<< * inst/unitTests/cpp/Vector.cpp: Unit tests for above 2015-09-01 Florian Plaza Onate * inst/include/Rcpp/vector/Subsetter.h: Allow logical subsets to be assigned to a vector of size 1 (pull request #349, discussed in issue #345) * inst/unitTests/cpp/Subset.cpp: Add unit test for above * inst/unitTests/runit.subset.R: Ditto 2015-08-31 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll Version and Date 2015-08-30 Dirk Eddelbuettel * vignettes/Rcpp.bib: Updated RcppGSL entry 2015-08-29 Dirk Eddelbuettel * vignettes/Rcpp.bib: Add RcppZiggurat entry * inst/include/Rcpp/utils/tinyformat.h: Updated to current upstream version keeping our local modifications / adaptations (PR #357) 2015-08-29 Qiang Kou * inst/include/Rcpp/vector/Subsetter.h: Enable logical subsetting on both LHS and RHS, eg 'a[b > 3] = b[b > 3]' (pull request #352 addressing issue #345) * inst/unitTests/cpp/Subset.cpp: Ditto * inst/unitTests/runit.subset.R: Unit tests for above 2015-08-26 Dirk Eddelbuettel * inst/unitTests/testRcppClass/src/rcpp_module.cpp: Renamed Module 'World' to 'RcppClassWorld' to avoid multiple modules with same name (pull request #351, fixed issue #350) * inst/unitTests/testRcppClass/man/Rcpp_class_examples.Rd: Ditto * inst/unitTests/testRcppClass/R/load.R: Ditto * inst/unitTests/testRcppClass/NAMESPACE: Ditto * inst/unitTests/runit.Module.client.package.R: Re-enable test * inst/unitTests/testRcppModule/src/rcpp_module.cpp: Renamed Module 'World' to 'RcppModuleWorld' to avoid multiple modules with same name * inst/unitTests/cpp/modref.cpp: Rename 'World' to 'ModRefWorld' * inst/unitTests/runit.modref.R (test.modRef): Ditto * inst/unitTests/cpp/Module.cpp: Rename 'World' to 'ModuleWorld' * inst/unitTests/runit.Module.R (test.Module): Ditto 2015-08-25 Kurt Hornik * R/loadModule.R: For now=TRUE, always set .botched to FALSE which corresponds to the case of the methods package being in the search path * inst/include/Rcpp/Reference.h: Call call with the internal Namespace 2015-08-24 Dirk Eddelbuettel * vignettes/Rcpp.bib: Updated R / R Core references 2015-08-23 Romain Francois * inst/include/Rcpp/Benchmark/Timer.h: Silence 'g++ -pedantic' by replaceing one R_xlen_t by size_t (pull request #348) 2015-08-19 Florian Plaza Onate * inst/include/Rcpp/vector/Vector.h: Add 'at' methods which implement accessors with bounds cheking (pull request #342, fixes issue #341) * inst/include/Rcpp/vector/Matrix.h: Ditto * inst/unitTests/cpp/Vector.cpp: Add unit tests for at acessors * inst/unitTests/cpp/Matrix.cpp: Ditto * inst/unitTests/runit.Vector.R: Ditto * inst/unitTests/runit.Matrix.R: Ditto 2015-08-18 Dirk Eddelbuettel * inst/unitTests/runit.Module.client.package.R: Disabled for bad interaction of Rcpp Modules and R 3.2.2 2015-08-15 Florian Plaza Onate * inst/include/Rcpp/vector/converter.h: Correct conversion from const char argument (pull request #344, fixes issue #343) 2015-08-14 Florian Plaza Onate * inst/include/Rcpp/vector/DimNameProxy.h: Add assignment operator, refactor code, update error message formatting (pull request #339) 2015-08-05 Kevin Ushey * src/api.cpp: use `_WIN32` instead of `WIN32` 2015-08-02 Dirk Eddelbuettel * R/Attributes.R (sourceCpp): In no-rebuild-needed case, also set a default directory restoration via on.exit() (pull request #335, addressing issue #309) 2015-07-24 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.0 * inst/NEWS.Rd: Release 0.12.0 * vignettes/Rcpp.bib: Release 0.12.0 * inst/include/Rcpp/config.h: Release 0.12.0 * debian/*: Changes for Debian release of 0.12.0 2015-07-23 Dirk Eddelbuettel * inst/include/Rcpp/Symbol.h: Use Rf_installChar(x) instead of Rf_install(CHAR(X)) if R 3.2.0 or later is used 2015-07-07 Qiang Kou * src/include/Rcpp/String.h: Ensure proper initialization of String objects from two constructors * inst/unitTests/cpp/String.cpp: New unit test * inst/unitTests/runit.String.R: Ditto 2015-07-21 Kevin Ushey * inst/include/Rcpp/api/meat/Rcpp_eval.h: don't use 'CDDDR' 2015-07-20 Dirk Eddelbuettel * DESCRIPTION: Rolled minor Date and Version * R/Attributes.R: Use explicit 'utils::assignInMyNamespace' * R/Rcpp.package.skeleton.R: Use explicit 'utils::package.skeleton' 2015-07-17 JJ Allaire * Rcpp.Rproj: don't use devtools mode in RStudio (enables the Test Package command to invoke the RUnit based test-suite) * src/attributes.cpp: Correctly handle signature termination characters ('{' or ';') contained in quotes 2015-07-16 Kevin Ushey * inst/include/Rcpp/api/meat/Rcpp_eval.h: Don't use 'R_ToplevelExec'; ensure Rcpp_eval respects previously established handlers. Capture errors + interrupts with R-level 'tryCatch'. * inst/NEWS.Rd: Add news entry 2015-07-14 JJ Allaire * src/attributes.cpp: fix crash on second call to sourceCpp 2015-07-07 Qiang Kou * src/include/Rcpp/String.h: Use Rcpp_PreserveObject and Rcpp_ReplaceObject to protect underlying SEXP inside String objects 2015-07-07 Matt P. Dziubinski * inst/include/Rcpp/sugar/functions/var.h: Variance -- changed from the unstable formula back to the stable (two-pass) formula, fixed support for complex numbers (formula correction). * inst/unitTests/runit.sugar.var.R: Added tests for complex variance computation, applied simple code refactoring. 2015-07-04 Dirk Eddelbuettel * vignettes/Rcpp.bib: Updated reference to several CRAN packages 2015-07-02 Kevin Ushey * .clang_format: Added 2015-06-25 Kevin Ushey * inst/include/Rcpp/api/meat/Rcpp_eval.h: reset error after Rcpp_eval * inst/unitTests/cpp/Function.cpp: unit tests * inst/unitTests/runit.Function.R: unit tests * inst/include/Rcpp/Function.h: catch empty error messages * inst/include/Rcpp/api/meat/Rcpp_eval.h: protect call 2015-06-24 Qiang Kou * inst/include/Rcpp/String.h: Support encodings * src/String.cpp: Ditto * inst/unitTests/runit.String.R: Add unit tests 2015-06-18 Dirk Eddelbuettel * R/Attributes.R (evalCpp): Add support for plugings argument * man/evalCpp.Rd: Document argument 2015-06-07 JJ Allaire * src/attributes.cpp: Don't load sourceCpp dynamic library if it's already been loaded 2015-06-05 Dirk Eddelbuettel * R/Rcpp.package.skeleton.R (Rcpp.package.skeleton): Remove `character.only=TRUE` from `requireNamespace()` as it happens to flip the boolean value too 2015-06-03 Qiang Kou * inst/include/Rcpp/*: Finish changing R_len_t to R_xlen_t * src/*: Ditto 2014-05-27 Romain Francois * inst/include/Rcpp/DataFrame.h: Safe DataFram constructor 2015-05-16 Qiang Kou * inst/include/Rcpp/*: Begin changing R_len_t to R_xlen_t * src/*: Ditto 2015-05-17 Matt P. Dziubinski * inst/include/Rcpp/platform/compiler.h: Added RCPP_USING_CXX0X_OR_LATER * inst/include/Rcpp/sugar/functions/sapply.h: Updated to support lambda functions 2015-05-01 Kevin Ushey * vignettes/Rcpp-FAQ.Rnw: Notes on installing gfortran 2015-05-01 Dirk Eddelbuettel * DESCRIPTION: Release 0.11.6 * inst/NEWS.Rd: Release 0.11.6 * inst/include/Rcpp/config.h: Release 0.11.6 * debian/*: Changes for Debian release of 0.11.6 2015-04-27 JJ Allaire * src/Module.cpp: Revert parts of PR291 pertaining to Modules and {BEGIN/END}_RCPP * inst/include/Rcpp/api/meat/module/Module.h: Ditto * inst/include/Rcpp/InternalFunctionWithStdFunction.h: Ditto * inst/include/Rcpp/module/Module_generated_CppFunction.h: Ditto * inst/include/Rcpp/module/class.h: Ditto 2014-04-25 Romain Francois * inst/include/Rcpp/vector/Vector.h: update the parameterization of Vector cache * inst/include/Rcpp/vector/traits.h: ... * inst/include/Rcpp/vector/00_forward_proxy.h: ... * inst/unitTests/runit.Vector.R: test for above changes * inst/unitTests/cpp/Vector.cpp: ... 2015-04-22 Kevin Ushey * inst/include/Rcpp/utils/tinyformat.h: don't use C++11 features 2015-04-14 Dirk Eddelbuettel * .travis.yml (sudo): Adding 'sudo: required' to force older Travis backend 2014-04-14 Romain Francois * inst/include/Rcpp/api/meat/is.h: added is__simple * inst/include/Rcpp/config.h: not using floating point arithmetic in preprocessor 2015-04-12 Dirk Eddelbuettel * vignettes/Rcpp-FAQ.Rnw: Also load Rcpp to make cppFunction visible 2014-04-11 Romain Francois * inst/include/Rcpp/macros/macros.h: Reworked BEGIN_RCPP and END_RCPP * inst/include/Rcpp/*: Removed BEGIN_RCPP and END_RCPP from a few files * src/Module.cpp: But added here 2015-04-19 Jonathan Marshall * inst/include/Rcpp/vector/string_proxy.h: Adds empty() constructor * inst/include/Rcpp/vector/const_string_proxy.h: Ditto 2015-03-18 Dmitrii Meleshko * inst/include/Rcpp/vector/Matrix.h: Added default ctor for 0x0 matrix 2015-03-18 JJ Allaire * R/Attributes.R: Revert to use of gcc 4.6.3 with Rtools 3.3 2015-03-16 JJ Allaire * src/attributes.cpp: Fix failing local include test (normalize path of base source file so comparisons work on Windows). 2015-03-15 Dirk Eddelbuettel * R/Attributes.R (.rtoolsPath): Replace trimws() use with a local variant 2015-03-11 JJ Allaire * R/Attributes.R: Rtools 3.3 is now located and used for compilation under R 3.2. 2015-03-11 Kevin Ushey * inst/include/RcppCommon.h: Move headers into major/minor protection * inst/include/Rcpp/r/headers.h: New file 2015-03-04 Dirk Eddelbuettel * DESCRIPTION: Release 0.11.5 * inst/NEWS.Rd: Release 0.11.5 * inst/include/Rcpp/config.h: Release 0.11.5 * debian/*: Changes for Debian release of 0.11.5 2015-03-03 Dirk Eddelbuettel * inst/include/Rcpp/routines.h: Additional application of the 'attribute_hidden' macro for a number of routines in Rcpp::internal 2015-03-02 Dirk Eddelbuettel * inst/include/Rcpp/print.h (Rcpp): New inline function Rcpp::print() * inst/include/RcppCommon.h: Include new header * src/api.cpp: Commented-out print() in global namespace * src/Rcpp_init.cpp: Commented-out registration of print() * inst/include/Rcpp/routines.h: Commented-out initialization 2015-03-01 Dirk Eddelbuettel * src/api.cpp: New function print() as a wrapper around Rf_PrintValue() * src/Rcpp_init.cpp: Corresponding registration for print() * inst/include/Rcpp/routines.h: Corresponding initialization 2015-02-25 Dirk Eddelbuettel * inst/include/Rcpp/routines.h: Use the 'attribute_hidden' define from the R header R_ext/Visibility.h to protect symbols (cf #264) * inst/include/RcppCommon.h: Also include R_ext/Visibility.h 2015-02-24 JJ Allaire * src/attributes.cpp: Guard against includes referencing themselves (and thus creating an endless loop of include processing); Process attributes in included files; Automatically build implementation files (*.cc; *.cpp) corresponding to local header files if they exist. 2015-02-20 Lionel Henry * inst/include/Rcpp/Function.h New Function constructors that will perform function-lookup in an environment or in a namespace. 2015-02-19 Dirk Eddelbuettel * DESCRIPTION: Bump Version: and Date: 2015-02-19 Lionel Henry * inst/include/Rcpp/Environment.h Allow new_env() to create an environment with a specified parent 2015-02-19 JJ Allaire * vignettes/Rcpp-attributes.Rnw: Add note on using inline keyword from shared header files. 2015-02-17 JJ Allaire * vignettes/Rcpp-attributes.Rnw: Update attributes vignette with docs on new features. 2015-02-14 JJ Allaire * src/attributes.cpp: Allow includes of local files (e.g. #include "foo.hpp") in sourceCpp * Rcpp.Rproj: Specify Sweave as Rnw handler for RStudio * vignettes/*.Rnw: Add driver magic comment and turn off Sweave concordance. * vignettes/.gitignore: Ignore artifacts of PDF preview 2015-02-13 Dirk Eddelbuettel * .travis.yml (install): Switch to using ppa:edd/misc to install all the R packages needed for the Travis CI run as r-cran-* binary packages 2015-02-13 JJ Allaire * src/attributes.cpp: Allow 'R' to come immediately after '***' for defining embedded R code chunks in sourceCpp 2015-02-12 JJ Allaire * DESCRIPTION: bump version * src/attributes.cpp: Add rng parameter to Rcpp::export to prevent inclusion of RNGScope in generated code; recognize Rtools 3.2 2015-02-06 Kevin Ushey * inst/include/Rcpp/vector/Subsetter.h: compare CHARSXP pointers rather than string contents in subsetter 2015-02-03 JJ Allaire * src/attributes.cpp: Simplify generated attributes code for RNGScope (use RObject and it's destructor rather than SEXP protect/unprotect). * vignettes/Rcpp-package.Rnw: Update docs on generated code. 2015-02-03 JJ Allaire * inst/include/Rcpp/exceptions.h: Add Rcpp::warning function as wrapper for Rf_warning 2014-02-03 JJ Allaire * inst/include/Rcpp/XPtr.h: Improvements to XPtr including new checked_get and release functions and improved behavior (throw an exception rather than crash) when a NULL external pointer is dereferenced. * inst/unitTests/runit.XPTr.R: tests for XPtr improvements. * inst/unitTests/cpp/XPtr.cpp: tests for XPtr improvements. 2014-02-03 JJ Allaire * R/Attributes.R: Include pkg_types.h file in RcppExports.cpp if it's present in inst/include or src * src/attributes.cpp: Include pkg_types.h file in generated C++ interface file if it's present in inst/include or src 2015-02-02 JJ Allaire * R/exceptions.R: Evaluate R code within an R_toplevelExec block * include/Rcpp/api/meat/Rcpp_eval.h: Evaluate R code within an R_toplevelExec block 2015-01-25 Kevin Ushey * inst/include/Rcpp/utils/tinyformat.h: define an error handler for tinyformat (using ::Rcpp::stop) to not spill assert 2015-01-20 Dirk Eddelbuettel * DESCRIPTION: Release 0.11.4 * inst/NEWS.Rd: Release 0.11.4 * inst/include/Rcpp/config.h: Release 0.11.4 * debian/*: Changes for Debian release of 0.11.4 2015-01-19 Kevin Ushey * inst/include/Rcpp/r/headers.h: move R headers inclusion to own file; move sysmacros.h workarounds to here * inst/include/RcppCommon.h: idem * inst/include/Rcpp/platform/sysmacros.h: idem 2015-01-19 Dirk Eddelbuettel * vignettes/Rcpp.bib: Updated to current package versions * vignettes/getCurrentVersionsOfCitedPackages.R: New helper function * .Rbuildignore: Added vignettes/getCurrentVersionsOfCitedPackages.R * R/unit.tests.R (test): Use requireNamespace() instead of require() * R/unit.tests.R (test): Ditto 2015-01-19 Wush Wu * inst/include/Rcpp/sugar/functions/var.h: Support four vector types * inst/unitTests/runit.sugar.var.R: Added corresponding tests 2015-01-16 Kevin Ushey * inst/include/Rcpp/String.h: fix push_front() * inst/unitTests/runit.String.R: test * inst/unitTests/cpp/String.cpp: test 2015-01-15 Kevin Ushey * inst/include/Rcpp/platform/sysmacros.h: remove leaked macros 'major', 'minor', 'makedev' from * inst/include/RcppCommon.h: ditto * inst/unitTests/cpp/Vector.cpp: simple test 2015-01-08 Dirk Eddelbuettel * inst/examples/OpenMP/GNUmakefile: Renamed from Makefile because it contains GNU make extentions (which we happen to like) * inst/examples/ConvolveBenchmarks: Ditto 2015-01-02 Kevin Ushey * inst/include/Rcpp/sugar/functions/setdiff.h: fix for setequals * inst/unitTests/cpp/sugar.cpp: unit tests * inst/unitTests/runit.sugar.R: unit tests 2015-01-01 Dirk Eddelbuettel * inst/include/Rcpp/sugar/functions/mean.h: Return type is double, not storage type; also added logical vector case; also added integer case to correctly deal with NA values * inst/unitTests/runit.sugar.R: Added unit tests for new sugar mean() * inst/unitTests/cpp/sugar.cpp: C++ side of new unit tests 2014-12-31 Dirk Eddelbuettel * inst/include/Rcpp/sugar/functions/mean.h: Support int and complex 2014-12-30 Dirk Eddelbuettel * inst/include/Rcpp/sugar/functions/mean.h: Use two-pass method 2014-12-29 Kevin Ushey * inst/include/Rcpp/macros/macros.h: reformat for legibility 2014-12-11 Yixuan Qiu * inst/include/Rcpp/internal/r_vector.h: Internal functions to help detect unqualified vector types for sorting, with the help of Romain Francois * inst/include/Rcpp/vector/Vector.h: Disallow sorting on List, RawVector and ExpressionVector, from the discussion with Dirk Eddelbuettel and Kevin Ushey 2014-11-30 Romain Francois * inst/include/Rcpp/vector/proxy.h: Const iteration correction * inst/include/Rcpp/sugar: Ditto in three files 2014-11-25 Dirk Eddelbuettel * inst/include/Rcpp/grow.h: Apply additional Shield<> use around tail object as suggested by Martin Morgan on the rcpp-devel list 2014-11-24 Dirk Eddelbuettel * inst/include/Rcpp/config.h: Release version is still 0.11.3 2014-11-23 Dirk Eddelbuettel * inst/include/Rcpp/config.h: New macro RcppDevVersion to account for four-part development versions such as the current 0.11.3.2 * DESCRIPTION: Version incremented to 0.11.3.2 2014-11-23 Romain Francois * inst/include/Rcpp/exceptions.h: Richer formatting for Rcpp::stop * inst/include/Rcpp/utils/tinyformat.h: Backend for formattinh * inst/unitTests/runit.misc.R: Added new unit test * inst/unitTests/cpp/misc.cpp: C++ backend for test 2014-11-19 Dirk Eddelbuettel * .travis.yml: Temporary stop-gap measure of setting CRAN to something other than the RStudio CDN which currently has DNS issue * inst/include/Rcpp/internal/NAComparator.h: Support sorting of complex numbers, thanks to patch by Yixuan Qiu (in PR #202) 2014-11-08 Kevin Ushey * R/Attributes.R: Fix regular expression used to find source files for compileAttributes 2014-11-02 Dirk Eddelbuettel * inst/unitTests/RcppTestA: Rename to inst/unitTests/testRcppPackage * inst/unitTests/testRcppPackage: Updated throughout * inst/include/Rcpp/Rmath.h: As suggested by Kevin, test for R_VERSION via #define to conditon on R >= 3.1.2 -- this does not require a hard constraint in DESCRIPTION yet on newer R will get R::[dpq]nbinom_mu() 2014-11-01 Dirk Eddelbuettel * src/api.cpp: Do not include execinfo.h on AIX, per r-devel discussion with Mike Beddo, and http://sf.net/p/predef/wiki/OperatingSystems/ 2014-10-29 Dirk Eddelbuettel * inst/include/Rcpp/Rmath.h: Comment out R::[dpqr]nbinom_mu functions as not declared by R with Rf_* name-mapping prefixes 2014-10-17 Chenliang Xu * R/Attributes: Enable scanning of header files 2014-10-03 JJ Allaire * R/Attributes.R: Only look for plugins in the package's namespace (rather than entire search path) 2014-10-01 Kevin Ushey * inst/include/Rcpp/vector/ListOf.h ListOf inherits relevant proxies * inst/unitTests/cpp/ListOf.cpp: Idem * inst/unitTests/runit.ListOf.R: Idem 2014-09-29 Dirk Eddelbuettel * debian/*: Changes for Debian release of 0.11.3 * inst/NEWS.Rd: Removed a double entry 2014-09-27 Dirk Eddelbuettel * DESCRIPTION: Release 0.11.3 * inst/NEWS.Rd: Release 0.11.3 * inst/include/Rcpp/config.h: Release 0.11.3 * ChangeLog: Added a few more entries based on commit log * inst/NEWS.Rd: Idem 2014-09-26 JJ Allaire * DESCRIPTION: Bump version to enable checking for dryRun. 2014-09-23 JJ Allaire * R/Attributes.R: Add dryRun parameter to sourceCpp. 2014-09-21 Dirk Eddelbuettel * DESCRIPTION: Shorten Description: to single paragraph 2014-09-21 Kevin Ushey * inst/unitTests/runit.environments.R: Use 'checkIdentical' as it's a more appropriate expression of intent 2014-09-15 Dirk Eddelbuettel * R/Rcpp.package.skeleton.R: Use more neutral default name, email settings * man/Rcpp.package.skeleton.Rd: Document these 2014-09-14 Dirk Eddelbuettel * inst/unitTests/testRcppClass/man/Rcpp_class_examples.Rd: Similar update to yesterday's update for testRcppModule 2014-09-14 Kevin Ushey * inst/include/Rcpp/vector/Vector.h: Alternate strategy using SFINAE * inst/include/Rcpp/traits/traits.h: Idem * inst/include/Rcpp/traits/enable_if.h: Idem 2014-09-13 Kevin Ushey * inst/include/Rcpp/vector/Vector.h: Allow logical vectors to be created from bools * inst/unitTests/runit.Vector.R: Idem * inst/unitTests/cpp/Vector.cpp: Idem 2014-09-13 Dirk Eddelbuettel * inst/skeleton/Rcpp_modules_examples.Rd: Added to document modules examples * inst/unitTests/testRcppModule/NAMESPACE: Updated for current Modules use * inst/unitTests/testRcppModule/R/zzz.R: Updated for current Modules use * inst/unitTests/testRcppModule/man/Rcpp_modules_examples.Rd: Also added here 2014-09-10 Dirk Eddelbuettel * R/R/Rcpp.package.skeleton.R: If available, pkgKitten used for skeleton pkg 2014-09-09 Dirk Eddelbuettel * R/unit.tests.R: Fully qualify three functions from RUnit via :: 2014-09-03 Kevin Ushey * inst/include/Rcpp/Environment.h: make new_env a free function 2014-09-02 Kevin Ushey * inst/include/Rcpp/api/meat/proxy.h: Finish meat reintroduction + tests * inst/unitTests/runit.wrap.R: Idem * inst/unitTests/cpp/wrap.cpp: Idem * inst/include/Rcpp/proxy/FieldProxy.h: Idem 2014-09-02 Dirk Eddelbuettel * inst/include/Rcpp/vector/Vector.h: Reversing change from Aug 30: the Vector ctor from char* and string are used for CharacterVector() 2014-09-02 JJ Allaire * R/Attributes.R: Include LinkingTo in DESCRIPTION fields scanned to confirm that C++ dependencies are referenced by package. 2014-09-01 Yixuan Qiu * inst/include/Rcpp/vector/Vector.h: fix return value of range eraser 2014-09-01 Kevin Ushey * inst/include/Rcpp/vector/ListOf.h: `size()` member function should return `R_len_t` rather than `int` 2014-08-30 Kevin Ushey * inst/include/Rcpp/Environment.h: Add 'new_env' function 2014-08-30 Dirk Eddelbuettel * inst/include/Rcpp/vector/Vector.h: Mark two 'from string' ctors as deprecated following a suggestion by Yixuan Qiu [reversed on 2014-09-02] 2014-08-18 Dirk Eddelbuettel * vignettes/Rcpp-FAQ.Rnw: Added a new entry regarding licensing of packages stressing that any combined work linking to the GPL-ed R will also be under the terms of the GNU General Public License. 2014-08-13 Kevin Ushey * inst/include/Rcpp/api/meat/meat.h: Reintroduce meat * inst/include/Rcpp/api/meat/proxy.h: Idem * inst/include/Rcpp/proxy/AttributeProxy.h: Idem * inst/include/Rcpp/proxy/Binding.h: Idem * inst/include/Rcpp/proxy/NamesProxy.h: Idem * inst/include/Rcpp/proxy/SlotProxy.h: Idem * inst/include/Rcpp/proxy/TagProxy.h: Idem * inst/include/Rcpp/proxy/proxy.h: Idem 2014-08-08 Christian Authmann * inst/unitTests/cpp/InternalFunction.cpp: New unit test support * inst/unitTests/cpp/InternalFunctionCPP11.cpp: Idem * inst/unitTests/runit.InternalFunction.R: Idem * inst/unitTests/runit.InternalFunctionCPP11.R: Idem 2014-08-06 Christian Authmann * inst/include/Rcpp/InternalFunctionWithStdFunction.h: Extend the existing Rcpp::InternalFunction interface to work with std::function, conditional on a sufficient C++11 support by the compiler 2014-08-05 Dirk Eddelbuettel * inst/include/Rcpp/Date.h: Remove a const qualifier which triggers a warnings as 'type qualifiers ignored on function return type' 2014-08-03 Dirk Eddelbuettel * vignettes/Rcpp-FAQ.Rnw: Updated with respect to OS X installations requiring Fortran (to e.g. build against RcppArmadillo) 2014-07-29 Kevin Ushey * inst/include/Rcpp/vector/no_init.h: Add no_init for matrices * inst/include/Rcpp/vector/Matrix.h: Idem * inst/include/Rcpp/vector/Vector.h: Idem * inst/unitTests/runit.Matrix.R: Idem * inst/unitTests/cpp/Matrix.cpp: Idem 2014-07-29 Dirk Eddelbuettel * inst/include/Rcpp/vector/proxy.h: Removed operator bool() cast as discussed by Christian Authmann on rcpp-devel 2014-07-28 Dirk Eddelbuettel * inst/include/Rcpp/generated/InternalFunction__ctors.h: Updated from corrected creator script 2014-07-25 Romain Francois * inst/include/Rcpp/Benchmark/Timer.h: Added new static method get_timers() to return a vector of timers useful for multithreaded contexts; also removed two unused old member functions (cf #157) 2014-07-14 Kevin Ushey * inst/unitTests/runit.Matrix.R: DimNames Proxy * inst/unitTests/cpp/Matrix.cpp: Idem * inst/include/Rcpp/vector/Matrix.h: Idem * inst/include/Rcpp/vector/DimNameProxy.h: Idem 2014-07-12 Kevin Ushey * R/Attributes.R: Strip version in .parseLinkingTo 2014-07-12 Dirk Eddelbuettel * inst/include/Rcpp/generated/InternalFunction__ctors.h: Regenerated with tighter whitespace and updated header information from updated generator script in corresponding rcpp-scripts repo * inst/include/Rcpp/module/Module_generated_CppFunction.h: Idem * inst/include/Rcpp/module/Module_generated_CppMethod.h: Idem * inst/include/Rcpp/module/Module_generated_Pointer_CppMethod.h: Idem * inst/include/Rcpp/module/Module_generated_Pointer_method.h: Idem * inst/include/Rcpp/module/Module_generated_function.h: Idem * inst/include/Rcpp/module/Module_generated_get_signature.h: Idem * inst/include/Rcpp/module/Module_generated_method.h: Idem 2014-07-09 Kevin Ushey * inst/include/Rcpp/Language.h: OUT -> RESULT_TYPE * inst/include/Rcpp/generated/InternalFunction__ctors.h: Idem * inst/include/Rcpp/module/Module_generated_CppFunction.h: Idem * inst/include/Rcpp/module/Module_generated_CppMethod.h: Idem * inst/include/Rcpp/module/Module_generated_Pointer_CppMethod.h: Idem * inst/include/Rcpp/module/Module_generated_Pointer_method.h: Idem * inst/include/Rcpp/module/Module_generated_function.h: Idem * inst/include/Rcpp/module/Module_generated_get_signature.h: Idem * inst/include/Rcpp/module/Module_generated_method.h: Idem * inst/include/Rcpp/module/get_return_type.h: Idem * inst/include/Rcpp/sugar/block/SugarBlock_1.h: Idem * inst/include/Rcpp/sugar/block/SugarBlock_2.h: Idem * inst/include/Rcpp/sugar/block/SugarBlock_3.h: Idem * inst/include/Rcpp/sugar/block/SugarMath.h: Idem * inst/include/Rcpp/sugar/functions/complex.h: Idem 2014-07-08 Dirk Eddelbuettel * inst/include/Rcpp/InternalFunction.h: Add missing update(SEXP) method per GitHub Pull Request #152, with thanks to Omar Andres Zapata Mesa * inst/THANKS: Updated 2014-07-04 Dirk Eddelbuettel * vignettes/Rcpp-unitTests.Rnw: Commented-out copy of results to /tmp 2014-06-29 JJ Allaire * R/Attributes.R: fix setwd problem when sourceCpp used a relative path and included an R code chunk 2014-06-20 Dirk Eddelbuettel * include/Rcpp/sugar/functions/ifelse.h: Applied pull request #150 by Romain to have operator{} return the correct NA type 2014-06-11 Dirk Eddelbuettel * inst/include/Rcpp/macros/macros.h: No longer include macros/preprocessor_generated.h which was deprecated as of Rcpp 0.10.5 * inst/include/Rcpp/macros/preprocessor_generated.h: Removed 2014-06-08 Dirk Eddelbuettel * cleanup: Do not remove 'build/Rcpp.pdf', thanks to hint by Kurt / CRAN 2014-06-06 Dirk Eddelbuettel * DESCRIPTION: Release 0.11.2 * inst/NEWS.Rd: Release 0.11.2 * inst/include/Rcpp/config.h: Release 0.11.2 * debian/*: Similarly updated for new release to Debian * tests/doRUnit.R: Additional check added for release version case 2014-06-05 JJ Allaire * R/Attributes.R: Use -std=c++0x for cpp11 plugin on Windows if R <= 3.0 2014-05-28 Kevin Ushey * inst/include/Rcpp/vector/vector_from_string.h: Protect result of Rf_mkString 2014-05-24 Dirk Eddelbuettel * .Rbuildignore: Add .dir-locals.el 2014-05-23 Dirk Eddelbuettel * R/Module.R (new_dummyObject): Remove erraneous quotes * .dir-locals.el: Setting tab-width to 8 2014-05-18 Kevin Ushey * inst/include/Rcpp/vector/Vector.h: Safer casting to fix #146 * inst/include/Rcpp/Environment.h: Idem * inst/include/Rcpp/api/meat/Environment.h: Idem * inst/include/Rcpp/vector/Vector.h: Idem * .dir-locals.el: Added for project-local Emacs settings 2014-05-10 Dirk Eddelbuettel * R/Attributes.R (compileAttributes): Read Imports: as well 2014-05-07 Kevin Ushey * R/Attributes.R (.plugins[["cpp11"]]): Set USE_CXX1X to more reasonable non-empty value 2014-05-06 Kevin Ushey * R/Attributes.R (.plugins[["cpp11"]]): Set USE_CXX1X to non-empty value 2014-04-30 Dirk Eddelbuettel * R/Attributes.R: Add plugins for C++0x and C++1y 2014-04-30 JJ Allaire * R/Attributes.R: Use USE_CXX1X for cpp11 plugin when R >= 3.1 2014-04-02 Dirk Eddelbuettel * tests/doRUnit.R: Better RUnit error report with thanks to Murray 2014-03-18 JJ Allaire * man/cppFunction.Rd: Correct package header file example to use .h 2014-03-14 Dirk Eddelbuettel * inst/include/Rcpp/DataFrame.h: Add missing return in Impl method 2014-03-13 Dirk Eddelbuettel * DESCRIPTION: Release 0.11.1 * inst/NEWS.Rd: Release 0.11.1 * inst/include/Rcpp/config.h: Release 0.11.1 * debian/*: Similarly updated for new release to Debian 2014-03-09 Kevin Ushey * inst/include/Rcpp/vector/const_string_proxy.h: Workaround for issue with constructing proxies from CHARSXPs 2014-03-08 Kevin Ushey * inst/include/Rcpp/proxy/proxy.h: Make sure proxies know about the const char* wrap shortcut 2014-03-08 Dirk Eddelbuettel * inst/include/Rcpp/proxy/Binding.h: Remove spurious ';' [g++ -pedantic] * inst/include/Rcpp/proxy/ProtectedProxy.h: Idem * inst/include/Rcpp/proxy/TagProxy.h: Idem * inst/include/Rcpp/proxy/AttributeProxy.h: Idem 2014-03-05 Kevin Ushey * inst/include/Rcpp/proxy/FieldProxy.h: bandaid for protection issue in operator= of FieldProxy * R/unit.tests.R: modify Rcpp:::test so we can run tests with gctorture(TRUE) 2014-03-03 Kevin Ushey * inst/include/Rcpp/proxy/SlotProxy.h: Add missing const_SlotProxy ctor definition 2014-02-24 Kevin Ushey * R/Rcpp.package.skeleton.R: make sure we add loadModule to NAMESPACE when module is TRUE 2014-02-23 Kevin Ushey * inst/include/Rcpp/DataFrame.h: better nrows behavior 2014-02-17 Romain Francois * inst/include/Rcpp/traits/un_pointer.h: fix bug in un_pointer for object 2014-02-17 Kevin Ushey * src/attributes.cpp: Fix attributes behavior with ::create, and also add an option for a default constructor (e.g. NumericVector v = NumericVector(10)) gives a default value of 'numeric(10)' at the R level). Also make NAs keep their type when exposed to R. 2014-02-16 JJ Allaire * src/attributes.cpp Replace (incorrect) call to Rcpp::internal::jumpToTop with Rf_onintr 2014-02-07 Kevin Ushey * inst/include/Rcpp/Reference.h: Add default ctor 2014-02-03 Kevin Ushey * inst/include/Rcpp/vector/Vector.h: Enable conversion from Rcpp vectors to RObject 2014-02-02 Dirk Eddelbuettel * DESCRIPTION: Release 0.11.0 * inst/NEWS.Rd: Release 0.11.0 * inst/include/Rcpp/config.h: Release 0.11.0 * debian/*: Similarly updated for new release to Debian 2014-02-02 JJ Allaire * R/Attributes.R: Use placeholder for .Call to avoid warning 2014-02-01 Dirk Eddelbuettel * tests/doRUnit.R: Simplified following pattern in RProtoBuf * vignettes/Rcpp-unitTests.Rnw: Remove a now superfluous global var * vignettes/Rcpp.bib: Updated references to current packages 2014-02-01 JJ Allaire * R/Attributes.R: Embedded R code chunks in sourceCpp can now be disabled 2014-01-31 Dirk Eddelbuettel * vignettes/Rcpp-FAQ.Rnw: Render code with background boxen * vignettes/Rcpp-package.Rnw: Idem * vignettes/Rcpp-modules.Rnw: Idem * vignettes/Rcpp-extending.Rnw: Idem * vignettes/Rcpp-sugar.Rnw: Idem * vignettes/Rcpp-attributes.Rnw: Switched to highlight driver * inst/include/Rcpp/Benchmark/Timer.h: Reverted back to using iterators via use of anonymous namespace for accessors * inst/announce/ANNOUNCE-0.11.0.txt: Updated 2014-01-31 Dirk Eddelbuettel * man/Rcpp.package.skeleton.Rd: Also updated 2014-01-31 JJ Allaire * R/Attributes.R: Embedded R code chunks in sourceCpp are now executed within the working directory of the C++ source file. 2014-01-30 Dirk Eddelbuettel * vignettes/Rcpp-package.Rnw: Updates for upcoming release 2014-01-28 Dirk Eddelbuettel * vignettes/Rcpp-FAQ.Rnw: Some updates for upcoming release 2014-01-25 Dirk Eddelbuettel * inst/include/Rcpp/Benchmark/Timer.h: Simplified -- Rcpp Gallery example using it was not building any longer under g++ 2014-01-23 Dirk Eddelbuettel * inst/announce/ANNOUNCE-0.11.0.txt: Added for next release 2014-01-21 Dirk Eddelbuettel * R/Rcpp.package.skeleton.R: Update skeleton package to add proper Imports: to DESCRIPTION, and importFrom() to NAMESPACE 2014-01-19 Kevin Ushey * inst/include/Rcpp/api/meat/Vector.h: Add missing UNPROTECT in push_back_name__impl 2014-01-18 Kevin Ushey * inst/unitTests/runit.S4.R: Add a test for ctor from slot proxy * inst/unitTests/cpp/S4.cpp: Add a test for ctor from slot proxy * inst/include/Rcpp/vector/Vector.h: Add missing r_cast to vector ctor from proxy 2014-01-18 JJ Allaire * R/Attributes.R: More restrictive matching of C++ file extensions for compileAttributes. 2014-01-18 Kevin Ushey * inst/unitTests/cpp/Matrix.cpp: Add unit test * inst/unitTests/runit.Matrix.R: Add unit test * inst/include/Rcpp/api/meat/Matrix.h: Bug fix in operator= 2014-01-17 Dirk Eddelbuettel * R/RcppLdpath.R (RcppCxxFlags): Restore function to supply values for include files for packages not yet converted to LinkingTo: 2014-01-16 JJ Allaire * inst/include/Rcpp/macros/macros.h: Use Rf_onintr rather than non-public Rf_jump_to_toplevel * inst/include/Rcpp/DateVector.h: Fix GreedyVector compilation error * inst/include/Rcpp/DatetimeVector.h: Fix GreedyVector compilation error 2014-01-15 Dirk Eddelbuettel * inst/include/Rcpp/exceptions.h: Move stop() into Rcpp namespace 2014-01-03 JJ Allaire * .gitignore: Added src/, *.Rproj, and .Rproj.user * inst/include/Rcpp/Interrupt.h: New checkUserInterrupt function that provides a C++ friendly implementation of R_CheckUserInterrupt * inst/include/RcppCommon.h: Include Rcpp/Interrupts.h * inst/include/macros/macros.h: Check for interrupts in END_RCPP * src/attributes.cpp: Handle interrupted-error in attribute function envelope. 2013-12-31 Dirk Eddelbuettel * vignettes/Rcpp.bib: Updated CRAN package references 2013-12-20 Kevin Ushey * inst/include/Rcpp/sugar/tools/mapcompare.h: Use a union for type punning, to avoid compiler warning on aliasing. Also switch to uint64_t to enforce 64bit comparison. * inst/include/Rcpp/RObject.h: Add missing *this return for RObject_impl::operator= 2013-12-20 Dirk Eddelbuettel * inst/include/Rcpp/RObject.h: Applied fix by Kevin Ushey (#88) * inst/include/Rcpp/vector/Vector.h: Ditto (#89) 2013-12-01 Kevin Ushey * R/Rcpp.package.skeleton.R: Fixed bug relating to user-supplied functions in 'list' argument * inst/unitTests/runit.Rcpp.package.skeleton.R: Added unit tests 2013-11-30 Dirk Eddelbuettel * vignettes/Rcpp-FAQ.Rnw: Updated and corrected in several spots 2013-11-22 Dirk Eddelbuettel * inst/include/Rcpp/stats/nt.h: Correct expansion of (d|q|p)nt() * inst/unitTests/runit.stats.R: Added unit tests for t dist with ncp * inst/unitTests/cpp/stats.cpp: C++ side of expamded unit tests 2013-11-05 Dirk Eddelbuettel * .travis.yml: Added to support continuous integration on github 2013-10-28 Romain Francois * include/Rcpp/protection/Armor.h : Armor::operator SEXP has to be const for it to work properly with wrap. 2013-10-27 Dirk Eddelbuettel * DESCRIPTION: Release 0.10.6 * inst/NEWS.Rd: Release 0.10.6 * inst/include/Rcpp/config.h: Release 0.10.5 * debian/*: Similarly updated for new release to Debian 2013-10-17 JJ Allaire * R/Attributes.R: sourceCpp now correctly binds to Rtools 3.0 and 3.1 2013-10-16 Dirk Eddelbuettel * R/Rcpp.package.skeleton.R (Rcpp.package.skeleton): Deprecate namespace argument which package.skeleton() no longer uses * man/Rcpp.package.skeleton.Rd: Updated documentation accordingly 2013-10-16 Romain Francois * include/Rcpp/api/meat/is.h : added missing implementation for is and is 2013-10-14 Romain Francois * inst/include/Rcpp/protection/protection.h: added Shield/Shelter/Armor * DESCRIPTION: bump to version 0.10.5.3 2013-10-12 Dirk Eddelbuettel * DESCRIPTION (Depends): Rolled Depends: on R to "R (>= 3.0.0)" as required by the vignette building code (with thanks to Uwe Ligges) 2013-10-08 Dirk Eddelbuettel * NAMESPACE: Export LdFlags as well as RcppLdFlags * man/RcppLdFlags.Rd: Updated 2013-10-06 John M Chambers * R/exposeClass.R: avoid warning from unclosed file() 2013-10-06 John M Chambers * NAMESPACE: change classModule to exposeClass * R/classModule.R: delete * man/classModule.Rd: delete * R/exposeClass.R: add * man/exposeClass.Rd: add * man/setRcppClass.Rd: update, clarify, recommend exposeClass() 2013-10-03 John M Chambers * R/classModule.R: new function to write module file for class * man/classModule.Rd: documentation for new function classModule() * NAMESPACE: export classModule * R/loadModule.R: clean up an error message * R/RcppClass.R: defaults for module consistent w. classModule() * man/setRcppClass.Rd: add defaults, explain need for saveAs 2013-10-02 Dirk Eddelbuettel * inst/include/Rcpp/traits/is_na.h: More fixes thanks to Thomas Tse 2013-10-01 Dirk Eddelbuettel * inst/include/Rcpp/api/meat/is.h: Applied patch by Thomas Tse to provide missing Character(Vector|Matrix) * DESCRIPTION: Bump to development release 0.10.5.1 2013-09-28 Dirk Eddelbuettel * DESCRIPTION: Release 0.10.5 * inst/NEWS.Rd: Release 0.10.5 * inst/include/Rcpp/config.h: Release 0.10.5 * debian/*: Similarly updated for new release to Debian * vignettes/Rcpp-unitTests.Rnw: Switched to Charter font just like the other eight vignettes 2013-09-28 Romain Francois * include/Rcpp/module/Module_generated_CppMethod.h : more code bloat to handle flexible semantics for passing parameters in methods * include/Rcpp/module/Module_generated_Pointer_CppMethod.h : same * inst/unitTests/cpp/Module.cpp: testing the above * unitTests/runit.Module.R: testing 2013-09-27 Dirk Eddelbuettel * vignettes/Rcpp-unitTests.Rnw: Re-activated vignette * DESCRIPTION: Version number bumped to 0.10.4.6 2013-09-27 Romain Francois * include/Rcpp/module/Module_generated_CppFunction.h : regenerated to use input_parameter traits for more flexible parameter passing strategy * unitTests/cpp/Module.cpp : more testing * unitTests/runit.Module.R : more testing 2013-09-22 Dirk Eddelbuettel * inst/include/Rcpp/sugar/functions/diff.h: Declare set_previous const and add a missing traits:: prefix before is_na * inst/unitTests/cpp/sugar.cpp: Unit test for diff() of int. vector * inst/unitTests/runit.sugar.R: Invoke new test 2013-09-21 Dirk Eddelbuettel * vignettes/Rcpp-modules.Rnw: Remove vignette-local compilations which again caused problems for the Windows builds at R-Forge and win-builder. Unit tests comprise the same functionality and pass. * vignettes/Rcpp-attributes.Rnw: Refresh look by using Bitstream Charter, and microtype package (cf http://www.khirevich.com/latex) * vignettes/Rcpp-extending.Rnw: Idem * vignettes/Rcpp-FAQ.Rnw: Idem * vignettes/Rcpp-modules.Rnw: Idem * vignettes/Rcpp-package.Rnw: Idem * vignettes/Rcpp-quickref.Rnw: Idem * vignettes/Rcpp-sugar.Rnw: Idem 2013-09-20 Dirk Eddelbuettel * R/Module.R: More ':::' cleanups to make R CMD check happy * R/RcppClass.R: Ditto * NAMESPACE: Some new exports related to this * man/setRcppClass.Rd: Document loadRcppClass() * man/Rcpp-internal.Rd: Added in order to document cpp_object_initializer() and cpp_object_dummy() 2013-09-19 Dirk Eddelbuettel * inst/include/Rcpp/longlong.h: Unbreak long long by making it (as before) conditional on g++ (or clang) as well as C++11. The condition can be OR'ed with another suitably-defined variable, but the default has to be off as CRAN compliance has to remain the standard 2013-09-19 Romain Francois * include/Rcpp/longlong.h: isolate all handling of long long in a separate file which we might choose not to include by default * include/Rcpp/traits/r_sexptype_traits.h : unsigned int wrapped as REALSXP long standing feature request from Murray. * R/Attributes.R : Added the helper demangle and sizeof functions * man/demangle.Rd : Documentation for demangle and sizeof * include/Rcpp/platform/compiler.h : less restritive support of long long types. But still behind a test for gcc and a test for the availability of the type, and the __extension__. -pedantic does not warn about it 2013-09-18 JJ Allaire * R/Attributes.R: Don't search the inline package as a fallback when loading plugins for the the Rcpp::plugins attribute 2013-09-18 Romain Francois * vignettes/Rcpp-package.Rnw: Updating the vignette. Setting attributes to TRUE by default. * R/Rcpp.package.skeleton.R: Setting attributes to TRUE by default. This is what we should encourage people to use. * include/Rcpp/as.h: add as specialization * include/Rcpp/sugar/functions/diff.h : rework the implementation of diff so that it works even when we don't know the previous value * unitTests/runit.sugar.R : * unitTests/cpp/sugar.cpp : * include/Rcpp/sugar/functions/range.h : factored out of minmax.h * include/Rcpp/sugar/functions/min.h : factored out of minmax.h * include/Rcpp/sugar/functions/max.h : factored out of minmax.h * TODO : 3 less items 2013-09-17 JJ Allaire * R/Attributes.R: Call inlineCxxPlugin and Rcpp.plugin.maker without qualification rather than with ':::' 2013-09-17 Dirk Eddelbuettel * NAMESPACE: Export RcppLdFlags which is often used to build Rcpp * man/RcppLdFlags.Rd: Added required manual page * R/Attributes.R: Call RcppLdFlags() via '::' instead of ':::' * R/SHLIB.R: Ditto * R/inline.R: Ditto * vignettes/Rcpp-FAQ.Rnw: Add %\VignetteEngine{highlight::highlight} * vignettes/Rcpp-attributes.Rnw: Idem * vignettes/Rcpp-extending.Rnw: Idem * vignettes/Rcpp-modules.Rnw: Idem * vignettes/Rcpp-package.Rnw: Idem * vignettes/Rcpp-quickref.Rnw: Idem * vignettes/Rcpp-sugar.Rnw: Idem * vignettes/Rcpp-package.Rnw: Altered to make use of highlight package; also no longer build embedded demo package (which upsets R CMD check under R-devel) 2013-09-16 JJ Allaire * R/Attributes.R : Remove calls to non-exported functions from the tools package 2013-09-16 Romain Francois * include/Rcpp/internal/Exporter.h : Specific handling of containers (std::vector, std::deque, and std::list so that we use their faster range constructor when we can, and so let the STL optimize how data is copied * include/Rcpp/api/meat/export.h : Implementation of the above * include/Rcpp/vector/Vector.h : added Vector( const char* ) ctor * DESCRIPTION : bump to 0.10.4.5 (for RcppExtras) 2013-09-15 Dirk Eddelbuettel * inst/include/Rcpp/InputParameter.h (Rcpp): Add 'const' case * inst/unitTests/cpp/Vector.cpp: New unit tests for std::vector conversions, using both int and double arguments * inst/unitTests/runit.Vector.R: R complement of these tests 2013-09-15 Romain Francois * include/Rcpp/InputParameter.h : added the traits::input_parameter trait to add another layer of abstration. * include/Rcpp/macros/module.h : taking advantage of input_parameter to specialize how to work with module objects * src/attributes.cpp : using traits::input_parameter instead of InputParameter 2013-09-14 Dirk Eddelbuettel * src/attributes.cpp : Precede closing '>' by space to avoid '>>' * inst/include/Rcpp/platform/compiler.h: Further refine #if test for 'long long' by conditioning __LP64__ on also using clang/llvm * src/attributes.cpp : Precede closing '>' by space to avoid '>>' 2013-09-13 Romain Francois * src/api.cpp : added "long long" to the capabilities function. * include/Rcpp/platform/compiler.h : demangling is definitely available on all mac versions using gcc. No point is testing for OSX version. * include/Rcpp/InputParameter.h : extra layer of abstraction to allow for custom handling of references etc ... used in RcppArmadillo * src/attributes.cpp : using InputParameter * DESCRIPTION: bump to 0.10.4.4 2013-09-12 Romain Francois * include/Rcpp/platform/compiler.h : patch submitted by Murray for better support of long long type. * include/Rcpp/platform/compiler.h : gcc 4.2.1 has tr1/unordered_map and tr1/unordered_set. Previous test was for gcc 4.4.0 for some reason 2013-08-31 Dirk Eddelbuettel * inst/doc/*: Moved all vignettes to vignettes/* * vignettes/*: Minor updates to some vignettes 2013-08-22 Romain Francois * include/Rcpp/traits/is_primitive.h : new trait to identify if a type is primitive, this is a shortcut of using r_type_traits and compare it to r_type_primitive_tag * include/Rcpp/traits/r_type_traits.h : new tag r_type_pair_tag to handle wrapping map where KEY can be converted to String and VALUE can wrap itself * include/Rcpp/internal/wrap.h : handling map and vector where T is a class handled by modules * include/Rcpp/api/meat/wrap.h : implementations to handle map * unitTests/cpp/wrap.cpp : more tests for map with KEY not a string * unitTests/runit.wrap.R : more tests for map with KEY not a string * include/Rcpp/internal/export.h : added export_range__dispatch for the r_type_generic_tag tag. Meaning we can now use as< vector > where T is not a primitive * include/Rcpp/api/meat/export.h : implementation in meat because it needs as 2013-08-01 Romain Francois * unitTests/cpp/wstring.cpp: fix to re-enable wstring test suite. * unitTests/runit.wstring.R: re-enable the wstring test suite. 2013-07-31 Dirk Eddelbuettel * DESCRIPTION: Bump development version to 0.10.4.3 * inst/doc/Makefile: Rejigged pdf builds in another attempt at pleasing whatever runs the builds on r-forge. L'espoir fait vivre. 2013-07-25 Romain Francois * include/Rcpp/sugar/functions/is_na.h : added is_na for DateVector and DatetimeVector * include/Rcpp/Date.h : added is_na method * include/Rcpp/Datetime.h : added is_na method * unitTests/cpp/dates.cpp : removed the ignoreme useless parameters * unitTests/runit.Date.R : idem * src/attributes.cpp: collecting functions in a FunctionMap. Will use this for dispatching 2013-07-24 Romain Francois * include/Rcpp/traits/is_module_object.h: trait class that identifies at compile time if a given type is a type exposed by a module, i.e. if we used the RCPP_EXPOSED_AS macro * include/Rcpp/is.h: able to identify if an object is of a given type exposed by a module (supports references and pointers too). * src/Module.cpp: implementation of is_module_object_internal that checks if an object is of a given typeid, used by is where T is module exposed 2013-07-23 Romain Francois * include/Rcpp/as.h: support as and as where T is a class exposed by modules * include/Rcpp/macros/module.h: idem * include/Rcpp/traits/un_pointer.h: handle the object case * include/Rcpp/traits/r_type_traits.h: adding traits to help the with as and as * unitTests/runit.Module.R: testing as and as * unitTests/cpp/Module.cpp: idem * src/attributes.cpp: take advantage of a more flexible as<>. The Type class gains a full_name() method that shows const-ness and reference-ness 2013-07-17 Romain Francois * include/Rcpp/vector/instantiation.h: added the DoubleVector alias to NumericVector * include/Rcpp/is.h: added is template function 2013-07-11 Dirk Eddelbuettel * R/Attributes.R: Add an OpenMP plugin 2013-07-03 Romain Francois * unitTests/runit.modref.R: using sourceCpp * unitTests/runit.Module.R: using sourceCpp * unitTests/runit.Vector.R: no more uses of inline * unitTests/runTests.R: we don't need inline no more for testing * doc/unitTests/Rcpp-unitTests.R: idem 2013-07-02 Romain Francois * include/Rcpp/vector/Vector.h: fill__dispatch was mispelled (as fill_dispatch) for the non trivial case, so it did not work * unitTests/runit.Matrix.R: using sourceCpp * unitTests/runit.misc.R: using sourceCpp * unitTests/runit.wrap.R: using sourceCpp * unitTests/runit.support.R: using sourceCpp * unitTests/runit.rmath.R: using sourceCpp * unitTests/runit.RObject.R: using sourceCpp * unitTests/runit.stats.R: using sourceCpp * unitTests/runit.XPTr.R: using sourceCpp * unitTests/runit.Vector.R: testing List( int, IntegerVector ) which eventually uses fill__dispatch * include/Rcpp/traits/r_type_traits.h: support for as and as when T is module exposed * include/Rcpp/as.h: as and as when T is module exposed * include/Rcpp/module/Module_generated_CppFunction.h: removed the remove_const_and_reference since as and as is supported * src/attributes.cpp: automatically populating the environment with the content of a module, rather than make the module object available in the environment 2013-07-01 Romain Francois * R/unit.test.R: added helper function Rcpp:::unit_test_setup to avoid some boiler plate code in unit test files. See e.g. runit.Function.R for an example * unitTests/runit.as.R: using sourceCpp * unitTests/runit.Function.R: using sourceCpp * unitTests/runit.DataFrame.R: remove dependency on datasets 2013-06-25 Dirk Eddelbuettel * src/api.cpp: Also test for #defined(__sun) when checking for system lacking a valid backtrace() function for stack traces 2013-06-25 Romain Francois * DESCRIPTION : devel version 0.10.4.1 * src/Module.cpp : bring a simplified version of RCPP_FUNCTION 1 .. 4 * unitTests/runit.macros.R : removed, as RCPP_FUNCTION ... are deprecated * include/Rcpp/macros/preprocessor_generated.h : deprecating RCPP_FUNCTION_... macros 2013-06-24 Dirk Eddelbuettel * inst/include/Rcpp/platform/compiler.h: Note the useful wiki page http://sourceforge.net/p/predef/wiki/Home with #defines for OSs, compilers, libraries and more 2013-06-23 Dirk Eddelbuettel * DESCRIPTION: Release 0.10.4 * inst/NEWS.Rd: Release 0.10.4 * inst/include/Rcpp/config.h: Release 0.10.4 * debian/*: Similarly updated for new release to Debian 2013-06-19 Romain Francois * inst/NEWS.Rd: Document planned depreciation of old RCPP_FUNCION_* macros which are redundant thanks to Rcpp Modules and Rcpp Attributes * include/Rcpp/vector/string_proxy.h : added operator string_proxy::operator==( const string_proxy& ) so that me may compare x[i] and y[i] (x and y being CharacterVector) * include/Rcpp/module/Module_generated_Pointer_CppMethod.h : remove const and reference to OUT type in several places, that was causing problems e.g. on making the Rcpp-modules vignette * include/Rcpp/module/Module_generated_CppMethod.h : idem 2013-06-18 Romain Francois * include/Rcpp/module/Module_generated_CppFunction.h : using BEGIN_RCPP / END_RCPP as suggested by Ben North on Rcpp-devel. This should reduce cross dll exceptions issues on windows. 2013-06-14 Romain Francois * include/Rcpp/stats/random/runif.h : removed unused max variable * include/Rcpp/stats/random/rf.h : removed unused n1 and n2 variables 2013-06-13 Romain Francois * src/Module.cpp: small buglet in macro. Reported on Rcpp-devel 2013-06-12 Dirk Eddelbuettel * inst/doc/Makefile: Force serial build of vignettes in yet another effort to not let R-Forge fail when trying to rebuild them 2013-06-08 Dirk Eddelbuettel * inst/doc/Rcpp.bib: Updated entries * inst/doc/Rcpp-introduction.Rnw: Added pointer to 'Rcpp Attributes' vignette, as well as to 'Rcpp Sugar' and 'Rcpp Modules' vignettes. * inst/doc/Rcpp-FAQ/Rcpp-FAQ.Rnw: Idem 2013-06-06 Romain Francois * unitTests/cpp/Vector.cpp : more unit tests for erase * unitTests/runit.Vector.R : more unit tests for erase 2013-06-05 Romain Francois * include/Rcpp/api/meat/Vector.h : fixed Vector<>::erase(iterator, iterator) and correct return value of erase * unitTests/cpp/Vector.cpp : added regression test for the above fix * unitTests/runit.Vector.R : added regression test for the above fix * include/Rcpp/module/class.h : removed useless typedef 2013-05-31 Romain Francois * unitTests/runit.sugar.R : new test for is_infinite and is_nan * unitTests/cpp/sugar.cpp : new test for is_infinite and is_nan * include/Rcpp/sugar/functions/is_infinite.h : new function is_infinite * include/Rcpp/traits/is_infinite.h : new function is_infinite * include/Rcpp/sugar/functions/is_nan.h : new function is_nan * include/Rcpp/traits/is_nan.h : new function is_nan 2013-05-30 Romain Francois * include/Rcpp/sugar/functions/all.h : bug fixed for the NA=false case * include/Rcpp/sugar/functions/is_na.h : header * include/Rcpp/sugar/functions/is_finite.h : added sugar is_finite function * include/Rcpp/traits/is_finite.h : added is_finite trait * unitTests/runit.sugar.R : added test for is_finite * unitTests/cpp/S4.cpp : new cpp file to host S4 unit tests * unitTests/runit.S4.R : rework unit tests to use attributes * unitTests/runit.Reference.R : unit tests for Rcpp::Reference * unitTests/cpp/Reference.cpp : unit tests c++ code 2013-05-26 Dirk Eddelbuettel * src/api.cpp: Minor tweak for internal formatting 2013-05-24 J.J. Allaire * R/Attributes.R: Disallow compilation for files that don't have extensions supported by R CMD SHLIB 2013-05-21 J.J. Allaire * R/Attributes.R: Lookup plugins in inline package if they aren't found within the Rcpp package * man/pluginsAttribute.Rd: Documentation updates. 2013-05-17 J.J. Allaire * src/attributes.cpp: prevent gc problems with RNGScope destructor in attributes generated functions; don't include package header file in generated cpp exports file * src/api.cpp: use unsigned long for RNG scope counter 2013-04-28 Dirk Eddelbuettel * src/api.cpp (Rcpp): No longer use Rd_format(Real|Complex) which is a very verboten R internal; formatting to string is now very bare bones 2013-04-27 Dirk Eddelbuettel * src/Makevars: Improved use as well as a new possible overrride of /usr/bin/install_name_tool on OS X, once again contributed by Simon 2013-04-16 Romain Francois * include/Rcpp/sugar/functions/na_omit.h : new function na_omit to remove missing values from a vector. * src/attributes.cpp : portability fix (from Martyn Plummer) * include/Rcpp/api/meat/Vector.h : portability fix (from Martyn Plummer) 2013-04-14 Romain Francois * include/Rcpp/traits/is_na.h: complex version did not work. added default for VECSXP and EXPRSXP versions 2013-04-02 Dirk Eddelbuettel * src/Date.cpp: Corrected operator-() for Date and Datetime objects to behave more inline with C++ standard * inst/include/Rcpp/Date.h: operator-() for Dates now returns a double as the date itself is fractional double since epoch * inst/unitTests/cpp/dates.cpp: New file with C++ portion of tests factored out from R unit test file * inst/unitTests/runit.Date.R: Rewritten for use with new C++ tests 2013-04-02 Romain Francois * include/Rcpp/generated/DataFrame_generated.h : DateFrame::create uses List::create and then feeds to the DataFrame constructor, which seems to work better than the previous approach of calling back to the data.frame function in R * include/Rcpp/DataFrame.h : private function from_list, to help the new implementation of DataFrame::create * src/api.cpp : impl of DataFrame::from_list 2013-03-31 Dirk Eddelbuettel * debian/control (Build-Depends): Modified for Debian-only rebuilds under (rc version of upcoming) R 3.0.0 release * debian/changelog: Entry for Debian build 0.10.3-2 2013-03-29 Dirk Eddelbuettel * src/api.cpp (Rcpp): Re-enable coerce_to_string<>() for real and complex types with Poor Man's Versions (TM) of Rf_EncodeReal and Rf_EncodeComplex which the Powers That Be disallow from being used 2013-03-27 Romain Francois * include/Rcpp/vector/MatrixRow.h : removed unintended printed messaged (reported on Rcpp-devel by Michaeal Love) 2013-03-23 Dirk Eddelbuettel * DESCRIPTION: Release 0.10.3 * inst/NEWS.Rd: Release 0.10.3 * inst/include/Rcpp/config.h: Release 0.10.3 * debian/*: Similarly updated for new release to Debian 2013-03-21 Dirk Eddelbuettel * inst/unitTests/runit.wstring.R (test.as_vector_wstring): replace the "€" symbol with its unicode equivalent "\u20ac" 2013-03-20 Dirk Eddelbuettel * inst/doc/Rcpp.bib: Updated versions for several CRAN packages * inst/CITATION: Add information about forthcoming book 2013-03-20 Romain Francois * include/Rcpp/traits/is_wide_string.h : fixes to re-enable wrap( vector ) and wrap( vector ), needed to support package httpuv * include/Rcpp/internal/wrap.h : same 2013-03-19 Dirk Eddelbuettel * inst/include/Rcpp/config.h: Define RCPP_USE_NEW_PRESERVE_RELEASE with default value of 0 to enable/disable new preserve/release code * src/api.cpp: Bracket the new Rcpp object preserve / release code with the new variable RCPP_USE_NEW_PRESERVE_RELEASE and fall back to R behaviour if not set 2013-03-12 Romain Francois * include/Rcpp/Module.h: added virtual destructor to CppProperty 2013-03-08 Dirk Eddelbuettel * inst/include/Rcpp/platform/compiler.h: Improved g++ version detection with thanks to Yan Zhou 2013-02-28 JJ Allaire * src/attributes.cpp: standalone roxygen chunks (e.g. to document a class) are now transposed into RcppExports.R 2013-02-27 JJ Allaire * R/Rcpp.package.skeleton.R: eliminated spurious empty hello world function definition in Rcpp.package.skeleton 2013-02-24 JJ Allaire * R/Attributes.R: add global package include file to RcppExports.cpp if it exists; handle Rcpp module definitions in sourceCpp * src/attributes.cpp: handle Rcpp module definitions in sourceCpp * man/sourceCpp.Rd: documentation updates 2013-02-20 Dirk Eddelbuettel * inst/include/Rcpp/platform/compiler.h: As deteced by Gong-Yi Liao, we need to test for __LONG_LONG_MAX__ (defined in limits.h) and not LONG_LONG_MAX (defined climits which we do not include) 2013-02-19 Romain Francois * src/api.cpp : more debugging * include/RcppCommon.h : move sexp_to_name here. Used in some debugging * include/Rcpp/vector/MatrixRow.h : fix const version of operator[] * include/Rcpp/vector/Vector.h : more debugging * include/Rcpp/internal/wrap.h : more debugging. more dispatch. 2013-02-18 Romain Francois * include/Rcpp/vector/string_proxy.h : only declare operator+= * include/Rcpp/String.h : define string_proxy::operator+=, now that String is defined. 2013-02-15 JJ Allaire * R/Attributes.R: Merge existing values of build related environment variables for sourceCpp 2013-02-12 Romain Francois * src/api.cpp : More careful about RCPP_PROTECTION_STACK init 2013-02-08 Romain Francois * include/Rcpp/as.h: re-enable as(CharacterVector[int]) 2013-02-07 Dirk Eddelbuettel * inst/THANKS: Adding Ben North for the help / bug report on iterators 2013-02-05 Romain Francois * include/Rcpp/vector/string_proxy.h : more wstring support * include/Rcpp/XPtr.h : more debugging. removed delete_finalizer which is no longer used 2013-02-05 JJ Allaire * src/attributes.cpp : ensure that line comments invalidate block comments when parsing for attributes 2013-02-04 Romain Francois * include/Rcpp/traits/r_type_traits.h : make the r_type_pairstring_string_tag tag more general, handling wstring as well as string * include/Rcpp/internal/wrap.h : using make_charsexp, a more generic version of charsexp_from_wstring. * include/Rcpp/as.h : more support fot wstring * include/Rcpp/internal/wrap.h : rework the support of wstring * include/Rcpp/internal/export.h : added as_string_elt to rework the support of wstring * include/Rcpp/traits/char_type.h : new trait to help the wstring support * include/Rcpp/String.h : added some support for wstring * include/Rcpp/vector/string_proxy.h : adapt to add wstring support * unitTests/runit.wstring.R : unit tests for wstring support * unitTests/cpp/wstring.cpp : unit tests for wstring support 2013-02-03 Romain Francois * include/Rcpp/traits/wrap_type_traits.h : support for wrap( wstring ) * include/Rcpp/internal/export.h : exporting wstring and containers of wstring * include/Rcpp/internal/wrap.h : support for wrap( wstring ) and containers of wstring * include/RcppCommon.h : definition of charsexp_from_wstring * src/api.cpp: implementation of charsexp_from_wstring 2013-02-02 Romain Francois * include/Rcpp/vector/MatrixRow.h: correct operator++(int) and operator--(int) * include/Rcpp/internal/Proxy_Iterator.h: correct operators ++ and -- * include/Rcpp/sugar/Range.h: correct operators ++ and -- * include/Rcpp/sugar/tools/iterator.h: correct operators ++ and -- * include/Rcpp/vector/MatrixBase.h : correct operators ++ and -- * include/Rcpp/vector/VectorBase.h : correct operators ++ and -- * unitTests/cpp/Vector.cpp: new unit tests * unitTests/runit.Vector.R: new unit tests * src/api.cpp: comment dropTrailing0 which is not used anymore * include/Rcpp/as.h: support for as * include/Rcpp/internal/export.h: more support for wstring 2013-01-15 Dirk Eddelbuettel * src/api.cpp (Rcpp): Commented-out coerce_to_string() for real and complex arguments as R-devel (as of today) dislikes use of non-API functions Rf_EncodeComplex’, ‘Rf_EncodeReal’, ‘Rf_formatComplex’ * .Rbuildignore: Added inst/include/Rcpp/preprocessor and sugar/functions/impl which are currently empty directories * src/Timer.cpp (Rcpp): Avoid a 'long long' warning from a const 2014-01-15 JJ Allaire * R/Attributes.R: don't add source directory as an include path for sourceCpp; fix duplicate inclusion of Rcpp directory * R/RcppLdpath.R: don't quote paths on windows 2014-01-14 JJ Allaire * DESCRIPTION: bump version to 0.10.2.3 * R/Attributes.R: handle build paths with spaces on windows * R/RcppLdpath.R: handle build paths with spaces on windows * R/tools.R: handle build paths with spaces on windows * src/Timer.cpp: fix OSX build (remove __MACH__ define check) * R/: set svn eol-style native for source files * src/: set svn eol-style native for source files * inst/include/: set svn eol-style native for source files 2014-01-13 JJ Allaire * R/Attributes.R: use plugin includes in cppFunction; stop with explicit error on Windows then the Rcpl libPath or sourceCpp target file contains spaces in it's path; add source file directory as an include path for sourceCpp; special handling for sourceCpp include paths on windows * man/pluginsAttribute.Rd: clarify which fields of plugin are used by sourceCpp 2014-01-12 JJ Allaire * DESCRIPTION: bump version to 0.10.2.2 * NAMESPACE: add registerPlugin function * R/Attributes.R: add registerPlugin function; add plugins parameter to cppFunction * man/cppFunction.Rd: documentation updates * man/pluginsAttribute.Rd: documentation updates * man/registerPlugin: documentation updates 2014-01-11 JJ Allaire * R/Attributes.R: initial support for Rcpp::plugins attribute; add built-in cpp11 plugin * src/attributes.cpp: initial support for Rcpp::plugins attribute 2014-01-04 JJ Allaire * R/Attributes.R: null check on pkginfo depends field 2013-01-02 Dirk Eddelbuettel * src/Timer.cpp (Rcpp): Applied refinement of previously applied patch re *BSD builds, see http://bugs.debian.org/697032 for more 2012-12-30 Dirk Eddelbuettel * src/Timer.cpp (Rcpp): Added defined() tests for more *BSD family members as the build also failed with the FreeBSD Kernel on Debian 2012-12-27 Dirk Eddelbuettel * src/Timer.cpp (Rcpp): Applied patch kindly supplied by Rainer Hurling to support compilation on FreeBSD 2012-12-26 JJ Allaire * R/Attributes.R: return invisibly from void functions * src/attributes.cpp: return invisibly from void functions 2012-12-21 Romain Francois * NAMESPACE : remove C++ObjectS3 and C++ClassRepresentation classes * R/00_classes.R: remove unused S4 classes * src/internal.h: added Rcpp_PreserveObject, Rcpp_ReleaseObject and Rcpp_ReplaceObject as replacements to R_ versions. The back end of the Rcpp_ version is a list (generic vector) instead of a linked list and is faster * src/Module.cpp: more debugging * src/barrier.cpp: added get_Rcpp_protection_stack used in the new stack system for protecting/releasing objects in Rcpp * src/api.cpp: implemetation of Rcpp_PreserveObject, Rcpp_ReleaseObject and Rcpp_ReplaceObject. RObject::setSEXP now uses the new system. The RObject(SEXP) constructor now directly uses Rcpp_PreserveObject More debugging for the RObject class Changes in api classes to better use the new protection system * unitTests/cpp/language.cpp: hosting unit test in sourceCpp form * unitTests/runit.Language.R: update unit tests * unitTests/runit.Module.client.package.R: remove code that has been commented for ages * include/Rcpp/DottedPair.h: better use of the RObject constructor * include/Rcpp/vector/Vector.h: better use of the RObject constructor * include/Rcpp/vector/Matrix.h: Using update_matrix instead of the virtual update which has been removed. * include/Rcpp/Module.h : more careful about types and constructors * include/Rcpp/XPtr.h: more debugging * include/Rcpp/macros/debug.h: more debugging macros * include/Rcpp/module/class_Base.h: using classes instead of SEXP * include/Rcpp/module/class.h: using classes instead of SEXP * include/Rcpp/generated/Language__ctors.h : using update_language_object instead of the virtual update which has been removed. * include/Rcpp/api/meat/Vector.h : using update_vector instead of the virtual update that has been removed, more debugging * include/Rcpp/api/meat/Matrix.h : more debugging, using update_matrix instead of the virtual update which has been removed * include/Rcpp/Language.h : added update_language_object to replace update which was virtual * include/Rcpp/RObject.h : only keep declarations here 2012-12-21 Dirk Eddelbuettel * DESCRIPTION: Release 0.10.2 * inst/NEWS.Rd: Release 0.10.2 * inst/include/Rcpp/config.h: Release 0.10.2 * debian/*: Similarly updated for new release to Debian * inst/doc/unitTests/Rcpp-unitTests.R: added one more variable so that unitTest vignette can be built against new sourceCpp based files 2012-12-15 Romain Francois * include/Rcpp/exceptions.h: added exception_to_r_condition * exceptions.cpp: new implementation of forward_exception_to_r that directly calls stop rather than a function in Rcpp * R/exceptions.R: remove code rendered useless * src/Rcpp_init.c: less exports * src/api.cpp: less going back to the R side 2012-12-14 Romain Francois * include/Rcpp/sugar/functions/clamp.h: clamp was pretty wrong * unitTests/runit.sugar.R: new unit test for clamp * unitTests/cpp/sugar.cpp: new unit test for clamp 2012-12-12 JJ Allaire * src/Attributes.R: always generate new dynlib file for rebuild=TRUE * src/attributes.cpp: set svn:eol-style to native; always generate new dynlib file for rebuild=TRUE; don't declare attributes constant strings extern 2012-12-12 Romain Francois * include/Rcpp/Symbol.h: c_str becomes const and added Symbol::operator==(const char* ) 2012-12-11 JJ Allaire * R/Attributes.R: always print output when shared library is not created * src/attributes.cpp: consolidate attributes into single file * src/Attributes.cpp: consolidate attributes into single file * src/AttributesGen.h: consolidate attributes into single file * src/AttributesGen.cpp: consolidate attributes into single file * src/AttributesParser.h: consolidate attributes into single file * src/AttributesParser.cpp: consolidate attributes into single file * src/AttributesTypes.h: consolidate attributes into single file * src/AttributesUtil.h: consolidate attributes into single file * inst/NEWS.Rd: additional notes on changes to attributes * inst/doc/Rcpp-attributes/Rcpp-attributes.Rnw: update for changes to attributes in 0.10.2 2012-12-11 Romain Francois * include/Rcpp/String.h: missing operator +=( const StringProxy& ) * include/Rcpp/sugar/functions/strings/strings.h : string sugar functions * include/Rcpp/sugar/functions/strings/collapse.h : collapse function, implementing paste( . , collapse = "" ) * include/Rcpp/complex.h: operator==( Rcomplex, Rcomplex ) * src/api.cpp: implementation of operator==(Rcomplex, Rcomplex) * include/Rcpp/vector/Vector.h: added const version of operator[](string) 2012-12-10 JJ Allaire * R/Attributes.R: warn when depends attribute is not matched with required entries in package description; add Rtools to PATH for duration of sourceCpp * src/Attributes.cpp: warn when depends attribute is not matched with required entries in package description * src/AttributesGen.cpp: prune unnecessary includes from RcppExports * src/Timer.cpp: fix timer build issues on windows 2012-12-10 Romain Francois * src/api.cpp: import r_cast.cpp, coerce.cpp, RcppCommon.cpp and debugging.cpp content * include/platform/compiler.h: put here compiler specific deduction things * src/internal.h: new header to host function declarations for routines that are not exported into Rcpp.h * src/Rcpp_init.c: export capabilities (renamed rcpp_capabilities) * include/Rcpp/traits/traits.h: master file for all traits includes * include/Rcpp/macros/macros.h: master file for all macros includes * include/Rcpp/DataFrame.h: just have declaration for DataFrame * include/Rcpp/Benchmark/Timer.h: move it into the Rcpp:: namespace * include/Rcpp/cache.h: clean * include/Rcpp/Reference.h : field was declared const and should not be. added a ConstFieldProxy class for read only use 2012-12-09 Romain Francois * src/api.cpp: merge many .cpp files here to reduce compile time * src/barrier.cpp: merge with cache.cpp to reduce compile time * include/Rcpp/exceptions.h: drop forward_uncaught_exceptions_to_r * src/exceptions.cpp: drop forward_uncaught_exceptions_to_r * src/Date.cpp: merge all Date related files 2012-12-08 Romain Francois * src/Timer.cpp: implementation of Timer * include/Rcpp/Benchmark/Timer.h: internal performance timer, based on the code from the microbenchmark package * include/Rcpp/api/meat/Matrix.h: move more in Matrix meat * src/Date.cpp: import the code from posixt.cpp 2012-12-07 JJ Allaire * src/AttributesGen.cpp: use __ prefix for variables in generated code; add RNGScope for attribute exported functions. 2012-12-07 Romain Francois * src/random.cpp: instantiations of random generators here * include/Rcpp/stats/random/random.h: only have declarations of random generators here. Rework the Generator template so that it inherits RNGScope to provide automatic calls to GetRNGstate and PutRNGstate 2012-12-06 JJ Allaire * R/Attributes.R: revert DOS newlines; use new shared library name for each rebuild in sourceCpp * src/Attributes.cpp: revert DOS newlines; define RCPP_NO_SUGAR; use new shared library name for each rebuild in sourceCpp * src/AttributesGen.cpp: revert DOS newlines; convert 'try-error' to exception for C++ interfaces * src/AttributesGen.h: 'try-error' to exception for C++ interfaces * src/AttributesParser.cpp: revert DOS newlines; define RCPP_NO_SUGAR * src/RcppCommon.cpp: conversion from exeption to 'try-error' * include/Rcpp/exceptions.h: conversion from exeption to 'try-error' * include/Rcpp/preprocessor.h: add END_RCPP_RETURN_ERROR macro to convert exceptions to 'try-error' objects * include/Rcpp/iostream/Rstreambuf.h: revert DOS newlines * DESCRIPTION: bump version to 0.10.1.5 2012-12-06 Dirk Eddelbuettel * src/exceptions.cpp: Added include of cstdlib to compile 2012-12-06 Romain Francois * include/Rcpp/api/meat/Environment.h: meat for Environment * src/exceptions.cpp: include config so that it knows that Rcpp can demangle * unitTests/runit.environments.R: using sourceCpp * src/Environment.cpp: less includes * src/Evaluator.cpp: less includes 2012-12-05 Romain Francois * src/cache.cpp: added get_cache * include/Rcpp/hash/IndexHash.h: use a cached integer vector for the hash table payload. The cache vector increases as needed. * include/Rcpp/iostream/Rostream.h: make Rostream a template * include/Rcpp/iostream/Rstreambuf.h: make Rstreambuf a template * src/AttributesGen.cpp : include exceptions.h which was included implicitely by Rostream.h before * include/Rcpp/macros/debug.h : factor out the debugging macros * include/Rcpp/api/meat/RObject.h : only declare templates that use as and wrap. they are implemented later in the meat directory * include/Rcpp/api/meat/meat.h: directory containing implementations of templates using as and wrap * include/RcppCommon.h: removed unused test_named * src/RcppCommon.cpp: removed unused test_named * src/r_cast.cpp: less includes * src/posixt.cpp: less includes 2012-12-05 JJ Allaire * src/Attributes.R: direct hookup of external ptr in sourceCpp * src/Attributes.cpp: use code generation for compileAttributes; direct hookup of external ptr in sourceCpp * src/AttributesGen.cpp: use code generation for compileAttributes; direct hookup of external ptr in sourceCpp * src/AttributesGen.h: use code generation for compileAttributes; direct hookup of external ptr in sourceCpp * src/Module.cpp: fix typo in GetCppCallable * include/Rcpp/iostream/Rstreambuf.h: add cstdio include * DESCRIPTION: bump version to 0.10.1.4 2012-12-04 Dirk Eddelbuettel * inst/include/Rcpp/hash/hash.h: Added include inttypes.h for intptr_t 2012-12-04 JJ Allaire * R/Attributes.R: use simple code generation for sourceCpp * src/Attributes.cpp: move generators into their own source file; use simple code generation for sourceCpp * src/AttributesGen.cpp: move generators into their own source file; add C++ default argument parsing * src/AttributesGen.h: move generators into their own source file * src/AttributesParser.cpp: move generators into their own source file * src/AttributesParser.h: move generators into their own source file * src/AttributesTypes.h: new header for attributes types * src/AttributesUtil.h: new header for attributes utilities 2012-12-04 Romain Francois * include/Rcpp/hash/hash.h: new implementation of IndexHash, based on Simon's fastmatch package * include/Rcpp/sugar/functions/match.h: more efficient version of match using new IndexHash * include/Rcpp/sugar/functions/unique.h: more efficient version of unique and in using IndexHash * include/Rcpp/sugar/functions/duplicated.h: more efficient version of duplicated and in using IndexHash * include/Rcpp/sugar/functions/self_match.h: more efficient version of self_match and in using IndexHash * include/Rcpp/vector/Vector.h: more efficiently create Vector from sugar expression that are already vectors, i.e. grab the SEXP 2012-12-03 Dirk Eddelbuettel * inst/include/RcppCommon.h: Applied patch kindly contributed by Yan Zhou which provides a number of more refined definition for support of both the C++11 standard and different compilers * inst/include/Rcpp/internal/wrap.h: Idem * inst/include/Rcpp/sugar/sugar.h: Idem * inst/include/Rcpp/traits/comparator_type.h: Idem * inst/include/Rcpp/vector/Vector.h: Idem * inst/unitTests/runit.wrap.R: Idem * src/RcppCommon.cpp: Idem * DESCRIPTION: Increase minor dev. version once more 2012-12-03 JJ Allaire * R/Attributes.R: added function to check whether R development tools are currently installed 2012-12-03 Romain Francois * src/Module.cpp: move BEGIN_RCPP/END_RCPP to Module__invoke * src/coerce.cpp: added coerce_to_string implementations * include/RcppCommon.h : nicer formatting for RCPP_DEBUG_*, now up to RCPP_DEBUG_5 * include/Rcpp/vector/Vector.h: debugging * include/Rcpp/String.h: The String class * include/Rcpp/as.h: support for String * include/Rcpp/vector/converter.h : support for String * include/Rcpp/vector/string_proxy.h: support for String * include/Rcpp/internal/wrap.h : support for String * include/Rcpp/internal/r_coerce.h: support for String * include/Rcpp/sugar/functions/sapply.h: debugging * include/Rcpp/traits/wrap_type_traits.h: support for String * include/Rcpp/traits/r_type_traits.h: support for String * unitTests/cpp/String.cpp : unit tests for String * unitTests/runit.String.R: unit test for String * include/Rcpp/sugar/sets.h: support for String 2012-12-01 Dirk Eddelbuettel * inst/include/RcppCommon.h: Applied patch by Yan Zhou to add support for clang++ with libc++, and Intel's icpc when std=c++11 2012-11-29 Romain Francois * unitTests/runit.DataFrame.R: using sourceCpp * include/Rcpp/vector/Matrix.h: fix yet another const correctness issue 2012-11-27 Dirk Eddelbuettel * inst/include/Rcpp/iostream/Rostream.h: Check before deleting buf 2012-11-26 Dirk Eddelbuettel * DESCRIPTION: Release 0.10.1 * inst/NEWS.Rd: Release 0.10.1 * inst/include/Rcpp/config.h: Release 0.10.1 * debian/*: Similarly updated for new release to Debian * DESCRIPTION: Added paragraph about Rcpp attributes * debian/control: Idem 2012-11-26 Romain Francois * include/Rcpp/Module.h: comment out the unused and unuseable converter overload. * include/Rcpp/sugar/functions/pmin.h: be consistent about how the pmin_op helper struct is defined (always a struct). * include/Rcpp/sugar/functions/pmax.h: same for pmax * include/Rcpp/stats/random/rbeta.h: fixed constructor issue * unitTests/runit.sugar.R: rework to use sourceCpp instead of inline * include/Rcpp/vector/Vector.h: added ctor to deal with SingleLogicalResult * include/Rcpp/vector/Matrix.h: another const correctness fix 2012-11-25 JJ Allaire * R/Attributes.R: use echo = TRUE for sourceCpp R code chunks * src/Module.cpp: BEGIN_RCPP/END_RCPP in InternalFunction_invoke * inst/doc/Rcpp-attributes/Rcpp-attributes.Rnw: add documentation on correct semantics for signaling error conditions 2012-11-24 JJ Allaire * inst/doc/Rcpp-attributes/Rcpp-attributes.Rnw: expand discussion of binary compatibility issues. 2012-11-23 Romain Francois * src/AttributesParser.cpp : attempt to fix build issue on r-forge * include/Rcpp/DataFrame.h: nrows() method * include/Rcpp/vector/RangeIndexer.h: now derives from VectorBase so that we can use it in sugar. 2012-11-22 JJ Allaire * include/exceptions.h: new exception constructor / stop function * src/exceptions.cpp: new exception constructor / stop function * include/RcppCommon.h: new exception constructor / stop function 2012-11-22 Romain Francois * include/Rcpp/iostream.h: use delete rdbuf() as recommended by Martyn Plummer * include/Rcpp/sugar/functions/self_match.h: self_match, giving a functionality similar to match( x, unique(x) ) * src/coerce.cpp: added coercion to STRSXP * include/Rcpp/internal/r_coerce.h : added r_coerce<.,STRPSXP> * include/Rcpp/sugar/functions/table.h: sugar table * include/Rcpp/sugar/functions/duplicated.h: sugar duplicated 2012-11-21 JJ Allaire * R/Rcpp.package.skeleton.R: add 'attributes' and 'cpp_files' parameters to Rcpp.pacakge.skeleton * inst/skeleton/rcpp_hello_world_attributes.cpp: version of hello world that uses attributes * man/Rcpp.package.skeleton.Rd: doc updates * inst/doc/Rcpp-attributes/Rcpp-attributes.Rnw: doc updates * DESCRIPTION: bump version to 0.10.0.3 2012-11-21 Dirk Eddelbuettel * inst/examples/Misc/piBySimulation.r: New simple example using Rcpp attributes in a 'compute pi by simulation in R and C++' exercise * inst/examples/Misc/piSugar.cpp: Corresponding C++ variant 2012-11-21 Romain Francois * include/Rcpp/iostream/Rostream.h: Fix warning given by -Wreorder * include/Rcpp/sugar/functions/mapply/mapply_3.h: more flexible * include/Rcpp/vector/Vector.h: More efficient assign_object, which is used in the assignment operator * include/Rcpp/sugar/functions/clamp.h: added clamp function 2012-11-20 JJ Allaire * src/Attributes.cpp: ensure dynlib cache state is always updated * inst/doc/Rcpp-attributes/Rcpp-attributes.Rnw: elaborate further on exporting C++ interfaces from packages 2012-11-20 Romain Francois * include/Rcpp/iostream/Rostream.h: change order of initiaization in ctor. was making solaris compiler unhappy * include/Rcpp/stats/random/rnorm.h: not using function pointer generators, as this generates (anachronisms) warning on solaris. Also, this version is more efficient since there is no need to dereference the function pointer 2012-11-19 JJ Allaire * src/AttributesParser.h: support for argument default values * src/AttributesParser.cpp: support for argument default values * src/Attributes.cpp: support for argument default values * man/exportAttribute.Rd: documentation updates * man/compileAttributes.Rd: documentation updates * man/sourceCpp.Rd: documentation updates * inst/doc/Rcpp-attributes/Rcpp-attributes.Rnw: add documentation on changes to attributes in 0.10.1 2012-11-18 JJ Allaire * R/Attributes.R: sourceCpp embedded R code; print warning if no export attributes are found in source file * src/AttributesParser.h: sourceCpp embedded R code * src/AttributesParser.cpp: sourceCpp embedded R code; new scheme for mixing user and generated C++ headers * src/Attributes.cpp: sourceCpp embedded R code; include above generated modules * man/sourceCpp.Rd: documentation updates * man/interfacesAttribute.Rd: documentation updates 2012-11-18 Romain Francois * include/Rcpp/vector/converter.h: allow CharacterVector::create( NA_STRING ) * include/Rcpp/sugar/functions/mapply/mapply_2.h: more cases in mapply 2012-11-17 Dirk Eddelbuettel * inst/doc/Rcpp-modules/Rcpp-modules.Rnw: Change free function name 'range' to 'uniformRange' to protect it from getting clobbered by the new sugar function range. 2012-11-17 Romain Francois * include/Rcpp/internal/wrap_end.h: have calls to wrap as late as possible so that they "see" all (potentially user defined) overloads of wrap. * include/Rcpp/internal/SEXP_Iterator.h: directly iterate over SEXP. const iterator for List and ExpressionVector 2012-11-16 Romain Francois * include/Rcpp/vector/Vector.h : added static methods Vector::is_na and Vector::get_na * include/Rcpp/sugar/functions/setdiff.h: initial version of setdiff and intersect * include/Rcpp/vector/MatrixColumn.h: dealing with const-ness * include/Rcpp/vector/MatrixRow.h: dealing with const-ness * include/Rcpp/vector/traits.h: dealing with const-ness * include/Rcpp/vector/proxy.h: dealing with const-ness * include/Rcpp/vector/MatrixBase.h: dealing with const-ness * include/Rcpp/vector/Vector.h: dealing with const-ness 2012-11-15 Romain Francois * include/Rcpp/sugar/logical/SingleLogicalResult.h : apply patch suggested by Karl Millar * R/Attributes.R: new R function areMacrosDefined * man/evalCpp.Rd: documentation update * include/Rcpp/sugar/functions/match.h : generic version of match * include/Rcpp/sugar/tools/iterator.h: help iterator that helps writing match in terms of stl algorithms. * include/Rcpp/vector/Vector.h: class no_init that can be used to create an uninitialized vector. e.g. IntegerVector out = no_init(10) ; * include/Rcpp/sugar/functions/unique.h: sugar version of %in% using unordered_set * include/Rcpp/sugar/functions/minmax.h: min, max, and range 2012-11-14 JJ Allaire * src/Attributes.cpp: create sourceCpp context list using single statement 2012-11-14 Dirk Eddelbuettel * inst/announce/ANNOUNCE-0.10.0.txt: Fix typo spotted by Martin Morgan in announcement mail 2012-11-14 Romain Francois * include/Rcpp/internal/wrap.h: fix for wrap( std::complex ) * include/Rcpp/module/class_Base.h: factored out from Module.h * R/00_classes.R: the C++Class gains the parents slot to hold information about parent classes of the class * src/Module.cpp : The CppClass constructor fills the parents slot of C++Class 2012-11-13 Dirk Eddelbuettel * DESCRIPTION: Release 0.10.0 * inst/NEWS: Release 0.10.0 * inst/include/Rcpp/config.h: Release 0.10.0 * debian/*: Similarly updated for new release to Debian 2012-11-13 Romain Francois * include/Rcpp/as.h: as * include/Rcpp/internal/wrap.h : wrap( enum ) * include/Rcpp/traits/wrap_type_traits.h: trait to help wrap( enum ) * include/Rcpp/traits/r_type_traits.h: trait to help as * include/Rcpp/module/macros.h: macros RCPP_EXPOSED_ENUM to help as/wrap of enums 2012-11-12 Dirk Eddelbuettel * inst/announce/ANNOUNCE-0.10.0.txt: Announcement draft 2012-11-12 JJ Allaire * inst/doc/Rcpp-attributes/*: New vignette 2012-11-12 Romain Francois * include/Rcpp/vector/Vector.h : adding const_iterator and associated begin() and end() methods * include/Rcpp/vector/Matrix.h : idem 2012-11-11 JJ Allaire * src/Attributes.cpp: fully qualify _ in generated code 2012-11-11 Romain Francois * include/Rcpp/iostream/Rstreambuf.h: implementing sync() so that flush works * src/Rstreambuf.cpp: implementation * src/Rostream.cpp : added Rcerr that forwards to REprintf 2012-11-10 JJ Allaire * R/Attributes.R: ensure function definitions are never stale * src/Attributes.cpp: add optional hook for inclusion of package types * examples/Attributes/Export.cpp: example use of Rcpp::export * examples/Attributes/Depends.cpp: example use of Rcpp::depends * examples/Attributes/sourceCpp.R: example use of sourceCpp() * examples/Attributes/cppFunction.R: example use of cppFunction() 2012-11-09 Romain Francois * R/Attributes.R: Passing verbose from evalCpp to cppFunction * include/RcppCommon.h: include instead of * include/Rcpp/vector/CharacterVectorExtractionIterator.h: iterator class to quickly iterate over the content of a CharacterVector. The content that is iterated over is to be considered read-only. 2012-11-08 JJ Allaire * R/Attributes.R: special sourceCpp handling for file within the src directory of a package; use .h as suffix for generated headers * src/Attributes.cpp: add information on arguments to Rcpp module; use inline rather than static linkage for generated C++ shims; generated headers: add header guard and use .h suffix; * man/cppFunction.Rd: update documentation * man/sourceCpp.Rd: update documentation * man/evalCpp.Rd: update documentation * man/exportAttribute.Rd: update documentation * man/interfacesAttribute.Rd: update documentation 2012-11-08 Romain Francois * R/Module.R: Module functions taking no arguments don't get the ellipsis anymore in their formals * src/Module.cpp: passing up the number of arguments of the function * R/Attributes.R: added evalCpp * man/evalCpp.Rd: documentation for evalCpp 2012-11-07 JJ Allaire * R/Attributes.R: derive depends from package LinkingTo; change sourceCpp plugin parameter to depends and respect Rcpp::interfaces generated include files * src/Attributes.cpp: validate exported C++ functions before calling; use static rather than inline for stubs to avoid call-site bloat; improved error message when package hpp already exists; import Rcpp namespace into package shim namespace * src/AttributesParser.h: add signature and isHidden methods * src/AttributesParser.cpp: add signature and isHidden methods * src/exceptions.cpp: add function_not_exported exception * include/Rcpp/exceptions.h: add function_not_exported exception * man/cppFunction.Rd: update documentation * man/sourceCpp.Rd: update documentation * man/compileAttributes.Rd: update documentation * man/dependsAttribute.Rd: update documentation * man/exportAttribute.Rd: update documentation * man/interfacesAttribute.Rd: update documentation 2012-11-07 Romain Francois * src/Language.cpp: Language gains a fast_eval method, without the whole try/catch * src/barrier.cpp: function char_nocheck to avoid the check in using CHAR * include/Rcpp/sugar/functions/unique.h: sugar unique and sort_unique using unordered_set (perhaps we could use it from c++11). 2012-11-06 JJ Allaire * R/Attributes.R: tweak whitespace in verbose mode * src/AttributesParser.h: support for interfaces attribute * src/AttributesParser.cpp: support for interfaces attribute * src/Attributes.cpp: support for interfaces attribute; refactor code generators; use single module for exports; return list of updated files from compileAttributes * src/Module.cpp: add package parameter to GetCppCallable * include/Rcpp/Module.h: add package parameter to GetCppCallable * man/compileAttributes.Rd: documentation updates 2012-11-05 Romain Francois * include/Rcpp/Module.h: added class CppInheritedProperty to handle inherited properties * include/Rcpp/module/class.h: implemented inheritance of properties 2012-11-05 JJ Allaire * R/Attributes.R: use modules for attribute code generation * src/Attributes.cpp: use modules for attribute code generation * src/AttributesParser.h: use modules for attribute code generation * src/AttributesParser.cpp: use modules for attribute code generation 2012-11-04 Dirk Eddelbuettel * tests/doRUnit.R: In "development releases" (such as 0.9.15.5) we now default to setting the required CRAN-test-workaround-kludge "RunAllRcppTests" to "yes" as a default -- but not for actual releases (with versions such as 0.9.15) 2012-11-04 Romain Francois * include/Rcpp/module/CppFunction.h: fixed module bug (virtual function was not defined) 2012-11-03 JJ Allaire * Use CLINK_CPPFLAGS rather than PKG_CXXFLAGS for LinkingTo include directories (identical behavior to inline) 2012-11-03 Romain Francois * include/Rcpp/sugar/functions/which_min.h : sugar which.min * include/Rcpp/sugar/functions/which_max.h : sugar which.max * include/Rcpp/module/Module.h : added get_function_ptr which returns the pointer of the target function as a DL_FUNC 2012-11-02 Dirk Eddelbuettel * inst/unitTests/runit.rmath.R: More tests added 2012-11-02 Romain Francois * include/Rcpp/module/CppFunction.h : factored CppFunction in its own file and added the get_function_ptr virtual method. added documentation * include/Rcpp/module/Module_generated_CppFunction.h: implementation of get_function_ptr in classes that derive CppFunction * src/Module.cpp: s/get_function_ptr/get_function/ * include/Rcpp/module/Module.h : factored out and documented. s/get_function_ptr/get_function/ 2012-11-01 Dirk Eddelbuettel * inst/unitTests/runit.rmath.R: New unit test file added 2012-11-01 JJ Allaire * R/Attributes.R: change 'envir' param to 'env' for consistency with the interface of loadModule * man/sourceCpp.Rd: documentation updates * man/cppFunction.Rd: documentation updates 2012-11-01 Romain Francois * include/Rcpp/sugar/logical/or.h : implementing x | y where x and y are Logical sugar expressions * include/Rcpp/sugar/logical/and.h : implementing x & y where x and y are Logical sugar expressions 2012-10-31 JJ Allaire * R/Attributes.R: add cppFunction for inline-style definitions; change 'local' param to (more clear and explicit) 'envir' param; change 'show.output' param to 'showOutput'; add parameter to onBuild hook to indicate if the source was from a 'code' parameter * src/Attributes.cpp: factored parser into it's own file * src/AttributesParser.h: attributes parser header * src/AttributesParser.cpp: attributes parser implementation * man/sourceCpp.Rd: documentation updates * man/compileAttributes.Rd: documentation updates * man/cppFunction.Rd: documentation for cppFunction * NAMESPACE: export for cppFunction 2012-10-31 Romain Francois * include/Rcpp/module/class.h: factored out of Module.h which started to be too big. class_ gains a derives( "Parent" ) for so that the class inherits method that were exposed by its parent. * include/Rcpp/Module.h: template class CppInheritedMethod for implementing inherited method * src/Module.cpp: get_class_pointer implementation 2012-10-30 Dirk Eddelbuettel * inst/include/Rcpp/Rmath.h: Finalised adding Rmath functions 2012-10-30 JJ Allaire * R/Attributes.R: new functions sourceCpp and compileAttributes that use C++11 style attributes (embedded in comments) to perform automatic generation of boilerplate marshaling code * src/Attributes.cpp: support functions for attribute handling * include/Rcpp/exceptions.h: file io exception classes * man/sourceCpp.Rd: documentation for sourceCpp * man/compileAttributes.Rd: documentation for compileAttributes * man/exportAttriute.Rd: documentation for export attribute * man/dependsAttribute.Rd: documentation for depends attribute * NAMESPACE: exports for sourceCpp and compileAttributes 2012-10-30 Romain Francois * include/Rcpp/as.h: new bare_as to simplify uses of as * include/Rcpp/module/Module_generated_Factory.h: using bare_as * R/Module.R: promoting the show method * src/Attributes.cpp: remove g++ warning (int != size_t) 2012-10-29 Dirk Eddelbuettel * inst/include/Rcpp/Rmath.h: More Rmath functions 2012-10-29 Romain Francois * R/Module.R: Taking care of a check warning * include/Rcpp/module/macros.h: adding RCPP_EXPOSED_CLASS_NODECL * include/Rcpp/Module.h: introducing converter to facilitate conversion between classes. * R/Module.R: Methods registered internally with converter will generate the appropriate "as" S4 method. 2012-10-28 Dirk Eddelbuettel * inst/include/Rcpp/Rmath.h: Beginnings of a namespave 'R' around Rmath functions so that Rcpp users can call the (scalar) functions R::pnorm() which helps with adapting or integrating programs writting outside of Rcpp 2012-10-27 Dirk Eddelbuettel * inst/include/Rcpp/module/macros.h: Add forward declaration of class to macro 'RCPP_EXPOSED_CLASS' 2012-10-25 Romain Francois * include/Rcpp/internal/wrap.h: wrapping module object with the help of the RCPP_EXPOSED_CLASS * include/Rcpp/module/macros.h: improving the macros so that wrap and as are covered * include/Rcpp/traits/wrap_type_traits.h: wrapping module objects * include/Rcpp/module/Module_generated_class_factory.h : factories are alternatives to constructors. For now, we can expose as factories any free function that returns a pointer to the target class * include/Rcpp/module/Module_generated_Factory.h : factories * include/Rcpp/Module.h: exposing factories 2012-10-24 Romain Francois * include/Rcpp/traits/is_pointer.h: traits to identify if a type is a pointer * include/Rcpp/traits/un_pointer.h: traits to remove a pointer * include/Rcpp/module/Module_generated_get_return_type.h : handle pointer return types * include/Rcpp/config.h: define RCPP_HAS_DEMANGLING for MAC OS <= 10.7 (up to Lion) * include/Rcpp/module/macros.h: new file that contains macro to help with modules * include/Rcpp/traits/r_type_traits.h : new tag to allow as where T is some class exposed in a module * include/Rcpp/as.h : implementation of as in that case 2012-10-23 Romain Francois * include/Rcpp/internal/wrap.h: new function module_wrap used internally by modules * include/Rcpp/module/Module_generated_CppMethod.h: using module_wrap and simplified the code (removing 35% of the generated code now rendered useless) * include/Rcpp/module/Module_generated_PointerCppMethod.h: using module_wrap and simplified the code * include/Rcpp/traits/module_wrap_traits.h : new file. helping implementation of module_wrap * R/00_classes.R: C++OverloadedMethods gets the field "nargs" to capture the number of arguments * R/01_show.R: cleanup * R/Module.R: handle the case where a method has no argument. In that case, the ellipsis does not end up in the formals * include/Rcpp/Module.h: exposing nargs in C++OverloadedMethods 2012-10-22 Romain Francois * include/Rcpp/as.h: support for as<> for module objects * include/Rcpp/Module.h: idem * include/Rcpp/traits/r_type_traits.h: idem * src/Module.cpp: idem 2012-10-21 Romain Francois * include/Rcpp/traits/wrap_type_traits.h: support for wrapping module objects * include/Rcpp/internal/wrap.h : idem * include/Rcpp/Module.h: idem 2012-10-13 Dirk Eddelbuettel * DESCRIPTION: Release 0.9.15 * inst/NEWS: Release 0.9.15 * inst/include/Rcpp/config.h: Release 0.9.15 * debian/*: Similarly updated for new release to Debian 2012-10-08 Dirk Eddelbuettel * src/exceptions.cpp: Additional PROTECT for parsing exception messages before returning them to R, from a suggestion by Ben North 2012-10-07 Dirk Eddelbuettel * inst/unitTests/runit.Date.R: Added a few more tests 2012-10-06 Dirk Eddelbuettel * inst/include/Rcpp/Date.h: Dates are now represented as doubles, also added accessor functions for double and retained int * src/Date.cpp: Convert from SEXP to double, added constructor from double and added checks for 'finite' representation before converting to 'struct tm' adding support for NA, NaN and Inf * src/DateVector.cpp: Instantiate Date types as double * src/Datetime.cpp: Also added support for NA, NaN and Inf values * inst/unitTests/runit.Date.R: A few additional tests 2012-10-05 Dirk Eddelbuettel * src/exceptions.cpp: Applied patch by Martin Morgan which untangles the clang includes driven by version, and uses direct tests for presence of the header file * inst/include/RcppCommon.h: No longer define CLANG version meta variables as we can directly include the relevant header 2012-09-30 Dirk Eddelbuettel * DESCRIPTION: Release 0.9.14 * inst/NEWS: Release 0.9.14 * inst/include/Rcpp/config.h: Release 0.9.14 * debian/*: Similarly updated for new release to Debian 2012-09-08 Dirk Eddelbuettel * inst/unitTests/runit.sugarOps.R: More sugar Ops unit tests 2012-09-07 Dirk Eddelbuettel * inst/unitTests/runit.sugarOps.R: (Incomplete) beginnings of new unit test file for sugar operations on vectors and matrices 2012-09-07 Romain Francois * inst/include/Rcpp/sugar/functions/sign.h: Sign gets a SEXP operator 2012-09-03 Dirk Eddelbuettel * inst/include/Rcpp/sugar/functions/math.h: Added new sugar function trunc(), round() and signif() * inst/unitTests/runit.sugar.R: Added unit tests for these 2012-09-01 Dirk Eddelbuettel * inst/doc/Makefile: The 'all' target is now empty to prevent autobuilders such as R-Forge from falling over 2012-07-23 Dirk Eddelbuettel * R/bib.R: Trim the trailing ".bib" from the generated bibtex filename as Windows adds one anyway leading to two and an error 2012-07-21 Dirk Eddelbuettel * inst/include/Rcpp/Module.h (Rcpp): Corrected typo / incomplete reference in finalizer use 2012-07-06 Dirk Eddelbuettel * inst/include/Rcpp/config.h: In order to not attempt to include exception_defines.h if on OS X (as the clang runtime may not have predictable access to g++ headers providing these), do not define RCPP_HAS_DEMANGLING which is used in src/exceptions.cpp 2012-06-28 Dirk Eddelbuettel * DESCRIPTION: Release 0.9.13 * inst/NEWS: Release 0.9.13 * inst/include/Rcpp/config.h: Release 0.9.13 * debian/*: Similarly updated for new release to Debian * tests/doRUnit.R: Updated, added (by default commented-out) setting to enforce all tests to run, added standard copyright headers noting heritage off work by Martin Maechler and Gregor Gorjanc * inst/unitTests/runTests.R: Only check environment variable to run all tests if it is not already set (to cooperate with doRUnit.R) 2012-06-27 Dirk Eddelbuettel * src/Environment.cpp: Default ctor initializes its RObject with R_GlobalEnv; SEXP constructor does not use a default arg as it tests * inst/include/Rcpp/Environment.h: Corresponding change * inst/include/RcppCommon.h: #define(s) for before/after clang++ 3.0 * src/exceptions.cpp: Added support for clang++ (>= 3.0) which (just like g++ 4.6 or later) needs bits/exceptions_defines * inst/unitTests/runit.modref.R: re-activated * inst/unitTests/runit.Module.client.package.R: re-activated core * inst/unitTests/runit.modref.R: Run only if RunAllCppTests var set * inst/unitTests/runit.Module.client.package.R: Idem * inst/unitTests/runit.support.R: Idem * inst/unitTests/runit.rcout.R: Idem * inst/unitTests/runit.environments.R: Idem * inst/unitTests/runit.Language.R: Idem * inst/unitTests/runit.Function.R: Idem 2012-06-23 Dirk Eddelbuettel * DESCRIPTION: Release 0.9.12 * inst/NEWS: Release 0.9.12 * inst/include/Rcpp/config.h: Release 0.9.12 * debian/*: Similarly updated for new release to Debian * src/Environment.cpp: Remove empty constructor which is redundant since fix in rev3592 with default SEXP value of R_GlobalEnv * inst/include/Rcpp/Environment.h: Idem * inst/unitTests/runTests.R (allTests): Command-line flag --allTests sets an environment variable indicating that all tests should run * inst/unitTests/runit.Module.R: Run only if RunAllCppTests var set * inst/unitTests/runit.Module.client.package.R: Idem * inst/unitTests/runit.client.package.R: Idem * inst/unitTests/runit.XPtr.R: Idem * inst/unitTests/runit.macros.R: Idem * inst/doc/unitTests/Rcpp-unitTests.R: Ensure Rcpp-unitTests vignette is built with RunAllCppTests flag set * cleanup: Also clean in inst/unitTests/testRcppClass/src * DESCRIPTION: Set Maintainer: to edd@debian.org as CRAN prefers to receive upload email from the same address the Maintainer field 2012-06-22 Dirk Eddelbuettel * DESCRIPTION: Release 0.9.11 * inst/NEWS: Release 0.9.11 * inst/include/Rcpp/config.h: Release 0.9.11 * debian/*: Similarly updated for new release to Debian * DESCRIPTION: Increased Depends to R (>= 2.15.1) 2012-06-21 Dirk Eddelbuettel * inst/doc/Rcpp-modules/Rcpp-modules.Rnw: Updated to reflect use under R 2.15.1 * inst/skeleton/zzz.R: Idem 2012-06-20 Dirk Eddelbuettel * R/loadRcppModules.R: Use lib.loc= argument on packageDescription() as suggested by Kurt, and fetch libname from enclosing environment * DESCRIPTION: Typo and grammar fixes with thanks to Kurt and Doug 2012-05-25 Dirk Eddelbuettel * inst/skeleton/zzz.R: Added new 'evalqOnLoad()' call for R-devel, currently commented out 2012-05-24 Dirk Eddelbuettel * inst/skeleton/Num.cpp: Added to Rcpp.package.skeleton(); will be added when module=TRUE in call * inst/skeleton/stdVector.cpp: Idem * inst/unitTests/testRcppModule/src/rcpp_module.cpp: added more comments, added copyright header, corrected output of example functions by not escaping "backslash-n" twice * inst/unitTests/testRcppModule/src/stdVector.cpp: added some comments, added copyright header * inst/unitTests/testRcppModule/src/Num.cpp: Idem * inst/unitTests/runit.Module.client.package.R: Added four simple tests for Rcpp Modules * inst/doc/Rcpp-modules/Rcpp-modules.Rnw: Some extensions and clarifications added 2012-05-13 Dirk Eddelbuettel * inst/include/Rcpp/iostream/Rostream.h: Added Rstreambuf.h include as per rcpp-devel discussion with Alexey Stukalov 2012-05-09 Dirk Eddelbuettel * inst/doc/Rcpp-FAQ/Rcpp-FAQ.Rnw: Expanded R CMD SHLIB discussion after suggested changes from SC8ren HC8jsgaard; also expanded compiler section a little mentioning clang/clang++ and icc. 2012-05-02 Dirk Eddelbuettel * src/Environment.cpp: Move one default argument to Environment.h * src/Function.cpp: Move one default argument to Function.h * inst/THANKS: Thanks to Anirban Mukherjee for these two changes 2012-04-28 John M Chambers * R/RcppClass.R: use globalVariables() from R 2.15.1 (with exists() test to no break older versions) to declare C++ fields and methods * inst/unitTests/testRcppClass/R/load.R: test use 2012-04-22 Dirk Eddelbuettel * src/debugging.cpp: Expanded 'if defined()' test to included Cygwin thanks to a patch submitted by Dario Buttari 2012-04-19 Dirk Eddelbuettel * src/Evaluator.cpp: errorOccuredSym never used and commented out 2012-04-18 John M Chambers * R/RcppClass.R: New version of setRcppClass, allowing R classes to extend C++ classes used via Rcpp modules * R/loadModule.R: New function, replaces uses of .onLoad() * man/*: Added/updated corresponding documentation 2012-04-07 Romain Francois * inst/include/Rcpp/vector/Vector.h: bug fix. reported on Rcpp-devel http://comments.gmane.org/gmane.comp.lang.r.rcpp/3292 2012-03-29 Dirk Eddelbuettel * inst/unitTests/runit.Vector.R: unit test for containsElementNamed 2012-03-29 Romain Francois * inst/include/Rcpp/vector/Vector.h: Vector<> gains the containsElementNamed method to test for presence of named element 2012-03-24 Romain Francois * src/cache.cpp: Using a single Rcpp_cache, stored in the Rcpp namespace * src/Evaluator.cpp: Using tryCatch instead of rcpp_tryCatch, no more using .Internal; but still define rcpp_TryCatch for backwards compat. 2012-03-23 Dirk Eddelbuettel * inst/doc/Rcpp-FAQ/Rcpp-FAQ.Rnw: Added short subsection on how to test a package from the command-line, expanding a patch by Glenn Lawyer in response to an initial rcpp-devel post by Dirk 2012-02-16 Dirk Eddelbuettel * DESCRIPTION: Release 0.9.10 * inst/NEWS: Release 0.9.10 * inst/include/Rcpp/config.h: Release 0.9.10 * debian/*: Similarly updated for new release to Debian 2012-02-16 Douglas Bates * src/Evaluator.cpp: PROTECT the expr argument to Evaluator::Run. Reorganize code. 2011-12-15 Douglas Bates * src/Evaluator.cpp: Avoid Rf_install inside an R API call 2012-02-12 Dirk Eddelbuettel * R/excections.R: Revert to previous use with .Internal * R/tools.R: Add branch for R 2.15.0 which can use assingInMyNamespace; else still use unlockBinding 2012-02-12 Dirk Eddelbuettel * Rcpp-introduction.Rnw: Small wording fix thanks to Pat Burns 2012-02-06 Romain Francois * R/exceptions.R: one less .Internal call * src/Evaluator.cpp: one less .Internal call 2012-02-03 Romain Francois * inst/include/Rcpp/Extractor.h: remove use of Fast in Extractor * inst/include/Rcpp/sugar/functions/mapply/mapply.h: new sugar function, similar to sapply, but with 2 or 3 (for now) input vectors 2012-02-01 Romain Francois * inst/include/Rcpp/iostream/Rostream.h: no need to include Rcpp.h here * inst/include/RcppCommon.h: include Rostream.h here, instead of ... * inst/include/Rcpp.h: ... here (needed for RcppArmadillo) 2012-01-29 Romain Francois * inst/include/Rcpp/sugar/diff.h: custom implementation of diff for the REALSXP case, skipping unnecessary NA tests 2012-01-24 Dirk Eddelbuettel * inst/doc/Rcpp-FAQ/Rcpp-FAQ.Rnw: New FAQ entry on passing a single option to g++, based on a rcpp-devel question by Whit Armstrong. 2012-01-15 Romain Francois * inst/include/Rcpp/vector/Vector.h: fixing IntegerVector(int,int), reported by Gregor Kastner on rcpp-devel * inst/unitTests/runit.Vector.R: regression test for the above 2011-12-25 Dirk Eddelbuettel * DESCRIPTION: Release 0.9.9 * inst/NEWS: Release 0.9.9 * inst/include/Rcpp/config.h: Release 0.9.9 * debian/*: Similarly updated for new release to Debian 2011-12-24 Dirk Eddelbuettel * Reverting the 'int64' changes listed below (during the period from Oct-31 to Nov-07) which adversely affect packages using Rcpp We will re-apply the 'int64' changes in a way which should cooperate more easily with 'long' and 'unsigned long' This covered svn revisions 3264 to 3308. * DESCRIPTION: Remove (for now) Depends: on int64 * inst/doc/Rcpp-FAQ/Rcpp-FAQ.Rnw: Ditto for int64_t example * inst/unitTests/runit.Module.client.package.R: On Windows, deactivate 'test.Module.package' * inst/unitTests/runit.client.package.R: On Windows, deactivate 'test.client.packageA' test 2011-12-23 Dirk Eddelbuettel * inst/unitTests/runTests.R: unit tests output 'fallback' directory changed to '..' and files are now in top-level of $pkg.Rcheck/ 2011-12-21 Dirk Eddelbuettel * DESCRIPTION: Release 0.9.8 * inst/NEWS: Release 0.9.8 * inst/include/Rcpp/config.h: Release 0.9.8 * debian/*: Similarly updated for new release to Debian 2011-12-20 Dirk Eddelbuettel * inst/skeleton/zzz.R (.onLoad): correct order of arguments 2011-12-18 Dirk Eddelbuettel * inst/examples/FastLM/lmArmadillo.R: Link with -llapack when using external Armadillo library (but RcppArmadillo makes all this easier) 2011-12-18 Romain Francois * inst/doc/*: Fixes to various vignettes for new version of highlight 2011-12-16 Douglas Bates * inst/unitTests/runit.stats.R: Correct cut+paste typo in qbinom * inst/include/Rcpp/XPtr.h: Check for XPtr type constructing from SEXP 2011-12-12 John M Chambers * R/RcppClass.R: Added setRcppClass for classes extending C++ classes * man/setRcppClass.Rd: Added corresponding documentation * NAMESPACE: Added corresponding exports entry 2011-11-13 Dirk Eddelbuettel * inst/include/Rcpp/stats/f.h: Correct call to not require ncp parameter * inst/unitTests/runit.stats.R: Add unit tests for pf(), pnf(), pchisq(), pnchisq() and pcauchy() 2011-11-07 Romain Francois * include/Rcpp/internal/wrap.h: implemented wrap_dispatch_importer__impl for int64 and uint64, needed for RProtoBuf * inst/doc/Rcpp-FAQ/Rcpp-FAQ.Rnw: Add int64_t usage example 2011-11-06 Romain Francois * include/Rcpp/modules/Module_generated_Pointer_method.h: added code to deal with const free "methods", e.g. OUT foo( const Class*, ...) in modules Before const_method could only deal with actual const methods of the class, e.g. OUT Class::foo( ... ) const * include/Rcpp/modules/Module_generated_Pointer_CppMethod.h: idem * include/Rcpp/as.h: deal with as and as * include/Rcpp/internal/export.h : deal with as< some_container > and as< some_container > where some_container is some container that has iterators, e.g. std::vector 2011-10-31 Romain Francois * include/Rcpp/int64/int64_lite.h: handling int64_t and uint64_t types, based on the int64 package * include/Rcpp/internal/wrap.h: new dispatch layers to handle int64_t, uint64_t and containers of these * DESCRIPTION: new depending on int64 2011-10-28 Dirk Eddelbuettel * inst/include/Rcpp/iostream/Rostream.h (Rcpp): Added tentative patch for operator<< also contributed by Jelmer Ypma -- but kept commented out for now 2011-10-25 Dirk Eddelbuettel * src/Rostream.cpp: Patch by Jelmer Ypma which adds a new device 'Rcout' not unlike std::cout but uses Rprintf internally * src/Rstreambuf.cpp: Idem * include/include/Rcpp/iostream/Rostream.h: Idem * include/include/Rcpp/iostream/Rstreambuf.h: Idem * include/include/Rcpp.h: Include new headers * inst/unitTests/runit.rcout.R: Added simple unit test 2011-09-29 Dirk Eddelbuettel * DESCRIPTION: Release 0.9.7 * inst/NEWS: Release 0.9.7 * inst/include/Rcpp/config.h: Release 0.9.7 * debian/*: Similarly updated for new release to Debian * inst/include/Rcpp/sugar/block/SugarBlock_1.h: Apply second path by Martyn Plummer to permit compilation on Solaris * inst/include/Rcpp/sugar/block/SugarBlock_2.h: Idem * inst/include/Rcpp/sugar/block/SugarBlock_3.h: Idem * inst/include/Rcpp/sugar/matrix/outer.h: Idem * inst/include/Rcpp/vector/LazyVector.h: Idem * inst/unitTests/testRcppModule/src/stdVector.cpp: Idem 2011-09-24 Dirk Eddelbuettel * inst/include/Rcpp/Extractor.h: Apply patch by Martyn Plummer to help with compilation on Solaris * inst/include/Rcpp/sugar/block/Vectorized_Math.h: Idem * inst/include/Rcpp/sugar/functions/math.h: Idem * inst/include/Rcpp/sugar/block/SugarBlock_2.h: Also applied path by Martyn Plummer, but with additional #ifdef layer for SunPro Compiler * inst/include/Rcpp/vector/LazyVector.h: Idem 2011-08-26 Douglas Bates * inst/examples/OpenMP/OpenMPandInline.r: Added another variant using import_transform for the Rcpp Vector class. 2011-08-26 Dirk Eddelbuettel * inst/include/*h: Removed exception specifiers in function headers * src/*cpp: Corresponding changes in implementations * inst/examples/OpenMP/OpenMPandInline.r: Added two std::transform() variants as suggested in rcpp-devel email by Davor Cubranic 2011-08-25 Dirk Eddelbuettel * inst/examples/OpenMP/OpenMPandInline.r: Added new example for OpenMP via inline, comparing simple loops with plain Rcpp and sugar 2011-08-23 Dirk Eddelbuettel * inst/examples/Misc/ifelseLooped.r: Added new example based on blog post today, and a StackOverflow ansers---and which shows how Rcpp can accelerate loops that may be difficult to vectorise due to dependencies * inst/examples/Misc/: New directory for small examples regrouping the new example as well as the fibonacci example added in Rcpp 0.9.6 2011-08-17 Dirk Eddelbuettel * inst/doc/Rcpp-FAQ/Rcpp-FAQ.Rnw: Added a short section including an example on the issue raised by Murray wherein 64 bit 'long' integer types can be cast with loss to numeric types without error or warning. 2011-07-28 Dirk Eddelbuettel * inst/unitTests/runit.Function.R: new unit test for accessing a non-exported function from a namespace 2011-07-26 Dirk Eddelbuettel * DESCRIPTION: Release 0.9.6 * inst/NEWS: Release 0.9.6 * inst/include/Rcpp/config.h: Release 0.9.6 * debian/*: Similarly updated for new release to Debian 2011-07-24 Dirk Eddelbuettel * inst/examples/Fibonacci/fib.r: New example showing how to compute a Fibonacci sequence using Rcpp and compare it to R and byte-compiled R 2011-07-14 Dirk Eddelbuettel * inst/examples/RcppGibbs/RcppGibbs.R: New example RcppGibbs, extending Sanjog Misra's Rcpp illustration of Darren Wilkinson's comparison of MCMC Gibbs Sampler implementations; * inst/examples/RcppGibbs/timeRNGs.R: added short timing on Normal and Gaussian RNG draws between Rcpp and GSL as R's rgamma() is seen to be significantly slower 2011-07-13 Romain Francois * inst/include/Rcpp/traits/is_eigen_base.h: helper traits to facilitate implementation of the RcppEigen package. The is_eigen_base traits identifies if a class derives from EigenBase using SFINAE * inst/include/Rcpp/internal/wrap.h: new layer of dispatch to help RcppEigen 2011-07-07 Romain Francois * inst/include/Rcpp/XPtr.h: The XPtr class template gains a second template parameter allowing the developper to supply his/her own finalizer instead of the default one that calls delete 2011-07-05 Dirk Eddelbuettel * DESCRIPTION: Release 0.9.5 * inst/NEWS: Release 0.9.5 * inst/include/Rcpp/config.h: Release 0.9.5 * debian/*: Similarly updated for new release to Debian 2011-07-02 Dirk Eddelbuettel * cleanup: Also clean in examples/OpenMP/ 2011-06-09 Dirk Eddelbuettel * inst/skeleton/zzz.R (.onLoad): Force load of methods package before calling loadRcppModules() to make 'R CMD check' happier 2011-06-06 Romain Francois * inst/include/Rcpp/vector/Vector.h : init becomes protected to fix the bug reported by Doug Bates on Rcpp-devel. 2011-05-31 Romain Francois * R/loadRcppModules.R: New argument "direct" in loadRcppModules * R/tools.R: New unexported function forceAssignInNamespace 2011-05-29 Dirk Eddelbuettel * inst/include/Rcpp/stats/random/rlnorm.h: Repaired accidental header guard from 'norm' to 'lnorm' so that the file really gets included, make several calls to standard library 'exp()' explicit as '::exp()' and fixed a cut-and-paste typo 2011-05-24 Dirk Eddelbuettel * inst/include/Rcpp/internal/wrap.h: For arguments of type const char *, wrap now checks for NULL arguments before calling Rf_mkString() * unitTests/runit.wrap.R: Added unit test for this 2011-05-14 Dirk Eddelbuettel * inst/doc/Rcpp-quickref/Rcpp-quickref.Rnw: Corrected an error in STL example and added two more STL examples 2011-04-27 Dirk Eddelbuettel * inst/examples/OpenMP/piWithInterrupts.cpp: Beginnings of new contributed example on OpenMP as well as user interrupt handling 2011-04-26 Romain Francois * inst/include/Rcpp/sugar/functions/mean.h: new sugar function: mean * inst/include/Rcpp/sugar/functions/var.h: new sugar function: var * inst/include/Rcpp/sugar/functions/sd.h: new sugar function: sd 2011-04-19 Dirk Eddelbuettel * inst/doc/Rcpp-FAQ/Rcpp-FAQ.Rnw: New example setting row and column names for matrices 2011-04-16 Dirk Eddelbuettel * inst/doc/Rcpp-FAQ/Rcpp-FAQ.Rnw: New example using Rcpp.plugin.maker 2011-04-12 Dirk Eddelbuettel * DESCRIPTION: Release 0.9.4 * inst/NEWS: Release 0.9.4 * inst/include/Rcpp/config.h: Release 0.9.4 * debian/*: Similarly updated for new release to Debian 2011-04-12 Romain Francois * inst/unitTests/testRcppModules/src/stdVector.cpp: compiler disambiguation * src/r_cast.cpp: use a callback to R's "as.character" instead of calling Rf_coerceVector, which did not work as expected for factors 2011-04-11 Romain Francois * R/loadRcppModules.R: New R function "loadRcppModules" that looks for the "RcppModules" field in the DESCRIPTION file, loads and populates the modules into the package NAMESPACE * man/loadRcppModules.Rd: documentation * inst/unitTests/testRcppModule: using loadRcppModules 2011-04-11 Dirk Eddelbuettel * inst/man/Rcpp-package.Rd: Added JSS reference in \references{} * inst/doc/*: Added JSS reference to vignettes 2011-04-09 Dirk Eddelbuettel * inst/CITATION: Finalized using JSS data on volume, number, pages 2011-04-07 Dirk Eddelbuettel * inst/doc/Rcpp-quickref/Rcpp-quickref.Rnw: Add patch by Christian pointing out need for Rcpp:: namespace qualifier, and hint for Rcpp-FAQ 2011-04-05 Dirk Eddelbuettel * inst/doc/Rcpp-FAQ/Rcpp-FAQ.Rnw: Added OS X entry for min. sufficient versions of OS X itself and Xode based on Simon's post to rcpp-devel 2011-04-05 Dirk Eddelbuettel * DESCRIPTION: Release 0.9.3 * inst/NEWS: Release 0.9.3 * inst/include/Rcpp/config.h: Release 0.9.3 * debian/*: Similarly updated for new release to Debian 2011-04-05 Romain Francois * R/01_show.R: set of cosmetic changes to the show method for C++ classes * inst/include/Rcpp/Module.h: fixed module bug by not using singletons of the class_ template 2011-04-03 Dirk Eddelbuettel * inst/doc/Rcpp-introduction.Rnw: Updated to forthcoming JSS paper * inst/CITATION: Added citation() support using forthcoming paper * inst/doc/Makefile: Trying make parallel builds possible by not calling 'clean' in the 'all' target; thanks to Brian Ripley for the heads-up 2011-04-02 Dirk Eddelbuettel * cleanup: Also clean in inst/unitTest/testRcppModule/src/ * inst/include/RcppCommon.h: Define new variable for g++ < 4.6.0 * src/exceptions.cpp: Include up to g++-4.5 only * inst/unitTests/testRcppModule/src/stdVector.cpp: Use #ifdef not #if * inst/include/Rcpp/module/Module_generated_ctor_signature.h: Add a bit of null-op code to suppress a 'unused parameter' warning in the initial (and non-templated) ctor_signature() function 2011-03-21 Dirk Eddelbuettel * inst/unitTests/testRcppModule/src/stdVector.cpp: Protect push_back declaration by #ifdef as it conflicts with -std=c++0x use for g++-4.5 2011-03-17 Dirk Eddelbuettel * inst/include/RcppCommon.h: Condition the typedef for 'long long' of rcpp_long_long_type on the (still experimental) support for C++0x which can be enabled with the non-portable g++ flag '-std=c++0x'; adding a test for C++0x support suppresses a new warning with g++ about long long being part of C++98; thanks to Kurt Hornik for raising this 2011-03-10 Dirk Eddelbuettel * inst/include/Rcpp/grow.h: Applied another patch kindly supplied by Murray which fixes another clang/llvm and C++ conformance issue by re-ordering declarations as unqualified names must be declared before they are used, even when used within templates. 2011-02-28 Dirk Eddelbuettel * inst/doc/Makefile: Call R and Rscript relative to R_HOME/bin 2011-02-23 Dirk Eddelbuettel * DESCRIPTION: Release 0.9.2 * inst/NEWS: Release 0.9.2 * inst/include/Rcpp/config.h: Release 0.9.2 * debian/*: Similarly updated for new release to Debian * inst/include/RcppCommon.h: Apply patch by Alexey Stukalov to enable basic Intel Compiler support without Cxx0x or TR1 features * inst/THANKS: Added some Thank You! to Baptiste, Alexey and Ken * inst/include/Rcpp/Module.h: Minor reworking of module loading macro to get rid of one g++ warning 2011-02-22 Dirk Eddelbuettel * inst/unitTests/runit.Module.client.package.R: Add a test for OS X 10.5.* or older and do not execute the test here as g++ 4.2.1 balks at some of the Rcpp modules code. Thanks to Simon Urbankek for pinning this down and Baptiste Auguie for additonal testing. 2011-02-20 Dirk Eddelbuettel * inst/doc/Rcpp-FAQ/Rcpp-FAQ.Rnw: Added RcppArmadillo example 2011-02-19 Dirk Eddelbuettel * inst/doc/Rcpp-FAQ/Rcpp-FAQ.Rnw: Added three more setup-related questions in the first section following another rcpp-devel question 2011-02-14 Dirk Eddelbuettel * DESCRIPTION: Release 0.9.1 * inst/NEWS: Release 0.9.1 * inst/include/Rcpp/config.h: Release 0.9.1 * debian/*: Similarly updated for new release to Debian 2011-02-13 Dirk Eddelbuettel * inst/include/Rcpp/Module.h: Cache return of Rf_install("Module") in a static helper function used by the LOAD_RCPP_MODULE macro 2011-02-11 Dirk Eddelbuettel * inst/doc/Rcpp-FAQ/Rcpp-FAQ.Rnw: Added two more examples 2011-02-10 Douglas Bates * inst/include/Rcpp/XPtr.h: Replace calls to EXTPTR_PTR with R_ExternalPtrAddr. The distinction is important when R is compiled with PROTECTCHECK enabled. 2011-02-01 Romain Francois * inst/include/Rcpp/vector/Vector.h: extra PROTECT'ion in several places 2011-01-25 Dirk Eddelbuettel * inst/include/Rcpp/DataFrame_generated.h: Assign Rf_install() result to local SEXP (by modifying generator script creating the file) * inst/include/Rcpp/DataFrame.h: Assign Rf_install() result to local SEXP * inst/include/Rcpp/DottedPair.h: idem * inst/include/Rcpp/grow.h: idem * inst/include/Rcpp/Module.h: idem * inst/include/Rcpp/vector/eval_methods.h: idem * inst/include/Rcpp/vector/Vector.h: idem 2011-01-25 Douglas Bates * src/exceptions.cpp: Assign Rf_install() result to local SEXP * src/Evaluator.cpp: idem * src/Reference.cpp: idem * src/S4.cpp: idem * inst/include/Rcpp/Date.h: Use predefined symbol. 2011-01-22 Dirk Eddelbuettel * src/cache.cpp: Assign Rf_install() result to local SEXP * src/Environment.cpp: idem * src/Evaluator.cpp: idem * src/Function.cpp: idem * src/Function.cpp: idem * src/RObject.cpp: idem * src/Symbol.cpp: idem * inst/doc/Rcpp.bib: Added SoDA (some time ago) 2011-01-13 Douglas Bates * src/Reference.cpp: Protect the value being set in Reference::FieldProxy::set 2011-01-11 Romain Francois * inst/include/Rcpp/vector/string_proxy.h: fix implicit conversion to int, reported by Daniel Sabanes Bove on Rcpp-devel * inst/unitTests/runit.vector.R: unit test for the above fix 2011-01-08 Dirk Eddelbuettel * inst/doc/Rcpp.bib: Updated a number of CRAN versions 2011-01-07 Dirk Eddelbuettel * inst/include/Rcpp/config.h (RCPP_VERSION): Set to 0.9.0, at last. 2011-01-06 Douglas Bates * R/zzz.R (.onLoad): Don't call init_Rcpp_cache here. * src/Rcpp_init.c: Don't register init_Rcpp_cache. It should only be called once and it is called in the C function R_init_Rcpp. * NAMESPACE: Use registered symbols instead of relisting them. Registration allows for checking the number of arguments. 2011-01-04 Dirk Eddelbuettel * src/debugging.cpp: Treat the *BSD flavours like Windows and offer file and line number but not stack trace (for lack of execinfo) * src/Makevars: Replace implicit variable $^ with explicit list 2011-01-02 Dirk Eddelbuettel * inst/doc/Rcpp-quickref/Rcpp-quickref.Rnw: Applied patch with additional documentation by Christian Gunning 2010-12-23 Romain Francois * inst/include/Rcpp/RObject.h: New internal class SEXPstack to handle garbage collection. Presumably more efficient than R_PreserveObject and R_ReleaseObject * inst/include/Rcpp/sugar/operators/times.h: More efficient operator* for REALSXP sugar expressions, avoiding unnecessary NA tests. * inst/include/Rcpp/sugar/operators/divides.h: More efficient operator/ for REALSXP sugar expressions, avoiding unnecessary NA tests. * inst/include/Rcpp/sugar/operators/minus.h: More efficient operator- for REALSXP sugar expressions, avoiding unnecessary NA tests. 2010-12-22 Romain Francois * inst/include/Rcpp/sugar/operators/plus.h: More efficient operator+ for REALSXP sugar expressions, avoiding unnecessary NA tests. 2010-12-22 Dirk Eddelbuettel * inst/unitTests/runit.Vector.R: Applied patch by Christian Gunning to add more tests for complex-typed vectors 2010-12-20 Dirk Eddelbuettel * R/inline.R (Rcpp.plugin.maker): Reverse order in PKG_LIBS 2010-12-19 Dirk Eddelbuettel * DESCRIPTION: Release 0.9.0 * debian/*: Similarly updated for new release to Debian 2010-12-18 Dirk Eddelbuettel * inst/announce/ANNOUNCE-0.9.0.txt: Started announcement post * inst/unitTests/runit.Date.R: Added new unit tests for date and datetime from string 2010-12-17 Dirk Eddelbuettel * inst/include/Rcpp/Datetime.h: correct default format to use %OS for fractional seconds and not the popular typo %OS (i.e. ooh, not zero) * src/Datetime.cpp: add missing as.POSIXct() after strptime for constructor from string as we then use the constructor from double * src/Date.cpp: add missing as.Date() after strptime for constructor from string as we then use the constructor from int 2010-12-13 Romain Francois * inst/include/Rcpp/vector/string_proxy.h: List::Proxy did not convert bool correctly, reported on Rcpp-devel by Daniel SabanC)s BovC) 2010-12-12 Romain Francois * R/SHLIB.R: new unexported R function SHLIB, small wrapper around R CMD SHLIB * inst/include/Rcpp/sprintf.h: returning a std::string to avoid leaks 2010-12-10 Dirk Eddelbuettel * inst/include/Rcpp/sprintf.h: Use vsnprintf() instead 2010-12-10 Romain Francois * inst/include/Rcpp/barrier.h: faster versions (crossing the write barrier) for string_elt, etc ...(to be used only internally) * src/barrier.cpp: implementation of the above 2010-12-09 John M Chambers * src/Module.cpp: Rcpp/src/exceptions.cpp, Rcpp/src/Rcpp_init.c, etc. add a not_initialized exception and a dummy_pointer to identify such objects, throw exc. back to R 2010-12-07 Romain Francois * inst/include/Rcpp/vector/matrix.h: Matrix gains a nested ::Sub typedef 2010-12-05 Romain Francois * inst/include/Rcpp/module/Module_generated_class_constructor.h: the default constructor was always considered valid because of the use of &yes instead of &yes_arity<0> * R/Rcpp.package.skeleton.R: Rcpp.package.skeleton( "foo", example_code = FALSE) did not work properly. Rcpp.package.skeleton gains some arguments 2010-12-05 Dirk Eddelbuettel * src/Date.cpp: Add 1900 to tm.year after mktime00() call as we now no longer assume the field is '1900-less' * src/Date.cpp: Define new static const variable baseYear as 1900 and use throughout * inst/unitTests/runit.Date.R (test.Date.getFunctions): Added unit tests for the get* functions of the Date class * R/bib.R (bib): Correct expression for default Rcpp bibtex file 2010-12-04 Dirk Eddelbuettel * inst/include/Rcpp/Date.h: Remove addition of 1900 in getYear() 2010-12-04 Romain Francois * inst/doc/Rcpp-quickref/Rcpp-quickref.Rnw: documentation patch by Christian Gunnning * inst/include/Rcpp/vector/matrix.h: fix SubMatrix. Bug reported by Christian Gunnning on Rcpp-devel * inst/include/Rcpp/vector/SubMatrix.h: factored out of matrix.h * inst/include/Rcpp/sprintf.h: new sprintf template to format strings 2010-12-03 Dirk Eddelbuettel * inst/unitTests/runit.RObject.R: fix 'inherits' test added today * inst/include/Rcpp/module/Module_generated_Constructor.h: Applied patch by Tama Ma for up to seven args in ctor * inst/include/Rcpp/module/Module_generated_class_constructor.h: Idem * inst/include/Rcpp/module/Module_generated_ctor_signature.h: Idem 2010-12-03 Romain Francois * inst/include/Rcpp/RObject.h : new inline method inherits that checks if an object inherits from a given class (wrapper around Rf_inherits) * inst/unitTests/runit.RObject.R: unit test for the above 2010-12-02 Douglas Bates * inst/include/Rcpp/generated/Function__operator.h, inst/include/Rcpp/Function.h: operator() becomes const. 2010-11-29 Romain Francois * inst/include/Rcpp/vector/Vector.h: trying to please suncc after CRAN checks * R/Module.R: protect the module$refClassGenerators <- generators line against the case where there are no classes (triggered a problem with the parser package) 2010-11-27 Dirk Eddelbuettel * DESCRIPTION: Release 0.8.9 * debian/*: Similarly updated for new release to Debian 2010-11-26 Romain Francois * inst/include/Rcpp/vector/Vector.h: List::create( _["foo"] ) sets the SEXP to R_MissingArg, usueful for formal arguments specifications, simpler form than List::create( _["foo"] = R_MissingArg ) * inst/include/Rcpp/macros/unroll.h: helper macro RCPP_UNROLL_LOOP * inst/include/Rcpp/vector/MatrixColumn.h: added MatrixColumn::operator=( MatrixColumn& ) otherwise it gets synthetized by the compiler * inst/include/Rcpp/vector/MatrixRow.h: same for MatrixRow * inst/include/Rcpp/vector/Matrix.h: added Matrix( SubMatrix ) and Matrix::operator=( SubMatrix ) 2010-11-25 Romain Francois * inst/include/Rcpp/module/Module_generated_function.h: new .function with formal argument specification * inst/include/Rcpp/module/Module_generated_CppFunction.h: helper classes for the above * R/Module.R: using the formal argument specification if available * R/populate.R: new R function populate to dump the contents of a module into an environment or a namespace * man/populate.Rd: documentation for populate 2010-11-24 Romain Francois * R/00_classes.R: formals<- method for C++Function that allows to set default arguments, etc .. to a C++ function 2010-11-23 Dirk Eddelbuettel * inst/doc/Makefile: Call Rscript with --vanilla to skip user settings 2010-11-23 Romain Francois * R/00_classes.R: C++Class gains a docstring slot to host self documentation * R/Module.R: calling an exposed C++ more efficiently by using the xp directly rather than traversing the map internally * R/00_classes.R: C++Function gains a docstring slot to host self documentation of the internal function. And a "signature" slot to host the C++ signature of the function * R/01_show.R: updated show( C++Function ) to display the docstring and the signature. updated show( C++Class ) to display the docstring. * inst/include/Rcpp/module/Module_generated_CppFunction.h: self documentation for exposed C++ functions and extraction of the signature * inst/include/Rcpp/module/Module_generated_function.h: idem 2010-11-22 Romain Francois * R/00_classes.R: C++OverloadedMethods gains an "info" class methods, factored out from Module.R * R/01_show.R: more information printed in show( C++Class ) * inst/include/Rcpp/Module/Module_generated_get_signature.h: templates to grab method signatures * inst/include/Rcpp/Module.h: CppMethod gains a signature method that returns the signature of the method. * R/00_classes.R: C++OverloadedMethods gains a "signatures" field that contains the signature of each overload * R/Module.R: registered method gain an automatically generated self description that contains the method(s) signature(s) and the docstring that is declared in .method * inst/include/Rcpp/Module/Module_generated_CppMethod.h: implement signature * inst/include/Rcpp/Module/Module_generated_Pointer_CppMethod.h: idem 2010-11-21 Romain Francois * R/Module.R: internal version of cpp_hasDefaultConstructor * src/Module.cpp: implementation (Class__has_default_constructor) * inst/include/Rcpp/Module.h: support (class_.has_default_constructor) * inst/include/Rcpp/module/Module_generated_class_constructor.h: new interface for exposing constructors, the init_ disappears and the template arguments are directly applied to the .constructor function * inst/include/Rcpp/module/Module_generated_Constructor.h: removed init_* * inst/include/Rcpp/module/Module_generated_method.h: .method gains a docstring argument to allow self documentation of exposed methods * inst/include/Rcpp/module/Module_generated_PointerMethod.h: idem * R/Module.R: grab method docstrings 2010-11-20 John M Chambers * R/Module.R: now checks for the existence of a default constructor for a C++ class and generates a suitable $initialize() method accordingly. 2010-11-20 Romain Francois * inst/include/Rcpp/vector/MatrixRow.h: added missing return *this ; * R/Module.R: dispatch based on void-ness of the methods. For example if all methods are known to be void, etc ... * R/00_classes.R: more information in the C++OverloadedMethods ref class * src/Module.cpp: new .External CppMethod__invoke_void and CppMethod__invoke_notvoid that are used when we know for sure that all overloaded methods are void, or not void * inst/include/Rcpp/Module.h: class_ gains invoke_void and invoke_notvoid to support the changes above 2010-11-18 Douglas Bates * inst/include/Rcpp/module/Module_generated_[class_]Constructor.h: allow up to 6 arguments to .constructor 2010-11-18 Romain Francois * inst/include/Rcpp/Module.h: rework the class_ template to allow overloaded methods * R/00_classes.R: The C++Method class disappears and the C++OverloadedMethods enters. a "C++OverloadedMethods" object points to a set of overloaded C++ methods that all share the same name. * R/Module.R: adapt some of the code to cope with changes above 2010-11-17 Romain Francois * inst/include/Rcpp/sugar/as_vector.h: added the as_vector function that turns a sugar matrix expression into a vector of the appropriate type * inst/include/Rcpp/vector/Matrix.h: new SubMatrix class 2010-11-13 Romain Francois * inst/include/Rcpp/Module.h: expose constructors as the "cpp_constructor" field of "C++ClassRepresentation" and the "constructors" slot of "C++Class" 2010-11-07 Romain Francois * inst/include/Rcpp/sugar/operators/minus.h: fixed Minus_Vector_Primitive * inst/unitTests/runit.sugar.R: new test for the above 2010-11-05 Romain Francois * inst/include/Rcpp/Module.h: exposing multiple constructors in modules * src/Module.cpp: The mangled class name is now "Rcpp_" plus the class name. The previous version used the address of the external pointer to the module, which was not constant. 2010-11-04 Douglas Bates * inst/include/Rcpp/module/Module_generated_Constructor.h: remove redundant 'return's. 2010-11-04 Romain Francois * inst/include/Rcpp/Module.h: experimental way to specify which constructor to use in classes exposed by modules. This is still too restrictive as it only allows one constructor. * inst/include/Rcpp/sugar/block/SugarMath.h: extend the SUGAR_MATH_1 macro so that we can apply functions (e.g. sqrt) directly on SEXP 2010-11-01 Dirk Eddelbuettel * DESCRIPTION (Version): Release 0.8.8 * debian/*: Similarly updated for new release to Debian 2010-10-30 Dirk Eddelbuettel * inst/include/RcppCommon.h: New define IS_GCC_450_OR_LATER * inst/include/Rcpp/Extractor.h: Do not enable Rcpp::Fast if g++ 4.5.0 or later is used -- we need to figure out what upsets it 2010-10-23 Romain Francois * inst/include/Rcpp/vector/MatrixRow.h: Faster row indexing * inst/include/Rcpp/vector/Matrix.h: added use of _ to get columns and rows of a matrix. For example if x is a NumericMatrix, x(_,i) returns the same as x.column(i) and x(i,_) returns the same as x.row(i) * inst/unitTests/runit.Matrix.R: unit tests for the above * inst/include/Rcpp/sugar/functions/sum.h: the sugar version of sum now takes care of missing values correctly * inst/include/Rcpp/sugar/functions/cumsum.h: sugar version of cumsum 2010-10-21 Romain Francois * inst/include/Rcpp/vector/MatrixColumn.h: Fixed indexing bug (mismatch between number of rows and number of columns * inst/unitTests/runit.Matrix.R: test fix above based on the R-help/Rcpp-devel thread: http://article.gmane.org/gmane.comp.lang.r.rcpp/851 * inst/include/Rcpp/vector/MatrixColumn.h: Column gains a operator= taking a sugar expression. Faster indexing (caching the pointer instead of calling nrow many times) * inst/include/Rcpp/vector/Matrix.h: first pass at making matrix indexing faster 2010-10-21 Dirk Eddelbuettel * inst/include/Rcpp/Module.h: Reorder instantiation for class_ 2010-10-20 Dirk Eddelbuettel * include/Rcpp/XPtr.h: Applied patch by Karl Millar * include/Rcpp/vector/Vector.h: Idem 2010-10-19 Dirk Eddelbuettel * src/posixt.cpp: Correct POSIXct, POSIXt ordering for R 2.12.0 2010-10-14 Dirk Eddelbuettel * DESCRIPTION (Version): Release 0.8.7 * debian/*: Similarly updated for new release to Debian 2010-10-10 Romain Francois * tests/doRUnit.R: workaround to disable tests on windows 64 until we can figure out what upsets R CMD check. * R/Module.R: expose the finalizer 2010-10-07 John M Chambers * R/Module.R: modify cpp_refMethods to substitute the .External directly with the method and class pointers. 2010-10-03 Dirk Eddelbuettel * inst/include/Rcpp/stats/random/r*: Added comment reminding users read up on Section 6.3 of "Writing R Extensions" and the need to call GetRNGstate() and PutRNGstate() when using R's RNGs 2010-09-30 Romain Francois * inst/include/Rcpp/vector/MatrixRow.h: Matrix row inherits VectorBase so that it becomes a sugar expression, so that we can do something like this: NumericMatrix x( ... ) ; NumericVector x0 = x.row(0) ; * inst/include/Rcpp/vector/MatrixColumn.h: idem for columns * cleanup: run make clean in the inst/doc directory to install the fake vignettes 2010-09-27 Romain Francois * inst/include/Rcpp/traits/is_sugar_expression.h: new trait class to recognize sugar expressions * inst/include/Rcpp/vector/Vector.h: operator=( sugar expression) no longer allocate unnecessary memory. 2010-09-26 Romain Francois * inst/include/Rpp/Fast.h: new helper class Rcpp::Fast that allows faster indexing of Vector * inst/include/Rcpp/sugar/operators/plus.h: port to operator+ the same improvements than in operator* 2010-09-25 Romain Francois * inst/include/Rcpp/routines.h: declare routines that are registered * src/Rcpp_init.c: register routines * R/*.R: use registration information in many .Call and .External functions to speed things up * inst/include/Rcpp/RangeIndexer.h: experimenting with loop unrolling 2010-09-24 John M Chambers * R/Module.R: modify cpp_fields to substitute the .Call directly with the field and class pointers; supplements the changes entered by Romain on 9-22. (svn rev 2165, 2141) * src/Rcpp_init.c: set up registration of .Call's (rev 2167) 2010-09-24 Romain Francois * inst/include/Rcpp/sugar/Range.h : Range gains some operators (++,--,n etc ...) * inst/examples/ConvolveBenchmarks/convolve3_cpp.cpp: using the new Range operators * inst/include/Rcpp/sugar/operators/times.h: speed improvements. Not using pointer to member functions seems to be beneficial. * inst/include/Rcpp/sugar/nona/nona.h: sugar function that wraps a sugar expression in an object that pretends it does not contain any missing values. This allows many sugar functions and operators to use their fast versions when we know that the object does not contain missing values. 2010-09-22 Romain Francois * R/Module.R: set [[ and [[<- as regular methods too, which restores previous behavior 2010-09-17 Romain Francois * src/Reference.cpp: new objects are created via a callback to R's new function, as R_do_new_object did always return the same environment * R/00_classes.R: new ref class C++Method to represent C++ methods and holding their external pointers directly (same idea as C++Field) * inst/include/Rcpp/Module.h: internal support for C++Method (template class S4_CppMethod) 2010-09-17 John M Chambers * R/00_classes.R, R/02_completion.R, et al.: use of environment underlying the reference classes removes need for slots in C++Object class (svn rev's 2133, 2134) 2010-09-16 Romain Francois * R/00_classes.R: moving classes definition here * inst/Rcpp/Module.h: added C++ class S4_field that builds S4 objects of class C++Field. Build the list of fields as part of the creation of the C++Class objects * src/Module.cpp: .Call functions CppField__get and CppField__set to get/set values of an object's field using external pointers directly (no std::map lookup internally) * R/Module.R: (unexported) functions .getField and .setField that call CppField__get and CppField__set * inst/include/Rcpp/Reference.h: skeleton for a Rcpp::Reference class that will help dealing with reference classes on the C++ side * src/Reference.cpp: implementation (needs update) 2010-09-16 John M Chambers * R/Module.R, tests/modRef.R: un-generic of new(); return a generator object for C++ classes. Use environment as superclass. 2010-09-15 Romain Francois * DESCRIPTION: added the declaration MinimumSvnRev to control which version of R-devel we need so that Rcpp fully works, currently set to 52905 * R/zzz.R: check the svn revision of R against the declared MinimumSvnRev requirement and print a message if necessary (this will only stay for the interim period while we develop 0.8.7 so that we all are on the same page. * inst/include/Rcpp/Module.h: added methods to class_Base : methods_arity and methods_voidness to query the number of arguments of methods of a class and if the method is void * R/Module.R: implement referenceMethods (from methods) for 'C++Class' 2010-09-11 Dirk Eddelbuettel * src/Date.cpp: Add include of unistd.h to make Solaris happy 2010-09-09 Dirk Eddelbuettel * DESCRIPTION: Release 0.8.6 * debian/*: Similarly updated for new release to Debian 2010-09-08 Dirk Eddelbuettel * inst/include/RcppCommon.h: Also include typeinfo header file 2010-09-08 Romain Francois * inst/include/Rcpp/Module.h : added class_Base::property_names method to grab the names of all fields (properties) * src/Module.cpp : added R access (.Call) function CppClass__properties to grab the names of the fields (property) from the XP of a class * inst/include/Rcpp/Module.h : added class_Base::property_is_readonly method to query if a property is read only * src/Module.cpp : added R access (.Call) function CppClass__property_is_readonly to query if a class property is read only * inst/include/Rcpp/Module.h : added class_Base::property_class method to grab the C++ class of a property * src/Module.cpp : added R access (.Call) function CppClass__property_class to grab the C++ class of a property 2010-09-06 Dirk Eddelbuettel * inst/examples/ConvolveBenchmarks/exampleRCode.r: Rewritten / simplified using the rbenchmark::benchmark() function * DESCRIPTION: Added Suggests: on rbenchmark package 2010-09-04 Dirk Eddelbuettel * inst/examples/ConvolveBenchmarks/exampleRCode.r: Some cosmetics * inst/examples/ConvolveBenchmarks/convolve3_cpp.cpp: Remove one unneccessary loop to set values to zero (which the ctor does for us) 2010-09-03 Dirk Eddelbuettel * inst/doc/Rcpp-extending/Rcpp-extending.Rnw: Add highlight definitions * inst/doc/Rcpp-FAQ/Rcpp-FAQ.Rnw: Idem * inst/doc/Rcpp-package/Rcpp-package.Rnw: Idem 2010-09-02 Dirk Eddelbuettel * src/msvcmath.cpp: Undo unmotivated msvc patch * inst/include/Rcpp/msvc/: Idem * inst/include/Rcpp/XPtr.h: Idem * inst/include/RcppCommon.h: Idem * src/Date.cpp: Idem * DESCRIPTION: Added Suggests: on highlight package 2010-08-20 Romain Francois * inst/include/Rcpp/complex.h : binary operators for Rcomplex : +,-,*,/ 2010-08-15 Romain Francois * inst/include/Rcpp/sugar/SugarBlock.h: more control of the NA behavior in SUGAR_BLOCK_2. SUGAR_BLOCK_2 will now propagate the NA, and the new SUGAR_BLOCK_2_NA will use a fixed NA (can be true or false). This can be useful if the function that is sugar'ed never generates NA. * inst/include/Rcpp/sugar/undoRmath.h : undo the macros done by Rmath.h 2010-08-13 Douglas Bates * include/Rcpp.h: undo more defines from Rmath.h 2010-08-13 Romain Francois * inst/include/Rcpp/sugar/complex.h: simplify complex sugar functions Re, Im, Conj, Mod * inst/include/Rcpp/sugar/complex.h: new sugar functions operating on complex expressions: exp, log, sqrt, cos, sin, tan, acos, asin, atan, acosh, asinh, atanh, cosh, sinh, tanh * inst/unitTests/runit.sugar.R: added regression test for complex functions which did not handle NA properly before * DESCRIPTION: no longer requireing GNU make as we dont use it anymore * src/Makevars: removed the use of ifeq (which was the last thing requiring GNU make) 2010-08-12 Romain Francois * inst/include/Rcpp/sugar/math.h: replace previous versions of floor, abs, exp, ceil, ceiling with versions generated by the SUGAR_MATH_1 macro 2010-08-11 Romain Francois * inst/include/Rcpp/vector/vector.h: Vector gains constructor taking size and function pointers, acting as generators : Vector( const int& siz, stored_type (*gen)(void), bool seed = true ) template Vector( const int& siz, stored_type (*gen)(U1), const U1& u1, bool seed = true) template Vector( const int& siz, stored_type (*gen)(U1,U2), const U1& u1, const U2& u2, bool seed = true) so that for example : NumericVector( 10, norm_rand ) generates a N(0,1) vector of size 10 * inst/include/Rcpp/stats/random/rlnorm.h: Added rlnorm and rlnorm_ * inst/include/Rcpp/stats/random/rgamma.h: Added rgamma and rgamma_ * inst/include/Rcpp/stats/random/rt.h: Added rt and rt_ * inst/include/Rcpp/stats/random/rbinom.h: Added rbinom and rbinom_ * inst/include/Rcpp/stats/random/rnchisq.h: Added rnchisq and rnchisq_ * inst/include/Rcpp/stats/random/rgeom.h: Added rgeom and rgeom_ * inst/include/Rcpp/stats/random/rhyper.h: Added rhyper and rhyper_ * inst/include/Rcpp/stats/random/rnbinom_mu.h: Added rnbinom_mu and rnbinom_mu_ * inst/include/Rcpp/stats/random/rnbinom.h: Added rnbinom and rnbinom_ * inst/include/Rcpp/stats/random/rpois.h: Added rpois and rpois_ * inst/include/Rcpp/stats/random/rweibull.h: Added rweibull and rweibull_ * inst/include/Rcpp/stats/random/rlogis.h: Added rlogis and rlogis_ * inst/include/Rcpp/stats/random/rwilcox.h: Added rwilcox and rwilcox_ * inst/include/Rcpp/stats/random/rsignrank.h: Added rsignrank and rsignrank_ * inst/include/Rcpp/stats/random/rnorm.h: some optimization * inst/include/Rcpp/stats/random/rf.h: calculate n2/n1 just once * inst/include/Rcpp/sugar/SugarBlock.h : templates and macros to facilitate generation of sugar functions that take one or two double parameters * inst/include/Rcpp/sugar/math.h: using SugarBlock to generate new sugar functions: (1 parameter) : gamma, lgamma, digamma, trigamma, tetragamma, pentagamma, expm1, log1p, factorial, lfactorial, cos, acosh, atan, cos, cosh, log, log10, sqrt, sin, sinh, tan, tanh (2 parameter) : choose, lchoose, beta, lbeta, psigamma 2010-08-10 Douglas Bates * include/Rcpp/stats/nbinom[_mu].h: Replace conflicting data member name 'size' by 'siz' 2010-08-10 Romain Francois * inst/include/Rcpp/stats/random/rnorm.h: Added rnorm and rnorm_ * inst/include/Rcpp/stats/random/runif.h: Added runif and runif_ * inst/include/Rcpp/stats/random/rbeta.h: Added rbeta and rbeta_ * inst/include/Rcpp/stats/random/rcauchy.h: Added rcauchy and rcauchy_ * inst/include/Rcpp/stats/random/rchisq.h: Added rchisq and rchisq_ * inst/include/Rcpp/stats/random/rexp.h: Added rexp and rexp_ * inst/include/Rcpp/stats/random/rf.h: Added rf and rf_ * inst/include/Rcpp/stats/stats.h : fixed name clash reported on Rcpp-devel http://permalink.gmane.org/gmane.comp.lang.r.rcpp/610 2010-08-09 Romain Francois * inst/include/Rcpp/stats/lnorm.h: Added d-p-q (lnorm|weibull|logis|f) generated by the script * inst/include/Rcpp/vector/Vector.h: further dispatch to allow generators to be passed to constructors of Vector * inst/include/Rcpp/traits/has_iterator.h: new SFINAE detection of generators * inst/include/Rcpp/Generator.h : base template class for generators 2010-08-06 Douglas Bates * unitTests/runit.stats.R: Corrected instances of numeric arguments passed as integers, deleted tests for binomial with fixed parameter values. 2010-08-06 Romain Francois * ../scripts/stats.R: R script to generate the template code for dpq functions * include/Rcpp/stats/unif.h: Added d-p-q unif and tests * include/Rcpp/stats/gamma.h: Added d-p-q gamma and tests * include/Rcpp/stats/chisq.h: Added d-p-q chisq 2010-08-05 Douglas Bates * include/Rcpp/stats/beta.h: Added d-p-q beta and tests * include/Rcpp/stats/binom.h: Added pbinom and qbinom, and tests of same in runit.stats.R * include/Rcpp/stats/pois.h: Added ppois and qpois (plus tests in runit.stats.R). * include/Rcpp/stats/norm.h: Added pnorm and qnorm and corresponding tests in unitTests/runit.stats.R 2010-08-05 Dirk Eddelbuettel * inst/include/Rcpp/stats/norm.h: Added dnorm sugar function * inst/include/Rcpp/stats/t.h: Added dt, pt, qt sugar functions * inst/include/unitTests/runit.stats.R: Added corresponding tests 2010-08-05 Romain Francois * inst/include/Rcpp/sugar/functions/seq_along.h: added seq(int,int) to mimic the R syntax : seq( 0, 5 ) * inst/include/Rcpp/sugar/Range.h: fixed compiler confusion * inst/include/Rcpp/stats: new sugar functions Rcpp::stats::dpois and Rcpp::stats::dbinom inspired by Richard Chandler post on Rcpp-devel: http://lists.r-forge.r-project.org/pipermail/rcpp-devel/2010-August/000940.html * inst/include/Rcpp/sugar/sum.h: preliminary version of Rcpp::sum (does not deal with NA properly yet) 2010-08-04 Romain Francois * inst/include/Rcpp/sugar/: rework sugar matrix so that operator()(int,int) is always used instead of operator[](int) * inst/include/Rcpp/sugar/matrix/outer.h: new implementation based on LazyVector, so that the value from the vector expression is only retrieved once 2010-08-02 Romain Francois * inst/include/Rcpp/XPtr.h: give default values to tag and prot in XPtr ctor 2010-07-30 Romain Francois * inst/doc/Rcpp-quickref/* : new vignette Rcpp-quickref: quick reference guide to Rcpp API 2010-07-28 Romain Francois * inst/include/Rcpp/sugar/exp.h: adapt to stricter standards on solaris/suncc 2010-07-25 Dirk Eddelbuettel * DESCRIPTION: Release 0.8.5 * debian/*: Similarly updated for new release to Debian 2010-07-17 Romain Francois * inst/include/Rcpp/vector/Vector.h: faster lhs use of names, only using callback to R if necessary. (discovered while profiling RProtoBuf) * inst/include/Rcpp/RObject.h : faster lhs and rhs use of RObject::slot, using R API functions R_do_slot and R_do_slot_assign 2010-07-16 Dirk Eddelbuettel * src/Date.cpp: Small fix which may make Solaris/SunStudio happy 2010-07-16 Romain Francois * man/Rcpp-package.Rd : removed old content and point to the Rcpp-package vignette for current guidelines. * DESCRIPTION: Updated to mention sugar and modules 2010-07-10 Romain Francois * src/Makevars: Remove last call to $shell by turning C++0x detection off (and into a switch users can edit) which should make builds more stable * src/Makevars.win: Idem * src/cxx0x/cxx0x.R: Detection script deprecated for now 2010-07-10 Romain Francois * man/CppClass-class.Rd: changed use of \linkS4Class to suppress a warning with the development version of R * man/CppObject-class.Rd: idem 2010-07-09 Dirk Eddelbuettel * DESCRIPTION: Release 0.8.4 * debian/*: Similarly updated for new release to Debian 2010-07-09 Romain Francois * src/RObject.cpp: adapt the SlotProxy class to deal with the special case of the .Data slot (slot<- changes the internal SEXP) * R/Module.R: the C++Class now inherits from "character", to facilitate S4 method dispatch * src/Module.cpp: The CppClass ctor sets the .Data of the C++Class object to an obfuscated name to avoid class names clashes at the R level. 2010-07-08 Romain Francois * inst/include/Rcpp/sugar/functions/head.h: new sugar function : head * inst/include/Rcpp/sugar/functions/tail.h: new sugar function : tail * inst/include/Rcpp/sugar/functions/tail.h: new sugar function : diag 2010-07-07 Dirk Eddelbuettel * inst/README: Updated and now pointing to all the other documentation 2010-07-07 Romain Francois * inst/include/Rcpp/sugar/functions/rep.h: version of rep that takes a primitive as the first argument 2010-07-07 Dirk Eddelbuettel * inst/unitTests/runTests.R: Reverted to running all tests now that tests are reorganised using the one-compile-per-function scheme which significantly speeds up running of the numerous unit tests 2010-07-06 Dirk Eddelbuettel * src/Date.cpp: Imported mktime() from R (which is due to Arthur Olson) 2010-07-06 Romain Francois * inst/include/Rcpp/sugar/functions/ifelse.h: using compile time dispatch based on the NA-ness of the condition type. ifelse handles primitive arguments on the lhs, rhs or both * inst/include/Rcpp/sugar/functions/rev.h: new sugar function: rev 2010-07-05 Romain Francois * inst/include/Rcpp/RcppCommon.h : no more using variadic macros in RCPP_DEBUG * inst/include/Rcpp/vector/Matrix.h: move ncol, nrow, rows and cols in Matrix (used to be in Vector) * inst/include/Rcpp/traits/matrix_interface.h: new SFINAE helper to detect matrix interface (helps matrix sugar expressions) 2010-07-03 Romain Francois * inst/include/Rcpp/traits/result_of.h : also deal with functions taking two arguments (useful for e.g. outer) * inst/include/Rcpp/vector/MatrixBase.h : new CRTP base class for Matrix to facilitate sugar syntax on matrices. * inst/include/Rcpp/sugar/matrix/outer.h : new sugar function: outer * inst/include/Rcpp/sugar/matrix/row.h: new sugar function: row * inst/include/Rcpp/sugar/matrix/col.h: new sugar function: col * inst/include/Rcpp/sugar/matrix/lower_tri.h: new sugar function: lower_tri * inst/include/Rcpp/sugar/matrix/upper_tri.h: new sugar function: upper_tri * inst/include/Rcpp/sugar/functions/rep.h: new sugar function : rep * inst/include/Rcpp/sugar/functions/rep_len.h: new sugar function : rep_len * inst/include/Rcpp/sugar/functions/rep_each.h: new sugar function : rep_each 2010-07-02 Dirk Eddelbuettel * src/RcppStringVector: Now uses std::vector * inst/include/classic/RcppStringVector.h: Idem * inst/unitTests/runit.List.R: Added simple test for RcppStringVector 2010-07-01 Dirk Eddelbuettel * src/RcppDateVector: Index argument is int here as well * src/RcppDatetimeVector: Idem * inst/include/classic/RcppDateVector.h: Idem * inst/include/classic/RcppDatetimeVector.h: Idem * inst/unitTests/runit.List.R: Added simple test for RcppList 2010-06-30 Dirk Eddelbuettel * src/DateVector: Index argument is int; throw declared * src/DatetimeVector: Idem * inst/include/Rcpp/DateVector.h: Idem * inst/include/Rcpp/DatetimeVector.h: Idem 2010-06-28 Romain Francois * inst/include/Rcpp/sugar/Im.h: * inst/include/Rcpp/sugar/Re.h: * inst/include/Rcpp/sugar/Conj.h: * inst/include/Rcpp/sugar/Mod.h: added sugar functions for complex vectors: Re, Im, Conj, Mod 2010-06-27 Dirk Eddelbuettel * DESCRIPTION: Release 0.8.3 * debian/*: Similarly updated for new release to Debian * inst/unitTests/runTests.R: Stop-gap measure to reduce the number of tests run on Windows as we now have so many tests that the build exceeds the time limit granted by the win-builder service. The forced reduction of tests can be overcome by adding --allTests as a command-line argument on Windows, or by running on another platform. 2010-06-25 Romain Francois * inst/include/Rcpp/posix.h: anticipate R 2.12.0 switch of classes POSIXt and POSIXct * inst/include/classic: New home for the 'classic' API headers. Also some refactoring of the internals so that they can interoperate better withuse the new API. 2010-06-24 Romain Francois * inst/include/Rcpp/vector/RangeIndexer.h: factored the RangeIndexer class out of Vector, so that we can at a later time specialize it for character vectors, lists, etc ... 2010-06-24 Dirk Eddelbuettel * inst/include/Rcpp/Date.h: add struct tm member variable and sensible (ie non-intra-day) accessor functions; add SEXP ctor * src/Date.cpp: Implementation of the above * inst/unitTests/runit.Date.R: tests for the above * inst/include/Rcpp/Datetime.h: New Datetime class * src/Datetime.cpp: Implementation for new Datetime class * inst/unitTests/runit.Datetime.R: first tests for Rcpp::Datetime * inst/include/Rcpp/Datetime_forward.h: API Integration * inst/include/Rcpp/DatetimeVector.h: New DatetimeVector class * src/Datetime.cpp: Implementation for new DatetimeVector class 2010-06-23 Dirk Eddelbuettel * src/Date.cpp: Import mktime00() from R's src/main/datetime.c, completed class implementation * inst/include/Rcpp/Date.h: Add mktime00() declaration * inst/include/Rcpp/DateVector.h: New DateVector class * src/Date.cpp: Implementation for new DateVector class 2010-06-23 Romain Francois * inst/include/Rcpp/Date_forward.h: forward declaration of Rcpp::Date and support for wrap( container of Rcpp::Date ), e.g. wrap( vector ) * inst/include/Rcpp/sugar/Range.h: added the concept of range to allow modification of several elements of a vector. * inst/examples/ConvolveBenchmarks: version of the convolution function using sugar indexing. 2010-06-22 Dirk Eddelbuettel * inst/include/Rcpp/Date.h: New Date class (not yet complete) * src/Date.cpp: Implementation for new Date class (not yet complete) * inst/unitTests/runit.Date.R: first tests for Rcpp::Date 2010-06-21 Dirk Eddelbuettel * inst/examples/SugarPerformance/: New example to benchmark the new syntactic 'sugar' classes 2010-06-19 Dirk Eddelbuettel * inst/include/RcppDoxygenExamples.h: Correct three wrong paths for ConvolveBenchmak example files, and add missing FastLM/ examples 2010-06-18 Romain Francois * inst/include/Rcpp/sugar/*: implementation of Rcpp sugar, covering binary operators (<,>,<=,>=,!=,==) for logical vectors or logical expressions, arithmetic operators (+,-,*,/) for vectors and expressions, and several functions similar to the R functions of the same name, currently: abs, all, any, ceiling, diff, exp, ifelse, is_na, lapply, pmin, pmax, pow, sapply, seq_along, seq_len, sign * inst/doc/Rcpp-sugar/Rcpp-sugar.Rnw: vignette documenting Rcpp sugar 2010-06-17 Romain Francois * inst/include/Rcpp/Vector.h: split into more manageable files * inst/include/Rcpp/vector/VectorBase.h: simplify the VectorBase class so that it is just implementing CRTP. It does not inherit from RObject anymore. This will help implementation of sugar. 2010-06-16 Dirk Eddelbuettel * src/RcppDateVector.cpp: Also provide non-const operator()(int i) * inst/include/RcppDateVector.h: Idem 2010-06-16 Romain Francois * inst/include/Rcpp/InternalFunction.h: new class Rcpp::InternalFunction * R/Module.R: R support for Rcpp::InternalFunction * inst/include/Rcpp/Module.h: added the LOAD_RCPP_MODULE macro to allow loading a module from C++ * R/Module.R: if the first argument is an external pointer already, Module assumes it is a module pointer. (R support for the item above) 2010-06-15 Dirk Eddelbuettel * src/RcppDatetimeVector.cpp: Use std::vector internally * inst/include/RcppDatetimeVector.h: Idem * src/RcppDateVector.cpp: Use std::vector internally * inst/include/RcppDateVector.h: Idem 2010-06-14 Dirk Eddelbuettel * src/RcppDatetimeVector.cpp: Add constructor from int * inst/include/RcppDatetimeVector.h: Idem * src/RcppDateVector.cpp: Add constructor from int * inst/include/RcppDateVector.h: Idem 2010-06-13 Dirk Eddelbuettel * src/RcppResultSet.cpp: Proper template specialisation for wrap * inst/include/RcppResultSet.h: Idem * src/RcppDateVector.cpp: Add const qualifier to operator()(int i) * inst/include/RcppDateVector.h: Idem 2010-06-13 Romain Francois * inst/include/Rcpp/Vector.h: added new factory functions for Vector: Vector::import and Vector::import_transform 2010-06-12 Dirk Eddelbuettel * src/RcppDate.cpp: Simple RcppDate(SEXP) ctor added * inst/include/RcppDate.h: Idem * src/RcppResultSet.cpp: carved out four new wrap() functions by splitting the existing code in add() methods off 2010-06-11 Romain Francois * R/help.R: workaround to allow the syntax "Rcpp ? something" to bring Rcpp documentation * inst/include/Rcpp/Module.h: support for exposing public data members * inst/doc/Rcpp-modules/Rcpp-modules.Rnw: a section to mention fields as a way to expose data members * inst/Rcpp/traits/is_na.h : new helper class Rcpp::traits::is_na 2010-06-09 Dirk Eddelbuettel * DESCRIPTION: Release 0.8.2 * debian/*: Similarly updated for new release to Debian 2010-06-08 Romain Francois * src/RcppCommon.cpp: track if demangling is available (currently only available with gcc) 2010-06-08 Dirk Eddelbuettel * DESCRIPTION: Release 0.8.1 * debian/*: Similarly updated for new release to Debian 2010-06-07 Dirk Eddelbuettel * inst/doc/Rcpp-extending*: Extended mini vignette "Rcpp-extending" 2010-06-07 Romain Francois * inst/doc/Rcpp-extending*: Added new mini vignette "Rcpp-extending" 2010-06-05 Dirk Eddelbuettel * inst/doc/Rcpp-FAQ*: Extended mini vignette "Rcpp-FAQ" 2010-06-05 Romain Francois * inst/doc/Rcpp-FAQ*: Added new mini vignette "Rcpp-FAQ" 2010-06-04 Romain Francois * inst/include/Rcpp/Module.h: * R/Module.R: support for properties of C++ objects 2010-06-03 Romain Francois * src/RcppCommn.cpp: added show method for C++Object and C++Class * inst/include/Rcpp/XPtr.h: getTag and getProtected are deprecated, will be removed in Rcpp 0.8.2. methods tag and prot should be used instead. The new methods support both lhs and rhs use. 2010-06-02 Romain Francois * inst/include/Rcpp/traits/r_type_traits.h: added missing support for std::complex, needed by RcppArmadillo * src/RcppCommon.cpp: added internal .Call function as_character_externalptr to extract the address of the pointer wrapped by an external pointer 2010-06-01 Romain Francois * inst/doc/Rcpp-package*: new mini vignette "Rcpp-package" to improve the documentation of Rcpp.package.skeleton and details the steps involved in making a package that uses Rcpp * inst/doc/Rcpp-modules/Rcpp-modules.Rnw: document how to use modules in other packages (namespace, etc ...) * R/Rcpp.package.skeleton: added the module argument * R/Module.R: prompt method for Module objects to generate skeleton of an Rd file with the list of functions and classes defined by the module. 2010-05-30 Romain Francois * R/Module.R: completion for C++ modules. 2010-05-29 Romain Francois * R/Module.R: when a Module is loaded, it creates extensions of the class C++Object for each internal class to enable S4 dispatch * R/Module.R: support for completion of methods of C++ objects 2010-05-28 Romain Francois * R/cppfunction.R: withdrawn, we now use inline::cxxfunction which is more flexible and we no longer need to depend on inline * man/cppfunction.Rd: * * inst/unitTests/runTests.R: The tests now require a recent version of inline (>= 0.3.4.2) 2010-05-27 Romain Francois * inst/include/Rcpp/Module.h: adding support for registering a free function that takes a pointer to the class of the wrapped object as first argument in class_ 2010-05-26 Romain Francois * inst/include/Rcpp/Module.h: * src/Module.cpp : limited support for exposing c++ classes in Rcpp modules * R/Module.R : classes "C++Class", "C++Object" holding external pointers and $ method dispatching internally 2010-05-24 Dirk Eddelbuettel * src/Rcpp*.cpp: Moved template code from the older API to headers headers in inst/include/*.h; removed empty source files 2010-05-21 Romain Francois * R/exceptions.R: rework rcpp_tryCatch to prevent evaluating the expression too early (reported by Doug Bates on Rcpp-devel) * src/Evaluator.cpp: rework Evaluator::run() so that it correctly evaluates inside an environment (reported by Doug Bates on Rcpp-devel) 2010-05-20 Romain Francois * inst/include/Rcpp/Vector.h : correct throw specs for vector_from_string (reported by Brian Ripley from solaris) * inst/include/Rcpp/internal/Proxy_Iterator.h: fixed constness of several operators in Proxy_Iterator to try to suite suncc/solaris * inst/include/Rcpp/config.h: define RCPP_ENABLE_MODULES to hide the experimental module features from the official api * R/getDLL.R: removed and promoted to getDynLib in inline 2010-05-19 Romain Francois * inst/include/Rcpp/as.h: add throw specification to as specialization, reported by suncc compiler on CRAN checks * inst/include/Rcpp/Module.h : adding the concept of Rcpp modules, inspired from boost.python * R/Module.R: R side support for modules * R/getDLL.R: generic (s4) function to get the DLL based on either its name e.g. getDLL( "Rcpp" ) or an object of class CFunc (from the inline package) 2010-05-17 Dirk Eddelbuettel * DESCRIPTION: Release 0.8.0 * debian/*: Similarly updated for new release to Debian 2010-05-11 Romain Francois * inst/include/Rcpp/traits/*.h: added support for long long int and unsigned long long int, which is size_t on win64 2010-05-10 Romain Francois * inst/include/Rcpp/Dimension.h: added a const operator[], requested in the Rcpp-devel thread : http://article.gmane.org/gmane.comp.lang.r.rcpp/327 * inst/include/Rcpp/preprocessor.h: added __rcpp_info__ pseudo reflection information to RCPP_XP_FIELD * inst/unitTests/runit.macros.R: testing RCPP_XP_FIELD 2010-05-06 Romain Francois * inst/include/Rcpp/DataFrame.h: DataFrame( RObject::SlotProxy ) and DataFrame( RObject::AttributeProxy ) constructors * inst/include/Rcpp/DataFrame.h: DataFrame::create now uses the R function data.frame and not as.data.frame, which respects the stringsAsFactors argument. * inst/include/Rcpp/preprocessor.h: added RCPP_XP_FIELD_SET and RCPP_XP_FIELD_SET macros to generate getter and setter for a field of a class handled by an external pointer. RCPP_XP_FIELD is modified to generate both getter and setter 2010-05-05 Romain Francois * inst/include/Rcpp/S4.h: S4 gains a "is" method to identify if an object is of a given S4 class, following Doug's advice in lme4a * inst/include/Rcpp/algo.h: new STL-like algorithms Rcpp::any and Rcpp::any_if * inst/include/Rcpp/Vector.h: Vector gains a constructor taking an RObject::SlotProxy and a constructor taking an RObject::AttributeProxy, allowing this construct NumericVector x( y.slot( "foo" ) ) 2010-05-04 Romain Francois * inst/include/Rcpp/preprocessor_generated.h: new macros to hide most of the boiler plate code RCPP_FUNCTION_0, ..., RCPP_FUNCTION_1 RCPP_FUNCTION_VOID_0, ... RCPP_XP_METHOD_0, ... RCPP_XP_METHOD_CAST_0, ... RCPP_XP_METHOD_VOID_0, ... 2010-05-03 Dirk Eddelbuettel * inst/unitTests/runit.DataFrame.R: unit tests for Rcpp::DataFrame 2010-05-03 Romain Francois * inst/include/Rcpp/exceptions.h : move the what methods of exception classes so that the symbol is defined for sure in the shared library. This seems to make a difference due to vague linkage issues. Decrypted from http://gcc.gnu.org/wiki/Visibility 2010-05-02 Romain Francois * inst/include/Rcpp/as.h: add throw(not_compatible) in Rcpp::as * inst/include/Rcpp/clone.h: the clone(SEXP) moves to the headers 2010-04-28 Romain Francois * inst/include/Rcpp/Vector.h: changed Vector( size_t ) to Vector( int ) to allow Vector( 0 ) and Vector::create() 2010-04-27 Romain Francois * inst/include/Rcpp/preprocessor.h: new macro RCPP_ENUM_TRAITS to generate traits needed to support wrap for an enum type (used in RProtoBuf) * R/Rcpp.package.skeleton.R: correctly handle the example_code argument 2010-04-26 Romain Francois * inst/include/Rcpp/DataFrame_*.h: new class Rcpp::DataFrame * inst/include/Rcpp/preprocessor.h: added RCPP_XP_FIELD macro * inst/include/Rcpp/preprocessor_generated.h: added the set of macros RCPP_WRAPPER_0, ..., RCPP_WRAPPER_65 to help wrapping existing C functions into .Call callables functions 2010-04-16 Dirk Eddelbuettel * DESCRIPTION: Release 0.7.12 * debian/*: Similarly updated for new release to Debian * RcppLdpath.R: Remove shQuote() from trying to protect spaces in Windows pathnames as it breaks backticks expansion usage 2010-04-06 Romain Francois * inst/include/Rcpp/traits/*.h: added support for long 2010-04-04 Romain Francois * inst/include/* : headers are moved to inst/include so that they are are not duplicated on multi arch platforms * R/RcppLdPath.R: RcppCxxFlags is updated to reflect the above change * src/Makevars: simplified as the headers don't need to be copied to each arch lib directory anymore * src/Makevars.win: same * inst/include/Rcpp/Vector.h : Vector<> gains a templated assignment operator 2010-04-02 Romain Francois * src/Rcpp/Formula.h: new Rcpp::Formula class * inst/unitTests/runit.Formula.R: unit test for Rcpp::Formula 2010-03-26 Dirk Eddelbuettel * DESCRIPTION: Release 0.7.11 * debian/*: Similarly updated for new release to Debian * inst/examples/FastLM: Updated to use new create() method * inst/unitTests/runit.Matrix.R: New unit test new Matrix constructors 2010-03-26 Romain Francois * src/Rcpp/Vector.h: Fixed bug in diag() 2010-03-23 Dirk Eddelbuettel * inst/unitTests/runit.CharacterVector.R: New unit test for bug found by Doug 2010-03-23 Romain Francois * src/Rcpp/Vector.h: fixed critical bug. Vector did not have copy constructor and assignement operators * src/exceptions.cpp: added the demangle helper function to help debugging * src/RcppCommon.h: added the DEMANGLE macro and the RCPP_DEBUG macro to help debugging. 2010-03-20 Romain Francois * src/Rcpp/Vector.h : Vector gains a templated fill method to fill all elements of a vector with the same value 2010-03-19 Romain Francois * src/Rcpp/Vector.h : Matrix gains a diag method to create diagonal matrices * src/Rcpp/Named.h: Named is no longer a class, but a templated function. This preserves all the existing interface, but also allows Named to be used in making simple vectors, e.g through the Vector::create factory functions * src/Rcpp/Vector.h: Vector gains the "create" factory methods taking up to 20 arguments that can be named (using the Argument class or the _ placeholder) * src/Rcpp/make_list.h: removed since Vector::create does the job more generically and more efficently 2010-03-19 Dirk Eddelbuettel * src/Rcpp/Vector.h: Matrix now also accepts a single int in the constructor to create matrices of square sizes * src/RcppFrame.h: Patch by Alistair Gee to make ColDatum more robust src/RcppFrame.h: Idem * inst/unitTests/runit.RcppFrame.R: New unit test for RcppFrame 2010-03-16 Romain Francois * src/Rcpp/make_list.h: set of helper factories make_list to facilitate production of named generic vectors. * src/Rcpp/Named.h: new class Rcpp::Argument similar to Named but does not contain the object, just the name. The templated Argument::operator= makes a Named. This allows an application to define a set of arguments that it uses in order to have a nicer construct. see the runit.Argument.R file for an example 2010-03-15 Dirk Eddelbuettel * DESCRIPTION: Release 0.7.10 * debian/*: Similarly updated for new release to Debian * RcppLdpath.R: Use shQuote() to protect spaces in Windows pathnames 2010-03-15 Romain Francois * inst/codebloat/codebloat.R: script to generate code (creating a pairlist with up to n arguments). * src/Rcpp/Function.h : Function gains a body method to retrieve the body of the function (using the BODY macro from Rinternals.h) 2010-03-14 Romain Francois * src/Rcpp/S4.h : Rcpp::S4 gains a new constructor taking a string reference and building a new S4 object of that type. This throws an exception if the object is not successfully created (e.g the class is not a known S4 class) 2010-03-13 Romain Francois * src/Rcpp/S4.h : new class Rcpp::S4 2010-03-12 Dirk Eddelbuettel * DESCRIPTION: Release 0.7.9 * debian/*: Similarly updated for new release to Debian 2010-03-12 Romain Francois * inst/unitTests/runit.environments.R: mac os has a different locale * src/Rcpp/traits/is_convertible.h: the detection is now performed without the help of cxx0x or tr1 which makes it compatible with gcc 4.2 * src/Rcpp/traits/is_same.h: new traits is_same to help detect if two types are the same (not currently used) * src/Rcpp/traits/wrap_type_traits.h: use "unsigned int" instead of "size_t" in the template specializations (64 bit compatibility) 2010-03-10 Dirk Eddelbuettel * R/RcppLdPath.R: More specific about quote-protection of path on Windows * inst/doc/Rcpp-introduction.Rnw: Applied several fixes kindly suggested by Matt Kraai 2010-03-09 Dirk Eddelbuettel * DESCRIPTION: Release 0.7.8 * debian/*: Similarly updated for new release to Debian 2010-03-09 Romain Francois * man/Rcpp.package.skeleton.Rd: some more documentation 2010-03-07 Dirk Eddelbuettel * inst/doc/Rcpp-introduction.Rnw: Added vignette based on a recent paper 2010-03-07 Romain Francois * src/Rcpp/StringTransformer.h: new class template StringTransformer that allows using a character by character function to modify elements of a string vector (example available in package RcppExamples) * src/Rcpp/Vector.h: string_proxy::iterator is made const char* because R uses a global cache for the CHARSXP 2010-03-05 Romain Francois * src/Rcpp/Vector.h: string_proxy gains begin(), end(), size(), and operator[] for iterating over characters of the CHARSXP 2010-03-02 Romain Francois * src/Rcpp/Vector.h: Vector gains a nested r_type type that is an integral_constant to facilitate TMP * src/RcppCommon.{h,cpp}: added RCPP_CALL_VECTOR and RCPP_CALL_MATRIX macros to facilitate calling a function templated by T = Vector the macro hides the boiler-plate switch( TYPEOF(x) ){ case INTSXP : ... } 2010-03-01 Romain Francois * src/Rcpp/Vector.h: more typedef : CharacterMatrix, StringMatrix, GenericMatrix, ExpressionMatrix, ListMatrix * src/ExpressionVector.cpp : replaced by templates in Vector.h * src/Rcpp/Vector.h: use templates to cover ExpressionVector additional methods : eval() and eval(const Environment& ) 2010-02-28 Romain Francois * src/Rcpp/Vector.h : more generic code for vectors. All vector types are now generated from the template Rcpp::Vector where RTYPE is one of INTSXP, LGLSXP, REALSXP, RAWSXP, STRSXP, VECSXP or EXPRSXP. 2010-02-24 Romain Francois * src/Rcpp/exceptions.h: some exception classes factored out * src/Rcpp/VectorBase.h: now a template, using the Curiously recurring template pattern (the type parameter is the derived class) * src/Rcpp/SEXP_Vector.h: the intermediate class SEXP_Vector_Base is removed, reverting the change on 2010-02-09. This will facilitate the introduction of the Curiously recurring template pattern on vectors * src/Rcpp/MatrixRow.h : Row has been factored out of SimpleVector into a separate template class Rcpp::MatrixRow * src/Rcpp/SimpleVector.h: gains a row method that returns a SimpleVector::Row, aka MatrixRow * src/Rcpp/CharacterVector.h : gains a row method that returns a CharacterVector::Row, aka MatrixRow * src/Rcpp/SEXP_Vector.h : gains a row method that returns a SEXP_Vector::Row aka MatrixRow * src/Rcpp/MatrixColumn.h : Column class to access elements of a matrix column 2010-02-23 Romain Francois * src/Rcpp/SimpleVector.h: added the class SimpleVector::Row to support STL algorithms working on a row of a matrix. * src/Rcpp/internal/ListInitialization.h: new class that supports use of operator, (inspired from blitz) giving this notation: IntegerVector x(3); x = 0, 1, 2 ; 2010-02-21 Romain Francois * src/Rcpp/as.h: more generic as implementation. primitive types are handled through templates which for example makes it possible to as in RProtoBuf. std::deque and std::list become as'able when T is a primitive type as indicated by the Rcpp::traits::r_type_traits * src/as.cpp: removed since as is now fully implemented via templates 2010-02-19 Romain Francois * src/Rcpp/as.h: as now delegates to a template class Exporter since partial specialization was not possible with the interface of as. It is possible to partially specialize Exporter. std::vector when T is a primitive type is now handled through Exporter. Some support Exporter have been added and used in RcppArmadillo * src/Rcpp/internal/wrap.h: support for std::complex and std::complex (needed for RcppArmadillo) * src/Rcpp/traits/wrap_type_traits.h : The Importer concept has been introduced to support wrap() of more types. If a class has a typedef "r_import_type" then the following interface is assumed and used. The corresponding class must have methods int size() and r_import_type get(int). As usual further dispatch is performed based on r_import_type (primitive, etc ...). RcppArmadillo has an example of this for wrapping arma::field objects using the FieldImporter class. 2010-02-18 Romain Francois * src/Rcpp/Language.h: added fixed_call to support STL algorithms similar to generate. * inst/unitTests/runit.Language.R: unit test for fixed_call * src/Rcpp/Environment.h: Environment gains a find method which searches for a binding in the associated environment but also in all its parents, as opposed to get which just looks in the environment. 2010-02-17 Dirk Eddelbuettel * src/Makevars: Simplified as RcppExample.cpp is shipped off * src/Makevars.win: Simplified as RcppExample.cpp is shipped off 2010-02-17 Romain Francois * src/Rcpp/SEXP_Vector.h : The lhs use of operator[](string) has been improved so that if the name does not exist in the vector, the vector grows. * inst/unitTests/runit.GenericVector.R: new unit test test.List.implicit.push.back about the new operator[](string) * src/Rcpp/SimpleVector.h : new template class SimpleMatrix that derives from SimpleVector, with typedefs NumericMatrix IntegerMatrix, LogicalMatrix, RawMatrix, ComplexMatrix. The actual functionality comes from SimpleVector but SimpleMatrix has constructors and assignment operators that behave slighlty differently : they check that their input is a matrix * src/Rcpp/traits/wrap_type_traits: added support for float * src/Rcpp/Rcpp.h: now including RObject here instead of in RcppCommon.h because RObject is a client of implicit converters (attr) and so we need to leave a hook for third party code, e.g. RcppArmadillo 2010-02-16 Dirk Eddelbuettel * src/Makevars.wim: Applied improved version kindly supplied by Brian Ripley * R/RcppExample.R, man/RcppExample.Rd: Moved to RcppExamples package * man/RcppDate.Rd, man/RcppParams.Rd, man/RcppResultSet.Rd, RcppVector.Rd, src/RcppExample.cpp: Idem * inst/examples/FastLM: Slightly reworked, actual code factored out and used in a per-library demo/test script and a joint benchmark.r 2010-02-15 Dirk Eddelbuettel * inst/examples/FastLM: New example directory with two 'fast lm' implementations using, respectively, GNU GSL (in C) and Armadillo (in C++); Armadillo is seen as faster for lack of extra copying 2010-02-14 Romain Francois * src/Rcpp/Language.h: accepting Function in unary_call and binary_call to support STL algorithms using R functions. 2010-02-14 Dirk Eddelbuettel * DESCRIPTION: Release 0.7.7 * debian/*: Similarly updated for new release to Debian 2010-02-14 Romain Francois * src/Rcpp/Language.h: fixing serious bug. The 'code bloat' constructors taking a std::string did not explicitely create a symbol, so the created calls were wrong. * src/Rcpp/Language.h: new template classes Rcpp::unary_call and Rcpp::binary_call to allow use of Language objects in STL algorithms. * inst/unitTests/runit.Language.R: unit test and example of using unary_call and binary_call 2010-02-12 Dirk Eddelbuettel * DESCRIPTION: Release 0.7.6 * NEWS: Updated * debian/*: Similarly updated for new release to Debian 2010-02-12 Romain Francois * src/Rcpp/Environment.h: Environment gains a default constructor. This is needed for RInside. 2010-02-10 Romain Francois * src/Rcpp/SEXP_Vector.h: SEXP_Vector (and therefore ExpressionVector and GenericVector, a.k.a List) gain methods push_front, push_back and insert that are templated and use the 'implicit wrap idiom' to add an element to the front or, the back or an arbitrary (valid) position of the list, pushing other elements. Internally the SEXP is actually copied. * src/Rcpp/SEXP_Vector.h: SEXP_Vector gains an erase method modelled after std::vector<>::erase to remove elements from a list. erase has a single iterator (or int) form that removes one element, and a range based version erase(iterator first, iterator last) that erases all elements between first and last. * src/Rcpp/VectorBase.h: VectorBase gains a version of offset to support retrieving the offset of a given name of a vector: offset( const std::string& name) * src/Rcpp/SimpleVector.h : uses the new offset to perform names based indexing (FR #808) * src/Rcpp/SEXP_Vector.h: same * src/Rcpp/CharacterVector.h: same * inst/unitTests/runit.GenericVector.R: unit tests for names based indexing * inst/unitTests/runit.IntegerVector.R: same * inst/unitTests/runit.CharacterVector.R: same 2010-02-09 Dirk Eddelbuettel * inst/skeleton/Makevars: Use $R_HOME/bin indirection * inst/skeleton/Makevars.win: Idem 2010-02-09 Romain Francois * src/Rcpp/SEXP_Vector.h: The functionality of SEXP_Vector that was independent of the template parameter was factored out into a new base class SEXP_Vector_Base. This follows the advice of item 44 of Effective C++. * src/Rcpp/SEXP_Vector.h: SEXP_Vector_Base::iterator is introduced as well as methods begin() and end() to support use of stl algorithms on lists. * inst/unitTests/runit.GenericVector.R: new unit test for testing SEXP_Vector_Base::iterator and illustrating a c++ version of lapply using std::transform * src/Rcpp/CharacterVector.h: CharacterVector gains a random access iterator, begin() and end() to support STL algorithms. The iterator dereferences to a StringProxy * src/Rcpp/RObject.h: remove RObject::asFoo methods which were deprecated in Rcpp 0.7.5. The alternative is to use Rcpp::as 2010-02-08 Dirk Eddelbuettel * DESCRIPTION: Release 0.7.5 * debian/*: Similarly updated for new release to Debian 2010-02-07 Romain Francois * src/RcppSexp.h: class RcppSexp removed (was deprecated) * src/Rcpp/*.h: defaults copy constructors and assignment operators have been added for all classes extending RObject. Otherwise the compiler generates default versions that circumvent the garbage collection management 2010-02-06 Dirk Eddelbuettel * inst/examples/functionCallback/newApiExamples.r: Added simpler version using the new API * inst/examples/functionCallback/newApiExamples.r: Updated * inst/unitTests/runit.RcppVector.R: added test for NA/NaN * inst/unitTests/runit.RcppMatrix.R: idem 2010-02-06 Romain Francois * src/Rcpp/RObject.h : asFoo methods are deprecated. * src/Rcpp/DottedPair.h : using R_len_t instead of int to anticipate future changes in R * src/Rcpp/VectorBase.h: idem * src/DottedPair.cpp: idem * src/VectorBase.cpp: idem * src/as.cpp: idem * src/Rcpp/SimpleVector.h: SimpleVector is now only parameterized by the SEXP type. The c type is automatically retrieved using the storage_type trait class. 2010-02-05 Dirk Eddelbuettel * inst/THANKS: Added in order to show our appreciation 2010-02-04 Romain Francois * src/Rcpp/DottedPair.h: code bloat to allow creation of DottedPair containing up to 5 objects without variadic templates RInside for example needs this. * src/Rcpp/Language.h: same * src/Rcpp/Pairlist.h: same * src/Rcpp/grow.h: same * src/Rcpp/internal/wrap.h : one more level of dispatch to identify if there needs a cast between the primitive iterated over and the target storage type. For example size_t needs a cast to be stored in an integer vector. This will be useful for the RProtoBuf package with e.g. types like google::protobuf::int64 which needs to be cast to double. Consequently the special handling of bool has been withdrawn as bool can now be assimilated to a primitive type that does require casting (to int) 2010-02-03 Romain Francois * src/Rcpp/VectorBase.h: VectorBase gains a names method that uses the proxy pattern to get or set the names of a vector * src/Rcpp/DottedPair.h: DottedPair gains a << operator to add an object to the queue of the list. this is much useful when variadic templates are not available * src/Rcpp/RObject.h: support for slot assignment. The slot method now uses the proxy pattern. * inst/unitTests/runit.S4.R: unit test for slot assignment 2010-02-02 Romain Francois * src/internal/r_coerce.h : coercion is now handled by a templated function r_coerce, for example r_coerce takes an int, performs coercion and returns a double * src/traits/has_iterator.h : introduce a trait that uses the SFINAE idiom to check if a class T has a nested type called "iterator". This helps wrap dispatch which now uses the range based wrap implementation in that case * src/Rcpp/wrap.h: The range based wrap function is exposed at the Rcpp:: level. The interface is wrap( InputIterator first, InputIterator last ) and dispatch is performed internally using iterator traits 2010-02-01 Romain Francois * src/traits/wrap_type_traits.h: new namespace Rcpp::traits:: to host Rcpp type traits used by the template meta programming dispatching of wrap 2010-01-31 Dirk Eddelbuettel * doxyfile: several updates plus improvements related to examples/ * src/RcppDoxygenExamples.h: A phony empty file needed mainly to define a few \example tags for Doxygen 2010-01-31 Romain Francois * src/Rcpp/internal/wrap.h: more wrap for stl templates are candidate for wrap (when T can be wrapped) std::list -> vector or list std::multiset -> vector or list std::map -> named vector or named list std::multimap -> named vector or named list std::tr1::unordered_map -> named vector or named list std::tr1::unordered_set -> vector or list std::tr1::unordered_multiset -> vector or list * inst/unitTests/runit.wrap.R : unit tests for the new wrappable types 2010-01-30 Dirk Eddelbuettel * DESCRIPTION: Release 0.7.4 * debian/*: Similarly updated for new release to Debian * inst/unitTests/runit.RcppMatrix.R: also test STL return * inst/unitTests/runit.RcppVector.R: added 2010-01-30 Romain Francois * src/Rcpp/internal/wrap.h: rework wrap using traits and template meta programming. wrap is now really a template and has many generated specializations. This file is a private header and should only be included by RcppCommon.h * src/Rcpp/Language.h: Language gains Function aware constructors and eval methods 2010-01-28 Romain Francois * src/Rcpp/DottedPair.h: DottedPair::Proxy are no more lazy, i.e traversal of the pair list happens at construction time, so that the proxy can be created once and used many times more efficiently. * src/Rcpp/DottedPair.h: Pairlist and Language are now derived from the new virtual class DottedPair since both class were almost identical * src/Rcpp/SimpleVector.h: simple vectors gain a range based assign method and a range based assign constructor * inst/unitTests/runit.IntegerVector.R: new unit test test.IntegerVector.range.constructors * src/Rcpp/Dimension.h: new class Rcpp::Dimension to support creation of vectors with dimensions * src/Rcpp/*Vector.h: using Rcpp::Dimension * src/Rcpp/SimpleVector.h: data is initialized with 0 when the object is constructed from size or Dimension constructor * inst/unitTestsrunit.CharacterVector.R: new unit test to test constructors using Dimension * inst/unitTests/runit.IntegerVector.R: idem * inst/unitTests/runit.GenericVector.R: idem * R/unit.tests.R: new unexported function "test" to trigger unit tests using installed test cases * src/Rcpp/CharacterVector.h: minor bug fix in assign * inst/unitTest/runit.RcppResultSet.R: compare time using as.numeric to avoid timezone problems 2010-01-27 Dirk Eddelbuettel * inst/unitTests/runit.RcppMatrix.R: added * inst/unitTests/runit.RcppMatrixView.R: added * inst/unitTests/runit.RcppVector.R: added * inst/unitTests/runit.RcppVectorView.R: added 2010-01-27 Romain Francois * src/Rcpp/CharacterVector.h: CharacterVector gains a default constructor * src/Rcpp/CharacterVector.h: CharacterVector gains range constructors and range based assign methods facilitating construction from iterators * inst/unitTests/runit.CharacterVector.R: unit tests for assign and range based constructors * src/Rcpp/CharacterVector.h: CharacterVector::StringProxy gets a printing operator <<(std::ostream& ) * src/Rcpp/Environment.h: removed the static Environment::RCPP_NAMESPACE which caused problems when embedding R * src/Rcpp/RObject.h: RObject::AttributeProxy::operator RObject replaced by templated implicit conversion operator, delegating the actual work to as<>. * src/Environment.h: Binding::operator RObject is removed since it can be automatically generated by the templated implicit conversion operator * man/RcpUnitTests.Rd: fix html rendering * inst/doc/Makefile: clean the index.html file before copying it 2010-01-26 Dirk Eddelbuettel * src/RcppDatetime.cpp: New SEXP-based constructor * src/RcppDatetime.h: idem, bug fix for operator- * src/RcppDate.h: new accessor getJulian() [relative to epoch just like R's julian()] to complement getJDN() * inst/unitTests/runit.RcppDatetime.R: added 2010-01-26 Romain Francois * src/Rcpp/clone.h: explicit cloning of RObjects. The clone template function creates a new object of the same class as the object it is passed in, encapsulating a duplicate of the SEXP contained by the input RObject. * src/Rcpp/r_cast.h: new template function to handle casts from one SEXP to another. This is mostly useful internally * src/Rcpp/VectorBase.h: VectorBase gains a offset method that is responsible to calculate the correct offset based on variable number of size_t arguments. currently the number of arguments can be 1 (vector indexing) and 2 (matrix indexing) but arbitrary number of arguments will be added later for arbitrary array-like indexing. * src/Rcpp/SimpleVector.h: outsourcing offset calculation to VectorBase::offset * src/Rcpp/CharacterVector.h: use offset to implement matrix-like indexing for matrices of strings * inst/unitTests/runit.CharacterVector.R: unit test for matrix indexing (test.CharacterVector.matrix.indexing) * inst/Rcpp/SEXP_Vector.h: use offset to implement matrix like indexing on lists * inst/unitTests/runit.GenericVector.R: unit test for matrix indexing (test.List.matrix.indexing) 2010-01-26 Dirk Eddelbuettel * inst/unitTests/runit.RcppDate.R: added 2010-01-25 Romain Francois * src/Rcpp/wrap.h: wrap is back at being a template. The template parameter T is first converted to SEXP implicitely and the wrap(SEXP) method is used. This allows clients to only have to implement an implicit conversion to SEXP operator for their class and have wrap for free. * src/Rcpp/SEXP_Vector.h: factored out ExpressionVector and GenericVector into a templated SEXP_Vector class parameterized by the SEXP type (VECSXP or EXPRSXP). GenericVector and ExpressionVector now are generated from the template. This will ease adding features to both classes. * src/as.cpp: also use coercion for as, as, as as (FR #768) * src/Rcpp/as.h: smarter template as, now the template attempts to create an object by passing the SEXP as the first parameter, so any class that has a constructor taking a SEXP can be as<>'ed. see item below for how this can be useful * src/Rcpp/Environment.h: lhs use of Environment::Binding is now a bit smarter and uses as<> to implicitely convert the SEXP to the requested type, so that if as makes sense, this works: Foo foo = env["x"] ; * src/Rcpp/Environment.h: Environment::assign gains a templated form so that we can assign anything that can be wrapped to a name in an environment. * inst/unitTests/runit.environments.R: new unit test 'test.environment.assign.templated' to test the templated assign * src/Makevars(.win?): listen to the RCPP_CXX0X environment variable and if set to "yes" attempt to add c++0x support if possible 2010-01-24 Dirk Eddelbuettel * configure.in: Withdrawn as OS X universal binaries are only built when there is src/Makevars and neither src/Makefile nor configure * configure: idem * src/Makevars: Again a static file, content copied from Makevars.in, -std=c++0x selection back to simply unabling a comment 2010-01-24 Romain Francois * src/SimpleVector.h : new template to replace simple vector classes. now NumericVector, IntegerVector, LogicalVector, ComplexVector and RawVector are all generated from the same template class. A first attempt at matrix indexing is added as part of this. * inst/unitTests/runit.NumericVector.R: new unit tests about matrix indexing * src/Rcpp/VectorBase.h: added the exception not_a_matrix that is thrown when attempting to perform matrix indexing on a vector that is not a matrix. 2010-01-23 Dirk Eddelbuettel * inst/unitTests/runit.RcppParams.R: added * inst/unitTests/runit.RcppResultSet.R: added 2010-01-23 Romain Francois * src/wrap.cpp: s/copy/std::copy/ * src/RcppDateTime.h: explicitely include (win64 warning) 2010-01-22 Romain Francois * src/Makevars.win: disable c++0x entirely (for now) * src/Rcpp/Environment.h: make sure what() is const. (suncc finding) * src/RcppCommon.h: pre declare classes, as an attempt to deal with the suncc warning "RObject may not have a type qualifier." * src/Rcpp/*.h: make sure RcppCommon.h is the first included header * src/*cpp: make sure foo.cpp only include Rcpp/foo.h * src/Environment.cpp: use Evaluator instead of R_ToplevelExec * src/RcppFunction.{h,cpp}: listen to some suncc warnings * src/RcppFrame.cpp: listen to some suncc warnings * src/as.cpp: use transform instead of assign, which should make the code more portable (particularly suncc) and also deal with coercion 2010-01-21 Dirk Eddelbuettel * DESCRIPTION: Release 0.7.3 * debian/*: Similarly updated for new release to Debian * INDEX: updated * configure.in: Some more small cleanups * inst/skeleton/Makevars.win: Add missing default file 2010-01-21 Romain Francois * configure.in: Some small cleanups, add RCPP_CXX0X env var 2010-01-20 Romain Francois * src/*: make update private virtual in RObject and couple it with setSEXP so that it gets called automatically, instead of manually * src/*: move more code depending on c++0x from cpp files to header files 2010-01-20 Dirk Eddelbuettel * configure.in: Detect C++ capabilties (via g++ major/minor) via small C++ program embedded in autoconf macro 2010-01-19 Romain Francois * configure.in: use the cxx0x.R script to discover if the compiler being used is c++0x capable * configure: regenerated from updated configure.in * src/Makevars.in: using CLINK_CPPFLAGS variable * src/Makevars.win: using CLINK_CPPFLAGS variable with the cxx0x.R discovery script 2010-01-18 Dirk Eddelbuettel * R/RcppLdpath.R: Rewrote logic for LdFlags() to decide when linking is static: default now is everywhere but Linux, and choices can be overriden as before 2010-01-18 Romain Francois * inst/discovery/cxx0x.R: replaces the cxx0x.c file to take care of compiling, etc... 2010-01-17 Romain Francois * src/exceptions.cpp: slightly less dumb exception logic on non GCC compilers. exceptions will now trigger an R error with a default message (we don't attempt to get the exception class or message because we don't know how to) * src/Rcpp/Pairlist.h: Pairlist lacked a default constructor which is needed when the variadic templates are not available * inst/unitTests/*: add -std=c++0x in inline when necessary * R/RcppLdPath.R : new script RcppCxx0xFlags() and Cxx0xFlags() that compile, load and call a simple C file in order to check the compiler version and add the -std=c++0x flag * inst/discovery/cxx0x.c: discovery script. simple C script that returns "-std=c++0x" if it is compiled with GCC >= 4.3 and "" otherwise 2010-01-16 Dirk Eddelbuettel * src/Rcpp/*h: call Rf_length() etc as ::Rf_length() to ensure we get the one from the top-level namespace 2010-01-16 Romain Francois * src/Rcpp/Environment.h: Environment gains a new_child method to create an environment enclosed by this * inst/unitTests/runit.environments.R: unit test for new_child * src/Rcpp/ExpressionVector.h: ExpressionVector gains a convenience methods eval to evaluate itself * inst/unitTests/runit.ExpressionVector.R: added unit tests for ExpressionVector::eval * src/Rcpp/ExpressionVector.h: ExpressionVector gains a constructor ExpressionVector( const std::string& ) that parses the string as R code * inst/unitTests/runit.ExpressionVector.R: added unit tests to cover the new constructor * src/Rcpp/Environment.h : the Rcpp namespace is cached because we use it in many places and retrieving it is an "expensive" operation that requires a round trip to the R side * src/Evaluator.cpp: use the cached Rcpp namespace * R/Rcpp.package.skeleton: now generating example C++ and R code that uses Rcpp, also the generated Makevars contains a hack so that the generated package can pass check (after edition of Rd files, NAMESPACE, etc ...) * inst/skeleton: added example code used by the skeleton generator 2010-01-15 Romain Francois * src/Rcpp/NumericVector.h: cache the start of the array to improve performance of operator[] * src/NumericVector.cpp: idem * src/Rcpp/IntegerVector.h: * src/Rcpp/RawVector.h: * src/Rcpp/ComplexVector.h: * src/Rcpp/LogicalVector.h: idem * src/IntegerVector.cpp: * src/RawVector.cpp: * src/ComplexVector.cpp: * src/LogicalVector.cpp: idem 2010-01-13 Romain Francois * R/cpp.package.skeleton.R: new function cpp.package.skeleton to extend the code generation performed by package.skeleton to Rcpp features * man/cpp.package.skeleton.Rd: documentation for cpp.package.skeleton * src/Rcpp/VectorBase.h: new virtual class Rcpp::VectorBase to manage common things of all vectors (length, names, etc ...) all Vector classes now derive from VectorBase * src/Rcpp/Environment.h: Environment::Binding gains a templated conversion operator, to facilitate distance 2 implicit conversion making this possible: Environment env("package:stats") ; Function f = env["rnorm"] ; * src/Rcpp/GenericVector.h: GenericVector::Proxy gains an assignement operator to deal with Environment::Binding. This is to work around distance 1 implicit conversion restrictions * src/Rcpp/NumericVector.h: operator[], begin and end are promoted to inline member functions * src/Rcpp/IntegerVector.h: idem * src/Rcpp/RawVector.h: idem * src/Rcpp/LogicalVector.h: idem 2010-01-12 Dirk Eddelbuettel * DESCRIPTION: Release 0.7.2 * debian/*: Similarly updated for new release to Debian * .Rbuildignore: Add 'inst/doc/{html,latex,man} as we no longer ship the voluminous doxygen-generated content * inst/doc/examples/ConvolveBenchmarks/convolve2*: Added simple benchmark on the well-known vector convolution example from 'Writing R Extensions' to compare C and C++ implementations * inst/doc/examples/ConvolveBenchmarks/buildAndRun.sh: idem inst/doc/examples/ConvolveBenchmarks/exampleRCode.r: idem 2010-01-12 Romain Francois * inst/doc/examples/ConvolveBenchmarks/convolve2*: Added additional C++ examples to convolution benchmark highlighting performance gains 2010-01-11 Romain Francois * src/Rcpp/CharacterVector.h: StringProxy gains operator+= * src/CharacterVector.cpp: implementation * src/Rcpp/*Vector.h: operator[] now throws index out of bounds exception when needed (FR#770) * src/*Vector.cpp: same * src/Rcpp/Environment.h: operator[](string) for environment allowing to get/set values of a binding in this environment. The Environment::Binding class has been created to act as a proxy. * src/Environment.cpp: idem * inst/unitTests/runit.environments.R: unit tests for the above 2010-01-10 Romain Francois * src/Rcpp/Pairlist.h: operator[] for pairlist using proxies * src/Pairlist.cpp : idem * inst/unitTests/runit.Pairlist.R: new unit tests * src/Rcpp/Language.h: same for Language * src/Language.cpp : idem * inst/unitTests/runit.Language.R: new unit tests * inst/unitTests/runit.Function.R: added unit test for function throwing exceptions * src/Function.cpp: grab the condition message and not the call 2010-01-09 Romain Francois * src/Rcpp/RObject.h: attr can now be used to get or set the attribute (used to be read only). This is another manifestation of the proxy pattern. The rhs can be anything wrap can handle * inst/unitTests/runit.RObject.R: added test.RObject.attr.set unit test (setting attribute). * src/Rcpp/Function.h: Function::operator() now throws an exception if an R error occurs. 2010-01-08 Dirk Eddelbuettel * configure.in: provide basic support for c++ compiler version detection at build-time so that we can add -std=c++0x when applicable; provide defaults in case we do not use g++ * src/Makevars.in: copied from Makevars, set C++ flags from configure * configure.win: simply log what g++ version is being used 2010-01-08 Romain Francois * src/Rcpp/wrap.h: added wrap( size_t ) to disambiguate it * int/unitTests/runit.XPTr.R: forgot to set the finalizer on the external pointer * src/Rcpp/Pairlist.h: Pairlist gains a push_back, replace, length, size, remove and insert methods * src/Rcpp/Language.h: idem for Language 2010-01-07 Romain Francois * src/Rcpp/Pairlist.h: gains a push_front method * src/Rcpp/wrap.h : now the result type of the various wrap functions depends on the parameters. wrap( bool ) makes a LogicalVector, etc ... wrap(SEXP) dispatches to the appropriate Rcpp:: class depending on TYPEOF * src/Rcpp/RObject.h: added methods "isS4", "slot" and "hasSlot" to deal with S4 objects * inst/unitTests/runit.S4.R: unit tests * src/Rcpp/ComplexVector.h: new class Rcpp::ComplexVector to manage ... complex vectors (CPLXSXP) * src/ComplexVector.cpp: implementation * inst/unitTests/runit.ComplexVector.R: unit tests * src/Rcpp/Promise.h: new class Rcpp::Promise to manage promises (PROMSXP). only read access so far (no way to force the promise) * src/Promise.cpp: implementation * src/Rcpp/RObject.h: the result of attr is now an RObject rather than a SEXP. This does not change previous behavior because of the implicit conversion * src/Rcpp/ExpressionVector.h: new class Rcpp::ExpressionVector which shares a lot with GenericVector. * src/ExpressionVector.cpp: implementation * inst/unitTests/runit.ExpressionVector.R: unit tests * src/Rcpp/CharacterVector.h: new class Rcpp::CharacterVector to manage character vectors (STRSXP). StringVector is a convenience typedef equivalent to CharacterVector * src/CharacterVector.cpp: implementation * inst/unitTests/runit.CharacterVector.R: unit tests * src/Rcpp/WeakReference.h: new class Rcpp::WeakReference to wrap WEAKREFSXP with accessors to the key and value * src/WeakReference.cpp: implementation * src/Rcpp/Rcpp_Rinternals.h: borrowed from Rinternals so that we can use VECTOR_PTR (which R forbids unless we define USE_RINTERNALS, but defining it disables NO_R_REMAP) * src/Rcpp/GenericVector.h : added begin and end to allow stl type iteration over generic vectors. Now using the Proxy pattern (from Item 30 of More Effective C++) to allow getting and setting the elements of the list through the operator[]. * int/unitTests/runit.GenericVector.R: examples are reworked using [] where set and get were used. 2010-01-06 Dirk Eddelbuettel * src/RcppCommon.h: Protect definition of logTxt by #ifndef * inst/doc/Rcpp-unitTests.Rnw: Minor LaTeX tweak 2010-01-06 Romain Francois * src/Rcpp/wrap.h : wrap can now use initializer lists (available on on GCC >= 4.4). * src/wrap.cpp: implementation * int/unitTests/runit.wrap.R: unit tests * src/RObject.cpp : make methods RObject::asFoo calling Rcpp::as to avoid code duplication 2010-01-05 Romain Francois * src/Rcpp/GenericVector.h : new class Rcpp::GenericVector and an alias Rcpp::List to handle lists (VECSXP), aka generic vectors * src/GenericVector.cpp : implementation * inst/unitTests/runit.GenericVector.R: unit tests * src/Rcpp/IntegerVector.h : new class Rcpp::IntegerVector to manage integer vector (INTSXP). IntegerVector can be constructed from SEXP of appropriate type, from an int which simply allocates a vector that big, or using an initialization list (the last is GCC >= 4.4 only). Additionally IntegerVector defines begin() and end() so that they can be used in STL algorithms * src/IntegerVector.cpp : implementation * inst/unitTests/runit.IntegerVector.R: unit tests * src/Rcpp/NumericVector.h : same as above, but for numeric vectors (REALSXP) * src/NumericVector.cpp : implementation * inst/unitTests/runit.NumericVector.R: unit tests * src/Rcpp/RawVector.h : same as above, but for numeric vectors (RAWSXP) * src/RawVector.cpp : implementation * inst/unitTests/runit.RawVector.R: unit tests * src/Rcpp/LogicalVector.h : same as above, but for numeric vectors (RAWSXP) * src/LogicalVector.cpp : implementation * inst/unitTests/runit.LogicalVector.R: unit tests * src/RcppCommon.h: improve the conditional compiling logic with macros HAS_VARIADIC_TEMPLATES and HAS_INIT_LISTS instead of CXX0X. This ensures the package can be compiled with older GCC, with lower functionality * src/RcppCommon.{h,cpp}: added a capabilities function that can be used to bring the result of the two above macros to R * R/RcppLdPaths.R: added unexported function RcppCapabilities to call the internal capabilities. capabilities is an alias to RcppCapabilities so that we can call Rcpp::capabilities() 2010-01-04 Romain Francois * src/Rcpp/Function.h: new class Rcpp::Function to manage functions (closures, primitives and builtins) all share the Function class (at least for now). This is implemented as a functor taking variable number of arguments, so it looks pretty similar to the R function * src/Function.cpp: implementation * inst/unitTests/runit.Function.R: unit tests * src/Rcpp/Pairlist.h: new class Rcpp::Pairlist to manage dotted pair lists (LISTSXP). unsurprisingly this shares a lot of similarities with Language class * src/Pairlist.cpp: implementation * inst/unitTests/runit.Pairlist.R: unit tests for Rcpp::Pairlist * src/Rcpp/wrap.h: wrap no more a template. this was not a good idea as it prevented implicit conversion to SEXP behavior when wrap'ing a RObject. * src/Rcpp/Environment.h: added the remove method * src/unitTests/runit.environments.R: remove unit test * src/unitTests/runit.Language.R: remove verbose=TRUE in cfunction call (generated noise) * src/wrap.cpp: added a few missing PROTECT 2010-01-04 Dirk Eddelbuettel * src/excections.cpp: Get rid of another unused variable * src/RcppCommon.cpp: Idem 2010-01-03 Romain Francois * src/Rcpp/Environment.h: Environment gains the parent method that returns the parent environment * src/Rcpp/as.h: template as<> to convert SEXP to classic C++ types, factored out of RObject * src/as.cpp: specific implementations. as, as as, ... * inst/unitTests/runit.as.R: unit tests * src/Rcpp/wrap.h : factored out from RObject. there is now a template wrap in addition to the specific implementations. The template generates a warning and return NULL * src/wrap.cpp: specific implementations of the wrap template (factored out of RObject) * src/Rcpp/pairlist.h : variadic templates to recursively generate a pairlist (CAR and CDR) from any number of "wrap("'able objects. (factored out of Language) * src/pairlist.cpp: end of recursion for the above * src/Rcpp/grow.h : grow a pairlist with any wrappable object. Used in pairlist * src/grow.cpp : specific implementation for Named object to allow tagging the head of the pairlist. * src/Rcpp/Named.h : new class Named that is used to specify named elements in a pairlist. * src/Named.cpp: implementation * src/Rcpp/RObject.h: added wrap(const char* const) RObject factory method * src/Rcpp/RObject.h: rework the garbage collection mechanism so that it is automatic and hidden. methods preserve and release are now private to the RObject class and the SEXP may only be changed using the protected setSEXP member function. isPreserved and forgetPreserve are defunct. * src/Rcpp/RObject.h: RObject gains assignment operators and copy constructors * src/RcppCommon.h: added the CXX0X define that controls whether we can use C++0x features offered by the gcc. currently the define is hardcoded, but this will eventually be a configure guess. The canUseCXX0X function can be called to bring this back to R * R/RcppLdPath.R: added the canUseCXX0X R function to query the internal canUseCXX0X function, use this in RcppCxxFlags so that code linking against Rcpp (inline code or packages) can take advantage of it * src/Rcpp/Language.h : new class Rcpp::Language to manage calls (LANGSXP SEXP) * src/Language.cpp : implementation * inst/unitTests/runit.Language.R: unit tests * src/Rcpp/Environment.h : added constructors and made the SEXP based constructor smarter (using as.environment) * inst/unitTests/runit.environments.R: more unit tests * src/Rcpp/Symbol.h: new class Rcpp::Symbol to encapsulate symbols. This allows to use Symbol("rnorm") instead of the most cryptic Rf_install("rnorm") * src/Symbol.cpp: implementation * inst/unitTests/runit.Symbol.R: unit tests 2010-01-03 Dirk Eddelbuettel * doxyfile: updated to current doxygen standard using -u 2010-01-02 Dirk Eddelbuettel * DESCRIPTION: Release 0.7.1 * debian/*: Similarly updated for new release to Debian 2010-01-02 Romain Francois * pkg/src/RcppSexp.h: Added to preserve existing interface, implementation use the redesigned class src/RObject.h 2010-01-01 Romain Francois * pkg/src/Rcpp/RObject.h: RObject::RObject constructors are replaced by the Rcpp::wrap set of functions. Currently the wrap functions make a RObject object but it is likely that as new classes become available in the new API, wrap will return instances of classes that extend RObject. * pkg/src/Rcpp/RObject.h: s/protect/preserve/, added methods isPreserved and forgetPreserve * ** : adapted examples, code, and unit tests to reflect both above items 2009-12-31 Romain Francois * src/Rcpp/Evaluator.h : new class Rcpp::Evaluator that eases evaluation of R expression with error capture. so that we can for example throw C++ exceptions * src/Evaluator.cpp : implementation of Rcpp::Evaluator * inst/unitTests/runit.evaluator: unit tests of Rcpp::Evaluator * inst/Rcpp/RObject.h: RObject::RObject(SEXP) now initializes isProtected * inst/src/Environment.cpp: use of exceptions 2009-12-30 Romain Francois * src/Rcpp/Environment.h : added support for environment through the Rcpp::Environment class * src/Environment.cpp: idem * inst/unitTests/runit.environments.R: testing the above * src/RcppCommon.h: now includes , needed for the environment support 2009-12-30 Romain Francois * src/Makevars* : adapt for allowong copy of the Rcpp directory * src/Rcpp_RObject.h: replace by src/Rcpp/RObject.h * src/Rcpp_XPtr.h: replaced by src/Rcpp/XPtr.h * src/*.cpp: adapt to the Rcpp directory * cleanup: idem 2009-12-30 Romain Francois * inst/unitTests/runit.RObject.R: new unit tests * inst/unitTests/runit.exceptions.R: idem * inst/unitTests/runit.XPtr.R: idem * man/RcppUnitTests.Rd: shows and link unit test reports generated at build time 2009-12-29 Romain Francois * src/Rcpp_RObject.{h,cpp}: new namespace Rcpp and new class Rcpp::RObject to replace RcppSexp with the same functionality. * src/Rcpp_XPtr.h: replaces RcppXPtr.h and the class is now Rcpp::XPtr<> and extends Rcpp::RObject * inst/examples/RcppInline/external_pointer.r: use the new namespace * inst/examples/RcppInline/RcppInlineWithLibsExamples.r: idem * inst/examples/RcppInline/RcppSexpTests.r: idem * DESCRIPTION: marked as version 0.7.0.5 * inst/doc/*: fake (empty) vignette and unit test trigger * inst/unitTests/*: prepare the space for unit tests * tests/doRUnit.R : added the usual RUnit tests trigger 2009-12-29 Romain Francois * src/RcppXPtr.h: now RcppXPtr extends RcppSexp and RcppSexp manages garbarge collection, attributes, etc ... * src/exceptions.cpp: replaces src/exception_handling.cpp * DESCRIPTION: now suggesting RUnit. 2009-12-29 Romain Francois * src/RcppXPtr.h: added operator SEXP() to class RcppXPtr to ease implicit conversion from RcppXPtr to SEXP. This means we can directly return the RcppXPtr object to R when the return type of the function is SEXP. (no need to explicitely call asSexp anymore) * src/RcppSexp.{h,cpp} : idem 2009-12-29 Romain Francois * src/RcppXPtr.h: new smart external pointer wrapper. The RcppXPtr template can be used to wrap a external pointer (SEXP) so that it looks like the dumb pointer it is wrapping (as far as the * and -> operator are concerned). The template parameter controls the type of object that is wrapped by the pointer. * src/Rcpp.h: importing the RcppXPtr.h header * src/RcppExample.cpp: added an example of RcppXPtr usage * inst/examples/RcppInline/external_pointer.r: added example using the RcppXPtr template * DESCRIPTION: marking this as 0.7.0.4 2009-12-28 Romain Francois * R/exceptions.R: s/uncaught_cpp_exception/cpp_exception/ and added a 'class' argument to hold the class name of the C++ exception (range_error, etc ...) * inst/examples/RcppInline/UncaughtExceptions.r: extend examples to show how to grab details of the C++ exception * src/exception_handling.cpp: factored out from RcppCommon.cpp, now able to grab the class name of the exception and its message. 2009-12-27 Dirk Eddelbuettel * R/RcppInline.R: Removed as we now use cfunction() from inline (>= 0.3.4) * man/{RcppInline,internals}.Rd: idem * NAMESPACE: removed entries related to cfunction and methods * DESCRIPTION: Added 'Suggests: inline (>= 0.3.4) * inst/examples/RcppInline/*R: Add library(inline) or require(inline) 2009-12-27 Romain Francois * src/RcppCommon.{h,cpp} : added experimental uncaught exception management * R/zzz.R : added .onAttach, used to register the uncaught exception management on package attach * R/exceptions.R : added R side of the exception management, unexported as it is only used by internal C++ code * inst/examples/RcppInline/UncaughtExceptions.r: demo of the uncaught exception system * src/RcppSexp.{h,cpp} : added method isNULL to test if the underlying SEXP is NULL * src/RcppSexp.{h,cpp} : added some methods to deal with attributes attributeNames : the names of the attributes as a vector hasAttribute : test whether the SEXP has the given attribute attr : extract the attribute (might return NULL) * src/RcppSexp.{h,cpp} : added RcppSexp(bool), RcppSexp(vector) constructors and RcppSexp.asBool(), RcppSexp.asStdVectorBool() methods * inst/examples/RcppInline/RcppSexpTests.r: examples/tests of the above items 2009-12-26 Romain Francois * src/RcppSexp.{h,cpp} : added std::set<{int,double,Rbyte,string}> as accepted input type for the RcppSexp class (needed by RProtoBuf) * inst/examples/RcppInline/RcppSexpTests.r: examples/tests of the above 2009-12-21 Romain Francois * src/RcppSexp.{h,cpp} : support for raw vector added into RcppSexp * inst/examples/RcppInline/RcppSexpTests.r: examples of raw vector support 2009-12-20 Dirk Eddelbuettel * inst/examples/RcppInline/RcppInlineWithLibsExamples.r: Minor simplifications using new RcppSexp types, added third example 2009-12-19 Dirk Eddelbuettel * DESCRIPTION: Release 0.7.0 * DESCRIPTION: Descrition fields reworded and expanded to explicitly mention 'inlining' ability as well as simple SEXP support. * src/RcppSexp.{h,cpp}: Switch to R_PreserveObject and R_ReleaseObject with a big thanks to Romain for the most appropriate suggestion * src/RcppSexp.{h,cpp}: Added converters for vectors of int, double, and std::string vectors * src/RcppResultsSetp.{h,cpp}: Added simple single SEXP return * src/RcppCommon.{h,cpp}: Adding simple logging facility * inst/examples/RcppInline/RcppSexpTests.r: expanded for new types 2009-12-18 Dirk Eddelbuettel * R/RcppInline.R: Another improvement for Rcpp use * inst/examples/RcppInline/RcppSimpleExamples.r: Another simple case 2009-12-17 Dirk Eddelbuettel * R/RcppInline.R: Improved / simplified in light of getting it to work on Windoze too so switched to setting env var explicitly; also split into three args for CPPFLAGS, CXXFLAGS and LIBS * man/RcppInline.Rd: Updated accordingly to reflect new args * inst/examples/RcppInline/RcppInlineWithLibsExamples.r: Idem 2009-12-16 Dirk Eddelbuettel * src/RcppSexp.{h,cpp}: Added simple RcppSexp class for simple conversion from and to single-element SEXPs -- currently limited to int, double, std::string * inst/examples/RcppInline/RcppSexpTests.r: Simple tests for this 2009-12-15 Dirk Eddelbuettel * DESCRIPTION: License changed to 'GPL (>= 2)' * COPYING: Changed from LGPL 2.1 to GPL 2 (or later) * src/*.{h,cpp}: Relicensed under GPL 2 (or later) 2009-12-13 Dirk Eddelbuettel * R/RcppInline.R: Extended to for additional header and library arguments so that we can work with arbitrary other projects * man/RcppInline.Rd: Added documentation for these arguments * inst/examples/RcppInline/RcppInlineWithLibsExamples.r: New examples using GNU GSL to show how to compile + link via inline 2009-12-11 Dirk Eddelbuettel * R/RcppInline.R: Imported function 'cfunction' from the inline package, along with small patch to directly support Rcpp. The inclusion may be temporary -- if our patch is integrated into inline we may just depend on that package * man/RcppInline.Rd: Imported from inline, plus change for Rcpp * inst/examples/RcppInline/RcppInlineExample.r: Small example taken from the 'Intro to HPC with R' tutorials * R/RcppVersion.R: Removed as unused as redundant given read.dcf() in R * man/RcppVersion.R: idem * NAMESPACE: updated accordingly * INDEX: idem 2009-11-18 Dirk Eddelbuettel * DESCRIPTION: Add Dominick back into Authors per his new request reversing his requests to be removed from last December 2009-11-17 Dirk Eddelbuettel * man/RcppParams.Rd: applied patch by Frank S. Thomas to fix example 2009-11-15 Dirk Eddelbuettel * src/RcppDateVector.{cpp,h}: Moved out of Rcpp.{h,cpp} * src/RcppDatetimeVector.{cpp,h}: idem * src/RcppFunction.{cpp,h}: idem * src/RcppMatrix.{cpp,h}: idem * src/RcppMatrixView.{cpp,h}: idem * src/RcppNumList.{cpp,h}: idem * src/RcppResultSet.{cpp,h}: idem * src/RcppStringVector.{cpp,h}: idem * src/RcppStringVectorView.{cpp,h}: idem * src/RcppVector.{cpp,h}: idem * src/RcppVectorView.{cpp,h}: idem * src/RcppCommon.cpp: takes remaining utility function from Rcpp.cpp 2009-11-09 Dirk Eddelbuettel * DESCRIPTION: Release 0.6.8 * src/RcppParams.{cpp,h}: Code reorginsation, moved out of Rcpp.{h,cpp} * src/RcppDate.{cpp,h}: idem * src/RcppDatetime.{cpp,h}: idem * src/RcppCommon.h: New header file for common defines and includes * src/Makevars{,.win}: Updated and generalised to reflect new files 2009-11-08 Dirk Eddelbuettel * DESCRIPTION: Release 0.6.7 * man/RcppVector.Rd: Remove erraneous use of \R in \title{} section noticed by the Rd parser in R-devel (with thanks to Kurt Hornik) 2009-11-06 Dirk Eddelbuettel * src/RcppList.{h,cpp}: Added a simple class to accept list() objects in order to cope with non-rectangular data-types -- this comes from the RProtoBuf code currently only on r-forge where we need accept lists that are potentially nested. The API for RcppList is not fully fleshed out and needs a few more append() member functions. Also length is currently fixed. * cleanup: Change header file removal to Rcpp*.h * inst/README: Added short README about history and status * inst/doc/: Updated doxygen documentation 2009-09-29 Dirk Eddelbuettel * inst/examples/functionCallback/*: Added simple C++ / R example of defining an R function that is passed to and called from C++ 2009-08-03 Dirk Eddelbuettel * DESCRIPTION: Release 0.6.6 * src/Rcpp.{h,cpp}: Added exists() method for RcppParams to test for existence of a named parameter. * inst/doc/: Updated doxygen documentation 2009-04-01 Dirk Eddelbuettel * DESCRIPTION: Release 0.6.5 * COPYING: Added 2009-03-30 Dirk Eddelbuettel * src/Makevars: Add $(R_ARCH) to target directory path when copying the header file as an OS X user reported not finding it with default settings. 2009-03-01 Dirk Eddelbuettel * DESCRIPTION: Release 0.6.4 * .Rbuildignore: Added to exclude debian/ from source tarball 2009-02-25 Dirk Eddelbuettel * src/Makevars.win: Renamed from Makefile.win, added missing mkdir * cleanup: Remove a few more Windows files 2009-02-24 Dirk Eddelbuettel * inst/doc/{html,latex,man}: Added new documentation of the C++ classes * doxyfile: Added Doxygen configuration file for doc generation 2009-02-22 Dirk Eddelbuettel * src/Rcpp.{h,cpp}: cleaner use of namespace 'std' by formal prefix rather than via 'using namespace std' * src/Rcpp.h: define R_NO_MAP and use Rf_* form of R API functions 2009-02-18 Dirk Eddelbuettel * src/Rcpp.{h,cpp}: Added a few explicit casts, and removed unused loop variable; all to make 'g++ -Wall' happy 2009-02-10 Dirk Eddelbuettel * src/Rcpp.{cpp,h}: Expanded a few of the throw() messages 2009-01-09 Dirk Eddelbuettel * DESCRIPTION: Release 0.6.3 * R/RcppLdpath.R: Also defined shorter functions CxxFlags() and LdFlags() which cat() the longer forms RcppCxxFlags() and RcppLdFlags() to further simplify use via litter or Rscript in Makefile or Makevars * man/Rcpp-package.Rd: Mention short form CxxFlags() and LdFlags() * src/Makevars: Applied another build correction for OS X suggested by Simon Urbanek * src/Rcpp.{cpp,h}: Added 'view-only' classes RcppVectorView, RcppMatrixView and RcppStringVectorView contributed by David Reiss 2008-12-02 Dirk Eddelbuettel * DESCRIPTION: Release 0.6.2 * R/RcppLdPath.R: Correct output for the default Linux case 2008-11-30 Dirk Eddelbuettel * DESCRIPTION: Release 0.6.1 * src/Makevars: Added, replacing src/Makefile: thanks to Simon for a rewrite that provides OS X support * src/Makefile: Retired * src/Makefile.win: Now build libRcpp.a instead of Rcpp.a * src/Rcpp.{cpp,h}: Removed #ifdef statements related to QuantLib and Date ops as we no longer need to split this off -- one build for all uses; also added another date offset for the difference between the Unix epoch of Jan 1, 1970 and what certain spreadsheets use (which is what QuantLib) follows. With this change, Rcpp is completely decoupled from QuantLib headers, yet can be used from QuantLib 0.2.10 or later. However, this also removes data conversion from R/Rcpp to QL as Rcpp no longer 'knows' QL. * R/RcppLdPath.R: Adds new functions RcppLdPath() to return lib/ directory path, and RcppLdFlags() to return arguments, including the optional rpath settings on Linux * R/RcppExample.R: Added new example 'RcppVectorExample()', extended default print method for examples * man/Rcpp-package.Rd: Expanded / updated documentation of package use when building other packages * cleanup: Removing static libraries too but do not remove src/Makevars 2008-11-05 Dirk Eddelbuettel * Release 0.6.0 * New maintainer * src/Makefile{,.win}: New files, including functionality from both configure and RcppSrc/Makefile; we now build two libraries, one for use by the package which also runs the example, and one for users to link against * src/Makevars.in: Removed * src/Rcpp.{cpp,h}: moved in from ../RcppSrc * src/Rcpp.{cpp,h}: Add new type RcppDatetime corresponding to POSIXct in with full support for microsecond time resolution between R and C++ * man/*: Several new manual pages added * configure{,.in,.win}: Removed as src/Makefile* can handle this more easily * DESCRIPTION: Minor cleanup and reformatting, Date: now uses svn:keyword Date property * NAMESPACE: Renamed RcppTemplateVersion to RcppVersion, deleted RcppDemo * demo/ directory removed as vignette("RcppAPI") is easier and more reliable to show vignette documentation * R/zzz.R: RcppTemplateDemo() removed, vignette("RcppAPI") is easier * man/RcppTemplateDemo.Rd removed as well * R/RcppExample.R: reindented, rewritten to set default arguments * R/RcppTemplateVersion.R: renamed to RcppVersion.R * man/RcppTemplateVersion.Rd: renamed to RcppVersion.Rd * RcppSrc/Rcpp.{cpp,h}: moved to src/ directory * RcppSrc/Makefile{,.win}: removed * inst/doc/RcppAPI.{Rnw,pdf}: Added footnote onto titlepage about how this document has not (yet) been updated along with the channges made Rcpp/NAMESPACE0000644000176200001440000000233613513341577012412 0ustar liggesusersuseDynLib(Rcpp, .registration = TRUE) import(methods) importFrom(utils, capture.output, assignInNamespace, .DollarNames, prompt, packageDescription, package.skeleton, glob2rx) exportClasses(Module, "C++Field", "C++OverloadedMethods", "C++Constructor", "C++Class", "C++Object", "C++Function") S3method(.DollarNames, "C++Object") S3method(.DollarNames, "Module") exportMethods(prompt, show, .DollarNames, initialize, "formals<-") export(Module, Rcpp.package.skeleton, populate, loadRcppModules, # deprecated since Rcpp 0.12.5 released May 2016 setRcppClass, loadRcppClass, loadModule, cppFunction, exposeClass, evalCpp, sourceCpp, compileAttributes, registerPlugin, RcppLdFlags, # deprecated since Rcpp 0.12.19 released Sep 2018 LdFlags, # deprecated since Rcpp 0.12.19 released Sep 2018 demangle, sizeof, cpp_object_initializer, cpp_object_dummy, Rcpp.plugin.maker, getRcppVersion ) S3method(print, bytes) S3method(format, Rcpp_stack_trace) S3method(str, Rcpp_stack_trace) S3method(print, Rcpp_stack_trace) exportClass(RcppClass) Rcpp/TODO0000644000176200001440000000466212754425121011661 0ustar liggesusers Current active misfeatures o Rcpp.package.skeleton() does not work with supplied functions, eg Rcpp.package.skeleton("foo", list=c("funA", "funB")) ends in error. o Sugar ops unit tests on +, -, ... need double, fail with int o DataFrame::create(Named("a")=b, Named("b")=b) fails with NumericVectors Documentation o Finish the quickref vignette o Maybe a vignette about stats functions o Add a vignette about the API API o Rcpp::Factor and Rcpp::Ordered o Fast indexing and g++ 4.5.0 or later: open issue of why this compiler gets upset when the previous version(s) coped just fine o Vector::resize Modules o Class inheritance. Reflect C++ inheritance at the R level. Syntactic sugar o logical indexing, ie NumericVector( LogicalVector ) o recycling : binary operators and math functions of 2 or more arguments need to recycle their arguments. o not sure rep should be lazy, i.e. rep( x, 4 ) fetches x[i] 4 times, maybe we should use LazyVector like in outer to somehow cache the result when it is judged expensive to calculate o crossprod o Vector * Matrix, Matrix * Matrix o operator% o operator/ needs to handle the case of division by 0 o matrix functions : apply o for character vectors: nchar, grepl, sub, gsub o Compound operators: ++,--,+=, -=, ... o other statistical distribution functions : multinom : this only has dmultinom which is handled in R, so maybe we can skip it signrank : has the weird call to .C( "signrank_free" ), need to understand that wilcox : has the weird call to .C( "wilcox_free" ), need to understand that tukey : only has p and q, no r or d o other random generators: rmultinom : tricky because it generates a matrix rnbeta : the R version is implemented in R (not in C), should we still have it in Rcpp in compile code ? rnf : idem rnt : idem Testing o all r* functions : rnorm, etc ... o many dpq functions have not been tested yet o new autogenerated sugar functions: cos, acosh, atan, cos, cosh, log, log10, sqrt, sin, sinh, tan, tanh o attributes (although our tests currently use attributes extensively so it's not clear what else we'd add here) Rcpp/inst/0000755000176200001440000000000015030755576012150 5ustar liggesusersRcpp/inst/prompt/0000755000176200001440000000000012754425121013457 5ustar liggesusersRcpp/inst/prompt/module.Rd0000644000176200001440000000103412754425121015231 0ustar liggesusers\name{NAME} \alias{NAME} \title{ Rcpp module: %% ~~ Name of the module ~~ } \description{ Rcpp module %% ~~ A concise description of the module ~~ } \details{ The module contains the following items: FUNCTIONS CLASSES } \source{ %% ~~ reference to a publication or URL ~~ %% ~~ perhaps a reference to the project page of the c++ code being exposed ~~ } \references{ %% ~~ possibly secondary sources and usages ~~ %% ~~ perhaps references to the C++ code that the module exposes ~~ } \examples{ show( NAME ) } \keyword{datasets} Rcpp/inst/include/0000755000176200001440000000000015027252146013562 5ustar liggesusersRcpp/inst/include/Rcpp/0000755000176200001440000000000015031260342014456 5ustar liggesusersRcpp/inst/include/Rcpp/Light0000644000176200001440000000164414270217201015455 0ustar liggesusers// Rcpp/Light: R/C++ interface class library -- without Rcpp Modules // // Copyright (C) 2008 - 2021 Dirk Eddelbuettel // Copyright (C) 2009 - 2021 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . // no Modules #define RCPP_NO_MODULES // include Rcpp as usual #include Rcpp/inst/include/Rcpp/longlong.h0000644000176200001440000000220315014017044016443 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // longlong.h: Rcpp R/C++ interface class library -- long long support // // Copyright (C) 2013 - 2017 Dirk Eddelbuettel and Romain Francois // Copyright (C) 2018 - 2025 Dirk Eddelbuettel, Romain Francois and Kevin Ushey // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_LONG_LONG_H #define RCPP_LONG_LONG_H typedef long long int rcpp_long_long_type; typedef unsigned long long int rcpp_ulong_long_type; # define RCPP_HAS_LONG_LONG_TYPES #endif Rcpp/inst/include/Rcpp/Module.h0000644000176200001440000005612415014017044016064 0ustar liggesusers // Module.h: Rcpp R/C++ interface class library -- Rcpp modules // // Copyright (C) 2010 - 2025 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp_Module_h #define Rcpp_Module_h #include #include namespace Rcpp{ namespace internal{ template std::string get_converter_name(const char* from, const char* to){ std::string method_name( ".___converter___" ) ; typedef typename Rcpp::traits::r_type_traits< typename Rcpp::traits::remove_const_and_reference::type >::r_category FROM_CATEGORY ; if( Rcpp::traits::same_type< FROM_CATEGORY, ::Rcpp::traits::r_type_module_object_tag >::value ){ method_name += "Rcpp_" ; } method_name += from ; method_name += "___" ; typedef typename Rcpp::traits::r_type_traits< typename Rcpp::traits::remove_const_and_reference::type >::r_category TO_CATEGORY ; if( Rcpp::traits::same_type< TO_CATEGORY, ::Rcpp::traits::r_type_module_object_tag >::value ){ method_name += "Rcpp_" ; } method_name += to ; return method_name ; } } class CppClass ; class CppObject ; template class result { public: result( T* ptr_ ) : ptr(ptr_){} operator T*(){ return ptr ; } private: T* ptr; } ; template class object { public: typedef T object_type ; object( T* ptr_ ) : ptr(ptr_){} operator T*(){ return ptr ; } T* operator->(){ return ptr ; } T& operator&(){ return *ptr ; } T* ptr ; } ; namespace internal { template SEXP make_new_object( Class* ptr ){ Rcpp::XPtr xp( ptr, true ) ; Function maker = Environment::Rcpp_namespace()[ "cpp_object_maker"] ; return maker( typeid(Class).name() , xp ) ; } } } #include #include namespace Rcpp { template inline void signature(std::string& s, const char* name) { s.clear(); s += get_return_type() + " " + name + "("; int n = sizeof...(T); int i = 0; // Using initializer list as c++11 implementation of a fold expression (void)std::initializer_list{ (s += get_return_type(), s += (++i == n ? "" : ", "), 0)... }; s += ")"; } template class CppFunctionN : public CppFunction { public: CppFunctionN(RESULT_TYPE (*fun)(T...), const char* docstring = 0) : CppFunction(docstring), ptr_fun(fun) {} SEXP operator()(SEXP* args) { BEGIN_RCPP return call(ptr_fun, args); END_RCPP } inline int nargs() { return sizeof...(T); } inline bool is_void() { return std::is_void::value; } inline void signature(std::string& s, const char* name) { Rcpp::signature(s, name); } inline DL_FUNC get_function_ptr() { return (DL_FUNC)ptr_fun; } private: RESULT_TYPE (*ptr_fun)(T...); }; template class CppFunction_WithFormalsN : public CppFunctionN { public: CppFunction_WithFormalsN(RESULT_TYPE (*fun)(T...), Rcpp::List formals_, const char* docstring = 0) : CppFunctionN(fun, docstring), formals(formals_) {} SEXP get_formals() { return formals; } private: Rcpp::List formals; }; } #include #include namespace Rcpp{ template class CppMethod { public: typedef Rcpp::XPtr XP ; CppMethod() {} virtual SEXP operator()(Class* /*object*/, SEXP* /*args*/) { return R_NilValue ; } virtual ~CppMethod(){} virtual int nargs(){ return 0 ; } virtual bool is_void(){ return false ; } virtual bool is_const(){ return false ; } virtual void signature(std::string& s, const char* name ){ s = name ; } } ; template class CppInheritedMethod : public CppMethod { public: typedef Rcpp::XPtr XP ; typedef CppMethod ParentMethod ; CppInheritedMethod( ParentMethod* parent_method_pointer_ ) : parent_method_pointer(parent_method_pointer_) {} SEXP operator()( Class* object, SEXP* args){ return (*parent_method_pointer)( (Parent*)object, args ) ; } inline int nargs(){ return parent_method_pointer->nargs() ; } inline bool is_void(){ return parent_method_pointer->is_void() ; } inline bool is_const(){ return parent_method_pointer->is_const() ; } inline void signature(std::string& s, const char* name){ return parent_method_pointer->signature(s, name) ; } private: ParentMethod* parent_method_pointer ; } ; template inline void ctor_signature(std::string& s, const std::string& classname) { s.assign(classname); s += "("; int n = sizeof...(T); int i = 0; // Using initializer list as c++11 implementation of a fold expression (void)std::initializer_list{ (s += get_return_type(), s += (++i == n ? "" : ", "), 0)... }; s += ")"; } template class Constructor_Base { public: virtual Class* get_new( SEXP* args, int nargs ) = 0 ; virtual int nargs() = 0 ; virtual void signature(std::string& s, const std::string& class_name) = 0 ; } ; template class Constructor: public Constructor_Base { public: virtual Class* get_new( SEXP* args, int nargs ){ return get_new_impl(args, nargs, traits::make_index_sequence()); } virtual int nargs(){ return sizeof...(T) ; } virtual void signature(std::string& s, const std::string& class_name ){ ctor_signature(s, class_name) ; } private: template Class* get_new_impl(SEXP* args, int nargs, traits::index_sequence) { return new Class( as(args[Is])... ) ; } }; template class Factory_Base { public: virtual Class* get_new( SEXP* args, int nargs ) = 0 ; virtual int nargs() = 0 ; virtual void signature(std::string& s, const std::string& class_name) = 0 ; } ; template class Factory : public Factory_Base { public: Factory( Class* (*fun)(T...) ) : ptr_fun(fun){} virtual Class* get_new( SEXP* args, int nargs ){ return get_new( args, traits::make_index_sequence() ) ; } virtual int nargs(){ return sizeof...(T) ; } virtual void signature(std::string& s, const std::string& class_name ){ ctor_signature(s, class_name) ; } private: template Class* get_new( SEXP* args, traits::index_sequence ){ return ptr_fun( bare_as(args[I])... ) ; } Class* (*ptr_fun)(T...) ; } ; inline bool yes( SEXP* /*args*/, int /* nargs */ ){ return true ; } template bool yes_arity( SEXP* /* args */ , int nargs){ return nargs == n ; } typedef bool (*ValidConstructor)(SEXP*,int) ; typedef bool (*ValidMethod)(SEXP*,int) ; template class SignedConstructor { public: SignedConstructor( Constructor_Base* ctor_, ValidConstructor valid_, const char* doc ) : ctor(ctor_), valid(valid_), docstring(doc == 0 ? "" : doc){} Constructor_Base* ctor ; ValidConstructor valid ; std::string docstring ; inline int nargs(){ return ctor->nargs() ; } inline void signature(std::string& buffer, const std::string& class_name){ ctor->signature(buffer, class_name) ; } } ; template class SignedFactory { public: SignedFactory( Factory_Base* fact_, ValidConstructor valid_, const char* doc ) : fact(fact_), valid(valid_), docstring(doc == 0 ? "" : doc){} Factory_Base* fact ; ValidConstructor valid ; std::string docstring ; inline int nargs(){ return fact->nargs() ; } inline void signature(std::string& buffer, const std::string& class_name){ fact->signature(buffer, class_name) ; } } ; template class SignedMethod { public: typedef CppMethod METHOD ; SignedMethod( METHOD* m, ValidMethod valid_, const char* doc ) : method(m), valid(valid_), docstring(doc == 0 ? "" : doc) {} METHOD* method ; ValidMethod valid ; std::string docstring ; inline int nargs(){ return method->nargs() ; } inline bool is_void(){ return method->is_void() ; } inline bool is_const(){ return method->is_const() ; } inline void signature(std::string& s, const char* name){ method->signature(s, name); } } ; template class S4_CppConstructor : public Reference { typedef Reference Base; public: typedef XPtr XP_Class ; typedef Reference::Storage Storage ; S4_CppConstructor( SignedConstructor* m, const XP_Class& class_xp, const std::string& class_name, std::string& buffer ) : Reference( "C++Constructor" ){ RCPP_DEBUG( "S4_CppConstructor( SignedConstructor* m, SEXP class_xp, const std::string& class_name, std::string& buffer" ) ; field( "pointer" ) = Rcpp::XPtr< SignedConstructor >( m, false ) ; field( "class_pointer" ) = class_xp ; field( "nargs" ) = m->nargs() ; m->signature( buffer, class_name ) ; field( "signature" ) = buffer ; field( "docstring" ) = m->docstring ; } RCPP_CTOR_ASSIGN_WITH_BASE(S4_CppConstructor) } ; template class S4_CppOverloadedMethods : public Rcpp::Reference { typedef Rcpp::Reference Base; public: typedef Rcpp::XPtr XP_Class ; typedef SignedMethod signed_method_class ; typedef std::vector vec_signed_method ; S4_CppOverloadedMethods( vec_signed_method* m, const XP_Class& class_xp, const char* name, std::string& buffer ) : Reference( "C++OverloadedMethods" ){ int n = static_cast(m->size()) ; Rcpp::LogicalVector voidness(n), constness(n) ; Rcpp::CharacterVector docstrings(n), signatures(n) ; Rcpp::IntegerVector nargs(n) ; signed_method_class* met ; for( int i=0; iat(i) ; nargs[i] = met->nargs() ; voidness[i] = met->is_void() ; constness[i] = met->is_const() ; docstrings[i] = met->docstring ; met->signature(buffer, name) ; signatures[i] = buffer ; } field( "pointer" ) = Rcpp::XPtr< vec_signed_method >( m, false ) ; field( "class_pointer" ) = class_xp ; field( "size" ) = n ; field( "void" ) = voidness ; field( "const" ) = constness ; field( "docstrings" ) = docstrings ; field( "signatures" ) = signatures ; field( "nargs" ) = nargs ; } RCPP_CTOR_ASSIGN_WITH_BASE(S4_CppOverloadedMethods) } ; template class CppMethodImplN : public CppMethod { public: typedef typename std::conditional::type Method; typedef CppMethod method_class; typedef typename Rcpp::traits::remove_const_and_reference::type CLEANED_RESULT_TYPE; CppMethodImplN(Method m) : method_class(), met(m) {} SEXP operator()(Class* object, SEXP* args) { // Can't pass pointer to member function directly to `call()`, so wrap it in a lambda auto f = [&object, this](T... cpp_args) -> CLEANED_RESULT_TYPE { return (object->*met)(cpp_args...); }; return call(f, args); } inline int nargs() { return sizeof...(T); } inline bool is_void() { return std::is_void::value; } inline bool is_const() { return IsConst; } inline void signature(std::string& s, const char* name) { Rcpp::signature(s, name); } private: Method met; }; template using CppMethodN = CppMethodImplN; template using const_CppMethodN = CppMethodImplN; template class Pointer_CppMethodImplN : public CppMethod { public: typedef typename std::conditional::type Method; typedef CppMethod method_class; typedef typename Rcpp::traits::remove_const_and_reference::type CLEANED_RESULT_TYPE; Pointer_CppMethodImplN(Method m) : method_class(), met(m) {} SEXP operator()(Class* object, SEXP* args) { // Need to have `object` as the first argument to the function, so wrap it in a lambda auto f = [&object, this](T... cpp_args) -> CLEANED_RESULT_TYPE { return met(object, cpp_args...); }; return call(f, args); } inline int nargs() { return sizeof...(T); } inline bool is_void() { return std::is_void::value; } inline bool is_const() { return IsConst; } inline void signature(std::string& s, const char* name) { Rcpp::signature(s, name); } private: Method met; }; template using Pointer_CppMethodN = Pointer_CppMethodImplN; template using Const_Pointer_CppMethodN = Pointer_CppMethodImplN; template class CppProperty { public: typedef Rcpp::XPtr XP ; CppProperty(const char* doc = 0) : docstring( doc == 0 ? "" : doc ) {} ; virtual ~CppProperty(){} ; virtual SEXP get(Class* ) { throw std::range_error("cannot retrieve property"); } virtual void set(Class*, SEXP) { throw std::range_error("cannot set property"); } virtual bool is_readonly(){ return false; } virtual std::string get_class(){ return ""; } std::string docstring ; } ; template class CppInheritedProperty : public CppProperty { public: typedef CppProperty Base ; CppInheritedProperty( CppProperty* parent_property_ ) : Base( parent_property_->docstring.c_str() ), parent_property(parent_property_) {} SEXP get( Class* obj ){ return parent_property->get( (Parent*)obj ) ; } void set( Class* obj, SEXP s) { parent_property->set( (Parent*)obj, s ) ; } bool is_readonly(){ return parent_property->is_readonly() ; } std::string get_class(){ return parent_property->get_class() ; } private: CppProperty* parent_property ; } ; template class CppFinalizer{ public: CppFinalizer(){} ; virtual void run(Class* ){} ; } ; template class FunctionFinalizer : public CppFinalizer { public: typedef void (*Pointer)(Class*) ; FunctionFinalizer( Pointer p ) : finalizer(p){} ; virtual void run(Class* object){ finalizer( object ) ; } private: Pointer finalizer ; } ; template class S4_field : public Rcpp::Reference { typedef Rcpp::Reference Base; public: typedef XPtr XP_Class ; S4_field( CppProperty* p, const XP_Class& class_xp ) : Reference( "C++Field" ){ RCPP_DEBUG( "S4_field( CppProperty* p, const XP_Class& class_xp )" ) field( "read_only" ) = p->is_readonly() ; field( "cpp_class" ) = p->get_class(); field( "pointer" ) = Rcpp::XPtr< CppProperty >( p, false ) ; field( "class_pointer" ) = class_xp ; field( "docstring" ) = p->docstring ; } RCPP_CTOR_ASSIGN_WITH_BASE(S4_field) } ; #include #include template class enum_ { public: typedef enum_ self ; enum_( const char* name_ ) : name(name_), values(), parent_typeinfo_name( typeid(Parent).name() ){ } ~enum_(){ Rcpp::Module* module = getCurrentScope() ; module->add_enum( parent_typeinfo_name, name, values ) ; } self& value( const char* name_, Enum value_ ){ values.insert( PAIR( name_, static_cast( value_ ) ) ) ; return *this ; } private: std::string name ; typedef std::map< std::string, int > MAP ; typedef MAP::value_type PAIR ; MAP values ; std::string parent_typeinfo_name ; } ; } namespace Rcpp { template void function(const char* name_, RESULT_TYPE (*fun)(T... t), const char* docstring = 0) { Rcpp::Module* scope = ::getCurrentScope(); if (scope) { scope->Add(name_, new CppFunctionN(fun, docstring)); } } template void function(const char* name_, RESULT_TYPE (*fun)(T... t), Rcpp::List formals, const char* docstring = 0) { Rcpp::Module* scope = ::getCurrentScope(); if (scope) { scope->Add(name_, new CppFunction_WithFormalsN(fun, formals, docstring)); } } } namespace Rcpp { template void converter( const char* from, const char* to, TO (*fun)(FROM), const char* docstring = 0 ){ std::string fun_name = internal::get_converter_name( from, to ) ; function( fun_name.c_str(), fun, docstring ) ; } class CppClass : public S4{ typedef S4 Base; public: typedef XPtr XP_Class ; typedef Rcpp::XPtr XP ; CppClass( SEXP x) : S4(x){}; CppClass( Module* p, class_Base* cl, std::string& buffer ) : S4("C++Class") { XP_Class clxp( cl, false, R_NilValue, R_NilValue ) ; slot( "module" ) = XP( p, false ) ; slot( "pointer" ) = clxp ; buffer = "Rcpp_" ; buffer += cl->name ; slot( ".Data" ) = buffer ; slot( "fields" ) = cl->fields( clxp ) ; slot( "methods" ) = cl->getMethods( clxp, buffer ) ; slot( "constructors") = cl->getConstructors( clxp, buffer ) ; slot( "docstring" ) = cl->docstring ; slot( "typeid" ) = cl->get_typeinfo_name() ; slot( "enums" ) = cl->enums ; slot( "parents" ) = cl->parents ; } RCPP_CTOR_ASSIGN_WITH_BASE(CppClass) } ; class CppObject : public S4{ typedef S4 Base; public: typedef Rcpp::XPtr XP ; CppObject( Module* p, class_Base* clazz, SEXP xp ) : S4("C++Object") { slot( "module" ) = XP( p, false ) ; slot( "cppclass" ) = Rcpp::XPtr( clazz, false ) ; slot( "pointer" ) = xp ; } RCPP_CTOR_ASSIGN_WITH_BASE(CppObject) } ; } #define RCPP_MODULE_BOOT(name) _rcpp_module_boot_##name #define RCPP_MODULE(name) \ void _rcpp_module_##name##_init() ; \ static Rcpp::Module _rcpp_module_##name( # name ) ; \ extern "C" SEXP _rcpp_module_boot_##name(){ \ ::setCurrentScope( & _rcpp_module_##name ) ; \ _rcpp_module_##name##_init( ) ; \ Rcpp::XPtr mod_xp(& _rcpp_module_##name , false); \ ::setCurrentScope( 0 ) ; \ return mod_xp ; \ } \ void _rcpp_module_##name##_init() // silly little dance to suppress a 'defined but not used variable' warning #ifdef __GNUC__ #define VARIABLE_IS_NOT_USED __attribute__ ((unused)) #else #define VARIABLE_IS_NOT_USED #endif // static variable to hold Rf_install symbol to prevent it from being gc'ed static VARIABLE_IS_NOT_USED SEXP moduleSym = NULL; // helper macro to cache the result of Rf_install("Module"): once // it is allocated and in the symbol table it is safe from gc #define GET_MODULE_SYM ( moduleSym == NULL ? moduleSym = Rf_install("Module") : moduleSym ) // this macro is called by code wanting to load a module -- see RInside's rinside_module_sample0.cpp #define LOAD_RCPP_MODULE(NAME) \ Shield __load_module_call__( Rf_lang2( GET_MODULE_SYM, _rcpp_module_boot_##NAME() ) ); \ Rcpp_fast_eval( __load_module_call__, R_GlobalEnv ); #endif Rcpp/inst/include/Rcpp/complex.h0000644000176200001440000000452312754425121016311 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 4 -*- // // complex.h: Rcpp R/C++ interface class library -- binary operators for Rcomplex // // Copyright (C) 2010 - 2015 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP__complex_H #define RCPP__complex_H inline Rcomplex operator*( const Rcomplex& lhs, const Rcomplex& rhs) { Rcomplex y ; y.r = lhs.r * rhs.r - lhs.i * rhs.i ; y.i = lhs.r * rhs.i + rhs.r * lhs.i ; return y ; } inline Rcomplex operator+( const Rcomplex& lhs, const Rcomplex& rhs) { Rcomplex y ; y.r = lhs.r + rhs.r ; y.i = lhs.i + rhs.i ; return y ; } inline Rcomplex operator-( const Rcomplex& lhs, const Rcomplex& rhs) { Rcomplex y ; y.r = lhs.r - rhs.r ; y.i = lhs.i - rhs.i ; return y ; } inline Rcomplex operator/( const Rcomplex& a, const Rcomplex& b) { Rcomplex c ; double ratio, den; double abr, abi; if( (abr = b.r) < 0) abr = - abr; if( (abi = b.i) < 0) abi = - abi; if( abr <= abi ) { ratio = b.r / b.i ; den = b.i * (1 + ratio*ratio); c.r = (a.r*ratio + a.i) / den; c.i = (a.i*ratio - a.r) / den; } else { ratio = b.i / b.r ; den = b.r * (1 + ratio*ratio); c.r = (a.r + a.i*ratio) / den; c.i = (a.i - a.r*ratio) / den; } return c ; } inline bool operator==( const Rcomplex& a, const Rcomplex& b) { return a.r == b.r && a.i == b.i ; } // to prevent a redefinition error in dplyr (<= 0.4.3) which has the _same_ // definition of operator<<() for Rcomplex #define dplyr_tools_complex_H inline std::ostream & operator<<(std::ostream &os, const Rcomplex& cplx) { return os << cplx.r << "+" << cplx.i << "i" ; } #endif Rcpp/inst/include/Rcpp/Lighter0000644000176200001440000000174514270217201016006 0ustar liggesusers// Rcpp/Lighter: R/C++ interface class library -- without Rcpp Modules + RTTI // // Copyright (C) 2008 - 2021 Dirk Eddelbuettel // Copyright (C) 2009 - 2021 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . // no RTTI (actually implies no Modules) -- solid gain #define RCPP_NO_RTTI // include Rcpp/Light which includes Rcpp #include Rcpp/inst/include/Rcpp/lang.h0000644000176200001440000002367114070703457015574 0ustar liggesusers // lang.h: Rcpp R/C++ interface class library -- extra lang_* functions // // Copyright (C) 2011 - 2020 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__lang_h #define Rcpp__lang_h #define Rcpp_list1 Rf_list1 #define Rcpp_lang1 Rf_lang1 #define Rcpp_lang2 Rf_lang2 #define Rcpp_lang3 Rf_lang3 #define Rcpp_lang4 Rf_lang4 #define Rcpp_lang5 Rf_lang5 #define Rcpp_lang6 Rf_lang6 #define Rcpp_lcons Rf_lcons namespace Rcpp { inline SEXP Rcpp_list2(SEXP x0, SEXP x1) { PROTECT(x0); x0 = Rf_cons(x0, Rcpp_list1(x1)); UNPROTECT(1); return x0; } inline SEXP Rcpp_list3(SEXP x0, SEXP x1, SEXP x2) { PROTECT(x0); x0 = Rf_cons(x0, Rcpp_list2(x1, x2)); UNPROTECT(1); return x0; } inline SEXP Rcpp_list4(SEXP x0, SEXP x1, SEXP x2, SEXP x3) { PROTECT(x0); x0 = Rf_cons(x0, Rcpp_list3(x1, x2, x3)); UNPROTECT(1); return x0; } inline SEXP Rcpp_list5(SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4) { PROTECT(x0); x0 = Rf_cons(x0, Rcpp_list4(x1, x2, x3, x4)); UNPROTECT(1); return x0; } inline SEXP Rcpp_list6(SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5) { PROTECT(x0); x0 = Rf_cons(x0, Rcpp_list5(x1, x2, x3, x4, x5)); UNPROTECT(1); return x0; } inline SEXP Rcpp_list7( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6 ) { PROTECT(x0); x0 = Rf_cons(x0, Rcpp_list6(x1, x2, x3, x4, x5, x6)); UNPROTECT(1); return x0; } inline SEXP Rcpp_lang7( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6 ) { PROTECT(x0); x0 = Rf_lcons(x0, Rcpp_list6(x1, x2, x3, x4, x5, x6)); UNPROTECT(1); return x0; } inline SEXP Rcpp_list8( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7 ) { PROTECT(x0); x0 = Rf_cons(x0, Rcpp_list7(x1, x2, x3, x4, x5, x6, x7)); UNPROTECT(1); return x0; } inline SEXP Rcpp_lang8( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7 ) { PROTECT(x0); x0 = Rf_lcons(x0, Rcpp_list7(x1, x2, x3, x4, x5, x6, x7)); UNPROTECT(1); return x0; } inline SEXP Rcpp_list9( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8 ) { PROTECT(x0); x0 = Rf_cons(x0, Rcpp_list8(x1, x2, x3, x4, x5, x6, x7, x8)); UNPROTECT(1); return x0; } inline SEXP Rcpp_lang9( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8 ) { PROTECT(x0); x0 = Rf_lcons(x0, Rcpp_list8(x1, x2, x3, x4, x5, x6, x7, x8)); UNPROTECT(1); return x0; } inline SEXP Rcpp_list10( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9 ) { PROTECT(x0); x0 = Rf_cons(x0, Rcpp_list9(x1, x2, x3, x4, x5, x6, x7, x8, x9)); UNPROTECT(1); return x0; } inline SEXP Rcpp_lang10( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9 ) { PROTECT(x0); x0 = Rf_lcons(x0, Rcpp_list9(x1, x2, x3, x4, x5, x6, x7, x8, x9)); UNPROTECT(1); return x0; } inline SEXP Rcpp_list11( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10 ) { PROTECT(x0); x0 = Rf_cons(x0, Rcpp_list10(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10)); UNPROTECT(1); return x0; } inline SEXP Rcpp_lang11( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10 ) { PROTECT(x0); x0 = Rf_lcons(x0, Rcpp_list10(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10)); UNPROTECT(1); return x0; } inline SEXP Rcpp_list12( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10, SEXP x11 ) { PROTECT(x0); x0 = Rf_cons(x0, Rcpp_list11(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11)); UNPROTECT(1); return x0; } inline SEXP Rcpp_lang12( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10, SEXP x11 ) { PROTECT(x0); x0 = Rf_lcons(x0, Rcpp_list11(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11)); UNPROTECT(1); return x0; } inline SEXP Rcpp_list13( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10, SEXP x11, SEXP x12 ) { PROTECT(x0); x0 = Rf_cons(x0, Rcpp_list12(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12)); UNPROTECT(1); return x0; } inline SEXP Rcpp_lang13( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10, SEXP x11, SEXP x12 ) { PROTECT(x0); x0 = Rf_lcons(x0, Rcpp_list12(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12)); UNPROTECT(1); return x0; } inline SEXP Rcpp_list14( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10, SEXP x11, SEXP x12, SEXP x13 ) { PROTECT(x0); x0 = Rf_cons(x0, Rcpp_list13(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13)); UNPROTECT(1); return x0; } inline SEXP Rcpp_lang14( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10, SEXP x11, SEXP x12, SEXP x13 ) { PROTECT(x0); x0 = Rf_lcons(x0, Rcpp_list13(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13)); UNPROTECT(1); return x0; } inline SEXP Rcpp_list15( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10, SEXP x11, SEXP x12, SEXP x13, SEXP x14 ) { PROTECT(x0); x0 = Rf_cons(x0, Rcpp_list14(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14)); UNPROTECT(1); return x0; } inline SEXP Rcpp_lang15( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10, SEXP x11, SEXP x12, SEXP x13, SEXP x14 ) { PROTECT(x0); x0 = Rf_lcons(x0, Rcpp_list14(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14)); UNPROTECT(1); return x0; } inline SEXP Rcpp_list16( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10, SEXP x11, SEXP x12, SEXP x13, SEXP x14, SEXP x15 ) { PROTECT(x0); x0 = Rf_cons(x0, Rcpp_list15(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15)); UNPROTECT(1); return x0; } inline SEXP Rcpp_lang16( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10, SEXP x11, SEXP x12, SEXP x13, SEXP x14, SEXP x15 ) { PROTECT(x0); x0 = Rf_lcons(x0, Rcpp_list15(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15)); UNPROTECT(1); return x0; } inline SEXP Rcpp_list17( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10, SEXP x11, SEXP x12, SEXP x13, SEXP x14, SEXP x15, SEXP x16 ) { PROTECT(x0); x0 = Rf_cons(x0, Rcpp_list16(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16)); UNPROTECT(1); return x0; } inline SEXP Rcpp_lang17( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10, SEXP x11, SEXP x12, SEXP x13, SEXP x14, SEXP x15, SEXP x16 ) { PROTECT(x0); x0 = Rf_lcons(x0, Rcpp_list16(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16)); UNPROTECT(1); return x0; } inline SEXP Rcpp_list18( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10, SEXP x11, SEXP x12, SEXP x13, SEXP x14, SEXP x15, SEXP x16, SEXP x17 ) { PROTECT(x0); x0 = Rf_cons(x0, Rcpp_list17(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17)); UNPROTECT(1); return x0; } inline SEXP Rcpp_lang18( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10, SEXP x11, SEXP x12, SEXP x13, SEXP x14, SEXP x15, SEXP x16, SEXP x17 ) { PROTECT(x0); x0 = Rf_lcons(x0, Rcpp_list17(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17)); UNPROTECT(1); return x0; } inline SEXP Rcpp_list19( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10, SEXP x11, SEXP x12, SEXP x13, SEXP x14, SEXP x15, SEXP x16, SEXP x17, SEXP x18 ) { PROTECT(x0); x0 = Rf_cons(x0, Rcpp_list18(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18)); UNPROTECT(1); return x0; } inline SEXP Rcpp_lang19( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10, SEXP x11, SEXP x12, SEXP x13, SEXP x14, SEXP x15, SEXP x16, SEXP x17, SEXP x18 ) { PROTECT(x0); x0 = Rf_lcons(x0, Rcpp_list18(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18)); UNPROTECT(1); return x0; } inline SEXP Rcpp_list20( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10, SEXP x11, SEXP x12, SEXP x13, SEXP x14, SEXP x15, SEXP x16, SEXP x17, SEXP x18, SEXP x19 ) { PROTECT(x0); x0 = Rf_cons(x0, Rcpp_list19(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19)); UNPROTECT(1); return x0; } inline SEXP Rcpp_lang20( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10, SEXP x11, SEXP x12, SEXP x13, SEXP x14, SEXP x15, SEXP x16, SEXP x17, SEXP x18, SEXP x19 ) { PROTECT(x0); x0 = Rf_lcons(x0, Rcpp_list19(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19)); UNPROTECT(1); return x0; } } #endif Rcpp/inst/include/Rcpp/algo.h0000644000176200001440000000761512754425121015571 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // algo.h: Rcpp R/C++ interface class library -- STL-style algorithms // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__algo_h #define Rcpp__algo_h #include #include namespace Rcpp{ /* generic implementation for the input iterator case */ template inline bool __any( InputIterator first, InputIterator last, const T& value, std::input_iterator_tag ){ for ( ;first!=last; first++) if ( *first==value ) return true; return false; } /* RAI case */ template inline bool __any( RandomAccessIterator __first, RandomAccessIterator __last, const T& __val, std::random_access_iterator_tag ){ typename std::iterator_traits::difference_type __trip_count = (__last - __first) >> 2; for ( ; __trip_count > 0 ; --__trip_count) { if (*__first == __val) return true; ++__first; if (*__first == __val) return true; ++__first; if (*__first == __val) return true; ++__first; if (*__first == __val) return true; ++__first; } switch (__last - __first) { case 3: if (*__first == __val) return true; ++__first; case 2: if (*__first == __val) return true; ++__first; case 1: if (*__first == __val) return true; ++__first; case 0: default: return false; } } /** * stl like algorithm to identify if any of the objects in the range * is equal to the value */ template inline bool any( InputIterator first, InputIterator last, const T& value){ return __any( first, last, value, typename std::iterator_traits::iterator_category() ) ; } /* generic implementation for the input iterator case */ template inline bool __any_if( InputIterator first, InputIterator last, Predicate pred, std::input_iterator_tag ){ for ( ; first!=last ; first++ ) if ( pred(*first) ) return true ; return false; } /* RAI case */ template inline bool __any_if( RandomAccessIterator __first, RandomAccessIterator __last, Predicate __pred, std::random_access_iterator_tag ){ typename std::iterator_traits::difference_type __trip_count = (__last - __first) >> 2; for ( ; __trip_count > 0 ; --__trip_count) { if (__pred(*__first)) return true; ++__first; if (__pred(*__first)) return true; ++__first; if (__pred(*__first)) return true; ++__first; if (__pred(*__first)) return true; ++__first; } switch (__last - __first) { case 3: if (__pred(*__first)) return true; ++__first; case 2: if (__pred(*__first)) return true; ++__first; case 1: if (__pred(*__first)) return true; ++__first; case 0: default: return false; } } /** * stl-like algorithm to identify if the predicate is true for any * of the objects in the range */ template inline bool any_if( InputIterator first, InputIterator last, Predicate pred){ return __any_if( first, last, pred, typename std::iterator_traits::iterator_category() ) ; } } #endif Rcpp/inst/include/Rcpp/S4.h0000644000176200001440000000441213076500536015127 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // S4.h: Rcpp R/C++ interface class library -- S4 objects // // Copyright (C) 2010 - 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp_S4_h #define Rcpp_S4_h namespace Rcpp{ /** * S4 object */ RCPP_API_CLASS(S4_Impl) { public: RCPP_GENERATE_CTOR_ASSIGN(S4_Impl) S4_Impl(){} ; /** * checks that x is an S4 object and wrap it. * * @param x must be an S4 object */ S4_Impl(SEXP x) { if( ! ::Rf_isS4(x) ) throw not_s4() ; Storage::set__(x) ; } S4_Impl& operator=( SEXP other ){ Storage::set__( other ) ; return *this ; } /** * Creates an S4 object of the requested class. * * @param klass name of the target S4 class * @throw S4_creation_error if klass does not map to a known S4 class */ S4_Impl( const std::string& klass ){ Shield x( R_do_new_object(R_do_MAKE_CLASS(klass.c_str())) ); if (!Rf_inherits(x, klass.c_str())) throw S4_creation_error( klass ) ; Storage::set__(x) ; } /** * Indicates if this object is an instance of the given S4 class */ bool is( const std::string& clazz) const ; /** * @throw not_s4 if x is not an S4 class */ void update(SEXP x){ if( ! ::Rf_isS4(x) ) throw not_s4() ; } } ; typedef S4_Impl S4 ; } // namespace Rcpp #endif Rcpp/inst/include/Rcpp/InternalFunction.h0000644000176200001440000000431415014017044020113 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // InternalFunction.h: Rcpp R/C++ interface class library -- exposing C++ functions // // Copyright (C) 2010 - 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp_InternalFunction_h #define Rcpp_InternalFunction_h #include #include #include namespace Rcpp{ RCPP_API_CLASS(InternalFunction_Impl) { public: RCPP_GENERATE_CTOR_ASSIGN(InternalFunction_Impl) template InternalFunction_Impl(const std::function &fun) { set( XPtr >( new Rcpp::InternalFunctionWithStdFunction::CppFunctionBaseFromStdFunction(fun), false ) ); } template InternalFunction_Impl(RESULT_TYPE (*fun)(T...)) { set(XPtr >(new CppFunctionN(fun), true)); } void update(SEXP){} private: inline void set( SEXP xp){ Environment RCPP = Environment::Rcpp_namespace() ; Function intf = RCPP["internal_function"] ; Storage::set__( intf( xp ) ) ; } }; typedef InternalFunction_Impl InternalFunction ; } // namespace Rcpp #endif Rcpp/inst/include/Rcpp/Symbol.h0000644000176200001440000000603015014017044016073 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // Symbol.h: Rcpp R/C++ interface class library -- access R environments // // Copyright (C) 2013 - 2015 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp_Symbol_h #define Rcpp_Symbol_h namespace Rcpp{ RCPP_API_CLASS(Symbol_Impl) { public: RCPP_GENERATE_CTOR_ASSIGN(Symbol_Impl) /** * wraps the SEXP into a Symbol object. * * @param x Accepted SEXP types are SYMSXP, CHARSXP and STRSXP * in the last case, the first element of the character vector * is silently used */ Symbol_Impl(SEXP x){ int type = TYPEOF(x) ; switch( type ){ case SYMSXP: Storage::set__( x ) ; break; /* nothing to do */ case CHARSXP: { #if R_VERSION >= R_Version(3,2,0) SEXP charSym = Rf_installChar(x); // R 3.2.0 or later have Rf_installChar #else SEXP charSym = Rf_install(CHAR(x)); // cannot be gc()'ed once in symbol table #endif Storage::set__( charSym ) ; break ; } case STRSXP: { /* FIXME: check that there is at least one element */ #if R_VERSION >= R_Version(3,2,0) SEXP charSym = Rf_installChar(STRING_ELT(x, 0 )); // R 3.2.0 or later have Rf_installChar #else SEXP charSym = Rf_install( CHAR(STRING_ELT(x, 0 )) ); // cannot be gc()'ed once in symbol table #endif Storage::set__( charSym ); break ; } default: const char* fmt = "Cannot convert object to a symbol: " "[type=%s; target=SYMSXP]."; throw not_compatible(fmt, Rf_type2char(TYPEOF(x))); } } Symbol_Impl(const std::string& symbol){ Storage::set__( Rf_install(symbol.c_str()) ); } inline const char* c_str() const { return CHAR(PRINTNAME(Storage::get__())) ; } inline bool operator==(const char* other) const { return ! strcmp(other, c_str() ); } void update(SEXP){} }; typedef Symbol_Impl Symbol; } // namespace Rcpp #endif Rcpp/inst/include/Rcpp/StretchyList.h0000644000176200001440000000542012754425121017300 0ustar liggesusers// StretchyList.h: Rcpp R/C++ interface class library -- stretchy lists // // Copyright (C) 2013 Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp_StretchyList_h #define Rcpp_StretchyList_h namespace Rcpp{ /** * StretchyList uses a special pairlist to provide efficient insertion * at the front and the end of a pairlist. * * This is a C++ abstraction of the functions NewList, GrowList and Insert * that are found in places where a pair list has to grow efficiently, e.g. * in the R parser (gram.y) */ RCPP_API_CLASS(StretchyList_Impl), public DottedPairProxyPolicy > { public: RCPP_GENERATE_CTOR_ASSIGN(StretchyList_Impl) typedef typename DottedPairProxyPolicy::DottedPairProxy Proxy ; typedef typename DottedPairProxyPolicy::const_DottedPairProxy const_Proxy ; StretchyList_Impl(){ SEXP s = Rf_cons(R_NilValue, R_NilValue); SETCAR(s, s); Storage::set__(s) ; } StretchyList_Impl(SEXP x){ Storage::set__(r_cast(x)) ; } void update(SEXP x){} inline operator SEXP() const{ return CDR(Storage::get__() ); } template inline StretchyList_Impl& push_back(const T& obj ){ return push_back__impl( obj, typename traits::is_named::type() ) ; } template inline StretchyList_Impl& push_front(const T& obj ){ return push_front__impl( obj, typename traits::is_named::type() ) ; } private: template StretchyList_Impl& push_back__impl(const T& obj, traits::true_type ) ; template StretchyList_Impl& push_back__impl(const T& obj, traits::false_type ) ; template StretchyList_Impl& push_front__impl(const T& obj, traits::true_type ) ; template StretchyList_Impl& push_front__impl(const T& obj, traits::false_type ) ; } ; typedef StretchyList_Impl StretchyList ; } #endif Rcpp/inst/include/Rcpp/sugar/0000755000176200001440000000000015014017044015577 5ustar liggesusersRcpp/inst/include/Rcpp/sugar/functions/0000755000176200001440000000000015014017044017607 5ustar liggesusersRcpp/inst/include/Rcpp/sugar/functions/is_infinite.h0000644000176200001440000000307112754425121022270 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // is_infinite.h: Rcpp R/C++ interface class library -- is_infinite // // Copyright (C) 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__is_infinite_h #define Rcpp__sugar__is_infinite_h namespace Rcpp{ namespace sugar{ template class IsInfinite : public ::Rcpp::VectorBase< LGLSXP, false, IsInfinite > { public: IsInfinite( const VEC_TYPE& obj_) : obj(obj_){} inline int operator[]( R_xlen_t i ) const { return ::Rcpp::traits::is_infinite( obj[i] ) ; } inline R_xlen_t size() const { return obj.size() ; } private: const VEC_TYPE& obj ; } ; } // sugar template inline sugar::IsInfinite is_infinite( const Rcpp::VectorBase& t){ return sugar::IsInfinite( t.get_ref() ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/is_na.h0000644000176200001440000000641313211112152021046 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // is_na.h: Rcpp R/C++ interface class library -- is_na // // Copyright (C) 2010 - 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__is_na_h #define Rcpp__sugar__is_na_h namespace Rcpp{ namespace sugar{ template class IsNa : public ::Rcpp::VectorBase< LGLSXP, false, IsNa > { public: typedef typename traits::storage_type::type STORAGE ; typedef Rcpp::VectorBase BASE ; IsNa( const BASE& obj_) : obj(obj_){} inline int operator[]( R_xlen_t i ) const { return ::Rcpp::traits::is_na( obj[i] ) ; } inline R_xlen_t size() const { return obj.size() ; } private: const BASE& obj ; } ; // specialization for the case where we already know // the result (FALSE) because it is embedded in the type // (the second template parameter of VectorBase) template class IsNa : public ::Rcpp::VectorBase< LGLSXP, false, IsNa > { public: typedef typename traits::storage_type::type STORAGE ; typedef Rcpp::VectorBase BASE ; IsNa( const BASE& obj_) : obj(obj_){} inline int operator[]( R_xlen_t i ) const { return FALSE ; } inline R_xlen_t size() const { return obj.size() ; } private: const BASE& obj ; } ; template class IsNa_Vector_is_na : public Rcpp::VectorBase >{ public: IsNa_Vector_is_na( const T& x) : ref(x){} inline int operator[]( R_xlen_t i) const { #if defined(RCPP_NEW_DATE_DATETIME_VECTORS) return ::Rcpp::traits::is_na(ref[i]); #else return ref[i].is_na() ; #endif } inline R_xlen_t size() const { return ref.size() ; } private: const T& ref ; } ; } // sugar template inline sugar::IsNa is_na( const Rcpp::VectorBase& t) { return sugar::IsNa(t); } inline sugar::IsNa_Vector_is_na is_na(const oldDatetimeVector& x) { return sugar::IsNa_Vector_is_na( x ) ; } inline sugar::IsNa_Vector_is_na is_na(const oldDateVector& x) { return sugar::IsNa_Vector_is_na(x); } inline sugar::IsNa_Vector_is_na is_na(newDatetimeVector& x) { return sugar::IsNa_Vector_is_na(x); } inline sugar::IsNa_Vector_is_na is_na(newDateVector& x) { return sugar::IsNa_Vector_is_na(x); } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/sign.h0000644000176200001440000000453712754425121020740 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // sign.h: Rcpp R/C++ interface class library -- sign // // Copyright (C) 2010 - 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__sign_h #define Rcpp__sugar__sign_h namespace Rcpp{ namespace sugar{ template class sign__impl{ public: typedef typename Rcpp::traits::storage_type::type STORAGE ; static inline int get( STORAGE x){ return Rcpp::traits::is_na(x) ? NA_INTEGER : ( x > 0 ? 1 : (x==0 ? 0 : -1) ) ; } } ; template class sign__impl{ public: typedef typename Rcpp::traits::storage_type::type STORAGE ; static inline int get( STORAGE x){ return ( x > 0 ? 1 : (x==0 ? 0 : -1) ) ; } } ; template class Sign : public Rcpp::VectorBase< INTSXP,NA, Sign > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; typedef int r_import_type ; Sign( const VEC_TYPE& object_ ) : object(object_){} inline int operator[]( R_xlen_t i ) const { return get(i) ; } inline R_xlen_t size() const { return object.size() ; } operator SEXP() const { return wrap( *this ); } inline int get(R_xlen_t i) const { return sign__impl::get( object[i] ); } private: const VEC_TYPE& object ; } ; } // sugar template inline sugar::Sign sign( const VectorBase& t){ return sugar::Sign( t ) ; } template inline sugar::Sign sign( const VectorBase& t){ return sugar::Sign( t ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/complex.h0000644000176200001440000001557613257744352021465 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // complex.h: Rcpp R/C++ interface class library -- complex // // Copyright (C) 2010 - 2018 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__complex_h #define Rcpp__sugar__complex_h namespace Rcpp{ namespace sugar{ template class SugarComplex : public Rcpp::VectorBase< Rcpp::traits::r_sexptype_traits::rtype , NA, SugarComplex > { public: typedef Rcpp::VectorBase VEC_TYPE ; SugarComplex( FunPtr ptr_, const VEC_TYPE & vec_) : ptr(ptr_), vec(vec_){} inline RESULT_TYPE operator[]( R_xlen_t i) const { Rcomplex x = vec[i] ; if( Rcpp::traits::is_na( x ) ) return Rcpp::traits::get_na< Rcpp::traits::r_sexptype_traits::rtype >() ; return ptr( x ); } inline R_xlen_t size() const { return vec.size() ; } private: FunPtr ptr ; const VEC_TYPE& vec ; }; } // sugar namespace internal{ inline double complex__Re( Rcomplex x){ return x.r ; } inline double complex__Im( Rcomplex x){ return x.i ; } inline double complex__Mod( Rcomplex x){ return ::sqrt( x.i * x.i + x.r * x.r) ; } inline Rcomplex complex__Conj( Rcomplex x){ Rcomplex y ; y.r = x.r; y.i = -x.i ; return y ; } inline double complex__Arg( Rcomplex x ){ return ::atan2(x.i, x.r); } // TODO: this does not use HAVE_C99_COMPLEX as in R, perhaps it should inline Rcomplex complex__exp( Rcomplex x){ Rcomplex y ; double expx = ::exp(x.r); y.r = expx * ::cos(x.i); y.i = expx * ::sin(x.i); return y ; } inline Rcomplex complex__log( Rcomplex x){ Rcomplex y ; y.i = ::atan2(x.i, x.r); y.r = ::log(::hypot(x.r, x.i)); return y ; } inline Rcomplex complex__sqrt(Rcomplex z){ Rcomplex r ; double mag; if( (mag = ::hypot(z.r, z.i)) == 0.0) r.r = r.i = 0.0; else if(z.r > 0) { r.r = ::sqrt(0.5 * (mag + z.r) ); r.i = z.i / r.r / 2; } else { r.i = ::sqrt(0.5 * (mag - z.r) ); if(z.i < 0) r.i = - r.i; r.r = z.i / r.i / 2; } return r ; } inline Rcomplex complex__cos(Rcomplex z){ Rcomplex r ; r.r = ::cos(z.r) * ::cosh(z.i); r.i = - ::sin(z.r) * ::sinh(z.i); return r ; } inline Rcomplex complex__cosh(Rcomplex z){ Rcomplex r; r.r = ::cos(-z.i) * ::cosh( z.r); r.i = - ::sin(-z.i) * ::sinh(z.r); return r ; } inline Rcomplex complex__sin(Rcomplex z){ Rcomplex r ; r.r = ::sin(z.r) * ::cosh(z.i); r.i = ::cos(z.r) * ::sinh(z.i); return r; } inline Rcomplex complex__tan(Rcomplex z){ Rcomplex r ; double x2, y2, den; x2 = 2.0 * z.r; y2 = 2.0 * z.i; den = ::cos(x2) + ::cosh(y2); r.r = ::sin(x2)/den; /* any threshold between -log(DBL_EPSILON) and log(DBL_XMAX) will do*/ if (ISNAN(y2) || ::fabs(y2) < 50.0) r.i = ::sinh(y2)/den; else r.i = (y2 <0 ? -1.0 : 1.0); return r ; } inline Rcomplex complex__asin(Rcomplex z) { Rcomplex r ; double alpha, bet, t1, t2, x, y; x = z.r; y = z.i; t1 = 0.5 * ::hypot(x + 1, y); t2 = 0.5 * ::hypot(x - 1, y); alpha = t1 + t2; bet = t1 - t2; r.r = ::asin(bet); r.i = ::log(alpha + ::sqrt(alpha*alpha - 1)); if(y < 0 || (y == 0 && x > 1)) r.i *= -1; return r ; } inline Rcomplex complex__acos(Rcomplex z) { Rcomplex r, Asin = complex__asin(z); r.r = M_PI_2 - Asin.r; r.i = - Asin.i; return r ; } /* Complex Arctangent Function */ /* Equation (4.4.39) Abramowitz and Stegun */ /* with additional terms to force the branch cuts */ /* to agree with figure 4.4, p79. Continuity */ /* on the branch cuts (pure imaginary axis; x==0, |y|>1) */ /* is standard: z_asin() is continuous from the right */ /* if y >= 1, and continuous from the left if y <= -1. */ inline Rcomplex complex__atan(Rcomplex z) { Rcomplex r; double x, y; x = z.r; y = z.i; r.r = 0.5 * ::atan(2 * x / ( 1 - x * x - y * y)); r.i = 0.25 * ::log((x * x + (y + 1) * (y + 1)) / (x * x + (y - 1) * (y - 1))); if(x*x + y*y > 1) { r.r += M_PI_2; if(x < 0 || (x == 0 && y < 0)) r.r -= M_PI; } return r ; } inline Rcomplex complex__acosh(Rcomplex z){ Rcomplex r, a = complex__acos(z); r.r = -a.i; r.i = a.r; return r ; } inline Rcomplex complex__asinh(Rcomplex z){ Rcomplex r, b; b.r = -z.i; b.i = z.r; Rcomplex a = complex__asin(b); r.r = a.i; r.i = -a.r; return r ; } inline Rcomplex complex__atanh(Rcomplex z){ Rcomplex r, b; b.r = -z.i; b.i = z.r; Rcomplex a = complex__atan(b); r.r = a.i; r.i = -a.r; return r ; } inline Rcomplex complex__sinh(Rcomplex z) { Rcomplex r, b; b.r = -z.i; b.i = z.r; Rcomplex a = complex__sin(b); r.r = a.i; r.i = -a.r; return r ; } inline Rcomplex complex__tanh(Rcomplex z) { Rcomplex r, b; b.r = -z.i; b.i = z.r; Rcomplex a = complex__tan(b); r.r = a.i; r.i = -a.r; return r ; } } // internal #define RCPP_SUGAR_COMPLEX(__NAME__,__OUT__) \ template \ inline sugar::SugarComplex \ __NAME__(const VectorBase& t) { \ return sugar::SugarComplex( \ internal::complex__##__NAME__, t); \ } RCPP_SUGAR_COMPLEX( Re, double ) RCPP_SUGAR_COMPLEX( Im, double ) RCPP_SUGAR_COMPLEX( Mod, double ) RCPP_SUGAR_COMPLEX( Arg, double ) RCPP_SUGAR_COMPLEX( Conj, Rcomplex ) RCPP_SUGAR_COMPLEX( exp, Rcomplex ) RCPP_SUGAR_COMPLEX( log, Rcomplex ) RCPP_SUGAR_COMPLEX( sqrt, Rcomplex ) RCPP_SUGAR_COMPLEX( cos, Rcomplex ) RCPP_SUGAR_COMPLEX( sin, Rcomplex ) RCPP_SUGAR_COMPLEX( tan, Rcomplex ) RCPP_SUGAR_COMPLEX( acos, Rcomplex ) RCPP_SUGAR_COMPLEX( asin, Rcomplex ) RCPP_SUGAR_COMPLEX( atan, Rcomplex ) RCPP_SUGAR_COMPLEX( acosh, Rcomplex ) RCPP_SUGAR_COMPLEX( asinh, Rcomplex ) RCPP_SUGAR_COMPLEX( atanh, Rcomplex ) RCPP_SUGAR_COMPLEX( cosh, Rcomplex ) RCPP_SUGAR_COMPLEX( sinh, Rcomplex ) RCPP_SUGAR_COMPLEX( tanh, Rcomplex ) #undef RCPP_SUGAR_COMPLEX } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/sample.h0000644000176200001440000002653714070703457021271 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // sample.h: Rcpp R/C++ interface class library -- sample // // Copyright (C) 2016 Nathan Russell // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . // The sample() in RcppArmadillo came first, but is opt-in. In case someone did // in fact load it, we need to skip the declarations here to avoid a conflict #ifndef RCPPARMADILLO__EXTENSIONS__SAMPLE_H #ifndef Rcpp__sugar__sample_h #define Rcpp__sugar__sample_h #include // In order to mirror the behavior of `base::sample` // as closely as possible, this file contains adaptations // of several functions in R/src/main/random.c: // // * do_sample - general logic as well as the empirical sampling routine. // // * FixupProb - an auxiliary function. // // * walker_ProbSampleReplace, ProbSampleReplace, and ProbSampleNoReplace - // algorithms for sampling according to a supplied probability vector. // // For each of the sampling routines, two signatures are provided: // // * A version that returns an integer vector, which can be used to // generate 0-based indices (one_based = false) or 1-based indices // (one_based = true) -- where the latter corresponds to the // bahavior of `base::sample.int`. // // * A version which takes an input Vector<> (rather than an integer 'n'), // and samples its elements -- this corresponds to `base::sample`. namespace Rcpp { namespace sugar { // Adapted from `FixupProb` // Normalizes a probability vector 'p' S.T. sum(p) == 1 inline void Normalize(Vector& p, int require_k, bool replace) { double sum = 0.0; R_xlen_t npos = 0, i = 0, n = p.size(); for ( ; i < n; i++) { if (!R_FINITE(p[i]) || (p[i] < 0)) { stop("Probabilities must be finite and non-negative!"); } npos += (p[i] > 0.0); sum += p[i]; } if ((!npos) || (!replace && (require_k > npos))) { stop("Too few positive probabilities!"); } for (i = 0; i < n; i++) { p[i] /= sum; } } // Adapted from `ProbSampleReplace` // Index version inline Vector SampleReplace(Vector& p, int n, int k, bool one_based) { Vector perm = no_init(n), ans = no_init(k); double rU = 0.0; int i = 0, j = 0, nm1 = n - 1; int adj = one_based ? 0 : 1; for ( ; i < n; i++) { perm[i] = i + 1; } Rf_revsort(p.begin(), perm.begin(), n); for (i = 1; i < n; i++) { p[i] += p[i - 1]; } for (i = 0; i < k; i++) { rU = unif_rand(); for (j = 0; j < nm1; j++) { if (rU <= p[j]) { break; } } ans[i] = perm[j] - adj; } return ans; } // Element version template inline Vector SampleReplace(Vector& p, int k, const Vector& ref) { int n = ref.size(); Vector perm = no_init(n); Vector ans = no_init(k); double rU = 0.0; int i = 0, j = 0, nm1 = n - 1; for ( ; i < n; i++) { perm[i] = i + 1; } Rf_revsort(p.begin(), perm.begin(), n); for (i = 1; i < n; i++) { p[i] += p[i - 1]; } for (i = 0; i < k; i++) { rU = unif_rand(); for (j = 0; j < nm1; j++) { if (rU <= p[j]) { break; } } ans[i] = ref[perm[j] - 1]; } return ans; } // Adapted from `walker_ProbSampleReplace` // Index version inline Vector WalkerSample(const Vector& p, int n, int nans, bool one_based) { Vector a = no_init(n), ans = no_init(nans); int i, j, k; std::vector q(n); double rU; std::vector HL(n); std::vector::iterator H, L; int adj = one_based ? 1 : 0; H = HL.begin() - 1; L = HL.begin() + n; for (i = 0; i < n; i++) { q[i] = p[i] * n; if (q[i] < 1.0) { *++H = i; } else { *--L = i; } } if (H >= HL.begin() && L < HL.begin() + n) { for (k = 0; k < n - 1; k++) { i = HL[k]; j = *L; a[i] = j; q[j] += q[i] - 1; L += (q[j] < 1.0); if (L >= HL.begin() + n) { break; } } } for (i = 0; i < n; i++) { q[i] += i; } for (i = 0; i < nans; i++) { rU = unif_rand() * n; k = static_cast(rU); ans[i] = (rU < q[k]) ? k + adj : a[k] + adj; } return ans; } // Element version template inline Vector WalkerSample(const Vector& p, int nans, const Vector& ref) { int n = ref.size(); Vector a = no_init(n); Vector ans = no_init(nans); int i, j, k; std::vector q(n); double rU; std::vector HL(n); std::vector::iterator H, L; H = HL.begin() - 1; L = HL.begin() + n; for (i = 0; i < n; i++) { q[i] = p[i] * n; if (q[i] < 1.0) { *++H = i; } else { *--L = i; } } if (H >= HL.begin() && L < HL.begin() + n) { for (k = 0; k < n - 1; k++) { i = HL[k]; j = *L; a[i] = j; q[j] += q[i] - 1; L += (q[j] < 1.0); if (L >= HL.begin() + n) { break; } } } for (i = 0; i < n; i++) { q[i] += i; } for (i = 0; i < nans; i++) { rU = unif_rand() * n; k = static_cast(rU); ans[i] = (rU < q[k]) ? ref[k] : ref[a[k]]; } return ans; } // Adapted from `ProbSampleNoReplace` // Index version inline Vector SampleNoReplace(Vector& p, int n, int nans, bool one_based) { Vector perm = no_init(n), ans = no_init(nans); double rT, mass, totalmass; int i, j, k, n1; int adj = one_based ? 0 : 1; for (i = 0; i < n; i++) { perm[i] = i + 1; } Rf_revsort(p.begin(), perm.begin(), n); totalmass = 1.0; for (i = 0, n1 = n - 1; i < nans; i++, n1--) { rT = totalmass * unif_rand(); mass = 0.0; for (j = 0; j < n1; j++) { mass += p[j]; if (rT <= mass) { break; } } ans[i] = perm[j] - adj; totalmass -= p[j]; for (k = j; k < n1; k++) { p[k] = p[k + 1]; perm[k] = perm[k + 1]; } } return ans; } // Element version template inline Vector SampleNoReplace(Vector& p, int nans, const Vector& ref) { int n = ref.size(); Vector perm = no_init(n); Vector ans = no_init(nans); double rT, mass, totalmass; int i, j, k, n1; for (i = 0; i < n; i++) { perm[i] = i + 1; } Rf_revsort(p.begin(), perm.begin(), n); totalmass = 1.0; for (i = 0, n1 = n - 1; i < nans; i++, n1--) { rT = totalmass * unif_rand(); mass = 0.0; for (j = 0; j < n1; j++) { mass += p[j]; if (rT <= mass) { break; } } ans[i] = ref[perm[j] - 1]; totalmass -= p[j]; for (k = j; k < n1; k++) { p[k] = p[k + 1]; perm[k] = perm[k + 1]; } } return ans; } // Adapted from segment of `do_sample` // Index version inline Vector EmpiricalSample(int n, int size, bool replace, bool one_based) { Vector ans = no_init(size); Vector::iterator ians = ans.begin(), eans = ans.end(); int adj = one_based ? 1 : 0; if (replace || size < 2) { for ( ; ians != eans; ++ians) { *ians = static_cast(n * unif_rand() + adj); } return ans; } IntegerVector x = no_init(n); for (int i = 0; i < n; i++) { x[i] = i; } for ( ; ians != eans; ++ians) { int j = static_cast(n * unif_rand()); *ians = x[j] + adj; x[j] = x[--n]; } return ans; } // Element version template inline Vector EmpiricalSample(int size, bool replace, const Vector& ref) { int n = ref.size(); Vector ans = no_init(size); typename Vector::iterator ians = ans.begin(), eans = ans.end(); if (replace || size < 2) { for ( ; ians != eans; ++ians) { *ians = ref[static_cast(n * unif_rand())]; } return ans; } IntegerVector x = no_init(n); for (int i = 0; i < n; i++) { x[i] = i; } for ( ; ians != eans; ++ians) { int j = static_cast(n * unif_rand()); *ians = ref[x[j]]; x[j] = x[--n]; } return ans; } typedef Nullable< Vector > probs_t; } // sugar // Adapted from `do_sample` inline Vector sample(int n, int size, bool replace = false, sugar::probs_t probs = R_NilValue, bool one_based = true) { if (probs.isNotNull()) { Vector p = clone(probs.get()); if (static_cast(p.size()) != n) { stop("probs.size() != n!"); } sugar::Normalize(p, size, replace); if (replace) { int i = 0, nc = 0; for ( ; i < n; i++) { nc += (n * p[i] > 0.1); } return nc > 200 ? sugar::WalkerSample(p, n, size, one_based) : sugar::SampleReplace(p, n, size, one_based); } if (size > n) { stop("Sample size must be <= n when not using replacement!"); } return sugar::SampleNoReplace(p, n, size, one_based); } if (!replace && size > n) { stop("Sample size must be <= n when not using replacement!"); } return sugar::EmpiricalSample(n, size, replace, one_based); } template inline Vector sample(const Vector& x, int size, bool replace = false, sugar::probs_t probs = R_NilValue) { int n = x.size(); if (probs.isNotNull()) { Vector p = clone(probs.get()); if (static_cast(p.size()) != n) { stop("probs.size() != n!"); } sugar::Normalize(p, size, replace); if (replace) { int i = 0, nc = 0; for ( ; i < n; i++) { nc += (n * p[i] > 0.1); } return nc > 200 ? sugar::WalkerSample(p, size, x) : sugar::SampleReplace(p, size, x); } if (size > n) { stop("Sample size must be <= n when not using replacement!"); } return sugar::SampleNoReplace(p, size, x); } if (!replace && size > n) { stop("Sample size must be <= n when not using replacement!"); } return sugar::EmpiricalSample(size, replace, x); } } // Rcpp #endif // Rcpp__sugar__sample_h #endif // RCPPARMADILLO__EXTENSIONS__SAMPLE_H Rcpp/inst/include/Rcpp/sugar/functions/clamp.h0000644000176200001440000000507112754425121021066 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // clamp.h: Rcpp R/C++ interface class library -- clamp // // Copyright (C) 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__clamp_h #define Rcpp__sugar__clamp_h namespace Rcpp{ namespace sugar{ template struct clamp_operator{ typedef typename Rcpp::traits::storage_type::type STORAGE ; clamp_operator(STORAGE lhs_, STORAGE rhs_ ) : lhs(lhs_), rhs(rhs_){} inline STORAGE operator()(STORAGE x) const { return x < lhs ? lhs : (x > rhs ? rhs : x ) ; } STORAGE lhs, rhs ; } ; // need to write this special version template <> struct clamp_operator { clamp_operator(double lhs_, double rhs_ ) : lhs(lhs_), rhs(rhs_){} inline double operator()(double x) const { if( Rcpp::traits::is_na(x) ) return x ; return x < lhs ? lhs : (x > rhs ? rhs : x ) ; } double lhs, rhs ; } ; template < int RTYPE, bool NA, typename T > class Clamp_Primitive_Vector_Primitive : public VectorBase< RTYPE , NA , Clamp_Primitive_Vector_Primitive > { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; typedef clamp_operator OPERATOR ; Clamp_Primitive_Vector_Primitive( STORAGE lhs_, const T& vec_, STORAGE rhs_) : vec(vec_), op(lhs_,rhs_) {} inline STORAGE operator[]( R_xlen_t i ) const { return op( vec[i] ) ; } inline R_xlen_t size() const { return vec.size() ; } private: const T& vec ; OPERATOR op ; } ; } // sugar template inline sugar::Clamp_Primitive_Vector_Primitive clamp( typename Rcpp::traits::storage_type::type lhs, const Rcpp::VectorBase& vec, typename Rcpp::traits::storage_type::type rhs ){ return sugar::Clamp_Primitive_Vector_Primitive( lhs, vec.get_ref(), rhs ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/cumprod.h0000644000176200001440000000454612754425121021451 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // cumsum.h: Rcpp R/C++ interface class library -- cumsum // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__cumprod_h #define Rcpp__sugar__cumprod_h namespace Rcpp{ namespace sugar{ template class Cumprod : public Lazy< Rcpp::Vector, Cumprod > { public: typedef typename Rcpp::VectorBase VEC_TYPE; typedef typename Rcpp::traits::storage_type::type STORAGE; typedef Rcpp::Vector VECTOR; Cumprod(const VEC_TYPE& object_) : object(object_) {} VECTOR get() const { R_xlen_t n = object.size(); VECTOR result(n, Rcpp::traits::get_na()); STORAGE current = object[0]; if (Rcpp::traits::is_na(current)) return result; result[0] = current; for (R_xlen_t i = 1; i < n; i++) { current = object[i]; if (Rcpp::traits::is_na(current)) return result; result[i] = result[i-1] * current; } return result ; } private: const VEC_TYPE& object; }; } // sugar template inline sugar::Cumprod cumprod(const VectorBase& t) { return sugar::Cumprod(t); } template inline sugar::Cumprod cumprod(const VectorBase& t) { return sugar::Cumprod(t); } template inline sugar::Cumprod cumprod(const VectorBase& t) { return sugar::Cumprod(t); } } // Rcpp #endif // Rcpp__sugar__cumprod_h Rcpp/inst/include/Rcpp/sugar/functions/mapply/0000755000176200001440000000000015031260342021111 5ustar liggesusersRcpp/inst/include/Rcpp/sugar/functions/mapply/mapply_2.h0000644000176200001440000001050115014017044023002 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // mapply_2.h: Rcpp R/C++ interface class library -- mapply_2 // // Copyright (C) 2012 - 2024 Dirk Eddelbuettel and Romain Francois // Copyright (C) 2025 Dirk Eddelbuettel, Romain Francois and Iñaki Ucar // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__mapply_2_h #define Rcpp__sugar__mapply_2_h namespace Rcpp{ namespace sugar{ template class Mapply_2 : public VectorBase< Rcpp::traits::r_sexptype_traits< typename ::Rcpp::traits::result_of::type >::rtype , true , Mapply_2 > { public: typedef typename ::Rcpp::traits::result_of::type result_type ; Mapply_2( const T_1& vec_1_, const T_2& vec_2_, Function fun_ ) : vec_1(vec_1_), vec_2(vec_2_), fun(fun_){} inline result_type operator[]( R_xlen_t i ) const { return fun( vec_1[i], vec_2[i] ); } inline R_xlen_t size() const { return vec_1.size() ; } private: const T_1& vec_1 ; const T_2& vec_2 ; Function fun ; } ; template class Mapply_2_Vector_Primitive : public VectorBase< Rcpp::traits::r_sexptype_traits< typename ::Rcpp::traits::result_of::type >::rtype , true , Mapply_2_Vector_Primitive > { public: typedef typename ::Rcpp::traits::result_of::type result_type ; Mapply_2_Vector_Primitive( const T_1& vec_1_, PRIM_2 prim_2_, Function fun_ ) : vec_1(vec_1_), prim_2(prim_2_), fun(fun_){} inline result_type operator[]( R_xlen_t i ) const { return fun( vec_1[i], prim_2 ); } inline R_xlen_t size() const { return vec_1.size() ; } private: const T_1& vec_1 ; PRIM_2 prim_2 ; Function fun ; } ; template class Mapply_2_Primitive_Vector : public VectorBase< Rcpp::traits::r_sexptype_traits< typename ::Rcpp::traits::result_of::type >::rtype , true , Mapply_2_Primitive_Vector > { public: typedef typename ::Rcpp::traits::result_of::type result_type ; Mapply_2_Primitive_Vector( PRIM_1 prim_1_, const T_2& vec_2_, Function fun_ ) : prim_1(prim_1_), vec_2(vec_2_), fun(fun_){} inline result_type operator[]( R_xlen_t i ) const { return fun( prim_1, vec_2[i] ); } inline R_xlen_t size() const { return vec_2.size() ; } private: PRIM_1 prim_1 ; const T_2& vec_2 ; Function fun ; } ; } // sugar template inline sugar::Mapply_2 mapply( const Rcpp::VectorBase& t1, const Rcpp::VectorBase& t2, Function fun ){ return sugar::Mapply_2( t1.get_ref(), t2.get_ref(), fun ) ; } template inline sugar::Mapply_2_Vector_Primitive mapply( const Rcpp::VectorBase& t1, double t2, Function fun ){ return sugar::Mapply_2_Vector_Primitive( t1.get_ref(), t2, fun ) ; } template inline sugar::Mapply_2_Primitive_Vector mapply( double t1, const Rcpp::VectorBase& t2, Function fun ){ return sugar::Mapply_2_Primitive_Vector( t1, t2.get_ref(), fun ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/mapply/mapply_3.h0000644000176200001440000000557315014017044023020 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // mapply_3.h: Rcpp R/C++ interface class library -- mapply_3 // // Copyright (C) 2012 - 2024 Dirk Eddelbuettel and Romain Francois // Copyright (C) 2025 Dirk Eddelbuettel, Romain Francois and Iñaki Ucar // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__mapply_3_h #define Rcpp__sugar__mapply_3_h namespace Rcpp{ namespace sugar{ template < int RTYPE_1, bool NA_1, typename T_1, int RTYPE_2, bool NA_2, typename T_2, int RTYPE_3, bool NA_3, typename T_3, typename Function > class Mapply_3 : public VectorBase< Rcpp::traits::r_sexptype_traits< typename ::Rcpp::traits::result_of::type >::rtype , true , Mapply_3 > { public: typedef typename ::Rcpp::traits::result_of::type result_type ; typedef Rcpp::VectorBase VEC_1 ; typedef Rcpp::VectorBase VEC_2 ; typedef Rcpp::VectorBase VEC_3 ; typedef typename Rcpp::traits::Extractor::type EXT_1 ; typedef typename Rcpp::traits::Extractor::type EXT_2 ; typedef typename Rcpp::traits::Extractor::type EXT_3 ; Mapply_3( const VEC_1& vec_1_, const VEC_2& vec_2_, const VEC_3& vec_3_, Function fun_ ) : vec_1(vec_1_.get_ref()), vec_2(vec_2_.get_ref()), vec_3(vec_3_.get_ref()), fun(fun_){} inline result_type operator[]( R_xlen_t i ) const { return fun( vec_1[i], vec_2[i], vec_3[i] ); } inline R_xlen_t size() const { return vec_1.size() ; } private: const EXT_1& vec_1 ; const EXT_2& vec_2 ; const EXT_3& vec_3 ; Function fun ; } ; } // sugar template < int RTYPE_1, bool NA_1, typename T_1, int RTYPE_2, bool NA_2, typename T_2, int RTYPE_3, bool NA_3, typename T_3, typename Function > inline sugar::Mapply_3 mapply( const Rcpp::VectorBase& t1, const Rcpp::VectorBase& t2, const Rcpp::VectorBase& t3, Function fun ){ return sugar::Mapply_3( t1, t2, t3, fun ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/cummin.h0000644000176200001440000000432112754425121021257 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // cumsum.h: Rcpp R/C++ interface class library -- cumsum // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__cummin_h #define Rcpp__sugar__cummin_h namespace Rcpp{ namespace sugar{ template class Cummin : public Lazy< Rcpp::Vector, Cummin > { public: typedef typename Rcpp::VectorBase VEC_TYPE; typedef typename Rcpp::traits::storage_type::type STORAGE; typedef Rcpp::Vector VECTOR; Cummin(const VEC_TYPE& object_) : object(object_) {} VECTOR get() const { R_xlen_t n = object.size(); VECTOR result(n, Rcpp::traits::get_na()); STORAGE current = object[0]; if (Rcpp::traits::is_na(current)) return result; result[0] = current; for (R_xlen_t i = 1; i < n; i++) { current = object[i]; if (Rcpp::traits::is_na(current)) return result; result[i] = result[i-1] < current ? result[i-1] : current; } return result ; } private: const VEC_TYPE& object; }; } // sugar template inline sugar::Cummin cummin(const VectorBase& t) { return sugar::Cummin(t); } template inline sugar::Cummin cummin(const VectorBase& t) { return sugar::Cummin(t); } } // Rcpp #endif // Rcpp__sugar__cummin_h Rcpp/inst/include/Rcpp/sugar/functions/mean.h0000644000176200001440000001110214470465200020701 0ustar liggesusers// mean.h: Rcpp R/C++ interface class library -- mean // // Copyright (C) 2011 - 2023 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__mean_h #define Rcpp__sugar__mean_h namespace Rcpp{ namespace sugar{ template class Mean : public Lazy > { public: typedef typename Rcpp::VectorBase VEC_TYPE; typedef Rcpp::Vector VECTOR; Mean(const VEC_TYPE& object_) : object(object_) {} double get() const { VECTOR input = object; R_xlen_t n = input.size(); // double pass (as in summary.c) long double s = std::accumulate(input.begin(), input.end(), 0.0L); s /= n; if (R_FINITE((double)s)) { long double t = 0.0; for (R_xlen_t i = 0; i < n; i++) { t += input[i] - s; } s += t/n; } return (double)s ; } private: const VEC_TYPE& object ; }; template class Mean : public Lazy > { public: typedef typename Rcpp::VectorBase VEC_TYPE; Mean(const VEC_TYPE& object_) : object(object_) {} Rcomplex get() const { ComplexVector input = object; R_xlen_t n = input.size(); // double pass (as in summary.c) long double s = 0.0, si = 0.0; for (R_xlen_t i=0; i(s); z.i = static_cast(si); return z; } private: const VEC_TYPE& object ; }; template class Mean : public Lazy > { public: typedef typename Rcpp::VectorBase VEC_TYPE; Mean(const VEC_TYPE& object_) : object(object_) {} double get() const { LogicalVector input = object; R_xlen_t n = input.size(); long double s = 0.0; for (R_xlen_t i=0; i class Mean : public Lazy > { public: typedef typename Rcpp::VectorBase VEC_TYPE; Mean(const VEC_TYPE& object_) : object(object_) {} double get() const { IntegerVector input = object; R_xlen_t n = input.size(); // double pass (as in summary.c) long double s = std::accumulate(input.begin(), input.end(), 0.0L); s /= n; long double t = 0.0; for (R_xlen_t i = 0; i < n; i++) { if (input[i] == NA_INTEGER) return NA_REAL; t += input[i] - s; } s += t/n; return (double)s ; } private: const VEC_TYPE& object ; }; } // sugar template inline sugar::Mean mean(const VectorBase& t) { return sugar::Mean(t); } template inline sugar::Mean mean(const VectorBase& t) { return sugar::Mean(t); } template inline sugar::Mean mean(const VectorBase& t) { return sugar::Mean(t); } template inline sugar::Mean mean(const VectorBase& t) { return sugar::Mean(t); } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/cbind.h0000644000176200001440000023237513433004027021053 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // cbind.h: Rcpp R/C++ interface class library -- cbind // // Copyright (C) 2016 Nathan Russell // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__cbind_h #define Rcpp__sugar__cbind_h namespace Rcpp { namespace sugar { namespace cbind_impl { // override r_sexptype_traits for STRSXP template struct cbind_sexptype_traits : public Rcpp::traits::r_sexptype_traits {}; template <> struct cbind_sexptype_traits { enum { rtype = STRSXP }; }; // override storage_type (int) template struct cbind_storage_type : public Rcpp::traits::storage_type {}; template <> struct cbind_storage_type { typedef bool type; }; // CRTP base template class BindableExpression { public: typedef typename cbind_storage_type::type stored_type; inline stored_type operator[](R_xlen_t i) const { return static_cast(*this)[i]; } inline stored_type operator()(R_xlen_t i, R_xlen_t j) const { return static_cast(*this)(i, j); } inline R_xlen_t size() const { return static_cast(*this).size(); } inline R_xlen_t nrow() const { return static_cast(*this).nrow(); } inline R_xlen_t ncol() const { return static_cast(*this).ncol(); } operator E&() { return static_cast(*this); } operator const E&() const { return static_cast(*this); } }; // Matrix, Vector interface to BindableExpression template class ContainerBindable : public BindableExpression > { public: typedef typename cbind_storage_type::type stored_type; private: T vec; R_xlen_t len, nr, nc; public: ContainerBindable(const Rcpp::Matrix& vec_) : vec(vec_), len(vec.ncol() * vec.nrow()), nr(vec.nrow()), nc(vec.ncol()) {} ContainerBindable(const Rcpp::Vector& vec_) : vec(vec_), len(vec.size()), nr(vec.size()), nc(1) {} template ContainerBindable(const BindableExpression& e) : vec(e.size()), len(e.size()), nr(e.nrow()), nc(e.ncol()) { for (R_xlen_t i = 0; i < len; i++) { vec[i] = e[i]; } } inline R_xlen_t size() const { return len; } inline R_xlen_t nrow() const { return nr; } inline R_xlen_t ncol() const { return nc; } inline stored_type operator[](R_xlen_t i) const { return vec[i]; } inline stored_type operator()(R_xlen_t i, R_xlen_t j) const { return vec[i + nr * j]; } }; template struct scalar { typedef typename cbind_storage_type::type type; }; // scalar interface to BindableExpression template class ScalarBindable : public BindableExpression< cbind_sexptype_traits::rtype, ScalarBindable > { public: typedef T stored_type; enum { RTYPE = cbind_sexptype_traits::rtype }; private: T t; public: ScalarBindable(const T& t_) : t(t_) {} inline R_xlen_t size() const { return 1; } inline R_xlen_t nrow() const { return 1; } inline R_xlen_t ncol() const { return 1; } inline stored_type operator[](R_xlen_t i) const { return t; } inline stored_type operator()(R_xlen_t i, R_xlen_t j) const { return t; } }; // binding logic; non-scalar operands template class JoinOp : public BindableExpression >, public Rcpp::MatrixBase > { public: typedef typename cbind_storage_type::type stored_type; private: const E1& e1; const E2& e2; public: JoinOp(const BindableExpression& e1_, const BindableExpression& e2_) : e1(e1_), e2(e2_) { if (e1.nrow() != e2.nrow()) { std::string msg = "Error in cbind: " "Matrix and Vector operands " "must have equal " "number of rows (length)."; Rcpp::stop(msg); } } inline R_xlen_t size() const { return e1.size() + e2.size(); } inline R_xlen_t nrow() const { return e1.nrow(); } inline R_xlen_t ncol() const { return e1.ncol() + e2.ncol(); } inline stored_type operator[](R_xlen_t i) const { return (i < e1.size()) ? e1[i] : e2[i - e1.size()]; } inline stored_type operator()(R_xlen_t i, R_xlen_t j) const { R_xlen_t index = i + nrow() * j; return (*this)[index]; } }; // binding logic; rhs scalar template class JoinOp::type> > : public BindableExpression::type> > >, public Rcpp::MatrixBase::type> > > { public: typedef typename cbind_storage_type::type stored_type; typedef ScalarBindable::type> E2; private: const E1& e1; const E2& e2; public: JoinOp(const BindableExpression& e1_, const BindableExpression& e2_) : e1(e1_), e2(e2_) {} inline R_xlen_t size() const { return e1.size() + e1.nrow(); } inline R_xlen_t nrow() const { return e1.nrow(); } inline R_xlen_t ncol() const { return e1.ncol() + 1; } inline stored_type operator[](R_xlen_t i) const { return (i < e1.size()) ? e1[i] : e2[i]; } inline stored_type operator()(R_xlen_t i, R_xlen_t j) const { R_xlen_t index = i + nrow() * j; return (*this)[index]; } }; // binding logic; lhs scalar template class JoinOp::type>, E2> : public BindableExpression::type>, E2> >, public Rcpp::MatrixBase::type>, E2> > { public: typedef typename cbind_storage_type::type stored_type; typedef ScalarBindable::type> E1; private: const E1& e1; const E2& e2; public: JoinOp(const BindableExpression& e1_, const BindableExpression& e2_) : e1(e1_), e2(e2_) {} inline R_xlen_t size() const { return e2.size() + e2.nrow(); } inline R_xlen_t nrow() const { return e2.nrow(); } inline R_xlen_t ncol() const { return e2.ncol() + 1; } inline stored_type operator[](R_xlen_t i) const { return (i < e2.nrow()) ? e1[i] : e2[i - e2.nrow()]; } inline stored_type operator()(R_xlen_t i, R_xlen_t j) const { R_xlen_t index = i + nrow() * j; return (*this)[index]; } }; // binding logic; both scalar template class JoinOp::type>, ScalarBindable::type> > : public BindableExpression::type>, ScalarBindable::type> > >, public Rcpp::MatrixBase::type>, ScalarBindable::type> > > { public: typedef typename cbind_storage_type::type stored_type; typedef ScalarBindable::type> E1; typedef ScalarBindable::type> E2; private: const E1& e1; const E2& e2; public: JoinOp(const BindableExpression& e1_, const BindableExpression& e2_) : e1(e1_), e2(e2_) {} inline R_xlen_t size() const { return e2.size() + e2.nrow(); } inline R_xlen_t nrow() const { return e2.nrow(); } inline R_xlen_t ncol() const { return e2.ncol() + 1; } inline stored_type operator[](R_xlen_t i) const { return (i < e2.nrow()) ? e1[i] : e2[i]; } inline stored_type operator()(R_xlen_t i, R_xlen_t j) const { R_xlen_t index = i + nrow() * j; return (*this)[index]; } }; // for template argument deduction template inline ContainerBindable > MakeContainerBindable(const Rcpp::Matrix& x) { return ContainerBindable >(x); } template inline ContainerBindable > MakeContainerBindable(const Rcpp::Vector& x) { return ContainerBindable >(x); } template <> inline ContainerBindable > MakeContainerBindable(const Rcpp::Matrix& x) { return ContainerBindable >(x); } template <> inline ContainerBindable > MakeContainerBindable(const Rcpp::Vector& x) { return ContainerBindable >(x); } template inline ScalarBindable MakeScalarBindable(const T& t) { return ScalarBindable(t); } // for expressions of arbitrary length template inline JoinOp operator,( const BindableExpression& e1, const BindableExpression& e2) { return JoinOp(e1, e2); } // helpers namespace detail { // distinguish Matrix/Vector from scalar template class has_stored_type { private: typedef char yes; typedef struct { char array[2]; } no; template static yes test(typename C::stored_type*); template static no test(...); public: static const bool value = sizeof(test(0)) == sizeof(yes); }; // functor to dispatch appropriate Make*Bindable() call template ::value> struct MakeBindableCall {}; template struct MakeBindableCall { typedef typename cbind_storage_type< cbind_sexptype_traits::rtype >::type stored_type; enum { RTYPE = cbind_sexptype_traits::rtype }; ContainerBindable operator()(const T& t) const { return MakeContainerBindable(t); } }; // specialize for LGLSXP template <> struct MakeBindableCall, true> { typedef Rcpp::Matrix T; typedef bool stored_type; enum { RTYPE = cbind_sexptype_traits::rtype }; ContainerBindable operator()(const T& t) const { return MakeContainerBindable(t); } }; template <> struct MakeBindableCall, true> { typedef Rcpp::Vector T; typedef bool stored_type; enum { RTYPE = cbind_sexptype_traits::rtype }; ContainerBindable operator()(const T& t) const { return MakeContainerBindable(t); } }; template struct MakeBindableCall { enum { RTYPE = cbind_sexptype_traits::rtype }; ScalarBindable operator()(const T& t) const { return MakeScalarBindable(t); } }; template inline typename Rcpp::traits::enable_if< has_stored_type::value, MakeBindableCall >::type MakeBindable(const T& t) { return MakeBindableCall(); } template inline typename Rcpp::traits::enable_if< !has_stored_type::value, MakeBindableCall >::type MakeBindable(const T& t) { return MakeBindableCall(); } // determine cbind return type from first template // parameter, agnostic of Matrix/Vector/scalar template ::value> struct matrix_return {}; template struct matrix_return { typedef typename cbind_storage_type< cbind_sexptype_traits::rtype >::type stored_type; enum { RTYPE = cbind_sexptype_traits::rtype }; typedef Rcpp::Matrix type; }; // specialize for LGLSXP // normally would default to IntegerMatrix template <> struct matrix_return, true> { typedef Rcpp::Matrix type; }; template <> struct matrix_return, true> { typedef Rcpp::Matrix type; }; template <> struct matrix_return { typedef Rcpp::Matrix type; }; template struct matrix_return { enum { RTYPE = cbind_sexptype_traits::rtype }; typedef Rcpp::Matrix type; }; } // detail template ::value> struct matrix_return : public detail::matrix_return {}; template struct matrix_return : public detail::matrix_return {}; } // cbind_impl #define MakeBindable(x) (cbind_impl::detail::MakeBindable(x)(x)) // begin cbind overloads template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2) { return (MakeBindable(t1), MakeBindable(t2)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4)); } // 5 template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9)); } // 10 template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14)); } // 15 template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19)); } // 20 template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24)); } // 25 template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29)); } // 30 template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31), MakeBindable(t32)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31), MakeBindable(t32), MakeBindable(t33)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31), MakeBindable(t32), MakeBindable(t33), MakeBindable(t34)); } // 35 template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31), MakeBindable(t32), MakeBindable(t33), MakeBindable(t34), MakeBindable(t35)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31), MakeBindable(t32), MakeBindable(t33), MakeBindable(t34), MakeBindable(t35), MakeBindable(t36)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31), MakeBindable(t32), MakeBindable(t33), MakeBindable(t34), MakeBindable(t35), MakeBindable(t36), MakeBindable(t37)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31), MakeBindable(t32), MakeBindable(t33), MakeBindable(t34), MakeBindable(t35), MakeBindable(t36), MakeBindable(t37), MakeBindable(t38)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38, const T39& t39) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31), MakeBindable(t32), MakeBindable(t33), MakeBindable(t34), MakeBindable(t35), MakeBindable(t36), MakeBindable(t37), MakeBindable(t38), MakeBindable(t39)); } // 40 template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38, const T39& t39, const T40& t40) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31), MakeBindable(t32), MakeBindable(t33), MakeBindable(t34), MakeBindable(t35), MakeBindable(t36), MakeBindable(t37), MakeBindable(t38), MakeBindable(t39), MakeBindable(t40)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38, const T39& t39, const T40& t40, const T41& t41) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31), MakeBindable(t32), MakeBindable(t33), MakeBindable(t34), MakeBindable(t35), MakeBindable(t36), MakeBindable(t37), MakeBindable(t38), MakeBindable(t39), MakeBindable(t40), MakeBindable(t41)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38, const T39& t39, const T40& t40, const T41& t41, const T42& t42) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31), MakeBindable(t32), MakeBindable(t33), MakeBindable(t34), MakeBindable(t35), MakeBindable(t36), MakeBindable(t37), MakeBindable(t38), MakeBindable(t39), MakeBindable(t40), MakeBindable(t41), MakeBindable(t42)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38, const T39& t39, const T40& t40, const T41& t41, const T42& t42, const T43& t43) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31), MakeBindable(t32), MakeBindable(t33), MakeBindable(t34), MakeBindable(t35), MakeBindable(t36), MakeBindable(t37), MakeBindable(t38), MakeBindable(t39), MakeBindable(t40), MakeBindable(t41), MakeBindable(t42), MakeBindable(t43)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38, const T39& t39, const T40& t40, const T41& t41, const T42& t42, const T43& t43, const T44& t44) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31), MakeBindable(t32), MakeBindable(t33), MakeBindable(t34), MakeBindable(t35), MakeBindable(t36), MakeBindable(t37), MakeBindable(t38), MakeBindable(t39), MakeBindable(t40), MakeBindable(t41), MakeBindable(t42), MakeBindable(t43), MakeBindable(t44)); } // 45 template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38, const T39& t39, const T40& t40, const T41& t41, const T42& t42, const T43& t43, const T44& t44, const T45& t45) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31), MakeBindable(t32), MakeBindable(t33), MakeBindable(t34), MakeBindable(t35), MakeBindable(t36), MakeBindable(t37), MakeBindable(t38), MakeBindable(t39), MakeBindable(t40), MakeBindable(t41), MakeBindable(t42), MakeBindable(t43), MakeBindable(t44), MakeBindable(t45)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38, const T39& t39, const T40& t40, const T41& t41, const T42& t42, const T43& t43, const T44& t44, const T45& t45, const T46& t46) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31), MakeBindable(t32), MakeBindable(t33), MakeBindable(t34), MakeBindable(t35), MakeBindable(t36), MakeBindable(t37), MakeBindable(t38), MakeBindable(t39), MakeBindable(t40), MakeBindable(t41), MakeBindable(t42), MakeBindable(t43), MakeBindable(t44), MakeBindable(t45), MakeBindable(t46)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38, const T39& t39, const T40& t40, const T41& t41, const T42& t42, const T43& t43, const T44& t44, const T45& t45, const T46& t46, const T47& t47) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31), MakeBindable(t32), MakeBindable(t33), MakeBindable(t34), MakeBindable(t35), MakeBindable(t36), MakeBindable(t37), MakeBindable(t38), MakeBindable(t39), MakeBindable(t40), MakeBindable(t41), MakeBindable(t42), MakeBindable(t43), MakeBindable(t44), MakeBindable(t45), MakeBindable(t46), MakeBindable(t47)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38, const T39& t39, const T40& t40, const T41& t41, const T42& t42, const T43& t43, const T44& t44, const T45& t45, const T46& t46, const T47& t47, const T48& t48) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31), MakeBindable(t32), MakeBindable(t33), MakeBindable(t34), MakeBindable(t35), MakeBindable(t36), MakeBindable(t37), MakeBindable(t38), MakeBindable(t39), MakeBindable(t40), MakeBindable(t41), MakeBindable(t42), MakeBindable(t43), MakeBindable(t44), MakeBindable(t45), MakeBindable(t46), MakeBindable(t47), MakeBindable(t48)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38, const T39& t39, const T40& t40, const T41& t41, const T42& t42, const T43& t43, const T44& t44, const T45& t45, const T46& t46, const T47& t47, const T48& t48, const T49& t49) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31), MakeBindable(t32), MakeBindable(t33), MakeBindable(t34), MakeBindable(t35), MakeBindable(t36), MakeBindable(t37), MakeBindable(t38), MakeBindable(t39), MakeBindable(t40), MakeBindable(t41), MakeBindable(t42), MakeBindable(t43), MakeBindable(t44), MakeBindable(t45), MakeBindable(t46), MakeBindable(t47), MakeBindable(t48), MakeBindable(t49)); } // 50 template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38, const T39& t39, const T40& t40, const T41& t41, const T42& t42, const T43& t43, const T44& t44, const T45& t45, const T46& t46, const T47& t47, const T48& t48, const T49& t49, const T50& t50) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31), MakeBindable(t32), MakeBindable(t33), MakeBindable(t34), MakeBindable(t35), MakeBindable(t36), MakeBindable(t37), MakeBindable(t38), MakeBindable(t39), MakeBindable(t40), MakeBindable(t41), MakeBindable(t42), MakeBindable(t43), MakeBindable(t44), MakeBindable(t45), MakeBindable(t46), MakeBindable(t47), MakeBindable(t48), MakeBindable(t49), MakeBindable(t50)); } // end cbind overloads #undef MakeBindable } // sugar namespace { using sugar::cbind; } } // Rcpp #endif // Rcpp__sugar__cbind_h Rcpp/inst/include/Rcpp/sugar/functions/is_nan.h0000644000176200001440000000302012754425121021231 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // is_nan.h: Rcpp R/C++ interface class library -- is_nan // // Copyright (C) 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__is_nan_h #define Rcpp__sugar__is_nan_h namespace Rcpp{ namespace sugar{ template class IsNaN : public ::Rcpp::VectorBase< LGLSXP, false, IsNaN > { public: IsNaN( const VEC_TYPE& obj_) : obj(obj_){} inline int operator[]( R_xlen_t i ) const { return ::Rcpp::traits::is_nan( obj[i] ) ; } inline R_xlen_t size() const { return obj.size() ; } private: const VEC_TYPE& obj ; } ; } // sugar template inline sugar::IsNaN is_nan( const Rcpp::VectorBase& t){ return sugar::IsNaN( t.get_ref() ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/ifelse.h0000644000176200001440000002622112754425121021241 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // ifelse.h: Rcpp R/C++ interface class library -- ifelse // // Copyright (C) 2010 - 2014 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__ifelse_h #define Rcpp__sugar__ifelse_h namespace Rcpp{ namespace sugar{ template < int RTYPE, bool COND_NA, typename COND_T, bool LHS_NA , typename LHS_T, bool RHS_NA , typename RHS_T > class IfElse : public VectorBase< RTYPE, ( COND_NA || LHS_NA || RHS_NA ) , IfElse > { public: typedef Rcpp::VectorBase COND_TYPE ; typedef Rcpp::VectorBase LHS_TYPE ; typedef Rcpp::VectorBase RHS_TYPE ; typedef typename traits::storage_type::type STORAGE ; // typedef typename Rcpp::traits::Extractor::type LHS_EXT ; // typedef typename Rcpp::traits::Extractor::type RHS_EXT ; IfElse( const COND_TYPE& cond_, const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : cond(cond_), lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) { /* FIXME : cond, lhs and rhs must all have the same size */ RCPP_DEBUG( DEMANGLE(IfElse) ) ; } inline STORAGE operator[]( R_xlen_t i ) const { int x = cond[i] ; if( Rcpp::traits::is_na(x) ) return Rcpp::traits::get_na() ; if( x ) return lhs[i] ; return rhs[i] ; } inline R_xlen_t size() const { return cond.size() ; } private: const COND_TYPE& cond ; const LHS_T& lhs ; const RHS_T& rhs ; } ; template < int RTYPE, typename COND_T, bool LHS_NA , typename LHS_T, bool RHS_NA , typename RHS_T > class IfElse : public VectorBase< RTYPE, ( LHS_NA || RHS_NA ) , IfElse > { public: typedef Rcpp::VectorBase COND_TYPE ; typedef Rcpp::VectorBase LHS_TYPE ; typedef Rcpp::VectorBase RHS_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; IfElse( const COND_TYPE& cond_, const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : cond(cond_), lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) { /* FIXME : cond, lhs and rhs must all have the same size */ } inline STORAGE operator[]( R_xlen_t i ) const { if( cond[i] ) return lhs[i] ; return rhs[i] ; } inline R_xlen_t size() const { return cond.size() ; } private: const COND_TYPE& cond ; const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; /* ifelse( cond, primitive, Vector ) */ template < int RTYPE, bool COND_NA, typename COND_T, bool RHS_NA , typename RHS_T > class IfElse_Primitive_Vector : public VectorBase< RTYPE, true , IfElse_Primitive_Vector > { public: typedef Rcpp::VectorBase COND_TYPE ; typedef Rcpp::VectorBase RHS_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; IfElse_Primitive_Vector( const COND_TYPE& cond_, STORAGE lhs_, const RHS_TYPE& rhs_ ) : cond(cond_), lhs(lhs_), rhs(rhs_.get_ref()) { /* FIXME : cond, lhs and rhs must all have the sale size */ } inline STORAGE operator[]( R_xlen_t i ) const { int x = cond[i] ; if( Rcpp::traits::is_na(x) ) return x ; if( x ) return lhs ; return rhs[i] ; } inline R_xlen_t size() const { return cond.size() ; } private: const COND_TYPE& cond ; STORAGE lhs ; const RHS_EXT& rhs ; } ; template < int RTYPE, typename COND_T, bool RHS_NA , typename RHS_T > class IfElse_Primitive_Vector : public VectorBase< RTYPE, true, IfElse_Primitive_Vector > { public: typedef Rcpp::VectorBase COND_TYPE ; typedef Rcpp::VectorBase RHS_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; IfElse_Primitive_Vector( const COND_TYPE& cond_, STORAGE lhs_, const RHS_TYPE& rhs_ ) : cond(cond_), lhs(lhs_), rhs(rhs_.get_ref()) { /* FIXME : cond, lhs and rhs must all have the same size */ } inline STORAGE operator[]( R_xlen_t i ) const { if( cond[i] ) return lhs ; return rhs[i] ; } inline R_xlen_t size() const { return cond.size() ; } private: const COND_TYPE& cond ; STORAGE lhs ; const RHS_EXT& rhs ; } ; /* ifelse( cond, Vector, primitive ) */ template < int RTYPE, bool COND_NA, typename COND_T, bool LHS_NA , typename LHS_T > class IfElse_Vector_Primitive : public VectorBase< RTYPE, true , IfElse_Vector_Primitive > { public: typedef Rcpp::VectorBase COND_TYPE ; typedef Rcpp::VectorBase LHS_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; IfElse_Vector_Primitive( const COND_TYPE& cond_, const LHS_TYPE& lhs_, STORAGE rhs_ ) : cond(cond_), lhs(lhs_.get_ref()), rhs(rhs_) { /* FIXME : cond, lhs and rhs must all have the same size */ } inline STORAGE operator[]( R_xlen_t i ) const { int x = cond[i] ; if( Rcpp::traits::is_na(x) ) return Rcpp::traits::get_na() ; if( x ) return lhs[i] ; return rhs ; } inline R_xlen_t size() const { return cond.size() ; } private: const COND_TYPE& cond ; const LHS_EXT& lhs ; const STORAGE rhs ; } ; template < int RTYPE, typename COND_T, bool LHS_NA , typename LHS_T > class IfElse_Vector_Primitive : public VectorBase< RTYPE, true , IfElse_Vector_Primitive > { public: typedef Rcpp::VectorBase COND_TYPE ; typedef Rcpp::VectorBase LHS_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; IfElse_Vector_Primitive( const COND_TYPE& cond_, const LHS_TYPE& lhs_, STORAGE rhs_ ) : cond(cond_), lhs(lhs_.get_ref()), rhs(rhs_) { /* FIXME : cond, lhs and rhs must all have the sale size */ } inline STORAGE operator[]( R_xlen_t i ) const { if( cond[i] ) return lhs[i] ; return rhs ; } inline R_xlen_t size() const { return cond.size() ; } private: const COND_TYPE& cond ; const LHS_EXT& lhs ; const STORAGE rhs ; } ; /* ifelse( cond, primitive, primitive ) */ template < int RTYPE, bool COND_NA, typename COND_T > class IfElse_Primitive_Primitive : public VectorBase< RTYPE, true , IfElse_Primitive_Primitive > { public: typedef Rcpp::VectorBase COND_TYPE ; typedef typename traits::storage_type::type STORAGE ; IfElse_Primitive_Primitive( const COND_TYPE& cond_, STORAGE lhs_, STORAGE rhs_ ) : cond(cond_), lhs(lhs_), rhs(rhs_) { /* FIXME : cond, lhs and rhs must all have the same size */ } inline STORAGE operator[]( R_xlen_t i ) const { int x = cond[i] ; if( Rcpp::traits::is_na(x) ) return Rcpp::traits::get_na() ; return x ? lhs : rhs ; } inline R_xlen_t size() const { return cond.size() ; } private: const COND_TYPE& cond ; STORAGE lhs ; STORAGE rhs ; STORAGE na ; } ; template < int RTYPE, typename COND_T > class IfElse_Primitive_Primitive : public VectorBase< RTYPE, true , IfElse_Primitive_Primitive > { public: typedef Rcpp::VectorBase COND_TYPE ; typedef typename traits::storage_type::type STORAGE ; IfElse_Primitive_Primitive( const COND_TYPE& cond_, STORAGE lhs_, STORAGE rhs_ ) : cond(cond_), lhs(lhs_), rhs(rhs_) { /* FIXME : cond, lhs and rhs must all have the same size */ } inline STORAGE operator[]( R_xlen_t i ) const { return cond[i] ? lhs : rhs ; } inline R_xlen_t size() const { return cond.size() ; } private: const COND_TYPE& cond ; STORAGE lhs ; STORAGE rhs ; } ; } // sugar template < int RTYPE, bool COND_NA, typename COND_T, bool LHS_NA , typename LHS_T, bool RHS_NA , typename RHS_T > inline sugar::IfElse< RTYPE,COND_NA,COND_T,LHS_NA,LHS_T,RHS_NA,RHS_T > ifelse( const Rcpp::VectorBase& cond, const Rcpp::VectorBase& lhs, const Rcpp::VectorBase& rhs ){ return sugar::IfElse( cond, lhs, rhs ) ; } template < int RTYPE, bool COND_NA, typename COND_T, bool RHS_NA , typename RHS_T > inline sugar::IfElse_Primitive_Vector< RTYPE,COND_NA,COND_T,RHS_NA,RHS_T > ifelse( const Rcpp::VectorBase& cond, typename traits::storage_type::type lhs, const Rcpp::VectorBase& rhs ){ return sugar::IfElse_Primitive_Vector( cond, lhs, rhs ) ; } template < int RTYPE, bool COND_NA, typename COND_T, bool RHS_NA , typename RHS_T > inline sugar::IfElse_Vector_Primitive< RTYPE,COND_NA,COND_T,RHS_NA,RHS_T > ifelse( const Rcpp::VectorBase& cond, const Rcpp::VectorBase& lhs, typename traits::storage_type::type rhs ){ return sugar::IfElse_Vector_Primitive( cond, lhs, rhs ) ; } template< bool COND_NA, typename COND_T > inline sugar::IfElse_Primitive_Primitive< REALSXP,COND_NA,COND_T > ifelse( const Rcpp::VectorBase& cond, double lhs, double rhs ){ return sugar::IfElse_Primitive_Primitive( cond, lhs, rhs ) ; } template< bool COND_NA, typename COND_T > inline sugar::IfElse_Primitive_Primitive< INTSXP,COND_NA,COND_T > ifelse( const Rcpp::VectorBase& cond, int lhs, int rhs ){ return sugar::IfElse_Primitive_Primitive( cond, lhs, rhs ) ; } template< bool COND_NA, typename COND_T > inline sugar::IfElse_Primitive_Primitive< CPLXSXP,COND_NA,COND_T > ifelse( const Rcpp::VectorBase& cond, Rcomplex lhs, Rcomplex rhs ){ return sugar::IfElse_Primitive_Primitive( cond, lhs, rhs ) ; } template< bool COND_NA, typename COND_T > inline sugar::IfElse_Primitive_Primitive< LGLSXP,COND_NA,COND_T > ifelse( const Rcpp::VectorBase& cond, bool lhs, bool rhs ){ return sugar::IfElse_Primitive_Primitive( cond, lhs, rhs ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/min.h0000644000176200001440000000461613325224463020562 0ustar liggesusers // Min.h: Rcpp R/C++ interface class library -- min // // Copyright (C) 2012 - 2018 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__min_h #define Rcpp__sugar__min_h namespace Rcpp{ namespace sugar{ template class Min { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; Min( const T& obj_) : obj(obj_) {} operator STORAGE() const { R_xlen_t n = obj.size(); if (n == 0) return(static_cast(R_PosInf)); STORAGE min, current ; min = obj[0] ; if( Rcpp::traits::is_na( min ) ) return min ; for( R_xlen_t i=1; i( current ) ) return current; if( current < min ) min = current ; } return min ; } const T& obj ; } ; // version for NA = false template class Min { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; Min( const T& obj_) : obj(obj_) {} operator STORAGE() const { R_xlen_t n = obj.size(); if (n == 0) return(static_cast(R_PosInf)); STORAGE min, current ; min = obj[0] ; for( R_xlen_t i=1; i sugar::Min min( const VectorBase& x){ return sugar::Min(x.get_ref()) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/head.h0000644000176200001440000000323412754425121020672 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // head.h: Rcpp R/C++ interface class library -- head // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__head_h #define Rcpp__sugar__head_h namespace Rcpp{ namespace sugar{ template class Head : public Rcpp::VectorBase< RTYPE ,NA, Head > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; Head( const VEC_TYPE& object_, R_xlen_t n_ ) : object(object_), n(n_) { if( n < 0 ){ n = object.size() + n ; } } inline STORAGE operator[]( R_xlen_t i ) const { return object[ i ] ; } inline R_xlen_t size() const { return n; } private: const VEC_TYPE& object ; int n ; } ; } // sugar template inline sugar::Head head( const VectorBase& t, R_xlen_t n ){ return sugar::Head( t, n ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/sum.h0000644000176200001440000000636212754425121020602 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // sum.h: Rcpp R/C++ interface class library -- sum // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__sum_h #define Rcpp__sugar__sum_h namespace Rcpp{ namespace sugar{ template class Sum : public Lazy< typename Rcpp::traits::storage_type::type , Sum > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor< RTYPE, NA, T>::type VEC_EXT ; Sum( const VEC_TYPE& object_ ) : object(object_.get_ref()){} STORAGE get() const { STORAGE result = 0 ; R_xlen_t n = object.size() ; STORAGE current ; for( R_xlen_t i=0; i(current) ) return Rcpp::traits::get_na() ; result += current ; } return result ; } private: const VEC_EXT& object ; } ; // RTYPE = REALSXP template class Sum : public Lazy< double , Sum > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor< REALSXP, NA, T>::type VEC_EXT ; Sum( const VEC_TYPE& object_ ) : object(object_.get_ref()){} double get() const { double result = 0 ; R_xlen_t n = object.size() ; for( R_xlen_t i=0; i class Sum : public Lazy< typename Rcpp::traits::storage_type::type , Sum > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor< RTYPE, false, T>::type VEC_EXT ; Sum( const VEC_TYPE& object_ ) : object(object_.get_ref()){} STORAGE get() const { STORAGE result = 0 ; R_xlen_t n = object.size() ; for( R_xlen_t i=0; i inline sugar::Sum sum( const VectorBase& t){ return sugar::Sum( t ) ; } template inline sugar::Sum sum( const VectorBase& t){ return sugar::Sum( t ) ; } template inline sugar::Sum sum( const VectorBase& t){ return sugar::Sum( t ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/sd.h0000644000176200001440000000301112754425121020370 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // mean.h: Rcpp R/C++ interface class library -- mean // // Copyright (C) 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__sd_h #define Rcpp__sugar__sd_h namespace Rcpp{ namespace sugar{ template class Sd : public Lazy< typename Rcpp::traits::storage_type::type , Sd > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; Sd( const VEC_TYPE& object_ ) : object(object_){} STORAGE get() const { return ::sqrt( var(object).get() ) ; } private: const VEC_TYPE& object ; } ; } // sugar template inline sugar::Sd sd( const VectorBase& t){ return sugar::Sd( t ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/match.h0000644000176200001440000000233312754425121021064 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // match.h: Rcpp R/C++ interface class library -- match // // Copyright (C) 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__match_h #define Rcpp__sugar__match_h namespace Rcpp{ template inline IntegerVector match( const VectorBase& x, const VectorBase& table_ ){ Vector table = table_ ; return sugar::IndexHash( table ).fill().lookup( x.get_ref() ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/pmax.h0000644000176200001440000001165312754425121020742 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // pmax.h: Rcpp R/C++ interface class library -- pmax // // Copyright (C) 2010 - 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__pmax_h #define Rcpp__sugar__pmax_h namespace Rcpp{ namespace sugar{ template struct pmax_op ; // specializations for double. // we use the fact that NA < x is false template <> struct pmax_op{ inline double operator()( double left, double right ) const { return ( Rcpp::traits::is_na( left ) || (left > right) ) ? left : right ; } } ; template <> struct pmax_op { inline double operator()( double left, double right ) const { return right > left ? right : left ; } } ; template <> struct pmax_op { inline double operator()( double left, double right ) const { return right > left ? right : left ; } } ; template <> struct pmax_op { inline double operator()( double left, double right ) const { return left > right ? left : right ; } } ; // specializations for INTSXP. Since NA is represented as the smallest // int, NA is always the smallest, so it is safe to return NA template struct pmax_op { inline int operator()(int left, int right) const { return left > right ? left : right ; } } ; // general case template class pmax_op_Vector_Primitive { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; pmax_op_Vector_Primitive( STORAGE right_ ) : right(right_) {} inline STORAGE operator()( STORAGE left ) const { return left > right ? left : right ; } private: STORAGE right ; } ; // only special case we need to take care of template <> class pmax_op_Vector_Primitive { public: pmax_op_Vector_Primitive( double right_ ) : right(right_) {} inline double operator()( double left ) const { return ( Rcpp::traits::is_na( left ) || (left > right) ) ? left : right ; } private: double right ; } ; template < int RTYPE, bool LHS_NA, typename LHS_T, bool RHS_NA, typename RHS_T > class Pmax_Vector_Vector : public VectorBase< RTYPE , ( LHS_NA || RHS_NA ) , Pmax_Vector_Vector > { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; typedef pmax_op OPERATOR ; Pmax_Vector_Vector( const LHS_T& lhs_, const RHS_T& rhs_ ) : lhs(lhs_), rhs(rhs_), op() {} inline STORAGE operator[]( R_xlen_t i ) const { return op( lhs[i], rhs[i] ) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_T& lhs ; const RHS_T& rhs ; OPERATOR op ; } ; template < int RTYPE, bool LHS_NA, typename LHS_T > class Pmax_Vector_Primitive : public VectorBase< RTYPE , true , Pmax_Vector_Primitive > { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; typedef pmax_op_Vector_Primitive OPERATOR ; Pmax_Vector_Primitive( const LHS_T& lhs_, STORAGE rhs_ ) : lhs(lhs_), op(rhs_) {} inline STORAGE operator[]( R_xlen_t i ) const { return op( lhs[i] ) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_T& lhs ; OPERATOR op ; } ; } // sugar template < int RTYPE, bool LHS_NA, typename LHS_T, bool RHS_NA, typename RHS_T > inline sugar::Pmax_Vector_Vector pmax( const Rcpp::VectorBase& lhs, const Rcpp::VectorBase& rhs ){ return sugar::Pmax_Vector_Vector( lhs.get_ref(), rhs.get_ref() ) ; } template < int RTYPE, bool LHS_NA, typename LHS_T > inline sugar::Pmax_Vector_Primitive pmax( const Rcpp::VectorBase& lhs, typename Rcpp::traits::storage_type::type rhs ){ return sugar::Pmax_Vector_Primitive( lhs.get_ref(), rhs ) ; } template < int RTYPE, bool RHS_NA, typename RHS_T > inline sugar::Pmax_Vector_Primitive pmax( typename Rcpp::traits::storage_type::type lhs, const Rcpp::VectorBase& rhs ){ return sugar::Pmax_Vector_Primitive( rhs.get_ref(), lhs ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/pow.h0000644000176200001440000000526612754425121020605 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // pow.h: Rcpp R/C++ interface class library -- pow // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__pow_h #define Rcpp__sugar__pow_h namespace Rcpp{ namespace sugar{ template class Pow : public Rcpp::VectorBase< REALSXP ,NA, Pow > { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; Pow( const T& object_, EXPONENT_TYPE exponent ) : object(object_), op(exponent) {} inline double operator[]( R_xlen_t i ) const { return ::pow( object[i], op ); } inline R_xlen_t size() const { return object.size() ; } private: const T& object ; EXPONENT_TYPE op ; } ; template class Pow : public Rcpp::VectorBase< REALSXP ,NA, Pow > { public: Pow( const T& object_, EXPONENT_TYPE exponent ) : object(object_), op(exponent) {} inline double operator[]( R_xlen_t i ) const { int x = object[i] ; return x == NA_INTEGER ? NA_INTEGER : ::pow( x, op ); } inline R_xlen_t size() const { return object.size() ; } private: const T& object ; EXPONENT_TYPE op ; } ; template class Pow : public Rcpp::VectorBase< REALSXP ,false, Pow > { public: Pow( const T& object_, EXPONENT_TYPE exponent ) : object(object_), op(exponent) {} inline double operator[]( R_xlen_t i ) const { return ::pow( object[i], op ); } inline R_xlen_t size() const { return object.size() ; } private: const T& object ; EXPONENT_TYPE op ; } ; } // sugar template inline sugar::Pow pow( const VectorBase& t, EXPONENT_TYPE exponent ){ return sugar::Pow( t.get_ref() , exponent ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/var.h0000644000176200001440000000565012754425121020565 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // var.h: Rcpp R/C++ interface class library -- var // // Copyright (C) 2011 Dirk Eddelbuettel and Romain Francois // Copyright (C) 2015 Wush Wu // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__var_h #define Rcpp__sugar__var_h namespace Rcpp{ namespace sugar{ template class Var : public Lazy< double , Var > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; Var( const VEC_TYPE& object_ ) : object(object_){} double get() const{ const double average = mean(object).get(); const R_xlen_t sample_size = object.size(); double sum_squared_deviations = 0.0; for (R_xlen_t i = 0; i != sample_size; ++i) sum_squared_deviations += std::pow(object[i] - average, 2.0); return sum_squared_deviations / (sample_size - 1); } private: const VEC_TYPE& object ; } ; template class Var : public Lazy< double , Var > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; Var( const VEC_TYPE& object_ ) : object(object_){} double get() const{ const Rcomplex average = mean(object).get(); const R_xlen_t sample_size = object.size(); double sum_squared_deviations_magnitudes = 0.0; for (R_xlen_t i = 0; i != sample_size; ++i) { const Rcomplex deviation = object[i] - average; sum_squared_deviations_magnitudes += deviation.r * deviation.r + deviation.i * deviation.i; } return sum_squared_deviations_magnitudes / (sample_size - 1); } private: const VEC_TYPE& object ; } ; } // sugar template inline sugar::Var var( const VectorBase& t){ return sugar::Var( t ) ; } template inline sugar::Var var( const VectorBase& t){ return sugar::Var( t ) ; } template inline sugar::Var var( const VectorBase& t){ return sugar::Var( t ) ; } template inline sugar::Var var( const VectorBase& t){ return sugar::Var( t ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/mapply.h0000644000176200001440000000200112754425121021262 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // mapply.h: Rcpp R/C++ interface class library -- mapply // // Copyright (C) 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__mapply_h #define Rcpp__sugar__mapply_h #include #include #endif Rcpp/inst/include/Rcpp/sugar/functions/table.h0000644000176200001440000000540015014017044021046 0ustar liggesusers// table.h: Rcpp R/C++ interface class library -- table match // // Copyright (C) 2012 - 2025 Dirk Eddelbuettel, Romain Francois, and Kevin Ushey // Copyright (C) 2025 Dirk Eddelbuettel, Romain Francois, Kevin Ushey and Iñaki Ucar // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__table_h #define Rcpp__sugar__table_h namespace Rcpp{ namespace sugar{ template class CountInserter { public: CountInserter( HASH& hash_ ) : hash(hash_) {} inline void operator()( STORAGE value ){ hash[value]++ ; } private: HASH& hash ; } ; template class Grabber{ public: Grabber( IntegerVector& res_, CharacterVector& names_ ) : res(res_), names(names_), index(0){} template inline void operator()( T pair){ res[index] = pair.second ; names[index++] = internal::r_coerce(pair.first) ; } private: IntegerVector& res ; CharacterVector& names ; R_xlen_t index ; } ; template class Table { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; Table( const TABLE_T& table ): hash(), map() { // populate the initial hash std::for_each( table.begin(), table.end(), Inserter(hash) ) ; // populate the map, sorted by keys map.insert( hash.begin(), hash.end() ) ; } inline operator IntegerVector() const { // fill the result R_xlen_t n = map.size() ; IntegerVector result = no_init(n) ; CharacterVector names = no_init(n) ; std::for_each( map.begin(), map.end(), Grabber(result, names) ) ; result.names() = names ; return result ; } private: typedef std::unordered_map HASH ; typedef CountInserter Inserter ; HASH hash ; typedef std::map > SORTED_MAP ; SORTED_MAP map ; }; } // sugar template inline IntegerVector table( const VectorBase& x ){ return sugar::Table(x.get_ref()) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/rep_len.h0000644000176200001440000000332412754425121021415 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // rep_len.h: Rcpp R/C++ interface class library -- rep_len // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__rep_len_h #define Rcpp__sugar__rep_len_h namespace Rcpp{ namespace sugar{ template class Rep_len : public Rcpp::VectorBase< RTYPE ,NA, Rep_len > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; Rep_len( const VEC_TYPE& object_, R_xlen_t len_ ) : object(object_), len(len_), n(object_.size()){} inline STORAGE operator[]( R_xlen_t i ) const { return object[ i % n ] ; } inline R_xlen_t size() const { return len ; } private: const VEC_TYPE& object ; R_xlen_t len, n ; } ; } // sugar template inline sugar::Rep_len rep_len( const VectorBase& t, R_xlen_t len ){ return sugar::Rep_len( t, len ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/rowSums.h0000644000176200001440000014641713104434112021451 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // rowSums.h: Rcpp R/C++ interface class library -- rowSums, colSums, rowMeans, colMeans // // Copyright (C) 2016 Nathan Russell // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__rowSums_h #define Rcpp__sugar__rowSums_h namespace Rcpp { namespace sugar { namespace detail { inline bool check_na(double x) { return ISNAN(x); } inline bool check_na(int x) { return x == NA_INTEGER; } inline bool check_na(Rboolean x) { return x == NA_LOGICAL; } inline bool check_na(SEXP x) { return x == NA_STRING; } inline bool check_na(Rcomplex x) { return ISNAN(x.r) || ISNAN(x.i); } inline void incr(double* lhs, double rhs) { *lhs += rhs; } inline void incr(int* lhs, int rhs) { *lhs += rhs; } inline void incr(Rcomplex* lhs, const Rcomplex& rhs) { lhs->r += rhs.r; lhs->i += rhs.i; } inline void div(double* lhs, R_xlen_t rhs) { *lhs /= static_cast(rhs); } inline void div(Rcomplex* lhs, R_xlen_t rhs) { lhs->r /= static_cast(rhs); lhs->i /= static_cast(rhs); } inline void set_nan(double* x) { *x = R_NaN; } inline void set_nan(Rcomplex* x) { x->r = R_NaN; x->i = R_NaN; } template struct RowSumsReturn { typedef Vector type; enum { rtype = RTYPE }; }; template <> struct RowSumsReturn { typedef Vector type; enum { rtype = INTSXP }; }; template struct ColSumsReturn : public RowSumsReturn {}; template struct RowMeansReturn { typedef Vector type; enum { rtype = REALSXP }; }; template <> struct RowMeansReturn { typedef Vector type; enum { rtype = CPLXSXP }; }; template struct ColMeansReturn : public RowMeansReturn {}; } // detail // RowSums // na.rm = FALSE // default input // default output // template class RowSumsImpl : public Lazy::type, RowSumsImpl > { private: const MatrixBase& ref; typedef detail::RowSumsReturn return_traits; typedef typename return_traits::type return_vector; typedef typename traits::storage_type::type stored_type; public: RowSumsImpl(const MatrixBase& ref_) : ref(ref_) {} return_vector get() const { R_xlen_t i, j, nr = ref.nrow(), nc = ref.ncol(); return_vector res(nr); for (j = 0; j < nc; j++) { for (i = 0; i < nr; i++) { detail::incr(&res[i], ref(i, j)); } } return res; } }; // RowSums // na.rm = FALSE // LGLSXP / INTSXP input // INTSXP output // // int + NA_LOGICAL (NA_INTEGER) != NA_INTEGER, as is the // case with NA_REAL, so we specialize for these two SEXPTYPES // and do explicit accounting of NAs. // // The two specializations, while necessary, are redundant, hence // the macro. The same applies to the 'na.rm = TRUE' variant, and // likewise for colSums, rowMeans, and colMeans. // #define ROW_SUMS_IMPL_KEEPNA(__RTYPE__) \ \ template \ class RowSumsImpl<__RTYPE__, NA, T, NA_RM> : \ public Lazy::type, RowSumsImpl<__RTYPE__, NA, T, NA_RM> > { \ private: \ const MatrixBase<__RTYPE__, NA, T>& ref; \ \ typedef detail::RowSumsReturn<__RTYPE__> return_traits; \ typedef typename return_traits::type return_vector; \ typedef typename traits::storage_type::type stored_type; \ \ struct bit { \ unsigned char x : 1; \ }; \ \ public: \ RowSumsImpl(const MatrixBase<__RTYPE__, NA, T>& ref_) \ : ref(ref_) \ {} \ \ return_vector get() const { \ R_xlen_t i, j, nr = ref.nrow(), nc = ref.ncol(); \ return_vector res(nr); \ \ std::vector na_flags(nr); \ \ for (j = 0; j < nc; j++) { \ for (i = 0; i < nr; i++) { \ if (detail::check_na(ref(i, j))) { \ na_flags[i].x |= 0x1; \ } \ detail::incr(&res[i], ref(i, j)); \ } \ } \ \ for (i = 0; i < nr; i++) { \ if (na_flags[i].x) { \ res[i] = NA_INTEGER; \ } \ } \ \ return res; \ } \ }; ROW_SUMS_IMPL_KEEPNA(LGLSXP) ROW_SUMS_IMPL_KEEPNA(INTSXP) #undef ROW_SUMS_IMPL_KEEPNA // RowSums // na.rm = TRUE // default input // default output // template class RowSumsImpl : public Lazy::type, RowSumsImpl > { private: const MatrixBase& ref; typedef detail::RowSumsReturn return_traits; typedef typename return_traits::type return_vector; typedef typename traits::storage_type::type stored_type; public: RowSumsImpl(const MatrixBase& ref_) : ref(ref_) {} return_vector get() const { R_xlen_t i, j, nr = ref.nrow(), nc = ref.ncol(); return_vector res(nr); stored_type current = stored_type(); for (j = 0; j < nc; j++) { for (i = 0; i < nr; i++) { current = ref(i, j); if (!detail::check_na(current)) { detail::incr(&res[i], current); } } } return res; } }; // RowSums // na.rm = TRUE // LGLSXP / INTSXP input // INTSXP output // #define ROW_SUMS_IMPL_RMNA(__RTYPE__) \ \ template \ class RowSumsImpl<__RTYPE__, NA, T, true> : \ public Lazy::type, RowSumsImpl<__RTYPE__, NA, T, true> > { \ private: \ const MatrixBase<__RTYPE__, NA, T>& ref; \ \ typedef detail::RowSumsReturn<__RTYPE__> return_traits; \ typedef typename return_traits::type return_vector; \ typedef typename traits::storage_type::type stored_type; \ \ public: \ RowSumsImpl(const MatrixBase<__RTYPE__, NA, T>& ref_) \ : ref(ref_) \ {} \ \ return_vector get() const { \ R_xlen_t i, j, nr = ref.nrow(), nc = ref.ncol(); \ return_vector res(nr); \ \ stored_type current = stored_type(); \ \ for (j = 0; j < nc; j++) { \ for (i = 0; i < nr; i++) { \ current = ref(i, j); \ if (!detail::check_na(current)) { \ detail::incr(&res[i], current); \ } \ } \ } \ \ return res; \ } \ }; ROW_SUMS_IMPL_RMNA(LGLSXP) ROW_SUMS_IMPL_RMNA(INTSXP) #undef ROW_SUMS_IMPL_RMNA // RowSums // Input with template parameter NA = false // RowSumsImpl<..., NA_RM = false> // template class RowSumsImpl : public RowSumsImpl {}; // ColSums // na.rm = FALSE // default input // default output // template class ColSumsImpl : public Lazy::type, ColSumsImpl > { private: const MatrixBase& ref; typedef detail::ColSumsReturn return_traits; typedef typename return_traits::type return_vector; typedef typename traits::storage_type::type stored_type; public: ColSumsImpl(const MatrixBase& ref_) : ref(ref_) {} return_vector get() const { R_xlen_t i, j, nr = ref.nrow(), nc = ref.ncol(); return_vector res(nc); for (j = 0; j < nc; j++) { for (i = 0; i < nr; i++) { detail::incr(&res[j], ref(i, j)); } } return res; } }; // ColSums // na.rm = FALSE // LGLSXP / INTSXP input // INTSXP output // #define COL_SUMS_IMPL_KEEPNA(__RTYPE__) \ \ template \ class ColSumsImpl<__RTYPE__, NA, T, NA_RM> : \ public Lazy::type, ColSumsImpl<__RTYPE__, NA, T, NA_RM> > { \ private: \ const MatrixBase<__RTYPE__, NA, T>& ref; \ \ typedef detail::ColSumsReturn<__RTYPE__> return_traits; \ typedef typename return_traits::type return_vector; \ typedef typename traits::storage_type::type stored_type; \ \ struct bit { \ unsigned char x : 1; \ }; \ \ public: \ ColSumsImpl(const MatrixBase<__RTYPE__, NA, T>& ref_) \ : ref(ref_) \ {} \ \ return_vector get() const { \ R_xlen_t i, j, nr = ref.nrow(), nc = ref.ncol(); \ return_vector res(nc); \ \ std::vector na_flags(nc); \ \ for (j = 0; j < nc; j++) { \ for (i = 0; i < nr; i++) { \ if (detail::check_na(ref(i, j))) { \ na_flags[j].x |= 0x1; \ } \ detail::incr(&res[j], ref(i, j)); \ } \ } \ \ for (j = 0; j < nc; j++) { \ if (na_flags[j].x) { \ res[j] = NA_INTEGER; \ } \ } \ \ return res; \ } \ }; COL_SUMS_IMPL_KEEPNA(LGLSXP) COL_SUMS_IMPL_KEEPNA(INTSXP) #undef COL_SUMS_IMPL_KEEPNA // ColSums // na.rm = TRUE // default input // default output // template class ColSumsImpl : public Lazy::type, ColSumsImpl > { private: const MatrixBase& ref; typedef detail::ColSumsReturn return_traits; typedef typename return_traits::type return_vector; typedef typename traits::storage_type::type stored_type; public: ColSumsImpl(const MatrixBase& ref_) : ref(ref_) {} return_vector get() const { R_xlen_t i, j, nr = ref.nrow(), nc = ref.ncol(); return_vector res(nc); stored_type current = stored_type(); for (j = 0; j < nc; j++) { for (i = 0; i < nr; i++) { current = ref(i, j); if (!detail::check_na(current)) { detail::incr(&res[j], current); } } } return res; } }; // ColSums // na.rm = TRUE // LGLSXP / INTSXP input // INTSXP output // #define COL_SUMS_IMPL_RMNA(__RTYPE__) \ \ template \ class ColSumsImpl<__RTYPE__, NA, T, true> : \ public Lazy::type, ColSumsImpl<__RTYPE__, NA, T, true> > { \ private: \ const MatrixBase<__RTYPE__, NA, T>& ref; \ \ typedef detail::ColSumsReturn<__RTYPE__> return_traits; \ typedef typename return_traits::type return_vector; \ typedef typename traits::storage_type::type stored_type; \ \ public: \ ColSumsImpl(const MatrixBase<__RTYPE__, NA, T>& ref_) \ : ref(ref_) \ {} \ \ return_vector get() const { \ R_xlen_t i, j, nr = ref.nrow(), nc = ref.ncol(); \ return_vector res(nc); \ \ stored_type current = stored_type(); \ \ for (j = 0; j < nc; j++) { \ for (i = 0; i < nr; i++) { \ current = ref(i, j); \ if (!detail::check_na(current)) { \ detail::incr(&res[j], current); \ } \ } \ } \ \ return res; \ } \ }; COL_SUMS_IMPL_RMNA(LGLSXP) COL_SUMS_IMPL_RMNA(INTSXP) #undef COL_SUMS_IMPL_RMNA // ColSums // Input with template parameter NA = false // ColSumsImpl<..., NA_RM = false> // template class ColSumsImpl : public ColSumsImpl {}; // RowMeans // na.rm = FALSE // default input // default output // // All RowMeans and ColMeans variants use a single-pass // mean calculation as in array.c // template class RowMeansImpl : public Lazy::type, RowMeansImpl > { private: const MatrixBase& ref; typedef detail::RowMeansReturn return_traits; typedef typename return_traits::type return_vector; typedef typename traits::storage_type::type stored_type; public: RowMeansImpl(const MatrixBase& ref_) : ref(ref_) {} return_vector get() const { R_xlen_t i, j, nr = ref.nrow(), nc = ref.ncol(); return_vector res(nr); for (j = 0; j < nc; j++) { for (i = 0; i < nr; i++) { detail::incr(&res[i], ref(i, j)); } } for (i = 0; i < nr; i++) { detail::div(&res[i], nc); } return res; } }; // RowMeans // na.rm = FALSE // LGLSXP / INTSXP input // REALSXP output // #define ROW_MEANS_IMPL_KEEPNA(__RTYPE__) \ \ template \ class RowMeansImpl<__RTYPE__, NA, T, NA_RM> : \ public Lazy::type, RowMeansImpl<__RTYPE__, NA, T, NA_RM> > { \ private: \ const MatrixBase<__RTYPE__, NA, T>& ref; \ \ typedef detail::RowMeansReturn<__RTYPE__> return_traits; \ typedef typename return_traits::type return_vector; \ typedef typename traits::storage_type::type stored_type; \ \ struct bit { \ unsigned char x : 1; \ }; \ \ public: \ RowMeansImpl(const MatrixBase<__RTYPE__, NA, T>& ref_) \ : ref(ref_) \ {} \ \ return_vector get() const { \ R_xlen_t i, j, nr = ref.nrow(), nc = ref.ncol(); \ return_vector res(nr); \ \ std::vector na_flags(nc); \ \ for (j = 0; j < nc; j++) { \ for (i = 0; i < nr; i++) { \ if (detail::check_na(ref(i, j))) { \ na_flags[i].x |= 0x1; \ } \ detail::incr(&res[i], ref(i, j)); \ } \ } \ \ for (i = 0; i < nr; i++) { \ if (!na_flags[i].x) { \ detail::div(&res[i], nc); \ } else { \ res[i] = NA_REAL; \ } \ } \ \ return res; \ } \ }; ROW_MEANS_IMPL_KEEPNA(LGLSXP) ROW_MEANS_IMPL_KEEPNA(INTSXP) #undef ROW_MEANS_IMPL_KEEPNA // RowMeans // na.rm = TRUE // default input // default output // template class RowMeansImpl : public Lazy::type, RowMeansImpl > { private: const MatrixBase& ref; typedef detail::RowMeansReturn return_traits; typedef typename return_traits::type return_vector; typedef typename traits::storage_type::type stored_type; public: RowMeansImpl(const MatrixBase& ref_) : ref(ref_) {} return_vector get() const { R_xlen_t i, j, nr = ref.nrow(), nc = ref.ncol(); return_vector res(nr); std::vector n_ok(nr, 0); stored_type current = stored_type(); for (j = 0; j < nc; j++) { for (i = 0; i < nr; i++) { current = ref(i, j); if (!detail::check_na(current)) { detail::incr(&res[i], ref(i, j)); ++n_ok[i]; } } } for (i = 0; i < nr; i++) { if (n_ok[i]) { detail::div(&res[i], n_ok[i]); } else { detail::set_nan(&res[i]); } } return res; } }; // RowMeans // na.rm = TRUE // LGLSXP / INTSXP input // REALSXP output // #define ROW_MEANS_IMPL_RMNA(__RTYPE__) \ \ template \ class RowMeansImpl<__RTYPE__, NA, T, true> : \ public Lazy::type, RowMeansImpl<__RTYPE__, NA, T, true> > { \ private: \ const MatrixBase<__RTYPE__, NA, T>& ref; \ \ typedef detail::RowMeansReturn<__RTYPE__> return_traits; \ typedef typename return_traits::type return_vector; \ typedef typename traits::storage_type::type stored_type; \ \ public: \ RowMeansImpl(const MatrixBase<__RTYPE__, NA, T>& ref_) \ : ref(ref_) \ {} \ \ return_vector get() const { \ R_xlen_t i, j, nr = ref.nrow(), nc = ref.ncol(); \ return_vector res(nr); \ \ std::vector n_ok(nr, 0); \ \ for (j = 0; j < nc; j++) { \ for (i = 0; i < nr; i++) { \ if (!detail::check_na(ref(i, j))) { \ detail::incr(&res[i], ref(i, j)); \ ++n_ok[i]; \ } \ } \ } \ \ for (i = 0; i < nr; i++) { \ if (n_ok[i]) { \ detail::div(&res[i], n_ok[i]); \ } else { \ detail::set_nan(&res[i]); \ } \ } \ \ return res; \ } \ }; ROW_MEANS_IMPL_RMNA(LGLSXP) ROW_MEANS_IMPL_RMNA(INTSXP) #undef ROW_MEANS_IMPL_RMNA // RowMeans // Input with template parameter NA = false // RowMeansImpl<..., NA_RM = false> // template class RowMeansImpl : public RowMeansImpl {}; // ColMeans // na.rm = FALSE // default input // default output // template class ColMeansImpl : public Lazy::type, ColMeansImpl > { private: const MatrixBase& ref; typedef detail::ColMeansReturn return_traits; typedef typename return_traits::type return_vector; typedef typename traits::storage_type::type stored_type; public: ColMeansImpl(const MatrixBase& ref_) : ref(ref_) {} return_vector get() const { R_xlen_t i, j, nr = ref.nrow(), nc = ref.ncol(); return_vector res(nc); for (j = 0; j < nc; j++) { for (i = 0; i < nr; i++) { detail::incr(&res[j], ref(i, j)); } } for (j = 0; j < nc; j++) { detail::div(&res[j], nr); } return res; } }; // ColMeans // na.rm = FALSE // LGLSXP / INTSXP input // REALSXP output // #define COL_MEANS_IMPL_KEEPNA(__RTYPE__) \ \ template \ class ColMeansImpl<__RTYPE__, NA, T, NA_RM> : \ public Lazy::type, ColMeansImpl<__RTYPE__, NA, T, NA_RM> > { \ private: \ const MatrixBase<__RTYPE__, NA, T>& ref; \ \ typedef detail::ColMeansReturn<__RTYPE__> return_traits; \ typedef typename return_traits::type return_vector; \ typedef typename traits::storage_type::type stored_type; \ \ struct bit { \ unsigned char x : 1; \ }; \ \ public: \ ColMeansImpl(const MatrixBase<__RTYPE__, NA, T>& ref_) \ : ref(ref_) \ {} \ \ return_vector get() const { \ R_xlen_t i, j, nr = ref.nrow(), nc = ref.ncol(); \ return_vector res(nc); \ \ std::vector na_flags(nc); \ \ for (j = 0; j < nc; j++) { \ for (i = 0; i < nr; i++) { \ if (detail::check_na(ref(i, j))) { \ na_flags[j].x |= 0x1; \ } \ detail::incr(&res[j], ref(i, j)); \ } \ } \ \ for (j = 0; j < nc; j++) { \ if (!na_flags[j].x) { \ detail::div(&res[j], nr); \ } else { \ res[j] = NA_REAL; \ } \ } \ \ return res; \ } \ }; COL_MEANS_IMPL_KEEPNA(LGLSXP) COL_MEANS_IMPL_KEEPNA(INTSXP) #undef COL_MEANS_IMPL_KEEPNA // ColMeans // na.rm = TRUE // default input // default output // template class ColMeansImpl : public Lazy::type, ColMeansImpl > { private: const MatrixBase& ref; typedef detail::ColMeansReturn return_traits; typedef typename return_traits::type return_vector; typedef typename traits::storage_type::type stored_type; public: ColMeansImpl(const MatrixBase& ref_) : ref(ref_) {} return_vector get() const { R_xlen_t i, j, nr = ref.nrow(), nc = ref.ncol(); return_vector res(nc); std::vector n_ok(nc, 0); stored_type current = stored_type(); for (j = 0; j < nc; j++) { for (i = 0; i < nr; i++) { current = ref(i, j); if (!detail::check_na(current)) { detail::incr(&res[j], ref(i, j)); ++n_ok[j]; } } } for (j = 0; j < nc; j++) { if (n_ok[j]) { detail::div(&res[j], n_ok[j]); } else { detail::set_nan(&res[j]); } } return res; } }; // ColMeans // na.rm = TRUE // LGLSXP / INTSXP input // REALSXP output // #define COL_MEANS_IMPL_RMNA(__RTYPE__) \ \ template \ class ColMeansImpl<__RTYPE__, NA, T, true> : \ public Lazy::type, ColMeansImpl<__RTYPE__, NA, T, true> > { \ private: \ const MatrixBase<__RTYPE__, NA, T>& ref; \ \ typedef detail::ColMeansReturn<__RTYPE__> return_traits; \ typedef typename return_traits::type return_vector; \ typedef typename traits::storage_type::type stored_type; \ \ public: \ ColMeansImpl(const MatrixBase<__RTYPE__, NA, T>& ref_) \ : ref(ref_) \ {} \ \ return_vector get() const { \ R_xlen_t i, j, nr = ref.nrow(), nc = ref.ncol(); \ return_vector res(nc); \ \ std::vector n_ok(nc, 0); \ \ for (j = 0; j < nc; j++) { \ for (i = 0; i < nr; i++) { \ if (!detail::check_na(ref(i, j))) { \ detail::incr(&res[j], ref(i, j)); \ ++n_ok[j]; \ } \ } \ } \ \ for (j = 0; j < nc; j++) { \ if (n_ok[j]) { \ detail::div(&res[j], n_ok[j]); \ } else { \ detail::set_nan(&res[j]); \ } \ } \ \ return res; \ } \ }; COL_MEANS_IMPL_RMNA(LGLSXP) COL_MEANS_IMPL_RMNA(INTSXP) #undef COL_MEANS_IMPL_RMNA // ColMeans // Input with template parameter NA = false // ColMeansImpl<..., NA_RM = false> // template class ColMeansImpl : public ColMeansImpl {}; } // sugar template inline typename sugar::detail::RowSumsReturn::type rowSums(const MatrixBase& x, bool na_rm = false) { if (!na_rm) { return sugar::RowSumsImpl(x); } return sugar::RowSumsImpl(x); } template inline typename sugar::detail::ColSumsReturn::type colSums(const MatrixBase& x, bool na_rm = false) { if (!na_rm) { return sugar::ColSumsImpl(x); } return sugar::ColSumsImpl(x); } template inline typename sugar::detail::RowMeansReturn::type rowMeans(const MatrixBase& x, bool na_rm = false) { if (!na_rm) { return sugar::RowMeansImpl(x); } return sugar::RowMeansImpl(x); } template inline typename sugar::detail::ColMeansReturn::type colMeans(const MatrixBase& x, bool na_rm = false) { if (!na_rm) { return sugar::ColMeansImpl(x); } return sugar::ColMeansImpl(x); } } // Rcpp #endif // Rcpp__sugar__rowSums_h Rcpp/inst/include/Rcpp/sugar/functions/Lazy.h0000644000176200001440000000211712754425121020707 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // Lazy.h: Rcpp R/C++ interface class library -- Lazy // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__Lazy_h #define Rcpp__sugar__Lazy_h namespace Rcpp{ namespace sugar{ template class Lazy { public: inline operator T() const { return static_cast(*this).get() ; } } ; } } #endif Rcpp/inst/include/Rcpp/sugar/functions/strings/0000755000176200001440000000000013104434112021275 5ustar liggesusersRcpp/inst/include/Rcpp/sugar/functions/strings/trimws.h0000644000176200001440000001271113104434112022775 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // trimws.h: Rcpp R/C++ interface class library -- trimws // // Copyright (C) 2017 Nathan Russell // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__trimws_h #define Rcpp__sugar__trimws_h #include #include namespace Rcpp { namespace sugar { namespace detail { /* NB: std::isspace is not used because it also counts '\f' and '\v' as whitespace, whereas base::trimws only checks for ' ', '\t', '\r', and '\n' */ inline bool isws(const char c) { return c == ' ' || c == '\t' || c == '\n' || c == '\r'; } inline const char* trim_left(const char* str) { if (!str) { return ""; } while (isws(*str)) { ++str; } return str; } inline const char* trim_right(const char* str, R_len_t sz, std::string* buff) { if (!str) { return ""; } buff->clear(); const char* ptr = str + sz - 1; for (; ptr > str && isws(*ptr); --sz, --ptr); buff->append(str, sz - isws(*ptr)); return buff->c_str(); } inline const char* trim_both(const char* str, R_len_t sz, std::string* buff) { if (!str) { return ""; } buff->clear(); while (isws(*str)) { ++str; --sz; } const char* ptr = str + sz - 1; for (; ptr > str && isws(*ptr); --sz, --ptr); buff->append(str, sz); return buff->c_str(); } } // detail } // sugar inline Vector trimws(const Vector& x, const char* which = "both") { R_xlen_t i = 0, sz = x.size(); Vector res = no_init(sz); std::string buffer; if (*which == 'b') { for (; i < sz; i++) { if (traits::is_na(x[i])) { res[i] = x[i]; } else { res[i] = sugar::detail::trim_both( x[i], LENGTH(x[i]), &buffer ); } } } else if (*which == 'l') { for (; i < sz; i++) { if (traits::is_na(x[i])) { res[i] = x[i]; } else { res[i] = sugar::detail::trim_left(x[i]); } } } else if (*which == 'r') { for (; i < sz; i++) { if (traits::is_na(x[i])) { res[i] = x[i]; } else { res[i] = sugar::detail::trim_right( x[i], LENGTH(x[i]), &buffer ); } } } else { stop("Invalid `which` argument '%s'!", which); return Vector::create("Unreachable"); } return res; } inline Matrix trimws(const Matrix& x, const char* which = "both") { R_xlen_t i = 0, sz = x.size(); int nr = x.nrow(), nc = x.ncol(); Matrix res = no_init(nr, nc); std::string buffer; if (*which == 'b') { for (; i < sz; i++) { if (traits::is_na(x[i])) { res[i] = x[i]; } else { res[i] = sugar::detail::trim_both( x[i], LENGTH(x[i]), &buffer ); } } } else if (*which == 'l') { for (; i < sz; i++) { if (traits::is_na(x[i])) { res[i] = x[i]; } else { res[i] = sugar::detail::trim_left(x[i]); } } } else if (*which == 'r') { for (; i < sz; i++) { if (traits::is_na(x[i])) { res[i] = x[i]; } else { res[i] = sugar::detail::trim_right( x[i], LENGTH(x[i]), &buffer ); } } } else { stop("Invalid `which` argument '%s'!", which); return Matrix(); } return res; } inline String trimws(const String& str, const char* which = "both") { std::string buffer; if (*which == 'b') { if (traits::is_na(str.get_sexp())) { return String(str.get_sexp()); } return sugar::detail::trim_both( str.get_cstring(), LENGTH(str.get_sexp()), &buffer ); } if (*which == 'l') { if (traits::is_na(str.get_sexp())) { return String(str.get_sexp()); } return sugar::detail::trim_left(str.get_cstring()); } if (*which == 'r') { if (traits::is_na(str.get_sexp())) { return String(str.get_sexp()); } return sugar::detail::trim_right( str.get_cstring(), LENGTH(str.get_sexp()), &buffer ); } stop("Invalid `which` argument '%s'!", which); return String("Unreachable"); } } // Rcpp #endif // Rcpp__sugar__trimws_h Rcpp/inst/include/Rcpp/sugar/functions/strings/strings.h0000644000176200001440000000204413100471541023142 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // strings.h: Rcpp R/C++ interface class library -- string sugar functions // // Copyright (C) 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_SUGAR_FUNCTIONS_STRINGS_H #define RCPP_SUGAR_FUNCTIONS_STRINGS_H #include #include #endif Rcpp/inst/include/Rcpp/sugar/functions/strings/collapse.h0000644000176200001440000000273012754425121023264 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // collapse.h: Rcpp R/C++ interface class library -- string sugar functions // // Copyright (C) 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_SUGAR_FUNCTIONS_COLLAPSE_H #define RCPP_SUGAR_FUNCTIONS_COLLAPSE_H namespace Rcpp{ namespace sugar { template inline String collapse__impl( Iterator it, R_xlen_t n ){ static String buffer ; buffer = "" ; for( R_xlen_t i=0; i inline String collapse( const VectorBase& vec ){ return sugar::collapse__impl( vec.get_ref().begin(), vec.size() ) ; } } #endif Rcpp/inst/include/Rcpp/sugar/functions/setdiff.h0000644000176200001440000001411515014017044021406 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // setdiff.h: Rcpp R/C++ interface class library -- setdiff // // Copyright (C) 2012 - 2024 Dirk Eddelbuettel and Romain Francois // Copyright (C) 2025 Dirk Eddelbuettel, Romain Francois and Iñaki Ucar // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__setdiff_h #define Rcpp__sugar__setdiff_h namespace Rcpp{ namespace sugar{ template class RemoveFromSet { public: RemoveFromSet( SET& set_) : set(set_){} template void operator()(T value){ set.erase( value ); } private: SET& set ; } ; template class SetDiff { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; SetDiff( const LHS_T& lhs, const RHS_T& rhs) : lhs_set( get_const_begin(lhs), get_const_end(lhs) ), rhs_set( get_const_begin(rhs), get_const_end(rhs) ) { std::for_each( rhs_set.begin(), rhs_set.end(), RemoveFromSet(lhs_set) ) ; } Vector get() const { R_xlen_t n = lhs_set.size() ; Vector out = no_init(n) ; std::copy( lhs_set.begin(), lhs_set.end(), out.begin() ) ; return out ; } private: typedef std::unordered_set SET ; typedef typename SET::const_iterator ITERATOR ; SET lhs_set ; SET rhs_set ; } ; template class SetEqual { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; SetEqual( const LHS_T& lhs, const RHS_T& rhs) : lhs_set( get_const_begin(lhs), get_const_end(lhs) ), rhs_set( get_const_begin(rhs), get_const_end(rhs) ) { } bool get() const { if( lhs_set.size() != rhs_set.size() ) return false ; ITERATOR it = lhs_set.begin(), end = lhs_set.end(), rhs_end = rhs_set.end() ; for( ; it != end; ){ if( rhs_set.find(*it++) == rhs_end ) return false ; } return true ; } private: typedef std::unordered_set SET ; typedef typename SET::const_iterator ITERATOR ; SET lhs_set ; SET rhs_set ; } ; template class Intersect { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; Intersect( const LHS_T& lhs, const RHS_T& rhs) : intersect() { SET lhs_set( get_const_begin(lhs), get_const_end(lhs) ) ; SET rhs_set( get_const_begin(rhs), get_const_end(rhs) ) ; ITERATOR end = lhs_set.end() ; ITERATOR rhs_end = rhs_set.end() ; for( ITERATOR it=lhs_set.begin(); it != end; it++){ if( rhs_set.find(*it) != rhs_end ) intersect.insert(*it) ; } } Vector get() const { R_xlen_t n = intersect.size() ; Vector out = no_init(n) ; std::copy( intersect.begin(), intersect.end(), out.begin() ) ; return out ; } private: typedef std::unordered_set SET ; typedef typename SET::const_iterator ITERATOR ; SET intersect ; } ; template class Union { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; Union( const LHS_T& lhs, const RHS_T& rhs) : result( get_const_begin(lhs), get_const_end(lhs) ) { result.insert( get_const_begin(rhs), get_const_end(rhs) ) ; } Vector get() const { R_xlen_t n = result.size() ; Vector out = no_init(n) ; std::copy( result.begin(), result.end(), out.begin() ) ; return out ; } private: typedef std::unordered_set SET ; typedef typename SET::const_iterator ITERATOR ; SET result ; } ; } // sugar template inline Vector setdiff( const VectorBase& lhs, const VectorBase& rhs ){ return sugar::SetDiff( lhs.get_ref(), rhs.get_ref() ).get() ; } template inline bool setequal( const VectorBase& lhs, const VectorBase& rhs ){ return sugar::SetEqual( lhs.get_ref(), rhs.get_ref() ).get() ; } template inline Vector intersect( const VectorBase& lhs, const VectorBase& rhs ){ return sugar::Intersect( lhs.get_ref(), rhs.get_ref() ).get() ; } // we cannot use "union" because it is a keyword template inline Vector union_( const VectorBase& lhs, const VectorBase& rhs ){ return sugar::Union( lhs.get_ref(), rhs.get_ref() ).get() ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/median.h0000644000176200001440000001670312754425121021233 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // median.h: Rcpp R/C++ interface class library -- median // // Copyright (C) 2016 Dirk Eddelbuettel, Romain Francois, and Nathan Russell // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__median_h #define Rcpp__sugar__median_h namespace Rcpp { namespace sugar { namespace median_detail { // need to return double for integer vectors // (in case of even-length input vector) // and Rcpp::String for STRSXP // also need to return NA_REAL for // integer vector yielding NA result template struct result { typedef typename Rcpp::traits::storage_type::type type; enum { rtype = RTYPE }; }; template <> struct result { typedef double type; enum { rtype = REALSXP }; }; template <> struct result { typedef Rcpp::String type; enum { rtype = STRSXP }; }; // std::nth_element and std::max_element don't // know how to compare Rcomplex values template inline bool less(T lhs, T rhs) { return lhs < rhs; } template<> inline bool less(Rcomplex lhs, Rcomplex rhs) { if (lhs.r < rhs.r) return true; if (lhs.i < rhs.i) return true; return false; } // compiler does not know how to handle // Rcomplex numerator / double denominator // and need explicit cast for INTSXP case inline double half(double lhs) { return lhs / 2.0; } inline double half(int lhs) { return static_cast(lhs) / 2.0; } inline Rcomplex half(Rcomplex lhs) { lhs.r /= 2.0; lhs.i /= 2.0; return lhs; } } // median_detail // base case template class Median { public: typedef typename median_detail::result::type result_type; typedef typename Rcpp::traits::storage_type::type stored_type; enum { RESULT_RTYPE = median_detail::result::rtype }; typedef T VECTOR; private: VECTOR x; public: Median(const VECTOR& xx) : x(Rcpp::clone(xx)) {} operator result_type() { if (x.size() < 1) { return Rcpp::traits::get_na(); } if (Rcpp::any(Rcpp::is_na(x))) { return Rcpp::traits::get_na(); } R_xlen_t n = x.size() / 2; std::nth_element( x.begin(), x.begin() + n, x.end(), median_detail::less); if (x.size() % 2) return x[n]; return median_detail::half( x[n] + *std::max_element( x.begin(), x.begin() + n, median_detail::less)); } }; // na.rm = TRUE template class Median { public: typedef typename median_detail::result::type result_type; typedef typename Rcpp::traits::storage_type::type stored_type; enum { RESULT_RTYPE = median_detail::result::rtype }; typedef T VECTOR; private: VECTOR x; public: Median(const VECTOR& xx) : x(Rcpp::na_omit(Rcpp::clone(xx))) {} operator result_type() { if (!x.size()) { return Rcpp::traits::get_na(); } R_xlen_t n = x.size() / 2; std::nth_element( x.begin(), x.begin() + n, x.end(), median_detail::less); if (x.size() % 2) return x[n]; return median_detail::half( x[n] + *std::max_element( x.begin(), x.begin() + n, median_detail::less)); } }; // NA = false template class Median { public: typedef typename median_detail::result::type result_type; typedef typename Rcpp::traits::storage_type::type stored_type; enum { RESULT_RTYPE = median_detail::result::rtype }; typedef T VECTOR; private: VECTOR x; public: Median(const VECTOR& xx) : x(Rcpp::clone(xx)) {} operator result_type() { if (x.size() < 1) { return Rcpp::traits::get_na(); } R_xlen_t n = x.size() / 2; std::nth_element( x.begin(), x.begin() + n, x.end(), median_detail::less); if (x.size() % 2) return x[n]; return median_detail::half( x[n] + *std::max_element( x.begin(), x.begin() + n, median_detail::less)); } }; // specialize for character vector // due to string_proxy's incompatibility // with certain std:: algorithms; // need to return NA for even-length vectors template class Median { public: typedef typename median_detail::result::type result_type; typedef typename Rcpp::traits::storage_type::type stored_type; typedef T VECTOR; private: VECTOR x; public: Median(const VECTOR& xx) : x(Rcpp::clone(xx)) {} operator result_type() { if (!(x.size() % 2)) { return Rcpp::traits::get_na(); } if (Rcpp::any(Rcpp::is_na(x))) { return Rcpp::traits::get_na(); } R_xlen_t n = x.size() / 2; x.sort(); return x[n]; } }; // na.rm = TRUE template class Median { public: typedef typename median_detail::result::type result_type; typedef typename Rcpp::traits::storage_type::type stored_type; typedef T VECTOR; private: VECTOR x; public: Median(const VECTOR& xx) : x(Rcpp::na_omit(Rcpp::clone(xx))) {} operator result_type() { if (!(x.size() % 2)) { return Rcpp::traits::get_na(); } R_xlen_t n = x.size() / 2; x.sort(); return x[n]; } }; // NA = false template class Median { public: typedef typename median_detail::result::type result_type; typedef typename Rcpp::traits::storage_type::type stored_type; typedef T VECTOR; private: VECTOR x; public: Median(const VECTOR& xx) : x(Rcpp::clone(xx)) {} operator result_type() { if (!(x.size() % 2)) { return Rcpp::traits::get_na(); } R_xlen_t n = x.size() / 2; x.sort(); return x[n]; } }; } // sugar template inline typename sugar::median_detail::result::type median(const Rcpp::VectorBase& x, bool na_rm = false) { if (!na_rm) return sugar::Median(x); return sugar::Median(x); } } // Rcpp #endif // Rcpp__sugar__median_h Rcpp/inst/include/Rcpp/sugar/functions/rep.h0000644000176200001440000000513513076500536020563 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // rep.h: Rcpp R/C++ interface class library -- rep // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__rep_h #define Rcpp__sugar__rep_h namespace Rcpp{ namespace sugar{ template class Rep : public Rcpp::VectorBase< RTYPE ,NA, Rep > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; Rep( const VEC_TYPE& object_, R_xlen_t times_ ) : object(object_), times(times_), n(object_.size()){} inline STORAGE operator[]( R_xlen_t i ) const { return object[ i % n ] ; } inline R_xlen_t size() const { return times * n ; } private: const VEC_TYPE& object ; R_xlen_t times, n ; } ; template class Rep_Single : public Rcpp::VectorBase< Rcpp::traits::r_sexptype_traits::rtype, true, Rep_Single > { public: Rep_Single( const T& x_, R_xlen_t n_) : x(x_), n(n_){} inline T operator[]( R_xlen_t ) const { return x; } inline R_xlen_t size() const { return n ; } private: const T& x ; R_xlen_t n; } ; } // sugar template inline sugar::Rep rep( const VectorBase& t, R_xlen_t n ){ return sugar::Rep( t, n ) ; } inline sugar::Rep_Single rep( const double& x, R_xlen_t n ){ return sugar::Rep_Single( x, n ) ; } inline sugar::Rep_Single rep( const int& x, R_xlen_t n ){ return sugar::Rep_Single( x, n ) ; } inline sugar::Rep_Single rep( const Rbyte& x, R_xlen_t n ){ return sugar::Rep_Single( x, n ) ; } inline sugar::Rep_Single rep( const Rcomplex& x, R_xlen_t n ){ return sugar::Rep_Single( x, n ) ; } inline sugar::Rep_Single rep( const bool& x, R_xlen_t n ){ return sugar::Rep_Single( x, n ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/max.h0000644000176200001440000000464613325224463020567 0ustar liggesusers // max.h: Rcpp R/C++ interface class library -- max // // Copyright (C) 2012 - 2018 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__max_h #define Rcpp__sugar__max_h namespace Rcpp{ namespace sugar{ template class Max { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; Max( const T& obj_) : obj(obj_) {} operator STORAGE() const { R_xlen_t n = obj.size(); if (n == 0) return(static_cast(R_NegInf)); STORAGE max, current ; max = obj[0] ; if( Rcpp::traits::is_na( max ) ) return max ; for( R_xlen_t i=1; i( current ) ) return current; if( current > max ) max = current ; } return max ; } private: const T& obj ; } ; // version for NA = false template class Max { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; Max( const T& obj_) : obj(obj_) {} operator STORAGE() const { R_xlen_t n = obj.size(); if (n == 0) return(static_cast(R_NegInf)); STORAGE max, current ; max = obj[0] ; for( R_xlen_t i=1; i max ) max = current ; } return max ; } private: const T& obj ; } ; } // sugar template sugar::Max max( const VectorBase& x){ return sugar::Max(x.get_ref()) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/unique.h0000644000176200001440000000442213513341577021305 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // unique.h: Rcpp R/C++ interface class library -- unique // // Copyright (C) 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__unique_h #define Rcpp__sugar__unique_h namespace Rcpp{ namespace sugar{ template class InSet { typedef typename HASH::STORAGE STORAGE ; public: InSet( const HASH& hash_ ) : hash(hash_){} inline int operator()(STORAGE value){ return hash.contains(value) ; } private: const HASH& hash ; } ; template class In { Vector vec ; typedef sugar::IndexHash HASH ; HASH hash ; public: In( const TABLE_T& table) : vec(table), hash(vec){ hash.fill() ; } template LogicalVector get( const T& x) const { return LogicalVector( x.begin(), x.end(), InSet(hash) ) ; } } ; } // sugar template inline Vector unique( const VectorBase& t ){ Vector vec(t) ; sugar::IndexHash hash(vec) ; hash.fill() ; return hash.keys() ; } template inline Vector sort_unique( const VectorBase& t , bool decreasing = false){ return unique( t ).sort(decreasing) ; } template inline LogicalVector in( const VectorBase& x, const VectorBase& table ){ typedef VectorBase TABLE_T ; return sugar::In(table).get( x.get_ref() ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/is_finite.h0000644000176200001440000000304312754425121021740 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // is_finite.h: Rcpp R/C++ interface class library -- is_finite // // Copyright (C) 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__is_finite_h #define Rcpp__sugar__is_finite_h namespace Rcpp{ namespace sugar{ template class IsFinite : public ::Rcpp::VectorBase< LGLSXP, false, IsFinite > { public: IsFinite( const VEC_TYPE& obj_) : obj(obj_){} inline int operator[]( R_xlen_t i ) const { return ::Rcpp::traits::is_finite( obj[i] ) ; } inline R_xlen_t size() const { return obj.size() ; } private: const VEC_TYPE& obj ; } ; } // sugar template inline sugar::IsFinite is_finite( const Rcpp::VectorBase& t){ return sugar::IsFinite( t.get_ref() ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/tail.h0000644000176200001440000000342412754425121020723 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // tail.h: Rcpp R/C++ interface class library -- tail // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__tail_h #define Rcpp__sugar__tail_h namespace Rcpp{ namespace sugar{ template class Tail : public Rcpp::VectorBase< RTYPE ,NA, Tail > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; Tail( const VEC_TYPE& object_, R_xlen_t n_ ) : object(object_), start(0), n(n_) { if( n > 0 ){ start = object.size() - n ; } else { start = -n ; n = object.size() - start ; } } inline STORAGE operator[]( R_xlen_t i ) const { return object[ start + i ] ; } inline R_xlen_t size() const { return n; } private: const VEC_TYPE& object ; R_xlen_t start, n ; } ; } // sugar template inline sugar::Tail tail( const VectorBase& t, R_xlen_t n ){ return sugar::Tail( t, n ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/diff.h0000644000176200001440000001015112754425121020675 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 4 -*- // // diff.h: Rcpp R/C++ interface class library -- diff // // Copyright (C) 2010 - 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__diff_h #define Rcpp__sugar__diff_h namespace Rcpp{ namespace sugar{ // NOTE: caching the previous value so that we only have to fetch the // value once only works because we process the object from left to // right template class Diff : public Rcpp::VectorBase< RTYPE, LHS_NA , Diff > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; Diff( const LHS_TYPE& lhs_ ) : lhs(lhs_), previous(lhs_[0]), previous_index(0), was_na(traits::is_na(previous)) {} inline STORAGE operator[]( R_xlen_t i ) const { STORAGE y = lhs[i+1] ; if( previous_index != i ){ // we don't know the previous value, we need to get it. set_previous(i, lhs[i] ) ; // record the current value } if( was_na || traits::is_na(y) ) { set_previous(i+1, y ) ; return traits::get_na() ; // NA } STORAGE res = y - previous ; set_previous( i+1, y) ; return res ; } inline void set_previous(R_xlen_t i, STORAGE value) const { previous = value ; was_na = traits::is_na(previous) ; previous_index = i ; } inline R_xlen_t size() const { return lhs.size() - 1 ; } private: const LHS_TYPE& lhs ; mutable STORAGE previous ; mutable R_xlen_t previous_index ; mutable bool was_na ; } ; template class Diff : public Rcpp::VectorBase< REALSXP, LHS_NA, Diff >{ public: typedef typename Rcpp::VectorBase LHS_TYPE ; Diff( const LHS_TYPE& lhs_ ) : lhs(lhs_), previous(lhs_[0]), previous_index(0) {} inline double operator[]( R_xlen_t i ) const { double y = lhs[i+1] ; if( previous_index != i ) previous = lhs[i] ; double res = y - previous ; previous = y ; previous_index = i+1 ; return res ; } inline R_xlen_t size() const { return lhs.size() - 1 ; } private: const LHS_TYPE& lhs ; mutable double previous ; mutable R_xlen_t previous_index ; } ; template class Diff : public Rcpp::VectorBase< RTYPE, false , Diff > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; Diff( const LHS_TYPE& lhs_ ) : lhs(lhs_), previous(lhs[0]), previous_index(0) {} inline STORAGE operator[]( R_xlen_t i ) const { STORAGE y = lhs[i+1] ; if( previous_index != i ) previous = lhs[i] ; STORAGE diff = y - previous ; previous = y ; previous_index = i+1 ; return y - previous ; } inline R_xlen_t size() const { return lhs.size() - 1 ; } private: const LHS_TYPE& lhs ; mutable STORAGE previous ; mutable R_xlen_t previous_index ; } ; } // sugar template inline sugar::Diff diff( const VectorBase& lhs ){ return sugar::Diff( lhs ) ; } template inline sugar::Diff diff( const VectorBase& lhs ){ return sugar::Diff( lhs ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/all.h0000644000176200001440000000435512754425121020546 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // all.h: Rcpp R/C++ interface class library -- all // // Copyright (C) 2010 - 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__all_h #define Rcpp__sugar__all_h namespace Rcpp{ namespace sugar{ template class All : public SingleLogicalResult< true, All >{ public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef SingleLogicalResult< true, All > PARENT ; All( const VEC_TYPE& t ) : PARENT() , object(t) {} void apply(){ R_xlen_t n = object.size() ; int current = 0 ; PARENT::reset() ; for( R_xlen_t i=0 ; i(current) ) { PARENT::set_na(); } } if( PARENT::is_unresolved() ){ PARENT::set_true() ; } } private: const VEC_TYPE& object ; } ; template class All : public SingleLogicalResult< false, All >{ public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef SingleLogicalResult< false, All > PARENT ; All( const VEC_TYPE& t ) : PARENT() , object(t) {} void apply(){ R_xlen_t n = object.size() ; PARENT::set_true() ; for( R_xlen_t i=0 ; i inline sugar::All all( const Rcpp::VectorBase& t){ return sugar::All( t ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/cumsum.h0000644000176200001440000000410312754425121021276 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // cumsum.h: Rcpp R/C++ interface class library -- cumsum // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__cumsum_h #define Rcpp__sugar__cumsum_h namespace Rcpp{ namespace sugar{ template class Cumsum : public Lazy< Rcpp::Vector , Cumsum > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; typedef Rcpp::Vector VECTOR ; Cumsum( const VEC_TYPE& object_ ) : object(object_){} VECTOR get() const { R_xlen_t n = object.size() ; VECTOR result( n, Rcpp::traits::get_na() ) ; STORAGE current = object[0] ; if( Rcpp::traits::is_na(current) ) return result ; result[0] = current ; for( R_xlen_t i=1; i(current) ) return result ; result[i] = result[i-1] + current ; } return result ; } private: const VEC_TYPE& object ; } ; } // sugar template inline sugar::Cumsum cumsum( const VectorBase& t){ return sugar::Cumsum( t ) ; } template inline sugar::Cumsum cumsum( const VectorBase& t){ return sugar::Cumsum( t ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/pmin.h0000644000176200001440000001165012754425121020735 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // pmin.h: Rcpp R/C++ interface class library -- pmin // // Copyright (C) 2010 - 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__pmin_h #define Rcpp__sugar__pmin_h namespace Rcpp{ namespace sugar{ template struct pmin_op ; // specializations for double. // we use the fact that NA < x is false template <> struct pmin_op{ inline double operator()( double left, double right ) const { return ( Rcpp::traits::is_na( left ) || (left < right) ) ? left : right ; } } ; template <> struct pmin_op { inline double operator()( double left, double right ) const { return right < left ? right : left ; } } ; template <> struct pmin_op { inline double operator()( double left, double right ) const { return right < left ? right : left ; } } ; template <> struct pmin_op { inline double operator()( double left, double right ) const { return left < right ? left : right ; } } ; // specializations for INTSXP. Since NA is represented as the smallest // int, NA is always the smallest, so it is safe to return NA template struct pmin_op { inline int operator()(int left, int right) const { return left < right ? left : right ; } } ; // general case template class pmin_op_Vector_Primitive { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; pmin_op_Vector_Primitive( STORAGE right_ ) : right(right_) {} inline STORAGE operator()( STORAGE left ) const { return left < right ? left : right ; } private: STORAGE right ; } ; // only special case we need to take care of template <> class pmin_op_Vector_Primitive { public: pmin_op_Vector_Primitive( double right_ ) : right(right_) {} inline double operator()( double left ) const { return ( Rcpp::traits::is_na( left ) || (left < right) ) ? left : right ; } private: double right ; } ; template < int RTYPE, bool LHS_NA, typename LHS_T, bool RHS_NA, typename RHS_T > class Pmin_Vector_Vector : public VectorBase< RTYPE , ( LHS_NA || RHS_NA ) , Pmin_Vector_Vector > { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; typedef pmin_op OPERATOR ; Pmin_Vector_Vector( const LHS_T& lhs_, const RHS_T& rhs_ ) : lhs(lhs_), rhs(rhs_), op() {} inline STORAGE operator[]( R_xlen_t i ) const { return op( lhs[i], rhs[i] ) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_T& lhs ; const RHS_T& rhs ; OPERATOR op ; } ; template < int RTYPE, bool LHS_NA, typename LHS_T > class Pmin_Vector_Primitive : public VectorBase< RTYPE , true , Pmin_Vector_Primitive > { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; typedef pmin_op_Vector_Primitive OPERATOR ; Pmin_Vector_Primitive( const LHS_T& lhs_, STORAGE rhs_ ) : lhs(lhs_), op(rhs_) {} inline STORAGE operator[]( R_xlen_t i ) const { return op( lhs[i] ) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_T& lhs ; OPERATOR op ; } ; } // sugar template < int RTYPE, bool LHS_NA, typename LHS_T, bool RHS_NA, typename RHS_T > inline sugar::Pmin_Vector_Vector pmin( const Rcpp::VectorBase& lhs, const Rcpp::VectorBase& rhs ){ return sugar::Pmin_Vector_Vector( lhs.get_ref(), rhs.get_ref() ) ; } template < int RTYPE, bool LHS_NA, typename LHS_T > inline sugar::Pmin_Vector_Primitive pmin( const Rcpp::VectorBase& lhs, typename Rcpp::traits::storage_type::type rhs ){ return sugar::Pmin_Vector_Primitive( lhs.get_ref(), rhs ) ; } template < int RTYPE, bool RHS_NA, typename RHS_T > inline sugar::Pmin_Vector_Primitive pmin( typename Rcpp::traits::storage_type::type lhs, const Rcpp::VectorBase& rhs ){ return sugar::Pmin_Vector_Primitive( rhs.get_ref(), lhs ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/seq_along.h0000644000176200001440000000306712754425121021745 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // seq_along.h: Rcpp R/C++ interface class library -- any // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__seq_along_h #define Rcpp__sugar__seq_along_h namespace Rcpp{ namespace sugar{ class SeqLen : public VectorBase< INTSXP,false,SeqLen > { public: SeqLen( R_xlen_t len_ ) : len(len_){} inline R_xlen_t operator[]( R_xlen_t i ) const { return 1 + i ; } inline R_xlen_t size() const { return len ; } private: R_xlen_t len ; } ; } // sugar template inline sugar::SeqLen seq_along( const Rcpp::VectorBase& t){ return sugar::SeqLen( t.size() ) ; } inline sugar::SeqLen seq_len( const size_t& n){ return sugar::SeqLen( n ) ; } inline Range seq(R_xlen_t start, R_xlen_t end){ return Range( start, end ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/cummax.h0000644000176200001440000000432112754425121021261 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // cumsum.h: Rcpp R/C++ interface class library -- cumsum // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__cummax_h #define Rcpp__sugar__cummax_h namespace Rcpp{ namespace sugar{ template class Cummax : public Lazy< Rcpp::Vector, Cummax > { public: typedef typename Rcpp::VectorBase VEC_TYPE; typedef typename Rcpp::traits::storage_type::type STORAGE; typedef Rcpp::Vector VECTOR; Cummax(const VEC_TYPE& object_) : object(object_) {} VECTOR get() const { R_xlen_t n = object.size(); VECTOR result(n, Rcpp::traits::get_na()); STORAGE current = object[0]; if (Rcpp::traits::is_na(current)) return result; result[0] = current; for (R_xlen_t i = 1; i < n; i++) { current = object[i]; if (Rcpp::traits::is_na(current)) return result; result[i] = result[i-1] > current ? result[i-1] : current; } return result ; } private: const VEC_TYPE& object; }; } // sugar template inline sugar::Cummax cummax(const VectorBase& t) { return sugar::Cummax(t); } template inline sugar::Cummax cummax(const VectorBase& t) { return sugar::Cummax(t); } } // Rcpp #endif // Rcpp__sugar__cummax_h Rcpp/inst/include/Rcpp/sugar/functions/range.h0000644000176200001440000000521512754425121021066 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // range.h: Rcpp R/C++ interface class library -- range // // Copyright (C) 2012 - 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__range_h #define Rcpp__sugar__range_h namespace Rcpp{ namespace sugar{ template class Range { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; Range( const T& obj_) : obj(obj_) {} operator Vector(){ min_ = max_ = obj[0] ; if( Rcpp::traits::is_na( min_ ) ) return Vector::create( min_, max_ ) ; R_xlen_t n = obj.size() ; for( R_xlen_t i=1; i( current ) ) return Vector::create( min_, max_ ) ; if( current < min_ ) min_ = current ; if( current > max_ ) max_ = current ; } return Vector::create( min_, max_ ) ; } private: const T& obj ; STORAGE min_, max_, current ; } ; // version for NA = false template class Range { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; Range( const T& obj_) : obj(obj_) {} operator Vector(){ min_ = max_ = obj[0] ; R_xlen_t n = obj.size() ; for( R_xlen_t i=1; i max_ ) max_ = current ; } return Vector::create( min_, max_ ) ; } private: const T& obj ; STORAGE min_, max_, current ; } ; } // sugar template sugar::Range range( const VectorBase& x){ return sugar::Range(x.get_ref()) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/which_min.h0000644000176200001440000000470312754425121021740 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // which_min.h: Rcpp R/C++ interface class library -- which.min // // Copyright (C) 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__which_min_h #define Rcpp__sugar__which_min_h namespace Rcpp{ namespace sugar{ template class WhichMin { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; WhichMin(const VEC_TYPE& obj_ ) : obj(obj_){} R_xlen_t get() const { STORAGE current = obj[0] ; STORAGE min = current ; R_xlen_t index = 0 ; if( Rcpp::traits::is_na(current) ) return NA_INTEGER ; R_xlen_t n = obj.size() ; for( R_xlen_t i=1; i(current) ) return NA_INTEGER ; if( current < min ){ min = current ; index = i ; } } return index ; } private: const VEC_TYPE& obj ; } ; template class WhichMin { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; WhichMin(const VEC_TYPE& obj_ ) : obj(obj_){} R_xlen_t get() const { STORAGE current = obj[0] ; STORAGE min = current ; R_xlen_t index = 0 ; R_xlen_t n = obj.size() ; for( R_xlen_t i=1; i R_xlen_t which_min( const VectorBase& t ){ return sugar::WhichMin(t).get() ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/self_match.h0000644000176200001440000000435715014017044022076 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // self_match.h: Rcpp R/C++ interface class library -- self match // // Copyright (C) 2012 - 2024 Dirk Eddelbuettel and Romain Francois // Copyright (C) 2025 Dirk Eddelbuettel, Romain Francois and Iñaki Ucar // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__self_match_h #define Rcpp__sugar__self_match_h namespace Rcpp{ namespace sugar{ template class SelfInserter { public: SelfInserter( HASH& hash_ ) : hash(hash_), index(0) {} inline R_xlen_t operator()( STORAGE value ){ typename HASH::iterator it = hash.find( value ) ; if( it == hash.end() ){ hash.insert( std::make_pair(value, ++index) ) ; return index ; } else { return it->second ; } } private: HASH& hash ; R_xlen_t index; } ; template class SelfMatch { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; SelfMatch( const TABLE_T& table ): hash(), result(table.size()) { std::transform( table.begin(), table.end(), result.begin(), Inserter(hash) ) ; } inline operator IntegerVector() const { return result ; } private: typedef std::unordered_map HASH ; typedef SelfInserter Inserter ; HASH hash ; IntegerVector result ; }; } // sugar template inline IntegerVector self_match( const VectorBase& x ){ Vector vec(x) ; return sugar::SelfHash(vec).fill_and_self_match() ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/duplicated.h0000644000176200001440000000225312754425121022107 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // duplicated.h: Rcpp R/C++ interface class library -- duplicated // // Copyright (C) 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__duplicated_h #define Rcpp__sugar__duplicated_h namespace Rcpp{ template inline LogicalVector duplicated( const VectorBase& x ){ Vector vec(x) ; sugar::IndexHash hash(vec) ; return hash.fill_and_get_duplicated() ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/math.h0000644000176200001440000000534012754425121020722 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // SugarBlock.h: Rcpp R/C++ interface class library -- sugar functions // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_SUGAR_MATH_H #define RCPP_SUGAR_MATH_H VECTORIZED_MATH_1(exp,::exp) VECTORIZED_MATH_1(acos,::acos) VECTORIZED_MATH_1(asin,::asin) VECTORIZED_MATH_1(atan,::atan) VECTORIZED_MATH_1(ceil,::ceil) VECTORIZED_MATH_1(ceiling,::ceil) VECTORIZED_MATH_1(cos,::cos) VECTORIZED_MATH_1(cosh,::cosh) VECTORIZED_MATH_1(floor,::floor) VECTORIZED_MATH_1(log,::log) VECTORIZED_MATH_1(log10,::log10) VECTORIZED_MATH_1(sqrt,::sqrt) VECTORIZED_MATH_1(sin,::sin) VECTORIZED_MATH_1(sinh,::sinh) VECTORIZED_MATH_1(tan,::tan) VECTORIZED_MATH_1(tanh,::tanh) VECTORIZED_MATH_1(abs,::fabs) VECTORIZED_MATH_1(gamma , ::Rf_gammafn ) VECTORIZED_MATH_1(lgamma , ::Rf_lgammafn ) VECTORIZED_MATH_1(digamma , ::Rf_digamma ) VECTORIZED_MATH_1(trigamma , ::Rf_trigamma ) VECTORIZED_MATH_1(tetragamma , ::Rf_tetragamma ) VECTORIZED_MATH_1(pentagamma , ::Rf_pentagamma ) VECTORIZED_MATH_1(expm1 , ::expm1 ) VECTORIZED_MATH_1(log1p , ::log1p ) namespace Rcpp{ namespace internal{ extern "C" inline double factorial( double x ){ return ::Rf_gammafn( x + 1.0 ) ; } extern "C" inline double lfactorial( double x ){ return ::Rf_lgammafn( x + 1.0 ) ; } } } VECTORIZED_MATH_1(factorial , ::Rcpp::internal::factorial ) VECTORIZED_MATH_1(lfactorial , ::Rcpp::internal::lfactorial ) SUGAR_BLOCK_2(choose , ::Rf_choose ) SUGAR_BLOCK_2(lchoose , ::Rf_lchoose ) SUGAR_BLOCK_2(beta , ::Rf_beta ) SUGAR_BLOCK_2(lbeta , ::Rf_lbeta ) SUGAR_BLOCK_2(psigamma , ::Rf_psigamma ) VECTORIZED_MATH_1(trunc, ::Rf_ftrunc) // truncates to zero (cf Writing R Extension, 6.7.3 Numerical Utilities) SUGAR_BLOCK_2(round, ::Rf_fround) // rounds 'x' to 'digits' decimals digits (used by R's round()) SUGAR_BLOCK_2(signif, ::Rf_fprec) // rounds 'x' to 'digits' significant digits (used by R's signif()) #endif Rcpp/inst/include/Rcpp/sugar/functions/any.h0000644000176200001440000000433012754425121020556 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // any.h: Rcpp R/C++ interface class library -- any // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__any_h #define Rcpp__sugar__any_h namespace Rcpp{ namespace sugar{ template class Any : public SingleLogicalResult< true, Any >{ public: typedef Rcpp::VectorBase VEC_TYPE ; typedef SingleLogicalResult< true , Any > PARENT ; Any( const VEC_TYPE& t ) : PARENT() , object(t) {} void apply(){ R_xlen_t n = object.size() ; int current = 0 ; PARENT::reset() ; for( R_xlen_t i=0 ; i(current) ) { PARENT::set_na(); } } if( PARENT::is_unresolved() ){ PARENT::set_false() ; } } private: const VEC_TYPE& object ; } ; template class Any : public SingleLogicalResult< false, Any >{ public: typedef Rcpp::VectorBase VEC_TYPE ; typedef SingleLogicalResult< false , Any > PARENT ; Any( const VEC_TYPE& t ) : PARENT() , object(t) {} void apply(){ R_xlen_t n = object.size() ; PARENT::set_false() ; for( R_xlen_t i=0 ; i inline sugar::Any any( const Rcpp::VectorBase& t){ return sugar::Any( t ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/rep_each.h0000644000176200001440000000336412754425121021543 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // rep_each.h: Rcpp R/C++ interface class library -- rep_each // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__rep_each_h #define Rcpp__sugar__rep_each_h namespace Rcpp{ namespace sugar{ template class Rep_each : public Rcpp::VectorBase< RTYPE ,NA, Rep_each > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; Rep_each( const VEC_TYPE& object_, R_xlen_t times_ ) : object(object_), times(times_), n(object.size()) {} inline STORAGE operator[]( R_xlen_t i ) const { return object[ i / times ] ; } inline R_xlen_t size() const { return n * times ; } private: const VEC_TYPE& object ; R_xlen_t times, n ; } ; } // sugar template inline sugar::Rep_each rep_each( const VectorBase& t, R_xlen_t times ){ return sugar::Rep_each( t, times ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/na_omit.h0000644000176200001440000000502112754425121021413 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // na_omit.h: Rcpp R/C++ interface class library -- na_omit // // Copyright (C) 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__na_omit_h #define Rcpp__sugar__na_omit_h namespace Rcpp{ namespace sugar{ template Vector na_omit_impl(const T& x, Rcpp::traits::false_type ) { R_xlen_t n = x.size() ; R_xlen_t n_out = n - sum( is_na(x) ) ; if( n_out == n ) return x ; Vector out = no_init(n_out) ; for( R_xlen_t i=0, j=0; i::is_na( x[i] ) ) continue ; out[j++] = x[i]; } return out ; } template Vector na_omit_impl(const T& x, Rcpp::traits::true_type ) { R_xlen_t n = x.size() ; R_xlen_t n_out = n - sum( is_na(x) ) ; if( n_out == n ) return x; Vector out = no_init(n_out) ; bool has_name = x.attr("names") != R_NilValue ; if( has_name ){ CharacterVector names = x.attr("names") ; CharacterVector onames( n_out ) ; for( R_xlen_t i=0, j=0; i::is_na( x[i] ) ) continue ; onames[j] = names[i] ; out[j++] = x[i]; } out.attr("names") = onames ; } else { for( R_xlen_t i=0, j=0; i::is_na( x[i] ) ) continue ; out[j++] = x[i]; } } return out ; } } // sugar template inline Vector na_omit( const VectorBase& t){ return sugar::na_omit_impl( t.get_ref(), typename Rcpp::traits::same_type >::type() ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/functions.h0000644000176200001440000000600613023631124021771 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // functions.h: Rcpp R/C++ interface class library -- sugar functions // // Copyright (C) 2010 - 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_SUGAR_FUNCTIONS_H #define RCPP_SUGAR_FUNCTIONS_H /* for exp( double ) */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #endif Rcpp/inst/include/Rcpp/sugar/functions/sapply.h0000644000176200001440000000740315014017044021274 0ustar liggesusers // sapply.h: Rcpp R/C++ interface class library -- sapply // // Copyright (C) 2010 - 2024 Dirk Eddelbuettel and Romain Francois // Copyright (C) 2025 Dirk Eddelbuettel, Romain Francois and Iñaki Ucar // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__sapply_h #define Rcpp__sugar__sapply_h namespace Rcpp{ namespace sugar{ template class Sapply : public VectorBase< Rcpp::traits::r_sexptype_traits< typename ::Rcpp::traits::result_of::type >::rtype , true , Sapply > { public: typedef typename ::Rcpp::traits::result_of::type result_type ; const static int RESULT_R_TYPE = Rcpp::traits::r_sexptype_traits::rtype ; typedef Rcpp::VectorBase VEC ; typedef typename Rcpp::traits::r_vector_element_converter::type converter_type ; typedef typename Rcpp::traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor< RTYPE, NA, T>::type EXT ; Sapply( const VEC& vec_, Function fun_ ) : vec(vec_.get_ref()), fun(fun_){ RCPP_DEBUG_1( "Sapply With Converter = %s", DEMANGLE(Sapply) ) RCPP_DEBUG_1( "Sapply Converter = %s", DEMANGLE(converter_type) ) } inline STORAGE operator[]( R_xlen_t i ) const { STORAGE res = converter_type::get( fun( vec[i] ) ); return res ; } inline R_xlen_t size() const { return vec.size() ; } private: const EXT& vec ; Function fun ; } ; template class Sapply : public VectorBase< Rcpp::traits::r_sexptype_traits< typename ::Rcpp::traits::result_of::type >::rtype , true , Sapply > { public: typedef typename ::Rcpp::traits::result_of::type result_type ; const static int RESULT_R_TYPE = Rcpp::traits::r_sexptype_traits::rtype ; typedef Rcpp::VectorBase VEC ; typedef typename Rcpp::traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor< RTYPE, NA, T>::type EXT ; Sapply( const VEC& vec_, Function fun_ ) : vec(vec_.get_ref()), fun(fun_){ RCPP_DEBUG_1( "Sapply = %s", DEMANGLE(Sapply) ) } inline STORAGE operator[]( R_xlen_t i ) const { return fun( vec[i] ) ; } inline R_xlen_t size() const { return vec.size() ; } private: const EXT& vec ; Function fun ; } ; } // sugar template inline sugar::Sapply< RTYPE,NA,T,Function, traits::same_type< typename ::Rcpp::traits::result_of::type , typename Rcpp::traits::storage_type< traits::r_sexptype_traits< typename ::Rcpp::traits::result_of::type >::rtype >::type >::value > sapply( const Rcpp::VectorBase& t, Function fun ){ return sugar::Sapply::type , typename Rcpp::traits::storage_type< traits::r_sexptype_traits< typename ::Rcpp::traits::result_of::type >::rtype >::type >::value >( t, fun ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/which_max.h0000644000176200001440000000470312754425121021742 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // which_max.h: Rcpp R/C++ interface class library -- which.max // // Copyright (C) 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__which_max_h #define Rcpp__sugar__which_max_h namespace Rcpp{ namespace sugar{ template class WhichMax { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; WhichMax(const VEC_TYPE& obj_ ) : obj(obj_){} R_xlen_t get() const { STORAGE current = obj[0] ; STORAGE min = current ; R_xlen_t index = 0 ; if( Rcpp::traits::is_na(current) ) return NA_INTEGER ; R_xlen_t n = obj.size() ; for( R_xlen_t i=1; i(current) ) return NA_INTEGER ; if( current > min ){ min = current ; index = i ; } } return index ; } private: const VEC_TYPE& obj ; } ; template class WhichMax { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; WhichMax(const VEC_TYPE& obj_ ) : obj(obj_){} R_xlen_t get() const { STORAGE current = obj[0] ; STORAGE min = current ; R_xlen_t index = 0 ; R_xlen_t n = obj.size() ; for( R_xlen_t i=1; i min ){ min = current ; index = i ; } } return index ; } private: const VEC_TYPE& obj ; } ; } // sugar template R_xlen_t which_max( const VectorBase& t ){ return sugar::WhichMax(t).get() ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/rev.h0000644000176200001440000000316412754425121020567 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // rev.h: Rcpp R/C++ interface class library -- rev // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__rev_h #define Rcpp__sugar__rev_h namespace Rcpp{ namespace sugar{ template class Rev : public Rcpp::VectorBase< RTYPE ,NA, Rev > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; Rev( const VEC_TYPE& object_ ) : object(object_), n(object_.size() - 1) {} inline STORAGE operator[]( R_xlen_t i ) const { return object[n - i] ; } inline R_xlen_t size() const { return n + 1; } private: const VEC_TYPE& object ; R_xlen_t n ; } ; } // sugar template inline sugar::Rev rev( const VectorBase& t){ return sugar::Rev( t ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/lapply.h0000644000176200001440000000346315014017044021267 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // lapply.h: Rcpp R/C++ interface class library -- lapply // // Copyright (C) 2010 - 2024 Dirk Eddelbuettel and Romain Francois // Copyright (C) 2025 Dirk Eddelbuettel, Romain Francois and Iñaki Ucar // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__lapply_h #define Rcpp__sugar__lapply_h namespace Rcpp{ namespace sugar{ template class Lapply : public VectorBase< VECSXP , true , Lapply > { public: typedef Rcpp::VectorBase VEC ; typedef typename ::Rcpp::traits::result_of::type result_type ; Lapply( const VEC& vec_, Function fun_ ) : vec(vec_), fun(fun_){} inline SEXP operator[]( R_xlen_t i ) const { return Rcpp::wrap( fun( vec[i] ) ); } inline R_xlen_t size() const { return vec.size() ; } private: const VEC& vec ; Function fun ; } ; } // sugar template inline sugar::Lapply lapply( const Rcpp::VectorBase& t, Function fun ){ return sugar::Lapply( t, fun ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/operators/0000755000176200001440000000000012754425121017624 5ustar liggesusersRcpp/inst/include/Rcpp/sugar/operators/logical_operators__Vector__Vector.h0000644000176200001440000000730712754425121026656 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // logical_operators__Vector__Vector.h: Rcpp R/C++ interface class library -- // logical operators for Vector to Vector comparisons // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__logical_operators__Vector__Vector_h #define Rcpp__sugar__logical_operators__Vector__Vector_h /* Vector < Vector */ template inline Rcpp::sugar::Comparator< RTYPE , Rcpp::sugar::less, LHS_NA, LHS_T, RHS_NA, RHS_T > operator<( const Rcpp::VectorBase& lhs , const Rcpp::VectorBase& rhs ){ return Rcpp::sugar::Comparator< RTYPE, Rcpp::sugar::less, LHS_NA, LHS_T, RHS_NA, RHS_T >( lhs, rhs ) ; } /* Vector > Vector */ template inline Rcpp::sugar::Comparator< RTYPE , Rcpp::sugar::greater, LHS_NA, LHS_T, RHS_NA, RHS_T > operator>( const Rcpp::VectorBase& lhs , const Rcpp::VectorBase& rhs ){ return Rcpp::sugar::Comparator< RTYPE, Rcpp::sugar::greater, LHS_NA, LHS_T, RHS_NA, RHS_T >( lhs, rhs ) ; } /* Vector <= Vector */ template inline Rcpp::sugar::Comparator< RTYPE , Rcpp::sugar::less_or_equal, LHS_NA, LHS_T, RHS_NA, RHS_T > operator<=( const Rcpp::VectorBase& lhs , const Rcpp::VectorBase& rhs ){ return Rcpp::sugar::Comparator< RTYPE, Rcpp::sugar::less_or_equal, LHS_NA, LHS_T, RHS_NA, RHS_T >( lhs, rhs ) ; } /* Vector >= Vector */ template inline Rcpp::sugar::Comparator< RTYPE , Rcpp::sugar::greater_or_equal, LHS_NA, LHS_T, RHS_NA, RHS_T > operator>=( const Rcpp::VectorBase& lhs , const Rcpp::VectorBase& rhs ){ return Rcpp::sugar::Comparator< RTYPE, Rcpp::sugar::greater_or_equal, LHS_NA, LHS_T, RHS_NA, RHS_T >( lhs, rhs ) ; } /* Vector == Vector */ template inline Rcpp::sugar::Comparator< RTYPE , Rcpp::sugar::equal, LHS_NA, LHS_T, RHS_NA, RHS_T > operator==( const Rcpp::VectorBase& lhs , const Rcpp::VectorBase& rhs ){ return Rcpp::sugar::Comparator< RTYPE, Rcpp::sugar::equal, LHS_NA, LHS_T, RHS_NA, RHS_T >( lhs, rhs ) ; } /* Vector != Vector */ template inline Rcpp::sugar::Comparator< RTYPE , Rcpp::sugar::not_equal, LHS_NA, LHS_T, RHS_NA, RHS_T > operator!=( const Rcpp::VectorBase& lhs , const Rcpp::VectorBase& rhs ){ return Rcpp::sugar::Comparator< RTYPE, Rcpp::sugar::not_equal, LHS_NA, LHS_T, RHS_NA, RHS_T >( lhs, rhs ) ; } #endif Rcpp/inst/include/Rcpp/sugar/operators/operators.h0000644000176200001440000000271412754425121022017 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // any.h: Rcpp R/C++ interface class library -- any // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__operators__operators_h #define Rcpp__sugar__operators__operators_h // binary operators #include #include #include #include #include #include #include #include // unary operators #include #include #endif Rcpp/inst/include/Rcpp/sugar/operators/minus.h0000644000176200001440000003521712754425121021140 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // minus.h: Rcpp R/C++ interface class library -- operator- // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__minus_h #define Rcpp__sugar__minus_h namespace Rcpp{ namespace sugar{ template class Minus_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor< RTYPE, LHS_NA, LHS_T>::type LHS_EXT ; typedef typename Rcpp::traits::Extractor< RTYPE, RHS_NA, RHS_T>::type RHS_EXT ; Minus_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) {} inline STORAGE operator[]( R_xlen_t i ) const { STORAGE x = lhs[i] ; if( Rcpp::traits::is_na( x ) ) return x ; STORAGE y = rhs[i] ; return Rcpp::traits::is_na( y ) ? y : ( x - y ) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // RTYPE = REALSXP template class Minus_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Minus_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) {} inline double operator[]( R_xlen_t i ) const { return lhs[i] - rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; template class Minus_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Minus_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) {} inline STORAGE operator[]( R_xlen_t i ) const { STORAGE y = rhs[i] ; if( Rcpp::traits::is_na( y ) ) return y ; return lhs[i] - y ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // RTYPE = REALSXP template class Minus_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Minus_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) {} inline double operator[]( R_xlen_t i ) const { return lhs[i] - rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; template class Minus_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Minus_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) {} inline STORAGE operator[]( R_xlen_t i ) const { STORAGE x = lhs[i] ; if( Rcpp::traits::is_na( x ) ) return x ; return x - rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // RTYPE = REALSXP template class Minus_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Minus_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) {} inline double operator[]( R_xlen_t i ) const { return lhs[i] - rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; template class Minus_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Minus_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) {} inline STORAGE operator[]( R_xlen_t i ) const { return lhs[i] - rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; template class Minus_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Minus_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) {} inline double operator[]( R_xlen_t i ) const { return lhs[i] - rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; template class Minus_Vector_Primitive : public Rcpp::VectorBase > { public: typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type VEC_EXT ; Minus_Vector_Primitive( const VEC_TYPE& lhs_, STORAGE rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_), rhs_na( Rcpp::traits::is_na(rhs_) ) {} inline STORAGE operator[]( R_xlen_t i ) const { if( rhs_na ) return rhs ; STORAGE x = lhs[i] ; return Rcpp::traits::is_na(x) ? x : (x - rhs) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const VEC_EXT& lhs ; STORAGE rhs ; bool rhs_na ; } ; template class Minus_Vector_Primitive : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type VEC_EXT ; Minus_Vector_Primitive( const VEC_TYPE& lhs_, double rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_){} inline double operator[]( R_xlen_t i ) const { return lhs[i] - rhs ; } inline R_xlen_t size() const { return lhs.size() ; } private: const VEC_EXT& lhs ; double rhs ; } ; template class Minus_Vector_Primitive : public Rcpp::VectorBase > { public: typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type VEC_EXT ; Minus_Vector_Primitive( const VEC_TYPE& lhs_, STORAGE rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_), rhs_na( Rcpp::traits::is_na(rhs_) ) {} inline STORAGE operator[]( R_xlen_t i ) const { if( rhs_na ) return rhs ; STORAGE x = lhs[i] ; return Rcpp::traits::is_na(x) ? x : (x - rhs) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const VEC_EXT& lhs ; STORAGE rhs ; bool rhs_na ; } ; template class Minus_Vector_Primitive : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type VEC_EXT ; Minus_Vector_Primitive( const VEC_TYPE& lhs_, double rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_){} inline double operator[]( R_xlen_t i ) const { return lhs[i] - rhs ; } inline R_xlen_t size() const { return lhs.size() ; } private: const VEC_EXT& lhs ; double rhs ; } ; template class Minus_Primitive_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor::type VEC_EXT ; Minus_Primitive_Vector( STORAGE lhs_, const VEC_TYPE& rhs_ ) : lhs(lhs_), rhs(rhs_.get_ref()), lhs_na( Rcpp::traits::is_na(lhs_) ) {} inline STORAGE operator[]( R_xlen_t i ) const { if( lhs_na ) return lhs ; return lhs - rhs[i] ; } inline R_xlen_t size() const { return rhs.size() ; } private: STORAGE lhs ; const VEC_EXT& rhs ; bool lhs_na ; } ; template class Minus_Primitive_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type VEC_EXT ; Minus_Primitive_Vector( double lhs_, const VEC_TYPE& rhs_ ) : lhs(lhs_), rhs(rhs_.get_ref()){} inline double operator[]( R_xlen_t i ) const { return lhs - rhs[i] ; } inline R_xlen_t size() const { return rhs.size() ; } private: double lhs ; const VEC_EXT& rhs ; } ; template class Minus_Primitive_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor::type VEC_EXT ; Minus_Primitive_Vector( STORAGE lhs_, const VEC_TYPE& rhs_ ) : lhs(lhs_), rhs(rhs_.get_ref()), lhs_na( Rcpp::traits::is_na(lhs_) ) {} inline STORAGE operator[]( R_xlen_t i ) const { if( lhs_na ) return lhs ; return lhs - rhs[i] ; } inline R_xlen_t size() const { return rhs.size() ; } private: STORAGE lhs ; const VEC_EXT& rhs ; bool lhs_na ; } ; template class Minus_Primitive_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type VEC_EXT ; Minus_Primitive_Vector( double lhs_, const VEC_TYPE& rhs_ ) : lhs(lhs_), rhs(rhs_.get_ref()){} inline double operator[]( R_xlen_t i ) const { return lhs - rhs[i] ; } inline R_xlen_t size() const { return rhs.size() ; } private: double lhs ; const VEC_EXT& rhs ; } ; } template inline typename traits::enable_if::type, typename traits::storage_type::type>::value, sugar::Minus_Vector_Primitive< RTYPE , NA, T > >::type operator-( const VectorBase& lhs, const U &rhs ) { return sugar::Minus_Vector_Primitive( lhs, rhs ) ; } template inline typename traits::enable_if::type, typename traits::storage_type::type>::value, sugar::Minus_Primitive_Vector< RTYPE , NA,T> >::type operator-( const U &lhs, const VectorBase& rhs ) { return sugar::Minus_Primitive_Vector( lhs, rhs ) ; } template inline sugar::Minus_Vector_Vector< RTYPE , LHS_NA, LHS_T, RHS_NA, RHS_T > operator-( const VectorBase& lhs, const VectorBase& rhs ) { return sugar::Minus_Vector_Vector< RTYPE, LHS_NA,LHS_T, RHS_NA,RHS_T >( lhs, rhs ) ; } } #endif Rcpp/inst/include/Rcpp/sugar/operators/divides.h0000644000176200001440000003562312754425121021435 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // divides.h: Rcpp R/C++ interface class library -- operator- // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__divides_h #define Rcpp__sugar__divides_h namespace Rcpp{ namespace sugar{ template class Divides_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor< RTYPE, LHS_NA, LHS_T>::type LHS_EXT ; typedef typename Rcpp::traits::Extractor< RTYPE, RHS_NA, RHS_T>::type RHS_EXT ; Divides_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) {} inline STORAGE operator[]( R_xlen_t i ) const { STORAGE x = lhs[i] ; if( Rcpp::traits::is_na( x ) ) return x ; STORAGE y = rhs[i] ; return Rcpp::traits::is_na( y ) ? y : ( x / y ) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // RTYPE = REALSXP template class Divides_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Divides_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) {} inline double operator[]( R_xlen_t i ) const { return lhs[i] / rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; template class Divides_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor< RTYPE, false, LHS_T>::type LHS_EXT ; typedef typename Rcpp::traits::Extractor< RTYPE, RHS_NA, RHS_T>::type RHS_EXT ; Divides_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) {} inline STORAGE operator[]( R_xlen_t i ) const { STORAGE y = rhs[i] ; if( Rcpp::traits::is_na( y ) ) return y ; return lhs[i] / y ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // RTYPE = REALSXP template class Divides_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Divides_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) {} inline double operator[]( R_xlen_t i ) const { return lhs[i] / rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; template class Divides_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor< RTYPE, LHS_NA, LHS_T>::type LHS_EXT ; typedef typename Rcpp::traits::Extractor< RTYPE, false, RHS_T>::type RHS_EXT ; Divides_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) {} inline STORAGE operator[]( R_xlen_t i ) const { STORAGE x = lhs[i] ; if( Rcpp::traits::is_na( x ) ) return x ; return x / rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // RTYPE = REALSXP template class Divides_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Divides_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) {} inline double operator[]( R_xlen_t i ) const { return lhs[i] / rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; template class Divides_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Divides_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) {} inline STORAGE operator[]( R_xlen_t i ) const { return lhs[i] / rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // RTYPE : REALSXP template class Divides_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Divides_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) {} inline double operator[]( R_xlen_t i ) const { return lhs[i] / rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; template class Divides_Vector_Primitive : public Rcpp::VectorBase > { public: typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type VEC_EXT ; Divides_Vector_Primitive( const VEC_TYPE& lhs_, STORAGE rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_), rhs_na( Rcpp::traits::is_na(rhs_) ) { } inline STORAGE operator[]( R_xlen_t i ) const { if(rhs_na) return rhs ; STORAGE x = lhs[i] ; return Rcpp::traits::is_na(x) ? x : (x / rhs) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const VEC_EXT& lhs ; STORAGE rhs ; bool rhs_na ; } ; // RTYPE : REALSXP template class Divides_Vector_Primitive : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type VEC_EXT ; Divides_Vector_Primitive( const VEC_TYPE& lhs_, double rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_) { } inline double operator[]( R_xlen_t i ) const { return lhs[i] / rhs ; } inline R_xlen_t size() const { return lhs.size() ; } private: const VEC_EXT& lhs ; double rhs ; } ; template class Divides_Vector_Primitive : public Rcpp::VectorBase > { public: typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type VEC_EXT ; Divides_Vector_Primitive( const VEC_TYPE& lhs_, STORAGE rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_), rhs_na( Rcpp::traits::is_na(rhs_) ) {} inline STORAGE operator[]( R_xlen_t i ) const { if( rhs_na ) return rhs ; STORAGE x = lhs[i] ; return Rcpp::traits::is_na(x) ? x : (x / rhs) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const VEC_EXT& lhs ; STORAGE rhs ; bool rhs_na ; } ; // RTYPE = REALSXP template class Divides_Vector_Primitive : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type VEC_EXT ; Divides_Vector_Primitive( const VEC_TYPE& lhs_, double rhs_ ) : lhs(lhs_), rhs(rhs_){} inline double operator[]( R_xlen_t i ) const { return lhs[i] / rhs ; } inline R_xlen_t size() const { return lhs.size() ; } private: const VEC_EXT& lhs ; double rhs ; } ; template class Divides_Primitive_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type VEC_EXT ; typedef typename traits::storage_type::type STORAGE ; Divides_Primitive_Vector( STORAGE lhs_, const VEC_TYPE& rhs_ ) : lhs(lhs_), rhs(rhs_.get_ref()), lhs_na( Rcpp::traits::is_na(lhs_) ) {} inline STORAGE operator[]( R_xlen_t i ) const { if( lhs_na ) return lhs ; STORAGE x = rhs[i] ; return Rcpp::traits::is_na(x) ? x : (lhs / x) ; } inline R_xlen_t size() const { return rhs.size() ; } private: STORAGE lhs ; const VEC_EXT& rhs ; bool lhs_na ; } ; // RTYPE = REALSXP template class Divides_Primitive_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type VEC_EXT ; Divides_Primitive_Vector( double lhs_, const VEC_TYPE& rhs_ ) : lhs(lhs_), rhs(rhs_.get_ref()) {} inline double operator[]( R_xlen_t i ) const { return lhs / rhs[i] ; } inline R_xlen_t size() const { return rhs.size() ; } private: double lhs ; const VEC_EXT& rhs ; } ; template class Divides_Primitive_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor::type VEC_EXT ; Divides_Primitive_Vector( STORAGE lhs_, const VEC_TYPE& rhs_ ) : lhs(lhs_), rhs(rhs_.get_ref()), lhs_na( Rcpp::traits::is_na(lhs_) ) {} inline STORAGE operator[]( R_xlen_t i ) const { if( lhs_na ) return lhs ; return lhs / rhs[i] ; } inline R_xlen_t size() const { return rhs.size() ; } private: STORAGE lhs ; const VEC_EXT& rhs ; bool lhs_na ; } ; // RTYPE = REALSXP template class Divides_Primitive_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type VEC_EXT ; Divides_Primitive_Vector( double lhs_, const VEC_TYPE& rhs_ ) : lhs(lhs_), rhs(rhs_.get_ref()) {} inline double operator[]( R_xlen_t i ) const { return lhs / rhs[i] ; } inline R_xlen_t size() const { return rhs.size() ; } private: double lhs ; const VEC_EXT& rhs ; } ; } template inline typename traits::enable_if::type, typename traits::storage_type::type>::value, sugar::Divides_Vector_Primitive< RTYPE , NA, T > >::type operator/( const VectorBase& lhs, const U &rhs ) { return sugar::Divides_Vector_Primitive( lhs, rhs ) ; } template inline typename traits::enable_if< traits::is_convertible< typename traits::remove_const_and_reference::type, typename traits::storage_type::type>::value, sugar::Divides_Primitive_Vector< RTYPE , NA,T> >::type operator/( const U &lhs, const VectorBase& rhs ) { return sugar::Divides_Primitive_Vector( lhs, rhs ) ; } template inline sugar::Divides_Vector_Vector< RTYPE , LHS_NA, LHS_T, RHS_NA, RHS_T > operator/( const VectorBase& lhs, const VectorBase& rhs ) { return sugar::Divides_Vector_Vector< RTYPE, LHS_NA,LHS_T, RHS_NA,RHS_T >( lhs, rhs ) ; } } #endif Rcpp/inst/include/Rcpp/sugar/operators/Comparator_With_One_Value.h0000644000176200001440000000573012754425121025041 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // LessThan.h: Rcpp R/C++ interface class library -- vector operators // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__Comparator_With_One_Value_h #define Rcpp__sugar__Comparator_With_One_Value_h namespace Rcpp{ namespace sugar{ template class Comparator_With_One_Value : public ::Rcpp::VectorBase< LGLSXP, true, Comparator_With_One_Value > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef int (Comparator_With_One_Value::*METHOD)(int) const ; Comparator_With_One_Value( const VEC_TYPE& lhs_, STORAGE rhs_ ) : lhs(lhs_), rhs(rhs_), m(), op() { m = Rcpp::traits::is_na(rhs) ? &Comparator_With_One_Value::rhs_is_na : &Comparator_With_One_Value::rhs_is_not_na ; } inline int operator[]( R_xlen_t i ) const { return (this->*m)(i) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const VEC_TYPE& lhs ; STORAGE rhs ; METHOD m ; Operator op ; inline int rhs_is_na(int i) const { return rhs ; } inline int rhs_is_not_na(int i) const { STORAGE x = lhs[i] ; return Rcpp::traits::is_na(x) ? x : op( x, rhs ) ; } } ; template class Comparator_With_One_Value : public ::Rcpp::VectorBase< RTYPE, true, Comparator_With_One_Value > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef int (Comparator_With_One_Value::*METHOD)(int) const ; Comparator_With_One_Value( const VEC_TYPE& lhs_, STORAGE rhs_ ) : lhs(lhs_), rhs(rhs_), m(), op() { m = Rcpp::traits::is_na(rhs) ? &Comparator_With_One_Value::rhs_is_na : &Comparator_With_One_Value::rhs_is_not_na ; } inline int operator[]( R_xlen_t i ) const { return (this->*m)(i) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const VEC_TYPE& lhs ; STORAGE rhs ; METHOD m ; Operator op ; inline int rhs_is_na(int i) const { return rhs ; } inline int rhs_is_not_na(int i) const { return op( lhs[i], rhs ) ; } } ; } // sugar } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/operators/Comparator.h0000644000176200001440000000655512754425121022117 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // LessThan.h: Rcpp R/C++ interface class library -- vector operators // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__Comparator_h #define Rcpp__sugar__Comparator_h namespace Rcpp{ namespace sugar{ template class Comparator : public ::Rcpp::VectorBase< LGLSXP, true, Comparator > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename traits::storage_type::type STORAGE ; Comparator( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_) : lhs(lhs_), rhs(rhs_), op() {} inline int operator[]( R_xlen_t i ) const { STORAGE x = lhs[i] ; if( Rcpp::traits::is_na( x ) ) return NA_LOGICAL ; STORAGE y = rhs[i] ; if( Rcpp::traits::is_na( y ) ) return NA_LOGICAL ; return op( x, y ) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_TYPE& lhs ; const RHS_TYPE& rhs ; Operator op ; } ; template class Comparator : public ::Rcpp::VectorBase< LGLSXP, true, Comparator > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename traits::storage_type::type STORAGE ; Comparator( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_) : lhs(lhs_), rhs(rhs_), op() {} inline int operator[]( R_xlen_t i ) const { STORAGE y = rhs[i] ; if( Rcpp::traits::is_na( y ) ) return NA_LOGICAL ; return op( lhs[i], y ) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_TYPE& lhs ; const RHS_TYPE& rhs ; Operator op ; } ; template class Comparator : public ::Rcpp::VectorBase< LGLSXP, true, Comparator > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename traits::storage_type::type STORAGE ; Comparator( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_) : lhs(lhs_), rhs(rhs_), op() {} inline int operator[]( R_xlen_t i ) const { return op( lhs[i], rhs[i] ) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_TYPE& lhs ; const RHS_TYPE& rhs ; Operator op ; } ; } } #endif Rcpp/inst/include/Rcpp/sugar/operators/not.h0000644000176200001440000000546712754425121020611 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // not.h: Rcpp R/C++ interface class library -- unary operator! // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__not_h #define Rcpp__sugar__not_h namespace Rcpp{ namespace sugar{ template class not_ { public: typedef typename traits::storage_type::type STORAGE ; inline int apply( STORAGE x ) const { return Rcpp::traits::is_na(x) ? NA_LOGICAL : (x ? FALSE : TRUE) ; } } ; template class not_ { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; inline int apply( STORAGE x ) const { return x ? FALSE : TRUE ; } } ; template class not_{ public: inline int apply( double x ) const { return Rcpp::traits::is_na( x ) ? NA_LOGICAL : ( (x == 0) ? FALSE : TRUE ) ; } } ; template <> class not_{ public: inline int apply( double x ) const { return ( x == 0.0 ? FALSE : TRUE ) ; } } ; template class not_{ public: inline int apply( Rcomplex x ) const { return Rcpp::traits::is_na( x ) ? NA_LOGICAL : ( (x.r == 0.0 & x.i == 0.0 ) ? FALSE : TRUE ) ; } } ; template <> class not_{ public: inline int apply( Rcomplex x ) const { return ((x.r == 0.0) & (x.i == 0.0) ) ? FALSE : TRUE ; } } ; template class Not_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef not_ OPERATOR ; Not_Vector( const VEC_TYPE& lhs_ ) : lhs(lhs_), op() {} inline STORAGE operator[]( R_xlen_t i ) const { return op.apply( lhs[i] ) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const VEC_TYPE& lhs ; OPERATOR op ; } ; } } template inline Rcpp::sugar::Not_Vector< RTYPE , NA , T > operator!( const Rcpp::VectorBase& x ) { return Rcpp::sugar::Not_Vector( x ) ; } #endif Rcpp/inst/include/Rcpp/sugar/operators/logical_operators__Vector__primitive.h0000644000176200001440000001323012754425121027414 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // logical_operators__Vector__primitive.h: Rcpp R/C++ interface class library -- // logical operators for Vector to primitive comparisons // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__logical_operators__Vector__primitive_h #define Rcpp__sugar__logical_operators__Vector__primitive_h /* Vector < primitive */ template inline Rcpp::sugar::Comparator_With_One_Value< RTYPE , Rcpp::sugar::less, NA, T > operator<( const Rcpp::VectorBase& lhs , typename Rcpp::traits::storage_type::type rhs ){ return Rcpp::sugar::Comparator_With_One_Value< RTYPE, Rcpp::sugar::less, NA, T >( lhs, rhs ) ; } template inline Rcpp::sugar::Comparator_With_One_Value< RTYPE , Rcpp::sugar::less, NA, T > operator>( typename Rcpp::traits::storage_type::type rhs, const Rcpp::VectorBase& lhs ){ return Rcpp::sugar::Comparator_With_One_Value< RTYPE, Rcpp::sugar::less, NA, T >( lhs, rhs ) ; } /* Vector > primitive */ template inline Rcpp::sugar::Comparator_With_One_Value< RTYPE , Rcpp::sugar::greater, NA, T > operator>( const Rcpp::VectorBase& lhs , typename Rcpp::traits::storage_type::type rhs ){ return Rcpp::sugar::Comparator_With_One_Value< RTYPE, Rcpp::sugar::greater, NA, T >( lhs, rhs ) ; } template inline Rcpp::sugar::Comparator_With_One_Value< RTYPE , Rcpp::sugar::greater, NA, T > operator<( typename Rcpp::traits::storage_type::type rhs, const Rcpp::VectorBase& lhs ){ return Rcpp::sugar::Comparator_With_One_Value< RTYPE, Rcpp::sugar::greater, NA, T >( lhs, rhs ) ; } /* Vector <= primitive */ template inline Rcpp::sugar::Comparator_With_One_Value< RTYPE , Rcpp::sugar::less_or_equal, NA, T > operator<=( const Rcpp::VectorBase& lhs , typename Rcpp::traits::storage_type::type rhs ){ return Rcpp::sugar::Comparator_With_One_Value< RTYPE, Rcpp::sugar::less_or_equal, NA, T >( lhs, rhs ) ; } template inline Rcpp::sugar::Comparator_With_One_Value< RTYPE , Rcpp::sugar::less_or_equal, NA, T > operator>=( typename Rcpp::traits::storage_type::type rhs, const Rcpp::VectorBase& lhs ){ return Rcpp::sugar::Comparator_With_One_Value< RTYPE, Rcpp::sugar::less_or_equal, NA, T >( lhs, rhs ) ; } /* Vector >= primitive */ template inline Rcpp::sugar::Comparator_With_One_Value< RTYPE , Rcpp::sugar::greater_or_equal, NA, T > operator>=( const Rcpp::VectorBase& lhs , typename Rcpp::traits::storage_type::type rhs ){ return Rcpp::sugar::Comparator_With_One_Value< RTYPE, Rcpp::sugar::greater_or_equal, NA, T >( lhs, rhs ) ; } template inline Rcpp::sugar::Comparator_With_One_Value< RTYPE , Rcpp::sugar::greater_or_equal, NA, T > operator<=( typename Rcpp::traits::storage_type::type rhs, const Rcpp::VectorBase& lhs ){ return Rcpp::sugar::Comparator_With_One_Value< RTYPE, Rcpp::sugar::greater_or_equal, NA, T >( lhs, rhs ) ; } /* Vector == primitive */ template inline Rcpp::sugar::Comparator_With_One_Value< RTYPE , Rcpp::sugar::equal, NA, T > operator==( const Rcpp::VectorBase& lhs , typename Rcpp::traits::storage_type::type rhs ){ return Rcpp::sugar::Comparator_With_One_Value< RTYPE, Rcpp::sugar::equal, NA, T >( lhs, rhs ) ; } template inline Rcpp::sugar::Comparator_With_One_Value< RTYPE , Rcpp::sugar::equal, NA, T > operator==( typename Rcpp::traits::storage_type::type rhs, const Rcpp::VectorBase& lhs ){ return Rcpp::sugar::Comparator_With_One_Value< RTYPE, Rcpp::sugar::equal, NA, T >( lhs, rhs ) ; } /* Vector != primitive */ template inline Rcpp::sugar::Comparator_With_One_Value< RTYPE , Rcpp::sugar::not_equal, NA, T > operator!=( const Rcpp::VectorBase& lhs , typename Rcpp::traits::storage_type::type rhs ){ return Rcpp::sugar::Comparator_With_One_Value< RTYPE, Rcpp::sugar::not_equal, NA, T >( lhs, rhs ) ; } template inline Rcpp::sugar::Comparator_With_One_Value< RTYPE , Rcpp::sugar::not_equal, NA, T > operator!=( typename Rcpp::traits::storage_type::type rhs, const Rcpp::VectorBase& lhs ){ return Rcpp::sugar::Comparator_With_One_Value< RTYPE, Rcpp::sugar::not_equal, NA, T >( lhs, rhs ) ; } #endif Rcpp/inst/include/Rcpp/sugar/operators/plus.h0000644000176200001440000003744212754425121020772 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 4 -*- // // plus.h: Rcpp R/C++ interface class library -- operator+ // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__plus_h #define Rcpp__sugar__plus_h namespace Rcpp{ namespace sugar{ template class Plus_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor< RTYPE, LHS_NA, LHS_T>::type LHS_EXT ; typedef typename Rcpp::traits::Extractor< RTYPE, RHS_NA, RHS_T>::type RHS_EXT ; Plus_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) {} inline STORAGE operator[]( R_xlen_t i ) const { STORAGE lhs_ = lhs[i] ; if( traits::is_na(lhs_) ) return lhs_ ; STORAGE rhs_ = rhs[i] ; return traits::is_na(rhs_) ? rhs_ : (lhs_ + rhs_) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // specialization of the above for REALSXP because : // NA_REAL + NA_REAL = NA_REAL // NA_REAL + x = NA_REAL // x + NA_REAL = NA_REAL template class Plus_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Plus_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) {} inline double operator[]( R_xlen_t i ) const { return lhs[i] + rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // specialization LHS_NA = false template class Plus_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor< RTYPE, false, LHS_T>::type LHS_EXT ; typedef typename Rcpp::traits::Extractor< RTYPE, RHS_NA, RHS_T>::type RHS_EXT ; Plus_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()){} inline STORAGE operator[]( R_xlen_t i ) const { STORAGE rhs_ = rhs[i] ; if( traits::is_na(rhs_) ) return rhs_ ; return lhs[i] + rhs_ ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // LHS_NA = false & RTYPE = REALSXP template class Plus_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Plus_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()){} inline double operator[]( R_xlen_t i ) const { return lhs[i] + rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // specialization for RHS_NA = false template class Plus_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor< RTYPE, LHS_NA, LHS_T>::type LHS_EXT ; typedef typename Rcpp::traits::Extractor< RTYPE, false, RHS_T>::type RHS_EXT ; Plus_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()){} inline STORAGE operator[]( R_xlen_t i ) const { STORAGE lhs_ = lhs[i] ; if( traits::is_na(lhs_) ) return lhs_ ; return lhs_ + rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // RHS_NA = false, RTYPE = REALSXP template class Plus_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Plus_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()){} inline double operator[]( R_xlen_t i ) const { return lhs[i] + rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // specialization for RHS_NA = false and LHS_NA = false template class Plus_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor< RTYPE, false, LHS_T>::type LHS_EXT ; typedef typename Rcpp::traits::Extractor< RTYPE, false, RHS_T>::type RHS_EXT ; Plus_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()){} inline STORAGE operator[]( R_xlen_t i ) const { return lhs[i] + rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // specialization for RHS_NA = false and LHS_NA = false, RTYPE = REALSXP template class Plus_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Plus_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()){} inline double operator[]( R_xlen_t i ) const { return lhs[i] + rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; template class Plus_Vector_Primitive : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor< RTYPE, NA, T>::type EXT ; Plus_Vector_Primitive( const VEC_TYPE& lhs_, STORAGE rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_), rhs_na( Rcpp::traits::is_na(rhs_) ) {} inline STORAGE operator[]( R_xlen_t i ) const { if( rhs_na ) return rhs ; STORAGE x = lhs[i] ; return Rcpp::traits::is_na(x) ? x : (x + rhs) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const EXT& lhs ; STORAGE rhs ; bool rhs_na ; } ; // RTYPE = REALSXP template class Plus_Vector_Primitive : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor< REALSXP, NA, T>::type EXT ; Plus_Vector_Primitive( const VEC_TYPE& lhs_, double rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_) {} inline double operator[]( R_xlen_t i ) const { return rhs + lhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const EXT& lhs ; double rhs ; } ; template class Plus_Vector_Primitive : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor< RTYPE, false, T>::type EXT ; Plus_Vector_Primitive( const VEC_TYPE& lhs_, STORAGE rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_), rhs_na( Rcpp::traits::is_na(rhs_) ) {} inline STORAGE operator[]( R_xlen_t i ) const { return rhs_na ? rhs : (rhs + lhs[i] ) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const EXT& lhs ; STORAGE rhs ; bool rhs_na ; } ; // RTYPE = REALSXP template class Plus_Vector_Primitive : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor< REALSXP, false, T>::type EXT ; Plus_Vector_Primitive( const VEC_TYPE& lhs_, double rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_) {} inline double operator[]( R_xlen_t i ) const { return rhs + lhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const EXT& lhs ; double rhs ; } ; // Vector * nona(primitive) template class Plus_Vector_Primitive_nona : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor< RTYPE, NA, T>::type EXT ; Plus_Vector_Primitive_nona( const VEC_TYPE& lhs_, STORAGE rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_) {} inline STORAGE operator[]( R_xlen_t i ) const { STORAGE x = lhs[i] ; return Rcpp::traits::is_na(x) ? x : (x + rhs) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const EXT& lhs ; STORAGE rhs ; } ; template class Plus_Vector_Primitive_nona : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type EXT ; Plus_Vector_Primitive_nona( const VEC_TYPE& lhs_, double rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_) {} inline double operator[]( R_xlen_t i ) const { return rhs + lhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const EXT& lhs ; double rhs ; } ; template class Plus_Vector_Primitive_nona : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor< RTYPE, false, T>::type EXT ; Plus_Vector_Primitive_nona( const VEC_TYPE& lhs_, STORAGE rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_) {} inline STORAGE operator[]( R_xlen_t i ) const { return rhs + lhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const EXT& lhs ; STORAGE rhs ; } ; // RTYPE = REALSXP template class Plus_Vector_Primitive_nona : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor< REALSXP, false, T>::type EXT ; Plus_Vector_Primitive_nona( const VEC_TYPE& lhs_, double rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_) {} inline double operator[]( R_xlen_t i ) const { return rhs + lhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const EXT& lhs ; double rhs ; } ; } template inline typename traits::enable_if::type, typename traits::storage_type::type>::value, typename sugar::Plus_Vector_Primitive >::type operator+( const VectorBase& lhs, const U &rhs ) { return sugar::Plus_Vector_Primitive( lhs, rhs ) ; } template inline typename traits::enable_if::type, typename traits::storage_type::type>::value, typename sugar::Plus_Vector_Primitive< RTYPE , NA , T> >::type operator+( const U &rhs, const VectorBase& lhs ) { return sugar::Plus_Vector_Primitive( lhs, rhs ) ; } template inline typename traits::enable_if::type, typename traits::storage_type::type>::value, sugar::Plus_Vector_Primitive_nona >::type operator+( const VectorBase& lhs, const typename sugar::NonaPrimitive< U > &rhs ) { return sugar::Plus_Vector_Primitive_nona( lhs, rhs ) ; } template inline typename traits::enable_if::type, typename traits::storage_type::type>::value, sugar::Plus_Vector_Primitive_nona< RTYPE , NA , T> >::type operator+( const typename sugar::NonaPrimitive< U > &rhs, const VectorBase& lhs ) { return sugar::Plus_Vector_Primitive_nona( lhs, rhs ) ; } template inline sugar::Plus_Vector_Vector< RTYPE , LHS_NA, LHS_T, RHS_NA, RHS_T > operator+( const VectorBase& lhs, const VectorBase& rhs ) { return sugar::Plus_Vector_Vector< RTYPE, LHS_NA, LHS_T, RHS_NA, RHS_T >( lhs, rhs ) ; } } #endif Rcpp/inst/include/Rcpp/sugar/operators/r_binary_op.h0000644000176200001440000000326412754425121022305 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // LessThan.h: Rcpp R/C++ interface class library -- vector operators // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__r_binary_op_h #define Rcpp__sugar__r_binary_op_h namespace Rcpp{ namespace sugar{ #undef RCPP_OP #define RCPP_OP(NAME,OP) \ template \ class NAME { \ public: \ typedef typename traits::storage_type::type STORAGE ; \ inline int operator()( STORAGE lhs, STORAGE rhs) const { \ return lhs OP rhs ; \ } \ } ; RCPP_OP(less,<) RCPP_OP(greater,>) RCPP_OP(less_or_equal,<=) RCPP_OP(greater_or_equal,>=) RCPP_OP(equal,==) RCPP_OP(not_equal,!=) #undef RCPP_OP } // sugar } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/operators/unary_minus.h0000644000176200001440000000616712754425121022360 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // unary_minus.h: Rcpp R/C++ interface class library -- unary operator- // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__unary_minus_h #define Rcpp__sugar__unary_minus_h namespace Rcpp{ namespace sugar{ template struct unary_minus_result_type{ typedef typename traits::storage_type::type type ; enum{ value = RTYPE } ; } ; template <> struct unary_minus_result_type{ typedef traits::storage_type::type type ; enum{ value = INTSXP } ; } ; template class unary_minus { public: typedef typename traits::storage_type::type STORAGE ; typedef typename unary_minus_result_type::type RESULT ; inline RESULT apply( STORAGE x ) const { return Rcpp::traits::is_na(x) ? x : ( -x ) ; } } ; template class unary_minus { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; typedef typename unary_minus_result_type::type RESULT ; inline RESULT apply( STORAGE x ) const { return -x ; } } ; template class unary_minus{ public: inline Rcomplex apply( Rcomplex x ) const { if (Rcpp::traits::is_na( x ) ) return x; Rcomplex cx ; cx.r = -x.r; cx.i = -x.i ; return cx ; } } ; template <> class unary_minus{ public: inline Rcomplex apply( Rcomplex x ) const { Rcomplex cx ; cx.r = -x.r; cx.i = -x.i ; return cx ; } } ; template class UnaryMinus_Vector : public Rcpp::VectorBase< unary_minus_result_type::value , NA, UnaryMinus_Vector< unary_minus_result_type::value ,NA,T> > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename unary_minus_result_type::type RESULT ; typedef unary_minus OPERATOR ; UnaryMinus_Vector( const VEC_TYPE& lhs_ ) : lhs(lhs_), op() {} inline RESULT operator[]( R_xlen_t i ) const { return op.apply( lhs[i] ) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const VEC_TYPE& lhs ; OPERATOR op ; } ; } } template inline Rcpp::sugar::UnaryMinus_Vector< RTYPE , NA , T > operator-( const Rcpp::VectorBase& x ) { return Rcpp::sugar::UnaryMinus_Vector( x ) ; } #endif Rcpp/inst/include/Rcpp/sugar/operators/times.h0000644000176200001440000003716112754425121021126 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 4 -*- // // times.h: Rcpp R/C++ interface class library -- operator* // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__times_h #define Rcpp__sugar__times_h namespace Rcpp{ namespace sugar{ template class Times_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor< RTYPE, LHS_NA, LHS_T>::type LHS_EXT ; typedef typename Rcpp::traits::Extractor< RTYPE, RHS_NA, RHS_T>::type RHS_EXT ; Times_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) { } inline STORAGE operator[]( R_xlen_t i ) const { STORAGE lhs_ = lhs[i] ; if( traits::is_na(lhs_) ) return lhs_ ; STORAGE rhs_ = rhs[i] ; return traits::is_na(rhs_) ? rhs_ : (lhs_ * rhs_) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // RTYPE = REALSXP template class Times_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Times_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) { } inline double operator[]( R_xlen_t i ) const { return lhs[i] * rhs[i]; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // specialization LHS_NA = false template class Times_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor< RTYPE, false, LHS_T>::type LHS_EXT ; typedef typename Rcpp::traits::Extractor< RTYPE, RHS_NA, RHS_T>::type RHS_EXT ; Times_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()){} inline STORAGE operator[]( R_xlen_t i ) const { STORAGE rhs_ = rhs[i] ; if( traits::is_na(rhs_) ) return rhs_ ; return lhs[i] * rhs_ ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // RTYPE = REALSXP template class Times_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Times_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()){} inline double operator[]( R_xlen_t i ) const { return lhs[i] * rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // specialization for RHS_NA = false template class Times_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor< RTYPE, LHS_NA, LHS_T>::type LHS_EXT ; typedef typename Rcpp::traits::Extractor< RTYPE, false, RHS_T>::type RHS_EXT ; Times_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()){} inline STORAGE operator[]( R_xlen_t i ) const { STORAGE lhs_ = lhs[i] ; if( traits::is_na(lhs_) ) return lhs_ ; return lhs_ * rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // RTYPE = REALSXP template class Times_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Times_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()){} inline double operator[]( R_xlen_t i ) const { return lhs[i] * rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // specialization for RHS_NA = false and LHS_NA = false template class Times_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor< RTYPE, false, LHS_T>::type LHS_EXT ; typedef typename Rcpp::traits::Extractor< RTYPE, false, RHS_T>::type RHS_EXT ; Times_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()){} inline STORAGE operator[]( R_xlen_t i ) const { return lhs[i] * rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // RTYPE = REALSXP template class Times_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Times_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()){} inline double operator[]( R_xlen_t i ) const { return lhs[i] * rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; template class Times_Vector_Primitive : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor< RTYPE, NA, T>::type EXT ; Times_Vector_Primitive( const VEC_TYPE& lhs_, STORAGE rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_), rhs_na( Rcpp::traits::is_na(rhs_) ) {} inline STORAGE operator[]( R_xlen_t i ) const { if( rhs_na ) return rhs ; STORAGE x = lhs[i] ; return Rcpp::traits::is_na(x) ? x : (x * rhs) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const EXT& lhs ; STORAGE rhs ; bool rhs_na ; } ; // RTYPE = REALSXP template class Times_Vector_Primitive : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type EXT ; Times_Vector_Primitive( const VEC_TYPE& lhs_, double rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_) {} inline double operator[]( R_xlen_t i ) const { return rhs * lhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const EXT& lhs ; double rhs ; } ; template class Times_Vector_Primitive : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor< RTYPE, false, T>::type EXT ; Times_Vector_Primitive( const VEC_TYPE& lhs_, STORAGE rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_), rhs_na( Rcpp::traits::is_na(rhs_) ) {} inline STORAGE operator[]( R_xlen_t i ) const { return rhs_na ? rhs : (rhs * lhs[i] ) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const EXT& lhs ; STORAGE rhs ; bool rhs_na ; } ; // RTYPE = REALSXP template class Times_Vector_Primitive : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type EXT ; Times_Vector_Primitive( const VEC_TYPE& lhs_, double rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_) {} inline double operator[]( R_xlen_t i ) const { return rhs * lhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const EXT& lhs ; double rhs ; } ; // Vector * nona(primitive) template class Times_Vector_Primitive_nona : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor< RTYPE, NA, T>::type EXT ; Times_Vector_Primitive_nona( const VEC_TYPE& lhs_, STORAGE rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_) {} inline STORAGE operator[]( R_xlen_t i ) const { STORAGE x = lhs[i] ; return Rcpp::traits::is_na(x) ? x : (x * rhs) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const EXT& lhs ; STORAGE rhs ; } ; // RTYPE = REALSXP template class Times_Vector_Primitive_nona : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type EXT ; Times_Vector_Primitive_nona( const VEC_TYPE& lhs_, double rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_) {} inline double operator[]( R_xlen_t i ) const { return lhs[i] * rhs ; } inline R_xlen_t size() const { return lhs.size() ; } private: const EXT& lhs ; double rhs ; } ; template class Times_Vector_Primitive_nona : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor< RTYPE, false, T>::type EXT ; Times_Vector_Primitive_nona( const VEC_TYPE& lhs_, STORAGE rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_) {} inline STORAGE operator[]( R_xlen_t i ) const { return rhs * lhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const EXT& lhs ; STORAGE rhs ; } ; template class Times_Vector_Primitive_nona : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type EXT ; Times_Vector_Primitive_nona( const VEC_TYPE& lhs_, double rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_) {} inline double operator[]( R_xlen_t i ) const { return rhs * lhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const EXT& lhs ; double rhs ; } ; } template inline typename traits::enable_if::type, typename traits::storage_type::type>::value, sugar::Times_Vector_Primitive >::type operator*( const VectorBase& lhs, const U &rhs ) { return sugar::Times_Vector_Primitive( lhs, rhs ) ; } template inline typename traits::enable_if::type, typename traits::storage_type::type>::value, sugar::Times_Vector_Primitive< RTYPE , NA , T > >::type operator*( const U &rhs, const VectorBase& lhs ) { return sugar::Times_Vector_Primitive( lhs, rhs ) ; } template inline typename traits::enable_if::type, typename traits::storage_type::type>::value, sugar::Times_Vector_Primitive_nona >::type operator*( const VectorBase& lhs, const typename sugar::NonaPrimitive< U > &rhs ) { return sugar::Times_Vector_Primitive_nona( lhs, rhs ) ; } template inline typename traits::enable_if::type, typename traits::storage_type::type>::value, sugar::Times_Vector_Primitive_nona< RTYPE , NA , T > >::type operator*( const typename sugar::NonaPrimitive< U > &rhs, const VectorBase& lhs ) { return sugar::Times_Vector_Primitive_nona( lhs, rhs ) ; } template inline sugar::Times_Vector_Vector< RTYPE , LHS_NA, LHS_T, RHS_NA, RHS_T > operator*( const VectorBase& lhs, const VectorBase& rhs ) { return sugar::Times_Vector_Vector< RTYPE, LHS_NA, LHS_T, RHS_NA, RHS_T >( lhs, rhs ) ; } } #endif Rcpp/inst/include/Rcpp/sugar/Range.h0000644000176200001440000000466113004167163017020 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // Range.h: Rcpp R/C++ interface class library -- // // Copyright (C) 2010 - 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_SUGAR_RANGE_H #define RCPP_SUGAR_RANGE_H namespace Rcpp{ class Range : public VectorBase{ public: Range( R_xlen_t start_, R_xlen_t end__ ) : start(start_), end_(end__){ if( start_ > end__ ){ throw std::range_error( "upper value must be greater than lower value" ) ; } } inline R_xlen_t size() const{ return end_ - start + 1; } inline R_xlen_t operator[]( R_xlen_t i) const { return start + i ; } Range& operator++() { start++ ; end_++ ; return *this ; } Range operator++(int) { Range orig(*this) ; ++(*this); return orig ; } Range& operator--() { start-- ; end_-- ; return *this ; } Range operator--(int) { Range orig(*this) ; --(*this); return orig ; } Range& operator+=( int n ) { start += n ; end_ += n ; return *this ; } Range& operator-=( int n ) { start -= n ; end_ -= n ; return *this ; } Range operator+( int n ){ return Range( start + n, end_ + n ) ; } Range operator-( int n ){ return Range( start - n, end_ - n ) ; } inline R_xlen_t get_start() const { return start ; } inline R_xlen_t get_end() const { return end_ ; } private: R_xlen_t start ; R_xlen_t end_ ; } ; } #endif Rcpp/inst/include/Rcpp/sugar/sugar_forward.h0000644000176200001440000000212612754425121020625 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // sugar_forward.h: Rcpp R/C++ interface class library -- forward declaration for Rcpp::sugar // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_SUGAR_FORWARD_H #define RCPP_SUGAR_FORWARD_H // traits #include // abstractions #include #include #endif Rcpp/inst/include/Rcpp/sugar/block/0000755000176200001440000000000012754425121016700 5ustar liggesusersRcpp/inst/include/Rcpp/sugar/block/SugarBlock_1.h0000644000176200001440000000504312754425121021327 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // SugarBlock.h: Rcpp R/C++ interface class library -- sugar functions // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_SUGAR_BLOCK_1_H #define RCPP_SUGAR_BLOCK_1_H namespace Rcpp{ namespace sugar{ template class SugarBlock_1 : public Rcpp::VectorBase< Rcpp::traits::r_sexptype_traits::rtype , NA, SugarBlock_1 > { public: typedef RESULT_TYPE (*FunPtr)(U1) ; SugarBlock_1( FunPtr ptr_, const T1 & vec_) : ptr(ptr_), vec(vec_){} inline RESULT_TYPE operator[]( R_xlen_t i) const { return ptr( vec[i] ) ; } inline R_xlen_t size() const { return vec.size() ; } private: FunPtr ptr ; const T1& vec ; }; } // sugar } // Rcpp #define SB1_T VectorBase #define SUGAR_BLOCK_1(__NAME__,__SYMBOL__) \ namespace Rcpp{ \ template \ inline sugar::SugarBlock_1 \ __NAME__( \ const SB1_T& t \ ){ \ return sugar::SugarBlock_1( \ __SYMBOL__ , t \ ) ; \ } \ } #endif Rcpp/inst/include/Rcpp/sugar/block/SugarMath.h0000644000176200001440000001071412754425121020747 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // SugarBlock.h: Rcpp R/C++ interface class library -- sugar functions // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_SUGAR_SUGARMATH_H #define RCPP_SUGAR_SUGARMATH_H namespace Rcpp{ namespace sugar{ template class SugarMath_1 : public Rcpp::VectorBase< Rcpp::traits::r_sexptype_traits::rtype , NA, SugarMath_1 > { public: typedef Rcpp::VectorBase< Rcpp::traits::r_sexptype_traits::rtype ,NA,T1> VEC_TYPE ; SugarMath_1( FunPtr ptr_, const VEC_TYPE & vec_) : ptr(ptr_), vec(vec_){} inline RESULT_TYPE operator[]( R_xlen_t i) const { U1 x = vec[i] ; if( ISNAN(x) ) return x; return ptr( x ) ; } inline R_xlen_t size() const { return vec.size() ; } private: FunPtr ptr ; const VEC_TYPE& vec ; }; template class SugarMath_1 : public Rcpp::VectorBase< Rcpp::traits::r_sexptype_traits::rtype , NA, SugarMath_1 > { public: typedef Rcpp::VectorBase< INTSXP ,NA,T1> VEC_TYPE ; SugarMath_1( FunPtr ptr_, const VEC_TYPE & vec_) : ptr(ptr_), vec(vec_){} inline RESULT_TYPE operator[]( R_xlen_t i) const { int x = vec[i] ; if( Rcpp::traits::is_na(x) ) return Rcpp::traits::get_na( ) ; return ptr( x ) ; } inline R_xlen_t size() const { return vec.size() ; } private: FunPtr ptr ; const VEC_TYPE& vec ; }; template class SugarMath_1 : public Rcpp::VectorBase< Rcpp::traits::r_sexptype_traits::rtype , false, SugarMath_1 > { public: typedef Rcpp::VectorBase< INTSXP ,false,T1> VEC_TYPE ; SugarMath_1( FunPtr ptr_, const VEC_TYPE & vec_) : ptr(ptr_), vec(vec_){} inline RESULT_TYPE operator[]( R_xlen_t i) const { return ptr( vec[i] ) ; } inline R_xlen_t size() const { return vec.size() ; } private: FunPtr ptr ; const VEC_TYPE& vec ; }; } // sugar } // Rcpp #define SUGAR_MATH_1(__NAME__,__SYMBOL__) \ namespace Rcpp{ \ template \ inline sugar::SugarMath_1 \ __NAME__( \ const VectorBase& t \ ){ \ return sugar::SugarMath_1( \ &__SYMBOL__ , t \ ) ; \ } \ inline sugar::SugarMath_1 \ __NAME__( SEXP x){ return __NAME__( NumericVector( x ) ) ; } \ template \ inline sugar::SugarMath_1 \ __NAME__( \ const VectorBase& t \ ){ \ return sugar::SugarMath_1( \ &__SYMBOL__ , t \ ) ; \ } \ } #endif Rcpp/inst/include/Rcpp/sugar/block/SugarBlock_3.h0000644000176200001440000001164312754425121021334 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // SugarBlock.h: Rcpp R/C++ interface class library -- sugar functions // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_SUGAR_BLOCK_3_H #define RCPP_SUGAR_BLOCK_3_H namespace Rcpp{ namespace sugar{ template < bool NA, typename RESULT_TYPE, typename U1, typename T1, typename U2, typename T2, typename U3, typename T3 > class SugarBlock_3_VVV : public Rcpp::VectorBase< Rcpp::traits::r_sexptype_traits::rtype , NA, SugarBlock_3_VVV > { public: typedef RESULT_TYPE (*FunPtr)(U1,U2,U3) ; SugarBlock_3_VVV( FunPtr ptr_, const T1 & x_, const T2& y_, const T3& z_ ) : ptr(ptr_), x(x_), y(y_), z(z_) { // TODO: size checks, recycling, etc ... } inline RESULT_TYPE operator[]( R_xlen_t i) const { return ptr( x[i], y[i], z[i] ) ; } inline R_xlen_t size() const { return x.size() ; } private: FunPtr ptr ; const T1& x ; const T2& y ; const T2& z ; }; // template // class SugarBlock_3__VP : public Rcpp::VectorBase< Rcpp::traits::r_sexptype_traits::rtype , NA, SugarBlock_3__VP > { // public: // typedef RESULT_TYPE (*FunPtr)(U1,U2) ; // SugarBlock_3__VP( FunPtr ptr_, const T1 & x_, U2 u2 ) : // ptr(ptr_), x(x_), y(u2){} // // inline RESULT_TYPE operator[]( int i) const { // return ptr( x[i], y ) ; // } // inline int size() const { return x.size() ; } // // private: // FunPtr ptr ; // const T1& x ; // U2 y ; // }; // // template // class SugarBlock_3__PV : public Rcpp::VectorBase< Rcpp::traits::r_sexptype_traits::rtype , NA, SugarBlock_3__PV > { // public: // typedef RESULT_TYPE (*FunPtr)(U1,U2) ; // SugarBlock_3__PV( FunPtr ptr_, U1 u1, const T2& y_ ) : // ptr(ptr_), x(u1), y(y_){} // // inline RESULT_TYPE operator[]( int i) const { // return ptr( x, y[i] ) ; // } // inline int size() const { return y.size() ; } // // private: // FunPtr ptr ; // U1 x ; // const T2& y ; // }; } // sugar } // Rcpp #define SB3_T1 VectorBase #define SB3_T2 VectorBase #define SB3_T3 VectorBase #define SUGAR_BLOCK_3(__NAME__,__SYMBOL__) \ namespace Rcpp{ \ template \ inline sugar::SugarBlock_3_VVV< \ (T1_NA||T2_NA||T3_NA) ,double, \ double,SB3_T1, \ double,SB3_T2, \ double,SB3_T3 \ > \ __NAME__( \ const SB3_T1& x1, \ const SB3_T2& x2, \ const SB3_T3& x3 \ ){ \ return sugar::SugarBlock_3_VVV< \ (T1_NA||T2_NA||T3_NA) , double, \ double,SB3_T1, \ double,SB3_T2, \ double,SB3_T3 \ >( \ __SYMBOL__ , x1, x2, x3 \ ) ; \ } \ } #endif Rcpp/inst/include/Rcpp/sugar/block/Vectorized_Math.h0000644000176200001440000000761412754425121022150 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // SugarBlock.h: Rcpp R/C++ interface class library -- sugar functions // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_SUGAR_VECTORIZEDMATH_H #define RCPP_SUGAR_VECTORIZEDMATH_H namespace Rcpp{ namespace sugar{ extern "C" typedef double (*DDFun)(double); template class Vectorized : public VectorBase >{ public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type VEC_EXT ; Vectorized( const VEC_TYPE& object_) : object( object_.get_ref() ){} inline double operator[]( R_xlen_t i) const { return Func( object[i] ) ; } inline R_xlen_t size() const { return object.size(); } private: const VEC_EXT& object ; } ; template class Vectorized_INTSXP : public VectorBase >{ public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type VEC_EXT ; Vectorized_INTSXP( const VEC_TYPE& object_) : object( object_.get_ref() ){} inline double operator[]( R_xlen_t i) const { int x = object[i] ; if( x == NA_INTEGER ) return NA_REAL ; return Func( x ) ; } inline R_xlen_t size() const { return object.size(); } private: const VEC_EXT& object ; } ; template class Vectorized_INTSXP : public VectorBase >{ public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type VEC_EXT ; Vectorized_INTSXP( const VEC_TYPE& object_) : object( object_.get_ref() ){} inline double operator[]( R_xlen_t i) const { return Func( object[i] ) ; } inline R_xlen_t size() const { return object.size(); } private: const VEC_EXT& object ; } ; } // sugar } // Rcpp #define VECTORIZED_MATH_1(__NAME__,__SYMBOL__) \ namespace Rcpp{ \ template \ inline sugar::Vectorized<__SYMBOL__,NA,T> \ __NAME__( const VectorBase& t ){ \ return sugar::Vectorized<__SYMBOL__,NA,T>( t ) ; \ } \ inline sugar::Vectorized<__SYMBOL__,true,NumericVector> \ __NAME__( SEXP x){ return __NAME__( NumericVector( x ) ) ; } \ template \ inline sugar::Vectorized_INTSXP<__SYMBOL__,NA,T> \ __NAME__( const VectorBase& t ){ \ return sugar::Vectorized_INTSXP<__SYMBOL__,NA,T>( t ) ; \ } \ } #endif Rcpp/inst/include/Rcpp/sugar/block/SugarBlock_2.h0000644000176200001440000002232112754425121021326 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // SugarBlock.h: Rcpp R/C++ interface class library -- sugar functions // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_SUGAR_BLOCK_2_H #define RCPP_SUGAR_BLOCK_2_H namespace Rcpp{ namespace sugar{ template class SugarBlock_2 : public Rcpp::VectorBase< Rcpp::traits::r_sexptype_traits::rtype , NA, SugarBlock_2 > { public: typedef RESULT_TYPE (*FunPtr)(U1,U2) ; SugarBlock_2( FunPtr ptr_, const T1 & x_, const T2& y_ ) : ptr(ptr_), x(x_), y(y_){ // TODO: check that x and y have same size } inline RESULT_TYPE operator[]( R_xlen_t i) const { return ptr( x[i], y[i] ) ; } inline R_xlen_t size() const { return x.size() ; } private: FunPtr ptr ; const T1& x ; const T2& y ; }; template class SugarBlock_2__VP : public Rcpp::VectorBase< Rcpp::traits::r_sexptype_traits::rtype , NA, SugarBlock_2__VP > { public: typedef RESULT_TYPE (*FunPtr)(U1,U2) ; SugarBlock_2__VP( FunPtr ptr_, const T1 & x_, U2 u2 ) : ptr(ptr_), x(x_), y(u2){} inline RESULT_TYPE operator[]( R_xlen_t i) const { return ptr( x[i], y ) ; } inline R_xlen_t size() const { return x.size() ; } private: FunPtr ptr ; const T1& x ; U2 y ; }; template class SugarBlock_2__PV : public Rcpp::VectorBase< Rcpp::traits::r_sexptype_traits::rtype , NA, SugarBlock_2__PV > { public: typedef RESULT_TYPE (*FunPtr)(U1,U2) ; SugarBlock_2__PV( FunPtr ptr_, U1 u1, const T2& y_ ) : ptr(ptr_), x(u1), y(y_){} inline RESULT_TYPE operator[]( R_xlen_t i) const { return ptr( x, y[i] ) ; } inline R_xlen_t size() const { return y.size() ; } private: FunPtr ptr ; U1 x ; const T2& y ; }; } // sugar } // Rcpp #define SB2_LHT VectorBase #define SB2_RHT VectorBase #define SUGAR_BLOCK_2(__NAME__,__SYMBOL__) \ namespace Rcpp{ \ template \ inline sugar::SugarBlock_2< (LHS_NA||RHS_NA) ,double,double,SB2_LHT,double,SB2_RHT> \ __NAME__( \ const SB2_LHT& lhs, \ const SB2_RHT& rhs \ ){ \ return sugar::SugarBlock_2< (LHS_NA||RHS_NA) ,double,double,SB2_LHT,double,SB2_RHT >(\ __SYMBOL__ , lhs, rhs \ ) ; \ } \ template \ inline sugar::SugarBlock_2__VP \ __NAME__( \ const SB2_LHT& lhs, \ double rhs \ ){ \ return sugar::SugarBlock_2__VP( \ __SYMBOL__ , lhs, rhs \ ) ; \ } \ template \ inline sugar::SugarBlock_2__PV \ __NAME__( \ double lhs, \ const SB2_RHT& rhs \ ){ \ return sugar::SugarBlock_2__PV( \ __SYMBOL__ , lhs, rhs \ ) ; \ } \ } #define SUGAR_BLOCK_2_NA(__NAME__,__SYMBOL__,__NA__) \ namespace Rcpp{ \ template \ inline sugar::SugarBlock_2< __NA__ ,double,double,SB2_LHT,double,SB2_RHT> \ __NAME__( \ const SB2_LHT& lhs, \ const SB2_RHT& rhs \ ){ \ return sugar::SugarBlock_2< __NA__ ,double,double,SB2_LHT,double,SB2_RHT \ >( \ __SYMBOL__ , lhs, rhs \ ) ; \ } \ template \ inline sugar::SugarBlock_2__VP<__NA__,double,double,SB2_LHT,double> \ __NAME__( \ const SB2_LHT& lhs, \ double rhs \ ){ \ return sugar::SugarBlock_2__VP<__NA__,double,double,SB2_LHT,double>( \ __SYMBOL__ , lhs, rhs \ ) ; \ } \ template \ inline sugar::SugarBlock_2__PV<__NA__,double,double,double,SB2_RHT> \ __NAME__( \ double lhs, \ const SB2_RHT& rhs \ ){ \ return sugar::SugarBlock_2__PV<__NA__,double,double,double,SB2_RHT \ >( \ __SYMBOL__ , lhs, rhs \ ) ; \ } \ } #endif Rcpp/inst/include/Rcpp/sugar/block/block.h0000644000176200001440000000221512754425121020143 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // block.h: Rcpp R/C++ interface class library -- sugar blocks // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__block__block_h #define Rcpp__sugar__block__block_h #include #include #include #include #include #endif Rcpp/inst/include/Rcpp/sugar/logical/0000755000176200001440000000000012754425121017220 5ustar liggesusersRcpp/inst/include/Rcpp/sugar/logical/SingleLogicalResult.h0000644000176200001440000000437212754425121023312 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // SingleLogicalResult.h: Rcpp R/C++ interface class library -- // // Copyright (C) 2010 - 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__SingleLogicalResult_h #define Rcpp__sugar__SingleLogicalResult_h namespace Rcpp{ namespace sugar{ template class forbidden_conversion ; template <> class forbidden_conversion{} ; template class conversion_to_bool_is_forbidden : forbidden_conversion{ public: void touch(){} }; template class SingleLogicalResult { public: const static int UNRESOLVED = -5 ; SingleLogicalResult() : result(UNRESOLVED) {} ; void apply(){ if( result == UNRESOLVED ){ static_cast(*this).apply() ; } } inline bool is_true(){ apply() ; return result == TRUE ; } inline bool is_false(){ apply() ; return result == FALSE ; } inline bool is_na(){ apply() ; return Rcpp::traits::is_na( result ) ; } inline operator SEXP(){ return get_sexp() ; } inline operator bool(){ conversion_to_bool_is_forbidden x ; x.touch() ; return is_true() ; } inline int size(){ return 1 ; } inline int get(){ apply(); return result; } inline SEXP get_sexp(){ apply() ; return Rf_ScalarLogical( result ) ; } protected: int result ; inline void set(int x){ result = x ;} inline void reset(){ set(UNRESOLVED) ; } inline void set_true(){ set(TRUE); } inline void set_false(){ set(FALSE); } inline void set_na(){ set(NA_LOGICAL); } inline bool is_unresolved(){ return result == UNRESOLVED ; } } ; } } #endif Rcpp/inst/include/Rcpp/sugar/logical/or.h0000644000176200001440000002300012754425121020004 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // or.h: Rcpp R/C++ interface class library -- // // Copyright (C) 2010 - 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__logical_or_h #define Rcpp__sugar__logical_or_h namespace Rcpp{ namespace sugar{ template class Or_SingleLogicalResult_SingleLogicalResult : public SingleLogicalResult< (LHS_NA || RHS_NA) , Or_SingleLogicalResult_SingleLogicalResult > { public: typedef SingleLogicalResult LHS_TYPE ; typedef SingleLogicalResult RHS_TYPE ; typedef SingleLogicalResult< (LHS_NA || RHS_NA) , Or_SingleLogicalResult_SingleLogicalResult > BASE ; Or_SingleLogicalResult_SingleLogicalResult( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_) : lhs(lhs_), rhs(rhs_){} ; inline void apply(){ int left = lhs.get() ; if( Rcpp::traits::is_na( left ) ){ BASE::set( left ) ; } else if( left == TRUE ){ BASE::set( TRUE ) ; } else { BASE::set( rhs.get() ) ; } } private: const LHS_TYPE& lhs ; const RHS_TYPE& rhs ; } ; // special version when we know the rhs is not NA template class Or_SingleLogicalResult_SingleLogicalResult : public SingleLogicalResult< LHS_NA , Or_SingleLogicalResult_SingleLogicalResult > { public: typedef SingleLogicalResult LHS_TYPE ; typedef SingleLogicalResult RHS_TYPE ; typedef SingleLogicalResult< LHS_NA, Or_SingleLogicalResult_SingleLogicalResult > BASE ; Or_SingleLogicalResult_SingleLogicalResult( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_) : lhs(lhs_), rhs(rhs_){} ; inline void apply(){ // here we know rhs does not have NA, so we start with the rhs int right = rhs.get() ; if( right == TRUE ){ BASE::set( TRUE ) ; } else { BASE::set( lhs.get() ) ; } } private: const LHS_TYPE& lhs ; const RHS_TYPE& rhs ; } ; // special version when we know the lhs is not NA template class Or_SingleLogicalResult_SingleLogicalResult : public SingleLogicalResult< RHS_NA , Or_SingleLogicalResult_SingleLogicalResult > { public: typedef SingleLogicalResult LHS_TYPE ; typedef SingleLogicalResult RHS_TYPE ; typedef SingleLogicalResult< RHS_NA, Or_SingleLogicalResult_SingleLogicalResult > BASE ; Or_SingleLogicalResult_SingleLogicalResult( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_) : lhs(lhs_), rhs(rhs_){} ; inline void apply(){ // here we know lhs does not have NA, so we start with the rhs int left = lhs.get() ; if( left == TRUE ){ BASE::set( TRUE ) ; } else { BASE::set( rhs.get() ) ; } } private: const LHS_TYPE& lhs ; const RHS_TYPE& rhs ; } ; // special version when we know both the lhs and the rhs are not NA template class Or_SingleLogicalResult_SingleLogicalResult : public SingleLogicalResult< false , Or_SingleLogicalResult_SingleLogicalResult > { public: typedef SingleLogicalResult LHS_TYPE ; typedef SingleLogicalResult RHS_TYPE ; typedef SingleLogicalResult< false, Or_SingleLogicalResult_SingleLogicalResult > BASE ; Or_SingleLogicalResult_SingleLogicalResult( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_) : lhs(lhs_), rhs(rhs_){} ; inline void apply(){ int left = lhs.get() ; if( left == TRUE ){ BASE::set( TRUE ) ; } else { BASE::set( rhs.get() ) ; } } private: const LHS_TYPE& lhs ; const RHS_TYPE& rhs ; } ; template class Or_SingleLogicalResult_bool : public SingleLogicalResult< LHS_NA , And_SingleLogicalResult_bool > { public: typedef SingleLogicalResult LHS_TYPE ; typedef SingleLogicalResult< LHS_NA , Or_SingleLogicalResult_bool > BASE ; Or_SingleLogicalResult_bool( const LHS_TYPE& lhs_, bool rhs_) : lhs(lhs_), rhs(rhs_){} ; inline void apply(){ if( rhs ){ BASE::set( TRUE ) ; } else{ BASE::set( lhs.get() ) ; } } private: const LHS_TYPE& lhs ; bool rhs ; } ; // (LogicalExpression) | (LogicalExpression) template class Or_LogicalExpression_LogicalExpression : public Rcpp::VectorBase< LGLSXP, true, Or_LogicalExpression_LogicalExpression >{ public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; Or_LogicalExpression_LogicalExpression( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_), rhs(rhs_){} inline int operator[]( R_xlen_t i ) const{ if( lhs[i] == TRUE || rhs[i] == TRUE ) return TRUE ; if( lhs[i] == FALSE && rhs[i] == FALSE ) return FALSE ; return NA_LOGICAL; } inline R_xlen_t size() const { return lhs.size(); } private: const LHS_TYPE& lhs ; const RHS_TYPE& rhs ; } ; template class Or_LogicalExpression_LogicalExpression : public Rcpp::VectorBase< LGLSXP, true, Or_LogicalExpression_LogicalExpression >{ public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; Or_LogicalExpression_LogicalExpression( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_), rhs(rhs_){} inline int operator[]( R_xlen_t i ) const{ if( lhs[i] == TRUE || rhs[i] == TRUE ) return TRUE ; if( rhs[i] == NA_LOGICAL ) return NA_LOGICAL ; return FALSE ; } inline R_xlen_t size() const { return lhs.size(); } private: const LHS_TYPE& lhs ; const RHS_TYPE& rhs ; } ; template class Or_LogicalExpression_LogicalExpression : public Rcpp::VectorBase< LGLSXP, true, Or_LogicalExpression_LogicalExpression >{ public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; Or_LogicalExpression_LogicalExpression( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_), rhs(rhs_){} inline int operator[]( R_xlen_t i ) const{ if( lhs[i] == TRUE || rhs[i] == TRUE ) return TRUE ; if( lhs[i] == NA_LOGICAL ) return NA_LOGICAL ; return FALSE; } inline R_xlen_t size() const { return lhs.size(); } private: const LHS_TYPE& lhs ; const RHS_TYPE& rhs ; } ; template class Or_LogicalExpression_LogicalExpression : public Rcpp::VectorBase< LGLSXP, false, Or_LogicalExpression_LogicalExpression >{ public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; Or_LogicalExpression_LogicalExpression( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_), rhs(rhs_){} inline int operator[]( R_xlen_t i ) const{ if( lhs[i] == TRUE || rhs[i] == TRUE ) return TRUE ; return FALSE; } inline R_xlen_t size() const { return lhs.size(); } private: const LHS_TYPE& lhs ; const RHS_TYPE& rhs ; } ; } // sugar } // Rcpp template inline Rcpp::sugar::Or_SingleLogicalResult_SingleLogicalResult operator||( const Rcpp::sugar::SingleLogicalResult& lhs, const Rcpp::sugar::SingleLogicalResult& rhs ){ return Rcpp::sugar::Or_SingleLogicalResult_SingleLogicalResult( lhs, rhs ) ; } template inline Rcpp::sugar::Or_SingleLogicalResult_bool operator||( const Rcpp::sugar::SingleLogicalResult& lhs, bool rhs ){ return Rcpp::sugar::Or_SingleLogicalResult_bool( lhs, rhs ) ; } template inline Rcpp::sugar::Or_SingleLogicalResult_bool operator||( bool rhs, const Rcpp::sugar::SingleLogicalResult& lhs ){ return Rcpp::sugar::Or_SingleLogicalResult_bool( lhs, rhs ) ; } // (logical expression) | (logical expression) template inline Rcpp::sugar::Or_LogicalExpression_LogicalExpression operator|( const Rcpp::VectorBase& lhs, const Rcpp::VectorBase& rhs ){ return Rcpp::sugar::Or_LogicalExpression_LogicalExpression( lhs, rhs ) ; } #endif Rcpp/inst/include/Rcpp/sugar/logical/and.h0000644000176200001440000002305712754425121020142 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // and.h: Rcpp R/C++ interface class library -- // // Copyright (C) 2010 - 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__logical_and_h #define Rcpp__sugar__logical_and_h namespace Rcpp{ namespace sugar{ template class And_SingleLogicalResult_SingleLogicalResult : public SingleLogicalResult< (LHS_NA || RHS_NA) , And_SingleLogicalResult_SingleLogicalResult > { public: typedef SingleLogicalResult LHS_TYPE ; typedef SingleLogicalResult RHS_TYPE ; typedef SingleLogicalResult< (LHS_NA || RHS_NA) , And_SingleLogicalResult_SingleLogicalResult > BASE ; And_SingleLogicalResult_SingleLogicalResult( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_) : lhs(lhs_), rhs(rhs_){} ; inline void apply(){ int left = lhs.get() ; if( Rcpp::traits::is_na( left ) ){ BASE::set( left ) ; } else if( left == FALSE ){ BASE::set( FALSE ) ; } else { BASE::set( rhs.get() ) ; } } private: const LHS_TYPE& lhs ; const RHS_TYPE& rhs ; } ; // special version when we know the rhs is not NA template class And_SingleLogicalResult_SingleLogicalResult : public SingleLogicalResult< LHS_NA , And_SingleLogicalResult_SingleLogicalResult > { public: typedef SingleLogicalResult LHS_TYPE ; typedef SingleLogicalResult RHS_TYPE ; typedef SingleLogicalResult< LHS_NA, And_SingleLogicalResult_SingleLogicalResult > BASE ; And_SingleLogicalResult_SingleLogicalResult( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_) : lhs(lhs_), rhs(rhs_){} ; inline void apply(){ // here we know rhs does not have NA, so we start with the rhs int right = rhs.get() ; if( right == FALSE ){ BASE::set( FALSE ) ; } else { BASE::set( lhs.get() ) ; } } private: const LHS_TYPE& lhs ; const RHS_TYPE& rhs ; } ; // special version when we know the lhs is not NA template class And_SingleLogicalResult_SingleLogicalResult : public SingleLogicalResult< RHS_NA , And_SingleLogicalResult_SingleLogicalResult > { public: typedef SingleLogicalResult LHS_TYPE ; typedef SingleLogicalResult RHS_TYPE ; typedef SingleLogicalResult< RHS_NA, And_SingleLogicalResult_SingleLogicalResult > BASE ; And_SingleLogicalResult_SingleLogicalResult( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_) : lhs(lhs_), rhs(rhs_){} ; inline void apply(){ // here we know lhs does not have NA, so we start with the rhs int left = lhs.get() ; if( left == FALSE ){ BASE::set( FALSE ) ; } else { BASE::set( rhs.get() ) ; } } private: const LHS_TYPE& lhs ; const RHS_TYPE& rhs ; } ; // special version when we know both the lhs and the rhs are not NA template class And_SingleLogicalResult_SingleLogicalResult : public SingleLogicalResult< false , And_SingleLogicalResult_SingleLogicalResult > { public: typedef SingleLogicalResult LHS_TYPE ; typedef SingleLogicalResult RHS_TYPE ; typedef SingleLogicalResult< false, And_SingleLogicalResult_SingleLogicalResult > BASE ; And_SingleLogicalResult_SingleLogicalResult( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_) : lhs(lhs_), rhs(rhs_){} ; inline void apply(){ int left = lhs.get() ; if( left == FALSE ){ BASE::set( FALSE ) ; } else { BASE::set( rhs.get() ) ; } } private: const LHS_TYPE& lhs ; const RHS_TYPE& rhs ; } ; template class And_SingleLogicalResult_bool : public SingleLogicalResult< LHS_NA , And_SingleLogicalResult_bool > { public: typedef SingleLogicalResult LHS_TYPE ; typedef SingleLogicalResult< LHS_NA , And_SingleLogicalResult_bool > BASE ; And_SingleLogicalResult_bool( const LHS_TYPE& lhs_, bool rhs_) : lhs(lhs_), rhs(rhs_){} ; inline void apply(){ if( !rhs ){ BASE::set( FALSE ) ; } else{ BASE::set( lhs.get() ) ; } } private: const LHS_TYPE& lhs ; bool rhs ; } ; // (LogicalExpression) & (LogicalExpression) template class And_LogicalExpression_LogicalExpression : public Rcpp::VectorBase< LGLSXP, true, And_LogicalExpression_LogicalExpression >{ public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; And_LogicalExpression_LogicalExpression( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_), rhs(rhs_){} inline int operator[]( R_xlen_t i ) const{ if( lhs[i] == TRUE && rhs[i] == TRUE ) return TRUE ; if( lhs[i] == NA_LOGICAL || rhs[i] == NA_LOGICAL ) return NA_LOGICAL ; return FALSE ; } inline R_xlen_t size() const { return lhs.size(); } private: const LHS_TYPE& lhs ; const RHS_TYPE& rhs ; } ; template class And_LogicalExpression_LogicalExpression : public Rcpp::VectorBase< LGLSXP, true, And_LogicalExpression_LogicalExpression >{ public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; And_LogicalExpression_LogicalExpression( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_), rhs(rhs_){} inline int operator[]( R_xlen_t i ) const{ if( lhs[i] == TRUE && rhs[i] == TRUE ) return TRUE ; if( rhs[i] == NA_LOGICAL ) return NA_LOGICAL ; return FALSE ; } inline R_xlen_t size() const { return lhs.size(); } private: const LHS_TYPE& lhs ; const RHS_TYPE& rhs ; } ; template class And_LogicalExpression_LogicalExpression : public Rcpp::VectorBase< LGLSXP, true, And_LogicalExpression_LogicalExpression >{ public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; And_LogicalExpression_LogicalExpression( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_), rhs(rhs_){} inline int operator[]( R_xlen_t i ) const{ if( lhs[i] == TRUE && rhs[i] == TRUE ) return TRUE ; if( lhs[i] == NA_LOGICAL ) return NA_LOGICAL ; return FALSE; } inline R_xlen_t size() const { return lhs.size(); } private: const LHS_TYPE& lhs ; const RHS_TYPE& rhs ; } ; template class And_LogicalExpression_LogicalExpression : public Rcpp::VectorBase< LGLSXP, false, And_LogicalExpression_LogicalExpression >{ public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; And_LogicalExpression_LogicalExpression( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_), rhs(rhs_){} inline int operator[]( R_xlen_t i ) const{ if( lhs[i] == TRUE && rhs[i] == TRUE ) return TRUE ; return FALSE; } inline R_xlen_t size() const { return lhs.size(); } private: const LHS_TYPE& lhs ; const RHS_TYPE& rhs ; } ; } } template inline Rcpp::sugar::And_SingleLogicalResult_SingleLogicalResult operator&&( const Rcpp::sugar::SingleLogicalResult& lhs, const Rcpp::sugar::SingleLogicalResult& rhs ){ return Rcpp::sugar::And_SingleLogicalResult_SingleLogicalResult( lhs, rhs ) ; } template inline Rcpp::sugar::And_SingleLogicalResult_bool operator&&( const Rcpp::sugar::SingleLogicalResult& lhs, bool rhs ){ return Rcpp::sugar::And_SingleLogicalResult_bool( lhs, rhs ) ; } template inline Rcpp::sugar::And_SingleLogicalResult_bool operator&&( bool rhs, const Rcpp::sugar::SingleLogicalResult& lhs ){ return Rcpp::sugar::And_SingleLogicalResult_bool( lhs, rhs ) ; } // (logical expression) & (logical expression) template inline Rcpp::sugar::And_LogicalExpression_LogicalExpression operator&( const Rcpp::VectorBase& lhs, const Rcpp::VectorBase& rhs ){ return Rcpp::sugar::And_LogicalExpression_LogicalExpression( lhs, rhs ) ; } #endif Rcpp/inst/include/Rcpp/sugar/logical/not.h0000644000176200001440000000351612754425121020176 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // not.h: Rcpp R/C++ interface class library -- // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__logical__not_h #define Rcpp__sugar__logical__not_h namespace Rcpp{ namespace sugar{ template struct negate{ static inline int apply( int x ){ return Rcpp::traits::is_na( x ) ? x : ( x ? FALSE : TRUE ) ; } } ; template<> struct negate{ static inline int apply( int x){ return x ? FALSE : TRUE ; } ; } ; template class Negate_SingleLogicalResult : public SingleLogicalResult >{ public: typedef SingleLogicalResult TYPE ; typedef SingleLogicalResult > BASE ; Negate_SingleLogicalResult( const TYPE& orig_ ) : orig(orig_) {} inline void apply(){ BASE::set( negate::apply( orig.get() ) ); } private: const TYPE& orig ; } ; } } template inline Rcpp::sugar::Negate_SingleLogicalResult operator!( const Rcpp::sugar::SingleLogicalResult& x){ return Rcpp::sugar::Negate_SingleLogicalResult( x ); } #endif Rcpp/inst/include/Rcpp/sugar/logical/logical.h0000644000176200001440000000221412754425121021002 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // logical.h: Rcpp R/C++ interface class library -- // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_SUGAR_LOGICAL_H #define RCPP_SUGAR_LOGICAL_H #include #include #include #include #include #include #endif Rcpp/inst/include/Rcpp/sugar/logical/is.h0000644000176200001440000000273412754425121020012 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // is.h: Rcpp R/C++ interface class library -- // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_SUGAR_LOGICAL_IS_H #define RCPP_SUGAR_LOGICAL_IS_H namespace Rcpp{ template inline bool is_true( const Rcpp::sugar::SingleLogicalResult& x){ return const_cast< Rcpp::sugar::SingleLogicalResult& >(x).is_true() ; } template inline bool is_false( const Rcpp::sugar::SingleLogicalResult& x){ return const_cast< Rcpp::sugar::SingleLogicalResult& >(x).is_false() ; } template inline bool is_na( const Rcpp::sugar::SingleLogicalResult& x){ return const_cast< Rcpp::sugar::SingleLogicalResult& >(x).is_na() ; } } #endif Rcpp/inst/include/Rcpp/sugar/logical/can_have_na.h0000644000176200001440000000201612754425121021612 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // can_have_na.h: Rcpp R/C++ interface class library -- // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__can_have_na_h #define Rcpp__sugar__can_have_na_h namespace Rcpp{ template struct can_have_na : T::can_have_na::type {} ; } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/matrix/0000755000176200001440000000000015014017044017103 5ustar liggesusersRcpp/inst/include/Rcpp/sugar/matrix/diag.h0000644000176200001440000000513012754425121020166 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // diag.h: Rcpp R/C++ interface class library -- diag // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__diag_h #define Rcpp__sugar__diag_h namespace Rcpp{ namespace sugar{ template class Diag_Extractor : public Rcpp::VectorBase< RTYPE ,NA, Diag_Extractor > { public: typedef typename Rcpp::MatrixBase MAT_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; Diag_Extractor( const MAT_TYPE& object_ ) : object(object_), n(0) { int nr = object.nrow() ; int nc = object.ncol() ; n = (nc < nr ) ? nc : nr ; } inline STORAGE operator[]( int i ) const { return object( i, i ) ; } inline R_xlen_t size() const { return n; } private: const MAT_TYPE& object ; R_xlen_t n ; } ; template class Diag_Maker : public Rcpp::MatrixBase< RTYPE ,NA, Diag_Maker > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; Diag_Maker( const VEC_TYPE& object_ ) : object(object_), n(object_.size()) {} inline STORAGE operator()( int i, int j ) const { return (i==j) ? object[i] : 0 ; } inline R_xlen_t size() const { return static_cast(n) * n; } inline int ncol() const { return n; } inline int nrow() const { return n; } private: const VEC_TYPE& object ; int n ; } ; template struct diag_result_type_trait{ typedef typename Rcpp::traits::if_< Rcpp::traits::matrix_interface::value, Diag_Extractor< T::r_type::value , T::can_have_na::value , T >, Diag_Maker< T::r_type::value , T::can_have_na::value , T > >::type type ; } ; } // sugar template inline typename sugar::diag_result_type_trait::type diag( const T& t ){ return typename sugar::diag_result_type_trait::type( t ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/matrix/lower_tri.h0000644000176200001440000000427713044374160021302 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // lower_tri.h: Rcpp R/C++ interface class library -- lower.tri // // Copyright (C) 2010 - 2017 Dirk Eddelbuettel and Romain Francois // Copyright (C) 2017 Dirk Eddelbuettel, Romain Francois, and Nathan Russell // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__lower_tri_h #define Rcpp__sugar__lower_tri_h namespace Rcpp { namespace sugar { template class LowerTri : public MatrixBase > { public: typedef Rcpp::MatrixBase MatBase; LowerTri(const T& lhs, bool diag) : nr(lhs.nrow()), nc(lhs.ncol()), getter(diag ? (&LowerTri::get_diag_true) : (&LowerTri::get_diag_false)) {} inline int operator()(int i, int j) const { return get(i, j); } inline R_xlen_t size() const { return static_cast(nr) * nc; } inline int nrow() const { return nr; } inline int ncol() const { return nc; } private: typedef bool (LowerTri::*Method)(int, int) const; int nr, nc; Method getter; inline bool get_diag_true(int i, int j) const { return i >= j; } inline bool get_diag_false(int i, int j) const { return i > j; } inline bool get(int i, int j) const { return (this->*getter)(i, j); } }; } // sugar template inline sugar::LowerTri lower_tri(const Rcpp::MatrixBase& lhs, bool diag = false) { return sugar::LowerTri(lhs, diag); } } // Rcpp #endif // Rcpp__sugar__lower_tri_h Rcpp/inst/include/Rcpp/sugar/matrix/tools.h0000644000176200001440000000236212754425121020426 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // matrix_functions.h: Rcpp R/C++ interface class library -- matrix sugar functions // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_SUGAR_MATRIX_TOOLS_H #define RCPP_SUGAR_MATRIX_TOOLS_H namespace Rcpp{ namespace internal{ inline int get_line( int index, int nr ){ return index % nr ; } inline int get_column( int index, int nr ){ int i = get_line( index, nr ); return (index-i) / nr ; } inline int get_column( int index, int nr, int i ){ return (index-i) / nr ; } } } #endif Rcpp/inst/include/Rcpp/sugar/matrix/col.h0000644000176200001440000000322412754425121020041 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // col.h: Rcpp R/C++ interface class library -- col // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__col_h #define Rcpp__sugar__col_h namespace Rcpp{ namespace sugar{ template class Col : public MatrixBase< INTSXP , false , Col > { public: typedef Rcpp::MatrixBase LHS_TYPE ; Col( const LHS_TYPE& lhs) : nr( lhs.ncol() ), nc( lhs.ncol() ) {} inline int operator()( int i, int j ) const { return j + 1 ; } inline R_xlen_t size() const { return static_cast(nr) * nc ; } inline int nrow() const { return nr; } inline int ncol() const { return nc; } private: int nr, nc ; } ; } // sugar template inline sugar::Col col( const Rcpp::MatrixBase& lhs){ return sugar::Col( lhs ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/matrix/outer.h0000644000176200001440000000567015014017044020422 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // outer.h: Rcpp R/C++ interface class library -- outer // // Copyright (C) 2010 - 2024 Dirk Eddelbuettel and Romain Francois // Copyright (C) 2025 Dirk Eddelbuettel, Romain Francois and Iñaki Ucar // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__outer_h #define Rcpp__sugar__outer_h namespace Rcpp{ namespace sugar{ template class Outer : public MatrixBase< Rcpp::traits::r_sexptype_traits< typename ::Rcpp::traits::result_of::type >::rtype , true , Outer > { public: typedef typename ::Rcpp::traits::result_of::type result_type ; const static int RESULT_R_TYPE = Rcpp::traits::r_sexptype_traits::rtype ; typedef Rcpp::VectorBase LHS_TYPE ; typedef Rcpp::VectorBase RHS_TYPE ; typedef Rcpp::internal::LazyVector LHS_LAZY ; typedef Rcpp::internal::LazyVector RHS_LAZY ; typedef typename Rcpp::traits::r_vector_element_converter::type converter_type ; typedef typename Rcpp::traits::storage_type::type STORAGE ; Outer( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_, Function fun_ ) : lhs(lhs_), rhs(rhs_), fun(fun_), nr(lhs_.size()), nc(rhs_.size()) {} inline STORAGE operator()( int i, int j ) const { return converter_type::get( fun( lhs[i], rhs[j] ) ); } inline R_xlen_t size() const { return static_cast(nr) * nc ; } inline int nrow() const { return nr; } inline int ncol() const { return nc; } private: LHS_LAZY lhs ; RHS_LAZY rhs ; Function fun ; int nr, nc ; } ; } // sugar template inline sugar::Outer outer( const Rcpp::VectorBase& lhs, const Rcpp::VectorBase& rhs, Function fun ){ return sugar::Outer( lhs, rhs, fun ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/matrix/upper_tri.h0000644000176200001440000000430313044374160021273 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // upper_tri.h: Rcpp R/C++ interface class library -- upper.tri // // Copyright (C) 2010 - 2017 Dirk Eddelbuettel and Romain Francois // Copyright (C) 2017 Dirk Eddelbuettel, Romain Francois, and Nathan Russell // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__upper_tri_h #define Rcpp__sugar__upper_tri_h namespace Rcpp { namespace sugar { template class UpperTri : public MatrixBase > { public: typedef Rcpp::MatrixBase MatBase; UpperTri(const T& lhs, bool diag) : nr(lhs.nrow()), nc(lhs.ncol()), getter(diag ? (&UpperTri::get_diag_true) : (&UpperTri::get_diag_false)) {} inline int operator()(int i, int j) const { return get(i, j); } inline R_xlen_t size() const { return static_cast(nr) * nc; } inline int nrow() const { return nr; } inline int ncol() const { return nc; } private: typedef bool (UpperTri::*Method)(int, int) const; int nr, nc; Method getter; inline bool get_diag_true(int i, int j) const { return i <= j; } inline bool get_diag_false(int i, int j) const { return i < j; } inline bool get(int i, int j) const { return (this->*getter)(i, j); } }; } // sugar template inline sugar::UpperTri upper_tri(const Rcpp::MatrixBase& lhs, bool diag = false) { return sugar::UpperTri(lhs, diag); } } // Rcpp #endif // Rcpp__sugar__upper_tri_h Rcpp/inst/include/Rcpp/sugar/matrix/as_vector.h0000644000176200001440000000421212754425121021247 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // as_vector.h: Rcpp R/C++ interface class library -- as_vector( sugar matrix expression ) // // Copyright (C) 2010 - 2014 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__matrix_as_vector_h #define Rcpp__sugar__matrix_as_vector_h namespace Rcpp{ namespace internal{ template inline Rcpp::Vector as_vector__impl( MatrixBase& t, Rcpp::traits::false_type ){ T& ref = t.get_ref() ; int nc = ref.ncol(), nr = ref.nrow() ; Vector out (static_cast(nr) * nc) ; R_xlen_t k =0; for( int col_index=0; col_index inline Rcpp::Vector as_vector__impl( MatrixBase& t, Rcpp::traits::true_type ){ Matrix& ref = t.get_ref() ; R_xlen_t size = static_cast(ref.ncol())*ref.nrow() ; typename Rcpp::Vector::const_iterator first(static_cast&>(ref).begin()) ; return Vector(first, first+size ); } } // internal template inline Rcpp::Vector as_vector( const MatrixBase& t ){ return internal::as_vector__impl( const_cast< MatrixBase& >(t), typename Rcpp::traits::same_type< T , Matrix >() ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/matrix/matrix_functions.h0000644000176200001440000000233013003757741022661 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // matrix_functions.h: Rcpp R/C++ interface class library -- matrix sugar functions // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_SUGAR_MATRIX_FUNCTIONS_H #define RCPP_SUGAR_MATRIX_FUNCTIONS_H #include #include #include #include #include #include #include #endif Rcpp/inst/include/Rcpp/sugar/matrix/row.h0000644000176200001440000000322412754425121020073 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // row.h: Rcpp R/C++ interface class library -- row // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__row_h #define Rcpp__sugar__row_h namespace Rcpp{ namespace sugar{ template class Row : public MatrixBase< INTSXP , false , Row > { public: typedef Rcpp::MatrixBase LHS_TYPE ; Row( const LHS_TYPE& lhs) : nr( lhs.nrow() ), nc( lhs.ncol() ) {} inline int operator()( int i, int j ) const { return i + 1 ; } inline R_xlen_t size() const { return static_cast(nr) * nc ; } inline int nrow() const { return nr; } inline int ncol() const { return nc; } private: int nr, nc ; } ; } // sugar template inline sugar::Row row( const Rcpp::MatrixBase& lhs){ return sugar::Row( lhs ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/nona/0000755000176200001440000000000012754425121016541 5ustar liggesusersRcpp/inst/include/Rcpp/sugar/nona/nona.h0000644000176200001440000000544312754425121017653 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 4 -*- // // nona.h: Rcpp R/C++ interface class library -- noNA handling // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_SUGAR_NONA_NONA_H #define RCPP_SUGAR_NONA_NONA_H namespace Rcpp{ namespace sugar { template class Nona : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase SUGAR_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; Nona( const SUGAR_TYPE& expr) : data(expr.get_ref()){} inline R_xlen_t size() const { return data.size() ; } inline STORAGE operator[](R_xlen_t i) const { return data[i] ; } private: const VECTOR& data ; } ; // specialization when the expression is actually a vector expression template class Nona< RTYPE,NA,Rcpp::Vector > : public Rcpp::VectorBase > > { public: typedef typename Rcpp::VectorBase > SUGAR_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; typedef typename Rcpp::Vector::const_iterator iterator ; Nona( const SUGAR_TYPE& expr) : data(expr.get_ref().begin()), n(expr.size()){} inline R_xlen_t size() const { return n ; } inline STORAGE operator[](R_xlen_t i) const { return data[i] ; } private: iterator data ; R_xlen_t n ; } ; template class NonaPrimitive { public: NonaPrimitive( T t) : x(t){} inline operator T(){ return x ; } private: T x ; } ; } template inline sugar::Nona noNA( const Rcpp::VectorBase& vec ){ return sugar::Nona( vec ) ; } inline sugar::NonaPrimitive noNA( double x ){ return sugar::NonaPrimitive( x ) ; } inline sugar::NonaPrimitive noNA( int x ){ return sugar::NonaPrimitive( x ) ; } } #endif Rcpp/inst/include/Rcpp/sugar/sets.h0000644000176200001440000000207015014017044016725 0ustar liggesusers// sets.h: Rcpp R/C++ interface class library -- // // Copyright (C) 2012 - 2025 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__sets_h #define Rcpp__sugar__sets_h namespace std { template<> struct hash { std::size_t operator()(const Rcpp::String& key) const { return pointer_hasher( key.get_sexp() ) ; } hash pointer_hasher ; }; } #endif Rcpp/inst/include/Rcpp/sugar/tools/0000755000176200001440000000000012754425121016746 5ustar liggesusersRcpp/inst/include/Rcpp/sugar/tools/iterator.h0000644000176200001440000001153312754425121020753 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // iterator.h: Rcpp R/C++ interface class library -- // // Copyright (C) 2012 - 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__tools_iterator_h #define Rcpp__sugar__tools_iterator_h namespace Rcpp { namespace sugar { /* generic sugar iterator type */ template class SugarIterator { public: typedef R_xlen_t difference_type ; typedef typename Rcpp::traits::storage_type< Rcpp::traits::r_sexptype_traits::rtype >::type STORAGE_TYPE ; typedef STORAGE_TYPE reference ; typedef STORAGE_TYPE* pointer ; typedef std::random_access_iterator_tag iterator_category ; typedef SugarIterator iterator ; SugarIterator( const T& ref_ ) :ref(ref_), index(0) {} SugarIterator( const T& ref_, R_xlen_t index_) : ref(ref_), index(index_) {} SugarIterator( const SugarIterator& other) : ref(other.ref), index(other.index){} inline iterator& operator++(){ index++; return *this ; } inline iterator operator++(int){ iterator orig(*this) ; ++(*this); return orig ; } inline iterator& operator--(){ index--; return *this ; } inline iterator operator--(int){ iterator orig(*this) ; --(*this); return orig ; } inline iterator operator+(difference_type n) const { return iterator( ref, index+n ) ; } inline iterator operator-(difference_type n) const { return iterator( ref, index-n ) ; } inline iterator& operator+=(difference_type n) { index += n ; return *this ; } inline iterator& operator-=(difference_type n) { index -= n; return *this ; } inline reference operator[](R_xlen_t i){ return ref[index+i] ; } inline reference operator*() { return ref[index] ; } inline pointer operator->(){ return &ref[index] ; } inline bool operator==( const iterator& y) const { return ( index == y.index ) ; } inline bool operator!=( const iterator& y) const { return ( index != y.index ) ; } inline bool operator<( const iterator& other ) const { return index < other.index ; } inline bool operator>( const iterator& other ) const { return index > other.index ; } inline bool operator<=( const iterator& other ) const { return index <= other.index ; } inline bool operator>=( const iterator& other ) const { return index >= other.index ; } inline difference_type operator-(const iterator& other) const { return index - other.index ; } private: const T& ref ; R_xlen_t index ; } ; template struct sugar_const_iterator_type { typedef SugarIterator type ; } ; template struct sugar_const_iterator_type< Rcpp::Vector >{ typedef typename Rcpp::Vector::const_iterator type ; } ; template <> struct sugar_const_iterator_type< CharacterVector >{ typedef SEXP* type ; } ; template struct is_sugar_vector : public Rcpp::traits::false_type{} ; template struct is_sugar_vector< Rcpp::Vector > : public Rcpp::traits::true_type{} ; template inline typename sugar_const_iterator_type::type get_const_begin__impl(const T& obj, Rcpp::traits::true_type ){ return obj.begin() ; } template inline typename sugar_const_iterator_type::type get_const_begin__impl(const T& obj, Rcpp::traits::false_type ){ typedef typename sugar_const_iterator_type::type const_iterator ; return const_iterator( obj ) ; } template inline typename sugar_const_iterator_type::type get_const_begin(const T& obj){ return get_const_begin__impl( obj, typename is_sugar_vector::type() ) ; } /* full specialization for character vectors */ template <> inline SEXP* get_const_begin(const CharacterVector& obj){ return get_string_ptr(obj) ; } template inline typename sugar_const_iterator_type::type get_const_end(const T& obj){ return get_const_begin(obj) + obj.size() ; } } } #endif Rcpp/inst/include/Rcpp/sugar/sugar.h0000644000176200001440000000222612754425121017102 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // sugar.h: Rcpp R/C++ interface class library -- main file for Rcpp::sugar // // Copyright (C) 2010 - 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_SUGAR_H #define RCPP_SUGAR_H #include #include #include #include #include #include #endif Rcpp/inst/include/Rcpp/sugar/undoRmath.h0000644000176200001440000000561113257744352017734 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // undoRmath.h: Rcpp R/C++ interface class library -- undo the macros set by Rmath.h // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_SUGAR_UNDORMATH_H #define RCPP_SUGAR_UNDORMATH_H // undo some of the mess of Rmath #undef sign #undef trunc #undef rround #undef prec #undef bessel_i #undef bessel_j #undef bessel_k #undef bessel_y #undef bessel_i_ex #undef bessel_j_ex #undef bessel_k_ex #undef bessel_y_ex #undef beta #undef choose #undef dbeta #undef dbinom #undef dcauchy #undef dchisq #undef dexp #undef df #undef dgamma #undef dgeom #undef dhyper #undef digamma #undef dlnorm #undef dlogis #undef dnbeta #undef dnbinom #undef dnchisq #undef dnf #undef dnorm4 #undef dnt #undef dpois #undef dpsifn #undef dsignrank #undef dt #undef dtukey #undef dunif #undef dweibull #undef dwilcox #undef fmax2 #undef fmin2 #undef fprec #undef fround #undef ftrunc #undef fsign #undef gammafn #undef imax2 #undef imin2 #undef lbeta #undef lchoose #undef lgammafn #undef lgammafn_sign #undef lgamma1p #undef log1pmx #undef logspace_add #undef logspace_sub #undef pbeta #undef pbeta_raw #undef pbinom #undef pcauchy #undef pchisq #undef pentagamma #undef pexp #undef pf #undef pgamma #undef pgeom #undef phyper #undef plnorm #undef plogis #undef pnbeta #undef pnbinom #undef pnchisq #undef pnf #undef pnorm5 #undef pnorm_both #undef pnt #undef ppois #undef psignrank #undef psigamma #undef pt #undef ptukey #undef punif /* #undef pythag */ #undef pweibull #undef pwilcox #undef qbeta #undef qbinom #undef qcauchy #undef qchisq #undef qchisq_appr #undef qexp #undef qf #undef qgamma #undef qgeom #undef qhyper #undef qlnorm #undef qlogis #undef qnbeta #undef qnbinom #undef qnchisq #undef qnf #undef qnorm5 #undef qnt #undef qpois #undef qsignrank #undef qt #undef qtukey #undef qunif #undef qweibull #undef qwilcox #undef rbeta #undef rbinom #undef rcauchy #undef rchisq #undef rexp #undef rf #undef rgamma #undef rgeom #undef rhyper #undef rlnorm #undef rlogis #undef rnbeta #undef rnbinom #undef rnchisq #undef rnf #undef rnorm #undef rnt #undef rpois #undef rsignrank #undef rt #undef rtukey #undef runif #undef rweibull #undef rwilcox #undef sign #undef tetragamma #undef trigamma #endif Rcpp/inst/include/Rcpp/Benchmark/0000755000176200001440000000000015014017044016350 5ustar liggesusersRcpp/inst/include/Rcpp/Benchmark/Timer.h0000644000176200001440000001041315014017044017600 0ustar liggesusers// Timer.h: Rcpp R/C++ interface class library -- Rcpp benchmark utility // // Copyright (C) 2012 - 2025 JJ Allaire, Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_BENCHMARH_TIMER_H #define RCPP_BENCHMARH_TIMER_H #include #include #include #ifndef R_NO_REMAP #define R_NO_REMAP #endif #include #if defined(_WIN32) #define WIN32_LEAN_AND_MEAN #include #elif defined(__APPLE__) #include #elif defined(linux) || defined(__linux) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__GLIBC__) || defined(__GNU__) || defined(__CYGWIN__) #include #elif defined(sun) || defined(__sun) || defined(_AIX) #include #else /* Unsupported OS */ #error "Rcpp::Timer not supported by your OS." #endif namespace Rcpp{ typedef uint64_t nanotime_t; #if defined(_WIN32) inline nanotime_t get_nanotime(void) { LARGE_INTEGER time_var, frequency; QueryPerformanceCounter(&time_var); QueryPerformanceFrequency(&frequency); /* Convert to nanoseconds */ return 1.0e9 * time_var.QuadPart / frequency.QuadPart; } #elif defined(__APPLE__) inline nanotime_t get_nanotime(void) { nanotime_t time; mach_timebase_info_data_t info; time = mach_absolute_time(); mach_timebase_info(&info); /* Convert to nanoseconds */ return time * (info.numer / info.denom); } #elif defined(linux) || defined(__linux) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__GLIBC__) || defined(__GNU__) || defined(__CYGWIN__) static const nanotime_t nanoseconds_in_second = static_cast(1000000000.0); inline nanotime_t get_nanotime(void) { struct timespec time_var; /* Possible other values we could have used are CLOCK_MONOTONIC, * which is takes longer to retrieve and CLOCK_PROCESS_CPUTIME_ID * which, if I understand it correctly, would require the R * process to be bound to one core. */ clock_gettime(CLOCK_REALTIME, &time_var); nanotime_t sec = time_var.tv_sec; nanotime_t nsec = time_var.tv_nsec; /* Combine both values to one nanoseconds value */ return (nanoseconds_in_second * sec) + nsec; } #elif defined(sun) || defined(__sun) || defined(_AIX) /* short an sweet! */ inline nanotime_t get_nanotime(void) { return gethrtime(); } #endif class Timer { public: Timer() : data(), start_time( get_nanotime() ){} Timer(nanotime_t start_time_) : data(), start_time(start_time_){} void step( const std::string& name){ data.push_back(std::make_pair(name, now())); } operator SEXP() const { size_t n = data.size(); NumericVector out(n); CharacterVector names(n); for (size_t i=0; i get_timers(int n){ return std::vector( n, Timer() ) ; } inline nanotime_t now() const { return get_nanotime() ; } inline nanotime_t origin() const { return start_time ; } private: typedef std::pair Step; typedef std::vector Steps; Steps data; const nanotime_t start_time; }; } #ifdef FALSE #undef FALSE #endif #endif Rcpp/inst/include/Rcpp/Rcpp0000644000176200001440000000151014270217201015302 0ustar liggesusers// Rcpp/Rcpp: R/C++ interface class library // // Copyright (C) 2008 - 2021 Dirk Eddelbuettel // Copyright (C) 2009 - 2021 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #include Rcpp/inst/include/Rcpp/protection/0000755000176200001440000000000013431016617016652 5ustar liggesusersRcpp/inst/include/Rcpp/protection/protection.h0000644000176200001440000000157312754425121021220 0ustar liggesusers// Copyright (C) 2013 Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp_protection_protection_H #define Rcpp_protection_protection_H #include #include #include #endif Rcpp/inst/include/Rcpp/protection/Armor.h0000644000176200001440000000264112754425121020107 0ustar liggesusers// Copyright (C) 2013 Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp_protection_Armor_H #define Rcpp_protection_Armor_H namespace Rcpp { template class Armor { public: Armor() : data(){ init(R_NilValue) ; } template Armor( U x ); inline operator SEXP() const { return data ; } template inline Armor& operator=( const U& x ) ; ~Armor(){ UNPROTECT(1) ; } private: void init(SEXP x){ PROTECT_WITH_INDEX( data = x, &index ) ; } SEXP data ; PROTECT_INDEX index ; // not defined on purpose Armor(const Armor&) ; Armor& operator=(const Armor&) ; } ; } #endif Rcpp/inst/include/Rcpp/protection/Shield.h0000644000176200001440000000271513347714463020252 0ustar liggesusers// Copyright (C) 2013 Romain Francois and Kevin Ushey // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__protection_Shield_h #define Rcpp__protection_Shield_h namespace Rcpp{ inline SEXP Rcpp_protect(SEXP x){ if( x != R_NilValue ) PROTECT(x) ; return x ; } inline void Rcpp_unprotect(int i){ // Prefer this function over UNPROTECT() in Rcpp so that all // balance checks errors by rchk are contained at one location (#892) UNPROTECT(i); } template class Shield{ public: Shield( SEXP t_) : t(Rcpp_protect(t_)){} ~Shield(){ if( t != R_NilValue ) Rcpp_unprotect(1) ; } operator SEXP() const { return t; } SEXP t ; private: Shield( const Shield& ) ; Shield& operator=( const Shield& ) ; } ; } #endif Rcpp/inst/include/Rcpp/protection/Shelter.h0000644000176200001440000000240213431016617020427 0ustar liggesusers// Copyright (C) 2013 Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp_protection_Shelter_H #define Rcpp_protection_Shelter_H namespace Rcpp { template class Shelter { public: Shelter() : nprotected(0) {} inline SEXP operator()(SEXP x) { if (x != R_NilValue) nprotected++; return Rcpp_protect(x); } ~Shelter(){ Rcpp_unprotect(nprotected); nprotected = 0; } private: int nprotected; // not defined on purpose Shelter(const Shelter&) ; Shelter& operator=(const Shelter&) ; }; } #endif Rcpp/inst/include/Rcpp/Nullable.h0000644000176200001440000000755012754425121016403 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // Nullable.h: Rcpp R/C++ interface class library -- SEXP container which can be NULL // // Copyright (C) 2015 Dirk Eddelbuettel and Daniel C. Dillon // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp_Nullable_h #define Rcpp_Nullable_h // We looked into the safe_bool_idiom [1] but found that more trouble than is // warranted here. We first and foremost want an operator SEXP() which got in // the way of redefining operator bool. // [1] http://www.artima.com/cppsource/safebool.html) namespace Rcpp { template class Nullable { public: /** * Empty no-argument constructor of a Nullable object * * Assigns (R's) NULL value, and sets validator to FALSE */ inline Nullable() : m_sexp(R_NilValue), m_set(false) {} /** * Template constructor of a Nullable object * * Assigns object, and set validator to TRUE */ inline Nullable(const T &t) : m_sexp(t), m_set(true) {} /** * Standard constructor of a Nullable object * * @param SEXP is stored */ inline Nullable(SEXP t) { m_sexp = t; m_set = true; } public: /** * Copy constructor for Nullable object * * @param SEXP is used to update internal copy */ inline Nullable &operator=(SEXP sexp) { m_sexp = sexp; m_set = true; return *this; } /** * operator SEXP() to return nullable object * * @throw 'not initialized' if object has not been set */ inline operator SEXP() const { checkIfSet(); return m_sexp; } /** * get() accessor for object * * @throw 'not initialized' if object has not been set */ inline SEXP get() const { checkIfSet(); return m_sexp; } /** * Boolean test for usability as a T */ inline bool isUsable() const { return m_set && !Rf_isNull(m_sexp); } /** * Boolean test for NULL * * @throw 'not initialized' if object has not been set */ inline bool isNull() const { checkIfSet(); return Rf_isNull(m_sexp); } /** * Boolean test for not NULL * * @throw 'not initialized' if object has not been set */ inline bool isNotNull() const { return ! isNull(); } /** * Test function to check if object has been initialized * */ inline bool isSet(void) const { return m_set; } /** * Returns m_sexp as a T */ inline T as() { return get(); } /** * Return a clone of m_sexp as a T */ inline T clone() const { return Rcpp::clone(get()); } private: SEXP m_sexp; bool m_set; inline void checkIfSet(void) const { if (!m_set) { throw ::Rcpp::exception("Not initialized"); } } }; } #endif Rcpp/inst/include/Rcpp/RNGScope.h0000644000176200001440000000244713306221065016260 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // RNGScope.h: Rcpp R/C++ interface class library -- // // Copyright (C) 2010 - 2016 Douglas Bates, Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__RNGScope_h #define Rcpp__RNGScope_h namespace Rcpp { class RNGScope{ public: RNGScope(){ internal::enterRNGScope(); } ~RNGScope(){ internal::exitRNGScope(); } }; class SuspendRNGSynchronizationScope { public: SuspendRNGSynchronizationScope() { internal::beginSuspendRNGSynchronization(); } ~SuspendRNGSynchronizationScope() { internal::endSuspendRNGSynchronization(); } }; } // namespace Rcpp #endif Rcpp/inst/include/Rcpp/unwindProtect.h0000644000176200001440000000460215014017044017476 0ustar liggesusers // unwind.h: Rcpp R/C++ interface class library -- Unwind Protect // // Copyright (C) 2018 - 2020 RStudio // Copyright (C) 2021 - 2025 RStudio, Dirk Eddelbuettel and Iñaki Ucar // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_UNWINDPROTECT_H #define RCPP_UNWINDPROTECT_H #include #include namespace Rcpp { namespace internal { struct UnwindData { std::jmp_buf jmpbuf; }; // First jump back to the protected context with a C longjmp because // `Rcpp_protected_eval()` is called from C and we can't safely throw // exceptions across C frames. inline void maybeJump(void* unwind_data, Rboolean jump) { if (jump) { UnwindData* data = static_cast(unwind_data); longjmp(data->jmpbuf, 1); } } inline SEXP unwindProtectUnwrap(void* data) { std::function* callback = (std::function*) data; return (*callback)(); } }} // namespace Rcpp::internal namespace Rcpp { inline SEXP unwindProtect(SEXP (*callback)(void* data), void* data) { internal::UnwindData unwind_data; Shield token(::R_MakeUnwindCont()); if (setjmp(unwind_data.jmpbuf)) { // Keep the token protected while unwinding because R code might run // in C++ destructors. Can't use PROTECT() for this because // UNPROTECT() might be called in a destructor, for instance if a // Shield is on the stack. ::R_PreserveObject(token); throw LongjumpException(token); } return ::R_UnwindProtect(callback, data, internal::maybeJump, &unwind_data, token); } inline SEXP unwindProtect(std::function callback) { return unwindProtect(&internal::unwindProtectUnwrap, &callback); } } // namespace Rcpp #endif Rcpp/inst/include/Rcpp/internal/0000755000176200001440000000000015014017044016272 5ustar liggesusersRcpp/inst/include/Rcpp/internal/wrap_end.h0000644000176200001440000000303112754425121020246 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // wrap_end.h: R/C++ interface class library // // Copyright (C) 2012 - 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp_internal_wrap_end_h #define Rcpp_internal_wrap_end_h namespace Rcpp{ template inline SEXP wrap(const T& object){ RCPP_DEBUG_1( "inline SEXP wrap<%s>(const T& object)", DEMANGLE(T) ) return internal::wrap_dispatch( object, typename ::Rcpp::traits::wrap_type_traits::wrap_category() ) ; } template inline SEXP module_wrap_dispatch( const T& obj, Rcpp::traits::normal_wrap_tag ){ return wrap( obj ) ; } template inline SEXP module_wrap_dispatch( const T& obj, Rcpp::traits::pointer_wrap_tag ) { return wrap( object< typename traits::un_pointer::type >( obj ) ) ; } } #endif Rcpp/inst/include/Rcpp/internal/r_coerce.h0000644000176200001440000002040014470465200020226 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- /* :tabSize=4:indentSize=4:noTabs=false:folding=explicit:collapseFolds=1: */ // // r_coerce.h: Rcpp R/C++ interface class library -- coercion // // Copyright (C) 2010 - 2013 Dirk Eddelbuettel, Romain Francois, and Kevin Ushey // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__internal__r_coerce__h #define Rcpp__internal__r_coerce__h namespace Rcpp{ namespace internal{ template typename ::Rcpp::traits::storage_type::type r_coerce( typename ::Rcpp::traits::storage_type::type from ) ; template <> inline int r_coerce(int from) { return from ; } template <> inline int r_coerce(int from) { return from ; } template <> inline double r_coerce(double from) { return from ; } template <> inline Rcomplex r_coerce(Rcomplex from) { return from ; } template <> inline Rbyte r_coerce(Rbyte from) { return from ; } // -> INTSXP template <> inline int r_coerce(int from){ return (from==NA_LOGICAL) ? NA_INTEGER : from ; } template <> inline int r_coerce(double from){ if (Rcpp_IsNA(from)) { return NA_INTEGER; } else if (from > INT_MAX || from <= INT_MIN ) { return NA_INTEGER; } return static_cast(from); } template <> inline int r_coerce(Rcomplex from){ return r_coerce(from.r) ; } template <> inline int r_coerce(Rbyte from){ return static_cast(from); } // -> REALSXP template <> inline double r_coerce(int from){ return from == NA_LOGICAL ? NA_REAL : static_cast(from) ; } template <> inline double r_coerce(int from){ return from == NA_INTEGER ? NA_REAL : static_cast(from) ; } template <> inline double r_coerce(Rcomplex from){ return from.r ; } template <> inline double r_coerce(Rbyte from){ return static_cast(from) ; } // -> LGLSXP template <> inline int r_coerce(double from){ return Rcpp_IsNA(from) ? NA_LOGICAL : (from!=0.0); } template <> inline int r_coerce(int from){ return ( from == NA_INTEGER ) ? NA_LOGICAL : (from!=0); } template <> inline int r_coerce(Rcomplex from){ if( Rcpp_IsNA(from.r) ) return NA_LOGICAL ; if( from.r == 0.0 || from.i == 0.0 ) return FALSE ; return TRUE ; } template <> inline int r_coerce(Rbyte from){ if( from != static_cast(0) ) return TRUE ; return FALSE ; } // -> RAWSXP template <> inline Rbyte r_coerce(int from){ return (from < 0 || from > 255) ? static_cast(0) : static_cast(from) ; } template <> inline Rbyte r_coerce(double from){ if( Rcpp_IsNA(from) ) return static_cast(0) ; return r_coerce(static_cast(from)) ; } template <> inline Rbyte r_coerce(Rcomplex from){ return r_coerce(from.r) ; } template <> inline Rbyte r_coerce(int from){ return static_cast(from == TRUE) ; } // -> CPLXSXP template <> inline Rcomplex r_coerce(double from){ Rcomplex c ; if( Rcpp_IsNA(from) ){ c.r = NA_REAL; c.i = NA_REAL; } else{ c.r = from ; c.i = 0.0 ; } return c ; } template <> inline Rcomplex r_coerce(int from){ Rcomplex c ; if( from == NA_INTEGER ){ c.r = NA_REAL; c.i = NA_REAL; } else{ c.r = static_cast(from) ; c.i = 0.0 ; } return c ; } template <> inline Rcomplex r_coerce(Rbyte from){ Rcomplex c ; c.r = static_cast(from); c.i = 0.0 ; return c ; } template <> inline Rcomplex r_coerce(int from){ Rcomplex c ; if( from == TRUE ){ c.r = 1.0 ; c.i = 0.0 ; } else if( from == FALSE ){ c.r = c.i = 0.0 ; } else { /* NA */ c.r = c.i = NA_REAL; } return c ; } // -> STRSXP template const char* coerce_to_string( typename ::Rcpp::traits::storage_type::type from ) ; inline const char* dropTrailing0(char *s, char cdec) { /* Note that 's' is modified */ char *p = s; for (p = s; *p; p++) { if(*p == cdec) { char *replace = p++; while ('0' <= *p && *p <= '9') if(*(p++) != '0') replace = p; if(replace != p) while((*(replace++) = *(p++))) ; break; } } return s; } inline int integer_width( int n ){ return n < 0 ? ( (int) ( ::log10( -n+0.5) + 2 ) ) : ( (int) ( ::log10( n+0.5) + 1 ) ) ; } template <> inline const char* coerce_to_string(Rcomplex x){ //int wr, dr, er, wi, di, ei; //Rf_formatComplex(&x, 1, &wr, &dr, &er, &wi, &di, &ei, 0); // we are no longer allowed to use this: // Rf_EncodeComplex(x, wr, dr, er, wi, di, ei, '.' ); // so approximate it poorly as static char tmp1[128], tmp2[128], tmp3[256]; //snprintf(tmp, 127, "%*.*f+%*.*fi", wr, dr, x.r, wi, di, x.i); //snprintf(tmp, 127, "%f+%fi", x.r, x.i); // FIXEM: barebones default formatting snprintf(tmp1, 127, "%f", x.r); snprintf(tmp2, 127, "%f", x.i); snprintf(tmp3, 255, "%s+%si", dropTrailing0(tmp1, '.'), dropTrailing0(tmp2, '.')); return tmp3; } template <> inline const char* coerce_to_string(double x){ //int w,d,e ; // cf src/main/format.c in R's sources: // The return values are // w : the required field width // d : use %w.df in fixed format, %#w.de in scientific format // e : use scientific format if != 0, value is number of exp digits - 1 // // nsmall specifies the minimum number of decimal digits in fixed format: // it is 0 except when called from do_format. //Rf_formatReal( &x, 1, &w, &d, &e, 0 ) ; // we are no longer allowed to use this: // char* tmp = const_cast( Rf_EncodeReal(x, w, d, e, '.') ); // so approximate it poorly as static char tmp[128]; snprintf(tmp, 127, "%f", x); if (strcmp( dropTrailing0(tmp, '.'), "-0") == 0) return "0"; else return dropTrailing0(tmp, '.'); } #define NB 1000 template <> inline const char* coerce_to_string(int from) { static char buffer[NB] ; snprintf(buffer, NB, "%*d", integer_width(from), from); return buffer ; } template <> inline const char* coerce_to_string(Rbyte from){ static char buff[3]; snprintf(buff, 3, "%02x", from); return buff; } template <> inline const char* coerce_to_string(int from){ return from == 0 ? "FALSE" : "TRUE" ; } #undef NB template <> inline SEXP r_coerce(SEXP from){ return from ; } template <> inline SEXP r_coerce(Rcomplex from) { return Rcpp::traits::is_na(from) ? NA_STRING : Rf_mkChar( coerce_to_string( from ) ) ; } template <> inline SEXP r_coerce(double from){ // handle some special values explicitly if (Rcpp_IsNaN(from)) return Rf_mkChar("NaN"); else if (from == R_PosInf) return Rf_mkChar("Inf"); else if (from == R_NegInf) return Rf_mkChar("-Inf"); else return Rcpp::traits::is_na(from) ? NA_STRING :Rf_mkChar( coerce_to_string( from ) ) ; } template <> inline SEXP r_coerce(int from){ return Rcpp::traits::is_na(from) ? NA_STRING :Rf_mkChar( coerce_to_string( from ) ) ; } template <> inline SEXP r_coerce(Rbyte from){ return Rf_mkChar( coerce_to_string(from)); } template <> inline SEXP r_coerce(int from){ return Rcpp::traits::is_na(from) ? NA_STRING :Rf_mkChar( coerce_to_string(from)); } template <> inline SEXP r_coerce(SEXP from){ return Rf_ScalarString( PRINTNAME(from) ) ; } } // internal } // Rcpp #endif Rcpp/inst/include/Rcpp/internal/GreedyVector.h0000644000176200001440000000547012754425121021062 0ustar liggesusers// Copyright (C) 2013 Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_INTERNAL_GREEDYVECTOR_H #define RCPP_INTERNAL_GREEDYVECTOR_H namespace Rcpp { template class GreedyVector { public: typedef typename std::vector::iterator iterator; typedef typename std::vector::const_iterator const_iterator; GreedyVector(SEXP vec) : v(0){ if (!Rf_isNumeric(vec) || Rf_isMatrix(vec) || Rf_isLogical(vec)) throw std::range_error("invalid numeric vector in constructor"); int len = Rf_length(vec); if (len == 0) throw std::range_error("null vector in constructor"); v.resize(len); for (int i = 0; i < len; i++) v[i] = T( static_cast(REAL(vec)[i])); } GreedyVector(int n) : v(n){} inline const T& operator()(int i) const{ return at(i) ; } inline T& operator()(int i){ return at(i) ; } inline const T& operator[](int i) const{ return at(i) ; } inline T& operator[](int i){ return at(i) ; } inline int size() const { return (int)v.size(); } inline iterator begin(){ return v.begin(); } inline iterator end(){ return v.end(); } inline const_iterator begin() const { return v.begin(); } inline const_iterator end() const { return v.end(); } inline operator SEXP() const { return wrap( v ) ; } protected: std::vector v; private: const T& at(int i) const{ if (i < 0 || i >= static_cast(v.size())) { std::ostringstream oss; oss << "subscript out of range: " << i; throw std::range_error(oss.str()); } return v[i]; } T& at(int i) { if (i < 0 || i >= static_cast(v.size())) { std::ostringstream oss; oss << "subscript out of range: " << i; throw std::range_error(oss.str()); } return v[i]; } } ; } #endif Rcpp/inst/include/Rcpp/internal/call.h0000644000176200001440000000403215014017044017355 0ustar liggesusers#ifndef RCPP_INTERNAL_CALL_H #define RCPP_INTERNAL_CALL_H #include #include namespace Rcpp { namespace internal { // Utility struct so that we can pass a pack of types between functions template struct type_pack {}; /** * This specialisation is for functions that return a value, whereas the below * is for void-returning functions. * * The "* = nullptr" default argument allows both templates to be well-defined * regardless of which one is used. */ template ::value>::type* = nullptr> SEXP call_impl(const F& fun, SEXP* args, type_pack, traits::index_sequence) { RESULT_TYPE res = fun((typename traits::input_parameter::type(args[Is]))...); return Rcpp::module_wrap(res); } template ::value>::type* = nullptr> SEXP call_impl(const F& fun, SEXP* args, type_pack, traits::index_sequence) { fun((typename traits::input_parameter::type(args[Is]))...); return R_NilValue; } } // namespace internal /** * Helper for calling a function with an array of SEXP arguments, * where each argument is converted to the appropriate type before being passed * to the function. A compile-time sequence is used to index the SEXP array. * * The function only needs the intended types of the result and arguments, * which allows the template to be used for function pointers, lambdas, and * `std::function` objects. */ template SEXP call(const F& fun, SEXP* args) { return internal::call_impl(fun, args, internal::type_pack{}, traits::make_index_sequence{}); } } // namespace Rcpp #endif Rcpp/inst/include/Rcpp/internal/Proxy_Iterator.h0000644000176200001440000000662014642252171021451 0ustar liggesusers // Proxy_Iterator.h: Rcpp R/C++ interface class library -- // // Copyright (C) 2010 - 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__internal__Proxy_Iterator__h #define Rcpp__internal__Proxy_Iterator__h namespace Rcpp{ namespace internal{ template class Proxy_Iterator { public: typedef PROXY& reference ; typedef PROXY* pointer ; typedef R_xlen_t difference_type ; typedef PROXY value_type; typedef std::random_access_iterator_tag iterator_category ; Proxy_Iterator( ): proxy(){} ; Proxy_Iterator( const Proxy_Iterator& other) : proxy( other.proxy){} Proxy_Iterator( const PROXY& proxy_ ) : proxy( proxy_ ){} ; Proxy_Iterator& operator=( const Proxy_Iterator& other ){ proxy.import( other.proxy ) ; return *this ; } inline Proxy_Iterator& operator++(){ proxy.move(1) ; return *this ; } inline Proxy_Iterator operator++(int){ Proxy_Iterator orig(*this) ; ++(*this) ; return orig ; } inline Proxy_Iterator& operator--(){ proxy.move(-1) ; return *this ; } inline Proxy_Iterator operator--(int){ Proxy_Iterator orig(*this) ; --(*this) ; return orig ; } inline Proxy_Iterator operator+(difference_type n) const { return Proxy_Iterator( PROXY(*proxy.parent, proxy.index + n) ) ; } inline Proxy_Iterator operator-(difference_type n) const { return Proxy_Iterator( PROXY(*proxy.parent, proxy.index - n) ) ; } inline Proxy_Iterator& operator+=(difference_type n) { proxy.move( n ) ; return *this ; } inline Proxy_Iterator& operator-=(difference_type n) { proxy.move( -n ) ; return *this ; } inline reference operator*() { return proxy ; } inline pointer operator->(){ return &proxy ; } inline bool operator==( const Proxy_Iterator& y) const { return ( this->proxy.index == y.proxy.index ) && ( this->proxy.parent == y.proxy.parent ); } inline bool operator!=( const Proxy_Iterator& y) const { return ( this->proxy.index != y.proxy.index ) || ( this->proxy.parent != y.proxy.parent ); } inline bool operator<( const Proxy_Iterator& other ) const { return proxy.index < other.proxy.index ; } inline bool operator>( const Proxy_Iterator& other ) const { return proxy.index > other.proxy.index ; } inline bool operator<=( const Proxy_Iterator& other ) const { return proxy.index <= other.proxy.index ; } inline bool operator>=( const Proxy_Iterator& other ) const { return proxy.index >= other.proxy.index ; } inline difference_type operator-(const Proxy_Iterator& other) const { return proxy.index - other.proxy.index ; } inline int index() const { return proxy.index ; } inline PROXY operator[](R_xlen_t i) const { return PROXY(*proxy.parent, proxy.index + i) ; } private: PROXY proxy ; } ; } } #endif Rcpp/inst/include/Rcpp/internal/Exporter.h0000644000176200001440000000745112754425121020271 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // exporter.h: Rcpp R/C++ interface class library -- identify if a class has a nested iterator typedef // // Copyright (C) 2010 - 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__internal__exporter__h #define Rcpp__internal__exporter__h namespace Rcpp{ namespace traits{ template class Exporter{ public: Exporter( SEXP x ) : t(x){} inline T get(){ return t ; } private: T t ; } ; template class RangeExporter { public: typedef typename T::value_type r_export_type ; RangeExporter( SEXP x ) : object(x){} ~RangeExporter(){} T get(){ T vec( ::Rf_length(object) ); ::Rcpp::internal::export_range( object, vec.begin() ) ; return vec ; } private: SEXP object ; } ; template class IndexingExporter { public: typedef value_type r_export_type ; IndexingExporter( SEXP x) : object(x){} ~IndexingExporter(){} T get(){ T result( ::Rf_length(object) ) ; ::Rcpp::internal::export_indexing( object, result ) ; return result ; } private: SEXP object ; } ; template class MatrixExporter { public: typedef value_type r_export_type ; MatrixExporter( SEXP x) : object(x){} ~MatrixExporter(){} T get() { Shield dims( ::Rf_getAttrib( object, R_DimSymbol ) ) ; if( Rf_isNull(dims) || ::Rf_length(dims) != 2 ){ throw ::Rcpp::not_a_matrix() ; } int* dims_ = INTEGER(dims) ; T result( dims_[0], dims_[1] ) ; ::Rcpp::internal::export_indexing( object, result ) ; return result ; } private: SEXP object ; } ; template < template class Container, typename T> struct container_exporter{ typedef RangeExporter< Container > > type ; } ; template < template class Container > struct container_exporter< Container, int > ; template < template class Container > struct container_exporter< Container, double > ; template class Exporter< std::vector > : public container_exporter< std::vector, T>::type { public: Exporter(SEXP x) : container_exporter< std::vector, T>::type(x){} }; template class Exporter< std::deque > : public container_exporter< std::deque, T>::type { public: Exporter(SEXP x) : container_exporter< std::deque, T>::type(x){} }; template class Exporter< std::list > : public container_exporter< std::list, T>::type { public: Exporter(SEXP x) : container_exporter< std::list, T>::type(x){} }; } // namespace traits } // namespace Rcpp #endif Rcpp/inst/include/Rcpp/internal/ListInitialization.h0000644000176200001440000000262412754425121022301 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- /* :tabSize=4:indentSize=4:noTabs=false:folding=explicit:collapseFolds=1: */ // // ListInitialization.h: Rcpp R/C++ interface class library -- // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__internal__ListInitialization__h #define Rcpp__internal__ListInitialization__h namespace Rcpp{ namespace internal{ template class ListInitialization { public: ListInitialization( iterator iter_ ) : iter(iter_) {} ; ListInitialization operator,( value_type x ){ *iter = x ; return ListInitialization( iter + 1 ); } private: iterator iter ; } ; } // internal } // Rcpp #endif Rcpp/inst/include/Rcpp/internal/na.h0000644000176200001440000000214513216733430017051 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- /* :tabSize=4:indentSize=4:noTabs=false:folding=explicit:collapseFolds=1: */ // // na.h: Rcpp R/C++ interface class library -- optimized na checking // // Copyright (C) 2012-2014 Dirk Eddelbuettel, Romain Francois and Kevin Ushey // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . namespace Rcpp { namespace internal { inline bool Rcpp_IsNA(double x) { return R_IsNA(x); } inline bool Rcpp_IsNaN(double x) { return R_IsNaN(x); } } } Rcpp/inst/include/Rcpp/internal/r_vector.h0000644000176200001440000001071714642252171020304 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- /* :tabSize=4:indentSize=4:noTabs=false:folding=explicit:collapseFolds=1: */ // // r_vector.h: Rcpp R/C++ interface class library -- information about R vectors // // Copyright (C) 2010 - 2017 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__internal__r_vector_h #define Rcpp__internal__r_vector_h namespace Rcpp{ namespace internal{ template typename Rcpp::traits::storage_type::type* r_vector_start(SEXP x) { typedef typename Rcpp::traits::storage_type::type* pointer; return reinterpret_cast(dataptr(x)); } // add specializations to avoid use of dataptr #define RCPP_VECTOR_START_IMPL(__RTYPE__, __ACCESSOR__) \ template <> \ inline typename Rcpp::traits::storage_type<__RTYPE__>::type* r_vector_start<__RTYPE__>(SEXP x) { \ return __ACCESSOR__(x); \ } RCPP_VECTOR_START_IMPL(LGLSXP, LOGICAL); RCPP_VECTOR_START_IMPL(INTSXP, INTEGER); RCPP_VECTOR_START_IMPL(RAWSXP, RAW); RCPP_VECTOR_START_IMPL(CPLXSXP, COMPLEX); RCPP_VECTOR_START_IMPL(REALSXP, REAL); #undef RCPP_VECTOR_START_IMPL /** * The value 0 statically casted to the appropriate type for * the given SEXP type */ template // #nocov start inline CTYPE get_zero() { return static_cast(0); } // #nocov end /** * Specialization for Rcomplex */ template<> inline Rcomplex get_zero(){ Rcomplex x; x.r = 0.0; x.i = 0.0; return x; } /** * Initializes a vector of the given SEXP type. The template fills the * vector with the value 0 of the appropriate type, for example * an INTSXP vector is initialized with (int)0, etc... */ template void r_init_vector(SEXP x) { // #nocov start typedef typename ::Rcpp::traits::storage_type::type CTYPE; CTYPE* start=r_vector_start(x); std::fill(start, start + Rf_xlength(x), get_zero()); } // #nocov end /** * Initializes a generic vector (VECSXP). Does nothing since * R already initializes all elements to NULL */ template<> inline void r_init_vector(SEXP /*x*/) {} /** * Initializes an expression vector (EXPRSXP). Does nothing since * R already initializes all elements to NULL */ template<> inline void r_init_vector(SEXP /*x*/) {} /** * Initializes a character vector (STRSXP). Does nothing since * R already initializes all elements to "" */ template<> inline void r_init_vector(SEXP /*x*/) {} /** * We do not allow List(RTYPE=VECSXP), RawVector(RTYPE=RAWSXP) * or ExpressionVector(RTYPE=EXPRSXP) to be sorted, so it is * desirable to issue a compiler error if user attempts to sort * these types of Vectors. * * We declare a template class without defining the generic * class body, but complete the definition in specialization * of qualified Vector types. Hence when using this class * on unqualified Vectors, the compiler will emit errors. */ template class Sort_is_not_allowed_for_this_type; /** * Specialization for CPLXSXP, INTSXP, LGLSXP, REALSXP, and STRSXP */ template<> class Sort_is_not_allowed_for_this_type { public: static void do_nothing() {} }; template<> class Sort_is_not_allowed_for_this_type { public: static void do_nothing() {} }; template<> class Sort_is_not_allowed_for_this_type { public: static void do_nothing() {} }; template<> class Sort_is_not_allowed_for_this_type { public: static void do_nothing() {} }; template<> class Sort_is_not_allowed_for_this_type { public: static void do_nothing() {} }; } // internal } // Rcpp #endif Rcpp/inst/include/Rcpp/internal/NAEquals.h0000644000176200001440000000233112754425121020122 0ustar liggesusers// NAEquals.h: Rcpp R/C++ interface class library -- for allowing NA == NA // // Copyright (C) 2014 Kevin Ushey // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__internal__NAEquals__h #define Rcpp__internal__NAEquals__h namespace Rcpp { namespace internal { template struct NAEquals { inline bool operator()(T left, T right) const { return left == right; } }; // TODO: check different kinds of NA, NaNs template <> struct NAEquals { inline bool operator()(double left, double right) const { return memcmp(&left, &right, sizeof(double)) == 0; } }; } } #endif Rcpp/inst/include/Rcpp/internal/SEXP_Iterator.h0000644000176200001440000000523314661247437021120 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- /* :tabSize=4:indentSize=4:noTabs=false:folding=explicit:collapseFolds=1: */ // // SEXP_Iterator.h: Rcpp R/C++ interface class library -- // // Copyright (C) 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__internal__SEXP_Iterator__h #define Rcpp__internal__SEXP_Iterator__h namespace Rcpp{ namespace internal{ template class SEXP_Iterator { public: typedef const SEXP& reference ; typedef const SEXP* pointer ; typedef int difference_type ; typedef SEXP value_type; typedef std::random_access_iterator_tag iterator_category ; SEXP_Iterator( ): ptr(){} ; SEXP_Iterator( const SEXP_Iterator& other) : ptr(other.ptr){} ; SEXP_Iterator( const VECTOR& vec ) : ptr( RCPP_VECTOR_PTR(vec) ){} ; SEXP_Iterator& operator=(const SEXP_Iterator& other){ ptr = other.ptr ; return *this ;} int operator-( const SEXP_Iterator& other){ return ptr - other.ptr ; } SEXP_Iterator operator+( int n){ return SEXP_Iterator(ptr+n); } SEXP_Iterator operator-( int n){ return SEXP_Iterator(ptr-n); } SEXP_Iterator& operator++(){ ptr++ ; return *this ; } SEXP_Iterator& operator--(){ ptr-- ; return *this ; } SEXP_Iterator& operator+=(int n){ ptr += n; return *this ; } SEXP_Iterator& operator-=(int n){ ptr -= n; return *this ; } bool operator<( const SEXP_Iterator& other ){ return ptr < other.ptr ; } bool operator>( const SEXP_Iterator& other ){ return ptr > other.ptr ; } bool operator<=( const SEXP_Iterator& other ){ return ptr <= other.ptr ; } bool operator>=( const SEXP_Iterator& other ){ return ptr >= other.ptr ; } reference operator*(){ return *ptr ; } reference operator[](int n){ return ptr[n] ; } bool operator==(const SEXP_Iterator& other) const { return ptr == other.ptr ;} bool operator!=(const SEXP_Iterator& other) const { return ptr != other.ptr ;} private: const SEXP* ptr ; SEXP_Iterator( const SEXP* ptr_) : ptr(ptr_){} } ; } } #endif Rcpp/inst/include/Rcpp/internal/export.h0000644000176200001440000001341114642252171017774 0ustar liggesusers // export.h: Rcpp R/C++ interface class library -- // // Copyright (C) 2010 - 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__internal__export__h #define Rcpp__internal__export__h namespace Rcpp{ namespace internal{ template std::wstring as_string_elt__impl( SEXP x, R_xlen_t i, Rcpp::traits::true_type ){ const char* y = char_get_string_elt( x, i ) ; return std::wstring(y, y+strlen(y) ) ; } template std::string as_string_elt__impl( SEXP x, R_xlen_t i, Rcpp::traits::false_type ){ return char_get_string_elt( x, i ) ; } template const std::basic_string< typename Rcpp::traits::char_type::type > as_string_elt( SEXP x, R_xlen_t i ){ return as_string_elt__impl( x, i, typename Rcpp::traits::is_wide_string::type() ) ; } /* iterating */ template void export_range__impl( SEXP x, InputIterator first, ::Rcpp::traits::false_type ) { const int RTYPE = ::Rcpp::traits::r_sexptype_traits::rtype ; typedef typename ::Rcpp::traits::storage_type::type STORAGE ; Shield y( ::Rcpp::r_cast(x) ) ; STORAGE* start = ::Rcpp::internal::r_vector_start(y) ; std::copy( start, start + ::Rf_xlength(y), first ) ; } template void export_range__impl( SEXP x, InputIterator first, ::Rcpp::traits::true_type ) { const int RTYPE = ::Rcpp::traits::r_sexptype_traits::rtype ; typedef typename ::Rcpp::traits::storage_type::type STORAGE ; Shield y( ::Rcpp::r_cast(x) ) ; STORAGE* start = ::Rcpp::internal::r_vector_start(y) ; std::transform( start, start + ::Rf_xlength(y) , first, caster ) ; } // implemented in meat template void export_range__dispatch( SEXP x, InputIterator first, ::Rcpp::traits::r_type_generic_tag ) ; template void export_range__dispatch( SEXP x, InputIterator first, ::Rcpp::traits::r_type_primitive_tag ) { export_range__impl( x, first, typename ::Rcpp::traits::r_sexptype_needscast() ); } template void export_range__dispatch( SEXP x, InputIterator first, ::Rcpp::traits::r_type_string_tag ) { if( ! ::Rf_isString( x) ) { const char* fmt = "Expecting a string vector: " "[type=%s; required=STRSXP]."; throw ::Rcpp::not_compatible(fmt, Rf_type2char(TYPEOF(x)) ); } R_xlen_t n = ::Rf_xlength(x) ; for( R_xlen_t i=0; i::value_type> ( x, i ) ; } } template void export_range( SEXP x, InputIterator first ) { export_range__dispatch::value_type>( x, first, typename ::Rcpp::traits::r_type_traits::value_type>::r_category() ); } /* indexing */ template void export_indexing__impl( SEXP x, T& res, ::Rcpp::traits::false_type ) { const int RTYPE = ::Rcpp::traits::r_sexptype_traits::rtype ; typedef typename ::Rcpp::traits::storage_type::type STORAGE ; Shield y( ::Rcpp::r_cast(x) ) ; STORAGE* start = ::Rcpp::internal::r_vector_start(y) ; R_xlen_t size = ::Rf_xlength(y) ; for( R_xlen_t i=0; i void export_indexing__impl( SEXP x, T& res, ::Rcpp::traits::true_type ) { const int RTYPE = ::Rcpp::traits::r_sexptype_traits::rtype ; typedef typename ::Rcpp::traits::storage_type::type STORAGE ; Shield y( ::Rcpp::r_cast(x) ); STORAGE* start = ::Rcpp::internal::r_vector_start(y) ; R_xlen_t size = ::Rf_xlength(y) ; for( R_xlen_t i=0; i(start[i]) ; } } template void export_indexing__dispatch( SEXP x, T& res, ::Rcpp::traits::r_type_primitive_tag ) { export_indexing__impl( x, res, typename ::Rcpp::traits::r_sexptype_needscast() ); } template void export_indexing__dispatch( SEXP x, T& res, ::Rcpp::traits::r_type_string_tag ) { if( ! ::Rf_isString( x) ) { const char* fmt = "Expecting a string vector: " "[type=%s; required=STRSXP]."; throw ::Rcpp::not_compatible(fmt, Rf_type2char(TYPEOF(x)) ); } R_xlen_t n = ::Rf_xlength(x) ; for( R_xlen_t i=0; i( x, i) ; } } template void export_indexing( SEXP x, T& res ) { export_indexing__dispatch( x, res, typename ::Rcpp::traits::r_type_traits::r_category() ); } } } #endif Rcpp/inst/include/Rcpp/internal/NAComparator.h0000644000176200001440000000665312754425121021012 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- /* :tabSize=4:indentSize=4:noTabs=false:folding=explicit:collapseFolds=1: */ // // NAComparator.h: Rcpp R/C++ interface class library -- comparator // // Copyright (C) 2012-2014 Dirk Eddelbuettel, Romain Francois and Kevin Ushey // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__internal__NAComparator__h #define Rcpp__internal__NAComparator__h namespace Rcpp { namespace internal { inline int StrCmp(SEXP x, SEXP y) { if (x == NA_STRING) return (y == NA_STRING ? 0 : 1); if (y == NA_STRING) return -1; if (x == y) return 0; // same string in cache return strcmp(char_nocheck(x), char_nocheck(y)); } template struct NAComparator { inline bool operator()(T left, T right) const { return left < right; } }; template <> struct NAComparator { inline bool operator()(int left, int right) const { if (left == NA_INTEGER) return false; if (right == NA_INTEGER) return true; return left < right; } }; template <> struct NAComparator { inline bool operator()(double left, double right) const { bool leftNaN = (left != left); bool rightNaN = (right != right); // this branch inspired by data.table: see // https://github.com/arunsrinivasan/datatable/commit/1a3e476d3f746e18261662f484d2afa84ac7a146#commitcomment-4885242 if (Rcpp_IsNaN(right) and Rcpp_IsNA(left)) return true; if (leftNaN != rightNaN) { return leftNaN < rightNaN; } else { return left < right; } } }; template <> struct NAComparator { inline bool operator()(Rcomplex left, Rcomplex right) const { // sort() in R says that complex numbers are first sorted by // the real parts, and then the imaginary parts. // When only one of the two numbers contains NA or NaN, move // it to the right hand side. // When both left and right contain NA or NaN, return true. bool leftNaN = (left.r != left.r) || (left.i != left.i); bool rightNaN = (right.r != right.r) || (right.i != right.i); if (!(leftNaN || rightNaN)) // if both are nice numbers { if (left.r == right.r) // if real parts are the same return left.i < right.i; else return left.r < right.r; } else return leftNaN <= rightNaN; } }; template <> struct NAComparator { inline bool operator()(SEXP left, SEXP right) const { return StrCmp(left, right) < 0; } }; template struct NAComparatorGreater { inline bool operator()(T left, T right) const { return NAComparator()(right, left); } }; } // internal } // Rcpp #endif // Rcpp__internal__NAComparator__h Rcpp/inst/include/Rcpp/internal/converter.h0000644000176200001440000000253612754425121020467 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // converter.h: Rcpp R/C++ interface class library -- // // Copyright (C) 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp_internal_converter_h #define Rcpp_internal_converter_h namespace Rcpp{ namespace internal{ class converter { public: converter( ) : x(R_NilValue){} ; converter( SEXP x_) : x(x_){} ; converter( const converter& other) : x(other.x){} converter& operator=( const converter& other){ x = other.x ; return *this ; } ~converter(){} template operator T(){ return ::Rcpp::as( x ) ; } private: SEXP x ; } ; } // namespace internal } // namespace Rcpp #endif Rcpp/inst/include/Rcpp/internal/wrap.h0000644000176200001440000011540715014017044017424 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- /* :tabSize=4:indentSize=4:noTabs=false:folding=explicit:collapseFolds=1: */ // // wrap.h: Rcpp R/C++ interface class library -- wrap implementations // // Copyright (C) 2010 - 2017 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp_internal_wrap_h #define Rcpp_internal_wrap_h #include // this is a private header, included in RcppCommon.h // don't include it directly namespace Rcpp { namespace RcppEigen { template SEXP eigen_wrap(const T& object); } template SEXP wrap(const T& object); template class CustomImporter; namespace internal { inline SEXP make_charsexp__impl__wstring(const wchar_t* data) { char* buffer = get_string_buffer(); wcstombs(buffer, data, MAXELTSIZE); return Rf_mkChar(buffer); } inline SEXP make_charsexp__impl__wstring(wchar_t data) { wchar_t x[2]; x[0] = data; x[1] = '\0'; char* buffer = get_string_buffer(); wcstombs(buffer, x, MAXELTSIZE); return Rf_mkChar(buffer); } inline SEXP make_charsexp__impl__wstring(const std::wstring& st) { return make_charsexp__impl__wstring(st.data()); } inline SEXP make_charsexp__impl__cstring(const char* data) { return Rf_mkChar(data); } inline SEXP make_charsexp__impl__cstring(char data) { char x[2]; x[0] = data; x[1] = '\0'; return Rf_mkChar(x); } inline SEXP make_charsexp__impl__cstring(const std::string& st) { return make_charsexp__impl__cstring(st.c_str()); } #if __cplusplus >= 201703L inline SEXP make_charsexp__impl__cstring(std::string_view st) { return Rf_mkCharLen(st.data(), st.size()); } #endif template inline SEXP make_charsexp__impl(const T& s, Rcpp::traits::true_type) { return make_charsexp__impl__wstring(s); } template inline SEXP make_charsexp__impl(const T& s, Rcpp::traits::false_type) { return make_charsexp__impl__cstring(s); } template inline SEXP make_charsexp(const T& s) { return make_charsexp__impl(s, typename Rcpp::traits::is_wide_string::type()); } template <> inline SEXP make_charsexp(const Rcpp::String&); template SEXP range_wrap(InputIterator first, InputIterator last); template SEXP rowmajor_wrap(InputIterator first, int nrow, int ncol); // {{{ range wrap // {{{ unnamed range wrap /** * Range based primitive wrap implementation. used when * - T is a primitive type, indicated by the r_type_traits * - T needs a static_cast to be of the type suitable to fit in the R vector * * This produces an unnamed vector of the appropriate type using the * std::transform algorithm */ template inline SEXP primitive_range_wrap__impl(InputIterator first, InputIterator last, ::Rcpp::traits::true_type) { size_t size = std::distance(first, last); const int RTYPE = ::Rcpp::traits::r_sexptype_traits::rtype; Shield x(Rf_allocVector(RTYPE, size)); std::transform(first, last, r_vector_start(x), caster< T, typename ::Rcpp::traits::storage_type::type >); return wrap_extra_steps(x); } template inline SEXP primitive_range_wrap__impl__nocast(InputIterator first, InputIterator last, std::random_access_iterator_tag) { size_t size = std::distance(first, last); const int RTYPE = ::Rcpp::traits::r_sexptype_traits::rtype; Shield x(Rf_allocVector(RTYPE, size)); typedef typename ::Rcpp::traits::storage_type::type STORAGE; R_xlen_t __trip_count = size >> 2; STORAGE* start = r_vector_start(x); R_xlen_t i = 0; for (; __trip_count > 0; --__trip_count) { start[i] = first[i]; i++; start[i] = first[i]; i++; start[i] = first[i]; i++; start[i] = first[i]; i++; } switch (size - i) { case 3: start[i] = first[i]; i++; // fallthrough case 2: start[i] = first[i]; i++; // fallthrough case 1: start[i] = first[i]; i++; // fallthrough case 0: default: {} } return wrap_extra_steps(x); } template inline SEXP primitive_range_wrap__impl__nocast(InputIterator first, InputIterator last, std::input_iterator_tag) { size_t size = std::distance(first, last); const int RTYPE = ::Rcpp::traits::r_sexptype_traits::rtype; Shield x(Rf_allocVector(RTYPE, size)); std::copy(first, last, r_vector_start(x)); return wrap_extra_steps(x); } /** * Range based primitive wrap implementation. used when : * - T is a primitive type * - T does not need a cast * * This produces an unnamed vector of the appropriate type using * the std::copy algorithm */ template inline SEXP primitive_range_wrap__impl(InputIterator first, InputIterator last, ::Rcpp::traits::false_type) { return primitive_range_wrap__impl__nocast(first, last, typename std::iterator_traits::iterator_category()); } /** * Range based wrap implementation that deals with iterator over * primitive types (int, double, etc ...) * * This produces an unnamed vector of the appropriate type */ template inline SEXP range_wrap_dispatch___impl(InputIterator first, InputIterator last, ::Rcpp::traits::r_type_primitive_tag) { return primitive_range_wrap__impl(first, last, typename ::Rcpp::traits::r_sexptype_needscast()); } /** * range based wrap implementation that deals with iterators over * some type U. each U object is itself wrapped * * This produces an unnamed generic vector (list) */ template inline SEXP range_wrap_dispatch___generic(InputIterator first, InputIterator last) { size_t size = std::distance(first, last); Shield x(Rf_allocVector(VECSXP, size)); size_t i =0; while(i < size) { SET_VECTOR_ELT(x, i, ::Rcpp::wrap(*first)); i++; ++first; } return x; } template inline SEXP range_wrap_dispatch___impl(InputIterator first, InputIterator last, ::Rcpp::traits::r_type_generic_tag) { return range_wrap_dispatch___generic(first, last); } // modules template inline SEXP range_wrap_dispatch___impl(InputIterator first, InputIterator last, ::Rcpp::traits::r_type_module_object_pointer_tag) { return range_wrap_dispatch___generic(first, last); } template inline SEXP range_wrap_dispatch___impl(InputIterator first, InputIterator last, ::Rcpp::traits::r_type_module_object_const_pointer_tag) { return range_wrap_dispatch___generic(first, last); } template inline SEXP range_wrap_dispatch___impl(InputIterator first, InputIterator last, ::Rcpp::traits::r_type_module_object_tag) { return range_wrap_dispatch___generic(first, last); } template inline SEXP range_wrap_dispatch___impl(InputIterator first, InputIterator last, ::Rcpp::traits::r_type_module_object_reference_tag) { return range_wrap_dispatch___generic(first, last); } template inline SEXP range_wrap_dispatch___impl(InputIterator first, InputIterator last, ::Rcpp::traits::r_type_module_object_const_reference_tag) { return range_wrap_dispatch___generic(first, last); } /** * Range based wrap implementation for iterators over std::string * * This produces an unnamed character vector */ template inline SEXP range_wrap_dispatch___impl(InputIterator first, InputIterator last, ::Rcpp::traits::r_type_string_tag) { size_t size = std::distance(first, last); Shield x(Rf_allocVector(STRSXP, size)); size_t i = 0; while(i < size) { SET_STRING_ELT(x, i, make_charsexp(*first)); i++; ++first; } return x; } // }}} // {{{ named range wrap /** * range based wrap implementation that deals with iterators over * pair where T is a primitive type : int, double ... * * This version is used when there is no need to cast T * * This produces a named R vector of the appropriate type */ template // #nocov start inline SEXP range_wrap_dispatch___impl__cast(InputIterator first, InputIterator last, ::Rcpp::traits::false_type) { size_t size = std::distance(first, last); const int RTYPE = ::Rcpp::traits::r_sexptype_traits::rtype; Shield x(Rf_allocVector(RTYPE, size)); Shield names(Rf_allocVector(STRSXP, size)); typedef typename ::Rcpp::traits::storage_type::type CTYPE; CTYPE* start = r_vector_start(x); size_t i =0; std::string buf; for (; i(x); // #nocov end } /** * range based wrap implementation that deals with iterators over * pair where T is a primitive type : int, double ... * * This version is used when T needs to be cast to the associated R * type * * This produces a named R vector of the appropriate type */ template inline SEXP range_wrap_dispatch___impl__cast(InputIterator first, InputIterator last, ::Rcpp::traits::true_type) { size_t size = std::distance(first, last); const int RTYPE = ::Rcpp::traits::r_sexptype_traits::rtype; Shield x(Rf_allocVector(RTYPE, size)); Shield names(Rf_allocVector(STRSXP, size)); typedef typename ::Rcpp::traits::storage_type::type CTYPE; CTYPE* start = r_vector_start(x); size_t i =0; std::string buf; for (; i(first->second); buf = first->first; SET_STRING_ELT(names, i, Rf_mkChar(buf.c_str())); } ::Rf_setAttrib(x, R_NamesSymbol, names); return wrap_extra_steps(x); } /** * range based wrap implementation that deals with iterators over * pair where T is a primitive type : int, double ... * * This dispatches further depending on whether the type needs * a cast to fit into the associated R type * * This produces a named R vector of the appropriate type */ template // #nocov start inline SEXP range_wrap_dispatch___impl(InputIterator first, InputIterator last, ::Rcpp::traits::r_type_pairstring_primitive_tag) { return range_wrap_dispatch___impl__cast(first, last, typename ::Rcpp::traits::r_sexptype_needscast()); } // #nocov end /** * Range based wrap implementation that deals with iterators over * pair where U is wrappable. This is the kind of * iterators that are produced by map * * This produces a named generic vector (named list). The first * element of the list contains the result of a call to wrap on the * object of type U, etc ... * * The names are taken from the keys */ template inline SEXP range_wrap_dispatch___impl(InputIterator first, InputIterator last, ::Rcpp::traits::r_type_pairstring_generic_tag) { size_t size = std::distance(first, last); Shield x(Rf_allocVector(VECSXP, size)); Shield names(Rf_allocVector(STRSXP, size)); size_t i =0; std::string buf; SEXP element = R_NilValue; while(i < size) { // #nocov start element = ::Rcpp::wrap(first->second); buf = first->first; SET_VECTOR_ELT(x, i, element); SET_STRING_ELT(names, i, Rf_mkChar(buf.c_str())); i++; ++first; } // #nocov end ::Rf_setAttrib(x, R_NamesSymbol, names); return x; } /** * Range based wrap for iterators over std::pair * * This is mainly used for wrapping map and friends * which happens to produce iterators over pair * * This produces a character vector containing copies of the * string iterated over. The names of the vector is set to the keys * of the pair */ template inline SEXP range_wrap_dispatch___impl(InputIterator first, InputIterator last, ::Rcpp::traits::r_type_pairstring_string_tag) { size_t size = std::distance(first, last); Shield x(Rf_allocVector(STRSXP, size)); Shield names(Rf_allocVector(STRSXP, size)); for (size_t i = 0; i < size; i++, ++first) { SET_STRING_ELT(x, i, make_charsexp(first->second)); SET_STRING_ELT(names, i, make_charsexp(first->first)); } ::Rf_setAttrib(x, R_NamesSymbol, names); return x; } /** * iterating over pair * where VALUE is some primitive type */ template inline SEXP range_wrap_dispatch___impl__pair(InputIterator first, InputIterator last, Rcpp::traits::true_type); /** * iterating over pair * where VALUE is a type that needs wrapping */ template inline SEXP range_wrap_dispatch___impl__pair(InputIterator first, InputIterator last, Rcpp::traits::false_type); /** * Range wrap dispatch for iterators over std::pair */ template inline SEXP range_wrap_dispatch___impl(InputIterator first, InputIterator last, ::Rcpp::traits::r_type_pair_tag) { typedef typename T::second_type VALUE; typedef typename T::first_type KEY; return range_wrap_dispatch___impl__pair::rtype >(first, last, typename Rcpp::traits::is_primitive::type()); } // }}} /** * Dispatcher for all range based wrap implementations * * This uses the Rcpp::traits::r_type_traits to perform further dispatch */ template inline SEXP range_wrap_dispatch(InputIterator first, InputIterator last) { #if RCPP_DEBUG_LEVEL > 0 typedef typename ::Rcpp::traits::r_type_traits::r_category categ; #endif RCPP_DEBUG_3("range_wrap_dispatch< InputIterator = \n%s , T = %s, categ = %s>\n", DEMANGLE(InputIterator), DEMANGLE(T), DEMANGLE(categ)); return range_wrap_dispatch___impl(first, last, typename ::Rcpp::traits::r_type_traits::r_category()); } // we use the iterator trait to make the dispatch /** * range based wrap. This uses the std::iterator_traits class * to perform further dispatch */ template inline SEXP range_wrap(InputIterator first, InputIterator last) { return range_wrap_dispatch::value_type>::type >(first, last); } // }}} // {{{ primitive wrap (wrapping a single primitive value) /** * wraps a single primitive value when there is no need for a cast */ template inline SEXP primitive_wrap__impl__cast(const T& object, ::Rcpp::traits::false_type) { const int RTYPE = ::Rcpp::traits::r_sexptype_traits::rtype; Shield x(Rf_allocVector(RTYPE, 1)); r_vector_start(x)[0] = object; return x; } /** * wraps a single primitive value when a cast is needed */ template inline SEXP primitive_wrap__impl__cast(const T& object, ::Rcpp::traits::true_type) { const int RTYPE = ::Rcpp::traits::r_sexptype_traits::rtype; typedef typename ::Rcpp::traits::storage_type::type STORAGE_TYPE; Shield x(Rf_allocVector(RTYPE, 1)); r_vector_start(x)[0] = caster(object); return x; } /** * primitive wrap for 'easy' primitive types: int, double, Rbyte, Rcomplex * * This produces a vector of length 1 of the appropriate type */ template inline SEXP primitive_wrap__impl(const T& object, ::Rcpp::traits::r_type_primitive_tag) { return primitive_wrap__impl__cast(object, typename ::Rcpp::traits::r_sexptype_needscast()); } /** * primitive wrap for types that can be converted implicitely to std::string or std::wstring * * This produces a character vector of length 1 containing the std::string or wstring */ template inline SEXP primitive_wrap__impl(const T& object, ::Rcpp::traits::r_type_string_tag) { Shield x(::Rf_allocVector(STRSXP, 1)); SET_STRING_ELT(x, 0, make_charsexp(object)); return x; } /** * called when T is a primitive type : int, bool, double, std::string, etc ... * This uses the Rcpp::traits::r_type_traits on the type T to perform * further dispatching and wrap the object into an vector of length 1 * of the appropriate SEXP type */ template inline SEXP primitive_wrap(const T& object) { return primitive_wrap__impl(object, typename ::Rcpp::traits::r_type_traits::r_category()); } // }}} // {{{ unknown /** * Called when the type T is known to be implicitely convertible to * SEXP. It uses the implicit conversion to SEXP to wrap the object * into a SEXP */ template inline SEXP wrap_dispatch_unknown(const T& object, ::Rcpp::traits::true_type) { RCPP_DEBUG_1("wrap_dispatch_unknown<%s>(., false )", DEMANGLE(T)) // here we know (or assume) that T is convertible to SEXP SEXP x = object; return x; } /** * This is the worst case : * - not a primitive * - not implicitely convertible tp SEXP * - not iterable * * so we just give up and attempt to use static_assert to generate * a compile time message if it is available, otherwise we use * implicit conversion to SEXP to bomb the compiler, which will give * quite a cryptic message */ template inline SEXP wrap_dispatch_unknown_iterable(const T& object, ::Rcpp::traits::false_type) { RCPP_DEBUG_1("wrap_dispatch_unknown_iterable<%s>(., false )", DEMANGLE(T)) // here we know that T is not convertible to SEXP static_assert(!sizeof(T), "cannot convert type to SEXP"); return R_NilValue; // -Wall } template inline SEXP wrap_dispatch_unknown_iterable__logical(const T& object, ::Rcpp::traits::true_type) { RCPP_DEBUG_1("wrap_dispatch_unknown_iterable__logical<%s>(., true )", DEMANGLE(T)) size_t size = object.size(); Shield x(Rf_allocVector(LGLSXP, size)); std::copy(object.begin(), object.end(), LOGICAL(x)); return x; } template inline SEXP wrap_range_sugar_expression(const T& object, Rcpp::traits::false_type) { RCPP_DEBUG_1("wrap_range_sugar_expression<%s>(., false )", DEMANGLE(T)) return range_wrap(object.begin(), object.end()); } template inline SEXP wrap_range_sugar_expression(const T& object, Rcpp::traits::true_type); template inline SEXP wrap_dispatch_unknown_iterable__logical(const T& object, ::Rcpp::traits::false_type) { RCPP_DEBUG_1("wrap_dispatch_unknown_iterable__logical<%s>(., false )", DEMANGLE(T)) return wrap_range_sugar_expression(object, typename Rcpp::traits::is_sugar_expression::type()); } template inline SEXP wrap_dispatch_unknown_iterable__matrix_interface(const T& object, ::Rcpp::traits::false_type) { RCPP_DEBUG_1("wrap_dispatch_unknown_iterable__matrix_interface<%s>(., false )", DEMANGLE(T)) return wrap_dispatch_unknown_iterable__logical(object, typename ::Rcpp::traits::expands_to_logical::type()); } template inline SEXP wrap_dispatch_matrix_logical(const T& object, ::Rcpp::traits::true_type) { int nr = object.nrow(), nc = object.ncol(); Shield res(Rf_allocVector(LGLSXP, nr * nc)); int k=0; int* p = LOGICAL(res); for (int j=0; j dim(Rf_allocVector(INTSXP, 2)); INTEGER(dim)[0] = nr; INTEGER(dim)[1] = nc; Rf_setAttrib(res, R_DimSymbol , dim); return res; } template inline SEXP wrap_dispatch_matrix_primitive(const T& object) { const int RTYPE = ::Rcpp::traits::r_sexptype_traits::rtype; int nr = object.nrow(), nc = object.ncol(); Shield res(Rf_allocVector(RTYPE, nr*nc)); int k=0; STORAGE* p = r_vector_start< RTYPE>(res); for (int j=0; j dim(Rf_allocVector(INTSXP, 2)); INTEGER(dim)[0] = nr; INTEGER(dim)[1] = nc; Rf_setAttrib(res, R_DimSymbol , dim); return res; } template inline SEXP wrap_dispatch_matrix_not_logical(const T& object, ::Rcpp::traits::r_type_primitive_tag) { return wrap_dispatch_matrix_primitive(object); } template inline SEXP wrap_dispatch_matrix_not_logical(const T& object, ::Rcpp::traits::r_type_string_tag) { int nr = object.nrow(), nc = object.ncol(); Shield res(Rf_allocVector(STRSXP, nr*nc)); int k=0; for (int j=0; j dim(Rf_allocVector(INTSXP, 2)); INTEGER(dim)[0] = nr; INTEGER(dim)[1] = nc; Rf_setAttrib(res, R_DimSymbol , dim); return res; } template inline SEXP wrap_dispatch_matrix_not_logical(const T& object, ::Rcpp::traits::r_type_generic_tag) { int nr = object.nrow(), nc = object.ncol(); Shield res(Rf_allocVector(VECSXP, nr*nc)); int k=0; for (int j=0; j dim(Rf_allocVector(INTSXP, 2)); INTEGER(dim)[0] = nr; INTEGER(dim)[1] = nc; Rf_setAttrib(res, R_DimSymbol , dim); return res; } template inline SEXP wrap_dispatch_matrix_logical(const T& object, ::Rcpp::traits::false_type) { return wrap_dispatch_matrix_not_logical(object, typename ::Rcpp::traits::r_type_traits::r_category()); } template inline SEXP wrap_dispatch_unknown_iterable__matrix_interface(const T& object, ::Rcpp::traits::true_type) { RCPP_DEBUG_1("wrap_dispatch_unknown_iterable__matrix_interface<%s>(., true )", DEMANGLE(T)) return wrap_dispatch_matrix_logical(object, typename ::Rcpp::traits::expands_to_logical::type()); } /** * Here we know for sure that type T has a T::iterator typedef * so we hope for the best and call the range based wrap with begin * and end * * This works fine for all stl containers and classes T that have : * - T::iterator * - T::iterator begin() * - T::iterator end() * * If someone knows a better way, please advise */ template inline SEXP wrap_dispatch_unknown_iterable(const T& object, ::Rcpp::traits::true_type) { RCPP_DEBUG_1("wrap_dispatch_unknown_iterable<%s>(., true )", DEMANGLE(T)) return wrap_dispatch_unknown_iterable__matrix_interface(object, typename ::Rcpp::traits::matrix_interface::type()); } template inline SEXP wrap_dispatch_importer__impl__prim(const T& object, ::Rcpp::traits::false_type) { int size = object.size(); const int RTYPE = ::Rcpp::traits::r_sexptype_traits::rtype; Shield x(Rf_allocVector(RTYPE, size)); typedef typename ::Rcpp::traits::storage_type::type CTYPE; CTYPE* start = r_vector_start(x); for (int i=0; i inline SEXP wrap_dispatch_importer__impl__prim(const T& object, ::Rcpp::traits::true_type) { int size = object.size(); const int RTYPE = ::Rcpp::traits::r_sexptype_traits::rtype; Shield x(Rf_allocVector(RTYPE, size)); typedef typename ::Rcpp::traits::storage_type::type CTYPE; CTYPE* start = r_vector_start(x); for (int i=0; i(object.get(i)); } return x; } template inline SEXP wrap_dispatch_importer__impl(const T& object, ::Rcpp::traits::r_type_primitive_tag) { return wrap_dispatch_importer__impl__prim(object, typename ::Rcpp::traits::r_sexptype_needscast()); } template inline SEXP wrap_dispatch_importer__impl(const T& object, ::Rcpp::traits::r_type_string_tag) { int size = object.size(); Shield x(Rf_allocVector(STRSXP, size)); for (int i=0; i inline SEXP wrap_dispatch_importer__impl(const T& object, ::Rcpp::traits::r_type_generic_tag) { int size = object.size(); Shield x(Rf_allocVector(VECSXP, size)); for (int i=0; i inline SEXP wrap_dispatch_importer(const T& object) { return wrap_dispatch_importer__impl(object, typename ::Rcpp::traits::r_type_traits::r_category()); } /** * Called when no implicit conversion to SEXP is possible and this is * not tagged as a primitive type, checks whether the type is * iterable */ template inline SEXP wrap_dispatch_unknown(const T& object, ::Rcpp::traits::false_type) { RCPP_DEBUG_1("wrap_dispatch_unknown<%s>(., false )", DEMANGLE(T)) return wrap_dispatch_unknown_iterable(object, typename ::Rcpp::traits::has_iterator::type()); } // }}} // {{{ wrap dispatch /** * wrapping a __single__ primitive type : int, double, std::string, size_t, * Rbyte, Rcomplex */ template inline SEXP wrap_dispatch(const T& object, ::Rcpp::traits::wrap_type_primitive_tag) { return primitive_wrap(object); } template inline SEXP wrap_dispatch(const T& object, ::Rcpp::traits::wrap_type_char_array) { return Rf_mkString(object); } template inline SEXP wrap_dispatch(const T& object, ::Rcpp::traits::wrap_type_module_object_pointer_tag) { return Rcpp::internal::make_new_object< typename T::object_type >(object.ptr); } template inline SEXP wrap_dispatch(const T& object, ::Rcpp::traits::wrap_type_module_object_tag) { return Rcpp::internal::make_new_object(new T(object)); } template inline SEXP wrap_dispatch(const T& object, ::Rcpp::traits::wrap_type_enum_tag) { return wrap((int)object); } template inline SEXP wrap_dispatch_eigen(const T& object, ::Rcpp::traits::false_type) { RCPP_DEBUG_1("wrap_dispatch_eigen<%s>(., false )", DEMANGLE(T)) return wrap_dispatch_unknown(object, typename ::Rcpp::traits::is_convertible::type()); } template inline SEXP wrap_dispatch_eigen(const T& object, ::Rcpp::traits::true_type) { RCPP_DEBUG_1("wrap_dispatch_eigen<%s>(., true )", DEMANGLE(T)) return ::Rcpp::RcppEigen::eigen_wrap(object); } /** * called when T is wrap_type_unknown_tag and is not an Importer class * The next step is to try implicit conversion to SEXP */ template inline SEXP wrap_dispatch_unknown_importable(const T& object, ::Rcpp::traits::false_type) { RCPP_DEBUG_1("wrap_dispatch_unknown_importable<%s>(., false )", DEMANGLE(T)) return wrap_dispatch_eigen(object, typename traits::is_eigen_base::type()); } /** * called when T is an Importer */ template inline SEXP wrap_dispatch_unknown_importable(const T& object, ::Rcpp::traits::true_type) { RCPP_DEBUG_1("wrap_dispatch_unknown_importable<%s>(., true )", DEMANGLE(T)) return wrap_dispatch_importer(object); } /** * This is called by wrap when the wrap_type_traits is wrap_type_unknown_tag * * This tries to identify if the object conforms to the Importer class */ template inline SEXP wrap_dispatch(const T& object, ::Rcpp::traits::wrap_type_unknown_tag) { RCPP_DEBUG_1("wrap_dispatch<%s>(., wrap_type_unknown_tag)", DEMANGLE(T)) return wrap_dispatch_unknown_importable(object, typename ::Rcpp::traits::is_importer::type()); } // }}} // {{{ wrap a container that is structured in row major order template inline SEXP rowmajor_wrap__dispatch(InputIterator first, int nrow, int ncol, ::Rcpp::traits::r_type_generic_tag) { Shield out(::Rf_allocVector(VECSXP, nrow * ncol)); int i=0, j=0; for (j=0; j dims(::Rf_allocVector(INTSXP, 2)); INTEGER(dims)[0] = nrow; INTEGER(dims)[1] = ncol; ::Rf_setAttrib(out, R_DimSymbol, dims); return out; } template inline SEXP rowmajor_wrap__dispatch(InputIterator first, int nrow, int ncol, ::Rcpp::traits::r_type_string_tag) { Shield out(::Rf_allocVector(STRSXP, nrow * ncol)); int i=0, j=0; for (j=0; j dims(::Rf_allocVector(INTSXP, 2)); INTEGER(dims)[0] = nrow; INTEGER(dims)[1] = ncol; ::Rf_setAttrib(out, R_DimSymbol, dims); return out; } template inline SEXP primitive_rowmajor_wrap__dispatch(InputIterator first, int nrow, int ncol, ::Rcpp::traits::false_type) { const int RTYPE = ::Rcpp::traits::r_sexptype_traits::rtype; Shield out(::Rf_allocVector(RTYPE, nrow * ncol)); value_type* ptr = r_vector_start(out); int i=0, j=0; for (j=0; j dims(::Rf_allocVector(INTSXP, 2)); INTEGER(dims)[0] = nrow; INTEGER(dims)[1] = ncol; ::Rf_setAttrib(out, R_DimSymbol, dims); return out; } template inline SEXP primitive_rowmajor_wrap__dispatch(InputIterator first, int nrow, int ncol, ::Rcpp::traits::true_type) { const int RTYPE = ::Rcpp::traits::r_sexptype_traits::rtype; typedef typename ::Rcpp::traits::storage_type::type STORAGE; Shield out(::Rf_allocVector(RTYPE, nrow * ncol)); STORAGE* ptr = r_vector_start(out); int i=0, j=0; for (j=0; j(*first); } } Shield dims(::Rf_allocVector(INTSXP, 2)); INTEGER(dims)[0] = nrow; INTEGER(dims)[1] = ncol; ::Rf_setAttrib(out, R_DimSymbol, dims); return out; } template inline SEXP rowmajor_wrap__dispatch(InputIterator first, int nrow, int ncol, ::Rcpp::traits::r_type_primitive_tag) { return primitive_rowmajor_wrap__dispatch(first, nrow, ncol, typename ::Rcpp::traits::r_sexptype_needscast()); } template inline SEXP rowmajor_wrap(InputIterator first, int nrow, int ncol) { typedef typename std::iterator_traits::value_type VALUE_TYPE; return rowmajor_wrap__dispatch(first, nrow, ncol, typename ::Rcpp::traits::r_type_traits::r_category()); } // }}} } // internal /** * wraps an object of type T in a SEXP * * This method depends on the Rcpp::traits::wrap_type_traits trait * class to dispatch to the appropriate internal implementation * method * */ template inline SEXP wrap(const T& object); template <> inline SEXP wrap(const Rcpp::String& object); template inline SEXP module_wrap_dispatch(const T& obj, Rcpp::traits::void_wrap_tag) { return R_NilValue; } // these are defined in wrap_end.h template inline SEXP module_wrap_dispatch(const T& obj, Rcpp::traits::pointer_wrap_tag); template inline SEXP module_wrap_dispatch(const T& obj, Rcpp::traits::normal_wrap_tag); template inline SEXP module_wrap(const T& obj) { return module_wrap_dispatch(obj, typename Rcpp::traits::module_wrap_traits::category()); } template <> inline SEXP module_wrap(const SEXP& obj) { return obj; } inline SEXP wrap(const char* const v) { if (v != NULL) return Rf_mkString(v); else return R_NilValue; // #nocov } /** * Range based version of wrap */ template inline SEXP wrap(InputIterator first, InputIterator last) { return internal::range_wrap(first, last); } } // Rcpp #endif Rcpp/inst/include/Rcpp/internal/caster.h0000644000176200001440000000374112754425121017740 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- /* :tabSize=4:indentSize=4:noTabs=false:folding=explicit:collapseFolds=1: */ // // caster.h: Rcpp R/C++ interface class library -- // // Copyright (C) 2010 - 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__internal__caster__h #define Rcpp__internal__caster__h namespace Rcpp{ namespace internal{ template TO caster(FROM from){ return static_cast(from) ; } template inline Rcomplex Rcomplex_caster( std::complex from ){ Rcomplex cx ; cx.r = (double)from.real() ; cx.i = (double)from.imag() ; return cx ; } template <> inline Rcomplex caster, Rcomplex>( std::complex from){ return Rcomplex_caster(from) ; } template<> inline Rcomplex caster, Rcomplex>( std::complex from){ return Rcomplex_caster(from) ; } template inline std::complex std_complex_caster( Rcomplex from ){ return std::complex( static_cast(from.r), static_cast(from.i) ) ; } template <> inline std::complex caster >( Rcomplex from){ return std_complex_caster(from); } template<> inline std::complex caster >( Rcomplex from){ return std_complex_caster(from) ; } } } #endif Rcpp/inst/include/Rcpp/StringTransformer.h0000644000176200001440000000301315014017044020315 0ustar liggesusers // clone.h: Rcpp R/C++ interface class library -- clone RObject's // // Copyright (C) 2010 - 2025 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__StringTransformer_h #define Rcpp__StringTransformer_h #include namespace Rcpp{ template class StringTransformer : public std::function { public: StringTransformer( const UnaryOperator& op_ ): op(op_), buffer(){} ~StringTransformer(){} const char* operator()(const char* input ) { buffer = input; std::transform( buffer.begin(), buffer.end(), buffer.begin(), op ); return buffer.c_str(); } private: const UnaryOperator& op; std::string buffer; }; template StringTransformer make_string_transformer( const UnaryOperator& fun){ return StringTransformer( fun ); } } #endif Rcpp/inst/include/Rcpp/routines.h0000644000176200001440000002345514070703457016523 0ustar liggesusers // routines.h: Rcpp R/C++ interface class library -- callable function setup // // Copyright (C) 2013 - 2014 Romain Francois // Copyright (C) 2015 - 2020 Romain Francois and Dirk Eddelbuettel // Copyright (C) 2021 Romain Francois, Dirk Eddelbuettel and Iñaki Ucar // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_ROUTINE_H #define RCPP_ROUTINE_H #include #if defined(COMPILING_RCPP) // the idea is that this file should be generated automatically by Rcpp::register namespace Rcpp{ const char* type2name(SEXP x); namespace internal{ unsigned long enterRNGScope(); unsigned long exitRNGScope(); unsigned long beginSuspendRNGSynchronization(); unsigned long endSuspendRNGSynchronization(); char* get_string_buffer(); SEXP get_Rcpp_namespace(); } double mktime00(struct tm &); struct tm * gmtime_(const time_t * const); void Rcpp_precious_init(); void Rcpp_precious_teardown(); SEXP Rcpp_precious_preserve(SEXP object); void Rcpp_precious_remove(SEXP token); Rostream& Rcpp_cout_get(); Rostream& Rcpp_cerr_get(); } SEXP rcpp_get_stack_trace(); SEXP rcpp_set_stack_trace(SEXP); std::string demangle(const std::string& name); const char* short_file_name(const char* ); int* get_cache(int n); SEXP stack_trace( const char *file = "", int line = -1); SEXP get_string_elt(SEXP s, R_xlen_t i); const char* char_get_string_elt(SEXP s, R_xlen_t i); void set_string_elt(SEXP s, R_xlen_t i, SEXP v); void char_set_string_elt(SEXP s, R_xlen_t i, const char* v); SEXP* get_string_ptr(SEXP s); SEXP get_vector_elt(SEXP v, R_xlen_t i); void set_vector_elt(SEXP v, R_xlen_t i, SEXP x); SEXP* get_vector_ptr(SEXP v); const char* char_nocheck(SEXP x); void* dataptr(SEXP x); Rcpp::Module* getCurrentScope(); void setCurrentScope( Rcpp::Module* mod ); SEXP reset_current_error(); int error_occured(); SEXP rcpp_get_current_error(); // void print(SEXP s); #else namespace Rcpp { #define GET_CALLABLE(__FUN__) (Fun) R_GetCCallable( "Rcpp", __FUN__ ) inline attribute_hidden const char* type2name(SEXP x){ typedef const char* (*Fun)(SEXP); static Fun fun = GET_CALLABLE("type2name"); return fun(x); } namespace internal{ inline attribute_hidden unsigned long enterRNGScope(){ typedef unsigned long (*Fun)(void); static Fun fun = GET_CALLABLE("enterRNGScope"); return fun(); } inline attribute_hidden unsigned long exitRNGScope(){ typedef unsigned long (*Fun)(void); static Fun fun = GET_CALLABLE("exitRNGScope"); return fun(); } inline attribute_hidden unsigned long beginSuspendRNGSynchronization(){ typedef unsigned long (*Fun)(void); static Fun fun = GET_CALLABLE("beginSuspendRNGSynchronization"); return fun(); } inline attribute_hidden unsigned long endSuspendRNGSynchronization(){ typedef unsigned long (*Fun)(void); static Fun fun = GET_CALLABLE("endSuspendRNGSynchronization"); return fun(); } inline attribute_hidden char* get_string_buffer(){ typedef char* (*Fun)(void); static Fun fun = GET_CALLABLE("get_string_buffer"); return fun(); } inline attribute_hidden SEXP get_Rcpp_namespace() { typedef SEXP (*Fun)(void); static Fun fun = GET_CALLABLE("get_Rcpp_namespace"); return fun(); } } inline attribute_hidden double mktime00(struct tm &tm){ typedef double (*Fun)(struct tm&); static Fun fun = GET_CALLABLE("mktime00"); return fun(tm); } inline attribute_hidden struct tm * gmtime_(const time_t * const x){ typedef struct tm* (*Fun)(const time_t* const); static Fun fun = GET_CALLABLE("gmtime_"); return fun(x); } inline attribute_hidden void Rcpp_precious_init() { typedef void (*Fun)(void); static Fun fun = GET_CALLABLE("Rcpp_precious_init"); fun(); } inline attribute_hidden void Rcpp_precious_teardown() { typedef void (*Fun)(void); static Fun fun = GET_CALLABLE("Rcpp_precious_teardown"); fun(); } inline attribute_hidden SEXP Rcpp_precious_preserve(SEXP object) { typedef SEXP (*Fun)(SEXP); static Fun fun = GET_CALLABLE("Rcpp_precious_preserve"); return fun(object); } inline attribute_hidden void Rcpp_precious_remove(SEXP token) { typedef void (*Fun)(SEXP); static Fun fun = GET_CALLABLE("Rcpp_precious_remove"); fun(token); } inline attribute_hidden Rostream& Rcpp_cout_get() { typedef Rostream& (*Fun)(); static Fun fun = GET_CALLABLE("Rcpp_cout_get"); return fun(); } inline attribute_hidden Rostream& Rcpp_cerr_get() { typedef Rostream& (*Fun)(); static Fun fun = GET_CALLABLE("Rcpp_cerr_get"); return fun(); } } // The 'attribute_hidden' used here is a simple precessor defined from // ${R_HOME}/include/R_ext/Visibility.h -- it is empty when not supported // by the compiler and otherwise '__attribute__ ((visibility ("hidden")))' inline attribute_hidden SEXP rcpp_get_stack_trace(){ typedef SEXP (*Fun)(void); static Fun fun = GET_CALLABLE("rcpp_get_stack_trace"); return fun(); } inline attribute_hidden SEXP rcpp_set_stack_trace(SEXP e){ typedef SEXP (*Fun)(SEXP); static Fun fun = GET_CALLABLE("rcpp_set_stack_trace"); return fun(e); } inline attribute_hidden std::string demangle( const std::string& name){ typedef std::string (*Fun)( const std::string& ); static Fun fun = GET_CALLABLE("demangle"); return fun(name); } inline attribute_hidden const char* short_file_name(const char* file) { typedef const char* (*Fun)(const char*); static Fun fun = GET_CALLABLE("short_file_name"); return fun(file); } inline attribute_hidden SEXP stack_trace( const char *file = "", int line = -1){ typedef SEXP (*Fun)(const char*, int); static Fun fun = GET_CALLABLE("stack_trace"); return fun(file, line); } inline attribute_hidden SEXP get_string_elt(SEXP s, R_xlen_t i){ typedef SEXP (*Fun)(SEXP, R_xlen_t); static Fun fun = GET_CALLABLE("get_string_elt"); return fun(s, i); } inline attribute_hidden const char* char_get_string_elt(SEXP s, R_xlen_t i){ typedef const char* (*Fun)(SEXP, R_xlen_t); static Fun fun = GET_CALLABLE("char_get_string_elt"); return fun(s, i); } inline attribute_hidden void set_string_elt(SEXP s, R_xlen_t i, SEXP v){ typedef void (*Fun)(SEXP, R_xlen_t, SEXP); static Fun fun = GET_CALLABLE("set_string_elt"); fun(s, i, v); } inline attribute_hidden void char_set_string_elt(SEXP s, R_xlen_t i, const char* v){ typedef void (*Fun)(SEXP, R_xlen_t, const char*); static Fun fun = GET_CALLABLE("char_set_string_elt"); fun(s, i, v ); } inline attribute_hidden SEXP* get_string_ptr(SEXP s){ typedef SEXP* (*Fun)(SEXP); static Fun fun = GET_CALLABLE("get_string_ptr"); return fun(s); } inline attribute_hidden SEXP get_vector_elt(SEXP v, R_xlen_t i){ typedef SEXP (*Fun)(SEXP, R_xlen_t); static Fun fun = GET_CALLABLE("get_vector_elt"); return fun(v, i); } inline attribute_hidden void set_vector_elt(SEXP v, R_xlen_t i, SEXP x){ typedef void (*Fun)(SEXP, R_xlen_t, SEXP); static Fun fun = GET_CALLABLE("set_vector_elt"); fun(v, i, x); } inline attribute_hidden SEXP* get_vector_ptr(SEXP v){ typedef SEXP* (*Fun)(SEXP); static Fun fun = GET_CALLABLE("get_vector_ptr"); return fun(v); } inline attribute_hidden const char* char_nocheck( SEXP x){ typedef const char* (*Fun)(SEXP); static Fun fun = GET_CALLABLE("char_nocheck"); return fun(x); } inline attribute_hidden void* dataptr(SEXP x){ typedef void* (*Fun)(SEXP); static Fun fun = GET_CALLABLE("dataptr"); return fun(x); } inline attribute_hidden Rcpp::Module* getCurrentScope(){ typedef Rcpp::Module* (*Fun)(void); static Fun fun = GET_CALLABLE("getCurrentScope"); return fun(); } inline attribute_hidden void setCurrentScope( Rcpp::Module* mod ){ typedef void (*Fun)(Rcpp::Module*); static Fun fun = GET_CALLABLE("setCurrentScope"); fun(mod); } inline attribute_hidden int* get_cache( int n ){ typedef int* (*Fun)(int); static Fun fun = GET_CALLABLE("get_cache"); return fun(n); } inline attribute_hidden SEXP reset_current_error(){ typedef SEXP (*Fun)(void); static Fun fun = GET_CALLABLE("reset_current_error"); return fun(); } inline attribute_hidden int error_occured(){ typedef int (*Fun)(void); static Fun fun = GET_CALLABLE("error_occured"); return fun(); } inline attribute_hidden SEXP rcpp_get_current_error(){ typedef SEXP (*Fun)(void); static Fun fun = GET_CALLABLE("rcpp_get_current_error"); return fun(); } // inline attribute_hidden void print(SEXP s) { // typedef void (*Fun)(SEXP); // static Fun fun = GET_CALLABLE("print"); // fun(s); // } #endif #endif Rcpp/inst/include/Rcpp/api/0000755000176200001440000000000012754425121015236 5ustar liggesusersRcpp/inst/include/Rcpp/api/meat/0000755000176200001440000000000014070703457016170 5ustar liggesusersRcpp/inst/include/Rcpp/api/meat/S4.h0000644000176200001440000000300412754425121016620 0ustar liggesusers// Copyright (C) 2013 Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp_api_meat_S4_h #define Rcpp_api_meat_S4_h namespace Rcpp{ template