From 19b89e0e2ba27c054209e9fdca09a496570ac285 Mon Sep 17 00:00:00 2001 From: Philipp Matthias Schaefer Date: Thu, 23 Jan 2020 11:33:22 +0100 Subject: [PATCH] Circuit documentation --- docs/circuit/build_circuit_diagram.sh | 6 ++ docs/circuit/circuit.md | 59 ++++++++++++++ docs/circuit/circuit.png | Bin 0 -> 43818 bytes docs/circuit/circuit.tex | 94 ++++++++++++++++++++++ docs/hardware/.gitignore | 3 - docs/hardware/build_circuits.sh | 1 - docs/hardware/circuits.tex | 109 -------------------------- 7 files changed, 159 insertions(+), 113 deletions(-) create mode 100755 docs/circuit/build_circuit_diagram.sh create mode 100644 docs/circuit/circuit.md create mode 100644 docs/circuit/circuit.png create mode 100644 docs/circuit/circuit.tex delete mode 100644 docs/hardware/.gitignore delete mode 100755 docs/hardware/build_circuits.sh delete mode 100644 docs/hardware/circuits.tex diff --git a/docs/circuit/build_circuit_diagram.sh b/docs/circuit/build_circuit_diagram.sh new file mode 100755 index 0000000..153f41e --- /dev/null +++ b/docs/circuit/build_circuit_diagram.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +trap 'rm -f circuit.aux circuit.log circuit.pdf' 0 + +# create circuit.png +pdflatex -shell-escape circuit diff --git a/docs/circuit/circuit.md b/docs/circuit/circuit.md new file mode 100644 index 0000000..b0c07c0 --- /dev/null +++ b/docs/circuit/circuit.md @@ -0,0 +1,59 @@ +# Space Status Circuit + +The status of Krautspace's door is captured, displayed and broadcast into the +internet by an Arduino, a Raspberry Pi, and some circuitry. The following +diagram shows a detailed representation of the circuit. + +The Arduino is (and should be only) responsible for the sensor read out and the +local status display (traffic light). + +The Raspberry Pi is (and should be only) responsible for grabbing the status +from the Arduino and broadcasting it to the internet. + +![Circuit diagram](circuit.png) + +## Sensor + +The locked-unlocked-state of the door is determined by a reed switch +embedded in the strikeplate hole, that is triggered by a magnet glued to the +lock's deadbolt. + +The switch is connected to the Arduino via two wires. + +## Arduino + +The system uses an Arduino Duemilanove. It monitors the state of the reed switch +and controls three LEDs on the breadboard. + +The reed switch is connect to a 5V pin and pin D13. Note, that pin D13 also +controls the on-board LED, so whenever the switch is in the closed state (DOES +THIS CORRESPOND TO THE DOOR BEING IN THE CLOSED STATE?), the on-board LED is on. + +Three LEDs, green, yellow, and red, on a breadboard have their anodes connected +to pins D10, D11, and D12 and their cathodes to GND. + +The Arduino gets its power via a USB cable from the Raspberry Pi. This gives +them with a common ground. If this were not the case, the connection between +their grounds via the breadboard, as it exists right now and is shown in the +diagram, would be required. + +The logic of how the state of the reed switch is converted into the state of the +LEDs is discussed in the documentation of the Arduino software. + +## Circuit + +The circuit uses 120Ω series resistors for the LEDs. + +The circuit also includes a voltage divider for the Raspberry Pi's connection +to the anode of the green LED. The voltage is reduced from 5V to +1.8kΩ/(1.8kΩ + 2.1kΩ) * 5V ~= 0.5 * 5V ~= 2.5V. + +## Raspberry Pi + +The system uses a Raspberry Pi Model 3. + +The Raspberry Pi grabs the state of the green LED from its anode on the +breadboard. This is done via pin GPIO18. + +The logic of how this state is communicated to the internet is discussed in the +documentation for the Raspberry Pi software. diff --git a/docs/circuit/circuit.png b/docs/circuit/circuit.png new file mode 100644 index 0000000000000000000000000000000000000000..9e7a5fb648f2de7d8483b0fc20b4186e5a4153bb GIT binary patch literal 43818 zcmd?QXH-+&w>}z0!3tI|AfSSxf}jCGX|Vw>9i&MYBp_W%Xn_PpMPERqON~gckuC`# zDoSsL5?TOhAwUR_P!dS^Z+_?e@Aosty4783P5k3L} zfsSkc^XM@MbQlZ*9r)+a0bu6J&1e~5*zc&T^$4^Z8QVz!{vCetkEI_7BrCD^+ZU7v z4FD$j{I&Hp_-6JA9ls(R*=1b2g|D}>s|W0YfA9;~1=nZKK%ggY zGE+R`or;cY>{cC-due$12H$~ySGY=(56uG&>&WuYRHWZ^h6ud=SiXFgie9FQhb|at zv%<{Vpz7<3b?56xYCeqAkkVStE1GwqHnbn-y7rBAv`Pf-_NAg$4+n&aab8fWL%8A( z#bdcGEM4p|Phul$jdoz+eFUs*1iCAfX)m{6dieoso3Y+yKz$6`T@Br&_niK_^Llj= zg@y{w_w>Z>I?PijaVW+9w$7B2+bG)2s%P_?J-bdw_Il?8v}R+CU*^isZEbe?>q9MO ze`BK4YQiEl>&72@>s`|E7VfZVrswPg=J%mSxZe7^Y}P1qQH8yed|6!-+L~4o_x_0Y z5I2}f@_Ak}YcBkeWBdM*h(PBoPAl)-_QU{jvxh#XUCO>|mA-m5(wTsM(lx$0$V#=C zv)omuKP%kuZjE8R|1BtR0@@nC87b{{)qHZUJYF$1fDR;wHmf$ z1}w-3tDXx|dcycB#W=}-Em+GWOoLDL@W`)-_b&raHHABTzxnm%*Pw4Vzb>jsM%?Ze zc8T#mrZ#s+M)}-RyT+Zy?djWkO+z!YoNLn`)0%H;&OGLe*gPJqlOEk+9DJzaY^B`` z!qc2XQEvjL8@7SDGd2%9Z%Hvq%Ta{@e zxu1s~sI-|nyih1k{h=FxX@3a2I9$S*bJLS-fjc-=eL7y^?F;b@yL;)t+4<@eZnDzk z*?6(0@M+XEDq3m(gyJr4En*n84|GZ4uhBNBa%LelsqJkt6UK z65jf~q~e?i)u$PJ*kd(90mZ%Z#k4E7^`PPFrT3*W*dJLg6$vm6LDU@?ORt>X$&Au# z(w~e1NCA`4t)}YdXqLm4MYk^ZVuO(vWEBTK87=Y>;-t)O;%4re@9$JHyyG;rY;*J} z0~$3qpt>(-pB+z7^R1W|y%5D3kA#T}l+C9pV=c!4prM zo}Y|*lU5oOJSXsg-23}&LakACI(AfVd^<^C;s7$?zTCa9i`D;U6H!Pe% zq+225_8OIjsJz;>i?WgL`C7$Ye*RTj{r3Iut47@o*%quYYb5{tW%~y&=y@`$SMQ)e zjBw%orhFCul8vTYee8oz=jre&M@whe`wT03F?QyypIn{!HHqU3Md+m3wO_LG${TC@ zTWw^Kw_#k&d_YaaS`~GF`^b`Dw%;QinL4!Zrr@WIeJ79UnCKL&geW}Xkt^GUcfB_H<9_QhtG%|#U(Nis!X$Utiv_0M}j~eOry4 zY&e#r^D*Xm-RqTfN=42u+x3Tezp{Rod{=#`{0~p1gxQJ7nO+aVyZnjvVylutWzDh# zw6vQVUzg?C@!}U|o`dd;G`FahWMc%>|I~+O+DK2xfEiyxY82 z{~1=2{{F%jbvK6dz^r-8XYn`kc(Ey8(*=iVzaN)B*ON_t%ipn)zHM^%f=#2_lcFES zm!6g@K9&2|+ZgX+!gsGeLH&WL;)JnCW1e|ljho0gJtnp6ez$&3jheLtOw^tlXH_@K zPW6YB9p4JpW6NVae`ViMxNZE3;FaM1PQ#o1sHuVaM^V>X;ew}ucOS*wTwNQYSlRW1 z2iw$1%o5hpu>9gPReSJB`M^e|lc|WOz2AqKx*8Mr94p~Fo;USySBbE`s7pU2-|r*} z>V39!^O0^JDjeosU5gXQKKSN=h8$m>5X$Jf4F++-=(5;SZe+RO`-N7A0#TYD{Q6ED z?_5K~x4vy3 zyDENAj%VNJfuDzEOAm>3-`VL%KNvIhtf+l(merdum;lX z^+e)lquE!bQNrh(`QO|qtm<4`lfCU&`)leV%$NCD%V>D1L1^OSR?$?HyYv)t{#LhQ zw)t#(^5W;0@A$M5!uwoXPK2k8hl==;(s8>s6mf29Mw*^^lHR1bKO{>a;-?miWg6$*E4{|1u#Pc{^*-=|#c)5$7%8z{kn1vi7Ho(7#?RuTb|tTUoki8+lvGaoo^% zIr^=KaF{$^geFYpB|czS4(h!Py*JX)yJjK7n{w|i(=_2rjzRMw5ic}E60gYzJJ9zo zqH9@E>BB(QifsBDo>#7mAh&Nw%uT1>jJslPe6O<~yj>o)6{aPgxxdz62Wu2-%gr|EM=Ieeeh5_jBja8;`^_ zEYl&Qq>ujg22w%F_(N96KOdr&pgU84kbx>X@#XG$`XZGb_rEItOTQT=v9aj;V4=To zhPd%5ihGPOp!kb-ey&+WCw)zQ%y}}$Q|4{n<_M2&inxFa3`ZlaEIoAZIQ-e?&J81E zqQa~Ecyoxo@)2X<$mFM~_trlic$X_G%TvwiEsJfu3w}Ot!^srULLEQ6^}K}=pamW3 zcy5$`I%?+Y8*i_QC%*hsSCgAu4n=N-)s5zhoev-FY)h{#yBnE(+|%dV4bdU)1*P|Q zgpv0iak6~g4W85Dm-(PJ^&JAzdINd?`FFOa*Mv`OQ(U6wBeoDN?m(+<*}pX) zP&i2Y(S6gPktL3Pbjc_|DjoWh0lEIL9+Stv9S6f_9T|D?vkcW`C zcn#NXhO@IVLmN`(`(>d>#7^ZPBW#de_Lv7qj6vJnPT9S2Qa0}7-gx{HkT`=t!jClf z28DOgd&Bb+;C;Z*djYZ^7(U;3+RMK0MYJ9QhH&2hKVR77Er&|TLuZM09JT8IOA7h| zoBPds4_9s*Dd+t}$bQQDXPms8yOoq&SOVq*I4`rDbR_GC6d$O1@!n#Ts-aeQL#f3( zD-S2vW}WGMe>;ei&uS=+9!<{~FQ$501~u zC@Hu&FMU}ey)&V7VJbom6Ts{0lImj{@^J4E%l$p7p-FXKX%&o+yw-N9PY7}&Ga=!sF^2xW(-@g`3uNCoK!+vHtgV+I8VwM+?NSZ%6#qo7mwCrvp&rCQ zrK-B}UF&?pX|O0{eEaEGM(~@@J|XEX*w$aVEhRw>{6n5qmF)_B?6|3p4W6Fm!#z6* zs?R`;*!v^en!%jYM=-r&MQexUwu0SY$p-Nn&8gm+g77|lXatjp6}r57?R_+VVM*nX zh;^?D{Cw(Hhc*3Mt|rO*3i1%q9fRCdex%aD++8n&xQ1`WD?`0%dzi5 zq={`>65HBp>5iR^2yDUaT~TC+a9=N|u#YcJB0st`YU!y?bfD+D|m#I6e0)T#kd(KO(2?#mhx4 z05Sc8TixA8*J^`{qFHC(Me`4xrky2j(G<{#MBcboKLGWVgxevo(p-pQWt*{iv*YR;RiM9TYIYG{WnvX zGG)>6b3-}GvTb%dCQ_-Av(5>9wN>r28;y&XEMOJyD|qwFHr)nEQMpXt>7;27^@n&( z`Td~K*Mbe1$arl*#IuP&HQULkVR}of4m3d~P2O%{D@ZLzMZ+f9(isa4ET|^7+12FI zZpIL`mCC9s+ZUE^FN;=*-(dN=beMF{f@Zuy%66nTKWM*G0DmByzlp z_;%I18q^gK2!g`ooW7|AtkTtyZ??9$mrV=YjZtiyAD{4op0Nm==!8F3PXAPFFBqeh zf00tEZi1k9wqZiS(6Qe0!^?k)9dUDoRqnZhS~-84NMv)c^~C5-#SzB>1v5j0Y>(>@ zau&?9a+#SRv#4;bj|1-$Qhc1b<ZIf7b zgvLzc$MG6-md>jyi37y8=YC{ZGGMNNr$bz}SB}{)-Gq1dlxq3VzQv73pVny{Lq0sN zsMXscli=T{(|$c6njWgME>d?>4sTPCWM-wUIr{~<-Z#1a8wJtnDx3>NZ6Gqp*RpL9{h<55h00bM?aK`n_%Rm(g_66i`gu&$ilvDEXviy#G zL{3jOVN-jzqJHyF1iFz-QKQ+=ko6S3wOJkl82Ex$3{5-Uz) zlb)04sw3#p!7z+>FlK^fPWzMD(mNlR5vskpMI%!^cS3Um8LtP&dZHSHT+obfbMpm- zh~^1W3lb@Y+ASb#Ck6(hv(s@CN2p6-$!>1?Y?egT`sza~oZ;;Jq~`=x#N}&aCc>Iq zK`jbg4&&pD?FQ&TtMFNztK|N%Ts%Sy6`E)mg2f~>g|4?g51@x{#zu<7;OpjOB5>Yl zeC)vd_lrz@UMXH?3aZR5G9t0ke55UhIWS6K+LCKTP%op~}OXKZPls#KS=v~0WkT5ekE zwn81ceDGzD4Wr?aOQ81dd_jr&kj=Qa9a148i=wz^4pPeHLYYCB?Qu9(U~F8QudwIt3R42YR*n0Ull_Nd=)bvgArh~v$ydkq z*-Uq)$N#_+#_4D4mXQ&;`0Zv_aa#6n=;Rrnl2uwi>)wqe>6x46dhQ1O>B~uM;l#mb zW;!}`(e3cmB+H^0aB8~c=S@MjM?uQsj!ce}di5wcMHF+|#i;7}3ray<5$tBq+Do?8 zD60cs?F*;Kr3VI4my1JVL~fsWo8HsI^_U*yOe}aF&%5tBQU7MK%e>DyuQCMgShT$D zms*FWb2EQVT%(a0-;~!fd)>~IqelGhI@mY10)h4DRhoYSzJ|DA9mB;7&eKM6rq%xa zEni-R8iwZw7Uzzs&yCB~%&pXah>5HZeG#^7T#s;49#Sc8MCgvf8wD^;L$2rLu#HD=OO5fJNT->>F2nNftPHj(GeG#gw`}oPqF1fLYGqWObH2c3OqYMdet>Au-er# z3CW6sLPiq@teisS&RY@QNYyL%2Gu~Wk^&UP2froH8OlQRl_JIxp+@V45Eks$a-X|S40GFpIg3t4yTo*d4Ib=$;>cFwt&`=64VR|J-kRHG4MQJ zwWo9cz!})1r#*K#*<^O(Mb0Sq`#> zTL(6m;cIryjwIL;N5^D6m*Q*Hv|-hAF1#lnjgyF4eyf5nsCg&;MNRoHXgx(h^=}n( zRS5n>&aF-3ZK{I002zO1{%_Aunwx8j9AYR`=+-8ry|jO=YAg{s{V4~r5Qn6muTP;d z>;{5w%R&jm2L+UaTCLf`9|Y1el9dO|n!!?e=>a1MU4H@LE{1C~|72)-q65{Vu}~#7 zDJsWh-)4_fH+rmhsj*>kYio)S<7JPai`f%BPm_k>U(vm$15(hGzKvOF^=BaUB%+~o zOlx6xha<_}Gi6*`w;h$cF`vlO?*bg7_uDMSx)j2j#fI;O`Ot@0z4JJ-QhOC0W%jmS z#jqeVAOxJ$HvXuu#S7KA?NKLioYm{?bqcITJaAr>Io4=QiRIJGOR$?8ec3p=o8mS2 z(0??~HbqK3dGw5F&ab=a%Z+bUz~{5dgP9#$smJwQ^AfzQ0ArlQYaIOAt*c-rr3!2` zFUp6kTU)4*Blv(wvaQpq=S9zKYl!Hrc9?)MW zWS}u>>>3`!ts!Nw>Pr1M+VaJsqGA>)iWK|={y3jn5J+bX%S9;%zf`%|JTF!gE#|ed zaVdv*ql$>@3ssmfqD^-#;gz<1MI{Cz{IGOV`0z2XL3~@=bo`{~*xi;P^~(14g+Fps z7H4e)haUYnt8MnXyP<2RJyBER-#-!;ohcE4jH$n z?R@{UbFuDziW^$$B$ymX(XX|5kH;0=_eTUXo^Az+CO@1$Fe1>9Ei#%ixGeEiS@92F zH?hxI8d{WnjWg!)rC*z~(Hi`w?)fS6NP>oeYjGCS#vte9fyvccf4ut2K(>hjtG4bh zBgKRDjTXma*of^0uJ~;oc1oup+AFquvB6;BE3)VJ+({2ZGc;1w;XHy@898SsD49RKGMSMrr2)ZRYt--^4^?HDvUB5XLwAf{^$EgIS$F zeb^dWRy>p*t!ky3v(HL>y1qeAO9&K?w6YXcH}fel91Gb{CID4IQr)NJx$g;><-a{) zB`h$8L3YVTEG1ZL5>}`*@-ls#0`nKLtSgnJzDZtBu%v0(|8jg>$EH(42u`p9)eo7R1rNNGSwPvSc;zA0o zmJGRC6&-IQs+N(JZ;wp=!LDWaC9HHaXkLdaAM18`Z1z|d!RGY4R8Yi_9{LsaqU_+u zW);mNH{_^BNfiY^q$~Lt0HiQ@pvIy6L4BpAj^BNvQm|3D&b!_GQYu<(tG|5vdx^^8 zwPo{NwNr}6AzQ!M&aug%MJ0HL^PA#fo3jWqnoJUfRR?|kL@Gx13@oqR=eG7R<-6vV zP?>YqgSR!Uz)s1Q>{JTEwm(>QGcCnQ%?y?{;g>YvJZh;)b&BV^g6{9IaY{9IPKA9m zH&31UA|~!o4MAm8ErhD?mTWQK&J~&czQULGuf4ey&U&;2vN4mtKs`$|SiQdI26O!T zkcBnn3HVicvJ0O&=8qWue#hMR)5P}Jrkqzgh(3zAQlotB$<@iH@Nv6jf{hG!HC}ES zFTr}Ibv>c@Ip=+&k&|g;;G7EzGeO_M)#nfAB75lRU#zBWX07oJ$2|fx>KZARgjjYc zjKyNpZ{@O-_029%ZkAI#eZ8_gpe`^jDilZN&gW#3qO250cY$?$T9Py|4js4Mu#!J# ztAZvWYzwJg zl#WtWtF^px-x}7&e9Di^mKXSRe2)6c>Be97J5o9Q(QZ4c?mYwjrrVBnhS;Liuv8bs zMh~1$LZDZxi5(tv0VP+_uvqAdYTpRCJ+_*@6PB0;B@XZ4GNFn>oH0Uy4JFn_Jmi?` zY|9*JQDyVaHwH*qOMG2?vwV2M)_2z`b7yQv`5WV0ZLDX&_D~kr#$Y_9C!`rjq*ilm zcaP9Qu#18mBm!TjkD!aA&X26YM{{h^lUN^j=tjuVGM=8|{Cva=SbVwVe8bGOvU;=- z!lj!ZAA;W6!T`Cl02DI9e7xH#lhf7nqlb~{vffg@i*0Py=l;{xV+(CWto%!EUe%m# zo!)qU7b>r#MD~{lf*z9|wrE55#Bo{m!B=vcS|&H?t30(|b1Ymt9%){Zu+_Eg=o?R! z+T9tWKT+d!Y^}b{&%c5vo1;9^VvK>b*I&4+S3G9OmHb=8BP|tOluAo$vpSxC5+B9E)cdr;N)3hFF6sdFL z#1T@THUzHHCsvm%_>IsbY1=2kVU?}(T2^q|e`j0p$GyZt#`ww^&!GMFjQ2a!^HOUr z)2G#+pdab)c6;u|Epqxg120Yd8TTv||NXh1mU&^Jp!FXoNg(O%uL!*%I)A~nXSQv7 zt*vJ$Rve0~UbL5luzehzm|D(=Ncg5ij)g}o(XBccRobGVb`H#`KvY-R-@O+W;=T+7 zI@e1%=DeGlE9;Qb3Khd3 z?H8uq0wx(7V;w-B^C9ws59N+S zq4rnWrkM3Z>FyaThtOP`@hLFR9 ztU5Yw?ply(W~;y*(J7IoiGn~((|vaYF6Gp@ha;$YRV<6jR)qxYh)rlF>@Chy#g$yY z=2%DO-Uy&`T+M{i^SKUu-U1+ynwi>wz~(|tEoRIXj+}&hjgEddc^5sNe^M+L?Ud>R zz&1$+%2XGl@&$!!cqU{V_w#C?$Z)VM|Jc&fxc%Vhx_l7xrws$vqga+GE zEE>Uv2dx~*-#{xCIcpF68O&c9$#BtAREfFW&;V)jLV0mSY=FJa%fM$gTIiJnttD>9S)7O zDT21FThV@rNr(T2k(v$l^~+66{1OI#=&G zKa62dcA`<6Q4NDR7={g}LHp?Tk-O2xni$0RoH9p}5fU7f{K9qyB9IBSoP}un(s#O- z1(Q=L;HH4Zn?ja(nU>U`%snNqoAwNSvr{#P7s@J5N3&z2d#qrVEdkeF9EtnmuGo~r z+!XF>vZpbk#aRpX_T$%bQo{Vc*C5cJXOF5(}by8(%Z0Kduz;fvK zTNdfN_JplxHfW)RS>{jZI)H1Wl2xq-wI{*R9U0bpY= zw8*q3t-4_RMMCQWR@~!gU{)*IsQB5uG>R?b@NgehHc{LLP);uPGrtm_g8v z>yZ5hS0Ev0^J+M0+=1?)k&*5!dgCQ9{gaI5$Bo5(p?;n+`@UgOYtTPCy$ zrT&$GV#a5+x$bS?tC)3(f5&HL*0+q`Gh6D?nf{55yjg%Em9v6gm`lY9)s;-^KT`{8 z%dW>w1)7_){}uiHkUQ2(7Z|PZpco3+EbYhuVh}GhlOwU>?5wDBE-W9mU0H{I?;!N% zR0;ZbTM1^LB&$m{=(8NAQs9*)bq@SC($guG5>Ldw%?=G!HeQj>f{ zvw~=C&JRLR@*9iha!pdpo5P4uulVQ=ac?AHmk@YIksB2lQcizn72~rV{zwxuZPxv| z9|m?wT>m)nH;TM;9Uv7AY)3;`LWJI@Gk!tksE`+>N5-u|jj`%%KTd|)Ko4BT$H&^G zShgL8bTaaFe6B!#q>0DH8B+_^XLK~_>-^kN`U^B_-5_j|z=4gEP{x-O*g=mp#dSne zy!N^rTt^ox1MhcI!P`|TC}|XQcS|(coI_c&Z)`fMipZg`H`h`GY}oW!adv6gKf7f+ za$?_@yNSCowg(ziXxOZU#dT9?tVVO-(FBr4YJST7)U3x}8_L@yIg**g`l>Lc1gY3v zY)~Wx+C9-t$V9EpZEoB5>~43_8T47XiP`$bNJ0w1^w_M#DKLIeh@%{bVhQ{XXr=43 zHXb}g8X}|NsY>W=oA{Yn4CF+8!ymsJ!8al7z{Q_hTMrvif&!YFyDf6JKa1a)NH)Ng z7qE2zsZ38k`Jxe`&0DWZy)u`6+Z0ikAfO8%Mtt|^tNgMkNtTrTG~$atVaRWm2Y76` zgo}pG;y=SbW}h9TE>zmgUeT5&NhyL|#xATFh{grqRbL6Xc$57Vvsm02%P+p`vU->g za1hg0n>`_UaGf(21+dhBc<%U_AIN0(_IH!_(RMAN^2b<1!EpxsDe)pubq3C$Ljf;| zCzkXHA$|=SY*}&3&PzK7!6>0mEm%@4ih$i3{fYQN5D>ULM9#nsOEnd`E@->c&E{bX zWdf=L=;4Ey>~1CdMH*2#H26kMf4q0%knoWDiZ;$LaT zJ;WwZ5TpTT$$#9dgnwe@6~yH1^QLcg!nnhkP|k$k#V1=Um_^A6hD9Kkx!eBLZbW|1 zU=QS(IK#|C2xAgYyc}!CuY6mCdHuSz;tx1U$lbh)23eZ}wgu^Lt2R51w_`6VR;g72SUc|OeberX~cCVzmWDqVNIsnMG>6?KPd2EM$sLZx=&`_tN zT46F6u#&)`TF>kDE)Koqj}!KmT3@P_BFrM~D&$zQwgW!+f8s+dTjZ+C4^vjK1`9B* zF#tXGf;E631N}(*R@}T;nf@g(1m%exuC3!@(vo>qBU)3)llFEg=+c^LB}WYmCq?%4s=l-Buy{#j?S&CjYgXEw7t z)+Q~{IR~Q+&Dqq;mQN&(0x`tQaQ&DJq-!%|_b$f%eZhdlNb{o{|0KYh0hL3V{;Gf9 zFLL6vyNGK4i9j*0f91JJ2eoveByGWZg^P#(`+7a1+P4X8dKf#=BB-%G&ntQG*TKEZ zvHGi$7TQ*+qUu^E%2aV{h3aaeJ|){v1-E{cAMyF59L+ajQIcU(=)WJ(eQ`mEAg1jS zV_Ui_>Atddv!N_cqo|8h^vM-H0Q|&|&!lLS_qCPk$v39cQ;?degC)M1$eduWf&{w} zZD&~g?+W;(g@)*K`CeTWnq;PjMd7(bT$i5|**{)J-kew9zcw3f12gyXg{xqTnesrX zZYam2KD>lViVk-HtPE+=(7H+NxqxT3I|k^ig zpV82DL&&vECQ)08EK}8hn44L?8?jzVDNwx58sF+z(Y^8L2oRhWTtd{$>t)DHqM=fh zj9(J9N?KW;sMvfcNFBIG7)$QU()m5Tt8RpJ%A?{&Q;$T4+h_0G-YbIszaj3dq}zhN zTT9cbtBRwV?X6u0^6&uTg7W>U1ZZ5(HRV3b*bPV}#PgEHVMbQCC`?~nEWjmF1!zM- zr}J#f8S**RkZz5}*-aa#G$bpZwQd`EGRs-th!HEi5wvm z5bvLGEFRLO%D`5)bf>l+3MVZ>m`W~5`BEOLLI6uDbTZ3ch2yV;C$y{+b=v_l%0VrP z&JEygdNy{5hvSShM{GeLaT8adebhNQ^Zj{Af-y4L*!c6L3>bFcyE|Oeidu#$iApH{ zdM8LEGq*dPFfm#V0OQ)pEqr&Njr!Cpqp9mKc{+E6vk&xj5p!H|Ksp`hYNwiUy|@P4 zoSmF%q5w3&yyf>xsqa;UsL97TAmQ9 ztAv-V+G!-|*Bd~iY&=?yCmHin6Qej)rm1gOWA@ZGZ%cRu1+f@FeBf_`;EE)((( z#MShQuoTscPZ3?&B^nXEsiK^|QnJK`)t=`%dG0-=rV~>ZMjVUs!oVDu3ElF)nxSosNtT<=!A$v zb$6+>}*=i6A*Dg-Q3D1qiS5s#5vCweMv6#pfk0=QnNT($k4; zSIMQ2wgJUU*E5;&?Es%jP-NeCxtfhkys&0M$odqg1yq0uEP-9+c9myVCDug|WinGh=r79Z!B23ql`OL}V_ zTywRc+&5{UTqy8a9YGvmaANXh6?39OW^W4?**Ekms#;T%t=y1KD??eb943Pkpq8ZE zqXCeOQg4roDp8$mr0U4cAxRqS*|^n@vp`7=INjy%g9FZ@$&E0?zDY|O5)~-Ce3mCi zUwqAXGuDebvPsu)I)GliiEkK>#dn-O4kR`qgUpte(&<8p%y*R^iVTL|QmkhHT;H6a zrn-))hO}>a-FSr^@#j_9rhkC^qg0|G6&sUqteq$4la9B1y^n8br&Xr+xIl#C7#O5# zJWTI7ZjbwElu6e|_*GKKdqJpc4p|Q#z7;gT)63`<9r%rPGoXqt^^av>j}und}~_3*cEIS$N#i2S@mY+bbV6{i7~d#r*b<%f9XZLVneOLNM7!r(Y8A<5j!$Fi9W8P_3e0&a$v2BLVs9lF5F+$ zs?G<|azl9Y5Gcd(t8}OuH}8#Z7BMn|t|?Gwb}95fv6b)xJ%bQ*g_$qM+`i7~gp>(& z9oEP*!NR`2-_M(8kIh36){HV|ASK7z=Qk=LtzFzS%UEv{WdP_&za>K^%8`lMIwk(P zfw)F37_1AW>hT6?3*p>An1;_yO6=I7Io$Oj5E_8Kb3TH>2`6hRK!@_#nFAfkhWI%C=~NJ$XL2Xo+~@ z8jfNP10C+_09_-!i4f{X>~)6zB6(D%=%>izjzgdzH2-r%-#*Uz#pThe4`eO6kEhw2 zNYIPo(T#OAgZiZ-!e^2WO=JL&caZqv%eg3W;x8AuQ2Uh8PyT)qb3UtI)rcqa+3J zy~k}_XO-KE>#^i2T*9cb8U8f3At9yS5VUp5Ga%4HdIg^k_omm`md3H0f!yi)s7PLd zne4*Uy~vf|!M;)D+4(1VL|y5&>ko0_psc@m!PsxKi-pe2|11`f<}m38H3c{@`itY~MqdASWud=sriLtk^!l*>p^nv4g92~$;7KLtGtDX=HHyTCzjVuYSNLd>C7->)?3+v-uR2cN5E-$1 zTX%U+DF3*+B)fWkU{VVRELzaMCAiS)T*=5P6=p0j zaB5-sE!HsMyqN#EJ_M><=HVl0rF(OC_Ut}T(2zIK1hKcJIwksKj-JN2 zB|2I0zqyOMt_ioiLY)u@Z4W6Po|*TQBa(mVFVdDH4Knc^3Clcn2SN8v0k3Xv;|lwD z|CBCX4W2?(V%aC8ihO?d3RBsHf!9ITc`54H-H6P2EXuvZ%v1)lw5?9GGoDElAgp z760}|V|h?Y`3yh;)d0RRh~4v|UO}{+e|U#1*@Kdym-|& z)mZT66+F&65AEfgmk^v>AJouo%Hfb?`9Pnw_g0!HgGHa1M9DvvI%3KLYQR7N-?XKp zQxd)QOz2!$;(cCF_`|(dyqK3Rj)24SS^34sL7?-Fj=~`OM>%8b5DR$L85Mvs&VRH0 zP`F(7u{A%ro5B>t?MC3chz}58&Jbg~9FpZ=_5+v@lZ5P_G?6Ylwoxop1}T4rI0(#1 z0CT6M$pE`xo1$O=hXEfZf1loa=Hti?TcFS?Fyab_8*10PgTm$4D0wicPz6muUev3B z$3ZVNxm7!6+(?!Sc;u{j6p#XkUe7brWK|rEHU|$LeFXVS!ISs1AA1~djal?K!i5%Kpx-Y0gHfl1%B<)71l_FwY&UlG0+waZkOyTMNO`~{!$!h*@X+})h}8o za7IkFbu0iECHFjIQL^oVML@HbgQM`uY*GL<*~@kKwD@w8ds2F5z{@`nq4md44}e~L zSP0nhwI^&(1A5r%)sf27cj|5XDw`EVwo|48ECwKDbjb?Nf7_1yNJ4(R@1=5nI{LQ; z2;|~XdF{&0ufkNVi;(?xT%*P+%R09tR^NjRl{#YkVW%Xae!xF`*&T({jkO=>P2EKh$rmsg{{I>U+n7gMPp~md(`h&gq zT3)!`C#mi3_bRmt@Wgg&Pmzh1`7FF$e-!(MkY#SBG0Qkhfm^`r@W4FinvUsFFuYE* zE|>qOvh_Eo;t>#JEw6x++%Xi(#+E^csX>K_(pX;5%6*S*PlF!h37}ap%RjeG1$5>W znK~FOTlo*MZ7H$0&|mk)Z78JGq$OI_LD&+g)7q|U9RZpN&c`E>;9&ipCDHt`+o11! z<|(O?+9SWQx#F){4+T{;v7#Z3D)$S^eN!c=8U9xs;-YM3tU2cPWf$zIp2=NV=P~A{ zl=O>L5yVw&)*ls*k7z{1rxq5sCMBE?v=yG8zMG!5aq%kZcthfS^UZ=o126!!P55_g zz|0Q1f9S*cG*x2ax?&HNcoe~(h~o{a@b2HpF(C+PzSxh+>+Vn`OOlCjHht%Pba)C; z8`s~ts4-1vFypI<DRl5r<=;$pSH1)jz5F%3zZ1!5`RS3(H*l^H+abD3UX>XlL;Z`Mtwd z?02`V&ZeKfsrk|am*)MX{F{IKQnw-FR)+ea!B5G7#>%kdKeAKl!08dTKd_QdW2^3A zeq@zgmEbph|COwtiA^}B_s>hY9Zuy)w4Vpq#eeyc=JyT&#}fFk-?HU)iP8=4IvpZ; zr?hhDAaryWid4_REefLaP@L(;*#9`<%_F6dQlUYuX?f`~B7CLOvUaggFTUEhPj#q- zp$sj$698?i2D3;-JQ`bTR}d4YGJtr#f{lDY>+1i~X8qx0QAZcJOS^HPLwOADUY9V3 zja6T$8E8pAVx~Nc-J!57;vaV`O(&f*TTYYP5WRaHx~ApKvg9V1=p1hnu}1Ms*pEzA zZwAWI&X>dQ7=AgV80vrvaVxu|pzID95WGx)D-?U&7Ue@O^)<#UXYrJE(4G_!gJ(wE z`(kTx9ao{m9yC3xMZcbPhcCO`mQj;vz>-2p>vOJgcBIVXrXe|TPJ>jvl+T$moFx6SggWjl`%A6)yX7&p5phuQXy{tn+y8-zxik_(P&2&nN zN>~tW7~|L#q)QBVFNF5pQ42My&D5*gG1|rPf{Hl7@?WVc0(mS=fF@JZw_i2<$euA9@M-fr=-7p zqZ1@8IdGyMJy|-iOUQ)HvWT@|QozH|j5ylnYJ%2200>fj!PZbcVh>bwjSg6i@X*@- z+Uxp+>Pz z+Lhbp>wX^(*=NH0y2pY1Xhm2DO0rbFGeWtI%~DFuO_;%|`u9vTi3arNd0*_}S&>I& z#rWTFW2!P1)<|p6p=}bxf^LPMr>ANYRs(6TaN9Wz&4uXQah?=T(GDLA6-vajl;U?Z zg13E4QCX-B*`7_cEO$HiAMc4~4*WrX=_T6W+{|42X7Q2>zes!GCC7R=IP&{d@Jz9R zF61Ani0Queg<>1v6D(J8w=@8(D)n9e8^CU&pmt|>I$XG07WJVN>T?t|q2oSE3Pl0B zQWIPK2&SQZq1*3mRZ_}_X!D+odxQMnpXI01+qjX^hgUU#BO_#?oCpZ+!U3w|fs!wD>kqvU7B=+1A+i=@V&FX)T3SveTqQnAilv6oOJH?6vT1nD1NQ?@?(QP*!#sD|2RQdPJ9+3vFh#tm>~#EGw!4sc=XINmca2f9J{5 zWBTG(QJFj5J$_$oS(uIP?{$#tcpLoalN{7UVpLZNKtw06#@angGjvrms{4ys*q!fd z#9>(-JAG`8ZpoA%Qo-e4#3$F;^b$zh1#M|gp-b@FL;|lJ`{w-Iy{C!(YtE6=@Km5L z@BI3)McrcVfZ5wfbA6!n+(;`CF#S|jE;iQGCy&}HA&c!AYbKwg91WUhumxyh-IbZC zgh|}_r@Duis;&TfGy;%G4K-7~LPX${scRB<@kW7VLFyH1lJoKRzda9`N?D3t1(UlR zF(zYOT2@P8pLVBOFH@j@mPhRhZ?_7(DP%GECi-&jFWcYkXt#X)NiZl=(5L=z%!tNw z|2?tk3SUl5UdE&UkaaZw4|new)>QWP3rA6z84<>D6j6csD}n-o1{4TwEPw&&OpEYLU+_xy z-dStywb#Dy`&Sk@A&uG|ZE1_0kfuo7*Oo1Nci2dsjw=GH)H7>Xgb6Z5 z5ZtT!e`a-JHuO)oC0QT+jC=PcS(w#K=(n$MjY;Y1Cm1vNcc%LWR!)1Wa)r(}pCZ^M zuJEtStA-v6jn_Rwz*RfFp}6+w@klK<>p0b;mShqKc)i~>+iR?Zm-ac~iBse3122_a z@3O^6T@x%piQEXZp%QlT-pt-12ps+YgI^d)zBm3p^!)J@{p;QR1S1_hjcp_+nC2%> zD($k07L`^?zFQ&7y6ety5^;J<-8}BcIUxEZ@`(N?{ySdT_|%IuwuF^qDqH8aKS#O_ z-R3+$K=)I*>%ZZ*j%SmTw%j(U65X;7GGC?>DAb_9J0?lvZ}qSF^7Tok4B6WsEcJ#6 z9M?Ru;C7Rg=()!#DR-zs^O8$yJI>$7Gjm6O{oWQR{JU3--}S5EMwW*bw9I`ndG9B` z6&7V-hkqV#MO$QstNn!=do6(eR3%7SKQ(&YC&7?npm2uOs?qNMdv#*hP~-#R(3*GZ ztps+Tl=I79P~{DKT1w*v#gAkXy7mmst=VPD?YajFQL|HY6%8@^sv0{EEgz zs*>vQ#Y#7wp5dtIYa%0}`F8{jIP-n1!E5JLJa%T4QIFklt+L|yKa)`%eF>pcZNIVL z(UFaWkU;FA4vnxBx9YkXj%4ytJ=C|=kU0Ia&JdUWqmx%4{R!|Domi=^_~b9I*<6d; z;V(l@<48o52D0!W@ALVpSxOf$S zXrWdGIp*T&@O`M+{#CyePwfI_5&u0%b#1wp^+Zdq`M3M|9hV7n8IcNwGQ^493)TKn zrzS7#7*W4=;ij?tWz|voV`#(3)Vph5bQ`N%&u}7rxf^pWJwF3~vf8Oa78!WG8iQ}q zJUryP;x%_VWy6CrkZ$sq?R#=fpXi4S&F=9xJ5U;0MQ$+x79x{>SNpq5X6=}@q6t$3 zS`;(#WoAo}b-eeX`usl|%4RB{nzppG%GD1Lj6@RO+=#%Ko8@+q1|jh=C#~T^fB~I8 zixEPuY$J8+r91UZsCr{`SBWJwN{^jn_4Z9YKaxgw!z4$IM3#0(Re#$4z|;gjK!qT8 zLuj&e>I%U;d?j^dBJJOa$^#(qSLCA4y-5AJ-L3I;klIfocwu^c$g0cak8h)q!3A0X z9P_NJi4c3!PHo&88GnQ_fm%MRD^nsdiV0XHBp|0|BZKeR+SObI3l$z2f|2c0|MDUk zBvRKCnD6WbRi};sD7gc<;sdBxP;C2pi-t@xj+MXAMxi{ykcN%~;ESSNkj9{{?Q?W8}-IB%Uk&d9S$mCGA?~o-1$N3&woa$-gOu5{84ns4q z0HunO#ld0*AlG}>fToyg2n)nYpj$s@>~)?YI1<#<{-YS?B+V_2lf81Fs60HB{B7~? zO+J+W#WR&79B7HX2|F`xagIaE?rYk{xs^arTB@fy->MLN*Htcc`3OC*AK-F>K8^cp zz9zF#kfbS?f)ru>WsE90!41Qy&(tX2>^;R|%@``*GQn6envw_Qh9QA>iZ@Pnki8K2 zmiIm-p1ub)vOhwPRMv(I+q~+{JYxDhmHYCT*Od_=%fE;07!!NyB)lSI{W`*=b`QM>? zVe@BexJ5PHC*G-ReC#0Jf((I`;Fe3C(Am?W>W&okaN%pl7fEBsxvgT2`pfu4J@`9<{-av^U|CXZX)ec}_#okUa_N`%)$D5TTJho>sCqon&qG6`ER z2r*a;c?&J{cA>bM-1Pmn79o|en|zV&Zyb8lUWN!2q6<@h_`N9O83?6UsNNny#+>K= z$bx{ItT9ri`8kw+l#ut6b13yoX>g5jqc|_zZN~ATUM6!tr5Xf;2Wpc`Ql2|TcBVl2 zReU&RN{5gvEZuEMOIf?FaqKR)&xLc4f>Cof-2N#yw~QCO!%jZLpZurD{zz_gAFy@S zWz+Y%s`BQ?-I+$}8o%6Dy-?p%YHD9onVwqAfC5aGfnV?xFUPSoDmU@AMYTHQZk;J_ z2;H8+zbQ^lkR8?B8wAut?l33J9DMTVPs6uQa#3y1;q^hyl*lN$Q2$jFqTXotn9MjU zs_DfXP=ul7O$DiVsTvchSKdbpPa^}7<(8dAC$zP{CuwN9Uvtu#<&)m*#vpat$;nEu=a=S~*FGnT7WK*`OFzw#sZdFp^Q*5{8Zxw|O z@~w%Y|1<;WZ_p#{Z?}u~i^PksB;%{q=`?*iH#etP_r+pCKTd{ghl`rYth--3-u%pt zz!ytd%=B+ic2PMxbLdZYl2YD)6|ExTU9$l+=D<=%0%${_K|oUmNe{&7o@CmhL8HT^(Pv1J!OxihrL~>{KBzMdA6i zI5R3zkG|i+UD2KuX{#PGmCF!77YdV8IQpi2?fJIqCrwT<*vC>P%qH=vZm~o6JwMXo z=f|cGpA_r2$3of_db(Q{uwj*S(^p7GZ7K&uog$lMk}`(kf4lCDSz~PLt~|y2mz=5I-H%f#An(a zh@I%I?KkCyyT?U}ziemp*Xtp(rz(jiZJF%)RAnGJ!BY8gMXnW9ed=uCy4_=dr-L7A zj{Zg)%WOV3dH31<`4r9@S#MJ2nzMsqqd6(j;hDjnhU^5_7mbi;{-lH?n)ws6588hZ zWgPUcG76BP+ahyfc1Y*gxR=tNoH+6EIlSRmLc3h7t_4-Ga6LE~M%|fA^0f#*nulpp zte`v>^)t@K0++&J_G6$oA=UG#zCK4XIx_y|aQUmx??P1nQ~E8_e2+1*wvu{RhOk|} zj@f;J>bdU29ntiF1D8jehf^AVSpGE7#Md%p7}p@h;l6lH$&XztDb}M5wr7bs5hT!4 zECbz2?|p(CDXYSWM9qPK>z3#v@mt%=EYCuUD*Bz(tS?g4%1!LVb#lg<-_7x$ZlzH@ zsztHH8l?JKCQ)^}Xx(Nfb16(h7lN`-5M~$gzz7BxuY=jOQ3~|815#SPN}{o$C$>kq zGLVpctS+ZjcTJcW&O*1`C=!-Gi`fg$`{mOGUBmVtOWNZ~#qYjOHOkF3P|)wH^viPi z7m=ZA1{9=xz^!*iT`Uzk>R@Y_mQr0)!w)!WQJDrm3MI9eB1LVyT~x7DVymfiK^hov z{kUlNguVAVk!Vl+s>`@j;e1Bq(xx)j_hEcWpw+lbTU(&lz^g$~snT}`tgi`1-kEZs z@rvAf6a&8!zTuZM$4!WSAvNu?n$0lE|kAXGpAtBI9JYOGzI{lDGPoLt|;O!pV4xdP30T1%45HkgWBo z|CQ#=@^*UXXUNnkzNVVNwdWM)i&+J5r^jE=giQx38=VuhWq&}`5-Hu+ z^fd3+pY8!>G8Q3QZ8^r)*c5gfOkOPt3|M!NpV4vH_44v%Q-dL|=X~cqrqD@bQV51k zCasL>8_@j+PUO~T&b7PLW@l;GAE(YUU)8DG<^ z*%oM(9AIJaLx=!GtL-X%nVB?!an@JF$x1(XDvsj#E1LPrtA|u9JK)ufWkHYr;`}u5bjRNY~f)((E|(c zc{IE$t4Mg!5U!{Zr~@Hny#-0#|Mv{!!~dOW8BiFF23(xXg`;Z9yYgE6g3Jnl8amZ1 zgE(zfmB}9yK{%WLt>Lk|;tdiWzj8OtAR-}T7Kd>W9bCsx#uGXR4UX_ljz(x}lSvm>v56v1sdx(rhC}v@=NZIx>B*0(TC$yH8(lA4 z&Mq^i@hhcGeyMd`K}nbmW=5RZETlaQI}s&1-sZk{Ecq-T+aCyT~MMK~IL! z#z9htF`M%JE$fG- zy@(dZ7PjP<8u+`h)*ElA`c4_enLuF8Y*3aCjqf~Nu@{9}&(nD-9nzsykKMCkRcQa3 zmlls(Nlt0|lx5(!x>d`rz5zio5N+FdYooqX%EBV!lQB&Wxd2ot)U5F^1(qwR=1>dd z@nwI&Wq5d8vPS5B7F6ZgoCzQ*(N?U)ZVO<@_KwNwialkeXuUZiJs(Vm>Q>LxEhuz5 z!65MjLc>MB8&Wr10^^h&xdp;!Z@>mAN18E^>p@qNR<{lMuzvtRpCX zIs}ZSjwfMbL#UdAKHo<&woR}ob@xo{CeV~p!EjZw4e%pl-v7u$7u9Vz;iRZnRTY5# zj#3sPJdeolYX4?b>V11A)b!-yTFB`qm?mYcsuIkA=(Rs$j77j_r|hw>VCcn;qvnyR zbK@GrL9Rl&Ygo%;VL@AJ@CIh%*JL;0CHn2?j{?cQb6 z8{&WY8gMs?qR}CWfvcPoPkk4*?&$>QHs<&!eVBL@oqy?U`@H4p>q2K-$-D;*z09DS z(T4tJBs7ijDjy*=oqEP-`Rpp$6my&fgQc3&-FA93WpZg#PlhYOtt43cl^of=Vu7(X z=M8@4)4(l4g1x;?{@Pf>`QYU{HH8-xQr9}ft^_)anc7L7JG;17n&f2{B8dg@yWuer zepD^TI?ZVMg%HFh^1q5CY&xF2XZq#UN{U9|(qkSqWUQb;ctY)%kOW)o)$$0wRFvm^$-yk! zefeErwnicC(=Ju|aY8k7E2E@_ixydaEwUR_E=R`hxo&!R-v+)SS&JQfPK2{uVS9U(%!?m0eKN zZWw)|JepH_FTJMEIX^tJ94)=pLcnDwwA}t~)N5btJyv?OrHcLSGoRnG7DSWmm^(b2#wqKR6CN-?HVhBl`QQg~Lz9K#iiOaQ6Q zd&6?RX!Ujw;l81dd~MNMN51W@V{Zeeo4y2(N3(!{74&y!GjZ|c=A7vCe9>IC{JiaO zgS`t!w%PPfP^w3eoBHQY$h!c=NQ`AUUg)A}HE%_FXUOu3;LQtTmRDxE^-P#fie%#fRHa8O*<&hpa=U3hAJ)W@|m=XCjbAe2d zD78u*f0yp0p4HVXOS0_=FaeUxp33wr2HredL(slnZR?x!j&EDG=X_vB&zroxWS4N$ z(S^Omm%WUU$#Si6h#p@cwF+)7*spk=5eu+w)1fX^9p*@qm|cTN39Y(vi_yr_@_ckoT@vTS976pw}lpKvSWIv)|*20Txj*qRJB>R!wfxO z;f&n%IiiD>*V_{J|Htx4q-1vR`RV}f>$npctV12w&B>+R?Nc5-W>U!$Z9jQvV zM(yLxZ+hy?n-*B>O2Xgmlb++>8_a1b^C-)X)U$q7|13$%t6x5XLM2af6>GDL9CJx5ZG3ekmOXfSt_}evnMz0vrWDb#CmE$X2t{K zl8lt0ts>br?}WaMvP8X51!Jx*w6WFQe&#d-Yc+-;wKgk`R@$eN(~Pqg^K6wGM&o@4 zu$Yu<8tkOSpF4W%wC?Lk6-ba++$df6;VE+~$7dlflecSJP8HZf=YxXODf;WZ{cU<; z39iQ659OzGTD)Sc9Pzd@vW2)kB6wTUE$F7D?@Z1gMoaQ;PFRN!smJf{LM zF0R#gC#n9k?b?;!wJ5S(*tO+FsIMzr)zoZJoR?LK&P}q&64CH~bhDhdrbePqjDGQL zHT$25NwrHXVIgCrm?fWQCGxDZ1g1l^ex z#C*^g(Hg=Qd6#UDrN7XL$}n$$nqh)gT&UQq%=3%iHnbSJPTCu#><7Al{})E#(eSsO zD4ecKcJS93LWp~d1tv=K3}-IJW+szPwUDZ#`G1>%`85yti@(Z-fZ!&5a7|CDq~5+> zM8k`d;p10RVX&+U<98Qk$Ndls!){9)tWF|L9VF=cLHZ?$JPGXPJB48 zG%k{o1B+KX5P8EajT%ynHA!e?S|?$GaMvDC9+h7J55km}J>D~Z13T5F$LstPDucDE z2*M;i^@oB=0m0b|Qk-~C^I}-v+u?SCR;C?|?UG>;llH|vkKY5ea6Q0WWO6C2e@g0= zGrF37tGjh47v}rS3_Lwy3=;sm-C})3dN*iV8P_-qpUQNlSfwCwECTbqV+ewRjinwO z_%Eaj*Ny1L9gHNI%h_Px%d1OC0=roJ3#|e6IPF>pLD9s;=~+mYm1B%Sp`J_}b2-lk zO{)y1zvESW2wX!C{9};9t$GK~oFg(2#&(I=J=j=|tpv!jo;7{$ybLLotk>JUN!lWr zrgEv`M-p&_CCxnjbgs)Iko2(~i76D>*o6{YuWPLNs5|9aad3W%PjO*$>0fVk;i_K9 zRn0{cLBUBQTV`Xmt%i~_%T2Y}P6;hc45gHap;pmyQ-l3ewZpNp#fW}z7VLIGRtOMEF2{EdwSDaBjw!;% zt0p?9Ft*L-O*YLyrYRlG>{h&=;{qftR{!moOvXFM%9S4g{qsg9z-nP};W5RloUey7 zd}GJ&9nlH@GvxpTl-NW3oZkv$j-Ee}q1tKYLQc_+G_z*or$8PyB7-1_Q&ZBTZAA@z znl^?gRkL4-F%smBF;zPqb^aMwQ-MlvB833r9h?i-E|j*(Br$EpaP319+crv1;e@*hAFeTf9K1T?usQx+{IpPlMt_rlob|bIKj- z0UaZ#PQ|$;T1mPj`A#G|Nlycs_frO7hvMNnB2fy3MI|{KA)Xvnz*$tenEqW?0A$W0 zt7nxqe|>vSoouR&H`B%&VWI~u+)Kveq^%MRlE-yctq{hi{1hPSGgglAY2&LR8NDb} zwe0qVK`K>LSr}1#ji{8BljLHOgpX-=8#C7IKG8jO)r3ZE4^->8Wg`J7V{vQdQ=z+z z=HE7C(H&@#ZIZ)v!=E?^OFY7MI{H*zglz)W4YVNwLM*8K00{};%CA++XEf9%#;0?# zT+hZ!(Di5E;%o|nC*2j}4FEfK4Db*z6ag>Xkm1O6YU6P(a2O`uWkTe9Ux1?}%5V{# zAWl$EGo;j>a`bQbc!vIDZ8t_t#A;^`f?gFSYK&{5msj0cW!kd1<^|3XB*XRv(p?BTIz1SpOUu3 z#%|twVg*PqLIXcGXfw8HaQGv!KF^Y4qjp%tHE&dwLwcSe$Jnp!GTbMd2j#p%#~#au zuVGqpUNP>A%sSJb^kgz3kFF6DS|qSi#G6JUnJLVJOXX0O5i&n6O>bL%)Aao~gHRo? zPdqnc7wY%p@I$ga9|F59*`h!2SyKa+&Xfz)3ve30Zaz=v_LOd*8S{5`G`^(M;8c%M}uf9neED|x####qBzwG?le#gJnhvyFk!3VIQ&3h!6mnS@! zKH@N!U);^{l;^p_W`9EJAE>wEEyQ3SZx#&tBk08JpC@_QAJ>0TA z#i_!V6-=%aF)R;Kt{$L2QoobE1Er=7OQMbQ`OVO+8zIRzW8F&HuK~g1dnc1PGDC;~ zN)$1oG`g$Z*QAHl@TNIXv1P1%7(&o2@<#09osVbQQ0_-(eWvgF<;ZoRu@oQis*Spv z-F6Z6>QH<52hmLwWtVmvboECGiNyOJQc*qvQI<4AB;KJ))ZA{`I=6nGo2f^@-Qot#{=6#~^j9X3EOmL={&vL*Cbul(zBkY<@R) zaD$&>e!neRbP82l2W8T#tj)sPtPP{|c#9enjG>g#Mg2qcQr!yR1nrGt^%YkLJnRSa3V#h z^cLj^Dg<>cQEbQae7dnR-2$-s2YQZSgbisQ8eXSS`0jn^{qaDm|5x+p@gQs3{2|?S zSLsz>nf~#6fma${r+<*Vphmyc*-Y7qnmr5GbINYF4hIG|f~eW;Z3bacsh}-;90-rXHynklOdF^q-^4Y$;Vxa-wY{?j!_67jC_jHDM8#ffNk8jk z`5{NHMPg&^o}rcD`IKW2FVRxoxzJe~A9G9m0=j}n%2BAR$I*e!pRYJ6oT_$_Up`&H zcbR4BCv-_yiN4TRVIJ!unNpIPk&hm9?bYyqy4bj}b9V3W3@BhWem^LR`$OJ7J8jHk zclw5}*Gt?0*?vYFDc)k#1Lq?K;|6_aUZQzI>D6W#6{OYzku+6l9dh! z$B4LYmWzK@3pz4}2%(^M?g(xRSav+e)+se2T+*F^7fTrk=6Pk?z!Qj%?>x|}1-m*N z)fY@l&ySF8MweW>GaBR!YUF^DStq-M2Z5tk@2zcsVg~W1G;evX&hvXK?yu{dl>bQ+4df zubPeTyGR6cx%qh!)&h4CL+wvn-&1?5`RjLfO;t9=_!VHmfFv*ZhQlw#){#{?a{;2G ztVP;~e|`!xt%Md5dB zi?ZCa<0Qzz%YW09&&F_nWtNQU-r!Tq1F_Z186jCF#QF9w8ozS$>qw&+_hfl{XP@X+ zwtCU`egg14JQ2PQyLCm|-AVn4vzfIJZqtm(c1zs5$NzVLDdbA+@z-lCFRDYX@Vmo; zZ(p1^IGG4WflG9nCuO7UbF}p_l#XJvo#8zFDHlK>|L2Wg+j>4YN*GCLw&YY@rA`5~ z(#93h~jDOCdYx*z<=bIJdRDiou>gxo;$_t9@}OmM_Bg zF=Ly3mZ4-0a{Lt5uEzzqK>YgElNm$wvc3T;M>o>>u*=QPMS-2tw|XNWOm=~u=gZ9% zKncq(q%5}F@ymE2w1EsZcEDeGodL+wep<+!t1Re%MB?wM|MY5b zG2+_?u+Tdw0vw>sz{*=> zw7JR^K(itxF%F;~D{vZ|UV4>tN0`q(&Wlmx5L2YCOG$XD1Ob1-zkd}N;fVIgfG!VJ1g2ugIDE0;l7AAszrGs(uB+9Ntot_j7!*D9 zj6pw#!o@XyRjJ3uw!b~!47@s3JOVs8=okdUGVN;uPK1iNLc4N=R&b;ihrTAf4IXe{|nSi`bBlH{CBxp$&Fz33Iyh6tB5JuWViDd1wXjVRzP# zY1JoDlNVR+pxU2>JxH$%vHZL8XrH#`{#WoVBf#S!0IU5`@mk8cA zNYq4Gm{+K{WBPR7jv5-4WR%o@Nc)|_5*;iD5L=PBh53wQQU1D!cu&5kqsaZoZ37#R z#O;O3M%)#|fzBAdT4qk2EqDq!@-BmCcv;VS<8RTjmpxYDM@}F=k`p=SU7;}`UAM|w zbw;`8wtFXJCiK(UF8{?9T>a#ACL69TVgf0mLdM|vT9uq`G*+`&W*;NUB~Sxy{SoV?z0!c6O&6)~A!F`CE8S^MW`&xK8I~YmThHe-mgzAHQOki4m84y986Q^l zzgV-NQM>*1G1r<1qVMinM#lR2TBmc(nxSK{p+<)$?SyjH&ERxd*Apk8fz`hut$f(k z{QXO2XvmUXFf2RmU2cDRFstFhKqy{5hG=-!#?@{;-&!JtMk$0eOlgHu{DliP_EnBd zZyME&pVV~1hJ=QzuXc>r1SL(biFKS`Oh_z~XEA7aRC_|>S5|z;0Kr)kC7(GD*qHTZ znL_9~#kR_O@pa9N{y!H(lWR&3;ChDJTfKu>1``pXniW;9JE|pPI@j3bqrhJDvRe&b zcUqBhT7JG2xaqh#Fu}9X#xED9cWSna4{2j#YZ}wOJx~u#2)!*;^?Z1~Vt9P*YZ0Js z;Z98T?wO(N3i;zF!sJ28Jgag|A#kKCbVg0*e4_ClBEO|(Gtof*=yNa65%d47gxBu^ zSqde^Y7wJs#0oyv?rz#UQb9YT&txN`0Ef%xC zHrp6P0}+D;m)0neoMFrw)}gD!7l|Pq zng(+Pn|k8z<=k1!85}L-+4S;ShzfLMHN|^oFgJ)!5t#+1IGrJ5Ye}$N~YXnkKg)YfnjIG zfo&`47&U6~?_H$3I-yUSeH7$;JpHb9v2AvGAncfzWw09<8z1i*OHlddQh3Z6rDm$> zN2w!p+a`O(U?+qUt5Ufe8ir2tzt9@jli@61dErz`rkBl88`@-l7JXDayhpp zFuCQfa4;efiafs)K870eNL_AsP>1UZ2b`Y}NFId@Z7n~H6CeY~mVn~%+dmPwEiHJ5 zz!|#k^Borh5db<#xbw9A`U(*UA@+bgg$WhNd0PbnF6Lk-NPIz|6+4CWH_8E^)r?5T z>r4@jKJEn^X!yIzU3foOA(dNfk5+ZkMUdXq!Wt^#boa?Xoc`-0J=J8u7lQPm?xL}O z{Eht$ak+;QC={Y6moiOSL?=~#%ph4&PoG(X8hR>HC&)&`38-~xXmi@L?Ka;*hQ)*c zbL}~F5XibQr*8xI{s_{mYwV=XTxOqVwG(Y^5*a74U8t}IgzIkv$(_hcvGr||eFwt9 z=Q~}{8hdSO{WN1+Wsr*44CtWsWFi6=dnkwm17(O5aO!~F3aRI$oek1CWfC$VuNS%v zy^Jk8YNFQ0-*lHd!P`{>`T0w1kj$9dtq*VqWx`n{kTU-Jd2Qjh#j%ra1&F=@^$s{? zwK}tr#SF4vRV`t=e;>CE*(#GALYf^Bjz5NKKnc>+h$)bpqYI$_`sEXJFdBZ@&ors> z#U&wsgMLm|v%Yn*n#D>EOym=bk+6Sb(?5!+_5pru4(r|rH0lrAz5~M2 z@@}M1)+3)l7h{G(9bE=Flgy9yIUmDCfgTof;rOi{Fuj+nuO5K zR7?|W0cS`dwK?k{^kxtS00%`X`O{meV_#dl3WS&VX32!E(_9+d68KR^5EzbZl*S2c zH+>%5%)xPiEy+&W%HICo4H3DJ5a2R)D`5MWZBMira>W+W1t0UlrwpXi^lv)a zET6diX2p4otK0PfD^~qwgp^v#K|E{ZbX7^Jq1PQ>vSU0ib0t#HjP37ikn*v{DzQdh zp)iiW+%=p2G;;fr6-XIoX4KbuKzUePAToBz?ap?O^pPSrKe@*03=&{0JBx6@qlkix zQI#kR?95H|Gp@EZj1NEB_{G{LZ9PW%F>BES?P~*s0Zi0Nf9WH~fd|*7<@TK!`U`Ph zqhCC<;_J0sQgCa*W|NXx%GH2}I~eZH&~>(>RgGr4Sf^|Hx0*ySy0dm1r}=!t!uRUP z!{2wvFxl1u#LkE@~rRE;{)^qS-`3m{c7|TO08i+ zRPBStI^{2P>&E88wv0=F%~Ty6FWRB(bYG%Lad?+Dv^o))dIep2subH^y+tJRaRnxG z?aGu>vK|G=6qv}g%hFY9@*73IRY!C)Hj95l+rxP2h++*^I6&I`;e`x%+y8k-R0QD+ z?nG79hR!W3q1t zSHfaHw5{s16i%_XCf{*~$C3#X>c7CnkydU&LiroyB-eF>?>SN4-6=^R+y(C>r2+|v z)904;3$n|5sidD!C?P~cAHW0{xy!w+Yx85^KWXE{i>Ublp z(Y1*%XbwfxqUX-s#1=|&^lS7iL<)&<&nzakr9{L6cGP!$M=^a_ zud1&EZEV-e8y1M~9F0@sE?F-6gfxN72W8}yvvU1g0scbAJ1{0PW{-a{x@#8bB4s6Z z{XecTZhI;OXs{g_4^cD|rb@>Rf(lbajHUy^Hq#amNPfPq z^`iYphAT6;DAz}~rWH-}*Gz)_WhVaJV$#+j##eh>r=$*#Jb%O^Ad4+!1aQ+(4cI3E%@owgS12Da(5CBH7qPq{s@K$3+ zp7SX_=)yRzCMOSvj|mY`^AcjPrC=SK?RiIQHjm8=eYFZT93IS;<-^kr8k}5R7J`+! zoFvfXg6$q?7v1{T#bjxAp|-2})M#Z{#FRA9M-7(#e)Yc`>BIsL>d9|NG>!R}y~Yez zIqe~jk^xRbrfu|1c{vc2=}!G&cRqVz+TGTg+P_W{E9ffYv%d_4T~eBnN#L{IjU$%` z)W;sHL@=4hX0>@YjWmx)|?+|3=VCS@mA5y+V zR{Nsf<*n+rp5n~Gr@v0+Uw%kyJ&UcdO3Cu+8a8mvqd?-hM0Z_HL0$5hJ=9lZSD`pc zcl_<$(6o_VCSp{f;lCDMmsNQv3gKV=fLt)ERIkFP<%ZH8XCq`&fVC69Pr2HqaIZo< z!F(%0h;3QlVpgV&U7=N|f8_mGBdYG@H}CyGN^JQ~k3#gf{FARv8p(LPa_PA7sRzV+vfGKe!zSr zA4=`B{ACaH)~BCQp;hlM$XerLB-U_|r<}vd0LAL?PB6m_^Ks`tv zz|%1WH^Gg|XTYAN%J;j57mC?VsqV~=H=f^|pf31SWnc^AWXtIf#EO$~OCwyN-Rh#3 z1yHknSG2R|g&v`nyL*kbbJ9PE>`JpH35VK2J1n^P@IjeO)vF3Kgu7mms5@+NKv%tDXGg}N*KN4cBHNYQLQt_ z$+_?00CF2pq5X-^BX2)4zT@kVfh~-#e|5GRugXcN(tf1e|0|m>;nQ3k!JsVe@o;l#Mg$hGr zm|bJjqo%xC?|%Kzqn3njbNsF<&bgxgYuT>MA47B}YbE;4S*n->+$y_>0celgg~iy> zeDpwd1R>2|S9TIyOr}UcToG{p8)cTyX2TgJ#b$^L%t$6_p+x;HRZk^hec*vxDw z{gKs}^gK;h7arKe6pS=oz?W9C4;?gjoeo=KV|f3dIx>>>qog8_HouE(S$@FWib=2i zY7QP@iJq(22`h4wzc*R!Ke8A zbry>gt>;{crO6XEP@3zU?kt1|u6JTtu?>HQpmdhjepYGGhEy0GO2Fw*uNJL04y`$g z_L}I)l^<}^Df@==LJ;iMW`QC5L%?)X#9p~*=KB39zgmR!36w#0#p7SJ#cSAIO|$G7 ze8Ai-!QF6nlg)DZp_B*T>>-T_XlNZsxdcQAf zPj9WT$3GIEF!JG9-Gbh4*r9d_Gb=0KZcVZ1F9xR#g8BSkLcF?uQ@5hkOXlp(k-NjW zt89tzlugFC-tk2)JrI8*=-w?PkuKR35T9%)Kh2hoBkg&O@(_EW;~s2vaDw&gaO&sX zPr*iUB)apqpL$0H1}%+xNs`3s@@At5o;Qv&yQc#W=N9jNiX=wSMi_imH`*rw_I8tt z+KX~>7M)SE6)HV@rB(+?fA~*rtPiSa4oC=xt6o9Xid+vRpOYi$xQC`z%Ii-&5>^K7 zbeMc$?{r{H3&!ioO;r1*)jLrJj^URxFoEy?nIbSb3G>D~8;~@MT*kCxxcBlXNYUm~ z&(8BJR`uiij#wml(tsqkK>pD~4HhE%L|+CJ7BciTGYlRjCs+fkbanh;0i}iT2%AXF zr~S60V>anOK<<$y3HZ^33%tlgs7YwqfsM0Y;nxBg#}-8;L$j6(_$?khCXO*Fw{?%q zUW2u#`c+rQV!O)&spM1t@Q*0uD&b?8J~o!TZuvN!JC19-_R_vKw6~KL-?lzq*px;c zTJa8uiJ8_y1!)jsBG6aka5BnA64ib=BI?hOxgV(@JAbX}#LkX%nDh2ekXDN>X5o6F zI4rGX5l}eQm7_-dm7jg|p{OZKGt89I zG6?)H^ia?lFH(e4!A)a$I32EA5dOGwZxo52ekrXCQD7|y{4EGa^ZXoY=(I*WDCMyg ziXEzJR-`1Y7ZRiB#fLw690S7V@=icG!EPHX2iaQCk%HOm1>MPXEl#iFp9AwUmu7}U z!uK3gehMwpP~jF1bNO1+f)lCj?Gid+(dSzgg$$pN#xU5)-3^Q9%Q9-!oJ3pHIx(!_Kuf z)sf@g58c}7kJKm)vwT`)E10nxT5_D6!pOa-$!s~L9c|0^cDpHrzVaS?qt^4FCTVP< zKcS3~;@AH8h3&|7m?jzt==Nw=mksH-)wY#R@N^)=r$}s|m1k3ZNp97e9t|+LFCobe zMUCSiL^gF(GG)D#-08oETeM?Y5oz6gt|dO9A9uL|ge<=c{i;*(tDE0Mig1b<|%F=6~8Hw!^z_x^sd|=+e$vl^)~dNlYEO zQIYc|J4v!z2Q1Vj3FZ?bPS+=xk9z5fR%3b77v6|D)NqWqe&>ACN=#-P?bx+VvDCQN zHN14=YHXihA?jGLnjIrk&GGXOYfBKklhY*iUr0o>+Pv?mHrM_a>q)}B@ab}h(Q+Gj zZz%e~OksqCWO-ZBN(|L(DV#$laer+@*&P!>QNN^QF(!`cgAS6em-mayvPfoVF7KKl zyg0$R#W4uYz(o70k6bB*@=d;r-@e(zsT?4WzTGD;S+-t1=1y&uXgaIeLSU-}L{5+E zJaQ4UdA;5mt?1I#p{&{5fnJbB1qmWqk_9_KT*OT(vu(aD0EZg7WH;eRyvw48m`@VS zG|vd}>$x#bo@_vSJ0gUAB9@0N2+7E0Jth+q-ptOytgy1(>=o$z7*MTg!)S zi(rCbG>_Ca)0GmV4xBesONOc;A`TMPqu2x7;;UJ52A9y{AcDDdHj%X%Zq67q;F8 zfX5IFg1xrO+*W3dU+*xiMrmW6@LYO?^pXCe z$*=DG``odSIOuE8esbKF!q)t~qmREju~K`Tb?&1x(@orNq=gSE#?p9m}Z^4Z`( zsNd2VZKQ#EO!;Fpc^YqSWIw(C*mqIxj&_KDNA&#vnCqv)ranP4O5DO78l1J(?;N(9 zB$f5jZ$kzJ<*cBC(OaiA{XhR0tJyAXDK(8#l)-5oL(5*iKU=OtG2wEEdG5hyZCpEU zt!Qs$#Y*h8->;_Q(q(*qZxFm!Y8kW3eq~$dx7Y&W^O|injhX}NgILoEsg3#-&55KW z!dy^+W=?;EKPI3 ziMIp4L7(*{g+zebimI-qtuOqZ&yH>z$r?YzoZ`G%)rxHYp&nOqID1U0VZ!=%6+m)n z>kZ(v5<#-b=vqI*N(CWimpl|}RkiIP&~h_brlEZ`e)|ol+;j#V8#d-nN$pugiBD~@ z+BaOIAb*9ZO~bUWI%Agu$d6C;bPB?j9Q_}Uem9Kj$v^z4Hjnt6P77Dpvq{U~I)Nbr z*1EO_!S4`YL;;MVW*qgWTqa@9!rT2}g#BJIb9n$^L%Xo5v=p8J*Y2maG^2L=Ie%ec z18Sw|5GVbE8D8If=ZZWLghn%g4#?YFfVLWk^p8@doM&4&paWvi@?$ zRYDI_y9JPe8G=zQ9BfPhpK}unS6=NY=0PQ|Jj%)qfMUY4`+(g)7CVws3_IK8R*Jpd12ThjH$<+2CDa%Ji@BsKq!Y>mB0T}p%`pz?om|8X zYvMhJ@{Yh#p=@+VP;QJ*0>kgF#j8FCVEl%^D~Dg{LFwL3`5cdSUhq35FTfhg;omn^ z_;IWQeyacvfm|CNvtsv_^K@EYZD)JHm&fb@Wy}v^@;%3A3tkfi(Bl=qT@ZQm_6687 zmm5fNh#2PrzE&1d@{=FON9;{hyA*wi>@tqb{{&jU-oh2)&8+7s!2JXL~&@vIP1T+kI-+wF>8kZccVfydkZATQ+!3;wHMaMO4x87 zl6D(zGLIDid&eNoLm&< z!aGj|5uo_%-)>Y)>_?DW!vRX_w6)u|!RNJWYICIQzX9_%3uxS~av=-{LJz1pMz3^Y zoBRmmhu~D?LBm{7yqmj#$ZCGBx(TEg^v=mk9l$`zWgDC^9N@TnhZef2EJmgKI8D5P zzV#qaKDQX|-mmZW0gyVM_q7313VAG+Zj8lCeyWEryaN}4KJJ^V4~yXXiI}BpcA95T@)ba4ZG6j< z{JszTvEXVnC^F*YT>yxIpWwg(mo_LUxZFVx16MidUEsP3`YgD;1xE(J?H3Tc1>F88 zCFFx?q3s;UB^Jn?8SM)?1n4keAhoT%+=LSZQHU50JjZt(V2%;D5+pafR4jtNgfbuBH-?qI@9dv29hq3P(GdlNZnncQ9_(25V zjmoj*ZL(#Pj22_&bc*S^c`{MD9>eN{rv&VAG(q^)&(9Z&>7BNv z?^ZGWp7;XM@_J}m zc|mbNcvf&@E{N^3!B5vOrhD_o2D3!oeCtV}hhH6CK*~yG>+sEZD1{)j7%Bhcp~D*$ zH@Jr3Ql@t44ANBwD**u$xc(`bNDEOcJDNWqlSgm<0MeO04exsyJ+5KgOb@Y6SEoUGlEpQo`#On|e#<{?& zLaSDpa&RV(l$(;472?t7iG8P~I9z6+Qk>g&Pn4jn-{@BmUm4MIR0%QjFL3+0ll<(2 zs-oN96(^p+6h#zCgIhcAHS3KC_+yj;*FCr`g!s+Igy(FJF^v#IZN5SJ?TdFs$#%dR zU5gg#w&e5%nfHB&G|MNo?NXy7o9UUuib^D`E&i@k())t_Bf)P!ege6&*gqxefHm89(G4@;6q&E6=}b#f8xAx`>L$bJ~*>m@q9JP&fXtg z=$77aoUd+Q%e$Hcd|};|(4N>*3annfem!QZ+8dUx7Pi%2I^lLLDz`3VO5Lzd;HPbB z*P1|g=XbZr1}iCVxzm2v*dbABBGG9I@M>mjZ;!1Mu5@`NbfohRimKNdBg3Z_LwW@E zgQ}td|EP~;l~|->A{72E|}`ya0K~V!VvaM|I26J%d2e5(wkdEJaphQw3Anv8`8TlD=Q z6Gq{7WxGGyq3tvkQwC+H{7YN(6oS5<)X6MWUsWVS&YvWuzdm+=5WOQ-OJ&MO9B{hg zlojy|cvn2!;}*<)ELr*XbjZu|U{oxirD!jPoGt8)xDy#(vi3f>gTYO8?}>gNR!x$8 zy9rT`hMWES3rYF1UHkz;{2@h-f!NpGe7)A++;!@Gc$U1DXG0aVwkjEeXo)G~s*CT- zctEkcxdraTk4Ju1iY7SZxy!Ojigd~vxw`EYd3ieMR&E^S2B(d}S?S>UO=d<;jjk-( zD6}NA9SyUSnC$B19JIy6JL?2}M7`Y0*`?vdwh$FYC)bxhZ0j)VtW77n=$<}txg)ovg=vixeP+1@k{v7(YmJ5&f zJ(W8sV|mpL_=U!0t~6&T!Jb`;DgO!eYM`r|FeSX3Oynlu>-$|s%)+nrql!?klq$`> z!Ky}mqbRmm2h-eYDA=vmB>Uj!0o8v5IaG8SnV;@jtM;M+#LUSUlsx1%+b0hFib?0T z9K~_&$vL|ATl((rCZd-LLt`VuUoYA+g=WNUbhk*xQB1fupOMTj7VwP2V(q=@)3spy ztT4`}X?|JaW~UOd2Ag{X;yE`nz=<+kS&2C^2~46F92kj!q)CVJKL>0&6} z$^z9Y133LrObvU$ry*1D1PK$j?zGCidli< zB|f1^(s_RCAS1WQPbVk?HD=UVT>7*Kyhj!+B#^2@?LrRsAB)uj;d=!*rXSfE>9e-- zuyz>stltXxw{=o;_ix_2m!%tMc3^r{pU)9t)fm%w_S`XSPH}P@c&XVJorsvtZ%ZCWm^$RkR%Ef+i;Vf+}hT;{)Fy zCw$nQxBxjaKpWf0S#4&3Cq`uk;R)G!m6cOj)gD70{?&^aC8`6R6SY5rdH3%V?+KYx zVb`RKsJUHG^x6c0!ijTnntZLyLc1RnD-$m<^g$($i)J+c-qfEf^o$qry!@&5|OKU<~buY-llO!g9#;3b+wUqxxK>BhLKellmzdok}6!RCf-b&_k}!$m;rf$B%!- zeO(R`9{)!|Z*q_qje3Jl4e&?&rvyPx)~D5RXU?dfrv*@`zU1A?U&MjLyJ6xR-W1FQ gGA#%uJb%_o`?!vwvyuBt@G}Bui9gFeefh_K11`z~SO5S3 literal 0 HcmV?d00001 diff --git a/docs/circuit/circuit.tex b/docs/circuit/circuit.tex new file mode 100644 index 0000000..19b14fe --- /dev/null +++ b/docs/circuit/circuit.tex @@ -0,0 +1,94 @@ +\documentclass[border=10, convert={outfile=\jobname.png}]{standalone} + +\usepackage[european resistor]{circuitikz} +\usetikzlibrary{fit, shapes.misc} +\usepackage{siunitx} + +\begin{document} +\begin{circuitikz}[] + % Raspberry Pi 3B + \draw (0.5, 3.5) rectangle (3, -2); + \node[right] at (1, 3) {\textbf{Raspi}}; + + \draw (3.5, 2) to [short] (2.5, 2) node [left] {GND}; + \draw (3.5, 0) to [short] (2.5, 0) node [left] {GPIO18}; + + \draw (1.75, -1.5) node [above] {USB} + to [short] (1.75, -2.5); + + % Bread Board + \draw (4, 3.5) rectangle (11.5, -4); + \node[right] at (4.5, 3) {\textbf{Breadboard}}; + + \draw (3.5, 2) to [short] (4.5, 2) node [circ] {} + to [short] (6.5, 2) node [circ] {} + to [short] (12, 2); + + \draw (3.5, 0) to [short] (4.5, 0) node [circ] {} + to [R, l=$\SI{1.8}{\kilo\ohm}$] (6.5, 0) + to [short] (10.5, 0); + + \draw (12, 1) + to [short] (10.5, 1) + to [R, l_=$\SI{120}{\ohm}$] (8.5, 1) + to [empty led, l_=Green] (6.5, 1) node [circ] {}; + + \draw (12, -1.5) + to [short] (10.5, -1.5) + to [R, l_=$\SI{120}{\ohm}$] (8.5, -1.5) + to [empty led, l_=Yellow] (6.5, -1.5) node [circ] {}; + + \draw (12, -3) + to [short] (10.5, -3) + to [R, l_=$\SI{120}{\ohm}$] (8.5, -3) + to [empty led, l_=Red] (6.5, -3) node [circ] {}; + + \draw (11, -3) to [short] (12, -3); + + \draw (4.5, 2) to [R, l=$\SI{2.1}{\kilo\ohm}$] (4.5, 0); + + \draw (6.5, 2) to [short] (6.5, -3); + + \draw (10.5, 1) node [circ] {} + to [short] (10.5, 0); + + % Arduino Duemilanove + \draw (12.5, 3.5) rectangle (16, -3.5); + \node[right] at (13, 3) {\textbf{Arduino}}; + + \draw (12, 2) to [short] (13, 2) node [right] {GND}; + \draw (12, 1) to [short] (13, 1) node [right] {D10}; + \draw (12, -1.5) to [short] (13, -1.5) node [right] {D11}; + \draw (12, -3) to [short] (13, -3) node [right] {D12}; + + \draw (16.5, 2) to [short] (15.5, 2) node [left] {\SI{5}{\volt}}; + \draw (16.5, 0) to [short] (15.5, 0) node [left] {D13}; + + \draw (15, -3) node [above] {USB} + to [short] (15, -4); + + % Sensor + \draw (17, 3.5) rectangle (19.5, -0.5); + \node[right] at (17.5, 3) {\textbf{Sensor}}; + + \draw (16.5, 2) to [short] (18, 2); + \draw (16.5, 0) to [short] (18, 0); + + \draw (18, 2) to [normal open switch, name=switch] (18, 0); + \node [rounded rectangle, line width=1pt, draw, fit=(switch), inner ysep=1pt, inner xsep=10, rotate=90] at (switch.center) {}; + + % USB cable + + \draw (1.75, -2.5) + to [short] (1.75, -5) + to [short, l=Power for Arduino] (15, -5) + to [short] (15, -4); +\end{circuitikz} + +\end{document} + +%%% Local Variables: +%%% coding: utf-8 +%%% mode: latex +%%% TeX-engine: xetex +%%% End: diff --git a/docs/hardware/.gitignore b/docs/hardware/.gitignore deleted file mode 100644 index 8491230..0000000 --- a/docs/hardware/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -circuits.aux -circuits.log -circuits.pdf diff --git a/docs/hardware/build_circuits.sh b/docs/hardware/build_circuits.sh deleted file mode 100755 index f82d0ac..0000000 --- a/docs/hardware/build_circuits.sh +++ /dev/null @@ -1 +0,0 @@ -xelatex circuits.tex diff --git a/docs/hardware/circuits.tex b/docs/hardware/circuits.tex deleted file mode 100644 index 79f033c..0000000 --- a/docs/hardware/circuits.tex +++ /dev/null @@ -1,109 +0,0 @@ -\documentclass[a4paper]{scrartcl} - -\usepackage{tikz} -\usepackage[european resistor]{circuitikz} -\usepackage{siunitx} - -\begin{document} - -\begin{figure} - \begin{circuitikz} - % Raspberry Pi - \draw (0.5, -0.5) rectangle (3, 3.5); - \node at (1.5, 3) {\textbf{RPi}}; - - \draw (3.5, 2) to [short] (2.5, 2) node [left] {GND}; - \draw (3.5, 0) to [short] (2.5, 0) node [left] {GPIO18}; - - % Bread Board 1 - \draw (4, -0.5) rectangle (7.5, 3.5); - \node at (5, 3) {\textbf{BB1}}; - - \draw (3.5, 2) to [short] (4.5, 2) node [circ] {} - to [short] (5.5, 2) node [circ] {} - to [short] (8, 2); - - \draw (3.5, 0) to [short] (4.5, 0) node [circ] {} - to [short] (5.5, 0) node [circ] {} - to [R, l=$R_2$] (7.5, 0) - to [short] (8, 0); - - \draw (4.5, 2) to [push button] (4.5, 0); - \draw (5.5, 2) to [R, l=$R_1$] (5.5, 0); - - % Bread Board 2 - \draw (8.5, -3.5) rectangle (11.5, 3.5); - \node at (10, 3) {\textbf{BB2}}; - - \draw (8, 2) to [short] (9, 2) node [circ] {} - to [short] (12, 2); - - \draw (9, 1) node [circ] {} to [empty led] (11, 1) node [circ] {} - to [short] (12, 1); - - \draw (8, 0) to [short] (9.5, 0) - to [empty led] (11.5, 0) - to [short] (12, 0); - - \draw (9, -1) node [circ] {} to [R, l=$R_3$] (11, -1) - to [short] (12, -1); - - \draw (10, -2) to [short] (12, -2); - \draw (11, -3) to [short] (12, -3); - - \draw (9, 4) to [short] (9, -1) - to [R, l=$R_4$] (9, -3) - to [short] (9, -4); - - \draw (10, -2) to [short] (10, -4); - - \draw (11, 4) to [short] (11, 1); - \draw (11, -3) to [short] (11, -4); - - % Door - \draw (8.5, 4.5) rectangle (11.5, 6.5); - \node at (9.5, 6) {\textbf{Door}}; - - \draw (9, 5) to [empty led] (11, 5); - - \draw (9, 5) to [short] (9, 4); - - \draw (11, 5) to [short] (11, 4); - - % ADMN - \draw (12.5, -3.5) rectangle (15, 3.5); - \node at (13.5, 3) {\textbf{Arduino}}; - - \draw (12, 2) to [short] (13, 2) node [right] {GND}; - \draw (12, 1) to [short] (13, 1) node [right] {D12}; - \draw (12, 0) to [short] (13, 0) node [right] {D10}; - \draw (12, -1) to [short] (13, -1) node [right] {A0}; - \draw (12, -2) to [short] (13, -2) node [right] {\SI{5}{\volt}}; - \draw (12, -3) to [short] (13, -3) node [right] {D13}; - - % Sensor - \draw (8.5, -4.5) rectangle (11.5, -7); - \node at (9.5, -6.5) {\textbf{Sensor}}; - - - \draw (9, -4) to [short] (9, -5) node [rotate=90, left] {black}; - \draw (10, -4) to [short] (10, -5) node [rotate=90, left] {blue}; - \draw (11, -4) to [short] (11, -5) node [rotate=90, left] {red}; - - \end{circuitikz} - \caption{ - $R_1 = \SI{33}{\kilo\ohm} \pm \SI{2}{\percent}$, - $R_2 = \SI{28}{\kilo\ohm} \pm \SI{2}{\percent}$, - $R_3 = \SI{68}{\kilo\ohm} \pm \SI{1}{\percent}$, - $R_4 = \SI{200}{\ohm} \pm \SI{1}{\percent}$, - } -\end{figure} - - -\end{document} - -%%% Local Variables: -%%% coding: utf-8 -%%% mode: latex -%%% TeX-engine: xetex -%%% End: -- 2.39.5