From 8cddd9083de72a34b6a82aab7b3ea5e611d12c70 Mon Sep 17 00:00:00 2001 From: Arthur Freund Date: Tue, 11 Dec 2018 12:31:02 +0100 Subject: [PATCH] Added configuration for the new WIFI device sold by Obi (#1408) * Added the configuration for the second generation OBI devices. * Added link to the OBI Wifi Schuko Plug V2 as well as included the device in the readme. * Restored the default configuration accidentially changed by a previous commit. * Renamed the OBI-V2 device to EUROMATE_WIFI_STECKER_SCHUKO_V2 as suggested by mcspr. * Fixed spelling of comment to the proper wording Schuko. --- README.md | 6 +++-- code/espurna/config/arduino.h | 1 + code/espurna/config/hardware.h | 32 ++++++++++++++++++++++++- code/espurna/migrate.ino | 12 ++++++++++ code/platformio.ini | 26 +++++++++++++++++++- images/devices/schuko-wifi-plug-v2.jpg | Bin 0 -> 11780 bytes 6 files changed, 73 insertions(+), 4 deletions(-) create mode 100644 images/devices/schuko-wifi-plug-v2.jpg diff --git a/README.md b/README.md index e794e602..43a94c7b 100644 --- a/README.md +++ b/README.md @@ -238,8 +238,10 @@ Here is the list of supported hardware. For more information please refer to the |**Electrodragon WiFi IOT**|**OpenEnergyMonitor WiFi MQTT Relay / Thermostat**|| |![Itead S20](images/devices/itead-s20.jpg)|![Itead S20](images/devices/itead-s26.jpg)|![Neo Coolcam NAS WR01W](images/devices/neo-coolcam-wifi.jpg)| |**Itead S20**|**Itead S26**|**Neo Coolcam NAS WR01W**| -|![Schuko Wifi Plug](images/devices/schuko-wifi-plug.jpg)|![KMC 70011](images/devices/kmc-70011.jpg)|![Xenon SM-PW702U](images/devices/xenon-sm-pw702u.jpg)| -|**Schuko Wifi Plug**|**KMC 70011**|**Xenon SM-PW702U**| +|![Schuko Wifi Plug](images/devices/schuko-wifi-plug.jpg)|![Schuko Wifi Plug V2](images/devices/schuko-wifi-plug-v2.jpg)| +|**Schuko Wifi Plug**|**Schuko Wifi Plug V2**| +|![KMC 70011](images/devices/kmc-70011.jpg)|![Xenon SM-PW702U](images/devices/xenon-sm-pw702u.jpg)|| +**KMC 70011**|**Xenon SM-PW702U**|| |![Maxcio W-US002S](images/devices/maxcio-w-us002s.jpg)|![HEYGO HY02](images/devices/heygo-hy02.jpg)|![YiDian XS-SSA05](images/devices/yidian-xs-ssa05.jpg)| |**Maxcio W-US002S**|**HEYGO HY02**|**YiDian XS-SSA05**| |![WiOn 50055](images/devices/wion-50055.jpg)|![LINGAN SWA1](images/devices/lingan-swa1.jpg)|![HomeCube 16A](images/devices/homecube-16a.jpg)| diff --git a/code/espurna/config/arduino.h b/code/espurna/config/arduino.h index 274bec2b..e8b3e177 100644 --- a/code/espurna/config/arduino.h +++ b/code/espurna/config/arduino.h @@ -67,6 +67,7 @@ //#define WEMOS_D1_TARPUNA_SHIELD //#define GIZWITS_WITTY_CLOUD //#define EUROMATE_WIFI_STECKER_SCHUKO +//#define EUROMATE_WIFI_STECKER_SCHUKO_V2 //#define TONBUX_POWERSTRIP02 //#define LINGAN_SWA1 //#define HEYGO_HY02 diff --git a/code/espurna/config/hardware.h b/code/espurna/config/hardware.h index ba7a6bce..ddbd435c 100644 --- a/code/espurna/config/hardware.h +++ b/code/espurna/config/hardware.h @@ -1817,7 +1817,7 @@ #define HLW8012_VOLTAGE_R_UP ( 2 * 1000000 ) // Upstream voltage resistor // ----------------------------------------------------------------------------- -// Euromate (?) Wifi Stecker Shuko +// Euromate (?) Wifi Stecker Schuko // https://www.obi.de/hausfunksteuerung/wifi-stecker-schuko/p/2291706 // Thanks to @Geitde // ----------------------------------------------------------------------------- @@ -1847,6 +1847,36 @@ #define LED1_PIN 4 #define LED1_PIN_INVERSE 0 +// ----------------------------------------------------------------------------- +// Euromate (?) Wifi Stecker Schuko Version 2 +// This configuration is for the second generation of devices sold by OBI. +// https://www.obi.de/hausfunksteuerung/wifi-stecker-schuko-weiss/p/4077806 +// ----------------------------------------------------------------------------- +#elif defined(EUROMATE_WIFI_STECKER_SCHUKO_V2) + + // Info + #define MANUFACTURER "EUROMATE" + #define DEVICE "WIFI_STECKER_SCHUKO_V2" + + // Buttons + #define BUTTON1_PIN 5 + #define BUTTON1_MODE BUTTON_PUSHBUTTON | BUTTON_SET_PULLUP | BUTTON_DEFAULT_HIGH + #define BUTTON1_RELAY 1 + + // Relays + #define RELAY1_PIN 4 + #define RELAY1_TYPE RELAY_TYPE_NORMAL + + // Green + #define LED1_PIN 12 + #define LED1_MODE LED_MODE_WIFI + #define LED1_PIN_INVERSE 0 + + // Red + #define LED2_PIN 13 + #define LED2_MODE LED_MODE_RELAY + #define LED2_PIN_INVERSE 0 + // ----------------------------------------------------------------------------- // Generic 8CH // ----------------------------------------------------------------------------- diff --git a/code/espurna/migrate.ino b/code/espurna/migrate.ino index 008a943f..c12ed228 100644 --- a/code/espurna/migrate.ino +++ b/code/espurna/migrate.ino @@ -1233,6 +1233,18 @@ void migrate() { setSetting("relayGPIO", 0, 5); setSetting("relayType", 0, RELAY_TYPE_NORMAL); + #elif defined(EUROMATE_WIFI_STECKER_SCHUKO_V2) + + setSetting("board", 93); + setSetting("ledGPIO", 0, 13); // Red LED + setSetting("ledLogic", 0, 1); + setSetting("ledGPIO", 1, 12); // Green LED + setSetting("ledLogic", 1, 1); + setSetting("btnGPIO", 0, 5); + setSetting("btnRelay", 0, 0); + setSetting("relayGPIO", 0, 4); + setSetting("relayType", 0, RELAY_TYPE_NORMAL); + #else // Allow users to define new settings without migration config diff --git a/code/platformio.ini b/code/platformio.ini index df5c0e3e..ae99d9af 100644 --- a/code/platformio.ini +++ b/code/platformio.ini @@ -1940,6 +1940,31 @@ upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} extra_scripts = ${common.extra_scripts} +[env:euromate-wifi-stecker-shuko-v2] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_2m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_2m1m} -DEUROMATE_WIFI_STECKER_SCHUKO_V2 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:euromate-wifi-stecker-shuko-v2-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_2m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_2m1m} -DEUROMATE_WIFI_STECKER_SCHUKO_V2 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + [env:tonbux-powerstrip02] platform = ${common.platform} framework = ${common.framework} @@ -2953,4 +2978,3 @@ upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} monitor_speed = ${common.monitor_speed} extra_scripts = ${common.extra_scripts} - diff --git a/images/devices/schuko-wifi-plug-v2.jpg b/images/devices/schuko-wifi-plug-v2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..551d83a7f1cca03f2f022723f25ad6fc33c48989 GIT binary patch literal 11780 zcmbVy2{=^m+yAl4lE_H5$x^l?Sz8#Aecxpb$(9hZ#i5cYhHNDn+t`KdyRr-_*~yZv zY-8VzS>B`H`+ML2dtLAKzxuw%^~`wAHs|x)&wYPB_x&8wC}|ovrKzf+3XqWl02%ZL zkca?-s*%PyBgco293PTafQz?$9ozz-LzDmjm;mGe-G3hjC;)n8=imT;2WO@G9wDT0 zKpCK-proXvpn^WAsHmuE7-(srjfsx_1Oqb@3kx$7^QqHpTxU+Ra==b8v-7fZaB;)o z@Y84b1o(IaxOm_^$2TE^E~TNSIY~=9G`$SEkHr=&eWM-QD)c?uvWqo5#%o*x1LogEAv2Pm1TSa>Crs81W% z(eQb(UI~lKpyj_=_6cU#w;>>D|M1BPI<_2?mAiUP`Id^Rn!1Lj zk+F%XnfYxChr5pVoSa=;y?uNi`S}L~K7AJcJmN)U)a&?!#H8dmZ&Na}ve7xYdHDq& z%PT6Ys%vWNKDV~DcVIfZy88zPhlWQ+e~it{&i(p5zp%Kpyt%c#v%9x{aELp`MFvp( z3l{YGzv5zsaFIi1p`97SJk&#QgPBI%w&%g4pdfHAle@;>KsjH5ftBiNdc^eQE z^P#X3Bo9C&dXGg!`(_E^6yEO{bEmOA49Sg}f1Dq`){Wh<7sj67B8=x_@C*Z`9I{Q4 zBe_VYG5)Gu38e~D+rmzf=u7O|`R&}s6b+_LspymjacKz>AZ`fXuO<3C$B}@8hFlU5 z2t)M0Br}xPGe8nd(GSxfovuC@suQL*|7FvW{A;T{Z2By6e#5LaRBLS0d^>#~`-ENPpk57mX z^BYJh`m#gNuLzH-H3`HuPxyLdP`|e!r&qo5nvA$~ZZOVvN)_}C@IF-BLg!V zRKbjy;mM}38$CS?!|_A7r5WD&fb5l>j8*=aXN&hk{H z%2&Q5m?YzRY4QzhJkGQQ^%1MJsy+4{`EeZ8XWCvoys;{x!riUSw5XWb;#Xm66ZT6YwT)ALpe4K&hbK$KJ9r3PH(MenzqSkiIx(D%}vwyP|ulp15w z9C!2j&N|?Jyd!-lhf`_EGG{y{p`%J6f$Z6^L;sum7_16B_Z$FS1&Y5sP19v#@aZ4)3_#Az_MqnRas^Uo)uG~v!@JS(r ztPai*sa>Yr2Qm1DPPHaRS5AW^ZJDh8P)VKL{mmD)ghgZMH(VOLp_%;+n%PN+L>ErQ zAR~@m_)Izj38)yCo$6oxepJ+o>zjAUU3ckeUi%6bTSL#}U?K9P%~Plpc5~^zSJf8R z{!ex~^uuyXZG#v!hr!E*e$01wFz9RS&-PXsR`;*I+UFVUrx5E1;D&zCRoEev(LyLL zeC}MSP4Ln*S+Blmio%Hi_ZtQdd{?cvXj4xvPcY+=GdA6#9gk%(FMQ@mfSxcO`=h|I z=5v%#K9CtD^jED2WRaP3W4aexhNmF`HdUght*;IikMzqRiUDKMb#+seh9blGsz!xz z!lU_6J|ST`x_1=)ujqi#4tZe)#l8H!er843SLM>|t>A(V`8>W*kvA&5p@AmJjEUnh z4GaCrtZP*Kz)sFP(6zb3@IFt16~p!eiT>E}Ak&z>C3Ry1Pf49dsc|AKztldqgYkM; zf;%BUXKJkSm3?fxN=ugvF*9$fSnE?X<#mGi!(yMf2}Hb$(a zV0huRUdfKM%!k8z31mI{_`!ajJ1#`3%@oCHM646L-gufR4uQ=i0oRO%LoXeG(Sa=_ zVBjl=J5}NYo5jI7h9XHo?h6vI!)w!LbWTZy)%cZAW)$!@O_ah~ZkV40e1H!Q6YjX- z-Aj|nk>OD8`qcSkzedxhhRU+4pm$$h6wfFn1+a^Rt?Ar52x?d0 z+@x;^yil9FEYAL==yYKzPYo6s2#igxYt{eEx)9wF%A?nKHgC(hEB(ZYZ!jJmvS>g< zMXjcs}%ZC&UffD^9In^ZiR8Sj}T1ytC_OQmmq155|sh-DpZnrq&yap?87qDji8Yy z=6YUSqIRdVVD5$S(dnpdjK${?$;RlVttIaj@dyPz67VedQ(#C{ccfH7muF$0qpHZk zUg!5YYo_~q9d12%@tN`Wf-}~M(L+URHme@u#fleHBeSVu^OhflpAVXjGOMUh+8VQE zj9gtwA7U65GMJ70{^Q-(n?+>IlF<#JWCAfys$$08O6M>7+-sPpCunZB^37ftbf>&r zZ}otoT!r)JsRhFCNO;<$n(KpnKg63czlciCLM&BNxrx6t3%k@4osE}I>tBh;ob*cd zD}W)@zQNk#ionlCj`kn1)O!Q(CQlr$e^x*|IYy({1>(hRrSu~%8<|aeusYIULZLqcEMUyOob9G1FbZ>V4 zi$Q(Tu-ge^`*FJVySi6u#w16d?&K%DuIzqgsf+0k-d5_mDv(l~H`#8N`#o6Bo0a)3 z7vI`_vQa;2>i30~HWizPer)BItK0T}Fn_eI1aY#wc+9Rum$_v-A6)x8a=yc0?i|YaftyuYD@IzN|-Ha!EIvAv>0x zrBP8{*cr&akd%T+0c-}JrM~i6*HCpPoAgf)H1gI;jRJgGpCpCS8EB|Ic8CJdMevCd z$YQn6_4ak#vG8Tqpy7)oVEHZy@EJNMA!2@w1hj;!7%7b}Bilgd{nwz=_#aj4;19kov%)!cnOa#)X~s!v%5h+nw9?sH!^w=ef%q%@w%bb5sM z`Mpr%EX<%}oL;lydelWho*r>)n71NEwyfEbJq@AIL%;Gx>WQFPqOIq2r$MRt-6!fR z!PHUY3$oKk^hejn4=Y&{zWc(8UaQ}oi01puy!o9Hwg5Pt8&P-8UXVHw;p&1_`t~n{ zWw=Fk{%kspVL!zM2seCSPgJmvD)W16K*7bRZr#82l2tKy+qGN9DtC;m!5)cf& zDRIt^?KMz=@k2ft`d97irXc>Q_YxE&uMHHfGrw9ggsU2n03;oNk#|nth3>L2^{I(X z;XJY}I^(uXF>|*yJJHkY6~Sw&(jz`p5A8pkyE(2s5F)5H!&!Vu*=_GxRoaHajfjWj z@0;7Q_yzgT&dFs&+h$<5bKg?N&0X&;nU}CqeK#|yr`elcm$dhLovOI9__Kv2hBdC` z14Ec5Lw#7Ptd$d2%33FH)P9c$?T1x#m|&FuPhn11xf>Eam*ux;@j~>e+^DY_YOt3RCc*NJj3jG%`HTGPdak^Iz7Hd-)6 z^S{J`fo@KTrtcpzG#YB28wDH9w@5%Cm{A;UMwE{j{s>R-$S6>>8;k=D@XOa8QzZ3- zY+x3Q`54uR^5e)u=VN=OdK+JjUVHv&`v0dVf z{%2Z6B&JC+`}=AI37Gp_Vj||_q+Uw`ydkM)*Qb7s2`vVk_rx`SZl+vLyY#aCOr0s= z=2bSMNLn?=BXqKyTnj$jPih#eXr&kuj7fXwmOS9T>wG_1$L*{g+y1Oc&1rstGR`M$ zz{!~{*>hq2b%BgPzywb3<+=XV;o;fkpf#O z-^_vWsF_l>kSC3E`A zs7eJQ_)Vabo5_%@~5 zWS957!ZbK=foM$D!`m(1Ym^`7%>v(3Q3$28!|KXmE~Ge<9V<)Co1VhX>D2M-!?C@A zeg8Am3T30Yg~$dWQDrg+S!a+fD!$&v$!53C+EMK~CTw(+L~GLVDcEtI>YelJdG z+Kak2A7lD*jOpW4VBs-D*+FpeW)V*XgYnTELp7$~!4BCwcHd-EnA(c>(02r}vM+IMw z@rHo#ROplYWuwvQ)cvzi)`-r|gv_LA0g&a=Ib(IHL-`t^aBqe)6~bEjftzbkdfK+G zLl!TN>%gVZOnB_;C@394|9Wg7j&ky7eGvycHIN(`oJ-HEWG24!BF+#^LLb)wPV#uWrYT4`f#RmyX2Tk?xozVgH zZ-C5e2tc+JWJ}GP$F3DO{5myQ7$Q~;t^eU(09Kdv=kUB(WB;RdO@` z*agr1b%cSU%+;4=(V8pZfFh`*o$t{h?N+u1mFBo%+<;Vm&fYhGdWI@4lOKu90Wg8kTNhmV5v#t#~42N>6 zToNvhmBTJ!{{&ZZF25x$bz_+;WS=^}7enNLky$6M+QS>$-M@Tg+9}eT%?a&6@pzMf z2AB8m7G3t?*eSxY>kha=YDTqeW;A9e{REjpPD;Qs8D99x0`Yd-?m2yBXySU0 zO96KraugD3c#03_W7oKicC+{=f>i)^`FGo_kEd2p{Yg=PZV<9FN;jB2gmw8rKsu#> zPbYp6=dEdu>-QoI;qw6gjcgkEGOaBf^N#fCuHSWqTScD5>x<6h8i=9Gd(u&A(v{~3 z4WG7E$tg3HS(Xb5dLH%Nems~^q;_)>DPACK7XBms+3r6eF9N%(}%gIvo% zknj+JV-#z~2epBtw!alQf1V%#anHr~;fH1!W@!ha(3pY~|Hm=Jb#@d5&)CkpR$7cu zOPlOR;8OAxsd%xP-cicKp)Be3bupvo?rdpYxMiSvWs7-)V!T$4qBgs!R%S7Se>*p^ zN}0{8v2H6!h%0_H1eRFf%0`4&yDWJ5Qye(Zq~mpUbpY$SMEBL`o)T|Z z17f?&Y8A(}yfAtvh+}?NoJ;xCCr7K@}lN<_g_~27!7Z_{B%r!9*H&SC@$!hxPv3 z74rzkIpO zl7Af7>O^Ka-9Eq7^ZTT#Br#aDbih~i2Bm@K> zrVXylhaJ=L34K?70-e#MnI|r)On(Z*BtSt4{#%hn)T4@#@ay}M`9iVlIM)v~$d@o% zMOlLbicZ!}t4zDuy3OGViy;JJMH|-;&=s*}NrcqhN`)nS$GLgJ_P3TeE(^Mb1fXTc ziSijxhVF(B2i*Jvi38e$NjRM2^Pd9tJwaajuFaf}C33X4Y%C{L>?0Ox?`RU7J59+fl+&JWa$<_t`x@j3O>;8q0=NWuEs@_K8=QEdcQ^c zKs%Ux=$3Z)k9SE6V;OOQLt#(kmJHP83QtvuCL%0`D|J&%LsDy%iM#hLa&?6-i&+Y4 z4pbxQs6{G2I>GYE8BPkbGGp3x;|Aumjh9pP$t@aUHJT)Mxuf0M`M$v4yayxQq|W6R zcSY`t>&^|MN9kL+l{%#=dd;5O)=g#P8UlGAAjR14vCp&xNg33^UNWH-iu+Zmqiw+s z@a}RZBMVbOnNuj-Jw)QY>YoS;XSy>`*csvoo-wqBsI4`GwUfB3Pm6CS0r#QVa-|o{ zRDmYW$RU*X{Z4@vX>`gVMW7Bsb4rojmSv}TwS>Yo&^D2)DNwLWa8fSL64jk?ps}H* zUi0y(*(T%I&krG%oR71e)i&xq^?L6Fr7Zm-i+v6tm93jwrw%E;UZ;Ob0@9-*m1G}D zUr3B=cJZJ>7nxR-W?#M)#vgsgwID1MSP`)hN{0%we^*6<&Z8E5(LA>XiRX`VhbDA= zo9u+uEU=<=2lif(+AAe}`=YH!(}URDq~;Cg8e%cdWG$Dxc8W#Yej}mh+Jw6IK`o+F zpN7Jt>BxrR*Xt{oWgV5-H~3;3W1gw*+`dafZ67?9%$i|qJjQO+G`L*U`Z7;ug}T`_cTv9t ziqx`S!;=NSVnjK$Xk3SP^R9>3Ha2`BE&Xz6VCj<=-T~?EH$Nb7?HcKz~=rS@*I__tVmR z^8WC4HpPoK9BB`A)N{+O^1Y!_%2{T!ND%Y3^X6`Ik!)FsICqWfGVZBH*n@XakpkjR zh{=OxbnU%}T}0#12)zZp2x4ti57-n^nE`oOrveuVc$lX_EG4+4OG0{Uq@z6bZxA- z!ZCJfx&4hiBgM|Gn!n9!(kexwqAn#~+sh`8Y0UrRY!M>jM^4}F?I`y$LZWISaC){u zZ_jaXO>DOWc3`?Y{?)RoA<}%mhZC-^PlTo7_P^WHZN6*wK9;ve5 zsk+9YBk}%8YMvAl%572?Hri=JBY zoQH3U(e$eziXCEdv5Jh)O4+9c|3|oUS6?N;-*_y$*=Ht6$9A0#{*fgDCT~fR&GWD) zd@B5SHxwIp0OFPxVkVl<^iD;5qEfjU47utB7Fn+UJ1I0=gY1Kfwq_WdwBCNgbVTTj}f2(gZB)0$n=8*G=V#( zZC;6(L!w5V{NH*1UwkvHvoI`OfvSwSsCHQGEZKWL@D9_m=m}>s;c}-3(^rgtfhhE~ zC}8FWc!#gavW=p3cspS_b~uM|zp#+Y?ug$5qRF`$LcwTcpmFqR6(h77$Fy-~*y|F_z!>3| z11XO@ucAHS?KgO4v$S`m_F9y6!mM6(Pp$RG21o0&YR?t6ED~yRl!cr{^kf{f zuoq;)Mb%umACdalD#R=zH3`5mr>j;!SHl~#IWy;YC78;kA+0__;>6BZ^j| zpK5#Sw+sj9XgR2_aqRW5uvzBCrYT;OG*6QqS%XN4;it8KfL-&DgNe-E zxK`xJnYdRmKh|xoZgk_YZP!1nTzcT7mFqYq(Xo|F)rE~|PBcG=F3x=_hIa9NY59ei zImB-lw!E4ugqJiw(vZ%SG2ShU1dlZQ*FSeiZRUPHaDU49X2l@`e4*=kx?2-D`HK}s~xA2-R z^H=!`;DX5?20or>vQHO`h~I8Cx(4-am-J`YRNlNpZH(OertCt5UeOs*gSlIg1xJ- zjrrgbFCp$MMb9ik7A9SKXDSTOI8#Es)O@E`YKE@r#t(^k9SQCqI8?5lqA1)^*yW=< zhg^y|7&y_7XJS7H*wE7&U@-f6K8Ev4Txa>KkXcD0^!8Cw#CSMvq}o5&+JnEkqS}<5 zzD$uW>RJ#WdK-_B-ud*K1SmiA%ls&9VW*g%{gZ{@ z1%8+j^Cg$&Et?l{XS&GQHyrJf))Pp}9>`Cf`BT@IMMJM> zQ+*Nb-r^scM#DV8}=Osh}?m(%{NS@977X09#EK#9A z#n0G~BHUVavI$p;2+J)R*6T}vch{dNS{0<}sd}zW0s_bijQl~(c%pSfIkA;lkzM2z zw0!i2$e7}JTWzy2*bElpK{tN-&86H|N1;CbvG40eIWLLiiX?yzsH1Rig@JkPD(5R}uc!3O zDzumw501!*FfAF0;nfOIUyW)`TKXH~t3(v)!H#SLp&3&lOf{lA<&tu6=liB-V6<@1 z)BQX2Yu|~iK$E)1ZqePn8%&*`)xb9?sTOYz)V?L&c^lEl`gG$PAa-8%8}jG?_sZy# z=}}ScBD4y^n$4`P4#c-`JChej;KrfX2y~EJFvfMIM=cq-q?=!M7DcXq-<>~> zQP!t?cL($D_$Q4*tm3fcP#yY}c(NH)g) z_2S6!62Sk`PU$(hAaGb`XmuX4sic39M)JRG3M;k{qIm!A^P^mX%ETrls3^d26OeJ) z0K_!nAJE+ECIQjD3Hmf=FQ7_VNx(%mJK`4#BFsi(9b!skw8Gu}Q58QQeHwCUbGcga&$3JhvQwe$=ttj-P eD$}Gr(=K;6I%PTrk#j9DY1p~{A8~-BAO8WiZuT4i literal 0 HcmV?d00001