From 53d65251e3af408c676dba31ac1a0619abe3ff65 Mon Sep 17 00:00:00 2001
From: Thomas Carpenter <strange_orange_fish@hotmail.com>
Date: Sat, 8 Dec 2012 23:19:04 +0000
Subject: [PATCH] Added support for changing goto speed. Also added support for
 using the Pololu A4983 board rather than the DRV8824 chips.

---
 AstroEQ5/AstroEQ5.ino                         |  40 +++++++++++++-----
 .../Initialisation Variable Calculator.xlsx   | Bin 16658 -> 16841 bytes
 2 files changed, 29 insertions(+), 11 deletions(-)

diff --git a/AstroEQ5/AstroEQ5.ino b/AstroEQ5/AstroEQ5.ino
index b52c4a8..3bb5c80 100644
--- a/AstroEQ5/AstroEQ5.ino
+++ b/AstroEQ5/AstroEQ5.ino
@@ -103,7 +103,6 @@
 
 
 
-
 //This is the initialistation code. If using the excel file, replace this line with what it gives.
 //                    aVal    bVal      sVal  scalar
 
@@ -112,9 +111,18 @@ Synta synta(1281, 13271040, 95493, 16, 92160, 3);
 //Example for different ratio per axis (see excel file).
 //Synta synta(1281, 9024000, 9011200, 64933, 64841, 62667, 62578, 16, 1);
 
+//These allow you to configure the speed at which the mount moves when executing goto commands. (Lower is faster)
+//It can be calculated from the value given for speed how fast the mount will move:
+//seconds per revolution = speed * aVal / bVal
+//Or in terms of how many times the sidereal rate it will move
+//ratio = 86164.0905 * (bVal / (aVal * speed))
+//
+//When changing the speed, change the number below, ensuring to suffix it with the letter 'L'
+#define NORMALGGOTOSPEED 320L //This is defined as Speed with the letter 'L' appended
+#define FASTGOTOSPEED 176L
 
-
-
+//This needs to be uncommented for those using the Pololu A4983 Driver board.
+//#define POLOLUDRIVER 1
 
 //Define the two axes (swap the 0 and 1 if R.A. and Dec. motors are reversed)
 #define RA 0
@@ -195,6 +203,16 @@ byte distributionWidth[2] = {64,64};
 
 #endif
 
+#ifdef POLOLUDRIVER
+#define MODE0STATE16 HIGH
+#define MODE0STATE2 LOW
+#else
+#define MODE0STATE16 LOW
+#define MODE0STATE2 HIGH
+#endif
+#define MODE2STATE16 HIGH
+#define MODE2STATE2 LOW
+
 void setup()
 {
   pinMode(oldStepPin1,INPUT); //Set to input for ease of hardware change
@@ -211,8 +229,8 @@ void setup()
 #if defined(__AVR_ATmega162__) || defined(USEHIGHSPEEDMODE)
     pinMode(modePins[i][0],OUTPUT); //enable the mode pins
     pinMode(modePins[i][1],OUTPUT); //enable the mode pins
-    digitalWrite(modePins[i][0],LOW); //default is low
-    digitalWrite(modePins[i][1],HIGH); //default is high
+    digitalWrite(modePins[i][0],MODE0STATE16); //default is low
+    digitalWrite(modePins[i][1],MODE2STATE16); //default is high
 #endif
     pinMode(resetPin[i],OUTPUT); //enable the reset pin
     digitalWrite(resetPin[i],LOW); //active low reset
@@ -454,11 +472,11 @@ void gotoMode(){
     gotoPosn[synta.axis()] = synta.cmd.jVal(synta.axis()) + (synta.cmd.stepDir(synta.axis()) * synta.cmd.HVal(synta.axis())); //current position + distance to travel
     
     if (synta.cmd.HVal(synta.axis()) < (200/synta.scalar())){
-      synta.cmd.IVal(synta.axis(), 320L);
+      synta.cmd.IVal(synta.axis(), NORMALGGOTOSPEED);
       calculateRate(synta.axis());
       motorStart(synta.axis(),20/synta.scalar()); //Begin PWM
     } else {
-      synta.cmd.IVal(synta.axis(), 176L); //Higher speed goto
+      synta.cmd.IVal(synta.axis(), FASTGOTOSPEED); //Higher speed goto
       calculateRate(synta.axis());
       motorStart(synta.axis(),60/synta.scalar()); //Begin PWM
     }
@@ -528,8 +546,8 @@ void decellerate(byte decellerateSteps, byte motor){
   if(highSpeed[motor]){
     //Disable Highspeed mode
     highSpeed[motor] = false;
-    digitalWrite(modePins[motor][0],LOW);
-    digitalWrite(modePins[motor][1],HIGH);
+    digitalWrite(modePins[motor][0],MODE0STATE16);
+    digitalWrite(modePins[motor][1],MODE2STATE16);
     if(motor){
       if (synta.cmd.bVal(synta.axis()) < 160000){
         OCR1B = PULSEWIDTH2; //Width of step pulse (equates to ~4uS. DRV8824PWP specifies absolute minimum as ~2uS)
@@ -569,8 +587,8 @@ void accellerate(byte accellerateSteps, byte motor){
 #if defined(USEHIGHSPEEDMODE)
   if(highSpeed[motor]){
     //Enable Highspeed mode
-    digitalWrite(modePins[motor][0],HIGH);
-    digitalWrite(modePins[motor][1],LOW); 
+    digitalWrite(modePins[motor][0],MODE0STATE2);
+    digitalWrite(modePins[motor][1],MODE2STATE2); 
     if(motor){
       if (synta.cmd.bVal(synta.axis()) < 160000){
         OCR1B = PULSEWIDTH2F; //Width of step pulse (equates to ~4uS. DRV8824PWP specifies absolute minimum as ~2uS)
diff --git a/AstroEQ5/Open me first/Initialisation Variable Calculator.xlsx b/AstroEQ5/Open me first/Initialisation Variable Calculator.xlsx
index 9f38db7413040d2670511055998e106d233b631a..33525d165f576a1ce4c76476a31892ac0dbf7cf8 100644
GIT binary patch
delta 6688
zcmZ8mbx_<(v&ChBAd4*S?he5rSkR!s3GOaIe?V}D#hn04u*EG9+zApa1PLB2z!HK(
zc=z7=>fP_X`D<#Xt82Q?sjluh=@H1|?~ogeiLlGf%cgmek&up|wO|TBfak5NOJZ8T
z<{%$#^qESx!mfntsF1AgJT^az7#;mkhkf0=lG=8<4Q02KTcw7C*TmWKt;-WTnap&&
zRJ6mGT8<4m)^B0qk#?e`;+lL+0)F-lHZ>aN2dhX$-w=HoHW%xd95irn#%#sH%!T9<
z^>Y%zqc7e{x*i;!kQGVb3Rz!J+DoLDJHBg;eP>H0C+3My#aVYJ{isl(I5{=UfVoJ<
z50;{xnY6Xmkc#zzSyGd(exmUtyI-Mu)@s>Gp@o{LJ}EMySh?jjzGUgm@($RTb1NWl
zMl(2NNKQ~dMv(V1u9rd-z<)1S=O+>}yM?Z?%G?&<SL9HYZl%XpZyc;!Dl833$a9WQ
zypOVe`~be(Il&!@)?x6Ee=b7ut(ze~V)n%$F)m|KZ`B<tG!26o>MTtFbs_>ckAPW_
zLGtD_@)LMSNDiXVIxsmDp9Bl=UQr=>3e~@s(XL*|EF3Puj2)$Dv+AQ`Vq%^C{@pNQ
zFDD64TDxHV{<uDfCQliMa@4RL`DtN&zW(qqS8l)e@zTR0Xu|*g(ofK%JNkIx*OXIG
z^Y>tCv0k7@^7wgcNaNZX*I9dh@a99|S>Z<X)5GX(%E{^KAD)>63YBHxC+4)-E6J<;
zsmCK8;Polx>S!>kmRoyQj4d*7+9PtE(iI#qm_u`#-*X&26|)z(<AMFS&M(l`-hQkv
z{T<#Tvzs4*^KI{X66N>CMjh?-G~&SyZ)Ub+g{PNVjJEraZ_Tk#%)ZM3P=7%ibP`ne
zI<#~8>_R_nBMh^E!uSfX?Rt!kB$VZeT@yqh?ldJit_;rD*uXDn#Gk(9r9|r)K$`MG
zd+ee*Nx$88GVB_6&)zso&|0N!4t~6ZhrL-H>sk4Z%Kcyx^x9geU}f+ZFMR$E)`6-|
zvF_JJ;wRx+*>=~%+lCJyFpDhr6H7>~BWGwII?sf=vncOoF3^Dpd}(Id-9bUrRy5RL
z5C*S{k7PSpcM1JLzfh#sI7H~dZPmHA+?q{nOV@+uFeBMAQp?e_=F6|uLilxri6w~7
zcI(1d;R>w`(>%kjEd@K$Fxot704I5V2`bmmYqfw7+mI)XPn_TR<%026faXSV<?XJ6
z07DTd?yFR~;RrCKD;K^X!BJpNPI|+jf0g{wgcfDoK8y6#wU`094y{^ZPU}qa%I;oR
zX2yBb>t{3mtF*!&(&;RpI)?I&ufIUdWhun=;=3-7R)<MBL3(v0Iu>-|sq!qyiI?Y&
z2Qm9otZc71<pj5d5bmnm=q%$o={K%W8+ld94W?W#A~S%j-ZuS(Jm_tQ-pE;=khdHv
zEpyU-u8?O`LEn4TY6q@NG7=$b?+<#ZeacmuGfd-X*crR&L*8n6ERk)Ayl{^CSl)E}
z0>2bRgE*Uh+VdEC_!}*S`Zu>}+?J@ULpA{vex?#75v%)a+?+bP=VBiy#JBNF%W-Gi
zV~U$L=FfrgWq{VK$n*xaJ(MWY&3m_aiT7dt`c2JgQIV+otGJ@$cGIr{);y8tX&+0;
z+9=#+Tv6%&%uM{~usR@)zRLHuz$0!84A0zAMQ8NT@Zpictvlewg%8I(6@;bf3Z)x8
z-Y;U0Av$0@i5B)LPreopft$C;Z;y&W<_bQDbQb_Bi!JJz!DDSXmA-%oJuvAXAKD>J
z5Q321I~0(;ANO^*K)id>SIRA0Jj5R^Wq91<(DPI0qo{XRk?}AN)HtsrNJ2|8*OlaS
z9%07wvwAJgik1sPBjplKs8a=FQy}8sH~!Ae7V@gip~IFVMN`F2Ka72)Uqbo8<G5cR
zbsXrg;a+<EUQ`KXtB!@iIzk;wfCTHfH`kCcydgT5-aBFlO%<z&PUU54BAp@CVWwS3
zOSl$=r5HihSA}QYCL3$J-PZf-0#iD>A`j%}6Oci#L6C)_RNhWJ&sP`WW8AuulfZWd
zW3EmlO-8tT0?_z?TDn0do=VOX3Pjd~5edNfL+5oJxjj(M`f53GrTQvR>Z>`exH47G
zsD7F_T3ju^j8`?+!yd>^Pqo6XX^SGK!rcSUD<95p_o?E^6mak*@Qk_jNlWU-zcgOR
z@@?C@Hg(4SxZN`0ZDiP~@ok*J!*xD%&H=S`fl@O(^cGK3&TXDO%#xH?!fuC6O&Oq-
z*3!8-8>$k&9IKb`RbEcGe~`xQiSR}f11;}&Rj!dQ4aHlu&#7TyG-@eKsyb%lk^0kB
zy`bnw;`5OR9le%Zo<=vHZOqF|yeK!zw0yG@kd;!vd|Z_I4P#JJVuE%0S0j#8(k$13
z$j3Kbd#zF%QMUE-y7A=U;Yxq-!sP%rK|U(Nn%Qu~kaA?qA~Ok<g8kZZkDTL(n-e#k
z^|@r~c!z4}<YqVHSA&jN)yTTJX7)m=9l@VO__w%2PmwE&CK4I8;;9NVs|`q$nn1`K
z^T5j9EZw=p=U0$B40OFPmmN-8nO&=VJ<kSanpx&A;7{>O)+$&-na&CB+&qA_B2!mo
zT-b_RC)@%wW;j=g0vc}OU_tk(1@qQYRvh1*X*AZJoNs_XSQQ2?L>VvDC?lTw>J(so
ztPlHJ{>#JNpK%itA-N@sq{DKwqZeJ~pK7CprO%v7jJRzM_2y9rNW*f4*tn*W*@P;!
z)k`DgaX=Ns6HE(o%%5NM8vrl0GO{%}-X2$Ij1$sW$pyBy!lCkD?5d()I<g)utWX<{
z679?Pg4k7|eD7xq<oTnBK-_E@I&5I=80PxJKKsDwi87iM+wEK$u~b^E<4WAOme<vr
zspg(TFJwI|X|kJzwI?Yjzce!GToBk%&a)3u@6690ox`@Pcwa)w&H?T!LAglfn7!Gn
z5h0=%sq)N8%=YGTRww)0Afg&VH4c?$+{ViWS-L1)=szlOgwQxU^TrvGTNPWaLb15^
zM$%QzHQ0nm2xu&_iV$@?zAUkuFJ4XOV9`l_62FDW%jn)$_^pe(W+mZW?Y}8YvVYur
z-k+GOh6lOmI-oB2^cE=mG2VsS6R<~)M6-jI<VKgGG{&DyFc=sLyI%Lo-Vl2*V7+?&
z2+;zro&6M1-xYnz?}g@P3AS&w2mJ~gyWAWaYZ4{gHX2nL8k`Sh7#=)_u-(!`yBsN?
z;bp8kx33hMi(;*~`Fp{BO%{xOaL`{S6eUFvQWCR}a8_D@Jb~&q4pXpdMM+f{BG?H1
z+fjji1eUa3s^Sbt)vU3Mh>(QhfbhgXiI^vE<-rHjFEMK}pc~`aB**%mWOT`wdBkV;
z-w|+J(^=PmrEl0N6Mgia3iK|yNc0|t+nsU}4sv17k=K;bp@MrLL7`<f!>DM{S?<=b
zL_`BM8KaaC3ZV0+K!pQ?Tw&{>h9Z6ol~sH4YplFANQ2EswUj-|jyV4R&<1zRC*#YC
z!s(}3G0SNMOB5`n+`Dl7a^-jx*q<DEFvv{D;bkd#6a#3AomiKxbT&esJxTyoz%2eA
zg?p+~tu*xABx3I1;wnw}MBf#iXZQdx4=H3dREbcjm)?C=6%lR9pg)^x!X&p-V??GZ
zVjb6v@5q!^THg98mN|`wy&*57JY7W}VjxTwuVQD)L2rhtHmN>$fH&LU#bC|rH>AE5
z1XpNRd^p@XW;lP?3`u(%iWrEMxo#yzJ!7VCuMK)1W<iX81Y_%~dB6Fgi-8_EU!Hsq
zLf4@sMxb`^f?DR=t8vOeb~Xi&M16my0)A~u0|+!I;@He{ilNB)nyWvb$Jo-@^c7JF
z9o6$eJKWj2Fb3OPW<&0Dm15~#xFX?rE`RB)o@|ek8>6c2XS^DP98LyyDVVl=DSDI+
z$QHwf)M(AcQPIHf`UVxO;su0QbJDw7tCeC$!B7MW7=~*8yx}1y`8RnWGi()&la%LH
zAIFyivlMZ%ZnMu`^||f6)U9r9CDIu5)ET}?aMjVMTE2Cn56RTq&3q$TVYPbGtP?O<
z#SAV`KPL~^%pv2Lo1qy5(%*l((p`N+`9qfc-q9OU??VKbh;BtD-D-S3M^zdgh1gP?
zUrZ$u(0-^Q`x`!a*@o3@U*-yJrBY60M{fmXbwex8duT2)X;m;7zB_vXS5Nk;2!L^$
zjt^79nY0;x&wU_85ilJm7iJUupe`D&D09NHn@Mi}a+o<wV&iycJXdl+`aRzpf76#F
z)BCB_{eZVzxiI{ns=`#>R`d^BxOJT$ow@G`=y++)Cu@5NVhtjcQ0A;8VY89)*~ED|
z4oao5^4{3&yu-vVnacg}agcB0`75;TWMM&z15d`+=4dVA1gTr<niX>3m%jf?<LuO5
zs_LaL<Ua~_R!0kBXJ9L7+CB$#TQTeXVc%(DjmGFhNI@^!6J=FpOa6nEG0d3wjnOy6
zm;wK+1fgA@o@{D}7s@nK`Ljv}WXB3y9{P1n9`ghZ`6^Q4m+Tqjsg9LSc{zm@o`DKX
zi8};0>g38LY@4aDtN$vTf^_p@i(R=RX+19Sm^y&AINlBxF*e7b*k8}(uXxGUQlkB`
z^m7>Qj&U_qFwwfhR4`x{t^81|O#4Ntc$5{0nb=sH?Vo5pm)|%{cBxO2o=LXsxp2_^
z<04JY_F2Upcs?cYjQ(MaUgNY@v1Balb7?KCq9tC4Nq4PNL7GB=kWJvjUuQh;0jhX^
ztQDhM;sVuZ25lSdT!pQ~%Er8be94uqch9qSK0lyS{c#Ss8oaGpZwoUFLQEBo?uFu?
zU9I63Od^Q%``fdZbN8<%i)B%h`?2bOO?kC{kMCU$k{S2A<nHbF4~2lDj_5Z+Y<ZDS
zoNG?5@#6ah>xq8&>yh<*9c45s1j1#=Z|kJpP7lFiTS!IKtYnDYi2V;znzOx|U;UQe
zInKt=TF%KS$<c;ZtDdtR3~I5kOaBT(hF2YeZ!{EXc^eMF9n_~gd+v+SXDZewHqCkv
z^WZ?!&?&OX^{<z97F{#${Z$Ajbkpl|!}8^86s@W)$`-Ii8+!K>)6>UyCZdyGHyYKe
zVZlA?^0ULVe3BENrW4LmQc+TFPXixiZjdR6mrvaA&Qco<M>jDYSIrtt;5d-_-e{_C
zilST|2*2f!(AG5)jyZw@BK?KhUWY9Fz9PHZ<Tb<-G!=uSxsZVh6=>Bw77oWmLVBl+
zg!I?=hxFEk*V`w+#n$`piF()6#C=<gIMl-NNg?Cf5v2m%pw9uOW5_r)o$U8<t_Q=4
zPNK7f$>;Fl?$(8MSBZ+%H_R!(0cuGL?B5j3jAru%0SMER+{iTWjdzHL^%2FnVfe{S
ze&?U-`JJvfxMCx)x0*$HV*~F^RRMZ$F0+k@dpmYlvr=Eb!;;B6UKRWPXb1V?q$bJv
z5!-KQRP>nccP*rSYb4f>zVT<Q!7o#5hrH`(d-0y0oZFzYFA0pUBtIV^V#z5&f2LR|
z@z0b$jtonoi8SPhvfLkxSlKZVkv98o+DE_$UeI#ceZfBgzIoBx$|lsKh+?%uROn-*
z&bd<%MEF_9TnaIyCMHEYJ%~|-yD;|bj0-9mETh%#s5`%bDKEIpw!+pNMKy(qj>={H
zdQl^HMIg3M1pd&o%QXKVQyxNv$)l)u<XW)(g{uKJq8NdxlplpUgI~q<<~EnRg=GpV
z<XTG|`E+CfNeOs<TB7PWvKDD`A;~DyZ(7eX=C4}3658+Z=gQ=45MFo{qNSGtkniJ$
zu_#{~+2f}aic(=!Dfy!Qy1{O&^Y>dm0({C~mf&1s|KNNotPg~rRpfpwq(-eJTH+!>
z`yXuta+BRK%LsS+{}8U(i*!gv;9L%@@40Bd$@vomJd9QSNNN}bJ2`N``6yCR&-p8n
zbJZmUSmH>VZ3$LXy5<t?-{Mnj&X5Xb*IEyGAGoyr2B>}_{K<zrH@61-YBe@ZczBXp
zl<ta`Ui3sSxWI#k{H|z*e%VywCX;Hcq}KK$_{7plkR*q>joxv7t7Y`DcVHSer}uI|
zx=`5$X2_e!Fb@bnlLu8R&&vw=Ym7g0J|68xy>n9}3MS<aLEUz$Y}n?`$MO33yh(Bb
zBL3vgQ#*Eb>0m=ipg^K&oe2IJOp*FpeJRt5?-RMvS}mm8i;`-coUEzLfvn~l)6_+C
zC86F+Gmfg%GR5l_!=IDP9dzs!V6<+D8IAS?NF+5@Wl{>T8HrVil^*5=!(0+hVW&qA
zwrJ~wsL1W>Bywp-<!w^mH)X|fybMp~`MRU@rZ8+e$9|TkeB@k3>av=>I(oU}aE$HO
zVDWMHiJ#ngwspc3?^B+)((or#Wl4T*tbjYT9E=b}c)I##BTWMX{60x@?a7Fi4E;a^
z7<*H=iqe0IYc^iqMgN;<GIN}{`00X@&33oK^P70%j+<BO;N5Z<8b|HS?kj3%=OwrO
zp4ke6j~4@H(jC(y*D4<`-{C<*Yh2&W-XbR*PEUb0z&%@Dul@PevE^OMo}!jc<ER=&
z`~0GD$CunTY6n7$ZzsQ-q$AQ!P*^ZB0S}tmU{FCNSMz}m0*E7x2AQb%vE-vP?*g{m
zyB>_E=vnMHEd{b%EjVaJ%$k`BmgUoJFPN+ipN038ST<!OQ`&@232YzFbRQv~v)xl*
z@EZ+3bRdmX8hT!Kj5r|`KNC@P!KuAUt1Gt`;U4PaL|#g1Vh(Ff+ICU=S!<jKSd{cE
zKtYYk8ggkG0-RXg#MZx5zoE7;v33u?<tB?1S6Q|r<WF-VdrRGej6sk#9-mftsacG{
zbu)={8;fO`l6qtcv3Flka4IHcNEeWy41=rLag@UfKQqN)OJzhe=I{-o-DlEOAs(01
z^)T^01Mv{$ot@Tf20tr&3n0Y6K+{Bv@F`2ld5`cJA1x9k48B$Z2N|9sHHa)aKnx|G
zYhgxqdPuy(=KPKaKno8=`f5B6NEs~#iho-=@dq4HL?}+g@Md7Clkc){F5xBdIbzR6
zZNK1`MNZfg=*5W9aRqgL#xL1rtCLLAf^i8;>$k<`4Zrhq)mgOE`&a<P^h+)_5ip63
zyk$wzBioB&9(B4inWyJ?TgCp<yGIWxZoi_T_gN~QGXy=gRd)kyZP{9H@*2Kb9P;Bt
zKf_Sw^f!8E-Z9zTAK~V*B0BsU=x5GIT)&AQLG~5ZaJZ>#u)%kyC<x#Dc`aWheC4&T
z!K?fhkyobFyEw^xX7q-D;Big6SLPNR!^>=muNE%FQPu$~svnN*hSlrA1Yy#S)jL+&
z^p7>^=}n<7ig~StEBmjj2g1J2^^axGzpBisFerP^*@bX?xq8yR?%Ad3{ch3!t_czZ
zXmu<==V6<0RA0t9VFz9MTG2J(MZzsSHmHdZ2H5V_Bh&YLm;m4_Cs>>QKsgKJVg1Bb
ztZ$z<hWnh~v@nqDq~_0J7aMS0Pb1%u5mCfHcW0=zzFR$bu-Y4V#A0RtDy6V-xN2qX
z%lbh7`VOIK(w~)4(<k{9*^lD*W~bC-^(3@23wAMn^z+g-qhZQoc2W1g4RyTs!-r+!
z2965gD&SB*CMfWfK5;h0O5gV-Zpqmh8$WWdJC-(KB!5xN@!pWY<Uxfz%=Q9hZ8lr;
zAY9xudPuR<{ug_IP&aDfV^@lm{o}81@!K=c9>Xb!6WdC6002ZoZT^LED_U|h*q33X
z>HJs(nEP5kZ<BMVE*!IGje~jlP4%a>zdTH1Y3X}XaWbpL^ySYx{41C+(Np<?;l6lm
zZfs|f833#Iw*Hn!k^AZWRH&5wIr#4nTXf5za8eQ|H8&S<>=gEi?@NQC=VL$^#*sWq
zl(yCHlfqAjZG+4k;@)=8Qcr=HqQ`@8er4mbE)13{3)b_wx)>J4TA~t`ey?D!9vyrz
zfRzF1-kz7vi(gafj&KLjtOXsiZ38#gmg;CS))S#3AA(aZN=SnXwAM764U$}2&7+G(
zU$yL^V#pQ&OD@wTv0zJT8sxRKpfwsI)}EohJ6W&_iho=j4=3S^%p#7RgtSvGDUI1w
zD}Qoz#2z}C6pjnAsa}8tC$GO+@Niv1ra#l=<%8<OHVL}B7?D`=!ntNYCUu&Lzno&d
z1Orw)X~Yj|gBNg>PKKxwTYP&WpEORLyT~qD!6(eWv(aqIBaMxgiR`Q0TqMeh3|OcQ
z@(~Yjp!X__2j#=Obrn{_CyJ=B42U=6z1m6gWthIWZG3N8ce0I0>D*u2kh)F}?#$Ns
zjlQ&KOcKk)9xv<3?bOOWtJWItuDvU%8zF2g7yfK>wyC>&th3bA<ZaVR*rjj>TWUtx
z8nMIvr&5SS59+un5fw))r7QEr7U0;v%=f3iEv#9{%o4i@`v>`HSR;AdK`e3bi#)B>
z-$?!ZLUeKgF{<*2l&|kHPiLadbH!{=@L7KPBud!gNXM21ogIByZgZWRzJt)q^t&IA
z?uRaR7_8Tcl?ad(c;S3@HZhQ(o=)9St&*@9EU<`Cb9W-}kNM&YM>C)eL6V7xm4`fk
zA;VtZd>`W!HNnMfR4~26RWlYbtrO_`_#N-h;zkrD=$F_Z83uY!k@}`EliAyo$hRmN
z;?nm7d!qkzgk;b4(EdwV@sTz}X#_(X!4%MaX#%Q$B?2TQ$X~7Ezw3_pFC&t_L<4jv
zw+sjJ9rU#fE7kw+EdMnpWr60)(Ef+cy)q=o1JFeoDHL>Gs1px6R7#cu#YqG@BTNbf
pWC^JLMp)@Dp~nmb35oDuAAju>#Go~@QpkPKLs>?QaH+rV{s+Fsju8L=

delta 6221
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%0DX;+eKkK=8*4|5$
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
JBU1mE`!ALFqt*Zb

-- 
GitLab