File eh5_reader.h
- -Contents
--
-
-
-
- Definition (
-
- - contrib/ecalhdf5/include/ecalhdf5/eh5_reader.h - -
- ) - -
- - - - Includes - - -
- - - Namespaces - - -
- - - Classes - - -
From dc14f3ee5052d77fd9e76139653997677816a6a3 Mon Sep 17 00:00:00 2001
From: KerstinKeller Enum Documentation
+
diff --git a/_api/enum_ecal__log__level_8h_1a7ac86e3048a80a58673fdab06c1a2310.html b/_api/enum_ecal__log__level_8h_1a7ac86e3048a80a58673fdab06c1a2310.html
index c41616e696..5f7f7d2bbf 100644
--- a/_api/enum_ecal__log__level_8h_1a7ac86e3048a80a58673fdab06c1a2310.html
+++ b/_api/enum_ecal__log__level_8h_1a7ac86e3048a80a58673fdab06c1a2310.html
@@ -282,16 +282,6 @@
Namespace eCAL::Logging
Contents
Includes
Contents
Definition (
con
Includes#
-
ecal/measurement/base/measurement.h
eh5_types.h
(File eh5_types.h)functional
memory
Includesstring
-
- contrib/ecalhdf5/include/ecalhdf5/eh5_reader.h
-
-
- )
-
-
-
- contrib/ecalhdf5/include/ecalhdf5/eh5_writer.h
-
-
- )
-
- Hdf5 based Writer implementation.
-Contents
- -contrib/ecalhdf5/include/ecalhdf5/eh5_writer.h
)#ecal/measurement/base/writer.h
ecalhdf5/eh5_meas.h
(File eh5_meas.h)
functional
memory
set
string
↰ Return to documentation for file (contrib/ecalhdf5/include/ecalhdf5/eh5_reader.h
)
/* ========================= eCAL LICENSE =================================
- *
- * Copyright (C) 2016 - 2019 Continental Corporation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * ========================= eCAL LICENSE =================================
-*/
-
-#pragma once
-
-#include "eh5_meas.h"
-#include <ecal/measurement/base/reader.h>
-
-namespace eCAL
-{
- namespace eh5
- {
-
- class Reader : public measurement::base::Reader
- {
- public:
- Reader() = default;
-
- explicit Reader(const std::string& path) : measurement(path, eAccessType::RDONLY){};
-
- bool Open(const std::string& path) override {
- return measurement.Open(path, eAccessType::RDONLY);
- }
-
- bool Close() override { return measurement.Close(); }
-
- bool IsOk() const override { return measurement.IsOk(); }
-
- std::string GetFileVersion() const override { return measurement.GetFileVersion(); }
-
- std::set<std::string> GetChannelNames() const override { return measurement.GetChannelNames(); }
-
- bool HasChannel(const std::string& channel_name) const override { return measurement.HasChannel(channel_name); }
-
- std::string GetChannelDescription(const std::string& channel_name) const override { return measurement.GetChannelDescription(channel_name); }
-
- std::string GetChannelType(const std::string& channel_name) const override { return measurement.GetChannelType(channel_name); }
-
- long long GetMinTimestamp(const std::string& channel_name) const override { return measurement.GetMinTimestamp(channel_name); }
-
- long long GetMaxTimestamp(const std::string& channel_name) const override { return measurement.GetMaxTimestamp(channel_name); }
-
- bool GetEntriesInfo(const std::string& channel_name, EntryInfoSet& entries) const override { return measurement.GetEntriesInfo(channel_name, entries); }
-
- bool GetEntriesInfoRange(const std::string& channel_name, long long begin, long long end, EntryInfoSet& entries) const override { return measurement.GetEntriesInfoRange(channel_name, begin, end, entries); }
-
- bool GetEntryDataSize(long long entry_id, size_t& size) const override { return measurement.GetEntryDataSize(entry_id, size); }
-
- bool GetEntryData(long long entry_id, void* data) const override { return measurement.GetEntryData(entry_id, data); }
-
- private:
- HDF5Meas measurement;
-
- };
-
-
- } // namespace eh5
-} // namespace eCAL
-
↰ Return to documentation for file (contrib/ecalhdf5/include/ecalhdf5/eh5_writer.h
)
/* ========================= eCAL LICENSE =================================
- *
- * Copyright (C) 2016 - 2019 Continental Corporation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * ========================= eCAL LICENSE =================================
-*/
-
-#pragma once
-
-#include <functional>
-#include <set>
-#include <string>
-#include <memory>
-
-#include <ecal/measurement/base/writer.h>
-#include <ecalhdf5/eh5_meas.h>
-
-namespace eCAL
-{
- namespace eh5
- {
- class Writer : public measurement::base::Writer
- {
- public:
- Writer() = default;
-
- Writer(const std::string& path) : measurement(path, eAccessType::CREATE) {}
-
- bool Open(const std::string& path) override { return measurement.Open(path, eAccessType::CREATE); }
-
- bool Close() override { return measurement.Close(); }
-
- bool IsOk() const override { return measurement.IsOk(); }
-
- size_t GetMaxSizePerFile() const override { return measurement.GetMaxSizePerFile(); }
-
- void SetMaxSizePerFile(size_t size) override { return measurement.SetMaxSizePerFile(size); }
-
- bool IsOneFilePerChannelEnabled() const override { return measurement.IsOneFilePerChannelEnabled(); }
-
- void SetOneFilePerChannelEnabled(bool enabled) override { return measurement.SetOneFilePerChannelEnabled(enabled); }
-
- void SetChannelDescription(const std::string& channel_name, const std::string& description) override { return measurement.SetChannelDescription(channel_name, description); }
-
- void SetChannelType(const std::string& channel_name, const std::string& type) override { return measurement.SetChannelType(channel_name, type); }
-
- void SetFileBaseName(const std::string& base_name) override { return measurement.SetFileBaseName(base_name); }
-
- bool AddEntryToFile(const void* data, const unsigned long long& size, const long long& snd_timestamp, const long long& rcv_timestamp, const std::string& channel_name, long long id, long long clock) override
- {
- return measurement.AddEntryToFile(data, size, snd_timestamp, rcv_timestamp, channel_name, id, clock);
- }
-
- private:
- HDF5Meas measurement;
-
- };
-
- } // namespace eh5
-} // namespace eCAL
-
contrib/ecalhdf5/include/ecalhdf5/eh5_types.h
)ecal/core/include/ecal/msg/publisher.h
)!s$ zfjce<&B$7o5^7-^@xFP{c?M`E88n`IGkz#5>;s*)g0Za(+1X{PqBO}l4?rg(G?ymD z3u!KqWu2fp!|83lYb-m%vqTQ-#LId9hQm#bCM#A*`jijz@CD|BP{HBt?$zjK2qE&N(K=9rX@A*rRGye 36g1TO{8~I_mF#-9Da!rwR-oP;&bH zMVcl}YQ;(gh44+$QG>{**_PJ^q6a8qP3pRn=9y{_Rotg-2#=2+cCMkgs`TQC5?|$G zPU@4e%nF!dWX~$El{Fc$9fZxHx2f$s1P65mH;2C|J^uX7q(0&n0L*2Q3P}?Ex@&~e z@GF|b-*LoX4bU$v^F%miUlFkH`?zTW+& >M1f&X6}447{a~7ut_{OV!-i`#}EX+vRaAJ+>+| !IK)6+Typn4MN@t#3SbD}pT`*hs&0IM03nGLV?D*)_ z{53A$UmUVYaB|+XDMe(3Gh$f Xg{uf;K9GhpZa^Av%aLicA0#<~CX=1qz3c^6!kwGNgMCbef95=9=Z{Tc zdpFTSN#tm7WmzIyl!CX9F5V59noAY4f&R7ZdzMF|Y01 @HMh_G9z zIx+0lDldDOft(q%cHE3O8jQ66`o~Zf+jPa(FNh=k>x(AmQm4@ (|dWc z`fP5c{sQDV6$=Nn>=y(@k{UH0YGxwykzQC ~ VD#|<)6x|P YtJT9Z)%tR8n*f07+P+0#%rqQte7rj*pj?pTOT!DM z8E1ceP9&IbV)nq$o#z{C=(2l5+DS9#8)5qDRk;^=;-axGdZOvQozl4E+@;&mdyH$b zye}h}VetE{-D+f6Jwi&k%>5AWxs~{^AtmXhDAMz;`TMCAufzgZPqJq+Y6rH?eo9 z-83*g;Do2faj|}~rMsq;mSGExeZkS#m!eqc|8Ifegl^W0o>?jDoYI=Ha YcQsonoe3HX0k|99 F$6fHYP>Hn12N^cXm z>K&MDyiBw|#$R3d%vbSkR@+%@f+AK#WLFq^$<|izmj_4Hu)mA&jS_<9ZBiQiP4{w4 z_YyU^jMWH0YSt;LBBpmafazVLCZF* Ln*Lq7Av}W#BT~#Hre(!CEs?a~@iIekJiP*~FpRq|SONLbDNCyKyD)EPBtM z&ZDhzu=IH|b-nVi#+|=8waL=0Ja#R|bS+Vn)0hJv#9@_!C}O$; N+*#b_nyHq?eQ@!4cNE?0V6 L_i IXUR_Wvn$f8K+S`a#LN-97w!RW4{pgB2e+k=IW9 zx{qZTy$Xq=-P&ceoNKmxiPbV_bXjC AHR ziszkh%yiUP&LP<)m16VFp#}N)ruUg)Snne#+$D|3yW=X&{^5y`XzwKLq=+f4&snd= z_)@^;f-$o)%jOWM^!>eZW7u?irq1P}SF>!~p(~)n>!oFt-2QHZ*t#qn>!S1ia^l3| z!MIeMbFvct5I(W~mv5>Uux@or_tVz7hO@a_!nLVUy1Gg`(bjEhLO+|s#M9qcTc7UT z8{vW*S&(e9b$`8egG1M|{o?(46a2=k{t>Kybp9>_eR1N1_xA&jDCc4oa07o;IWM}r zyn`B*zwln{y=Yn2^U5sm*!%1a@c4kTG8&toyT;ti2(e{a@p%KPYtB#P! JbDo#c_>SDLC8aL%8-8-@o45b-D$eLR~z+O;BPf=>qd z@-FTuWHtph-i$PFp }>QbmvBbvBQx$ zQHZ9`KF=e)Gjl+#lZ%LrPJNH(ljG7OUO(WzPto=gbh}`y&dk*1-SGjExbt! -MsyxR$twS;=C3v za3U|T^g0_K1p`0YJc`jxIheEznYw}eS|V#4*Q{b*zAo V~>T-Zaq(KgYAQZlwG?mj>oQd>+si|q<+8yOnt+4+w=9h8Qn-% z`MlK?9`MS=)H}}v{f)G2^xddm8)#4-yMM0bEauTV-TPBAu-t5lXWy1l**N$lx4^ +AI*RR~~(VgOW8;!xCe$9!U zpea{Ra2aVHpOD9&z`}0FhjbP$#e-tvM9{571Uj|#?5;+3E*RIVs UX>KXb@vvH zb)^vtZ!Z&%+uLcX4L@(MlD<@@&6vWtj`>`y5TI8&5BN*H>e|^2S5EQZFjaCG_1E96 z0bc2mm2D4|DA$IDDT9UAeRVM9y-^KrEnu!KUtVqAx`mG}_OIF{{r|9ciaz0ebj*z2 z3a+Cvxuj|$Z}8bUTG+TflG`Rfx~6*9i?;tF?MyA#v?^}SW0LoXI+J{#-(EI5MY!<1 z0XsL$9`eZOGyGz0N|^-Tb+w}E@Or=93k2J4#Co~zYbNBC8be;~Y-bJX?Kx_H*y&{P z>v+k1w7XZ1z(!rStgkWQnp&2grR@#UHQnB^#-AOGeAwGPm3a=%(MZI0^)n=0Q#@$D zh0R_dzs~dzw%y-G1>nATyY)hL$ww2N9B-}jqDS2+Rc$^Eh6{Ll0y#iJR+a5B06Lj) z^zv}}FojX)x7$6>+*{&2DN~nxeWCd99(K`VJbwoVhDZ(UCaqeeqM|O=nOscXnt9dF z8+`leF4`D9K2d5HzhA?~`J>_i#q|xo@pmi~3BTg`O$jP^5(w!0lv!35Yi}8j4TYs! zj!n@qHD8BMsg*@aX|+V=lvHv63NsNWl7;11{saQE^aW`Qk;En>Wv%(>1Ue4&g1O_} zJ@iFbhHDPo;Swlj`N(`ZRw!F9n8#feXQl7P5sIB`>%bpQ`#Qy!h)fbkRVvG@ePJou z!(wVKHW`eir{jDMIGx |<*MDgK7u 87_tg6T4G{93W7C&%PNRE6`}U>K86)5cC1Wen65ufh5|rJ8^)|q{xdc#NzJ;N zC);8o#(~wb3~@5c5jS3WnHjQdexM3^1mJu*?Hws6xvWh0wj>Q s zwfVF93mYob5a39RlyJJ)eys1#;>sT?nO(sy87Mr`+KZ1A{t^Xpvpa0Zc(R6?92Nuo z>EQgk7(0A@M)EMUVQE{JbGgIE@-6A-8b~*f{jeHfV)DOh_Jy%HVx|2CgOZl4O^TZ8 zX7 Zk|xw@moCFqN)YMMF}x^8smhMgq}fHkaSLc5xa6XtY^_KZJCDNii6 z63efjPNvQv$NmYF7f8<%FQ4+NMUE!)s>*y)a2BOEw^W_Ej#oXo;#B>pZW;_%+cfx~ zgv3$8QCsPyT^DaO8ej;zrOIk6Ve~j)H(cq)V- m!#}^PP9F=v+r)@ z13`k@4bjsuhubg<3-tk{wf&NO@&}RHV=amn6kLvG0g`Yb#GRU837ce7DFc?3ziUX~ z!>dDAf8zErFMTFA!%;8J7zEL9xtDGB%7|6^$4_FEhAv7ZIx;c|F(eo}$@WW;3*x+C zxkZ&1JAnZO_J!-S@%2M;4p_gXe*4BZ_&QKJmckX8j2p9~56G!SvbI+vQRa{}kx$MF z$J^)fzxH0APVBKz>I|u?Px$RJQ^tJJ&WT9?xpJS8#v`MFYsQ4R(u^C=Sq8F|^=s6s zOTvnZE@E^qMzgct-e{ >1JiV!p zI UMw7UdV zOxhnfMgIqaK))?o^+TYl<@T^CN&C{Cs)`2FR%1bgAf1!O*`wJ<4hQq+&v9tQu-{)i zX<@$z&sCU=a%n~~HRFnSz8ZEhb7zJG6v^N`(LY*7f6OUT+8>VU=gCPyWPw|d>PlY? z+pJN~(KYjiruWdb9hN|v2;1C6YWW!K3n;6=6eJ& adb?)_D?6RUFGvWvcGW6 zBE@ncOjN&S;&Wl8crs70YU0tgzx(=G!7vWR<4aZHO9(WZ8M6vyENhX^P!k)~s^E(P z&WLcbAqH}cBd#FJ(5zjE^Xo?AQ2dH-n9L{v6AH}Ree+@BO+E+3|J*Sd>?gmJkfKqb zMW<6W&ZD&RhN+^NOypqDihXj!ue9L2v@FMQeY4AB@8v|z;60N?HI0N`q=4<(E5ehd zR;*J0c{m1K5RBlw)QEd|#v*P&{uBj3N0;qS@Ap&8iV=l;N-|EKx3xn8!Kt+Q7wQ7@ z@lP8p+I5%&8g@4=OQF6n0|INuCH9^Ae+8jdPs4>I+;+0U-Kbf6n;0kQsRn#y$=@Lg z6;bM`8b5P1I{41OsbcUmP qndsZP!qY3XzH^e26Zg?1+BiX-bia zek}z**3YFY2~#nhu}DV-k?$ALMV!S-c&$oyO>VB?{mVL%r=|f8Rf!?KCO~bj0@Cpt zk+pc?X)V89)@Ub`PK>Vk#*ab(OB3`n7ES`vT7K0A$NL*V|IB-YkGhyHCXt{k94u6v zKCdOz8E;7*PcGwEd|N37-Ej_&5$;sfC@#s*z-9%@P=Y}(ROmV;uN7ELrB>BX42N-z z+kxh#fVmaDFSCOup7ouI5R3vQ5*5i#7u7oY0(UQ)+R{$!24f?%f ftvhp3YYx#(u=J0892$SzOeVR(AAQ5| z-R@}iofrertQfFGw51gDExdS3;tD^38umwOKLOw9QOQ-&c*Y*t`9hR0w +m(!LhJg2eu|_W#%%u}DL(cge&3KDA4@qN3pLBc zB?44o|E*r5@$HllhZwr%ahOa~#dQUJ0~WOsBv(Kxh;O-9ITi`Qki57QyG2yhjocb1 zYkyRacs6x)_~2uUpuGH9<=C}iqD?W#Z-pCSDEz(#;^aOOm$8!e?@`&|_WTffCoVfM zDZ$|)y;b9lQZ0y4-u-vdNvkC4h=f>>4O0U3)e_6BHtd}k pi5tDIqtqV0PV6=YT9mQM;>Lj|vV$g8%64+){bSdEyZiCa5tRgvRY{{?iz`$;{X zC)IZ5MuBLfJ8b^_9c2zHRwungXKTiAmWyh5 PfTkH)c%w0 )PKU7ceeO46j$kDTgLe839(ho>==OPZitlI& zui@Bb>$kdPcSjQ}Fr1zk`S%;GLE;Icgw0Tj=Q50S;e6AK03^k>?25#Oec-#MnA${H zQyxY?mI+FYWsu6BcBrPw&)rXC87ubRHy*iOc-l3T=l0;(gy<8qYuO6TIZ`673ltdK zw4GtJJVbmk<|6BbJ nUA92gyL^7dsmuOlo={Q^QgwbXCfryP#kcHomKd z#wIh1VzM6g{cg(&Ems{0(jH7&(nA}zt2hKCZUaz8Y1EfVW?nYc!K#j4;1iF{XD$%Z z=}j16D*oi&plA06mKa5xxzz$ad26;rLgkH}-g&;fnZ#778HQod$@gInw|rYJk={a> zkRax%?ax}y6wMaJCFaeAs+U8W<3x2W)ClF38IN3=nP(G`H9GzD105qvsQPBtQ(d1H zw~Vwb0t&s=nVT==oWe8zauQ*yi5Ys#-_j9A+E_?7VaJj736lOSrq&~g!i(W=;6t|} zjd9&qQ*8#x#xl=ROB?h0%IRiNs^|YB6{O| ytzuG;PAMmMSdC7saiR1>A?hA(mi M; zpd7if2*dVOB}i6*# wIhI)atE`0@xi5sz^v1qkd%Bvb}c)ZVbeba?3jJn(*ZZzX3WTt2 --qv@gy?gSZJg1b8eNN{&2$N+;o!EJDNcXxLuFt}TQ zU?I2!4=y1)yx;!V{n^~Esw?N*r+Vl<70<&DN!6|e{ 7Ny%W5G4^fwP6v**{J&5A<)^2> 4j!0Cj~W2+05 z)DYiKzE=^C4>?FFePBVxWYw*g+-f&y#^T=WA#Ihh`m8=?D^hbHjrfmZgQPx5`|E+s z$SJQsnV_U*5f1{&M|Is`25jHZqR8{TNBL;s>aYz1`V{0wj% Yw-9i4+SZ#%l3a!fw)HXEXC zKC0X~9HFdte~C3JQ!V#!0Xh=TB*85YA!%4$@>2 oolTO1)jV ^D?Zz7le$})p!v@rd)WYaHB2MotA3(0LlHH-&t1fu z`HUU!M)wpWm6F2v7S>ube^%IrHcO&4PDR^b`1VYWgjQrH!TeDtwG0*2dp(@J_y_Wm z*&ttD-oFNaCU|d$Rb~TlA|vLkD&iPmEH>C>toTMFy2vKY^ISQ+-X%-ajE2C*GP;4K zl+$+DRGr#9Pwh_eRf2)JY)=-%)5l_G*|G|8m*A3HDN3oLq{A!5NE6|s>Zrc8yPa}8 zmr2AfP_r^~4anksQLnrzQ~$@h7JQbK<#q9nCP5TTrHWn8P>18sJX%yLm~Xf+Qpu#L zv?O(;E2}I)d%ellRoc9|-)kDwPE3iTjw`|>RLx4$+whgVgw%$>n#`lH=**OoDk_F_ z>PWoDK2Yh-*FBn9t0P5Z7G qwqw#$E`hD5!ZONqY4gV;{xl&i9$X=#j1y!k z2jfqSf~V;tkp45mbw%GDCx i;YU?K;m`LMV;!fv^xh9zB(MVVEg6g(P-nxq1s zeQf7$7{;|5JD)UjIh}TIp)^6M{y8bV`BCnr{)*2|&j<1qlyo?vB_&Uk)z*|d?O?xI zP(WFbB7C@o?}Oi2!>vB--u9Y<0Kg+&)JfsLQm$U$_p~K9N-_}6HVmJj^(Rxi{Fn=t zrbd+;>_Z;?nq=7=4OmLXm(tvvq!`im{LrKCRZipgt>c{-!4_>QCYBBp{N~?@YX`~! zX~~M_*kV}DazG2UBMb>TtvS{+h8`%gu(SEGT7ND-D}KWB3)O&F645#AGKS{N;|mSt z-ycU~M$ATAoh#AQvM5WCk1P|-$CgdtnL<60_eQp8Nr(&|zJpRyJq|x+`_n}TC|MZ= z7t}wL(wM
m2#P&UMG; z?e|KTlXwrMy(v2`2>#<+)#j`Ozg{nY4(|_l8~3h#^1s&1Yqu0|$lZGIK74ffdT(&Q z+4tfd+SK8KdU8-#lKodVx;|a^7keEGu5SB1?azx*ecxUot0VT8>$-L0tSY!`m(|}X z&A#_9Eh|>9?Y>4^j_j|yPi>oj!Mj)DQNy$G9{U&Z1jlXXE!}Hl;J)GM+*fw|^-ben zMvj3S?3nfI@r^J3T2CL+2#k$ &=-nt6(0UCdpxkP=~KmQ5F@M@h;@M+-B zazXQUyU=_d7!@`Y`P7 MmQs`O4vzGJ{35r+>e%%JpBsZ~wJUksp6|D5mRm zY78HqxH}$h*?acn#x!8Sm7E2J;Xpggr${rdHsvADue2YkIt2oYMK=7tdH4AEd-{Qn zYDnC5ySD1t(~MPg|Bl{%rx!h@`{^=&+_qrfSvKm0ez(yRjbS|Tljo LeqGOs)z^V_ug>?E z_q4IJuRmEosJ1`sYuI;}=}A*+v(!Hlw#>E&X&xmx>Mt0&7;U;fE}cKy3Z$2JhqDu~ zf57-^>Fj-Na13wm2@VvhU`b~eUN+bFb8$*kUKMrZh-cax*S|b|x^840#TpFNTk)ID z{X~4=U$ohd;-;z>cjU*+^*%gh`=qy7wm##NUDKZNp@wi#*Dqj HJ;b^{!HZkJIBFXeAb3>+=Hiku;j#HD)C$PKy-Tt3xhpq<@4BxzW z{koYY-mkyAX&x9xd3X<#?kbzFPuXYhwU4S**o{@c^>%K5{lO^GbhpxFsn^)YV&OMb z0ok9P^zk4u)_!4+_WIDMDJA@M2xS%?+Y26hm7a<}VoZ+eH!@X~iljZ3TC(H~wxnx* z#3n@%ePjl8LaB*4kZm`dc^bD&>^;~3#|^ki8= zrVmxGms%u)I!c(vZbO$^f48go!s@e#zdcQmLZzwrJt~eAn#l#8JP!I!tho*dxhxQg zn&n0m6C1-d8V#x3mCQ`{G6tWkkKJ{e&ucBJn%4&9R@hLw=}gMy#s=la*ibs@D9dFl z2IVT)P{6Hpg=MlwgK|e~D7|!r<+2%rav5wW&2%PZvMc|094Dvb&+XztH<|D+@tFL) zLNCw@51DY|c+5|{LIJMm(L_9aUW&MCGFWPUR5rm8Su{oQ6h+UHH;C9GazmtILpPBb z7*rNX5h6hmXSj_dlBa+~YW=cb93*F4;8hlx7WqCkzBN#jT%1*+f3RK4DCld)pj-zV zN;} #DB?G+8j0j04YnUV_D}jE{)i(vssm)IGL<1aEY4)G utx3Y=%j9mGVrc<-U3v-g{^jUNSFm#}9PZ*w!( zoGfe>GRd~ZpU6Rjfr?M@)EhFteC!0`<$gJboE-VYVT^Jf^T#=n_|-RV^U(Q?V6zop zaPpCkl=KM<7~b@Phr^mPF7d9MZt=Q*GuJKY 3zo>~;4X3@}5RM@YxT>k7gR>!R^PWO3S6S27$5&+wUo2rej$wAOl zFGdLE|c&CpBvHQ51dv^l|R+2Tkyo^@HT-l=6w z-MZnL+>Jloez@M`*=FXY+UCPvjzUh>z(~$`Nhh<) zc*rtQ7&|A YU3ZW0kPdm`#f#Nt?%_U)!X9e(HU21^) z&y0*RJjOv%JcmlO#LRCB=m_}tj4rIH;#Qfa?!(y(%{ycqzC0i+aD>czyQpvgv0;}J zvh8@J=~lX?_BihG@&qAt3?RPWQlCV$;R`UO75OmvOJWbM9Gg_k)lq=b6@!KILbtXS z(jU1*Hs1n%6fwTjjVhNQ86>+XB)ruJEOt@;7z+9r#u4279?g`^&hnu*zv17PdVXO9 z6h=sM6*ykQ 36Ip}PjK>QkUj{E6vOciQ{yuS z0oY`@#CSz> 5+Ck}CKki9_T?$>5YPjc3f0<`U#awEOe4Df+xKt4b(mhhtyf1P%;^_)C0mlYc zOG-i|H2#=uCiJeR6h%qn#s3%aXP&VVaRxPU73pM`tA%S6wK9Z{d=5T9T;Uj{GRfkC zXSX LZ`9T~*#YlXRLE>Q )QKDMCl+tVp=>pL5@s^Fgl_G^%UGJpY#p+jr zQ)oa jUZRD%0 Dl@xh MDcDZ6bi+KI3zT%`LcM6J1gwLl3F^MUOJPU zP`aRyT8~9a1Fbx7$4UMkX12PmHH$G}|pjg5rl}%mxpIh|m-#oK_=OT!o$>i)?Qm zCVK}QC{4ThGB@~4iC|l?D9%R`{921RssJqlQi}TSI7*4Ak|0c_VT**_RM|1rbq3pM zpwgcJf*IB2HnF=O1u=LvEtG5uxSg1PpooLkK)9}{Y)2m{Fq*W1R((yLa >S&F&N6Q zwA-kw+5$DRxuxZP`aGVSi {Y1Y)?g?EMb*QD zlI-flu?oa+K-Mg3aiqALi2n_58o~w;d-4g&%dp+$$)aB6gja}+#^?)J_l^GH3mzcY zsCT0}p(O>B=C10oyLWH&hmWt~LQKzlTniV1aEZZ_Q$}9Z)j0i2B*7n=l(}d;yK-^Ix&~ zA2B5V3B5$B1TMo{3qHKGA>D ZHmYNxmSwBGDhiQ?c zv$z6L9T0L{vN|?>csQEa`Z_PYDn>^JwLryLlK+SzGIR6L{UShLOQUd~q)5hGqe(8n zB7Bs*q^oI}p%sOdPfEZ^1tk##D+*a9E6P?@R97)k@sCnmzbUYMKByF!DhcMB9=ekI z(P2PEE0q;xR8QkFMA$nn7|WF@ooz~0`&r)(s;rU~mY eS=LfwT~XbZ84 zO|w@2vzbrczrEyOnM}oEC9ZL$a^ln$U#gl)Ome6uitJR&t@B*-?HpYufPfj67GVf_ z!08&kN=Cw%4sKQK|NP2I?T`Z{*Cw(uHMJqv7q+tuJQT#A6)JIx(aIa7 &IllX60`ltPFF` zv|g%Bq$Jcu9C%(uFZk*{yulNY4CGi~K~dwCjJ2k`LfM#zephavN^Z6wk!^}2RWbG@ z*nv{~THBgItyZ}EY#Zr?@W1lJCmO-CwO+=7s}2$rL&M!=Gc_xMU;m5sFd~Tu)Ewx- zO6d&u@uY>RHfmnzxIl@E@;_w|2BoBstFn;lRqE+wYuC3C!!*_=MXg~3yZRdH%2}kJ zu;mw=9Yo%WFdkBKDbBwU2b!*&U|vP#68L!;OnTEO(!xmBNe8lN0?s9Z9ihj{L_%dh z%s6bgiD7)8HI1rOQVXTuN}Y(cvlA22Qe;VFz^n>_Vk(*CG0=PX*Eh{j&CtV7AzLzG zz7a3~qo}qxc0wLLXOUGp1EIeHGNptNBT}#5d;2K4rEhwo-_y}Y*;< Q$+_2Gb2NM05Q;}$Cu5YzREhGvc9`w& z+lo*@+BY@~;T;#JX{Vq!RvCzQpd^*tcRfOUYoQqe!%Ikthl6Nx$41opgukfA2Iy bMTFi0Z&w)3& zyb96 ro(DiA|4dOD@P;;Zj8Ug5y@#QY1-C<_EKYFo&=@8VUM;{&qfq5|0s=xQMLw zDe=jmPN+Ath9MqSyS}qEN#3!%Sz!3J&?DIKHXX<~X&SK@wMo}gL6$r5T&95W`+ 2-|S+sTi7&;FIWRq|3kvxUQ8yF%^g>alDEtM|OZADWA^*;4Y^{%=Y$fVIe z)zt^+wYHkO5pemDgY4}`XiDYXlW`P47Fj { zeQomzC}Bv3m)v^z)B5tz(Efhi>uPFpM?JW41%?kIQ5a4Hj9CVcU?O_3B{Xr_LeAoh zJgy4*={!G|M=;}})DXRQr<>(amd&vlt{n?2Wg`bbw*(rwvk>~a7 K7G1WoIc{PxpIfuj5gt7GTimd@_&Qkk4$Qk=DpIW&$k#DxkAx=j~Ie) ze+>u2e%#{(cjwlUyDM1@_Wr1`nDNBs1F$#UiaTu(y9bSoHe`f)_S$!y>F% *Tvt1~gRL zoKSw)9M*88of^19QfWpG%AA{-&-Xrm1pdBRgAg7HH=Tq9Y|&S+MANBC_Ed{jaNU;P z#vzdV1+$fHtuk5Hs?9BO-o%D3YH7|7{ kJI&bl+bDi{udcLIjsGIngqX0q_Qop2&lZ^ZE6o5hEZ0;;OJq&x!Jm$}>=zfE5< zSd@ak)#^UTH!chY1`r>rCXI53ZOJU+R5{@Xo9i+tZY-p^y+?xm4G6CW+j7j*eJBd; zN2VsyBtzm8UZm3d+MnnYp($0fa8o3bs`PocB#1pD1dl`WfT6zzmsncGFqwD%OYsR1 z{`+PSeNytYC>}e}O$J13qanSIw@WL?FweDOu5y*ZKB#TF*$w|m7`Lx=VM$r8+EcCu zkWaSaXdoEq;B2Az;8=SO9x)Y3Ue;k3&bz(>z98n{@W|mGd~02p7Cazys{sbnFsE+M z)d%JWg%O^c{2Mt+BUY5 71B4*ppBq6v7j(dy1W}1 @)J_YHd6q{}3R*W$TM3-{d2EMdQ^An%p{D6r8YhRu@^(y;VxGHMx z(#^6f+*@ECJo|F`#329n3i7C$7w5t=0OL8cQlN5>_1f$5UPzS?M!qvO7;m%D5i}#+ z3p~trBFR r@s%4k+l*Q9g0H#@hKq*RZwLo7%0B|9#`uZ)NZ zJkaHYl_o_8EX_uM#Y+eSGYNn^+WO)iNDhQ5l$@992=301aDQn4)i?vb!REq%v=PQ6 z@SfNNUbhgZJtc*k5IcgVcmRS_!MIic!P*k$Mlwtvb#jEh=xldSr5+Om_uW7SV>%UO z8*N0oMO501hiA!KTI9_?Pl^rw7RAyzmH>Wh^ao~r6mY|z{-WPd7s gN7^F z8h$BS5KT=1lajd<8n|p|2x|46NB;14O3LnVq?N_8FgxNsI3-Dh1}EyaAE<1{>>DdV zc0Y1t5fgr4y-{WSa$%pO8nC*y{KA+s_;P`Nt(i7yU*LroVlMYFOlB*Zd5yUiL7FyZ z3;2Dh5RB%K70m_2`g%lT0!&?E*6PHWBiVX2|Jfv1isq1nrlVR16Q)<@_O6?N`lb?y z`;b{B$tcvR>Xd8%&)spxWJ8uYsl7r40cgOEV%^Yvgj&8ET%v2>FIi_3>grHQ*bo)7 zOl+ZQuoJ*KWGRd^3 +8>5^>rw@OxSz%{vImyqPQGp+VVuuy{tA=h3?zNHWafYWz;9 z*#1i6rOIr84H^QCpb*Y=$QZm)`aGX5oHBtxEdJTR=94&dtw!KTIw{0*pN>ly%r>ic zy9IJS>9Nm@JcZ7 #%0K6p9YlsX@=fcLky% z=G-p>G4S(!M&F@2Bq;z1S)>aF@q%FJ>Gh10ID{B7x$bif7@&iIse`K9p#2fKJXe6! zHZ0qdo^X~C8~g?jfz{oT3)nI03Soj<(}`HqZR!!ZUg*Y!a;vPfq+ssFMBu`#c5wQ6 zSQ{pl?a;vI1Py_I8sQ~`&?P}g=rmh=NRZp$6E`7aYx}R#ExJz0qeOXEa S=nTA^ZV=uz5sC?jJeYr7y+|9dc~r;NW}!tw7&$WKryF zk9cqW$VmXM)0^XRY=T0^2tA6yFo;q^!Ff#C=!SSBH)mw=Z!v9&2woC<4iL`4(mxmk z-jk(TY>jsQFQ_97)BVbzzj>ORK%0jUu>xvome{IvG#LKzQjUv$oUg6FbHw3Eu+2=n z$8ZV)GQt1V@c`D$I|XP7>iIN-pjrePj>NIUsB2f!fYzQP0(~%Bz%y)y#DkaiW{~v; z5$Nt34+9{D3=eYHnDZ3^JK)#~ ?Tn_U8T9s((_qI5FL zoW_396Xpq3cz3?eVohHl!zQ;wj*8zLR)> O8-(UuJtrQ|{ VXLI;U}f69htI>eotBe)iEg;ltTYJjO;exQ>odaC3dE) z_%-`dS-?%`<+WWxRL%)li;UxKgFbay6>hR1f9Vd9*}BW7%g^NFs5(sOPp&MD$l;*- zaD!NhIy!wJ_su3$W;sBrb$CFa2pk(6l_)QzaW@rI`uP(sf6t9tAi{nv!U-cGyLruo z?&UnyAxi^vbzE3)k$mO{SK{Bn!;ChO3Mn}<*2DZtn+myPi(N4aWZFTM$nHD>X7iqf z=-0n^9s>^DY2!EaDtO5G4THlEB=4w>2Ojv9zBSc|YoZgp;JCu55ybe_fpK(o^zw7Q z|9#m5|7089PU3aYxu;4=ki^asoK3AF`Ynw$ Y{rD2*N(uoqba#sNTU#fdXfoY9B<1C=k2GVR}4&frjEazQw9At}8aTH|s z3Yc1bL^2eNalk1qVni<=0{0W%*O^j}oJ{UqC}Y(-c?h8)fzx?~%#@I^i_!LD_-p+r zgC?6E1QZbBRTdvDu&13YdKPF&W}C6ZN2%O22Lel3l@a?l`$%5Vrx5kmP_1=aCw$1c zk=PqP$HsVPY>J4KN-h*}kXYfBm7pvkvbqjqqj#x}goOFFh8oWnf~8Ez7xbqcCI;#F zG5+EXvW695!ZZf~hw)4MAMH>Oe#Y_6zzR{5^KM?FB1R(BQ*4_E%7!wCx-}Lw(CLDZ z5F)RL@FqJNr+?_Ojx400-~V%Kq-Yq?TZy741=V#`>GKGXz&Z}16ou%UDgfKuYn<^n zZAi9j5$ZsfqR&(X;AF@}Xs}UPH46jOgl+T%KAK{0442p!*jRRo+nich_rE>n5q_ca zb}PKV*MRRSf`KsQnN6(+bHhRX#FmK$sdH#s!~)+@Uupxso&Y2C7 wt{ZxIpV(`C|Yt*DJ_mi*Yx+Q1^H3)G{<57 z80-gsnD!Kek^VD6!iIK(4E($17-})xyN=Fcq)oaK+$g=_dz=|S9?X5~W`%F=<}43S z*1tC*;);5TauyXY=)F1rOI23I1iOZrR78oPgreYJKk7b7Xk*+CB2)1Tc{<{UD=3Yu zBU@DL(-FD=x3c+pryRtWnunWkj?v4C7KIet|IUK-UdS8U#K}~7$T7qsmG?`vQ?u5H z*_u4^Rt5LD2UEG@>$4)yg--MI71@YjidM`jzGLAX%CK;T5Eo#yAlh1&+i?`SpZBM} zG53sao>Sd5ggF#pvcjG*)g}A|-Fs&N6D4Zb1j#xlqPBZ4=r}5lU=cNbxm=c$+2(*l z=kOhGK@xj3!Or}U@9o&@8H-CEz1VNNd~&sj`KO4&42=rA26tzZ2yR1N0yJ3Lpin&N zAY4$7M;czG@cFtc$M4dpE4D7^0|ze4rG 7E6vX6xk7D%W^5d9Z8UY93sW&*Z1Ws2 zxuF#RR%e7_lTQD c znGGL)89q9L>Ktca`e6 BgpZTM!Kv~hs}ls$ zMzKA=JriMP>Tv83MTXa2jdkob9@U^~+GT@u-Yc6ZHDHn2aJo7Jc`Xpzz#q?{FHza> z#KbYV|5q6)jwI&NhWu7U;;y0A@^^9VW_nIbP%=Ub-A_GiEu|%2b*WQU^X`O5k-x&G ztlCHwTAHW?)YniQ#vFM$1nMn&Zw7^Zw2R-ZZ>%3zIO#_keh$OyQkmbKh|odr+60;Z zkH9mH;ve6G3Gc;pg 3 z@^BGixiGul-VSqELr~WK_OyJ@_uSjYj1gi>HKnmYuP`wO5tR-}1Uh-`t%E=kNZ09q zPn7~=30!C#+FmdoL6A#ySx-hO_ivNuB@JL`ql5IcFP9yKv~o5xK{Cz6@GZrS6-pa0 zb>A%q 0tXNLi3xjeFjwBjJBi=G1s1B z6nlT1qp@fT{;=Yoyr%L+Bt{WcabgOrmnJ;O;UF2;X-aXT8({_Kr~52y(cWDB_;XIC zW@5*}9c|yp;k