From ee0a9bdc4ff6e30fc2fe7f53025663c737a5e37d Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Fri, 2 Aug 2019 15:23:04 +0200 Subject: [PATCH 01/65] Update muxto bootloader to 1.0.6 Should fix https://github.com/arduino/Arduino/issues/9112 --- firmwares/MuxTO/MuxTO.bin | Bin 12080 -> 12220 bytes firmwares/MuxTO/MuxTO.hex | 1443 +++++++++++++++++++------------------ 2 files changed, 726 insertions(+), 717 deletions(-) diff --git a/firmwares/MuxTO/MuxTO.bin b/firmwares/MuxTO/MuxTO.bin index 4b53c5d8a5d510c57144344553a5128a26b2563a..9f3dd81946a5a177b61314e954f3f5d2cf13b46e 100755 GIT binary patch delta 5571 zcmZ`d3v^Rew)@QV=0Y9Wp~MvFe3Vbn2!L4oQ#6nybB$aNli+x+g^=N24it$A5% z-+S&p`*-%)XYYM7c*|?I=7AZ68{7acg!yjz;`Fjx*zoF)jl)-_+4$c<%@usa25=bR z-_iUN*MEOmsE>faG|ZX{p!b=>P_2vV+VyR44&E?FhFjR&eMrORKed~~Tw6N_@*0)R zwdp|!v;vsJdLY2Hf&5-Z0CR-l870WyXNHG<{QX|$D&J`MhO#Wk4FSkIQ%1Nrl#k@A zQaX|Mj>T#b`$)=(&#F}R;yD(#WnVAIPoypmk!vpu9r7BZ=_!+4CxE;u*=H9}`Ud(D zS1LY^^o)ne@&gFZ;@cc9@ty7^vkcDZr#X2KE!N#Wfz4~Qbi1zlM_;e##6mXr7{ad+ za*!M3Z|NnSy*QlcL%SDfJIH7P;T+U|idO1p6z3-8A#`*C_z;$pM~axfTfO4NE2F@aO<&SoaD zPvA7JTQvKh&YX**57GWz00P_mK-d5vuS@8mPjCT~-=1I|-JA$S6m5+n-EC+mi|8ps zkH~9t6$y-fSxm513khd7$fYPfOVjfq?KT#Mn1-ufG@=%BnAmYI}ilg3B6C> zX5FdxStKHVoM!R811&nL1ECM!Px_RwEeO>RJ$vqnMNS~{aO&}e#F)eH)63+dAs!7pH(uvlR^^A3FP#F%06(}QCP;XWLzva0ss z`;ZwCg9!ew#&g{hM>bAaLPFD;SoBX^L_m+xL*x}n_IxElZCcsaN|aDZA5-9!44R67%MPDK7ikPCV;+~Q(u2$!Ug1E zov3%fLnfSEl29VE(Xn6xuZO*J!HZSay8y>b#;EQ{MegH-O96dnVhgd+iFtK}|CKoB z7bO8!_3Uc}r|B$_|3H6|x2*h?lo@lI&JH~wAJ@i(=mEn)3@@P#hvLf+|w^` zuaGi$y@PY>0$e+*gbi5v4k7+F>dG&zab$>Kj@YX%$AoHgEU!Jk&3Zk^zfV2v$nl*3 zi`4JsVk5mHSr<+b`73%)zP<4_H2DDX2U-=(bHzaViJYH+DPQC_SR6BdE`VA`cC&SP zAOfybY`EgskfqH>-s1O5{Gyi(Ri66h{eDxOUTPy*_M(n1Kew9kkj2OpuyZT+_h=;D zc^zHd<5OmwLA;dHF7O4OK1Zi68%6Aw_U7!>?e}{`Z*O69^Tt2MA2Z^)P}N`U!8Ms_ zT|qgQNz%@O9ieSK_h37M`66ZnX=X!EYEki&k^$@;nz)kGQZb+}yK38X4*$Px1ZI zgf^4g6!P@h+jXS5-`|h!+Lg0Q*Y9^oCwY&<(urwLndKOjUNMc$fyHTGG^2k`v{EHwq}_U1*`Y}oJ3IU_(<$$8$fj=0Z+Otr^{2o^@ta52tiKZ}7V;*8XCuv=A@ ztCfJOx1*v)(iE;=S@M_YbpdnmmNIZM^9lk?`gZl}xEo|lVY4-(j%r33HKR_2hM?+b zGzY%doD5S{r4AixheP#+(qLWK%SBC?)JsoKkRJ6ujmo8#LO)Yo{DbPFS5!l6PyDL# zf*+K(s$XHdcM~qCz<;OP5*%O9r(>kyT{P-^T#IZ~S&Ei1XXapjV6m<$tyeJLjF}^H zc>CaFJVFMuons&YC5Q*^iyI^2l-=uz+Ji5XyOoQ3)8!!dAv8)c*6F*3lfAlF`s zGmdw#)in&t*jjjdnxzv%1(*y>b$m!_C-eE^y~nezIn{~u7`giXT&T*$@~0|aX4Xnp zX>HHQkjcG@oa94}vm2GjXFX75k2!!$y|cc1oz(Jqcb8vPewC@fjAduLK9e*Ztqs?8 zmAIn~0WNrJ*@>a-Kz0zS^eB~WNhI?{ya~REJ0LVzU*HGFXWb4E>ZKMYXnlrEy(;P` zijp)@dH;{7eOE+{ht~4Uv+=_49W5Z{LbUYcMpgMLB}zQMzD4k#?wuUbx$(B}aHnrC()=v0SOjb7}VceL7?prDK9M*az7j zYe4U?&>M?f*6o-W?nA(B@nGKf7(D=EGXNel()~sCMrPteMtY)Xu4XMPh56Vf_nO1o zyxB1m%B{jSz!1}QkXqU^kTam8-K_F3HYGd}3Se86CHD2utcBXy?`dp1OiWtN#G~Kc z&@M=K@d3NZy`p;+8PAg*El(;DuBtOO-S+}SSAvs^>ZDa6tTQhQAaBj+!R1pcbbis- z>}SE7Kk8z~QS?hveVylE_wC*1yTx^D*R_+vz_Q!uZ42rPH_hjlZQ3pI9f!f{85Rc& zh0VMDYkG82y$93m-YkcyuAO{v^CQi#wdg9>v=ldgu)Gq;exb3GY~^o6N^A`4JuFa( zW5Dw07EHFARAo-u===N9=i^TF!=ltPKO|c-Zl;7j9i;P%Eo2j2Ra|Fe-{{l5#Z?@> zUN7!6GAbNS=C3y}cbVx5zLCv6$WP%iX?m1jqX#*nQmf_qf`^cR?b5guMtr-amHdJp zwlwB`lyUir?JKeQKarubrG-qVjn+A(jD>A3%lu4!3ag^Wn-75k0>7mF)?)6v41K{` zVH_u*A6lnP`%|W&Prw`r)00s*Y_VX9+lQw{t>I@{FUR+w!Tl&{FG9b8PPYkU16^Xf z!Nv-v9L8!;xqXoLrt6f8ynk{?0a!w9reoq7Y-BzybVI1PHa^cY}JE2y~FE zHpPzb6!G#CR-4QA%^w~r9ITCy>YUi0cb2yoR27^)fsvhu2~Jg7R3co8gP^Padu%uM z?gpeOZr4>^Jd+*#CeBqGV)yq>YG;(I)R8!;=J30qr5$fg)qjndedKvwQk7qf<@t2l z=x1XSeFkl`c`V15rHwX?z0gaZ|0J$04SRxf2=5_WpkJ2QNe9g-EhTSLSLx<*SL)4p zEvjl&--r`&a>v{8oFE7z#+UJWt|}+!8>QDx-hmE!@X9_sjZ)a&>@(85GJ*Sel-8Eb z#nW?lSt+s82g-iEbVu^dxM0uj=*Rj!3uU~XxD;0+%x&YRaeQA{I9v@h6^|ur^jK+P z$B$V}d|ZdsA85sh+EVTa&Br`EsTKnYJ5K@MuVBw;4l~SgZG;>e{!P3&jKzeWj4}^f zF>{#FzK#@uun|+lq?xsto1RFDQ0uk@u`X0+MH%LBGTX_0a&Y};>#cs)tBy+^L_Q^4 z3Z~!Ks7(+jEWe_ADQy+(A^lv|j$@pluF*6&i=tDppU)^+nMn-<+i{TRT+zd{uJ85AiIIoS(t7J>^&@6i+IY{T(%S%rt82giHB8*1Z+(oK9FyKrR@qmIiDGy<;Z>5jKZS zct@c`+=YJJNv!)CeJg8%1Fh_DihD*uz7_v?7{zm^DrZ%bR#%2b*$FEc%P3P3n#S}# zs7^%LA7V;;c(N9QfIlYScCEbtc|AQQK7!YXBVALBgu_*>nd&6QBfFqmc?*3E(OTFthc5=}LZov=3V+`~yh-e3V|Uc#3+R zuW|)rG~;wMNJx7Xf;h&d`UvpoggZvrNzwlcZt^&e&UaOYwEsz5=4fuYh&Nz3dx2*` z79K4{S78?#TkD^Mp^gq44MYxlC!DcMetw(xe`CC~N}A8x{olk3p-X})5`D@$cE%#D zaYZLOa4w5e_1hBCM_lsKK|T_Q?G; m9NvSlvfw>KHK9N8FWFmZ{tUyU_icDZK#>!W@B#C<^8W+klG6(S delta 5363 zcmZuV33!uLw&(s?n(irWX_hwqlXOX2TDn2YBBTkHwqaB7lij3lf8qK3tMjyV{9dAf z7Dj#GMW;h`bPyNjIZi1?pEE@3hPX~b2Q5}d1U`fM7=G8Z+5UHK3ZwJA$@iUm&wuXO z?!D)pdv1o6;c53m|QetKs}eF0x-8S6Fq9 zsZc#qY21cwMLc80W%?%lU_VGh@$)03`RvHE4s~#v^2azx@5a9m^Dr6Uv;d>%sOXm? zugXRn2_hb_bb|Ci94eF`M_!Oimz&|4t3cWjCv%mcuKPYjpCZNN7Wz7=BAe)WQrR-C z!pO^!8)O{{x5c4c2}LW!O>$(DY(|$_<75sB*M1+$L9W#)S{-$9C8U)0aHUmDgBG1w zEORbhpB$;gwR#0<#G-KR6Tvdr`>`l49c>?_hq%JL>bS z@-rEx%MHLE#a`<#c8&LwR+X)8oRc1=MT+aw*?5YV?oibH?CT|kHJ^>(k=up&$elJPwAmb7JnP@*mE0wd0G%;xe7di^kRFtbY)%%=7Jq}VQy-8_YJ>8Uoc(*M(l-VIiK9fPZ z0_`i!b^_8vbV6w+qcowcy1pVRM_!YE3@a)M?^tt3CI-V*(RxQT#B;LQ=42XuJeQJM zpYs1e@>Cet5dGf?z_ZO4{VD*dJE{a9Uj7*xAJ=TKM zm?etQFO^2wtc#D|lpTfv zrAsdmX?KFf_dV#*UlqXnuz$=I@f-V~27(`+dUUxBi1ds2Bg@pL{2=pfJT~l5e9W-1 zm>Pb)vJvJ13;RFE7>0DO^jVAz2V+cxiQf=sA`J83x%pK}gmKv8mxO((scnkySh=8Y znM61h)4z#!i9mV5v2Kx(b#p6T@$+JtVDjbVT zN?J=wW-Uy0h%^#u5q(`#={*;hBZCOR_zPh4CN~U8W2(!PM4yCjTgqW0Y;m4lItLnJIW3lTQGLn5NR!bE13fNPG)0cZnO%> z!wRd?0(&($nih=&Hll9OfWyuDEO6kB>$nbarbDMZT$lA*!W9tuL3TSSr-eBU`FBQ7 zxvc^Z8+rzpf=%-=k#42ya#ojm;#$me3N!S8)SJTdalJDDdXOf$>AN{jQcrVp_358t zMtBzYYddYoE#clt&{eqwMc2e1wq&}FgI?I<;6fAq6KQ8p5b3w{m$~Ma?dZ?rC?GD4 zU_vVbvWG}-O+nc?_Yp_lak7sy+jk`owC2v zVRn*Uk^jxcyPO)RHxuV?)`$V9iibwa3@ctASx0(xy9E961FCAf#ktF^>+%twu2D#< z&@^?pH;}=N!%j62zTP>wW}u@-WuN7|&m)%QbaZ$IH$LuEf|lpmkdV1-OsBN_c)P`} z;GF~R0l}B)Qw+G*^=CNO_r4iEl7_)9%l|cua~Y;>d8Hf|r`>t?cw79c9wi9vP+Jg^ zBVWm6sJnzL;KojP&yPgILOY>y;UNeK8w0e;Jwo>4;-&)5ms0#Htdnj0B+Vc$>O ze?jhZL4NC*EnkK)@A&0%QsEG`33)<|eFJ$a34(=y&+=-4qfR4M- z@%6=-!PmU&Oi--~O*=mz+aMXpgl{fR#wVZY`J*EvXxXyQk#^F%zWB6ff6tiC*mvty zWX?BXM*boM)-xW`B(z&Sa>T=CY9>QBqWU?FYm3K%Q@3mTHk-i44qu+gR_K2Df5S~6 z;ktCmcr=Ha>zOO+AlJ9fbYcXmUkYZzk0}SBoYgXCwgenp(6V)(7n3D+jz6GDq5VuZ zGgu{8!nDcemT8mwg7d^_liB|;xkmmvjLvuO-*USs?l7~k~)1VVN zNt^Ci|7cp(2~vI~dB1l^w@>i&Jg9sy3#zOkuch0v1*+SE`?p;05!%?WJ?)9x)BDz%J{W;2Rgh4jy%6*9L^2Xkz)bOc*mA99D^!;R!BPp` zxT4d#-bk`|+S^VRG`G~Fo^;f6nfSJMTF*pCaXAWqcX4O@SnkS^FOw(2`Ti~KV9kPH z$yl!(S(dO0IvwvO()&|e+fSAd>7FS@+1k##$NOgn0O+bhyO)Ky=!ddO7cr|aBNdAv zeJK-6iLAFGb(;3sMcQXFZ#8wP_)t%#bIg-#CX#J3*R00$S~jV78M@Z{*7seBdl#F~ zVf_?M7GWlrBk=@lGm~DkRd|&*^!XseZV;6gJ8+~sxVf!%^9YE2}-RWAuW0fbh#_QQv3q3(xJE00xu(pPD5c|qYWajCnVZfD7M zx7yS0IqG@K{kPj^H>u!gxB6O>*b1Am*04>f;TcaWI%%CcJEHBnmORrvhLM)rna1bY zM=cMkGMxL|8C{y@8NzkscN>?pe5k;D_`5YW*zA@g_a)RWvhT#I7xDQaM;?nG{-=~R zfNNTSZzfiik}@?qdVDP&@t_&+U^(KW`ML%*Tr#-h6eLq0yNy)p&T!9@B&eB&hc_mhLHdSjRF65R1-1RkLkfo?A`l|GVC8*>|SmoEFos?|4% z>3!t)P^AuW);wQ5y5Og;mfW7MkG~dXUoEuFR7hToT~-r5I;3c#C%@CbfckkY2))jmO@Pg_qXPC~u}Plt|HE#!`GL z#P=j4_u{Kw>u0=wLJrZd#$-}3w;nfZC}xHFCL?aFT$2`Ll!LJh8~5oGTTgE_VEN8o zi%j#gC>QaUfabrA^e}HtUv<&;GWr>B_O8Xri})V{pe=h6Y=yycV0Kp~3+50!Paw^^ zXop#0-|J%OHtv&aQ&t$~9F)ptQghho67+mVimxvA>IfUJOR}~Ix$uTWY-Z|PofHH3 z#YbwA7s8V%2eP38l98MwKNoDxp~aPKN(<>@<`(ib{m5Ke@|P$R|1v@N$p9Ps63gf} zLscnvKcxAVO?humSy4xAlddnvJbNxkuhP3Lg?TSbRYHABYoBZ@2ofwI*V3mgv&m8V zk)_J?UEB(FO@_XPKBhZ8!P<(%^hw&ikeaL}Zd5}TSsTd?+H0+JJdUS&H!fLRgf^D2 zp#$0&?VN^H${sW*^S% z66{7C-yALiIsv4axOt=P#k8}kk}9j8SC6CYCmQ;4wS_yYp{J{>)u)hhPIGuh&23!6 zP7{D1VF$uNghvt1BZLrs{(IUAa6eXZC+XX@&g%0R!BxcoV^|OT8Q~DZrwExy-+}#` u4FC^ef7k58bL%*=r$Cp^ZWFB9WuCUpzOndCBmQN{1N0)({o0=!0{B1Hql7I0 diff --git a/firmwares/MuxTO/MuxTO.hex b/firmwares/MuxTO/MuxTO.hex index 03ccf359..777f523b 100644 --- a/firmwares/MuxTO/MuxTO.hex +++ b/firmwares/MuxTO/MuxTO.hex @@ -1,757 +1,766 @@ -:1010000000100020AD32000091320000A932000033 +:101000000010002045330000293300004133000068 :1010100000000000000000000000000000000000D0 -:1010200000000000000000000000000091320000FD -:101030000000000000000000913200001D3300009D -:101040009132000091320000913200009132000094 -:101050009132000091320000913200009532000080 -:1010600091320000B51B0000A51B0000913200006A -:101070009132000091320000913200009132000064 -:1010800091320000913200009132000010B5064C00 +:101020000000000000000000000000002933000064 +:10103000000000000000000029330000B53300006C +:101040002933000029330000293300002933000030 +:101050002933000029330000293300002D3300001C +:1010600029330000BD1B0000AD1B00002933000028 +:101070002933000029330000293300002933000000 +:1010800029330000293300002933000010B5064C35 :101090002378002B07D1054B002B02D0044800E039 -:1010A00000BF0123237010BDA0010020000000003C -:1010B0008C3D0000044B10B5002B03D003490448BD -:1010C00000E000BF10BDC04600000000A4010020E9 -:1010D0008C3D0000E12110B50248490200F05EFF9E -:1010E00010BDC046680400207047000010B5040021 -:1010F0000100024800F0C8FE200010BD6804002076 -:1011000010B5024800F0F2FEC0B210BD6804002025 -:1011100010B5024800F0C8FE10BDC04668040020AB -:10112000F8B5451E07000C0000F084FC0600EDB287 -:101130000F4800F057FC03231842F9D1300000F0AB -:1011400093FC280000F026FC0A4E3D1933199879CB -:1011500000F09BFCEDB20134E4B2AC4206D033198E -:10116000987900F0AFFC00F0CBFCF4E72000F8BD6C -:1011700002100000C001002070B5FFF7C1FF1B285E -:1011800001D0002070BD224900F08EFC0026040032 -:10119000FFF7B6FF1F4D2100A85500F085FC013672 +:1010A00000BF0123237010BD80010020000000005C +:1010B000383E0000044B10B5002B03D00349044810 +:1010C00000E000BF10BDC046000000008401002009 +:1010D000383E0000E12110B50248490200F062FFED +:1010E00010BDC046480400207047000010B5040041 +:1010F0000100024800F0CCFE200010BD4804002092 +:1011000010B5024800F0F6FEC0B210BD4804002041 +:1011100010B5024800F0CCFE10BDC04648040020C7 +:10112000F8B5451E07000C0000F088FC0600EDB283 +:101130000F4800F05BFC03231842F9D1300000F0A7 +:1011400097FC280000F02AFC0A4E3D1933199879C3 +:1011500000F09FFCEDB20134E4B2AC4206D033198A +:10116000987900F0B3FC00F0CFFCF4E72000F8BD64 +:1011700002100000A001002070B5FFF7C1FF1B287E +:1011800001D0002070BD224900F092FC002604002E +:10119000FFF7B6FF1F4D2100A85500F089FC01366E :1011A0000400062EF4D1E122EB78A9781B0252004C :1011B0000B439342E5D8FFF7A3FF0E28E1D12100AE -:1011C00000F072FC00260400EA78AB7812021A43A1 +:1011C00000F076FC00260400EA78AB7812021A439D :1011D0002B791B041A436B791B0613439E420AD2D8 -:1011E000FFF78EFFAB192100987100F05DFC01360E +:1011E000FFF78EFFAB192100987100F061FC01360A :1011F0000400B6B2E8E7FFF783FF0500FFF780FFC2 :1012000003022B439BB21B1B58425841C0B2B9E7A3 -:10121000FFFF0000C001002070B51B20FFF766FF34 -:10122000184900F041FC00250400174E705DFFF7DF -:101230005DFF210000F038FC01350400062DF4D1DB -:101240000E20FFF753FF210000F02EFC00250400C4 +:10121000FFFF0000A001002070B51B20FFF766FF54 +:10122000184900F045FC00250400174E705DFFF7DB +:101230005DFF210000F03CFC01350400062DF4D1D7 +:101240000E20FFF753FF210000F032FC00250400C0 :10125000F378B2781B021343AB420AD97319987919 -:10126000FFF744FF210000F01FFC01350400ADB280 +:10126000FFF744FF210000F023FC01350400ADB27C :10127000EEE7E0B22412FFF739FFE0B2FFF736FFE6 -:1012800070BDC046FFFF0000C001002010B5FFF791 -:101290003FFF024B1878FFF727FF10BDBF0100206A +:1012800070BDC046FFFF0000A001002010B5FFF7B1 +:101290003FFF024B1878FFF727FF10BD9F0100208A :1012A0000122034B9A7000229871DA707047C04691 -:1012B000C001002010B5022404220E4B01201C7036 -:1012C0000D4B1A7000F02AFC0821032000F06EFB81 -:1012D0008021200000F06AFB00231D21074A0848F6 +:1012B000A001002010B5022404220E4B01201C7056 +:1012C0000D4B1A7000F02EFC0821032000F072FB79 +:1012D0008021200000F06EFB00231D21074A0848F2 :1012E0009170D370074A195CD15401331D2BFAD188 -:1012F00010BDC046BE010020BF010020C00100207B -:1013000060000020C601002010B51C4BD8790138C0 -:1013100005282ED802F096FA030B172D1F2503225D +:1012F00010BDC0469E0100209F010020A0010020DB +:1013000060000020A601002010B51C4BD8790138E0 +:1013100005282ED802F090FA030B172D1F25032263 :101320009A700022DA700132DA711A7208E005212F :10133000002299700131DA70DA7119725A72997259 :1013400081229A7118E002229A700022DA700C4A07 :101350001278DA71F4E702229A700022DA70094AF0 :10136000F6E703229A700022DA708832DA71753A51 -:10137000DBE7A120FFF794FF10BDC046C0010020AD -:10138000BE010020BF01002010B5094BDA79032A05 +:10137000DBE7A120FFF794FF10BDC046A0010020CD +:101380009E0100209F01002010B5094BDA79032A45 :1013900003D0052A08D0A12003E01A7A054B80204B :1013A0001A70FFF77DFF10BD1A7A034BF7E7C046AE -:1013B000C0010020BE010020BF010020074B10B576 +:1013B000A00100209E0100209F010020074B10B5D6 :1013C0001A00FA321178064AFC3311701A78054B6C -:1013D00080201A70FFF764FF10BDC046C0010020D6 -:1013E000BC010020BD0100200B2010B500F0EDFA7B +:1013D00080201A70FFF764FF10BDC046A0010020F6 +:1013E0009C0100209D0100200B2010B500F0F1FAB7 :1013F000EF23184008280AD082280AD00222074B7F :101400009A700022DA70A5329A71D87104E000F067 -:10141000B1FA8020FFF744FF10BDC046C001002094 -:1014200070B50B2000F0D1FA174C082808D0022321 +:10141000B5FA8020FFF744FF10BDC046A0010020B0 +:1014200070B50B2000F0D5FA174C082808D002231D :10143000A3700023E370A533A371A43BE37170BDD7 :10144000637A257A1B021D43637B207B1B022EB22D -:101450001843013E00F008FBF0B200F09BFA00F0E8 -:10146000F9FA0226E071AE4206D800F049FBA31952 +:101450001843013E00F00CFBF0B200F09FFA00F0E0 +:10146000FDFA0226E071AE4206D800F04DFBA3194A :1014700001369871B6B2F6E70135ABB21B0AE370DC -:101480008223A570A371DAE7C001002070B50500C2 -:10149000552000F017FBE02000F014FB0824013C6D -:1014A0002878E4B200F00EFB0135002CF7D170BDB6 -:1014B00010B500F05FFA0B2000F087FAEF23184018 +:101480008223A570A371DAE7A001002070B50500E2 +:10149000552000F01BFBE02000F018FB0824013C65 +:1014A0002878E4B200F012FB0135002CF7D170BDB2 +:1014B00010B500F063FA0B2000F08BFAEF23184010 :1014C000082806D082280DD10B48FFF7DFFF00F077 -:1014D00051FA80200421400100F095FA8020FFF7A6 +:1014D00055FA80200421400100F099FA8020FFF79E :1014E000DFFE10BD0222054B9A700022DA70A53291 -:1014F0009A71D871F5E7C04691000020C001002024 +:1014F0009A71D871F5E7C04691000020A001002044 :1015000070B5164AD379052B05D8032B0FD8002BBD :1015100005D0A0201EE0063B012BFAD870BD104874 -:10152000FFF7B4FF00F026FAFFF7C2FFF6E7032645 -:10153000157A547A0B4800F055FA3042FAD120025D -:10154000FF21284300F05FFA80200221400100F0D3 -:101550005AFA8020FFF7A4FEE0E7C046C001002051 -:10156000890000200210000070B5050000F062FA4A -:10157000040080202900400100F045FA200000F01E -:1015800073FA70BDF7B50B2000F01FFA394B08282D +:10152000FFF7B4FF00F02AFAFFF7C2FFF6E7032641 +:10153000157A547A0B4800F059FA3042FAD1200259 +:10154000FF21284300F063FA80200221400100F0CF +:101550005EFA8020FFF7A4FEE0E7C046A00100206D +:10156000890000200210000070B5050000F066FA46 +:10157000040080202900400100F049FA200000F01A +:1015800077FA70BDF7B50B2000F023FA394B082825 :1015900008D002229A700022DA70A5329A71A43A19 :1015A000DA71F7BDDA79587B11001D7B00024031FA :1015B0000543C9B22EB2012929D82F4A1778012232 :1015C0000092587A1C7A0002044323B22800019347 -:1015D000764200F049FA781E0640F6B2A64201DDD6 +:1015D000764200F04DFA781E0640F6B2A64201DDD2 :1015E0006B461E790A25002E09D029003000FFF72E :1015F00097FD0500A41BA4B20098FFF7B5FF002CCF :101600002FD0BEB2BC422ED329003800EFE71B49D1 :101610000F78B32A05D8B12A0ED8A220FFF740FED2 :10162000BFE7C12A03D8BF2AF7D90322C8E73C3253 -:10163000D2B2012AF1D8F8E71C7C114800F014FA64 -:10164000200000F022FA002000F01FFAF0B200F0B3 -:101650001CFA280A00F019FA80200721400100F046 -:10166000D2F98020DAE72900E0B2FFF759FD002423 -:101670000500C1E7C0010020BC010020BD01002021 -:101680000610000010B50121002001F019FFFFF73E -:1016900021FD00F07BFA044B04481A88044B1968BA -:1016A00001F090FD10BDC04686000020D40300204C -:1016B000800000209F4BF7B51B78002B00D0D6E0B0 -:1016C0009D4D280001F074FC9C4C061E13D0200098 -:1016D00000F0D8FBB04203DA200000F0D3FB060094 -:1016E000974F32003900280000F0BBFB3200390070 -:1016F000200000F0DFFB200000F0D0FB061E13D01E -:10170000280001F066FCB04203DA280001F061FC19 -:1017100006008B4F32003900200000F040FC320000 -:101720003900280000F080FA200000F05DFC854FB1 -:101730003B7883420FD0F022834E200033889343BE -:10174000338000F051FC0122804B38701A709042B7 -:1017500039D002283CD0200000F04CFC7C4F3B7874 -:10176000834215D00F22784E200033889343338074 -:1017700000F040FC0122754B38701A7090422AD05C +:10163000D2B2012AF1D8F8E71C7C114800F018FA60 +:10164000200000F026FA002000F023FAF0B200F0AB +:1016500020FA280A00F01DFA80200721400100F03E +:10166000D6F98020DAE72900E0B2FFF759FD00241F +:101670000500C1E7A00100209C0100209D01002081 +:101680000610000010B50121002001F069FFFFF7EE +:1016900021FD00F07FFA044B04481A88044B1968B6 +:1016A00001F0DCFD10BDC04686000020B403002020 +:1016B00080000020A14BF7B51B78002B00D0DAE0AA +:1016C0009F4D280001F0C0FC9E4C061E13D0200048 +:1016D00000F0DCFBB04203DA200000F0D7FB06008C +:1016E000994F32003900280000F0BFFB320039006A +:1016F000200000F0E3FB200000F0D4FB061E13D016 +:10170000280001F0B2FCB04203DA280001F0ADFC81 +:1017100006008D4F32003900200000F044FC3200FA +:101720003900280000F084FA200000F061FC874FA7 +:101730003B7883420FD0F022854E200033889343BC +:10174000338000F055FC0122824B38701A709042B1 +:1017500039D002283CD0200000F050FC7E4F3B786E +:10176000834215D00F227A4E200033889343338072 +:1017700000F044FC0122774B38701A7090422AD056 :10178000022828D0002803D1032332881343338052 -:10179000200000F035FC6F4F3B78834223D06A4E27 -:1017A0006D4A338820001340338000F029FC012269 -:1017B000664B387005381A70032814D8328802F046 -:1017C00041F80E4E51531023328813433380C2E741 +:10179000200000F039FC714F3B78834223D06C4E1F +:1017A0006F4A338820001340338000F02DFC012263 +:1017B000684B387005381A70032814D8328802F044 +:1017C0003BF80E5255571023328813433380C2E73B :1017D00030233288F9E7338818433080D8E78023F4 -:1017E0005B001343338096235C4EDB0032689A42E1 -:1017F00015D1200000F00AFC019000280FD101F063 -:101800009BFD574F3B68C01AC82808D90123494A95 -:10181000137001F091FD534B1860019B3B60200059 -:1018200000F0DCFB3368984203D1484B1B78002B57 -:1018300014D0200000F0EAFB00280FD0200000F0B8 -:10184000CDFB3060280001F0A5FB3F4B28001A8833 -:10185000316801F0B7FC00223C4B1A70F7BD8023C1 -:101860009B00BEE7C023FBE78023DB00B9E7314BD9 -:101870001B78002BF2D03A4C2368002B1CD101F0CE -:101880005BFD384B1B68C01A374B98421CD8FFF7DA -:1018900073FC0028E2D0354B987915281CD801F04C -:1018A000D1FF2F1F2926423F1D1D381D1D2C3C1D19 -:1018B0001D381D1D1D1D2C3201F03EFD2368C01A70 -:1018C000FA235B009842DAD900231A4A13700122E6 -:1018D000224B52421A60C1E7342827D0A02019E0D9 -:1018E000FFF7E8FCFFF798FCFFF7D0FCB6E7FFF73F -:1018F0000BFDF7E7FFF748FDF4E7FFF7D9FDF1E748 -:1019000004221B4B1A70FFF76FFD01F015FD2060DC -:10191000E8E78020FFF7C4FCE4E7FFF74FFDE1E7CD -:10192000FFF77EFDDEE7FFF72DFEDBE7FFF7E8FDC3 -:10193000D8E7C046CA030020D40300206804002072 -:101940008A030020880000208600002089030020F0 -:101950008803002084000020FFF0FFFF80000020AB -:10196000CC030020D003002060EA0000C00100206A -:10197000BF01002010B55921082000F017F8002100 -:10198000082000F013F80E240B2000F01EF820426F -:10199000FAD010BD10B50400552000F093F8A02037 -:1019A00000F090F8200000F08DF810BD70B5040034 -:1019B00055200D0000F086F820004038C0B200F03D -:1019C00081F8280000F07EF870BD10B504005520A5 -:1019D00000F078F820008038C0B200F073F800F012 -:1019E0008FF810BD10B50400552000F06BF80420EE -:1019F00000F068F8E0B200F065F8200A00F062F844 -:101A000000F07EF810BD70B504000D00552000F008 -:101A100059F8442000F056F8E0B200F053F8200ADC -:101A200000F050F800F06CF8280000F04BF800F0DF -:101A300067F870BD10B5552000F044F8292000F07B -:101A400041F800F05DF8040000F05AF8000220436D -:101A500080B210BD10B5552000F034F8242000F0FD -:101A600031F800F04DF810BD10B50400552000F01D -:101A700029F8692000F026F8E0B200F023F8200AE7 -:101A800000F020F800F03CF810BD10B5040055201F -:101A900000F018F8642000F015F8200000F012F8AB -:101AA00000F02EF810BD0000FF224840044BC0B2E9 -:101AB0004000C35A09125940C8B2934318437047B3 -:101AC000903A000070B50D4D01000400280001F0AF -:101AD0000DFB280001F071FA01F02EFC0600280031 -:101AE00001F066FA002804D101F026FC801B1328BF -:101AF000F5D9280001F072FA200070BD180400200A -:101B000010B5054C200001F053FA0028F9D0200050 -:101B100001F064FAC0B210BD18040020962170B51F -:101B2000174C0500174A2000490001F04BFB002D1F -:101B30001BD0012D0DD10021200001F0D7FA20008B -:101B400001F03BFA0021200001F0D0FA200001F062 -:101B500034FA0F2001F0F6FB200001F029FA051EEF -:101B600005D0200001F03AFAF6E72900EBE7E12181 -:101B70002000054A890201F025FB280070BDC046FF -:101B8000180400201304000031040000E12110B506 -:101B9000024A0348890201F015FB10BD3104000020 -:101BA0001804002010B5024801F060FA10BDC046CC -:101BB000D403002010B5024801F058FA10BDC04609 -:101BC00018040020F7B5002601240F4D0F49280006 -:101BD00000F03CF80E4F0F49380000F037F80E497E -:101BE0000E4800F033F839002300019602220094D9 -:101BF0000B4801F00FFA29000196032304220094F8 -:101C0000084801F007FAF7BD5C0400200008004214 -:101C100060040020000C0042001000426404002018 -:101C2000D403002018040020F8B505000E001700AA -:101C30000024BC4208D02B682800315D1B689847FF -:101C4000002801D00134F4E72000F8BD016070479E -:101C50009446F0B505AC25789C1E621E9441624600 -:101C600006689207376824063A4322430724326005 -:101C700000682140AD01002442682943022B00D0B6 -:101C80005C030A4322434260F0BD30B5C0250368BF -:101C9000AD031C6812052A402243C0240904A40293 -:101CA00021400A431A6003685A6814435C6030BDDF -:101CB0000123026811680B43136003681A68D20796 -:101CC000FCD4DA69D207F9D470470223026811689C -:101CD0000B4313600268D3699B07FCD47047036809 -:101CE0001A7ED20702D41A7E9207FCD570470022D2 -:101CF00003685A8370470368187E4007C00F704717 -:101D00000368187EC0097047802302685B42117E19 -:101D10000B43137670470368187EC007C00F7047E7 -:101D20000368188DC0B2704703681A7ED207FCD5CD -:101D300089B2012019857047012203689A7570479E -:101D4000012203681A7570470368194A30B5934237 -:101D500027D0184A934227D0174A934220D10B2309 -:101D60001021032501229A402B40AB40C224FC35B0 -:101D70009D401248A40002600259AA43C0259D401C -:101D80002B00134380220351D2010D4B0A435A808A -:101D90000C4A11680C4A11605A7852B2002AFBDBD7 -:101DA00030BD09230E21DCE70A230F21D9E7C04605 -:101DB00000080042000C00420010004200E100E078 -:101DC000000C0040140100209C000020F8B5040025 -:101DD0000F0016001D00FFF7B7FF2000FFF768FF98 -:101DE0001C21BB000B4071072268090C0B431360D8 -:101DF000842322689375012F1AD11021012E00D05F -:101E000008390C4B69431868C00001F025FD072212 -:101E1000216802408B895203DB04DB0C13438B8166 -:101E2000226803049089DB0C400B40031843908127 -:101E3000F8BDC0469C00002010B5040001F07CFAFB -:101E4000E060236820005B699847002808DA01F009 -:101E500073FAE368C01AA3689842F2D301204042A3 -:101E600010BDF8B506000D0017000024BC4207D0D5 -:101E70003000FFF7E1FF002802DB28550134F5E7C9 -:101E80002000F8BD3F20704713B56B460268D9713A -:101E90000733546819000122A04716BD10B502216E -:101EA000006900F061FC10BD10B50321006900F06D -:101EB00071FC10BD10B5130004000A000069032175 -:101EC00000F060FD002801D10123636010BD000017 -:101ED00010B5054C03002068421C04D11A68180094 -:101EE00052699047206010BDE8000020074A0300B7 -:101EF000106810B5411C03D001235B42136010BD74 -:101F00000221186900F030FDF9E7C046E800002022 -:101F100010B503783A22023303700249024800F0F8 -:101F2000DDFD10BDAC0000208404002010B5027857 -:101F30004378A12A0AD1212B01D0002005E00722F5 -:101F40001349144800F0CAFD012010BD212AF4D124 -:101F5000202B10D10E490F481A3A00F05FFC962250 -:101F60000B4BD2001968914202D1DB79DB07E4D533 -:101F700001F09EFBE1E7222B03D18278044BDA715A -:101F8000EDE7232BD9D14288034B1A60D5E7C04631 -:101F9000A400002084040020A00000207047F7B5B2 -:101FA00005001700019101F0C7F90024E860BC4268 -:101FB00011D2019A022128693B1B121900F068FC1A -:101FC000061E01D0A419F2E701F0B6F9EB68C01AB9 -:101FD000AB689842F6D32000FEBD0000014B1868A4 -:101FE0007047C046A4000020014B1879C0B270476A -:101FF000A4000020014B5879C0B27047A400002013 -:10200000014B9879C0B27047A4000020024BD879E8 -:10201000012318407047C046A4000020FA22002186 -:10202000054B92009A60054A08321A60044A5960CA -:102030001A6119767047C04668040020E43C00002D -:102040008404002070B50F26CB1D02003240D5B2AB -:102050002C0000093034092A00DD07341C705A1E98 -:10206000994200D170BD1300EFE7000070B58229DE -:102070001FD1C3B22B4D5A01AA1891692A4C800175 -:102080000C40C0218905214391612849083340183B -:10209000802150612A685B01D018047949422143AC -:1020A00001717020995C81430800302101439954EB -:1020B00070BD0029FCD1C0241A4EC3B25901711859 -:1020C0008A68194DA4052A4022438A60184A800173 -:1020D000801832680726083348605B01985CB0437B -:1020E0000600012030439854886905402C438C61D8 -:1020F00070240E484861985CA043040010202043DF -:10210000985488680B4CD318044080204022400328 -:10211000204388608868800B8003886059790A436F -:102120005A71C5E7BC070020FFFFFF8FB0040020F5 -:10213000B0050020FF3F00F070B50400012320CC63 -:1021400000212A782000134380222B70520001F0D6 -:1021500002FCAB78DB07FCD46C6270BD1F22144B11 -:1021600070B51B68590B9C0C9B0111405B0F224002 -:102170001F2900D11A391F2A00D1023A072B00D19A -:10218000043B1F2500688E01048D0A492A40214026 -:1021900031430185018D14000A00AA4322430285C0 -:1021A000028D1903044B13400B43038570BDC046D9 -:1021B000246080003FF8FFFFFF8FFFFFEFF31083E5 -:1021C00003600123436072B670470368002B02D19D -:1021D00062B6BFF36F8F704737B505690400684674 -:1021E000002D14D1FFF7EAFF019B621D013B02D3D2 -:1021F000D57FEDB2FAE768460193FFF7E6FF002DC1 -:1022000001D100203EBD206AE369C01AFAE7FFF75A -:10221000D5FF22000025019B3432013B02D3157803 -:10222000EDB2FAE768460193FFF7CFFF002DE8D043 -:10223000206BE36AE9E70000F0B5FF25012642685C -:10224000836811682B405B01CC186419A77AD318F6 -:102250003E43A672C6689C680B4FB60436093C40E4 -:1022600034439C6083682B405B01D2189468A40BB4 -:10227000A4039460402283682B4008335B01CB1891 -:1022800019790A431A71F0BDFF3F00F0F7B50569EF -:1022900004000E0017006846002D43D1FFF78EFFA3 -:1022A000019B601D013B5A1C0BD0C27F591E002AA6 -:1022B00005D168460193FFF788FF2800FEBD0B009B -:1022C000F1E768460193FFF780FFE369AF420AD068 -:1022D000226A9A4207D95A1CE261A269D3181B7874 -:1022E00073550135F1E7226A9A42E6D10023E36192 -:1022F000013368462361FFF761FF22000021019B43 -:10230000671D013B3532581CD3D0F97710785E1E1B -:10231000002805D0200011700193FFF78DFFECE736 -:102320003300F0E7FFF74AFF2000019B3430013B08 -:102330005A1C06D00278591ED5B2002AB9D00B001B -:10234000F6E7684601930025FFF73FFFE36ABD42C9 -:1023500002D0226B9A421CD8226B9A42ADD1002344 -:102360006846E3622361FFF729FF2700220000216E -:10237000019B3437013B3532581C9AD039701078A4 -:102380005E1E00280DD0200011700193FFF754FF4E -:10239000EBE75A1CE262A26AD3181B787355013529 -:1023A000D4E73300E8E7F7B582684368D2B211009A -:1023B00004000831186849014118C879C00729D5B7 -:1023C00001255201CD719B189A6861699204920CA3 -:1023D000002923D12262226A002A41D0A26A6561C3 -:1023E00068465A60FFF7EAFE342294462200019BB9 -:1023F000671D013BA4443532591C2DD06146FD7741 -:102400000978581ECEB2002905D001936846157090 -:10241000FFF7DBFEF7BD03001670EDE72263226BCA -:10242000002A1DD0002227006261A26968465A6016 -:10243000FFF7C4FE019B621D9446013B34373032E6 -:10244000591C09D061463D70C97F581ECEB2002983 -:10245000DBD103001670F3E768460193FFF7B5FE82 -:102460002000FFF7E9FED5E713B56A4600230C000C -:10247000D01DD371FFF74CFD23681818206001F0C0 -:10248000CDF96B46D91D01F086F9236818186B4603 -:102490002060D87916BD000003290ED180220E4B92 -:1024A00062311B68FF31585C524202435A54682221 -:1024B0006339FF32FF39995470470129FCD18022DA -:1024C000054B24311B68FF31585C524202435A5479 -:1024D00028222339FF32EDE7BC07002070B5002425 -:1024E000274B0121050020001C7000F0E9FF0121AD -:1024F000200000F0E9FF234B012120001C7000F0B8 -:10250000DFFF0121200000F0DFFF20231E4A05200D -:10251000D1690B43D3610F2101F028F80F21062068 -:1025200001F024F8194B1A4A5A805A7852B2002AFC -:10253000FBDB184800F0FAFE174C2000FFF7FCFD0B -:102540002000FFF70BFE7F212368C1201A7880004E -:102550000A401A70042219780A430C211A701A8949 -:102560008A430E491A810A581202120A0A5080221E -:102570000A6019787E3A0A431A7001232B7070BDE5 -:10258000A5040020A404002000040040000C00402A -:1025900006400000612F0000BC07002000E100E0C1 -:1025A0000078002810D00121084B1B681A898A4343 -:1025B0001A810822198B0A431A830422198B0A43B1 -:1025C0001A830022024B1A607047C046BC070020E5 -:1025D000B40700200A000E498B699B0B9B038B619B -:1025E0000B680221FF33197298798239014399717E -:1025F000197A8907FCD57F20064B0240997A8143DE -:10260000114380229972997A52420A439A72704712 -:10261000BC0700200050004110B50B790C00002BC6 -:102620000CD10800FFF782FC002801D0012010BD6A -:10263000094A93699B0B9B039361F7E701F0EEF85E -:10264000210001F0DBF80028F0D1034A93699B0BCD -:102650009B039361EBE7C046BC070020F7B50C0075 -:102660001100832A19D1E3B2314D5A01AA18916998 -:102670003048A4010840C0218905014391612E49D9 -:10268000286864187021083354615B011A5C8A431E -:10269000110040220A431A54F7BD022A44D1A30074 -:1026A0000193264BA200D658002EF5D1382000F019 -:1026B00085FE8027224B7F0003601D4B066243602E -:1026C000431D846006614661C661C760DE772F33B3 -:1026D0000500C66206631E7038005E7001F028F9BE -:1026E0000600A861380001F023F9E4B2104A630142 -:1026F000A862D3189A680F4907201140C02292059A -:102700000A439A600A4A083412686401A15C814352 -:10271000080003210143A15428005E60FFF78CFDEF -:10272000064B019AD550B7E72000FFF79FFCB3E7AF -:10273000BC070020FFFFFF8FB004002088040020AA -:10274000143D000070B505000124064BA200D258CC -:10275000002A05D021002800FFF780FF0134F4E7AC -:1027600070BDC046EC000020084B8A00D05810B560 -:10277000002803D003689B68984710BD044BC9B27A -:102780004901591888688004800CF6E78804002005 -:10279000BC07002010B50C00FFF7E6FF00280CD0A6 -:1027A000064BE4B219688023083464010C1962797D -:1027B0005B42134363710223E37110BDBC07002029 -:1027C00070B5CBB2124A13485C018901891802190D -:1027D00051609168104D08330D40802189022943D2 -:1027E000402591609168890B8903916001685A01C5 -:1027F0008A1816793543157195796D06FCD55B01FC -:10280000C918CB79DB07FCD500198068C0B270BD50 -:10281000B0050020BC070020FF3F00F070B5140099 -:1028200040220B4B0D001B68FF3359790A435A7144 -:102830000021FFF7C5FFA04200D920000023054971 -:10284000A34203D0CA5CEA540133F9E770BDC04625 -:10285000BC070020B005002010B50C48C9B24901E2 -:10286000421893689B049B0C3F2B0BD99468403B08 -:102870009B04A40B9B0CA40323439360411888681A -:10288000C0B210BD93689B0B9B03F6E7BC0700200A -:10289000F0B51C002F4B85B01B6806000D0001929F -:1028A000002B54D02C4F3B78D8B2002B02D1010022 -:1028B00000F00AFE64233B70284BAA00D058002881 -:1028C00008D0036822005B68019998470400200043 -:1028D00005B0F0BD29003000FFF746FF844204D95F -:1028E00029003000FFF740FF040029003000FFF707 -:1028F000B3FF0121EBB21A4F03935B010293029ADB -:102900003B6801989B18FF335A7A0A435A72154B59 -:10291000A9012200C91801F015F8002CD7D0290010 -:102920003000FFF721FF0028D1D14021039B3A68F6 -:1029300008335B01D3181879014319710121D9714A -:10294000029BD318FF339A7A0A439A72BFE7012495 -:102950006442BCE7B4070020A404002088040020DF -:10296000BC070020B005002013B56B46DC1D22001B -:102970000123FFF78DFF012801D1207816BD01202A -:102980004042FBE7F0B51C003A4B85B01B680E00D7 -:102990000192002B3FD08023DB019C423BD8364D77 -:1029A0002B78D8B2002B02D1010000F08DFD6423FA -:1029B00000272B70314BB201D3180293002C2CD07E -:1029C0002F4B1B680393FF2333401D0000930835F2 -:1029D000039B6D015D19AB79DB0921D0294B2A4995 -:1029E000186800F039FF294B1721584300F034FFD5 -:1029F000274BEA79920713D49A5D002A01D1013856 -:102A0000F7D201229A55009B5A011D4B9B189A69D7 -:102A1000920B92039A6101277F42380005B0F0BD06 -:102A200000221B4B25009A553F2C00D93F252A0038 -:102A30000199029800F086FF009BA9045A01104BEF -:102A4000890C9B18029A7F195A619A69641B920B30 -:102A500092030A439A61009B039A08335B01D318DF -:102A60000222DA715979823A0A435A71019B5B1941 -:102A70000193A3E7B4070020A5040020B0040020C0 -:102A8000BC0700201401002040420F00701101001B -:102A9000A704002070B50C001D000D4BA601F61810 -:102AA000110030002A0000F04DFFE4B2094A640131 -:102AB00014196661A369084928000B40A361A16944 -:102AC000AB04890B9B0C89031943A16170BDC046FF -:102AD000B0040020BC070020FF3F00F0F7B5104B0A -:102AE0000F001B7814000190002B0CD10D4B160029 -:102AF0001D78002D09D00C4E0C48358828182D194A -:102B000000F020FF35802000FEBD002EFBD03300FA -:102B10007A1900210198FFF7BDFF2D18361AF4E746 -:102B2000B0060020B1070020B2070020B106002047 -:102B3000F8B500200D00140000AF012A27D9D31DDD -:102B40006A46DB08DB00D31A9D46080000F07CFFD4 -:102B50006E46032302220021013040003070737062 -:102B6000A2420DD2287800280AD0531CDBB20135CE -:102B7000B0549C4203D00232F154D2B2F0E72200AA -:102B800031000448FFF7AAFF431E9841C0B2BD467A -:102B9000F8BDC04684040020F0B50025012785B0AB -:102BA000184B0E0069461F7004000095FFF75CFC8F -:102BB000154B01A90B806A3BFF3BCB715A330B725B -:102BC000009B320009334B800E4B8D714F710871A1 -:102BD0001D70092E0FD00D4E092237700C4F2000AA -:102BE00000953D80FFF77AFF69462000FFF73CFC27 -:102BF0003A88084935702000FFF770FF012005B0C2 -:102C0000F0BDC046B006002009020000B107002058 -:102C1000B2070020B106002070B5CE7805000C0088 -:102C200092B0022E08D1C9882B48FFF7B5FF431E8A -:102C30009841C0B212B070BD00F0F0FD210000F06C -:102C4000BEFD002803D0C317181AC00FF2E7012EEB -:102C50000BD1E2882149112A10D8D2B2002A0DD016 -:102C60002800FFF73BFF0120E4E7032EE2D1A37821 -:102C7000002B05D1E2881A49032AEED90A78EFE73A -:102C8000022B05D1A27917492800FFF751FFD1E7A0 -:102C9000012B02D1A2791449F6E7032BCAD1134BB9 -:102CA00001A91868FFF7CEF9114B03A91868FFF7BF -:102CB000C9F9104B05A91868FFF7C4F90E4B07A90D -:102CC0001868FFF7BFF900F0A9FD09A900F087FD1A -:102CD000A27901A9D8E7C04684040020443D000041 -:102CE000343D0000203D0000383D00000CA0800075 -:102CF00040A0800044A0800048A0800073B506007A -:102D000048780D000B2810D800F09CFD061B0F31F1 -:102D10000F474C7450536D70097801AA002906D1F1 -:102D2000022311803000FFF7B5FE012076BD00239D -:102D30001380314B1B78012B00D11370022300212B -:102D4000F0E78A780023012A09D16A4693802B4B49 -:102D50001B78012B00D11371022301AAEFE7264A49 -:102D60001370274A93699B0B9B039361DDE78C7873 -:102D7000012C07D1214B01AA1C70224B1B78137028 -:102D80002300DCE7002C08D101201B4B1C4A1870E3 -:102D900093699B0B9B039361C8E73000A978FFF709 -:102DA00019FCC2E73000FFF737FFBFE70123164ADF -:102DB000C5E70B780020DB06B8D13000FFF7C2FC76 -:102DC0002A200221AA78104BFF301A600C4A13689F -:102DD0001C5C21434A241954FF34195D2938FF38FB -:102DE00001431955D4E70123084AA8E78A78074B1D -:102DF0001A60B6E7002099E7A6040020AE04002080 -:102E0000BC070020083D0000B4070020B8070020E0 -:102E10004B4BF7B51C780700002C00D08FE0494ED3 -:102E200033689B8B1B070ED521002000FFF71EF98E -:102E3000326810231100FF31887A03438B72424BB2 -:102E40001C600823938333689A8B52071FD5042292 -:102E50009A833E4A1378002B0AD01378013BDBB2E9 -:102E600013701378D8B2002B02D1012100F02CFB93 -:102E7000374A1378002B0AD01378013BDBB213706A -:102E80001378D8B2002B02D1012100F01DFB33686A -:102E9000FF331A7AD2061ED510221A7259793032AF -:102EA0000A435A7160232B4938000A781A423BD1F1 -:102EB000FFF724FF3368FF33002838D08022997948 -:102EC00052420A439A711A7A520604D540221A7263 -:102ED000597A0A435A72336807241D8C01239D4393 -:102EE000EDB20193E1B2002D29D0002C27D02B00A8 -:102EF0002341019A134215D02300326808335B0145 -:102F0000D318DA79D20702D4DB799B0707D5124BA5 -:102F1000A200D05800280ED003681B689847019B78 -:102F2000A3409D43013CDDE7FFF776FBC2E720218C -:102F30000A4A9171C7E73800FFF7AEFAEFE7F7BD2D -:102F4000B1070020BC070020B4070020A504002022 -:102F5000A4040020B005002088040020FF50004198 -:102F600010B50248FFF754FF10BDC046840400208E -:102F7000014B024A1A607047BC0700200050004114 -:102F80000120704710B50368014A1B6A984710BDBD -:102F90001304000010B504000069FEF789FE20004C -:102FA000143000F0B9FB2000203000F0B5FB10BD5C -:102FB00010B5143000F0C5FB10BD10B504002000A2 -:102FC000203000F0BEFB0028F9D12069FEF787FE13 -:102FD00010BD10B5203000F0BAFB10BD70B5060072 -:102FE00004001436300000F09BFB230030331B78C4 -:102FF0000500FF2B07D0300000F0A9FB0A2802DDF6 -:10300000A36BE26B1A60280070BD10B5143000F09D -:10301000ACFB10BDF7B51D0008AB1B780400009396 -:1030200009AB1B781600019300234360FA239B0031 -:1030300083600D4B0F0008330360143000F050FB29 -:103040002000203000F04CFB2300009A2C33276135 -:103050009A70019A1E70DA7022005D70FF23303280 -:10306000200013701374FEBD583D000070B50400BD -:103070000069FEF740FE002815D025002069FEF704 -:103080004FFE14350100280000F039FB23003033D7 -:103090001B78FF2B07D0280000F059FB092802DC21 -:1030A000636BE26B1A602069FEF735FE00280DD0D5 -:1030B00025002035280000F044FB002812D028000D -:1030C00000F02EFBC1B22069FEF72EFE2069FEF74C -:1030D00017FE002805D02069FEF716FE2069FEF7CE -:1030E00006FE70BD2069FEF72BFEEFE7F8B5040081 -:1030F00000690D002600FEF70EFE2036002834D1B0 -:103100003F27300000F03CFB002825D0EFF3108370 -:103110000122134211D1EFF305831A003A403B42DA -:10312000EFD0103A53B2002A10DA0F221340083BB6 -:10313000134A9B089B009B181B682069FEF7EBFD58 -:103140000028DED02000FFF791FFDAE79B080D4A48 -:10315000C0339B009B58F0E73000290000F0CFFA05 -:103160002069FEF7E9FD0120F8BD300000F0E9FA22 -:103170000028C5D129002069FEF7D6FDF3E7C04637 -:103180001CED00E000E100E0F0231B01194080236A -:1031900006209B0099420AD00133FF330130994247 -:1031A00005D0802300205B00994200D10530704794 -:1031B0000F2001400020012903D00239481E81411F -:1031C000481C70470300F0B5040085B003912C3310 -:1031D0000E211878150000F0C9F9230026002D33C0 -:1031E00018780E212F3600F0C1F93378022B07D161 -:1031F000230040331878FF2802D00E2100F0B6F9E2 -:10320000270030373878FF2814D0012100F058F912 -:103210000C213B781B4A59438B5C52185178012290 -:103220008A401948DB01181860631848E2631B18CC -:10323000A3631A600122039B11002069FEF7C6FDFB -:1032400029002000FFF7A0FF290007002000FFF75A -:10325000AFFFF0221540303D6A425541030039006E -:10326000206901220095FEF7F3FC23002E331A7823 -:1032700031782069FEF709FD2069FEF726FD05B0CB -:10328000F0BDC046903C0000184400411444004189 -:10329000FEE70000034B10B51B68002B00D09847D9 -:1032A00010BDC046C00800200DBEFEE7134A1448FA -:1032B000110010B5134B824202D0934212D1130079 -:1032C000824212D10222104B5A62104B0832DA703D -:1032D0000F4B20329A7300F085F800F04FF8FEE7AC -:1032E00010CB10C18142FBD3EAE70A4A8B42E9D0F6 -:1032F0000021094B9A42E5D202C2FBE70000002000 -:10330000A0010020903D0000FC70004100500041F1 -:1033100000480041A0010020E808002010B500F09E -:103320002AF8002801D100F01BF810BD014B1860ED -:103330007047C046C0080020014B18687047C0465F -:10334000C408002070B5041E07D0044D2E6800F09C -:1033500011F82B689B1BA342F9D370BDC408002051 -:1033600010B5034A13680133136000F0A9F910BDCA -:10337000C4080020704700207047704710B500F067 -:103380006FF800F0B1FAFFF7F8FF0120FFF7DAFF5E -:10339000084C2000FFF7A2F82000FFF701F9FEF724 -:1033A00071F9FEF787F9044B002BFAD000E000BF5B -:1033B000F7E7C046840400200000000010B500F0CC -:1033C000B7FA10BD024A53785BB2002BFBDB7047A3 -:1033D000000C004010230249CA681A42FCD0704712 -:1033E00000080040822210B5154B164C5A60A38C81 -:1033F000023A9343A384FFF7EDFF8022124B920021 -:103400001B689B0E9B021343A362104BE362922343 -:103410005B00A384FFF7DEFF0223A28C1343A38487 -:10342000FFF7D8FF80230A4C5B00A360FFF7CAFFB9 -:10343000084B6360FFF7C6FF074B084A1A6010BDD0 -:1034400000400041000800402460800080BB0A7CEE -:10345000000C00400007030014010020006CDC0297 -:10346000C0201249124B134A10B54B60136A000674 -:103470001B021B0A03431362002407238C600B60AA -:103480008021136A09061B021B0A0B4313620A4BB5 -:10349000196A1A6A1143094A0A431A6220001A215A -:1034A000013400F00DF8072CF8D110BD10E000E059 -:1034B0007FBB000000ED00E000040040FC050000C0 -:1034C00010B500F053F810BDF7B50C224243244D5F -:1034D0000191535D042B2DD00027AA185278214E5C -:1034E000DB01D418A419204E24789E59E4B2BE42C0 -:1034F00003D0013797407E1EB7411B4E9E19366997 -:10350000B44600266146B14203D001369640711E92 -:103510008E41002F17D10C37784301992D18686818 -:1035200001290DD1012E06D1410706D4D3180D4A29 -:103530009B181C70F7BD0107F8D504210C43F5E773 -:1035400004218C43F2E701209040019A012A03D123 -:10355000054A9B189861EDE7034A9B185861E9E713 -:10356000903C000040440041004400410C22504384 -:10357000494B70B5C65C1B185C78DD78042E00D111 -:1035800087E0081F172842D800F05CF90C31313170 -:10359000414141413333393D3D4141414141413F49 -:1035A000418341830023002E33D0F0013B4E22188B -:1035B00092191678042232404E1F022E3BD82D0756 -:1035C00001D540252A4372B6002901D01A2935D1E8 -:1035D0000123A340324941184B608B6104239A4375 -:1035E0002E4923185B181A7062B6002070BD0123A3 -:1035F000D9E706232B405A1E93410433D3E7012316 -:103600002B400233CFE70623CDE70723CBE709237F -:10361000C9E7022CC9D10629C7D0224A1078002850 -:10362000C3D01670204A1078A0431070D079C0091A -:103630000128FBD0B9E702263243C0E78D1E012DD9 -:103640000CD80123A340164D45196B60032903D103 -:103650006B6104231A43C3E7AB61FAE7012904D184 -:10366000A1400F4BC3189960B8E7104965082D18A1 -:103670006D18E10707D50F2629781B0131400B4350 -:103680002B700123E6E70F262978B14319432970EF -:10369000F7E701204042A9E7903C00004044004188 -:1036A00000440041C8080020002800423044004186 -:1036B0000122024B52421A607047C0461801002096 -:1036C000054A10B51368591C05D0013B1360002B47 -:1036D00001D1024B984710BD1801002001000020C5 -:1036E00010B50400802000F023F980220021206022 -:1036F00000F031F9002320006360A36010BD7F2239 -:10370000436810B50133134082689A4203D042687F -:103710000468A154436010BD002343608360704778 -:10372000826843689A4209D07F2183680268D25C2C -:10373000836801330B4083601000704701204042D2 -:10374000FBE743688068181A00D5803070474268EC -:1037500083689A4204DB43688068C01A7F307047F0 -:1037600083684068181A0138F9E7826843689A420A -:1037700003D083680268D05C704701204042FBE7B9 -:1037800003007F2240689B6801301040C01A43420A -:103790005841C0B2704770B50E0000254468002C37 -:1037A0000BD02368310020005B689847002802DBBB -:1037B000E4682D18F3E701256D42280070BD70B54F -:1037C0000D004468002C08D02368290020009B6865 -:1037D0009847002802D1E468F4E7200070BD70B576 -:1037E0000C004568002D07D02B6821002800DB68FD -:1037F0009847ED682418F5E7257070BD70B50D0089 -:103800004468002C08D02368290020001B689847D2 -:10381000002802D1E468F4E7200070BD064A0123C5 -:10382000116810B50C0005481C40194203D1044929 -:1038300044600180136010BDCC080020D008002037 -:103840000204000002B4714649084900095C4900BD -:103850008E4402BC7047C046002934D001230022A8 -:1038600010B488422CD301242407A14204D28142FF -:1038700002D209011B01F8E7E400A14204D281420F -:1038800002D249005B00F8E7884201D3401A1A438C -:103890004C08A04202D3001B5C0822438C08A042C3 -:1038A00002D3001B9C082243CC08A04202D3001B79 -:1038B000DC082243002803D01B0901D00909E3E7F3 -:1038C000101C10BC704701B5002000F00BF802BDC1 -:1038D0000029F8D003B5FFF7C1FF0EBC4243891A97 -:1038E0001847C0467047C04670B500260C4D0D4CB9 -:1038F000641BA410A64209D1002600F0BDF80A4DB1 -:103900000A4C641BA410A64205D170BDB300EB584D -:1039100098470136EEE7B300EB5898470136F2E7D7 -:103920008001002080010020800100209001002003 -:1039300010B5034B0100186800F016F810BDC04622 -:103940001C010020002310B59A4200D110BDCC5CB0 -:10395000C4540133F8E703001218934200D17047B2 -:1039600019700133F9E70000F8B50323CD1C9D431E -:10397000083506000C2D1FD20C25A9421ED8300098 -:1039800000F069F825490A681400002C1AD1244F68 -:103990003B68002B04D12100300000F043F8386070 -:1039A0002900300000F03EF8431C2AD10C233000DF -:1039B000336000F051F803E0002DDEDA0C233360B1 -:1039C0000020F8BD23685B1B18D40B2B03D92360A0 -:1039D000E418256003E06368A2420DD10B6030005B -:1039E00000F03AF8200007220B30231D9043C21A42 -:1039F000E7D01B1AA350E4E75360F0E722006468A5 -:103A0000C3E70323C41C9C43A042E2D0211A300028 -:103A100000F008F8431CDCD1C8E7C046D8080020F5 -:103A2000DC080020002370B5064C05000800236068 -:103A300000F014F8431C03D12368002B00D02B6046 -:103A400070BDC046E40800200023C25C0133002A98 -:103A5000FBD1581E7047704770470000044A136836 -:103A6000002B03D01818106018007047014BF9E7BD -:103A7000E0080020E8080020F8B5C046F8BC08BC03 -:103A80009E467047F8B5C046F8BC08BC9E467047D5 -:103A90000000891112239B322446AD573665BF744E -:103AA000488CC19D5AAFD3BE6CCAE5DB7EE9F7F8FE -:103AB0008110080193331A22A5562C47B7753E642E -:103AC000C99C408DDBBF52AEEDDA64CBFFF976E8DE -:103AD00002218B30100299132667AF763444BD550E -:103AE0004AADC3BC588ED19F6EEBE7FA7CC8F5D9BE -:103AF00083310A2091121803A7772E66B5543C45EE -:103B0000CBBD42ACD99E508FEFFB66EAFDD874C99D -:103B100004428D5316619F702004A9153227BB36CD -:103B20004CCEC5DF5EEDD7FC6888E1997AABF3BA7D -:103B300085520C4397711E60A1142805B3373A26AD -:103B4000CDDE44CFDFFD56ECE9986089FBBB72AA5D -:103B500006638F7214409D512225AB343006B9178D -:103B60004EEFC7FE5CCCD5DD6AA9E3B8788AF19B3D -:103B700087730E6295501C41A3352A24B11638076D -:103B8000CFFF46EEDDDC54CDEBB962A8F99A708B1D -:103B9000088481951AA793B62CC2A5D33EE1B7F04D -:103BA0004008C919522BDB3A644EED5F766DFF7CFD -:103BB000899400859BB712A6ADD224C3BFF136E02D -:103BC000C1184809D33B5A2AE55E6C4FF77D7E6CDD -:103BD0000AA583B4188691972EE3A7F23CC0B5D10D -:103BE0004229CB38500AD91B666FEF7E744CFD5DBD -:103BF0008BB502A499961087AFF326E2BDD034C1ED -:103C0000C3394A28D11A580BE77F6E6EF55C7C4D9C -:103C10000CC685D71EE597F42880A1913AA3B3B2CC -:103C2000444ACD5B5669DF78600CE91D722FFB3E7C -:103C30008DD604C79FF516E4A9902081BBB332A2AC -:103C4000C55A4C4BD7795E68E11C680DF33F7A2E5C -:103C50000EE787F61CC495D52AA1A3B03882B1938C -:103C6000466BCF7A5448DD59622DEB3C700EF91F3C -:103C70008FF706E69DD414C5ABB122A0B99230836C -:103C8000C77B4E6AD5585C49E33D6A2CF11E780F1C -:103C9000000219087F00000080000280000E190851 -:103CA0003F40000080061080000F19083F700000A0 -:103CB00019070180001619081F40000080160680B1 -:103CC000001719080F40000080161280001819080C -:103CD0000F80000080161280001919080F80000064 -:103CE000801612800000000000000000891E000005 -:103CF000B51E0000851E0000A91E00009D1E0000CC -:103D0000ED1E0000D11E00000000000000000000B9 -:103D100000000000A72300008D220000D921000030 -:103D200041726475696E6F204E616E6F20457665D5 -:103D3000727900000403090441726475696E6F2092 -:103D40004C4C430012011001020000404123580076 -:103D5000000101020301000000000000000000005B -:103D6000ED300000291C0000D32F0000BB2F000005 -:103D7000B12F0000DD2F00000B300000852F000068 -:103D8000C5310000952F0000812F000000000000C9 -:103D900010B572B68122114B92000433934213D3B3 -:103DA0000F4A01211000147D0C42FCD02021148BFD -:103DB000FF319B085B0021431183D361094B1380C2 -:103DC0000123027D1A42FCD0BFF34F8F064B074AF6 -:103DD000DA60BFF34F8FC046FDE7C0460010000019 -:103DE0000040004102A5FFFF00ED00E00400FA05DD -:103DF000860101000601010006010000000000002C -:103E00004A544147494345206D6B49490000000031 -:103E100000C20100080013040165736172454D562C -:103E20004E20676F72504D564E00000040420F000A -:103E3000FFFFFFFF00C201000000080009040000AE -:103E400001020200000524001001042402060524DA -:103E50000600010524010101070581031000100976 -:103E6000040100020A0000000705020240000007EA -:103E70000583024000000000FFFFFFFF000000007C -:103E8000830000000200000082000000000000002B -:103E90000000000000000000000000000000000022 -:103EA0000000000040420F00FFFFFFFF2001002044 -:103EB0000000000000000000000000000000000002 -:103EC00000000000000000000000000000000000F2 -:103ED00000000000000000000000000000000000E2 -:103EE00000000000000000000000000000000000D2 -:103EF00000000000000000000000000000000000C2 -:103F000000000000000000000000000000000000B1 -:103F1000B5100000C51B00001D200000712F00001F -:103F20008D100000000000000000000000000000F4 -:04000003000032AD1A +:1017E0005B001343338096235E4EDB0032689A42DF +:1017F00015D1200000F00EFC019000280FD101F05F +:10180000E7FD594F3B68C01AC82808D901234B4A45 +:10181000137001F0DDFD554B1860019B3B6020000B +:1018200000F0E0FB3368984203D14A4B1B78002B51 +:1018300018D0200000F0EEFB002813D0200000F0AC +:10184000D1FB3060280001F0F1FB96233168DB000A +:10185000994207D03E4B28001A8801F0FFFC002275 +:101860003C4B1A70F7BD80239B00BAE7C023FBE70F +:101870008023DB00B5E7314B1B78002BF2D03A4CCC +:101880002368002B1CD101F0A3FD384B1B68C01A44 +:10189000374B98421CD8FFF76FFC0028E2D0354B3D +:1018A000987915281CD801F0C7FF2F1F2926423F21 +:1018B0001D1D381D1D2C3C1D1D381D1D1D1D2C32D0 +:1018C00001F086FD2368C01AFA235B009842DAD93A +:1018D00000231A4A13700122224B52421A60C1E7B8 +:1018E000342827D0A02019E0FFF7E4FCFFF794FC90 +:1018F000FFF7CCFCB6E7FFF707FDF7E7FFF744FD7E +:10190000F4E7FFF7D5FDF1E704221B4B1A70FFF750 +:101910006BFD01F05DFD2060E8E78020FFF7C0FC73 +:10192000E4E7FFF74BFDE1E7FFF77AFDDEE7FFF7BE +:1019300029FEDBE7FFF7E4FDD8E7C046AA03002055 +:10194000B4030020480400206A030020880000201F +:101950008600002069030020680300208400002026 +:10196000FFF0FFFF80000020AC030020B003002048 +:1019700060EA0000A00100209F01002010B559215D +:10198000082000F017F80021082000F013F80E24BA +:101990000B2000F01EF82042FAD010BD10B5040054 +:1019A000552000F093F8A02000F090F8200000F0FF +:1019B0008DF810BD70B5040055200D0000F086F8BC +:1019C00020004038C0B200F081F8280000F07EF816 +:1019D00070BD10B50400552000F078F82000803864 +:1019E000C0B200F073F800F08FF810BD10B504001D +:1019F000552000F06BF8042000F068F8E0B200F029 +:101A000065F8200A00F062F800F07EF810BD70B5AD +:101A100004000D00552000F059F8442000F056F85D +:101A2000E0B200F053F8200A00F050F800F06CF833 +:101A3000280000F04BF800F067F870BD10B5552095 +:101A400000F044F8292000F041F800F05DF80400AF +:101A500000F05AF80002204380B210BD10B55520A6 +:101A600000F034F8242000F031F800F04DF810BDFB +:101A700010B50400552000F029F8692000F026F880 +:101A8000E0B200F023F8200A00F020F800F03CF863 +:101A900010BD10B50400552000F018F8642000F0C7 +:101AA00015F8200000F012F800F02EF810BD00002C +:101AB000FF224840044BC0B24000C35A09125940AB +:101AC000C8B29343184370472C3B000070B50D4DCE +:101AD00001000400280001F055FB280001F0B9FACC +:101AE00001F076FC0600280001F0AEFA002804D1CF +:101AF00001F06EFC801B1328F5D9280001F0BAFA1A +:101B0000200070BDF803002010B5054C200001F046 +:101B10009BFA0028F9D0200001F0ACFAC0B210BD49 +:101B2000F8030020962170B5174C0500174A2000D5 +:101B3000490001F093FB002D1BD0012D0DD1002198 +:101B4000200001F01FFB200001F083FA002120009B +:101B500001F018FB200001F07CFA0F2001F03EFCA0 +:101B6000200001F071FA051E05D0200001F082FA74 +:101B7000F6E72900EBE7E1212000054A890201F0A0 +:101B80006DFB280070BDC046F80300201304000060 +:101B900031040000E12110B5024A0348890201F036 +:101BA0005DFB10BD31040000F803002010B50248B1 +:101BB00001F0A8FA10BDC046B403002010B50248D9 +:101BC00001F0A0FA10BDC046F8030020F7B50026CA +:101BD00001240F4D0F49280000F03CF80E4F0F492B +:101BE000380000F037F80E490E4800F033F839009D +:101BF00023000196022200940B4801F057FA2900B5 +:101C00000196032304220094084801F04FFAF7BD1F +:101C10003C0400200008004240040020000C004268 +:101C20000010004244040020B4030020F803002008 +:101C3000F8B505000E0017000024BC4208D02B6840 +:101C40002800315D1B689847002801D00134F4E773 +:101C50002000F8BD016070479446F0B505AC2578CA +:101C60009C1E621E944162460668920737682406ED +:101C70003A4322430724326000682140AD0100242A +:101C800042682943022B00D05C030A43224342608E +:101C9000F0BD30B5C0250368AD031C6812052A40AD +:101CA0002243C0240904A40221400A431A600368A5 +:101CB0005A6814435C6030BD0123026811680B430D +:101CC000136003681A68D207FCD4DA69D207F9D422 +:101CD00070470223026811680B4313600268D369DE +:101CE0009B07FCD4704703681A7ED20702D41A7E81 +:101CF0009207FCD57047002203685A837047036837 +:101D0000187E4007C00F70470368187EC0097047EF +:101D1000802302685B42117E0B4313767047036891 +:101D2000187EC007C00F70470368188DC0B2704797 +:101D300003681A7ED207FCD589B201201985704745 +:101D4000012203689A757047012203681A7570476B +:101D50000368194A30B5934227D0184A934227D0D6 +:101D6000174A934220D10B231021032501229A40C8 +:101D70002B40AB40C224FC359D401248A4000260B9 +:101D80000259AA43C0259D402B00134380220351D2 +:101D9000D2010D4B0A435A800C4A11680C4A11605B +:101DA0005A7852B2002AFBDB30BD09230E21DCE752 +:101DB0000A230F21D9E7C04600080042000C004268 +:101DC0000010004200E100E0000C0040FC00002098 +:101DD0009C000020F8B504000F0016001D00FFF75E +:101DE000B7FF2000FFF768FF1C21BB000B40710705 +:101DF0002268090C0B431360842322689375012F1A +:101E00001AD11021012E00D008390C4B69431868F3 +:101E1000C00001F01BFD0722216802408B8952039C +:101E2000DB04DB0C13438B81226803049089DB0CF9 +:101E3000400B400318439081F8BDC0469C00002031 +:101E400010B5040001F0C4FAE060236820005B696B +:101E50009847002808DA01F0BBFAE368C01AA368C3 +:101E60009842F2D30120404210BDF8B506000D00A3 +:101E700017000024BC4207D03000FFF7E1FF002824 +:101E800002DB28550134F5E72000F8BD3F207047FC +:101E900013B56B460268D9710733546819000122E3 +:101EA000A04716BD10B50221006900F0B9FC10BDB5 +:101EB00010B50321006900F0C9FC10BD10B5130076 +:101EC00004000A000069032100F0B8FD002801D1D8 +:101ED0000123636010BD000010B5054C03002068AD +:101EE000421C04D11A68180052699047206010BD46 +:101EF000E8000020074A0300106810B5411C03D019 +:101F000001235B42136010BD0221186900F088FDB7 +:101F1000F9E7C046E800002010B503783A22023302 +:101F200003700249024800F035FE10BDAC000020ED +:101F30006404002010B502784378A12A0AD1212B2D +:101F400001D0002005E007221349144800F022FECA +:101F5000012010BD212AF4D1202B10D10E490F48A9 +:101F60001A3A00F0B7FC96220B4BD2001968914246 +:101F700002D1DB79DB07E4D501F0EAFBE1E7222BB4 +:101F800003D18278044BDA71EDE7232BD9D1428853 +:101F9000034B1A60D5E7C046A4000020640400206B +:101FA000A00000207047F7B505001700019101F06F +:101FB0000FFA0024E860BC4211D2019A022128697C +:101FC0003B1B121900F0C0FC061E01D0A419F2E759 +:101FD00001F0FEF9EB68C01AAB689842F6D3200016 +:101FE000FEBD0000014B18687047C046A4000020E9 +:101FF000014B1879C0B27047A4000020014B5879FA +:10200000C0B27047A4000020014B9879C0B270475D +:10201000A4000020024BD879012318407047C04625 +:10202000A4000020FA220021054B92009A60054A84 +:1020300008321A60044A59601A6119767047C0461E +:1020400048040020803D000064040020704770B503 +:102050000F26CB1D02003240D5B22C0000093034CF +:10206000092A00DD07341C705A1E994200D170BD48 +:102070001300EFE710B5040001F0F0F9200010BDE7 +:1020800070B582291FD1C3B22A4D5A01AA1891698D +:10209000294C80010C40C0218905214391612749C9 +:1020A000083340185061802228685B01C1180C7900 +:1020B000524222430A7170211A5C8A431100302275 +:1020C0000A431A5470BD0029FCD1C026C1B2194878 +:1020D0004B01C3189A68184DB6052A4032439A60DE +:1020E0000831046848010721154A5A60025D8A4395 +:1020F000110001220A43702102559A692A40324395 +:102100009A610E4A5A61025D8A43110010220A4305 +:1021100002559A680B4920181140802252030A4345 +:102120009A609A68920B92039A6040234279134313 +:102130004371C7E79C060020FFFFFF8F900400203B +:1021400010050020FF3F00F070B50400012320CCF3 +:1021500000212A782000134380222B70520001F0C6 +:10216000FEFBAB78DB07FCD46C6270BD1F22144B06 +:1021700070B51B68590B9C0C9B0111405B0F2240F2 +:102180001F2900D11A391F2A00D1023A072B00D18A +:10219000043B1F2500688E01048D0A492A40214016 +:1021A00031430185018D14000A00AA4322430285B0 +:1021B000028D1903044B13400B43038570BDC046C9 +:1021C000246080003FF8FFFFFF8FFFFFEFF31083D5 +:1021D00003600123436072B670470368002B02D18D +:1021E00062B6BFF36F8F7047836973B50400002B2D +:1021F00018D10600683635786846FFF7E7FF019B7F +:10220000EDB2013B02D33578EDB2FAE768460193AF +:10221000FFF7E3FF002D01D1002076BD606E236E35 +:10222000C01AFAE76846FFF7D1FF22000025019B9C +:10223000B432013B02D31578EDB2FAE76846019358 +:10224000FFF7CBFF002DE7D02300AC34B033186884 +:102250002368E5E710B543694468DBB25A01A21868 +:10226000916809480833084080214903014391607F +:1022700091685B01890B890391602268D318402221 +:1022800019790A431A7110BDFF3F00F0F7B5040039 +:102290006846FFF79BFF0026019B5A1E0192002B08 +:1022A00005D02000083001F0A2FA0600F4E76846E5 +:1022B000FFF793FFA5696846002D49D1FFF786FF18 +:1022C0002000019B6830013B5A1C0BD00278591E3C +:1022D000002A05D168460193FFF77FFF2800FEBD65 +:1022E0000B00F1E768460193FFF777FF236EB542D5 +:1022F0000ED0626E9A420BD920005A1CE318226657 +:102300000133D97F0830C9B201F049FA0135EDE750 +:10231000626E9A42E2D10023236601336846A361CC +:10232000FFF754FF270022000021019B6837013B83 +:10233000B532581CCED0397010785E1E002805D0FA +:10234000200011700193FFF785FFEBE73300F0E702 +:10235000FFF73CFF2000019BB430013B5A1C06D024 +:102360000278591ED5B2002AB4D00B00F6E76846B1 +:1023700001930025FFF731FF22002100AC321368E2 +:10238000B031B54202D0086898421DD80968994218 +:10239000A4D1002368461360A361FFF717FF27004D +:1023A00022000021019BB437013BB532581C00D1FB +:1023B00090E7397010785E1E002811D0200011704F +:1023C0000193FFF747FFEAE72000591CE31811606B +:1023D0006C3319780830C9B201F0E1F90135CBE767 +:1023E0003300E3E710B50400FFF750FF200008308A +:1023F00001F00BFA10BD10B50400FFF747FF2000F5 +:10240000083001F0EEF910BDF0B585B0160001916D +:102410000500FFF73BFF02A8FFF7D8FE0024039B4F +:102420005A1E0392002B0FD0B442F8D22F00083767 +:10243000380001F0D6F90028F1D0380001F0C0F9D9 +:10244000019B18550134EFE702A8FFF7C6FE2000F4 +:1024500005B0F0BDF7B542694368D2B2110004007F +:102460000831186849014118C979C90712D55201C4 +:102470009B189A689204910C002A0CD12000FFF757 +:10248000E9FE63681A686369DBB208335B01D3183D +:102490007F22DA71F7BDE269002A21D122000125ED +:1024A0006C3261666846E5615A60FFF78FFE260070 +:1024B00020002100019B6836013BB430B5315A1C25 +:1024C00033D0357002785F1ED2B20A700A78002AC3 +:1024D00004D120000193FFF7BDFEE8E73B00EEE7E3 +:1024E0002200B03211600022E261220020326846F0 +:1024F0005A60FFF76BFE0125260020002100019B9A +:10250000B436013B6830B5315A1C0ED035700278B4 +:102510005F1ED2B20A700A78002A04D1200001930B +:10252000FFF798FEE8E73B00EEE768460193FFF708 +:1025300054FEA6E713B56A4600230C00D01DD371E4 +:10254000FFF7EAFC236818186B462060D87916BD9F +:1025500003290ED180220E4B62311B68FF31585C7B +:10256000524202435A5468226339FF32FF39995468 +:1025700070470129FCD18022054B24311B68FF31B3 +:10258000585C524202435A5428222339FF32EDE765 +:102590009C06002070B50024274B01210500200077 +:1025A0001C7000F0DDFF0121200000F0DDFF234B57 +:1025B000012120001C7000F0D3FF0121200000F059 +:1025C000D3FF20231E4A0520D1690B43D3610F217D +:1025D00001F01CF80F21062001F018F8194B1A4AD7 +:1025E0005A805A7852B2002AFBDB184800F0EAFE03 +:1025F000174C2000FFF7A8FD2000FFF7B7FD7F2153 +:102600002368C1201A7880000A401A7004221978C1 +:102610000A430C211A701A898A430E491A810A58F2 +:102620001202120A0A5080220A6019787E3A0A437E +:102630001A7001232B7070BD8504002084040020D3 +:1026400000040040000C004006400000F92F00008C +:102650009C06002000E100E00078002810D0012155 +:10266000084B1B681A898A431A810822198B0A436E +:102670001A830422198B0A431A830022024B1A6020 +:102680007047C0469C060020940600200A000E49B0 +:102690008B699B0B9B038B610B680221FF331972C3 +:1026A0009879823901439971197A8907FCD57F207D +:1026B000064B0240997A8143114380229972997A9C +:1026C00052420A439A7270479C0600200050004113 +:1026D00000200B7910B583420AD10800FFF72AFCCD +:1026E000002805D1034A013093699B0B9B0393613A +:1026F00010BDC0469C060020F7B50D001100832ACE +:1027000019D1EBB2384C5A01A21891693748AD0182 +:102710000840C021890501439161354920686D1841 +:102720007021083355615B011A5C8A431100402215 +:102730000A431A54F7BD022A52D12E4BAA00D05890 +:10274000002802D003685B699847B82000F082FE39 +:102750000400294BFF260360234B4360083001F03F +:102760000FF8290022000023606868323140A3611D +:102770006561E36123666366490113705364936482 +:1027800044321372411853728B68184AAD001A40D4 +:10279000C0239B0513438B606269036832401100BC +:1027A0000192072208314901CF5C9743BC460327B9 +:1027B00062461743CF542700019A203752018218EE +:1027C000576062692000324052019B1801229B1918 +:1027D000997A0A439A72FFF73DFD064BEC50A9E740 +:1027E0002800FFF74DFCA5E79C060020FFFFFF8FA8 +:1027F0001005002068040020B03D000070B5050001 +:102800000124064BA200D258002A05D0210028003E +:10281000FFF772FF0134F4E770BDC046EC00002002 +:10282000084B8A00D05810B5002803D003689B6875 +:10283000984710BD044BC9B24901591888688004F3 +:10284000800CF6E7680400209C06002010B50C0000 +:10285000FFF7E6FF00280CD0064BE4B2196880238E +:10286000083464010C1962795B42134363710223DB +:10287000E37110BD9C06002070B5CBB2124A13481C +:102880005C0189018918021951609168104D083363 +:102890000D40802189022943402591609168890B70 +:1028A0008903916001685A018A18167935431571B8 +:1028B00095796D06FCD55B01C918CB79DB07FCD592 +:1028C00000198068C0B270BD100500209C06002071 +:1028D000FF3F00F070B5140040220B4B0D001B6849 +:1028E000FF3359790A435A710021FFF7C5FFA0420F +:1028F00000D9200000230549A34203D0CA5CEA5452 +:102900000133F9E770BDC0469C0600201005002089 +:1029100010B50C48C9B24901421893689B049B0C3E +:102920003F2B0BD99468403B9B04A40B9B0CA40346 +:102930002343936041188868C0B210BD93689B0B15 +:102940009B03F6E79C060020F0B51C002F4B85B0DA +:102950001B6806000D000192002B54D02C4F3B78D1 +:10296000D8B2002B02D1010000F0FEFD64233B70C1 +:10297000284BAA00D058002808D0036822005B68C2 +:10298000019998470400200005B0F0BD29003000EF +:10299000FFF746FF844204D929003000FFF740FFCB +:1029A000040029003000FFF7B3FF0121EBB21A4FFA +:1029B00003935B010293029A3B6801989B18FF33D3 +:1029C0005A7A0A435A72154BA9012200C91800F01D +:1029D000BDFF002CD7D029003000FFF721FF0028D1 +:1029E000D1D14021039B3A6808335B01D318187991 +:1029F000014319710121D971029BD318FF339A7ACF +:102A00000A439A72BFE701246442BCE7940600209F +:102A100084040020680400209C060020100500208B +:102A200013B56B46DC1D22000123FFF78DFF012843 +:102A300001D1207816BD01204042FBE7F0B51C0013 +:102A40003A4B85B01B680E000192002B3FD08023CB +:102A5000DB019C423BD8364D2B78D8B2002B02D1FB +:102A6000010000F081FD642300272B70314BB2017F +:102A7000D3180293002C2CD02F4B1B680393FF23F9 +:102A800033401D0000930835039B6D015D19AB7940 +:102A9000DB0921D0294B2A49186800F0D7FE294BC1 +:102AA0001721584300F0D2FE274BEA79920713D43E +:102AB0009A5D002A01D10138F7D201229A55009B74 +:102AC0005A011D4B9B189A69920B92039A61012738 +:102AD0007F42380005B0F0BD00221B4B25009A55FF +:102AE0003F2C00D93F252A000199029800F02EFFC3 +:102AF000009BA9045A01104B890C9B18029A7F195C +:102B00005A619A69641B920B92030A439A61009B73 +:102B1000039A08335B01D3180222DA715979823A99 +:102B20000A435A71019B5B190193A3E794060020A5 +:102B300085040020900400209C060020FC0000205A +:102B400040420F00701101008704002070B50C0096 +:102B50001D000D4BA601F618110030002A0000F0F0 +:102B6000F5FEE4B2094A640114196661A3690849D3 +:102B700028000B40A361A169AB04890B9B0C89035E +:102B80001943A16170BDC046900400209C0600203E +:102B9000FF3F00F0F7B5104B0F001B7814000190B9 +:102BA000002B0CD10D4B16001D78002D09D00C4EBA +:102BB0000C48358828182D1900F0C8FE35802000F3 +:102BC000FEBD002EFBD033007A1900210198FFF7DB +:102BD000BDFF2D18361AF4E790050020910600205D +:102BE0009206002091050020F8B500200D00140089 +:102BF00000AF012A27D9D31D6A46DB08DB00D31AB0 +:102C00009D46080000F06EFF6E460323022200215D +:102C10000130400030707370A2420DD22878002835 +:102C20000AD0531CDBB20135B0549C4203D00232AF +:102C3000F154D2B2F0E7220031000448FFF7AAFFB6 +:102C4000431E9841C0B2BD46F8BDC0466404002092 +:102C5000F0B50025012785B0184B0E0069461F709E +:102C600004000095FFF766FC154B01A90B806A3B39 +:102C7000FF3BCB715A330B72009B320009334B8000 +:102C80000E4B8D714F7108711D70092E0FD00D4EB6 +:102C9000092237700C4F200000953D80FFF77AFF26 +:102CA00069462000FFF746FC3A8808493570200045 +:102CB000FFF770FF012005B0F0BDC0469005002071 +:102CC00009020000910600209206002091050020D4 +:102CD00030B5CB7804000D0093B0022B08D1C98821 +:102CE0002348FFF7B5FF431E9841C0B213B030BD73 +:102CF000012B0BD1CA881F49112A11D8D2B2002A40 +:102D00000ED02000FFF746FF0120EFE70020032B45 +:102D1000ECD18B78834205D1CA881749032AEDD9B3 +:102D20000A78EEE7022B05D18A7914492000FFF7D3 +:102D30005BFFDBE7012B02D18A791149F6E7032B10 +:102D4000D4D1104B01A91868FFF781F90E4B03A9E4 +:102D50001868FFF77CF90D4B05A91868FFF777F99C +:102D60000B4B07A91868FFF772F9AA7901A9DDE7EB +:102D700064040020F03D0000E03D0000CC3D000078 +:102D8000E43D00000CA0800040A0800044A0800032 +:102D900048A0800073B5060048780D000B2810D8B5 +:102DA00000F04AFD061B0F310F474C7450536D70F5 +:102DB000097801AA002906D1022311803000FFF70B +:102DC000C5FE012076BD00231380314B1B78012BFB +:102DD00000D1137002230021F0E78A780023012A32 +:102DE00009D16A4693802B4B1B78012B00D11371BC +:102DF000022301AAEFE7264A1370274A93699B0B27 +:102E00009B039361DDE78C78012C07D1214B01AA4C +:102E10001C70224B1B7813702300DCE7002C08D1B8 +:102E200001201B4B1C4A187093699B0B9B039361F9 +:102E3000C8E73000A978FFF729FCC2E73000FFF7A8 +:102E400047FFBFE70123164AC5E70B780020DB06E2 +:102E5000B8D13000FFF7D2FC2A200221AA78104B0B +:102E6000FF301A600C4A13681C5C21434A24195431 +:102E7000FF34195D2938FF3801431955D4E7012380 +:102E8000084AA8E78A78074B1A60B6E7002099E756 +:102E9000860400208E0400209C060020A43D000033 +:102EA00094060020980600204B4BF7B51C780700CD +:102EB000002C00D08FE0494E33689B8B1B070ED54A +:102EC00021002000FFF7DCF8326810231100FF31E9 +:102ED000887A03438B72424B1C60082393833368C8 +:102EE0009A8B52071FD504229A833E4A1378002BEF +:102EF0000AD01378013BDBB213701378D8B2002BE1 +:102F000002D1012100F030FB374A1378002B0AD0A0 +:102F10001378013BDBB213701378D8B2002B02D1C7 +:102F2000012100F021FB3368FF331A7AD2061ED547 +:102F300010221A72597930320A435A7160232B4990 +:102F400038000A781A423BD1FFF724FF3368FF3379 +:102F5000002838D08022997952420A439A711A7A0D +:102F6000520604D540221A72597A0A435A723368BB +:102F700007241D8C01239D43EDB20193E1B2002D86 +:102F800029D0002C27D02B002341019A134215D0C1 +:102F90002300326808335B01D318DA79D20702D4F0 +:102FA000DB799B0707D5124BA200D05800280ED022 +:102FB00003681B689847019BA3409D43013CDDE7E4 +:102FC000FFF786FBC2E720210A4A9171C7E7380064 +:102FD000FFF7BEFAEFE7F7BD910600209C06002040 +:102FE00094060020850400208404002010050020A1 +:102FF00068040020FF50004110B50248FFF754FF5D +:1030000010BDC04664040020014B024A1A6070479C +:103010009C060020005000410120704710B5036855 +:10302000014A1B6A984710BD1304000010B5040044 +:103030000069FEF741FE2000143000F0BDFB2000C7 +:10304000203000F0B9FB10BD10B5143000F0C9FB02 +:1030500010BD10B504002000203000F0C2FB002895 +:10306000F9D12069FEF73FFE10BD10B5203000F009 +:10307000BEFB10BD70B5060004001436300000F031 +:103080009FFB230030331B780500FF2B07D0300057 +:1030900000F0ADFB0A2802DDA36BE26B1A6028008A +:1030A00070BD10B5143000F0B0FB10BDF7B51D00B9 +:1030B00008AB1B780400009309AB1B781600019342 +:1030C00000234360FA239B0083600D4B0F000833FD +:1030D0000360143000F054FB2000203000F050FB5F +:1030E0002300009A2C3327619A70019A1E70DA70BF +:1030F00022005D70FF233032200013701374FEBD78 +:10310000043E000070B504000069FEF7F8FD0028D9 +:1031100015D025002069FEF707FE143501002800B0 +:1031200000F03DFB230030331B78FF2B07D0280035 +:1031300000F05DFB092802DC636BE26B1A6020691A +:10314000FEF7EDFD00280DD025002035280000F009 +:1031500048FB002812D0280000F032FBC1B22069E1 +:10316000FEF7E6FD2069FEF7CFFD002805D02069B7 +:10317000FEF7CEFD2069FEF7BEFD70BD2069FEF7AB +:10318000E3FDEFE7F8B5040000690D002600FEF747 +:10319000C6FD2036002834D13F27300000F040FB28 +:1031A000002825D0EFF310830122134211D1EFF351 +:1031B00005831A003A403B42EFD0103A53B2002A3E +:1031C00010DA0F221340083B134A9B089B009B1800 +:1031D0001B682069FEF7A3FD0028DED02000FFF762 +:1031E00091FFDAE79B080D4AC0339B009B58F0E73C +:1031F0003000290000F0D3FA2069FEF7A1FD01207C +:10320000F8BD300000F0EDFA0028C5D12900206992 +:10321000FEF78EFDF3E7C0461CED00E000E100E0A4 +:10322000F0231B011940802306209B0099420AD0FD +:103230000133FF330130994205D0802300205B0029 +:10324000994200D1053070470F200140002001292C +:1032500003D00239481E8141481C70470300F0B575 +:10326000040085B003912C330E211878150000F06E +:10327000CDF9230026002D3318780E212F3600F0CB +:10328000C5F93378022B07D1230040331878FF2883 +:1032900002D00E2100F0BAF9270030373878FF2825 +:1032A00014D0012100F05CF90C213B781B4A5943F2 +:1032B0008B5C5218517801228A401948DB0118189A +:1032C00060631848E2631B18A3631A600122039B22 +:1032D00011002069FEF77EFD29002000FFF7A0FF06 +:1032E000290007002000FFF7AFFFF0221540303D16 +:1032F0006A42554103003900206901220095FEF71A +:10330000ABFC23002E331A7831782069FEF7C1FC1C +:103310002069FEF7DEFC05B0F0BDC0462C3D000084 +:103320001844004114440041FEE70000034B10B56F +:103330001B68002B00D0984710BDC046A007002096 +:103340000DBEFEE7134A1448110010B5134B82421C +:1033500002D0934212D11300824212D10222104BAA +:103360005A62104B0832DA700F4B20329A7300F019 +:1033700089F800F04FF8FEE710CB10C18142FBD373 +:10338000EAE70A4A8B42E9D00021094B9A42E5D28A +:1033900002C2FBE700000020800100203C3E00004C +:1033A000FC700041005000410048004180010020B5 +:1033B000BC07002010B500F02AF8002801D100F069 +:1033C0001BF810BD014B18607047C046A0070020D5 +:1033D000014B18687047C046A407002070B5041E52 +:1033E00007D0044D2E6800F011F82B689B1BA342F8 +:1033F000F9D370BDA407002010B5034A1368013348 +:10340000136000F0ADF910BDA40700207047002044 +:103410007047704710B500F073F800F05FFAFFF7DF +:10342000F8FF0120FFF7DAFF084C2000FFF7B2F8A1 +:103430002000FFF711F9FEF725F9FEF73BF9044BE1 +:10344000002BFAD000E000BFF7E7C046640400207C +:103450000000000010B500F065FA10BD10B500F0D6 +:103460006BFA10BD024A53785BB2002BFBDB70474E +:10347000000C004010230249CA681A42FCD0704771 +:1034800000080040822210B5154B164C5A60A38CE0 +:10349000023A9343A384FFF7EDFF8022124B920080 +:1034A0001B689B0E9B021343A362104BE3629223A3 +:1034B0005B00A384FFF7DEFF0223A28C1343A384E7 +:1034C000FFF7D8FF80230A4C5B00A360FFF7CAFF19 +:1034D000084B6360FFF7C6FF074B084A1A6010BD30 +:1034E00000400041000800402460800080BB0A7C4E +:1034F000000C004000070300FC000020006CDC0210 +:10350000C0201249124B134A10B54B60136A0006D3 +:103510001B021B0A03431362002407238C600B6009 +:103520008021136A09061B021B0A0B4313620A4B14 +:10353000196A1A6A1143094A0A431A6220001A21B9 +:10354000013400F00DF8072CF8D110BD10E000E0B8 +:103550007FBB000000ED00E000040040FC0500001F +:1035600010B500F053F810BDF7B50C224243244DBE +:103570000191535D042B2DD00027AA185278214EBB +:10358000DB01D418A419204E24789E59E4B2BE421F +:1035900003D0013797407E1EB7411B4E9E193669F6 +:1035A000B44600266146B14203D001369640711EF2 +:1035B0008E41002F17D10C37784301992D18686878 +:1035C00001290DD1012E06D1410706D4D3180D4A89 +:1035D0009B181C70F7BD0107F8D504210C43F5E7D3 +:1035E00004218C43F2E701209040019A012A03D183 +:1035F000054A9B189861EDE7034A9B185861E9E773 +:103600002C3D000040440041004400410C22504346 +:10361000494B70B5C65C1B185C78DD78042E00D170 +:1036200087E0081F172842D800F006F90C31313125 +:10363000414141413333393D3D4141414141413FA8 +:10364000418341830023002E33D0F0013B4E2218EA +:1036500092191678042232404E1F022E3BD82D07B5 +:1036600001D540252A4372B6002901D01A2935D147 +:103670000123A340324941184B608B6104239A43D4 +:103680002E4923185B181A7062B6002070BD012302 +:10369000D9E706232B405A1E93410433D3E7012375 +:1036A0002B400233CFE70623CDE70723CBE70923DF +:1036B000C9E7022CC9D10629C7D0224A10780028B0 +:1036C000C3D01670204A1078A0431070D079C0097A +:1036D0000128FBD0B9E702263243C0E78D1E012D39 +:1036E0000CD80123A340164D45196B60032903D163 +:1036F0006B6104231A43C3E7AB61FAE7012904D1E4 +:10370000A1400F4BC3189960B8E7104965082D1800 +:103710006D18E10707D50F2629781B0131400B43AF +:103720002B700123E6E70F262978B143194329704E +:10373000F7E701204042A9E72C3D0000404400414A +:1037400000440041A8070020002800423044004106 +:103750000122024B52421A607047C046000100200D +:10376000054A10B51368591C05D0013B1360002BA6 +:1037700001D1024B984710BD00010020010000203C +:1037800010B50400802000F0CDF8802200212060D8 +:1037900000F0E5F8002320006360A36010BD7F22E5 +:1037A000436810B50133134082689A4203D04268DF +:1037B0000468A154436010BD0023436083607047D8 +:1037C000826843689A4209D07F2183680268D25C8C +:1037D000836801330B408360100070470120404232 +:1037E000FBE743688068181A00D58030704742684C +:1037F00083689A4204DB43688068C01A7F30704750 +:1038000083684068181A0138F9E7826843689A4269 +:1038100003D083680268D05C704701204042FBE718 +:1038200003007F2240689B6801301040C01A434269 +:103830005841C0B27047000002B4714649084900BF +:10384000095C49008E4402BC7047C046002934D050 +:103850000123002210B488422CD301242407A14262 +:1038600004D2814202D209011B01F8E7E400A1421F +:1038700004D2814202D249005B00F8E7884201D3BA +:10388000401A1A434C08A04202D3001B5C08224392 +:103890008C08A04202D3001B9C082243CC08A04203 +:1038A00002D3001BDC082243002803D01B0901D0EF +:1038B0000909E3E7101C10BC704701B5002000F0B7 +:1038C0000BF802BD0029F8D003B5FFF7C1FF0EBC0D +:1038D0004243891A1847C0467047C04670B5002653 +:1038E0000C4D0D4C641BA410A64209D1002600F01B +:1038F00011F90A4D0A4C641BA410A64205D170BDF3 +:10390000B300EB5898470136EEE7B300EB58984701 +:103910000136F2E7680100206801002068010020FC +:103920007801002010B5034B0100186800F06AF818 +:1039300010BDC0460401002010B5034B01001868FB +:1039400000F016F810BDC04604010020002310B599 +:103950009A4200D110BDCC5CC4540133F8E7030097 +:103960001218934200D1704719700133F9E7000033 +:1039700070B50500002910D00C1F2368002B00DA59 +:10398000E418280000F0B5F81D4A1368002B05D193 +:1039900063601460280000F0ADF870BDA34209D93F +:1039A000216860188342F3D118685B684118216070 +:1039B000EEE713005A68002A01D0A242F9D919682B +:1039C0005818A0420BD12068091858181960824273 +:1039D000E0D110685268411819605A60DAE7A042D5 +:1039E00002D90C232B60D5E721686018824203D1ED +:1039F000106852684118216062605C60CAE7C04686 +:103A0000AC070020F8B50323CD1C9D430835060004 +:103A10000C2D1FD20C25A9421ED8300000F069F8E9 +:103A200025490A681400002C1AD1244F3B68002B4A +:103A300004D12100300000F043F838602900300044 +:103A400000F03EF8431C2AD10C233000336000F014 +:103A500051F803E0002DDEDA0C2333600020F8BDBE +:103A600023685B1B18D40B2B03D92360E418256053 +:103A700003E06368A2420DD10B60300000F03AF819 +:103A8000200007220B30231D9043C21AE7D01B1AD7 +:103A9000A350E4E75360F0E722006468C3E7032320 +:103AA000C41C9C43A042E2D0211A300000F008F868 +:103AB000431CDCD1C8E7C046AC070020B00700209B +:103AC000002370B5064C05000800236000F014F8D0 +:103AD000431C03D12368002B00D02B6070BDC0466F +:103AE000B80700200023C25C0133002AFBD1581E16 +:103AF0007047704770470000044A1368002B03D0DA +:103B00001818106018007047014BF9E7B40700203F +:103B1000BC070020F8B5C046F8BC08BC9E467047FC +:103B2000F8B5C046F8BC08BC9E4670470000891135 +:103B300012239B322446AD573665BF74488CC19D15 +:103B40005AAFD3BE6CCAE5DB7EE9F7F881100801F5 +:103B500093331A22A5562C47B7753E64C99C408DF5 +:103B6000DBBF52AEEDDA64CBFFF976E802218B3091 +:103B7000100299132667AF763444BD554AADC3BCD5 +:103B8000588ED19F6EEBE7FA7CC8F5D983310A20B5 +:103B900091121803A7772E66B5543C45CBBD42ACB5 +:103BA000D99E508FEFFB66EAFDD874C904428D534D +:103BB00016619F702004A9153227BB364CCEC5DF95 +:103BC0005EEDD7FC6888E1997AABF3BA85520C4375 +:103BD00097711E60A1142805B3373A26CDDE44CF75 +:103BE000DFFD56ECE9986089FBBB72AA06638F7211 +:103BF00014409D512225AB343006B9174EEFC7FE55 +:103C00005CCCD5DD6AA9E3B8788AF19B87730E6234 +:103C100095501C41A3352A24B1163807CFFF46EE34 +:103C2000DDDC54CDEBB962A8F99A708B08848195DC +:103C30001AA793B62CC2A5D33EE1B7F04008C91924 +:103C4000522BDB3A644EED5F766DFF7C89940085E4 +:103C50009BB712A6ADD224C3BFF136E0C118480904 +:103C6000D33B5A2AE55E6C4FF77D7E6C0AA583B480 +:103C7000188691972EE3A7F23CC0B5D14229CB38E4 +:103C8000500AD91B666FEF7E744CFD5D8BB502A4A4 +:103C900099961087AFF326E2BDD034C1C3394A28C4 +:103CA000D11A580BE77F6E6EF55C7C4D0CC685D73C +:103CB0001EE597F42880A1913AA3B3B2444ACD5BA4 +:103CC0005669DF78600CE91D722FFB3E8DD604C764 +:103CD0009FF516E4A9902081BBB332A2C55A4C4B84 +:103CE000D7795E68E11C680DF33F7A2E0EE787F600 +:103CF0001CC495D52AA1A3B03882B193466BCF7A64 +:103D00005448DD59622DEB3C700EF91F8FF706E623 +:103D10009DD414C5ABB122A0B9923083C77B4E6A43 +:103D2000D5585C49E33D6A2CF11E780F0002190852 +:103D30007F00000080000280000E19083F40000054 +:103D400080061080000F19083F70000019070180DD +:103D5000001619081F400000801606800017190879 +:103D60000F40000080161280001819080F80000014 +:103D700080161280001919080F800000801612802A +:103D80000000000000000000911E0000BD1E0000A9 +:103D90008D1E0000B11E0000A51E0000F51E0000D3 +:103DA000D91E00000000000000000000000000001C +:103DB0005524000009240000F7230000E52300003B +:103DC0004D20000075200000E9210000417264755B +:103DD000696E6F204E616E6F2045766572790000C6 +:103DE0000403090441726475696E6F204C4C4300F2 +:103DF000120110010200004041235800000101029D +:103E000003010000000000000000000085310000F8 +:103E1000311C00006B3000005330000049300000BE +:103E200075300000A33000001D3000005D3200003E +:0C3E30002D3000001930000000000000E0 +:103E3C0010B572B68122114B92000433934213D306 +:103E4C000F4A01211000147D0C42FCD02021148B50 +:103E5C00FF319B085B0021431183D361094B138015 +:103E6C000123027D1A42FCD0BFF34F8F064B074A49 +:103E7C00DA60BFF34F8FC046FDE7C046001000006C +:103E8C000040004102A5FFFF00ED00E00400FA0530 +:103E9C00860101000601010006010000000000007F +:103EAC004A544147494345206D6B49490000000085 +:103EBC0000C20100080013040165736172454D5680 +:103ECC004E20676F72504D564E00000040420F005E +:103EDC00FFFFFFFF00C20100000008000904000002 +:103EEC00010202000005240010010424020605242E +:103EFC0006000105240101010705810310001009CA +:103F0C00040100020A00000007050202400000073D +:103F1C000583024000000000FFFFFFFF00000000CF +:103F2C0083000000020000008200000040420F00ED +:103F3C00FFFFFFFF08010020000000000000000050 +:103F4C000000000000000000000000000000000065 +:103F5C000000000000000000000000000000000055 +:103F6C000000000000000000000000000000000045 +:103F7C000000000000000000000000000000000035 +:103F8C000000000000000000000000000000000025 +:103F9C000000000000000000B5100000CD1B000068 +:103FAC0025200000093000008D10000000000000EA +:040000030000334581 :00000001FF From bfeae4cf924a5a97fb260e8273ae9eba53074d94 Mon Sep 17 00:00:00 2001 From: Egil Kvaleberg Date: Mon, 19 Aug 2019 14:00:19 +0200 Subject: [PATCH 02/65] Remove loop in Serial transmit driver (#42) * Remove loop in Serial transmit driver that causes the CPU to spend most of its time looping in the interrupt driver, entirely locking out other operations and also causing incoming data on other Serial ports to be lost. * Make one common method to handle the interrupt emulation, and also test DREIF befre actually invoking the emulated interrupt. * Improve name of DRE polling function --- cores/arduino/UART.cpp | 37 ++++++++++++++++++++----------------- cores/arduino/UART.h | 2 ++ 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/cores/arduino/UART.cpp b/cores/arduino/UART.cpp index 8e0520bc..0990136d 100644 --- a/cores/arduino/UART.cpp +++ b/cores/arduino/UART.cpp @@ -88,7 +88,6 @@ void serialEventRun(void) void UartClass::_tx_data_empty_irq(void) { // Check if tx buffer already empty. - // This interrupt-handler can be called "manually" from flush(); if (_tx_buffer_head == _tx_buffer_tail) { // Buffer empty, so disable "data register empty" interrupt (*_hwserial_module).CTRLA &= (~USART_DREIE_bm); @@ -107,8 +106,6 @@ void UartClass::_tx_data_empty_irq(void) (*_hwserial_module).TXDATAL = c; - while(!((*_hwserial_module).STATUS & USART_DREIF_bm)); - if (_tx_buffer_head == _tx_buffer_tail) { // Buffer empty, so disable "data register empty" interrupt (*_hwserial_module).CTRLA &= (~USART_DREIE_bm); @@ -121,6 +118,23 @@ void UartClass::_tx_data_empty_irq(void) } } +// To invoke data empty "interrupt" via a call, use this method +void UartClass::_poll_tx_data_empty(void) +{ + if ( (!(SREG & CPU_I_bm)) || (!((*_hwserial_module).CTRLA & USART_DREIE_bm)) ) { + // Interrupts are disabled either globally or for data register empty, + // so we'll have to poll the "data register empty" flag ourselves. + // If it is set, pretend an interrupt has happened and call the handler + //to free up space for us. + + // Invoke interrupt handler only if conditions data register is empty + if ((*_hwserial_module).STATUS & USART_DREIF_bm) { + _tx_data_empty_irq(); + } + } + // In case interrupts are enabled, the interrupt routine will be invoked by itself +} + // Public Methods ////////////////////////////////////////////////////////////// void UartClass::begin(unsigned long baud, uint16_t config) @@ -253,9 +267,7 @@ void UartClass::flush() // If interrupts are globally disabled or the and DR empty interrupt is disabled, // poll the "data register empty" interrupt flag to prevent deadlock - if ( (!(SREG & CPU_I_bm)) || (!((*_hwserial_module).CTRLA & USART_DREIE_bm)) ) { - _tx_data_empty_irq(); - } + _poll_tx_data_empty(); } // If we get here, nothing is queued anymore (DREIE is disabled) and // the hardware finished transmission (TXCIF is set). @@ -294,18 +306,9 @@ size_t UartClass::write(uint8_t c) tx_buffer_index_t i = (_tx_buffer_head + 1) % SERIAL_TX_BUFFER_SIZE; //If the output buffer is full, there's nothing for it other than to - //wait for the interrupt handler to empty it a bit + //wait for the interrupt handler to empty it a bit (or emulate interrupts) while (i == _tx_buffer_tail) { - if ( ( !(SREG & CPU_I_bm) ) || ( !((*_hwserial_module).CTRLA & USART_DREIE_bm) ) ) { - // Interrupts are disabled either globally or for data register empty, - // so we'll have to poll the "data register empty" flag ourselves. - // If it is set, pretend an interrupt has happened and call the handler - //to free up space for us. - - _tx_data_empty_irq(); - } else { - // nop, the interrupt handler will free up space for us - } + _poll_tx_data_empty(); } _tx_buffer[_tx_buffer_head] = c; diff --git a/cores/arduino/UART.h b/cores/arduino/UART.h index ef966e9f..574f0c35 100644 --- a/cores/arduino/UART.h +++ b/cores/arduino/UART.h @@ -169,6 +169,8 @@ class UartClass : public HardwareSerial // Interrupt handlers - Not intended to be called externally inline void _rx_complete_irq(void); void _tx_data_empty_irq(void); + private: + void _poll_tx_data_empty(void); }; #if defined(HWSERIAL0) From 7df9f211927b902a67ed322734a32ebfe89dd34b Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Thu, 22 Aug 2019 09:56:59 +0200 Subject: [PATCH 03/65] Publish 1.8.4 --- platform.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform.txt b/platform.txt index c386d1d6..bf4d5612 100644 --- a/platform.txt +++ b/platform.txt @@ -6,7 +6,7 @@ # https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5-3rd-party-Hardware-specification name=Arduino megaAVR Boards -version=1.8.3 +version=1.8.4 # AVR compile variables # --------------------- From 8c2fdd0773a88daaa2e44813058c01de84a31ef5 Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Tue, 10 Sep 2019 07:41:34 +0200 Subject: [PATCH 04/65] Bugfix - including 'NANO_Compat.h' within 'Arduino.h' if 'AVR_NANO_4809_328MODE' is defined --- cores/arduino/Arduino.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cores/arduino/Arduino.h b/cores/arduino/Arduino.h index 1892a7a1..203a477f 100644 --- a/cores/arduino/Arduino.h +++ b/cores/arduino/Arduino.h @@ -143,6 +143,9 @@ bool isDoubleBondedActive(uint8_t pin); #ifdef UNO_WIFI_REV2_328MODE #include #endif +#ifdef AVR_NANO_4809_328MODE +#include +#endif #if defined(HAVE_HWSERIAL0) && defined(HAVE_CDCSERIAL) #error "Targets with both UART0 and CDC serial not supported" #endif From ebc7933d519e5248fc2b7d1cac365be55d297c6e Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Tue, 10 Sep 2019 07:48:09 +0200 Subject: [PATCH 05/65] Renaming 'NANO_Compat.h/cpp' to 'NANO_compat.h/cpp' for the naming scheme to be identical to 'UNO_compat.h/cpp' --- cores/arduino/Arduino.h | 2 +- cores/arduino/{NANO_Compat.cpp => NANO_compat.cpp} | 2 +- cores/arduino/{NANO_Compat.h => NANO_compat.h} | 0 cores/test/CMakeLists.txt | 2 +- cores/test/src/test_main.cpp | 14 +++++++------- 5 files changed, 10 insertions(+), 10 deletions(-) rename cores/arduino/{NANO_Compat.cpp => NANO_compat.cpp} (99%) rename cores/arduino/{NANO_Compat.h => NANO_compat.h} (100%) diff --git a/cores/arduino/Arduino.h b/cores/arduino/Arduino.h index 203a477f..16063a6a 100644 --- a/cores/arduino/Arduino.h +++ b/cores/arduino/Arduino.h @@ -144,7 +144,7 @@ bool isDoubleBondedActive(uint8_t pin); #include #endif #ifdef AVR_NANO_4809_328MODE -#include +#include #endif #if defined(HAVE_HWSERIAL0) && defined(HAVE_CDCSERIAL) #error "Targets with both UART0 and CDC serial not supported" diff --git a/cores/arduino/NANO_Compat.cpp b/cores/arduino/NANO_compat.cpp similarity index 99% rename from cores/arduino/NANO_Compat.cpp rename to cores/arduino/NANO_compat.cpp index f199125d..997d36e3 100644 --- a/cores/arduino/NANO_Compat.cpp +++ b/cores/arduino/NANO_compat.cpp @@ -16,7 +16,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "NANO_Compat.h" +#include "NANO_compat.h" #ifdef AVR_NANO_4809_328MODE diff --git a/cores/arduino/NANO_Compat.h b/cores/arduino/NANO_compat.h similarity index 100% rename from cores/arduino/NANO_Compat.h rename to cores/arduino/NANO_compat.h diff --git a/cores/test/CMakeLists.txt b/cores/test/CMakeLists.txt index 2605c248..bea90144 100644 --- a/cores/test/CMakeLists.txt +++ b/cores/test/CMakeLists.txt @@ -25,7 +25,7 @@ set(TEST_TARGET testArduinoCore-megaavr) set(TEST_SRCS src/test_main.cpp - ../arduino/NANO_Compat.cpp + ../arduino/NANO_compat.cpp ) ########################################################################## diff --git a/cores/test/src/test_main.cpp b/cores/test/src/test_main.cpp index 41adfe12..4b0d36da 100644 --- a/cores/test/src/test_main.cpp +++ b/cores/test/src/test_main.cpp @@ -19,11 +19,11 @@ #define CATCH_CONFIG_MAIN #include -#include "../../arduino/NANO_Compat.h" +#include "../../arduino/NANO_compat.h" /*****************************************************************************/ -SCENARIO("Testing Arduino Nano 4809 DDRB compatibility class", "NANO_Compat::DDRBClass") { +SCENARIO("Testing Arduino Nano 4809 DDRB compatibility class", "NANO_compat::DDRBClass") { PORT_t portb, porte; DDRBClass DDRB(&portb, &porte); @@ -63,7 +63,7 @@ SCENARIO("Testing Arduino Nano 4809 DDRB compatibility class", "NANO_Compat::DDR /*****************************************************************************/ -SCENARIO("Testing Arduino Nano 4809 PORTB compatibility class", "NANO_Compat::PORTBClass") { +SCENARIO("Testing Arduino Nano 4809 PORTB compatibility class", "NANO_compat::PORTBClass") { PORT_t portb, porte; PORTBClass PORTB(&portb, &porte); @@ -103,7 +103,7 @@ SCENARIO("Testing Arduino Nano 4809 PORTB compatibility class", "NANO_Compat::PO /*****************************************************************************/ -SCENARIO("Testing Arduino Nano 4809 DDRC compatibility class", "NANO_Compat::DDRCClass") { +SCENARIO("Testing Arduino Nano 4809 DDRC compatibility class", "NANO_compat::DDRCClass") { PORT_t porta, portd; DDRCClass DDRC(&porta, &portd); @@ -149,7 +149,7 @@ SCENARIO("Testing Arduino Nano 4809 DDRC compatibility class", "NANO_Compat::DDR /*****************************************************************************/ -SCENARIO("Testing Arduino Nano 4809 PORTC compatibility class", "NANO_Compat::PORTCClass") { +SCENARIO("Testing Arduino Nano 4809 PORTC compatibility class", "NANO_compat::PORTCClass") { PORT_t porta, portd; PORTCClass PORTC(&porta, &portd); @@ -195,7 +195,7 @@ SCENARIO("Testing Arduino Nano 4809 PORTC compatibility class", "NANO_Compat::PO /*****************************************************************************/ -SCENARIO("Testing Arduino Nano 4809 DDRD compatibility class", "NANO_Compat::DDRDClass") { +SCENARIO("Testing Arduino Nano 4809 DDRD compatibility class", "NANO_compat::DDRDClass") { PORT_t porta, portb, portc, portf; DDRDClass DDRD(&porta, &portb, &portc, &portf); @@ -245,7 +245,7 @@ SCENARIO("Testing Arduino Nano 4809 DDRD compatibility class", "NANO_Compat::DDR /*****************************************************************************/ -SCENARIO("Testing Arduino Nano 4809 PORTD compatibility class", "NANO_Compat::PORTDClass") { +SCENARIO("Testing Arduino Nano 4809 PORTD compatibility class", "NANO_compat::PORTDClass") { PORT_t porta, portb, portc, portf; PORTDClass PORTD(&porta, &portb, &portc, &portf); From e458d1d2a16d567afa50f7ba2dd17db3f65e35fd Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Tue, 10 Sep 2019 11:09:33 +0200 Subject: [PATCH 06/65] [MuxTO] Reset 4809 on baudrate change / port open * adds UNO like mode * changes the reported fw version to 1.07 (M_MCU on verbose avrdude) --- firmwares/MuxTO/JTAG2.h | 6 +- firmwares/MuxTO/MuxTO.bin | Bin 12220 -> 12288 bytes firmwares/MuxTO/MuxTO.hex | 1496 +++++++++++++++++++------------------ firmwares/MuxTO/MuxTO.ino | 19 +- firmwares/MuxTO/lock.h | 38 + 5 files changed, 809 insertions(+), 750 deletions(-) create mode 100644 firmwares/MuxTO/lock.h diff --git a/firmwares/MuxTO/JTAG2.h b/firmwares/MuxTO/JTAG2.h index 44b8dfb8..5a85942f 100644 --- a/firmwares/MuxTO/JTAG2.h +++ b/firmwares/MuxTO/JTAG2.h @@ -38,9 +38,9 @@ enum baud_rate { // *** Parameter Values *** constexpr uint8_t PARAM_HW_VER_M_VAL = 0x01; constexpr uint8_t PARAM_HW_VER_S_VAL = 0x01; -constexpr uint8_t PARAM_FW_VER_M_MIN_VAL = 0x00; -constexpr uint8_t PARAM_FW_VER_M_MAJ_VAL = 0x06; -constexpr uint8_t PARAM_FW_VER_S_MIN_VAL = 0x00; +constexpr uint8_t PARAM_FW_VER_M_MIN_VAL = 0x07; +constexpr uint8_t PARAM_FW_VER_M_MAJ_VAL = 0x01; +constexpr uint8_t PARAM_FW_VER_S_MIN_VAL = 0x07; constexpr uint8_t PARAM_FW_VER_S_MAJ_VAL = 0x06; extern uint8_t PARAM_EMU_MODE_VAL; extern baud_rate PARAM_BAUD_RATE_VAL; diff --git a/firmwares/MuxTO/MuxTO.bin b/firmwares/MuxTO/MuxTO.bin index 9f3dd81946a5a177b61314e954f3f5d2cf13b46e..b290286190f673668355bd1c488f0710b7726596 100755 GIT binary patch delta 4446 zcmZ`deOz4CmFK?sVE7t_41{4|;0;4ym2c zL8^c3&hK~LJ@?%6b?-U%oD1i_8VQ-f0{n}W0N+J;zLMV7RP_~x-uyAV+_A9C@c#>r zEYizy%>93OK9@UkxQ-k+a<+Q(z(#;8PD_;Q4RAz^q%2d@o9@&DFZ2LdqIw{}^%8MD z$%AEz(HSQZ`PB5p7w7ZIn{vr$cU2A)0Ep*gBV3y(>ILzTtaI7?skjfRZ^&-^ZkO{m z-%{ROK5icY@m=}a1Znwj;*8%ILlRQ1$RH|om^iJ|GSulomCmWv15P;g7a;zWK0}s~ zlk}fS19^g8BWvpKmtmP6$~FsksnT7l6V-oRCad*eZ2T;4=2hu-jTWLo&OvUY!`xlP zcgiNGjtB8XCgS9g|2Tc0YhLRJ&Ww;YgWEU5i4$pEetDC#URQHWfSOr>teV|t-=8;U z(B{NBE94+$$9}S|eE%_et8Qh^#l#QM)|2!hT_bsfKCfG8zguO8a)JPV9N`&+d^|o7 z9T_U>c-xh91O@zmW)hR(Zr{s(;|z!+^j>}aKu=~4 z8M`v3TC%|%{t)>#X2@z-F2#i@rvHgFQ}omHb(gK(g$zuLC}U%W|*FUu!+<)$+K_1qJFb|bee%&nFOHwhw`k{lLTEzBA3o?WiitIU zJHUf?jCOh>AbvGVY7Pb41iSEk|JoSm-VkHlJF<^!+@-P6qMC1gfqgTwe{+%DgY51Y zxOH)z%QI$0bxgD~8`eZ!vHJ%e?DLNCU~OlH)}Z8lC~0W33p#hnjAx7!14;AFuY@d% z(iajw#8L_Gn61+tnMp)kJHa}NYLB}13|s=w&@q2$oSCp?$@jrs6lVz)8eBg#ZU0xd z=^}C6)@Kz!d?bBm&=w+3uMaWaj}`CGmj}oFjoQ94N}Ir_k^=4~jWVmaL+lJ8d(_o1 zbP0aocg3K#E9e9J7!eEA(azwPohH5#6;CCdVB$f1HMwLi;(8j+CZ=5(^zss%NvsXB zsK2YZ_m%>#%pK$Ye~C*|%QbpB*4pnH0&gX{ygc0!tU#An2gm)DGpe*n2KUFYRl)I* zQg`JH22*XSZm7Fwx5Lrqa4g?2s*Q-P0S4C4}Fwi731&a z4{^O#xq?^lEG9EcXjYlGd;^hv2xFMtEYk(VhY%h|ToqL{g5ytc{xgKf5D$F}a008+ zKO(5o3guN)ds#V$-*IIUl}{eX?I)wcdUm@D2MFlFjmIBU*!Ra+q0>pDMmdS+qQ~?4 zBpIo&y8m>Mt-pe)EKH#YRy;#LkCY?GmBK(0@mZNQ54LvHDMZWq4N%s{LjYF}DbQFE zBaMY|a5BzPg&)OXL|&Mh6-L}I7hz~GU`Hb2J+h(7peYT@^H>b7Ca$2Mq3;m(vag|| z0$zG%$f^feiJ*15K3y+czg@9RG1`KYtgHQl%!&j%&xI~`6z8K03Zy91k=mkxq5x}O zZE5phQJ@X6=CnCr#(LS5UJEWDN4Xk!Dj!u1$PGBtx%4ctcT4C&6{s5VA%<_$(^;3D--aYhRM%%6BF)wi)^}|CjD}5L zYy5O~?Nj9VWU4lY5P_1qdObUw$>ntg#3tMV(B6fn5w@cYrhwmvIQ13O(ont4bOKY0 zAWUv62ou9`#7@$9VJBzJ(52?Os*^}y4+~Z5SLQ;lAs%)PkN1GvG^~1GLst`zhDmUCUm|g4QRgWfh0z`f`(7E4BkT%8?MI>W{^Iw@G0y28USF}K9K>na zSVdwd%Rj+e^`v|ii^A!lasT|UdB{!y+zbm-iulO%gwV5qZ~p>5{%4$HFBI(RER>9o z)>`v2+E}1TQ2TT}WM^-MUD-HO;%K`V4%0IKT7PyNaBu zG?p%M8nG5VmM#z4`*uWjgttzBCv(Y$ua|G8s94%-{{il3903!e9WPP4u^phJ1;Cd> zw=P{}WInia=;5Us%NVNN5k7y!5XaMh52pf)>W?uy^aT(lwR-rMo8ga_$|Op0B7h*BXIehDz!XmKo_EDtKY1ug1RT$BYm6TrS&Btfm3F9lxR@YbZWKw@z@HL2?|bnj zLGq$)NR>uYmY`0<9!?bn4I1`9sxX+NVM1!}CPVWF4^51a7cXK#V3)oH%VaHr1;LF_ za3TWj2we!h2=_;g&>JphQ3*Kiy@+)mAgx5(#pB zcC6``T1)tv(H?womSE2QJjJ6VzWA|?v0+L)pzoUPN|H+Wtn@+Jgs&%6;_;l> zEl{L~R7HA1)d#_wj=>!KQd-P+z#n@8yss5*{L5safKMK*|7(tGF;UKQ&e(#_gfDmyB$vF+d@JIF`}FDshFHN5E>SIVk%9#v^f1rcJUi!lf)M-JHUQleC>~L~BhzIH8q?X)A z|A#b?yXa-IvVKDbYPC?YIn=L6{fZsccV>3`#J?T+9kNo%0ce%E9YhZeqbm*MT)0}un))Z7U*=jY8ABVs(8zQZx^Ex{? zj)X|dY-o0E@yrJl*nC#E*Cl^g`%ITJuAqQgD=s;q@k zz5$qipUiggemNAC)P)H22Ra|wL}zqWjNd|gIU#3Cj)vf$ZY+*?92zT8htRR-ux*w%FiYmV181OcF-Yx^#~CM6-BaV zK^&2_0d1dUOdF^S67jt(3&sQJ?awv9k7EC1K#Ej_!40w5`Qw|MK*Xuc6F2K?N@L9L z_tK}mnpuXuo7TgTEv>K$SdgAgGmOzcNVE2jX(qv>Co?E9GRx5CFv=fMMHov@=9=(B z>VoddJiKL1_(88RCOYfm0J7(Fm<$rKpY>UX>YAMTOYcHs9-S8{?t0iy3M{(IATIIxHcL zvuwI`j1$)+i??mR&9o@}dcuQPD$zD(?)HpMCq{*xz_cC~?%X^Ft-&9A%j3*KafTcM zr!h{%M0UrPHNmM7%bU);86pJyr6D4|pWPlX50Im41{m{vx-B^2)x`Y)w(Vwhbyw2h zT-fk<+B3lR?rQq5&=Q=3BVI#nUBC&JF(N7%aC8PNAt^d49EFz?Q$iYDnuAE9Mb-6x zvDG&VL2z5+c>YgkI|5a~Da*>hgx5N)NcU#I`PW!`U}Cu3X`LqGZhC1&})zux< z)s3BMhe#_C4`c7J?4Pl1$jxDUDLaj+ z^b-t97MScdy&L;63{V!VgNO$a9zt9Z6=f9rQ#d}2Fz^w;2~5G`2&TvmdmfLM!AK;y4e-TVyHPiRS@%;O%04A$YMSdwURP2ALB{y!MKr0$|xI z-n^JQ=!BO3DmrX3o;hg>6I}+6>lm$F+RasE>D^1~YK|d6t)Sws)W zl={k$%aJ3zDQb6p8t2`nc(KpeXITy6FEWQ61%dNW865BSa`Cz0Im4xQi1<AL_@%K?t*>7$lbJ@er)J^i(1T{A;rE3C&y#;_^!pf^9B zhwF3UWvGj5{KP{Cj}{!&(7Rarpmb~1?PdFNT4)F;b(#So&^^Gm!I-2^R2?X}wx1?k zR}ihArtMaNd`x#(>-B7m@&~Lg4!cR~Ha+7)G{1VajtQEmuX-h$+gI(-f|$$FlhwPp zs6vZtR+l`63~W6MS{U<=nhnVH-7I~oW<}wWQ z73_eS4VGtJUL%A`2t16mP^1v5p(yZQiX!bF#F z0N0CqBEJo5p$O<{&Yc&3YfR`%%9T`;T!` zfIMpsD$;jT#Q}|qJ&-C2=v3_fR6)R?VtZ0Q879xZpJ2%^V#drPoI|*@mcDK0Ie(UZ zY`2m(=n}{MwuTHo0nk{layCJP8~kr13c|q8>0iY6x+0yY#~rI~IDmQ{T|9tiP!Btl z2|c~y;K_T`D6GX}^rY!l!GefAP45woZ9R~FJ;B@a{o_NwNpzs1SLII0K z$^znAs3{o2>}FS_Th)g#bDjh^zhxlQi!pV_GRMez{0=GefEdM6!(;yv770^?QQlH9 zlu+rf<69#Y=Ld7rO?VBOB8>M{Fogck~+v1AsU<*{0<f$RWpq9GD;OOsdhHohpsPG`C8MjO|tpFXIc9P?et&>Oc|HK~DO0mR|wR8{;?Cvo&?4>4&u|$kWtTXRE#-Gx;a8 zgil7<vrPZ|GSicYMR>2;bQyp6(GKmY7292LtKC^q$y4=R*bdj zMy)78wNe=9x+2TSGb+2rUm7HBr2}}hDN~fu@Us>n)XP+T18sZ}zlM^S zkBT&_|(95Dg>t_q+QO)WwBM{vx3{{+5KAcFt^ diff --git a/firmwares/MuxTO/MuxTO.hex b/firmwares/MuxTO/MuxTO.hex index 777f523b..012215d9 100644 --- a/firmwares/MuxTO/MuxTO.hex +++ b/firmwares/MuxTO/MuxTO.hex @@ -1,766 +1,770 @@ -:101000000010002045330000293300004133000068 +:1010000000100020A91C00008D1C0000A51C000081 :1010100000000000000000000000000000000000D0 -:101020000000000000000000000000002933000064 -:10103000000000000000000029330000B53300006C -:101040002933000029330000293300002933000030 -:101050002933000029330000293300002D3300001C -:1010600029330000BD1B0000AD1B00002933000028 -:101070002933000029330000293300002933000000 -:1010800029330000293300002933000010B5064C35 +:101020000000000000000000000000008D1C000017 +:1010300000000000000000008D1C0000191D0000D1 +:101040008D1C00008D1C00008D1C00008D1C0000FC +:101050008D1C00008D1C00008D1C0000911C0000E8 +:101060008D1C0000191C0000091C00008D1C0000D4 +:101070008D1C00008D1C00008D1C00008D1C0000CC +:101080008D1C00008D1C00008D1C000010B5064C4E :101090002378002B07D1054B002B02D0044800E039 :1010A00000BF0123237010BD80010020000000005C -:1010B000383E0000044B10B5002B03D00349044810 +:1010B0007C3E0000044B10B5002B03D003490448CC :1010C00000E000BF10BDC046000000008401002009 -:1010D000383E0000E12110B50248490200F062FFED -:1010E00010BDC046480400207047000010B5040041 -:1010F0000100024800F0CCFE200010BD4804002092 -:1011000010B5024800F0F6FEC0B210BD4804002041 -:1011100010B5024800F0CCFE10BDC04648040020C7 -:10112000F8B5451E07000C0000F088FC0600EDB283 -:101130000F4800F05BFC03231842F9D1300000F0A7 -:1011400097FC280000F02AFC0A4E3D1933199879C3 -:1011500000F09FFCEDB20134E4B2AC4206D033198A -:10116000987900F0B3FC00F0CFFCF4E72000F8BD64 +:1010D0007C3E0000E12110B50248490201F080F990 +:1010E00010BDC0465C0400207047000010B504002D +:1010F0000100024801F0F6F8200010BD5C04002059 +:1011000010B5024801F020F9C0B210BD5C04002007 +:1011100010B5024801F0F6F810BDC0465C0400208E +:10112000F8B5451E07000C0000F0B6FC0600EDB255 +:101130000F4800F089FC03231842F9D1300000F079 +:10114000C5FC280000F058FC0A4E3D193319987967 +:1011500000F0CDFCEDB20134E4B2AC4206D033195C +:10116000987900F0E1FC00F0FDFCF4E72000F8BD08 :1011700002100000A001002070B5FFF7C1FF1B287E -:1011800001D0002070BD224900F092FC002604002E -:10119000FFF7B6FF1F4D2100A85500F089FC01366E +:1011800001D0002070BD224900F0C0FC0026040000 +:10119000FFF7B6FF1F4D2100A85500F0B7FC013640 :1011A0000400062EF4D1E122EB78A9781B0252004C :1011B0000B439342E5D8FFF7A3FF0E28E1D12100AE -:1011C00000F076FC00260400EA78AB7812021A439D +:1011C00000F0A4FC00260400EA78AB7812021A436F :1011D0002B791B041A436B791B0613439E420AD2D8 -:1011E000FFF78EFFAB192100987100F061FC01360A +:1011E000FFF78EFFAB192100987100F08FFC0136DC :1011F0000400B6B2E8E7FFF783FF0500FFF780FFC2 :1012000003022B439BB21B1B58425841C0B2B9E7A3 :10121000FFFF0000A001002070B51B20FFF766FF54 -:10122000184900F045FC00250400174E705DFFF7DB -:101230005DFF210000F03CFC01350400062DF4D1D7 -:101240000E20FFF753FF210000F032FC00250400C0 +:10122000184900F073FC00250400174E705DFFF7AD +:101230005DFF210000F06AFC01350400062DF4D1A9 +:101240000E20FFF753FF210000F060FC0025040092 :10125000F378B2781B021343AB420AD97319987919 -:10126000FFF744FF210000F023FC01350400ADB27C +:10126000FFF744FF210000F051FC01350400ADB24E :10127000EEE7E0B22412FFF739FFE0B2FFF736FFE6 :1012800070BDC046FFFF0000A001002010B5FFF7B1 :101290003FFF024B1878FFF727FF10BD9F0100208A :1012A0000122034B9A7000229871DA707047C04691 :1012B000A001002010B5022404220E4B01201C7056 -:1012C0000D4B1A7000F02EFC0821032000F072FB79 -:1012D0008021200000F06EFB00231D21074A0848F2 +:1012C0000D4B1A7000F05CFC0821032000F0A0FB1D +:1012D0008021200000F09CFB00231D21074A0848C4 :1012E0009170D370074A195CD15401331D2BFAD188 :1012F00010BDC0469E0100209F010020A0010020DB -:1013000060000020A601002010B51C4BD8790138E0 -:1013100005282ED802F090FA030B172D1F25032263 -:101320009A700022DA700132DA711A7208E005212F -:10133000002299700131DA70DA7119725A72997259 -:1013400081229A7118E002229A700022DA700C4A07 -:101350001278DA71F4E702229A700022DA70094AF0 -:10136000F6E703229A700022DA708832DA71753A51 -:10137000DBE7A120FFF794FF10BDC046A0010020CD -:101380009E0100209F01002010B5094BDA79032A45 -:1013900003D0052A08D0A12003E01A7A054B80204B -:1013A0001A70FFF77DFF10BD1A7A034BF7E7C046AE -:1013B000A00100209E0100209F010020074B10B5D6 -:1013C0001A00FA321178064AFC3311701A78054B6C -:1013D00080201A70FFF764FF10BDC046A0010020F6 -:1013E0009C0100209D0100200B2010B500F0F1FAB7 -:1013F000EF23184008280AD082280AD00222074B7F -:101400009A700022DA70A5329A71D87104E000F067 -:10141000B5FA8020FFF744FF10BDC046A0010020B0 -:1014200070B50B2000F0D5FA174C082808D002231D -:10143000A3700023E370A533A371A43BE37170BDD7 -:10144000637A257A1B021D43637B207B1B022EB22D -:101450001843013E00F00CFBF0B200F09FFA00F0E0 -:10146000FDFA0226E071AE4206D800F04DFBA3194A -:1014700001369871B6B2F6E70135ABB21B0AE370DC -:101480008223A570A371DAE7A001002070B50500E2 -:10149000552000F01BFBE02000F018FB0824013C65 -:1014A0002878E4B200F012FB0135002CF7D170BDB2 -:1014B00010B500F063FA0B2000F08BFAEF23184010 -:1014C000082806D082280DD10B48FFF7DFFF00F077 -:1014D00055FA80200421400100F099FA8020FFF79E -:1014E000DFFE10BD0222054B9A700022DA70A53291 -:1014F0009A71D871F5E7C04691000020A001002044 -:1015000070B5164AD379052B05D8032B0FD8002BBD -:1015100005D0A0201EE0063B012BFAD870BD104874 -:10152000FFF7B4FF00F02AFAFFF7C2FFF6E7032641 -:10153000157A547A0B4800F059FA3042FAD1200259 -:10154000FF21284300F063FA80200221400100F0CF -:101550005EFA8020FFF7A4FEE0E7C046A00100206D -:10156000890000200210000070B5050000F066FA46 -:10157000040080202900400100F049FA200000F01A -:1015800077FA70BDF7B50B2000F023FA394B082825 -:1015900008D002229A700022DA70A5329A71A43A19 -:1015A000DA71F7BDDA79587B11001D7B00024031FA -:1015B0000543C9B22EB2012929D82F4A1778012232 -:1015C0000092587A1C7A0002044323B22800019347 -:1015D000764200F04DFA781E0640F6B2A64201DDD2 -:1015E0006B461E790A25002E09D029003000FFF72E -:1015F00097FD0500A41BA4B20098FFF7B5FF002CCF -:101600002FD0BEB2BC422ED329003800EFE71B49D1 -:101610000F78B32A05D8B12A0ED8A220FFF740FED2 -:10162000BFE7C12A03D8BF2AF7D90322C8E73C3253 -:10163000D2B2012AF1D8F8E71C7C114800F018FA60 -:10164000200000F026FA002000F023FAF0B200F0AB -:1016500020FA280A00F01DFA80200721400100F03E -:10166000D6F98020DAE72900E0B2FFF759FD00241F -:101670000500C1E7A00100209C0100209D01002081 -:101680000610000010B50121002001F069FFFFF7EE -:1016900021FD00F07FFA044B04481A88044B1968B6 -:1016A00001F0DCFD10BDC04686000020B403002020 -:1016B00080000020A14BF7B51B78002B00D0DAE0AA -:1016C0009F4D280001F0C0FC9E4C061E13D0200048 -:1016D00000F0DCFBB04203DA200000F0D7FB06008C -:1016E000994F32003900280000F0BFFB320039006A -:1016F000200000F0E3FB200000F0D4FB061E13D016 -:10170000280001F0B2FCB04203DA280001F0ADFC81 -:1017100006008D4F32003900200000F044FC3200FA -:101720003900280000F084FA200000F061FC874FA7 -:101730003B7883420FD0F022854E200033889343BC -:10174000338000F055FC0122824B38701A709042B1 -:1017500039D002283CD0200000F050FC7E4F3B786E -:10176000834215D00F227A4E200033889343338072 -:1017700000F044FC0122774B38701A7090422AD056 -:10178000022828D0002803D1032332881343338052 -:10179000200000F039FC714F3B78834223D06C4E1F -:1017A0006F4A338820001340338000F02DFC012263 -:1017B000684B387005381A70032814D8328802F044 -:1017C0003BF80E5255571023328813433380C2E73B -:1017D00030233288F9E7338818433080D8E78023F4 -:1017E0005B001343338096235E4EDB0032689A42DF -:1017F00015D1200000F00EFC019000280FD101F05F -:10180000E7FD594F3B68C01AC82808D901234B4A45 -:10181000137001F0DDFD554B1860019B3B6020000B -:1018200000F0E0FB3368984203D14A4B1B78002B51 -:1018300018D0200000F0EEFB002813D0200000F0AC -:10184000D1FB3060280001F0F1FB96233168DB000A -:10185000994207D03E4B28001A8801F0FFFC002275 -:101860003C4B1A70F7BD80239B00BAE7C023FBE70F -:101870008023DB00B5E7314B1B78002BF2D03A4CCC -:101880002368002B1CD101F0A3FD384B1B68C01A44 -:10189000374B98421CD8FFF76FFC0028E2D0354B3D -:1018A000987915281CD801F0C7FF2F1F2926423F21 -:1018B0001D1D381D1D2C3C1D1D381D1D1D1D2C32D0 -:1018C00001F086FD2368C01AFA235B009842DAD93A -:1018D00000231A4A13700122224B52421A60C1E7B8 -:1018E000342827D0A02019E0FFF7E4FCFFF794FC90 -:1018F000FFF7CCFCB6E7FFF707FDF7E7FFF744FD7E -:10190000F4E7FFF7D5FDF1E704221B4B1A70FFF750 -:101910006BFD01F05DFD2060E8E78020FFF7C0FC73 -:10192000E4E7FFF74BFDE1E7FFF77AFDDEE7FFF7BE -:1019300029FEDBE7FFF7E4FDD8E7C046AA03002055 -:10194000B4030020480400206A030020880000201F -:101950008600002069030020680300208400002026 -:10196000FFF0FFFF80000020AC030020B003002048 -:1019700060EA0000A00100209F01002010B559215D -:10198000082000F017F80021082000F013F80E24BA -:101990000B2000F01EF82042FAD010BD10B5040054 -:1019A000552000F093F8A02000F090F8200000F0FF -:1019B0008DF810BD70B5040055200D0000F086F8BC -:1019C00020004038C0B200F081F8280000F07EF816 -:1019D00070BD10B50400552000F078F82000803864 -:1019E000C0B200F073F800F08FF810BD10B504001D -:1019F000552000F06BF8042000F068F8E0B200F029 -:101A000065F8200A00F062F800F07EF810BD70B5AD -:101A100004000D00552000F059F8442000F056F85D -:101A2000E0B200F053F8200A00F050F800F06CF833 -:101A3000280000F04BF800F067F870BD10B5552095 -:101A400000F044F8292000F041F800F05DF80400AF -:101A500000F05AF80002204380B210BD10B55520A6 -:101A600000F034F8242000F031F800F04DF810BDFB -:101A700010B50400552000F029F8692000F026F880 -:101A8000E0B200F023F8200A00F020F800F03CF863 -:101A900010BD10B50400552000F018F8642000F0C7 -:101AA00015F8200000F012F800F02EF810BD00002C -:101AB000FF224840044BC0B24000C35A09125940AB -:101AC000C8B29343184370472C3B000070B50D4DCE -:101AD00001000400280001F055FB280001F0B9FACC -:101AE00001F076FC0600280001F0AEFA002804D1CF -:101AF00001F06EFC801B1328F5D9280001F0BAFA1A -:101B0000200070BDF803002010B5054C200001F046 -:101B10009BFA0028F9D0200001F0ACFAC0B210BD49 -:101B2000F8030020962170B5174C0500174A2000D5 -:101B3000490001F093FB002D1BD0012D0DD1002198 -:101B4000200001F01FFB200001F083FA002120009B -:101B500001F018FB200001F07CFA0F2001F03EFCA0 -:101B6000200001F071FA051E05D0200001F082FA74 -:101B7000F6E72900EBE7E1212000054A890201F0A0 -:101B80006DFB280070BDC046F80300201304000060 -:101B900031040000E12110B5024A0348890201F036 -:101BA0005DFB10BD31040000F803002010B50248B1 -:101BB00001F0A8FA10BDC046B403002010B50248D9 -:101BC00001F0A0FA10BDC046F8030020F7B50026CA -:101BD00001240F4D0F49280000F03CF80E4F0F492B -:101BE000380000F037F80E490E4800F033F839009D -:101BF00023000196022200940B4801F057FA2900B5 -:101C00000196032304220094084801F04FFAF7BD1F -:101C10003C0400200008004240040020000C004268 -:101C20000010004244040020B4030020F803002008 -:101C3000F8B505000E0017000024BC4208D02B6840 -:101C40002800315D1B689847002801D00134F4E773 -:101C50002000F8BD016070479446F0B505AC2578CA -:101C60009C1E621E944162460668920737682406ED -:101C70003A4322430724326000682140AD0100242A -:101C800042682943022B00D05C030A43224342608E -:101C9000F0BD30B5C0250368AD031C6812052A40AD -:101CA0002243C0240904A40221400A431A600368A5 -:101CB0005A6814435C6030BD0123026811680B430D -:101CC000136003681A68D207FCD4DA69D207F9D422 -:101CD00070470223026811680B4313600268D369DE -:101CE0009B07FCD4704703681A7ED20702D41A7E81 -:101CF0009207FCD57047002203685A837047036837 -:101D0000187E4007C00F70470368187EC0097047EF -:101D1000802302685B42117E0B4313767047036891 -:101D2000187EC007C00F70470368188DC0B2704797 -:101D300003681A7ED207FCD589B201201985704745 -:101D4000012203689A757047012203681A7570476B -:101D50000368194A30B5934227D0184A934227D0D6 -:101D6000174A934220D10B231021032501229A40C8 -:101D70002B40AB40C224FC359D401248A4000260B9 -:101D80000259AA43C0259D402B00134380220351D2 -:101D9000D2010D4B0A435A800C4A11680C4A11605B -:101DA0005A7852B2002AFBDB30BD09230E21DCE752 -:101DB0000A230F21D9E7C04600080042000C004268 -:101DC0000010004200E100E0000C0040FC00002098 -:101DD0009C000020F8B504000F0016001D00FFF75E -:101DE000B7FF2000FFF768FF1C21BB000B40710705 -:101DF0002268090C0B431360842322689375012F1A -:101E00001AD11021012E00D008390C4B69431868F3 -:101E1000C00001F01BFD0722216802408B8952039C -:101E2000DB04DB0C13438B81226803049089DB0CF9 -:101E3000400B400318439081F8BDC0469C00002031 -:101E400010B5040001F0C4FAE060236820005B696B -:101E50009847002808DA01F0BBFAE368C01AA368C3 -:101E60009842F2D30120404210BDF8B506000D00A3 -:101E700017000024BC4207D03000FFF7E1FF002824 -:101E800002DB28550134F5E72000F8BD3F207047FC -:101E900013B56B460268D9710733546819000122E3 -:101EA000A04716BD10B50221006900F0B9FC10BDB5 -:101EB00010B50321006900F0C9FC10BD10B5130076 -:101EC00004000A000069032100F0B8FD002801D1D8 -:101ED0000123636010BD000010B5054C03002068AD -:101EE000421C04D11A68180052699047206010BD46 -:101EF000E8000020074A0300106810B5411C03D019 -:101F000001235B42136010BD0221186900F088FDB7 -:101F1000F9E7C046E800002010B503783A22023302 -:101F200003700249024800F035FE10BDAC000020ED -:101F30006404002010B502784378A12A0AD1212B2D -:101F400001D0002005E007221349144800F022FECA -:101F5000012010BD212AF4D1202B10D10E490F48A9 -:101F60001A3A00F0B7FC96220B4BD2001968914246 -:101F700002D1DB79DB07E4D501F0EAFBE1E7222BB4 -:101F800003D18278044BDA71EDE7232BD9D1428853 -:101F9000034B1A60D5E7C046A4000020640400206B -:101FA000A00000207047F7B505001700019101F06F -:101FB0000FFA0024E860BC4211D2019A022128697C -:101FC0003B1B121900F0C0FC061E01D0A419F2E759 -:101FD00001F0FEF9EB68C01AAB689842F6D3200016 -:101FE000FEBD0000014B18687047C046A4000020E9 -:101FF000014B1879C0B27047A4000020014B5879FA -:10200000C0B27047A4000020014B9879C0B270475D -:10201000A4000020024BD879012318407047C04625 -:10202000A4000020FA220021054B92009A60054A84 -:1020300008321A60044A59601A6119767047C0461E -:1020400048040020803D000064040020704770B503 -:102050000F26CB1D02003240D5B22C0000093034CF -:10206000092A00DD07341C705A1E994200D170BD48 -:102070001300EFE710B5040001F0F0F9200010BDE7 -:1020800070B582291FD1C3B22A4D5A01AA1891698D -:10209000294C80010C40C0218905214391612749C9 -:1020A000083340185061802228685B01C1180C7900 -:1020B000524222430A7170211A5C8A431100302275 -:1020C0000A431A5470BD0029FCD1C026C1B2194878 -:1020D0004B01C3189A68184DB6052A4032439A60DE -:1020E0000831046848010721154A5A60025D8A4395 -:1020F000110001220A43702102559A692A40324395 -:102100009A610E4A5A61025D8A43110010220A4305 -:1021100002559A680B4920181140802252030A4345 -:102120009A609A68920B92039A6040234279134313 -:102130004371C7E79C060020FFFFFF8F900400203B -:1021400010050020FF3F00F070B50400012320CCF3 -:1021500000212A782000134380222B70520001F0C6 -:10216000FEFBAB78DB07FCD46C6270BD1F22144B06 -:1021700070B51B68590B9C0C9B0111405B0F2240F2 -:102180001F2900D11A391F2A00D1023A072B00D18A -:10219000043B1F2500688E01048D0A492A40214016 -:1021A00031430185018D14000A00AA4322430285B0 -:1021B000028D1903044B13400B43038570BDC046C9 -:1021C000246080003FF8FFFFFF8FFFFFEFF31083D5 -:1021D00003600123436072B670470368002B02D18D -:1021E00062B6BFF36F8F7047836973B50400002B2D -:1021F00018D10600683635786846FFF7E7FF019B7F -:10220000EDB2013B02D33578EDB2FAE768460193AF -:10221000FFF7E3FF002D01D1002076BD606E236E35 -:10222000C01AFAE76846FFF7D1FF22000025019B9C -:10223000B432013B02D31578EDB2FAE76846019358 -:10224000FFF7CBFF002DE7D02300AC34B033186884 -:102250002368E5E710B543694468DBB25A01A21868 -:10226000916809480833084080214903014391607F -:1022700091685B01890B890391602268D318402221 -:1022800019790A431A7110BDFF3F00F0F7B5040039 -:102290006846FFF79BFF0026019B5A1E0192002B08 -:1022A00005D02000083001F0A2FA0600F4E76846E5 -:1022B000FFF793FFA5696846002D49D1FFF786FF18 -:1022C0002000019B6830013B5A1C0BD00278591E3C -:1022D000002A05D168460193FFF77FFF2800FEBD65 -:1022E0000B00F1E768460193FFF777FF236EB542D5 -:1022F0000ED0626E9A420BD920005A1CE318226657 -:102300000133D97F0830C9B201F049FA0135EDE750 -:10231000626E9A42E2D10023236601336846A361CC -:10232000FFF754FF270022000021019B6837013B83 -:10233000B532581CCED0397010785E1E002805D0FA -:10234000200011700193FFF785FFEBE73300F0E702 -:10235000FFF73CFF2000019BB430013B5A1C06D024 -:102360000278591ED5B2002AB4D00B00F6E76846B1 -:1023700001930025FFF731FF22002100AC321368E2 -:10238000B031B54202D0086898421DD80968994218 -:10239000A4D1002368461360A361FFF717FF27004D -:1023A00022000021019BB437013BB532581C00D1FB -:1023B00090E7397010785E1E002811D0200011704F -:1023C0000193FFF747FFEAE72000591CE31811606B -:1023D0006C3319780830C9B201F0E1F90135CBE767 -:1023E0003300E3E710B50400FFF750FF200008308A -:1023F00001F00BFA10BD10B50400FFF747FF2000F5 -:10240000083001F0EEF910BDF0B585B0160001916D -:102410000500FFF73BFF02A8FFF7D8FE0024039B4F -:102420005A1E0392002B0FD0B442F8D22F00083767 -:10243000380001F0D6F90028F1D0380001F0C0F9D9 -:10244000019B18550134EFE702A8FFF7C6FE2000F4 -:1024500005B0F0BDF7B542694368D2B2110004007F -:102460000831186849014118C979C90712D55201C4 -:102470009B189A689204910C002A0CD12000FFF757 -:10248000E9FE63681A686369DBB208335B01D3183D -:102490007F22DA71F7BDE269002A21D122000125ED -:1024A0006C3261666846E5615A60FFF78FFE260070 -:1024B00020002100019B6836013BB430B5315A1C25 -:1024C00033D0357002785F1ED2B20A700A78002AC3 -:1024D00004D120000193FFF7BDFEE8E73B00EEE7E3 -:1024E0002200B03211600022E261220020326846F0 -:1024F0005A60FFF76BFE0125260020002100019B9A -:10250000B436013B6830B5315A1C0ED035700278B4 -:102510005F1ED2B20A700A78002A04D1200001930B -:10252000FFF798FEE8E73B00EEE768460193FFF708 -:1025300054FEA6E713B56A4600230C00D01DD371E4 -:10254000FFF7EAFC236818186B462060D87916BD9F -:1025500003290ED180220E4B62311B68FF31585C7B -:10256000524202435A5468226339FF32FF39995468 -:1025700070470129FCD18022054B24311B68FF31B3 -:10258000585C524202435A5428222339FF32EDE765 -:102590009C06002070B50024274B01210500200077 -:1025A0001C7000F0DDFF0121200000F0DDFF234B57 -:1025B000012120001C7000F0D3FF0121200000F059 -:1025C000D3FF20231E4A0520D1690B43D3610F217D -:1025D00001F01CF80F21062001F018F8194B1A4AD7 -:1025E0005A805A7852B2002AFBDB184800F0EAFE03 -:1025F000174C2000FFF7A8FD2000FFF7B7FD7F2153 -:102600002368C1201A7880000A401A7004221978C1 -:102610000A430C211A701A898A430E491A810A58F2 -:102620001202120A0A5080220A6019787E3A0A437E -:102630001A7001232B7070BD8504002084040020D3 -:1026400000040040000C004006400000F92F00008C -:102650009C06002000E100E00078002810D0012155 -:10266000084B1B681A898A431A810822198B0A436E -:102670001A830422198B0A431A830022024B1A6020 -:102680007047C0469C060020940600200A000E49B0 -:102690008B699B0B9B038B610B680221FF331972C3 -:1026A0009879823901439971197A8907FCD57F207D -:1026B000064B0240997A8143114380229972997A9C -:1026C00052420A439A7270479C0600200050004113 -:1026D00000200B7910B583420AD10800FFF72AFCCD -:1026E000002805D1034A013093699B0B9B0393613A -:1026F00010BDC0469C060020F7B50D001100832ACE -:1027000019D1EBB2384C5A01A21891693748AD0182 -:102710000840C021890501439161354920686D1841 -:102720007021083355615B011A5C8A431100402215 -:102730000A431A54F7BD022A52D12E4BAA00D05890 -:10274000002802D003685B699847B82000F082FE39 -:102750000400294BFF260360234B4360083001F03F -:102760000FF8290022000023606868323140A3611D -:102770006561E36123666366490113705364936482 -:1027800044321372411853728B68184AAD001A40D4 -:10279000C0239B0513438B606269036832401100BC -:1027A0000192072208314901CF5C9743BC460327B9 -:1027B00062461743CF542700019A203752018218EE -:1027C000576062692000324052019B1801229B1918 -:1027D000997A0A439A72FFF73DFD064BEC50A9E740 -:1027E0002800FFF74DFCA5E79C060020FFFFFF8FA8 -:1027F0001005002068040020B03D000070B5050001 -:102800000124064BA200D258002A05D0210028003E -:10281000FFF772FF0134F4E770BDC046EC00002002 -:10282000084B8A00D05810B5002803D003689B6875 -:10283000984710BD044BC9B24901591888688004F3 -:10284000800CF6E7680400209C06002010B50C0000 -:10285000FFF7E6FF00280CD0064BE4B2196880238E -:10286000083464010C1962795B42134363710223DB -:10287000E37110BD9C06002070B5CBB2124A13481C -:102880005C0189018918021951609168104D083363 -:102890000D40802189022943402591609168890B70 -:1028A0008903916001685A018A18167935431571B8 -:1028B00095796D06FCD55B01C918CB79DB07FCD592 -:1028C00000198068C0B270BD100500209C06002071 -:1028D000FF3F00F070B5140040220B4B0D001B6849 -:1028E000FF3359790A435A710021FFF7C5FFA0420F -:1028F00000D9200000230549A34203D0CA5CEA5452 -:102900000133F9E770BDC0469C0600201005002089 -:1029100010B50C48C9B24901421893689B049B0C3E -:102920003F2B0BD99468403B9B04A40B9B0CA40346 -:102930002343936041188868C0B210BD93689B0B15 -:102940009B03F6E79C060020F0B51C002F4B85B0DA -:102950001B6806000D000192002B54D02C4F3B78D1 -:10296000D8B2002B02D1010000F0FEFD64233B70C1 -:10297000284BAA00D058002808D0036822005B68C2 -:10298000019998470400200005B0F0BD29003000EF -:10299000FFF746FF844204D929003000FFF740FFCB -:1029A000040029003000FFF7B3FF0121EBB21A4FFA -:1029B00003935B010293029A3B6801989B18FF33D3 -:1029C0005A7A0A435A72154BA9012200C91800F01D -:1029D000BDFF002CD7D029003000FFF721FF0028D1 -:1029E000D1D14021039B3A6808335B01D318187991 -:1029F000014319710121D971029BD318FF339A7ACF -:102A00000A439A72BFE701246442BCE7940600209F -:102A100084040020680400209C060020100500208B -:102A200013B56B46DC1D22000123FFF78DFF012843 -:102A300001D1207816BD01204042FBE7F0B51C0013 -:102A40003A4B85B01B680E000192002B3FD08023CB -:102A5000DB019C423BD8364D2B78D8B2002B02D1FB -:102A6000010000F081FD642300272B70314BB2017F -:102A7000D3180293002C2CD02F4B1B680393FF23F9 -:102A800033401D0000930835039B6D015D19AB7940 -:102A9000DB0921D0294B2A49186800F0D7FE294BC1 -:102AA0001721584300F0D2FE274BEA79920713D43E -:102AB0009A5D002A01D10138F7D201229A55009B74 -:102AC0005A011D4B9B189A69920B92039A61012738 -:102AD0007F42380005B0F0BD00221B4B25009A55FF -:102AE0003F2C00D93F252A000199029800F02EFFC3 -:102AF000009BA9045A01104B890C9B18029A7F195C -:102B00005A619A69641B920B92030A439A61009B73 -:102B1000039A08335B01D3180222DA715979823A99 -:102B20000A435A71019B5B190193A3E794060020A5 -:102B300085040020900400209C060020FC0000205A -:102B400040420F00701101008704002070B50C0096 -:102B50001D000D4BA601F618110030002A0000F0F0 -:102B6000F5FEE4B2094A640114196661A3690849D3 -:102B700028000B40A361A169AB04890B9B0C89035E -:102B80001943A16170BDC046900400209C0600203E -:102B9000FF3F00F0F7B5104B0F001B7814000190B9 -:102BA000002B0CD10D4B16001D78002D09D00C4EBA -:102BB0000C48358828182D1900F0C8FE35802000F3 -:102BC000FEBD002EFBD033007A1900210198FFF7DB -:102BD000BDFF2D18361AF4E790050020910600205D -:102BE0009206002091050020F8B500200D00140089 -:102BF00000AF012A27D9D31D6A46DB08DB00D31AB0 -:102C00009D46080000F06EFF6E460323022200215D -:102C10000130400030707370A2420DD22878002835 -:102C20000AD0531CDBB20135B0549C4203D00232AF -:102C3000F154D2B2F0E7220031000448FFF7AAFFB6 -:102C4000431E9841C0B2BD46F8BDC0466404002092 -:102C5000F0B50025012785B0184B0E0069461F709E -:102C600004000095FFF766FC154B01A90B806A3B39 -:102C7000FF3BCB715A330B72009B320009334B8000 -:102C80000E4B8D714F7108711D70092E0FD00D4EB6 -:102C9000092237700C4F200000953D80FFF77AFF26 -:102CA00069462000FFF746FC3A8808493570200045 -:102CB000FFF770FF012005B0F0BDC0469005002071 -:102CC00009020000910600209206002091050020D4 -:102CD00030B5CB7804000D0093B0022B08D1C98821 -:102CE0002348FFF7B5FF431E9841C0B213B030BD73 -:102CF000012B0BD1CA881F49112A11D8D2B2002A40 -:102D00000ED02000FFF746FF0120EFE70020032B45 -:102D1000ECD18B78834205D1CA881749032AEDD9B3 -:102D20000A78EEE7022B05D18A7914492000FFF7D3 -:102D30005BFFDBE7012B02D18A791149F6E7032B10 -:102D4000D4D1104B01A91868FFF781F90E4B03A9E4 -:102D50001868FFF77CF90D4B05A91868FFF777F99C -:102D60000B4B07A91868FFF772F9AA7901A9DDE7EB -:102D700064040020F03D0000E03D0000CC3D000078 -:102D8000E43D00000CA0800040A0800044A0800032 -:102D900048A0800073B5060048780D000B2810D8B5 -:102DA00000F04AFD061B0F310F474C7450536D70F5 -:102DB000097801AA002906D1022311803000FFF70B -:102DC000C5FE012076BD00231380314B1B78012BFB -:102DD00000D1137002230021F0E78A780023012A32 -:102DE00009D16A4693802B4B1B78012B00D11371BC -:102DF000022301AAEFE7264A1370274A93699B0B27 -:102E00009B039361DDE78C78012C07D1214B01AA4C -:102E10001C70224B1B7813702300DCE7002C08D1B8 -:102E200001201B4B1C4A187093699B0B9B039361F9 -:102E3000C8E73000A978FFF729FCC2E73000FFF7A8 -:102E400047FFBFE70123164AC5E70B780020DB06E2 -:102E5000B8D13000FFF7D2FC2A200221AA78104B0B -:102E6000FF301A600C4A13681C5C21434A24195431 -:102E7000FF34195D2938FF3801431955D4E7012380 -:102E8000084AA8E78A78074B1A60B6E7002099E756 -:102E9000860400208E0400209C060020A43D000033 -:102EA00094060020980600204B4BF7B51C780700CD -:102EB000002C00D08FE0494E33689B8B1B070ED54A -:102EC00021002000FFF7DCF8326810231100FF31E9 -:102ED000887A03438B72424B1C60082393833368C8 -:102EE0009A8B52071FD504229A833E4A1378002BEF -:102EF0000AD01378013BDBB213701378D8B2002BE1 -:102F000002D1012100F030FB374A1378002B0AD0A0 -:102F10001378013BDBB213701378D8B2002B02D1C7 -:102F2000012100F021FB3368FF331A7AD2061ED547 -:102F300010221A72597930320A435A7160232B4990 -:102F400038000A781A423BD1FFF724FF3368FF3379 -:102F5000002838D08022997952420A439A711A7A0D -:102F6000520604D540221A72597A0A435A723368BB -:102F700007241D8C01239D43EDB20193E1B2002D86 -:102F800029D0002C27D02B002341019A134215D0C1 -:102F90002300326808335B01D318DA79D20702D4F0 -:102FA000DB799B0707D5124BA200D05800280ED022 -:102FB00003681B689847019BA3409D43013CDDE7E4 -:102FC000FFF786FBC2E720210A4A9171C7E7380064 -:102FD000FFF7BEFAEFE7F7BD910600209C06002040 -:102FE00094060020850400208404002010050020A1 -:102FF00068040020FF50004110B50248FFF754FF5D -:1030000010BDC04664040020014B024A1A6070479C -:103010009C060020005000410120704710B5036855 -:10302000014A1B6A984710BD1304000010B5040044 -:103030000069FEF741FE2000143000F0BDFB2000C7 -:10304000203000F0B9FB10BD10B5143000F0C9FB02 -:1030500010BD10B504002000203000F0C2FB002895 -:10306000F9D12069FEF73FFE10BD10B5203000F009 -:10307000BEFB10BD70B5060004001436300000F031 -:103080009FFB230030331B780500FF2B07D0300057 -:1030900000F0ADFB0A2802DDA36BE26B1A6028008A -:1030A00070BD10B5143000F0B0FB10BDF7B51D00B9 -:1030B00008AB1B780400009309AB1B781600019342 -:1030C00000234360FA239B0083600D4B0F000833FD -:1030D0000360143000F054FB2000203000F050FB5F -:1030E0002300009A2C3327619A70019A1E70DA70BF -:1030F00022005D70FF233032200013701374FEBD78 -:10310000043E000070B504000069FEF7F8FD0028D9 -:1031100015D025002069FEF707FE143501002800B0 -:1031200000F03DFB230030331B78FF2B07D0280035 -:1031300000F05DFB092802DC636BE26B1A6020691A -:10314000FEF7EDFD00280DD025002035280000F009 -:1031500048FB002812D0280000F032FBC1B22069E1 -:10316000FEF7E6FD2069FEF7CFFD002805D02069B7 -:10317000FEF7CEFD2069FEF7BEFD70BD2069FEF7AB -:10318000E3FDEFE7F8B5040000690D002600FEF747 -:10319000C6FD2036002834D13F27300000F040FB28 -:1031A000002825D0EFF310830122134211D1EFF351 -:1031B00005831A003A403B42EFD0103A53B2002A3E -:1031C00010DA0F221340083B134A9B089B009B1800 -:1031D0001B682069FEF7A3FD0028DED02000FFF762 -:1031E00091FFDAE79B080D4AC0339B009B58F0E73C -:1031F0003000290000F0D3FA2069FEF7A1FD01207C -:10320000F8BD300000F0EDFA0028C5D12900206992 -:10321000FEF78EFDF3E7C0461CED00E000E100E0A4 -:10322000F0231B011940802306209B0099420AD0FD -:103230000133FF330130994205D0802300205B0029 -:10324000994200D1053070470F200140002001292C -:1032500003D00239481E8141481C70470300F0B575 -:10326000040085B003912C330E211878150000F06E -:10327000CDF9230026002D3318780E212F3600F0CB -:10328000C5F93378022B07D1230040331878FF2883 -:1032900002D00E2100F0BAF9270030373878FF2825 -:1032A00014D0012100F05CF90C213B781B4A5943F2 -:1032B0008B5C5218517801228A401948DB0118189A -:1032C00060631848E2631B18A3631A600122039B22 -:1032D00011002069FEF77EFD29002000FFF7A0FF06 -:1032E000290007002000FFF7AFFFF0221540303D16 -:1032F0006A42554103003900206901220095FEF71A -:10330000ABFC23002E331A7831782069FEF7C1FC1C -:103310002069FEF7DEFC05B0F0BDC0462C3D000084 -:103320001844004114440041FEE70000034B10B56F -:103330001B68002B00D0984710BDC046A007002096 -:103340000DBEFEE7134A1448110010B5134B82421C -:1033500002D0934212D11300824212D10222104BAA -:103360005A62104B0832DA700F4B20329A7300F019 -:1033700089F800F04FF8FEE710CB10C18142FBD373 -:10338000EAE70A4A8B42E9D00021094B9A42E5D28A -:1033900002C2FBE700000020800100203C3E00004C -:1033A000FC700041005000410048004180010020B5 -:1033B000BC07002010B500F02AF8002801D100F069 -:1033C0001BF810BD014B18607047C046A0070020D5 -:1033D000014B18687047C046A407002070B5041E52 -:1033E00007D0044D2E6800F011F82B689B1BA342F8 -:1033F000F9D370BDA407002010B5034A1368013348 -:10340000136000F0ADF910BDA40700207047002044 -:103410007047704710B500F073F800F05FFAFFF7DF -:10342000F8FF0120FFF7DAFF084C2000FFF7B2F8A1 -:103430002000FFF711F9FEF725F9FEF73BF9044BE1 -:10344000002BFAD000E000BFF7E7C046640400207C -:103450000000000010B500F065FA10BD10B500F0D6 -:103460006BFA10BD024A53785BB2002BFBDB70474E -:10347000000C004010230249CA681A42FCD0704771 -:1034800000080040822210B5154B164C5A60A38CE0 -:10349000023A9343A384FFF7EDFF8022124B920080 -:1034A0001B689B0E9B021343A362104BE3629223A3 -:1034B0005B00A384FFF7DEFF0223A28C1343A384E7 -:1034C000FFF7D8FF80230A4C5B00A360FFF7CAFF19 -:1034D000084B6360FFF7C6FF074B084A1A6010BD30 -:1034E00000400041000800402460800080BB0A7C4E -:1034F000000C004000070300FC000020006CDC0210 -:10350000C0201249124B134A10B54B60136A0006D3 -:103510001B021B0A03431362002407238C600B6009 -:103520008021136A09061B021B0A0B4313620A4B14 -:10353000196A1A6A1143094A0A431A6220001A21B9 -:10354000013400F00DF8072CF8D110BD10E000E0B8 -:103550007FBB000000ED00E000040040FC0500001F -:1035600010B500F053F810BDF7B50C224243244DBE -:103570000191535D042B2DD00027AA185278214EBB -:10358000DB01D418A419204E24789E59E4B2BE421F -:1035900003D0013797407E1EB7411B4E9E193669F6 -:1035A000B44600266146B14203D001369640711EF2 -:1035B0008E41002F17D10C37784301992D18686878 -:1035C00001290DD1012E06D1410706D4D3180D4A89 -:1035D0009B181C70F7BD0107F8D504210C43F5E7D3 -:1035E00004218C43F2E701209040019A012A03D183 -:1035F000054A9B189861EDE7034A9B185861E9E773 -:103600002C3D000040440041004400410C22504346 -:10361000494B70B5C65C1B185C78DD78042E00D170 -:1036200087E0081F172842D800F006F90C31313125 -:10363000414141413333393D3D4141414141413FA8 -:10364000418341830023002E33D0F0013B4E2218EA -:1036500092191678042232404E1F022E3BD82D07B5 -:1036600001D540252A4372B6002901D01A2935D147 -:103670000123A340324941184B608B6104239A43D4 -:103680002E4923185B181A7062B6002070BD012302 -:10369000D9E706232B405A1E93410433D3E7012375 -:1036A0002B400233CFE70623CDE70723CBE70923DF -:1036B000C9E7022CC9D10629C7D0224A10780028B0 -:1036C000C3D01670204A1078A0431070D079C0097A -:1036D0000128FBD0B9E702263243C0E78D1E012D39 -:1036E0000CD80123A340164D45196B60032903D163 -:1036F0006B6104231A43C3E7AB61FAE7012904D1E4 -:10370000A1400F4BC3189960B8E7104965082D1800 -:103710006D18E10707D50F2629781B0131400B43AF -:103720002B700123E6E70F262978B143194329704E -:10373000F7E701204042A9E72C3D0000404400414A -:1037400000440041A8070020002800423044004106 -:103750000122024B52421A607047C046000100200D -:10376000054A10B51368591C05D0013B1360002BA6 -:1037700001D1024B984710BD00010020010000203C -:1037800010B50400802000F0CDF8802200212060D8 -:1037900000F0E5F8002320006360A36010BD7F22E5 -:1037A000436810B50133134082689A4203D04268DF -:1037B0000468A154436010BD0023436083607047D8 -:1037C000826843689A4209D07F2183680268D25C8C -:1037D000836801330B408360100070470120404232 -:1037E000FBE743688068181A00D58030704742684C -:1037F00083689A4204DB43688068C01A7F30704750 -:1038000083684068181A0138F9E7826843689A4269 -:1038100003D083680268D05C704701204042FBE718 -:1038200003007F2240689B6801301040C01A434269 -:103830005841C0B27047000002B4714649084900BF -:10384000095C49008E4402BC7047C046002934D050 -:103850000123002210B488422CD301242407A14262 -:1038600004D2814202D209011B01F8E7E400A1421F -:1038700004D2814202D249005B00F8E7884201D3BA -:10388000401A1A434C08A04202D3001B5C08224392 -:103890008C08A04202D3001B9C082243CC08A04203 -:1038A00002D3001BDC082243002803D01B0901D0EF -:1038B0000909E3E7101C10BC704701B5002000F0B7 -:1038C0000BF802BD0029F8D003B5FFF7C1FF0EBC0D -:1038D0004243891A1847C0467047C04670B5002653 -:1038E0000C4D0D4C641BA410A64209D1002600F01B -:1038F00011F90A4D0A4C641BA410A64205D170BDF3 -:10390000B300EB5898470136EEE7B300EB58984701 -:103910000136F2E7680100206801002068010020FC -:103920007801002010B5034B0100186800F06AF818 -:1039300010BDC0460401002010B5034B01001868FB -:1039400000F016F810BDC04604010020002310B599 -:103950009A4200D110BDCC5CC4540133F8E7030097 -:103960001218934200D1704719700133F9E7000033 -:1039700070B50500002910D00C1F2368002B00DA59 -:10398000E418280000F0B5F81D4A1368002B05D193 -:1039900063601460280000F0ADF870BDA34209D93F -:1039A000216860188342F3D118685B684118216070 -:1039B000EEE713005A68002A01D0A242F9D919682B -:1039C0005818A0420BD12068091858181960824273 -:1039D000E0D110685268411819605A60DAE7A042D5 -:1039E00002D90C232B60D5E721686018824203D1ED -:1039F000106852684118216062605C60CAE7C04686 -:103A0000AC070020F8B50323CD1C9D430835060004 -:103A10000C2D1FD20C25A9421ED8300000F069F8E9 -:103A200025490A681400002C1AD1244F3B68002B4A -:103A300004D12100300000F043F838602900300044 -:103A400000F03EF8431C2AD10C233000336000F014 -:103A500051F803E0002DDEDA0C2333600020F8BDBE -:103A600023685B1B18D40B2B03D92360E418256053 -:103A700003E06368A2420DD10B60300000F03AF819 -:103A8000200007220B30231D9043C21AE7D01B1AD7 -:103A9000A350E4E75360F0E722006468C3E7032320 -:103AA000C41C9C43A042E2D0211A300000F008F868 -:103AB000431CDCD1C8E7C046AC070020B00700209B -:103AC000002370B5064C05000800236000F014F8D0 -:103AD000431C03D12368002B00D02B6070BDC0466F -:103AE000B80700200023C25C0133002AFBD1581E16 -:103AF0007047704770470000044A1368002B03D0DA -:103B00001818106018007047014BF9E7B40700203F -:103B1000BC070020F8B5C046F8BC08BC9E467047FC -:103B2000F8B5C046F8BC08BC9E4670470000891135 -:103B300012239B322446AD573665BF74488CC19D15 -:103B40005AAFD3BE6CCAE5DB7EE9F7F881100801F5 -:103B500093331A22A5562C47B7753E64C99C408DF5 -:103B6000DBBF52AEEDDA64CBFFF976E802218B3091 -:103B7000100299132667AF763444BD554AADC3BCD5 -:103B8000588ED19F6EEBE7FA7CC8F5D983310A20B5 -:103B900091121803A7772E66B5543C45CBBD42ACB5 -:103BA000D99E508FEFFB66EAFDD874C904428D534D -:103BB00016619F702004A9153227BB364CCEC5DF95 -:103BC0005EEDD7FC6888E1997AABF3BA85520C4375 -:103BD00097711E60A1142805B3373A26CDDE44CF75 -:103BE000DFFD56ECE9986089FBBB72AA06638F7211 -:103BF00014409D512225AB343006B9174EEFC7FE55 -:103C00005CCCD5DD6AA9E3B8788AF19B87730E6234 -:103C100095501C41A3352A24B1163807CFFF46EE34 -:103C2000DDDC54CDEBB962A8F99A708B08848195DC -:103C30001AA793B62CC2A5D33EE1B7F04008C91924 -:103C4000522BDB3A644EED5F766DFF7C89940085E4 -:103C50009BB712A6ADD224C3BFF136E0C118480904 -:103C6000D33B5A2AE55E6C4FF77D7E6C0AA583B480 -:103C7000188691972EE3A7F23CC0B5D14229CB38E4 -:103C8000500AD91B666FEF7E744CFD5D8BB502A4A4 -:103C900099961087AFF326E2BDD034C1C3394A28C4 -:103CA000D11A580BE77F6E6EF55C7C4D0CC685D73C -:103CB0001EE597F42880A1913AA3B3B2444ACD5BA4 -:103CC0005669DF78600CE91D722FFB3E8DD604C764 -:103CD0009FF516E4A9902081BBB332A2C55A4C4B84 -:103CE000D7795E68E11C680DF33F7A2E0EE787F600 -:103CF0001CC495D52AA1A3B03882B193466BCF7A64 -:103D00005448DD59622DEB3C700EF91F8FF706E623 -:103D10009DD414C5ABB122A0B9923083C77B4E6A43 -:103D2000D5585C49E33D6A2CF11E780F0002190852 -:103D30007F00000080000280000E19083F40000054 -:103D400080061080000F19083F70000019070180DD -:103D5000001619081F400000801606800017190879 -:103D60000F40000080161280001819080F80000014 -:103D700080161280001919080F800000801612802A -:103D80000000000000000000911E0000BD1E0000A9 -:103D90008D1E0000B11E0000A51E0000F51E0000D3 -:103DA000D91E00000000000000000000000000001C -:103DB0005524000009240000F7230000E52300003B -:103DC0004D20000075200000E9210000417264755B -:103DD000696E6F204E616E6F2045766572790000C6 -:103DE0000403090441726475696E6F204C4C4300F2 -:103DF000120110010200004041235800000101029D -:103E000003010000000000000000000085310000F8 -:103E1000311C00006B3000005330000049300000BE -:103E200075300000A33000001D3000005D3200003E -:0C3E30002D3000001930000000000000E0 -:103E3C0010B572B68122114B92000433934213D306 -:103E4C000F4A01211000147D0C42FCD02021148B50 -:103E5C00FF319B085B0021431183D361094B138015 -:103E6C000123027D1A42FCD0BFF34F8F064B074A49 -:103E7C00DA60BFF34F8FC046FDE7C046001000006C -:103E8C000040004102A5FFFF00ED00E00400FA0530 -:103E9C00860101000601010006010000000000007F -:103EAC004A544147494345206D6B49490000000085 -:103EBC0000C20100080013040165736172454D5680 -:103ECC004E20676F72504D564E00000040420F005E -:103EDC00FFFFFFFF00C20100000008000904000002 -:103EEC00010202000005240010010424020605242E -:103EFC0006000105240101010705810310001009CA -:103F0C00040100020A00000007050202400000073D -:103F1C000583024000000000FFFFFFFF00000000CF -:103F2C0083000000020000008200000040420F00ED -:103F3C00FFFFFFFF08010020000000000000000050 -:103F4C000000000000000000000000000000000065 -:103F5C000000000000000000000000000000000055 -:103F6C000000000000000000000000000000000045 -:103F7C000000000000000000000000000000000035 -:103F8C000000000000000000000000000000000025 -:103F9C000000000000000000B5100000CD1B000068 -:103FAC0025200000093000008D10000000000000EA -:040000030000334581 +:1013000060000020A601002010B51D4BD8790138DF +:10131000052830D802F0B2FA030B192F2127032237 +:101320009A700022DA700132DA711A720AE005222C +:101330009A7000220121DA700732DA715A72013A8A +:1013400019729A7281229A7118E002229A70002210 +:10135000DA700C4A1278DA71F4E702229A700022ED +:10136000DA70094AF6E703229A700022DA708832AE +:10137000DA71753AD9E7A120FFF792FF10BDC04698 +:10138000A00100209E0100209F01002010B5094B04 +:10139000DA79032A03D0052A08D0A12003E01A7ABB +:1013A000054B80201A70FFF77BFF10BD1A7A034BA4 +:1013B000F7E7C046A00100209E0100209F01002009 +:1013C000074B10B51A00FA321178064AFC33117037 +:1013D0001A78054B80201A70FFF762FF10BDC046D7 +:1013E000A00100209C0100209D0100200B2010B5D1 +:1013F00000F01DFBEF23184008280AD082280AD0ED +:101400000222074B9A700022DA70A5329A71D871C5 +:1014100004E000F0E1FA8020FFF742FF10BDC04673 +:10142000A001002070B50B2000F001FB174C08282C +:1014300008D00223A3700023E370A533A371A43B5B +:10144000E37170BD637A257A1B021D43637B207BA9 +:101450001B022EB21843013E00F038FBF0B200F040 +:10146000CBFA00F029FB0226E071AE4206D800F06C +:1014700079FBA31901369871B6B2F6E70135ABB224 +:101480001B0AE3708223A570A371DAE7A001002094 +:1014900070B50500552000F047FBE02000F044FB4C +:1014A0000824013C2878E4B200F03EFB0135002C12 +:1014B000F7D170BD10B500F08FFA0B2000F0B7FA2D +:1014C000EF231840082806D082280DD10B48FFF7DB +:1014D000DFFF00F081FA80200421400100F0C5FA0E +:1014E0008020FFF7DDFE10BD0222054B9A7000221E +:1014F000DA70A5329A71D871F5E7C04691000020E4 +:10150000A001002070B5164AD379052B05D8032B0E +:101510000FD8002B05D0A0201EE0063B012BFAD8E7 +:1015200070BD1048FFF7B4FF00F056FAFFF7C2FF96 +:10153000F6E70326157A547A0B4800F085FA304214 +:10154000FAD12002FF21284300F08FFA80200221E7 +:10155000400100F08AFA8020FFF7A2FEE0E7C046D3 +:10156000A0010020890000200210000070B50500D5 +:1015700000F092FA040080202900400100F075FA82 +:10158000200000F0A3FA70BDF7B50B2000F04FFA71 +:10159000394B082808D002229A700022DA70A5324E +:1015A0009A71A43ADA71F7BDDA79587B11001D7B84 +:1015B000000240310543C9B22EB2012929D82F4A71 +:1015C000177801220092587A1C7A0002044323B251 +:1015D00028000193764200F079FA781E0640F6B2B0 +:1015E000A64201DD6B461E790A25002E09D029008E +:1015F0003000FFF795FD0500A41BA4B20098FFF78B +:10160000B5FF002C2FD0BEB2BC422ED3290038002B +:10161000EFE71B490F78B32A05D8B12A0ED8A220CC +:10162000FFF73EFEBFE7C12A03D8BF2AF7D903223E +:10163000C8E73C32D2B2012AF1D8F8E71C7C114845 +:1016400000F044FA200000F052FA002000F04FFAB7 +:10165000F0B200F04CFA280A00F049FA8020072185 +:10166000400100F002FA8020DAE72900E0B2FFF73B +:1016700057FD00240500C1E7A00100209C010020C7 +:101680009D0100200610000010B50121002000F08F +:10169000F1FBFFF71FFD00F0ABFA054B05481A8878 +:1016A000054B196801F0FEFFFFF704FE10BDC046B0 +:1016B00086000020BC03002080000020AF4BF7B55F +:1016C0001B78002B00D0FFE0AD4E300001F0E0FEB3 +:1016D000AC4C051E1BD0EFF3108372B6AA4F20004E +:1016E0003B6000F0FDFDA84203DA200000F0F8FDA9 +:1016F00005003B6883F31088A44F2A0039003000AE +:1017000000F0DDFD2A003900200000F001FE20007D +:1017100000F0F2FD051E1BD0EFF3108372B69A4F56 +:1017200030003B6001F0C5FEA84203DA300001F052 +:10173000C0FE05003B6883F31088944F2A003900EF +:10174000200000F04EFE2A003900300000F08AFC34 +:10175000200000F06BFE8E4F3B7883420FD0F022CA +:101760008C4D20002B8893432B8000F05FFE0122DC +:10177000894B38701A70904239D002283CD0200032 +:1017800000F05AFE854F3B78834215D00F22814DE1 +:1017900020002B8893432B8000F04EFE01227E4BCD +:1017A00038701A7090422AD0022828D0002803D11D +:1017B00003232A8813432B80200000F043FE784F38 +:1017C0003B78834223D0734D764A2B882000134008 +:1017D0002B8000F037FE01226F4B387005381A70ED +:1017E000032814D82A8802F049F80E5B5E601023A3 +:1017F0002A8813432B80C2E730232A88F9E72B88F5 +:1018000018432880D8E780235B0013432B8096235E +:10181000654DDB002A689A4215D1200000F018FEC1 +:10182000019000280FD100F085FA604F3B68C01A84 +:10183000C82808D90123514A137000F07BFA5C4B89 +:101840001860019B3B60200000F0EAFD2B68594FB7 +:1018500098422DD0200000F0FBFD3870200000F0F1 +:10186000F7FD00282FD0200000F0DAFD28603000BE +:1018700001F000FE96232968DB00994223D0002462 +:10188000444B30001A8801F00DFF434B59210820CA +:101890001C7000F0BDF82100082000F0B9F812E03B +:1018A00080239B00B1E7C023FBE78023DB00ACE78C +:1018B000394B1B78002BCDD1200000F0C9FD00234F +:1018C000FB569842C6D1F7BD2C4B1B78002BFAD0A3 +:1018D000364C2368002B1CD100F02CFA344B1B68CB +:1018E000C01A354B98421CD8FFF746FC0028EAD0B6 +:1018F000324B987915281CD801F0C0FF2F1F2926DC +:1019000067641D1D381D1D2C3C1D1D381D1D1D1D12 +:101910002C3200F00FFA2368C01AFA235B009842B9 +:10192000DAD90023154A137001221F4B52421A6064 +:10193000C9E734284CD0A02019E0FFF7BBFCFFF723 +:101940006BFCFFF7A3FCBEE7FFF7DEFCF7E7FFF752 +:101950001DFDF4E7FFF7AEFDF1E70422184B1A7006 +:10196000FFF744FD00F0E6F92060E8E78020FFF78C +:1019700097FCE4E7FFF724FDE1E7C046B103002050 +:10198000BC0300205C0400206C03002071030020D5 +:1019900088000020860000207003002068030020DB +:1019A00085000020FFF0FFFF80000020B40300202E +:1019B000B80300208400002060EA0000A00100209D +:1019C0009F010020FFF72EFDB9E7FFF7DDFDB6E729 +:1019D000FFF798FDB3E7C04610B55921082000F085 +:1019E00017F80021082000F013F80E240B2000F057 +:1019F0001EF82042FAD010BD10B50400552000F0AA +:101A000093F8A02000F090F8200000F08DF810BDB1 +:101A100070B5040055200D0000F086F82000403815 +:101A2000C0B200F081F8280000F07EF870BD10B55B +:101A30000400552000F078F820008038C0B200F093 +:101A400073F800F08FF810BD10B50400552000F0B9 +:101A50006BF8042000F068F8E0B200F065F8200AA6 +:101A600000F062F800F07EF810BD70B504000D00C3 +:101A7000552000F059F8442000F056F8E0B200F08C +:101A800053F8200A00F050F800F06CF8280000F03D +:101A90004BF800F067F870BD10B5552000F044F821 +:101AA000292000F041F800F05DF8040000F05AF839 +:101AB0000002204380B210BD10B5552000F034F86C +:101AC000242000F031F800F04DF810BD10B50400EE +:101AD000552000F029F8692000F026F8E0B200F067 +:101AE00023F8200A00F020F800F03CF810BD10B5F3 +:101AF0000400552000F018F8642000F015F82000CC +:101B000000F012F800F02EF810BD0000FF2248404F +:101B1000044BC0B24000C35A09125940C8B29343A3 +:101B200018437047703B000070B50D4D0100040074 +:101B3000280001F04BFD280001F0AFFC00F0FAF89E +:101B40000600280001F0A4FC002804D100F0F2F8FF +:101B5000801B1328F5D9280001F0B0FC200070BDCF +:101B60000004002010B5054C200001F091FC002875 +:101B7000F9D0200001F0A2FCC0B210BD000400208A +:101B8000962170B5174C0500174A2000490001F056 +:101B900089FD002D1BD0012D0DD10021200001F069 +:101BA00015FD200001F079FC0021200001F00EFD60 +:101BB000200001F072FC0F2000F0C2F8200001F0BC +:101BC00067FC051E05D0200001F078FCF6E729002F +:101BD000EBE7E1212000054A890201F063FD2800BE +:101BE00070BDC04600040020130400003104000052 +:101BF000E12110B5024A0348890201F053FD10BDEE +:101C0000310400000004002010B5024801F09EFCE1 +:101C100010BDC046BC03002010B5024801F096FC80 +:101C200010BDC04600040020F7B5002601240F4D6A +:101C30000F49280000F038FA0E4F0F49380000F025 +:101C400033FA0E490E4800F02FFA390023000196AE +:101C5000022200940B4801F04DFC29000196032359 +:101C600004220094084801F045FCF7BD440400201C +:101C70000008004248040020000C0042001000420E +:101C80004C040020BC03002000040020FEE70000FC +:101C9000034B10B51B68002B00D0984710BDC04601 +:101CA000500400200DBEFEE7134A1448110010B581 +:101CB000134B824202D0934212D11300824212D1BE +:101CC0000222104B5A62104B0832DA700F4B20324E +:101CD0009A7300F061F801F04DFDFEE710CB10C1E2 +:101CE0008142FBD3EAE70A4A8B42E9D00021094B43 +:101CF0009A42E5D202C2FBE70000002080010020EA +:101D0000803E0000FC70004100500041004800414E +:101D1000800100204408002010B500F02AF80028B7 +:101D200001D100F01BF810BD014B18607047C04690 +:101D300050040020014B18687047C046540400202E +:101D400070B5041E07D0044D2E6800F011F82B6802 +:101D50009B1BA342F9D370BD5404002010B5034A65 +:101D600013680133136000F08FF910BD5404002094 +:101D70007047002070470000024A53785BB2002B86 +:101D8000FBDB7047000C004010230249CA681A426E +:101D9000FCD0704700080040822210B5154B164C4D +:101DA0005A60A38C023A9343A384FFF7EDFF80228D +:101DB000124B92001B689B0E9B021343A362104BB5 +:101DC000E36292235B00A384FFF7DEFF0223A28C71 +:101DD0001343A384FFF7D8FF80230A4C5B00A36062 +:101DE000FFF7CAFF084B6360FFF7C6FF074B084ABF +:101DF0001A6010BD004000410008004024608000CF +:101E000080BB0A7C000C0040000703009C000020FF +:101E1000006CDC02C0201249124B134A10B54B6013 +:101E2000136A00061B021B0A0343136200240723E4 +:101E30008C600B608021136A09061B021B0A0B438E +:101E400013620A4B196A1A6A1143094A0A431A6251 +:101E500020001A21013400F00DF8072CF8D110BD34 +:101E600010E000E07FBB000000ED00E00004004057 +:101E7000FC05000010B500F053F810BDF7B50C22BA +:101E80004243244D0191535D042B2DD00027AA1805 +:101E90005278214EDB01D418A419204E24789E5983 +:101EA000E4B2BE4203D0013797407E1EB7411B4EBD +:101EB0009E193669B44600266146B14203D0013608 +:101EC0009640711E8E41002F17D10C37784301992F +:101ED0002D18686801290DD1012E06D1410706D4BD +:101EE000D3180D4A9B181C70F7BD0107F8D50421C3 +:101EF0000C43F5E704218C43F2E701209040019A5E +:101F0000012A03D1054A9B189861EDE7034A9B1803 +:101F10005861E9E7703D0000404400410044004141 +:101F20000C225043494B70B5C65C1B185C78DD78B9 +:101F3000042E00D187E0081F172842D801F09EFC2C +:101F40000C313131414141413333393D3D41414112 +:101F50004141413F418341830023002E33D0F001B2 +:101F60003B4E221892191678042232404E1F022E40 +:101F70003BD82D0701D540252A4372B6002901D050 +:101F80001A2935D10123A340324941184B608B6196 +:101F900004239A432E4923185B181A7062B6002056 +:101FA00070BD0123D9E706232B405A1E9341043309 +:101FB000D3E701232B400233CFE70623CDE70723E6 +:101FC000CBE70923C9E7022CC9D10629C7D0224A89 +:101FD00010780028C3D01670204A1078A0431070E3 +:101FE000D079C0090128FBD0B9E702263243C0E707 +:101FF0008D1E012D0CD80123A340164D45196B6091 +:10200000032903D16B6104231A43C3E7AB61FAE7E9 +:10201000012904D1A1400F4BC3189960B8E71049BA +:1020200065082D186D18E10707D50F2629781B01C3 +:1020300031400B432B700123E6E70F262978B1438B +:1020400019432970F7E701204042A9E7703D0000DD +:102050004044004100440041580400200028004250 +:1020600030440041F8B505000E0017000024BC42C2 +:1020700008D02B682800315D1B689847002801D0E4 +:102080000134F4E72000F8BD054A10B51368591C67 +:1020900005D0013B1360002B01D1024B984710BDC6 +:1020A000A000002001000020016070479446F0B5B8 +:1020B00005AC25789C1E621E944162460668920714 +:1020C000376824063A4322430724326000682140DF +:1020D000AD01002442682943022B00D05C030A436F +:1020E00022434260F0BD30B5C0250368AD031C68D3 +:1020F00012052A402243C0240904A40221400A43B5 +:102100001A6003685A6814435C6030BD012302689A +:1021100011680B43136003681A68D207FCD4DA69AC +:10212000D207F9D470470223026811680B43136089 +:102130000268D3699B07FCD4704703681A7ED207F4 +:1021400002D41A7E9207FCD57047002203685A8396 +:1021500070470368187E4007C00F70470368187EF9 +:10216000C0097047802302685B42117E0B431376DF +:1021700070470368187EC007C00F70470368188D4A +:10218000C0B2704703681A7ED207FCD589B201201D +:1021900019857047012203689A7570470122036808 +:1021A0001A7570470368194A30B5934227D0184A08 +:1021B000934227D0174A934220D10B2310210325A5 +:1021C00001229A402B40AB40C224FC359D4012486E +:1021D000A40002600259AA43C0259D402B0013436E +:1021E00080220351D2010D4B0A435A800C4A1168D8 +:1021F0000C4A11605A7852B2002AFBDB30BD092329 +:102200000E21DCE70A230F21D9E7C046000800426F +:10221000000C00420010004200E100E0000C004011 +:102220009C000020A4000020F8B504000F00160058 +:102230001D00FFF7B7FF2000FFF768FF1C21BB0060 +:102240000B4071072268090C0B431360842322683A +:102250009375012F1AD11021012E00D008390C4B93 +:1022600069431868C00001F013FB0722216802408F +:102270008B895203DB04DB0C13438B81226803043C +:102280009089DB0C400B400318439081F8BDC04699 +:10229000A400002010B50400FFF74CFDE0602368A7 +:1022A00020005B699847002808DAFFF743FDE368E0 +:1022B000C01AA3689842F2D30120404210BDF8B57D +:1022C00006000D0017000024BC4207D03000FFF7C5 +:1022D000E1FF002802DB28550134F5E72000F8BDB6 +:1022E0003F20704713B56B460268D97107335468B5 +:1022F00019000122A04716BD10B50221006900F0A7 +:10230000ADFC10BD10B50321006900F0BDFC10BD8F +:1023100010B5130004000A000069032100F0ACFDB1 +:10232000002801D10123636010BD000010B5054CE9 +:1023300003002068421C04D11A68180052699047B3 +:10234000206010BDF0000020074A0300106810B59F +:10235000411C03D001235B42136010BD02211869A8 +:1023600000F07CFDF9E7C046F000002010B50378CE +:102370003A22023303700249024800F029FE10BDE0 +:10238000B40000207804002010B5027800244378BF +:10239000A12A09D1212B05D10E490F489A3A00F004 +:1023A00017FE0134200010BD212AFBD1202B05D1BE +:1023B00008491A3A084800F0ABFCF3E7222B05D095 +:1023C000232BEFD14288054B1A60EBE78278014B53 +:1023D000DA71E7E7AC00002078040020A8000020B4 +:1023E0007047F7B5050017000191FFF7A3FC002423 +:1023F000E860BC4211D2019A022128693B1B1219E4 +:1024000000F0C0FC061E01D0A419F2E7FFF792FC11 +:10241000EB68C01AAB689842F6D32000FEBD0000FE +:10242000014B18687047C046AC000020014B18797A +:10243000C0B27047AC000020014B5879C0B2704761 +:10244000AC000020014B9879C0B27047AC0000206E +:10245000024BD879012318407047C046AC000020D9 +:10246000FA220021054B92009A60054A08321A6050 +:10247000044A59601A6119767047C0465C0400200E +:10248000C43D000078040020704770B50F26CB1DB6 +:1024900002003240D5B22C0000093034092A00DD98 +:1024A00007341C705A1E994200D170BD1300EFE72B +:1024B00010B5040001F082F9200010BD70B582292A +:1024C0001FD1C3B22A4D5A01AA189169294C800123 +:1024D0000C40C021890521439161274908334018E8 +:1024E0005061802228685B01C1180C795242224356 +:1024F0000A7170211A5C8A43110030220A431A546F +:1025000070BD0029FCD1C026C1B219484B01C318C7 +:102510009A68184DB6052A4032439A60083104681B +:1025200048010721154A5A60025D8A4311000122C1 +:102530000A43702102559A692A4032439A610E4A31 +:102540005A61025D8A43110010220A4302559A68BB +:102550000B4920181140802252030A439A609A685E +:10256000920B92039A604023427913434371C7E769 +:1025700030070020FFFFFF8FA40400206405002027 +:10258000FF3F00F070B50400012320CC00212A7821 +:102590002000134380222B70520001F002FAAB7826 +:1025A000DB07FCD46C6270BD1F22144B70B51B6836 +:1025B000590B9C0C9B0111405B0F22401F2900D13D +:1025C0001A391F2A00D1023A072B00D1043B1F25DC +:1025D00000688E01048D0A492A402140314301855B +:1025E000018D14000A00AA4322430285028D1903BB +:1025F000044B13400B43038570BDC046246080002C +:102600003FF8FFFFFF8FFFFFEFF31083036001230D +:10261000436072B670470368002B02D162B6BFF305 +:102620006F8F7047836973B50400002B18D10600C3 +:10263000683635786846FFF7E7FF019BEDB2013B4E +:1026400002D33578EDB2FAE768460193FFF7E3FF6E +:10265000002D01D1002076BD606E236EC01AFAE70E +:102660006846FFF7D1FF22000025019BB432013BF1 +:1026700002D31578EDB2FAE768460193FFF7CBFF76 +:10268000002DE7D02300AC34B03318682368E5E7A9 +:1026900010B543694468DBB25A01A2189168094831 +:1026A00008330840802149030143916091685B0130 +:1026B000890B890391602268D318402219790A4353 +:1026C0001A7110BDFF3F00F0F7B504006846FFF730 +:1026D0009BFF0026019B5A1E0192002B05D0200073 +:1026E000083001F0A6F80600F4E76846FFF793FF0C +:1026F000A5696846002D49D1FFF786FF2000019BA0 +:102700006830013B5A1C0BD00278591E002A05D1B3 +:1027100068460193FFF77FFF2800FEBD0B00F1E73D +:1027200068460193FFF777FF236EB5420ED0626EC5 +:102730009A420BD920005A1CE31822660133D97F34 +:102740000830C9B201F04DF80135EDE7626E9A42EA +:10275000E2D10023236601336846A361FFF754FFEB +:10276000270022000021019B6837013BB532581C2D +:10277000CED0397010785E1E002805D02000117070 +:102780000193FFF785FFEBE73300F0E7FFF73CFF2E +:102790002000019BB430013B5A1C06D00278591E20 +:1027A000D5B2002AB4D00B00F6E7684601930025A5 +:1027B000FFF731FF22002100AC321368B031B5427F +:1027C00002D0086898421DD809689942A4D1002314 +:1027D00068461360A361FFF717FF2700220000215E +:1027E000019BB437013BB532581C00D190E73970DA +:1027F00010785E1E002811D0200011700193FFF7A1 +:1028000047FFEAE72000591CE31811606C33197880 +:102810000830C9B200F0E5FF0135CBE73300E3E74C +:1028200010B50400FFF750FF2000083001F00FF84A +:1028300010BD10B50400FFF747FF2000083000F07E +:10284000F2FF10BDF0B585B0160001910500FFF74D +:102850003BFF02A8FFF7D8FE0024039B5A1E0392F9 +:10286000002B0FD0B442F8D22F000837380000F008 +:10287000DAFF0028F1D0380000F0C4FF019B1855A2 +:102880000134EFE702A8FFF7C6FE200005B0F0BD57 +:10289000F7B542694368D2B21100040008311868E4 +:1028A00049014118C979C90712D552019B189A6884 +:1028B0009204910C002A0CD12000FFF7E9FE636816 +:1028C0001A686369DBB208335B01D3187F22DA71BF +:1028D000F7BDE269002A21D1220001256C32616630 +:1028E0006846E5615A60FFF78FFE26002000210050 +:1028F000019B6836013BB430B5315A1C33D035707A +:1029000002785F1ED2B20A700A78002A04D1200031 +:102910000193FFF7BDFEE8E73B00EEE72200B0328F +:1029200011600022E2612200203268465A60FFF7FF +:102930006BFE0125260020002100019BB436013BDF +:102940006830B5315A1C0ED0357002785F1ED2B295 +:102950000A700A78002A04D120000193FFF798FE3C +:10296000E8E73B00EEE768460193FFF754FEA6E771 +:1029700013B56A4600230C00D01DD371FFF7F6FC97 +:10298000236818186B462060D87916BD03290ED12C +:1029900080220E4B62311B68FF31585C5242024369 +:1029A0005A5468226339FF32FF399954704701291C +:1029B000FCD18022054B24311B68FF31585C524208 +:1029C00002435A5428222339FF32EDE73007002012 +:1029D00070B50024274B0121050020001C70FFF773 +:1029E00049FA01212000FFF749FA234B0121200079 +:1029F0001C70FFF73FFA01212000FFF73FFA202368 +:102A00001E4A0520D1690B43D3610F21FFF788FAD5 +:102A10000F210620FFF784FA194B1A4A5A805A7878 +:102A200052B2002AFBDB1848FFF77EF9174C200052 +:102A3000FFF7A8FD2000FFF7B7FD7F212368C12025 +:102A40001A7880000A401A70042219780A430C216F +:102A50001A701A898A430E491A810A581202120AF8 +:102A60000A5080220A6019787E3A0A431A700123BC +:102A70002B7070BD990400209804002000040040D1 +:102A8000000C0040064000004134000030070020E8 +:102A900000E100E00078002810D00121084B1B68FD +:102AA0001A898A431A810822198B0A431A8304223D +:102AB000198B0A431A830022024B1A607047C046E2 +:102AC00030070020280700200A000E498B699B0B65 +:102AD0009B038B610B680221FF331972987982394D +:102AE00001439971197A8907FCD57F20064B024072 +:102AF000997A8143114380229972997A52420A430A +:102B00009A727047300700200050004100200B7976 +:102B100010B583420AD10800FFF736FC002805D122 +:102B2000034A013093699B0B9B03936110BDC04620 +:102B300030070020F7B50D001100832A19D1EBB240 +:102B4000384C5A01A21891693748AD010840C0219C +:102B5000890501439161354920686D18702108335A +:102B600055615B011A5C8A43110040220A431A54E2 +:102B7000F7BD022A52D12E4BAA00D058002802D00D +:102B800003685B699847B82000F014FE0400294BE5 +:102B9000FF260360234B4360083000F013FE29003A +:102BA00022000023606868323140A3616561E361FF +:102BB000236663664901137053649364443213724D +:102BC000411853728B68184AAD001A40C0239B0508 +:102BD00013438B606269036832401100019207223F +:102BE00008314901CF5C9743BC460327624617432F +:102BF000CF542700019A203752018218576062692A +:102C00002000324052019B1801229B19997A0A43F5 +:102C10009A72FFF73DFD064BEC50A9E72800FFF73D +:102C20004DFCA5E730070020FFFFFF8F6405002063 +:102C30007C040020F43D000070B505000124064B23 +:102C4000A200D258002A05D021002800FFF772FF09 +:102C50000134F4E770BDC046F4000020084B8A0040 +:102C6000D05810B5002803D003689B68984710BD62 +:102C7000044BC9B24901591888688004800CF6E7F2 +:102C80007C0400203007002010B50C00FFF7E6FFA1 +:102C900000280CD0064BE4B2196880230834640184 +:102CA0000C1962795B42134363710223E37110BD17 +:102CB0003007002070B5CBB2124A13485C0189017D +:102CC0008918021951609168104D08330D40802118 +:102CD00089022943402591609168890B890391609D +:102CE00001685A018A1816793543157195796D0670 +:102CF000FCD55B01C918CB79DB07FCD500198068CE +:102D0000C0B270BD6405002030070020FF3F00F016 +:102D100070B5140040220B4B0D001B68FF3359792E +:102D20000A435A710021FFF7C5FFA04200D92000D5 +:102D300000230549A34203D0CA5CEA540133F9E7F2 +:102D400070BDC046300700206405002010B50C4857 +:102D5000C9B24901421893689B049B0C3F2B0BD9C5 +:102D60009468403B9B04A40B9B0CA40323439360F7 +:102D700041188868C0B210BD93689B0B9B03F6E7AF +:102D800030070020F0B51C002F4B85B01B680600F3 +:102D90000D000192002B54D02C4F3B78D8B2002B61 +:102DA00002D10100FFF76AF864233B70284BAA00A8 +:102DB000D058002808D0036822005B680199984722 +:102DC0000400200005B0F0BD29003000FFF746FFE9 +:102DD000844204D929003000FFF740FF0400290095 +:102DE0003000FFF7B3FF0121EBB21A4F03935B01F1 +:102DF0000293029A3B6801989B18FF335A7A0A4360 +:102E00005A72154BA9012200C91800F0C1FD002C0F +:102E1000D7D029003000FFF721FF0028D1D1402171 +:102E2000039B3A6808335B01D31818790143197181 +:102E30000121D971029BD318FF339A7A0A439A72FF +:102E4000BFE701246442BCE7280700209804002063 +:102E50007C040020300700206405002013B56B4679 +:102E6000DC1D22000123FFF78DFF012801D120780E +:102E700016BD01204042FBE7F0B51C003A4B85B07F +:102E80001B680E000192002B3FD08023DB019C4287 +:102E90003BD8364D2B78D8B2002B02D10100FEF77B +:102EA000EDFF642300272B70314BB201D31802933E +:102EB000002C2CD02F4B1B680393FF2333401D00A5 +:102EC00000930835039B6D015D19AB79DB0921D0B7 +:102ED000294B2A49186800F0DBFC294B172158437D +:102EE00000F0D6FC274BEA79920713D49A5D002AAA +:102EF00001D10138F7D201229A55009B5A011D4B8E +:102F00009B189A69920B92039A6101277F423800BD +:102F100005B0F0BD00221B4B25009A553F2C00D96F +:102F20003F252A000199029800F032FD009BA90478 +:102F30005A01104B890C9B18029A7F195A619A69A1 +:102F4000641B920B92030A439A61009B039A083315 +:102F50005B01D3180222DA715979823A0A435A7115 +:102F6000019B5B190193A3E7280700209904002027 +:102F7000A4040020300700209C00002040420F00E5 +:102F8000701101009B04002070B50C001D000D4B5A +:102F9000A601F618110030002A0000F0F9FCE4B296 +:102FA000094A640114196661A369084928000B40A5 +:102FB000A361A169AB04890B9B0C89031943A1612F +:102FC00070BDC046A404002030070020FF3F00F081 +:102FD000F7B5104B0F001B7814000190002B0CD19B +:102FE0000D4B16001D78002D09D00C4E0C4835886D +:102FF00028182D1900F0CCFC35802000FEBD002ED5 +:10300000FBD033007A1900210198FFF7BDFF2D187E +:10301000361AF4E7240600202507002026070020A2 +:1030200025060020F8B500200D00140000AF012A8D +:1030300027D9D31D6A46DB08DB00D31A9D4608005A +:1030400000F072FD6E460323022200210130400091 +:1030500030707370A2420DD2287800280AD0531C19 +:10306000DBB20135B0549C4203D00232F154D2B2EB +:10307000F0E7220031000448FFF7AAFF431E984101 +:10308000C0B2BD46F8BDC04678040020F0B50025AA +:10309000012785B0184B0E0069461F70040000958B +:1030A000FFF766FC154B01A90B806A3BFF3BCB7118 +:1030B0005A330B72009B320009334B800E4B8D71DB +:1030C0004F7108711D70092E0FD00D4E09223770F7 +:1030D0000C4F200000953D80FFF77AFF69462000E5 +:1030E000FFF746FC3A88084935702000FFF770FF6B +:1030F000012005B0F0BDC0462406002009020000F2 +:1031000025070020260700202506002070B5CB7873 +:1031100005000E0092B0022B09D1C9882648FFF79E +:10312000B5FF441EA041C4B2200012B070BD012BF7 +:103130000BD1CA882149112A11D8D2B2002A0ED047 +:103140002800FFF745FF0124EEE70024032BEBD115 +:103150008B78A34205D1CA881949032AEDD90A7888 +:10316000EEE7022B06D18A7916492800FFF75AFFAD +:103170000400D9E7012B02D18A791349F5E7032B23 +:10318000D2D1124B01A91868FFF77FF9104B03A9A0 +:103190001868FFF77AF90F4B05A91868FFF775F95A +:1031A0000D4B07A91868FFF770F96B460533DC77FC +:1031B000B27901A9D9E7C04678040020343E000066 +:1031C000243E0000103E0000283E00000CA08000BD +:1031D00040A0800044A0800048A0800073B5060095 +:1031E00048780D000B2810D800F048FB061B0F3163 +:1031F0000F474C7450536D70097801AA002906D10D +:10320000022311803000FFF7BFFE012076BD0023AE +:103210001380314B1B78012B00D113700223002146 +:10322000F0E78A780023012A09D16A4693802B4B64 +:103230001B78012B00D11371022301AAEFE7264A64 +:103240001370274A93699B0B9B039361DDE78C788E +:10325000012C07D1214B01AA1C70224B1B78137043 +:103260002300DCE7002C08D101201B4B1C4A1870FE +:1032700093699B0B9B039361C8E73000A978FFF724 +:1032800023FCC2E73000FFF741FFBFE70123164AE6 +:10329000C5E70B780020DB06B8D13000FFF7CCFC87 +:1032A0002A200221AA78104BFF301A600C4A1368BA +:1032B0001C5C21434A241954FF34195D2938FF3816 +:1032C00001431955D4E70123084AA8E78A78074B38 +:1032D0001A60B6E7002099E79A040020A2040020B3 +:1032E00030070020E83D0000280700202C070020C0 +:1032F0004B4BF7B51C780700002C00D08FE0494EEF +:1033000033689B8B1B070ED521002000FFF7D6F8F2 +:10331000326810231100FF31887A03438B72424BCD +:103320001C600823938333689A8B52071FD50422AD +:103330009A833E4A1378002B0AD01378013BDBB204 +:1033400013701378D8B2002B02D10121FEF796FD3D +:10335000374A1378002B0AD01378013BDBB2137085 +:103360001378D8B2002B02D10121FEF787FD336814 +:10337000FF331A7AD2061ED510221A7259793032CA +:103380000A435A7160232B4938000A781A423BD10C +:10339000FFF724FF3368FF33002838D08022997963 +:1033A00052420A439A711A7A520604D540221A727E +:1033B000597A0A435A72336807241D8C01239D43AE +:1033C000EDB20193E1B2002D29D0002C27D02B00C3 +:1033D0002341019A134215D02300326808335B0160 +:1033E000D318DA79D20702D4DB799B0707D5124BC1 +:1033F000A200D05800280ED003681B689847019B94 +:10340000A3409D43013CDDE7FFF780FBC2E720219D +:103410000A4A9171C7E73800FFF7B8FAEFE7F7BD3E +:1034200025070020300700202807002099040020ED +:1034300098040020640500207C040020FF50004117 +:1034400010B50248FFF754FF10BDC04678040020B5 +:10345000014B024A1A6070473007002000500041BB +:103460000120704710B50368014A1B6A984710BDD8 +:103470001304000010B504000069FEF747FE2000A9 +:10348000143000F0BBF92000203000F0B7F910BD77 +:1034900010B5143000F0C7F910BD10B504002000BD +:1034A000203000F0C0F90028F9D12069FEF745FE70 +:1034B00010BD10B5203000F0BCF910BD70B506008D +:1034C00004001436300000F09DF9230030331B78DF +:1034D0000500FF2B07D0300000F0ABF90A2802DD11 +:1034E000A36BE26B1A60280070BD10B5143000F0B9 +:1034F000AEF910BDF7B51D0008AB1B7804000093B2 +:1035000009AB1B781600019300234360FA239B004C +:1035100083600D4B0F0008330360143000F052F944 +:103520002000203000F04EF92300009A2C33276150 +:103530009A70019A1E70DA7022005D70FF2330329B +:10354000200013701374FEBD483E000070B50400E7 +:103550000069FEF7FEFD002815D025002069FEF762 +:103560000DFE14350100280000F03BF92300303334 +:103570001B78FF2B07D0280000F05BF9092802DC3C +:10358000636BE26B1A602069FEF7F3FD00280DD033 +:1035900025002035280000F046F9002812D0280028 +:1035A00000F030F9C1B22069FEF7ECFD2069FEF7AA +:1035B000D5FD002805D02069FEF7D4FD2069FEF76F +:1035C000C4FD70BD2069FEF7E9FDEFE7F8B5040022 +:1035D00000690D002600FEF7CCFD2036002834D10E +:1035E0003F27300000F03EF9002825D0EFF310838C +:1035F0000122134211D1EFF305831A003A403B42F6 +:10360000EFD0103A53B2002A10DA0F221340083BD1 +:10361000134A9B089B009B181B682069FEF7A9FDB5 +:103620000028DED02000FFF791FFDAE79B080D4A63 +:10363000C0339B009B58F0E73000290000F0D1F820 +:103640002069FEF7A7FD0120F8BD300000F0EBF87F +:103650000028C5D129002069FEF794FDF3E7C04694 +:103660001CED00E000E100E0F0231B011940802385 +:1036700006209B0099420AD00133FF330130994262 +:1036800005D0802300205B00994200D105307047AF +:103690000F2001400020012903D00239481E81413A +:1036A000481C70470300F0B5040085B003912C332B +:1036B0000E2118781500FEF733FC230026002D3369 +:1036C00018780E212F36FEF72BFC3378022B07D10A +:1036D000230040331878FF2802D00E21FEF720FC8B +:1036E000270030373878FF2814D00121FEF7C2FBBD +:1036F0000C213B781B4A59438B5C521851780122AC +:103700008A401948DB01181860631848E2631B18E7 +:10371000A3631A600122039B11002069FEF784FD58 +:1037200029002000FFF7A0FF290007002000FFF775 +:10373000AFFFF0221540303D6A4255410300390089 +:10374000206901220095FEF7B1FC23002E331A7880 +:1037500031782069FEF7C7FC2069FEF7E4FC05B06C +:10376000F0BDC046703D00001844004114440041C3 +:103770007047000010B5FEF74DFB00F0D1F8FFF7E1 +:10378000F7FF0120FEF7DCFA084C2000FFF720F9D4 +:103790002000FFF77FF9FDF777FFFDF78FFF044B60 +:1037A000002BFAD000E000BFF7E7C0467804002005 +:1037B0000000000010B500F0D7F810BD10B500F003 +:1037C000DDF810BD10B50400802000F0CDF8802297 +:1037D0000021206000F0E5F8002320006360A36072 +:1037E00010BD7F22436810B50133134082689A42AE +:1037F00003D042680468A154436010BD00234360B5 +:1038000083607047826843689A4209D07F21836849 +:103810000268D25C836801330B40836010007047FC +:1038200001204042FBE743688068181A00D58030C9 +:103830007047426883689A4204DB43688068C01A14 +:103840007F30704783684068181A0138F9E782684A +:1038500043689A4203D083680268D05C70470120B5 +:103860004042FBE703007F2240689B680130104024 +:10387000C01A43425841C0B27047000002B47146BA +:1038800049084900095C49008E4402BC7047C046A3 +:10389000002934D00123002210B488422CD3012403 +:1038A0002407A14204D2814202D209011B01F8E798 +:1038B000E400A14204D2814202D249005B00F8E751 +:1038C000884201D3401A1A434C08A04202D3001B7D +:1038D0005C0822438C08A04202D3001B9C082243B0 +:1038E000CC08A04202D3001BDC082243002803D0EE +:1038F0001B0901D00909E3E7101C10BC704701B592 +:10390000002000F00BF802BD0029F8D003B5FFF746 +:10391000C1FF0EBC4243891A1847C0467047C046D3 +:1039200070B500260C4D0D4C641BA410A64209D1A5 +:10393000002600F011F90A4D0A4C641BA410A6429F +:1039400005D170BDB300EB5898470136EEE7B300E0 +:10395000EB5898470136F2E7680100206801002023 +:10396000680100207801002010B5034B01001868A1 +:1039700000F06AF810BDC0460401002010B5034BEA +:103980000100186800F016F810BDC04604010020C0 +:10399000002310B59A4200D110BDCC5CC454013351 +:1039A000F8E703001218934200D1704719700133F1 +:1039B000F9E7000070B50500002910D00C1F23683E +:1039C000002B00DAE418280000F0B5F81D4A13684F +:1039D000002B05D163601460280000F0ADF870BDC5 +:1039E000A34209D9216860188342F3D118685B6843 +:1039F00041182160EEE713005A68002A01D0A24264 +:103A0000F9D919685818A0420BD12068091858181C +:103A100019608242E0D110685268411819605A60FA +:103A2000DAE7A04202D90C232B60D5E721686018A1 +:103A3000824203D1106852684118216062605C6064 +:103A4000CAE7C04634080020F8B50323CD1C9D43C7 +:103A5000083506000C2D1FD20C25A9421ED83000B7 +:103A600000F069F825490A681400002C1AD1244F87 +:103A70003B68002B04D12100300000F043F838608F +:103A80002900300000F03EF8431C2AD10C233000FE +:103A9000336000F051F803E0002DDEDA0C233360D0 +:103AA0000020F8BD23685B1B18D40B2B03D92360BF +:103AB000E418256003E06368A2420DD10B6030007A +:103AC00000F03AF8200007220B30231D9043C21A61 +:103AD000E7D01B1AA350E4E75360F0E722006468C4 +:103AE000C3E70323C41C9C43A042E2D0211A300048 +:103AF00000F008F8431CDCD1C8E7C04634080020B9 +:103B000038080020002370B5064C0500080023602B +:103B100000F014F8431C03D12368002B00D02B6065 +:103B200070BDC046400800200023C25C0133002A5B +:103B3000FBD1581E7047704770470000044A136855 +:103B4000002B03D01818106018007047014BF9E7DC +:103B50003C08002044080020F8B5C046F8BC08BC6A +:103B60009E467047F8B5C046F8BC08BC9E467047F4 +:103B70000000891112239B322446AD573665BF746D +:103B8000488CC19D5AAFD3BE6CCAE5DB7EE9F7F81D +:103B90008110080193331A22A5562C47B7753E644D +:103BA000C99C408DDBBF52AEEDDA64CBFFF976E8FD +:103BB00002218B30100299132667AF763444BD552D +:103BC0004AADC3BC588ED19F6EEBE7FA7CC8F5D9DD +:103BD00083310A2091121803A7772E66B5543C450D +:103BE000CBBD42ACD99E508FEFFB66EAFDD874C9BD +:103BF00004428D5316619F702004A9153227BB36ED +:103C00004CCEC5DF5EEDD7FC6888E1997AABF3BA9C +:103C100085520C4397711E60A1142805B3373A26CC +:103C2000CDDE44CFDFFD56ECE9986089FBBB72AA7C +:103C300006638F7214409D512225AB343006B917AC +:103C40004EEFC7FE5CCCD5DD6AA9E3B8788AF19B5C +:103C500087730E6295501C41A3352A24B11638078C +:103C6000CFFF46EEDDDC54CDEBB962A8F99A708B3C +:103C7000088481951AA793B62CC2A5D33EE1B7F06C +:103C80004008C919522BDB3A644EED5F766DFF7C1C +:103C9000899400859BB712A6ADD224C3BFF136E04C +:103CA000C1184809D33B5A2AE55E6C4FF77D7E6CFC +:103CB0000AA583B4188691972EE3A7F23CC0B5D12C +:103CC0004229CB38500AD91B666FEF7E744CFD5DDC +:103CD0008BB502A499961087AFF326E2BDD034C10C +:103CE000C3394A28D11A580BE77F6E6EF55C7C4DBC +:103CF0000CC685D71EE597F42880A1913AA3B3B2EC +:103D0000444ACD5B5669DF78600CE91D722FFB3E9B +:103D10008DD604C79FF516E4A9902081BBB332A2CB +:103D2000C55A4C4BD7795E68E11C680DF33F7A2E7B +:103D30000EE787F61CC495D52AA1A3B03882B193AB +:103D4000466BCF7A5448DD59622DEB3C700EF91F5B +:103D50008FF706E69DD414C5ABB122A0B99230838B +:103D6000C77B4E6AD5585C49E33D6A2CF11E780F3B +:103D7000000219087F00000080000280000E190870 +:103D80003F40000080061080000F19083F700000BF +:103D900019070180001619081F40000080160680D0 +:103DA000001719080F40000080161280001819082B +:103DB0000F80000080161280001919080F80000083 +:103DC000801612800000000000000000E5220000C4 +:103DD00011230000E122000005230000F922000069 +:103DE000492300002D230000000000000000000017 +:103DF0000000000091280000452800003328000042 +:103E00002128000089240000B1240000252600009C +:103E100041726475696E6F204E616E6F20457665E4 +:103E2000727900000403090441726475696E6F20A1 +:103E30004C4C430012011001020000404123580085 +:103E4000000101020301000000000000000000006A +:103E5000CD35000065200000B33400009B34000025 +:103E600091340000BD340000EB34000065340000E4 +:103E7000A536000075340000613400000000000029 +:103E800010B572B68122114B92000433934213D3C2 +:103E90000F4A01211000147D0C42FCD02021148B0C +:103EA000FF319B085B0021431183D361094B1380D1 +:103EB0000123027D1A42FCD0BFF34F8F064B074A05 +:103EC000DA60BFF34F8FC046FDE7C0460010000028 +:103ED0000040004102A5FFFF00ED00E00400FA05EC +:103EE0008601010701010107060100000000000032 +:103EF0004A544147494345206D6B49490000000041 +:103F000000C20100FF0813040165736172454D563C +:103F10004E20676F72504D564E00000040420F0019 +:103F2000FFFFFFFF40420F00FFFFFFFF00C2010045 +:103F3000000008000904000001020200000524003E +:103F400010010424020605240600010524010101D4 +:103F50000705810310001009040100020A00000097 +:103F60000705020240000007058302400000000030 +:103F7000FFFFFFFF000000008300000002000000C0 +:103F80008200000008010020000000000000000086 +:103F90000000000000000000000000000000000021 +:103FA0000000000000000000000000000000000011 +:103FB0000000000000000000000000000000000001 +:103FC00000000000000000000000000000000000F1 +:103FD00000000000000000000000000000000000E1 +:103FE0000000000000000000B5100000291C0000C7 +:103FF00061240000513400008D100000000000001A +:0400000300001CA934 :00000001FF diff --git a/firmwares/MuxTO/MuxTO.ino b/firmwares/MuxTO/MuxTO.ino index 1c50186b..85603071 100644 --- a/firmwares/MuxTO/MuxTO.ino +++ b/firmwares/MuxTO/MuxTO.ino @@ -17,9 +17,11 @@ // Includes #include "sys.h" +#include "lock.h" #include "updi_io.h" #include "JICE_io.h" #include "JTAG2.h" +#include "UPDI_hi_lvl.h" volatile bool updi_mode = false; unsigned long baudrate = 115200; @@ -28,11 +30,15 @@ unsigned long updi_mode_end = 0; uint8_t stopbits = 1; uint8_t paritytype = 0; uint8_t numbits = 8; +int8_t dtr = -1; +int8_t rts = -1; uint16_t serial_mode = SERIAL_8N1; bool serialNeedReconfiguration = false; char support_buffer[64]; +struct lock q; + void setup() { /* Initialize MCU */ pinMode(LED_BUILTIN, OUTPUT); @@ -41,6 +47,8 @@ void setup() { JICE_io::init(); UPDI_io::init(); Serial1.begin(baudrate, serial_mode); + lock_init(&q); + JTAG2::sign_on(); } //#define DEBUG; @@ -62,17 +70,21 @@ void loop() { //blink_delay = 1000; if (int c = Serial1.available()) { + lock(&q); if (c > Serial.availableForWrite()) { c = Serial.availableForWrite(); } + unlock(&q); Serial1.readBytes(support_buffer, c); Serial.write(support_buffer, c); } if (int c = Serial.available()) { + lock(&q); if (c > Serial1.availableForWrite()) { c = Serial1.availableForWrite(); } + unlock(&q); Serial.readBytes(support_buffer, c); Serial1.write(support_buffer, c); } @@ -133,13 +145,18 @@ void loop() { updi_mode_end = 0; } - if (Serial.baud() != baudrate || serialNeedReconfiguration) { + if (Serial.baud() != baudrate || serialNeedReconfiguration || Serial.dtr() != dtr) { + dtr = Serial.dtr(); if (Serial.dtr() == 1) { baudrate = Serial.baud(); Serial1.end(); if (baudrate != 1200) { Serial1.begin(baudrate, serial_mode); serialNeedReconfiguration = false; + // Request reset + UPDI::stcs(UPDI::reg::ASI_Reset_Request, UPDI::RESET_ON); + // Release reset (System remains in reset state until released) + UPDI::stcs(UPDI::reg::ASI_Reset_Request, UPDI::RESET_OFF); } } } diff --git a/firmwares/MuxTO/lock.h b/firmwares/MuxTO/lock.h new file mode 100644 index 00000000..16c5cb36 --- /dev/null +++ b/firmwares/MuxTO/lock.h @@ -0,0 +1,38 @@ +#ifndef _ARCH_LOCK_H_ +#define _ARCH_LOCK_H_ + +struct lock { + uint32_t primask; +}; + +#define LOCK_INIT (struct lock) {} + +static inline void lock_init(struct lock *lock) +{ +} + +// source: +// http://embeddedfreak.wordpress.com/2009/08/14/cortex-m3-global-interruptexception-control/ +// +// confirm this is correct by printing primask before after + +// note arm architecture v7m rm... setting PRIMASK raises priority to 0 + +static inline void lock(struct lock *lock) +{ + uint32_t tmp; + asm volatile ( + "mrs %0, PRIMASK\n\t" + "cpsid i\n\t" + : "=r" (tmp) ); + lock->primask = tmp; +} + +static inline void unlock(struct lock *lock) +{ + asm volatile ( + "msr PRIMASK, %0\n\t" + : : "r" (lock->primask) ); +} + +#endif From e7170e9558d063609cd0144ae8ba387330b21fa0 Mon Sep 17 00:00:00 2001 From: Egil Kvaleberg Date: Mon, 16 Sep 2019 09:46:08 +0200 Subject: [PATCH 07/65] Fix bug in baudrate compensation. (#44) * Fix bug in baudrate compensation. The code is now in accordance to the data sheet. The previous code would in effect either apply twice the compensation, or apply no compensation, depending on the polarity of the compensation. * Improve readability of expression for baudrate compensation. It is now exactly the same as in the documentation. The net result is the same as the previous version. * Since we have code to correct for errors in F_CPU to generate the right baudrate, then we should use F_CPU, the specified CPU frequency as basis, not the F_CPU with whatever corrections. --- cores/arduino/UART.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/cores/arduino/UART.cpp b/cores/arduino/UART.cpp index 0990136d..473f59b9 100644 --- a/cores/arduino/UART.cpp +++ b/cores/arduino/UART.cpp @@ -154,7 +154,7 @@ void UartClass::begin(unsigned long baud, uint16_t config) uint8_t oldSREG = SREG; cli(); - baud_setting = (((8 * F_CPU_CORRECTED) / baud) + 1) / 2; + baud_setting = (((8 * F_CPU) / baud) + 1) / 2; // Disable CLK2X (*_hwserial_module).CTRLB &= (~USART_RXMODE_CLK2X_gc); (*_hwserial_module).CTRLB |= USART_RXMODE_NORMAL_gc; @@ -162,8 +162,7 @@ void UartClass::begin(unsigned long baud, uint16_t config) _written = false; int8_t sigrow_val = SIGROW.OSC16ERR5V; - baud_setting *= (1024 + sigrow_val); - baud_setting /= (1024 - abs(sigrow_val)); + baud_setting += (baud_setting * sigrow_val) / 1024; // assign the baud_setting, a.k.a. BAUD (USART Baud Rate Register) (*_hwserial_module).BAUD = (int16_t) baud_setting; From bf52acd315f089c9ea2d64b51a4ffcf97d0a3a56 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 16 Sep 2019 11:08:52 +0200 Subject: [PATCH 08/65] Fix Wire endTransmission() return convention Fixes https://github.com/arduino/ArduinoCore-megaavr/issues/40 --- libraries/Wire/src/utility/twi.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/libraries/Wire/src/utility/twi.c b/libraries/Wire/src/utility/twi.c index a313ac07..e6e45e54 100644 --- a/libraries/Wire/src/utility/twi.c +++ b/libraries/Wire/src/utility/twi.c @@ -270,8 +270,11 @@ uint8_t TWI_MasterRead(uint8_t slave_address, * \param bytesToWrite Number of bytes to write. * \param bytesToRead Number of bytes to read. * - * \retval true If transaction could be started. - * \retval false If transaction could not be started. + * \retval 0:success + * \retval 1:data too long to fit in transmit buffer + * \retval 2:received NACK on transmit of address + * \retval 3:received NACK on transmit of data + * \retval 4:other error */ uint8_t TWI_MasterWriteRead(uint8_t slave_address, uint8_t *write_data, @@ -335,8 +338,21 @@ uint8_t TWI_MasterWriteRead(uint8_t slave_address, // return bytes really read ret = master_bytesRead; } else { - // return 0 if success, >0 otherwise - ret = (master_result == TWIM_RESULT_OK ? 0 : 1); + // return 0 if success, >0 otherwise (follow classic AVR conventions) + switch (master_result) { + case TWIM_RESULT_OK: + ret = 0; + break; + case TWIM_RESULT_BUFFER_OVERFLOW: + ret = 1; + break; + case TWIM_RESULT_NACK_RECEIVED: + ret = 3; + break; + default: + ret = 4; + break; + } } return ret; From d316aa62ae4f515095319cd9e8b0ac781daf5fb8 Mon Sep 17 00:00:00 2001 From: Hans Date: Mon, 16 Sep 2019 10:53:44 +0200 Subject: [PATCH 09/65] Redefine F() as no-op megaAVR 0-series have a unified address space so forcing a const string in flash just increases flash occupation with no benefit on RAM usage. Fixes #53 --- cores/arduino/Arduino.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cores/arduino/Arduino.h b/cores/arduino/Arduino.h index 16063a6a..728323ec 100644 --- a/cores/arduino/Arduino.h +++ b/cores/arduino/Arduino.h @@ -26,6 +26,9 @@ #include #include +#undef F +#define F(str) (str) + #ifdef __cplusplus extern "C"{ #endif From 474008381ec8a79e4b12e892592f6b381be171eb Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 16 Sep 2019 14:12:57 +0200 Subject: [PATCH 10/65] Update avrdude to use 6.3.0-arduino17 --- platform.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform.txt b/platform.txt index bf4d5612..437593c4 100644 --- a/platform.txt +++ b/platform.txt @@ -93,7 +93,7 @@ recipe.preproc.macros="{compiler.path}{compiler.cpp.cmd}" {compiler.cpp.flags} { # AVR Uploader/Programmers tools # ------------------------------ -tools.avrdude.path={runtime.tools.avrdude-6.3.0-arduino16.path} +tools.avrdude.path={runtime.tools.avrdude-6.3.0-arduino17.path} tools.avrdude.cmd.path={path}/bin/avrdude tools.avrdude.config.path={path}/etc/avrdude.conf From 46ed5ebf43ac31d4869f1d3954af308ba3dbdab3 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 16 Sep 2019 14:13:24 +0200 Subject: [PATCH 11/65] Update core to 1.8.5 --- platform.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform.txt b/platform.txt index 437593c4..f079040c 100644 --- a/platform.txt +++ b/platform.txt @@ -6,7 +6,7 @@ # https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5-3rd-party-Hardware-specification name=Arduino megaAVR Boards -version=1.8.4 +version=1.8.5 # AVR compile variables # --------------------- From 3b5508ec47aa72ecd9b50372cb0e213f3febe853 Mon Sep 17 00:00:00 2001 From: MCUdude Date: Mon, 16 Sep 2019 22:30:33 +0200 Subject: [PATCH 12/65] Remove PROGMEM attribute and pgm_read_byte Not needed since the megaAVR 0-series have a unified address space. Using pgm_read* will only increase memory usage --- cores/arduino/Arduino.h | 20 ++++++++++---------- variants/nona4809/pins_arduino.h | 12 ++++++------ variants/uno2018/pins_arduino.h | 8 ++++---- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/cores/arduino/Arduino.h b/cores/arduino/Arduino.h index 728323ec..1f02a58c 100644 --- a/cores/arduino/Arduino.h +++ b/cores/arduino/Arduino.h @@ -86,10 +86,10 @@ unsigned long microsecondsToClockCycles(unsigned long microseconds); // Get the bit location within the hardware port of the given virtual pin. // This comes from the pins_*.c file for the active board configuration. -extern const uint8_t PROGMEM digital_pin_to_port[]; -extern const uint8_t PROGMEM digital_pin_to_bit_mask[]; -extern const uint8_t PROGMEM digital_pin_to_bit_position[]; -extern const uint8_t PROGMEM digital_pin_to_timer[]; +extern const uint8_t digital_pin_to_port[]; +extern const uint8_t digital_pin_to_bit_mask[]; +extern const uint8_t digital_pin_to_bit_position[]; +extern const uint8_t digital_pin_to_timer[]; // Get the bit location within the hardware port of the given virtual pin. // This comes from the pins_*.c file for the active board configuration. @@ -118,12 +118,12 @@ extern const uint8_t PROGMEM digital_pin_to_timer[]; void setup_timers(); bool isDoubleBondedActive(uint8_t pin); -#define digitalPinToPort(pin) ( (pin < NUM_TOTAL_PINS) ? pgm_read_byte(digital_pin_to_port + pin) : NOT_A_PIN ) -#define digitalPinToBitPosition(pin) ( (pin < NUM_TOTAL_PINS) ? pgm_read_byte(digital_pin_to_bit_position + pin) : NOT_A_PIN ) -#define analogPinToBitPosition(pin) ( (pin < NUM_ANALOG_INPUTS) ? pgm_read_byte(digital_pin_to_bit_position + pin + ANALOG_INPUT_OFFSET) : NOT_A_PIN ) -#define digitalPinToBitMask(pin) ( (pin < NUM_TOTAL_PINS) ? pgm_read_byte(digital_pin_to_bit_mask + pin) : NOT_A_PIN ) -#define analogPinToBitMask(pin) ( (pin < NUM_ANALOG_INPUTS) ? pgm_read_byte(digital_pin_to_bit_mask + pin + ANALOG_INPUT_OFFSET) : NOT_A_PIN ) -#define digitalPinToTimer(pin) ( (pin < NUM_TOTAL_PINS) ? pgm_read_byte(digital_pin_to_timer + pin) : NOT_ON_TIMER ) +#define digitalPinToPort(pin) ( (pin < NUM_TOTAL_PINS) ? digital_pin_to_port[pin] : NOT_A_PIN ) +#define digitalPinToBitPosition(pin) ( (pin < NUM_TOTAL_PINS) ? digital_pin_to_bit_position[pin] : NOT_A_PIN ) +#define digitalPinToBitMask(pin) ( (pin < NUM_TOTAL_PINS) ? digital_pin_to_bit_mask[pin] : NOT_A_PIN ) +#define digitalPinToTimer(pin) ( (pin < NUM_TOTAL_PINS) ? digital_pin_to_timer[pin] : NOT_ON_TIMER ) +#define analogPinToBitPosition(pin) ( (digitalPinToAnalogInput(pin) != NOT_A_PIN) ? digital_pin_to_bit_position[pin + ANALOG_INPUT_OFFSET] : NOT_A_PIN ) +#define analogPinToBitMask(pin) ( (digitalPinToAnalogInput(pin) != NOT_A_PIN) ? digital_pin_to_bit_mask[pin + ANALOG_INPUT_OFFSET] : NOT_A_PIN ) #define portToPortStruct(port) ( (port < NUM_TOTAL_PORTS) ? ((PORT_t *)&PORTA + port) : NULL) #define digitalPinToPortStruct(pin) ( (pin < NUM_TOTAL_PINS) ? ((PORT_t *)&PORTA + digitalPinToPort(pin)) : NULL) diff --git a/variants/nona4809/pins_arduino.h b/variants/nona4809/pins_arduino.h index 0c78496f..39c3794f 100644 --- a/variants/nona4809/pins_arduino.h +++ b/variants/nona4809/pins_arduino.h @@ -142,7 +142,7 @@ static const uint8_t A7 = PIN_A7; // -const uint8_t PROGMEM digital_pin_to_port[] = { +const uint8_t digital_pin_to_port[] = { PC, // 0 PC5/USART1_Rx PC, // 1 PC4/USART1_Tx PA, // 2 PA0 @@ -172,7 +172,7 @@ const uint8_t PROGMEM digital_pin_to_port[] = { }; /* Use this for accessing PINnCTRL register */ -const uint8_t PROGMEM digital_pin_to_bit_position[] = { +const uint8_t digital_pin_to_bit_position[] = { PIN5_bp, // 0 PC5/USART1_Rx PIN4_bp, // 1 PC4/USART1_Tx PIN0_bp, // 2 PA0 @@ -202,7 +202,7 @@ const uint8_t PROGMEM digital_pin_to_bit_position[] = { }; /* Use this for accessing PINnCTRL register */ -const uint8_t PROGMEM digital_pin_to_bit_mask[] = { +const uint8_t digital_pin_to_bit_mask[] = { PIN5_bm, // 0 PC5/USART1_Rx PIN4_bm, // 1 PC4/USART1_Tx PIN0_bm, // 2 PA0 @@ -231,7 +231,7 @@ const uint8_t PROGMEM digital_pin_to_bit_mask[] = { PIN4_bm, // 25 PB4/USART3_Tx }; -const uint8_t PROGMEM digital_pin_to_timer[] = { +const uint8_t digital_pin_to_timer[] = { NOT_ON_TIMER, // 0 PC5/USART1_Rx NOT_ON_TIMER, // 1 PC4/USART1_Tx NOT_ON_TIMER, // 2 PA0 @@ -260,7 +260,7 @@ const uint8_t PROGMEM digital_pin_to_timer[] = { NOT_ON_TIMER, // 25 PB4/USART3_Tx }; -const uint8_t PROGMEM analog_pin_to_channel[] = { +const uint8_t analog_pin_to_channel[] = { 3, 2, 1, @@ -274,7 +274,7 @@ const uint8_t PROGMEM analog_pin_to_channel[] = { #endif extern const uint8_t analog_pin_to_channel[]; -#define digitalPinToAnalogInput(p) ((p < ANALOG_INPUT_OFFSET) ? pgm_read_byte(analog_pin_to_channel + p) : pgm_read_byte(analog_pin_to_channel + p - ANALOG_INPUT_OFFSET) ) +#define digitalPinToAnalogInput(p) ((p < ANALOG_INPUT_OFFSET) ? analog_pin_to_channel[p] : analog_pin_to_channel[p - ANALOG_INPUT_OFFSET] ) // These serial port names are intended to allow libraries and architecture-neutral // sketches to automatically default to the correct port name for a particular type diff --git a/variants/uno2018/pins_arduino.h b/variants/uno2018/pins_arduino.h index 71dd6edd..3b7e3aae 100644 --- a/variants/uno2018/pins_arduino.h +++ b/variants/uno2018/pins_arduino.h @@ -163,7 +163,7 @@ static const uint8_t A5 = PIN_A5; // -const uint8_t PROGMEM digital_pin_to_port[] = { +const uint8_t digital_pin_to_port[] = { PC, // 0 PC5/USART1_Rx PC, // 1 PC4/USART1_Tx PA, // 2 PA0 @@ -208,7 +208,7 @@ const uint8_t PROGMEM digital_pin_to_port[] = { }; /* Use this for accessing PINnCTRL register */ -const uint8_t PROGMEM digital_pin_to_bit_position[] = { +const uint8_t digital_pin_to_bit_position[] = { PIN5_bp, // 0 PC5/USART1_Rx PIN4_bp, // 1 PC4/USART1_Tx PIN0_bp, // 2 PA0 @@ -253,7 +253,7 @@ const uint8_t PROGMEM digital_pin_to_bit_position[] = { }; /* Use this for accessing PINnCTRL register */ -const uint8_t PROGMEM digital_pin_to_bit_mask[] = { +const uint8_t digital_pin_to_bit_mask[] = { PIN5_bm, // 0 PC5/USART1_Rx PIN4_bm, // 1 PC4/USART1_Tx PIN0_bm, // 2 PA0 @@ -297,7 +297,7 @@ const uint8_t PROGMEM digital_pin_to_bit_mask[] = { PIN6_bm // 40 PF6 RESET }; -const uint8_t PROGMEM digital_pin_to_timer[] = { +const uint8_t digital_pin_to_timer[] = { NOT_ON_TIMER, // 0 PC5/USART1_Rx NOT_ON_TIMER, // 1 PC4/USART1_Tx NOT_ON_TIMER, // 2 PA0 From aa65ff8138a3ed1d9fdb0a8ff087f2ab9a7b3a89 Mon Sep 17 00:00:00 2001 From: Pratik Chowdhury Date: Fri, 1 Feb 2019 17:59:43 +0530 Subject: [PATCH 13/65] Changed operator bool to explicit rather than implicit conversion in Serial --- cores/arduino/UART.h | 2 +- libraries/SoftwareSerial/src/SoftwareSerial.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cores/arduino/UART.h b/cores/arduino/UART.h index ef966e9f..a1e4939b 100644 --- a/cores/arduino/UART.h +++ b/cores/arduino/UART.h @@ -164,7 +164,7 @@ class UartClass : public HardwareSerial inline size_t write(unsigned int n) { return write((uint8_t)n); } inline size_t write(int n) { return write((uint8_t)n); } using Print::write; // pull in write(str) and write(buf, size) from Print - operator bool() { return true; } + explicit operator bool() { return true; } // Interrupt handlers - Not intended to be called externally inline void _rx_complete_irq(void); diff --git a/libraries/SoftwareSerial/src/SoftwareSerial.h b/libraries/SoftwareSerial/src/SoftwareSerial.h index b1a37c4a..edcf7607 100644 --- a/libraries/SoftwareSerial/src/SoftwareSerial.h +++ b/libraries/SoftwareSerial/src/SoftwareSerial.h @@ -103,7 +103,7 @@ class SoftwareSerial : public Stream virtual int read(); virtual int available(); virtual void flush(); - operator bool() { return true; } + explicit operator bool() { return true; } using Print::write; From 8693a23ff5ffa8247193dba4d1a05c8a0b694438 Mon Sep 17 00:00:00 2001 From: "Spence Konde (aka Dr. Azzy)" Date: Sun, 13 Oct 2019 03:34:36 -0400 Subject: [PATCH 14/65] Correct size output for const variables avr-size reports const variables in .rodata. recipe.size.regex did not check .rodata when totaling up flash usage. This would result in the reported size of the sketch not including variables that were declared const; it was possible to make a sketch that did not fit in the flash, but where this wasn't detected until it got to avrdude during the upload process, and avrdude dutifully reported that it was trying to write to addresses that were out of range. See the big discussion over here when I encountered this in megaTinyCore (and @MCUdude discovered that this happened on the official megaavr boards too) https://github.com/SpenceKonde/megaTinyCore/issues/95 --- platform.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform.txt b/platform.txt index f079040c..8cce6304 100644 --- a/platform.txt +++ b/platform.txt @@ -79,7 +79,7 @@ recipe.output.save_file={build.project_name}.{build.variant}.hex ## Compute size recipe.size.pattern="{compiler.path}{compiler.size.cmd}" -A "{build.path}/{build.project_name}.elf" -recipe.size.regex=^(?:\.text|\.data|\.bootloader)\s+([0-9]+).* +recipe.size.regex=^(?:\.text|\.data|\.rodata|\.bootloader)\s+([0-9]+).* recipe.size.regex.data=^(?:\.data|\.bss|\.noinit)\s+([0-9]+).* recipe.size.regex.eeprom=^(?:\.eeprom)\s+([0-9]+).* From 106ae6d76dd79d5185852fbc7f9022809b6f411e Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Fri, 4 Jan 2019 16:41:25 +0100 Subject: [PATCH 15/65] UART: use arduino namespace --- cores/arduino/UART.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cores/arduino/UART.h b/cores/arduino/UART.h index 6ecd9e6e..d623ae17 100644 --- a/cores/arduino/UART.h +++ b/cores/arduino/UART.h @@ -27,6 +27,8 @@ #include "api/HardwareSerial.h" #include "pins_arduino.h" +using namespace arduino; + // Define constants and variables for buffering incoming serial data. We're // using a ring buffer (I think), in which head is the index of the location // to which to write the next incoming character and tail is the index of the From a1affdfe2bcd8782efc1016ddf76f0c06ad6f263 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Fri, 4 Jan 2019 16:41:42 +0100 Subject: [PATCH 16/65] SPI: port to ArduinoAPI --- libraries/SPI/src/SPI.cpp | 6 ++---- libraries/SPI/src/SPI.h | 29 +++++++++++++++++++---------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/libraries/SPI/src/SPI.cpp b/libraries/SPI/src/SPI.cpp index 48a8a74c..d2c94f1c 100644 --- a/libraries/SPI/src/SPI.cpp +++ b/libraries/SPI/src/SPI.cpp @@ -24,8 +24,6 @@ #define SPI_IMODE_EXTINT 1 #define SPI_IMODE_GLOBAL 2 -const SPISettings DEFAULT_SPI_SETTINGS = SPISettings(); - SPIClass::SPIClass(uint8_t uc_pinMISO, uint8_t uc_pinSCK, uint8_t uc_pinMOSI, uint8_t uc_pinSS, uint8_t uc_mux) { initialized = false; @@ -66,7 +64,7 @@ void SPIClass::init() initialized = true; } -void SPIClass::config(SPISettings settings) +void SPIClass::config(SPISettingsMegaAVR settings) { SPI0.CTRLA = settings.ctrla; SPI0.CTRLB = settings.ctrlb; @@ -173,7 +171,7 @@ void SPIClass::reattachMaskedInterrupts() { } } -void SPIClass::beginTransaction(SPISettings settings) +void SPIClass::beginTransaction(SPISettingsMegaAVR settings) { if (interruptMode != SPI_IMODE_NONE) { diff --git a/libraries/SPI/src/SPI.h b/libraries/SPI/src/SPI.h index 18262c9d..5ca417de 100644 --- a/libraries/SPI/src/SPI.h +++ b/libraries/SPI/src/SPI.h @@ -52,9 +52,9 @@ #define EXTERNAL_NUM_INTERRUPTS NUM_TOTAL_PINS #endif -class SPISettings { +class SPISettingsMegaAVR : public arduino::SPISettings { public: - SPISettings(uint32_t clock, BitOrder bitOrder, uint8_t dataMode) { + SPISettingsMegaAVR(uint32_t clock, BitOrder bitOrder, uint8_t dataMode) { if (__builtin_constant_p(clock)) { init_AlwaysInline(clock, bitOrder, dataMode); } else { @@ -63,7 +63,9 @@ class SPISettings { } // Default speed set to 4MHz, SPI mode set to MODE 0 and Bit order set to MSB first. - SPISettings() { init_AlwaysInline(4000000, MSBFIRST, SPI_MODE0); } + SPISettingsMegaAVR() { init_AlwaysInline(4000000, MSBFIRST, SPI_MODE0); } + + SPISettingsMegaAVR(SPISettings& x) { SPISettingsMegaAVR(x.getClockFreq(), x.getBitOrder(), x.getDataMode()); } private: void init_MightInline(uint32_t clock, BitOrder bitOrder, uint8_t dataMode) { @@ -142,12 +144,12 @@ class SPISettings { /* member variables containing the desired SPI settings */ uint8_t ctrla; uint8_t ctrlb; - friend class SPIClass; + friend class SPIClassMegaAVR; }; -class SPIClass { +class SPIClassMegaAVR : public arduino::HardwareSPI { public: - SPIClass(uint8_t uc_pinMISO, uint8_t uc_pinSCK, uint8_t uc_pinMOSI, uint8_t uc_pinSS, uint8_t uc_mux); + SPIClassMegaAVR(uint8_t uc_pinMISO, uint8_t uc_pinSCK, uint8_t uc_pinMOSI, uint8_t uc_pinSS, uint8_t uc_mux); byte transfer(uint8_t data); uint16_t transfer16(uint16_t data); @@ -156,7 +158,10 @@ class SPIClass { // Transaction Functions void usingInterrupt(int interruptNumber); void notUsingInterrupt(int interruptNumber); - void beginTransaction(SPISettings settings); + void beginTransaction(SPISettingsMegaAVR settings); + void beginTransaction(SPISettings settings) { + beginTransaction(SPISettingsMegaAVR(settings)); + } void endTransaction(void); void begin(); @@ -169,13 +174,16 @@ class SPIClass { private: void init(); - void config(SPISettings settings); + void config(SPISettingsMegaAVR settings); + void config(SPISettings settings) { + config(SPISettingsMegaAVR(settings)); + } // These undocumented functions should not be used. SPI.transfer() // polls the hardware flag which is automatically cleared as the // AVR responds to SPI's interrupt - inline static void attachInterrupt() { SPI0.INTCTRL |= (SPI_IE_bm); } - inline static void detachInterrupt() { SPI0.INTCTRL &= ~(SPI_IE_bm); } + inline void attachInterrupt() { SPI0.INTCTRL |= (SPI_IE_bm); } + inline void detachInterrupt() { SPI0.INTCTRL &= ~(SPI_IE_bm); } void detachMaskedInterrupts(); void reattachMaskedInterrupts(); @@ -199,6 +207,7 @@ class SPIClass { #endif }; +#define SPIClass SPIClassMegaAVR #if SPI_INTERFACES_COUNT > 0 extern SPIClass SPI; From 04fbbd074c3b42537fd16be7b6ec617053730486 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Wed, 18 Sep 2019 14:35:09 +0200 Subject: [PATCH 17/65] Port attachInterruptParams --- .../{WInterrupts.c => WInterrupts.cpp} | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) rename cores/arduino/{WInterrupts.c => WInterrupts.cpp} (87%) diff --git a/cores/arduino/WInterrupts.c b/cores/arduino/WInterrupts.cpp similarity index 87% rename from cores/arduino/WInterrupts.c rename to cores/arduino/WInterrupts.cpp index 64cd9ae6..55155f4c 100644 --- a/cores/arduino/WInterrupts.c +++ b/cores/arduino/WInterrupts.cpp @@ -32,9 +32,10 @@ #include "wiring_private.h" -static volatile voidFuncPtr intFunc[EXTERNAL_NUM_INTERRUPTS]; +static volatile voidFuncPtrParam intFunc[EXTERNAL_NUM_INTERRUPTS]; +static void* args[EXTERNAL_NUM_INTERRUPTS]; -void attachInterrupt(uint8_t pin, void (*userFunc)(void), PinStatus mode) { +void attachInterruptParam(pin_size_t pin, void (*userFunc)(void*), PinStatus mode, void* params) { /* Get bit position and check pin validity */ uint8_t bit_pos = digitalPinToBitPosition(pin); @@ -46,24 +47,27 @@ void attachInterrupt(uint8_t pin, void (*userFunc)(void), PinStatus mode) { /* Check interrupt number and apply function pointer to correct array index */ if(interruptNum < EXTERNAL_NUM_INTERRUPTS) { intFunc[interruptNum] = userFunc; + args[interruptNum] = params; // Configure the interrupt mode (trigger on low input, any change, rising // edge, or falling edge). The mode constants were chosen to correspond // to the configuration bits in the hardware register, so we simply apply // the setting in the pin control register + int isc_mode; + switch (mode) { case CHANGE: - mode = PORT_ISC_BOTHEDGES_gc; + isc_mode = PORT_ISC_BOTHEDGES_gc; break; case FALLING: - mode = PORT_ISC_FALLING_gc; + isc_mode = PORT_ISC_FALLING_gc; break; case RISING: - mode = PORT_ISC_RISING_gc; + isc_mode = PORT_ISC_RISING_gc; break; case LOW: - mode = PORT_ISC_LEVEL_gc; + isc_mode = PORT_ISC_LEVEL_gc; break; default: // AVR doesn't support level triggered interrupts @@ -80,10 +84,14 @@ void attachInterrupt(uint8_t pin, void (*userFunc)(void), PinStatus mode) { *pin_ctrl_reg &= ~(PORT_ISC_gm); /* Apply ISC setting */ - *pin_ctrl_reg |= mode; + *pin_ctrl_reg |= isc_mode; } } +void attachInterrupt(uint8_t pin, void (*userFunc)(void), PinStatus mode) { + attachInterruptParam(pin, (voidFuncPtrParam)userFunc, mode, NULL); +} + void detachInterrupt(uint8_t pin) { /* Get bit position and check pin validity */ uint8_t bit_pos = digitalPinToBitPosition(pin); @@ -127,7 +135,7 @@ static void port_interrupt_handler(uint8_t port) { if(intFunc[interrupt_num] != 0){ /* Call function */ - intFunc[interrupt_num](); + intFunc[interrupt_num](args[interrupt_num]); } } bit_pos++; From 9a142212bc6b2b8c5ca3eb651c3710161c5cb170 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Wed, 18 Sep 2019 12:06:48 +0200 Subject: [PATCH 18/65] Move analog_pin_to_channel to main Arduino.h --- cores/arduino/Arduino.h | 8 ++++++++ cores/arduino/wiring_analog.c | 1 - variants/nona4809/pins_arduino.h | 1 - 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/cores/arduino/Arduino.h b/cores/arduino/Arduino.h index 1f02a58c..83017230 100644 --- a/cores/arduino/Arduino.h +++ b/cores/arduino/Arduino.h @@ -90,6 +90,7 @@ extern const uint8_t digital_pin_to_port[]; extern const uint8_t digital_pin_to_bit_mask[]; extern const uint8_t digital_pin_to_bit_position[]; extern const uint8_t digital_pin_to_timer[]; +extern const uint8_t analog_pin_to_channel[]; // Get the bit location within the hardware port of the given virtual pin. // This comes from the pins_*.c file for the active board configuration. @@ -155,5 +156,12 @@ bool isDoubleBondedActive(uint8_t pin); #endif +#ifdef __cplusplus +extern "C" { +#endif #include "pins_arduino.h" +#ifdef __cplusplus +} // extern "C" +#endif + #endif diff --git a/cores/arduino/wiring_analog.c b/cores/arduino/wiring_analog.c index c5a715b5..cda2b4da 100644 --- a/cores/arduino/wiring_analog.c +++ b/cores/arduino/wiring_analog.c @@ -23,7 +23,6 @@ */ #include "wiring_private.h" -#include "pins_arduino.h" #include "Arduino.h" uint8_t analog_reference = DEFAULT; diff --git a/variants/nona4809/pins_arduino.h b/variants/nona4809/pins_arduino.h index 39c3794f..589dc2ae 100644 --- a/variants/nona4809/pins_arduino.h +++ b/variants/nona4809/pins_arduino.h @@ -273,7 +273,6 @@ const uint8_t analog_pin_to_channel[] = { #endif -extern const uint8_t analog_pin_to_channel[]; #define digitalPinToAnalogInput(p) ((p < ANALOG_INPUT_OFFSET) ? analog_pin_to_channel[p] : analog_pin_to_channel[p - ANALOG_INPUT_OFFSET] ) // These serial port names are intended to allow libraries and architecture-neutral From bf8ddafecd73041af8d0cfdedc2214bbf16a66cc Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Wed, 18 Sep 2019 12:07:23 +0200 Subject: [PATCH 19/65] SPI: transactions are required for ArduinoCore-api compliance --- libraries/SPI/src/SPI.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/SPI/src/SPI.h b/libraries/SPI/src/SPI.h index 5ca417de..38fbfb1b 100644 --- a/libraries/SPI/src/SPI.h +++ b/libraries/SPI/src/SPI.h @@ -31,7 +31,7 @@ // - endTransaction() // - usingInterrupt() // - SPISetting(clock, bitOrder, dataMode) -#define SPI_HAS_TRANSACTION 1 +// #define SPI_HAS_TRANSACTION 1 // SPI_HAS_NOTUSINGINTERRUPT means that SPI has notUsingInterrupt() method #define SPI_HAS_NOTUSINGINTERRUPT 1 From c8a1dd996c783777ec46167cfd8ad3fd2e6df185 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Tue, 7 Apr 2020 11:06:01 +0200 Subject: [PATCH 20/65] Release 1.8.6 --- platform.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform.txt b/platform.txt index 8cce6304..db1b13b3 100644 --- a/platform.txt +++ b/platform.txt @@ -6,7 +6,7 @@ # https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5-3rd-party-Hardware-specification name=Arduino megaAVR Boards -version=1.8.5 +version=1.8.6 # AVR compile variables # --------------------- From b77447ff39196550b827af28f24522881c2c4fa5 Mon Sep 17 00:00:00 2001 From: Alejandro Solano <54044412+soranoalejandro@users.noreply.github.com> Date: Thu, 20 Aug 2020 14:10:28 -0400 Subject: [PATCH 21/65] Show correct compiler error message in UART0.cpp Cross checked with the files UART1 to UART3, only UART0 needs the fix. --- cores/arduino/UART0.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cores/arduino/UART0.cpp b/cores/arduino/UART0.cpp index b8f1f34c..522b6844 100644 --- a/cores/arduino/UART0.cpp +++ b/cores/arduino/UART0.cpp @@ -51,7 +51,7 @@ ISR(HWSERIAL0_DRE_VECTOR) Serial._tx_data_empty_irq(); } #else -#error "Don't know what the Data Received interrupt vector is called for Serial" +#error "Don't know what the Data Register Empty interrupt vector is called for Serial" #endif #if defined(HWSERIAL0) From 7e4c4236088888af58781622280bcce48e749050 Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Tue, 19 May 2020 14:14:06 +0200 Subject: [PATCH 22/65] Add workflow for CI --- .github/workflows/compile-examples.yml | 67 ++++++++++++++++++++++++ .github/workflows/report-size-deltas.yml | 13 +++++ 2 files changed, 80 insertions(+) create mode 100644 .github/workflows/compile-examples.yml create mode 100644 .github/workflows/report-size-deltas.yml diff --git a/.github/workflows/compile-examples.yml b/.github/workflows/compile-examples.yml new file mode 100644 index 00000000..48b8eeb1 --- /dev/null +++ b/.github/workflows/compile-examples.yml @@ -0,0 +1,67 @@ +name: Compile Examples + +on: [pull_request, push] + +jobs: + compile-test: + runs-on: ubuntu-latest + + strategy: + matrix: + fqbn: [ + "arduino:megaavr:uno2018" #, + #"arduino:megaavr:nona4809" + ] + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + # The source files are in a subfolder of the ArduinoCore-API repository, so it's not possible to clone it directly to the final destination in the core + - name: Checkout ArduinoCore-API + uses: actions/checkout@v2 + with: + repository: arduino/ArduinoCore-API + path: extras/ArduinoCore-API + + - name: Install ArduinoCore-API + run: mv "$GITHUB_WORKSPACE/extras/ArduinoCore-API/api" "$GITHUB_WORKSPACE/cores/arduino" + + - name: Checkout Adafruit WiFiNINA + uses: actions/checkout@v2 + with: + repository: adafruit/WiFiNINA + path: libraries/WiFiNINA + + - name: Compile examples + uses: arduino/actions/libraries/compile-examples@master + with: + fqbn: ${{ matrix.fqbn }} + libraries: | + - name: Adafruit IO Arduino + version: 3.6.0 + - name: Adafruit MQTT Library + version: 1.0.3 + - name: ArduinoHttpClient + version: 0.4.0 + # Don't use library manager WiFiNINA + # - name: WiFiNINA + # version: 1.4.0 + - name: MegunoLink + platforms: | + # Use Board Manager to install the latest release of Arduino megaAVR Boards to get the toolchain + - name: "arduino:megaavr" + # Overwrite the Board Manager installation with the local platform + - source-path: "./" + name: "arduino:megaavr" + sketch-paths: "extras/AIO_LED_Pot" + size-report-sketch: 'AIO_LED_Pot' + enable-size-deltas-report: 'true' + verbose: 'true' + + - name: Save memory usage change report as artifact + if: github.event_name == 'pull_request' + uses: actions/upload-artifact@v1 + with: + name: 'size-deltas-reports' + path: 'size-deltas-reports' \ No newline at end of file diff --git a/.github/workflows/report-size-deltas.yml b/.github/workflows/report-size-deltas.yml new file mode 100644 index 00000000..a359b257 --- /dev/null +++ b/.github/workflows/report-size-deltas.yml @@ -0,0 +1,13 @@ +name: Report PR Size Deltas + +on: + schedule: + - cron: '*/5 * * * *' + +jobs: + report: + runs-on: ubuntu-latest + + steps: + - name: Comment size deltas reports to PRs + uses: arduino/actions/libraries/report-size-deltas@master \ No newline at end of file From 48cdeda1fa431fffd9ebd6d8b792e74f4566e4c0 Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Tue, 19 May 2020 16:37:08 +0200 Subject: [PATCH 23/65] FONAtest search path --- .github/workflows/compile-examples.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/compile-examples.yml b/.github/workflows/compile-examples.yml index 48b8eeb1..8834fbf4 100644 --- a/.github/workflows/compile-examples.yml +++ b/.github/workflows/compile-examples.yml @@ -34,7 +34,7 @@ jobs: path: libraries/WiFiNINA - name: Compile examples - uses: arduino/actions/libraries/compile-examples@master + uses: per1234/actions/libraries/compile-examples@9acb47abcea28afced4d549585b347668eb03eac with: fqbn: ${{ matrix.fqbn }} libraries: | @@ -44,6 +44,8 @@ jobs: version: 1.0.3 - name: ArduinoHttpClient version: 0.4.0 + - name: Adafruit FONA Library + version: 1.3.6 # Don't use library manager WiFiNINA # - name: WiFiNINA # version: 1.4.0 @@ -54,8 +56,8 @@ jobs: # Overwrite the Board Manager installation with the local platform - source-path: "./" name: "arduino:megaavr" - sketch-paths: "extras/AIO_LED_Pot" - size-report-sketch: 'AIO_LED_Pot' + sketch-paths: "/github/home/Arduino/libraries/Adafruit_FONA_Library/examples/FONAtest" + size-report-sketch: 'FONAtest' enable-size-deltas-report: 'true' verbose: 'true' From b2ea934795244172b693e9294af0f8905347a08d Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Mon, 7 Sep 2020 10:48:37 +0200 Subject: [PATCH 24/65] Install latest version of libraries --- .github/workflows/compile-examples.yml | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/.github/workflows/compile-examples.yml b/.github/workflows/compile-examples.yml index 8834fbf4..ddebaa24 100644 --- a/.github/workflows/compile-examples.yml +++ b/.github/workflows/compile-examples.yml @@ -34,21 +34,14 @@ jobs: path: libraries/WiFiNINA - name: Compile examples - uses: per1234/actions/libraries/compile-examples@9acb47abcea28afced4d549585b347668eb03eac + uses: arduino/actions/libraries/compile-examples@master with: fqbn: ${{ matrix.fqbn }} libraries: | - name: Adafruit IO Arduino - version: 3.6.0 - name: Adafruit MQTT Library - version: 1.0.3 - name: ArduinoHttpClient - version: 0.4.0 - name: Adafruit FONA Library - version: 1.3.6 - # Don't use library manager WiFiNINA - # - name: WiFiNINA - # version: 1.4.0 - name: MegunoLink platforms: | # Use Board Manager to install the latest release of Arduino megaAVR Boards to get the toolchain From c654b79e0f18304e151fcac3d7b6e6f0be59a4f6 Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Mon, 7 Sep 2020 10:55:39 +0200 Subject: [PATCH 25/65] Remove 'size-report-sketch' entry and 'Save memory usage change report as artifact' step --- .github/workflows/compile-examples.yml | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/.github/workflows/compile-examples.yml b/.github/workflows/compile-examples.yml index ddebaa24..c64384aa 100644 --- a/.github/workflows/compile-examples.yml +++ b/.github/workflows/compile-examples.yml @@ -50,13 +50,5 @@ jobs: - source-path: "./" name: "arduino:megaavr" sketch-paths: "/github/home/Arduino/libraries/Adafruit_FONA_Library/examples/FONAtest" - size-report-sketch: 'FONAtest' enable-size-deltas-report: 'true' - verbose: 'true' - - - name: Save memory usage change report as artifact - if: github.event_name == 'pull_request' - uses: actions/upload-artifact@v1 - with: - name: 'size-deltas-reports' - path: 'size-deltas-reports' \ No newline at end of file + verbose: 'true' \ No newline at end of file From 9497c8c714f6598d29b4ae7871645d795c60dc78 Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Mon, 7 Sep 2020 12:32:39 +0200 Subject: [PATCH 26/65] Add board target Arduino Nano Every --- .github/workflows/compile-examples.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/compile-examples.yml b/.github/workflows/compile-examples.yml index c64384aa..43a3fc7b 100644 --- a/.github/workflows/compile-examples.yml +++ b/.github/workflows/compile-examples.yml @@ -9,8 +9,8 @@ jobs: strategy: matrix: fqbn: [ - "arduino:megaavr:uno2018" #, - #"arduino:megaavr:nona4809" + "arduino:megaavr:uno2018", + "arduino:megaavr:nona4809" ] steps: From cfd3a8d199d63651c736b7182cd5ffb8cbdf4e34 Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Mon, 7 Sep 2020 14:38:41 +0200 Subject: [PATCH 27/65] Add step to download basic examples + add UNIVERSAL paths --- .github/workflows/compile-examples.yml | 39 +++++++++++++++++++++----- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/.github/workflows/compile-examples.yml b/.github/workflows/compile-examples.yml index 43a3fc7b..d2dfbe7c 100644 --- a/.github/workflows/compile-examples.yml +++ b/.github/workflows/compile-examples.yml @@ -6,13 +6,32 @@ jobs: compile-test: runs-on: ubuntu-latest + env: + # libraries to install for all boards + UNIVERSAL_LIBRARIES: "MFRC522" + # sketch paths to compile (recursive) for all boards + UNIVERSAL_SKETCH_PATHS: '"extras/examples" "libraries/Wire" "libraries/SPI" "libraries/SoftwareSerial" "libraries/EEPROM"' + strategy: + fail-fast: false + matrix: - fqbn: [ - "arduino:megaavr:uno2018", - "arduino:megaavr:nona4809" + board: [ + {"fqbn": "arduino:megaavr:uno2018", "type": "unoWiFiRev2"}, + {"fqbn": "arduino:megaavr:nona4809", "type": "nanoEvery"} ] + # make board type-specific customizations to the matrix jobs + include: + # Uno WiFi Rev2 + - board: + type: "unoWiFiRev2" + additional-sketch-paths: "/github/home/Arduino/libraries/Adafruit_FONA_Library/examples/FONAtest" + # Nano Every + - board: + type: "nanoEvery" + additional-sketch-paths: "/github/home/Arduino/libraries/Adafruit_FONA_Library/examples/FONAtest" + steps: - name: Checkout repository uses: actions/checkout@v2 @@ -31,12 +50,18 @@ jobs: uses: actions/checkout@v2 with: repository: adafruit/WiFiNINA - path: libraries/WiFiNINA + path: adafruit/WiFiNINA + + - name: Checkout Basic examples + uses: actions/checkout@v2 + with: + repository: arduino/arduino-examples + path: extras/examples - name: Compile examples uses: arduino/actions/libraries/compile-examples@master with: - fqbn: ${{ matrix.fqbn }} + fqbn: ${{ matrix.board.fqbn }} libraries: | - name: Adafruit IO Arduino - name: Adafruit MQTT Library @@ -49,6 +74,6 @@ jobs: # Overwrite the Board Manager installation with the local platform - source-path: "./" name: "arduino:megaavr" - sketch-paths: "/github/home/Arduino/libraries/Adafruit_FONA_Library/examples/FONAtest" - enable-size-deltas-report: 'true' + sketch-paths: "${{ env.UNIVERSAL_SKETCH_PATHS }} ${{ matrix.additional-sketch-paths }}" + enable-size-deltas-report: 'false' verbose: 'true' \ No newline at end of file From ce359add3492034f91831e451ee6a898628f6920 Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Mon, 7 Sep 2020 16:30:03 +0200 Subject: [PATCH 28/65] Add step to remove incompatible basic examples --- .github/workflows/compile-examples.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/compile-examples.yml b/.github/workflows/compile-examples.yml index d2dfbe7c..be60076d 100644 --- a/.github/workflows/compile-examples.yml +++ b/.github/workflows/compile-examples.yml @@ -8,7 +8,7 @@ jobs: env: # libraries to install for all boards - UNIVERSAL_LIBRARIES: "MFRC522" + UNIVERSAL_LIBRARIES: '"MFRC522" "Servo"' # sketch paths to compile (recursive) for all boards UNIVERSAL_SKETCH_PATHS: '"extras/examples" "libraries/Wire" "libraries/SPI" "libraries/SoftwareSerial" "libraries/EEPROM"' @@ -56,7 +56,10 @@ jobs: uses: actions/checkout@v2 with: repository: arduino/arduino-examples - path: extras/examples + path: extras + + - name: Delete incompatible examples + run: rm -r "$GITHUB_WORKSPACE/extras/examples/09.USB" && rm -r "$GITHUB_WORKSPACE/extras/examples/10.StarterKit_BasicKit/p11_CrystalBall" && rm -r "$GITHUB_WORKSPACE/extras/examples/10.StarterKit_BasicKit/p13_TouchSensorLamp" - name: Compile examples uses: arduino/actions/libraries/compile-examples@master @@ -68,6 +71,7 @@ jobs: - name: ArduinoHttpClient - name: Adafruit FONA Library - name: MegunoLink + - name: Servo platforms: | # Use Board Manager to install the latest release of Arduino megaAVR Boards to get the toolchain - name: "arduino:megaavr" From d68d9677de1a0a37891173a9cf765a78d7800174 Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Mon, 7 Sep 2020 17:11:10 +0200 Subject: [PATCH 29/65] Add most used libraries + examples --- .github/workflows/compile-examples.yml | 30 ++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/.github/workflows/compile-examples.yml b/.github/workflows/compile-examples.yml index be60076d..2869a68c 100644 --- a/.github/workflows/compile-examples.yml +++ b/.github/workflows/compile-examples.yml @@ -8,9 +8,9 @@ jobs: env: # libraries to install for all boards - UNIVERSAL_LIBRARIES: '"MFRC522" "Servo"' + UNIVERSAL_LIBRARIES: '"MFRC522" "Servo" "LiquidCrystal"' # sketch paths to compile (recursive) for all boards - UNIVERSAL_SKETCH_PATHS: '"extras/examples" "libraries/Wire" "libraries/SPI" "libraries/SoftwareSerial" "libraries/EEPROM"' + UNIVERSAL_SKETCH_PATHS: '"extras/examples" "libraries/Wire" "libraries/SPI" "libraries/SoftwareSerial" "libraries/EEPROM" "~/Arduino/libraries/Servo/examples" "~/Arduino/libraries/LiquidCrystal/examples" "~/Arduino/libraries/MFRC522/examples" "~/Arduino/libraries/Ethernet/examples" "~/Arduino/libraries/Arduino_LSM9DS1/examples" "~/Arduino/libraries/SD/examples" "~/Arduino/libraries/Arduino_JSON/examples" "~/Arduino/libraries/WiFi/examples"' strategy: fail-fast: false @@ -72,6 +72,32 @@ jobs: - name: Adafruit FONA Library - name: MegunoLink - name: Servo + - name: LiquidCrystal + - name: MFRC522 + - name: Ethernet + - name: ArduinoBearSSL + - name: Arduino_LSM9DS1 + - name: ArduinoHttpClient + - name: NTPClient + - name: TFT + - name: ArduinoMqttClient + - name: Arduino_CRC32 + - name: Arduino_LSM6DS3 + - name: Stepper + - name: SD + - name: Arduino_JSON + - name: Arduino_HTS221 + - name: Firmata + - name: ArduinoCloudThing + - name: Arduino_DebugUtils + - name: Arduino_LPS22HB + - name: ArduinoIoTCloudBearSSL + - name: ArduinoDMX + - name: ArduinoRS485 + - name: Arduino_OAuth + - name: WiFi + - name: Bridge + - name: Temboo platforms: | # Use Board Manager to install the latest release of Arduino megaAVR Boards to get the toolchain - name: "arduino:megaavr" From 95445d2f464b23cced629b844a407d65aa1956ed Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Mon, 7 Sep 2020 17:35:54 +0200 Subject: [PATCH 30/65] Add step to save memory usage change --- .github/workflows/compile-examples.yml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/workflows/compile-examples.yml b/.github/workflows/compile-examples.yml index 2869a68c..8b6397c9 100644 --- a/.github/workflows/compile-examples.yml +++ b/.github/workflows/compile-examples.yml @@ -105,5 +105,12 @@ jobs: - source-path: "./" name: "arduino:megaavr" sketch-paths: "${{ env.UNIVERSAL_SKETCH_PATHS }} ${{ matrix.additional-sketch-paths }}" - enable-size-deltas-report: 'false' - verbose: 'true' \ No newline at end of file + enable-size-deltas-report: 'true' + verbose: 'true' + + - name: Save memory usage change report as artifact + if: github.event_name == 'pull_request' + uses: actions/upload-artifact@v1 + with: + name: 'size-deltas-reports' + path: 'size-deltas-reports' \ No newline at end of file From 9f728df052490c1a4a5e279013631d6d3639bb2e Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Mon, 7 Sep 2020 17:50:43 +0200 Subject: [PATCH 31/65] Remove board type specific customization --- .github/workflows/compile-examples.yml | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/.github/workflows/compile-examples.yml b/.github/workflows/compile-examples.yml index 8b6397c9..a5daf3cf 100644 --- a/.github/workflows/compile-examples.yml +++ b/.github/workflows/compile-examples.yml @@ -21,17 +21,6 @@ jobs: {"fqbn": "arduino:megaavr:nona4809", "type": "nanoEvery"} ] - # make board type-specific customizations to the matrix jobs - include: - # Uno WiFi Rev2 - - board: - type: "unoWiFiRev2" - additional-sketch-paths: "/github/home/Arduino/libraries/Adafruit_FONA_Library/examples/FONAtest" - # Nano Every - - board: - type: "nanoEvery" - additional-sketch-paths: "/github/home/Arduino/libraries/Adafruit_FONA_Library/examples/FONAtest" - steps: - name: Checkout repository uses: actions/checkout@v2 @@ -104,7 +93,7 @@ jobs: # Overwrite the Board Manager installation with the local platform - source-path: "./" name: "arduino:megaavr" - sketch-paths: "${{ env.UNIVERSAL_SKETCH_PATHS }} ${{ matrix.additional-sketch-paths }}" + sketch-paths: "${{ env.UNIVERSAL_SKETCH_PATHS }}" enable-size-deltas-report: 'true' verbose: 'true' From 39e1395ee1f9dd8e3d601f8d1dc5798d3e31aa45 Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Mon, 7 Sep 2020 18:04:52 +0200 Subject: [PATCH 32/65] Remove condition to execute report artifact only with a PR --- .github/workflows/compile-examples.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/compile-examples.yml b/.github/workflows/compile-examples.yml index a5daf3cf..7e0e2aeb 100644 --- a/.github/workflows/compile-examples.yml +++ b/.github/workflows/compile-examples.yml @@ -98,8 +98,7 @@ jobs: verbose: 'true' - name: Save memory usage change report as artifact - if: github.event_name == 'pull_request' uses: actions/upload-artifact@v1 with: - name: 'size-deltas-reports' - path: 'size-deltas-reports' \ No newline at end of file + name: size-deltas-reports + path: size-deltas-reports \ No newline at end of file From fb15914ef43ad38ebded59a3e2ed9d442af20caf Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Mon, 7 Sep 2020 18:40:37 +0200 Subject: [PATCH 33/65] Use list format also for sketch paths --- .github/workflows/compile-examples.yml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/.github/workflows/compile-examples.yml b/.github/workflows/compile-examples.yml index 7e0e2aeb..9afdba95 100644 --- a/.github/workflows/compile-examples.yml +++ b/.github/workflows/compile-examples.yml @@ -10,7 +10,20 @@ jobs: # libraries to install for all boards UNIVERSAL_LIBRARIES: '"MFRC522" "Servo" "LiquidCrystal"' # sketch paths to compile (recursive) for all boards - UNIVERSAL_SKETCH_PATHS: '"extras/examples" "libraries/Wire" "libraries/SPI" "libraries/SoftwareSerial" "libraries/EEPROM" "~/Arduino/libraries/Servo/examples" "~/Arduino/libraries/LiquidCrystal/examples" "~/Arduino/libraries/MFRC522/examples" "~/Arduino/libraries/Ethernet/examples" "~/Arduino/libraries/Arduino_LSM9DS1/examples" "~/Arduino/libraries/SD/examples" "~/Arduino/libraries/Arduino_JSON/examples" "~/Arduino/libraries/WiFi/examples"' + UNIVERSAL_SKETCH_PATHS: | + - extras/examples + - libraries/Wire + - libraries/SPI + - libraries/SoftwareSerial + - libraries/EEPROM + - ~/Arduino/libraries/Servo/examples + - ~/Arduino/libraries/LiquidCrystal/examples + - ~/Arduino/libraries/MFRC522/examples + - ~/Arduino/libraries/Ethernet/examples + - ~/Arduino/libraries/Arduino_LSM9DS1/examples + - ~/Arduino/libraries/SD/examples + - ~/Arduino/libraries/Arduino_JSON/examples + - ~/Arduino/libraries/WiFi/examples strategy: fail-fast: false From 72cd7c03b08991d28520ae57e5b16993938c4e33 Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Tue, 8 Sep 2020 15:51:09 +0200 Subject: [PATCH 34/65] Run workflow only after modification of the workflow or of a file relevant to sketch compilation --- .github/workflows/compile-examples.yml | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/.github/workflows/compile-examples.yml b/.github/workflows/compile-examples.yml index 9afdba95..4804a367 100644 --- a/.github/workflows/compile-examples.yml +++ b/.github/workflows/compile-examples.yml @@ -1,6 +1,22 @@ name: Compile Examples -on: [pull_request, push] +on: + pull_request: + paths: + - ".github/workflows/compile-examples.yml" + - "cores/**" + - "libraries/**" + - "variants/**" + - "boards.txt" + - "platform.txt" + push: + paths: + - ".github/workflows/compile-examples.yml" + - "cores/**" + - "libraries/**" + - "variants/**" + - "boards.txt" + - "platform.txt" jobs: compile-test: From 945db3733dfd23aa07c6a4ac45163aab88bd7ab9 Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Tue, 8 Sep 2020 15:57:58 +0200 Subject: [PATCH 35/65] Remove not necessary libraries and variables --- .github/workflows/compile-examples.yml | 23 +++++------------------ 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/.github/workflows/compile-examples.yml b/.github/workflows/compile-examples.yml index 4804a367..124d09bd 100644 --- a/.github/workflows/compile-examples.yml +++ b/.github/workflows/compile-examples.yml @@ -23,8 +23,6 @@ jobs: runs-on: ubuntu-latest env: - # libraries to install for all boards - UNIVERSAL_LIBRARIES: '"MFRC522" "Servo" "LiquidCrystal"' # sketch paths to compile (recursive) for all boards UNIVERSAL_SKETCH_PATHS: | - extras/examples @@ -39,16 +37,15 @@ jobs: - ~/Arduino/libraries/Arduino_LSM9DS1/examples - ~/Arduino/libraries/SD/examples - ~/Arduino/libraries/Arduino_JSON/examples - - ~/Arduino/libraries/WiFi/examples strategy: fail-fast: false matrix: - board: [ - {"fqbn": "arduino:megaavr:uno2018", "type": "unoWiFiRev2"}, - {"fqbn": "arduino:megaavr:nona4809", "type": "nanoEvery"} - ] + fqbn: + - "arduino:megaavr:uno2018:mode=on" + - "arduino:megaavr:uno2018:mode=off" + - "arduino:megaavr:nona4809" steps: - name: Checkout repository @@ -64,12 +61,6 @@ jobs: - name: Install ArduinoCore-API run: mv "$GITHUB_WORKSPACE/extras/ArduinoCore-API/api" "$GITHUB_WORKSPACE/cores/arduino" - - name: Checkout Adafruit WiFiNINA - uses: actions/checkout@v2 - with: - repository: adafruit/WiFiNINA - path: adafruit/WiFiNINA - - name: Checkout Basic examples uses: actions/checkout@v2 with: @@ -82,7 +73,7 @@ jobs: - name: Compile examples uses: arduino/actions/libraries/compile-examples@master with: - fqbn: ${{ matrix.board.fqbn }} + fqbn: ${{ matrix.fqbn }} libraries: | - name: Adafruit IO Arduino - name: Adafruit MQTT Library @@ -106,16 +97,12 @@ jobs: - name: Arduino_JSON - name: Arduino_HTS221 - name: Firmata - - name: ArduinoCloudThing - name: Arduino_DebugUtils - name: Arduino_LPS22HB - name: ArduinoIoTCloudBearSSL - name: ArduinoDMX - name: ArduinoRS485 - name: Arduino_OAuth - - name: WiFi - - name: Bridge - - name: Temboo platforms: | # Use Board Manager to install the latest release of Arduino megaAVR Boards to get the toolchain - name: "arduino:megaavr" From 964531afc80e7f1feefbb7ffd596bfa7be06c123 Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Tue, 8 Sep 2020 16:52:14 +0200 Subject: [PATCH 36/65] Split remove commands + add comments --- .github/workflows/compile-examples.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/compile-examples.yml b/.github/workflows/compile-examples.yml index 124d09bd..360a6f23 100644 --- a/.github/workflows/compile-examples.yml +++ b/.github/workflows/compile-examples.yml @@ -68,7 +68,13 @@ jobs: path: extras - name: Delete incompatible examples - run: rm -r "$GITHUB_WORKSPACE/extras/examples/09.USB" && rm -r "$GITHUB_WORKSPACE/extras/examples/10.StarterKit_BasicKit/p11_CrystalBall" && rm -r "$GITHUB_WORKSPACE/extras/examples/10.StarterKit_BasicKit/p13_TouchSensorLamp" + run: | + # These boards do not support native USB + rm -r "$GITHUB_WORKSPACE/extras/examples/09.USB" + # The next command can be removed after the core integration with ArduinoCore-API + rm -r "$GITHUB_WORKSPACE/extras/examples/10.StarterKit_BasicKit/p11_CrystalBall" + # CapacitiveSensor library does not support megaAVR core yet + rm -r "$GITHUB_WORKSPACE/extras/examples/10.StarterKit_BasicKit/p13_TouchSensorLamp" - name: Compile examples uses: arduino/actions/libraries/compile-examples@master From c9587a2879ee62ac5b958a50ae563f0c0d6eaee2 Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Tue, 8 Sep 2020 18:52:58 +0200 Subject: [PATCH 37/65] Compile WiFiNINA library --- .github/workflows/compile-examples.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/compile-examples.yml b/.github/workflows/compile-examples.yml index 360a6f23..a02a8f0e 100644 --- a/.github/workflows/compile-examples.yml +++ b/.github/workflows/compile-examples.yml @@ -109,6 +109,7 @@ jobs: - name: ArduinoDMX - name: ArduinoRS485 - name: Arduino_OAuth + - name: WiFiNINA platforms: | # Use Board Manager to install the latest release of Arduino megaAVR Boards to get the toolchain - name: "arduino:megaavr" From a18eccc7b4e1d7c4f21bbf5b277fe2ce9bf12280 Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Thu, 10 Sep 2020 10:25:54 +0200 Subject: [PATCH 38/65] Reinsert types to compile WiFiNINA examples only for Uno WiFi Rev2 --- .github/workflows/compile-examples.yml | 31 ++++++++++++++++++-------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/.github/workflows/compile-examples.yml b/.github/workflows/compile-examples.yml index a02a8f0e..e1025769 100644 --- a/.github/workflows/compile-examples.yml +++ b/.github/workflows/compile-examples.yml @@ -37,15 +37,27 @@ jobs: - ~/Arduino/libraries/Arduino_LSM9DS1/examples - ~/Arduino/libraries/SD/examples - ~/Arduino/libraries/Arduino_JSON/examples - strategy: fail-fast: false matrix: - fqbn: - - "arduino:megaavr:uno2018:mode=on" - - "arduino:megaavr:uno2018:mode=off" - - "arduino:megaavr:nona4809" + board: [ + {"fqbn": "arduino:megaavr:uno2018:mode=on", "type": "UnoWiFiRev2"}, + {"fqbn": "arduino:megaavr:uno2018:mode=off", "type": "UnoWiFiRev2"}, + {"fqbn": "arduino:megaavr:nona4809", "type": "NanoEvery"} + ] + + # make board type-specific customizations to the matrix jobs + include: + # Uno WiFi Rev2 + - board: + type: "UnoWiFiRev2" + additional-sketch-paths: | + - ~/Arduino/libraries/WiFiNINA/examples + # Nano Every + - board: + type: "NanoEvery" + additional-sketch-paths: '' steps: - name: Checkout repository @@ -75,11 +87,10 @@ jobs: rm -r "$GITHUB_WORKSPACE/extras/examples/10.StarterKit_BasicKit/p11_CrystalBall" # CapacitiveSensor library does not support megaAVR core yet rm -r "$GITHUB_WORKSPACE/extras/examples/10.StarterKit_BasicKit/p13_TouchSensorLamp" - - name: Compile examples uses: arduino/actions/libraries/compile-examples@master with: - fqbn: ${{ matrix.fqbn }} + fqbn: ${{ matrix.board.fqbn }} libraries: | - name: Adafruit IO Arduino - name: Adafruit MQTT Library @@ -116,8 +127,10 @@ jobs: # Overwrite the Board Manager installation with the local platform - source-path: "./" name: "arduino:megaavr" - sketch-paths: "${{ env.UNIVERSAL_SKETCH_PATHS }}" - enable-size-deltas-report: 'true' + sketch-paths: | + ${{ env.UNIVERSAL_SKETCH_PATHS }} + ${{ matrix.additional-sketch-paths }} + enable-deltas-report: 'true' verbose: 'true' - name: Save memory usage change report as artifact From 283703a10b17039bb33ddf63e98bd024986659e4 Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Thu, 10 Sep 2020 11:34:35 +0200 Subject: [PATCH 39/65] Try to compile all the libraries examples --- .github/workflows/compile-examples.yml | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/.github/workflows/compile-examples.yml b/.github/workflows/compile-examples.yml index e1025769..16678164 100644 --- a/.github/workflows/compile-examples.yml +++ b/.github/workflows/compile-examples.yml @@ -37,6 +37,24 @@ jobs: - ~/Arduino/libraries/Arduino_LSM9DS1/examples - ~/Arduino/libraries/SD/examples - ~/Arduino/libraries/Arduino_JSON/examples + - ~/Arduino/libraries/Adafruit_IO_Arduino/examples + - ~/Arduino/libraries/Adafruit_MQTT_Library/examples + - ~/Arduino/libraries/ArduinoHttpClient/examples + - ~/Arduino/libraries/ArduinoBearSSL/examples + - ~/Arduino/libraries/NTPClient/examples + - ~/Arduino/libraries/TFT/examples + - ~/Arduino/libraries/ArduinoMqttClient/examples + - ~/Arduino/libraries/Arduino_CRC32/examples + - ~/Arduino/libraries/Arduino_LSM6DS3/examples + - ~/Arduino/libraries/Stepper/examples + - ~/Arduino/libraries/Arduino_HTS221/examples + - ~/Arduino/libraries/Firmata/examples + - ~/Arduino/libraries/Arduino_DebugUtils/examples + - ~/Arduino/libraries/Arduino_LPS22HB/examples + - ~/Arduino/libraries/ArduinoDMX/examples + - ~/Arduino/libraries/ArduinoRS485/examples + - ~/Arduino/libraries/Arduino_OAuth/examples + strategy: fail-fast: false @@ -95,15 +113,12 @@ jobs: - name: Adafruit IO Arduino - name: Adafruit MQTT Library - name: ArduinoHttpClient - - name: Adafruit FONA Library - - name: MegunoLink - name: Servo - name: LiquidCrystal - name: MFRC522 - name: Ethernet - name: ArduinoBearSSL - name: Arduino_LSM9DS1 - - name: ArduinoHttpClient - name: NTPClient - name: TFT - name: ArduinoMqttClient @@ -116,7 +131,6 @@ jobs: - name: Firmata - name: Arduino_DebugUtils - name: Arduino_LPS22HB - - name: ArduinoIoTCloudBearSSL - name: ArduinoDMX - name: ArduinoRS485 - name: Arduino_OAuth From 0eb5c645c412f97b9e6a1e692983e396a585fa54 Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Thu, 10 Sep 2020 12:11:41 +0200 Subject: [PATCH 40/65] Remove incompatible examples --- .github/workflows/compile-examples.yml | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/.github/workflows/compile-examples.yml b/.github/workflows/compile-examples.yml index 16678164..313c270e 100644 --- a/.github/workflows/compile-examples.yml +++ b/.github/workflows/compile-examples.yml @@ -34,26 +34,26 @@ jobs: - ~/Arduino/libraries/LiquidCrystal/examples - ~/Arduino/libraries/MFRC522/examples - ~/Arduino/libraries/Ethernet/examples + - ~/Arduino/libraries/Adafruit_MQTT_Library/examples/mqtt_ethernet + - ~/Arduino/libraries/ArduinoBearSSL/examples/SHA1 + - ~/Arduino/libraries/ArduinoBearSSL/examples/SHA256 - ~/Arduino/libraries/Arduino_LSM9DS1/examples - ~/Arduino/libraries/SD/examples - ~/Arduino/libraries/Arduino_JSON/examples - - ~/Arduino/libraries/Adafruit_IO_Arduino/examples - - ~/Arduino/libraries/Adafruit_MQTT_Library/examples - - ~/Arduino/libraries/ArduinoHttpClient/examples - - ~/Arduino/libraries/ArduinoBearSSL/examples - - ~/Arduino/libraries/NTPClient/examples - - ~/Arduino/libraries/TFT/examples - - ~/Arduino/libraries/ArduinoMqttClient/examples + - ~/Arduino/libraries/TFT/examples/Arduino/TFTBitmapLogo + - ~/Arduino/libraries/TFT/examples/Arduino/TFTColorPicker + - ~/Arduino/libraries/TFT/examples/Arduino/TFTDisplayText + - ~/Arduino/libraries/TFT/examples/Arduino/TFTEtchASketch + - ~/Arduino/libraries/TFT/examples/Arduino/TFTGraph + - ~/Arduino/libraries/TFT/examples/Arduino/TFTPong - ~/Arduino/libraries/Arduino_CRC32/examples - ~/Arduino/libraries/Arduino_LSM6DS3/examples - ~/Arduino/libraries/Stepper/examples - ~/Arduino/libraries/Arduino_HTS221/examples - - ~/Arduino/libraries/Firmata/examples - ~/Arduino/libraries/Arduino_DebugUtils/examples - ~/Arduino/libraries/Arduino_LPS22HB/examples - ~/Arduino/libraries/ArduinoDMX/examples - ~/Arduino/libraries/ArduinoRS485/examples - - ~/Arduino/libraries/Arduino_OAuth/examples strategy: fail-fast: false @@ -72,10 +72,12 @@ jobs: type: "UnoWiFiRev2" additional-sketch-paths: | - ~/Arduino/libraries/WiFiNINA/examples + - ~/Arduino/libraries/ArduinoMqttClient/examples + - ~/Arduino/libraries/Arduino_OAuth/examples/Tweeter # Nano Every - board: type: "NanoEvery" - additional-sketch-paths: '' + additional-sketch-paths: steps: - name: Checkout repository @@ -110,16 +112,13 @@ jobs: with: fqbn: ${{ matrix.board.fqbn }} libraries: | - - name: Adafruit IO Arduino - name: Adafruit MQTT Library - - name: ArduinoHttpClient - name: Servo - name: LiquidCrystal - name: MFRC522 - name: Ethernet - name: ArduinoBearSSL - name: Arduino_LSM9DS1 - - name: NTPClient - name: TFT - name: ArduinoMqttClient - name: Arduino_CRC32 @@ -128,7 +127,6 @@ jobs: - name: SD - name: Arduino_JSON - name: Arduino_HTS221 - - name: Firmata - name: Arduino_DebugUtils - name: Arduino_LPS22HB - name: ArduinoDMX From 5e7f0558ba5513f373c31858076ab33ec504d52f Mon Sep 17 00:00:00 2001 From: per1234 Date: Mon, 2 Nov 2020 06:54:31 -0800 Subject: [PATCH 41/65] Update platform specification URLs in configuration files The Google Code URL in boards.txt is very outdated. The URL in platform.txt is to a more recent home of the content, which has been replaced with a link to the new location, but while I'm updating boards.txt, I might as well point both URLs to the real page. --- boards.txt | 2 +- platform.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/boards.txt b/boards.txt index 71a803cc..4652ff1a 100644 --- a/boards.txt +++ b/boards.txt @@ -1,4 +1,4 @@ -# See: http://code.google.com/p/arduino/wiki/Platforms +# See: https://arduino.github.io/arduino-cli/latest/platform-specification/ ############################################################## diff --git a/platform.txt b/platform.txt index db1b13b3..495599de 100644 --- a/platform.txt +++ b/platform.txt @@ -3,7 +3,7 @@ # ------------------------------ # # For more info: -# https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5-3rd-party-Hardware-specification +# https://arduino.github.io/arduino-cli/latest/platform-specification/ name=Arduino megaAVR Boards version=1.8.6 From 6d5155558ef94b0e1c1c6a7851bfc4acb3f5f1a6 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Tue, 17 Nov 2020 16:04:20 +0100 Subject: [PATCH 42/65] Serial: add bind() API for transparent passthrough --- cores/arduino/UART.h | 3 +++ cores/arduino/UART_private.h | 3 +++ 2 files changed, 6 insertions(+) diff --git a/cores/arduino/UART.h b/cores/arduino/UART.h index d623ae17..797ae932 100644 --- a/cores/arduino/UART.h +++ b/cores/arduino/UART.h @@ -168,11 +168,14 @@ class UartClass : public HardwareSerial using Print::write; // pull in write(str) and write(buf, size) from Print explicit operator bool() { return true; } + void bind(UartClass& ser) {bound = &ser; } + // Interrupt handlers - Not intended to be called externally inline void _rx_complete_irq(void); void _tx_data_empty_irq(void); private: void _poll_tx_data_empty(void); + UartClass* bound = NULL; }; #if defined(HWSERIAL0) diff --git a/cores/arduino/UART_private.h b/cores/arduino/UART_private.h index 0bca2d3c..2fa93694 100644 --- a/cores/arduino/UART_private.h +++ b/cores/arduino/UART_private.h @@ -66,6 +66,9 @@ void UartClass::_rx_complete_irq(void) _rx_buffer[_rx_buffer_head] = c; _rx_buffer_head = i; } + if (bound != NULL) { + bound->write(c); + } } else { // Parity error, read byte but discard it (*_hwserial_module).RXDATAL; From 2d26f7af48b0fcae815028c237124e8d2ce6b26a Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Tue, 17 Nov 2020 16:04:52 +0100 Subject: [PATCH 43/65] SPI/Wire: explicitely include api headers --- libraries/SPI/src/SPI.h | 1 + libraries/Wire/src/Wire.h | 1 + 2 files changed, 2 insertions(+) diff --git a/libraries/SPI/src/SPI.h b/libraries/SPI/src/SPI.h index 38fbfb1b..53e15839 100644 --- a/libraries/SPI/src/SPI.h +++ b/libraries/SPI/src/SPI.h @@ -21,6 +21,7 @@ #define _SPI_H_INCLUDED #include +#include #ifndef USE_MALLOC_FOR_IRQ_MAP #define USE_MALLOC_FOR_IRQ_MAP 0 diff --git a/libraries/Wire/src/Wire.h b/libraries/Wire/src/Wire.h index 7a1375bd..cee8752e 100644 --- a/libraries/Wire/src/Wire.h +++ b/libraries/Wire/src/Wire.h @@ -23,6 +23,7 @@ #define TwoWire_h #include +#include #define BUFFER_LENGTH 128 From a0f6beb55e6c60fdd7baffb306d99c0844377f43 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Tue, 17 Nov 2020 16:48:20 +0100 Subject: [PATCH 44/65] TEMP: Revert "Redefine F() as no-op" This reverts commit d316aa62ae4f515095319cd9e8b0ac781daf5fb8 to allow running CI tests on a known baseline --- cores/arduino/Arduino.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/cores/arduino/Arduino.h b/cores/arduino/Arduino.h index 83017230..c40dcb20 100644 --- a/cores/arduino/Arduino.h +++ b/cores/arduino/Arduino.h @@ -26,9 +26,6 @@ #include #include -#undef F -#define F(str) (str) - #ifdef __cplusplus extern "C"{ #endif From afb02661530bb7479d9d9f462f7813948fe5dba8 Mon Sep 17 00:00:00 2001 From: Alessandro Ranellucci Date: Sun, 6 Dec 2020 22:44:23 +0100 Subject: [PATCH 45/65] Bugfix: wrong default I2C baud rate was set for Arduino Nano Every. #88 --- libraries/Wire/src/utility/twi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/Wire/src/utility/twi.c b/libraries/Wire/src/utility/twi.c index e6e45e54..5e34609a 100644 --- a/libraries/Wire/src/utility/twi.c +++ b/libraries/Wire/src/utility/twi.c @@ -201,7 +201,7 @@ void TWI_MasterSetBaud(uint32_t frequency){ t_rise = 1000; } - uint32_t baud = ((F_CPU_CORRECTED/frequency) - (((F_CPU_CORRECTED*t_rise)/1000)/1000)/1000 - 10)/2; + uint32_t baud = (F_CPU_CORRECTED / frequency - F_CPU_CORRECTED / 1000 / 1000 * t_rise / 1000 - 10) / 2; TWI0.MBAUD = (uint8_t)baud; } From 268fefd7e73cae8c0a0dfc05e114079e69fd0827 Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Thu, 10 Dec 2020 10:45:06 +0100 Subject: [PATCH 46/65] Changing return type of 'requestFrom' from uint8_t to size_t allows the function to return the correct amount of bytes read (since internally it's already a size_t which is downcast to a uint8_t upon returning it. (#92) --- libraries/Wire/src/Wire.cpp | 8 ++++---- libraries/Wire/src/Wire.h | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/libraries/Wire/src/Wire.cpp b/libraries/Wire/src/Wire.cpp index febee50c..cdec85cf 100644 --- a/libraries/Wire/src/Wire.cpp +++ b/libraries/Wire/src/Wire.cpp @@ -95,7 +95,7 @@ void TwoWire::setClock(uint32_t clock) TWI_MasterSetBaud(clock); } -uint8_t TwoWire::requestFrom(uint8_t address, size_t quantity, bool sendStop) { +size_t TwoWire::requestFrom(uint8_t address, size_t quantity, bool sendStop) { if(quantity > BUFFER_LENGTH){ quantity = BUFFER_LENGTH; } @@ -109,17 +109,17 @@ uint8_t TwoWire::requestFrom(uint8_t address, size_t quantity, bool sendStop) { return bytes_read; } -uint8_t TwoWire::requestFrom(uint8_t address, size_t quantity) +size_t TwoWire::requestFrom(uint8_t address, size_t quantity) { return requestFrom(address, quantity, true); } -uint8_t TwoWire::requestFrom(int address, int quantity) +size_t TwoWire::requestFrom(int address, int quantity) { return requestFrom((uint8_t)address, (size_t)quantity, true); } -uint8_t TwoWire::requestFrom(int address, int quantity, int sendStop) +size_t TwoWire::requestFrom(int address, int quantity, int sendStop) { return requestFrom((uint8_t)address, (size_t)quantity, (bool)sendStop); } diff --git a/libraries/Wire/src/Wire.h b/libraries/Wire/src/Wire.h index cee8752e..3871e350 100644 --- a/libraries/Wire/src/Wire.h +++ b/libraries/Wire/src/Wire.h @@ -58,10 +58,10 @@ class TwoWire : public HardwareI2C void beginTransmission(int); uint8_t endTransmission(void); uint8_t endTransmission(bool); - uint8_t requestFrom(uint8_t, size_t); - uint8_t requestFrom(uint8_t, size_t, bool); - uint8_t requestFrom(int, int); - uint8_t requestFrom(int, int, int); + size_t requestFrom(uint8_t, size_t); + size_t requestFrom(uint8_t, size_t, bool); + size_t requestFrom(int, int); + size_t requestFrom(int, int, int); virtual size_t write(uint8_t); virtual size_t write(const uint8_t *, size_t); virtual int available(void); From 2237a7467bc03d8c3b2539e76673e03b64197d0d Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Wed, 30 Dec 2020 11:11:35 +0100 Subject: [PATCH 47/65] Add github action for core release --- .github/workflows/release.yaml | 107 ++++++++++++++++++++++ extras/pack.release.bash | 31 ++++++- extras/package_index.json.NewTag.template | 54 +++++++++++ 3 files changed, 188 insertions(+), 4 deletions(-) create mode 100644 .github/workflows/release.yaml create mode 100644 extras/package_index.json.NewTag.template diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 00000000..d7e23178 --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,107 @@ +name: release + +on: + push: + tags: + - "[0-9]+.[0-9]+.[0-9]+*" + +jobs: + core-pre-release-from-tag: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Checkout ArduinoCore-API + uses: actions/checkout@v2 + with: + repository: arduino/ArduinoCore-API + path: extras/ArduinoCore-API + + - name: Check if API should be compiled in the core + id: checkapi + run: | + if [[ $(grep -r api platform.txt) ]]; then echo "::set-output name=IS_API::true"; fi + + - name: Checkout latest tag of ArduinoCore-API and add it to the core + run: | + cd extras/ArduinoCore-API + git fetch --tags + git checkout $(git describe --tags $(git rev-list --tags --max-count=1)) + cd ../.. + mv "$GITHUB_WORKSPACE/extras/ArduinoCore-API/api" "$GITHUB_WORKSPACE/cores/arduino" + if: steps.checkapi.outputs.IS_API == 'true' + + - name: Remove ArduinoCore-API + run: rm -r "$GITHUB_WORKSPACE/extras/ArduinoCore-API" + + - name: Set env + run: echo "TAG_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV + + - name: Get repo name + run: echo "REPOSITORY_NAME=$(echo ${{ github.repository }} | cut -d "/" -f2-)" >> $GITHUB_ENV + + - name: Package the new core + run: | + extras/pack.release.bash $TAG_VERSION $REPOSITORY_NAME + cd extras + mkdir staging + echo $PWD + mv ../*.json staging/ + mv ../*.tar.bz2 staging/ + cd .. + + - name: Get architecture name + run: | + echo "ARCHITECTURE=$(cat extras/package_index.json.NewTag.template | jq ".packages[0].platforms[0].architecture" | sed 's/\"//g')" >> $GITHUB_ENV + + - name: Upload package_*_index.json and *.tar.bz2 file to Arduino downloads servers + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + run: | + aws s3 sync extras/staging/ s3://${{ secrets.ARDUINO_DOWNLOADS_BUCKET }}/packages/staging/ --exclude "*" --include *.json + aws s3 sync extras/staging/ s3://${{ secrets.ARDUINO_DOWNLOADS_BUCKET }}/cores/staging/ --exclude "*" --include *.tar.bz2 + + - name: Checkout Basic examples + uses: actions/checkout@v2 + with: + repository: arduino/arduino-examples + path: extras/arduino-examples + + - name: Install Arduino CLI + uses: arduino/setup-arduino-cli@v1.1.1 + with: + version: "0.14.0" + + - name: Download and verify new core + run: | + export PATH=$PATH:$PWD + arduino-cli version + cp extras/staging/package_${REPOSITORY_NAME}_${TAG_VERSION}_index.json . + export ARDUINO_DIRECTORIES_DATA=$PWD + export ARDUINO_BOARD_MANAGER_ADDITIONAL_URLS=file://$PWD/package_${REPOSITORY_NAME}_${TAG_VERSION}_index.json + arduino-cli config init + arduino-cli config dump -v + arduino-cli core update-index -v + arduino-cli core install arduino:${ARCHITECTURE}@${TAG_VERSION} + INDEX=0 + arduino-cli board listall --format=json > boardlist.json + N=$(jq '.boards | length' boardlist.json) + let N=N-1 + echo $N + for INDEX in $(seq 0 1 $N); do arduino-cli compile --fqbn $(cat boardlist.json | jq ".boards[$INDEX].FQBN" | sed 's/\"//g') $PWD/extras/arduino-examples/examples/01.Basics/Blink; done + + # See: https://github.com/rtCamp/action-slack-notify + - name: Slack notification of core pre-release + uses: rtCamp/action-slack-notify@v2.1.0 + env: + SLACK_CHANNEL: core_releases + SLACK_COLOR: good + SLACK_USERNAME: ArduinoBot + SLACK_ICON: https://github.com/arduino.png?size=48 + SLACK_TITLE: Arduino core pre-release + SLACK_MESSAGE: 'Version ${{ env.TAG_VERSION }} of core ${{ env.REPOSITORY_NAME }} is now available' + SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} + MSG_MINIMAL: true \ No newline at end of file diff --git a/extras/pack.release.bash b/extras/pack.release.bash index a2999d50..3321340b 100755 --- a/extras/pack.release.bash +++ b/extras/pack.release.bash @@ -1,6 +1,6 @@ #!/bin/bash -ex -# pack.*.bash - Bash script to help packaging avr core releases. +# pack.*.bash - Bash script to help packaging samd core releases. # Copyright (c) 2015 Arduino LLC. All right reserved. # # This library is free software; you can redistribute it and/or @@ -17,17 +17,40 @@ # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# Version check removed because version string passed from jenkins was incorrect +VERSION_FROM_TAG=$1 +CORE_NAME=$2 +echo $VERSION_FROM_TAG +echo $CORE_NAME VERSION=`grep version= platform.txt | sed 's/version=//g'` +echo $VERSION + +if [ $VERSION != $VERSION_FROM_TAG ]; then + exit 0 +fi PWD=`pwd` FOLDERNAME=`basename $PWD` THIS_SCRIPT_NAME=`basename $0` +FILENAME=core-$CORE_NAME-$VERSION.tar.bz2 +echo $FILENAME -rm -f avr-$VERSION.tar.bz2 +rm -f *.tar.bz2 +rm -f *.json cd .. -tar --transform "s|$FOLDERNAME|$FOLDERNAME-$VERSION|g" --exclude=extras/** --exclude=.git* --exclude=.idea -cjf avr-$VERSION.tar.bz2 $FOLDERNAME +tar --exclude=extras/** --exclude=.git* --exclude=.idea -cjhf $FILENAME $FOLDERNAME cd - -mv ../avr-$VERSION.tar.bz2 . +mv ../$FILENAME . + +CHKSUM=`sha256sum $FILENAME | awk '{ print $1 }'` +SIZE=`wc -c $FILENAME | awk '{ print $1 }'` +cat extras/package_index.json.NewTag.template | +# sed "s/%%BUILD_NUMBER%%/${BUILD_NUMBER}/" | +# sed "s/%%CURR_TIME%%/${CURR_TIME_SED}/" | +sed "s/%%VERSION%%/${VERSION}/" | +sed "s/%%FILENAME%%/${FILENAME}/" | +sed "s/%%CHECKSUM%%/${CHKSUM}/" | +sed "s/%%SIZE%%/${SIZE}/" > package_${CORE_NAME}_${VERSION}_index.json \ No newline at end of file diff --git a/extras/package_index.json.NewTag.template b/extras/package_index.json.NewTag.template new file mode 100644 index 00000000..1da2a8f8 --- /dev/null +++ b/extras/package_index.json.NewTag.template @@ -0,0 +1,54 @@ +{ + "packages": [ + { + "name": "arduino", + "maintainer": "Arduino Betatesting", + "websiteURL": "http://www.arduino.cc/", + "email": "packages@arduino.cc", + "help": { + "online": "http://www.arduino.cc/en/Reference/HomePage" + }, + "platforms": [ + { + "name": "Arduino megaAVR Boards - Pre-release", + "architecture": "megaavr", + "version": "%%VERSION%%", + "category": "Arduino", + "url": "http://downloads.arduino.cc/cores/staging/%%FILENAME%%", + "archiveFileName": "%%FILENAME%%", + "checksum": "SHA-256:%%CHECKSUM%%", + "size": "%%SIZE%%", + "help": { + "online": "https://github.com/arduino/ArduinoCore-megaavr/issues" + }, + "boards": [ + { + "name": "Arduino Uno WiFi Rev2" + }, + { + "name": "Arduino Nano Every" + } + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "avr-gcc", + "version": "7.3.0-atmel3.6.1-arduino5" + }, + { + "packager": "arduino", + "name": "avrdude", + "version": "6.3.0-arduino17" + }, + { + "packager": "arduino", + "name": "arduinoOTA", + "version": "1.3.0" + } + ] + } + ], + "tools": [] + } + ] +} \ No newline at end of file From 3f1ce5b2a86e1274927a628efb021896736159c8 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Wed, 30 Dec 2020 11:11:53 +0100 Subject: [PATCH 48/65] Update core to 1.8.7 --- platform.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform.txt b/platform.txt index 495599de..71d6632a 100644 --- a/platform.txt +++ b/platform.txt @@ -6,7 +6,7 @@ # https://arduino.github.io/arduino-cli/latest/platform-specification/ name=Arduino megaAVR Boards -version=1.8.6 +version=1.8.7 # AVR compile variables # --------------------- From 86508f58cb1a796516ec658e8cb74653bc29d108 Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Wed, 27 Jan 2021 13:44:47 +0100 Subject: [PATCH 49/65] Instruct the compiler to generate a map file during the compilation process which is sometimes useful for debugging. --- platform.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform.txt b/platform.txt index 71d6632a..e288636b 100644 --- a/platform.txt +++ b/platform.txt @@ -66,7 +66,7 @@ archive_file_path={build.path}/{archive_file} recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} {compiler.ar.extra_flags} "{archive_file_path}" "{object_file}" ## Combine gc-sections, archives, and objects -recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" {compiler.c.elf.flags} -mmcu={build.mcu} {compiler.c.elf.extra_flags} -o "{build.path}/{build.project_name}.elf" {object_files} "{build.path}/{archive_file}" "-L{build.path}" -lm +recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" {compiler.c.elf.flags} -mmcu={build.mcu} {compiler.c.elf.extra_flags} -o "{build.path}/{build.project_name}.elf" {object_files} "{build.path}/{archive_file}" "-L{build.path}" -lm "-Wl,-Map,{build.path}/{build.project_name}.map" ## Create output files (.eep and .hex) recipe.objcopy.eep.pattern="{compiler.path}{compiler.objcopy.cmd}" {compiler.objcopy.eep.flags} {compiler.objcopy.eep.extra_flags} "{build.path}/{build.project_name}.elf" "{build.path}/{build.project_name}.eep" From 829a0c626fb332c5657c53bc30b0200358a001a2 Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Fri, 12 Feb 2021 07:29:05 +0100 Subject: [PATCH 50/65] Use authenticated API requests in "Compile Examples" CI workflow The arduino/compile-sketches GitHub Actions action used in the "Compile Examples" workflow queries the GitHub API for the base ref of the pull request, which is used for the memory deltas determination. There were a couple workflow runs recently (1, 2) that failed due to rate limiting. Authenticated API requests are given a more generous API request allowance, so providing the action with the automatically generated GitHub access token should prevent this from happening again. --- .github/workflows/compile-examples.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/compile-examples.yml b/.github/workflows/compile-examples.yml index 313c270e..28e61cad 100644 --- a/.github/workflows/compile-examples.yml +++ b/.github/workflows/compile-examples.yml @@ -110,6 +110,7 @@ jobs: - name: Compile examples uses: arduino/actions/libraries/compile-examples@master with: + github-token: ${{ secrets.GITHUB_TOKEN }} fqbn: ${{ matrix.board.fqbn }} libraries: | - name: Adafruit MQTT Library @@ -149,4 +150,4 @@ jobs: uses: actions/upload-artifact@v1 with: name: size-deltas-reports - path: size-deltas-reports \ No newline at end of file + path: size-deltas-reports From ea50ebd8ff8a7539e78fe8becc5fcb8b8e89a5c3 Mon Sep 17 00:00:00 2001 From: per1234 Date: Sun, 4 Apr 2021 02:13:10 -0700 Subject: [PATCH 51/65] Use established KEYWORD_TOKENTYPE for Wire keyword All the other platform bundled libraries use `KEYWORD1` for the library's global instance so this provides consistency. --- libraries/Wire/keywords.txt | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/libraries/Wire/keywords.txt b/libraries/Wire/keywords.txt index 5e3d2b1c..04b8301a 100644 --- a/libraries/Wire/keywords.txt +++ b/libraries/Wire/keywords.txt @@ -6,6 +6,8 @@ # Datatypes (KEYWORD1) ####################################### +Wire KEYWORD2 + ####################################### # Methods and Functions (KEYWORD2) ####################################### @@ -18,12 +20,6 @@ requestFrom KEYWORD2 onReceive KEYWORD2 onRequest KEYWORD2 -####################################### -# Instances (KEYWORD2) -####################################### - -Wire KEYWORD2 - ####################################### # Constants (LITERAL1) ####################################### From d1b989c4fa88838b9a52fcfd28234d391cc6c284 Mon Sep 17 00:00:00 2001 From: per1234 Date: Fri, 2 Apr 2021 02:05:53 -0700 Subject: [PATCH 52/65] Update action versions used in CI workflows The "smoke test" sketch compilation and reporting actions have been moved to dedicated repositories. The actions hosted at the old `arduino/actions/libraries/*` location will no longer be maintained. Since the time the actions were migrated to the dedicated repositories, a breaking change was made to the default value of the `sketches-report-path` input, which required a change to the values of the `name` and `path` inputs of the `actions/upload-artifact` action. --- .github/workflows/compile-examples.yml | 9 +++++---- .github/workflows/report-size-deltas.yml | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/compile-examples.yml b/.github/workflows/compile-examples.yml index 28e61cad..9dfbf70a 100644 --- a/.github/workflows/compile-examples.yml +++ b/.github/workflows/compile-examples.yml @@ -54,6 +54,7 @@ jobs: - ~/Arduino/libraries/Arduino_LPS22HB/examples - ~/Arduino/libraries/ArduinoDMX/examples - ~/Arduino/libraries/ArduinoRS485/examples + SKETCHES_REPORTS_PATH: sketches-reports strategy: fail-fast: false @@ -108,7 +109,7 @@ jobs: # CapacitiveSensor library does not support megaAVR core yet rm -r "$GITHUB_WORKSPACE/extras/examples/10.StarterKit_BasicKit/p13_TouchSensorLamp" - name: Compile examples - uses: arduino/actions/libraries/compile-examples@master + uses: arduino/compile-sketches@v1 with: github-token: ${{ secrets.GITHUB_TOKEN }} fqbn: ${{ matrix.board.fqbn }} @@ -147,7 +148,7 @@ jobs: verbose: 'true' - name: Save memory usage change report as artifact - uses: actions/upload-artifact@v1 + uses: actions/upload-artifact@v2 with: - name: size-deltas-reports - path: size-deltas-reports + path: ${{ env.SKETCHES_REPORTS_PATH }} + name: ${{ env.SKETCHES_REPORTS_PATH }} diff --git a/.github/workflows/report-size-deltas.yml b/.github/workflows/report-size-deltas.yml index a359b257..b30c25be 100644 --- a/.github/workflows/report-size-deltas.yml +++ b/.github/workflows/report-size-deltas.yml @@ -10,4 +10,4 @@ jobs: steps: - name: Comment size deltas reports to PRs - uses: arduino/actions/libraries/report-size-deltas@master \ No newline at end of file + uses: arduino/report-size-deltas@v1 From a95aef69c34c199cffd2478a02210039c1e860b4 Mon Sep 17 00:00:00 2001 From: per1234 Date: Fri, 2 Apr 2021 02:07:19 -0700 Subject: [PATCH 53/65] Specify sketches report input values for sketch compilation CI actions The reliance on the `actions/upload-artifacts` action as the transfer mechanism between workflow runs means that these values will always be hardcoded into the workflow. The result is that if the default values of the inputs are changed, it breaks the workflow, even if the changes are synchronized. So it's more robust to avoid dependening on the default values. --- .github/workflows/compile-examples.yml | 1 + .github/workflows/report-size-deltas.yml | 3 +++ 2 files changed, 4 insertions(+) diff --git a/.github/workflows/compile-examples.yml b/.github/workflows/compile-examples.yml index 9dfbf70a..db79dd1d 100644 --- a/.github/workflows/compile-examples.yml +++ b/.github/workflows/compile-examples.yml @@ -146,6 +146,7 @@ jobs: ${{ matrix.additional-sketch-paths }} enable-deltas-report: 'true' verbose: 'true' + sketches-report-path: ${{ env.SKETCHES_REPORTS_PATH }} - name: Save memory usage change report as artifact uses: actions/upload-artifact@v2 diff --git a/.github/workflows/report-size-deltas.yml b/.github/workflows/report-size-deltas.yml index b30c25be..1e37a511 100644 --- a/.github/workflows/report-size-deltas.yml +++ b/.github/workflows/report-size-deltas.yml @@ -11,3 +11,6 @@ jobs: steps: - name: Comment size deltas reports to PRs uses: arduino/report-size-deltas@v1 + with: + # The name of the workflow artifact created by the sketch compilation workflow + sketches-reports-source: sketches-reports From 07d8dcde75cb6d3e31f36099f106ad4ffdbada12 Mon Sep 17 00:00:00 2001 From: per1234 Date: Wed, 26 May 2021 01:10:22 -0700 Subject: [PATCH 54/65] Disable verbose output in sketch compilation CI logs The `arduino/compile-sketches` action was previously configured for verbose output.. This option is primarily intended to be used for troubleshooting and doesn't contain any information of value for general usage. Due to the extensive coverage of this CI workflow, the logs are massive, which makes it inconvenient for anyone to read them to identify the cause of a failure. Removing the verbose output will improve that situation --- .github/workflows/compile-examples.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/compile-examples.yml b/.github/workflows/compile-examples.yml index db79dd1d..07382034 100644 --- a/.github/workflows/compile-examples.yml +++ b/.github/workflows/compile-examples.yml @@ -145,7 +145,6 @@ jobs: ${{ env.UNIVERSAL_SKETCH_PATHS }} ${{ matrix.additional-sketch-paths }} enable-deltas-report: 'true' - verbose: 'true' sketches-report-path: ${{ env.SKETCHES_REPORTS_PATH }} - name: Save memory usage change report as artifact From d39a5ab3adecddc6d3b80ca212d1dbed805f77a7 Mon Sep 17 00:00:00 2001 From: per1234 Date: Sun, 30 May 2021 06:54:39 -0700 Subject: [PATCH 55/65] Add "smoke test" sketch compilation CI workflow for MuxTO firmware On every push and pull request that affects relevant files, and periodically, compile the Nano Every's MuxTO firmware sketch. The binary is saved as a workflow artifact to make it available for beta testers who might prefer flashing it directly over setting up the toolchain needed to compile it locally. Due to the standard output from Arduino CLI not providing the correct size data, a bespoke check is done for whether the compiled binary will fit in the available 12 kB of memory. If not, the workflow run fails. On creation or commit to a pull request, a report of the resulting change in memory usage of the sketch will be commented to the PR thread. --- .github/workflows/compile-muxto.yml | 103 ++++++++++++++++++++++++++++ README.md | 2 + 2 files changed, 105 insertions(+) create mode 100644 .github/workflows/compile-muxto.yml diff --git a/.github/workflows/compile-muxto.yml b/.github/workflows/compile-muxto.yml new file mode 100644 index 00000000..f0e8948b --- /dev/null +++ b/.github/workflows/compile-muxto.yml @@ -0,0 +1,103 @@ +name: Compile MuxTO + +# See: https://docs.github.com/en/free-pro-team@latest/actions/reference/events-that-trigger-workflows +on: + push: + paths: + - ".github/workflows/compile-muxto.yml" + - "firmwares/MuxTO/**" + pull_request: + paths: + - ".github/workflows/compile-muxto.yml" + - "firmwares/MuxTO/**" + schedule: + # Run every Tuesday at 8 AM UTC to catch breakage caused by changes to external resources (libraries, platforms). + - cron: "0 8 * * TUE" + workflow_dispatch: + repository_dispatch: + +env: + BINARY_FILENAME: MuxTO.ino.bin + BINARY_ARTIFACT_NAME: MuxTO + +jobs: + build: + name: Build firmware + runs-on: ubuntu-latest + + strategy: + fail-fast: false + + matrix: + board: + - fqbn: arduino:samd:muxto:float=default,config=enabled,clock=internal_usb,timer=timer_732Hz,bootloader=4kb,serial=two_uart,usb=cdc + platforms: | + # Install MattairTech_Arduino:samd via Boards Manager for the toolchain + - name: MattairTech_Arduino:samd + source-url: https://www.mattairtech.com/software/arduino/package_MattairTech_index.json + # This needs to match with the version of MattairTech_Arduino:samd the Arduino fork is based on in order to get the right tool versions + version: 1.6.17 + # Install the platform with MuxTO support + - name: arduino:samd + source-url: https://github.com/arduino/ArduinoCore-samd.git + version: muxto + + steps: + - name: Set environment variables + run: | + # See: https://docs.github.com/en/actions/reference/workflow-commands-for-github-actions#setting-an-environment-variable + echo "BINARY_OUTPUT_PATH=${{ runner.temp }}/output" >> "$GITHUB_ENV" + echo "SKETCHES_REPORTS_PATH=${{ runner.temp }}/sketches-reports" >> "$GITHUB_ENV" + + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Compile firmware + uses: arduino/compile-sketches@v1 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + fqbn: ${{ matrix.board.fqbn }} + platforms: ${{ matrix.board.platforms }} + libraries: | + - + sketch-paths: | + - firmwares/MuxTO + cli-compile-flags: | + - --output-dir=${{ env.BINARY_OUTPUT_PATH }} + enable-deltas-report: true + sketches-report-path: ${{ env.SKETCHES_REPORTS_PATH }} + + - name: Save firmware binary as workflow artifact + uses: actions/upload-artifact@v2 + with: + if-no-files-found: error + path: ${{ env.BINARY_OUTPUT_PATH }}/${{ env.BINARY_FILENAME }} + name: ${{ env.BINARY_ARTIFACT_NAME }} + + - name: Save sketches report as workflow artifact + uses: actions/upload-artifact@v2 + with: + if-no-files-found: error + path: ${{ env.SKETCHES_REPORTS_PATH }} + name: sketches-reports + + size: + name: Check firmware size + needs: build + runs-on: ubuntu-latest + steps: + - name: Download binary artifact + uses: actions/download-artifact@v2 + with: + name: ${{ env.BINARY_ARTIFACT_NAME }} + + # The normal size check done by Arduino CLI is not working correctly, so it's necessary to check the size directly + - name: Check firmware binary size + run: | + BINARY_SIZE="$(stat --printf="%s" "${{ github.workspace }}/${{ env.BINARY_FILENAME }}")" + MAX_BINARY_SIZE=$((12 * 1024)) + echo "File size: ${BINARY_SIZE}/${MAX_BINARY_SIZE} B" + if [[ $BINARY_SIZE -gt $MAX_BINARY_SIZE ]]; then + echo "::error::Binary size of $BINARY_SIZE B exceeds the available memory ($MAX_BINARY_SIZE B)" + exit 1 + fi diff --git a/README.md b/README.md index f5ace4fd..4090cd7e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # Arduino Core for ATMEGA4809 CPU +[![Compile MuxTO status](https://github.com/arduino/ArduinoCore-megaavr/actions/workflows/compile-muxto.yml/badge.svg)](https://github.com/arduino/ArduinoCore-megaavr/actions/workflows/compile-muxto.yml) + This repository contains the source code and configuration files of the Arduino Core for Microchip's ATMEGA4809 processor (used on the Arduino Uno WiFi Rev2 boards). From 1b7797be3639b21cc468855b506d30cad4cd99e0 Mon Sep 17 00:00:00 2001 From: per1234 Date: Wed, 22 Sep 2021 02:14:46 -0700 Subject: [PATCH 56/65] Remove unnecessary HID library The library was inherited from the "Arduino AVR Boards" platform that was the model for this project. It is used by the ATmega32U4-based boards of Arduino AVR Boards, however this platform's boards do not have a native HID capability and so the library serves no purpose, and in fact will not even compile for this platform's boards. So it will be best to remove it. --- libraries/HID/keywords.txt | 21 ---- libraries/HID/library.properties | 9 -- libraries/HID/src/HID.cpp | 162 ------------------------------- libraries/HID/src/HID.h | 129 ------------------------ 4 files changed, 321 deletions(-) delete mode 100644 libraries/HID/keywords.txt delete mode 100644 libraries/HID/library.properties delete mode 100644 libraries/HID/src/HID.cpp delete mode 100644 libraries/HID/src/HID.h diff --git a/libraries/HID/keywords.txt b/libraries/HID/keywords.txt deleted file mode 100644 index 32a9ba5f..00000000 --- a/libraries/HID/keywords.txt +++ /dev/null @@ -1,21 +0,0 @@ -####################################### -# Syntax Coloring Map HID -####################################### - -####################################### -# Datatypes (KEYWORD1) -####################################### - -HID KEYWORD1 - -####################################### -# Methods and Functions (KEYWORD2) -####################################### -begin KEYWORD2 -SendReport KEYWORD2 -AppendDescriptor KEYWORD2 - -####################################### -# Constants (LITERAL1) -####################################### -HID_TX LITERAL1 \ No newline at end of file diff --git a/libraries/HID/library.properties b/libraries/HID/library.properties deleted file mode 100644 index 499286d4..00000000 --- a/libraries/HID/library.properties +++ /dev/null @@ -1,9 +0,0 @@ -name=HID -version=1.0 -author=Arduino -maintainer=Arduino -sentence=Module for PluggableUSB infrastructure. Exposes an API for devices like Keyboards, Mice and Gamepads. -paragraph= -category=Communication -url=http://www.arduino.cc/en/Reference/HID -architectures=megaavr diff --git a/libraries/HID/src/HID.cpp b/libraries/HID/src/HID.cpp deleted file mode 100644 index 21ede269..00000000 --- a/libraries/HID/src/HID.cpp +++ /dev/null @@ -1,162 +0,0 @@ -/* - Copyright (c) 2015, Arduino LLC - Original code (pre-library): Copyright (c) 2011, Peter Barrett - - Permission to use, copy, modify, and/or distribute this software for - any purpose with or without fee is hereby granted, provided that the - above copyright notice and this permission notice appear in all copies. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL - WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR - BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES - OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, - ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS - SOFTWARE. - */ - -#include "HID.h" - -#if defined(USBCON) - -HID_& HID() -{ - static HID_ obj; - return obj; -} - -int HID_::getInterface(uint8_t* interfaceCount) -{ - *interfaceCount += 1; // uses 1 - HIDDescriptor hidInterface = { - D_INTERFACE(pluggedInterface, 1, USB_DEVICE_CLASS_HUMAN_INTERFACE, HID_SUBCLASS_NONE, HID_PROTOCOL_NONE), - D_HIDREPORT(descriptorSize), - D_ENDPOINT(USB_ENDPOINT_IN(pluggedEndpoint), USB_ENDPOINT_TYPE_INTERRUPT, USB_EP_SIZE, 0x01) - }; - return USB_SendControl(0, &hidInterface, sizeof(hidInterface)); -} - -int HID_::getDescriptor(USBSetup& setup) -{ - // Check if this is a HID Class Descriptor request - if (setup.bmRequestType != REQUEST_DEVICETOHOST_STANDARD_INTERFACE) { return 0; } - if (setup.wValueH != HID_REPORT_DESCRIPTOR_TYPE) { return 0; } - - // In a HID Class Descriptor wIndex cointains the interface number - if (setup.wIndex != pluggedInterface) { return 0; } - - int total = 0; - HIDSubDescriptor* node; - for (node = rootNode; node; node = node->next) { - int res = USB_SendControl(TRANSFER_PGM, node->data, node->length); - if (res == -1) - return -1; - total += res; - } - - // Reset the protocol on reenumeration. Normally the host should not assume the state of the protocol - // due to the USB specs, but Windows and Linux just assumes its in report mode. - protocol = HID_REPORT_PROTOCOL; - - return total; -} - -uint8_t HID_::getShortName(char *name) -{ - name[0] = 'H'; - name[1] = 'I'; - name[2] = 'D'; - name[3] = 'A' + (descriptorSize & 0x0F); - name[4] = 'A' + ((descriptorSize >> 4) & 0x0F); - return 5; -} - -void HID_::AppendDescriptor(HIDSubDescriptor *node) -{ - if (!rootNode) { - rootNode = node; - } else { - HIDSubDescriptor *current = rootNode; - while (current->next) { - current = current->next; - } - current->next = node; - } - descriptorSize += node->length; -} - -int HID_::SendReport(uint8_t id, const void* data, int len) -{ - auto ret = USB_Send(pluggedEndpoint, &id, 1); - if (ret < 0) return ret; - auto ret2 = USB_Send(pluggedEndpoint | TRANSFER_RELEASE, data, len); - if (ret2 < 0) return ret2; - return ret + ret2; -} - -bool HID_::setup(USBSetup& setup) -{ - if (pluggedInterface != setup.wIndex) { - return false; - } - - uint8_t request = setup.bRequest; - uint8_t requestType = setup.bmRequestType; - - if (requestType == REQUEST_DEVICETOHOST_CLASS_INTERFACE) - { - if (request == HID_GET_REPORT) { - // TODO: HID_GetReport(); - return true; - } - if (request == HID_GET_PROTOCOL) { - // TODO: Send8(protocol); - return true; - } - if (request == HID_GET_IDLE) { - // TODO: Send8(idle); - } - } - - if (requestType == REQUEST_HOSTTODEVICE_CLASS_INTERFACE) - { - if (request == HID_SET_PROTOCOL) { - // The USB Host tells us if we are in boot or report mode. - // This only works with a real boot compatible device. - protocol = setup.wValueL; - return true; - } - if (request == HID_SET_IDLE) { - idle = setup.wValueL; - return true; - } - if (request == HID_SET_REPORT) - { - //uint8_t reportID = setup.wValueL; - //uint16_t length = setup.wLength; - //uint8_t data[length]; - // Make sure to not read more data than USB_EP_SIZE. - // You can read multiple times through a loop. - // The first byte (may!) contain the reportID on a multreport. - //USB_RecvControl(data, length); - } - } - - return false; -} - -HID_::HID_(void) : PluggableUSBModule(1, 1, epType), - rootNode(NULL), descriptorSize(0), - protocol(HID_REPORT_PROTOCOL), idle(1) -{ - epType[0] = EP_TYPE_INTERRUPT_IN; - PluggableUSB().plug(this); -} - -int HID_::begin(void) -{ - return 0; -} - -#endif /* if defined(USBCON) */ diff --git a/libraries/HID/src/HID.h b/libraries/HID/src/HID.h deleted file mode 100644 index ad2b06b1..00000000 --- a/libraries/HID/src/HID.h +++ /dev/null @@ -1,129 +0,0 @@ -/* - Copyright (c) 2015, Arduino LLC - Original code (pre-library): Copyright (c) 2011, Peter Barrett - - Permission to use, copy, modify, and/or distribute this software for - any purpose with or without fee is hereby granted, provided that the - above copyright notice and this permission notice appear in all copies. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL - WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR - BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES - OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, - ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS - SOFTWARE. - */ - -#ifndef HID_h -#define HID_h - -#include -#include -#include "api/PluggableUSB.h" - -#if defined(USBCON) - -#define _USING_HID - -// HID 'Driver' -// ------------ -#define HID_GET_REPORT 0x01 -#define HID_GET_IDLE 0x02 -#define HID_GET_PROTOCOL 0x03 -#define HID_SET_REPORT 0x09 -#define HID_SET_IDLE 0x0A -#define HID_SET_PROTOCOL 0x0B - -#define HID_HID_DESCRIPTOR_TYPE 0x21 -#define HID_REPORT_DESCRIPTOR_TYPE 0x22 -#define HID_PHYSICAL_DESCRIPTOR_TYPE 0x23 - -// HID subclass HID1.11 Page 8 4.2 Subclass -#define HID_SUBCLASS_NONE 0 -#define HID_SUBCLASS_BOOT_INTERFACE 1 - -// HID Keyboard/Mouse bios compatible protocols HID1.11 Page 9 4.3 Protocols -#define HID_PROTOCOL_NONE 0 -#define HID_PROTOCOL_KEYBOARD 1 -#define HID_PROTOCOL_MOUSE 2 - -// Normal or bios protocol (Keyboard/Mouse) HID1.11 Page 54 7.2.5 Get_Protocol Request -// "protocol" variable is used for this purpose. -#define HID_BOOT_PROTOCOL 0 -#define HID_REPORT_PROTOCOL 1 - -// HID Request Type HID1.11 Page 51 7.2.1 Get_Report Request -#define HID_REPORT_TYPE_INPUT 1 -#define HID_REPORT_TYPE_OUTPUT 2 -#define HID_REPORT_TYPE_FEATURE 3 - -typedef struct -{ - uint8_t len; // 9 - uint8_t dtype; // 0x21 - uint8_t addr; - uint8_t versionL; // 0x101 - uint8_t versionH; // 0x101 - uint8_t country; - uint8_t desctype; // 0x22 report - uint8_t descLenL; - uint8_t descLenH; -} HIDDescDescriptor; - -typedef struct -{ - InterfaceDescriptor hid; - HIDDescDescriptor desc; - EndpointDescriptor in; -} HIDDescriptor; - -class HIDSubDescriptor { -public: - HIDSubDescriptor *next = NULL; - HIDSubDescriptor(const void *d, const uint16_t l) : data(d), length(l) { } - - const void* data; - const uint16_t length; -}; - -class HID_ : public PluggableUSBModule -{ -public: - HID_(void); - int begin(void); - int SendReport(uint8_t id, const void* data, int len); - void AppendDescriptor(HIDSubDescriptor* node); - -protected: - // Implementation of the PluggableUSBModule - int getInterface(uint8_t* interfaceCount); - int getDescriptor(USBSetup& setup); - bool setup(USBSetup& setup); - uint8_t getShortName(char* name); - -private: - unsigned int epType[1]; - - HIDSubDescriptor* rootNode; - uint16_t descriptorSize; - - uint8_t protocol; - uint8_t idle; -}; - -// Replacement for global singleton. -// This function prevents static-initialization-order-fiasco -// https://isocpp.org/wiki/faq/ctors#static-init-order-on-first-use -HID_& HID(); - -#define D_HIDREPORT(length) { 9, 0x21, 0x01, 0x01, 0, 1, 0x22, lowByte(length), highByte(length) } - -#else - -#error "No Native USB support available on this board" - -#endif // USBCON - -#endif // HID_h From 71437e7659812d763c88094f69a94ef2b0468ea3 Mon Sep 17 00:00:00 2001 From: christophelandret <19358486+landret@users.noreply.github.com> Date: Mon, 19 Apr 2021 12:32:43 -1000 Subject: [PATCH 57/65] Update platform.txt ldflags added to allow precompilation. --- platform.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/platform.txt b/platform.txt index e288636b..9de78cc4 100644 --- a/platform.txt +++ b/platform.txt @@ -34,6 +34,7 @@ compiler.elf2hex.flags=-O ihex -R .eeprom compiler.elf2hex.bin.flags=-O binary -R .eeprom compiler.elf2hex.cmd=avr-objcopy compiler.ldflags= +compiler.libraries.ldflags= compiler.size.cmd=avr-size # This can be overridden in boards.txt @@ -66,7 +67,7 @@ archive_file_path={build.path}/{archive_file} recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} {compiler.ar.extra_flags} "{archive_file_path}" "{object_file}" ## Combine gc-sections, archives, and objects -recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" {compiler.c.elf.flags} -mmcu={build.mcu} {compiler.c.elf.extra_flags} -o "{build.path}/{build.project_name}.elf" {object_files} "{build.path}/{archive_file}" "-L{build.path}" -lm "-Wl,-Map,{build.path}/{build.project_name}.map" +recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" {compiler.c.elf.flags} -mmcu={build.mcu} {compiler.c.elf.extra_flags} {compiler.ldflags} -o "{build.path}/{build.project_name}.elf" {object_files} {compiler.libraries.ldflags} "{build.path}/{archive_file}" "-L{build.path}" -lm "-Wl,-Map,{build.path}/{build.project_name}.map" ## Create output files (.eep and .hex) recipe.objcopy.eep.pattern="{compiler.path}{compiler.objcopy.cmd}" {compiler.objcopy.eep.flags} {compiler.objcopy.eep.extra_flags} "{build.path}/{build.project_name}.elf" "{build.path}/{build.project_name}.eep" From f52a87ecaf45cf37df8b9e31cbb2e64c1f2d6d81 Mon Sep 17 00:00:00 2001 From: Silvano Cerza Date: Tue, 5 Oct 2021 10:42:30 +0200 Subject: [PATCH 58/65] Add support for pluggable discovery --- boards.txt | 12 ++++++++++++ platform.txt | 17 ++++++++++++++--- programmers.txt | 3 ++- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/boards.txt b/boards.txt index 4652ff1a..e5ca54b6 100644 --- a/boards.txt +++ b/boards.txt @@ -6,8 +6,13 @@ uno2018.name=Arduino Uno WiFi Rev2 uno2018.vid.0=0x03eb uno2018.pid.0=0x2145 +uno2018.upload_port.0.vid=0x03eb +uno2018.upload_port.0.pid=0x2145 +uno2018.upload_port.1.board=uno2018 uno2018.upload.tool=avrdude +uno2018.upload.tool.default=avrdude +uno2018.upload.tool.network=arduino_ota uno2018.upload.protocol=xplainedmini_updi uno2018.upload.maximum_size=48640 uno2018.upload.maximum_data_size=6144 @@ -25,6 +30,7 @@ uno2018.build.extra_flags={build.328emulation} -DMILLIS_USE_TIMERB3 #uno2018.build.extra_flags=-B{runtime.tools.atpack.path}/gcc/dev/{build.mcu} uno2018.bootloader.tool=avrdude +uno2018.bootloader.tool.default=avrdude uno2018.bootloader.file=atmega4809_uart_bl.hex uno2018.bootloader.SYSCFG0=0xC9 uno2018.bootloader.BOOTEND=0x02 @@ -43,8 +49,13 @@ nona4809.name=Arduino Nano Every nona4809.vid.0=0x2341 nona4809.pid.0=0x0058 +nona4809.upload_port.0.vid=0x2341 +nona4809.upload_port.0.pid=0x0058 +nona4809.upload_port.1.board=nona4809 nona4809.upload.tool=avrdude +nona4809.upload.tool.default=avrdude +nona4809.upload.tool.network=arduino_ota nona4809.upload.protocol=jtag2updi nona4809.upload.maximum_size=49152 nona4809.upload.maximum_data_size=6144 @@ -62,6 +73,7 @@ nona4809.build.extra_flags={build.328emulation} -DMILLIS_USE_TIMERB3 -DNO_EXTERN #nona4809.build.extra_flags=-B{runtime.tools.atpack.path}/gcc/dev/{build.mcu} nona4809.bootloader.tool=avrdude +nona4809.bootloader.tool.default=avrdude nona4809.bootloader.file=atmega4809_uart_bl.hex nona4809.bootloader.SYSCFG0=0xC9 nona4809.bootloader.BOOTEND=0x00 diff --git a/platform.txt b/platform.txt index 9de78cc4..91eea6af 100644 --- a/platform.txt +++ b/platform.txt @@ -91,6 +91,12 @@ recipe.preproc.includes="{compiler.path}{compiler.cpp.cmd}" {compiler.cpp.flags} preproc.macros.flags=-w -x c++ -E -CC recipe.preproc.macros="{compiler.path}{compiler.cpp.cmd}" {compiler.cpp.flags} {preproc.macros.flags} -mmcu={build.mcu} -DF_CPU={build.f_cpu} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} {compiler.cpp.extra_flags} {build.extra_flags} "-I{build.core.path}/api/deprecated" {includes} "{source_file}" -o "{preprocessed_file_path}" +# Required discoveries and monitors +# --------------------------------- +pluggable_discovery.required.0=builtin:serial-discovery +pluggable_discovery.required.1=builtin:mdns-discovery +pluggable_monitor.required.serial=builtin:serial-monitor + # AVR Uploader/Programmers tools # ------------------------------ @@ -98,8 +104,6 @@ tools.avrdude.path={runtime.tools.avrdude-6.3.0-arduino17.path} tools.avrdude.cmd.path={path}/bin/avrdude tools.avrdude.config.path={path}/etc/avrdude.conf -tools.avrdude.network_cmd={runtime.tools.arduinoOTA-1.3.0.path}/bin/arduinoOTA - tools.avrdude.upload.params.verbose=-v tools.avrdude.upload.params.quiet=-q -q # tools.avrdude.upload.verify is needed for backwards compatibility with IDE 1.6.8 or older, IDE 1.6.9 or newer overrides this value @@ -124,7 +128,14 @@ tools.avrdude.bootloader.pattern="{cmd.path}" "-C{config.path}" {bootloader.verb tools.avrdude_remote.upload.pattern=/usr/bin/run-avrdude /tmp/sketch.hex {upload.verbose} -p{build.mcu} -tools.avrdude.upload.network_pattern="{network_cmd}" -address {serial.port} -port 65280 -username arduino -password "{network.password}" -sketch "{build.path}/{build.project_name}.bin" -upload /sketch -d -v +# this is deprecated by pluggable discovery: +tools.avrdude.upload.network_pattern="{tools.arduino_ota.cmd}" -address {serial.port} -port 65280 -username arduino -password "{network.password}" -sketch "{build.path}/{build.project_name}.bin" -upload /sketch -d -v + +# ArduinoOTA +tools.arduino_ota.cmd={runtime.tools.arduinoOTA-1.3.0.path}/bin/arduinoOTA +tools.arduino_ota.upload.field.password=Password +tools.arduino_ota.upload.field.password.secret=true +tools.arduino_ota.upload.pattern="{tools.arduino_ota.cmd}" -address {upload.port.address} -port 65280 -username arduino -password "{upload.field.password}" -sketch "{build.path}/{build.project_name}.bin" -upload /sketch -d -v # USB Default Flags # Default blank usb manufacturer will be filled in at compile time diff --git a/programmers.txt b/programmers.txt index d9e83344..70af3a0a 100644 --- a/programmers.txt +++ b/programmers.txt @@ -3,4 +3,5 @@ medbg.communication=usb medbg.protocol=xplainedmini_updi medbg.program.protocol=xplainedmini_updi medbg.program.tool=avrdude -medbg.program.extra_params=-Pusb \ No newline at end of file +medbg.program.tool.default=avrdude +medbg.program.extra_params=-Pusb From c31614b921f4c44eb2b1a2d19b7b2f172fcb6b86 Mon Sep 17 00:00:00 2001 From: landret christophe <19358486+landret@users.noreply.github.com> Date: Wed, 13 Oct 2021 21:24:27 -1000 Subject: [PATCH 59/65] Fix bug in analogWrite when accessing 16 bit register (#94) Fix bug in analogWrite when accessing 16 bit register --- cores/arduino/wiring_analog.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/cores/arduino/wiring_analog.c b/cores/arduino/wiring_analog.c index cda2b4da..36ddc680 100644 --- a/cores/arduino/wiring_analog.c +++ b/cores/arduino/wiring_analog.c @@ -145,6 +145,8 @@ void analogWrite(uint8_t pin, int val) uint16_t* timer_cmp_out; TCB_t *timer_B; + uint8_t savedSREG; + /* Find out Port and Pin to correctly handle port mux, and timer. */ switch (digital_pin_timer) { @@ -153,7 +155,10 @@ void analogWrite(uint8_t pin, int val) timer_cmp_out = ((uint16_t*) (&TCA0.SINGLE.CMP0BUF)) + bit_pos; /* Configure duty cycle for correct compare channel */ - (*timer_cmp_out) = (val); + savedSREG = SREG; + cli(); + (*timer_cmp_out) = (val); // non-atomic 16-bit write operation + SREG = savedSREG; /* Enable output on pin */ TCA0.SINGLE.CTRLB |= (1 << (TCA_SINGLE_CMP0EN_bp + bit_pos)); @@ -170,7 +175,12 @@ void analogWrite(uint8_t pin, int val) timer_B = ((TCB_t *)&TCB0 + (digital_pin_timer - TIMERB0)); /* set duty cycle */ - timer_B->CCMPH = val; + // (16-bit read/write operation are non-atomic and use a temporary register) + savedSREG = SREG; + cli(); + timer_B->CCMPL = timer_B->CCMPL; // copy CCMPL into temporary register + timer_B->CCMPH = val; // set CCMPH value + copy temporary register content into CCMPL + SREG = savedSREG; /* Enable Timer Output */ timer_B->CTRLB |= (TCB_CCMPEN_bm); From d794ffd0fd745e4f4c156adbed6e8054dc88bc03 Mon Sep 17 00:00:00 2001 From: Silvano Cerza Date: Tue, 30 Nov 2021 12:15:46 +0100 Subject: [PATCH 60/65] Fix legacy upload.network_pattern rule --- platform.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/platform.txt b/platform.txt index 91eea6af..f2ad0cb5 100644 --- a/platform.txt +++ b/platform.txt @@ -128,8 +128,10 @@ tools.avrdude.bootloader.pattern="{cmd.path}" "-C{config.path}" {bootloader.verb tools.avrdude_remote.upload.pattern=/usr/bin/run-avrdude /tmp/sketch.hex {upload.verbose} -p{build.mcu} -# this is deprecated by pluggable discovery: -tools.avrdude.upload.network_pattern="{tools.arduino_ota.cmd}" -address {serial.port} -port 65280 -username arduino -password "{network.password}" -sketch "{build.path}/{build.project_name}.bin" -upload /sketch -d -v +# The following rule is deprecated by pluggable discovery. +# We keep it to avoid breaking compatibility with the Arduino Java IDE. +tools.avrdude.network_cmd={runtime.tools.arduinoOTA.path}/bin/arduinoOTA +tools.avrdude.upload.network_pattern="{network_cmd}" -address {serial.port} -port 65280 -username arduino -password "{network.password}" -sketch "{build.path}/{build.project_name}.bin" -upload /sketch -d -v # ArduinoOTA tools.arduino_ota.cmd={runtime.tools.arduinoOTA-1.3.0.path}/bin/arduinoOTA From 134ff962bf52645a6b18a1a9e082185de88d08ab Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Wed, 24 Aug 2022 11:13:00 +0200 Subject: [PATCH 61/65] Update compiler version for muxto (#122) --- .github/workflows/compile-muxto.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/compile-muxto.yml b/.github/workflows/compile-muxto.yml index f0e8948b..881699af 100644 --- a/.github/workflows/compile-muxto.yml +++ b/.github/workflows/compile-muxto.yml @@ -37,6 +37,8 @@ jobs: source-url: https://www.mattairtech.com/software/arduino/package_MattairTech_index.json # This needs to match with the version of MattairTech_Arduino:samd the Arduino fork is based on in order to get the right tool versions version: 1.6.17 + # Install officila samd version for compiler support + - name: arduino:samd # Install the platform with MuxTO support - name: arduino:samd source-url: https://github.com/arduino/ArduinoCore-samd.git From 01b56951ed2a8acfa7a4efc4e9a2687f626641d1 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 5 Dec 2022 10:26:17 +0100 Subject: [PATCH 62/65] Release 1.8.8 --- platform.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform.txt b/platform.txt index f2ad0cb5..50992217 100644 --- a/platform.txt +++ b/platform.txt @@ -6,7 +6,7 @@ # https://arduino.github.io/arduino-cli/latest/platform-specification/ name=Arduino megaAVR Boards -version=1.8.7 +version=1.8.8 # AVR compile variables # --------------------- From 7504ca7729ae4847f6b6db1df6b2e6af765649b7 Mon Sep 17 00:00:00 2001 From: Josefine Hansson <66409231+jhansson-ard@users.noreply.github.com> Date: Fri, 24 Feb 2023 12:03:34 +0100 Subject: [PATCH 63/65] Updated product names (#127) --- extras/package_index.json.NewTag.template | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extras/package_index.json.NewTag.template b/extras/package_index.json.NewTag.template index 1da2a8f8..fcc12676 100644 --- a/extras/package_index.json.NewTag.template +++ b/extras/package_index.json.NewTag.template @@ -23,7 +23,7 @@ }, "boards": [ { - "name": "Arduino Uno WiFi Rev2" + "name": "Arduino UNO WiFi Rev2" }, { "name": "Arduino Nano Every" @@ -51,4 +51,4 @@ "tools": [] } ] -} \ No newline at end of file +} From ffab9cb2e4bca7647f11d6e25727788aec597a03 Mon Sep 17 00:00:00 2001 From: Kateryna Lukina <94372596+kateryna-lukina@users.noreply.github.com> Date: Fri, 24 Feb 2023 12:04:02 +0100 Subject: [PATCH 64/65] Update boards.txt (#126) correct spelling of UNO --- boards.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boards.txt b/boards.txt index e5ca54b6..504c40af 100644 --- a/boards.txt +++ b/boards.txt @@ -2,7 +2,7 @@ ############################################################## -uno2018.name=Arduino Uno WiFi Rev2 +uno2018.name=Arduino UNO WiFi Rev2 uno2018.vid.0=0x03eb uno2018.pid.0=0x2145 From aa477bb589af002e7d974174eaf5594e74633b5f Mon Sep 17 00:00:00 2001 From: seaxwi <71350948+seaxwi@users.noreply.github.com> Date: Mon, 29 May 2023 11:51:16 +0200 Subject: [PATCH 65/65] New post_install.sh script that works for Nano Every --- post_install.sh | 28 ++++++++++++++++++++++++++++ scripts/create_dfu_udev_rule | 17 ----------------- 2 files changed, 28 insertions(+), 17 deletions(-) create mode 100644 post_install.sh delete mode 100755 scripts/create_dfu_udev_rule diff --git a/post_install.sh b/post_install.sh new file mode 100644 index 00000000..9a944e8a --- /dev/null +++ b/post_install.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash + +megaAVR_rules () { + echo "" + echo "# Arduino Mega AVR boards bootloader mode udev rules" + echo "" +cat < /etc/udev/rules.d/60-arduino-megaAVR.rules + +# reload udev rules +echo "Reload rules..." +udevadm control --reload-rules +udevadm trigger + diff --git a/scripts/create_dfu_udev_rule b/scripts/create_dfu_udev_rule deleted file mode 100755 index 89d2a8a3..00000000 --- a/scripts/create_dfu_udev_rule +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash -# - -if [ "$(id -u)" != "0" ]; then - echo "This script must be run as root" - exit -fi - -NAME=99-arduino-uno-wifi-rev2.rules - -echo >/etc/udev/rules.d/$NAME -echo \# Arduino UNO WiFi Rev2 mEDBG CMSIS-DAP >>/etc/udev/rules.d/$NAME -echo SUBSYSTEM==\"tty\", ENV{ID_REVISION}==\"03eb\", ENV{ID_MODEL_ID}==\"2145\", MODE=\"0666\", ENV{ID_MM_DEVICE_IGNORE}=\"1\", ENV{ID_MM_CANDIDATE}=\"0\" >>/etc/udev/rules.d/$NAME -echo SUBSYSTEM==\"usb\", ATTR{idVendor}==\"03eb\", ATTR{idProduct}==\"2145\", MODE=\"0666\", ENV{ID_MM_DEVICE_IGNORE}=\"1\" >>/etc/udev/rules.d/$NAME - -udevadm control --reload-rules -udevadm trigger