From 97fbe269c983aefdab4fe57a378ac75e06eabb5b Mon Sep 17 00:00:00 2001 From: Andrey Klimov Date: Sun, 21 Jan 2018 03:36:47 +0300 Subject: [PATCH] Arduino DUE (SAM3X8E) DMX in and out deployed on hardware USART (updated DmxDue required) --- DUE_to_replace_sysfile/variant.cpp | 20 +++++++++++--------- README.md | 11 +++++++---- compiled/DUE/lighthub.ino.bin | Bin 98800 -> 99648 bytes 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/DUE_to_replace_sysfile/variant.cpp b/DUE_to_replace_sysfile/variant.cpp index 858370b..21e2c49 100644 --- a/DUE_to_replace_sysfile/variant.cpp +++ b/DUE_to_replace_sysfile/variant.cpp @@ -325,7 +325,7 @@ RingBuffer tx_buffer2; RingBuffer tx_buffer3; RingBuffer tx_buffer4; -USARTClass Serial1(USART0, USART0_IRQn, ID_USART0, &rx_buffer2, &tx_buffer2); +///USARTClass Serial1(USART0, USART0_IRQn, ID_USART0, &rx_buffer2, &tx_buffer2); void serialEvent1() __attribute__((weak)); void serialEvent1() { } USARTClass Serial2(USART1, USART1_IRQn, ID_USART1, &rx_buffer3, &tx_buffer3); @@ -336,28 +336,30 @@ void serialEvent3() __attribute__((weak)); void serialEvent3() { } // IT handlers -void USART0_Handler(void) -{ - Serial1.IrqHandler(); -} -///void USART1_Handler(void) +///void USART0_Handler(void) ///{ -/// Serial2.IrqHandler(); +/// Serial1.IrqHandler(); ///} +void USART1_Handler(void) +{ + Serial2.IrqHandler(); +} + void USART3_Handler(void) { Serial3.IrqHandler(); } + // ---------------------------------------------------------------------------- void serialEventRun(void) { if (Serial.available()) serialEvent(); - if (Serial1.available()) serialEvent1(); -/// if (Serial2.available()) serialEvent2(); +/// if (Serial1.available()) serialEvent1(); + if (Serial2.available()) serialEvent2(); if (Serial3.available()) serialEvent3(); } diff --git a/README.md b/README.md index b3fb147..c526281 100644 --- a/README.md +++ b/README.md @@ -51,14 +51,17 @@ For patched libraries, appropriate GitHub repo URL provided: * Ethernet https://github.com/anklimov/Ethernet * SPI (standard) -Portation from AVR Mega 2560 to SAM3X8E (Arduino DUE) and ESP is not completed yet. -Core is mostly migrated +Portation from AVR Mega 2560 to SAM3X8E (Arduino DUE) is done since v 0.96 +Next step ESP portation + +#Platforms specific details: AVR version is basic and have all functions +*DMX-out is software (DMXSimple) on pin3 -Another platforms limitations (todo): SAM3X8E: -*DMX-in - not deployed yet +*default PWM frequency +*both, DMX-in and DMX-out are hardware USART based. Use USART1 (pins 18 and 19) for DMX-out and DMX-in ESP: *Wifi instead Ether not implemented yet diff --git a/compiled/DUE/lighthub.ino.bin b/compiled/DUE/lighthub.ino.bin index 45eedb371817c3f93136410721dd0e2854c7e8fd..7956c7ab75256bc955150eba78db0a5ecc9a5932 100755 GIT binary patch delta 16747 zcmb_@d3;nw_HWhg?RID1cjzUMgd`*+EMd(Cm+pjBL6Nn?;&enIY!VRYfQWz_P$(!a zxQss-WrieXAYcTy5gpM)(E*h)Iy!7Fmql`Wz3*F{gqh#G-+Q0;$Lr7M+&XpYRMn}f zQ&p!ohAdH%DU4>xp|%ky+RED|H~ zlmpfP@N@GInX^tL=Xw}_>OMp9@rm=Ud@neNm6YZvO;cElOX`IoMbe_9$?t(Bsr9a6sCDy6tg&*|j3 zs#YS|6WTTFbh(ZWi$tvb?K-(ywMd7R`2EysMQp4Z<=uW=sx{=6oc;EqM%Idv!|=1E z+Z&rMHzjpmO;5FN17?t)^uN)RWVc9O;7|B#-0AU1nCIPk%^+{}znC5!ifuz|qd%@Q z9E{YelM_@|Bd^}n@t$jJBYDzUJ6x)eswK7S_v%8|Zx@8aZ5QQ--v~39wGjq$cVp!8 zy;4MVBpR_S#qYfRP%V6OynC4=4K603A_cu)sS53CWn#m4v{zju~EaIPNb<{OEr&Pa}- z!Mx#*&oz>0cZ*h{=*L5cdfA1;}!MZhWogIq;b#Snj42y2iEfiDJLSf#@()gjLymsZNJ z8UTD=fN3=YXd^4oELgPNC-Ql*k(}VtMa(ji6Ofck{vN^)0iOU~fgpdMXC&VP>L9$@ zrBz+cyFJ=M=Ngi0{EApa`MTE$;a>Mu_L);Lr`*^nfOaWFdx>>v%5xs}ip^#z$q^xM z^2&{7DFN7e?^$5+!0NpxfyDw_!D_U_YI|$@9<^Tp`~nbLG}2uztzCoJzRoW;lJ#Pn zY8KnLv>GY8MQab2G}gOZI{7|7X&hU_6_2Nxq>V1IrKV9_CuGwOd#%`}%N9F6Yto@J zW-zLY8^O8W22U+!zmVI*lWXiS*a_+?^_Mi3A=hMCEfm|9%9QZ0fUh=!P0}T2Ztxi# zdW^$bpB9Ue$tucT-xb&Fnv%Bb5Sw?bZzkKW>rWNdsLPn2?Jt)EDFd}rKOOSRg&G&J zrXu#Eud=qrWm`$DiHQB(Cs_A8Yg}9_&-&sWoldTkdANBS&pP=TFQ1@Y40E_C8qz+{ei`sQMXmjW#8@RW6P1Zq@8JOQ|o@jRT0k*-L z-qWi$ye%G5SlpQANCtfea~qPvmiQCwSDWIhwDLIiq9MUu8q{9dtSvGd<$T7?8rw#ftPEH(nf8C_Q^LAr%t{R zKEJp@lq3B4c283-ME=1ieLOJVY#d?xumHSOikFA)>%qd|Vvv$)T*6=HjWgCfIkN-zBx4;}pd1^q$3dfx4cazrA$!y_CF zN4VJ&Zr2|a{-Bi?dZ0X=ytkqb%NU~1F>QKRfT0j;IDm^g5+PrU_@Zc=n9ek&IGg0* z`M9c6Tc1!rpS0$pmot57=;ajjvX2cnWlY=Xi4Dyct!I!FZRPdXLmu8WKE(ox2y7YB ztXS8z@>hPYF5MG|cMew)E_x3@dSwG%`;bA(aXWCZn>)9dQ z76O`q1}ULkJ8(cpHWtpmv+JgU)W7(3*?P&?@tETgRJ%{%`L_X!@vu>0nY4w~gpIR& z={Lx`1NT)gsY-S(cEve==;Q^g@zd;O&==SQ?1QlNrhAofc00D+T!l>v&mOI)Q&HA1 zly$E%3j2gX{#Bi(42Uka^L1&VV!BFAKVHa|DCS+fKch2u9nDScD01Y2Q(?{F7Fx=_ z2)E^Y?bBtKwUhqYQh(>&&R3lR_`mgKOM<0HDn{j+;GmE=e`A)2w2BWxDYr?tBjrjU z+@V2f2i3$*+CRRtyr=6Vg!Sl37hpQ@jB$lu?-Ou#?A_?N#70Yj#%~b^gwI+ z&K`VnK(!G@EDNn+(tejH-{tY7ztgm>X`6j+=f6_SNSWYak&$NiNHFN6%S~%hfL^u+ z);QKcq8PQ_o`c>o$PcS(KkT_rhDl}D?u+Fat)A|9gS61pKs+xNW(nV+QnVG5a(!jef+gM5g6911tK>t(aS0A`OD2ay}qADk1FegM5202bQ8% zI7$&d%L<~>gfRg&Au8FuU(reysRS85_7z~cG063y3yJ~%g18UbV-sHyTl)OS?uBAN>f)Z;AguEF%=o(+k zw`T3<(oCfl zO;kQL6Yw4E4sKBM^dv^%5uD;e37spG2Pdj+{ zv5zmJdqUIPAp6v8X*dcl@Up76o0wfAf1>WRm)#spO;)XZ%A=E>u#@~b9goAVJRi8! zv^~TTZKY5ggFG=vhdgZGinLDyru<(!1j{D7#x1|4n&e#H=4xU!$w&MTR-L{?s70zr zv)hAO%UTq1NZnASLFcak?MP5(Sq0k5$QA9oKa}fP|LUGx_kg1%sJGk;j$PnTy~{%! zkNB7MaLfnCD?w;BI5y(A}O*6yF18t!>7E}_Be|cT%*x14)n|1 zj%g_QHuTFlFb(b9>h0IVbLkdV=qU+tXNI`5g8l6pG)D`8T_}IfQZKRQU=Q>8 z3PWtEA-4FSwlf(R-!#=gDuj$c&sZVib$?P%&pZ^cNKxpyu`t4gg99WBgz)+K#`=QK z7%F8RI~1Gd=F2%(I=;y~4aMtS(z!CefcQlixrE$Rb`bb$fIk5U$t*jBuo3VE;3L2% zfU|(-0N()k#`LG_q`}=1fmMUO{9KXx1AENRZ3eY#i7Iy5 z92QWFelxZ*u4eoEeJ7Z!Y%bD&7ORbq$ltBlTw%==OU1*=MJyHZh1%Sd4tih^@(;jq zcdJr1E(USFtytO1@%=2kn|r&q6WznRmv`OkIDv-@Np>l|Uyak(d)TQ1KeY=O(v!zI z?`RmC(Je8VlW(l8Gsx}OqczyV405EOj=Iqi-Ntz$%+z9#-#QjyCJ2um6JgROyTnF4 z&J%4HMVtuNv84%F?kzr3^*!8G0rfcQb4e;RZZk|?e&DS4=?{08cC-d39MrnCM?tOu zuNzNDTuY=q5}f0FB-15DI0X3_g}i1Pn}V~T0loH#j}F$^MQ{xEY4d*W5I`H}6HsdR zsY-F6p!#rFSkNpSwC!PF?Tf-p)zQ|JIlPENp(40AaXx+CwGMuErl4CxT_Mgfl4l_l z434>peca)4k)q2seG~170n0DmD0_`di*+>`?M*qZcD=2V%&=;UlsYHO4$0(yDEhpc zIFO5uUao7$o=0&hD0U!#_ara=Fh-^falx)}XrM`FkC78xsqLU~Ypkv%b;8!e1#Vk{ zRlxF2Sr~R!vy=#_Kk`Og)d}%-y@krVJfwfzM0z03@t6|h443N^dXOK~Klajt*^)-S z>V=8elQzF6?JX}Xl7k{Decme`=2kivss;&EkiOm zVan%ESb$Ub0xS>)pH3=loQGvWi^_y-B0th#am}*NL7K-qyP8VL&g{lJp$p%8Np_k1 z6jEnY-H!NW@3+e98}F!o$7OM)I!`HtOskp*`ro~`Pqw&9oVQg~A@(=#RQDu{tI#>M zN7@8vQB*#RA(cZHtiWKs5klM9Rt#XV9Rp%{n z_0o2#lA{7NpQrE^?O|;Dqd~js$-YHfua3bv1pC1SkNFmHg^GEaTi#wWaX>v8FuG%y z{TmmNx2oNRXV;Ou;&$6QeXhR4?5dTh{7=P&Z;7(db@f6Hd}j#|`)(||Qf-bD3*70& zIlHz{3U-a~_j6>Ry2G%GO*o?({tjB3<55n09pGWv8(qBfn8R4r4`S3O&Yz4dx_z>_ZU>*3s z$h3&$Z-`t6@B?XdOPXWL;WUV_){|=QZ_&y#+2WLb?hgXBQVd#jMln0Xkb1i((`B@W zw?;U`&IqXO?H;x3^B^^AJGFKb;?*9r#8-m|cxku*d`9q9p|>&Vpl1UL0Ah>U)vWSW zM(wJ83!~doUDbS8CxuJVuBons*EH|$U{R@IQOkWKUwb~`Kn;wUaQOtwNwv5?4vcV& zggk<0gkw0uP9@>sFoYMCh=bf@H+hCQ3z*fGVHaX>471Jh^if_!F>KlJgq z#vgHzht>f9riZ=*0vQLjk_qwQK@$vBgS^OR!uKaH=lRx$UB_o}r1MR_SxLj5$QRTM z&#AnGj`Rr`m_8agBYgF3ieNIL>PCdL^55gIGPnokY*{SJNyZ+&) zHk;ER=lI5Ua+4FM8})%|voqO6vPZV-VEdPJ8sLo}w$=8>6homPPY&v(y5lP+=D6-^ zUTN3LuPKHmT2S>(X5Y>wc0n!+lH+lmdU;r&7A}sx6)ES4EfMj802`2=nqdjdMg7lC z5mA4)Onee%oS$x|au=&fx418>-E>{2-9F8sm%mrlu6n=O)$Ov)aTQ5?F>xw6u68AU z2epnz>@GzpKy3eg?UnW%m%wd0MZ+l#cej^eEMa1+eDaw!woO|{5jMYu-g4i`PF&jPqx z^zt&*W_L(MQm!P(4+iTS2RKqdy<2riNeFkVS&lSR(2B-9<=5C&UC6{Pq?hkd6GBw( z4vs+l12wEKoKbq&rRwDk?2(KNcLTKHGYm4<1il+`?f4e)X;234*5#`_Uj?{rwhW8< zLx3j%2LJ}ZmoOgsBg_XB0m=Xq0e1n!78oyHwd=JY%{H9ZLzK**E@TSm0zo;TQkDSOdZuiQMH2biJ!aR!2@qbEP%HCT>)_-VcUCcUK^20$W-mH^neL-r@!z z7l11q-?#YQ#`ileB-bLPr66?qBuFIZj`naiXg73bW%Fd%-|`U5>kNm#n|el5mF-Xu0RfEbv&?Z zfmmc7z||#?))@s{i%LGjv1xxJALTIc{1w~=R4xL4KOogSP-|<|+x4Ll&kvlkJy1i; zN?UJl^G05#^H|W57_m$xmT(w|^hp!E92RSu`x%t1G}5U?8?C z?q%eyh`V(aV}hQJ@*5}cGs8+2X3KEzKsw*KxK+TN#hkycg=FqJtl6oP9-TJaKEjbG z>E#-nu!bUct$&zfFv3NCB0uBvWNW_}>?lNhsee|d@j%GuxZ5PZ8GNH6*RE^V>`R%W zmv8se!8b8^r~5T~gI!jo00&8age?frRLR^Z9-xEbtYPv^f5ZXtV6dyi6M^-njlFFf z_q#lgxe*THT@g5hiJc|~hD#pk*LQZ)EKPB+*%E!Ru&#Lr1ki95AULtQ0#>w4zVTfl zR-j;sy#yT{@Rd}P%w*TTtz^d`MO)Y(4v)d;iZ9rGnSI^g`N-ZjP_vz{HK<*CmF^w) z4lh5D>E(sq{-MLEUfv(*XYYpt)1H9Mo{8|OfW>Y@_+%j7te4L!7Pv!F>nxaT(T!$@ zR!;Gm9cE0xo0w+(f_?3M9U6IRpgWw{6FLHY-JyhWJ%sX}aC9i-+iP8!Mjje!W-OYP zjq&AU#y6bdi1(gKJIo?Eog|Vk0DO9$0nd5hG5y7mF5Cv*=McXW;cp0MBWz6eEB11aKvyU)YE@9jO}9z_NDm%1kF<(bM{2Uh1h=VFXT`Q}uM z!;)Q36*<9|x1`TN;X8ak=FBrUt#7qdZ)({#>rB&}Fb_uAC%V`6*V~ ze-JHZ%lhY}yy?w#!HXG6q0bO`lP3$yvtIs$HTTbn+lN~V9B5Ei6wJS5guB?U{S(~J zd9AKom*&blG)}=Dmuu)KbQxh$yyHKIJ%b-~Y%W@CbG~;WCZtVEz5JrnWYusd9$N7| z4v0(8X0A`X^S%L`1$+#s2i*;52fhX2BY<51rA06Cu^$&OyK#dH51J?4+|Q|(M+Y({ zT3iND{^{FqE&yd{AO)Ah*hY!6x*3083L*KVNG4@zA zdPFD|fJ-yN9))<3Hyb?r{1MeSNLl(gwOBa- znmyJWx)JVVzh&pT*Le7FaBJ#kPog6MVV&n+!-wfA4^^T-eZceIhezxPuQpnf(UuqB z&*0%3p6&svYy0=E=iSX4z`LAF$s74^SIm(p`X{AVCr`3NIVrXmJn;%mgJ)EZqB^AS z@%(b3U!#CK{JJu|oZpHygI&rQDReqn{{b`Izw_r=;I(q`)k|zOJ85TSy3Ls_m9#~- z5cBrKk+RmWm0XfZUg;C}9lD|=$zx48S49>QOFaClX~&~mA_r-)RxX6UD;l|CL$NtM zvBXg9j-FVbP;7E2R%oLNW$J*O!FoCSRwFK=g)pirpE#_Qwn>RF7tB`u0h9cNSGDkK zb+S`9pqHZ+HamANeV!f9?MokLU*|5MYguXD>0x!tjpQmii(e}}iX+@sDM`}FfAs4m z-Br8RED_nNl5FuCo&1WwA+2m&;@KjzPTtQd^GDOynm6W0P`ZgdG4MsYg$*j`OZTv; z1u5{|EiTBS_cK;7oZiJw7d()j=6iYZsVju+t=M=DCXKB67hrlVaO&hpA6rffz1Qz-PfEMsPz?4AfQ8sR>v5!d-TP_vXLU zO^fU60bY$gq;FSra{4g^Rn@cM!+wr<$%AVGd63tIvYutdCBysha{G4Cj&-5KNDH{)ONP0W`dO=QURg+t_Hrq;mbElPG zXIaDhrfv4n&d^PsnSb*Lsz5agpCznjcwE9mn58`L!|IGi_yS~iP%A&cwhgz@I(BII zxUBbX>DgxF`&ZL6Xxg7|r9H}0Mx+Vo!=WQ2TGzaOL_Vc{_S(qrgef)b@lnb7^Hr^F zvtlj`z4b#(8xENnbbmsG_|?PzK$l%4!);sCGRPZ60=L=+UMFk-UX(q?7SnN zj$mO`gY;aL4%D!UsysmqHrG|Hqgtb!t}wZJF8zs3o{&Y)vegsZVHLN!^f03nQxZN_ zb}O05XO#5pGfH;J86{cN$nUU%iAmZ&ADz93RZYw`jDiDBBM)I~CO#q1R%V*iME{Gm zP0FV`*p*2`=!eWQ*(T0jgx5bgg)Qvlq(nA<@>~<|Aksj}&P{IqX!0F`fSW7pZJQy> zf8F*eUCmbC-k1K4?ZNj>cI5WshA%x7Pbv6ee5{O=}Q7F0~W2ESF|S^Bq!EWy=+7QGoYk8`G(q?ov+;-FOwXg zzaHc`F^9v5`+Fb^?_18JB)xo_g8i2n?#yw2d`y(MH=X~u5kPW=wcBfT^4Dtbs|GzD zRTMTBN~tjV?)K`glFAH-36Grot=E9_;&7=DYVnOX&cVa!-V)UN%q@9z@*P2A=(b5G z-;TEvrfR)RQTy94eyCKKhAbUkerVx$G|xQEe+NtXT~FaW_Ln=4(lg9GgWt&Rn^7JA zis!Ev%#szi1TWzJlE39TTf@9F?x*jwWp{l*A7jI3j)ab|&#=3z}U2j*)$$*t5@ zys~&z_d5m+-Z6ZIDgG_sM*wee5_)hO&Wl|vVpd;zo#oFO6hB|l@2Cx}KL1q3(2apo z!j%)*LOaa}<_3yAQ=1hS?T+na!F#r2MZZj1J!gwQF1(&a8m^w}@PDRPAcS z6CAz(^LlxmyzXeMYkxaI;NO^hqoHowVXgwxS;y>x7zL@YS0qp4$F5lxL4Jb8%*nxq zIC4%o^|1AGhRpjZz^|86RE&YsioS2VsNh)p?Fj|@bvVl1?Tc;{Y?_s0@zScUC0@z^ zZM#no-@67>K5{y|Ua6}olNln7Px3Z4LG=W`0bKk`{iE-Vo4A zQyTR+LNu&0JBeigq$tAEibc+soqT~HCr+{F<_@pD4d=>|MlD>CS$N!ILz-Tm65v+I zsSJ2{a0}#U!?uB!f@b)#_F;d}IQY?Aklk-}Uoa%Y8ClnoQvLklG(3;n>(a|-Fnbd5 znqnxPIFcR290$CRmCl1N8QW}E#{yTjR4eTruj%B^6$RN9RJ-0%``}P@SZgqQP~KRa zGP(7Y4qQS1hMS`x*H8X%Jhp;0i?)mi(n5Zceav@q!JWX4@`Qk~E>PmOM z?4`)X3K*tOKK0Z+i+x>*@pxLFxjsCV?+ti5U{0^ERnBmEFxK1?O3XyAOd ze14w$J-@kDi~c%^FbA4cf>G#v^C9l@#d04Zk=htY-0076m}>?35c-CP2f>|!Tz~cN zMm5(P7t}U4CWbhkMM@1g_WEs)PRSM9V?)%PpjsX^Sq0exOpqCDelu?DQd!1=zEk<= z)B`pFxHGW?mcTaPy8$l%xFn=D0dhEzTZejQBjlGG-SWQoCON?+#=|-A3G$uIk1eoK z({W@y1>l{uaG>zF`Rww-^oV21ph;M?^7ZWktgg64FZNlW7^DLi_;scr&r@E$V9HNE z!JiTGfxbGQeYWU_nD14cv|F(jiX(;GxN}tgihXdmh5nUYy1R7dRX@oyo~Q5|2=WJh zb89xNTtWV)KdJNjJug@2+6zH1^;M=*N$4PXx^E1f^uUKrf}9<=ctNx8*@}PS`4K%R z;N>JeAmAN!wxkVRv|)fY{cdd5Sx@gooPuHhcZ)-SJEb>m2K)JUNs%#_B)ylLLl&@D zS2n%LM!JSaa=o`NFp_%!8y2ulu1{>gd8fkFq`zV$cp>9GuZSmgSB&)iE8#+2@~)=x zv3mIjwxV__bvD0Wn? zG>5o-7P6|PMZ)mqY{Sws;fX$5eO#l-Oyw9Kn_Kq@Y=it|eUtWh4^-rTX2v+EU2!UD zPOvAUu=#AkvhvjOz(*Hwg;Dq21^ulHQ2qqrPqWxt%f{x7!WNi~2SRGs*XoQ`Di8MB znog!3tgr2T5z&lHx;i-*w@Q_bUFLmid;IIX;xZt z9trGLM#Y{{23yZ4WkqL{LV?I5L7M^E6wqdaHUYFjY~sqaT5iLT??|V%8tbv}uF_ym zG~;U_@`kovItkH}dg#kTbe!oXB$|orK*?_;ol#!TI-?vNc1Ag1Aef!Im3Gihfp!M8 z_dxrVb*xMiU|s#PQW8oQv7xK_(|v5ts@x%M0n&d}`nYkLjx(_L2wp}Z+z~yQm>)D4 z&e$>3TZ8ZD!p_jrn;l|jH_z9sZB;G(m}TAH4}CxJ{tQ~e7T-UlUqo=X@@OIa4!MaP z@9N{f;M~z@%Xa~emEE*WCGv6h{{6!uUiddkD>JUn5-b5$w0dP<@0<0OF8m*Y5NcPu z>P|oV*9+t_TbB_u=Rw7W+#S&zcj;>i|Vim zHfI?2f(6bPo9%bY|KT)N|Dy&*!~6yF7i@ZYliHP|PQF1_*dF5R+M_Xs&>s#+gR$(< zC|-b8@^{U|<#2S{zpso~2W}nz-b6*^H;2afyLKO~3-Q09Fy|U8oxvVlvn*o@pG6o^ zZM6!AC$Y|K_{z!0>=_)H-)oLpJCf#i;ChNLpmpQx##7uPeuy}CRdW1Y;75UT4@K!j zBClrK9j(V&krgpOk)>$^{<0V~9?u3b!R-G2Z2)wm3Wu zL+)6D=jy~_O2-2%B7f$~!5tuxulU07{lSM*cR7(iVjI_Gxw~4@C#FxpP9$gY%4CZo zTH~Y?2YHh2PM(~Crhcp>Pvl{|QiAjtC211pj!+UOB!X&GATVAw@w^%(7J11Y`cw?= zASuL)xAJnL9C46?%30X9WDKW>j+>2+C1T{XN&j+`7*xZeC`*70B0ABllR<&v~`)cFBP%Dr1 zR|T2zf1>-^^ip4s+0wd#@Q{;1GjkD zA2)s9hyP0rf1WYt!LQHZ<31QVg1^Z9OgazlW`BHem+(^^tJr)SPWh)d57tITmVEjan(bmx^GfZ1Z#chP9bkubL^JC2!r_6SH_pjhVZgZq$dBM zA*7A!WatYiGnSoQW+Y~~7*#yrwT{}ZZ)aXJ5yEkfS>=F5+KCI~y0 zv$q}(3MZF0zxBjzR48XGcIW(}4o|SFZvY2OmA^BZd z?rW^7+U7O8-xVr2$@R9W%#7pKO$g}+sA{q~Y=!*oV3J~X%Z3d%K;wlf2&-4%!VPWI zBfN;PbVc)qJws{A9K?B9cJ#G^@UO_rIGv&;J6=0 z0ff-cU-nIk<)mVewjylqCQo{HOzffO#SnKHNKdQ^aXGQJTnX2Hul z58^=@Ay|MJRNmyu%AxscmQ(;;17k(e?RrOCgxc* z>7-~d??t#9u)lfz$6X>l)x7G9C@TDTu6fIs?-N@Oi0jgb#*r**yc{ln0tWxv)z}J^eHO3;YW@ z6JZPB_8+?Ar+;Q^FIVZeu0=1cZvN=<9YP~Ucp>gn@ z=gqW;o;uQDrW$Rc5v=uVLY-L3d*EK+V*QcJne@-PQ1?uE;K-{3=$78do}xnfj_Ja2 zZ2j0G!q*)M7Sas{VcnV|8%k)C2FRYGQFJb<-8qVWt>=nt`D)Md(ew_wf6s@bX)%Jp zXgUkC<;cu2^fRqc|G<%fmGqBVh;)8DHBf{<+G#WNa?jIKsSVM#sq|ePOyDC8cT(s; ze#DWFX3%XkY~g+NwM$6t%0>6B*fVP;os%+l;tX@`67!0cHOp5nS~$>L>8e?>WYN7V zMjSaZljaI^=$?Pfrf1!`BSbO}@DN}R;9bB4z_O7d`5EC6!0=H>2b2Sk0VDyc0cikA z=0ZFE^-CBnlEr`+z{7xV0l5G=MkM(Nrvn}wNTnoIkqM)jooK->1;)89e*n5B24VnF#q zk(^k7V-w&$z#71lfCSJdE)vO$zz+eo-2;BW5#Yxc9O*xgz9S^o;Jo$eDv|U>m9e$*~j-E2O z-?zcOqA()0B1zGSWMh&@KI|uw_1Taq52KQg;TjAz7%r05QFy-qxP+l=n+%@YL^7yG zBswXzoM3D(n1nklP|dtO{cmmRsWhVC{DaA8Vr##Btl!tsBHJxv?wQ1QufBN;T! GNd6bhLu^t2 delta 15951 zcmb_@d3;nw_HWhg+iMm&`yP4;&>;zAVF{aLflGG+1QZoPpabG`Kp;R6P_TobEQ+Fq zB8rOQ%mf{kBt{GpL1k3NEm3qtL8GGrGR|C7$nEvMZ*>x8dB68Q?~ezc({<|9sj5?_ zPF0;cb#r`&PTs8Zl177N%w_{wf6xC8TMVQN zU_`xg0B?r>ka=LL1N^YgK-TnC=vZqY%>dpY|M%Yw|G(z9qr?B^HMeP}+Siq|i`5T> zlZ6xOSTePlPOLMMLZjY-Yz563UmN)4TzyAlg5JWpH?>$Ky<8KpNFC?RWqNt;>*N?O zD{V7OwR^_3*ZdY&ZuC9xXhy?*z4gM4kEGJ9UdymDi=0NR5Qnv>nBE6*+P8(J+=iYrET_~mAc zlmyJ~{{mPdux$TvVDZ4x*blnVRsFp+q4yU7uK)~f8tEpF=+xM>^0h%jGude9P%VZI zF0Do~w~5YZNn^Xoqm?Uzqpf9q`z3ECxc!{)8xgR8SP6lTb-vAu~93B1Lcw+WnoJG8lWTp zajw=wZ0X3o9;mFV_1GJzEg8920)lP7yVk>v?xjGYtJ}>@?i2qaPrNhDV~|h#<6Hwk zIq5gqtQ)w=-4uv%MIk+2?YBt8s`lKVVvfrxB-Mgk_dVFs-3mcNhEDyNdq`TH_feCo878%KNQF;q+&fFG_CDfv7sxv&t z)Av{GK1M9mV(z$&O*784SNXZJxZ;lcEt#pusHHSACs+c&KI3ArH;qZ&VHin~WC7o^ ze#^U z`t;(4_4AeS1>m_Py`|oyx9~kpX`ARAAWd{-N=cGIKIJpn#zkI~`J#d|kjK$Eg_yKD|KfCi$fhvE@{owkX zEfYMCg|ywhxm4sH3`NOb`L?u>Zj!@i$K*7`%0Kzae))8zO^Ss=wy=3o8Cl$>f5!N^ z9=JZP{JTEbBT?3*mjVu#t|>--Pr1{hYfAH2Y%%g}?ER>LLW{!w9+m3#g@h)0&JAFei}F|>Y^s~9 zYrr8H)3g_&^lukI;3|NNOJUl4<0`lym)oahvdz&6_Ma49kDEWWXGiSixQ$!Od;Sb) zISpFwV(rmcvj+L%BWtQjDU!@K-hU?Kfo|ld6)Pxw6G-wENj7ZlqI@VwU^2aniYtd3 z3YVbYSVTy&Z#EkmlRkWn@_T1dWXHIuV0xIA>6q9q{>c$przE5qrk9dB#bHCc99Uv! z*y@=>iajJgnAM%Pf##)m6}$4lxsR0$u+jc-1aJw)?hChFm=-K(E7~X&h0J4rjv6+?U@ht;r5VfCyZEcu|-My zJq9_X_%h#W+1|3vt%pQy;dRbjXh$#S zsp=qNC67c&Wxp(o=M~>kdh?CaEjBmuZ}jDFvFRdRzN#E+*{Ng`%|U(BP9?K(r;_E? z$!~;eonxdYm1v7jeml56b3XceQi-u4doHsMiAc-X%W)aPcR}_+ zT&j1HB1%@N6cy?N!?EA!<;+Nhp}=;9^IZ<43E?4;ok=fm4<}%@cKe8VRg2p5aUi<; z1&_YzraHCfcL9Bq+VgjRYV(syexWhX+L;eQi7gF6{v~|SGo_9nS)zObxKtvotp(eW9CFmfxQ}^?fokJluML^rf8V{QqMqJnup_OLVI02tq<_SU{7S3>*c3a zhcpHa7x-D#n=Q<#k)Kl^a+X~gK}|MMe#)nn9(0m|d0h`+d29+@XxS0rFxw~$M=xIr z(UDu7+fcSTWGeV)mteiysqxCYRg?U&e@iv7ndG^_%~c;>Ak-?Y!?2$Vi`F~P#Afxb zDh-ss8npYuTI(9n)}z)d{@Ww9%7SbAYApfB_OQ-+8#p}RIN)Cu;TRrV*~hUE9P7fc zY;fGDS|zVWT3R&^#06nDWSkJvcY7eAJv0xNYlfoRLN_^yRU?G$ zf$>B0(@;8uY!2$XZ4hx!Fr`m3xgo1G0GdmMA1)jmDp?^!SCAj9l>uX)+D3F)l`)!6PQ*rm_{lR|3`m2+1j1jdU&G4!|zJZopH3MSy2{9__yT zD{1t$#bB4@9`zRrX(7!8@tQ}76?+7^#XiwSQdyLw*@df1ShI`!T+ic*!qYSCo21dk z#}tdC*^8=dU~&rG#zrTXcsJm9XpHczRRpU(f~``D`_4MO{AK7^OQCatf7_*kDvkVY zs94I!rlgV2s5)s^dy$k2MVt#cTv~~53aQV;Pih=%%&@JGnP61PT%j=w1dy^4vYg|sv zZ+Fz|X zXUY)o(159WiInCs!94B{cqA1THwV719=&A-bccFd^UODr=h5qiJ_9)dynYHH32m{? zSa4qOlN^r};}Yb0g}h*&l!oh|9$H%!pd;XfgX0UonE!K^0NMq=fL432V8>l($ODV} zir@d*qMT7+eH)FLs?D~vdAy04ktVn}hyA+zU%L36mV*Ay5kAaL)W07>!QuEiHQO5{ zf39jBrZZ+&99SOq4{+9cMC_~l8r*S2?RirrIZ@SCDScj)6Oze?6oDMYC4`ybIp^e$0$vj*$pXjY|Vddg%x`#*Nwx8u!NP+tR0QJ2c#DPqGQv-YJWc z-+>7wL+a)Jm`hqA(W$di+2bRF6Q^tb%3 z8mp(&?X0Rm?sfl^=~hpndrH+c$i3p1rb$&+kHb9GdtOk>ToX{*?kn~5)1FbsEl98mNKF zuLJN^dlOO*E=o7gG0q}Wfh+={5p&}~x(?}5q>dZoqBer#1uG2b^Cm z&21U3dk^CQLLjzVdcFUMnaMz_bf4BauXv@D<6 z;|o)Z*eyCu$S3(M5?{ctpqY=$`_<1Q^=Xo>ttO4P|Q2$~Q1!ZPit+ zhj=W&?3w9FdO`E{F7{Ps)PV5;QXrm9YO00*5iM_Lmou&2M?+&>;~>um%2?MJq|Yl! z2S+1qQDP2qFZ+}-(xq?W+ey;%BV04=Sxut+IlPrS78Nk~-~pZw1!4~JG&971lOw-5 zp{#?VWJ10qY=Uoz%WJ@d-&g&d=X5|XuL)RPnfzSdsAS+6<9pya<-Po*uFR=fuy`EZ zA*gY$C=Y?k%Zd8OEwP$8n+a2vpfudU5b7R3@9u5{ z6iN;i@+F5|nJ>2hR5ch|6<22o(yyV;^ck4Hame)Rbvp1{0O#kkVcA2y!NFHdm9&OUm4ZscucT+G7k+yWOpqfAvr5=3b)O zlc?TVZE>f1h+|wQ_N{Pfw_g6k56wdbjz#S>X5TXQ|dQWZp*qvU!z zmBd}tHU+us6k#}W`sMVo`q{&F4CLTk**;~r@~z;mvVp|SBqUXq?Iath=Z5YhapvJ!DTn8Q?lV3;6cI%({?%0XPe|2v7hb$_;IL#7(e=hN;7NRtr%qVSc2iHuF`hmG^cS ztR1`q-VtBUe+%_4=bEDg%lV!|I{BvnOSNX_#^RI-_q^ce+n`SVG*DdVaBCxGehcK} z+gN?uyftpz1Kin(3+UuOvL~(flzMc?H$grszJDPE zF-0fuV1Km^@}{blb=tf^UDsoIYGk7-ItHG$V(aCexCu@@zc)<>E&`uYr?FK74~MN1 zw-?doM6M^ykF3c!vNZAqj6Lp)TReY(+*N^I+x!bZU*x+nSa}MM`HjbnY3fefQf{QT}4P^!!g~%&^)ziV?OUvV_@uOW?N;%RFH|2ZT& zvbwS{NoC<8Nh@UnvxVP-Q=bMb3)85R#!AV+FNbomcoTuip?K6Cik2>hGP(x<7tu#2 zZaMptoB51Jf$1dJ_2}FH{B8C^PMWu0i+li&Kuh&)MbjQW6e}fSA~J1JO{Pao@c@2**N=maG6KaQx_E1Qwd!RWE@my_F zl)N%j6tRoeV0OeVUJgc1DKA1eX%H&enT9IsLX+z>-AT?A%zbk(@sf8yTIcooDV>Qf z6Pid5Y7bg$96J__bJ-*c>@nW}r|BSlo=;>}vqQ2XZZS%Yhi^FDH8tXG@Ri74GPs%a zzj8c{fnLG>61*|1*KQKp5T$s?Bt=OkSgI*#oXYP2tJpV#vf{QtGyGWNE&~q$?`AQB zQ@q22Jix1yM+Zl{Mj$N-68Z6f&mo=};VMLaLU3-ku_+QU+-;I~gkP!1b80&^Po&M$ z$<`npaRtlP9@IP*?x|9S;~K~>prIg@EX{@{T9jam!hm9$3Ap)|Lc#Z)E|l3_kcK4ElM% zi+~ou>b9ESzAe-s?p^9Eg~Hztlvb0RRL>LJ$gUR^v2ZYA7bBpBPg(hpfw?aS$YUL# zI@~Wbsy%Nhy(jS;KfhaH+xHKS+%vJb+4dn>-ajZ-L@?6ptyo*;W{V3^_khJ^!FszA z2=z=04|EQ6Y2=zvZ(7}#PU%Z4`_hSh>9|PB57PQFjXWYUnhuOW#uV~d;YZ8&$oJnP zwccz4nU-WA*8}*9JOQS8z$e%Zk!>Ob<}BoedAPSD)g%2m%|N1&7NIV`uh%9Uh#C0; zlqVtGm;%15W}<#gJOJRZK6p7mSt2BMSQ{yY!Dl976tb$PZg9@M3NnAMO& zMz{{ggQsyoi1KHCyN8z8-6zh)MQmn*pFd8TY#Q#musm9gFn(Y>Ga8Qea?U+l=1>^#A>CeYvONNkqL<^950k5&p(8;>-A)~AWnKLhk zzR#BB4H?O+odRIMk?OA@Ep5}v&xCb&F@CH<_o-HX0_U*WvtM;gvP52SJK4#+yxb{x z^|5-m+w{6G*_DL!8sC3T&nRU8s4kY3pH}@Of(@wFM)uNZhzJHt>)GRppqS48L*RTn&j{I@Lee;+< ze@@iMV7?U*B@gx{wxA%z_(?#NJd#PSVBUhHkr$4b+hU7E2`d|sCUb|mEk2UV>&qoa zayfmu>_{$)oh&Fp9N~)EFW46l8V*q9gNH?5aZ|1IQQfJwM|NqwDN|aPSRd-ig@3YZ7OjX z&S>RT!N!cT$;n?7TeR4KQVJ)~^{v+z#!xzgEh>73&SKi)ffw^p9bCKeB&lh`xGNo+%L4jlsQPT_)|WtXH1XZ)`E$etO!RL7gOtYGn_8|X{y!O}HJG6>^wko|`A z0i>oRLYr9H7;jV)a-;Duuaz^|fiWXT^1M(bxT`!BZbYSyaV7rCa74T$D?W`gGD8=& z@=xvO(V~aNjQu&L-iK(sT;%tlttCu9ZcH|J+j)Irt8nAKw(4#-Z&|bn4fRuw&tvn) z)ze+<<8diT_l9|BvRzGW7wz^2{v0OCcd)>?ftA<#XgALj3;)e0dW##49_X{~QV32q zh>pxoB7f`0eF*D{x3pEA-Hf|C+)5FvW!`u@b+b+5Cl7h}s?9f`m46LOgJEsCTDF1x zJU&B!{!9}j>TaDmp@7oAFz+?rP9eCW61%yrk`HI~X15lv-DOJRI1v{f(Y{5o6!yM( zo55G#whLw}HYMXBRm6pdzkhtIdVr_1KTaHD?N`pfOCiesaKG_yVYKXJOj2`MrIt_1 z1I$;p*2uB@Bf0hETl?r8l>=E$MP^@aa>ZQX2S0nZVj+pM0 znn;^kjZ+p;WR^Kk(rejhS60G@DgwzK!Sk?Z*Ay*Y4K(tJ*5A3>sBj_Nnq9qtrVI_A zP_~g1%KgOR(RiNlJT}Dxrh%+^Y5_H{Z>ARMxCPCg&yuI*3!jHtCr#TxMT7j4%1%t5 zPmeHr%@FzrR$b$rWxl#^?1!Z0HuKcoN?9u20UW24Nu{Th5eAL?xUyTx0WA|W2WY9F z?NUxDGYq?xn?auiI(B3@<{Ej+Ytai?_6&#KgeaLt*05;OS7vR2oOfRTF`dk+Zx~2NvZeSP z#O}M{b^R$H#WxQ7*|ZzI89RN3j{R6o=C)LeUN-qfDYcncQxS(b&d%LfV7?4749$2@ zLMTcv|HH>}W;fF7*zafC)BlK9x<6bhBr(`<$0-7~Mjmq4;*Q6@oBdd=Rz9cNa6`w@ zp?r8jpk*lfT0N_X#~UR#c2;~vqKeXN7^+r&OYN`D_im1tNiNXu2y>iRqT!4EDHMgT zPtKwx+~gIUqwK4ja=niqF-Sa)%@1;tJG#?Zr^0rt@Rd3HhmN~MKD7ysO#wBr?iC-JB~_Ao8HjOX~VRzZHB#VxSH zq)HZyG(K_6=n9-ud#13J3sS7Sd)_q{!Hj+Iug3_&6*a##)^9(=ZDSBSxL|l(6H4Kc zNWSI|Jaf_B0(N0RF0En-?s9sPUGE;b;An`y_+G$0(c-p2y&dNj+*H3grr;otM!Sy& z%!q4g8YbaOsrt4=DGRjw13Ia&SpzDcR;|2Et*N|M&Eyy)*^v3+(gAVH3(yE_2 zl!33?9`oqr=MbPwb{S-yN^{6AVo3l_)a?90(ljN9Xu8bRun2ygGah0z7fx;QCuFy6$}o|E|HQ+giVe~lHe zIN!TFXsHvS#a&2qVRfaLu|r1-5w+tdeT+ov;xM{R!7P`hPLMZ3V?13C?ljbTBDhVp)q20lCdem&3GyOb04#WLOJ|oC51h&8 z%mF9{@EBq#e2y`|Cjn{z5uc+j333#owif;7Bjw+F^vb*YC^^O@#`HJH-<>yiT%+Rj4I2LviJsU&ofeC-*1H*GrE zBH(6o{+#BCeHB0Aqau1xkf#P|lOWH=bGI0IKEu4tSu$yAlds=vDT7V?yGJ9)k6$fw zqRiZ;L$HEah`dlqZH6NW{e6oAt^X18hXw4XB@X%yOISK4mK&e~MWwrqWSE=HS^AOv z&;FT+QRyxkiB3M|KdTsyYcCq$gU3k_8u(8tt7TE+nL2U6;DZleKRTO+;!HlUr2`Xt# zawem(Vm7X!JUuS-mveXzssHwzE;55$$NUq7HM7~H4U_VtaTq)Bfsoqsl{&kf%A()i zay(c=%toQ%YI!DWy;#aukbOn=p@t^wl-L5rJ6WRvIk;>t-b-A>GZ5A$lQP z?Qco92#!X9mnTO!h&;WcpH3q5lsQ-M!>_jBVtGt6s6@JOZgG1r zr-47}F)RL!vYmaqeu!`> z$V_)M4E)Q{b=DqyqfQ8Qsy+3`dX1RlOMuT}Pu?*kJ*&Y$wgb4$%mR?(hO%dnU)jLE zz9U=Qyk*mthwn`ER(Od0(^}2u&1>qXRC>&9bLwX4^`B8IZ7AQd>FzX7`EQLY)7)M9 z^v~#qC+cYKS1m%PkgM;E?-o7w`lapM2`Ilis(aE7>WR9(a!2cB;uSujC6#y6Zh|tV zANbkkjWjQ=Q}|TKOYSsxXzqKnuEKNj=C0bi@2B3etU~ybmS{Gc@%^f{yV8^HsrZeo z!Z~B#yavomG|i7qfjLA*`Z7k>`(3`V+BntjHe%Oa~7Y+RW|xLI22r-;=m!jr@{r}0ZSJhkG-aalgp`q0L4bi(EK-i@Gs z3jfbVr}9P6HsAwbj{g9hM;bZ)4e$?u^AN?vX+&nscb7e8Ww;406h3_zLFC~q*IVEn z!M|^Vl_cWKq}H0>$`%qkk#jMWNbXvmv-wK#K~N#S-6il*aKe*Png7tzZ~`?Q>?I41C&DY}!#E8i%u>@wIAq=7E-2;DufW*{HDGH{v` zr3EP6*H{Y7p=3Z#OiwTN%{CLpF9{OmU zD<1jrzC;`Gq64!lK{A6d0tXI6+l)Vsz~1Hr5JPO)nG}7*4Z9^3Q4nZ+Lo(=%#xg!D zWPZ14COh+KW;QaEiVTn}BO0_%~q#6rie{{$*GPJjEBud=@rD zJS*NPZ}0G8|)7aJ1bF2H6$^IPni&DpV> zys(c9(vr=^*KpE3%X&GR-@>2KG~zF0yofHhIod_%+g9$QX{YX=g2fowIyt`${6~?Z zi7z+bkj_cveWa5SvVnYqGj1o?|7;Z@-Aye1o?($uF6pbKLkfAWy=T~1UbD2XW-pm{T8QD4{jxMpM7MlE zWC=eBIB(6rIzDnwuaffqMf&lc@3Q${@esIb`Nm%8&c=Ka{0Y&|qjhr5Yj=lB8-KU8OydUN5mCS22dc|<<|21HB`r|i7BjV=kk8^ zjh)x%cqN=b!UI*@bDsV{ay*Z6@aUN7YTS+8{y?^lWJDr)k3Vp)aAtn1?ZHn3p=<@a z@=#c)U(tHy;cKa2+{LPPFVq(J!#x_-ygMO%u21PR^-i z&BgCC`&MWRA%TM>Jz1H2H`>yygKJr$sjsjRi`wHpig{iB}`$^MoP7Eu+>%6odQor*DYm z+*&|&FKO)lQL$O8aSZ_E1Hg6H{_F^8<-bVJ?;jj93vy7XoR4Z2JG(yx7J7MqYjPv# zvjJzZb({p$V#%-ZvNxW&lE#ZP)q?G9#cdTLbA-yrO=Yv$htD3+@zT1d+3g2xw2|#S zFoe!#ZyqSY@8ttE_?`UR5Zc(f?74R}!iLqYqndPr@WJZVYo7l|5caQbjeYSKLAMJM zHm+{f9r{Tt99rG_OWRm6+v#z3@%^mWGOSn*e~P57$satRi8}<*j~n!s zKOt=bywckCagTwXX?^jF0aSSL^VT;`zh(3eIA9XbX}|N;=@AvBR}DfBLUk18vz;L z_U0e?iM9M(r7K+vEj6?X|3EOYbS;}Brwf@4t+&f9I@3P1;sG3OXf5vfNfWybIHzp@ ztZQf;8u&!ey$0Na>fvOKiSup&G&UTzQJSvlD?D5w(w79`P{ZM0bTnNQ+I~J98%39E zOdo)^?Po|;hxX!w3wbbY|Nn=F}WSAj@u&&o5)9= z3H&vP>!7b{BdQ?l4u4%h@9od*SyDpZGJS^8`EgB$u zmQ1Ac(e25J^eY`V&I_OKdA^L^KwsHI%V`Ock>zwQR>0wh%jqYg;8=I~R*AkOLZqZ> zs;5Y^rqWi};GV8o)Q;@sS@dn~;UjaXL`6bgG#wUhrrW8Zu3_=A)ue9uo=4}=d52@> z)1d+#xu?`kzv%s2*BeJ0$bEojz}tX-0uo9MW} znX_hLD1HBGXF-trV2nsl12h2jIs*w@x95{uIyik?U-=NEZU0#wzmN{TX3rwf0d=(o za?TC&0XzbD2G9YR0Q#DR*wcW2259~r_yOMl|C{^p?F;E!Lh|<22GX+%BS(52U?pJd z>ci6)Q(KJp!yUbnFRxt=h2Kh6+l85Okf*D|%e;9*u%udn-G&L1GHJHx%s0$5! z1~|DEU9B^ak?Rd41UR_CKwOxumAj$I#|;Q7kz>kH!_lV@i@!|pxx#66&wvedr0E?5 zQeFW3b-|wL8|d8{(qPU*4D+tRc{#&K F{uc;%4bcDq